fix: 暴露 session follow-up 可见性
This commit is contained in:
+49
-40
@@ -213,7 +213,7 @@ function summarizeCommandShowResult(command: JsonValue, result: JsonValue, runId
|
||||
function summarizeResultEnvelope(record: JsonRecord | null): JsonRecord | null {
|
||||
if (!record) return null;
|
||||
return withoutFullRecordBytes(compactRecord(record, {
|
||||
keys: ["runId", "commandId", "attemptId", "runnerId", "jobName", "namespace", "status", "runStatus", "commandState", "terminalStatus", "terminalSource", "completed", "failureKind", "failureMessage", "lastSeq", "eventCount", "scopedEventCount", "scopedLastSeq", "runnerJobCount"],
|
||||
keys: ["ok", "executionOk", "runId", "commandId", "attemptId", "runnerId", "jobName", "namespace", "status", "runStatus", "commandState", "terminalStatus", "terminalSource", "providerTerminalFailure", "recoverableViaSession", "completed", "finalResponseAuthority", "finalResponseFallback", "needsContinuation", "failureKind", "failureMessage", "lastSeq", "eventCount", "scopedEventCount", "scopedLastSeq", "runnerJobCount"],
|
||||
}));
|
||||
}
|
||||
|
||||
@@ -262,17 +262,16 @@ function summarizeDiagnosisRecord(record: JsonRecord | null): JsonRecord | null
|
||||
|
||||
function summarizeFinalResponseRecord(record: JsonRecord | null): JsonRecord | null {
|
||||
if (!record) return null;
|
||||
return withoutFullRecordBytes(compactRecord(record, { keys: ["seq", "source", "final", "replyAuthority", "textTruncated", "outputTruncated", "text"] }));
|
||||
return withoutFullRecordBytes(compactRecord(record, { keys: ["seq", "source", "final", "replyAuthority", "authority", "fallback", "needsContinuation", "textTruncated", "outputTruncated", "text"] }));
|
||||
}
|
||||
|
||||
function runCommandDrillDown(runId: string, commandId: string | null, sessionId: string | null, lastSeq: number): JsonRecord {
|
||||
return {
|
||||
run: `./scripts/agentrun runs show ${runId}`,
|
||||
runFull: `./scripts/agentrun runs show ${runId} --full`,
|
||||
result: `./scripts/agentrun runs result ${runId}${commandId ? ` --command-id ${commandId}` : ""}`,
|
||||
events: `./scripts/agentrun runs events ${runId} --after-seq ${lastSeq} --limit 100 --tail-summary`,
|
||||
...(commandId ? { command: `./scripts/agentrun commands show ${commandId} --run-id ${runId}`, commandResult: `./scripts/agentrun commands result ${commandId} --run-id ${runId}` } : {}),
|
||||
...(sessionId ? { trace: `./scripts/agentrun sessions trace ${sessionId} --after-seq ${lastSeq} --limit 100 --run-id ${runId}`, output: `./scripts/agentrun sessions output ${sessionId} --after-seq ${lastSeq} --limit 100 --run-id ${runId}` } : {}),
|
||||
run: `describe run/${runId}`,
|
||||
result: `result run/${runId}${commandId ? ` --command ${commandId}` : ""}`,
|
||||
events: `events run/${runId} --after-seq ${lastSeq} --limit 100`,
|
||||
...(commandId ? { command: `describe command/${commandId} --run ${runId}`, commandResult: `result command/${commandId} --run ${runId}` } : {}),
|
||||
...(sessionId ? { logs: `logs session/${sessionId} --tail 100`, send: `send session/${sessionId} --prompt-stdin` } : {}),
|
||||
valuesPrinted: false,
|
||||
};
|
||||
}
|
||||
@@ -405,11 +404,10 @@ export function summarizeQueueDispatchResult(result: JsonValue, taskId: string):
|
||||
fullResponseBytes: jsonByteLength(result),
|
||||
valuesPrinted: false,
|
||||
pollCommands: {
|
||||
queue: `./scripts/agentrun queue show ${stringValue(task?.id) ?? taskId}`,
|
||||
...(runId ? { run: `./scripts/agentrun runs show ${runId}` } : {}),
|
||||
...(runId && commandId ? { command: `./scripts/agentrun commands show ${commandId} --run-id ${runId}` } : {}),
|
||||
...(runId ? { events: `./scripts/agentrun runs events ${runId} --after-seq 0 --limit 100 --tail-summary` } : {}),
|
||||
...(sessionId ? { trace: `./scripts/agentrun sessions trace ${sessionId} --after-seq 0 --limit 100`, output: `./scripts/agentrun sessions output ${sessionId} --after-seq 0 --limit 100` } : {}),
|
||||
queue: `describe task/${stringValue(task?.id) ?? taskId}`,
|
||||
...(runId ? { run: `describe run/${runId}`, result: `result run/${runId}${commandId ? ` --command ${commandId}` : ""}`, events: `events run/${runId} --after-seq 0 --limit 100` } : {}),
|
||||
...(runId && commandId ? { command: `describe command/${commandId} --run ${runId}` } : {}),
|
||||
...(sessionId ? { logs: `logs session/${sessionId} --tail 100`, send: `send session/${sessionId} --prompt-stdin` } : {}),
|
||||
},
|
||||
expandedOutput: {
|
||||
fullFlag: "--full",
|
||||
@@ -665,11 +663,11 @@ function summarizeSessionMutationResult(action: "session-cancel" | "session-read
|
||||
fullResponseBytes: jsonByteLength(result),
|
||||
valuesPrinted: false,
|
||||
drillDownCommands: {
|
||||
show: `./scripts/agentrun sessions show ${sessionId} --reader-id cli`,
|
||||
trace: `./scripts/agentrun sessions trace ${sessionId} --after-seq 0 --limit 100`,
|
||||
output: `./scripts/agentrun sessions output ${sessionId} --after-seq 0 --limit 100`,
|
||||
traceFull: `./scripts/agentrun sessions trace ${sessionId} --after-seq 0 --limit 100 --full`,
|
||||
outputFull: `./scripts/agentrun sessions output ${sessionId} --after-seq 0 --limit 100 --full`,
|
||||
show: `describe session/${sessionId}`,
|
||||
logs: `logs session/${sessionId} --tail 100`,
|
||||
send: `send session/${sessionId} --prompt-stdin`,
|
||||
read: `ack session/${sessionId}`,
|
||||
cancel: `cancel session/${sessionId}`,
|
||||
},
|
||||
expandedOutput: {
|
||||
fullFlag: "--full",
|
||||
@@ -703,11 +701,13 @@ function summarizeSessionSendResult(result: JsonValue, sessionId: string, profil
|
||||
fullResponseBytes: jsonByteLength(result),
|
||||
valuesPrinted: false,
|
||||
drillDownCommands: {
|
||||
show: `./scripts/agentrun sessions show ${sessionId} --reader-id cli`,
|
||||
trace: `./scripts/agentrun sessions trace ${sessionId} --after-seq ${afterSeq} --limit 100`,
|
||||
output: `./scripts/agentrun sessions output ${sessionId} --after-seq ${afterSeq} --limit 100`,
|
||||
read: `./scripts/agentrun sessions read ${sessionId} --reader-id cli`,
|
||||
cancel: `./scripts/agentrun sessions cancel ${sessionId}`,
|
||||
show: `describe session/${sessionId}`,
|
||||
logs: `logs session/${sessionId} --tail 100`,
|
||||
...(stringValue(run?.id) ? { events: `events run/${String(run?.id)} --after-seq ${afterSeq} --limit 100` } : {}),
|
||||
...(stringValue(run?.id) && stringValue(command?.id) ? { result: `result run/${String(run?.id)} --command ${String(command?.id)}` } : {}),
|
||||
send: `send session/${sessionId} --prompt-stdin`,
|
||||
read: `ack session/${sessionId}`,
|
||||
cancel: `cancel session/${sessionId}`,
|
||||
},
|
||||
expandedOutput: {
|
||||
fullFlag: "--full",
|
||||
@@ -796,10 +796,10 @@ export function summarizeQueueTaskShowResult(result: JsonValue, taskId: string):
|
||||
fullResponseBytes: jsonByteLength(result),
|
||||
valuesPrinted: false,
|
||||
pollCommands: {
|
||||
full: `./scripts/agentrun queue show ${taskId} --full`,
|
||||
...(runId ? { run: `./scripts/agentrun runs show ${runId}`, events: `./scripts/agentrun runs events ${runId} --after-seq ${afterSeq} --limit 100 --tail-summary` } : {}),
|
||||
...(runId && commandId ? { command: `./scripts/agentrun commands show ${commandId} --run-id ${runId}` } : {}),
|
||||
...(sessionId ? { trace: `./scripts/agentrun sessions trace ${sessionId} --after-seq 0 --limit 100`, output: `./scripts/agentrun sessions output ${sessionId} --after-seq 0 --limit 100` } : {}),
|
||||
full: `describe task/${taskId} --full`,
|
||||
...(runId ? { run: `describe run/${runId}`, result: `result run/${runId}${commandId ? ` --command ${commandId}` : ""}`, events: `events run/${runId} --after-seq ${afterSeq} --limit 100` } : {}),
|
||||
...(runId && commandId ? { command: `describe command/${commandId} --run ${runId}` } : {}),
|
||||
...(sessionId ? { logs: `logs session/${sessionId} --tail 100`, send: `send session/${sessionId} --prompt-stdin` } : {}),
|
||||
},
|
||||
};
|
||||
}
|
||||
@@ -814,6 +814,7 @@ export function summarizeQueueCommanderSnapshot(result: JsonValue, options: Queu
|
||||
queue: stringValue(record.queue),
|
||||
readerId: stringValue(record.readerId),
|
||||
stats: summarizeQueueStats(jsonRecordValue(record.stats)),
|
||||
activeSessionCount: numberValue(record.activeSessionCount),
|
||||
sourceCount: items.length,
|
||||
displayedCount: selected.length,
|
||||
limit: options.limit,
|
||||
@@ -824,13 +825,15 @@ export function summarizeQueueCommanderSnapshot(result: JsonValue, options: Queu
|
||||
fullResponseBytes: jsonByteLength(result),
|
||||
valuesPrinted: false,
|
||||
drillDownCommands: {
|
||||
full: "./scripts/agentrun queue commander --reader-id cli --full",
|
||||
raw: "./scripts/agentrun queue commander --reader-id cli --raw",
|
||||
item: "./scripts/agentrun queue show <taskId>",
|
||||
run: "./scripts/agentrun runs show <runId>",
|
||||
events: "./scripts/agentrun runs events <runId> --after-seq <lastSeq> --limit 100 --tail-summary",
|
||||
command: "./scripts/agentrun commands show <commandId> --run-id <runId>",
|
||||
sessionHint: "session trace/output 只在 queue show <taskId> 的 per-task pollCommands 中按实际 sessionId 输出",
|
||||
full: "get tasks --queue commander -o wide",
|
||||
item: "describe task/<taskId>",
|
||||
run: "describe run/<runId>",
|
||||
events: "events run/<runId> --after-seq <lastSeq> --limit 100",
|
||||
result: "result run/<runId> --command <commandId>",
|
||||
command: "describe command/<commandId> --run <runId>",
|
||||
logs: "logs session/<sessionId> --tail 100",
|
||||
send: "send session/<sessionId> --prompt-stdin",
|
||||
sessionHint: "细节按实际 run/session 走 result/events/logs;续跑只用 send session/<sessionId>",
|
||||
},
|
||||
};
|
||||
}
|
||||
@@ -948,9 +951,11 @@ function summarizeQueueTaskWithAttempt(record: JsonRecord | null, fallbackTaskId
|
||||
const summary = summarizeQueueTaskRecord(record, fallbackTaskId);
|
||||
const latestAttempt = summarizeAttemptRecord(jsonRecordValue(record?.latestAttempt));
|
||||
const supervisor = summarizeSupervisorRecord(jsonRecordValue(record?.supervisor));
|
||||
const activeSession = summarizeActiveSessionRecord(jsonRecordValue(record?.activeSession));
|
||||
const sessionRef = jsonRecordValue(record?.sessionRef);
|
||||
if (latestAttempt) summary.latestAttempt = latestAttempt;
|
||||
if (supervisor) summary.supervisor = supervisor;
|
||||
if (activeSession) summary.activeSession = activeSession;
|
||||
const sessionId = stringValue(sessionRef?.sessionId) ?? stringValue(latestAttempt?.sessionId);
|
||||
if (sessionId) summary.sessionId = sessionId;
|
||||
if (record?.readCursor !== undefined) summary.read = record.readCursor !== null;
|
||||
@@ -994,7 +999,7 @@ function summarizeSupervisorRecord(record: JsonRecord | null): JsonRecord | null
|
||||
const terminalClassification = jsonRecordValue(record.terminalClassification);
|
||||
const diagnosis = jsonRecordValue(record.diagnosis);
|
||||
return {
|
||||
...withoutFullRecordBytes(compactRecord(record, { keys: ["phase", "active", "status", "terminalStatus", "failureKind", "runId", "commandId", "lastSeq", "lastEventAt", "lastEventAgeMs", "leaseRemainingMs", "leaseExpired"] })),
|
||||
...withoutFullRecordBytes(compactRecord(record, { keys: ["source", "sessionId", "executionState", "attentionState", "active", "activeRunId", "activeCommandId", "attemptRunId", "attemptCommandId", "phase", "status", "terminalStatus", "failureKind", "runId", "commandId", "lastSeq", "lastEventAt", "lastEventAgeMs", "leaseRemainingMs", "leaseExpired"] })),
|
||||
diagnosis: diagnosis ? summarizeDiagnosisRecord(diagnosis) : null,
|
||||
terminalClassification: terminalClassification ? summarizeTerminalClassification(terminalClassification) : null,
|
||||
lastActivity: lastActivity ? withoutFullRecordBytes(compactRecord(lastActivity, { keys: ["sourceSeq", "eventId", "activityKind", "type", "status", "toolName", "itemId", "ageMs", "summary"] })) : null,
|
||||
@@ -1004,8 +1009,13 @@ function summarizeSupervisorRecord(record: JsonRecord | null): JsonRecord | null
|
||||
};
|
||||
}
|
||||
|
||||
function summarizeActiveSessionRecord(record: JsonRecord | null): JsonRecord | null {
|
||||
if (!record) return null;
|
||||
return withoutFullRecordBytes(compactRecord(record, { keys: ["sessionId", "sessionPath", "executionState", "attentionState", "active", "activeRunId", "activeCommandId", "lastRunId", "lastCommandId", "terminalStatus", "failureKind", "lastActivityAt", "updatedAt"] }));
|
||||
}
|
||||
|
||||
function summarizeTerminalClassification(record: JsonRecord): JsonRecord {
|
||||
return withoutFullRecordBytes(compactRecord(record, { keys: ["category", "confidence", "providerEvidence", "providerInterruption", "providerInterruptionKnown", "providerInterruptionReason", "retryInterruptionObserved", "retryInterruptionSeq", "retryInterruptionKind", "hardTimeout", "idleTimeout", "timeoutKind", "timeoutState", "transportDisconnectObserved", "transportDisconnectSeq", "reason"] }));
|
||||
return withoutFullRecordBytes(compactRecord(record, { keys: ["category", "confidence", "terminalStatus", "failureKind", "providerEvidence", "providerInterruption", "providerInterruptionKnown", "providerInterruptionReason", "retryInterruptionObserved", "retryInterruptionSeq", "retryInterruptionKind", "hardTimeout", "idleTimeout", "timeoutKind", "timeoutState", "transportDisconnectObserved", "transportDisconnectSeq", "reason"] }));
|
||||
}
|
||||
|
||||
function summarizeRecoveryActions(value: JsonValue | undefined): JsonValue[] {
|
||||
@@ -1215,10 +1225,9 @@ async function sessionCreate(args: ParsedArgs, positionalSessionId: string | nul
|
||||
pvc: created.pvc,
|
||||
storage,
|
||||
pollCommands: {
|
||||
show: `./scripts/agentrun sessions show ${sessionId} --reader-id cli`,
|
||||
storage: `./scripts/agentrun sessions storage ${sessionId}`,
|
||||
trace: `./scripts/agentrun sessions trace ${sessionId} --after-seq 0 --limit 100`,
|
||||
send: `./scripts/agentrun sessions send ${sessionId} --prompt "..."`,
|
||||
show: `describe session/${sessionId}`,
|
||||
logs: `logs session/${sessionId} --tail 100`,
|
||||
send: `send session/${sessionId} --prompt-stdin`,
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user