@wjarka/cezarion 0.16.0 → 0.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -0
- package/README.md +594 -207
- package/dist/agent-config/account-identity.d.ts +3 -19
- package/dist/agent-config/account-identity.js +8 -5
- package/dist/agent-config/account-identity.js.map +1 -1
- package/dist/agent-config/catalog.d.ts +3 -14
- package/dist/agent-config/catalog.js.map +1 -1
- package/dist/agent-config/files.d.ts +2 -6
- package/dist/agent-config/files.js +2 -6
- package/dist/agent-config/files.js.map +1 -1
- package/dist/agent-config/model-settings/types.d.ts +1 -1
- package/dist/agent-config/seed.d.ts +11 -3
- package/dist/agent-config/seed.js +52 -48
- package/dist/agent-config/seed.js.map +1 -1
- package/dist/agent-config/service.js +3 -2
- package/dist/agent-config/service.js.map +1 -1
- package/dist/agent-config/validate.d.ts +1 -4
- package/dist/agent-config/validate.js.map +1 -1
- package/dist/application-update/helper.d.ts +2 -2
- package/dist/application-update/helper.js +7 -12
- package/dist/application-update/helper.js.map +1 -1
- package/dist/application-update/launcher.d.ts +4 -0
- package/dist/application-update/launcher.js +18 -12
- package/dist/application-update/launcher.js.map +1 -1
- package/dist/application-update/service.d.ts +3 -3
- package/dist/application-update/service.js +1 -1
- package/dist/application-update/service.js.map +1 -1
- package/dist/archive-on-merge-setting.d.ts +15 -0
- package/dist/archive-on-merge-setting.js +14 -0
- package/dist/archive-on-merge-setting.js.map +1 -0
- package/dist/artifacts/cli.d.ts +8 -0
- package/dist/artifacts/cli.js +21 -2
- package/dist/artifacts/cli.js.map +1 -1
- package/dist/artifacts/resolve.js +2 -1
- package/dist/artifacts/resolve.js.map +1 -1
- package/dist/artifacts/store.js.map +1 -1
- package/dist/automations/automation-cli.d.ts +59 -0
- package/dist/automations/automation-cli.js +509 -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/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 +23 -4
- package/dist/automations/github-poller.js +157 -88
- package/dist/automations/github-poller.js.map +1 -1
- package/dist/automations/prompts.d.ts +12 -0
- package/dist/automations/prompts.js +160 -0
- package/dist/automations/prompts.js.map +1 -0
- package/dist/automations/schedule-runner.d.ts +43 -24
- package/dist/automations/schedule-runner.js +207 -20
- package/dist/automations/schedule-runner.js.map +1 -1
- package/dist/automations/scheduler.d.ts +10 -2
- package/dist/automations/scheduler.js +200 -54
- package/dist/automations/scheduler.js.map +1 -1
- package/dist/automations/service.d.ts +777 -0
- package/dist/automations/service.js +444 -0
- package/dist/automations/service.js.map +1 -0
- package/dist/automations/store.d.ts +17 -7
- package/dist/automations/store.js +88 -17
- package/dist/automations/store.js.map +1 -1
- package/dist/automations/task-template.d.ts +7 -2
- package/dist/automations/task-template.js +93 -44
- package/dist/automations/task-template.js.map +1 -1
- package/dist/automations/tool-adapter.d.ts +6 -0
- package/dist/automations/tool-adapter.js +108 -0
- package/dist/automations/tool-adapter.js.map +1 -0
- package/dist/automations/types.d.ts +1 -405
- package/dist/automations/types.js +1 -218
- package/dist/automations/types.js.map +1 -1
- 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 +3 -0
- package/dist/autosave-git.js +67 -35
- package/dist/autosave-git.js.map +1 -1
- 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 +31 -4
- package/dist/autosave-holders.js +92 -7
- package/dist/autosave-holders.js.map +1 -1
- package/dist/autosave-windows.d.ts +14 -0
- package/dist/autosave-windows.js +36 -2
- package/dist/autosave-windows.js.map +1 -1
- package/dist/ci-wait/client.d.ts +20 -3
- package/dist/ci-wait/client.js +40 -44
- package/dist/ci-wait/client.js.map +1 -1
- package/dist/ci-wait/controller.d.ts +622 -36
- package/dist/ci-wait/controller.js +152 -20
- package/dist/ci-wait/controller.js.map +1 -1
- package/dist/ci-wait/errors.d.ts +19 -0
- package/dist/ci-wait/errors.js +180 -2
- package/dist/ci-wait/errors.js.map +1 -1
- package/dist/ci-wait/github.d.ts +25 -1
- package/dist/ci-wait/github.js +76 -9
- package/dist/ci-wait/github.js.map +1 -1
- package/dist/ci-wait/mcp.d.ts +0 -1
- package/dist/ci-wait/mcp.js +0 -2
- package/dist/ci-wait/mcp.js.map +1 -1
- package/dist/ci-wait/supervisor.d.ts +7 -0
- package/dist/ci-wait/supervisor.js +113 -17
- package/dist/ci-wait/supervisor.js.map +1 -1
- package/dist/ci-wait/tools.d.ts +536 -16
- package/dist/ci-wait/tools.js +165 -20
- package/dist/ci-wait/tools.js.map +1 -1
- package/dist/config.d.ts +3 -17
- package/dist/config.js +4 -60
- package/dist/config.js.map +1 -1
- package/dist/contract/active-provider.d.ts +12 -0
- package/dist/contract/agent-profiles.d.ts +2 -10
- package/dist/contract/ask-schema.d.ts +22 -4
- package/dist/contract/ask.d.ts +6 -4
- package/dist/contract/attachments.d.ts +35 -0
- package/dist/contract/attention.d.ts +46 -37
- package/dist/contract/automation-requests.d.ts +308 -0
- package/dist/contract/automation-schedule.d.ts +40 -11
- package/dist/contract/automation-storage.d.ts +512 -0
- package/dist/contract/automations.d.ts +421 -40
- package/dist/contract/ci-wait.d.ts +41 -4
- package/dist/contract/config-requests.d.ts +36 -0
- package/dist/contract/conversations.d.ts +24 -10
- package/dist/contract/defined.d.ts +8 -0
- package/dist/contract/delegation.d.ts +312 -8
- package/dist/contract/events.d.ts +24 -3
- package/dist/contract/github-requests.d.ts +26 -0
- package/dist/contract/github.d.ts +60 -27
- package/dist/contract/handoff.d.ts +43 -0
- package/dist/contract/health.d.ts +2 -2
- package/dist/contract/image-path.d.ts +6 -0
- package/dist/contract/index.d.ts +31 -0
- package/dist/contract/index.js +3756 -1525
- package/dist/contract/live-coordination.d.ts +158 -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/permissions.d.ts +54 -0
- package/dist/contract/preview.d.ts +33 -0
- package/dist/contract/project-limits.d.ts +33 -0
- package/dist/contract/projects.d.ts +486 -20
- 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/run-labels.d.ts +8 -0
- package/dist/contract/run-limits.d.ts +8 -0
- package/dist/contract/run-predicates.d.ts +32 -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 +2232 -1894
- package/dist/contract/scheduled-tasks.d.ts +187 -0
- package/dist/contract/skills.d.ts +22 -772
- package/dist/contract/team-skill-ref.d.ts +10 -0
- package/dist/{core → contract}/tool-display.d.ts +4 -10
- 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 +1204 -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 +1 -2
- package/dist/contract/workspace.d.ts +34 -82
- package/dist/contract/zoned-time.d.ts +2 -11
- package/dist/core/agent-env.d.ts +4 -16
- package/dist/core/agent-env.js +14 -16
- package/dist/core/agent-env.js.map +1 -1
- package/dist/core/agent-profiles.d.ts +28 -40
- package/dist/core/agent-profiles.js +56 -51
- package/dist/core/agent-profiles.js.map +1 -1
- package/dist/core/agent-runner.d.ts +88 -44
- package/dist/core/agent-runner.js +17 -18
- package/dist/core/agent-runner.js.map +1 -1
- package/dist/core/ask.d.ts +3 -0
- package/dist/core/ask.js +12 -0
- package/dist/core/ask.js.map +1 -1
- package/dist/core/backend-detect.js +16 -2
- package/dist/core/backend-detect.js.map +1 -1
- package/dist/core/claude-cli-runner.d.ts +23 -4
- package/dist/core/claude-cli-runner.js +280 -76
- package/dist/core/claude-cli-runner.js.map +1 -1
- package/dist/core/claude-model-catalog.d.ts +2 -10
- package/dist/core/claude-model-catalog.js +2 -10
- package/dist/core/claude-model-catalog.js.map +1 -1
- package/dist/core/claude-ui-mapper.d.ts +2 -2
- package/dist/core/claude-ui-mapper.js +94 -2
- package/dist/core/claude-ui-mapper.js.map +1 -1
- package/dist/core/codex-app-server-runner.d.ts +3 -4
- package/dist/core/codex-app-server-runner.js +146 -51
- package/dist/core/codex-app-server-runner.js.map +1 -1
- package/dist/core/codex-app-server-transport.d.ts +4 -3
- package/dist/core/codex-app-server-transport.js +11 -7
- package/dist/core/codex-app-server-transport.js.map +1 -1
- package/dist/core/codex-approvals.d.ts +12 -0
- package/dist/core/codex-approvals.js +161 -0
- package/dist/core/codex-approvals.js.map +1 -0
- package/dist/core/codex-permissions.d.ts +1 -1
- package/dist/core/codex-ui-mapper.js +45 -1
- package/dist/core/codex-ui-mapper.js.map +1 -1
- package/dist/core/cursor-acp-runner.d.ts +1 -1
- package/dist/core/cursor-acp-runner.js +39 -15
- package/dist/core/cursor-acp-runner.js.map +1 -1
- 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-model-catalog.d.ts +22 -0
- package/dist/core/cursor-model-catalog.js +53 -24
- package/dist/core/cursor-model-catalog.js.map +1 -1
- package/dist/core/cursor-print-capabilities.d.ts +16 -0
- package/dist/core/cursor-print-capabilities.js +141 -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 +31 -0
- package/dist/core/cursor-print-runner.js +555 -0
- package/dist/core/cursor-print-runner.js.map +1 -0
- package/dist/core/cursor-print-tool-catalog.d.ts +10 -0
- package/dist/core/cursor-print-tool-catalog.js +91 -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 +553 -0
- package/dist/core/cursor-print-ui-mapper.js.map +1 -0
- package/dist/core/cursor-runner.d.ts +24 -0
- package/dist/core/cursor-runner.js +149 -0
- package/dist/core/cursor-runner.js.map +1 -0
- package/dist/core/cursor-ui-mapper.js +5 -2
- package/dist/core/cursor-ui-mapper.js.map +1 -1
- 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/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 +2 -9
- package/dist/core/host-model-catalog.js +2 -9
- package/dist/core/host-model-catalog.js.map +1 -1
- package/dist/core/managed-session.js +15 -3
- package/dist/core/managed-session.js.map +1 -1
- package/dist/core/model-identity.d.ts +4 -21
- package/dist/core/model-identity.js.map +1 -1
- package/dist/core/model-presets.d.ts +2 -13
- package/dist/core/model-presets.js +2 -13
- package/dist/core/model-presets.js.map +1 -1
- package/dist/core/omp-model-catalog.js.map +1 -1
- package/dist/core/omp-runner.d.ts +6 -7
- package/dist/core/omp-runner.js +92 -33
- package/dist/core/omp-runner.js.map +1 -1
- package/dist/core/omp-ui-mapper.js +1 -1
- package/dist/core/omp-ui-mapper.js.map +1 -1
- package/dist/core/opencode-model-catalog.js.map +1 -1
- 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-server-runner.d.ts +10 -9
- package/dist/core/opencode-server-runner.js +286 -28
- package/dist/core/opencode-server-runner.js.map +1 -1
- package/dist/core/opencode-session-error.d.ts +15 -7
- package/dist/core/opencode-session-error.js +25 -9
- package/dist/core/opencode-session-error.js.map +1 -1
- package/dist/core/opencode-ui-mapper.js +2 -2
- package/dist/core/opencode-ui-mapper.js.map +1 -1
- package/dist/core/pi-model-catalog.js.map +1 -1
- package/dist/core/pi-runner.d.ts +12 -4
- package/dist/core/pi-runner.js +171 -63
- package/dist/core/pi-runner.js.map +1 -1
- package/dist/core/pi-ui-mapper.js +1 -1
- package/dist/core/pi-ui-mapper.js.map +1 -1
- package/dist/core/process-usage.d.ts +5 -0
- package/dist/core/process-usage.js +24 -4
- package/dist/core/process-usage.js.map +1 -1
- package/dist/core/provider-auth.d.ts +16 -107
- package/dist/core/provider-auth.js +16 -132
- package/dist/core/provider-auth.js.map +1 -1
- package/dist/core/runner-factory.d.ts +4 -1
- package/dist/core/runner-factory.js +3 -3
- package/dist/core/runner-factory.js.map +1 -1
- package/dist/core/runner-runtime.d.ts +22 -0
- package/dist/core/runner-runtime.js +66 -5
- package/dist/core/runner-runtime.js.map +1 -1
- package/dist/core/runner-tool-grants.d.ts +21 -0
- package/dist/core/runner-tool-grants.js +64 -0
- package/dist/core/runner-tool-grants.js.map +1 -0
- package/dist/core/secret-redaction.d.ts +3 -20
- package/dist/core/secret-redaction.js +3 -20
- package/dist/core/secret-redaction.js.map +1 -1
- package/dist/core/session-process.d.ts +22 -2
- package/dist/core/session-process.js +170 -12
- package/dist/core/session-process.js.map +1 -1
- package/dist/core/shell-env.d.ts +2 -15
- package/dist/core/shell-env.js +2 -15
- package/dist/core/shell-env.js.map +1 -1
- package/dist/core/ui-events.d.ts +60 -47
- package/dist/core/ui-events.js +0 -23
- package/dist/core/ui-events.js.map +1 -1
- package/dist/core/usage-limit.js.map +1 -1
- package/dist/data-gitignore.js +3 -1
- package/dist/data-gitignore.js.map +1 -1
- package/dist/delegation/capacity.d.ts +4 -8
- package/dist/delegation/capacity.js +4 -8
- package/dist/delegation/capacity.js.map +1 -1
- package/dist/delegation/cli.js +123 -21
- package/dist/delegation/cli.js.map +1 -1
- package/dist/delegation/context.d.ts +19 -3
- package/dist/delegation/context.js +217 -22
- package/dist/delegation/context.js.map +1 -1
- package/dist/delegation/conversations.d.ts +4 -3
- package/dist/delegation/conversations.js +7 -5
- package/dist/delegation/conversations.js.map +1 -1
- package/dist/delegation/destroy-observation.d.ts +1 -1
- package/dist/delegation/destroy-observation.js.map +1 -1
- package/dist/delegation/effort.js.map +1 -1
- package/dist/delegation/execution-identity.d.ts +1 -1
- package/dist/delegation/execution-identity.js +41 -7
- package/dist/delegation/execution-identity.js.map +1 -1
- package/dist/delegation/idle-test-app.d.ts +4 -0
- package/dist/delegation/idle-test-app.js +174 -0
- package/dist/delegation/idle-test-app.js.map +1 -0
- package/dist/delegation/input.js.map +1 -1
- package/dist/delegation/park-notice.d.ts +42 -0
- package/dist/delegation/park-notice.js +71 -0
- package/dist/delegation/park-notice.js.map +1 -0
- package/dist/delegation/policy.d.ts +2 -0
- package/dist/delegation/policy.js +9 -1
- package/dist/delegation/policy.js.map +1 -1
- package/dist/delegation/process-liveness.d.ts +10 -15
- package/dist/delegation/process-liveness.js +11 -35
- package/dist/delegation/process-liveness.js.map +1 -1
- package/dist/delegation/provision.js +21 -19
- package/dist/delegation/provision.js.map +1 -1
- package/dist/delegation/questions.d.ts +3 -1
- package/dist/delegation/questions.js +10 -5
- package/dist/delegation/questions.js.map +1 -1
- package/dist/delegation/readiness.d.ts +2 -2
- package/dist/delegation/results.d.ts +4 -1
- package/dist/delegation/results.js +49 -18
- package/dist/delegation/results.js.map +1 -1
- package/dist/delegation/retry-backoff.d.ts +8 -0
- package/dist/delegation/retry-backoff.js +8 -0
- package/dist/delegation/retry-backoff.js.map +1 -1
- package/dist/delegation/routes.d.ts +114 -30
- package/dist/delegation/routes.js +4 -1
- package/dist/delegation/routes.js.map +1 -1
- package/dist/delegation/scratch-cleanup.d.ts +4 -5
- package/dist/delegation/scratch-cleanup.js +10 -8
- package/dist/delegation/scratch-cleanup.js.map +1 -1
- package/dist/delegation/service.d.ts +12 -4
- package/dist/delegation/service.js +76 -28
- package/dist/delegation/service.js.map +1 -1
- package/dist/delegation/transport.d.ts +154 -70
- package/dist/delegation/wait.d.ts +11 -0
- package/dist/delegation/wait.js +24 -0
- package/dist/delegation/wait.js.map +1 -1
- package/dist/delegation/windows-test-app.d.ts +5 -0
- package/dist/delegation/windows-test-app.js +63 -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 +22 -0
- package/dist/delegation/windows-workspace-identity.js.map +1 -0
- package/dist/delegation/workspace.d.ts +5 -10
- package/dist/delegation/workspace.js +136 -75
- package/dist/delegation/workspace.js.map +1 -1
- package/dist/detached-process.d.ts +103 -0
- package/dist/detached-process.js +301 -0
- package/dist/detached-process.js.map +1 -0
- package/dist/discovery/catalog.d.ts +2 -1
- package/dist/discovery/catalog.js.map +1 -1
- package/dist/discovery/cli.js +3 -1
- package/dist/discovery/cli.js.map +1 -1
- package/dist/git-diff-base.d.ts +6 -61
- package/dist/git-diff-base.js +6 -70
- package/dist/git-diff-base.js.map +1 -1
- 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-worktree-lock.d.ts +2 -4
- package/dist/git-worktree-lock.js +2 -4
- package/dist/git-worktree-lock.js.map +1 -1
- package/dist/git-worktree-release.d.ts +2 -2
- package/dist/git-worktree-release.js.map +1 -1
- package/dist/git-worktree.d.ts +47 -76
- package/dist/git-worktree.js +240 -94
- package/dist/git-worktree.js.map +1 -1
- package/dist/handoff.d.ts +51 -41
- package/dist/handoff.js +130 -78
- package/dist/handoff.js.map +1 -1
- package/dist/index.js +60 -39
- package/dist/index.js.map +1 -1
- 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/open-url.js +4 -14
- package/dist/open-url.js.map +1 -1
- package/dist/paths.d.ts +10 -13
- package/dist/paths.js +36 -17
- package/dist/paths.js.map +1 -1
- package/dist/planner.d.ts +2 -1
- package/dist/planner.js +9 -6
- package/dist/planner.js.map +1 -1
- package/dist/preview/agent-address.d.ts +34 -0
- package/dist/preview/agent-address.js +51 -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/cdp-proxy.d.ts +54 -0
- package/dist/preview/cdp-proxy.js +151 -0
- package/dist/preview/cdp-proxy.js.map +1 -0
- package/dist/preview/cdp.d.ts +39 -3
- package/dist/preview/cdp.js +155 -57
- package/dist/preview/cdp.js.map +1 -1
- package/dist/preview/chromium.d.ts +18 -6
- package/dist/preview/chromium.js +112 -25
- package/dist/preview/chromium.js.map +1 -1
- package/dist/preview/dev-server.d.ts +1 -1
- package/dist/preview/dev-server.js +20 -44
- package/dist/preview/dev-server.js.map +1 -1
- package/dist/preview/host.d.ts +70 -3
- package/dist/preview/host.js +314 -28
- package/dist/preview/host.js.map +1 -1
- package/dist/preview/registration.d.ts +10 -5
- package/dist/preview/registration.js +2 -0
- package/dist/preview/registration.js.map +1 -1
- package/dist/preview/session.d.ts +2 -0
- package/dist/preview/session.js +10 -0
- package/dist/preview/session.js.map +1 -1
- 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/release/snapshot.d.ts +6 -6
- package/dist/runs/agent-tmpdir.d.ts +51 -36
- package/dist/runs/agent-tmpdir.js +389 -132
- package/dist/runs/agent-tmpdir.js.map +1 -1
- package/dist/runs/auto-name.d.ts +6 -6
- package/dist/runs/auto-name.js +1 -1
- package/dist/runs/auto-name.js.map +1 -1
- package/dist/runs/client-request.d.ts +3 -3
- package/dist/runs/client-request.js +3 -3
- package/dist/runs/client-request.js.map +1 -1
- package/dist/runs/delegation-state.d.ts +11 -2
- package/dist/runs/delegation-state.js.map +1 -1
- package/dist/runs/event-history-agent-context.d.ts +14 -0
- package/dist/runs/event-history-agent-context.js +105 -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 +4 -1
- package/dist/runs/event-history.js +29 -130
- package/dist/runs/event-history.js.map +1 -1
- 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 +6 -19
- package/dist/runs/legacy-index.js +6 -19
- package/dist/runs/legacy-index.js.map +1 -1
- package/dist/runs/live-item-snapshots.d.ts +13 -0
- package/dist/runs/live-item-snapshots.js +79 -0
- package/dist/runs/live-item-snapshots.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 +98 -0
- package/dist/runs/outcome-commit.js +132 -0
- package/dist/runs/outcome-commit.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 +3 -15
- package/dist/runs/raw-record.js +3 -15
- package/dist/runs/raw-record.js.map +1 -1
- package/dist/runs/retention.d.ts +2 -2
- package/dist/runs/retention.js +7 -0
- package/dist/runs/retention.js.map +1 -1
- package/dist/runs/review-gate.d.ts +1 -1
- package/dist/runs/review-gate.js.map +1 -1
- package/dist/runs/run-claims.d.ts +2 -9
- package/dist/runs/run-claims.js.map +1 -1
- package/dist/runs/run-database.d.ts +29 -34
- package/dist/runs/run-database.js +124 -46
- package/dist/runs/run-database.js.map +1 -1
- package/dist/runs/run-index.d.ts +6 -25
- package/dist/runs/run-index.js +25 -38
- package/dist/runs/run-index.js.map +1 -1
- package/dist/runs/run-row.d.ts +5 -34
- package/dist/runs/run-row.js +13 -38
- package/dist/runs/run-row.js.map +1 -1
- package/dist/runs/store.d.ts +1597 -744
- package/dist/runs/store.js +1231 -739
- package/dist/runs/store.js.map +1 -1
- package/dist/runs/task-markers.d.ts +1 -0
- package/dist/runs/task-markers.js +5 -1
- package/dist/runs/task-markers.js.map +1 -1
- package/dist/runs/task-refs.d.ts +3 -3
- 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 +13 -51
- package/dist/runs/transcript-facts.js +86 -202
- package/dist/runs/transcript-facts.js.map +1 -1
- package/dist/runs/ui-event-sink.d.ts +5 -30
- package/dist/runs/ui-event-sink.js +8 -30
- package/dist/runs/ui-event-sink.js.map +1 -1
- package/dist/runs/webhook.d.ts +104 -38
- package/dist/runs/webhook.js +180 -77
- package/dist/runs/webhook.js.map +1 -1
- package/dist/server/app-type.d.ts +2 -17
- package/dist/server/archive-on-merge.d.ts +35 -0
- package/dist/server/archive-on-merge.js +202 -0
- package/dist/server/archive-on-merge.js.map +1 -0
- package/dist/server/capabilities.d.ts +3 -15
- package/dist/server/capabilities.js +6 -19
- package/dist/server/capabilities.js.map +1 -1
- 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 +10 -19
- package/dist/server/checkout.js +15 -45
- package/dist/server/checkout.js.map +1 -1
- package/dist/server/cockpit-ownership.d.ts +2 -0
- package/dist/server/cockpit-ownership.js +9 -0
- package/dist/server/cockpit-ownership.js.map +1 -1
- package/dist/server/cold-repo-handles.d.ts +2 -7
- package/dist/server/cold-repo-handles.js +2 -7
- package/dist/server/cold-repo-handles.js.map +1 -1
- package/dist/server/completion-actions.d.ts +30 -0
- package/dist/server/completion-actions.js +204 -0
- package/dist/server/completion-actions.js.map +1 -0
- package/dist/server/create-project.d.ts +71 -0
- package/dist/server/create-project.js +448 -0
- package/dist/server/create-project.js.map +1 -0
- package/dist/server/forge/github-filters.d.ts +7 -1
- package/dist/server/forge/github-filters.js +66 -51
- package/dist/server/forge/github-filters.js.map +1 -1
- package/dist/server/forge/github-merge-requirements.d.ts +18 -0
- package/dist/server/forge/github-merge-requirements.js +137 -0
- package/dist/server/forge/github-merge-requirements.js.map +1 -0
- package/dist/server/forge/github.d.ts +98 -111
- package/dist/server/forge/github.js +625 -306
- package/dist/server/forge/github.js.map +1 -1
- package/dist/server/forge/types.d.ts +25 -22
- package/dist/server/fs-browse.d.ts +3 -28
- package/dist/server/fs-browse.js.map +1 -1
- package/dist/server/git-changes.d.ts +5 -15
- package/dist/server/git-changes.js +3 -50
- package/dist/server/git-changes.js.map +1 -1
- package/dist/server/git.d.ts +3 -1
- package/dist/server/git.js +12 -0
- package/dist/server/git.js.map +1 -1
- package/dist/server/github.d.ts +1 -1
- package/dist/server/github.js +1 -1
- package/dist/server/github.js.map +1 -1
- package/dist/server/launch-key.d.ts +2 -4
- package/dist/server/launch-key.js +2 -4
- package/dist/server/launch-key.js.map +1 -1
- package/dist/server/live-routes.d.ts +68 -0
- package/dist/server/live-routes.js +147 -0
- package/dist/server/live-routes.js.map +1 -0
- package/dist/server/open-in-app.d.ts +4 -13
- package/dist/server/open-in-app.js +5 -41
- package/dist/server/open-in-app.js.map +1 -1
- package/dist/server/open-in-targets.d.ts +42 -0
- package/dist/server/open-in-targets.js +110 -0
- package/dist/server/open-in-targets.js.map +1 -0
- package/dist/server/open-in-terminal.d.ts +3 -0
- package/dist/server/open-in-terminal.js +6 -26
- package/dist/server/open-in-terminal.js.map +1 -1
- 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 +11 -11
- package/dist/server/preview-socket.js +22 -22
- package/dist/server/preview-socket.js.map +1 -1
- 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 +54 -18
- package/dist/server/project-context.js +178 -5
- package/dist/server/project-context.js.map +1 -1
- package/dist/server/provider-action-gate.d.ts +0 -2
- package/dist/server/provider-action-gate.js +0 -21
- package/dist/server/provider-action-gate.js.map +1 -1
- package/dist/server/provider-auth-runtime.d.ts +3 -18
- package/dist/server/provider-auth-runtime.js +3 -18
- package/dist/server/provider-auth-runtime.js.map +1 -1
- package/dist/server/repo-branches.d.ts +3 -9
- package/dist/server/repo-branches.js +6 -22
- package/dist/server/repo-branches.js.map +1 -1
- package/dist/server/run-event-feed.d.ts +20 -0
- package/dist/server/run-event-feed.js +190 -0
- package/dist/server/run-event-feed.js.map +1 -0
- package/dist/server/server-deps.d.ts +37 -0
- package/dist/server/server-deps.js +114 -0
- package/dist/server/server-deps.js.map +1 -0
- package/dist/server/server.d.ts +14082 -11998
- package/dist/server/server.js +785 -1647
- package/dist/server/server.js.map +1 -1
- package/dist/server/start-run-options.d.ts +82 -0
- package/dist/server/start-run-options.js +111 -0
- package/dist/server/start-run-options.js.map +1 -0
- package/dist/server/validators.d.ts +3 -29
- package/dist/server/validators.js +1 -2
- package/dist/server/validators.js.map +1 -1
- package/dist/server/ws.d.ts +3 -23
- package/dist/server/ws.js +3 -23
- package/dist/server/ws.js.map +1 -1
- package/dist/server-install/engine.d.ts +6 -9
- package/dist/server-install/engine.js +2 -9
- package/dist/server-install/engine.js.map +1 -1
- package/dist/server-install/platforms/ubuntu-vps.d.ts +1 -1
- package/dist/server-install/state.d.ts +2 -4
- package/dist/server-install/state.js +2 -4
- package/dist/server-install/state.js.map +1 -1
- package/dist/server-install/steps.d.ts +2 -5
- package/dist/server-install/steps.js +3 -6
- package/dist/server-install/steps.js.map +1 -1
- package/dist/server-install/types.d.ts +3 -6
- package/dist/server-install/types.js +2 -5
- package/dist/server-install/types.js.map +1 -1
- package/dist/server-install/ui.d.ts +2 -8
- package/dist/server-install/ui.js +3 -3
- package/dist/server-install/ui.js.map +1 -1
- package/dist/session-context.d.ts +64 -0
- package/dist/session-context.js +264 -0
- package/dist/session-context.js.map +1 -0
- package/dist/skills-provision.d.ts +62 -0
- package/dist/skills-provision.js +325 -0
- package/dist/skills-provision.js.map +1 -0
- package/dist/skills-remote.d.ts +29 -27
- package/dist/skills-remote.js +236 -100
- package/dist/skills-remote.js.map +1 -1
- package/dist/skills.d.ts +25 -36
- package/dist/skills.js +43 -54
- package/dist/skills.js.map +1 -1
- package/dist/subcommands.d.ts +11 -0
- package/dist/subcommands.js +24 -0
- package/dist/subcommands.js.map +1 -0
- package/dist/task-cli/cli.js +78 -25
- package/dist/task-cli/cli.js.map +1 -1
- package/dist/task-cli/discovery.d.ts +4 -2
- package/dist/task-cli/discovery.js +14 -13
- package/dist/task-cli/discovery.js.map +1 -1
- package/dist/task-cli/hint.d.ts +20 -0
- package/dist/task-cli/hint.js +14 -0
- package/dist/task-cli/hint.js.map +1 -0
- package/dist/task-cli/http.d.ts +1 -0
- package/dist/task-cli/http.js +3 -1
- package/dist/task-cli/http.js.map +1 -1
- package/dist/task-cli/projections.d.ts +14 -11
- package/dist/task-cli/projections.js +15 -11
- package/dist/task-cli/projections.js.map +1 -1
- package/dist/task-cli/watch.d.ts +18 -10
- package/dist/task-cli/watch.js +128 -20
- package/dist/task-cli/watch.js.map +1 -1
- package/dist/ui-state.d.ts +17 -3
- package/dist/ui-state.js +56 -9
- package/dist/ui-state.js.map +1 -1
- package/dist/update-check.d.ts +0 -10
- package/dist/update-check.js +1 -16
- package/dist/update-check.js.map +1 -1
- package/dist/voice/decide.d.ts +32 -0
- package/dist/voice/decide.js +297 -0
- package/dist/voice/decide.js.map +1 -0
- package/dist/voice/decision-log.d.ts +52 -0
- package/dist/voice/decision-log.js +107 -0
- package/dist/voice/decision-log.js.map +1 -0
- package/dist/voice/engine.d.ts +119 -0
- package/dist/voice/engine.js +60 -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 +50 -0
- package/dist/voice/pending-ask.js.map +1 -0
- package/dist/voice/routes.d.ts +115 -0
- package/dist/voice/routes.js +91 -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 +145 -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 +167 -0
- package/dist/workflows/active-run.js +21 -0
- package/dist/workflows/active-run.js.map +1 -0
- package/dist/workflows/continuation-admission.d.ts +913 -0
- package/dist/workflows/continuation-admission.js +265 -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/input-acknowledgement.d.ts +152 -0
- package/dist/workflows/input-acknowledgement.js +38 -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/outcome-batches.d.ts +20 -0
- package/dist/workflows/outcome-batches.js +25 -0
- package/dist/workflows/outcome-batches.js.map +1 -0
- package/dist/workflows/question-routing.d.ts +8 -0
- package/dist/workflows/question-routing.js +18 -0
- package/dist/workflows/question-routing.js.map +1 -0
- package/dist/workflows/run-scheduling.d.ts +35 -0
- package/dist/workflows/run-scheduling.js +61 -0
- package/dist/workflows/run-scheduling.js.map +1 -0
- package/dist/workflows/run-states.d.ts +190 -0
- package/dist/workflows/run-states.js +295 -0
- package/dist/workflows/run-states.js.map +1 -0
- package/dist/workflows/run.d.ts +1296 -278
- package/dist/workflows/run.js +5730 -3265
- package/dist/workflows/run.js.map +1 -1
- package/dist/workflows/turn-end.d.ts +116 -0
- package/dist/workflows/turn-end.js +68 -0
- package/dist/workflows/turn-end.js.map +1 -0
- package/dist/workflows/types.d.ts +35 -130
- package/dist/workflows/types.js +47 -100
- package/dist/workflows/types.js.map +1 -1
- package/dist/workflows/waits.d.ts +74 -0
- package/dist/workflows/waits.js +197 -0
- package/dist/workflows/waits.js.map +1 -0
- package/dist/workspace/agent-accounts.d.ts +5 -38
- package/dist/workspace/agent-accounts.js +14 -40
- package/dist/workspace/agent-accounts.js.map +1 -1
- package/dist/workspace/agent-profiles.d.ts +40 -16
- package/dist/workspace/agent-profiles.js +77 -17
- package/dist/workspace/agent-profiles.js.map +1 -1
- package/dist/workspace/config.d.ts +48 -49
- package/dist/workspace/config.js +68 -72
- package/dist/workspace/config.js.map +1 -1
- package/dist/workspace/migrations.d.ts +3 -13
- package/dist/workspace/migrations.js.map +1 -1
- package/dist/workspace/projects-cli.d.ts +1 -1
- package/dist/workspace/projects-cli.js.map +1 -1
- package/dist/workspace/projects.d.ts +15 -18
- package/dist/workspace/projects.js +20 -16
- package/dist/workspace/projects.js.map +1 -1
- package/dist/workspace/semaphore.d.ts +11 -45
- package/dist/workspace/semaphore.js +6 -18
- package/dist/workspace/semaphore.js.map +1 -1
- package/dist/workspace/ui-state.d.ts +6 -4
- package/dist/workspace/ui-state.js +6 -4
- package/dist/workspace/ui-state.js.map +1 -1
- 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 +530 -0
- package/dist/worktree-manifest.js.map +1 -0
- package/dist/worktree-setup.js.map +1 -1
- package/package.json +6 -5
- package/scripts/benchmark-run-store-fixture.ts +7 -3
- package/scripts/check-pack.mjs +3 -1
- package/scripts/inline-contract.mjs +80 -27
- package/scripts/install-as-command.mjs +3 -1
- package/scripts/measure-transcript-facts-health.mjs +87 -0
- package/scripts/measure-transcript-facts-lag.mjs +68 -0
- package/scripts/mock-ci-tool.mjs +49 -6
- package/scripts/mock-claude-model-refusal.mjs +42 -0
- package/scripts/mock-claude.mjs +833 -591
- package/scripts/mock-codex-app-server.mjs +785 -418
- package/scripts/mock-cursor-acp.mjs +296 -125
- package/scripts/mock-cursor-print.mjs +256 -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-multi-pr.mjs +7 -0
- package/scripts/mock-nudge.mjs +45 -0
- package/scripts/mock-omp-rpc.mjs +429 -255
- package/scripts/mock-opencode-serve.mjs +972 -557
- package/scripts/mock-pi-rpc.mjs +558 -331
- package/scripts/mock-runner-crash.mjs +18 -2
- package/scripts/mock-session-context.d.mts +5 -0
- package/scripts/mock-session-context.mjs +56 -0
- package/scripts/mock-silent-tail.mjs +10 -3
- package/scripts/pi-default-tools.mjs +22 -0
- package/scripts/pi-project-skills.mjs +59 -0
- package/scripts/probe-cursor-print.mjs +627 -0
- package/scripts/transcript-facts-fixture.mjs +53 -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/alert-dialog-DfctKUMw.js +1 -0
- package/web/dist/assets/button-CeupvoKG.js +41 -0
- package/web/dist/assets/centered-state-hDsyXrnH.js +1 -0
- package/web/dist/assets/cez-idle-D3aj_9lp.js +1 -0
- package/web/dist/assets/diff-BnIXZK3i2.js +3 -0
- package/web/dist/assets/diff-controls-GewpW9aF.js +1 -0
- package/web/dist/assets/diff-view-Byo7gpvW.js +11 -0
- package/web/dist/assets/dropdown-menu-COj_J5wd.js +6 -0
- package/web/dist/assets/eye-B8okNWXU.js +1 -0
- package/web/dist/assets/git-toolbar-DY0z0n4S.js +1 -0
- package/web/dist/assets/github-DwU6ALRK.js +1 -0
- package/web/dist/assets/{image-preview-FOEfqpZP.js → image-preview-C_t9q45f.js} +1 -1
- package/web/dist/assets/index-BOfE8pyD.js +34 -0
- package/web/dist/assets/index-D9HpsmdW.css +1 -0
- package/web/dist/assets/live-protocol-Uce2NwEX.js +64 -0
- package/web/dist/assets/live-worker-BizfZSoh.ts +33 -0
- package/web/dist/assets/markdown-BBDDg-4t.js +1 -0
- package/web/dist/assets/nav-row-styles-AoIhhIwf.js +1 -0
- package/web/dist/assets/popover-D56fhiXj.js +1 -0
- package/web/dist/assets/preview-pane-connected-BmVqfSU5.js +3 -0
- package/web/dist/assets/reference-chip-gQNk-4jc.js +1 -0
- package/web/dist/assets/repo-git-B5ECDUuv.js +1 -0
- package/web/dist/assets/{repo-git-CoKp-g9K.css → repo-git-DVXNOJDT.css} +1 -1
- package/web/dist/assets/run-header-C0Y1NvEM.js +2 -0
- package/web/dist/assets/run-header-CC7VUTg9.css +1 -0
- package/web/dist/assets/skills-DUeTkZ9z.js +1 -0
- package/web/dist/assets/status-dot-1PR0i69P.js +1 -0
- package/web/dist/assets/tab-link-DmWk4l5O.js +1 -0
- package/web/dist/assets/task-changes-DKZXuW89.js +1 -0
- package/web/dist/assets/task-commits-BZ6KxWdF.js +1 -0
- package/web/dist/assets/task-files-DlF7Apcn.js +2 -0
- package/web/dist/assets/task-github-item-CVPo3geZ.js +1 -0
- package/web/dist/assets/task-thread-DtQ6uGfQ.css +1 -0
- package/web/dist/assets/task-thread-mm4-ECyo.js +9 -0
- package/web/dist/assets/thread-state-CIw2BlhT.js +4 -0
- package/web/dist/assets/use-hand-to-agent-state-BCDjzHnG.js +1 -0
- package/web/dist/assets/use-hand-to-agent-state-C7esPJ-N.css +1 -0
- package/web/dist/assets/workflows-D8vYD-ql.js +7 -0
- package/web/dist/assets/zoomable-image-CxQSsfcn.js +1 -0
- package/web/dist/index.html +13 -17
- package/web/dist/live-worker.js +4 -0
- package/dist/core/tool-display.js +0 -179
- package/dist/core/tool-display.js.map +0 -1
- package/dist/runs/human-ask-summary.d.ts +0 -9
- package/dist/runs/human-ask-summary.js +0 -39
- package/dist/runs/human-ask-summary.js.map +0 -1
- package/dist/runs/run-search.d.ts +0 -29
- package/dist/runs/run-search.js +0 -63
- package/dist/runs/run-search.js.map +0 -1
- package/dist/skills-banner.d.ts +0 -22
- package/dist/skills-banner.js +0 -41
- package/dist/skills-banner.js.map +0 -1
- package/dist/skills-update.d.ts +0 -88
- package/dist/skills-update.js +0 -392
- package/dist/skills-update.js.map +0 -1
- package/dist/todos.d.ts +0 -48
- package/dist/todos.js +0 -201
- package/dist/todos.js.map +0 -1
- package/web/dist/assets/agent-accounts-CFOBMVHc.js +0 -1
- package/web/dist/assets/alert-dialog-BrpNUwMt.js +0 -1
- package/web/dist/assets/button-C_rd7CPp.js +0 -43
- package/web/dist/assets/compare-variants-D6WXhvXA.js +0 -1
- package/web/dist/assets/diff-DrEARXTV.js +0 -3
- package/web/dist/assets/diff-controls-B1-j7nFg.js +0 -1
- package/web/dist/assets/diff-view-DvGLjdTk.js +0 -6
- package/web/dist/assets/dropdown-menu-BegOZFrj.js +0 -1
- package/web/dist/assets/format-DpNe3S0A.js +0 -1
- package/web/dist/assets/git-toolbar-Cw4ljmhB.js +0 -1
- package/web/dist/assets/github-CfV5sqL0.js +0 -1
- package/web/dist/assets/index-DgWWlOLy.js +0 -13
- package/web/dist/assets/index-fBFnuvxu.css +0 -1
- package/web/dist/assets/nav-row-styles-vp2JbhuJ.js +0 -1
- package/web/dist/assets/popover-BohP6WTx.js +0 -1
- package/web/dist/assets/preview-pane-connected-qTA5KNoJ.js +0 -3
- package/web/dist/assets/preview-state-vuMviq6q.js +0 -1
- package/web/dist/assets/prompt-templates-Cubdut_C.js +0 -15
- package/web/dist/assets/repo-git-Cf4t5PD0.js +0 -1
- package/web/dist/assets/run-diff-BpkUW37Z.js +0 -3
- package/web/dist/assets/run-header-68WHf9wV.js +0 -1
- package/web/dist/assets/run-header-8GObNx6F.css +0 -1
- package/web/dist/assets/search-x-I9Q8pgUa.js +0 -1
- package/web/dist/assets/skills-DFBiAuJG.js +0 -1
- package/web/dist/assets/skills-DiVIgKeU.js +0 -1
- package/web/dist/assets/square-terminal-B6RYYieR.js +0 -1
- package/web/dist/assets/status-dot-CqTJHSP9.js +0 -1
- package/web/dist/assets/tab-link-B07Hu4QX.js +0 -1
- package/web/dist/assets/task-changes--lQF6EYf.js +0 -1
- package/web/dist/assets/task-commits-Cx0qy4DN.js +0 -1
- package/web/dist/assets/task-files-D50s-gKW.js +0 -2
- package/web/dist/assets/task-github-item-DaqmSwYT.js +0 -1
- package/web/dist/assets/task-thread-BPQ64lui.js +0 -7
- package/web/dist/assets/task-thread-zNE2Q9E-.css +0 -1
- package/web/dist/assets/textarea-D20O4Pw0.js +0 -1
- package/web/dist/assets/thread-state-DWcFMrvb.js +0 -4
- package/web/dist/assets/use-hand-to-agent-state-BLIGmwbd.css +0 -1
- package/web/dist/assets/use-hand-to-agent-state-Cy9eyyfL.js +0 -1
- package/web/dist/assets/utils-JsL3ZsJf.js +0 -64
- package/web/dist/assets/workflows-jwG7uxqi.js +0 -11
- package/web/dist/assets/zoomable-image-BJJ64KGc.js +0 -1
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { uiAskQuestions } from './ask.js';
|
|
1
2
|
import { opencodeSkillWarning } from './opencode-session-error.js';
|
|
2
3
|
import { summarizeRunnerStderr } from './runner-stderr.js';
|
|
3
4
|
import { finished } from 'node:stream/promises';
|
|
@@ -8,6 +9,7 @@ import { parseEffort } from '../contract/index.js';
|
|
|
8
9
|
import { request as httpRequest } from 'node:http';
|
|
9
10
|
import { InputSubmissions } from './input-submissions.js';
|
|
10
11
|
import { isSignalTerminationExit, prependSystemPrompt, trackChildExit } from './agent-runner.js';
|
|
12
|
+
import { opencodeToolGrantFields } from './runner-tool-grants.js';
|
|
11
13
|
import { signalSession, spawnSessionLeader } from './session-process.js';
|
|
12
14
|
import { buildChildEnv } from './agent-env.js';
|
|
13
15
|
import { ciOpenCodeEnv } from '../ci-wait/injection.js';
|
|
@@ -15,6 +17,7 @@ import { parseAskRequest } from './ask.js';
|
|
|
15
17
|
import { boundOutputDrainAfterExit, AUTO_END_DELAY_MS, DEFAULT_RUN_TIMEOUT_MS } from './runner-runtime.js';
|
|
16
18
|
import { formatModelIdentity, parseModelIdentity } from './model-identity.js';
|
|
17
19
|
import { V1TextCoalescer } from './v1-text-coalescer.js';
|
|
20
|
+
import { isOpencodeDefaultAsk, opencodePermissionAskSchema, opencodePermissionBridge, opencodeUserPermissionRules, } from './opencode-permissions.js';
|
|
18
21
|
import { createOpencodeUiState, mapOpencodeEvent, opencodeSessionStarted, opencodeTurnStarted, } from './opencode-ui-mapper.js';
|
|
19
22
|
const SERVER_START_TIMEOUT_MS = 30_000;
|
|
20
23
|
/**
|
|
@@ -42,18 +45,19 @@ export const KILL_GRACE_MS = 4_000;
|
|
|
42
45
|
* Continue and restart recovery GET /session/{id} and prompt that session; a 404
|
|
43
46
|
* falls back to one fresh session with the full system prompt.
|
|
44
47
|
*
|
|
45
|
-
* Auth = the host's opencode config/logins.
|
|
46
|
-
*
|
|
47
|
-
*
|
|
48
|
+
* Auth = the host's opencode config/logins. OpenCode's own permission config
|
|
49
|
+
* governs tools: cezar answers OpenCode's built-in default asks once and routes
|
|
50
|
+
* asks the user configured to the cockpit (hearsay-tools/cezarion#1266); this
|
|
51
|
+
* adapter does not map `spec.toolGrant`. Governed delegation adds only a
|
|
52
|
+
* supported session-level task deny rule.
|
|
48
53
|
* `spec.model` is `provider/model`.
|
|
49
54
|
*/
|
|
50
55
|
/**
|
|
51
|
-
* What `opencode serve` receives from each `AgentRunSpec` field (#284).
|
|
52
|
-
*
|
|
53
|
-
* allowlist, so `
|
|
54
|
-
*
|
|
55
|
-
*
|
|
56
|
-
* requests by the harness parity matrix.
|
|
56
|
+
* What `opencode serve` receives from each `AgentRunSpec` field (#284).
|
|
57
|
+
* OpenCode's own permission config governs tool access and this adapter maps no
|
|
58
|
+
* per-tool allowlist, so `toolGrant` is declared dropped rather than mapped (spec
|
|
59
|
+
* 2026-07-17-permission-modes). Resume GETs `/session/{id}` and prompts it; a 404 opens one
|
|
60
|
+
* fresh session. Held against the recorded HTTP requests by the harness parity matrix.
|
|
57
61
|
*/
|
|
58
62
|
export const OPENCODE_SPEC_SUPPORT = {
|
|
59
63
|
cezarTools: { honored: true, via: 'merged OPENCODE_CONFIG_CONTENT local mcp entry' },
|
|
@@ -61,9 +65,8 @@ export const OPENCODE_SPEC_SUPPORT = {
|
|
|
61
65
|
userPrompt: { honored: true, via: 'prompt_async text part' },
|
|
62
66
|
images: { honored: false, reason: 'the adapter posts text parts only; image blocks are dropped' },
|
|
63
67
|
cwd: { honored: true, via: 'opencode serve spawn cwd; the session is bound to it' },
|
|
64
|
-
|
|
68
|
+
toolGrant: { honored: false, reason: 'OpenCode permission config governs tool access and bash; cezar answers its built-in default asks and routes configured asks to the cockpit, but maps no per-tool allowlist, so no command-prefix restriction either' },
|
|
65
69
|
restrictNativeDelegation: { honored: true, via: 'POST /session permission rule denying task (D1); PATCH /session/{id} permission on resume when the deny is absent — the deny persists on the session once added (a later unrestricted Continue cannot remove it; fails closed)' },
|
|
66
|
-
bashAllowlist: { honored: false, reason: 'no per-tool allowlist is mapped, so no command-prefix restriction either' },
|
|
67
70
|
additionalDirectories: { honored: false, reason: 'the server works from cwd; no extra-root mapping' },
|
|
68
71
|
env: { honored: true, via: 'merged over the child env through buildChildEnv' },
|
|
69
72
|
model: { honored: true, via: 'prompt_async model { providerID, modelID }, split from provider/model' },
|
|
@@ -154,6 +157,11 @@ class OpencodeSession {
|
|
|
154
157
|
refusedBeforeOpening = false;
|
|
155
158
|
turnErrored = false;
|
|
156
159
|
lostWakeTimer;
|
|
160
|
+
/** Steered input an idle left unanswered: the server may still start a follow-on run for it.
|
|
161
|
+
* Settles when that run starts, or when the lost-wake grace or a teardown ends the wait. */
|
|
162
|
+
followOn;
|
|
163
|
+
followOnResolve = () => { };
|
|
164
|
+
refusedForFollowOn = false;
|
|
157
165
|
tokensUsed = 0;
|
|
158
166
|
/** OpenCode reports a cumulative cost for each message, not the session. */
|
|
159
167
|
costByMessage = new Map();
|
|
@@ -193,6 +201,15 @@ class OpencodeSession {
|
|
|
193
201
|
queuedPromptGeneration = 0;
|
|
194
202
|
/** Human `prompt()` waiters in the current generation that have not posted yet (#486). */
|
|
195
203
|
humanPromptWaiters = 0;
|
|
204
|
+
/** Native ask id → its live state, entered on receipt (hearsay-tools/cezarion#1266). Any
|
|
205
|
+
* entry holds agent input and auto-end, like a pending question, until OpenCode settles it. */
|
|
206
|
+
pendingPermissions = new Map();
|
|
207
|
+
/** Native ask ids already taken. Outlives retirement, so a duplicated frame is handled once. */
|
|
208
|
+
handledPermissionIds = new Set();
|
|
209
|
+
/** Asks are classified one at a time, in arrival order, after the one config read. */
|
|
210
|
+
permissionQueue = Promise.resolve();
|
|
211
|
+
permissionRules;
|
|
212
|
+
answeredDefaultAsk = false;
|
|
196
213
|
autoEndTimer;
|
|
197
214
|
timedOut = false;
|
|
198
215
|
openingPromptFailed = false;
|
|
@@ -237,7 +254,9 @@ class OpencodeSession {
|
|
|
237
254
|
clearTimeout(this.autoEndTimer);
|
|
238
255
|
this.sse.abort();
|
|
239
256
|
this.serverOpen = false;
|
|
257
|
+
this.clearLostWakeTimer();
|
|
240
258
|
this.agentRequest?.abort();
|
|
259
|
+
this.expirePermissions('session ended');
|
|
241
260
|
this.terminate();
|
|
242
261
|
}
|
|
243
262
|
const serve = this.serve;
|
|
@@ -250,7 +269,9 @@ class OpencodeSession {
|
|
|
250
269
|
// SSE closure can precede the process exit event. Choose one authoritative
|
|
251
270
|
// error after settlement, before the synthetic turn-end, retaining the code.
|
|
252
271
|
const code = serve.child.exitCode;
|
|
253
|
-
const
|
|
272
|
+
const signal = serve.child.signalCode;
|
|
273
|
+
const crashed = (signal !== null && !serve.signalled)
|
|
274
|
+
|| (code !== null && code !== 0 && !(serve.signalled && isSignalTerminationExit(code)));
|
|
254
275
|
if (!this.timedOut && (crashed || this.exitFailure)) {
|
|
255
276
|
const stderr = serve.stderrChunks.join('');
|
|
256
277
|
const detail = summarizeRunnerStderr(stderr);
|
|
@@ -278,7 +299,7 @@ class OpencodeSession {
|
|
|
278
299
|
if (stderr.trim())
|
|
279
300
|
this.emit({ type: 'note', message: `opencode serve stderr:\n${stderr}` });
|
|
280
301
|
const message = crashed
|
|
281
|
-
? `opencode serve exited with
|
|
302
|
+
? `opencode serve exited with ${describeExit(serve)}${detail ? ` — ${detail}` : ''}`
|
|
282
303
|
: this.exitFailure;
|
|
283
304
|
this.emit({ type: 'error', message });
|
|
284
305
|
}
|
|
@@ -312,16 +333,23 @@ class OpencodeSession {
|
|
|
312
333
|
return this.serve.child.pid;
|
|
313
334
|
}
|
|
314
335
|
sendAgentMessage(content, inputIds = []) {
|
|
315
|
-
// #505: a busy session is steered with prompt_async; only a pending native question
|
|
316
|
-
// a queued human prompt or an in-flight agent POST refuses.
|
|
336
|
+
// #505: a busy session is steered with prompt_async; only a pending native question or
|
|
337
|
+
// permission ask, a queued human prompt or an in-flight agent POST refuses.
|
|
317
338
|
// Nothing may run ahead of the task: refuse until the opening prompt has started,
|
|
318
339
|
// then hint once so the refused input steers the opening turn.
|
|
319
340
|
if (this.serverOpen && this.turnSerial === 0) {
|
|
320
341
|
this.refusedBeforeOpening = true;
|
|
321
342
|
return false;
|
|
322
343
|
}
|
|
323
|
-
if (!this.serverOpen || !this.sessionId || this.pendingQuestion || this.questionReply || this.
|
|
344
|
+
if (!this.serverOpen || !this.sessionId || this.pendingQuestion || this.questionReply || this.pendingPermissions.size > 0 ||
|
|
345
|
+
this.pendingPromptRequests > 0 || this.agentRequest)
|
|
324
346
|
return false;
|
|
347
|
+
// A prompt posted before a due follow-on run would have that run's idle close its turn, and
|
|
348
|
+
// its own run would then surface nothing (PR #1291 CI): it waits for that run, as for a turn.
|
|
349
|
+
if (this.followOn) {
|
|
350
|
+
this.refusedForFollowOn = true;
|
|
351
|
+
return false;
|
|
352
|
+
}
|
|
325
353
|
this.agentInputReady = false;
|
|
326
354
|
const request = new AbortController();
|
|
327
355
|
this.agentRequest = request;
|
|
@@ -339,7 +367,8 @@ class OpencodeSession {
|
|
|
339
367
|
}).finally(() => {
|
|
340
368
|
if (this.agentRequest === request)
|
|
341
369
|
this.agentRequest = undefined;
|
|
342
|
-
if (this.serverOpen && !this.providerErrorPending && !this.turnActive && !this.pendingQuestion && !this.questionReply
|
|
370
|
+
if (this.serverOpen && !this.providerErrorPending && !this.turnActive && !this.pendingQuestion && !this.questionReply &&
|
|
371
|
+
this.pendingPermissions.size === 0) {
|
|
343
372
|
this.agentInputReady = true;
|
|
344
373
|
this.opts.onAgentInputReady?.();
|
|
345
374
|
this.scheduleAutoEnd();
|
|
@@ -400,12 +429,12 @@ class OpencodeSession {
|
|
|
400
429
|
}
|
|
401
430
|
notifyAgentInputReady() {
|
|
402
431
|
if (this.serverOpen && this.turnEnded && !this.turnActive && !this.pendingQuestion &&
|
|
403
|
-
!this.questionReply && this.pendingPromptRequests === 0) {
|
|
432
|
+
!this.questionReply && this.pendingPermissions.size === 0 && this.pendingPromptRequests === 0) {
|
|
404
433
|
this.agentInputReady = true;
|
|
405
434
|
this.opts.onAgentInputReady?.();
|
|
406
435
|
}
|
|
407
436
|
else if (this.serverOpen && this.turnActive && !this.pendingQuestion && !this.questionReply &&
|
|
408
|
-
this.pendingPromptRequests === 0 && !this.agentRequest) {
|
|
437
|
+
this.pendingPermissions.size === 0 && this.pendingPromptRequests === 0 && !this.agentRequest) {
|
|
409
438
|
// A reply or prompt acknowledgement cleared the last barrier mid-turn: held agent
|
|
410
439
|
// input can steer the running turn now, not after it (#505 local review).
|
|
411
440
|
this.opts.onAgentInputReady?.();
|
|
@@ -418,7 +447,7 @@ class OpencodeSession {
|
|
|
418
447
|
this.autoEndTimer = undefined;
|
|
419
448
|
}
|
|
420
449
|
scheduleAutoEnd() {
|
|
421
|
-
if (!this.opts.autoEndAfterFirstTurn || !this.serverOpen || this.autoEndTimer || this.agentRequest)
|
|
450
|
+
if (!this.opts.autoEndAfterFirstTurn || !this.serverOpen || this.autoEndTimer || this.agentRequest || this.pendingPermissions.size)
|
|
422
451
|
return;
|
|
423
452
|
this.autoEndTimer = setTimeout(() => {
|
|
424
453
|
this.autoEndTimer = undefined;
|
|
@@ -431,13 +460,17 @@ class OpencodeSession {
|
|
|
431
460
|
if (!this.serverOpen)
|
|
432
461
|
return;
|
|
433
462
|
this.serverOpen = false;
|
|
463
|
+
this.clearLostWakeTimer();
|
|
434
464
|
this.agentRequest?.abort();
|
|
465
|
+
this.expirePermissions('session ended');
|
|
435
466
|
this.sse.abort();
|
|
436
467
|
this.terminate();
|
|
437
468
|
}
|
|
438
469
|
interrupt() {
|
|
439
470
|
this.serverOpen = false;
|
|
471
|
+
this.clearLostWakeTimer();
|
|
440
472
|
this.agentRequest?.abort();
|
|
473
|
+
this.expirePermissions('session ended');
|
|
441
474
|
if (this.baseUrl && this.sessionId) {
|
|
442
475
|
void this.http('POST', `/session/${this.sessionId}/abort`, undefined).catch(() => undefined);
|
|
443
476
|
}
|
|
@@ -500,7 +533,7 @@ class OpencodeSession {
|
|
|
500
533
|
}
|
|
501
534
|
const hasExited = trackChildExit(child);
|
|
502
535
|
boundOutputDrainAfterExit(child);
|
|
503
|
-
// `exit` settles process liveness, not its pipes. The shared
|
|
536
|
+
// `exit` settles process liveness, not its pipes. The shared post-exit drain
|
|
504
537
|
// bound prevents an inherited descendant pipe from retaining this session.
|
|
505
538
|
const outputDrained = Promise.all([child.stdout, child.stderr].map(stream => finished(stream, { cleanup: true }).catch(() => undefined)));
|
|
506
539
|
const exited = new Promise((resolve) => {
|
|
@@ -661,6 +694,7 @@ class OpencodeSession {
|
|
|
661
694
|
if (!resumed) {
|
|
662
695
|
const created = await this.http('POST', '/session', {
|
|
663
696
|
title: 'cezar task',
|
|
697
|
+
...opencodeToolGrantFields(this.spec.toolGrant),
|
|
664
698
|
// OpenCode 1.18.33 /doc: session.create permission rules. The native task
|
|
665
699
|
// tool checks this permission; other agent/project permissions stay intact.
|
|
666
700
|
...(this.spec.restrictNativeDelegation ? this.nativeDelegationPermission() : {}),
|
|
@@ -685,8 +719,9 @@ class OpencodeSession {
|
|
|
685
719
|
if (this.refusedBeforeOpening)
|
|
686
720
|
queueMicrotask(() => {
|
|
687
721
|
this.refusedBeforeOpening = false;
|
|
688
|
-
if (this.serverOpen && !this.pendingQuestion && !this.questionReply && !this.agentRequest)
|
|
722
|
+
if (this.serverOpen && !this.pendingQuestion && !this.questionReply && this.pendingPermissions.size === 0 && !this.agentRequest) {
|
|
689
723
|
this.opts.onAgentInputReady?.();
|
|
724
|
+
}
|
|
690
725
|
});
|
|
691
726
|
}
|
|
692
727
|
async prompt(text, origin = 'human', signal) {
|
|
@@ -700,8 +735,8 @@ class OpencodeSession {
|
|
|
700
735
|
const humanWaiter = origin === 'human';
|
|
701
736
|
if (humanWaiter)
|
|
702
737
|
this.humanPromptWaiters += 1;
|
|
703
|
-
while (this.turnActive)
|
|
704
|
-
await this.turnFinished;
|
|
738
|
+
while (this.turnActive || this.followOn)
|
|
739
|
+
await (this.turnActive ? this.turnFinished : this.followOn);
|
|
705
740
|
if (humanWaiter && generation === this.queuedPromptGeneration) {
|
|
706
741
|
this.humanPromptWaiters = Math.max(0, this.humanPromptWaiters - 1);
|
|
707
742
|
}
|
|
@@ -806,6 +841,20 @@ class OpencodeSession {
|
|
|
806
841
|
if (this.lostWakeTimer)
|
|
807
842
|
clearTimeout(this.lostWakeTimer);
|
|
808
843
|
this.lostWakeTimer = undefined;
|
|
844
|
+
this.settleFollowOn();
|
|
845
|
+
}
|
|
846
|
+
/** The follow-on wait is over. Input it refused is offered again unless a turn took over. */
|
|
847
|
+
settleFollowOn() {
|
|
848
|
+
if (!this.followOn)
|
|
849
|
+
return;
|
|
850
|
+
this.followOn = undefined;
|
|
851
|
+
this.followOnResolve();
|
|
852
|
+
if (!this.refusedForFollowOn)
|
|
853
|
+
return;
|
|
854
|
+
this.refusedForFollowOn = false;
|
|
855
|
+
if (this.turnActive)
|
|
856
|
+
return;
|
|
857
|
+
queueMicrotask(() => this.notifyAgentInputReady());
|
|
809
858
|
}
|
|
810
859
|
finishTurn() {
|
|
811
860
|
if (!this.turnActive || this.turnEnded)
|
|
@@ -817,6 +866,8 @@ class OpencodeSession {
|
|
|
817
866
|
// owns pending-question cleanup; without one, the pending ask is stale.
|
|
818
867
|
if (!this.questionReply)
|
|
819
868
|
this.pendingQuestion = undefined;
|
|
869
|
+
// OpenCode settles its own pending permission requests when the run stops.
|
|
870
|
+
this.expirePermissions('turn ended');
|
|
820
871
|
this.turnFinishedResolve();
|
|
821
872
|
// A part that never saw `time.end` (abort, server quirk) still surfaces
|
|
822
873
|
// its prose before the turn boundary (run.ts reads markers there).
|
|
@@ -837,14 +888,18 @@ class OpencodeSession {
|
|
|
837
888
|
// them apart; then report it so cezar submits it as a new prompt.
|
|
838
889
|
if (this.submissions.pending > 0) {
|
|
839
890
|
this.clearLostWakeTimer();
|
|
891
|
+
this.followOn = new Promise((resolve) => { this.followOnResolve = resolve; });
|
|
840
892
|
this.lostWakeTimer = setTimeout(() => {
|
|
841
893
|
this.lostWakeTimer = undefined;
|
|
842
|
-
if (!this.serverOpen || this.turnActive)
|
|
894
|
+
if (!this.serverOpen || this.turnActive) {
|
|
895
|
+
this.settleFollowOn();
|
|
843
896
|
return;
|
|
897
|
+
}
|
|
844
898
|
const inputIds = this.submissions.takeUnconsumed();
|
|
845
899
|
this.userMessageSubmission.clear();
|
|
846
900
|
if (inputIds.length)
|
|
847
901
|
this.emit({ type: 'input-unconsumed', inputIds });
|
|
902
|
+
this.settleFollowOn();
|
|
848
903
|
}, OPENCODE_LOST_WAKE_GRACE_MS);
|
|
849
904
|
this.lostWakeTimer.unref?.();
|
|
850
905
|
}
|
|
@@ -1007,6 +1062,20 @@ class OpencodeSession {
|
|
|
1007
1062
|
else if (type === 'message.part.updated' || type === 'message.part.created') {
|
|
1008
1063
|
this.handlePart(props.part ?? props);
|
|
1009
1064
|
}
|
|
1065
|
+
else if (type === 'permission.asked') {
|
|
1066
|
+
this.handlePermissionAsked(props);
|
|
1067
|
+
}
|
|
1068
|
+
else if (type === 'permission.replied') {
|
|
1069
|
+
// OpenCode settled the request, in any phase: our own reply, another client's, or its own.
|
|
1070
|
+
const nativeId = stringField(props, 'requestID');
|
|
1071
|
+
const pending = nativeId === undefined ? undefined : this.pendingPermissions.get(nativeId);
|
|
1072
|
+
// OpenCode publishes this before it answers the reply route, so a human reply in flight
|
|
1073
|
+
// that it echoes is that human's answer.
|
|
1074
|
+
if (pending) {
|
|
1075
|
+
const answered = pending.phase === 'answering' && pending.answer?.reply === stringField(props, 'reply');
|
|
1076
|
+
this.settlePermission(pending, answered ? { optionId: pending.answer.optionId } : { reason: 'resolved by OpenCode' });
|
|
1077
|
+
}
|
|
1078
|
+
}
|
|
1010
1079
|
else if (type === 'session.idle') {
|
|
1011
1080
|
// THE turn-end signal. The SSE bus is server-wide, so a child session's
|
|
1012
1081
|
// (sub-agent's) idle must not close the main turn; an idle with no
|
|
@@ -1189,7 +1258,7 @@ class OpencodeSession {
|
|
|
1189
1258
|
{
|
|
1190
1259
|
type: 'ask.requested',
|
|
1191
1260
|
requestId: pending.askRequestId,
|
|
1192
|
-
questions: pending.questions,
|
|
1261
|
+
questions: uiAskQuestions(pending.questions),
|
|
1193
1262
|
},
|
|
1194
1263
|
],
|
|
1195
1264
|
}));
|
|
@@ -1231,6 +1300,195 @@ class OpencodeSession {
|
|
|
1231
1300
|
this.emitQuestion(pending);
|
|
1232
1301
|
}
|
|
1233
1302
|
}
|
|
1303
|
+
// ---- permissions (hearsay-tools/cezarion#1266) --------------------------
|
|
1304
|
+
/** Any session on this private server may ask, child sessions included. The ask holds agent
|
|
1305
|
+
* input and auto-end from receipt until OpenCode settles it, the turn ends or the session does. */
|
|
1306
|
+
handlePermissionAsked(props) {
|
|
1307
|
+
if (!this.serverOpen)
|
|
1308
|
+
return;
|
|
1309
|
+
const parsed = opencodePermissionAskSchema.safeParse(props);
|
|
1310
|
+
const nativeId = parsed.success ? parsed.data.id : typeof props.id === 'string' && props.id ? props.id : undefined;
|
|
1311
|
+
if (nativeId === undefined) {
|
|
1312
|
+
// OpenCode blocks the asking tool until a reply names this request: fail closed.
|
|
1313
|
+
this.emit({ type: 'error', message: 'opencode: unsupported permission request could not be rejected: no request id' });
|
|
1314
|
+
this.finishTurn();
|
|
1315
|
+
this.end();
|
|
1316
|
+
return;
|
|
1317
|
+
}
|
|
1318
|
+
if (this.handledPermissionIds.has(nativeId))
|
|
1319
|
+
return;
|
|
1320
|
+
this.handledPermissionIds.add(nativeId);
|
|
1321
|
+
// OpenCode asks only from inside a running session loop, so a main-session ask after the idle
|
|
1322
|
+
// means the server started a run: reopen the turn, as a steered follow-on run does. That run's
|
|
1323
|
+
// own idle closes it. A child session's ask leaves the main turn alone.
|
|
1324
|
+
if (!this.turnActive && this.sessionId !== undefined && stringField(props, 'sessionID') === this.sessionId) {
|
|
1325
|
+
this.openTurn();
|
|
1326
|
+
this.emitUi(opencodeTurnStarted);
|
|
1327
|
+
}
|
|
1328
|
+
const pending = parsed.success
|
|
1329
|
+
? { nativeId, ask: parsed.data, phase: 'classifying' }
|
|
1330
|
+
: { nativeId, phase: 'rejecting' };
|
|
1331
|
+
this.pendingPermissions.set(nativeId, pending);
|
|
1332
|
+
this.agentInputReady = false;
|
|
1333
|
+
this.cancelAutoEnd();
|
|
1334
|
+
if (!parsed.success) {
|
|
1335
|
+
this.emit({ type: 'note', message: 'opencode: rejected an OpenCode permission request cezar could not read' });
|
|
1336
|
+
void this.rejectPermission(pending, 'cezar could not read this permission request');
|
|
1337
|
+
return;
|
|
1338
|
+
}
|
|
1339
|
+
this.permissionQueue = this.permissionQueue.then(() => this.answerPermission(pending)).catch(() => undefined);
|
|
1340
|
+
}
|
|
1341
|
+
/** Still the ask OpenCode is waiting on: not settled, expired or torn down since an await. */
|
|
1342
|
+
permissionLive(pending) {
|
|
1343
|
+
return this.serverOpen && this.pendingPermissions.get(pending.nativeId) === pending;
|
|
1344
|
+
}
|
|
1345
|
+
async answerPermission(pending) {
|
|
1346
|
+
const rules = await this.userPermissionRules();
|
|
1347
|
+
if (!this.permissionLive(pending))
|
|
1348
|
+
return;
|
|
1349
|
+
if (isOpencodeDefaultAsk(pending.ask, rules)) {
|
|
1350
|
+
pending.phase = 'auto-replying';
|
|
1351
|
+
try {
|
|
1352
|
+
// Never `always`: that can persist an approval beyond this run.
|
|
1353
|
+
await this.replyPermission(pending.nativeId, { reply: 'once' });
|
|
1354
|
+
}
|
|
1355
|
+
catch {
|
|
1356
|
+
// OpenCode is still waiting: a failed automatic reply asks the human instead.
|
|
1357
|
+
if (this.permissionLive(pending))
|
|
1358
|
+
this.bridgePermission(pending);
|
|
1359
|
+
return;
|
|
1360
|
+
}
|
|
1361
|
+
if (this.serverOpen && !this.answeredDefaultAsk) {
|
|
1362
|
+
this.answeredDefaultAsk = true;
|
|
1363
|
+
this.emit({
|
|
1364
|
+
type: 'note',
|
|
1365
|
+
message: "opencode: answered OpenCode's built-in permission asks (outside-worktree reads, .env reads, repeated-call guard) with allow-once; your own OpenCode permission rules still ask",
|
|
1366
|
+
});
|
|
1367
|
+
}
|
|
1368
|
+
this.settlePermission(pending);
|
|
1369
|
+
return;
|
|
1370
|
+
}
|
|
1371
|
+
this.bridgePermission(pending);
|
|
1372
|
+
}
|
|
1373
|
+
/** One lazy `GET /config` per session. An unreadable config is unknown provenance: every ask goes to the cockpit. */
|
|
1374
|
+
userPermissionRules() {
|
|
1375
|
+
this.permissionRules ??= this.readConfig().then(opencodeUserPermissionRules, () => undefined).then((rules) => {
|
|
1376
|
+
if (!rules)
|
|
1377
|
+
this.emit({ type: 'note', message: 'opencode: could not read the OpenCode config, so every permission prompt goes to the cockpit' });
|
|
1378
|
+
return rules;
|
|
1379
|
+
});
|
|
1380
|
+
return this.permissionRules;
|
|
1381
|
+
}
|
|
1382
|
+
/** Unlike `http`, an empty or unparsable body is a failure, never an empty config. */
|
|
1383
|
+
async readConfig() {
|
|
1384
|
+
if (!this.baseUrl)
|
|
1385
|
+
throw new Error('opencode server not ready');
|
|
1386
|
+
const res = await fetch(`${this.baseUrl}/config`, { method: 'GET' });
|
|
1387
|
+
if (!res.ok)
|
|
1388
|
+
throw new Error(`GET /config → ${res.status}`);
|
|
1389
|
+
return JSON.parse(await res.text());
|
|
1390
|
+
}
|
|
1391
|
+
bridgePermission(pending) {
|
|
1392
|
+
if (!this.opts.onUiEvent) {
|
|
1393
|
+
const message = 'no permission UI is attached to this cezar session';
|
|
1394
|
+
this.emit({ type: 'note', message: `opencode: rejected the OpenCode ${pending.ask.permission} permission prompt: ${message}` });
|
|
1395
|
+
void this.rejectPermission(pending, message);
|
|
1396
|
+
return;
|
|
1397
|
+
}
|
|
1398
|
+
if (!this.showPermissionCard(pending))
|
|
1399
|
+
void this.rejectPermission(pending, 'permission UI unavailable');
|
|
1400
|
+
}
|
|
1401
|
+
/** Emits a fresh cockpit card, with new ids, for the ask. False when the UI threw: that card is resolved again. */
|
|
1402
|
+
showPermissionCard(pending) {
|
|
1403
|
+
const bridge = opencodePermissionBridge(pending.ask);
|
|
1404
|
+
pending.bridge = bridge;
|
|
1405
|
+
pending.phase = 'card';
|
|
1406
|
+
pending.answer = undefined;
|
|
1407
|
+
try {
|
|
1408
|
+
this.opts.onUiEvent(bridge.event);
|
|
1409
|
+
return true;
|
|
1410
|
+
}
|
|
1411
|
+
catch {
|
|
1412
|
+
// A throwing consumer cannot leave OpenCode waiting on a card nobody sees.
|
|
1413
|
+
pending.bridge = undefined;
|
|
1414
|
+
this.emitPermissionResolved(bridge.event.requestId, { reason: 'permission UI unavailable' });
|
|
1415
|
+
return false;
|
|
1416
|
+
}
|
|
1417
|
+
}
|
|
1418
|
+
/** A reject OpenCode never receives leaves the asking tool blocked: fail closed. */
|
|
1419
|
+
async rejectPermission(pending, message) {
|
|
1420
|
+
pending.phase = 'rejecting';
|
|
1421
|
+
try {
|
|
1422
|
+
await this.replyPermission(pending.nativeId, { reply: 'reject', message });
|
|
1423
|
+
}
|
|
1424
|
+
catch (err) {
|
|
1425
|
+
if (!this.permissionLive(pending))
|
|
1426
|
+
return;
|
|
1427
|
+
this.emit({ type: 'error', message: `opencode: permission rejection failed: ${err instanceof Error ? err.message : String(err)}` });
|
|
1428
|
+
this.finishTurn();
|
|
1429
|
+
this.end();
|
|
1430
|
+
return;
|
|
1431
|
+
}
|
|
1432
|
+
this.settlePermission(pending);
|
|
1433
|
+
}
|
|
1434
|
+
/** The card and the input barrier stay until OpenCode accepts the reply; a failed reply shows a fresh card. */
|
|
1435
|
+
respondPermission(requestId, optionId) {
|
|
1436
|
+
if (!this.serverOpen)
|
|
1437
|
+
return false;
|
|
1438
|
+
const pending = [...this.pendingPermissions.values()].find((entry) => entry.bridge?.event.requestId === requestId);
|
|
1439
|
+
const reply = pending?.bridge?.replies.get(optionId);
|
|
1440
|
+
if (!pending || pending.phase !== 'card' || !reply)
|
|
1441
|
+
return false;
|
|
1442
|
+
const bridge = pending.bridge;
|
|
1443
|
+
pending.phase = 'answering';
|
|
1444
|
+
pending.answer = { optionId, reply };
|
|
1445
|
+
void this.replyPermission(pending.nativeId, { reply }).then(() => {
|
|
1446
|
+
if (this.permissionLive(pending) && pending.bridge === bridge)
|
|
1447
|
+
this.settlePermission(pending, { optionId });
|
|
1448
|
+
}, (err) => {
|
|
1449
|
+
if (!this.permissionLive(pending) || pending.bridge !== bridge)
|
|
1450
|
+
return;
|
|
1451
|
+
this.emit({ type: 'note', message: `opencode: permission reply failed: ${err instanceof Error ? err.message : String(err)}` });
|
|
1452
|
+
// The fresh card first, so the run's pending set never empties and it stays parked.
|
|
1453
|
+
const shown = this.showPermissionCard(pending);
|
|
1454
|
+
this.emitPermissionResolved(bridge.event.requestId, { reason: 'permission reply failed' });
|
|
1455
|
+
if (!shown)
|
|
1456
|
+
void this.rejectPermission(pending, 'permission UI unavailable');
|
|
1457
|
+
});
|
|
1458
|
+
return true;
|
|
1459
|
+
}
|
|
1460
|
+
async replyPermission(nativeId, body) {
|
|
1461
|
+
await this.http('POST', `/permission/${encodeURIComponent(nativeId)}/reply`, body);
|
|
1462
|
+
}
|
|
1463
|
+
/** OpenCode no longer waits on the ask: retire it, resolve its card, and release the barrier. */
|
|
1464
|
+
settlePermission(pending, resolution = {}) {
|
|
1465
|
+
if (this.pendingPermissions.get(pending.nativeId) !== pending)
|
|
1466
|
+
return;
|
|
1467
|
+
this.pendingPermissions.delete(pending.nativeId);
|
|
1468
|
+
if (pending.bridge)
|
|
1469
|
+
this.emitPermissionResolved(pending.bridge.event.requestId, resolution);
|
|
1470
|
+
if (this.pendingPermissions.size)
|
|
1471
|
+
return;
|
|
1472
|
+
this.notifyAgentInputReady();
|
|
1473
|
+
// A card that arrived after the turn ended cancelled its auto-end: re-arm it.
|
|
1474
|
+
if (this.turnEnded && !this.turnActive && !this.questionReply)
|
|
1475
|
+
this.scheduleAutoEnd();
|
|
1476
|
+
}
|
|
1477
|
+
/** Retires every ask without HTTP: OpenCode settles its own request on idle or abort. The
|
|
1478
|
+
* caller owns what follows (turn end or teardown), so the barrier release is not run here. */
|
|
1479
|
+
expirePermissions(reason) {
|
|
1480
|
+
for (const pending of [...this.pendingPermissions.values()]) {
|
|
1481
|
+
this.pendingPermissions.delete(pending.nativeId);
|
|
1482
|
+
if (pending.bridge)
|
|
1483
|
+
this.emitPermissionResolved(pending.bridge.event.requestId, { reason });
|
|
1484
|
+
}
|
|
1485
|
+
}
|
|
1486
|
+
emitPermissionResolved(requestId, resolution) {
|
|
1487
|
+
try {
|
|
1488
|
+
this.opts.onUiEvent?.({ type: 'permission.resolved', requestId, ...resolution });
|
|
1489
|
+
}
|
|
1490
|
+
catch { /* A failed consumer must not strand other pending requests. */ }
|
|
1491
|
+
}
|
|
1234
1492
|
// ---- http ---------------------------------------------------------------
|
|
1235
1493
|
async http(method, path, body, signal) {
|
|
1236
1494
|
if (!this.baseUrl)
|
|
@@ -1239,9 +1497,9 @@ class OpencodeSession {
|
|
|
1239
1497
|
// prompts go through `prompt_async` — nothing long-polls anymore.
|
|
1240
1498
|
const res = await fetch(`${this.baseUrl}${path}`, {
|
|
1241
1499
|
method,
|
|
1242
|
-
signal,
|
|
1500
|
+
...(signal !== undefined ? { signal } : {}),
|
|
1243
1501
|
headers: body !== undefined ? { 'content-type': 'application/json' } : {},
|
|
1244
|
-
body
|
|
1502
|
+
...(body !== undefined ? { body: JSON.stringify(body) } : {}),
|
|
1245
1503
|
});
|
|
1246
1504
|
if (!res.ok) {
|
|
1247
1505
|
const detail = await res.text().catch(() => '');
|