@calliopelabs/cli 3.0.0 → 3.2.0
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 +54 -7
- package/dist/acp.d.ts +1 -4
- package/dist/acp.d.ts.map +1 -1
- package/dist/acp.js +118 -217
- package/dist/acp.js.map +1 -1
- package/dist/approvals/commands.d.ts +35 -0
- package/dist/approvals/commands.d.ts.map +1 -0
- package/dist/approvals/commands.js +51 -0
- package/dist/approvals/commands.js.map +1 -0
- package/dist/approvals/index.d.ts +6 -0
- package/dist/approvals/index.d.ts.map +1 -0
- package/dist/approvals/index.js +6 -0
- package/dist/approvals/index.js.map +1 -0
- package/dist/approvals/queue.d.ts +18 -0
- package/dist/approvals/queue.d.ts.map +1 -0
- package/dist/approvals/queue.js +46 -0
- package/dist/approvals/queue.js.map +1 -0
- package/dist/approvals/request.d.ts +13 -0
- package/dist/approvals/request.d.ts.map +1 -0
- package/dist/approvals/request.js +102 -0
- package/dist/approvals/request.js.map +1 -0
- package/dist/approvals/store.d.ts +24 -0
- package/dist/approvals/store.d.ts.map +1 -0
- package/dist/approvals/store.js +229 -0
- package/dist/approvals/store.js.map +1 -0
- package/dist/approvals/types.d.ts +27 -0
- package/dist/approvals/types.d.ts.map +1 -0
- package/dist/approvals/types.js +4 -0
- package/dist/approvals/types.js.map +1 -0
- package/dist/auto-compressor.d.ts +3 -2
- package/dist/auto-compressor.d.ts.map +1 -1
- package/dist/auto-compressor.js +9 -9
- package/dist/auto-compressor.js.map +1 -1
- package/dist/bin.d.ts.map +1 -1
- package/dist/bin.js +125 -22
- package/dist/bin.js.map +1 -1
- package/dist/brain/access.d.ts +65 -0
- package/dist/brain/access.d.ts.map +1 -0
- package/dist/brain/access.js +216 -0
- package/dist/brain/access.js.map +1 -0
- package/dist/brain/actions.d.ts +120 -0
- package/dist/brain/actions.d.ts.map +1 -0
- package/dist/brain/actions.js +270 -0
- package/dist/brain/actions.js.map +1 -0
- package/dist/brain/cli.d.ts +17 -0
- package/dist/brain/cli.d.ts.map +1 -0
- package/dist/brain/cli.js +206 -0
- package/dist/brain/cli.js.map +1 -0
- package/dist/brain/index.d.ts +16 -0
- package/dist/brain/index.d.ts.map +1 -0
- package/dist/brain/index.js +16 -0
- package/dist/brain/index.js.map +1 -0
- package/dist/brain/journal.d.ts +17 -0
- package/dist/brain/journal.d.ts.map +1 -0
- package/dist/brain/journal.js +189 -0
- package/dist/brain/journal.js.map +1 -0
- package/dist/brain/kg.d.ts +23 -0
- package/dist/brain/kg.d.ts.map +1 -0
- package/dist/brain/kg.js +36 -0
- package/dist/brain/kg.js.map +1 -0
- package/dist/brain/presentation.d.ts +3 -0
- package/dist/brain/presentation.d.ts.map +1 -0
- package/dist/brain/presentation.js +48 -0
- package/dist/brain/presentation.js.map +1 -0
- package/dist/brain/queries.d.ts +179 -0
- package/dist/brain/queries.d.ts.map +1 -0
- package/dist/brain/queries.js +210 -0
- package/dist/brain/queries.js.map +1 -0
- package/dist/brain/run-ingest.d.ts +29 -0
- package/dist/brain/run-ingest.d.ts.map +1 -0
- package/dist/brain/run-ingest.js +200 -0
- package/dist/brain/run-ingest.js.map +1 -0
- package/dist/brain/sqlite.d.ts +19 -0
- package/dist/brain/sqlite.d.ts.map +1 -0
- package/dist/brain/sqlite.js +252 -0
- package/dist/brain/sqlite.js.map +1 -0
- package/dist/brain/store.d.ts +31 -0
- package/dist/brain/store.d.ts.map +1 -0
- package/dist/brain/store.js +324 -0
- package/dist/brain/store.js.map +1 -0
- package/dist/brain/tool-query.d.ts +6 -0
- package/dist/brain/tool-query.d.ts.map +1 -0
- package/dist/brain/tool-query.js +42 -0
- package/dist/brain/tool-query.js.map +1 -0
- package/dist/brain/tools.d.ts +13 -0
- package/dist/brain/tools.d.ts.map +1 -0
- package/dist/brain/tools.js +20 -0
- package/dist/brain/tools.js.map +1 -0
- package/dist/brain/transfer.d.ts +57 -0
- package/dist/brain/transfer.d.ts.map +1 -0
- package/dist/brain/transfer.js +266 -0
- package/dist/brain/transfer.js.map +1 -0
- package/dist/brain/types.d.ts +145 -0
- package/dist/brain/types.d.ts.map +1 -0
- package/dist/brain/types.js +38 -0
- package/dist/brain/types.js.map +1 -0
- package/dist/brain/validation.d.ts +15 -0
- package/dist/brain/validation.d.ts.map +1 -0
- package/dist/brain/validation.js +163 -0
- package/dist/brain/validation.js.map +1 -0
- package/dist/budget.d.ts +5 -4
- package/dist/budget.d.ts.map +1 -1
- package/dist/budget.js +16 -38
- package/dist/budget.js.map +1 -1
- package/dist/cancellation.d.ts +8 -0
- package/dist/cancellation.d.ts.map +1 -0
- package/dist/cancellation.js +42 -0
- package/dist/cancellation.js.map +1 -0
- package/dist/checkpoint.d.ts +2 -2
- package/dist/checkpoint.d.ts.map +1 -1
- package/dist/checkpoint.js +5 -5
- package/dist/checkpoint.js.map +1 -1
- package/dist/circuit-breaker/breaker.d.ts.map +1 -1
- package/dist/config.d.ts +13 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +32 -8
- package/dist/config.js.map +1 -1
- package/dist/cost.js.map +1 -1
- package/dist/diff.js.map +1 -1
- package/dist/doctor.d.ts +30 -0
- package/dist/doctor.d.ts.map +1 -0
- package/dist/doctor.js +124 -0
- package/dist/doctor.js.map +1 -0
- package/dist/env-expansion.js.map +1 -1
- package/dist/errors.d.ts +15 -0
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +33 -9
- package/dist/errors.js.map +1 -1
- package/dist/execution/attribution.d.ts +17 -0
- package/dist/execution/attribution.d.ts.map +1 -0
- package/dist/execution/attribution.js +21 -0
- package/dist/execution/attribution.js.map +1 -0
- package/dist/execution/authority.d.ts +22 -0
- package/dist/execution/authority.d.ts.map +1 -0
- package/dist/execution/authority.js +134 -0
- package/dist/execution/authority.js.map +1 -0
- package/dist/execution/billing.d.ts +100 -0
- package/dist/execution/billing.d.ts.map +1 -0
- package/dist/execution/billing.js +166 -0
- package/dist/execution/billing.js.map +1 -0
- package/dist/execution/child-grants.d.ts +9 -0
- package/dist/execution/child-grants.d.ts.map +1 -0
- package/dist/execution/child-grants.js +55 -0
- package/dist/execution/child-grants.js.map +1 -0
- package/dist/execution/files.d.ts +6 -0
- package/dist/execution/files.d.ts.map +1 -0
- package/dist/execution/files.js +159 -0
- package/dist/execution/files.js.map +1 -0
- package/dist/execution/guard.d.ts +50 -0
- package/dist/execution/guard.d.ts.map +1 -0
- package/dist/execution/guard.js +158 -0
- package/dist/execution/guard.js.map +1 -0
- package/dist/execution/index.d.ts +12 -0
- package/dist/execution/index.d.ts.map +1 -0
- package/dist/execution/index.js +12 -0
- package/dist/execution/index.js.map +1 -0
- package/dist/execution/ledger.d.ts +23 -0
- package/dist/execution/ledger.d.ts.map +1 -0
- package/dist/execution/ledger.js +379 -0
- package/dist/execution/ledger.js.map +1 -0
- package/dist/execution/project-spend.d.ts +45 -0
- package/dist/execution/project-spend.d.ts.map +1 -0
- package/dist/execution/project-spend.js +274 -0
- package/dist/execution/project-spend.js.map +1 -0
- package/dist/execution/quote.d.ts +19 -0
- package/dist/execution/quote.d.ts.map +1 -0
- package/dist/execution/quote.js +116 -0
- package/dist/execution/quote.js.map +1 -0
- package/dist/execution/types.d.ts +113 -0
- package/dist/execution/types.d.ts.map +1 -0
- package/dist/execution/types.js +9 -0
- package/dist/execution/types.js.map +1 -0
- package/dist/execution/writer-recovery.d.ts +3 -0
- package/dist/execution/writer-recovery.d.ts.map +1 -0
- package/dist/execution/writer-recovery.js +85 -0
- package/dist/execution/writer-recovery.js.map +1 -0
- package/dist/fuzzy-search.js.map +1 -1
- package/dist/goals/accounting.d.ts +69 -0
- package/dist/goals/accounting.d.ts.map +1 -0
- package/dist/goals/accounting.js +100 -0
- package/dist/goals/accounting.js.map +1 -0
- package/dist/goals/actions.d.ts +33 -0
- package/dist/goals/actions.d.ts.map +1 -0
- package/dist/goals/actions.js +261 -0
- package/dist/goals/actions.js.map +1 -0
- package/dist/goals/authority.d.ts +9 -0
- package/dist/goals/authority.d.ts.map +1 -0
- package/dist/goals/authority.js +47 -0
- package/dist/goals/authority.js.map +1 -0
- package/dist/goals/cli.d.ts +10 -0
- package/dist/goals/cli.d.ts.map +1 -0
- package/dist/goals/cli.js +169 -0
- package/dist/goals/cli.js.map +1 -0
- package/dist/goals/contracts.d.ts +18 -0
- package/dist/goals/contracts.d.ts.map +1 -0
- package/dist/goals/contracts.js +127 -0
- package/dist/goals/contracts.js.map +1 -0
- package/dist/goals/index.d.ts +17 -0
- package/dist/goals/index.d.ts.map +1 -0
- package/dist/goals/index.js +16 -0
- package/dist/goals/index.js.map +1 -0
- package/dist/goals/journal.d.ts +5 -0
- package/dist/goals/journal.d.ts.map +1 -0
- package/dist/goals/journal.js +142 -0
- package/dist/goals/journal.js.map +1 -0
- package/dist/goals/metrics.d.ts +53 -0
- package/dist/goals/metrics.d.ts.map +1 -0
- package/dist/goals/metrics.js +141 -0
- package/dist/goals/metrics.js.map +1 -0
- package/dist/goals/repair.d.ts +10 -0
- package/dist/goals/repair.d.ts.map +1 -0
- package/dist/goals/repair.js +50 -0
- package/dist/goals/repair.js.map +1 -0
- package/dist/goals/routing.d.ts +18 -0
- package/dist/goals/routing.d.ts.map +1 -0
- package/dist/goals/routing.js +60 -0
- package/dist/goals/routing.js.map +1 -0
- package/dist/goals/store.d.ts +30 -0
- package/dist/goals/store.d.ts.map +1 -0
- package/dist/goals/store.js +314 -0
- package/dist/goals/store.js.map +1 -0
- package/dist/goals/supervised-cli.d.ts +5 -0
- package/dist/goals/supervised-cli.d.ts.map +1 -0
- package/dist/goals/supervised-cli.js +44 -0
- package/dist/goals/supervised-cli.js.map +1 -0
- package/dist/goals/supervised.d.ts +8 -0
- package/dist/goals/supervised.d.ts.map +1 -0
- package/dist/goals/supervised.js +65 -0
- package/dist/goals/supervised.js.map +1 -0
- package/dist/goals/team.d.ts +8 -0
- package/dist/goals/team.d.ts.map +1 -0
- package/dist/goals/team.js +64 -0
- package/dist/goals/team.js.map +1 -0
- package/dist/goals/types.d.ts +174 -0
- package/dist/goals/types.d.ts.map +1 -0
- package/dist/goals/types.js +2 -0
- package/dist/goals/types.js.map +1 -0
- package/dist/goals/validation.d.ts +17 -0
- package/dist/goals/validation.d.ts.map +1 -0
- package/dist/goals/validation.js +172 -0
- package/dist/goals/validation.js.map +1 -0
- package/dist/headless.d.ts +1 -0
- package/dist/headless.d.ts.map +1 -1
- package/dist/headless.js +98 -275
- package/dist/headless.js.map +1 -1
- package/dist/health/index.d.ts +5 -0
- package/dist/health/index.d.ts.map +1 -0
- package/dist/health/index.js +5 -0
- package/dist/health/index.js.map +1 -0
- package/dist/health/store.d.ts +24 -0
- package/dist/health/store.d.ts.map +1 -0
- package/dist/health/store.js +190 -0
- package/dist/health/store.js.map +1 -0
- package/dist/health/summary.d.ts +10 -0
- package/dist/health/summary.d.ts.map +1 -0
- package/dist/health/summary.js +95 -0
- package/dist/health/summary.js.map +1 -0
- package/dist/health/target.d.ts +3 -0
- package/dist/health/target.d.ts.map +1 -0
- package/dist/health/target.js +53 -0
- package/dist/health/target.js.map +1 -0
- package/dist/health/types.d.ts +72 -0
- package/dist/health/types.d.ts.map +1 -0
- package/dist/health/types.js +2 -0
- package/dist/health/types.js.map +1 -0
- package/dist/hooks.d.ts +7 -2
- package/dist/hooks.d.ts.map +1 -1
- package/dist/hooks.js +35 -17
- package/dist/hooks.js.map +1 -1
- package/dist/improvement/actions.d.ts +27 -0
- package/dist/improvement/actions.d.ts.map +1 -0
- package/dist/improvement/actions.js +116 -0
- package/dist/improvement/actions.js.map +1 -0
- package/dist/improvement/cli.d.ts +9 -0
- package/dist/improvement/cli.d.ts.map +1 -0
- package/dist/improvement/cli.js +58 -0
- package/dist/improvement/cli.js.map +1 -0
- package/dist/improvement/feedback.d.ts +30 -0
- package/dist/improvement/feedback.d.ts.map +1 -0
- package/dist/improvement/feedback.js +7 -0
- package/dist/improvement/feedback.js.map +1 -0
- package/dist/improvement/index.d.ts +7 -0
- package/dist/improvement/index.d.ts.map +1 -0
- package/dist/improvement/index.js +7 -0
- package/dist/improvement/index.js.map +1 -0
- package/dist/improvement/metrics.d.ts +4 -0
- package/dist/improvement/metrics.d.ts.map +1 -0
- package/dist/improvement/metrics.js +38 -0
- package/dist/improvement/metrics.js.map +1 -0
- package/dist/improvement/projection.d.ts +7 -0
- package/dist/improvement/projection.d.ts.map +1 -0
- package/dist/improvement/projection.js +135 -0
- package/dist/improvement/projection.js.map +1 -0
- package/dist/improvement/types.d.ts +115 -0
- package/dist/improvement/types.d.ts.map +1 -0
- package/dist/improvement/types.js +2 -0
- package/dist/improvement/types.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/instructions.d.ts +10 -0
- package/dist/instructions.d.ts.map +1 -0
- package/dist/instructions.js +93 -0
- package/dist/instructions.js.map +1 -0
- package/dist/isolation/contracts.d.ts +42 -0
- package/dist/isolation/contracts.d.ts.map +1 -0
- package/dist/isolation/contracts.js +33 -0
- package/dist/isolation/contracts.js.map +1 -0
- package/dist/isolation/coordinator.d.ts +10 -0
- package/dist/isolation/coordinator.d.ts.map +1 -0
- package/dist/isolation/coordinator.js +79 -0
- package/dist/isolation/coordinator.js.map +1 -0
- package/dist/isolation/index.d.ts +5 -0
- package/dist/isolation/index.d.ts.map +1 -0
- package/dist/isolation/index.js +5 -0
- package/dist/isolation/index.js.map +1 -0
- package/dist/isolation/process.d.ts +11 -0
- package/dist/isolation/process.d.ts.map +1 -0
- package/dist/isolation/process.js +131 -0
- package/dist/isolation/process.js.map +1 -0
- package/dist/isolation/worktree.d.ts +25 -0
- package/dist/isolation/worktree.d.ts.map +1 -0
- package/dist/isolation/worktree.js +282 -0
- package/dist/isolation/worktree.js.map +1 -0
- package/dist/iteration-ledger.d.ts.map +1 -1
- package/dist/iteration-ledger.js.map +1 -1
- package/dist/local-model.d.ts +2 -2
- package/dist/local-model.d.ts.map +1 -1
- package/dist/mcp.js.map +1 -1
- package/dist/memory.d.ts.map +1 -1
- package/dist/memory.js +5 -1
- package/dist/memory.js.map +1 -1
- package/dist/model-detection.d.ts +14 -18
- package/dist/model-detection.d.ts.map +1 -1
- package/dist/model-detection.js +287 -149
- package/dist/model-detection.js.map +1 -1
- package/dist/models/index.d.ts +3 -0
- package/dist/models/index.d.ts.map +1 -0
- package/dist/models/index.js +3 -0
- package/dist/models/index.js.map +1 -0
- package/dist/models/metadata.d.ts +43 -0
- package/dist/models/metadata.d.ts.map +1 -0
- package/dist/models/metadata.js +72 -0
- package/dist/models/metadata.js.map +1 -0
- package/dist/models/openrouter.d.ts +6 -0
- package/dist/models/openrouter.d.ts.map +1 -0
- package/dist/models/openrouter.js +38 -0
- package/dist/models/openrouter.js.map +1 -0
- package/dist/orchestration/accounting.d.ts +35 -0
- package/dist/orchestration/accounting.d.ts.map +1 -0
- package/dist/orchestration/accounting.js +27 -0
- package/dist/orchestration/accounting.js.map +1 -0
- package/dist/orchestration/actions.d.ts +23 -0
- package/dist/orchestration/actions.d.ts.map +1 -0
- package/dist/orchestration/actions.js +65 -0
- package/dist/orchestration/actions.js.map +1 -0
- package/dist/orchestration/cli.d.ts +28 -0
- package/dist/orchestration/cli.d.ts.map +1 -0
- package/dist/orchestration/cli.js +178 -0
- package/dist/orchestration/cli.js.map +1 -0
- package/dist/orchestration/coordinator-actions.d.ts +15 -0
- package/dist/orchestration/coordinator-actions.d.ts.map +1 -0
- package/dist/orchestration/coordinator-actions.js +79 -0
- package/dist/orchestration/coordinator-actions.js.map +1 -0
- package/dist/orchestration/coordinator-types.d.ts +193 -0
- package/dist/orchestration/coordinator-types.d.ts.map +1 -0
- package/dist/orchestration/coordinator-types.js +2 -0
- package/dist/orchestration/coordinator-types.js.map +1 -0
- package/dist/orchestration/coordinator.d.ts +32 -0
- package/dist/orchestration/coordinator.d.ts.map +1 -0
- package/dist/orchestration/coordinator.js +405 -0
- package/dist/orchestration/coordinator.js.map +1 -0
- package/dist/orchestration/execution-cli.d.ts +11 -0
- package/dist/orchestration/execution-cli.d.ts.map +1 -0
- package/dist/orchestration/execution-cli.js +183 -0
- package/dist/orchestration/execution-cli.js.map +1 -0
- package/dist/orchestration/execution-journal.d.ts +15 -0
- package/dist/orchestration/execution-journal.d.ts.map +1 -0
- package/dist/orchestration/execution-journal.js +477 -0
- package/dist/orchestration/execution-journal.js.map +1 -0
- package/dist/orchestration/execution-store.d.ts +39 -0
- package/dist/orchestration/execution-store.d.ts.map +1 -0
- package/dist/orchestration/execution-store.js +325 -0
- package/dist/orchestration/execution-store.js.map +1 -0
- package/dist/orchestration/execution.d.ts +8 -0
- package/dist/orchestration/execution.d.ts.map +1 -0
- package/dist/orchestration/execution.js +47 -0
- package/dist/orchestration/execution.js.map +1 -0
- package/dist/orchestration/index.d.ts +20 -0
- package/dist/orchestration/index.d.ts.map +1 -0
- package/dist/orchestration/index.js +17 -0
- package/dist/orchestration/index.js.map +1 -0
- package/dist/orchestration/progress.d.ts +19 -0
- package/dist/orchestration/progress.d.ts.map +1 -0
- package/dist/orchestration/progress.js +20 -0
- package/dist/orchestration/progress.js.map +1 -0
- package/dist/orchestration/recovery.d.ts +4 -0
- package/dist/orchestration/recovery.d.ts.map +1 -0
- package/dist/orchestration/recovery.js +121 -0
- package/dist/orchestration/recovery.js.map +1 -0
- package/dist/orchestration/request-accounting.d.ts +35 -0
- package/dist/orchestration/request-accounting.d.ts.map +1 -0
- package/dist/orchestration/request-accounting.js +71 -0
- package/dist/orchestration/request-accounting.js.map +1 -0
- package/dist/orchestration/routing.d.ts +20 -0
- package/dist/orchestration/routing.d.ts.map +1 -0
- package/dist/orchestration/routing.js +38 -0
- package/dist/orchestration/routing.js.map +1 -0
- package/dist/orchestration/store.d.ts +26 -0
- package/dist/orchestration/store.d.ts.map +1 -0
- package/dist/orchestration/store.js +381 -0
- package/dist/orchestration/store.js.map +1 -0
- package/dist/orchestration/types.d.ts +201 -0
- package/dist/orchestration/types.d.ts.map +1 -0
- package/dist/orchestration/types.js +11 -0
- package/dist/orchestration/types.js.map +1 -0
- package/dist/orchestration/validation.d.ts +29 -0
- package/dist/orchestration/validation.d.ts.map +1 -0
- package/dist/orchestration/validation.js +440 -0
- package/dist/orchestration/validation.js.map +1 -0
- package/dist/orchestration/verification.d.ts +30 -0
- package/dist/orchestration/verification.d.ts.map +1 -0
- package/dist/orchestration/verification.js +204 -0
- package/dist/orchestration/verification.js.map +1 -0
- package/dist/orchestration/worker-context.d.ts +33 -0
- package/dist/orchestration/worker-context.d.ts.map +1 -0
- package/dist/orchestration/worker-context.js +31 -0
- package/dist/orchestration/worker-context.js.map +1 -0
- package/dist/parallel-tools.js.map +1 -1
- package/dist/plugins.d.ts.map +1 -1
- package/dist/policy.d.ts +1 -0
- package/dist/policy.d.ts.map +1 -1
- package/dist/policy.js +25 -5
- package/dist/policy.js.map +1 -1
- package/dist/preferences/controls.d.ts +21 -0
- package/dist/preferences/controls.d.ts.map +1 -0
- package/dist/preferences/controls.js +36 -0
- package/dist/preferences/controls.js.map +1 -0
- package/dist/preferences/flags.d.ts +8 -0
- package/dist/preferences/flags.d.ts.map +1 -0
- package/dist/preferences/flags.js +27 -0
- package/dist/preferences/flags.js.map +1 -0
- package/dist/preferences/index.d.ts +9 -0
- package/dist/preferences/index.d.ts.map +1 -0
- package/dist/preferences/index.js +9 -0
- package/dist/preferences/index.js.map +1 -0
- package/dist/preferences/once.d.ts +8 -0
- package/dist/preferences/once.d.ts.map +1 -0
- package/dist/preferences/once.js +28 -0
- package/dist/preferences/once.js.map +1 -0
- package/dist/preferences/resolve.d.ts +14 -0
- package/dist/preferences/resolve.d.ts.map +1 -0
- package/dist/preferences/resolve.js +58 -0
- package/dist/preferences/resolve.js.map +1 -0
- package/dist/preferences/store.d.ts +19 -0
- package/dist/preferences/store.d.ts.map +1 -0
- package/dist/preferences/store.js +147 -0
- package/dist/preferences/store.js.map +1 -0
- package/dist/preferences/submission.d.ts +16 -0
- package/dist/preferences/submission.d.ts.map +1 -0
- package/dist/preferences/submission.js +29 -0
- package/dist/preferences/submission.js.map +1 -0
- package/dist/preferences/types.d.ts +23 -0
- package/dist/preferences/types.d.ts.map +1 -0
- package/dist/preferences/types.js +2 -0
- package/dist/preferences/types.js.map +1 -0
- package/dist/preferences/validate.d.ts +3 -0
- package/dist/preferences/validate.d.ts.map +1 -0
- package/dist/preferences/validate.js +15 -0
- package/dist/preferences/validate.js.map +1 -0
- package/dist/process-cancellation.d.ts +6 -0
- package/dist/process-cancellation.d.ts.map +1 -0
- package/dist/process-cancellation.js +39 -0
- package/dist/process-cancellation.js.map +1 -0
- package/dist/providers/anthropic.d.ts +7 -2
- package/dist/providers/anthropic.d.ts.map +1 -1
- package/dist/providers/anthropic.js +72 -41
- package/dist/providers/anthropic.js.map +1 -1
- package/dist/providers/bedrock.d.ts +1 -1
- package/dist/providers/bedrock.d.ts.map +1 -1
- package/dist/providers/bedrock.js +39 -23
- package/dist/providers/bedrock.js.map +1 -1
- package/dist/providers/compat.d.ts +4 -3
- package/dist/providers/compat.d.ts.map +1 -1
- package/dist/providers/compat.js +49 -31
- package/dist/providers/compat.js.map +1 -1
- package/dist/providers/deepseek-reasoning.d.ts +64 -0
- package/dist/providers/deepseek-reasoning.d.ts.map +1 -0
- package/dist/providers/deepseek-reasoning.js +28 -0
- package/dist/providers/deepseek-reasoning.js.map +1 -0
- package/dist/providers/google.d.ts +4 -3
- package/dist/providers/google.d.ts.map +1 -1
- package/dist/providers/google.js +128 -19
- package/dist/providers/google.js.map +1 -1
- package/dist/providers/index.d.ts +2 -0
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +216 -36
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/ollama.d.ts.map +1 -1
- package/dist/providers/ollama.js +79 -43
- package/dist/providers/ollama.js.map +1 -1
- package/dist/providers/openai.d.ts +12 -12
- package/dist/providers/openai.d.ts.map +1 -1
- package/dist/providers/openai.js +54 -46
- package/dist/providers/openai.js.map +1 -1
- package/dist/providers/openrouter-bounds.d.ts +22 -0
- package/dist/providers/openrouter-bounds.d.ts.map +1 -0
- package/dist/providers/openrouter-bounds.js +16 -0
- package/dist/providers/openrouter-bounds.js.map +1 -0
- package/dist/providers/stream-attempt.d.ts +29 -0
- package/dist/providers/stream-attempt.d.ts.map +1 -0
- package/dist/providers/stream-attempt.js +63 -0
- package/dist/providers/stream-attempt.js.map +1 -0
- package/dist/providers/types.d.ts +40 -4
- package/dist/providers/types.d.ts.map +1 -1
- package/dist/providers/types.js +19 -0
- package/dist/providers/types.js.map +1 -1
- package/dist/replay.d.ts.map +1 -1
- package/dist/replay.js +16 -0
- package/dist/replay.js.map +1 -1
- package/dist/risk.d.ts.map +1 -1
- package/dist/risk.js +5 -0
- package/dist/risk.js.map +1 -1
- package/dist/router.d.ts +7 -110
- package/dist/router.d.ts.map +1 -1
- package/dist/router.js +0 -451
- package/dist/router.js.map +1 -1
- package/dist/routing/index.d.ts +6 -0
- package/dist/routing/index.d.ts.map +1 -0
- package/dist/routing/index.js +5 -0
- package/dist/routing/index.js.map +1 -0
- package/dist/routing/prompt.d.ts +4 -0
- package/dist/routing/prompt.d.ts.map +1 -0
- package/dist/routing/prompt.js +14 -0
- package/dist/routing/prompt.js.map +1 -0
- package/dist/routing/select.d.ts +9 -0
- package/dist/routing/select.d.ts.map +1 -0
- package/dist/routing/select.js +279 -0
- package/dist/routing/select.js.map +1 -0
- package/dist/routing/smart.d.ts +31 -0
- package/dist/routing/smart.d.ts.map +1 -0
- package/dist/routing/smart.js +46 -0
- package/dist/routing/smart.js.map +1 -0
- package/dist/routing/types.d.ts +79 -0
- package/dist/routing/types.d.ts.map +1 -0
- package/dist/routing/types.js +2 -0
- package/dist/routing/types.js.map +1 -0
- package/dist/runlog.d.ts +32 -4
- package/dist/runlog.d.ts.map +1 -1
- package/dist/runlog.js +22 -6
- package/dist/runlog.js.map +1 -1
- package/dist/runtime/index.d.ts +6 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +6 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/runtime/permissions.d.ts +21 -0
- package/dist/runtime/permissions.d.ts.map +1 -0
- package/dist/runtime/permissions.js +110 -0
- package/dist/runtime/permissions.js.map +1 -0
- package/dist/runtime/repair.d.ts +20 -0
- package/dist/runtime/repair.d.ts.map +1 -0
- package/dist/runtime/repair.js +50 -0
- package/dist/runtime/repair.js.map +1 -0
- package/dist/runtime/tool-retry.d.ts +3 -0
- package/dist/runtime/tool-retry.d.ts.map +1 -0
- package/dist/runtime/tool-retry.js +12 -0
- package/dist/runtime/tool-retry.js.map +1 -0
- package/dist/runtime/turn.d.ts +97 -0
- package/dist/runtime/turn.d.ts.map +1 -0
- package/dist/runtime/turn.js +437 -0
- package/dist/runtime/turn.js.map +1 -0
- package/dist/runtime/types.d.ts +11 -0
- package/dist/runtime/types.d.ts.map +1 -0
- package/dist/runtime/types.js +5 -0
- package/dist/runtime/types.js.map +1 -0
- package/dist/sandbox/docker.d.ts +4 -4
- package/dist/sandbox/docker.d.ts.map +1 -1
- package/dist/sandbox/docker.js +55 -16
- package/dist/sandbox/docker.js.map +1 -1
- package/dist/sandbox/native.d.ts +1 -0
- package/dist/sandbox/native.d.ts.map +1 -1
- package/dist/sandbox/native.js +11 -2
- package/dist/sandbox/native.js.map +1 -1
- package/dist/scope.d.ts +5 -9
- package/dist/scope.d.ts.map +1 -1
- package/dist/scope.js +43 -20
- package/dist/scope.js.map +1 -1
- package/dist/scuttlebot/client.d.ts.map +1 -1
- package/dist/scuttlebot/client.js.map +1 -1
- package/dist/scuttlebot/http-client.d.ts.map +1 -1
- package/dist/scuttlebot/irc-client.d.ts +5 -5
- package/dist/scuttlebot/irc-client.d.ts.map +1 -1
- package/dist/scuttlebot/irc-client.js.map +1 -1
- package/dist/session-management/actions.d.ts +28 -0
- package/dist/session-management/actions.d.ts.map +1 -0
- package/dist/session-management/actions.js +78 -0
- package/dist/session-management/actions.js.map +1 -0
- package/dist/session-management/cli.d.ts +24 -0
- package/dist/session-management/cli.d.ts.map +1 -0
- package/dist/session-management/cli.js +92 -0
- package/dist/session-management/cli.js.map +1 -0
- package/dist/session-management/files.d.ts +5 -0
- package/dist/session-management/files.d.ts.map +1 -0
- package/dist/session-management/files.js +92 -0
- package/dist/session-management/files.js.map +1 -0
- package/dist/session-management/index.d.ts +7 -0
- package/dist/session-management/index.d.ts.map +1 -0
- package/dist/session-management/index.js +7 -0
- package/dist/session-management/index.js.map +1 -0
- package/dist/session-management/permissions.d.ts +12 -0
- package/dist/session-management/permissions.d.ts.map +1 -0
- package/dist/session-management/permissions.js +33 -0
- package/dist/session-management/permissions.js.map +1 -0
- package/dist/session-management/presentation.d.ts +5 -0
- package/dist/session-management/presentation.d.ts.map +1 -0
- package/dist/session-management/presentation.js +10 -0
- package/dist/session-management/presentation.js.map +1 -0
- package/dist/session-management/transfer.d.ts +9 -0
- package/dist/session-management/transfer.d.ts.map +1 -0
- package/dist/session-management/transfer.js +39 -0
- package/dist/session-management/transfer.js.map +1 -0
- package/dist/sessions/context.d.ts +4 -0
- package/dist/sessions/context.d.ts.map +1 -0
- package/dist/sessions/context.js +6 -0
- package/dist/sessions/context.js.map +1 -0
- package/dist/sessions/format.d.ts +38 -0
- package/dist/sessions/format.d.ts.map +1 -0
- package/dist/sessions/format.js +116 -0
- package/dist/sessions/format.js.map +1 -0
- package/dist/sessions/history.d.ts +37 -0
- package/dist/sessions/history.d.ts.map +1 -0
- package/dist/sessions/history.js +197 -0
- package/dist/sessions/history.js.map +1 -0
- package/dist/sessions/index.d.ts +8 -0
- package/dist/sessions/index.d.ts.map +1 -0
- package/dist/sessions/index.js +8 -0
- package/dist/sessions/index.js.map +1 -0
- package/dist/sessions/output.d.ts +31 -0
- package/dist/sessions/output.d.ts.map +1 -0
- package/dist/sessions/output.js +115 -0
- package/dist/sessions/output.js.map +1 -0
- package/dist/sessions/portable.d.ts +26 -0
- package/dist/sessions/portable.d.ts.map +1 -0
- package/dist/sessions/portable.js +105 -0
- package/dist/sessions/portable.js.map +1 -0
- package/dist/sessions/snapshot.d.ts +11 -0
- package/dist/sessions/snapshot.d.ts.map +1 -0
- package/dist/sessions/snapshot.js +118 -0
- package/dist/sessions/snapshot.js.map +1 -0
- package/dist/sessions/tool-state.d.ts +11 -0
- package/dist/sessions/tool-state.d.ts.map +1 -0
- package/dist/sessions/tool-state.js +152 -0
- package/dist/sessions/tool-state.js.map +1 -0
- package/dist/setup.d.ts.map +1 -1
- package/dist/setup.js +16 -5
- package/dist/setup.js.map +1 -1
- package/dist/spawning/actions.d.ts +23 -0
- package/dist/spawning/actions.d.ts.map +1 -0
- package/dist/spawning/actions.js +120 -0
- package/dist/spawning/actions.js.map +1 -0
- package/dist/spawning/authority.d.ts +15 -0
- package/dist/spawning/authority.d.ts.map +1 -0
- package/dist/spawning/authority.js +16 -0
- package/dist/spawning/authority.js.map +1 -0
- package/dist/spawning/cli.d.ts +4 -0
- package/dist/spawning/cli.d.ts.map +1 -0
- package/dist/spawning/cli.js +46 -0
- package/dist/spawning/cli.js.map +1 -0
- package/dist/spawning/execution.d.ts +13 -0
- package/dist/spawning/execution.d.ts.map +1 -0
- package/dist/spawning/execution.js +59 -0
- package/dist/spawning/execution.js.map +1 -0
- package/dist/spawning/index.d.ts +8 -0
- package/dist/spawning/index.d.ts.map +1 -0
- package/dist/spawning/index.js +8 -0
- package/dist/spawning/index.js.map +1 -0
- package/dist/spawning/store.d.ts +12 -0
- package/dist/spawning/store.d.ts.map +1 -0
- package/dist/spawning/store.js +93 -0
- package/dist/spawning/store.js.map +1 -0
- package/dist/spawning/types.d.ts +34 -0
- package/dist/spawning/types.d.ts.map +1 -0
- package/dist/spawning/types.js +2 -0
- package/dist/spawning/types.js.map +1 -0
- package/dist/spawning/validation.d.ts +14 -0
- package/dist/spawning/validation.d.ts.map +1 -0
- package/dist/spawning/validation.js +95 -0
- package/dist/spawning/validation.js.map +1 -0
- package/dist/storage.d.ts +29 -1
- package/dist/storage.d.ts.map +1 -1
- package/dist/storage.js +112 -40
- package/dist/storage.js.map +1 -1
- package/dist/streaming.d.ts.map +1 -1
- package/dist/streaming.js.map +1 -1
- package/dist/styles.d.ts +56 -56
- package/dist/styles.d.ts.map +1 -1
- package/dist/styles.js.map +1 -1
- package/dist/summarization.d.ts.map +1 -1
- package/dist/summarization.js.map +1 -1
- package/dist/supervision/approval.d.ts +4 -0
- package/dist/supervision/approval.d.ts.map +1 -0
- package/dist/supervision/approval.js +7 -0
- package/dist/supervision/approval.js.map +1 -0
- package/dist/supervision/availability.d.ts +34 -0
- package/dist/supervision/availability.d.ts.map +1 -0
- package/dist/supervision/availability.js +44 -0
- package/dist/supervision/availability.js.map +1 -0
- package/dist/supervision/context.d.ts +36 -0
- package/dist/supervision/context.d.ts.map +1 -0
- package/dist/supervision/context.js +52 -0
- package/dist/supervision/context.js.map +1 -0
- package/dist/supervision/contracts.d.ts +7 -0
- package/dist/supervision/contracts.d.ts.map +1 -0
- package/dist/supervision/contracts.js +86 -0
- package/dist/supervision/contracts.js.map +1 -0
- package/dist/supervision/effects.d.ts +15 -0
- package/dist/supervision/effects.d.ts.map +1 -0
- package/dist/supervision/effects.js +19 -0
- package/dist/supervision/effects.js.map +1 -0
- package/dist/supervision/evidence.d.ts +32 -0
- package/dist/supervision/evidence.d.ts.map +1 -0
- package/dist/supervision/evidence.js +68 -0
- package/dist/supervision/evidence.js.map +1 -0
- package/dist/supervision/health.d.ts +16 -0
- package/dist/supervision/health.d.ts.map +1 -0
- package/dist/supervision/health.js +86 -0
- package/dist/supervision/health.js.map +1 -0
- package/dist/supervision/index.d.ts +13 -0
- package/dist/supervision/index.d.ts.map +1 -0
- package/dist/supervision/index.js +13 -0
- package/dist/supervision/index.js.map +1 -0
- package/dist/supervision/journal.d.ts +16 -0
- package/dist/supervision/journal.d.ts.map +1 -0
- package/dist/supervision/journal.js +311 -0
- package/dist/supervision/journal.js.map +1 -0
- package/dist/supervision/receipts.d.ts +4 -0
- package/dist/supervision/receipts.d.ts.map +1 -0
- package/dist/supervision/receipts.js +21 -0
- package/dist/supervision/receipts.js.map +1 -0
- package/dist/supervision/reply.d.ts +12 -0
- package/dist/supervision/reply.d.ts.map +1 -0
- package/dist/supervision/reply.js +50 -0
- package/dist/supervision/reply.js.map +1 -0
- package/dist/supervision/runtime.d.ts +8 -0
- package/dist/supervision/runtime.d.ts.map +1 -0
- package/dist/supervision/runtime.js +188 -0
- package/dist/supervision/runtime.js.map +1 -0
- package/dist/supervision/types.d.ts +174 -0
- package/dist/supervision/types.d.ts.map +1 -0
- package/dist/supervision/types.js +2 -0
- package/dist/supervision/types.js.map +1 -0
- package/dist/terminal-image.js.map +1 -1
- package/dist/tools.d.ts +12 -0
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +131 -23
- package/dist/tools.js.map +1 -1
- package/dist/trust.js.map +1 -1
- package/dist/turn-controller.d.ts +12 -0
- package/dist/turn-controller.d.ts.map +1 -0
- package/dist/turn-controller.js +51 -0
- package/dist/turn-controller.js.map +1 -0
- package/dist/types.d.ts +7 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -1
- package/dist/ui/agent.d.ts +11 -10
- package/dist/ui/agent.d.ts.map +1 -1
- package/dist/ui/agent.js +293 -897
- package/dist/ui/agent.js.map +1 -1
- package/dist/ui/chat-input.d.ts +2 -1
- package/dist/ui/chat-input.d.ts.map +1 -1
- package/dist/ui/commands.d.ts +20 -2
- package/dist/ui/commands.d.ts.map +1 -1
- package/dist/ui/commands.js +208 -155
- package/dist/ui/commands.js.map +1 -1
- package/dist/ui/completions.d.ts.map +1 -1
- package/dist/ui/completions.js +16 -5
- package/dist/ui/completions.js.map +1 -1
- package/dist/ui/components.d.ts +6 -6
- package/dist/ui/components.d.ts.map +1 -1
- package/dist/ui/debug-log.d.ts.map +1 -1
- package/dist/ui/error-boundary.d.ts +1 -1
- package/dist/ui/error-boundary.d.ts.map +1 -1
- package/dist/ui/frame.d.ts +1 -1
- package/dist/ui/frame.d.ts.map +1 -1
- package/dist/ui/index.d.ts +7 -3
- package/dist/ui/index.d.ts.map +1 -1
- package/dist/ui/index.js +13 -11
- package/dist/ui/index.js.map +1 -1
- package/dist/ui/messages.d.ts +1 -1
- package/dist/ui/messages.d.ts.map +1 -1
- package/dist/ui/messages.js +5 -0
- package/dist/ui/messages.js.map +1 -1
- package/dist/ui/modals/index.d.ts +1 -0
- package/dist/ui/modals/index.d.ts.map +1 -1
- package/dist/ui/modals/index.js +1 -0
- package/dist/ui/modals/index.js.map +1 -1
- package/dist/ui/modals/prompts.d.ts +9 -11
- package/dist/ui/modals/prompts.d.ts.map +1 -1
- package/dist/ui/modals/prompts.js +15 -11
- package/dist/ui/modals/prompts.js.map +1 -1
- package/dist/ui/modals/selectors.d.ts +5 -3
- package/dist/ui/modals/selectors.d.ts.map +1 -1
- package/dist/ui/modals/selectors.js +3 -2
- package/dist/ui/modals/selectors.js.map +1 -1
- package/dist/ui/modals/setup.d.ts +3 -2
- package/dist/ui/modals/setup.d.ts.map +1 -1
- package/dist/ui/modals/setup.js +1 -1
- package/dist/ui/modals/tool-output.d.ts +8 -0
- package/dist/ui/modals/tool-output.d.ts.map +1 -0
- package/dist/ui/modals/tool-output.js +26 -0
- package/dist/ui/modals/tool-output.js.map +1 -0
- package/dist/ui/model-commands.d.ts +4 -0
- package/dist/ui/model-commands.d.ts.map +1 -0
- package/dist/ui/model-commands.js +69 -0
- package/dist/ui/model-commands.js.map +1 -0
- package/dist/ui/regions/input-region.d.ts +1 -1
- package/dist/ui/regions/input-region.d.ts.map +1 -1
- package/dist/ui/regions/modal-host.d.ts +4 -1
- package/dist/ui/regions/modal-host.d.ts.map +1 -1
- package/dist/ui/regions/modal-host.js +7 -1
- package/dist/ui/regions/modal-host.js.map +1 -1
- package/dist/ui/regions/static-scrollback.d.ts +1 -1
- package/dist/ui/regions/static-scrollback.d.ts.map +1 -1
- package/dist/ui/regions/status-region.d.ts +2 -1
- package/dist/ui/regions/status-region.d.ts.map +1 -1
- package/dist/ui/regions/status-region.js +2 -2
- package/dist/ui/regions/status-region.js.map +1 -1
- package/dist/ui/regions/tool-activity.d.ts +6 -0
- package/dist/ui/regions/tool-activity.d.ts.map +1 -0
- package/dist/ui/regions/tool-activity.js +9 -0
- package/dist/ui/regions/tool-activity.js.map +1 -0
- package/dist/ui/regions/transcript-region.d.ts +1 -1
- package/dist/ui/regions/transcript-region.d.ts.map +1 -1
- package/dist/ui/regions/transcript-region.js +3 -2
- package/dist/ui/regions/transcript-region.js.map +1 -1
- package/dist/ui/regions/workflow-region.d.ts +9 -0
- package/dist/ui/regions/workflow-region.d.ts.map +1 -0
- package/dist/ui/regions/workflow-region.js +11 -0
- package/dist/ui/regions/workflow-region.js.map +1 -0
- package/dist/ui/self-restart.js.map +1 -1
- package/dist/ui/session-commands.d.ts +3 -0
- package/dist/ui/session-commands.d.ts.map +1 -0
- package/dist/ui/session-commands.js +141 -0
- package/dist/ui/session-commands.js.map +1 -0
- package/dist/ui/state/use-approval-state.d.ts +9 -0
- package/dist/ui/state/use-approval-state.d.ts.map +1 -0
- package/dist/ui/state/use-approval-state.js +18 -0
- package/dist/ui/state/use-approval-state.js.map +1 -0
- package/dist/ui/state/use-chat-controller.d.ts +4 -1
- package/dist/ui/state/use-chat-controller.d.ts.map +1 -1
- package/dist/ui/state/use-chat-controller.js +256 -180
- package/dist/ui/state/use-chat-controller.js.map +1 -1
- package/dist/ui/state/use-modal-state.d.ts +6 -8
- package/dist/ui/state/use-modal-state.d.ts.map +1 -1
- package/dist/ui/state/use-modal-state.js +3 -4
- package/dist/ui/state/use-modal-state.js.map +1 -1
- package/dist/ui/state/use-model-state.d.ts +7 -3
- package/dist/ui/state/use-model-state.d.ts.map +1 -1
- package/dist/ui/state/use-model-state.js +24 -17
- package/dist/ui/state/use-model-state.js.map +1 -1
- package/dist/ui/state/use-processing-state.js.map +1 -1
- package/dist/ui/state/use-queue-state.d.ts +4 -3
- package/dist/ui/state/use-queue-state.d.ts.map +1 -1
- package/dist/ui/state/use-queue-state.js +11 -8
- package/dist/ui/state/use-queue-state.js.map +1 -1
- package/dist/ui/state/use-session-init.d.ts +4 -0
- package/dist/ui/state/use-session-init.d.ts.map +1 -1
- package/dist/ui/state/use-session-init.js +19 -3
- package/dist/ui/state/use-session-init.js.map +1 -1
- package/dist/ui/state/use-transcript-state.d.ts +6 -3
- package/dist/ui/state/use-transcript-state.d.ts.map +1 -1
- package/dist/ui/state/use-transcript-state.js +27 -15
- package/dist/ui/state/use-transcript-state.js.map +1 -1
- package/dist/ui/status-bar.d.ts +3 -2
- package/dist/ui/status-bar.d.ts.map +1 -1
- package/dist/ui/status-bar.js +3 -3
- package/dist/ui/status-bar.js.map +1 -1
- package/dist/ui/tool-output-cache.d.ts +12 -0
- package/dist/ui/tool-output-cache.d.ts.map +1 -0
- package/dist/ui/tool-output-cache.js +27 -0
- package/dist/ui/tool-output-cache.js.map +1 -0
- package/dist/ui/tool-output-commands.d.ts +3 -0
- package/dist/ui/tool-output-commands.d.ts.map +1 -0
- package/dist/ui/tool-output-commands.js +37 -0
- package/dist/ui/tool-output-commands.js.map +1 -0
- package/dist/ui/tool-output-wrap.d.ts +3 -0
- package/dist/ui/tool-output-wrap.d.ts.map +1 -0
- package/dist/ui/tool-output-wrap.js +24 -0
- package/dist/ui/tool-output-wrap.js.map +1 -0
- package/dist/ui/tool-progress.d.ts +23 -0
- package/dist/ui/tool-progress.d.ts.map +1 -0
- package/dist/ui/tool-progress.js +42 -0
- package/dist/ui/tool-progress.js.map +1 -0
- package/dist/ui/types.d.ts +8 -0
- package/dist/ui/types.d.ts.map +1 -1
- package/dist/ui/workflow-progress.d.ts +21 -0
- package/dist/ui/workflow-progress.d.ts.map +1 -0
- package/dist/ui/workflow-progress.js +107 -0
- package/dist/ui/workflow-progress.js.map +1 -0
- package/dist/version-check.js.map +1 -1
- package/package.json +21 -12
- package/scripts/verify-runlog.mjs +208 -0
package/README.md
CHANGED
|
@@ -7,18 +7,18 @@ npm install -g @calliopelabs/cli
|
|
|
7
7
|
calliope
|
|
8
8
|
```
|
|
9
9
|
|
|
10
|
-
Single-binary installs
|
|
11
|
-
|
|
10
|
+
Single-binary installs are available through Homebrew and a `curl` installer,
|
|
11
|
+
with no Node.js required — see
|
|
12
12
|
[Install as a single binary](docs/getting-started.md#install-as-a-single-binary).
|
|
13
13
|
|
|
14
14
|
## Why Calliope
|
|
15
15
|
|
|
16
|
-
- **Any backend, live-discovered.**
|
|
16
|
+
- **Any backend, live-discovered.** Hosted providers, local runtimes, and OpenAI-compatible servers share the same workflow. Models and capabilities are discovered from provider APIs; unsupported or unknown behavior stays explicit. See the [provider matrix and real-wire evidence](docs/provider-conformance.md).
|
|
17
17
|
- **Built for models you run yourself.** Ollama and self-hosted OpenAI-compatible servers are first-class targets, not checkboxes. Run fully air-gapped.
|
|
18
18
|
- **Sandbox-first execution.** Shell and code tools run inside macOS Seatbelt or Docker sandboxes (`auto`/`native`/`docker`/`off`). Blocklists are advisory; the sandbox is the boundary.
|
|
19
19
|
- **Safety rails that survive long sessions.** Circuit breakers, iteration budgets, git-based checkpoints with `/restore`, and automatic context compaction.
|
|
20
20
|
- **Governance built in.** Tamper-evident audit run logs (on by default), a `replay` command to inspect and verify them, budget caps that halt a run before it overspends, and a pre-tool policy hook for an external allow/deny engine. See [docs/governance.md](docs/governance.md).
|
|
21
|
-
- **
|
|
21
|
+
- **Focused command surface.** 23 commands, plus optional fleet mode. The [command reference](docs/commands.md) documents the available workflows and subcommands.
|
|
22
22
|
- **Tested like infrastructure.** 3,500 tests, 93%+ line coverage with an enforced 90% floor.
|
|
23
23
|
|
|
24
24
|
## Quick start
|
|
@@ -32,7 +32,9 @@ Inside a session:
|
|
|
32
32
|
|
|
33
33
|
```
|
|
34
34
|
/mode plan think first — the agent proposes, you approve
|
|
35
|
+
/mode auto execute without per-tool approval prompts this session
|
|
35
36
|
/model list see live-discovered models for your provider
|
|
37
|
+
/defaults save save the current provider/model for this project
|
|
36
38
|
/scope add ../lib widen file access deliberately
|
|
37
39
|
/compact compress context when it grows
|
|
38
40
|
/restore list git checkpoints; /restore <path> to roll back
|
|
@@ -45,6 +47,49 @@ Headless, for CI and scripts:
|
|
|
45
47
|
calliope --headless --json "run the tests and summarize failures"
|
|
46
48
|
```
|
|
47
49
|
|
|
50
|
+
Plan a project goal within a fixed budget, then approve the returned proposal hash:
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
calliope orchestrate "Inspect the parser and propose a focused fix" --cost 1 --json
|
|
54
|
+
calliope orchestrate approve GOAL_ID PROPOSAL_HASH --allow-mutations --json
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
Planning exits 5 for review; the [goal workflow](docs/goal-planning.md) documents
|
|
58
|
+
scope limits, approval, recovery and the JSON contract. `/orchestrate` presents
|
|
59
|
+
the proposed plan and approval dialog in the REPL.
|
|
60
|
+
|
|
61
|
+
Add [`--supervise --isolation-image sha256:ID`](docs/continuous-supervision.md#start-from-a-goal)
|
|
62
|
+
to propose an isolated work → verify → review → retry/replan loop. Choose separate
|
|
63
|
+
controller, worker and optional execution-reviewer models; the existing HUD shows
|
|
64
|
+
roles, task attempts and bounded supervision rounds. Planning remains read-only
|
|
65
|
+
and execution requires approval of the exact plan.
|
|
66
|
+
|
|
67
|
+
Execute a reviewed project task graph with bounded agents:
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
calliope run plan.json --dry-run --json
|
|
71
|
+
calliope run plan.json --allow-mutations --json
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
Independent tasks run concurrently with per-agent permissions and shared budgets.
|
|
75
|
+
Recorded artifact checks determine completion; unverified criteria require human
|
|
76
|
+
acceptance. See [coordinator execution](docs/coordinator-execution.md) for plan
|
|
77
|
+
contracts, provider requirements, cancellation and recovery.
|
|
78
|
+
|
|
79
|
+
Record and query project knowledge locally, without model requests:
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
calliope brain init --allow-mutations
|
|
83
|
+
calliope brain ingest docs/design.md --allow-mutations
|
|
84
|
+
calliope brain search "storage decision" --json
|
|
85
|
+
calliope kg graph
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
The [project brain](docs/project-brain.md) preserves source provenance, supports
|
|
89
|
+
human review and reversal, tracks stale documents, and links verified run evidence.
|
|
90
|
+
Use `/brain` and `/kg` for the same controls in the REPL.
|
|
91
|
+
|
|
92
|
+
|
|
48
93
|
## Configuration
|
|
49
94
|
|
|
50
95
|
One file, 16 keys. Credentials live in a per-provider map with environment-variable fallbacks:
|
|
@@ -63,7 +108,7 @@ One file, 16 keys. Credentials live in a per-provider map with environment-varia
|
|
|
63
108
|
|
|
64
109
|
`ANTHROPIC_API_KEY`, `OPENAI_API_KEY`, `OLLAMA_BASE_URL`, and friends work as before. v2 configs migrate automatically on first run.
|
|
65
110
|
|
|
66
|
-
Docs: [getting started](docs/getting-started.md) · [commands](docs/commands.md) · [configuration](docs/configuration.md) · [providers](docs/providers.md) · [features](docs/features.md) · [fleet mode](docs/fleet.md)
|
|
111
|
+
Docs: [getting started](docs/getting-started.md) · [commands](docs/commands.md) · [configuration](docs/configuration.md) · [model preferences](docs/model-preferences.md) · [providers](docs/providers.md) · [features](docs/features.md) · [fleet mode](docs/fleet.md)
|
|
67
112
|
|
|
68
113
|
## Editors
|
|
69
114
|
|
|
@@ -75,13 +120,15 @@ Coordinate a fleet of agents and human operators over a self-hosted IRC channel
|
|
|
75
120
|
|
|
76
121
|
## Project memory
|
|
77
122
|
|
|
78
|
-
|
|
123
|
+
Use `AGENTS.md` for portable repository instructions and `CALLIOPE.md` for project memory. Trusted instructions load from the checkout root to your working directory, with source paths and directory precedence. `/memory sources` shows applicable files; `/memory reload` refreshes them. See [repository instructions](docs/instructions.md).
|
|
79
124
|
|
|
80
125
|
## v3.0
|
|
81
126
|
|
|
82
127
|
v3 is a deliberate reduction: 84 commands, 40 config keys, and ~20k lines of speculative features (theme packs, companions, multi-agent orchestration, an embedded API server, and more) were removed to make the core fast, predictable, and maintainable. The full list and rationale live in [CHANGELOG.md](CHANGELOG.md) and the [v3.0 roadmap](https://github.com/calliopeai/calliope-cli/issues/195).
|
|
83
128
|
|
|
84
|
-
|
|
129
|
+
Single-binary installs, enforced performance budgets, governance, ACP editor integration, and local-model edit repair shipped in v3.0. See [docs/governance.md](docs/governance.md) and [docs/local-models.md](docs/local-models.md).
|
|
130
|
+
|
|
131
|
+
The [next-version roadmap](https://github.com/calliopeai/calliope-cli/issues/254) prioritizes consistent execution across providers, portable sessions and instructions, and measured task reliability. The [first implementation](https://github.com/calliopeai/calliope-cli/issues/255) adds cancellation through provider requests, retries and local processes, plus scoped `AGENTS.md` support. See [cancellation behavior](docs/features.md#cancellation).
|
|
85
132
|
|
|
86
133
|
## Contributing
|
|
87
134
|
|
package/dist/acp.d.ts
CHANGED
|
@@ -22,6 +22,7 @@
|
|
|
22
22
|
import { AgentSideConnection, type Agent, type Stream, type InitializeRequest, type InitializeResponse, type NewSessionRequest, type NewSessionResponse, type AuthenticateResponse, type PromptRequest, type PromptResponse, type CancelNotification } from '@zed-industries/agent-client-protocol';
|
|
23
23
|
declare class CalliopeAgent implements Agent {
|
|
24
24
|
private readonly conn;
|
|
25
|
+
private readonly approvals;
|
|
25
26
|
private clientCapabilities;
|
|
26
27
|
private readonly sessions;
|
|
27
28
|
/** Tail of the outgoing write chain; awaited to flush notifications. */
|
|
@@ -33,12 +34,8 @@ declare class CalliopeAgent implements Agent {
|
|
|
33
34
|
prompt(params: PromptRequest): Promise<PromptResponse>;
|
|
34
35
|
cancel(params: CancelNotification): Promise<void>;
|
|
35
36
|
private runTurn;
|
|
36
|
-
/** Flush pending notifications and return the cancelled stop reason. */
|
|
37
|
-
private finishCancelled;
|
|
38
|
-
private runToolCall;
|
|
39
37
|
/** Send a terminal (completed/failed) tool_call_update to the client. */
|
|
40
38
|
private reportToolResult;
|
|
41
|
-
private gateToolCall;
|
|
42
39
|
/**
|
|
43
40
|
* Ask the client to authorize a tool call. Returns the user's decision, or
|
|
44
41
|
* falls back to Calliope's non-interactive default (deny) when the client does
|
package/dist/acp.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acp.d.ts","sourceRoot":"","sources":["../src/acp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;
|
|
1
|
+
{"version":3,"file":"acp.d.ts","sourceRoot":"","sources":["../src/acp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAKH,OAAO,EACL,mBAAmB,EAInB,KAAK,KAAK,EACV,KAAK,MAAM,EAKX,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACxB,MAAM,uCAAuC,CAAC;AAuJ/C,cAAM,aAAc,YAAW,KAAK;IAOtB,OAAO,CAAC,QAAQ,CAAC,IAAI;IANjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAuB;IACjD,OAAO,CAAC,kBAAkB,CAA0B;IACpD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAiC;IAC1D,wEAAwE;IACxE,OAAO,CAAC,SAAS,CAAoC;IAErD,YAA6B,IAAI,EAAE,mBAAmB,EAAI;IAIpD,UAAU,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAoBvE;IAIK,YAAY,IAAI,OAAO,CAAC,oBAAoB,CAAC,CAElD;IAIK,UAAU,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA0CvE;IAIK,MAAM,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC,CA0B3D;IAIK,MAAM,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAOtD;YAIa,OAAO;IAsDrB,yEAAyE;IACzE,OAAO,CAAC,gBAAgB;IAkBxB;;;;OAIG;YACW,iBAAiB;IAkC/B;;;;;OAKG;IACH,OAAO,CAAC,gBAAgB;IAsBxB;;;;OAIG;IACH,OAAO,CAAC,IAAI;IAQZ,gDAAgD;IAChD,OAAO,CAAC,KAAK;IAIb,iEAAiE;IAC3D,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAM9B;CACF;AAMD;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,CAQtD;AAED;;;GAGG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,CAkBnD"}
|
package/dist/acp.js
CHANGED
|
@@ -19,20 +19,24 @@
|
|
|
19
19
|
* lazy-loaded from bin.ts only for the `acp` subcommand, so it adds nothing to the
|
|
20
20
|
* default cold-start path.
|
|
21
21
|
*/
|
|
22
|
+
import { ApprovalStore } from './approvals/index.js';
|
|
22
23
|
import * as path from 'node:path';
|
|
23
24
|
import { Readable, Writable } from 'node:stream';
|
|
24
25
|
import { AgentSideConnection, ndJsonStream, RequestError, PROTOCOL_VERSION, } from '@zed-industries/agent-client-protocol';
|
|
25
26
|
import * as config from './config.js';
|
|
26
|
-
import {
|
|
27
|
-
import {
|
|
28
|
-
import {
|
|
29
|
-
import {
|
|
27
|
+
import { selectProvider } from './providers/index.js';
|
|
28
|
+
import { runTurn } from './runtime/index.js';
|
|
29
|
+
import { createSession, saveSessionConversation } from './storage.js';
|
|
30
|
+
import { SessionRecoveryError } from './sessions/index.js';
|
|
31
|
+
import { resolvePreferences } from './preferences/index.js';
|
|
32
|
+
import { cancellable, isCancellation } from './cancellation.js';
|
|
33
|
+
import { TOOLS } from './tools.js';
|
|
34
|
+
import { DEFAULT_MODELS } from './types.js';
|
|
35
|
+
import { getSystemPromptForProvider } from './local-model.js';
|
|
30
36
|
import * as memory from './memory.js';
|
|
31
37
|
import { resolveIterationLimit } from './iteration-limit.js';
|
|
38
|
+
import { formatBudgetHalt } from './budget.js';
|
|
32
39
|
import { RunLog } from './runlog.js';
|
|
33
|
-
import { evaluatePolicy, isPolicyEnabled } from './policy.js';
|
|
34
|
-
import { assessToolRisk } from './risk.js';
|
|
35
|
-
import { checkHooksAllow } from './hooks.js';
|
|
36
40
|
// ============================================================================
|
|
37
41
|
// Diagnostics — stderr only (stdout carries the protocol).
|
|
38
42
|
// ============================================================================
|
|
@@ -61,23 +65,6 @@ function errMessage(err) {
|
|
|
61
65
|
// ============================================================================
|
|
62
66
|
// Tool → permission / presentation mapping
|
|
63
67
|
// ============================================================================
|
|
64
|
-
/**
|
|
65
|
-
* Tools with side effects. These always route through the permission flow (and
|
|
66
|
-
* are denied under the non-interactive fallback), matching the headless runner's
|
|
67
|
-
* notion of a mutating tool.
|
|
68
|
-
*/
|
|
69
|
-
const MUTATING_TOOLS = new Set(['shell', 'write_file', 'edit_file', 'git', 'execute_code', 'configure']);
|
|
70
|
-
/**
|
|
71
|
-
* Whether a tool call must ask the client for permission before running.
|
|
72
|
-
* Read-only tools (read_file, list_files, think, glob, grep, web_search) run
|
|
73
|
-
* silently; anything that mutates state or that Calliope's risk model flags for
|
|
74
|
-
* confirmation asks first.
|
|
75
|
-
*/
|
|
76
|
-
function toolNeedsPermission(toolCall) {
|
|
77
|
-
if (MUTATING_TOOLS.has(toolCall.name))
|
|
78
|
-
return true;
|
|
79
|
-
return assessToolRisk(toolCall).requiresConfirmation;
|
|
80
|
-
}
|
|
81
68
|
/** Map a Calliope tool name to the ACP tool kind (drives client icons/UX). */
|
|
82
69
|
function toolKind(name) {
|
|
83
70
|
switch (name) {
|
|
@@ -156,6 +143,7 @@ function promptToText(blocks) {
|
|
|
156
143
|
// ============================================================================
|
|
157
144
|
class CalliopeAgent {
|
|
158
145
|
conn;
|
|
146
|
+
approvals = new ApprovalStore();
|
|
159
147
|
clientCapabilities = {};
|
|
160
148
|
sessions = new Map();
|
|
161
149
|
/** Tail of the outgoing write chain; awaited to flush notifications. */
|
|
@@ -190,8 +178,14 @@ class CalliopeAgent {
|
|
|
190
178
|
// ---- ACP: session/new -------------------------------------------------
|
|
191
179
|
async newSession(params) {
|
|
192
180
|
const cwd = params.cwd || process.cwd();
|
|
193
|
-
|
|
194
|
-
|
|
181
|
+
let preference;
|
|
182
|
+
try {
|
|
183
|
+
preference = resolvePreferences(cwd);
|
|
184
|
+
}
|
|
185
|
+
catch (error) {
|
|
186
|
+
throw RequestError.invalidParams({ error: error instanceof Error ? error.message : String(error) });
|
|
187
|
+
}
|
|
188
|
+
const { provider } = preference, model = preference.model || '';
|
|
195
189
|
// Resolve the provider so 'auto' picks a real backend for the system prompt,
|
|
196
190
|
// cost model, and local-backend flag (mirrors the headless runner). Fall back
|
|
197
191
|
// to the raw provider if selection throws (chat() surfaces the real error).
|
|
@@ -202,18 +196,9 @@ class CalliopeAgent {
|
|
|
202
196
|
catch {
|
|
203
197
|
resolvedProvider = provider;
|
|
204
198
|
}
|
|
205
|
-
const localBackend = isLocalBackend(resolvedProvider);
|
|
206
199
|
const costModel = model || DEFAULT_MODELS[resolvedProvider];
|
|
207
|
-
const sessionId =
|
|
200
|
+
const sessionId = createSession(cwd, { activate: false, prefix: 'acp' }).id;
|
|
208
201
|
const runlog = RunLog.open(sessionId);
|
|
209
|
-
runlog.runStart({
|
|
210
|
-
session: sessionId,
|
|
211
|
-
cwd,
|
|
212
|
-
provider: resolvedProvider,
|
|
213
|
-
model: costModel,
|
|
214
|
-
config: config.getConfig(),
|
|
215
|
-
mode: 'acp',
|
|
216
|
-
});
|
|
217
202
|
const systemPrompt = getSystemPromptForProvider(resolvedProvider);
|
|
218
203
|
const memoryContext = memory.buildMemoryContext(cwd);
|
|
219
204
|
const fullPrompt = memoryContext.trim()
|
|
@@ -225,12 +210,11 @@ class CalliopeAgent {
|
|
|
225
210
|
provider,
|
|
226
211
|
resolvedProvider,
|
|
227
212
|
model,
|
|
228
|
-
|
|
213
|
+
preference,
|
|
214
|
+
revision: null,
|
|
229
215
|
messages: [{ role: 'system', content: fullPrompt }],
|
|
230
216
|
runlog,
|
|
231
217
|
cancelled: false,
|
|
232
|
-
totals: { inputTokens: 0, outputTokens: 0, cost: 0, toolCalls: 0 },
|
|
233
|
-
startedAt: Date.now(),
|
|
234
218
|
});
|
|
235
219
|
debug(`session/new: ${sessionId} cwd=${cwd} provider=${resolvedProvider} model=${costModel}`);
|
|
236
220
|
return { sessionId };
|
|
@@ -241,156 +225,108 @@ class CalliopeAgent {
|
|
|
241
225
|
if (!session) {
|
|
242
226
|
throw RequestError.invalidParams({ error: `unknown session: ${params.sessionId}` });
|
|
243
227
|
}
|
|
228
|
+
if (session.controller)
|
|
229
|
+
throw RequestError.invalidParams({ error: 'A prompt is already running in this session' });
|
|
230
|
+
session.controller = new AbortController();
|
|
244
231
|
// Each prompt is a fresh turn; clear any stale cancel from a prior turn.
|
|
245
232
|
session.cancelled = false;
|
|
246
233
|
const text = promptToText(params.prompt);
|
|
247
234
|
session.messages.push({ role: 'user', content: text });
|
|
248
|
-
session.runlog.userPrompt(text);
|
|
249
235
|
debug(`session/prompt: ${session.id} (${text.length} chars)`);
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
236
|
+
try {
|
|
237
|
+
session.activeTurn = this.runTurn(session, text);
|
|
238
|
+
const stopReason = await session.activeTurn;
|
|
239
|
+
return { stopReason };
|
|
240
|
+
}
|
|
241
|
+
catch (error) {
|
|
242
|
+
if (!(error instanceof SessionRecoveryError) && (session.cancelled || isCancellation(error)))
|
|
243
|
+
return { stopReason: 'cancelled' };
|
|
244
|
+
throw RequestError.internalError({ error: errMessage(error) });
|
|
245
|
+
}
|
|
246
|
+
finally {
|
|
247
|
+
try {
|
|
248
|
+
await session.runlog.flush();
|
|
249
|
+
}
|
|
250
|
+
finally {
|
|
251
|
+
session.controller = undefined;
|
|
252
|
+
session.activeTurn = undefined;
|
|
253
|
+
}
|
|
254
|
+
}
|
|
253
255
|
}
|
|
254
256
|
// ---- ACP: session/cancel (notification) -------------------------------
|
|
255
257
|
async cancel(params) {
|
|
256
258
|
const session = this.sessions.get(params.sessionId);
|
|
257
259
|
if (session) {
|
|
258
260
|
session.cancelled = true;
|
|
261
|
+
session.controller?.abort();
|
|
259
262
|
debug(`session/cancel: ${params.sessionId}`);
|
|
260
263
|
}
|
|
261
264
|
}
|
|
262
265
|
// ---- The agent loop (ACP-flavoured mirror of the headless loop) --------
|
|
263
|
-
async runTurn(session) {
|
|
264
|
-
const
|
|
265
|
-
|
|
266
|
-
let iteration = 0;
|
|
267
|
-
while (iteration < maxIterations) {
|
|
268
|
-
if (session.cancelled)
|
|
269
|
-
return this.finishCancelled(session);
|
|
270
|
-
iteration++;
|
|
271
|
-
// Stream assistant text as agent_message_chunk deltas via the chat seam.
|
|
272
|
-
let streamedChars = 0;
|
|
273
|
-
const onToken = (token) => {
|
|
274
|
-
if (!token)
|
|
275
|
-
return;
|
|
276
|
-
streamedChars += token.length;
|
|
277
|
-
this.emit(session.id, { sessionUpdate: 'agent_message_chunk', content: { type: 'text', text: token } });
|
|
278
|
-
};
|
|
279
|
-
let response;
|
|
280
|
-
try {
|
|
281
|
-
response = await chat(session.provider, session.messages, TOOLS, session.model || undefined, onToken);
|
|
282
|
-
}
|
|
283
|
-
catch (err) {
|
|
284
|
-
const msg = errMessage(err);
|
|
285
|
-
log(`chat error: ${msg}`);
|
|
286
|
-
session.runlog.assistantMessage({ content: `[error: ${msg}]`, tokens: { input: 0, output: 0 }, cost: 0 });
|
|
287
|
-
await session.runlog.flush();
|
|
288
|
-
throw RequestError.internalError({ error: msg });
|
|
289
|
-
}
|
|
290
|
-
// Audit + spend accounting (mirrors headless).
|
|
291
|
-
if (response.usage) {
|
|
292
|
-
const cost = calculateCost(costModel, response.usage.inputTokens, response.usage.outputTokens);
|
|
293
|
-
session.totals.inputTokens += response.usage.inputTokens;
|
|
294
|
-
session.totals.outputTokens += response.usage.outputTokens;
|
|
295
|
-
session.totals.cost += cost;
|
|
296
|
-
session.runlog.assistantMessage({
|
|
297
|
-
content: response.content,
|
|
298
|
-
tokens: { input: response.usage.inputTokens, output: response.usage.outputTokens },
|
|
299
|
-
cost,
|
|
300
|
-
});
|
|
301
|
-
}
|
|
302
|
-
else {
|
|
303
|
-
session.runlog.assistantMessage({ content: response.content, tokens: { input: 0, output: 0 }, cost: 0 });
|
|
304
|
-
}
|
|
305
|
-
// Providers that don't stream: emit the assembled content once so the
|
|
306
|
-
// client still sees the assistant message.
|
|
307
|
-
if (streamedChars === 0 && response.content) {
|
|
308
|
-
this.emit(session.id, { sessionUpdate: 'agent_message_chunk', content: { type: 'text', text: response.content } });
|
|
309
|
-
}
|
|
310
|
-
if (session.cancelled)
|
|
311
|
-
return this.finishCancelled(session);
|
|
312
|
-
if (response.toolCalls && response.toolCalls.length > 0) {
|
|
313
|
-
session.messages.push({ role: 'assistant', content: response.content, toolCalls: response.toolCalls });
|
|
314
|
-
for (const toolCall of response.toolCalls) {
|
|
315
|
-
if (session.cancelled)
|
|
316
|
-
return this.finishCancelled(session);
|
|
317
|
-
const outcome = await this.runToolCall(session, toolCall);
|
|
318
|
-
if (outcome === 'cancelled')
|
|
319
|
-
return this.finishCancelled(session);
|
|
320
|
-
}
|
|
321
|
-
continue; // next model turn
|
|
322
|
-
}
|
|
323
|
-
// No tool calls: this is the final assistant message → end of turn.
|
|
324
|
-
session.messages.push({ role: 'assistant', content: response.content });
|
|
325
|
-
await this.flush();
|
|
326
|
-
return response.finishReason === 'length' ? 'max_tokens' : 'end_turn';
|
|
327
|
-
}
|
|
328
|
-
// Exhausted the iteration budget.
|
|
329
|
-
await this.flush();
|
|
330
|
-
return 'max_turn_requests';
|
|
331
|
-
}
|
|
332
|
-
/** Flush pending notifications and return the cancelled stop reason. */
|
|
333
|
-
async finishCancelled(session) {
|
|
334
|
-
debug(`turn cancelled: ${session.id}`);
|
|
335
|
-
await this.flush();
|
|
336
|
-
return 'cancelled';
|
|
337
|
-
}
|
|
338
|
-
// ---- One tool call: announce → gate → execute → report ----------------
|
|
339
|
-
async runToolCall(session, toolCall) {
|
|
340
|
-
session.runlog.toolCall({ id: toolCall.id, name: toolCall.name, args: toolCall.arguments });
|
|
341
|
-
session.totals.toolCalls++;
|
|
342
|
-
// Announce the pending tool call.
|
|
343
|
-
await this.emit(session.id, {
|
|
344
|
-
sessionUpdate: 'tool_call',
|
|
345
|
-
toolCallId: toolCall.id,
|
|
346
|
-
title: toolTitle(toolCall),
|
|
347
|
-
kind: toolKind(toolCall.name),
|
|
348
|
-
status: 'pending',
|
|
349
|
-
rawInput: toolCall.arguments,
|
|
350
|
-
locations: toolLocations(toolCall, session.cwd),
|
|
351
|
-
});
|
|
352
|
-
// Permission + hard governance gates.
|
|
353
|
-
const gate = await this.gateToolCall(session, toolCall);
|
|
354
|
-
if (gate.decision === 'cancelled') {
|
|
355
|
-
await this.reportToolResult(session, toolCall.id, '[cancelled]', true);
|
|
356
|
-
session.runlog.toolResult({ id: toolCall.id, result: '[cancelled]', isError: true, durationMs: 0 });
|
|
357
|
-
session.messages.push({ role: 'tool', content: '[cancelled]', toolCallId: toolCall.id });
|
|
358
|
-
return 'cancelled';
|
|
359
|
-
}
|
|
360
|
-
if (gate.decision === 'deny') {
|
|
361
|
-
await this.reportToolResult(session, toolCall.id, gate.reason, true);
|
|
362
|
-
session.runlog.toolResult({ id: toolCall.id, result: gate.reason, isError: true, durationMs: 0 });
|
|
363
|
-
session.messages.push({ role: 'tool', content: gate.reason, toolCallId: toolCall.id });
|
|
364
|
-
return 'ok';
|
|
365
|
-
}
|
|
366
|
-
// Allowed: mark in-progress and execute through the shared tool runtime,
|
|
367
|
-
// preferring the client's filesystem when it advertised fs capabilities.
|
|
368
|
-
await this.emit(session.id, { sessionUpdate: 'tool_call_update', toolCallId: toolCall.id, status: 'in_progress' });
|
|
369
|
-
const started = Date.now();
|
|
370
|
-
let result;
|
|
266
|
+
async runTurn(session, prompt) {
|
|
267
|
+
const messages = { current: session.messages };
|
|
268
|
+
let streamedChars = 0;
|
|
371
269
|
try {
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
270
|
+
for (const warning of session.preference.warnings)
|
|
271
|
+
await this.emit(session.id, { sessionUpdate: 'agent_thought_chunk', content: { type: 'text', text: `[Warning: ${warning}]\n` } });
|
|
272
|
+
const result = await runTurn({
|
|
273
|
+
captureToolOutput: true,
|
|
274
|
+
client: 'acp',
|
|
275
|
+
onSafetyBranch: async () => {
|
|
276
|
+
const { branchSession } = await import('./session-management/index.js');
|
|
277
|
+
const branch = await branchSession(session.id, { kind: 'safety', signal: session.controller?.signal, runlog: session.runlog });
|
|
278
|
+
await this.emit(session.id, { sessionUpdate: 'agent_thought_chunk', content: { type: 'text', text: `Recovery conversation branch: ${branch.session.id}\n` } });
|
|
279
|
+
},
|
|
280
|
+
onCheckpoint: (history, status) => {
|
|
281
|
+
const saved = saveSessionConversation(session.id, history, { expectedRevision: session.revision, status });
|
|
282
|
+
session.revision = saved.revision;
|
|
283
|
+
session.runlog.sessionCheckpoint({ revision: saved.revision, status, messageCount: saved.messages.length, checksum: saved.checksum });
|
|
284
|
+
},
|
|
285
|
+
sessionId: session.id, cwd: session.cwd, provider: session.provider,
|
|
286
|
+
model: session.model || undefined, prompt, messages, signal: session.controller?.signal,
|
|
287
|
+
preferenceSources: session.preference.sources,
|
|
288
|
+
runlog: session.runlog, maxIterations: resolveIterationLimit(config.get('maxIterations')),
|
|
289
|
+
confirmation: 'mutating', approvals: this.approvals, tools: () => TOOLS, toolOptions: { fs: this.clientFsDelegate(session.id) },
|
|
290
|
+
prepare: async (request) => { streamedChars = 0; return request; },
|
|
291
|
+
approve: (call, decision) => this.requestPermission(session, call, decision.request?.reusable ?? false),
|
|
292
|
+
onToken: token => {
|
|
293
|
+
if (!token || session.cancelled)
|
|
294
|
+
return;
|
|
295
|
+
streamedChars += token.length;
|
|
296
|
+
void this.emit(session.id, { sessionUpdate: 'agent_message_chunk', content: { type: 'text', text: token } });
|
|
297
|
+
},
|
|
298
|
+
onResponse: async (response) => {
|
|
299
|
+
if (!streamedChars && response.content)
|
|
300
|
+
await this.emit(session.id, { sessionUpdate: 'agent_message_chunk', content: { type: 'text', text: response.content } });
|
|
301
|
+
},
|
|
302
|
+
onToolStart: async (call) => {
|
|
303
|
+
await this.emit(session.id, { sessionUpdate: 'tool_call', toolCallId: call.id, title: toolTitle(call), kind: toolKind(call.name), status: 'pending', rawInput: call.arguments });
|
|
304
|
+
},
|
|
305
|
+
beforeTool: async (call) => { await this.emit(session.id, { sessionUpdate: 'tool_call_update', toolCallId: call.id, status: 'in_progress' }); },
|
|
306
|
+
onToolResult: async (call, value) => { await this.reportToolResult(session, call.id, value.displayResult || value.result, !!value.isError, value.result); },
|
|
307
|
+
onWarning: warning => { void this.emit(session.id, { sessionUpdate: 'agent_message_chunk', content: { type: 'text', text: `\n[Warning: ${warning}]\n` } }); },
|
|
308
|
+
onRoute: decision => {
|
|
309
|
+
if (decision.selected)
|
|
310
|
+
session.resolvedProvider = decision.selected.provider;
|
|
311
|
+
void this.emit(session.id, { sessionUpdate: 'agent_thought_chunk', content: { type: 'text', text: `\n[Route: ${decision.selected ? `${decision.selected.provider}/${decision.selected.model}` : 'unavailable'}; ${decision.reason}]\n` } });
|
|
312
|
+
},
|
|
375
313
|
});
|
|
314
|
+
if (result.budget?.exceeded)
|
|
315
|
+
await this.emit(session.id, { sessionUpdate: 'agent_message_chunk', content: { type: 'text', text: formatBudgetHalt(result.budget) } });
|
|
316
|
+
await this.flush();
|
|
317
|
+
if (result.reason === 'cancelled')
|
|
318
|
+
return 'cancelled';
|
|
319
|
+
if (result.reason === 'budget')
|
|
320
|
+
return 'refusal';
|
|
321
|
+
if (result.reason === 'iteration_limit')
|
|
322
|
+
return 'max_turn_requests';
|
|
323
|
+
if (result.reason === 'length')
|
|
324
|
+
return 'max_tokens';
|
|
325
|
+
return 'end_turn';
|
|
376
326
|
}
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
toolCallId: toolCall.id,
|
|
380
|
-
result: `Error: ${errMessage(err)}`,
|
|
381
|
-
isError: true,
|
|
382
|
-
};
|
|
327
|
+
finally {
|
|
328
|
+
session.messages = messages.current;
|
|
383
329
|
}
|
|
384
|
-
const durationMs = Date.now() - started;
|
|
385
|
-
session.runlog.toolResult({
|
|
386
|
-
id: toolCall.id,
|
|
387
|
-
result: result.result,
|
|
388
|
-
isError: result.isError || false,
|
|
389
|
-
durationMs,
|
|
390
|
-
});
|
|
391
|
-
await this.reportToolResult(session, toolCall.id, result.displayResult || result.result, result.isError || false, result.result);
|
|
392
|
-
session.messages.push({ role: 'tool', content: result.result, toolCallId: toolCall.id });
|
|
393
|
-
return 'ok';
|
|
394
330
|
}
|
|
395
331
|
/** Send a terminal (completed/failed) tool_call_update to the client. */
|
|
396
332
|
reportToolResult(session, toolCallId, text, isError, rawResult) {
|
|
@@ -403,46 +339,14 @@ class CalliopeAgent {
|
|
|
403
339
|
});
|
|
404
340
|
}
|
|
405
341
|
// ---- Gates: permission, then the hard hooks -------------------------
|
|
406
|
-
async gateToolCall(session, toolCall) {
|
|
407
|
-
// 1. Permission via the client (only for mutating / confirm-worthy tools).
|
|
408
|
-
if (toolNeedsPermission(toolCall)) {
|
|
409
|
-
const permission = await this.requestPermission(session, toolCall);
|
|
410
|
-
if (permission === 'cancelled')
|
|
411
|
-
return { decision: 'cancelled' };
|
|
412
|
-
if (permission === 'reject')
|
|
413
|
-
return { decision: 'deny', reason: '[Permission denied by user]' };
|
|
414
|
-
// 'allow' falls through to the hard gates below.
|
|
415
|
-
}
|
|
416
|
-
// 2. Pre-tool hooks — the hard gate, runs regardless of permission (exit-42
|
|
417
|
-
// veto contract; see hooks.ts / docs/governance.md).
|
|
418
|
-
const hookGate = await checkHooksAllow('pre-tool', { tool: toolCall.name, toolArgs: toolCall.arguments });
|
|
419
|
-
if (!hookGate.allowed) {
|
|
420
|
-
return { decision: 'deny', reason: `[Blocked by hook: ${hookGate.reason || 'no reason given'}]` };
|
|
421
|
-
}
|
|
422
|
-
// 3. Policy hook — the Zentinelle integration point (fail closed).
|
|
423
|
-
if (isPolicyEnabled()) {
|
|
424
|
-
const verdict = await evaluatePolicy(toolCall);
|
|
425
|
-
session.runlog.policyEvent({
|
|
426
|
-
tool: toolCall.name,
|
|
427
|
-
decision: verdict.decision,
|
|
428
|
-
source: verdict.source,
|
|
429
|
-
reason: verdict.reason,
|
|
430
|
-
durationMs: verdict.durationMs,
|
|
431
|
-
});
|
|
432
|
-
if (verdict.decision === 'deny') {
|
|
433
|
-
return { decision: 'deny', reason: `[Policy denied: ${verdict.reason || 'no reason given'}]` };
|
|
434
|
-
}
|
|
435
|
-
}
|
|
436
|
-
return { decision: 'allow' };
|
|
437
|
-
}
|
|
438
342
|
/**
|
|
439
343
|
* Ask the client to authorize a tool call. Returns the user's decision, or
|
|
440
344
|
* falls back to Calliope's non-interactive default (deny) when the client does
|
|
441
345
|
* not support the permission request at all.
|
|
442
346
|
*/
|
|
443
|
-
async requestPermission(session, toolCall) {
|
|
347
|
+
async requestPermission(session, toolCall, reusable) {
|
|
444
348
|
try {
|
|
445
|
-
const res = await this.conn.requestPermission({
|
|
349
|
+
const res = await cancellable(this.conn.requestPermission({
|
|
446
350
|
sessionId: session.id,
|
|
447
351
|
toolCall: {
|
|
448
352
|
toolCallId: toolCall.id,
|
|
@@ -452,18 +356,20 @@ class CalliopeAgent {
|
|
|
452
356
|
},
|
|
453
357
|
options: [
|
|
454
358
|
{ optionId: 'allow', name: 'Allow', kind: 'allow_once' },
|
|
455
|
-
{ optionId: 'allow_always', name: '
|
|
359
|
+
...(reusable ? [{ optionId: 'allow_always', name: 'Allow this exact operation for this session', kind: 'allow_always' }] : []),
|
|
456
360
|
{ optionId: 'reject', name: 'Reject', kind: 'reject_once' },
|
|
457
361
|
],
|
|
458
|
-
});
|
|
362
|
+
}), session.controller?.signal);
|
|
459
363
|
const outcome = res.outcome;
|
|
460
364
|
if (outcome.outcome === 'cancelled')
|
|
461
365
|
return 'cancelled';
|
|
462
366
|
if (outcome.outcome === 'selected')
|
|
463
|
-
return outcome.optionId
|
|
367
|
+
return outcome.optionId === 'allow' ? 'allow' : outcome.optionId === 'allow_always' && reusable ? 'allow_session' : 'reject';
|
|
464
368
|
return 'reject';
|
|
465
369
|
}
|
|
466
370
|
catch (err) {
|
|
371
|
+
if (session.cancelled || isCancellation(err))
|
|
372
|
+
return 'cancelled';
|
|
467
373
|
// Client can't handle permission requests: non-interactive default is to
|
|
468
374
|
// deny anything that needed asking (read-only tools never reach here).
|
|
469
375
|
log(`requestPermission unavailable (${errMessage(err)}); ` +
|
|
@@ -517,16 +423,11 @@ class CalliopeAgent {
|
|
|
517
423
|
/** Close every session's audit log (best-effort) on shutdown. */
|
|
518
424
|
async shutdown() {
|
|
519
425
|
for (const session of this.sessions.values()) {
|
|
520
|
-
session.
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
toolCalls: session.totals.toolCalls,
|
|
526
|
-
durationMs: Date.now() - session.startedAt,
|
|
527
|
-
},
|
|
528
|
-
exitReason: session.cancelled ? 'cancelled' : 'completed',
|
|
529
|
-
});
|
|
426
|
+
if (session.controller) {
|
|
427
|
+
session.cancelled = true;
|
|
428
|
+
session.controller.abort();
|
|
429
|
+
}
|
|
430
|
+
await session.activeTurn?.catch(() => { });
|
|
530
431
|
await session.runlog.close();
|
|
531
432
|
}
|
|
532
433
|
}
|