@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,53 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Task-
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* ride in on `buildChildEnv`'s base allowlist — so every run on the machine
|
|
6
|
-
* shared one directory. On a box that runs agents continuously and never
|
|
7
|
-
* reboots, that directory is a tmpfs nobody reaps, and once it hits its quota
|
|
8
|
-
* the failure is *silent*: the Claude Code CLI roots its scratch tree at
|
|
9
|
-
* `os.tmpdir()` and round-trips each `Bash` command's stdout/stderr through a
|
|
10
|
-
* file there. Under `EDQUOT` the inode is still allocated, so the file is
|
|
11
|
-
* created and the write fails — the command runs, its side effects land, and
|
|
12
|
-
* the agent reads back an empty result with a bogus exit status. Nothing in the
|
|
13
|
-
* cockpit says anything is wrong.
|
|
14
|
-
*
|
|
15
|
-
* Three properties fix that, and this module owns all of them:
|
|
16
|
-
*
|
|
17
|
-
* 1. **Isolation** — each run gets `<dataDir>/tmp/<runId>`, on the same disk
|
|
18
|
-
* as the run's own state rather than a shared tmpfs, reaped when the run
|
|
19
|
-
* ends. `buildChildEnv` applies the per-run env last, so these values win
|
|
20
|
-
* over the host's without any allowlist change.
|
|
21
|
-
* 2. **Fail loud** — the directory is write-probed before the backend spawns.
|
|
22
|
-
* A run that cannot get a working temp directory fails immediately with a
|
|
23
|
-
* named, actionable error instead of spawning an agent that will run blind.
|
|
24
|
-
* 3. **Short enough to bind** (#387) — tools bind *named* unix sockets under
|
|
25
|
-
* `TMPDIR` (tsx's IPC server lays down `<tmpdir>/tsx-<uid>/<pid>.pipe`,
|
|
26
|
-
* Chrome a `SingletonSocket`), and the kernel caps a socket path at
|
|
27
|
-
* `sun_path` — 108 bytes on Linux, 104 on macOS, NUL included. A checkout
|
|
28
|
-
* deep enough (Cezar's own nested task worktrees land past 100 chars)
|
|
29
|
-
* pushed every such bind past the cap and broke `npm install` and
|
|
30
|
-
* typechecking inside the run. A directory that would land too deep
|
|
31
|
-
* resolves instead to a short digest-named directory under the OS temp
|
|
32
|
-
* root — still per-run, still probed, still reaped. A repo whose own path
|
|
33
|
-
* already fits keeps today's directory, byte for byte. When the ambient
|
|
34
|
-
* `TMPDIR` itself is too deep for that root's candidate (#440 — routine
|
|
35
|
-
* inside a cezar task session, whose `TMPDIR` is the checkout's own
|
|
36
|
-
* scratch tree per #785), the next root is the platform's own temp root
|
|
37
|
-
* (`/tmp`), which `TMPDIR` cannot deepen; only when no root fits does the
|
|
38
|
-
* spawn refuse.
|
|
39
|
-
*
|
|
40
|
-
* `CEZ_AGENT_TMPDIR=0` opts out of ALL THREE — cezar keeps its hands off the
|
|
41
|
-
* temp directory entirely and the pre-#785 behaviour is back, byte for byte.
|
|
42
|
-
* That is deliberate: an escape hatch that still imposed the preflight would be
|
|
43
|
-
* a hatch you cannot actually escape through, and this repo's
|
|
44
|
-
* graceful-degradation rule says a new check must never become the only way to
|
|
45
|
-
* run.
|
|
2
|
+
* Task-owned temp directories with real-byte write probes and a Unix socket path budget. Prefer
|
|
3
|
+
* short repo-local paths; fall back to marked digest directories. CEZ_AGENT_TMPDIR=0 bypasses
|
|
4
|
+
* the mechanism.
|
|
46
5
|
*/
|
|
47
|
-
import { createHash } from 'node:crypto';
|
|
6
|
+
import { createHash, randomUUID } from 'node:crypto';
|
|
48
7
|
import { checkpointFallbackRemoval, fallbackIdentity, readFallbackRemovals } from './agent-tmpdir-removal.js';
|
|
49
8
|
import { workerEvidenceRunIds } from './worker-execution.js';
|
|
50
|
-
import { existsSync, lstatSync, mkdirSync, readdirSync, readFileSync, realpathSync, rmSync, writeFileSync } from 'node:fs';
|
|
9
|
+
import { cpSync, existsSync, linkSync, lstatSync, mkdirSync, readdirSync, readFileSync, realpathSync, renameSync, rmSync, unlinkSync, writeFileSync } from 'node:fs';
|
|
51
10
|
import { tmpdir } from 'node:os';
|
|
52
11
|
import { basename, dirname, isAbsolute, join } from 'node:path';
|
|
53
12
|
/** Run ids are uuids; anything else must never reach a recursive `rmSync`.
|
|
@@ -59,28 +18,142 @@ import { basename, dirname, isAbsolute, join } from 'node:path';
|
|
|
59
18
|
function safeRunId(id) {
|
|
60
19
|
return /^[A-Za-z0-9._-]+$/.test(id) && id !== '.' && id !== '..';
|
|
61
20
|
}
|
|
62
|
-
/**
|
|
21
|
+
/**
|
|
22
|
+
* The run's CONTROL directory, `<dataDir>/tmp/<runId>`: it holds the recorded
|
|
23
|
+
* fallback location (`.cez-fallback`) and the partial-removal receipts, and its
|
|
24
|
+
* entries are what the startup sweep reads run ids from. Before
|
|
25
|
+
* hearsay-tools/cezarion#1022 it was also the TMPDIR handed to the agent; a
|
|
26
|
+
* directory minted then is still a location every holder scan, reap and sweep
|
|
27
|
+
* covers, and `agentTmpEnv` moves its contents to `agentShortTmpDir` on the
|
|
28
|
+
* run's next spawn.
|
|
29
|
+
*/
|
|
63
30
|
export function agentTmpDir(dataDir, runId) {
|
|
64
31
|
return join(dataDir, 'tmp', runId);
|
|
65
32
|
}
|
|
66
|
-
/** The root every
|
|
67
|
-
*
|
|
33
|
+
/** The root every control directory hangs off (`runs/`, `runs.db` and
|
|
34
|
+
* `worktrees/` are siblings this module never touches). */
|
|
68
35
|
function agentTmpRoot(dataDir) {
|
|
69
36
|
return join(dataDir, 'tmp');
|
|
70
37
|
}
|
|
38
|
+
const SHORT_TMP_ROOT = 't';
|
|
39
|
+
const SHORT_TMP_NAME_LENGTH = 8;
|
|
40
|
+
const RUN_FILE = '.cez-run';
|
|
41
|
+
/**
|
|
42
|
+
* Repo-local scratch: <dataDir>/t/<id8>. The .cez-run marker names the full run; a foreign
|
|
43
|
+
* marker forces the OS-root fallback. Reap and sweep must respect that marker.
|
|
44
|
+
*/
|
|
45
|
+
export function agentShortTmpDir(dataDir, runId) {
|
|
46
|
+
return join(dataDir, SHORT_TMP_ROOT, runId.slice(0, SHORT_TMP_NAME_LENGTH));
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Marker run id: null when absent, undefined when unreadable or malformed. Unknown ownership is
|
|
50
|
+
* retained. ENOTDIR is absent so spawn fails with AgentTempDirError when creation fails.
|
|
51
|
+
*/
|
|
52
|
+
function readRunMarker(dir) {
|
|
53
|
+
try {
|
|
54
|
+
const owner = readFileSync(join(dir, RUN_FILE), 'utf8');
|
|
55
|
+
return safeRunId(owner) && owner.slice(0, SHORT_TMP_NAME_LENGTH) === basename(dir) ? owner : undefined;
|
|
56
|
+
}
|
|
57
|
+
catch (err) {
|
|
58
|
+
const code = err.code;
|
|
59
|
+
return code === 'ENOENT' || code === 'ENOTDIR' ? null : undefined;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
function shortTmpDirClaim(dir, runId) {
|
|
63
|
+
const owner = readRunMarker(dir);
|
|
64
|
+
if (owner === null)
|
|
65
|
+
return 'free';
|
|
66
|
+
if (owner === undefined)
|
|
67
|
+
return 'unknown';
|
|
68
|
+
return owner === runId ? 'ours' : 'other';
|
|
69
|
+
}
|
|
70
|
+
/** Mint the `.cez-run` marker without ever following an existing name, and
|
|
71
|
+
* refuse when the name turns out to be another run's — the read in
|
|
72
|
+
* `resolveAgentTmpDir` already steered away from one, so this only fires on a
|
|
73
|
+
* race or a replaced marker. The id is written to a private name first and
|
|
74
|
+
* hard-linked into place: `link` publishes it whole or not at all and, like
|
|
75
|
+
* `wx`, fails on an existing name, so a crash mid-write can never leave a
|
|
76
|
+
* partial marker for the sweep to misread (hearsay-tools/cezarion#1037). */
|
|
77
|
+
function writeRunMarker(dir, runId) {
|
|
78
|
+
const marker = join(dir, RUN_FILE);
|
|
79
|
+
const pending = `${marker}.${process.pid}.${randomUUID()}`;
|
|
80
|
+
writeFileSync(pending, runId, { encoding: 'utf8', flag: 'wx' });
|
|
81
|
+
try {
|
|
82
|
+
linkSync(pending, marker);
|
|
83
|
+
}
|
|
84
|
+
catch (err) {
|
|
85
|
+
if (err.code !== 'EEXIST')
|
|
86
|
+
throw err;
|
|
87
|
+
if (readRunMarker(dir) !== runId) {
|
|
88
|
+
throw new AgentTempDirError(dir, new Error('directory belongs to another run'));
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
finally {
|
|
92
|
+
unlinkSync(pending);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Carry a pre-hearsay-tools/cezarion#1022 run's scratch over to its new
|
|
97
|
+
* directory, so a Continue after the upgrade keeps its files (#515). Only a
|
|
98
|
+
* control directory that was the old TMPDIR qualifies — one holding a fallback
|
|
99
|
+
* pointer or removal receipt is control state and stays where the reap looks
|
|
100
|
+
* for it. Same filesystem (both under dataDir), so the rename is atomic; any
|
|
101
|
+
* failure just leaves a fresh directory, and the old one is still reaped.
|
|
102
|
+
*/
|
|
103
|
+
function adoptLegacyTmpDir(dataDir, runId, short) {
|
|
104
|
+
const legacy = agentTmpDir(dataDir, runId);
|
|
105
|
+
try {
|
|
106
|
+
if (existsSync(short) || !lstatSync(legacy).isDirectory())
|
|
107
|
+
return;
|
|
108
|
+
if (readdirSync(legacy).some((name) => name.startsWith('.cez-fallback')))
|
|
109
|
+
return;
|
|
110
|
+
mkdirSync(dirname(short), { recursive: true });
|
|
111
|
+
renameSync(legacy, short);
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
// best-effort: nothing to adopt, or it could not be moved.
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* The bytes Chromium appends to TMPDIR for its singleton socket —
|
|
119
|
+
* `/org.chromium.Chromium.XXXXXX/SingletonSocket`, 45 bytes (Google Chrome's
|
|
120
|
+
* `/com.google.Chrome.XXXXXX/...` is 41). The longest name any known tool lays
|
|
121
|
+
* down under TMPDIR: tsx's `/tsx-<uid>/<pid>.pipe` is ~22.
|
|
122
|
+
*
|
|
123
|
+
* Mirrors `CHROME_SINGLETON_OVERHEAD` in `.ai/scripts/resolve-browser-launch.mjs`,
|
|
124
|
+
* which the e2e seam applies to its own browser launches. The published
|
|
125
|
+
* package cannot import a repo script, so the value is written twice and
|
|
126
|
+
* `packages/cezar/test/unit/resolve-browser-launch.test.ts` asserts they agree.
|
|
127
|
+
*/
|
|
128
|
+
export const CHROME_SINGLETON_OVERHEAD = '/org.chromium.Chromium.XXXXXX/SingletonSocket'.length;
|
|
129
|
+
/** `sockaddr_un.sun_path` on macOS, the tighter platform: 104 bytes, NUL
|
|
130
|
+
* included (Linux has 108). Mirrors `DARWIN_UNIX_SOCKET_MAX` in
|
|
131
|
+
* `.ai/scripts/resolve-browser-launch.mjs`, under the same agreement test. */
|
|
132
|
+
export const DARWIN_UNIX_SOCKET_MAX = 103;
|
|
71
133
|
/**
|
|
72
134
|
* The longest a per-run temp directory may be so that tools binding named
|
|
73
135
|
* unix sockets under it still work (#387), measured in UTF-8 bytes — the
|
|
74
|
-
* kernel bounds the encoded path, not the JavaScript character count.
|
|
75
|
-
* `
|
|
76
|
-
*
|
|
77
|
-
*
|
|
78
|
-
*
|
|
79
|
-
*
|
|
80
|
-
*
|
|
81
|
-
*
|
|
136
|
+
* kernel bounds the encoded path, not the JavaScript character count. It is
|
|
137
|
+
* the tighter platform's `sun_path` minus Chromium's singleton-socket suffix:
|
|
138
|
+
* 103 − 45 = 58. One value for every platform, so a checkout resolves the
|
|
139
|
+
* same way wherever it runs.
|
|
140
|
+
*
|
|
141
|
+
* It was 78 until hearsay-tools/cezarion#1022, sized for a `SingletonSocket`
|
|
142
|
+
* directly under TMPDIR. Chrome nests it one directory deeper, so a 77-byte
|
|
143
|
+
* task TMPDIR (an ordinary checkout's `.ai/cezar/tmp/<uuid>`) failed every
|
|
144
|
+
* browser launch with `Socket path too long`.
|
|
82
145
|
*/
|
|
83
|
-
export const MAX_SOCKET_SAFE_DIR_LENGTH =
|
|
146
|
+
export const MAX_SOCKET_SAFE_DIR_LENGTH = DARWIN_UNIX_SOCKET_MAX - CHROME_SINGLETON_OVERHEAD;
|
|
147
|
+
/** The pre-hearsay-tools/cezarion#1022 ceiling. Only reading a recorded fallback
|
|
148
|
+
* pointer still accepts it: a run that recorded one under the old ceiling must
|
|
149
|
+
* keep its scratch on Continue and must still be reaped, and the digest
|
|
150
|
+
* equality check — not the length — is what validates the pointer. Such a
|
|
151
|
+
* pointer is never handed to an agent again: `migrateLegacyFallback` moves its
|
|
152
|
+
* scratch to a directory inside the new budget first. */
|
|
153
|
+
const LEGACY_MAX_SOCKET_SAFE_DIR_LENGTH = 78;
|
|
154
|
+
function fitsSocketBudget(path) {
|
|
155
|
+
return Buffer.byteLength(path, 'utf8') <= MAX_SOCKET_SAFE_DIR_LENGTH;
|
|
156
|
+
}
|
|
84
157
|
/** The OS temp root, symlink-resolved: `bind(2)` bounds the path the kernel
|
|
85
158
|
* walks, so the check must measure what the path resolves to, not what it
|
|
86
159
|
* says (macOS hands out `/var/folders/...` through a `/private/var` symlink). */
|
|
@@ -126,6 +199,11 @@ const FALLBACK_NAME_LENGTH = 12;
|
|
|
126
199
|
* without this marker a sweep could not tell its own stale directories from
|
|
127
200
|
* another project's live ones in the shared root — and would delete them. */
|
|
128
201
|
const OWNER_FILE = '.cez-owner';
|
|
202
|
+
/** The dataDir itself, beside the marker (hearsay-tools/cezarion#1911). The digest cannot
|
|
203
|
+
* name a dataDir that was deleted, so without this path no sweep could ever match that
|
|
204
|
+
* dataDir's fallback directories again. It is a claim, not proof: the sweep trusts it only
|
|
205
|
+
* when it digests to the marker. */
|
|
206
|
+
const OWNER_DIR_FILE = '.cez-owner-dir';
|
|
129
207
|
function dataDirOwner(dataDir) {
|
|
130
208
|
return createHash('sha256').update(`cez-agent-owner:${dataDir}`).digest('hex').slice(0, 16);
|
|
131
209
|
}
|
|
@@ -156,6 +234,36 @@ function writeOwnerMarker(dir, dataDir) {
|
|
|
156
234
|
throw new AgentTempDirError(dir, new Error('ownership marker was replaced — remove the directory to re-mint it'));
|
|
157
235
|
}
|
|
158
236
|
}
|
|
237
|
+
// A directory minted before this file existed gets it on its next spawn. An existing one is
|
|
238
|
+
// left as it is: the sweep checks it against the marker before it acts on it.
|
|
239
|
+
try {
|
|
240
|
+
writeFileSync(join(dir, OWNER_DIR_FILE), dataDir, { encoding: 'utf8', flag: 'wx' });
|
|
241
|
+
}
|
|
242
|
+
catch (err) {
|
|
243
|
+
if (err.code !== 'EEXIST')
|
|
244
|
+
throw err;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
/** True only when the fallback's recorded dataDir digests to its marker `owner` and that
|
|
248
|
+
* dataDir no longer exists. A missing or mismatched record, or any error but ENOENT, keeps
|
|
249
|
+
* the directory. */
|
|
250
|
+
function ownerDataDirGone(dir, owner) {
|
|
251
|
+
let dataDir;
|
|
252
|
+
try {
|
|
253
|
+
dataDir = readFileSync(join(dir, OWNER_DIR_FILE), 'utf8');
|
|
254
|
+
}
|
|
255
|
+
catch {
|
|
256
|
+
return false;
|
|
257
|
+
}
|
|
258
|
+
if (!isAbsolute(dataDir) || dataDirOwner(dataDir) !== owner)
|
|
259
|
+
return false;
|
|
260
|
+
try {
|
|
261
|
+
lstatSync(dataDir);
|
|
262
|
+
return false;
|
|
263
|
+
}
|
|
264
|
+
catch (err) {
|
|
265
|
+
return err.code === 'ENOENT';
|
|
266
|
+
}
|
|
159
267
|
}
|
|
160
268
|
/**
|
|
161
269
|
* Where the fallback lives for this dataDir+run pair under one root. The name
|
|
@@ -176,8 +284,14 @@ function fallbackTmpDir(root, dataDir, runId) {
|
|
|
176
284
|
* host temp environment can change between sessions, so recomputing it loses
|
|
177
285
|
* the task's files. Only a digest-named absolute path is accepted on read. */
|
|
178
286
|
const LOCATION_FILE = '.cez-fallback';
|
|
179
|
-
|
|
180
|
-
|
|
287
|
+
/** The location a pointer migration is moving scratch AWAY from
|
|
288
|
+
* (hearsay-tools/cezarion#1037). It exists only between rewriting
|
|
289
|
+
* `.cez-fallback` and finishing the move, so a crash in that window still
|
|
290
|
+
* leaves the old directory in every holder scan, reap and sweep — the old root
|
|
291
|
+
* may be one no later env lists. */
|
|
292
|
+
const PREVIOUS_LOCATION_FILE = '.cez-fallback-previous';
|
|
293
|
+
function recordedFallback(dataDir, runId, file = LOCATION_FILE) {
|
|
294
|
+
const marker = join(agentTmpDir(dataDir, runId), file);
|
|
181
295
|
let dir;
|
|
182
296
|
try {
|
|
183
297
|
dir = readFileSync(marker, 'utf8');
|
|
@@ -188,11 +302,83 @@ function recordedFallback(dataDir, runId) {
|
|
|
188
302
|
throw new AgentTempDirError(marker, err);
|
|
189
303
|
}
|
|
190
304
|
if (!isAbsolute(dir) || dir !== fallbackTmpDir(dirname(dir), dataDir, runId)
|
|
191
|
-
|| Buffer.byteLength(dir, 'utf8') >
|
|
305
|
+
|| Buffer.byteLength(dir, 'utf8') > LEGACY_MAX_SOCKET_SAFE_DIR_LENGTH) {
|
|
192
306
|
throw new AgentTempDirError(marker, new Error('invalid recorded fallback directory'));
|
|
193
307
|
}
|
|
194
308
|
return dir;
|
|
195
309
|
}
|
|
310
|
+
/** Replace a location record whole: write a private name, then `rename` over
|
|
311
|
+
* the record, so a crash leaves the old pointer or the new one, never a torn
|
|
312
|
+
* one. The private name never follows an existing file (`wx`). */
|
|
313
|
+
function rewriteLocation(dataDir, runId, file, dir) {
|
|
314
|
+
const target = join(agentTmpDir(dataDir, runId), file);
|
|
315
|
+
const pending = `${target}.${randomUUID()}.tmp`;
|
|
316
|
+
writeFileSync(pending, dir, { encoding: 'utf8', flag: 'wx' });
|
|
317
|
+
try {
|
|
318
|
+
renameSync(pending, target);
|
|
319
|
+
}
|
|
320
|
+
finally {
|
|
321
|
+
rmSync(pending, { force: true });
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
/**
|
|
325
|
+
* Move the scratch of a fallback recorded under the pre-hearsay-tools/cezarion#1022
|
|
326
|
+
* ceiling to `dir`, the socket-safe directory resolution now picks
|
|
327
|
+
* (hearsay-tools/cezarion#1037). Handing the old path back would keep a 59–78
|
|
328
|
+
* byte TMPDIR that Chromium's nested singleton socket cannot bind under.
|
|
329
|
+
*
|
|
330
|
+
* Order is what makes a crash safe, and every re-run converges:
|
|
331
|
+
* 1. record the old location in `.cez-fallback-previous`, so it stays in
|
|
332
|
+
* scans and reaps whatever the env is later;
|
|
333
|
+
* 2. point `.cez-fallback` at `dir`;
|
|
334
|
+
* 3. move the files — `rename` when `dir` does not exist yet, otherwise (or on
|
|
335
|
+
* `EXDEV`, the usual case across temp roots) copy into `dir` and remove the
|
|
336
|
+
* old directory under a removal receipt, so a removal cut short after the
|
|
337
|
+
* owner marker went still proves the directory ours on retry;
|
|
338
|
+
* 4. drop `.cez-fallback-previous`.
|
|
339
|
+
* The old directory is moved only when its `.cez-owner` marker is this
|
|
340
|
+
* dataDir's (or a receipt proves it was); anything else refuses the spawn.
|
|
341
|
+
*/
|
|
342
|
+
function migrateLegacyFallback(dataDir, runId, dir) {
|
|
343
|
+
const recorded = recordedFallback(dataDir, runId);
|
|
344
|
+
const from = recordedFallback(dataDir, runId, PREVIOUS_LOCATION_FILE)
|
|
345
|
+
?? (recorded !== undefined && recorded !== dir ? recorded : undefined);
|
|
346
|
+
if (from === undefined)
|
|
347
|
+
return;
|
|
348
|
+
const local = agentTmpDir(dataDir, runId);
|
|
349
|
+
if (from !== dir) {
|
|
350
|
+
rewriteLocation(dataDir, runId, PREVIOUS_LOCATION_FILE, from);
|
|
351
|
+
if (recorded !== dir)
|
|
352
|
+
rewriteLocation(dataDir, runId, LOCATION_FILE, dir);
|
|
353
|
+
const removals = readFallbackRemovals(local);
|
|
354
|
+
if (!fallbackOwnedOrAbsent(dataDir, from, removals)) {
|
|
355
|
+
throw new AgentTempDirError(from, new Error('ownership marker was replaced — remove the directory to re-mint it'));
|
|
356
|
+
}
|
|
357
|
+
if (existsSync(from))
|
|
358
|
+
moveFallbackScratch(dataDir, local, from, dir, removals);
|
|
359
|
+
}
|
|
360
|
+
rmSync(join(local, PREVIOUS_LOCATION_FILE), { force: true });
|
|
361
|
+
}
|
|
362
|
+
function moveFallbackScratch(dataDir, local, from, to, removals) {
|
|
363
|
+
if (!existsSync(to)) {
|
|
364
|
+
try {
|
|
365
|
+
renameSync(from, to);
|
|
366
|
+
return;
|
|
367
|
+
}
|
|
368
|
+
catch (err) {
|
|
369
|
+
if (err.code !== 'EXDEV')
|
|
370
|
+
throw err;
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
mkdirSync(to, { recursive: true, mode: 0o700 });
|
|
374
|
+
// The destination keeps (or gets) its own marker; the source's is never
|
|
375
|
+
// copied over it, so a foreign marker still refuses instead of being replaced.
|
|
376
|
+
writeOwnerMarker(to, dataDir);
|
|
377
|
+
const markers = new Set([join(from, OWNER_FILE), join(from, OWNER_DIR_FILE)]);
|
|
378
|
+
cpSync(from, to, { recursive: true, force: true, verbatimSymlinks: true, preserveTimestamps: true, filter: (src) => !markers.has(src) });
|
|
379
|
+
checkpointFallbackRemoval(local, from, removals);
|
|
380
|
+
rmSync(from, { recursive: true, force: true });
|
|
381
|
+
}
|
|
196
382
|
function recordFallback(dataDir, runId, dir) {
|
|
197
383
|
const local = agentTmpDir(dataDir, runId);
|
|
198
384
|
mkdirSync(local, { recursive: true });
|
|
@@ -212,28 +398,43 @@ function recordFallback(dataDir, runId, dir) {
|
|
|
212
398
|
* with the real candidates, tests with synthetic ones, so the nothing-fits
|
|
213
399
|
* branch stays exercised even though a real platform root is always short. */
|
|
214
400
|
export function firstSocketSafeDir(paths) {
|
|
215
|
-
return paths.find(
|
|
401
|
+
return paths.find(fitsSocketBudget);
|
|
216
402
|
}
|
|
217
403
|
/**
|
|
218
|
-
* The temp directory this run should use: the repo-local
|
|
219
|
-
* when it is short enough for unix-socket paths
|
|
404
|
+
* The temp directory this run should use: the repo-local `agentShortTmpDir`
|
|
405
|
+
* when it is short enough for unix-socket paths and no other run's marker
|
|
406
|
+
* claims it, and otherwise a short
|
|
220
407
|
* digest-named directory under the first OS temp root whose candidate fits —
|
|
221
408
|
* the env-honouring root first, the platform default when `TMPDIR` itself is
|
|
222
|
-
* too deep (#387, #440). A recorded location wins across host-env changes
|
|
409
|
+
* too deep (#387, #440). A recorded location wins across host-env changes
|
|
410
|
+
* while it fits the budget; one recorded under the pre-#1022 ceiling resolves
|
|
411
|
+
* to the fallback that fits now, where `agentTmpEnv` moves its scratch.
|
|
223
412
|
* Read-only resolution — nothing is created, nothing is
|
|
224
413
|
* probed; `agentTmpEnv` owns the side effects.
|
|
225
414
|
*/
|
|
226
415
|
export function resolveAgentTmpDir(dataDir, runId) {
|
|
227
416
|
const recorded = recordedFallback(dataDir, runId);
|
|
228
|
-
|
|
417
|
+
// A pointer recorded under the pre-#1022 ceiling is not reused: resolution
|
|
418
|
+
// picks a fallback that fits, and `agentTmpEnv` moves the scratch there.
|
|
419
|
+
if (recorded && fitsSocketBudget(recorded))
|
|
229
420
|
return recorded;
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
421
|
+
// An id that is not a plain identifier never names a repo-local directory;
|
|
422
|
+
// the digest-named fallback is safe for any input.
|
|
423
|
+
const local = safeRunId(runId) ? agentShortTmpDir(dataDir, runId) : agentTmpDir(dataDir, runId);
|
|
424
|
+
// A legacy pointer's scratch moves to another fallback, never into the
|
|
425
|
+
// repo-local directory: the control directory keeps owning its location.
|
|
426
|
+
if (!recorded && safeRunId(runId) && fitsSocketBudget(local)) {
|
|
427
|
+
const claim = shortTmpDirClaim(local, runId);
|
|
428
|
+
if (claim === 'free' || claim === 'ours')
|
|
429
|
+
return local;
|
|
430
|
+
}
|
|
233
431
|
const candidates = osTempRoots().map((root) => fallbackTmpDir(root, dataDir, runId));
|
|
234
432
|
const fallback = firstSocketSafeDir(candidates);
|
|
235
433
|
if (fallback)
|
|
236
434
|
return fallback;
|
|
435
|
+
if (recorded) {
|
|
436
|
+
throw new AgentTempDirError(recorded, new Error(`recorded fallback is past the ${MAX_SOCKET_SAFE_DIR_LENGTH}-byte unix socket budget and no OS temp root has a candidate that fits`));
|
|
437
|
+
}
|
|
237
438
|
// Nothing fits — every root, the platform default included, has a candidate
|
|
238
439
|
// past the cap. Minting any would hand the agent a temp directory that
|
|
239
440
|
// cannot serve unix sockets: the silent failure #387 is about. Fail the
|
|
@@ -271,7 +472,7 @@ export class AgentTempDirError extends Error {
|
|
|
271
472
|
}
|
|
272
473
|
}
|
|
273
474
|
/** Opt-out spelling matches the house style for default-on behaviour
|
|
274
|
-
* (`CEZ_AUTONAME=0
|
|
475
|
+
* (`CEZ_AUTONAME=0`): only an exact `0` disables. */
|
|
275
476
|
export function agentTmpDirEnabled(env = process.env) {
|
|
276
477
|
return env.CEZ_AGENT_TMPDIR !== '0';
|
|
277
478
|
}
|
|
@@ -279,10 +480,8 @@ export function agentTmpDirEnabled(env = process.env) {
|
|
|
279
480
|
* spawns racing on the same directory delete each other's file mid-probe. */
|
|
280
481
|
let probeSeq = 0;
|
|
281
482
|
/**
|
|
282
|
-
*
|
|
283
|
-
*
|
|
284
|
-
* `write(2)` — so the probe writes real bytes and removes them again. A
|
|
285
|
-
* directory that is merely *full but writable* passes, by design.
|
|
483
|
+
* Probe with a real data write, then remove the probe. File creation alone does not prove writes
|
|
484
|
+
* work.
|
|
286
485
|
*/
|
|
287
486
|
function probeWritable(dir) {
|
|
288
487
|
const probe = join(dir, `.cez-tmp-probe-${process.pid}-${(probeSeq += 1)}`);
|
|
@@ -324,19 +523,27 @@ function probeWritable(dir) {
|
|
|
324
523
|
export function agentTmpEnv(dataDir, runId, env = process.env) {
|
|
325
524
|
if (!agentTmpDirEnabled(env))
|
|
326
525
|
return {};
|
|
327
|
-
const local = agentTmpDir(dataDir, runId);
|
|
328
526
|
const dir = resolveAgentTmpDir(dataDir, runId);
|
|
527
|
+
const repoLocal = safeRunId(runId) && dir === agentShortTmpDir(dataDir, runId);
|
|
329
528
|
try {
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
529
|
+
if (repoLocal) {
|
|
530
|
+
adoptLegacyTmpDir(dataDir, runId, dir);
|
|
531
|
+
mkdirSync(dir, { recursive: true });
|
|
532
|
+
writeRunMarker(dir, runId);
|
|
533
|
+
}
|
|
534
|
+
else {
|
|
535
|
+
// In the shared OS root the directory carries its ownership marker, so a
|
|
536
|
+
// startup sweep from another project can tell it apart from stale
|
|
537
|
+
// scratch (the sweep skips anything whose marker is missing or foreign).
|
|
538
|
+
migrateLegacyFallback(dataDir, runId, dir);
|
|
539
|
+
mkdirSync(dir, { recursive: true, mode: 0o700 });
|
|
335
540
|
writeOwnerMarker(dir, dataDir);
|
|
336
541
|
recordFallback(dataDir, runId, dir);
|
|
337
542
|
}
|
|
338
543
|
}
|
|
339
544
|
catch (err) {
|
|
545
|
+
if (err instanceof AgentTempDirError)
|
|
546
|
+
throw err;
|
|
340
547
|
throw new AgentTempDirError(dir, err);
|
|
341
548
|
}
|
|
342
549
|
probeWritable(dir);
|
|
@@ -347,13 +554,15 @@ export function agentTmpEnv(dataDir, runId, env = process.env) {
|
|
|
347
554
|
function fallbackLocations(dataDir, runId) {
|
|
348
555
|
const paths = new Set(osTempRoots().map(root => fallbackTmpDir(root, dataDir, runId)));
|
|
349
556
|
let complete = true, removals = [];
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
557
|
+
for (const file of [LOCATION_FILE, PREVIOUS_LOCATION_FILE]) {
|
|
558
|
+
try {
|
|
559
|
+
const recorded = recordedFallback(dataDir, runId, file);
|
|
560
|
+
if (recorded)
|
|
561
|
+
paths.add(recorded);
|
|
562
|
+
}
|
|
563
|
+
catch {
|
|
564
|
+
complete = false;
|
|
565
|
+
}
|
|
357
566
|
}
|
|
358
567
|
// Independent evidence: a damaged receipt must never discard a readable pointer (#738).
|
|
359
568
|
try {
|
|
@@ -400,7 +609,8 @@ export function agentTmpDirOwnershipProven(dataDir, runId) {
|
|
|
400
609
|
return false;
|
|
401
610
|
try {
|
|
402
611
|
const { paths, removals, complete } = fallbackLocations(dataDir, runId);
|
|
403
|
-
return complete &&
|
|
612
|
+
return complete && shortTmpDirClaim(agentShortTmpDir(dataDir, runId), runId) !== 'unknown'
|
|
613
|
+
&& paths.every(path => fallbackOwnedOrAbsent(dataDir, path, removals));
|
|
404
614
|
}
|
|
405
615
|
catch {
|
|
406
616
|
return false;
|
|
@@ -416,7 +626,11 @@ export function agentTmpDirLocationEvidence(dataDir, runId) {
|
|
|
416
626
|
if (!safeRunId(runId))
|
|
417
627
|
return { paths: [], complete: false };
|
|
418
628
|
const { paths, complete } = fallbackLocations(dataDir, runId);
|
|
419
|
-
|
|
629
|
+
// The short directory is listed unless its marker positively names another
|
|
630
|
+
// run: an unreadable marker is uncertainty, and uncertainty stays in scans.
|
|
631
|
+
const short = agentShortTmpDir(dataDir, runId);
|
|
632
|
+
const shorts = shortTmpDirClaim(short, runId) === 'other' ? [] : [short];
|
|
633
|
+
return { paths: [agentTmpDir(dataDir, runId), ...shorts, ...paths], complete };
|
|
420
634
|
}
|
|
421
635
|
/** Only ENOENT proves cleanup finished. Permission/read errors retain the durable intent. */
|
|
422
636
|
export function agentTmpDirMayExist(dataDir, runId) {
|
|
@@ -433,17 +647,18 @@ export function agentTmpDirMayExist(dataDir, runId) {
|
|
|
433
647
|
});
|
|
434
648
|
}
|
|
435
649
|
/**
|
|
436
|
-
* Reap
|
|
437
|
-
*
|
|
438
|
-
* its files. Never throws — reaping must not break a terminal transition.
|
|
439
|
-
*
|
|
440
|
-
* The repo-local directory and the digest name under EVERY root are tried,
|
|
441
|
-
* because the resolution depends on the lengths of `dataDir` and the ambient
|
|
442
|
-
* `TMPDIR`, either of which a Continue, a re-base or a changed env can move
|
|
443
|
-
* between mint and reap; removing a name that was never minted is a no-op, so
|
|
444
|
-
* trying them all is pure safety.
|
|
650
|
+
* Reap scratch after terminal completion or history deletion, never session close alone. Try
|
|
651
|
+
* repo-local paths and every digest root, subject to ownership checks. Never throw from cleanup.
|
|
445
652
|
*/
|
|
446
653
|
export function removeAgentTmpDir(dataDir, runId) {
|
|
654
|
+
reapAgentTmpDir(dataDir, runId, false);
|
|
655
|
+
}
|
|
656
|
+
/** `spareUnclaimedShort` keeps a markerless short directory: the startup sweep
|
|
657
|
+
* sets it when a kept run's `agentShortTmpDir` lands on the same name, because
|
|
658
|
+
* that run may have created or adopted the directory and crashed before
|
|
659
|
+
* publishing its marker (hearsay-tools/cezarion#1037) — it is that run's
|
|
660
|
+
* Continue scratch, not this orphan's. */
|
|
661
|
+
function reapAgentTmpDir(dataDir, runId, spareUnclaimedShort) {
|
|
447
662
|
if (!safeRunId(runId))
|
|
448
663
|
return;
|
|
449
664
|
const local = agentTmpDir(dataDir, runId);
|
|
@@ -472,6 +687,14 @@ export function removeAgentTmpDir(dataDir, runId) {
|
|
|
472
687
|
throw error;
|
|
473
688
|
}
|
|
474
689
|
}
|
|
690
|
+
// The short directory goes only when it is this run's (or unclaimed): a
|
|
691
|
+
// colliding name may be another run's live scratch.
|
|
692
|
+
const short = agentShortTmpDir(dataDir, runId);
|
|
693
|
+
const claim = shortTmpDirClaim(short, runId);
|
|
694
|
+
if (claim === 'unknown')
|
|
695
|
+
return;
|
|
696
|
+
if (claim === 'ours' || (claim === 'free' && !spareUnclaimedShort))
|
|
697
|
+
rmSync(short, { recursive: true, force: true });
|
|
475
698
|
// The durable location and partial-removal receipts are last, never before a fallback.
|
|
476
699
|
rmSync(local, { recursive: true, force: true });
|
|
477
700
|
}
|
|
@@ -480,19 +703,8 @@ export function removeAgentTmpDir(dataDir, runId) {
|
|
|
480
703
|
}
|
|
481
704
|
}
|
|
482
705
|
/**
|
|
483
|
-
*
|
|
484
|
-
*
|
|
485
|
-
* accumulate them forever. Three confined sets are swept and nothing else:
|
|
486
|
-
*
|
|
487
|
-
* - `<dataDir>/tmp`, where entries ARE the run ids (reports the ids reaped);
|
|
488
|
-
* - the `cez-agent-<12 hex>` directories under EVERY OS temp root — the
|
|
489
|
-
* env-honouring root and the platform default (#440) — where the name
|
|
490
|
-
* digests the dataDir and is not reversible to a run id (reports the
|
|
491
|
-
* directory names reaped). The pattern is exact — prefix, lowercase hex,
|
|
492
|
-
* fixed length, directories only — and a directory is removed only when
|
|
493
|
-
* its `.cez-owner` marker names THIS dataDir and none of this dataDir's
|
|
494
|
-
* kept runs claims it, so another project's scratch in a shared root is
|
|
495
|
-
* never touched.
|
|
706
|
+
* Startup sweep of confined repo-local and digest directories not claimed by keepRunIds. Respect
|
|
707
|
+
* full-run and dataDir ownership markers; retain unreadable or uncertain ownership.
|
|
496
708
|
*/
|
|
497
709
|
export function sweepAgentTmpDirs(dataDir, keepRunIds) {
|
|
498
710
|
// Private worker evidence outlives corrupt/missing/quarantined index rows. Both local
|
|
@@ -503,6 +715,9 @@ export function sweepAgentTmpDirs(dataDir, keepRunIds) {
|
|
|
503
715
|
const keep = new Set([...keepRunIds, ...workers]);
|
|
504
716
|
const reaped = [];
|
|
505
717
|
let entries;
|
|
718
|
+
// Short names a kept run resolves to. Computed before the legacy loop, which
|
|
719
|
+
// must spare them too: a markerless one is a kept run's, mid-mint.
|
|
720
|
+
const claimedShort = new Set([...keep].filter(safeRunId).map((id) => basename(agentShortTmpDir(dataDir, id))));
|
|
506
721
|
const root = agentTmpRoot(dataDir);
|
|
507
722
|
if (existsSync(root)) {
|
|
508
723
|
try {
|
|
@@ -518,7 +733,7 @@ export function sweepAgentTmpDirs(dataDir, keepRunIds) {
|
|
|
518
733
|
continue;
|
|
519
734
|
try {
|
|
520
735
|
const locations = agentTmpDirLocations(dataDir, name).filter(dir => existsSync(dir));
|
|
521
|
-
|
|
736
|
+
reapAgentTmpDir(dataDir, name, claimedShort.has(basename(agentShortTmpDir(dataDir, name))));
|
|
522
737
|
reaped.push(...locations.filter(dir => !existsSync(dir)).map(dir => basename(dir)));
|
|
523
738
|
}
|
|
524
739
|
catch {
|
|
@@ -526,14 +741,55 @@ export function sweepAgentTmpDirs(dataDir, keepRunIds) {
|
|
|
526
741
|
}
|
|
527
742
|
}
|
|
528
743
|
}
|
|
529
|
-
// The #
|
|
530
|
-
//
|
|
531
|
-
//
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
744
|
+
// The hearsay-tools/cezarion#1022 short directories. Every entry here is this
|
|
745
|
+
// dataDir's own, so no ownership marker is needed — only the claim check
|
|
746
|
+
// that keeps a kept run's directory, and a colliding name's, alive.
|
|
747
|
+
const shortRoot = join(dataDir, SHORT_TMP_ROOT);
|
|
748
|
+
if (existsSync(shortRoot)) {
|
|
749
|
+
let shortEntries;
|
|
750
|
+
try {
|
|
751
|
+
shortEntries = readdirSync(shortRoot, { withFileTypes: true })
|
|
752
|
+
.filter((e) => e.isDirectory())
|
|
753
|
+
.map((e) => e.name);
|
|
754
|
+
}
|
|
755
|
+
catch {
|
|
756
|
+
shortEntries = [];
|
|
757
|
+
}
|
|
758
|
+
for (const name of shortEntries) {
|
|
759
|
+
if (!safeRunId(name))
|
|
760
|
+
continue;
|
|
761
|
+
const owner = readRunMarker(join(shortRoot, name));
|
|
762
|
+
if (owner === undefined)
|
|
763
|
+
continue; // unreadable marker: unknown ownership is never ours to remove.
|
|
764
|
+
// A marker that is a proper prefix of a kept run's id is that run's, cut short.
|
|
765
|
+
if (owner === null ? claimedShort.has(name) : [...keep].some((id) => id.startsWith(owner)))
|
|
766
|
+
continue;
|
|
767
|
+
try {
|
|
768
|
+
rmSync(join(shortRoot, name), { recursive: true, force: true });
|
|
769
|
+
reaped.push(owner ?? name);
|
|
770
|
+
}
|
|
771
|
+
catch {
|
|
772
|
+
// best-effort: a locked directory is retried on the next boot.
|
|
773
|
+
}
|
|
774
|
+
}
|
|
775
|
+
}
|
|
776
|
+
reaped.push(...sweepFallbackRoots(dataDir, keep));
|
|
777
|
+
return reaped;
|
|
778
|
+
}
|
|
779
|
+
/**
|
|
780
|
+
* The #387 fallback locations, in every shared OS temp root. Kept narrow on
|
|
781
|
+
* purpose: exact prefix, 12 lowercase-hex name, directories only, and
|
|
782
|
+
* ownership — a directory is removed only when its `.cez-owner` marker
|
|
783
|
+
* names THIS dataDir and none of this dataDir's kept runs claims it, or
|
|
784
|
+
* when its marker names a dataDir that no longer exists
|
|
785
|
+
* (hearsay-tools/cezarion#1911): nothing else will ever remove that one. A
|
|
786
|
+
* marker that is missing, unreadable or names a live dataDir is another
|
|
787
|
+
* project's, or unknown, and is never ours to remove.
|
|
788
|
+
*/
|
|
789
|
+
function sweepFallbackRoots(dataDir, keep) {
|
|
535
790
|
const owner = dataDirOwner(dataDir);
|
|
536
791
|
const claimed = new Set([...keep].filter(safeRunId).map((id) => basename(fallbackTmpDir(osTempRoot(), dataDir, id))));
|
|
792
|
+
const reaped = [];
|
|
537
793
|
for (const osRoot of osTempRoots()) {
|
|
538
794
|
let fallbackEntries;
|
|
539
795
|
try {
|
|
@@ -543,20 +799,7 @@ export function sweepAgentTmpDirs(dataDir, keepRunIds) {
|
|
|
543
799
|
continue; // an unreadable root is skipped, not fatal: others remain.
|
|
544
800
|
}
|
|
545
801
|
for (const entry of fallbackEntries) {
|
|
546
|
-
if (!
|
|
547
|
-
continue;
|
|
548
|
-
if (!/^[0-9a-f]{12}$/.test(entry.name.slice(FALLBACK_PREFIX.length)))
|
|
549
|
-
continue;
|
|
550
|
-
let entryOwner;
|
|
551
|
-
try {
|
|
552
|
-
entryOwner = readFileSync(join(osRoot, entry.name, OWNER_FILE), 'utf8').trim();
|
|
553
|
-
}
|
|
554
|
-
catch {
|
|
555
|
-
continue; // no readable marker: unknown ownership is never ours to remove.
|
|
556
|
-
}
|
|
557
|
-
if (entryOwner !== owner)
|
|
558
|
-
continue;
|
|
559
|
-
if (claimed.has(entry.name))
|
|
802
|
+
if (!fallbackSweepable(osRoot, entry, owner, claimed))
|
|
560
803
|
continue;
|
|
561
804
|
try {
|
|
562
805
|
rmSync(join(osRoot, entry.name), { recursive: true, force: true });
|
|
@@ -569,4 +812,18 @@ export function sweepAgentTmpDirs(dataDir, keepRunIds) {
|
|
|
569
812
|
}
|
|
570
813
|
return reaped;
|
|
571
814
|
}
|
|
815
|
+
function fallbackSweepable(osRoot, entry, owner, claimed) {
|
|
816
|
+
if (!entry.isDirectory() || !entry.name.startsWith(FALLBACK_PREFIX))
|
|
817
|
+
return false;
|
|
818
|
+
if (!/^[0-9a-f]{12}$/.test(entry.name.slice(FALLBACK_PREFIX.length)))
|
|
819
|
+
return false;
|
|
820
|
+
let entryOwner;
|
|
821
|
+
try {
|
|
822
|
+
entryOwner = readFileSync(join(osRoot, entry.name, OWNER_FILE), 'utf8').trim();
|
|
823
|
+
}
|
|
824
|
+
catch {
|
|
825
|
+
return false; // no readable marker: unknown ownership is never ours to remove.
|
|
826
|
+
}
|
|
827
|
+
return entryOwner === owner ? !claimed.has(entry.name) : ownerDataDirGone(join(osRoot, entry.name), entryOwner);
|
|
828
|
+
}
|
|
572
829
|
//# sourceMappingURL=agent-tmpdir.js.map
|