@scotthuang/agent-knock-knock 0.12.11 → 0.12.12
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 +18 -0
- package/README.md +5 -5
- package/dist/src/callback-cli-adapter.d.ts +47 -0
- package/dist/src/callback-cli-adapter.js +156 -0
- package/dist/src/callback-cli-adapter.js.map +1 -0
- package/dist/src/callback-outbox-policy.d.ts +95 -0
- package/dist/src/callback-outbox-policy.js +149 -0
- package/dist/src/callback-outbox-policy.js.map +1 -0
- package/dist/src/callback-outbox-service.d.ts +247 -0
- package/dist/src/callback-outbox-service.js +1053 -0
- package/dist/src/callback-outbox-service.js.map +1 -0
- package/dist/src/callback-outbox-settlement.d.ts +54 -0
- package/dist/src/callback-outbox-settlement.js +241 -0
- package/dist/src/callback-outbox-settlement.js.map +1 -0
- package/dist/src/canonical-json.d.ts +1 -0
- package/dist/src/canonical-json.js +14 -0
- package/dist/src/canonical-json.js.map +1 -0
- package/dist/src/claude-lifecycle-compatibility.js +15 -0
- package/dist/src/claude-lifecycle-compatibility.js.map +1 -1
- package/dist/src/claude-local-transcript-provider.d.ts +1 -1
- package/dist/src/claude-local-transcript-provider.js +19 -5
- package/dist/src/claude-local-transcript-provider.js.map +1 -1
- package/dist/src/cli-command-runtime.d.ts +14 -0
- package/dist/src/cli-command-runtime.js +164 -0
- package/dist/src/cli-command-runtime.js.map +1 -0
- package/dist/src/cli-core.d.ts +4 -42
- package/dist/src/cli-core.js +906 -28717
- package/dist/src/cli-core.js.map +1 -1
- package/dist/src/cli-runtime-context.d.ts +57 -0
- package/dist/src/cli-runtime-context.js +118 -0
- package/dist/src/cli-runtime-context.js.map +1 -0
- package/dist/src/codex-lifecycle-compatibility.js +2 -1
- package/dist/src/codex-lifecycle-compatibility.js.map +1 -1
- package/dist/src/codex-local-session-provider.d.ts +18 -0
- package/dist/src/codex-local-session-provider.js +67 -0
- package/dist/src/codex-local-session-provider.js.map +1 -1
- package/dist/src/codex-session-provider.js +1 -3
- package/dist/src/codex-session-provider.js.map +1 -1
- package/dist/src/conversation-trace.d.ts +30 -0
- package/dist/src/conversation-trace.js +185 -0
- package/dist/src/conversation-trace.js.map +1 -0
- package/dist/src/deferred-foreground-application-service.d.ts +84 -0
- package/dist/src/deferred-foreground-application-service.js +742 -0
- package/dist/src/deferred-foreground-application-service.js.map +1 -0
- package/dist/src/deferred-foreground-authority-cli-adapter.d.ts +78 -0
- package/dist/src/deferred-foreground-authority-cli-adapter.js +724 -0
- package/dist/src/deferred-foreground-authority-cli-adapter.js.map +1 -0
- package/dist/src/deferred-foreground-boundary.d.ts +61 -0
- package/dist/src/deferred-foreground-boundary.js +2 -0
- package/dist/src/deferred-foreground-boundary.js.map +1 -0
- package/dist/src/deferred-foreground-capability.d.ts +4 -0
- package/dist/src/deferred-foreground-capability.js +184 -0
- package/dist/src/deferred-foreground-capability.js.map +1 -0
- package/dist/src/deferred-foreground-preparation-cli-adapter.d.ts +53 -0
- package/dist/src/deferred-foreground-preparation-cli-adapter.js +210 -0
- package/dist/src/deferred-foreground-preparation-cli-adapter.js.map +1 -0
- package/dist/src/deferred-foreground-preparation-service.d.ts +72 -0
- package/dist/src/deferred-foreground-preparation-service.js +179 -0
- package/dist/src/deferred-foreground-preparation-service.js.map +1 -0
- package/dist/src/deferred-foreground-recovery-cli-adapter.d.ts +139 -0
- package/dist/src/deferred-foreground-recovery-cli-adapter.js +1125 -0
- package/dist/src/deferred-foreground-recovery-cli-adapter.js.map +1 -0
- package/dist/src/deferred-foreground-recovery-service.d.ts +48 -0
- package/dist/src/deferred-foreground-recovery-service.js +91 -0
- package/dist/src/deferred-foreground-recovery-service.js.map +1 -0
- package/dist/src/deferred-foreground-transfer-policy.d.ts +2 -0
- package/dist/src/deferred-foreground-transfer-policy.js +10 -0
- package/dist/src/deferred-foreground-transfer-policy.js.map +1 -0
- package/dist/src/deferred-foreground-transfer.js +43 -101
- package/dist/src/deferred-foreground-transfer.js.map +1 -1
- package/dist/src/doctor-capabilities.d.ts +9 -0
- package/dist/src/doctor-capabilities.js +22 -0
- package/dist/src/doctor-capabilities.js.map +1 -1
- package/dist/src/durable-json-file.d.ts +22 -0
- package/dist/src/durable-json-file.js +127 -0
- package/dist/src/durable-json-file.js.map +1 -0
- package/dist/src/file-lock-cli-adapter.d.ts +43 -0
- package/dist/src/file-lock-cli-adapter.js +150 -0
- package/dist/src/file-lock-cli-adapter.js.map +1 -0
- package/dist/src/herdr-terminal-control-provider.js +1 -3
- package/dist/src/herdr-terminal-control-provider.js.map +1 -1
- package/dist/src/install-doctor-command-adapter.d.ts +17 -0
- package/dist/src/install-doctor-command-adapter.js +225 -0
- package/dist/src/install-doctor-command-adapter.js.map +1 -0
- package/dist/src/live-lifecycle-evidence.js +76 -46
- package/dist/src/live-lifecycle-evidence.js.map +1 -1
- package/dist/src/live-lifecycle-smoke.js +74 -50
- package/dist/src/live-lifecycle-smoke.js.map +1 -1
- package/dist/src/managed-session.d.ts +2 -0
- package/dist/src/managed-session.js +24 -0
- package/dist/src/managed-session.js.map +1 -1
- package/dist/src/managed-turn-recovery-service.d.ts +86 -0
- package/dist/src/managed-turn-recovery-service.js +145 -0
- package/dist/src/managed-turn-recovery-service.js.map +1 -0
- package/dist/src/mutation-transaction.d.ts +48 -0
- package/dist/src/mutation-transaction.js +73 -0
- package/dist/src/mutation-transaction.js.map +1 -0
- package/dist/src/native-thread-lifecycle-cli-adapter.d.ts +154 -0
- package/dist/src/native-thread-lifecycle-cli-adapter.js +786 -0
- package/dist/src/native-thread-lifecycle-cli-adapter.js.map +1 -0
- package/dist/src/native-thread-lifecycle-ledger-cli-adapter.d.ts +25 -0
- package/dist/src/native-thread-lifecycle-ledger-cli-adapter.js +50 -0
- package/dist/src/native-thread-lifecycle-ledger-cli-adapter.js.map +1 -0
- package/dist/src/native-thread-lifecycle-query-service.d.ts +75 -0
- package/dist/src/native-thread-lifecycle-query-service.js +297 -0
- package/dist/src/native-thread-lifecycle-query-service.js.map +1 -0
- package/dist/src/native-thread-lifecycle-recovery-adapter.d.ts +45 -0
- package/dist/src/native-thread-lifecycle-recovery-adapter.js +154 -0
- package/dist/src/native-thread-lifecycle-recovery-adapter.js.map +1 -0
- package/dist/src/native-thread-lifecycle-recovery-service.d.ts +211 -0
- package/dist/src/native-thread-lifecycle-recovery-service.js +1093 -0
- package/dist/src/native-thread-lifecycle-recovery-service.js.map +1 -0
- package/dist/src/native-thread-resume-snapshot-policy.d.ts +73 -0
- package/dist/src/native-thread-resume-snapshot-policy.js +218 -0
- package/dist/src/native-thread-resume-snapshot-policy.js.map +1 -0
- package/dist/src/native-thread-resume-snapshot.d.ts +3 -61
- package/dist/src/native-thread-resume-snapshot.js +2 -143
- package/dist/src/native-thread-resume-snapshot.js.map +1 -1
- package/dist/src/native-thread-transition-application.d.ts +147 -0
- package/dist/src/native-thread-transition-application.js +974 -0
- package/dist/src/native-thread-transition-application.js.map +1 -0
- package/dist/src/native-thread-transition-policy.d.ts +127 -0
- package/dist/src/native-thread-transition-policy.js +154 -0
- package/dist/src/native-thread-transition-policy.js.map +1 -0
- package/dist/src/native-thread-transition-resource-adapter.d.ts +12 -0
- package/dist/src/native-thread-transition-resource-adapter.js +44 -0
- package/dist/src/native-thread-transition-resource-adapter.js.map +1 -0
- package/dist/src/native-thread-transition-settlement-service.d.ts +94 -0
- package/dist/src/native-thread-transition-settlement-service.js +134 -0
- package/dist/src/native-thread-transition-settlement-service.js.map +1 -0
- package/dist/src/native-thread-transition-verification-adapter.d.ts +62 -0
- package/dist/src/native-thread-transition-verification-adapter.js +451 -0
- package/dist/src/native-thread-transition-verification-adapter.js.map +1 -0
- package/dist/src/openclaw-callback-transport.d.ts +64 -0
- package/dist/src/openclaw-callback-transport.js +583 -0
- package/dist/src/openclaw-callback-transport.js.map +1 -0
- package/dist/src/openclaw-plugin-callback-adapter.d.ts +1 -0
- package/dist/src/openclaw-plugin-callback-adapter.js +341 -0
- package/dist/src/openclaw-plugin-callback-adapter.js.map +1 -0
- package/dist/src/openclaw-plugin-command-adapter.d.ts +16 -0
- package/dist/src/openclaw-plugin-command-adapter.js +1427 -0
- package/dist/src/openclaw-plugin-command-adapter.js.map +1 -0
- package/dist/src/openclaw-plugin-helpers.js +48 -38
- package/dist/src/openclaw-plugin-helpers.js.map +1 -1
- package/dist/src/openclaw-plugin-schemas.d.ts +382 -0
- package/dist/src/openclaw-plugin-schemas.js +394 -0
- package/dist/src/openclaw-plugin-schemas.js.map +1 -0
- package/dist/src/openclaw-plugin-supervisor.d.ts +6 -0
- package/dist/src/openclaw-plugin-supervisor.js +85 -0
- package/dist/src/openclaw-plugin-supervisor.js.map +1 -0
- package/dist/src/openclaw-plugin.js +7 -2212
- package/dist/src/openclaw-plugin.js.map +1 -1
- package/dist/src/protocol.d.ts +5 -0
- package/dist/src/protocol.js +59 -3
- package/dist/src/protocol.js.map +1 -1
- package/dist/src/session-store.d.ts +1 -0
- package/dist/src/session-store.js +84 -106
- package/dist/src/session-store.js.map +1 -1
- package/dist/src/store.js +2 -1
- package/dist/src/store.js.map +1 -1
- package/dist/src/terminal-acceptance-application-service.d.ts +65 -0
- package/dist/src/terminal-acceptance-application-service.js +63 -0
- package/dist/src/terminal-acceptance-application-service.js.map +1 -0
- package/dist/src/terminal-acceptance-cli-adapter.d.ts +210 -0
- package/dist/src/terminal-acceptance-cli-adapter.js +957 -0
- package/dist/src/terminal-acceptance-cli-adapter.js.map +1 -0
- package/dist/src/terminal-action-projection.d.ts +291 -0
- package/dist/src/terminal-action-projection.js +353 -0
- package/dist/src/terminal-action-projection.js.map +1 -0
- package/dist/src/terminal-agent-bridge.d.ts +3 -0
- package/dist/src/terminal-agent-bridge.js +29 -8
- package/dist/src/terminal-agent-bridge.js.map +1 -1
- package/dist/src/terminal-authority-policy.d.ts +141 -0
- package/dist/src/terminal-authority-policy.js +367 -0
- package/dist/src/terminal-authority-policy.js.map +1 -0
- package/dist/src/terminal-binding-authority.d.ts +118 -0
- package/dist/src/terminal-binding-authority.js +245 -0
- package/dist/src/terminal-binding-authority.js.map +1 -0
- package/dist/src/terminal-binding-reconciliation-service.d.ts +75 -0
- package/dist/src/terminal-binding-reconciliation-service.js +73 -0
- package/dist/src/terminal-binding-reconciliation-service.js.map +1 -0
- package/dist/src/terminal-command-cli-adapter.d.ts +375 -0
- package/dist/src/terminal-command-cli-adapter.js +3128 -0
- package/dist/src/terminal-command-cli-adapter.js.map +1 -0
- package/dist/src/terminal-control-ref.d.ts +4 -0
- package/dist/src/terminal-control-ref.js +11 -8
- package/dist/src/terminal-control-ref.js.map +1 -1
- package/dist/src/terminal-delegate-cli-adapter.d.ts +41 -0
- package/dist/src/terminal-delegate-cli-adapter.js +242 -0
- package/dist/src/terminal-delegate-cli-adapter.js.map +1 -0
- package/dist/src/terminal-dispatch-abort.d.ts +22 -0
- package/dist/src/terminal-dispatch-abort.js +30 -0
- package/dist/src/terminal-dispatch-abort.js.map +1 -0
- package/dist/src/terminal-dispatch-application.d.ts +115 -0
- package/dist/src/terminal-dispatch-application.js +478 -0
- package/dist/src/terminal-dispatch-application.js.map +1 -0
- package/dist/src/terminal-dispatch-capability.d.ts +63 -0
- package/dist/src/terminal-dispatch-capability.js +133 -0
- package/dist/src/terminal-dispatch-capability.js.map +1 -0
- package/dist/src/terminal-dispatch-completion-cli-adapter.d.ts +22 -0
- package/dist/src/terminal-dispatch-completion-cli-adapter.js +96 -0
- package/dist/src/terminal-dispatch-completion-cli-adapter.js.map +1 -0
- package/dist/src/terminal-dispatch-composition.d.ts +79 -0
- package/dist/src/terminal-dispatch-composition.js +2 -0
- package/dist/src/terminal-dispatch-composition.js.map +1 -0
- package/dist/src/terminal-dispatch-execution.d.ts +290 -0
- package/dist/src/terminal-dispatch-execution.js +916 -0
- package/dist/src/terminal-dispatch-execution.js.map +1 -0
- package/dist/src/terminal-dispatch-ledger-codec.d.ts +110 -0
- package/dist/src/terminal-dispatch-ledger-codec.js +399 -0
- package/dist/src/terminal-dispatch-ledger-codec.js.map +1 -0
- package/dist/src/terminal-dispatch-policy.d.ts +93 -0
- package/dist/src/terminal-dispatch-policy.js +122 -0
- package/dist/src/terminal-dispatch-policy.js.map +1 -0
- package/dist/src/terminal-dispatch-presenter.d.ts +65 -0
- package/dist/src/terminal-dispatch-presenter.js +258 -0
- package/dist/src/terminal-dispatch-presenter.js.map +1 -0
- package/dist/src/terminal-dispatch-receipt.d.ts +79 -0
- package/dist/src/terminal-dispatch-receipt.js +314 -0
- package/dist/src/terminal-dispatch-receipt.js.map +1 -0
- package/dist/src/terminal-dispatch-recovery-cli-adapter.d.ts +132 -0
- package/dist/src/terminal-dispatch-recovery-cli-adapter.js +1330 -0
- package/dist/src/terminal-dispatch-recovery-cli-adapter.js.map +1 -0
- package/dist/src/terminal-dispatch-recovery-service.d.ts +271 -0
- package/dist/src/terminal-dispatch-recovery-service.js +374 -0
- package/dist/src/terminal-dispatch-recovery-service.js.map +1 -0
- package/dist/src/terminal-dispatch-repository-cli-adapter.d.ts +35 -0
- package/dist/src/terminal-dispatch-repository-cli-adapter.js +257 -0
- package/dist/src/terminal-dispatch-repository-cli-adapter.js.map +1 -0
- package/dist/src/terminal-handoff-application-service.d.ts +7 -0
- package/dist/src/terminal-handoff-application-service.js +18 -0
- package/dist/src/terminal-handoff-application-service.js.map +1 -0
- package/dist/src/terminal-handoff-cli-adapter.d.ts +229 -0
- package/dist/src/terminal-handoff-cli-adapter.js +1389 -0
- package/dist/src/terminal-handoff-cli-adapter.js.map +1 -0
- package/dist/src/terminal-handoff-facts.d.ts +12 -0
- package/dist/src/terminal-handoff-facts.js +16 -0
- package/dist/src/terminal-handoff-facts.js.map +1 -0
- package/dist/src/terminal-identity-authority-cli-adapter.d.ts +318 -0
- package/dist/src/terminal-identity-authority-cli-adapter.js +1072 -0
- package/dist/src/terminal-identity-authority-cli-adapter.js.map +1 -0
- package/dist/src/terminal-identity-authority-service.d.ts +48 -0
- package/dist/src/terminal-identity-authority-service.js +45 -0
- package/dist/src/terminal-identity-authority-service.js.map +1 -0
- package/dist/src/terminal-list-cli-adapter.d.ts +250 -0
- package/dist/src/terminal-list-cli-adapter.js +2226 -0
- package/dist/src/terminal-list-cli-adapter.js.map +1 -0
- package/dist/src/terminal-list-renderer.d.ts +32 -0
- package/dist/src/terminal-list-renderer.js +568 -0
- package/dist/src/terminal-list-renderer.js.map +1 -0
- package/dist/src/terminal-maintenance-cli-adapter.d.ts +102 -0
- package/dist/src/terminal-maintenance-cli-adapter.js +1059 -0
- package/dist/src/terminal-maintenance-cli-adapter.js.map +1 -0
- package/dist/src/terminal-monitor-application-service.d.ts +275 -0
- package/dist/src/terminal-monitor-application-service.js +982 -0
- package/dist/src/terminal-monitor-application-service.js.map +1 -0
- package/dist/src/terminal-monitor-cli-adapter.d.ts +130 -0
- package/dist/src/terminal-monitor-cli-adapter.js +442 -0
- package/dist/src/terminal-monitor-cli-adapter.js.map +1 -0
- package/dist/src/terminal-monitor-decision-policy.d.ts +98 -0
- package/dist/src/terminal-monitor-decision-policy.js +246 -0
- package/dist/src/terminal-monitor-decision-policy.js.map +1 -0
- package/dist/src/terminal-monitor-launch-plan.d.ts +45 -0
- package/dist/src/terminal-monitor-launch-plan.js +94 -0
- package/dist/src/terminal-monitor-launch-plan.js.map +1 -0
- package/dist/src/terminal-monitor-ownership-policy.d.ts +31 -0
- package/dist/src/terminal-monitor-ownership-policy.js +64 -0
- package/dist/src/terminal-monitor-ownership-policy.js.map +1 -0
- package/dist/src/terminal-monitor-poll-policy.d.ts +48 -0
- package/dist/src/terminal-monitor-poll-policy.js +67 -0
- package/dist/src/terminal-monitor-poll-policy.js.map +1 -0
- package/dist/src/terminal-monitor-reconciliation-eligibility.d.ts +53 -0
- package/dist/src/terminal-monitor-reconciliation-eligibility.js +114 -0
- package/dist/src/terminal-monitor-reconciliation-eligibility.js.map +1 -0
- package/dist/src/terminal-monitor-state-cli-adapter.d.ts +106 -0
- package/dist/src/terminal-monitor-state-cli-adapter.js +1501 -0
- package/dist/src/terminal-monitor-state-cli-adapter.js.map +1 -0
- package/dist/src/terminal-monitor-state-reconciliation-service.d.ts +87 -0
- package/dist/src/terminal-monitor-state-reconciliation-service.js +106 -0
- package/dist/src/terminal-monitor-state-reconciliation-service.js.map +1 -0
- package/dist/src/terminal-monitor-supervision-cli-adapter.d.ts +122 -0
- package/dist/src/terminal-monitor-supervision-cli-adapter.js +685 -0
- package/dist/src/terminal-monitor-supervision-cli-adapter.js.map +1 -0
- package/dist/src/terminal-process-facts.d.ts +2 -0
- package/dist/src/terminal-process-facts.js +19 -0
- package/dist/src/terminal-process-facts.js.map +1 -0
- package/dist/src/terminal-process-source.d.ts +6 -4
- package/dist/src/terminal-process-source.js +25 -20
- package/dist/src/terminal-process-source.js.map +1 -1
- package/dist/src/terminal-runtime-cli-adapter.d.ts +80 -0
- package/dist/src/terminal-runtime-cli-adapter.js +488 -0
- package/dist/src/terminal-runtime-cli-adapter.js.map +1 -0
- package/dist/src/terminal-scoped-approval-authority.d.ts +62 -0
- package/dist/src/terminal-scoped-approval-authority.js +281 -0
- package/dist/src/terminal-scoped-approval-authority.js.map +1 -0
- package/dist/src/terminal-selector-projection-service.d.ts +26 -0
- package/dist/src/terminal-selector-projection-service.js +81 -0
- package/dist/src/terminal-selector-projection-service.js.map +1 -0
- package/dist/src/terminal-status-cli-adapter.d.ts +116 -0
- package/dist/src/terminal-status-cli-adapter.js +495 -0
- package/dist/src/terminal-status-cli-adapter.js.map +1 -0
- package/dist/src/terminal-status-facts.d.ts +56 -0
- package/dist/src/terminal-status-facts.js +199 -0
- package/dist/src/terminal-status-facts.js.map +1 -0
- package/dist/src/terminal-submission-acceptance.d.ts +6 -148
- package/dist/src/terminal-submission-acceptance.js +2 -229
- package/dist/src/terminal-submission-acceptance.js.map +1 -1
- package/dist/src/terminal-submission-facts.d.ts +123 -0
- package/dist/src/terminal-submission-facts.js +205 -0
- package/dist/src/terminal-submission-facts.js.map +1 -0
- package/dist/src/terminal-turn-binding-authority-cli-adapter.d.ts +14 -0
- package/dist/src/terminal-turn-binding-authority-cli-adapter.js +90 -0
- package/dist/src/terminal-turn-binding-authority-cli-adapter.js.map +1 -0
- package/dist/src/value-guards.d.ts +4 -0
- package/dist/src/value-guards.js +12 -0
- package/dist/src/value-guards.js.map +1 -0
- package/dist/src/verified-dead-agent-policy.d.ts +192 -0
- package/dist/src/verified-dead-agent-policy.js +262 -0
- package/dist/src/verified-dead-agent-policy.js.map +1 -0
- package/docs/quickstart-tmux.md +1 -1
- package/package.json +3 -1
- package/templates/openclaw-skills/agent-knock-knock/SKILL.md +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,23 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.12.12 - 2026-08-21
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
|
|
7
|
+
- Add exact native lifecycle and status compatibility for Codex `0.148.0` and Claude Code `2.1.237`, while retaining the previously verified profiles.
|
|
8
|
+
- Report exact native-profile support in CLI and OpenClaw doctor output without blocking ordinary terminal work for an otherwise available but unprofiled coding-agent executable.
|
|
9
|
+
|
|
10
|
+
### Changed
|
|
11
|
+
|
|
12
|
+
- Decompose the orchestration runtime into typed, ownership-checked domain facades and services while preserving action contract 16, Store writer protocol 5, public CLI/OpenClaw contracts, lock ordering, and durable-write ordering.
|
|
13
|
+
- Strengthen architecture enforcement with bounded production functions, canonical status authorities, targeted affected-test selection, and reproducible refactor evidence.
|
|
14
|
+
- Clarify the TUI-first handoff model and make fast tests the normal development/local-install gate while reserving the full release suite for actual npm and ClawHub publication.
|
|
15
|
+
|
|
16
|
+
### Security
|
|
17
|
+
|
|
18
|
+
- Keep adjacent unknown Codex and Claude Code versions fail-closed for native inspection and lifecycle operations, and enforce one-way Claude transcript resume compatibility across verified profiles.
|
|
19
|
+
- Preserve exact terminal identity, binding, approval, acceptance, callback, retry, and uncertainty fences across the internal architecture refactor.
|
|
20
|
+
|
|
3
21
|
## 0.12.11 - 2026-08-14
|
|
4
22
|
|
|
5
23
|
### Fixed
|
package/README.md
CHANGED
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
[](https://nodejs.org/)
|
|
5
5
|
[](https://github.com/scotthuang/agent-knock-knock/blob/main/LICENSE)
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
Most agent orchestrators bring Codex or Claude Code into their own interface. AKK does the reverse: it brings OpenClaw into the live tmux or Herdr terminal where you already work. Human and agent share the same native session, so either can take over at any time without leaving the other on a forked context.
|
|
8
8
|
|
|
9
|
-
**
|
|
9
|
+
**Stay in the terminal. Stay in control. No hooks. No agent-side plugins. No YOLO.**
|
|
10
10
|
|
|
11
11
|
## Quick Start with ClawHub
|
|
12
12
|
|
|
@@ -95,9 +95,9 @@ Human-friendly selectors such as `only`, `codex`, `claude`, a terminal ID, or `@
|
|
|
95
95
|
|
|
96
96
|
An exact human switch while the old Session still has one active Turn is a decision point, not an automatic redirect. In that case the terminal row may expose `handoff_decision` instead of a follow-current send. Its nested `choices.take_over_current.action` is the only authoritative supersede action: after explicit user confirmation, invoke its complete `agent_knock_knock_close` arguments unchanged (`turn_id`, `reason="superseded_by_human_context_switch"`, and `expected_handoff_token`). The snapshot-bound close records the old Turn's disposition and sends no terminal input. Then list again and use only the newly advertised follow-current send; never chain the old token into a send. Choosing `keep_source` changes no AKK state: restore the old native thread in the Codex or Claude TUI, then refresh the list. A completed/changed Turn or another human thread switch makes the decision token stale and requires a fresh decision.
|
|
97
97
|
|
|
98
|
-
Native clear/new/resume operations requested through AKK are explicit lifecycle actions, separate from ordinary Turn creation. A successful new/clear creates a new native thread and AKK Session; resume activates the exact historical native thread and its corresponding Session. Each successful lifecycle transition creates no Turn. A human may also run native `/clear`, `/new`, `/resume`, or the equivalent directly in the shared terminal. AKK does not forbid that takeover: the next exact, fresh terminal-scoped follow-current send can absorb the human-driven transition when it is safe, while a `session_id` send deliberately remains pinned to its old context. AKK serializes either transition, verifies the resulting native identity, and advances the terminal binding generation so work and callbacks from the previous context cannot cross the boundary. Exact AKK-driven lifecycle profiles are verified for Codex 0.146.0/0.146.1/0.147.0 and Claude Code 2.1.218/2.1.226.
|
|
98
|
+
Native clear/new/resume operations requested through AKK are explicit lifecycle actions, separate from ordinary Turn creation. A successful new/clear creates a new native thread and AKK Session; resume activates the exact historical native thread and its corresponding Session. Each successful lifecycle transition creates no Turn. A human may also run native `/clear`, `/new`, `/resume`, or the equivalent directly in the shared terminal. AKK does not forbid that takeover: the next exact, fresh terminal-scoped follow-current send can absorb the human-driven transition when it is safe, while a `session_id` send deliberately remains pinned to its old context. AKK serializes either transition, verifies the resulting native identity, and advances the terminal binding generation so work and callbacks from the previous context cannot cross the boundary. Exact AKK-driven lifecycle profiles are verified for Codex 0.146.0/0.146.1/0.147.0/0.148.0 and Claude Code 2.1.218/2.1.226/2.1.237.
|
|
99
99
|
|
|
100
|
-
AKK status and native status inspection are different operations. `agent_knock_knock_status` (and `/akk status`) reads AKK Turn state plus a bounded current terminal screen; it does not execute the coding agent's `/status`. When an idle terminal row advertises `native_inspect`, `agent_knock_knock_native_inspect` can execute only its prefilled, version-scoped inspection with the exact `terminal_id`, `inspection="status"`, and fresh `expected_binding_token`. Supported profiles are Codex 0.146.0/0.146.1/0.147.0 and Claude Code 2.1.218/2.1.226. Claude's adapter parses a newly opened Status panel, dismisses that exact panel once, and proves the same pane returned to an idle empty composer. The action creates no Session, Turn, receipt, monitor, or callback. `/usage`, `/cost`, `/stats`, `/usage-credits`, `/model`, `/compact`, arbitrary slash strings, and unsupported versions remain unavailable. In particular, bare Codex `/usage` opens an interactive menu whose later Enter can select an account-side usage-limit reset; do not automate it as a read-only inspection.
|
|
100
|
+
AKK status and native status inspection are different operations. `agent_knock_knock_status` (and `/akk status`) reads AKK Turn state plus a bounded current terminal screen; it does not execute the coding agent's `/status`. When an idle terminal row advertises `native_inspect`, `agent_knock_knock_native_inspect` can execute only its prefilled, version-scoped inspection with the exact `terminal_id`, `inspection="status"`, and fresh `expected_binding_token`. Supported profiles are Codex 0.146.0/0.146.1/0.147.0/0.148.0 and Claude Code 2.1.218/2.1.226/2.1.237. Claude's adapter parses a newly opened Status panel, dismisses that exact panel once, and proves the same pane returned to an idle empty composer. The action creates no Session, Turn, receipt, monitor, or callback. `/usage`, `/cost`, `/stats`, `/usage-credits`, `/model`, `/compact`, arbitrary slash strings, and unsupported versions remain unavailable. In particular, bare Codex `/usage` opens an interactive menu whose later Enter can select an account-side usage-limit reset; do not automate it as a read-only inspection.
|
|
101
101
|
|
|
102
102
|
## Optional: Natural-Language Delegation
|
|
103
103
|
|
|
@@ -185,7 +185,7 @@ tmux new-session -s akk-work -c "$(pwd -P)" codex
|
|
|
185
185
|
|
|
186
186
|
Use `claude` instead of `codex` for Claude Code. Detach with `Ctrl-b`, then `d`. AKK discovers the pane automatically.
|
|
187
187
|
|
|
188
|
-
Claude tmux support requires no hooks and does not modify Claude Code settings. Hook-free completion monitoring is verified on Claude Code `2.1.198`, `2.1.218`, and `2.1.
|
|
188
|
+
Claude tmux support requires no hooks and does not modify Claude Code settings. Hook-free completion monitoring is verified on Claude Code `2.1.198`, `2.1.218`, `2.1.226`, and `2.1.237`; newer versions remain eligible when their interactive transcripts preserve the required identity and completion structure. Hookless auto-approval is deliberately narrower: approval evidence currently requires Claude Code `2.1.x` at `2.1.198` or later, and other versions fall back to manual handling.
|
|
189
189
|
|
|
190
190
|
For Herdr, AKK talks directly to each local session's Unix socket. It binds the stable Herdr `terminal_id`, refreshes the current `pane_id` before every operation, verifies the shell/agent process ancestry and cwd, reads the detector screen, and uses the bracketed-paste-aware `pane.send_input` API. Text injection and Enter remain separate operations so AKK can persist and revalidate the dispatch boundary between them.
|
|
191
191
|
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { createCallbackOutboxService, type ApprovalNotificationPreparationInput, type CallbackDeliveryReconciliationInput, type CallbackExecutionResult, type CallbackOutboxServicePorts, type CallbackPreparationOptions, type CallbackRetryMonitorInput, type PreparedCallback, type TerminalCompletionPreparationInput } from "./callback-outbox-service.js";
|
|
2
|
+
import type { CallbackRetryDisposition } from "./callback-outbox-policy.js";
|
|
3
|
+
import { type CallbackProcessDelivery, type DeliverChatSendInput, type DeliverGatewayMethodInput } from "./openclaw-callback-transport.js";
|
|
4
|
+
import { type Conversation } from "./protocol.js";
|
|
5
|
+
import type { TranscriptEvent } from "./transcript.js";
|
|
6
|
+
export type CallbackCliOptions = Omit<CallbackPreparationOptions, "statePath"> & {
|
|
7
|
+
callbackRetryDelayMs?: unknown;
|
|
8
|
+
state?: string;
|
|
9
|
+
statePath?: string;
|
|
10
|
+
[option: string]: unknown;
|
|
11
|
+
};
|
|
12
|
+
export interface CallbackCliDependencies {
|
|
13
|
+
state: {
|
|
14
|
+
acquireFileLock(lockPath: string): () => void;
|
|
15
|
+
loadConversation(options: CallbackCliOptions): {
|
|
16
|
+
conversation: Conversation;
|
|
17
|
+
statePath: string;
|
|
18
|
+
logPath: string;
|
|
19
|
+
};
|
|
20
|
+
readEvents(logPath: string): TranscriptEvent[];
|
|
21
|
+
withWriter<Result>(storeDir: string, operation: () => Result): Result;
|
|
22
|
+
};
|
|
23
|
+
authority: CallbackOutboxServicePorts["authority"];
|
|
24
|
+
retry: CallbackOutboxServicePorts["retry"];
|
|
25
|
+
runtime: {
|
|
26
|
+
classifyProcessFailure(delivery: CallbackProcessDelivery): string | undefined;
|
|
27
|
+
textSummary(value: unknown): unknown;
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
type CallbackOutboxService = ReturnType<typeof createCallbackOutboxService>;
|
|
31
|
+
export interface CallbackCliFacade {
|
|
32
|
+
runCallback(options: CallbackCliOptions): void;
|
|
33
|
+
runRetryCallback(options: CallbackCliOptions): void;
|
|
34
|
+
retryDisposition(delivery: unknown): CallbackRetryDisposition;
|
|
35
|
+
reconcileDelivery(input: CallbackDeliveryReconciliationInput): ReturnType<CallbackOutboxService["reconcileDelivery"]>;
|
|
36
|
+
runRetryMonitor(input: CallbackRetryMonitorInput): void;
|
|
37
|
+
prepareApprovalNotification(input: ApprovalNotificationPreparationInput): ReturnType<CallbackOutboxService["prepareApprovalNotification"]>;
|
|
38
|
+
prepareTerminalCompletion(input: TerminalCompletionPreparationInput): ReturnType<CallbackOutboxService["prepareTerminalCompletion"]>;
|
|
39
|
+
runPrepared(prepared: PreparedCallback, options?: {
|
|
40
|
+
emit?: boolean;
|
|
41
|
+
}): CallbackExecutionResult;
|
|
42
|
+
emitPreparedResult(result: CallbackExecutionResult): void;
|
|
43
|
+
deliverGatewayMethod(input: DeliverGatewayMethodInput): CallbackProcessDelivery;
|
|
44
|
+
deliverChatSend(input: DeliverChatSendInput): CallbackProcessDelivery;
|
|
45
|
+
}
|
|
46
|
+
export declare function createCallbackCliFacade(dependencies: CallbackCliDependencies): CallbackCliFacade;
|
|
47
|
+
export {};
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
// Raw CLI composition for callback commands, outbox recovery, and transport.
|
|
2
|
+
import { AsyncLocalStorage } from "node:async_hooks";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { createCallbackOutboxService } from "./callback-outbox-service.js";
|
|
5
|
+
import { createOpenClawCallbackTransport } from "./openclaw-callback-transport.js";
|
|
6
|
+
import { budgetAction } from "./protocol.js";
|
|
7
|
+
import { redactString } from "./runtime-log.js";
|
|
8
|
+
import { appendEvent, assertStoreWriterCompatible, loadState, logPathForStatePath, messageEvent, pathsForConversationDir, saveState } from "./store.js";
|
|
9
|
+
import { expandHome, redactCliOutput, writeCliJson } from "./cli-command-runtime.js";
|
|
10
|
+
import { cliEnv, cliExit, cliNow, cliNowMs, cliPid, cliRuntimeLog, cliSleepSync } from "./cli-runtime-context.js";
|
|
11
|
+
const callbackCliContext = new AsyncLocalStorage();
|
|
12
|
+
function callbackRuntime() {
|
|
13
|
+
const runtime = callbackCliContext.getStore();
|
|
14
|
+
if (!runtime)
|
|
15
|
+
throw new Error("Callback CLI facade runtime is unavailable");
|
|
16
|
+
return runtime;
|
|
17
|
+
}
|
|
18
|
+
function required(value, message) {
|
|
19
|
+
if (value === undefined || value === "")
|
|
20
|
+
throw new Error(message);
|
|
21
|
+
return value;
|
|
22
|
+
}
|
|
23
|
+
function callbackStoreDir(statePath) {
|
|
24
|
+
return pathsForConversationDir(path.dirname(statePath)).storeDir;
|
|
25
|
+
}
|
|
26
|
+
function runCallback(options) {
|
|
27
|
+
const statePath = expandHome(required(options.state, "--state is required"));
|
|
28
|
+
runCallbackTransaction({ ...options, statePath });
|
|
29
|
+
}
|
|
30
|
+
function runRetryCallback(options) {
|
|
31
|
+
const runtime = callbackRuntime();
|
|
32
|
+
const { conversation, statePath, logPath } = runtime.state.loadConversation(options);
|
|
33
|
+
const storeDir = callbackStoreDir(statePath);
|
|
34
|
+
runtime.state.withWriter(storeDir, () => {
|
|
35
|
+
const fresh = loadState(statePath);
|
|
36
|
+
runtime.authority.assertNoDeferredTransfer({
|
|
37
|
+
storeDir,
|
|
38
|
+
conversation: fresh,
|
|
39
|
+
action: "retry callback for"
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
const outcome = callbackOutboxService().retry({
|
|
43
|
+
options: { ...options, statePath }, conversation, statePath, logPath
|
|
44
|
+
});
|
|
45
|
+
if (outcome.kind === "recovered")
|
|
46
|
+
emitPreparedCallbackResult(outcome.result);
|
|
47
|
+
}
|
|
48
|
+
function runCallbackTransaction(options) {
|
|
49
|
+
let prepared;
|
|
50
|
+
callbackRuntime().state.withWriter(callbackStoreDir(options.statePath), () => {
|
|
51
|
+
const releaseState = callbackRuntime().state.acquireFileLock(`${options.statePath}.lock`);
|
|
52
|
+
try {
|
|
53
|
+
prepared = prepareLockedCallback(options);
|
|
54
|
+
}
|
|
55
|
+
finally {
|
|
56
|
+
releaseState();
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
return runPreparedCallback(prepared);
|
|
60
|
+
}
|
|
61
|
+
function callbackOutboxService() {
|
|
62
|
+
const runtime = callbackRuntime();
|
|
63
|
+
return createCallbackOutboxService({
|
|
64
|
+
state: {
|
|
65
|
+
load: loadState, save: saveState,
|
|
66
|
+
readEvents: runtime.state.readEvents,
|
|
67
|
+
append: appendEvent,
|
|
68
|
+
appendMessage: (logPath, message) => appendEvent(logPath, messageEvent(message)),
|
|
69
|
+
assertWriterCompatible: assertStoreWriterCompatible,
|
|
70
|
+
withTransaction: (statePath, operation) => {
|
|
71
|
+
const releaseState = runtime.state.acquireFileLock(`${statePath}.lock`);
|
|
72
|
+
try {
|
|
73
|
+
return operation();
|
|
74
|
+
}
|
|
75
|
+
finally {
|
|
76
|
+
releaseState();
|
|
77
|
+
}
|
|
78
|
+
},
|
|
79
|
+
storeDirForStatePath: callbackStoreDir, logPathForStatePath
|
|
80
|
+
},
|
|
81
|
+
authority: runtime.authority,
|
|
82
|
+
retry: runtime.retry,
|
|
83
|
+
runtime: {
|
|
84
|
+
now: cliNow, nowMs: cliNowMs, pid: cliPid, log: cliRuntimeLog,
|
|
85
|
+
textSummary: runtime.runtime.textSummary,
|
|
86
|
+
sleepSync: cliSleepSync,
|
|
87
|
+
crashCheckpoint: () => {
|
|
88
|
+
if (cliEnv().AKK_TEST_EXIT_AFTER_LOCAL_COMPLETION_STATE === "1") {
|
|
89
|
+
cliExit(86);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
},
|
|
93
|
+
delivery: { deliver: (input) => openClawCallbackTransport().deliverCallback(input),
|
|
94
|
+
runTransaction: runCallbackTransaction }
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
function prepareLockedCallback(options) {
|
|
98
|
+
required(options.messageJson, "--message-json is required");
|
|
99
|
+
return callbackOutboxService().prepare({
|
|
100
|
+
options, logPath: expandHome(options.log ?? logPathForStatePath(options.statePath))
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
function emitPreparedCallbackResult(result) {
|
|
104
|
+
writeCliJson({
|
|
105
|
+
conversation: result.conversation, message: result.message,
|
|
106
|
+
budget: budgetAction(result.conversation),
|
|
107
|
+
delivered: result.delivered, duplicate: result.duplicate,
|
|
108
|
+
...(result.delivery === undefined ? {} : { delivery: result.delivery })
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
function runPreparedCallback(prepared, { emit = true } = {}) {
|
|
112
|
+
const result = callbackOutboxService().runPrepared(prepared);
|
|
113
|
+
if (emit)
|
|
114
|
+
emitPreparedCallbackResult(result);
|
|
115
|
+
return result;
|
|
116
|
+
}
|
|
117
|
+
function recordCallbackProcessDelivery(observation) {
|
|
118
|
+
const { logPath, conversation, message, event, runtimeEvent, delivery } = observation;
|
|
119
|
+
const detail = observation.detail ?? {};
|
|
120
|
+
appendEvent(logPath, {
|
|
121
|
+
ts: cliNow().toISOString(), conversation_id: conversation.conversation_id,
|
|
122
|
+
event, from: message.from, to: "openclaw", round: message.round, ...detail,
|
|
123
|
+
status: delivery.status, stdout: redactString(delivery.stdout),
|
|
124
|
+
stderr: redactString(delivery.stderr)
|
|
125
|
+
});
|
|
126
|
+
cliRuntimeLog("info", runtimeEvent, {
|
|
127
|
+
conversation_id: conversation.conversation_id, ...detail,
|
|
128
|
+
status: delivery.status,
|
|
129
|
+
failure_kind: callbackRuntime().runtime.classifyProcessFailure(delivery),
|
|
130
|
+
stdout: callbackRuntime().runtime.textSummary(delivery.stdout),
|
|
131
|
+
stderr: callbackRuntime().runtime.textSummary(delivery.stderr)
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
function openClawCallbackTransport() {
|
|
135
|
+
return createOpenClawCallbackTransport({
|
|
136
|
+
now: cliNow, environment: cliEnv, redactConversation: redactCliOutput,
|
|
137
|
+
recordCallbackProcessDelivery
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
export function createCallbackCliFacade(dependencies) {
|
|
141
|
+
const call = (operation) => callbackCliContext.run(dependencies, operation);
|
|
142
|
+
return Object.freeze({
|
|
143
|
+
runCallback: (options) => call(() => runCallback(options)),
|
|
144
|
+
runRetryCallback: (options) => call(() => runRetryCallback(options)),
|
|
145
|
+
retryDisposition: (delivery) => call(() => callbackOutboxService().retryDisposition(delivery)),
|
|
146
|
+
reconcileDelivery: (input) => call(() => callbackOutboxService().reconcileDelivery(input)),
|
|
147
|
+
runRetryMonitor: (input) => call(() => callbackOutboxService().runRetryMonitor(input)),
|
|
148
|
+
prepareApprovalNotification: (input) => call(() => callbackOutboxService().prepareApprovalNotification(input)),
|
|
149
|
+
prepareTerminalCompletion: (input) => call(() => callbackOutboxService().prepareTerminalCompletion(input)),
|
|
150
|
+
runPrepared: (prepared, options) => call(() => runPreparedCallback(prepared, options)),
|
|
151
|
+
emitPreparedResult: (result) => call(() => emitPreparedCallbackResult(result)),
|
|
152
|
+
deliverGatewayMethod: (input) => call(() => openClawCallbackTransport().deliverGatewayMethod(input)),
|
|
153
|
+
deliverChatSend: (input) => call(() => openClawCallbackTransport().deliverChatSend(input))
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
//# sourceMappingURL=callback-cli-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"callback-cli-adapter.js","sourceRoot":"","sources":["../../src/callback-cli-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import type { AgentMessage, Conversation } from "./protocol.js";
|
|
2
|
+
export interface CallbackDeliveryOutcome {
|
|
3
|
+
kind: string;
|
|
4
|
+
injection: Record<string, unknown>;
|
|
5
|
+
wake: Record<string, unknown>;
|
|
6
|
+
run_observation?: Record<string, unknown>;
|
|
7
|
+
}
|
|
8
|
+
export interface CallbackProcessFailureObservation {
|
|
9
|
+
status?: number | null;
|
|
10
|
+
stdout?: string;
|
|
11
|
+
stderr?: string;
|
|
12
|
+
error?: {
|
|
13
|
+
message?: string;
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
export declare function classifyCallbackProcessFailure(result: CallbackProcessFailureObservation): string | undefined;
|
|
17
|
+
export interface CallbackDeliveryOptions {
|
|
18
|
+
gatewayMethod?: string;
|
|
19
|
+
openclawBin?: string;
|
|
20
|
+
gatewayUrl?: string;
|
|
21
|
+
token?: string;
|
|
22
|
+
gatewaySession?: string;
|
|
23
|
+
openclawSession?: string;
|
|
24
|
+
}
|
|
25
|
+
export interface DeliverCallbackInput {
|
|
26
|
+
options: CallbackDeliveryOptions;
|
|
27
|
+
statePath: string;
|
|
28
|
+
logPath: string;
|
|
29
|
+
conversation: Conversation;
|
|
30
|
+
message: AgentMessage;
|
|
31
|
+
onProgress?: (progress: Record<string, unknown>) => void;
|
|
32
|
+
onAccepted?: (outcome: CallbackDeliveryOutcome) => void;
|
|
33
|
+
}
|
|
34
|
+
export type CallbackRetryDisposition = {
|
|
35
|
+
state: "retryable";
|
|
36
|
+
attempt: number;
|
|
37
|
+
} | {
|
|
38
|
+
state: "in_flight";
|
|
39
|
+
attempt: number;
|
|
40
|
+
attempt_pid?: number;
|
|
41
|
+
lease_expires_at?: string;
|
|
42
|
+
next_attempt_at?: string;
|
|
43
|
+
} | {
|
|
44
|
+
state: "accepted";
|
|
45
|
+
attempt: number;
|
|
46
|
+
} | {
|
|
47
|
+
state: "exhausted";
|
|
48
|
+
attempt: number;
|
|
49
|
+
} | {
|
|
50
|
+
state: "unavailable";
|
|
51
|
+
attempt: number;
|
|
52
|
+
reason: string;
|
|
53
|
+
};
|
|
54
|
+
export type CallbackRetryPolicyState = {
|
|
55
|
+
phase: "decided";
|
|
56
|
+
disposition: CallbackRetryDisposition;
|
|
57
|
+
} | {
|
|
58
|
+
phase: "observe_process";
|
|
59
|
+
attempt: number;
|
|
60
|
+
attempt_pid: number;
|
|
61
|
+
effective_lease_expires_at_ms?: number;
|
|
62
|
+
persisted_lease_expires_at?: string;
|
|
63
|
+
next_attempt_at?: string;
|
|
64
|
+
} | {
|
|
65
|
+
phase: "observe_clock";
|
|
66
|
+
attempt: number;
|
|
67
|
+
attempt_pid: number;
|
|
68
|
+
effective_lease_expires_at_ms: number;
|
|
69
|
+
persisted_lease_expires_at?: string;
|
|
70
|
+
next_attempt_at?: string;
|
|
71
|
+
};
|
|
72
|
+
export type CallbackRetryObservation = {
|
|
73
|
+
kind: "process_alive";
|
|
74
|
+
alive: boolean;
|
|
75
|
+
} | {
|
|
76
|
+
kind: "clock";
|
|
77
|
+
now_ms: number;
|
|
78
|
+
};
|
|
79
|
+
export interface CallbackRetryPolicyLimits {
|
|
80
|
+
attemptLeaseMs: number;
|
|
81
|
+
retryDelayCount: number;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Classify durable callback-outbox evidence before observing live process or
|
|
85
|
+
* clock state. The returned phase names the first ephemeral observation the
|
|
86
|
+
* caller may need; already-decided states never authorize either observation.
|
|
87
|
+
*/
|
|
88
|
+
export declare function beginCallbackRetryPolicy(callbackDelivery: unknown, limits: CallbackRetryPolicyLimits): CallbackRetryPolicyState;
|
|
89
|
+
/**
|
|
90
|
+
* Advance one callback retry observation without performing I/O. A live
|
|
91
|
+
* process advances to a clock observation only when usable lease evidence is
|
|
92
|
+
* present, preserving the legacy short-circuit order.
|
|
93
|
+
*/
|
|
94
|
+
export declare function reduceCallbackRetryPolicy(state: CallbackRetryPolicyState, observation: CallbackRetryObservation): CallbackRetryPolicyState;
|
|
95
|
+
export declare function callbackDeliveryHasAcceptedTransport(callbackDelivery: unknown): boolean;
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import { nonBlankString as stringValue, recordValue } from "./value-guards.js";
|
|
2
|
+
export function classifyCallbackProcessFailure(result) {
|
|
3
|
+
const status = result.status ?? 0;
|
|
4
|
+
const combined = [
|
|
5
|
+
result.error?.message,
|
|
6
|
+
result.stderr,
|
|
7
|
+
result.stdout
|
|
8
|
+
].filter(Boolean).join("\n").toLowerCase();
|
|
9
|
+
if (!combined && status === 0) {
|
|
10
|
+
return undefined;
|
|
11
|
+
}
|
|
12
|
+
if (isRemoteCompactStreamDisconnect(combined)) {
|
|
13
|
+
return "transient_remote_compact_failure";
|
|
14
|
+
}
|
|
15
|
+
if (combined.includes("agent needs reconnect") ||
|
|
16
|
+
combined.includes("internal error")) {
|
|
17
|
+
return "agent_reconnect_required";
|
|
18
|
+
}
|
|
19
|
+
if (combined.includes("permission denied") ||
|
|
20
|
+
combined.includes("operation not permitted")) {
|
|
21
|
+
return "permission_denied";
|
|
22
|
+
}
|
|
23
|
+
if (combined.includes("sandbox") ||
|
|
24
|
+
combined.includes("outside workspace")) {
|
|
25
|
+
return "sandbox_denied";
|
|
26
|
+
}
|
|
27
|
+
if (combined.includes("timed out") || combined.includes("timeout")) {
|
|
28
|
+
return "timeout";
|
|
29
|
+
}
|
|
30
|
+
return status !== 0 ? "nonzero_exit" : undefined;
|
|
31
|
+
}
|
|
32
|
+
function isRemoteCompactStreamDisconnect(text) {
|
|
33
|
+
const value = String(text ?? "").toLowerCase();
|
|
34
|
+
return value.includes("error running remote compact task") &&
|
|
35
|
+
value.includes("stream disconnected") &&
|
|
36
|
+
value.includes("/codex/responses/compact");
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Classify durable callback-outbox evidence before observing live process or
|
|
40
|
+
* clock state. The returned phase names the first ephemeral observation the
|
|
41
|
+
* caller may need; already-decided states never authorize either observation.
|
|
42
|
+
*/
|
|
43
|
+
export function beginCallbackRetryPolicy(callbackDelivery, limits) {
|
|
44
|
+
const delivery = recordValue(callbackDelivery);
|
|
45
|
+
const attemptValue = Number(delivery?.attempts ?? 0);
|
|
46
|
+
const attempt = Number.isSafeInteger(attemptValue) && attemptValue >= 0
|
|
47
|
+
? attemptValue
|
|
48
|
+
: 0;
|
|
49
|
+
if (!delivery ||
|
|
50
|
+
!recordValue(delivery.message) ||
|
|
51
|
+
!["pending", "failed"].includes(String(delivery.status ?? ""))) {
|
|
52
|
+
return decided({
|
|
53
|
+
state: "unavailable",
|
|
54
|
+
attempt,
|
|
55
|
+
reason: "no pending or failed callback outbox is available"
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
if (callbackDeliveryHasAcceptedTransport(delivery)) {
|
|
59
|
+
return decided({ state: "accepted", attempt });
|
|
60
|
+
}
|
|
61
|
+
if (!Number.isSafeInteger(attemptValue) || attemptValue < 1) {
|
|
62
|
+
return decided({
|
|
63
|
+
state: "unavailable",
|
|
64
|
+
attempt,
|
|
65
|
+
reason: "callback outbox has invalid attempt metadata"
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
if (attemptValue > limits.retryDelayCount) {
|
|
69
|
+
return decided({ state: "exhausted", attempt });
|
|
70
|
+
}
|
|
71
|
+
if (delivery.status === "failed") {
|
|
72
|
+
return decided({ state: "retryable", attempt });
|
|
73
|
+
}
|
|
74
|
+
const attemptPidValue = Number(delivery.attempt_pid);
|
|
75
|
+
const attemptPid = Number.isSafeInteger(attemptPidValue) && attemptPidValue > 0
|
|
76
|
+
? attemptPidValue
|
|
77
|
+
: undefined;
|
|
78
|
+
if (attemptPid === undefined) {
|
|
79
|
+
return decided({ state: "retryable", attempt });
|
|
80
|
+
}
|
|
81
|
+
const persistedLeaseExpiresAt = stringValue(delivery.attempt_lease_expires_at);
|
|
82
|
+
const leaseExpiresAtMs = validTimestampMs(persistedLeaseExpiresAt);
|
|
83
|
+
const legacyLastAttemptAtMs = validTimestampMs(delivery.last_attempt_at);
|
|
84
|
+
return {
|
|
85
|
+
phase: "observe_process",
|
|
86
|
+
attempt,
|
|
87
|
+
attempt_pid: attemptPid,
|
|
88
|
+
effective_lease_expires_at_ms: leaseExpiresAtMs ??
|
|
89
|
+
(legacyLastAttemptAtMs === undefined
|
|
90
|
+
? undefined
|
|
91
|
+
: legacyLastAttemptAtMs + limits.attemptLeaseMs),
|
|
92
|
+
persisted_lease_expires_at: persistedLeaseExpiresAt,
|
|
93
|
+
next_attempt_at: stringValue(delivery.next_attempt_at)
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Advance one callback retry observation without performing I/O. A live
|
|
98
|
+
* process advances to a clock observation only when usable lease evidence is
|
|
99
|
+
* present, preserving the legacy short-circuit order.
|
|
100
|
+
*/
|
|
101
|
+
export function reduceCallbackRetryPolicy(state, observation) {
|
|
102
|
+
if (state.phase === "decided") {
|
|
103
|
+
throw new Error("callback retry policy is already decided");
|
|
104
|
+
}
|
|
105
|
+
if (state.phase === "observe_process") {
|
|
106
|
+
if (observation.kind !== "process_alive") {
|
|
107
|
+
throw new Error("callback retry policy requires a process observation");
|
|
108
|
+
}
|
|
109
|
+
if (!observation.alive || state.effective_lease_expires_at_ms === undefined) {
|
|
110
|
+
return decided({ state: "retryable", attempt: state.attempt });
|
|
111
|
+
}
|
|
112
|
+
return {
|
|
113
|
+
phase: "observe_clock",
|
|
114
|
+
attempt: state.attempt,
|
|
115
|
+
attempt_pid: state.attempt_pid,
|
|
116
|
+
effective_lease_expires_at_ms: state.effective_lease_expires_at_ms,
|
|
117
|
+
persisted_lease_expires_at: state.persisted_lease_expires_at,
|
|
118
|
+
next_attempt_at: state.next_attempt_at
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
if (observation.kind !== "clock") {
|
|
122
|
+
throw new Error("callback retry policy requires a clock observation");
|
|
123
|
+
}
|
|
124
|
+
if (state.effective_lease_expires_at_ms > observation.now_ms) {
|
|
125
|
+
return decided({
|
|
126
|
+
state: "in_flight",
|
|
127
|
+
attempt: state.attempt,
|
|
128
|
+
attempt_pid: state.attempt_pid,
|
|
129
|
+
lease_expires_at: state.persisted_lease_expires_at ??
|
|
130
|
+
new Date(state.effective_lease_expires_at_ms).toISOString(),
|
|
131
|
+
next_attempt_at: state.next_attempt_at
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
return decided({ state: "retryable", attempt: state.attempt });
|
|
135
|
+
}
|
|
136
|
+
export function callbackDeliveryHasAcceptedTransport(callbackDelivery) {
|
|
137
|
+
const delivery = recordValue(callbackDelivery);
|
|
138
|
+
const injection = recordValue(delivery?.injection);
|
|
139
|
+
const wake = recordValue(delivery?.wake);
|
|
140
|
+
return injection?.status === "accepted" || wake?.status === "accepted";
|
|
141
|
+
}
|
|
142
|
+
function decided(disposition) {
|
|
143
|
+
return { phase: "decided", disposition };
|
|
144
|
+
}
|
|
145
|
+
function validTimestampMs(value) {
|
|
146
|
+
const parsed = Date.parse(String(value ?? ""));
|
|
147
|
+
return Number.isFinite(parsed) ? parsed : undefined;
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=callback-outbox-policy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"callback-outbox-policy.js","sourceRoot":"","sources":["../../src/callback-outbox-policy.ts"],"names":[],"mappings":"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"}
|