@capybara-hq/kernel 0.1.0-rc.3 → 0.1.0-rc.5

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 (604) hide show
  1. package/bootstrap.json +61 -5
  2. package/dist/admin/admin.controller.d.ts +47 -16
  3. package/dist/admin/admin.controller.js +44 -19
  4. package/dist/admin/extensions.controller.d.ts +24 -3
  5. package/dist/admin/extensions.controller.js +48 -8
  6. package/dist/admin/setup-lock.d.ts +1 -1
  7. package/dist/admin/setup-lock.js +1 -1
  8. package/dist/admin/setup.controller.d.ts +1 -1
  9. package/dist/admin/setup.controller.js +1 -1
  10. package/dist/admin/setup.service.d.ts +4 -4
  11. package/dist/admin/setup.service.js +8 -8
  12. package/dist/agents/agent-lookup.d.ts +19 -0
  13. package/dist/agents/agent-lookup.js +21 -0
  14. package/dist/agents/agent-profile.service.d.ts +29 -0
  15. package/dist/agents/agent-profile.service.js +117 -0
  16. package/dist/agents/agents.controller.d.ts +168 -3
  17. package/dist/agents/agents.controller.js +201 -12
  18. package/dist/agents/agents.module.d.ts +4 -1
  19. package/dist/agents/agents.module.js +36 -6
  20. package/dist/agents/agents.service.d.ts +64 -27
  21. package/dist/agents/agents.service.js +199 -74
  22. package/dist/agents/definition.d.ts +53 -0
  23. package/dist/agents/definition.js +55 -0
  24. package/dist/agents/from-template.d.ts +106 -0
  25. package/dist/agents/from-template.js +649 -0
  26. package/dist/agents/from-template.service.d.ts +60 -0
  27. package/dist/agents/from-template.service.js +161 -0
  28. package/dist/agents/instruction-files.d.ts +60 -0
  29. package/dist/agents/instruction-files.js +111 -0
  30. package/dist/agents/models.controller.d.ts +9 -3
  31. package/dist/agents/models.controller.js +19 -4
  32. package/dist/agents/org-templates.d.ts +176 -0
  33. package/dist/agents/org-templates.js +827 -0
  34. package/dist/agents/pending-connector-requests.d.ts +77 -0
  35. package/dist/agents/pending-connector-requests.js +215 -0
  36. package/dist/agents/pending-connectors.controller.d.ts +39 -0
  37. package/dist/agents/pending-connectors.controller.js +91 -0
  38. package/dist/agents/pending-connectors.service.d.ts +62 -0
  39. package/dist/agents/pending-connectors.service.js +282 -0
  40. package/dist/agents/profile.d.ts +96 -0
  41. package/dist/agents/profile.js +51 -0
  42. package/dist/agents/readiness.controller.d.ts +26 -0
  43. package/dist/agents/readiness.controller.js +56 -0
  44. package/dist/agents/templates.controller.d.ts +86 -5
  45. package/dist/agents/templates.controller.js +171 -7
  46. package/dist/agents/templates.d.ts +127 -23
  47. package/dist/agents/templates.js +476 -53
  48. package/dist/background/background.controller.d.ts +38 -0
  49. package/dist/background/background.controller.js +87 -0
  50. package/dist/background/background.module.d.ts +10 -0
  51. package/dist/background/background.module.js +39 -0
  52. package/dist/background/finish.d.ts +44 -0
  53. package/dist/background/finish.js +94 -0
  54. package/dist/background/launch-lock.d.ts +15 -0
  55. package/dist/background/launch-lock.js +40 -0
  56. package/dist/background/launch.d.ts +36 -0
  57. package/dist/background/launch.js +70 -0
  58. package/dist/background/poll.job.d.ts +56 -0
  59. package/dist/background/poll.job.js +190 -0
  60. package/dist/background/render.d.ts +23 -0
  61. package/dist/background/render.js +48 -0
  62. package/dist/background/session.d.ts +48 -0
  63. package/dist/background/session.js +79 -0
  64. package/dist/background/status.d.ts +35 -0
  65. package/dist/background/status.js +57 -0
  66. package/dist/background/stop.d.ts +68 -0
  67. package/dist/background/stop.js +243 -0
  68. package/dist/background/store.d.ts +162 -0
  69. package/dist/background/store.js +357 -0
  70. package/dist/background/store.module.d.ts +6 -0
  71. package/dist/background/store.module.js +22 -0
  72. package/dist/background/tasks.service.d.ts +77 -0
  73. package/dist/background/tasks.service.js +211 -0
  74. package/dist/background/wake-rules.d.ts +66 -0
  75. package/dist/background/wake-rules.js +113 -0
  76. package/dist/background/wake.d.ts +30 -0
  77. package/dist/background/wake.js +63 -0
  78. package/dist/catalog/admin-catalog.controller.d.ts +129 -30
  79. package/dist/catalog/admin-catalog.controller.js +213 -42
  80. package/dist/catalog/catalog-content.d.ts +58 -32
  81. package/dist/catalog/catalog-content.js +34 -8
  82. package/dist/catalog/catalog-import.module.d.ts +7 -0
  83. package/dist/catalog/catalog-import.module.js +60 -0
  84. package/dist/catalog/catalog-items.d.ts +111 -7
  85. package/dist/catalog/catalog-items.js +279 -13
  86. package/dist/catalog/catalog-scope.service.d.ts +260 -0
  87. package/dist/catalog/catalog-scope.service.js +1116 -0
  88. package/dist/catalog/catalog.module.d.ts +7 -9
  89. package/dist/catalog/catalog.module.js +41 -31
  90. package/dist/catalog/catalog.service.d.ts +101 -29
  91. package/dist/catalog/catalog.service.js +104 -106
  92. package/dist/catalog/claude/agents.js +2 -0
  93. package/dist/catalog/cli.d.ts +11 -1
  94. package/dist/catalog/cli.js +26 -1
  95. package/dist/catalog/component-promotion.d.ts +96 -0
  96. package/dist/catalog/component-promotion.js +395 -0
  97. package/dist/catalog/component-scope.controller.d.ts +152 -0
  98. package/dist/catalog/component-scope.controller.js +287 -0
  99. package/dist/catalog/component-scope.service.d.ts +303 -0
  100. package/dist/catalog/component-scope.service.js +936 -0
  101. package/dist/catalog/component-state.d.ts +174 -0
  102. package/dist/catalog/component-state.js +437 -0
  103. package/dist/catalog/job-ids.d.ts +30 -0
  104. package/dist/catalog/job-ids.js +25 -0
  105. package/dist/catalog/marketplace-fetch.d.ts +1 -1
  106. package/dist/catalog/marketplaces.controller.d.ts +22 -5
  107. package/dist/catalog/marketplaces.controller.js +56 -7
  108. package/dist/catalog/marketplaces.service.d.ts +54 -14
  109. package/dist/catalog/marketplaces.service.js +71 -22
  110. package/dist/catalog/org-catalog.controller.d.ts +125 -34
  111. package/dist/catalog/org-catalog.controller.js +181 -65
  112. package/dist/catalog/org-catalog.service.d.ts +65 -33
  113. package/dist/catalog/org-catalog.service.js +324 -157
  114. package/dist/catalog/org-extension-switch.d.ts +41 -0
  115. package/dist/catalog/org-extension-switch.js +115 -0
  116. package/dist/catalog/org-extension.controller.d.ts +119 -0
  117. package/dist/catalog/org-extension.controller.js +266 -0
  118. package/dist/catalog/org-plugin-uploads.controller.d.ts +98 -0
  119. package/dist/catalog/org-plugin-uploads.controller.js +213 -0
  120. package/dist/catalog/org-plugin-uploads.d.ts +63 -0
  121. package/dist/catalog/org-plugin-uploads.js +116 -0
  122. package/dist/catalog/owned-items.d.ts +184 -0
  123. package/dist/catalog/owned-items.js +789 -0
  124. package/dist/catalog/owned-plugin-cleanup.d.ts +56 -0
  125. package/dist/catalog/owned-plugin-cleanup.js +194 -0
  126. package/dist/catalog/ownership.d.ts +172 -0
  127. package/dist/catalog/ownership.js +326 -0
  128. package/dist/catalog/platform-components.d.ts +221 -0
  129. package/dist/catalog/platform-components.js +761 -0
  130. package/dist/catalog/platform-migration.d.ts +115 -0
  131. package/dist/catalog/platform-migration.js +582 -0
  132. package/dist/catalog/plugin-import.d.ts +178 -34
  133. package/dist/catalog/plugin-import.js +623 -83
  134. package/dist/catalog/plugin-install.d.ts +185 -41
  135. package/dist/catalog/plugin-install.js +758 -126
  136. package/dist/catalog/plugin-upgrade.d.ts +260 -225
  137. package/dist/catalog/plugin-upgrade.js +1148 -1137
  138. package/dist/catalog/request-rules.d.ts +65 -0
  139. package/dist/catalog/request-rules.js +217 -0
  140. package/dist/catalog/requests.service.d.ts +193 -118
  141. package/dist/catalog/requests.service.js +526 -343
  142. package/dist/catalog/reserved-names.d.ts +8 -0
  143. package/dist/catalog/reserved-names.js +42 -0
  144. package/dist/catalog/scope-orgs.d.ts +21 -0
  145. package/dist/catalog/scope-orgs.js +67 -0
  146. package/dist/catalog/scope-state.d.ts +35 -0
  147. package/dist/catalog/scope-state.js +87 -0
  148. package/dist/catalog/scope-sync-workers.d.ts +7 -0
  149. package/dist/catalog/scope-sync-workers.js +29 -0
  150. package/dist/catalog/scope-sync.d.ts +176 -0
  151. package/dist/catalog/scope-sync.js +576 -0
  152. package/dist/catalog/scope.d.ts +42 -0
  153. package/dist/catalog/scope.js +42 -0
  154. package/dist/catalog/unshare.d.ts +22 -0
  155. package/dist/catalog/unshare.js +118 -0
  156. package/dist/channels/actions.js +1 -0
  157. package/dist/channels/cards.js +21 -3
  158. package/dist/channels/channels.module.js +2 -0
  159. package/dist/channels/connections.service.d.ts +16 -1
  160. package/dist/channels/connections.service.js +38 -4
  161. package/dist/channels/inbound.d.ts +9 -1
  162. package/dist/channels/inbound.js +67 -5
  163. package/dist/channels/phrases.d.ts +35 -0
  164. package/dist/channels/phrases.js +29 -0
  165. package/dist/channels/threads.d.ts +5 -0
  166. package/dist/channels/threads.js +8 -0
  167. package/dist/config/docs.js +3 -1
  168. package/dist/config/schema.d.ts +24 -2
  169. package/dist/config/schema.js +145 -19
  170. package/dist/conversations/access.d.ts +6 -4
  171. package/dist/conversations/access.js +29 -5
  172. package/dist/conversations/agent-tree.d.ts +46 -0
  173. package/dist/conversations/agent-tree.js +92 -0
  174. package/dist/conversations/attachments.service.d.ts +30 -0
  175. package/dist/conversations/attachments.service.js +130 -5
  176. package/dist/conversations/conversations.controller.d.ts +79 -23
  177. package/dist/conversations/conversations.controller.js +141 -50
  178. package/dist/conversations/conversations.module.d.ts +1 -1
  179. package/dist/conversations/conversations.module.js +10 -7
  180. package/dist/conversations/conversations.service.d.ts +108 -9
  181. package/dist/conversations/conversations.service.js +237 -30
  182. package/dist/conversations/environment-status.d.ts +24 -0
  183. package/dist/conversations/environment-status.js +71 -0
  184. package/dist/conversations/event-log.d.ts +21 -6
  185. package/dist/conversations/event-log.js +70 -1
  186. package/dist/conversations/events.d.ts +140 -0
  187. package/dist/conversations/events.js +142 -13
  188. package/dist/conversations/queue.d.ts +3 -1
  189. package/dist/conversations/queue.js +13 -2
  190. package/dist/conversations/queue.service.d.ts +1 -1
  191. package/dist/conversations/queue.service.js +8 -1
  192. package/dist/conversations/titles.d.ts +12 -3
  193. package/dist/conversations/titles.js +36 -8
  194. package/dist/conversations/tree.d.ts +17 -0
  195. package/dist/conversations/tree.js +42 -0
  196. package/dist/ctx/create-ctx.d.ts +5 -0
  197. package/dist/ctx/create-ctx.js +15 -5
  198. package/dist/db/kernel-schema.d.ts +420 -20
  199. package/dist/db/pool.d.ts +5 -0
  200. package/dist/db/pool.js +3 -0
  201. package/dist/environments/access.d.ts +41 -0
  202. package/dist/environments/access.js +77 -0
  203. package/dist/environments/conversation-environments.d.ts +61 -0
  204. package/dist/environments/conversation-environments.js +170 -0
  205. package/dist/environments/dto.d.ts +25 -0
  206. package/dist/environments/dto.js +12 -0
  207. package/dist/environments/environments.controller.d.ts +33 -0
  208. package/dist/environments/environments.controller.js +110 -0
  209. package/dist/environments/environments.module.d.ts +8 -0
  210. package/dist/environments/environments.module.js +27 -0
  211. package/dist/environments/environments.service.d.ts +153 -0
  212. package/dist/environments/environments.service.js +541 -0
  213. package/dist/environments/legacy-cleanup.job.d.ts +34 -0
  214. package/dist/environments/legacy-cleanup.job.js +141 -0
  215. package/dist/errors.d.ts +90 -2
  216. package/dist/errors.js +90 -2
  217. package/dist/evals/reconstruct.d.ts +18 -9
  218. package/dist/evals/reconstruct.js +26 -7
  219. package/dist/evals/run-replay.d.ts +7 -2
  220. package/dist/evals/run-replay.js +42 -7
  221. package/dist/evals/step-replay.d.ts +2 -5
  222. package/dist/evals/step-replay.js +13 -7
  223. package/dist/evals/trajectory.js +1 -1
  224. package/dist/evals/trajectory.service.d.ts +8 -3
  225. package/dist/evals/trajectory.service.js +26 -14
  226. package/dist/evals/worker.d.ts +5 -5
  227. package/dist/evals/worker.js +9 -3
  228. package/dist/extensions/admin-ops.d.ts +36 -10
  229. package/dist/extensions/admin-ops.js +67 -42
  230. package/dist/extensions/admin-view.d.ts +39 -10
  231. package/dist/extensions/admin-view.js +111 -20
  232. package/dist/extensions/blobs.js +1 -0
  233. package/dist/extensions/bootstrap.d.ts +17 -4
  234. package/dist/extensions/bootstrap.js +70 -9
  235. package/dist/extensions/cli.d.ts +12 -0
  236. package/dist/extensions/cli.js +11 -2
  237. package/dist/extensions/config-issues.d.ts +13 -1
  238. package/dist/extensions/config-issues.js +22 -5
  239. package/dist/extensions/config-json-schema.d.ts +43 -7
  240. package/dist/extensions/config-json-schema.js +124 -58
  241. package/dist/extensions/deployment-config-store.d.ts +6 -0
  242. package/dist/extensions/deployment-config.d.ts +78 -8
  243. package/dist/extensions/deployment-config.js +172 -34
  244. package/dist/extensions/display-name.d.ts +22 -0
  245. package/dist/extensions/display-name.js +77 -0
  246. package/dist/extensions/effective-config.d.ts +127 -0
  247. package/dist/extensions/effective-config.js +368 -0
  248. package/dist/extensions/extensions.module.js +14 -2
  249. package/dist/extensions/hooks.d.ts +37 -4
  250. package/dist/extensions/hooks.js +82 -16
  251. package/dist/extensions/host.d.ts +45 -2
  252. package/dist/extensions/host.js +112 -16
  253. package/dist/extensions/installs.d.ts +20 -8
  254. package/dist/extensions/installs.js +37 -15
  255. package/dist/extensions/org-config.d.ts +81 -6
  256. package/dist/extensions/org-config.js +195 -44
  257. package/dist/extensions/org-levels.d.ts +37 -0
  258. package/dist/extensions/org-levels.js +71 -0
  259. package/dist/extensions/org-overrides.d.ts +151 -0
  260. package/dist/extensions/org-overrides.js +524 -0
  261. package/dist/extensions/package.d.ts +14 -1
  262. package/dist/extensions/package.js +51 -2
  263. package/dist/extensions/permission-view.d.ts +19 -4
  264. package/dist/extensions/permission-view.js +4 -4
  265. package/dist/extensions/plugin-items.d.ts +21 -0
  266. package/dist/extensions/plugin-items.js +42 -0
  267. package/dist/extensions/point-defaults.controller.d.ts +34 -0
  268. package/dist/extensions/point-defaults.controller.js +71 -0
  269. package/dist/extensions/point-defaults.d.ts +71 -0
  270. package/dist/extensions/point-defaults.js +234 -0
  271. package/dist/extensions/registry.d.ts +1 -1
  272. package/dist/extensions/registry.js +2 -0
  273. package/dist/extensions/resolve.d.ts +5 -1
  274. package/dist/extensions/resolve.js +15 -2
  275. package/dist/files/previewers.d.ts +8 -1
  276. package/dist/files/previewers.js +35 -6
  277. package/dist/http/api.module.js +31 -3
  278. package/dist/http/app.d.ts +11 -2
  279. package/dist/http/app.js +31 -5
  280. package/dist/http/nest-logger.d.ts +6 -5
  281. package/dist/http/nest-logger.js +24 -10
  282. package/dist/identity/accounts.d.ts +29 -29
  283. package/dist/identity/accounts.js +47 -47
  284. package/dist/identity/audit.d.ts +2 -1
  285. package/dist/identity/auth.controller.js +9 -5
  286. package/dist/identity/auth.guard.d.ts +13 -5
  287. package/dist/identity/auth.guard.js +26 -9
  288. package/dist/identity/cookies.d.ts +20 -5
  289. package/dist/identity/cookies.js +44 -6
  290. package/dist/identity/identity.module.d.ts +1 -1
  291. package/dist/identity/identity.module.js +4 -4
  292. package/dist/identity/me.controller.d.ts +5 -1
  293. package/dist/identity/me.controller.js +12 -3
  294. package/dist/identity/principal.d.ts +3 -3
  295. package/dist/identity/principal.js +3 -3
  296. package/dist/identity/sessions.d.ts +12 -0
  297. package/dist/identity/sessions.js +45 -0
  298. package/dist/identity/settings.d.ts +22 -11
  299. package/dist/identity/settings.js +53 -18
  300. package/dist/identity/{enterprise-admin.d.ts → super-admin.d.ts} +5 -5
  301. package/dist/identity/{enterprise-admin.js → super-admin.js} +24 -24
  302. package/dist/inbox/inbox.module.d.ts +4 -1
  303. package/dist/inbox/inbox.module.js +7 -3
  304. package/dist/inbox/inbox.service.d.ts +62 -3
  305. package/dist/inbox/inbox.service.js +74 -4
  306. package/dist/inbox/org-notices.d.ts +63 -0
  307. package/dist/inbox/org-notices.js +91 -0
  308. package/dist/inbox/platform-inbox.controller.d.ts +23 -0
  309. package/dist/inbox/platform-inbox.controller.js +58 -0
  310. package/dist/inbox/platform-inbox.service.d.ts +151 -0
  311. package/dist/inbox/platform-inbox.service.js +263 -0
  312. package/dist/inbox/platform-notices.d.ts +19 -0
  313. package/dist/inbox/platform-notices.js +9 -0
  314. package/dist/index.d.ts +2 -2
  315. package/dist/index.js +1 -1
  316. package/dist/infra/cli/kernel-cli.module.js +9 -1
  317. package/dist/infra/config/kernel-config.service.js +27 -1
  318. package/dist/infra/database/database.module.js +1 -0
  319. package/dist/infra/database/xact-lock.d.ts +1 -1
  320. package/dist/infra/database/xact-lock.js +1 -1
  321. package/dist/infra/events/kernel-events.d.ts +19 -2
  322. package/dist/infra/lifecycle/process-guards.js +4 -0
  323. package/dist/infra/logging/logging.module.d.ts +4 -2
  324. package/dist/infra/logging/logging.module.js +24 -6
  325. package/dist/infra/queue/add-job-once.d.ts +14 -0
  326. package/dist/infra/queue/add-job-once.js +16 -0
  327. package/dist/infra/queue/redis-connection.d.ts +6 -0
  328. package/dist/infra/queue/redis-connection.js +7 -0
  329. package/dist/infra/redis/redis.module.js +6 -2
  330. package/dist/infra/tokens.d.ts +6 -1
  331. package/dist/infra/tokens.js +6 -1
  332. package/dist/kernel.module.js +6 -0
  333. package/dist/lifecycle/kernel-lifecycle.d.ts +1 -1
  334. package/dist/lifecycle/kernel-lifecycle.js +4 -4
  335. package/dist/log.d.ts +13 -1
  336. package/dist/log.js +93 -17
  337. package/dist/models/prices.d.ts +5 -5
  338. package/dist/models/prices.js +4 -4
  339. package/dist/models/purposes.controller.d.ts +6 -4
  340. package/dist/models/purposes.controller.js +13 -7
  341. package/dist/models/purposes.d.ts +43 -9
  342. package/dist/models/purposes.js +48 -18
  343. package/dist/orgs/directory-sync.d.ts +14 -5
  344. package/dist/orgs/directory-sync.js +41 -17
  345. package/dist/orgs/offboarding.d.ts +12 -8
  346. package/dist/orgs/offboarding.js +54 -33
  347. package/dist/orgs/org-lock.d.ts +5 -0
  348. package/dist/orgs/org-lock.js +13 -0
  349. package/dist/orgs/org.guard.d.ts +10 -0
  350. package/dist/orgs/org.guard.js +43 -32
  351. package/dist/orgs/orgs.module.js +3 -0
  352. package/dist/orgs/orgs.service.d.ts +20 -7
  353. package/dist/orgs/orgs.service.js +32 -12
  354. package/dist/orgs/roles.d.ts +1 -1
  355. package/dist/orgs/roles.js +5 -1
  356. package/dist/orgs/settings.controller.d.ts +1 -1
  357. package/dist/orgs/settings.service.d.ts +20 -3
  358. package/dist/orgs/settings.service.js +19 -4
  359. package/dist/overrides.d.ts +3 -0
  360. package/dist/overrides.js +2 -0
  361. package/dist/platform/actor.d.ts +48 -0
  362. package/dist/platform/actor.js +100 -0
  363. package/dist/platform/agent-docs.d.ts +18 -0
  364. package/dist/platform/agent-docs.js +59 -0
  365. package/dist/platform/availability.d.ts +14 -0
  366. package/dist/platform/availability.js +43 -0
  367. package/dist/platform/errors.d.ts +11 -0
  368. package/dist/platform/errors.js +26 -0
  369. package/dist/platform/exclusions.d.ts +12 -0
  370. package/dist/platform/exclusions.js +1387 -0
  371. package/dist/platform/method.d.ts +6 -0
  372. package/dist/platform/method.js +15 -0
  373. package/dist/platform/operation.d.ts +92 -0
  374. package/dist/platform/operation.js +35 -0
  375. package/dist/platform/ops/agent-templates.ops.d.ts +14 -0
  376. package/dist/platform/ops/agent-templates.ops.js +92 -0
  377. package/dist/platform/ops/agents.ops.d.ts +19 -0
  378. package/dist/platform/ops/agents.ops.js +294 -0
  379. package/dist/platform/ops/connectors.ops.d.ts +15 -0
  380. package/dist/platform/ops/connectors.ops.js +126 -0
  381. package/dist/platform/ops/errors.d.ts +11 -0
  382. package/dist/platform/ops/errors.js +22 -0
  383. package/dist/platform/ops/extensions.ops.d.ts +19 -0
  384. package/dist/platform/ops/extensions.ops.js +116 -0
  385. package/dist/platform/ops/marketplaces.ops.d.ts +16 -0
  386. package/dist/platform/ops/marketplaces.ops.js +157 -0
  387. package/dist/platform/ops/paging.d.ts +14 -0
  388. package/dist/platform/ops/paging.js +20 -0
  389. package/dist/platform/ops/platform.ops.d.ts +23 -0
  390. package/dist/platform/ops/platform.ops.js +158 -0
  391. package/dist/platform/ops/plugins.ops.d.ts +33 -0
  392. package/dist/platform/ops/plugins.ops.js +377 -0
  393. package/dist/platform/ops/requests.ops.d.ts +14 -0
  394. package/dist/platform/ops/requests.ops.js +153 -0
  395. package/dist/platform/ops/role.d.ts +4 -0
  396. package/dist/platform/ops/role.js +10 -0
  397. package/dist/platform/ops/skills.ops.d.ts +13 -0
  398. package/dist/platform/ops/skills.ops.js +98 -0
  399. package/dist/platform/ops/summary.d.ts +10 -0
  400. package/dist/platform/ops/summary.js +18 -0
  401. package/dist/platform/platform-ops.module.d.ts +7 -0
  402. package/dist/platform/platform-ops.module.js +55 -0
  403. package/dist/platform/platform.module.d.ts +8 -0
  404. package/dist/platform/platform.module.js +25 -0
  405. package/dist/platform/redact-orgs.d.ts +7 -0
  406. package/dist/platform/redact-orgs.js +52 -0
  407. package/dist/platform/registry.d.ts +30 -0
  408. package/dist/platform/registry.js +111 -0
  409. package/dist/roles/worker-role.d.ts +6 -4
  410. package/dist/roles/worker-role.js +14 -7
  411. package/dist/roles/worker.module.d.ts +1 -1
  412. package/dist/roles/worker.module.js +15 -1
  413. package/dist/runtime/context/build.d.ts +11 -7
  414. package/dist/runtime/context/build.js +46 -19
  415. package/dist/runtime/context/claude-tools.d.ts +3 -1
  416. package/dist/runtime/context/claude-tools.js +8 -6
  417. package/dist/runtime/context/compaction.js +13 -0
  418. package/dist/runtime/context/reminders.d.ts +2 -0
  419. package/dist/runtime/context/reminders.js +2 -0
  420. package/dist/runtime/context/skills.js +9 -2
  421. package/dist/runtime/context/tool-changes.d.ts +27 -0
  422. package/dist/runtime/context/tool-changes.js +60 -0
  423. package/dist/runtime/hook-calls.js +2 -0
  424. package/dist/runtime/langgraph-loop.d.ts +3 -1
  425. package/dist/runtime/langgraph-loop.js +36 -17
  426. package/dist/runtime/loop.d.ts +34 -5
  427. package/dist/runtime/maintenance.d.ts +9 -4
  428. package/dist/runtime/maintenance.js +35 -8
  429. package/dist/runtime/model-call.d.ts +46 -8
  430. package/dist/runtime/model-call.js +72 -21
  431. package/dist/runtime/providers.d.ts +6 -0
  432. package/dist/runtime/providers.js +8 -0
  433. package/dist/runtime/run-control.d.ts +11 -1
  434. package/dist/runtime/run-control.js +12 -0
  435. package/dist/runtime/run-drafts.d.ts +85 -0
  436. package/dist/runtime/run-drafts.js +230 -0
  437. package/dist/runtime/run-jobs.d.ts +3 -5
  438. package/dist/runtime/run-jobs.js +3 -7
  439. package/dist/runtime/run-queue.d.ts +59 -2
  440. package/dist/runtime/run-queue.js +311 -38
  441. package/dist/runtime/run-worker.d.ts +11 -5
  442. package/dist/runtime/run-worker.js +69 -33
  443. package/dist/runtime/runtime.module.js +11 -3
  444. package/dist/runtime/step-log.d.ts +15 -4
  445. package/dist/runtime/step-log.js +24 -7
  446. package/dist/runtime/stream.controller.d.ts +23 -1
  447. package/dist/runtime/stream.controller.js +60 -3
  448. package/dist/runtime/stream.d.ts +4 -1
  449. package/dist/runtime/stream.js +27 -3
  450. package/dist/runtime/subagents/child.d.ts +55 -7
  451. package/dist/runtime/subagents/child.js +105 -7
  452. package/dist/runtime/subagents/definition.d.ts +12 -3
  453. package/dist/runtime/subagents/definition.js +44 -28
  454. package/dist/runtime/subagents/deliveries.d.ts +71 -0
  455. package/dist/runtime/subagents/deliveries.js +228 -0
  456. package/dist/runtime/subagents/dispatch.d.ts +115 -26
  457. package/dist/runtime/subagents/dispatch.js +212 -141
  458. package/dist/runtime/subagents/limits.d.ts +24 -5
  459. package/dist/runtime/subagents/limits.js +40 -6
  460. package/dist/runtime/subagents/messages.d.ts +95 -0
  461. package/dist/runtime/subagents/messages.js +328 -0
  462. package/dist/runtime/subagents/preamble.d.ts +4 -4
  463. package/dist/runtime/subagents/preamble.js +9 -7
  464. package/dist/runtime/subagents/progress.d.ts +8 -6
  465. package/dist/runtime/subagents/progress.js +11 -6
  466. package/dist/runtime/subagents/render.d.ts +30 -0
  467. package/dist/runtime/subagents/render.js +53 -0
  468. package/dist/runtime/subagents/roster.d.ts +24 -7
  469. package/dist/runtime/subagents/roster.js +47 -11
  470. package/dist/runtime/subagents/skill-fork.d.ts +3 -2
  471. package/dist/runtime/subagents/skill-fork.js +8 -4
  472. package/dist/runtime/subagents/status.d.ts +14 -0
  473. package/dist/runtime/subagents/status.js +23 -0
  474. package/dist/runtime/subagents/subagents.service.d.ts +7 -4
  475. package/dist/runtime/subagents/subagents.service.js +11 -6
  476. package/dist/runtime/usage-report.d.ts +2 -1
  477. package/dist/runtime/usage-report.js +19 -13
  478. package/dist/runtime/waits.d.ts +145 -36
  479. package/dist/runtime/waits.js +423 -109
  480. package/dist/sandbox/jobs.d.ts +40 -13
  481. package/dist/sandbox/jobs.js +57 -20
  482. package/dist/sandbox/leases.d.ts +37 -54
  483. package/dist/sandbox/leases.js +71 -115
  484. package/dist/sandbox/providers.d.ts +2 -2
  485. package/dist/sandbox/providers.js +1 -1
  486. package/dist/sandbox/sandbox.module.d.ts +3 -2
  487. package/dist/sandbox/sandbox.module.js +10 -4
  488. package/dist/sandbox/sandbox.service.d.ts +282 -129
  489. package/dist/sandbox/sandbox.service.js +736 -381
  490. package/dist/skills/catalog.d.ts +3 -2
  491. package/dist/skills/catalog.js +21 -43
  492. package/dist/skills/changes.controller.d.ts +7 -0
  493. package/dist/skills/changes.controller.js +19 -1
  494. package/dist/skills/invoke.js +8 -3
  495. package/dist/skills/package.d.ts +20 -1
  496. package/dist/skills/package.js +28 -1
  497. package/dist/skills/skills.controller.d.ts +39 -4
  498. package/dist/skills/skills.controller.js +88 -10
  499. package/dist/skills/skills.module.js +10 -1
  500. package/dist/skills/skills.service.d.ts +106 -26
  501. package/dist/skills/skills.service.js +421 -75
  502. package/dist/skills/usable.d.ts +81 -0
  503. package/dist/skills/usable.js +379 -0
  504. package/dist/tools/approvals.service.d.ts +20 -2
  505. package/dist/tools/approvals.service.js +25 -4
  506. package/dist/tools/builtin-names.d.ts +41 -7
  507. package/dist/tools/builtin-names.js +59 -7
  508. package/dist/tools/builtins/agent.d.ts +23 -21
  509. package/dist/tools/builtins/agent.js +62 -55
  510. package/dist/tools/builtins/builtin-tools.d.ts +19 -1
  511. package/dist/tools/builtins/builtin-tools.js +59 -2
  512. package/dist/tools/builtins/handback.d.ts +28 -0
  513. package/dist/tools/builtins/handback.js +53 -0
  514. package/dist/tools/builtins/platform.d.ts +34 -0
  515. package/dist/tools/builtins/platform.js +362 -0
  516. package/dist/tools/builtins/sandbox/bash.d.ts +1 -1
  517. package/dist/tools/builtins/sandbox/bash.js +241 -4
  518. package/dist/tools/builtins/sandbox/common.d.ts +69 -27
  519. package/dist/tools/builtins/sandbox/common.js +87 -48
  520. package/dist/tools/builtins/sandbox/deliver.js +1 -1
  521. package/dist/tools/builtins/sandbox/edit.js +2 -2
  522. package/dist/tools/builtins/sandbox/glob.js +2 -2
  523. package/dist/tools/builtins/sandbox/grep.js +2 -4
  524. package/dist/tools/builtins/sandbox/index.d.ts +3 -1
  525. package/dist/tools/builtins/sandbox/index.js +7 -1
  526. package/dist/tools/builtins/sandbox/read.js +1 -1
  527. package/dist/tools/builtins/sandbox/task-output.d.ts +74 -0
  528. package/dist/tools/builtins/sandbox/task-output.js +329 -0
  529. package/dist/tools/builtins/sandbox/task-stop.d.ts +10 -0
  530. package/dist/tools/builtins/sandbox/task-stop.js +113 -0
  531. package/dist/tools/builtins/sandbox/write.js +2 -2
  532. package/dist/tools/builtins/send-message.d.ts +56 -0
  533. package/dist/tools/builtins/send-message.js +100 -0
  534. package/dist/tools/builtins/skill-load.d.ts +22 -14
  535. package/dist/tools/builtins/skill-load.js +86 -57
  536. package/dist/tools/builtins/skill-write.js +1 -1
  537. package/dist/tools/builtins/web/errors.d.ts +8 -0
  538. package/dist/tools/builtins/web/errors.js +53 -0
  539. package/dist/tools/builtins/web/extract.d.ts +62 -0
  540. package/dist/tools/builtins/web/extract.js +271 -0
  541. package/dist/tools/builtins/web/fetch.d.ts +55 -0
  542. package/dist/tools/builtins/web/fetch.js +175 -0
  543. package/dist/tools/builtins/web/index.d.ts +13 -0
  544. package/dist/tools/builtins/web/index.js +12 -0
  545. package/dist/tools/builtins/web/page-cache.d.ts +25 -0
  546. package/dist/tools/builtins/web/page-cache.js +77 -0
  547. package/dist/tools/builtins/web/search.d.ts +25 -0
  548. package/dist/tools/builtins/web/search.js +210 -0
  549. package/dist/tools/builtins/web/url.d.ts +17 -0
  550. package/dist/tools/builtins/web/url.js +43 -0
  551. package/dist/tools/connectors.controller.d.ts +10 -0
  552. package/dist/tools/connectors.controller.js +12 -0
  553. package/dist/tools/connectors.service.d.ts +46 -5
  554. package/dist/tools/connectors.service.js +94 -15
  555. package/dist/tools/extension-tools.controller.d.ts +14 -0
  556. package/dist/tools/extension-tools.controller.js +37 -0
  557. package/dist/tools/info.d.ts +42 -1
  558. package/dist/tools/info.js +64 -1
  559. package/dist/tools/oauth/flow-paths.d.ts +1 -1
  560. package/dist/tools/oauth/flow-paths.js +1 -1
  561. package/dist/tools/org-tool-switches.d.ts +74 -0
  562. package/dist/tools/org-tool-switches.js +184 -0
  563. package/dist/tools/pipeline.d.ts +46 -40
  564. package/dist/tools/pipeline.js +202 -364
  565. package/dist/tools/policy.d.ts +1 -1
  566. package/dist/tools/policy.js +36 -16
  567. package/dist/tools/registry.d.ts +120 -8
  568. package/dist/tools/registry.js +112 -19
  569. package/dist/tools/tools.module.js +24 -2
  570. package/dist/tools/validate.js +1 -1
  571. package/dist/ui/views.d.ts +2 -1
  572. package/dist/ui/views.js +17 -3
  573. package/package.json +3 -3
  574. package/src/migrations/0064_account_last_org.sql +7 -0
  575. package/src/migrations/0065_conversation_archive.sql +8 -0
  576. package/src/migrations/0066_extension_display_name.sql +4 -0
  577. package/src/migrations/0067_agent_profiles.sql +20 -0
  578. package/src/migrations/0068_agent_avatar_uploads.sql +7 -0
  579. package/src/migrations/0069_attachments_agent_idx.sql +3 -0
  580. package/src/migrations/0070_background_tasks.sql +37 -0
  581. package/src/migrations/0071_background_tasks_reserve.sql +6 -0
  582. package/src/migrations/0072_background_tasks_stopping.sql +5 -0
  583. package/src/migrations/0073_org_extension_point_defaults.sql +11 -0
  584. package/src/migrations/0074_subagent_tree.sql +50 -0
  585. package/src/migrations/0075_plugin_scope.sql +61 -0
  586. package/src/migrations/0076_skills_created_by_nullable.sql +6 -0
  587. package/src/migrations/0077_scope_requests.sql +52 -0
  588. package/src/migrations/0078_scope_grant_switches.sql +18 -0
  589. package/src/migrations/0079_scope_live_install_switches.sql +19 -0
  590. package/src/migrations/0080_rename_enterprise_admin.sql +18 -0
  591. package/src/migrations/0081_platform_components.sql +129 -0
  592. package/src/migrations/0082_platform_migration.sql +33 -0
  593. package/src/migrations/0083_plugin_scope_sync_failures.sql +15 -0
  594. package/src/migrations/0084_org_owned_items.sql +85 -0
  595. package/src/migrations/0085_agent_templates_phase4.sql +45 -0
  596. package/src/migrations/0086_org_layering.sql +30 -0
  597. package/src/migrations/0087_approval_summary.sql +6 -0
  598. package/src/migrations/0088_environments.sql +80 -0
  599. package/dist/catalog/upgrade-targets.d.ts +0 -56
  600. package/dist/catalog/upgrade-targets.js +0 -90
  601. package/dist/conversations/sandbox-status.d.ts +0 -24
  602. package/dist/conversations/sandbox-status.js +0 -52
  603. package/dist/extensions/org-config.controller.d.ts +0 -24
  604. package/dist/extensions/org-config.controller.js +0 -62
@@ -123,6 +123,7 @@ let ExtensionBlobs = class ExtensionBlobs {
123
123
  source: src.source,
124
124
  source_ref: src.ref,
125
125
  uploaded_by: src.actor,
126
+ display_name: p.displayName === undefined ? null : JSON.stringify(p.displayName),
126
127
  })
127
128
  .onConflict((oc) => oc.column("sha256").doNothing())
128
129
  .returning("sha256")
@@ -35,7 +35,7 @@ import { ExtensionRegistry } from "./registry.js";
35
35
  * manifest's sha256 (written with the audit `bootstrap.completed` only when every entry
36
36
  * succeeded; otherwise the next start runs it again, which is idempotent).
37
37
  * - Only entries new to the manifest are installed (Ruling 5): an optional entry that the last
38
- * completed run already handled and that is not installed now (an enterprise admin uninstalled
38
+ * completed run already handled and that is not installed now (a super admin uninstalled
39
39
  * it) stays uninstalled -> `kept`. A required entry is always installed.
40
40
  * - Per entry, by the installed state of its extension:
41
41
  * - not installed (and new, or required): imported into the catalog (source `bootstrap`, ref
@@ -44,8 +44,8 @@ import { ExtensionRegistry } from "./registry.js";
44
44
  * and enabled -> `installed`;
45
45
  * - installed from `bootstrap` at a lower version: upgraded the same way (core's release vouched
46
46
  * for the version, so new permissions are pre-approved and audited), keeping the desired state
47
- * an enterprise admin chose (a disabled optional plugin stays disabled) -> `upgraded`;
48
- * - installed at a higher version, or from another source (an enterprise admin upgraded it), or
47
+ * a super admin chose (a disabled optional plugin stays disabled) -> `upgraded`;
48
+ * - installed at a higher version, or from another source (a super admin upgraded it), or
49
49
  * the name is config-declared (`declared`: config wins, no install record is created):
50
50
  * untouched, never downgraded -> `kept`;
51
51
  * - a declarative plugin (no extension): imported into the catalog only -> `imported` (`kept`
@@ -175,6 +175,12 @@ export declare class BootstrapService {
175
175
  /** The plugin import a declarative entry (or an entry's catalog version) goes through. */
176
176
  imports: BootstrapImports;
177
177
  }): Promise<BootstrapResult>;
178
+ /**
179
+ * A pin whose plugin name an org holds (a live org-owned catalog item): the bootstrap takes no
180
+ * name over (ruling P3-28), so the entry fails; this warning tells the super admin why and
181
+ * which org holds it (final review M4).
182
+ */
183
+ private warnIfHeld;
178
184
  /** The `bootstrap_runs` row and the `bootstrap.completed` audit, in one transaction. */
179
185
  private recordDone;
180
186
  /**
@@ -186,10 +192,17 @@ export declare class BootstrapService {
186
192
  /** The entry names the last completed run handled (undefined before any run completed). */
187
193
  private lastRunNames;
188
194
  private entry;
195
+ /**
196
+ * The catalog item of a bootstrap entry follows `required`: a required entry is builtin, offered
197
+ * to every org (scope `all`) and not disabled (migration 0075 could leave a required plugin
198
+ * disabled); an entry that stops being required is no longer builtin and keeps scope `all` (the
199
+ * admin may change it from then on).
200
+ */
201
+ private markBuiltin;
189
202
  /** A declarative plugin: catalog only. Returns false when that version is already imported. */
190
203
  private importOnly;
191
204
  /**
192
- * Imports, approves, installs and enables (one review, confirmed with `deployExtension`). When
205
+ * Imports, approves, installs and enables (one review; its confirm deploys the extension). When
193
206
  * the catalog already has this version (an earlier run stopped after importing, or the same
194
207
  * package came from a marketplace), the extension is deployed from the package store instead.
195
208
  */
@@ -15,6 +15,7 @@ import { parseBootstrapManifest, SDK_VERSION, } from "@capybara-hq/plugin-sdk";
15
15
  import { Inject, Injectable, Optional } from "@nestjs/common";
16
16
  import { sql } from "kysely";
17
17
  import semver from "semver";
18
+ import { otherNameOwner } from "../catalog/ownership.js";
18
19
  import { catalogPackageError } from "../catalog/plugin-import.js";
19
20
  import { PluginPackageError, readPluginPackage } from "../catalog/plugin-package.js";
20
21
  import { ApiError } from "../errors.js";
@@ -57,7 +58,7 @@ import { ExtensionRegistry } from "./registry.js";
57
58
  * manifest's sha256 (written with the audit `bootstrap.completed` only when every entry
58
59
  * succeeded; otherwise the next start runs it again, which is idempotent).
59
60
  * - Only entries new to the manifest are installed (Ruling 5): an optional entry that the last
60
- * completed run already handled and that is not installed now (an enterprise admin uninstalled
61
+ * completed run already handled and that is not installed now (a super admin uninstalled
61
62
  * it) stays uninstalled -> `kept`. A required entry is always installed.
62
63
  * - Per entry, by the installed state of its extension:
63
64
  * - not installed (and new, or required): imported into the catalog (source `bootstrap`, ref
@@ -66,8 +67,8 @@ import { ExtensionRegistry } from "./registry.js";
66
67
  * and enabled -> `installed`;
67
68
  * - installed from `bootstrap` at a lower version: upgraded the same way (core's release vouched
68
69
  * for the version, so new permissions are pre-approved and audited), keeping the desired state
69
- * an enterprise admin chose (a disabled optional plugin stays disabled) -> `upgraded`;
70
- * - installed at a higher version, or from another source (an enterprise admin upgraded it), or
70
+ * a super admin chose (a disabled optional plugin stays disabled) -> `upgraded`;
71
+ * - installed at a higher version, or from another source (a super admin upgraded it), or
71
72
  * the name is config-declared (`declared`: config wins, no install record is created):
72
73
  * untouched, never downgraded -> `kept`;
73
74
  * - a declarative plugin (no extension): imported into the catalog only -> `imported` (`kept`
@@ -306,6 +307,7 @@ let BootstrapService = class BootstrapService {
306
307
  const failures = [];
307
308
  for (const e of o.manifest.plugins) {
308
309
  signal.throwIfAborted();
310
+ await this.warnIfHeld(e);
309
311
  try {
310
312
  const r = await this.entry(e, files.get(e.name), handled, o.imports);
311
313
  results.push(carried(r, o.carry));
@@ -334,6 +336,23 @@ let BootstrapService = class BootstrapService {
334
336
  return { manifestSha256, results };
335
337
  });
336
338
  }
339
+ /**
340
+ * A pin whose plugin name an org holds (a live org-owned catalog item): the bootstrap takes no
341
+ * name over (ruling P3-28), so the entry fails; this warning tells the super admin why and
342
+ * which org holds it (final review M4).
343
+ */
344
+ async warnIfHeld(e) {
345
+ const holder = await otherNameOwner(this.db, e.name, null);
346
+ if (holder?.kind !== "org")
347
+ return;
348
+ this.log.warn("bootstrap: the plugin name is held by an organization; the entry cannot take it over until the organization renames or deletes its plugin", {
349
+ plugin: e.name,
350
+ version: e.version,
351
+ required: e.required,
352
+ ownerOrgId: holder.orgId,
353
+ ownerOrg: holder.name,
354
+ });
355
+ }
337
356
  /** The `bootstrap_runs` row and the `bootstrap.completed` audit, in one transaction. */
338
357
  async recordDone(manifestSha256, results) {
339
358
  await this.db
@@ -400,9 +419,11 @@ let BootstrapService = class BootstrapService {
400
419
  // Not new to the manifest: an optional entry left out on purpose stays out (Ruling 5)
401
420
  const isNew = handled === undefined || !handled.has(e.name);
402
421
  if (!pkg.manifest.extension) {
422
+ await this.markBuiltin(e.name, e.required);
403
423
  if (!isNew)
404
424
  return { name: e.name, action: "kept", version: e.version };
405
425
  const imported = await this.importOnly(e, bytes, ref, imports);
426
+ await this.markBuiltin(e.name, e.required);
406
427
  return { name: e.name, action: imported ? "imported" : "kept", version: e.version };
407
428
  }
408
429
  if (this.registry.declared().has(e.name)) {
@@ -451,8 +472,41 @@ let BootstrapService = class BootstrapService {
451
472
  if (e.required && row?.desired_state === "disabled") {
452
473
  await this.ops.enable(e.name, null);
453
474
  }
475
+ await this.markBuiltin(e.name, e.required);
454
476
  return result;
455
477
  }
478
+ /**
479
+ * The catalog item of a bootstrap entry follows `required`: a required entry is builtin, offered
480
+ * to every org (scope `all`) and not disabled (migration 0075 could leave a required plugin
481
+ * disabled); an entry that stops being required is no longer builtin and keeps scope `all` (the
482
+ * admin may change it from then on).
483
+ */
484
+ async markBuiltin(name, required) {
485
+ const touch = { updated_at: sql `now()` };
486
+ if (required) {
487
+ await this.db
488
+ .updateTable("catalog_items")
489
+ .set({
490
+ builtin: true,
491
+ scope: "all",
492
+ disabled: false,
493
+ scope_version: sql `scope_version + 1`,
494
+ ...touch,
495
+ })
496
+ .where("name", "=", name)
497
+ .where("deleted_at", "is", null)
498
+ .where((eb) => eb.or([eb("builtin", "=", false), eb("scope", "<>", "all"), eb("disabled", "=", true)]))
499
+ .execute();
500
+ return;
501
+ }
502
+ await this.db
503
+ .updateTable("catalog_items")
504
+ .set({ builtin: false, ...touch })
505
+ .where("name", "=", name)
506
+ .where("deleted_at", "is", null)
507
+ .where("builtin", "=", true)
508
+ .execute();
509
+ }
456
510
  /** A declarative plugin: catalog only. Returns false when that version is already imported. */
457
511
  async importOnly(e, bytes, ref, imports) {
458
512
  try {
@@ -461,10 +515,7 @@ let BootstrapService = class BootstrapService {
461
515
  ref,
462
516
  integrity: e.integrity,
463
517
  });
464
- await imports.confirm(null, stagingId, {
465
- reviewHash: review.reviewHash,
466
- deployExtension: false,
467
- });
518
+ await imports.confirm(null, stagingId, { reviewHash: review.reviewHash });
468
519
  return true;
469
520
  }
470
521
  catch (err) {
@@ -474,7 +525,7 @@ let BootstrapService = class BootstrapService {
474
525
  }
475
526
  }
476
527
  /**
477
- * Imports, approves, installs and enables (one review, confirmed with `deployExtension`). When
528
+ * Imports, approves, installs and enables (one review; its confirm deploys the extension). When
478
529
  * the catalog already has this version (an earlier run stopped after importing, or the same
479
530
  * package came from a marketplace), the extension is deployed from the package store instead.
480
531
  */
@@ -496,7 +547,6 @@ let BootstrapService = class BootstrapService {
496
547
  }
497
548
  const r = await imports.confirm(null, staged.stagingId, {
498
549
  reviewHash: staged.review.reviewHash,
499
- deployExtension: true,
500
550
  enable,
501
551
  });
502
552
  if (r.deploy?.result === "failed") {
@@ -552,6 +602,17 @@ let BootstrapService = class BootstrapService {
552
602
  if (names.length > 0)
553
603
  q = q.where("name", "not in", names);
554
604
  const rows = await q.returning(["name", "version"]).execute();
605
+ for (const r of rows)
606
+ await this.markBuiltin(r.name, false);
607
+ // A declarative plugin has no install record: clear builtin by catalog name
608
+ let items = this.db
609
+ .updateTable("catalog_items")
610
+ .set({ builtin: false, updated_at: sql `now()` })
611
+ .where("builtin", "=", true)
612
+ .where("deleted_at", "is", null);
613
+ if (names.length > 0)
614
+ items = items.where("name", "not in", names);
615
+ await items.execute();
555
616
  return rows.map((r) => ({ name: r.name, action: "required_cleared", version: r.version }));
556
617
  }
557
618
  };
@@ -54,6 +54,18 @@ export interface ExtensionCli {
54
54
  publishChanged(plugin: string): Promise<boolean>;
55
55
  close(): Promise<void>;
56
56
  }
57
+ /**
58
+ * The effective deployment config (the startup config `fileValue` completed by the `stored` PG
59
+ * fields) parsed as the host's load gate does: overridable fields may stay empty (spec A §5.4a),
60
+ * hidden and read-only ones must be complete.
61
+ */
62
+ export declare function parseDeploymentConfig(schema: z.ZodTypeAny, stored: Record<string, unknown>, fileValue: unknown): {
63
+ ok: true;
64
+ value: unknown;
65
+ } | {
66
+ ok: false;
67
+ issues: ConfigIssue[];
68
+ };
57
69
  /**
58
70
  * The CLI's extension management context (C18, F-Q): a Nest application context with
59
71
  * the extensions module over the database and a lazy Redis connection used only for publishing
@@ -13,7 +13,17 @@ import { ExtensionsModule } from "./extensions.module.js";
13
13
  import { ExtensionHost } from "./host.js";
14
14
  import { ExtensionInstalls } from "./installs.js";
15
15
  import { PLUGINS_CHANGED_TOPIC } from "./lifecycle-topics.js";
16
+ import { parseLoadGate } from "./org-levels.js";
16
17
  import { ExtensionPackageError, extensionPackageApiError, permissionSetOfPackage, readExtensionPackage, } from "./package.js";
18
+ /**
19
+ * The effective deployment config (the startup config `fileValue` completed by the `stored` PG
20
+ * fields) parsed as the host's load gate does: overridable fields may stay empty (spec A §5.4a),
21
+ * hidden and read-only ones must be complete.
22
+ */
23
+ export function parseDeploymentConfig(schema, stored, fileValue) {
24
+ const r = parseLoadGate(schema, mergeDeploymentConfig(stored, fileValue, schemaFields(schema).map((f) => f.path)));
25
+ return r.success ? { ok: true, value: r.data } : { ok: false, issues: toIssues(r.error) };
26
+ }
17
27
  /**
18
28
  * The CLI's extension management context (C18, F-Q): a Nest application context with
19
29
  * the extensions module over the database and a lazy Redis connection used only for publishing
@@ -44,8 +54,7 @@ export async function openExtensionCli(config, log, opts = {}) {
44
54
  const stored = await readStoredDeploymentConfig(db.db, keyring, name, {
45
55
  secretPaths: secretPathsOf(schemaFields(schema)),
46
56
  });
47
- const r = schema.safeParse(mergeDeploymentConfig(stored, config.extensionConfig[name], schemaFields(schema).map((f) => f.path)));
48
- return r.success ? { ok: true, value: r.data } : { ok: false, issues: toIssues(r.error) };
57
+ return parseDeploymentConfig(schema, stored, config.extensionConfig[name]);
49
58
  };
50
59
  const configIssues = new Map();
51
60
  const deploymentConfigs = new Map();
@@ -1,7 +1,19 @@
1
1
  import type { z } from "zod";
2
2
  /** 校验失败的单条原因:只含路径与按 issue 类型生成的说明,不回显字段值。 */
3
3
  export interface ConfigIssue {
4
+ /** The path joined with dots (`""` = the root); ambiguous when a key contains a dot. */
4
5
  path: string;
6
+ /** The zod path unjoined (record keys such as endpoint names may contain dots). */
7
+ segments: (string | number)[];
5
8
  message: string;
9
+ /**
10
+ * A custom issue whose `params.ui` names a key of the schema's root `x-ui.messages`: the form
11
+ * shows that localized message (spec §4.4). Never zod's own custom text.
12
+ */
13
+ messageKey?: string;
6
14
  }
7
- export declare function toIssues(error: z.ZodError): ConfigIssue[];
15
+ /**
16
+ * The issues of a failed config parse. `messages` is the root `x-ui.messages` of the schema's
17
+ * form JSON Schema (`configMessages`): custom issues naming one of its keys get `messageKey`.
18
+ */
19
+ export declare function toIssues(error: z.ZodError, messages?: Record<string, unknown>): ConfigIssue[];
@@ -23,9 +23,26 @@ function issueMessage(i) {
23
23
  return "invalid value";
24
24
  }
25
25
  }
26
- export function toIssues(error) {
27
- return error.issues.map((i) => ({
28
- path: i.path.map(String).join("."),
29
- message: issueMessage(i),
30
- }));
26
+ /** The `params.ui` of a custom issue when it names one of `messages` (own keys only). */
27
+ function messageKeyOf(i, messages) {
28
+ if (i.code !== "custom" || messages === undefined)
29
+ return undefined;
30
+ const key = i.params?.ui;
31
+ return typeof key === "string" && Object.hasOwn(messages, key) ? key : undefined;
32
+ }
33
+ /**
34
+ * The issues of a failed config parse. `messages` is the root `x-ui.messages` of the schema's
35
+ * form JSON Schema (`configMessages`): custom issues naming one of its keys get `messageKey`.
36
+ */
37
+ export function toIssues(error, messages) {
38
+ return error.issues.map((i) => {
39
+ const segments = i.path.map((s) => (typeof s === "number" ? s : String(s)));
40
+ const messageKey = messageKeyOf(i, messages);
41
+ return {
42
+ path: segments.join("."),
43
+ segments,
44
+ message: issueMessage(i),
45
+ ...(messageKey !== undefined && { messageKey }),
46
+ };
47
+ });
31
48
  }
@@ -1,9 +1,45 @@
1
- import { z } from "zod";
2
- export type JsonSchema = Record<string, unknown>;
3
1
  /**
4
- * 把插件配置 schema 转成 JSON Schema(供界面渲染表单):
5
- * - `secret()` 字段带 `"x-secret": true`(去掉 zod 附带的 `secret` 元数据键);
6
- * - 无法表达的类型为 `{ "x-unsupported": true }`,不抛错;
7
- * - 以输入侧形态输出(含 default),不带 `$schema`。
2
+ * Config schema → JSON Schema for forms. The conversion (and the secret scrub) lives in the SDK
3
+ * (`configJsonSchema`, extension config forms spec §4.1) so the packer, the checks and the kernel
4
+ * share one implementation; the kernel keeps no copy.
8
5
  */
9
- export declare function configToJsonSchema(schema: z.ZodType): JsonSchema;
6
+ import { type ConfigUiProblem, type JsonSchema } from "@capybara-hq/plugin-sdk";
7
+ import type { z } from "zod";
8
+ export { configJsonSchema as configToJsonSchema, type JsonSchema } from "@capybara-hq/plugin-sdk";
9
+ /** The config level a schema belongs to (which hints `validateConfigUi` allows). */
10
+ export type ConfigLevel = "deployment" | "org" | "connection";
11
+ /** A config schema as served to forms, with the problems of its hints (empty = kept). */
12
+ export interface ConfigFormSchema {
13
+ /** Shared by every caller: clone it before handing it out or changing it. */
14
+ readonly schema: JsonSchema;
15
+ readonly problems: ConfigUiProblem[];
16
+ }
17
+ /**
18
+ * Removes every `x-ui` from a JSON Schema in place (a property named `x-ui` is kept, and so are
19
+ * values: `default`, `const`, `enum` and `examples` are left as they are).
20
+ */
21
+ export declare function stripConfigUi(node: unknown): void;
22
+ /**
23
+ * Validates the hints of a JSON Schema at a level and strips every `x-ui` when there is any
24
+ * problem (in place): invalid hints never reach a form, and never fail a load (spec §4.1).
25
+ */
26
+ export declare function checkConfigUi(schema: JsonSchema, level: ConfigLevel): ConfigUiProblem[];
27
+ /** A config schema's form JSON Schema ({@link checkConfigUi} applied), cached per schema object. */
28
+ export declare function configFormSchema(schema: z.ZodTypeAny, level: ConfigLevel): ConfigFormSchema;
29
+ /**
30
+ * {@link configFormSchema} that never throws, for every caller that serves a form schema or reads
31
+ * its messages (deployment, org, connection, issues). A hint conversion that throws (a hand-made
32
+ * package, e.g. hints that won't serialize as JSON) drops the hints: the plain schema with every
33
+ * `x-ui` stripped, else `null` when even the plain conversion fails. `onFallback` runs once per
34
+ * schema object and level on this replica (the caller's one warning); later calls reuse the result.
35
+ */
36
+ export declare function safeConfigFormSchema(schema: z.ZodTypeAny, level: ConfigLevel, onFallback: (err: unknown, fallback: "plain" | "none") => void): ConfigFormSchema | null;
37
+ /**
38
+ * The secret record paths some `x-ui.secrets[].path` of a form schema names (spec §4.3), anywhere in
39
+ * the schema. Read from a checked schema: one whose hints were invalid was stripped and names none.
40
+ */
41
+ export declare function hintedSecretPaths(node: unknown, out?: Set<string>): Set<string>;
42
+ /** The root `x-ui.messages` of a form schema (the localized texts of custom issues), if any. */
43
+ export declare function configMessages(schema: JsonSchema | null | undefined): Record<string, unknown> | undefined;
44
+ /** A short text of hint problems for a status detail or a log (the first few). */
45
+ export declare function describeConfigUiProblems(level: ConfigLevel, problems: ConfigUiProblem[]): string;
@@ -1,73 +1,139 @@
1
- import { z } from "zod";
2
- /** JSON Schema 无法表达的 zod 类型:降级为 `{}` 并标注 `x-unsupported`。 */
3
- const UNSUPPORTED = new Set([
4
- "bigint",
5
- "date",
6
- "symbol",
7
- "undefined",
8
- "void",
9
- "nan",
10
- "map",
11
- "set",
12
- "function",
13
- "promise",
14
- "custom",
15
- "file",
16
- ]);
17
1
  /**
18
- * 把插件配置 schema 转成 JSON Schema(供界面渲染表单):
19
- * - `secret()` 字段带 `"x-secret": true`(去掉 zod 附带的 `secret` 元数据键);
20
- * - 无法表达的类型为 `{ "x-unsupported": true }`,不抛错;
21
- * - 以输入侧形态输出(含 default),不带 `$schema`。
2
+ * Config schema → JSON Schema for forms. The conversion (and the secret scrub) lives in the SDK
3
+ * (`configJsonSchema`, extension config forms spec §4.1) so the packer, the checks and the kernel
4
+ * share one implementation; the kernel keeps no copy.
22
5
  */
23
- export function configToJsonSchema(schema) {
24
- const out = z.toJSONSchema(schema, {
25
- io: "input",
26
- unrepresentable: "any",
27
- override: (ctx) => {
28
- const js = ctx.jsonSchema;
29
- const def = ctx.zodSchema._zod.def;
30
- if (js.secret === true) {
31
- delete js.secret;
32
- js["x-secret"] = true;
33
- }
34
- if (UNSUPPORTED.has(def.type))
35
- js["x-unsupported"] = true;
36
- },
37
- });
38
- delete out.$schema;
39
- scrubSecrets(out);
40
- return out;
41
- }
42
- /** 会泄露取值的关键字:密钥字段一律不输出。 */
43
- const VALUE_KEYWORDS = ["default", "examples", "const", "enum"];
44
- /** 值为「名字 -> 子 schema」映射的关键字:其键是用户字段名,不是关键字。 */
6
+ import { configJsonSchema, validateConfigUi, } from "@capybara-hq/plugin-sdk";
7
+ export { configJsonSchema as configToJsonSchema } from "@capybara-hq/plugin-sdk";
8
+ const isObj = (v) => typeof v === "object" && v !== null && !Array.isArray(v);
9
+ /** Keywords whose value maps names to sub-schemas: their keys are field names, not keywords. */
45
10
  const SCHEMA_MAPS = new Set(["properties", "patternProperties", "$defs", "definitions"]);
11
+ /** Keywords whose value is data, not a schema: never recursed into. */
12
+ const VALUE_KEYWORDS = new Set(["default", "const", "enum", "examples"]);
46
13
  /**
47
- * 递归清掉密钥节点及其所有后代上会暴露取值的关键字(`inSecret` 随递归下传);无环(输出为纯 JSON 树)。
48
- * 只有 schema 关键字 default / examples / const / enum 的值被当作数据跳过;
49
- * `properties` 等映射里的键是字段名,名为 default / enum 的字段照常遍历。
14
+ * Removes every `x-ui` from a JSON Schema in place (a property named `x-ui` is kept, and so are
15
+ * values: `default`, `const`, `enum` and `examples` are left as they are).
50
16
  */
51
- function scrubSecrets(node, inSecret = false) {
17
+ export function stripConfigUi(node) {
52
18
  if (Array.isArray(node)) {
53
19
  for (const n of node)
54
- scrubSecrets(n, inSecret);
20
+ stripConfigUi(n);
55
21
  return;
56
22
  }
57
- if (typeof node !== "object" || node === null)
23
+ if (!isObj(node))
58
24
  return;
59
- const o = node;
60
- const secret = inSecret || o["x-secret"] === true;
61
- if (secret)
62
- for (const k of VALUE_KEYWORDS)
63
- delete o[k];
64
- for (const [k, v] of Object.entries(o)) {
65
- if (SCHEMA_MAPS.has(k) && typeof v === "object" && v !== null) {
25
+ delete node["x-ui"];
26
+ for (const [k, v] of Object.entries(node)) {
27
+ if (VALUE_KEYWORDS.has(k))
28
+ continue;
29
+ if (SCHEMA_MAPS.has(k) && isObj(v))
66
30
  for (const child of Object.values(v))
67
- scrubSecrets(child, secret);
31
+ stripConfigUi(child);
32
+ else
33
+ stripConfigUi(v);
34
+ }
35
+ }
36
+ /**
37
+ * Validates the hints of a JSON Schema at a level and strips every `x-ui` when there is any
38
+ * problem (in place): invalid hints never reach a form, and never fail a load (spec §4.1).
39
+ */
40
+ export function checkConfigUi(schema, level) {
41
+ const problems = validateConfigUi(schema, level);
42
+ if (problems.length > 0)
43
+ stripConfigUi(schema);
44
+ return problems;
45
+ }
46
+ /** Manifests are immutable: one conversion per zod schema object and level (read-only, per replica). */
47
+ const caches = {
48
+ deployment: new WeakMap(),
49
+ org: new WeakMap(),
50
+ connection: new WeakMap(),
51
+ };
52
+ /** A config schema's form JSON Schema ({@link checkConfigUi} applied), cached per schema object. */
53
+ export function configFormSchema(schema, level) {
54
+ const cache = caches[level];
55
+ let r = cache.get(schema);
56
+ if (!r) {
57
+ const js = configJsonSchema(schema);
58
+ r = { schema: js, problems: checkConfigUi(js, level) };
59
+ cache.set(schema, r);
60
+ }
61
+ return r;
62
+ }
63
+ /** The schemas whose hinted conversion threw: their fallback (plain schema, or null). */
64
+ const fallbacks = {
65
+ deployment: new WeakMap(),
66
+ org: new WeakMap(),
67
+ connection: new WeakMap(),
68
+ };
69
+ /**
70
+ * {@link configFormSchema} that never throws, for every caller that serves a form schema or reads
71
+ * its messages (deployment, org, connection, issues). A hint conversion that throws (a hand-made
72
+ * package, e.g. hints that won't serialize as JSON) drops the hints: the plain schema with every
73
+ * `x-ui` stripped, else `null` when even the plain conversion fails. `onFallback` runs once per
74
+ * schema object and level on this replica (the caller's one warning); later calls reuse the result.
75
+ */
76
+ export function safeConfigFormSchema(schema, level, onFallback) {
77
+ const failed = fallbacks[level].get(schema);
78
+ if (failed !== undefined)
79
+ return failed;
80
+ try {
81
+ return configFormSchema(schema, level);
82
+ }
83
+ catch (err) {
84
+ let r = null;
85
+ try {
86
+ const plain = configJsonSchema(schema);
87
+ stripConfigUi(plain);
88
+ r = { schema: plain, problems: [] };
89
+ }
90
+ catch {
91
+ r = null;
68
92
  }
69
- else if (!VALUE_KEYWORDS.includes(k)) {
70
- scrubSecrets(v, secret);
93
+ fallbacks[level].set(schema, r);
94
+ onFallback(err, r ? "plain" : "none");
95
+ return r;
96
+ }
97
+ }
98
+ /**
99
+ * The secret record paths some `x-ui.secrets[].path` of a form schema names (spec §4.3), anywhere in
100
+ * the schema. Read from a checked schema: one whose hints were invalid was stripped and names none.
101
+ */
102
+ export function hintedSecretPaths(node, out = new Set()) {
103
+ if (Array.isArray(node)) {
104
+ for (const n of node)
105
+ hintedSecretPaths(n, out);
106
+ return out;
107
+ }
108
+ if (!isObj(node))
109
+ return out;
110
+ const hints = node["x-ui"];
111
+ if (isObj(hints) && Array.isArray(hints.secrets)) {
112
+ for (const s of hints.secrets) {
113
+ if (isObj(s) && typeof s.path === "string")
114
+ out.add(s.path);
71
115
  }
72
116
  }
117
+ for (const [k, v] of Object.entries(node)) {
118
+ if (k === "x-ui" || VALUE_KEYWORDS.has(k))
119
+ continue;
120
+ if (SCHEMA_MAPS.has(k) && isObj(v)) {
121
+ for (const child of Object.values(v))
122
+ hintedSecretPaths(child, out);
123
+ }
124
+ else
125
+ hintedSecretPaths(v, out);
126
+ }
127
+ return out;
128
+ }
129
+ /** The root `x-ui.messages` of a form schema (the localized texts of custom issues), if any. */
130
+ export function configMessages(schema) {
131
+ const hints = schema?.["x-ui"];
132
+ return isObj(hints) && isObj(hints.messages) ? hints.messages : undefined;
133
+ }
134
+ /** A short text of hint problems for a status detail or a log (the first few). */
135
+ export function describeConfigUiProblems(level, problems) {
136
+ const shown = problems.slice(0, 5).map((p) => `${p.path || "<root>"}: ${p.message}`);
137
+ const more = problems.length > shown.length ? `; and ${problems.length - shown.length} more` : "";
138
+ return `${level} config UI hints ignored (${shown.join("; ")}${more})`;
73
139
  }
@@ -1,6 +1,7 @@
1
1
  import type { core } from "zod";
2
2
  import { type Keyring } from "../ctx/secrets.js";
3
3
  import type { KernelSchemaDb } from "../db/kernel-schema.js";
4
+ import type { JsonSchema } from "./config-json-schema.js";
4
5
  type Obj = Record<string, unknown>;
5
6
  /**
6
7
  * The stored half of the deployment-level extension config (C10): where PG keeps it, how it is read
@@ -16,6 +17,11 @@ export declare const secretKey: (plugin: string, path: string) => string;
16
17
  export interface DeploymentSchemaInfo {
17
18
  version: string;
18
19
  schema?: core.$ZodType | undefined;
20
+ /**
21
+ * Without `schema` (no module on this replica): the package's static form schema
22
+ * (`extension.configSchemas.deployment`), shown but never used to validate.
23
+ */
24
+ jsonSchema?: JsonSchema | undefined;
19
25
  fields: {
20
26
  path: string;
21
27
  secret: boolean;