@scotthuang/agent-knock-knock 0.14.2 → 0.14.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +26 -0
- package/README.md +233 -108
- package/dist/src/backend-callback-public-projection.d.ts +27 -0
- package/dist/src/backend-callback-public-projection.js +58 -0
- package/dist/src/backend-callback-public-projection.js.map +1 -0
- package/dist/src/backend-public-progress.d.ts +2 -0
- package/dist/src/backend-public-progress.js +4 -1
- package/dist/src/backend-public-progress.js.map +1 -1
- package/dist/src/backend-recovery-semantic.js +5 -4
- package/dist/src/backend-recovery-semantic.js.map +1 -1
- package/dist/src/callback-transport.d.ts +1 -1
- package/dist/src/callback-transport.js +2 -2
- package/dist/src/callback-transport.js.map +1 -1
- package/dist/src/claude-conversation-routing-cli-adapter.d.ts +2 -0
- package/dist/src/claude-conversation-routing-cli-adapter.js +127 -0
- package/dist/src/claude-conversation-routing-cli-adapter.js.map +1 -0
- package/dist/src/claude-conversation-routing-identity.d.ts +11 -0
- package/dist/src/claude-conversation-routing-identity.js +46 -0
- package/dist/src/claude-conversation-routing-identity.js.map +1 -0
- package/dist/src/claude-native-cli-adapter.d.ts +18 -0
- package/dist/src/claude-native-cli-adapter.js +159 -0
- package/dist/src/claude-native-cli-adapter.js.map +1 -0
- package/dist/src/claude-native-client.d.ts +57 -0
- package/dist/src/claude-native-client.js +197 -0
- package/dist/src/claude-native-client.js.map +1 -0
- package/dist/src/claude-native-discovery.d.ts +20 -0
- package/dist/src/claude-native-discovery.js +111 -0
- package/dist/src/claude-native-discovery.js.map +1 -0
- package/dist/src/claude-native-identity.d.ts +29 -0
- package/dist/src/claude-native-identity.js +54 -0
- package/dist/src/claude-native-identity.js.map +1 -0
- package/dist/src/claude-native-monitor.d.ts +13 -0
- package/dist/src/claude-native-monitor.js +123 -0
- package/dist/src/claude-native-monitor.js.map +1 -0
- package/dist/src/claude-native-observation.d.ts +54 -0
- package/dist/src/claude-native-observation.js +418 -0
- package/dist/src/claude-native-observation.js.map +1 -0
- package/dist/src/claude-native-outbox.d.ts +16 -0
- package/dist/src/claude-native-outbox.js +122 -0
- package/dist/src/claude-native-outbox.js.map +1 -0
- package/dist/src/claude-native-peer-helper.d.ts +2 -0
- package/dist/src/claude-native-peer-helper.js +121 -0
- package/dist/src/claude-native-peer-helper.js.map +1 -0
- package/dist/src/claude-native-public-projection.d.ts +605 -0
- package/dist/src/claude-native-public-projection.js +98 -0
- package/dist/src/claude-native-public-projection.js.map +1 -0
- package/dist/src/claude-native-runtime.d.ts +25 -0
- package/dist/src/claude-native-runtime.js +74 -0
- package/dist/src/claude-native-runtime.js.map +1 -0
- package/dist/src/claude-native-state-store.d.ts +49 -0
- package/dist/src/claude-native-state-store.js +96 -0
- package/dist/src/claude-native-state-store.js.map +1 -0
- package/dist/src/claude-native-task-service.d.ts +70 -0
- package/dist/src/claude-native-task-service.js +327 -0
- package/dist/src/claude-native-task-service.js.map +1 -0
- package/dist/src/cli-core.js +2 -1
- package/dist/src/cli-core.js.map +1 -1
- package/dist/src/cli-runtime-context.d.ts +2 -0
- package/dist/src/cli-runtime-context.js.map +1 -1
- package/dist/src/codex-native-cli-adapter.js +3 -4
- package/dist/src/codex-native-cli-adapter.js.map +1 -1
- package/dist/src/codex-native-client.d.ts +2 -0
- package/dist/src/codex-native-client.js +13 -3
- package/dist/src/codex-native-client.js.map +1 -1
- package/dist/src/codex-native-outbox.js +7 -5
- package/dist/src/codex-native-outbox.js.map +1 -1
- package/dist/src/codex-native-public-projection.d.ts +24 -8
- package/dist/src/codex-native-public-projection.js +38 -15
- package/dist/src/codex-native-public-projection.js.map +1 -1
- package/dist/src/codex-native-runtime.d.ts +1 -1
- package/dist/src/codex-native-runtime.js +15 -2
- package/dist/src/codex-native-runtime.js.map +1 -1
- package/dist/src/codex-native-semantic.js +15 -5
- package/dist/src/codex-native-semantic.js.map +1 -1
- package/dist/src/codex-native-state-store.d.ts +2 -0
- package/dist/src/codex-native-state-store.js +4 -2
- package/dist/src/codex-native-state-store.js.map +1 -1
- package/dist/src/codex-native-task-service.js +20 -4
- package/dist/src/codex-native-task-service.js.map +1 -1
- package/dist/src/conversation-list.js +30 -3
- package/dist/src/conversation-list.js.map +1 -1
- package/dist/src/conversation-routing-cli-adapter.d.ts +2 -7
- package/dist/src/conversation-routing-cli-adapter.js +4 -2
- package/dist/src/conversation-routing-cli-adapter.js.map +1 -1
- package/dist/src/conversation-routing-commands.d.ts +5 -0
- package/dist/src/conversation-routing-commands.js.map +1 -1
- package/dist/src/desktop-command-presentation.js +3 -1
- package/dist/src/desktop-command-presentation.js.map +1 -1
- package/dist/src/desktop-public-projection.js +3 -6
- package/dist/src/desktop-public-projection.js.map +1 -1
- package/dist/src/desktop-task-service.js +10 -3
- package/dist/src/desktop-task-service.js.map +1 -1
- package/dist/src/durable-notification-kernel.d.ts +10 -0
- package/dist/src/durable-notification-kernel.js +18 -1
- package/dist/src/durable-notification-kernel.js.map +1 -1
- package/dist/src/host-monitor-reconciliation.js +9 -1
- package/dist/src/host-monitor-reconciliation.js.map +1 -1
- package/dist/src/host-profile-runtime.js +3 -1
- package/dist/src/host-profile-runtime.js.map +1 -1
- package/dist/src/local-codex-cli-adapter.js +4 -3
- package/dist/src/local-codex-cli-adapter.js.map +1 -1
- package/dist/src/openclaw-callback-evidence.d.ts +17 -0
- package/dist/src/openclaw-callback-evidence.js +75 -0
- package/dist/src/openclaw-callback-evidence.js.map +1 -0
- package/dist/src/openclaw-callback-transport.js +90 -9
- package/dist/src/openclaw-callback-transport.js.map +1 -1
- package/dist/src/semantic-conversation-target.js +1 -1
- package/dist/src/semantic-conversation-target.js.map +1 -1
- package/dist/src/semantic-tool-command-helpers.d.ts +0 -1
- package/dist/src/semantic-tool-command-helpers.js +45 -19
- package/dist/src/semantic-tool-command-helpers.js.map +1 -1
- package/dist/src/semantic-tool-descriptions.js +3 -3
- package/dist/src/semantic-tool-descriptions.js.map +1 -1
- package/dist/src/semantic-tool-list-projection.js +13 -6
- package/dist/src/semantic-tool-list-projection.js.map +1 -1
- package/dist/src/semantic-tool-presentation.js +17 -3
- package/dist/src/semantic-tool-presentation.js.map +1 -1
- package/dist/src/semantic-tool-runtime.js +8 -1
- package/dist/src/semantic-tool-runtime.js.map +1 -1
- package/dist/src/semantic-tool-schemas.js +15 -15
- package/dist/src/semantic-tool-schemas.js.map +1 -1
- package/dist/src/terminal-list-cli-adapter.js +5 -1
- package/dist/src/terminal-list-cli-adapter.js.map +1 -1
- package/dist/src/terminal-list-ownership-service.js +1 -1
- package/dist/src/terminal-list-ownership-service.js.map +1 -1
- package/docs/backend-task-recovery.md +43 -0
- package/docs/claude-cli-direct.md +60 -0
- package/docs/codex-0.162.1-compatibility.md +65 -10
- package/docs/codex-cli-native-compatibility.md +21 -0
- package/package.json +2 -2
- package/templates/openclaw-skills/agent-knock-knock/SKILL.md +14 -4
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { type BackendPublicProgress } from "./backend-public-progress.js";
|
|
2
|
+
import { type ClaudeNativeCatalogEntry, type ClaudeNativeIdentity } from "./claude-native-identity.js";
|
|
3
|
+
export interface ClaudeNativeTranscriptSource {
|
|
4
|
+
relativePath: string;
|
|
5
|
+
device: string;
|
|
6
|
+
inode: string;
|
|
7
|
+
}
|
|
8
|
+
export interface ClaudeNativeToolObservation {
|
|
9
|
+
toolUseId: string;
|
|
10
|
+
name: string;
|
|
11
|
+
status: "pending" | "completed" | "failed";
|
|
12
|
+
}
|
|
13
|
+
export interface ClaudeNativeInputObservation {
|
|
14
|
+
inputUuid: string;
|
|
15
|
+
messageId?: string;
|
|
16
|
+
verifiedPeerPid?: number;
|
|
17
|
+
kind: "root_user" | "absorbed_mid_turn";
|
|
18
|
+
origin: "peer" | "human" | "unknown";
|
|
19
|
+
acceptedAt: string | null;
|
|
20
|
+
state: "inProgress" | "completed" | "interrupted" | "failed" | "unknown";
|
|
21
|
+
responseText: string;
|
|
22
|
+
responseTruncated: boolean;
|
|
23
|
+
completedAt: string | null;
|
|
24
|
+
completionRecordUuid?: string;
|
|
25
|
+
pendingTools: ClaudeNativeToolObservation[];
|
|
26
|
+
toolResults: ClaudeNativeToolObservation[];
|
|
27
|
+
reason?: string;
|
|
28
|
+
}
|
|
29
|
+
export interface ClaudeNativePublicProgress extends BackendPublicProgress {
|
|
30
|
+
native_input_id: string | null;
|
|
31
|
+
task_anchor_kind: "native_input_uuid";
|
|
32
|
+
}
|
|
33
|
+
export interface ClaudeNativeSnapshot {
|
|
34
|
+
identity: ClaudeNativeIdentity;
|
|
35
|
+
readAt: string;
|
|
36
|
+
source?: ClaudeNativeTranscriptSource;
|
|
37
|
+
latestInputUuid: string | null;
|
|
38
|
+
inputs: ClaudeNativeInputObservation[];
|
|
39
|
+
selectedInput?: ClaudeNativeInputObservation;
|
|
40
|
+
progress: ClaudeNativePublicProgress;
|
|
41
|
+
readError?: "missing_transcript" | "read_failed" | "missing_exact_input" | "identity_mismatch" | "incomplete_chain";
|
|
42
|
+
}
|
|
43
|
+
export interface ClaudeNativeObservationOptions {
|
|
44
|
+
exactInputUuid?: string;
|
|
45
|
+
messageId?: string;
|
|
46
|
+
expectedPeerPid?: number;
|
|
47
|
+
now?: Date;
|
|
48
|
+
/** Persist after acceptance; a replaced/moved transcript cannot inherit the old Watch. */
|
|
49
|
+
source?: ClaudeNativeTranscriptSource;
|
|
50
|
+
/** The caller verifies process liveness. A saved entry is usable after exit, never a new process. */
|
|
51
|
+
processAlive?: boolean;
|
|
52
|
+
}
|
|
53
|
+
/** Read-only, bounded projection of one exact session. No cwd-based session inference. */
|
|
54
|
+
export declare function readClaudeNativeSnapshot(entry: ClaudeNativeCatalogEntry, options?: ClaudeNativeObservationOptions): Promise<ClaudeNativeSnapshot>;
|
|
@@ -0,0 +1,418 @@
|
|
|
1
|
+
import fs from "node:fs/promises";
|
|
2
|
+
import { constants } from "node:fs";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { backendPublicProgress, backendPublicProgressReadError } from "./backend-public-progress.js";
|
|
5
|
+
import { isClaudeNativeUuid, validateClaudeNativeIdentity } from "./claude-native-identity.js";
|
|
6
|
+
import { isRecord } from "./value-guards.js";
|
|
7
|
+
const MAX_BYTES = 16 * 1024 * 1024;
|
|
8
|
+
const MAX_RECORDS = 40_000;
|
|
9
|
+
const MAX_INPUTS = 50;
|
|
10
|
+
/** Read-only, bounded projection of one exact session. No cwd-based session inference. */
|
|
11
|
+
export async function readClaudeNativeSnapshot(entry, options = {}) {
|
|
12
|
+
const identity = validateClaudeNativeIdentity(entry);
|
|
13
|
+
const readAt = (options.now ?? new Date()).toISOString();
|
|
14
|
+
const base = { identity, readAt, latestInputUuid: null, inputs: [],
|
|
15
|
+
progress: progressFor(null, [], readAt) };
|
|
16
|
+
if (!validOptions(options))
|
|
17
|
+
return failed(base, "identity_mismatch");
|
|
18
|
+
let loaded;
|
|
19
|
+
try {
|
|
20
|
+
loaded = await loadRecords(entry, options.source);
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
return failed(base, "read_failed");
|
|
24
|
+
}
|
|
25
|
+
if (!loaded)
|
|
26
|
+
return failed(base, "missing_transcript");
|
|
27
|
+
base.source = loaded.source;
|
|
28
|
+
const { records, roots, conflicts, byParent } = transcriptGraph(loaded.records, entry.sessionId);
|
|
29
|
+
if (!roots.length && records.length && !records.some(record => sessionOf(record) === entry.sessionId))
|
|
30
|
+
return failed(base, "identity_mismatch");
|
|
31
|
+
const last = roots.at(-1);
|
|
32
|
+
base.latestInputUuid = last ? inputId(last) : null;
|
|
33
|
+
const selected = options.exactInputUuid
|
|
34
|
+
? roots.find(record => inputId(record) === options.exactInputUuid) : last;
|
|
35
|
+
if (options.exactInputUuid && !selected)
|
|
36
|
+
return failed(base, "missing_exact_input");
|
|
37
|
+
if (selected && !exactInputMatches(selected, roots, conflicts, options))
|
|
38
|
+
return failed(base, "identity_mismatch");
|
|
39
|
+
const chosen = roots.slice(-MAX_INPUTS);
|
|
40
|
+
if (selected && !chosen.includes(selected))
|
|
41
|
+
chosen.unshift(selected);
|
|
42
|
+
for (const root of chosen) {
|
|
43
|
+
const chain = causalChain(root, byParent, conflicts, entry.sessionId);
|
|
44
|
+
const projected = observeInput(root, chain, entry, options.processAlive !== false, readAt, inputId(root) === base.latestInputUuid);
|
|
45
|
+
base.inputs.push(projected.observation);
|
|
46
|
+
if (root === selected) {
|
|
47
|
+
base.selectedInput = projected.observation;
|
|
48
|
+
base.progress = projected.progress;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return base;
|
|
52
|
+
}
|
|
53
|
+
function validOptions(options) {
|
|
54
|
+
if (options.exactInputUuid !== undefined && !isClaudeNativeUuid(options.exactInputUuid))
|
|
55
|
+
return false;
|
|
56
|
+
if (options.messageId !== undefined && !isClaudeNativeUuid(options.messageId))
|
|
57
|
+
return false;
|
|
58
|
+
return options.expectedPeerPid === undefined || Number.isSafeInteger(options.expectedPeerPid) && options.expectedPeerPid > 0;
|
|
59
|
+
}
|
|
60
|
+
function sessionOf(record) { return record.sessionId ?? record.session_id; }
|
|
61
|
+
function transcriptGraph(loaded, sessionId) {
|
|
62
|
+
// Prove the selected graph, allowing identical historical replays after resume.
|
|
63
|
+
const byUuid = new Map(), conflicts = new Set();
|
|
64
|
+
for (const record of loaded) {
|
|
65
|
+
if (!isClaudeNativeUuid(record.uuid))
|
|
66
|
+
continue;
|
|
67
|
+
const prior = byUuid.get(record.uuid);
|
|
68
|
+
if (prior && JSON.stringify(prior) !== JSON.stringify(record))
|
|
69
|
+
conflicts.add(record.uuid);
|
|
70
|
+
if (!prior)
|
|
71
|
+
byUuid.set(record.uuid, record);
|
|
72
|
+
}
|
|
73
|
+
const records = [...byUuid.values()];
|
|
74
|
+
const roots = records.filter(record => isInput(record) && sessionOf(record) === sessionId && record.isSidechain !== true);
|
|
75
|
+
const byParent = new Map();
|
|
76
|
+
for (const record of records) {
|
|
77
|
+
if (!isClaudeNativeUuid(record.parentUuid))
|
|
78
|
+
continue;
|
|
79
|
+
const children = byParent.get(record.parentUuid) ?? [];
|
|
80
|
+
children.push(record);
|
|
81
|
+
byParent.set(record.parentUuid, children);
|
|
82
|
+
}
|
|
83
|
+
return { records, roots, conflicts, byParent };
|
|
84
|
+
}
|
|
85
|
+
function exactInputMatches(selected, roots, conflicts, options) {
|
|
86
|
+
if (conflicts.has(String(selected.uuid)) || roots.filter(root => inputId(root) === inputId(selected)).length !== 1)
|
|
87
|
+
return false;
|
|
88
|
+
const origin = originOf(selected);
|
|
89
|
+
if (options.messageId !== undefined && (origin?.kind !== "peer" || origin.msg_id !== options.messageId))
|
|
90
|
+
return false;
|
|
91
|
+
return options.expectedPeerPid === undefined || origin?.verifiedPeerPid === options.expectedPeerPid;
|
|
92
|
+
}
|
|
93
|
+
function failed(base, reason) {
|
|
94
|
+
return { ...base, readError: reason, progress: { ...backendPublicProgressReadError(null, base.readAt, reason === "identity_mismatch" ? "identity_mismatch" : "read_failed"), native_input_id: null,
|
|
95
|
+
task_anchor_kind: "native_input_uuid" } };
|
|
96
|
+
}
|
|
97
|
+
function originOf(record) {
|
|
98
|
+
const value = isRecord(record.attachment) ? record.attachment.origin : record.origin;
|
|
99
|
+
return isRecord(value) ? value : undefined;
|
|
100
|
+
}
|
|
101
|
+
function inputId(record) {
|
|
102
|
+
return isRecord(record.attachment) ? String(record.attachment.source_uuid) : String(record.uuid);
|
|
103
|
+
}
|
|
104
|
+
function content(record) {
|
|
105
|
+
const message = isRecord(record.message) ? record.message : undefined;
|
|
106
|
+
return Array.isArray(message?.content) ? message.content.filter(isRecord) : [];
|
|
107
|
+
}
|
|
108
|
+
function interrupted(record) {
|
|
109
|
+
return record.type === "user" && content(record).some(block => block.type === "text"
|
|
110
|
+
&& (block.text === "[Request interrupted by user]" || block.text === "[Request interrupted by user for tool use]"));
|
|
111
|
+
}
|
|
112
|
+
function isInput(record) {
|
|
113
|
+
if (!isClaudeNativeUuid(record.uuid))
|
|
114
|
+
return false;
|
|
115
|
+
if (record.type === "attachment" && isRecord(record.attachment))
|
|
116
|
+
return record.attachment.type === "queued_command"
|
|
117
|
+
&& isClaudeNativeUuid(record.attachment.source_uuid);
|
|
118
|
+
if (record.type !== "user" || record.isCompactSummary === true || record.isVisibleInTranscriptOnly === true
|
|
119
|
+
|| (record.isMeta === true && originOf(record)?.kind !== "peer")
|
|
120
|
+
|| interrupted(record) || content(record).some(block => block.type === "tool_result"))
|
|
121
|
+
return false;
|
|
122
|
+
const message = isRecord(record.message) ? record.message : undefined;
|
|
123
|
+
return message?.role === "user" && (typeof message.content === "string" || content(record).some(block => block.type === "text"));
|
|
124
|
+
}
|
|
125
|
+
function causalChain(root, byParent, conflicts, sessionId) {
|
|
126
|
+
if (conflicts.has(String(root.uuid)))
|
|
127
|
+
return undefined;
|
|
128
|
+
const chain = [root];
|
|
129
|
+
const seen = new Set([String(root.uuid)]);
|
|
130
|
+
while (true) {
|
|
131
|
+
const children = (byParent.get(String(chain.at(-1).uuid)) ?? [])
|
|
132
|
+
.filter(record => !(isInput(record) && record.type === "user"))
|
|
133
|
+
.filter(record => !(record.type === "system" && record.subtype === "informational" && !byParent.has(String(record.uuid))));
|
|
134
|
+
if (!children.length)
|
|
135
|
+
return chain;
|
|
136
|
+
if (children.length !== 1 || !isClaudeNativeUuid(children[0].uuid) || seen.has(children[0].uuid))
|
|
137
|
+
return undefined;
|
|
138
|
+
const next = children[0];
|
|
139
|
+
if (conflicts.has(String(next.uuid)) || (next.sessionId ?? next.session_id) !== sessionId || next.isSidechain === true)
|
|
140
|
+
return undefined;
|
|
141
|
+
seen.add(String(next.uuid));
|
|
142
|
+
chain.push(next);
|
|
143
|
+
// A durable end marker belongs to this task even when later inputs are descendants.
|
|
144
|
+
if (next.type === "system" && next.subtype === "turn_duration")
|
|
145
|
+
return chain;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
function nativeTime(record) {
|
|
149
|
+
if (typeof record.timestamp !== "string")
|
|
150
|
+
return null;
|
|
151
|
+
const ms = Date.parse(record.timestamp);
|
|
152
|
+
return Number.isFinite(ms) ? new Date(ms).toISOString() : null;
|
|
153
|
+
}
|
|
154
|
+
function hasBackgroundWork(record) {
|
|
155
|
+
if ([record.pendingBackgroundAgentCount, record.pendingWorkflowCount].some(value => value !== undefined && value !== 0))
|
|
156
|
+
return true;
|
|
157
|
+
const result = isRecord(record.toolUseResult) ? record.toolUseResult : {};
|
|
158
|
+
if (typeof result.backgroundTaskId === "string" || result.isAsync === true
|
|
159
|
+
|| ["async_launched", "remote_launched", "teammate_spawned"].includes(String(result.status)))
|
|
160
|
+
return true;
|
|
161
|
+
const background = (value) => ["run_in_background", "runInBackground", "is_background", "isBackground",
|
|
162
|
+
"backgroundedByUser", "assistantAutoBackgrounded"].some(key => value[key] === true);
|
|
163
|
+
return background(result) || content(record).some(block => block.type === "tool_use" && isRecord(block.input) && background(block.input));
|
|
164
|
+
}
|
|
165
|
+
function toolType(name) {
|
|
166
|
+
if (name === "Bash")
|
|
167
|
+
return "commandExecution";
|
|
168
|
+
if (name === "Write" || name === "Edit" || name === "NotebookEdit")
|
|
169
|
+
return "fileChange";
|
|
170
|
+
if (name === "WebSearch" || name === "WebFetch")
|
|
171
|
+
return "webSearch";
|
|
172
|
+
return "dynamicToolCall";
|
|
173
|
+
}
|
|
174
|
+
function toolActionKind(name) {
|
|
175
|
+
if (name === "Read")
|
|
176
|
+
return "file_read";
|
|
177
|
+
if (name === "Glob" || name === "Grep")
|
|
178
|
+
return "file_search";
|
|
179
|
+
if (name === "AskUserQuestion")
|
|
180
|
+
return "user_question";
|
|
181
|
+
return undefined;
|
|
182
|
+
}
|
|
183
|
+
function toolName(value) {
|
|
184
|
+
// Tool names are identifiers, never commands, file paths, arguments or output.
|
|
185
|
+
return typeof value === "string" && /^[A-Za-z0-9_:-]{1,120}$/u.test(value) ? value : "unknown";
|
|
186
|
+
}
|
|
187
|
+
function initialInputObservation(root) {
|
|
188
|
+
const origin = originOf(root);
|
|
189
|
+
return { inputUuid: inputId(root),
|
|
190
|
+
...(typeof origin?.msg_id === "string" ? { messageId: origin.msg_id } : {}),
|
|
191
|
+
...(Number.isSafeInteger(origin?.verifiedPeerPid) ? { verifiedPeerPid: origin.verifiedPeerPid } : {}),
|
|
192
|
+
kind: root.type === "attachment" ? "absorbed_mid_turn" : "root_user",
|
|
193
|
+
origin: origin?.kind === "peer" ? "peer" : origin ? "unknown" : "human",
|
|
194
|
+
acceptedAt: nativeTime(root), state: "unknown", responseText: "", responseTruncated: false,
|
|
195
|
+
completedAt: null, pendingTools: [], toolResults: [] };
|
|
196
|
+
}
|
|
197
|
+
function observeInput(root, chain, entry, alive, readAt, isLatest) {
|
|
198
|
+
const result = initialInputObservation(root);
|
|
199
|
+
if (!chain)
|
|
200
|
+
return { observation: { ...result, reason: "ambiguous_parent_chain" }, progress: progressFor(result.inputUuid, [], readAt, false) };
|
|
201
|
+
const analysis = analyzeChain(chain);
|
|
202
|
+
result.pendingTools = [...analysis.tools.values()].filter(tool => tool.observation.status === "pending").map(tool => tool.observation);
|
|
203
|
+
result.toolResults = [...analysis.tools.values()].filter(tool => tool.observation.status !== "pending").map(tool => tool.observation);
|
|
204
|
+
settleObservation(result, analysis, entry, alive, isLatest);
|
|
205
|
+
return observationOutput(result, analysis, readAt);
|
|
206
|
+
}
|
|
207
|
+
function analyzeChain(chain) {
|
|
208
|
+
const items = [], tools = new Map();
|
|
209
|
+
let lastMessageId, lastPublicMessageId, finalMessageId;
|
|
210
|
+
let stopRecord, errorRecord, duration;
|
|
211
|
+
let unsafe = false, unknownStopReason = false;
|
|
212
|
+
for (const record of chain.slice(1)) {
|
|
213
|
+
if (record.subtype === "stop_hook_summary" || record.type === "progress" || hasBackgroundWork(record))
|
|
214
|
+
unsafe = true;
|
|
215
|
+
if (interrupted(record))
|
|
216
|
+
stopRecord = record;
|
|
217
|
+
if (record.type === "system" && record.subtype === "turn_duration")
|
|
218
|
+
duration = record;
|
|
219
|
+
const assistant = addAssistantItems(record, tools, items);
|
|
220
|
+
lastMessageId = assistant.messageId ?? lastMessageId;
|
|
221
|
+
lastPublicMessageId = assistant.publicMessageId ?? lastPublicMessageId;
|
|
222
|
+
finalMessageId = assistant.finalMessageId ?? finalMessageId;
|
|
223
|
+
if (assistant.error)
|
|
224
|
+
errorRecord = record;
|
|
225
|
+
unsafe ||= assistant.unsafe;
|
|
226
|
+
unknownStopReason ||= assistant.unknownStopReason;
|
|
227
|
+
unsafe = settleToolResults(record, tools) || unsafe;
|
|
228
|
+
}
|
|
229
|
+
if (unknownStopReason && !stopRecord && !errorRecord)
|
|
230
|
+
unsafe = true;
|
|
231
|
+
return { items, tools, lastMessageId, lastPublicMessageId, finalMessageId, stopRecord, errorRecord, duration, unsafe };
|
|
232
|
+
}
|
|
233
|
+
function completionRecord(result, analysis) {
|
|
234
|
+
if (result.pendingTools.length)
|
|
235
|
+
return undefined;
|
|
236
|
+
if (analysis.stopRecord || analysis.errorRecord)
|
|
237
|
+
return analysis.stopRecord ?? analysis.errorRecord;
|
|
238
|
+
const { duration, finalMessageId, lastMessageId, lastPublicMessageId } = analysis;
|
|
239
|
+
return duration && finalMessageId && finalMessageId === lastMessageId && finalMessageId === lastPublicMessageId ? duration : undefined;
|
|
240
|
+
}
|
|
241
|
+
function settleObservation(result, analysis, entry, alive, isLatest) {
|
|
242
|
+
const finished = completionRecord(result, analysis);
|
|
243
|
+
if (result.kind === "absorbed_mid_turn")
|
|
244
|
+
result.reason = "input_absorbed_into_existing_task";
|
|
245
|
+
else if (analysis.unsafe)
|
|
246
|
+
result.reason = "unsupported_or_incomplete_task_chain";
|
|
247
|
+
else if (finished && nativeTime(finished)) {
|
|
248
|
+
result.state = analysis.stopRecord ? "interrupted" : analysis.errorRecord ? "failed" : "completed";
|
|
249
|
+
result.completedAt = nativeTime(finished);
|
|
250
|
+
result.completionRecordUuid = String(finished.uuid);
|
|
251
|
+
}
|
|
252
|
+
else if (!alive)
|
|
253
|
+
result.reason = "process_exited_without_proven_task_completion";
|
|
254
|
+
else if (!isLatest)
|
|
255
|
+
result.reason = "newer_input_exists_without_proven_completion";
|
|
256
|
+
else if (entry.status === "working" || entry.status === "waiting")
|
|
257
|
+
result.state = "inProgress";
|
|
258
|
+
else
|
|
259
|
+
result.reason = "awaiting_durable_completion";
|
|
260
|
+
}
|
|
261
|
+
function observationOutput(result, analysis, readAt) {
|
|
262
|
+
const { items, lastPublicMessageId, unsafe } = analysis;
|
|
263
|
+
const hasFinal = result.state === "completed" || result.state === "failed";
|
|
264
|
+
const finalItems = items.filter(item => item.type === "agentMessage" && item.delivery === lastPublicMessageId);
|
|
265
|
+
if (hasFinal) {
|
|
266
|
+
const combined = finalItems.length ? [{ ...finalItems.at(-1), text: finalItems.map(item => item.text).join("\n") }] : [];
|
|
267
|
+
const response = progressFor(result.inputUuid, combined, readAt);
|
|
268
|
+
result.responseText = response.text;
|
|
269
|
+
result.responseTruncated = response.truncated;
|
|
270
|
+
}
|
|
271
|
+
// Claude text is public without phases; exclude a proven final from progress.
|
|
272
|
+
const progressItems = hasFinal ? items.filter(item => item.type !== "agentMessage" || item.delivery !== lastPublicMessageId) : items;
|
|
273
|
+
return { observation: result, progress: progressFor(result.inputUuid, progressItems, readAt, !unsafe) };
|
|
274
|
+
}
|
|
275
|
+
function addAssistantItems(record, tools, items) {
|
|
276
|
+
const result = { unsafe: false, unknownStopReason: false, error: false,
|
|
277
|
+
messageId: undefined, publicMessageId: undefined,
|
|
278
|
+
finalMessageId: undefined };
|
|
279
|
+
if (record.type !== "assistant")
|
|
280
|
+
return result;
|
|
281
|
+
const message = isRecord(record.message) ? record.message : undefined;
|
|
282
|
+
result.unsafe = message?.role !== "assistant";
|
|
283
|
+
result.messageId = typeof message?.id === "string" ? message.id : undefined;
|
|
284
|
+
result.error = record.isApiErrorMessage === true;
|
|
285
|
+
if (message?.stop_reason === "end_turn")
|
|
286
|
+
result.finalMessageId = result.messageId;
|
|
287
|
+
else
|
|
288
|
+
result.unknownStopReason = !result.error && message?.stop_reason != null && message.stop_reason !== "tool_use";
|
|
289
|
+
const startedAtMs = nativeTime(record) ? Date.parse(nativeTime(record)) : null;
|
|
290
|
+
for (const block of content(record)) {
|
|
291
|
+
if (block.type === "text" && typeof block.text === "string" && block.text.trim()) {
|
|
292
|
+
if (!result.messageId) {
|
|
293
|
+
result.unsafe = true;
|
|
294
|
+
continue;
|
|
295
|
+
}
|
|
296
|
+
result.publicMessageId = result.messageId;
|
|
297
|
+
items.push({ id: String(record.uuid), type: "agentMessage", phase: "commentary", text: block.text,
|
|
298
|
+
startedAtMs, delivery: result.messageId });
|
|
299
|
+
}
|
|
300
|
+
else if (block.type === "tool_use" && typeof block.id === "string") {
|
|
301
|
+
if (tools.has(block.id)) {
|
|
302
|
+
result.unsafe = true;
|
|
303
|
+
continue;
|
|
304
|
+
}
|
|
305
|
+
const name = toolName(block.name);
|
|
306
|
+
const item = { id: block.id, type: toolType(name), actionKind: toolActionKind(name), status: "inProgress", startedAtMs };
|
|
307
|
+
tools.set(block.id, { observation: { toolUseId: block.id, name, status: "pending" }, item, owner: String(record.uuid) });
|
|
308
|
+
items.push(item);
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
return result;
|
|
312
|
+
}
|
|
313
|
+
function settleToolResults(record, tools) {
|
|
314
|
+
let unsafe = false;
|
|
315
|
+
for (const block of content(record)) {
|
|
316
|
+
if (block.type !== "tool_result" || typeof block.tool_use_id !== "string")
|
|
317
|
+
continue;
|
|
318
|
+
const tool = tools.get(block.tool_use_id);
|
|
319
|
+
if (!tool || tool.observation.status !== "pending" || record.parentUuid !== tool.owner) {
|
|
320
|
+
unsafe = true;
|
|
321
|
+
continue;
|
|
322
|
+
}
|
|
323
|
+
tool.observation.status = block.is_error === true ? "failed" : "completed";
|
|
324
|
+
tool.item.status = tool.observation.status;
|
|
325
|
+
tool.item.completedAtMs = nativeTime(record) ? Date.parse(nativeTime(record)) : null;
|
|
326
|
+
}
|
|
327
|
+
return unsafe;
|
|
328
|
+
}
|
|
329
|
+
function progressFor(id, items, readAt, complete = true) {
|
|
330
|
+
const progress = backendPublicProgress({ nativeTurnId: id, readAt,
|
|
331
|
+
turn: id ? { id, itemsComplete: complete, items } : undefined });
|
|
332
|
+
// Claude's UUID identifies an input, not a Codex-style native task/turn.
|
|
333
|
+
return { ...progress, native_turn_id: null, native_input_id: id, task_anchor_kind: "native_input_uuid" };
|
|
334
|
+
}
|
|
335
|
+
async function loadRecords(entry, source) {
|
|
336
|
+
const location = await locateTranscript(entry, source);
|
|
337
|
+
if (!location)
|
|
338
|
+
return undefined;
|
|
339
|
+
const { filename, relativePath } = location;
|
|
340
|
+
if (await fs.realpath(filename) !== filename)
|
|
341
|
+
throw new Error("Transcript symlink rejected");
|
|
342
|
+
const before = await fs.lstat(filename);
|
|
343
|
+
const handle = await fs.open(filename, constants.O_RDONLY | (constants.O_NOFOLLOW ?? 0));
|
|
344
|
+
try {
|
|
345
|
+
const stat = await handle.stat();
|
|
346
|
+
const identity = { relativePath, device: String(stat.dev), inode: String(stat.ino) };
|
|
347
|
+
assertTranscriptFile(stat, before, source);
|
|
348
|
+
const records = await readRecordWindow(handle, stat.size);
|
|
349
|
+
const after = await handle.stat(), current = await fs.lstat(filename);
|
|
350
|
+
if (after.size < stat.size || current.dev !== stat.dev || current.ino !== stat.ino || await fs.realpath(filename) !== filename)
|
|
351
|
+
throw new Error("Transcript changed identity");
|
|
352
|
+
return { source: identity, records };
|
|
353
|
+
}
|
|
354
|
+
finally {
|
|
355
|
+
await handle.close();
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
async function locateTranscript(entry, source) {
|
|
359
|
+
const projects = path.join(await fs.realpath(entry.configDir), "projects");
|
|
360
|
+
const root = await lstatOptional(projects);
|
|
361
|
+
if (!root)
|
|
362
|
+
return undefined;
|
|
363
|
+
if (!root.isDirectory() || root.isSymbolicLink() || await fs.realpath(projects) !== projects)
|
|
364
|
+
throw new Error("Unsafe transcript directory");
|
|
365
|
+
const entries = await fs.readdir(projects, { withFileTypes: true });
|
|
366
|
+
if (entries.length > 10_000)
|
|
367
|
+
throw new Error("Transcript catalog limit exceeded");
|
|
368
|
+
const matches = [];
|
|
369
|
+
for (const directory of entries) {
|
|
370
|
+
if (!directory.isDirectory() || directory.isSymbolicLink())
|
|
371
|
+
continue;
|
|
372
|
+
const relative = path.join(directory.name, `${entry.sessionId}.jsonl`);
|
|
373
|
+
if (await lstatOptional(path.join(projects, relative)))
|
|
374
|
+
matches.push(relative);
|
|
375
|
+
}
|
|
376
|
+
if (!matches.length)
|
|
377
|
+
return undefined;
|
|
378
|
+
if (matches.length !== 1 || (source && matches[0] !== source.relativePath))
|
|
379
|
+
throw new Error("Ambiguous or moved transcript");
|
|
380
|
+
return { relativePath: matches[0], filename: path.join(projects, matches[0]) };
|
|
381
|
+
}
|
|
382
|
+
async function lstatOptional(filename) {
|
|
383
|
+
return fs.lstat(filename).catch(error => error.code === "ENOENT" ? undefined : Promise.reject(error));
|
|
384
|
+
}
|
|
385
|
+
function assertTranscriptFile(stat, before, source) {
|
|
386
|
+
if (!stat.isFile() || stat.dev !== before.dev || stat.ino !== before.ino)
|
|
387
|
+
throw new Error("Unsafe/replaced transcript");
|
|
388
|
+
if (typeof process.getuid === "function" && stat.uid !== process.getuid() || stat.mode & 0o022)
|
|
389
|
+
throw new Error("Unsafe transcript owner or mode");
|
|
390
|
+
if (source && (source.device !== String(stat.dev) || source.inode !== String(stat.ino)))
|
|
391
|
+
throw new Error("Transcript anchor changed");
|
|
392
|
+
}
|
|
393
|
+
async function readRecordWindow(handle, size) {
|
|
394
|
+
const offset = Math.max(0, size - MAX_BYTES), buffer = Buffer.alloc(size - offset);
|
|
395
|
+
const read = await handle.read(buffer, 0, buffer.length, offset);
|
|
396
|
+
if (read.bytesRead !== buffer.length)
|
|
397
|
+
throw new Error("Transcript changed while reading");
|
|
398
|
+
let start = 0;
|
|
399
|
+
if (offset > 0) {
|
|
400
|
+
const prefix = Buffer.alloc(1);
|
|
401
|
+
await handle.read(prefix, 0, 1, offset - 1);
|
|
402
|
+
if (prefix[0] !== 10)
|
|
403
|
+
start = buffer.indexOf(10) + 1;
|
|
404
|
+
if (!start && prefix[0] !== 10)
|
|
405
|
+
throw new Error("Transcript record exceeds read limit");
|
|
406
|
+
}
|
|
407
|
+
const records = [], end = buffer.lastIndexOf(10) + 1;
|
|
408
|
+
for (const line of buffer.subarray(start, end).toString("utf8").split("\n")) {
|
|
409
|
+
if (!line.trim())
|
|
410
|
+
continue;
|
|
411
|
+
const value = JSON.parse(line);
|
|
412
|
+
if (!isRecord(value) || records.length >= MAX_RECORDS)
|
|
413
|
+
throw new Error("Invalid/oversized transcript");
|
|
414
|
+
records.push(value);
|
|
415
|
+
}
|
|
416
|
+
return records;
|
|
417
|
+
}
|
|
418
|
+
//# sourceMappingURL=claude-native-observation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-native-observation.js","sourceRoot":"","sources":["../../src/claude-native-observation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type CallbackAttemptOutcome, type CallbackTransportContextV1, type CallbackTransportDeliverInput } from "./callback-transport.js";
|
|
2
|
+
import type { ClaudeNativeStateRepository, ClaudeNativeTaskRecord } from "./claude-native-state-store.js";
|
|
3
|
+
export interface ClaudeNativeOutboxDependencies {
|
|
4
|
+
repository: ClaudeNativeStateRepository;
|
|
5
|
+
deliver?(input: CallbackTransportDeliverInput): CallbackAttemptOutcome | Promise<CallbackAttemptOutcome>;
|
|
6
|
+
resolveCallbackContext?(task: ClaudeNativeTaskRecord): CallbackTransportContextV1 | undefined;
|
|
7
|
+
now?(): Date;
|
|
8
|
+
randomUUID?(): string;
|
|
9
|
+
deliveryLeaseMs?: number;
|
|
10
|
+
retryDelayMs?: number;
|
|
11
|
+
maxDeliveryAttempts?: number;
|
|
12
|
+
}
|
|
13
|
+
/** Lease and durable checkpoint semantics are shared with the other AKK transports. */
|
|
14
|
+
export declare function createClaudeNativeNotificationOutbox(deps: ClaudeNativeOutboxDependencies): {
|
|
15
|
+
deliverPending(id: string, notificationId?: string): Promise<void>;
|
|
16
|
+
};
|