@hearsay-tools/squawk 0.0.0-stage → 0.17.0-pr3058.5683
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +22 -0
- package/README.md +1846 -2
- package/dist/activity/demand.d.ts +21 -0
- package/dist/activity/demand.js +49 -0
- package/dist/activity/demand.js.map +1 -0
- package/dist/activity/publisher.d.ts +48 -0
- package/dist/activity/publisher.js +175 -0
- package/dist/activity/publisher.js.map +1 -0
- package/dist/activity/read-model.d.ts +50 -0
- package/dist/activity/read-model.js +143 -0
- package/dist/activity/read-model.js.map +1 -0
- package/dist/activity/requests.d.ts +27 -0
- package/dist/activity/requests.js +81 -0
- package/dist/activity/requests.js.map +1 -0
- package/dist/activity/text.d.ts +4 -0
- package/dist/activity/text.js +13 -0
- package/dist/activity/text.js.map +1 -0
- package/dist/activity/tool-activity.d.ts +87 -0
- package/dist/activity/tool-activity.js +250 -0
- package/dist/activity/tool-activity.js.map +1 -0
- package/dist/activity/wait.d.ts +19 -0
- package/dist/activity/wait.js +91 -0
- package/dist/activity/wait.js.map +1 -0
- package/dist/agent-config/account-identity.d.ts +28 -0
- package/dist/agent-config/account-identity.js +132 -0
- package/dist/agent-config/account-identity.js.map +1 -0
- package/dist/agent-config/catalog.d.ts +70 -0
- package/dist/agent-config/catalog.js +384 -0
- package/dist/agent-config/catalog.js.map +1 -0
- package/dist/agent-config/files.d.ts +42 -0
- package/dist/agent-config/files.js +115 -0
- package/dist/agent-config/files.js.map +1 -0
- package/dist/agent-config/model-settings/claude.d.ts +2 -0
- package/dist/agent-config/model-settings/claude.js +11 -0
- package/dist/agent-config/model-settings/claude.js.map +1 -0
- package/dist/agent-config/model-settings/codex.d.ts +2 -0
- package/dist/agent-config/model-settings/codex.js +16 -0
- package/dist/agent-config/model-settings/codex.js.map +1 -0
- package/dist/agent-config/model-settings/opencode.d.ts +2 -0
- package/dist/agent-config/model-settings/opencode.js +8 -0
- package/dist/agent-config/model-settings/opencode.js.map +1 -0
- package/dist/agent-config/model-settings/pi.d.ts +2 -0
- package/dist/agent-config/model-settings/pi.js +38 -0
- package/dist/agent-config/model-settings/pi.js.map +1 -0
- package/dist/agent-config/model-settings/shared.d.ts +12 -0
- package/dist/agent-config/model-settings/shared.js +100 -0
- package/dist/agent-config/model-settings/shared.js.map +1 -0
- package/dist/agent-config/model-settings/types.d.ts +9 -0
- package/dist/agent-config/model-settings/types.js +2 -0
- package/dist/agent-config/model-settings/types.js.map +1 -0
- package/dist/agent-config/models.d.ts +9 -0
- package/dist/agent-config/models.js +40 -0
- package/dist/agent-config/models.js.map +1 -0
- package/dist/agent-config/seed.d.ts +15 -0
- package/dist/agent-config/seed.js +94 -0
- package/dist/agent-config/seed.js.map +1 -0
- package/dist/agent-config/service.d.ts +44 -0
- package/dist/agent-config/service.js +73 -0
- package/dist/agent-config/service.js.map +1 -0
- package/dist/agent-config/validate.d.ts +18 -0
- package/dist/agent-config/validate.js +82 -0
- package/dist/agent-config/validate.js.map +1 -0
- package/dist/application-update/bin-recovery.d.ts +5 -0
- package/dist/application-update/bin-recovery.js +96 -0
- package/dist/application-update/bin-recovery.js.map +1 -0
- package/dist/application-update/discovery.d.ts +23 -0
- package/dist/application-update/discovery.js +131 -0
- package/dist/application-update/discovery.js.map +1 -0
- package/dist/application-update/helper.d.ts +58 -0
- package/dist/application-update/helper.js +363 -0
- package/dist/application-update/helper.js.map +1 -0
- package/dist/application-update/launcher.d.ts +12 -0
- package/dist/application-update/launcher.js +61 -0
- package/dist/application-update/launcher.js.map +1 -0
- package/dist/application-update/lock.d.ts +4 -0
- package/dist/application-update/lock.js +70 -0
- package/dist/application-update/lock.js.map +1 -0
- package/dist/application-update/npm-process.d.ts +17 -0
- package/dist/application-update/npm-process.js +156 -0
- package/dist/application-update/npm-process.js.map +1 -0
- package/dist/application-update/runtime-layout.d.ts +20 -0
- package/dist/application-update/runtime-layout.js +91 -0
- package/dist/application-update/runtime-layout.js.map +1 -0
- package/dist/application-update/scoped-recovery.d.ts +32 -0
- package/dist/application-update/scoped-recovery.js +210 -0
- package/dist/application-update/scoped-recovery.js.map +1 -0
- package/dist/application-update/service.d.ts +86 -0
- package/dist/application-update/service.js +523 -0
- package/dist/application-update/service.js.map +1 -0
- package/dist/archive-on-merge-setting.d.ts +15 -0
- package/dist/archive-on-merge-setting.js +15 -0
- package/dist/archive-on-merge-setting.js.map +1 -0
- package/dist/artifacts/cli.d.ts +1 -0
- package/dist/artifacts/cli.js +54 -0
- package/dist/artifacts/cli.js.map +1 -0
- package/dist/artifacts/lifecycle.d.ts +4 -0
- package/dist/artifacts/lifecycle.js +42 -0
- package/dist/artifacts/lifecycle.js.map +1 -0
- package/dist/artifacts/reports-index.d.ts +46 -0
- package/dist/artifacts/reports-index.js +279 -0
- package/dist/artifacts/reports-index.js.map +1 -0
- package/dist/artifacts/reports-watch.d.ts +43 -0
- package/dist/artifacts/reports-watch.js +129 -0
- package/dist/artifacts/reports-watch.js.map +1 -0
- package/dist/artifacts/resolve.d.ts +18 -0
- package/dist/artifacts/resolve.js +129 -0
- package/dist/artifacts/resolve.js.map +1 -0
- package/dist/artifacts/store.d.ts +40 -0
- package/dist/artifacts/store.js +513 -0
- package/dist/artifacts/store.js.map +1 -0
- package/dist/automations/automation-cli.d.ts +61 -0
- package/dist/automations/automation-cli.js +519 -0
- package/dist/automations/automation-cli.js.map +1 -0
- package/dist/automations/builtin-skill.d.ts +7 -0
- package/dist/automations/builtin-skill.js +14 -0
- package/dist/automations/builtin-skill.js.map +1 -0
- package/dist/automations/coordinator.d.ts +53 -0
- package/dist/automations/coordinator.js +136 -0
- package/dist/automations/coordinator.js.map +1 -0
- package/dist/automations/github-baseline.d.ts +3 -0
- package/dist/automations/github-baseline.js +17 -0
- package/dist/automations/github-baseline.js.map +1 -0
- package/dist/automations/github-poller.d.ts +93 -0
- package/dist/automations/github-poller.js +303 -0
- package/dist/automations/github-poller.js.map +1 -0
- package/dist/automations/project-files.d.ts +6 -0
- package/dist/automations/project-files.js +43 -0
- package/dist/automations/project-files.js.map +1 -0
- package/dist/automations/prompts.d.ts +12 -0
- package/dist/automations/prompts.js +162 -0
- package/dist/automations/prompts.js.map +1 -0
- package/dist/automations/schedule-runner.d.ts +153 -0
- package/dist/automations/schedule-runner.js +529 -0
- package/dist/automations/schedule-runner.js.map +1 -0
- package/dist/automations/scheduler.d.ts +95 -0
- package/dist/automations/scheduler.js +462 -0
- package/dist/automations/scheduler.js.map +1 -0
- package/dist/automations/service.d.ts +793 -0
- package/dist/automations/service.js +444 -0
- package/dist/automations/service.js.map +1 -0
- package/dist/automations/store.d.ts +168 -0
- package/dist/automations/store.js +805 -0
- package/dist/automations/store.js.map +1 -0
- package/dist/automations/task-template.d.ts +59 -0
- package/dist/automations/task-template.js +285 -0
- package/dist/automations/task-template.js.map +1 -0
- package/dist/automations/tool-adapter.d.ts +6 -0
- package/dist/automations/tool-adapter.js +115 -0
- package/dist/automations/tool-adapter.js.map +1 -0
- package/dist/automations/types.d.ts +1 -0
- package/dist/automations/types.js +2 -0
- package/dist/automations/types.js.map +1 -0
- package/dist/autosave-cleanup.d.ts +26 -0
- package/dist/autosave-cleanup.js +87 -0
- package/dist/autosave-cleanup.js.map +1 -0
- package/dist/autosave-git.d.ts +23 -0
- package/dist/autosave-git.js +211 -0
- package/dist/autosave-git.js.map +1 -0
- package/dist/autosave-group.d.ts +8 -0
- package/dist/autosave-group.js +61 -0
- package/dist/autosave-group.js.map +1 -0
- package/dist/autosave-holders.d.ts +34 -0
- package/dist/autosave-holders.js +228 -0
- package/dist/autosave-holders.js.map +1 -0
- package/dist/autosave-windows.d.ts +25 -0
- package/dist/autosave-windows.js +170 -0
- package/dist/autosave-windows.js.map +1 -0
- package/dist/cez.d.ts +2 -0
- package/dist/cez.js +3 -0
- package/dist/cez.js.map +1 -0
- package/dist/cezarion.d.ts +2 -0
- package/dist/cezarion.js +3 -0
- package/dist/cezarion.js.map +1 -0
- package/dist/ci-wait/client.d.ts +28 -0
- package/dist/ci-wait/client.js +123 -0
- package/dist/ci-wait/client.js.map +1 -0
- package/dist/ci-wait/controller.d.ts +824 -0
- package/dist/ci-wait/controller.js +305 -0
- package/dist/ci-wait/controller.js.map +1 -0
- package/dist/ci-wait/errors.d.ts +35 -0
- package/dist/ci-wait/errors.js +273 -0
- package/dist/ci-wait/errors.js.map +1 -0
- package/dist/ci-wait/github.d.ts +105 -0
- package/dist/ci-wait/github.js +324 -0
- package/dist/ci-wait/github.js.map +1 -0
- package/dist/ci-wait/injection.d.ts +3 -0
- package/dist/ci-wait/injection.js +13 -0
- package/dist/ci-wait/injection.js.map +1 -0
- package/dist/ci-wait/mcp.d.ts +3 -0
- package/dist/ci-wait/mcp.js +30 -0
- package/dist/ci-wait/mcp.js.map +1 -0
- package/dist/ci-wait/merge-progress.d.ts +84 -0
- package/dist/ci-wait/merge-progress.js +50 -0
- package/dist/ci-wait/merge-progress.js.map +1 -0
- package/dist/ci-wait/progress.d.ts +56 -0
- package/dist/ci-wait/progress.js +100 -0
- package/dist/ci-wait/progress.js.map +1 -0
- package/dist/ci-wait/resources.d.ts +9 -0
- package/dist/ci-wait/resources.js +46 -0
- package/dist/ci-wait/resources.js.map +1 -0
- package/dist/ci-wait/supervisor.d.ts +47 -0
- package/dist/ci-wait/supervisor.js +334 -0
- package/dist/ci-wait/supervisor.js.map +1 -0
- package/dist/ci-wait/text.d.ts +2 -0
- package/dist/ci-wait/text.js +5 -0
- package/dist/ci-wait/text.js.map +1 -0
- package/dist/ci-wait/tools.d.ts +845 -0
- package/dist/ci-wait/tools.js +232 -0
- package/dist/ci-wait/tools.js.map +1 -0
- package/dist/cli-dispatch.d.ts +33 -0
- package/dist/cli-dispatch.js +239 -0
- package/dist/cli-dispatch.js.map +1 -0
- package/dist/config.d.ts +117 -0
- package/dist/config.js +343 -0
- package/dist/config.js.map +1 -0
- package/dist/contract/active-provider.d.ts +12 -0
- package/dist/contract/activity.d.ts +1478 -0
- package/dist/contract/agent-config.d.ts +160 -0
- package/dist/contract/agent-profiles.d.ts +369 -0
- package/dist/contract/application-update.d.ts +32 -0
- package/dist/contract/artifacts.d.ts +100 -0
- package/dist/contract/ask-schema.d.ts +50 -0
- package/dist/contract/ask.d.ts +11 -0
- package/dist/contract/attachments.d.ts +35 -0
- package/dist/contract/attention.d.ts +99 -0
- package/dist/contract/automation-requests.d.ts +314 -0
- package/dist/contract/automation-schedule.d.ts +89 -0
- package/dist/contract/automation-storage.d.ts +518 -0
- package/dist/contract/automations.d.ts +1560 -0
- package/dist/contract/ci-wait.d.ts +281 -0
- package/dist/contract/config-requests.d.ts +36 -0
- package/dist/contract/control-locations.d.ts +10 -0
- package/dist/contract/conversations.d.ts +415 -0
- package/dist/contract/defined.d.ts +8 -0
- package/dist/contract/delegation.d.ts +2168 -0
- package/dist/contract/discovery.d.ts +228 -0
- package/dist/contract/effort.d.ts +18 -0
- package/dist/contract/events.d.ts +324 -0
- package/dist/contract/github-requests.d.ts +26 -0
- package/dist/contract/github.d.ts +732 -0
- package/dist/contract/handoff.d.ts +43 -0
- package/dist/contract/health.d.ts +128 -0
- package/dist/contract/home-recovery.d.ts +71 -0
- package/dist/contract/image-path.d.ts +6 -0
- package/dist/contract/index.d.ts +68 -0
- package/dist/contract/index.js +6709 -0
- package/dist/contract/live-coordination.d.ts +164 -0
- package/dist/contract/live-limits.d.ts +8 -0
- package/dist/contract/live.d.ts +123 -0
- package/dist/contract/pending-ask.d.ts +58 -0
- package/dist/contract/per-runner-optional-strings.d.ts +10 -0
- package/dist/contract/permissions.d.ts +54 -0
- package/dist/contract/preview.d.ts +568 -0
- package/dist/contract/project-limits.d.ts +35 -0
- package/dist/contract/projects.d.ts +716 -0
- package/dist/contract/provider-requests.d.ts +77 -0
- package/dist/contract/query-requests.d.ts +52 -0
- package/dist/contract/repo-requests.d.ts +12 -0
- package/dist/contract/repo.d.ts +515 -0
- package/dist/contract/report-title.d.ts +3 -0
- package/dist/contract/reports.d.ts +101 -0
- package/dist/contract/run-labels.d.ts +8 -0
- package/dist/contract/run-limits.d.ts +8 -0
- package/dist/contract/run-predicates.d.ts +87 -0
- package/dist/contract/run-requests.d.ts +33 -0
- package/dist/contract/run-search.d.ts +193 -0
- package/dist/contract/runs.d.ts +7108 -0
- package/dist/contract/scheduled-tasks.d.ts +188 -0
- package/dist/contract/self-update.d.ts +255 -0
- package/dist/contract/skill-sources.d.ts +125 -0
- package/dist/contract/skills.d.ts +56 -0
- package/dist/contract/task-options.d.ts +18 -0
- package/dist/contract/team-skill-ref.d.ts +10 -0
- package/dist/contract/tool-display.d.ts +25 -0
- package/dist/contract/ui-state-requests.d.ts +60 -0
- package/dist/contract/version.d.ts +3 -0
- package/dist/contract/voice.d.ts +213 -0
- package/dist/contract/waits.d.ts +1996 -0
- package/dist/contract/workflow-file.d.ts +37 -0
- package/dist/contract/workflow-requests.d.ts +7 -0
- package/dist/contract/workflows.d.ts +250 -0
- package/dist/contract/workspace-events.d.ts +410 -0
- package/dist/contract/workspace.d.ts +631 -0
- package/dist/contract/zoned-time.d.ts +26 -0
- package/dist/core/agent-env.d.ts +34 -0
- package/dist/core/agent-env.js +411 -0
- package/dist/core/agent-env.js.map +1 -0
- package/dist/core/agent-model-policy.d.ts +11 -0
- package/dist/core/agent-model-policy.js +38 -0
- package/dist/core/agent-model-policy.js.map +1 -0
- package/dist/core/agent-profiles.d.ts +50 -0
- package/dist/core/agent-profiles.js +105 -0
- package/dist/core/agent-profiles.js.map +1 -0
- package/dist/core/agent-runner.d.ts +425 -0
- package/dist/core/agent-runner.js +98 -0
- package/dist/core/agent-runner.js.map +1 -0
- package/dist/core/ask.d.ts +26 -0
- package/dist/core/ask.js +35 -0
- package/dist/core/ask.js.map +1 -0
- package/dist/core/backend-detect.d.ts +18 -0
- package/dist/core/backend-detect.js +216 -0
- package/dist/core/backend-detect.js.map +1 -0
- package/dist/core/claude-cli-runner.d.ts +85 -0
- package/dist/core/claude-cli-runner.js +899 -0
- package/dist/core/claude-cli-runner.js.map +1 -0
- package/dist/core/claude-executable.d.ts +2 -0
- package/dist/core/claude-executable.js +15 -0
- package/dist/core/claude-executable.js.map +1 -0
- package/dist/core/claude-model-catalog.d.ts +16 -0
- package/dist/core/claude-model-catalog.js +198 -0
- package/dist/core/claude-model-catalog.js.map +1 -0
- package/dist/core/claude-stream.d.ts +38 -0
- package/dist/core/claude-stream.js +77 -0
- package/dist/core/claude-stream.js.map +1 -0
- package/dist/core/claude-ui-mapper.d.ts +88 -0
- package/dist/core/claude-ui-mapper.js +851 -0
- package/dist/core/claude-ui-mapper.js.map +1 -0
- package/dist/core/codex-app-server-runner.d.ts +76 -0
- package/dist/core/codex-app-server-runner.js +1271 -0
- package/dist/core/codex-app-server-runner.js.map +1 -0
- package/dist/core/codex-app-server-transport.d.ts +52 -0
- package/dist/core/codex-app-server-transport.js +200 -0
- package/dist/core/codex-app-server-transport.js.map +1 -0
- package/dist/core/codex-approvals.d.ts +12 -0
- package/dist/core/codex-approvals.js +180 -0
- package/dist/core/codex-approvals.js.map +1 -0
- package/dist/core/codex-hook-mapper.d.ts +15 -0
- package/dist/core/codex-hook-mapper.js +73 -0
- package/dist/core/codex-hook-mapper.js.map +1 -0
- package/dist/core/codex-model-catalog.d.ts +10 -0
- package/dist/core/codex-model-catalog.js +110 -0
- package/dist/core/codex-model-catalog.js.map +1 -0
- package/dist/core/codex-native-frames.d.ts +35 -0
- package/dist/core/codex-native-frames.js +80 -0
- package/dist/core/codex-native-frames.js.map +1 -0
- package/dist/core/codex-permissions.d.ts +6 -0
- package/dist/core/codex-permissions.js +27 -0
- package/dist/core/codex-permissions.js.map +1 -0
- package/dist/core/codex-stream-error.d.ts +2 -0
- package/dist/core/codex-stream-error.js +12 -0
- package/dist/core/codex-stream-error.js.map +1 -0
- package/dist/core/codex-turn-outcome.d.ts +10 -0
- package/dist/core/codex-turn-outcome.js +35 -0
- package/dist/core/codex-turn-outcome.js.map +1 -0
- package/dist/core/codex-ui-mapper-state.d.ts +84 -0
- package/dist/core/codex-ui-mapper-state.js +8 -0
- package/dist/core/codex-ui-mapper-state.js.map +1 -0
- package/dist/core/codex-ui-mapper.d.ts +44 -0
- package/dist/core/codex-ui-mapper.js +799 -0
- package/dist/core/codex-ui-mapper.js.map +1 -0
- package/dist/core/cursor-cli-flags.d.ts +19 -0
- package/dist/core/cursor-cli-flags.js +47 -0
- package/dist/core/cursor-cli-flags.js.map +1 -0
- package/dist/core/cursor-config-options.d.ts +18 -0
- package/dist/core/cursor-config-options.js +31 -0
- package/dist/core/cursor-config-options.js.map +1 -0
- package/dist/core/cursor-model-catalog.d.ts +50 -0
- package/dist/core/cursor-model-catalog.js +306 -0
- package/dist/core/cursor-model-catalog.js.map +1 -0
- package/dist/core/cursor-print-capabilities.d.ts +14 -0
- package/dist/core/cursor-print-capabilities.js +169 -0
- package/dist/core/cursor-print-capabilities.js.map +1 -0
- package/dist/core/cursor-print-process.d.ts +31 -0
- package/dist/core/cursor-print-process.js +117 -0
- package/dist/core/cursor-print-process.js.map +1 -0
- package/dist/core/cursor-print-runner.d.ts +43 -0
- package/dist/core/cursor-print-runner.js +574 -0
- package/dist/core/cursor-print-runner.js.map +1 -0
- package/dist/core/cursor-print-tool-catalog.d.ts +3 -0
- package/dist/core/cursor-print-tool-catalog.js +13 -0
- package/dist/core/cursor-print-tool-catalog.js.map +1 -0
- package/dist/core/cursor-print-ui-mapper.d.ts +47 -0
- package/dist/core/cursor-print-ui-mapper.js +574 -0
- package/dist/core/cursor-print-ui-mapper.js.map +1 -0
- package/dist/core/cursor-provider-error.d.ts +9 -0
- package/dist/core/cursor-provider-error.js +15 -0
- package/dist/core/cursor-provider-error.js.map +1 -0
- package/dist/core/cursor-runner.d.ts +46 -0
- package/dist/core/cursor-runner.js +144 -0
- package/dist/core/cursor-runner.js.map +1 -0
- package/dist/core/defined.d.ts +1 -0
- package/dist/core/defined.js +2 -0
- package/dist/core/defined.js.map +1 -0
- package/dist/core/disclaim-spawn.d.ts +11 -0
- package/dist/core/disclaim-spawn.js +60 -0
- package/dist/core/disclaim-spawn.js.map +1 -0
- package/dist/core/edit-write-key.d.ts +2 -0
- package/dist/core/edit-write-key.js +6 -0
- package/dist/core/edit-write-key.js.map +1 -0
- package/dist/core/hook-items.d.ts +14 -0
- package/dist/core/hook-items.js +13 -0
- package/dist/core/hook-items.js.map +1 -0
- package/dist/core/host-model-catalog.d.ts +7 -0
- package/dist/core/host-model-catalog.js +21 -0
- package/dist/core/host-model-catalog.js.map +1 -0
- package/dist/core/input-submissions.d.ts +14 -0
- package/dist/core/input-submissions.js +26 -0
- package/dist/core/input-submissions.js.map +1 -0
- package/dist/core/managed-session.d.ts +6 -0
- package/dist/core/managed-session.js +116 -0
- package/dist/core/managed-session.js.map +1 -0
- package/dist/core/model-discovery-options.d.ts +8 -0
- package/dist/core/model-discovery-options.js +2 -0
- package/dist/core/model-discovery-options.js.map +1 -0
- package/dist/core/model-identity.d.ts +108 -0
- package/dist/core/model-identity.js +137 -0
- package/dist/core/model-identity.js.map +1 -0
- package/dist/core/model-presets.d.ts +10 -0
- package/dist/core/model-presets.js +77 -0
- package/dist/core/model-presets.js.map +1 -0
- package/dist/core/model-probe-teardown.d.ts +4 -0
- package/dist/core/model-probe-teardown.js +20 -0
- package/dist/core/model-probe-teardown.js.map +1 -0
- package/dist/core/ndjson.d.ts +6 -0
- package/dist/core/ndjson.js +23 -0
- package/dist/core/ndjson.js.map +1 -0
- package/dist/core/omp-model-catalog.d.ts +39 -0
- package/dist/core/omp-model-catalog.js +183 -0
- package/dist/core/omp-model-catalog.js.map +1 -0
- package/dist/core/omp-runner.d.ts +86 -0
- package/dist/core/omp-runner.js +818 -0
- package/dist/core/omp-runner.js.map +1 -0
- package/dist/core/omp-subagent-rows.d.ts +21 -0
- package/dist/core/omp-subagent-rows.js +99 -0
- package/dist/core/omp-subagent-rows.js.map +1 -0
- package/dist/core/omp-ui-mapper.d.ts +112 -0
- package/dist/core/omp-ui-mapper.js +807 -0
- package/dist/core/omp-ui-mapper.js.map +1 -0
- package/dist/core/opencode-model-catalog.d.ts +27 -0
- package/dist/core/opencode-model-catalog.js +189 -0
- package/dist/core/opencode-model-catalog.js.map +1 -0
- package/dist/core/opencode-permissions.d.ts +52 -0
- package/dist/core/opencode-permissions.js +101 -0
- package/dist/core/opencode-permissions.js.map +1 -0
- package/dist/core/opencode-runtime-config.d.ts +9 -0
- package/dist/core/opencode-runtime-config.js +26 -0
- package/dist/core/opencode-runtime-config.js.map +1 -0
- package/dist/core/opencode-server-runner.d.ts +75 -0
- package/dist/core/opencode-server-runner.js +1690 -0
- package/dist/core/opencode-server-runner.js.map +1 -0
- package/dist/core/opencode-session-error.d.ts +19 -0
- package/dist/core/opencode-session-error.js +42 -0
- package/dist/core/opencode-session-error.js.map +1 -0
- package/dist/core/opencode-task-scope.d.ts +9 -0
- package/dist/core/opencode-task-scope.js +19 -0
- package/dist/core/opencode-task-scope.js.map +1 -0
- package/dist/core/opencode-ui-mapper-state.d.ts +82 -0
- package/dist/core/opencode-ui-mapper-state.js +7 -0
- package/dist/core/opencode-ui-mapper-state.js.map +1 -0
- package/dist/core/opencode-ui-mapper.d.ts +59 -0
- package/dist/core/opencode-ui-mapper.js +724 -0
- package/dist/core/opencode-ui-mapper.js.map +1 -0
- package/dist/core/opencode-usage.d.ts +32 -0
- package/dist/core/opencode-usage.js +105 -0
- package/dist/core/opencode-usage.js.map +1 -0
- package/dist/core/pi-model-catalog.d.ts +34 -0
- package/dist/core/pi-model-catalog.js +247 -0
- package/dist/core/pi-model-catalog.js.map +1 -0
- package/dist/core/pi-rpc-turn.d.ts +179 -0
- package/dist/core/pi-rpc-turn.js +370 -0
- package/dist/core/pi-rpc-turn.js.map +1 -0
- package/dist/core/pi-rpc-wire.d.ts +31 -0
- package/dist/core/pi-rpc-wire.js +88 -0
- package/dist/core/pi-rpc-wire.js.map +1 -0
- package/dist/core/pi-runner.d.ts +58 -0
- package/dist/core/pi-runner.js +587 -0
- package/dist/core/pi-runner.js.map +1 -0
- package/dist/core/pi-ui-mapper.d.ts +52 -0
- package/dist/core/pi-ui-mapper.js +408 -0
- package/dist/core/pi-ui-mapper.js.map +1 -0
- package/dist/core/process-usage.d.ts +74 -0
- package/dist/core/process-usage.js +219 -0
- package/dist/core/process-usage.js.map +1 -0
- package/dist/core/product-env.d.ts +21 -0
- package/dist/core/product-env.js +38 -0
- package/dist/core/product-env.js.map +1 -0
- package/dist/core/provider-auth.d.ts +168 -0
- package/dist/core/provider-auth.js +661 -0
- package/dist/core/provider-auth.js.map +1 -0
- package/dist/core/provider-availability.d.ts +3 -0
- package/dist/core/provider-availability.js +14 -0
- package/dist/core/provider-availability.js.map +1 -0
- package/dist/core/runner-factory.d.ts +11 -0
- package/dist/core/runner-factory.js +36 -0
- package/dist/core/runner-factory.js.map +1 -0
- package/dist/core/runner-facts.d.ts +135 -0
- package/dist/core/runner-facts.js +59 -0
- package/dist/core/runner-facts.js.map +1 -0
- package/dist/core/runner-model-catalog.d.ts +34 -0
- package/dist/core/runner-model-catalog.js +109 -0
- package/dist/core/runner-model-catalog.js.map +1 -0
- package/dist/core/runner-runtime.d.ts +40 -0
- package/dist/core/runner-runtime.js +88 -0
- package/dist/core/runner-runtime.js.map +1 -0
- 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/runner-tool-grants.d.ts +19 -0
- package/dist/core/runner-tool-grants.js +54 -0
- package/dist/core/runner-tool-grants.js.map +1 -0
- package/dist/core/secret-redaction.d.ts +20 -0
- package/dist/core/secret-redaction.js +95 -0
- package/dist/core/secret-redaction.js.map +1 -0
- package/dist/core/session-process.d.ts +43 -0
- package/dist/core/session-process.js +363 -0
- package/dist/core/session-process.js.map +1 -0
- package/dist/core/shell-env.d.ts +17 -0
- package/dist/core/shell-env.js +51 -0
- package/dist/core/shell-env.js.map +1 -0
- package/dist/core/ui-events.d.ts +356 -0
- package/dist/core/ui-events.js +13 -0
- package/dist/core/ui-events.js.map +1 -0
- package/dist/core/usage-limit.d.ts +42 -0
- package/dist/core/usage-limit.js +152 -0
- package/dist/core/usage-limit.js.map +1 -0
- package/dist/core/usage.d.ts +11 -0
- package/dist/core/usage.js +15 -0
- package/dist/core/usage.js.map +1 -0
- package/dist/core/v1-text-coalescer.d.ts +36 -0
- package/dist/core/v1-text-coalescer.js +72 -0
- package/dist/core/v1-text-coalescer.js.map +1 -0
- package/dist/data-gitignore.d.ts +6 -0
- package/dist/data-gitignore.js +80 -0
- package/dist/data-gitignore.js.map +1 -0
- package/dist/delegation/capacity.d.ts +15 -0
- package/dist/delegation/capacity.js +30 -0
- package/dist/delegation/capacity.js.map +1 -0
- package/dist/delegation/cli.d.ts +5 -0
- package/dist/delegation/cli.js +572 -0
- package/dist/delegation/cli.js.map +1 -0
- package/dist/delegation/context.d.ts +40 -0
- package/dist/delegation/context.js +398 -0
- package/dist/delegation/context.js.map +1 -0
- package/dist/delegation/conversation-send.d.ts +64 -0
- package/dist/delegation/conversation-send.js +74 -0
- package/dist/delegation/conversation-send.js.map +1 -0
- package/dist/delegation/conversations.d.ts +2186 -0
- package/dist/delegation/conversations.js +285 -0
- package/dist/delegation/conversations.js.map +1 -0
- package/dist/delegation/credentials.d.ts +21 -0
- package/dist/delegation/credentials.js +66 -0
- package/dist/delegation/credentials.js.map +1 -0
- 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/effort.d.ts +1 -0
- package/dist/delegation/effort.js +11 -0
- package/dist/delegation/effort.js.map +1 -0
- package/dist/delegation/execution-identity.d.ts +257 -0
- package/dist/delegation/execution-identity.js +253 -0
- package/dist/delegation/execution-identity.js.map +1 -0
- package/dist/delegation/execution-settings.d.ts +11 -0
- package/dist/delegation/execution-settings.js +65 -0
- package/dist/delegation/execution-settings.js.map +1 -0
- package/dist/delegation/idle-test-app.d.ts +4 -0
- package/dist/delegation/idle-test-app.js +186 -0
- package/dist/delegation/idle-test-app.js.map +1 -0
- package/dist/delegation/input.d.ts +12 -0
- package/dist/delegation/input.js +50 -0
- package/dist/delegation/input.js.map +1 -0
- package/dist/delegation/park-notice.d.ts +45 -0
- package/dist/delegation/park-notice.js +81 -0
- package/dist/delegation/park-notice.js.map +1 -0
- package/dist/delegation/policy.d.ts +27 -0
- package/dist/delegation/policy.js +110 -0
- package/dist/delegation/policy.js.map +1 -0
- package/dist/delegation/process-liveness.d.ts +98 -0
- package/dist/delegation/process-liveness.js +213 -0
- package/dist/delegation/process-liveness.js.map +1 -0
- package/dist/delegation/provision.d.ts +36 -0
- package/dist/delegation/provision.js +218 -0
- package/dist/delegation/provision.js.map +1 -0
- package/dist/delegation/questions.d.ts +24 -0
- package/dist/delegation/questions.js +56 -0
- package/dist/delegation/questions.js.map +1 -0
- package/dist/delegation/readiness.d.ts +13 -0
- package/dist/delegation/readiness.js +19 -0
- package/dist/delegation/readiness.js.map +1 -0
- package/dist/delegation/results.d.ts +13 -0
- package/dist/delegation/results.js +153 -0
- package/dist/delegation/results.js.map +1 -0
- package/dist/delegation/retry-backoff.d.ts +31 -0
- package/dist/delegation/retry-backoff.js +26 -0
- package/dist/delegation/retry-backoff.js.map +1 -0
- package/dist/delegation/routes.d.ts +1017 -0
- package/dist/delegation/routes.js +85 -0
- package/dist/delegation/routes.js.map +1 -0
- package/dist/delegation/scratch-cleanup.d.ts +33 -0
- package/dist/delegation/scratch-cleanup.js +155 -0
- package/dist/delegation/scratch-cleanup.js.map +1 -0
- package/dist/delegation/service.d.ts +264 -0
- package/dist/delegation/service.js +807 -0
- package/dist/delegation/service.js.map +1 -0
- package/dist/delegation/task-discovery.d.ts +6 -0
- package/dist/delegation/task-discovery.js +27 -0
- package/dist/delegation/task-discovery.js.map +1 -0
- package/dist/delegation/transport.d.ts +995 -0
- package/dist/delegation/transport.js +22 -0
- package/dist/delegation/transport.js.map +1 -0
- package/dist/delegation/wait.d.ts +7 -0
- package/dist/delegation/wait.js +44 -0
- package/dist/delegation/wait.js.map +1 -0
- package/dist/delegation/windows-test-app.d.ts +5 -0
- package/dist/delegation/windows-test-app.js +64 -0
- package/dist/delegation/windows-test-app.js.map +1 -0
- package/dist/delegation/windows-workspace-identity.d.ts +3 -0
- package/dist/delegation/windows-workspace-identity.js +23 -0
- package/dist/delegation/windows-workspace-identity.js.map +1 -0
- package/dist/delegation/worker-cleanup.d.ts +53 -0
- package/dist/delegation/worker-cleanup.js +330 -0
- package/dist/delegation/worker-cleanup.js.map +1 -0
- package/dist/delegation/workspace.d.ts +40 -0
- package/dist/delegation/workspace.js +592 -0
- package/dist/delegation/workspace.js.map +1 -0
- package/dist/detached-process.d.ts +134 -0
- package/dist/detached-process.js +460 -0
- package/dist/detached-process.js.map +1 -0
- package/dist/discovery/catalog.d.ts +16 -0
- package/dist/discovery/catalog.js +31 -0
- package/dist/discovery/catalog.js.map +1 -0
- package/dist/discovery/cli.d.ts +8 -0
- package/dist/discovery/cli.js +122 -0
- package/dist/discovery/cli.js.map +1 -0
- package/dist/git-command.d.ts +7 -0
- package/dist/git-command.js +8 -0
- package/dist/git-command.js.map +1 -0
- package/dist/git-diff-base.d.ts +41 -0
- package/dist/git-diff-base.js +116 -0
- package/dist/git-diff-base.js.map +1 -0
- package/dist/git-index-copy.d.ts +4 -0
- package/dist/git-index-copy.js +10 -0
- package/dist/git-index-copy.js.map +1 -0
- package/dist/git-private-index.d.ts +11 -0
- package/dist/git-private-index.js +51 -0
- package/dist/git-private-index.js.map +1 -0
- package/dist/git-refs.d.ts +11 -0
- package/dist/git-refs.js +14 -0
- package/dist/git-refs.js.map +1 -0
- package/dist/git-worktree-lock-helper.d.ts +7 -0
- package/dist/git-worktree-lock-helper.js +178 -0
- package/dist/git-worktree-lock-helper.js.map +1 -0
- package/dist/git-worktree-lock.d.ts +17 -0
- package/dist/git-worktree-lock.js +90 -0
- package/dist/git-worktree-lock.js.map +1 -0
- 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 +148 -0
- package/dist/git-worktree.js +858 -0
- package/dist/git-worktree.js.map +1 -0
- package/dist/handoff.d.ts +72 -0
- package/dist/handoff.js +213 -0
- package/dist/handoff.js.map +1 -0
- package/dist/headless-run.d.ts +48 -0
- package/dist/headless-run.js +158 -0
- package/dist/headless-run.js.map +1 -0
- package/dist/home/boundary.d.ts +5 -0
- package/dist/home/boundary.js +76 -0
- package/dist/home/boundary.js.map +1 -0
- package/dist/home/changes.d.ts +3 -0
- package/dist/home/changes.js +11 -0
- package/dist/home/changes.js.map +1 -0
- package/dist/home/command.d.ts +9 -0
- package/dist/home/command.js +37 -0
- package/dist/home/command.js.map +1 -0
- package/dist/home/deprecation.d.ts +9 -0
- package/dist/home/deprecation.js +17 -0
- package/dist/home/deprecation.js.map +1 -0
- package/dist/home/display.d.ts +4 -0
- package/dist/home/display.js +11 -0
- package/dist/home/display.js.map +1 -0
- package/dist/home/entry-authorization.d.ts +17 -0
- package/dist/home/entry-authorization.js +39 -0
- package/dist/home/entry-authorization.js.map +1 -0
- package/dist/home/entry.d.ts +16 -0
- package/dist/home/entry.js +96 -0
- package/dist/home/entry.js.map +1 -0
- package/dist/home/file-location.d.ts +14 -0
- package/dist/home/file-location.js +24 -0
- package/dist/home/file-location.js.map +1 -0
- package/dist/home/home.d.ts +42 -0
- package/dist/home/home.js +70 -0
- package/dist/home/home.js.map +1 -0
- package/dist/home/identity.d.ts +22 -0
- package/dist/home/identity.js +25 -0
- package/dist/home/identity.js.map +1 -0
- package/dist/home/install-marker.d.ts +27 -0
- package/dist/home/install-marker.js +78 -0
- package/dist/home/install-marker.js.map +1 -0
- package/dist/home/kind-roots.d.ts +10 -0
- package/dist/home/kind-roots.js +36 -0
- package/dist/home/kind-roots.js.map +1 -0
- package/dist/home/leases.d.ts +14 -0
- package/dist/home/leases.js +55 -0
- package/dist/home/leases.js.map +1 -0
- package/dist/home/legacy-account-paths.d.ts +4 -0
- package/dist/home/legacy-account-paths.js +41 -0
- package/dist/home/legacy-account-paths.js.map +1 -0
- package/dist/home/legacy-merge.d.ts +3 -0
- package/dist/home/legacy-merge.js +45 -0
- package/dist/home/legacy-merge.js.map +1 -0
- package/dist/home/legacy-recovery.d.ts +5 -0
- package/dist/home/legacy-recovery.js +154 -0
- package/dist/home/legacy-recovery.js.map +1 -0
- package/dist/home/legacy-source.d.ts +15 -0
- package/dist/home/legacy-source.js +57 -0
- package/dist/home/legacy-source.js.map +1 -0
- package/dist/home/migrate.d.ts +19 -0
- package/dist/home/migrate.js +322 -0
- package/dist/home/migrate.js.map +1 -0
- package/dist/home/migration-account-source.d.ts +2 -0
- package/dist/home/migration-account-source.js +17 -0
- package/dist/home/migration-account-source.js.map +1 -0
- package/dist/home/migration-accounts.d.ts +23 -0
- package/dist/home/migration-accounts.js +174 -0
- package/dist/home/migration-accounts.js.map +1 -0
- package/dist/home/migration-boot.d.ts +23 -0
- package/dist/home/migration-boot.js +84 -0
- package/dist/home/migration-boot.js.map +1 -0
- package/dist/home/migration-claim.d.ts +4 -0
- package/dist/home/migration-claim.js +69 -0
- package/dist/home/migration-claim.js.map +1 -0
- package/dist/home/migration-cli.d.ts +3 -0
- package/dist/home/migration-cli.js +64 -0
- package/dist/home/migration-cli.js.map +1 -0
- package/dist/home/migration-files.d.ts +14 -0
- package/dist/home/migration-files.js +192 -0
- package/dist/home/migration-files.js.map +1 -0
- package/dist/home/migration-guard.d.ts +2 -0
- package/dist/home/migration-guard.js +20 -0
- package/dist/home/migration-guard.js.map +1 -0
- package/dist/home/migration-plan.d.ts +20 -0
- package/dist/home/migration-plan.js +71 -0
- package/dist/home/migration-plan.js.map +1 -0
- package/dist/home/migration-record.d.ts +79 -0
- package/dist/home/migration-record.js +39 -0
- package/dist/home/migration-record.js.map +1 -0
- package/dist/home/private-files.d.ts +13 -0
- package/dist/home/private-files.js +113 -0
- package/dist/home/private-files.js.map +1 -0
- package/dist/home/process-identity.d.ts +2 -0
- package/dist/home/process-identity.js +8 -0
- package/dist/home/process-identity.js.map +1 -0
- package/dist/home/protected-roots.d.ts +25 -0
- package/dist/home/protected-roots.js +91 -0
- package/dist/home/protected-roots.js.map +1 -0
- package/dist/home/recovery-watch.d.ts +3 -0
- package/dist/home/recovery-watch.js +75 -0
- package/dist/home/recovery-watch.js.map +1 -0
- package/dist/home/recovery.d.ts +10 -0
- package/dist/home/recovery.js +94 -0
- package/dist/home/recovery.js.map +1 -0
- package/dist/home/registry-content.d.ts +2 -0
- package/dist/home/registry-content.js +17 -0
- package/dist/home/registry-content.js.map +1 -0
- package/dist/home/reset-detection.d.ts +5 -0
- package/dist/home/reset-detection.js +22 -0
- package/dist/home/reset-detection.js.map +1 -0
- package/dist/home/resolve.d.ts +10 -0
- package/dist/home/resolve.js +28 -0
- package/dist/home/resolve.js.map +1 -0
- package/dist/home/store.d.ts +48 -0
- package/dist/home/store.js +324 -0
- package/dist/home/store.js.map +1 -0
- package/dist/home/switch.d.ts +2 -0
- package/dist/home/switch.js +3 -0
- package/dist/home/switch.js.map +1 -0
- package/dist/home/version-log.d.ts +48 -0
- package/dist/home/version-log.js +216 -0
- package/dist/home/version-log.js.map +1 -0
- package/dist/home/write-lock.d.ts +6 -0
- package/dist/home/write-lock.js +96 -0
- package/dist/home/write-lock.js.map +1 -0
- package/dist/hsq.d.ts +2 -0
- package/dist/hsq.js +3 -0
- package/dist/hsq.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +123 -0
- package/dist/index.js.map +1 -0
- package/dist/install-as-command.d.ts +32 -0
- package/dist/install-as-command.js +55 -0
- package/dist/install-as-command.js.map +1 -0
- package/dist/jobs/cli.d.ts +2 -0
- package/dist/jobs/cli.js +53 -0
- package/dist/jobs/cli.js.map +1 -0
- package/dist/jobs/command.d.ts +9 -0
- package/dist/jobs/command.js +19 -0
- package/dist/jobs/command.js.map +1 -0
- package/dist/jobs/job.d.ts +77 -0
- package/dist/jobs/job.js +252 -0
- package/dist/jobs/job.js.map +1 -0
- package/dist/merge-observations.d.ts +13 -0
- package/dist/merge-observations.js +55 -0
- package/dist/merge-observations.js.map +1 -0
- package/dist/merged-streams.d.ts +13 -0
- package/dist/merged-streams.js +33 -0
- package/dist/merged-streams.js.map +1 -0
- package/dist/open-url.d.ts +2 -0
- package/dist/open-url.js +10 -0
- package/dist/open-url.js.map +1 -0
- package/dist/pack-check.d.ts +17 -0
- package/dist/pack-check.js +27 -0
- package/dist/pack-check.js.map +1 -0
- package/dist/paths.d.ts +118 -0
- package/dist/paths.js +192 -0
- package/dist/paths.js.map +1 -0
- package/dist/planner.d.ts +30 -0
- package/dist/planner.js +270 -0
- package/dist/planner.js.map +1 -0
- package/dist/preview/agent-address.d.ts +34 -0
- package/dist/preview/agent-address.js +52 -0
- package/dist/preview/agent-address.js.map +1 -0
- package/dist/preview/agent-marker.d.ts +17 -0
- package/dist/preview/agent-marker.js +71 -0
- package/dist/preview/agent-marker.js.map +1 -0
- package/dist/preview/browser-launch.d.ts +28 -0
- package/dist/preview/browser-launch.js +64 -0
- package/dist/preview/browser-launch.js.map +1 -0
- package/dist/preview/cdp-proxy.d.ts +54 -0
- package/dist/preview/cdp-proxy.js +152 -0
- package/dist/preview/cdp-proxy.js.map +1 -0
- package/dist/preview/cdp.d.ts +49 -0
- package/dist/preview/cdp.js +167 -0
- package/dist/preview/cdp.js.map +1 -0
- package/dist/preview/chromium-launch-progress.d.ts +10 -0
- package/dist/preview/chromium-launch-progress.js +48 -0
- package/dist/preview/chromium-launch-progress.js.map +1 -0
- package/dist/preview/chromium.d.ts +91 -0
- package/dist/preview/chromium.js +500 -0
- package/dist/preview/chromium.js.map +1 -0
- package/dist/preview/density.d.ts +17 -0
- package/dist/preview/density.js +62 -0
- package/dist/preview/density.js.map +1 -0
- package/dist/preview/dev-server.d.ts +68 -0
- package/dist/preview/dev-server.js +318 -0
- package/dist/preview/dev-server.js.map +1 -0
- package/dist/preview/host.d.ts +215 -0
- package/dist/preview/host.js +954 -0
- package/dist/preview/host.js.map +1 -0
- package/dist/preview/registration.d.ts +68 -0
- package/dist/preview/registration.js +111 -0
- package/dist/preview/registration.js.map +1 -0
- package/dist/preview/run-tools.d.ts +9 -0
- package/dist/preview/run-tools.js +72 -0
- package/dist/preview/run-tools.js.map +1 -0
- package/dist/preview/session.d.ts +139 -0
- package/dist/preview/session.js +479 -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/process-wait/exit-file.d.ts +29 -0
- package/dist/process-wait/exit-file.js +67 -0
- package/dist/process-wait/exit-file.js.map +1 -0
- package/dist/process-wait/supervisor.d.ts +30 -0
- package/dist/process-wait/supervisor.js +71 -0
- package/dist/process-wait/supervisor.js.map +1 -0
- package/dist/project-commands.d.ts +14 -0
- package/dist/project-commands.js +91 -0
- package/dist/project-commands.js.map +1 -0
- package/dist/project-migration/answer.d.ts +23 -0
- package/dist/project-migration/answer.js +37 -0
- package/dist/project-migration/answer.js.map +1 -0
- package/dist/project-migration/auto.d.ts +73 -0
- package/dist/project-migration/auto.js +161 -0
- package/dist/project-migration/auto.js.map +1 -0
- package/dist/project-migration/cli.d.ts +18 -0
- package/dist/project-migration/cli.js +57 -0
- package/dist/project-migration/cli.js.map +1 -0
- package/dist/project-migration/containment.d.ts +52 -0
- package/dist/project-migration/containment.js +200 -0
- package/dist/project-migration/containment.js.map +1 -0
- package/dist/project-migration/durable.d.ts +25 -0
- package/dist/project-migration/durable.js +69 -0
- package/dist/project-migration/durable.js.map +1 -0
- package/dist/project-migration/engine.d.ts +47 -0
- package/dist/project-migration/engine.js +103 -0
- package/dist/project-migration/engine.js.map +1 -0
- package/dist/project-migration/fresh.d.ts +4 -0
- package/dist/project-migration/fresh.js +25 -0
- package/dist/project-migration/fresh.js.map +1 -0
- package/dist/project-migration/journal.d.ts +139 -0
- package/dist/project-migration/journal.js +69 -0
- package/dist/project-migration/journal.js.map +1 -0
- package/dist/project-migration/live.d.ts +48 -0
- package/dist/project-migration/live.js +148 -0
- package/dist/project-migration/live.js.map +1 -0
- package/dist/project-migration/offline.d.ts +25 -0
- package/dist/project-migration/offline.js +54 -0
- package/dist/project-migration/offline.js.map +1 -0
- package/dist/project-migration/plan.d.ts +91 -0
- package/dist/project-migration/plan.js +466 -0
- package/dist/project-migration/plan.js.map +1 -0
- package/dist/project-migration/recovery.d.ts +28 -0
- package/dist/project-migration/recovery.js +78 -0
- package/dist/project-migration/recovery.js.map +1 -0
- package/dist/project-migration/steps.d.ts +18 -0
- package/dist/project-migration/steps.js +312 -0
- package/dist/project-migration/steps.js.map +1 -0
- package/dist/project-paths.d.ts +61 -0
- package/dist/project-paths.js +185 -0
- package/dist/project-paths.js.map +1 -0
- package/dist/release/compatibility.d.ts +12 -0
- package/dist/release/compatibility.js +62 -0
- package/dist/release/compatibility.js.map +1 -0
- package/dist/release/manifests.d.ts +112 -0
- package/dist/release/manifests.js +104 -0
- package/dist/release/manifests.js.map +1 -0
- package/dist/release/publication.d.ts +3 -0
- package/dist/release/publication.js +34 -0
- package/dist/release/publication.js.map +1 -0
- package/dist/release/snapshot.d.ts +67 -0
- package/dist/release/snapshot.js +97 -0
- package/dist/release/snapshot.js.map +1 -0
- package/dist/release/stable.d.ts +38 -0
- package/dist/release/stable.js +55 -0
- package/dist/release/stable.js.map +1 -0
- package/dist/remote-settings-cli.d.ts +24 -0
- package/dist/remote-settings-cli.js +156 -0
- package/dist/remote-settings-cli.js.map +1 -0
- package/dist/remote-settings.d.ts +41 -0
- package/dist/remote-settings.js +110 -0
- package/dist/remote-settings.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 +119 -0
- package/dist/runs/agent-tmpdir.js +855 -0
- package/dist/runs/agent-tmpdir.js.map +1 -0
- package/dist/runs/archive-family.d.ts +33 -0
- package/dist/runs/archive-family.js +90 -0
- package/dist/runs/archive-family.js.map +1 -0
- package/dist/runs/arm-repo-handle.d.ts +10 -0
- package/dist/runs/arm-repo-handle.js +45 -0
- package/dist/runs/arm-repo-handle.js.map +1 -0
- package/dist/runs/auto-name.d.ts +77 -0
- package/dist/runs/auto-name.js +179 -0
- package/dist/runs/auto-name.js.map +1 -0
- package/dist/runs/claim-families.d.ts +37 -0
- package/dist/runs/claim-families.js +101 -0
- package/dist/runs/claim-families.js.map +1 -0
- package/dist/runs/client-request.d.ts +11 -0
- package/dist/runs/client-request.js +26 -0
- package/dist/runs/client-request.js.map +1 -0
- package/dist/runs/cold-reads.d.ts +40 -0
- package/dist/runs/cold-reads.js +56 -0
- package/dist/runs/cold-reads.js.map +1 -0
- package/dist/runs/conversation-identity.d.ts +19 -0
- package/dist/runs/conversation-identity.js +31 -0
- package/dist/runs/conversation-identity.js.map +1 -0
- package/dist/runs/delegation-state.d.ts +409 -0
- package/dist/runs/delegation-state.js +22 -0
- package/dist/runs/delegation-state.js.map +1 -0
- package/dist/runs/event-history-agent-context.d.ts +15 -0
- package/dist/runs/event-history-agent-context.js +119 -0
- package/dist/runs/event-history-agent-context.js.map +1 -0
- package/dist/runs/event-history-context.d.ts +15 -0
- package/dist/runs/event-history-context.js +109 -0
- package/dist/runs/event-history-context.js.map +1 -0
- package/dist/runs/event-history.d.ts +53 -0
- package/dist/runs/event-history.js +563 -0
- package/dist/runs/event-history.js.map +1 -0
- package/dist/runs/exit-events.d.ts +27 -0
- package/dist/runs/exit-events.js +46 -0
- package/dist/runs/exit-events.js.map +1 -0
- 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 +464 -0
- package/dist/runs/history-file.js.map +1 -0
- package/dist/runs/history-stream.d.ts +2 -0
- package/dist/runs/history-stream.js +62 -0
- package/dist/runs/history-stream.js.map +1 -0
- package/dist/runs/legacy-index.d.ts +49 -0
- package/dist/runs/legacy-index.js +156 -0
- package/dist/runs/legacy-index.js.map +1 -0
- package/dist/runs/legacy-run-rows.d.ts +12 -0
- package/dist/runs/legacy-run-rows.js +33 -0
- package/dist/runs/legacy-run-rows.js.map +1 -0
- package/dist/runs/legacy-waits.d.ts +64 -0
- package/dist/runs/legacy-waits.js +335 -0
- package/dist/runs/legacy-waits.js.map +1 -0
- package/dist/runs/live-item-snapshots.d.ts +15 -0
- package/dist/runs/live-item-snapshots.js +95 -0
- package/dist/runs/live-item-snapshots.js.map +1 -0
- package/dist/runs/loaded-run-exits.d.ts +6 -0
- package/dist/runs/loaded-run-exits.js +32 -0
- package/dist/runs/loaded-run-exits.js.map +1 -0
- package/dist/runs/loaded-run-healing.d.ts +3 -0
- package/dist/runs/loaded-run-healing.js +17 -0
- package/dist/runs/loaded-run-healing.js.map +1 -0
- package/dist/runs/outcome-commit.d.ts +119 -0
- package/dist/runs/outcome-commit.js +155 -0
- package/dist/runs/outcome-commit.js.map +1 -0
- package/dist/runs/owned-run-create.d.ts +33 -0
- package/dist/runs/owned-run-create.js +98 -0
- package/dist/runs/owned-run-create.js.map +1 -0
- package/dist/runs/project-run-connection.d.ts +76 -0
- package/dist/runs/project-run-connection.js +287 -0
- package/dist/runs/project-run-connection.js.map +1 -0
- package/dist/runs/project-run-sources.d.ts +21 -0
- package/dist/runs/project-run-sources.js +86 -0
- package/dist/runs/project-run-sources.js.map +1 -0
- package/dist/runs/pull-requests.d.ts +14 -0
- package/dist/runs/pull-requests.js +96 -0
- package/dist/runs/pull-requests.js.map +1 -0
- package/dist/runs/raw-record.d.ts +40 -0
- package/dist/runs/raw-record.js +133 -0
- package/dist/runs/raw-record.js.map +1 -0
- package/dist/runs/record-write-rules.d.ts +129 -0
- package/dist/runs/record-write-rules.js +326 -0
- package/dist/runs/record-write-rules.js.map +1 -0
- package/dist/runs/report-rows.d.ts +36 -0
- package/dist/runs/report-rows.js +102 -0
- package/dist/runs/report-rows.js.map +1 -0
- package/dist/runs/retention.d.ts +91 -0
- package/dist/runs/retention.js +193 -0
- package/dist/runs/retention.js.map +1 -0
- package/dist/runs/review-gate.d.ts +18 -0
- package/dist/runs/review-gate.js +22 -0
- package/dist/runs/review-gate.js.map +1 -0
- package/dist/runs/run-claims.d.ts +30 -0
- package/dist/runs/run-claims.js +52 -0
- package/dist/runs/run-claims.js.map +1 -0
- package/dist/runs/run-database-peer-page.d.ts +12 -0
- package/dist/runs/run-database-peer-page.js +25 -0
- package/dist/runs/run-database-peer-page.js.map +1 -0
- package/dist/runs/run-database-row.d.ts +39 -0
- package/dist/runs/run-database-row.js +83 -0
- package/dist/runs/run-database-row.js.map +1 -0
- package/dist/runs/run-database-version.d.ts +14 -0
- package/dist/runs/run-database-version.js +19 -0
- package/dist/runs/run-database-version.js.map +1 -0
- package/dist/runs/run-database.d.ts +389 -0
- package/dist/runs/run-database.js +957 -0
- package/dist/runs/run-database.js.map +1 -0
- package/dist/runs/run-exits.d.ts +4510 -0
- package/dist/runs/run-exits.js +191 -0
- package/dist/runs/run-exits.js.map +1 -0
- package/dist/runs/run-index.d.ts +36 -0
- package/dist/runs/run-index.js +262 -0
- package/dist/runs/run-index.js.map +1 -0
- package/dist/runs/run-references.d.ts +61 -0
- package/dist/runs/run-references.js +421 -0
- package/dist/runs/run-references.js.map +1 -0
- package/dist/runs/run-row.d.ts +14 -0
- package/dist/runs/run-row.js +56 -0
- package/dist/runs/run-row.js.map +1 -0
- package/dist/runs/run-summary-page.d.ts +36 -0
- package/dist/runs/run-summary-page.js +46 -0
- package/dist/runs/run-summary-page.js.map +1 -0
- package/dist/runs/run-title.d.ts +8 -0
- package/dist/runs/run-title.js +28 -0
- package/dist/runs/run-title.js.map +1 -0
- package/dist/runs/store-open-error.d.ts +24 -0
- package/dist/runs/store-open-error.js +62 -0
- package/dist/runs/store-open-error.js.map +1 -0
- package/dist/runs/store.d.ts +3974 -0
- package/dist/runs/store.js +3516 -0
- package/dist/runs/store.js.map +1 -0
- package/dist/runs/task-markers.d.ts +29 -0
- package/dist/runs/task-markers.js +78 -0
- package/dist/runs/task-markers.js.map +1 -0
- package/dist/runs/task-refs.d.ts +39 -0
- package/dist/runs/task-refs.js +107 -0
- package/dist/runs/task-refs.js.map +1 -0
- package/dist/runs/transcript-facts-fold.d.ts +64 -0
- package/dist/runs/transcript-facts-fold.js +109 -0
- package/dist/runs/transcript-facts-fold.js.map +1 -0
- package/dist/runs/transcript-facts-load.d.ts +11 -0
- package/dist/runs/transcript-facts-load.js +66 -0
- package/dist/runs/transcript-facts-load.js.map +1 -0
- package/dist/runs/transcript-facts-queue.d.ts +30 -0
- package/dist/runs/transcript-facts-queue.js +227 -0
- package/dist/runs/transcript-facts-queue.js.map +1 -0
- package/dist/runs/transcript-facts-worker.d.ts +15 -0
- package/dist/runs/transcript-facts-worker.js +26 -0
- package/dist/runs/transcript-facts-worker.js.map +1 -0
- package/dist/runs/transcript-facts.d.ts +40 -0
- package/dist/runs/transcript-facts.js +193 -0
- package/dist/runs/transcript-facts.js.map +1 -0
- package/dist/runs/ui-event-sink.d.ts +59 -0
- package/dist/runs/ui-event-sink.js +197 -0
- package/dist/runs/ui-event-sink.js.map +1 -0
- package/dist/runs/wait-capacity.d.ts +8 -0
- package/dist/runs/wait-capacity.js +28 -0
- package/dist/runs/wait-capacity.js.map +1 -0
- package/dist/runs/wait-phases.d.ts +4 -0
- package/dist/runs/wait-phases.js +11 -0
- package/dist/runs/wait-phases.js.map +1 -0
- package/dist/runs/wait-registration-write.d.ts +5 -0
- package/dist/runs/wait-registration-write.js +35 -0
- package/dist/runs/wait-registration-write.js.map +1 -0
- package/dist/runs/webhook.d.ts +193 -0
- package/dist/runs/webhook.js +362 -0
- package/dist/runs/webhook.js.map +1 -0
- package/dist/runs/worker-deletion-proof.d.ts +13 -0
- package/dist/runs/worker-deletion-proof.js +13 -0
- package/dist/runs/worker-deletion-proof.js.map +1 -0
- 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/runs/worker-resource-holders.d.ts +17 -0
- package/dist/runs/worker-resource-holders.js +34 -0
- package/dist/runs/worker-resource-holders.js.map +1 -0
- package/dist/runs/worker-result-commit.d.ts +26 -0
- package/dist/runs/worker-result-commit.js +121 -0
- package/dist/runs/worker-result-commit.js.map +1 -0
- package/dist/self-update/checkouts.d.ts +46 -0
- package/dist/self-update/checkouts.js +284 -0
- package/dist/self-update/checkouts.js.map +1 -0
- package/dist/self-update/cli.d.ts +19 -0
- package/dist/self-update/cli.js +243 -0
- package/dist/self-update/cli.js.map +1 -0
- package/dist/self-update/installer.d.ts +24 -0
- package/dist/self-update/installer.js +139 -0
- package/dist/self-update/installer.js.map +1 -0
- package/dist/self-update/launcher.d.ts +30 -0
- package/dist/self-update/launcher.js +172 -0
- package/dist/self-update/launcher.js.map +1 -0
- package/dist/self-update/layout.d.ts +108 -0
- package/dist/self-update/layout.js +276 -0
- package/dist/self-update/layout.js.map +1 -0
- package/dist/self-update/pulls.d.ts +30 -0
- package/dist/self-update/pulls.js +128 -0
- package/dist/self-update/pulls.js.map +1 -0
- package/dist/self-update/registry.d.ts +37 -0
- package/dist/self-update/registry.js +86 -0
- package/dist/self-update/registry.js.map +1 -0
- package/dist/self-update/restart.d.ts +25 -0
- package/dist/self-update/restart.js +79 -0
- package/dist/self-update/restart.js.map +1 -0
- package/dist/self-update/semver.d.ts +19 -0
- package/dist/self-update/semver.js +79 -0
- package/dist/self-update/semver.js.map +1 -0
- package/dist/self-update/service.d.ts +115 -0
- package/dist/self-update/service.js +332 -0
- package/dist/self-update/service.js.map +1 -0
- package/dist/self-update/supervisor.d.ts +10 -0
- package/dist/self-update/supervisor.js +52 -0
- package/dist/self-update/supervisor.js.map +1 -0
- package/dist/serve-boot.d.ts +60 -0
- package/dist/serve-boot.js +142 -0
- package/dist/serve-boot.js.map +1 -0
- package/dist/serve-command.d.ts +71 -0
- package/dist/serve-command.js +168 -0
- package/dist/serve-command.js.map +1 -0
- package/dist/serve-listener.d.ts +12 -0
- package/dist/serve-listener.js +52 -0
- package/dist/serve-listener.js.map +1 -0
- package/dist/server/activity-project-topic.d.ts +44 -0
- package/dist/server/activity-project-topic.js +137 -0
- package/dist/server/activity-project-topic.js.map +1 -0
- package/dist/server/activity-routes.d.ts +317 -0
- package/dist/server/activity-routes.js +117 -0
- package/dist/server/activity-routes.js.map +1 -0
- package/dist/server/activity-sources.d.ts +26 -0
- package/dist/server/activity-sources.js +45 -0
- package/dist/server/activity-sources.js.map +1 -0
- package/dist/server/activity-topic.d.ts +33 -0
- package/dist/server/activity-topic.js +48 -0
- package/dist/server/activity-topic.js.map +1 -0
- package/dist/server/app-type.d.ts +6 -0
- package/dist/server/app-type.js +2 -0
- package/dist/server/app-type.js.map +1 -0
- package/dist/server/archive-on-merge.d.ts +45 -0
- package/dist/server/archive-on-merge.js +242 -0
- package/dist/server/archive-on-merge.js.map +1 -0
- package/dist/server/automation-log-retry.d.ts +27 -0
- package/dist/server/automation-log-retry.js +88 -0
- package/dist/server/automation-log-retry.js.map +1 -0
- package/dist/server/capabilities.d.ts +69 -0
- package/dist/server/capabilities.js +111 -0
- package/dist/server/capabilities.js.map +1 -0
- package/dist/server/checkout-progress.d.ts +10 -0
- package/dist/server/checkout-progress.js +27 -0
- package/dist/server/checkout-progress.js.map +1 -0
- package/dist/server/checkout.d.ts +153 -0
- package/dist/server/checkout.js +323 -0
- package/dist/server/checkout.js.map +1 -0
- package/dist/server/cockpit-ownership.d.ts +112 -0
- package/dist/server/cockpit-ownership.js +420 -0
- package/dist/server/cockpit-ownership.js.map +1 -0
- package/dist/server/cold-repo-handles.d.ts +17 -0
- package/dist/server/cold-repo-handles.js +82 -0
- package/dist/server/cold-repo-handles.js.map +1 -0
- package/dist/server/completion-actions.d.ts +37 -0
- package/dist/server/completion-actions.js +261 -0
- package/dist/server/completion-actions.js.map +1 -0
- package/dist/server/config-merge.d.ts +11 -0
- package/dist/server/config-merge.js +74 -0
- package/dist/server/config-merge.js.map +1 -0
- package/dist/server/create-project.d.ts +71 -0
- package/dist/server/create-project.js +467 -0
- package/dist/server/create-project.js.map +1 -0
- package/dist/server/forge/draft-pr.d.ts +8 -0
- package/dist/server/forge/draft-pr.js +123 -0
- package/dist/server/forge/draft-pr.js.map +1 -0
- package/dist/server/forge/github-filters.d.ts +22 -0
- package/dist/server/forge/github-filters.js +128 -0
- package/dist/server/forge/github-filters.js.map +1 -0
- package/dist/server/forge/github-merge-requirements.d.ts +18 -0
- package/dist/server/forge/github-merge-requirements.js +148 -0
- package/dist/server/forge/github-merge-requirements.js.map +1 -0
- package/dist/server/forge/github-merge-state.d.ts +27 -0
- package/dist/server/forge/github-merge-state.js +248 -0
- package/dist/server/forge/github-merge-state.js.map +1 -0
- package/dist/server/forge/github-timeline.d.ts +117 -0
- package/dist/server/forge/github-timeline.js +273 -0
- package/dist/server/forge/github-timeline.js.map +1 -0
- package/dist/server/forge/github.d.ts +393 -0
- package/dist/server/forge/github.js +2881 -0
- package/dist/server/forge/github.js.map +1 -0
- package/dist/server/forge/index.d.ts +47 -0
- package/dist/server/forge/index.js +81 -0
- package/dist/server/forge/index.js.map +1 -0
- package/dist/server/forge/repo-handle-discovery.d.ts +16 -0
- package/dist/server/forge/repo-handle-discovery.js +2 -0
- package/dist/server/forge/repo-handle-discovery.js.map +1 -0
- package/dist/server/forge/types.d.ts +278 -0
- package/dist/server/forge/types.js +2 -0
- package/dist/server/forge/types.js.map +1 -0
- package/dist/server/fs-browse.d.ts +82 -0
- package/dist/server/fs-browse.js +217 -0
- package/dist/server/fs-browse.js.map +1 -0
- package/dist/server/git-changes.d.ts +205 -0
- package/dist/server/git-changes.js +531 -0
- package/dist/server/git-changes.js.map +1 -0
- package/dist/server/git.d.ts +52 -0
- package/dist/server/git.js +174 -0
- package/dist/server/git.js.map +1 -0
- package/dist/server/home-recovery-routes.d.ts +171 -0
- package/dist/server/home-recovery-routes.js +56 -0
- package/dist/server/home-recovery-routes.js.map +1 -0
- package/dist/server/launch-key.d.ts +5 -0
- package/dist/server/launch-key.js +35 -0
- package/dist/server/launch-key.js.map +1 -0
- package/dist/server/live-routes.d.ts +73 -0
- package/dist/server/live-routes.js +161 -0
- package/dist/server/live-routes.js.map +1 -0
- package/dist/server/open-in-app.d.ts +57 -0
- package/dist/server/open-in-app.js +178 -0
- package/dist/server/open-in-app.js.map +1 -0
- package/dist/server/open-in-targets.d.ts +53 -0
- package/dist/server/open-in-targets.js +112 -0
- package/dist/server/open-in-targets.js.map +1 -0
- package/dist/server/open-in-terminal.d.ts +73 -0
- package/dist/server/open-in-terminal.js +160 -0
- package/dist/server/open-in-terminal.js.map +1 -0
- package/dist/server/preview-cdp-socket.d.ts +21 -0
- package/dist/server/preview-cdp-socket.js +112 -0
- package/dist/server/preview-cdp-socket.js.map +1 -0
- package/dist/server/preview-socket.d.ts +36 -0
- package/dist/server/preview-socket.js +142 -0
- package/dist/server/preview-socket.js.map +1 -0
- package/dist/server/preview-sockets.d.ts +14 -0
- package/dist/server/preview-sockets.js +18 -0
- package/dist/server/preview-sockets.js.map +1 -0
- package/dist/server/project-context.d.ts +218 -0
- package/dist/server/project-context.js +525 -0
- package/dist/server/project-context.js.map +1 -0
- package/dist/server/project-run-files.d.ts +13 -0
- package/dist/server/project-run-files.js +52 -0
- package/dist/server/project-run-files.js.map +1 -0
- package/dist/server/provider-action-gate.d.ts +5 -0
- package/dist/server/provider-action-gate.js +28 -0
- package/dist/server/provider-action-gate.js.map +1 -0
- package/dist/server/provider-auth-runtime.d.ts +34 -0
- package/dist/server/provider-auth-runtime.js +118 -0
- package/dist/server/provider-auth-runtime.js.map +1 -0
- package/dist/server/repo-branch-forge.d.ts +61 -0
- package/dist/server/repo-branch-forge.js +158 -0
- package/dist/server/repo-branch-forge.js.map +1 -0
- package/dist/server/repo-branch-sweep.d.ts +21 -0
- package/dist/server/repo-branch-sweep.js +64 -0
- package/dist/server/repo-branch-sweep.js.map +1 -0
- package/dist/server/repo-branches.d.ts +103 -0
- package/dist/server/repo-branches.js +804 -0
- package/dist/server/repo-branches.js.map +1 -0
- package/dist/server/repo-pull.d.ts +18 -0
- package/dist/server/repo-pull.js +97 -0
- package/dist/server/repo-pull.js.map +1 -0
- package/dist/server/reports-api.d.ts +90 -0
- package/dist/server/reports-api.js +21 -0
- package/dist/server/reports-api.js.map +1 -0
- package/dist/server/reports-topic.d.ts +5 -0
- package/dist/server/reports-topic.js +37 -0
- package/dist/server/reports-topic.js.map +1 -0
- package/dist/server/run-checkout.d.ts +56 -0
- package/dist/server/run-checkout.js +141 -0
- package/dist/server/run-checkout.js.map +1 -0
- package/dist/server/run-event-feed.d.ts +20 -0
- package/dist/server/run-event-feed.js +203 -0
- package/dist/server/run-event-feed.js.map +1 -0
- package/dist/server/self-update-routes.d.ts +308 -0
- package/dist/server/self-update-routes.js +80 -0
- package/dist/server/self-update-routes.js.map +1 -0
- package/dist/server/server-deps.d.ts +40 -0
- package/dist/server/server-deps.js +132 -0
- package/dist/server/server-deps.js.map +1 -0
- package/dist/server/server.d.ts +35332 -0
- package/dist/server/server.js +5046 -0
- package/dist/server/server.js.map +1 -0
- package/dist/server/skill-sources.d.ts +264 -0
- package/dist/server/skill-sources.js +130 -0
- package/dist/server/skill-sources.js.map +1 -0
- package/dist/server/start-run-options.d.ts +84 -0
- package/dist/server/start-run-options.js +114 -0
- package/dist/server/start-run-options.js.map +1 -0
- package/dist/server/static-ui.d.ts +49 -0
- package/dist/server/static-ui.js +99 -0
- package/dist/server/static-ui.js.map +1 -0
- 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 +80 -0
- package/dist/server/validators.js +85 -0
- package/dist/server/validators.js.map +1 -0
- package/dist/server/workflow-files.d.ts +9 -0
- package/dist/server/workflow-files.js +27 -0
- package/dist/server/workflow-files.js.map +1 -0
- package/dist/server/workspace-config-patch.d.ts +11 -0
- package/dist/server/workspace-config-patch.js +75 -0
- package/dist/server/workspace-config-patch.js.map +1 -0
- package/dist/server/workspace-live-routes.d.ts +222 -0
- package/dist/server/workspace-live-routes.js +8 -0
- package/dist/server/workspace-live-routes.js.map +1 -0
- package/dist/server/workspace-projects.d.ts +51 -0
- package/dist/server/workspace-projects.js +161 -0
- package/dist/server/workspace-projects.js.map +1 -0
- package/dist/server/workspace-run-feed.d.ts +66 -0
- package/dist/server/workspace-run-feed.js +171 -0
- package/dist/server/workspace-run-feed.js.map +1 -0
- package/dist/server/ws.d.ts +80 -0
- package/dist/server/ws.js +280 -0
- package/dist/server/ws.js.map +1 -0
- package/dist/server/wsl.d.ts +25 -0
- package/dist/server/wsl.js +92 -0
- package/dist/server/wsl.js.map +1 -0
- package/dist/server-command.d.ts +53 -0
- package/dist/server-command.js +180 -0
- package/dist/server-command.js.map +1 -0
- package/dist/server-install/engine.d.ts +51 -0
- package/dist/server-install/engine.js +358 -0
- package/dist/server-install/engine.js.map +1 -0
- package/dist/server-install/group-migrate.d.ts +26 -0
- package/dist/server-install/group-migrate.js +241 -0
- package/dist/server-install/group-migrate.js.map +1 -0
- package/dist/server-install/migrate-cli.d.ts +12 -0
- package/dist/server-install/migrate-cli.js +44 -0
- package/dist/server-install/migrate-cli.js.map +1 -0
- package/dist/server-install/migrate-journal.d.ts +15 -0
- package/dist/server-install/migrate-journal.js +48 -0
- package/dist/server-install/migrate-journal.js.map +1 -0
- package/dist/server-install/migration-report.d.ts +3 -0
- package/dist/server-install/migration-report.js +21 -0
- package/dist/server-install/migration-report.js.map +1 -0
- package/dist/server-install/npx-cache.d.ts +34 -0
- package/dist/server-install/npx-cache.js +142 -0
- package/dist/server-install/npx-cache.js.map +1 -0
- package/dist/server-install/platforms/macosx-launchd-files.d.ts +11 -0
- package/dist/server-install/platforms/macosx-launchd-files.js +60 -0
- package/dist/server-install/platforms/macosx-launchd-files.js.map +1 -0
- package/dist/server-install/platforms/macosx-migration.d.ts +17 -0
- package/dist/server-install/platforms/macosx-migration.js +239 -0
- package/dist/server-install/platforms/macosx-migration.js.map +1 -0
- package/dist/server-install/platforms/macosx-ngrok.d.ts +12 -0
- package/dist/server-install/platforms/macosx-ngrok.js +490 -0
- package/dist/server-install/platforms/macosx-ngrok.js.map +1 -0
- package/dist/server-install/platforms/service-env.d.ts +4 -0
- package/dist/server-install/platforms/service-env.js +17 -0
- package/dist/server-install/platforms/service-env.js.map +1 -0
- package/dist/server-install/platforms/ubuntu-vps-files.d.ts +18 -0
- package/dist/server-install/platforms/ubuntu-vps-files.js +43 -0
- package/dist/server-install/platforms/ubuntu-vps-files.js.map +1 -0
- package/dist/server-install/platforms/ubuntu-vps-migration.d.ts +26 -0
- package/dist/server-install/platforms/ubuntu-vps-migration.js +391 -0
- package/dist/server-install/platforms/ubuntu-vps-migration.js.map +1 -0
- package/dist/server-install/platforms/ubuntu-vps-names.d.ts +30 -0
- package/dist/server-install/platforms/ubuntu-vps-names.js +50 -0
- package/dist/server-install/platforms/ubuntu-vps-names.js.map +1 -0
- package/dist/server-install/platforms/ubuntu-vps-redeploy.d.ts +42 -0
- package/dist/server-install/platforms/ubuntu-vps-redeploy.js +127 -0
- package/dist/server-install/platforms/ubuntu-vps-redeploy.js.map +1 -0
- package/dist/server-install/platforms/ubuntu-vps.d.ts +57 -0
- package/dist/server-install/platforms/ubuntu-vps.js +945 -0
- package/dist/server-install/platforms/ubuntu-vps.js.map +1 -0
- package/dist/server-install/state.d.ts +51 -0
- package/dist/server-install/state.js +178 -0
- package/dist/server-install/state.js.map +1 -0
- package/dist/server-install/steps.d.ts +108 -0
- package/dist/server-install/steps.js +348 -0
- package/dist/server-install/steps.js.map +1 -0
- package/dist/server-install/strategies.d.ts +6 -0
- package/dist/server-install/strategies.js +24 -0
- package/dist/server-install/strategies.js.map +1 -0
- package/dist/server-install/types.d.ts +316 -0
- package/dist/server-install/types.js +118 -0
- package/dist/server-install/types.js.map +1 -0
- package/dist/server-install/ui.d.ts +36 -0
- package/dist/server-install/ui.js +131 -0
- package/dist/server-install/ui.js.map +1 -0
- package/dist/session-context.d.ts +66 -0
- package/dist/session-context.js +266 -0
- package/dist/session-context.js.map +1 -0
- package/dist/skills-provision.d.ts +64 -0
- package/dist/skills-provision.js +325 -0
- package/dist/skills-provision.js.map +1 -0
- package/dist/skills-remote.d.ts +144 -0
- package/dist/skills-remote.js +847 -0
- package/dist/skills-remote.js.map +1 -0
- package/dist/skills.d.ts +81 -0
- package/dist/skills.js +288 -0
- package/dist/skills.js.map +1 -0
- package/dist/subcommands.d.ts +12 -0
- package/dist/subcommands.js +59 -0
- package/dist/subcommands.js.map +1 -0
- package/dist/task-cli/cli.d.ts +39 -0
- package/dist/task-cli/cli.js +773 -0
- package/dist/task-cli/cli.js.map +1 -0
- package/dist/task-cli/discovery.d.ts +32 -0
- package/dist/task-cli/discovery.js +133 -0
- package/dist/task-cli/discovery.js.map +1 -0
- package/dist/task-cli/hint.d.ts +20 -0
- package/dist/task-cli/hint.js +15 -0
- package/dist/task-cli/hint.js.map +1 -0
- package/dist/task-cli/http.d.ts +42 -0
- package/dist/task-cli/http.js +110 -0
- package/dist/task-cli/http.js.map +1 -0
- package/dist/task-cli/projections.d.ts +68 -0
- package/dist/task-cli/projections.js +76 -0
- package/dist/task-cli/projections.js.map +1 -0
- package/dist/task-cli/watch.d.ts +119 -0
- package/dist/task-cli/watch.js +494 -0
- package/dist/task-cli/watch.js.map +1 -0
- package/dist/ui-state.d.ts +41 -0
- package/dist/ui-state.js +93 -0
- package/dist/ui-state.js.map +1 -0
- package/dist/update-check.d.ts +2 -0
- package/dist/update-check.js +28 -0
- package/dist/update-check.js.map +1 -0
- package/dist/use-command-notice.d.ts +1 -0
- package/dist/use-command-notice.js +6 -0
- package/dist/use-command-notice.js.map +1 -0
- package/dist/voice/decide.d.ts +35 -0
- package/dist/voice/decide.js +329 -0
- package/dist/voice/decide.js.map +1 -0
- package/dist/voice/decision-log.d.ts +48 -0
- package/dist/voice/decision-log.js +117 -0
- package/dist/voice/decision-log.js.map +1 -0
- package/dist/voice/engine.d.ts +119 -0
- package/dist/voice/engine.js +61 -0
- package/dist/voice/engine.js.map +1 -0
- package/dist/voice/fake-engine.d.ts +10 -0
- package/dist/voice/fake-engine.js +192 -0
- package/dist/voice/fake-engine.js.map +1 -0
- package/dist/voice/jev-engine.d.ts +17 -0
- package/dist/voice/jev-engine.js +110 -0
- package/dist/voice/jev-engine.js.map +1 -0
- package/dist/voice/pending-ask.d.ts +17 -0
- package/dist/voice/pending-ask.js +51 -0
- package/dist/voice/pending-ask.js.map +1 -0
- package/dist/voice/routes.d.ts +115 -0
- package/dist/voice/routes.js +92 -0
- package/dist/voice/routes.js.map +1 -0
- package/dist/voice/sentence.d.ts +21 -0
- package/dist/voice/sentence.js +61 -0
- package/dist/voice/sentence.js.map +1 -0
- package/dist/voice/thresholds.d.ts +28 -0
- package/dist/voice/thresholds.js +29 -0
- package/dist/voice/thresholds.js.map +1 -0
- package/dist/webhooks/cli.d.ts +18 -0
- package/dist/webhooks/cli.js +127 -0
- package/dist/webhooks/cli.js.map +1 -0
- package/dist/webhooks/prompt.d.ts +5 -0
- package/dist/webhooks/prompt.js +26 -0
- package/dist/webhooks/prompt.js.map +1 -0
- package/dist/workflows/active-run.d.ts +46 -0
- package/dist/workflows/active-run.js +46 -0
- package/dist/workflows/active-run.js.map +1 -0
- package/dist/workflows/attachment-path.d.ts +6 -0
- package/dist/workflows/attachment-path.js +40 -0
- package/dist/workflows/attachment-path.js.map +1 -0
- package/dist/workflows/completion-policy.d.ts +98 -0
- package/dist/workflows/completion-policy.js +77 -0
- package/dist/workflows/completion-policy.js.map +1 -0
- package/dist/workflows/continuation-admission.d.ts +1229 -0
- package/dist/workflows/continuation-admission.js +277 -0
- package/dist/workflows/continuation-admission.js.map +1 -0
- package/dist/workflows/execution-account.d.ts +13 -0
- package/dist/workflows/execution-account.js +18 -0
- package/dist/workflows/execution-account.js.map +1 -0
- package/dist/workflows/grouped-command.d.ts +31 -0
- package/dist/workflows/grouped-command.js +147 -0
- package/dist/workflows/grouped-command.js.map +1 -0
- package/dist/workflows/input-acknowledgement.d.ts +233 -0
- package/dist/workflows/input-acknowledgement.js +41 -0
- package/dist/workflows/input-acknowledgement.js.map +1 -0
- package/dist/workflows/line-order.d.ts +5 -0
- package/dist/workflows/line-order.js +25 -0
- package/dist/workflows/line-order.js.map +1 -0
- package/dist/workflows/load.d.ts +19 -0
- package/dist/workflows/load.js +74 -0
- package/dist/workflows/load.js.map +1 -0
- package/dist/workflows/outcome-batches.d.ts +32 -0
- package/dist/workflows/outcome-batches.js +55 -0
- package/dist/workflows/outcome-batches.js.map +1 -0
- package/dist/workflows/pasted-content.d.ts +60 -0
- package/dist/workflows/pasted-content.js +69 -0
- package/dist/workflows/pasted-content.js.map +1 -0
- package/dist/workflows/question-routing.d.ts +16 -0
- package/dist/workflows/question-routing.js +28 -0
- package/dist/workflows/question-routing.js.map +1 -0
- package/dist/workflows/run/attachment-writer.d.ts +34 -0
- package/dist/workflows/run/attachment-writer.js +98 -0
- package/dist/workflows/run/attachment-writer.js.map +1 -0
- package/dist/workflows/run/auto-resume.d.ts +91 -0
- package/dist/workflows/run/auto-resume.js +247 -0
- package/dist/workflows/run/auto-resume.js.map +1 -0
- package/dist/workflows/run/cezar-tools.d.ts +45 -0
- package/dist/workflows/run/cezar-tools.js +117 -0
- package/dist/workflows/run/cezar-tools.js.map +1 -0
- package/dist/workflows/run/completion-gate.d.ts +77 -0
- package/dist/workflows/run/completion-gate.js +93 -0
- package/dist/workflows/run/completion-gate.js.map +1 -0
- package/dist/workflows/run/compose.d.ts +181 -0
- package/dist/workflows/run/compose.js +413 -0
- package/dist/workflows/run/compose.js.map +1 -0
- package/dist/workflows/run/constants.d.ts +48 -0
- package/dist/workflows/run/constants.js +49 -0
- package/dist/workflows/run/constants.js.map +1 -0
- package/dist/workflows/run/continuation-acceptance.d.ts +70 -0
- package/dist/workflows/run/continuation-acceptance.js +188 -0
- package/dist/workflows/run/continuation-acceptance.js.map +1 -0
- package/dist/workflows/run/continuation-session.d.ts +130 -0
- package/dist/workflows/run/continuation-session.js +597 -0
- package/dist/workflows/run/continuation-session.js.map +1 -0
- package/dist/workflows/run/drop-active.d.ts +4 -0
- package/dist/workflows/run/drop-active.js +11 -0
- package/dist/workflows/run/drop-active.js.map +1 -0
- package/dist/workflows/run/family-reconciler.d.ts +78 -0
- package/dist/workflows/run/family-reconciler.js +308 -0
- package/dist/workflows/run/family-reconciler.js.map +1 -0
- package/dist/workflows/run/human-waits.d.ts +85 -0
- package/dist/workflows/run/human-waits.js +163 -0
- package/dist/workflows/run/human-waits.js.map +1 -0
- package/dist/workflows/run/inbox-claims.d.ts +38 -0
- package/dist/workflows/run/inbox-claims.js +108 -0
- package/dist/workflows/run/inbox-claims.js.map +1 -0
- package/dist/workflows/run/input-batch.d.ts +15 -0
- package/dist/workflows/run/input-batch.js +32 -0
- package/dist/workflows/run/input-batch.js.map +1 -0
- package/dist/workflows/run/input-delivery.d.ts +202 -0
- package/dist/workflows/run/input-delivery.js +818 -0
- package/dist/workflows/run/input-delivery.js.map +1 -0
- package/dist/workflows/run/input-receipts.d.ts +65 -0
- package/dist/workflows/run/input-receipts.js +221 -0
- package/dist/workflows/run/input-receipts.js.map +1 -0
- package/dist/workflows/run/input-timers.d.ts +10 -0
- package/dist/workflows/run/input-timers.js +32 -0
- package/dist/workflows/run/input-timers.js.map +1 -0
- package/dist/workflows/run/launch-context.d.ts +62 -0
- package/dist/workflows/run/launch-context.js +119 -0
- package/dist/workflows/run/launch-context.js.map +1 -0
- package/dist/workflows/run/launch-read-resolver.d.ts +510 -0
- package/dist/workflows/run/launch-read-resolver.js +658 -0
- package/dist/workflows/run/launch-read-resolver.js.map +1 -0
- package/dist/workflows/run/launch-settings.d.ts +10 -0
- package/dist/workflows/run/launch-settings.js +11 -0
- package/dist/workflows/run/launch-settings.js.map +1 -0
- package/dist/workflows/run/live-session-state.d.ts +49 -0
- package/dist/workflows/run/live-session-state.js +83 -0
- package/dist/workflows/run/live-session-state.js.map +1 -0
- package/dist/workflows/run/maintenance-claims.d.ts +47 -0
- package/dist/workflows/run/maintenance-claims.js +83 -0
- package/dist/workflows/run/maintenance-claims.js.map +1 -0
- package/dist/workflows/run/memory-guard.d.ts +25 -0
- package/dist/workflows/run/memory-guard.js +64 -0
- package/dist/workflows/run/memory-guard.js.map +1 -0
- package/dist/workflows/run/opening.d.ts +30 -0
- package/dist/workflows/run/opening.js +6 -0
- package/dist/workflows/run/opening.js.map +1 -0
- package/dist/workflows/run/pending-ask-facts.d.ts +10 -0
- package/dist/workflows/run/pending-ask-facts.js +19 -0
- package/dist/workflows/run/pending-ask-facts.js.map +1 -0
- package/dist/workflows/run/prompts.d.ts +74 -0
- package/dist/workflows/run/prompts.js +140 -0
- package/dist/workflows/run/prompts.js.map +1 -0
- package/dist/workflows/run/queued-input.d.ts +108 -0
- package/dist/workflows/run/queued-input.js +249 -0
- package/dist/workflows/run/queued-input.js.map +1 -0
- package/dist/workflows/run/queued-revival.d.ts +44 -0
- package/dist/workflows/run/queued-revival.js +124 -0
- package/dist/workflows/run/queued-revival.js.map +1 -0
- package/dist/workflows/run/readonly-collections.d.ts +24 -0
- package/dist/workflows/run/readonly-collections.js +33 -0
- package/dist/workflows/run/readonly-collections.js.map +1 -0
- package/dist/workflows/run/repo-root-lease.d.ts +34 -0
- package/dist/workflows/run/repo-root-lease.js +71 -0
- package/dist/workflows/run/repo-root-lease.js.map +1 -0
- package/dist/workflows/run/resolved-wait-input-batch.d.ts +7 -0
- package/dist/workflows/run/resolved-wait-input-batch.js +23 -0
- package/dist/workflows/run/resolved-wait-input-batch.js.map +1 -0
- package/dist/workflows/run/run-cancel.d.ts +36 -0
- package/dist/workflows/run/run-cancel.js +130 -0
- package/dist/workflows/run/run-cancel.js.map +1 -0
- package/dist/workflows/run/run-finish.d.ts +72 -0
- package/dist/workflows/run/run-finish.js +256 -0
- package/dist/workflows/run/run-finish.js.map +1 -0
- package/dist/workflows/run/run-guards.d.ts +15 -0
- package/dist/workflows/run/run-guards.js +39 -0
- package/dist/workflows/run/run-guards.js.map +1 -0
- package/dist/workflows/run/run-line.d.ts +187 -0
- package/dist/workflows/run/run-line.js +438 -0
- package/dist/workflows/run/run-line.js.map +1 -0
- package/dist/workflows/run/run-recovery.d.ts +116 -0
- package/dist/workflows/run/run-recovery.js +422 -0
- package/dist/workflows/run/run-recovery.js.map +1 -0
- package/dist/workflows/run/run-settlement.d.ts +177 -0
- package/dist/workflows/run/run-settlement.js +504 -0
- package/dist/workflows/run/run-settlement.js.map +1 -0
- package/dist/workflows/run/run-skills.d.ts +114 -0
- package/dist/workflows/run/run-skills.js +233 -0
- package/dist/workflows/run/run-skills.js.map +1 -0
- package/dist/workflows/run/run-start.d.ts +64 -0
- package/dist/workflows/run/run-start.js +126 -0
- package/dist/workflows/run/run-start.js.map +1 -0
- package/dist/workflows/run/run-workspace.d.ts +25 -0
- package/dist/workflows/run/run-workspace.js +66 -0
- package/dist/workflows/run/run-workspace.js.map +1 -0
- package/dist/workflows/run/session-events.d.ts +155 -0
- package/dist/workflows/run/session-events.js +282 -0
- package/dist/workflows/run/session-events.js.map +1 -0
- package/dist/workflows/run/step-decisions.d.ts +37 -0
- package/dist/workflows/run/step-decisions.js +43 -0
- package/dist/workflows/run/step-decisions.js.map +1 -0
- package/dist/workflows/run/step-loop.d.ts +143 -0
- package/dist/workflows/run/step-loop.js +488 -0
- package/dist/workflows/run/step-loop.js.map +1 -0
- package/dist/workflows/run/step-session.d.ts +65 -0
- package/dist/workflows/run/step-session.js +280 -0
- package/dist/workflows/run/step-session.js.map +1 -0
- package/dist/workflows/run/steps.d.ts +13 -0
- package/dist/workflows/run/steps.js +14 -0
- package/dist/workflows/run/steps.js.map +1 -0
- package/dist/workflows/run/subagent-waits.d.ts +138 -0
- package/dist/workflows/run/subagent-waits.js +305 -0
- package/dist/workflows/run/subagent-waits.js.map +1 -0
- package/dist/workflows/run/tracked-work.d.ts +12 -0
- package/dist/workflows/run/tracked-work.js +29 -0
- package/dist/workflows/run/tracked-work.js.map +1 -0
- package/dist/workflows/run/turn-bookkeeping.d.ts +67 -0
- package/dist/workflows/run/turn-bookkeeping.js +173 -0
- package/dist/workflows/run/turn-bookkeeping.js.map +1 -0
- package/dist/workflows/run/turn-boundary.d.ts +215 -0
- package/dist/workflows/run/turn-boundary.js +329 -0
- package/dist/workflows/run/turn-boundary.js.map +1 -0
- package/dist/workflows/run/turn-markers.d.ts +62 -0
- package/dist/workflows/run/turn-markers.js +86 -0
- package/dist/workflows/run/turn-markers.js.map +1 -0
- package/dist/workflows/run/turn-nudges.d.ts +104 -0
- package/dist/workflows/run/turn-nudges.js +244 -0
- package/dist/workflows/run/turn-nudges.js.map +1 -0
- package/dist/workflows/run/turn-settler.d.ts +161 -0
- package/dist/workflows/run/turn-settler.js +469 -0
- package/dist/workflows/run/turn-settler.js.map +1 -0
- package/dist/workflows/run/types.d.ts +293 -0
- package/dist/workflows/run/types.js +2 -0
- package/dist/workflows/run/types.js.map +1 -0
- package/dist/workflows/run/usage-accounting.d.ts +49 -0
- package/dist/workflows/run/usage-accounting.js +213 -0
- package/dist/workflows/run/usage-accounting.js.map +1 -0
- package/dist/workflows/run/wait-engine.d.ts +1210 -0
- package/dist/workflows/run/wait-engine.js +456 -0
- package/dist/workflows/run/wait-engine.js.map +1 -0
- package/dist/workflows/run/wait-kinds.d.ts +336 -0
- package/dist/workflows/run/wait-kinds.js +471 -0
- package/dist/workflows/run/wait-kinds.js.map +1 -0
- package/dist/workflows/run/wait-registration-tool.d.ts +3 -0
- package/dist/workflows/run/wait-registration-tool.js +68 -0
- package/dist/workflows/run/wait-registration-tool.js.map +1 -0
- package/dist/workflows/run/wait-registration.d.ts +7 -0
- package/dist/workflows/run/wait-registration.js +39 -0
- package/dist/workflows/run/wait-registration.js.map +1 -0
- package/dist/workflows/run/wait-registry.d.ts +120 -0
- package/dist/workflows/run/wait-registry.js +365 -0
- package/dist/workflows/run/wait-registry.js.map +1 -0
- package/dist/workflows/run/wait-watches.d.ts +13 -0
- package/dist/workflows/run/wait-watches.js +12 -0
- package/dist/workflows/run/wait-watches.js.map +1 -0
- package/dist/workflows/run/wake-admission.d.ts +150 -0
- package/dist/workflows/run/wake-admission.js +397 -0
- package/dist/workflows/run/wake-admission.js.map +1 -0
- package/dist/workflows/run/wake-ledger.d.ts +61 -0
- package/dist/workflows/run/wake-ledger.js +78 -0
- package/dist/workflows/run/wake-ledger.js.map +1 -0
- package/dist/workflows/run/wake-retries.d.ts +31 -0
- package/dist/workflows/run/wake-retries.js +93 -0
- package/dist/workflows/run/wake-retries.js.map +1 -0
- package/dist/workflows/run/worker-executions.d.ts +54 -0
- package/dist/workflows/run/worker-executions.js +149 -0
- package/dist/workflows/run/worker-executions.js.map +1 -0
- package/dist/workflows/run/worker-orphans.d.ts +91 -0
- package/dist/workflows/run/worker-orphans.js +275 -0
- package/dist/workflows/run/worker-orphans.js.map +1 -0
- package/dist/workflows/run/worker-questions.d.ts +169 -0
- package/dist/workflows/run/worker-questions.js +464 -0
- package/dist/workflows/run/worker-questions.js.map +1 -0
- package/dist/workflows/run/workflow-position.d.ts +7 -0
- package/dist/workflows/run/workflow-position.js +9 -0
- package/dist/workflows/run/workflow-position.js.map +1 -0
- package/dist/workflows/run/worktree-autosave.d.ts +48 -0
- package/dist/workflows/run/worktree-autosave.js +175 -0
- package/dist/workflows/run/worktree-autosave.js.map +1 -0
- package/dist/workflows/run-scheduling.d.ts +38 -0
- package/dist/workflows/run-scheduling.js +76 -0
- package/dist/workflows/run-scheduling.js.map +1 -0
- package/dist/workflows/run-states.d.ts +73 -0
- package/dist/workflows/run-states.js +233 -0
- package/dist/workflows/run-states.js.map +1 -0
- package/dist/workflows/run.d.ts +275 -0
- package/dist/workflows/run.js +626 -0
- package/dist/workflows/run.js.map +1 -0
- package/dist/workflows/turn-end.d.ts +119 -0
- package/dist/workflows/turn-end.js +74 -0
- package/dist/workflows/turn-end.js.map +1 -0
- package/dist/workflows/types.d.ts +83 -0
- package/dist/workflows/types.js +192 -0
- package/dist/workflows/types.js.map +1 -0
- package/dist/workflows/wait-scope.d.ts +75 -0
- package/dist/workflows/wait-scope.js +115 -0
- package/dist/workflows/wait-scope.js.map +1 -0
- package/dist/workflows/waits.d.ts +58 -0
- package/dist/workflows/waits.js +89 -0
- package/dist/workflows/waits.js.map +1 -0
- package/dist/workspace/agent-accounts.d.ts +135 -0
- package/dist/workspace/agent-accounts.js +353 -0
- package/dist/workspace/agent-accounts.js.map +1 -0
- package/dist/workspace/agent-profiles.d.ts +125 -0
- package/dist/workspace/agent-profiles.js +190 -0
- package/dist/workspace/agent-profiles.js.map +1 -0
- package/dist/workspace/backup-cli.d.ts +9 -0
- package/dist/workspace/backup-cli.js +147 -0
- package/dist/workspace/backup-cli.js.map +1 -0
- package/dist/workspace/backups.d.ts +36 -0
- package/dist/workspace/backups.js +249 -0
- package/dist/workspace/backups.js.map +1 -0
- package/dist/workspace/config.d.ts +179 -0
- package/dist/workspace/config.js +396 -0
- package/dist/workspace/config.js.map +1 -0
- package/dist/workspace/migrations.d.ts +37 -0
- package/dist/workspace/migrations.js +149 -0
- package/dist/workspace/migrations.js.map +1 -0
- package/dist/workspace/projects-cli.d.ts +27 -0
- package/dist/workspace/projects-cli.js +175 -0
- package/dist/workspace/projects-cli.js.map +1 -0
- package/dist/workspace/projects.d.ts +131 -0
- package/dist/workspace/projects.js +274 -0
- package/dist/workspace/projects.js.map +1 -0
- package/dist/workspace/root-probe-cache.d.ts +10 -0
- package/dist/workspace/root-probe-cache.js +43 -0
- package/dist/workspace/root-probe-cache.js.map +1 -0
- package/dist/workspace/semaphore.d.ts +147 -0
- package/dist/workspace/semaphore.js +196 -0
- package/dist/workspace/semaphore.js.map +1 -0
- package/dist/workspace/ui-state.d.ts +17 -0
- package/dist/workspace/ui-state.js +59 -0
- package/dist/workspace/ui-state.js.map +1 -0
- package/dist/workspace/webhooks.d.ts +40 -0
- package/dist/workspace/webhooks.js +146 -0
- package/dist/workspace/webhooks.js.map +1 -0
- package/dist/worktree-manifest.d.ts +165 -0
- package/dist/worktree-manifest.js +535 -0
- package/dist/worktree-manifest.js.map +1 -0
- package/dist/worktree-setup.d.ts +88 -0
- package/dist/worktree-setup.js +170 -0
- package/dist/worktree-setup.js.map +1 -0
- package/package.json +80 -4
- package/scripts/benchmark-family-reconcile.ts +119 -0
- package/scripts/benchmark-home.ts +32 -0
- package/scripts/benchmark-project-probes.mjs +158 -0
- package/scripts/benchmark-run-store-fixture.ts +432 -0
- package/scripts/benchmark-run-store.ts +767 -0
- package/scripts/benchmark-stuck-destroys.ts +144 -0
- package/scripts/benchmark-workspace-events.ts +339 -0
- package/scripts/check-pack.mjs +48 -0
- package/scripts/inline-contract.mjs +165 -0
- package/scripts/install-as-command.mjs +125 -0
- package/scripts/measure-transcript-facts-health.mjs +103 -0
- package/scripts/measure-transcript-facts-lag.mjs +69 -0
- package/scripts/mock-autonomous.mjs +13 -0
- package/scripts/mock-ci-tool.mjs +159 -0
- package/scripts/mock-claude-model-refusal.mjs +76 -0
- package/scripts/mock-claude-subagents.mjs +54 -0
- package/scripts/mock-claude.mjs +800 -0
- package/scripts/mock-codex-app-server.mjs +767 -0
- package/scripts/mock-codex-coalesce-steer.mjs +59 -0
- package/scripts/mock-codex-reverse-steer.mjs +143 -0
- package/scripts/mock-codex-subagents.mjs +52 -0
- package/scripts/mock-controls.d.mts +11 -0
- package/scripts/mock-controls.mjs +13 -0
- package/scripts/mock-cursor-hang-stdin-late.mjs +35 -0
- package/scripts/mock-cursor-hang-stdin.mjs +30 -0
- package/scripts/mock-cursor-print.mjs +237 -0
- package/scripts/mock-deferred-turn-start.mjs +16 -0
- package/scripts/mock-delivery-control.d.mts +23 -0
- package/scripts/mock-delivery-control.mjs +80 -0
- package/scripts/mock-env-record.mjs +11 -0
- package/scripts/mock-failure-control.d.mts +13 -0
- package/scripts/mock-failure-control.mjs +68 -0
- package/scripts/mock-lifecycle.mjs +51 -0
- package/scripts/mock-multi-pr.mjs +10 -0
- package/scripts/mock-nudge.mjs +43 -0
- package/scripts/mock-omp-rpc.mjs +536 -0
- package/scripts/mock-opencode-serve.mjs +1000 -0
- package/scripts/mock-pi-rpc.mjs +421 -0
- package/scripts/mock-publish.mjs +13 -0
- package/scripts/mock-runner-crash.mjs +64 -0
- package/scripts/mock-scenario.d.mts +71 -0
- package/scripts/mock-scenario.mjs +295 -0
- package/scripts/mock-session-context.d.mts +5 -0
- package/scripts/mock-session-context.mjs +56 -0
- package/scripts/mock-silent-tail.mjs +93 -0
- package/scripts/mock-turn-messages.mjs +5 -0
- package/scripts/mock-wire-evidence.config.mjs +12 -0
- package/scripts/mock-wire-recorder.mjs +66 -0
- package/scripts/mock-wire-tools.mjs +7 -0
- package/scripts/omp-ci-wait.mjs +29 -0
- package/scripts/opencode-task-scope.d.mts +18 -0
- package/scripts/opencode-task-scope.mjs +59 -0
- package/scripts/parity-rows.ts +160 -0
- package/scripts/pi-ci-wait.mjs +17 -0
- package/scripts/pi-default-tools.mjs +22 -0
- package/scripts/pi-project-skills.mjs +59 -0
- package/scripts/pi-retry-degraded-service.mjs +16 -0
- package/scripts/probe-cursor-print.mjs +699 -0
- package/scripts/probe-session-env.ts +8 -0
- package/scripts/product-env.mjs +6 -0
- package/scripts/product-identity.mjs +12 -0
- package/scripts/record-mock-wires.mjs +16 -0
- package/scripts/seed-archive-profile.ts +53 -0
- package/scripts/sync-readme.mjs +20 -0
- package/scripts/test-process-usage.mjs +47 -0
- package/scripts/transcript-facts-fixture.mjs +53 -0
- package/scripts/transcript-facts-timing.mjs +42 -0
- package/scripts/voice-replay.ts +50 -0
- package/scripts/windows-workspace-identity.cs +208 -0
- package/scripts/windows-workspace-identity.ps1 +10 -0
- package/web/dist/assets/activity-motion-0wHCeUs7.css +1 -0
- package/web/dist/assets/activity-motion-SGth5vR4.js +2 -0
- package/web/dist/assets/activity-route-D8otXwOA.js +1 -0
- package/web/dist/assets/agent-accounts-6EuZhy-N.js +18 -0
- package/web/dist/assets/alert-dialog-vFjLgfK4.js +1 -0
- package/web/dist/assets/app-window-CSHwDX9N.js +1 -0
- package/web/dist/assets/arrow-right-Dh_Lx3um.js +1 -0
- package/web/dist/assets/bundle-mjs-BT31bpU6.js +1 -0
- package/web/dist/assets/button-BEK7XKhS.js +3 -0
- package/web/dist/assets/centered-state-CPgI8cCO.js +1 -0
- package/web/dist/assets/cez-idle-BT0U4GN_.js +1 -0
- package/web/dist/assets/chunk-BO2N2NFS-DE6qKn3r.js +131 -0
- package/web/dist/assets/commit-diff-panel-DzyWgn1Z.js +1 -0
- package/web/dist/assets/control-locations-CexZsd3M.js +1 -0
- package/web/dist/assets/core-BCsw8oQw.js +12 -0
- package/web/dist/assets/createLucideIcon-BHp8sXmF.js +1 -0
- package/web/dist/assets/css-BsVw1vtW.js +1 -0
- package/web/dist/assets/design-icons-DmYTv2r1.js +1 -0
- package/web/dist/assets/diff-DBDiZl58.js +3 -0
- package/web/dist/assets/diff-controls-DXyB0aDl.js +1 -0
- package/web/dist/assets/diff-view-DiKAwVMH.js +11 -0
- package/web/dist/assets/diff-woXpYk--.js +1 -0
- package/web/dist/assets/dropdown-menu-DYflHa4m.js +1 -0
- package/web/dist/assets/engine-javascript-FQvzRocB.js +141 -0
- package/web/dist/assets/es2015-BO600Xfi.js +41 -0
- package/web/dist/assets/eye-B8okNWXU.js +1 -0
- package/web/dist/assets/file-preview-DTSRkmMo.js +2 -0
- package/web/dist/assets/git-toolbar-U4s46kUd.js +1 -0
- package/web/dist/assets/github-UaBp2yRF.js +1 -0
- package/web/dist/assets/github-sidebar-model-czjLsgVJ.js +1 -0
- package/web/dist/assets/global-activity-route-B2N2Nz0H.js +1 -0
- package/web/dist/assets/go-rLFTqkRN.js +1 -0
- package/web/dist/assets/highlighted-body-OFNGDK62-BL-MfFgl.js +1 -0
- package/web/dist/assets/hourglass-B0lPAJvT.js +1 -0
- package/web/dist/assets/html-BY76lXLH.js +1 -0
- package/web/dist/assets/image-preview-XPCPclpG.js +1 -0
- package/web/dist/assets/index-B18AqW0Z.css +1 -0
- package/web/dist/assets/index-xj-3O89_.js +14 -0
- package/web/dist/assets/index.global-D3Ga_D3Y.js +1 -0
- package/web/dist/assets/info-DA1x_4bz.js +1 -0
- package/web/dist/assets/javascript-BgS3c2Ky.js +1 -0
- package/web/dist/assets/jetbrains-mono-latin-ext-wght-normal-DBQx-q_a.woff2 +0 -0
- package/web/dist/assets/jetbrains-mono-latin-wght-normal-B9CIFXIH.woff2 +0 -0
- package/web/dist/assets/json-qhed-kSA.js +1 -0
- package/web/dist/assets/jsonc-CYpm1nAK.js +1 -0
- package/web/dist/assets/jsx-Bz0zcwM4.js +1 -0
- package/web/dist/assets/lib-BxQXEXDF.js +1 -0
- package/web/dist/assets/live-protocol-BDY7JJpT.js +64 -0
- package/web/dist/assets/live-refetch-C-Ony2Yr.js +1 -0
- package/web/dist/assets/live-worker-BWdeGzQX.ts +34 -0
- package/web/dist/assets/loader-circle-CZkGEdoI.js +1 -0
- package/web/dist/assets/markdown-BBDDg-4t.js +1 -0
- package/web/dist/assets/markdown-BYOwaDjH.js +1 -0
- package/web/dist/assets/markdown-UdZ_toya.js +6 -0
- package/web/dist/assets/mermaid-GHXKKRXX-C4jxqUUb.js +1 -0
- package/web/dist/assets/mermaid.min-3O9YjB2l.js +1 -0
- package/web/dist/assets/message-square-B-MD-8rD.js +1 -0
- package/web/dist/assets/nav-row-styles-BE99gD3_.js +1 -0
- package/web/dist/assets/popover-CpULuQSm.js +1 -0
- package/web/dist/assets/poppins-devanagari-400-normal-CJDn6rn8.woff2 +0 -0
- package/web/dist/assets/poppins-devanagari-400-normal-CqVvlrh5.woff +0 -0
- package/web/dist/assets/poppins-devanagari-500-normal-BIdkeU1p.woff2 +0 -0
- package/web/dist/assets/poppins-devanagari-500-normal-DMPDjHtT.woff +0 -0
- package/web/dist/assets/poppins-devanagari-600-normal-ClASKHrr.woff +0 -0
- package/web/dist/assets/poppins-devanagari-600-normal-STEjXBNN.woff2 +0 -0
- package/web/dist/assets/poppins-latin-400-normal-BOb3E3N0.woff +0 -0
- package/web/dist/assets/poppins-latin-400-normal-cpxAROuN.woff2 +0 -0
- package/web/dist/assets/poppins-latin-500-normal-C8OXljZJ.woff2 +0 -0
- package/web/dist/assets/poppins-latin-500-normal-DGXqpDMm.woff +0 -0
- package/web/dist/assets/poppins-latin-600-normal-BJdTmd5m.woff +0 -0
- package/web/dist/assets/poppins-latin-600-normal-zEkxB9Mr.woff2 +0 -0
- package/web/dist/assets/poppins-latin-ext-400-normal-DaBSavcJ.woff +0 -0
- package/web/dist/assets/poppins-latin-ext-400-normal-by3JarPu.woff2 +0 -0
- package/web/dist/assets/poppins-latin-ext-500-normal-CK-6C4Hw.woff2 +0 -0
- package/web/dist/assets/poppins-latin-ext-500-normal-CgAe2rWW.woff +0 -0
- package/web/dist/assets/poppins-latin-ext-600-normal-CAhIAdZj.woff2 +0 -0
- package/web/dist/assets/poppins-latin-ext-600-normal-Df5ffKXP.woff +0 -0
- package/web/dist/assets/preview-pane-connected-CgRK7GzB.js +3 -0
- package/web/dist/assets/project-router-CimAoN1H.js +1 -0
- package/web/dist/assets/project-scope-context-DMpvJqIm.js +4 -0
- package/web/dist/assets/python-gzcpVVnB.js +1 -0
- package/web/dist/assets/queries-BIOp8jLx.js +1 -0
- package/web/dist/assets/react-runtime-CCIEwYL0.js +9 -0
- package/web/dist/assets/repo-git-DVXNOJDT.css +1 -0
- package/web/dist/assets/repo-git-XkyTfP9G.js +1 -0
- package/web/dist/assets/report-reader-CZjYS5Aw.js +1 -0
- package/web/dist/assets/report-title-D4Mbu2Er.js +1 -0
- package/web/dist/assets/reports-B7QAzibP.css +1 -0
- package/web/dist/assets/reports-D_2sFE1y.js +1 -0
- package/web/dist/assets/rolldown-runtime-QTnfLwEv.js +1 -0
- package/web/dist/assets/run-header-BwPDVPpg.js +2 -0
- package/web/dist/assets/run-header-CC7VUTg9.css +1 -0
- package/web/dist/assets/rust-Cfkwpbl8.js +1 -0
- package/web/dist/assets/shellscript-CLZ0U2zV.js +1 -0
- package/web/dist/assets/skill-empty-hint-YDmkqgo-.js +1 -0
- package/web/dist/assets/skills-BkXe4p4q.js +1 -0
- package/web/dist/assets/skills-DFBiAuJG.js +1 -0
- package/web/dist/assets/skills-workflows-C21NystW.css +1 -0
- package/web/dist/assets/sortable.esm-zp_qkYGV.js +5 -0
- package/web/dist/assets/sql-BsFa4tDR.js +1 -0
- package/web/dist/assets/tab-link-BIweqlIZ.js +1 -0
- package/web/dist/assets/task-changes-USNHNm_T.js +1 -0
- package/web/dist/assets/task-commits-kHqlOJe_.js +1 -0
- package/web/dist/assets/task-files-wTWwLR39.js +1 -0
- package/web/dist/assets/task-github-item-GzaQjkF1.js +1 -0
- package/web/dist/assets/task-thread-BZX863UN.js +9 -0
- package/web/dist/assets/task-thread-DtQ6uGfQ.css +1 -0
- package/web/dist/assets/textarea-FAUkHz1K.js +1 -0
- package/web/dist/assets/thread-state-CBzx2hmX.js +4 -0
- package/web/dist/assets/toaster-pthKGWiE.js +1 -0
- package/web/dist/assets/toml-CcmNWLt0.js +1 -0
- package/web/dist/assets/tsx-udAQXfEw.js +1 -0
- package/web/dist/assets/typescript-bsJCZSQ-.js +1 -0
- package/web/dist/assets/use-hand-to-agent-state-Bav9eT3b.js +1 -0
- package/web/dist/assets/use-hand-to-agent-state-C7esPJ-N.css +1 -0
- package/web/dist/assets/useInfiniteQuery-CQI4BO4C.js +1 -0
- package/web/dist/assets/useQuery-Bkq-x4Id.js +1 -0
- package/web/dist/assets/workflows-D871Gx--.js +7 -0
- package/web/dist/assets/ws-DspW9wBH.js +1 -0
- package/web/dist/assets/yaml-rwi0_p6S.js +1 -0
- package/web/dist/assets/zoomable-image-DNc6ORaF.js +1 -0
- package/web/dist/cezarion-lockup-dark.svg +9 -0
- package/web/dist/cezarion-lockup-light.svg +9 -0
- package/web/dist/cezarion-mark-dark.svg +4 -0
- package/web/dist/cezarion-mark-light.svg +4 -0
- package/web/dist/index.html +90 -0
- package/web/dist/live-worker.js +4 -0
package/README.md
CHANGED
|
@@ -1,3 +1,1847 @@
|
|
|
1
|
-
|
|
1
|
+
<div align="center">
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
<picture>
|
|
4
|
+
<source media="(prefers-color-scheme: dark)" srcset="packages/web/public/cezarion-mark-dark.svg">
|
|
5
|
+
<img src="packages/web/public/cezarion-mark-light.svg" alt="" width="96" height="96">
|
|
6
|
+
</picture>
|
|
7
|
+
|
|
8
|
+
# Squawk
|
|
9
|
+
|
|
10
|
+
**Parallel coding agents orchestrator** — a local cockpit for running and
|
|
11
|
+
tracking AI coding-agent tasks in your repo.
|
|
12
|
+
|
|
13
|
+
Type a task, pick a workflow and an agent — **Claude Code, Codex, OpenCode, Cursor, pi or
|
|
14
|
+
OMP (OpenCode, pi and OMP experimental), or a mix of them per step** — and watch it work live: steps, tool calls,
|
|
15
|
+
tokens, diffs, in a browser cockpit that runs entirely on your machine.
|
|
16
|
+
Your CLI logins, your `gh`, your files. No accounts, no database server, no cloud.
|
|
17
|
+
|
|
18
|
+
🔥 **Fire and forget.** Queue a stack of autonomous coding and maintenance
|
|
19
|
+
tasks and let them run — Squawk orchestrates them across isolated worktrees,
|
|
20
|
+
in parallel. Flip the **Autonomous** flag
|
|
21
|
+
and a run never stops to ask; it just finishes. Leave it on a VPS and you get
|
|
22
|
+
a dev team that's *always on* — a mobile-friendly cockpit you can check from
|
|
23
|
+
your phone, working your backlog while you're away.
|
|
24
|
+
|
|
25
|
+
[A look inside](#a-look-inside) · [What Squawk does best](#what-squawk-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-squawk-on-a-server)
|
|
26
|
+
|
|
27
|
+
[](LICENSE)
|
|
28
|
+

|
|
29
|
+

|
|
30
|
+

|
|
31
|
+

|
|
32
|
+
|
|
33
|
+
</div>
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
cd your-repo
|
|
39
|
+
npx hsq # → cockpit at http://localhost:4321
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
That's the whole setup. If your `claude` CLI is logged in (Pro/Max) and `gh` is
|
|
43
|
+
authenticated, there is nothing else to configure. State lives in `.ai/squawk/`
|
|
44
|
+
inside your repo (`.ai/cezar/` in a project that has not moved yet): your runs in one embedded SQLite file (`runs.db`, built into
|
|
45
|
+
Node: no server, no install, no config), event logs in NDJSON and journals in
|
|
46
|
+
Markdown. Everything except the run file you can `cat` and fix by hand.
|
|
47
|
+
|
|
48
|
+
Local npm installations have a workspace update API. `POST
|
|
49
|
+
/api/v1/workspace/application-update/apply` with `{}` prepares the release
|
|
50
|
+
advertised by health while the current server keeps running; `POST
|
|
51
|
+
/api/v1/workspace/application-update/restart` with `{}` then restarts it. A
|
|
52
|
+
successful restart updates the original global installation or ordinary npx
|
|
53
|
+
cache entry, so the same command uses the new version on its next launch.
|
|
54
|
+
Update preparation and recovery state is generated under
|
|
55
|
+
`<state>/application-updates/` in the [resolved home layout](docs/migration.md#home-directories).
|
|
56
|
+
Pinned npx invocations, source checkouts, npm links, and hosted deployments use
|
|
57
|
+
their existing manual update paths. Squawk holds its own installation lock and
|
|
58
|
+
npm's npx lock during promotion; a separate manual `npm install` does not honor
|
|
59
|
+
those locks, so avoid one while an update is preparing or restarting.
|
|
60
|
+
|
|
61
|
+
Upgrading from Cezarion? Read the [migration guide](docs/migration.md) before
|
|
62
|
+
moving a desktop, server or custom-home install. User paths such as `<config>`
|
|
63
|
+
and `<state>` below refer to its [platform roots](docs/migration.md#home-directories).
|
|
64
|
+
A cockpit moves each idle project's state from `.ai/cezar/` to `.ai/squawk/` at start
|
|
65
|
+
([project folders](docs/migration.md#project-folders)). Release operators use the [publishing runbook](docs/publishing.md).
|
|
66
|
+
|
|
67
|
+
## A look inside
|
|
68
|
+
|
|
69
|
+
Click any thumbnail for the full-size screenshot.
|
|
70
|
+
|
|
71
|
+
| Orchestrate parallel agents | Watch a run live |
|
|
72
|
+
|:--:|:--:|
|
|
73
|
+
| [](docs/screenshots/task-view.png) | [](docs/screenshots/live-run.png) |
|
|
74
|
+
| *Run and queue tasks in isolated worktrees, with live status and resource use.* | *Every step, tool call, token and screenshot streams as it happens.* |
|
|
75
|
+
| **Workflow builder** | **GitHub, one click away** |
|
|
76
|
+
| [](docs/screenshots/workflow-builder.png) | [](docs/screenshots/github-issues.png) |
|
|
77
|
+
| *Stitch skills and shell checks into a reusable YAML chain.* | *Hand an issue to an agent through your own `gh` login.* |
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
## Generated inbox removed
|
|
82
|
+
|
|
83
|
+
The generated follow-up Inbox is removed in the next breaking minor release, **0.17.0**
|
|
84
|
+
(hearsay-tools/cezarion#1543). There is no deprecation window for this removal.
|
|
85
|
+
Remove `CEZ_FOLLOWUPS` from your launch environment; it no longer enables anything.
|
|
86
|
+
Agents receive no suggestion-generation instructions or usable `CEZ_TODOS_FILE`.
|
|
87
|
+
The todo API routes, `todos` SSE events, `capabilities.followups`, and task-creation
|
|
88
|
+
fields `generateFollowups` and `todoId` are removed. Remove those fields from scripts
|
|
89
|
+
and automation templates. Historical run records remain readable and resumable.
|
|
90
|
+
Upgrades leave `.ai/cezar/todos.json` untouched. If that file exists, export its original
|
|
91
|
+
contents from the project directory with:
|
|
92
|
+
```bash
|
|
93
|
+
cp .ai/cezar/todos.json ./cezar-followups-export.json
|
|
94
|
+
```
|
|
95
|
+
Old Inbox URLs show this guidance. Create an ordinary task with **New task**, or use
|
|
96
|
+
an issue-authoring skill to record work in your tracker. Task **Notes**, the rolling
|
|
97
|
+
handoff journal, **Continue**, live follow-up messages, and `hsq message inbox` remain
|
|
98
|
+
available.
|
|
99
|
+
## What Squawk does best 🏆
|
|
100
|
+
|
|
101
|
+
**On your phone:** the [iPhone and Android companion apps](docs/mobile.md) connect
|
|
102
|
+
to your existing HTTPS cockpit. Personal installation and device testing are
|
|
103
|
+
documented; agents continue running on your server.
|
|
104
|
+
|
|
105
|
+
Plenty of tools wrap a single coding agent in a nicer window — a "Codex GUI", a
|
|
106
|
+
conductor-style app, one-agent front-ends. Squawk's bet is different. Three things
|
|
107
|
+
it does better than any of them:
|
|
108
|
+
|
|
109
|
+
- 🪶 **Genuinely zero config.** `npx hsq` in your repo and you're running —
|
|
110
|
+
no wizard, no API keys, no env vars, no schema, no database server. It rides the
|
|
111
|
+
`claude` / `codex` / `opencode` / `agent` (Cursor) / `pi` / `omp` logins and the `gh` you already have, and every
|
|
112
|
+
missing piece degrades gracefully instead of blocking you.
|
|
113
|
+
- 🖥️ **Built for a server (VPS mode).** Squawk is made to live on a **VPS, cloud,
|
|
114
|
+
or dedicated box** as an always-on janitor for your repo — headless-first, with
|
|
115
|
+
a mobile-friendly cockpit you drive from anywhere. It's a coding server you can
|
|
116
|
+
actually watch, not a desktop app bolted onto one machine.
|
|
117
|
+
- 🔀 **Parallel + autonomous orchestration.** The real edge: Squawk runs **many
|
|
118
|
+
agents at once** in isolated worktrees, **queues** the overflow, and pushes each
|
|
119
|
+
one **autonomously** through skill playbooks — fire-and-forget. This is exactly
|
|
120
|
+
what single-agent GUIs don't do well: they babysit one agent, while Squawk
|
|
121
|
+
orchestrates a whole team and drains your backlog while you're away.
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
## What it solves
|
|
126
|
+
|
|
127
|
+
Most "AI coding agent" tooling makes you choose between a **terminal** you can't
|
|
128
|
+
see into once it's running, and a **cloud product** that wants your API key, your
|
|
129
|
+
code on their servers, and an account. Squawk is the third option: the agents run
|
|
130
|
+
locally under *your* subscription, a cockpit shows you exactly what they're doing,
|
|
131
|
+
and an orchestrator keeps a whole queue of them moving.
|
|
132
|
+
|
|
133
|
+
- 👀 **No visibility into a running agent.** A headless `claude` run is a black box
|
|
134
|
+
until it finishes. Squawk streams every step — agent text, each tool call and
|
|
135
|
+
its result, tokens and cost per step — live, and keeps the full replay.
|
|
136
|
+
- 🧩 **One agent, one working tree, one thing at a time.** Kick off a second task and
|
|
137
|
+
it fights the first over your files. Squawk runs each task in its **own git
|
|
138
|
+
worktree**, so two (or three) agents work in parallel without stepping on
|
|
139
|
+
each other — or on the branch you're editing.
|
|
140
|
+
- 🗂️ **A backlog that needs babysitting.** Queue a stack of tasks and Squawk
|
|
141
|
+
**orchestrates** them: it runs up to your parallel limit and holds the rest in
|
|
142
|
+
an ordered queue. Point it at a GitHub issue and it runs straight on that, so
|
|
143
|
+
working the tracker down stops being a manual chore. Create ordinary tasks for
|
|
144
|
+
the work you choose to run next.
|
|
145
|
+
- 🤖 **"Autonomous" means you still have to sit there.** Flip the **Autonomous**
|
|
146
|
+
flag and a run never parks to ask — it keeps going until the task is done. Pair
|
|
147
|
+
it with a **skill** (a Markdown playbook) and you've got fire-and-forget
|
|
148
|
+
automation: hand off "fix this", "upgrade that", "triage these" and walk away.
|
|
149
|
+
- ✅ **The agent finishes and you have to trust it.** Every task's diff stays on
|
|
150
|
+
its own branch: inspect it, send notes back into the same session, or push a
|
|
151
|
+
**draft PR**. Auto merge is off by default; each task can opt in to merge after Done.
|
|
152
|
+
Turn on the optional **review gate**
|
|
153
|
+
(`HSQ_REVIEW_GATE=1` (`CEZ_REVIEW_GATE` fallback) or Settings → Agents) and a finished run with changes
|
|
154
|
+
waits in `review` for you.
|
|
155
|
+
- ♻️ **Losing a session when it fails.** Every run records its `claude` session id.
|
|
156
|
+
Take it over interactively in one click (`claude --resume <id>`), or continue it
|
|
157
|
+
in-process from the cockpit. After a failure, Continue tells the agent which
|
|
158
|
+
step failed and gives its saved error before your message. Restart recovery
|
|
159
|
+
also explains the restart when replaying a saved message. Background commands
|
|
160
|
+
may have stopped; the agent is told to verify their state before restarting them.
|
|
161
|
+
- 🔀 **Locked into one agent vendor.** Most tools wed you to a single CLI. Squawk
|
|
162
|
+
drives **Claude Code, Codex, OpenCode, Cursor, pi and OMP** (OpenCode, pi and OMP
|
|
163
|
+
experimental) through one runner seam — set a
|
|
164
|
+
default, pick a backend per task, or mix them inside one workflow (implement
|
|
165
|
+
with one agent, review with another) — and through **OpenCode**, **pi** or
|
|
166
|
+
**OMP** you can point a run at **open-source or local models**, not just the
|
|
167
|
+
big vendors. See
|
|
168
|
+
[Agent backends](#coding-agent-backends).
|
|
169
|
+
- 🖥️ **Close the laptop and the work stops.** A local agent only runs while your
|
|
170
|
+
machine is on and awake. Put Squawk on a **VPS, cloud box, or dedicated server**
|
|
171
|
+
and the cockpit becomes the GUI for an **always-on AI coding team** — kick off,
|
|
172
|
+
watch and steer tasks from your laptop or **phone**, on the train or between
|
|
173
|
+
meetings, while the agents keep grinding through the backlog back on the server.
|
|
174
|
+
- ⚡ **Setup tax.** No wizard, no env vars, no schema. Skills are Markdown, workflows
|
|
175
|
+
are short YAML, and everything degrades: no `gh` → works without PRs, no network
|
|
176
|
+
→ local skills still load, no `.ai/skills` → the bare prompt still runs.
|
|
177
|
+
|
|
178
|
+
---
|
|
179
|
+
|
|
180
|
+
## Who it's for
|
|
181
|
+
|
|
182
|
+
- **Solo devs and small teams** who want the leverage of coding agents without
|
|
183
|
+
handing their code and keys to a SaaS — the agent runs on your subscription,
|
|
184
|
+
on your machine.
|
|
185
|
+
- **`claude` CLI power users** who love headless runs but want to *see* them,
|
|
186
|
+
and review a diff before it lands.
|
|
187
|
+
- **Anyone with a backlog** who'd rather queue three tasks into isolated worktrees
|
|
188
|
+
and pick the winners than babysit one terminal.
|
|
189
|
+
- **Teams with shared conventions** who want their playbooks (skills) pulled from
|
|
190
|
+
a git repo, applied consistently, with zero per-project setup.
|
|
191
|
+
|
|
192
|
+
---
|
|
193
|
+
|
|
194
|
+
## Quick start
|
|
195
|
+
|
|
196
|
+
**Prerequisites:** Node 24.21.0+, at least one logged-in agent CLI — the
|
|
197
|
+
[`claude` CLI](https://github.com/anthropics/claude-code) (Pro/Max subscription),
|
|
198
|
+
the [`codex` CLI](https://github.com/openai/codex),
|
|
199
|
+
[OpenCode](https://opencode.ai), the
|
|
200
|
+
[Cursor CLI](https://cursor.com/docs/cli/installation) (`agent`),
|
|
201
|
+
[pi](https://github.com/badlogic/pi-mono), or
|
|
202
|
+
[OMP](https://github.com/can1357/oh-my-pi) — and, optionally, `git` and the
|
|
203
|
+
`gh` CLI.
|
|
204
|
+
|
|
205
|
+
```bash
|
|
206
|
+
cd your-repo
|
|
207
|
+
npx hsq # start the cockpit for the current repo
|
|
208
|
+
# or: npx @hearsay-tools/squawk
|
|
209
|
+
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
The cockpit opens at `http://localhost:4321`. If the requested port is occupied,
|
|
213
|
+
startup exits with an actionable error before recovering tasks. Automatic port
|
|
214
|
+
bounce has been removed (hearsay-tools/cezarion#722): open the existing cockpit,
|
|
215
|
+
stop the process using that port, or choose `hsq --port <free-port>` deliberately.
|
|
216
|
+
Use `hsq --port 0` to ask the OS for an ephemeral port. If another cockpit already
|
|
217
|
+
serves this repository, the command prints its URL and exits with an error,
|
|
218
|
+
even with a different port. Different repositories can run side by side on
|
|
219
|
+
explicitly different ports; after a cockpit exits or crashes, its repository
|
|
220
|
+
can start again without cleanup.
|
|
221
|
+
Type a task, pick a workflow, hit **Start**. That's it.
|
|
222
|
+
|
|
223
|
+
```bash
|
|
224
|
+
npx hsq run "add a --json flag to the export command" # headless, CI-friendly
|
|
225
|
+
npx hsq init # scaffold .ai/squawk/
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
For a global install, run `npm i -g @hearsay-tools/squawk`, then use `hsq`.
|
|
229
|
+
The old `cez` and `cezarion` commands still work during the
|
|
230
|
+
[deprecation window](docs/migration.md#rollback-and-the-deprecation-window), with one stderr notice per process. No API key is ever used — Squawk shells out to whichever agent
|
|
231
|
+
CLIs you are already logged into, `claude` by default.
|
|
232
|
+
|
|
233
|
+
> **Contributing?** [Local development](#local-development) shows how to get a
|
|
234
|
+
> global `hsq` command straight off your checkout (`npm run install-as-command`)
|
|
235
|
+
> — no publish needed.
|
|
236
|
+
|
|
237
|
+
> **Just kicking the tires?** Set `HSQ_DRY_RUN=1` (`CEZ_DRY_RUN` fallback) to run against a bundled mock
|
|
238
|
+
> instead of the real CLI — the whole cockpit works with no `claude` login, so
|
|
239
|
+
> you can explore runs and diffs offline.
|
|
240
|
+
|
|
241
|
+
### Nightly builds — help us shape Squawk 🌙
|
|
242
|
+
|
|
243
|
+
Every night we publish the trunk to npm, so the features landing in the next
|
|
244
|
+
release are one command away:
|
|
245
|
+
|
|
246
|
+
```bash
|
|
247
|
+
npx hsq@nightly # everything merged as of last night
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
**Come build this with us.** Squawk is shaped by the people who run it on real
|
|
251
|
+
repos: if you try a nightly and something feels wrong — a workflow that stalls, a
|
|
252
|
+
diff that reads badly, a runner that should exist — [open an
|
|
253
|
+
issue](https://github.com/hearsay-tools/cezarion/issues) and tell us. That feedback,
|
|
254
|
+
early, is worth more than a bug report six weeks after a release, and it is how
|
|
255
|
+
most of the features here got their final shape.
|
|
256
|
+
|
|
257
|
+
**Know what you're installing.** A nightly is verified (typecheck, unit suites,
|
|
258
|
+
packaged-CLI e2e — the same gate a release runs) but it is *not* a release: it
|
|
259
|
+
can be rough, a flag or a screen may change under you, and something occasionally
|
|
260
|
+
breaks in a way no test caught. Nothing is at risk beyond your patience — every
|
|
261
|
+
task runs in its own git worktree and auto merge is off by default — but if you need a
|
|
262
|
+
boring day, stay on the stable release. Pin a nightly you liked with its exact
|
|
263
|
+
version (`npx hsq@<nightly-version>` — the cockpit prints the
|
|
264
|
+
version it booted, and the date in it tells you how old the build is), and drop
|
|
265
|
+
back to stable any time with a plain `npx hsq`.
|
|
266
|
+
|
|
267
|
+
### Preview builds
|
|
268
|
+
|
|
269
|
+
Every green CI run also publishes an installable npm snapshot
|
|
270
|
+
([how it works](docs/publishing.md)), so you can try code that has not even
|
|
271
|
+
merged yet:
|
|
272
|
+
|
|
273
|
+
```bash
|
|
274
|
+
npx hsq@dev # current main head
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
Every pull request gets its own preview too — the CI bot posts a sticky comment
|
|
278
|
+
on the PR with the exact pinned version to copy-paste
|
|
279
|
+
(`npx hsq@<version>-pr<N>.<run>`). Nightlies and previews are all
|
|
280
|
+
prerelease versions under their own dist-tags; a plain `npx hsq` always
|
|
281
|
+
resolves to the latest stable release.
|
|
282
|
+
|
|
283
|
+
---
|
|
284
|
+
|
|
285
|
+
## How it works
|
|
286
|
+
|
|
287
|
+
You describe a task. Squawk runs it as a **workflow** — an ordered list of agent
|
|
288
|
+
steps and shell checks — shelling out to your locally installed agent CLI
|
|
289
|
+
(Claude Code by default; Codex, OpenCode, Cursor, pi and OMP are drop-in
|
|
290
|
+
alternatives, per task or per step). Each task gets its own git worktree; the
|
|
291
|
+
cockpit streams every event live and leaves the diff on the task's branch for
|
|
292
|
+
you to inspect.
|
|
293
|
+
|
|
294
|
+
```
|
|
295
|
+
you type a task
|
|
296
|
+
│
|
|
297
|
+
▼
|
|
298
|
+
┌─────────────┐ optional: Plan → AI drafts a chain of steps you approve
|
|
299
|
+
│ workflow │ (agent steps + shell checks, with bounded onFail retries)
|
|
300
|
+
└─────────────┘
|
|
301
|
+
│
|
|
302
|
+
▼
|
|
303
|
+
┌──────────────────────────────┐ ┌────────────────────────────────┐
|
|
304
|
+
│ git worktree per task │ │ agent CLI (your login) │
|
|
305
|
+
│ (isolated branch, parallel) │◄───►│ claude · codex · opencode · │
|
|
306
|
+
└──────────────────────────────┘ │ cursor · pi · omp │
|
|
307
|
+
│ │ Bash open · no prompts │
|
|
308
|
+
│ └────────────────────────────────┘
|
|
309
|
+
│ agent text · tool calls · tool results · tokens · cost
|
|
310
|
+
▼
|
|
311
|
+
┌─────────────┐ SSE (replay + live) ┌──────────────────────────┐
|
|
312
|
+
│ .ai/cezar/ │ ──────────────────────► │ cockpit localhost:4321 │
|
|
313
|
+
│SQLite·NDJSON│ │ Tasks · Git · GitHub · │
|
|
314
|
+
│ ·Markdown │ │ Skills · Workflows │
|
|
315
|
+
└─────────────┘ └──────────────────────────┘
|
|
316
|
+
│
|
|
317
|
+
read the diff → send notes back ·
|
|
318
|
+
draft PR · finish
|
|
319
|
+
```
|
|
320
|
+
|
|
321
|
+
When a check fails, the workflow can loop back to an earlier step (bounded by
|
|
322
|
+
`max`) with the failing output appended to the retried agent's prompt. By default,
|
|
323
|
+
a finished run's changes stay on its branch until you act on them. A task can opt
|
|
324
|
+
into merging its PR after Done, subject to current-head CI and GitHub rules.
|
|
325
|
+
With the optional review gate on, a run with changes rests in `review` instead
|
|
326
|
+
of `done`.
|
|
327
|
+
|
|
328
|
+
---
|
|
329
|
+
|
|
330
|
+
## Core concepts
|
|
331
|
+
|
|
332
|
+
Three words, no jargon — **task**, **skill**, **chain**:
|
|
333
|
+
|
|
334
|
+
- 📋 **Tasks** are the unit of work. Every task is a **run**: `queued → running →
|
|
335
|
+
review / done / failed / cancelled`, with a live event log, per-step token and
|
|
336
|
+
cost usage, cancel/delete, and — for anything with a diff — a reviewable branch. Attach
|
|
337
|
+
screenshots, PDFs, `.txt` or `.md` files to the task (paperclip, ⌘V or drag-drop;
|
|
338
|
+
the agent gets each one as a real file on disk), or send follow-up messages into
|
|
339
|
+
the live session while it works.
|
|
340
|
+
- 📖 **Skills** are Markdown playbooks. Drop them in `.ai/skills/` or
|
|
341
|
+
`.ai/cezar/skills/`, or pull them from a shared **team skills repo** you name
|
|
342
|
+
in `skillsRepos` (a bare git clone cached globally in `<cache>/`). There is no
|
|
343
|
+
default team repo. Add, remove, enable and disable team repos on the **Skills** page,
|
|
344
|
+
which writes `skillsRepos` for you, and each team skill has its own on/off switch per project. A workflow step references one by
|
|
345
|
+
`skill: <name>` and its body becomes the agent's extra system prompt — so you
|
|
346
|
+
shape *how* the agent reasons without touching code.
|
|
347
|
+
- 🔗 **Chains (workflows)** stitch steps into a pipeline: agent steps plus shell
|
|
348
|
+
checks, with bounded `onFail` retry loops. Write the YAML yourself, build one by
|
|
349
|
+
drag-ordering skills in the **Workflows** tab, or press **Plan first** and let the
|
|
350
|
+
AI draft a chain for your task that you review, trim and start. The built-in
|
|
351
|
+
`quick-task` (one agent step) works with zero setup.
|
|
352
|
+
|
|
353
|
+
The moves that make the cockpit worth the browser tab:
|
|
354
|
+
|
|
355
|
+
- 🗃️ **Queue + orchestration.** Start as many tasks as you like: Squawk runs up to
|
|
356
|
+
`maxParallel` at once across every project (default **2**; a non-git directory
|
|
357
|
+
always runs one, until its first commit lifts that limit within a minute) and
|
|
358
|
+
holds the rest in a FIFO queue with visible positions (`#1`, `#2`, …). Cancel a
|
|
359
|
+
queued task before it starts; the queue even survives a cockpit restart —
|
|
360
|
+
everything still `queued` is re-enqueued in order. It's the orchestration layer
|
|
361
|
+
that turns "one agent at a time" into a backlog that drains itself.
|
|
362
|
+
- 🧠 **Memory-aware runs.** Each run's whole process tree is sampled (~2 s) for CPU
|
|
363
|
+
and RSS, and its **peak memory** is recorded and shown in the task table. Set an
|
|
364
|
+
optional per-task **memory ceiling** (`memoryLimitMb`) and a run that crosses it
|
|
365
|
+
is *paused* — freeing its tree so the queue keeps advancing — and resumes on
|
|
366
|
+
demand. Event logs are append-only NDJSON and streamed rather than re-serialized,
|
|
367
|
+
and live UI deltas are coalesced so they never hit disk.
|
|
368
|
+
- 🧹 **Bounded worktree disk.** Each task runs in its own full checkout, so a busy
|
|
369
|
+
cockpit would otherwise grow without limit. Squawk keeps only the last
|
|
370
|
+
`worktreeRetention` **finished** worktrees on disk (default **10**; `0` =
|
|
371
|
+
unlimited) and reclaims the rest — directory only, the `cez/<id8>` branch is
|
|
372
|
+
kept, so the work stays recoverable. Once a branch's work is on the base, or
|
|
373
|
+
its exact PR merged, a background sweep deletes the local branch (a task's
|
|
374
|
+
merged PR branch and its unused starter too); unmerged work, open PRs and
|
|
375
|
+
your own branches stay. Settings → Resources shows every
|
|
376
|
+
worktree's disk use with per-row delete and a **Reclaim now** button.
|
|
377
|
+
- 🛡️ **You control merging.** Read a finished run's diff, type notes that go
|
|
378
|
+
straight back into the agent's session, or push a `gh pr create --draft`.
|
|
379
|
+
Auto merge is off by default and requires a task to opt in. The **review gate** is optional (`HSQ_REVIEW_GATE=1` (`CEZ_REVIEW_GATE` fallback), or
|
|
380
|
+
Settings → Agents): with it on, a successful run with changes parks in `review`
|
|
381
|
+
until you accept it. Autonomous runs always skip it.
|
|
382
|
+
- 🗂️ **Every project in one cockpit.** One `hsq serve` hosts every repo you
|
|
383
|
+
register; the desktop rail switches between them, and **All tasks** shows every
|
|
384
|
+
project's tasks in one table. See
|
|
385
|
+
[Multiple projects, one cockpit](#multiple-projects-one-cockpit).
|
|
386
|
+
- 👥 **Owned workers.** A task's agent can spawn its own tracked workers — on the
|
|
387
|
+
same or another runner — message them, and collect their diffs; you still review
|
|
388
|
+
the result. Each task has an **Allow Squawk workers** switch, on by default. See
|
|
389
|
+
[Owned workers](#owned-workers).
|
|
390
|
+
- 📱 **Runs on your coding server, drives from your pocket.** The cockpit is a
|
|
391
|
+
responsive web app streaming over SSE, so the box running Squawk can be a
|
|
392
|
+
**VPS, cloud, or dedicated server** you never sit in front of. Point a browser
|
|
393
|
+
— laptop or **phone** — at it and run an **always-on coding team** on the move:
|
|
394
|
+
start tasks, watch them live, and review their diffs from anywhere.
|
|
395
|
+
|
|
396
|
+
---
|
|
397
|
+
|
|
398
|
+
## Cockpit tour
|
|
399
|
+
|
|
400
|
+
Task and project views share one browser window and live updates over Server-Sent Events:
|
|
401
|
+
|
|
402
|
+
| View | What's in it |
|
|
403
|
+
|---|---|
|
|
404
|
+
| **Tasks** | Every task with its status, live event stream (agent text · tool calls · tool results · pasted/generated screenshots and file attachments), tokens and cost. Continue, cancel, open in terminal (`claude --resume`), review the diff, or push a draft PR. |
|
|
405
|
+
| **All tasks** | Every *registered project's* tasks in one table, filtered and grouped by tag, project, status or workflow — see [Grouping connected repositories](#grouping-connected-repositories-tags-and-the-all-tasks-page). Appears once a second project is registered. |
|
|
406
|
+
| **Activity** | What each active task and worker does or waits for right now, and the open requests between tasks as lines. Live without a reload. **All projects** shows one panel per project. |
|
|
407
|
+
| **Git** | In **More**. Branch, working-tree status, diff vs HEAD, recent commits (click one for its inline patch + GitHub link), and the configurable base branch that worktrees fork from and PRs target. |
|
|
408
|
+
| **GitHub** | Open issues and PRs of the repo's origin, read through your logged-in `gh`. Hand an issue straight to the agent — pick a workflow and skills, one click runs it. |
|
|
409
|
+
| **Skills** | Local skills plus any team skills repos you configured, each team skill with a per-project switch, and a rendered body + prompt preview. Refresh pulls the latest from the remote. |
|
|
410
|
+
| **Workflows** | Build a chain by drag-ordering skills, save it as portable YAML, import/export, or delete. Built-ins always come back. |
|
|
411
|
+
| **Settings** | Appearance (dark/light theme, accent, density), agent backends, notifications, and the skills catalog. |
|
|
412
|
+
|
|
413
|
+
The cockpit is a React app served pre-built from the package — `npx hsq`
|
|
414
|
+
still means no build step and no dev server on your machine — with a dark/light
|
|
415
|
+
theme, a ⌘K command palette, and bookmarklets that launch a task straight from
|
|
416
|
+
a GitHub page.
|
|
417
|
+
|
|
418
|
+
GitHub issue and PR lists refresh every 60 seconds while mounted in a foreground browser tab.
|
|
419
|
+
Automatic reads retain the server's 60-second cache: while online and visible, upstream edits
|
|
420
|
+
appear within 120 seconds plus request time. Revisiting or focusing stale data fetches again;
|
|
421
|
+
server reconnects invalidate cached lists. Hidden and unmounted lists do not poll. **Refresh**
|
|
422
|
+
bypasses the server cache immediately and refreshes the selected thread too.
|
|
423
|
+
|
|
424
|
+
---
|
|
425
|
+
|
|
426
|
+
## Multiple projects, one cockpit
|
|
427
|
+
|
|
428
|
+
One `hsq serve` hosts **every repo you work in**, not just the one you started
|
|
429
|
+
it in. Each repo Squawk boots in registers itself in a per-user registry at
|
|
430
|
+
`<config>/config.json` — the workspace file that also holds the global knobs
|
|
431
|
+
(the parallel cap, the memory ceiling, the browse root, and the checkout root). Nothing is added to
|
|
432
|
+
the repo: per-project state stays in that repo's `.ai/squawk/` (or `.ai/cezar/`
|
|
433
|
+
until the project moves).
|
|
434
|
+
|
|
435
|
+
Every view is project-scoped:
|
|
436
|
+
|
|
437
|
+
```
|
|
438
|
+
/p/<projectId>/ tasks · activity · git · github · skills · workflows · reports · settings
|
|
439
|
+
```
|
|
440
|
+
|
|
441
|
+
`<projectId>` is a slug derived from the folder name (`my-app`, then `my-app-2`
|
|
442
|
+
on a collision), and `/p/default/…` always means the project Squawk was started
|
|
443
|
+
in. The desktop rail selects the project. Its sidebar shows the project header,
|
|
444
|
+
view tabs and task list, ordered **Needs you → Finished → Working**.
|
|
445
|
+
Pins stay first within their status section and do not spend the default ten-row
|
|
446
|
+
budget; Finished takes priority over Working when that budget fills up. Each
|
|
447
|
+
section starts expanded and folds independently using its heading (click, Enter
|
|
448
|
+
or Space). Folding is remembered per browser, project and section, separately
|
|
449
|
+
from folding a project. Folded headings keep full task counts and attention
|
|
450
|
+
indicators, including tasks outside the visible row limit. These controls work
|
|
451
|
+
in the mobile drawer too. **Archive all** appears only on Finished and archives
|
|
452
|
+
all eligible unpinned tasks, including hidden rows; individual archive actions
|
|
453
|
+
and Undo remain available. Archived keeps its existing history view.
|
|
454
|
+
The view tabs are Tasks, Activity, GitHub, Skills and Settings. More views holds Git,
|
|
455
|
+
Workflows and Reports, and Automations when enabled. The project menu
|
|
456
|
+
offers Mark all read and project settings; local mode also offers Open in and
|
|
457
|
+
Copy path. Active/Archived remains below the Tasks heading. The new-task
|
|
458
|
+
composer names the project it will run in.
|
|
459
|
+
|
|
460
|
+
**Adding a project** — the **+** button on the desktop rail (or in the mobile
|
|
461
|
+
navigation drawer):
|
|
462
|
+
|
|
463
|
+
- ✨ **New project…** creates a git repository with one empty commit in the checkout
|
|
464
|
+
root and registers it. Optionally — only when you switch it on — it also creates a
|
|
465
|
+
**private** GitHub repository under your account or one of your organizations, empty or
|
|
466
|
+
from a GitHub template. If GitHub setup fails after the repository exists, the local
|
|
467
|
+
project is kept and the dialog shows the command that finishes it. A hosted cockpit
|
|
468
|
+
creates local projects only.
|
|
469
|
+
- 📂 **Open local folder…** browses from the configured browse root
|
|
470
|
+
(**Settings → Projects**, default `~/`) in a folder picker and
|
|
471
|
+
registers the folder you pick.
|
|
472
|
+
- ⬇️ **Clone from GitHub…** clones with your logged-in `gh` into the checkout
|
|
473
|
+
root (**Settings → Projects**, default `~/cezar/projects`) with live progress,
|
|
474
|
+
then registers the clone. Close the dialog and the clone is killed and its
|
|
475
|
+
partial directory removed. For a SAML-protected organization, follow **Authorize
|
|
476
|
+
this GitHub organization**, authorize in GitHub, then return to retry once (or
|
|
477
|
+
choose **Retry clone**). Original errors remain available under **Error details**.
|
|
478
|
+
Clones use HTTPS and save the GitHub CLI credential helper in the new repository
|
|
479
|
+
so later pushes use the same organization grant, even if `gh` prefers SSH.
|
|
480
|
+
|
|
481
|
+
Removing a project (**Settings → Projects**) drops the registry entry only — the
|
|
482
|
+
repo and its `.ai/cezar/` are never touched, so re-adding it later finds all its
|
|
483
|
+
tasks intact. The project Squawk is currently serving can't be removed: it
|
|
484
|
+
re-registers itself at the next start.
|
|
485
|
+
|
|
486
|
+
**From the terminal** — the same registry, no cockpit required (handy over ssh):
|
|
487
|
+
|
|
488
|
+
```bash
|
|
489
|
+
hsq backup list [<file>] # list rotating config.json / agent-accounts.json backups
|
|
490
|
+
hsq backup restore <file> [--at <time>] # restore JSON only; account folders are unchanged
|
|
491
|
+
hsq projects # list: id, branch or status, path, tags
|
|
492
|
+
hsq projects add ~/code/api # register a folder (defaults to the current repo)
|
|
493
|
+
hsq projects remove api # drop the registry entry; the repo is untouched
|
|
494
|
+
hsq projects tag api storefront backend # set the grouping tags (no tags clears them)
|
|
495
|
+
```
|
|
496
|
+
|
|
497
|
+
These read and write `<config>/config.json` directly, so they work with the
|
|
498
|
+
server stopped, and `HSQ_HOME` (`CEZ_HOME` fallback) selects which workspace they operate on.
|
|
499
|
+
|
|
500
|
+
Settings split along the same line: **General** (the project's folder, its
|
|
501
|
+
registry facts, its parallel-task ceiling, and Remove), **Agents**, **Agent config**,
|
|
502
|
+
**Worktrees**, **Sidebar**, **Bookmarklets** and **Prompt templates** describe one
|
|
503
|
+
repo and live under `/p/<projectId>/settings`; **Appearance**,
|
|
504
|
+
**Notifications**, **Resources**, **Skills**, **Agent accounts** and **Projects**
|
|
505
|
+
are yours or the machine's and live at `/settings/global`.
|
|
506
|
+
|
|
507
|
+
**Settings → Sidebar** controls this project's task rows on desktop and mobile.
|
|
508
|
+
Set **Overall**, **Needs You**, **Finished**, and **Working** to a positive whole
|
|
509
|
+
number or **Unlimited**. Defaults are 10 overall and Unlimited for each section.
|
|
510
|
+
The overall budget is allocated in section order (Needs You, Finished, Working),
|
|
511
|
+
and each section must also fit its own limit. Unlimited removes only its selected
|
|
512
|
+
constraint. Pinned rows and groups containing pins bypass both budgets; a grouped
|
|
513
|
+
task counts as one row. Archived uses only the overall limit, with no pin exemption.
|
|
514
|
+
Save applies the preferences to this project and keeps them after a reload.
|
|
515
|
+
Refreshed preferences update an untouched form; unsaved edits stay in place.
|
|
516
|
+
Malformed stored sidebar limits fall back field by field to these defaults,
|
|
517
|
+
while valid limits and unrelated preferences are preserved.
|
|
518
|
+
|
|
519
|
+
On desktop, Settings replaces the sidebar task list with two groups: **This project**
|
|
520
|
+
and **Global · every project**. Each group includes General and its available sections;
|
|
521
|
+
the current section is highlighted, and the main page shows its content. On mobile,
|
|
522
|
+
the section picker and General page's section cards provide navigation.
|
|
523
|
+
|
|
524
|
+
The GitHub sidebar groups **Issues** (Assigned to me, No task yet, Has a task,
|
|
525
|
+
All open) and **Pull requests** (Review requested, Mine, Checks failing, All open).
|
|
526
|
+
Selecting a filter updates the URL, so reloading keeps that selection. The issue
|
|
527
|
+
list, detail pane and Hand to agent action stay in the main area. On mobile, the
|
|
528
|
+
GitHub tab opens the filter screen; selecting a row opens its list.
|
|
529
|
+
|
|
530
|
+
Has a task and No task yet use issue references from this project's non-archived
|
|
531
|
+
tasks, excluding references to other repositories. The list loads 50 rows at a time
|
|
532
|
+
and loads the next page as you scroll toward its end. The tabs and All open show
|
|
533
|
+
GitHub's exact open totals. A preset count shows a `+` while more pages remain
|
|
534
|
+
unloaded, and a search count shows one when the search reaches its result limit;
|
|
535
|
+
an unavailable count is not shown as zero. Filtering by search, label, assignee or
|
|
536
|
+
board narrows the loaded rows; while it is on, the next page loads only when you press
|
|
537
|
+
Load more.
|
|
538
|
+
|
|
539
|
+
The `body` field on `GET /api/v1/github` list rows is deprecated. It is still sent,
|
|
540
|
+
and a later minor removes it; read an item's body from the comments route's `detail`. Views without their own navigation still show tasks in the sidebar.
|
|
541
|
+
|
|
542
|
+
Open an issue to see **Linked tasks (N)** beneath its heading. Each row opens a task
|
|
543
|
+
in the current project and shows its title, status and date, newest first. Archived
|
|
544
|
+
tasks remain listed with an **Archived** label, so diagnosis and implementation
|
|
545
|
+
sessions are both reachable.
|
|
546
|
+
|
|
547
|
+
The Git sidebar lists **Task worktrees** that still exist on disk, including retained
|
|
548
|
+
worktrees from finished tasks. Each row shows its branch, task title, status and
|
|
549
|
+
available diff counts, and opens that task's Changes tab. Reclaimed worktrees disappear
|
|
550
|
+
from the list. Changes, Commits and Branches remain tabs in the main repository header.
|
|
551
|
+
On mobile, Git sits in the More sheet and opens the worktree list; **Open repository** opens the repository
|
|
552
|
+
view, and **Back to worktrees** returns to the list.
|
|
553
|
+
|
|
554
|
+
### Grouping connected repositories: tags and the All tasks page
|
|
555
|
+
|
|
556
|
+
Work rarely stops at a repo boundary. A storefront is an API, a web app and a
|
|
557
|
+
design system; a platform is a handful of services plus the infra that runs
|
|
558
|
+
them. **Tags** are how you say so, and **All tasks** is where saying so pays off.
|
|
559
|
+
|
|
560
|
+
**Tag a repo** in **Settings → Projects**: type into the *Tags* cell on its row
|
|
561
|
+
and press Enter (comma works too; the × on a chip, or Backspace in an empty
|
|
562
|
+
field, removes one). The field **autocompletes from the tags already used in the
|
|
563
|
+
workspace** — click the field to see them all, arrow keys and Enter to pick —
|
|
564
|
+
which is what keeps the second repo landing on the first one's spelling instead
|
|
565
|
+
of inventing `store-front` next to `storefront`. Anything not on the list is
|
|
566
|
+
just typed. A tag is a free-form label — `storefront`, `infra`, `client-acme` —
|
|
567
|
+
and a project can carry several, because a repo can belong to more than one
|
|
568
|
+
piece of work. Tags are trimmed, deduplicated case-insensitively (`API` and
|
|
569
|
+
`api` are one tag) and stored in `<config>/config.json` beside the rest of the
|
|
570
|
+
registry, so they are yours and this machine's, never something added to the
|
|
571
|
+
repo.
|
|
572
|
+
|
|
573
|
+
**All tasks** — the layers icon on the desktop rail, `/tasks`, or `⌘K → All tasks` —
|
|
574
|
+
then shows every registered project's work in one table:
|
|
575
|
+
|
|
576
|
+
- **Filter** by tag, status and workflow. Tags are one-click chips; status and
|
|
577
|
+
workflow are searchable multi-selects. Every facet ORs inside itself and ANDs
|
|
578
|
+
across, so *"anything running or waiting in storefront or infra"* is one set
|
|
579
|
+
of clicks. Each option carries how many tasks it would leave, so a filter that
|
|
580
|
+
would empty the table says so before you click it. The search box matches
|
|
581
|
+
title, project, workflow, branch and tags.
|
|
582
|
+
- **Group by** tag, project, status or workflow — click the pressed one again to
|
|
583
|
+
ungroup. Grouping by tag is the reason tags exist: three repos tagged
|
|
584
|
+
`storefront` become one section, and a repo tagged twice appears under both —
|
|
585
|
+
it genuinely belongs to both.
|
|
586
|
+
|
|
587
|
+
The filters, the grouping and the Active/Archived tab live in the **URL**, so a
|
|
588
|
+
filtered view survives a refresh, pastes into a chat, and sits in a bookmark —
|
|
589
|
+
`/tasks?tag=storefront&status=running&group=tag` is a link to exactly what you
|
|
590
|
+
were looking at. Only what you changed shows up: Active is the default, so the
|
|
591
|
+
Archived view is `?archived=1` and a normal link carries no key for it.
|
|
592
|
+
|
|
593
|
+
Each row shows **every** PR and issue it references — a task opened on an issue
|
|
594
|
+
that landed a PR shows both — plus its cost and live CPU/memory, and can be
|
|
595
|
+
marked **read/unread** (the eye) or **archived** (or restored) right there. Every task title, project name and project group heading links into that
|
|
596
|
+
project, so the thread, its diff and its worktree are one click away and stay
|
|
597
|
+
exactly where they were. Returning to a long thread restores its saved row measurements
|
|
598
|
+
once the replay has rebuilt the same ordered messages, keeping the same content in view.
|
|
599
|
+
Scrolling, jumping to the latest message, or loading different history takes ownership
|
|
600
|
+
from that restoration; a thread left at its live tail follows the current tail.
|
|
601
|
+
|
|
602
|
+
There is deliberately **no project filter**: narrowing this page to one project
|
|
603
|
+
is that project's own Tasks page, which is a better version of the same answer
|
|
604
|
+
(live updates, the full column set, the composer). So picking a project *leaves*
|
|
605
|
+
for it rather than turning the global view into a worse local one.
|
|
606
|
+
|
|
607
|
+
Nothing else in Squawk reads tags, on purpose: a tag is a lens, not a permission,
|
|
608
|
+
a queue or a routing rule. Removing one changes what you see and nothing else.
|
|
609
|
+
|
|
610
|
+
> The page reads a workspace-wide index capped at the newest 200 tasks per
|
|
611
|
+
> project — it says so, and names the projects it capped, rather than showing a
|
|
612
|
+
> short list as if it were complete. Older tasks are always in that project's own
|
|
613
|
+
> Tasks page.
|
|
614
|
+
|
|
615
|
+
**Old page URLs keep working.** Every unprefixed page path — `/`, `/tasks/<id>`,
|
|
616
|
+
`/settings` — still answers, bound to the project Squawk was started in; the
|
|
617
|
+
cockpit redirects flat paths to their `/p/<boot>/…` twin, so existing bookmarks
|
|
618
|
+
and bookmarklets need no change. The HTTP API is the exception: it moved to
|
|
619
|
+
`/api/v1/…` (see the CHANGELOG), so a script that calls it needs the extra
|
|
620
|
+
segment.
|
|
621
|
+
|
|
622
|
+
> **Hosted cockpit?** The folder picker is confined to the independent browse
|
|
623
|
+
> root. Set `HSQ_BROWSE_ROOT` (`CEZ_BROWSE_ROOT` fallback) narrowly before first boot (or save it in
|
|
624
|
+
> **Settings → Projects**) when a remote viewer should not enumerate the host's
|
|
625
|
+
> whole home. Clones continue to use the separate checkout root.
|
|
626
|
+
|
|
627
|
+
---
|
|
628
|
+
|
|
629
|
+
## Waiting for PR checks, merges and timers
|
|
630
|
+
|
|
631
|
+
An agent waits on something outside its turn with `cezar_wait`. With `kind: "pr"` and
|
|
632
|
+
a GitHub PR URL in `pr`, Squawk watches the PR outside the model: its checks
|
|
633
|
+
(`until: "checks"`, the default), its eventual merge (`until: "merge"`), or a merge
|
|
634
|
+
the agent has requested (`until: "merge_or_blocked"`). The last target wakes when
|
|
635
|
+
the PR merges, closes, conflicts, or is neither queued nor scheduled for auto-merge.
|
|
636
|
+
It includes any known queue-removal or auto-merge-disable reason. A pending queue
|
|
637
|
+
slot or enabled auto-merge keeps it open. The ordinary merge target ignores queue
|
|
638
|
+
removal; use `wake_on_conflict: false` for a dependency wait that also ignores
|
|
639
|
+
conflicts. Only `merged` confirms success. The optional
|
|
640
|
+
`timeout_seconds` defaults to 1,800 and accepts 1–7,200. With `kind: "timer"`,
|
|
641
|
+
`seconds` (60–7,200) and an optional `note`, Squawk wakes the agent at that time and
|
|
642
|
+
hands the note back. No authored configuration or worker delegation permission is
|
|
643
|
+
needed. A PR wait requires `gh`, access to the repository, and a supported GitHub
|
|
644
|
+
host; GitHub Enterprise hosts must already be recognized by the forge/auth
|
|
645
|
+
configuration. Tool startup itself makes no GitHub request. With **Monitoring
|
|
646
|
+
wake-up** turned off in **Settings → Resources**, `cezar_wait` refuses a timer
|
|
647
|
+
(`timers_disabled`); once the automatic-wake budget of 40 is spent, it refuses one
|
|
648
|
+
with `wake_budget_spent`, and a run with nothing else to wait on waits for you. The
|
|
649
|
+
budget is kept on the task, so a cockpit restart keeps it; a message from you or a
|
|
650
|
+
Continue starts it again.
|
|
651
|
+
|
|
652
|
+
A CI wait stays pending while any GitHub Actions workflow run on its captured
|
|
653
|
+
head commit is incomplete, even when a rerun temporarily hides that run's checks.
|
|
654
|
+
It checks again every 30 seconds within the original deadline. Once those runs
|
|
655
|
+
complete, it reads the checks again to decide the result. A result describes what
|
|
656
|
+
GitHub reported; it does not predict workflows that have not appeared yet or grant
|
|
657
|
+
merge approval.
|
|
658
|
+
|
|
659
|
+
A merge wait (`until: "merge"`, hearsay-tools/cezarion#1425) reads the PR's state at
|
|
660
|
+
once and then every 30 seconds within its deadline. It ends as `merged` only when
|
|
661
|
+
GitHub reports the PR merged, with the merge time and merge commit when GitHub gives
|
|
662
|
+
them, and as `closed` when the PR closed without merge. Green checks keep it open,
|
|
663
|
+
and so does a new head commit. A merge wait holds none of the four watcher slots, so
|
|
664
|
+
long merge waits never delay a checks wait. By default both targets also end as
|
|
665
|
+
`conflicting` when the PR has merge conflicts. Set `wake_on_conflict: false` when the
|
|
666
|
+
agent watches a PR it does not own, such as another agent's PR its work depends on:
|
|
667
|
+
it cannot resolve those conflicts. With `until: "checks"`, GitHub often runs no
|
|
668
|
+
workflows on a conflicting PR, so such a wait usually ends as `no_checks` or at its
|
|
669
|
+
deadline. A checks wait and a merge wait on the same PR are two waits.
|
|
670
|
+
|
|
671
|
+
The agent asks you with `cezar_ask`, a card of one to four questions in the ask
|
|
672
|
+
format. A question with two to four options shows them as choices; a question without
|
|
673
|
+
options is open, and the card shows a text box for your answer. The task reads Needs
|
|
674
|
+
you once the turn ends, and your next message answers it. `cezar_wait` takes PR, worker, request,
|
|
675
|
+
peer, process and timer waits only, and points an agent that asks it for a human wait to `cezar_ask`. A run
|
|
676
|
+
has one question to you at a time, and the agent cannot cancel it once you have seen
|
|
677
|
+
it. A native question opens the same kind of wait. When the work is
|
|
678
|
+
done and verified, the agent calls `cezar_done` (an optional `summary`), and the task
|
|
679
|
+
finishes at the end of that turn: its open waits are cancelled and the summary is
|
|
680
|
+
written as a note. In a workflow step that is not the last, `cezar_done` finishes that step
|
|
681
|
+
and Squawk starts the next one. `cezar_done` refuses while owned workers are live or uncollected,
|
|
682
|
+
a worker question is unanswered or a question to you is still pending, and says what to do first. An
|
|
683
|
+
autonomous task does not wait for you until its automatic-wake budget is spent.
|
|
684
|
+
|
|
685
|
+
A run can have several waits open at once, up to 16. Each answer carries the
|
|
686
|
+
wait's id, its absolute deadline and the list of waits still open, and
|
|
687
|
+
`cezar_cancel_wait` closes one by its id. The agent ends its turn to wait, with no
|
|
688
|
+
marker required. The run is then `waiting`, and the pill reads **waiting for CI**,
|
|
689
|
+
**waiting for merge** or **monitoring** rather than Needs you. The header lists every open wait: **Waiting
|
|
690
|
+
for CI — owner/repo#N** or **Waiting for merge — owner/repo#N** with a PR link and the deadline, or **Next automatic check**
|
|
691
|
+
with its time and note. **CI result ready — waiting for capacity** means the
|
|
692
|
+
observation is owed to the agent and its wake turn has not started yet. A run parked
|
|
693
|
+
on CI or a timer keeps its agent slot, a monitoring slot when one is free, so the
|
|
694
|
+
wake usually starts at once. Claude's `ScheduleWakeup` opens a timer in the same list.
|
|
695
|
+
|
|
696
|
+
Every agent session needs these tools. Squawk starts a private local socket for them,
|
|
697
|
+
in the system temporary directory, when the first session of a cockpit launches. If it
|
|
698
|
+
cannot start, for example because that directory is full or not writable, the task fails
|
|
699
|
+
before the agent starts. The error names the cause and the fix: free space or fix the
|
|
700
|
+
permissions, then Continue the task. A task woken by a wait retries with the usual backoff.
|
|
701
|
+
The cockpit and other tasks keep working, and the next launch tries again.
|
|
702
|
+
|
|
703
|
+
Squawk reports passed, failed, cancelled or skipped checks, no checks, changed head,
|
|
704
|
+
timeout or an operational error. It watches the registered commit: a new PR head
|
|
705
|
+
is reported separately, and the agent decides whether to wait again. The first
|
|
706
|
+
observation runs immediately. Later check-status and PR-head polls run every 30
|
|
707
|
+
seconds, and no setting changes that interval. Four watchers run concurrently;
|
|
708
|
+
queued waits retain their original deadline. Results are bounded
|
|
709
|
+
observations, not merge approval or evidence that every expected workflow appeared.
|
|
710
|
+
The agent still decides its next action; CI success never completes the task or
|
|
711
|
+
accepts review. A wait ends only when its own result arrives, its deadline passes,
|
|
712
|
+
or someone cancels it: the agent with `cezar_cancel_wait`, or Squawk when the task
|
|
713
|
+
is stopped, finished, cancelled or deleted. A human message wakes the agent without
|
|
714
|
+
closing any wait, and every delivered turn ends with a list of the waits still open.
|
|
715
|
+
CI never answers a pending human question. If the agent's session fails or closes while a
|
|
716
|
+
result is owed, Squawk retries the delivery after 15 and then 30 seconds; a third
|
|
717
|
+
failure marks the task failed and keeps the result. Continue delivers it, and Stop
|
|
718
|
+
discards it and leaves the task failed.
|
|
719
|
+
Controller recovery can replay an
|
|
720
|
+
observation after an ambiguous delivery checkpoint, identified by its stable
|
|
721
|
+
lifecycle input ID.
|
|
722
|
+
|
|
723
|
+
The deprecated `cezar_wait_for_ci` tool was removed (hearsay-tools/cezarion#1236):
|
|
724
|
+
call `cezar_wait` with `kind: "pr"` instead. `kind: "ci"` itself was replaced by
|
|
725
|
+
`kind: "pr"` (hearsay-tools/cezarion#1425) and is refused with a message that names
|
|
726
|
+
the new spelling.
|
|
727
|
+
|
|
728
|
+
The adapters are bundled for Claude (including `claude-cli`), Codex, OpenCode,
|
|
729
|
+
Cursor, Pi and OMP. Internal socket/capability environment values are runtime wiring,
|
|
730
|
+
not settings to create or share. If the tool is unavailable or denied, its error
|
|
731
|
+
is surfaced while ordinary tasks continue. See [the CI-wait protocol](AGENT_PROTOCOL.md#ci-wait-tool-contract-474)
|
|
732
|
+
for the owners of the limits and the harness evidence required before a runner ships.
|
|
733
|
+
|
|
734
|
+
## Discover runners and models
|
|
735
|
+
|
|
736
|
+
Inspect the same host catalog the cockpit uses before selecting a runner or model:
|
|
737
|
+
|
|
738
|
+
```sh
|
|
739
|
+
hsq discover runners
|
|
740
|
+
hsq discover models --runner=codex
|
|
741
|
+
```
|
|
742
|
+
|
|
743
|
+
Both commands return JSON. `runners` lists connection status (`connected`, `disconnected`, `not-installed`, or `unknown`) and enablement, with `scope: "host-default-account"`. Model rows include `effortLevels` when the runner advertises them: an absent field means unknown; an empty array means no advertised levels. Omit `--effort` when spawning to keep the existing default. Model responses retain `source`, `stale`, and any unavailable `reason`; discovery never invents model IDs or effort support.
|
|
744
|
+
|
|
745
|
+
For operators, the command finds the running cockpit for the current checkout; `--repo`, `--url`, and `HSQ_URL` (`CEZ_URL` fallback) work as they do for `hsq task`. A missing cockpit returns an error and never starts a server. Inside a parent delegation session, the same command uses that session's authenticated controller, including headless runs. It rejects `--url` and `--repo` in that context and never falls back to a public cockpit after an authentication failure. Owned workers cannot use the private discovery route.
|
|
746
|
+
|
|
747
|
+
The catalog describes host default accounts, not every named account or the selections permitted by a task's model locks and workflow pins.
|
|
748
|
+
|
|
749
|
+
## Parallel variant removal
|
|
750
|
+
|
|
751
|
+
Parallel variants (×2/×3) are removed in the next breaking minor release (0.17).
|
|
752
|
+
The owner chose immediate removal without a deprecation window
|
|
753
|
+
(hearsay-tools/cezarion#1542). The composer starts one task. `POST /api/v1/runs`
|
|
754
|
+
refuses `variants: 2` or `3` with `400`; it never turns them into one candidate.
|
|
755
|
+
The old `variants: 1` spelling still means an ordinary run.
|
|
756
|
+
|
|
757
|
+
The compare page and its group routes are retired too (hearsay-tools/cezarion#1760).
|
|
758
|
+
Historical `groupId` and `variant` fields remain stored, and old variant runs list as
|
|
759
|
+
ordinary tasks. Old `/compare/:groupId` links, including project-scoped links, open the
|
|
760
|
+
task list. No retirement migration deletes runs, branches or worktrees;
|
|
761
|
+
normal retention and explicit cleanup still apply. Saved multi-candidate drafts and
|
|
762
|
+
automations offer **Use one task** before saving or launching. A saved automation with
|
|
763
|
+
`task.variants > 1` reports an error on launch; edit it to remove that field or set it to `1`.
|
|
764
|
+
|
|
765
|
+
For explicit comparison, ask a task: “Spawn two owned workers from the same committed
|
|
766
|
+
baseline. Try a minimal change and a structural approach. Collect both results and
|
|
767
|
+
compare their diffs. Show me the commits to choose from before integration and cleanup.”
|
|
768
|
+
The parent uses `hsq worker spawn`, `collect` and `diff`, reviews the chosen commits,
|
|
769
|
+
integrates them with Git, then uses `hsq worker destroy` for verified cleanup. Read
|
|
770
|
+
`diffSnapshot` from an available collection's JSON file rather than applying that file
|
|
771
|
+
as a patch. Collect each worker's latest settled revision before finishing. Owned workers
|
|
772
|
+
keep their ownership, isolation, resource limits and Git cleanup safeguards. There is
|
|
773
|
+
no one-click comparison page, automatic winner selection or automatic loser cleanup.
|
|
774
|
+
|
|
775
|
+
## Owned workers
|
|
776
|
+
|
|
777
|
+
Every task has two settings, both on by default:
|
|
778
|
+
|
|
779
|
+
- **Allow Squawk workers**: the task's agent may start Squawk workers and resume them. Each worker is a separate paid agent session. The worker limits below cap resources, not spending.
|
|
780
|
+
- **Allow task messaging**: the task's agent may list, message and wait on other tasks in this project with `hsq message`.
|
|
781
|
+
|
|
782
|
+
Set them in the new-task form, in the task's header menu at any time, with `hsq task start` or `hsq run` and `--no-workers` / `--no-messaging`, or in an automation's `task.allowWorkers` / `task.allowMessaging`. A task created before these settings existed counts as on for both. The cockpit and headless `hsq run` start one private loopback listener; each eligible session receives the absolute bundled Node/CLI invocation and its own environment credentials. No `hsq` installation on the agent's PATH, config file, separate daemon, or remembered port is needed. If the listener cannot start, ordinary tasks keep working without delegation tools.
|
|
783
|
+
|
|
784
|
+
Turning **Allow Squawk workers** off refuses new `spawn` and `--resume` at once, including through a session's existing credential and for a spawn still waiting to be accepted. The task keeps messaging, waiting on, inspecting, collecting, stopping and destroying the workers it already has, and work already accepted finishes. Turning **Allow task messaging** off refuses peer discovery, new peer waits and new peer messages in both directions; a reply to a request accepted earlier still lands, and messages between a task and its own workers are never blocked. A root task with both off, no worker receipt and no open peer request gets no credential; worker sessions, and roots with a worker receipt (also a deleted worker's, so its retained result stays collectable) or an open peer request, keep theirs. Native subagents inside one session are not Squawk workers, and these settings do not change them. These settings are cooperative supervision, not process isolation.
|
|
785
|
+
|
|
786
|
+
`CEZ_DELEGATION` is retired and has no effect. A caller that set `CEZ_DELEGATION=1` needs no change. A caller that relied on it being unset turns the settings off per task, for example `hsq run --no-workers --no-messaging "<task>"`.
|
|
787
|
+
|
|
788
|
+
The provisioned command has these forms (the session instructions supply the absolute invocation):
|
|
789
|
+
|
|
790
|
+
```sh
|
|
791
|
+
hsq worker spawn --baseline parent-head --request-id <UUID> 'Implement the assigned change'
|
|
792
|
+
hsq worker spawn --baseline parent-head --request-id <UUID> --runner codex --effort high --context-file ./selected-context.txt 'Review the parser'
|
|
793
|
+
hsq worker spawn --baseline parent-head --request-id <UUID> --workflow review 'Review the parser change'
|
|
794
|
+
hsq worker list # All own workers, revisions and cleanup resources (fetches pages automatically)
|
|
795
|
+
hsq worker inspect <worker-id>
|
|
796
|
+
hsq worker steer <worker-id> 'Consider this additional constraint'
|
|
797
|
+
hsq worker diff <worker-id>
|
|
798
|
+
hsq worker collect <worker-id>
|
|
799
|
+
hsq worker wait <worker-id> --mode one --timeout-seconds 600
|
|
800
|
+
hsq worker wait <first-id> <second-id> --mode any --timeout-seconds 600
|
|
801
|
+
hsq worker wait <first-id> <second-id> --mode all --timeout-seconds 600
|
|
802
|
+
hsq worker cancel-wait <wait-id>
|
|
803
|
+
hsq message request <recipient-run-id> 'Please check this decision' --id <message-UUID>
|
|
804
|
+
hsq worker resume <worker-id> 'Correct the returned result' --id <new-message-UUID>
|
|
805
|
+
hsq message progress <recipient-run-id> 'Parser tests pass' --id <message-UUID>
|
|
806
|
+
hsq message follow-up <recipient-run-id> 'Include empty input' --id <message-UUID> --request-id <request-UUID>
|
|
807
|
+
hsq message reply <recipient-run-id> 'Checked; empty input is covered' --id <message-UUID> --request-id <request-UUID>
|
|
808
|
+
hsq message conversation <recipient-run-id>
|
|
809
|
+
hsq message wait --request <request-UUID> --request <another-request-UUID> --mode all
|
|
810
|
+
hsq message wait --peer <task-id> --timeout-seconds 1800 # Wake on that peer task's next message, or when it settles
|
|
811
|
+
hsq message inbox
|
|
812
|
+
hsq message tasks --all
|
|
813
|
+
hsq message cancel-wait <wait-id>
|
|
814
|
+
hsq message cancel-request <request-UUID>
|
|
815
|
+
hsq worker stop <worker-id>
|
|
816
|
+
hsq worker destroy <worker-id>
|
|
817
|
+
```
|
|
818
|
+
|
|
819
|
+
Use `hsq message --help` for messaging commands. Use `hsq worker --help` to list worker operations and flags, or `hsq 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, runner, model, effort and workflow when retrying a lost response. `--runner` and its alias `--backend` count as the same field, so a retry may switch spelling. A parent holds at most 32 outstanding workers: accepted, live, or not yet verifiably destroyed. A verified destroy (`hsq 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.
|
|
820
|
+
|
|
821
|
+
An incomplete destroy reports the remaining resources and a reason. Squawk 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 `hsq worker destroy <worker-id>` or the cockpit Destroy action to retry immediately. Squawk leaves ambiguous or replaced resources in place for operator review.
|
|
822
|
+
|
|
823
|
+
`--workflow <name>` runs a catalog workflow inside the worker: the built-in `quick-task` or any `.ai/cezar/workflows/*.yaml` by name, with its agent and check steps, `skill:` bodies and `onFail` loops, so a repo's `review.yaml` becomes a dedicated reviewer. Omitted `--workflow` runs `quick-task` exactly as before. `--runner`, `--model` and `--effort` fill only the steps that leave those fields unset; a step's own `allowedTools`/`bashAllowlist` narrow the parent's grants and never widen them. An unknown name is refused. Agent steps may mix runners: at spawn every agent step is resolved and pinned separately, so an implement-with-codex, review-with-claude chain runs each step under its own runner, account, model, effort and grants. A step's optional `agentProfile` names the account it runs under (an id the registry does not know is refused); same-runner steps otherwise inherit the parent's account and other runners resolve their project/default one. Run-level columns show the first agent step.
|
|
824
|
+
|
|
825
|
+
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.
|
|
826
|
+
|
|
827
|
+
Omitted `--runner` inherits the parent's active runner. Same-runner workers inherit omitted model/account/effort; `--runner <claude|codex|opencode|pi|cursor|omp>` selecting another runner resolves that runner's project/default account and model without forwarding another provider's settings. `--backend` is a permanent alias of `--runner`; giving both with different values is refused as `invalid_input`. Worker `inspect` and `collect` still report the selected runner in a field named `backend`. `--model <model>` selects a supported model, subject to existing locks. `--effort <low|medium|high|xhigh|max>` pins reasoning effort on same-runner and mixed-runner spawn; omitted `--effort` still inherits the parent pin on same-runner spawn and drops it on mixed-runner 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.
|
|
828
|
+
|
|
829
|
+
Wait registers immediately. End the parent turn to release scheduler capacity; Squawk 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.
|
|
830
|
+
|
|
831
|
+
Parents and owned workers can converse in both directions; a worker may address only its parent. `send --kind request` opens a reply obligation whose ID is the message ID; `send --kind progress` (or `progress`) does not. Follow-ups clarify an existing request; only an explicit correlated `reply` settles it as replied. Retry a message with the same ID and exact payload, including deadline duration; changed payloads are rejected. Acceptance, provider delivery, reply, and task completion are separate facts, visible in the task transcript and `conversation` JSON.
|
|
832
|
+
|
|
833
|
+
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.
|
|
834
|
+
|
|
835
|
+
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.
|
|
836
|
+
|
|
837
|
+
Sending a message to a review or terminal participant reports `not-delivered` and `continuation-required`, with the reason and next command; the CLI exits 1. An active parent can use `hsq worker resume` 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; resuming after a rejected message 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.
|
|
838
|
+
|
|
839
|
+
Collect returns the worker's execution revision, status/outcome, `settled` and `partial` flags, and typed availability for assistant summary, HEAD, bounded diff and artifact descriptors. Missing evidence is explicit; running output is partial. An available `diff.path` points to a **JSON result file** containing `{ result, diffSnapshot }`; its `diffSnapshot` field holds the patch. Read and review that field before applying any changes. The latest collected result is stored under the parent and survives restart. Collection acknowledges observation, not Git integration or successful work. Review desired worker commits and deliberately integrate them into the parent before destroying their worktrees/branches; there is no automatic merge.
|
|
840
|
+
|
|
841
|
+
Parent completion requires collection of every worker's latest settled execution revision. A worker Continue invalidates older readiness. An early completion attempt waits for outstanding workers and wakes the parent to inspect/collect; it does not silently finish on wake. While workers remain live, markerless replies, completion timeouts, and repeated premature completion park the parent as monitoring with the existing capped wakeups. Once workers settle, repeated completion without collecting their results retains attention. Human Finish also refuses unresolved/uncollected workers. If the parent is already under review, Continue the parent first, then Continue its worker. Human questions remain authoritative.
|
|
842
|
+
|
|
843
|
+
Stop requests cancellation; `stopping` does not prove termination. Destroy checkpoints obtainable results, waits up to 30 seconds for proven termination, and removes only verified owned resources. An `incomplete` response lists remaining resources; resolve the cause and retry explicitly. Cleanup order is: collect/integrate desired results, destroy owned resources, explicitly delete child histories through the cockpit/API, then delete parent history. Parent-owned summaries and bounded diff snapshots remain until parent deletion, including after child-history deletion; general artifact bytes are not archived. Branch/path strings and SHAs become historical descriptors after removal, not promises of available Git objects or files. The human cleanup endpoint `POST /api/v1/p/<projectId>/runs/<worker-id>/worker-destroy` stays available when delegation is disabled. The CLI bounds each HTTP request to 45 seconds and rejects endpoint/auth/origin overrides and redirects.
|
|
844
|
+
|
|
845
|
+
Provisioned root tasks and workers may use native subagents, and each mechanism has its own purpose. Use native subagents for work that needs no separate worktree: research, code reading and focused analysis, for example a subagent that reads the parser and summarizes its error handling. Native subagents need no worker creation, worktree, collection or destruction. Use Squawk workers for work that needs its own worktree, its own commits or a tracked lifecycle. Workers may use native subagents too, but cannot spawn Squawk workers. An agent may message its own subagents with its runner's tools; it reaches another Squawk task only through `hsq message`. Where a runner's native tool for reaching another session is separate from subagent messaging, a per-run adapter control turns it off: Codex's cross-thread message board, and an OpenCode plugin that refuses a `task` call whose `task_id` names a session outside the caller's own session tree. Claude sessions refuse messages from other sessions on every launch. Known limitations: a Claude session Squawk starts can still list and message Claude sessions that Squawk did not start, and sessions on other machines; an OpenCode session that an older Squawk created under delegation keeps its `task` deny on Continue and restart recovery, because OpenCode cannot remove a session permission rule (new OpenCode sessions allow subagents). These controls are cooperative same-user supervision, not isolation ([Governed delegation controls](AGENT_PROTOCOL.md#governed-delegation-controls-d1)). When the listener is unavailable, ordinary tools/settings stay unchanged. The listener binds to `127.0.0.1`, including hosted cockpit mode. Its session credentials authorize only what that session may do: a root manages its own workers and messages peer roots in the same project, subject to the task's settings and relationship checks; a worker addresses only its parent. This is cooperative local-agent supervision; same-user unrestricted shell and custom tools are not hard isolation. Workers cannot spawn Squawk workers or message peers through Squawk. Review remains a human gate with no automatic acceptance. Never read, echo, forward, or persist the generated token.
|
|
846
|
+
|
|
847
|
+
## From the terminal: `hsq task` and `hsq message`
|
|
848
|
+
|
|
849
|
+
`hsq task` starts, watches and steers tasks **in the running cockpit** from a shell — for you, or
|
|
850
|
+
for a bot driving one. Every command prints one JSON object and exits with a code the caller can
|
|
851
|
+
branch on, so nothing has to parse prose. It never starts a server: it finds the cockpit whose
|
|
852
|
+
project registry holds this checkout (ports 4321–4370; a task worktree resolves to its parent
|
|
853
|
+
project), or you point it at one with `--url` / `HSQ_URL` (`CEZ_URL` fallback).
|
|
854
|
+
|
|
855
|
+
```text
|
|
856
|
+
hsq task [--url <origin> | --repo <dir>] <operation> …
|
|
857
|
+
```
|
|
858
|
+
|
|
859
|
+
The shared `--url`, `--repo` and `--help`/`-h` flags also work before the operation;
|
|
860
|
+
`--url` and `--repo` accept both `--flag value` and `--flag=value`. A shared flag repeated
|
|
861
|
+
before the operation or on both sides is a usage error. Operation flags stay after the
|
|
862
|
+
operation. `hsq task --help <operation>` shows that operation's help without discovery.
|
|
863
|
+
An explicit `--url` wins over `HSQ_URL` (`CEZ_URL` fallback); `--repo` selects the checkout to discover.
|
|
864
|
+
|
|
865
|
+
`hsq task send` is human input. It can answer a pending human question. It refuses
|
|
866
|
+
inside a task (`HSQ_TASK_ID` (`CEZ_TASK_ID` fallback) is set). Agents use `hsq message` for task messages,
|
|
867
|
+
including peer and parent/worker conversations; see [Owned workers](#owned-workers).
|
|
868
|
+
|
|
869
|
+
```bash
|
|
870
|
+
id=$(hsq task start --task-file - <<'EOF' | jq -r .id
|
|
871
|
+
Fix the `hsq task` docs. Keep $(example) and "quotes" literal.
|
|
872
|
+
EOF
|
|
873
|
+
)
|
|
874
|
+
hsq task wait "$id" --timeout-seconds 900 # 0 done/review/needs you · 1 failed · 3 timeout
|
|
875
|
+
hsq task list # currentStepId (running), pullRequestUrl (done/review), capped error (failed)
|
|
876
|
+
hsq task status "$id" # slim JSON: status, attention, question, branch, handoffUrl…
|
|
877
|
+
hsq task send "$id" 'Use the retry helper instead' # delivered live, queued before start
|
|
878
|
+
hsq task send "$id" --resume 'Continue with the next step' # resumed: reopen a settled session
|
|
879
|
+
hsq task log "$id" --follow --timeout-seconds 300 # JSON lines until it needs you or ends
|
|
880
|
+
```
|
|
881
|
+
|
|
882
|
+
`list --status` accepts comma-separated values: `queued`, `running`, `waiting`, `review`,
|
|
883
|
+
`done`, `failed`, `cancelled`. Default rows include only the next-action field for their status
|
|
884
|
+
when defined; errors use the first line, at most 200 characters including `…` when cut.
|
|
885
|
+
Default `status` includes `handoffUrl`, a URL to the existing handoff endpoint even before
|
|
886
|
+
contents are seeded, and keeps the full error. `--full` still prints the contract unchanged.
|
|
887
|
+
To answer a pending `question`, use the same `send` with the answer text. Without `--resume`,
|
|
888
|
+
a closed session returns `delivery: not-delivered` and the `next` command. For multi-line or
|
|
889
|
+
shell-sensitive messages use `send <id> --text-file <path|->` (`-` reads stdin); the quoting
|
|
890
|
+
rules below apply to messages too.
|
|
891
|
+
|
|
892
|
+
Use `--task-file PATH` to read a saved task (for example, `hsq task start --task-file task.md`),
|
|
893
|
+
or `--task-file -` to read stdin as above. The quoted heredoc delimiter (`<<'EOF'`) keeps
|
|
894
|
+
backticks and `$()` literal in the task text.
|
|
895
|
+
|
|
896
|
+
POSIX shells, including Bash, expand backticks and `$()` in double-quoted arguments before
|
|
897
|
+
hsq receives the text. **Do not put raw backticks in double-quoted task arguments.** This can
|
|
898
|
+
execute parts of your prompt as shell commands and leave holes in the stored task, including
|
|
899
|
+
when starting tasks through SSH and `bash -lc`. Prefer a task file or stdin with a quoted
|
|
900
|
+
heredoc delimiter. A single-quoted positional argument still works for short tasks:
|
|
901
|
+
`hsq task start 'Fix the typo'`.
|
|
902
|
+
|
|
903
|
+
`hsq task start --task-file task.md --skill <name>` names one skill as the task's agent step;
|
|
904
|
+
`--skill` and `--workflow` are mutually exclusive. The CLI checks `GET /skills` first and
|
|
905
|
+
includes a `warning` in its JSON result if the skill is missing or the catalog cannot be
|
|
906
|
+
checked; it still starts the run. Like a cockpit skill start, if the skill is missing at
|
|
907
|
+
execution, the agent uses the plain prompt and the run logs a note. CLI starts do not change
|
|
908
|
+
the cockpit composer's recent picks or skill-usage ranking.
|
|
909
|
+
Without either flag, `start` still runs `quick-task`.
|
|
910
|
+
|
|
911
|
+
`--runner <claude|codex|opencode|pi|cursor|omp>` picks the runner, as in a workflow step and
|
|
912
|
+
`hsq discover --runner`; `--model` and `--effort` pin the rest. `--backend` is a permanent
|
|
913
|
+
alias of `--runner` with no warning. Giving both with different values exits 64.
|
|
914
|
+
|
|
915
|
+
`--archive-when-done` archives the task after **Done**. `--auto-merge-pr` merges its
|
|
916
|
+
PR after **Done** only when current-head CI and GitHub rules pass. It can mark a
|
|
917
|
+
draft PR ready. Both controls are off by default. They also appear as switches in
|
|
918
|
+
the task composer and task details. With both on, Squawk merges before it archives;
|
|
919
|
+
without a PR, it archives on Done. Pending or blocked completion actions show their
|
|
920
|
+
reason in task details. Use `status <id> --full` to read the saved `archiveWhenDone`,
|
|
921
|
+
`autoMergePr` and `completionAction` fields. Existing task choices can be changed
|
|
922
|
+
through `PATCH /api/v1/p/:projectId/runs/:id` with the matching boolean fields.
|
|
923
|
+
|
|
924
|
+
`start` is retry-safe: it sends a request id (`--request-id <UUID>` to pick your own), and a
|
|
925
|
+
retry with the same id and start options answers with the run the first one created
|
|
926
|
+
(`created: false`) instead of starting a second. Changing a completion control on that
|
|
927
|
+
retry is a payload conflict. Also: `list`, `stop`, `finish`, `diff [--stat]`, `open`.
|
|
928
|
+
Use `archive <id>` to hide a task from `list`, `unarchive <id>` to restore it, and
|
|
929
|
+
`list --all` to include archived tasks. `list` never shows owned workers, with or without
|
|
930
|
+
`--all`: they are steer targets of their parent task. Id-addressed commands (`status`, `wait`,
|
|
931
|
+
`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
|
|
932
|
+
`{"archived": count, "ids": [...], "pinnedIds": [...]}`. The single-task commands print `{"id": "…", "archived": true|false}`.
|
|
933
|
+
Exit codes:
|
|
934
|
+
`0` ok (`wait`/`start --wait`/`log --follow`: the task ended `done`/`review` or stopped for attention), `1` task
|
|
935
|
+
failed/cancelled or a message was not delivered, `2` no cockpit or the cockpit refused (its `error`
|
|
936
|
+
is passed through), `3` timed out, `64` usage error. `hsq task --help` lists every flag.
|
|
937
|
+
|
|
938
|
+
**When a task needs you.** `status`, `list`, `wait` and the final `log --follow` line carry `attention` and `attentionLabel`,
|
|
939
|
+
derived by the same function the cockpit's Needs You uses, so the CLI and the cockpit cannot
|
|
940
|
+
disagree. Read those rather than the raw status:
|
|
941
|
+
|
|
942
|
+
- `attention: waiting` (`attentionLabel` "needs you" / "needs review"), `error` or `permission`
|
|
943
|
+
means the task wants a human. A `waiting` task is attention **even when no question is
|
|
944
|
+
pending** — a finished turn parks the task for follow-up without a structured question —
|
|
945
|
+
unless its top open wait is CI or a timer (below). A pending question shows as `question`
|
|
946
|
+
on `status`, with the agent's Markdown context as `questionContext` when it sent one, and as
|
|
947
|
+
`waitingOn` `{ kind: 'human' }`; never clear a task on its absence alone.
|
|
948
|
+
- `attention: running` with `attentionLabel` "waiting for CI", "waiting for merge" or "monitoring"
|
|
949
|
+
(`status: waiting` with an open PR wait or timer in `waitingOn`) is neither settled nor attention: the agent is
|
|
950
|
+
still working on its own sub-agents or a watched command, whatever its last log line says.
|
|
951
|
+
- `attention: none` with "waiting on 2 workers" is a task parked on its own workers; it will wake
|
|
952
|
+
by itself.
|
|
953
|
+
|
|
954
|
+
`wait`, `start --wait` and `log --follow` stop as soon as a task needs you or ends
|
|
955
|
+
(`--until attention`, the default); `--until settled` waits for a terminal status only — for
|
|
956
|
+
`--autonomous` runs, or a bot that wants an outcome:
|
|
957
|
+
|
|
958
|
+
```bash
|
|
959
|
+
hsq task wait "$id" # stops when the task needs you, or ends
|
|
960
|
+
hsq task wait "$id" --until settled # done/review/failed/cancelled only
|
|
961
|
+
hsq task start --task-file task.md --wait # returns as soon as the agent parks
|
|
962
|
+
hsq task start --task-file task.md --wait --autonomous --until settled # runs to completion
|
|
963
|
+
hsq task log "$id" --follow # streams until the task needs you, or ends
|
|
964
|
+
hsq task log "$id" --follow --until settled # streams until done/review/failed/cancelled
|
|
965
|
+
```
|
|
966
|
+
|
|
967
|
+
*Migrating from `--until settled`.* Before 0.16, `wait` and `start --wait` defaulted to
|
|
968
|
+
`settled`, so an ordinary interactive task ran out the timeout (exit 3) although the agent had
|
|
969
|
+
parked within seconds. The default is now `attention`. A bot that polls for terminal state adds
|
|
970
|
+
`--until settled` to its `wait` / `start --wait` calls; nothing else about `settled` changed. Each
|
|
971
|
+
run in the `wait` output (and the `start --wait` object) now carries `attention` +
|
|
972
|
+
`attentionLabel`, and the output's top level says which `until` was in force, so a caller can tell
|
|
973
|
+
"parked for follow-up" (`status: waiting`, `attention: waiting`) from "finished" (`status: done`,
|
|
974
|
+
`attention: none`) without knowing Squawk's status vocabulary.
|
|
975
|
+
|
|
976
|
+
*`log --follow` (#931).* `log --follow` used to stop on a terminal status only, so tailing an
|
|
977
|
+
interactive task streamed until `--timeout-seconds` and exited 3 after the agent had parked. It
|
|
978
|
+
now takes the same `--until` with the same `attention` default, judged by the same function as
|
|
979
|
+
`wait`; `--until` without `--follow` is a usage error. Every event is still printed before the
|
|
980
|
+
final line, which is now `{"id", "status", "attention", "attentionLabel", "until", "timedOut"}`. A
|
|
981
|
+
bot that tails to terminal state adds `--until settled`. `log` without `--follow` is unchanged.
|
|
982
|
+
|
|
983
|
+
**A bot that lives behind an HTTP endpoint** does not have to poll. Add a webhook (a name, a
|
|
984
|
+
description, a URL and an optional Bearer token) under **Webhooks** in the project's **Settings →
|
|
985
|
+
General** and turn on **Task notifications**. Every task that opts in then POSTs one delivery to
|
|
986
|
+
each such webhook when it enters a state that webhook selects: **Needs you**, **Failed**,
|
|
987
|
+
**Done** and **Cancelled** by default, plus **Running**, **Waiting for agents**, **Waiting on CI**,
|
|
988
|
+
**Waiting** (a timer) and **Any other wait** when you tick them. A question that puts the task in
|
|
989
|
+
Needs you is `task.question`; every other entry is `task.status`, and the body's `state` names the
|
|
990
|
+
state. `task.subscribed` (when it opts in, at start or on hand-off) and **Send test** always go out.
|
|
991
|
+
Each body carries the same slim projection `hsq task status` prints, under `task`. `hsq task start`
|
|
992
|
+
opts in whenever the project has a webhook (`--no-notify` to skip it); the cockpit's New task form
|
|
993
|
+
has a **Notify webhook** toggle; and a running task's **Hand off** button (or
|
|
994
|
+
`hsq task notify <id> --message '…'`) turns it on later with a note for the bot. `notify` (and
|
|
995
|
+
`send --notify`) on a worker's id is a usage error that names the parent to notify instead;
|
|
996
|
+
`notify --off` still works on one. The note goes to
|
|
997
|
+
the webhook only, never to the agent. Delivery is best-effort: 10 s timeout, 3 attempts, and a
|
|
998
|
+
failure shows in the thread without touching the task. The token is stored in `<config>` and never
|
|
999
|
+
sent back to a browser. Under `HSQ_DRY_RUN=1` (`CEZ_DRY_RUN` fallback) nothing is sent; the payload is logged in the thread.
|
|
1000
|
+
|
|
1001
|
+
A project can hold several webhooks, each with its own states, and each body names the webhook it
|
|
1002
|
+
went to under `webhook`. One failing webhook never delays or stops another.
|
|
1003
|
+
|
|
1004
|
+
### Reports from agents: `hsq webhook`
|
|
1005
|
+
|
|
1006
|
+
Turn on **Let agents send reports** for a webhook, and agents in that project can send it a report
|
|
1007
|
+
on demand: a friction report to a triage bot instead of a new GitHub issue, for example. Agents see
|
|
1008
|
+
each such webhook's name and description in their system prompt, so write the description as
|
|
1009
|
+
instructions ("Send friction you hit with tools here instead of filing a GitHub issue"). A webhook
|
|
1010
|
+
without that switch cannot be reached this way.
|
|
1011
|
+
|
|
1012
|
+
```sh
|
|
1013
|
+
hsq webhook list # the webhooks open to agents
|
|
1014
|
+
hsq webhook send 'Friction reports' --message-file report.md --title 'Squeal skipped an edit'
|
|
1015
|
+
hsq webhook send <name|id> --message 'Short report' [--data '{"severity":"low"}']
|
|
1016
|
+
```
|
|
1017
|
+
|
|
1018
|
+
The body is `event: "agent.report"` with `webhook`, `title`, the Markdown `message`, your `data`,
|
|
1019
|
+
and the reporting task's `runId`, thread `url` and `task` projection. The command prints the
|
|
1020
|
+
outcome as JSON and exits 0 delivered, 1 not delivered, 2 refused or no cockpit, 64 usage.
|
|
1021
|
+
|
|
1022
|
+
### Automations from a task: `hsq automation`
|
|
1023
|
+
|
|
1024
|
+
`hsq automation` creates and manages automations (on by default; `HSQ_AUTOMATIONS=0` (`CEZ_AUTOMATIONS` fallback) disables them) on the cockpit that
|
|
1025
|
+
runs the task, so an agent asked to "do X every morning" or "whenever a PR opens" sets up an
|
|
1026
|
+
automation instead of a cron job. Like `hsq task`, it prints one JSON object per invocation and
|
|
1027
|
+
exits 0 ok, 1 check failed, 2 refused or no cockpit, 3 check timed out, 64 usage.
|
|
1028
|
+
|
|
1029
|
+
```sh
|
|
1030
|
+
hsq automation schema # the definition reference (needs no cockpit)
|
|
1031
|
+
hsq automation add --name 'Weekday triage' --cron '0 7 * * 1-5' --prompt 'Triage new issues'
|
|
1032
|
+
hsq automation add --name 'Review PRs' --on pull_request.opened --every 5m --label bug --prompt-file p.md
|
|
1033
|
+
hsq automation add --name 'Agent triage' --on issue.labeled --changed-label needs-agent --prompt 'Triage #{{github.number}}'
|
|
1034
|
+
hsq automation create --file def.json [--enable] # full JSON form; stdin when no flag is given
|
|
1035
|
+
hsq automation update <id> --json '{"task":{"prompt":"…"}}'
|
|
1036
|
+
hsq automation add --name 'Check the rollout' --at 2026-10-29T09:00 --tz Europe/Warsaw --prompt 'Check the rollout'
|
|
1037
|
+
hsq automation add --name 'Follow up' --in 7d --latest-start 6h --prompt 'Follow up on the migration'
|
|
1038
|
+
hsq automation check <id> [--execute] · run <id> · list [--archived include|only] · show <id> · enable <id> · pause <id> · cancel <id> · delete <id>
|
|
1039
|
+
```
|
|
1040
|
+
|
|
1041
|
+
`add` and `create` send the same body and create the automation **paused** unless `--enable` is
|
|
1042
|
+
given; `--cron` accepts the four shapes a schedule can take (daily, weekdays, one weekday, every N
|
|
1043
|
+
hours) and anything else is a usage error pointing to the JSON form. `update` replaces each key
|
|
1044
|
+
it is given, except `task`, which merges key by key (`null` removes one); it restates `enabled`
|
|
1045
|
+
and echoes the revision it read, so a concurrent edit in the cockpit is refused (exit 2), never
|
|
1046
|
+
overwritten. Mutating commands print the automation's cockpit page as `url`.
|
|
1047
|
+
|
|
1048
|
+
`add` accepts `--archive-when-done` and `--auto-merge-pr` with the same behavior as
|
|
1049
|
+
`hsq task start`. The JSON keys are `task.archiveWhenDone` and `task.autoMergePr`.
|
|
1050
|
+
Both are optional booleans and default to off. The automation editor has the same
|
|
1051
|
+
switches. Editing these choices affects future tasks only; it does not change tasks
|
|
1052
|
+
the automation already launched. Enabling an automation or making its tasks autonomous
|
|
1053
|
+
does not enable either completion control.
|
|
1054
|
+
|
|
1055
|
+
GitHub automations exclude events before enablement by default. Turn on **Include existing items**
|
|
1056
|
+
in the editor, pass `--include-existing` to `add`, or set `"filters": {"includeExisting": true,
|
|
1057
|
+
"lookbackDays": 7, "maxRecords": 25}` in a JSON definition to include older matches within the
|
|
1058
|
+
lookback (1–90 days). Turning this on for an enabled automation reopens that window on its next
|
|
1059
|
+
check. Changing only the lookback preserves the completed cursor; pause and re-enable to
|
|
1060
|
+
reopen the wider history window. Previously processed matches stay deduplicated across edits, pauses and restarts, and
|
|
1061
|
+
per-check limits still apply. Historical scans resume across checks and restarts when capped.
|
|
1062
|
+
GitHub search is limited to 1,000 items per window and label timelines to 100 events per item;
|
|
1063
|
+
reaching either limit reports an error with guidance to narrow the filters or lookback. **Test filter** previews the selected window independently of the
|
|
1064
|
+
execution cursor; it never launches tasks. For label triggers, the window applies to the label
|
|
1065
|
+
event's time, so a newly added label can match an old issue even with history off. Historical
|
|
1066
|
+
label discovery revisits the rolling window because later comments can move issues between pages;
|
|
1067
|
+
receipts prevent those repeated observations from launching duplicate tasks.
|
|
1068
|
+
|
|
1069
|
+
A **one-time schedule** (**Once** in the editor, `--at` or `--in` on `add`, `"schedule":
|
|
1070
|
+
{"type": "once", "at": "2026-10-29T09:00", "timeZone": "Europe/Warsaw"}` in JSON) starts one
|
|
1071
|
+
ordinary task at a wall-clock time in an explicit IANA zone. It is created paused like every
|
|
1072
|
+
automation; **Enable** arms it. When it is due, Squawk starts the task and moves the schedule to
|
|
1073
|
+
**Archived** with a link to that task; **Run now** does the same at once, so it never runs twice.
|
|
1074
|
+
**Cancel** archives it without a task. An archived schedule cannot change, and the list hides it
|
|
1075
|
+
until you pick the **Archived** filter. Squawk must be running at the due time. If it was not,
|
|
1076
|
+
the schedule starts on the next boot only within its **Latest start** (no limit by default; 10
|
|
1077
|
+
minutes to 30 days); after that it is marked **Missed** and stays until you edit, cancel or run it.
|
|
1078
|
+
A launch that fails marks it **Failed**, and nothing retries on its own; **Retry** or **Run now**
|
|
1079
|
+
relaunches the same receipt, so one schedule starts at most one task. Agents can create and manage
|
|
1080
|
+
one-time schedules with the `cezar_schedule_task` and `cezar_scheduled_tasks` tools, which exist
|
|
1081
|
+
by default unless `HSQ_AUTOMATIONS=0` (`CEZ_AUTOMATIONS` fallback) and also create schedules paused unless the user asked for them to run.
|
|
1082
|
+
These tools take and answer the due time in UTC, like every other time in a Squawk tool; the
|
|
1083
|
+
schedule keeps a wall time in the cockpit's time zone, so the cockpit shows it in local time.
|
|
1084
|
+
|
|
1085
|
+
Automation list counters use two windows. **Launched** counts every stored task with that
|
|
1086
|
+
automation's provenance, across definition revisions, including historical variants, completed and
|
|
1087
|
+
archived tasks. Restarting or compacting automation logs and receipts does not change it;
|
|
1088
|
+
deleting a task removes it from the count. **Matches**, **Duplicates** and **Errors** describe
|
|
1089
|
+
only that automation's latest 100 activity-log rows. Recent activity remains a separate log view.
|
|
1090
|
+
|
|
1091
|
+
The address comes from `HSQ_COCKPIT_URL` (`CEZ_COCKPIT_URL` fallback) and `HSQ_PROJECT_ID` (`CEZ_PROJECT_ID` fallback), which the cockpit puts in a task's
|
|
1092
|
+
environment. Without them, only an explicit `--url`, `--repo` or `HSQ_URL` (`CEZ_URL` fallback) looks for a cockpit;
|
|
1093
|
+
otherwise the command exits 2 and never starts a server. With automations off, the cockpit's `409`
|
|
1094
|
+
is relayed verbatim (exit 2).
|
|
1095
|
+
|
|
1096
|
+
## Workflow format
|
|
1097
|
+
|
|
1098
|
+
A workflow is a small YAML file in `.ai/cezar/workflows/`:
|
|
1099
|
+
|
|
1100
|
+
```yaml
|
|
1101
|
+
name: fix-and-verify
|
|
1102
|
+
description: Implement the task, then verify; retry with failing output on red.
|
|
1103
|
+
steps:
|
|
1104
|
+
- id: implement
|
|
1105
|
+
name: Implement
|
|
1106
|
+
prompt: "{{task}}"
|
|
1107
|
+
skill: project-conventions # optional — from .ai/skills or .ai/cezar/skills
|
|
1108
|
+
# model: opus # optional per-step model override
|
|
1109
|
+
# effort: high # optional per-step effort: low · medium · high · xhigh · max
|
|
1110
|
+
# runner: codex # optional per-step backend: claude · codex · opencode · cursor · pi · omp
|
|
1111
|
+
# timeoutMs: 7200000 # optional agent-step wall-clock cap (2 hours); 0 = no limit
|
|
1112
|
+
# allowedTools: [Read, Edit, Write, Grep, Glob, Bash]
|
|
1113
|
+
- id: verify
|
|
1114
|
+
name: Verify
|
|
1115
|
+
command: "npm test" # a check step: exit 0 passes
|
|
1116
|
+
onFail:
|
|
1117
|
+
retry: implement # loop back to an earlier step…
|
|
1118
|
+
max: 2 # …at most twice
|
|
1119
|
+
```
|
|
1120
|
+
|
|
1121
|
+
`{{task}}` is replaced with the task text you typed. When a check fails and loops
|
|
1122
|
+
back, its failing output is appended to the retried agent's prompt so the next
|
|
1123
|
+
attempt can see what broke.
|
|
1124
|
+
|
|
1125
|
+
Agent steps have no wall-clock limit by default, including steps before a check or
|
|
1126
|
+
another agent. This applies to cockpit tasks, owned workers and `hsq run`, on every
|
|
1127
|
+
runner. Non-final agent steps still close after their turn and advance the chain.
|
|
1128
|
+
An authored agent step may opt into `timeoutMs`: an integer from `0` to `2147483647`
|
|
1129
|
+
milliseconds, with `0` disabling the cap. A positive limit measures the entire
|
|
1130
|
+
session from startup, including waiting; expiry fails the step and stops the chain.
|
|
1131
|
+
It does not add workflow retry/resume behavior. Check steps reject this field.
|
|
1132
|
+
Skill shorthand, default tasks and free-form Continue have no wall-clock cap.
|
|
1133
|
+
All managed sessions have a separate 30-minute no-progress safeguard: while a turn
|
|
1134
|
+
is open, native stream, tool or heartbeat activity refreshes it. A silent turn
|
|
1135
|
+
fails and its process is terminated, with SIGKILL escalation if needed. Busy turns
|
|
1136
|
+
can run longer than 30 minutes. Waiting at a turn boundary or for a human answer
|
|
1137
|
+
pauses this safeguard; the next turn or answer rearms it. Standalone runner calls
|
|
1138
|
+
keep their 30-minute wall-clock default. Startup protection and the existing
|
|
1139
|
+
parked-session lifecycle still apply.
|
|
1140
|
+
|
|
1141
|
+
Prefer skills over steps? A workflow can also be written in the portable
|
|
1142
|
+
shorthand — an ordered list of skill names, each becoming one agent step:
|
|
1143
|
+
|
|
1144
|
+
```yaml
|
|
1145
|
+
name: triage-and-fix
|
|
1146
|
+
skills: [reproduce, root-cause, implement, self-review]
|
|
1147
|
+
```
|
|
1148
|
+
|
|
1149
|
+
---
|
|
1150
|
+
|
|
1151
|
+
## How it runs agents
|
|
1152
|
+
|
|
1153
|
+
Squawk shells out to your locally installed, logged-in agent CLI —
|
|
1154
|
+
**your subscription, no API key**. With the default Claude Code backend that
|
|
1155
|
+
means headless `stream-json` mode, tool access via `--allowedTools`, with
|
|
1156
|
+
unapproved tools denied without prompting (`--permission-mode dontAsk`) inside
|
|
1157
|
+
the task's worktree — but note the zero-config default list (`Read`, `Edit`,
|
|
1158
|
+
`Write`, `Grep`, `Glob`, `Bash`) grants unrestricted `Bash` unless a step sets
|
|
1159
|
+
`bashAllowlist`, so treat a run as having full shell access in its worktree,
|
|
1160
|
+
not a sandboxed allowlist. Set `HSQ_APPROVAL_GATE=1` (`CEZ_APPROVAL_GATE` fallback) to opt into Claude's
|
|
1161
|
+
interactive approval UI. Codex, OpenCode and Cursor are driven through their
|
|
1162
|
+
own native protocols and don't honor `allowedTools` at all; OpenCode's own
|
|
1163
|
+
permission config decides what it asks. pi and OMP map `allowedTools` onto
|
|
1164
|
+
their own tool allowlists — see
|
|
1165
|
+
[Coding agent backends](#coding-agent-backends) for what each one actually
|
|
1166
|
+
locks down. Nothing runs on a server you don't own.
|
|
1167
|
+
|
|
1168
|
+
Live Preview lets Chromium use host graphics when available. Chromium selects the
|
|
1169
|
+
backend and falls back to software when hardware is unavailable or blocked. This
|
|
1170
|
+
needs no Squawk setting or VirGL-specific setup. On Linux, GPU access may also
|
|
1171
|
+
need a working display in the cockpit process environment. JPEG streaming is
|
|
1172
|
+
unchanged; GPU rendering does not guarantee hardware frame encoding.
|
|
1173
|
+
|
|
1174
|
+
Useful environment variables:
|
|
1175
|
+
|
|
1176
|
+
| Var | Effect |
|
|
1177
|
+
|---|---|
|
|
1178
|
+
| `HSQ_*` settings (`CEZ_*` fallback) | Ordinary settings prefer a defined HSQ value, including empty. Home, hosted-mode REMOTE and native shell controls use the separate rules below. Both home locators and inherited controller authority are removed from child environments, even in full-env mode. |
|
|
1179
|
+
| `CEZ_DELEGATION` | Retired (hearsay-tools/cezarion#2784); has no effect. Workers and task messaging are per-task settings, both on by default. See [Owned workers](#owned-workers). |
|
|
1180
|
+
| `HSQ_DELEGATION_URL`, `CEZ_DELEGATION_URL`, `HSQ_DELEGATION_TOKEN`, `CEZ_DELEGATION_TOKEN` | Internal generated session values; do not configure or copy them. Tokens rotate on Continue/restart and are revoked when the session/controller closes. |
|
|
1181
|
+
| `HSQ_REMOTE`, `CEZ_REMOTE` | Hosted mode: exact `1` under either name disables local handoff and local settings administration. Empty or `0` cannot cancel the other name's hosted-mode pin. Server installers pin both names. |
|
|
1182
|
+
| `HSQ_API_PORT`, `CEZ_API_PORT` | Local service port used by the development web proxy; defaults to 4321. |
|
|
1183
|
+
| `HSQ_CODEX_NETWORK`, `CEZ_CODEX_NETWORK` | Codex sandbox network access: exact `0` disables it. |
|
|
1184
|
+
| `HSQ_CODEX_REASONING`, `CEZ_CODEX_REASONING` | Codex reasoning summary: auto (default), concise, detailed or none. |
|
|
1185
|
+
| `HSQ_RELEASE_CHANNEL`, `CEZ_RELEASE_CHANNEL` | Explicitly requests `nightly` in `release-snapshot.mjs`. Other nonempty values, including `stable` and `development`, publish nothing. When unset or empty, the event selects development snapshots. `release.mjs` selects stable releases through its bump argument. |
|
|
1186
|
+
| `HSQ_RELEASE_ROOT`, `CEZ_RELEASE_ROOT` | Repository root containing the package manifests that `release.mjs` reads and stamps. |
|
|
1187
|
+
| `HSQ_SNAPSHOT_ROOT`, `CEZ_SNAPSHOT_ROOT` | Repository root containing the package manifests that `release-snapshot.mjs` reads and stamps. |
|
|
1188
|
+
| `HSQ_ALLOW_TEST_SPAWN`, `CEZ_ALLOW_TEST_SPAWN` | Test harness opt-in for real agent process spawning. Leave unset outside tests. |
|
|
1189
|
+
| `HSQ_ARTIFACTS_DIR`, `CEZ_ARTIFACTS_DIR`, `HSQ_HANDOFF_FILE`, `CEZ_HANDOFF_FILE`, `HSQ_TASK_ID`, `CEZ_TASK_ID`, `HSQ_TODOS_FILE`, `CEZ_TODOS_FILE`, `HSQ_PROJECT_ROOT`, `CEZ_PROJECT_ROOT` | Internal task paths and identity generated by the controller. Do not configure them. |
|
|
1190
|
+
| `HSQ_TOOL_SOCKET`, `CEZ_TOOL_SOCKET`, `HSQ_TOOL_TOKEN`, `CEZ_TOOL_TOKEN` | Internal tool transport authority generated for each session. Do not configure or copy it. |
|
|
1191
|
+
| `HSQ_AUTOSAVE_OWNER`, `CEZ_AUTOSAVE_OWNER`, `HSQ_RESTARTED_FROM`, `CEZ_RESTARTED_FROM` | Internal process attribution markers. Do not configure them. |
|
|
1192
|
+
| `HSQ_DESKTOP`, `CEZ_DESKTOP`, `HSQ_SUPERVISED`, `CEZ_SUPERVISED`, `HSQ_SUPERVISOR_PID`, `CEZ_SUPERVISOR_PID`, `HSQ_SUPERVISOR_STDIN`, `CEZ_SUPERVISOR_STDIN` | Internal desktop and supervisor lifecycle values. The shell's CEZ value wins when present, including empty values; HSQ is used only when CEZ is absent. Do not configure them. |
|
|
1193
|
+
| `HSQ_DISCLAIM_EXEC`, `CEZ_DISCLAIM_EXEC` | Desktop executable used to remove inherited macOS execution attribution. A defined CEZ value wins over HSQ. Discovered automatically. |
|
|
1194
|
+
| `HSQ_UPDATE_CHANNEL`, `CEZ_UPDATE_CHANNEL` | Managed desktop channel: stable (default), nightly, or development. The version dialog's saved choice takes precedence. |
|
|
1195
|
+
| `HSQ_DESKTOP_ENTRY` / `CEZ_DESKTOP_ENTRY` | Native-shell development entry file. The HSQ name wins when present, including an empty value. |
|
|
1196
|
+
| `HSQ_DESKTOP_CWD` / `CEZ_DESKTOP_CWD` | Native-shell starting project directory. The HSQ name wins when present. |
|
|
1197
|
+
| `HSQ_DESKTOP_NODE` / `CEZ_DESKTOP_NODE` | Native-shell Node executable. The HSQ name wins when present. Empty selects `node` on PATH. |
|
|
1198
|
+
| `HSQ_DESKTOP_NO_UPDATE=1` / `CEZ_DESKTOP_NO_UPDATE=1` | Disable signed native-shell updates. The HSQ name wins when present. Debug builds already disable updates. |
|
|
1199
|
+
| `HSQ_DESKTOP_DEBUG_IPC` / `CEZ_DESKTOP_DEBUG_IPC` | Debug builds only: exercise native title-bar IPC after loading the cockpit. The HSQ name wins when present. |
|
|
1200
|
+
| `HSQ_URL`, `CEZ_URL` | Cockpit origin for `hsq task` and operator `hsq discover` (e.g. a hosted `HSQ_REMOTE`, `CEZ_REMOTE` cockpit). Unset, they find the local cockpit serving this checkout on ports 4321–4370. Parent discovery uses its delegation controller instead. |
|
|
1201
|
+
| `HSQ_COCKPIT_URL`, `CEZ_COCKPIT_URL`, `HSQ_PROJECT_ID`, `CEZ_PROJECT_ID` | Set by the cockpit in every agent's environment once it listens: the bound origin and the run's project. `hsq automation` calls that address; a headless `hsq run` sets neither. Do not configure them. |
|
|
1202
|
+
| `HSQ_DRY_RUN=1`, `CEZ_DRY_RUN=1` | Use bundled mocks for all five agent backends — the cockpit works offline for demos and development. Explicit backend binary overrides still win. |
|
|
1203
|
+
| `HSQ_AGENT_MODELS_LOCKED=1`, `CEZ_AGENT_MODELS_LOCKED=1` | Globally lock each runner to the model configured in its native Claude/Codex/OpenCode settings while keeping runner selection available. Exact `1` also delegates authentication and provider enablement to those native agents, so Squawk skips its credential probes and provider-disable preferences. Existing Squawk presets are preserved but ignored, and an environment change requires a restart. The config-file equivalent is `"modelsLocked": true` in global `<config>/config.json` or one repository's `.ai/cezar/config.json`; config-file locks do not disable provider checks. |
|
|
1204
|
+
| `HSQ_APPROVAL_GATE=1`, `CEZ_APPROVAL_GATE=1` | Opt into Claude's interactive approval UI; by default, unapproved tools are denied without interrupting the run. Ignored when `HSQ_CLAUDE_PERMISSION_MODE`, `CEZ_CLAUDE_PERMISSION_MODE` is a recognized value (`dontAsk`, `acceptEdits`, or `bypass`). |
|
|
1205
|
+
| `HSQ_CLAUDE_PERMISSION_MODE`, `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` / `HSQ_APPROVAL_GATE`, `CEZ_APPROVAL_GATE` path. Provider verification commands are never given this flag. |
|
|
1206
|
+
| `HSQ_CLAUDE_SETTING_SOURCES`, `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. |
|
|
1207
|
+
| `HSQ_ARCHIVE_ON_MERGE=1`, `CEZ_ARCHIVE_ON_MERGE=1` | Archive settled task families after all associated pull requests merge. Off by default; only `1` enables this environment default. Saved project settings override global Tasks settings, which override the environment. Runs in the background while the cockpit is open, including unopened projects, without starting agents. Unarchive preserves restored tasks until a later merge. |
|
|
1208
|
+
| `HSQ_AUTOMATIONS=0`, `CEZ_AUTOMATIONS=0` | Disable **automations** (GitHub polls and schedules). On by default; only the exact value `0` disables them. Unset, empty, `1` and other values keep them on. The Automations view and agent schedule tools are available by default. New automations start paused; each enabled automation launches an ordinary task per match or occurrence while Squawk is open. Schedules need no GitHub remote. With `0`, nothing polls or fires, automation endpoints answer `409`, and the nav item and schedule tools are hidden. Read at boot: restart after changing it. Existing enabled definitions resume after an upgrade unless you set `HSQ_AUTOMATIONS=0`, `CEZ_AUTOMATIONS=0` before restart. Definitions, receipts and high-watermarks are retained; unset the flag and restart to resume without migration. |
|
|
1209
|
+
| `HSQ_VOICE=1`, `CEZ_VOICE=1` | Turn on **voice mode** (experimental): the ⌘K palette understands a sentence such as “open the next finished task” or “answer yes”, and the server asks Jev (TypeSafe) to turn it into one action that the cockpit shows and runs. Needs `TYPESAFE_API_KEY` (read by the server only; `HSQ_DRY_RUN=1`, `CEZ_DRY_RUN=1` uses a fake engine instead). Off by default, and only the exact value `1` enables it — without it the voice endpoints answer `409` and the palette is unchanged. Read at boot, so restart after changing it. |
|
|
1210
|
+
| `HSQ_PREVIEW=1`, `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. Squawk 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 Squawk-started server with that unchanged approval; changed command, cwd or path needs Run and open again. Adopted servers cannot be stopped by this tool. Each agent session also gets `HSQ_PREVIEW_CDP_URL`, `CEZ_PREVIEW_CDP_URL`, a cockpit address through which it drives the same browser (`agent-browser --cdp "$CEZ_PREVIEW_CDP_URL" --pin-tab …`) while you watch; Chromium itself opens no debug port. 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. |
|
|
1211
|
+
| `HSQ_PREVIEW_NO_SANDBOX=1`, `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. |
|
|
1212
|
+
| `HSQ_AUTOSAVE=1`, `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. The turn-end / run-finalize flushes and the timer commit only while HEAD is the task's own `cez/<id8>` branch; on a branch the agent checked out they leave the work uncommitted, and the closing flush says so in the handoff's Cezar records block, not its Progress log (hearsay-tools/cezarion#1004, hearsay-tools/cezarion#1809). A turn-end / run-finalize commit is reported there too, with its `git reset --soft` fold-back command, and the timer's commits share one line per run of consecutive periodic commits (count, first and latest sha), with no cockpit note. The pre-PR flush is unchanged. |
|
|
1213
|
+
| `HSQ_CLAUDE_BIN=/path/to/claude`, `CEZ_CLAUDE_BIN=/path/to/claude` | Override the Claude executable for model discovery and execution. A set `HSQ_CLAUDE_BIN` wins over `CEZ_CLAUDE_BIN`; an explicit binary argument wins over both. |
|
|
1214
|
+
| `HSQ_CODEX_BIN=/path/to/codex`, `CEZ_CODEX_BIN=/path/to/codex` | Override which `codex` binary is used. |
|
|
1215
|
+
| `HSQ_OPENCODE_BIN=/path/to/opencode`, `CEZ_OPENCODE_BIN=/path/to/opencode` | Override which `opencode` binary is used. |
|
|
1216
|
+
| `HSQ_PI_BIN=/path/to/pi`, `CEZ_PI_BIN=/path/to/pi` | Override which `pi` binary is used. |
|
|
1217
|
+
| `HSQ_OMP_BIN=/path/to/omp`, `CEZ_OMP_BIN=/path/to/omp` | Override which `omp` (Oh My Pi) binary is used. |
|
|
1218
|
+
| `HSQ_CURSOR_BIN=/path/to/agent`, `CEZ_CURSOR_BIN=/path/to/agent` | Override the Cursor CLI (`agent`) executable. |
|
|
1219
|
+
| `CLAUDE_CONFIG_DIR`, `CODEX_HOME`, `PI_CODING_AGENT_DIR`, `OMP_PROFILE` | The agents' **own** variables, honoured where the vendor documents one. Setting one moves that agent's **default account** — the config folder (for omp, the profile) Squawk 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. |
|
|
1220
|
+
| `HSQ_BROWSE_ROOT=~/`, `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. |
|
|
1221
|
+
| `HSQ_PROJECTS_DIR=~/cezar/projects`, `CEZ_PROJECTS_DIR=~/cezar/projects` | Default destination for **Clone from GitHub** and **New project**. Saved workspace settings override it, and missing directories are created recursively. |
|
|
1222
|
+
| `HSQ_PROJECT_WARMUP=0`, `CEZ_PROJECT_WARMUP=0` | Prepare each registered project only when it is first opened. By default the cockpit prepares every other registered project in the background once it listens, one at a time, most recently opened first: the run store opens and interrupted runs resume, so the first click on a project does not wait. A project another live cockpit serves is skipped. |
|
|
1223
|
+
| `HSQ_AUTONOMOUS_DEFAULT=0`, `CEZ_AUTONOMOUS_DEFAULT=0` | Seed the New Task Autonomous default (`0` or `1`). Without a seed, skills default on and workflows off; a saved global Resources setting overrides it. |
|
|
1224
|
+
| `HSQ_WORKTREE_DEFAULT=1`, `CEZ_WORKTREE_DEFAULT=1` | Seed the New Task Worktree default (`0` or `1`). Without a seed, eligible runs default on; a saved global Resources setting overrides it. |
|
|
1225
|
+
| `HSQ_DISABLE_REPO_LOCK=1`, `CEZ_DISABLE_REPO_LOCK=1` | **Dangerous escape hatch:** allow any run executing in the repository root — an explicit `worktree=false` run, non-Git degradation, or a continuation whose worktree cannot be restored — to proceed without Squawk’s repository-root lease. Agents can overwrite each other’s files or Git state; isolated worktree runs are unaffected. Off by default; only the exact value `1` enables it. |
|
|
1226
|
+
| `HSQ_SINGLE_PROJECT=1`, `CEZ_SINGLE_PROJECT=1` | Opt into a launch-project-only cockpit: only the exact value `1` enables it. Project add, edit, checkout, folder browsing, and removal are refused and only the launch project is shown. Off by default; stored registry rows are retained, so unsetting it and restarting restores the full multi-project workspace without migration or data loss. |
|
|
1227
|
+
| `HSQ_HIDE_TOKEN_USAGE=1`, `CEZ_HIDE_TOKEN_USAGE=1` | Hide raw input/output token counts throughout the browser cockpit while leaving backend-reported cost visible. Only the exact value `1` enables it; telemetry and API payloads are unchanged, and a restart is required after changing it. |
|
|
1228
|
+
| `HSQ_HIDE_COST=1`, `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. |
|
|
1229
|
+
| `HSQ_HIDE_TOKEN_METRICS=1`, `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. |
|
|
1230
|
+
| `GITHUB_TOKEN` | Fallback for GitHub reads/PRs when `gh` isn't authenticated. |
|
|
1231
|
+
| `HSQ_HOME=/path/to/home` (`CEZ_HOME` fallback) | Selects `config/`, `state/`, `data/`, `cache/`, and `run/` below this directory. With neither set, uses the [platform roots](docs/migration.md#home-directories). A non-default `CEZ_HOME` keeps its permanent one-root fallback; an explicit legacy-default `CEZ_HOME` uses the platform roots. Both home locators are removed from child environments. |
|
|
1232
|
+
| `HSQ_ENV_PASSTHROUGH=A,B`, `CEZ_ENV_PASSTHROUGH=A,B` | Forward these extra host env vars to spawned agents. `CEZ_HOME` and `HSQ_HOME` are always removed, including in full-env mode. By default agents get a least-privilege env (safe shell/toolchain vars + the backend's own auth + `GITHUB_TOKEN` + `HSQ_*` and matching `CEZ_*` aliases), 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. |
|
|
1233
|
+
| `HSQ_AGENT_ENV_FULL=1`, `CEZ_AGENT_ENV_FULL=1` | Escape hatch: give spawned agents, and dev servers live preview starts, the full host environment except `CEZ_HOME` and `HSQ_HOME` (pre-hardening behavior). Off by default; only set it if you understand that this hands every host secret to the agent process. |
|
|
1234
|
+
| `HSQ_AGENT_TMPDIR=0`, `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/t/<task-id8>` (`.ai/cezar/tmp/<task-id>` before hearsay-tools/cezarion#1022), 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/t/<task-id8>` would leave no room under the kernel's socket-path limit for Chromium's singleton socket 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. |
|
|
1235
|
+
| `HSQ_REDACT_SECRETS=0`, `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. |
|
|
1236
|
+
| `HSQ_TITLE_UPDATES=0`, `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. |
|
|
1237
|
+
| `HSQ_AUTONAME=0`, `CEZ_AUTONAME=0` | Disable ALL LLM task naming (creation + live) — titles stay heuristic (`437: /om-auto-review-pr`). Under `HSQ_DRY_RUN=1`, `CEZ_DRY_RUN=1` naming is already off unless forced with `HSQ_AUTONAME=1`, `CEZ_AUTONAME=1`. |
|
|
1238
|
+
| `HSQ_REVIEW_GATE=1`, `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. |
|
|
1239
|
+
| `VITE_HSQ_API_BASE=http://localhost:4321`, `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. |
|
|
1240
|
+
| `VITE_HSQ_E2E=1`, `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. |
|
|
1241
|
+
|
|
1242
|
+
### Troubleshooting: the agent's shell returns nothing
|
|
1243
|
+
|
|
1244
|
+
**Symptom.** A task on the Claude backend keeps working, but every shell command
|
|
1245
|
+
comes back with no output and a spurious non-zero exit status — `echo hello`
|
|
1246
|
+
included. Redirecting into a file inside the worktree still produces the right
|
|
1247
|
+
content, so the commands genuinely run; only the *capture* is lost. Codex tasks
|
|
1248
|
+
on the same machine are unaffected, because that backend streams over stdio
|
|
1249
|
+
pipes instead of round-tripping a command's output through a temp file.
|
|
1250
|
+
|
|
1251
|
+
**Diagnosis.** The temp directory the agent was given is out of space or out of
|
|
1252
|
+
quota. One line tells you:
|
|
1253
|
+
|
|
1254
|
+
```bash
|
|
1255
|
+
echo probe > "${TMPDIR:-/tmp}/probe" # "Disk quota exceeded" / "No space left on device"
|
|
1256
|
+
df -i "${TMPDIR:-/tmp}" # a tmpfs can exhaust inodes long before bytes
|
|
1257
|
+
```
|
|
1258
|
+
|
|
1259
|
+
Under quota the file is *created* and the write then fails, so the backend reads
|
|
1260
|
+
back a zero-byte capture file and hands the agent an empty result.
|
|
1261
|
+
|
|
1262
|
+
**Fix.** Since open-mercato/cezar#785 Squawk gives each task its own `TMPDIR` under
|
|
1263
|
+
`.ai/cezar/t/<task-id8>` and write-probes it before spawning, so a broken temp
|
|
1264
|
+
directory fails the task with `agent temp directory is not writable: …` on the
|
|
1265
|
+
task thread instead of corrupting its work. If you see that error, free space on
|
|
1266
|
+
the disk holding the repo. `HSQ_AGENT_TMPDIR=0` (`CEZ_AGENT_TMPDIR` fallback) turns the whole mechanism off —
|
|
1267
|
+
per-task directory and pre-spawn check alike — and hands agents the host
|
|
1268
|
+
`TMPDIR` again, which is the way out if the check itself is wrong on your
|
|
1269
|
+
platform.
|
|
1270
|
+
|
|
1271
|
+
### Troubleshooting: tools inside a task fail with a socket-path error
|
|
1272
|
+
|
|
1273
|
+
**Symptom.** Inside a task, `npm install`, `npm run typecheck`, or another tool
|
|
1274
|
+
dies with `listen EINVAL` or a "socket path too long" / `ENAMETOOLONG` error —
|
|
1275
|
+
with `TMPDIR=/tmp` set by hand, the same commands succeed. Tools like `tsx` bind
|
|
1276
|
+
*named* unix sockets under `TMPDIR` (its IPC server builds
|
|
1277
|
+
`<tmpdir>/tsx-<uid>/<pid>.pipe`), and the kernel caps a socket path at 104–108
|
|
1278
|
+
bytes — a temp directory near that length leaves no room for the name.
|
|
1279
|
+
|
|
1280
|
+
**Fix.** Since hearsay-tools/cezarion#387 Squawk keeps each task's temp directory short
|
|
1281
|
+
enough for these sockets: at most 58 bytes since hearsay-tools/cezarion#1022, which
|
|
1282
|
+
leaves room for Chromium's `<tmpdir>/org.chromium.Chromium.XXXXXX/SingletonSocket`
|
|
1283
|
+
on macOS's 104-byte limit. The repo-local directory is `.ai/cezar/t/<task-id8>`
|
|
1284
|
+
(the first 8 characters of the task id), short enough for ordinary checkouts such
|
|
1285
|
+
as `/home/<user>/projects/<repo>`. A checkout deep enough to push it past the limit
|
|
1286
|
+
gets a short `cez-agent-…` directory under the system temp directory instead —
|
|
1287
|
+
still per-task, still write-probed before the agent spawns, still reaped when the
|
|
1288
|
+
run ends.
|
|
1289
|
+
`HSQ_AGENT_TMPDIR=0` (`CEZ_AGENT_TMPDIR` fallback) reverts the whole mechanism to the host `TMPDIR`.
|
|
1290
|
+
|
|
1291
|
+
---
|
|
1292
|
+
|
|
1293
|
+
## Coding agent backends
|
|
1294
|
+
|
|
1295
|
+
Squawk is not married to one vendor. Every agent step runs through a single
|
|
1296
|
+
`AgentRunner` seam with six built-in backends:
|
|
1297
|
+
|
|
1298
|
+
| Backend | CLI | How Squawk drives it | Tool access |
|
|
1299
|
+
|---|---|---|---|
|
|
1300
|
+
| **Claude Code** (default) | [`claude`](https://github.com/anthropics/claude-code) | Headless `stream-json` mode. | Per-tool `--allowedTools` (`bashAllowlist` scopes `Bash`); `dontAsk` denies unapproved tools without prompting (`HSQ_APPROVAL_GATE=1` (`CEZ_APPROVAL_GATE` fallback) → `acceptEdits` + approval UI; `HSQ_CLAUDE_PERMISSION_MODE=bypass` (`CEZ_CLAUDE_PERMISSION_MODE` fallback) → `--dangerously-skip-permissions`). |
|
|
1301
|
+
| **Codex** | [`codex`](https://github.com/openai/codex) | `codex app-server` — JSON-RPC over stdio, the same transport the Codex IDE extensions use. | Ignores `allowedTools`; inherits managed permissions and Codex approval defaults. Confirmed unmanaged sessions use `danger-full-access`. `HSQ_CODEX_NETWORK=0` (`CEZ_CODEX_NETWORK` fallback) requires network restriction: unmanaged sessions use network-blocked `workspace-write`; managed filesystem rules remain intact, and an unconfirmed network restriction stops before any turn. If requirements discovery is unavailable, Codex permission defaults apply. |
|
|
1302
|
+
| **OpenCode** _(experimental)_ | [`opencode`](https://opencode.ai) | `opencode serve` — a local HTTP server with an SSE event stream. | Ignores `allowedTools` entirely; OpenCode's own permission config governs. Squawk answers OpenCode's built-in asks (outside-worktree reads, `.env` reads, the repeated-call guard) once, unless your config has a rule for that permission. Any other ask shows a permission card in the cockpit, and the run waits for your answer. |
|
|
1303
|
+
| **Cursor** | [`agent`](https://cursor.com/docs/cli/installation) | Resumable `--print --output-format stream-json` turns on a qualified build; an unqualified build fails the task before inference. | Print mode admits marketplace plugins, including user and team plugins. Per-run `allowedTools` and `bashAllowlist` are unsupported. |
|
|
1304
|
+
| **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 tool names. The default list, which adds the harness extras `Subagent`, `SubagentSupervisor` and `SubagentWait`, sends no allowlist: `--no-builtin-tools` plus a bundled extension that activates those built-ins, so MCP servers (`direct`, `codemode` and `deferred` exposure) and other pi extensions' tools stay callable. The six base tools alone, the list a worker inherits from a Claude parent, take the same path. A narrowed `allowedTools`, or one that names any tool outside that default set (an `mcp__` tool, `WebFetch` or a custom tool), uses pi's `--tools` allowlist, so a step that grants named tools reaches only those; a list that maps to nothing becomes `--no-tools` (or only the Squawk tools). A configured `bashAllowlist` disables Bash because pi cannot express command-prefix rules. |
|
|
1305
|
+
| **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. |
|
|
1306
|
+
|
|
1307
|
+
> ⚠️ **OpenCode, pi and OMP support are experimental.** These runners work but are less
|
|
1308
|
+
> battle-tested than the Claude Code and Codex backends, and OpenCode ignores
|
|
1309
|
+
> `allowedTools` (its own permission config governs what it asks). Treat them as
|
|
1310
|
+
> previews and expect rough edges.
|
|
1311
|
+
|
|
1312
|
+
On startup Squawk probes which CLIs are installed and the cockpit only offers
|
|
1313
|
+
the backends it found — install any one of the six and you're operational.
|
|
1314
|
+
|
|
1315
|
+
### Cursor CLI
|
|
1316
|
+
|
|
1317
|
+
Install [Cursor CLI](https://cursor.com/docs/cli/installation) and run `agent login`,
|
|
1318
|
+
or set `CURSOR_API_KEY`. Squawk discovers `agent` on PATH; `HSQ_CURSOR_BIN` (`CEZ_CURSOR_BIN` fallback) overrides
|
|
1319
|
+
its location. Select **Cursor** in the runner picker. On build
|
|
1320
|
+
`2026.10.01-e373342` or newer, new sessions use print mode so marketplace plugins
|
|
1321
|
+
are available. Squawk checks `agent --version` and the native tool catalog before
|
|
1322
|
+
the first turn; `agent --version` is also the quick way to check your installation.
|
|
1323
|
+
Squawk starts the CLI with `--disable-auto-update`, so a task never updates it;
|
|
1324
|
+
update it yourself with `agent update`. An older build, or a build missing a core
|
|
1325
|
+
tool, fails the task before any inference, with the reason and the fix: run
|
|
1326
|
+
`agent update`, or update Squawk if your build is newer than it supports.
|
|
1327
|
+
ACP-tagged and untagged Cursor sessions cannot resume after ACP removal: Continue
|
|
1328
|
+
on one reports that, and you start a new task to carry the work on. Existing
|
|
1329
|
+
print-tagged sessions can still resume.
|
|
1330
|
+
A missing CLI leaves the other backends available. `HSQ_DRY_RUN=1` (`CEZ_DRY_RUN` fallback) uses the mock.
|
|
1331
|
+
Cursor questions from a plugin may be automatically skipped by print mode. Squawk's
|
|
1332
|
+
own `cezar_ask` questions remain answerable in the cockpit; plugins that require
|
|
1333
|
+
native questions may not work fully. Project-local Claude plugin settings may
|
|
1334
|
+
not disable a user or team marketplace copy. A previously confirmed Cursor
|
|
1335
|
+
session ID can also lose history inside Cursor without an error; Squawk resumes
|
|
1336
|
+
the recorded ID and checks that Cursor returns the same ID.
|
|
1337
|
+
Cursor provides no qualified token-usage telemetry; Squawk leaves usage unavailable
|
|
1338
|
+
instead of estimating it. Squawk discovers Cursor's canonical model IDs and advertised
|
|
1339
|
+
effort levels through Cursor's read-only ACP model catalog (`agent acp`), which opens
|
|
1340
|
+
no session. Print mode accepts those IDs and applies effort using a complete native
|
|
1341
|
+
parameter selection passed with `--model`, retaining the account catalog's defaults for
|
|
1342
|
+
other parameters. Advertised legacy print variants remain supported. An unsupported
|
|
1343
|
+
explicit effort fails instead of silently choosing another level.
|
|
1344
|
+
|
|
1345
|
+
Settings → Agent config exposes Cursor’s global `cli-config.json`, project
|
|
1346
|
+
`.cursor/cli.json` permissions, `.cursor/mcp.json`, and shared `AGENTS.md`.
|
|
1347
|
+
[Cursor’s configuration reference](https://cursor.com/docs/cli/reference/configuration)
|
|
1348
|
+
documents `CURSOR_CONFIG_DIR` and the Linux/BSD `XDG_CONFIG_HOME/cursor` override.
|
|
1349
|
+
These select configuration; Squawk does not offer alternate Cursor account profiles
|
|
1350
|
+
because a complete credential-and-session home override has not been verified.
|
|
1351
|
+
|
|
1352
|
+
### OMP (Oh My Pi)
|
|
1353
|
+
|
|
1354
|
+
Install [OMP](https://github.com/can1357/oh-my-pi) (`curl -fsSL https://omp.sh/install | sh`
|
|
1355
|
+
installs a prebuilt binary; Bun is needed only for `--source`) and run `omp login`. Squawk discovers `omp` on PATH;
|
|
1356
|
+
`HSQ_OMP_BIN` (`CEZ_OMP_BIN` fallback) overrides its location. `omp` is a separate backend from `pi`: a host with
|
|
1357
|
+
both binaries keeps both, and `HSQ_PI_BIN` (`CEZ_PI_BIN` fallback) never selects OMP. Select **OMP** in the runner
|
|
1358
|
+
picker to use a persistent `--mode rpc` session. A missing CLI leaves the other backends
|
|
1359
|
+
available and shows OMP as unavailable. `HSQ_DRY_RUN=1` (`CEZ_DRY_RUN` fallback) uses the mock.
|
|
1360
|
+
|
|
1361
|
+
Agents ask questions through Squawk's `cezar_ask` tool, and OMP's own sub-agents appear in the
|
|
1362
|
+
Agents drawer. Settings → Agent config exposes OMP's `config.yml`, `mcp.json` and
|
|
1363
|
+
`AGENTS.md` files. Named OMP profiles and accounts are not supported yet.
|
|
1364
|
+
|
|
1365
|
+
**Pick a backend at three levels** (most specific wins):
|
|
1366
|
+
|
|
1367
|
+
1. **Config default** — `"defaultRunner": "codex"` in `.ai/cezar/config.json`.
|
|
1368
|
+
2. **Per task** — the backend picker next to the task box in the cockpit.
|
|
1369
|
+
3. **Per workflow step** — `runner:` on any step in the YAML.
|
|
1370
|
+
|
|
1371
|
+
Per-step overrides are what make **mixed-agent strategies** a one-liner:
|
|
1372
|
+
implement with one agent, review with another, and let a shell check referee:
|
|
1373
|
+
|
|
1374
|
+
```yaml
|
|
1375
|
+
name: implement-and-cross-review
|
|
1376
|
+
steps:
|
|
1377
|
+
- id: implement
|
|
1378
|
+
name: Implement
|
|
1379
|
+
prompt: "{{task}}"
|
|
1380
|
+
runner: codex # one vendor writes the code…
|
|
1381
|
+
effort: medium # …with a cheaper reasoning pass
|
|
1382
|
+
- id: review
|
|
1383
|
+
name: Cross-review
|
|
1384
|
+
prompt: "Review the diff produced for: {{task}}. Fix real issues only."
|
|
1385
|
+
runner: claude # …another one reviews it
|
|
1386
|
+
effort: high # …with more reasoning for review
|
|
1387
|
+
- id: verify
|
|
1388
|
+
name: Verify
|
|
1389
|
+
command: "npm test"
|
|
1390
|
+
onFail: { retry: implement, max: 2 }
|
|
1391
|
+
```
|
|
1392
|
+
|
|
1393
|
+
Owned workers can compare approaches in separate worktrees. Each worker has its own
|
|
1394
|
+
runner and model selection; see [Owned workers](#owned-workers).
|
|
1395
|
+
|
|
1396
|
+
**Models come from your own machine.** For Claude, Codex, OpenCode, and Pi, the model picker
|
|
1397
|
+
is not a list Squawk ships — it asks the installed CLI what it can actually run
|
|
1398
|
+
(Claude stream-json `list_models`, `codex app-server`'s `model/list`,
|
|
1399
|
+
`opencode models`, and `pi --list-models`), caches the answer in
|
|
1400
|
+
memory for five minutes, and shows it. A model your provider rolled out
|
|
1401
|
+
yesterday is selectable without a Squawk release, and one it retired stops being
|
|
1402
|
+
offered. Claude discovery starts no model turn and uses safe mode with no session
|
|
1403
|
+
persistence. It has a 15-second deadline and a 200-model cap, with child cleanup
|
|
1404
|
+
on every outcome. Unsupported or unavailable Claude CLIs fall back to the
|
|
1405
|
+
`opus`, `sonnet`, and `haiku` aliases. `auto` (let the agent decide) is always
|
|
1406
|
+
available, including when the CLI is missing, logged out, or slow — discovery
|
|
1407
|
+
never blocks the cockpit, and a model you pinned yourself stays selectable even
|
|
1408
|
+
if it is absent from the discovered list.
|
|
1409
|
+
|
|
1410
|
+
The seam is deliberately small: a backend is one class implementing the
|
|
1411
|
+
`AgentRunner` interface (`packages/cezar/src/core/agent-runner.ts`) that turns a prompt into
|
|
1412
|
+
a stream of normalized events. Other CLIs — pi, aider, whatever ships next —
|
|
1413
|
+
can slot in the same way.
|
|
1414
|
+
|
|
1415
|
+
---
|
|
1416
|
+
|
|
1417
|
+
## Desktop app
|
|
1418
|
+
|
|
1419
|
+
Squawk Desktop is a Tauri 2 app for macOS, Windows and Linux. Start a local cockpit
|
|
1420
|
+
or connect to a remote HTTPS cockpit (loopback HTTP supports SSH tunnels). Remote
|
|
1421
|
+
windows have no native command permissions and need no local Node or agent install.
|
|
1422
|
+
Local mode needs Node.js 24.21.0+ and npm, then installs `@hearsay-tools/squawk` on first use.
|
|
1423
|
+
|
|
1424
|
+
See [desktop installation, development and testing](docs/desktop.md). PR builds
|
|
1425
|
+
provide test installers; public releases require platform signing and notarization.
|
|
1426
|
+
|
|
1427
|
+
## Remote access (host Squawk on a server)
|
|
1428
|
+
|
|
1429
|
+
Squawk runs on `localhost` by default. To reach the cockpit from another machine —
|
|
1430
|
+
a shared team box, a VPS, your phone — put an **authenticated public front** in
|
|
1431
|
+
front of it. The built-in installer does this interactively, per **platform
|
|
1432
|
+
strategy**, and never escalates silently: every privileged command is printed
|
|
1433
|
+
and verified, and it ends with a real authenticated end-to-end check.
|
|
1434
|
+
|
|
1435
|
+
```bash
|
|
1436
|
+
npx hsq server-install --platform ubuntu-vps # stand it up
|
|
1437
|
+
npx hsq server-deploy --platform ubuntu-vps # roll out a new version (reload the service)
|
|
1438
|
+
npx hsq server-uninstall --platform ubuntu-vps # reverse it
|
|
1439
|
+
|
|
1440
|
+
# host a SECOND cockpit for another domain on the same box (ubuntu-vps):
|
|
1441
|
+
|
|
1442
|
+
npx hsq server-install --platform ubuntu-vps --domain shop.example.com
|
|
1443
|
+
```
|
|
1444
|
+
|
|
1445
|
+
On `ubuntu-vps` a single host can run several independent cockpits — add
|
|
1446
|
+
`--domain <host>` and each gets its own port, nginx site, login and service; a
|
|
1447
|
+
new domain never resumes or clobbers the first install.
|
|
1448
|
+
|
|
1449
|
+
**Already running a reverse proxy?** If Dokploy, Coolify, Caddy or your own
|
|
1450
|
+
nginx already owns `:80/:443`, Squawk's would fight it for the ports. Install the
|
|
1451
|
+
service only and let your proxy front it:
|
|
1452
|
+
|
|
1453
|
+
```bash
|
|
1454
|
+
npx hsq server-install --platform ubuntu-vps \
|
|
1455
|
+
--external-proxy --domain Squawk.example.com --bind-host 172.17.0.1
|
|
1456
|
+
```
|
|
1457
|
+
|
|
1458
|
+
`--bind-host` is only needed when the proxy runs in a **container** (Traefik
|
|
1459
|
+
can't reach the host's loopback); a host-installed proxy uses the `127.0.0.1`
|
|
1460
|
+
default. In this mode **your proxy must enforce authentication** — Squawk has
|
|
1461
|
+
none of its own. [Details →](docs/server-install/ubuntu-vps.md#the-box-already-has-a-reverse-proxy-dokploy-coolify-caddy)
|
|
1462
|
+
|
|
1463
|
+
| Provider | `--platform` | Public front | Guide |
|
|
1464
|
+
|----------|--------------|--------------|-------|
|
|
1465
|
+
| Ubuntu / Debian VPS | `ubuntu-vps` | nginx + Let's Encrypt HTTPS, htpasswd login, systemd | [Step-by-step →](docs/server-install/ubuntu-vps.md) |
|
|
1466
|
+
| Ubuntu + existing proxy | `ubuntu-vps --external-proxy` | your Dokploy/Traefik/Caddy front; Squawk ships the service only | [Step-by-step →](docs/server-install/ubuntu-vps.md#the-box-already-has-a-reverse-proxy-dokploy-coolify-caddy) |
|
|
1467
|
+
| macOS + ngrok | `macosx-ngrok` | ngrok tunnel + `--basic-auth`, launchd | [Step-by-step →](docs/server-install/macosx-ngrok.md) |
|
|
1468
|
+
|
|
1469
|
+
See the **[Remote access overview](docs/server-install/README.md)** for how it
|
|
1470
|
+
works and how to redeploy new versions. A remote cockpit keeps Agent config and
|
|
1471
|
+
worktree setup read-only; to edit them from the browser, see
|
|
1472
|
+
**[Remote settings administration](docs/server-install/remote-settings.md)**.
|
|
1473
|
+
|
|
1474
|
+
---
|
|
1475
|
+
|
|
1476
|
+
## Reviewing task files
|
|
1477
|
+
|
|
1478
|
+
File links in task messages open the Files tab at the selected file, rather than
|
|
1479
|
+
navigating to a host path under the cockpit URL. The selection stays in the URL,
|
|
1480
|
+
so bookmarks and browser Back work. This works with local and remote cockpits.
|
|
1481
|
+
|
|
1482
|
+
For a deliverable outside the project, an agent must explicitly publish a snapshot:
|
|
1483
|
+
|
|
1484
|
+
```sh
|
|
1485
|
+
hsq artifact publish /tmp/decision.md
|
|
1486
|
+
```
|
|
1487
|
+
|
|
1488
|
+
An agent starts a long command, such as a benchmark or a full test run, with `hsq job start`:
|
|
1489
|
+
|
|
1490
|
+
```sh
|
|
1491
|
+
hsq job start bench -- npm run benchmark
|
|
1492
|
+
hsq job status bench
|
|
1493
|
+
```
|
|
1494
|
+
|
|
1495
|
+
The command keeps running after the agent's shell call, turn and session end. It prints the
|
|
1496
|
+
paths of its log file and its exit-code file, which are in the task's temp directory unless
|
|
1497
|
+
`--dir` names another one. The agent waits for it with a process wait. A second start of a
|
|
1498
|
+
name that still runs is refused.
|
|
1499
|
+
|
|
1500
|
+
Squawk supplies the bundled command and task context to agent sessions automatically
|
|
1501
|
+
(`HSQ_TASK_ID` (`CEZ_TASK_ID` fallback) and `HSQ_ARTIFACTS_DIR` (`CEZ_ARTIFACTS_DIR` fallback); do not configure these yourself). The command
|
|
1502
|
+
returns JSON with a Markdown link for the agent to share. When the owning project
|
|
1503
|
+
is registered, the link keeps that project when copied or opened from another
|
|
1504
|
+
project. If ownership cannot be discovered, publication keeps the legacy task link.
|
|
1505
|
+
The Files tab also lists published artifacts. It previews text, Markdown and raster
|
|
1506
|
+
images; other formats can be downloaded. Published HTML links in assistant replies also
|
|
1507
|
+
show report cards. **Read report** opens the sandboxed reader beside the conversation
|
|
1508
|
+
on wide screens, in the main area on medium screens, and full screen on phones.
|
|
1509
|
+
Back returns to the source card. Unopened cards fetch metadata only.
|
|
1510
|
+
Report scripts never execute, and embedded images in Markdown documents do not load
|
|
1511
|
+
automatically.
|
|
1512
|
+
|
|
1513
|
+
Snapshots do not change when the original file changes. They survive worktree
|
|
1514
|
+
removal and are removed with task history, including normal history retention.
|
|
1515
|
+
Publication is limited to 10 MiB per file, 64 snapshots and 64 MiB per task; reaching
|
|
1516
|
+
a limit refuses the new publication without evicting earlier files. There is no
|
|
1517
|
+
arbitrary host-file reader or automatic collection of mentioned paths. Publish
|
|
1518
|
+
only intended review material, never credentials or unrelated private files.
|
|
1519
|
+
|
|
1520
|
+
## Configuration (optional)
|
|
1521
|
+
|
|
1522
|
+
Zero config is the default — everything below is opt-in via the project's
|
|
1523
|
+
`config.json` in `.ai/squawk/` (`.ai/cezar/` before the project moves). A missing
|
|
1524
|
+
or malformed file uses the defaults, a bad value falls back to its own default,
|
|
1525
|
+
nothing blocks startup, and the cockpit never saves over a file that is not valid
|
|
1526
|
+
JSON:
|
|
1527
|
+
|
|
1528
|
+
```jsonc
|
|
1529
|
+
{
|
|
1530
|
+
"skillsRepos": [], // team skills; none by default. Example: [{ "repo": "open-mercato/skills", "ref": "main" }]
|
|
1531
|
+
// Team-skill repos are code-trusted: a skill body becomes an agent system prompt.
|
|
1532
|
+
// Only owner/name, https/ssh URLs, or local paths (`/abs`, `./rel`, `~/dir`,
|
|
1533
|
+
// `C:\dir`) are accepted — no ext::/fd:: transport helpers. Write a relative
|
|
1534
|
+
// path as `./name`, not a bare `name`. Pin `ref` to a full commit SHA to freeze
|
|
1535
|
+
// the source against a moving branch head — Squawk verifies it resolves to
|
|
1536
|
+
// exactly that commit, and reports it as `team.commit`. `"enabled": false` keeps
|
|
1537
|
+
// a source listed but loads none of its skills. The Skills page edits this list,
|
|
1538
|
+
// keeps every other key, and refuses to write a file it cannot read.
|
|
1539
|
+
"worktreeRetention": 10, // keep the last N finished worktrees on disk; 0 = unlimited (no reclaim, no branch sweep)
|
|
1540
|
+
"defaultRunner": "claude", // agent backend: "claude" (default) · "codex" · "opencode" · "cursor" · "pi" · "omp"
|
|
1541
|
+
"modelsLocked": true, // optional: native per-runner model is fixed/read-only; runner stays selectable
|
|
1542
|
+
"plannerModel": "sonnet", // model the "Plan first" button uses to draft chains
|
|
1543
|
+
"baseBranch": "develop", // branch worktrees fork from + PRs target (also settable in the Git view)
|
|
1544
|
+
"worktreeSetup": { "commands": ["npm ci"] } // prepare each new worktree before the agent starts (below)
|
|
1545
|
+
}
|
|
1546
|
+
```
|
|
1547
|
+
|
|
1548
|
+
Put the same `"modelsLocked": true` key in `<config>/config.json` to apply it
|
|
1549
|
+
to every registered project. When the key is absent or `false` in both config
|
|
1550
|
+
files (and `HSQ_AGENT_MODELS_LOCKED` (`CEZ_AGENT_MODELS_LOCKED` fallback) is not `1`), each runner's normal model
|
|
1551
|
+
selector uses that runner's discovered model list. While locked, the model is
|
|
1552
|
+
shown read-only and follows the selected runner's native settings; the runner
|
|
1553
|
+
itself remains selectable.
|
|
1554
|
+
|
|
1555
|
+
Run data (`runs.db` and its `-wal`/`-shm` files, the `runs.json.pre-sqlite*.bak`
|
|
1556
|
+
backups, NDJSON event logs, worktrees, `todos.json`) is git-ignored
|
|
1557
|
+
automatically; your workflows and skills stay committable. See [run history recovery](https://github.com/hearsay-tools/cezarion/blob/main/docs/run-history-recovery.md) for backup and repair steps.
|
|
1558
|
+
|
|
1559
|
+
Settings that belong to *you* rather than to a repo — the parallel cap
|
|
1560
|
+
(`maxParallel`, default **2**), the per-task memory ceiling and the checkout
|
|
1561
|
+
root — live once in `<config>/config.json`, alongside the
|
|
1562
|
+
[project registry](#multiple-projects-one-cockpit), and are edited from
|
|
1563
|
+
**Settings → Resources** and **Settings → Projects**. A `maxParallel` left over
|
|
1564
|
+
in a repo's `.ai/cezar/config.json` is imported into the workspace file the
|
|
1565
|
+
first time Squawk boots there, and ignored afterwards.
|
|
1566
|
+
|
|
1567
|
+
### Session-start context
|
|
1568
|
+
|
|
1569
|
+
Every session Squawk launches — a fresh step, a retry, **Continue**, recovery, an owned
|
|
1570
|
+
worker — opens with the run's whole handoff file, so the agent has its notes without a tool
|
|
1571
|
+
call. Add your own context, such as a vision document, with an optional
|
|
1572
|
+
`.ai/cezar/context.yaml`:
|
|
1573
|
+
|
|
1574
|
+
```yaml
|
|
1575
|
+
version: 1
|
|
1576
|
+
rules:
|
|
1577
|
+
- id: project-vision
|
|
1578
|
+
on: session_start
|
|
1579
|
+
target: both # parent · worker · both
|
|
1580
|
+
template: |
|
|
1581
|
+
Project vision:
|
|
1582
|
+
{{file:docs/vision.md}}
|
|
1583
|
+
```
|
|
1584
|
+
|
|
1585
|
+
The whole prefix is capped at 64 KiB, blocks that do not fit are skipped whole, and each launch
|
|
1586
|
+
logs which blocks it applied or skipped. See [docs/context-injection.md](docs/context-injection.md)
|
|
1587
|
+
for the variables, the limits and the error handling.
|
|
1588
|
+
|
|
1589
|
+
### Preparing new worktrees
|
|
1590
|
+
|
|
1591
|
+
Every task and worker runs in a fresh worktree, and a fresh worktree has nothing installed. Give
|
|
1592
|
+
the project a `worktreeSetup` and Squawk runs those commands in each new worktree before the
|
|
1593
|
+
agent's first turn, so the agent (and anything that runs beside it, such as a test watcher)
|
|
1594
|
+
starts in a ready tree:
|
|
1595
|
+
|
|
1596
|
+
```jsonc
|
|
1597
|
+
// .ai/squawk/config.json (.ai/cezar/config.json before the project moves)
|
|
1598
|
+
"worktreeSetup": {
|
|
1599
|
+
"commands": ["npm ci", "cp \"$HSQ_PROJECT_ROOT/.env\" .env"],
|
|
1600
|
+
"timeoutSeconds": 900 // optional, per command; default 900, max 7200
|
|
1601
|
+
}
|
|
1602
|
+
```
|
|
1603
|
+
|
|
1604
|
+
Or edit it in **Settings → Worktrees → Prepare new worktrees**, one command per line. These are
|
|
1605
|
+
commands the host runs, so a hosted cockpit (`HSQ_REMOTE=1` or `CEZ_REMOTE=1`) shows it read-only until the host
|
|
1606
|
+
operator runs `hsq remote-settings enable` ([Remote settings administration](docs/server-install/remote-settings.md)).
|
|
1607
|
+
|
|
1608
|
+
- **When it runs.** In every new task worktree and every worker worktree, and again when Continue
|
|
1609
|
+
rebuilds a worktree that retention reclaimed. Never for a task that runs in the repo working
|
|
1610
|
+
tree (worktree off), and never for a non-git directory.
|
|
1611
|
+
- **How it runs.** Each command runs as `bash -lc '<command>'` in the worktree root, in order,
|
|
1612
|
+
and the setup stops at the first command that fails or times out. Up to 20 commands.
|
|
1613
|
+
- **What it can see.** The same curated environment the live preview gives a dev server: your
|
|
1614
|
+
`PATH`, `HOME` and the shell basics, but no agent API keys and no GitHub token. A private
|
|
1615
|
+
registry token reaches it through `HSQ_ENV_PASSTHROUGH=NPM_TOKEN` (`CEZ_ENV_PASSTHROUGH` fallback) (or the tool's own config
|
|
1616
|
+
file under `HOME`). It also gets `HSQ_PROJECT_ROOT` (`CEZ_PROJECT_ROOT` fallback) (the main checkout, for copying untracked
|
|
1617
|
+
files like `.env`) and `HSQ_TASK_ID` (`CEZ_TASK_ID` fallback).
|
|
1618
|
+
- **What you see.** The task thread shows a "Ran `<command>`" card per command with its output
|
|
1619
|
+
(the last 20 KB) and a line with the outcome and duration.
|
|
1620
|
+
- **What the agent sees.** Its first message says what ran, so it doesn't repeat the install.
|
|
1621
|
+
If a command fails or times out, the agent still starts and its first message names the
|
|
1622
|
+
command, the exit code and the end of the output, so it can fix the cause or work around it.
|
|
1623
|
+
- **Keep generated files gitignored.** Autosave commits whatever Git doesn't ignore, so anything
|
|
1624
|
+
setup creates outside `.gitignore` becomes part of the task's changes. `node_modules/` and
|
|
1625
|
+
`.venv/` are usually ignored already.
|
|
1626
|
+
|
|
1627
|
+
Without the key nothing runs, exactly as before. Examples:
|
|
1628
|
+
|
|
1629
|
+
| Project | `commands` |
|
|
1630
|
+
| --- | --- |
|
|
1631
|
+
| npm | `["npm ci"]` |
|
|
1632
|
+
| pnpm | `["pnpm install --frozen-lockfile"]` |
|
|
1633
|
+
| Python (uv) | `["uv sync --frozen"]` |
|
|
1634
|
+
| Go | `["go mod download"]` |
|
|
1635
|
+
| Rust | `["cargo fetch"]` |
|
|
1636
|
+
| Copy local env | `["cp \"$CEZ_PROJECT_ROOT/.env\" .env"]` |
|
|
1637
|
+
|
|
1638
|
+
### Editing the agents' own config (Settings → Agent config)
|
|
1639
|
+
|
|
1640
|
+
Squawk picks *which* agent runs; **Settings → Agent config** lets you edit *how* it
|
|
1641
|
+
behaves — the raw config files Claude, Codex, OpenCode, Cursor, pi and OMP read
|
|
1642
|
+
for settings, MCP, and memory. In the multi-project cockpit the section is project-scoped:
|
|
1643
|
+
repo-relative files resolve from the selected project's root, while user-scope
|
|
1644
|
+
files continue to resolve from the agent's home.
|
|
1645
|
+
|
|
1646
|
+
Each file keeps its native format and vendor-documented precedence. Tracked
|
|
1647
|
+
files reach task worktrees after commit; Claude's gitignored personal layer is
|
|
1648
|
+
seeded into each run's worktree. Config files can define hooks and MCP commands that run
|
|
1649
|
+
on the host, so a hosted cockpit (`HSQ_REMOTE=1` or `CEZ_REMOTE=1`) is read-only and never serves home-file
|
|
1650
|
+
contents until the host operator runs `hsq remote-settings enable`
|
|
1651
|
+
([Remote settings administration](docs/server-install/remote-settings.md)).
|
|
1652
|
+
|
|
1653
|
+
---
|
|
1654
|
+
|
|
1655
|
+
## Local development
|
|
1656
|
+
|
|
1657
|
+
End-to-end, from a fresh clone to a global `hsq` command you can run in **any**
|
|
1658
|
+
repo on your machine — no npm publish required.
|
|
1659
|
+
|
|
1660
|
+
**1. Prerequisites** — Node 24.21.0+ and `git` (plus at least one logged-in agent CLI,
|
|
1661
|
+
as in [Quick start](#quick-start)).
|
|
1662
|
+
|
|
1663
|
+
**2. Clone & install**
|
|
1664
|
+
|
|
1665
|
+
The npm global prefix must be writable by your user. On Unix, use Node installed
|
|
1666
|
+
with nvm, or set a user-owned prefix (`npm config set prefix ~/.npm-global`) and
|
|
1667
|
+
add `~/.npm-global/bin` to your `PATH`. On Windows, use a user-owned npm prefix
|
|
1668
|
+
and add the prefix itself (reported by `npm prefix -g`) to `PATH`; npm puts
|
|
1669
|
+
Windows executables directly there. Set `PATH` before these commands.
|
|
1670
|
+
|
|
1671
|
+
```bash
|
|
1672
|
+
git clone https://github.com/hearsay-tools/cezarion.git
|
|
1673
|
+
cd cezarion
|
|
1674
|
+
npm install --global pnpm@12.11.2
|
|
1675
|
+
pnpm install --frozen-lockfile
|
|
1676
|
+
```
|
|
1677
|
+
|
|
1678
|
+
Dependency installation uses pnpm 12.11.2 (pinned in `packageManager`) and
|
|
1679
|
+
`pnpm-lock.yaml`. Use pnpm for dependency changes; keep npm for the existing
|
|
1680
|
+
build/test scripts. Workspace dependencies are linked locally and esbuild's
|
|
1681
|
+
install hook is approved in `pnpm-workspace.yaml`. The store uses hardlinks when
|
|
1682
|
+
the checkout and store share a filesystem. Publishing and end-user installation
|
|
1683
|
+
continue to use npm. For this repository's Worktrees setup, use
|
|
1684
|
+
`pnpm install --frozen-lockfile` after the checked-out base branch contains the migration.
|
|
1685
|
+
|
|
1686
|
+
**3. Build** — compiles the api-client and the server (`tsc → packages/cezar/dist/`) and the cockpit
|
|
1687
|
+
(`vite build → packages/cezar/web/dist/`), then runs the pack gate:
|
|
1688
|
+
|
|
1689
|
+
```bash
|
|
1690
|
+
npm run build
|
|
1691
|
+
```
|
|
1692
|
+
|
|
1693
|
+
**4. Install as a global command** — build + put `hsq` on
|
|
1694
|
+
your PATH pointing at *this checkout*:
|
|
1695
|
+
|
|
1696
|
+
```bash
|
|
1697
|
+
npm run install-as-command # live link (default) — see the change loop below
|
|
1698
|
+
# or: npm run install-as-command:global # self-contained snapshot copy
|
|
1699
|
+
|
|
1700
|
+
```
|
|
1701
|
+
|
|
1702
|
+
Now `cd` into any other repo and run it:
|
|
1703
|
+
|
|
1704
|
+
```bash
|
|
1705
|
+
cd ~/some-other-project
|
|
1706
|
+
hsq # cockpit for that repo, straight off your checkout
|
|
1707
|
+
hsq --help # the same command as `npx hsq`
|
|
1708
|
+
```
|
|
1709
|
+
|
|
1710
|
+
**5. The change loop**
|
|
1711
|
+
|
|
1712
|
+
- **Link mode** (default): edit source → `npm run build` → the global command
|
|
1713
|
+
reflects it immediately. No relink needed. (It is a live symlink into this
|
|
1714
|
+
checkout — don't move or delete the checkout while it's linked.)
|
|
1715
|
+
- **Snapshot mode** (`:global`): re-run `npm run install-as-command:global` to
|
|
1716
|
+
refresh the installed copy. It survives moving/deleting the checkout.
|
|
1717
|
+
|
|
1718
|
+
**6. Uninstall**
|
|
1719
|
+
|
|
1720
|
+
```bash
|
|
1721
|
+
npm run uninstall-as-command # removes hsq and the compatibility commands (either flavor)
|
|
1722
|
+
```
|
|
1723
|
+
|
|
1724
|
+
**7. Troubleshooting**
|
|
1725
|
+
|
|
1726
|
+
- **`hsq: command not found`** after install → your npm global bin dir isn't on
|
|
1727
|
+
PATH. The script prints the exact dir; add it to your shell profile
|
|
1728
|
+
(Unix: `export PATH="$(npm prefix -g)/bin:$PATH"`; Windows: add the directory
|
|
1729
|
+
reported by `npm prefix -g` itself to `PATH`, without a `bin` suffix).
|
|
1730
|
+
- **`EACCES` / permission denied** → your global prefix is root-owned. Point npm
|
|
1731
|
+
at a user-writable one and retry — **never** sudo:
|
|
1732
|
+
`npm config set prefix ~/.npm-global`.
|
|
1733
|
+
- **Already installed the published `@wjarka/cezarion` globally?** The
|
|
1734
|
+
link/snapshot install replaces it; `uninstall-as-command` removes ours, and
|
|
1735
|
+
`npm i -g @hearsay-tools/squawk` brings the published one back.
|
|
1736
|
+
|
|
1737
|
+
### In-checkout scripts
|
|
1738
|
+
|
|
1739
|
+
```bash
|
|
1740
|
+
npm run dev # server (API :4321) + Vite dev server, opens the cockpit in the browser
|
|
1741
|
+
npm run dev:server # tsx packages/cezar/src/index.ts — the API server alone
|
|
1742
|
+
npm run dev:web # Vite dev server alone (proxies /api to :4321)
|
|
1743
|
+
npm run build # tsc → packages/cezar/dist/, vite build → packages/cezar/web/dist/, then the pack gate
|
|
1744
|
+
npm run typecheck # check all four workspaces without building
|
|
1745
|
+
npm run typecheck:web # check web sources without building
|
|
1746
|
+
npm test # vitest — server + cockpit unit suites
|
|
1747
|
+
npm run test:changed # iteration only: tests related to branch + working-tree changes
|
|
1748
|
+
pnpm metrics <file> # function complexity; add --test <test-file> for coverage and CRAP
|
|
1749
|
+
npm run test:unit # node:test — fast core-module tests
|
|
1750
|
+
npm run test:package # pack/install and exercise the built CLI
|
|
1751
|
+
npm run test:e2e # real-browser cockpit suite (agent-browser)
|
|
1752
|
+
npm run test:e2e:local # full browser suite in four isolated, concurrent lanes
|
|
1753
|
+
```
|
|
1754
|
+
|
|
1755
|
+
The four-lane local browser run needs roughly 8 GiB of RAM at peak. It keeps CI's
|
|
1756
|
+
serial-per-shard policy unchanged. See [cockpit E2E testing](packages/web/e2e/README.md#full-local-suite-in-four-lanes)
|
|
1757
|
+
for lane isolation, logs, and cleanup.
|
|
1758
|
+
|
|
1759
|
+
Calculate metrics for one JavaScript or TypeScript file, or select a function:
|
|
1760
|
+
|
|
1761
|
+
```bash
|
|
1762
|
+
pnpm metrics packages/contract/src/attention.ts
|
|
1763
|
+
pnpm metrics packages/contract/src/attention.ts --function deriveAttention
|
|
1764
|
+
pnpm --silent metrics packages/contract/src/attention.ts --line 150 --json
|
|
1765
|
+
pnpm metrics packages/contract/src/attention.ts --function deriveAttention --test packages/contract/src/attention.test.ts
|
|
1766
|
+
pnpm metrics packages/contract/src/attention.ts --coverage coverage/coverage-final.json
|
|
1767
|
+
```
|
|
1768
|
+
|
|
1769
|
+
Complexity follows ESLint's classic convention, including short-circuit operators,
|
|
1770
|
+
optional chaining, default parameters and each non-default switch case. Functions,
|
|
1771
|
+
methods and arrow functions have separate scores. Module and class initialization
|
|
1772
|
+
are excluded. Use `Class.method` or `--line` when a name is ambiguous.
|
|
1773
|
+
|
|
1774
|
+
CRAP is `C² × (1 − coverage)³ + C`, using executable line coverage within each
|
|
1775
|
+
function body. This is the line-coverage variant; the original proposal used
|
|
1776
|
+
basis-path coverage. An empty function uses its call counter. Missing coverage
|
|
1777
|
+
shows `unavailable`, or `null` for CRAP in JSON. It never assumes zero coverage.
|
|
1778
|
+
The command discovers `coverage/coverage-final.json` from the source directory
|
|
1779
|
+
up to the checkout root, then the current directory. An explicit `--coverage`
|
|
1780
|
+
selects an Istanbul JSON report. Reports older than the source leave CRAP unavailable;
|
|
1781
|
+
reports must describe the current source, so regenerate them after source changes.
|
|
1782
|
+
|
|
1783
|
+
Repeat `--test` to collect coverage from several Vitest test files. This runs only
|
|
1784
|
+
the supplied tests in the unit projects, with two workers and a ten-minute limit.
|
|
1785
|
+
Coverage files are temporary and are removed after the calculation. A failed test
|
|
1786
|
+
run exits nonzero and produces no scores. Without `--test`, no tests run. Test logs
|
|
1787
|
+
go to stderr, so `--json` stdout contains only the report. This tool belongs to the
|
|
1788
|
+
checkout and is available after the normal dependency installation. Use
|
|
1789
|
+
`pnpm --silent metrics ... --json` to also suppress pnpm's command banner.
|
|
1790
|
+
|
|
1791
|
+
The tool is bundled in the [check-code-quality skill](.ai/skills/check-code-quality/SKILL.md).
|
|
1792
|
+
Ask an agent to measure a file, function or module for a scoped stats report.
|
|
1793
|
+
That path uses available coverage and reports missing CRAP without starting the
|
|
1794
|
+
PR process. Ask explicitly for fresh coverage when needed.
|
|
1795
|
+
|
|
1796
|
+
The local pre-PR gate uses Squeal 0.1.423's one-shot changed-function check:
|
|
1797
|
+
|
|
1798
|
+
```bash
|
|
1799
|
+
quality_report=$(mktemp "${TMPDIR:-/tmp}/code-quality.XXXXXXXX") || exit 2
|
|
1800
|
+
squeal code --base origin/main --json > "$quality_report"
|
|
1801
|
+
quality_status=$?
|
|
1802
|
+
printf 'Report: %s; exit: %s\n' "$quality_report" "$quality_status"
|
|
1803
|
+
```
|
|
1804
|
+
|
|
1805
|
+
It checks changed JS/TS functions, including test callbacks and nested functions,
|
|
1806
|
+
with complexity at most 20 and CRAP at most 30. Equality passes. The default
|
|
1807
|
+
budget is 600 seconds. The base commit supplies the policy.
|
|
1808
|
+
|
|
1809
|
+
A pass requires complete evidence: no skipped, incomplete or uncounted functions,
|
|
1810
|
+
failed or unfinished tests, or exhausted budget. Exit 0 alone is insufficient
|
|
1811
|
+
because a report can contain skipped functions. Exits 1, 3 and 2 mean violations,
|
|
1812
|
+
incomplete measurement and usage/setup errors. Missing Squeal or unsupported
|
|
1813
|
+
evidence blocks the PR. There is no bundled fallback or inherited-refactor
|
|
1814
|
+
deferral. See the [pre-PR procedure](.ai/skills/check-code-quality/references/pre-pr.md)
|
|
1815
|
+
for report identity, completeness checks and reviewable evidence.
|
|
1816
|
+
|
|
1817
|
+
CI and explicit statistics commands keep their existing paths during this
|
|
1818
|
+
local-first rollout. CI artifact reuse and supported exceptions await the
|
|
1819
|
+
remaining work in hearsay-tools/squeal#167.
|
|
1820
|
+
|
|
1821
|
+
For iteration, run affected test files or `npm run test:changed` (inspect with
|
|
1822
|
+
`-- --plan`; override the local main comparison with `-- --base=<ref>`).
|
|
1823
|
+
The changed-test command includes staged, unstaged and untracked changes and
|
|
1824
|
+
falls back to full Vitest on shared/configuration/unknown input or missing Git
|
|
1825
|
+
history. It is not a substitute for final verification. See [AGENTS.md § Validation](AGENTS.md#validation)
|
|
1826
|
+
for targeted browser commands and the [CI guide](docs/sdlc/ci.md) for the final-gate/evidence-reuse policy.
|
|
1827
|
+
|
|
1828
|
+
`npm run typecheck` checks all four workspaces from source without writing build
|
|
1829
|
+
output. `npm run typecheck:web` checks the cockpit and reads the server route types
|
|
1830
|
+
from this checkout. Run `pnpm install --frozen-lockfile` in each new worktree first.
|
|
1831
|
+
Packaged CLI tests import built modules; CI checks them with
|
|
1832
|
+
`npm run typecheck:package` after `npm run build`.
|
|
1833
|
+
|
|
1834
|
+
CI runs four duration-balanced Vitest shards alongside the build and package checks.
|
|
1835
|
+
See [CI verification](docs/sdlc/ci.md) for the job graph and local commands.
|
|
1836
|
+
|
|
1837
|
+
The stack is deliberately small: **TypeScript** (strict, ESM), **Hono** + SSE for
|
|
1838
|
+
the server, **Zod** at every boundary, **YAML** for workflows, and a **React 19 +
|
|
1839
|
+
Vite + Tailwind v4 + shadcn/ui** cockpit shipped pre-built in `packages/cezar/web/dist/` — the
|
|
1840
|
+
published package carries the built app, so `npx` users never run a bundler.
|
|
1841
|
+
Every module is meant to be read in one sitting.
|
|
1842
|
+
|
|
1843
|
+
---
|
|
1844
|
+
|
|
1845
|
+
## License
|
|
1846
|
+
|
|
1847
|
+
**MIT** © Patryk Lewczuk (original Cezar) and Wiktor Jarka (Cezarion) — full text in [LICENSE](LICENSE).
|