Merged via /review-pr -> /prepare-pr -> /merge-pr. Prepared head SHA: 7533b85156186863609fee9379cd9aedf74435af Co-authored-by: gumadeiras <5599352+gumadeiras@users.noreply.github.com> Co-authored-by: shakkernerd <165377636+shakkernerd@users.noreply.github.com> Reviewed-by: @shakkernerd
81 lines
2.2 KiB
TypeScript
81 lines
2.2 KiB
TypeScript
import { listAgentIds, resolveDefaultAgentId } from "../agents/agent-scope.js";
|
|
import { resolveStorePath } from "../config/sessions.js";
|
|
import type { OpenClawConfig } from "../config/types.openclaw.js";
|
|
import { normalizeAgentId } from "../routing/session-key.js";
|
|
|
|
export type SessionStoreSelectionOptions = {
|
|
store?: string;
|
|
agent?: string;
|
|
allAgents?: boolean;
|
|
};
|
|
|
|
export type SessionStoreTarget = {
|
|
agentId: string;
|
|
storePath: string;
|
|
};
|
|
|
|
function dedupeTargetsByStorePath(targets: SessionStoreTarget[]): SessionStoreTarget[] {
|
|
const deduped = new Map<string, SessionStoreTarget>();
|
|
for (const target of targets) {
|
|
if (!deduped.has(target.storePath)) {
|
|
deduped.set(target.storePath, target);
|
|
}
|
|
}
|
|
return [...deduped.values()];
|
|
}
|
|
|
|
export function resolveSessionStoreTargets(
|
|
cfg: OpenClawConfig,
|
|
opts: SessionStoreSelectionOptions,
|
|
): SessionStoreTarget[] {
|
|
const defaultAgentId = resolveDefaultAgentId(cfg);
|
|
const hasAgent = Boolean(opts.agent?.trim());
|
|
const allAgents = opts.allAgents === true;
|
|
if (hasAgent && allAgents) {
|
|
throw new Error("--agent and --all-agents cannot be used together");
|
|
}
|
|
if (opts.store && (hasAgent || allAgents)) {
|
|
throw new Error("--store cannot be combined with --agent or --all-agents");
|
|
}
|
|
|
|
if (opts.store) {
|
|
return [
|
|
{
|
|
agentId: defaultAgentId,
|
|
storePath: resolveStorePath(opts.store, { agentId: defaultAgentId }),
|
|
},
|
|
];
|
|
}
|
|
|
|
if (allAgents) {
|
|
const targets = listAgentIds(cfg).map((agentId) => ({
|
|
agentId,
|
|
storePath: resolveStorePath(cfg.session?.store, { agentId }),
|
|
}));
|
|
return dedupeTargetsByStorePath(targets);
|
|
}
|
|
|
|
if (hasAgent) {
|
|
const knownAgents = listAgentIds(cfg);
|
|
const requested = normalizeAgentId(opts.agent ?? "");
|
|
if (!knownAgents.includes(requested)) {
|
|
throw new Error(
|
|
`Unknown agent id "${opts.agent}". Use "openclaw agents list" to see configured agents.`,
|
|
);
|
|
}
|
|
return [
|
|
{
|
|
agentId: requested,
|
|
storePath: resolveStorePath(cfg.session?.store, { agentId: requested }),
|
|
},
|
|
];
|
|
}
|
|
|
|
return [
|
|
{
|
|
agentId: defaultAgentId,
|
|
storePath: resolveStorePath(cfg.session?.store, { agentId: defaultAgentId }),
|
|
},
|
|
];
|
|
}
|