@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
package/README.md
CHANGED
|
@@ -5,10 +5,10 @@
|
|
|
5
5
|
**Parallel coding agents orchestrator** — a local cockpit for running and
|
|
6
6
|
tracking AI coding-agent tasks in your repo.
|
|
7
7
|
|
|
8
|
-
Type a task, pick a workflow and an agent — **Claude Code, Codex, OpenCode or
|
|
9
|
-
(
|
|
8
|
+
Type a task, pick a workflow and an agent — **Claude Code, Codex, OpenCode, pi or OMP
|
|
9
|
+
(OpenCode, pi and OMP experimental), or a mix of them per step** — and watch it work live: steps, tool calls,
|
|
10
10
|
tokens, diffs, in a browser cockpit that runs entirely on your machine.
|
|
11
|
-
Your CLI logins, your `gh`, your files. No accounts, no database, no cloud.
|
|
11
|
+
Your CLI logins, your `gh`, your files. No accounts, no database server, no cloud.
|
|
12
12
|
|
|
13
13
|
🔥 **Fire and forget.** Queue a stack of autonomous coding and maintenance
|
|
14
14
|
tasks and let them run — cezar orchestrates them across isolated worktrees,
|
|
@@ -20,10 +20,10 @@ your phone, working your backlog while you're away.
|
|
|
20
20
|
[A look inside](#a-look-inside) · [What cezar does best](#what-cezar-does-best) · [What it solves](#what-it-solves) · [Who it's for](#who-its-for) · [Quick start](#quick-start) · [How it works](#how-it-works) · [Core concepts](#core-concepts) · [Cockpit tour](#cockpit-tour) · [Agent backends](#coding-agent-backends) · [Remote access](#remote-access-host-cezar-on-a-server)
|
|
21
21
|
|
|
22
22
|
[](LICENSE)
|
|
23
|
-

|
|
24
24
|

|
|
25
25
|

|
|
26
|
-

|
|
27
27
|
|
|
28
28
|
</div>
|
|
29
29
|
|
|
@@ -36,7 +36,9 @@ npx cezarion # → cockpit at http://localhost:4321
|
|
|
36
36
|
|
|
37
37
|
That's the whole setup. If your `claude` CLI is logged in (Pro/Max) and `gh` is
|
|
38
38
|
authenticated, there is nothing else to configure. State lives in `.ai/cezar/`
|
|
39
|
-
inside your repo
|
|
39
|
+
inside your repo: your runs in one embedded SQLite file (`runs.db`, built into
|
|
40
|
+
Node: no server, no install, no config), event logs in NDJSON and journals in
|
|
41
|
+
Markdown. Everything except the run file you can `cat` and fix by hand.
|
|
40
42
|
|
|
41
43
|
Local npm installations have a workspace update API. `POST
|
|
42
44
|
/api/v1/workspace/application-update/apply` with `{}` prepares the release
|
|
@@ -72,8 +74,8 @@ conductor-style app, one-agent front-ends. cezar's bet is different. Three thing
|
|
|
72
74
|
it does better than any of them:
|
|
73
75
|
|
|
74
76
|
- 🪶 **Genuinely zero config.** `npx cezarion` in your repo and you're running —
|
|
75
|
-
no wizard, no API keys, no env vars, no schema, no database. It rides the
|
|
76
|
-
`claude` / `codex` / `opencode` / `pi` logins and the `gh` you already have, and every
|
|
77
|
+
no wizard, no API keys, no env vars, no schema, no database server. It rides the
|
|
78
|
+
`claude` / `codex` / `opencode` / `pi` / `omp` logins and the `gh` you already have, and every
|
|
77
79
|
missing piece degrades gracefully instead of blocking you.
|
|
78
80
|
- 🖥️ **Built for a server (VPS mode).** cezar is made to live on a **VPS, cloud,
|
|
79
81
|
or dedicated box** as an always-on janitor for your repo — headless-first, with
|
|
@@ -151,7 +153,7 @@ and an orchestrator keeps a whole queue of them moving.
|
|
|
151
153
|
|
|
152
154
|
## Quick start
|
|
153
155
|
|
|
154
|
-
**Prerequisites:** Node
|
|
156
|
+
**Prerequisites:** Node 24.15+, at least one logged-in agent CLI — the
|
|
155
157
|
[`claude` CLI](https://github.com/anthropics/claude-code) (Pro/Max subscription),
|
|
156
158
|
the [`codex` CLI](https://github.com/openai/codex), or
|
|
157
159
|
[OpenCode](https://opencode.ai) — and, optionally, `git` and the `gh` CLI.
|
|
@@ -162,10 +164,15 @@ npx cezarion # start the cockpit for the current repo
|
|
|
162
164
|
# or: npx @wjarka/cezarion
|
|
163
165
|
```
|
|
164
166
|
|
|
165
|
-
The cockpit opens at `http://localhost:4321
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
167
|
+
The cockpit opens at `http://localhost:4321`. If the requested port is occupied,
|
|
168
|
+
startup exits with an actionable error before recovering tasks. Automatic port
|
|
169
|
+
bounce has been removed (hearsay-tools/cezarion#722): open the existing cockpit,
|
|
170
|
+
stop the process using that port, or choose `cez --port <free-port>` deliberately.
|
|
171
|
+
Use `cez --port 0` to ask the OS for an ephemeral port. If another cockpit already
|
|
172
|
+
serves this repository, the command prints its URL and exits with an error,
|
|
173
|
+
even with a different port. Different repositories can run side by side on
|
|
174
|
+
explicitly different ports; after a cockpit exits or crashes, its repository
|
|
175
|
+
can start again without cleanup.
|
|
169
176
|
Type a task, pick a workflow, hit **Start**. That's it.
|
|
170
177
|
|
|
171
178
|
```bash
|
|
@@ -255,7 +262,7 @@ event live and parks the run at a review gate when there's a diff to inspect.
|
|
|
255
262
|
▼
|
|
256
263
|
┌─────────────┐ SSE (replay + live) ┌──────────────────────────┐
|
|
257
264
|
│ .ai/cezar/ │ ──────────────────────► │ cockpit localhost:4321 │
|
|
258
|
-
│
|
|
265
|
+
│SQLite·NDJSON│ │ Tasks · Git · GitHub · │
|
|
259
266
|
│ ·Markdown │ │ Skills · Workflows │
|
|
260
267
|
└─────────────┘ └──────────────────────────┘
|
|
261
268
|
│
|
|
@@ -371,7 +378,16 @@ Every view is project-scoped:
|
|
|
371
378
|
`<projectId>` is a slug derived from the folder name (`my-app`, then `my-app-2`
|
|
372
379
|
on a collision), and `/p/default/…` always means the project cezar was started
|
|
373
380
|
in. The desktop rail selects the project. Its sidebar shows the project header,
|
|
374
|
-
view tabs and task list,
|
|
381
|
+
view tabs and task list, ordered **Needs you → Finished → Working**.
|
|
382
|
+
Pins stay first within their status section and do not spend the default ten-row
|
|
383
|
+
budget; Finished takes priority over Working when that budget fills up. Each
|
|
384
|
+
section starts expanded and folds independently using its heading (click, Enter
|
|
385
|
+
or Space). Folding is remembered per browser, project and section, separately
|
|
386
|
+
from folding a project. Folded headings keep full task counts and attention
|
|
387
|
+
indicators, including tasks outside the visible row limit. These controls work
|
|
388
|
+
in the mobile drawer too. **Archive all** appears only on Finished and archives
|
|
389
|
+
all eligible unpinned tasks, including hidden rows; individual archive actions
|
|
390
|
+
and Undo remain available. Archived keeps its existing history view.
|
|
375
391
|
Inbox and Automations appear in More views when enabled. The project menu
|
|
376
392
|
offers Mark all read and project settings; local mode also offers Open in and
|
|
377
393
|
Copy path. Active/Archived remains below the Tasks heading. The new-task
|
|
@@ -411,11 +427,23 @@ server stopped, and `CEZ_HOME` selects which workspace they operate on.
|
|
|
411
427
|
|
|
412
428
|
Settings split along the same line: **General** (the project's folder, its
|
|
413
429
|
registry facts, its parallel-task ceiling, and Remove), **Agents**, **Agent config**,
|
|
414
|
-
**Worktrees**, **Bookmarklets** and **Prompt templates** describe one
|
|
430
|
+
**Worktrees**, **Sidebar**, **Bookmarklets** and **Prompt templates** describe one
|
|
415
431
|
repo and live under `/p/<projectId>/settings`; **Appearance**,
|
|
416
432
|
**Notifications**, **Resources**, **Skills**, **Agent accounts** and **Projects**
|
|
417
433
|
are yours or the machine's and live at `/settings/global`.
|
|
418
434
|
|
|
435
|
+
**Settings → Sidebar** controls this project's task rows on desktop and mobile.
|
|
436
|
+
Set **Overall**, **Needs You**, **Finished**, and **Working** to a positive whole
|
|
437
|
+
number or **Unlimited**. Defaults are 10 overall and Unlimited for each section.
|
|
438
|
+
The overall budget is allocated in section order (Needs You, Finished, Working),
|
|
439
|
+
and each section must also fit its own limit. Unlimited removes only its selected
|
|
440
|
+
constraint. Pinned rows and groups containing pins bypass both budgets; a grouped
|
|
441
|
+
task counts as one row. Archived uses only the overall limit, with no pin exemption.
|
|
442
|
+
Save applies the preferences to this project and keeps them after a reload.
|
|
443
|
+
Refreshed preferences update an untouched form; unsaved edits stay in place.
|
|
444
|
+
Malformed stored sidebar limits fall back field by field to these defaults,
|
|
445
|
+
while valid limits and unrelated preferences are preserved.
|
|
446
|
+
|
|
419
447
|
On desktop, Settings replaces the sidebar task list with two groups: **This project**
|
|
420
448
|
and **Global · every project**. Each group includes General and its available sections;
|
|
421
449
|
the current section is highlighted, and the main page shows its content. On mobile,
|
|
@@ -432,6 +460,11 @@ tasks, excluding references to other repositories. Counts show a `+` when the
|
|
|
432
460
|
underlying list or search reaches its result limit; an unavailable count is not
|
|
433
461
|
shown as zero. Views without their own navigation still show tasks in the sidebar.
|
|
434
462
|
|
|
463
|
+
Open an issue to see **Linked tasks (N)** beneath its heading. Each row opens a task
|
|
464
|
+
in the current project and shows its title, status and date, newest first. Archived
|
|
465
|
+
tasks remain listed with an **Archived** label, so diagnosis and implementation
|
|
466
|
+
sessions are both reachable.
|
|
467
|
+
|
|
435
468
|
The Git sidebar lists **Task worktrees** that still exist on disk, including retained
|
|
436
469
|
worktrees from finished tasks. Each row shows its branch, task title, status and
|
|
437
470
|
available diff counts, and opens that task's Changes tab. Reclaimed worktrees disappear
|
|
@@ -482,7 +515,10 @@ Each row shows **every** PR and issue it references — a task opened on an issu
|
|
|
482
515
|
that landed a PR shows both — plus its cost and live CPU/memory, and can be
|
|
483
516
|
marked **read/unread** (the eye) or **archived** (or restored) right there. Every task title, project name and project group heading links into that
|
|
484
517
|
project, so the thread, its diff and its worktree are one click away and stay
|
|
485
|
-
exactly where they were.
|
|
518
|
+
exactly where they were. Returning to a long thread restores its saved row measurements
|
|
519
|
+
once the replay has rebuilt the same ordered messages, keeping the same content in view.
|
|
520
|
+
Scrolling, jumping to the latest message, or loading different history takes ownership
|
|
521
|
+
from that restoration; a thread left at its live tail follows the current tail.
|
|
486
522
|
|
|
487
523
|
There is deliberately **no project filter**: narrowing this page to one project
|
|
488
524
|
is that project's own Tasks page, which is a better version of the same answer
|
|
@@ -529,8 +565,10 @@ its existing automatic-check schedule when no CI wait is registered.
|
|
|
529
565
|
|
|
530
566
|
Cezar reports passed, failed, cancelled or skipped checks, no checks, changed head,
|
|
531
567
|
timeout or an operational error. It watches the registered commit: a new PR head
|
|
532
|
-
is reported separately, and the agent decides whether to wait again.
|
|
533
|
-
|
|
568
|
+
is reported separately, and the agent decides whether to wait again. The first
|
|
569
|
+
observation runs immediately. Later check-status and PR-head polls run every 30
|
|
570
|
+
seconds, and no setting changes that interval. Four watchers run concurrently;
|
|
571
|
+
queued waits retain their original deadline. Results are bounded
|
|
534
572
|
observations, not merge approval or evidence that every expected workflow appeared.
|
|
535
573
|
The agent still decides its next action; CI success never completes the task or
|
|
536
574
|
accepts review. A human message cancels the current wait, and CI never answers a
|
|
@@ -538,7 +576,7 @@ pending human question. Controller recovery can replay an observation after an
|
|
|
538
576
|
ambiguous delivery checkpoint, identified by its stable lifecycle input ID.
|
|
539
577
|
|
|
540
578
|
The adapters are bundled for Claude (including `claude-cli`), Codex, OpenCode,
|
|
541
|
-
Cursor and
|
|
579
|
+
Cursor, Pi and OMP. Internal socket/capability environment values are runtime wiring,
|
|
542
580
|
not settings to create or share. If the tool is unavailable or denied, its error
|
|
543
581
|
is surfaced while ordinary tasks continue. See [the CI-wait protocol](AGENT_PROTOCOL.md#ci-wait-tool-contract-474)
|
|
544
582
|
for limits and the executable harness verification required before release.
|
|
@@ -589,7 +627,7 @@ cez worker stop <worker-id>
|
|
|
589
627
|
cez worker destroy <worker-id>
|
|
590
628
|
```
|
|
591
629
|
|
|
592
|
-
Use `cez worker --help` to list operations and flags, or `cez worker <operation> --help` for one operation. Explicit help prints human-readable text and exits successfully without an active delegation session. Commands otherwise return bounded JSON and a nonzero exit on failure or incomplete cleanup. Spawn requires a committed baseline (`parent-head` or an explicit ref) and pins its SHA at acceptance; dirty parent edits are excluded. Optional `--context '<text>'` or `--context-file <UTF-8-file>` supplies selected context, not the parent's conversation. The two flags are mutually exclusive, and combined task/context text is limited to 100,000 characters. The API also accepts up to 32 pinned-baseline file or parent-attachment references, with at most 8 MiB of copied attachments. Inspect reports worker-local input locations. Reuse a request ID only with the same task, baseline, context, backend, model, effort and workflow when retrying a lost response.
|
|
630
|
+
Use `cez worker --help` to list operations and flags, or `cez worker <operation> --help` for one operation. Explicit help prints human-readable text and exits successfully without an active delegation session. Commands otherwise return bounded JSON and a nonzero exit on failure or incomplete cleanup. Spawn requires a committed baseline (`parent-head` or an explicit ref) and pins its SHA at acceptance; dirty parent edits are excluded. Optional `--context '<text>'` or `--context-file <UTF-8-file>` supplies selected context, not the parent's conversation. The two flags are mutually exclusive, and combined task/context text is limited to 100,000 characters. The API also accepts up to 32 pinned-baseline file or parent-attachment references, with at most 8 MiB of copied attachments. Inspect reports worker-local input locations. Reuse a request ID only with the same task, baseline, context, backend, model, effort and workflow when retrying a lost response. A parent holds at most 32 outstanding workers: accepted, live, or not yet verifiably destroyed. A verified destroy (`cez worker destroy`, or **Clean up** on a finished worker in the cockpit's Workers list) frees a slot; incomplete cleanup keeps its slot until a retry completes. A parent can create at most 1,024 workers in total; past that, start a new task. These limits bound disk resources and runaway spawning, not spending: a worker can be resumed with Continue, and destroying it does not undo charges already made. Cost stays bounded by `maxParallel` and by stopping the parent. There are at most 32 undelivered steering messages per worker.
|
|
593
631
|
|
|
594
632
|
An incomplete destroy reports the remaining resources and a reason. Cezar retries that recorded request after a delay, including after the project's context recovers on server restart. It removes the owned checkout only after process termination and ownership are verified. If the reason persists, inspect the worker process, Git worktree lock and ownership receipt; correct the blocker and use `cez worker destroy <worker-id>` or the cockpit Destroy action to retry immediately. Cezar leaves ambiguous or replaced resources in place for operator review.
|
|
595
633
|
|
|
@@ -597,7 +635,7 @@ An incomplete destroy reports the remaining resources and a reason. Cezar retrie
|
|
|
597
635
|
|
|
598
636
|
Explicit default-account model pins are checked against a fresh, nonempty host catalog after account/model resolution and before a worker is created. Named accounts retain existing validation because a default-account catalog cannot disprove their model access. A miss returns `invalid_input`, available models with advertised efforts, and other runners listing the requested ID in `modelChoices`. Empty, stale, or unavailable discovery leaves existing selection validation in place. Accepted retries and omitted model defaults are unchanged.
|
|
599
637
|
|
|
600
|
-
Omitted `--backend` inherits the parent's active backend. Same-backend workers inherit omitted model/account/effort; `--backend <claude|codex|opencode|pi|cursor>` selecting another backend resolves that backend's project/default account and model without forwarding another provider's settings. `--model <model>` selects a supported model, subject to existing locks. `--effort <low|medium|high|xhigh|max>` pins reasoning effort on same-backend and mixed-backend spawn; omitted `--effort` still inherits the parent pin on same-backend spawn and drops it on mixed-backend spawn. Accepted identity and grants remain fixed across queuing, restart and Continue, including explicit empty grants. Changing or deleting an account registry entry does not rebind a worker. Missing accepted identity evidence or account homes, incompatible Claude state-file layouts, and conflicting later model locks refuse execution explicitly. Credentials and vendor configuration are never copied; each worker receives its own delegation credential, and unspecified native models stay unspecified.
|
|
638
|
+
Omitted `--backend` inherits the parent's active backend. Same-backend workers inherit omitted model/account/effort; `--backend <claude|codex|opencode|pi|cursor|omp>` selecting another backend resolves that backend's project/default account and model without forwarding another provider's settings. `--model <model>` selects a supported model, subject to existing locks. `--effort <low|medium|high|xhigh|max>` pins reasoning effort on same-backend and mixed-backend spawn; omitted `--effort` still inherits the parent pin on same-backend spawn and drops it on mixed-backend spawn. Accepted identity and grants remain fixed across queuing, restart and Continue, including explicit empty grants. Changing or deleting an account registry entry does not rebind a worker. Missing accepted identity evidence or account homes, incompatible Claude state-file layouts, and conflicting later model locks refuse execution explicitly. Credentials and vendor configuration are never copied; each worker receives its own delegation credential, and unspecified native models stay unspecified.
|
|
601
639
|
|
|
602
640
|
Wait registers immediately. End the parent turn to release scheduler capacity; Cezar resumes it on a selected settled outcome or the finite deadline. `any` is the default, `one` requires exactly one worker, and `all` waits for every selected worker. Review, completion, failure, cancellation with proven termination, and destruction are outcomes. Timeout defaults to 600 seconds (1–1800 accepted). `cancel-wait` is idempotent for the retained wait ID and cannot cancel a newer wait. Timeout and wait cancellation report partial outcomes and unresolved workers, never cancel workers, and never automatically re-wait. Steering is attributed agent input and cannot answer a pending human question.
|
|
603
641
|
|
|
@@ -605,7 +643,7 @@ Parents and owned workers can converse in both directions; a worker may address
|
|
|
605
643
|
|
|
606
644
|
Messages allow 100,000 characters each, with at most 32 undelivered inputs per recipient, 1,024 messages per family, and 32 pending requests. Request deadlines default to 600 seconds, configurable per message with `--timeout-seconds 1–1800`. Request waits use the same limits and `one`/`any`/`all` modes as worker waits, and each run has one active wait. Incoming conversation can interrupt a parked wait without settling its requests. `cancel-request` cancels an obligation; `cancel-wait` only stops waiting. Completion without a reply, failure, cancellation, destruction, timeout, or sender closure settle obligations distinctly. Late replies remain visible without reopening them.
|
|
607
645
|
|
|
608
|
-
Messages reach a live recipient as soon as they are accepted, including mid-turn: Claude, Codex, Pi and OpenCode steer them into the running turn, and the model reads them at its next step. Cursor delivers at the turn boundary, because a second prompt would cancel its running turn. Pending conversations go together, in order, up to 32 messages and 100,000 formatted characters per batch; a single valid message is never split. Every message keeps its ID, sender, delivery receipt and request outcome; receipts show queued, delivered and read (when the agent's harness can tell) separately. A pending human question holds messages until it is answered, then they follow right behind the answer. The thread's Details distinguish creation, delivery confirmation and event-recording times.
|
|
646
|
+
Messages reach a live recipient as soon as they are accepted, including mid-turn: Claude, Codex, Pi, OMP and OpenCode steer them into the running turn, and the model reads them at its next step. Cursor delivers at the turn boundary, because a second prompt would cancel its running turn. Pending conversations go together, in order, up to 32 messages and 100,000 formatted characters per batch; a single valid message is never split. Every message keeps its ID, sender, delivery receipt and request outcome; receipts show queued, delivered and read (when the agent's harness can tell) separately. A pending human question holds messages until it is answered, then they follow right behind the answer. The thread's Details distinguish creation, delivery confirmation and event-recording times.
|
|
609
647
|
|
|
610
648
|
Sending to a review or terminal participant without `--resume` reports `not-delivered` and `continuation-required`, with the reason and next command; the CLI exits 1. An active parent can use `worker send --resume` (request or progress) to continue its settled done/review/failed worker with that message as the new instruction. No human Continue is needed for this parent-controlled action. A retry with the same payload and ID never creates another continuation; changing a rejected send to use `--resume` requires a new ID. Stopped or destroyed workers need a new worker. Workers cannot resume parents, and conversation never answers a pending human question. Durable IDs deduplicate accepted queue entries and event replay, but a crash between provider acceptance and its durable delivery checkpoint can leave transport delivery ambiguous; this is not an exactly-once execution guarantee.
|
|
611
649
|
|
|
@@ -633,11 +671,23 @@ Fix the `cez task` docs. Keep $(example) and "quotes" literal.
|
|
|
633
671
|
EOF
|
|
634
672
|
)
|
|
635
673
|
cez task wait "$id" --timeout-seconds 900 # 0 done/review/needs you · 1 failed · 3 timeout
|
|
636
|
-
cez task
|
|
637
|
-
cez task
|
|
674
|
+
cez task list # currentStepId (running), pullRequestUrl (done/review), capped error (failed)
|
|
675
|
+
cez task status "$id" # slim JSON: status, attention, question, branch, handoffUrl…
|
|
676
|
+
cez task send "$id" 'Use the retry helper instead' # delivered live, queued before start
|
|
677
|
+
cez task send "$id" --resume 'Continue with the next step' # resumed: reopen a settled session
|
|
638
678
|
cez task log "$id" --follow --timeout-seconds 300 # JSON lines until it ends
|
|
639
679
|
```
|
|
640
680
|
|
|
681
|
+
`list --status` accepts comma-separated values: `queued`, `running`, `waiting`, `review`,
|
|
682
|
+
`done`, `failed`, `cancelled`. Default rows include only the next-action field for their status
|
|
683
|
+
when defined; errors use the first line, at most 200 characters including `…` when cut.
|
|
684
|
+
Default `status` includes `handoffUrl`, a URL to the existing handoff endpoint even before
|
|
685
|
+
contents are seeded, and keeps the full error. `--full` still prints the contract unchanged.
|
|
686
|
+
To answer a pending `question`, use the same `send` with the answer text. Without `--resume`,
|
|
687
|
+
a closed session returns `delivery: not-delivered` and the `next` command. For multi-line or
|
|
688
|
+
shell-sensitive messages use `send <id> --text-file <path|->` (`-` reads stdin); the quoting
|
|
689
|
+
rules below apply to messages too.
|
|
690
|
+
|
|
641
691
|
Use `--task-file PATH` to read a saved task (for example, `cez task start --task-file task.md`),
|
|
642
692
|
or `--task-file -` to read stdin as above. The quoted heredoc delimiter (`<<'EOF'`) keeps
|
|
643
693
|
backticks and `$()` literal in the task text.
|
|
@@ -663,8 +713,8 @@ instead of starting a second. Also: `list`, `stop`, `finish`, `diff [--stat]`, `
|
|
|
663
713
|
Use `archive <id>` to hide a task from `list`, `unarchive <id>` to restore it, and
|
|
664
714
|
`list --all` to include archived tasks. `list` never shows owned workers, with or without
|
|
665
715
|
`--all`: they are steer targets of their parent task. Id-addressed commands (`status`, `wait`,
|
|
666
|
-
`send`, `log`, `stop`, …) still accept a worker's id. `archive-finished` sweeps finished tasks and prints
|
|
667
|
-
`{"archived": count}`. The single-task commands print `{"id": "…", "archived": true|false}`.
|
|
716
|
+
`send`, `log`, `stop`, …) still accept a worker's id. `archive-finished` sweeps finished tasks (not scheduled runs waiting on a usage limit, and not owned workers, which leave with their parent) and prints
|
|
717
|
+
`{"archived": count, "ids": [...], "pinnedIds": [...]}`. The single-task commands print `{"id": "…", "archived": true|false}`.
|
|
668
718
|
Exit codes:
|
|
669
719
|
`0` ok (`wait`/`start --wait`: the task ended `done`/`review` or stopped for attention), `1` task
|
|
670
720
|
failed/cancelled or a message was not delivered, `2` no cockpit or the cockpit refused (its `error`
|
|
@@ -801,12 +851,15 @@ Useful environment variables:
|
|
|
801
851
|
| `CEZ_CLAUDE_PERMISSION_MODE` | Claude agent-run permission flag: `dontAsk` (default), `acceptEdits`, or `bypass`. `bypass` passes `--dangerously-skip-permissions` and omits `--permission-mode`. Unset or unknown keeps today's `dontAsk` / `CEZ_APPROVAL_GATE` path. Provider verification commands are never given this flag. |
|
|
802
852
|
| `CEZ_CLAUDE_SETTING_SOURCES` | When set, Claude agent runs also pass `--setting-sources <value>` (e.g. `user,project,local`). Unset or empty omits the flag. Provider verification is never given this flag. |
|
|
803
853
|
| `CEZ_FOLLOWUPS=1` | Turn on the global follow-up **Inbox**: agents are asked to leave follow-ups in `todos.json` when they finish, and the Inbox view appears. Off by default — each task's own **Notes** handoff journal runs either way. |
|
|
804
|
-
| `CEZ_AUTOMATIONS=1` | Turn on **GitHub
|
|
805
|
-
| `
|
|
854
|
+
| `CEZ_AUTOMATIONS=1` | Turn on **automations** (GitHub polls and schedules): the Automations view appears and cezar runs each enabled automation while it is open, launching an ordinary task per match or per occurrence. A schedule (daily, weekdays, weekly, every N hours, in the server's time zone) needs no GitHub remote; a GitHub automation polls on its interval. Off by default, and only the exact value `1` enables it — without it nothing polls or fires, the automations endpoints answer `409`, and the nav item is absent. Read at boot, so restart after changing it; definitions, receipts and high-watermarks are retained, so unsetting it and restarting restores the feature without migration or data loss. |
|
|
855
|
+
| `CEZ_PREVIEW=1` | Turn on **live preview** (experimental): agents register a dev server with the `cezar_preview_serve` tool, and the cockpit opens it in a headless Chromium on the host, docked next to the task. cezar first runs a registered command after you press Run and open. Agents can then use `cezar_preview_stop({ port, restart?: boolean })` to stop or restart their own Cezar-started server with that unchanged approval; changed command, cwd or path needs Run and open again. Adopted servers cannot be stopped by this tool. Off by default, and only the exact value `1` enables it — without it the tool is not listed, its route and the preview WebSocket refuse, and `capabilities.preview` is `false`. Read at boot, so restart after changing it. |
|
|
856
|
+
| `CEZ_PREVIEW_NO_SANDBOX=1` | Launch the preview's Chromium with `--no-sandbox`. Off by default and never added automatically, not even for root or in a container; use it only where Chromium's sandbox cannot start, and only for pages you trust. Only the exact value `1` applies. Read at boot. |
|
|
857
|
+
| `CEZ_AUTOSAVE=1` | Re-enable the periodic (90 s) autosave commit in task worktrees. Off by default (open-mercato/cezar#471) — turn-end and pre-PR flushes always run, so branches still end complete. Every autosave names its trigger in the commit subject (`cezar autosave (periodic)` vs `(turn end)` / `(run finalize)` / `(pre-PR)`), so the flushes you keep are distinguishable from the timer you disabled. |
|
|
806
858
|
| `CEZ_CLAUDE_BIN=/path/to/claude` | Override which `claude` binary is used. |
|
|
807
859
|
| `CEZ_CODEX_BIN=/path/to/codex` | Override which `codex` binary is used. |
|
|
808
860
|
| `CEZ_OPENCODE_BIN=/path/to/opencode` | Override which `opencode` binary is used. |
|
|
809
861
|
| `CEZ_PI_BIN=/path/to/pi` | Override which `pi` binary is used. |
|
|
862
|
+
| `CEZ_OMP_BIN=/path/to/omp` | Override which `omp` (Oh My Pi) binary is used. |
|
|
810
863
|
| `CEZ_CURSOR_BIN=/path/to/agent` | Override the Cursor CLI (`agent`) executable. |
|
|
811
864
|
| `CLAUDE_CONFIG_DIR`, `CODEX_HOME` | The agents' **own** variables, honoured where the vendor documents one. Setting one moves that agent's **default account** — the config folder cezar discovers. A *second* login of the same CLI is deliberately not an environment setting, since one process-wide value cannot differ per project: add it under **Settings → Agent accounts** and pick it per project. |
|
|
812
865
|
| `CEZ_BROWSE_ROOT=~/` | Default root for **Add project → Open local folder…**. The picker cannot navigate above it; a saved workspace value overrides the environment default and must name an existing folder. |
|
|
@@ -820,13 +873,13 @@ Useful environment variables:
|
|
|
820
873
|
| `CEZ_HIDE_COST=1` | Hide backend-reported monetary cost throughout the browser cockpit while leaving raw input/output token counts visible. Only the exact value `1` enables it; telemetry and API payloads are unchanged, and a restart is required after changing it. |
|
|
821
874
|
| `CEZ_HIDE_TOKEN_METRICS=1` | Legacy master switch that hides both token usage and cost. It takes precedence over the two independent flags; only the exact value `1` enables it, payloads are unchanged, and a restart is required. |
|
|
822
875
|
| `GITHUB_TOKEN` | Fallback for GitHub reads/PRs when `gh` isn't authenticated. |
|
|
823
|
-
| `CEZ_ENV_PASSTHROUGH=A,B` | Forward these extra host env vars to spawned agents. By default agents get a least-privilege env (safe shell/toolchain vars + the backend's own auth + `GITHUB_TOKEN` + `CEZ_*`), not your full environment — use this to add a var an agent needs. |
|
|
824
|
-
| `CEZ_AGENT_ENV_FULL=1` | Escape hatch: give spawned agents the full host environment (pre-hardening behavior). Off by default; only set it if you understand that this hands every host secret to the agent process. |
|
|
825
|
-
| `CEZ_AGENT_TMPDIR=0` | Stop giving each task its own temp directory and hand agents the host `TMPDIR` again (pre
|
|
826
|
-
| `CEZ_REDACT_SECRETS=0` | Disable scrubbing of credential values/token shapes from the on-disk state (the NDJSON transcript and the free-text fields of `runs.
|
|
876
|
+
| `CEZ_ENV_PASSTHROUGH=A,B` | Forward these extra host env vars to spawned agents. By default agents get a least-privilege env (safe shell/toolchain vars + the backend's own auth + `GITHUB_TOKEN` + `CEZ_*`), not your full environment — use this to add a var an agent needs. A dev server live preview starts gets the same env without the backend's auth and `GITHUB_TOKEN`, plus these names. |
|
|
877
|
+
| `CEZ_AGENT_ENV_FULL=1` | Escape hatch: give spawned agents, and dev servers live preview starts, the full host environment (pre-hardening behavior). Off by default; only set it if you understand that this hands every host secret to the agent process. |
|
|
878
|
+
| `CEZ_AGENT_TMPDIR=0` | Stop giving each task its own temp directory and hand agents the host `TMPDIR` again (pre-open-mercato/cezar#785 behavior). On by default: every run gets `TMPDIR`/`TEMP`/`TMP` pointing at `.ai/cezar/tmp/<task-id>`, created and write-probed before the agent spawns, kept across session close, Continue, and restart while the task is live, and reaped at terminal completion or history deletion (hearsay-tools/cezarion#515) — and kept short enough for unix-socket paths: a checkout so deep that `.ai/cezar/tmp/<task-id>` would cross the kernel's socket-path limit resolves it to a `cez-agent-…` directory under the system temp dir instead (hearsay-tools/cezarion#387), with its location recorded so host temp-environment changes cannot move live scratch. So concurrent tasks stop sharing one directory and a task refuses to start rather than run against a temp directory that silently swallows its shell output (see Troubleshooting below). Only an exact `0` disables it, and it disables the whole thing — the pre-spawn check included, so this stays an escape hatch you can actually take. |
|
|
879
|
+
| `CEZ_REDACT_SECRETS=0` | Disable scrubbing of credential values/token shapes from the on-disk state (the NDJSON transcript and the free-text fields of the run records in `runs.db`). On by default; leave it on. Controller-generated delegation tokens are always scrubbed. Best-effort defense-in-depth, not a guarantee: it catches known token shapes and the values of your own secret-named env vars, so a credential in neither category can still get through. |
|
|
827
880
|
| `CEZ_TITLE_UPDATES=0` | Turn off the live task-title refresh (namer re-runs on each turn end). The Settings → Agents toggle overrides this default. |
|
|
828
881
|
| `CEZ_AUTONAME=0` | Disable ALL LLM task naming (creation + live) — titles stay heuristic (`437: /om-auto-review-pr`). Under `CEZ_DRY_RUN=1` naming is already off unless forced with `CEZ_AUTONAME=1`. |
|
|
829
|
-
| `CEZ_REVIEW_GATE=1` | Turn ON the optional diff-first review gate (#489): a successful, non-autonomous run with changes parks at `review` (Accept / Send back / Draft PR) instead of finishing. Off by default — changed runs settle to `done` with the diff left in the worktree. Only `1` enables. The Settings → Agents toggle overrides this; autonomous runs always skip it. |
|
|
882
|
+
| `CEZ_REVIEW_GATE=1` | Turn ON the optional diff-first review gate (open-mercato/cezar#489): a successful, non-autonomous run with changes parks at `review` (Accept / Send back / Draft PR) instead of finishing. Off by default — changed runs settle to `done` with the diff left in the worktree. Only `1` enables. The Settings → Agents toggle overrides this; autonomous runs always skip it. |
|
|
830
883
|
| `CEZ_NO_BANNER=1` | Skip the `open-mercato/skills` banner on `cez serve` startup. (The cockpit no longer shows a banner — its skills now live on the Skills page's Manage panel — so this env var is the terminal banner's only switch.) |
|
|
831
884
|
| `VITE_CEZ_API_BASE=http://localhost:4321` | **Build time only**, and only when the cockpit bundle is deployed apart from the service it talks to. Empty (the default) means "the origin that served this page", which is right for both normal cases: the CLI serves the bundle itself, and `npm run dev` proxies `/api` to the local service. A deployment that must be configured without a rebuild can put `<meta name="cez-api-base" content="…">` in the served HTML instead, which wins over this. |
|
|
832
885
|
| `VITE_CEZ_E2E=1` | **Build time only.** The cockpit e2e suite sets this when it builds the bundle it drives. It pins `useNow` and every `refetchInterval` so a wait cannot span a 30s tick or a 4s poll. Leave unset for production. |
|
|
@@ -851,7 +904,7 @@ df -i "${TMPDIR:-/tmp}" # a tmpfs can exhaust inodes long before
|
|
|
851
904
|
Under quota the file is *created* and the write then fails, so the backend reads
|
|
852
905
|
back a zero-byte capture file and hands the agent an empty result.
|
|
853
906
|
|
|
854
|
-
**Fix.** Since #785 cezar gives each task its own `TMPDIR` under
|
|
907
|
+
**Fix.** Since open-mercato/cezar#785 cezar gives each task its own `TMPDIR` under
|
|
855
908
|
`.ai/cezar/tmp/<task-id>` and write-probes it before spawning, so a broken temp
|
|
856
909
|
directory fails the task with `agent temp directory is not writable: …` on the
|
|
857
910
|
task thread instead of corrupting its work. If you see that error, free space on
|
|
@@ -869,7 +922,7 @@ with `TMPDIR=/tmp` set by hand, the same commands succeed. Tools like `tsx` bind
|
|
|
869
922
|
`<tmpdir>/tsx-<uid>/<pid>.pipe`), and the kernel caps a socket path at 104–108
|
|
870
923
|
bytes — a temp directory near that length leaves no room for the name.
|
|
871
924
|
|
|
872
|
-
**Fix.** Since #387 cezar keeps each task's temp directory at most 78 bytes. A
|
|
925
|
+
**Fix.** Since hearsay-tools/cezarion#387 cezar keeps each task's temp directory at most 78 bytes. A
|
|
873
926
|
checkout deep enough to push `.ai/cezar/tmp/<task-id>` past that limit gets a
|
|
874
927
|
short `cez-agent-…` directory under the system temp directory instead — still
|
|
875
928
|
per-task, still write-probed before the agent spawns, still reaped when the run
|
|
@@ -881,7 +934,7 @@ ends. Checkouts whose path already fits keep the repo-local directory.
|
|
|
881
934
|
## Coding agent backends
|
|
882
935
|
|
|
883
936
|
cezar is not married to one vendor. Every agent step runs through a single
|
|
884
|
-
`AgentRunner` seam with
|
|
937
|
+
`AgentRunner` seam with six built-in backends:
|
|
885
938
|
|
|
886
939
|
| Backend | CLI | How cezar drives it | Tool access |
|
|
887
940
|
|---|---|---|---|
|
|
@@ -890,14 +943,15 @@ cezar is not married to one vendor. Every agent step runs through a single
|
|
|
890
943
|
| **OpenCode** _(experimental)_ | [`opencode`](https://opencode.ai) | `opencode serve` — a local HTTP server with an SSE event stream. | Ignores `allowedTools` entirely; every permission is auto-approved. |
|
|
891
944
|
| **Cursor** | [`agent`](https://cursor.com/docs/cli/installation) | Persistent ACP over stdio. | Uses `--force` and approves ACP allow-once requests; Cursor’s native deny rules still apply. Per-run `allowedTools` and `bashAllowlist` are unsupported. |
|
|
892
945
|
| **pi** _(experimental)_ | [`pi`](https://github.com/badlogic/pi-mono) | Persistent `--mode rpc` over JSONL; models are picked with the `provider/model` convention. | Maps `allowedTools` onto pi's `--tools` allowlist; default sessions also pass harness extras (`Subagent`, `SubagentSupervisor`, `SubagentWait`) through `--tools`, and an explicit `allowedTools` still restricts. A configured `bashAllowlist` disables Bash because pi cannot express command-prefix rules. |
|
|
946
|
+
| **OMP** _(experimental)_ | [`omp`](https://github.com/can1357/oh-my-pi) | Persistent `--mode rpc` over JSONL (Oh My Pi, a pi fork); models use the `provider/model` convention and are discovered from `omp models --json`. | Maps `allowedTools` onto OMP's `--tools` allowlist (`[]` becomes `--no-tools`); default sessions also pass `todo`, `lsp`, `ast_edit`, `task` and `wait`. A configured `bashAllowlist` disables `bash` because OMP cannot express command-prefix rules. |
|
|
893
947
|
|
|
894
|
-
> ⚠️ **OpenCode and
|
|
948
|
+
> ⚠️ **OpenCode, pi and OMP support are experimental.** These runners work but are less
|
|
895
949
|
> battle-tested than the Claude Code and Codex backends, and OpenCode auto-approves
|
|
896
950
|
> every permission (it ignores `allowedTools`). Treat them as previews and expect
|
|
897
951
|
> rough edges.
|
|
898
952
|
|
|
899
953
|
On startup cezar probes which CLIs are installed and the cockpit only offers
|
|
900
|
-
the backends it found — install any one of the
|
|
954
|
+
the backends it found — install any one of the six and you're operational.
|
|
901
955
|
|
|
902
956
|
### Cursor CLI
|
|
903
957
|
|
|
@@ -921,6 +975,19 @@ These select configuration; Cezar does not offer alternate Cursor account profil
|
|
|
921
975
|
because a complete credential-and-session home override has not been verified.
|
|
922
976
|
|
|
923
977
|
|
|
978
|
+
### OMP (Oh My Pi)
|
|
979
|
+
|
|
980
|
+
Install [OMP](https://github.com/can1357/oh-my-pi) (`curl -fsSL https://omp.sh/install | sh`
|
|
981
|
+
installs a prebuilt binary; Bun is needed only for `--source`) and run `omp login`. Cezar discovers `omp` on PATH;
|
|
982
|
+
`CEZ_OMP_BIN` overrides its location. `omp` is a separate backend from `pi`: a host with
|
|
983
|
+
both binaries keeps both, and `CEZ_PI_BIN` never selects OMP. Select **OMP** in the runner
|
|
984
|
+
picker to use a persistent `--mode rpc` session. A missing CLI leaves the other backends
|
|
985
|
+
available and shows OMP as unavailable. `CEZ_DRY_RUN=1` uses the mock.
|
|
986
|
+
|
|
987
|
+
Agents ask questions through cezar's `CEZ:ASK` marker, and OMP's own sub-agents appear in the
|
|
988
|
+
Agents drawer. Settings → Agent config exposes OMP's `config.yml`, `mcp.json` and
|
|
989
|
+
`AGENTS.md` files. Named OMP profiles and accounts are not supported yet.
|
|
990
|
+
|
|
924
991
|
**Pick a backend at three levels** (most specific wins):
|
|
925
992
|
|
|
926
993
|
1. **Config default** — `"defaultRunner": "codex"` in `.ai/cezar/config.json`.
|
|
@@ -1033,9 +1100,11 @@ cez artifact publish /tmp/decision.md
|
|
|
1033
1100
|
|
|
1034
1101
|
Cezar supplies the bundled command and task context to agent sessions automatically
|
|
1035
1102
|
(`CEZ_TASK_ID` and `CEZ_ARTIFACTS_DIR`; do not configure these yourself). The command
|
|
1036
|
-
returns JSON with a Markdown link for the agent to share.
|
|
1037
|
-
|
|
1038
|
-
|
|
1103
|
+
returns JSON with a Markdown link for the agent to share. When the owning project
|
|
1104
|
+
is registered, the link keeps that project when copied or opened from another
|
|
1105
|
+
project. If ownership cannot be discovered, publication keeps the legacy task link.
|
|
1106
|
+
The Files tab also lists published artifacts. It previews text, Markdown and raster
|
|
1107
|
+
images; other formats can be downloaded. HTML/scripts never execute inside the cockpit, and embedded
|
|
1039
1108
|
images in Markdown documents do not load automatically.
|
|
1040
1109
|
|
|
1041
1110
|
Snapshots do not change when the original file changes. They survive worktree
|
|
@@ -1064,7 +1133,8 @@ never blocks startup):
|
|
|
1064
1133
|
"defaultRunner": "claude", // agent backend: "claude" (default) · "codex" · "opencode" · "pi"
|
|
1065
1134
|
"modelsLocked": true, // optional: native per-runner model is fixed/read-only; runner stays selectable
|
|
1066
1135
|
"plannerModel": "sonnet", // model the "Plan first" button uses to draft chains
|
|
1067
|
-
"baseBranch": "develop"
|
|
1136
|
+
"baseBranch": "develop", // branch worktrees fork from + PRs target (also settable in the Git tab)
|
|
1137
|
+
"worktreeSetup": { "commands": ["npm ci"] } // prepare each new worktree before the agent starts (below)
|
|
1068
1138
|
}
|
|
1069
1139
|
```
|
|
1070
1140
|
|
|
@@ -1075,8 +1145,9 @@ selector uses that runner's discovered model list. While locked, the model is
|
|
|
1075
1145
|
shown read-only and follows the selected runner's native settings; the runner
|
|
1076
1146
|
itself remains selectable.
|
|
1077
1147
|
|
|
1078
|
-
Run data (`runs.
|
|
1079
|
-
|
|
1148
|
+
Run data (`runs.db` and its `-wal`/`-shm` files, the `runs.json.pre-sqlite*.bak`
|
|
1149
|
+
backups, NDJSON event logs, worktrees, `todos.json`) is git-ignored
|
|
1150
|
+
automatically; your workflows and skills stay committable.
|
|
1080
1151
|
|
|
1081
1152
|
Settings that belong to *you* rather than to a repo — the parallel cap
|
|
1082
1153
|
(`maxParallel`, default **2**), the per-task memory ceiling and the checkout
|
|
@@ -1086,6 +1157,56 @@ root — live once in `~/.cezar/config.json`, alongside the
|
|
|
1086
1157
|
in a repo's `.ai/cezar/config.json` is imported into the workspace file the
|
|
1087
1158
|
first time cezar boots there, and ignored afterwards.
|
|
1088
1159
|
|
|
1160
|
+
### Preparing new worktrees
|
|
1161
|
+
|
|
1162
|
+
Every task and worker runs in a fresh worktree, and a fresh worktree has nothing installed. Give
|
|
1163
|
+
the project a `worktreeSetup` and cezar runs those commands in each new worktree before the
|
|
1164
|
+
agent's first turn, so the agent (and anything that runs beside it, such as a test watcher)
|
|
1165
|
+
starts in a ready tree:
|
|
1166
|
+
|
|
1167
|
+
```jsonc
|
|
1168
|
+
// .ai/cezar/config.json
|
|
1169
|
+
"worktreeSetup": {
|
|
1170
|
+
"commands": ["npm ci", "cp \"$CEZ_PROJECT_ROOT/.env\" .env"],
|
|
1171
|
+
"timeoutSeconds": 900 // optional, per command; default 900, max 7200
|
|
1172
|
+
}
|
|
1173
|
+
```
|
|
1174
|
+
|
|
1175
|
+
Or edit it in **Settings → Worktrees → Prepare new worktrees**, one command per line. Only a
|
|
1176
|
+
cockpit on the machine running cezar can change it: a hosted cockpit (`CEZ_REMOTE=1`) shows it
|
|
1177
|
+
read-only, because these are commands the host runs.
|
|
1178
|
+
|
|
1179
|
+
- **When it runs.** In every new task worktree and every worker worktree, and again when Continue
|
|
1180
|
+
rebuilds a worktree that retention reclaimed. Never for a task that runs in the repo working
|
|
1181
|
+
tree (worktree off), and never for a non-git directory.
|
|
1182
|
+
- **How it runs.** Each command runs as `bash -lc '<command>'` in the worktree root, in order,
|
|
1183
|
+
and the setup stops at the first command that fails or times out. Up to 20 commands.
|
|
1184
|
+
- **What it can see.** The same curated environment the live preview gives a dev server: your
|
|
1185
|
+
`PATH`, `HOME` and the shell basics, but no agent API keys and no GitHub token. A private
|
|
1186
|
+
registry token reaches it through `CEZ_ENV_PASSTHROUGH=NPM_TOKEN` (or the tool's own config
|
|
1187
|
+
file under `HOME`). It also gets `CEZ_PROJECT_ROOT` (the main checkout, for copying untracked
|
|
1188
|
+
files like `.env`) and `CEZ_TASK_ID`.
|
|
1189
|
+
- **What you see.** The task thread shows a "Ran `<command>`" card per command with its output
|
|
1190
|
+
(the last 20 KB) and a line with the outcome and duration, which also goes into the handoff
|
|
1191
|
+
file.
|
|
1192
|
+
- **What the agent sees.** Its first message says what ran, so it doesn't repeat the install.
|
|
1193
|
+
If a command fails or times out, the agent still starts and its first message names the
|
|
1194
|
+
command, the exit code and the end of the output, so it can fix the cause or work around it.
|
|
1195
|
+
- **Keep generated files gitignored.** Autosave commits whatever Git doesn't ignore, so anything
|
|
1196
|
+
setup creates outside `.gitignore` becomes part of the task's changes. `node_modules/` and
|
|
1197
|
+
`.venv/` are usually ignored already.
|
|
1198
|
+
|
|
1199
|
+
Without the key nothing runs, exactly as before. Examples:
|
|
1200
|
+
|
|
1201
|
+
| Project | `commands` |
|
|
1202
|
+
| --- | --- |
|
|
1203
|
+
| npm | `["npm ci"]` |
|
|
1204
|
+
| pnpm | `["pnpm install --frozen-lockfile"]` |
|
|
1205
|
+
| Python (uv) | `["uv sync --frozen"]` |
|
|
1206
|
+
| Go | `["go mod download"]` |
|
|
1207
|
+
| Rust | `["cargo fetch"]` |
|
|
1208
|
+
| Copy local env | `["cp \"$CEZ_PROJECT_ROOT/.env\" .env"]` |
|
|
1209
|
+
|
|
1089
1210
|
### Editing the agents' own config (Settings → Agent config)
|
|
1090
1211
|
|
|
1091
1212
|
cezar picks *which* agent runs; **Settings → Agent config** lets you edit *how* it
|
|
@@ -1106,7 +1227,7 @@ hosted cockpit (`CEZ_REMOTE=1`) is read-only and never serves home-file contents
|
|
|
1106
1227
|
End-to-end, from a fresh clone to a global `cez` command you can run in **any**
|
|
1107
1228
|
repo on your machine — no npm publish required.
|
|
1108
1229
|
|
|
1109
|
-
**1. Prerequisites** — Node
|
|
1230
|
+
**1. Prerequisites** — Node 24.15+ and `git` (plus at least one logged-in agent CLI,
|
|
1110
1231
|
as in [Quick start](#quick-start)).
|
|
1111
1232
|
|
|
1112
1233
|
**2. Clone & install**
|
|
@@ -11,9 +11,11 @@ import type { RunnerId } from '../core/agent-runner.ts';
|
|
|
11
11
|
* A raw editor cannot drift on a vendor's *schema*; it can drift on *paths and
|
|
12
12
|
* precedence strings*, so every entry carries a `docsUrl` and this table is the
|
|
13
13
|
* single maintenance surface. Facts verified against primary docs 2026-07-16;
|
|
14
|
-
* the Pi entries against Pi's README and docs/settings.md on 2026-09-15 (#322)
|
|
14
|
+
* the Pi entries against Pi's README and docs/settings.md on 2026-09-15 (#322);
|
|
15
|
+
* the OMP entries against OMP's docs/config-usage.md and docs/mcp-config.md at
|
|
16
|
+
* main @ 7318a70cf4ed on 2026-10-05 (#595).
|
|
15
17
|
*/
|
|
16
|
-
export type ConfigFormat = 'json' | 'jsonc' | 'toml' | 'markdown';
|
|
18
|
+
export type ConfigFormat = 'json' | 'jsonc' | 'toml' | 'yaml' | 'markdown';
|
|
17
19
|
export type ConfigScope = 'user' | 'project' | 'local';
|
|
18
20
|
/** `settings` = behavior knobs; `memory` = instruction/markdown; `mcp` = a dedicated MCP file. */
|
|
19
21
|
export type ConfigKind = 'settings' | 'memory' | 'mcp';
|
|
@@ -34,6 +36,8 @@ export interface AgentHomePaths {
|
|
|
34
36
|
pi: string;
|
|
35
37
|
/** Cursor CLI configuration directory; not an account home. */
|
|
36
38
|
cursor: string;
|
|
39
|
+
/** `$PI_CODING_AGENT_DIR` or `~/${PI_CONFIG_DIR || '.omp'}/agent` — OMP's default profile. */
|
|
40
|
+
omp: string;
|
|
37
41
|
}
|
|
38
42
|
export interface ConfigFileDef {
|
|
39
43
|
/** Stable, opaque, URL-safe. The ONLY thing a client may name (traversal-proof). */
|
|
@@ -8,6 +8,8 @@ const OPENCODE_CONFIG_DOCS = 'https://opencode.ai/docs/config/';
|
|
|
8
8
|
const OPENCODE_RULES_DOCS = 'https://opencode.ai/docs/rules/';
|
|
9
9
|
const PI_SETTINGS_DOCS = 'https://github.com/badlogic/pi-mono/blob/main/packages/coding-agent/docs/settings.md';
|
|
10
10
|
const PI_CONTEXT_FILES_DOCS = 'https://github.com/badlogic/pi-mono/blob/main/packages/coding-agent/README.md#context-files';
|
|
11
|
+
const OMP_CONFIG_DOCS = 'https://github.com/can1357/oh-my-pi/blob/main/docs/config-usage.md';
|
|
12
|
+
const OMP_MCP_DOCS = 'https://github.com/can1357/oh-my-pi/blob/main/docs/mcp-config.md';
|
|
11
13
|
/**
|
|
12
14
|
* The table. Order is presentation order: per runner, then user → project →
|
|
13
15
|
* local so each scope ladder reads top (broad) to bottom (specific).
|
|
@@ -245,6 +247,79 @@ export const CONFIG_FILES = [
|
|
|
245
247
|
precedence: 'Global context file, loaded first. Every AGENTS.md (or CLAUDE.md) from the parent directories down to the current one is concatenated after it; an AGENTS.override.md replaces that directory’s file only.',
|
|
246
248
|
docsUrl: PI_CONTEXT_FILES_DOCS,
|
|
247
249
|
},
|
|
250
|
+
// ---- OMP: verified 2026-10-02 against v18.4.11 ----
|
|
251
|
+
// Oh My Pi (`can1357/oh-my-pi`, docs at main @ 7318a70cf4ed). The user layer lives in
|
|
252
|
+
// `AgentHomePaths.omp` (`$PI_CODING_AGENT_DIR` or `~/${PI_CONFIG_DIR || '.omp'}/agent`, the default
|
|
253
|
+
// profile; a named profile relocates it and is not modelled). Project files always live in
|
|
254
|
+
// `<repo>/.omp/`. Settings are YAML (`config.yml`); no `modelKey`, because OMP has no native-default
|
|
255
|
+
// strategy cezar reads (spec § Model selection). Precedence strings quote the docs in doc order;
|
|
256
|
+
// a numbered doc list is joined with "; ", its wording untouched. Not listed, by the spec's
|
|
257
|
+
// scope: `.omp/AGENTS.md` (OMP's native project context file; project memory is the shared root
|
|
258
|
+
// `AGENTS.md` row) and the `.omp/.mcp.json` / user `.mcp.json` compatibility spellings.
|
|
259
|
+
{
|
|
260
|
+
id: 'omp.user.settings',
|
|
261
|
+
runners: ['omp'],
|
|
262
|
+
kind: 'settings',
|
|
263
|
+
scope: 'user',
|
|
264
|
+
resolve: (_repo, home) => join(home.omp, 'config.yml'),
|
|
265
|
+
label: '~/.omp/agent/config.yml',
|
|
266
|
+
format: 'yaml',
|
|
267
|
+
tracked: 'outside-repo',
|
|
268
|
+
precedence:
|
|
269
|
+
// config-usage.md § Layers, the six-tier list.
|
|
270
|
+
'Effective precedence, highest first: 1. Environment variable declared on the definition (`env: "NAME"`), parsed by the setting\'s type; unparseable text counts as unset. Booleans follow `parseFlag`: empty is unset, `1`/`y`/`true`/`yes`/`on` (lower or upper case) is true, any other text is false; 2. Runtime overrides: in-memory, non-persistent; 3. Config overlays: `PI_CONFIG_FILES` (platform path-list), followed by repeated `omp --config <path>` files; all are loaded as `config.yml`-style YAML for this process only; 4. Project settings: discovered via the settings capability (`settings.json` and `config.yml` from providers); 5. Global settings: the first present file among `~/.omp/agent/config.yml` and `config.yaml`; 6. Definition default',
|
|
271
|
+
docsUrl: OMP_CONFIG_DOCS,
|
|
272
|
+
},
|
|
273
|
+
{
|
|
274
|
+
id: 'omp.project.settings',
|
|
275
|
+
runners: ['omp'],
|
|
276
|
+
kind: 'settings',
|
|
277
|
+
scope: 'project',
|
|
278
|
+
resolve: (repo) => join(repo, '.omp', 'config.yml'),
|
|
279
|
+
label: '.omp/config.yml',
|
|
280
|
+
format: 'yaml',
|
|
281
|
+
tracked: 'tracked',
|
|
282
|
+
precedence: 'Project settings: discovered via the settings capability (`settings.json` and `config.yml` from providers). Within the native provider, project `config.yml` follows and overrides `settings.json`. Runs read the committed copy.',
|
|
283
|
+
docsUrl: OMP_CONFIG_DOCS,
|
|
284
|
+
},
|
|
285
|
+
{
|
|
286
|
+
id: 'omp.user.mcp',
|
|
287
|
+
runners: ['omp'],
|
|
288
|
+
kind: 'mcp',
|
|
289
|
+
scope: 'user',
|
|
290
|
+
resolve: (_repo, home) => join(home.omp, 'mcp.json'),
|
|
291
|
+
label: '~/.omp/agent/mcp.json',
|
|
292
|
+
format: 'json',
|
|
293
|
+
tracked: 'outside-repo',
|
|
294
|
+
holdsMcp: true,
|
|
295
|
+
precedence: 'Across providers, the first definition wins. Duplicate names are not merged; OpenCode\'s internal config layers are the exception described above. Within OMP native config, project `.omp/mcp.json` precedes `.omp/.mcp.json`, then the active profile\'s user `mcp.json` and `.mcp.json`.',
|
|
296
|
+
docsUrl: OMP_MCP_DOCS,
|
|
297
|
+
},
|
|
298
|
+
{
|
|
299
|
+
id: 'omp.project.mcp',
|
|
300
|
+
runners: ['omp'],
|
|
301
|
+
kind: 'mcp',
|
|
302
|
+
scope: 'project',
|
|
303
|
+
resolve: (repo) => join(repo, '.omp', 'mcp.json'),
|
|
304
|
+
label: '.omp/mcp.json',
|
|
305
|
+
format: 'json',
|
|
306
|
+
tracked: 'tracked',
|
|
307
|
+
holdsMcp: true,
|
|
308
|
+
precedence: 'Across providers, the first definition wins. Duplicate names are not merged; OpenCode\'s internal config layers are the exception described above. Within OMP native config, project `.omp/mcp.json` precedes `.omp/.mcp.json`, then the active profile\'s user `mcp.json` and `.mcp.json`. Runs read the committed copy.',
|
|
309
|
+
docsUrl: OMP_MCP_DOCS,
|
|
310
|
+
},
|
|
311
|
+
{
|
|
312
|
+
id: 'omp.user.memory',
|
|
313
|
+
runners: ['omp'],
|
|
314
|
+
kind: 'memory',
|
|
315
|
+
scope: 'user',
|
|
316
|
+
resolve: (_repo, home) => join(home.omp, 'AGENTS.md'),
|
|
317
|
+
label: '~/.omp/agent/AGENTS.md',
|
|
318
|
+
format: 'markdown',
|
|
319
|
+
tracked: 'outside-repo',
|
|
320
|
+
precedence: '`SYSTEM.md`, `SYSTEM_TEMPLATE.md`, `RULES.md`, and `.omp/AGENTS.md` read user-level files directly and use the nearest non-empty ancestor `.omp` directory for project files. Context files: `.omp/AGENTS.md`; standalone ancestor `AGENTS.md` files are loaded separately by the low-priority `agents-md` provider',
|
|
321
|
+
docsUrl: OMP_CONFIG_DOCS,
|
|
322
|
+
},
|
|
248
323
|
// ---- Cursor — verified against vendor docs 2026-09-16 ----
|
|
249
324
|
{
|
|
250
325
|
id: 'cursor.user.settings',
|
|
@@ -283,17 +358,17 @@ export const CONFIG_FILES = [
|
|
|
283
358
|
precedence: 'MCP in the CLI uses the same configuration as the editor.',
|
|
284
359
|
docsUrl: 'https://cursor.com/docs/cli/mcp',
|
|
285
360
|
},
|
|
286
|
-
// ---- Shared: <repo>/AGENTS.md is read by Codex, OpenCode AND
|
|
361
|
+
// ---- Shared: <repo>/AGENTS.md is read by Codex, OpenCode, Pi, Cursor AND OMP ----
|
|
287
362
|
{
|
|
288
363
|
id: 'project.agents',
|
|
289
|
-
runners: ['codex', 'opencode', 'pi', 'cursor'],
|
|
364
|
+
runners: ['codex', 'opencode', 'pi', 'cursor', 'omp'],
|
|
290
365
|
kind: 'memory',
|
|
291
366
|
scope: 'project',
|
|
292
367
|
resolve: (repo) => join(repo, 'AGENTS.md'),
|
|
293
368
|
label: 'AGENTS.md',
|
|
294
369
|
format: 'markdown',
|
|
295
370
|
tracked: 'tracked',
|
|
296
|
-
precedence: 'Read by Codex, OpenCode, Pi and
|
|
371
|
+
precedence: 'Read by Codex, OpenCode, Pi, Cursor and OMP (Claude ignores it). Codex concatenates it root-down; OpenCode uses the first match and prefers it over CLAUDE.md; Pi concatenates every AGENTS.md (or CLAUDE.md) from the parent directories down, after its global file; OMP loads standalone ancestor AGENTS.md files through its low-priority `agents-md` provider. Runs read the committed copy.',
|
|
297
372
|
docsUrl: OPENCODE_RULES_DOCS,
|
|
298
373
|
},
|
|
299
374
|
];
|