@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,208 @@
|
|
|
1
|
+
import { spawn as nodeSpawn } from 'node:child_process';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { buildChildEnv } from './agent-env.js';
|
|
4
|
+
import { readNdjson } from './ndjson.js';
|
|
5
|
+
import { resolveClaudeExecutable } from './claude-cli-runner.js';
|
|
6
|
+
/**
|
|
7
|
+
* One entry of the CLI's `list_models` answer. `value` is what `--model` accepts (an alias like
|
|
8
|
+
* `sonnet`, a pinned id like `claude-fable-5`, or a context-window variant like `opus[1m]`);
|
|
9
|
+
* `resolvedModel` is what that currently resolves to and is deliberately NOT surfaced — pinning
|
|
10
|
+
* xezar to a resolved id would re-create the drift this issue is about. Unknown fields pass
|
|
11
|
+
* through so a CLI that grows the payload does not fail the whole discovery.
|
|
12
|
+
*/
|
|
13
|
+
const modelSchema = z
|
|
14
|
+
.object({
|
|
15
|
+
value: z.string(),
|
|
16
|
+
displayName: z.string().optional(),
|
|
17
|
+
description: z.string().optional(),
|
|
18
|
+
})
|
|
19
|
+
.passthrough();
|
|
20
|
+
const listModelsSchema = z.object({ models: z.array(modelSchema) }).passthrough();
|
|
21
|
+
const controlResponseSchema = z.object({
|
|
22
|
+
type: z.literal('control_response'),
|
|
23
|
+
response: z
|
|
24
|
+
.object({
|
|
25
|
+
subtype: z.string(),
|
|
26
|
+
request_id: z.string().optional(),
|
|
27
|
+
response: z.unknown().optional(),
|
|
28
|
+
error: z.string().optional(),
|
|
29
|
+
})
|
|
30
|
+
.passthrough(),
|
|
31
|
+
});
|
|
32
|
+
/**
|
|
33
|
+
* Wall-clock budget for one discovery. Generous next to Codex's 5 s because the Claude CLI has
|
|
34
|
+
* to boot a full session host (measured ~5.6 s cold on a developer laptop) before it will answer
|
|
35
|
+
* a control request.
|
|
36
|
+
*/
|
|
37
|
+
const DEFAULT_DISCOVERY_TIMEOUT_MS = 15_000;
|
|
38
|
+
/** Defensive cap — a catalog this long is a malfunction, not a rollout. */
|
|
39
|
+
const MAX_MODELS = 200;
|
|
40
|
+
/** Grace between closing stdin and SIGTERM, then between SIGTERM and SIGKILL. */
|
|
41
|
+
export const TERM_GRACE_MS = 2_000;
|
|
42
|
+
export const KILL_GRACE_MS = 2_000;
|
|
43
|
+
const REQUEST_ID = 'xez-list-models-1';
|
|
44
|
+
/**
|
|
45
|
+
* The `value` that stands for "whatever the CLI would pick on its own". xezar already spells that
|
|
46
|
+
* `auto` (no `--model` flag at all), so surfacing the CLI's own entry too would put two rows in
|
|
47
|
+
* the picker meaning the same thing — and `default` is a picker token, not necessarily something
|
|
48
|
+
* `--model` accepts.
|
|
49
|
+
*/
|
|
50
|
+
const IMPLICIT_DEFAULT_VALUE = 'default';
|
|
51
|
+
/**
|
|
52
|
+
* Spawn flags for a discovery probe. `--print` + stream-json is the same headless transport the
|
|
53
|
+
* runner uses, so the control channel is available; `--safe-mode` keeps a probe from executing
|
|
54
|
+
* the user's SessionStart hooks, MCP servers and plugins (discovery must not have side effects,
|
|
55
|
+
* and it needs none of them), while leaving auth and model selection — the only things it asks
|
|
56
|
+
* about — working normally. `--no-session-persistence` keeps a probe out of the resume picker.
|
|
57
|
+
*/
|
|
58
|
+
const DISCOVERY_ARGS = [
|
|
59
|
+
'--print',
|
|
60
|
+
'--input-format',
|
|
61
|
+
'stream-json',
|
|
62
|
+
'--output-format',
|
|
63
|
+
'stream-json',
|
|
64
|
+
'--verbose',
|
|
65
|
+
'--safe-mode',
|
|
66
|
+
'--no-session-persistence',
|
|
67
|
+
];
|
|
68
|
+
function spawnClaudeProbe(bin, cwd) {
|
|
69
|
+
return nodeSpawn(bin, DISCOVERY_ARGS, {
|
|
70
|
+
cwd,
|
|
71
|
+
env: buildChildEnv({ backend: 'claude' }),
|
|
72
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Discover the model catalog the host's authenticated Claude Code CLI actually offers.
|
|
77
|
+
*
|
|
78
|
+
* The CLI answers a `list_models` control request over the same stream-json channel the runner
|
|
79
|
+
* already speaks, which makes it the Claude counterpart of the Codex app-server's `model/list`.
|
|
80
|
+
* The probe never starts a turn,
|
|
81
|
+
* so it costs no tokens; it is bounded by a deadline and always terminates its child.
|
|
82
|
+
*
|
|
83
|
+
* Every failure — no CLI, a CLI too old to know `list_models`, not logged in, a malformed answer,
|
|
84
|
+
* a timeout — throws, so `RunnerModelCatalog` degrades to `unavailable` and the picker falls back
|
|
85
|
+
* to the static tier aliases rather than showing an empty list.
|
|
86
|
+
*/
|
|
87
|
+
export async function discoverClaudeModels(options) {
|
|
88
|
+
const child = (options.spawn ?? spawnClaudeProbe)(resolveClaudeExecutable(options.bin), options.cwd);
|
|
89
|
+
// A probe reads only stdout, but an undrained stderr pipe fills and wedges the child, and an
|
|
90
|
+
// unhandled stream `error` would take the whole server down with it.
|
|
91
|
+
child.stderr.resume();
|
|
92
|
+
child.stderr.on('error', () => { });
|
|
93
|
+
child.stdin.on('error', () => { });
|
|
94
|
+
const timeoutMs = options.timeoutMs ?? DEFAULT_DISCOVERY_TIMEOUT_MS;
|
|
95
|
+
let timeout;
|
|
96
|
+
try {
|
|
97
|
+
return await Promise.race([
|
|
98
|
+
readCatalog(child),
|
|
99
|
+
childFailure(child),
|
|
100
|
+
new Promise((_, reject) => {
|
|
101
|
+
timeout = setTimeout(() => reject(new Error('Claude model discovery timed out')), timeoutMs);
|
|
102
|
+
timeout.unref?.();
|
|
103
|
+
}),
|
|
104
|
+
]);
|
|
105
|
+
}
|
|
106
|
+
finally {
|
|
107
|
+
if (timeout)
|
|
108
|
+
clearTimeout(timeout);
|
|
109
|
+
endClaudeProbe(child);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
/** Rejects when the child dies before answering — a missing binary or an immediate exit. */
|
|
113
|
+
function childFailure(child) {
|
|
114
|
+
return new Promise((_, reject) => {
|
|
115
|
+
child.once('error', () => reject(new Error('Claude model discovery child failed')));
|
|
116
|
+
child.once('exit', (code) => reject(new Error(`Claude model discovery child exited (${code ?? 'unknown'})`)));
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
async function readCatalog(child) {
|
|
120
|
+
try {
|
|
121
|
+
child.stdin.write(`${JSON.stringify({
|
|
122
|
+
type: 'control_request',
|
|
123
|
+
request_id: REQUEST_ID,
|
|
124
|
+
request: { subtype: 'list_models' },
|
|
125
|
+
})}\n`);
|
|
126
|
+
}
|
|
127
|
+
catch {
|
|
128
|
+
throw new Error('Claude model discovery could not reach the CLI');
|
|
129
|
+
}
|
|
130
|
+
for await (const line of readNdjson(child.stdout)) {
|
|
131
|
+
let message;
|
|
132
|
+
try {
|
|
133
|
+
message = JSON.parse(line);
|
|
134
|
+
}
|
|
135
|
+
catch {
|
|
136
|
+
throw new Error('Claude model discovery returned malformed NDJSON');
|
|
137
|
+
}
|
|
138
|
+
// The CLI interleaves session/hook chatter with control traffic; ignore everything that is
|
|
139
|
+
// not the answer to our own request rather than guessing at the stream's shape.
|
|
140
|
+
const parsed = controlResponseSchema.safeParse(message);
|
|
141
|
+
if (!parsed.success)
|
|
142
|
+
continue;
|
|
143
|
+
const { response } = parsed.data;
|
|
144
|
+
if (response.request_id !== undefined && response.request_id !== REQUEST_ID)
|
|
145
|
+
continue;
|
|
146
|
+
if (response.subtype !== 'success') {
|
|
147
|
+
// An older CLI answers `Unsupported control request subtype: list_models` here. That is an
|
|
148
|
+
// unavailable catalog, not a broken xezar — the reason is never surfaced verbatim.
|
|
149
|
+
throw new Error('Claude model discovery is unsupported by this CLI');
|
|
150
|
+
}
|
|
151
|
+
return toModelOptions(response.response);
|
|
152
|
+
}
|
|
153
|
+
throw new Error('Claude model discovery ended without an answer');
|
|
154
|
+
}
|
|
155
|
+
function toModelOptions(payload) {
|
|
156
|
+
const parsed = listModelsSchema.safeParse(payload);
|
|
157
|
+
if (!parsed.success)
|
|
158
|
+
throw new Error('Claude model discovery returned malformed model data');
|
|
159
|
+
const models = [];
|
|
160
|
+
const ids = new Set();
|
|
161
|
+
for (const model of parsed.data.models) {
|
|
162
|
+
const id = model.value.trim();
|
|
163
|
+
if (!id || id === IMPLICIT_DEFAULT_VALUE || ids.has(id))
|
|
164
|
+
continue;
|
|
165
|
+
if (models.length >= MAX_MODELS)
|
|
166
|
+
throw new Error('Claude model discovery exceeded the size limit');
|
|
167
|
+
ids.add(id);
|
|
168
|
+
models.push({
|
|
169
|
+
id,
|
|
170
|
+
label: model.displayName?.trim() || id,
|
|
171
|
+
description: model.description?.trim() ?? '',
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
// A CLI that answers with lines but nothing usable is a protocol mismatch, not an account with
|
|
175
|
+
// no models — report it as unavailable so the static aliases keep the picker working.
|
|
176
|
+
if (models.length === 0)
|
|
177
|
+
throw new Error('Claude model discovery returned no usable models');
|
|
178
|
+
return models;
|
|
179
|
+
}
|
|
180
|
+
/** Close stdin, then escalate TERM → KILL so a wedged probe can never outlive its request. */
|
|
181
|
+
function endClaudeProbe(child) {
|
|
182
|
+
try {
|
|
183
|
+
child.stdin.end();
|
|
184
|
+
}
|
|
185
|
+
catch {
|
|
186
|
+
// already gone
|
|
187
|
+
}
|
|
188
|
+
// `child.killed` only says a signal was *delivered* — Node flips it as soon as SIGTERM is sent,
|
|
189
|
+
// long before (and even if never) the child dies. Gating escalation on it would let a probe that
|
|
190
|
+
// ignores SIGTERM outlive the whole window, so track the actual termination instead.
|
|
191
|
+
let exited = child.exitCode != null || child.signalCode != null;
|
|
192
|
+
child.once('exit', () => {
|
|
193
|
+
exited = true;
|
|
194
|
+
});
|
|
195
|
+
const term = setTimeout(() => {
|
|
196
|
+
if (exited)
|
|
197
|
+
return;
|
|
198
|
+
child.kill('SIGTERM');
|
|
199
|
+
const kill = setTimeout(() => {
|
|
200
|
+
if (exited)
|
|
201
|
+
return;
|
|
202
|
+
child.kill('SIGKILL');
|
|
203
|
+
}, KILL_GRACE_MS);
|
|
204
|
+
kill.unref?.();
|
|
205
|
+
}, TERM_GRACE_MS);
|
|
206
|
+
term.unref?.();
|
|
207
|
+
}
|
|
208
|
+
//# sourceMappingURL=claude-model-catalog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-model-catalog.js","sourceRoot":"","sources":["../../src/core/claude-model-catalog.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,79 @@
|
|
|
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: `AGENT_PROTOCOL.md` §4 (per-backend mapping). Golden
|
|
7
|
+
* fixtures replaying real wire shapes live in `__fixtures__/claude/`.
|
|
8
|
+
*
|
|
9
|
+
* Robustness rule: input is untrusted wire data — the mapper never throws;
|
|
10
|
+
* unknown message/block types map to zero events.
|
|
11
|
+
*
|
|
12
|
+
* State is explicit and treated as immutable: callers thread the returned
|
|
13
|
+
* `state` into the next call. Item ids are deterministic — tool items reuse
|
|
14
|
+
* the wire `tool_use` id; text/thinking blocks (which have no wire id) get
|
|
15
|
+
* sequential `item_<n>` ids, turns get `turn_<n>` — so replaying a stored
|
|
16
|
+
* transcript reproduces the exact event sequence.
|
|
17
|
+
*
|
|
18
|
+
* Plan/task rule: task ids are the harness's, and it only ever reports them in
|
|
19
|
+
* tool RESULT text (`Task #3 created successfully: …`, `#3 [pending] …`), never
|
|
20
|
+
* in the call. So a `TaskCreate` parks until its result lands. Inferring ids by
|
|
21
|
+
* counting creates looks equivalent and is not: `--resume` reopens a session
|
|
22
|
+
* whose list is already at 1..N while a fresh mapper state starts at zero, and
|
|
23
|
+
* the two id spaces then drift silently — updates land on the wrong row.
|
|
24
|
+
*/
|
|
25
|
+
import type { PlanEntry, UiEvent, UiToolItem } from './ui-events.ts';
|
|
26
|
+
export interface ClaudeUiMapperState {
|
|
27
|
+
/** Used when `system/init` lacks `session_id` (the dry-run mock does). */
|
|
28
|
+
readonly fallbackSessionId?: string;
|
|
29
|
+
/** True once `system/init` produced `session.started`. */
|
|
30
|
+
readonly sessionStarted: boolean;
|
|
31
|
+
/** Turns begun before init arrived — their `turn.started` is queued so
|
|
32
|
+
* `session.started` stays the first event on the wire. */
|
|
33
|
+
readonly pendingTurnIds: readonly string[];
|
|
34
|
+
readonly turnSeq: number;
|
|
35
|
+
readonly currentTurnId: string | null;
|
|
36
|
+
readonly itemSeq: number;
|
|
37
|
+
/** True once any assistant `text` block minted a message item. SESSION-scoped,
|
|
38
|
+
* never reset per turn — it mirrors `ctx.textChunks` in claude-cli-runner.ts,
|
|
39
|
+
* which is allocated once per `runAgent` and accumulates across turns. When a
|
|
40
|
+
* session streams no text block at all, the runner falls back to emitting the
|
|
41
|
+
* v1 `text` from `msg.result` (`textChunks.length === 0`), and `mapResult`
|
|
42
|
+
* must mint the v2 twin under the SAME guard — otherwise that prose exists
|
|
43
|
+
* only in v1 and the cockpit's "v2 wins per turn" dedup drops it with no
|
|
44
|
+
* replacement, which is exactly the vanishing-message bug. */
|
|
45
|
+
readonly sawAssistantText: boolean;
|
|
46
|
+
/** `tool_use` items awaiting their `tool_result`, keyed by tool_use id. */
|
|
47
|
+
readonly openTools: ReadonlyMap<string, UiToolItem>;
|
|
48
|
+
/** The running plan built incrementally by Claude's task tools, keyed by the
|
|
49
|
+
* task id the harness assigned — read from the `TaskCreate` result, never
|
|
50
|
+
* guessed (see `applyTaskCreateResult`). */
|
|
51
|
+
readonly tasks: ReadonlyMap<string, PlanEntry>;
|
|
52
|
+
/** `TaskCreate` calls whose result has not arrived yet, keyed by tool_use id.
|
|
53
|
+
* The entry parks here until the result reveals its real id. */
|
|
54
|
+
readonly pendingTaskCreates: ReadonlyMap<string, PlanEntry>;
|
|
55
|
+
}
|
|
56
|
+
export interface ClaudeUiMapping {
|
|
57
|
+
events: UiEvent[];
|
|
58
|
+
state: ClaudeUiMapperState;
|
|
59
|
+
}
|
|
60
|
+
export declare function createClaudeUiState(opts?: {
|
|
61
|
+
fallbackSessionId?: string;
|
|
62
|
+
}): ClaudeUiMapperState;
|
|
63
|
+
/**
|
|
64
|
+
* Claude has no wire-level turn-start — the runner writing a user message to
|
|
65
|
+
* stdin IS the turn boundary, so the runner calls this on each send. Until
|
|
66
|
+
* `init` arrives the event is queued (the seed message is written before the
|
|
67
|
+
* first stdout line is read).
|
|
68
|
+
*/
|
|
69
|
+
export declare function claudeTurnStarted(state: ClaudeUiMapperState): ClaudeUiMapping;
|
|
70
|
+
/** Fold one parsed stream-json message into v2 events. Never throws. */
|
|
71
|
+
export declare function mapClaudeMessage(msg: unknown, state: ClaudeUiMapperState): ClaudeUiMapping;
|
|
72
|
+
/** Flatten a `tool_result.content` (string or block array) to display text.
|
|
73
|
+
* Image blocks become a placeholder — they ride as their own events. */
|
|
74
|
+
export declare function stringifyToolResultContent(content: unknown): string;
|
|
75
|
+
/** base64 image blocks inside a tool_result's content, if any. */
|
|
76
|
+
export declare function toolResultImageBlocks(content: unknown): Array<{
|
|
77
|
+
media_type: string;
|
|
78
|
+
data: string;
|
|
79
|
+
}>;
|