mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-06 18:10:45 +00:00
fix: normalize blank agent session ids
This commit is contained in:
@@ -143,9 +143,10 @@ export function resolveSessionKeyForRequest(opts: {
|
||||
const scope = sessionCfg?.scope ?? "per-sender";
|
||||
const mainKey = normalizeMainKey(sessionCfg?.mainKey);
|
||||
const requestedAgentId = opts.agentId?.trim() ? normalizeAgentId(opts.agentId) : undefined;
|
||||
const requestedSessionId = opts.sessionId?.trim() || undefined;
|
||||
const explicitSessionKey =
|
||||
opts.sessionKey?.trim() ||
|
||||
(!opts.sessionId
|
||||
(!requestedSessionId
|
||||
? resolveExplicitAgentSessionKey({
|
||||
cfg: opts.cfg,
|
||||
agentId: requestedAgentId,
|
||||
@@ -168,23 +169,23 @@ export function resolveSessionKeyForRequest(opts: {
|
||||
// by the shared gateway/session resolver helpers instead of whichever store happens to be scanned
|
||||
// first.
|
||||
if (
|
||||
opts.sessionId &&
|
||||
requestedSessionId &&
|
||||
!explicitSessionKey &&
|
||||
(!sessionKey || sessionStore[sessionKey]?.sessionId !== opts.sessionId)
|
||||
(!sessionKey || sessionStore[sessionKey]?.sessionId !== requestedSessionId)
|
||||
) {
|
||||
const { matches, primaryStoreMatches, storeByKey } = collectSessionIdMatchesForRequest({
|
||||
cfg: opts.cfg,
|
||||
sessionStore,
|
||||
storePath,
|
||||
storeAgentId,
|
||||
sessionId: opts.sessionId,
|
||||
sessionId: requestedSessionId,
|
||||
searchOtherAgentStores: requestedAgentId === undefined,
|
||||
});
|
||||
const preferredSelection = resolveSessionIdMatchSelection(matches, opts.sessionId);
|
||||
const preferredSelection = resolveSessionIdMatchSelection(matches, requestedSessionId);
|
||||
const currentStoreSelection =
|
||||
preferredSelection.kind === "selected"
|
||||
? preferredSelection
|
||||
: resolveSessionIdMatchSelection(primaryStoreMatches, opts.sessionId);
|
||||
: resolveSessionIdMatchSelection(primaryStoreMatches, requestedSessionId);
|
||||
if (currentStoreSelection.kind === "selected") {
|
||||
const preferred = storeByKey.get(currentStoreSelection.sessionKey);
|
||||
if (preferred) {
|
||||
@@ -194,9 +195,9 @@ export function resolveSessionKeyForRequest(opts: {
|
||||
}
|
||||
}
|
||||
|
||||
if (opts.sessionId && !sessionKey) {
|
||||
if (requestedSessionId && !sessionKey) {
|
||||
sessionKey = buildExplicitSessionIdSessionKey({
|
||||
sessionId: opts.sessionId,
|
||||
sessionId: requestedSessionId,
|
||||
agentId: opts.agentId,
|
||||
});
|
||||
}
|
||||
|
||||
@@ -126,6 +126,25 @@ describe("resolveSessionKeyForRequest", () => {
|
||||
expect(result.storePath).toBe(MYBOT_STORE_PATH);
|
||||
});
|
||||
|
||||
it("treats whitespace --session-id as absent when resolving --agent", async () => {
|
||||
setupMainAndMybotStorePaths();
|
||||
mocks.resolveExplicitAgentSessionKey.mockReturnValue("agent:mybot:main");
|
||||
mockStoresByPath({
|
||||
[MYBOT_STORE_PATH]: {
|
||||
"agent:mybot:main": { sessionId: "existing-session-id", updatedAt: 1 },
|
||||
},
|
||||
});
|
||||
|
||||
const result = resolveSessionKeyForRequest({
|
||||
cfg: baseCfg,
|
||||
agentId: "mybot",
|
||||
sessionId: " ",
|
||||
});
|
||||
|
||||
expect(result.sessionKey).toBe("agent:mybot:main");
|
||||
expect(result.storePath).toBe(MYBOT_STORE_PATH);
|
||||
});
|
||||
|
||||
it("does not search other agent stores when --agent scopes --session-id", async () => {
|
||||
setupMainAndMybotStorePaths();
|
||||
mockStoresByPath({
|
||||
|
||||
Reference in New Issue
Block a user