@scotthuang/agent-knock-knock 0.13.18 → 0.14.1
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 +41 -0
- package/CONTRIBUTING.md +212 -0
- package/README.md +106 -166
- package/connectors/deepseek-harness/LICENSE +21 -0
- package/connectors/deepseek-harness/README.md +406 -0
- package/connectors/pi/LICENSE +21 -0
- package/connectors/pi/README.md +446 -0
- package/dist/src/backend-public-progress.d.ts +38 -0
- package/dist/src/backend-public-progress.js +106 -0
- package/dist/src/backend-public-progress.js.map +1 -0
- package/dist/src/backend-recovery-semantic.d.ts +16 -0
- package/dist/src/backend-recovery-semantic.js +113 -0
- package/dist/src/backend-recovery-semantic.js.map +1 -0
- package/dist/src/backend-task-recovery.d.ts +103 -0
- package/dist/src/backend-task-recovery.js +143 -0
- package/dist/src/backend-task-recovery.js.map +1 -0
- package/dist/src/callback-transport.d.ts +8 -0
- package/dist/src/callback-transport.js +14 -0
- package/dist/src/callback-transport.js.map +1 -1
- package/dist/src/cli-core.js +20 -10
- package/dist/src/cli-core.js.map +1 -1
- package/dist/src/cli-runtime-context.d.ts +5 -0
- package/dist/src/cli-runtime-context.js.map +1 -1
- package/dist/src/codex-app-server-read-client.d.ts +3 -0
- package/dist/src/codex-app-server-read-client.js.map +1 -1
- package/dist/src/codex-native-cli-adapter.d.ts +6 -0
- package/dist/src/codex-native-cli-adapter.js +303 -0
- package/dist/src/codex-native-cli-adapter.js.map +1 -0
- package/dist/src/codex-native-client-interactions.d.ts +6 -0
- package/dist/src/codex-native-client-interactions.js +124 -0
- package/dist/src/codex-native-client-interactions.js.map +1 -0
- package/dist/src/codex-native-client-rpc.d.ts +21 -0
- package/dist/src/codex-native-client-rpc.js +137 -0
- package/dist/src/codex-native-client-rpc.js.map +1 -0
- package/dist/src/codex-native-client.d.ts +42 -0
- package/dist/src/codex-native-client.js +331 -0
- package/dist/src/codex-native-client.js.map +1 -0
- package/dist/src/codex-native-identity.d.ts +6 -0
- package/dist/src/codex-native-identity.js +42 -0
- package/dist/src/codex-native-identity.js.map +1 -0
- package/dist/src/codex-native-monitor.d.ts +4 -0
- package/dist/src/codex-native-monitor.js +92 -0
- package/dist/src/codex-native-monitor.js.map +1 -0
- package/dist/src/codex-native-outbox.d.ts +16 -0
- package/dist/src/codex-native-outbox.js +120 -0
- package/dist/src/codex-native-outbox.js.map +1 -0
- package/dist/src/codex-native-public-projection.d.ts +545 -0
- package/dist/src/codex-native-public-projection.js +182 -0
- package/dist/src/codex-native-public-projection.js.map +1 -0
- package/dist/src/codex-native-record-store.d.ts +27 -0
- package/dist/src/codex-native-record-store.js +111 -0
- package/dist/src/codex-native-record-store.js.map +1 -0
- package/dist/src/codex-native-response-service.d.ts +69 -0
- package/dist/src/codex-native-response-service.js +244 -0
- package/dist/src/codex-native-response-service.js.map +1 -0
- package/dist/src/codex-native-runtime.d.ts +46 -0
- package/dist/src/codex-native-runtime.js +112 -0
- package/dist/src/codex-native-runtime.js.map +1 -0
- package/dist/src/codex-native-semantic.d.ts +17 -0
- package/dist/src/codex-native-semantic.js +175 -0
- package/dist/src/codex-native-semantic.js.map +1 -0
- package/dist/src/codex-native-snapshot.d.ts +19 -0
- package/dist/src/codex-native-snapshot.js +160 -0
- package/dist/src/codex-native-snapshot.js.map +1 -0
- package/dist/src/codex-native-state-store.d.ts +61 -0
- package/dist/src/codex-native-state-store.js +132 -0
- package/dist/src/codex-native-state-store.js.map +1 -0
- package/dist/src/codex-native-task-service.d.ts +71 -0
- package/dist/src/codex-native-task-service.js +503 -0
- package/dist/src/codex-native-task-service.js.map +1 -0
- package/dist/src/codex-native-types.d.ts +92 -0
- package/dist/src/codex-native-types.js +15 -0
- package/dist/src/codex-native-types.js.map +1 -0
- package/dist/src/conversation-list.d.ts +12 -0
- package/dist/src/conversation-list.js +30 -0
- package/dist/src/conversation-list.js.map +1 -0
- package/dist/src/conversation-route-dispatch.d.ts +13 -0
- package/dist/src/conversation-route-dispatch.js +66 -0
- package/dist/src/conversation-route-dispatch.js.map +1 -0
- package/dist/src/conversation-route-legacy.d.ts +18 -0
- package/dist/src/conversation-route-legacy.js +54 -0
- package/dist/src/conversation-route-legacy.js.map +1 -0
- package/dist/src/conversation-route-store.d.ts +51 -0
- package/dist/src/conversation-route-store.js +126 -0
- package/dist/src/conversation-route-store.js.map +1 -0
- package/dist/src/conversation-routing-cli-adapter.d.ts +12 -0
- package/dist/src/conversation-routing-cli-adapter.js +211 -0
- package/dist/src/conversation-routing-cli-adapter.js.map +1 -0
- package/dist/src/conversation-routing-commands.d.ts +11 -0
- package/dist/src/conversation-routing-commands.js +85 -0
- package/dist/src/conversation-routing-commands.js.map +1 -0
- package/dist/src/conversation-routing-home.d.ts +26 -0
- package/dist/src/conversation-routing-home.js +105 -0
- package/dist/src/conversation-routing-home.js.map +1 -0
- package/dist/src/conversation-routing-identity.d.ts +40 -0
- package/dist/src/conversation-routing-identity.js +174 -0
- package/dist/src/conversation-routing-identity.js.map +1 -0
- package/dist/src/conversation-runtime-route-store.d.ts +11 -0
- package/dist/src/conversation-runtime-route-store.js +118 -0
- package/dist/src/conversation-runtime-route-store.js.map +1 -0
- package/dist/src/desktop-async-interactions.d.ts +15 -0
- package/dist/src/desktop-async-interactions.js +88 -0
- package/dist/src/desktop-async-interactions.js.map +1 -0
- package/dist/src/desktop-async-state.d.ts +5 -0
- package/dist/src/desktop-async-state.js +53 -0
- package/dist/src/desktop-async-state.js.map +1 -0
- package/dist/src/desktop-cli-adapter.d.ts +7 -0
- package/dist/src/desktop-cli-adapter.js +343 -0
- package/dist/src/desktop-cli-adapter.js.map +1 -0
- package/dist/src/desktop-cli-controls.d.ts +9 -0
- package/dist/src/desktop-cli-controls.js +45 -0
- package/dist/src/desktop-cli-controls.js.map +1 -0
- package/dist/src/desktop-command-presentation.d.ts +2 -0
- package/dist/src/desktop-command-presentation.js +31 -0
- package/dist/src/desktop-command-presentation.js.map +1 -0
- package/dist/src/desktop-control-semantic.d.ts +8 -0
- package/dist/src/desktop-control-semantic.js +68 -0
- package/dist/src/desktop-control-semantic.js.map +1 -0
- package/dist/src/desktop-identity.d.ts +5 -0
- package/dist/src/desktop-identity.js +40 -0
- package/dist/src/desktop-identity.js.map +1 -0
- package/dist/src/desktop-interaction-projection.d.ts +57 -0
- package/dist/src/desktop-interaction-projection.js +196 -0
- package/dist/src/desktop-interaction-projection.js.map +1 -0
- package/dist/src/desktop-interaction-state.d.ts +3 -0
- package/dist/src/desktop-interaction-state.js +48 -0
- package/dist/src/desktop-interaction-state.js.map +1 -0
- package/dist/src/desktop-ipc-async-answer.d.ts +9 -0
- package/dist/src/desktop-ipc-async-answer.js +71 -0
- package/dist/src/desktop-ipc-async-answer.js.map +1 -0
- package/dist/src/desktop-ipc-client.d.ts +47 -0
- package/dist/src/desktop-ipc-client.js +400 -0
- package/dist/src/desktop-ipc-client.js.map +1 -0
- package/dist/src/desktop-ipc-native-operations.d.ts +11 -0
- package/dist/src/desktop-ipc-native-operations.js +126 -0
- package/dist/src/desktop-ipc-native-operations.js.map +1 -0
- package/dist/src/desktop-ipc-transport.d.ts +13 -0
- package/dist/src/desktop-ipc-transport.js +123 -0
- package/dist/src/desktop-ipc-transport.js.map +1 -0
- package/dist/src/desktop-list.d.ts +25 -0
- package/dist/src/desktop-list.js +55 -0
- package/dist/src/desktop-list.js.map +1 -0
- package/dist/src/desktop-metadata-reader.d.ts +30 -0
- package/dist/src/desktop-metadata-reader.js +182 -0
- package/dist/src/desktop-metadata-reader.js.map +1 -0
- package/dist/src/desktop-monitor.d.ts +4 -0
- package/dist/src/desktop-monitor.js +101 -0
- package/dist/src/desktop-monitor.js.map +1 -0
- package/dist/src/desktop-public-projection.d.ts +6 -0
- package/dist/src/desktop-public-projection.js +134 -0
- package/dist/src/desktop-public-projection.js.map +1 -0
- package/dist/src/desktop-request-interactions.d.ts +14 -0
- package/dist/src/desktop-request-interactions.js +144 -0
- package/dist/src/desktop-request-interactions.js.map +1 -0
- package/dist/src/desktop-response-dispatch.d.ts +14 -0
- package/dist/src/desktop-response-dispatch.js +19 -0
- package/dist/src/desktop-response-dispatch.js.map +1 -0
- package/dist/src/desktop-response-evidence.d.ts +4 -0
- package/dist/src/desktop-response-evidence.js +19 -0
- package/dist/src/desktop-response-evidence.js.map +1 -0
- package/dist/src/desktop-response-service.d.ts +11 -0
- package/dist/src/desktop-response-service.js +188 -0
- package/dist/src/desktop-response-service.js.map +1 -0
- package/dist/src/desktop-response-store.d.ts +35 -0
- package/dist/src/desktop-response-store.js +58 -0
- package/dist/src/desktop-response-store.js.map +1 -0
- package/dist/src/desktop-response-types.d.ts +20 -0
- package/dist/src/desktop-response-types.js +2 -0
- package/dist/src/desktop-response-types.js.map +1 -0
- package/dist/src/desktop-response-value.d.ts +6 -0
- package/dist/src/desktop-response-value.js +31 -0
- package/dist/src/desktop-response-value.js.map +1 -0
- package/dist/src/desktop-runtime.d.ts +153 -0
- package/dist/src/desktop-runtime.js +88 -0
- package/dist/src/desktop-runtime.js.map +1 -0
- package/dist/src/desktop-semantic.d.ts +21 -0
- package/dist/src/desktop-semantic.js +140 -0
- package/dist/src/desktop-semantic.js.map +1 -0
- package/dist/src/desktop-session-catalog.d.ts +68 -0
- package/dist/src/desktop-session-catalog.js +225 -0
- package/dist/src/desktop-session-catalog.js.map +1 -0
- package/dist/src/desktop-session-controls.d.ts +145 -0
- package/dist/src/desktop-session-controls.js +176 -0
- package/dist/src/desktop-session-controls.js.map +1 -0
- package/dist/src/desktop-sidebar-metadata.d.ts +27 -0
- package/dist/src/desktop-sidebar-metadata.js +83 -0
- package/dist/src/desktop-sidebar-metadata.js.map +1 -0
- package/dist/src/desktop-sidebar-projects.d.ts +10 -0
- package/dist/src/desktop-sidebar-projects.js +31 -0
- package/dist/src/desktop-sidebar-projects.js.map +1 -0
- package/dist/src/desktop-sidebar-selection.d.ts +28 -0
- package/dist/src/desktop-sidebar-selection.js +85 -0
- package/dist/src/desktop-sidebar-selection.js.map +1 -0
- package/dist/src/desktop-snapshot-details.d.ts +4 -0
- package/dist/src/desktop-snapshot-details.js +116 -0
- package/dist/src/desktop-snapshot-details.js.map +1 -0
- package/dist/src/desktop-snapshot.d.ts +11 -0
- package/dist/src/desktop-snapshot.js +281 -0
- package/dist/src/desktop-snapshot.js.map +1 -0
- package/dist/src/desktop-state-store.d.ts +72 -0
- package/dist/src/desktop-state-store.js +269 -0
- package/dist/src/desktop-state-store.js.map +1 -0
- package/dist/src/desktop-task-interactions.d.ts +10 -0
- package/dist/src/desktop-task-interactions.js +93 -0
- package/dist/src/desktop-task-interactions.js.map +1 -0
- package/dist/src/desktop-task-recovery.d.ts +38 -0
- package/dist/src/desktop-task-recovery.js +172 -0
- package/dist/src/desktop-task-recovery.js.map +1 -0
- package/dist/src/desktop-task-service.d.ts +54 -0
- package/dist/src/desktop-task-service.js +442 -0
- package/dist/src/desktop-task-service.js.map +1 -0
- package/dist/src/desktop-types.d.ts +283 -0
- package/dist/src/desktop-types.js +13 -0
- package/dist/src/desktop-types.js.map +1 -0
- package/dist/src/host-monitor-reconciliation.js +36 -4
- package/dist/src/host-monitor-reconciliation.js.map +1 -1
- package/dist/src/host-profile-runtime.js +7 -3
- package/dist/src/host-profile-runtime.js.map +1 -1
- package/dist/src/local-codex-cli-adapter.d.ts +7 -0
- package/dist/src/local-codex-cli-adapter.js +13 -0
- package/dist/src/local-codex-cli-adapter.js.map +1 -0
- package/dist/src/monitor-deadline-policy.d.ts +8 -0
- package/dist/src/monitor-deadline-policy.js +16 -0
- package/dist/src/monitor-deadline-policy.js.map +1 -0
- package/dist/src/openclaw-callback-transport.js +2 -1
- package/dist/src/openclaw-callback-transport.js.map +1 -1
- package/dist/src/semantic-conversation-target.d.ts +4 -0
- package/dist/src/semantic-conversation-target.js +20 -0
- package/dist/src/semantic-conversation-target.js.map +1 -0
- package/dist/src/semantic-permission-control.js +47 -9
- package/dist/src/semantic-permission-control.js.map +1 -1
- package/dist/src/semantic-private-authority-offers.d.ts +1 -1
- package/dist/src/semantic-private-authority-offers.js +3 -1
- package/dist/src/semantic-private-authority-offers.js.map +1 -1
- package/dist/src/semantic-tool-command-helpers.d.ts +6 -0
- package/dist/src/semantic-tool-command-helpers.js +199 -78
- package/dist/src/semantic-tool-command-helpers.js.map +1 -1
- package/dist/src/semantic-tool-descriptions.d.ts +2 -1
- package/dist/src/semantic-tool-descriptions.js +84 -35
- package/dist/src/semantic-tool-descriptions.js.map +1 -1
- package/dist/src/semantic-tool-list-projection.js +66 -2
- package/dist/src/semantic-tool-list-projection.js.map +1 -1
- package/dist/src/semantic-tool-presentation.js +76 -7
- package/dist/src/semantic-tool-presentation.js.map +1 -1
- package/dist/src/semantic-tool-runtime.js +129 -29
- package/dist/src/semantic-tool-runtime.js.map +1 -1
- package/dist/src/semantic-tool-schemas.d.ts +410 -27
- package/dist/src/semantic-tool-schemas.js +176 -88
- package/dist/src/semantic-tool-schemas.js.map +1 -1
- package/dist/src/terminal-action-contracts.js +10 -6
- package/dist/src/terminal-action-contracts.js.map +1 -1
- package/dist/src/terminal-command-cli-adapter.js +4 -4
- package/dist/src/terminal-command-cli-adapter.js.map +1 -1
- package/dist/src/terminal-command-dispatch-preparation.js +2 -1
- package/dist/src/terminal-command-dispatch-preparation.js.map +1 -1
- package/dist/src/terminal-list-cli-adapter.d.ts +1 -0
- package/dist/src/terminal-list-cli-adapter.js +6 -3
- package/dist/src/terminal-list-cli-adapter.js.map +1 -1
- package/dist/src/terminal-monitor-decision-policy.d.ts +1 -1
- package/dist/src/terminal-monitor-launch-plan.js +3 -2
- package/dist/src/terminal-monitor-launch-plan.js.map +1 -1
- package/dist/src/terminal-monitor-supervision-cli-adapter.js +2 -2
- package/dist/src/terminal-monitor-supervision-cli-adapter.js.map +1 -1
- package/dist/src/terminal-submission-retry-reconciliation.js +2 -2
- package/dist/src/terminal-submission-retry-reconciliation.js.map +1 -1
- package/dist/src/terminal-user-send-intent.d.ts +2 -0
- package/dist/src/terminal-user-send-intent.js +11 -3
- package/dist/src/terminal-user-send-intent.js.map +1 -1
- package/dist/src/terminal-watch-cli-adapter.js +4 -4
- package/dist/src/terminal-watch-cli-adapter.js.map +1 -1
- package/docs/architecture/current-architecture.md +313 -0
- package/docs/architecture/interactive-terminal-response.md +276 -0
- package/docs/architecture/issue-126-final-report.md +248 -0
- package/docs/architecture/orchestration-refactor-history.md +2987 -0
- package/docs/architecture/orchestration-refactor.md +21 -0
- package/docs/backend-task-recovery.md +98 -0
- package/docs/bidirectional-agent-protocol.md +260 -0
- package/docs/codex-cli-native-compatibility.md +246 -0
- package/docs/codex-desktop-compatibility.md +414 -0
- package/docs/openclaw-operations.md +281 -0
- package/docs/openclaw-session-turn-delivery-requirement.md +45 -0
- package/docs/operator-guide.md +572 -0
- package/docs/storage-and-logging.md +91 -0
- package/docs/test-performance-issue-108.md +80 -0
- package/docs/test-performance-issue-120.md +226 -0
- package/docs/testing.md +628 -0
- package/openclaw.plugin.json +8 -4
- package/package.json +6 -13
- package/templates/openclaw-skills/agent-knock-knock/SKILL.md +66 -15
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import type { CodexAppServerReadTransport } from "./codex-app-server-transport.js";
|
|
2
|
+
import type { CodexAppServerMetadata, CodexAppServerThread, CodexAppServerThreadItem } from "./codex-app-server-read-client.js";
|
|
3
|
+
export interface CodexNativeIdentity {
|
|
4
|
+
codexHome: string;
|
|
5
|
+
threadId: string;
|
|
6
|
+
}
|
|
7
|
+
export type CodexNativeThread = CodexAppServerThread;
|
|
8
|
+
export interface CodexNativeTurn {
|
|
9
|
+
id: string;
|
|
10
|
+
status: "inProgress" | "completed" | "failed" | "interrupted";
|
|
11
|
+
items: CodexAppServerThreadItem[];
|
|
12
|
+
itemsComplete: boolean;
|
|
13
|
+
error?: string;
|
|
14
|
+
}
|
|
15
|
+
export interface NativeQuestion {
|
|
16
|
+
id: string;
|
|
17
|
+
title: string;
|
|
18
|
+
options: string[];
|
|
19
|
+
isOther?: boolean;
|
|
20
|
+
isSecret?: boolean;
|
|
21
|
+
}
|
|
22
|
+
/** Request IDs belong to a single connection. Persist id, threadId, turnId and itemId instead. */
|
|
23
|
+
export interface NativeInteraction {
|
|
24
|
+
id: string;
|
|
25
|
+
kind: "command_approval" | "file_approval" | "blocking_question" | "async_question";
|
|
26
|
+
threadId: string;
|
|
27
|
+
turnId: string;
|
|
28
|
+
itemId: string;
|
|
29
|
+
method: string;
|
|
30
|
+
requestId?: number | string;
|
|
31
|
+
approvalId?: string;
|
|
32
|
+
nativeApprovalKind?: string;
|
|
33
|
+
networkApprovalContext?: {
|
|
34
|
+
host: string;
|
|
35
|
+
protocol: string;
|
|
36
|
+
};
|
|
37
|
+
questions: NativeQuestion[];
|
|
38
|
+
command?: string;
|
|
39
|
+
reason?: string;
|
|
40
|
+
cwd?: string;
|
|
41
|
+
availableDecisions?: string[];
|
|
42
|
+
changes?: {
|
|
43
|
+
path: string;
|
|
44
|
+
kind?: string;
|
|
45
|
+
diff?: string;
|
|
46
|
+
diffTruncated?: boolean;
|
|
47
|
+
}[];
|
|
48
|
+
}
|
|
49
|
+
export interface CodexNativeSnapshot {
|
|
50
|
+
threadId: string;
|
|
51
|
+
thread: CodexNativeThread;
|
|
52
|
+
loaded: boolean;
|
|
53
|
+
latestTurnId: string | null;
|
|
54
|
+
turns: CodexNativeTurn[];
|
|
55
|
+
selectedTurn?: CodexNativeTurn;
|
|
56
|
+
pendingInteractions: NativeInteraction[];
|
|
57
|
+
canSend: boolean;
|
|
58
|
+
}
|
|
59
|
+
export type CodexNativePermissionPreset = "read-only" | "default" | "full-access";
|
|
60
|
+
export interface CodexNativePermissions {
|
|
61
|
+
preset: CodexNativePermissionPreset | "custom";
|
|
62
|
+
profileId: string | null;
|
|
63
|
+
approvalPolicy: unknown;
|
|
64
|
+
approvalsReviewer: string;
|
|
65
|
+
sandbox: Record<string, unknown>;
|
|
66
|
+
}
|
|
67
|
+
export type NativeInteractionResponse = {
|
|
68
|
+
decision: "accept" | "decline" | "cancel";
|
|
69
|
+
} | {
|
|
70
|
+
answers: Record<string, string[]>;
|
|
71
|
+
};
|
|
72
|
+
export interface CodexNativeClientOptions {
|
|
73
|
+
codexHome: string;
|
|
74
|
+
timeoutMs?: number;
|
|
75
|
+
transportFactory?: (options: {
|
|
76
|
+
socketPath: string;
|
|
77
|
+
timeoutMs: number;
|
|
78
|
+
}) => Promise<CodexAppServerReadTransport>;
|
|
79
|
+
}
|
|
80
|
+
export type CodexNativeDispatchState = "not_sent" | "unknown" | "accepted";
|
|
81
|
+
export declare class CodexNativeError extends Error {
|
|
82
|
+
readonly code: "invalid_response" | "invalid_argument" | "timeout" | "closed" | "rpc_error" | "thread_not_loaded" | "thread_not_idle" | "unsupported_thread" | "stale_interaction" | "unsupported_capability" | "pagination_limit" | "duplicate_submission" | "unmaterialized_thread";
|
|
83
|
+
readonly dispatchState: CodexNativeDispatchState;
|
|
84
|
+
readonly rpcCode?: number | undefined;
|
|
85
|
+
readonly acceptedTurnId?: string | undefined;
|
|
86
|
+
constructor(code: "invalid_response" | "invalid_argument" | "timeout" | "closed" | "rpc_error" | "thread_not_loaded" | "thread_not_idle" | "unsupported_thread" | "stale_interaction" | "unsupported_capability" | "pagination_limit" | "duplicate_submission" | "unmaterialized_thread", message: string, dispatchState?: CodexNativeDispatchState, rpcCode?: number | undefined, acceptedTurnId?: string | undefined);
|
|
87
|
+
}
|
|
88
|
+
export interface CodexNativeReceipt {
|
|
89
|
+
turnId: string;
|
|
90
|
+
clientUserMessageId: string;
|
|
91
|
+
}
|
|
92
|
+
export type CodexNativeMetadata = CodexAppServerMetadata;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export class CodexNativeError extends Error {
|
|
2
|
+
code;
|
|
3
|
+
dispatchState;
|
|
4
|
+
rpcCode;
|
|
5
|
+
acceptedTurnId;
|
|
6
|
+
constructor(code, message, dispatchState = "not_sent", rpcCode, acceptedTurnId) {
|
|
7
|
+
super(message);
|
|
8
|
+
this.code = code;
|
|
9
|
+
this.dispatchState = dispatchState;
|
|
10
|
+
this.rpcCode = rpcCode;
|
|
11
|
+
this.acceptedTurnId = acceptedTurnId;
|
|
12
|
+
this.name = "CodexNativeError";
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=codex-native-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex-native-types.js","sourceRoot":"","sources":["../../src/codex-native-types.ts"],"names":[],"mappings":"AAgEA,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IACb,IAAI;IAGC,aAAa;IAC9B,OAAO;IAA2B,cAAc;IAJhE,YAA4B,IAEwE,EACpG,OAAe,EAAkB,aAAa,GAA6B,UAAU,EACrE,OAAgB,EAAkB,cAAuB;QACvE,KAAK,CAAC,OAAO,CAAC,CAAC;oBALW,IAAI;6BAGC,aAAa;uBAC9B,OAAO;8BAA2B,cAAc;QAC9C,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;IACjD,CAAC;CACF"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type ConversationRoutingIdentityOptions } from "./conversation-routing-identity.js";
|
|
2
|
+
type Row = Record<string, unknown>;
|
|
3
|
+
/** Public conversation inventory; legacy endpoint arrays remain private-action/diagnostic inputs. */
|
|
4
|
+
export declare function unifiedConversationList(result: Row, terminals: readonly Row[], identityOptions?: ConversationRoutingIdentityOptions): {
|
|
5
|
+
conversations: Row[];
|
|
6
|
+
conversation_routing: {
|
|
7
|
+
policy: string;
|
|
8
|
+
exact_associations: number;
|
|
9
|
+
unresolved_terminals: number;
|
|
10
|
+
};
|
|
11
|
+
};
|
|
12
|
+
export {};
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { associateConversationRoutes } from "./conversation-routing-identity.js";
|
|
2
|
+
import { recordValue } from "./value-guards.js";
|
|
3
|
+
const rows = (value) => Array.isArray(value) ? value.filter(item => recordValue(item)) : [];
|
|
4
|
+
/** Public conversation inventory; legacy endpoint arrays remain private-action/diagnostic inputs. */
|
|
5
|
+
export function unifiedConversationList(result, terminals, identityOptions = {}) {
|
|
6
|
+
const native = rows(result.codex_cli_sessions);
|
|
7
|
+
const association = associateConversationRoutes(terminals, native, identityOptions);
|
|
8
|
+
const linked = new Set(association.associations.map(item => item.terminalId));
|
|
9
|
+
const conversations = native.map(row => ({ ...row, route_preference: "codex_backend",
|
|
10
|
+
route_status: row.connection_state === "loaded_backend_verified" ? "backend_available" : "backend_unavailable",
|
|
11
|
+
terminal_aliases: association.associations.filter(item => item.nativeId === row.conversation_id).map(item => item.terminalId),
|
|
12
|
+
terminal_controls: rows(result.terminals).filter(terminal => association.associations.some(item => item.nativeId === row.conversation_id && item.terminalId === terminal.id)) }));
|
|
13
|
+
for (const terminal of rows(result.terminals)) {
|
|
14
|
+
if (linked.has(String(terminal.id)))
|
|
15
|
+
continue;
|
|
16
|
+
const actions = { ...recordValue(terminal.available_actions) };
|
|
17
|
+
for (const name of ["send", "status", "watch", "native_inspect", "permission_options", "model_options"]) {
|
|
18
|
+
const action = recordValue(actions[name]);
|
|
19
|
+
if (action)
|
|
20
|
+
actions[name] = { tool: action.tool, input: { conversation_id: terminal.id,
|
|
21
|
+
...(name === "native_inspect" ? { inspection: "status" } : {}) } };
|
|
22
|
+
}
|
|
23
|
+
conversations.push({ ...terminal, conversation_id: terminal.id, title: terminal.workspace ?? terminal.cwd ?? terminal.id,
|
|
24
|
+
route_preference: terminal.agent === "codex" ? "codex_backend" : "terminal", route_status: terminal.agent === "codex" ? "identity_unresolved" : "terminal_only", available_actions: actions });
|
|
25
|
+
}
|
|
26
|
+
conversations.push(...rows(result.desktop_sessions).map(row => ({ ...row, route_preference: "desktop_ipc" })));
|
|
27
|
+
return { ...result, conversations, conversation_routing: { policy: "backend_first", exact_associations: association.associations.length,
|
|
28
|
+
unresolved_terminals: association.unassociated.filter(item => terminals.some(t => t.id === item.terminalId && t.agent === "codex")).length } };
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=conversation-list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conversation-list.js","sourceRoot":"","sources":["../../src/conversation-list.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type ConversationRouteChoice, type ConversationRouteInput, type ConversationRouteStore } from "./conversation-route-store.js";
|
|
2
|
+
export type ConversationRouteSelection = ConversationRouteChoice & {
|
|
3
|
+
reason?: string;
|
|
4
|
+
};
|
|
5
|
+
export interface ConversationRouteDispatchOptions {
|
|
6
|
+
command: string;
|
|
7
|
+
input?: ConversationRouteInput;
|
|
8
|
+
select(): Promise<ConversationRouteSelection>;
|
|
9
|
+
execute(choice: ConversationRouteSelection): Promise<Record<string, unknown>>;
|
|
10
|
+
store?: ConversationRouteStore;
|
|
11
|
+
}
|
|
12
|
+
/** Fallback belongs to preflight selection. Once chosen, delivery errors never switch transports. */
|
|
13
|
+
export declare function dispatchConversationRoute(options: ConversationRouteDispatchOptions): Promise<Record<string, unknown>>;
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { ConversationRouteError } from "./conversation-route-store.js";
|
|
2
|
+
function choiceFromRecord(record) {
|
|
3
|
+
return { route: record.route, targetId: record.target_id };
|
|
4
|
+
}
|
|
5
|
+
function sameChoice(left, right) {
|
|
6
|
+
return left.route === right.route && left.targetId === right.targetId;
|
|
7
|
+
}
|
|
8
|
+
function resultWithRoute(result, choice, input, replayed = false) {
|
|
9
|
+
return { ...result, ...(replayed ? { replayed: true } : {}),
|
|
10
|
+
...(input ? { message_id: input.messageId, requested_conversation_id: input.canonicalTarget } : {}),
|
|
11
|
+
routing: { policy: "backend_first", transport: choice.route === "native" ? "codex_backend" : "terminal",
|
|
12
|
+
selected_target: choice.targetId, ...(choice.reason ? { reason: choice.reason } : {}) } };
|
|
13
|
+
}
|
|
14
|
+
function errorCode(error) {
|
|
15
|
+
const code = error && typeof error === "object" && "code" in error ? error.code : undefined;
|
|
16
|
+
return typeof code === "string" && /^[a-zA-Z0-9_-]{1,100}$/.test(code) ? code : undefined;
|
|
17
|
+
}
|
|
18
|
+
function saveReceipt(store, input, choice, result) {
|
|
19
|
+
try {
|
|
20
|
+
return { receipt: store.recordReceipt(input, choice, result).receipt, replayed: false };
|
|
21
|
+
}
|
|
22
|
+
catch (error) {
|
|
23
|
+
if (!(error instanceof ConversationRouteError) || error.code !== "conversation_route_conflict")
|
|
24
|
+
throw error;
|
|
25
|
+
// Concurrent same-message executions are deduplicated by the provider. Their observations can differ;
|
|
26
|
+
// preserve the first receipt only after the journal revalidates immutable input and route identity.
|
|
27
|
+
const existing = store.load(input);
|
|
28
|
+
if (!existing?.receipt || !sameChoice(choice, choiceFromRecord(existing)))
|
|
29
|
+
throw error;
|
|
30
|
+
return { receipt: existing.receipt, replayed: true };
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
/** Fallback belongs to preflight selection. Once chosen, delivery errors never switch transports. */
|
|
34
|
+
export async function dispatchConversationRoute(options) {
|
|
35
|
+
if (options.command !== "send") {
|
|
36
|
+
const choice = await options.select();
|
|
37
|
+
return resultWithRoute(await options.execute(choice), choice, options.input);
|
|
38
|
+
}
|
|
39
|
+
const { input, store } = options;
|
|
40
|
+
if (!input || !store)
|
|
41
|
+
throw new Error("Send routing requires immutable input and a durable route store");
|
|
42
|
+
let record = store.load(input);
|
|
43
|
+
if (record?.receipt)
|
|
44
|
+
return resultWithRoute(record.receipt, choiceFromRecord(record), input, true);
|
|
45
|
+
let choice;
|
|
46
|
+
if (record)
|
|
47
|
+
choice = choiceFromRecord(record);
|
|
48
|
+
else {
|
|
49
|
+
const selected = await options.select();
|
|
50
|
+
record = store.reserve(input, selected).record;
|
|
51
|
+
choice = sameChoice(selected, choiceFromRecord(record)) ? selected : choiceFromRecord(record);
|
|
52
|
+
if (record.receipt)
|
|
53
|
+
return resultWithRoute(record.receipt, choice, input, true);
|
|
54
|
+
}
|
|
55
|
+
try {
|
|
56
|
+
// The executor must pass the original stable message ID to its selected provider's dispatch ledger.
|
|
57
|
+
const result = await options.execute(choice);
|
|
58
|
+
const saved = saveReceipt(store, input, choice, result);
|
|
59
|
+
return resultWithRoute(saved.receipt, choice, input, saved.replayed);
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
store.markUncertain(input, choice, errorCode(error));
|
|
63
|
+
throw error;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=conversation-route-dispatch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conversation-route-dispatch.js","sourceRoot":"","sources":["../../src/conversation-route-dispatch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { type CodexNativeTaskService } from "./codex-native-task-service.js";
|
|
2
|
+
import { type ConversationRouteInput } from "./conversation-route-store.js";
|
|
3
|
+
import type { ConversationRouteSelection } from "./conversation-route-dispatch.js";
|
|
4
|
+
export interface LegacyConversationRouteOptions {
|
|
5
|
+
input: ConversationRouteInput;
|
|
6
|
+
nativeTasks: Pick<CodexNativeTaskService, "status">;
|
|
7
|
+
/** The same host runtime directory used by explicit terminal Send. */
|
|
8
|
+
terminalRuntimeDir: string;
|
|
9
|
+
/** Required to keep an old explicit Send in the provider that owns its ledger. */
|
|
10
|
+
expectedTerminalToken?: string;
|
|
11
|
+
managedOnly?: boolean;
|
|
12
|
+
}
|
|
13
|
+
/** Consult only the two exact old message ledgers, before backend discovery or input.
|
|
14
|
+
* An old reservation remains a route pin even when its outcome is uncertain.
|
|
15
|
+
* Terminal receipts predate public target storage; their provider must still
|
|
16
|
+
* validate runtime key and physical token before replay or any input.
|
|
17
|
+
*/
|
|
18
|
+
export declare function selectLegacyConversationRoute(options: LegacyConversationRouteOptions): ConversationRouteSelection | undefined;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { assertCodexNativeTaskRecord } from "./codex-native-state-store.js";
|
|
3
|
+
import { nativeDigest, nativeErrorCode } from "./codex-native-task-service.js";
|
|
4
|
+
import { ConversationRouteError } from "./conversation-route-store.js";
|
|
5
|
+
import { parseTerminalConversationId } from "./terminal-agent-adapter.js";
|
|
6
|
+
import { terminalSubmissionPayload } from "./terminal-dispatch-execution.js";
|
|
7
|
+
import { createTerminalUserSendIntentRepository } from "./terminal-user-send-intent.js";
|
|
8
|
+
function conflict(detail) {
|
|
9
|
+
throw new ConversationRouteError("conversation_route_conflict", `Message ID is already bound to different immutable request input or a different legacy route: ${detail}`);
|
|
10
|
+
}
|
|
11
|
+
/** Consult only the two exact old message ledgers, before backend discovery or input.
|
|
12
|
+
* An old reservation remains a route pin even when its outcome is uncertain.
|
|
13
|
+
* Terminal receipts predate public target storage; their provider must still
|
|
14
|
+
* validate runtime key and physical token before replay or any input.
|
|
15
|
+
*/
|
|
16
|
+
export function selectLegacyConversationRoute(options) {
|
|
17
|
+
const { input, nativeTasks, terminalRuntimeDir } = options;
|
|
18
|
+
const id = `codex-cli-watch:${nativeDigest([input.controllerSession, input.messageId])}`;
|
|
19
|
+
let native;
|
|
20
|
+
try {
|
|
21
|
+
native = nativeTasks.status(id);
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
if (nativeErrorCode(error) !== "codex_native_watch_not_found")
|
|
25
|
+
throw error;
|
|
26
|
+
}
|
|
27
|
+
if (native) {
|
|
28
|
+
assertCodexNativeTaskRecord(native);
|
|
29
|
+
if (native.id !== id || native.kind !== "send" || native.controller_session !== input.controllerSession ||
|
|
30
|
+
native.send_intent?.message_id !== input.messageId || native.send_intent.text !== input.requestText) {
|
|
31
|
+
conflict("native message identity or request changed");
|
|
32
|
+
}
|
|
33
|
+
if (native.native_id !== input.canonicalTarget)
|
|
34
|
+
conflict("native conversation changed or terminal alias is unproven");
|
|
35
|
+
}
|
|
36
|
+
const terminal = createTerminalUserSendIntentRepository({ runtimeDir: terminalRuntimeDir }).loadMessage({ messageId: input.messageId });
|
|
37
|
+
if (native && terminal)
|
|
38
|
+
conflict("both transport ledgers already exist; automatic routing is ambiguous");
|
|
39
|
+
if (native)
|
|
40
|
+
return { route: "native", targetId: native.native_id, reason: "legacy_native_message" };
|
|
41
|
+
if (!terminal)
|
|
42
|
+
return undefined;
|
|
43
|
+
const requestHash = createHash("sha256").update(terminalSubmissionPayload(input.requestText)).digest("hex");
|
|
44
|
+
if (terminal.request_hash !== requestHash)
|
|
45
|
+
conflict("terminal request changed");
|
|
46
|
+
const target = parseTerminalConversationId(input.canonicalTarget);
|
|
47
|
+
if (target?.agent !== "codex")
|
|
48
|
+
conflict("legacy terminal receipt cannot identify a terminal from a backend alias");
|
|
49
|
+
if (options.managedOnly || options.expectedTerminalToken !== terminal.physical_token) {
|
|
50
|
+
conflict("legacy terminal Send requires its exact explicit terminal authority");
|
|
51
|
+
}
|
|
52
|
+
return { route: "terminal", targetId: input.canonicalTarget, reason: "legacy_terminal_message" };
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=conversation-route-legacy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conversation-route-legacy.js","sourceRoot":"","sources":["../../src/conversation-route-legacy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAAE,YAAY,EAAE,eAAe,EAA+B,MAAM,gCAAgC,CAAC;AAC5G,OAAO,EAAE,sBAAsB,EAA+B,MAAM,+BAA+B,CAAC;AAEpG,OAAO,EAAE,2BAA2B,EAAE,MAAM,6BAA6B,CAAC;AAC1E,OAAO,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;AAC7E,OAAO,EAAE,sCAAsC,EAAE,MAAM,gCAAgC,CAAC;AAYxF,SAAS,QAAQ,CAAC,MAAc;IAC9B,MAAM,IAAI,sBAAsB,CAAC,6BAA6B,EAC5D,iGAAiG,MAAM,EAAE,CAAC,CAAC;AAC/G,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,6BAA6B,CAAC,OAAuC;IACnF,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,GAAG,OAAO,CAAC;IAC3D,MAAM,EAAE,GAAG,mBAAmB,YAAY,CAAC,CAAC,KAAK,CAAC,iBAAiB,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;IACzF,IAAI,MAAM,CAAC;IACX,IAAI,CAAC;QAAC,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAAC,CAAC;IACxC,OAAO,KAAK,EAAE,CAAC;QAAC,IAAI,eAAe,CAAC,KAAK,CAAC,KAAK,8BAA8B;YAAE,MAAM,KAAK,CAAC;IAAC,CAAC;IAC7F,IAAI,MAAM,EAAE,CAAC;QACX,2BAA2B,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,IAAI,MAAM,CAAC,kBAAkB,KAAK,KAAK,CAAC,iBAAiB;YACrG,MAAM,CAAC,WAAW,EAAE,UAAU,KAAK,KAAK,CAAC,SAAS,IAAI,MAAM,CAAC,WAAW,CAAC,IAAI,KAAK,KAAK,CAAC,WAAW,EAAE,CAAC;YACtG,QAAQ,CAAC,4CAA4C,CAAC,CAAC;QACzD,CAAC;QACD,IAAI,MAAM,CAAC,SAAS,KAAK,KAAK,CAAC,eAAe;YAAE,QAAQ,CAAC,2DAA2D,CAAC,CAAC;IACxH,CAAC;IACD,MAAM,QAAQ,GAAG,sCAAsC,CAAC,EAAE,UAAU,EAAE,kBAAkB,EAAE,CAAC,CAAC,WAAW,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;IACxI,IAAI,MAAM,IAAI,QAAQ;QAAE,QAAQ,CAAC,sEAAsE,CAAC,CAAC;IACzG,IAAI,MAAM;QAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,uBAAuB,EAAE,CAAC;IACpG,IAAI,CAAC,QAAQ;QAAE,OAAO,SAAS,CAAC;IAChC,MAAM,WAAW,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,yBAAyB,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5G,IAAI,QAAQ,CAAC,YAAY,KAAK,WAAW;QAAE,QAAQ,CAAC,0BAA0B,CAAC,CAAC;IAChF,MAAM,MAAM,GAAG,2BAA2B,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IAClE,IAAI,MAAM,EAAE,KAAK,KAAK,OAAO;QAAE,QAAQ,CAAC,yEAAyE,CAAC,CAAC;IACnH,IAAI,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,qBAAqB,KAAK,QAAQ,CAAC,cAAc,EAAE,CAAC;QACrF,QAAQ,CAAC,qEAAqE,CAAC,CAAC;IAClF,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,CAAC,eAAe,EAAE,MAAM,EAAE,yBAAyB,EAAE,CAAC;AACnG,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
export interface ConversationRouteInput {
|
|
2
|
+
controllerSession: string;
|
|
3
|
+
messageId: string;
|
|
4
|
+
requestText: string;
|
|
5
|
+
/** The selected public target. A retry through a different alias conflicts instead of authorizing another send. */
|
|
6
|
+
canonicalTarget: string;
|
|
7
|
+
}
|
|
8
|
+
export interface ConversationRouteChoice {
|
|
9
|
+
route: "native" | "terminal";
|
|
10
|
+
targetId: string;
|
|
11
|
+
}
|
|
12
|
+
export interface ConversationRouteRecord {
|
|
13
|
+
schema: "agent-knock-knock/conversation-route";
|
|
14
|
+
version: 1;
|
|
15
|
+
revision: number;
|
|
16
|
+
id: string;
|
|
17
|
+
controller_session: string;
|
|
18
|
+
message_id: string;
|
|
19
|
+
request_text: string;
|
|
20
|
+
canonical_target: string;
|
|
21
|
+
route: ConversationRouteChoice["route"];
|
|
22
|
+
target_id: string;
|
|
23
|
+
created_at: string;
|
|
24
|
+
updated_at: string;
|
|
25
|
+
/** A recorded receipt is an observation, not proof of delivery or task acceptance. */
|
|
26
|
+
state: "reserved" | "uncertain" | "recorded";
|
|
27
|
+
receipt?: Record<string, unknown>;
|
|
28
|
+
error_code?: string;
|
|
29
|
+
}
|
|
30
|
+
export interface ConversationRouteStore {
|
|
31
|
+
load(input: ConversationRouteInput): ConversationRouteRecord | undefined;
|
|
32
|
+
reserve(input: ConversationRouteInput, choice: ConversationRouteChoice): {
|
|
33
|
+
record: ConversationRouteRecord;
|
|
34
|
+
created: boolean;
|
|
35
|
+
};
|
|
36
|
+
recordReceipt(input: ConversationRouteInput, choice: ConversationRouteChoice, receipt: Record<string, unknown>): ConversationRouteRecord;
|
|
37
|
+
markUncertain(input: ConversationRouteInput, choice: ConversationRouteChoice, errorCode?: string): ConversationRouteRecord;
|
|
38
|
+
}
|
|
39
|
+
export declare class ConversationRouteError extends Error {
|
|
40
|
+
readonly code: "conversation_route_conflict" | "conversation_route_missing" | "conversation_route_invalid";
|
|
41
|
+
constructor(code: "conversation_route_conflict" | "conversation_route_missing" | "conversation_route_invalid", message: string);
|
|
42
|
+
}
|
|
43
|
+
export declare function conversationRouteId(controllerSession: string, messageId: string): string;
|
|
44
|
+
/** Select once after preflight; crashes and uncertain delivery never authorize a different route.
|
|
45
|
+
* This journal does not replace the selected provider's stable-message-ID dispatch ledger.
|
|
46
|
+
*/
|
|
47
|
+
export declare function createConversationRouteStore(storeDir: string, locks: {
|
|
48
|
+
acquire(lockPath: string): () => void;
|
|
49
|
+
}, options?: {
|
|
50
|
+
now?(): Date;
|
|
51
|
+
}): ConversationRouteStore;
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { isDeepStrictEqual } from "node:util";
|
|
3
|
+
import { createNativeRecordRepository } from "./codex-native-record-store.js";
|
|
4
|
+
export class ConversationRouteError extends Error {
|
|
5
|
+
code;
|
|
6
|
+
constructor(code, message) {
|
|
7
|
+
super(message);
|
|
8
|
+
this.code = code;
|
|
9
|
+
this.name = "ConversationRouteError";
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
const nonblank = (value) => typeof value === "string" && value.trim().length > 0;
|
|
13
|
+
const recordValue = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
|
|
14
|
+
const validTime = (value) => typeof value === "string" && Number.isFinite(Date.parse(value));
|
|
15
|
+
function invalid(message) { throw new ConversationRouteError("conversation_route_invalid", message); }
|
|
16
|
+
function conflict() { throw new ConversationRouteError("conversation_route_conflict", "Message ID is already bound to different immutable request input or a different conversation route"); }
|
|
17
|
+
export function conversationRouteId(controllerSession, messageId) {
|
|
18
|
+
if (!nonblank(controllerSession) || !nonblank(messageId))
|
|
19
|
+
invalid("Conversation route requires a controller and message ID");
|
|
20
|
+
return `conversation-route:${createHash("sha256").update(JSON.stringify([controllerSession, messageId])).digest("hex")}`;
|
|
21
|
+
}
|
|
22
|
+
function assertInput(input) {
|
|
23
|
+
if (!input || !nonblank(input.controllerSession) || !nonblank(input.messageId) ||
|
|
24
|
+
!nonblank(input.requestText) || !nonblank(input.canonicalTarget))
|
|
25
|
+
invalid("Invalid conversation route input");
|
|
26
|
+
}
|
|
27
|
+
function assertChoice(choice) {
|
|
28
|
+
if (!choice || !["native", "terminal"].includes(choice.route) || !nonblank(choice.targetId))
|
|
29
|
+
invalid("Invalid conversation route choice");
|
|
30
|
+
}
|
|
31
|
+
function assertMatches(record, input) {
|
|
32
|
+
if (record.controller_session !== input.controllerSession || record.message_id !== input.messageId ||
|
|
33
|
+
record.request_text !== input.requestText || record.canonical_target !== input.canonicalTarget)
|
|
34
|
+
conflict();
|
|
35
|
+
}
|
|
36
|
+
function assertRecord(value) {
|
|
37
|
+
const r = value;
|
|
38
|
+
if (!r || r.schema !== "agent-knock-knock/conversation-route" || r.version !== 1 ||
|
|
39
|
+
!Number.isSafeInteger(r.revision) || r.revision < 1 || !nonblank(r.request_text) || !nonblank(r.canonical_target) ||
|
|
40
|
+
!validTime(r.created_at) || !validTime(r.updated_at) || !["reserved", "uncertain", "recorded"].includes(r.state)) {
|
|
41
|
+
invalid("Invalid conversation route record");
|
|
42
|
+
}
|
|
43
|
+
if (r.id !== conversationRouteId(r.controller_session, r.message_id))
|
|
44
|
+
invalid("Conversation route record identity mismatch");
|
|
45
|
+
assertChoice({ route: r.route, targetId: r.target_id });
|
|
46
|
+
if ((r.state === "recorded") !== (r.receipt !== undefined) || r.receipt !== undefined && !recordValue(r.receipt) ||
|
|
47
|
+
r.error_code !== undefined && !/^[a-zA-Z0-9_-]{1,100}$/.test(r.error_code))
|
|
48
|
+
invalid("Invalid conversation route outcome");
|
|
49
|
+
}
|
|
50
|
+
function assertUpdate(previous, next) {
|
|
51
|
+
for (const key of ["id", "controller_session", "message_id", "request_text", "canonical_target", "route", "target_id", "created_at"]) {
|
|
52
|
+
if (previous[key] !== next[key])
|
|
53
|
+
conflict();
|
|
54
|
+
}
|
|
55
|
+
if (previous.receipt && !isDeepStrictEqual(previous.receipt, next.receipt))
|
|
56
|
+
conflict();
|
|
57
|
+
if (previous.state !== "reserved" && next.state === "reserved")
|
|
58
|
+
conflict();
|
|
59
|
+
}
|
|
60
|
+
/** Select once after preflight; crashes and uncertain delivery never authorize a different route.
|
|
61
|
+
* This journal does not replace the selected provider's stable-message-ID dispatch ledger.
|
|
62
|
+
*/
|
|
63
|
+
export function createConversationRouteStore(storeDir, locks, options = {}) {
|
|
64
|
+
const now = options.now ?? (() => new Date());
|
|
65
|
+
const repository = createNativeRecordRepository({ storeDir, directory: "conversation-routes",
|
|
66
|
+
prefix: "conversation-route:", acquire: locks.acquire, assert: assertRecord, assertUpdate });
|
|
67
|
+
const load = (input) => {
|
|
68
|
+
assertInput(input);
|
|
69
|
+
const found = repository.load(conversationRouteId(input.controllerSession, input.messageId));
|
|
70
|
+
if (found)
|
|
71
|
+
assertMatches(found, input);
|
|
72
|
+
return found;
|
|
73
|
+
};
|
|
74
|
+
const update = (input, choice, operation) => {
|
|
75
|
+
assertInput(input);
|
|
76
|
+
assertChoice(choice);
|
|
77
|
+
return repository.withLock(conversationRouteId(input.controllerSession, input.messageId), () => {
|
|
78
|
+
const current = load(input);
|
|
79
|
+
if (!current)
|
|
80
|
+
throw new ConversationRouteError("conversation_route_missing", "Conversation route must be reserved before recording an outcome");
|
|
81
|
+
if (current.route !== choice.route || current.target_id !== choice.targetId)
|
|
82
|
+
conflict();
|
|
83
|
+
const next = operation(current);
|
|
84
|
+
return next === current ? current : repository.save({ ...next, updated_at: now().toISOString() }, current.revision);
|
|
85
|
+
});
|
|
86
|
+
};
|
|
87
|
+
return {
|
|
88
|
+
load,
|
|
89
|
+
reserve(input, choice) {
|
|
90
|
+
assertInput(input);
|
|
91
|
+
assertChoice(choice);
|
|
92
|
+
return repository.withLock(conversationRouteId(input.controllerSession, input.messageId), () => {
|
|
93
|
+
const previous = load(input);
|
|
94
|
+
if (previous)
|
|
95
|
+
return { record: previous, created: false };
|
|
96
|
+
const date = now().toISOString();
|
|
97
|
+
return { created: true, record: repository.save({ schema: "agent-knock-knock/conversation-route", version: 1,
|
|
98
|
+
revision: 1, id: conversationRouteId(input.controllerSession, input.messageId), controller_session: input.controllerSession,
|
|
99
|
+
message_id: input.messageId, request_text: input.requestText, canonical_target: input.canonicalTarget,
|
|
100
|
+
route: choice.route, target_id: choice.targetId, created_at: date, updated_at: date, state: "reserved" }, null) };
|
|
101
|
+
});
|
|
102
|
+
},
|
|
103
|
+
recordReceipt(input, choice, receipt) {
|
|
104
|
+
if (!recordValue(receipt))
|
|
105
|
+
invalid("Conversation route receipt must be an object");
|
|
106
|
+
const saved = JSON.parse(JSON.stringify(receipt));
|
|
107
|
+
if (!recordValue(saved))
|
|
108
|
+
invalid("Conversation route receipt must serialize to an object");
|
|
109
|
+
return update(input, choice, current => {
|
|
110
|
+
if (current.receipt) {
|
|
111
|
+
if (!isDeepStrictEqual(current.receipt, saved))
|
|
112
|
+
conflict();
|
|
113
|
+
return current;
|
|
114
|
+
}
|
|
115
|
+
return { ...current, state: "recorded", receipt: saved };
|
|
116
|
+
});
|
|
117
|
+
},
|
|
118
|
+
markUncertain(input, choice, errorCode) {
|
|
119
|
+
if (errorCode !== undefined && !/^[a-zA-Z0-9_-]{1,100}$/.test(errorCode))
|
|
120
|
+
invalid("Invalid conversation route error code");
|
|
121
|
+
return update(input, choice, current => current.state !== "reserved" ? current :
|
|
122
|
+
{ ...current, state: "uncertain", ...(errorCode ? { error_code: errorCode } : {}) });
|
|
123
|
+
}
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=conversation-route-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conversation-route-store.js","sourceRoot":"","sources":["../../src/conversation-route-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
type Options = Record<string, unknown>;
|
|
2
|
+
type Row = Record<string, unknown>;
|
|
3
|
+
export interface ConversationRoutingCliPorts {
|
|
4
|
+
terminals(options: Options, terminalId?: string): Promise<Row[]>;
|
|
5
|
+
/** Executes the existing command without entering this router again. */
|
|
6
|
+
execute(command: string, options: Options): Promise<Row>;
|
|
7
|
+
}
|
|
8
|
+
export declare function executeConversationCommand(command: string | undefined, options: Options, terminals: ConversationRoutingCliPorts["terminals"], execute: (command: string | undefined, options: Options) => Promise<void>): Promise<void>;
|
|
9
|
+
/** A read failure is fallback evidence only here, before either task transport is invoked. */
|
|
10
|
+
export declare function backendPreflightUnavailable(error: unknown): boolean;
|
|
11
|
+
export declare function dispatchRoutedConversationCli(command: string | undefined, original: Options, ports: ConversationRoutingCliPorts): Promise<boolean>;
|
|
12
|
+
export {};
|