@scotthuang/agent-knock-knock 0.13.16 → 0.13.18

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.
Files changed (184) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/README.md +4 -4
  3. package/dist/src/claude-terminal-agent-adapter.js +1 -1
  4. package/dist/src/claude-terminal-agent-adapter.js.map +1 -1
  5. package/dist/src/codex-app-server-interaction-client.js +68 -26
  6. package/dist/src/codex-app-server-interaction-client.js.map +1 -1
  7. package/dist/src/codex-app-server-read-client.js +52 -20
  8. package/dist/src/codex-app-server-read-client.js.map +1 -1
  9. package/dist/src/codex-astra-composer-proof.js +1 -1
  10. package/dist/src/codex-astra-composer-proof.js.map +1 -1
  11. package/dist/src/codex-async-question-adapter.js +14 -4
  12. package/dist/src/codex-async-question-adapter.js.map +1 -1
  13. package/dist/src/codex-lifecycle-compatibility.d.ts +1 -1
  14. package/dist/src/codex-lifecycle-compatibility.js +9 -3
  15. package/dist/src/codex-lifecycle-compatibility.js.map +1 -1
  16. package/dist/src/codex-open-rollout-inventory.d.ts +51 -0
  17. package/dist/src/codex-open-rollout-inventory.js +365 -0
  18. package/dist/src/codex-open-rollout-inventory.js.map +1 -0
  19. package/dist/src/codex-paginated-thread-binding.js +1 -1
  20. package/dist/src/codex-paginated-thread-binding.js.map +1 -1
  21. package/dist/src/codex-permission-surface.d.ts +1 -1
  22. package/dist/src/codex-permission-surface.js +1 -1
  23. package/dist/src/codex-permission-surface.js.map +1 -1
  24. package/dist/src/codex-rollout-bound-completion.d.ts +44 -0
  25. package/dist/src/codex-rollout-bound-completion.js +357 -0
  26. package/dist/src/codex-rollout-bound-completion.js.map +1 -0
  27. package/dist/src/codex-rollout-file.d.ts +15 -0
  28. package/dist/src/codex-rollout-file.js +98 -0
  29. package/dist/src/codex-rollout-file.js.map +1 -0
  30. package/dist/src/codex-rollout-human-task.d.ts +61 -0
  31. package/dist/src/codex-rollout-human-task.js +555 -0
  32. package/dist/src/codex-rollout-human-task.js.map +1 -0
  33. package/dist/src/codex-rollout-interaction-evidence.d.ts +48 -0
  34. package/dist/src/codex-rollout-interaction-evidence.js +521 -0
  35. package/dist/src/codex-rollout-interaction-evidence.js.map +1 -0
  36. package/dist/src/codex-rollout-inventory.d.ts +5 -0
  37. package/dist/src/codex-rollout-inventory.js +81 -0
  38. package/dist/src/codex-rollout-inventory.js.map +1 -0
  39. package/dist/src/codex-rollout-records.d.ts +49 -0
  40. package/dist/src/codex-rollout-records.js +298 -0
  41. package/dist/src/codex-rollout-records.js.map +1 -0
  42. package/dist/src/codex-sqlite-thread-query.d.ts +85 -0
  43. package/dist/src/codex-sqlite-thread-query.js +440 -0
  44. package/dist/src/codex-sqlite-thread-query.js.map +1 -0
  45. package/dist/src/codex-status-history-navigation.d.ts +1 -1
  46. package/dist/src/codex-status-history-navigation.js +1 -1
  47. package/dist/src/codex-status-history-navigation.js.map +1 -1
  48. package/dist/src/codex-store-adapter.d.ts +3 -50
  49. package/dist/src/codex-store-adapter.js +5 -796
  50. package/dist/src/codex-store-adapter.js.map +1 -1
  51. package/dist/src/codex-terminal-agent-adapter.js +4 -2
  52. package/dist/src/codex-terminal-agent-adapter.js.map +1 -1
  53. package/dist/src/native-thread-lifecycle-cli-adapter.d.ts +4 -134
  54. package/dist/src/native-thread-lifecycle-cli-adapter.js +19 -633
  55. package/dist/src/native-thread-lifecycle-cli-adapter.js.map +1 -1
  56. package/dist/src/native-thread-lifecycle-cli-contract.d.ts +138 -0
  57. package/dist/src/native-thread-lifecycle-cli-contract.js +2 -0
  58. package/dist/src/native-thread-lifecycle-cli-contract.js.map +1 -0
  59. package/dist/src/semantic-permission-control.js +33 -6
  60. package/dist/src/semantic-permission-control.js.map +1 -1
  61. package/dist/src/semantic-tool-descriptions.d.ts +26 -0
  62. package/dist/src/semantic-tool-descriptions.js +259 -0
  63. package/dist/src/semantic-tool-descriptions.js.map +1 -0
  64. package/dist/src/semantic-tool-runtime.js +45 -37
  65. package/dist/src/semantic-tool-runtime.js.map +1 -1
  66. package/dist/src/semantic-tool-schemas.js +134 -33
  67. package/dist/src/semantic-tool-schemas.js.map +1 -1
  68. package/dist/src/terminal-action-contracts.d.ts +4 -0
  69. package/dist/src/terminal-action-contracts.js +695 -0
  70. package/dist/src/terminal-action-contracts.js.map +1 -0
  71. package/dist/src/terminal-composer-classifier.d.ts +1 -1
  72. package/dist/src/terminal-composer-classifier.js +2 -2
  73. package/dist/src/terminal-composer-classifier.js.map +1 -1
  74. package/dist/src/terminal-interaction-response-bridge.js +1 -1
  75. package/dist/src/terminal-interaction-response-bridge.js.map +1 -1
  76. package/dist/src/terminal-list-renderer.d.ts +1 -2
  77. package/dist/src/terminal-list-renderer.js +8 -424
  78. package/dist/src/terminal-list-renderer.js.map +1 -1
  79. package/dist/src/terminal-model-control-action-policy.d.ts +1 -1
  80. package/dist/src/terminal-model-control-availability.d.ts +1 -1
  81. package/dist/src/terminal-model-control-availability.js +1 -1
  82. package/dist/src/terminal-model-control-availability.js.map +1 -1
  83. package/dist/src/terminal-model-control-cli-adapter.d.ts +34 -0
  84. package/dist/src/terminal-model-control-cli-adapter.js +669 -0
  85. package/dist/src/terminal-model-control-cli-adapter.js.map +1 -0
  86. package/dist/src/terminal-model-control-contract.d.ts +198 -0
  87. package/dist/src/terminal-model-control-contract.js +15 -0
  88. package/dist/src/terminal-model-control-contract.js.map +1 -0
  89. package/dist/src/terminal-model-control-input.d.ts +29 -0
  90. package/dist/src/terminal-model-control-input.js +86 -0
  91. package/dist/src/terminal-model-control-input.js.map +1 -0
  92. package/dist/src/terminal-model-control-profile.d.ts +5 -1
  93. package/dist/src/terminal-model-control-profile.js +21 -7
  94. package/dist/src/terminal-model-control-profile.js.map +1 -1
  95. package/dist/src/terminal-model-control-subject.d.ts +52 -0
  96. package/dist/src/terminal-model-control-subject.js +73 -0
  97. package/dist/src/terminal-model-control-subject.js.map +1 -1
  98. package/dist/src/terminal-model-control-surface.d.ts +82 -0
  99. package/dist/src/terminal-model-control-surface.js +688 -0
  100. package/dist/src/terminal-model-control-surface.js.map +1 -0
  101. package/dist/src/terminal-model-control.d.ts +6 -270
  102. package/dist/src/terminal-model-control.js +11 -988
  103. package/dist/src/terminal-model-control.js.map +1 -1
  104. package/dist/src/terminal-model-selection.d.ts +33 -0
  105. package/dist/src/terminal-model-selection.js +143 -0
  106. package/dist/src/terminal-model-selection.js.map +1 -0
  107. package/dist/src/terminal-monitor-application-service.js +38 -59
  108. package/dist/src/terminal-monitor-application-service.js.map +1 -1
  109. package/dist/src/terminal-monitor-attention-store.d.ts +65 -0
  110. package/dist/src/terminal-monitor-attention-store.js +518 -0
  111. package/dist/src/terminal-monitor-attention-store.js.map +1 -0
  112. package/dist/src/terminal-monitor-collateral-recovery.d.ts +12 -0
  113. package/dist/src/terminal-monitor-collateral-recovery.js +415 -0
  114. package/dist/src/terminal-monitor-collateral-recovery.js.map +1 -0
  115. package/dist/src/terminal-monitor-interaction-projection.d.ts +19 -0
  116. package/dist/src/terminal-monitor-interaction-projection.js +48 -0
  117. package/dist/src/terminal-monitor-interaction-projection.js.map +1 -0
  118. package/dist/src/terminal-monitor-startup-recovery.d.ts +15 -0
  119. package/dist/src/terminal-monitor-startup-recovery.js +767 -0
  120. package/dist/src/terminal-monitor-startup-recovery.js.map +1 -0
  121. package/dist/src/terminal-monitor-state-cli-adapter.d.ts +2 -104
  122. package/dist/src/terminal-monitor-state-cli-adapter.js +28 -1640
  123. package/dist/src/terminal-monitor-state-cli-adapter.js.map +1 -1
  124. package/dist/src/terminal-monitor-state-contract.d.ts +108 -0
  125. package/dist/src/terminal-monitor-state-contract.js +8 -0
  126. package/dist/src/terminal-monitor-state-contract.js.map +1 -0
  127. package/dist/src/terminal-native-inspection-bridge.d.ts +4 -153
  128. package/dist/src/terminal-native-inspection-bridge.js +7 -646
  129. package/dist/src/terminal-native-inspection-bridge.js.map +1 -1
  130. package/dist/src/terminal-native-inspection-contract.d.ts +128 -0
  131. package/dist/src/terminal-native-inspection-contract.js +38 -0
  132. package/dist/src/terminal-native-inspection-contract.js.map +1 -0
  133. package/dist/src/terminal-native-inspection-profile.d.ts +15 -0
  134. package/dist/src/terminal-native-inspection-profile.js +189 -0
  135. package/dist/src/terminal-native-inspection-profile.js.map +1 -0
  136. package/dist/src/terminal-native-inspection-proof.d.ts +62 -0
  137. package/dist/src/terminal-native-inspection-proof.js +362 -0
  138. package/dist/src/terminal-native-inspection-proof.js.map +1 -0
  139. package/dist/src/terminal-permission-control-bridge.js +1 -1
  140. package/dist/src/terminal-permission-control-bridge.js.map +1 -1
  141. package/dist/src/terminal-permission-control.js +5 -1
  142. package/dist/src/terminal-permission-control.js.map +1 -1
  143. package/dist/src/terminal-questionnaire-adapter.js +5 -2
  144. package/dist/src/terminal-questionnaire-adapter.js.map +1 -1
  145. package/dist/src/terminal-runtime-cli-adapter.d.ts +2 -1
  146. package/dist/src/terminal-runtime-cli-adapter.js +1 -1
  147. package/dist/src/terminal-runtime-cli-adapter.js.map +1 -1
  148. package/dist/src/terminal-submission-acceptance.d.ts +5 -148
  149. package/dist/src/terminal-submission-acceptance.js +21 -1845
  150. package/dist/src/terminal-submission-acceptance.js.map +1 -1
  151. package/dist/src/terminal-watch-anchor-capture.d.ts +9 -0
  152. package/dist/src/terminal-watch-anchor-capture.js +139 -0
  153. package/dist/src/terminal-watch-anchor-capture.js.map +1 -0
  154. package/dist/src/terminal-watch-cli-adapter.d.ts +3 -117
  155. package/dist/src/terminal-watch-cli-adapter.js +10 -1992
  156. package/dist/src/terminal-watch-cli-adapter.js.map +1 -1
  157. package/dist/src/terminal-watch-cli-contract.d.ts +117 -0
  158. package/dist/src/terminal-watch-cli-contract.js +2 -0
  159. package/dist/src/terminal-watch-cli-contract.js.map +1 -0
  160. package/dist/src/terminal-watch-fallback-observation.d.ts +15 -0
  161. package/dist/src/terminal-watch-fallback-observation.js +249 -0
  162. package/dist/src/terminal-watch-fallback-observation.js.map +1 -0
  163. package/dist/src/terminal-watch-interaction-observation.d.ts +26 -0
  164. package/dist/src/terminal-watch-interaction-observation.js +262 -0
  165. package/dist/src/terminal-watch-interaction-observation.js.map +1 -0
  166. package/dist/src/terminal-watch-observation-adapter.d.ts +4 -0
  167. package/dist/src/terminal-watch-observation-adapter.js +307 -0
  168. package/dist/src/terminal-watch-observation-adapter.js.map +1 -0
  169. package/dist/src/terminal-watch-observation-evidence.d.ts +25 -0
  170. package/dist/src/terminal-watch-observation-evidence.js +184 -0
  171. package/dist/src/terminal-watch-observation-evidence.js.map +1 -0
  172. package/dist/src/terminal-watch-response-authority.d.ts +6 -0
  173. package/dist/src/terminal-watch-response-authority.js +333 -0
  174. package/dist/src/terminal-watch-response-authority.js.map +1 -0
  175. package/dist/src/terminal-watch-response-cli-adapter.d.ts +3 -0
  176. package/dist/src/terminal-watch-response-cli-adapter.js +230 -0
  177. package/dist/src/terminal-watch-response-cli-adapter.js.map +1 -0
  178. package/dist/src/terminal-watch-terminal-identity.d.ts +39 -0
  179. package/dist/src/terminal-watch-terminal-identity.js +380 -0
  180. package/dist/src/terminal-watch-terminal-identity.js.map +1 -0
  181. package/docs/codex-0.160.0-compatibility.md +126 -0
  182. package/docs/codex-permissions.md +12 -1
  183. package/package.json +3 -2
  184. package/templates/openclaw-skills/agent-knock-knock/SKILL.md +3 -3
@@ -0,0 +1,25 @@
1
+ /** Watch observation/checkpoint projections shared by provider adapters. */
2
+ import type { TerminalCompletionEvidence } from "./terminal-agent-adapter.js";
3
+ import type { CodexRolloutAcceptanceIdentity, TerminalSubmissionAcceptanceEvidence } from "./terminal-submission-acceptance.js";
4
+ import { type TerminalWatchObservation } from "./terminal-watch-service.js";
5
+ import type { TerminalWatch, ClaudeUserExplicitFallbackWatchObservationCheckpoint, CodexUserExplicitFallbackWatchObservationCheckpoint, TerminalWatchObservationCheckpoint, TerminalActivityWatchObservationCheckpoint } from "./terminal-watch-store.js";
6
+ import type { ExactTerminalWatchObservation } from "./terminal-watch-cli-contract.js";
7
+ export declare function fallbackPendingOrTerminalObservation(input: {
8
+ watch: TerminalWatch;
9
+ exactTerminal: ExactTerminalWatchObservation;
10
+ rawTerminal?: Record<string, unknown>;
11
+ terminalMatches: boolean;
12
+ observedAt: string;
13
+ observedEndOffsetBytes?: number;
14
+ observationCheckpoint?: TerminalWatchObservationCheckpoint;
15
+ reasonCode?: string;
16
+ }): TerminalWatchObservation;
17
+ export declare function codexFallbackObservationCheckpoint(watch: TerminalWatch): CodexUserExplicitFallbackWatchObservationCheckpoint;
18
+ export declare function claudeFallbackObservationCheckpoint(watch: TerminalWatch): ClaudeUserExplicitFallbackWatchObservationCheckpoint;
19
+ export declare function codexFallbackAcceptedCheckpoint(watch: TerminalWatch, acceptanceEvidence: TerminalSubmissionAcceptanceEvidence, currentIdentity: CodexRolloutAcceptanceIdentity): CodexUserExplicitFallbackWatchObservationCheckpoint;
20
+ export declare function claudeFallbackAcceptedCheckpoint(watch: TerminalWatch, acceptanceEvidence: TerminalSubmissionAcceptanceEvidence): ClaudeUserExplicitFallbackWatchObservationCheckpoint;
21
+ export declare function fallbackCompletionObservation(watch: TerminalWatch, observedAt: string, completion: TerminalCompletionEvidence, observedEndOffsetBytes?: number, observationCheckpoint?: TerminalWatchObservationCheckpoint): TerminalWatchObservation;
22
+ export declare function claudeObservationCheckpoint(watch: TerminalWatch): import("./claude-local-transcript-provider.js").ClaudeHumanStartedActiveTaskCheckpoint;
23
+ export declare function terminalActivityObservationCheckpoint(watch: TerminalWatch): TerminalActivityWatchObservationCheckpoint;
24
+ export declare function approvalFingerprint(terminal: Record<string, unknown>): string | undefined;
25
+ export declare function invalidatedObservation(watch: TerminalWatch, observedAt: string, reasonCode: string): TerminalWatchObservation;
@@ -0,0 +1,184 @@
1
+ import { terminalWatchObservationFence } from "./terminal-watch-service.js";
2
+ import { isRecord, nonBlankString as stringValue } from "./value-guards.js";
3
+ import { requiredString, sha256 } from "./terminal-watch-terminal-identity.js";
4
+ export function fallbackPendingOrTerminalObservation(input) {
5
+ if (input.exactTerminal.state === "unavailable") {
6
+ return {
7
+ ...terminalWatchObservationFence(input.watch),
8
+ kind: "unavailable",
9
+ observed_at: input.observedAt,
10
+ reason_code: input.reasonCode ?? "terminal_observation_unavailable"
11
+ };
12
+ }
13
+ if (input.exactTerminal.state === "absent" || !input.rawTerminal) {
14
+ return invalidatedObservation(input.watch, input.observedAt, "terminal_process_unavailable");
15
+ }
16
+ if (!input.terminalMatches) {
17
+ return invalidatedObservation(input.watch, input.observedAt, "terminal_identity_changed");
18
+ }
19
+ if (input.reasonCode) {
20
+ return {
21
+ ...terminalWatchObservationFence(input.watch),
22
+ kind: "unavailable",
23
+ observed_at: input.observedAt,
24
+ reason_code: input.reasonCode
25
+ };
26
+ }
27
+ return fallbackPendingObservation(input.watch, input.observedAt, input.observedEndOffsetBytes, input.observationCheckpoint);
28
+ }
29
+ function fallbackPendingObservation(watch, observedAt, observedEndOffsetBytes, observationCheckpoint) {
30
+ const effectiveCheckpoint = observationCheckpoint ?? (watch.anchor.schema ===
31
+ "agent-knock-knock/codex-user-explicit-fallback-watch-anchor"
32
+ ? watch.observation_checkpoint
33
+ : undefined);
34
+ const safeResumeOffsetBytes = effectiveCheckpoint
35
+ ?.safe_resume_offset_bytes ?? fallbackResumeOffset(watch, observedEndOffsetBytes);
36
+ return {
37
+ ...terminalWatchObservationFence(watch),
38
+ kind: "pending",
39
+ observed_at: observedAt,
40
+ safe_resume_offset_bytes: safeResumeOffsetBytes,
41
+ ...(effectiveCheckpoint
42
+ ? { observation_checkpoint: effectiveCheckpoint }
43
+ : {})
44
+ };
45
+ }
46
+ export function codexFallbackObservationCheckpoint(watch) {
47
+ const checkpoint = watch.observation_checkpoint;
48
+ if (!("schema" in checkpoint) ||
49
+ checkpoint.schema !==
50
+ "agent-knock-knock/codex-user-explicit-fallback-watch-checkpoint") {
51
+ throw new Error("Codex fallback Watch has no exact acceptance checkpoint");
52
+ }
53
+ return checkpoint;
54
+ }
55
+ export function claudeFallbackObservationCheckpoint(watch) {
56
+ const checkpoint = watch.observation_checkpoint;
57
+ if (!("schema" in checkpoint) ||
58
+ checkpoint.schema !==
59
+ "agent-knock-knock/claude-user-explicit-fallback-watch-checkpoint") {
60
+ throw new Error("Claude fallback Watch has no exact acceptance checkpoint");
61
+ }
62
+ return checkpoint;
63
+ }
64
+ export function codexFallbackAcceptedCheckpoint(watch, acceptanceEvidence, currentIdentity) {
65
+ const nativeThreadId = requiredString(currentIdentity.sessionId, "accepted Codex native thread id");
66
+ const processUuid = requiredString(currentIdentity.processUuid, "accepted Codex process UUID");
67
+ const processBirth = requiredString(currentIdentity.processBirth, "accepted Codex process birth");
68
+ const rollout = currentIdentity.rollout;
69
+ if (!rollout) {
70
+ throw new Error("accepted Codex rollout identity is unavailable");
71
+ }
72
+ const acceptanceOffset = numericMetadata(acceptanceEvidence.metadata, "observed_end_offset_bytes");
73
+ if (acceptanceOffset === undefined) {
74
+ throw new Error("accepted Codex rollout boundary is unavailable");
75
+ }
76
+ return {
77
+ schema: "agent-knock-knock/codex-user-explicit-fallback-watch-checkpoint",
78
+ version: 1,
79
+ safe_resume_offset_bytes: fallbackResumeOffset(watch, acceptanceOffset),
80
+ acceptance_evidence: acceptanceEvidence,
81
+ accepted_identity: {
82
+ native_thread_id: nativeThreadId,
83
+ process_uuid: processUuid,
84
+ process_birth: processBirth,
85
+ rollout
86
+ }
87
+ };
88
+ }
89
+ export function claudeFallbackAcceptedCheckpoint(watch, acceptanceEvidence) {
90
+ const acceptanceOffset = numericMetadata(acceptanceEvidence.metadata, "observed_end_offset_bytes");
91
+ if (acceptanceOffset === undefined) {
92
+ throw new Error("accepted Claude transcript boundary is unavailable");
93
+ }
94
+ const promptUuid = requiredString(acceptanceEvidence.acceptanceId, "accepted Claude prompt UUID");
95
+ return {
96
+ schema: "agent-knock-knock/claude-user-explicit-fallback-watch-checkpoint",
97
+ version: 1,
98
+ safe_resume_offset_bytes: fallbackResumeOffset(watch, acceptanceOffset),
99
+ acceptance_evidence: acceptanceEvidence,
100
+ accepted_prompt_uuid: promptUuid
101
+ };
102
+ }
103
+ export function fallbackCompletionObservation(watch, observedAt, completion, observedEndOffsetBytes, observationCheckpoint) {
104
+ const safeResumeOffsetBytes = observationCheckpoint
105
+ ?.safe_resume_offset_bytes ?? fallbackResumeOffset(watch, observedEndOffsetBytes);
106
+ const kind = completion.outcome === "failure" ? "failed" : "completed";
107
+ return {
108
+ ...terminalWatchObservationFence(watch),
109
+ kind,
110
+ observed_at: observedAt,
111
+ safe_resume_offset_bytes: safeResumeOffsetBytes,
112
+ ...(observationCheckpoint
113
+ ? { observation_checkpoint: observationCheckpoint }
114
+ : {}),
115
+ evidence_fingerprint: sha256({
116
+ kind,
117
+ watch_id: watch.watch_id,
118
+ completion_id: completion.id ?? null,
119
+ completion_timestamp: completion.timestamp ?? null,
120
+ anchor_fingerprint: watch.anchor.anchor_fingerprint
121
+ }),
122
+ reason_code: completion.outcome === "failure"
123
+ ? "anchored_task_failed"
124
+ : "anchored_task_completed",
125
+ completion_text: completion.text.slice(0, 4000),
126
+ completion_id: completion.id,
127
+ completion_timestamp: completion.timestamp
128
+ };
129
+ }
130
+ function fallbackResumeOffset(watch, observedEndOffsetBytes) {
131
+ return Math.max(watch.observation_checkpoint.safe_resume_offset_bytes, Number.isSafeInteger(observedEndOffsetBytes) &&
132
+ Number(observedEndOffsetBytes) >= 0
133
+ ? Number(observedEndOffsetBytes)
134
+ : 0);
135
+ }
136
+ function numericMetadata(metadata, field) {
137
+ const value = metadata?.[field];
138
+ return Number.isSafeInteger(value) && Number(value) >= 0
139
+ ? Number(value)
140
+ : undefined;
141
+ }
142
+ export function claudeObservationCheckpoint(watch) {
143
+ const checkpoint = watch.observation_checkpoint;
144
+ if (!("schema" in checkpoint) ||
145
+ checkpoint.schema !==
146
+ "agent-knock-knock/claude-human-started-active-task-checkpoint") {
147
+ throw new Error("Claude terminal Watch has no continuation checkpoint");
148
+ }
149
+ return checkpoint;
150
+ }
151
+ export function terminalActivityObservationCheckpoint(watch) {
152
+ const checkpoint = watch.observation_checkpoint;
153
+ if (!("schema" in checkpoint) ||
154
+ checkpoint.schema !==
155
+ "agent-knock-knock/terminal-activity-watch-checkpoint") {
156
+ throw new Error("terminal activity Watch has no activity checkpoint");
157
+ }
158
+ return checkpoint;
159
+ }
160
+ export function approvalFingerprint(terminal) {
161
+ if (terminal.activity_state !== "awaiting_approval")
162
+ return undefined;
163
+ const approval = isRecord(terminal.approval_state)
164
+ ? terminal.approval_state
165
+ : undefined;
166
+ const fingerprint = stringValue(approval?.fingerprint);
167
+ return fingerprint && /^[a-f0-9]{64}$/u.test(fingerprint)
168
+ ? fingerprint
169
+ : undefined;
170
+ }
171
+ export function invalidatedObservation(watch, observedAt, reasonCode) {
172
+ return {
173
+ ...terminalWatchObservationFence(watch),
174
+ kind: "invalidated",
175
+ observed_at: observedAt,
176
+ evidence_fingerprint: sha256({
177
+ watch_id: watch.watch_id,
178
+ reason_code: reasonCode,
179
+ anchor_fingerprint: watch.anchor.anchor_fingerprint
180
+ }),
181
+ reason_code: reasonCode
182
+ };
183
+ }
184
+ //# sourceMappingURL=terminal-watch-observation-evidence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal-watch-observation-evidence.js","sourceRoot":"","sources":["../../src/terminal-watch-observation-evidence.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { type TerminalWatch } from "./terminal-watch-store.js";
2
+ import type { TerminalWatchCliOptions, TerminalWatchCliDependencies } from "./terminal-watch-cli-contract.js";
3
+ export declare function terminalWatchResponseDecision(watch: TerminalWatch, rawTerminal: Record<string, unknown>, surfaceId: string, promptFingerprint: string, options: TerminalWatchCliOptions, dependencies: TerminalWatchCliDependencies): {
4
+ executable: boolean;
5
+ suppress: boolean;
6
+ };
@@ -0,0 +1,333 @@
1
+ import { executorForConversation, turnIdForConversation } from "./protocol.js";
2
+ import { selectTerminalInteractionResponder } from "./terminal-interaction-authority.js";
3
+ import { validateAnyTerminalInteractionProjection } from "./terminal-interaction-protocol.js";
4
+ import { createTerminalWatchStore, isTerminalActivityWatch, isUserExplicitFallbackWatch } from "./terminal-watch-store.js";
5
+ import { isRecord, nonBlankString as stringValue } from "./value-guards.js";
6
+ import { terminalControlForWatch, terminalWatchCandidateMatchesLiveContext, sha256 } from "./terminal-watch-terminal-identity.js";
7
+ export function terminalWatchResponseDecision(watch, rawTerminal, surfaceId, promptFingerprint, options, dependencies) {
8
+ if (watch.status !== "active" ||
9
+ watch.interaction_policy !== "respond_when_exact" ||
10
+ isTerminalActivityWatch(watch) ||
11
+ !terminalWatchCandidateMatchesLiveContext(watch, rawTerminal) ||
12
+ (watch.callback_route !== undefined &&
13
+ watch.callback_route.capabilities?.respond !== true)) {
14
+ return { executable: false, suppress: false };
15
+ }
16
+ const terminalControl = terminalControlForWatch(rawTerminal);
17
+ let blockers;
18
+ try {
19
+ blockers = dependencies.terminalIncarnationBlockingTurns(dependencies.storeDirFromOptions(options), terminalControl);
20
+ }
21
+ catch {
22
+ return { executable: false, suppress: false };
23
+ }
24
+ let storedWatches;
25
+ try {
26
+ storedWatches = createTerminalWatchStore(dependencies.storeDirFromOptions(options), { acquire: dependencies.acquireFileLock }).list();
27
+ }
28
+ catch {
29
+ return { executable: false, suppress: false };
30
+ }
31
+ const currentIndex = storedWatches.findIndex((candidate) => candidate.watch_id === watch.watch_id);
32
+ if (currentIndex < 0) {
33
+ storedWatches.push(watch);
34
+ }
35
+ else {
36
+ storedWatches[currentIndex] = watch;
37
+ }
38
+ const candidates = storedWatches.flatMap((candidate) => {
39
+ const surfaceCandidate = terminalWatchSurfaceCandidate(candidate, watch, rawTerminal, surfaceId, promptFingerprint);
40
+ return surfaceCandidate ? [surfaceCandidate] : [];
41
+ });
42
+ const fences = [
43
+ ...blockers.flatMap((turn) => {
44
+ const fence = managedTerminalInteractionFence(turn, surfaceId, promptFingerprint, watch.agent);
45
+ return fence ? [fence] : [];
46
+ }),
47
+ ...candidates
48
+ .filter((candidate) => candidate.disposition === "fence")
49
+ .map((candidate) => ({
50
+ owner_session: candidate.watch.openclaw_session
51
+ }))
52
+ ];
53
+ if (fences.length > 0) {
54
+ return {
55
+ executable: false,
56
+ suppress: fences.some((fence) => fence.owner_session === watch.openclaw_session)
57
+ };
58
+ }
59
+ const claims = [
60
+ ...blockers.flatMap((turn) => {
61
+ const claim = managedTerminalInteractionResponderClaim(turn, surfaceId, promptFingerprint, watch.agent);
62
+ return claim ? [claim] : [];
63
+ }),
64
+ ...candidates
65
+ .filter((candidate) => candidate.disposition === "responder")
66
+ .map(({ watch: candidate }) => ({
67
+ owner_id: candidate.watch_id,
68
+ owner_session: candidate.openclaw_session,
69
+ surface_id: surfaceId,
70
+ responder_class: isUserExplicitFallbackWatch(candidate)
71
+ ? "exact_request_watch"
72
+ : "exact_task_watch",
73
+ response_authority: "executable",
74
+ created_at: candidate.created_at
75
+ }))
76
+ ];
77
+ const winner = selectTerminalInteractionResponder(claims);
78
+ const executable = winner?.owner_id === watch.watch_id;
79
+ return {
80
+ executable,
81
+ suppress: Boolean(winner &&
82
+ !executable &&
83
+ winner.owner_session === watch.openclaw_session)
84
+ };
85
+ }
86
+ function terminalWatchSurfaceCandidate(candidate, current, rawTerminal, surfaceId, promptFingerprint) {
87
+ if (candidate.status !== "active" ||
88
+ candidate.interaction_policy !== "respond_when_exact" ||
89
+ isTerminalActivityWatch(candidate) ||
90
+ candidate.terminal.terminal_id !== current.terminal.terminal_id ||
91
+ !terminalWatchCandidateMatchesLiveContext(candidate, rawTerminal) ||
92
+ (candidate.callback_route !== undefined &&
93
+ candidate.callback_route.capabilities?.respond !== true)) {
94
+ return undefined;
95
+ }
96
+ const persisted = candidate.current_interaction;
97
+ const samePersistedSurface = Boolean(persisted &&
98
+ persisted.projection.surface_id === surfaceId &&
99
+ persisted.projection.prompt_fingerprint === promptFingerprint);
100
+ if (candidate.watch_id !== current.watch_id) {
101
+ if (!samePersistedSurface ||
102
+ !terminalWatchesShareExactTask(candidate, current) ||
103
+ (persisted.aggregate.state === "pending" &&
104
+ (persisted.projection.response_authority !== "executable" ||
105
+ persisted.projection.capabilities.respond !== true ||
106
+ persisted.aggregate.response_authority !== "executable"))) {
107
+ return undefined;
108
+ }
109
+ }
110
+ return {
111
+ watch: candidate,
112
+ disposition: samePersistedSurface && persisted.aggregate.state !== "pending"
113
+ ? "fence"
114
+ : "responder"
115
+ };
116
+ }
117
+ function terminalWatchesShareExactTask(left, right) {
118
+ const leftKey = terminalWatchExactTaskKey(left);
119
+ const rightKey = terminalWatchExactTaskKey(right);
120
+ return leftKey !== undefined && leftKey === rightKey;
121
+ }
122
+ function terminalWatchExactTaskKey(watch) {
123
+ const anchor = watch.anchor;
124
+ if (anchor.schema === "agent-knock-knock/codex-paginated-task-anchor") {
125
+ const checkpoint = watch.observation_checkpoint;
126
+ const turnId = "schema" in checkpoint && checkpoint.schema === "agent-knock-knock/codex-paginated-task-checkpoint"
127
+ ? checkpoint.acceptance_evidence?.acceptanceId ?? anchor.turn_id : anchor.turn_id;
128
+ return turnId ? sha256({ source: "codex_paginated", thread: anchor.native_thread_id,
129
+ task: turnId, home: anchor.codex_home, process: anchor.process_uuid }) : undefined;
130
+ }
131
+ if (anchor.schema ===
132
+ "agent-knock-knock/codex-human-started-active-task-anchor") {
133
+ return codexWatchTaskKey({
134
+ taskId: anchor.turn_id,
135
+ nativeSessionId: anchor.native_thread_id,
136
+ processUuid: anchor.process_uuid,
137
+ processBirth: anchor.process_birth,
138
+ rollout: anchor.rollout,
139
+ requestHash: anchor.request_hash
140
+ });
141
+ }
142
+ if (anchor.schema ===
143
+ "agent-knock-knock/codex-user-explicit-fallback-watch-anchor") {
144
+ const checkpoint = watch.observation_checkpoint;
145
+ if (!("schema" in checkpoint) ||
146
+ checkpoint.schema !==
147
+ "agent-knock-knock/codex-user-explicit-fallback-watch-checkpoint" ||
148
+ !checkpoint.accepted_identity ||
149
+ !checkpoint.acceptance_evidence)
150
+ return undefined;
151
+ return codexWatchTaskKey({
152
+ taskId: checkpoint.acceptance_evidence.acceptanceId,
153
+ nativeSessionId: checkpoint.accepted_identity.native_thread_id,
154
+ processUuid: checkpoint.accepted_identity.process_uuid,
155
+ processBirth: checkpoint.accepted_identity.process_birth,
156
+ rollout: checkpoint.accepted_identity.rollout,
157
+ requestHash: anchor.request_hash
158
+ });
159
+ }
160
+ if (anchor.schema ===
161
+ "agent-knock-knock/claude-human-started-active-task-anchor") {
162
+ return claudeWatchTaskKey({
163
+ taskId: anchor.prompt_uuid,
164
+ nativeSessionId: anchor.session_id,
165
+ pid: anchor.pid,
166
+ agentStartedAtMs: anchor.agent_started_at_ms,
167
+ transcriptFileId: anchor.transcript_file_id,
168
+ cwd: anchor.cwd,
169
+ requestHash: anchor.request_hash
170
+ });
171
+ }
172
+ if (anchor.schema ===
173
+ "agent-knock-knock/claude-user-explicit-fallback-watch-anchor") {
174
+ const checkpoint = watch.observation_checkpoint;
175
+ if (!("schema" in checkpoint) ||
176
+ checkpoint.schema !==
177
+ "agent-knock-knock/claude-user-explicit-fallback-watch-checkpoint" ||
178
+ !checkpoint.accepted_prompt_uuid ||
179
+ !checkpoint.acceptance_evidence)
180
+ return undefined;
181
+ const transcriptFileId = stringValue(checkpoint.acceptance_evidence.metadata?.transcript_file_id);
182
+ if (!transcriptFileId)
183
+ return undefined;
184
+ return claudeWatchTaskKey({
185
+ taskId: checkpoint.accepted_prompt_uuid,
186
+ nativeSessionId: anchor.transcript_anchor.session_id,
187
+ pid: anchor.transcript_anchor.pid,
188
+ agentStartedAtMs: anchor.transcript_anchor.agent_started_at_ms,
189
+ transcriptFileId,
190
+ cwd: anchor.transcript_anchor.cwd,
191
+ requestHash: anchor.request_hash
192
+ });
193
+ }
194
+ return undefined;
195
+ }
196
+ function codexWatchTaskKey(input) {
197
+ const rollout = isRecord(input.rollout) ? input.rollout : undefined;
198
+ const device = stringValue(rollout?.device);
199
+ const inode = stringValue(rollout?.inode);
200
+ const rolloutPath = stringValue(rollout?.path);
201
+ if (!device || !inode || !rolloutPath)
202
+ return undefined;
203
+ return sha256({
204
+ agent: "codex",
205
+ task_id: input.taskId,
206
+ native_session_id: input.nativeSessionId.toLowerCase(),
207
+ process_uuid: input.processUuid,
208
+ process_birth: input.processBirth,
209
+ rollout: { device, inode, path: rolloutPath },
210
+ request_hash: input.requestHash
211
+ });
212
+ }
213
+ function claudeWatchTaskKey(input) {
214
+ if (!Number.isSafeInteger(input.pid) || input.pid <= 0 ||
215
+ !Number.isSafeInteger(input.agentStartedAtMs) ||
216
+ input.agentStartedAtMs <= 0)
217
+ return undefined;
218
+ return sha256({
219
+ agent: "claude",
220
+ task_id: input.taskId,
221
+ native_session_id: input.nativeSessionId,
222
+ pid: input.pid,
223
+ agent_started_at_ms: input.agentStartedAtMs,
224
+ transcript_file_id: input.transcriptFileId,
225
+ cwd: input.cwd,
226
+ request_hash: input.requestHash
227
+ });
228
+ }
229
+ function managedTerminalInteractionFence(turn, surfaceId, promptFingerprint, agent) {
230
+ const ownerSession = stringValue(turn.openclaw_session);
231
+ const takeover = isRecord(turn.native_session_takeover)
232
+ ? turn.native_session_takeover
233
+ : undefined;
234
+ if (ownerSession &&
235
+ executorForConversation(turn).kind === agent &&
236
+ stringValue(takeover?.terminal_bridge_last_interaction_surface_id) ===
237
+ surfaceId &&
238
+ stringValue(takeover?.terminal_bridge_last_interaction_fingerprint) ===
239
+ promptFingerprint &&
240
+ stringValue(takeover?.terminal_bridge_last_interaction_id) !== undefined &&
241
+ canonicalTimestamp(takeover?.terminal_bridge_last_interaction_at) !== undefined) {
242
+ return { owner_session: ownerSession };
243
+ }
244
+ const evidence = managedTerminalInteractionEvidence(turn, surfaceId, promptFingerprint, agent);
245
+ if (!evidence)
246
+ return undefined;
247
+ const dispatch = isRecord(evidence.takeover.terminal_bridge_interaction_dispatch)
248
+ ? evidence.takeover.terminal_bridge_interaction_dispatch
249
+ : undefined;
250
+ const dispatchState = stringValue(dispatch?.state);
251
+ const dispatchMatches = (dispatchState === "reserved" || dispatchState === "uncertain") &&
252
+ stringValue(dispatch?.interaction_id) ===
253
+ evidence.projection.interaction_id &&
254
+ stringValue(dispatch?.interaction_prompt_fingerprint) ===
255
+ promptFingerprint;
256
+ return evidence.projection.state === "response_uncertain" || dispatchMatches
257
+ ? { owner_session: evidence.ownerSession }
258
+ : undefined;
259
+ }
260
+ function canonicalTimestamp(value) {
261
+ const timestamp = stringValue(value);
262
+ return timestamp &&
263
+ Number.isFinite(Date.parse(timestamp)) &&
264
+ new Date(timestamp).toISOString() === timestamp
265
+ ? timestamp
266
+ : undefined;
267
+ }
268
+ function managedTerminalInteractionResponderClaim(turn, surfaceId, promptFingerprint, agent) {
269
+ const evidence = managedTerminalInteractionEvidence(turn, surfaceId, promptFingerprint, agent);
270
+ if (!evidence)
271
+ return undefined;
272
+ const createdAt = stringValue(evidence.notification.notified_at);
273
+ if (!createdAt ||
274
+ !Number.isFinite(Date.parse(createdAt)) ||
275
+ new Date(createdAt).toISOString() !== createdAt)
276
+ return undefined;
277
+ if (evidence.projection.state !== "pending" ||
278
+ evidence.projection.capabilities.respond !== true) {
279
+ return undefined;
280
+ }
281
+ return {
282
+ owner_id: evidence.ownerId,
283
+ owner_session: evidence.ownerSession,
284
+ surface_id: surfaceId,
285
+ responder_class: "managed_turn",
286
+ response_authority: "executable",
287
+ created_at: createdAt
288
+ };
289
+ }
290
+ function managedTerminalInteractionEvidence(turn, surfaceId, promptFingerprint, agent) {
291
+ const takeover = isRecord(turn.native_session_takeover)
292
+ ? turn.native_session_takeover
293
+ : undefined;
294
+ const notification = isRecord(takeover?.terminal_bridge_interaction_notification)
295
+ ? takeover.terminal_bridge_interaction_notification
296
+ : undefined;
297
+ if (!takeover ||
298
+ !notification ||
299
+ stringValue(notification.surface_id) !== surfaceId ||
300
+ stringValue(notification.prompt_fingerprint) !== promptFingerprint)
301
+ return undefined;
302
+ let ownerId;
303
+ try {
304
+ ownerId = turnIdForConversation(turn);
305
+ }
306
+ catch {
307
+ return undefined;
308
+ }
309
+ const ownerSession = stringValue(turn.openclaw_session);
310
+ if (!ownerSession)
311
+ return undefined;
312
+ const projection = (() => {
313
+ try {
314
+ return validateAnyTerminalInteractionProjection(notification.interaction_state);
315
+ }
316
+ catch {
317
+ return undefined;
318
+ }
319
+ })();
320
+ if (!projection ||
321
+ projection.interaction_id !== stringValue(notification.interaction_id) ||
322
+ projection.agent !== agent ||
323
+ projection.questions.length !== 1 ||
324
+ projection.questions[0]?.question_id !==
325
+ stringValue(notification.question_id) ||
326
+ (projection.version === 1
327
+ ? projection.turn_id !== ownerId
328
+ : projection.subject.kind !== "managed_turn" ||
329
+ projection.subject.turn_id !== ownerId))
330
+ return undefined;
331
+ return { ownerId, ownerSession, takeover, notification, projection };
332
+ }
333
+ //# sourceMappingURL=terminal-watch-response-authority.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal-watch-response-authority.js","sourceRoot":"","sources":["../../src/terminal-watch-response-authority.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { TerminalWatchService } from "./terminal-watch-service.js";
2
+ import type { TerminalWatchCliOptions, TerminalWatchCliDependencies } from "./terminal-watch-cli-contract.js";
3
+ export declare function createTerminalWatchInteractionResponder(dependencies: TerminalWatchCliDependencies, serviceFor: (options: TerminalWatchCliOptions) => TerminalWatchService): (options: TerminalWatchCliOptions) => Promise<void>;