@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
package/dist/routes/openapi.js
CHANGED
|
@@ -28,7 +28,7 @@ upsertSidebarOrderPreferenceSchema,
|
|
|
28
28
|
// Execution workspaces
|
|
29
29
|
reconcileExecutionWorkspaceBranchSchema, updateExecutionWorkspaceSchema, workspaceOverviewQuerySchema, workspaceRuntimeControlTargetSchema,
|
|
30
30
|
// Environments
|
|
31
|
-
createEnvironmentSchema, cancelEnvironmentCustomImageSetupSessionSchema, createEnvironmentCustomImageTerminalSessionTokenSchema, environmentCustomImageSetupSessionSchema, environmentCustomImageTerminalSessionTokenSchema, environmentCustomImageTemplateSchema, finishEnvironmentCustomImageSetupSessionSchema, updateEnvironmentSchema, probeEnvironmentConfigSchema, startEnvironmentCustomImageSetupSessionSchema,
|
|
31
|
+
createEnvironmentSchema, cancelEnvironmentCustomImageSetupSessionSchema, createEnvironmentCustomImageTerminalSessionTokenSchema, environmentCustomImageSetupSessionSchema, environmentCustomImageTerminalSessionTokenSchema, environmentCustomImageTemplateSchema, finishEnvironmentCustomImageSetupSessionSchema, relinkEnvironmentCustomImageTemplateSchema, updateEnvironmentSchema, probeEnvironmentConfigSchema, startEnvironmentCustomImageSetupSessionSchema,
|
|
32
32
|
// Company skills
|
|
33
33
|
companySkillCreateSchema, companySkillFileDeleteSchema, companySkillFileUpdateSchema, companySkillImportSchema, companySkillProjectBrowseRequestSchema, companySkillProjectBrowseResultSchema, companySkillProjectScanRequestSchema, companySkillProjectScanResultSchema, companySkillRenameResultSchema, companySkillRenameSchema, companySkillTestInputCreateSchema, companySkillTestInputUpdateSchema, companySkillTestRunCreateSchema, companySkillTestRunListQuerySchema, companySkillTestRunTemplateCreateSchema, companySkillTestRunTemplateUpdateSchema, evaluateSkillPolicySchema, replaceSkillPolicySchema, updateInboxAgentPolicySchema,
|
|
34
34
|
// Issue tree
|
|
@@ -54,141 +54,173 @@ createSecretProviderConfigSchema, updateSecretProviderConfigSchema, secretProvid
|
|
|
54
54
|
// Tool access
|
|
55
55
|
connectToolAppSchema, createToolApplicationSchema, updateToolApplicationSchema, createToolConnectionSchema, connectionTokenRequestSchema, startConnectionAuthorizationSchema, createToolStdioCommandTemplateSchema, disableToolStdioCommandTemplateSchema, finishToolAppSchema, reconnectToolAppSchema, updateToolConnectionSchema, putToolConnectionInstallsSchema, toolConnectionTestCallSchema, createToolPolicySchema, duplicateToolPolicySchema, createToolProfileBindingForProfileSchema, createToolProfileEntryForProfileSchema, createToolProfileWithEntriesSchema, deleteToolProfileSchema, duplicateToolProfileSchema, reorderToolPoliciesSchema, reviewToolProfileNewToolsSchema, updateToolPolicySchema, updateToolProfileEntrySchema, updateToolProfileWithEntriesSchema, createToolTrustRuleFromActionRequestSchema, revokeToolTrustRuleSchema, unbindToolProfileBindingSchema, importMcpJsonSchema, toolPolicyTestRequestSchema, createToolMcpGatewaySchema, startClaudeSetupTokenSessionRequestSchema, submitBrowserCodeRequestSchema, claudeSetupTokenSessionResponseSchema, claudeSetupTokenSessionPromptSchema, claudeSetupTokenSessionOwnerResponseSchema, claudeSetupTokenCompletionResponseSchema, claudeOAuthTokenStatusResponseSchema, } from "@paperclipai/shared";
|
|
56
56
|
import { COMPANY_IMPORT_TRANSFERS_API_PATH, companyImportTransferDeclarationSchema, } from "@paperclipai/shared/company-import-transfer";
|
|
57
|
-
const
|
|
57
|
+
const zodDef = (schema) => schema._def;
|
|
58
|
+
const zodTypeName = (schema) => zodDef(schema).type;
|
|
58
59
|
function unwrapSchema(schema) {
|
|
59
|
-
const
|
|
60
|
-
if (
|
|
61
|
-
return unwrapSchema(
|
|
60
|
+
const def = zodDef(schema);
|
|
61
|
+
if (def.type === "optional" || def.type === "default" || def.type === "catch") {
|
|
62
|
+
return unwrapSchema(def.innerType);
|
|
62
63
|
}
|
|
63
|
-
|
|
64
|
-
|
|
64
|
+
// A `.transform()` or `.pipe()` becomes a pipe. Read the input schema so the
|
|
65
|
+
// published contract describes the value a client sends.
|
|
66
|
+
if (def.type === "pipe") {
|
|
67
|
+
return unwrapSchema(def.in);
|
|
65
68
|
}
|
|
66
69
|
return schema;
|
|
67
70
|
}
|
|
68
71
|
function isOptionalSchema(schema) {
|
|
69
|
-
const
|
|
70
|
-
if (
|
|
72
|
+
const def = zodDef(schema);
|
|
73
|
+
if (def.type === "optional" || def.type === "default" || def.type === "catch") {
|
|
71
74
|
return true;
|
|
72
75
|
}
|
|
73
|
-
if (
|
|
74
|
-
return isOptionalSchema(
|
|
76
|
+
if (def.type === "pipe") {
|
|
77
|
+
return isOptionalSchema(def.in);
|
|
75
78
|
}
|
|
76
|
-
if (
|
|
77
|
-
return isOptionalSchema(
|
|
79
|
+
if (def.type === "nullable") {
|
|
80
|
+
return isOptionalSchema(def.innerType);
|
|
78
81
|
}
|
|
79
82
|
return false;
|
|
80
83
|
}
|
|
84
|
+
// Zod 4 stores each check as an object with a `_zod.def` that carries a `check`
|
|
85
|
+
// name and the check members. Read that def to describe the constraint.
|
|
86
|
+
function checkDef(check) {
|
|
87
|
+
return check._zod?.def;
|
|
88
|
+
}
|
|
81
89
|
function applyStringChecks(jsonSchema, checks) {
|
|
82
90
|
for (const check of checks) {
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
91
|
+
const def = checkDef(check);
|
|
92
|
+
if (!def)
|
|
93
|
+
continue;
|
|
94
|
+
if (def.check === "min_length")
|
|
95
|
+
jsonSchema.minLength = def.minimum;
|
|
96
|
+
else if (def.check === "max_length")
|
|
97
|
+
jsonSchema.maxLength = def.maximum;
|
|
98
|
+
else if (def.check === "string_format") {
|
|
99
|
+
if (def.format === "email")
|
|
100
|
+
jsonSchema.format = "email";
|
|
101
|
+
else if (def.format === "url")
|
|
102
|
+
jsonSchema.format = "uri";
|
|
103
|
+
// Zod 3 `.uuid()` maps to `.guid()` in zod 4 to keep the loose UUID
|
|
104
|
+
// format. Publish both as the OpenAPI `uuid` format so the spec does not
|
|
105
|
+
// change.
|
|
106
|
+
else if (def.format === "uuid" || def.format === "guid")
|
|
107
|
+
jsonSchema.format = "uuid";
|
|
108
|
+
else if (def.format === "datetime")
|
|
109
|
+
jsonSchema.format = "date-time";
|
|
110
|
+
// Zod 4 stores a `.regex()` pattern as a `RegExp`; publish its source.
|
|
111
|
+
else if (def.format === "regex") {
|
|
112
|
+
if (def.pattern instanceof RegExp)
|
|
113
|
+
jsonSchema.pattern = def.pattern.source;
|
|
114
|
+
else if (typeof def.pattern === "string")
|
|
115
|
+
jsonSchema.pattern = def.pattern;
|
|
116
|
+
}
|
|
97
117
|
}
|
|
98
118
|
}
|
|
99
119
|
}
|
|
100
120
|
function applyNumberChecks(jsonSchema, checks) {
|
|
101
121
|
for (const check of checks) {
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
122
|
+
const def = checkDef(check);
|
|
123
|
+
if (!def)
|
|
124
|
+
continue;
|
|
125
|
+
// `.int()` records a number-format check such as `safeint`.
|
|
126
|
+
if (def.check === "number_format") {
|
|
127
|
+
if (typeof def.format === "string" && def.format.includes("int")) {
|
|
128
|
+
jsonSchema.type = "integer";
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
else if (def.check === "greater_than") {
|
|
132
|
+
jsonSchema.minimum = def.value;
|
|
133
|
+
if (!def.inclusive)
|
|
107
134
|
jsonSchema.exclusiveMinimum = true;
|
|
108
135
|
}
|
|
109
|
-
if (check
|
|
110
|
-
jsonSchema.maximum =
|
|
111
|
-
if (!
|
|
136
|
+
else if (def.check === "less_than") {
|
|
137
|
+
jsonSchema.maximum = def.value;
|
|
138
|
+
if (!def.inclusive)
|
|
112
139
|
jsonSchema.exclusiveMaximum = true;
|
|
113
140
|
}
|
|
114
141
|
}
|
|
115
142
|
}
|
|
116
143
|
function zodToOpenApiSchema(schema) {
|
|
117
144
|
const unwrapped = unwrapSchema(schema);
|
|
118
|
-
const
|
|
119
|
-
|
|
145
|
+
const def = zodDef(unwrapped);
|
|
146
|
+
const typeName = def.type;
|
|
147
|
+
if (typeName === "string") {
|
|
120
148
|
const jsonSchema = { type: "string" };
|
|
121
|
-
applyStringChecks(jsonSchema,
|
|
149
|
+
applyStringChecks(jsonSchema, def.checks ?? []);
|
|
122
150
|
return jsonSchema;
|
|
123
151
|
}
|
|
124
|
-
if (typeName === "
|
|
152
|
+
if (typeName === "number") {
|
|
125
153
|
const jsonSchema = { type: "number" };
|
|
126
|
-
applyNumberChecks(jsonSchema,
|
|
154
|
+
applyNumberChecks(jsonSchema, def.checks ?? []);
|
|
127
155
|
return jsonSchema;
|
|
128
156
|
}
|
|
129
|
-
if (typeName === "
|
|
157
|
+
if (typeName === "boolean")
|
|
130
158
|
return { type: "boolean" };
|
|
131
|
-
if (typeName === "
|
|
159
|
+
if (typeName === "date")
|
|
132
160
|
return { type: "string", format: "date-time" };
|
|
133
|
-
if (typeName === "
|
|
161
|
+
if (typeName === "any" || typeName === "unknown")
|
|
134
162
|
return {};
|
|
135
|
-
if (typeName === "
|
|
136
|
-
const
|
|
137
|
-
return { type: typeof
|
|
138
|
-
}
|
|
139
|
-
if (typeName === "ZodEnum") {
|
|
140
|
-
return { type: "string", enum: unwrapped._def.values };
|
|
163
|
+
if (typeName === "literal") {
|
|
164
|
+
const values = def.values;
|
|
165
|
+
return { type: typeof values[0], enum: values };
|
|
141
166
|
}
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
167
|
+
// Zod 4 merges string enums and native enums into one `enum` type and stores
|
|
168
|
+
// the members on `entries`. A pure string enum keeps `type: "string"`; a
|
|
169
|
+
// native enum can hold numbers, so it publishes the values without a type.
|
|
170
|
+
if (typeName === "enum") {
|
|
171
|
+
const values = Array.from(new Set(Object.values(def.entries).filter((value) => typeof value === "string" || typeof value === "number")));
|
|
172
|
+
if (values.every((value) => typeof value === "string")) {
|
|
173
|
+
return { type: "string", enum: values };
|
|
174
|
+
}
|
|
175
|
+
return { enum: values };
|
|
145
176
|
}
|
|
146
|
-
if (typeName === "
|
|
147
|
-
return { type: "array", items: zodToOpenApiSchema(
|
|
177
|
+
if (typeName === "array") {
|
|
178
|
+
return { type: "array", items: zodToOpenApiSchema(def.element) };
|
|
148
179
|
}
|
|
149
|
-
if (typeName === "
|
|
180
|
+
if (typeName === "record") {
|
|
150
181
|
return {
|
|
151
182
|
type: "object",
|
|
152
|
-
additionalProperties: zodToOpenApiSchema(
|
|
183
|
+
additionalProperties: zodToOpenApiSchema(def.valueType),
|
|
153
184
|
};
|
|
154
185
|
}
|
|
155
|
-
if (typeName === "
|
|
156
|
-
return { ...zodToOpenApiSchema(
|
|
157
|
-
}
|
|
158
|
-
if (typeName === "ZodUnion") {
|
|
159
|
-
return { oneOf: unwrapped._def.options.map((option) => zodToOpenApiSchema(option)) };
|
|
186
|
+
if (typeName === "nullable") {
|
|
187
|
+
return { ...zodToOpenApiSchema(def.innerType), nullable: true };
|
|
160
188
|
}
|
|
161
|
-
|
|
189
|
+
// Zod 4 represents a plain union and a discriminated union as one `union`
|
|
190
|
+
// type with the members on `options`.
|
|
191
|
+
if (typeName === "union") {
|
|
162
192
|
return {
|
|
163
|
-
oneOf:
|
|
193
|
+
oneOf: def.options.map((option) => zodToOpenApiSchema(option)),
|
|
164
194
|
};
|
|
165
195
|
}
|
|
166
|
-
if (typeName === "
|
|
196
|
+
if (typeName === "intersection") {
|
|
167
197
|
return {
|
|
168
198
|
allOf: [
|
|
169
|
-
zodToOpenApiSchema(
|
|
170
|
-
zodToOpenApiSchema(
|
|
199
|
+
zodToOpenApiSchema(def.left),
|
|
200
|
+
zodToOpenApiSchema(def.right),
|
|
171
201
|
],
|
|
172
202
|
};
|
|
173
203
|
}
|
|
174
|
-
if (typeName === "
|
|
175
|
-
const shape =
|
|
204
|
+
if (typeName === "object") {
|
|
205
|
+
const shape = def.shape;
|
|
176
206
|
const properties = {};
|
|
177
207
|
const required = [];
|
|
178
208
|
for (const [key, value] of Object.entries(shape)) {
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
if (!isOptionalSchema(propertySchema))
|
|
209
|
+
properties[key] = zodToOpenApiSchema(value);
|
|
210
|
+
if (!isOptionalSchema(value))
|
|
182
211
|
required.push(key);
|
|
183
212
|
}
|
|
184
213
|
const jsonSchema = { type: "object", properties };
|
|
185
214
|
if (required.length > 0)
|
|
186
215
|
jsonSchema.required = required;
|
|
187
|
-
// A `.strict()` Zod object forbids an unknown key.
|
|
188
|
-
// as `additionalProperties: false`,
|
|
189
|
-
//
|
|
190
|
-
|
|
216
|
+
// A `.strict()` Zod object forbids an unknown key. Zod 4 records that as a
|
|
217
|
+
// `never` catchall. Publish the constraint as `additionalProperties: false`,
|
|
218
|
+
// so a client, a gateway, or a handler that treats the contract as
|
|
219
|
+
// authoritative rejects an extra property too.
|
|
220
|
+
const catchall = def.catchall;
|
|
221
|
+
if (catchall && zodDef(catchall).type === "never") {
|
|
191
222
|
jsonSchema.additionalProperties = false;
|
|
223
|
+
}
|
|
192
224
|
return jsonSchema;
|
|
193
225
|
}
|
|
194
226
|
return {};
|
|
@@ -226,9 +258,9 @@ function normalizeResponses(responses = {}) {
|
|
|
226
258
|
}
|
|
227
259
|
function parametersFromSchema(schema, location) {
|
|
228
260
|
const objectSchema = unwrapSchema(schema);
|
|
229
|
-
if (zodTypeName(objectSchema) !== "
|
|
261
|
+
if (zodTypeName(objectSchema) !== "object")
|
|
230
262
|
return [];
|
|
231
|
-
const shape = objectSchema.
|
|
263
|
+
const shape = zodDef(objectSchema).shape;
|
|
232
264
|
return Object.entries(shape).map(([name, value]) => ({
|
|
233
265
|
name,
|
|
234
266
|
in: location,
|
|
@@ -281,7 +313,7 @@ const registry = new OpenAPIRegistry();
|
|
|
281
313
|
// ─── Common schemas ──────────────────────────────────────────────────────────
|
|
282
314
|
const ErrorSchema = registry.register("Error", z.object({ error: z.string() }));
|
|
283
315
|
const responses = {
|
|
284
|
-
ok: (schema = z.record(z.unknown())) => ({
|
|
316
|
+
ok: (schema = z.record(z.string(), z.unknown())) => ({
|
|
285
317
|
description: "Success",
|
|
286
318
|
content: { "application/json": { schema } },
|
|
287
319
|
}),
|
|
@@ -306,6 +338,14 @@ const responses = {
|
|
|
306
338
|
description: "Conflict",
|
|
307
339
|
content: { "application/json": { schema: ErrorSchema } },
|
|
308
340
|
},
|
|
341
|
+
payloadTooLarge: {
|
|
342
|
+
description: "Payload too large",
|
|
343
|
+
content: { "application/json": { schema: ErrorSchema } },
|
|
344
|
+
},
|
|
345
|
+
unsupportedMediaType: {
|
|
346
|
+
description: "Unsupported media type",
|
|
347
|
+
content: { "application/json": { schema: ErrorSchema } },
|
|
348
|
+
},
|
|
309
349
|
unprocessable: {
|
|
310
350
|
description: "Unprocessable entity",
|
|
311
351
|
content: { "application/json": { schema: ErrorSchema } },
|
|
@@ -357,10 +397,10 @@ const importRequestBody = (schema) => ({
|
|
|
357
397
|
});
|
|
358
398
|
const r = responses;
|
|
359
399
|
const externalObjectSummariesBodySchema = z.object({
|
|
360
|
-
issueIds: z.array(z.string().
|
|
400
|
+
issueIds: z.array(z.string().guid()).max(1000),
|
|
361
401
|
}).strict();
|
|
362
402
|
const refreshExternalObjectsBodySchema = z.object({
|
|
363
|
-
objectIds: z.array(z.string().
|
|
403
|
+
objectIds: z.array(z.string().guid()).max(50).optional(),
|
|
364
404
|
}).strict();
|
|
365
405
|
// The start route reads the body directly, so document the accepted fields
|
|
366
406
|
// here. A sandbox environment is required. The time-to-live is optional.
|
|
@@ -390,13 +430,17 @@ const environmentCustomImageTemplateRollbackResultSchema = z.object({
|
|
|
390
430
|
activeTemplate: environmentCustomImageTemplateSchema,
|
|
391
431
|
supersededTemplate: environmentCustomImageTemplateSchema,
|
|
392
432
|
}).strict();
|
|
433
|
+
const environmentCustomImageTemplateRelinkResultSchema = z.object({
|
|
434
|
+
template: environmentCustomImageTemplateSchema,
|
|
435
|
+
classification: z.enum(["knob_only", "boot_source_drift", "unclassified"]),
|
|
436
|
+
}).strict();
|
|
393
437
|
const workTimelineQuerySchema = z.object({
|
|
394
438
|
from: z.string().optional(),
|
|
395
439
|
to: z.string().optional(),
|
|
396
440
|
userId: z.string().optional(),
|
|
397
|
-
goalId: z.string().
|
|
398
|
-
projectId: z.string().
|
|
399
|
-
issueId: z.string().
|
|
441
|
+
goalId: z.string().guid().optional(),
|
|
442
|
+
projectId: z.string().guid().optional(),
|
|
443
|
+
issueId: z.string().guid().optional(),
|
|
400
444
|
limit: z.string().optional(),
|
|
401
445
|
offset: z.string().optional(),
|
|
402
446
|
}).strict();
|
|
@@ -536,6 +580,7 @@ const BOARD_ONLY_OPERATIONS = new Set([
|
|
|
536
580
|
"PATCH /api/companies/{companyId}/members/{memberId}/permissions",
|
|
537
581
|
"GET /api/companies/{companyId}/user-directory",
|
|
538
582
|
"POST /api/execution-workspaces/{id}/reconcile-branch",
|
|
583
|
+
"POST /api/execution-workspaces/{id}/login-handoff",
|
|
539
584
|
"GET /api/board-api-keys",
|
|
540
585
|
"POST /api/board-api-keys",
|
|
541
586
|
"DELETE /api/board-api-keys/{keyId}",
|
|
@@ -1368,6 +1413,7 @@ registry.registerPath({
|
|
|
1368
1413
|
});
|
|
1369
1414
|
const AgentSecretListResponseSchema = z.object({
|
|
1370
1415
|
secrets: z.array(z.object({
|
|
1416
|
+
secretRef: z.string().guid(),
|
|
1371
1417
|
key: z.string(),
|
|
1372
1418
|
name: z.string(),
|
|
1373
1419
|
description: z.string().nullable(),
|
|
@@ -1388,19 +1434,29 @@ const createAgentSecretProposalSchema = z.discriminatedUnion("kind", [
|
|
|
1388
1434
|
}),
|
|
1389
1435
|
z.object({
|
|
1390
1436
|
kind: z.literal("binding"),
|
|
1391
|
-
secretId: z.string().
|
|
1392
|
-
|
|
1393
|
-
|
|
1437
|
+
secretId: z.string().guid().optional(),
|
|
1438
|
+
sourceConfigPath: z.string().min(1).optional(),
|
|
1439
|
+
secretProposalId: z.string().guid().optional(),
|
|
1440
|
+
targetAgentId: z.string().guid().optional(),
|
|
1394
1441
|
configPath: z.string().min(1),
|
|
1395
1442
|
justification: z.string().min(1),
|
|
1396
1443
|
}),
|
|
1397
|
-
])
|
|
1444
|
+
]).superRefine((value, ctx) => {
|
|
1445
|
+
if (value.kind === "binding"
|
|
1446
|
+
&& [value.secretId, value.sourceConfigPath, value.secretProposalId]
|
|
1447
|
+
.filter((reference) => Boolean(reference)).length !== 1) {
|
|
1448
|
+
ctx.addIssue({
|
|
1449
|
+
code: z.ZodIssueCode.custom,
|
|
1450
|
+
message: "Provide exactly one of secretId, sourceConfigPath, or secretProposalId",
|
|
1451
|
+
});
|
|
1452
|
+
}
|
|
1453
|
+
});
|
|
1398
1454
|
const approveSecretProposalSchema = z.object({
|
|
1399
1455
|
cascade: z.boolean().optional(),
|
|
1400
1456
|
overrides: z.object({
|
|
1401
1457
|
name: z.string().min(1).optional(),
|
|
1402
1458
|
description: z.string().optional().nullable(),
|
|
1403
|
-
providerConfigId: z.string().
|
|
1459
|
+
providerConfigId: z.string().guid().optional().nullable(),
|
|
1404
1460
|
}).optional(),
|
|
1405
1461
|
});
|
|
1406
1462
|
const rejectSecretProposalSchema = z.object({ reason: z.string().min(1) });
|
|
@@ -1424,7 +1480,7 @@ registry.registerPath({
|
|
|
1424
1480
|
path: "/api/agents/me/secret-proposals/{id}",
|
|
1425
1481
|
tags: ["secrets"],
|
|
1426
1482
|
summary: "Withdraw a pending secret proposal",
|
|
1427
|
-
request: { params: z.object({ id: z.string().
|
|
1483
|
+
request: { params: z.object({ id: z.string().guid() }) },
|
|
1428
1484
|
responses: { 200: r.ok(), 401: r.unauthorized, 403: r.forbidden, 404: r.notFound, 409: r.conflict },
|
|
1429
1485
|
});
|
|
1430
1486
|
registry.registerPath({
|
|
@@ -1808,7 +1864,7 @@ registry.registerPath({
|
|
|
1808
1864
|
params: z.object({ companyId: z.string() }),
|
|
1809
1865
|
body: jsonBody(createIssueSchema),
|
|
1810
1866
|
},
|
|
1811
|
-
responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized },
|
|
1867
|
+
responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized, 422: r.unprocessable },
|
|
1812
1868
|
});
|
|
1813
1869
|
registry.registerPath({
|
|
1814
1870
|
method: "get",
|
|
@@ -1827,7 +1883,7 @@ registry.registerPath({
|
|
|
1827
1883
|
params: z.object({ id: z.string() }),
|
|
1828
1884
|
body: jsonBody(updateIssueSchema.partial()),
|
|
1829
1885
|
},
|
|
1830
|
-
responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized, 404: r.notFound },
|
|
1886
|
+
responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized, 404: r.notFound, 422: r.unprocessable },
|
|
1831
1887
|
});
|
|
1832
1888
|
registry.registerPath({
|
|
1833
1889
|
method: "post",
|
|
@@ -1909,6 +1965,24 @@ registry.registerPath({
|
|
|
1909
1965
|
},
|
|
1910
1966
|
responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized },
|
|
1911
1967
|
});
|
|
1968
|
+
registry.registerPath({
|
|
1969
|
+
method: "post",
|
|
1970
|
+
path: "/api/issues/{id}/work-products/{workProductId}/review-document",
|
|
1971
|
+
tags: ["issues"],
|
|
1972
|
+
summary: "Ensure the review document for a Markdown work product",
|
|
1973
|
+
request: { params: z.object({ id: z.string(), workProductId: z.string() }) },
|
|
1974
|
+
responses: {
|
|
1975
|
+
200: r.ok(),
|
|
1976
|
+
201: r.ok(),
|
|
1977
|
+
401: r.unauthorized,
|
|
1978
|
+
403: r.forbidden,
|
|
1979
|
+
404: r.notFound,
|
|
1980
|
+
409: r.conflict,
|
|
1981
|
+
413: r.payloadTooLarge,
|
|
1982
|
+
415: r.unsupportedMediaType,
|
|
1983
|
+
422: r.unprocessable,
|
|
1984
|
+
},
|
|
1985
|
+
});
|
|
1912
1986
|
registry.registerPath({
|
|
1913
1987
|
method: "patch",
|
|
1914
1988
|
path: "/api/work-products/{id}",
|
|
@@ -2384,7 +2458,7 @@ registry.registerPath({
|
|
|
2384
2458
|
params: z.object({ id: z.string() }),
|
|
2385
2459
|
body: jsonBody(runRoutineSchema),
|
|
2386
2460
|
},
|
|
2387
|
-
responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized },
|
|
2461
|
+
responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized, 422: r.unprocessable },
|
|
2388
2462
|
});
|
|
2389
2463
|
registry.registerPath({
|
|
2390
2464
|
method: "post",
|
|
@@ -2524,7 +2598,7 @@ registry.registerPath({
|
|
|
2524
2598
|
tags: ["secrets"],
|
|
2525
2599
|
summary: "List company secret proposals for board review",
|
|
2526
2600
|
request: {
|
|
2527
|
-
params: z.object({ companyId: z.string().
|
|
2601
|
+
params: z.object({ companyId: z.string().guid() }),
|
|
2528
2602
|
query: z.object({ status: z.enum(["pending", "approved", "rejected", "withdrawn", "expired"]).optional() }),
|
|
2529
2603
|
},
|
|
2530
2604
|
responses: { 200: r.ok(), 401: r.unauthorized, 403: r.forbidden },
|
|
@@ -2535,7 +2609,7 @@ registry.registerPath({
|
|
|
2535
2609
|
tags: ["secrets"],
|
|
2536
2610
|
summary: "Approve and execute a secret proposal as the approving board user",
|
|
2537
2611
|
request: {
|
|
2538
|
-
params: z.object({ companyId: z.string().
|
|
2612
|
+
params: z.object({ companyId: z.string().guid(), id: z.string().guid() }),
|
|
2539
2613
|
body: jsonBody(approveSecretProposalSchema),
|
|
2540
2614
|
},
|
|
2541
2615
|
responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized, 403: r.forbidden, 404: r.notFound, 409: r.conflict, 422: r.unprocessable },
|
|
@@ -2546,7 +2620,7 @@ registry.registerPath({
|
|
|
2546
2620
|
tags: ["secrets"],
|
|
2547
2621
|
summary: "Reject a pending secret proposal and dependent bindings",
|
|
2548
2622
|
request: {
|
|
2549
|
-
params: z.object({ companyId: z.string().
|
|
2623
|
+
params: z.object({ companyId: z.string().guid(), id: z.string().guid() }),
|
|
2550
2624
|
body: jsonBody(rejectSecretProposalSchema),
|
|
2551
2625
|
},
|
|
2552
2626
|
responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized, 403: r.forbidden, 404: r.notFound, 409: r.conflict, 422: r.unprocessable },
|
|
@@ -2882,9 +2956,9 @@ registry.registerPath({
|
|
|
2882
2956
|
request: {
|
|
2883
2957
|
params: z.object({ companyId: z.string() }),
|
|
2884
2958
|
query: z.object({
|
|
2885
|
-
agentId: z.string().
|
|
2959
|
+
agentId: z.string().guid().optional(),
|
|
2886
2960
|
responsibleUserId: z.string().min(1).optional(),
|
|
2887
|
-
runId: z.string().
|
|
2961
|
+
runId: z.string().guid().optional(),
|
|
2888
2962
|
entityType: z.string().min(1).optional(),
|
|
2889
2963
|
entityId: z.string().min(1).optional(),
|
|
2890
2964
|
action: z.string().min(1).optional(),
|
|
@@ -2905,9 +2979,9 @@ registry.registerPath({
|
|
|
2905
2979
|
request: {
|
|
2906
2980
|
params: z.object({ companyId: z.string() }),
|
|
2907
2981
|
query: z.object({
|
|
2908
|
-
agentId: z.string().
|
|
2982
|
+
agentId: z.string().guid().optional(),
|
|
2909
2983
|
responsibleUserId: z.string().min(1).optional(),
|
|
2910
|
-
runId: z.string().
|
|
2984
|
+
runId: z.string().guid().optional(),
|
|
2911
2985
|
entityType: z.string().min(1).optional(),
|
|
2912
2986
|
entityId: z.string().min(1).optional(),
|
|
2913
2987
|
action: z.string().min(1).optional(),
|
|
@@ -2941,8 +3015,8 @@ registry.registerPath({
|
|
|
2941
3015
|
action: z.string().min(1),
|
|
2942
3016
|
entityType: z.string().min(1),
|
|
2943
3017
|
entityId: z.string().min(1),
|
|
2944
|
-
agentId: z.string().
|
|
2945
|
-
details: z.record(z.unknown()).optional().nullable(),
|
|
3018
|
+
agentId: z.string().guid().optional().nullable(),
|
|
3019
|
+
details: z.record(z.string(), z.unknown()).optional().nullable(),
|
|
2946
3020
|
})),
|
|
2947
3021
|
},
|
|
2948
3022
|
responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized },
|
|
@@ -3274,9 +3348,9 @@ registerCurrentRoute({
|
|
|
3274
3348
|
summary: "List decisions",
|
|
3275
3349
|
query: z.object({
|
|
3276
3350
|
status: z.enum(["open", "decided", "expired", "cancelled"]).optional(),
|
|
3277
|
-
bundleId: z.string().
|
|
3278
|
-
targetIssueId: z.string().
|
|
3279
|
-
originAgentId: z.string().
|
|
3351
|
+
bundleId: z.string().guid().optional(),
|
|
3352
|
+
targetIssueId: z.string().guid().optional(),
|
|
3353
|
+
originAgentId: z.string().guid().optional(),
|
|
3280
3354
|
limit: z.coerce.number().int().positive().max(100).optional(),
|
|
3281
3355
|
}),
|
|
3282
3356
|
responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized, 403: r.forbidden },
|
|
@@ -3288,7 +3362,7 @@ registerCurrentRoute({
|
|
|
3288
3362
|
summary: "Get decision telemetry grouped by rule key",
|
|
3289
3363
|
query: z.object({
|
|
3290
3364
|
groupBy: z.literal("ruleKey"),
|
|
3291
|
-
originAgentId: z.string().
|
|
3365
|
+
originAgentId: z.string().guid().optional(),
|
|
3292
3366
|
since: z.string().datetime().optional(),
|
|
3293
3367
|
}),
|
|
3294
3368
|
responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized, 403: r.forbidden },
|
|
@@ -3336,8 +3410,8 @@ registerCurrentRoute({
|
|
|
3336
3410
|
summary: "Capture a decision training example",
|
|
3337
3411
|
body: z.object({
|
|
3338
3412
|
sourceKind: decisionTrainingSourceKindSchema,
|
|
3339
|
-
sourceId: z.string().
|
|
3340
|
-
issueId: z.string().
|
|
3413
|
+
sourceId: z.string().guid(),
|
|
3414
|
+
issueId: z.string().guid(),
|
|
3341
3415
|
notes: z.string().max(100_000).default(""),
|
|
3342
3416
|
}).strict(),
|
|
3343
3417
|
responses: { 201: r.ok(), 400: r.badRequest, 401: r.unauthorized, 403: r.forbidden, 404: r.notFound, 409: r.conflict },
|
|
@@ -3349,8 +3423,8 @@ registerCurrentRoute({
|
|
|
3349
3423
|
summary: "Preview a decision training snapshot",
|
|
3350
3424
|
body: z.object({
|
|
3351
3425
|
sourceKind: decisionTrainingSourceKindSchema,
|
|
3352
|
-
sourceId: z.string().
|
|
3353
|
-
issueId: z.string().
|
|
3426
|
+
sourceId: z.string().guid(),
|
|
3427
|
+
issueId: z.string().guid(),
|
|
3354
3428
|
}).strict(),
|
|
3355
3429
|
responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized, 403: r.forbidden, 404: r.notFound, 409: r.conflict },
|
|
3356
3430
|
});
|
|
@@ -3360,7 +3434,7 @@ registerCurrentRoute({
|
|
|
3360
3434
|
tags: ["decision-training"],
|
|
3361
3435
|
summary: "List decision training examples",
|
|
3362
3436
|
query: z.object({
|
|
3363
|
-
project: z.string().
|
|
3437
|
+
project: z.string().guid().optional(),
|
|
3364
3438
|
kind: decisionTrainingSourceKindSchema.optional(),
|
|
3365
3439
|
author: z.string().optional(),
|
|
3366
3440
|
q: z.string().max(500).optional(),
|
|
@@ -4101,7 +4175,7 @@ registry.registerPath({
|
|
|
4101
4175
|
tags: ["issues"],
|
|
4102
4176
|
summary: "Create child issues",
|
|
4103
4177
|
request: { params: z.object({ id: z.string() }), body: jsonBody(createChildIssueSchema) },
|
|
4104
|
-
responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized },
|
|
4178
|
+
responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized, 422: r.unprocessable },
|
|
4105
4179
|
});
|
|
4106
4180
|
registry.registerPath({
|
|
4107
4181
|
method: "post",
|
|
@@ -4624,6 +4698,32 @@ registry.registerPath({
|
|
|
4624
4698
|
},
|
|
4625
4699
|
responses: { 200: r.ok(), 401: r.unauthorized, 403: r.forbidden, 422: r.unprocessable },
|
|
4626
4700
|
});
|
|
4701
|
+
registry.registerPath({
|
|
4702
|
+
method: "post",
|
|
4703
|
+
path: "/api/execution-workspaces/{id}/login-handoff",
|
|
4704
|
+
tags: ["execution-workspaces"],
|
|
4705
|
+
summary: "Issue a single-use workspace login handoff",
|
|
4706
|
+
description: "Mints a short-lived, single-use ticket the isolated workspace exchanges for its own "
|
|
4707
|
+
+ "instance-scoped session, so opening a managed workspace does not depend on a cloned "
|
|
4708
|
+
+ "password. Board actors only. The response `url` must be navigated to, not stored: the "
|
|
4709
|
+
+ "workspace answers it with a redirect so the ticket never enters browser history. A refusal "
|
|
4710
|
+
+ "carries a machine `reason` and, where the control plane probed it, the workspace's own "
|
|
4711
|
+
+ "readiness.",
|
|
4712
|
+
request: {
|
|
4713
|
+
params: z.object({ id: z.string() }),
|
|
4714
|
+
body: jsonBody(z.object({
|
|
4715
|
+
next: z.string().optional().describe("Same-origin path to land on; anything else collapses to `/`."),
|
|
4716
|
+
})),
|
|
4717
|
+
},
|
|
4718
|
+
responses: {
|
|
4719
|
+
201: r.ok(),
|
|
4720
|
+
401: r.unauthorized,
|
|
4721
|
+
403: r.forbidden,
|
|
4722
|
+
404: r.notFound,
|
|
4723
|
+
409: r.conflict,
|
|
4724
|
+
501: r.serverError,
|
|
4725
|
+
},
|
|
4726
|
+
});
|
|
4627
4727
|
registry.registerPath({
|
|
4628
4728
|
method: "post",
|
|
4629
4729
|
path: "/api/execution-workspaces/{id}/runtime-services/{action}",
|
|
@@ -4864,6 +4964,25 @@ registry.registerPath({
|
|
|
4864
4964
|
404: r.notFound,
|
|
4865
4965
|
},
|
|
4866
4966
|
});
|
|
4967
|
+
registry.registerPath({
|
|
4968
|
+
method: "post",
|
|
4969
|
+
path: "/api/environments/{environmentId}/custom-image-template/relink",
|
|
4970
|
+
tags: ["environments"],
|
|
4971
|
+
summary: "Relink a detached environment customImage template to the current config",
|
|
4972
|
+
request: {
|
|
4973
|
+
params: z.object({ environmentId: z.string() }),
|
|
4974
|
+
query: environmentCustomImageCompanyQuerySchema,
|
|
4975
|
+
body: jsonBody(relinkEnvironmentCustomImageTemplateSchema),
|
|
4976
|
+
},
|
|
4977
|
+
responses: {
|
|
4978
|
+
200: r.ok(environmentCustomImageTemplateRelinkResultSchema),
|
|
4979
|
+
400: r.badRequest,
|
|
4980
|
+
401: r.unauthorized,
|
|
4981
|
+
403: r.forbidden,
|
|
4982
|
+
404: r.notFound,
|
|
4983
|
+
409: r.conflict,
|
|
4984
|
+
},
|
|
4985
|
+
});
|
|
4867
4986
|
registry.registerPath({
|
|
4868
4987
|
method: "delete",
|
|
4869
4988
|
path: "/api/environments/{environmentId}/custom-image-template",
|
|
@@ -4993,7 +5112,7 @@ registry.registerPath({
|
|
|
4993
5112
|
request: {
|
|
4994
5113
|
body: jsonBody(z.object({
|
|
4995
5114
|
tool: z.string(),
|
|
4996
|
-
parameters: z.record(z.unknown()).optional(),
|
|
5115
|
+
parameters: z.record(z.string(), z.unknown()).optional(),
|
|
4997
5116
|
runContext: z.object({
|
|
4998
5117
|
agentId: z.string(),
|
|
4999
5118
|
runId: z.string(),
|
|
@@ -5092,7 +5211,7 @@ registry.registerPath({
|
|
|
5092
5211
|
summary: "Set company-scoped plugin config",
|
|
5093
5212
|
request: {
|
|
5094
5213
|
params: z.object({ pluginId: z.string() }),
|
|
5095
|
-
body: jsonBody(z.object({ companyId: z.string(), configJson: z.record(z.unknown()) })),
|
|
5214
|
+
body: jsonBody(z.object({ companyId: z.string(), configJson: z.record(z.string(), z.unknown()) })),
|
|
5096
5215
|
},
|
|
5097
5216
|
responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized },
|
|
5098
5217
|
});
|
|
@@ -5103,7 +5222,7 @@ registry.registerPath({
|
|
|
5103
5222
|
summary: "Test company-scoped plugin config",
|
|
5104
5223
|
request: {
|
|
5105
5224
|
params: z.object({ pluginId: z.string() }),
|
|
5106
|
-
body: jsonBody(z.object({ companyId: z.string(), configJson: z.record(z.unknown()) })),
|
|
5225
|
+
body: jsonBody(z.object({ companyId: z.string(), configJson: z.record(z.string(), z.unknown()) })),
|
|
5107
5226
|
},
|
|
5108
5227
|
responses: { 200: r.ok(), 400: r.badRequest, 401: r.unauthorized },
|
|
5109
5228
|
});
|
|
@@ -5159,7 +5278,7 @@ registry.registerPath({
|
|
|
5159
5278
|
body: jsonBody(z.object({
|
|
5160
5279
|
key: z.string(),
|
|
5161
5280
|
companyId: z.string().optional(),
|
|
5162
|
-
params: z.record(z.unknown()).optional(),
|
|
5281
|
+
params: z.record(z.string(), z.unknown()).optional(),
|
|
5163
5282
|
})),
|
|
5164
5283
|
},
|
|
5165
5284
|
responses: { 200: r.ok(), 401: r.unauthorized },
|
|
@@ -5174,7 +5293,7 @@ registry.registerPath({
|
|
|
5174
5293
|
body: jsonBody(z.object({
|
|
5175
5294
|
key: z.string(),
|
|
5176
5295
|
companyId: z.string().optional(),
|
|
5177
|
-
params: z.record(z.unknown()).optional(),
|
|
5296
|
+
params: z.record(z.string(), z.unknown()).optional(),
|
|
5178
5297
|
})),
|
|
5179
5298
|
},
|
|
5180
5299
|
responses: { 200: r.ok(), 401: r.unauthorized },
|
|
@@ -5188,7 +5307,7 @@ registry.registerPath({
|
|
|
5188
5307
|
params: z.object({ pluginId: z.string(), key: z.string() }),
|
|
5189
5308
|
body: jsonBody(z.object({
|
|
5190
5309
|
companyId: z.string().optional(),
|
|
5191
|
-
params: z.record(z.unknown()).optional(),
|
|
5310
|
+
params: z.record(z.string(), z.unknown()).optional(),
|
|
5192
5311
|
})),
|
|
5193
5312
|
},
|
|
5194
5313
|
responses: { 200: r.ok(), 401: r.unauthorized },
|
|
@@ -5202,7 +5321,7 @@ registry.registerPath({
|
|
|
5202
5321
|
params: z.object({ pluginId: z.string(), key: z.string() }),
|
|
5203
5322
|
body: jsonBody(z.object({
|
|
5204
5323
|
companyId: z.string().optional(),
|
|
5205
|
-
params: z.record(z.unknown()).optional(),
|
|
5324
|
+
params: z.record(z.string(), z.unknown()).optional(),
|
|
5206
5325
|
})),
|
|
5207
5326
|
},
|
|
5208
5327
|
responses: { 200: r.ok(), 401: r.unauthorized },
|
|
@@ -5880,7 +5999,7 @@ for (const route of [
|
|
|
5880
5999
|
path: route[1],
|
|
5881
6000
|
tags: ["skills"],
|
|
5882
6001
|
summary: route[2],
|
|
5883
|
-
...(route[0] === "post" ? { body: z.record(z.unknown()).optional() } : {}),
|
|
6002
|
+
...(route[0] === "post" ? { body: z.record(z.string(), z.unknown()).optional() } : {}),
|
|
5884
6003
|
});
|
|
5885
6004
|
}
|
|
5886
6005
|
registerCurrentRoute({
|
|
@@ -5946,7 +6065,7 @@ registerCurrentRoute({
|
|
|
5946
6065
|
summary: "Promote quarantined low-trust output",
|
|
5947
6066
|
body: z.object({
|
|
5948
6067
|
sourceArtifactKind: z.enum(["comment", "document", "work_product", "issue"]),
|
|
5949
|
-
sourceArtifactId: z.string().
|
|
6068
|
+
sourceArtifactId: z.string().guid(),
|
|
5950
6069
|
title: z.string().trim().min(1).max(200),
|
|
5951
6070
|
summary: z.string().trim().min(1).max(8_000),
|
|
5952
6071
|
}),
|
|
@@ -6571,7 +6690,7 @@ const toolGatewaySessionSchema = z.object({
|
|
|
6571
6690
|
});
|
|
6572
6691
|
const toolGatewayCallSchema = z.object({
|
|
6573
6692
|
tool: z.string(),
|
|
6574
|
-
parameters: z.record(z.unknown()).optional(),
|
|
6693
|
+
parameters: z.record(z.string(), z.unknown()).optional(),
|
|
6575
6694
|
timeoutMs: z.number().int().positive().optional(),
|
|
6576
6695
|
approvedActionRequestId: z.string().optional(),
|
|
6577
6696
|
idempotencyKey: z.string().optional(),
|
|
@@ -6582,7 +6701,7 @@ const toolGatewayCompanyQuerySchema = z.object({
|
|
|
6582
6701
|
const toolGatewayCompanyBodySchema = z.object({
|
|
6583
6702
|
companyId: z.string(),
|
|
6584
6703
|
}).passthrough();
|
|
6585
|
-
const mcpGatewayProtocolSchema = z.record(z.unknown());
|
|
6704
|
+
const mcpGatewayProtocolSchema = z.record(z.string(), z.unknown());
|
|
6586
6705
|
registerCurrentRoute({
|
|
6587
6706
|
method: "get",
|
|
6588
6707
|
path: "/mcp/gateways/{gatewayPublicId}",
|