@qodeca/xezar 0.10.1
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 +810 -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 +71 -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 +597 -0
- package/dist/contract/health.d.ts +102 -0
- package/dist/contract/index.d.ts +16 -0
- package/dist/contract/index.js +1953 -0
- package/dist/contract/projects.d.ts +210 -0
- package/dist/contract/repo.d.ts +234 -0
- package/dist/contract/runs.d.ts +1527 -0
- package/dist/contract/skills.d.ts +234 -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 +115 -0
- package/dist/core/ask.js +256 -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 +65 -0
- package/dist/core/claude-cli-runner.js +479 -0
- package/dist/core/claude-cli-runner.js.map +1 -0
- package/dist/core/claude-model-catalog.d.ts +24 -0
- package/dist/core/claude-model-catalog.js +208 -0
- package/dist/core/claude-model-catalog.js.map +1 -0
- package/dist/core/claude-ui-mapper.d.ts +79 -0
- package/dist/core/claude-ui-mapper.js +597 -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 +109 -0
- package/dist/core/codex-ui-mapper.js +764 -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 +91 -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 +535 -0
- package/dist/core/opencode-server-runner.js.map +1 -0
- package/dist/core/opencode-ui-mapper.d.ts +111 -0
- package/dist/core/opencode-ui-mapper.js +668 -0
- package/dist/core/opencode-ui-mapper.js.map +1 -0
- package/dist/core/pi-runner.d.ts +24 -0
- package/dist/core/pi-runner.js +349 -0
- package/dist/core/pi-runner.js.map +1 -0
- package/dist/core/pi-ui-mapper.d.ts +34 -0
- package/dist/core/pi-ui-mapper.js +270 -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 +28 -0
- package/dist/core/runner-model-catalog.js +62 -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 +332 -0
- package/dist/core/ui-events.js +22 -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 +684 -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 +78 -0
- package/dist/release/manifests.js +57 -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 +33 -0
- package/dist/release/stable.js +50 -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/arm-repo-handle.d.ts +17 -0
- package/dist/runs/arm-repo-handle.js +24 -0
- package/dist/runs/arm-repo-handle.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 +490 -0
- package/dist/runs/store.js +1283 -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 +80 -0
- package/dist/runs/ui-event-sink.js +209 -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 +535 -0
- package/dist/server/forge/github.js +2544 -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 +267 -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 +192 -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 +13578 -0
- package/dist/server/server.js +5284 -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 +83 -0
- package/dist/server/ws.js +216 -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 +348 -0
- package/dist/server-install/platforms/macosx-ngrok.js.map +1 -0
- package/dist/server-install/platforms/ubuntu-vps.d.ts +63 -0
- package/dist/server-install/platforms/ubuntu-vps.js +997 -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 +803 -0
- package/dist/workflows/run.js +3483 -0
- package/dist/workflows/run.js.map +1 -0
- package/dist/workflows/types.d.ts +145 -0
- package/dist/workflows/types.js +194 -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 +85 -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 +524 -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-CGskMvgc.js +1 -0
- package/web/dist/assets/arrow-down-G8adPhbu.js +1 -0
- package/web/dist/assets/arrow-left-BJsIW6A0.js +1 -0
- package/web/dist/assets/bundle-mjs-BT31bpU6.js +1 -0
- package/web/dist/assets/centered-state-B_V_Ai2h.js +43 -0
- package/web/dist/assets/chevron-right-CFzn-von.js +1 -0
- package/web/dist/assets/chunk-BO2N2NFS-DE6qKn3r.js +131 -0
- package/web/dist/assets/collapsible-B_8uYwHb.js +1 -0
- package/web/dist/assets/commit-list-C4Dv6vUL.js +1 -0
- package/web/dist/assets/compare-variants-SR2zZfZq.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-CbozNUJq.js +3 -0
- package/web/dist/assets/diff-stat-btAmKFJr.js +1 -0
- package/web/dist/assets/diff-view-BpFTcG3R.js +6 -0
- package/web/dist/assets/diff-woXpYk--.js +1 -0
- package/web/dist/assets/dropdown-menu-Z80KMInL.js +1 -0
- package/web/dist/assets/editable-title-wS5NWwob.js +1 -0
- package/web/dist/assets/ellipsis-vertical-Bmi2u2TG.js +1 -0
- package/web/dist/assets/engine-javascript-FQvzRocB.js +141 -0
- package/web/dist/assets/file-DKoYWRsv.js +1 -0
- package/web/dist/assets/folder-u01HScRT.js +1 -0
- package/web/dist/assets/git-toolbar-DZlZjTGz.js +1 -0
- package/web/dist/assets/github-CFURo9kf.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-C8DK1_sG.js +3 -0
- package/web/dist/assets/html-BY76lXLH.js +1 -0
- package/web/dist/assets/image-preview-BR3iIIhf.js +1 -0
- package/web/dist/assets/index-BcI5hug3.css +2 -0
- package/web/dist/assets/index-DlC81_GI.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-5FuCZDA4.js +2 -0
- package/web/dist/assets/markdown-BYOwaDjH.js +1 -0
- package/web/dist/assets/mermaid-GHXKKRXX-C4jxqUUb.js +1 -0
- package/web/dist/assets/new-task-form-BydHBbef.js +1 -0
- package/web/dist/assets/pill-vNzaaYxj.js +1 -0
- package/web/dist/assets/project-router-BbCzrHKs.js +1 -0
- package/web/dist/assets/prompt-templates-B7Fs2b1S.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-DGliez3E.js +1 -0
- package/web/dist/assets/repo-git-CJFDMauC.js +1 -0
- package/web/dist/assets/rolldown-runtime-QTnfLwEv.js +1 -0
- package/web/dist/assets/run-diff-Bq9vkSNK.js +3 -0
- package/web/dist/assets/run-header-Cd8mSKBG.js +1 -0
- package/web/dist/assets/rust-Cfkwpbl8.js +1 -0
- package/web/dist/assets/search-x-69n_672Y.js +1 -0
- package/web/dist/assets/shellscript-CLZ0U2zV.js +1 -0
- package/web/dist/assets/skill-empty-hint-DTu0LzaJ.js +1 -0
- package/web/dist/assets/skills-Cs-auniL.js +1 -0
- package/web/dist/assets/skills-D4P-Hgey.js +1 -0
- package/web/dist/assets/sparkles-B8agSxBZ.js +1 -0
- package/web/dist/assets/sql-BsFa4tDR.js +1 -0
- package/web/dist/assets/square-terminal-Cf4Og6ct.js +1 -0
- package/web/dist/assets/tab-link-Cp2-CJS8.js +1 -0
- package/web/dist/assets/task-changes-DYgNXOyY.js +1 -0
- package/web/dist/assets/task-commits-BRpZSz1G.js +1 -0
- package/web/dist/assets/task-files-pKOwSyLh.js +2 -0
- package/web/dist/assets/task-thread-Bfyqqy-t.js +9 -0
- package/web/dist/assets/textarea--cpYshee.js +1 -0
- package/web/dist/assets/thread-loading-GyH2Atwo.js +1 -0
- package/web/dist/assets/toml-CcmNWLt0.js +1 -0
- package/web/dist/assets/trash-2--ZtrzUx3.js +1 -0
- package/web/dist/assets/triangle-alert-D5tJwRD2.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-SnwVxKOA.js +1 -0
- package/web/dist/assets/use-desktop-C31lOFUD.js +1 -0
- package/web/dist/assets/use-submit-shortcut-JY8M_MPL.js +1 -0
- package/web/dist/assets/utils-Bb8ohcr3.js +64 -0
- package/web/dist/assets/workflows-BmOehP-A.js +11 -0
- package/web/dist/assets/yaml-rwi0_p6S.js +1 -0
- package/web/dist/assets/zoomable-image-0G3IBXWC.js +1 -0
- package/web/dist/index.html +80 -0
- package/web/dist/xezar.svg +14 -0
|
@@ -0,0 +1,479 @@
|
|
|
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
|
+
* The claude binary a spawn should use: an explicit override, else `XEZ_CLAUDE_BIN`, else the
|
|
22
|
+
* bundled mock under `XEZ_DRY_RUN`, else `claude` on PATH.
|
|
23
|
+
*
|
|
24
|
+
* Exported so model discovery (`claude-model-catalog.ts`) resolves the executable exactly the
|
|
25
|
+
* way execution does — the catalog and the runs it feeds cannot disagree about which CLI, and
|
|
26
|
+
* therefore which account and which model list, is authoritative.
|
|
27
|
+
*/
|
|
28
|
+
export function resolveClaudeExecutable(override) {
|
|
29
|
+
if (override)
|
|
30
|
+
return override;
|
|
31
|
+
// XEZ_DRY_RUN=1 swaps in the bundled mock so the cockpit / store /
|
|
32
|
+
// GUI can be exercised without a logged-in claude or burning tokens.
|
|
33
|
+
return process.env.XEZ_CLAUDE_BIN ?? (process.env.XEZ_DRY_RUN === '1' ? mockClaudePath() : 'claude');
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* `AgentRunner` over the Claude Code CLI in headless stream-json mode. Auth =
|
|
37
|
+
* the host's logged-in Pro/Max subscription (no API key needed). Sandboxing is
|
|
38
|
+
* `--allowedTools` (default-deny for anything not listed) + running inside the
|
|
39
|
+
* repo `cwd`; `Bash` is narrowed to `Bash(<prefix>:*)` patterns only when
|
|
40
|
+
* `bashAllowlist` is set — the zero-config default has no allowlist, so `Bash`
|
|
41
|
+
* is unrestricted shell access (#430).
|
|
42
|
+
*
|
|
43
|
+
* Session mechanics (multi-turn stdin, EOF watchdog, reopen window) follow
|
|
44
|
+
* github-janitor's `claudeRunner.ts`; the original single-turn adaptation
|
|
45
|
+
* came from @xezar/core's `ClaudeCodeCliRunner`.
|
|
46
|
+
*/
|
|
47
|
+
export class ClaudeCliRunner {
|
|
48
|
+
backend = 'claude';
|
|
49
|
+
bin;
|
|
50
|
+
timeoutMs;
|
|
51
|
+
lastSession = null;
|
|
52
|
+
constructor(opts = {}) {
|
|
53
|
+
this.bin = resolveClaudeExecutable(opts.bin);
|
|
54
|
+
this.timeoutMs = opts.timeoutMs ?? DEFAULT_RUN_TIMEOUT_MS;
|
|
55
|
+
}
|
|
56
|
+
/** One-shot run: start a session and auto-end it after the first turn. */
|
|
57
|
+
run(spec, onEvent) {
|
|
58
|
+
return this.startSession(spec, onEvent, { autoEndAfterFirstTurn: true }).result;
|
|
59
|
+
}
|
|
60
|
+
async interrupt() {
|
|
61
|
+
this.lastSession?.interrupt();
|
|
62
|
+
}
|
|
63
|
+
startSession(spec, onEvent, opts = {}) {
|
|
64
|
+
const args = buildClaudeArgs(spec);
|
|
65
|
+
let child;
|
|
66
|
+
try {
|
|
67
|
+
child = nodeSpawn(this.bin, args, {
|
|
68
|
+
cwd: spec.cwd,
|
|
69
|
+
env: buildChildEnv({ backend: this.backend, extraEnv: spec.env }),
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
catch (err) {
|
|
73
|
+
throw wrapSpawnError(err, this.bin);
|
|
74
|
+
}
|
|
75
|
+
let stdinOpen = true;
|
|
76
|
+
let autoEndTimer;
|
|
77
|
+
let eofTermTimer;
|
|
78
|
+
let eofKillTimer;
|
|
79
|
+
// Protocol v2 emission — additive alongside v1 (`onEvent` keeps flowing
|
|
80
|
+
// byte-identical); the channel is `opts.onUiEvent` (RunManager wiring
|
|
81
|
+
// lands in R2 step 2.1). The mapper never throws, but a defect in it
|
|
82
|
+
// must still never disturb the v1 stream — hence the belt-and-braces try.
|
|
83
|
+
let uiState = createClaudeUiState({ fallbackSessionId: spec.sessionId });
|
|
84
|
+
const emitUi = (map) => {
|
|
85
|
+
try {
|
|
86
|
+
const mapped = map(uiState);
|
|
87
|
+
uiState = mapped.state;
|
|
88
|
+
if (opts.onUiEvent) {
|
|
89
|
+
for (const event of mapped.events)
|
|
90
|
+
opts.onUiEvent(event);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
// v2 mapping is best-effort; v1 consumers stay unaffected.
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
const sendMessage = (content) => {
|
|
98
|
+
if (!stdinOpen)
|
|
99
|
+
return false;
|
|
100
|
+
// A follow-up inside the reopen window cancels the scheduled close.
|
|
101
|
+
if (autoEndTimer) {
|
|
102
|
+
clearTimeout(autoEndTimer);
|
|
103
|
+
autoEndTimer = undefined;
|
|
104
|
+
}
|
|
105
|
+
const line = JSON.stringify({
|
|
106
|
+
type: 'user',
|
|
107
|
+
message: { role: 'user', content },
|
|
108
|
+
session_id: spec.sessionId,
|
|
109
|
+
});
|
|
110
|
+
try {
|
|
111
|
+
child.stdin.write(`${line}\n`);
|
|
112
|
+
// Each user message written to stdin begins a turn (§7.1).
|
|
113
|
+
emitUi(claudeTurnStarted);
|
|
114
|
+
return true;
|
|
115
|
+
}
|
|
116
|
+
catch (err) {
|
|
117
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
118
|
+
onEvent?.({ type: 'note', message: `claude: stdin write failed: ${message}` });
|
|
119
|
+
return false;
|
|
120
|
+
}
|
|
121
|
+
};
|
|
122
|
+
// Set the moment WE signal the child — the EOF watchdog, a cancel, or the
|
|
123
|
+
// wall-clock kill switch. claude installs its own SIGTERM handler and exits
|
|
124
|
+
// 143 instead of dying from the signal, so without this flag our own
|
|
125
|
+
// teardown reads as an agent failure (#703).
|
|
126
|
+
let terminatedByXezar = false;
|
|
127
|
+
const signalChild = (signal) => {
|
|
128
|
+
terminatedByXezar = true;
|
|
129
|
+
child.kill(signal);
|
|
130
|
+
};
|
|
131
|
+
// Every watchdog below asks "is the child still alive?" — and that question
|
|
132
|
+
// is NOT `child.killed`, which only reports signal delivery. claude handles
|
|
133
|
+
// SIGTERM itself, so `killed` is true while the process runs on; escalation
|
|
134
|
+
// has to follow real termination or it never fires (#844).
|
|
135
|
+
const hasExited = trackChildExit(child);
|
|
136
|
+
const end = () => {
|
|
137
|
+
if (!stdinOpen)
|
|
138
|
+
return;
|
|
139
|
+
stdinOpen = false;
|
|
140
|
+
try {
|
|
141
|
+
child.stdin.end();
|
|
142
|
+
}
|
|
143
|
+
catch {
|
|
144
|
+
// already gone
|
|
145
|
+
}
|
|
146
|
+
eofTermTimer = setTimeout(() => {
|
|
147
|
+
if (!hasExited())
|
|
148
|
+
signalChild('SIGTERM');
|
|
149
|
+
eofKillTimer = setTimeout(() => {
|
|
150
|
+
if (!hasExited())
|
|
151
|
+
signalChild('SIGKILL');
|
|
152
|
+
}, EOF_KILL_GRACE_MS);
|
|
153
|
+
eofKillTimer.unref?.();
|
|
154
|
+
}, EOF_TERM_GRACE_MS);
|
|
155
|
+
eofTermTimer.unref?.();
|
|
156
|
+
};
|
|
157
|
+
const interrupt = () => {
|
|
158
|
+
stdinOpen = false;
|
|
159
|
+
if (!hasExited())
|
|
160
|
+
signalChild('SIGTERM');
|
|
161
|
+
};
|
|
162
|
+
// Seed the first user message — the same path every follow-up takes.
|
|
163
|
+
// Pasted task screenshots (spec.images) ride along as leading blocks.
|
|
164
|
+
sendMessage([...(spec.images ?? []), { type: 'text', text: spec.userPrompt }]);
|
|
165
|
+
const toolCalls = [];
|
|
166
|
+
const textChunks = [];
|
|
167
|
+
let tokensUsed = 0;
|
|
168
|
+
let sawUsage = false;
|
|
169
|
+
let spawnFailed = null;
|
|
170
|
+
child.on('error', (err) => {
|
|
171
|
+
spawnFailed = wrapSpawnError(err, this.bin);
|
|
172
|
+
});
|
|
173
|
+
const stderrChunks = [];
|
|
174
|
+
child.stderr.setEncoding('utf8');
|
|
175
|
+
child.stderr.on('data', (chunk) => stderrChunks.push(chunk));
|
|
176
|
+
// Optional wall-clock kill switch (disabled for interactive sessions).
|
|
177
|
+
const limitMs = spec.timeoutMs ?? this.timeoutMs;
|
|
178
|
+
let timedOut = false;
|
|
179
|
+
let killTimer;
|
|
180
|
+
let deadline;
|
|
181
|
+
if (limitMs > 0) {
|
|
182
|
+
deadline = setTimeout(() => {
|
|
183
|
+
timedOut = true;
|
|
184
|
+
interrupt();
|
|
185
|
+
child.stdout.destroy();
|
|
186
|
+
killTimer = setTimeout(() => {
|
|
187
|
+
if (!hasExited())
|
|
188
|
+
signalChild('SIGKILL');
|
|
189
|
+
}, KILL_GRACE_MS);
|
|
190
|
+
killTimer.unref?.();
|
|
191
|
+
}, limitMs);
|
|
192
|
+
deadline.unref?.();
|
|
193
|
+
}
|
|
194
|
+
const result = (async () => {
|
|
195
|
+
try {
|
|
196
|
+
for await (const line of readNdjson(child.stdout)) {
|
|
197
|
+
if (timedOut)
|
|
198
|
+
break;
|
|
199
|
+
let msg;
|
|
200
|
+
try {
|
|
201
|
+
msg = JSON.parse(line);
|
|
202
|
+
}
|
|
203
|
+
catch {
|
|
204
|
+
onEvent?.({ type: 'note', message: `claude: skipped unparseable stream line: ${truncate(line)}` });
|
|
205
|
+
continue;
|
|
206
|
+
}
|
|
207
|
+
// Claude reports `error_during_execution` while reacting to our
|
|
208
|
+
// teardown signal. Once xezar has signalled the child, that frame
|
|
209
|
+
// describes the intentional stop rather than an agent failure.
|
|
210
|
+
// Normalize only this precise wire shape so genuine result errors
|
|
211
|
+
// (authentication, limits, malformed sessions) stay authoritative.
|
|
212
|
+
const mappedMessage = normalizeIntentionalTeardownResult(msg, terminatedByXezar);
|
|
213
|
+
emitUi((state) => mapClaudeMessage(mappedMessage, state));
|
|
214
|
+
let delta = 0;
|
|
215
|
+
try {
|
|
216
|
+
delta = handleClaudeMessage(mappedMessage, { toolCalls, textChunks, onEvent });
|
|
217
|
+
}
|
|
218
|
+
catch (err) {
|
|
219
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
220
|
+
onEvent?.({ type: 'note', message: `claude: skipped malformed event (${msg.type ?? 'unknown'}): ${message}` });
|
|
221
|
+
continue;
|
|
222
|
+
}
|
|
223
|
+
if (delta > 0) {
|
|
224
|
+
sawUsage = true;
|
|
225
|
+
tokensUsed += delta;
|
|
226
|
+
onEvent?.({ type: 'token-usage', tokensUsed });
|
|
227
|
+
}
|
|
228
|
+
if (msg.type === 'result') {
|
|
229
|
+
if (typeof msg.total_cost_usd === 'number' && msg.total_cost_usd > 0) {
|
|
230
|
+
onEvent?.({ type: 'cost', usd: msg.total_cost_usd });
|
|
231
|
+
}
|
|
232
|
+
onEvent?.({ type: 'turn-end' });
|
|
233
|
+
if (opts.autoEndAfterFirstTurn && stdinOpen && !autoEndTimer) {
|
|
234
|
+
autoEndTimer = setTimeout(end, AUTO_END_DELAY_MS);
|
|
235
|
+
autoEndTimer.unref?.();
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
catch (err) {
|
|
241
|
+
// A timeout destroys stdout, which surfaces here as a premature-close
|
|
242
|
+
// error — expected; rethrow anything else.
|
|
243
|
+
if (!timedOut)
|
|
244
|
+
throw err;
|
|
245
|
+
}
|
|
246
|
+
finally {
|
|
247
|
+
if (deadline)
|
|
248
|
+
clearTimeout(deadline);
|
|
249
|
+
if (killTimer)
|
|
250
|
+
clearTimeout(killTimer);
|
|
251
|
+
if (autoEndTimer)
|
|
252
|
+
clearTimeout(autoEndTimer);
|
|
253
|
+
stdinOpen = false;
|
|
254
|
+
}
|
|
255
|
+
const exitCode = await waitForExit(child);
|
|
256
|
+
if (eofTermTimer)
|
|
257
|
+
clearTimeout(eofTermTimer);
|
|
258
|
+
if (eofKillTimer)
|
|
259
|
+
clearTimeout(eofKillTimer);
|
|
260
|
+
if (spawnFailed)
|
|
261
|
+
throw spawnFailed;
|
|
262
|
+
const text = textChunks.join('\n').trim();
|
|
263
|
+
if (timedOut) {
|
|
264
|
+
const mins = Math.round((limitMs / 60_000) * 10) / 10;
|
|
265
|
+
onEvent?.({ type: 'error', message: `claude CLI timed out after ${mins}m and was killed` });
|
|
266
|
+
onEvent?.({ type: 'done' });
|
|
267
|
+
return { text, toolCalls, tokensUsed, sessionId: spec.sessionId };
|
|
268
|
+
}
|
|
269
|
+
// A session xezar itself tore down (EOF watchdog after `end()`, or a
|
|
270
|
+
// cancel) exits 143/137 — that is our own signal coming back, not an
|
|
271
|
+
// agent failure, so it settles on the normal path with a note (#703).
|
|
272
|
+
if (terminatedByXezar && isSignalTerminationExit(exitCode)) {
|
|
273
|
+
onEvent?.({
|
|
274
|
+
type: 'note',
|
|
275
|
+
message: `claude CLI did not exit on its own after close; terminated by xezar (code ${exitCode})`,
|
|
276
|
+
});
|
|
277
|
+
onEvent?.({ type: 'done' });
|
|
278
|
+
return { text, toolCalls, tokensUsed, sessionId: spec.sessionId };
|
|
279
|
+
}
|
|
280
|
+
if (exitCode !== 0 && exitCode !== null) {
|
|
281
|
+
const stderr = stderrChunks.join('').trim();
|
|
282
|
+
const detail = stderr ? ` — ${stderr.split('\n').slice(-3).join(' | ')}` : '';
|
|
283
|
+
const msg = `claude CLI exited with code ${exitCode}${detail}`;
|
|
284
|
+
onEvent?.({ type: 'error', message: msg });
|
|
285
|
+
throw new Error(msg);
|
|
286
|
+
}
|
|
287
|
+
if (!sawUsage) {
|
|
288
|
+
onEvent?.({ type: 'note', message: 'token usage not reported by claude CLI' });
|
|
289
|
+
}
|
|
290
|
+
onEvent?.({ type: 'done' });
|
|
291
|
+
return { text, toolCalls, tokensUsed, sessionId: spec.sessionId };
|
|
292
|
+
})();
|
|
293
|
+
const session = {
|
|
294
|
+
result,
|
|
295
|
+
sendMessage,
|
|
296
|
+
end,
|
|
297
|
+
interrupt,
|
|
298
|
+
pid: child.pid,
|
|
299
|
+
get open() {
|
|
300
|
+
return stdinOpen;
|
|
301
|
+
},
|
|
302
|
+
};
|
|
303
|
+
this.lastSession = session;
|
|
304
|
+
return session;
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* Build the headless argv. `--input-format stream-json` reads user messages
|
|
309
|
+
* from stdin; `--output-format stream-json --verbose` gives per-event NDJSON;
|
|
310
|
+
* `--permission-mode dontAsk` keeps headless runs non-interactive: tools in
|
|
311
|
+
* `--allowedTools` proceed and everything else is denied instead of prompting.
|
|
312
|
+
* `XEZ_APPROVAL_GATE=1` opts back into Claude's approval UI (#435).
|
|
313
|
+
*/
|
|
314
|
+
export function buildClaudeArgs(spec, env = process.env) {
|
|
315
|
+
const args = [
|
|
316
|
+
'--input-format',
|
|
317
|
+
'stream-json',
|
|
318
|
+
'--output-format',
|
|
319
|
+
'stream-json',
|
|
320
|
+
'--verbose',
|
|
321
|
+
'--permission-mode',
|
|
322
|
+
env.XEZ_APPROVAL_GATE === '1' ? 'acceptEdits' : 'dontAsk',
|
|
323
|
+
];
|
|
324
|
+
if (spec.systemPrompt) {
|
|
325
|
+
args.push('--append-system-prompt', spec.systemPrompt);
|
|
326
|
+
}
|
|
327
|
+
// Pin the session so the user can `claude --resume <sessionId>` in the repo
|
|
328
|
+
// to take over interactively after a run. With `resume` we reopen the
|
|
329
|
+
// existing on-disk conversation instead.
|
|
330
|
+
if (spec.sessionId) {
|
|
331
|
+
if (spec.resume) {
|
|
332
|
+
args.push('--resume', spec.sessionId);
|
|
333
|
+
}
|
|
334
|
+
else {
|
|
335
|
+
args.push('--session-id', spec.sessionId);
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
const allowed = buildAllowedTools(spec.allowedTools ?? [], spec.bashAllowlist);
|
|
339
|
+
if (allowed.length > 0) {
|
|
340
|
+
args.push('--allowedTools', allowed.join(','));
|
|
341
|
+
}
|
|
342
|
+
if (spec.model) {
|
|
343
|
+
args.push('--model', spec.model);
|
|
344
|
+
}
|
|
345
|
+
for (const dir of spec.additionalDirectories ?? []) {
|
|
346
|
+
args.push('--add-dir', dir);
|
|
347
|
+
}
|
|
348
|
+
return args;
|
|
349
|
+
}
|
|
350
|
+
/**
|
|
351
|
+
* Map `allowedTools` onto claude's `--allowedTools` syntax. `Bash` with a
|
|
352
|
+
* `bashAllowlist` becomes one `Bash(<prefix>:*)` entry per allowed prefix;
|
|
353
|
+
* `Bash` with no allowlist stays plain `Bash`.
|
|
354
|
+
*/
|
|
355
|
+
export function buildAllowedTools(allowedTools, bashAllowlist) {
|
|
356
|
+
const out = [];
|
|
357
|
+
for (const tool of allowedTools) {
|
|
358
|
+
if (tool === 'Bash' && bashAllowlist && bashAllowlist.length > 0) {
|
|
359
|
+
for (const prefix of bashAllowlist) {
|
|
360
|
+
const p = prefix.trim();
|
|
361
|
+
if (p)
|
|
362
|
+
out.push(`Bash(${p}:*)`);
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
else {
|
|
366
|
+
out.push(tool);
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
return out;
|
|
370
|
+
}
|
|
371
|
+
function truncate(s, max = 200) {
|
|
372
|
+
return s.length > max ? `${s.slice(0, max)}…` : s;
|
|
373
|
+
}
|
|
374
|
+
/** Path to the bundled mock (`scripts/mock-claude.mjs`), for XEZ_DRY_RUN=1. */
|
|
375
|
+
function mockClaudePath() {
|
|
376
|
+
const here = dirname(fileURLToPath(import.meta.url));
|
|
377
|
+
// here = <pkg>/dist/core (built) or <pkg>/src/core (tsx dev).
|
|
378
|
+
return resolvePath(here, '..', '..', 'scripts', 'mock-claude.mjs');
|
|
379
|
+
}
|
|
380
|
+
function normalizeIntentionalTeardownResult(msg, terminatedByXezar) {
|
|
381
|
+
if (terminatedByXezar
|
|
382
|
+
&& msg.type === 'result'
|
|
383
|
+
&& msg.is_error === true
|
|
384
|
+
&& msg.subtype === 'error_during_execution') {
|
|
385
|
+
return { ...msg, subtype: 'success', is_error: false };
|
|
386
|
+
}
|
|
387
|
+
return msg;
|
|
388
|
+
}
|
|
389
|
+
function handleClaudeMessage(msg, ctx) {
|
|
390
|
+
if (msg.type === 'assistant' && msg.message?.content) {
|
|
391
|
+
for (const block of msg.message.content) {
|
|
392
|
+
const b = block;
|
|
393
|
+
if (b.type === 'text' && typeof b.text === 'string') {
|
|
394
|
+
ctx.textChunks.push(b.text);
|
|
395
|
+
ctx.onEvent?.({ type: 'text', text: b.text });
|
|
396
|
+
}
|
|
397
|
+
else if (b.type === 'tool_use' && b.id && b.name) {
|
|
398
|
+
ctx.toolCalls.push({ id: b.id, name: b.name, input: b.input });
|
|
399
|
+
ctx.onEvent?.({ type: 'tool-call', id: b.id, tool: b.name, input: b.input });
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
// Assistant-frame usage belongs to the individual API calls inside this
|
|
403
|
+
// agentic turn. Claude's terminal result frame already aggregates those
|
|
404
|
+
// calls, so adding both sources inflates the run total (#716). Keep these
|
|
405
|
+
// frames presentation-only; the result branch below is authoritative,
|
|
406
|
+
// matching the v2 `usage.updated` mapping in AGENT_PROTOCOL.md.
|
|
407
|
+
return 0;
|
|
408
|
+
}
|
|
409
|
+
if (msg.type === 'user' && msg.message?.content) {
|
|
410
|
+
for (const block of msg.message.content) {
|
|
411
|
+
const b = block;
|
|
412
|
+
if (b.type === 'tool_result' && typeof b.tool_use_id === 'string') {
|
|
413
|
+
ctx.onEvent?.({
|
|
414
|
+
type: 'tool-result',
|
|
415
|
+
toolCallId: b.tool_use_id,
|
|
416
|
+
result: stringifyToolResultContent(b.content),
|
|
417
|
+
isError: b.is_error === true,
|
|
418
|
+
});
|
|
419
|
+
// Screenshots and other images inside the result get their own
|
|
420
|
+
// events — the text path above renders them as a placeholder.
|
|
421
|
+
for (const img of toolResultImageBlocks(b.content)) {
|
|
422
|
+
ctx.onEvent?.({ type: 'image', mediaType: img.media_type, data: img.data });
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
return 0;
|
|
427
|
+
}
|
|
428
|
+
if (msg.type === 'result') {
|
|
429
|
+
// Final message of a turn: `result` is the full assistant text; only fall
|
|
430
|
+
// back to it if we never saw streamed assistant text blocks.
|
|
431
|
+
if (typeof msg.result === 'string' && ctx.textChunks.length === 0) {
|
|
432
|
+
ctx.textChunks.push(msg.result);
|
|
433
|
+
ctx.onEvent?.({ type: 'text', text: msg.result });
|
|
434
|
+
}
|
|
435
|
+
if (msg.is_error) {
|
|
436
|
+
ctx.onEvent?.({
|
|
437
|
+
type: 'error',
|
|
438
|
+
message: typeof msg.result === 'string' && msg.result.trim() !== ''
|
|
439
|
+
? msg.result
|
|
440
|
+
: `claude reported result error${msg.subtype ? ` (${msg.subtype})` : ''}`,
|
|
441
|
+
});
|
|
442
|
+
}
|
|
443
|
+
return costWeightedTokens(msg.usage);
|
|
444
|
+
}
|
|
445
|
+
// system/init and anything else: nothing actionable.
|
|
446
|
+
return 0;
|
|
447
|
+
}
|
|
448
|
+
// stringify/image helpers moved to claude-ui-mapper.ts (shared by v1 and v2).
|
|
449
|
+
// ---- subprocess plumbing --------------------------------------------------
|
|
450
|
+
function waitForExit(child) {
|
|
451
|
+
if (child.exitCode != null)
|
|
452
|
+
return Promise.resolve(child.exitCode);
|
|
453
|
+
return new Promise((resolve) => {
|
|
454
|
+
let done = false;
|
|
455
|
+
const fin = (code) => {
|
|
456
|
+
if (done)
|
|
457
|
+
return;
|
|
458
|
+
done = true;
|
|
459
|
+
clearTimeout(safety);
|
|
460
|
+
resolve(code);
|
|
461
|
+
};
|
|
462
|
+
child.once('close', (code) => fin(code));
|
|
463
|
+
child.once('exit', (code) => fin(code));
|
|
464
|
+
// Don't swallow a late error as a clean null exit — fall back to the
|
|
465
|
+
// child's own exit code (which is non-null/non-zero on failure).
|
|
466
|
+
child.once('error', () => fin(child.exitCode ?? null));
|
|
467
|
+
// A SIGKILLed process may never emit 'close' through some edge cases.
|
|
468
|
+
const safety = setTimeout(() => fin(child.exitCode ?? null), EOF_TERM_GRACE_MS + EOF_KILL_GRACE_MS + KILL_GRACE_MS + 5_000);
|
|
469
|
+
safety.unref?.();
|
|
470
|
+
});
|
|
471
|
+
}
|
|
472
|
+
function wrapSpawnError(err, bin) {
|
|
473
|
+
const code = err?.code;
|
|
474
|
+
if (code === 'ENOENT') {
|
|
475
|
+
return new Error(`\`${bin}\` not found on PATH — install Claude Code (https://claude.com/claude-code) and run \`claude\` once to log in`);
|
|
476
|
+
}
|
|
477
|
+
return err instanceof Error ? err : new Error(String(err));
|
|
478
|
+
}
|
|
479
|
+
//# 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,24 @@
|
|
|
1
|
+
import { type ChildProcessWithoutNullStreams } from 'node:child_process';
|
|
2
|
+
import type { ModelOption } from './runner-model-catalog.ts';
|
|
3
|
+
export interface ClaudeModelDiscoveryOptions {
|
|
4
|
+
cwd: string;
|
|
5
|
+
bin?: string;
|
|
6
|
+
timeoutMs?: number;
|
|
7
|
+
spawn?: (bin: string, cwd: string) => ChildProcessWithoutNullStreams;
|
|
8
|
+
}
|
|
9
|
+
/** Grace between closing stdin and SIGTERM, then between SIGTERM and SIGKILL. */
|
|
10
|
+
export declare const TERM_GRACE_MS = 2000;
|
|
11
|
+
export declare const KILL_GRACE_MS = 2000;
|
|
12
|
+
/**
|
|
13
|
+
* Discover the model catalog the host's authenticated Claude Code CLI actually offers.
|
|
14
|
+
*
|
|
15
|
+
* The CLI answers a `list_models` control request over the same stream-json channel the runner
|
|
16
|
+
* already speaks, which makes it the Claude counterpart of the Codex app-server's `model/list`.
|
|
17
|
+
* The probe never starts a turn,
|
|
18
|
+
* so it costs no tokens; it is bounded by a deadline and always terminates its child.
|
|
19
|
+
*
|
|
20
|
+
* Every failure — no CLI, a CLI too old to know `list_models`, not logged in, a malformed answer,
|
|
21
|
+
* a timeout — throws, so `RunnerModelCatalog` degrades to `unavailable` and the picker falls back
|
|
22
|
+
* to the static tier aliases rather than showing an empty list.
|
|
23
|
+
*/
|
|
24
|
+
export declare function discoverClaudeModels(options: ClaudeModelDiscoveryOptions): Promise<ModelOption[]>;
|