@paperclipai/server 2026.817.0 → 2026.818.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.
Files changed (548) hide show
  1. package/dist/adapters/hermes-gateway-doc.d.ts +1 -1
  2. package/dist/adapters/hermes-gateway-doc.d.ts.map +1 -1
  3. package/dist/adapters/hermes-gateway-doc.js +1 -1
  4. package/dist/adapters/plugin-loader.d.ts.map +1 -1
  5. package/dist/adapters/plugin-loader.js +3 -2
  6. package/dist/adapters/plugin-loader.js.map +1 -1
  7. package/dist/agent-auth-jwt.d.ts.map +1 -1
  8. package/dist/agent-auth-jwt.js +8 -2
  9. package/dist/agent-auth-jwt.js.map +1 -1
  10. package/dist/app.d.ts +5 -1
  11. package/dist/app.d.ts.map +1 -1
  12. package/dist/app.js +202 -15
  13. package/dist/app.js.map +1 -1
  14. package/dist/built-ins/agents/summarizer/AGENTS.md +2 -2
  15. package/dist/built-ins/agents/summarizer/routines/refresh-stale-summaries.md +1 -0
  16. package/dist/db-errors.d.ts +9 -0
  17. package/dist/db-errors.d.ts.map +1 -1
  18. package/dist/db-errors.js +19 -0
  19. package/dist/db-errors.js.map +1 -1
  20. package/dist/errors.d.ts +1 -1
  21. package/dist/errors.d.ts.map +1 -1
  22. package/dist/errors.js +2 -2
  23. package/dist/errors.js.map +1 -1
  24. package/dist/index.d.ts.map +1 -1
  25. package/dist/index.js +162 -38
  26. package/dist/index.js.map +1 -1
  27. package/dist/lib/request-promise-memo.d.ts +6 -0
  28. package/dist/lib/request-promise-memo.d.ts.map +1 -0
  29. package/dist/lib/request-promise-memo.js +25 -0
  30. package/dist/lib/request-promise-memo.js.map +1 -0
  31. package/dist/lib/request-promise-memo.test.d.ts +2 -0
  32. package/dist/lib/request-promise-memo.test.d.ts.map +1 -0
  33. package/dist/lib/request-promise-memo.test.js +74 -0
  34. package/dist/lib/request-promise-memo.test.js.map +1 -0
  35. package/dist/middleware/auth.d.ts +13 -1
  36. package/dist/middleware/auth.d.ts.map +1 -1
  37. package/dist/middleware/auth.js +92 -41
  38. package/dist/middleware/auth.js.map +1 -1
  39. package/dist/middleware/cloud-tenant-actor.test.js +26 -1
  40. package/dist/middleware/cloud-tenant-actor.test.js.map +1 -1
  41. package/dist/middleware/error-handler.d.ts.map +1 -1
  42. package/dist/middleware/error-handler.js +11 -2
  43. package/dist/middleware/error-handler.js.map +1 -1
  44. package/dist/middleware/logger.d.ts.map +1 -1
  45. package/dist/middleware/logger.js +7 -33
  46. package/dist/middleware/logger.js.map +1 -1
  47. package/dist/middleware/private-hostname-guard.d.ts.map +1 -1
  48. package/dist/middleware/private-hostname-guard.js +11 -6
  49. package/dist/middleware/private-hostname-guard.js.map +1 -1
  50. package/dist/middleware/private-json-etag.d.ts +3 -0
  51. package/dist/middleware/private-json-etag.d.ts.map +1 -0
  52. package/dist/middleware/private-json-etag.js +37 -0
  53. package/dist/middleware/private-json-etag.js.map +1 -0
  54. package/dist/middleware/redact-sensitive.d.ts.map +1 -1
  55. package/dist/middleware/redact-sensitive.js +11 -0
  56. package/dist/middleware/redact-sensitive.js.map +1 -1
  57. package/dist/realtime/live-events-ws.d.ts +12 -0
  58. package/dist/realtime/live-events-ws.d.ts.map +1 -1
  59. package/dist/realtime/live-events-ws.js +20 -0
  60. package/dist/realtime/live-events-ws.js.map +1 -1
  61. package/dist/redaction.js +1 -1
  62. package/dist/redaction.js.map +1 -1
  63. package/dist/routes/access.d.ts +2 -0
  64. package/dist/routes/access.d.ts.map +1 -1
  65. package/dist/routes/access.js +21 -10
  66. package/dist/routes/access.js.map +1 -1
  67. package/dist/routes/agents.d.ts +42 -0
  68. package/dist/routes/agents.d.ts.map +1 -1
  69. package/dist/routes/agents.js +875 -8
  70. package/dist/routes/agents.js.map +1 -1
  71. package/dist/routes/companies.d.ts +5 -1
  72. package/dist/routes/companies.d.ts.map +1 -1
  73. package/dist/routes/companies.js +467 -30
  74. package/dist/routes/companies.js.map +1 -1
  75. package/dist/routes/environments.d.ts +12 -3
  76. package/dist/routes/environments.d.ts.map +1 -1
  77. package/dist/routes/environments.js +139 -23
  78. package/dist/routes/environments.js.map +1 -1
  79. package/dist/routes/execution-workspaces.d.ts.map +1 -1
  80. package/dist/routes/execution-workspaces.js +240 -70
  81. package/dist/routes/execution-workspaces.js.map +1 -1
  82. package/dist/routes/file-resources.d.ts +14 -1
  83. package/dist/routes/file-resources.d.ts.map +1 -1
  84. package/dist/routes/file-resources.js +182 -3
  85. package/dist/routes/file-resources.js.map +1 -1
  86. package/dist/routes/index.d.ts +2 -1
  87. package/dist/routes/index.d.ts.map +1 -1
  88. package/dist/routes/index.js +2 -1
  89. package/dist/routes/index.js.map +1 -1
  90. package/dist/routes/instance-settings.d.ts.map +1 -1
  91. package/dist/routes/instance-settings.js +20 -1
  92. package/dist/routes/instance-settings.js.map +1 -1
  93. package/dist/routes/issues.d.ts.map +1 -1
  94. package/dist/routes/issues.js +750 -235
  95. package/dist/routes/issues.js.map +1 -1
  96. package/dist/routes/onboarding-seed.d.ts +27 -0
  97. package/dist/routes/onboarding-seed.d.ts.map +1 -0
  98. package/dist/routes/onboarding-seed.js +56 -0
  99. package/dist/routes/onboarding-seed.js.map +1 -0
  100. package/dist/routes/openapi.d.ts.map +1 -1
  101. package/dist/routes/openapi.js +316 -2
  102. package/dist/routes/openapi.js.map +1 -1
  103. package/dist/routes/secrets.d.ts.map +1 -1
  104. package/dist/routes/secrets.js +11 -1
  105. package/dist/routes/secrets.js.map +1 -1
  106. package/dist/routes/setup-token-route.test.d.ts +2 -0
  107. package/dist/routes/setup-token-route.test.d.ts.map +1 -0
  108. package/dist/routes/setup-token-route.test.js +896 -0
  109. package/dist/routes/setup-token-route.test.js.map +1 -0
  110. package/dist/routes/tool-access.d.ts.map +1 -1
  111. package/dist/routes/tool-access.js +87 -52
  112. package/dist/routes/tool-access.js.map +1 -1
  113. package/dist/routes/workspace-runtime-service-authz.d.ts +11 -1
  114. package/dist/routes/workspace-runtime-service-authz.d.ts.map +1 -1
  115. package/dist/routes/workspace-runtime-service-authz.js +18 -16
  116. package/dist/routes/workspace-runtime-service-authz.js.map +1 -1
  117. package/dist/services/access.d.ts.map +1 -1
  118. package/dist/services/activity.d.ts +1 -1
  119. package/dist/services/agents.d.ts +21 -0
  120. package/dist/services/agents.d.ts.map +1 -1
  121. package/dist/services/agents.js +121 -1
  122. package/dist/services/agents.js.map +1 -1
  123. package/dist/services/attention-resolver-audience.test.d.ts +2 -0
  124. package/dist/services/attention-resolver-audience.test.d.ts.map +1 -0
  125. package/dist/services/attention-resolver-audience.test.js +81 -0
  126. package/dist/services/attention-resolver-audience.test.js.map +1 -0
  127. package/dist/services/attention.d.ts +20 -1
  128. package/dist/services/attention.d.ts.map +1 -1
  129. package/dist/services/attention.js +45 -1
  130. package/dist/services/attention.js.map +1 -1
  131. package/dist/services/authorization.d.ts +2 -2
  132. package/dist/services/authorization.d.ts.map +1 -1
  133. package/dist/services/authorization.js +89 -46
  134. package/dist/services/authorization.js.map +1 -1
  135. package/dist/services/board-auth.d.ts.map +1 -1
  136. package/dist/services/board-auth.js +40 -1
  137. package/dist/services/board-auth.js.map +1 -1
  138. package/dist/services/board-auth.test.d.ts +2 -0
  139. package/dist/services/board-auth.test.d.ts.map +1 -0
  140. package/dist/services/board-auth.test.js +34 -0
  141. package/dist/services/board-auth.test.js.map +1 -0
  142. package/dist/services/built-in-agents.d.ts.map +1 -1
  143. package/dist/services/built-in-agents.js +20 -4
  144. package/dist/services/built-in-agents.js.map +1 -1
  145. package/dist/services/bundled-plugins.d.ts +11 -1
  146. package/dist/services/bundled-plugins.d.ts.map +1 -1
  147. package/dist/services/bundled-plugins.js +46 -1
  148. package/dist/services/bundled-plugins.js.map +1 -1
  149. package/dist/services/codex-device-login-reaper.d.ts +61 -0
  150. package/dist/services/codex-device-login-reaper.d.ts.map +1 -0
  151. package/dist/services/codex-device-login-reaper.js +219 -0
  152. package/dist/services/codex-device-login-reaper.js.map +1 -0
  153. package/dist/services/codex-device-login-service.d.ts +355 -0
  154. package/dist/services/codex-device-login-service.d.ts.map +1 -0
  155. package/dist/services/codex-device-login-service.js +775 -0
  156. package/dist/services/codex-device-login-service.js.map +1 -0
  157. package/dist/services/companies.d.ts.map +1 -1
  158. package/dist/services/companies.js +7 -0
  159. package/dist/services/companies.js.map +1 -1
  160. package/dist/services/company-export-readme.js +1 -1
  161. package/dist/services/company-export-readme.js.map +1 -1
  162. package/dist/services/company-import-transfers.d.ts +55 -0
  163. package/dist/services/company-import-transfers.d.ts.map +1 -0
  164. package/dist/services/company-import-transfers.js +151 -0
  165. package/dist/services/company-import-transfers.js.map +1 -0
  166. package/dist/services/company-portability.d.ts.map +1 -1
  167. package/dist/services/company-portability.js +128 -3
  168. package/dist/services/company-portability.js.map +1 -1
  169. package/dist/services/company-transfer-runs.d.ts +136 -0
  170. package/dist/services/company-transfer-runs.d.ts.map +1 -0
  171. package/dist/services/company-transfer-runs.js +243 -0
  172. package/dist/services/company-transfer-runs.js.map +1 -0
  173. package/dist/services/cross-issue-influence-limit.d.ts +7 -1
  174. package/dist/services/cross-issue-influence-limit.d.ts.map +1 -1
  175. package/dist/services/cross-issue-influence-limit.js.map +1 -1
  176. package/dist/services/environment-config.d.ts +15 -0
  177. package/dist/services/environment-config.d.ts.map +1 -1
  178. package/dist/services/environment-config.js +56 -10
  179. package/dist/services/environment-config.js.map +1 -1
  180. package/dist/services/environment-execution-target.d.ts.map +1 -1
  181. package/dist/services/environment-execution-target.js +61 -11
  182. package/dist/services/environment-execution-target.js.map +1 -1
  183. package/dist/services/environment-run-orchestrator.d.ts +16 -1
  184. package/dist/services/environment-run-orchestrator.d.ts.map +1 -1
  185. package/dist/services/environment-run-orchestrator.js +1 -1
  186. package/dist/services/environment-run-orchestrator.js.map +1 -1
  187. package/dist/services/environment-runtime.d.ts +178 -2
  188. package/dist/services/environment-runtime.d.ts.map +1 -1
  189. package/dist/services/environment-runtime.js +1035 -96
  190. package/dist/services/environment-runtime.js.map +1 -1
  191. package/dist/services/environments.d.ts +75 -0
  192. package/dist/services/environments.d.ts.map +1 -1
  193. package/dist/services/environments.js +199 -8
  194. package/dist/services/environments.js.map +1 -1
  195. package/dist/services/execution-allowlist.d.ts +16 -4
  196. package/dist/services/execution-allowlist.d.ts.map +1 -1
  197. package/dist/services/execution-allowlist.js +35 -16
  198. package/dist/services/execution-allowlist.js.map +1 -1
  199. package/dist/services/execution-allowlist.test.js +33 -0
  200. package/dist/services/execution-allowlist.test.js.map +1 -1
  201. package/dist/services/execution-workspace-policy.d.ts +14 -1
  202. package/dist/services/execution-workspace-policy.d.ts.map +1 -1
  203. package/dist/services/execution-workspace-policy.js +29 -12
  204. package/dist/services/execution-workspace-policy.js.map +1 -1
  205. package/dist/services/execution-workspaces.d.ts +89 -0
  206. package/dist/services/execution-workspaces.d.ts.map +1 -1
  207. package/dist/services/execution-workspaces.js +997 -125
  208. package/dist/services/execution-workspaces.js.map +1 -1
  209. package/dist/services/heartbeat-run-summary.d.ts +1 -0
  210. package/dist/services/heartbeat-run-summary.d.ts.map +1 -1
  211. package/dist/services/heartbeat-run-summary.js +19 -3
  212. package/dist/services/heartbeat-run-summary.js.map +1 -1
  213. package/dist/services/heartbeat.d.ts +18 -2
  214. package/dist/services/heartbeat.d.ts.map +1 -1
  215. package/dist/services/heartbeat.js +369 -16
  216. package/dist/services/heartbeat.js.map +1 -1
  217. package/dist/services/import-write-types.d.ts +12 -0
  218. package/dist/services/import-write-types.d.ts.map +1 -1
  219. package/dist/services/index.d.ts +2 -0
  220. package/dist/services/index.d.ts.map +1 -1
  221. package/dist/services/index.js +2 -0
  222. package/dist/services/index.js.map +1 -1
  223. package/dist/services/instance-settings.d.ts +10 -1
  224. package/dist/services/instance-settings.d.ts.map +1 -1
  225. package/dist/services/instance-settings.js +16 -9
  226. package/dist/services/instance-settings.js.map +1 -1
  227. package/dist/services/issue-review-policy.d.ts +4 -0
  228. package/dist/services/issue-review-policy.d.ts.map +1 -1
  229. package/dist/services/issue-review-policy.js +18 -7
  230. package/dist/services/issue-review-policy.js.map +1 -1
  231. package/dist/services/issue-thread-interaction-resolution.d.ts +92 -0
  232. package/dist/services/issue-thread-interaction-resolution.d.ts.map +1 -0
  233. package/dist/services/issue-thread-interaction-resolution.js +198 -0
  234. package/dist/services/issue-thread-interaction-resolution.js.map +1 -0
  235. package/dist/services/issue-thread-interaction-resolution.test.d.ts +2 -0
  236. package/dist/services/issue-thread-interaction-resolution.test.d.ts.map +1 -0
  237. package/dist/services/issue-thread-interaction-resolution.test.js +152 -0
  238. package/dist/services/issue-thread-interaction-resolution.test.js.map +1 -0
  239. package/dist/services/issue-thread-interactions.d.ts +24 -4
  240. package/dist/services/issue-thread-interactions.d.ts.map +1 -1
  241. package/dist/services/issue-thread-interactions.js +360 -145
  242. package/dist/services/issue-thread-interactions.js.map +1 -1
  243. package/dist/services/issue-thread-interactions.test.js +18 -11
  244. package/dist/services/issue-thread-interactions.test.js.map +1 -1
  245. package/dist/services/issues.d.ts +3 -0
  246. package/dist/services/issues.d.ts.map +1 -1
  247. package/dist/services/issues.js +157 -33
  248. package/dist/services/issues.js.map +1 -1
  249. package/dist/services/local-service-supervisor.d.ts +2 -0
  250. package/dist/services/local-service-supervisor.d.ts.map +1 -1
  251. package/dist/services/local-service-supervisor.js +53 -3
  252. package/dist/services/local-service-supervisor.js.map +1 -1
  253. package/dist/services/managed-environments.d.ts +4 -1
  254. package/dist/services/managed-environments.d.ts.map +1 -1
  255. package/dist/services/managed-environments.js +86 -2
  256. package/dist/services/managed-environments.js.map +1 -1
  257. package/dist/services/managed-environments.test.js +164 -0
  258. package/dist/services/managed-environments.test.js.map +1 -1
  259. package/dist/services/onboarding-greeting.d.ts +7 -0
  260. package/dist/services/onboarding-greeting.d.ts.map +1 -0
  261. package/dist/services/onboarding-greeting.js +27 -0
  262. package/dist/services/onboarding-greeting.js.map +1 -0
  263. package/dist/services/onboarding-greeting.test.d.ts +2 -0
  264. package/dist/services/onboarding-greeting.test.d.ts.map +1 -0
  265. package/dist/services/onboarding-greeting.test.js +32 -0
  266. package/dist/services/onboarding-greeting.test.js.map +1 -0
  267. package/dist/services/onboarding-seed.d.ts +57 -0
  268. package/dist/services/onboarding-seed.d.ts.map +1 -0
  269. package/dist/services/onboarding-seed.js +344 -0
  270. package/dist/services/onboarding-seed.js.map +1 -0
  271. package/dist/services/plan-review-context.d.ts +9 -1
  272. package/dist/services/plan-review-context.d.ts.map +1 -1
  273. package/dist/services/plan-review-context.js +192 -0
  274. package/dist/services/plan-review-context.js.map +1 -1
  275. package/dist/services/plugin-environment-driver.d.ts +46 -0
  276. package/dist/services/plugin-environment-driver.d.ts.map +1 -1
  277. package/dist/services/plugin-environment-driver.js +50 -0
  278. package/dist/services/plugin-environment-driver.js.map +1 -1
  279. package/dist/services/plugin-host-services.d.ts +1 -0
  280. package/dist/services/plugin-host-services.d.ts.map +1 -1
  281. package/dist/services/plugin-host-services.js +51 -28
  282. package/dist/services/plugin-host-services.js.map +1 -1
  283. package/dist/services/plugin-loader.d.ts +10 -1
  284. package/dist/services/plugin-loader.d.ts.map +1 -1
  285. package/dist/services/plugin-loader.js +43 -2
  286. package/dist/services/plugin-loader.js.map +1 -1
  287. package/dist/services/plugin-worker-manager.d.ts +61 -0
  288. package/dist/services/plugin-worker-manager.d.ts.map +1 -1
  289. package/dist/services/plugin-worker-manager.js +248 -1
  290. package/dist/services/plugin-worker-manager.js.map +1 -1
  291. package/dist/services/productivity-review.d.ts.map +1 -1
  292. package/dist/services/productivity-review.js +5 -0
  293. package/dist/services/productivity-review.js.map +1 -1
  294. package/dist/services/recovery/service.d.ts.map +1 -1
  295. package/dist/services/recovery/service.js +5 -1
  296. package/dist/services/recovery/service.js.map +1 -1
  297. package/dist/services/recovery/successful-run-handoff.d.ts +16 -1
  298. package/dist/services/recovery/successful-run-handoff.d.ts.map +1 -1
  299. package/dist/services/recovery/successful-run-handoff.js +32 -0
  300. package/dist/services/recovery/successful-run-handoff.js.map +1 -1
  301. package/dist/services/recovery/successful-run-handoff.test.js +51 -1
  302. package/dist/services/recovery/successful-run-handoff.test.js.map +1 -1
  303. package/dist/services/routines.d.ts.map +1 -1
  304. package/dist/services/routines.js +48 -4
  305. package/dist/services/routines.js.map +1 -1
  306. package/dist/services/runtime-exposure/broker-client.d.ts +88 -0
  307. package/dist/services/runtime-exposure/broker-client.d.ts.map +1 -0
  308. package/dist/services/runtime-exposure/broker-client.js +217 -0
  309. package/dist/services/runtime-exposure/broker-client.js.map +1 -0
  310. package/dist/services/runtime-exposure/broker-client.test.d.ts +2 -0
  311. package/dist/services/runtime-exposure/broker-client.test.d.ts.map +1 -0
  312. package/dist/services/runtime-exposure/broker-client.test.js +185 -0
  313. package/dist/services/runtime-exposure/broker-client.test.js.map +1 -0
  314. package/dist/services/runtime-exposure/exposure-manager.d.ts +135 -0
  315. package/dist/services/runtime-exposure/exposure-manager.d.ts.map +1 -0
  316. package/dist/services/runtime-exposure/exposure-manager.js +247 -0
  317. package/dist/services/runtime-exposure/exposure-manager.js.map +1 -0
  318. package/dist/services/runtime-exposure/exposure-manager.test.d.ts +2 -0
  319. package/dist/services/runtime-exposure/exposure-manager.test.d.ts.map +1 -0
  320. package/dist/services/runtime-exposure/exposure-manager.test.js +384 -0
  321. package/dist/services/runtime-exposure/exposure-manager.test.js.map +1 -0
  322. package/dist/services/runtime-exposure/loopback-listener.d.ts +33 -0
  323. package/dist/services/runtime-exposure/loopback-listener.d.ts.map +1 -0
  324. package/dist/services/runtime-exposure/loopback-listener.js +146 -0
  325. package/dist/services/runtime-exposure/loopback-listener.js.map +1 -0
  326. package/dist/services/runtime-exposure/loopback-listener.test.d.ts +2 -0
  327. package/dist/services/runtime-exposure/loopback-listener.test.d.ts.map +1 -0
  328. package/dist/services/runtime-exposure/loopback-listener.test.js +116 -0
  329. package/dist/services/runtime-exposure/loopback-listener.test.js.map +1 -0
  330. package/dist/services/runtime-exposure/port-pair.d.ts +47 -0
  331. package/dist/services/runtime-exposure/port-pair.d.ts.map +1 -0
  332. package/dist/services/runtime-exposure/port-pair.js +57 -0
  333. package/dist/services/runtime-exposure/port-pair.js.map +1 -0
  334. package/dist/services/runtime-exposure/port-pair.test.d.ts +2 -0
  335. package/dist/services/runtime-exposure/port-pair.test.d.ts.map +1 -0
  336. package/dist/services/runtime-exposure/port-pair.test.js +92 -0
  337. package/dist/services/runtime-exposure/port-pair.test.js.map +1 -0
  338. package/dist/services/runtime-exposure/port-reservation.d.ts +211 -0
  339. package/dist/services/runtime-exposure/port-reservation.d.ts.map +1 -0
  340. package/dist/services/runtime-exposure/port-reservation.js +380 -0
  341. package/dist/services/runtime-exposure/port-reservation.js.map +1 -0
  342. package/dist/services/runtime-exposure/port-reservation.test.d.ts +2 -0
  343. package/dist/services/runtime-exposure/port-reservation.test.d.ts.map +1 -0
  344. package/dist/services/runtime-exposure/port-reservation.test.js +456 -0
  345. package/dist/services/runtime-exposure/port-reservation.test.js.map +1 -0
  346. package/dist/services/runtime-exposure/tailscale-hostname.d.ts +11 -0
  347. package/dist/services/runtime-exposure/tailscale-hostname.d.ts.map +1 -0
  348. package/dist/services/runtime-exposure/tailscale-hostname.js +36 -0
  349. package/dist/services/runtime-exposure/tailscale-hostname.js.map +1 -0
  350. package/dist/services/runtime-exposure/tailscale-hostname.test.d.ts +2 -0
  351. package/dist/services/runtime-exposure/tailscale-hostname.test.d.ts.map +1 -0
  352. package/dist/services/runtime-exposure/tailscale-hostname.test.js +14 -0
  353. package/dist/services/runtime-exposure/tailscale-hostname.test.js.map +1 -0
  354. package/dist/services/sandbox-orphan-cleanup-spool.d.ts +64 -0
  355. package/dist/services/sandbox-orphan-cleanup-spool.d.ts.map +1 -0
  356. package/dist/services/sandbox-orphan-cleanup-spool.js +134 -0
  357. package/dist/services/sandbox-orphan-cleanup-spool.js.map +1 -0
  358. package/dist/services/sandbox-provider-runtime.d.ts +15 -0
  359. package/dist/services/sandbox-provider-runtime.d.ts.map +1 -1
  360. package/dist/services/sandbox-provider-runtime.js +1 -0
  361. package/dist/services/sandbox-provider-runtime.js.map +1 -1
  362. package/dist/services/secrets.d.ts +103 -0
  363. package/dist/services/secrets.d.ts.map +1 -1
  364. package/dist/services/secrets.js +432 -10
  365. package/dist/services/secrets.js.map +1 -1
  366. package/dist/services/setup-token-session.d.ts +630 -0
  367. package/dist/services/setup-token-session.d.ts.map +1 -0
  368. package/dist/services/setup-token-session.js +1005 -0
  369. package/dist/services/setup-token-session.js.map +1 -0
  370. package/dist/services/setup-token-session.test.d.ts +2 -0
  371. package/dist/services/setup-token-session.test.d.ts.map +1 -0
  372. package/dist/services/setup-token-session.test.js +1143 -0
  373. package/dist/services/setup-token-session.test.js.map +1 -0
  374. package/dist/services/setup-token-transport-binding.d.ts +202 -0
  375. package/dist/services/setup-token-transport-binding.d.ts.map +1 -0
  376. package/dist/services/setup-token-transport-binding.js +386 -0
  377. package/dist/services/setup-token-transport-binding.js.map +1 -0
  378. package/dist/services/setup-token-transport-binding.test.d.ts +2 -0
  379. package/dist/services/setup-token-transport-binding.test.d.ts.map +1 -0
  380. package/dist/services/setup-token-transport-binding.test.js +761 -0
  381. package/dist/services/setup-token-transport-binding.test.js.map +1 -0
  382. package/dist/services/summary-slots.d.ts.map +1 -1
  383. package/dist/services/summary-slots.js +40 -6
  384. package/dist/services/summary-slots.js.map +1 -1
  385. package/dist/services/task-watchdogs.js +2 -2
  386. package/dist/services/task-watchdogs.js.map +1 -1
  387. package/dist/services/tool-access-policy.d.ts +1 -1
  388. package/dist/services/tool-access.d.ts.map +1 -1
  389. package/dist/services/tool-access.js +29 -11
  390. package/dist/services/tool-access.js.map +1 -1
  391. package/dist/services/tool-gateway.d.ts +1 -1
  392. package/dist/services/tool-gateway.d.ts.map +1 -1
  393. package/dist/services/tool-gateway.js +56 -5
  394. package/dist/services/tool-gateway.js.map +1 -1
  395. package/dist/services/workspace-file-resources.d.ts +10 -1
  396. package/dist/services/workspace-file-resources.d.ts.map +1 -1
  397. package/dist/services/workspace-file-resources.js +258 -6
  398. package/dist/services/workspace-file-resources.js.map +1 -1
  399. package/dist/services/workspace-git-operation-scheduler.d.ts +135 -0
  400. package/dist/services/workspace-git-operation-scheduler.d.ts.map +1 -0
  401. package/dist/services/workspace-git-operation-scheduler.js +655 -0
  402. package/dist/services/workspace-git-operation-scheduler.js.map +1 -0
  403. package/dist/services/workspace-git-operation-scheduler.test.d.ts +2 -0
  404. package/dist/services/workspace-git-operation-scheduler.test.d.ts.map +1 -0
  405. package/dist/services/workspace-git-operation-scheduler.test.js +367 -0
  406. package/dist/services/workspace-git-operation-scheduler.test.js.map +1 -0
  407. package/dist/services/workspace-operations.d.ts +60 -0
  408. package/dist/services/workspace-operations.d.ts.map +1 -1
  409. package/dist/services/workspace-operations.js +384 -19
  410. package/dist/services/workspace-operations.js.map +1 -1
  411. package/dist/services/workspace-runtime-exposure-backfill.test.d.ts +2 -0
  412. package/dist/services/workspace-runtime-exposure-backfill.test.d.ts.map +1 -0
  413. package/dist/services/workspace-runtime-exposure-backfill.test.js +149 -0
  414. package/dist/services/workspace-runtime-exposure-backfill.test.js.map +1 -0
  415. package/dist/services/workspace-runtime-exposure.test.d.ts +2 -0
  416. package/dist/services/workspace-runtime-exposure.test.d.ts.map +1 -0
  417. package/dist/services/workspace-runtime-exposure.test.js +517 -0
  418. package/dist/services/workspace-runtime-exposure.test.js.map +1 -0
  419. package/dist/services/workspace-runtime-leases.d.ts +90 -0
  420. package/dist/services/workspace-runtime-leases.d.ts.map +1 -0
  421. package/dist/services/workspace-runtime-leases.js +252 -0
  422. package/dist/services/workspace-runtime-leases.js.map +1 -0
  423. package/dist/services/workspace-runtime-read-model.d.ts +12 -0
  424. package/dist/services/workspace-runtime-read-model.d.ts.map +1 -1
  425. package/dist/services/workspace-runtime-read-model.test.js +3 -0
  426. package/dist/services/workspace-runtime-read-model.test.js.map +1 -1
  427. package/dist/services/workspace-runtime-ready-comment.test.js +1 -0
  428. package/dist/services/workspace-runtime-ready-comment.test.js.map +1 -1
  429. package/dist/services/workspace-runtime.d.ts +160 -2
  430. package/dist/services/workspace-runtime.d.ts.map +1 -1
  431. package/dist/services/workspace-runtime.js +1693 -141
  432. package/dist/services/workspace-runtime.js.map +1 -1
  433. package/dist/shutdown.d.ts +24 -0
  434. package/dist/shutdown.d.ts.map +1 -1
  435. package/dist/shutdown.js +37 -0
  436. package/dist/shutdown.js.map +1 -1
  437. package/dist/shutdown.test.js +113 -1
  438. package/dist/shutdown.test.js.map +1 -1
  439. package/dist/startup-banner.js +1 -1
  440. package/dist/startup-banner.js.map +1 -1
  441. package/dist/url-utils.d.ts +26 -0
  442. package/dist/url-utils.d.ts.map +1 -0
  443. package/dist/url-utils.js +59 -0
  444. package/dist/url-utils.js.map +1 -0
  445. package/dist/url-utils.test.d.ts +2 -0
  446. package/dist/url-utils.test.d.ts.map +1 -0
  447. package/dist/url-utils.test.js +55 -0
  448. package/dist/url-utils.test.js.map +1 -0
  449. package/dist/worktree-config.d.ts.map +1 -1
  450. package/dist/worktree-config.js +3 -17
  451. package/dist/worktree-config.js.map +1 -1
  452. package/package.json +20 -20
  453. package/skills/paperclip/SKILL.md +16 -11
  454. package/skills/paperclip/references/api-reference.md +8 -5
  455. package/skills/paperclip-board/SKILL.md +1 -1
  456. package/ui-dist/assets/{abnfDiagram-VRR7QNED-wvSnvD6-.js → abnfDiagram-N423BO3Z-BvgoV-u5.js} +1 -1
  457. package/ui-dist/assets/{arc-Bx0V1JsN.js → arc-BInnUBUU.js} +1 -1
  458. package/ui-dist/assets/architectureDiagram-T3A2C74G-Dg4MziOm.js +36 -0
  459. package/ui-dist/assets/{blockDiagram-677ZJIJ3-BROcLaUk.js → blockDiagram-VBNYF7ZC-D9kzAkLN.js} +1 -1
  460. package/ui-dist/assets/{c4Diagram-LMCZKHZV-D-V3kgju.js → c4Diagram-5PPSVZJV-BwzsgV_0.js} +1 -1
  461. package/ui-dist/assets/channel-qoSYbCn0.js +1 -0
  462. package/ui-dist/assets/{chunk-32BRIVSS-qillH3H6.js → chunk-2GRJ4B5K-D2EQ9vrl.js} +1 -1
  463. package/ui-dist/assets/{chunk-2Q5K7J3B-D19cVnii.js → chunk-2Q5K7J3B-DOA_8fSd.js} +1 -1
  464. package/ui-dist/assets/{chunk-EX3LRPZG-CLUswrZg.js → chunk-5RXB4S5H-CT5ukRiT.js} +1 -1
  465. package/ui-dist/assets/{chunk-5VM5RSS4-Cwlp02Lx.js → chunk-5VM5RSS4-D2gOlkyB.js} +1 -1
  466. package/ui-dist/assets/{chunk-MOJQB5TN-yKciyq6E.js → chunk-6Q2QTUOP-DUb6aG8c.js} +1 -1
  467. package/ui-dist/assets/{chunk-V7JOEXUC-DjJ75g0_.js → chunk-GF5L2VYU-BPabG3Cx.js} +1 -1
  468. package/ui-dist/assets/{chunk-JWPE2WC7-BjepyzEb.js → chunk-JWPE2WC7-scNfhlZz.js} +1 -1
  469. package/ui-dist/assets/{chunk-VR4S4FIN-CiEmy8-R.js → chunk-KBJHAD2P-BcRAzRpq.js} +1 -1
  470. package/ui-dist/assets/{chunk-RYQCIY6F-ed7mQM9j.js → chunk-RYQCIY6F-BiZ0-EGh.js} +1 -1
  471. package/ui-dist/assets/{chunk-XXDRQBXY-BiI83zoO.js → chunk-XXDRQBXY-lJULxFIE.js} +1 -1
  472. package/ui-dist/assets/classDiagram-JCYQIIEL-B24u1REs.js +1 -0
  473. package/ui-dist/assets/classDiagram-v2-OCEON4UE-B24u1REs.js +1 -0
  474. package/ui-dist/assets/{cose-bilkent-JH36ORCC-DIdQf5ta.js → cose-bilkent-JH36ORCC-Do8pe8JB.js} +1 -1
  475. package/ui-dist/assets/{cynefin-VYW2F7L2-B2m9xxh8.js → cynefin-VYW2F7L2-B34jJY1x.js} +1 -1
  476. package/ui-dist/assets/{cynefinDiagram-TSTJHNR4-CGVdB0kX.js → cynefinDiagram-MW4NZA55-DQ8QK8JK.js} +1 -1
  477. package/ui-dist/assets/cytoscape.esm-DShqj__B.js +321 -0
  478. package/ui-dist/assets/{dagre-VKFMJZFB-CskKiZwJ.js → dagre-VZM6K2ZE-B7lSKgxH.js} +1 -1
  479. package/ui-dist/assets/{diagram-OA4YK3LP-D2cn5eIN.js → diagram-7IWD3JNH-B3hLAFGE.js} +1 -1
  480. package/ui-dist/assets/{diagram-FQU43EPY-oa5Zu0XG.js → diagram-B4RE2ZJO-CH9Ro9e0.js} +1 -1
  481. package/ui-dist/assets/{diagram-NH7WQ7WH-fymti5Js.js → diagram-LBJQPF4R-DdPVMii7.js} +1 -1
  482. package/ui-dist/assets/{diagram-G47NLZAW-BWF2ZCsw.js → diagram-Q27KOJAE-f5VXswjc.js} +1 -1
  483. package/ui-dist/assets/diagram-UB23O5K3-DGqxixsR.js +41 -0
  484. package/ui-dist/assets/{ebnfDiagram-CCIWWBDH-CJ1d3D5q.js → ebnfDiagram-BXEA7PRR-C-1klg_w.js} +1 -1
  485. package/ui-dist/assets/{erDiagram-Q63AITRT-BJCPa7kK.js → erDiagram-JOGREHBK-Dt4qK4gv.js} +1 -1
  486. package/ui-dist/assets/{flowDiagram-23GEKE2U-BWjWuz6r.js → flowDiagram-UKHOOZJN-9ZlrTuET.js} +5 -5
  487. package/ui-dist/assets/{ganttDiagram-NO4QXBWP-Dv1KKjoM.js → ganttDiagram-PKOTCBZU-CE3lyvFq.js} +1 -1
  488. package/ui-dist/assets/{gitGraphDiagram-IHSO6WYX-9X7vgL0A.js → gitGraphDiagram-DS77QQ5N-HH2fSgad.js} +1 -1
  489. package/ui-dist/assets/{index-CpaK48ok.js → index-B61ORkIb.js} +1 -1
  490. package/ui-dist/assets/index-BHiUiToL.css +1 -0
  491. package/ui-dist/assets/{index-D2YCrA-D.js → index-BY5ITKmG.js} +1 -1
  492. package/ui-dist/assets/{index-9JMDmXc5.js → index-BbAhzCq8.js} +1 -1
  493. package/ui-dist/assets/{index-C5qHatpp.js → index-Bc9g6q63.js} +1 -1
  494. package/ui-dist/assets/{index-DuI6e5mP.js → index-Bf7tyGxE.js} +1 -1
  495. package/ui-dist/assets/{index-BahRsj0s.js → index-BvFx-4KW.js} +1 -1
  496. package/ui-dist/assets/{index-DKlsEDV7.js → index-C1mpWCcn.js} +1 -1
  497. package/ui-dist/assets/{index-DIXaXZrW.js → index-CHXG4GPL.js} +1 -1
  498. package/ui-dist/assets/{index-DcfO6NoY.js → index-CLu3Tfpv.js} +1 -1
  499. package/ui-dist/assets/{index-Cfz6P0Qq.js → index-CQhaM6qd.js} +1 -1
  500. package/ui-dist/assets/{index-D9d3sl6K.js → index-CVTL3aAL.js} +1 -1
  501. package/ui-dist/assets/{index-BexA3NAl.js → index-CcRTJ93J.js} +1 -1
  502. package/ui-dist/assets/{index-CnBrDwGT.js → index-Cm6iEYPt.js} +247 -223
  503. package/ui-dist/assets/{index-ByGcu-MB.js → index-DQIrrn2L.js} +1 -1
  504. package/ui-dist/assets/{index-DKEzHO7c.js → index-DU4U1fuv.js} +1 -1
  505. package/ui-dist/assets/{index-pqJO8FsV.js → index-DV2FOgyD.js} +1 -1
  506. package/ui-dist/assets/{index-tDuieU3u.js → index-DceuCrr8.js} +1 -1
  507. package/ui-dist/assets/{index-CjN2lm_w.js → index-DlVBBF8o.js} +1 -1
  508. package/ui-dist/assets/{index-0yJtUsFh.js → index-DsdVneqe.js} +1 -1
  509. package/ui-dist/assets/{index-C2a4_IKU.js → index-DvFUXI-Q.js} +1 -1
  510. package/ui-dist/assets/{index-BTMiDMYv.js → index-FHzrJ7iQ.js} +1 -1
  511. package/ui-dist/assets/{index-cUQXJtLK.js → index-diFs0CNC.js} +1 -1
  512. package/ui-dist/assets/{index-C96LHV1A.js → index-hkanj4t6.js} +1 -1
  513. package/ui-dist/assets/{index-rDI1Q4r9.js → index-yRJnh4vx.js} +1 -1
  514. package/ui-dist/assets/{infoDiagram-FWYZ7A6U-CHIhutSb.js → infoDiagram-6WML65LV-2jai2fw-.js} +1 -1
  515. package/ui-dist/assets/{ishikawaDiagram-FXEZZL3T-ChaD7-5_.js → ishikawaDiagram-WSZJBQD7-CUmGhmEb.js} +1 -1
  516. package/ui-dist/assets/{journeyDiagram-5HDEW3XC-M5T2sMgn.js → journeyDiagram-NVQOT4AX-CGQuPDO1.js} +1 -1
  517. package/ui-dist/assets/{kanban-definition-HUTT4EX6-B8H6R_Wc.js → kanban-definition-27J2QSJJ-zgEPcbHl.js} +1 -1
  518. package/ui-dist/assets/{linear-cpPKlVCq.js → linear-BVf5VtLS.js} +1 -1
  519. package/ui-dist/assets/mermaid.core-D2TFkGfI.js +308 -0
  520. package/ui-dist/assets/{mindmap-definition-LN4V7U3C-Bf6POzvm.js → mindmap-definition-FAOFIHXS-xoAQ0Lb_.js} +1 -1
  521. package/ui-dist/assets/{pegDiagram-2B236MQR-BJbGktAV.js → pegDiagram-VL7TDLO6-CBR1PWLr.js} +1 -1
  522. package/ui-dist/assets/{pieDiagram-ENE6RG2P-BmSN9Bio.js → pieDiagram-7S7Q4E2Y-BMPnzK_e.js} +1 -1
  523. package/ui-dist/assets/{quadrantDiagram-ABIIQ3AL-JUpqQCx_.js → quadrantDiagram-CIZ2JOQS-CPtVUPkR.js} +1 -1
  524. package/ui-dist/assets/{railroadDiagram-RFXS5EU6-B8k8T4-2.js → railroadDiagram-AXF67PYL-DC0lsZV1.js} +1 -1
  525. package/ui-dist/assets/{requirementDiagram-TGXJPOKE-b32heq7Q.js → requirementDiagram-LRYGKXZP-BF6k05SB.js} +1 -1
  526. package/ui-dist/assets/{sankeyDiagram-HTMAVEWB-DC3s-xgf.js → sankeyDiagram-W5VNT64P-CRN0ibiP.js} +1 -1
  527. package/ui-dist/assets/{sequenceDiagram-DBY2YBRQ-BsCFyv_E.js → sequenceDiagram-SI44F4Z6-CQtTiPWm.js} +1 -1
  528. package/ui-dist/assets/{sizeCapture-X5ZJPWSS-S7xeCud3.js → sizeCapture-X5ZJPWSS-BdjuGZd1.js} +1 -1
  529. package/ui-dist/assets/{stateDiagram-2N3HPSRC-58O3ofoS.js → stateDiagram-OKZ733FA-B99onxyh.js} +1 -1
  530. package/ui-dist/assets/stateDiagram-v2-UEYNNEHI-bzFlYBZ1.js +1 -0
  531. package/ui-dist/assets/{swimlanes-5IMT3BWC-DFCVG0iF.js → swimlanes-SLNWSIFB-BIByPbrL.js} +2 -2
  532. package/ui-dist/assets/swimlanesDiagram-ULZ7WXOC-DgdkBnuK.js +8 -0
  533. package/ui-dist/assets/{timeline-definition-FHXFAJF6-C0c0SkQu.js → timeline-definition-Z64GVDOM-I1NgOcn9.js} +1 -1
  534. package/ui-dist/assets/{vennDiagram-L72KCM5P-B1cEx8GQ.js → vennDiagram-T6HMQDX7-D6t2Njcl.js} +1 -1
  535. package/ui-dist/assets/{wardleyDiagram-EHGQE667-BQhDkOx9.js → wardleyDiagram-T6FBY63Y-BiYKm9gh.js} +1 -1
  536. package/ui-dist/assets/{xychartDiagram-FW5EYKEG-YSQp1N0i.js → xychartDiagram-ELKLHX3M-BhwXKWIa.js} +4 -4
  537. package/ui-dist/index.html +3 -3
  538. package/ui-dist/sw.js +8 -3
  539. package/ui-dist/assets/architectureDiagram-ZJ3FMSHR-BcJt8Ia1.js +0 -36
  540. package/ui-dist/assets/channel-ZRpjyNiZ.js +0 -1
  541. package/ui-dist/assets/classDiagram-OUVF2IWQ-CCzzzCgk.js +0 -1
  542. package/ui-dist/assets/classDiagram-v2-EOCWNBFH-CCzzzCgk.js +0 -1
  543. package/ui-dist/assets/cytoscape.esm-D8joxN9f.js +0 -321
  544. package/ui-dist/assets/diagram-WEI45ONY-M3WOC2tK.js +0 -41
  545. package/ui-dist/assets/index-BqfqfoQX.css +0 -1
  546. package/ui-dist/assets/mermaid.core-MCazc_od.js +0 -308
  547. package/ui-dist/assets/stateDiagram-v2-6OUMAXLB-_VY5dpDG.js +0 -1
  548. package/ui-dist/assets/swimlanesDiagram-G3AALYLV-BJhUjfns.js +0 -8
@@ -0,0 +1,136 @@
1
+ import type { Db } from "@paperclipai/db";
2
+ export type CompanyTransferDirection = "export" | "import";
3
+ export type CompanyTransferRunStatus = "pending" | "running" | "applying" | "completed" | "failed" | "cancelled";
4
+ /**
5
+ * Minimal structural view of a transfer manifest's part index: the ledger only
6
+ * ever needs part names and counts, so it stays decoupled from any particular
7
+ * container format. Manifests without this shape (e.g. the chunked zip-upload
8
+ * manifest, which carries its own part list) pass explicit counts to
9
+ * `recordManifest` and track parts by their own names.
10
+ */
11
+ export interface CompanyTransferPartsIndex {
12
+ chunks: Array<{
13
+ name: string;
14
+ }>;
15
+ blobs: Array<{
16
+ name: string;
17
+ }>;
18
+ }
19
+ export interface CompanyTransferRunRow {
20
+ id: string;
21
+ companyId: string | null;
22
+ direction: CompanyTransferDirection;
23
+ status: CompanyTransferRunStatus;
24
+ actorKey: string;
25
+ containerRef: unknown;
26
+ idempotencyKey: string;
27
+ manifestSha256: string | null;
28
+ manifest: unknown;
29
+ chunkCount: number;
30
+ blobCount: number;
31
+ completedParts: string[];
32
+ error: string | null;
33
+ startedAt: Date | null;
34
+ finishedAt: Date | null;
35
+ createdAt: Date;
36
+ updatedAt: Date;
37
+ }
38
+ export interface ResumeOrCreateTransferRunInput {
39
+ direction: CompanyTransferDirection;
40
+ actorKey: string;
41
+ idempotencyKey: string;
42
+ /** Credential-free container location descriptor. Never put secrets here. */
43
+ containerRef: unknown;
44
+ companyId?: string | null;
45
+ }
46
+ export interface ResumeOrCreateTransferRunResult {
47
+ run: CompanyTransferRunRow;
48
+ /** True when an existing run for the same content was picked up. */
49
+ resumed: boolean;
50
+ /** True when that existing run already finished — the caller can short-circuit. */
51
+ alreadyCompleted: boolean;
52
+ }
53
+ declare function getRun(db: Db, runId: string): Promise<CompanyTransferRunRow | null>;
54
+ export declare const companyTransferRunService: {
55
+ getRun: typeof getRun;
56
+ getRunForActor(db: Db, runId: string, actorKey: string): Promise<CompanyTransferRunRow | null>;
57
+ /**
58
+ * Find the actor's run for this exact content (same idempotency key and
59
+ * direction) or create a fresh one. A completed prior run is returned with
60
+ * `alreadyCompleted` so the caller can skip the apply outright; a pending,
61
+ * running, failed, or mid-apply prior run is resumed with its part progress
62
+ * intact (an "applying" run resumes so a concurrent re-declaration never
63
+ * spawns a duplicate, but `start` leaves it alone until the apply settles).
64
+ */
65
+ resumeOrCreate(db: Db, input: ResumeOrCreateTransferRunInput): Promise<ResumeOrCreateTransferRunResult>;
66
+ /**
67
+ * Persist the parsed manifest so resume can re-verify parts without
68
+ * refetching it. Counts default to the manifest's chunk/blob index when it
69
+ * has one; manifests with a different part layout pass them explicitly.
70
+ */
71
+ recordManifest(db: Db, runId: string, manifest: unknown, manifestSha256: string, counts?: {
72
+ chunkCount: number;
73
+ blobCount: number;
74
+ }): Promise<void>;
75
+ /**
76
+ * Atomically claim a run for apply. The apply itself is not idempotent, so
77
+ * of any overlapping apply attempts exactly one caller gets `true` here —
78
+ * a single guarded UPDATE moves the run to "applying" only while it is
79
+ * still open (pending/running/failed). The winner settles the claim with
80
+ * `complete` on success or `releaseApplyClaim`/`fail` on error (which makes
81
+ * the run retryable again); every concurrent loser gets `false` and must
82
+ * not run the apply.
83
+ */
84
+ claimApply(db: Db, runId: string): Promise<boolean>;
85
+ start(db: Db, runId: string): Promise<void>;
86
+ attachCompany(db: Db, runId: string, companyId: string): Promise<void>;
87
+ /**
88
+ * Record one finished container part. Appends atomically in SQL and is
89
+ * idempotent: re-completing an already recorded part leaves the ledger
90
+ * unchanged, so a retried part never double-counts. Only open runs
91
+ * (pending/running) accept parts; when the run has meanwhile gone terminal
92
+ * (e.g. the abandoned-spool sweep cancelled it) or is mid-apply, nothing is
93
+ * recorded and `false` comes back so the caller can discard the part.
94
+ */
95
+ completePart(db: Db, runId: string, partName: string): Promise<boolean>;
96
+ /** Container part names the run still has to process, in manifest order. */
97
+ remainingParts(run: CompanyTransferRunRow, manifest: CompanyTransferPartsIndex): string[];
98
+ complete(db: Db, runId: string): Promise<void>;
99
+ /**
100
+ * Atomically claim an abandoned open run: cancel it only while it is still
101
+ * open (pending/running) AND saw no activity since `idleSince` — one
102
+ * guarded UPDATE, so any concurrent part upload or resume that bumped
103
+ * `updatedAt` makes the guard miss and `false` comes back. Callers must
104
+ * only touch the run's spooled data after a `true` claim.
105
+ *
106
+ * The terminal state is "cancelled", not "failed", precisely because failed
107
+ * runs stay claimable: a failed sweep target could be claimed by an apply
108
+ * and assembled while its spool is being deleted underneath it. A cancelled
109
+ * run is unclaimable the instant this UPDATE commits — before any
110
+ * filesystem deletion — and `resumeOrCreate` ignores it, so redeclaring the
111
+ * same content afterwards starts a fresh run.
112
+ */
113
+ cancelIfIdle(db: Db, runId: string, idleSince: Date, error: string): Promise<boolean>;
114
+ /**
115
+ * Release a held apply claim into "failed". Guarded on "applying", unlike
116
+ * `fail`: catch-all error paths around an apply cannot know whether the run
117
+ * already settled (a cleanup error thrown after `complete` reaches the same
118
+ * catch as a real apply failure), and an unguarded fail there would flip a
119
+ * completed run back to claimable and invite a duplicate import. When the
120
+ * run already settled this is a no-op and returns false.
121
+ */
122
+ releaseApplyClaim(db: Db, runId: string, error: string): Promise<boolean>;
123
+ /**
124
+ * Fail every run stranded in "applying" by a dead process. Apply jobs run
125
+ * in-memory in this single server process, so at boot any run still
126
+ * "applying" belongs to an apply that died without settling its claim and
127
+ * would otherwise 409 every retry forever. Failing it makes it claimable
128
+ * again with its spooled parts intact. Startup only — running this while
129
+ * applies may be live (e.g. from a periodic sweep) would kill them.
130
+ */
131
+ recoverStrandedApplyingRuns(db: Db): Promise<string[]>;
132
+ fail(db: Db, runId: string, error: string): Promise<void>;
133
+ cancel(db: Db, runId: string): Promise<void>;
134
+ };
135
+ export {};
136
+ //# sourceMappingURL=company-transfer-runs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"company-transfer-runs.d.ts","sourceRoot":"","sources":["../../src/services/company-transfer-runs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,243 @@
1
+ import { and, desc, eq, inArray, lt, sql } from "drizzle-orm";
2
+ import { companyTransferRuns } from "@paperclipai/db";
3
+ function asPartsIndex(manifest) {
4
+ if (typeof manifest !== "object" || manifest === null)
5
+ return null;
6
+ const { chunks, blobs } = manifest;
7
+ const named = (value) => Array.isArray(value) &&
8
+ value.every((entry) => typeof entry === "object" &&
9
+ entry !== null &&
10
+ typeof entry.name === "string");
11
+ if (!named(chunks) || !named(blobs))
12
+ return null;
13
+ return { chunks, blobs };
14
+ }
15
+ const RESUMABLE_STATUSES = ["pending", "running", "failed"];
16
+ /** Statuses under which container parts may still be recorded as completed. */
17
+ const PART_UPLOAD_STATUSES = ["pending", "running"];
18
+ function rowFromRecord(record) {
19
+ return {
20
+ ...record,
21
+ direction: record.direction,
22
+ status: record.status,
23
+ manifest: record.manifest ?? null,
24
+ completedParts: Array.isArray(record.completedParts) ? record.completedParts : [],
25
+ };
26
+ }
27
+ async function getRun(db, runId) {
28
+ const [record] = await db
29
+ .select()
30
+ .from(companyTransferRuns)
31
+ .where(eq(companyTransferRuns.id, runId))
32
+ .limit(1);
33
+ return record ? rowFromRecord(record) : null;
34
+ }
35
+ export const companyTransferRunService = {
36
+ getRun,
37
+ async getRunForActor(db, runId, actorKey) {
38
+ const run = await getRun(db, runId);
39
+ return run && run.actorKey === actorKey ? run : null;
40
+ },
41
+ /**
42
+ * Find the actor's run for this exact content (same idempotency key and
43
+ * direction) or create a fresh one. A completed prior run is returned with
44
+ * `alreadyCompleted` so the caller can skip the apply outright; a pending,
45
+ * running, failed, or mid-apply prior run is resumed with its part progress
46
+ * intact (an "applying" run resumes so a concurrent re-declaration never
47
+ * spawns a duplicate, but `start` leaves it alone until the apply settles).
48
+ */
49
+ async resumeOrCreate(db, input) {
50
+ return db.transaction(async (tx) => {
51
+ const txDb = tx;
52
+ // No unique index backs the (actor, direction, content key) lookup, so
53
+ // two concurrent identical declarations could both miss the lookup and
54
+ // both insert. Serialize them with a transaction-scoped advisory lock
55
+ // on the key: the second caller waits here until the first commits and
56
+ // then resumes the first caller's row.
57
+ const lockKey = `${input.actorKey}|${input.direction}|${input.idempotencyKey}`;
58
+ await txDb.execute(sql `select pg_advisory_xact_lock(hashtextextended(${lockKey}, 0))`);
59
+ const matches = await txDb
60
+ .select()
61
+ .from(companyTransferRuns)
62
+ .where(and(eq(companyTransferRuns.idempotencyKey, input.idempotencyKey), eq(companyTransferRuns.direction, input.direction), eq(companyTransferRuns.actorKey, input.actorKey), inArray(companyTransferRuns.status, [...RESUMABLE_STATUSES, "applying", "completed"])))
63
+ .orderBy(desc(companyTransferRuns.createdAt))
64
+ .limit(1);
65
+ const existing = matches[0] ? rowFromRecord(matches[0]) : null;
66
+ if (existing) {
67
+ return { run: existing, resumed: true, alreadyCompleted: existing.status === "completed" };
68
+ }
69
+ const [created] = await txDb
70
+ .insert(companyTransferRuns)
71
+ .values({
72
+ direction: input.direction,
73
+ actorKey: input.actorKey,
74
+ idempotencyKey: input.idempotencyKey,
75
+ containerRef: input.containerRef,
76
+ companyId: input.companyId ?? null,
77
+ })
78
+ .returning();
79
+ return { run: rowFromRecord(created), resumed: false, alreadyCompleted: false };
80
+ });
81
+ },
82
+ /**
83
+ * Persist the parsed manifest so resume can re-verify parts without
84
+ * refetching it. Counts default to the manifest's chunk/blob index when it
85
+ * has one; manifests with a different part layout pass them explicitly.
86
+ */
87
+ async recordManifest(db, runId, manifest, manifestSha256, counts) {
88
+ const index = asPartsIndex(manifest);
89
+ const chunkCount = counts?.chunkCount ?? index?.chunks.length ?? 0;
90
+ const blobCount = counts?.blobCount ?? index?.blobs.length ?? 0;
91
+ await db
92
+ .update(companyTransferRuns)
93
+ .set({
94
+ manifest,
95
+ manifestSha256,
96
+ chunkCount,
97
+ blobCount,
98
+ updatedAt: new Date(),
99
+ })
100
+ .where(eq(companyTransferRuns.id, runId));
101
+ },
102
+ /**
103
+ * Atomically claim a run for apply. The apply itself is not idempotent, so
104
+ * of any overlapping apply attempts exactly one caller gets `true` here —
105
+ * a single guarded UPDATE moves the run to "applying" only while it is
106
+ * still open (pending/running/failed). The winner settles the claim with
107
+ * `complete` on success or `releaseApplyClaim`/`fail` on error (which makes
108
+ * the run retryable again); every concurrent loser gets `false` and must
109
+ * not run the apply.
110
+ */
111
+ async claimApply(db, runId) {
112
+ const claimed = await db
113
+ .update(companyTransferRuns)
114
+ .set({ status: "applying", error: null, updatedAt: new Date() })
115
+ .where(and(eq(companyTransferRuns.id, runId), inArray(companyTransferRuns.status, RESUMABLE_STATUSES)))
116
+ .returning({ id: companyTransferRuns.id });
117
+ return claimed.length > 0;
118
+ },
119
+ async start(db, runId) {
120
+ await db
121
+ .update(companyTransferRuns)
122
+ .set({ status: "running", error: null, startedAt: new Date(), finishedAt: null, updatedAt: new Date() })
123
+ .where(and(eq(companyTransferRuns.id, runId), inArray(companyTransferRuns.status, RESUMABLE_STATUSES)));
124
+ },
125
+ async attachCompany(db, runId, companyId) {
126
+ await db
127
+ .update(companyTransferRuns)
128
+ .set({ companyId, updatedAt: new Date() })
129
+ .where(eq(companyTransferRuns.id, runId));
130
+ },
131
+ /**
132
+ * Record one finished container part. Appends atomically in SQL and is
133
+ * idempotent: re-completing an already recorded part leaves the ledger
134
+ * unchanged, so a retried part never double-counts. Only open runs
135
+ * (pending/running) accept parts; when the run has meanwhile gone terminal
136
+ * (e.g. the abandoned-spool sweep cancelled it) or is mid-apply, nothing is
137
+ * recorded and `false` comes back so the caller can discard the part.
138
+ */
139
+ async completePart(db, runId, partName) {
140
+ const partJson = JSON.stringify([partName]);
141
+ const updated = await db
142
+ .update(companyTransferRuns)
143
+ .set({
144
+ completedParts: sql `case when ${companyTransferRuns.completedParts} @> ${partJson}::jsonb then ${companyTransferRuns.completedParts} else ${companyTransferRuns.completedParts} || ${partJson}::jsonb end`,
145
+ updatedAt: new Date(),
146
+ })
147
+ .where(and(eq(companyTransferRuns.id, runId), inArray(companyTransferRuns.status, PART_UPLOAD_STATUSES)))
148
+ .returning({ id: companyTransferRuns.id });
149
+ return updated.length > 0;
150
+ },
151
+ /** Container part names the run still has to process, in manifest order. */
152
+ remainingParts(run, manifest) {
153
+ const completed = new Set(run.completedParts);
154
+ const remaining = [];
155
+ for (const chunk of manifest.chunks) {
156
+ if (!completed.has(chunk.name))
157
+ remaining.push(chunk.name);
158
+ }
159
+ for (const blob of manifest.blobs) {
160
+ if (!completed.has(blob.name))
161
+ remaining.push(blob.name);
162
+ }
163
+ return remaining;
164
+ },
165
+ async complete(db, runId) {
166
+ await db
167
+ .update(companyTransferRuns)
168
+ .set({ status: "completed", error: null, finishedAt: new Date(), updatedAt: new Date() })
169
+ .where(eq(companyTransferRuns.id, runId));
170
+ },
171
+ /**
172
+ * Atomically claim an abandoned open run: cancel it only while it is still
173
+ * open (pending/running) AND saw no activity since `idleSince` — one
174
+ * guarded UPDATE, so any concurrent part upload or resume that bumped
175
+ * `updatedAt` makes the guard miss and `false` comes back. Callers must
176
+ * only touch the run's spooled data after a `true` claim.
177
+ *
178
+ * The terminal state is "cancelled", not "failed", precisely because failed
179
+ * runs stay claimable: a failed sweep target could be claimed by an apply
180
+ * and assembled while its spool is being deleted underneath it. A cancelled
181
+ * run is unclaimable the instant this UPDATE commits — before any
182
+ * filesystem deletion — and `resumeOrCreate` ignores it, so redeclaring the
183
+ * same content afterwards starts a fresh run.
184
+ */
185
+ async cancelIfIdle(db, runId, idleSince, error) {
186
+ const claimed = await db
187
+ .update(companyTransferRuns)
188
+ .set({ status: "cancelled", error, finishedAt: new Date(), updatedAt: new Date() })
189
+ .where(and(eq(companyTransferRuns.id, runId), inArray(companyTransferRuns.status, PART_UPLOAD_STATUSES), lt(companyTransferRuns.updatedAt, idleSince)))
190
+ .returning({ id: companyTransferRuns.id });
191
+ return claimed.length > 0;
192
+ },
193
+ /**
194
+ * Release a held apply claim into "failed". Guarded on "applying", unlike
195
+ * `fail`: catch-all error paths around an apply cannot know whether the run
196
+ * already settled (a cleanup error thrown after `complete` reaches the same
197
+ * catch as a real apply failure), and an unguarded fail there would flip a
198
+ * completed run back to claimable and invite a duplicate import. When the
199
+ * run already settled this is a no-op and returns false.
200
+ */
201
+ async releaseApplyClaim(db, runId, error) {
202
+ const released = await db
203
+ .update(companyTransferRuns)
204
+ .set({ status: "failed", error, finishedAt: new Date(), updatedAt: new Date() })
205
+ .where(and(eq(companyTransferRuns.id, runId), eq(companyTransferRuns.status, "applying")))
206
+ .returning({ id: companyTransferRuns.id });
207
+ return released.length > 0;
208
+ },
209
+ /**
210
+ * Fail every run stranded in "applying" by a dead process. Apply jobs run
211
+ * in-memory in this single server process, so at boot any run still
212
+ * "applying" belongs to an apply that died without settling its claim and
213
+ * would otherwise 409 every retry forever. Failing it makes it claimable
214
+ * again with its spooled parts intact. Startup only — running this while
215
+ * applies may be live (e.g. from a periodic sweep) would kill them.
216
+ */
217
+ async recoverStrandedApplyingRuns(db) {
218
+ const recovered = await db
219
+ .update(companyTransferRuns)
220
+ .set({
221
+ status: "failed",
222
+ error: "apply interrupted by a restart — verify whether the import completed before retrying",
223
+ finishedAt: new Date(),
224
+ updatedAt: new Date(),
225
+ })
226
+ .where(eq(companyTransferRuns.status, "applying"))
227
+ .returning({ id: companyTransferRuns.id });
228
+ return recovered.map((row) => row.id);
229
+ },
230
+ async fail(db, runId, error) {
231
+ await db
232
+ .update(companyTransferRuns)
233
+ .set({ status: "failed", error, finishedAt: new Date(), updatedAt: new Date() })
234
+ .where(eq(companyTransferRuns.id, runId));
235
+ },
236
+ async cancel(db, runId) {
237
+ await db
238
+ .update(companyTransferRuns)
239
+ .set({ status: "cancelled", finishedAt: new Date(), updatedAt: new Date() })
240
+ .where(and(eq(companyTransferRuns.id, runId), inArray(companyTransferRuns.status, RESUMABLE_STATUSES)));
241
+ },
242
+ };
243
+ //# sourceMappingURL=company-transfer-runs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"company-transfer-runs.js","sourceRoot":"","sources":["../../src/services/company-transfer-runs.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,13 @@
1
1
  import type { Db } from "@paperclipai/db";
2
2
  export declare const CROSS_ISSUE_INFLUENCE_LIMIT = 20;
3
3
  export declare const CROSS_ISSUE_INFLUENCE_ENFORCE_AT: Date;
4
- export type CrossIssueInfluenceKind = "comment" | "update";
4
+ /**
5
+ * Every kind shares one per-run counter. `interaction_resolution` covers the
6
+ * issue-thread accept/reject/respond/verdict routes: an open `anyone` resolver
7
+ * audience is not a licence to resolve, wake, and spawn suggested tasks across
8
+ * the whole company from one run.
9
+ */
10
+ export type CrossIssueInfluenceKind = "comment" | "update" | "interaction_resolution";
5
11
  export type CrossIssueInfluenceDecision = {
6
12
  allowed: boolean;
7
13
  mode: "log_only" | "enforce";
@@ -1 +1 @@
1
- {"version":3,"file":"cross-issue-influence-limit.d.ts","sourceRoot":"","sources":["../../src/services/cross-issue-influence-limit.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAM1C,eAAO,MAAM,2BAA2B,KAAK,CAAC;AAC9C,eAAO,MAAM,gCAAgC,MAAuC,CAAC;AAKrF,MAAM,MAAM,uBAAuB,GAAG,SAAS,GAAG,QAAQ,CAAC;AAE3D,MAAM,MAAM,2BAA2B,GAAG;IACxC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,UAAU,GAAG,SAAS,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,wBAAgB,kCAAkC,qCAKjD;AAWD,wBAAgB,gCAAgC,CAAC,KAAK,EAAE;IACtD,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,IAAI,CAAC;CACZ,GAAG,2BAA2B,CAW9B;AAED;;;;;;;GAOG;AACH,wBAAsB,0BAA0B,CAC9C,EAAE,EAAE,EAAE,EACN,KAAK,EAAE;IACL,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,aAAa,EAAE,MAAM,CAAC;IACtB,qBAAqB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,IAAI,EAAE,uBAAuB,CAAC;IAC9B,GAAG,CAAC,EAAE,IAAI,CAAC;CACZ,GACA,OAAO,CAAC,2BAA2B,GAAG,IAAI,CAAC,CAiG7C;AAED,wBAAgB,6BAA6B,CAC3C,QAAQ,EAAE,2BAA2B,EACrC,OAAO,GAAE;IAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAO;;;;;;;;;;;;EAoB7G"}
1
+ {"version":3,"file":"cross-issue-influence-limit.d.ts","sourceRoot":"","sources":["../../src/services/cross-issue-influence-limit.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAM1C,eAAO,MAAM,2BAA2B,KAAK,CAAC;AAC9C,eAAO,MAAM,gCAAgC,MAAuC,CAAC;AAKrF;;;;;GAKG;AACH,MAAM,MAAM,uBAAuB,GAAG,SAAS,GAAG,QAAQ,GAAG,wBAAwB,CAAC;AAEtF,MAAM,MAAM,2BAA2B,GAAG;IACxC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,UAAU,GAAG,SAAS,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,wBAAgB,kCAAkC,qCAKjD;AAWD,wBAAgB,gCAAgC,CAAC,KAAK,EAAE;IACtD,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,IAAI,CAAC;CACZ,GAAG,2BAA2B,CAW9B;AAED;;;;;;;GAOG;AACH,wBAAsB,0BAA0B,CAC9C,EAAE,EAAE,EAAE,EACN,KAAK,EAAE;IACL,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,aAAa,EAAE,MAAM,CAAC;IACtB,qBAAqB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,IAAI,EAAE,uBAAuB,CAAC;IAC9B,GAAG,CAAC,EAAE,IAAI,CAAC;CACZ,GACA,OAAO,CAAC,2BAA2B,GAAG,IAAI,CAAC,CAiG7C;AAED,wBAAgB,6BAA6B,CAC3C,QAAQ,EAAE,2BAA2B,EACrC,OAAO,GAAE;IAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAO;;;;;;;;;;;;EAoB7G"}
@@ -1 +1 @@
1
- {"version":3,"file":"cross-issue-influence-limit.js","sourceRoot":"","sources":["../../src/services/cross-issue-influence-limit.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cross-issue-influence-limit.js","sourceRoot":"","sources":["../../src/services/cross-issue-influence-limit.ts"],"names":[],"mappings":"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"}
@@ -59,6 +59,21 @@ export declare function resolveEnvironmentDriverConfigForRuntime(db: Db, company
59
59
  heartbeatRunId?: string | null;
60
60
  applyCustomImageTemplate?: boolean;
61
61
  }): Promise<ParsedEnvironmentConfig>;
62
+ /**
63
+ * Resolve the connection secrets of a recorded sandbox config for a durable
64
+ * orphan-sandbox teardown. The retry reads the recorded config from the durable
65
+ * `pending_cleanup` lease row, not from the current environment. So this
66
+ * resolver must not require the environment binding: a delete removed the
67
+ * environment, or a provider change replaced the binding. It resolves each
68
+ * schema-declared secret ref by id at the latest version through
69
+ * `resolveSecretValueForSandboxCleanup`, which authorizes the read from the
70
+ * durable orphan record and skips the binding check. The resolved values are
71
+ * used once for the teardown RPC and never persisted.
72
+ */
73
+ export declare function resolveSandboxCleanupConfigSecrets(db: Db, companyId: string, config: SandboxEnvironmentConfig, context?: {
74
+ issueId?: string | null;
75
+ heartbeatRunId?: string | null;
76
+ }): Promise<SandboxEnvironmentConfig>;
62
77
  export declare function readSshEnvironmentPrivateKeySecretId(environment: Pick<Environment, "driver" | "config">): string | null;
63
78
  export declare function parseEnvironmentDriverConfig(environment: Pick<Environment, "driver" | "config">): ParsedEnvironmentConfig;
64
79
  //# sourceMappingURL=environment-config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"environment-config.d.ts","sourceRoot":"","sources":["../../src/services/environment-config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"environment-config.d.ts","sourceRoot":"","sources":["../../src/services/environment-config.ts"],"names":[],"mappings":"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"}
@@ -48,7 +48,6 @@ const fakeSandboxEnvironmentConfigSchema = z.object({
48
48
  .default("ubuntu:24.04"),
49
49
  reuseLease: z.boolean().optional().default(false),
50
50
  streamRunLogs: z.boolean().optional(),
51
- streamAgentSessionOutput: z.boolean().optional(),
52
51
  archiveOnRelease: z.boolean().optional(),
53
52
  }).strict();
54
53
  const pluginSandboxProviderKeySchema = z.string()
@@ -60,7 +59,6 @@ const pluginSandboxEnvironmentConfigSchema = z.object({
60
59
  timeoutMs: z.coerce.number().int().min(1).max(86_400_000).optional(),
61
60
  reuseLease: z.boolean().optional().default(false),
62
61
  streamRunLogs: z.boolean().optional(),
63
- streamAgentSessionOutput: z.boolean().optional(),
64
62
  archiveOnRelease: z.boolean().optional(),
65
63
  }).catchall(z.unknown());
66
64
  const pluginEnvironmentConfigSchema = z.object({
@@ -77,8 +75,25 @@ function toErrorMessage(error) {
77
75
  function getSandboxProvider(raw) {
78
76
  return typeof raw.provider === "string" && raw.provider.trim().length > 0 ? raw.provider.trim() : "fake";
79
77
  }
78
+ // Operator flags removed when session-output streaming moved to the verified
79
+ // capability snapshot. A saved environment config can still carry a removed key.
80
+ // The server now decides session-output streaming from the effective capability
81
+ // snapshot alone, so no consumer reads these flags. Strip a removed key before
82
+ // validation so a strict schema (the fake sandbox) still loads an old config,
83
+ // and so the removed flag never reaches the parsed config.
84
+ const REMOVED_SANDBOX_CONFIG_KEYS = ["streamAgentSessionOutput"];
85
+ function stripRemovedSandboxConfigKeys(raw) {
86
+ if (!REMOVED_SANDBOX_CONFIG_KEYS.some((key) => key in raw)) {
87
+ return raw;
88
+ }
89
+ const next = { ...raw };
90
+ for (const key of REMOVED_SANDBOX_CONFIG_KEYS) {
91
+ delete next[key];
92
+ }
93
+ return next;
94
+ }
80
95
  function parseSandboxEnvironmentConfig(input) {
81
- const raw = parseObject(input);
96
+ const raw = stripRemovedSandboxConfigKeys(parseObject(input));
82
97
  const provider = getSandboxProvider(raw);
83
98
  if (provider === "fake") {
84
99
  const parsed = fakeSandboxEnvironmentConfigSchema.safeParse(raw);
@@ -252,15 +267,14 @@ export function stripSandboxProviderEnvelope(config) {
252
267
  const { provider: _provider, ...driverConfig } = config;
253
268
  return driverConfig;
254
269
  }
255
- // The host owns these sandbox run-behavior flags, not the provider plugin. The
256
- // host reads them to select the run-log stream and the ACP session output
257
- // stream. The host passes the whole config to the plugin, so a plugin that
258
- // allowlists its own driver fields drops these flags from its normalized
259
- // config. Re-apply them from the parsed envelope after the plugin normalizes,
260
- // or a saved environment loses the operator opt-in and the stream never starts.
270
+ // The host owns this sandbox run-behavior flag, not the provider plugin. The
271
+ // host reads it to select the run-log stream. The host passes the whole config
272
+ // to the plugin, so a plugin that allowlists its own driver fields drops the
273
+ // flag from its normalized config. Re-apply it from the parsed envelope after
274
+ // the plugin normalizes, or a saved environment loses the operator opt-in and
275
+ // the stream never starts.
261
276
  const HOST_OWNED_SANDBOX_STREAM_FLAGS = [
262
277
  "streamRunLogs",
263
- "streamAgentSessionOutput",
264
278
  ];
265
279
  function applyHostOwnedSandboxStreamFlags(normalizedConfig, envelope) {
266
280
  const merged = { ...normalizedConfig };
@@ -509,6 +523,38 @@ export async function resolveEnvironmentDriverConfigForRuntime(db, companyId, en
509
523
  }
510
524
  return parsed;
511
525
  }
526
+ /**
527
+ * Resolve the connection secrets of a recorded sandbox config for a durable
528
+ * orphan-sandbox teardown. The retry reads the recorded config from the durable
529
+ * `pending_cleanup` lease row, not from the current environment. So this
530
+ * resolver must not require the environment binding: a delete removed the
531
+ * environment, or a provider change replaced the binding. It resolves each
532
+ * schema-declared secret ref by id at the latest version through
533
+ * `resolveSecretValueForSandboxCleanup`, which authorizes the read from the
534
+ * durable orphan record and skips the binding check. The resolved values are
535
+ * used once for the teardown RPC and never persisted.
536
+ */
537
+ export async function resolveSandboxCleanupConfigSecrets(db, companyId, config, context) {
538
+ if (config.provider === "fake")
539
+ return config;
540
+ const schema = await getSandboxProviderConfigSchema(db, config.provider);
541
+ const secrets = secretService(db);
542
+ let nextConfig = { ...config };
543
+ for (const path of collectSecretRefPaths(schema)) {
544
+ const current = canonicalizeSecretRefValue(readConfigValueAtPath(nextConfig, path), path);
545
+ if (typeof current !== "string")
546
+ continue;
547
+ const trimmed = current.trim();
548
+ if (!isUuidSecretRef(trimmed))
549
+ continue;
550
+ nextConfig = writeConfigValueAtPath(nextConfig, path, await secrets.resolveSecretValueForSandboxCleanup(companyId, trimmed, "latest", {
551
+ configPath: path,
552
+ issueId: context?.issueId ?? null,
553
+ heartbeatRunId: context?.heartbeatRunId ?? null,
554
+ }));
555
+ }
556
+ return nextConfig;
557
+ }
512
558
  export function readSshEnvironmentPrivateKeySecretId(environment) {
513
559
  if (environment.driver !== "ssh")
514
560
  return null;