@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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-registry.d.ts","sourceRoot":"","sources":["../../src/services/plugin-registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,539 @@
1
+ import { asc, eq, ne, sql, and } from "drizzle-orm";
2
+ import { plugins, pluginConfig, pluginEntities, pluginJobs, pluginJobRuns, pluginWebhookDeliveries, } from "@paperclipai/db";
3
+ import { conflict, notFound } from "../errors.js";
4
+ // ---------------------------------------------------------------------------
5
+ // Helpers
6
+ // ---------------------------------------------------------------------------
7
+ /**
8
+ * Detect if a Postgres error is a unique-constraint violation on the
9
+ * `plugins_plugin_key_idx` unique index.
10
+ */
11
+ function isPluginKeyConflict(error) {
12
+ if (typeof error !== "object" || error === null)
13
+ return false;
14
+ const err = error;
15
+ const constraint = err.constraint ?? err.constraint_name;
16
+ return err.code === "23505" && constraint === "plugins_plugin_key_idx";
17
+ }
18
+ // ---------------------------------------------------------------------------
19
+ // Service
20
+ // ---------------------------------------------------------------------------
21
+ /**
22
+ * PluginRegistry – CRUD operations for the `plugins` and `plugin_config`
23
+ * tables. Follows the same factory-function pattern used by the rest of
24
+ * the Paperclip service layer.
25
+ *
26
+ * This is the lowest-level persistence layer for plugins. Higher-level
27
+ * concerns such as lifecycle state-machine enforcement and capability
28
+ * gating are handled by {@link pluginLifecycleManager} and
29
+ * {@link pluginCapabilityValidator} respectively.
30
+ *
31
+ * @see PLUGIN_SPEC.md §21.3 — Required Tables
32
+ */
33
+ export function pluginRegistryService(db) {
34
+ // -----------------------------------------------------------------------
35
+ // Internal helpers
36
+ // -----------------------------------------------------------------------
37
+ async function getById(id) {
38
+ return db
39
+ .select()
40
+ .from(plugins)
41
+ .where(eq(plugins.id, id))
42
+ .then((rows) => rows[0] ?? null);
43
+ }
44
+ async function getByKey(pluginKey) {
45
+ return db
46
+ .select()
47
+ .from(plugins)
48
+ .where(eq(plugins.pluginKey, pluginKey))
49
+ .then((rows) => rows[0] ?? null);
50
+ }
51
+ async function nextInstallOrder() {
52
+ const result = await db
53
+ .select({ maxOrder: sql `coalesce(max(${plugins.installOrder}), 0)` })
54
+ .from(plugins);
55
+ return (result[0]?.maxOrder ?? 0) + 1;
56
+ }
57
+ // -----------------------------------------------------------------------
58
+ // Public API
59
+ // -----------------------------------------------------------------------
60
+ return {
61
+ // ----- Read -----------------------------------------------------------
62
+ /** List all registered plugins ordered by install order. */
63
+ list: () => db
64
+ .select()
65
+ .from(plugins)
66
+ .orderBy(asc(plugins.installOrder)),
67
+ /**
68
+ * List installed plugins (excludes soft-deleted/uninstalled).
69
+ * Use for Plugin Manager and default API list so uninstalled plugins do not appear.
70
+ */
71
+ listInstalled: () => db
72
+ .select()
73
+ .from(plugins)
74
+ .where(ne(plugins.status, "uninstalled"))
75
+ .orderBy(asc(plugins.installOrder)),
76
+ /** List plugins filtered by status. */
77
+ listByStatus: (status) => db
78
+ .select()
79
+ .from(plugins)
80
+ .where(eq(plugins.status, status))
81
+ .orderBy(asc(plugins.installOrder)),
82
+ /** Get a single plugin by primary key. */
83
+ getById,
84
+ /** Get a single plugin by its unique `pluginKey`. */
85
+ getByKey,
86
+ // ----- Install / Register --------------------------------------------
87
+ /**
88
+ * Register (install) a new plugin.
89
+ *
90
+ * The caller is expected to have already resolved and validated the
91
+ * manifest from the package. This method persists the plugin row and
92
+ * assigns the next install order.
93
+ */
94
+ install: async (input, manifest) => {
95
+ const existing = await getByKey(manifest.id);
96
+ if (existing) {
97
+ if (existing.status !== "uninstalled") {
98
+ throw conflict(`Plugin already installed: ${manifest.id}`);
99
+ }
100
+ // Reinstall after soft-delete: reactivate the existing row so plugin-scoped
101
+ // data and references remain stable across uninstall/reinstall cycles.
102
+ return db
103
+ .update(plugins)
104
+ .set({
105
+ packageName: input.packageName,
106
+ packagePath: input.packagePath ?? null,
107
+ version: manifest.version,
108
+ apiVersion: manifest.apiVersion,
109
+ categories: manifest.categories,
110
+ manifestJson: manifest,
111
+ status: "installed",
112
+ lastError: null,
113
+ updatedAt: new Date(),
114
+ })
115
+ .where(eq(plugins.id, existing.id))
116
+ .returning()
117
+ .then((rows) => rows[0] ?? null);
118
+ }
119
+ const installOrder = await nextInstallOrder();
120
+ try {
121
+ const rows = await db
122
+ .insert(plugins)
123
+ .values({
124
+ pluginKey: manifest.id,
125
+ packageName: input.packageName,
126
+ version: manifest.version,
127
+ apiVersion: manifest.apiVersion,
128
+ categories: manifest.categories,
129
+ manifestJson: manifest,
130
+ status: "installed",
131
+ installOrder,
132
+ packagePath: input.packagePath ?? null,
133
+ })
134
+ .returning();
135
+ return rows[0];
136
+ }
137
+ catch (error) {
138
+ if (isPluginKeyConflict(error)) {
139
+ throw conflict(`Plugin already installed: ${manifest.id}`);
140
+ }
141
+ throw error;
142
+ }
143
+ },
144
+ // ----- Update ---------------------------------------------------------
145
+ /**
146
+ * Update a plugin's manifest and version (e.g. on upgrade).
147
+ * The plugin must already exist.
148
+ */
149
+ update: async (id, data) => {
150
+ const plugin = await getById(id);
151
+ if (!plugin)
152
+ throw notFound("Plugin not found");
153
+ const setClause = {
154
+ updatedAt: new Date(),
155
+ };
156
+ if (data.packageName !== undefined)
157
+ setClause.packageName = data.packageName;
158
+ if (data.version !== undefined)
159
+ setClause.version = data.version;
160
+ if (data.manifest !== undefined) {
161
+ setClause.manifestJson = data.manifest;
162
+ setClause.apiVersion = data.manifest.apiVersion;
163
+ setClause.categories = data.manifest.categories;
164
+ }
165
+ return db
166
+ .update(plugins)
167
+ .set(setClause)
168
+ .where(eq(plugins.id, id))
169
+ .returning()
170
+ .then((rows) => rows[0] ?? null);
171
+ },
172
+ // ----- Status ---------------------------------------------------------
173
+ /** Update a plugin's lifecycle status and optional error message. */
174
+ updateStatus: async (id, input) => {
175
+ const plugin = await getById(id);
176
+ if (!plugin)
177
+ throw notFound("Plugin not found");
178
+ return db
179
+ .update(plugins)
180
+ .set({
181
+ status: input.status,
182
+ lastError: input.lastError ?? null,
183
+ updatedAt: new Date(),
184
+ })
185
+ .where(eq(plugins.id, id))
186
+ .returning()
187
+ .then((rows) => rows[0] ?? null);
188
+ },
189
+ // ----- Uninstall / Remove --------------------------------------------
190
+ /**
191
+ * Uninstall a plugin.
192
+ *
193
+ * When `removeData` is true the plugin row (and cascaded config) is
194
+ * hard-deleted. Otherwise the status is set to `"uninstalled"` for
195
+ * a soft-delete that preserves the record.
196
+ */
197
+ uninstall: async (id, removeData = false) => {
198
+ const plugin = await getById(id);
199
+ if (!plugin)
200
+ throw notFound("Plugin not found");
201
+ if (removeData) {
202
+ // Hard delete – plugin_config cascades via FK onDelete
203
+ return db
204
+ .delete(plugins)
205
+ .where(eq(plugins.id, id))
206
+ .returning()
207
+ .then((rows) => rows[0] ?? null);
208
+ }
209
+ // Soft delete – mark as uninstalled
210
+ return db
211
+ .update(plugins)
212
+ .set({
213
+ status: "uninstalled",
214
+ updatedAt: new Date(),
215
+ })
216
+ .where(eq(plugins.id, id))
217
+ .returning()
218
+ .then((rows) => rows[0] ?? null);
219
+ },
220
+ // ----- Config ---------------------------------------------------------
221
+ /** Retrieve a plugin's instance configuration. */
222
+ getConfig: (pluginId) => db
223
+ .select()
224
+ .from(pluginConfig)
225
+ .where(eq(pluginConfig.pluginId, pluginId))
226
+ .then((rows) => rows[0] ?? null),
227
+ /**
228
+ * Create or fully replace a plugin's instance configuration.
229
+ * If a config row already exists for the plugin it is replaced;
230
+ * otherwise a new row is inserted.
231
+ */
232
+ upsertConfig: async (pluginId, input) => {
233
+ const plugin = await getById(pluginId);
234
+ if (!plugin)
235
+ throw notFound("Plugin not found");
236
+ const existing = await db
237
+ .select()
238
+ .from(pluginConfig)
239
+ .where(eq(pluginConfig.pluginId, pluginId))
240
+ .then((rows) => rows[0] ?? null);
241
+ if (existing) {
242
+ return db
243
+ .update(pluginConfig)
244
+ .set({
245
+ configJson: input.configJson,
246
+ lastError: null,
247
+ updatedAt: new Date(),
248
+ })
249
+ .where(eq(pluginConfig.pluginId, pluginId))
250
+ .returning()
251
+ .then((rows) => rows[0]);
252
+ }
253
+ return db
254
+ .insert(pluginConfig)
255
+ .values({
256
+ pluginId,
257
+ configJson: input.configJson,
258
+ })
259
+ .returning()
260
+ .then((rows) => rows[0]);
261
+ },
262
+ /**
263
+ * Partially update a plugin's instance configuration via shallow merge.
264
+ * If no config row exists yet one is created with the supplied values.
265
+ */
266
+ patchConfig: async (pluginId, input) => {
267
+ const plugin = await getById(pluginId);
268
+ if (!plugin)
269
+ throw notFound("Plugin not found");
270
+ const existing = await db
271
+ .select()
272
+ .from(pluginConfig)
273
+ .where(eq(pluginConfig.pluginId, pluginId))
274
+ .then((rows) => rows[0] ?? null);
275
+ if (existing) {
276
+ const merged = { ...existing.configJson, ...input.configJson };
277
+ return db
278
+ .update(pluginConfig)
279
+ .set({
280
+ configJson: merged,
281
+ lastError: null,
282
+ updatedAt: new Date(),
283
+ })
284
+ .where(eq(pluginConfig.pluginId, pluginId))
285
+ .returning()
286
+ .then((rows) => rows[0]);
287
+ }
288
+ return db
289
+ .insert(pluginConfig)
290
+ .values({
291
+ pluginId,
292
+ configJson: input.configJson,
293
+ })
294
+ .returning()
295
+ .then((rows) => rows[0]);
296
+ },
297
+ /**
298
+ * Record an error against a plugin's config (e.g. validation failure
299
+ * against the plugin's instanceConfigSchema).
300
+ */
301
+ setConfigError: async (pluginId, lastError) => {
302
+ const rows = await db
303
+ .update(pluginConfig)
304
+ .set({ lastError, updatedAt: new Date() })
305
+ .where(eq(pluginConfig.pluginId, pluginId))
306
+ .returning();
307
+ if (rows.length === 0)
308
+ throw notFound("Plugin config not found");
309
+ return rows[0];
310
+ },
311
+ /** Delete a plugin's config row. */
312
+ deleteConfig: async (pluginId) => {
313
+ const rows = await db
314
+ .delete(pluginConfig)
315
+ .where(eq(pluginConfig.pluginId, pluginId))
316
+ .returning();
317
+ return rows[0] ?? null;
318
+ },
319
+ // ----- Entities -------------------------------------------------------
320
+ /**
321
+ * List persistent entity mappings owned by a specific plugin, with filtering and pagination.
322
+ *
323
+ * @param pluginId - The UUID of the plugin.
324
+ * @param query - Optional filters (type, externalId) and pagination (limit, offset).
325
+ * @returns A list of matching `PluginEntityRecord` objects.
326
+ */
327
+ listEntities: (pluginId, query) => {
328
+ const conditions = [eq(pluginEntities.pluginId, pluginId)];
329
+ if (query?.entityType)
330
+ conditions.push(eq(pluginEntities.entityType, query.entityType));
331
+ if (query?.externalId)
332
+ conditions.push(eq(pluginEntities.externalId, query.externalId));
333
+ return db
334
+ .select()
335
+ .from(pluginEntities)
336
+ .where(and(...conditions))
337
+ .orderBy(asc(pluginEntities.createdAt))
338
+ .limit(query?.limit ?? 100)
339
+ .offset(query?.offset ?? 0);
340
+ },
341
+ /**
342
+ * Look up a plugin-owned entity mapping by its external identifier.
343
+ *
344
+ * @param pluginId - The UUID of the plugin.
345
+ * @param entityType - The type of entity (e.g., 'project', 'issue').
346
+ * @param externalId - The identifier in the external system.
347
+ * @returns The matching `PluginEntityRecord` or null.
348
+ */
349
+ getEntityByExternalId: (pluginId, entityType, externalId) => db
350
+ .select()
351
+ .from(pluginEntities)
352
+ .where(and(eq(pluginEntities.pluginId, pluginId), eq(pluginEntities.entityType, entityType), eq(pluginEntities.externalId, externalId)))
353
+ .then((rows) => rows[0] ?? null),
354
+ /**
355
+ * Create or update a persistent mapping between a Paperclip object and an
356
+ * external entity.
357
+ *
358
+ * @param pluginId - The UUID of the plugin.
359
+ * @param input - The entity data to persist.
360
+ * @returns The newly created or updated `PluginEntityRecord`.
361
+ */
362
+ upsertEntity: async (pluginId, input) => {
363
+ // Drizzle doesn't support pg-specific onConflictDoUpdate easily in the insert() call
364
+ // with complex where clauses, so we do it manually.
365
+ const existing = await db
366
+ .select()
367
+ .from(pluginEntities)
368
+ .where(and(eq(pluginEntities.pluginId, pluginId), eq(pluginEntities.entityType, input.entityType), eq(pluginEntities.externalId, input.externalId ?? "")))
369
+ .then((rows) => rows[0] ?? null);
370
+ if (existing) {
371
+ return db
372
+ .update(pluginEntities)
373
+ .set({
374
+ ...input,
375
+ updatedAt: new Date(),
376
+ })
377
+ .where(eq(pluginEntities.id, existing.id))
378
+ .returning()
379
+ .then((rows) => rows[0]);
380
+ }
381
+ return db
382
+ .insert(pluginEntities)
383
+ .values({
384
+ ...input,
385
+ pluginId,
386
+ })
387
+ .returning()
388
+ .then((rows) => rows[0]);
389
+ },
390
+ /**
391
+ * Delete a specific plugin-owned entity mapping by its internal UUID.
392
+ *
393
+ * @param id - The UUID of the entity record.
394
+ * @returns The deleted record, or null if not found.
395
+ */
396
+ deleteEntity: async (id) => {
397
+ const rows = await db
398
+ .delete(pluginEntities)
399
+ .where(eq(pluginEntities.id, id))
400
+ .returning();
401
+ return rows[0] ?? null;
402
+ },
403
+ // ----- Jobs -----------------------------------------------------------
404
+ /**
405
+ * List all scheduled jobs registered for a specific plugin.
406
+ *
407
+ * @param pluginId - The UUID of the plugin.
408
+ * @returns A list of `PluginJobRecord` objects.
409
+ */
410
+ listJobs: (pluginId) => db
411
+ .select()
412
+ .from(pluginJobs)
413
+ .where(eq(pluginJobs.pluginId, pluginId))
414
+ .orderBy(asc(pluginJobs.jobKey)),
415
+ /**
416
+ * Look up a plugin job by its unique job key.
417
+ *
418
+ * @param pluginId - The UUID of the plugin.
419
+ * @param jobKey - The key defined in the plugin manifest.
420
+ * @returns The matching `PluginJobRecord` or null.
421
+ */
422
+ getJobByKey: (pluginId, jobKey) => db
423
+ .select()
424
+ .from(pluginJobs)
425
+ .where(and(eq(pluginJobs.pluginId, pluginId), eq(pluginJobs.jobKey, jobKey)))
426
+ .then((rows) => rows[0] ?? null),
427
+ /**
428
+ * Register or update a scheduled job for a plugin.
429
+ *
430
+ * @param pluginId - The UUID of the plugin.
431
+ * @param jobKey - The unique key for the job.
432
+ * @param input - The schedule (cron) and optional status.
433
+ * @returns The updated or created `PluginJobRecord`.
434
+ */
435
+ upsertJob: async (pluginId, jobKey, input) => {
436
+ const existing = await db
437
+ .select()
438
+ .from(pluginJobs)
439
+ .where(and(eq(pluginJobs.pluginId, pluginId), eq(pluginJobs.jobKey, jobKey)))
440
+ .then((rows) => rows[0] ?? null);
441
+ if (existing) {
442
+ return db
443
+ .update(pluginJobs)
444
+ .set({
445
+ schedule: input.schedule,
446
+ status: input.status ?? existing.status,
447
+ updatedAt: new Date(),
448
+ })
449
+ .where(eq(pluginJobs.id, existing.id))
450
+ .returning()
451
+ .then((rows) => rows[0]);
452
+ }
453
+ return db
454
+ .insert(pluginJobs)
455
+ .values({
456
+ pluginId,
457
+ jobKey,
458
+ schedule: input.schedule,
459
+ status: input.status ?? "active",
460
+ })
461
+ .returning()
462
+ .then((rows) => rows[0]);
463
+ },
464
+ /**
465
+ * Record the start of a specific job execution.
466
+ *
467
+ * @param pluginId - The UUID of the plugin.
468
+ * @param jobId - The UUID of the parent job record.
469
+ * @param trigger - What triggered this run (e.g., 'schedule', 'manual').
470
+ * @returns The newly created `PluginJobRunRecord` in 'pending' status.
471
+ */
472
+ createJobRun: async (pluginId, jobId, trigger) => {
473
+ return db
474
+ .insert(pluginJobRuns)
475
+ .values({
476
+ pluginId,
477
+ jobId,
478
+ trigger,
479
+ status: "pending",
480
+ })
481
+ .returning()
482
+ .then((rows) => rows[0]);
483
+ },
484
+ /**
485
+ * Update the status, duration, and logs of a job execution record.
486
+ *
487
+ * @param runId - The UUID of the job run.
488
+ * @param input - The update fields (status, error, duration, etc.).
489
+ * @returns The updated `PluginJobRunRecord`.
490
+ */
491
+ updateJobRun: async (runId, input) => {
492
+ return db
493
+ .update(pluginJobRuns)
494
+ .set(input)
495
+ .where(eq(pluginJobRuns.id, runId))
496
+ .returning()
497
+ .then((rows) => rows[0] ?? null);
498
+ },
499
+ // ----- Webhooks -------------------------------------------------------
500
+ /**
501
+ * Create a record for an incoming webhook delivery.
502
+ *
503
+ * @param pluginId - The UUID of the receiving plugin.
504
+ * @param webhookKey - The endpoint key defined in the manifest.
505
+ * @param input - The payload, headers, and optional external ID.
506
+ * @returns The newly created `PluginWebhookDeliveryRecord` in 'pending' status.
507
+ */
508
+ createWebhookDelivery: async (pluginId, webhookKey, input) => {
509
+ return db
510
+ .insert(pluginWebhookDeliveries)
511
+ .values({
512
+ pluginId,
513
+ webhookKey,
514
+ externalId: input.externalId,
515
+ payload: input.payload,
516
+ headers: input.headers ?? {},
517
+ status: "pending",
518
+ })
519
+ .returning()
520
+ .then((rows) => rows[0]);
521
+ },
522
+ /**
523
+ * Update the status and processing metrics of a webhook delivery.
524
+ *
525
+ * @param deliveryId - The UUID of the delivery record.
526
+ * @param input - The update fields (status, error, duration, etc.).
527
+ * @returns The updated `PluginWebhookDeliveryRecord`.
528
+ */
529
+ updateWebhookDelivery: async (deliveryId, input) => {
530
+ return db
531
+ .update(pluginWebhookDeliveries)
532
+ .set(input)
533
+ .where(eq(pluginWebhookDeliveries.id, deliveryId))
534
+ .returning()
535
+ .then((rows) => rows[0] ?? null);
536
+ },
537
+ };
538
+ }
539
+ //# sourceMappingURL=plugin-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-registry.js","sourceRoot":"","sources":["../../src/services/plugin-registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import type { PaperclipPluginManifestV1 } from "@paperclipai/shared";
2
+ import type { PluginCapabilityValidator } from "./plugin-capability-validator.js";
3
+ export declare class PluginSandboxError extends Error {
4
+ constructor(message: string);
5
+ }
6
+ /**
7
+ * Sandbox runtime options used when loading a plugin worker module.
8
+ *
9
+ * `allowedModuleSpecifiers` controls which bare module specifiers are permitted.
10
+ * `allowedModules` provides concrete host-provided bindings for those specifiers.
11
+ */
12
+ export interface PluginSandboxOptions {
13
+ entrypointPath: string;
14
+ allowedModuleSpecifiers?: ReadonlySet<string>;
15
+ allowedModules?: Readonly<Record<string, Record<string, unknown>>>;
16
+ allowedGlobals?: Record<string, unknown>;
17
+ timeoutMs?: number;
18
+ }
19
+ /**
20
+ * Operation-level runtime gate for plugin host API calls.
21
+ * Every host operation must be checked against manifest capabilities before execution.
22
+ */
23
+ export interface CapabilityScopedInvoker {
24
+ invoke<T>(operation: string, fn: () => Promise<T> | T): Promise<T>;
25
+ }
26
+ interface LoadedModule {
27
+ namespace: Record<string, unknown>;
28
+ }
29
+ export declare function createCapabilityScopedInvoker(manifest: PaperclipPluginManifestV1, validator: PluginCapabilityValidator): CapabilityScopedInvoker;
30
+ /**
31
+ * Load a CommonJS plugin module in a VM context with explicit module import allow-listing.
32
+ *
33
+ * Security properties:
34
+ * - no implicit access to host globals like `process`
35
+ * - no unrestricted built-in module imports
36
+ * - relative imports are resolved only inside the plugin root directory
37
+ */
38
+ export declare function loadPluginModuleInSandbox(options: PluginSandboxOptions): Promise<LoadedModule>;
39
+ export {};
40
+ //# sourceMappingURL=plugin-runtime-sandbox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-runtime-sandbox.d.ts","sourceRoot":"","sources":["../../src/services/plugin-runtime-sandbox.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AACrE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;AAElF,qBAAa,kBAAmB,SAAQ,KAAK;gBAC/B,OAAO,EAAE,MAAM;CAI5B;AAED;;;;;GAKG;AACH,MAAM,WAAW,oBAAoB;IACnC,cAAc,EAAE,MAAM,CAAC;IACvB,uBAAuB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC9C,cAAc,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IACnE,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACtC,MAAM,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CACpE;AAED,UAAU,YAAY;IACpB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAkBD,wBAAgB,6BAA6B,CAC3C,QAAQ,EAAE,yBAAyB,EACnC,SAAS,EAAE,yBAAyB,GACnC,uBAAuB,CAOzB;AAED;;;;;;;GAOG;AACH,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,YAAY,CAAC,CAkGvB"}