@paperclipai/server 0.3.1 → 2026.3.17-canary.2

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 (335) hide show
  1. package/dist/adapters/registry.d.ts.map +1 -1
  2. package/dist/adapters/registry.js +23 -2
  3. package/dist/adapters/registry.js.map +1 -1
  4. package/dist/adapters/types.d.ts +1 -1
  5. package/dist/adapters/types.d.ts.map +1 -1
  6. package/dist/app.d.ts +4 -0
  7. package/dist/app.d.ts.map +1 -1
  8. package/dist/app.js +115 -3
  9. package/dist/app.js.map +1 -1
  10. package/dist/attachment-types.d.ts.map +1 -1
  11. package/dist/attachment-types.js +6 -0
  12. package/dist/attachment-types.js.map +1 -1
  13. package/dist/config.d.ts.map +1 -1
  14. package/dist/config.js +9 -1
  15. package/dist/config.js.map +1 -1
  16. package/dist/home-paths.d.ts +5 -0
  17. package/dist/home-paths.d.ts.map +1 -1
  18. package/dist/home-paths.js +18 -0
  19. package/dist/home-paths.js.map +1 -1
  20. package/dist/index.d.ts.map +1 -1
  21. package/dist/index.js +61 -42
  22. package/dist/index.js.map +1 -1
  23. package/dist/routes/access.d.ts.map +1 -1
  24. package/dist/routes/access.js +90 -1
  25. package/dist/routes/access.js.map +1 -1
  26. package/dist/routes/agents.d.ts.map +1 -1
  27. package/dist/routes/agents.js +64 -1
  28. package/dist/routes/agents.js.map +1 -1
  29. package/dist/routes/assets.d.ts.map +1 -1
  30. package/dist/routes/assets.js +191 -13
  31. package/dist/routes/assets.js.map +1 -1
  32. package/dist/routes/companies.d.ts.map +1 -1
  33. package/dist/routes/companies.js +10 -1
  34. package/dist/routes/companies.js.map +1 -1
  35. package/dist/routes/costs.d.ts.map +1 -1
  36. package/dist/routes/costs.js +160 -5
  37. package/dist/routes/costs.js.map +1 -1
  38. package/dist/routes/execution-workspaces.d.ts +3 -0
  39. package/dist/routes/execution-workspaces.d.ts.map +1 -0
  40. package/dist/routes/execution-workspaces.js +165 -0
  41. package/dist/routes/execution-workspaces.js.map +1 -0
  42. package/dist/routes/health.d.ts.map +1 -1
  43. package/dist/routes/health.js +3 -1
  44. package/dist/routes/health.js.map +1 -1
  45. package/dist/routes/index.d.ts +1 -0
  46. package/dist/routes/index.d.ts.map +1 -1
  47. package/dist/routes/index.js +1 -0
  48. package/dist/routes/index.js.map +1 -1
  49. package/dist/routes/instance-settings.d.ts +3 -0
  50. package/dist/routes/instance-settings.d.ts.map +1 -0
  51. package/dist/routes/instance-settings.js +46 -0
  52. package/dist/routes/instance-settings.js.map +1 -0
  53. package/dist/routes/issues.d.ts.map +1 -1
  54. package/dist/routes/issues.js +339 -4
  55. package/dist/routes/issues.js.map +1 -1
  56. package/dist/routes/plugin-ui-static.d.ts +69 -0
  57. package/dist/routes/plugin-ui-static.d.ts.map +1 -0
  58. package/dist/routes/plugin-ui-static.js +411 -0
  59. package/dist/routes/plugin-ui-static.js.map +1 -0
  60. package/dist/routes/plugins.d.ts +120 -0
  61. package/dist/routes/plugins.d.ts.map +1 -0
  62. package/dist/routes/plugins.js +1784 -0
  63. package/dist/routes/plugins.js.map +1 -0
  64. package/dist/routes/projects.d.ts.map +1 -1
  65. package/dist/routes/projects.js +5 -1
  66. package/dist/routes/projects.js.map +1 -1
  67. package/dist/services/access.d.ts +2 -2
  68. package/dist/services/activity-log.d.ts +3 -0
  69. package/dist/services/activity-log.d.ts.map +1 -1
  70. package/dist/services/activity-log.js +34 -0
  71. package/dist/services/activity-log.js.map +1 -1
  72. package/dist/services/agents.d.ts +39 -15
  73. package/dist/services/agents.d.ts.map +1 -1
  74. package/dist/services/agents.js +60 -8
  75. package/dist/services/agents.js.map +1 -1
  76. package/dist/services/approvals.d.ts +5 -5
  77. package/dist/services/approvals.d.ts.map +1 -1
  78. package/dist/services/approvals.js +11 -0
  79. package/dist/services/approvals.js.map +1 -1
  80. package/dist/services/assets.d.ts +4 -4
  81. package/dist/services/budgets.d.ts +38 -0
  82. package/dist/services/budgets.d.ts.map +1 -0
  83. package/dist/services/budgets.js +784 -0
  84. package/dist/services/budgets.js.map +1 -0
  85. package/dist/services/companies.d.ts +39 -418
  86. package/dist/services/companies.d.ts.map +1 -1
  87. package/dist/services/companies.js +157 -21
  88. package/dist/services/companies.js.map +1 -1
  89. package/dist/services/costs.d.ts +67 -3
  90. package/dist/services/costs.d.ts.map +1 -1
  91. package/dist/services/costs.js +185 -57
  92. package/dist/services/costs.js.map +1 -1
  93. package/dist/services/cron.d.ts +80 -0
  94. package/dist/services/cron.d.ts.map +1 -0
  95. package/dist/services/cron.js +300 -0
  96. package/dist/services/cron.js.map +1 -0
  97. package/dist/services/dashboard.d.ts +6 -0
  98. package/dist/services/dashboard.d.ts.map +1 -1
  99. package/dist/services/dashboard.js +9 -0
  100. package/dist/services/dashboard.js.map +1 -1
  101. package/dist/services/documents.d.ts +164 -0
  102. package/dist/services/documents.d.ts.map +1 -0
  103. package/dist/services/documents.js +382 -0
  104. package/dist/services/documents.js.map +1 -0
  105. package/dist/services/execution-workspace-policy.d.ts +2 -1
  106. package/dist/services/execution-workspace-policy.d.ts.map +1 -1
  107. package/dist/services/execution-workspace-policy.js +63 -15
  108. package/dist/services/execution-workspace-policy.js.map +1 -1
  109. package/dist/services/execution-workspaces.d.ts +19 -0
  110. package/dist/services/execution-workspaces.d.ts.map +1 -0
  111. package/dist/services/execution-workspaces.js +87 -0
  112. package/dist/services/execution-workspaces.js.map +1 -0
  113. package/dist/services/finance.d.ts +93 -0
  114. package/dist/services/finance.d.ts.map +1 -0
  115. package/dist/services/finance.js +120 -0
  116. package/dist/services/finance.js.map +1 -0
  117. package/dist/services/heartbeat.d.ts +11 -1
  118. package/dist/services/heartbeat.d.ts.map +1 -1
  119. package/dist/services/heartbeat.js +1292 -559
  120. package/dist/services/heartbeat.js.map +1 -1
  121. package/dist/services/index.d.ts +7 -0
  122. package/dist/services/index.d.ts.map +1 -1
  123. package/dist/services/index.js +7 -0
  124. package/dist/services/index.js.map +1 -1
  125. package/dist/services/instance-settings.d.ts +9 -0
  126. package/dist/services/instance-settings.d.ts.map +1 -0
  127. package/dist/services/instance-settings.js +80 -0
  128. package/dist/services/instance-settings.js.map +1 -0
  129. package/dist/services/issue-approvals.d.ts +1 -1
  130. package/dist/services/issues.d.ts +14 -2
  131. package/dist/services/issues.d.ts.map +1 -1
  132. package/dist/services/issues.js +161 -9
  133. package/dist/services/issues.js.map +1 -1
  134. package/dist/services/live-events.d.ts +5 -0
  135. package/dist/services/live-events.d.ts.map +1 -1
  136. package/dist/services/live-events.js +9 -0
  137. package/dist/services/live-events.js.map +1 -1
  138. package/dist/services/plugin-capability-validator.d.ts +108 -0
  139. package/dist/services/plugin-capability-validator.d.ts.map +1 -0
  140. package/dist/services/plugin-capability-validator.js +268 -0
  141. package/dist/services/plugin-capability-validator.js.map +1 -0
  142. package/dist/services/plugin-config-validator.d.ts +26 -0
  143. package/dist/services/plugin-config-validator.d.ts.map +1 -0
  144. package/dist/services/plugin-config-validator.js +41 -0
  145. package/dist/services/plugin-config-validator.js.map +1 -0
  146. package/dist/services/plugin-dev-watcher.d.ts +30 -0
  147. package/dist/services/plugin-dev-watcher.d.ts.map +1 -0
  148. package/dist/services/plugin-dev-watcher.js +241 -0
  149. package/dist/services/plugin-dev-watcher.js.map +1 -0
  150. package/dist/services/plugin-event-bus.d.ts +149 -0
  151. package/dist/services/plugin-event-bus.d.ts.map +1 -0
  152. package/dist/services/plugin-event-bus.js +258 -0
  153. package/dist/services/plugin-event-bus.js.map +1 -0
  154. package/dist/services/plugin-host-service-cleanup.d.ts +14 -0
  155. package/dist/services/plugin-host-service-cleanup.d.ts.map +1 -0
  156. package/dist/services/plugin-host-service-cleanup.js +37 -0
  157. package/dist/services/plugin-host-service-cleanup.js.map +1 -0
  158. package/dist/services/plugin-host-services.d.ts +13 -0
  159. package/dist/services/plugin-host-services.d.ts.map +1 -0
  160. package/dist/services/plugin-host-services.js +969 -0
  161. package/dist/services/plugin-host-services.js.map +1 -0
  162. package/dist/services/plugin-job-coordinator.d.ts +81 -0
  163. package/dist/services/plugin-job-coordinator.d.ts.map +1 -0
  164. package/dist/services/plugin-job-coordinator.js +172 -0
  165. package/dist/services/plugin-job-coordinator.js.map +1 -0
  166. package/dist/services/plugin-job-scheduler.d.ts +163 -0
  167. package/dist/services/plugin-job-scheduler.d.ts.map +1 -0
  168. package/dist/services/plugin-job-scheduler.js +454 -0
  169. package/dist/services/plugin-job-scheduler.js.map +1 -0
  170. package/dist/services/plugin-job-store.d.ts +208 -0
  171. package/dist/services/plugin-job-store.d.ts.map +1 -0
  172. package/dist/services/plugin-job-store.js +350 -0
  173. package/dist/services/plugin-job-store.js.map +1 -0
  174. package/dist/services/plugin-lifecycle.d.ts +203 -0
  175. package/dist/services/plugin-lifecycle.d.ts.map +1 -0
  176. package/dist/services/plugin-lifecycle.js +476 -0
  177. package/dist/services/plugin-lifecycle.js.map +1 -0
  178. package/dist/services/plugin-loader.d.ts +441 -0
  179. package/dist/services/plugin-loader.d.ts.map +1 -0
  180. package/dist/services/plugin-loader.js +1192 -0
  181. package/dist/services/plugin-loader.js.map +1 -0
  182. package/dist/services/plugin-log-retention.d.ts +20 -0
  183. package/dist/services/plugin-log-retention.d.ts.map +1 -0
  184. package/dist/services/plugin-log-retention.js +63 -0
  185. package/dist/services/plugin-log-retention.js.map +1 -0
  186. package/dist/services/plugin-manifest-validator.d.ts +79 -0
  187. package/dist/services/plugin-manifest-validator.d.ts.map +1 -0
  188. package/dist/services/plugin-manifest-validator.js +84 -0
  189. package/dist/services/plugin-manifest-validator.js.map +1 -0
  190. package/dist/services/plugin-registry.d.ts +2542 -0
  191. package/dist/services/plugin-registry.d.ts.map +1 -0
  192. package/dist/services/plugin-registry.js +539 -0
  193. package/dist/services/plugin-registry.js.map +1 -0
  194. package/dist/services/plugin-runtime-sandbox.d.ts +40 -0
  195. package/dist/services/plugin-runtime-sandbox.d.ts.map +1 -0
  196. package/dist/services/plugin-runtime-sandbox.js +154 -0
  197. package/dist/services/plugin-runtime-sandbox.js.map +1 -0
  198. package/dist/services/plugin-secrets-handler.d.ts +81 -0
  199. package/dist/services/plugin-secrets-handler.d.ts.map +1 -0
  200. package/dist/services/plugin-secrets-handler.js +275 -0
  201. package/dist/services/plugin-secrets-handler.js.map +1 -0
  202. package/dist/services/plugin-state-store.d.ts +92 -0
  203. package/dist/services/plugin-state-store.d.ts.map +1 -0
  204. package/dist/services/plugin-state-store.js +190 -0
  205. package/dist/services/plugin-state-store.js.map +1 -0
  206. package/dist/services/plugin-stream-bus.d.ts +29 -0
  207. package/dist/services/plugin-stream-bus.d.ts.map +1 -0
  208. package/dist/services/plugin-stream-bus.js +48 -0
  209. package/dist/services/plugin-stream-bus.js.map +1 -0
  210. package/dist/services/plugin-tool-dispatcher.d.ts +180 -0
  211. package/dist/services/plugin-tool-dispatcher.d.ts.map +1 -0
  212. package/dist/services/plugin-tool-dispatcher.js +224 -0
  213. package/dist/services/plugin-tool-dispatcher.js.map +1 -0
  214. package/dist/services/plugin-tool-registry.d.ts +192 -0
  215. package/dist/services/plugin-tool-registry.d.ts.map +1 -0
  216. package/dist/services/plugin-tool-registry.js +224 -0
  217. package/dist/services/plugin-tool-registry.js.map +1 -0
  218. package/dist/services/plugin-worker-manager.d.ts +260 -0
  219. package/dist/services/plugin-worker-manager.d.ts.map +1 -0
  220. package/dist/services/plugin-worker-manager.js +835 -0
  221. package/dist/services/plugin-worker-manager.js.map +1 -0
  222. package/dist/services/projects.d.ts +12 -1
  223. package/dist/services/projects.d.ts.map +1 -1
  224. package/dist/services/projects.js +100 -4
  225. package/dist/services/projects.js.map +1 -1
  226. package/dist/services/quota-windows.d.ts +9 -0
  227. package/dist/services/quota-windows.d.ts.map +1 -0
  228. package/dist/services/quota-windows.js +56 -0
  229. package/dist/services/quota-windows.js.map +1 -0
  230. package/dist/services/secrets.d.ts +5 -5
  231. package/dist/services/work-products.d.ts +14 -0
  232. package/dist/services/work-products.d.ts.map +1 -0
  233. package/dist/services/work-products.js +100 -0
  234. package/dist/services/work-products.js.map +1 -0
  235. package/dist/services/workspace-operation-log-store.d.ts +33 -0
  236. package/dist/services/workspace-operation-log-store.d.ts.map +1 -0
  237. package/dist/services/workspace-operation-log-store.js +110 -0
  238. package/dist/services/workspace-operation-log-store.js.map +1 -0
  239. package/dist/services/workspace-operations.d.ts +44 -0
  240. package/dist/services/workspace-operations.d.ts.map +1 -0
  241. package/dist/services/workspace-operations.js +204 -0
  242. package/dist/services/workspace-operations.js.map +1 -0
  243. package/dist/services/workspace-runtime.d.ts +43 -5
  244. package/dist/services/workspace-runtime.d.ts.map +1 -1
  245. package/dist/services/workspace-runtime.js +413 -30
  246. package/dist/services/workspace-runtime.js.map +1 -1
  247. package/dist/ui-branding.d.ts +10 -1
  248. package/dist/ui-branding.d.ts.map +1 -1
  249. package/dist/ui-branding.js +164 -14
  250. package/dist/ui-branding.js.map +1 -1
  251. package/dist/version.d.ts +2 -0
  252. package/dist/version.d.ts.map +1 -0
  253. package/dist/version.js +5 -0
  254. package/dist/version.js.map +1 -0
  255. package/package.json +32 -14
  256. package/skills/paperclip/SKILL.md +34 -20
  257. package/skills/paperclip-create-plugin/SKILL.md +101 -0
  258. package/ui-dist/assets/{_basePickBy-B0xbZITw.js → _basePickBy-Chytvk8p.js} +1 -1
  259. package/ui-dist/assets/{_baseUniq-Cfd5u3qc.js → _baseUniq-BVL8b2zA.js} +1 -1
  260. package/ui-dist/assets/{arc-7Xbu8tBF.js → arc-D5hJS7gD.js} +1 -1
  261. package/ui-dist/assets/{architectureDiagram-VXUJARFQ-C8F7ZRYc.js → architectureDiagram-VXUJARFQ-BFq3iN58.js} +1 -1
  262. package/ui-dist/assets/{blockDiagram-VD42YOAC-Dp08a65A.js → blockDiagram-VD42YOAC-B69ok7vL.js} +1 -1
  263. package/ui-dist/assets/{c4Diagram-YG6GDRKO-BJfslTgZ.js → c4Diagram-YG6GDRKO-FE0D9aiA.js} +1 -1
  264. package/ui-dist/assets/channel-CiKAknwU.js +1 -0
  265. package/ui-dist/assets/{chunk-4BX2VUAB-BhaYWH7e.js → chunk-4BX2VUAB-SAhF6g-l.js} +1 -1
  266. package/ui-dist/assets/{chunk-55IACEB6-BOzJUsYW.js → chunk-55IACEB6-yxKD70bX.js} +1 -1
  267. package/ui-dist/assets/{chunk-B4BG7PRW-CbVcziyE.js → chunk-B4BG7PRW-qB4VaAIx.js} +1 -1
  268. package/ui-dist/assets/{chunk-DI55MBZ5-DghPtP3y.js → chunk-DI55MBZ5-B4NIq1Ee.js} +1 -1
  269. package/ui-dist/assets/{chunk-FMBD7UC4-CB095Kfn.js → chunk-FMBD7UC4-B5kLoRe2.js} +1 -1
  270. package/ui-dist/assets/{chunk-QN33PNHL-DfpzfDqJ.js → chunk-QN33PNHL-BVVG2n_X.js} +1 -1
  271. package/ui-dist/assets/{chunk-QZHKN3VN-Df3d5z1y.js → chunk-QZHKN3VN-ncMubclp.js} +1 -1
  272. package/ui-dist/assets/{chunk-TZMSLE5B-B6tX6bZI.js → chunk-TZMSLE5B-DSyjQk8C.js} +1 -1
  273. package/ui-dist/assets/classDiagram-2ON5EDUG-B93oQX02.js +1 -0
  274. package/ui-dist/assets/classDiagram-v2-WZHVMYZB-B93oQX02.js +1 -0
  275. package/ui-dist/assets/clone-Dld-3yq0.js +1 -0
  276. package/ui-dist/assets/{cose-bilkent-S5V4N54A-38wg_s9V.js → cose-bilkent-S5V4N54A-BAikNewC.js} +1 -1
  277. package/ui-dist/assets/{dagre-6UL2VRFP-DPVj3XLS.js → dagre-6UL2VRFP-j223UI8_.js} +1 -1
  278. package/ui-dist/assets/{diagram-PSM6KHXK-BJh89zUA.js → diagram-PSM6KHXK-Bhg27ZsN.js} +1 -1
  279. package/ui-dist/assets/{diagram-QEK2KX5R-Bw0m_j10.js → diagram-QEK2KX5R-BmtcrTHq.js} +1 -1
  280. package/ui-dist/assets/{diagram-S2PKOQOG-D7_M2F3u.js → diagram-S2PKOQOG-x8XuP7dH.js} +1 -1
  281. package/ui-dist/assets/{erDiagram-Q2GNP2WA-CLsjqTWP.js → erDiagram-Q2GNP2WA-Dc8mHvB-.js} +1 -1
  282. package/ui-dist/assets/{flowDiagram-NV44I4VS-BZZ7ezVB.js → flowDiagram-NV44I4VS-Br08v6xs.js} +1 -1
  283. package/ui-dist/assets/{ganttDiagram-JELNMOA3-KzsFuwBt.js → ganttDiagram-JELNMOA3-CksKhiV8.js} +1 -1
  284. package/ui-dist/assets/{gitGraphDiagram-V2S2FVAM-DSHtY7Vu.js → gitGraphDiagram-V2S2FVAM-DmitztAD.js} +1 -1
  285. package/ui-dist/assets/{graph-luIG1UAS.js → graph-Xzh7bNfz.js} +1 -1
  286. package/ui-dist/assets/{index-nFjLambq.js → index-B-MPJNeS.js} +1 -1
  287. package/ui-dist/assets/{index-RUBFVv6t.js → index-BAOC35TS.js} +1 -1
  288. package/ui-dist/assets/{index-CaR9XM4h.js → index-BCtrpKdJ.js} +1 -1
  289. package/ui-dist/assets/{index-itc7BfMy.js → index-B_mlwDCG.js} +1 -1
  290. package/ui-dist/assets/{index-1gX09-Fl.js → index-Bp8oJMwx.js} +1 -1
  291. package/ui-dist/assets/{index-B_3g3Rie.js → index-BqOfMG1d.js} +1 -1
  292. package/ui-dist/assets/{index-uR3zjYaD.js → index-C0hw7cTu.js} +1 -1
  293. package/ui-dist/assets/{index-Ds7vLTSK.js → index-C1ENEd6Y.js} +1 -1
  294. package/ui-dist/assets/{index-CeDCs_2i.js → index-CGB1OHQi.js} +1 -1
  295. package/ui-dist/assets/{index-DBy0vJy3.js → index-CZlfAt7E.js} +1 -1
  296. package/ui-dist/assets/{index-00kuG4sI.js → index-CeL-QouZ.js} +1 -1
  297. package/ui-dist/assets/{index-Bv4xCjxl.js → index-Cz0TxJbw.js} +1 -1
  298. package/ui-dist/assets/{index-DJf8diAA.js → index-DBxUCwDG.js} +1 -1
  299. package/ui-dist/assets/{index-DnIPDZLp.js → index-DGzQUMWC.js} +1 -1
  300. package/ui-dist/assets/{index-CbGtsjW7.js → index-DI9dat7c.js} +1 -1
  301. package/ui-dist/assets/{index-BfB4lKJN.js → index-DMpo-QSZ.js} +1 -1
  302. package/ui-dist/assets/{index-DcfLFstG.js → index-DQ6xyFaN.js} +1 -1
  303. package/ui-dist/assets/{index-B1ZMzzs0.js → index-DWMQ1Fyj.js} +1 -1
  304. package/ui-dist/assets/index-DbrFgvLd.css +1 -0
  305. package/ui-dist/assets/{index-C8XyGAr9.js → index-Er4i9aLN.js} +1 -1
  306. package/ui-dist/assets/{index-C2SZYIDA.js → index-I5K-yQx5.js} +1 -1
  307. package/ui-dist/assets/index-MuodIbDJ.js +1120 -0
  308. package/ui-dist/assets/{index-BeeKMqNU.js → index-auLN8BHe.js} +1 -1
  309. package/ui-dist/assets/{index-DoTq-BeR.js → index-xw01-Pl4.js} +1 -1
  310. package/ui-dist/assets/{infoDiagram-HS3SLOUP-CDEfWpme.js → infoDiagram-HS3SLOUP-DHb4TS1W.js} +1 -1
  311. package/ui-dist/assets/{journeyDiagram-XKPGCS4Q-i7nsbg_Y.js → journeyDiagram-XKPGCS4Q-CLRBeXVU.js} +1 -1
  312. package/ui-dist/assets/{kanban-definition-3W4ZIXB7-DDlx1qVE.js → kanban-definition-3W4ZIXB7-CsQp6woE.js} +1 -1
  313. package/ui-dist/assets/{layout-C7AtmJzX.js → layout-DwD9tZ5r.js} +1 -1
  314. package/ui-dist/assets/{linear-C5jHT-WP.js → linear-DF9n_1d3.js} +1 -1
  315. package/ui-dist/assets/{mermaid.core-C8YQ4fcY.js → mermaid.core-CDm4Crkq.js} +4 -4
  316. package/ui-dist/assets/{mindmap-definition-VGOIOE7T-B9m9PuUg.js → mindmap-definition-VGOIOE7T-CVzU1x4i.js} +1 -1
  317. package/ui-dist/assets/{pieDiagram-ADFJNKIX-SvKywCSE.js → pieDiagram-ADFJNKIX-CWgl0Up8.js} +1 -1
  318. package/ui-dist/assets/{quadrantDiagram-AYHSOK5B-QfBPm7Y1.js → quadrantDiagram-AYHSOK5B-CcedyN6Q.js} +1 -1
  319. package/ui-dist/assets/{requirementDiagram-UZGBJVZJ-DnfQQuwi.js → requirementDiagram-UZGBJVZJ-DZ4BVz3s.js} +1 -1
  320. package/ui-dist/assets/{sankeyDiagram-TZEHDZUN-DvLkjzIW.js → sankeyDiagram-TZEHDZUN-CLHEx34B.js} +1 -1
  321. package/ui-dist/assets/{sequenceDiagram-WL72ISMW-5Lq2rWBc.js → sequenceDiagram-WL72ISMW-nmTJbPyy.js} +1 -1
  322. package/ui-dist/assets/{stateDiagram-FKZM4ZOC-DcYPHDyi.js → stateDiagram-FKZM4ZOC-_UGwFEqN.js} +1 -1
  323. package/ui-dist/assets/stateDiagram-v2-4FDKWEC3-CvFVoOUd.js +1 -0
  324. package/ui-dist/assets/{timeline-definition-IT6M3QCI-lrN4JmWa.js → timeline-definition-IT6M3QCI-Bibk8Daj.js} +1 -1
  325. package/ui-dist/assets/{treemap-GDKQZRPO-DFJKIBTQ.js → treemap-GDKQZRPO-Ch3rlaqT.js} +1 -1
  326. package/ui-dist/assets/{xychartDiagram-PRI3JC2R-CT47vtdm.js → xychartDiagram-PRI3JC2R-DBUudr-E.js} +1 -1
  327. package/ui-dist/index.html +4 -2
  328. package/skills/create-agent-adapter/SKILL.md +0 -718
  329. package/ui-dist/assets/channel-BViQDbSq.js +0 -1
  330. package/ui-dist/assets/classDiagram-2ON5EDUG-CjMCmxMT.js +0 -1
  331. package/ui-dist/assets/classDiagram-v2-WZHVMYZB-CjMCmxMT.js +0 -1
  332. package/ui-dist/assets/clone-Dbn9wtE1.js +0 -1
  333. package/ui-dist/assets/index-BHP9dico.js +0 -1006
  334. package/ui-dist/assets/index-BfNaDZnn.css +0 -1
  335. package/ui-dist/assets/stateDiagram-v2-4FDKWEC3-nv50YYrl.js +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"workspace-runtime.d.ts","sourceRoot":"","sources":["../../src/services/workspace-runtime.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"workspace-runtime.d.ts","sourceRoot":"","sources":["../../src/services/workspace-runtime.ts"],"names":[],"mappings":"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"}
@@ -21,6 +21,16 @@ function stableStringify(value) {
21
21
  }
22
22
  return JSON.stringify(value);
23
23
  }
24
+ export function sanitizeRuntimeServiceBaseEnv(baseEnv) {
25
+ const env = { ...baseEnv };
26
+ for (const key of Object.keys(env)) {
27
+ if (key.startsWith("PAPERCLIP_")) {
28
+ delete env[key];
29
+ }
30
+ }
31
+ delete env.DATABASE_URL;
32
+ return env;
33
+ }
24
34
  function stableRuntimeServiceId(input) {
25
35
  if (input.reportId)
26
36
  return input.reportId;
@@ -44,6 +54,7 @@ function toRuntimeServiceRef(record, overrides) {
44
54
  companyId: record.companyId,
45
55
  projectId: record.projectId,
46
56
  projectWorkspaceId: record.projectWorkspaceId,
57
+ executionWorkspaceId: record.executionWorkspaceId,
47
58
  issueId: record.issueId,
48
59
  serviceName: record.serviceName,
49
60
  status: record.status,
@@ -115,12 +126,17 @@ function resolveConfiguredPath(value, baseDir) {
115
126
  }
116
127
  return path.resolve(baseDir, value);
117
128
  }
118
- async function runGit(args, cwd) {
129
+ function formatCommandForDisplay(command, args) {
130
+ return [command, ...args]
131
+ .map((part) => (/^[A-Za-z0-9_./:-]+$/.test(part) ? part : JSON.stringify(part)))
132
+ .join(" ");
133
+ }
134
+ async function executeProcess(input) {
119
135
  const proc = await new Promise((resolve, reject) => {
120
- const child = spawn("git", args, {
121
- cwd,
136
+ const child = spawn(input.command, input.args, {
137
+ cwd: input.cwd,
122
138
  stdio: ["ignore", "pipe", "pipe"],
123
- env: process.env,
139
+ env: input.env ?? process.env,
124
140
  });
125
141
  let stdout = "";
126
142
  let stderr = "";
@@ -133,14 +149,42 @@ async function runGit(args, cwd) {
133
149
  child.on("error", reject);
134
150
  child.on("close", (code) => resolve({ stdout, stderr, code }));
135
151
  });
152
+ return proc;
153
+ }
154
+ async function runGit(args, cwd) {
155
+ const proc = await executeProcess({
156
+ command: "git",
157
+ args,
158
+ cwd,
159
+ });
136
160
  if (proc.code !== 0) {
137
161
  throw new Error(proc.stderr.trim() || proc.stdout.trim() || `git ${args.join(" ")} failed`);
138
162
  }
139
163
  return proc.stdout.trim();
140
164
  }
165
+ function gitErrorIncludes(error, needle) {
166
+ const message = error instanceof Error ? error.message : String(error);
167
+ return message.toLowerCase().includes(needle.toLowerCase());
168
+ }
141
169
  async function directoryExists(value) {
142
170
  return fs.stat(value).then((stats) => stats.isDirectory()).catch(() => false);
143
171
  }
172
+ function terminateChildProcess(child) {
173
+ if (!child.pid)
174
+ return;
175
+ if (process.platform !== "win32") {
176
+ try {
177
+ process.kill(-child.pid, "SIGTERM");
178
+ return;
179
+ }
180
+ catch {
181
+ // Fall through to the direct child kill.
182
+ }
183
+ }
184
+ if (!child.killed) {
185
+ child.kill("SIGTERM");
186
+ }
187
+ }
144
188
  function buildWorkspaceCommandEnv(input) {
145
189
  const env = { ...process.env };
146
190
  env.PAPERCLIP_WORKSPACE_CWD = input.worktreePath;
@@ -165,22 +209,11 @@ function buildWorkspaceCommandEnv(input) {
165
209
  }
166
210
  async function runWorkspaceCommand(input) {
167
211
  const shell = process.env.SHELL?.trim() || "/bin/sh";
168
- const proc = await new Promise((resolve, reject) => {
169
- const child = spawn(shell, ["-c", input.command], {
170
- cwd: input.cwd,
171
- env: input.env,
172
- stdio: ["ignore", "pipe", "pipe"],
173
- });
174
- let stdout = "";
175
- let stderr = "";
176
- child.stdout?.on("data", (chunk) => {
177
- stdout += String(chunk);
178
- });
179
- child.stderr?.on("data", (chunk) => {
180
- stderr += String(chunk);
181
- });
182
- child.on("error", reject);
183
- child.on("close", (code) => resolve({ stdout, stderr, code }));
212
+ const proc = await executeProcess({
213
+ command: shell,
214
+ args: ["-c", input.command],
215
+ cwd: input.cwd,
216
+ env: input.env,
184
217
  });
185
218
  if (proc.code === 0)
186
219
  return;
@@ -189,11 +222,90 @@ async function runWorkspaceCommand(input) {
189
222
  ? `${input.label} failed: ${details}`
190
223
  : `${input.label} failed with exit code ${proc.code ?? -1}`);
191
224
  }
225
+ async function recordGitOperation(recorder, input) {
226
+ if (!recorder) {
227
+ return runGit(input.args, input.cwd);
228
+ }
229
+ let stdout = "";
230
+ let stderr = "";
231
+ let code = null;
232
+ await recorder.recordOperation({
233
+ phase: input.phase,
234
+ command: formatCommandForDisplay("git", input.args),
235
+ cwd: input.cwd,
236
+ metadata: input.metadata ?? null,
237
+ run: async () => {
238
+ const result = await executeProcess({
239
+ command: "git",
240
+ args: input.args,
241
+ cwd: input.cwd,
242
+ });
243
+ stdout = result.stdout;
244
+ stderr = result.stderr;
245
+ code = result.code;
246
+ return {
247
+ status: result.code === 0 ? "succeeded" : "failed",
248
+ exitCode: result.code,
249
+ stdout: result.stdout,
250
+ stderr: result.stderr,
251
+ system: result.code === 0 ? input.successMessage ?? null : null,
252
+ };
253
+ },
254
+ });
255
+ if (code !== 0) {
256
+ const details = [stderr.trim(), stdout.trim()].filter(Boolean).join("\n");
257
+ throw new Error(details.length > 0
258
+ ? `${input.failureLabel ?? `git ${input.args.join(" ")}`} failed: ${details}`
259
+ : `${input.failureLabel ?? `git ${input.args.join(" ")}`} failed with exit code ${code ?? -1}`);
260
+ }
261
+ return stdout.trim();
262
+ }
263
+ async function recordWorkspaceCommandOperation(recorder, input) {
264
+ if (!recorder) {
265
+ await runWorkspaceCommand(input);
266
+ return;
267
+ }
268
+ let stdout = "";
269
+ let stderr = "";
270
+ let code = null;
271
+ await recorder.recordOperation({
272
+ phase: input.phase,
273
+ command: input.command,
274
+ cwd: input.cwd,
275
+ metadata: input.metadata ?? null,
276
+ run: async () => {
277
+ const shell = process.env.SHELL?.trim() || "/bin/sh";
278
+ const result = await executeProcess({
279
+ command: shell,
280
+ args: ["-c", input.command],
281
+ cwd: input.cwd,
282
+ env: input.env,
283
+ });
284
+ stdout = result.stdout;
285
+ stderr = result.stderr;
286
+ code = result.code;
287
+ return {
288
+ status: result.code === 0 ? "succeeded" : "failed",
289
+ exitCode: result.code,
290
+ stdout: result.stdout,
291
+ stderr: result.stderr,
292
+ system: result.code === 0 ? input.successMessage ?? null : null,
293
+ };
294
+ },
295
+ });
296
+ if (code === 0)
297
+ return;
298
+ const details = [stderr.trim(), stdout.trim()].filter(Boolean).join("\n");
299
+ throw new Error(details.length > 0
300
+ ? `${input.label} failed: ${details}`
301
+ : `${input.label} failed with exit code ${code ?? -1}`);
302
+ }
192
303
  async function provisionExecutionWorktree(input) {
193
304
  const provisionCommand = asString(input.strategy.provisionCommand, "").trim();
194
305
  if (!provisionCommand)
195
306
  return;
196
- await runWorkspaceCommand({
307
+ await recordWorkspaceCommandOperation(input.recorder, {
308
+ phase: "workspace_provision",
197
309
  command: provisionCommand,
198
310
  cwd: input.worktreePath,
199
311
  env: buildWorkspaceCommandEnv({
@@ -206,8 +318,47 @@ async function provisionExecutionWorktree(input) {
206
318
  created: input.created,
207
319
  }),
208
320
  label: `Execution workspace provision command "${provisionCommand}"`,
321
+ metadata: {
322
+ repoRoot: input.repoRoot,
323
+ worktreePath: input.worktreePath,
324
+ branchName: input.branchName,
325
+ created: input.created,
326
+ },
327
+ successMessage: `Provisioned workspace at ${input.worktreePath}\n`,
209
328
  });
210
329
  }
330
+ function buildExecutionWorkspaceCleanupEnv(input) {
331
+ const env = sanitizeRuntimeServiceBaseEnv(process.env);
332
+ env.PAPERCLIP_WORKSPACE_CWD = input.workspace.cwd ?? "";
333
+ env.PAPERCLIP_WORKSPACE_PATH = input.workspace.cwd ?? "";
334
+ env.PAPERCLIP_WORKSPACE_WORKTREE_PATH =
335
+ input.workspace.providerRef ?? input.workspace.cwd ?? "";
336
+ env.PAPERCLIP_WORKSPACE_BRANCH = input.workspace.branchName ?? "";
337
+ env.PAPERCLIP_WORKSPACE_BASE_CWD = input.projectWorkspaceCwd ?? "";
338
+ env.PAPERCLIP_WORKSPACE_REPO_ROOT = input.projectWorkspaceCwd ?? "";
339
+ env.PAPERCLIP_WORKSPACE_REPO_URL = input.workspace.repoUrl ?? "";
340
+ env.PAPERCLIP_WORKSPACE_REPO_REF = input.workspace.baseRef ?? "";
341
+ env.PAPERCLIP_PROJECT_ID = input.workspace.projectId ?? "";
342
+ env.PAPERCLIP_PROJECT_WORKSPACE_ID = input.workspace.projectWorkspaceId ?? "";
343
+ env.PAPERCLIP_ISSUE_ID = input.workspace.sourceIssueId ?? "";
344
+ return env;
345
+ }
346
+ async function resolveGitRepoRootForWorkspaceCleanup(worktreePath, projectWorkspaceCwd) {
347
+ if (projectWorkspaceCwd) {
348
+ const resolvedProjectWorkspaceCwd = path.resolve(projectWorkspaceCwd);
349
+ const gitDir = await runGit(["rev-parse", "--git-common-dir"], resolvedProjectWorkspaceCwd)
350
+ .catch(() => null);
351
+ if (gitDir) {
352
+ const resolvedGitDir = path.resolve(resolvedProjectWorkspaceCwd, gitDir);
353
+ return path.dirname(resolvedGitDir);
354
+ }
355
+ }
356
+ const gitDir = await runGit(["rev-parse", "--git-common-dir"], worktreePath).catch(() => null);
357
+ if (!gitDir)
358
+ return null;
359
+ const resolvedGitDir = path.resolve(worktreePath, gitDir);
360
+ return path.dirname(resolvedGitDir);
361
+ }
211
362
  export async function realizeExecutionWorkspace(input) {
212
363
  const rawStrategy = parseObject(input.config.workspaceStrategy);
213
364
  const strategyType = asString(rawStrategy.type, "project_primary");
@@ -242,6 +393,25 @@ export async function realizeExecutionWorkspace(input) {
242
393
  if (existingWorktree) {
243
394
  const existingGitDir = await runGit(["rev-parse", "--git-dir"], worktreePath).catch(() => null);
244
395
  if (existingGitDir) {
396
+ if (input.recorder) {
397
+ await input.recorder.recordOperation({
398
+ phase: "worktree_prepare",
399
+ cwd: repoRoot,
400
+ metadata: {
401
+ repoRoot,
402
+ worktreePath,
403
+ branchName,
404
+ baseRef,
405
+ created: false,
406
+ reused: true,
407
+ },
408
+ run: async () => ({
409
+ status: "succeeded",
410
+ exitCode: 0,
411
+ system: `Reused existing git worktree at ${worktreePath}\n`,
412
+ }),
413
+ });
414
+ }
245
415
  await provisionExecutionWorktree({
246
416
  strategy: rawStrategy,
247
417
  base: input.base,
@@ -251,6 +421,7 @@ export async function realizeExecutionWorkspace(input) {
251
421
  issue: input.issue,
252
422
  agent: input.agent,
253
423
  created: false,
424
+ recorder: input.recorder ?? null,
254
425
  });
255
426
  return {
256
427
  ...input.base,
@@ -264,7 +435,42 @@ export async function realizeExecutionWorkspace(input) {
264
435
  }
265
436
  throw new Error(`Configured worktree path "${worktreePath}" already exists and is not a git worktree.`);
266
437
  }
267
- await runGit(["worktree", "add", "-B", branchName, worktreePath, baseRef], repoRoot);
438
+ try {
439
+ await recordGitOperation(input.recorder, {
440
+ phase: "worktree_prepare",
441
+ args: ["worktree", "add", "-b", branchName, worktreePath, baseRef],
442
+ cwd: repoRoot,
443
+ metadata: {
444
+ repoRoot,
445
+ worktreePath,
446
+ branchName,
447
+ baseRef,
448
+ created: true,
449
+ },
450
+ successMessage: `Created git worktree at ${worktreePath}\n`,
451
+ failureLabel: `git worktree add ${worktreePath}`,
452
+ });
453
+ }
454
+ catch (error) {
455
+ if (!gitErrorIncludes(error, "already exists")) {
456
+ throw error;
457
+ }
458
+ await recordGitOperation(input.recorder, {
459
+ phase: "worktree_prepare",
460
+ args: ["worktree", "add", worktreePath, branchName],
461
+ cwd: repoRoot,
462
+ metadata: {
463
+ repoRoot,
464
+ worktreePath,
465
+ branchName,
466
+ baseRef,
467
+ created: false,
468
+ reusedExistingBranch: true,
469
+ },
470
+ successMessage: `Attached existing branch ${branchName} at ${worktreePath}\n`,
471
+ failureLabel: `git worktree add ${worktreePath}`,
472
+ });
473
+ }
268
474
  await provisionExecutionWorktree({
269
475
  strategy: rawStrategy,
270
476
  base: input.base,
@@ -274,6 +480,7 @@ export async function realizeExecutionWorkspace(input) {
274
480
  issue: input.issue,
275
481
  agent: input.agent,
276
482
  created: true,
483
+ recorder: input.recorder ?? null,
277
484
  });
278
485
  return {
279
486
  ...input.base,
@@ -285,6 +492,134 @@ export async function realizeExecutionWorkspace(input) {
285
492
  created: true,
286
493
  };
287
494
  }
495
+ export async function cleanupExecutionWorkspaceArtifacts(input) {
496
+ const warnings = [];
497
+ const workspacePath = input.workspace.providerRef ?? input.workspace.cwd;
498
+ const cleanupEnv = buildExecutionWorkspaceCleanupEnv({
499
+ workspace: input.workspace,
500
+ projectWorkspaceCwd: input.projectWorkspace?.cwd ?? null,
501
+ });
502
+ const createdByRuntime = input.workspace.metadata?.createdByRuntime === true;
503
+ const cleanupCommands = [
504
+ input.projectWorkspace?.cleanupCommand ?? null,
505
+ input.teardownCommand ?? null,
506
+ ]
507
+ .map((value) => asString(value, "").trim())
508
+ .filter(Boolean);
509
+ for (const command of cleanupCommands) {
510
+ try {
511
+ await recordWorkspaceCommandOperation(input.recorder, {
512
+ phase: "workspace_teardown",
513
+ command,
514
+ cwd: workspacePath ?? input.projectWorkspace?.cwd ?? process.cwd(),
515
+ env: cleanupEnv,
516
+ label: `Execution workspace cleanup command "${command}"`,
517
+ metadata: {
518
+ workspaceId: input.workspace.id,
519
+ workspacePath,
520
+ branchName: input.workspace.branchName,
521
+ providerType: input.workspace.providerType,
522
+ },
523
+ successMessage: `Completed cleanup command "${command}"\n`,
524
+ });
525
+ }
526
+ catch (err) {
527
+ warnings.push(err instanceof Error ? err.message : String(err));
528
+ }
529
+ }
530
+ if (input.workspace.providerType === "git_worktree" && workspacePath) {
531
+ const repoRoot = await resolveGitRepoRootForWorkspaceCleanup(workspacePath, input.projectWorkspace?.cwd ?? null);
532
+ const worktreeExists = await directoryExists(workspacePath);
533
+ if (worktreeExists) {
534
+ if (!repoRoot) {
535
+ warnings.push(`Could not resolve git repo root for "${workspacePath}".`);
536
+ }
537
+ else {
538
+ try {
539
+ await recordGitOperation(input.recorder, {
540
+ phase: "worktree_cleanup",
541
+ args: ["worktree", "remove", "--force", workspacePath],
542
+ cwd: repoRoot,
543
+ metadata: {
544
+ workspaceId: input.workspace.id,
545
+ workspacePath,
546
+ branchName: input.workspace.branchName,
547
+ cleanupAction: "worktree_remove",
548
+ },
549
+ successMessage: `Removed git worktree ${workspacePath}\n`,
550
+ failureLabel: `git worktree remove ${workspacePath}`,
551
+ });
552
+ }
553
+ catch (err) {
554
+ warnings.push(err instanceof Error ? err.message : String(err));
555
+ }
556
+ }
557
+ }
558
+ if (createdByRuntime && input.workspace.branchName) {
559
+ if (!repoRoot) {
560
+ warnings.push(`Could not resolve git repo root to delete branch "${input.workspace.branchName}".`);
561
+ }
562
+ else {
563
+ try {
564
+ await recordGitOperation(input.recorder, {
565
+ phase: "worktree_cleanup",
566
+ args: ["branch", "-d", input.workspace.branchName],
567
+ cwd: repoRoot,
568
+ metadata: {
569
+ workspaceId: input.workspace.id,
570
+ workspacePath,
571
+ branchName: input.workspace.branchName,
572
+ cleanupAction: "branch_delete",
573
+ },
574
+ successMessage: `Deleted branch ${input.workspace.branchName}\n`,
575
+ failureLabel: `git branch -d ${input.workspace.branchName}`,
576
+ });
577
+ }
578
+ catch (err) {
579
+ const message = err instanceof Error ? err.message : String(err);
580
+ warnings.push(`Skipped deleting branch "${input.workspace.branchName}": ${message}`);
581
+ }
582
+ }
583
+ }
584
+ }
585
+ else if (input.workspace.providerType === "local_fs" && createdByRuntime && workspacePath) {
586
+ const projectWorkspaceCwd = input.projectWorkspace?.cwd ? path.resolve(input.projectWorkspace.cwd) : null;
587
+ const resolvedWorkspacePath = path.resolve(workspacePath);
588
+ const containsProjectWorkspace = projectWorkspaceCwd
589
+ ? (resolvedWorkspacePath === projectWorkspaceCwd ||
590
+ projectWorkspaceCwd.startsWith(`${resolvedWorkspacePath}${path.sep}`))
591
+ : false;
592
+ if (containsProjectWorkspace) {
593
+ warnings.push(`Refusing to remove path "${workspacePath}" because it contains the project workspace.`);
594
+ }
595
+ else {
596
+ await fs.rm(resolvedWorkspacePath, { recursive: true, force: true });
597
+ if (input.recorder) {
598
+ await input.recorder.recordOperation({
599
+ phase: "workspace_teardown",
600
+ cwd: projectWorkspaceCwd ?? process.cwd(),
601
+ metadata: {
602
+ workspaceId: input.workspace.id,
603
+ workspacePath: resolvedWorkspacePath,
604
+ cleanupAction: "remove_local_fs",
605
+ },
606
+ run: async () => ({
607
+ status: "succeeded",
608
+ exitCode: 0,
609
+ system: `Removed local workspace directory ${resolvedWorkspacePath}\n`,
610
+ }),
611
+ });
612
+ }
613
+ }
614
+ }
615
+ const cleaned = !workspacePath ||
616
+ !(await directoryExists(workspacePath));
617
+ return {
618
+ cleanedPath: workspacePath,
619
+ cleaned,
620
+ warnings,
621
+ };
622
+ }
288
623
  async function allocatePort() {
289
624
  return await new Promise((resolve, reject) => {
290
625
  const server = net.createServer();
@@ -336,8 +671,9 @@ function resolveServiceScopeId(input) {
336
671
  : "run";
337
672
  if (scopeType === "project_workspace")
338
673
  return { scopeType, scopeId: input.workspace.workspaceId ?? input.workspace.projectId };
339
- if (scopeType === "execution_workspace")
340
- return { scopeType, scopeId: input.workspace.cwd };
674
+ if (scopeType === "execution_workspace") {
675
+ return { scopeType, scopeId: input.executionWorkspaceId ?? input.workspace.cwd };
676
+ }
341
677
  if (scopeType === "agent")
342
678
  return { scopeType, scopeId: input.agent.id };
343
679
  return { scopeType: "run", scopeId: input.runId };
@@ -371,6 +707,7 @@ function toPersistedWorkspaceRuntimeService(record) {
371
707
  companyId: record.companyId,
372
708
  projectId: record.projectId,
373
709
  projectWorkspaceId: record.projectWorkspaceId,
710
+ executionWorkspaceId: record.executionWorkspaceId,
374
711
  issueId: record.issueId,
375
712
  scopeType: record.scopeType,
376
713
  scopeId: record.scopeId,
@@ -406,6 +743,7 @@ async function persistRuntimeServiceRecord(db, record) {
406
743
  set: {
407
744
  projectId: values.projectId,
408
745
  projectWorkspaceId: values.projectWorkspaceId,
746
+ executionWorkspaceId: values.executionWorkspaceId,
409
747
  issueId: values.issueId,
410
748
  scopeType: values.scopeType,
411
749
  scopeId: values.scopeId,
@@ -444,7 +782,7 @@ export function normalizeAdapterManagedRuntimeServices(input) {
444
782
  (scopeType === "project_workspace"
445
783
  ? input.workspace.workspaceId
446
784
  : scopeType === "execution_workspace"
447
- ? input.workspace.cwd
785
+ ? input.executionWorkspaceId ?? input.workspace.cwd
448
786
  : scopeType === "agent"
449
787
  ? input.agent.id
450
788
  : input.runId) ??
@@ -468,6 +806,7 @@ export function normalizeAdapterManagedRuntimeServices(input) {
468
806
  companyId: input.agent.companyId,
469
807
  projectId: report.projectId ?? input.workspace.projectId,
470
808
  projectWorkspaceId: report.projectWorkspaceId ?? input.workspace.workspaceId,
809
+ executionWorkspaceId: input.executionWorkspaceId ?? null,
471
810
  issueId: report.issueId ?? input.issue?.id ?? null,
472
811
  serviceName,
473
812
  status,
@@ -510,7 +849,10 @@ async function startLocalRuntimeService(input) {
510
849
  port,
511
850
  });
512
851
  const serviceCwd = resolveConfiguredPath(renderTemplate(serviceCwdTemplate, templateData), input.workspace.cwd);
513
- const env = { ...process.env, ...input.adapterEnv };
852
+ const env = {
853
+ ...sanitizeRuntimeServiceBaseEnv(process.env),
854
+ ...input.adapterEnv,
855
+ };
514
856
  for (const [key, value] of Object.entries(envConfig)) {
515
857
  if (typeof value === "string") {
516
858
  env[key] = renderTemplate(value, templateData);
@@ -524,7 +866,7 @@ async function startLocalRuntimeService(input) {
524
866
  const child = spawn(shell, ["-lc", command], {
525
867
  cwd: serviceCwd,
526
868
  env,
527
- detached: false,
869
+ detached: process.platform !== "win32",
528
870
  stdio: ["ignore", "pipe", "pipe"],
529
871
  });
530
872
  let stderrExcerpt = "";
@@ -550,7 +892,7 @@ async function startLocalRuntimeService(input) {
550
892
  await waitForReadiness({ service: input.service, url });
551
893
  }
552
894
  catch (err) {
553
- child.kill("SIGTERM");
895
+ terminateChildProcess(child);
554
896
  throw new Error(`Failed to start runtime service "${serviceName}": ${err instanceof Error ? err.message : String(err)}${stderrExcerpt ? ` | stderr: ${stderrExcerpt.trim()}` : ""}`);
555
897
  }
556
898
  const envFingerprint = createHash("sha256").update(stableStringify(envConfig)).digest("hex");
@@ -559,6 +901,7 @@ async function startLocalRuntimeService(input) {
559
901
  companyId: input.agent.companyId,
560
902
  projectId: input.workspace.projectId,
561
903
  projectWorkspaceId: input.workspace.workspaceId,
904
+ executionWorkspaceId: input.executionWorkspaceId ?? null,
562
905
  issueId: input.issue?.id ?? null,
563
906
  serviceName,
564
907
  status: "running",
@@ -605,8 +948,8 @@ async function stopRuntimeService(serviceId) {
605
948
  record.status = "stopped";
606
949
  record.lastUsedAt = new Date().toISOString();
607
950
  record.stoppedAt = new Date().toISOString();
608
- if (record.child && !record.child.killed) {
609
- record.child.kill("SIGTERM");
951
+ if (record.child && record.child.pid) {
952
+ terminateChildProcess(record.child);
610
953
  }
611
954
  runtimeServicesById.delete(serviceId);
612
955
  if (record.reuseKey) {
@@ -614,6 +957,19 @@ async function stopRuntimeService(serviceId) {
614
957
  }
615
958
  await persistRuntimeServiceRecord(record.db, record);
616
959
  }
960
+ async function markPersistedRuntimeServicesStoppedForExecutionWorkspace(input) {
961
+ const now = new Date();
962
+ await input.db
963
+ .update(workspaceRuntimeServices)
964
+ .set({
965
+ status: "stopped",
966
+ healthStatus: "unknown",
967
+ stoppedAt: now,
968
+ lastUsedAt: now,
969
+ updatedAt: now,
970
+ })
971
+ .where(and(eq(workspaceRuntimeServices.executionWorkspaceId, input.executionWorkspaceId), inArray(workspaceRuntimeServices.status, ["starting", "running"])));
972
+ }
617
973
  function registerRuntimeService(db, record) {
618
974
  record.db = db;
619
975
  runtimeServicesById.set(record.id, record);
@@ -650,6 +1006,7 @@ export async function ensureRuntimeServicesForRun(input) {
650
1006
  const { scopeType, scopeId } = resolveServiceScopeId({
651
1007
  service,
652
1008
  workspace: input.workspace,
1009
+ executionWorkspaceId: input.executionWorkspaceId,
653
1010
  issue: input.issue,
654
1011
  runId: input.runId,
655
1012
  agent: input.agent,
@@ -680,6 +1037,7 @@ export async function ensureRuntimeServicesForRun(input) {
680
1037
  agent: input.agent,
681
1038
  issue: input.issue,
682
1039
  workspace: input.workspace,
1040
+ executionWorkspaceId: input.executionWorkspaceId,
683
1041
  adapterEnv: input.adapterEnv,
684
1042
  service,
685
1043
  onLog: input.onLog,
@@ -719,6 +1077,29 @@ export async function releaseRuntimeServicesForRun(runId) {
719
1077
  }
720
1078
  }
721
1079
  }
1080
+ export async function stopRuntimeServicesForExecutionWorkspace(input) {
1081
+ const normalizedWorkspaceCwd = input.workspaceCwd ? path.resolve(input.workspaceCwd) : null;
1082
+ const matchingServiceIds = Array.from(runtimeServicesById.values())
1083
+ .filter((record) => {
1084
+ if (record.executionWorkspaceId === input.executionWorkspaceId)
1085
+ return true;
1086
+ if (!normalizedWorkspaceCwd || !record.cwd)
1087
+ return false;
1088
+ const resolvedCwd = path.resolve(record.cwd);
1089
+ return (resolvedCwd === normalizedWorkspaceCwd ||
1090
+ resolvedCwd.startsWith(`${normalizedWorkspaceCwd}${path.sep}`));
1091
+ })
1092
+ .map((record) => record.id);
1093
+ for (const serviceId of matchingServiceIds) {
1094
+ await stopRuntimeService(serviceId);
1095
+ }
1096
+ if (input.db) {
1097
+ await markPersistedRuntimeServicesStoppedForExecutionWorkspace({
1098
+ db: input.db,
1099
+ executionWorkspaceId: input.executionWorkspaceId,
1100
+ });
1101
+ }
1102
+ }
722
1103
  export async function listWorkspaceRuntimeServicesForProjectWorkspaces(db, companyId, projectWorkspaceIds) {
723
1104
  if (projectWorkspaceIds.length === 0)
724
1105
  return new Map();
@@ -779,6 +1160,7 @@ export async function persistAdapterManagedRuntimeServices(input) {
779
1160
  companyId: ref.companyId,
780
1161
  projectId: ref.projectId,
781
1162
  projectWorkspaceId: ref.projectWorkspaceId,
1163
+ executionWorkspaceId: ref.executionWorkspaceId,
782
1164
  issueId: ref.issueId,
783
1165
  scopeType: ref.scopeType,
784
1166
  scopeId: ref.scopeId,
@@ -807,6 +1189,7 @@ export async function persistAdapterManagedRuntimeServices(input) {
807
1189
  set: {
808
1190
  projectId: ref.projectId,
809
1191
  projectWorkspaceId: ref.projectWorkspaceId,
1192
+ executionWorkspaceId: ref.executionWorkspaceId,
810
1193
  issueId: ref.issueId,
811
1194
  scopeType: ref.scopeType,
812
1195
  scopeId: ref.scopeId,