mirror of
https://github.com/openclaw/openclaw.git
synced 2026-08-24 19:35:28 -06:00
1ca60fbc3a
* refactor(agents): make roster ownership explicit * feat(config): materialize legacy agent roles * fix(cron): migrate legacy owners at startup * feat(gateway): expose agent selection contracts * fix(gateway): enforce agent-scoped authorization * docs(config): document explicit agent ownership * fix(config): pin retained owner workspace * fix(gateway): target hook wakes at effective agent * fix(sessions): preserve fixed-store ownership * fix: preserve retained agent ownership * fix: preserve legacy agent ownership across runtime surfaces * fix: fail closed on ambiguous session ownership * fix: preserve compatibility owners across dispatch and writes * fix: preserve retained agent projections * fix: preserve agent ownership compatibility * fix: preserve per-agent heartbeat guidance * fix: preserve compatibility owners in generic paths * fix: enforce configured ownership in session paths * fix: defer remote roster selection * fix: preserve ownership across session and config writes * fix: fail closed on ambiguous restored ownership * fix: preserve explicit ACP and legacy ownership * fix: honor durable fixed-store ownership * fix: enforce fixed-store owner authority * fix: preserve ownership evidence boundaries * fix: honor resolved session ownership * fix: align compatibility ownership paths * fix: persist legacy main store ownership * fix: close ownership fallback gaps * fix(agents): close retained owner compatibility gaps * fix(agents): enforce session owner resolution * fix(agents): complete session owner resolution sweep * fix(agents): preserve durable session ownership * fix: complete persisted session owner routing * fix: thread prepared session owners * fix: preserve stable session ownership * fix: enforce session ownership boundaries * fix: close session ownership delta gaps * fix: reconcile session ownership after rebase * fix: reconcile ownership with current main * fix: align session store path imports * fix: align session store config path import * fix: reconcile explicit ownership CI * fix: reconcile ownership rebase checks * fix: align ownership ci contracts * fix: align ownership rebase checks * fix: preserve compatibility owner during setup * fix(doctor): migrate ownerless heartbeat monitors * fix(gateway): preserve explicit session ownership * test: align ownership fixtures after rebase * test: complete plugin manifest fixture * test: align runtime context mocks * fix(gateway): preserve alias routing for existing sessions * style: format agent routing update * fix(gateway): preserve selected owner during alias routing * style: normalize rebased ownership files * fix(gateway): preserve owner through global alias routing * fix(gateway): preserve explicit ownership at HTTP boundaries * fix(gateway): validate compatibility model ownership * fix(agents): reconcile strict session ownership * fix(agents): contain media yield callback failures * fix(agents): avoid eager bare-key owner resolution * chore: refresh rebased ownership baselines * chore: align hosted plugin SDK baseline * chore: refresh ownership baselines after main sync * chore: refresh ownership baselines after main sync * test: align routed event owner fixtures * chore: retrigger CI after runner startup failure * chore: refresh ownership SDK budgets after main sync * fix(tasks): require agent identity for bare owners * chore: align Linux plugin SDK baseline * chore: remove release-owned changelog entry
41 lines
1.3 KiB
TypeScript
41 lines
1.3 KiB
TypeScript
import { normalizeOptionalString } from "@openclaw/normalization-core/string-coerce";
|
|
import { isIncognitoSessionKey } from "../routing/session-key.js";
|
|
|
|
export type SessionMutationTarget = {
|
|
sessionKey: string;
|
|
agentId?: string;
|
|
};
|
|
|
|
export function resolveDirectIncognitoTargets(
|
|
method: string,
|
|
params: unknown,
|
|
): SessionMutationTarget[] {
|
|
if (method === "sessions.create" || method === "sessions.list") {
|
|
return [];
|
|
}
|
|
if (!params || typeof params !== "object" || Array.isArray(params)) {
|
|
return [];
|
|
}
|
|
const record = params as Record<string, unknown>;
|
|
const candidates = [record.key, record.sessionKey];
|
|
if (Array.isArray(record.keys)) {
|
|
candidates.push(...record.keys);
|
|
}
|
|
if (Array.isArray(record.sessionKeys)) {
|
|
candidates.push(...record.sessionKeys);
|
|
}
|
|
const agentId = normalizeOptionalString(record.agentId);
|
|
return candidates.flatMap((candidate): SessionMutationTarget[] =>
|
|
typeof candidate === "string" && isIncognitoSessionKey(candidate)
|
|
? [{ sessionKey: candidate, ...(agentId ? { agentId } : {}) }]
|
|
: [],
|
|
);
|
|
}
|
|
|
|
export function readSessionSharingStringParam(params: unknown, key: string): string | undefined {
|
|
if (!params || typeof params !== "object" || Array.isArray(params)) {
|
|
return undefined;
|
|
}
|
|
return normalizeOptionalString((params as Record<string, unknown>)[key]);
|
|
}
|