@scotthuang/agent-knock-knock 0.13.11 → 0.13.13
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 +23 -0
- package/README.md +8 -9
- package/dist/src/codex-app-server-interaction-client.d.ts +72 -0
- package/dist/src/codex-app-server-interaction-client.js +311 -0
- package/dist/src/codex-app-server-interaction-client.js.map +1 -0
- package/dist/src/codex-app-server-questionnaire.d.ts +73 -0
- package/dist/src/codex-app-server-questionnaire.js +366 -0
- package/dist/src/codex-app-server-questionnaire.js.map +1 -0
- package/dist/src/codex-app-server-read-client.d.ts +118 -0
- package/dist/src/codex-app-server-read-client.js +300 -0
- package/dist/src/codex-app-server-read-client.js.map +1 -0
- package/dist/src/codex-app-server-transport.d.ts +11 -0
- package/dist/src/codex-app-server-transport.js +47 -0
- package/dist/src/codex-app-server-transport.js.map +1 -0
- package/dist/src/codex-async-question-adapter.d.ts +5 -0
- package/dist/src/codex-async-question-adapter.js +61 -17
- package/dist/src/codex-async-question-adapter.js.map +1 -1
- package/dist/src/codex-fullscreen-composer-proof.d.ts +23 -0
- package/dist/src/codex-fullscreen-composer-proof.js +125 -0
- package/dist/src/codex-fullscreen-composer-proof.js.map +1 -0
- package/dist/src/codex-lifecycle-compatibility.d.ts +5 -0
- package/dist/src/codex-lifecycle-compatibility.js +13 -1
- package/dist/src/codex-lifecycle-compatibility.js.map +1 -1
- package/dist/src/codex-paginated-answer-proof.d.ts +25 -0
- package/dist/src/codex-paginated-answer-proof.js +189 -0
- package/dist/src/codex-paginated-answer-proof.js.map +1 -0
- package/dist/src/codex-paginated-async-answer.d.ts +36 -0
- package/dist/src/codex-paginated-async-answer.js +322 -0
- package/dist/src/codex-paginated-async-answer.js.map +1 -0
- package/dist/src/codex-paginated-async-response.d.ts +21 -0
- package/dist/src/codex-paginated-async-response.js +118 -0
- package/dist/src/codex-paginated-async-response.js.map +1 -0
- package/dist/src/codex-paginated-observation.d.ts +30 -0
- package/dist/src/codex-paginated-observation.js +139 -0
- package/dist/src/codex-paginated-observation.js.map +1 -0
- package/dist/src/codex-paginated-questionnaire-runtime.d.ts +33 -0
- package/dist/src/codex-paginated-questionnaire-runtime.js +157 -0
- package/dist/src/codex-paginated-questionnaire-runtime.js.map +1 -0
- package/dist/src/codex-paginated-task.d.ts +78 -0
- package/dist/src/codex-paginated-task.js +441 -0
- package/dist/src/codex-paginated-task.js.map +1 -0
- package/dist/src/codex-paginated-thread-binding.d.ts +18 -0
- package/dist/src/codex-paginated-thread-binding.js +56 -0
- package/dist/src/codex-paginated-thread-binding.js.map +1 -0
- package/dist/src/codex-paginated-thread-facts.d.ts +11 -0
- package/dist/src/codex-paginated-thread-facts.js +2 -0
- package/dist/src/codex-paginated-thread-facts.js.map +1 -0
- package/dist/src/codex-paginated-watch.d.ts +29 -0
- package/dist/src/codex-paginated-watch.js +107 -0
- package/dist/src/codex-paginated-watch.js.map +1 -0
- package/dist/src/codex-terminal-agent-adapter.js +127 -7
- package/dist/src/codex-terminal-agent-adapter.js.map +1 -1
- package/dist/src/store.d.ts +1 -1
- package/dist/src/store.js +2 -2
- package/dist/src/store.js.map +1 -1
- package/dist/src/terminal-agent-adapter.d.ts +3 -0
- package/dist/src/terminal-agent-adapter.js.map +1 -1
- package/dist/src/terminal-agent-bridge.d.ts +13 -5
- package/dist/src/terminal-agent-bridge.js +28 -103
- package/dist/src/terminal-agent-bridge.js.map +1 -1
- package/dist/src/terminal-approval-fingerprint.d.ts +7 -0
- package/dist/src/terminal-approval-fingerprint.js +107 -0
- package/dist/src/terminal-approval-fingerprint.js.map +1 -0
- package/dist/src/terminal-command-cli-ports.d.ts +1 -0
- package/dist/src/terminal-composer-classifier.js +39 -1
- package/dist/src/terminal-composer-classifier.js.map +1 -1
- package/dist/src/terminal-control-provider.d.ts +6 -2
- package/dist/src/terminal-control-provider.js +4 -4
- package/dist/src/terminal-control-provider.js.map +1 -1
- package/dist/src/terminal-human-explicit-send-cli-adapter.js +22 -15
- package/dist/src/terminal-human-explicit-send-cli-adapter.js.map +1 -1
- package/dist/src/terminal-interaction-core.js +3 -1
- package/dist/src/terminal-interaction-core.js.map +1 -1
- package/dist/src/terminal-interaction-response-bridge.d.ts +21 -1
- package/dist/src/terminal-interaction-response-bridge.js +148 -3
- package/dist/src/terminal-interaction-response-bridge.js.map +1 -1
- package/dist/src/terminal-list-cli-adapter.js +4 -4
- package/dist/src/terminal-list-cli-adapter.js.map +1 -1
- package/dist/src/terminal-list-facts.d.ts +1 -1
- package/dist/src/terminal-list-facts.js +1 -1
- package/dist/src/terminal-list-facts.js.map +1 -1
- package/dist/src/terminal-managed-send-cli-adapter.d.ts +1 -1
- package/dist/src/terminal-managed-send-cli-adapter.js +27 -0
- package/dist/src/terminal-managed-send-cli-adapter.js.map +1 -1
- package/dist/src/terminal-model-control-bridge.d.ts +1 -1
- package/dist/src/terminal-model-control-bridge.js +1 -1
- package/dist/src/terminal-model-control-bridge.js.map +1 -1
- package/dist/src/terminal-model-control-profile.d.ts +3 -1
- package/dist/src/terminal-model-control-profile.js +47 -1
- package/dist/src/terminal-model-control-profile.js.map +1 -1
- package/dist/src/terminal-model-control.js +63 -21
- package/dist/src/terminal-model-control.js.map +1 -1
- package/dist/src/terminal-monitor-decision-policy.d.ts +1 -1
- package/dist/src/terminal-native-inspection-bridge.d.ts +6 -1
- package/dist/src/terminal-native-inspection-bridge.js +126 -79
- package/dist/src/terminal-native-inspection-bridge.js.map +1 -1
- package/dist/src/terminal-questionnaire-adapter.js +20 -16
- package/dist/src/terminal-questionnaire-adapter.js.map +1 -1
- package/dist/src/terminal-runtime-cli-adapter.js +17 -0
- package/dist/src/terminal-runtime-cli-adapter.js.map +1 -1
- package/dist/src/terminal-send-watch-policy.d.ts +38 -0
- package/dist/src/terminal-send-watch-policy.js +79 -0
- package/dist/src/terminal-send-watch-policy.js.map +1 -0
- package/dist/src/terminal-submission-facts.d.ts +1 -1
- package/dist/src/terminal-submission-facts.js +11 -9
- package/dist/src/terminal-submission-facts.js.map +1 -1
- package/dist/src/terminal-watch-cli-adapter.d.ts +9 -1
- package/dist/src/terminal-watch-cli-adapter.js +199 -210
- package/dist/src/terminal-watch-cli-adapter.js.map +1 -1
- package/dist/src/terminal-watch-codec.js +23 -1
- package/dist/src/terminal-watch-codec.js.map +1 -1
- package/dist/src/terminal-watch-interaction-runtime.js +27 -6
- package/dist/src/terminal-watch-interaction-runtime.js.map +1 -1
- package/dist/src/terminal-watch-presentation.d.ts +4 -0
- package/dist/src/terminal-watch-presentation.js +153 -0
- package/dist/src/terminal-watch-presentation.js.map +1 -0
- package/dist/src/terminal-watch-record.d.ts +4 -2
- package/dist/src/terminal-watch-record.js +15 -10
- package/dist/src/terminal-watch-record.js.map +1 -1
- package/dist/src/terminal-watch-service.js +13 -1
- package/dist/src/terminal-watch-service.js.map +1 -1
- package/docs/codex-0.158.0-compatibility.md +129 -0
- package/docs/codex-0.159.0-compatibility.md +150 -0
- package/docs/quickstart-herdr.md +3 -3
- package/docs/quickstart-tmux.md +5 -5
- package/package.json +7 -3
- package/templates/openclaw-skills/agent-knock-knock/SKILL.md +14 -12
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"terminal-submission-facts.js","sourceRoot":"","sources":["../../src/terminal-submission-facts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,IAAI,MAAM,WAAW,CAAC;AAK7B,OAAO,EAAE,QAAQ,EAAsB,MAAM,mBAAmB,CAAC;AAuIjE,MAAM,UAAU,4CAA4C,CAC1D,KAAc,EACd,QAIC;IAED,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAC/D,CAAC;IACD,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC;QAC1B,QAAQ,EAAE,MAAM,EAAE,gBAAgB,EAAE,aAAa,EAAE,cAAc;QACjE,YAAY,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,UAAU;KACrE,CAAC,CAAC;IACH,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QAC5D,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;IAC5E,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;QAC1E,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;IAC5E,CAAC;IACD,IACE,cAAc,CAAC,KAAK,CAAC,cAAc,EAAE,0BAA0B,CAAC;QAC9D,cAAc,CAAC,QAAQ,CAAC,cAAc,EAAE,mCAAmC,CAAC;QAC9E,WAAW,CAAC,KAAK,CAAC,WAAW,EAAE,gCAAgC,CAAC;YAC9D,WAAW,CAAC,QAAQ,CAAC,WAAW,EAAE,yCAAyC,CAAC,EAC9E,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC,CAAC;IACzF,CAAC;IACD,cAAc,CAAC,KAAK,CAAC,YAAY,EAAE,sBAAsB,CAAC,CAAC;IAC3D,WAAW,CAAC,KAAK,CAAC,iBAAiB,EAAE,sCAAsC,CAAC,CAAC;IAC7E,WAAW,CAAC,KAAK,CAAC,mBAAmB,EAAE,wCAAwC,CAAC,CAAC;IACjF,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;QACxE,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;IACrE,CAAC;IACD,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QACjC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;QACpE,CAAC;QACD,MAAM,eAAe,GAAG,KAAK,CAAC,MAAM,KAAK,eAAe;
|
|
1
|
+
{"version":3,"file":"terminal-submission-facts.js","sourceRoot":"","sources":["../../src/terminal-submission-facts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,IAAI,MAAM,WAAW,CAAC;AAK7B,OAAO,EAAE,QAAQ,EAAsB,MAAM,mBAAmB,CAAC;AAuIjE,MAAM,UAAU,4CAA4C,CAC1D,KAAc,EACd,QAIC;IAED,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAC/D,CAAC;IACD,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC;QAC1B,QAAQ,EAAE,MAAM,EAAE,gBAAgB,EAAE,aAAa,EAAE,cAAc;QACjE,YAAY,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,UAAU;KACrE,CAAC,CAAC;IACH,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QAC5D,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;IAC5E,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;QAC1E,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;IAC5E,CAAC;IACD,IACE,cAAc,CAAC,KAAK,CAAC,cAAc,EAAE,0BAA0B,CAAC;QAC9D,cAAc,CAAC,QAAQ,CAAC,cAAc,EAAE,mCAAmC,CAAC;QAC9E,WAAW,CAAC,KAAK,CAAC,WAAW,EAAE,gCAAgC,CAAC;YAC9D,WAAW,CAAC,QAAQ,CAAC,WAAW,EAAE,yCAAyC,CAAC,EAC9E,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC,CAAC;IACzF,CAAC;IACD,cAAc,CAAC,KAAK,CAAC,YAAY,EAAE,sBAAsB,CAAC,CAAC;IAC3D,WAAW,CAAC,KAAK,CAAC,iBAAiB,EAAE,sCAAsC,CAAC,CAAC;IAC7E,WAAW,CAAC,KAAK,CAAC,mBAAmB,EAAE,wCAAwC,CAAC,CAAC;IACjF,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;QACxE,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;IACrE,CAAC;IACD,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QACjC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;QACpE,CAAC;QACD,MAAM,eAAe,GAAG,KAAK,CAAC,MAAM,KAAK,iBAAiB;YACxD,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;YACtB,CAAC,CAAC,KAAK,CAAC,MAAM,KAAK,eAAe;gBAClC,CAAC,CAAC,IAAI,GAAG,CAAC;oBACN,SAAS,EAAE,qBAAqB,EAAE,2BAA2B;iBAC9D,CAAC;gBACJ,CAAC,CAAC,IAAI,GAAG,CAAC;oBACN,aAAa,EAAE,gBAAgB,EAAE,oBAAoB;oBACrD,qBAAqB,EAAE,2BAA2B;oBAClD,qBAAqB;iBACtB,CAAC,CAAC;QACP,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzD,IACE,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC;gBACzB,CAAC,CAAC,OAAO,IAAI,KAAK,QAAQ;oBACxB,CAAC,OAAO,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EACtD,CAAC;gBACD,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;YAC5E,CAAC;QACH,CAAC;IACH,CAAC;IACD,MAAM,EAAE,mBAAmB,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK,CAAC;IAC/C,IAAI,WAAW,CAAC,IAAI,CAAC,KAAK,mBAAmB,EAAE,CAAC;QAC9C,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;IAC3E,CAAC;IACD,OAAO,KAAwD,CAAC;AAClE,CAAC;AAED,MAAM,wBAAwB,GAC5B,kEAAkE,CAAC;AAErE,MAAM,UAAU,wBAAwB,CACtC,YAAqB;IAErB,MAAM,MAAM,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC;IACjE,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,EAAE,uBAAuB,CAAC;QACxD,CAAC,CAAC,MAAM,CAAC,uBAAuB;QAChC,CAAC,CAAC,SAAS,CAAC;IACd,OAAO,QAAQ,CAAC,QAAQ,EAAE,0BAA0B,CAAC;QACnD,CAAC,CAAC,QAAQ,CAAC,0BAA0B;QACrC,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,oCAAoC,CAClD,KAAc;IAEd,IACE,CAAC,QAAQ,CAAC,KAAK,CAAC;QAChB,KAAK,CAAC,MAAM,KAAK,mDAAmD;QACpE,CAAC,KAAK,CAAC,OAAO,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,KAAK,CAAC,CAAC;QACnE,CAAC,CAAC,UAAU,EAAE,qBAAqB,EAAE,eAAe,CAAC,CAAC,QAAQ,CAC5D,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CACnB;QACD,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,YAAY,CAAC;QACxC,KAAK,CAAC,YAAuB,GAAG,CAAC;QAClC,OAAO,KAAK,CAAC,YAAY,KAAK,SAAS,EACvC,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAChE,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;QACxB,mBAAmB,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;QAC5C,IAAI,uBAAuB,IAAI,KAAK,EAAE,CAAC;YACrC,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;QAC9E,CAAC;IACH,CAAC;SAAM,IAAI,KAAK,CAAC,OAAO,KAAK,CAAC,IAAI,CAChC,KAAK,CAAC,IAAI,KAAK,qBAAqB;QACpC,KAAK,CAAC,qBAAqB,KAAK,iBAAiB;QACjD,kBAAkB,IAAI,KAAK,CAC5B,EAAE,CAAC;QACF,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACpE,CAAC;SAAM,IAAI,KAAK,CAAC,OAAO,KAAK,CAAC,IAAI,CAChC,KAAK,CAAC,IAAI,KAAK,eAAe;QAC9B,KAAK,CAAC,qBAAqB,KAAK,iBAAiB;QACjD,kBAAkB,IAAI,KAAK;QAC3B,KAAK,CAAC,YAAY,KAAK,KAAK;QAC5B,KAAK,CAAC,YAAY,KAAK,CAAC;QACxB,OAAO,KAAK,CAAC,kBAAkB,KAAK,SAAS;QAC7C,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,aAAa,CAAC;QACzC,KAAK,CAAC,aAAwB,IAAI,CAAC;QACpC,CAAC,sBAAsB,CAAC,KAAK,CAAC,aAAa,CAAC;QAC5C,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;QAC5D,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC;QACxC,KAAK,CAAC,kBAAkB,CAAC,MAAM,GAAG,GAAG;QACrC,KAAK,CAAC,kBAAkB,KAAK,CAAC,KAAK,CAAC,kBAAkB,CAAC,MAAM,KAAK,CAAC,CAAC,CACrE,EAAE,CAAC;QACF,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;IAC3E,CAAC;IACD,cAAc,CAAC,KAAK,CAAC,YAAY,EAAE,oBAAoB,CAAC,CAAC;IACzD,cAAc,CAAC,KAAK,CAAC,aAAa,EAAE,qBAAqB,CAAC,CAAC;IAC3D,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;QACvC,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;IACnE,CAAC;IACD,WAAW,CAAC,KAAK,CAAC,kBAAkB,EAAE,qCAAqC,CAAC,CAAC;IAC7E,MAAM,EAAE,kBAAkB,EAAE,YAAY,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK,CAAC;IAC5D,IAAI,WAAW,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,kBAAkB,EAAE,CAAC;QACnD,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;IAChF,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;QACxB,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;QACtC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;QACpC,KAAK,MAAM,SAAS,IAAI,KAAK,CAAC,kBAA+B,EAAE,CAAC;YAC9D,MAAM,eAAe,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;YACpE,MAAM,YAAY,GAAG,eAAe,EAAE,OAAO,CAAC;YAC9C,IAAI,CAAC,eAAe,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;gBAChD,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;YAClE,CAAC;YACD,MAAM,cAAc,GAAG,mBAAmB,CAAC,eAAe,CAAC,gBAAgB,CAAC,CAAC;YAC7E,MAAM,OAAO,GAAG,yBAAyB,CAAC,YAAY,CAAC,CAAC;YACxD,IACE,CAAC,MAAM,CAAC,aAAa,CAAC,eAAe,CAAC,YAAY,CAAC;gBAClD,eAAe,CAAC,YAAuB,GAAG,CAAC;gBAC5C,WAAW,CAAC,GAAG,CAAC,cAAc,CAAC;gBAC/B,SAAS,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC,EACnD,CAAC;gBACD,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;YACvE,CAAC;YACD,WAAW,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;YAChC,SAAS,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,OAAO,GAAG,SAAS,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;QAC/D,IAAI,KAAK,CAAC,YAAY,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC,EAAE,CAAC;YACvD,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;QAChF,CAAC;QACD,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YAC9B,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBACvB,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;YAChF,CAAC;YACD,yBAAyB,CAAC,OAAO,CAAC,CAAC;YACnC,IAAI,KAAK,CAAC,6BAA6B,KAAK,SAAS,EAAE,CAAC;gBACtD,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAC;YACpF,CAAC;QACH,CAAC;aAAM,IACL,KAAK,CAAC,YAAY,KAAK,CAAC;YACxB,OAAO,KAAK,SAAS;YACrB,KAAK,CAAC,6BAA6B,KAAK,IAAI,EAC5C,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;QACjF,CAAC;IACH,CAAC;IACD,OAAO,KAAgD,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,yBAAyB,CACvC,KAA2C;IAE3C,MAAM,UAAU,GAAG;QACjB,EAAE,EAAE,cAAc,CAAC,KAAK,CAAC,EAAE,EAAE,0BAA0B,CAAC;QACxD,MAAM,EAAE,cAAc,CAAC,KAAK,CAAC,MAAM,EAAE,sBAAsB,CAAC;QAC5D,KAAK,EAAE,cAAc,CAAC,KAAK,CAAC,KAAK,EAAE,qBAAqB,CAAC;QACzD,IAAI,EAAE,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,oBAAoB,CAAC;KACvD,CAAC;IACF,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IACjC,aAAa,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IAChC,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAc;IAC5C,OAAO,KAAK,KAAK,SAAS;QACxB,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAc;IAChD,MAAM,IAAI,GAAG,cAAc,CAAC,KAAK,EAAE,wBAAwB,CAAC,CAAC,WAAW,EAAE,CAAC;IAC3E,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACjE,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAc,EAAE,KAAa;IACvD,MAAM,IAAI,GAAG,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;IACxD,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,yBAAyB,CAAC,CAAC;IACrD,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAc,EAAE,KAAa;IAC1D,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3D,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,iBAAiB,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAc;IAC3C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;AACzE,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAc;IACxC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC1E,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,IAAI,CAAC;QACH,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAChE,CAAC;AACH,CAAC"}
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import { readCodexPaginatedTaskSnapshot } from "./codex-paginated-observation.js";
|
|
2
|
+
import { type CodexPaginatedTaskAnchor } from "./codex-paginated-task.js";
|
|
3
|
+
import { capturePaginatedWatchAnchor as capturePaginatedAnchor } from "./codex-paginated-watch.js";
|
|
1
4
|
import { type CallbackRouteV1 } from "./callback-transport.js";
|
|
2
5
|
import type { ClaudeAgentRow } from "./claude-terminal-agent-adapter.js";
|
|
3
6
|
import type { ExecutorKind } from "./executors.js";
|
|
@@ -39,12 +42,14 @@ export interface PreparedUserExplicitFallbackWatch {
|
|
|
39
42
|
openclawSession: string;
|
|
40
43
|
openclawBin: string;
|
|
41
44
|
timeoutMs: number;
|
|
42
|
-
anchor: UserExplicitFallbackWatchAnchor;
|
|
45
|
+
anchor: UserExplicitFallbackWatchAnchor | CodexPaginatedTaskAnchor;
|
|
43
46
|
}
|
|
44
47
|
export interface UserExplicitFallbackWatchReceipt {
|
|
45
48
|
callback_expected: true;
|
|
46
49
|
callback_mode: "terminal_watch";
|
|
47
50
|
watch_id: string;
|
|
51
|
+
watch_mode?: "exact_task" | "terminal_activity";
|
|
52
|
+
confidence?: "exact" | "best_effort";
|
|
48
53
|
}
|
|
49
54
|
type ExactTerminalWatchObservation = {
|
|
50
55
|
state: "available";
|
|
@@ -61,6 +66,8 @@ type ExactTerminalWatchObservation = {
|
|
|
61
66
|
summary: Record<string, unknown>;
|
|
62
67
|
};
|
|
63
68
|
export interface TerminalWatchCliDependencies {
|
|
69
|
+
capturePaginatedAnchor?: typeof capturePaginatedAnchor;
|
|
70
|
+
readPaginatedSnapshot?: typeof readCodexPaginatedTaskSnapshot;
|
|
64
71
|
acquireFileLock(lockPath: string): () => void;
|
|
65
72
|
acquireTerminalLock(storeDir: string, terminalControl: TerminalControlRef): () => void;
|
|
66
73
|
createBridge?(options: TerminalWatchCliOptions): TerminalAgentBridge;
|
|
@@ -85,6 +92,7 @@ export interface TerminalWatchCliFacade {
|
|
|
85
92
|
options: TerminalWatchCliOptions;
|
|
86
93
|
terminal: UserExplicitFallbackWatchTarget;
|
|
87
94
|
requestHash: string;
|
|
95
|
+
requestText?: string;
|
|
88
96
|
messageId: string;
|
|
89
97
|
physicalToken: string;
|
|
90
98
|
}): Promise<PreparedUserExplicitFallbackWatch | undefined>;
|
|
@@ -1,10 +1,15 @@
|
|
|
1
|
+
import { isCodexPaginatedVersion } from "./codex-lifecycle-compatibility.js";
|
|
2
|
+
import { respondCodexPaginatedAsyncQuestion } from "./codex-paginated-async-response.js";
|
|
3
|
+
import { publicTerminalWatch, terminalWatchCapturedAgentVersion } from "./terminal-watch-presentation.js";
|
|
1
4
|
import { createHash } from "node:crypto";
|
|
2
5
|
import path from "node:path";
|
|
6
|
+
import { CodexLegacyThreadHistoryError } from "./codex-paginated-observation.js";
|
|
7
|
+
import { capturePaginatedWatchAnchor as capturePaginatedAnchor, isPaginatedSendWatch, paginatedWatchProcessMatches, observePaginatedWatch, refreshPaginatedResponseForeground } from "./codex-paginated-watch.js";
|
|
8
|
+
import { observeCodexPaginatedBlockingQuestion, respondCodexPaginatedBlockingQuestion } from "./codex-paginated-questionnaire-runtime.js";
|
|
9
|
+
import { selectCodexUserExplicitSendWatchSource } from "./terminal-send-watch-policy.js";
|
|
3
10
|
import { callbackRouteFingerprint } from "./callback-route-authority.js";
|
|
4
11
|
import { createTerminalWatchOpenClawCallbackRoute, parseCallbackRoute } from "./callback-transport.js";
|
|
5
12
|
import { captureClaudeTranscriptAnchor, captureClaudeHumanStartedActiveTaskAnchor, observeClaudeUserExplicitFallbackTranscript, observeClaudeHumanStartedActiveTask } from "./claude-local-transcript-provider.js";
|
|
6
|
-
import { claudeRuntimeCompatibilityWarning } from "./claude-lifecycle-compatibility.js";
|
|
7
|
-
import { codexRuntimeCompatibilityProfile } from "./codex-lifecycle-compatibility.js";
|
|
8
13
|
import { codexAsyncQuestionMainComposerVisible } from "./codex-async-question-adapter.js";
|
|
9
14
|
import { hostProfileCallbackRouteMatchesRuntime } from "./host-profile-callback-transport.js";
|
|
10
15
|
import { captureTerminalInteractionRuntimeOffer, TerminalInteractionDispatchReservedError, TerminalInteractionInputNotStartedError } from "./terminal-agent-bridge.js";
|
|
@@ -120,46 +125,9 @@ export function createTerminalWatchCliAdapter(dependencies) {
|
|
|
120
125
|
const rawTerminal = observed.rawTerminal;
|
|
121
126
|
assertSameUserExplicitFallbackTerminal(input.terminal, rawTerminal);
|
|
122
127
|
const agentVersion = requiredString(rawTerminal.agent_version, "running coding-agent version");
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
const acceptanceAnchor = isRecord(inventory)
|
|
127
|
-
? captureCodexCandidateSetRolloutAcceptanceAnchor({
|
|
128
|
-
inventory: inventory,
|
|
129
|
-
now: dependencies.now()
|
|
130
|
-
})
|
|
131
|
-
: captureCodexRolloutAcceptanceAnchor({
|
|
132
|
-
nativeThreadId: requiredString(rawTerminal.native_agent_session_id, "Codex native thread id"),
|
|
133
|
-
processUuid: requiredString(rawTerminal.native_agent_process_uuid, "Codex process UUID"),
|
|
134
|
-
processBirth: requiredString(rawTerminal.native_agent_process_birth, "Codex process birth"),
|
|
135
|
-
mode: "existing",
|
|
136
|
-
rollout: codexIdentity(rawTerminal).rollout,
|
|
137
|
-
now: dependencies.now()
|
|
138
|
-
});
|
|
139
|
-
anchor = createCodexUserExplicitFallbackWatchAnchor({
|
|
140
|
-
acceptanceAnchor,
|
|
141
|
-
requestHash: input.requestHash,
|
|
142
|
-
codexVersion: agentVersion
|
|
143
|
-
});
|
|
144
|
-
}
|
|
145
|
-
else {
|
|
146
|
-
const transcriptAnchor = captureClaudeTranscriptAnchor({
|
|
147
|
-
sessionId: requiredString(rawTerminal.native_agent_session_id, "Claude native session id"),
|
|
148
|
-
cwd: terminalWorkspace(rawTerminal),
|
|
149
|
-
pid: positiveInteger(rawTerminal.pid, "Claude PID"),
|
|
150
|
-
claudeHome: stringValue(input.options.claudeHome),
|
|
151
|
-
agentRows: dependencies.loadClaudeAgentRows(input.options, { required: true }),
|
|
152
|
-
now: dependencies.now()
|
|
153
|
-
});
|
|
154
|
-
if (!transcriptAnchor) {
|
|
155
|
-
throw new Error("Claude transcript anchor is unavailable before terminal input");
|
|
156
|
-
}
|
|
157
|
-
anchor = createClaudeUserExplicitFallbackWatchAnchor({
|
|
158
|
-
transcriptAnchor,
|
|
159
|
-
requestHash: input.requestHash,
|
|
160
|
-
claudeVersion: agentVersion
|
|
161
|
-
});
|
|
162
|
-
}
|
|
128
|
+
const anchor = input.terminal.agent === "codex"
|
|
129
|
+
? await captureCodexFallbackWatchAnchor(input, rawTerminal, agentVersion, dependencies)
|
|
130
|
+
: captureClaudeFallbackWatchAnchor(input, rawTerminal, agentVersion, dependencies);
|
|
163
131
|
return {
|
|
164
132
|
watchId: terminalUserExplicitFallbackWatchId({
|
|
165
133
|
messageId: input.messageId,
|
|
@@ -217,7 +185,7 @@ export function createTerminalWatchCliAdapter(dependencies) {
|
|
|
217
185
|
catch (error) {
|
|
218
186
|
const existing = service.list().find((candidate) => candidate.watch_id === input.prepared.watchId);
|
|
219
187
|
if (!existing ||
|
|
220
|
-
!isUserExplicitFallbackWatch(existing) ||
|
|
188
|
+
!(isUserExplicitFallbackWatch(existing) || isPaginatedSendWatch(existing)) ||
|
|
221
189
|
existing.anchor.anchor_fingerprint !==
|
|
222
190
|
input.prepared.anchor.anchor_fingerprint) {
|
|
223
191
|
throw error;
|
|
@@ -227,7 +195,9 @@ export function createTerminalWatchCliAdapter(dependencies) {
|
|
|
227
195
|
return {
|
|
228
196
|
callback_expected: true,
|
|
229
197
|
callback_mode: "terminal_watch",
|
|
230
|
-
watch_id: watch.watch_id
|
|
198
|
+
watch_id: watch.watch_id,
|
|
199
|
+
watch_mode: "exact_task",
|
|
200
|
+
confidence: "exact"
|
|
231
201
|
};
|
|
232
202
|
}
|
|
233
203
|
async function bestEffortStabilizePriorFallbackWatch(options, terminalId, requestHash) {
|
|
@@ -254,13 +224,15 @@ export function createTerminalWatchCliAdapter(dependencies) {
|
|
|
254
224
|
function userExplicitFallbackWatchReceipt(input) {
|
|
255
225
|
try {
|
|
256
226
|
const watch = serviceFor(input.options).get(input.watchId);
|
|
257
|
-
if (!isUserExplicitFallbackWatch(watch) || !watch.callback_route) {
|
|
227
|
+
if (!(isUserExplicitFallbackWatch(watch) || isPaginatedSendWatch(watch)) || !watch.callback_route) {
|
|
258
228
|
return undefined;
|
|
259
229
|
}
|
|
260
230
|
return {
|
|
261
231
|
callback_expected: true,
|
|
262
232
|
callback_mode: "terminal_watch",
|
|
263
|
-
watch_id: watch.watch_id
|
|
233
|
+
watch_id: watch.watch_id,
|
|
234
|
+
watch_mode: "exact_task",
|
|
235
|
+
confidence: "exact"
|
|
264
236
|
};
|
|
265
237
|
}
|
|
266
238
|
catch {
|
|
@@ -285,7 +257,9 @@ export function createTerminalWatchCliAdapter(dependencies) {
|
|
|
285
257
|
const warnings = [];
|
|
286
258
|
let anchor;
|
|
287
259
|
try {
|
|
288
|
-
anchor =
|
|
260
|
+
anchor = agent === "codex" && isCodexPaginatedVersion(rawTerminal.agent_version)
|
|
261
|
+
? await capturePaginatedWatchAnchorWithLock(rawTerminal, options, dependencies)
|
|
262
|
+
: captureTerminalWatchAnchor(agent, rawTerminal, options, dependencies);
|
|
289
263
|
}
|
|
290
264
|
catch (error) {
|
|
291
265
|
warnings.push(`exact_task_anchor_unavailable: ${safeDiagnostic(error)}`);
|
|
@@ -481,20 +455,57 @@ function createTerminalWatchInteractionResponder(dependencies, serviceFor) {
|
|
|
481
455
|
if (!bridge) {
|
|
482
456
|
throw new Error("terminal interaction bridge is unavailable");
|
|
483
457
|
}
|
|
458
|
+
if (runtime.codexPaginatedThread && executableInteraction.projection.kind === "async_question") {
|
|
459
|
+
await refreshPaginatedResponseForeground(bridge, terminalControl, runtime, dependencies.now);
|
|
460
|
+
}
|
|
484
461
|
const attemptId = dependencies.randomUUID();
|
|
485
462
|
const responseHash = hashTerminalInteractionResponse(response);
|
|
486
463
|
const reservation = { attemptId, responseHash };
|
|
487
464
|
const result = await executeTerminalInteractionResponseTransaction({
|
|
488
465
|
reservationFailureFence: "confirmed",
|
|
489
|
-
dispatch: (hooks) =>
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
466
|
+
dispatch: (hooks) => "schema" in current.observation_checkpoint &&
|
|
467
|
+
current.observation_checkpoint.schema === "agent-knock-knock/codex-paginated-task-checkpoint" &&
|
|
468
|
+
executableInteraction.projection.kind === "questionnaire"
|
|
469
|
+
? respondCodexPaginatedBlockingQuestion({
|
|
470
|
+
watch: current, checkpoint: current.observation_checkpoint, terminalControl,
|
|
471
|
+
response, expectedFingerprint, now: dependencies.now,
|
|
472
|
+
authorize: hooks.authorize, beforeDispatch: hooks.beforeDispatch,
|
|
473
|
+
persistDraft: (draft) => {
|
|
474
|
+
current = repository.withWriterLease((scope) => scope.withWatchLock(watchId, () => {
|
|
475
|
+
const latest = scope.load(watchId);
|
|
476
|
+
const checkpoint = latest.observation_checkpoint;
|
|
477
|
+
if (!("schema" in checkpoint) || checkpoint.schema !== "agent-knock-knock/codex-paginated-task-checkpoint") {
|
|
478
|
+
throw new Error("Codex blocking question checkpoint changed");
|
|
479
|
+
}
|
|
480
|
+
const nextCheckpoint = { ...checkpoint };
|
|
481
|
+
if (draft)
|
|
482
|
+
nextCheckpoint.blocking_question_draft = draft;
|
|
483
|
+
else
|
|
484
|
+
delete nextCheckpoint.blocking_question_draft;
|
|
485
|
+
return scope.save({ ...latest,
|
|
486
|
+
observation_checkpoint: nextCheckpoint,
|
|
487
|
+
updated_at: dependencies.now().toISOString()
|
|
488
|
+
}, { expectedRevision: terminalWatchRevision(latest) });
|
|
489
|
+
}));
|
|
490
|
+
}
|
|
491
|
+
})
|
|
492
|
+
: runtime.codexPaginatedThread && executableInteraction.projection.kind === "async_question"
|
|
493
|
+
? respondCodexPaginatedAsyncQuestion({
|
|
494
|
+
bridge, terminalControl, terminalEvidence: current.terminal.terminal_endpoint,
|
|
495
|
+
runtime, response, now: dependencies.now,
|
|
496
|
+
options: { agentVersion: version, expectedFingerprint, expectedExpiresAt,
|
|
497
|
+
scrollbackLines: Number(options.scrollbackLines ?? 120), runtime,
|
|
498
|
+
authorize: hooks.authorize, beforeDispatch: hooks.beforeDispatch }
|
|
499
|
+
})
|
|
500
|
+
: bridge.respondInteraction(current.agent, terminalControl, response, {
|
|
501
|
+
agentVersion: version,
|
|
502
|
+
expectedFingerprint,
|
|
503
|
+
expectedExpiresAt,
|
|
504
|
+
scrollbackLines: Number(options.scrollbackLines ?? 120),
|
|
505
|
+
runtime,
|
|
506
|
+
authorize: hooks.authorize,
|
|
507
|
+
beforeDispatch: hooks.beforeDispatch
|
|
508
|
+
}),
|
|
498
509
|
authorize: ({ projection, fingerprint }) => {
|
|
499
510
|
const latest = repository.load(watchId);
|
|
500
511
|
const interaction = requiredExecutableWatchInteraction(latest, interactionId, expectedFingerprint);
|
|
@@ -743,6 +754,9 @@ function sameManualWatchTarget(watch, agent, terminal, anchor) {
|
|
|
743
754
|
function sameManualWatchAnchorTarget(left, right) {
|
|
744
755
|
if (left.schema !== right.schema)
|
|
745
756
|
return false;
|
|
757
|
+
if (left.schema === "agent-knock-knock/codex-paginated-task-anchor" && right.schema === left.schema) {
|
|
758
|
+
return samePaginatedWatchTask(left, right);
|
|
759
|
+
}
|
|
746
760
|
if (left.schema ===
|
|
747
761
|
"agent-knock-knock/codex-human-started-active-task-anchor" &&
|
|
748
762
|
right.schema === left.schema) {
|
|
@@ -755,11 +769,7 @@ function sameManualWatchAnchorTarget(left, right) {
|
|
|
755
769
|
if (left.schema ===
|
|
756
770
|
"agent-knock-knock/claude-human-started-active-task-anchor" &&
|
|
757
771
|
right.schema === left.schema) {
|
|
758
|
-
return left
|
|
759
|
-
left.pid === right.pid &&
|
|
760
|
-
left.agent_started_at_ms === right.agent_started_at_ms &&
|
|
761
|
-
left.device === right.device &&
|
|
762
|
-
left.inode === right.inode;
|
|
772
|
+
return sameClaudeWatchTask(left, right);
|
|
763
773
|
}
|
|
764
774
|
if (left.schema === "agent-knock-knock/terminal-activity-watch-anchor" &&
|
|
765
775
|
right.schema === left.schema) {
|
|
@@ -769,6 +779,18 @@ function sameManualWatchAnchorTarget(left, right) {
|
|
|
769
779
|
}
|
|
770
780
|
return left.anchor_fingerprint === right.anchor_fingerprint;
|
|
771
781
|
}
|
|
782
|
+
function sameClaudeWatchTask(left, right) {
|
|
783
|
+
return left.prompt_uuid === right.prompt_uuid &&
|
|
784
|
+
left.pid === right.pid &&
|
|
785
|
+
left.agent_started_at_ms === right.agent_started_at_ms &&
|
|
786
|
+
left.device === right.device &&
|
|
787
|
+
left.inode === right.inode;
|
|
788
|
+
}
|
|
789
|
+
function samePaginatedWatchTask(left, right) {
|
|
790
|
+
return left.native_thread_id === right.native_thread_id && left.turn_id === right.turn_id &&
|
|
791
|
+
left.process_uuid === right.process_uuid && left.process_birth === right.process_birth &&
|
|
792
|
+
left.origin === right.origin && left.codex_home === right.codex_home;
|
|
793
|
+
}
|
|
772
794
|
function optionalIdentityCompatible(left, right) {
|
|
773
795
|
return left === undefined || right === undefined || left === right;
|
|
774
796
|
}
|
|
@@ -794,6 +816,92 @@ function terminalControlForWatch(terminal) {
|
|
|
794
816
|
}
|
|
795
817
|
return terminal.terminal_control;
|
|
796
818
|
}
|
|
819
|
+
async function captureCodexFallbackWatchAnchor(input, rawTerminal, agentVersion, dependencies) {
|
|
820
|
+
let inventory = rawTerminal._codex_open_root_rollout_inventory;
|
|
821
|
+
let paginated;
|
|
822
|
+
if (isCodexPaginatedVersion(agentVersion)) {
|
|
823
|
+
try {
|
|
824
|
+
paginated = await capturePaginatedWatchAnchor(rawTerminal, input.options, dependencies, input.requestText === undefined ? input.requestHash
|
|
825
|
+
: createHash("sha256").update(input.requestText.replace(/\r\n?/gu, "\n").trim()).digest("hex"));
|
|
826
|
+
}
|
|
827
|
+
catch (error) {
|
|
828
|
+
if (!(error instanceof CodexLegacyThreadHistoryError) || !isRecord(inventory) || !Array.isArray(inventory.roots))
|
|
829
|
+
throw error;
|
|
830
|
+
const roots = inventory.roots.filter((root) => root.sessionId === error.threadId);
|
|
831
|
+
if (roots.length !== 1)
|
|
832
|
+
throw error;
|
|
833
|
+
inventory = { ...inventory, roots };
|
|
834
|
+
}
|
|
835
|
+
}
|
|
836
|
+
const source = selectCodexUserExplicitSendWatchSource({
|
|
837
|
+
agentVersion,
|
|
838
|
+
legacyRootCount: isRecord(inventory) && Array.isArray(inventory.roots) ? inventory.roots.length : 0,
|
|
839
|
+
paginatedAnchorAvailable: paginated !== undefined
|
|
840
|
+
});
|
|
841
|
+
if (source.source === "none")
|
|
842
|
+
throw new Error(source.warning);
|
|
843
|
+
if (paginated) {
|
|
844
|
+
return paginated;
|
|
845
|
+
}
|
|
846
|
+
else {
|
|
847
|
+
const acceptanceAnchor = isRecord(inventory)
|
|
848
|
+
? captureCodexCandidateSetRolloutAcceptanceAnchor({
|
|
849
|
+
inventory: inventory,
|
|
850
|
+
now: dependencies.now()
|
|
851
|
+
})
|
|
852
|
+
: captureCodexRolloutAcceptanceAnchor({
|
|
853
|
+
nativeThreadId: requiredString(rawTerminal.native_agent_session_id, "Codex native thread id"),
|
|
854
|
+
processUuid: requiredString(rawTerminal.native_agent_process_uuid, "Codex process UUID"),
|
|
855
|
+
processBirth: requiredString(rawTerminal.native_agent_process_birth, "Codex process birth"),
|
|
856
|
+
mode: "existing",
|
|
857
|
+
rollout: codexIdentity(rawTerminal).rollout,
|
|
858
|
+
now: dependencies.now()
|
|
859
|
+
});
|
|
860
|
+
return createCodexUserExplicitFallbackWatchAnchor({
|
|
861
|
+
acceptanceAnchor,
|
|
862
|
+
requestHash: input.requestHash,
|
|
863
|
+
codexVersion: agentVersion
|
|
864
|
+
});
|
|
865
|
+
}
|
|
866
|
+
}
|
|
867
|
+
function captureClaudeFallbackWatchAnchor(input, rawTerminal, agentVersion, dependencies) {
|
|
868
|
+
const transcriptAnchor = captureClaudeTranscriptAnchor({
|
|
869
|
+
sessionId: requiredString(rawTerminal.native_agent_session_id, "Claude native session id"),
|
|
870
|
+
cwd: terminalWorkspace(rawTerminal),
|
|
871
|
+
pid: positiveInteger(rawTerminal.pid, "Claude PID"),
|
|
872
|
+
claudeHome: stringValue(input.options.claudeHome),
|
|
873
|
+
agentRows: dependencies.loadClaudeAgentRows(input.options, { required: true }),
|
|
874
|
+
now: dependencies.now()
|
|
875
|
+
});
|
|
876
|
+
if (!transcriptAnchor) {
|
|
877
|
+
throw new Error("Claude transcript anchor is unavailable before terminal input");
|
|
878
|
+
}
|
|
879
|
+
return createClaudeUserExplicitFallbackWatchAnchor({
|
|
880
|
+
transcriptAnchor,
|
|
881
|
+
requestHash: input.requestHash,
|
|
882
|
+
claudeVersion: agentVersion
|
|
883
|
+
});
|
|
884
|
+
}
|
|
885
|
+
async function capturePaginatedWatchAnchor(terminal, options, dependencies, requestHash) {
|
|
886
|
+
const bridge = dependencies.createBridge?.(options);
|
|
887
|
+
if (dependencies.capturePaginatedAnchor) {
|
|
888
|
+
return dependencies.capturePaginatedAnchor({ terminal, bridge: bridge, requestHash,
|
|
889
|
+
codexHome: stringValue(options.codexHome), now: dependencies.now });
|
|
890
|
+
}
|
|
891
|
+
if (!bridge)
|
|
892
|
+
throw new Error("Codex paginated terminal inspection is unavailable");
|
|
893
|
+
return capturePaginatedAnchor({ terminal, bridge, requestHash,
|
|
894
|
+
codexHome: stringValue(options.codexHome), now: dependencies.now });
|
|
895
|
+
}
|
|
896
|
+
async function capturePaginatedWatchAnchorWithLock(terminal, options, dependencies) {
|
|
897
|
+
const release = dependencies.acquireTerminalLock(dependencies.storeDirFromOptions(options), terminalControlForWatch(terminal));
|
|
898
|
+
try {
|
|
899
|
+
return await capturePaginatedWatchAnchor(terminal, options, dependencies);
|
|
900
|
+
}
|
|
901
|
+
finally {
|
|
902
|
+
release();
|
|
903
|
+
}
|
|
904
|
+
}
|
|
797
905
|
function captureTerminalWatchAnchor(agent, terminal, options, dependencies) {
|
|
798
906
|
if (agent === "codex") {
|
|
799
907
|
return captureCodexHumanStartedActiveTaskAnchor({
|
|
@@ -817,6 +925,23 @@ async function observeTerminalWatch(watch, options, dependencies) {
|
|
|
817
925
|
const rawTerminal = exactTerminal.state === "available"
|
|
818
926
|
? exactTerminal.rawTerminal
|
|
819
927
|
: undefined;
|
|
928
|
+
if (watch.anchor.schema === "agent-knock-knock/codex-paginated-task-anchor") {
|
|
929
|
+
const terminalMatches = Boolean(rawTerminal && terminalMatchesWatch(rawTerminal, watch) && paginatedWatchProcessMatches(rawTerminal, watch.anchor));
|
|
930
|
+
return observePaginatedWatch({ watch, observedAt, terminalMatches,
|
|
931
|
+
terminalAvailable: exactTerminal.state === "available",
|
|
932
|
+
readSnapshot: dependencies.readPaginatedSnapshot,
|
|
933
|
+
blockingQuestionnaire: (checkpoint) => observeCodexPaginatedBlockingQuestion({
|
|
934
|
+
watch, checkpoint, now: new Date(observedAt),
|
|
935
|
+
responseDecision: (surfaceId, fingerprint) => rawTerminal
|
|
936
|
+
? terminalWatchResponseDecision({ ...watch, observation_checkpoint: checkpoint }, rawTerminal, surfaceId, fingerprint, options, dependencies)
|
|
937
|
+
: { executable: false, suppress: false }
|
|
938
|
+
}),
|
|
939
|
+
questionnaire: (checkpoint, questions) => exactTerminal.state === "available"
|
|
940
|
+
? terminalWatchQuestionnaireObservation({ watch, observedAt, options, dependencies,
|
|
941
|
+
rawTerminal, projectedTerminal: exactTerminal.terminal, terminalMatches,
|
|
942
|
+
observationCheckpoint: checkpoint, codexAsyncQuestionEvidence: questions })
|
|
943
|
+
: undefined });
|
|
944
|
+
}
|
|
820
945
|
const projectedTerminal = exactTerminal.state === "available"
|
|
821
946
|
? exactTerminal.terminal
|
|
822
947
|
: undefined;
|
|
@@ -1331,7 +1456,8 @@ function terminalWatchQuestionnaireObservation(input, requireFallbackAttribution
|
|
|
1331
1456
|
}),
|
|
1332
1457
|
now: new Date(input.observedAt),
|
|
1333
1458
|
approvalBlocked: Boolean(approvalFingerprint(input.projectedTerminal)),
|
|
1334
|
-
trustedTerminalEvidence: input.watch.terminal.terminal_endpoint
|
|
1459
|
+
trustedTerminalEvidence: input.watch.terminal.terminal_endpoint,
|
|
1460
|
+
codexAsyncQuestionEvidence: input.codexAsyncQuestionEvidence
|
|
1335
1461
|
});
|
|
1336
1462
|
let offer = captureOffer("notify_only");
|
|
1337
1463
|
if (!offer)
|
|
@@ -1346,7 +1472,7 @@ function terminalWatchQuestionnaireObservation(input, requireFallbackAttribution
|
|
|
1346
1472
|
return undefined;
|
|
1347
1473
|
}
|
|
1348
1474
|
const responseDecision = terminalWatchResponseDecision(responseWatch, rawTerminal, offer.surfaceId, offer.promptFingerprint, input.options, input.dependencies);
|
|
1349
|
-
if (responseDecision.executable) {
|
|
1475
|
+
if (responseDecision.executable && !(responseWatch.anchor.schema === "agent-knock-knock/codex-paginated-task-anchor" && offer.projection.kind === "questionnaire")) {
|
|
1350
1476
|
const executableOffer = captureOffer("executable");
|
|
1351
1477
|
if (!executableOffer ||
|
|
1352
1478
|
executableOffer.surfaceId !== offer.surfaceId ||
|
|
@@ -1603,6 +1729,13 @@ function terminalWatchesShareExactTask(left, right) {
|
|
|
1603
1729
|
}
|
|
1604
1730
|
function terminalWatchExactTaskKey(watch) {
|
|
1605
1731
|
const anchor = watch.anchor;
|
|
1732
|
+
if (anchor.schema === "agent-knock-knock/codex-paginated-task-anchor") {
|
|
1733
|
+
const checkpoint = watch.observation_checkpoint;
|
|
1734
|
+
const turnId = "schema" in checkpoint && checkpoint.schema === "agent-knock-knock/codex-paginated-task-checkpoint"
|
|
1735
|
+
? checkpoint.acceptance_evidence?.acceptanceId ?? anchor.turn_id : anchor.turn_id;
|
|
1736
|
+
return turnId ? sha256({ source: "codex_paginated", thread: anchor.native_thread_id,
|
|
1737
|
+
task: turnId, home: anchor.codex_home, process: anchor.process_uuid }) : undefined;
|
|
1738
|
+
}
|
|
1606
1739
|
if (anchor.schema ===
|
|
1607
1740
|
"agent-knock-knock/codex-human-started-active-task-anchor") {
|
|
1608
1741
|
return codexWatchTaskKey({
|
|
@@ -1808,6 +1941,9 @@ function managedTerminalInteractionEvidence(turn, surfaceId, promptFingerprint,
|
|
|
1808
1941
|
function terminalWatchCandidateMatchesLiveContext(watch, terminal) {
|
|
1809
1942
|
if (!terminalMatchesWatch(terminal, watch))
|
|
1810
1943
|
return false;
|
|
1944
|
+
if (watch.anchor.schema === "agent-knock-knock/codex-paginated-task-anchor") {
|
|
1945
|
+
return paginatedWatchProcessMatches(terminal, watch.anchor);
|
|
1946
|
+
}
|
|
1811
1947
|
const sessionId = stringValue(terminal.native_agent_session_id);
|
|
1812
1948
|
if (watch.anchor.schema ===
|
|
1813
1949
|
"agent-knock-knock/codex-human-started-active-task-anchor") {
|
|
@@ -2160,125 +2296,6 @@ function codexIdentityForWatch(watch) {
|
|
|
2160
2296
|
rollout: watch.anchor.rollout
|
|
2161
2297
|
};
|
|
2162
2298
|
}
|
|
2163
|
-
function publicTerminalWatch(watch, additionalWarnings = [], exposeInteraction = false) {
|
|
2164
|
-
const pending = watch.notification_outbox.filter(({ status }) => status === "pending" || status === "delivering" || status === "failed").length;
|
|
2165
|
-
const capturedAgentVersion = terminalWatchCapturedAgentVersion(watch);
|
|
2166
|
-
const compatibilityWarning = capturedAgentVersion === undefined
|
|
2167
|
-
? undefined
|
|
2168
|
-
: watch.agent === "codex"
|
|
2169
|
-
? codexRuntimeCompatibilityProfile(capturedAgentVersion)
|
|
2170
|
-
?.compatibilityWarning
|
|
2171
|
-
: claudeRuntimeCompatibilityWarning(capturedAgentVersion);
|
|
2172
|
-
const userExplicitFallback = isUserExplicitFallbackWatch(watch);
|
|
2173
|
-
const terminalActivityFallback = isTerminalActivityWatch(watch);
|
|
2174
|
-
const warnings = [...new Set([
|
|
2175
|
-
...(watch.warnings ?? []),
|
|
2176
|
-
...additionalWarnings
|
|
2177
|
-
])];
|
|
2178
|
-
const latestFailedCallback = [...watch.notification_outbox]
|
|
2179
|
-
.reverse()
|
|
2180
|
-
.find(({ status }) => status === "failed");
|
|
2181
|
-
const currentInteraction = exposeInteraction && watch.status === "active" &&
|
|
2182
|
-
watch.current_interaction &&
|
|
2183
|
-
["pending", "reserved", "response_uncertain"].includes(watch.current_interaction.aggregate.state)
|
|
2184
|
-
? watch.current_interaction
|
|
2185
|
-
: undefined;
|
|
2186
|
-
const interactionProjection = currentInteraction?.aggregate.state ===
|
|
2187
|
-
"reserved"
|
|
2188
|
-
? {
|
|
2189
|
-
...currentInteraction.projection,
|
|
2190
|
-
state: "response_uncertain",
|
|
2191
|
-
capabilities: {
|
|
2192
|
-
...currentInteraction.projection.capabilities,
|
|
2193
|
-
respond: false
|
|
2194
|
-
}
|
|
2195
|
-
}
|
|
2196
|
-
: currentInteraction?.projection;
|
|
2197
|
-
return {
|
|
2198
|
-
watch_id: watch.watch_id,
|
|
2199
|
-
source: userExplicitFallback
|
|
2200
|
-
? "terminal_user_explicit_fallback_watch"
|
|
2201
|
-
: terminalActivityFallback
|
|
2202
|
-
? "terminal_activity_watch"
|
|
2203
|
-
: "user_selected_terminal_watch",
|
|
2204
|
-
watch_mode: terminalActivityFallback ? "terminal_activity" : "exact_task",
|
|
2205
|
-
confidence: terminalActivityFallback ? "best_effort" : "exact",
|
|
2206
|
-
interaction_policy: watch.interaction_policy,
|
|
2207
|
-
capabilities: {
|
|
2208
|
-
interaction_notify: true,
|
|
2209
|
-
interaction_respond: Boolean(interactionProjection?.state === "pending" &&
|
|
2210
|
-
interactionProjection.capabilities.respond)
|
|
2211
|
-
},
|
|
2212
|
-
agent: watch.agent,
|
|
2213
|
-
terminal_id: watch.terminal.terminal_id,
|
|
2214
|
-
native_thread_id: terminalWatchNativeThreadId(watch),
|
|
2215
|
-
workspace: watch.terminal.workspace,
|
|
2216
|
-
status: watch.status,
|
|
2217
|
-
activity_state: watch.status === "active" ? "watching" : "settled",
|
|
2218
|
-
created_at: watch.created_at,
|
|
2219
|
-
deadline_at: watch.deadline_at,
|
|
2220
|
-
updated_at: watch.updated_at,
|
|
2221
|
-
last_activity_at: watch.last_activity_at,
|
|
2222
|
-
...(compatibilityWarning
|
|
2223
|
-
? { compatibility_warning: compatibilityWarning }
|
|
2224
|
-
: {}),
|
|
2225
|
-
...(warnings.length > 0
|
|
2226
|
-
? { warnings }
|
|
2227
|
-
: {}),
|
|
2228
|
-
callback: {
|
|
2229
|
-
pending,
|
|
2230
|
-
delivered: watch.notification_outbox.filter(({ status }) => status === "delivered").length,
|
|
2231
|
-
failed: watch.notification_outbox.filter(({ status }) => status === "failed").length,
|
|
2232
|
-
superseded: watch.notification_outbox.filter(({ status }) => status === "superseded").length,
|
|
2233
|
-
...(latestFailedCallback?.last_error_code
|
|
2234
|
-
? { last_error_code: latestFailedCallback.last_error_code }
|
|
2235
|
-
: {})
|
|
2236
|
-
},
|
|
2237
|
-
...(interactionProjection
|
|
2238
|
-
? {
|
|
2239
|
-
interaction_state: interactionProjection,
|
|
2240
|
-
interaction_prompt_fingerprint: interactionProjection.prompt_fingerprint
|
|
2241
|
-
}
|
|
2242
|
-
: {}),
|
|
2243
|
-
...(watch.settlement
|
|
2244
|
-
? {
|
|
2245
|
-
settlement: {
|
|
2246
|
-
kind: watch.settlement.kind,
|
|
2247
|
-
observed_at: watch.settlement.observed_at,
|
|
2248
|
-
reason_code: watch.settlement.reason_code,
|
|
2249
|
-
completion_text: watch.settlement.completion_text,
|
|
2250
|
-
completion_id: watch.settlement.completion_id,
|
|
2251
|
-
completion_timestamp: watch.settlement.completion_timestamp
|
|
2252
|
-
}
|
|
2253
|
-
}
|
|
2254
|
-
: {}),
|
|
2255
|
-
available_actions: {
|
|
2256
|
-
status: {
|
|
2257
|
-
tool: "agent_knock_knock_status",
|
|
2258
|
-
arguments: { watch_id: watch.watch_id }
|
|
2259
|
-
},
|
|
2260
|
-
...(watch.status === "active"
|
|
2261
|
-
? {
|
|
2262
|
-
unwatch: {
|
|
2263
|
-
tool: "agent_knock_knock_unwatch",
|
|
2264
|
-
arguments: { watch_id: watch.watch_id },
|
|
2265
|
-
requires_user_intent: true
|
|
2266
|
-
}
|
|
2267
|
-
}
|
|
2268
|
-
: {}),
|
|
2269
|
-
...(interactionProjection?.state === "pending" &&
|
|
2270
|
-
interactionProjection.capabilities.respond
|
|
2271
|
-
? {
|
|
2272
|
-
respond_interaction: {
|
|
2273
|
-
tool: "agent_knock_knock_respond_interaction",
|
|
2274
|
-
arguments: { watch_id: watch.watch_id },
|
|
2275
|
-
requires_user_intent: true
|
|
2276
|
-
}
|
|
2277
|
-
}
|
|
2278
|
-
: {})
|
|
2279
|
-
}
|
|
2280
|
-
};
|
|
2281
|
-
}
|
|
2282
2299
|
function watchStatusInteractionAccess(watch, options) {
|
|
2283
2300
|
if (!Object.hasOwn(options, "openclawSession"))
|
|
2284
2301
|
return false;
|
|
@@ -2288,34 +2305,6 @@ function watchStatusInteractionAccess(watch, options) {
|
|
|
2288
2305
|
}
|
|
2289
2306
|
return true;
|
|
2290
2307
|
}
|
|
2291
|
-
function terminalWatchCapturedAgentVersion(watch) {
|
|
2292
|
-
switch (watch.anchor.schema) {
|
|
2293
|
-
case "agent-knock-knock/codex-human-started-active-task-anchor":
|
|
2294
|
-
case "agent-knock-knock/codex-user-explicit-fallback-watch-anchor":
|
|
2295
|
-
return watch.anchor.codex_version;
|
|
2296
|
-
case "agent-knock-knock/claude-human-started-active-task-anchor":
|
|
2297
|
-
case "agent-knock-knock/claude-user-explicit-fallback-watch-anchor":
|
|
2298
|
-
return watch.anchor.claude_version;
|
|
2299
|
-
case "agent-knock-knock/terminal-activity-watch-anchor":
|
|
2300
|
-
return watch.anchor.agent_version;
|
|
2301
|
-
}
|
|
2302
|
-
}
|
|
2303
|
-
function terminalWatchNativeThreadId(watch) {
|
|
2304
|
-
switch (watch.anchor.schema) {
|
|
2305
|
-
case "agent-knock-knock/codex-human-started-active-task-anchor":
|
|
2306
|
-
return watch.anchor.native_thread_id;
|
|
2307
|
-
case "agent-knock-knock/claude-human-started-active-task-anchor":
|
|
2308
|
-
return watch.anchor.session_id;
|
|
2309
|
-
case "agent-knock-knock/codex-user-explicit-fallback-watch-anchor":
|
|
2310
|
-
return watch.anchor.acceptance_anchor.version === 1
|
|
2311
|
-
? watch.anchor.acceptance_anchor.native_thread_id
|
|
2312
|
-
: undefined;
|
|
2313
|
-
case "agent-knock-knock/claude-user-explicit-fallback-watch-anchor":
|
|
2314
|
-
return watch.anchor.transcript_anchor.session_id;
|
|
2315
|
-
case "agent-knock-knock/terminal-activity-watch-anchor":
|
|
2316
|
-
return undefined;
|
|
2317
|
-
}
|
|
2318
|
-
}
|
|
2319
2308
|
function approvalFingerprint(terminal) {
|
|
2320
2309
|
if (terminal.activity_state !== "awaiting_approval")
|
|
2321
2310
|
return undefined;
|