@wjarka/cezarion 0.10.0-pr30.54
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 +21 -0
- package/README.md +838 -0
- package/dist/agent-config/account-identity.d.ts +44 -0
- package/dist/agent-config/account-identity.js +128 -0
- package/dist/agent-config/account-identity.js.map +1 -0
- package/dist/agent-config/catalog.d.ts +72 -0
- package/dist/agent-config/catalog.js +223 -0
- package/dist/agent-config/catalog.js.map +1 -0
- package/dist/agent-config/files.d.ts +46 -0
- package/dist/agent-config/files.js +119 -0
- package/dist/agent-config/files.js.map +1 -0
- package/dist/agent-config/model-settings/claude.d.ts +2 -0
- package/dist/agent-config/model-settings/claude.js +11 -0
- package/dist/agent-config/model-settings/claude.js.map +1 -0
- package/dist/agent-config/model-settings/codex.d.ts +2 -0
- package/dist/agent-config/model-settings/codex.js +16 -0
- package/dist/agent-config/model-settings/codex.js.map +1 -0
- package/dist/agent-config/model-settings/opencode.d.ts +2 -0
- package/dist/agent-config/model-settings/opencode.js +8 -0
- package/dist/agent-config/model-settings/opencode.js.map +1 -0
- package/dist/agent-config/model-settings/pi.d.ts +12 -0
- package/dist/agent-config/model-settings/pi.js +18 -0
- package/dist/agent-config/model-settings/pi.js.map +1 -0
- package/dist/agent-config/model-settings/shared.d.ts +9 -0
- package/dist/agent-config/model-settings/shared.js +93 -0
- package/dist/agent-config/model-settings/shared.js.map +1 -0
- package/dist/agent-config/model-settings/types.d.ts +9 -0
- package/dist/agent-config/model-settings/types.js +2 -0
- package/dist/agent-config/model-settings/types.js.map +1 -0
- package/dist/agent-config/models.d.ts +9 -0
- package/dist/agent-config/models.js +32 -0
- package/dist/agent-config/models.js.map +1 -0
- package/dist/agent-config/seed.d.ts +7 -0
- package/dist/agent-config/seed.js +90 -0
- package/dist/agent-config/seed.js.map +1 -0
- package/dist/agent-config/service.d.ts +44 -0
- package/dist/agent-config/service.js +71 -0
- package/dist/agent-config/service.js.map +1 -0
- package/dist/agent-config/validate.d.ts +21 -0
- package/dist/agent-config/validate.js +76 -0
- package/dist/agent-config/validate.js.map +1 -0
- package/dist/automations/coordinator.d.ts +26 -0
- package/dist/automations/coordinator.js +66 -0
- package/dist/automations/coordinator.js.map +1 -0
- package/dist/automations/github-poller.d.ts +74 -0
- package/dist/automations/github-poller.js +234 -0
- package/dist/automations/github-poller.js.map +1 -0
- package/dist/automations/scheduler.d.ts +42 -0
- package/dist/automations/scheduler.js +192 -0
- package/dist/automations/scheduler.js.map +1 -0
- package/dist/automations/store.d.ts +65 -0
- package/dist/automations/store.js +298 -0
- package/dist/automations/store.js.map +1 -0
- package/dist/automations/task-template.d.ts +18 -0
- package/dist/automations/task-template.js +95 -0
- package/dist/automations/task-template.js.map +1 -0
- package/dist/automations/types.d.ts +255 -0
- package/dist/automations/types.js +159 -0
- package/dist/automations/types.js.map +1 -0
- package/dist/config.d.ts +77 -0
- package/dist/config.js +242 -0
- package/dist/config.js.map +1 -0
- package/dist/contract/agent-config.d.ts +153 -0
- package/dist/contract/agent-profiles.d.ts +347 -0
- package/dist/contract/automations.d.ts +935 -0
- package/dist/contract/events.d.ts +104 -0
- package/dist/contract/github.d.ts +556 -0
- package/dist/contract/health.d.ts +102 -0
- package/dist/contract/index.d.ts +16 -0
- package/dist/contract/index.js +1895 -0
- package/dist/contract/projects.d.ts +210 -0
- package/dist/contract/repo.d.ts +234 -0
- package/dist/contract/runs.d.ts +1473 -0
- package/dist/contract/skills.d.ts +232 -0
- package/dist/contract/workflows.d.ts +218 -0
- package/dist/contract/workspace.d.ts +579 -0
- package/dist/core/agent-env.d.ts +31 -0
- package/dist/core/agent-env.js +371 -0
- package/dist/core/agent-env.js.map +1 -0
- package/dist/core/agent-model-policy.d.ts +10 -0
- package/dist/core/agent-model-policy.js +36 -0
- package/dist/core/agent-model-policy.js.map +1 -0
- package/dist/core/agent-profiles.d.ts +62 -0
- package/dist/core/agent-profiles.js +90 -0
- package/dist/core/agent-profiles.js.map +1 -0
- package/dist/core/agent-runner.d.ts +211 -0
- package/dist/core/agent-runner.js +68 -0
- package/dist/core/agent-runner.js.map +1 -0
- package/dist/core/ask.d.ts +105 -0
- package/dist/core/ask.js +187 -0
- package/dist/core/ask.js.map +1 -0
- package/dist/core/backend-detect.d.ts +16 -0
- package/dist/core/backend-detect.js +155 -0
- package/dist/core/backend-detect.js.map +1 -0
- package/dist/core/claude-cli-runner.d.ts +59 -0
- package/dist/core/claude-cli-runner.js +483 -0
- package/dist/core/claude-cli-runner.js.map +1 -0
- package/dist/core/claude-ui-mapper.d.ts +80 -0
- package/dist/core/claude-ui-mapper.js +598 -0
- package/dist/core/claude-ui-mapper.js.map +1 -0
- package/dist/core/codex-app-server-runner.d.ts +41 -0
- package/dist/core/codex-app-server-runner.js +584 -0
- package/dist/core/codex-app-server-runner.js.map +1 -0
- package/dist/core/codex-app-server-transport.d.ts +35 -0
- package/dist/core/codex-app-server-transport.js +150 -0
- package/dist/core/codex-app-server-transport.js.map +1 -0
- package/dist/core/codex-model-catalog.d.ts +10 -0
- package/dist/core/codex-model-catalog.js +110 -0
- package/dist/core/codex-model-catalog.js.map +1 -0
- package/dist/core/codex-ui-mapper.d.ts +112 -0
- package/dist/core/codex-ui-mapper.js +766 -0
- package/dist/core/codex-ui-mapper.js.map +1 -0
- package/dist/core/model-identity.d.ts +125 -0
- package/dist/core/model-identity.js +132 -0
- package/dist/core/model-identity.js.map +1 -0
- package/dist/core/model-presets.d.ts +21 -0
- package/dist/core/model-presets.js +81 -0
- package/dist/core/model-presets.js.map +1 -0
- package/dist/core/ndjson.d.ts +6 -0
- package/dist/core/ndjson.js +23 -0
- package/dist/core/ndjson.js.map +1 -0
- package/dist/core/opencode-model-catalog.d.ts +32 -0
- package/dist/core/opencode-model-catalog.js +153 -0
- package/dist/core/opencode-model-catalog.js.map +1 -0
- package/dist/core/opencode-server-runner.d.ts +32 -0
- package/dist/core/opencode-server-runner.js +882 -0
- package/dist/core/opencode-server-runner.js.map +1 -0
- package/dist/core/opencode-ui-mapper.d.ts +137 -0
- package/dist/core/opencode-ui-mapper.js +800 -0
- package/dist/core/opencode-ui-mapper.js.map +1 -0
- package/dist/core/pi-model-catalog.d.ts +31 -0
- package/dist/core/pi-model-catalog.js +152 -0
- package/dist/core/pi-model-catalog.js.map +1 -0
- package/dist/core/pi-runner.d.ts +24 -0
- package/dist/core/pi-runner.js +403 -0
- package/dist/core/pi-runner.js.map +1 -0
- package/dist/core/pi-ui-mapper.d.ts +36 -0
- package/dist/core/pi-ui-mapper.js +304 -0
- package/dist/core/pi-ui-mapper.js.map +1 -0
- package/dist/core/process-usage.d.ts +66 -0
- package/dist/core/process-usage.js +193 -0
- package/dist/core/process-usage.js.map +1 -0
- package/dist/core/provider-auth.d.ts +154 -0
- package/dist/core/provider-auth.js +509 -0
- package/dist/core/provider-auth.js.map +1 -0
- package/dist/core/provider-availability.d.ts +3 -0
- package/dist/core/provider-availability.js +14 -0
- package/dist/core/provider-availability.js.map +1 -0
- package/dist/core/runner-factory.d.ts +8 -0
- package/dist/core/runner-factory.js +25 -0
- package/dist/core/runner-factory.js.map +1 -0
- package/dist/core/runner-model-catalog.d.ts +29 -0
- package/dist/core/runner-model-catalog.js +78 -0
- package/dist/core/runner-model-catalog.js.map +1 -0
- package/dist/core/secret-redaction.d.ts +37 -0
- package/dist/core/secret-redaction.js +115 -0
- package/dist/core/secret-redaction.js.map +1 -0
- package/dist/core/shell-env.d.ts +28 -0
- package/dist/core/shell-env.js +56 -0
- package/dist/core/shell-env.js.map +1 -0
- package/dist/core/tool-display.d.ts +31 -0
- package/dist/core/tool-display.js +179 -0
- package/dist/core/tool-display.js.map +1 -0
- package/dist/core/ui-events.d.ts +335 -0
- package/dist/core/ui-events.js +25 -0
- package/dist/core/ui-events.js.map +1 -0
- package/dist/core/usage-limit.d.ts +42 -0
- package/dist/core/usage-limit.js +209 -0
- package/dist/core/usage-limit.js.map +1 -0
- package/dist/core/usage.d.ts +11 -0
- package/dist/core/usage.js +15 -0
- package/dist/core/usage.js.map +1 -0
- package/dist/core/v1-text-coalescer.d.ts +36 -0
- package/dist/core/v1-text-coalescer.js +72 -0
- package/dist/core/v1-text-coalescer.js.map +1 -0
- package/dist/git-diff-base.d.ts +85 -0
- package/dist/git-diff-base.js +180 -0
- package/dist/git-diff-base.js.map +1 -0
- package/dist/git-refs.d.ts +11 -0
- package/dist/git-refs.js +14 -0
- package/dist/git-refs.js.map +1 -0
- package/dist/git-worktree.d.ts +161 -0
- package/dist/git-worktree.js +508 -0
- package/dist/git-worktree.js.map +1 -0
- package/dist/handoff.d.ts +62 -0
- package/dist/handoff.js +154 -0
- package/dist/handoff.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +680 -0
- package/dist/index.js.map +1 -0
- package/dist/install-as-command.d.ts +40 -0
- package/dist/install-as-command.js +52 -0
- package/dist/install-as-command.js.map +1 -0
- package/dist/pack-check.d.ts +17 -0
- package/dist/pack-check.js +27 -0
- package/dist/pack-check.js.map +1 -0
- package/dist/paths.d.ts +140 -0
- package/dist/paths.js +192 -0
- package/dist/paths.js.map +1 -0
- package/dist/planner.d.ts +27 -0
- package/dist/planner.js +268 -0
- package/dist/planner.js.map +1 -0
- package/dist/release/manifests.d.ts +81 -0
- package/dist/release/manifests.js +74 -0
- package/dist/release/manifests.js.map +1 -0
- package/dist/release/snapshot.d.ts +67 -0
- package/dist/release/snapshot.js +97 -0
- package/dist/release/snapshot.js.map +1 -0
- package/dist/release/stable.d.ts +38 -0
- package/dist/release/stable.js +55 -0
- package/dist/release/stable.js.map +1 -0
- package/dist/runs/agent-tmpdir.d.ts +41 -0
- package/dist/runs/agent-tmpdir.js +183 -0
- package/dist/runs/agent-tmpdir.js.map +1 -0
- package/dist/runs/auto-name.d.ts +75 -0
- package/dist/runs/auto-name.js +179 -0
- package/dist/runs/auto-name.js.map +1 -0
- package/dist/runs/event-history.d.ts +50 -0
- package/dist/runs/event-history.js +613 -0
- package/dist/runs/event-history.js.map +1 -0
- package/dist/runs/retention.d.ts +60 -0
- package/dist/runs/retention.js +86 -0
- package/dist/runs/retention.js.map +1 -0
- package/dist/runs/review-gate.d.ts +18 -0
- package/dist/runs/review-gate.js +21 -0
- package/dist/runs/review-gate.js.map +1 -0
- package/dist/runs/run-index.d.ts +19 -0
- package/dist/runs/run-index.js +43 -0
- package/dist/runs/run-index.js.map +1 -0
- package/dist/runs/store.d.ts +446 -0
- package/dist/runs/store.js +1118 -0
- package/dist/runs/store.js.map +1 -0
- package/dist/runs/task-markers.d.ts +28 -0
- package/dist/runs/task-markers.js +74 -0
- package/dist/runs/task-markers.js.map +1 -0
- package/dist/runs/task-refs.d.ts +25 -0
- package/dist/runs/task-refs.js +74 -0
- package/dist/runs/task-refs.js.map +1 -0
- package/dist/runs/ui-event-sink.d.ts +81 -0
- package/dist/runs/ui-event-sink.js +210 -0
- package/dist/runs/ui-event-sink.js.map +1 -0
- package/dist/server/app-type.d.ts +21 -0
- package/dist/server/app-type.js +2 -0
- package/dist/server/app-type.js.map +1 -0
- package/dist/server/capabilities.d.ts +70 -0
- package/dist/server/capabilities.js +152 -0
- package/dist/server/capabilities.js.map +1 -0
- package/dist/server/checkout.d.ts +128 -0
- package/dist/server/checkout.js +296 -0
- package/dist/server/checkout.js.map +1 -0
- package/dist/server/forge/github.d.ts +513 -0
- package/dist/server/forge/github.js +2364 -0
- package/dist/server/forge/github.js.map +1 -0
- package/dist/server/forge/index.d.ts +40 -0
- package/dist/server/forge/index.js +72 -0
- package/dist/server/forge/index.js.map +1 -0
- package/dist/server/forge/types.d.ts +242 -0
- package/dist/server/forge/types.js +2 -0
- package/dist/server/forge/types.js.map +1 -0
- package/dist/server/fs-browse.d.ts +105 -0
- package/dist/server/fs-browse.js +182 -0
- package/dist/server/fs-browse.js.map +1 -0
- package/dist/server/git-changes.d.ts +213 -0
- package/dist/server/git-changes.js +555 -0
- package/dist/server/git-changes.js.map +1 -0
- package/dist/server/git.d.ts +28 -0
- package/dist/server/git.js +112 -0
- package/dist/server/git.js.map +1 -0
- package/dist/server/github.d.ts +9 -0
- package/dist/server/github.js +8 -0
- package/dist/server/github.js.map +1 -0
- package/dist/server/launch-key.d.ts +7 -0
- package/dist/server/launch-key.js +33 -0
- package/dist/server/launch-key.js.map +1 -0
- package/dist/server/open-in-app.d.ts +66 -0
- package/dist/server/open-in-app.js +211 -0
- package/dist/server/open-in-app.js.map +1 -0
- package/dist/server/open-in-terminal.d.ts +70 -0
- package/dist/server/open-in-terminal.js +179 -0
- package/dist/server/open-in-terminal.js.map +1 -0
- package/dist/server/pr.d.ts +7 -0
- package/dist/server/pr.js +7 -0
- package/dist/server/pr.js.map +1 -0
- package/dist/server/project-context.d.ts +120 -0
- package/dist/server/project-context.js +182 -0
- package/dist/server/project-context.js.map +1 -0
- package/dist/server/provider-action-gate.d.ts +8 -0
- package/dist/server/provider-action-gate.js +56 -0
- package/dist/server/provider-action-gate.js.map +1 -0
- package/dist/server/provider-auth-runtime.d.ts +21 -0
- package/dist/server/provider-auth-runtime.js +66 -0
- package/dist/server/provider-auth-runtime.js.map +1 -0
- package/dist/server/server.d.ts +13138 -0
- package/dist/server/server.js +5263 -0
- package/dist/server/server.js.map +1 -0
- package/dist/server/static-ui.d.ts +49 -0
- package/dist/server/static-ui.js +92 -0
- package/dist/server/static-ui.js.map +1 -0
- package/dist/server/validators.d.ts +97 -0
- package/dist/server/validators.js +86 -0
- package/dist/server/validators.js.map +1 -0
- package/dist/server/ws.d.ts +85 -0
- package/dist/server/ws.js +218 -0
- package/dist/server/ws.js.map +1 -0
- package/dist/server/wsl.d.ts +25 -0
- package/dist/server/wsl.js +92 -0
- package/dist/server/wsl.js.map +1 -0
- package/dist/server-install/engine.d.ts +50 -0
- package/dist/server-install/engine.js +324 -0
- package/dist/server-install/engine.js.map +1 -0
- package/dist/server-install/platforms/macosx-ngrok.d.ts +6 -0
- package/dist/server-install/platforms/macosx-ngrok.js +345 -0
- package/dist/server-install/platforms/macosx-ngrok.js.map +1 -0
- package/dist/server-install/platforms/ubuntu-vps.d.ts +78 -0
- package/dist/server-install/platforms/ubuntu-vps.js +1016 -0
- package/dist/server-install/platforms/ubuntu-vps.js.map +1 -0
- package/dist/server-install/state.d.ts +52 -0
- package/dist/server-install/state.js +182 -0
- package/dist/server-install/state.js.map +1 -0
- package/dist/server-install/steps.d.ts +109 -0
- package/dist/server-install/steps.js +334 -0
- package/dist/server-install/steps.js.map +1 -0
- package/dist/server-install/strategies.d.ts +4 -0
- package/dist/server-install/strategies.js +20 -0
- package/dist/server-install/strategies.js.map +1 -0
- package/dist/server-install/types.d.ts +287 -0
- package/dist/server-install/types.js +121 -0
- package/dist/server-install/types.js.map +1 -0
- package/dist/server-install/ui.d.ts +42 -0
- package/dist/server-install/ui.js +130 -0
- package/dist/server-install/ui.js.map +1 -0
- package/dist/skills-banner.d.ts +22 -0
- package/dist/skills-banner.js +41 -0
- package/dist/skills-banner.js.map +1 -0
- package/dist/skills-remote.d.ts +84 -0
- package/dist/skills-remote.js +468 -0
- package/dist/skills-remote.js.map +1 -0
- package/dist/skills-update.d.ts +88 -0
- package/dist/skills-update.js +392 -0
- package/dist/skills-update.js.map +1 -0
- package/dist/skills.d.ts +82 -0
- package/dist/skills.js +251 -0
- package/dist/skills.js.map +1 -0
- package/dist/todos.d.ts +48 -0
- package/dist/todos.js +201 -0
- package/dist/todos.js.map +1 -0
- package/dist/ui-state.d.ts +26 -0
- package/dist/ui-state.js +38 -0
- package/dist/ui-state.js.map +1 -0
- package/dist/update-check.d.ts +12 -0
- package/dist/update-check.js +41 -0
- package/dist/update-check.js.map +1 -0
- package/dist/workflows/load.d.ts +15 -0
- package/dist/workflows/load.js +56 -0
- package/dist/workflows/load.js.map +1 -0
- package/dist/workflows/run.d.ts +758 -0
- package/dist/workflows/run.js +3389 -0
- package/dist/workflows/run.js.map +1 -0
- package/dist/workflows/types.d.ts +153 -0
- package/dist/workflows/types.js +212 -0
- package/dist/workflows/types.js.map +1 -0
- package/dist/workspace/agent-accounts.d.ts +153 -0
- package/dist/workspace/agent-accounts.js +304 -0
- package/dist/workspace/agent-accounts.js.map +1 -0
- package/dist/workspace/agent-profiles.d.ts +78 -0
- package/dist/workspace/agent-profiles.js +115 -0
- package/dist/workspace/agent-profiles.js.map +1 -0
- package/dist/workspace/config.d.ts +169 -0
- package/dist/workspace/config.js +379 -0
- package/dist/workspace/config.js.map +1 -0
- package/dist/workspace/migrations.d.ts +45 -0
- package/dist/workspace/migrations.js +147 -0
- package/dist/workspace/migrations.js.map +1 -0
- package/dist/workspace/projects-cli.d.ts +25 -0
- package/dist/workspace/projects-cli.js +172 -0
- package/dist/workspace/projects-cli.js.map +1 -0
- package/dist/workspace/projects.d.ts +109 -0
- package/dist/workspace/projects.js +250 -0
- package/dist/workspace/projects.js.map +1 -0
- package/dist/workspace/semaphore.d.ts +179 -0
- package/dist/workspace/semaphore.js +195 -0
- package/dist/workspace/semaphore.js.map +1 -0
- package/dist/workspace/ui-state.d.ts +34 -0
- package/dist/workspace/ui-state.js +53 -0
- package/dist/workspace/ui-state.js.map +1 -0
- package/package.json +70 -0
- package/scripts/check-pack.mjs +46 -0
- package/scripts/inline-contract.mjs +112 -0
- package/scripts/install-as-command.mjs +120 -0
- package/scripts/mock-claude.mjs +520 -0
- package/scripts/mock-pi-rpc.mjs +83 -0
- package/scripts/sync-readme.mjs +20 -0
- package/scripts/test-process-usage.mjs +47 -0
- package/web/dist/assets/alert-dialog-B4Ofsgv7.js +1 -0
- package/web/dist/assets/arrow-down-Dy8dup7j.js +1 -0
- package/web/dist/assets/arrow-left-BJaucbhn.js +1 -0
- package/web/dist/assets/bundle-mjs-BT31bpU6.js +1 -0
- package/web/dist/assets/centered-state-duPW0phQ.js +43 -0
- package/web/dist/assets/chevron-right-Be4A5TCS.js +1 -0
- package/web/dist/assets/chunk-BO2N2NFS-DE6qKn3r.js +131 -0
- package/web/dist/assets/collapsible-DdcNBdSk.js +1 -0
- package/web/dist/assets/commit-list-CgvN9vec.js +1 -0
- package/web/dist/assets/compare-variants-CQA2nd65.js +1 -0
- package/web/dist/assets/core-BCsw8oQw.js +12 -0
- package/web/dist/assets/css-BsVw1vtW.js +1 -0
- package/web/dist/assets/diff-B6Agp5Hl.js +3 -0
- package/web/dist/assets/diff-stat-BoXuGkgq.js +1 -0
- package/web/dist/assets/diff-view-CD8XI-fj.js +6 -0
- package/web/dist/assets/diff-woXpYk--.js +1 -0
- package/web/dist/assets/dropdown-menu-B3SYw-k5.js +1 -0
- package/web/dist/assets/editable-title-B-hjp5wl.js +1 -0
- package/web/dist/assets/ellipsis-vertical-BYwzw0xl.js +1 -0
- package/web/dist/assets/engine-javascript-FQvzRocB.js +141 -0
- package/web/dist/assets/file-BRj5eISx.js +1 -0
- package/web/dist/assets/folder-z4oT5981.js +1 -0
- package/web/dist/assets/git-toolbar-owSEkYld.js +1 -0
- package/web/dist/assets/github-Bz2VgRX3.js +1 -0
- package/web/dist/assets/go-rLFTqkRN.js +1 -0
- package/web/dist/assets/highlighted-body-OFNGDK62-BL-MfFgl.js +1 -0
- package/web/dist/assets/highlighter-CdHqIwFr.js +3 -0
- package/web/dist/assets/html-BY76lXLH.js +1 -0
- package/web/dist/assets/image-preview-h3WFluuy.js +1 -0
- package/web/dist/assets/index-BbcQNT92.css +2 -0
- package/web/dist/assets/index-EtQQQ6Kj.js +7 -0
- package/web/dist/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
- package/web/dist/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
- package/web/dist/assets/javascript-BgS3c2Ky.js +1 -0
- package/web/dist/assets/jetbrains-mono-latin-ext-wght-normal-DBQx-q_a.woff2 +0 -0
- package/web/dist/assets/jetbrains-mono-latin-wght-normal-B9CIFXIH.woff2 +0 -0
- package/web/dist/assets/json-qhed-kSA.js +1 -0
- package/web/dist/assets/jsonc-CYpm1nAK.js +1 -0
- package/web/dist/assets/jsx-Bz0zcwM4.js +1 -0
- package/web/dist/assets/lib-BQXq3kEf.js +1 -0
- package/web/dist/assets/lib-BxQXEXDF.js +1 -0
- package/web/dist/assets/markdown-BYOwaDjH.js +1 -0
- package/web/dist/assets/markdown-DqBKYPiB.js +2 -0
- package/web/dist/assets/mermaid-GHXKKRXX-C4jxqUUb.js +1 -0
- package/web/dist/assets/new-task-form-BdJKRBJX.js +1 -0
- package/web/dist/assets/pill-BQfmfpYp.js +1 -0
- package/web/dist/assets/project-router-DxgFZY1l.js +1 -0
- package/web/dist/assets/prompt-templates-B6m16gq-.js +15 -0
- package/web/dist/assets/python-gzcpVVnB.js +1 -0
- package/web/dist/assets/react-runtime-CCIEwYL0.js +9 -0
- package/web/dist/assets/refresh-cw-mhSpxf2a.js +1 -0
- package/web/dist/assets/repo-git-CUNRxR3_.js +1 -0
- package/web/dist/assets/rolldown-runtime-QTnfLwEv.js +1 -0
- package/web/dist/assets/run-diff-DsmmDVfx.js +3 -0
- package/web/dist/assets/run-header-BkhrseLJ.js +1 -0
- package/web/dist/assets/rust-Cfkwpbl8.js +1 -0
- package/web/dist/assets/search-x-BqDMB2g8.js +1 -0
- package/web/dist/assets/shellscript-CLZ0U2zV.js +1 -0
- package/web/dist/assets/skill-empty-hint-BWEvTggc.js +1 -0
- package/web/dist/assets/skills-9oR_oHse.js +1 -0
- package/web/dist/assets/skills-DwIxnnWO.js +1 -0
- package/web/dist/assets/sparkles-DIoTQpyx.js +1 -0
- package/web/dist/assets/sql-BsFa4tDR.js +1 -0
- package/web/dist/assets/square-terminal-Cc7CuQxc.js +1 -0
- package/web/dist/assets/tab-link-D1fQgpmO.js +1 -0
- package/web/dist/assets/task-changes-BKeLlDpK.js +1 -0
- package/web/dist/assets/task-commits-gcEFZIa5.js +1 -0
- package/web/dist/assets/task-files-BGAqoXTW.js +2 -0
- package/web/dist/assets/task-thread-DT8aUYTS.js +9 -0
- package/web/dist/assets/textarea-BOVbfy5C.js +1 -0
- package/web/dist/assets/thread-loading-CypW73KD.js +1 -0
- package/web/dist/assets/toml-CcmNWLt0.js +1 -0
- package/web/dist/assets/trash-2-CJq6LHWn.js +1 -0
- package/web/dist/assets/triangle-alert-CjDFvU27.js +1 -0
- package/web/dist/assets/tsx-udAQXfEw.js +1 -0
- package/web/dist/assets/typescript-bsJCZSQ-.js +1 -0
- package/web/dist/assets/upload-CPDZlJeK.js +1 -0
- package/web/dist/assets/use-desktop-5JsLmi0a.js +1 -0
- package/web/dist/assets/use-submit-shortcut-CHVFevty.js +1 -0
- package/web/dist/assets/utils-DiO6zyJd.js +64 -0
- package/web/dist/assets/workflows-rQDFzWRt.js +11 -0
- package/web/dist/assets/yaml-rwi0_p6S.js +1 -0
- package/web/dist/assets/zoomable-image-COWqb11v.js +1 -0
- package/web/dist/index.html +80 -0
- package/web/dist/open-mercato.svg +11 -0
|
@@ -0,0 +1,483 @@
|
|
|
1
|
+
import { spawn as nodeSpawn } from 'node:child_process';
|
|
2
|
+
import { fileURLToPath } from 'node:url';
|
|
3
|
+
import { dirname, resolve as resolvePath } from 'node:path';
|
|
4
|
+
import { isSignalTerminationExit, trackChildExit } from './agent-runner.js';
|
|
5
|
+
import { buildChildEnv } from './agent-env.js';
|
|
6
|
+
import { costWeightedTokens } from './usage.js';
|
|
7
|
+
import { readNdjson } from './ndjson.js';
|
|
8
|
+
import { claudeTurnStarted, createClaudeUiState, mapClaudeMessage, stringifyToolResultContent, toolResultImageBlocks, } from './claude-ui-mapper.js';
|
|
9
|
+
/** Default wall-clock cap for a single run before SIGTERM → SIGKILL.
|
|
10
|
+
* Interactive sessions pass `timeoutMs: 0` to disable it entirely. */
|
|
11
|
+
export const DEFAULT_RUN_TIMEOUT_MS = 30 * 60_000;
|
|
12
|
+
/** Grace period between SIGTERM and SIGKILL when a timeout fires. */
|
|
13
|
+
export const KILL_GRACE_MS = 10_000;
|
|
14
|
+
/** After `end()` closes stdin: claude in stream-json mode can ignore EOF and
|
|
15
|
+
* hang (janitor-confirmed CLI bug) — escalate SIGTERM, then SIGKILL. */
|
|
16
|
+
export const EOF_TERM_GRACE_MS = 8_000;
|
|
17
|
+
export const EOF_KILL_GRACE_MS = 4_000;
|
|
18
|
+
/** Reopen window after a turn ends before an auto-ended session closes stdin. */
|
|
19
|
+
export const AUTO_END_DELAY_MS = 250;
|
|
20
|
+
/**
|
|
21
|
+
* `AgentRunner` over the Claude Code CLI in headless stream-json mode. Auth =
|
|
22
|
+
* the host's logged-in Pro/Max subscription (no API key needed). Sandboxing is
|
|
23
|
+
* `--allowedTools` (default-deny for anything not listed) + running inside the
|
|
24
|
+
* repo `cwd`; `Bash` is narrowed to `Bash(<prefix>:*)` patterns only when
|
|
25
|
+
* `bashAllowlist` is set — the zero-config default has no allowlist, so `Bash`
|
|
26
|
+
* is unrestricted shell access (#430).
|
|
27
|
+
*
|
|
28
|
+
* Session mechanics (multi-turn stdin, EOF watchdog, reopen window) follow
|
|
29
|
+
* github-janitor's `claudeRunner.ts`; the original single-turn adaptation
|
|
30
|
+
* came from @cezar/core's `ClaudeCodeCliRunner`.
|
|
31
|
+
*/
|
|
32
|
+
export class ClaudeCliRunner {
|
|
33
|
+
backend = 'claude';
|
|
34
|
+
bin;
|
|
35
|
+
timeoutMs;
|
|
36
|
+
lastSession = null;
|
|
37
|
+
constructor(opts = {}) {
|
|
38
|
+
// CEZ_DRY_RUN=1 swaps in the bundled mock so the cockpit / store /
|
|
39
|
+
// GUI can be exercised without a logged-in claude or burning tokens.
|
|
40
|
+
const defaultBin = process.env.CEZ_CLAUDE_BIN ??
|
|
41
|
+
(process.env.CEZ_DRY_RUN === '1' ? mockClaudePath() : 'claude');
|
|
42
|
+
this.bin = opts.bin ?? defaultBin;
|
|
43
|
+
this.timeoutMs = opts.timeoutMs ?? DEFAULT_RUN_TIMEOUT_MS;
|
|
44
|
+
}
|
|
45
|
+
/** One-shot run: start a session and auto-end it after the first turn. */
|
|
46
|
+
run(spec, onEvent) {
|
|
47
|
+
return this.startSession(spec, onEvent, { autoEndAfterFirstTurn: true }).result;
|
|
48
|
+
}
|
|
49
|
+
async interrupt() {
|
|
50
|
+
this.lastSession?.interrupt();
|
|
51
|
+
}
|
|
52
|
+
startSession(spec, onEvent, opts = {}) {
|
|
53
|
+
const args = buildClaudeArgs(spec);
|
|
54
|
+
let child;
|
|
55
|
+
try {
|
|
56
|
+
child = nodeSpawn(this.bin, args, {
|
|
57
|
+
cwd: spec.cwd,
|
|
58
|
+
env: buildChildEnv({ backend: this.backend, extraEnv: spec.env }),
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
catch (err) {
|
|
62
|
+
throw wrapSpawnError(err, this.bin);
|
|
63
|
+
}
|
|
64
|
+
let stdinOpen = true;
|
|
65
|
+
let autoEndTimer;
|
|
66
|
+
let eofTermTimer;
|
|
67
|
+
let eofKillTimer;
|
|
68
|
+
// Protocol v2 emission — additive alongside v1 (`onEvent` keeps flowing
|
|
69
|
+
// byte-identical); the channel is `opts.onUiEvent` (RunManager wiring
|
|
70
|
+
// lands in R2 step 2.1). The mapper never throws, but a defect in it
|
|
71
|
+
// must still never disturb the v1 stream — hence the belt-and-braces try.
|
|
72
|
+
let uiState = createClaudeUiState({ fallbackSessionId: spec.sessionId });
|
|
73
|
+
const emitUi = (map) => {
|
|
74
|
+
try {
|
|
75
|
+
const mapped = map(uiState);
|
|
76
|
+
uiState = mapped.state;
|
|
77
|
+
if (opts.onUiEvent) {
|
|
78
|
+
for (const event of mapped.events)
|
|
79
|
+
opts.onUiEvent(event);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
// v2 mapping is best-effort; v1 consumers stay unaffected.
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
const sendMessage = (content) => {
|
|
87
|
+
if (!stdinOpen)
|
|
88
|
+
return false;
|
|
89
|
+
// A follow-up inside the reopen window cancels the scheduled close.
|
|
90
|
+
if (autoEndTimer) {
|
|
91
|
+
clearTimeout(autoEndTimer);
|
|
92
|
+
autoEndTimer = undefined;
|
|
93
|
+
}
|
|
94
|
+
const line = JSON.stringify({
|
|
95
|
+
type: 'user',
|
|
96
|
+
message: { role: 'user', content },
|
|
97
|
+
session_id: spec.sessionId,
|
|
98
|
+
});
|
|
99
|
+
try {
|
|
100
|
+
child.stdin.write(`${line}\n`);
|
|
101
|
+
// Each user message written to stdin begins a turn (§7.1).
|
|
102
|
+
emitUi(claudeTurnStarted);
|
|
103
|
+
return true;
|
|
104
|
+
}
|
|
105
|
+
catch (err) {
|
|
106
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
107
|
+
onEvent?.({ type: 'note', message: `claude: stdin write failed: ${message}` });
|
|
108
|
+
return false;
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
// Set the moment WE signal the child — the EOF watchdog, a cancel, or the
|
|
112
|
+
// wall-clock kill switch. claude installs its own SIGTERM handler and exits
|
|
113
|
+
// 143 instead of dying from the signal, so without this flag our own
|
|
114
|
+
// teardown reads as an agent failure (#703).
|
|
115
|
+
let terminatedByCezar = false;
|
|
116
|
+
const signalChild = (signal) => {
|
|
117
|
+
terminatedByCezar = true;
|
|
118
|
+
child.kill(signal);
|
|
119
|
+
};
|
|
120
|
+
// Every watchdog below asks "is the child still alive?" — and that question
|
|
121
|
+
// is NOT `child.killed`, which only reports signal delivery. claude handles
|
|
122
|
+
// SIGTERM itself, so `killed` is true while the process runs on; escalation
|
|
123
|
+
// has to follow real termination or it never fires (#844).
|
|
124
|
+
const hasExited = trackChildExit(child);
|
|
125
|
+
const end = () => {
|
|
126
|
+
if (!stdinOpen)
|
|
127
|
+
return;
|
|
128
|
+
stdinOpen = false;
|
|
129
|
+
try {
|
|
130
|
+
child.stdin.end();
|
|
131
|
+
}
|
|
132
|
+
catch {
|
|
133
|
+
// already gone
|
|
134
|
+
}
|
|
135
|
+
eofTermTimer = setTimeout(() => {
|
|
136
|
+
if (!hasExited())
|
|
137
|
+
signalChild('SIGTERM');
|
|
138
|
+
eofKillTimer = setTimeout(() => {
|
|
139
|
+
if (!hasExited())
|
|
140
|
+
signalChild('SIGKILL');
|
|
141
|
+
}, EOF_KILL_GRACE_MS);
|
|
142
|
+
eofKillTimer.unref?.();
|
|
143
|
+
}, EOF_TERM_GRACE_MS);
|
|
144
|
+
eofTermTimer.unref?.();
|
|
145
|
+
};
|
|
146
|
+
const interrupt = () => {
|
|
147
|
+
stdinOpen = false;
|
|
148
|
+
if (!hasExited())
|
|
149
|
+
signalChild('SIGTERM');
|
|
150
|
+
};
|
|
151
|
+
// Seed the first user message — the same path every follow-up takes.
|
|
152
|
+
// Pasted task screenshots (spec.images) ride along as leading blocks.
|
|
153
|
+
sendMessage([...(spec.images ?? []), { type: 'text', text: spec.userPrompt }]);
|
|
154
|
+
const toolCalls = [];
|
|
155
|
+
const textChunks = [];
|
|
156
|
+
let tokensUsed = 0;
|
|
157
|
+
let sawUsage = false;
|
|
158
|
+
let spawnFailed = null;
|
|
159
|
+
child.on('error', (err) => {
|
|
160
|
+
spawnFailed = wrapSpawnError(err, this.bin);
|
|
161
|
+
});
|
|
162
|
+
const stderrChunks = [];
|
|
163
|
+
child.stderr.setEncoding('utf8');
|
|
164
|
+
child.stderr.on('data', (chunk) => stderrChunks.push(chunk));
|
|
165
|
+
// Optional wall-clock kill switch (disabled for interactive sessions).
|
|
166
|
+
const limitMs = spec.timeoutMs ?? this.timeoutMs;
|
|
167
|
+
let timedOut = false;
|
|
168
|
+
let killTimer;
|
|
169
|
+
let deadline;
|
|
170
|
+
if (limitMs > 0) {
|
|
171
|
+
deadline = setTimeout(() => {
|
|
172
|
+
timedOut = true;
|
|
173
|
+
interrupt();
|
|
174
|
+
child.stdout.destroy();
|
|
175
|
+
killTimer = setTimeout(() => {
|
|
176
|
+
if (!hasExited())
|
|
177
|
+
signalChild('SIGKILL');
|
|
178
|
+
}, KILL_GRACE_MS);
|
|
179
|
+
killTimer.unref?.();
|
|
180
|
+
}, limitMs);
|
|
181
|
+
deadline.unref?.();
|
|
182
|
+
}
|
|
183
|
+
const result = (async () => {
|
|
184
|
+
try {
|
|
185
|
+
for await (const line of readNdjson(child.stdout)) {
|
|
186
|
+
if (timedOut)
|
|
187
|
+
break;
|
|
188
|
+
let msg;
|
|
189
|
+
try {
|
|
190
|
+
msg = JSON.parse(line);
|
|
191
|
+
}
|
|
192
|
+
catch {
|
|
193
|
+
onEvent?.({ type: 'note', message: `claude: skipped unparseable stream line: ${truncate(line)}` });
|
|
194
|
+
continue;
|
|
195
|
+
}
|
|
196
|
+
// Claude reports `error_during_execution` while reacting to our
|
|
197
|
+
// teardown signal. Once cezar has signalled the child, that frame
|
|
198
|
+
// describes the intentional stop rather than an agent failure.
|
|
199
|
+
// Normalize only this precise wire shape so genuine result errors
|
|
200
|
+
// (authentication, limits, malformed sessions) stay authoritative.
|
|
201
|
+
const mappedMessage = normalizeIntentionalTeardownResult(msg, terminatedByCezar);
|
|
202
|
+
emitUi((state) => mapClaudeMessage(mappedMessage, state));
|
|
203
|
+
let delta = 0;
|
|
204
|
+
try {
|
|
205
|
+
delta = handleClaudeMessage(mappedMessage, { toolCalls, textChunks, onEvent });
|
|
206
|
+
}
|
|
207
|
+
catch (err) {
|
|
208
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
209
|
+
onEvent?.({ type: 'note', message: `claude: skipped malformed event (${msg.type ?? 'unknown'}): ${message}` });
|
|
210
|
+
continue;
|
|
211
|
+
}
|
|
212
|
+
if (delta > 0) {
|
|
213
|
+
sawUsage = true;
|
|
214
|
+
tokensUsed += delta;
|
|
215
|
+
onEvent?.({ type: 'token-usage', tokensUsed });
|
|
216
|
+
}
|
|
217
|
+
if (msg.type === 'result') {
|
|
218
|
+
if (typeof msg.total_cost_usd === 'number' && msg.total_cost_usd > 0) {
|
|
219
|
+
onEvent?.({ type: 'cost', usd: msg.total_cost_usd });
|
|
220
|
+
}
|
|
221
|
+
onEvent?.({ type: 'turn-end' });
|
|
222
|
+
if (opts.autoEndAfterFirstTurn && stdinOpen && !autoEndTimer) {
|
|
223
|
+
autoEndTimer = setTimeout(end, AUTO_END_DELAY_MS);
|
|
224
|
+
autoEndTimer.unref?.();
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
catch (err) {
|
|
230
|
+
// A timeout destroys stdout, which surfaces here as a premature-close
|
|
231
|
+
// error — expected; rethrow anything else.
|
|
232
|
+
if (!timedOut)
|
|
233
|
+
throw err;
|
|
234
|
+
}
|
|
235
|
+
finally {
|
|
236
|
+
if (deadline)
|
|
237
|
+
clearTimeout(deadline);
|
|
238
|
+
if (killTimer)
|
|
239
|
+
clearTimeout(killTimer);
|
|
240
|
+
if (autoEndTimer)
|
|
241
|
+
clearTimeout(autoEndTimer);
|
|
242
|
+
stdinOpen = false;
|
|
243
|
+
}
|
|
244
|
+
const exitCode = await waitForExit(child);
|
|
245
|
+
if (eofTermTimer)
|
|
246
|
+
clearTimeout(eofTermTimer);
|
|
247
|
+
if (eofKillTimer)
|
|
248
|
+
clearTimeout(eofKillTimer);
|
|
249
|
+
if (spawnFailed)
|
|
250
|
+
throw spawnFailed;
|
|
251
|
+
const text = textChunks.join('\n').trim();
|
|
252
|
+
if (timedOut) {
|
|
253
|
+
const mins = Math.round((limitMs / 60_000) * 10) / 10;
|
|
254
|
+
onEvent?.({ type: 'error', message: `claude CLI timed out after ${mins}m and was killed` });
|
|
255
|
+
onEvent?.({ type: 'done' });
|
|
256
|
+
return { text, toolCalls, tokensUsed, sessionId: spec.sessionId };
|
|
257
|
+
}
|
|
258
|
+
// A session cezar itself tore down (EOF watchdog after `end()`, or a
|
|
259
|
+
// cancel) exits 143/137 — that is our own signal coming back, not an
|
|
260
|
+
// agent failure, so it settles on the normal path with a note (#703).
|
|
261
|
+
if (terminatedByCezar && isSignalTerminationExit(exitCode)) {
|
|
262
|
+
onEvent?.({
|
|
263
|
+
type: 'note',
|
|
264
|
+
message: `claude CLI did not exit on its own after close; terminated by cezar (code ${exitCode})`,
|
|
265
|
+
});
|
|
266
|
+
onEvent?.({ type: 'done' });
|
|
267
|
+
return { text, toolCalls, tokensUsed, sessionId: spec.sessionId };
|
|
268
|
+
}
|
|
269
|
+
if (exitCode !== 0 && exitCode !== null) {
|
|
270
|
+
const stderr = stderrChunks.join('').trim();
|
|
271
|
+
const detail = stderr ? ` — ${stderr.split('\n').slice(-3).join(' | ')}` : '';
|
|
272
|
+
const msg = `claude CLI exited with code ${exitCode}${detail}`;
|
|
273
|
+
onEvent?.({ type: 'error', message: msg });
|
|
274
|
+
throw new Error(msg);
|
|
275
|
+
}
|
|
276
|
+
if (!sawUsage) {
|
|
277
|
+
onEvent?.({ type: 'note', message: 'token usage not reported by claude CLI' });
|
|
278
|
+
}
|
|
279
|
+
onEvent?.({ type: 'done' });
|
|
280
|
+
return { text, toolCalls, tokensUsed, sessionId: spec.sessionId };
|
|
281
|
+
})();
|
|
282
|
+
const session = {
|
|
283
|
+
result,
|
|
284
|
+
sendMessage,
|
|
285
|
+
end,
|
|
286
|
+
interrupt,
|
|
287
|
+
pid: child.pid,
|
|
288
|
+
get open() {
|
|
289
|
+
return stdinOpen;
|
|
290
|
+
},
|
|
291
|
+
};
|
|
292
|
+
this.lastSession = session;
|
|
293
|
+
return session;
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
/**
|
|
297
|
+
* Build the headless argv. `--input-format stream-json` reads user messages
|
|
298
|
+
* from stdin; `--output-format stream-json --verbose` gives per-event NDJSON;
|
|
299
|
+
* `--permission-mode dontAsk` keeps headless runs non-interactive: tools in
|
|
300
|
+
* `--allowedTools` proceed and everything else is denied instead of prompting.
|
|
301
|
+
* `CEZ_CLAUDE_PERMISSION_MODE` selects `dontAsk` / `acceptEdits` / `bypass`
|
|
302
|
+
* (`bypass` emits `--dangerously-skip-permissions` instead). Unset or unknown
|
|
303
|
+
* keeps today's path: `CEZ_APPROVAL_GATE=1` opts into `acceptEdits` (#435).
|
|
304
|
+
* `CEZ_CLAUDE_SETTING_SOURCES` optionally adds `--setting-sources`.
|
|
305
|
+
*/
|
|
306
|
+
export function buildClaudeArgs(spec, env = process.env) {
|
|
307
|
+
const args = [
|
|
308
|
+
'--input-format',
|
|
309
|
+
'stream-json',
|
|
310
|
+
'--output-format',
|
|
311
|
+
'stream-json',
|
|
312
|
+
'--verbose',
|
|
313
|
+
];
|
|
314
|
+
const permissionMode = env.CEZ_CLAUDE_PERMISSION_MODE;
|
|
315
|
+
if (permissionMode === 'bypass') {
|
|
316
|
+
args.push('--dangerously-skip-permissions');
|
|
317
|
+
}
|
|
318
|
+
else if (permissionMode === 'dontAsk' || permissionMode === 'acceptEdits') {
|
|
319
|
+
args.push('--permission-mode', permissionMode);
|
|
320
|
+
}
|
|
321
|
+
else {
|
|
322
|
+
args.push('--permission-mode', env.CEZ_APPROVAL_GATE === '1' ? 'acceptEdits' : 'dontAsk');
|
|
323
|
+
}
|
|
324
|
+
const settingSources = env.CEZ_CLAUDE_SETTING_SOURCES;
|
|
325
|
+
if (settingSources) {
|
|
326
|
+
args.push('--setting-sources', settingSources);
|
|
327
|
+
}
|
|
328
|
+
if (spec.systemPrompt) {
|
|
329
|
+
args.push('--append-system-prompt', spec.systemPrompt);
|
|
330
|
+
}
|
|
331
|
+
// Pin the session so the user can `claude --resume <sessionId>` in the repo
|
|
332
|
+
// to take over interactively after a run. With `resume` we reopen the
|
|
333
|
+
// existing on-disk conversation instead.
|
|
334
|
+
if (spec.sessionId) {
|
|
335
|
+
if (spec.resume) {
|
|
336
|
+
args.push('--resume', spec.sessionId);
|
|
337
|
+
}
|
|
338
|
+
else {
|
|
339
|
+
args.push('--session-id', spec.sessionId);
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
const allowed = buildAllowedTools(spec.allowedTools ?? [], spec.bashAllowlist);
|
|
343
|
+
if (allowed.length > 0) {
|
|
344
|
+
args.push('--allowedTools', allowed.join(','));
|
|
345
|
+
}
|
|
346
|
+
if (spec.model) {
|
|
347
|
+
args.push('--model', spec.model);
|
|
348
|
+
}
|
|
349
|
+
for (const dir of spec.additionalDirectories ?? []) {
|
|
350
|
+
args.push('--add-dir', dir);
|
|
351
|
+
}
|
|
352
|
+
return args;
|
|
353
|
+
}
|
|
354
|
+
/**
|
|
355
|
+
* Map `allowedTools` onto claude's `--allowedTools` syntax. `Bash` with a
|
|
356
|
+
* `bashAllowlist` becomes one `Bash(<prefix>:*)` entry per allowed prefix;
|
|
357
|
+
* `Bash` with no allowlist stays plain `Bash`.
|
|
358
|
+
*/
|
|
359
|
+
export function buildAllowedTools(allowedTools, bashAllowlist) {
|
|
360
|
+
const out = [];
|
|
361
|
+
for (const tool of allowedTools) {
|
|
362
|
+
if (tool === 'Bash' && bashAllowlist && bashAllowlist.length > 0) {
|
|
363
|
+
for (const prefix of bashAllowlist) {
|
|
364
|
+
const p = prefix.trim();
|
|
365
|
+
if (p)
|
|
366
|
+
out.push(`Bash(${p}:*)`);
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
else {
|
|
370
|
+
out.push(tool);
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
return out;
|
|
374
|
+
}
|
|
375
|
+
function truncate(s, max = 200) {
|
|
376
|
+
return s.length > max ? `${s.slice(0, max)}…` : s;
|
|
377
|
+
}
|
|
378
|
+
/** Path to the bundled mock (`scripts/mock-claude.mjs`), for CEZ_DRY_RUN=1. */
|
|
379
|
+
function mockClaudePath() {
|
|
380
|
+
const here = dirname(fileURLToPath(import.meta.url));
|
|
381
|
+
// here = <pkg>/dist/core (built) or <pkg>/src/core (tsx dev).
|
|
382
|
+
return resolvePath(here, '..', '..', 'scripts', 'mock-claude.mjs');
|
|
383
|
+
}
|
|
384
|
+
function normalizeIntentionalTeardownResult(msg, terminatedByCezar) {
|
|
385
|
+
if (terminatedByCezar
|
|
386
|
+
&& msg.type === 'result'
|
|
387
|
+
&& msg.is_error === true
|
|
388
|
+
&& msg.subtype === 'error_during_execution') {
|
|
389
|
+
return { ...msg, subtype: 'success', is_error: false };
|
|
390
|
+
}
|
|
391
|
+
return msg;
|
|
392
|
+
}
|
|
393
|
+
function handleClaudeMessage(msg, ctx) {
|
|
394
|
+
if (msg.type === 'assistant' && msg.message?.content) {
|
|
395
|
+
for (const block of msg.message.content) {
|
|
396
|
+
const b = block;
|
|
397
|
+
if (b.type === 'text' && typeof b.text === 'string') {
|
|
398
|
+
ctx.textChunks.push(b.text);
|
|
399
|
+
ctx.onEvent?.({ type: 'text', text: b.text });
|
|
400
|
+
}
|
|
401
|
+
else if (b.type === 'tool_use' && b.id && b.name) {
|
|
402
|
+
ctx.toolCalls.push({ id: b.id, name: b.name, input: b.input });
|
|
403
|
+
ctx.onEvent?.({ type: 'tool-call', id: b.id, tool: b.name, input: b.input });
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
// Assistant-frame usage belongs to the individual API calls inside this
|
|
407
|
+
// agentic turn. Claude's terminal result frame already aggregates those
|
|
408
|
+
// calls, so adding both sources inflates the run total (#716). Keep these
|
|
409
|
+
// frames presentation-only; the result branch below is authoritative,
|
|
410
|
+
// matching the v2 `usage.updated` mapping in AGENT_PROTOCOL.md.
|
|
411
|
+
return 0;
|
|
412
|
+
}
|
|
413
|
+
if (msg.type === 'user' && msg.message?.content) {
|
|
414
|
+
for (const block of msg.message.content) {
|
|
415
|
+
const b = block;
|
|
416
|
+
if (b.type === 'tool_result' && typeof b.tool_use_id === 'string') {
|
|
417
|
+
ctx.onEvent?.({
|
|
418
|
+
type: 'tool-result',
|
|
419
|
+
toolCallId: b.tool_use_id,
|
|
420
|
+
result: stringifyToolResultContent(b.content),
|
|
421
|
+
isError: b.is_error === true,
|
|
422
|
+
});
|
|
423
|
+
// Screenshots and other images inside the result get their own
|
|
424
|
+
// events — the text path above renders them as a placeholder.
|
|
425
|
+
for (const img of toolResultImageBlocks(b.content)) {
|
|
426
|
+
ctx.onEvent?.({ type: 'image', mediaType: img.media_type, data: img.data });
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
return 0;
|
|
431
|
+
}
|
|
432
|
+
if (msg.type === 'result') {
|
|
433
|
+
// Final message of a turn: `result` is the full assistant text; only fall
|
|
434
|
+
// back to it if we never saw streamed assistant text blocks.
|
|
435
|
+
if (typeof msg.result === 'string' && ctx.textChunks.length === 0) {
|
|
436
|
+
ctx.textChunks.push(msg.result);
|
|
437
|
+
ctx.onEvent?.({ type: 'text', text: msg.result });
|
|
438
|
+
}
|
|
439
|
+
if (msg.is_error) {
|
|
440
|
+
ctx.onEvent?.({
|
|
441
|
+
type: 'error',
|
|
442
|
+
message: typeof msg.result === 'string' && msg.result.trim() !== ''
|
|
443
|
+
? msg.result
|
|
444
|
+
: `claude reported result error${msg.subtype ? ` (${msg.subtype})` : ''}`,
|
|
445
|
+
});
|
|
446
|
+
}
|
|
447
|
+
return costWeightedTokens(msg.usage);
|
|
448
|
+
}
|
|
449
|
+
// system/init and anything else: nothing actionable.
|
|
450
|
+
return 0;
|
|
451
|
+
}
|
|
452
|
+
// stringify/image helpers moved to claude-ui-mapper.ts (shared by v1 and v2).
|
|
453
|
+
// ---- subprocess plumbing --------------------------------------------------
|
|
454
|
+
function waitForExit(child) {
|
|
455
|
+
if (child.exitCode != null)
|
|
456
|
+
return Promise.resolve(child.exitCode);
|
|
457
|
+
return new Promise((resolve) => {
|
|
458
|
+
let done = false;
|
|
459
|
+
const fin = (code) => {
|
|
460
|
+
if (done)
|
|
461
|
+
return;
|
|
462
|
+
done = true;
|
|
463
|
+
clearTimeout(safety);
|
|
464
|
+
resolve(code);
|
|
465
|
+
};
|
|
466
|
+
child.once('close', (code) => fin(code));
|
|
467
|
+
child.once('exit', (code) => fin(code));
|
|
468
|
+
// Don't swallow a late error as a clean null exit — fall back to the
|
|
469
|
+
// child's own exit code (which is non-null/non-zero on failure).
|
|
470
|
+
child.once('error', () => fin(child.exitCode ?? null));
|
|
471
|
+
// A SIGKILLed process may never emit 'close' through some edge cases.
|
|
472
|
+
const safety = setTimeout(() => fin(child.exitCode ?? null), EOF_TERM_GRACE_MS + EOF_KILL_GRACE_MS + KILL_GRACE_MS + 5_000);
|
|
473
|
+
safety.unref?.();
|
|
474
|
+
});
|
|
475
|
+
}
|
|
476
|
+
function wrapSpawnError(err, bin) {
|
|
477
|
+
const code = err?.code;
|
|
478
|
+
if (code === 'ENOENT') {
|
|
479
|
+
return new Error(`\`${bin}\` not found on PATH — install Claude Code (https://claude.com/claude-code) and run \`claude\` once to log in`);
|
|
480
|
+
}
|
|
481
|
+
return err instanceof Error ? err : new Error(String(err));
|
|
482
|
+
}
|
|
483
|
+
//# sourceMappingURL=claude-cli-runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-cli-runner.js","sourceRoot":"","sources":["../../src/core/claude-cli-runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure claude stream-json → protocol-v2 mapper. `mapClaudeMessage` folds one
|
|
3
|
+
* parsed NDJSON stdout line into `UiEvent`s plus the next mapper state; the
|
|
4
|
+
* runner calls it ALONGSIDE the v1 path (v1 events keep flowing unchanged).
|
|
5
|
+
*
|
|
6
|
+
* Contract: `.ai/analysis/cockpit-ui-redesign/agent-event-protocols.md` §1
|
|
7
|
+
* (wire format) and §7.1 "Claude (stream-json)" (the mapping). Golden
|
|
8
|
+
* fixtures replaying real wire shapes live in `__fixtures__/claude/`.
|
|
9
|
+
*
|
|
10
|
+
* Robustness rule: input is untrusted wire data — the mapper never throws;
|
|
11
|
+
* unknown message/block types map to zero events.
|
|
12
|
+
*
|
|
13
|
+
* State is explicit and treated as immutable: callers thread the returned
|
|
14
|
+
* `state` into the next call. Item ids are deterministic — tool items reuse
|
|
15
|
+
* the wire `tool_use` id; text/thinking blocks (which have no wire id) get
|
|
16
|
+
* sequential `item_<n>` ids, turns get `turn_<n>` — so replaying a stored
|
|
17
|
+
* transcript reproduces the exact event sequence.
|
|
18
|
+
*
|
|
19
|
+
* Plan/task rule: task ids are the harness's, and it only ever reports them in
|
|
20
|
+
* tool RESULT text (`Task #3 created successfully: …`, `#3 [pending] …`), never
|
|
21
|
+
* in the call. So a `TaskCreate` parks until its result lands. Inferring ids by
|
|
22
|
+
* counting creates looks equivalent and is not: `--resume` reopens a session
|
|
23
|
+
* whose list is already at 1..N while a fresh mapper state starts at zero, and
|
|
24
|
+
* the two id spaces then drift silently — updates land on the wrong row.
|
|
25
|
+
*/
|
|
26
|
+
import type { PlanEntry, UiEvent, UiToolItem } from './ui-events.ts';
|
|
27
|
+
export interface ClaudeUiMapperState {
|
|
28
|
+
/** Used when `system/init` lacks `session_id` (the dry-run mock does). */
|
|
29
|
+
readonly fallbackSessionId?: string;
|
|
30
|
+
/** True once `system/init` produced `session.started`. */
|
|
31
|
+
readonly sessionStarted: boolean;
|
|
32
|
+
/** Turns begun before init arrived — their `turn.started` is queued so
|
|
33
|
+
* `session.started` stays the first event on the wire. */
|
|
34
|
+
readonly pendingTurnIds: readonly string[];
|
|
35
|
+
readonly turnSeq: number;
|
|
36
|
+
readonly currentTurnId: string | null;
|
|
37
|
+
readonly itemSeq: number;
|
|
38
|
+
/** True once any assistant `text` block minted a message item. SESSION-scoped,
|
|
39
|
+
* never reset per turn — it mirrors `ctx.textChunks` in claude-cli-runner.ts,
|
|
40
|
+
* which is allocated once per `runAgent` and accumulates across turns. When a
|
|
41
|
+
* session streams no text block at all, the runner falls back to emitting the
|
|
42
|
+
* v1 `text` from `msg.result` (`textChunks.length === 0`), and `mapResult`
|
|
43
|
+
* must mint the v2 twin under the SAME guard — otherwise that prose exists
|
|
44
|
+
* only in v1 and the cockpit's "v2 wins per turn" dedup drops it with no
|
|
45
|
+
* replacement, which is exactly the vanishing-message bug. */
|
|
46
|
+
readonly sawAssistantText: boolean;
|
|
47
|
+
/** `tool_use` items awaiting their `tool_result`, keyed by tool_use id. */
|
|
48
|
+
readonly openTools: ReadonlyMap<string, UiToolItem>;
|
|
49
|
+
/** The running plan built incrementally by Claude's task tools, keyed by the
|
|
50
|
+
* task id the harness assigned — read from the `TaskCreate` result, never
|
|
51
|
+
* guessed (see `applyTaskCreateResult`). */
|
|
52
|
+
readonly tasks: ReadonlyMap<string, PlanEntry>;
|
|
53
|
+
/** `TaskCreate` calls whose result has not arrived yet, keyed by tool_use id.
|
|
54
|
+
* The entry parks here until the result reveals its real id. */
|
|
55
|
+
readonly pendingTaskCreates: ReadonlyMap<string, PlanEntry>;
|
|
56
|
+
}
|
|
57
|
+
export interface ClaudeUiMapping {
|
|
58
|
+
events: UiEvent[];
|
|
59
|
+
state: ClaudeUiMapperState;
|
|
60
|
+
}
|
|
61
|
+
export declare function createClaudeUiState(opts?: {
|
|
62
|
+
fallbackSessionId?: string;
|
|
63
|
+
}): ClaudeUiMapperState;
|
|
64
|
+
/**
|
|
65
|
+
* Claude has no wire-level turn-start — the runner writing a user message to
|
|
66
|
+
* stdin IS the turn boundary, so the runner calls this on each send. Until
|
|
67
|
+
* `init` arrives the event is queued (the seed message is written before the
|
|
68
|
+
* first stdout line is read).
|
|
69
|
+
*/
|
|
70
|
+
export declare function claudeTurnStarted(state: ClaudeUiMapperState): ClaudeUiMapping;
|
|
71
|
+
/** Fold one parsed stream-json message into v2 events. Never throws. */
|
|
72
|
+
export declare function mapClaudeMessage(msg: unknown, state: ClaudeUiMapperState): ClaudeUiMapping;
|
|
73
|
+
/** Flatten a `tool_result.content` (string or block array) to display text.
|
|
74
|
+
* Image blocks become a placeholder — they ride as their own events. */
|
|
75
|
+
export declare function stringifyToolResultContent(content: unknown): string;
|
|
76
|
+
/** base64 image blocks inside a tool_result's content, if any. */
|
|
77
|
+
export declare function toolResultImageBlocks(content: unknown): Array<{
|
|
78
|
+
media_type: string;
|
|
79
|
+
data: string;
|
|
80
|
+
}>;
|