@wjarka/cezarion 0.15.1 → 0.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +167 -46
- package/dist/agent-config/catalog.d.ts +6 -2
- package/dist/agent-config/catalog.js +78 -3
- package/dist/agent-config/catalog.js.map +1 -1
- package/dist/agent-config/model-settings/shared.js +6 -3
- package/dist/agent-config/model-settings/shared.js.map +1 -1
- package/dist/agent-config/models.js +4 -0
- package/dist/agent-config/models.js.map +1 -1
- package/dist/agent-config/validate.js +6 -0
- package/dist/agent-config/validate.js.map +1 -1
- package/dist/artifacts/cli.js +10 -2
- package/dist/artifacts/cli.js.map +1 -1
- package/dist/automations/coordinator.d.ts +7 -0
- package/dist/automations/coordinator.js +22 -2
- package/dist/automations/coordinator.js.map +1 -1
- package/dist/automations/github-poller.d.ts +4 -4
- package/dist/automations/github-poller.js.map +1 -1
- package/dist/automations/schedule-runner.d.ts +130 -0
- package/dist/automations/schedule-runner.js +326 -0
- package/dist/automations/schedule-runner.js.map +1 -0
- package/dist/automations/scheduler.d.ts +38 -7
- package/dist/automations/scheduler.js +90 -22
- package/dist/automations/scheduler.js.map +1 -1
- package/dist/automations/store.d.ts +80 -3
- package/dist/automations/store.js +208 -16
- package/dist/automations/store.js.map +1 -1
- package/dist/automations/task-template.d.ts +42 -6
- package/dist/automations/task-template.js +152 -24
- package/dist/automations/task-template.js.map +1 -1
- package/dist/automations/types.d.ts +142 -6
- package/dist/automations/types.js +64 -6
- package/dist/automations/types.js.map +1 -1
- package/dist/autosave-holders.js +8 -12
- package/dist/autosave-holders.js.map +1 -1
- package/dist/ci-wait/client.d.ts +8 -1
- package/dist/ci-wait/client.js +43 -1
- package/dist/ci-wait/client.js.map +1 -1
- package/dist/ci-wait/controller.d.ts +83 -4
- package/dist/ci-wait/controller.js +76 -11
- package/dist/ci-wait/controller.js.map +1 -1
- package/dist/ci-wait/errors.d.ts +7 -1
- package/dist/ci-wait/errors.js +36 -0
- package/dist/ci-wait/errors.js.map +1 -1
- package/dist/ci-wait/github.d.ts +2 -0
- package/dist/ci-wait/github.js +3 -1
- package/dist/ci-wait/github.js.map +1 -1
- package/dist/ci-wait/mcp.d.ts +2 -98
- package/dist/ci-wait/mcp.js +11 -25
- package/dist/ci-wait/mcp.js.map +1 -1
- package/dist/ci-wait/supervisor.d.ts +2 -1
- package/dist/ci-wait/supervisor.js +2 -1
- package/dist/ci-wait/supervisor.js.map +1 -1
- package/dist/ci-wait/tools.d.ts +307 -0
- package/dist/ci-wait/tools.js +63 -0
- package/dist/ci-wait/tools.js.map +1 -0
- package/dist/config.d.ts +3 -0
- package/dist/config.js +7 -0
- package/dist/config.js.map +1 -1
- package/dist/contract/agent-config.d.ts +5 -0
- package/dist/contract/agent-profiles.d.ts +15 -0
- package/dist/contract/automation-schedule.d.ts +60 -0
- package/dist/contract/automations.d.ts +208 -36
- package/dist/contract/delegation.d.ts +96 -0
- package/dist/contract/discovery.d.ts +7 -0
- package/dist/contract/github.d.ts +1 -0
- package/dist/contract/health.d.ts +6 -0
- package/dist/contract/index.d.ts +3 -0
- package/dist/contract/index.js +1445 -745
- package/dist/contract/preview.d.ts +508 -0
- package/dist/contract/runs.d.ts +716 -15
- package/dist/contract/skills.d.ts +39 -0
- package/dist/contract/workflows.d.ts +6 -0
- package/dist/contract/workspace.d.ts +65 -0
- package/dist/contract/zoned-time.d.ts +35 -0
- package/dist/core/agent-env.d.ts +11 -0
- package/dist/core/agent-env.js +27 -5
- package/dist/core/agent-env.js.map +1 -1
- package/dist/core/agent-profiles.js +7 -0
- package/dist/core/agent-profiles.js.map +1 -1
- package/dist/core/agent-runner.d.ts +49 -1
- package/dist/core/agent-runner.js +2 -1
- package/dist/core/agent-runner.js.map +1 -1
- package/dist/core/backend-detect.d.ts +3 -2
- package/dist/core/backend-detect.js +27 -1
- package/dist/core/backend-detect.js.map +1 -1
- package/dist/core/claude-cli-runner.d.ts +1 -0
- package/dist/core/claude-cli-runner.js +69 -19
- package/dist/core/claude-cli-runner.js.map +1 -1
- package/dist/core/codex-app-server-runner.d.ts +1 -0
- package/dist/core/codex-app-server-runner.js +200 -25
- package/dist/core/codex-app-server-runner.js.map +1 -1
- package/dist/core/codex-app-server-transport.d.ts +7 -3
- package/dist/core/codex-app-server-transport.js +11 -9
- package/dist/core/codex-app-server-transport.js.map +1 -1
- package/dist/core/cursor-acp-runner.d.ts +1 -0
- package/dist/core/cursor-acp-runner.js +24 -9
- package/dist/core/cursor-acp-runner.js.map +1 -1
- package/dist/core/host-model-catalog.js +2 -0
- package/dist/core/host-model-catalog.js.map +1 -1
- package/dist/core/managed-session.js +2 -0
- package/dist/core/managed-session.js.map +1 -1
- package/dist/core/model-identity.js +2 -0
- package/dist/core/model-identity.js.map +1 -1
- package/dist/core/model-presets.js +3 -0
- package/dist/core/model-presets.js.map +1 -1
- package/dist/core/omp-model-catalog.d.ts +43 -0
- package/dist/core/omp-model-catalog.js +205 -0
- package/dist/core/omp-model-catalog.js.map +1 -0
- package/dist/core/omp-runner.d.ts +73 -0
- package/dist/core/omp-runner.js +990 -0
- package/dist/core/omp-runner.js.map +1 -0
- package/dist/core/omp-ui-mapper.d.ts +106 -0
- package/dist/core/omp-ui-mapper.js +882 -0
- package/dist/core/omp-ui-mapper.js.map +1 -0
- package/dist/core/opencode-server-runner.d.ts +18 -4
- package/dist/core/opencode-server-runner.js +337 -96
- package/dist/core/opencode-server-runner.js.map +1 -1
- package/dist/core/opencode-session-error.d.ts +11 -0
- package/dist/core/opencode-session-error.js +26 -0
- package/dist/core/opencode-session-error.js.map +1 -0
- package/dist/core/opencode-ui-mapper.js +4 -36
- package/dist/core/opencode-ui-mapper.js.map +1 -1
- package/dist/core/pi-runner.d.ts +1 -0
- package/dist/core/pi-runner.js +75 -12
- package/dist/core/pi-runner.js.map +1 -1
- package/dist/core/provider-auth.d.ts +9 -2
- package/dist/core/provider-auth.js +43 -6
- package/dist/core/provider-auth.js.map +1 -1
- package/dist/core/runner-factory.js +3 -0
- package/dist/core/runner-factory.js.map +1 -1
- package/dist/core/runner-model-catalog.js +1 -0
- package/dist/core/runner-model-catalog.js.map +1 -1
- package/dist/core/runner-stderr.d.ts +2 -0
- package/dist/core/runner-stderr.js +20 -0
- package/dist/core/runner-stderr.js.map +1 -0
- package/dist/core/session-process.d.ts +22 -0
- package/dist/core/session-process.js +202 -0
- package/dist/core/session-process.js.map +1 -0
- package/dist/core/ui-events.d.ts +1 -1
- package/dist/core/usage-limit.js +3 -60
- package/dist/core/usage-limit.js.map +1 -1
- package/dist/data-gitignore.d.ts +6 -0
- package/dist/data-gitignore.js +57 -0
- package/dist/data-gitignore.js.map +1 -0
- package/dist/delegation/capacity.d.ts +19 -0
- package/dist/delegation/capacity.js +34 -0
- package/dist/delegation/capacity.js.map +1 -0
- package/dist/delegation/cli.js +13 -4
- package/dist/delegation/cli.js.map +1 -1
- package/dist/delegation/conversations.d.ts +4 -2
- package/dist/delegation/conversations.js +8 -12
- package/dist/delegation/conversations.js.map +1 -1
- package/dist/delegation/credentials.d.ts +2 -0
- package/dist/delegation/credentials.js +10 -0
- package/dist/delegation/credentials.js.map +1 -1
- package/dist/delegation/destroy-observation.d.ts +42 -0
- package/dist/delegation/destroy-observation.js +115 -0
- package/dist/delegation/destroy-observation.js.map +1 -0
- package/dist/delegation/execution-identity.d.ts +6 -0
- package/dist/delegation/execution-identity.js +1 -1
- package/dist/delegation/execution-identity.js.map +1 -1
- package/dist/delegation/policy.d.ts +3 -2
- package/dist/delegation/policy.js +7 -5
- package/dist/delegation/policy.js.map +1 -1
- package/dist/delegation/process-liveness.d.ts +57 -20
- package/dist/delegation/process-liveness.js +114 -92
- package/dist/delegation/process-liveness.js.map +1 -1
- package/dist/delegation/provision.js +6 -6
- package/dist/delegation/provision.js.map +1 -1
- package/dist/delegation/results.js +4 -2
- package/dist/delegation/results.js.map +1 -1
- package/dist/delegation/retry-backoff.d.ts +23 -0
- package/dist/delegation/retry-backoff.js +18 -0
- package/dist/delegation/retry-backoff.js.map +1 -0
- package/dist/delegation/routes.d.ts +64 -58
- package/dist/delegation/scratch-cleanup.d.ts +29 -0
- package/dist/delegation/scratch-cleanup.js +143 -0
- package/dist/delegation/scratch-cleanup.js.map +1 -0
- package/dist/delegation/service.d.ts +20 -1
- package/dist/delegation/service.js +233 -70
- package/dist/delegation/service.js.map +1 -1
- package/dist/delegation/transport.d.ts +12 -6
- package/dist/delegation/workspace.d.ts +23 -4
- package/dist/delegation/workspace.js +147 -31
- package/dist/delegation/workspace.js.map +1 -1
- package/dist/git-worktree-lock-helper.js +8 -3
- package/dist/git-worktree-lock-helper.js.map +1 -1
- package/dist/git-worktree-lock.d.ts +6 -1
- package/dist/git-worktree-lock.js +10 -4
- package/dist/git-worktree-lock.js.map +1 -1
- package/dist/git-worktree-release.d.ts +20 -0
- package/dist/git-worktree-release.js +27 -0
- package/dist/git-worktree-release.js.map +1 -0
- package/dist/git-worktree.d.ts +8 -2
- package/dist/git-worktree.js +19 -2
- package/dist/git-worktree.js.map +1 -1
- package/dist/handoff.d.ts +2 -2
- package/dist/handoff.js +1 -1
- package/dist/index.js +109 -76
- package/dist/index.js.map +1 -1
- package/dist/paths.d.ts +1 -1
- package/dist/paths.js +5 -1
- package/dist/paths.js.map +1 -1
- package/dist/preview/cdp.d.ts +13 -0
- package/dist/preview/cdp.js +69 -0
- package/dist/preview/cdp.js.map +1 -0
- package/dist/preview/chromium.d.ts +75 -0
- package/dist/preview/chromium.js +394 -0
- package/dist/preview/chromium.js.map +1 -0
- package/dist/preview/dev-server.d.ts +68 -0
- package/dist/preview/dev-server.js +341 -0
- package/dist/preview/dev-server.js.map +1 -0
- package/dist/preview/host.d.ts +154 -0
- package/dist/preview/host.js +681 -0
- package/dist/preview/host.js.map +1 -0
- package/dist/preview/registration.d.ts +63 -0
- package/dist/preview/registration.js +109 -0
- package/dist/preview/registration.js.map +1 -0
- package/dist/preview/session.d.ts +73 -0
- package/dist/preview/session.js +347 -0
- package/dist/preview/session.js.map +1 -0
- package/dist/preview/url.d.ts +6 -0
- package/dist/preview/url.js +17 -0
- package/dist/preview/url.js.map +1 -0
- package/dist/runs/agent-tmpdir-removal.d.ts +15 -0
- package/dist/runs/agent-tmpdir-removal.js +60 -0
- package/dist/runs/agent-tmpdir-removal.js.map +1 -0
- package/dist/runs/agent-tmpdir.d.ts +12 -1
- package/dist/runs/agent-tmpdir.js +123 -34
- package/dist/runs/agent-tmpdir.js.map +1 -1
- package/dist/runs/delegation-state.d.ts +5 -1
- package/dist/runs/delegation-state.js +9 -0
- package/dist/runs/delegation-state.js.map +1 -1
- package/dist/runs/event-history.d.ts +4 -4
- package/dist/runs/event-history.js +97 -117
- package/dist/runs/event-history.js.map +1 -1
- package/dist/runs/history-compressor.d.ts +29 -0
- package/dist/runs/history-compressor.js +116 -0
- package/dist/runs/history-compressor.js.map +1 -0
- package/dist/runs/history-file.d.ts +36 -0
- package/dist/runs/history-file.js +463 -0
- package/dist/runs/history-file.js.map +1 -0
- package/dist/runs/human-ask-summary.js +18 -13
- package/dist/runs/human-ask-summary.js.map +1 -1
- package/dist/runs/legacy-index.d.ts +62 -0
- package/dist/runs/legacy-index.js +168 -0
- package/dist/runs/legacy-index.js.map +1 -0
- package/dist/runs/raw-record.d.ts +52 -0
- package/dist/runs/raw-record.js +145 -0
- package/dist/runs/raw-record.js.map +1 -0
- package/dist/runs/retention.d.ts +13 -6
- package/dist/runs/retention.js +42 -13
- package/dist/runs/retention.js.map +1 -1
- package/dist/runs/run-claims.d.ts +23 -0
- package/dist/runs/run-claims.js +24 -0
- package/dist/runs/run-claims.js.map +1 -0
- package/dist/runs/run-database.d.ts +385 -0
- package/dist/runs/run-database.js +930 -0
- package/dist/runs/run-database.js.map +1 -0
- package/dist/runs/run-index.d.ts +35 -9
- package/dist/runs/run-index.js +200 -25
- package/dist/runs/run-index.js.map +1 -1
- package/dist/runs/run-row.d.ts +44 -0
- package/dist/runs/run-row.js +84 -0
- package/dist/runs/run-row.js.map +1 -0
- package/dist/runs/run-search.d.ts +29 -0
- package/dist/runs/run-search.js +63 -0
- package/dist/runs/run-search.js.map +1 -0
- package/dist/runs/store-open-error.d.ts +24 -0
- package/dist/runs/store-open-error.js +61 -0
- package/dist/runs/store-open-error.js.map +1 -0
- package/dist/runs/store.d.ts +667 -32
- package/dist/runs/store.js +2153 -324
- package/dist/runs/store.js.map +1 -1
- package/dist/runs/transcript-facts.d.ts +77 -0
- package/dist/runs/transcript-facts.js +302 -0
- package/dist/runs/transcript-facts.js.map +1 -0
- package/dist/runs/webhook.js +5 -4
- package/dist/runs/webhook.js.map +1 -1
- package/dist/runs/worker-execution.d.ts +22 -0
- package/dist/runs/worker-execution.js +30 -0
- package/dist/runs/worker-execution.js.map +1 -0
- package/dist/server/capabilities.d.ts +1 -0
- package/dist/server/capabilities.js +2 -0
- package/dist/server/capabilities.js.map +1 -1
- package/dist/server/cockpit-ownership.d.ts +8 -0
- package/dist/server/cockpit-ownership.js +19 -0
- package/dist/server/cockpit-ownership.js.map +1 -1
- package/dist/server/forge/github.d.ts +1 -4
- package/dist/server/forge/github.js +47 -23
- package/dist/server/forge/github.js.map +1 -1
- package/dist/server/git.js +1 -1
- package/dist/server/git.js.map +1 -1
- package/dist/server/open-in-app.js +1 -0
- package/dist/server/open-in-app.js.map +1 -1
- package/dist/server/preview-socket.d.ts +36 -0
- package/dist/server/preview-socket.js +126 -0
- package/dist/server/preview-socket.js.map +1 -0
- package/dist/server/project-context.d.ts +31 -4
- package/dist/server/project-context.js +73 -9
- package/dist/server/project-context.js.map +1 -1
- package/dist/server/provider-action-gate.js +1 -0
- package/dist/server/provider-action-gate.js.map +1 -1
- package/dist/server/repo-branches.d.ts +4 -3
- package/dist/server/repo-branches.js +5 -4
- package/dist/server/repo-branches.js.map +1 -1
- package/dist/server/server.d.ts +4500 -2727
- package/dist/server/server.js +651 -202
- package/dist/server/server.js.map +1 -1
- package/dist/server/upgrade-router.d.ts +23 -0
- package/dist/server/upgrade-router.js +53 -0
- package/dist/server/upgrade-router.js.map +1 -0
- package/dist/server/validators.d.ts +6 -1
- package/dist/server/validators.js +4 -4
- package/dist/server/validators.js.map +1 -1
- package/dist/server/ws.d.ts +16 -16
- package/dist/server/ws.js +56 -54
- package/dist/server/ws.js.map +1 -1
- package/dist/skills-remote.d.ts +14 -0
- package/dist/skills-remote.js +91 -15
- package/dist/skills-remote.js.map +1 -1
- package/dist/task-cli/cli.js +40 -16
- package/dist/task-cli/cli.js.map +1 -1
- package/dist/task-cli/discovery.d.ts +4 -3
- package/dist/task-cli/discovery.js +4 -3
- package/dist/task-cli/discovery.js.map +1 -1
- package/dist/task-cli/http.d.ts +2 -0
- package/dist/task-cli/http.js +10 -4
- package/dist/task-cli/http.js.map +1 -1
- package/dist/task-cli/projections.d.ts +5 -2
- package/dist/task-cli/projections.js +13 -0
- package/dist/task-cli/projections.js.map +1 -1
- package/dist/task-cli/watch.d.ts +15 -2
- package/dist/task-cli/watch.js +31 -9
- package/dist/task-cli/watch.js.map +1 -1
- package/dist/ui-state.d.ts +4 -3
- package/dist/ui-state.js +8 -3
- package/dist/ui-state.js.map +1 -1
- package/dist/workflows/grouped-command.d.ts +31 -0
- package/dist/workflows/grouped-command.js +143 -0
- package/dist/workflows/grouped-command.js.map +1 -0
- package/dist/workflows/run.d.ts +223 -42
- package/dist/workflows/run.js +1316 -398
- package/dist/workflows/run.js.map +1 -1
- package/dist/workflows/types.d.ts +12 -0
- package/dist/workflows/types.js +20 -0
- package/dist/workflows/types.js.map +1 -1
- package/dist/workspace/agent-accounts.d.ts +5 -1
- package/dist/workspace/agent-accounts.js +1 -0
- package/dist/workspace/agent-accounts.js.map +1 -1
- package/dist/workspace/agent-profiles.js +1 -1
- package/dist/workspace/agent-profiles.js.map +1 -1
- package/dist/workspace/config.d.ts +3 -1
- package/dist/workspace/config.js +1 -0
- package/dist/workspace/config.js.map +1 -1
- package/dist/worktree-setup.d.ts +85 -0
- package/dist/worktree-setup.js +164 -0
- package/dist/worktree-setup.js.map +1 -0
- package/package.json +7 -5
- package/scripts/benchmark-run-store-fixture.ts +428 -0
- package/scripts/benchmark-run-store.ts +743 -0
- package/scripts/benchmark-stuck-destroys.ts +143 -0
- package/scripts/mock-autonomous.mjs +11 -0
- package/scripts/mock-ci-tool.mjs +20 -5
- package/scripts/mock-claude.mjs +110 -1
- package/scripts/mock-codex-app-server.mjs +117 -2
- package/scripts/mock-codex-coalesce-steer.mjs +59 -0
- package/scripts/mock-codex-reverse-steer.mjs +130 -0
- package/scripts/mock-cursor-acp.mjs +75 -1
- package/scripts/mock-omp-rpc.mjs +605 -0
- package/scripts/mock-opencode-serve.mjs +312 -22
- package/scripts/mock-pi-rpc.mjs +109 -3
- package/scripts/mock-runner-crash.mjs +42 -0
- package/scripts/mock-silent-tail.mjs +78 -0
- package/scripts/mock-turn-messages.mjs +5 -0
- package/scripts/omp-ci-wait.mjs +29 -0
- package/scripts/omp-restrict-delegation.yml +4 -0
- package/scripts/pi-ci-wait.mjs +12 -9
- package/scripts/seed-archive-profile.ts +3 -3
- package/web/dist/assets/agent-accounts-CFOBMVHc.js +1 -0
- package/web/dist/assets/alert-dialog-BrpNUwMt.js +1 -0
- package/web/dist/assets/app-window-CSHwDX9N.js +1 -0
- package/web/dist/assets/button-C_rd7CPp.js +43 -0
- package/web/dist/assets/compare-variants-D6WXhvXA.js +1 -0
- package/web/dist/assets/diff-DrEARXTV.js +3 -0
- package/web/dist/assets/diff-controls-B1-j7nFg.js +1 -0
- package/web/dist/assets/{diff-view-DPn6bQ5W.js → diff-view-DvGLjdTk.js} +3 -3
- package/web/dist/assets/dropdown-menu-BegOZFrj.js +1 -0
- package/web/dist/assets/format-DpNe3S0A.js +1 -0
- package/web/dist/assets/git-toolbar-Cw4ljmhB.js +1 -0
- package/web/dist/assets/github-CfV5sqL0.js +1 -0
- package/web/dist/assets/{image-preview-DJ8cgb1Z.js → image-preview-FOEfqpZP.js} +1 -1
- package/web/dist/assets/index-DgWWlOLy.js +13 -0
- package/web/dist/assets/index-fBFnuvxu.css +1 -0
- package/web/dist/assets/{nav-row-styles-3j64kH5s.js → nav-row-styles-vp2JbhuJ.js} +1 -1
- package/web/dist/assets/play-CmVAj_fu.js +1 -0
- package/web/dist/assets/popover-BohP6WTx.js +1 -0
- package/web/dist/assets/preview-pane-connected-qTA5KNoJ.js +3 -0
- package/web/dist/assets/preview-state-vuMviq6q.js +1 -0
- package/web/dist/assets/prompt-templates-Cubdut_C.js +15 -0
- package/web/dist/assets/repo-git-Cf4t5PD0.js +1 -0
- package/web/dist/assets/{run-diff-5-RRdcVz.js → run-diff-BpkUW37Z.js} +3 -3
- package/web/dist/assets/run-header-68WHf9wV.js +1 -0
- package/web/dist/assets/skills-DiVIgKeU.js +1 -0
- package/web/dist/assets/square-terminal-B6RYYieR.js +1 -0
- package/web/dist/assets/status-dot-CqTJHSP9.js +1 -0
- package/web/dist/assets/{tab-link-K0hjzEXR.js → tab-link-B07Hu4QX.js} +1 -1
- package/web/dist/assets/task-changes--lQF6EYf.js +1 -0
- package/web/dist/assets/task-commits-Cx0qy4DN.js +1 -0
- package/web/dist/assets/task-files-D50s-gKW.js +2 -0
- package/web/dist/assets/task-github-item-DaqmSwYT.js +1 -0
- package/web/dist/assets/task-thread-BPQ64lui.js +7 -0
- package/web/dist/assets/{task-thread-Bw_nQuTx.css → task-thread-zNE2Q9E-.css} +1 -1
- package/web/dist/assets/textarea-D20O4Pw0.js +1 -0
- package/web/dist/assets/thread-state-DWcFMrvb.js +4 -0
- package/web/dist/assets/use-hand-to-agent-state-BLIGmwbd.css +1 -0
- package/web/dist/assets/use-hand-to-agent-state-Cy9eyyfL.js +1 -0
- package/web/dist/assets/{utils-fzNfbPzA.js → utils-JsL3ZsJf.js} +1 -1
- package/web/dist/assets/workflows-jwG7uxqi.js +11 -0
- package/web/dist/assets/{zoomable-image-CDmZ_Rtl.js → zoomable-image-BJJ64KGc.js} +1 -1
- package/web/dist/cezarion-lockup-dark.svg +1 -13
- package/web/dist/cezarion-lockup-light.svg +1 -13
- package/web/dist/cezarion-mark-dark.svg +1 -12
- package/web/dist/cezarion-mark-light.svg +1 -12
- package/web/dist/index.html +16 -21
- package/web/dist/assets/agent-accounts-CU2ZDv24.js +0 -1
- package/web/dist/assets/alert-dialog-C-xYE_dg.js +0 -43
- package/web/dist/assets/chevron-right-BENZ-1ZN.js +0 -1
- package/web/dist/assets/collapsible-DD9J91Iv.js +0 -1
- package/web/dist/assets/compare-variants-5FmqpFSN.js +0 -1
- package/web/dist/assets/diff-controls-Bj0YrioE.js +0 -1
- package/web/dist/assets/diff-rE8rm75J2.js +0 -3
- package/web/dist/assets/diff-stat-BKDCSVfJ.js +0 -1
- package/web/dist/assets/dropdown-menu-Ch5BYQh_.js +0 -1
- package/web/dist/assets/format-dBiNDNVe.js +0 -1
- package/web/dist/assets/git-toolbar-ClVvf5iF.js +0 -1
- package/web/dist/assets/github-BkNOyour.css +0 -1
- package/web/dist/assets/github-DeZMeMwJ.js +0 -1
- package/web/dist/assets/github-item-detail-W5F6GVjF.js +0 -1
- package/web/dist/assets/github-sidebar-model-DcMu-IK2.js +0 -1
- package/web/dist/assets/highlighter-CdHqIwFr.js +0 -3
- package/web/dist/assets/index-CatemBEL.js +0 -8
- package/web/dist/assets/index-MvfD8bZJ.css +0 -1
- package/web/dist/assets/markdown-zdKeLIYA.js +0 -2
- package/web/dist/assets/mobile-run-bar-BCfmFi8V.js +0 -1
- package/web/dist/assets/prompt-templates-CBPp39IU.js +0 -15
- package/web/dist/assets/reference-chip-D6owncJT.js +0 -1
- package/web/dist/assets/repo-git-CtdkZFey.js +0 -1
- package/web/dist/assets/run-header-BcjoDi0W.js +0 -1
- package/web/dist/assets/sheet-ChnYVrp1.js +0 -1
- package/web/dist/assets/skills-C8YKp2vr.js +0 -1
- package/web/dist/assets/task-changes-BW8YdWG8.js +0 -1
- package/web/dist/assets/task-commits-q2kB2y6L.js +0 -1
- package/web/dist/assets/task-files-pPL6_3Cr.js +0 -2
- package/web/dist/assets/task-github-item-BXF5R52U.js +0 -1
- package/web/dist/assets/task-thread-DtkFL3EC.js +0 -10
- package/web/dist/assets/textarea-DxlkE-Yd.js +0 -1
- package/web/dist/assets/token-metrics-DIAjrPlM.js +0 -1
- package/web/dist/assets/use-desktop-CrDny2uG.js +0 -1
- package/web/dist/assets/use-submit-shortcut-KWJsC906.js +0 -1
- package/web/dist/assets/workflows-TmcPEj2K.js +0 -11
- /package/web/dist/assets/{lib-BQXq3kEf2.js → lib-BQXq3kEf.js} +0 -0
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { ChildProcess, type ChildProcessWithoutNullStreams } from 'node:child_process';
|
|
2
|
+
/** A `/proc/<pid>/stat` line of a task that is exiting or already a zombie. Field 9 (`flags`)
|
|
3
|
+
* follows the last `)`, like every field after `comm`. An unparsable line reads as alive. */
|
|
4
|
+
export declare function procStatExited(stat: string): boolean;
|
|
5
|
+
export declare function processGroupAlive(pgid: number): boolean;
|
|
6
|
+
export declare function signalProcessGroup(pgid: number, signal: NodeJS.Signals): void;
|
|
7
|
+
/** The process group a live process is in, for destroy's evidence that a recorded group is ours. */
|
|
8
|
+
export declare function processGroupOf(pid: number): number | undefined;
|
|
9
|
+
/** Spawn an agent session leader. Only a real detached `ChildProcess` with a pid is registered,
|
|
10
|
+
* so a test's fake child (made-up pid) never reaches `process.kill(-pid)`. */
|
|
11
|
+
export declare function spawnSessionLeader(bin: string, args: readonly string[], options: {
|
|
12
|
+
cwd: string;
|
|
13
|
+
env: NodeJS.ProcessEnv;
|
|
14
|
+
}): ChildProcessWithoutNullStreams;
|
|
15
|
+
/** Signal a session: its whole group on POSIX, its tree on win32, else the leader alone. A
|
|
16
|
+
* leader that already exited on its own ended its session: what it left behind is not signalled
|
|
17
|
+
* here, as when no signal came at all. */
|
|
18
|
+
export declare function signalSession(child: ChildProcess, signal: NodeJS.Signals, platform?: NodeJS.Platform): void;
|
|
19
|
+
/** The pgid of a registered, still-running grouped leader, for the worker process ledger. */
|
|
20
|
+
export declare function sessionGroupOf(pid: number): number | undefined;
|
|
21
|
+
/** cezar's own SIGINT/SIGTERM, passed to every agent group that still has members. */
|
|
22
|
+
export declare function forwardToSessionGroups(signal: NodeJS.Signals): void;
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
import { ChildProcess, spawn, spawnSync } from 'node:child_process';
|
|
2
|
+
import { readdirSync, readFileSync } from 'node:fs';
|
|
3
|
+
import { KILL_GRACE_MS } from './runner-runtime.js';
|
|
4
|
+
/** Grouped leaders this process spawned, keyed by pgid (= the leader's pid). */
|
|
5
|
+
const leaders = new Map();
|
|
6
|
+
/** Every child `spawnSessionLeader` returned, on any platform: win32's taskkill is for these only. */
|
|
7
|
+
const spawned = new WeakSet();
|
|
8
|
+
const exited = (child) => child.exitCode !== null || child.signalCode !== null;
|
|
9
|
+
// include/linux/sched.h: set at the top of do_exit(), before exit_files() closes the sockets.
|
|
10
|
+
const PF_EXITING = 0x4;
|
|
11
|
+
/** A `/proc/<pid>/stat` line of a task that is exiting or already a zombie. Field 9 (`flags`)
|
|
12
|
+
* follows the last `)`, like every field after `comm`. An unparsable line reads as alive. */
|
|
13
|
+
export function procStatExited(stat) {
|
|
14
|
+
const fields = stat.slice(stat.lastIndexOf(')') + 1).trim().split(/\s+/);
|
|
15
|
+
if (!stat.includes(')') || fields.length < 7 || !/^\d+$/.test(fields[6]))
|
|
16
|
+
return false;
|
|
17
|
+
return fields[0] === 'Z' || (Number(fields[6]) & PF_EXITING) !== 0;
|
|
18
|
+
}
|
|
19
|
+
/** Exiting, exited, or a zombie Node has not reaped yet. A crashed leader closes its sockets
|
|
20
|
+
* inside do_exit(), before it is a zombie: OpenCode sees its prompt's ACK drop and stops the
|
|
21
|
+
* session in that window, so a zombie check alone races (harness row S19). */
|
|
22
|
+
function leaderExited(child) {
|
|
23
|
+
if (exited(child))
|
|
24
|
+
return true;
|
|
25
|
+
const pid = child.pid;
|
|
26
|
+
if (process.platform === 'linux') {
|
|
27
|
+
try {
|
|
28
|
+
return procStatExited(readFileSync(`/proc/${pid}/stat`, 'utf8'));
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
return true;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
if (process.platform !== 'darwin')
|
|
35
|
+
return false;
|
|
36
|
+
// `ps` STAT: Z is a zombie, E a process trying to exit.
|
|
37
|
+
const ps = spawnSync('ps', ['-o', 'stat=', '-p', String(pid)], { encoding: 'utf8', timeout: 2_000 });
|
|
38
|
+
return ps.status === 0 ? /^Z|E/.test(ps.stdout.trim()) : ps.status === 1;
|
|
39
|
+
}
|
|
40
|
+
// -1 and 0 address every process and our own group: never a session.
|
|
41
|
+
const groupId = (pgid) => Number.isSafeInteger(pgid) && pgid > 1;
|
|
42
|
+
export function processGroupAlive(pgid) {
|
|
43
|
+
if (!groupId(pgid))
|
|
44
|
+
return false;
|
|
45
|
+
try {
|
|
46
|
+
process.kill(-pgid, 0);
|
|
47
|
+
return true;
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
return error.code === 'EPERM';
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
export function signalProcessGroup(pgid, signal) {
|
|
54
|
+
if (!groupId(pgid))
|
|
55
|
+
return;
|
|
56
|
+
try {
|
|
57
|
+
process.kill(-pgid, signal);
|
|
58
|
+
}
|
|
59
|
+
catch { /* ESRCH: empty; EPERM: no member is ours */ }
|
|
60
|
+
}
|
|
61
|
+
/** `/proc/<pid>/stat` fields 5 (`pgrp`) and 22 (`starttime`) of a live task; a zombie answers
|
|
62
|
+
* undefined. */
|
|
63
|
+
function procIdentity(stat) {
|
|
64
|
+
const fields = stat.slice(stat.lastIndexOf(')') + 1).trim().split(/\s+/);
|
|
65
|
+
if (!stat.includes(')') || fields.length < 20 || fields[0] === 'Z' || !/^\d+$/.test(fields[2]) || !/^\d+$/.test(fields[19]))
|
|
66
|
+
return undefined;
|
|
67
|
+
return { pgrp: Number(fields[2]), token: fields[19] };
|
|
68
|
+
}
|
|
69
|
+
const psEnv = () => ({ ...process.env, LC_ALL: 'C', TZ: 'UTC' });
|
|
70
|
+
/** A live process's group and incarnation; undefined when it is gone or the platform cannot say. */
|
|
71
|
+
function identity(pid) {
|
|
72
|
+
if (process.platform === 'linux') {
|
|
73
|
+
try {
|
|
74
|
+
return procIdentity(readFileSync(`/proc/${pid}/stat`, 'utf8'));
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
return undefined;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
if (process.platform !== 'darwin')
|
|
81
|
+
return undefined;
|
|
82
|
+
const ps = spawnSync('ps', ['-o', 'pgid=,lstart=', '-p', String(pid)], { encoding: 'utf8', timeout: 2_000, env: psEnv() });
|
|
83
|
+
const match = ps.status === 0 ? /^\s*(\d+)\s+(.+?)\s*$/.exec(ps.stdout) : null;
|
|
84
|
+
return match ? { pgrp: Number(match[1]), token: match[2] } : undefined;
|
|
85
|
+
}
|
|
86
|
+
/** The process group a live process is in, for destroy's evidence that a recorded group is ours. */
|
|
87
|
+
export function processGroupOf(pid) {
|
|
88
|
+
return identity(pid)?.pgrp;
|
|
89
|
+
}
|
|
90
|
+
/** Every live process in group `pgid`, by incarnation. Empty when the platform cannot enumerate. */
|
|
91
|
+
function groupMembers(pgid) {
|
|
92
|
+
if (process.platform === 'linux') {
|
|
93
|
+
let names;
|
|
94
|
+
try {
|
|
95
|
+
names = readdirSync('/proc').filter(name => /^\d+$/.test(name));
|
|
96
|
+
}
|
|
97
|
+
catch {
|
|
98
|
+
return [];
|
|
99
|
+
}
|
|
100
|
+
return names.flatMap((name) => {
|
|
101
|
+
const id = identity(Number(name));
|
|
102
|
+
return id?.pgrp === pgid ? [{ pid: Number(name), token: id.token }] : [];
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
if (process.platform !== 'darwin')
|
|
106
|
+
return [];
|
|
107
|
+
const ps = spawnSync('ps', ['-A', '-o', 'pid=,pgid=,lstart='], { encoding: 'utf8', timeout: 2_000, env: psEnv() });
|
|
108
|
+
if (ps.status !== 0)
|
|
109
|
+
return [];
|
|
110
|
+
return ps.stdout.split('\n').flatMap((line) => {
|
|
111
|
+
const match = /^\s*(\d+)\s+(\d+)\s+(.+?)\s*$/.exec(line);
|
|
112
|
+
return match && Number(match[2]) === pgid ? [{ pid: Number(match[1]), token: match[3] }] : [];
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
/** An exited leader's entry that no longer names our group: none of the members recorded at its
|
|
116
|
+
* exit is still the same process in the group. */
|
|
117
|
+
function stale(pgid, leader) {
|
|
118
|
+
if (!exited(leader.child))
|
|
119
|
+
return false;
|
|
120
|
+
return !(leader.members ?? []).some((member) => {
|
|
121
|
+
const id = identity(member.pid);
|
|
122
|
+
return id?.pgrp === pgid && id.token === member.token;
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
function drop(pgid, leader) {
|
|
126
|
+
if (leaders.get(pgid) === leader)
|
|
127
|
+
leaders.delete(pgid);
|
|
128
|
+
}
|
|
129
|
+
function prune() {
|
|
130
|
+
for (const [pgid, leader] of leaders)
|
|
131
|
+
if (stale(pgid, leader))
|
|
132
|
+
drop(pgid, leader);
|
|
133
|
+
}
|
|
134
|
+
/** Spawn an agent session leader. Only a real detached `ChildProcess` with a pid is registered,
|
|
135
|
+
* so a test's fake child (made-up pid) never reaches `process.kill(-pid)`. */
|
|
136
|
+
export function spawnSessionLeader(bin, args, options) {
|
|
137
|
+
const grouped = process.platform !== 'win32';
|
|
138
|
+
const child = spawn(bin, [...args], { cwd: options.cwd, env: options.env, detached: grouped });
|
|
139
|
+
spawned.add(child);
|
|
140
|
+
const pid = child.pid;
|
|
141
|
+
if (!grouped || !(child instanceof ChildProcess) || pid === undefined || !groupId(pid))
|
|
142
|
+
return child;
|
|
143
|
+
prune();
|
|
144
|
+
const leader = { child };
|
|
145
|
+
leaders.set(pid, leader);
|
|
146
|
+
// Runners clear their own SIGKILL timers when the leader exits. A member that ignored the
|
|
147
|
+
// SIGTERM cezar sent outlives it, so the follow-up SIGKILL for the group lives here.
|
|
148
|
+
child.once('exit', () => {
|
|
149
|
+
if (leaders.get(pid) !== leader)
|
|
150
|
+
return;
|
|
151
|
+
leader.members = processGroupAlive(pid) ? groupMembers(pid) : [];
|
|
152
|
+
if (stale(pid, leader)) {
|
|
153
|
+
drop(pid, leader);
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
if (leader.signalledAt === undefined)
|
|
157
|
+
return;
|
|
158
|
+
const timer = setTimeout(() => {
|
|
159
|
+
if (leaders.get(pid) === leader && !stale(pid, leader))
|
|
160
|
+
signalProcessGroup(pid, 'SIGKILL');
|
|
161
|
+
}, Math.max(0, leader.signalledAt + KILL_GRACE_MS - Date.now()));
|
|
162
|
+
timer.unref?.();
|
|
163
|
+
});
|
|
164
|
+
return child;
|
|
165
|
+
}
|
|
166
|
+
/** Signal a session: its whole group on POSIX, its tree on win32, else the leader alone. A
|
|
167
|
+
* leader that already exited on its own ended its session: what it left behind is not signalled
|
|
168
|
+
* here, as when no signal came at all. */
|
|
169
|
+
export function signalSession(child, signal, platform = process.platform) {
|
|
170
|
+
const pid = child.pid;
|
|
171
|
+
const leader = pid === undefined ? undefined : leaders.get(pid);
|
|
172
|
+
if (leader?.child === child && !leaderExited(child)) {
|
|
173
|
+
leader.signalledAt ??= Date.now();
|
|
174
|
+
signalProcessGroup(pid, signal);
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
if (platform === 'win32' && pid !== undefined && spawned.has(child) && !exited(child)) {
|
|
178
|
+
try {
|
|
179
|
+
const taskkill = spawn('taskkill', ['/T', '/F', '/PID', String(pid)], { stdio: 'ignore', windowsHide: true });
|
|
180
|
+
taskkill.on('error', () => { if (!exited(child))
|
|
181
|
+
child.kill(signal); });
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
catch { /* fall back to the leader alone */ }
|
|
185
|
+
}
|
|
186
|
+
child.kill(signal);
|
|
187
|
+
}
|
|
188
|
+
/** The pgid of a registered, still-running grouped leader, for the worker process ledger. */
|
|
189
|
+
export function sessionGroupOf(pid) {
|
|
190
|
+
const leader = leaders.get(pid);
|
|
191
|
+
return leader && !exited(leader.child) ? pid : undefined;
|
|
192
|
+
}
|
|
193
|
+
/** cezar's own SIGINT/SIGTERM, passed to every agent group that still has members. */
|
|
194
|
+
export function forwardToSessionGroups(signal) {
|
|
195
|
+
for (const [pgid, leader] of [...leaders]) {
|
|
196
|
+
if (stale(pgid, leader))
|
|
197
|
+
drop(pgid, leader);
|
|
198
|
+
else if (processGroupAlive(pgid))
|
|
199
|
+
signalProcessGroup(pgid, signal);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
//# sourceMappingURL=session-process.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-process.js","sourceRoot":"","sources":["../../src/core/session-process.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAuC,MAAM,oBAAoB,CAAC;AACzG,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAqBpD,gFAAgF;AAChF,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;AAC1C,sGAAsG;AACtG,MAAM,OAAO,GAAG,IAAI,OAAO,EAAgB,CAAC;AAE5C,MAAM,MAAM,GAAG,CAAC,KAAmB,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,KAAK,IAAI,IAAI,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;AAE7F,8FAA8F;AAC9F,MAAM,UAAU,GAAG,GAAG,CAAC;AAEvB;6FAC6F;AAC7F,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACzE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC;QAAE,OAAO,KAAK,CAAC;IACxF,OAAO,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;AACrE,CAAC;AAED;;8EAE8E;AAC9E,SAAS,YAAY,CAAC,KAAmB;IACvC,IAAI,MAAM,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC/B,MAAM,GAAG,GAAG,KAAK,CAAC,GAAI,CAAC;IACvB,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,IAAI,CAAC;YAAC,OAAO,cAAc,CAAC,YAAY,CAAC,SAAS,GAAG,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC;YAAC,OAAO,IAAI,CAAC;QAAC,CAAC;IAClG,CAAC;IACD,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAChD,wDAAwD;IACxD,MAAM,EAAE,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;IACrG,OAAO,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC;AAC3E,CAAC;AACD,qEAAqE;AACrE,MAAM,OAAO,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC;AAEzE,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IACjC,IAAI,CAAC;QAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAAC,OAAO,IAAI,CAAC;IAAC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAAC,OAAQ,KAA+B,CAAC,IAAI,KAAK,OAAO,CAAC;IAAC,CAAC;AAC1H,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAY,EAAE,MAAsB;IACrE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;QAAE,OAAO;IAC3B,IAAI,CAAC;QAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAC,4CAA4C,CAAC,CAAC;AAC7F,CAAC;AAED;gBACgB;AAChB,SAAS,YAAY,CAAC,IAAY;IAChC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACzE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,EAAE,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAE,CAAC;QAAE,OAAO,SAAS,CAAC;IAChJ,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,CAAE,EAAE,CAAC;AACzD,CAAC;AAED,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;AAEjE,oGAAoG;AACpG,SAAS,QAAQ,CAAC,GAAW;IAC3B,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,IAAI,CAAC;YAAC,OAAO,YAAY,CAAC,YAAY,CAAC,SAAS,GAAG,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC;YAAC,OAAO,SAAS,CAAC;QAAC,CAAC;IACrG,CAAC;IACD,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IACpD,MAAM,EAAE,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;IAC3H,MAAM,KAAK,GAAG,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,uBAAuB,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC/E,OAAO,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AAC1E,CAAC;AAED,oGAAoG;AACpG,MAAM,UAAU,cAAc,CAAC,GAAW;IACxC,OAAO,QAAQ,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC;AAC7B,CAAC;AAED,oGAAoG;AACpG,SAAS,YAAY,CAAC,IAAY;IAChC,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,IAAI,KAAe,CAAC;QACpB,IAAI,CAAC;YAAC,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC;YAAC,OAAO,EAAE,CAAC;QAAC,CAAC;QAC7F,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YAC5B,MAAM,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;YAClC,OAAO,EAAE,EAAE,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3E,CAAC,CAAC,CAAC;IACL,CAAC;IACD,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IAC7C,MAAM,EAAE,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,oBAAoB,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;IACnH,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAC/B,OAAO,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QAC5C,MAAM,KAAK,GAAG,+BAA+B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzD,OAAO,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACjG,CAAC,CAAC,CAAC;AACL,CAAC;AAED;kDACkD;AAClD,SAAS,KAAK,CAAC,IAAY,EAAE,MAAc;IACzC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACxC,OAAO,CAAC,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;QAC7C,MAAM,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAChC,OAAO,EAAE,EAAE,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,CAAC;IACxD,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,IAAI,CAAC,IAAY,EAAE,MAAc;IACxC,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,MAAM;QAAE,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACzD,CAAC;AAED,SAAS,KAAK;IACZ,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,OAAO;QAAE,IAAI,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC;YAAE,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AACpF,CAAC;AAED;8EAC8E;AAC9E,MAAM,UAAU,kBAAkB,CAChC,GAAW,EACX,IAAuB,EACvB,OAAgD;IAEhD,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC;IAC7C,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;IAC/F,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACnB,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;IACtB,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,KAAK,YAAY,YAAY,CAAC,IAAI,GAAG,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IACrG,KAAK,EAAE,CAAC;IACR,MAAM,MAAM,GAAW,EAAE,KAAK,EAAE,CAAC;IACjC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACzB,0FAA0F;IAC1F,qFAAqF;IACrF,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE;QACtB,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,MAAM;YAAE,OAAO;QACxC,MAAM,CAAC,OAAO,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACjE,IAAI,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,CAAC;YAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YAAC,OAAO;QAAC,CAAC;QACtD,IAAI,MAAM,CAAC,WAAW,KAAK,SAAS;YAAE,OAAO;QAC7C,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC;gBAAE,kBAAkB,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QAC7F,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,WAAW,GAAG,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACjE,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;IAClB,CAAC,CAAC,CAAC;IACH,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;0CAE0C;AAC1C,MAAM,UAAU,aAAa,CAAC,KAAmB,EAAE,MAAsB,EAAE,QAAQ,GAAoB,OAAO,CAAC,QAAQ;IACrH,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;IACtB,MAAM,MAAM,GAAG,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAChE,IAAI,MAAM,EAAE,KAAK,KAAK,KAAK,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;QACpD,MAAM,CAAC,WAAW,KAAK,IAAI,CAAC,GAAG,EAAE,CAAC;QAClC,kBAAkB,CAAC,GAAI,EAAE,MAAM,CAAC,CAAC;QACjC,OAAO;IACT,CAAC;IACD,IAAI,QAAQ,KAAK,OAAO,IAAI,GAAG,KAAK,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QACtF,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;YAC9G,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;gBAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACxE,OAAO;QACT,CAAC;QAAC,MAAM,CAAC,CAAC,mCAAmC,CAAC,CAAC;IACjD,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACrB,CAAC;AAED,6FAA6F;AAC7F,MAAM,UAAU,cAAc,CAAC,GAAW;IACxC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAChC,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;AAC3D,CAAC;AAED,sFAAsF;AACtF,MAAM,UAAU,sBAAsB,CAAC,MAAsB;IAC3D,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,EAAE,CAAC;QAC1C,IAAI,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC;YAAE,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;aACvC,IAAI,iBAAiB,CAAC,IAAI,CAAC;YAAE,kBAAkB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACrE,CAAC;AACH,CAAC"}
|
package/dist/core/ui-events.d.ts
CHANGED
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
/** The backend that produced a session — mirrors `RunnerId` in
|
|
25
25
|
* `agent-runner.ts` (kept structurally identical; a type-level test
|
|
26
26
|
* guards against drift so this module stays dependency-free). */
|
|
27
|
-
export type UiBackend = 'claude' | 'codex' | 'opencode' | 'pi' | 'cursor';
|
|
27
|
+
export type UiBackend = 'claude' | 'codex' | 'opencode' | 'pi' | 'cursor' | 'omp';
|
|
28
28
|
/**
|
|
29
29
|
* Tool lifecycle status (ACP: pending/in_progress/completed/failed).
|
|
30
30
|
* `running` ≡ ACP `in_progress` (opencode's word — reads better in code);
|
package/dist/core/usage-limit.js
CHANGED
|
@@ -21,6 +21,7 @@
|
|
|
21
21
|
* purpose: guessing a window would turn one interruption into a retry loop against a provider
|
|
22
22
|
* that is still refusing, and "we don't know when" is an honest answer the caller can surface.
|
|
23
23
|
*/
|
|
24
|
+
import { isValidTimeZone, zonedParts, zonedWallTimeToUtc } from '../contract/index.js';
|
|
24
25
|
/**
|
|
25
26
|
* The furthest ahead a reset may sit and still be believed. Claude's weekly window is the real
|
|
26
27
|
* ceiling; anything beyond a week is a corrupt or unit-confused number, and parking a task on it
|
|
@@ -115,8 +116,8 @@ function parseClockReset(match, now) {
|
|
|
115
116
|
else if (hour < 0 || hour > 23) {
|
|
116
117
|
return null;
|
|
117
118
|
}
|
|
118
|
-
const timeZone =
|
|
119
|
-
if (timeZone)
|
|
119
|
+
const timeZone = match[5]?.trim();
|
|
120
|
+
if (isValidTimeZone(timeZone))
|
|
120
121
|
return nextClockInTimeZone(hour, minute, timeZone, now);
|
|
121
122
|
return nextLocalClock(hour, minute, now);
|
|
122
123
|
}
|
|
@@ -140,64 +141,6 @@ function nextClockInTimeZone(hour, minute, timeZone, now) {
|
|
|
140
141
|
}
|
|
141
142
|
return candidate;
|
|
142
143
|
}
|
|
143
|
-
function validTimeZone(candidate) {
|
|
144
|
-
if (!candidate)
|
|
145
|
-
return null;
|
|
146
|
-
try {
|
|
147
|
-
new Intl.DateTimeFormat('en-US', { timeZone: candidate }).format(new Date(0));
|
|
148
|
-
return candidate;
|
|
149
|
-
}
|
|
150
|
-
catch {
|
|
151
|
-
return null;
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
function zonedWallTimeToUtc(year, month, day, hour, minute, timeZone) {
|
|
155
|
-
const wallAsUtc = Date.UTC(year, month - 1, day, hour, minute, 0, 0);
|
|
156
|
-
let candidate = wallAsUtc;
|
|
157
|
-
for (let i = 0; i < 3; i += 1) {
|
|
158
|
-
const offset = timeZoneOffsetMs(timeZone, candidate);
|
|
159
|
-
if (offset === null)
|
|
160
|
-
return null;
|
|
161
|
-
const next = wallAsUtc - offset;
|
|
162
|
-
if (Math.abs(next - candidate) < 1_000)
|
|
163
|
-
return next;
|
|
164
|
-
candidate = next;
|
|
165
|
-
}
|
|
166
|
-
return candidate;
|
|
167
|
-
}
|
|
168
|
-
function timeZoneOffsetMs(timeZone, utcMs) {
|
|
169
|
-
const parts = zonedParts(utcMs, timeZone);
|
|
170
|
-
if (!parts)
|
|
171
|
-
return null;
|
|
172
|
-
const asUtc = Date.UTC(parts.year, parts.month - 1, parts.day, parts.hour, parts.minute, parts.second);
|
|
173
|
-
return asUtc - utcMs;
|
|
174
|
-
}
|
|
175
|
-
function zonedParts(utcMs, timeZone) {
|
|
176
|
-
try {
|
|
177
|
-
const parts = new Intl.DateTimeFormat('en-CA', {
|
|
178
|
-
timeZone,
|
|
179
|
-
year: 'numeric',
|
|
180
|
-
month: '2-digit',
|
|
181
|
-
day: '2-digit',
|
|
182
|
-
hour: '2-digit',
|
|
183
|
-
minute: '2-digit',
|
|
184
|
-
second: '2-digit',
|
|
185
|
-
hourCycle: 'h23',
|
|
186
|
-
}).formatToParts(new Date(utcMs));
|
|
187
|
-
const value = (type) => Number(parts.find((part) => part.type === type)?.value);
|
|
188
|
-
return {
|
|
189
|
-
year: value('year'),
|
|
190
|
-
month: value('month'),
|
|
191
|
-
day: value('day'),
|
|
192
|
-
hour: value('hour'),
|
|
193
|
-
minute: value('minute'),
|
|
194
|
-
second: value('second'),
|
|
195
|
-
};
|
|
196
|
-
}
|
|
197
|
-
catch {
|
|
198
|
-
return null;
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
144
|
/** Bound a candidate instant: past → now (the limit already lifted), absurd → not believed. */
|
|
202
145
|
function settle(epochMs, now, evidence) {
|
|
203
146
|
if (!Number.isFinite(epochMs))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usage-limit.js","sourceRoot":"","sources":["../../src/core/usage-limit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;
|
|
1
|
+
{"version":3,"file":"usage-limit.js","sourceRoot":"","sources":["../../src/core/usage-limit.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Keep run data out of the user's repo history; workflows/skills stay committable. Best effort:
|
|
3
|
+
* it never throws. Called before a project's run store opens (#779), so the database and the
|
|
4
|
+
* history backups an open creates are ignored even when that open then fails.
|
|
5
|
+
*/
|
|
6
|
+
export declare function ensureDataGitignore(repoRoot: string): void;
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
/**
|
|
4
|
+
* Keep run data out of the user's repo history; workflows/skills stay committable. Best effort:
|
|
5
|
+
* it never throws. Called before a project's run store opens (#779), so the database and the
|
|
6
|
+
* history backups an open creates are ignored even when that open then fails.
|
|
7
|
+
*/
|
|
8
|
+
export function ensureDataGitignore(repoRoot) {
|
|
9
|
+
const path = join(repoRoot, '.ai/cezar', '.gitignore');
|
|
10
|
+
const wanted = [
|
|
11
|
+
'runs.json',
|
|
12
|
+
'runs.json.tmp',
|
|
13
|
+
'runs.json.pre-sqlite.bak', // the exact runs.json the run database was imported from (#779)
|
|
14
|
+
'runs.json.pre-sqlite.*', // a second such backup, named by its hash, and their temp files
|
|
15
|
+
'runs.db',
|
|
16
|
+
'runs.db-wal',
|
|
17
|
+
'runs.db-shm',
|
|
18
|
+
'runs/',
|
|
19
|
+
'worktrees/',
|
|
20
|
+
'tmp/', // per-run agent temp directories (#785)
|
|
21
|
+
'todos.json',
|
|
22
|
+
'todos.json.tmp',
|
|
23
|
+
'launch-key',
|
|
24
|
+
'cockpit.lock*',
|
|
25
|
+
'automations.json',
|
|
26
|
+
'automations.json.tmp',
|
|
27
|
+
'automation-state.json',
|
|
28
|
+
'automation-state.json.tmp',
|
|
29
|
+
'automation-receipts.ndjson',
|
|
30
|
+
'automation-receipts.ndjson.tmp',
|
|
31
|
+
'automation-log.ndjson',
|
|
32
|
+
'automation-log.ndjson.tmp',
|
|
33
|
+
'automation-log.lock',
|
|
34
|
+
'automation-log.reclaim*/',
|
|
35
|
+
'automation-poll.lock',
|
|
36
|
+
'automation-poll.reclaim*/',
|
|
37
|
+
'preview/', // live preview: per-task Chromium profile, dev-server logs and pid records (#781)
|
|
38
|
+
'automations.lock',
|
|
39
|
+
'automations.reclaim*/',
|
|
40
|
+
'automation-state.lock',
|
|
41
|
+
'automation-state.reclaim*/',
|
|
42
|
+
];
|
|
43
|
+
try {
|
|
44
|
+
mkdirSync(join(repoRoot, '.ai/cezar'), { recursive: true });
|
|
45
|
+
const current = existsSync(path) ? readFileSync(path, 'utf8') : '';
|
|
46
|
+
const lines = current.split('\n');
|
|
47
|
+
const missing = wanted.filter((w) => !lines.includes(w));
|
|
48
|
+
if (missing.length > 0) {
|
|
49
|
+
const glue = current && !current.endsWith('\n') ? '\n' : '';
|
|
50
|
+
writeFileSync(path, `${current}${glue}${missing.join('\n')}\n`, 'utf8');
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
// non-fatal
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=data-gitignore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-gitignore.js","sourceRoot":"","sources":["../src/data-gitignore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,QAAgB;IAClD,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;IACvD,MAAM,MAAM,GAAG;QACb,WAAW;QACX,eAAe;QACf,0BAA0B,EAAE,gEAAgE;QAC5F,wBAAwB,EAAE,gEAAgE;QAC1F,SAAS;QACT,aAAa;QACb,aAAa;QACb,OAAO;QACP,YAAY;QACZ,MAAM,EAAE,wCAAwC;QAChD,YAAY;QACZ,gBAAgB;QAChB,YAAY;QACZ,eAAe;QACf,kBAAkB;QAClB,sBAAsB;QACtB,uBAAuB;QACvB,2BAA2B;QAC3B,4BAA4B;QAC5B,gCAAgC;QAChC,uBAAuB;QACvB,2BAA2B;QAC3B,qBAAqB;QACrB,0BAA0B;QAC1B,sBAAsB;QACtB,2BAA2B;QAC3B,UAAU,EAAE,kFAAkF;QAC9F,kBAAkB;QAClB,uBAAuB;QACvB,uBAAuB;QACvB,4BAA4B;KAC7B,CAAC;IACF,IAAI,CAAC;QACH,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5D,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACnE,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QACzD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,MAAM,IAAI,GAAG,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5D,aAAa,CAAC,IAAI,EAAE,GAAG,OAAO,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC1E,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,YAAY;IACd,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { WorkerCapacity } from '../contract/index.js';
|
|
2
|
+
import type { RunRecord } from '../runs/store.ts';
|
|
3
|
+
/**
|
|
4
|
+
* Per-parent worker limits (#816, spec 2026-10-04-reclaimable-worker-capacity). Fixed values,
|
|
5
|
+
* never configuration. Capacity bounds owned resources and is reclaimed by verified destroy;
|
|
6
|
+
* the creation ceiling bounds runaway spawning and every receipt-sized payload. Neither is a
|
|
7
|
+
* spending budget: Continue can re-run a worker, and destroy cannot undo earlier charges.
|
|
8
|
+
*/
|
|
9
|
+
export declare const WORKER_CAPACITY = 32;
|
|
10
|
+
export declare const WORKER_CREATION_LIMIT = 1024;
|
|
11
|
+
/**
|
|
12
|
+
* Derived from durable state on every call, never counted, so a slot returns exactly once and
|
|
13
|
+
* survives restart and Continue without migration. A receipt is released only by a verified
|
|
14
|
+
* complete destroy, or by history deletion (which requires one); everything else, including a
|
|
15
|
+
* record that vanished without a deletion marker, keeps its slot.
|
|
16
|
+
*/
|
|
17
|
+
export declare function workerCapacity(parent: RunRecord, getRun: (id: string) => RunRecord | undefined): WorkerCapacity;
|
|
18
|
+
/** The refusal for a NEW creation, naming its recovery; undefined when a creation fits. */
|
|
19
|
+
export declare function capacityError(capacity: WorkerCapacity): string | undefined;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-parent worker limits (#816, spec 2026-10-04-reclaimable-worker-capacity). Fixed values,
|
|
3
|
+
* never configuration. Capacity bounds owned resources and is reclaimed by verified destroy;
|
|
4
|
+
* the creation ceiling bounds runaway spawning and every receipt-sized payload. Neither is a
|
|
5
|
+
* spending budget: Continue can re-run a worker, and destroy cannot undo earlier charges.
|
|
6
|
+
*/
|
|
7
|
+
export const WORKER_CAPACITY = 32;
|
|
8
|
+
export const WORKER_CREATION_LIMIT = 1_024;
|
|
9
|
+
/**
|
|
10
|
+
* Derived from durable state on every call, never counted, so a slot returns exactly once and
|
|
11
|
+
* survives restart and Continue without migration. A receipt is released only by a verified
|
|
12
|
+
* complete destroy, or by history deletion (which requires one); everything else, including a
|
|
13
|
+
* record that vanished without a deletion marker, keeps its slot.
|
|
14
|
+
*/
|
|
15
|
+
export function workerCapacity(parent, getRun) {
|
|
16
|
+
const receipts = parent.delegation?.role === 'root' ? parent.delegation.receipts : [];
|
|
17
|
+
const outstanding = receipts.filter(receipt => {
|
|
18
|
+
if (receipt.deletion)
|
|
19
|
+
return false;
|
|
20
|
+
const owned = getRun(receipt.workerId)?.delegation;
|
|
21
|
+
return !(owned?.role === 'worker' && owned.destroy?.phase === 'complete' && owned.destroy.remaining.length === 0);
|
|
22
|
+
}).length;
|
|
23
|
+
return { outstanding, limit: WORKER_CAPACITY, created: receipts.length, creationLimit: WORKER_CREATION_LIMIT };
|
|
24
|
+
}
|
|
25
|
+
/** The refusal for a NEW creation, naming its recovery; undefined when a creation fits. */
|
|
26
|
+
export function capacityError(capacity) {
|
|
27
|
+
if (capacity.created >= capacity.creationLimit)
|
|
28
|
+
return 'Parent reached 1,024 worker creations; start a new task to delegate further';
|
|
29
|
+
if (capacity.outstanding >= capacity.limit) {
|
|
30
|
+
return 'Parent has 32 outstanding workers (accepted, live, or not verifiably destroyed). Collect results, then destroy finished workers to free capacity; incomplete cleanup holds its slot until a retry completes';
|
|
31
|
+
}
|
|
32
|
+
return undefined;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=capacity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capacity.js","sourceRoot":"","sources":["../../src/delegation/capacity.ts"],"names":[],"mappings":"AAGA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,EAAE,CAAC;AAClC,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,CAAC;AAE3C;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,MAAiB,EAAE,MAA6C;IAC7F,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,EAAE,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;IACtF,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE;QAC5C,IAAI,OAAO,CAAC,QAAQ;YAAE,OAAO,KAAK,CAAC;QACnC,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,UAAU,CAAC;QACnD,OAAO,CAAC,CAAC,KAAK,EAAE,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,EAAE,KAAK,KAAK,UAAU,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC;IACpH,CAAC,CAAC,CAAC,MAAM,CAAC;IACV,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,QAAQ,CAAC,MAAM,EAAE,aAAa,EAAE,qBAAqB,EAAE,CAAC;AACjH,CAAC;AAED,2FAA2F;AAC3F,MAAM,UAAU,aAAa,CAAC,QAAwB;IACpD,IAAI,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,aAAa;QAAE,OAAO,6EAA6E,CAAC;IACrI,IAAI,QAAQ,CAAC,WAAW,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;QAC3C,OAAO,6MAA6M,CAAC;IACvN,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
package/dist/delegation/cli.js
CHANGED
|
@@ -2,6 +2,7 @@ import { readBoundedContextFile } from './context.js';
|
|
|
2
2
|
import { parseArgs } from 'node:util';
|
|
3
3
|
import { z } from 'zod';
|
|
4
4
|
import { conversationSendRequestSchema, conversationSendResultSchema, conversationInspectResultSchema, conversationInspectRequestSchema, conversationCancelRequestSchema, inboxReserveResultSchema, inboxReceiptResultSchema, requestOutcomeSchema, requestWaitRequestSchema, workerCollectedResultSchema, workerCancelWaitRequestSchema, workerCancelWaitResultSchema, workerOperationSchema, workerParamsSchema, workerSpawnRequestSchema, workerSteerRequestSchema, workerWaitRequestSchema, workerSpawnResultSchema, workerInspectionSchema, workerSteerResultSchema, workerStopResultSchema, workerDestroyResultSchema, workerDiffSchema, workerWaitResultSchema, delegationErrorResponseSchema, } from '../contract/index.js';
|
|
5
|
+
import { skillFlagIssue } from '../workflows/types.js';
|
|
5
6
|
import { DelegationPolicyError } from './policy.js';
|
|
6
7
|
/** Accept exactly the endpoint format minted by this installation's private listener. */
|
|
7
8
|
export function delegationEndpoint(value) {
|
|
@@ -18,13 +19,13 @@ const responseSchemas = { send: conversationSendResultSchema, progress: conversa
|
|
|
18
19
|
stop: workerStopResultSchema, destroy: workerDestroyResultSchema, diff: workerDiffSchema, wait: workerWaitResultSchema, 'cancel-wait': workerCancelWaitResultSchema };
|
|
19
20
|
const RESPONSE_BYTES = 3_145_728;
|
|
20
21
|
const CLI_FLAG = {
|
|
21
|
-
requestId: '--request-id', baseline: '--baseline', backend: '--backend', model: '--model', effort: '--effort', workflow: '--workflow',
|
|
22
|
+
requestId: '--request-id', baseline: '--baseline', backend: '--backend', model: '--model', effort: '--effort', workflow: '--workflow', skill: '--skill',
|
|
22
23
|
timeoutSeconds: '--timeout-seconds', mode: '--mode', kind: '--kind', id: '--id', context: '--context',
|
|
23
24
|
requestIds: '--request', workerIds: 'worker-id', workerId: 'worker-id', waitId: 'wait-id', recipientRunId: 'recipient-run-id',
|
|
24
25
|
task: 'task', text: 'text',
|
|
25
26
|
};
|
|
26
27
|
const WORKER_USAGE = { operations: [
|
|
27
|
-
{ name: 'spawn', positionals: 1, required: ['--baseline', '--request-id'], optional: ['--workflow', '--backend', '--model', '--effort', '--context', '--context-file'] },
|
|
28
|
+
{ name: 'spawn', positionals: 1, required: ['--baseline', '--request-id'], optional: ['--workflow', '--skill', '--backend', '--model', '--effort', '--context', '--context-file'] },
|
|
28
29
|
{ name: 'inspect', positionals: 1 },
|
|
29
30
|
{ name: 'steer', positionals: 2 },
|
|
30
31
|
{ name: 'stop', positionals: 1 },
|
|
@@ -65,10 +66,11 @@ const WORKER_HELP = {
|
|
|
65
66
|
const WORKER_FLAG_HELP = {
|
|
66
67
|
'--baseline': '<ref> Committed ref or parent-head; excludes dirty edits.',
|
|
67
68
|
'--request-id': '<UUID> Spawn retry ID, or request being followed up/replied to.',
|
|
68
|
-
'--backend': '<name> claude | codex | opencode | pi | cursor.',
|
|
69
|
+
'--backend': '<name> claude | codex | opencode | pi | cursor | omp.',
|
|
69
70
|
'--model': '<model> Model override.',
|
|
70
71
|
'--effort': '<level> low | medium | high | xhigh | max | auto.',
|
|
71
72
|
'--workflow': '<name> Catalog workflow to run (built-in quick-task or .ai/cezar/workflows); default quick-task.',
|
|
73
|
+
'--skill': '<name> Run one discovered skill as the worker task; not with --workflow.',
|
|
72
74
|
'--context': '<text> Selected context; mutually exclusive with --context-file.',
|
|
73
75
|
'--context-file': '<path> UTF-8 context file; mutually exclusive with --context.',
|
|
74
76
|
'--mode': '<one|any|all> Wait mode (default any); one requires one target.',
|
|
@@ -216,7 +218,7 @@ export async function runWorkerCommand(argv, env) {
|
|
|
216
218
|
const operation = argv[0] === 'collect' ? 'collect' : argv[0] === 'cancel-wait' ? 'cancel-wait' : z.union([workerOperationSchema, conversationOperationSchema]).parse(argv[0]);
|
|
217
219
|
const { values, positionals } = parseArgs({ args: argv.slice(1), allowPositionals: true, strict: true, options: {
|
|
218
220
|
help: { type: 'boolean', short: 'h' },
|
|
219
|
-
...(operation === 'spawn' ? { baseline: { type: 'string' }, 'request-id': { type: 'string' }, workflow: { type: 'string' }, backend: { type: 'string' }, model: { type: 'string' }, effort: { type: 'string' }, context: { type: 'string' }, 'context-file': { type: 'string' } } : {}),
|
|
221
|
+
...(operation === 'spawn' ? { baseline: { type: 'string' }, 'request-id': { type: 'string' }, workflow: { type: 'string' }, skill: { type: 'string' }, backend: { type: 'string' }, model: { type: 'string' }, effort: { type: 'string' }, context: { type: 'string' }, 'context-file': { type: 'string' } } : {}),
|
|
220
222
|
...(['send', 'progress', 'reply', 'follow-up'].includes(operation) ? { id: { type: 'string' }, kind: { type: 'string' }, 'request-id': { type: 'string' }, 'timeout-seconds': { type: 'string' } } : {}),
|
|
221
223
|
...(operation === 'send' || operation === 'progress' ? { resume: { type: 'boolean' } } : {}),
|
|
222
224
|
...(operation === 'wait' || operation === 'wait-requests' ? { request: { type: 'string', multiple: true }, 'timeout-seconds': { type: 'string' }, mode: { type: 'string' } } : {}),
|
|
@@ -250,6 +252,12 @@ export async function runWorkerCommand(argv, env) {
|
|
|
250
252
|
}
|
|
251
253
|
else if (operation === 'spawn') {
|
|
252
254
|
expectCount(operation, positionals, 1);
|
|
255
|
+
const skillIssue = skillFlagIssue({
|
|
256
|
+
skill: values.skill,
|
|
257
|
+
workflow: values.workflow,
|
|
258
|
+
});
|
|
259
|
+
if (skillIssue)
|
|
260
|
+
throw new WorkerCliError(skillIssue);
|
|
253
261
|
if (values.context !== undefined && values['context-file'] !== undefined)
|
|
254
262
|
throw new WorkerCliError('spawn has extra argument --context-file');
|
|
255
263
|
const contextText = values['context-file'] === undefined ? values.context
|
|
@@ -258,6 +266,7 @@ export async function runWorkerCommand(argv, env) {
|
|
|
258
266
|
...(values.backend === undefined ? {} : { backend: values.backend }), ...(values.model === undefined ? {} : { model: values.model }),
|
|
259
267
|
...(values.effort === undefined ? {} : { effort: values.effort }),
|
|
260
268
|
...(values.workflow === undefined ? {} : { workflow: values.workflow }),
|
|
269
|
+
...(values.skill === undefined ? {} : { skill: values.skill }),
|
|
261
270
|
...(contextText === undefined ? {} : { context: { text: contextText } }),
|
|
262
271
|
});
|
|
263
272
|
}
|