@paperclipai/server 2026.824.0 → 2026.825.0-beta.1
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/dist/adapters/builtin-adapter-types.d.ts.map +1 -1
- package/dist/adapters/builtin-adapter-types.js +1 -0
- package/dist/adapters/builtin-adapter-types.js.map +1 -1
- package/dist/adapters/plugin-loader.d.ts +1 -0
- package/dist/adapters/plugin-loader.d.ts.map +1 -1
- package/dist/adapters/plugin-loader.js +12 -1
- package/dist/adapters/plugin-loader.js.map +1 -1
- package/dist/adapters/plugin-loader.test.d.ts +2 -0
- package/dist/adapters/plugin-loader.test.d.ts.map +1 -0
- package/dist/adapters/plugin-loader.test.js +37 -0
- package/dist/adapters/plugin-loader.test.js.map +1 -0
- package/dist/adapters/registry.d.ts.map +1 -1
- package/dist/adapters/registry.js +68 -5
- package/dist/adapters/registry.js.map +1 -1
- package/dist/adapters/registry.test.d.ts +2 -0
- package/dist/adapters/registry.test.d.ts.map +1 -0
- package/dist/adapters/registry.test.js +35 -0
- package/dist/adapters/registry.test.js.map +1 -0
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +5 -7
- package/dist/app.js.map +1 -1
- package/dist/auth/better-auth.d.ts +10 -0
- package/dist/auth/better-auth.d.ts.map +1 -1
- package/dist/auth/better-auth.js +47 -0
- package/dist/auth/better-auth.js.map +1 -1
- package/dist/auth/workspace-login-handoff-exchange.d.ts +75 -0
- package/dist/auth/workspace-login-handoff-exchange.d.ts.map +1 -0
- package/dist/auth/workspace-login-handoff-exchange.js +73 -0
- package/dist/auth/workspace-login-handoff-exchange.js.map +1 -0
- package/dist/auth/workspace-login-handoff-plugin.d.ts +40 -0
- package/dist/auth/workspace-login-handoff-plugin.d.ts.map +1 -0
- package/dist/auth/workspace-login-handoff-plugin.js +140 -0
- package/dist/auth/workspace-login-handoff-plugin.js.map +1 -0
- package/dist/auth/workspace-login-handoff.d.ts +189 -0
- package/dist/auth/workspace-login-handoff.d.ts.map +1 -0
- package/dist/auth/workspace-login-handoff.js +319 -0
- package/dist/auth/workspace-login-handoff.js.map +1 -0
- package/dist/build-info.json +3 -0
- package/dist/config.d.ts +1 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +14 -0
- package/dist/config.js.map +1 -1
- package/dist/dev-runner-worktree.d.ts.map +1 -1
- package/dist/dev-runner-worktree.js +5 -0
- package/dist/dev-runner-worktree.js.map +1 -1
- package/dist/duplex-aggregate-ceiling-env.d.ts +21 -0
- package/dist/duplex-aggregate-ceiling-env.d.ts.map +1 -0
- package/dist/duplex-aggregate-ceiling-env.js +23 -0
- package/dist/duplex-aggregate-ceiling-env.js.map +1 -0
- package/dist/embedded-postgres-supervisor.d.ts +27 -0
- package/dist/embedded-postgres-supervisor.d.ts.map +1 -0
- package/dist/embedded-postgres-supervisor.js +72 -0
- package/dist/embedded-postgres-supervisor.js.map +1 -0
- package/dist/errors.d.ts +2 -0
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +6 -0
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +115 -7
- package/dist/index.js.map +1 -1
- package/dist/instrumentation.d.ts +33 -0
- package/dist/instrumentation.d.ts.map +1 -1
- package/dist/instrumentation.js +68 -1
- package/dist/instrumentation.js.map +1 -1
- package/dist/middleware/auth.d.ts.map +1 -1
- package/dist/middleware/auth.js +35 -10
- package/dist/middleware/auth.js.map +1 -1
- package/dist/middleware/error-handler.d.ts.map +1 -1
- package/dist/middleware/error-handler.js +8 -1
- package/dist/middleware/error-handler.js.map +1 -1
- package/dist/middleware/logger.d.ts.map +1 -1
- package/dist/middleware/logger.js +5 -2
- package/dist/middleware/logger.js.map +1 -1
- package/dist/middleware/redact-sensitive.d.ts.map +1 -1
- package/dist/middleware/redact-sensitive.js +4 -0
- package/dist/middleware/redact-sensitive.js.map +1 -1
- package/dist/middleware/validate.d.ts +3 -1
- package/dist/middleware/validate.d.ts.map +1 -1
- package/dist/middleware/validate.js +37 -0
- package/dist/middleware/validate.js.map +1 -1
- package/dist/routes/access.d.ts.map +1 -1
- package/dist/routes/access.js +20 -0
- package/dist/routes/access.js.map +1 -1
- package/dist/routes/activity.js +4 -4
- package/dist/routes/activity.js.map +1 -1
- package/dist/routes/adapter-login-route-spine.d.ts +81 -0
- package/dist/routes/adapter-login-route-spine.d.ts.map +1 -0
- package/dist/routes/adapter-login-route-spine.js +40 -0
- package/dist/routes/adapter-login-route-spine.js.map +1 -0
- package/dist/routes/adapters.d.ts +33 -0
- package/dist/routes/adapters.d.ts.map +1 -1
- package/dist/routes/adapters.js +35 -1
- package/dist/routes/adapters.js.map +1 -1
- package/dist/routes/adapters.test.d.ts +2 -0
- package/dist/routes/adapters.test.d.ts.map +1 -0
- package/dist/routes/adapters.test.js +58 -0
- package/dist/routes/adapters.test.js.map +1 -0
- package/dist/routes/agents.d.ts.map +1 -1
- package/dist/routes/agents.js +281 -91
- package/dist/routes/agents.js.map +1 -1
- package/dist/routes/cases.d.ts +11 -22
- package/dist/routes/cases.d.ts.map +1 -1
- package/dist/routes/cases.js +13 -13
- package/dist/routes/companies.js +3 -3
- package/dist/routes/decision-training.js +6 -6
- package/dist/routes/decisions.js +4 -4
- package/dist/routes/decisions.js.map +1 -1
- package/dist/routes/environments.d.ts.map +1 -1
- package/dist/routes/environments.js +79 -6
- package/dist/routes/environments.js.map +1 -1
- package/dist/routes/execution-workspaces.d.ts.map +1 -1
- package/dist/routes/execution-workspaces.js +384 -16
- package/dist/routes/execution-workspaces.js.map +1 -1
- package/dist/routes/file-resources.js +2 -2
- package/dist/routes/health.d.ts.map +1 -1
- package/dist/routes/health.js +58 -4
- package/dist/routes/health.js.map +1 -1
- package/dist/routes/instance-settings.d.ts.map +1 -1
- package/dist/routes/instance-settings.js +40 -0
- package/dist/routes/instance-settings.js.map +1 -1
- package/dist/routes/issues.d.ts +10 -0
- package/dist/routes/issues.d.ts.map +1 -1
- package/dist/routes/issues.js +495 -65
- package/dist/routes/issues.js.map +1 -1
- package/dist/routes/openapi.d.ts.map +1 -1
- package/dist/routes/openapi.js +241 -122
- package/dist/routes/openapi.js.map +1 -1
- package/dist/routes/pipelines.js +19 -19
- package/dist/routes/plugins.d.ts.map +1 -1
- package/dist/routes/plugins.js +22 -0
- package/dist/routes/plugins.js.map +1 -1
- package/dist/routes/projects.d.ts.map +1 -1
- package/dist/routes/projects.js +2 -0
- package/dist/routes/projects.js.map +1 -1
- package/dist/routes/routines.js +2 -2
- package/dist/routes/routines.js.map +1 -1
- package/dist/routes/secrets.d.ts +1 -1
- package/dist/routes/secrets.d.ts.map +1 -1
- package/dist/routes/secrets.js +39 -50
- package/dist/routes/secrets.js.map +1 -1
- package/dist/routes/setup-token-route.test.js +50 -3
- package/dist/routes/setup-token-route.test.js.map +1 -1
- package/dist/services/adapter-login-lease.d.ts +50 -0
- package/dist/services/adapter-login-lease.d.ts.map +1 -0
- package/dist/services/adapter-login-lease.js +26 -0
- package/dist/services/adapter-login-lease.js.map +1 -0
- package/dist/services/adapter-login-lease.test.d.ts +2 -0
- package/dist/services/adapter-login-lease.test.d.ts.map +1 -0
- package/dist/services/adapter-login-lease.test.js +68 -0
- package/dist/services/adapter-login-lease.test.js.map +1 -0
- package/dist/services/agent-action-audit.js +1 -1
- package/dist/services/agent-secret-bindings.d.ts +15 -0
- package/dist/services/agent-secret-bindings.d.ts.map +1 -1
- package/dist/services/agent-secret-bindings.js +2 -2
- package/dist/services/agent-secret-bindings.js.map +1 -1
- package/dist/services/agents.d.ts +13 -13
- package/dist/services/agents.d.ts.map +1 -1
- package/dist/services/agents.js +46 -5
- package/dist/services/agents.js.map +1 -1
- package/dist/services/artifact-review-documents.d.ts +34 -0
- package/dist/services/artifact-review-documents.d.ts.map +1 -0
- package/dist/services/artifact-review-documents.js +196 -0
- package/dist/services/artifact-review-documents.js.map +1 -0
- package/dist/services/assets.d.ts +1 -1
- package/dist/services/codex-device-login-credential-read.d.ts +58 -0
- package/dist/services/codex-device-login-credential-read.d.ts.map +1 -0
- package/dist/services/codex-device-login-credential-read.js +118 -0
- package/dist/services/codex-device-login-credential-read.js.map +1 -0
- package/dist/services/codex-device-login-reaper.d.ts.map +1 -1
- package/dist/services/codex-device-login-reaper.js +8 -5
- package/dist/services/codex-device-login-reaper.js.map +1 -1
- package/dist/services/codex-device-login-service.d.ts +127 -36
- package/dist/services/codex-device-login-service.d.ts.map +1 -1
- package/dist/services/codex-device-login-service.js +204 -84
- package/dist/services/codex-device-login-service.js.map +1 -1
- package/dist/services/company-portability.d.ts +3 -1
- package/dist/services/company-portability.d.ts.map +1 -1
- package/dist/services/company-portability.js +76 -20
- package/dist/services/company-portability.js.map +1 -1
- package/dist/services/company-skill-policy.d.ts +1 -1
- package/dist/services/costs.d.ts +1 -1
- package/dist/services/decisions.d.ts +6 -6
- package/dist/services/duplex-observability-recorder.d.ts +62 -0
- package/dist/services/duplex-observability-recorder.d.ts.map +1 -0
- package/dist/services/duplex-observability-recorder.js +54 -0
- package/dist/services/duplex-observability-recorder.js.map +1 -0
- package/dist/services/environment-config.js +5 -5
- package/dist/services/environment-config.js.map +1 -1
- package/dist/services/environment-custom-image-runtime.d.ts +116 -0
- package/dist/services/environment-custom-image-runtime.d.ts.map +1 -1
- package/dist/services/environment-custom-image-runtime.js +255 -1
- package/dist/services/environment-custom-image-runtime.js.map +1 -1
- package/dist/services/environment-custom-images.d.ts +39 -0
- package/dist/services/environment-custom-images.d.ts.map +1 -1
- package/dist/services/environment-custom-images.js +219 -17
- package/dist/services/environment-custom-images.js.map +1 -1
- package/dist/services/environment-driver-traits.d.ts +109 -0
- package/dist/services/environment-driver-traits.d.ts.map +1 -0
- package/dist/services/environment-driver-traits.js +102 -0
- package/dist/services/environment-driver-traits.js.map +1 -0
- package/dist/services/environment-execution-target.d.ts +4 -0
- package/dist/services/environment-execution-target.d.ts.map +1 -1
- package/dist/services/environment-execution-target.js +63 -7
- package/dist/services/environment-execution-target.js.map +1 -1
- package/dist/services/environment-run-orchestrator.d.ts +27 -1
- package/dist/services/environment-run-orchestrator.d.ts.map +1 -1
- package/dist/services/environment-run-orchestrator.js +24 -4
- package/dist/services/environment-run-orchestrator.js.map +1 -1
- package/dist/services/environment-runtime.d.ts +118 -20
- package/dist/services/environment-runtime.d.ts.map +1 -1
- package/dist/services/environment-runtime.js +436 -91
- package/dist/services/environment-runtime.js.map +1 -1
- package/dist/services/environments.d.ts.map +1 -1
- package/dist/services/environments.js +20 -2
- package/dist/services/environments.js.map +1 -1
- package/dist/services/execution-workspace-branch-ownership.d.ts +4 -0
- package/dist/services/execution-workspace-branch-ownership.d.ts.map +1 -0
- package/dist/services/execution-workspace-branch-ownership.js +9 -0
- package/dist/services/execution-workspace-branch-ownership.js.map +1 -0
- package/dist/services/execution-workspace-policy.d.ts.map +1 -1
- package/dist/services/execution-workspace-policy.js +3 -0
- package/dist/services/execution-workspace-policy.js.map +1 -1
- package/dist/services/execution-workspaces.d.ts +2 -0
- package/dist/services/execution-workspaces.d.ts.map +1 -1
- package/dist/services/execution-workspaces.js +90 -2
- package/dist/services/execution-workspaces.js.map +1 -1
- package/dist/services/external-objects.d.ts +19 -19
- package/dist/services/finance.d.ts +1 -1
- package/dist/services/goals.d.ts +2 -2
- package/dist/services/heartbeat-policy.d.ts +3 -0
- package/dist/services/heartbeat-policy.d.ts.map +1 -0
- package/dist/services/heartbeat-policy.js +10 -0
- package/dist/services/heartbeat-policy.js.map +1 -0
- package/dist/services/heartbeat-run-runtime-status.test.js +1 -1
- package/dist/services/heartbeat-run-runtime-status.test.js.map +1 -1
- package/dist/services/heartbeat.d.ts +23 -1
- package/dist/services/heartbeat.d.ts.map +1 -1
- package/dist/services/heartbeat.js +192 -11
- package/dist/services/heartbeat.js.map +1 -1
- package/dist/services/index.d.ts +1 -0
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +1 -0
- package/dist/services/index.js.map +1 -1
- package/dist/services/instance-settings.d.ts.map +1 -1
- package/dist/services/instance-settings.js +2 -0
- package/dist/services/instance-settings.js.map +1 -1
- package/dist/services/issue-dependency-wakeups.d.ts +57 -9
- package/dist/services/issue-dependency-wakeups.d.ts.map +1 -1
- package/dist/services/issue-dependency-wakeups.js +146 -14
- package/dist/services/issue-dependency-wakeups.js.map +1 -1
- package/dist/services/issue-dependency-wakeups.test.d.ts +2 -0
- package/dist/services/issue-dependency-wakeups.test.d.ts.map +1 -0
- package/dist/services/issue-dependency-wakeups.test.js +183 -0
- package/dist/services/issue-dependency-wakeups.test.js.map +1 -0
- package/dist/services/issue-recovery-actions.d.ts +6 -1
- package/dist/services/issue-recovery-actions.d.ts.map +1 -1
- package/dist/services/issue-recovery-actions.js +123 -44
- package/dist/services/issue-recovery-actions.js.map +1 -1
- package/dist/services/issue-thread-interactions.d.ts +8 -0
- package/dist/services/issue-thread-interactions.d.ts.map +1 -1
- package/dist/services/issue-thread-interactions.js +220 -10
- package/dist/services/issue-thread-interactions.js.map +1 -1
- package/dist/services/issues.d.ts +8 -7
- package/dist/services/issues.d.ts.map +1 -1
- package/dist/services/issues.js +84 -12
- package/dist/services/issues.js.map +1 -1
- package/dist/services/local-service-supervisor.d.ts +61 -1
- package/dist/services/local-service-supervisor.d.ts.map +1 -1
- package/dist/services/local-service-supervisor.js +221 -25
- package/dist/services/local-service-supervisor.js.map +1 -1
- package/dist/services/login-command.d.ts +46 -0
- package/dist/services/login-command.d.ts.map +1 -0
- package/dist/services/login-command.js +87 -0
- package/dist/services/login-command.js.map +1 -0
- package/dist/services/login-command.test.d.ts +2 -0
- package/dist/services/login-command.test.d.ts.map +1 -0
- package/dist/services/login-command.test.js +71 -0
- package/dist/services/login-command.test.js.map +1 -0
- package/dist/services/managed-workspace-identity.d.ts +140 -0
- package/dist/services/managed-workspace-identity.d.ts.map +1 -0
- package/dist/services/managed-workspace-identity.js +277 -0
- package/dist/services/managed-workspace-identity.js.map +1 -0
- package/dist/services/plugin-environment-driver.d.ts +15 -1
- package/dist/services/plugin-environment-driver.d.ts.map +1 -1
- package/dist/services/plugin-environment-driver.js +23 -1
- package/dist/services/plugin-environment-driver.js.map +1 -1
- package/dist/services/plugin-host-services.d.ts +3 -2
- package/dist/services/plugin-host-services.d.ts.map +1 -1
- package/dist/services/plugin-host-services.js +11 -2
- package/dist/services/plugin-host-services.js.map +1 -1
- package/dist/services/plugin-loader.d.ts.map +1 -1
- package/dist/services/plugin-loader.js +39 -8
- package/dist/services/plugin-loader.js.map +1 -1
- package/dist/services/plugin-managed-agents.d.ts.map +1 -1
- package/dist/services/plugin-managed-agents.js +50 -5
- package/dist/services/plugin-managed-agents.js.map +1 -1
- package/dist/services/plugin-manifest-validator.d.ts.map +1 -1
- package/dist/services/plugin-manifest-validator.js +5 -2
- package/dist/services/plugin-manifest-validator.js.map +1 -1
- package/dist/services/plugin-registry.d.ts +5 -5
- package/dist/services/plugin-worker-manager.d.ts +158 -11
- package/dist/services/plugin-worker-manager.d.ts.map +1 -1
- package/dist/services/plugin-worker-manager.js +1139 -79
- package/dist/services/plugin-worker-manager.js.map +1 -1
- package/dist/services/projects.d.ts +1 -1
- package/dist/services/recovery/disposition-repair.d.ts +24 -0
- package/dist/services/recovery/disposition-repair.d.ts.map +1 -0
- package/dist/services/recovery/disposition-repair.js +125 -0
- package/dist/services/recovery/disposition-repair.js.map +1 -0
- package/dist/services/recovery/service.d.ts +6 -6
- package/dist/services/recovery/service.d.ts.map +1 -1
- package/dist/services/recovery/service.js +856 -384
- package/dist/services/recovery/service.js.map +1 -1
- package/dist/services/recovery/stranded-notice.js +4 -4
- package/dist/services/recovery/stranded-notice.js.map +1 -1
- package/dist/services/recovery/stranded-notice.test.js +1 -1
- package/dist/services/recovery/stranded-notice.test.js.map +1 -1
- package/dist/services/recovery/successful-run-handoff.d.ts +1 -1
- package/dist/services/recovery/successful-run-handoff.d.ts.map +1 -1
- package/dist/services/recovery/successful-run-handoff.js +6 -4
- package/dist/services/recovery/successful-run-handoff.js.map +1 -1
- package/dist/services/recovery/successful-run-handoff.test.js +1 -1
- package/dist/services/recovery/successful-run-handoff.test.js.map +1 -1
- package/dist/services/recovery-observability.d.ts +1 -1
- package/dist/services/recovery-observability.d.ts.map +1 -1
- package/dist/services/recovery-observability.js +4 -1
- package/dist/services/recovery-observability.js.map +1 -1
- package/dist/services/routines.d.ts.map +1 -1
- package/dist/services/routines.js +86 -1
- package/dist/services/routines.js.map +1 -1
- package/dist/services/runtime-exposure/loopback-listener.js +1 -1
- package/dist/services/runtime-exposure/loopback-listener.js.map +1 -1
- package/dist/services/runtime-exposure/loopback-listener.test.js +1 -1
- package/dist/services/runtime-exposure/loopback-listener.test.js.map +1 -1
- package/dist/services/scripts/codex-auth-read.cjs +93 -0
- package/dist/services/secret-proposal-authorization.d.ts +15 -0
- package/dist/services/secret-proposal-authorization.d.ts.map +1 -0
- package/dist/services/secret-proposal-authorization.js +29 -0
- package/dist/services/secret-proposal-authorization.js.map +1 -0
- package/dist/services/secret-proposal-notifications.d.ts +18 -0
- package/dist/services/secret-proposal-notifications.d.ts.map +1 -0
- package/dist/services/secret-proposal-notifications.js +37 -0
- package/dist/services/secret-proposal-notifications.js.map +1 -0
- package/dist/services/secret-proposals.d.ts +20 -10
- package/dist/services/secret-proposals.d.ts.map +1 -1
- package/dist/services/secret-proposals.js +205 -14
- package/dist/services/secret-proposals.js.map +1 -1
- package/dist/services/secrets.d.ts +3 -3
- package/dist/services/settings-visibility.d.ts +17 -0
- package/dist/services/settings-visibility.d.ts.map +1 -0
- package/dist/services/settings-visibility.js +29 -0
- package/dist/services/settings-visibility.js.map +1 -0
- package/dist/services/setup-token-reaper.d.ts +36 -0
- package/dist/services/setup-token-reaper.d.ts.map +1 -0
- package/dist/services/setup-token-reaper.js +38 -0
- package/dist/services/setup-token-reaper.js.map +1 -0
- package/dist/services/setup-token-reaper.test.d.ts +2 -0
- package/dist/services/setup-token-reaper.test.d.ts.map +1 -0
- package/dist/services/setup-token-reaper.test.js +123 -0
- package/dist/services/setup-token-reaper.test.js.map +1 -0
- package/dist/services/setup-token-session.d.ts +57 -45
- package/dist/services/setup-token-session.d.ts.map +1 -1
- package/dist/services/setup-token-session.js +118 -110
- package/dist/services/setup-token-session.js.map +1 -1
- package/dist/services/setup-token-session.test.js +88 -47
- package/dist/services/setup-token-session.test.js.map +1 -1
- package/dist/services/setup-token-transport-binding.d.ts +20 -12
- package/dist/services/setup-token-transport-binding.d.ts.map +1 -1
- package/dist/services/setup-token-transport-binding.js +59 -32
- package/dist/services/setup-token-transport-binding.js.map +1 -1
- package/dist/services/setup-token-transport-binding.test.js +50 -17
- package/dist/services/setup-token-transport-binding.test.js.map +1 -1
- package/dist/services/smoke-lab.d.ts +1 -1
- package/dist/services/stalled-review-decisions.d.ts +1 -1
- package/dist/services/status-cards.d.ts +168 -168
- package/dist/services/tool-access-policy.d.ts +2 -2
- package/dist/services/tool-gateway.d.ts +1 -1
- package/dist/services/work-products.d.ts +19 -0
- package/dist/services/work-products.d.ts.map +1 -1
- package/dist/services/work-products.js +50 -3
- package/dist/services/work-products.js.map +1 -1
- package/dist/services/workspace-git-operation-scheduler.test.js +10 -3
- package/dist/services/workspace-git-operation-scheduler.test.js.map +1 -1
- package/dist/services/workspace-instance-cleanup.d.ts +9 -0
- package/dist/services/workspace-instance-cleanup.d.ts.map +1 -1
- package/dist/services/workspace-instance-cleanup.js +29 -3
- package/dist/services/workspace-instance-cleanup.js.map +1 -1
- package/dist/services/workspace-login-handoff-issuer.d.ts +95 -0
- package/dist/services/workspace-login-handoff-issuer.d.ts.map +1 -0
- package/dist/services/workspace-login-handoff-issuer.js +147 -0
- package/dist/services/workspace-login-handoff-issuer.js.map +1 -0
- package/dist/services/workspace-operations.d.ts +4 -1
- package/dist/services/workspace-operations.d.ts.map +1 -1
- package/dist/services/workspace-operations.js +29 -15
- package/dist/services/workspace-operations.js.map +1 -1
- package/dist/services/workspace-readiness.d.ts +56 -0
- package/dist/services/workspace-readiness.d.ts.map +1 -0
- package/dist/services/workspace-readiness.js +250 -0
- package/dist/services/workspace-readiness.js.map +1 -0
- package/dist/services/workspace-realization.d.ts.map +1 -1
- package/dist/services/workspace-realization.js +5 -33
- package/dist/services/workspace-realization.js.map +1 -1
- package/dist/services/workspace-runtime-exposure.test.js +321 -12
- package/dist/services/workspace-runtime-exposure.test.js.map +1 -1
- package/dist/services/workspace-runtime-leases.d.ts.map +1 -1
- package/dist/services/workspace-runtime-leases.js +1 -1
- package/dist/services/workspace-runtime-leases.js.map +1 -1
- package/dist/services/workspace-runtime-read-model.d.ts +8 -8
- package/dist/services/workspace-runtime-read-model.test.js +20 -0
- package/dist/services/workspace-runtime-read-model.test.js.map +1 -1
- package/dist/services/workspace-runtime-ready-comment.test.js +1 -0
- package/dist/services/workspace-runtime-ready-comment.test.js.map +1 -1
- package/dist/services/workspace-runtime.d.ts +77 -4
- package/dist/services/workspace-runtime.d.ts.map +1 -1
- package/dist/services/workspace-runtime.js +1020 -126
- package/dist/services/workspace-runtime.js.map +1 -1
- package/dist/worktree-config.d.ts.map +1 -1
- package/dist/worktree-config.js +3 -76
- package/dist/worktree-config.js.map +1 -1
- package/dist/worktree-seed-manifest.d.ts +8 -0
- package/dist/worktree-seed-manifest.d.ts.map +1 -0
- package/dist/worktree-seed-manifest.js +47 -0
- package/dist/worktree-seed-manifest.js.map +1 -0
- package/package.json +34 -30
- package/skills/paperclip/SKILL.md +2 -0
- package/skills/paperclip/references/api-reference.md +44 -2
- package/ui-dist/assets/CompanyExport-DnEsO-St.js +4 -0
- package/ui-dist/assets/{abnfDiagram-N423BO3Z-BvgoV-u5.js → abnfDiagram-N423BO3Z-2ff8TsQ0.js} +1 -1
- package/ui-dist/assets/{arc-BInnUBUU.js → arc-B2AXsH34.js} +1 -1
- package/ui-dist/assets/architectureDiagram-T3A2C74G-BDxtKMxk.js +36 -0
- package/ui-dist/assets/{blockDiagram-VBNYF7ZC-D9kzAkLN.js → blockDiagram-VBNYF7ZC-BB8T5Mj5.js} +1 -1
- package/ui-dist/assets/{c4Diagram-5PPSVZJV-BwzsgV_0.js → c4Diagram-5PPSVZJV-lMo8qk-x.js} +1 -1
- package/ui-dist/assets/channel-DCTVZpyq.js +1 -0
- package/ui-dist/assets/{chunk-2GRJ4B5K-D2EQ9vrl.js → chunk-2GRJ4B5K-CsS7EB3G.js} +1 -1
- package/ui-dist/assets/{chunk-2Q5K7J3B-DOA_8fSd.js → chunk-2Q5K7J3B-DFyQPjoR.js} +1 -1
- package/ui-dist/assets/{chunk-5RXB4S5H-CT5ukRiT.js → chunk-5RXB4S5H-No2SHOQR.js} +1 -1
- package/ui-dist/assets/{chunk-5VM5RSS4-D2gOlkyB.js → chunk-5VM5RSS4-DdxQO7V9.js} +1 -1
- package/ui-dist/assets/{chunk-6Q2QTUOP-DUb6aG8c.js → chunk-6Q2QTUOP-gbHjh-aK.js} +1 -1
- package/ui-dist/assets/{chunk-GF5L2VYU-BPabG3Cx.js → chunk-GF5L2VYU-h-BBl6NY.js} +1 -1
- package/ui-dist/assets/{chunk-JWPE2WC7-scNfhlZz.js → chunk-JWPE2WC7-Q3pJdTz5.js} +1 -1
- package/ui-dist/assets/{chunk-KBJHAD2P-BcRAzRpq.js → chunk-KBJHAD2P-Ba8LGLSx.js} +1 -1
- package/ui-dist/assets/{chunk-RYQCIY6F-BiZ0-EGh.js → chunk-RYQCIY6F-9VcvykBo.js} +1 -1
- package/ui-dist/assets/{chunk-XXDRQBXY-lJULxFIE.js → chunk-XXDRQBXY-NVbjDH4W.js} +1 -1
- package/ui-dist/assets/classDiagram-JCYQIIEL-CzJ88u6h.js +1 -0
- package/ui-dist/assets/classDiagram-v2-OCEON4UE-CzJ88u6h.js +1 -0
- package/ui-dist/assets/cose-bilkent-JH36ORCC-Cdz4wtUh.js +1 -0
- package/ui-dist/assets/{cynefin-VYW2F7L2-B34jJY1x.js → cynefin-VYW2F7L2-MpzJkW5s.js} +1 -1
- package/ui-dist/assets/{cynefinDiagram-MW4NZA55-DQ8QK8JK.js → cynefinDiagram-MW4NZA55-_Nx8av7i.js} +1 -1
- package/ui-dist/assets/{dagre-VZM6K2ZE-B7lSKgxH.js → dagre-VZM6K2ZE-DcZTQ4Oh.js} +1 -1
- package/ui-dist/assets/{diagram-7IWD3JNH-B3hLAFGE.js → diagram-7IWD3JNH-UyLi2mee.js} +1 -1
- package/ui-dist/assets/{diagram-B4RE2ZJO-CH9Ro9e0.js → diagram-B4RE2ZJO-B6p0Ivqg.js} +1 -1
- package/ui-dist/assets/{diagram-LBJQPF4R-DdPVMii7.js → diagram-LBJQPF4R-C8u6pa97.js} +1 -1
- package/ui-dist/assets/{diagram-Q27KOJAE-f5VXswjc.js → diagram-Q27KOJAE-DbwyagW0.js} +1 -1
- package/ui-dist/assets/{diagram-UB23O5K3-DGqxixsR.js → diagram-UB23O5K3-Cn5BMEH7.js} +1 -1
- package/ui-dist/assets/{ebnfDiagram-BXEA7PRR-C-1klg_w.js → ebnfDiagram-BXEA7PRR-vE0IZma9.js} +1 -1
- package/ui-dist/assets/{erDiagram-JOGREHBK-Dt4qK4gv.js → erDiagram-JOGREHBK-3OZVIlVG.js} +1 -1
- package/ui-dist/assets/{flowDiagram-UKHOOZJN-9ZlrTuET.js → flowDiagram-UKHOOZJN-C94FiPyr.js} +1 -1
- package/ui-dist/assets/ganttDiagram-PKOTCBZU-DMVaPmF-.js +292 -0
- package/ui-dist/assets/{gitGraphDiagram-DS77QQ5N-HH2fSgad.js → gitGraphDiagram-DS77QQ5N-yeFtJ689.js} +1 -1
- package/ui-dist/assets/{index-Cm6iEYPt.js → index-B4ZF3vY8.js} +288 -224
- package/ui-dist/assets/{index-CHXG4GPL.js → index-Bi_vqkcQ.js} +1 -1
- package/ui-dist/assets/{index-Bc9g6q63.js → index-BjDGQg9-.js} +1 -1
- package/ui-dist/assets/{index-FHzrJ7iQ.js → index-BnpyUMTb.js} +1 -1
- package/ui-dist/assets/{index-C1mpWCcn.js → index-BoqQTVMA.js} +1 -1
- package/ui-dist/assets/index-Bq-Mr-4x.js +1 -0
- package/ui-dist/assets/{index-DceuCrr8.js → index-Brb2U7N4.js} +1 -1
- package/ui-dist/assets/{index-DQIrrn2L.js → index-BsBybVwH.js} +1 -1
- package/ui-dist/assets/{index-CQhaM6qd.js → index-C2iv4Wgu.js} +1 -1
- package/ui-dist/assets/{index-DV2FOgyD.js → index-CKxIu7uO.js} +1 -1
- package/ui-dist/assets/{index-DU4U1fuv.js → index-Cb4VGIwp.js} +1 -1
- package/ui-dist/assets/{index-B61ORkIb.js → index-ChpszwcO.js} +1 -1
- package/ui-dist/assets/{index-DlVBBF8o.js → index-CoQFdT8N.js} +1 -1
- package/ui-dist/assets/index-D6P8_f0W.css +1 -0
- package/ui-dist/assets/index-DKdmghUG.js +1 -0
- package/ui-dist/assets/{index-CVTL3aAL.js → index-DaBci7Bx.js} +1 -1
- package/ui-dist/assets/{index-diFs0CNC.js → index-DjYaNiXZ.js} +1 -1
- package/ui-dist/assets/{index-Bf7tyGxE.js → index-DxTBJl4h.js} +1 -1
- package/ui-dist/assets/{index-DsdVneqe.js → index-Dz3E8nn0.js} +1 -1
- package/ui-dist/assets/{index-DvFUXI-Q.js → index-J7dz_hap.js} +1 -1
- package/ui-dist/assets/{index-CLu3Tfpv.js → index-JMp2Gpnz.js} +1 -1
- package/ui-dist/assets/{index-CcRTJ93J.js → index-Kp6wavQt.js} +1 -1
- package/ui-dist/assets/{index-BvFx-4KW.js → index-LBhYZ0L4.js} +1 -1
- package/ui-dist/assets/{index-BbAhzCq8.js → index-c3C0P6l8.js} +4 -4
- package/ui-dist/assets/{index-BY5ITKmG.js → index-pBEPheTW.js} +1 -1
- package/ui-dist/assets/{infoDiagram-6WML65LV-2jai2fw-.js → infoDiagram-6WML65LV-BiL7jKLA.js} +1 -1
- package/ui-dist/assets/{ishikawaDiagram-WSZJBQD7-CUmGhmEb.js → ishikawaDiagram-WSZJBQD7-DYcQy41D.js} +1 -1
- package/ui-dist/assets/{journeyDiagram-NVQOT4AX-CGQuPDO1.js → journeyDiagram-NVQOT4AX-Bxva6JgA.js} +1 -1
- package/ui-dist/assets/{kanban-definition-27J2QSJJ-zgEPcbHl.js → kanban-definition-27J2QSJJ-B2HpN34Q.js} +1 -1
- package/ui-dist/assets/{linear-BVf5VtLS.js → linear-Dq8qSESw.js} +1 -1
- package/ui-dist/assets/{mermaid.core-D2TFkGfI.js → mermaid.core-Ikay8Cpl.js} +35 -35
- package/ui-dist/assets/{mindmap-definition-FAOFIHXS-xoAQ0Lb_.js → mindmap-definition-FAOFIHXS-C-SIdYSY.js} +1 -1
- package/ui-dist/assets/{pegDiagram-VL7TDLO6-CBR1PWLr.js → pegDiagram-VL7TDLO6-C7rIJ_13.js} +1 -1
- package/ui-dist/assets/{pieDiagram-7S7Q4E2Y-BMPnzK_e.js → pieDiagram-7S7Q4E2Y-3gx0a0ve.js} +1 -1
- package/ui-dist/assets/{quadrantDiagram-CIZ2JOQS-CPtVUPkR.js → quadrantDiagram-CIZ2JOQS-BiwM9QGv.js} +1 -1
- package/ui-dist/assets/{railroadDiagram-AXF67PYL-DC0lsZV1.js → railroadDiagram-AXF67PYL-rFS8XcFA.js} +1 -1
- package/ui-dist/assets/{requirementDiagram-LRYGKXZP-BF6k05SB.js → requirementDiagram-LRYGKXZP-CEAUDUTQ.js} +1 -1
- package/ui-dist/assets/{sankeyDiagram-W5VNT64P-CRN0ibiP.js → sankeyDiagram-W5VNT64P-B7anpjlM.js} +1 -1
- package/ui-dist/assets/{sequenceDiagram-SI44F4Z6-CQtTiPWm.js → sequenceDiagram-SI44F4Z6-CJEdJvm_.js} +1 -1
- package/ui-dist/assets/{sizeCapture-X5ZJPWSS-BdjuGZd1.js → sizeCapture-X5ZJPWSS-CU1Vm6c1.js} +1 -1
- package/ui-dist/assets/{stateDiagram-OKZ733FA-B99onxyh.js → stateDiagram-OKZ733FA-wxVV9WIi.js} +1 -1
- package/ui-dist/assets/stateDiagram-v2-UEYNNEHI-BIFLqlqR.js +1 -0
- package/ui-dist/assets/{swimlanes-SLNWSIFB-BIByPbrL.js → swimlanes-SLNWSIFB-Cd-C1Z_k.js} +2 -2
- package/ui-dist/assets/swimlanesDiagram-ULZ7WXOC-CoBROkkd.js +8 -0
- package/ui-dist/assets/{timeline-definition-Z64GVDOM-I1NgOcn9.js → timeline-definition-Z64GVDOM-SWngk4aR.js} +1 -1
- package/ui-dist/assets/{vennDiagram-T6HMQDX7-D6t2Njcl.js → vennDiagram-T6HMQDX7-DFdPUr36.js} +1 -1
- package/ui-dist/assets/{wardleyDiagram-T6FBY63Y-BiYKm9gh.js → wardleyDiagram-T6FBY63Y-C6IlrZ7t.js} +1 -1
- package/ui-dist/assets/{xychartDiagram-ELKLHX3M-BhwXKWIa.js → xychartDiagram-ELKLHX3M-BNm6hHGl.js} +1 -1
- package/ui-dist/index.html +2 -2
- package/ui-dist/assets/architectureDiagram-T3A2C74G-Dg4MziOm.js +0 -36
- package/ui-dist/assets/channel-qoSYbCn0.js +0 -1
- package/ui-dist/assets/classDiagram-JCYQIIEL-B24u1REs.js +0 -1
- package/ui-dist/assets/classDiagram-v2-OCEON4UE-B24u1REs.js +0 -1
- package/ui-dist/assets/cose-bilkent-JH36ORCC-Do8pe8JB.js +0 -1
- package/ui-dist/assets/ganttDiagram-PKOTCBZU-CE3lyvFq.js +0 -292
- package/ui-dist/assets/index-BHiUiToL.css +0 -1
- package/ui-dist/assets/index-hkanj4t6.js +0 -1
- package/ui-dist/assets/index-yRJnh4vx.js +0 -1
- package/ui-dist/assets/stateDiagram-v2-UEYNNEHI-bzFlYBZ1.js +0 -1
- package/ui-dist/assets/swimlanesDiagram-ULZ7WXOC-DgdkBnuK.js +0 -8
|
@@ -4,10 +4,12 @@ import { execFile as execFileCallback } from "node:child_process";
|
|
|
4
4
|
import { promisify } from "node:util";
|
|
5
5
|
import { createHash, randomUUID } from "node:crypto";
|
|
6
6
|
import { and, asc, desc, eq, getTableColumns, gt, gte, inArray, isNull, lt, lte, ne, notInArray, or, sql } from "drizzle-orm";
|
|
7
|
-
import { AGENT_DEFAULT_MAX_CONCURRENT_RUNS, ISSUE_CONTINUATION_SUMMARY_DOCUMENT_KEY, MODEL_PROFILE_KEYS, PROVIDER_QUOTA_MONITOR_SERVICE_NAME, envBindingSchema, } from "@paperclipai/shared";
|
|
7
|
+
import { AGENT_DEFAULT_MAX_CONCURRENT_RUNS, ISSUE_CONTINUATION_SUMMARY_DOCUMENT_KEY, ISSUE_DISPOSITION_REPAIR_RETRY_REASON, MODEL_PROFILE_KEYS, PROVIDER_QUOTA_MONITOR_SERVICE_NAME, envBindingSchema, } from "@paperclipai/shared";
|
|
8
8
|
import { agents, agentConfigRevisions, agentRuntimeState, agentTaskSessions, agentWakeupRequests, activityLog, approvals, companyMemberships, companySkillTestRuns, companySkillVersions, companySkills as companySkillsTable, companies, costEvents, documentAnnotationComments, documentAnnotationThreads, documentRevisions, environmentLeases, issueDocuments, executionWorkspaces, heartbeatRunEvents, heartbeatRuns, issueApprovals, issueComments, issuePlanDecompositions, issueRecoveryActions, issueRelations, issueThreadInteractions, issues, issueWorkProducts, projects, projectWorkspaces, routineRevisions, routineRuns, routines, toolMcpGateways, toolMcpGatewayTokens, toolConnections, toolProfiles, workspaceOperations, } from "@paperclipai/db";
|
|
9
9
|
import { conflict, HttpError, notFound } from "../errors.js";
|
|
10
|
-
import { getStartupTraceContext } from "../instrumentation.js";
|
|
10
|
+
import { getStartupTraceContext, getStartupTracer } from "../instrumentation.js";
|
|
11
|
+
import { createHostDuplexObservabilityRecorder } from "./duplex-observability-recorder.js";
|
|
12
|
+
import { incrementToolRuntimeMetricCounter } from "./tool-runtime-metrics.js";
|
|
11
13
|
import { logger } from "../middleware/logger.js";
|
|
12
14
|
import { createGitRemoteAuthProvider, describeGitAuthFailure, scrubGitCredentialText, } from "./git-credentials.js";
|
|
13
15
|
// Re-exported because heartbeat's workspace surface exposed the scrubber before the
|
|
@@ -31,10 +33,11 @@ import { buildHeartbeatRunStopMetadata, mergeHeartbeatRunStopMetadata, normalize
|
|
|
31
33
|
import { classifyRunLiveness, } from "./run-liveness.js";
|
|
32
34
|
import { ISSUE_NEW_INPUT_ACTIVITY_ACTIONS, ISSUE_PROGRESS_ACTIVITY_ACTIONS, ISSUE_REWAKE_LOOKBACK_MS, ISSUE_REWAKE_RUN_SAMPLE_LIMIT, evaluateIssueRewakeThrottle, isThrottleCandidateIssueRewake, } from "./issue-rewake-throttle.js";
|
|
33
35
|
import { logActivity, publishPluginDomainEvent } from "./activity-log.js";
|
|
34
|
-
import { buildWorkspaceReadyComment, buildWorkspaceReadyMetadata, buildWorkspaceReadyPresentation, cleanupExecutionWorkspaceArtifacts, ensureGitWorktreeBranchCoherent, ensurePersistedExecutionWorkspaceAvailable, ensureRuntimeServicesForRun, formatManagedGitWorktreeBranchInspection, inspectManagedGitWorktreeBranch, persistAdapterManagedRuntimeServices, realizeExecutionWorkspace, releaseRuntimeServicesForRun, sanitizeRuntimeServiceBaseEnv, } from "./workspace-runtime.js";
|
|
36
|
+
import { buildWorkspaceReadyComment, buildWorkspaceReadyMetadata, buildWorkspaceReadyPresentation, cleanupExecutionWorkspaceArtifacts, ensureGitWorktreeBranchCoherent, ensurePersistedExecutionWorkspaceAvailable, ensureRuntimeServicesForRun, formatManagedGitWorktreeBranchInspection, inspectManagedGitWorktreeBranch, persistAdapterManagedRuntimeServices, realizeExecutionWorkspace, releaseRuntimeServicesForRun, isUnresolvedWorkspaceBaseRefError, sanitizeRuntimeServiceBaseEnv, } from "./workspace-runtime.js";
|
|
35
37
|
import { readManagedWorktreeInstanceOwnership, WORKTREE_INSTANCE_ROOT_METADATA_KEY, } from "./workspace-instance-cleanup.js";
|
|
36
38
|
import { issueService } from "./issues.js";
|
|
37
39
|
import { projectService } from "./projects.js";
|
|
40
|
+
import { getEnvironmentDriverTraits } from "./environment-driver-traits.js";
|
|
38
41
|
import { authorizationService } from "./authorization.js";
|
|
39
42
|
import { createToolGatewayService } from "./tool-gateway.js";
|
|
40
43
|
import { toolAccessService } from "./tool-access.js";
|
|
@@ -45,6 +48,7 @@ import { ISSUE_TREE_CONTROL_INTERACTION_WAKE_REASONS, isVerifiedIssueTreeControl
|
|
|
45
48
|
import { continuationSummaryParksExecutor, getIssueContinuationSummaryDocument, refreshIssueContinuationSummary, } from "./issue-continuation-summary.js";
|
|
46
49
|
import { buildDocumentReviewContext, buildPlanReviewContext } from "./plan-review-context.js";
|
|
47
50
|
import { executionWorkspaceService, mergeExecutionWorkspaceConfig } from "./execution-workspaces.js";
|
|
51
|
+
import { GIT_BRANCH_OWNERSHIP_METADATA_KEY, GIT_BRANCH_OWNERSHIP_METADATA_VERSION, isRuntimeOwnedGitBranch, } from "./execution-workspace-branch-ownership.js";
|
|
48
52
|
import { workspaceOperationService } from "./workspace-operations.js";
|
|
49
53
|
import { isProcessGroupAlive, terminateLocalService } from "./local-service-supervisor.js";
|
|
50
54
|
import { HEARTBEAT_RUN_SCRATCH_MARKER, buildHeartbeatRunScratchEnv, cleanupHeartbeatRunScratch, prepareHeartbeatRunScratch, } from "./run-scratch.js";
|
|
@@ -56,12 +60,14 @@ import { isAutomaticRecoverySuppressedByPauseHold } from "./recovery/pause-hold-
|
|
|
56
60
|
import { buildConfigurationIncompleteRecoveryNoticeSeed, buildExecutionReviewParticipantRecoveryNoticeSeed, buildImmediateExecutionPathRecoveryNoticeSeed, buildWorkspaceValidationRecoveryNoticeSeed, } from "./recovery/stranded-notice.js";
|
|
57
61
|
import { recoveryAssigneeAdapterOverrides, withRecoveryModelProfileHint, } from "./recovery/model-profile-hint.js";
|
|
58
62
|
import { ACTIVE_RUN_OUTPUT_SUSPICION_THRESHOLD_MS as RECOVERY_ACTIVE_RUN_OUTPUT_SUSPICION_THRESHOLD_MS, recoveryService } from "./recovery/service.js";
|
|
63
|
+
import { collectDispositionRepairSourceState } from "./recovery/disposition-repair.js";
|
|
59
64
|
import { buildIssueReviewPathLostIdempotencyKey, decideIssueReviewPathRecovery, ISSUE_REVIEW_PATH_LOST_WAKE_REASON, isReviewPathRecoveryIdempotencyConflict, REVIEW_PATH_RECOVERY_INSTRUCTION, reviewPathConsumedRefFromRun, } from "./recovery/review-path-recovery.js";
|
|
60
65
|
import { productivityReviewService } from "./productivity-review.js";
|
|
61
66
|
import { resolveRequiredSuccessfulRunHandoffOnValidPath } from "./successful-run-handoff-state.js";
|
|
62
67
|
import { taskWatchdogService } from "./task-watchdogs.js";
|
|
63
68
|
import { withAgentStartLock } from "./agent-start-lock.js";
|
|
64
69
|
import { evaluateAgentInvokability, evaluateAgentInvokabilityFromDb, shouldCancelRunsForNonInvokableAgent, DIRECT_NON_INVOKABLE_STATUSES, } from "./agent-invokability.js";
|
|
70
|
+
import { isHeartbeatWakeOnDemandEnabled } from "./heartbeat-policy.js";
|
|
65
71
|
import { redactQuarantinedBodyForHigherTrust, sanitizeQuarantinedCommentForHigherTrust, } from "./source-trust.js";
|
|
66
72
|
import { redactCurrentUserText, redactCurrentUserValue, } from "../log-redaction.js";
|
|
67
73
|
import { redactEventPayload, redactSensitiveText } from "../redaction.js";
|
|
@@ -202,6 +208,14 @@ const WORKSPACE_VALIDATION_FAILURE_CODE = "workspace_validation_failed";
|
|
|
202
208
|
const WORKSPACE_VALIDATION_RECOVERY_CAUSE = "workspace_validation_failed";
|
|
203
209
|
const CONFIGURATION_INCOMPLETE_FAILURE_CODE = "configuration_incomplete";
|
|
204
210
|
const CONFIGURATION_INCOMPLETE_RECOVERY_CAUSE = "configuration_incomplete";
|
|
211
|
+
// Error codes that mark a pre-dispatch setup failure. The adapter process never
|
|
212
|
+
// started, so no agent could post an issue comment. The setup catch writes one
|
|
213
|
+
// of these codes when a failure happens before `adapter.execute`.
|
|
214
|
+
const PRE_ADAPTER_SETUP_FAILURE_CODES = new Set([
|
|
215
|
+
"setup_failed",
|
|
216
|
+
CONFIGURATION_INCOMPLETE_FAILURE_CODE,
|
|
217
|
+
WORKSPACE_VALIDATION_FAILURE_CODE,
|
|
218
|
+
]);
|
|
205
219
|
const EXECUTION_REVIEW_PARTICIPANT_RECOVERY_RETRY_REASON = "execution_review_participant_recovery";
|
|
206
220
|
const EXECUTION_REVIEW_PARTICIPANT_RECOVERY_WAKE_REASON = "execution_review_participant_recovery";
|
|
207
221
|
const EXECUTION_REVIEW_PARTICIPANT_RECOVERY_CAUSE = "execution_review_participant_recovery";
|
|
@@ -216,6 +230,7 @@ const GIT_SENSITIVE_LOCAL_ADAPTER_TYPES = new Set([
|
|
|
216
230
|
"gemini_local",
|
|
217
231
|
"grok_local",
|
|
218
232
|
"hermes_local",
|
|
233
|
+
"kimi_local",
|
|
219
234
|
"opencode_local",
|
|
220
235
|
"pi_local",
|
|
221
236
|
]);
|
|
@@ -268,6 +283,31 @@ export class ConfigurationIncompleteFailure extends Error {
|
|
|
268
283
|
this.resultJson = resultJson;
|
|
269
284
|
}
|
|
270
285
|
}
|
|
286
|
+
// Build the configuration-incomplete result payload for a workspace base ref
|
|
287
|
+
// that never resolved to a commit. The setup catch maps this to errorCode
|
|
288
|
+
// `configuration_incomplete`, so the recovery path routes it to a human owner
|
|
289
|
+
// instead of a dispatched-then-failed run. The `fingerprint` uses the canonical
|
|
290
|
+
// remote ref, not the operator spelling. Two equivalent spellings of one remote
|
|
291
|
+
// branch (`fix/foo` and `origin/fix/foo`) share one fingerprint, so a repeated
|
|
292
|
+
// failure reuses one active recovery action and does not reset the attempt
|
|
293
|
+
// count or post a duplicate notice. A different branch makes a new action.
|
|
294
|
+
function buildUnresolvedWorkspaceBaseRefResultJson(run, error) {
|
|
295
|
+
const context = parseObject(run.contextSnapshot);
|
|
296
|
+
return {
|
|
297
|
+
configurationIncomplete: {
|
|
298
|
+
reason: "workspace_base_ref_unresolved",
|
|
299
|
+
companyId: run.companyId,
|
|
300
|
+
agentId: run.agentId,
|
|
301
|
+
issueId: readNonEmptyString(context.issueId) ?? null,
|
|
302
|
+
projectId: readNonEmptyString(context.projectId) ?? null,
|
|
303
|
+
requestedRef: error.requestedRef,
|
|
304
|
+
attemptedRefs: error.attemptedRefs,
|
|
305
|
+
fetchError: error.fetchError,
|
|
306
|
+
fingerprint: `workspace_base_ref:${error.recoveryIdentityRef}`,
|
|
307
|
+
missingBindings: [],
|
|
308
|
+
},
|
|
309
|
+
};
|
|
310
|
+
}
|
|
271
311
|
// Pre-dispatch gate outcome: another running run currently holds the issue's
|
|
272
312
|
// shared project workspace. Not a failure — the run is parked as a bounded
|
|
273
313
|
// scheduled retry and re-attempted once the holder finishes, so two agents
|
|
@@ -450,6 +490,7 @@ const SESSIONED_LOCAL_ADAPTERS = new Set([
|
|
|
450
490
|
"cursor",
|
|
451
491
|
"gemini_local",
|
|
452
492
|
"hermes_local",
|
|
493
|
+
"kimi_local",
|
|
453
494
|
"opencode_local",
|
|
454
495
|
"pi_local",
|
|
455
496
|
]);
|
|
@@ -931,6 +972,12 @@ export function mergeExecutionWorkspaceMetadataForPersistence(input) {
|
|
|
931
972
|
source: input.source,
|
|
932
973
|
createdByRuntime: input.createdByRuntime,
|
|
933
974
|
};
|
|
975
|
+
if (input.strategyType === "git_worktree") {
|
|
976
|
+
base[GIT_BRANCH_OWNERSHIP_METADATA_KEY] = GIT_BRANCH_OWNERSHIP_METADATA_VERSION;
|
|
977
|
+
}
|
|
978
|
+
else {
|
|
979
|
+
delete base[GIT_BRANCH_OWNERSHIP_METADATA_KEY];
|
|
980
|
+
}
|
|
934
981
|
const existingSnapshot = parseObject(base.baseRefSnapshot);
|
|
935
982
|
if (typeof existingSnapshot.resolvedSha !== "string"
|
|
936
983
|
&& input.baseRefSha) {
|
|
@@ -953,6 +1000,9 @@ export function mergeExecutionWorkspaceMetadataForPersistence(input) {
|
|
|
953
1000
|
}
|
|
954
1001
|
return mergeExecutionWorkspaceConfig(base, input.configSnapshot);
|
|
955
1002
|
}
|
|
1003
|
+
export function resolveExecutionWorkspaceBranchOwnership(executionWorkspace) {
|
|
1004
|
+
return executionWorkspace.branchCreatedByRuntime;
|
|
1005
|
+
}
|
|
956
1006
|
export function stripWorkspaceRuntimeFromExecutionRunConfig(config) {
|
|
957
1007
|
const nextConfig = { ...config };
|
|
958
1008
|
delete nextConfig.workspaceRuntime;
|
|
@@ -1902,7 +1952,7 @@ export function isMultiProjectWorkspaceSyncEnabled(env = process.env) {
|
|
|
1902
1952
|
* treated as local.
|
|
1903
1953
|
*/
|
|
1904
1954
|
export function isRemoteExecutionEnvironmentDriver(driver) {
|
|
1905
|
-
return driver
|
|
1955
|
+
return getEnvironmentDriverTraits(driver)?.runsWorkspaceOffHost ?? false;
|
|
1906
1956
|
}
|
|
1907
1957
|
/**
|
|
1908
1958
|
* Environment flag (kill-switch, default ON) that gates whether a *remote* run stages the
|
|
@@ -1931,7 +1981,7 @@ export function isMultiProjectWorkspaceSyncRemoteEnabled(env = process.env) {
|
|
|
1931
1981
|
* confines each staged referenced tree.
|
|
1932
1982
|
*/
|
|
1933
1983
|
export function isConfinedRemoteStagingDriver(driver) {
|
|
1934
|
-
return driver
|
|
1984
|
+
return getEnvironmentDriverTraits(driver)?.confinesStagedProjects ?? false;
|
|
1935
1985
|
}
|
|
1936
1986
|
/**
|
|
1937
1987
|
* Upper bound on how many additional (mentioned) projects a single run may materialize
|
|
@@ -2195,6 +2245,9 @@ export function buildReferencedProjectRunObservability(input) {
|
|
|
2195
2245
|
referenced_project_failures: input.failures.map((failure) => ({
|
|
2196
2246
|
project_id: failure.projectId,
|
|
2197
2247
|
reason: failure.reason,
|
|
2248
|
+
// Carry the error only when the layer produced one, so an authorization or resolution drop
|
|
2249
|
+
// stays a two-field entry and a staging drop names its reason.
|
|
2250
|
+
...(failure.error !== undefined ? { error: failure.error } : {}),
|
|
2198
2251
|
})),
|
|
2199
2252
|
};
|
|
2200
2253
|
}
|
|
@@ -3040,7 +3093,16 @@ const EFFECTIVE_RUN_WORKSPACE_CONFIG_CATEGORIES = [
|
|
|
3040
3093
|
];
|
|
3041
3094
|
export function resolveExecutionWorkspaceReuseRequestForIssue(input) {
|
|
3042
3095
|
const requestedExecutionWorkspaceId = readNonEmptyString(input.issueExecutionWorkspaceId);
|
|
3043
|
-
|
|
3096
|
+
// An explicitly pinned existing branch outranks an inherited reuse_existing
|
|
3097
|
+
// binding: a persisted workspace on any other branch (or with no recorded
|
|
3098
|
+
// branch) is stale for this issue, so dispatch realizes the pinned branch
|
|
3099
|
+
// instead of restoring the mismatched workspace.
|
|
3100
|
+
const requestedExistingBranch = readNonEmptyString(input.requestedExistingBranch);
|
|
3101
|
+
const existingWorkspaceMatchesRequestedBranch = requestedExistingBranch === null ||
|
|
3102
|
+
readNonEmptyString(input.existingExecutionWorkspaceBranchName) === requestedExistingBranch;
|
|
3103
|
+
const requestedShouldReuseExisting = input.issueExecutionWorkspacePreference === "reuse_existing" &&
|
|
3104
|
+
requestedExecutionWorkspaceId !== null &&
|
|
3105
|
+
existingWorkspaceMatchesRequestedBranch;
|
|
3044
3106
|
return {
|
|
3045
3107
|
requestedExecutionWorkspaceId,
|
|
3046
3108
|
requestedShouldReuseExisting,
|
|
@@ -4799,6 +4861,7 @@ export function heartbeatService(db, options = {}) {
|
|
|
4799
4861
|
const envOrchestrator = environmentRunOrchestrator(db, {
|
|
4800
4862
|
pluginWorkerManager: options.pluginWorkerManager,
|
|
4801
4863
|
environmentRuntime,
|
|
4864
|
+
duplexAggregateByteLedger: options.duplexAggregateByteLedger,
|
|
4802
4865
|
});
|
|
4803
4866
|
const workspaceOperationsSvc = workspaceOperationService(db);
|
|
4804
4867
|
const liveRunExecutions = {
|
|
@@ -7424,6 +7487,21 @@ export function heartbeatService(db, options = {}) {
|
|
|
7424
7487
|
}
|
|
7425
7488
|
return { outcome: "not_applicable", queuedRun: null };
|
|
7426
7489
|
}
|
|
7490
|
+
// A pre-dispatch setup failure means the adapter process never started (for
|
|
7491
|
+
// example an unresolved workspace base ref). No agent could run, so no agent
|
|
7492
|
+
// could post an issue comment. A missing-comment retry cannot help and would
|
|
7493
|
+
// loop the identical pre-adapter failure, so mark the policy not_applicable
|
|
7494
|
+
// and queue nothing.
|
|
7495
|
+
if (run.errorCode != null && PRE_ADAPTER_SETUP_FAILURE_CODES.has(run.errorCode)) {
|
|
7496
|
+
if (run.issueCommentStatus !== "not_applicable") {
|
|
7497
|
+
await patchRunIssueCommentStatus(run.id, {
|
|
7498
|
+
issueCommentStatus: "not_applicable",
|
|
7499
|
+
issueCommentSatisfiedByCommentId: null,
|
|
7500
|
+
issueCommentRetryQueuedAt: null,
|
|
7501
|
+
});
|
|
7502
|
+
}
|
|
7503
|
+
return { outcome: "not_applicable", queuedRun: null };
|
|
7504
|
+
}
|
|
7427
7505
|
const postedComment = await findRunIssueComment(run.id, run.companyId, issueId);
|
|
7428
7506
|
if (postedComment) {
|
|
7429
7507
|
await patchRunIssueCommentStatus(run.id, {
|
|
@@ -8077,15 +8155,28 @@ export function heartbeatService(db, options = {}) {
|
|
|
8077
8155
|
},
|
|
8078
8156
|
};
|
|
8079
8157
|
}
|
|
8158
|
+
if (!isHeartbeatWakeOnDemandEnabled(agent)) {
|
|
8159
|
+
return {
|
|
8160
|
+
allowed: false,
|
|
8161
|
+
reason: "Scheduled retry suppressed because on-demand agent wakes are disabled",
|
|
8162
|
+
errorCode: "heartbeat_wake_on_demand_disabled",
|
|
8163
|
+
issueId,
|
|
8164
|
+
details: { agentId: agent.id },
|
|
8165
|
+
};
|
|
8166
|
+
}
|
|
8080
8167
|
if (!issueId)
|
|
8081
8168
|
return { allowed: true };
|
|
8082
8169
|
const issue = await db
|
|
8083
8170
|
.select({
|
|
8084
8171
|
id: issues.id,
|
|
8172
|
+
companyId: issues.companyId,
|
|
8085
8173
|
status: issues.status,
|
|
8086
8174
|
assigneeAgentId: issues.assigneeAgentId,
|
|
8175
|
+
assigneeUserId: issues.assigneeUserId,
|
|
8087
8176
|
executionRunId: issues.executionRunId,
|
|
8177
|
+
executionPolicy: issues.executionPolicy,
|
|
8088
8178
|
executionState: issues.executionState,
|
|
8179
|
+
monitorNextCheckAt: issues.monitorNextCheckAt,
|
|
8089
8180
|
})
|
|
8090
8181
|
.from(issues)
|
|
8091
8182
|
.where(and(eq(issues.id, issueId), eq(issues.companyId, run.companyId)))
|
|
@@ -8099,6 +8190,32 @@ export function heartbeatService(db, options = {}) {
|
|
|
8099
8190
|
details: { issueId },
|
|
8100
8191
|
};
|
|
8101
8192
|
}
|
|
8193
|
+
if (retryReason === ISSUE_DISPOSITION_REPAIR_RETRY_REASON) {
|
|
8194
|
+
const expectedFingerprint = readNonEmptyString(contextSnapshot.dispositionRepairFingerprint);
|
|
8195
|
+
const sourceState = await collectDispositionRepairSourceState(db, {
|
|
8196
|
+
issue,
|
|
8197
|
+
excludeRunId: run.id,
|
|
8198
|
+
excludeWakeupRequestId: run.wakeupRequestId,
|
|
8199
|
+
});
|
|
8200
|
+
if (!expectedFingerprint ||
|
|
8201
|
+
sourceState.fingerprint !== expectedFingerprint ||
|
|
8202
|
+
sourceState.hasActiveExecutionPath ||
|
|
8203
|
+
sourceState.hasDurableWaitingPath) {
|
|
8204
|
+
return {
|
|
8205
|
+
allowed: false,
|
|
8206
|
+
reason: "Scheduled disposition repair suppressed because the source state changed or gained a durable path",
|
|
8207
|
+
errorCode: "issue_disposition_repair_superseded",
|
|
8208
|
+
issueId,
|
|
8209
|
+
details: {
|
|
8210
|
+
issueId,
|
|
8211
|
+
expectedFingerprint,
|
|
8212
|
+
currentFingerprint: sourceState.fingerprint,
|
|
8213
|
+
hasActiveExecutionPath: sourceState.hasActiveExecutionPath,
|
|
8214
|
+
durablePathReason: sourceState.durablePathReason,
|
|
8215
|
+
},
|
|
8216
|
+
};
|
|
8217
|
+
}
|
|
8218
|
+
}
|
|
8102
8219
|
if (issue.assigneeAgentId !== run.agentId) {
|
|
8103
8220
|
if (!isNonAssigneeWorkspaceBusyRetry(retryReason, contextSnapshot)) {
|
|
8104
8221
|
return {
|
|
@@ -9196,7 +9313,7 @@ export function heartbeatService(db, options = {}) {
|
|
|
9196
9313
|
return {
|
|
9197
9314
|
enabled: asBoolean(heartbeat.enabled, false),
|
|
9198
9315
|
intervalSec: Math.max(0, asNumber(heartbeat.intervalSec, 0)),
|
|
9199
|
-
wakeOnDemand:
|
|
9316
|
+
wakeOnDemand: isHeartbeatWakeOnDemandEnabled(agent),
|
|
9200
9317
|
maxConcurrentRuns: normalizeMaxConcurrentRuns(heartbeat.maxConcurrentRuns),
|
|
9201
9318
|
skipTimerWhenNoActionableWork: asBoolean(heartbeat.skipTimerWhenNoActionableWork ??
|
|
9202
9319
|
heartbeat.requireActionableTimerWork ??
|
|
@@ -9624,9 +9741,19 @@ export function heartbeatService(db, options = {}) {
|
|
|
9624
9741
|
const reviewParticipant = reviewExecutionState?.currentParticipant ?? null;
|
|
9625
9742
|
const isCurrentReviewParticipant = reviewParticipant?.type === "agent" &&
|
|
9626
9743
|
reviewParticipant.agentId === run.agentId;
|
|
9744
|
+
const recoveryActionId = readNonEmptyString(context.recoveryActionId);
|
|
9745
|
+
const authorizedSourceScopedRecovery = wakeReason === "source_scoped_recovery_action" && recoveryActionId
|
|
9746
|
+
? await db
|
|
9747
|
+
.select({ id: issueRecoveryActions.id })
|
|
9748
|
+
.from(issueRecoveryActions)
|
|
9749
|
+
.where(and(eq(issueRecoveryActions.id, recoveryActionId), eq(issueRecoveryActions.companyId, run.companyId), eq(issueRecoveryActions.sourceIssueId, issue.id), eq(issueRecoveryActions.ownerAgentId, run.agentId), inArray(issueRecoveryActions.status, ["active", "escalated"])))
|
|
9750
|
+
.limit(1)
|
|
9751
|
+
.then((rows) => Boolean(rows[0]))
|
|
9752
|
+
: false;
|
|
9627
9753
|
if (issue.assigneeAgentId !== run.agentId &&
|
|
9628
9754
|
!isInteractionWake &&
|
|
9629
9755
|
!isCurrentReviewParticipant &&
|
|
9756
|
+
!authorizedSourceScopedRecovery &&
|
|
9630
9757
|
!isNonAssigneeWorkspaceBusyRetry(retryReason, context)) {
|
|
9631
9758
|
return {
|
|
9632
9759
|
stale: true,
|
|
@@ -10939,6 +11066,8 @@ export function heartbeatService(db, options = {}) {
|
|
|
10939
11066
|
issueExecutionWorkspaceId: requestedExecutionWorkspaceId,
|
|
10940
11067
|
issueExecutionWorkspacePreference: issueRef?.executionWorkspacePreference ?? null,
|
|
10941
11068
|
existingExecutionWorkspaceStatus: existingExecutionWorkspace?.status ?? null,
|
|
11069
|
+
requestedExistingBranch: issueExecutionWorkspaceSettings?.workspaceStrategy?.existingBranch ?? null,
|
|
11070
|
+
existingExecutionWorkspaceBranchName: existingExecutionWorkspace?.branchName ?? null,
|
|
10942
11071
|
});
|
|
10943
11072
|
const requestedShouldReuseExisting = workspaceReuseRequest.requestedShouldReuseExisting;
|
|
10944
11073
|
const reusableExistingExecutionWorkspace = workspaceReuseRequest.existingExecutionWorkspaceAvailable
|
|
@@ -11462,6 +11591,13 @@ export function heartbeatService(db, options = {}) {
|
|
|
11462
11591
|
name: agent.name,
|
|
11463
11592
|
companyId: agent.companyId,
|
|
11464
11593
|
},
|
|
11594
|
+
recordedBranchOwnership: existingExecutionWorkspace?.status !== "archived"
|
|
11595
|
+
&& existingExecutionWorkspace?.branchName
|
|
11596
|
+
? {
|
|
11597
|
+
branchName: existingExecutionWorkspace.branchName,
|
|
11598
|
+
createdByRuntime: isRuntimeOwnedGitBranch(existingExecutionWorkspace.metadata),
|
|
11599
|
+
}
|
|
11600
|
+
: null,
|
|
11465
11601
|
heartbeatRunId: run.id,
|
|
11466
11602
|
enableWorkspaceBranchReconcileForward: resolvedInstanceSettings.experimental.enableWorkspaceBranchReconcileForward,
|
|
11467
11603
|
enableWorkspaceDirtyQuarantineRepair: resolvedInstanceSettings.experimental.enableWorkspaceDirtyQuarantineRepair,
|
|
@@ -11477,7 +11613,11 @@ export function heartbeatService(db, options = {}) {
|
|
|
11477
11613
|
? reusableExistingExecutionWorkspace?.metadata ?? null
|
|
11478
11614
|
: null,
|
|
11479
11615
|
source: executionWorkspace.source,
|
|
11480
|
-
|
|
11616
|
+
// Branch ownership, not worktree freshness: attaching a worktree to a
|
|
11617
|
+
// pre-existing branch reports created=true but must never make terminal
|
|
11618
|
+
// cleanup delete that operator-owned branch.
|
|
11619
|
+
createdByRuntime: resolveExecutionWorkspaceBranchOwnership(executionWorkspace),
|
|
11620
|
+
strategyType: executionWorkspace.strategy,
|
|
11481
11621
|
configSnapshot,
|
|
11482
11622
|
shouldReuseExisting: resolvedWorkspaceReusePolicy.shouldRestoreExistingWorkspace,
|
|
11483
11623
|
shouldRefreshConfigSnapshot: resolvedWorkspaceReusePolicy.shouldRefreshWorkspaceConfigSnapshot,
|
|
@@ -11686,6 +11826,33 @@ export function heartbeatService(db, options = {}) {
|
|
|
11686
11826
|
lease: acquiredEnvironment.lease,
|
|
11687
11827
|
leaseContext: acquiredEnvironment.leaseContext,
|
|
11688
11828
|
};
|
|
11829
|
+
// The host duplex observability recorder for this run. It binds the fixed duplex
|
|
11830
|
+
// observability surface to real sinks: the spans to the OTel tracer, the
|
|
11831
|
+
// guarded counters to the tool-runtime metric store, and the transport event
|
|
11832
|
+
// to the run-event path. Each sink runs guarded and fire-and-forget, so a
|
|
11833
|
+
// telemetry failure never breaks the run. The orchestrator stamps it on the
|
|
11834
|
+
// sandbox target; a non-duplex run keeps the safe no-op default in the bridge.
|
|
11835
|
+
const duplexObservabilityRecorder = createHostDuplexObservabilityRecorder({
|
|
11836
|
+
tracer: getStartupTracer(),
|
|
11837
|
+
incrementCounter: (metric) => {
|
|
11838
|
+
void incrementToolRuntimeMetricCounter(db, {
|
|
11839
|
+
companyId: run.companyId,
|
|
11840
|
+
metric,
|
|
11841
|
+
}).catch(() => { });
|
|
11842
|
+
},
|
|
11843
|
+
emitTransportEvent: (event) => {
|
|
11844
|
+
void (async () => {
|
|
11845
|
+
const eventRun = run;
|
|
11846
|
+
const seq = await nextRunEventSeq(eventRun.id);
|
|
11847
|
+
await appendRunEvent(eventRun, seq, {
|
|
11848
|
+
eventType: event.name,
|
|
11849
|
+
stream: "system",
|
|
11850
|
+
level: event.dimensions.outcome === "error" ? "warn" : "info",
|
|
11851
|
+
payload: { ...event.dimensions },
|
|
11852
|
+
});
|
|
11853
|
+
})().catch(() => { });
|
|
11854
|
+
},
|
|
11855
|
+
});
|
|
11689
11856
|
const realizationResult = await envOrchestrator.realizeForRun({
|
|
11690
11857
|
environment: selectedEnvironment,
|
|
11691
11858
|
lease: activeEnvironmentLease.lease,
|
|
@@ -11696,6 +11863,7 @@ export function heartbeatService(db, options = {}) {
|
|
|
11696
11863
|
executionWorkspace,
|
|
11697
11864
|
effectiveExecutionWorkspaceMode,
|
|
11698
11865
|
persistedExecutionWorkspace,
|
|
11866
|
+
duplexObservabilityRecorder,
|
|
11699
11867
|
});
|
|
11700
11868
|
activeEnvironmentLease = {
|
|
11701
11869
|
...activeEnvironmentLease,
|
|
@@ -12508,6 +12676,7 @@ export function heartbeatService(db, options = {}) {
|
|
|
12508
12676
|
failures: referencedProjectStagingFailures.map((failure) => ({
|
|
12509
12677
|
projectId: failure.projectId,
|
|
12510
12678
|
reason: "staging",
|
|
12679
|
+
error: failure.error,
|
|
12511
12680
|
})),
|
|
12512
12681
|
});
|
|
12513
12682
|
logger.info({
|
|
@@ -12967,9 +13136,15 @@ export function heartbeatService(db, options = {}) {
|
|
|
12967
13136
|
// recovery path routes it to a human owner instead of looping retries.
|
|
12968
13137
|
const workspaceValidationSetupFailure = isWorkspaceValidationFailure(outerErr) ? outerErr : null;
|
|
12969
13138
|
const configurationIncompleteSetupFailure = isConfigurationIncompleteFailure(outerErr) ? outerErr : null;
|
|
13139
|
+
// A remote-only base ref that never resolved is a known pre-dispatch
|
|
13140
|
+
// configuration gap, not an opaque setup crash. Map it to the same
|
|
13141
|
+
// configuration-incomplete code so the recovery path routes it to a
|
|
13142
|
+
// human owner and bounds the repeat by its per-ref fingerprint.
|
|
13143
|
+
const unresolvedBaseRefSetupFailure = isUnresolvedWorkspaceBaseRefError(outerErr) ? outerErr : null;
|
|
12970
13144
|
const recordedResponsibleUserDenialCode = normalizeResponsibleUserDenialCode((await getRun(runId).catch(() => null))?.errorCode);
|
|
12971
13145
|
const setupFailureErrorCode = workspaceValidationSetupFailure?.code ??
|
|
12972
13146
|
configurationIncompleteSetupFailure?.code ??
|
|
13147
|
+
(unresolvedBaseRefSetupFailure ? CONFIGURATION_INCOMPLETE_FAILURE_CODE : null) ??
|
|
12973
13148
|
recordedResponsibleUserDenialCode ??
|
|
12974
13149
|
"setup_failed";
|
|
12975
13150
|
logger.error({ err: outerErr, runId }, "heartbeat execution setup failed");
|
|
@@ -12982,7 +13157,11 @@ export function heartbeatService(db, options = {}) {
|
|
|
12982
13157
|
resultJson: mergeRunStopMetadataForAgent(setupFailureAgent, "failed", {
|
|
12983
13158
|
errorCode: setupFailureErrorCode,
|
|
12984
13159
|
errorMessage: message,
|
|
12985
|
-
resultJson: workspaceValidationSetupFailure?.resultJson ??
|
|
13160
|
+
resultJson: workspaceValidationSetupFailure?.resultJson ??
|
|
13161
|
+
configurationIncompleteSetupFailure?.resultJson ??
|
|
13162
|
+
(unresolvedBaseRefSetupFailure
|
|
13163
|
+
? buildUnresolvedWorkspaceBaseRefResultJson(run, unresolvedBaseRefSetupFailure)
|
|
13164
|
+
: null),
|
|
12986
13165
|
}),
|
|
12987
13166
|
} : {}),
|
|
12988
13167
|
}).catch(() => ({ run: null, updated: false }));
|
|
@@ -13502,7 +13681,6 @@ export function heartbeatService(db, options = {}) {
|
|
|
13502
13681
|
previousStatus: issue.status,
|
|
13503
13682
|
notice: buildExecutionReviewParticipantRecoveryNoticeSeed(),
|
|
13504
13683
|
recoveryCause: EXECUTION_REVIEW_PARTICIPANT_RECOVERY_CAUSE,
|
|
13505
|
-
recoveryOwnerAgentId: currentParticipant.agentId,
|
|
13506
13684
|
};
|
|
13507
13685
|
}
|
|
13508
13686
|
const now = new Date();
|
|
@@ -13579,6 +13757,10 @@ export function heartbeatService(db, options = {}) {
|
|
|
13579
13757
|
!issue.assigneeUserId &&
|
|
13580
13758
|
issue.assigneeAgentId === run.agentId &&
|
|
13581
13759
|
(run.status === "failed" || run.status === "timed_out" || run.status === "cancelled");
|
|
13760
|
+
if (readNonEmptyString(parseObject(run.contextSnapshot).retryReason) ===
|
|
13761
|
+
ISSUE_DISPOSITION_REPAIR_RETRY_REASON) {
|
|
13762
|
+
return { kind: "released" };
|
|
13763
|
+
}
|
|
13582
13764
|
if (!issueNeedsImmediateRecovery) {
|
|
13583
13765
|
return { kind: "released" };
|
|
13584
13766
|
}
|
|
@@ -13729,7 +13911,6 @@ export function heartbeatService(db, options = {}) {
|
|
|
13729
13911
|
: promotionResult.recoveryCause === EXECUTION_REVIEW_PARTICIPANT_RECOVERY_CAUSE
|
|
13730
13912
|
? EXECUTION_REVIEW_PARTICIPANT_RECOVERY_CAUSE
|
|
13731
13913
|
: undefined,
|
|
13732
|
-
recoveryOwnerAgentId: promotionResult.recoveryOwnerAgentId,
|
|
13733
13914
|
});
|
|
13734
13915
|
return;
|
|
13735
13916
|
}
|