@wjarka/cezarion 0.16.0 → 0.17.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/LICENSE +1 -0
- package/README.md +594 -207
- package/dist/agent-config/account-identity.d.ts +3 -19
- package/dist/agent-config/account-identity.js +8 -5
- package/dist/agent-config/account-identity.js.map +1 -1
- package/dist/agent-config/catalog.d.ts +3 -14
- package/dist/agent-config/catalog.js.map +1 -1
- package/dist/agent-config/files.d.ts +2 -6
- package/dist/agent-config/files.js +2 -6
- package/dist/agent-config/files.js.map +1 -1
- package/dist/agent-config/model-settings/types.d.ts +1 -1
- package/dist/agent-config/seed.d.ts +11 -3
- package/dist/agent-config/seed.js +52 -48
- package/dist/agent-config/seed.js.map +1 -1
- package/dist/agent-config/service.js +3 -2
- package/dist/agent-config/service.js.map +1 -1
- package/dist/agent-config/validate.d.ts +1 -4
- package/dist/agent-config/validate.js.map +1 -1
- package/dist/application-update/helper.d.ts +2 -2
- package/dist/application-update/helper.js +7 -12
- package/dist/application-update/helper.js.map +1 -1
- package/dist/application-update/launcher.d.ts +4 -0
- package/dist/application-update/launcher.js +18 -12
- package/dist/application-update/launcher.js.map +1 -1
- package/dist/application-update/service.d.ts +3 -3
- package/dist/application-update/service.js +1 -1
- package/dist/application-update/service.js.map +1 -1
- package/dist/archive-on-merge-setting.d.ts +15 -0
- package/dist/archive-on-merge-setting.js +14 -0
- package/dist/archive-on-merge-setting.js.map +1 -0
- package/dist/artifacts/cli.d.ts +8 -0
- package/dist/artifacts/cli.js +21 -2
- package/dist/artifacts/cli.js.map +1 -1
- package/dist/artifacts/resolve.js +2 -1
- package/dist/artifacts/resolve.js.map +1 -1
- package/dist/artifacts/store.js.map +1 -1
- package/dist/automations/automation-cli.d.ts +59 -0
- package/dist/automations/automation-cli.js +509 -0
- package/dist/automations/automation-cli.js.map +1 -0
- package/dist/automations/builtin-skill.d.ts +7 -0
- package/dist/automations/builtin-skill.js +14 -0
- package/dist/automations/builtin-skill.js.map +1 -0
- package/dist/automations/github-baseline.d.ts +3 -0
- package/dist/automations/github-baseline.js +17 -0
- package/dist/automations/github-baseline.js.map +1 -0
- package/dist/automations/github-poller.d.ts +23 -4
- package/dist/automations/github-poller.js +157 -88
- package/dist/automations/github-poller.js.map +1 -1
- package/dist/automations/prompts.d.ts +12 -0
- package/dist/automations/prompts.js +160 -0
- package/dist/automations/prompts.js.map +1 -0
- package/dist/automations/schedule-runner.d.ts +43 -24
- package/dist/automations/schedule-runner.js +207 -20
- package/dist/automations/schedule-runner.js.map +1 -1
- package/dist/automations/scheduler.d.ts +10 -2
- package/dist/automations/scheduler.js +200 -54
- package/dist/automations/scheduler.js.map +1 -1
- package/dist/automations/service.d.ts +777 -0
- package/dist/automations/service.js +444 -0
- package/dist/automations/service.js.map +1 -0
- package/dist/automations/store.d.ts +17 -7
- package/dist/automations/store.js +88 -17
- package/dist/automations/store.js.map +1 -1
- package/dist/automations/task-template.d.ts +7 -2
- package/dist/automations/task-template.js +93 -44
- package/dist/automations/task-template.js.map +1 -1
- package/dist/automations/tool-adapter.d.ts +6 -0
- package/dist/automations/tool-adapter.js +108 -0
- package/dist/automations/tool-adapter.js.map +1 -0
- package/dist/automations/types.d.ts +1 -405
- package/dist/automations/types.js +1 -218
- package/dist/automations/types.js.map +1 -1
- package/dist/autosave-cleanup.d.ts +26 -0
- package/dist/autosave-cleanup.js +87 -0
- package/dist/autosave-cleanup.js.map +1 -0
- package/dist/autosave-git.d.ts +3 -0
- package/dist/autosave-git.js +67 -35
- package/dist/autosave-git.js.map +1 -1
- package/dist/autosave-group.d.ts +8 -0
- package/dist/autosave-group.js +61 -0
- package/dist/autosave-group.js.map +1 -0
- package/dist/autosave-holders.d.ts +31 -4
- package/dist/autosave-holders.js +92 -7
- package/dist/autosave-holders.js.map +1 -1
- package/dist/autosave-windows.d.ts +14 -0
- package/dist/autosave-windows.js +36 -2
- package/dist/autosave-windows.js.map +1 -1
- package/dist/ci-wait/client.d.ts +20 -3
- package/dist/ci-wait/client.js +40 -44
- package/dist/ci-wait/client.js.map +1 -1
- package/dist/ci-wait/controller.d.ts +622 -36
- package/dist/ci-wait/controller.js +152 -20
- package/dist/ci-wait/controller.js.map +1 -1
- package/dist/ci-wait/errors.d.ts +19 -0
- package/dist/ci-wait/errors.js +180 -2
- package/dist/ci-wait/errors.js.map +1 -1
- package/dist/ci-wait/github.d.ts +25 -1
- package/dist/ci-wait/github.js +76 -9
- package/dist/ci-wait/github.js.map +1 -1
- package/dist/ci-wait/mcp.d.ts +0 -1
- package/dist/ci-wait/mcp.js +0 -2
- package/dist/ci-wait/mcp.js.map +1 -1
- package/dist/ci-wait/supervisor.d.ts +7 -0
- package/dist/ci-wait/supervisor.js +113 -17
- package/dist/ci-wait/supervisor.js.map +1 -1
- package/dist/ci-wait/tools.d.ts +536 -16
- package/dist/ci-wait/tools.js +165 -20
- package/dist/ci-wait/tools.js.map +1 -1
- package/dist/config.d.ts +3 -17
- package/dist/config.js +4 -60
- package/dist/config.js.map +1 -1
- package/dist/contract/active-provider.d.ts +12 -0
- package/dist/contract/agent-profiles.d.ts +2 -10
- package/dist/contract/ask-schema.d.ts +22 -4
- package/dist/contract/ask.d.ts +6 -4
- package/dist/contract/attachments.d.ts +35 -0
- package/dist/contract/attention.d.ts +46 -37
- package/dist/contract/automation-requests.d.ts +308 -0
- package/dist/contract/automation-schedule.d.ts +40 -11
- package/dist/contract/automation-storage.d.ts +512 -0
- package/dist/contract/automations.d.ts +421 -40
- package/dist/contract/ci-wait.d.ts +41 -4
- package/dist/contract/config-requests.d.ts +36 -0
- package/dist/contract/conversations.d.ts +24 -10
- package/dist/contract/defined.d.ts +8 -0
- package/dist/contract/delegation.d.ts +312 -8
- package/dist/contract/events.d.ts +24 -3
- package/dist/contract/github-requests.d.ts +26 -0
- package/dist/contract/github.d.ts +60 -27
- package/dist/contract/handoff.d.ts +43 -0
- package/dist/contract/health.d.ts +2 -2
- package/dist/contract/image-path.d.ts +6 -0
- package/dist/contract/index.d.ts +31 -0
- package/dist/contract/index.js +3756 -1525
- package/dist/contract/live-coordination.d.ts +158 -0
- package/dist/contract/live-limits.d.ts +8 -0
- package/dist/contract/live.d.ts +123 -0
- package/dist/contract/pending-ask.d.ts +58 -0
- package/dist/contract/permissions.d.ts +54 -0
- package/dist/contract/preview.d.ts +33 -0
- package/dist/contract/project-limits.d.ts +33 -0
- package/dist/contract/projects.d.ts +486 -20
- package/dist/contract/provider-requests.d.ts +77 -0
- package/dist/contract/query-requests.d.ts +52 -0
- package/dist/contract/repo-requests.d.ts +12 -0
- package/dist/contract/run-labels.d.ts +8 -0
- package/dist/contract/run-limits.d.ts +8 -0
- package/dist/contract/run-predicates.d.ts +32 -0
- package/dist/contract/run-requests.d.ts +33 -0
- package/dist/contract/run-search.d.ts +193 -0
- package/dist/contract/runs.d.ts +2232 -1894
- package/dist/contract/scheduled-tasks.d.ts +187 -0
- package/dist/contract/skills.d.ts +22 -772
- package/dist/contract/team-skill-ref.d.ts +10 -0
- package/dist/{core → contract}/tool-display.d.ts +4 -10
- package/dist/contract/ui-state-requests.d.ts +60 -0
- package/dist/contract/version.d.ts +3 -0
- package/dist/contract/voice.d.ts +213 -0
- package/dist/contract/waits.d.ts +1204 -0
- package/dist/contract/workflow-file.d.ts +37 -0
- package/dist/contract/workflow-requests.d.ts +7 -0
- package/dist/contract/workflows.d.ts +1 -2
- package/dist/contract/workspace.d.ts +34 -82
- package/dist/contract/zoned-time.d.ts +2 -11
- package/dist/core/agent-env.d.ts +4 -16
- package/dist/core/agent-env.js +14 -16
- package/dist/core/agent-env.js.map +1 -1
- package/dist/core/agent-profiles.d.ts +28 -40
- package/dist/core/agent-profiles.js +56 -51
- package/dist/core/agent-profiles.js.map +1 -1
- package/dist/core/agent-runner.d.ts +88 -44
- package/dist/core/agent-runner.js +17 -18
- package/dist/core/agent-runner.js.map +1 -1
- package/dist/core/ask.d.ts +3 -0
- package/dist/core/ask.js +12 -0
- package/dist/core/ask.js.map +1 -1
- package/dist/core/backend-detect.js +16 -2
- package/dist/core/backend-detect.js.map +1 -1
- package/dist/core/claude-cli-runner.d.ts +23 -4
- package/dist/core/claude-cli-runner.js +280 -76
- package/dist/core/claude-cli-runner.js.map +1 -1
- package/dist/core/claude-model-catalog.d.ts +2 -10
- package/dist/core/claude-model-catalog.js +2 -10
- package/dist/core/claude-model-catalog.js.map +1 -1
- package/dist/core/claude-ui-mapper.d.ts +2 -2
- package/dist/core/claude-ui-mapper.js +94 -2
- package/dist/core/claude-ui-mapper.js.map +1 -1
- package/dist/core/codex-app-server-runner.d.ts +3 -4
- package/dist/core/codex-app-server-runner.js +146 -51
- package/dist/core/codex-app-server-runner.js.map +1 -1
- package/dist/core/codex-app-server-transport.d.ts +4 -3
- package/dist/core/codex-app-server-transport.js +11 -7
- package/dist/core/codex-app-server-transport.js.map +1 -1
- package/dist/core/codex-approvals.d.ts +12 -0
- package/dist/core/codex-approvals.js +161 -0
- package/dist/core/codex-approvals.js.map +1 -0
- package/dist/core/codex-permissions.d.ts +1 -1
- package/dist/core/codex-ui-mapper.js +45 -1
- package/dist/core/codex-ui-mapper.js.map +1 -1
- package/dist/core/cursor-acp-runner.d.ts +1 -1
- package/dist/core/cursor-acp-runner.js +39 -15
- package/dist/core/cursor-acp-runner.js.map +1 -1
- package/dist/core/cursor-cli-flags.d.ts +19 -0
- package/dist/core/cursor-cli-flags.js +47 -0
- package/dist/core/cursor-cli-flags.js.map +1 -0
- package/dist/core/cursor-model-catalog.d.ts +22 -0
- package/dist/core/cursor-model-catalog.js +53 -24
- package/dist/core/cursor-model-catalog.js.map +1 -1
- package/dist/core/cursor-print-capabilities.d.ts +16 -0
- package/dist/core/cursor-print-capabilities.js +141 -0
- package/dist/core/cursor-print-capabilities.js.map +1 -0
- package/dist/core/cursor-print-process.d.ts +31 -0
- package/dist/core/cursor-print-process.js +117 -0
- package/dist/core/cursor-print-process.js.map +1 -0
- package/dist/core/cursor-print-runner.d.ts +31 -0
- package/dist/core/cursor-print-runner.js +555 -0
- package/dist/core/cursor-print-runner.js.map +1 -0
- package/dist/core/cursor-print-tool-catalog.d.ts +10 -0
- package/dist/core/cursor-print-tool-catalog.js +91 -0
- package/dist/core/cursor-print-tool-catalog.js.map +1 -0
- package/dist/core/cursor-print-ui-mapper.d.ts +47 -0
- package/dist/core/cursor-print-ui-mapper.js +553 -0
- package/dist/core/cursor-print-ui-mapper.js.map +1 -0
- package/dist/core/cursor-runner.d.ts +24 -0
- package/dist/core/cursor-runner.js +149 -0
- package/dist/core/cursor-runner.js.map +1 -0
- package/dist/core/cursor-ui-mapper.js +5 -2
- package/dist/core/cursor-ui-mapper.js.map +1 -1
- package/dist/core/defined.d.ts +1 -0
- package/dist/core/defined.js +2 -0
- package/dist/core/defined.js.map +1 -0
- package/dist/core/hook-items.d.ts +14 -0
- package/dist/core/hook-items.js +13 -0
- package/dist/core/hook-items.js.map +1 -0
- package/dist/core/host-model-catalog.d.ts +2 -9
- package/dist/core/host-model-catalog.js +2 -9
- package/dist/core/host-model-catalog.js.map +1 -1
- package/dist/core/managed-session.js +15 -3
- package/dist/core/managed-session.js.map +1 -1
- package/dist/core/model-identity.d.ts +4 -21
- package/dist/core/model-identity.js.map +1 -1
- package/dist/core/model-presets.d.ts +2 -13
- package/dist/core/model-presets.js +2 -13
- package/dist/core/model-presets.js.map +1 -1
- package/dist/core/omp-model-catalog.js.map +1 -1
- package/dist/core/omp-runner.d.ts +6 -7
- package/dist/core/omp-runner.js +92 -33
- package/dist/core/omp-runner.js.map +1 -1
- package/dist/core/omp-ui-mapper.js +1 -1
- package/dist/core/omp-ui-mapper.js.map +1 -1
- package/dist/core/opencode-model-catalog.js.map +1 -1
- package/dist/core/opencode-permissions.d.ts +52 -0
- package/dist/core/opencode-permissions.js +101 -0
- package/dist/core/opencode-permissions.js.map +1 -0
- package/dist/core/opencode-server-runner.d.ts +10 -9
- package/dist/core/opencode-server-runner.js +286 -28
- package/dist/core/opencode-server-runner.js.map +1 -1
- package/dist/core/opencode-session-error.d.ts +15 -7
- package/dist/core/opencode-session-error.js +25 -9
- package/dist/core/opencode-session-error.js.map +1 -1
- package/dist/core/opencode-ui-mapper.js +2 -2
- package/dist/core/opencode-ui-mapper.js.map +1 -1
- package/dist/core/pi-model-catalog.js.map +1 -1
- package/dist/core/pi-runner.d.ts +12 -4
- package/dist/core/pi-runner.js +171 -63
- package/dist/core/pi-runner.js.map +1 -1
- package/dist/core/pi-ui-mapper.js +1 -1
- package/dist/core/pi-ui-mapper.js.map +1 -1
- package/dist/core/process-usage.d.ts +5 -0
- package/dist/core/process-usage.js +24 -4
- package/dist/core/process-usage.js.map +1 -1
- package/dist/core/provider-auth.d.ts +16 -107
- package/dist/core/provider-auth.js +16 -132
- package/dist/core/provider-auth.js.map +1 -1
- package/dist/core/runner-factory.d.ts +4 -1
- package/dist/core/runner-factory.js +3 -3
- package/dist/core/runner-factory.js.map +1 -1
- package/dist/core/runner-runtime.d.ts +22 -0
- package/dist/core/runner-runtime.js +66 -5
- package/dist/core/runner-runtime.js.map +1 -1
- package/dist/core/runner-tool-grants.d.ts +21 -0
- package/dist/core/runner-tool-grants.js +64 -0
- package/dist/core/runner-tool-grants.js.map +1 -0
- package/dist/core/secret-redaction.d.ts +3 -20
- package/dist/core/secret-redaction.js +3 -20
- package/dist/core/secret-redaction.js.map +1 -1
- package/dist/core/session-process.d.ts +22 -2
- package/dist/core/session-process.js +170 -12
- package/dist/core/session-process.js.map +1 -1
- package/dist/core/shell-env.d.ts +2 -15
- package/dist/core/shell-env.js +2 -15
- package/dist/core/shell-env.js.map +1 -1
- package/dist/core/ui-events.d.ts +60 -47
- package/dist/core/ui-events.js +0 -23
- package/dist/core/ui-events.js.map +1 -1
- package/dist/core/usage-limit.js.map +1 -1
- package/dist/data-gitignore.js +3 -1
- package/dist/data-gitignore.js.map +1 -1
- package/dist/delegation/capacity.d.ts +4 -8
- package/dist/delegation/capacity.js +4 -8
- package/dist/delegation/capacity.js.map +1 -1
- package/dist/delegation/cli.js +123 -21
- package/dist/delegation/cli.js.map +1 -1
- package/dist/delegation/context.d.ts +19 -3
- package/dist/delegation/context.js +217 -22
- package/dist/delegation/context.js.map +1 -1
- package/dist/delegation/conversations.d.ts +4 -3
- package/dist/delegation/conversations.js +7 -5
- package/dist/delegation/conversations.js.map +1 -1
- package/dist/delegation/destroy-observation.d.ts +1 -1
- package/dist/delegation/destroy-observation.js.map +1 -1
- package/dist/delegation/effort.js.map +1 -1
- package/dist/delegation/execution-identity.d.ts +1 -1
- package/dist/delegation/execution-identity.js +41 -7
- package/dist/delegation/execution-identity.js.map +1 -1
- package/dist/delegation/idle-test-app.d.ts +4 -0
- package/dist/delegation/idle-test-app.js +174 -0
- package/dist/delegation/idle-test-app.js.map +1 -0
- package/dist/delegation/input.js.map +1 -1
- package/dist/delegation/park-notice.d.ts +42 -0
- package/dist/delegation/park-notice.js +71 -0
- package/dist/delegation/park-notice.js.map +1 -0
- package/dist/delegation/policy.d.ts +2 -0
- package/dist/delegation/policy.js +9 -1
- package/dist/delegation/policy.js.map +1 -1
- package/dist/delegation/process-liveness.d.ts +10 -15
- package/dist/delegation/process-liveness.js +11 -35
- package/dist/delegation/process-liveness.js.map +1 -1
- package/dist/delegation/provision.js +21 -19
- package/dist/delegation/provision.js.map +1 -1
- package/dist/delegation/questions.d.ts +3 -1
- package/dist/delegation/questions.js +10 -5
- package/dist/delegation/questions.js.map +1 -1
- package/dist/delegation/readiness.d.ts +2 -2
- package/dist/delegation/results.d.ts +4 -1
- package/dist/delegation/results.js +49 -18
- package/dist/delegation/results.js.map +1 -1
- package/dist/delegation/retry-backoff.d.ts +8 -0
- package/dist/delegation/retry-backoff.js +8 -0
- package/dist/delegation/retry-backoff.js.map +1 -1
- package/dist/delegation/routes.d.ts +114 -30
- package/dist/delegation/routes.js +4 -1
- package/dist/delegation/routes.js.map +1 -1
- package/dist/delegation/scratch-cleanup.d.ts +4 -5
- package/dist/delegation/scratch-cleanup.js +10 -8
- package/dist/delegation/scratch-cleanup.js.map +1 -1
- package/dist/delegation/service.d.ts +12 -4
- package/dist/delegation/service.js +76 -28
- package/dist/delegation/service.js.map +1 -1
- package/dist/delegation/transport.d.ts +154 -70
- package/dist/delegation/wait.d.ts +11 -0
- package/dist/delegation/wait.js +24 -0
- package/dist/delegation/wait.js.map +1 -1
- package/dist/delegation/windows-test-app.d.ts +5 -0
- package/dist/delegation/windows-test-app.js +63 -0
- package/dist/delegation/windows-test-app.js.map +1 -0
- package/dist/delegation/windows-workspace-identity.d.ts +3 -0
- package/dist/delegation/windows-workspace-identity.js +22 -0
- package/dist/delegation/windows-workspace-identity.js.map +1 -0
- package/dist/delegation/workspace.d.ts +5 -10
- package/dist/delegation/workspace.js +136 -75
- package/dist/delegation/workspace.js.map +1 -1
- package/dist/detached-process.d.ts +103 -0
- package/dist/detached-process.js +301 -0
- package/dist/detached-process.js.map +1 -0
- package/dist/discovery/catalog.d.ts +2 -1
- package/dist/discovery/catalog.js.map +1 -1
- package/dist/discovery/cli.js +3 -1
- package/dist/discovery/cli.js.map +1 -1
- package/dist/git-diff-base.d.ts +6 -61
- package/dist/git-diff-base.js +6 -70
- package/dist/git-diff-base.js.map +1 -1
- package/dist/git-index-copy.d.ts +4 -0
- package/dist/git-index-copy.js +10 -0
- package/dist/git-index-copy.js.map +1 -0
- package/dist/git-worktree-lock.d.ts +2 -4
- package/dist/git-worktree-lock.js +2 -4
- package/dist/git-worktree-lock.js.map +1 -1
- package/dist/git-worktree-release.d.ts +2 -2
- package/dist/git-worktree-release.js.map +1 -1
- package/dist/git-worktree.d.ts +47 -76
- package/dist/git-worktree.js +240 -94
- package/dist/git-worktree.js.map +1 -1
- package/dist/handoff.d.ts +51 -41
- package/dist/handoff.js +130 -78
- package/dist/handoff.js.map +1 -1
- package/dist/index.js +60 -39
- package/dist/index.js.map +1 -1
- package/dist/merge-observations.d.ts +13 -0
- package/dist/merge-observations.js +55 -0
- package/dist/merge-observations.js.map +1 -0
- package/dist/open-url.js +4 -14
- package/dist/open-url.js.map +1 -1
- package/dist/paths.d.ts +10 -13
- package/dist/paths.js +36 -17
- package/dist/paths.js.map +1 -1
- package/dist/planner.d.ts +2 -1
- package/dist/planner.js +9 -6
- package/dist/planner.js.map +1 -1
- package/dist/preview/agent-address.d.ts +34 -0
- package/dist/preview/agent-address.js +51 -0
- package/dist/preview/agent-address.js.map +1 -0
- package/dist/preview/agent-marker.d.ts +17 -0
- package/dist/preview/agent-marker.js +71 -0
- package/dist/preview/agent-marker.js.map +1 -0
- package/dist/preview/cdp-proxy.d.ts +54 -0
- package/dist/preview/cdp-proxy.js +151 -0
- package/dist/preview/cdp-proxy.js.map +1 -0
- package/dist/preview/cdp.d.ts +39 -3
- package/dist/preview/cdp.js +155 -57
- package/dist/preview/cdp.js.map +1 -1
- package/dist/preview/chromium.d.ts +18 -6
- package/dist/preview/chromium.js +112 -25
- package/dist/preview/chromium.js.map +1 -1
- package/dist/preview/dev-server.d.ts +1 -1
- package/dist/preview/dev-server.js +20 -44
- package/dist/preview/dev-server.js.map +1 -1
- package/dist/preview/host.d.ts +70 -3
- package/dist/preview/host.js +314 -28
- package/dist/preview/host.js.map +1 -1
- package/dist/preview/registration.d.ts +10 -5
- package/dist/preview/registration.js +2 -0
- package/dist/preview/registration.js.map +1 -1
- package/dist/preview/session.d.ts +2 -0
- package/dist/preview/session.js +10 -0
- package/dist/preview/session.js.map +1 -1
- package/dist/process-wait/exit-file.d.ts +29 -0
- package/dist/process-wait/exit-file.js +67 -0
- package/dist/process-wait/exit-file.js.map +1 -0
- package/dist/process-wait/supervisor.d.ts +30 -0
- package/dist/process-wait/supervisor.js +71 -0
- package/dist/process-wait/supervisor.js.map +1 -0
- package/dist/release/snapshot.d.ts +6 -6
- package/dist/runs/agent-tmpdir.d.ts +51 -36
- package/dist/runs/agent-tmpdir.js +389 -132
- package/dist/runs/agent-tmpdir.js.map +1 -1
- package/dist/runs/auto-name.d.ts +6 -6
- package/dist/runs/auto-name.js +1 -1
- package/dist/runs/auto-name.js.map +1 -1
- package/dist/runs/client-request.d.ts +3 -3
- package/dist/runs/client-request.js +3 -3
- package/dist/runs/client-request.js.map +1 -1
- package/dist/runs/delegation-state.d.ts +11 -2
- package/dist/runs/delegation-state.js.map +1 -1
- package/dist/runs/event-history-agent-context.d.ts +14 -0
- package/dist/runs/event-history-agent-context.js +105 -0
- package/dist/runs/event-history-agent-context.js.map +1 -0
- package/dist/runs/event-history-context.d.ts +15 -0
- package/dist/runs/event-history-context.js +109 -0
- package/dist/runs/event-history-context.js.map +1 -0
- package/dist/runs/event-history.d.ts +4 -1
- package/dist/runs/event-history.js +29 -130
- package/dist/runs/event-history.js.map +1 -1
- package/dist/runs/history-stream.d.ts +2 -0
- package/dist/runs/history-stream.js +62 -0
- package/dist/runs/history-stream.js.map +1 -0
- package/dist/runs/legacy-index.d.ts +6 -19
- package/dist/runs/legacy-index.js +6 -19
- package/dist/runs/legacy-index.js.map +1 -1
- package/dist/runs/live-item-snapshots.d.ts +13 -0
- package/dist/runs/live-item-snapshots.js +79 -0
- package/dist/runs/live-item-snapshots.js.map +1 -0
- package/dist/runs/loaded-run-healing.d.ts +3 -0
- package/dist/runs/loaded-run-healing.js +17 -0
- package/dist/runs/loaded-run-healing.js.map +1 -0
- package/dist/runs/outcome-commit.d.ts +98 -0
- package/dist/runs/outcome-commit.js +132 -0
- package/dist/runs/outcome-commit.js.map +1 -0
- package/dist/runs/pull-requests.d.ts +14 -0
- package/dist/runs/pull-requests.js +96 -0
- package/dist/runs/pull-requests.js.map +1 -0
- package/dist/runs/raw-record.d.ts +3 -15
- package/dist/runs/raw-record.js +3 -15
- package/dist/runs/raw-record.js.map +1 -1
- package/dist/runs/retention.d.ts +2 -2
- package/dist/runs/retention.js +7 -0
- package/dist/runs/retention.js.map +1 -1
- package/dist/runs/review-gate.d.ts +1 -1
- package/dist/runs/review-gate.js.map +1 -1
- package/dist/runs/run-claims.d.ts +2 -9
- package/dist/runs/run-claims.js.map +1 -1
- package/dist/runs/run-database.d.ts +29 -34
- package/dist/runs/run-database.js +124 -46
- package/dist/runs/run-database.js.map +1 -1
- package/dist/runs/run-index.d.ts +6 -25
- package/dist/runs/run-index.js +25 -38
- package/dist/runs/run-index.js.map +1 -1
- package/dist/runs/run-row.d.ts +5 -34
- package/dist/runs/run-row.js +13 -38
- package/dist/runs/run-row.js.map +1 -1
- package/dist/runs/store.d.ts +1597 -744
- package/dist/runs/store.js +1231 -739
- package/dist/runs/store.js.map +1 -1
- package/dist/runs/task-markers.d.ts +1 -0
- package/dist/runs/task-markers.js +5 -1
- package/dist/runs/task-markers.js.map +1 -1
- package/dist/runs/task-refs.d.ts +3 -3
- package/dist/runs/transcript-facts-fold.d.ts +64 -0
- package/dist/runs/transcript-facts-fold.js +109 -0
- package/dist/runs/transcript-facts-fold.js.map +1 -0
- package/dist/runs/transcript-facts-load.d.ts +11 -0
- package/dist/runs/transcript-facts-load.js +66 -0
- package/dist/runs/transcript-facts-load.js.map +1 -0
- package/dist/runs/transcript-facts-queue.d.ts +30 -0
- package/dist/runs/transcript-facts-queue.js +227 -0
- package/dist/runs/transcript-facts-queue.js.map +1 -0
- package/dist/runs/transcript-facts-worker.d.ts +15 -0
- package/dist/runs/transcript-facts-worker.js +26 -0
- package/dist/runs/transcript-facts-worker.js.map +1 -0
- package/dist/runs/transcript-facts.d.ts +13 -51
- package/dist/runs/transcript-facts.js +86 -202
- package/dist/runs/transcript-facts.js.map +1 -1
- package/dist/runs/ui-event-sink.d.ts +5 -30
- package/dist/runs/ui-event-sink.js +8 -30
- package/dist/runs/ui-event-sink.js.map +1 -1
- package/dist/runs/webhook.d.ts +104 -38
- package/dist/runs/webhook.js +180 -77
- package/dist/runs/webhook.js.map +1 -1
- package/dist/server/app-type.d.ts +2 -17
- package/dist/server/archive-on-merge.d.ts +35 -0
- package/dist/server/archive-on-merge.js +202 -0
- package/dist/server/archive-on-merge.js.map +1 -0
- package/dist/server/capabilities.d.ts +3 -15
- package/dist/server/capabilities.js +6 -19
- package/dist/server/capabilities.js.map +1 -1
- package/dist/server/checkout-progress.d.ts +10 -0
- package/dist/server/checkout-progress.js +27 -0
- package/dist/server/checkout-progress.js.map +1 -0
- package/dist/server/checkout.d.ts +10 -19
- package/dist/server/checkout.js +15 -45
- package/dist/server/checkout.js.map +1 -1
- package/dist/server/cockpit-ownership.d.ts +2 -0
- package/dist/server/cockpit-ownership.js +9 -0
- package/dist/server/cockpit-ownership.js.map +1 -1
- package/dist/server/cold-repo-handles.d.ts +2 -7
- package/dist/server/cold-repo-handles.js +2 -7
- package/dist/server/cold-repo-handles.js.map +1 -1
- package/dist/server/completion-actions.d.ts +30 -0
- package/dist/server/completion-actions.js +204 -0
- package/dist/server/completion-actions.js.map +1 -0
- package/dist/server/create-project.d.ts +71 -0
- package/dist/server/create-project.js +448 -0
- package/dist/server/create-project.js.map +1 -0
- package/dist/server/forge/github-filters.d.ts +7 -1
- package/dist/server/forge/github-filters.js +66 -51
- package/dist/server/forge/github-filters.js.map +1 -1
- package/dist/server/forge/github-merge-requirements.d.ts +18 -0
- package/dist/server/forge/github-merge-requirements.js +137 -0
- package/dist/server/forge/github-merge-requirements.js.map +1 -0
- package/dist/server/forge/github.d.ts +98 -111
- package/dist/server/forge/github.js +625 -306
- package/dist/server/forge/github.js.map +1 -1
- package/dist/server/forge/types.d.ts +25 -22
- package/dist/server/fs-browse.d.ts +3 -28
- package/dist/server/fs-browse.js.map +1 -1
- package/dist/server/git-changes.d.ts +5 -15
- package/dist/server/git-changes.js +3 -50
- package/dist/server/git-changes.js.map +1 -1
- package/dist/server/git.d.ts +3 -1
- package/dist/server/git.js +12 -0
- package/dist/server/git.js.map +1 -1
- package/dist/server/github.d.ts +1 -1
- package/dist/server/github.js +1 -1
- package/dist/server/github.js.map +1 -1
- package/dist/server/launch-key.d.ts +2 -4
- package/dist/server/launch-key.js +2 -4
- package/dist/server/launch-key.js.map +1 -1
- package/dist/server/live-routes.d.ts +68 -0
- package/dist/server/live-routes.js +147 -0
- package/dist/server/live-routes.js.map +1 -0
- package/dist/server/open-in-app.d.ts +4 -13
- package/dist/server/open-in-app.js +5 -41
- package/dist/server/open-in-app.js.map +1 -1
- package/dist/server/open-in-targets.d.ts +42 -0
- package/dist/server/open-in-targets.js +110 -0
- package/dist/server/open-in-targets.js.map +1 -0
- package/dist/server/open-in-terminal.d.ts +3 -0
- package/dist/server/open-in-terminal.js +6 -26
- package/dist/server/open-in-terminal.js.map +1 -1
- package/dist/server/preview-cdp-socket.d.ts +21 -0
- package/dist/server/preview-cdp-socket.js +112 -0
- package/dist/server/preview-cdp-socket.js.map +1 -0
- package/dist/server/preview-socket.d.ts +11 -11
- package/dist/server/preview-socket.js +22 -22
- package/dist/server/preview-socket.js.map +1 -1
- package/dist/server/preview-sockets.d.ts +14 -0
- package/dist/server/preview-sockets.js +18 -0
- package/dist/server/preview-sockets.js.map +1 -0
- package/dist/server/project-context.d.ts +54 -18
- package/dist/server/project-context.js +178 -5
- package/dist/server/project-context.js.map +1 -1
- package/dist/server/provider-action-gate.d.ts +0 -2
- package/dist/server/provider-action-gate.js +0 -21
- package/dist/server/provider-action-gate.js.map +1 -1
- package/dist/server/provider-auth-runtime.d.ts +3 -18
- package/dist/server/provider-auth-runtime.js +3 -18
- package/dist/server/provider-auth-runtime.js.map +1 -1
- package/dist/server/repo-branches.d.ts +3 -9
- package/dist/server/repo-branches.js +6 -22
- package/dist/server/repo-branches.js.map +1 -1
- package/dist/server/run-event-feed.d.ts +20 -0
- package/dist/server/run-event-feed.js +190 -0
- package/dist/server/run-event-feed.js.map +1 -0
- package/dist/server/server-deps.d.ts +37 -0
- package/dist/server/server-deps.js +114 -0
- package/dist/server/server-deps.js.map +1 -0
- package/dist/server/server.d.ts +14082 -11998
- package/dist/server/server.js +785 -1647
- package/dist/server/server.js.map +1 -1
- package/dist/server/start-run-options.d.ts +82 -0
- package/dist/server/start-run-options.js +111 -0
- package/dist/server/start-run-options.js.map +1 -0
- package/dist/server/validators.d.ts +3 -29
- package/dist/server/validators.js +1 -2
- package/dist/server/validators.js.map +1 -1
- package/dist/server/ws.d.ts +3 -23
- package/dist/server/ws.js +3 -23
- package/dist/server/ws.js.map +1 -1
- package/dist/server-install/engine.d.ts +6 -9
- package/dist/server-install/engine.js +2 -9
- package/dist/server-install/engine.js.map +1 -1
- package/dist/server-install/platforms/ubuntu-vps.d.ts +1 -1
- package/dist/server-install/state.d.ts +2 -4
- package/dist/server-install/state.js +2 -4
- package/dist/server-install/state.js.map +1 -1
- package/dist/server-install/steps.d.ts +2 -5
- package/dist/server-install/steps.js +3 -6
- package/dist/server-install/steps.js.map +1 -1
- package/dist/server-install/types.d.ts +3 -6
- package/dist/server-install/types.js +2 -5
- package/dist/server-install/types.js.map +1 -1
- package/dist/server-install/ui.d.ts +2 -8
- package/dist/server-install/ui.js +3 -3
- package/dist/server-install/ui.js.map +1 -1
- package/dist/session-context.d.ts +64 -0
- package/dist/session-context.js +264 -0
- package/dist/session-context.js.map +1 -0
- package/dist/skills-provision.d.ts +62 -0
- package/dist/skills-provision.js +325 -0
- package/dist/skills-provision.js.map +1 -0
- package/dist/skills-remote.d.ts +29 -27
- package/dist/skills-remote.js +236 -100
- package/dist/skills-remote.js.map +1 -1
- package/dist/skills.d.ts +25 -36
- package/dist/skills.js +43 -54
- package/dist/skills.js.map +1 -1
- package/dist/subcommands.d.ts +11 -0
- package/dist/subcommands.js +24 -0
- package/dist/subcommands.js.map +1 -0
- package/dist/task-cli/cli.js +78 -25
- package/dist/task-cli/cli.js.map +1 -1
- package/dist/task-cli/discovery.d.ts +4 -2
- package/dist/task-cli/discovery.js +14 -13
- package/dist/task-cli/discovery.js.map +1 -1
- package/dist/task-cli/hint.d.ts +20 -0
- package/dist/task-cli/hint.js +14 -0
- package/dist/task-cli/hint.js.map +1 -0
- package/dist/task-cli/http.d.ts +1 -0
- package/dist/task-cli/http.js +3 -1
- package/dist/task-cli/http.js.map +1 -1
- package/dist/task-cli/projections.d.ts +14 -11
- package/dist/task-cli/projections.js +15 -11
- package/dist/task-cli/projections.js.map +1 -1
- package/dist/task-cli/watch.d.ts +18 -10
- package/dist/task-cli/watch.js +128 -20
- package/dist/task-cli/watch.js.map +1 -1
- package/dist/ui-state.d.ts +17 -3
- package/dist/ui-state.js +56 -9
- package/dist/ui-state.js.map +1 -1
- package/dist/update-check.d.ts +0 -10
- package/dist/update-check.js +1 -16
- package/dist/update-check.js.map +1 -1
- package/dist/voice/decide.d.ts +32 -0
- package/dist/voice/decide.js +297 -0
- package/dist/voice/decide.js.map +1 -0
- package/dist/voice/decision-log.d.ts +52 -0
- package/dist/voice/decision-log.js +107 -0
- package/dist/voice/decision-log.js.map +1 -0
- package/dist/voice/engine.d.ts +119 -0
- package/dist/voice/engine.js +60 -0
- package/dist/voice/engine.js.map +1 -0
- package/dist/voice/fake-engine.d.ts +10 -0
- package/dist/voice/fake-engine.js +192 -0
- package/dist/voice/fake-engine.js.map +1 -0
- package/dist/voice/jev-engine.d.ts +17 -0
- package/dist/voice/jev-engine.js +110 -0
- package/dist/voice/jev-engine.js.map +1 -0
- package/dist/voice/pending-ask.d.ts +17 -0
- package/dist/voice/pending-ask.js +50 -0
- package/dist/voice/pending-ask.js.map +1 -0
- package/dist/voice/routes.d.ts +115 -0
- package/dist/voice/routes.js +91 -0
- package/dist/voice/routes.js.map +1 -0
- package/dist/voice/sentence.d.ts +21 -0
- package/dist/voice/sentence.js +61 -0
- package/dist/voice/sentence.js.map +1 -0
- package/dist/voice/thresholds.d.ts +28 -0
- package/dist/voice/thresholds.js +29 -0
- package/dist/voice/thresholds.js.map +1 -0
- package/dist/webhooks/cli.d.ts +18 -0
- package/dist/webhooks/cli.js +145 -0
- package/dist/webhooks/cli.js.map +1 -0
- package/dist/webhooks/prompt.d.ts +5 -0
- package/dist/webhooks/prompt.js +26 -0
- package/dist/webhooks/prompt.js.map +1 -0
- package/dist/workflows/active-run.d.ts +167 -0
- package/dist/workflows/active-run.js +21 -0
- package/dist/workflows/active-run.js.map +1 -0
- package/dist/workflows/continuation-admission.d.ts +913 -0
- package/dist/workflows/continuation-admission.js +265 -0
- package/dist/workflows/continuation-admission.js.map +1 -0
- package/dist/workflows/execution-account.d.ts +13 -0
- package/dist/workflows/execution-account.js +18 -0
- package/dist/workflows/execution-account.js.map +1 -0
- package/dist/workflows/input-acknowledgement.d.ts +152 -0
- package/dist/workflows/input-acknowledgement.js +38 -0
- package/dist/workflows/input-acknowledgement.js.map +1 -0
- package/dist/workflows/line-order.d.ts +5 -0
- package/dist/workflows/line-order.js +25 -0
- package/dist/workflows/line-order.js.map +1 -0
- package/dist/workflows/outcome-batches.d.ts +20 -0
- package/dist/workflows/outcome-batches.js +25 -0
- package/dist/workflows/outcome-batches.js.map +1 -0
- package/dist/workflows/question-routing.d.ts +8 -0
- package/dist/workflows/question-routing.js +18 -0
- package/dist/workflows/question-routing.js.map +1 -0
- package/dist/workflows/run-scheduling.d.ts +35 -0
- package/dist/workflows/run-scheduling.js +61 -0
- package/dist/workflows/run-scheduling.js.map +1 -0
- package/dist/workflows/run-states.d.ts +190 -0
- package/dist/workflows/run-states.js +295 -0
- package/dist/workflows/run-states.js.map +1 -0
- package/dist/workflows/run.d.ts +1296 -278
- package/dist/workflows/run.js +5730 -3265
- package/dist/workflows/run.js.map +1 -1
- package/dist/workflows/turn-end.d.ts +116 -0
- package/dist/workflows/turn-end.js +68 -0
- package/dist/workflows/turn-end.js.map +1 -0
- package/dist/workflows/types.d.ts +35 -130
- package/dist/workflows/types.js +47 -100
- package/dist/workflows/types.js.map +1 -1
- package/dist/workflows/waits.d.ts +74 -0
- package/dist/workflows/waits.js +197 -0
- package/dist/workflows/waits.js.map +1 -0
- package/dist/workspace/agent-accounts.d.ts +5 -38
- package/dist/workspace/agent-accounts.js +14 -40
- package/dist/workspace/agent-accounts.js.map +1 -1
- package/dist/workspace/agent-profiles.d.ts +40 -16
- package/dist/workspace/agent-profiles.js +77 -17
- package/dist/workspace/agent-profiles.js.map +1 -1
- package/dist/workspace/config.d.ts +48 -49
- package/dist/workspace/config.js +68 -72
- package/dist/workspace/config.js.map +1 -1
- package/dist/workspace/migrations.d.ts +3 -13
- package/dist/workspace/migrations.js.map +1 -1
- package/dist/workspace/projects-cli.d.ts +1 -1
- package/dist/workspace/projects-cli.js.map +1 -1
- package/dist/workspace/projects.d.ts +15 -18
- package/dist/workspace/projects.js +20 -16
- package/dist/workspace/projects.js.map +1 -1
- package/dist/workspace/semaphore.d.ts +11 -45
- package/dist/workspace/semaphore.js +6 -18
- package/dist/workspace/semaphore.js.map +1 -1
- package/dist/workspace/ui-state.d.ts +6 -4
- package/dist/workspace/ui-state.js +6 -4
- package/dist/workspace/ui-state.js.map +1 -1
- package/dist/workspace/webhooks.d.ts +40 -0
- package/dist/workspace/webhooks.js +146 -0
- package/dist/workspace/webhooks.js.map +1 -0
- package/dist/worktree-manifest.d.ts +165 -0
- package/dist/worktree-manifest.js +530 -0
- package/dist/worktree-manifest.js.map +1 -0
- package/dist/worktree-setup.js.map +1 -1
- package/package.json +6 -5
- package/scripts/benchmark-run-store-fixture.ts +7 -3
- package/scripts/check-pack.mjs +3 -1
- package/scripts/inline-contract.mjs +80 -27
- package/scripts/install-as-command.mjs +3 -1
- package/scripts/measure-transcript-facts-health.mjs +87 -0
- package/scripts/measure-transcript-facts-lag.mjs +68 -0
- package/scripts/mock-ci-tool.mjs +49 -6
- package/scripts/mock-claude-model-refusal.mjs +42 -0
- package/scripts/mock-claude.mjs +833 -591
- package/scripts/mock-codex-app-server.mjs +785 -418
- package/scripts/mock-cursor-acp.mjs +296 -125
- package/scripts/mock-cursor-print.mjs +256 -0
- package/scripts/mock-deferred-turn-start.mjs +16 -0
- package/scripts/mock-delivery-control.d.mts +23 -0
- package/scripts/mock-delivery-control.mjs +80 -0
- package/scripts/mock-env-record.mjs +11 -0
- package/scripts/mock-failure-control.d.mts +13 -0
- package/scripts/mock-failure-control.mjs +68 -0
- package/scripts/mock-multi-pr.mjs +7 -0
- package/scripts/mock-nudge.mjs +45 -0
- package/scripts/mock-omp-rpc.mjs +429 -255
- package/scripts/mock-opencode-serve.mjs +972 -557
- package/scripts/mock-pi-rpc.mjs +558 -331
- package/scripts/mock-runner-crash.mjs +18 -2
- package/scripts/mock-session-context.d.mts +5 -0
- package/scripts/mock-session-context.mjs +56 -0
- package/scripts/mock-silent-tail.mjs +10 -3
- package/scripts/pi-default-tools.mjs +22 -0
- package/scripts/pi-project-skills.mjs +59 -0
- package/scripts/probe-cursor-print.mjs +627 -0
- package/scripts/transcript-facts-fixture.mjs +53 -0
- package/scripts/voice-replay.ts +50 -0
- package/scripts/windows-workspace-identity.cs +208 -0
- package/scripts/windows-workspace-identity.ps1 +10 -0
- package/web/dist/assets/alert-dialog-DfctKUMw.js +1 -0
- package/web/dist/assets/button-CeupvoKG.js +41 -0
- package/web/dist/assets/centered-state-hDsyXrnH.js +1 -0
- package/web/dist/assets/cez-idle-D3aj_9lp.js +1 -0
- package/web/dist/assets/diff-BnIXZK3i2.js +3 -0
- package/web/dist/assets/diff-controls-GewpW9aF.js +1 -0
- package/web/dist/assets/diff-view-Byo7gpvW.js +11 -0
- package/web/dist/assets/dropdown-menu-COj_J5wd.js +6 -0
- package/web/dist/assets/eye-B8okNWXU.js +1 -0
- package/web/dist/assets/git-toolbar-DY0z0n4S.js +1 -0
- package/web/dist/assets/github-DwU6ALRK.js +1 -0
- package/web/dist/assets/{image-preview-FOEfqpZP.js → image-preview-C_t9q45f.js} +1 -1
- package/web/dist/assets/index-BOfE8pyD.js +34 -0
- package/web/dist/assets/index-D9HpsmdW.css +1 -0
- package/web/dist/assets/live-protocol-Uce2NwEX.js +64 -0
- package/web/dist/assets/live-worker-BizfZSoh.ts +33 -0
- package/web/dist/assets/markdown-BBDDg-4t.js +1 -0
- package/web/dist/assets/nav-row-styles-AoIhhIwf.js +1 -0
- package/web/dist/assets/popover-D56fhiXj.js +1 -0
- package/web/dist/assets/preview-pane-connected-BmVqfSU5.js +3 -0
- package/web/dist/assets/reference-chip-gQNk-4jc.js +1 -0
- package/web/dist/assets/repo-git-B5ECDUuv.js +1 -0
- package/web/dist/assets/{repo-git-CoKp-g9K.css → repo-git-DVXNOJDT.css} +1 -1
- package/web/dist/assets/run-header-C0Y1NvEM.js +2 -0
- package/web/dist/assets/run-header-CC7VUTg9.css +1 -0
- package/web/dist/assets/skills-DUeTkZ9z.js +1 -0
- package/web/dist/assets/status-dot-1PR0i69P.js +1 -0
- package/web/dist/assets/tab-link-DmWk4l5O.js +1 -0
- package/web/dist/assets/task-changes-DKZXuW89.js +1 -0
- package/web/dist/assets/task-commits-BZ6KxWdF.js +1 -0
- package/web/dist/assets/task-files-DlF7Apcn.js +2 -0
- package/web/dist/assets/task-github-item-CVPo3geZ.js +1 -0
- package/web/dist/assets/task-thread-DtQ6uGfQ.css +1 -0
- package/web/dist/assets/task-thread-mm4-ECyo.js +9 -0
- package/web/dist/assets/thread-state-CIw2BlhT.js +4 -0
- package/web/dist/assets/use-hand-to-agent-state-BCDjzHnG.js +1 -0
- package/web/dist/assets/use-hand-to-agent-state-C7esPJ-N.css +1 -0
- package/web/dist/assets/workflows-D8vYD-ql.js +7 -0
- package/web/dist/assets/zoomable-image-CxQSsfcn.js +1 -0
- package/web/dist/index.html +13 -17
- package/web/dist/live-worker.js +4 -0
- package/dist/core/tool-display.js +0 -179
- package/dist/core/tool-display.js.map +0 -1
- package/dist/runs/human-ask-summary.d.ts +0 -9
- package/dist/runs/human-ask-summary.js +0 -39
- package/dist/runs/human-ask-summary.js.map +0 -1
- package/dist/runs/run-search.d.ts +0 -29
- package/dist/runs/run-search.js +0 -63
- package/dist/runs/run-search.js.map +0 -1
- package/dist/skills-banner.d.ts +0 -22
- package/dist/skills-banner.js +0 -41
- package/dist/skills-banner.js.map +0 -1
- package/dist/skills-update.d.ts +0 -88
- package/dist/skills-update.js +0 -392
- package/dist/skills-update.js.map +0 -1
- package/dist/todos.d.ts +0 -48
- package/dist/todos.js +0 -201
- package/dist/todos.js.map +0 -1
- package/web/dist/assets/agent-accounts-CFOBMVHc.js +0 -1
- package/web/dist/assets/alert-dialog-BrpNUwMt.js +0 -1
- package/web/dist/assets/button-C_rd7CPp.js +0 -43
- package/web/dist/assets/compare-variants-D6WXhvXA.js +0 -1
- package/web/dist/assets/diff-DrEARXTV.js +0 -3
- package/web/dist/assets/diff-controls-B1-j7nFg.js +0 -1
- package/web/dist/assets/diff-view-DvGLjdTk.js +0 -6
- package/web/dist/assets/dropdown-menu-BegOZFrj.js +0 -1
- package/web/dist/assets/format-DpNe3S0A.js +0 -1
- package/web/dist/assets/git-toolbar-Cw4ljmhB.js +0 -1
- package/web/dist/assets/github-CfV5sqL0.js +0 -1
- package/web/dist/assets/index-DgWWlOLy.js +0 -13
- package/web/dist/assets/index-fBFnuvxu.css +0 -1
- package/web/dist/assets/nav-row-styles-vp2JbhuJ.js +0 -1
- package/web/dist/assets/popover-BohP6WTx.js +0 -1
- package/web/dist/assets/preview-pane-connected-qTA5KNoJ.js +0 -3
- package/web/dist/assets/preview-state-vuMviq6q.js +0 -1
- package/web/dist/assets/prompt-templates-Cubdut_C.js +0 -15
- package/web/dist/assets/repo-git-Cf4t5PD0.js +0 -1
- package/web/dist/assets/run-diff-BpkUW37Z.js +0 -3
- package/web/dist/assets/run-header-68WHf9wV.js +0 -1
- package/web/dist/assets/run-header-8GObNx6F.css +0 -1
- package/web/dist/assets/search-x-I9Q8pgUa.js +0 -1
- package/web/dist/assets/skills-DFBiAuJG.js +0 -1
- package/web/dist/assets/skills-DiVIgKeU.js +0 -1
- package/web/dist/assets/square-terminal-B6RYYieR.js +0 -1
- package/web/dist/assets/status-dot-CqTJHSP9.js +0 -1
- package/web/dist/assets/tab-link-B07Hu4QX.js +0 -1
- package/web/dist/assets/task-changes--lQF6EYf.js +0 -1
- package/web/dist/assets/task-commits-Cx0qy4DN.js +0 -1
- package/web/dist/assets/task-files-D50s-gKW.js +0 -2
- package/web/dist/assets/task-github-item-DaqmSwYT.js +0 -1
- package/web/dist/assets/task-thread-BPQ64lui.js +0 -7
- package/web/dist/assets/task-thread-zNE2Q9E-.css +0 -1
- package/web/dist/assets/textarea-D20O4Pw0.js +0 -1
- package/web/dist/assets/thread-state-DWcFMrvb.js +0 -4
- package/web/dist/assets/use-hand-to-agent-state-BLIGmwbd.css +0 -1
- package/web/dist/assets/use-hand-to-agent-state-Cy9eyyfL.js +0 -1
- package/web/dist/assets/utils-JsL3ZsJf.js +0 -64
- package/web/dist/assets/workflows-jwG7uxqi.js +0 -11
- package/web/dist/assets/zoomable-image-BJJ64KGc.js +0 -1
|
@@ -6,8 +6,8 @@ import { fileURLToPath } from 'node:url';
|
|
|
6
6
|
import { dirname, resolve as resolvePath } from 'node:path';
|
|
7
7
|
import { parseAskMarker } from './ask.js';
|
|
8
8
|
import { AUTO_END_DELAY_MS, DEFAULT_RUN_TIMEOUT_MS, EOF_KILL_GRACE_MS, EOF_TERM_GRACE_MS, KILL_GRACE_MS, boundOutputDrainAfterExit, } from './runner-runtime.js';
|
|
9
|
-
import { isSignalTerminationExit, trackChildExit } from './agent-runner.js';
|
|
10
|
-
import { signalSession, spawnSessionLeader } from './session-process.js';
|
|
9
|
+
import { isSignalTerminationExit, trackChildExit, unknownToolGrant } from './agent-runner.js';
|
|
10
|
+
import { signalSession, spawnSessionLeader, waitForEofExit } from './session-process.js';
|
|
11
11
|
import { buildChildEnv } from './agent-env.js';
|
|
12
12
|
import { cezarToolEnvNames, cezarToolNames } from '../ci-wait/tools.js';
|
|
13
13
|
import { costWeightedTokens } from './usage.js';
|
|
@@ -23,8 +23,8 @@ export function resolveClaudeExecutable(override) {
|
|
|
23
23
|
* `AgentRunner` over the Claude Code CLI in headless stream-json mode. Auth =
|
|
24
24
|
* the host's logged-in Pro/Max subscription (no API key needed). Sandboxing is
|
|
25
25
|
* `--allowedTools` (default-deny for anything not listed) + running inside the
|
|
26
|
-
* repo `cwd`; `Bash` is narrowed to `Bash(<prefix>:*)` patterns only when
|
|
27
|
-
* `bashAllowlist`
|
|
26
|
+
* repo `cwd`; `Bash` is narrowed to `Bash(<prefix>:*)` patterns only when the
|
|
27
|
+
* grant carries a `bashAllowlist` — the zero-config default has none, so `Bash`
|
|
28
28
|
* is unrestricted shell access (#430).
|
|
29
29
|
*
|
|
30
30
|
* Session mechanics (multi-turn stdin, EOF watchdog, reopen window) follow
|
|
@@ -43,9 +43,8 @@ export const CLAUDE_SPEC_SUPPORT = {
|
|
|
43
43
|
userPrompt: { honored: true, via: 'text block of the first stream-json user message on stdin' },
|
|
44
44
|
images: { honored: true, via: 'image blocks ahead of the text in the first stdin message' },
|
|
45
45
|
cwd: { honored: true, via: 'spawn cwd' },
|
|
46
|
-
|
|
47
|
-
restrictNativeDelegation: { honored: true, via: '--disallowedTools Agent,Task (D1)' },
|
|
48
|
-
bashAllowlist: { honored: true, via: 'Bash(<prefix>:*) entries in --allowedTools, one per prefix' },
|
|
46
|
+
toolGrant: { honored: true, via: '--allowedTools, through buildAllowedTools, with a bashAllowlist as Bash(<prefix>:*) entries, one per prefix; unset and an empty list send none' },
|
|
47
|
+
restrictNativeDelegation: { honored: true, via: '--disallowedTools Agent,Task,Workflow (D1); context: fork skills are not blocked' },
|
|
49
48
|
additionalDirectories: { honored: true, via: '--add-dir, once per directory' },
|
|
50
49
|
env: { honored: true, via: 'merged over the child env through buildChildEnv' },
|
|
51
50
|
model: { honored: true, via: '--model' },
|
|
@@ -78,7 +77,7 @@ export class ClaudeCliRunner {
|
|
|
78
77
|
this.lastSession?.interrupt();
|
|
79
78
|
}
|
|
80
79
|
startSession(spec, onEvent, opts = {}) {
|
|
81
|
-
const args = buildClaudeArgs(spec, process.env,
|
|
80
|
+
const args = buildClaudeArgs(spec, process.env, claudeHelpFeatures(this.bin));
|
|
82
81
|
let child;
|
|
83
82
|
try {
|
|
84
83
|
child = spawnSessionLeader(this.bin, args, {
|
|
@@ -125,6 +124,28 @@ export class ClaudeCliRunner {
|
|
|
125
124
|
const humanUnsettled = new Set();
|
|
126
125
|
let queuedTurnPending = false;
|
|
127
126
|
const submissions = new InputSubmissions();
|
|
127
|
+
// Only live, observed success grants replay eligibility (hearsay-tools/cezarion#1351).
|
|
128
|
+
let reportedModel;
|
|
129
|
+
let reportedSession;
|
|
130
|
+
let successfulIdentity;
|
|
131
|
+
let attemptDidWork = false;
|
|
132
|
+
const sentLines = new Map();
|
|
133
|
+
const deferredHuman = [];
|
|
134
|
+
let refusalRetry;
|
|
135
|
+
let refusalTimer;
|
|
136
|
+
const cancelRefusalRetry = () => {
|
|
137
|
+
if (refusalTimer)
|
|
138
|
+
clearTimeout(refusalTimer);
|
|
139
|
+
refusalTimer = undefined;
|
|
140
|
+
refusalRetry = undefined;
|
|
141
|
+
};
|
|
142
|
+
child.once('exit', () => {
|
|
143
|
+
if (refusalTimer)
|
|
144
|
+
clearTimeout(refusalTimer);
|
|
145
|
+
refusalTimer = undefined;
|
|
146
|
+
// Retain the diagnosis until stdout drains: a final result can still
|
|
147
|
+
// be buffered when the process exit event arrives.
|
|
148
|
+
});
|
|
128
149
|
const scheduleAutoEnd = () => {
|
|
129
150
|
// Never arm the close window while an accepted turn is still running:
|
|
130
151
|
// the timer the opening result would start here has nothing to cancel it,
|
|
@@ -132,7 +153,7 @@ export class ClaudeCliRunner {
|
|
|
132
153
|
// result brings the count to 0 and arms the window as before.
|
|
133
154
|
if (!opts.autoEndAfterFirstTurn || !stdinOpen || autoEndTimer || agentWritePending)
|
|
134
155
|
return;
|
|
135
|
-
if (unsettled.size > 0)
|
|
156
|
+
if (unsettled.size > 0 || refusalRetry || deferredHuman.length)
|
|
136
157
|
return;
|
|
137
158
|
autoEndTimer = setTimeout(() => {
|
|
138
159
|
autoEndTimer = undefined;
|
|
@@ -143,9 +164,18 @@ export class ClaudeCliRunner {
|
|
|
143
164
|
};
|
|
144
165
|
let pendingMarkerAsk = false;
|
|
145
166
|
let turnTextStart = 0;
|
|
146
|
-
const sendMessage = (content, acknowledge, inputIds = [], humanFollowUp = false) => {
|
|
167
|
+
const sendMessage = (content, acknowledge, inputIds = [], humanFollowUp = false, retryWrite = false) => {
|
|
147
168
|
if (!stdinOpen)
|
|
148
169
|
return false;
|
|
170
|
+
if (refusalRetry && !retryWrite) {
|
|
171
|
+
if (!humanFollowUp)
|
|
172
|
+
return false;
|
|
173
|
+
const id = randomUUID();
|
|
174
|
+
// Snapshot now: caller-owned arrays must not change an accepted input.
|
|
175
|
+
deferredHuman.push({ id, content: structuredClone(content) });
|
|
176
|
+
humanUnsettled.add(id);
|
|
177
|
+
return true;
|
|
178
|
+
}
|
|
149
179
|
// A line written while a turn runs joins that turn instead of opening one (#505).
|
|
150
180
|
const opensTurn = unsettled.size === 0;
|
|
151
181
|
if (opensTurn)
|
|
@@ -154,6 +184,7 @@ export class ClaudeCliRunner {
|
|
|
154
184
|
if (opensTurn) {
|
|
155
185
|
pendingMarkerAsk = false;
|
|
156
186
|
turnTextStart = textChunks.length;
|
|
187
|
+
attemptDidWork = false;
|
|
157
188
|
}
|
|
158
189
|
// A follow-up inside the reopen window cancels the scheduled close.
|
|
159
190
|
if (autoEndTimer) {
|
|
@@ -170,6 +201,7 @@ export class ClaudeCliRunner {
|
|
|
170
201
|
try {
|
|
171
202
|
child.stdin.write(`${line}\n`, acknowledge);
|
|
172
203
|
unsettled.add(uuid);
|
|
204
|
+
sentLines.set(uuid, line);
|
|
173
205
|
// Agent writes always pass an acknowledgement, even without inputIds (nudges, #544).
|
|
174
206
|
// The opening/seed prompt shares this path without an ack, but it is not a human
|
|
175
207
|
// follow-up — only session.sendMessage holds (#871 / #486).
|
|
@@ -192,8 +224,10 @@ export class ClaudeCliRunner {
|
|
|
192
224
|
// 143 instead of dying from the signal, so without this flag our own
|
|
193
225
|
// teardown reads as an agent failure (#703).
|
|
194
226
|
let terminatedByCezar = false;
|
|
195
|
-
|
|
196
|
-
|
|
227
|
+
let explicitEnd = false;
|
|
228
|
+
let automaticCleanupStarted = false;
|
|
229
|
+
const signalChild = (signal, intentional = true) => {
|
|
230
|
+
terminatedByCezar ||= intentional;
|
|
197
231
|
signalSession(child, signal);
|
|
198
232
|
};
|
|
199
233
|
// Every watchdog below asks "is the child still alive?" — and that question
|
|
@@ -202,9 +236,14 @@ export class ClaudeCliRunner {
|
|
|
202
236
|
// has to follow real termination or it never fires (#844).
|
|
203
237
|
const hasExited = trackChildExit(child);
|
|
204
238
|
const end = () => {
|
|
239
|
+
if (!hasExited()) {
|
|
240
|
+
explicitEnd = true;
|
|
241
|
+
terminatedByCezar ||= automaticCleanupStarted;
|
|
242
|
+
}
|
|
205
243
|
if (!stdinOpen)
|
|
206
244
|
return;
|
|
207
245
|
stdinOpen = false;
|
|
246
|
+
cancelRefusalRetry();
|
|
208
247
|
try {
|
|
209
248
|
child.stdin.end();
|
|
210
249
|
}
|
|
@@ -222,14 +261,17 @@ export class ClaudeCliRunner {
|
|
|
222
261
|
}, EOF_TERM_GRACE_MS);
|
|
223
262
|
eofTermTimer.unref?.();
|
|
224
263
|
};
|
|
225
|
-
const interrupt = () => {
|
|
264
|
+
const interrupt = (intentional = true) => {
|
|
265
|
+
if (!hasExited())
|
|
266
|
+
terminatedByCezar ||= intentional;
|
|
226
267
|
stdinOpen = false;
|
|
268
|
+
cancelRefusalRetry();
|
|
227
269
|
if (hasExited() || killTimer)
|
|
228
270
|
return;
|
|
229
|
-
signalChild('SIGTERM');
|
|
271
|
+
signalChild('SIGTERM', intentional);
|
|
230
272
|
killTimer = setTimeout(() => {
|
|
231
273
|
if (!hasExited())
|
|
232
|
-
signalChild('SIGKILL');
|
|
274
|
+
signalChild('SIGKILL', intentional);
|
|
233
275
|
}, KILL_GRACE_MS);
|
|
234
276
|
killTimer.unref?.();
|
|
235
277
|
};
|
|
@@ -258,6 +300,16 @@ export class ClaudeCliRunner {
|
|
|
258
300
|
}, limitMs);
|
|
259
301
|
deadline.unref?.();
|
|
260
302
|
}
|
|
303
|
+
// EOF retains the existing grace and escalation order. Only attribution depends on evidence.
|
|
304
|
+
const cleanupAfterEof = async () => {
|
|
305
|
+
if (!timedOut && !hasExited()) {
|
|
306
|
+
const state = await waitForEofExit(child);
|
|
307
|
+
if (state !== 'exited') {
|
|
308
|
+
automaticCleanupStarted = true;
|
|
309
|
+
interrupt(explicitEnd || state === 'live');
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
};
|
|
261
313
|
const result = (async () => {
|
|
262
314
|
let outputFailure;
|
|
263
315
|
try {
|
|
@@ -292,7 +344,86 @@ export class ClaudeCliRunner {
|
|
|
292
344
|
continue;
|
|
293
345
|
}
|
|
294
346
|
opts.onActivity?.();
|
|
295
|
-
|
|
347
|
+
if (msg.type === 'system' && msg.subtype === 'init') {
|
|
348
|
+
reportedModel = typeof msg.model === 'string' && msg.model !== '' ? msg.model : undefined;
|
|
349
|
+
reportedSession = typeof msg.session_id === 'string' && msg.session_id !== '' ? msg.session_id : undefined;
|
|
350
|
+
}
|
|
351
|
+
// Background tasks and hooks can start work without assistant content
|
|
352
|
+
// or token usage. Only init is known to be identity-only metadata.
|
|
353
|
+
if ((msg.type === 'system' && msg.subtype !== 'init') || msg.type === 'tool_progress')
|
|
354
|
+
attemptDidWork = true;
|
|
355
|
+
if (msg.type === 'assistant' || msg.type === 'user') {
|
|
356
|
+
// A refusal's own visible text is diagnostic, not model work. Any
|
|
357
|
+
// other output, tool call/result, reasoning or nonzero usage forbids replay.
|
|
358
|
+
if (msg.message?.usage && !zeroClaudeUsage(msg.message.usage))
|
|
359
|
+
attemptDidWork = true;
|
|
360
|
+
const content = msg.message?.content;
|
|
361
|
+
if (content !== undefined && !Array.isArray(content))
|
|
362
|
+
attemptDidWork = true;
|
|
363
|
+
for (const block of Array.isArray(content) ? content : []) {
|
|
364
|
+
if (!block || typeof block !== 'object') {
|
|
365
|
+
attemptDidWork = true;
|
|
366
|
+
continue;
|
|
367
|
+
}
|
|
368
|
+
const b = block;
|
|
369
|
+
if (b.type !== 'text' || selectedModelRefusal(b.text) !== reportedModel || !reportedModel)
|
|
370
|
+
attemptDidWork = true;
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
const identity = reportedModel && reportedSession ? JSON.stringify([reportedSession, reportedModel]) : undefined;
|
|
374
|
+
const retryable = !terminatedByCezar && stdinOpen && !attemptDidWork
|
|
375
|
+
&& msg.type === 'result' && msg.is_error === true
|
|
376
|
+
&& identity !== undefined && identity === successfulIdentity
|
|
377
|
+
&& selectedModelRefusal(msg.result) === reportedModel
|
|
378
|
+
&& zeroClaudeUsage(msg.usage)
|
|
379
|
+
&& zeroClaudeModelUsage(msg.modelUsage)
|
|
380
|
+
&& (msg.total_cost_usd === undefined || msg.total_cost_usd === 0)
|
|
381
|
+
&& unsettled.size === 1
|
|
382
|
+
&& (msg.user_message_uuids === undefined || (Array.isArray(msg.user_message_uuids) && msg.user_message_uuids.length === 1
|
|
383
|
+
&& msg.user_message_uuids[0] === [...unsettled][0]));
|
|
384
|
+
const uuid = [...unsettled][0];
|
|
385
|
+
const lineToRetry = uuid ? sentLines.get(uuid) : undefined;
|
|
386
|
+
if (retryable && uuid && lineToRetry && (!refusalRetry || refusalRetry.attempts < 2)) {
|
|
387
|
+
// Native attempts remain balanced, but a retryable result must not
|
|
388
|
+
// emit v1 error/turn-end: those would fail or park the workflow.
|
|
389
|
+
emitUi(state => mapClaudeMessage(msg, state));
|
|
390
|
+
refusalRetry ??= { uuid, line: lineToRetry, message: msg.result, attempts: 0 };
|
|
391
|
+
const retry = refusalRetry;
|
|
392
|
+
const delay = retry.attempts++ === 0 ? 5000 : 15000;
|
|
393
|
+
onEvent?.({ type: 'note', message: `Claude model refusal: ${retry.message}; retrying (${retry.attempts}/2) in ${delay / 1000}s` });
|
|
394
|
+
refusalTimer = setTimeout(() => {
|
|
395
|
+
refusalTimer = undefined;
|
|
396
|
+
if (!stdinOpen || hasExited() || refusalRetry !== retry)
|
|
397
|
+
return;
|
|
398
|
+
const input = JSON.parse(retry.line);
|
|
399
|
+
// A fresh native UUID, the same logical input IDs, and byte-for-byte
|
|
400
|
+
// content. Already-observed consumption is never acknowledged twice.
|
|
401
|
+
const ids = submissions.consume(retry.uuid);
|
|
402
|
+
const human = humanUnsettled.delete(retry.uuid);
|
|
403
|
+
unsettled.delete(retry.uuid);
|
|
404
|
+
sentLines.delete(retry.uuid);
|
|
405
|
+
if (!sendMessage(input.message.content, error => {
|
|
406
|
+
if (!error || !stdinOpen)
|
|
407
|
+
return;
|
|
408
|
+
cancelRefusalRetry();
|
|
409
|
+
onEvent?.({ type: 'error', message: retry.message });
|
|
410
|
+
interrupt();
|
|
411
|
+
}, ids, human, true)) {
|
|
412
|
+
cancelRefusalRetry();
|
|
413
|
+
onEvent?.({ type: 'error', message: retry.message });
|
|
414
|
+
interrupt();
|
|
415
|
+
return;
|
|
416
|
+
}
|
|
417
|
+
retry.uuid = [...unsettled][0];
|
|
418
|
+
retry.line = sentLines.get(retry.uuid);
|
|
419
|
+
}, delay);
|
|
420
|
+
refusalTimer.unref?.();
|
|
421
|
+
continue;
|
|
422
|
+
}
|
|
423
|
+
// Keep the original diagnosis on exhaustion, even if the final result
|
|
424
|
+
// differs. Other errors outside a retry still use their native message.
|
|
425
|
+
const originalRefusal = msg.type === 'result' && msg.is_error && refusalRetry?.message;
|
|
426
|
+
const mappedMessage = normalizeIntentionalTeardownResult(originalRefusal ? { ...msg, result: originalRefusal } : msg, terminatedByCezar);
|
|
296
427
|
emitUi((state) => mapClaudeMessage(mappedMessage, state));
|
|
297
428
|
let delta = 0;
|
|
298
429
|
try {
|
|
@@ -309,6 +440,10 @@ export class ClaudeCliRunner {
|
|
|
309
440
|
onEvent?.({ type: 'token-usage', tokensUsed });
|
|
310
441
|
}
|
|
311
442
|
if (msg.type === 'result') {
|
|
443
|
+
if (msg.is_error !== true && msg.subtype === 'success' && costWeightedTokens(msg.usage) > 0)
|
|
444
|
+
successfulIdentity = identity;
|
|
445
|
+
const wasRetrying = refusalRetry !== undefined;
|
|
446
|
+
cancelRefusalRetry();
|
|
312
447
|
if (typeof msg.total_cost_usd === 'number' && Number.isFinite(msg.total_cost_usd) && msg.total_cost_usd >= 0) {
|
|
313
448
|
onEvent?.({ type: 'cost', usd: msg.total_cost_usd });
|
|
314
449
|
}
|
|
@@ -324,6 +459,7 @@ export class ClaudeCliRunner {
|
|
|
324
459
|
// pipe, and only a named UUID or a replay echo proves the model read it (#486).
|
|
325
460
|
const covered = settled.flatMap(id => {
|
|
326
461
|
unsettled.delete(id);
|
|
462
|
+
sentLines.delete(id);
|
|
327
463
|
if (named)
|
|
328
464
|
humanUnsettled.delete(id);
|
|
329
465
|
return msg.is_error === true ? [] : submissions.consume(id);
|
|
@@ -338,7 +474,21 @@ export class ClaudeCliRunner {
|
|
|
338
474
|
// CLI never runs must not look like activity. Decided before the turn-end
|
|
339
475
|
// callback, which may itself submit (and announce) the next prompt.
|
|
340
476
|
queuedTurnPending = unsettled.size > 0;
|
|
477
|
+
// Remaining inputs belong to the next turn. Clear the completed
|
|
478
|
+
// turn's work before any queued frame (including system activity)
|
|
479
|
+
// arrives; resetting at its first assistant frame would erase work.
|
|
480
|
+
if (queuedTurnPending)
|
|
481
|
+
attemptDidWork = false;
|
|
341
482
|
onEvent?.({ type: 'turn-end' });
|
|
483
|
+
// Drain later human input only after a successful logical turn.
|
|
484
|
+
// Failed turns retain the hold until the workflow tears down.
|
|
485
|
+
if (wasRetrying && msg.is_error !== true && stdinOpen) {
|
|
486
|
+
for (const input of deferredHuman.splice(0)) {
|
|
487
|
+
humanUnsettled.delete(input.id);
|
|
488
|
+
sendMessage(input.content, undefined, [], true);
|
|
489
|
+
}
|
|
490
|
+
opts.onAgentInputReady?.();
|
|
491
|
+
}
|
|
342
492
|
scheduleAutoEnd();
|
|
343
493
|
}
|
|
344
494
|
}
|
|
@@ -356,24 +506,13 @@ export class ClaudeCliRunner {
|
|
|
356
506
|
clearTimeout(deadline);
|
|
357
507
|
if (autoEndTimer)
|
|
358
508
|
clearTimeout(autoEndTimer);
|
|
509
|
+
if (refusalRetry && stdinOpen && !terminatedByCezar && !timedOut) {
|
|
510
|
+
onEvent?.({ type: 'error', message: refusalRetry.message });
|
|
511
|
+
}
|
|
359
512
|
stdinOpen = false;
|
|
513
|
+
cancelRefusalRetry();
|
|
360
514
|
}
|
|
361
|
-
|
|
362
|
-
// leave waitForExit hanging on a timeout-less session. Give the normal
|
|
363
|
-
// EOF→exit race a tick, then use the same SIGTERM→SIGKILL path as interrupt().
|
|
364
|
-
if (!timedOut && !hasExited()) {
|
|
365
|
-
await new Promise((resolve) => {
|
|
366
|
-
if (hasExited())
|
|
367
|
-
return resolve();
|
|
368
|
-
const done = () => { child.off('exit', done); child.off('close', done); clearTimeout(timer); resolve(); };
|
|
369
|
-
const timer = setTimeout(done, 50);
|
|
370
|
-
timer.unref?.();
|
|
371
|
-
child.once('exit', done);
|
|
372
|
-
child.once('close', done);
|
|
373
|
-
});
|
|
374
|
-
if (!hasExited())
|
|
375
|
-
interrupt();
|
|
376
|
-
}
|
|
515
|
+
await cleanupAfterEof();
|
|
377
516
|
const exitCode = await waitForExit(child);
|
|
378
517
|
// Draining/destroying stdout is not process exit. Keep timeout escalation
|
|
379
518
|
// armed until the child has actually settled.
|
|
@@ -429,9 +568,9 @@ export class ClaudeCliRunner {
|
|
|
429
568
|
const session = {
|
|
430
569
|
result,
|
|
431
570
|
sendMessage: content => sendMessage(content, undefined, [], true),
|
|
432
|
-
sendAgentMessage: (content, inputIds = []) => {
|
|
571
|
+
sendAgentMessage: (content, inputIds = [], options) => {
|
|
433
572
|
// #505: allowed mid-turn — the CLI steers the line into the running turn.
|
|
434
|
-
if (!stdinOpen || pendingMarkerAsk || agentWritePending)
|
|
573
|
+
if (!stdinOpen || refusalRetry || (pendingMarkerAsk && !options?.besideQuestion) || agentWritePending)
|
|
435
574
|
return false;
|
|
436
575
|
let resolve, reject;
|
|
437
576
|
const acknowledged = new Promise((yes, no) => { resolve = yes; reject = no; });
|
|
@@ -459,7 +598,10 @@ export class ClaudeCliRunner {
|
|
|
459
598
|
// transport boundary, not a promise that the model executed the input.
|
|
460
599
|
return acknowledged;
|
|
461
600
|
},
|
|
462
|
-
discardQueuedMessages: () =>
|
|
601
|
+
discardQueuedMessages: () => {
|
|
602
|
+
for (const input of deferredHuman.splice(0))
|
|
603
|
+
humanUnsettled.delete(input.id);
|
|
604
|
+
},
|
|
463
605
|
holdsHumanInput: () => humanUnsettled.size > 0,
|
|
464
606
|
heldHumanInputCount: () => humanUnsettled.size,
|
|
465
607
|
end,
|
|
@@ -473,34 +615,25 @@ export class ClaudeCliRunner {
|
|
|
473
615
|
return session;
|
|
474
616
|
}
|
|
475
617
|
}
|
|
476
|
-
/**
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
* `--allowedTools` proceed and everything else is denied instead of prompting.
|
|
481
|
-
* `CEZ_CLAUDE_PERMISSION_MODE` selects `dontAsk` / `acceptEdits` / `bypass`
|
|
482
|
-
* (`bypass` emits `--dangerously-skip-permissions` instead). Unset or unknown
|
|
483
|
-
* keeps today's path: `CEZ_APPROVAL_GATE=1` opts into `acceptEdits` (#435).
|
|
484
|
-
* `CEZ_CLAUDE_SETTING_SOURCES` optionally adds `--setting-sources`.
|
|
485
|
-
*/
|
|
486
|
-
/** `--replay-user-messages` is the read signal (#505), but an older CLI rejects unknown
|
|
487
|
-
* options at startup. Read the installed CLI's own `--help` once per binary; without the
|
|
488
|
-
* flag, result coverage (`user_message_uuids`) still reports reads. */
|
|
489
|
-
const replaySupport = new Map();
|
|
490
|
-
export function supportsReplayUserMessages(bin) {
|
|
491
|
-
const known = replaySupport.get(bin);
|
|
618
|
+
/** Read the installed CLI's own `--help` once per binary. */
|
|
619
|
+
const helpFeatures = new Map();
|
|
620
|
+
export function claudeHelpFeatures(bin) {
|
|
621
|
+
const known = helpFeatures.get(bin);
|
|
492
622
|
if (known !== undefined)
|
|
493
623
|
return known;
|
|
494
|
-
let
|
|
624
|
+
let help = '';
|
|
495
625
|
try {
|
|
496
|
-
|
|
497
|
-
.includes('--replay-user-messages');
|
|
626
|
+
help = execFileSync(bin, ['--help'], { encoding: 'utf8', timeout: 5_000, stdio: ['ignore', 'pipe', 'ignore'] });
|
|
498
627
|
}
|
|
499
628
|
catch {
|
|
500
|
-
|
|
629
|
+
help = '';
|
|
501
630
|
}
|
|
502
|
-
|
|
503
|
-
|
|
631
|
+
const features = {
|
|
632
|
+
replayUserMessages: help.includes('--replay-user-messages'),
|
|
633
|
+
includeHookEvents: help.includes('--include-hook-events'),
|
|
634
|
+
};
|
|
635
|
+
helpFeatures.set(bin, features);
|
|
636
|
+
return features;
|
|
504
637
|
}
|
|
505
638
|
export function buildClaudeArgs(spec, env = process.env, features = { replayUserMessages: true }) {
|
|
506
639
|
const args = [
|
|
@@ -513,6 +646,31 @@ export function buildClaudeArgs(spec, env = process.env, features = { replayUser
|
|
|
513
646
|
// Echo each stdin line when the model consumes it: the consumption signal (#505).
|
|
514
647
|
if (features.replayUserMessages)
|
|
515
648
|
args.push('--replay-user-messages');
|
|
649
|
+
// Every hook's lifecycle, so the transcript can show what hooks told the agent (#961).
|
|
650
|
+
if (features.includeHookEvents)
|
|
651
|
+
args.push('--include-hook-events');
|
|
652
|
+
args.push(...claudePermissionArgs(env));
|
|
653
|
+
const settingSources = env.CEZ_CLAUDE_SETTING_SOURCES;
|
|
654
|
+
if (settingSources) {
|
|
655
|
+
args.push('--setting-sources', settingSources);
|
|
656
|
+
}
|
|
657
|
+
if (spec.systemPrompt) {
|
|
658
|
+
args.push('--append-system-prompt', spec.systemPrompt);
|
|
659
|
+
}
|
|
660
|
+
args.push(...claudeSessionArgs(spec), ...claudeToolArgs(spec));
|
|
661
|
+
if (spec.model) {
|
|
662
|
+
args.push('--model', spec.model);
|
|
663
|
+
}
|
|
664
|
+
const effort = parseEffort(spec.effort);
|
|
665
|
+
if (effort)
|
|
666
|
+
args.push('--effort', effort);
|
|
667
|
+
for (const dir of spec.additionalDirectories ?? []) {
|
|
668
|
+
args.push('--add-dir', dir);
|
|
669
|
+
}
|
|
670
|
+
return args;
|
|
671
|
+
}
|
|
672
|
+
function claudePermissionArgs(env) {
|
|
673
|
+
const args = [];
|
|
516
674
|
const permissionMode = env.CEZ_CLAUDE_PERMISSION_MODE;
|
|
517
675
|
if (permissionMode === 'bypass') {
|
|
518
676
|
args.push('--dangerously-skip-permissions');
|
|
@@ -523,13 +681,10 @@ export function buildClaudeArgs(spec, env = process.env, features = { replayUser
|
|
|
523
681
|
else {
|
|
524
682
|
args.push('--permission-mode', env.CEZ_APPROVAL_GATE === '1' ? 'acceptEdits' : 'dontAsk');
|
|
525
683
|
}
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
if (spec.systemPrompt) {
|
|
531
|
-
args.push('--append-system-prompt', spec.systemPrompt);
|
|
532
|
-
}
|
|
684
|
+
return args;
|
|
685
|
+
}
|
|
686
|
+
function claudeSessionArgs(spec) {
|
|
687
|
+
const args = [];
|
|
533
688
|
// Pin the session so the user can `claude --resume <sessionId>` in the repo
|
|
534
689
|
// to take over interactively after a run. With `resume` we reopen the
|
|
535
690
|
// existing on-disk conversation instead.
|
|
@@ -541,11 +696,20 @@ export function buildClaudeArgs(spec, env = process.env, features = { replayUser
|
|
|
541
696
|
args.push('--session-id', spec.sessionId);
|
|
542
697
|
}
|
|
543
698
|
}
|
|
699
|
+
return args;
|
|
700
|
+
}
|
|
701
|
+
function claudeToolArgs(spec) {
|
|
702
|
+
const args = [];
|
|
544
703
|
// Claude 2.1.260 --help: per-process deny rules; Agent is current, Task
|
|
545
|
-
// remains the name in older harnesses/recorded fixtures.
|
|
704
|
+
// remains the name in older harnesses/recorded fixtures. Workflow runs a
|
|
705
|
+
// script that starts subagents; a free 2.1.303 probe (`/reload-plugins` as
|
|
706
|
+
// the only stream-json line) lists it in init `tools` under `Agent,Task` and
|
|
707
|
+
// drops it under this deny. `context: fork` skills still start a subagent
|
|
708
|
+
// (AGENT_PROTOCOL.md D1 forked-skill gap, hearsay-tools/cezarion#1284).
|
|
709
|
+
// Never widen grants.
|
|
546
710
|
if (spec.restrictNativeDelegation)
|
|
547
|
-
args.push('--disallowedTools', 'Agent,Task');
|
|
548
|
-
const allowed =
|
|
711
|
+
args.push('--disallowedTools', 'Agent,Task,Workflow');
|
|
712
|
+
const allowed = claudeAllowedTools(spec.toolGrant);
|
|
549
713
|
if (spec.cezarTools) {
|
|
550
714
|
const { name, command, args: toolArgs } = spec.cezarTools;
|
|
551
715
|
args.push('--mcp-config', JSON.stringify({ mcpServers: { [name]: {
|
|
@@ -558,17 +722,22 @@ export function buildClaudeArgs(spec, env = process.env, features = { replayUser
|
|
|
558
722
|
if (allowed.length > 0) {
|
|
559
723
|
args.push('--allowedTools', allowed.join(','));
|
|
560
724
|
}
|
|
561
|
-
if (spec.model) {
|
|
562
|
-
args.push('--model', spec.model);
|
|
563
|
-
}
|
|
564
|
-
const effort = parseEffort(spec.effort);
|
|
565
|
-
if (effort)
|
|
566
|
-
args.push('--effort', effort);
|
|
567
|
-
for (const dir of spec.additionalDirectories ?? []) {
|
|
568
|
-
args.push('--add-dir', dir);
|
|
569
|
-
}
|
|
570
725
|
return args;
|
|
571
726
|
}
|
|
727
|
+
/**
|
|
728
|
+
* The `--allowedTools` entries for each grant kind. No entries sends no flag, so
|
|
729
|
+
* Claude's permission mode and the user's settings decide; an empty list does
|
|
730
|
+
* the same (hearsay-tools/cezarion#1849).
|
|
731
|
+
*/
|
|
732
|
+
function claudeAllowedTools(grant) {
|
|
733
|
+
switch (grant.kind) {
|
|
734
|
+
case 'unset': return [];
|
|
735
|
+
case 'step-default':
|
|
736
|
+
case 'inherited':
|
|
737
|
+
case 'explicit': return buildAllowedTools(grant.tools, grant.bashAllowlist);
|
|
738
|
+
default: return unknownToolGrant(grant);
|
|
739
|
+
}
|
|
740
|
+
}
|
|
572
741
|
/**
|
|
573
742
|
* Map `allowedTools` onto claude's `--allowedTools` syntax. `Bash` with a
|
|
574
743
|
* `bashAllowlist` becomes one `Bash(<prefix>:*)` entry per allowed prefix;
|
|
@@ -599,6 +768,41 @@ function mockClaudePath() {
|
|
|
599
768
|
// here = <pkg>/dist/core (built) or <pkg>/src/core (tsx dev).
|
|
600
769
|
return resolvePath(here, '..', '..', 'scripts', 'mock-claude.mjs');
|
|
601
770
|
}
|
|
771
|
+
/** Fail closed on absent/partial/invalid usage; include cache and nested counters. */
|
|
772
|
+
function zeroClaudeUsage(usage) {
|
|
773
|
+
if (!usage || typeof usage !== 'object' || Array.isArray(usage))
|
|
774
|
+
return false;
|
|
775
|
+
const record = usage;
|
|
776
|
+
if (record.input_tokens !== 0 || record.output_tokens !== 0)
|
|
777
|
+
return false;
|
|
778
|
+
const zero = (value) => typeof value === 'number' ? value === 0
|
|
779
|
+
: value !== null && typeof value === 'object' && !Array.isArray(value) && Object.values(value).every(zero);
|
|
780
|
+
return Object.entries(record).every(([key, value]) =>
|
|
781
|
+
// Claude includes this non-accounting metadata in some usage envelopes.
|
|
782
|
+
(key === 'service_tier' && typeof value === 'string') || zero(value));
|
|
783
|
+
}
|
|
784
|
+
/** Per-model accounting must agree with the aggregate before replay is safe. */
|
|
785
|
+
function zeroClaudeModelUsage(usage) {
|
|
786
|
+
if (usage === undefined)
|
|
787
|
+
return true;
|
|
788
|
+
if (!usage || typeof usage !== 'object' || Array.isArray(usage))
|
|
789
|
+
return false;
|
|
790
|
+
return Object.values(usage).every(model => {
|
|
791
|
+
if (!model || typeof model !== 'object' || Array.isArray(model))
|
|
792
|
+
return false;
|
|
793
|
+
const record = model;
|
|
794
|
+
if (record.inputTokens !== 0 || record.outputTokens !== 0)
|
|
795
|
+
return false;
|
|
796
|
+
return Object.entries(record).every(([key, value]) => key === 'contextWindow' || key === 'maxOutputTokens'
|
|
797
|
+
? typeof value === 'number' && Number.isFinite(value) && value >= 0
|
|
798
|
+
: value === 0);
|
|
799
|
+
});
|
|
800
|
+
}
|
|
801
|
+
function selectedModelRefusal(text) {
|
|
802
|
+
return typeof text === 'string'
|
|
803
|
+
? /^There's an issue with the selected model \(([^()]+)\)\. It may not exist or you may not have access to it\. Run --model to pick a different model\.$/.exec(text.trim())?.[1]
|
|
804
|
+
: undefined;
|
|
805
|
+
}
|
|
602
806
|
function normalizeIntentionalTeardownResult(msg, terminatedByCezar) {
|
|
603
807
|
if (terminatedByCezar
|
|
604
808
|
&& msg.type === 'result'
|