subharness 0.0.5 → 0.0.7
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/README.md +59 -3
- package/dist/adapters/claude-process.js +8 -1
- package/dist/adapters/claude-process.js.map +1 -1
- package/dist/adapters/claude-tools.d.ts +6 -2
- package/dist/adapters/claude-tools.js +14 -12
- package/dist/adapters/claude-tools.js.map +1 -1
- package/dist/adapters/claude-worker-client.d.ts +49 -0
- package/dist/adapters/claude-worker-client.js +359 -0
- package/dist/adapters/claude-worker-client.js.map +1 -0
- package/dist/adapters/claude-worker-process.d.ts +20 -0
- package/dist/adapters/claude-worker-process.js +76 -0
- package/dist/adapters/claude-worker-process.js.map +1 -0
- package/dist/adapters/claude-worker-protocol.d.ts +38 -0
- package/dist/adapters/claude-worker-protocol.js +2 -0
- package/dist/adapters/claude-worker-protocol.js.map +1 -0
- package/dist/adapters/claude-worker.d.ts +1 -0
- package/dist/adapters/claude-worker.js +126 -0
- package/dist/adapters/claude-worker.js.map +1 -0
- package/dist/adapters/claude.d.ts +16 -6
- package/dist/adapters/claude.js +138 -68
- package/dist/adapters/claude.js.map +1 -1
- package/dist/cli/catalog-worker.js.map +1 -1
- package/dist/cli/dashboard-client.js +19 -30
- package/dist/cli/dashboard-client.js.map +1 -1
- package/dist/cli/main.js +53 -45
- package/dist/cli/main.js.map +1 -1
- package/dist/errors.d.ts +2 -2
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +6 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/runtime/approval-registry.d.ts +9 -0
- package/dist/runtime/approval-registry.js +143 -4
- package/dist/runtime/approval-registry.js.map +1 -1
- package/dist/runtime/capture.d.ts +22 -0
- package/dist/runtime/capture.js +320 -0
- package/dist/runtime/capture.js.map +1 -0
- package/dist/runtime/catalog.d.ts +39 -0
- package/dist/runtime/catalog.js +84 -0
- package/dist/runtime/catalog.js.map +1 -0
- package/dist/runtime/client.d.ts +2 -1
- package/dist/runtime/client.js +52 -65
- package/dist/runtime/client.js.map +1 -1
- package/dist/runtime/coordinator.d.ts +44 -7
- package/dist/runtime/coordinator.js +265 -31
- package/dist/runtime/coordinator.js.map +1 -1
- package/dist/runtime/daemon.js +12 -6
- package/dist/runtime/daemon.js.map +1 -1
- package/dist/runtime/dashboard-workspace.js +5 -1
- package/dist/runtime/dashboard-workspace.js.map +1 -1
- package/dist/runtime/definition.d.ts +6 -1
- package/dist/runtime/definition.js +31 -1
- package/dist/runtime/definition.js.map +1 -1
- package/dist/runtime/native-owner.js +7 -1
- package/dist/runtime/native-owner.js.map +1 -1
- package/dist/runtime/pagination.d.ts +9 -0
- package/dist/runtime/pagination.js +36 -0
- package/dist/runtime/pagination.js.map +1 -0
- package/dist/runtime/sdk-observation.d.ts +8 -0
- package/dist/runtime/sdk-observation.js +75 -0
- package/dist/runtime/sdk-observation.js.map +1 -0
- package/dist/runtime/sdk-projection.d.ts +8 -0
- package/dist/runtime/sdk-projection.js +19 -0
- package/dist/runtime/sdk-projection.js.map +1 -0
- package/dist/runtime/sdk-service.d.ts +11 -0
- package/dist/runtime/sdk-service.js +109 -0
- package/dist/runtime/sdk-service.js.map +1 -0
- package/dist/runtime/select-native.d.ts +4 -1
- package/dist/runtime/select-native.js +14 -17
- package/dist/runtime/select-native.js.map +1 -1
- package/dist/runtime/service.d.ts +11 -1
- package/dist/runtime/service.js +178 -3
- package/dist/runtime/service.js.map +1 -1
- package/dist/runtime/session-launcher.js +1 -1
- package/dist/runtime/session-launcher.js.map +1 -1
- package/dist/runtime/snapshots.d.ts +103 -0
- package/dist/runtime/snapshots.js +124 -0
- package/dist/runtime/snapshots.js.map +1 -0
- package/dist/runtime/state.d.ts +26 -0
- package/dist/runtime/state.js +86 -17
- package/dist/runtime/state.js.map +1 -1
- package/dist/runtime/task-data.d.ts +38 -0
- package/dist/runtime/task-data.js +2 -0
- package/dist/runtime/task-data.js.map +1 -0
- package/dist/runtime/transport.d.ts +13 -0
- package/dist/runtime/transport.js +166 -0
- package/dist/runtime/transport.js.map +1 -0
- package/dist/runtime/types.d.ts +28 -9
- package/dist/runtime/types.js.map +1 -1
- package/dist/runtime/worker-client.js +2 -0
- package/dist/runtime/worker-client.js.map +1 -1
- package/dist/runtime/worker-server.js +105 -24
- package/dist/runtime/worker-server.js.map +1 -1
- package/dist/sdk/connected-types.d.ts +42 -0
- package/dist/sdk/connected-types.js +2 -0
- package/dist/sdk/connected-types.js.map +1 -0
- package/dist/sdk/connected.d.ts +3 -0
- package/dist/sdk/connected.js +232 -0
- package/dist/sdk/connected.js.map +1 -0
- package/dist/sdk/execution-definition.d.ts +3 -0
- package/dist/sdk/execution-definition.js +59 -0
- package/dist/sdk/execution-definition.js.map +1 -0
- package/dist/sdk/execution-driver.d.ts +6 -0
- package/dist/sdk/execution-driver.js +86 -0
- package/dist/sdk/execution-driver.js.map +1 -0
- package/dist/sdk/execution-observation.d.ts +3 -0
- package/dist/sdk/execution-observation.js +35 -0
- package/dist/sdk/execution-observation.js.map +1 -0
- package/dist/sdk/execution-options.d.ts +17 -0
- package/dist/sdk/execution-options.js +115 -0
- package/dist/sdk/execution-options.js.map +1 -0
- package/dist/sdk/execution-types.d.ts +72 -0
- package/dist/sdk/execution-types.js +2 -0
- package/dist/sdk/execution-types.js.map +1 -0
- package/dist/sdk/execution.d.ts +3 -0
- package/dist/sdk/execution.js +3 -0
- package/dist/sdk/execution.js.map +1 -0
- package/dist/sdk/hosted-error.d.ts +3 -0
- package/dist/sdk/hosted-error.js +14 -0
- package/dist/sdk/hosted-error.js.map +1 -0
- package/dist/sdk/hosted.d.ts +23 -0
- package/dist/sdk/hosted.js +204 -0
- package/dist/sdk/hosted.js.map +1 -0
- package/dist/sdk/runner.d.ts +5 -0
- package/dist/sdk/runner.js +107 -0
- package/dist/sdk/runner.js.map +1 -0
- package/dist/sdk/tools.js +4 -1
- package/dist/sdk/tools.js.map +1 -1
- package/package.json +3 -3
- package/sdk/access-config.md +2 -0
- package/sdk/adapter-contract.md +8 -0
- package/sdk/agent.md +1 -1
- package/sdk/approvals.md +2 -0
- package/sdk/completion-notifications.md +2 -0
- package/sdk/distribution.md +4 -2
- package/sdk/examples/chat-tool.ts +126 -0
- package/sdk/execution.md +743 -0
- package/sdk/index.md +45 -21
- package/sdk/message-delivery.md +2 -0
- package/sdk/permissions.md +2 -0
- package/sdk/plugins/sub-agents.md +4 -2
- package/sdk/project-team.md +23 -1
- package/sdk/sessions.md +2 -0
- package/sdk/tools.md +3 -1
- package/sdk/v1-runtime.md +7 -5
- package/dist/cli/catalog.d.ts +0 -26
- package/dist/cli/catalog.js +0 -41
- package/dist/cli/catalog.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dashboard-client.js","sourceRoot":"","sources":["../../src/cli/dashboard-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAW1C,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;AACjG,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,mBAAmB,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC,CAAC;AACjI,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC,CAAC;AAC1E,MAAM,SAAS,GAAG,CAAC,KAAc,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC;AAEjI,SAAS,WAAW,CAAC,KAAc;IACjC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACtD,MAAM,SAAS,GAAG,KAAgC,CAAC;IACnD,OAAO,OAAO,SAAS,CAAC,SAAS,KAAK,QAAQ,IAAI,UAAU,CAAC,SAAS,CAAC,SAAS,CAAC;WAC5E,CAAC,SAAS,CAAC,UAAU,KAAK,SAAS,IAAI,CAAC,OAAO,SAAS,CAAC,UAAU,KAAK,QAAQ,IAAI,UAAU,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAC9H,CAAC;AAED,SAAS,KAAK,CAAC,KAAc,EAAE,QAAiB;IAC9C,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACtD,MAAM,IAAI,GAAG,KAAgC,CAAC;IAC9C,OAAO,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ;WACvE,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;WAC/D,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;WACxD,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,IAAI,GAAG;WAC/D,CAAC,CAAC,QAAQ,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,IAAI,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;WACzG,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC;WACtF,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC;AAC1E,CAAC;AAID,SAAS,UAAU,CAAC,KAAc;IAChC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACtD,MAAM,QAAQ,GAAG,KAAgC,CAAC;IAClD,IAAI,QAAQ,CAAC,OAAO,KAAK,CAAC,IAAI,QAAQ,CAAC,IAAI,KAAK,WAAW,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,OAAO,KAAK,CAAC;IAC/G,IAAI,SAAS,IAAI,QAAQ,IAAI,OAAO,QAAQ,CAAC,OAAO,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACjF,IAAI,UAAU,IAAI,QAAQ,IAAI,OAAO,QAAQ,CAAC,QAAQ,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACnF,OAAO,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,QAAQ,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC;AAC3F,CAAC;AAKD,SAAS,SAAS,CAAC,KAAc;IAC/B,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACtD,MAAM,IAAI,GAAG,KAAgC,CAAC;IAC9C,OAAO,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ;WACvE,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;WAC/D,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,IAAI,GAAG;WAC/D,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAChE,CAAC;AAED,SAAS,QAAQ,CACf,KAAc,EACd,EAAU,EACV,aAAsB,EACtB,eAAwB;IAExB,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACtD,MAAM,MAAM,GAAG,KAAgC,CAAC;IAChD,IAAI,MAAM,CAAC,OAAO,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,KAAK,kBAAkB;WACzD,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,EAAE;WACtD,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC;WACpE,CAAC,MAAM,CAAC,KAAK,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ;WACjD,OAAO,MAAM,CAAC,eAAe,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAC/D,MAAM,KAAK,GAAG,MAAM,CAAC,KAAgC,CAAC;IACtD,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC;QAAE,OAAO,KAAK,CAAC;IACpH,IAAI,aAAa,EAAE,CAAC;QAClB,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;IACtD,CAAC;SAAM,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC;QAAE,OAAO,KAAK,CAAC;IACzD,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;QACnC,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;QACpE,MAAM,KAAK,GAAG,MAAM,CAAC,KAAgC,CAAC;QACtD,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;IACxF,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,CAAC;QACtC,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;QAC1E,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAmC,CAAC;QAC5D,IAAI,OAAO,QAAQ,CAAC,UAAU,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;QAC1D,MAAM,SAAS,GAAG,eAAe,KAAK,SAAS,IAAI,QAAQ,CAAC,UAAU,KAAK,eAAe,CAAC;QAC3F,IAAI,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,QAAQ,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;IACpG,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,wBAAwB,CAAC,KAAc;IAC9C,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACtD,MAAM,QAAQ,GAAG,KAAgC,CAAC;IAClD,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,OAAO,KAAK,CAAC,IAAI,QAAQ,CAAC,IAAI,KAAK,OAAO;WACxF,CAAC,QAAQ,CAAC,KAAK,IAAI,OAAO,QAAQ,CAAC,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACzE,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAgC,CAAC;IACxD,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC;WACjC,KAAK,CAAC,IAAI,KAAK,kBAAkB,IAAI,KAAK,CAAC,OAAO,KAAK,gCAAgC,CAAC;AAC/F,CAAC;AAED,SAAS,SAAS,CAAC,KAAc,EAAE,EAAU;IAC3C,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACtD,MAAM,OAAO,GAAG,KAAyB,CAAC;IAC1C,IAAI,OAAO,CAAC,OAAO,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,KAAK,mBAAmB,IAAI,OAAO,CAAC,MAAM,KAAK,EAAE;WACrF,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC;WAC5E,OAAO,OAAO,CAAC,WAAW,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM;WACxG,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC;QAAE,OAAO,KAAK,CAAC;IACrD,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9B,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IACnC,IAAI,QAAsC,CAAC;IAC3C,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACnC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,SAAS,KAAK,OAAO,CAAC,SAAS,IAAI,GAAG,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO;eACzG,GAAG,CAAC,SAAS,CAAC,SAAS,KAAK,OAAO,CAAC,SAAS,CAAC,SAAS,IAAI,GAAG,CAAC,SAAS,CAAC,UAAU,KAAK,OAAO,CAAC,SAAS,CAAC,UAAU;eACpH,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,OAAO,GAAG,CAAC,IAAI,GAAG,CAAC,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM;eAC9F,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,OAAO,GAAG,CAAC,eAAe,KAAK,SAAS;eAC5F,CAAC,GAAG,CAAC,eAAe,IAAI,GAAG,CAAC,KAAK,KAAK,QAAQ,CAAC;eAC/C,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,mBAAmB,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,YAAY,KAAK,SAAS,CAAC;eAChH,CAAC,GAAG,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,GAAG,CAAC,QAAQ,KAAK,SAAS,IAAI,GAAG,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC;eACxF,CAAC,GAAG,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,GAAG,CAAC,YAAY,KAAK,SAAS,IAAI,GAAG,CAAC,UAAU,KAAK,SAAS,IAAI,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC;YAC7H,iFAAiF;eAC9E,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,mBAAmB,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,UAAU,KAAK,SAAS,CAAC;YAAE,OAAO,KAAK,CAAC;QACrH,IAAI,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,KAAK,QAAQ,IAAI,GAAG,CAAC,KAAK,KAAK,QAAQ,CAAC;eACnE,CAAC,CAAC,QAAQ,CAAC,KAAK,KAAK,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,KAAK,QAAQ,CAAC,IAAI,QAAQ,CAAC,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;QACpH,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAAC,QAAQ,GAAG,GAAG,CAAC;IACjE,CAAC;IACD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QAAE,OAAO,KAAK,CAAC;IAC/B,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IACnC,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QACtC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,SAAS,KAAK,OAAO,CAAC,SAAS;eAC9F,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC;YAAE,OAAO,KAAK,CAAC;QAC1E,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACvD,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,mBAAmB,CAAC,QAAkB,EAAE,UAAU,GAA0C,UAAU;IAC7G,MAAM,OAAO,GAAG,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,iCAAiC,CAAC,CAAC,CAAC,UAAU,KAAK,YAAY;QACxG,CAAC,CAAC,2BAA2B;QAC7B,CAAC,CAAC,4CAA4C,CAAC;IACjD,OAAO,IAAI,UAAU,CAAC,sBAAsB,EAAE,mCAAmC,QAAQ,CAAC,GAAG,sBAAsB,OAAO,iMAAiM,CAAC,CAAC;AAC/T,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,QAAkB,EAClB,EAAU,EACV,MAAmB,EACnB,SAAS,GAAG,KAAK;IAEjB,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAC1E,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE;YACzC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,EAAC,aAAa,EAAE,UAAU,QAAQ,CAAC,KAAK,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAC;YACxG,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAC,OAAO,EAAE,mBAAmB,EAAE,EAAE,EAAC,CAAC,EAAE,MAAM,EAAE,OAAO;SAC1E,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;YAAC,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;QAAC,CAAC;QACzF,MAAM,OAAO,GAAY,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;QAC3D,IAAI,wBAAwB,CAAC,OAAO,CAAC;YAAE,MAAM,mBAAmB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QACtF,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;QAChE,OAAO,OAAO,CAAC;IACjB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,UAAU;YAAE,MAAM,KAAK,CAAC;QAC7C,MAAM,IAAI,UAAU,CAAC,yBAAyB,EAAE,iGAAiG,CAAC,CAAC;IACrJ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,QAAkB,EAAE,MAAmB,EAAE,SAAS,GAAG,KAAK;IACrG,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAC1E,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE;YACzC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,EAAC,aAAa,EAAE,UAAU,QAAQ,CAAC,KAAK,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAC;YACxG,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAC,OAAO,EAAE,WAAW,EAAC,CAAC,EAAE,MAAM,EAAE,OAAO;SAC9D,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;YAAC,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QAAC,CAAC;QAC1F,MAAM,QAAQ,GAAY,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;QAC5D,IAAI,wBAAwB,CAAC,QAAQ,CAAC;YAAE,MAAM,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QAC5E,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;QAC/D,IAAI,QAAQ,CAAC,OAAO,KAAK,IAAI,IAAI,QAAQ,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;YAC5D,MAAM,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QACtC,CAAC;QACD,OAAO,EAAC,GAAG,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAC,CAAC;IACtD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,UAAU;YAAE,MAAM,KAAK,CAAC;QAC7C,MAAM,IAAI,UAAU,CAAC,yBAAyB,EAAE,6FAA6F,CAAC,CAAC;IACjJ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,QAAkB,EAClB,EAAU,EACV,MAAmB,EACnB,aAAa,GAAG,IAAI,EACpB,eAAwB,EACxB,SAAS,GAAG,KAAK;IAEjB,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAC1E,MAAM,OAAO,GAA4B,EAAC,OAAO,EAAE,kBAAkB,EAAE,EAAE,EAAC,CAAC;IAC3E,IAAI,CAAC,aAAa;QAAE,OAAO,CAAC,aAAa,GAAG,KAAK,CAAC;IAClD,IAAI,eAAe,KAAK,SAAS;QAAE,OAAO,CAAC,eAAe,GAAG,eAAe,CAAC;IAC7E,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE;YACzC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,EAAC,aAAa,EAAE,UAAU,QAAQ,CAAC,KAAK,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAC;YACxG,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO;SAC/C,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;YAAC,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;QAAC,CAAC;QACxF,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;QAC1D,IAAI,wBAAwB,CAAC,MAAM,CAAC;YAAE,MAAM,mBAAmB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QACxF,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,EAAE,aAAa,EAAE,eAAe,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;QAC7F,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,UAAU;YAAE,MAAM,KAAK,CAAC;QAC7C,MAAM,IAAI,UAAU,CAAC,yBAAyB,EAAE,8FAA8F,CAAC,CAAC;IAClJ,CAAC;AACH,CAAC","sourcesContent":["import { isAbsolute } from 'node:path';\nimport { AgentError } from '../errors.js';\nimport type {\n DashboardDetail,\n DashboardRelatedTask,\n DashboardRow,\n DashboardRequest,\n DashboardSession,\n DashboardSnapshot,\n} from '../runtime/dashboard.js';\nimport type { Endpoint } from '../runtime/state.js';\n\nconst harnesses = new Set(['codex', 'claude', 'fx', 'opencode', 'copilot', 'cursor', 'pending']);\nconst states = new Set(['queued', 'running', 'waiting', 'awaiting_approval', 'completed', 'failed', 'cancelled', 'interrupted']);\nconst finishedStates = new Set(['completed', 'cancelled', 'interrupted']);\nconst timestamp = (value: unknown) => value === undefined || (typeof value === 'number' && Number.isFinite(value) && value >= 0);\n\nfunction isWorkspace(value: unknown): boolean {\n if (!value || typeof value !== 'object') return false;\n const workspace = value as Record<string, unknown>;\n return typeof workspace.directory === 'string' && isAbsolute(workspace.directory)\n && (workspace.repository === undefined || (typeof workspace.repository === 'string' && isAbsolute(workspace.repository)));\n}\n\nfunction isRow(value: unknown, grouping: boolean): value is DashboardRow {\n if (!value || typeof value !== 'object') return false;\n const item = value as Record<string, unknown>;\n return typeof item.sessionId === 'string' && typeof item.taskId === 'string'\n && typeof item.harness === 'string' && harnesses.has(item.harness)\n && typeof item.state === 'string' && states.has(item.state)\n && typeof item.title === 'string' && [...item.title].length <= 120\n && (!grouping || (isWorkspace(item.workspace) && item.updatedAt !== undefined && timestamp(item.updatedAt)))\n && timestamp(item.dispatchedAt) && timestamp(item.failedAt) && timestamp(item.finishedAt)\n && (!finishedStates.has(item.state) || item.finishedAt !== undefined);\n}\n\ntype SnapshotResponse = Omit<DashboardSnapshot, 'history' | 'grouping'> & {history?: boolean; grouping?: boolean};\n\nfunction isSnapshot(value: unknown): value is SnapshotResponse {\n if (!value || typeof value !== 'object') return false;\n const snapshot = value as Record<string, unknown>;\n if (snapshot.version !== 1 || snapshot.type !== 'dashboard' || !Array.isArray(snapshot.sessions)) return false;\n if ('history' in snapshot && typeof snapshot.history !== 'boolean') return false;\n if ('grouping' in snapshot && typeof snapshot.grouping !== 'boolean') return false;\n return snapshot.sessions.every((row: unknown) => isRow(row, snapshot.grouping === true));\n}\n\nexport type DashboardRelatedRecord = DashboardRelatedTask;\nexport type DashboardDetailRecord = DashboardDetail;\n\nfunction isRelated(value: unknown): value is DashboardRelatedRecord {\n if (!value || typeof value !== 'object') return false;\n const task = value as Record<string, unknown>;\n return typeof task.taskId === 'string' && typeof task.sessionId === 'string'\n && typeof task.harness === 'string' && harnesses.has(task.harness)\n && typeof task.title === 'string' && [...task.title].length <= 120\n && typeof task.state === 'string' && states.has(task.state);\n}\n\nfunction isDetail(\n value: unknown,\n id: string,\n includePrompt: boolean,\n knownResponseId?: string,\n): value is DashboardDetailRecord {\n if (!value || typeof value !== 'object') return false;\n const detail = value as Record<string, unknown>;\n if (detail.version !== 1 || detail.type !== 'dashboard-detail'\n || !isRow(detail.task, true) || detail.task.taskId !== id\n || !Array.isArray(detail.children) || !detail.children.every(isRelated)\n || !detail.queue || typeof detail.queue !== 'object'\n || typeof detail.stopUnconfirmed !== 'boolean') return false;\n const queue = detail.queue as Record<string, unknown>;\n if (typeof queue.paused !== 'boolean' || !Array.isArray(queue.tasks) || !queue.tasks.every(isRelated)) return false;\n if (includePrompt) {\n if (typeof detail.prompt !== 'string') return false;\n } else if (Object.hasOwn(detail, 'prompt')) return false;\n if (Object.hasOwn(detail, 'error')) {\n if (!detail.error || typeof detail.error !== 'object') return false;\n const error = detail.error as Record<string, unknown>;\n if (typeof error.code !== 'string' || typeof error.message !== 'string') return false;\n }\n if (Object.hasOwn(detail, 'response')) {\n if (!detail.response || typeof detail.response !== 'object') return false;\n const response = detail.response as Record<string, unknown>;\n if (typeof response.responseId !== 'string') return false;\n const unchanged = knownResponseId !== undefined && response.responseId === knownResponseId;\n if (unchanged ? Object.hasOwn(response, 'text') : typeof response.text !== 'string') return false;\n }\n return true;\n}\n\nfunction isLegacyUnknownOperation(value: unknown): boolean {\n if (!value || typeof value !== 'object') return false;\n const response = value as Record<string, unknown>;\n if (Object.keys(response).length !== 3 || response.version !== 1 || response.type !== 'error'\n || !response.error || typeof response.error !== 'object') return false;\n const error = response.error as Record<string, unknown>;\n return Object.keys(error).length === 2\n && error.code === 'INVALID_ARGUMENT' && error.message === 'Unknown coordinator operation.';\n}\n\nfunction isSession(value: unknown, id: string): value is DashboardSession {\n if (!value || typeof value !== 'object') return false;\n const session = value as DashboardSession;\n if (session.version !== 1 || session.type !== 'dashboard-session' || session.taskId !== id\n || !isRelated(session) || !session.sessionId || !isWorkspace(session.workspace)\n || typeof session.queuePaused !== 'boolean' || !Array.isArray(session.requests) || !session.requests.length\n || !Array.isArray(session.subagents)) return false;\n const ids = new Set<string>();\n const ordinals = new Set<number>();\n let previous: DashboardRequest | undefined;\n for (const row of session.requests) {\n if (!isRow(row, true) || !row.taskId || row.sessionId !== session.sessionId || row.harness !== session.harness\n || row.workspace.directory !== session.workspace.directory || row.workspace.repository !== session.workspace.repository\n || !Number.isSafeInteger(row.ordinal) || row.ordinal < 1 || row.ordinal > session.requests.length\n || ordinals.has(row.ordinal) || ids.has(row.taskId) || typeof row.stopUnconfirmed !== 'boolean'\n || (row.stopUnconfirmed && row.state !== 'failed')\n || (['running', 'waiting', 'awaiting_approval', 'completed'].includes(row.state) && row.dispatchedAt === undefined)\n || (row.state === 'failed' && (row.failedAt === undefined || row.finishedAt === undefined))\n || (row.state === 'queued' && (row.dispatchedAt !== undefined || row.finishedAt !== undefined || row.failedAt !== undefined))\n // Failure time can precede the final state while descendant shutdown is pending.\n || (['running', 'waiting', 'awaiting_approval'].includes(row.state) && row.finishedAt !== undefined)) return false;\n if (previous && ((previous.state !== 'queued' && row.state === 'queued')\n || ((previous.state === 'queued') === (row.state === 'queued') && previous.ordinal <= row.ordinal))) return false;\n ids.add(row.taskId); ordinals.add(row.ordinal); previous = row;\n }\n if (!ids.has(id)) return false;\n const children = new Set<string>();\n for (const child of session.subagents) {\n if (!isRelated(child) || !child.taskId || !child.sessionId || child.sessionId === session.sessionId\n || ids.has(child.taskId) || children.has(child.sessionId)) return false;\n ids.add(child.taskId); children.add(child.sessionId);\n }\n return true;\n}\n\nfunction outdatedCoordinator(endpoint: Endpoint, capability: 'overview' | 'inspection' | 'session' = 'overview'): AgentError {\n const missing = capability === 'session' ? 'dashboard agent-session history' : capability === 'inspection'\n ? 'dashboard task inspection'\n : 'finished-run history and checkout grouping';\n return new AgentError('COORDINATOR_OUTDATED', `The background coordinator (PID ${endpoint.pid}) does not support ${missing}. Stop that coordinator after active work ends, then start a new run. Reopening the dashboard does not reload coordinator code. Restarting the coordinator discards retained in-memory history.`);\n}\n\nexport async function fetchDashboardSession(\n endpoint: Endpoint,\n id: string,\n signal: AbortSignal,\n timeoutMs = 5_000,\n): Promise<DashboardSession> {\n const bounded = AbortSignal.any([signal, AbortSignal.timeout(timeoutMs)]);\n try {\n const response = await fetch(endpoint.url, {\n method: 'POST', headers: {authorization: `Bearer ${endpoint.token}`, 'content-type': 'application/json'},\n body: JSON.stringify({command: 'dashboard-session', id}), signal: bounded,\n });\n if (!response.ok) { await response.body?.cancel(); throw new Error('Rejected session'); }\n const session: unknown = JSON.parse(await response.text());\n if (isLegacyUnknownOperation(session)) throw outdatedCoordinator(endpoint, 'session');\n if (!isSession(session, id)) throw new Error('Invalid session');\n return session;\n } catch (error) {\n if (error instanceof AgentError) throw error;\n throw new AgentError('COORDINATOR_UNAVAILABLE', 'The dashboard lost its connection to the local coordinator or received invalid session history.');\n }\n}\n\nexport async function fetchDashboardSnapshot(endpoint: Endpoint, signal: AbortSignal, timeoutMs = 5_000): Promise<DashboardSnapshot> {\n const bounded = AbortSignal.any([signal, AbortSignal.timeout(timeoutMs)]);\n try {\n const response = await fetch(endpoint.url, {\n method: 'POST', headers: {authorization: `Bearer ${endpoint.token}`, 'content-type': 'application/json'},\n body: JSON.stringify({command: 'dashboard'}), signal: bounded,\n });\n if (!response.ok) { await response.body?.cancel(); throw new Error('Rejected snapshot'); }\n const snapshot: unknown = JSON.parse(await response.text());\n if (isLegacyUnknownOperation(snapshot)) throw outdatedCoordinator(endpoint);\n if (!isSnapshot(snapshot)) throw new Error('Invalid snapshot');\n if (snapshot.history !== true || snapshot.grouping !== true) {\n throw outdatedCoordinator(endpoint);\n }\n return {...snapshot, history: true, grouping: true};\n } catch (error) {\n if (error instanceof AgentError) throw error;\n throw new AgentError('COORDINATOR_UNAVAILABLE', 'The dashboard lost its connection to the local coordinator or received an invalid snapshot.');\n }\n}\n\nexport async function fetchDashboardDetail(\n endpoint: Endpoint,\n id: string,\n signal: AbortSignal,\n includePrompt = true,\n knownResponseId?: string,\n timeoutMs = 5_000,\n): Promise<DashboardDetailRecord> {\n const bounded = AbortSignal.any([signal, AbortSignal.timeout(timeoutMs)]);\n const request: Record<string, unknown> = {command: 'dashboard-detail', id};\n if (!includePrompt) request.includePrompt = false;\n if (knownResponseId !== undefined) request.knownResponseId = knownResponseId;\n try {\n const response = await fetch(endpoint.url, {\n method: 'POST', headers: {authorization: `Bearer ${endpoint.token}`, 'content-type': 'application/json'},\n body: JSON.stringify(request), signal: bounded,\n });\n if (!response.ok) { await response.body?.cancel(); throw new Error('Rejected detail'); }\n const detail: unknown = JSON.parse(await response.text());\n if (isLegacyUnknownOperation(detail)) throw outdatedCoordinator(endpoint, 'inspection');\n if (!isDetail(detail, id, includePrompt, knownResponseId)) throw new Error('Invalid detail');\n return detail;\n } catch (error) {\n if (error instanceof AgentError) throw error;\n throw new AgentError('COORDINATOR_UNAVAILABLE', 'The dashboard lost its connection to the local coordinator or received invalid task details.');\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"dashboard-client.js","sourceRoot":"","sources":["../../src/cli/dashboard-client.ts"],"names":[],"mappings":"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","sourcesContent":["import { isAbsolute } from 'node:path';\nimport { AgentError } from '../errors.js';\nimport type {\n DashboardDetail,\n DashboardRelatedTask,\n DashboardRow,\n DashboardRequest,\n DashboardSession,\n DashboardSnapshot,\n} from '../runtime/dashboard.js';\nimport type { Endpoint } from '../runtime/state.js';\nimport { CoordinatorTransport } from '../runtime/transport.js';\n\nconst harnesses = new Set(['codex', 'claude', 'fx', 'opencode', 'copilot', 'cursor', 'pending']);\nconst states = new Set(['queued', 'running', 'waiting', 'awaiting_approval', 'completed', 'failed', 'cancelled', 'interrupted']);\nconst finishedStates = new Set(['completed', 'cancelled', 'interrupted']);\nconst timestamp = (value: unknown) => value === undefined || (typeof value === 'number' && Number.isFinite(value) && value >= 0);\n\nfunction isWorkspace(value: unknown): boolean {\n if (!value || typeof value !== 'object') return false;\n const workspace = value as Record<string, unknown>;\n return typeof workspace.directory === 'string' && isAbsolute(workspace.directory)\n && (workspace.repository === undefined || (typeof workspace.repository === 'string' && isAbsolute(workspace.repository)));\n}\n\nfunction isRow(value: unknown, grouping: boolean): value is DashboardRow {\n if (!value || typeof value !== 'object') return false;\n const item = value as Record<string, unknown>;\n return typeof item.sessionId === 'string' && typeof item.taskId === 'string'\n && typeof item.harness === 'string' && harnesses.has(item.harness)\n && typeof item.state === 'string' && states.has(item.state)\n && typeof item.title === 'string' && [...item.title].length <= 120\n && (!grouping || (isWorkspace(item.workspace) && item.updatedAt !== undefined && timestamp(item.updatedAt)))\n && timestamp(item.dispatchedAt) && timestamp(item.failedAt) && timestamp(item.finishedAt)\n && (!finishedStates.has(item.state) || item.finishedAt !== undefined);\n}\n\ntype SnapshotResponse = Omit<DashboardSnapshot, 'history' | 'grouping'> & {history?: boolean; grouping?: boolean};\n\nfunction isSnapshot(value: unknown): value is SnapshotResponse {\n if (!value || typeof value !== 'object') return false;\n const snapshot = value as Record<string, unknown>;\n if (snapshot.version !== 1 || snapshot.type !== 'dashboard' || !Array.isArray(snapshot.sessions)) return false;\n if ('history' in snapshot && typeof snapshot.history !== 'boolean') return false;\n if ('grouping' in snapshot && typeof snapshot.grouping !== 'boolean') return false;\n return snapshot.sessions.every((row: unknown) => isRow(row, snapshot.grouping === true));\n}\n\nexport type DashboardRelatedRecord = DashboardRelatedTask;\nexport type DashboardDetailRecord = DashboardDetail;\n\nfunction isRelated(value: unknown): value is DashboardRelatedRecord {\n if (!value || typeof value !== 'object') return false;\n const task = value as Record<string, unknown>;\n return typeof task.taskId === 'string' && typeof task.sessionId === 'string'\n && typeof task.harness === 'string' && harnesses.has(task.harness)\n && typeof task.title === 'string' && [...task.title].length <= 120\n && typeof task.state === 'string' && states.has(task.state);\n}\n\nfunction isDetail(\n value: unknown,\n id: string,\n includePrompt: boolean,\n knownResponseId?: string,\n): value is DashboardDetailRecord {\n if (!value || typeof value !== 'object') return false;\n const detail = value as Record<string, unknown>;\n if (detail.version !== 1 || detail.type !== 'dashboard-detail'\n || !isRow(detail.task, true) || detail.task.taskId !== id\n || !Array.isArray(detail.children) || !detail.children.every(isRelated)\n || !detail.queue || typeof detail.queue !== 'object'\n || typeof detail.stopUnconfirmed !== 'boolean') return false;\n const queue = detail.queue as Record<string, unknown>;\n if (typeof queue.paused !== 'boolean' || !Array.isArray(queue.tasks) || !queue.tasks.every(isRelated)) return false;\n if (includePrompt) {\n if (typeof detail.prompt !== 'string') return false;\n } else if (Object.hasOwn(detail, 'prompt')) return false;\n if (Object.hasOwn(detail, 'error')) {\n if (!detail.error || typeof detail.error !== 'object') return false;\n const error = detail.error as Record<string, unknown>;\n if (typeof error.code !== 'string' || typeof error.message !== 'string') return false;\n }\n if (Object.hasOwn(detail, 'response')) {\n if (!detail.response || typeof detail.response !== 'object') return false;\n const response = detail.response as Record<string, unknown>;\n if (typeof response.responseId !== 'string') return false;\n const unchanged = knownResponseId !== undefined && response.responseId === knownResponseId;\n if (unchanged ? Object.hasOwn(response, 'text') : typeof response.text !== 'string') return false;\n }\n return true;\n}\n\nfunction isLegacyUnknownOperation(value: unknown): boolean {\n if (!value || typeof value !== 'object') return false;\n const response = value as Record<string, unknown>;\n if (Object.keys(response).length !== 3 || response.version !== 1 || response.type !== 'error'\n || !response.error || typeof response.error !== 'object') return false;\n const error = response.error as Record<string, unknown>;\n return Object.keys(error).length === 2\n && error.code === 'INVALID_ARGUMENT' && error.message === 'Unknown coordinator operation.';\n}\n\nfunction isSession(value: unknown, id: string): value is DashboardSession {\n if (!value || typeof value !== 'object') return false;\n const session = value as DashboardSession;\n if (session.version !== 1 || session.type !== 'dashboard-session' || session.taskId !== id\n || !isRelated(session) || !session.sessionId || !isWorkspace(session.workspace)\n || typeof session.queuePaused !== 'boolean' || !Array.isArray(session.requests) || !session.requests.length\n || !Array.isArray(session.subagents)) return false;\n const ids = new Set<string>();\n const ordinals = new Set<number>();\n let previous: DashboardRequest | undefined;\n for (const row of session.requests) {\n if (!isRow(row, true) || !row.taskId || row.sessionId !== session.sessionId || row.harness !== session.harness\n || row.workspace.directory !== session.workspace.directory || row.workspace.repository !== session.workspace.repository\n || !Number.isSafeInteger(row.ordinal) || row.ordinal < 1 || row.ordinal > session.requests.length\n || ordinals.has(row.ordinal) || ids.has(row.taskId) || typeof row.stopUnconfirmed !== 'boolean'\n || (row.stopUnconfirmed && row.state !== 'failed')\n || (['running', 'waiting', 'awaiting_approval', 'completed'].includes(row.state) && row.dispatchedAt === undefined)\n || (row.state === 'failed' && (row.failedAt === undefined || row.finishedAt === undefined))\n || (row.state === 'queued' && (row.dispatchedAt !== undefined || row.finishedAt !== undefined || row.failedAt !== undefined))\n // Failure time can precede the final state while descendant shutdown is pending.\n || (['running', 'waiting', 'awaiting_approval'].includes(row.state) && row.finishedAt !== undefined)) return false;\n if (previous && ((previous.state !== 'queued' && row.state === 'queued')\n || ((previous.state === 'queued') === (row.state === 'queued') && previous.ordinal <= row.ordinal))) return false;\n ids.add(row.taskId); ordinals.add(row.ordinal); previous = row;\n }\n if (!ids.has(id)) return false;\n const children = new Set<string>();\n for (const child of session.subagents) {\n if (!isRelated(child) || !child.taskId || !child.sessionId || child.sessionId === session.sessionId\n || ids.has(child.taskId) || children.has(child.sessionId)) return false;\n ids.add(child.taskId); children.add(child.sessionId);\n }\n return true;\n}\n\nfunction outdatedCoordinator(endpoint: Endpoint, capability: 'overview' | 'inspection' | 'session' = 'overview'): AgentError {\n const missing = capability === 'session' ? 'dashboard agent-session history' : capability === 'inspection'\n ? 'dashboard task inspection'\n : 'finished-run history and checkout grouping';\n return new AgentError('COORDINATOR_OUTDATED', `The background coordinator (PID ${endpoint.pid}) does not support ${missing}. Stop that coordinator after active work ends, then start a new run. Reopening the dashboard does not reload coordinator code. Restarting the coordinator discards retained in-memory history.`);\n}\n\nexport async function fetchDashboardSession(\n endpoint: Endpoint,\n id: string,\n signal: AbortSignal,\n timeoutMs = 5_000,\n): Promise<DashboardSession> {\n const bounded = AbortSignal.any([signal, AbortSignal.timeout(timeoutMs)]);\n try {\n const session = await dashboardRecord(endpoint,{command:'dashboard-session',id},bounded);\n if (isLegacyUnknownOperation(session)) throw outdatedCoordinator(endpoint, 'session');\n if (!isSession(session, id)) throw new Error('Invalid session');\n return session;\n } catch (error) {\n if (error instanceof AgentError && error.code !== 'OBSERVATION_CLOSED') throw error;\n throw new AgentError('COORDINATOR_UNAVAILABLE', 'The dashboard lost its connection to the local coordinator or received invalid session history.');\n }\n}\n\nexport async function fetchDashboardSnapshot(endpoint: Endpoint, signal: AbortSignal, timeoutMs = 5_000): Promise<DashboardSnapshot> {\n const bounded = AbortSignal.any([signal, AbortSignal.timeout(timeoutMs)]);\n try {\n const snapshot = await dashboardRecord(endpoint,{command:'dashboard'},bounded);\n if (isLegacyUnknownOperation(snapshot)) throw outdatedCoordinator(endpoint);\n if (!isSnapshot(snapshot)) throw new Error('Invalid snapshot');\n if (snapshot.history !== true || snapshot.grouping !== true) {\n throw outdatedCoordinator(endpoint);\n }\n return {...snapshot, history: true, grouping: true};\n } catch (error) {\n if (error instanceof AgentError && error.code !== 'OBSERVATION_CLOSED') throw error;\n throw new AgentError('COORDINATOR_UNAVAILABLE', 'The dashboard lost its connection to the local coordinator or received an invalid snapshot.');\n }\n}\n\nexport async function fetchDashboardDetail(\n endpoint: Endpoint,\n id: string,\n signal: AbortSignal,\n includePrompt = true,\n knownResponseId?: string,\n timeoutMs = 5_000,\n): Promise<DashboardDetailRecord> {\n const bounded = AbortSignal.any([signal, AbortSignal.timeout(timeoutMs)]);\n const request: Record<string, unknown> = {command: 'dashboard-detail', id};\n if (!includePrompt) request.includePrompt = false;\n if (knownResponseId !== undefined) request.knownResponseId = knownResponseId;\n try {\n const detail = await dashboardRecord(endpoint,request,bounded);\n if (isLegacyUnknownOperation(detail)) throw outdatedCoordinator(endpoint, 'inspection');\n if (!isDetail(detail, id, includePrompt, knownResponseId)) throw new Error('Invalid detail');\n return detail;\n } catch (error) {\n if (error instanceof AgentError && error.code !== 'OBSERVATION_CLOSED') throw error;\n throw new AgentError('COORDINATOR_UNAVAILABLE', 'The dashboard lost its connection to the local coordinator or received invalid task details.');\n }\n}\n\nasync function dashboardRecord(endpoint:Endpoint,body:unknown,signal:AbortSignal):Promise<unknown> {\n const transport=new CoordinatorTransport(endpoint);\n let value:unknown;\n let count=0;\n for await (const record of transport.records(body,signal,{allowFinalRecord:true})) { value=record; count++; }\n if (count !== 1) throw new Error('Invalid dashboard response record count.');\n return value;\n}\n"]}
|
package/dist/cli/main.js
CHANGED
|
@@ -3,12 +3,13 @@ import { readFile, realpath, stat } from 'node:fs/promises';
|
|
|
3
3
|
import { parseArgs } from './args.js';
|
|
4
4
|
import { renderHelp } from './help.js';
|
|
5
5
|
import { renderText, exitCode } from './output.js';
|
|
6
|
-
import { loadCatalog, loadDeclaredChildren } from './catalog.js';
|
|
7
6
|
import { AgentError, errorInfo } from '../errors.js';
|
|
8
7
|
import { connect, request } from '../runtime/client.js';
|
|
9
8
|
import { harnessReference } from '../runtime/definition.js';
|
|
10
|
-
import { checkReadiness } from '../runtime/readiness.js';
|
|
11
9
|
import { quoteDiagnosticPath } from '../config/access-provenance.js';
|
|
10
|
+
import { checkAgent, listAgents } from '../runtime/catalog.js';
|
|
11
|
+
import { captureReference, checkCapturedExecution } from '../runtime/capture.js';
|
|
12
|
+
import { stateDirectory } from '../runtime/state.js';
|
|
12
13
|
const valueOptions = new Set(['cwd', 'prompt', 'prompt-file', 'content', 'content-file', 'model', 'effort', 'delivery', 'after']);
|
|
13
14
|
function parseErrorFormat(argv) {
|
|
14
15
|
for (let index = 1; index < argv.length; index++) {
|
|
@@ -48,6 +49,7 @@ async function main() {
|
|
|
48
49
|
}
|
|
49
50
|
const parentToken = process.env.AGENT_PARENT_TOKEN;
|
|
50
51
|
let reference;
|
|
52
|
+
let managedEndpoint;
|
|
51
53
|
if (args.command === 'list' || args.command === 'run' || args.command === 'check') {
|
|
52
54
|
const requestedCwd = args.cwd;
|
|
53
55
|
try {
|
|
@@ -58,58 +60,50 @@ async function main() {
|
|
|
58
60
|
catch {
|
|
59
61
|
throw new AgentError('INVALID_CONFIG', `Execution directory is not accessible: ${quoteDiagnosticPath(requestedCwd)}`);
|
|
60
62
|
}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
if (
|
|
67
|
-
const
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
throw new AgentError(record.error.code, record.error.message);
|
|
71
|
-
parent = record;
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
if ((args.command === 'run' || args.command === 'check') && args.id.startsWith('subagent:')) {
|
|
75
|
-
const name = args.id.slice(9);
|
|
76
|
-
if (!parent || !('file' in parent.reference))
|
|
77
|
-
throw new AgentError('INVALID_PARENT', 'This subagent is not available in the active parent context.');
|
|
78
|
-
const children = await loadDeclaredChildren(args.cwd, parent.reference);
|
|
79
|
-
if (!children.some(child => child.name === name))
|
|
80
|
-
throw new AgentError('INVALID_PARENT', 'This subagent is not available in the active parent context.');
|
|
81
|
-
reference = { file: parent.reference.file, subagents: [...parent.reference.subagents, name] };
|
|
63
|
+
const environment = cliEnvironment();
|
|
64
|
+
if (!parentToken && args.id?.startsWith('subagent:'))
|
|
65
|
+
throw new AgentError('INVALID_PARENT', 'This subagent is not available in the active parent context.');
|
|
66
|
+
if (parentToken) {
|
|
67
|
+
managedEndpoint = await connect(false);
|
|
68
|
+
if (args.command === 'list') {
|
|
69
|
+
for await (const record of request(managedEndpoint, { command: 'parent-catalog', parentToken, cwd: args.cwd, env: environment }))
|
|
70
|
+
emit(record);
|
|
71
|
+
return;
|
|
82
72
|
}
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
{ id: 'fx', name: 'fx', description: 'Run the native fx harness through AI Gateway.', scope: 'harness' },
|
|
90
|
-
{ id: 'opencode', name: 'opencode', description: 'Run the native OpenCode harness through AI Gateway.', scope: 'harness' },
|
|
91
|
-
{ id: 'copilot', name: 'copilot', description: 'Run the native GitHub Copilot harness through AI Gateway.', scope: 'harness' },
|
|
92
|
-
{ id: 'cursor', name: 'cursor', description: 'Run the native Cursor harness.', scope: 'harness' },
|
|
93
|
-
...entries.map(({ id, name, description, scope }) => ({ id, name, description, scope })),
|
|
94
|
-
...children.map(({ name, description }) => ({ id: `subagent:${name}`, name, description, scope: 'subagent' })),
|
|
95
|
-
] });
|
|
96
|
-
return;
|
|
97
|
-
}
|
|
98
|
-
const matches = entries.filter(entry => entry.id === args.id || entry.name === args.id);
|
|
99
|
-
if (matches.length !== 1)
|
|
100
|
-
throw new AgentError(matches.length ? 'AMBIGUOUS_AGENT' : 'UNKNOWN_AGENT', matches.length ? `Choose ${matches.map(entry => entry.id).join(' or ')}.` : 'Agent not found. Use subharness list.');
|
|
101
|
-
reference = { file: matches[0].file, subagents: [] };
|
|
73
|
+
if (!args.id.startsWith('subagent:'))
|
|
74
|
+
throw new AgentError('INVALID_PARENT', 'This subagent is not available in the active parent context.');
|
|
75
|
+
if (args.command === 'check') {
|
|
76
|
+
await requireAcknowledgement(managedEndpoint, { command: 'parent-check', agent: args.id, cwd: args.cwd, env: environment, parentToken });
|
|
77
|
+
emit({ version: 1, type: 'check', target: args.id, ready: true });
|
|
78
|
+
return;
|
|
102
79
|
}
|
|
103
80
|
}
|
|
81
|
+
else if (args.command === 'list') {
|
|
82
|
+
const catalog = await listAgents({ cwd: args.cwd, env: environment });
|
|
83
|
+
emit({ version: 1, type: 'agents', agents: [...catalog.items] });
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
else if (args.harness) {
|
|
87
|
+
reference = harnessReference(args.harness, args.model, args.effort);
|
|
88
|
+
}
|
|
89
|
+
else if (args.command === 'check') {
|
|
90
|
+
await checkAgent(args.id, { cwd: args.cwd, env: environment });
|
|
91
|
+
emit({ version: 1, type: 'check', target: args.id, ready: true });
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
104
94
|
}
|
|
105
95
|
if (args.command === 'check') {
|
|
106
|
-
|
|
96
|
+
const input = { cwd: args.cwd, env: cliEnvironment() };
|
|
97
|
+
const captured = await captureReference(reference, input);
|
|
98
|
+
await checkCapturedExecution(captured, input);
|
|
107
99
|
emit({ version: 1, type: 'check', target: args.id, ready: true });
|
|
108
100
|
return;
|
|
109
101
|
}
|
|
110
|
-
const endpoint = await connect(args.command === 'run');
|
|
102
|
+
const endpoint = managedEndpoint ?? await connect(args.command === 'run');
|
|
111
103
|
const body = args.command === 'run'
|
|
112
|
-
?
|
|
104
|
+
? parentToken
|
|
105
|
+
? { command: 'parent-run', agent: args.id, cwd: args.cwd, env: cliEnvironment(), prompt: args.prompt, parentToken, detach: args.detach }
|
|
106
|
+
: { command: 'cli-run', ...(reference ? { reference } : { agent: args.id }), cwd: args.cwd, env: cliEnvironment(), prompt: args.prompt, detach: args.detach }
|
|
113
107
|
: { ...args, parentToken };
|
|
114
108
|
for await (const record of request(endpoint, body))
|
|
115
109
|
emit(record);
|
|
@@ -118,5 +112,19 @@ async function main() {
|
|
|
118
112
|
emit({ version: 1, type: 'error', error: errorInfo(error) });
|
|
119
113
|
}
|
|
120
114
|
}
|
|
115
|
+
function cliEnvironment() {
|
|
116
|
+
const { AGENT_PARENT_TOKEN: _parent, AGENT_CLI_PATH: _launcher, ...environment } = process.env;
|
|
117
|
+
return { ...environment, AGENT_STATE_DIR: stateDirectory() };
|
|
118
|
+
}
|
|
119
|
+
async function requireAcknowledgement(endpoint, body) {
|
|
120
|
+
let acknowledged = false;
|
|
121
|
+
for await (const record of request(endpoint, body)) {
|
|
122
|
+
if (record.type === 'error')
|
|
123
|
+
throw new AgentError(record.error.code, record.error.message);
|
|
124
|
+
acknowledged = true;
|
|
125
|
+
}
|
|
126
|
+
if (!acknowledged)
|
|
127
|
+
throw new AgentError('COORDINATOR_UNAVAILABLE', 'The coordinator returned no acknowledgement.');
|
|
128
|
+
}
|
|
121
129
|
await main();
|
|
122
130
|
//# sourceMappingURL=main.js.map
|
package/dist/cli/main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":"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","sourcesContent":["#!/usr/bin/env node\nimport { readFile, realpath, stat } from 'node:fs/promises';\nimport { parseArgs } from './args.js';\nimport { renderHelp } from './help.js';\nimport { renderText, exitCode, type OutputRecord } from './output.js';\nimport { loadCatalog, loadDeclaredChildren } from './catalog.js';\nimport { AgentError, errorInfo } from '../errors.js';\nimport { connect, request } from '../runtime/client.js';\nimport type { ExecutionReference } from '../runtime/types.js';\nimport { harnessReference } from '../runtime/definition.js';\nimport { checkReadiness } from '../runtime/readiness.js';\nimport { quoteDiagnosticPath } from '../config/access-provenance.js';\n\nconst valueOptions = new Set(['cwd', 'prompt', 'prompt-file', 'content', 'content-file', 'model', 'effort', 'delivery', 'after']);\n\nfunction parseErrorFormat(argv: string[]): 'text' | 'jsonl' {\n for (let index = 1; index < argv.length; index++) {\n const argument = argv[index]!;\n if (argument === '--') break;\n if (argument === '--format') return argv[index + 1] === 'jsonl' ? 'jsonl' : 'text';\n if (argument.startsWith('--') && valueOptions.has(argument.slice(2))) index++;\n }\n return 'text';\n}\n\nasync function main() {\n let format = process.argv[2] === 'dashboard' ? 'text' : parseErrorFormat(process.argv.slice(2));\n const emit = (record: OutputRecord) => {\n const text = format === 'jsonl' ? JSON.stringify(record) : renderText(record);\n (record.type === 'error' && format === 'text' ? process.stderr : process.stdout).write(text + '\\n');\n process.exitCode = exitCode(record);\n };\n try {\n const args = await parseArgs(process.argv.slice(2)); format = args.format;\n if (args.command === 'help') { process.stdout.write(renderHelp(args.harness, args.helpCommand)); return; }\n if (args.command === 'version') {\n const manifest = JSON.parse(await readFile(new URL('../../package.json', import.meta.url), 'utf8')) as { version: string };\n process.stdout.write(`${manifest.version}\\n`);\n return;\n }\n if (args.command === 'dashboard') {\n const { runDashboard } = await import('./dashboard.js');\n process.exitCode = await runDashboard();\n return;\n }\n const parentToken = process.env.AGENT_PARENT_TOKEN;\n let reference: ExecutionReference | undefined;\n if (args.command === 'list' || args.command === 'run' || args.command === 'check') {\n const requestedCwd = args.cwd;\n try {\n args.cwd = await realpath(requestedCwd);\n if (!(await stat(args.cwd)).isDirectory()) throw new Error();\n } catch {\n throw new AgentError('INVALID_CONFIG', `Execution directory is not accessible: ${quoteDiagnosticPath(requestedCwd)}`);\n }\n if ((args.command === 'run' || args.command === 'check') && args.harness) {\n reference = harnessReference(args.harness, args.model, args.effort);\n } else {\n let parent: {reference:ExecutionReference}|undefined;\n if (parentToken) {\n const endpoint = await connect(false);\n for await (const record of request(endpoint,{command:'parent',parentToken})) {\n if (record.type === 'error') throw new AgentError((record.error as any).code,(record.error as any).message);\n parent = record as unknown as {reference:ExecutionReference};\n }\n }\n if ((args.command === 'run' || args.command === 'check') && args.id!.startsWith('subagent:')) {\n const name = args.id!.slice(9);\n if (!parent || !('file' in parent.reference)) throw new AgentError('INVALID_PARENT','This subagent is not available in the active parent context.');\n const children = await loadDeclaredChildren(args.cwd, parent.reference);\n if (!children.some(child => child.name === name)) throw new AgentError('INVALID_PARENT','This subagent is not available in the active parent context.');\n reference = {file:parent.reference.file,subagents:[...parent.reference.subagents,name]};\n } else {\n const { entries, children } = await loadCatalog(args.cwd, parent?.reference);\n if (args.command === 'list') {\n emit({version:1,type:'agents',agents:[\n {id:'codex',name:'codex',description:'Run the native Codex harness.',scope:'harness'},\n {id:'claude',name:'claude',description:'Run the native Claude Code harness.',scope:'harness'},\n {id:'fx',name:'fx',description:'Run the native fx harness through AI Gateway.',scope:'harness'},\n {id:'opencode',name:'opencode',description:'Run the native OpenCode harness through AI Gateway.',scope:'harness'},\n {id:'copilot',name:'copilot',description:'Run the native GitHub Copilot harness through AI Gateway.',scope:'harness'},\n {id:'cursor',name:'cursor',description:'Run the native Cursor harness.',scope:'harness'},\n ...entries.map(({id,name,description,scope})=>({id,name,description,scope})),\n ...children.map(({name,description})=>({id:`subagent:${name}`,name,description,scope:'subagent'})),\n ]}); return;\n }\n const matches = entries.filter(entry=>entry.id===args.id || entry.name===args.id);\n if (matches.length !== 1) throw new AgentError(matches.length ? 'AMBIGUOUS_AGENT':'UNKNOWN_AGENT',matches.length ? `Choose ${matches.map(entry=>entry.id).join(' or ')}.` : 'Agent not found. Use subharness list.');\n reference = {file:matches[0]!.file,subagents:[]};\n }\n }\n }\n if (args.command === 'check') {\n await checkReadiness(reference!, args.cwd, process.env);\n emit({version: 1, type: 'check', target: args.id!, ready: true});\n return;\n }\n const endpoint = await connect(args.command === 'run');\n const body = args.command === 'run'\n ? {command:'run',input:{reference,cwd:args.cwd,env:process.env,prompt:args.prompt,parentToken},detach:args.detach}\n : {...args,parentToken};\n for await (const record of request(endpoint,body)) emit(record);\n } catch (error) { emit({version:1,type:'error',error:errorInfo(error)}); }\n}\nawait main();\n"]}
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":"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","sourcesContent":["#!/usr/bin/env node\nimport { readFile, realpath, stat } from 'node:fs/promises';\nimport { parseArgs } from './args.js';\nimport { renderHelp } from './help.js';\nimport { renderText, exitCode, type OutputRecord } from './output.js';\nimport { AgentError, errorInfo } from '../errors.js';\nimport { connect, request } from '../runtime/client.js';\nimport type { ExecutionReference } from '../runtime/types.js';\nimport { harnessReference } from '../runtime/definition.js';\nimport { quoteDiagnosticPath } from '../config/access-provenance.js';\nimport { checkAgent, listAgents } from '../runtime/catalog.js';\nimport { captureReference, checkCapturedExecution } from '../runtime/capture.js';\nimport { stateDirectory } from '../runtime/state.js';\n\nconst valueOptions = new Set(['cwd', 'prompt', 'prompt-file', 'content', 'content-file', 'model', 'effort', 'delivery', 'after']);\n\nfunction parseErrorFormat(argv: string[]): 'text' | 'jsonl' {\n for (let index = 1; index < argv.length; index++) {\n const argument = argv[index]!;\n if (argument === '--') break;\n if (argument === '--format') return argv[index + 1] === 'jsonl' ? 'jsonl' : 'text';\n if (argument.startsWith('--') && valueOptions.has(argument.slice(2))) index++;\n }\n return 'text';\n}\n\nasync function main() {\n let format = process.argv[2] === 'dashboard' ? 'text' : parseErrorFormat(process.argv.slice(2));\n const emit = (record: OutputRecord) => {\n const text = format === 'jsonl' ? JSON.stringify(record) : renderText(record);\n (record.type === 'error' && format === 'text' ? process.stderr : process.stdout).write(text + '\\n');\n process.exitCode = exitCode(record);\n };\n try {\n const args = await parseArgs(process.argv.slice(2)); format = args.format;\n if (args.command === 'help') { process.stdout.write(renderHelp(args.harness, args.helpCommand)); return; }\n if (args.command === 'version') {\n const manifest = JSON.parse(await readFile(new URL('../../package.json', import.meta.url), 'utf8')) as { version: string };\n process.stdout.write(`${manifest.version}\\n`);\n return;\n }\n if (args.command === 'dashboard') {\n const { runDashboard } = await import('./dashboard.js');\n process.exitCode = await runDashboard();\n return;\n }\n const parentToken = process.env.AGENT_PARENT_TOKEN;\n let reference: ExecutionReference | undefined;\n let managedEndpoint: Awaited<ReturnType<typeof connect>> | undefined;\n if (args.command === 'list' || args.command === 'run' || args.command === 'check') {\n const requestedCwd = args.cwd;\n try {\n args.cwd = await realpath(requestedCwd);\n if (!(await stat(args.cwd)).isDirectory()) throw new Error();\n } catch {\n throw new AgentError('INVALID_CONFIG', `Execution directory is not accessible: ${quoteDiagnosticPath(requestedCwd)}`);\n }\n const environment=cliEnvironment();\n if (!parentToken && args.id?.startsWith('subagent:'))\n throw new AgentError('INVALID_PARENT','This subagent is not available in the active parent context.');\n if (parentToken) {\n managedEndpoint=await connect(false);\n if (args.command === 'list') {\n for await (const record of request(managedEndpoint,{command:'parent-catalog',parentToken,cwd:args.cwd,env:environment})) emit(record);\n return;\n }\n if (!args.id!.startsWith('subagent:'))\n throw new AgentError('INVALID_PARENT','This subagent is not available in the active parent context.');\n if (args.command === 'check') {\n await requireAcknowledgement(managedEndpoint,{command:'parent-check',agent:args.id,cwd:args.cwd,env:environment,parentToken});\n emit({version:1,type:'check',target:args.id!,ready:true}); return;\n }\n } else if (args.command === 'list') {\n const catalog=await listAgents({cwd:args.cwd,env:environment});\n emit({version:1,type:'agents',agents:[...catalog.items]}); return;\n } else if (args.harness) {\n reference=harnessReference(args.harness,args.model,args.effort);\n } else if (args.command === 'check') {\n await checkAgent(args.id!,{cwd:args.cwd,env:environment});\n emit({version:1,type:'check',target:args.id!,ready:true}); return;\n }\n }\n if (args.command === 'check') {\n const input={cwd:args.cwd,env:cliEnvironment()};\n const captured=await captureReference(reference!,input);\n await checkCapturedExecution(captured,input);\n emit({version: 1, type: 'check', target: args.id!, ready: true});\n return;\n }\n const endpoint = managedEndpoint ?? await connect(args.command === 'run');\n const body = args.command === 'run'\n ? parentToken\n ? {command:'parent-run',agent:args.id,cwd:args.cwd,env:cliEnvironment(),prompt:args.prompt,parentToken,detach:args.detach}\n : {command:'cli-run',...(reference ? {reference} : {agent:args.id}),cwd:args.cwd,env:cliEnvironment(),prompt:args.prompt,detach:args.detach}\n : {...args,parentToken};\n for await (const record of request(endpoint,body)) emit(record);\n } catch (error) { emit({version:1,type:'error',error:errorInfo(error)}); }\n}\n\nfunction cliEnvironment():NodeJS.ProcessEnv {\n const {AGENT_PARENT_TOKEN:_parent,AGENT_CLI_PATH:_launcher,...environment}=process.env;\n return {...environment,AGENT_STATE_DIR:stateDirectory()};\n}\n\nasync function requireAcknowledgement(endpoint:Awaited<ReturnType<typeof connect>>,body:unknown):Promise<void> {\n let acknowledged=false;\n for await(const record of request(endpoint,body)) {\n if(record.type==='error')throw new AgentError((record.error as any).code,(record.error as any).message);\n acknowledged=true;\n }\n if(!acknowledged)throw new AgentError('COORDINATOR_UNAVAILABLE','The coordinator returned no acknowledgement.');\n}\nawait main();\n"]}
|
package/dist/errors.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ export declare class AgentError extends Error {
|
|
|
3
3
|
constructor(code: string, message: string);
|
|
4
4
|
}
|
|
5
5
|
export type ErrorInfo = {
|
|
6
|
-
code: string;
|
|
7
|
-
message: string;
|
|
6
|
+
readonly code: string;
|
|
7
|
+
readonly message: string;
|
|
8
8
|
};
|
|
9
9
|
export declare function errorInfo(error: unknown): ErrorInfo;
|
package/dist/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,UAAW,SAAQ,KAAK;IACP,IAAI;IAAhC,YAA4B,IAAY,EAAE,OAAe;QACvD,KAAK,CAAC,OAAO,CAAC,CAAC;oBADW,IAAI;QAE9B,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;IAC3B,CAAC;CACF;AAID,MAAM,UAAU,SAAS,CAAC,KAAc;IACtC,OAAO,KAAK,YAAY,UAAU;QAChC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE;QAC9C,CAAC,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;AAClG,CAAC","sourcesContent":["export class AgentError extends Error {\n constructor(public readonly code: string, message: string) {\n super(message);\n this.name = \"AgentError\";\n }\n}\n\nexport type ErrorInfo = { code: string; message: string };\n\nexport function errorInfo(error: unknown): ErrorInfo {\n return error instanceof AgentError\n ? { code: error.code, message: error.message }\n : { code: \"INTERNAL_ERROR\", message: error instanceof Error ? error.message : String(error) };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,UAAW,SAAQ,KAAK;IACP,IAAI;IAAhC,YAA4B,IAAY,EAAE,OAAe;QACvD,KAAK,CAAC,OAAO,CAAC,CAAC;oBADW,IAAI;QAE9B,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;IAC3B,CAAC;CACF;AAID,MAAM,UAAU,SAAS,CAAC,KAAc;IACtC,OAAO,KAAK,YAAY,UAAU;QAChC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE;QAC9C,CAAC,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;AAClG,CAAC","sourcesContent":["export class AgentError extends Error {\n constructor(public readonly code: string, message: string) {\n super(message);\n this.name = \"AgentError\";\n }\n}\n\nexport type ErrorInfo = { readonly code: string; readonly message: string };\n\nexport function errorInfo(error: unknown): ErrorInfo {\n return error instanceof AgentError\n ? { code: error.code, message: error.message }\n : { code: \"INTERNAL_ERROR\", message: error instanceof Error ? error.message : String(error) };\n}\n"]}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,10 @@
|
|
|
1
1
|
export { agent, codex, claudeCode, fx, opencode, copilot, cursor } from "./sdk/definitions.js";
|
|
2
|
+
export { createRunner } from "./sdk/execution.js";
|
|
3
|
+
export { connect } from "./sdk/connected.js";
|
|
2
4
|
export { tool, toolResult } from "./sdk/tools.js";
|
|
5
|
+
export { AgentError } from "./errors.js";
|
|
6
|
+
export type { ErrorInfo } from "./errors.js";
|
|
7
|
+
export type { AccessConnection, AccessSelection, ApprovalAction, ApprovalGrant, ApprovalRequest, ApprovalResponse, ApprovalScope, CompleteResponse, Delivery, Page, PageOptions, Runner, RunnerOptions, PromptReceipt, SessionHandle, SessionSnapshot, SessionSummary, TaskHandle, TaskDetails, TaskResult, TaskSnapshot, TaskState, TaskSummary, TerminalState, WorkspaceInfo, } from "./sdk/execution.js";
|
|
3
8
|
export type { ToolContent, ToolResult } from "./sdk/tools.js";
|
|
9
|
+
export type { AgentSummary, Client, ConnectedSessionOptions, ConnectOptions } from "./sdk/connected.js";
|
|
4
10
|
export type { AgentDefinition, ClaudeCodeConfig, ClaudeCodeOptions, CodexConfig, CodexOptions, FxConfig, FxOptions, OpencodeConfig, OpencodeOptions, CopilotConfig, CopilotOptions, CursorConfig, CursorOptions, HarnessConfig, HarnessKind, ToolDefinition, } from "./sdk/types.js";
|
package/dist/index.js
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
1
|
export { agent, codex, claudeCode, fx, opencode, copilot, cursor } from "./sdk/definitions.js";
|
|
2
|
+
export { createRunner } from "./sdk/execution.js";
|
|
3
|
+
export { connect } from "./sdk/connected.js";
|
|
2
4
|
export { tool, toolResult } from "./sdk/tools.js";
|
|
5
|
+
export { AgentError } from "./errors.js";
|
|
3
6
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC/F,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC","sourcesContent":["export { agent, codex, claudeCode, fx, opencode, copilot, cursor } from \"./sdk/definitions.js\";\nexport { tool, toolResult } from \"./sdk/tools.js\";\nexport type { ToolContent, ToolResult } from \"./sdk/tools.js\";\nexport type {\n AgentDefinition,\n ClaudeCodeConfig,\n ClaudeCodeOptions,\n CodexConfig,\n CodexOptions,\n FxConfig,\n FxOptions,\n OpencodeConfig,\n OpencodeOptions,\n CopilotConfig,\n CopilotOptions,\n CursorConfig,\n CursorOptions,\n HarnessConfig,\n HarnessKind,\n ToolDefinition,\n} from \"./sdk/types.js\";\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC/F,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC","sourcesContent":["export { agent, codex, claudeCode, fx, opencode, copilot, cursor } from \"./sdk/definitions.js\";\nexport { createRunner } from \"./sdk/execution.js\";\nexport { connect } from \"./sdk/connected.js\";\nexport { tool, toolResult } from \"./sdk/tools.js\";\nexport { AgentError } from \"./errors.js\";\nexport type { ErrorInfo } from \"./errors.js\";\nexport type {\n AccessConnection,\n AccessSelection,\n ApprovalAction,\n ApprovalGrant,\n ApprovalRequest,\n ApprovalResponse,\n ApprovalScope,\n CompleteResponse,\n Delivery,\n Page,\n PageOptions,\n Runner,\n RunnerOptions,\n PromptReceipt,\n SessionHandle,\n SessionSnapshot,\n SessionSummary,\n TaskHandle,\n TaskDetails,\n TaskResult,\n TaskSnapshot,\n TaskState,\n TaskSummary,\n TerminalState,\n WorkspaceInfo,\n} from \"./sdk/execution.js\";\nexport type { ToolContent, ToolResult } from \"./sdk/tools.js\";\nexport type { AgentSummary, Client, ConnectedSessionOptions, ConnectOptions } from \"./sdk/connected.js\";\nexport type {\n AgentDefinition,\n ClaudeCodeConfig,\n ClaudeCodeOptions,\n CodexConfig,\n CodexOptions,\n FxConfig,\n FxOptions,\n OpencodeConfig,\n OpencodeOptions,\n CopilotConfig,\n CopilotOptions,\n CursorConfig,\n CursorOptions,\n HarnessConfig,\n HarnessKind,\n ToolDefinition,\n} from \"./sdk/types.js\";\n"]}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { ApprovalContent, NativeApprovalRequest } from '../approvals/types.js';
|
|
2
2
|
import type { ApprovalRequest } from './types.js';
|
|
3
|
+
import type { SdkApprovalRequest } from './task-data.js';
|
|
3
4
|
type RequestIdentity = Pick<ApprovalRequest, 'requestId' | 'taskId' | 'sessionId'>;
|
|
4
5
|
/** Retains pending requests and a bounded settlement-ordered outcome history. */
|
|
5
6
|
export declare class ApprovalRegistry {
|
|
@@ -17,6 +18,14 @@ export declare class ApprovalRegistry {
|
|
|
17
18
|
sessionId: string;
|
|
18
19
|
};
|
|
19
20
|
pendingFor(taskId: string): ApprovalRequest[];
|
|
21
|
+
sdkPendingFor(taskId: string): SdkApprovalRequest[];
|
|
22
|
+
respondSdk(id: string, response: unknown): {
|
|
23
|
+
version: 1;
|
|
24
|
+
type: 'approval_answered';
|
|
25
|
+
requestId: string;
|
|
26
|
+
taskId: string;
|
|
27
|
+
sessionId: string;
|
|
28
|
+
};
|
|
20
29
|
retireTask(taskId: string): void;
|
|
21
30
|
close(): void;
|
|
22
31
|
private retire;
|
|
@@ -38,9 +38,22 @@ export class ApprovalRegistry {
|
|
|
38
38
|
const snapshot = { ...copy, requestId, taskId, sessionId };
|
|
39
39
|
if (Buffer.byteLength(JSON.stringify(snapshot)) > 64 * 1024)
|
|
40
40
|
throw new AgentError('INPUT_REQUIRED', 'The native permission request cannot be represented within 64 KiB.');
|
|
41
|
+
let sdk;
|
|
42
|
+
let actions;
|
|
43
|
+
try {
|
|
44
|
+
const normalized = normalize(snapshot);
|
|
45
|
+
sdk = normalized.request;
|
|
46
|
+
actions = normalized.actions;
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
if (!(error instanceof AgentError) || error.code !== 'INPUT_REQUIRED')
|
|
50
|
+
throw error;
|
|
51
|
+
sdk = error;
|
|
52
|
+
actions = new Map();
|
|
53
|
+
}
|
|
41
54
|
const answer = new Promise((resolve, reject) => {
|
|
42
55
|
const abort = () => this.retire(requestId);
|
|
43
|
-
this.pending.set(requestId, { outcome: 'pending', request: snapshot,
|
|
56
|
+
this.pending.set(requestId, { outcome: 'pending', request: snapshot, sdk, actions,
|
|
44
57
|
continuation: { resolve, reject, cleanup: () => signal.removeEventListener('abort', abort) } });
|
|
45
58
|
signal.addEventListener('abort', abort, { once: true });
|
|
46
59
|
});
|
|
@@ -65,16 +78,24 @@ export class ApprovalRegistry {
|
|
|
65
78
|
if (settled.outcome === 'withdrawn')
|
|
66
79
|
throw expired();
|
|
67
80
|
this.validateBoundedContent(content);
|
|
68
|
-
|
|
81
|
+
let answer;
|
|
82
|
+
try {
|
|
83
|
+
answer = canonicalBySchema(settled.schema, validateApprovalContent(settled.schema, content));
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
invalidResponse();
|
|
87
|
+
}
|
|
88
|
+
if (!isDeepStrictEqual(settled.answer, answer))
|
|
69
89
|
throw new AgentError('INVALID_APPROVAL_RESPONSE', 'This permission request already has a different answer.');
|
|
70
90
|
return this.receipt(settled.identity);
|
|
71
91
|
}
|
|
72
92
|
this.validateBoundedContent(content);
|
|
73
|
-
const answer = validateApprovalContent(pending.request.requestedSchema, content);
|
|
93
|
+
const answer = canonicalBySchema(pending.request.requestedSchema, validateApprovalContent(pending.request.requestedSchema, content));
|
|
74
94
|
const requestIdentity = identity(pending.request);
|
|
75
95
|
this.pending.delete(id);
|
|
76
96
|
pending.continuation.cleanup();
|
|
77
|
-
this.retain({ outcome: 'answered', identity: requestIdentity, answer: structuredClone(answer)
|
|
97
|
+
this.retain({ outcome: 'answered', identity: requestIdentity, answer: structuredClone(answer),
|
|
98
|
+
schema: structuredClone(pending.request.requestedSchema), actions: pending.actions });
|
|
78
99
|
pending.continuation.resolve(answer);
|
|
79
100
|
this.changed(requestIdentity.taskId);
|
|
80
101
|
return this.receipt(requestIdentity);
|
|
@@ -83,6 +104,41 @@ export class ApprovalRegistry {
|
|
|
83
104
|
return [...this.pending.values()].filter(entry => entry.request.taskId === taskId)
|
|
84
105
|
.map(entry => structuredClone(entry.request));
|
|
85
106
|
}
|
|
107
|
+
sdkPendingFor(taskId) {
|
|
108
|
+
return [...this.pending.values()].filter(entry => entry.request.taskId === taskId)
|
|
109
|
+
.map(entry => {
|
|
110
|
+
if (entry.sdk instanceof AgentError)
|
|
111
|
+
throw new AgentError(entry.sdk.code, entry.sdk.message);
|
|
112
|
+
return structuredClone(entry.sdk);
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
respondSdk(id, response) {
|
|
116
|
+
const entry = this.pending.get(id) ?? this.settled.get(id);
|
|
117
|
+
if (!entry)
|
|
118
|
+
throw unknown();
|
|
119
|
+
if (entry.outcome === 'withdrawn')
|
|
120
|
+
throw expired();
|
|
121
|
+
this.validateBoundedContent(response);
|
|
122
|
+
if (!plain(response) || Reflect.ownKeys(response).some(key => typeof key !== 'string' || !['actionId', 'grants'].includes(key))
|
|
123
|
+
|| typeof response.actionId !== 'string')
|
|
124
|
+
invalidResponse();
|
|
125
|
+
const mapping = entry.actions.get(response.actionId);
|
|
126
|
+
if (!mapping)
|
|
127
|
+
invalidResponse();
|
|
128
|
+
const submitted = response;
|
|
129
|
+
let native = structuredClone(mapping.native);
|
|
130
|
+
if (mapping.grants) {
|
|
131
|
+
if (mapping.action.decision !== 'allow' || !Array.isArray(submitted.grants)
|
|
132
|
+
|| submitted.grants.some(value => typeof value !== 'string') || new Set(submitted.grants).size !== submitted.grants.length
|
|
133
|
+
|| submitted.grants.some(value => !mapping.grants.includes(value)))
|
|
134
|
+
invalidResponse();
|
|
135
|
+
const selected = new Set(submitted.grants);
|
|
136
|
+
native = { ...native, grants: mapping.grants.filter(id => selected.has(id)) };
|
|
137
|
+
}
|
|
138
|
+
else if (Object.hasOwn(response, 'grants'))
|
|
139
|
+
invalidResponse();
|
|
140
|
+
return this.respond(id, native);
|
|
141
|
+
}
|
|
86
142
|
retireTask(taskId) {
|
|
87
143
|
for (const [id, entry] of this.pending)
|
|
88
144
|
if (entry.request.taskId === taskId)
|
|
@@ -123,4 +179,87 @@ export class ApprovalRegistry {
|
|
|
123
179
|
taskId: request.taskId, sessionId: request.sessionId };
|
|
124
180
|
}
|
|
125
181
|
}
|
|
182
|
+
function invalidResponse() {
|
|
183
|
+
throw new AgentError('INVALID_APPROVAL_RESPONSE', 'The approval response does not match the requested actions.');
|
|
184
|
+
}
|
|
185
|
+
function plain(value) {
|
|
186
|
+
return value !== null && typeof value === 'object' && !Array.isArray(value)
|
|
187
|
+
&& [Object.prototype, null].includes(Object.getPrototypeOf(value));
|
|
188
|
+
}
|
|
189
|
+
function normalize(request) {
|
|
190
|
+
const actions = new Map();
|
|
191
|
+
const grantsField = request.requestedSchema.properties.grants;
|
|
192
|
+
const scopeField = request.requestedSchema.properties.scope;
|
|
193
|
+
let grants;
|
|
194
|
+
if (grantsField?.type === 'array' && grantsField.items.anyOf && scopeField?.type === 'string' && scopeField.oneOf) {
|
|
195
|
+
grants = grantsField.items.anyOf.map(choice => ({ id: choice.const, label: choice.title }));
|
|
196
|
+
for (const choice of scopeField.oneOf) {
|
|
197
|
+
const scope = choice.const === 'session' ? 'session' : 'turn';
|
|
198
|
+
const action = { id: `act_${randomUUID()}`, label: `Allow for this ${scope}`, decision: 'allow', scope };
|
|
199
|
+
actions.set(action.id, { action, native: { scope: choice.const }, grants: grants.map(grant => grant.id) });
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
else {
|
|
203
|
+
const decision = request.requestedSchema.properties.decision;
|
|
204
|
+
const choices = decision?.type === 'string'
|
|
205
|
+
? (decision.oneOf ?? decision.enum?.map(value => ({ const: value, title: value }))) : undefined;
|
|
206
|
+
if (!choices?.length)
|
|
207
|
+
invalidNative();
|
|
208
|
+
for (const choice of choices) {
|
|
209
|
+
const metadata = decisionMetadata(request, choice.const);
|
|
210
|
+
const action = metadata.decision === 'cancel'
|
|
211
|
+
? { id: `act_${randomUUID()}`, label: choice.title, decision: 'cancel' }
|
|
212
|
+
: { id: `act_${randomUUID()}`, label: choice.title, decision: metadata.decision, scope: metadata.scope,
|
|
213
|
+
...(metadata.scope === 'session' ? { description: 'Applies to this native conversation.' } : {}) };
|
|
214
|
+
actions.set(action.id, { action, native: { decision: choice.const } });
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
if (!actions.size)
|
|
218
|
+
invalidNative();
|
|
219
|
+
const groups = new Map();
|
|
220
|
+
for (const mapping of actions.values()) {
|
|
221
|
+
const key = mapping.action.decision === 'cancel' ? 'cancel' : `${mapping.action.decision}:${mapping.action.scope}`;
|
|
222
|
+
const group = groups.get(key) ?? [];
|
|
223
|
+
group.push(mapping);
|
|
224
|
+
groups.set(key, group);
|
|
225
|
+
}
|
|
226
|
+
for (const group of groups.values())
|
|
227
|
+
if (group.length > 1)
|
|
228
|
+
for (const mapping of group) {
|
|
229
|
+
const native = typeof mapping.native.decision === 'string' ? mapping.native.decision : String(mapping.native.scope);
|
|
230
|
+
mapping.action = { ...mapping.action, description: [mapping.action.description, `Native option: ${native}`].filter(Boolean).join(' ') };
|
|
231
|
+
}
|
|
232
|
+
return { request: { id: request.requestId, taskId: request.taskId, sessionId: request.sessionId, harness: request.harness,
|
|
233
|
+
message: request.message, actions: [...actions.values()].map(value => value.action),
|
|
234
|
+
...(grants ? { grants } : {}), ...(request.context ? { context: structuredClone(request.context) } : {}) }, actions };
|
|
235
|
+
}
|
|
236
|
+
function invalidNative() {
|
|
237
|
+
throw new AgentError('INPUT_REQUIRED', 'The native permission request cannot be represented.');
|
|
238
|
+
}
|
|
239
|
+
function decisionMetadata(request, value) {
|
|
240
|
+
const options = Array.isArray(request.context?.options) ? request.context.options : [];
|
|
241
|
+
const offered = options.find(option => plain(option) && (option.optionId === value));
|
|
242
|
+
const kind = plain(offered) && typeof offered.kind === 'string' ? offered.kind : value;
|
|
243
|
+
if (kind === 'cancel')
|
|
244
|
+
return { decision: 'cancel' };
|
|
245
|
+
if (['acceptForSession', 'allow_session', 'allow_always'].includes(kind))
|
|
246
|
+
return { decision: 'allow', scope: 'session' };
|
|
247
|
+
if (kind === 'reject_always')
|
|
248
|
+
return { decision: 'deny', scope: 'session' };
|
|
249
|
+
if (['accept', 'allow', 'allow_once', 'once', 'approve-once'].includes(kind))
|
|
250
|
+
return { decision: 'allow', scope: 'once' };
|
|
251
|
+
if (['decline', 'deny', 'reject', 'reject_once'].includes(kind))
|
|
252
|
+
return { decision: 'deny', scope: 'once' };
|
|
253
|
+
invalidNative();
|
|
254
|
+
}
|
|
255
|
+
function canonicalBySchema(schema, answer) {
|
|
256
|
+
if (!Array.isArray(answer.grants))
|
|
257
|
+
return answer;
|
|
258
|
+
const field = schema.properties.grants;
|
|
259
|
+
if (field?.type !== 'array')
|
|
260
|
+
return answer;
|
|
261
|
+
const order = (field.items.anyOf ?? field.items.enum?.map(value => ({ const: value, title: value })) ?? []).map(choice => choice.const);
|
|
262
|
+
const selected = new Set(answer.grants);
|
|
263
|
+
return { ...answer, grants: order.filter(value => selected.has(value)) };
|
|
264
|
+
}
|
|
126
265
|
//# sourceMappingURL=approval-registry.js.map
|