Merge pull request #1421 from pikasTech/codex/1413-read-sanitize-stale-workspace
fix: 过滤旧 workspace trace 读取
This commit is contained in:
@@ -999,6 +999,28 @@ test("workbench workspace read does not repair terminal selected conversation af
|
|||||||
assert.equal(restored.body.workspace.selectedConversation.messages.some((message) => message.text === "repair completed"), false);
|
assert.equal(restored.body.workspace.selectedConversation.messages.some((message) => message.text === "repair completed"), false);
|
||||||
assert.equal(restored.body.workspace.revision, 2);
|
assert.equal(restored.body.workspace.revision, 2);
|
||||||
assert.equal(agentRunCalls.length, 0);
|
assert.equal(agentRunCalls.length, 0);
|
||||||
|
|
||||||
|
const legacyStale = await patchJson(port, `/v1/workbench/workspace/${workspace.body.workspace.workspaceId}`, {
|
||||||
|
expectedRevision: 2,
|
||||||
|
workspace: {
|
||||||
|
selectedConversationId: "cnv_legacy_stale_workspace",
|
||||||
|
selectedAgentSessionId: "ses_legacy_stale_workspace",
|
||||||
|
providerProfile: "deepseek",
|
||||||
|
sessionStatus: "running",
|
||||||
|
lastTraceId: "trc_legacy_stale_workspace"
|
||||||
|
},
|
||||||
|
updatedByClient: "test-suite-legacy-stale"
|
||||||
|
}, aliceLogin.cookie);
|
||||||
|
assert.equal(legacyStale.status, 200);
|
||||||
|
assert.equal(legacyStale.body.workspace.activeTraceId, null);
|
||||||
|
assert.equal(legacyStale.body.workspace.workspace.lastTraceId, undefined);
|
||||||
|
assert.equal(legacyStale.body.workspace.workspace.sessionStatus, undefined);
|
||||||
|
|
||||||
|
const legacyRestored = await getJson(port, "/v1/workbench/workspace?projectId=prj_hwpod_workbench", aliceLogin.cookie);
|
||||||
|
assert.equal(legacyRestored.status, 200);
|
||||||
|
assert.equal(legacyRestored.body.workspace.activeTraceId, null);
|
||||||
|
assert.equal(legacyRestored.body.workspace.workspace.lastTraceId, undefined);
|
||||||
|
assert.equal(legacyRestored.body.workspace.workspace.sessionStatus, undefined);
|
||||||
} finally {
|
} finally {
|
||||||
await new Promise((resolve, reject) => server.close((error) => (error ? reject(error) : resolve())));
|
await new Promise((resolve, reject) => server.close((error) => (error ? reject(error) : resolve())));
|
||||||
await new Promise((resolve, reject) => agentRunServer.close((error) => (error ? reject(error) : resolve())));
|
await new Promise((resolve, reject) => agentRunServer.close((error) => (error ? reject(error) : resolve())));
|
||||||
|
|||||||
@@ -2133,14 +2133,17 @@ function workspaceJsonForSelectedConversation(workspace, conversation = null) {
|
|||||||
}
|
}
|
||||||
function redactedWorkspaceJson(value = {}) {
|
function redactedWorkspaceJson(value = {}) {
|
||||||
const workspace = normalizeObject(value);
|
const workspace = normalizeObject(value);
|
||||||
|
const activeTraceId = textOr(workspace.activeTraceId, "");
|
||||||
|
const sessionStatus = textOr(workspace.sessionStatus, "");
|
||||||
|
const staleActiveSessionStatus = !activeTraceId && isActiveConversationStatus(sessionStatus);
|
||||||
return pruneEmpty({
|
return pruneEmpty({
|
||||||
selectedConversationId: textOr(workspace.selectedConversationId, ""),
|
selectedConversationId: textOr(workspace.selectedConversationId, ""),
|
||||||
selectedAgentSessionId: textOr(workspace.selectedAgentSessionId, ""),
|
selectedAgentSessionId: textOr(workspace.selectedAgentSessionId, ""),
|
||||||
activeTraceId: textOr(workspace.activeTraceId, ""),
|
activeTraceId,
|
||||||
previousActiveTraceId: textOr(workspace.previousActiveTraceId, ""),
|
previousActiveTraceId: textOr(workspace.previousActiveTraceId, ""),
|
||||||
providerProfile: textOr(workspace.providerProfile, ""),
|
providerProfile: textOr(workspace.providerProfile, ""),
|
||||||
sessionStatus: textOr(workspace.sessionStatus, ""),
|
sessionStatus: staleActiveSessionStatus ? "" : sessionStatus,
|
||||||
lastTraceId: textOr(workspace.lastTraceId, ""),
|
lastTraceId: activeTraceId ? textOr(workspace.lastTraceId, "") : "",
|
||||||
workspaceRevisionConflict: workspace.workspaceRevisionConflict === true,
|
workspaceRevisionConflict: workspace.workspaceRevisionConflict === true,
|
||||||
expectedWorkspaceRevision: Number.isFinite(Number(workspace.expectedWorkspaceRevision)) ? Number(workspace.expectedWorkspaceRevision) : undefined,
|
expectedWorkspaceRevision: Number.isFinite(Number(workspace.expectedWorkspaceRevision)) ? Number(workspace.expectedWorkspaceRevision) : undefined,
|
||||||
staleContinuationCleared: workspace.staleContinuationCleared === true,
|
staleContinuationCleared: workspace.staleContinuationCleared === true,
|
||||||
|
|||||||
Reference in New Issue
Block a user