@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.
Files changed (519) hide show
  1. package/dist/adapters/builtin-adapter-types.d.ts.map +1 -1
  2. package/dist/adapters/builtin-adapter-types.js +1 -0
  3. package/dist/adapters/builtin-adapter-types.js.map +1 -1
  4. package/dist/adapters/plugin-loader.d.ts +1 -0
  5. package/dist/adapters/plugin-loader.d.ts.map +1 -1
  6. package/dist/adapters/plugin-loader.js +12 -1
  7. package/dist/adapters/plugin-loader.js.map +1 -1
  8. package/dist/adapters/plugin-loader.test.d.ts +2 -0
  9. package/dist/adapters/plugin-loader.test.d.ts.map +1 -0
  10. package/dist/adapters/plugin-loader.test.js +37 -0
  11. package/dist/adapters/plugin-loader.test.js.map +1 -0
  12. package/dist/adapters/registry.d.ts.map +1 -1
  13. package/dist/adapters/registry.js +68 -5
  14. package/dist/adapters/registry.js.map +1 -1
  15. package/dist/adapters/registry.test.d.ts +2 -0
  16. package/dist/adapters/registry.test.d.ts.map +1 -0
  17. package/dist/adapters/registry.test.js +35 -0
  18. package/dist/adapters/registry.test.js.map +1 -0
  19. package/dist/app.d.ts.map +1 -1
  20. package/dist/app.js +5 -7
  21. package/dist/app.js.map +1 -1
  22. package/dist/auth/better-auth.d.ts +10 -0
  23. package/dist/auth/better-auth.d.ts.map +1 -1
  24. package/dist/auth/better-auth.js +47 -0
  25. package/dist/auth/better-auth.js.map +1 -1
  26. package/dist/auth/workspace-login-handoff-exchange.d.ts +75 -0
  27. package/dist/auth/workspace-login-handoff-exchange.d.ts.map +1 -0
  28. package/dist/auth/workspace-login-handoff-exchange.js +73 -0
  29. package/dist/auth/workspace-login-handoff-exchange.js.map +1 -0
  30. package/dist/auth/workspace-login-handoff-plugin.d.ts +40 -0
  31. package/dist/auth/workspace-login-handoff-plugin.d.ts.map +1 -0
  32. package/dist/auth/workspace-login-handoff-plugin.js +140 -0
  33. package/dist/auth/workspace-login-handoff-plugin.js.map +1 -0
  34. package/dist/auth/workspace-login-handoff.d.ts +189 -0
  35. package/dist/auth/workspace-login-handoff.d.ts.map +1 -0
  36. package/dist/auth/workspace-login-handoff.js +319 -0
  37. package/dist/auth/workspace-login-handoff.js.map +1 -0
  38. package/dist/build-info.json +3 -0
  39. package/dist/config.d.ts +1 -0
  40. package/dist/config.d.ts.map +1 -1
  41. package/dist/config.js +14 -0
  42. package/dist/config.js.map +1 -1
  43. package/dist/dev-runner-worktree.d.ts.map +1 -1
  44. package/dist/dev-runner-worktree.js +5 -0
  45. package/dist/dev-runner-worktree.js.map +1 -1
  46. package/dist/duplex-aggregate-ceiling-env.d.ts +21 -0
  47. package/dist/duplex-aggregate-ceiling-env.d.ts.map +1 -0
  48. package/dist/duplex-aggregate-ceiling-env.js +23 -0
  49. package/dist/duplex-aggregate-ceiling-env.js.map +1 -0
  50. package/dist/embedded-postgres-supervisor.d.ts +27 -0
  51. package/dist/embedded-postgres-supervisor.d.ts.map +1 -0
  52. package/dist/embedded-postgres-supervisor.js +72 -0
  53. package/dist/embedded-postgres-supervisor.js.map +1 -0
  54. package/dist/errors.d.ts +2 -0
  55. package/dist/errors.d.ts.map +1 -1
  56. package/dist/errors.js +6 -0
  57. package/dist/errors.js.map +1 -1
  58. package/dist/index.d.ts.map +1 -1
  59. package/dist/index.js +115 -7
  60. package/dist/index.js.map +1 -1
  61. package/dist/instrumentation.d.ts +33 -0
  62. package/dist/instrumentation.d.ts.map +1 -1
  63. package/dist/instrumentation.js +68 -1
  64. package/dist/instrumentation.js.map +1 -1
  65. package/dist/middleware/auth.d.ts.map +1 -1
  66. package/dist/middleware/auth.js +35 -10
  67. package/dist/middleware/auth.js.map +1 -1
  68. package/dist/middleware/error-handler.d.ts.map +1 -1
  69. package/dist/middleware/error-handler.js +8 -1
  70. package/dist/middleware/error-handler.js.map +1 -1
  71. package/dist/middleware/logger.d.ts.map +1 -1
  72. package/dist/middleware/logger.js +5 -2
  73. package/dist/middleware/logger.js.map +1 -1
  74. package/dist/middleware/redact-sensitive.d.ts.map +1 -1
  75. package/dist/middleware/redact-sensitive.js +4 -0
  76. package/dist/middleware/redact-sensitive.js.map +1 -1
  77. package/dist/middleware/validate.d.ts +3 -1
  78. package/dist/middleware/validate.d.ts.map +1 -1
  79. package/dist/middleware/validate.js +37 -0
  80. package/dist/middleware/validate.js.map +1 -1
  81. package/dist/routes/access.d.ts.map +1 -1
  82. package/dist/routes/access.js +20 -0
  83. package/dist/routes/access.js.map +1 -1
  84. package/dist/routes/activity.js +4 -4
  85. package/dist/routes/activity.js.map +1 -1
  86. package/dist/routes/adapter-login-route-spine.d.ts +81 -0
  87. package/dist/routes/adapter-login-route-spine.d.ts.map +1 -0
  88. package/dist/routes/adapter-login-route-spine.js +40 -0
  89. package/dist/routes/adapter-login-route-spine.js.map +1 -0
  90. package/dist/routes/adapters.d.ts +33 -0
  91. package/dist/routes/adapters.d.ts.map +1 -1
  92. package/dist/routes/adapters.js +35 -1
  93. package/dist/routes/adapters.js.map +1 -1
  94. package/dist/routes/adapters.test.d.ts +2 -0
  95. package/dist/routes/adapters.test.d.ts.map +1 -0
  96. package/dist/routes/adapters.test.js +58 -0
  97. package/dist/routes/adapters.test.js.map +1 -0
  98. package/dist/routes/agents.d.ts.map +1 -1
  99. package/dist/routes/agents.js +281 -91
  100. package/dist/routes/agents.js.map +1 -1
  101. package/dist/routes/cases.d.ts +11 -22
  102. package/dist/routes/cases.d.ts.map +1 -1
  103. package/dist/routes/cases.js +13 -13
  104. package/dist/routes/companies.js +3 -3
  105. package/dist/routes/decision-training.js +6 -6
  106. package/dist/routes/decisions.js +4 -4
  107. package/dist/routes/decisions.js.map +1 -1
  108. package/dist/routes/environments.d.ts.map +1 -1
  109. package/dist/routes/environments.js +79 -6
  110. package/dist/routes/environments.js.map +1 -1
  111. package/dist/routes/execution-workspaces.d.ts.map +1 -1
  112. package/dist/routes/execution-workspaces.js +384 -16
  113. package/dist/routes/execution-workspaces.js.map +1 -1
  114. package/dist/routes/file-resources.js +2 -2
  115. package/dist/routes/health.d.ts.map +1 -1
  116. package/dist/routes/health.js +58 -4
  117. package/dist/routes/health.js.map +1 -1
  118. package/dist/routes/instance-settings.d.ts.map +1 -1
  119. package/dist/routes/instance-settings.js +40 -0
  120. package/dist/routes/instance-settings.js.map +1 -1
  121. package/dist/routes/issues.d.ts +10 -0
  122. package/dist/routes/issues.d.ts.map +1 -1
  123. package/dist/routes/issues.js +495 -65
  124. package/dist/routes/issues.js.map +1 -1
  125. package/dist/routes/openapi.d.ts.map +1 -1
  126. package/dist/routes/openapi.js +241 -122
  127. package/dist/routes/openapi.js.map +1 -1
  128. package/dist/routes/pipelines.js +19 -19
  129. package/dist/routes/plugins.d.ts.map +1 -1
  130. package/dist/routes/plugins.js +22 -0
  131. package/dist/routes/plugins.js.map +1 -1
  132. package/dist/routes/projects.d.ts.map +1 -1
  133. package/dist/routes/projects.js +2 -0
  134. package/dist/routes/projects.js.map +1 -1
  135. package/dist/routes/routines.js +2 -2
  136. package/dist/routes/routines.js.map +1 -1
  137. package/dist/routes/secrets.d.ts +1 -1
  138. package/dist/routes/secrets.d.ts.map +1 -1
  139. package/dist/routes/secrets.js +39 -50
  140. package/dist/routes/secrets.js.map +1 -1
  141. package/dist/routes/setup-token-route.test.js +50 -3
  142. package/dist/routes/setup-token-route.test.js.map +1 -1
  143. package/dist/services/adapter-login-lease.d.ts +50 -0
  144. package/dist/services/adapter-login-lease.d.ts.map +1 -0
  145. package/dist/services/adapter-login-lease.js +26 -0
  146. package/dist/services/adapter-login-lease.js.map +1 -0
  147. package/dist/services/adapter-login-lease.test.d.ts +2 -0
  148. package/dist/services/adapter-login-lease.test.d.ts.map +1 -0
  149. package/dist/services/adapter-login-lease.test.js +68 -0
  150. package/dist/services/adapter-login-lease.test.js.map +1 -0
  151. package/dist/services/agent-action-audit.js +1 -1
  152. package/dist/services/agent-secret-bindings.d.ts +15 -0
  153. package/dist/services/agent-secret-bindings.d.ts.map +1 -1
  154. package/dist/services/agent-secret-bindings.js +2 -2
  155. package/dist/services/agent-secret-bindings.js.map +1 -1
  156. package/dist/services/agents.d.ts +13 -13
  157. package/dist/services/agents.d.ts.map +1 -1
  158. package/dist/services/agents.js +46 -5
  159. package/dist/services/agents.js.map +1 -1
  160. package/dist/services/artifact-review-documents.d.ts +34 -0
  161. package/dist/services/artifact-review-documents.d.ts.map +1 -0
  162. package/dist/services/artifact-review-documents.js +196 -0
  163. package/dist/services/artifact-review-documents.js.map +1 -0
  164. package/dist/services/assets.d.ts +1 -1
  165. package/dist/services/codex-device-login-credential-read.d.ts +58 -0
  166. package/dist/services/codex-device-login-credential-read.d.ts.map +1 -0
  167. package/dist/services/codex-device-login-credential-read.js +118 -0
  168. package/dist/services/codex-device-login-credential-read.js.map +1 -0
  169. package/dist/services/codex-device-login-reaper.d.ts.map +1 -1
  170. package/dist/services/codex-device-login-reaper.js +8 -5
  171. package/dist/services/codex-device-login-reaper.js.map +1 -1
  172. package/dist/services/codex-device-login-service.d.ts +127 -36
  173. package/dist/services/codex-device-login-service.d.ts.map +1 -1
  174. package/dist/services/codex-device-login-service.js +204 -84
  175. package/dist/services/codex-device-login-service.js.map +1 -1
  176. package/dist/services/company-portability.d.ts +3 -1
  177. package/dist/services/company-portability.d.ts.map +1 -1
  178. package/dist/services/company-portability.js +76 -20
  179. package/dist/services/company-portability.js.map +1 -1
  180. package/dist/services/company-skill-policy.d.ts +1 -1
  181. package/dist/services/costs.d.ts +1 -1
  182. package/dist/services/decisions.d.ts +6 -6
  183. package/dist/services/duplex-observability-recorder.d.ts +62 -0
  184. package/dist/services/duplex-observability-recorder.d.ts.map +1 -0
  185. package/dist/services/duplex-observability-recorder.js +54 -0
  186. package/dist/services/duplex-observability-recorder.js.map +1 -0
  187. package/dist/services/environment-config.js +5 -5
  188. package/dist/services/environment-config.js.map +1 -1
  189. package/dist/services/environment-custom-image-runtime.d.ts +116 -0
  190. package/dist/services/environment-custom-image-runtime.d.ts.map +1 -1
  191. package/dist/services/environment-custom-image-runtime.js +255 -1
  192. package/dist/services/environment-custom-image-runtime.js.map +1 -1
  193. package/dist/services/environment-custom-images.d.ts +39 -0
  194. package/dist/services/environment-custom-images.d.ts.map +1 -1
  195. package/dist/services/environment-custom-images.js +219 -17
  196. package/dist/services/environment-custom-images.js.map +1 -1
  197. package/dist/services/environment-driver-traits.d.ts +109 -0
  198. package/dist/services/environment-driver-traits.d.ts.map +1 -0
  199. package/dist/services/environment-driver-traits.js +102 -0
  200. package/dist/services/environment-driver-traits.js.map +1 -0
  201. package/dist/services/environment-execution-target.d.ts +4 -0
  202. package/dist/services/environment-execution-target.d.ts.map +1 -1
  203. package/dist/services/environment-execution-target.js +63 -7
  204. package/dist/services/environment-execution-target.js.map +1 -1
  205. package/dist/services/environment-run-orchestrator.d.ts +27 -1
  206. package/dist/services/environment-run-orchestrator.d.ts.map +1 -1
  207. package/dist/services/environment-run-orchestrator.js +24 -4
  208. package/dist/services/environment-run-orchestrator.js.map +1 -1
  209. package/dist/services/environment-runtime.d.ts +118 -20
  210. package/dist/services/environment-runtime.d.ts.map +1 -1
  211. package/dist/services/environment-runtime.js +436 -91
  212. package/dist/services/environment-runtime.js.map +1 -1
  213. package/dist/services/environments.d.ts.map +1 -1
  214. package/dist/services/environments.js +20 -2
  215. package/dist/services/environments.js.map +1 -1
  216. package/dist/services/execution-workspace-branch-ownership.d.ts +4 -0
  217. package/dist/services/execution-workspace-branch-ownership.d.ts.map +1 -0
  218. package/dist/services/execution-workspace-branch-ownership.js +9 -0
  219. package/dist/services/execution-workspace-branch-ownership.js.map +1 -0
  220. package/dist/services/execution-workspace-policy.d.ts.map +1 -1
  221. package/dist/services/execution-workspace-policy.js +3 -0
  222. package/dist/services/execution-workspace-policy.js.map +1 -1
  223. package/dist/services/execution-workspaces.d.ts +2 -0
  224. package/dist/services/execution-workspaces.d.ts.map +1 -1
  225. package/dist/services/execution-workspaces.js +90 -2
  226. package/dist/services/execution-workspaces.js.map +1 -1
  227. package/dist/services/external-objects.d.ts +19 -19
  228. package/dist/services/finance.d.ts +1 -1
  229. package/dist/services/goals.d.ts +2 -2
  230. package/dist/services/heartbeat-policy.d.ts +3 -0
  231. package/dist/services/heartbeat-policy.d.ts.map +1 -0
  232. package/dist/services/heartbeat-policy.js +10 -0
  233. package/dist/services/heartbeat-policy.js.map +1 -0
  234. package/dist/services/heartbeat-run-runtime-status.test.js +1 -1
  235. package/dist/services/heartbeat-run-runtime-status.test.js.map +1 -1
  236. package/dist/services/heartbeat.d.ts +23 -1
  237. package/dist/services/heartbeat.d.ts.map +1 -1
  238. package/dist/services/heartbeat.js +192 -11
  239. package/dist/services/heartbeat.js.map +1 -1
  240. package/dist/services/index.d.ts +1 -0
  241. package/dist/services/index.d.ts.map +1 -1
  242. package/dist/services/index.js +1 -0
  243. package/dist/services/index.js.map +1 -1
  244. package/dist/services/instance-settings.d.ts.map +1 -1
  245. package/dist/services/instance-settings.js +2 -0
  246. package/dist/services/instance-settings.js.map +1 -1
  247. package/dist/services/issue-dependency-wakeups.d.ts +57 -9
  248. package/dist/services/issue-dependency-wakeups.d.ts.map +1 -1
  249. package/dist/services/issue-dependency-wakeups.js +146 -14
  250. package/dist/services/issue-dependency-wakeups.js.map +1 -1
  251. package/dist/services/issue-dependency-wakeups.test.d.ts +2 -0
  252. package/dist/services/issue-dependency-wakeups.test.d.ts.map +1 -0
  253. package/dist/services/issue-dependency-wakeups.test.js +183 -0
  254. package/dist/services/issue-dependency-wakeups.test.js.map +1 -0
  255. package/dist/services/issue-recovery-actions.d.ts +6 -1
  256. package/dist/services/issue-recovery-actions.d.ts.map +1 -1
  257. package/dist/services/issue-recovery-actions.js +123 -44
  258. package/dist/services/issue-recovery-actions.js.map +1 -1
  259. package/dist/services/issue-thread-interactions.d.ts +8 -0
  260. package/dist/services/issue-thread-interactions.d.ts.map +1 -1
  261. package/dist/services/issue-thread-interactions.js +220 -10
  262. package/dist/services/issue-thread-interactions.js.map +1 -1
  263. package/dist/services/issues.d.ts +8 -7
  264. package/dist/services/issues.d.ts.map +1 -1
  265. package/dist/services/issues.js +84 -12
  266. package/dist/services/issues.js.map +1 -1
  267. package/dist/services/local-service-supervisor.d.ts +61 -1
  268. package/dist/services/local-service-supervisor.d.ts.map +1 -1
  269. package/dist/services/local-service-supervisor.js +221 -25
  270. package/dist/services/local-service-supervisor.js.map +1 -1
  271. package/dist/services/login-command.d.ts +46 -0
  272. package/dist/services/login-command.d.ts.map +1 -0
  273. package/dist/services/login-command.js +87 -0
  274. package/dist/services/login-command.js.map +1 -0
  275. package/dist/services/login-command.test.d.ts +2 -0
  276. package/dist/services/login-command.test.d.ts.map +1 -0
  277. package/dist/services/login-command.test.js +71 -0
  278. package/dist/services/login-command.test.js.map +1 -0
  279. package/dist/services/managed-workspace-identity.d.ts +140 -0
  280. package/dist/services/managed-workspace-identity.d.ts.map +1 -0
  281. package/dist/services/managed-workspace-identity.js +277 -0
  282. package/dist/services/managed-workspace-identity.js.map +1 -0
  283. package/dist/services/plugin-environment-driver.d.ts +15 -1
  284. package/dist/services/plugin-environment-driver.d.ts.map +1 -1
  285. package/dist/services/plugin-environment-driver.js +23 -1
  286. package/dist/services/plugin-environment-driver.js.map +1 -1
  287. package/dist/services/plugin-host-services.d.ts +3 -2
  288. package/dist/services/plugin-host-services.d.ts.map +1 -1
  289. package/dist/services/plugin-host-services.js +11 -2
  290. package/dist/services/plugin-host-services.js.map +1 -1
  291. package/dist/services/plugin-loader.d.ts.map +1 -1
  292. package/dist/services/plugin-loader.js +39 -8
  293. package/dist/services/plugin-loader.js.map +1 -1
  294. package/dist/services/plugin-managed-agents.d.ts.map +1 -1
  295. package/dist/services/plugin-managed-agents.js +50 -5
  296. package/dist/services/plugin-managed-agents.js.map +1 -1
  297. package/dist/services/plugin-manifest-validator.d.ts.map +1 -1
  298. package/dist/services/plugin-manifest-validator.js +5 -2
  299. package/dist/services/plugin-manifest-validator.js.map +1 -1
  300. package/dist/services/plugin-registry.d.ts +5 -5
  301. package/dist/services/plugin-worker-manager.d.ts +158 -11
  302. package/dist/services/plugin-worker-manager.d.ts.map +1 -1
  303. package/dist/services/plugin-worker-manager.js +1139 -79
  304. package/dist/services/plugin-worker-manager.js.map +1 -1
  305. package/dist/services/projects.d.ts +1 -1
  306. package/dist/services/recovery/disposition-repair.d.ts +24 -0
  307. package/dist/services/recovery/disposition-repair.d.ts.map +1 -0
  308. package/dist/services/recovery/disposition-repair.js +125 -0
  309. package/dist/services/recovery/disposition-repair.js.map +1 -0
  310. package/dist/services/recovery/service.d.ts +6 -6
  311. package/dist/services/recovery/service.d.ts.map +1 -1
  312. package/dist/services/recovery/service.js +856 -384
  313. package/dist/services/recovery/service.js.map +1 -1
  314. package/dist/services/recovery/stranded-notice.js +4 -4
  315. package/dist/services/recovery/stranded-notice.js.map +1 -1
  316. package/dist/services/recovery/stranded-notice.test.js +1 -1
  317. package/dist/services/recovery/stranded-notice.test.js.map +1 -1
  318. package/dist/services/recovery/successful-run-handoff.d.ts +1 -1
  319. package/dist/services/recovery/successful-run-handoff.d.ts.map +1 -1
  320. package/dist/services/recovery/successful-run-handoff.js +6 -4
  321. package/dist/services/recovery/successful-run-handoff.js.map +1 -1
  322. package/dist/services/recovery/successful-run-handoff.test.js +1 -1
  323. package/dist/services/recovery/successful-run-handoff.test.js.map +1 -1
  324. package/dist/services/recovery-observability.d.ts +1 -1
  325. package/dist/services/recovery-observability.d.ts.map +1 -1
  326. package/dist/services/recovery-observability.js +4 -1
  327. package/dist/services/recovery-observability.js.map +1 -1
  328. package/dist/services/routines.d.ts.map +1 -1
  329. package/dist/services/routines.js +86 -1
  330. package/dist/services/routines.js.map +1 -1
  331. package/dist/services/runtime-exposure/loopback-listener.js +1 -1
  332. package/dist/services/runtime-exposure/loopback-listener.js.map +1 -1
  333. package/dist/services/runtime-exposure/loopback-listener.test.js +1 -1
  334. package/dist/services/runtime-exposure/loopback-listener.test.js.map +1 -1
  335. package/dist/services/scripts/codex-auth-read.cjs +93 -0
  336. package/dist/services/secret-proposal-authorization.d.ts +15 -0
  337. package/dist/services/secret-proposal-authorization.d.ts.map +1 -0
  338. package/dist/services/secret-proposal-authorization.js +29 -0
  339. package/dist/services/secret-proposal-authorization.js.map +1 -0
  340. package/dist/services/secret-proposal-notifications.d.ts +18 -0
  341. package/dist/services/secret-proposal-notifications.d.ts.map +1 -0
  342. package/dist/services/secret-proposal-notifications.js +37 -0
  343. package/dist/services/secret-proposal-notifications.js.map +1 -0
  344. package/dist/services/secret-proposals.d.ts +20 -10
  345. package/dist/services/secret-proposals.d.ts.map +1 -1
  346. package/dist/services/secret-proposals.js +205 -14
  347. package/dist/services/secret-proposals.js.map +1 -1
  348. package/dist/services/secrets.d.ts +3 -3
  349. package/dist/services/settings-visibility.d.ts +17 -0
  350. package/dist/services/settings-visibility.d.ts.map +1 -0
  351. package/dist/services/settings-visibility.js +29 -0
  352. package/dist/services/settings-visibility.js.map +1 -0
  353. package/dist/services/setup-token-reaper.d.ts +36 -0
  354. package/dist/services/setup-token-reaper.d.ts.map +1 -0
  355. package/dist/services/setup-token-reaper.js +38 -0
  356. package/dist/services/setup-token-reaper.js.map +1 -0
  357. package/dist/services/setup-token-reaper.test.d.ts +2 -0
  358. package/dist/services/setup-token-reaper.test.d.ts.map +1 -0
  359. package/dist/services/setup-token-reaper.test.js +123 -0
  360. package/dist/services/setup-token-reaper.test.js.map +1 -0
  361. package/dist/services/setup-token-session.d.ts +57 -45
  362. package/dist/services/setup-token-session.d.ts.map +1 -1
  363. package/dist/services/setup-token-session.js +118 -110
  364. package/dist/services/setup-token-session.js.map +1 -1
  365. package/dist/services/setup-token-session.test.js +88 -47
  366. package/dist/services/setup-token-session.test.js.map +1 -1
  367. package/dist/services/setup-token-transport-binding.d.ts +20 -12
  368. package/dist/services/setup-token-transport-binding.d.ts.map +1 -1
  369. package/dist/services/setup-token-transport-binding.js +59 -32
  370. package/dist/services/setup-token-transport-binding.js.map +1 -1
  371. package/dist/services/setup-token-transport-binding.test.js +50 -17
  372. package/dist/services/setup-token-transport-binding.test.js.map +1 -1
  373. package/dist/services/smoke-lab.d.ts +1 -1
  374. package/dist/services/stalled-review-decisions.d.ts +1 -1
  375. package/dist/services/status-cards.d.ts +168 -168
  376. package/dist/services/tool-access-policy.d.ts +2 -2
  377. package/dist/services/tool-gateway.d.ts +1 -1
  378. package/dist/services/work-products.d.ts +19 -0
  379. package/dist/services/work-products.d.ts.map +1 -1
  380. package/dist/services/work-products.js +50 -3
  381. package/dist/services/work-products.js.map +1 -1
  382. package/dist/services/workspace-git-operation-scheduler.test.js +10 -3
  383. package/dist/services/workspace-git-operation-scheduler.test.js.map +1 -1
  384. package/dist/services/workspace-instance-cleanup.d.ts +9 -0
  385. package/dist/services/workspace-instance-cleanup.d.ts.map +1 -1
  386. package/dist/services/workspace-instance-cleanup.js +29 -3
  387. package/dist/services/workspace-instance-cleanup.js.map +1 -1
  388. package/dist/services/workspace-login-handoff-issuer.d.ts +95 -0
  389. package/dist/services/workspace-login-handoff-issuer.d.ts.map +1 -0
  390. package/dist/services/workspace-login-handoff-issuer.js +147 -0
  391. package/dist/services/workspace-login-handoff-issuer.js.map +1 -0
  392. package/dist/services/workspace-operations.d.ts +4 -1
  393. package/dist/services/workspace-operations.d.ts.map +1 -1
  394. package/dist/services/workspace-operations.js +29 -15
  395. package/dist/services/workspace-operations.js.map +1 -1
  396. package/dist/services/workspace-readiness.d.ts +56 -0
  397. package/dist/services/workspace-readiness.d.ts.map +1 -0
  398. package/dist/services/workspace-readiness.js +250 -0
  399. package/dist/services/workspace-readiness.js.map +1 -0
  400. package/dist/services/workspace-realization.d.ts.map +1 -1
  401. package/dist/services/workspace-realization.js +5 -33
  402. package/dist/services/workspace-realization.js.map +1 -1
  403. package/dist/services/workspace-runtime-exposure.test.js +321 -12
  404. package/dist/services/workspace-runtime-exposure.test.js.map +1 -1
  405. package/dist/services/workspace-runtime-leases.d.ts.map +1 -1
  406. package/dist/services/workspace-runtime-leases.js +1 -1
  407. package/dist/services/workspace-runtime-leases.js.map +1 -1
  408. package/dist/services/workspace-runtime-read-model.d.ts +8 -8
  409. package/dist/services/workspace-runtime-read-model.test.js +20 -0
  410. package/dist/services/workspace-runtime-read-model.test.js.map +1 -1
  411. package/dist/services/workspace-runtime-ready-comment.test.js +1 -0
  412. package/dist/services/workspace-runtime-ready-comment.test.js.map +1 -1
  413. package/dist/services/workspace-runtime.d.ts +77 -4
  414. package/dist/services/workspace-runtime.d.ts.map +1 -1
  415. package/dist/services/workspace-runtime.js +1020 -126
  416. package/dist/services/workspace-runtime.js.map +1 -1
  417. package/dist/worktree-config.d.ts.map +1 -1
  418. package/dist/worktree-config.js +3 -76
  419. package/dist/worktree-config.js.map +1 -1
  420. package/dist/worktree-seed-manifest.d.ts +8 -0
  421. package/dist/worktree-seed-manifest.d.ts.map +1 -0
  422. package/dist/worktree-seed-manifest.js +47 -0
  423. package/dist/worktree-seed-manifest.js.map +1 -0
  424. package/package.json +34 -30
  425. package/skills/paperclip/SKILL.md +2 -0
  426. package/skills/paperclip/references/api-reference.md +44 -2
  427. package/ui-dist/assets/CompanyExport-DnEsO-St.js +4 -0
  428. package/ui-dist/assets/{abnfDiagram-N423BO3Z-BvgoV-u5.js → abnfDiagram-N423BO3Z-2ff8TsQ0.js} +1 -1
  429. package/ui-dist/assets/{arc-BInnUBUU.js → arc-B2AXsH34.js} +1 -1
  430. package/ui-dist/assets/architectureDiagram-T3A2C74G-BDxtKMxk.js +36 -0
  431. package/ui-dist/assets/{blockDiagram-VBNYF7ZC-D9kzAkLN.js → blockDiagram-VBNYF7ZC-BB8T5Mj5.js} +1 -1
  432. package/ui-dist/assets/{c4Diagram-5PPSVZJV-BwzsgV_0.js → c4Diagram-5PPSVZJV-lMo8qk-x.js} +1 -1
  433. package/ui-dist/assets/channel-DCTVZpyq.js +1 -0
  434. package/ui-dist/assets/{chunk-2GRJ4B5K-D2EQ9vrl.js → chunk-2GRJ4B5K-CsS7EB3G.js} +1 -1
  435. package/ui-dist/assets/{chunk-2Q5K7J3B-DOA_8fSd.js → chunk-2Q5K7J3B-DFyQPjoR.js} +1 -1
  436. package/ui-dist/assets/{chunk-5RXB4S5H-CT5ukRiT.js → chunk-5RXB4S5H-No2SHOQR.js} +1 -1
  437. package/ui-dist/assets/{chunk-5VM5RSS4-D2gOlkyB.js → chunk-5VM5RSS4-DdxQO7V9.js} +1 -1
  438. package/ui-dist/assets/{chunk-6Q2QTUOP-DUb6aG8c.js → chunk-6Q2QTUOP-gbHjh-aK.js} +1 -1
  439. package/ui-dist/assets/{chunk-GF5L2VYU-BPabG3Cx.js → chunk-GF5L2VYU-h-BBl6NY.js} +1 -1
  440. package/ui-dist/assets/{chunk-JWPE2WC7-scNfhlZz.js → chunk-JWPE2WC7-Q3pJdTz5.js} +1 -1
  441. package/ui-dist/assets/{chunk-KBJHAD2P-BcRAzRpq.js → chunk-KBJHAD2P-Ba8LGLSx.js} +1 -1
  442. package/ui-dist/assets/{chunk-RYQCIY6F-BiZ0-EGh.js → chunk-RYQCIY6F-9VcvykBo.js} +1 -1
  443. package/ui-dist/assets/{chunk-XXDRQBXY-lJULxFIE.js → chunk-XXDRQBXY-NVbjDH4W.js} +1 -1
  444. package/ui-dist/assets/classDiagram-JCYQIIEL-CzJ88u6h.js +1 -0
  445. package/ui-dist/assets/classDiagram-v2-OCEON4UE-CzJ88u6h.js +1 -0
  446. package/ui-dist/assets/cose-bilkent-JH36ORCC-Cdz4wtUh.js +1 -0
  447. package/ui-dist/assets/{cynefin-VYW2F7L2-B34jJY1x.js → cynefin-VYW2F7L2-MpzJkW5s.js} +1 -1
  448. package/ui-dist/assets/{cynefinDiagram-MW4NZA55-DQ8QK8JK.js → cynefinDiagram-MW4NZA55-_Nx8av7i.js} +1 -1
  449. package/ui-dist/assets/{dagre-VZM6K2ZE-B7lSKgxH.js → dagre-VZM6K2ZE-DcZTQ4Oh.js} +1 -1
  450. package/ui-dist/assets/{diagram-7IWD3JNH-B3hLAFGE.js → diagram-7IWD3JNH-UyLi2mee.js} +1 -1
  451. package/ui-dist/assets/{diagram-B4RE2ZJO-CH9Ro9e0.js → diagram-B4RE2ZJO-B6p0Ivqg.js} +1 -1
  452. package/ui-dist/assets/{diagram-LBJQPF4R-DdPVMii7.js → diagram-LBJQPF4R-C8u6pa97.js} +1 -1
  453. package/ui-dist/assets/{diagram-Q27KOJAE-f5VXswjc.js → diagram-Q27KOJAE-DbwyagW0.js} +1 -1
  454. package/ui-dist/assets/{diagram-UB23O5K3-DGqxixsR.js → diagram-UB23O5K3-Cn5BMEH7.js} +1 -1
  455. package/ui-dist/assets/{ebnfDiagram-BXEA7PRR-C-1klg_w.js → ebnfDiagram-BXEA7PRR-vE0IZma9.js} +1 -1
  456. package/ui-dist/assets/{erDiagram-JOGREHBK-Dt4qK4gv.js → erDiagram-JOGREHBK-3OZVIlVG.js} +1 -1
  457. package/ui-dist/assets/{flowDiagram-UKHOOZJN-9ZlrTuET.js → flowDiagram-UKHOOZJN-C94FiPyr.js} +1 -1
  458. package/ui-dist/assets/ganttDiagram-PKOTCBZU-DMVaPmF-.js +292 -0
  459. package/ui-dist/assets/{gitGraphDiagram-DS77QQ5N-HH2fSgad.js → gitGraphDiagram-DS77QQ5N-yeFtJ689.js} +1 -1
  460. package/ui-dist/assets/{index-Cm6iEYPt.js → index-B4ZF3vY8.js} +288 -224
  461. package/ui-dist/assets/{index-CHXG4GPL.js → index-Bi_vqkcQ.js} +1 -1
  462. package/ui-dist/assets/{index-Bc9g6q63.js → index-BjDGQg9-.js} +1 -1
  463. package/ui-dist/assets/{index-FHzrJ7iQ.js → index-BnpyUMTb.js} +1 -1
  464. package/ui-dist/assets/{index-C1mpWCcn.js → index-BoqQTVMA.js} +1 -1
  465. package/ui-dist/assets/index-Bq-Mr-4x.js +1 -0
  466. package/ui-dist/assets/{index-DceuCrr8.js → index-Brb2U7N4.js} +1 -1
  467. package/ui-dist/assets/{index-DQIrrn2L.js → index-BsBybVwH.js} +1 -1
  468. package/ui-dist/assets/{index-CQhaM6qd.js → index-C2iv4Wgu.js} +1 -1
  469. package/ui-dist/assets/{index-DV2FOgyD.js → index-CKxIu7uO.js} +1 -1
  470. package/ui-dist/assets/{index-DU4U1fuv.js → index-Cb4VGIwp.js} +1 -1
  471. package/ui-dist/assets/{index-B61ORkIb.js → index-ChpszwcO.js} +1 -1
  472. package/ui-dist/assets/{index-DlVBBF8o.js → index-CoQFdT8N.js} +1 -1
  473. package/ui-dist/assets/index-D6P8_f0W.css +1 -0
  474. package/ui-dist/assets/index-DKdmghUG.js +1 -0
  475. package/ui-dist/assets/{index-CVTL3aAL.js → index-DaBci7Bx.js} +1 -1
  476. package/ui-dist/assets/{index-diFs0CNC.js → index-DjYaNiXZ.js} +1 -1
  477. package/ui-dist/assets/{index-Bf7tyGxE.js → index-DxTBJl4h.js} +1 -1
  478. package/ui-dist/assets/{index-DsdVneqe.js → index-Dz3E8nn0.js} +1 -1
  479. package/ui-dist/assets/{index-DvFUXI-Q.js → index-J7dz_hap.js} +1 -1
  480. package/ui-dist/assets/{index-CLu3Tfpv.js → index-JMp2Gpnz.js} +1 -1
  481. package/ui-dist/assets/{index-CcRTJ93J.js → index-Kp6wavQt.js} +1 -1
  482. package/ui-dist/assets/{index-BvFx-4KW.js → index-LBhYZ0L4.js} +1 -1
  483. package/ui-dist/assets/{index-BbAhzCq8.js → index-c3C0P6l8.js} +4 -4
  484. package/ui-dist/assets/{index-BY5ITKmG.js → index-pBEPheTW.js} +1 -1
  485. package/ui-dist/assets/{infoDiagram-6WML65LV-2jai2fw-.js → infoDiagram-6WML65LV-BiL7jKLA.js} +1 -1
  486. package/ui-dist/assets/{ishikawaDiagram-WSZJBQD7-CUmGhmEb.js → ishikawaDiagram-WSZJBQD7-DYcQy41D.js} +1 -1
  487. package/ui-dist/assets/{journeyDiagram-NVQOT4AX-CGQuPDO1.js → journeyDiagram-NVQOT4AX-Bxva6JgA.js} +1 -1
  488. package/ui-dist/assets/{kanban-definition-27J2QSJJ-zgEPcbHl.js → kanban-definition-27J2QSJJ-B2HpN34Q.js} +1 -1
  489. package/ui-dist/assets/{linear-BVf5VtLS.js → linear-Dq8qSESw.js} +1 -1
  490. package/ui-dist/assets/{mermaid.core-D2TFkGfI.js → mermaid.core-Ikay8Cpl.js} +35 -35
  491. package/ui-dist/assets/{mindmap-definition-FAOFIHXS-xoAQ0Lb_.js → mindmap-definition-FAOFIHXS-C-SIdYSY.js} +1 -1
  492. package/ui-dist/assets/{pegDiagram-VL7TDLO6-CBR1PWLr.js → pegDiagram-VL7TDLO6-C7rIJ_13.js} +1 -1
  493. package/ui-dist/assets/{pieDiagram-7S7Q4E2Y-BMPnzK_e.js → pieDiagram-7S7Q4E2Y-3gx0a0ve.js} +1 -1
  494. package/ui-dist/assets/{quadrantDiagram-CIZ2JOQS-CPtVUPkR.js → quadrantDiagram-CIZ2JOQS-BiwM9QGv.js} +1 -1
  495. package/ui-dist/assets/{railroadDiagram-AXF67PYL-DC0lsZV1.js → railroadDiagram-AXF67PYL-rFS8XcFA.js} +1 -1
  496. package/ui-dist/assets/{requirementDiagram-LRYGKXZP-BF6k05SB.js → requirementDiagram-LRYGKXZP-CEAUDUTQ.js} +1 -1
  497. package/ui-dist/assets/{sankeyDiagram-W5VNT64P-CRN0ibiP.js → sankeyDiagram-W5VNT64P-B7anpjlM.js} +1 -1
  498. package/ui-dist/assets/{sequenceDiagram-SI44F4Z6-CQtTiPWm.js → sequenceDiagram-SI44F4Z6-CJEdJvm_.js} +1 -1
  499. package/ui-dist/assets/{sizeCapture-X5ZJPWSS-BdjuGZd1.js → sizeCapture-X5ZJPWSS-CU1Vm6c1.js} +1 -1
  500. package/ui-dist/assets/{stateDiagram-OKZ733FA-B99onxyh.js → stateDiagram-OKZ733FA-wxVV9WIi.js} +1 -1
  501. package/ui-dist/assets/stateDiagram-v2-UEYNNEHI-BIFLqlqR.js +1 -0
  502. package/ui-dist/assets/{swimlanes-SLNWSIFB-BIByPbrL.js → swimlanes-SLNWSIFB-Cd-C1Z_k.js} +2 -2
  503. package/ui-dist/assets/swimlanesDiagram-ULZ7WXOC-CoBROkkd.js +8 -0
  504. package/ui-dist/assets/{timeline-definition-Z64GVDOM-I1NgOcn9.js → timeline-definition-Z64GVDOM-SWngk4aR.js} +1 -1
  505. package/ui-dist/assets/{vennDiagram-T6HMQDX7-D6t2Njcl.js → vennDiagram-T6HMQDX7-DFdPUr36.js} +1 -1
  506. package/ui-dist/assets/{wardleyDiagram-T6FBY63Y-BiYKm9gh.js → wardleyDiagram-T6FBY63Y-C6IlrZ7t.js} +1 -1
  507. package/ui-dist/assets/{xychartDiagram-ELKLHX3M-BhwXKWIa.js → xychartDiagram-ELKLHX3M-BNm6hHGl.js} +1 -1
  508. package/ui-dist/index.html +2 -2
  509. package/ui-dist/assets/architectureDiagram-T3A2C74G-Dg4MziOm.js +0 -36
  510. package/ui-dist/assets/channel-qoSYbCn0.js +0 -1
  511. package/ui-dist/assets/classDiagram-JCYQIIEL-B24u1REs.js +0 -1
  512. package/ui-dist/assets/classDiagram-v2-OCEON4UE-B24u1REs.js +0 -1
  513. package/ui-dist/assets/cose-bilkent-JH36ORCC-Do8pe8JB.js +0 -1
  514. package/ui-dist/assets/ganttDiagram-PKOTCBZU-CE3lyvFq.js +0 -292
  515. package/ui-dist/assets/index-BHiUiToL.css +0 -1
  516. package/ui-dist/assets/index-hkanj4t6.js +0 -1
  517. package/ui-dist/assets/index-yRJnh4vx.js +0 -1
  518. package/ui-dist/assets/stateDiagram-v2-UEYNNEHI-bzFlYBZ1.js +0 -1
  519. package/ui-dist/assets/swimlanesDiagram-ULZ7WXOC-DgdkBnuK.js +0 -8
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login-command.js","sourceRoot":"","sources":["../../src/services/login-command.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,4EAA4E;AAC5E,+EAA+E;AAC/E,+EAA+E;AAC/E,wEAAwE;AACxE,0CAA0C;AAC1C,EAAE;AACF,gFAAgF;AAChF,iFAAiF;AACjF,2EAA2E;AAS3E;;;;GAIG;AACH,MAAM,iCAAiC,GAA8C;IACnF,YAAY,EAAE,QAAQ;IACtB,WAAW,EAAE,OAAO;CACrB,CAAC;AAEF,sEAAsE;AACtE,MAAM,CAAC,MAAM,iCAAiC,GAAG,+BAA+B,CAAC;AACjF,kEAAkE;AAClE,MAAM,CAAC,MAAM,0BAA0B,GAAG,gCAAgC,CAAC;AAE3E;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CAAC,WAAmB;IACxD,MAAM,GAAG,GAAG,iCAAiC,CAAC,WAAW,CAAC,CAAC;IAC3D,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACrD,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC9C,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,OAAO,CAAC;AACjD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,kCAAkC,CAAC,WAAmB;IACpE,OAAO,iCAAiC,CAAC,WAAW,CAAC,KAAK,SAAS,CAAC;AACtE,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,8BAA8B,CAAC;AAEtE,6EAA6E;AAC7E,MAAM,YAAY,GAAG,gEAAgE,CAAC;AAEtF;;;;;GAKG;AACH,MAAM,oBAAoB,GAAG,IAAI,MAAM,CACrC,IAAI,uBAAuB,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,gEAAgE,CACnI,CAAC;AAEF;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAAC,WAAmB;IACxD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,GAAG,uBAAuB,IAAI,WAAW,EAAE,CAAC;AACrD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,wBAAwB,CAAC,WAAmB;IAC1D,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;QAC5C,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC9C,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=login-command.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login-command.test.d.ts","sourceRoot":"","sources":["../../src/services/login-command.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,71 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { deriveLoginSessionHome, isLoginCommandKey, isLoginCommandSupportedAdapterType, LOGIN_SESSION_HOME_ROOT, resolveLoginCommandKey, validateLoginSessionHome, } from "./login-command.js";
3
+ const UUID = "11111111-2222-4333-8444-555555555555";
4
+ describe("resolveLoginCommandKey", () => {
5
+ it("resolves the trusted adapter type to the closed key", () => {
6
+ expect(resolveLoginCommandKey("claude_local")).toBe("claude");
7
+ expect(resolveLoginCommandKey("codex_local")).toBe("codex");
8
+ });
9
+ it("fails closed for an unmapped adapter type", () => {
10
+ // The provider driver key and an unknown adapter confer no command authority.
11
+ expect(() => resolveLoginCommandKey("daytona")).toThrow("LOGIN_PTY_UNSUPPORTED_ADAPTER");
12
+ expect(() => resolveLoginCommandKey("gemini_local")).toThrow("LOGIN_PTY_UNSUPPORTED_ADAPTER");
13
+ expect(() => resolveLoginCommandKey("")).toThrow("LOGIN_PTY_UNSUPPORTED_ADAPTER");
14
+ });
15
+ });
16
+ describe("isLoginCommandKey", () => {
17
+ it("accepts only the closed key set", () => {
18
+ expect(isLoginCommandKey("claude")).toBe(true);
19
+ expect(isLoginCommandKey("codex")).toBe(true);
20
+ expect(isLoginCommandKey("gemini")).toBe(false);
21
+ expect(isLoginCommandKey("rm -rf /")).toBe(false);
22
+ expect(isLoginCommandKey(undefined)).toBe(false);
23
+ });
24
+ });
25
+ describe("isLoginCommandSupportedAdapterType", () => {
26
+ it("accepts only the adapter types the closed command map holds", () => {
27
+ // The admission guard reads this predicate, so it must match the map that
28
+ // the opener resolves. The mapped types pass; an unmapped type fails closed.
29
+ expect(isLoginCommandSupportedAdapterType("claude_local")).toBe(true);
30
+ expect(isLoginCommandSupportedAdapterType("codex_local")).toBe(true);
31
+ expect(isLoginCommandSupportedAdapterType("gemini_local")).toBe(false);
32
+ expect(isLoginCommandSupportedAdapterType("daytona")).toBe(false);
33
+ expect(isLoginCommandSupportedAdapterType("")).toBe(false);
34
+ });
35
+ });
36
+ describe("deriveLoginSessionHome", () => {
37
+ it("derives the exact UUID-form absolute path", () => {
38
+ expect(deriveLoginSessionHome(UUID)).toBe(`${LOGIN_SESSION_HOME_ROOT}/${UUID}`);
39
+ });
40
+ it("rejects a non-UUID id", () => {
41
+ expect(() => deriveLoginSessionHome("not-a-uuid")).toThrow("LOGIN_PTY_INVALID_SESSION_HOME");
42
+ expect(() => deriveLoginSessionHome("")).toThrow("LOGIN_PTY_INVALID_SESSION_HOME");
43
+ });
44
+ });
45
+ describe("validateLoginSessionHome", () => {
46
+ it("accepts the exact derived path shape", () => {
47
+ expect(() => validateLoginSessionHome(`${LOGIN_SESSION_HOME_ROOT}/${UUID}`)).not.toThrow();
48
+ });
49
+ it("rejects an empty, relative, traversal, whitespace, control, or metacharacter candidate", () => {
50
+ const candidates = [
51
+ "",
52
+ "paperclip-adapter-login/" + UUID,
53
+ `${LOGIN_SESSION_HOME_ROOT}/../${UUID}`,
54
+ `${LOGIN_SESSION_HOME_ROOT}/${UUID}/..`,
55
+ `${LOGIN_SESSION_HOME_ROOT}/ ${UUID}`,
56
+ `${LOGIN_SESSION_HOME_ROOT}/${UUID} `,
57
+ `${LOGIN_SESSION_HOME_ROOT}/${UUID}\n`,
58
+ `${LOGIN_SESSION_HOME_ROOT}/${UUID}\t`,
59
+ `${LOGIN_SESSION_HOME_ROOT}/${UUID}\0`,
60
+ `${LOGIN_SESSION_HOME_ROOT}/${UUID};rm -rf /`,
61
+ `${LOGIN_SESSION_HOME_ROOT}/$(id)`,
62
+ `${LOGIN_SESSION_HOME_ROOT}/${UUID}&&whoami`,
63
+ `/tmp/other/${UUID}`,
64
+ `${LOGIN_SESSION_HOME_ROOT}/NOTHEX11-2222-4333-8444-555555555555`,
65
+ ];
66
+ for (const candidate of candidates) {
67
+ expect(() => validateLoginSessionHome(candidate), candidate).toThrow("LOGIN_PTY_INVALID_SESSION_HOME");
68
+ }
69
+ });
70
+ });
71
+ //# sourceMappingURL=login-command.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login-command.test.js","sourceRoot":"","sources":["../../src/services/login-command.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,140 @@
1
+ /**
2
+ * Control-plane half of the workspace readiness/handoff contract (PAP-17572).
3
+ *
4
+ * Resolves the identity and derived key material for one managed workspace,
5
+ * injects them into the guest process, and probes the guest's *protected*
6
+ * readiness so `running / healthy` can never be published for a workspace whose
7
+ * clone, identity, or login handoff disagrees with what was expected.
8
+ *
9
+ * Identity always comes from the worktree's own recorded instance pointer, never
10
+ * from a branch name or basename heuristic, and an unresolvable identity fails
11
+ * closed (no key injected, no readiness claimed).
12
+ */
13
+ import { type Db } from "@paperclipai/db";
14
+ import type { WorkspaceReadinessProbeResult } from "@paperclipai/shared";
15
+ /**
16
+ * Per-probe budget. Matched to the semantic transport probe it replaces, so
17
+ * upgrading a runtime health check to the readiness contract cannot make a
18
+ * managed start or a reuse decision slower than it was.
19
+ */
20
+ export declare const WORKSPACE_READINESS_PROBE_TIMEOUT_MS = 2000;
21
+ export type ManagedWorkspaceIdentity = {
22
+ instanceId: string;
23
+ executionWorkspaceId: string;
24
+ companyId: string;
25
+ handoffKey: string;
26
+ readinessToken: string;
27
+ /** Whether the root secret was configured explicitly or derived. */
28
+ secretSource: "dedicated" | "derived";
29
+ };
30
+ /**
31
+ * Resolve the isolated instance id a worktree actually runs as.
32
+ *
33
+ * The worktree's `.paperclip/.env` pointer is authoritative because it is what
34
+ * the guest process itself loads. The path-derived id is only a fallback for a
35
+ * worktree provisioned before the pointer existed, and the two agree by
36
+ * construction for anything Paperclip provisioned.
37
+ */
38
+ export declare function resolveManagedWorkspaceInstanceId(workspaceCwd: string): string | null;
39
+ export declare function resolveManagedWorkspaceIdentity(input: {
40
+ workspaceCwd: string | null | undefined;
41
+ executionWorkspaceId: string | null | undefined;
42
+ companyId: string | null | undefined;
43
+ env?: NodeJS.ProcessEnv;
44
+ }): ManagedWorkspaceIdentity | null;
45
+ /**
46
+ * Env injected into a managed workspace's guest process.
47
+ *
48
+ * Only the *derived* per-workspace values cross the boundary: the guest never
49
+ * receives the root secret, so a compromised workspace cannot mint a ticket for
50
+ * a sibling workspace.
51
+ */
52
+ export declare function buildManagedWorkspaceGuestEnv(identity: ManagedWorkspaceIdentity): Record<string, string>;
53
+ /**
54
+ * Read a managed workspace's protected readiness over loopback.
55
+ *
56
+ * Failure modes are distinguished so callers can tell "not reachable" from
57
+ * "reachable but serving somebody else's clone" — the second is what made a
58
+ * relocated port able to masquerade as healthy.
59
+ */
60
+ export declare function probeManagedWorkspaceReadiness(input: {
61
+ healthUrl: string;
62
+ identity: ManagedWorkspaceIdentity;
63
+ fetchImpl?: typeof fetch;
64
+ timeoutMs?: number;
65
+ handoffSubject?: {
66
+ userId: string;
67
+ email: string;
68
+ } | null;
69
+ }): Promise<WorkspaceReadinessProbeResult>;
70
+ /** Current board identities that must survive the clone for it to publish ready. */
71
+ export declare function listManagedWorkspaceHandoffSubjects(db: Db, companyId: string): Promise<Array<{
72
+ userId: string;
73
+ email: string;
74
+ }>>;
75
+ /** Prove that every current board member can use the advertised handoff. */
76
+ export declare function probeManagedWorkspaceHandoffSubjects(input: {
77
+ db: Db;
78
+ healthUrl: string;
79
+ identity: ManagedWorkspaceIdentity;
80
+ fetchImpl?: typeof fetch;
81
+ }): Promise<WorkspaceReadinessProbeResult>;
82
+ /**
83
+ * How strictly a managed start is gated on the guest's protected readiness.
84
+ *
85
+ * - `auto` (default): a guest that *reports* readiness must satisfy it, and a
86
+ * guest serving a different instance/workspace is always rejected. A guest
87
+ * that reports no readiness block at all — an older checkout, which a managed
88
+ * worktree can legitimately be — falls back to the semantic transport check
89
+ * and is logged. Failing that case closed would turn an upgrade lag into an
90
+ * outage of every existing workspace, which is a worse reliability outcome
91
+ * than the defect this gate exists to fix. Such a workspace is still not
92
+ * silently "usable": it has no handoff plugin, so `Open workspace` reports the
93
+ * snapshot-local credential fallback rather than pretending to be ready.
94
+ * - `strict`: a missing readiness block also blocks publication. Intended for
95
+ * deployments that have finished rolling the new guest build everywhere.
96
+ */
97
+ export type WorkspaceReadinessGateMode = "auto" | "strict";
98
+ export declare function resolveWorkspaceReadinessGateMode(env?: NodeJS.ProcessEnv): WorkspaceReadinessGateMode;
99
+ /**
100
+ * Whether a rejected probe must stop the runtime from being published.
101
+ *
102
+ * Everything except "this guest does not implement the contract" is a real
103
+ * disagreement about the clone and always blocks.
104
+ */
105
+ export declare function shouldBlockPublicationOnReadiness(result: Extract<WorkspaceReadinessProbeResult, {
106
+ ok: false;
107
+ }>, mode?: WorkspaceReadinessGateMode): boolean;
108
+ /**
109
+ * How long a freshly started workspace may take to satisfy readiness.
110
+ *
111
+ * Deliberately short. The transport readiness probe has already required a
112
+ * `status: ok` response from this guest by the time the gate runs, so the only
113
+ * thing left to absorb is a one-off blip — not a cold start. A longer budget
114
+ * would add latency to every managed start to no benefit.
115
+ */
116
+ export declare const WORKSPACE_READINESS_GATE_TIMEOUT_MS = 3000;
117
+ /**
118
+ * Poll readiness until it passes or the gate budget runs out.
119
+ *
120
+ * `identity_mismatch` and `readiness_missing` are terminal and return
121
+ * immediately: another instance owning the port, or a guest that does not
122
+ * implement the contract, are not conditions that polling can change.
123
+ */
124
+ export declare function waitForManagedWorkspaceReadiness(input: {
125
+ healthUrl: string;
126
+ identity: ManagedWorkspaceIdentity;
127
+ fetchImpl?: typeof fetch;
128
+ timeoutMs?: number;
129
+ now?: () => number;
130
+ sleep?: (ms: number) => Promise<void>;
131
+ }): Promise<WorkspaceReadinessProbeResult>;
132
+ /** Log a rejected probe once, with the machine reason kept intact for operators. */
133
+ export declare function logManagedWorkspaceReadinessRejection(input: {
134
+ executionWorkspaceId: string;
135
+ healthUrl: string;
136
+ result: Extract<WorkspaceReadinessProbeResult, {
137
+ ok: false;
138
+ }>;
139
+ }): void;
140
+ //# sourceMappingURL=managed-workspace-identity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"managed-workspace-identity.d.ts","sourceRoot":"","sources":["../../src/services/managed-workspace-identity.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,277 @@
1
+ /**
2
+ * Control-plane half of the workspace readiness/handoff contract (PAP-17572).
3
+ *
4
+ * Resolves the identity and derived key material for one managed workspace,
5
+ * injects them into the guest process, and probes the guest's *protected*
6
+ * readiness so `running / healthy` can never be published for a workspace whose
7
+ * clone, identity, or login handoff disagrees with what was expected.
8
+ *
9
+ * Identity always comes from the worktree's own recorded instance pointer, never
10
+ * from a branch name or basename heuristic, and an unresolvable identity fails
11
+ * closed (no key injected, no readiness claimed).
12
+ */
13
+ import path from "node:path";
14
+ import { and, eq } from "drizzle-orm";
15
+ import { authUsers, companyMemberships } from "@paperclipai/db";
16
+ import { deriveWorkspaceHandoffKey, deriveWorkspaceReadinessToken, resolveWorkspaceHandoffRootSecret, WORKSPACE_EXECUTION_WORKSPACE_COMPANY_ID_ENV_KEY, WORKSPACE_EXECUTION_WORKSPACE_ID_ENV_KEY, WORKSPACE_HANDOFF_KEY_ENV_KEY, WORKSPACE_READINESS_TOKEN_ENV_KEY, WORKSPACE_READINESS_TOKEN_HEADER, WORKSPACE_READINESS_USER_EMAIL_HEADER, WORKSPACE_READINESS_USER_ID_HEADER, } from "../auth/workspace-login-handoff.js";
17
+ import { logger } from "../middleware/logger.js";
18
+ import { deriveWorktreeInstanceId, readWorktreeInstanceId, } from "./workspace-instance-cleanup.js";
19
+ /**
20
+ * Per-probe budget. Matched to the semantic transport probe it replaces, so
21
+ * upgrading a runtime health check to the readiness contract cannot make a
22
+ * managed start or a reuse decision slower than it was.
23
+ */
24
+ export const WORKSPACE_READINESS_PROBE_TIMEOUT_MS = 2_000;
25
+ /**
26
+ * Resolve the isolated instance id a worktree actually runs as.
27
+ *
28
+ * The worktree's `.paperclip/.env` pointer is authoritative because it is what
29
+ * the guest process itself loads. The path-derived id is only a fallback for a
30
+ * worktree provisioned before the pointer existed, and the two agree by
31
+ * construction for anything Paperclip provisioned.
32
+ */
33
+ export function resolveManagedWorkspaceInstanceId(workspaceCwd) {
34
+ const recorded = readWorktreeInstanceId(workspaceCwd);
35
+ if (recorded)
36
+ return recorded;
37
+ const derived = deriveWorktreeInstanceId(workspaceCwd);
38
+ return derived || null;
39
+ }
40
+ export function resolveManagedWorkspaceIdentity(input) {
41
+ const workspaceCwd = input.workspaceCwd?.trim();
42
+ const executionWorkspaceId = input.executionWorkspaceId?.trim();
43
+ const companyId = input.companyId?.trim();
44
+ if (!workspaceCwd || !executionWorkspaceId || !companyId)
45
+ return null;
46
+ const root = resolveWorkspaceHandoffRootSecret(input.env ?? process.env);
47
+ if (!root)
48
+ return null;
49
+ const instanceId = resolveManagedWorkspaceInstanceId(path.resolve(workspaceCwd));
50
+ if (!instanceId)
51
+ return null;
52
+ return {
53
+ instanceId,
54
+ executionWorkspaceId,
55
+ companyId,
56
+ handoffKey: deriveWorkspaceHandoffKey({ rootSecret: root.secret, instanceId, executionWorkspaceId }),
57
+ readinessToken: deriveWorkspaceReadinessToken({ rootSecret: root.secret, instanceId, executionWorkspaceId }),
58
+ secretSource: root.source,
59
+ };
60
+ }
61
+ /**
62
+ * Env injected into a managed workspace's guest process.
63
+ *
64
+ * Only the *derived* per-workspace values cross the boundary: the guest never
65
+ * receives the root secret, so a compromised workspace cannot mint a ticket for
66
+ * a sibling workspace.
67
+ */
68
+ export function buildManagedWorkspaceGuestEnv(identity) {
69
+ return {
70
+ [WORKSPACE_HANDOFF_KEY_ENV_KEY]: identity.handoffKey,
71
+ [WORKSPACE_READINESS_TOKEN_ENV_KEY]: identity.readinessToken,
72
+ [WORKSPACE_EXECUTION_WORKSPACE_ID_ENV_KEY]: identity.executionWorkspaceId,
73
+ [WORKSPACE_EXECUTION_WORKSPACE_COMPANY_ID_ENV_KEY]: identity.companyId,
74
+ };
75
+ }
76
+ function isWorkspaceReadinessShape(value) {
77
+ if (!value || typeof value !== "object")
78
+ return false;
79
+ const candidate = value;
80
+ return (typeof candidate.state === "string"
81
+ && typeof candidate.databaseReady === "boolean"
82
+ && typeof candidate.cloneDataReady === "boolean"
83
+ && typeof candidate.authHandoffReady === "boolean"
84
+ && (typeof candidate.authHandoffUserId === "string" || candidate.authHandoffUserId === null)
85
+ && typeof candidate.seedState === "string"
86
+ && (typeof candidate.companyId === "string" || candidate.companyId === null));
87
+ }
88
+ /**
89
+ * Read a managed workspace's protected readiness over loopback.
90
+ *
91
+ * Failure modes are distinguished so callers can tell "not reachable" from
92
+ * "reachable but serving somebody else's clone" — the second is what made a
93
+ * relocated port able to masquerade as healthy.
94
+ */
95
+ export async function probeManagedWorkspaceReadiness(input) {
96
+ const fetchImpl = input.fetchImpl ?? fetch;
97
+ let response;
98
+ try {
99
+ response = await fetchImpl(input.healthUrl, {
100
+ headers: {
101
+ [WORKSPACE_READINESS_TOKEN_HEADER]: input.identity.readinessToken,
102
+ ...(input.handoffSubject
103
+ ? {
104
+ [WORKSPACE_READINESS_USER_ID_HEADER]: input.handoffSubject.userId,
105
+ [WORKSPACE_READINESS_USER_EMAIL_HEADER]: input.handoffSubject.email,
106
+ }
107
+ : {}),
108
+ },
109
+ signal: AbortSignal.timeout(input.timeoutMs ?? WORKSPACE_READINESS_PROBE_TIMEOUT_MS),
110
+ });
111
+ }
112
+ catch (error) {
113
+ return {
114
+ ok: false,
115
+ reason: "unreachable",
116
+ readiness: null,
117
+ detail: error instanceof Error ? error.message : String(error),
118
+ };
119
+ }
120
+ const payload = await response.json().catch(() => null);
121
+ if (!response.ok) {
122
+ const readiness = isWorkspaceReadinessShape(payload?.workspace) ? payload.workspace : null;
123
+ return { ok: false, reason: "http_error", readiness, detail: `HTTP ${response.status}` };
124
+ }
125
+ if (payload?.status !== "ok") {
126
+ return { ok: false, reason: "unhealthy_payload", readiness: null, detail: String(payload?.status ?? "missing") };
127
+ }
128
+ if (payload.workspace
129
+ && typeof payload.workspace === "object"
130
+ && !("companyId" in payload.workspace)) {
131
+ // A guest that implements readiness but predates the company binding is not
132
+ // a legacy transport-only guest. Treat the partial contract as an identity
133
+ // disagreement so auto compatibility mode cannot publish an unopenable clone.
134
+ return {
135
+ ok: false,
136
+ reason: "identity_mismatch",
137
+ readiness: null,
138
+ detail: `expected company ${input.identity.companyId}, got missing`,
139
+ };
140
+ }
141
+ if (input.handoffSubject
142
+ && payload.workspace
143
+ && typeof payload.workspace === "object"
144
+ && !("authHandoffUserId" in payload.workspace)) {
145
+ return {
146
+ ok: false,
147
+ reason: "identity_mismatch",
148
+ readiness: null,
149
+ detail: `expected handoff user ${input.handoffSubject.userId}, got missing`,
150
+ };
151
+ }
152
+ if (!isWorkspaceReadinessShape(payload.workspace)) {
153
+ // Either the token was rejected or the guest predates this contract. Both
154
+ // mean the control plane cannot prove user readiness, so neither may publish.
155
+ return { ok: false, reason: "readiness_missing", readiness: null, detail: null };
156
+ }
157
+ const readiness = payload.workspace;
158
+ if (readiness.instanceId !== input.identity.instanceId
159
+ || readiness.executionWorkspaceId !== input.identity.executionWorkspaceId
160
+ || readiness.companyId !== input.identity.companyId) {
161
+ return {
162
+ ok: false,
163
+ reason: "identity_mismatch",
164
+ readiness,
165
+ detail: `expected ${input.identity.instanceId}/${input.identity.executionWorkspaceId}/${input.identity.companyId}, got ${readiness.instanceId}/${readiness.executionWorkspaceId}/${readiness.companyId}`,
166
+ };
167
+ }
168
+ if (!readiness.databaseReady || !readiness.cloneDataReady || !readiness.authHandoffReady) {
169
+ return { ok: false, reason: "not_ready", readiness, detail: readiness.failurePhase };
170
+ }
171
+ if (input.handoffSubject && readiness.authHandoffUserId !== input.handoffSubject.userId) {
172
+ return {
173
+ ok: false,
174
+ reason: "identity_mismatch",
175
+ readiness,
176
+ detail: `expected handoff user ${input.handoffSubject.userId}, got ${readiness.authHandoffUserId}`,
177
+ };
178
+ }
179
+ return { ok: true, readiness };
180
+ }
181
+ /** Current board identities that must survive the clone for it to publish ready. */
182
+ export async function listManagedWorkspaceHandoffSubjects(db, companyId) {
183
+ const rows = await db
184
+ .select({ userId: authUsers.id, email: authUsers.email })
185
+ .from(authUsers)
186
+ .innerJoin(companyMemberships, and(eq(companyMemberships.principalType, "user"), eq(companyMemberships.principalId, authUsers.id), eq(companyMemberships.companyId, companyId), eq(companyMemberships.status, "active")));
187
+ return rows.flatMap((row) => {
188
+ const userId = row.userId?.trim();
189
+ const email = row.email?.trim();
190
+ return userId && email ? [{ userId, email }] : [];
191
+ });
192
+ }
193
+ /** Prove that every current board member can use the advertised handoff. */
194
+ export async function probeManagedWorkspaceHandoffSubjects(input) {
195
+ const subjects = await listManagedWorkspaceHandoffSubjects(input.db, input.identity.companyId);
196
+ if (subjects.length === 0) {
197
+ return {
198
+ ok: false,
199
+ reason: "not_ready",
200
+ readiness: null,
201
+ detail: "no active board user is eligible for workspace login handoff",
202
+ };
203
+ }
204
+ const results = await Promise.all(subjects.map((handoffSubject) => probeManagedWorkspaceReadiness({
205
+ healthUrl: input.healthUrl,
206
+ identity: input.identity,
207
+ fetchImpl: input.fetchImpl,
208
+ handoffSubject,
209
+ })));
210
+ return results.find((result) => !result.ok) ?? results[0];
211
+ }
212
+ export function resolveWorkspaceReadinessGateMode(env = process.env) {
213
+ return env.PAPERCLIP_WORKSPACE_READINESS_GATE?.trim().toLowerCase() === "strict" ? "strict" : "auto";
214
+ }
215
+ /**
216
+ * Whether a rejected probe must stop the runtime from being published.
217
+ *
218
+ * Everything except "this guest does not implement the contract" is a real
219
+ * disagreement about the clone and always blocks.
220
+ */
221
+ export function shouldBlockPublicationOnReadiness(result, mode = resolveWorkspaceReadinessGateMode()) {
222
+ if (result.reason === "readiness_missing")
223
+ return mode === "strict";
224
+ return true;
225
+ }
226
+ /**
227
+ * How long a freshly started workspace may take to satisfy readiness.
228
+ *
229
+ * Deliberately short. The transport readiness probe has already required a
230
+ * `status: ok` response from this guest by the time the gate runs, so the only
231
+ * thing left to absorb is a one-off blip — not a cold start. A longer budget
232
+ * would add latency to every managed start to no benefit.
233
+ */
234
+ export const WORKSPACE_READINESS_GATE_TIMEOUT_MS = 3_000;
235
+ const WORKSPACE_READINESS_GATE_INTERVAL_MS = 250;
236
+ /**
237
+ * Poll readiness until it passes or the gate budget runs out.
238
+ *
239
+ * `identity_mismatch` and `readiness_missing` are terminal and return
240
+ * immediately: another instance owning the port, or a guest that does not
241
+ * implement the contract, are not conditions that polling can change.
242
+ */
243
+ export async function waitForManagedWorkspaceReadiness(input) {
244
+ const now = input.now ?? Date.now;
245
+ const sleep = input.sleep ?? ((ms) => new Promise((resolve) => { setTimeout(resolve, ms); }));
246
+ const deadline = now() + (input.timeoutMs ?? WORKSPACE_READINESS_GATE_TIMEOUT_MS);
247
+ let last = {
248
+ ok: false,
249
+ reason: "unreachable",
250
+ readiness: null,
251
+ detail: "readiness gate did not run",
252
+ };
253
+ for (;;) {
254
+ last = await probeManagedWorkspaceReadiness({
255
+ healthUrl: input.healthUrl,
256
+ identity: input.identity,
257
+ fetchImpl: input.fetchImpl,
258
+ });
259
+ if (last.ok || last.reason === "identity_mismatch" || last.reason === "readiness_missing")
260
+ return last;
261
+ if (now() >= deadline)
262
+ return last;
263
+ await sleep(WORKSPACE_READINESS_GATE_INTERVAL_MS);
264
+ }
265
+ }
266
+ /** Log a rejected probe once, with the machine reason kept intact for operators. */
267
+ export function logManagedWorkspaceReadinessRejection(input) {
268
+ logger.warn({
269
+ executionWorkspaceId: input.executionWorkspaceId,
270
+ healthUrl: input.healthUrl,
271
+ reason: input.result.reason,
272
+ detail: input.result.detail,
273
+ seedState: input.result.readiness?.seedState ?? null,
274
+ failurePhase: input.result.readiness?.failurePhase ?? null,
275
+ }, "managed workspace readiness probe rejected the runtime");
276
+ }
277
+ //# sourceMappingURL=managed-workspace-identity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"managed-workspace-identity.js","sourceRoot":"","sources":["../../src/services/managed-workspace-identity.ts"],"names":[],"mappings":"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"}
@@ -17,6 +17,20 @@ import type { PluginWorkerManager } from "./plugin-worker-manager.js";
17
17
  * provider-capabilities value all read one source and cannot drift.
18
18
  */
19
19
  export declare const REUSABLE_LEASE_WORKER_METHODS: readonly ["environmentResumeLease", "environmentReleaseLease", "environmentDestroyLease"];
20
+ /**
21
+ * The worker methods a sandbox provider must advertise before the customImage
22
+ * setup gate in `environment-custom-images.ts` allows an interactive setup
23
+ * session. The setup lifecycle starts a session through
24
+ * `environmentStartInteractiveSetup`, polls it through
25
+ * `environmentGetInteractiveSetup`, and cancels it through
26
+ * `environmentCancelInteractiveSetup`. A provider that omits any of the three
27
+ * can strand a setup session partway through the lifecycle.
28
+ */
29
+ export declare const INTERACTIVE_SETUP_WORKER_METHODS: readonly ["environmentStartInteractiveSetup", "environmentGetInteractiveSetup", "environmentCancelInteractiveSetup"];
30
+ /** The worker method the customImage template-capture gate in `environment-custom-images.ts` requires. */
31
+ export declare const TEMPLATE_CAPTURE_WORKER_METHODS: readonly ["environmentCaptureTemplate"];
32
+ /** The worker method the customImage template-delete gate in `environment-custom-images.ts` requires. */
33
+ export declare const TEMPLATE_DELETE_WORKER_METHODS: readonly ["environmentDeleteTemplate"];
20
34
  export interface ReadyPluginWorkerRecovery {
21
35
  pluginKeys: readonly string[];
22
36
  startWorker(plugin: {
@@ -48,7 +62,7 @@ export interface ReadyPluginEnvironmentDriver {
48
62
  templateRefKind?: PluginEnvironmentDriverDeclaration["templateRefKind"];
49
63
  templateConfigBinding?: PluginEnvironmentDriverDeclaration["templateConfigBinding"];
50
64
  supportsTemplateDelete?: PluginEnvironmentDriverDeclaration["supportsTemplateDelete"];
51
- supportsSetupTokenLogin?: PluginEnvironmentDriverDeclaration["supportsSetupTokenLogin"];
65
+ supportsLoginPty?: PluginEnvironmentDriverDeclaration["supportsLoginPty"];
52
66
  }
53
67
  export declare function pluginDriverProviderKey(config: Pick<PluginEnvironmentConfig, "pluginKey" | "driverKey">): string;
54
68
  export declare function resolvePluginEnvironmentDriver(input: {
@@ -1 +1 @@
1
- {"version":3,"file":"plugin-environment-driver.d.ts","sourceRoot":"","sources":["../../src/services/plugin-environment-driver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plugin-environment-driver.d.ts","sourceRoot":"","sources":["../../src/services/plugin-environment-driver.ts"],"names":[],"mappings":"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"}
@@ -19,6 +19,28 @@ export const REUSABLE_LEASE_WORKER_METHODS = [
19
19
  "environmentReleaseLease",
20
20
  "environmentDestroyLease",
21
21
  ];
22
+ /**
23
+ * The worker methods a sandbox provider must advertise before the customImage
24
+ * setup gate in `environment-custom-images.ts` allows an interactive setup
25
+ * session. The setup lifecycle starts a session through
26
+ * `environmentStartInteractiveSetup`, polls it through
27
+ * `environmentGetInteractiveSetup`, and cancels it through
28
+ * `environmentCancelInteractiveSetup`. A provider that omits any of the three
29
+ * can strand a setup session partway through the lifecycle.
30
+ */
31
+ export const INTERACTIVE_SETUP_WORKER_METHODS = [
32
+ "environmentStartInteractiveSetup",
33
+ "environmentGetInteractiveSetup",
34
+ "environmentCancelInteractiveSetup",
35
+ ];
36
+ /** The worker method the customImage template-capture gate in `environment-custom-images.ts` requires. */
37
+ export const TEMPLATE_CAPTURE_WORKER_METHODS = [
38
+ "environmentCaptureTemplate",
39
+ ];
40
+ /** The worker method the customImage template-delete gate in `environment-custom-images.ts` requires. */
41
+ export const TEMPLATE_DELETE_WORKER_METHODS = [
42
+ "environmentDeleteTemplate",
43
+ ];
22
44
  export function pluginDriverProviderKey(config) {
23
45
  return `${config.pluginKey}:${config.driverKey}`;
24
46
  }
@@ -157,7 +179,7 @@ export async function listReadyPluginEnvironmentDrivers(input) {
157
179
  templateRefKind: driver.templateRefKind,
158
180
  templateConfigBinding: driver.templateConfigBinding,
159
181
  supportsTemplateDelete: driver.supportsTemplateDelete,
160
- supportsSetupTokenLogin: driver.supportsSetupTokenLogin,
182
+ supportsLoginPty: driver.supportsLoginPty,
161
183
  })));
162
184
  }
163
185
  return rows;