@paperclipai/server 2026.824.1 → 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
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { existsSync, lstatSync, readFileSync } from "node:fs";
|
|
2
2
|
import os from "node:os";
|
|
3
3
|
import path from "node:path";
|
|
4
|
+
import { hasVerifiedWorktreeSeedManifest } from "./worktree-seed-manifest.js";
|
|
4
5
|
function parseEnvFile(contents) {
|
|
5
6
|
const entries = {};
|
|
6
7
|
for (const rawLine of contents.split(/\r?\n/)) {
|
|
@@ -43,6 +44,10 @@ export function resolveWorktreeEnvFilePath(rootDir) {
|
|
|
43
44
|
}
|
|
44
45
|
export function isWorktreeSeedPending(rootDir) {
|
|
45
46
|
const markerDir = path.resolve(rootDir, ".paperclip");
|
|
47
|
+
const manifestPath = path.resolve(markerDir, "seed-manifest.json");
|
|
48
|
+
if (existsSync(manifestPath)) {
|
|
49
|
+
return !hasVerifiedWorktreeSeedManifest(manifestPath);
|
|
50
|
+
}
|
|
46
51
|
return existsSync(path.resolve(markerDir, "seed-pending"))
|
|
47
52
|
&& !existsSync(path.resolve(markerDir, "seed-complete"));
|
|
48
53
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dev-runner-worktree.js","sourceRoot":"","sources":["../src/dev-runner-worktree.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC9D,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"dev-runner-worktree.js","sourceRoot":"","sources":["../src/dev-runner-worktree.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { type DuplexAggregateCeilingOverrideRejectionReporter } from "@paperclipai/adapter-utils/duplex-aggregate-byte-ledger";
|
|
2
|
+
/**
|
|
3
|
+
* Resolve the aggregate duplex route byte ceiling from the raw operator override
|
|
4
|
+
* string. The host reads the override from
|
|
5
|
+
* PAPERCLIP_MAX_AGGREGATE_DUPLEX_ROUTE_BYTES.
|
|
6
|
+
*
|
|
7
|
+
* This helper distinguishes an absent variable from a present blank value. An
|
|
8
|
+
* absent variable is `undefined`. The helper then uses the documented default and
|
|
9
|
+
* does not report a rejection. A present variable is a string, even when the
|
|
10
|
+
* string holds only whitespace. The helper sends every present string through
|
|
11
|
+
* `Number`, so a blank or whitespace-only value becomes `0`. The numeric
|
|
12
|
+
* validation in {@link resolveDuplexAggregateCeilingBytes} rejects `0`, reports it
|
|
13
|
+
* through `onRejectedOverride`, and returns the safe default. So a present blank
|
|
14
|
+
* value is visible as invalid instead of silent as absent.
|
|
15
|
+
*
|
|
16
|
+
* `Number` ignores surrounding whitespace, so a valid value with surrounding
|
|
17
|
+
* spaces still parses. The reporter receives only the parsed number, never the raw
|
|
18
|
+
* string, so no operator-supplied text reaches a log line.
|
|
19
|
+
*/
|
|
20
|
+
export declare function resolveDuplexAggregateCeilingBytesFromEnv(rawOverride: string | undefined, onRejectedOverride?: DuplexAggregateCeilingOverrideRejectionReporter): number;
|
|
21
|
+
//# sourceMappingURL=duplex-aggregate-ceiling-env.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"duplex-aggregate-ceiling-env.d.ts","sourceRoot":"","sources":["../src/duplex-aggregate-ceiling-env.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,+CAA+C,EACrD,MAAM,yDAAyD,CAAC;AAEjE;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,yCAAyC,CACvD,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,kBAAkB,CAAC,EAAE,+CAA+C,GACnE,MAAM,CAKR"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { resolveDuplexAggregateCeilingBytes, } from "@paperclipai/adapter-utils/duplex-aggregate-byte-ledger";
|
|
2
|
+
/**
|
|
3
|
+
* Resolve the aggregate duplex route byte ceiling from the raw operator override
|
|
4
|
+
* string. The host reads the override from
|
|
5
|
+
* PAPERCLIP_MAX_AGGREGATE_DUPLEX_ROUTE_BYTES.
|
|
6
|
+
*
|
|
7
|
+
* This helper distinguishes an absent variable from a present blank value. An
|
|
8
|
+
* absent variable is `undefined`. The helper then uses the documented default and
|
|
9
|
+
* does not report a rejection. A present variable is a string, even when the
|
|
10
|
+
* string holds only whitespace. The helper sends every present string through
|
|
11
|
+
* `Number`, so a blank or whitespace-only value becomes `0`. The numeric
|
|
12
|
+
* validation in {@link resolveDuplexAggregateCeilingBytes} rejects `0`, reports it
|
|
13
|
+
* through `onRejectedOverride`, and returns the safe default. So a present blank
|
|
14
|
+
* value is visible as invalid instead of silent as absent.
|
|
15
|
+
*
|
|
16
|
+
* `Number` ignores surrounding whitespace, so a valid value with surrounding
|
|
17
|
+
* spaces still parses. The reporter receives only the parsed number, never the raw
|
|
18
|
+
* string, so no operator-supplied text reaches a log line.
|
|
19
|
+
*/
|
|
20
|
+
export function resolveDuplexAggregateCeilingBytesFromEnv(rawOverride, onRejectedOverride) {
|
|
21
|
+
return resolveDuplexAggregateCeilingBytes(rawOverride === undefined ? undefined : Number(rawOverride), onRejectedOverride);
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=duplex-aggregate-ceiling-env.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"duplex-aggregate-ceiling-env.js","sourceRoot":"","sources":["../src/duplex-aggregate-ceiling-env.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kCAAkC,GAEnC,MAAM,yDAAyD,CAAC;AAEjE;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,yCAAyC,CACvD,WAA+B,EAC/B,kBAAoE;IAEpE,OAAO,kCAAkC,CACvC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,EAC3D,kBAAkB,CACnB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export type EmbeddedPostgresExitListener = (code: number | null, signal: NodeJS.Signals | null) => void;
|
|
2
|
+
export interface SupervisedEmbeddedPostgres {
|
|
3
|
+
start(): Promise<void>;
|
|
4
|
+
stop(): Promise<void>;
|
|
5
|
+
process?: {
|
|
6
|
+
once(event: "exit", listener: EmbeddedPostgresExitListener): unknown;
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
export interface EmbeddedPostgresSupervisor {
|
|
10
|
+
current(): SupervisedEmbeddedPostgres;
|
|
11
|
+
shutdown(): Promise<void>;
|
|
12
|
+
waitForRecovery(): Promise<void>;
|
|
13
|
+
}
|
|
14
|
+
type Options = {
|
|
15
|
+
initialInstance: SupervisedEmbeddedPostgres;
|
|
16
|
+
createInstance: () => SupervisedEmbeddedPostgres;
|
|
17
|
+
beforeRestart?: (attempt: number) => Promise<void> | void;
|
|
18
|
+
restartDelaysMs?: number[];
|
|
19
|
+
delay?: (milliseconds: number) => Promise<void>;
|
|
20
|
+
onUnexpectedExit?: EmbeddedPostgresExitListener;
|
|
21
|
+
onRestartAttemptFailed?: (error: unknown, attempt: number) => void;
|
|
22
|
+
onRestarted?: (attempt: number) => void;
|
|
23
|
+
onRecoveryExhausted?: (error: unknown) => void;
|
|
24
|
+
};
|
|
25
|
+
export declare function createEmbeddedPostgresSupervisor(options: Options): EmbeddedPostgresSupervisor;
|
|
26
|
+
export {};
|
|
27
|
+
//# sourceMappingURL=embedded-postgres-supervisor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embedded-postgres-supervisor.d.ts","sourceRoot":"","sources":["../src/embedded-postgres-supervisor.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,4BAA4B,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,KAAK,IAAI,CAAC;AAExG,MAAM,WAAW,0BAA0B;IACzC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,4BAA4B,GAAG,OAAO,CAAA;KAAE,CAAC;CACpF;AAED,MAAM,WAAW,0BAA0B;IACzC,OAAO,IAAI,0BAA0B,CAAC;IACtC,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAClC;AAED,KAAK,OAAO,GAAG;IACb,eAAe,EAAE,0BAA0B,CAAC;IAC5C,cAAc,EAAE,MAAM,0BAA0B,CAAC;IACjD,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC1D,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,KAAK,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,gBAAgB,CAAC,EAAE,4BAA4B,CAAC;IAChD,sBAAsB,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACnE,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,mBAAmB,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CAChD,CAAC;AAIF,wBAAgB,gCAAgC,CAAC,OAAO,EAAE,OAAO,GAAG,0BAA0B,CA+D7F"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
const defaultDelay = (milliseconds) => new Promise((resolve) => setTimeout(resolve, milliseconds));
|
|
2
|
+
export function createEmbeddedPostgresSupervisor(options) {
|
|
3
|
+
const restartDelaysMs = options.restartDelaysMs ?? [0, 250, 1_000];
|
|
4
|
+
const wait = options.delay ?? defaultDelay;
|
|
5
|
+
let activeInstance = options.initialInstance;
|
|
6
|
+
let activeInstanceExited = false;
|
|
7
|
+
let shuttingDown = false;
|
|
8
|
+
let recoveryPromise = null;
|
|
9
|
+
const recover = async () => {
|
|
10
|
+
let lastError = new Error("Embedded PostgreSQL exited unexpectedly");
|
|
11
|
+
for (let index = 0; index < restartDelaysMs.length; index += 1) {
|
|
12
|
+
if (shuttingDown)
|
|
13
|
+
return;
|
|
14
|
+
const attempt = index + 1;
|
|
15
|
+
const delayMs = restartDelaysMs[index] ?? 0;
|
|
16
|
+
if (delayMs > 0)
|
|
17
|
+
await wait(delayMs);
|
|
18
|
+
if (shuttingDown)
|
|
19
|
+
return;
|
|
20
|
+
try {
|
|
21
|
+
await options.beforeRestart?.(attempt);
|
|
22
|
+
const replacement = options.createInstance();
|
|
23
|
+
await replacement.start();
|
|
24
|
+
if (shuttingDown) {
|
|
25
|
+
await replacement.stop();
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
activeInstance = replacement;
|
|
29
|
+
activeInstanceExited = false;
|
|
30
|
+
monitor(replacement);
|
|
31
|
+
options.onRestarted?.(attempt);
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
catch (error) {
|
|
35
|
+
lastError = error;
|
|
36
|
+
options.onRestartAttemptFailed?.(error, attempt);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
if (!shuttingDown)
|
|
40
|
+
options.onRecoveryExhausted?.(lastError);
|
|
41
|
+
};
|
|
42
|
+
const monitor = (instance) => {
|
|
43
|
+
const child = instance.process;
|
|
44
|
+
if (!child) {
|
|
45
|
+
options.onRecoveryExhausted?.(new Error("Embedded PostgreSQL started without a child process to monitor"));
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
child.once("exit", (code, signal) => {
|
|
49
|
+
if (activeInstance !== instance)
|
|
50
|
+
return;
|
|
51
|
+
activeInstanceExited = true;
|
|
52
|
+
if (shuttingDown)
|
|
53
|
+
return;
|
|
54
|
+
options.onUnexpectedExit?.(code, signal);
|
|
55
|
+
recoveryPromise = recover().finally(() => { recoveryPromise = null; });
|
|
56
|
+
});
|
|
57
|
+
};
|
|
58
|
+
monitor(activeInstance);
|
|
59
|
+
return {
|
|
60
|
+
current: () => activeInstance,
|
|
61
|
+
waitForRecovery: async () => { await recoveryPromise; },
|
|
62
|
+
shutdown: async () => {
|
|
63
|
+
if (shuttingDown)
|
|
64
|
+
return;
|
|
65
|
+
shuttingDown = true;
|
|
66
|
+
await recoveryPromise;
|
|
67
|
+
if (!activeInstanceExited)
|
|
68
|
+
await activeInstance.stop();
|
|
69
|
+
},
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=embedded-postgres-supervisor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embedded-postgres-supervisor.js","sourceRoot":"","sources":["../src/embedded-postgres-supervisor.ts"],"names":[],"mappings":"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"}
|
package/dist/errors.d.ts
CHANGED
|
@@ -8,6 +8,8 @@ export declare function unauthorized(message?: string): HttpError;
|
|
|
8
8
|
export declare function forbidden(message?: string, details?: unknown): HttpError;
|
|
9
9
|
export declare function notFound(message?: string, details?: unknown): HttpError;
|
|
10
10
|
export declare function conflict(message: string, details?: unknown): HttpError;
|
|
11
|
+
export declare function payloadTooLarge(message: string, details?: unknown): HttpError;
|
|
12
|
+
export declare function unsupportedMediaType(message: string, details?: unknown): HttpError;
|
|
11
13
|
export declare function unprocessable(message: string, details?: unknown): HttpError;
|
|
12
14
|
export declare function tooManyRequests(message?: string, details?: unknown): HttpError;
|
|
13
15
|
//# sourceMappingURL=errors.d.ts.map
|
package/dist/errors.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,SAAU,SAAQ,KAAK;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;gBAEN,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO;CAK/D;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,aAE5D;AAED,wBAAgB,YAAY,CAAC,OAAO,SAAiB,aAEpD;AAED,wBAAgB,SAAS,CAAC,OAAO,SAAc,EAAE,OAAO,CAAC,EAAE,OAAO,aAEjE;AAED,wBAAgB,QAAQ,CAAC,OAAO,SAAc,EAAE,OAAO,CAAC,EAAE,OAAO,aAEhE;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,aAE1D;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,aAE/D;AAED,wBAAgB,eAAe,CAAC,OAAO,SAAsB,EAAE,OAAO,CAAC,EAAE,OAAO,aAE/E"}
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,SAAU,SAAQ,KAAK;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;gBAEN,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO;CAK/D;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,aAE5D;AAED,wBAAgB,YAAY,CAAC,OAAO,SAAiB,aAEpD;AAED,wBAAgB,SAAS,CAAC,OAAO,SAAc,EAAE,OAAO,CAAC,EAAE,OAAO,aAEjE;AAED,wBAAgB,QAAQ,CAAC,OAAO,SAAc,EAAE,OAAO,CAAC,EAAE,OAAO,aAEhE;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,aAE1D;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,aAEjE;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,aAEtE;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,aAE/D;AAED,wBAAgB,eAAe,CAAC,OAAO,SAAsB,EAAE,OAAO,CAAC,EAAE,OAAO,aAE/E"}
|
package/dist/errors.js
CHANGED
|
@@ -22,6 +22,12 @@ export function notFound(message = "Not found", details) {
|
|
|
22
22
|
export function conflict(message, details) {
|
|
23
23
|
return new HttpError(409, message, details);
|
|
24
24
|
}
|
|
25
|
+
export function payloadTooLarge(message, details) {
|
|
26
|
+
return new HttpError(413, message, details);
|
|
27
|
+
}
|
|
28
|
+
export function unsupportedMediaType(message, details) {
|
|
29
|
+
return new HttpError(415, message, details);
|
|
30
|
+
}
|
|
25
31
|
export function unprocessable(message, details) {
|
|
26
32
|
return new HttpError(422, message, details);
|
|
27
33
|
}
|
package/dist/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,SAAU,SAAQ,KAAK;IAClC,MAAM,CAAS;IACf,OAAO,CAAW;IAElB,YAAY,MAAc,EAAE,OAAe,EAAE,OAAiB;QAC5D,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;CACF;AAED,MAAM,UAAU,UAAU,CAAC,OAAe,EAAE,OAAiB;IAC3D,OAAO,IAAI,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,OAAO,GAAG,cAAc;IACnD,OAAO,IAAI,SAAS,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,OAAO,GAAG,WAAW,EAAE,OAAiB;IAChE,OAAO,IAAI,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,OAAO,GAAG,WAAW,EAAE,OAAiB;IAC/D,OAAO,IAAI,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,OAAe,EAAE,OAAiB;IACzD,OAAO,IAAI,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAAe,EAAE,OAAiB;IAC9D,OAAO,IAAI,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAAO,GAAG,mBAAmB,EAAE,OAAiB;IAC9E,OAAO,IAAI,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAC9C,CAAC"}
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,SAAU,SAAQ,KAAK;IAClC,MAAM,CAAS;IACf,OAAO,CAAW;IAElB,YAAY,MAAc,EAAE,OAAe,EAAE,OAAiB;QAC5D,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;CACF;AAED,MAAM,UAAU,UAAU,CAAC,OAAe,EAAE,OAAiB;IAC3D,OAAO,IAAI,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,OAAO,GAAG,cAAc;IACnD,OAAO,IAAI,SAAS,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,OAAO,GAAG,WAAW,EAAE,OAAiB;IAChE,OAAO,IAAI,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,OAAO,GAAG,WAAW,EAAE,OAAiB;IAC/D,OAAO,IAAI,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,OAAe,EAAE,OAAiB;IACzD,OAAO,IAAI,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAAe,EAAE,OAAiB;IAChE,OAAO,IAAI,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,OAAe,EAAE,OAAiB;IACrE,OAAO,IAAI,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAAe,EAAE,OAAiB;IAC9D,OAAO,IAAI,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAAO,GAAG,mBAAmB,EAAE,OAAiB;IAC9E,OAAO,IAAI,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAC9C,CAAC"}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAyIzC,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,wBAAsB,WAAW,IAAI,OAAO,CAAC,aAAa,CAAC,CAinD1D"}
|
package/dist/index.js
CHANGED
|
@@ -10,6 +10,7 @@ import { resolve } from "node:path";
|
|
|
10
10
|
import { createInterface } from "node:readline/promises";
|
|
11
11
|
import { stdin, stdout } from "node:process";
|
|
12
12
|
import { pathToFileURL } from "node:url";
|
|
13
|
+
import { warnIfUnsupportedNodeVersion } from "@paperclipai/shared/node-version";
|
|
13
14
|
import { and, eq } from "drizzle-orm";
|
|
14
15
|
import { createDb, ensurePostgresDatabase, formatEmbeddedPostgresError, getPostgresDataDirectory, inspectMigrations, applyPendingMigrations, createEmbeddedPostgresLogBuffer, prepareEmbeddedPostgresNativeRuntime, reconcilePendingMigrationHistory, formatDatabaseBackupResult, runDatabaseBackup, authUsers, companies, companyMemberships, instanceUserRoles, } from "@paperclipai/db";
|
|
15
16
|
import detectPort from "detect-port";
|
|
@@ -26,12 +27,16 @@ import { createSecretProposalsService } from "./services/secret-proposals.js";
|
|
|
26
27
|
import { environmentRuntimeService } from "./services/environment-runtime.js";
|
|
27
28
|
import { createDbAdapterAuthSessionStore } from "./services/codex-device-login-service.js";
|
|
28
29
|
import { createCodexDeviceLoginReaper, createProductionLoginSessionReaperRuntime, } from "./services/codex-device-login-reaper.js";
|
|
30
|
+
import { createProductionSetupTokenReaper } from "./services/setup-token-reaper.js";
|
|
29
31
|
import { resolveWorktreeRunExecutionActivationState } from "./services/instance-settings.js";
|
|
30
32
|
import { parseAdapterRegistryEnv, reconcileAdapterAvailability, } from "./services/adapter-registry-bootstrap.js";
|
|
31
33
|
import { createFeedbackTraceShareClientFromConfig } from "./services/feedback-share-client.js";
|
|
32
34
|
import { buildRuntimeApiCandidateUrls, choosePrimaryRuntimeApiUrl } from "./runtime-api.js";
|
|
33
35
|
import { isLoopbackHost, rewriteLoopbackUrlPort } from "./url-utils.js";
|
|
34
36
|
import { createPluginWorkerManager } from "./services/plugin-worker-manager.js";
|
|
37
|
+
import { createDuplexAggregateByteLedgerTelemetry, DuplexAggregateByteLedger, } from "@paperclipai/adapter-utils/duplex-aggregate-byte-ledger";
|
|
38
|
+
import { resolveDuplexAggregateCeilingBytesFromEnv } from "./duplex-aggregate-ceiling-env.js";
|
|
39
|
+
import { DUPLEX_COUNTER_AGGREGATE_BYTE_ACCOUNTING_UNDERFLOW_TOTAL } from "@paperclipai/adapter-utils/duplex-observability";
|
|
35
40
|
import { createStorageServiceFromConfig } from "./storage/index.js";
|
|
36
41
|
import { printStartupBanner } from "./startup-banner.js";
|
|
37
42
|
import { getBoardClaimWarningUrl, initializeBoardClaimChallenge } from "./board-claim.js";
|
|
@@ -43,7 +48,9 @@ import { createDecisionRetentionNotifyOriginAgent, createDecisionWakeOriginAgent
|
|
|
43
48
|
import { coordinateHeartbeatSchedulerShutdown, finalizeServerShutdown, loadWithoutCoordinatedShutdownSignalHooks, } from "./shutdown.js";
|
|
44
49
|
import { systemdNotify } from "./services/systemd-notify.js";
|
|
45
50
|
import { flushInFlightRunLogMirrors } from "./services/run-log-store.js";
|
|
51
|
+
import { createEmbeddedPostgresSupervisor, } from "./embedded-postgres-supervisor.js";
|
|
46
52
|
export async function startServer() {
|
|
53
|
+
warnIfUnsupportedNodeVersion(process.versions.node, (message) => logger.warn(message));
|
|
47
54
|
// Tracing must be active (or have failed and logged) before the first DB
|
|
48
55
|
// connection or the HTTP server exists — see instrumentation.ts.
|
|
49
56
|
await instrumentationReady;
|
|
@@ -189,6 +196,7 @@ export async function startServer() {
|
|
|
189
196
|
let db;
|
|
190
197
|
let pluginMigrationDb;
|
|
191
198
|
let embeddedPostgres = null;
|
|
199
|
+
let embeddedPostgresSupervisor = null;
|
|
192
200
|
let embeddedPostgresStartedByThisProcess = false;
|
|
193
201
|
let migrationSummary = "skipped";
|
|
194
202
|
let activeDatabaseConnectionString;
|
|
@@ -304,7 +312,7 @@ export async function startServer() {
|
|
|
304
312
|
}
|
|
305
313
|
port = detectedPort;
|
|
306
314
|
logger.info(`Using embedded PostgreSQL because no DATABASE_URL set (dataDir=${dataDir}, port=${port})`);
|
|
307
|
-
|
|
315
|
+
const createEmbeddedPostgres = () => new EmbeddedPostgres({
|
|
308
316
|
databaseDir: dataDir,
|
|
309
317
|
user: "paperclip",
|
|
310
318
|
password: "paperclip",
|
|
@@ -314,6 +322,7 @@ export async function startServer() {
|
|
|
314
322
|
onLog: appendEmbeddedPostgresLog,
|
|
315
323
|
onError: appendEmbeddedPostgresLog,
|
|
316
324
|
});
|
|
325
|
+
embeddedPostgres = createEmbeddedPostgres();
|
|
317
326
|
if (!clusterAlreadyInitialized) {
|
|
318
327
|
try {
|
|
319
328
|
await embeddedPostgres.initialise();
|
|
@@ -344,6 +353,25 @@ export async function startServer() {
|
|
|
344
353
|
});
|
|
345
354
|
}
|
|
346
355
|
embeddedPostgresStartedByThisProcess = true;
|
|
356
|
+
embeddedPostgresSupervisor = createEmbeddedPostgresSupervisor({
|
|
357
|
+
initialInstance: embeddedPostgres,
|
|
358
|
+
createInstance: createEmbeddedPostgres,
|
|
359
|
+
beforeRestart: () => {
|
|
360
|
+
const runningPostgresPid = getRunningPid();
|
|
361
|
+
if (runningPostgresPid) {
|
|
362
|
+
throw new Error(`Refusing embedded PostgreSQL recovery because the data directory reports a live process (pid=${runningPostgresPid})`);
|
|
363
|
+
}
|
|
364
|
+
if (existsSync(postmasterPidFile))
|
|
365
|
+
rmSync(postmasterPidFile, { force: true });
|
|
366
|
+
},
|
|
367
|
+
onUnexpectedExit: (code, signal) => logger.error({ code, signal, recentLogs: logBuffer.getRecentLogs() }, "Embedded PostgreSQL exited unexpectedly; attempting recovery"),
|
|
368
|
+
onRestartAttemptFailed: (err, attempt) => logger.error({ err, attempt, recentLogs: logBuffer.getRecentLogs() }, "Embedded PostgreSQL recovery attempt failed"),
|
|
369
|
+
onRestarted: (attempt) => logger.info({ attempt, port }, "Embedded PostgreSQL recovered after unexpected exit"),
|
|
370
|
+
onRecoveryExhausted: (err) => {
|
|
371
|
+
logger.fatal({ err, recentLogs: logBuffer.getRecentLogs() }, "Embedded PostgreSQL recovery exhausted; stopping the unhealthy server");
|
|
372
|
+
process.kill(process.pid, "SIGTERM");
|
|
373
|
+
},
|
|
374
|
+
});
|
|
347
375
|
}
|
|
348
376
|
}
|
|
349
377
|
const embeddedAdminConnectionString = `postgres://paperclip:paperclip@127.0.0.1:${port}/postgres`;
|
|
@@ -534,9 +562,51 @@ export async function startServer() {
|
|
|
534
562
|
databaseBackupInFlight = false;
|
|
535
563
|
}
|
|
536
564
|
};
|
|
537
|
-
|
|
565
|
+
// The process-owned aggregate byte ledger for the sandbox duplex channel. One
|
|
566
|
+
// ledger per host process bounds the aggregate bytes that all live duplex routes
|
|
567
|
+
// retain. The route-count controller bounds only the route count, so without this
|
|
568
|
+
// ledger the per-route byte bounds multiply to many gigabytes at the maximum
|
|
569
|
+
// route count. The manager injects this same object into every worker handle, so
|
|
570
|
+
// one shared gauge bounds every host-side retention site.
|
|
571
|
+
//
|
|
572
|
+
// The optional operator override reads PAPERCLIP_MAX_AGGREGATE_DUPLEX_ROUTE_BYTES.
|
|
573
|
+
// An absent variable uses the documented default. A present invalid, blank,
|
|
574
|
+
// whitespace-only, non-finite, zero, negative, non-integer, unsafe, or
|
|
575
|
+
// over-maximum value does not fail startup. The host process is multi-tenant, so
|
|
576
|
+
// one invalid environment value must not brick the whole host. The helper sends
|
|
577
|
+
// the raw string to the resolver, so a present blank value is invalid, not
|
|
578
|
+
// absent. The resolver rejects the invalid override and returns the safe default.
|
|
579
|
+
// The reporter logs the rejection loudly at error, so the misconfiguration stays
|
|
580
|
+
// visible while the host stays up. The log line carries only the rejected numeric
|
|
581
|
+
// value, never the raw string.
|
|
582
|
+
const duplexAggregateCeilingBytes = resolveDuplexAggregateCeilingBytesFromEnv(process.env.PAPERCLIP_MAX_AGGREGATE_DUPLEX_ROUTE_BYTES, (rejectedValue) => {
|
|
583
|
+
logger.error({ rejectedValue }, "duplex aggregate byte ceiling override rejected; using the safe default");
|
|
584
|
+
});
|
|
585
|
+
// The server has no process metric pipeline yet, so the ledger telemetry maps to
|
|
586
|
+
// the structured logger. The gauge logs at debug. A reservation rejection logs at
|
|
587
|
+
// warn, because it marks an availability limit hit. An accounting-underflow defect
|
|
588
|
+
// logs at error, because it marks a real cleanup bug. Each record carries only the
|
|
589
|
+
// fixed metric name and the numeric value; no route, company, run, or payload
|
|
590
|
+
// value reaches a log line.
|
|
591
|
+
const duplexAggregateByteLedgerMetricSink = {
|
|
592
|
+
setGauge(name, value) {
|
|
593
|
+
logger.debug({ metric: name, value }, "duplex aggregate byte ledger gauge");
|
|
594
|
+
},
|
|
595
|
+
incrementCounter(name) {
|
|
596
|
+
if (name === DUPLEX_COUNTER_AGGREGATE_BYTE_ACCOUNTING_UNDERFLOW_TOTAL) {
|
|
597
|
+
logger.error({ metric: name }, "duplex aggregate byte ledger accounting underflow");
|
|
598
|
+
return;
|
|
599
|
+
}
|
|
600
|
+
logger.warn({ metric: name }, "duplex aggregate byte ledger reservation rejected");
|
|
601
|
+
},
|
|
602
|
+
};
|
|
603
|
+
const duplexAggregateByteLedger = new DuplexAggregateByteLedger({
|
|
604
|
+
ceilingBytes: duplexAggregateCeilingBytes,
|
|
605
|
+
telemetry: createDuplexAggregateByteLedgerTelemetry(duplexAggregateByteLedgerMetricSink),
|
|
606
|
+
});
|
|
607
|
+
const pluginWorkerManager = createPluginWorkerManager({ duplexAggregateByteLedger });
|
|
538
608
|
const heartbeat = config.heartbeatSchedulerEnabled
|
|
539
|
-
? heartbeatService(db, { pluginWorkerManager })
|
|
609
|
+
? heartbeatService(db, { pluginWorkerManager, duplexAggregateByteLedger })
|
|
540
610
|
: null;
|
|
541
611
|
const decisionServiceOptions = {
|
|
542
612
|
wakeOriginAgent: createDecisionWakeOriginAgent(heartbeat?.wakeup ?? null),
|
|
@@ -826,7 +896,9 @@ export async function startServer() {
|
|
|
826
896
|
const mergedPullRequestConfirmations = issueThreadInteractionService(db, {
|
|
827
897
|
wakeup: heartbeat.wakeup,
|
|
828
898
|
});
|
|
829
|
-
const terminalWorkspaces = executionWorkspaceService(db
|
|
899
|
+
const terminalWorkspaces = executionWorkspaceService(db, {
|
|
900
|
+
workspaceReaperCooldownDays: config.workspaceReaperCooldownDays,
|
|
901
|
+
});
|
|
830
902
|
const scheduleMergedPullRequestConfirmationSweep = () => {
|
|
831
903
|
if (heartbeatSchedulerStopped)
|
|
832
904
|
return;
|
|
@@ -859,7 +931,8 @@ export async function startServer() {
|
|
|
859
931
|
const skipped = result.skippedActiveRun
|
|
860
932
|
+ result.skippedNonTerminalTree
|
|
861
933
|
+ result.skippedUndelivered
|
|
862
|
-
+ result.skippedRace
|
|
934
|
+
+ result.skippedRace
|
|
935
|
+
+ result.skippedCooldown;
|
|
863
936
|
const nowMs = Date.now();
|
|
864
937
|
if (skipped > 0 && nowMs - lastTerminalWorkspaceSkipLogAt >= terminalWorkspaceSkipLogIntervalMs) {
|
|
865
938
|
lastTerminalWorkspaceSkipLogAt = nowMs;
|
|
@@ -901,6 +974,30 @@ export async function startServer() {
|
|
|
901
974
|
logger.error({ err }, "adapter login reaper sweep failed");
|
|
902
975
|
}));
|
|
903
976
|
};
|
|
977
|
+
// The restart-safe cleanup backstop for the Claude setup-token login flow. It
|
|
978
|
+
// runs on startup and on the scheduler interval, so a sandbox lease survives a
|
|
979
|
+
// server restart and a release failure. It releases any lease whose login
|
|
980
|
+
// session is terminal, past its deadline, or already consumed.
|
|
981
|
+
const setupTokenReaper = createProductionSetupTokenReaper({
|
|
982
|
+
db: db,
|
|
983
|
+
environmentRuntime: environmentRuntimeService(db, { pluginWorkerManager }),
|
|
984
|
+
log: (line) => logger.info(line),
|
|
985
|
+
});
|
|
986
|
+
const logSetupTokenReaperResult = (result) => {
|
|
987
|
+
if (result.released > 0 || result.failed > 0) {
|
|
988
|
+
logger.info(result, "setup-token login reaper released leases");
|
|
989
|
+
}
|
|
990
|
+
};
|
|
991
|
+
const scheduleSetupTokenReaperSweep = () => {
|
|
992
|
+
if (heartbeatSchedulerStopped)
|
|
993
|
+
return;
|
|
994
|
+
trackHeartbeatSchedulerWork(setupTokenReaper
|
|
995
|
+
.sweep()
|
|
996
|
+
.then(logSetupTokenReaperResult)
|
|
997
|
+
.catch((err) => {
|
|
998
|
+
logger.error({ err }, "setup-token login reaper sweep failed");
|
|
999
|
+
}));
|
|
1000
|
+
};
|
|
904
1001
|
const tools = toolAccessService(db, {
|
|
905
1002
|
deploymentMode: config.deploymentMode,
|
|
906
1003
|
deploymentExposure: config.deploymentExposure,
|
|
@@ -1001,6 +1098,14 @@ export async function startServer() {
|
|
|
1001
1098
|
.catch((err) => {
|
|
1002
1099
|
logger.error({ err }, "startup adapter login reaper sweep failed");
|
|
1003
1100
|
});
|
|
1101
|
+
// Run the setup-token login reaper once at startup, so a login sandbox lease
|
|
1102
|
+
// that outlived a server restart releases before timer ticks start.
|
|
1103
|
+
await setupTokenReaper
|
|
1104
|
+
.sweep()
|
|
1105
|
+
.then(logSetupTokenReaperResult)
|
|
1106
|
+
.catch((err) => {
|
|
1107
|
+
logger.error({ err }, "startup setup-token login reaper sweep failed");
|
|
1108
|
+
});
|
|
1004
1109
|
// Retry any orphan sandbox teardown left by a failed acquire before a server
|
|
1005
1110
|
// restart, so a leaked sandbox does not stay allocated across the restart.
|
|
1006
1111
|
await runEnvironmentLeaseCleanupSweep(0);
|
|
@@ -1059,6 +1164,7 @@ export async function startServer() {
|
|
|
1059
1164
|
scheduleMergedPullRequestConfirmationSweep();
|
|
1060
1165
|
scheduleTerminalWorkspaceSweep();
|
|
1061
1166
|
scheduleAdapterLoginReaperSweep();
|
|
1167
|
+
scheduleSetupTokenReaperSweep();
|
|
1062
1168
|
scheduleEnvironmentLeaseCleanupSweep();
|
|
1063
1169
|
if (heartbeatSchedulerStopped)
|
|
1064
1170
|
return;
|
|
@@ -1341,7 +1447,9 @@ export async function startServer() {
|
|
|
1341
1447
|
}
|
|
1342
1448
|
const appShutdown = app.locals
|
|
1343
1449
|
?.paperclipShutdown;
|
|
1344
|
-
const
|
|
1450
|
+
const stopEmbeddedPostgres = embeddedPostgres && embeddedPostgresStartedByThisProcess
|
|
1451
|
+
? () => embeddedPostgresSupervisor?.shutdown() ?? embeddedPostgres.stop()
|
|
1452
|
+
: null;
|
|
1345
1453
|
// Await the ordered application teardown before the process exits. A live
|
|
1346
1454
|
// setup-token login session must stop and release its sandbox lease before
|
|
1347
1455
|
// the database and the provider stop, so an orderly shutdown never leaves a
|
|
@@ -1349,7 +1457,7 @@ export async function startServer() {
|
|
|
1349
1457
|
await finalizeServerShutdown({
|
|
1350
1458
|
signal,
|
|
1351
1459
|
shutdownAppServices: appShutdown,
|
|
1352
|
-
stopEmbeddedPostgres
|
|
1460
|
+
stopEmbeddedPostgres,
|
|
1353
1461
|
shutdownInstrumentation,
|
|
1354
1462
|
log: logger,
|
|
1355
1463
|
});
|