@capybara-hq/kernel 0.1.0-rc.2 → 0.1.0-rc.21

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 (1039) hide show
  1. package/bootstrap.json +94 -5
  2. package/dist/admin/admin-agents.controller.d.ts +28 -0
  3. package/dist/admin/admin-agents.controller.js +79 -0
  4. package/dist/admin/admin-connectors.controller.d.ts +29 -0
  5. package/dist/admin/admin-connectors.controller.js +79 -0
  6. package/dist/admin/admin-items.schemas.d.ts +42 -0
  7. package/dist/admin/admin-items.schemas.js +48 -0
  8. package/dist/admin/admin.controller.d.ts +52 -80
  9. package/dist/admin/admin.controller.js +112 -81
  10. package/dist/admin/admin.module.d.ts +4 -1
  11. package/dist/admin/admin.module.js +50 -4
  12. package/dist/admin/admin.schemas.d.ts +69 -0
  13. package/dist/admin/admin.schemas.js +53 -0
  14. package/dist/admin/audit.controller.d.ts +14 -0
  15. package/dist/admin/audit.controller.js +42 -0
  16. package/dist/admin/audit.schemas.d.ts +8 -0
  17. package/dist/admin/audit.schemas.js +17 -0
  18. package/dist/admin/extensions.controller.d.ts +34 -3
  19. package/dist/admin/extensions.controller.js +66 -8
  20. package/dist/admin/extensions.schemas.d.ts +7 -0
  21. package/dist/admin/extensions.schemas.js +10 -0
  22. package/dist/admin/health.service.d.ts +104 -0
  23. package/dist/admin/health.service.js +246 -0
  24. package/dist/admin/limit-defaults.d.ts +20 -0
  25. package/dist/admin/limit-defaults.js +10 -0
  26. package/dist/admin/overview.controller.d.ts +31 -0
  27. package/dist/admin/overview.controller.js +78 -0
  28. package/dist/admin/overview.schemas.d.ts +8 -0
  29. package/dist/admin/overview.schemas.js +13 -0
  30. package/dist/admin/overview.service.d.ts +112 -0
  31. package/dist/admin/overview.service.js +223 -0
  32. package/dist/admin/platform-audit.service.d.ts +41 -0
  33. package/dist/admin/platform-audit.service.js +70 -0
  34. package/dist/admin/setup-lock.d.ts +1 -1
  35. package/dist/admin/setup-lock.js +1 -1
  36. package/dist/admin/setup.controller.d.ts +1 -1
  37. package/dist/admin/setup.controller.js +1 -1
  38. package/dist/admin/setup.service.d.ts +4 -4
  39. package/dist/admin/setup.service.js +8 -8
  40. package/dist/admin/usage.service.d.ts +149 -0
  41. package/dist/admin/usage.service.js +321 -0
  42. package/dist/agents/admin-agents.d.ts +92 -0
  43. package/dist/agents/admin-agents.js +170 -0
  44. package/dist/agents/agent-lookup.d.ts +24 -0
  45. package/dist/agents/agent-lookup.js +46 -2
  46. package/dist/agents/agent-profile.service.d.ts +31 -0
  47. package/dist/agents/agent-profile.service.js +122 -0
  48. package/dist/agents/agents.controller.d.ts +53 -168
  49. package/dist/agents/agents.controller.js +163 -34
  50. package/dist/agents/agents.module.d.ts +6 -2
  51. package/dist/agents/agents.module.js +41 -7
  52. package/dist/agents/agents.schemas.d.ts +392 -0
  53. package/dist/agents/agents.schemas.js +126 -0
  54. package/dist/agents/agents.service.d.ts +121 -36
  55. package/dist/agents/agents.service.js +411 -121
  56. package/dist/agents/definition.d.ts +142 -21
  57. package/dist/agents/definition.js +389 -43
  58. package/dist/agents/from-template.d.ts +106 -0
  59. package/dist/agents/from-template.js +680 -0
  60. package/dist/agents/from-template.service.d.ts +72 -0
  61. package/dist/agents/from-template.service.js +178 -0
  62. package/dist/agents/instruction-files.d.ts +60 -0
  63. package/dist/agents/instruction-files.js +111 -0
  64. package/dist/agents/models.controller.d.ts +44 -6
  65. package/dist/agents/models.controller.js +84 -8
  66. package/dist/agents/org-templates.d.ts +186 -0
  67. package/dist/agents/org-templates.js +876 -0
  68. package/dist/agents/pending-connector-requests.d.ts +79 -0
  69. package/dist/agents/pending-connector-requests.js +215 -0
  70. package/dist/agents/pending-connectors.controller.d.ts +39 -0
  71. package/dist/agents/pending-connectors.controller.js +91 -0
  72. package/dist/agents/pending-connectors.service.d.ts +62 -0
  73. package/dist/agents/pending-connectors.service.js +282 -0
  74. package/dist/agents/profile.d.ts +114 -0
  75. package/dist/agents/profile.js +55 -0
  76. package/dist/agents/readiness.controller.d.ts +26 -0
  77. package/dist/agents/readiness.controller.js +56 -0
  78. package/dist/agents/templates.controller.d.ts +77 -5
  79. package/dist/agents/templates.controller.js +153 -7
  80. package/dist/agents/templates.d.ts +127 -23
  81. package/dist/agents/templates.js +482 -44
  82. package/dist/agents/templates.schemas.d.ts +20 -0
  83. package/dist/agents/templates.schemas.js +45 -0
  84. package/dist/background/background.controller.d.ts +38 -0
  85. package/dist/background/background.controller.js +88 -0
  86. package/dist/background/background.module.d.ts +10 -0
  87. package/dist/background/background.module.js +39 -0
  88. package/dist/background/background.schemas.d.ts +10 -0
  89. package/dist/background/background.schemas.js +16 -0
  90. package/dist/background/finish.d.ts +44 -0
  91. package/dist/background/finish.js +95 -0
  92. package/dist/background/launch-lock.d.ts +15 -0
  93. package/dist/background/launch-lock.js +40 -0
  94. package/dist/background/launch.d.ts +42 -0
  95. package/dist/background/launch.js +77 -0
  96. package/dist/background/poll.job.d.ts +56 -0
  97. package/dist/background/poll.job.js +195 -0
  98. package/dist/background/render.d.ts +23 -0
  99. package/dist/background/render.js +48 -0
  100. package/dist/background/session.d.ts +48 -0
  101. package/dist/background/session.js +80 -0
  102. package/dist/background/status.d.ts +35 -0
  103. package/dist/background/status.js +57 -0
  104. package/dist/background/stop.d.ts +68 -0
  105. package/dist/background/stop.js +244 -0
  106. package/dist/background/store.d.ts +167 -0
  107. package/dist/background/store.js +361 -0
  108. package/dist/background/store.module.d.ts +6 -0
  109. package/dist/background/store.module.js +22 -0
  110. package/dist/background/tasks.service.d.ts +109 -0
  111. package/dist/background/tasks.service.js +271 -0
  112. package/dist/background/wake-rules.d.ts +66 -0
  113. package/dist/background/wake-rules.js +113 -0
  114. package/dist/background/wake.d.ts +30 -0
  115. package/dist/background/wake.js +63 -0
  116. package/dist/catalog/admin-catalog.controller.d.ts +136 -52
  117. package/dist/catalog/admin-catalog.controller.js +275 -65
  118. package/dist/catalog/admin-catalog.schemas.d.ts +82 -0
  119. package/dist/catalog/admin-catalog.schemas.js +99 -0
  120. package/dist/catalog/appearance.schemas.d.ts +10 -0
  121. package/dist/catalog/appearance.schemas.js +20 -0
  122. package/dist/catalog/appearance.service.d.ts +105 -0
  123. package/dist/catalog/appearance.service.js +306 -0
  124. package/dist/catalog/catalog-content.d.ts +122 -35
  125. package/dist/catalog/catalog-content.js +122 -14
  126. package/dist/catalog/catalog-files.d.ts +42 -0
  127. package/dist/catalog/catalog-files.js +89 -0
  128. package/dist/catalog/catalog-import.module.d.ts +7 -0
  129. package/dist/catalog/catalog-import.module.js +63 -0
  130. package/dist/catalog/catalog-items.d.ts +122 -7
  131. package/dist/catalog/catalog-items.js +301 -13
  132. package/dist/catalog/catalog-scope.service.d.ts +293 -0
  133. package/dist/catalog/catalog-scope.service.js +1236 -0
  134. package/dist/catalog/catalog.module.d.ts +7 -9
  135. package/dist/catalog/catalog.module.js +47 -31
  136. package/dist/catalog/catalog.service.d.ts +122 -31
  137. package/dist/catalog/catalog.service.js +177 -105
  138. package/dist/catalog/claude/agents.js +15 -10
  139. package/dist/catalog/claude/translate.js +3 -0
  140. package/dist/catalog/cli.d.ts +11 -1
  141. package/dist/catalog/cli.js +29 -1
  142. package/dist/catalog/component-promotion.d.ts +96 -0
  143. package/dist/catalog/component-promotion.js +395 -0
  144. package/dist/catalog/component-scope.controller.d.ts +102 -0
  145. package/dist/catalog/component-scope.controller.js +257 -0
  146. package/dist/catalog/component-scope.schemas.d.ts +118 -0
  147. package/dist/catalog/component-scope.schemas.js +97 -0
  148. package/dist/catalog/component-scope.service.d.ts +394 -0
  149. package/dist/catalog/component-scope.service.js +1133 -0
  150. package/dist/catalog/component-state.d.ts +207 -0
  151. package/dist/catalog/component-state.js +484 -0
  152. package/dist/catalog/git-source.d.ts +9 -1
  153. package/dist/catalog/git-source.js +29 -2
  154. package/dist/catalog/job-ids.d.ts +30 -0
  155. package/dist/catalog/job-ids.js +25 -0
  156. package/dist/catalog/marketplace-fetch.d.ts +1 -1
  157. package/dist/catalog/marketplace-icons.d.ts +64 -0
  158. package/dist/catalog/marketplace-icons.js +131 -0
  159. package/dist/catalog/marketplaces.controller.d.ts +50 -41
  160. package/dist/catalog/marketplaces.controller.js +130 -46
  161. package/dist/catalog/marketplaces.schemas.d.ts +48 -0
  162. package/dist/catalog/marketplaces.schemas.js +53 -0
  163. package/dist/catalog/marketplaces.service.d.ts +110 -17
  164. package/dist/catalog/marketplaces.service.js +337 -29
  165. package/dist/catalog/org-catalog.controller.d.ts +114 -62
  166. package/dist/catalog/org-catalog.controller.js +191 -98
  167. package/dist/catalog/org-catalog.schemas.d.ts +104 -0
  168. package/dist/catalog/org-catalog.schemas.js +107 -0
  169. package/dist/catalog/org-catalog.service.d.ts +72 -33
  170. package/dist/catalog/org-catalog.service.js +367 -158
  171. package/dist/catalog/org-extension-switch.d.ts +41 -0
  172. package/dist/catalog/org-extension-switch.js +115 -0
  173. package/dist/catalog/org-extension.controller.d.ts +133 -0
  174. package/dist/catalog/org-extension.controller.js +313 -0
  175. package/dist/catalog/org-extension.schemas.d.ts +15 -0
  176. package/dist/catalog/org-extension.schemas.js +22 -0
  177. package/dist/catalog/org-plugin-uploads.controller.d.ts +77 -0
  178. package/dist/catalog/org-plugin-uploads.controller.js +200 -0
  179. package/dist/catalog/org-plugin-uploads.d.ts +71 -0
  180. package/dist/catalog/org-plugin-uploads.js +122 -0
  181. package/dist/catalog/org-plugin-uploads.schemas.d.ts +20 -0
  182. package/dist/catalog/org-plugin-uploads.schemas.js +32 -0
  183. package/dist/catalog/owned-items.d.ts +188 -0
  184. package/dist/catalog/owned-items.js +808 -0
  185. package/dist/catalog/owned-plugin-cleanup.d.ts +56 -0
  186. package/dist/catalog/owned-plugin-cleanup.js +194 -0
  187. package/dist/catalog/ownership.d.ts +172 -0
  188. package/dist/catalog/ownership.js +326 -0
  189. package/dist/catalog/platform-components.d.ts +243 -0
  190. package/dist/catalog/platform-components.js +872 -0
  191. package/dist/catalog/platform-migration.d.ts +115 -0
  192. package/dist/catalog/platform-migration.js +583 -0
  193. package/dist/catalog/plugin-import.d.ts +254 -47
  194. package/dist/catalog/plugin-import.js +810 -112
  195. package/dist/catalog/plugin-install.d.ts +205 -42
  196. package/dist/catalog/plugin-install.js +828 -126
  197. package/dist/catalog/plugin-package.d.ts +43 -4
  198. package/dist/catalog/plugin-package.js +194 -7
  199. package/dist/catalog/plugin-upgrade.d.ts +308 -225
  200. package/dist/catalog/plugin-upgrade.js +1325 -1131
  201. package/dist/catalog/request-rules.d.ts +65 -0
  202. package/dist/catalog/request-rules.js +217 -0
  203. package/dist/catalog/requests.service.d.ts +194 -118
  204. package/dist/catalog/requests.service.js +530 -343
  205. package/dist/catalog/reserved-names.d.ts +8 -0
  206. package/dist/catalog/reserved-names.js +42 -0
  207. package/dist/catalog/scope-orgs.d.ts +21 -0
  208. package/dist/catalog/scope-orgs.js +67 -0
  209. package/dist/catalog/scope-state.d.ts +35 -0
  210. package/dist/catalog/scope-state.js +87 -0
  211. package/dist/catalog/scope-sync-workers.d.ts +7 -0
  212. package/dist/catalog/scope-sync-workers.js +29 -0
  213. package/dist/catalog/scope-sync.d.ts +176 -0
  214. package/dist/catalog/scope-sync.js +576 -0
  215. package/dist/catalog/scope.d.ts +42 -0
  216. package/dist/catalog/scope.js +42 -0
  217. package/dist/catalog/unshare.d.ts +22 -0
  218. package/dist/catalog/unshare.js +119 -0
  219. package/dist/channels/actions.js +10 -3
  220. package/dist/channels/cards.d.ts +36 -10
  221. package/dist/channels/cards.js +100 -25
  222. package/dist/channels/channels.module.js +13 -2
  223. package/dist/channels/channels.schemas.d.ts +41 -0
  224. package/dist/channels/channels.schemas.js +40 -0
  225. package/dist/channels/connections.controller.d.ts +46 -37
  226. package/dist/channels/connections.controller.js +76 -34
  227. package/dist/channels/connections.service.d.ts +102 -10
  228. package/dist/channels/connections.service.js +271 -24
  229. package/dist/channels/inbound.d.ts +11 -1
  230. package/dist/channels/inbound.js +87 -7
  231. package/dist/channels/outbound.d.ts +14 -1
  232. package/dist/channels/outbound.js +64 -15
  233. package/dist/channels/phrases.d.ts +33 -2
  234. package/dist/channels/phrases.js +29 -1
  235. package/dist/channels/supervisor.d.ts +2 -0
  236. package/dist/channels/supervisor.js +4 -0
  237. package/dist/channels/threads.d.ts +5 -0
  238. package/dist/channels/threads.js +8 -0
  239. package/dist/channels/webhook.d.ts +21 -1
  240. package/dist/channels/webhook.js +39 -4
  241. package/dist/client/client-access.service.d.ts +102 -0
  242. package/dist/client/client-access.service.js +303 -0
  243. package/dist/client/client-builds.service.d.ts +109 -0
  244. package/dist/client/client-builds.service.js +229 -0
  245. package/dist/client/client-delivery.controller.d.ts +25 -0
  246. package/dist/client/client-delivery.controller.js +66 -0
  247. package/dist/client/client-files.d.ts +48 -0
  248. package/dist/client/client-files.js +136 -0
  249. package/dist/client/client-reports.cron.d.ts +13 -0
  250. package/dist/client/client-reports.cron.js +42 -0
  251. package/dist/client/client-reports.service.d.ts +30 -0
  252. package/dist/client/client-reports.service.js +102 -0
  253. package/dist/client/client-sign-in.service.d.ts +21 -0
  254. package/dist/client/client-sign-in.service.js +49 -0
  255. package/dist/client/client.controller.d.ts +49 -0
  256. package/dist/client/client.controller.js +129 -0
  257. package/dist/client/client.module.d.ts +8 -0
  258. package/dist/client/client.module.js +28 -0
  259. package/dist/client/client.schemas.d.ts +61 -0
  260. package/dist/client/client.schemas.js +27 -0
  261. package/dist/config/docs.js +5 -1
  262. package/dist/config/schema.d.ts +35 -2
  263. package/dist/config/schema.js +216 -21
  264. package/dist/conversations/access.d.ts +6 -4
  265. package/dist/conversations/access.js +29 -5
  266. package/dist/conversations/agent-tree.d.ts +46 -0
  267. package/dist/conversations/agent-tree.js +92 -0
  268. package/dist/conversations/artifacts.d.ts +1 -1
  269. package/dist/conversations/artifacts.js +1 -1
  270. package/dist/conversations/attachments.service.d.ts +30 -0
  271. package/dist/conversations/attachments.service.js +130 -5
  272. package/dist/conversations/conversations.controller.d.ts +79 -44
  273. package/dist/conversations/conversations.controller.js +133 -82
  274. package/dist/conversations/conversations.module.d.ts +1 -1
  275. package/dist/conversations/conversations.module.js +10 -7
  276. package/dist/conversations/conversations.schemas.d.ts +52 -0
  277. package/dist/conversations/conversations.schemas.js +79 -0
  278. package/dist/conversations/conversations.service.d.ts +161 -13
  279. package/dist/conversations/conversations.service.js +329 -57
  280. package/dist/conversations/device-status.d.ts +24 -0
  281. package/dist/conversations/device-status.js +71 -0
  282. package/dist/conversations/event-log.d.ts +45 -9
  283. package/dist/conversations/event-log.js +113 -6
  284. package/dist/conversations/events.d.ts +255 -9
  285. package/dist/conversations/events.js +250 -34
  286. package/dist/conversations/message-context.d.ts +79 -0
  287. package/dist/conversations/message-context.js +145 -0
  288. package/dist/conversations/queue.d.ts +5 -2
  289. package/dist/conversations/queue.js +24 -4
  290. package/dist/conversations/queue.service.d.ts +2 -2
  291. package/dist/conversations/queue.service.js +21 -3
  292. package/dist/conversations/titles.d.ts +12 -3
  293. package/dist/conversations/titles.js +40 -16
  294. package/dist/conversations/tree.d.ts +17 -0
  295. package/dist/conversations/tree.js +42 -0
  296. package/dist/ctx/create-ctx.d.ts +48 -5
  297. package/dist/ctx/create-ctx.js +174 -34
  298. package/dist/db/kernel-schema.d.ts +668 -27
  299. package/dist/db/pool.d.ts +5 -0
  300. package/dist/db/pool.js +3 -0
  301. package/dist/devices/access.d.ts +66 -0
  302. package/dist/devices/access.js +113 -0
  303. package/dist/devices/conversation-devices.d.ts +75 -0
  304. package/dist/devices/conversation-devices.js +230 -0
  305. package/dist/devices/devices.controller.d.ts +36 -0
  306. package/dist/devices/devices.controller.js +124 -0
  307. package/dist/devices/devices.module.d.ts +8 -0
  308. package/dist/devices/devices.module.js +34 -0
  309. package/dist/devices/devices.schemas.d.ts +3 -0
  310. package/dist/devices/devices.schemas.js +14 -0
  311. package/dist/devices/devices.service.d.ts +251 -0
  312. package/dist/devices/devices.service.js +791 -0
  313. package/dist/devices/dto.d.ts +25 -0
  314. package/dist/devices/dto.js +12 -0
  315. package/dist/devices/label.d.ts +11 -0
  316. package/dist/devices/label.js +25 -0
  317. package/dist/devices/legacy-cleanup.job.d.ts +34 -0
  318. package/dist/devices/legacy-cleanup.job.js +141 -0
  319. package/dist/errors.d.ts +215 -3
  320. package/dist/errors.js +215 -3
  321. package/dist/evals/evals.module.js +11 -2
  322. package/dist/evals/evals.schemas.d.ts +110 -0
  323. package/dist/evals/evals.schemas.js +107 -0
  324. package/dist/evals/reconstruct.d.ts +18 -9
  325. package/dist/evals/reconstruct.js +36 -10
  326. package/dist/evals/recorded-tools.d.ts +37 -1
  327. package/dist/evals/recorded-tools.js +120 -10
  328. package/dist/evals/run-replay.d.ts +20 -3
  329. package/dist/evals/run-replay.js +78 -14
  330. package/dist/evals/runs.controller.d.ts +2 -57
  331. package/dist/evals/runs.controller.js +1 -42
  332. package/dist/evals/runs.service.d.ts +8 -7
  333. package/dist/evals/runs.service.js +45 -30
  334. package/dist/evals/sets.controller.d.ts +2 -28
  335. package/dist/evals/sets.controller.js +1 -31
  336. package/dist/evals/sets.service.d.ts +7 -7
  337. package/dist/evals/sets.service.js +23 -17
  338. package/dist/evals/snapshot.d.ts +3 -2
  339. package/dist/evals/snapshot.js +17 -4
  340. package/dist/evals/step-replay.d.ts +4 -6
  341. package/dist/evals/step-replay.js +16 -9
  342. package/dist/evals/trajectory.d.ts +5 -3
  343. package/dist/evals/trajectory.js +4 -1
  344. package/dist/evals/trajectory.service.d.ts +8 -3
  345. package/dist/evals/trajectory.service.js +26 -14
  346. package/dist/evals/worker.d.ts +5 -5
  347. package/dist/evals/worker.js +9 -3
  348. package/dist/extensions/admin-ops.d.ts +81 -14
  349. package/dist/extensions/admin-ops.js +181 -47
  350. package/dist/extensions/admin-view.d.ts +57 -10
  351. package/dist/extensions/admin-view.js +249 -27
  352. package/dist/extensions/approvals.d.ts +12 -2
  353. package/dist/extensions/blobs.d.ts +14 -1
  354. package/dist/extensions/blobs.js +49 -5
  355. package/dist/extensions/bootstrap.d.ts +85 -10
  356. package/dist/extensions/bootstrap.js +215 -36
  357. package/dist/extensions/cli.d.ts +12 -0
  358. package/dist/extensions/cli.js +11 -2
  359. package/dist/extensions/config-hash.d.ts +10 -0
  360. package/dist/extensions/config-hash.js +38 -0
  361. package/dist/extensions/config-issues.d.ts +13 -1
  362. package/dist/extensions/config-issues.js +22 -5
  363. package/dist/extensions/config-json-schema.d.ts +43 -7
  364. package/dist/extensions/config-json-schema.js +124 -58
  365. package/dist/extensions/deployment-config-store.d.ts +6 -0
  366. package/dist/extensions/deployment-config.d.ts +94 -9
  367. package/dist/extensions/deployment-config.js +255 -34
  368. package/dist/extensions/display-name.d.ts +22 -0
  369. package/dist/extensions/display-name.js +77 -0
  370. package/dist/extensions/effective-config.d.ts +133 -0
  371. package/dist/extensions/effective-config.js +379 -0
  372. package/dist/extensions/extensions.module.js +31 -12
  373. package/dist/extensions/guide-places.d.ts +68 -0
  374. package/dist/extensions/guide-places.js +152 -0
  375. package/dist/extensions/hooks.d.ts +37 -4
  376. package/dist/extensions/hooks.js +82 -16
  377. package/dist/extensions/host.d.ts +105 -12
  378. package/dist/extensions/host.js +372 -87
  379. package/dist/extensions/installs.d.ts +30 -9
  380. package/dist/extensions/installs.js +57 -16
  381. package/dist/extensions/instance.d.ts +17 -2
  382. package/dist/extensions/instance.js +21 -0
  383. package/dist/extensions/ledger.d.ts +1 -1
  384. package/dist/extensions/locks.d.ts +12 -0
  385. package/dist/extensions/locks.js +26 -0
  386. package/dist/extensions/org-config.d.ts +97 -7
  387. package/dist/extensions/org-config.js +215 -45
  388. package/dist/extensions/org-levels.d.ts +37 -0
  389. package/dist/extensions/org-levels.js +71 -0
  390. package/dist/extensions/org-overrides.d.ts +151 -0
  391. package/dist/extensions/org-overrides.js +524 -0
  392. package/dist/extensions/package.d.ts +18 -4
  393. package/dist/extensions/package.js +56 -3
  394. package/dist/extensions/permission-set.d.ts +35 -5
  395. package/dist/extensions/permission-set.js +36 -5
  396. package/dist/extensions/permission-view.d.ts +106 -13
  397. package/dist/extensions/permission-view.js +33 -15
  398. package/dist/extensions/plugin-guides.d.ts +282 -0
  399. package/dist/extensions/plugin-guides.js +554 -0
  400. package/dist/extensions/plugin-icons.d.ts +54 -0
  401. package/dist/extensions/plugin-icons.js +125 -0
  402. package/dist/extensions/plugin-items.d.ts +21 -0
  403. package/dist/extensions/plugin-items.js +42 -0
  404. package/dist/extensions/point-defaults.controller.d.ts +28 -0
  405. package/dist/extensions/point-defaults.controller.js +69 -0
  406. package/dist/extensions/point-defaults.d.ts +73 -0
  407. package/dist/extensions/point-defaults.js +236 -0
  408. package/dist/extensions/point-defaults.schemas.d.ts +9 -0
  409. package/dist/extensions/point-defaults.schemas.js +14 -0
  410. package/dist/extensions/registry.d.ts +1 -1
  411. package/dist/extensions/registry.js +2 -0
  412. package/dist/extensions/resolve.d.ts +51 -1
  413. package/dist/extensions/resolve.js +85 -3
  414. package/dist/extensions/single-provider.d.ts +92 -0
  415. package/dist/extensions/single-provider.js +180 -0
  416. package/dist/extensions/sources.d.ts +13 -2
  417. package/dist/extensions/sources.js +2 -0
  418. package/dist/extensions/state.module.d.ts +9 -0
  419. package/dist/extensions/state.module.js +46 -0
  420. package/dist/extensions/unavailable.d.ts +50 -0
  421. package/dist/extensions/unavailable.js +115 -0
  422. package/dist/files/previewers.controller.js +2 -3
  423. package/dist/files/previewers.d.ts +10 -3
  424. package/dist/files/previewers.js +40 -11
  425. package/dist/files/previewers.schemas.d.ts +10 -0
  426. package/dist/files/previewers.schemas.js +9 -0
  427. package/dist/http/api.module.js +76 -4
  428. package/dist/http/app.d.ts +11 -2
  429. package/dist/http/app.js +31 -5
  430. package/dist/http/gateway-routes.d.ts +7 -3
  431. package/dist/http/gateway-routes.js +6 -3
  432. package/dist/http/nest-logger.d.ts +6 -5
  433. package/dist/http/nest-logger.js +24 -10
  434. package/dist/http/plugin-dispatch.d.ts +4 -1
  435. package/dist/http/plugin-dispatch.js +14 -2
  436. package/dist/identity/accounts.d.ts +77 -31
  437. package/dist/identity/accounts.js +133 -52
  438. package/dist/identity/audit.d.ts +2 -1
  439. package/dist/identity/auth.controller.js +9 -5
  440. package/dist/identity/auth.guard.d.ts +13 -5
  441. package/dist/identity/auth.guard.js +35 -9
  442. package/dist/identity/cookies.d.ts +26 -5
  443. package/dist/identity/cookies.js +58 -6
  444. package/dist/identity/identity.module.d.ts +1 -1
  445. package/dist/identity/identity.module.js +7 -4
  446. package/dist/identity/initial-passwords.controller.d.ts +22 -0
  447. package/dist/identity/initial-passwords.controller.js +49 -0
  448. package/dist/identity/initial-passwords.d.ts +61 -0
  449. package/dist/identity/initial-passwords.job.d.ts +16 -0
  450. package/dist/identity/initial-passwords.job.js +46 -0
  451. package/dist/identity/initial-passwords.js +159 -0
  452. package/dist/identity/me.controller.d.ts +17 -1
  453. package/dist/identity/me.controller.js +45 -4
  454. package/dist/identity/me.schemas.d.ts +24 -0
  455. package/dist/identity/me.schemas.js +25 -0
  456. package/dist/identity/principal.d.ts +11 -3
  457. package/dist/identity/principal.js +11 -3
  458. package/dist/identity/sessions.d.ts +12 -0
  459. package/dist/identity/sessions.js +45 -0
  460. package/dist/identity/settings.d.ts +99 -12
  461. package/dist/identity/settings.js +234 -25
  462. package/dist/identity/{enterprise-admin.d.ts → super-admin.d.ts} +5 -5
  463. package/dist/identity/{enterprise-admin.js → super-admin.js} +24 -24
  464. package/dist/identity/write-actor.d.ts +11 -0
  465. package/dist/identity/write-actor.js +7 -0
  466. package/dist/inbox/inbox.module.d.ts +4 -1
  467. package/dist/inbox/inbox.module.js +7 -3
  468. package/dist/inbox/inbox.schemas.d.ts +8 -0
  469. package/dist/inbox/inbox.schemas.js +11 -0
  470. package/dist/inbox/inbox.service.d.ts +64 -4
  471. package/dist/inbox/inbox.service.js +74 -4
  472. package/dist/inbox/org-notices.d.ts +63 -0
  473. package/dist/inbox/org-notices.js +91 -0
  474. package/dist/inbox/platform-inbox.controller.d.ts +23 -0
  475. package/dist/inbox/platform-inbox.controller.js +58 -0
  476. package/dist/inbox/platform-inbox.service.d.ts +157 -0
  477. package/dist/inbox/platform-inbox.service.js +281 -0
  478. package/dist/inbox/platform-notices.d.ts +19 -0
  479. package/dist/inbox/platform-notices.js +9 -0
  480. package/dist/index.d.ts +6 -2
  481. package/dist/index.js +7 -1
  482. package/dist/infra/cli/kernel-cli.module.js +9 -1
  483. package/dist/infra/config/kernel-config.service.js +32 -1
  484. package/dist/infra/database/database.module.js +1 -0
  485. package/dist/infra/database/xact-lock.d.ts +1 -1
  486. package/dist/infra/database/xact-lock.js +1 -1
  487. package/dist/infra/events/kernel-events.d.ts +31 -3
  488. package/dist/infra/lifecycle/process-guards.js +4 -0
  489. package/dist/infra/lock/lock.service.d.ts +8 -0
  490. package/dist/infra/lock/lock.service.js +27 -0
  491. package/dist/infra/logging/logging.module.d.ts +4 -2
  492. package/dist/infra/logging/logging.module.js +24 -6
  493. package/dist/infra/presence/presence.module.d.ts +6 -0
  494. package/dist/infra/presence/presence.module.js +22 -0
  495. package/dist/infra/presence/replica-presence.d.ts +87 -0
  496. package/dist/infra/presence/replica-presence.js +189 -0
  497. package/dist/infra/queue/add-job-once.d.ts +14 -0
  498. package/dist/infra/queue/add-job-once.js +16 -0
  499. package/dist/infra/queue/redis-connection.d.ts +6 -0
  500. package/dist/infra/queue/redis-connection.js +7 -0
  501. package/dist/infra/redis/redis.module.js +6 -2
  502. package/dist/infra/throttler/named-throttlers.d.ts +12 -0
  503. package/dist/infra/throttler/named-throttlers.js +67 -0
  504. package/dist/infra/throttler/throttler.guard.js +1 -1
  505. package/dist/infra/tokens.d.ts +6 -1
  506. package/dist/infra/tokens.js +6 -1
  507. package/dist/kernel.module.js +15 -0
  508. package/dist/lifecycle/kernel-lifecycle.d.ts +9 -3
  509. package/dist/lifecycle/kernel-lifecycle.js +51 -11
  510. package/dist/local-devices/device-auth.controller.d.ts +42 -0
  511. package/dist/local-devices/device-auth.controller.js +116 -0
  512. package/dist/local-devices/device-auth.d.ts +119 -0
  513. package/dist/local-devices/device-auth.js +401 -0
  514. package/dist/local-devices/device-auth.module.d.ts +7 -0
  515. package/dist/local-devices/device-auth.module.js +25 -0
  516. package/dist/local-devices/device-routes.d.ts +36 -0
  517. package/dist/local-devices/device-routes.js +90 -0
  518. package/dist/local-devices/dto.d.ts +66 -0
  519. package/dist/local-devices/dto.js +44 -0
  520. package/dist/local-devices/keys.d.ts +25 -0
  521. package/dist/local-devices/keys.js +25 -0
  522. package/dist/local-devices/local-device-gateway.d.ts +134 -0
  523. package/dist/local-devices/local-device-gateway.js +542 -0
  524. package/dist/local-devices/local-device-provider.d.ts +89 -0
  525. package/dist/local-devices/local-device-provider.js +151 -0
  526. package/dist/local-devices/local-devices.module.d.ts +16 -0
  527. package/dist/local-devices/local-devices.module.js +44 -0
  528. package/dist/local-devices/machines.d.ts +118 -0
  529. package/dist/local-devices/machines.js +366 -0
  530. package/dist/local-devices/relay.d.ts +100 -0
  531. package/dist/local-devices/relay.js +373 -0
  532. package/dist/local-devices/targets.d.ts +28 -0
  533. package/dist/local-devices/targets.js +73 -0
  534. package/dist/log.d.ts +13 -1
  535. package/dist/log.js +93 -17
  536. package/dist/models/embeddings.d.ts +82 -0
  537. package/dist/models/embeddings.js +326 -0
  538. package/dist/models/enablement.controller.d.ts +40 -0
  539. package/dist/models/enablement.controller.js +74 -0
  540. package/dist/models/enablement.d.ts +101 -0
  541. package/dist/models/enablement.js +264 -0
  542. package/dist/models/models.module.d.ts +5 -1
  543. package/dist/models/models.module.js +16 -4
  544. package/dist/models/org-models.schemas.d.ts +8 -0
  545. package/dist/models/org-models.schemas.js +22 -0
  546. package/dist/models/prices.d.ts +8 -6
  547. package/dist/models/prices.js +11 -9
  548. package/dist/models/purposes.controller.d.ts +6 -4
  549. package/dist/models/purposes.controller.js +13 -7
  550. package/dist/models/purposes.d.ts +72 -14
  551. package/dist/models/purposes.js +115 -34
  552. package/dist/orgs/directory-sync.d.ts +14 -5
  553. package/dist/orgs/directory-sync.js +41 -17
  554. package/dist/orgs/offboarding.d.ts +12 -8
  555. package/dist/orgs/offboarding.js +54 -33
  556. package/dist/orgs/org-lock.d.ts +5 -0
  557. package/dist/orgs/org-lock.js +13 -0
  558. package/dist/orgs/org.guard.d.ts +10 -0
  559. package/dist/orgs/org.guard.js +43 -32
  560. package/dist/orgs/orgs.controller.d.ts +2 -5
  561. package/dist/orgs/orgs.controller.js +3 -6
  562. package/dist/orgs/orgs.module.js +3 -0
  563. package/dist/orgs/orgs.schemas.d.ts +8 -0
  564. package/dist/orgs/orgs.schemas.js +16 -0
  565. package/dist/orgs/orgs.service.d.ts +23 -8
  566. package/dist/orgs/orgs.service.js +38 -16
  567. package/dist/orgs/roles.d.ts +1 -1
  568. package/dist/orgs/roles.js +5 -1
  569. package/dist/orgs/settings.controller.d.ts +1 -1
  570. package/dist/orgs/settings.service.d.ts +66 -6
  571. package/dist/orgs/settings.service.js +89 -10
  572. package/dist/overrides.d.ts +16 -1
  573. package/dist/overrides.js +10 -0
  574. package/dist/platform/actor.d.ts +48 -0
  575. package/dist/platform/actor.js +100 -0
  576. package/dist/platform/agent-docs.d.ts +18 -0
  577. package/dist/platform/agent-docs.js +59 -0
  578. package/dist/platform/availability.d.ts +14 -0
  579. package/dist/platform/availability.js +43 -0
  580. package/dist/platform/errors.d.ts +28 -0
  581. package/dist/platform/errors.js +65 -0
  582. package/dist/platform/exclusions.d.ts +11 -0
  583. package/dist/platform/exclusions.js +774 -0
  584. package/dist/platform/method.d.ts +6 -0
  585. package/dist/platform/method.js +15 -0
  586. package/dist/platform/operation.d.ts +169 -0
  587. package/dist/platform/operation.js +102 -0
  588. package/dist/platform/ops/accounts.ops.d.ts +32 -0
  589. package/dist/platform/ops/accounts.ops.js +291 -0
  590. package/dist/platform/ops/admin-items.ops.d.ts +37 -0
  591. package/dist/platform/ops/admin-items.ops.js +278 -0
  592. package/dist/platform/ops/admin.ops.d.ts +38 -0
  593. package/dist/platform/ops/admin.ops.js +497 -0
  594. package/dist/platform/ops/agent-skills.ops.d.ts +50 -0
  595. package/dist/platform/ops/agent-skills.ops.js +509 -0
  596. package/dist/platform/ops/agent-templates.ops.d.ts +17 -0
  597. package/dist/platform/ops/agent-templates.ops.js +272 -0
  598. package/dist/platform/ops/agents.ops.d.ts +37 -0
  599. package/dist/platform/ops/agents.ops.js +730 -0
  600. package/dist/platform/ops/approvals.ops.d.ts +30 -0
  601. package/dist/platform/ops/approvals.ops.js +116 -0
  602. package/dist/platform/ops/background.ops.d.ts +14 -0
  603. package/dist/platform/ops/background.ops.js +134 -0
  604. package/dist/platform/ops/catalog-admin.ops.d.ts +92 -0
  605. package/dist/platform/ops/catalog-admin.ops.js +682 -0
  606. package/dist/platform/ops/channels.ops.d.ts +16 -0
  607. package/dist/platform/ops/channels.ops.js +195 -0
  608. package/dist/platform/ops/components.ops.d.ts +46 -0
  609. package/dist/platform/ops/components.ops.js +854 -0
  610. package/dist/platform/ops/connectors.ops.d.ts +17 -0
  611. package/dist/platform/ops/connectors.ops.js +190 -0
  612. package/dist/platform/ops/conversations.ops.d.ts +30 -0
  613. package/dist/platform/ops/conversations.ops.js +470 -0
  614. package/dist/platform/ops/devices.ops.d.ts +26 -0
  615. package/dist/platform/ops/devices.ops.js +311 -0
  616. package/dist/platform/ops/errors.d.ts +16 -0
  617. package/dist/platform/ops/errors.js +30 -0
  618. package/dist/platform/ops/evals.ops.d.ts +28 -0
  619. package/dist/platform/ops/evals.ops.js +783 -0
  620. package/dist/platform/ops/extensions-admin.ops.d.ts +25 -0
  621. package/dist/platform/ops/extensions-admin.ops.js +372 -0
  622. package/dist/platform/ops/extensions.ops.d.ts +25 -0
  623. package/dist/platform/ops/extensions.ops.js +347 -0
  624. package/dist/platform/ops/inbox.ops.d.ts +25 -0
  625. package/dist/platform/ops/inbox.ops.js +381 -0
  626. package/dist/platform/ops/marketplaces.ops.d.ts +22 -0
  627. package/dist/platform/ops/marketplaces.ops.js +466 -0
  628. package/dist/platform/ops/models.ops.d.ts +25 -0
  629. package/dist/platform/ops/models.ops.js +232 -0
  630. package/dist/platform/ops/org-plugins.ops.d.ts +35 -0
  631. package/dist/platform/ops/org-plugins.ops.js +388 -0
  632. package/dist/platform/ops/org-settings.ops.d.ts +18 -0
  633. package/dist/platform/ops/org-settings.ops.js +127 -0
  634. package/dist/platform/ops/orgs.ops.d.ts +28 -0
  635. package/dist/platform/ops/orgs.ops.js +298 -0
  636. package/dist/platform/ops/other-orgs.d.ts +20 -0
  637. package/dist/platform/ops/other-orgs.js +72 -0
  638. package/dist/platform/ops/paging.d.ts +14 -0
  639. package/dist/platform/ops/paging.js +20 -0
  640. package/dist/platform/ops/platform.ops.d.ts +30 -0
  641. package/dist/platform/ops/platform.ops.js +231 -0
  642. package/dist/platform/ops/plugins.ops.d.ts +35 -0
  643. package/dist/platform/ops/plugins.ops.js +476 -0
  644. package/dist/platform/ops/previewers.ops.d.ts +14 -0
  645. package/dist/platform/ops/previewers.ops.js +109 -0
  646. package/dist/platform/ops/requests.ops.d.ts +14 -0
  647. package/dist/platform/ops/requests.ops.js +191 -0
  648. package/dist/platform/ops/role.d.ts +4 -0
  649. package/dist/platform/ops/role.js +10 -0
  650. package/dist/platform/ops/setup.ops.d.ts +24 -0
  651. package/dist/platform/ops/setup.ops.js +212 -0
  652. package/dist/platform/ops/skills.ops.d.ts +17 -0
  653. package/dist/platform/ops/skills.ops.js +160 -0
  654. package/dist/platform/ops/summary.d.ts +10 -0
  655. package/dist/platform/ops/summary.js +18 -0
  656. package/dist/platform/ops/themes.ops.d.ts +14 -0
  657. package/dist/platform/ops/themes.ops.js +47 -0
  658. package/dist/platform/ops/ui.ops.d.ts +8 -0
  659. package/dist/platform/ops/ui.ops.js +41 -0
  660. package/dist/platform/ops/unavailable.d.ts +23 -0
  661. package/dist/platform/ops/unavailable.js +118 -0
  662. package/dist/platform/parity.d.ts +33 -0
  663. package/dist/platform/parity.js +272 -0
  664. package/dist/platform/platform-ops.module.d.ts +43 -0
  665. package/dist/platform/platform-ops.module.js +142 -0
  666. package/dist/platform/platform.module.d.ts +8 -0
  667. package/dist/platform/platform.module.js +25 -0
  668. package/dist/platform/registry.d.ts +30 -0
  669. package/dist/platform/registry.js +111 -0
  670. package/dist/platform/route-schemas.d.ts +18 -0
  671. package/dist/platform/route-schemas.js +85 -0
  672. package/dist/roles/gateway-role.d.ts +18 -3
  673. package/dist/roles/gateway-role.js +33 -5
  674. package/dist/roles/gateway.module.d.ts +2 -1
  675. package/dist/roles/gateway.module.js +6 -3
  676. package/dist/roles/worker-role.d.ts +6 -4
  677. package/dist/roles/worker-role.js +14 -7
  678. package/dist/roles/worker.module.d.ts +1 -1
  679. package/dist/roles/worker.module.js +21 -1
  680. package/dist/runtime/context/build.d.ts +21 -13
  681. package/dist/runtime/context/build.js +106 -29
  682. package/dist/runtime/context/claude-tools.d.ts +4 -1
  683. package/dist/runtime/context/claude-tools.js +13 -12
  684. package/dist/runtime/context/compaction.js +24 -1
  685. package/dist/runtime/context/device-paths.d.ts +40 -0
  686. package/dist/runtime/context/device-paths.js +48 -0
  687. package/dist/runtime/context/legacy-text.d.ts +22 -0
  688. package/dist/runtime/context/legacy-text.js +37 -0
  689. package/dist/runtime/context/reminders.d.ts +2 -0
  690. package/dist/runtime/context/reminders.js +2 -0
  691. package/dist/runtime/context/run-context.d.ts +65 -0
  692. package/dist/runtime/context/run-context.js +215 -0
  693. package/dist/runtime/context/skills.d.ts +29 -11
  694. package/dist/runtime/context/skills.js +46 -32
  695. package/dist/runtime/context/tool-changes.d.ts +27 -0
  696. package/dist/runtime/context/tool-changes.js +60 -0
  697. package/dist/runtime/hook-calls.d.ts +8 -1
  698. package/dist/runtime/hook-calls.js +40 -7
  699. package/dist/runtime/langgraph-loop.d.ts +3 -1
  700. package/dist/runtime/langgraph-loop.js +36 -17
  701. package/dist/runtime/loop.d.ts +35 -6
  702. package/dist/runtime/maintenance.d.ts +9 -4
  703. package/dist/runtime/maintenance.js +35 -8
  704. package/dist/runtime/model-call.d.ts +54 -11
  705. package/dist/runtime/model-call.js +105 -28
  706. package/dist/runtime/providers.d.ts +149 -29
  707. package/dist/runtime/providers.js +332 -63
  708. package/dist/runtime/run-context.service.d.ts +65 -0
  709. package/dist/runtime/run-context.service.js +236 -0
  710. package/dist/runtime/run-control.d.ts +11 -1
  711. package/dist/runtime/run-control.js +12 -0
  712. package/dist/runtime/run-drafts.d.ts +85 -0
  713. package/dist/runtime/run-drafts.js +230 -0
  714. package/dist/runtime/run-finish.d.ts +1 -1
  715. package/dist/runtime/run-jobs.d.ts +3 -5
  716. package/dist/runtime/run-jobs.js +7 -9
  717. package/dist/runtime/run-queue.d.ts +62 -5
  718. package/dist/runtime/run-queue.js +313 -40
  719. package/dist/runtime/run-worker.d.ts +19 -8
  720. package/dist/runtime/run-worker.js +105 -44
  721. package/dist/runtime/runtime.module.js +13 -3
  722. package/dist/runtime/step-log.d.ts +15 -4
  723. package/dist/runtime/step-log.js +24 -7
  724. package/dist/runtime/stream.controller.d.ts +23 -1
  725. package/dist/runtime/stream.controller.js +60 -3
  726. package/dist/runtime/stream.d.ts +4 -1
  727. package/dist/runtime/stream.js +27 -3
  728. package/dist/runtime/subagents/child.d.ts +55 -7
  729. package/dist/runtime/subagents/child.js +105 -7
  730. package/dist/runtime/subagents/definition.d.ts +31 -26
  731. package/dist/runtime/subagents/definition.js +89 -142
  732. package/dist/runtime/subagents/deliveries.d.ts +71 -0
  733. package/dist/runtime/subagents/deliveries.js +228 -0
  734. package/dist/runtime/subagents/dispatch.d.ts +116 -27
  735. package/dist/runtime/subagents/dispatch.js +213 -142
  736. package/dist/runtime/subagents/limits.d.ts +24 -5
  737. package/dist/runtime/subagents/limits.js +40 -6
  738. package/dist/runtime/subagents/messages.d.ts +95 -0
  739. package/dist/runtime/subagents/messages.js +328 -0
  740. package/dist/runtime/subagents/org-agents.js +2 -1
  741. package/dist/runtime/subagents/preamble.d.ts +4 -4
  742. package/dist/runtime/subagents/preamble.js +9 -7
  743. package/dist/runtime/subagents/progress.d.ts +8 -6
  744. package/dist/runtime/subagents/progress.js +11 -6
  745. package/dist/runtime/subagents/render.d.ts +30 -0
  746. package/dist/runtime/subagents/render.js +53 -0
  747. package/dist/runtime/subagents/roster.d.ts +25 -8
  748. package/dist/runtime/subagents/roster.js +48 -12
  749. package/dist/runtime/subagents/skill-fork.d.ts +4 -3
  750. package/dist/runtime/subagents/skill-fork.js +9 -5
  751. package/dist/runtime/subagents/status.d.ts +14 -0
  752. package/dist/runtime/subagents/status.js +23 -0
  753. package/dist/runtime/subagents/subagents.service.d.ts +9 -6
  754. package/dist/runtime/subagents/subagents.service.js +13 -8
  755. package/dist/runtime/usage-report-jobs.d.ts +88 -0
  756. package/dist/runtime/usage-report-jobs.js +158 -0
  757. package/dist/runtime/usage-report.d.ts +35 -39
  758. package/dist/runtime/usage-report.js +171 -97
  759. package/dist/runtime/waits.d.ts +148 -39
  760. package/dist/runtime/waits.js +426 -112
  761. package/dist/sandbox/jobs.d.ts +40 -13
  762. package/dist/sandbox/jobs.js +57 -20
  763. package/dist/sandbox/leases.d.ts +37 -54
  764. package/dist/sandbox/leases.js +71 -115
  765. package/dist/sandbox/providers.d.ts +34 -7
  766. package/dist/sandbox/providers.js +54 -9
  767. package/dist/sandbox/sandbox-file-reader.d.ts +35 -0
  768. package/dist/sandbox/sandbox-file-reader.js +98 -0
  769. package/dist/sandbox/sandbox.module.d.ts +3 -2
  770. package/dist/sandbox/sandbox.module.js +10 -4
  771. package/dist/sandbox/sandbox.service.d.ts +345 -132
  772. package/dist/sandbox/sandbox.service.js +883 -399
  773. package/dist/sandbox/unreachable.d.ts +30 -0
  774. package/dist/sandbox/unreachable.js +108 -0
  775. package/dist/setup/kernel-checks.d.ts +91 -0
  776. package/dist/setup/kernel-checks.js +295 -0
  777. package/dist/setup/oauth-token-probe.d.ts +47 -0
  778. package/dist/setup/oauth-token-probe.js +108 -0
  779. package/dist/setup/redact-check.d.ts +18 -0
  780. package/dist/setup/redact-check.js +46 -0
  781. package/dist/setup/setup-check-registry.d.ts +86 -0
  782. package/dist/setup/setup-check-registry.js +75 -0
  783. package/dist/setup/setup-checks.controller.d.ts +28 -0
  784. package/dist/setup/setup-checks.controller.js +78 -0
  785. package/dist/setup/setup-checks.schemas.d.ts +38 -0
  786. package/dist/setup/setup-checks.schemas.js +43 -0
  787. package/dist/setup/setup-checks.service.d.ts +144 -0
  788. package/dist/setup/setup-checks.service.js +683 -0
  789. package/dist/setup/setup-guides.controller.d.ts +18 -0
  790. package/dist/setup/setup-guides.controller.js +48 -0
  791. package/dist/setup/setup-guides.schemas.d.ts +10 -0
  792. package/dist/setup/setup-guides.schemas.js +6 -0
  793. package/dist/setup/setup-guides.service.d.ts +126 -0
  794. package/dist/setup/setup-guides.service.js +315 -0
  795. package/dist/setup/setup.module.d.ts +8 -0
  796. package/dist/setup/setup.module.js +31 -0
  797. package/dist/skills/agent-skills.controller.d.ts +48 -0
  798. package/dist/skills/agent-skills.controller.js +131 -0
  799. package/dist/skills/agent-skills.service.d.ts +262 -0
  800. package/dist/skills/agent-skills.service.js +996 -0
  801. package/dist/skills/catalog.d.ts +14 -11
  802. package/dist/skills/catalog.js +32 -50
  803. package/dist/skills/changes.controller.d.ts +12 -22
  804. package/dist/skills/changes.controller.js +27 -56
  805. package/dist/skills/changes.service.d.ts +69 -115
  806. package/dist/skills/changes.service.js +249 -598
  807. package/dist/skills/conversation-catalog.d.ts +53 -0
  808. package/dist/skills/conversation-catalog.js +149 -0
  809. package/dist/skills/invocable.controller.d.ts +1 -1
  810. package/dist/skills/invocable.controller.js +2 -2
  811. package/dist/skills/invocation-keys.d.ts +1 -1
  812. package/dist/skills/invocation-keys.js +1 -1
  813. package/dist/skills/invoke.d.ts +3 -3
  814. package/dist/skills/invoke.js +21 -8
  815. package/dist/skills/package.d.ts +15 -1
  816. package/dist/skills/package.js +14 -1
  817. package/dist/skills/skills.controller.d.ts +32 -6
  818. package/dist/skills/skills.controller.js +64 -11
  819. package/dist/skills/skills.module.js +25 -3
  820. package/dist/skills/skills.schemas.d.ts +44 -0
  821. package/dist/skills/skills.schemas.js +68 -0
  822. package/dist/skills/skills.service.d.ts +123 -26
  823. package/dist/skills/skills.service.js +493 -76
  824. package/dist/skills/usable.d.ts +82 -0
  825. package/dist/skills/usable.js +388 -0
  826. package/dist/themes/render-css.d.ts +13 -0
  827. package/dist/themes/render-css.js +135 -0
  828. package/dist/themes/theme-delivery.service.d.ts +36 -0
  829. package/dist/themes/theme-delivery.service.js +116 -0
  830. package/dist/themes/theme-state.d.ts +116 -0
  831. package/dist/themes/theme-state.js +221 -0
  832. package/dist/themes/theme-usage.d.ts +61 -0
  833. package/dist/themes/theme-usage.js +98 -0
  834. package/dist/themes/themes-public.controller.d.ts +33 -0
  835. package/dist/themes/themes-public.controller.js +98 -0
  836. package/dist/themes/themes.controller.d.ts +13 -0
  837. package/dist/themes/themes.controller.js +38 -0
  838. package/dist/themes/themes.module.d.ts +3 -0
  839. package/dist/themes/themes.module.js +21 -0
  840. package/dist/themes/themes.schemas.d.ts +3 -0
  841. package/dist/themes/themes.schemas.js +2 -0
  842. package/dist/themes/themes.service.d.ts +50 -0
  843. package/dist/themes/themes.service.js +99 -0
  844. package/dist/time-zone.d.ts +5 -0
  845. package/dist/time-zone.js +19 -0
  846. package/dist/tools/admin-connectors.d.ts +69 -0
  847. package/dist/tools/admin-connectors.js +135 -0
  848. package/dist/tools/approvals.controller.js +2 -3
  849. package/dist/tools/approvals.schemas.d.ts +21 -0
  850. package/dist/tools/approvals.schemas.js +15 -0
  851. package/dist/tools/approvals.service.d.ts +26 -2
  852. package/dist/tools/approvals.service.js +44 -5
  853. package/dist/tools/builtin-names.d.ts +104 -0
  854. package/dist/tools/builtin-names.js +164 -0
  855. package/dist/tools/builtins/agent.d.ts +27 -25
  856. package/dist/tools/builtins/agent.js +66 -63
  857. package/dist/tools/builtins/ask-user.d.ts +1 -1
  858. package/dist/tools/builtins/ask-user.js +5 -4
  859. package/dist/tools/builtins/builtin-tools.d.ts +23 -4
  860. package/dist/tools/builtins/builtin-tools.js +78 -12
  861. package/dist/tools/builtins/current-time.d.ts +26 -0
  862. package/dist/tools/builtins/current-time.js +99 -0
  863. package/dist/tools/builtins/handback.d.ts +28 -0
  864. package/dist/tools/builtins/handback.js +53 -0
  865. package/dist/tools/builtins/platform.d.ts +51 -0
  866. package/dist/tools/builtins/platform.js +451 -0
  867. package/dist/tools/builtins/read-tool-output.d.ts +1 -1
  868. package/dist/tools/builtins/read-tool-output.js +2 -2
  869. package/dist/tools/builtins/sandbox/bash.d.ts +5 -5
  870. package/dist/tools/builtins/sandbox/bash.js +291 -39
  871. package/dist/tools/builtins/sandbox/common.d.ts +135 -36
  872. package/dist/tools/builtins/sandbox/common.js +222 -62
  873. package/dist/tools/builtins/sandbox/deliver.d.ts +1 -1
  874. package/dist/tools/builtins/sandbox/deliver.js +19 -16
  875. package/dist/tools/builtins/sandbox/edit.d.ts +1 -1
  876. package/dist/tools/builtins/sandbox/edit.js +64 -50
  877. package/dist/tools/builtins/sandbox/file-state.d.ts +34 -0
  878. package/dist/tools/builtins/sandbox/file-state.js +34 -0
  879. package/dist/tools/builtins/sandbox/glob-match.d.ts +1 -1
  880. package/dist/tools/builtins/sandbox/glob-match.js +1 -1
  881. package/dist/tools/builtins/sandbox/glob.d.ts +1 -1
  882. package/dist/tools/builtins/sandbox/glob.js +17 -12
  883. package/dist/tools/builtins/sandbox/grep.d.ts +7 -4
  884. package/dist/tools/builtins/sandbox/grep.js +153 -34
  885. package/dist/tools/builtins/sandbox/index.d.ts +9 -5
  886. package/dist/tools/builtins/sandbox/index.js +13 -5
  887. package/dist/tools/builtins/sandbox/read.d.ts +2 -2
  888. package/dist/tools/builtins/sandbox/read.js +29 -19
  889. package/dist/tools/builtins/sandbox/task-output.d.ts +79 -0
  890. package/dist/tools/builtins/sandbox/task-output.js +334 -0
  891. package/dist/tools/builtins/sandbox/task-stop.d.ts +10 -0
  892. package/dist/tools/builtins/sandbox/task-stop.js +113 -0
  893. package/dist/tools/builtins/sandbox/write.d.ts +1 -1
  894. package/dist/tools/builtins/sandbox/write.js +51 -44
  895. package/dist/tools/builtins/send-message.d.ts +56 -0
  896. package/dist/tools/builtins/send-message.js +100 -0
  897. package/dist/tools/builtins/skill-load.d.ts +29 -18
  898. package/dist/tools/builtins/skill-load.js +125 -73
  899. package/dist/tools/builtins/tool-search.d.ts +13 -9
  900. package/dist/tools/builtins/tool-search.js +25 -14
  901. package/dist/tools/builtins/web/errors.d.ts +8 -0
  902. package/dist/tools/builtins/web/errors.js +53 -0
  903. package/dist/tools/builtins/web/extract.d.ts +62 -0
  904. package/dist/tools/builtins/web/extract.js +271 -0
  905. package/dist/tools/builtins/web/fetch.d.ts +55 -0
  906. package/dist/tools/builtins/web/fetch.js +175 -0
  907. package/dist/tools/builtins/web/index.d.ts +13 -0
  908. package/dist/tools/builtins/web/index.js +12 -0
  909. package/dist/tools/builtins/web/page-cache.d.ts +25 -0
  910. package/dist/tools/builtins/web/page-cache.js +77 -0
  911. package/dist/tools/builtins/web/search.d.ts +25 -0
  912. package/dist/tools/builtins/web/search.js +210 -0
  913. package/dist/tools/builtins/web/url.d.ts +17 -0
  914. package/dist/tools/builtins/web/url.js +43 -0
  915. package/dist/tools/connector-account-policies.d.ts +51 -0
  916. package/dist/tools/connector-account-policies.js +165 -0
  917. package/dist/tools/connectors.controller.d.ts +74 -9
  918. package/dist/tools/connectors.controller.js +133 -16
  919. package/dist/tools/connectors.schemas.d.ts +27 -0
  920. package/dist/tools/connectors.schemas.js +34 -0
  921. package/dist/tools/connectors.service.d.ts +101 -8
  922. package/dist/tools/connectors.service.js +266 -28
  923. package/dist/tools/credentials.d.ts +23 -0
  924. package/dist/tools/credentials.js +90 -1
  925. package/dist/tools/display-names.d.ts +9 -0
  926. package/dist/tools/display-names.js +24 -0
  927. package/dist/tools/drift.js +5 -5
  928. package/dist/tools/elicitation.js +1 -1
  929. package/dist/tools/extension-tools.controller.d.ts +14 -0
  930. package/dist/tools/extension-tools.controller.js +37 -0
  931. package/dist/tools/info.d.ts +61 -4
  932. package/dist/tools/info.js +119 -33
  933. package/dist/tools/legacy-data.d.ts +34 -0
  934. package/dist/tools/legacy-data.js +76 -0
  935. package/dist/tools/legacy-keys.d.ts +51 -0
  936. package/dist/tools/legacy-keys.js +114 -0
  937. package/dist/tools/naming.d.ts +1 -5
  938. package/dist/tools/naming.js +1 -7
  939. package/dist/tools/oauth/flow-paths.d.ts +1 -1
  940. package/dist/tools/oauth/flow-paths.js +1 -1
  941. package/dist/tools/oauth/flow.js +1 -1
  942. package/dist/tools/oauth/tokens.d.ts +54 -7
  943. package/dist/tools/oauth/tokens.js +87 -17
  944. package/dist/tools/org-tool-switches.d.ts +89 -0
  945. package/dist/tools/org-tool-switches.js +201 -0
  946. package/dist/tools/outputs.js +1 -1
  947. package/dist/tools/pipeline.d.ts +67 -47
  948. package/dist/tools/pipeline.js +319 -380
  949. package/dist/tools/policy.d.ts +30 -23
  950. package/dist/tools/policy.js +142 -64
  951. package/dist/tools/questions.controller.d.ts +1 -1
  952. package/dist/tools/questions.controller.js +1 -1
  953. package/dist/tools/questions.service.d.ts +23 -2
  954. package/dist/tools/questions.service.js +104 -2
  955. package/dist/tools/registry.d.ts +189 -68
  956. package/dist/tools/registry.js +318 -236
  957. package/dist/tools/resources.d.ts +1 -1
  958. package/dist/tools/resources.js +1 -1
  959. package/dist/tools/tools.module.js +31 -3
  960. package/dist/tools/validate.js +1 -1
  961. package/dist/ui/admin-ui.controller.d.ts +56 -0
  962. package/dist/ui/admin-ui.controller.js +192 -0
  963. package/dist/ui/arrangement.d.ts +65 -0
  964. package/dist/ui/arrangement.js +171 -0
  965. package/dist/ui/embed-token.d.ts +2 -2
  966. package/dist/ui/embed-token.js +30 -5
  967. package/dist/ui/registry.d.ts +42 -17
  968. package/dist/ui/registry.js +46 -14
  969. package/dist/ui/slots.controller.d.ts +11 -0
  970. package/dist/ui/slots.controller.js +25 -0
  971. package/dist/ui/ui-stream.d.ts +20 -3
  972. package/dist/ui/ui-stream.js +25 -7
  973. package/dist/ui/ui.schemas.d.ts +70 -0
  974. package/dist/ui/ui.schemas.js +65 -0
  975. package/dist/ui/views.controller.d.ts +35 -49
  976. package/dist/ui/views.controller.js +48 -70
  977. package/dist/ui/views.d.ts +112 -18
  978. package/dist/ui/views.js +254 -47
  979. package/package.json +6 -3
  980. package/src/migrations/0063_tool_keys_claude_code.sql +220 -0
  981. package/src/migrations/0064_account_last_org.sql +7 -0
  982. package/src/migrations/0065_conversation_archive.sql +8 -0
  983. package/src/migrations/0066_extension_display_name.sql +4 -0
  984. package/src/migrations/0067_agent_profiles.sql +20 -0
  985. package/src/migrations/0068_agent_avatar_uploads.sql +7 -0
  986. package/src/migrations/0069_attachments_agent_idx.sql +3 -0
  987. package/src/migrations/0070_background_tasks.sql +37 -0
  988. package/src/migrations/0071_background_tasks_reserve.sql +6 -0
  989. package/src/migrations/0072_background_tasks_stopping.sql +5 -0
  990. package/src/migrations/0073_org_extension_point_defaults.sql +11 -0
  991. package/src/migrations/0074_subagent_tree.sql +50 -0
  992. package/src/migrations/0075_plugin_scope.sql +61 -0
  993. package/src/migrations/0076_skills_created_by_nullable.sql +6 -0
  994. package/src/migrations/0077_scope_requests.sql +52 -0
  995. package/src/migrations/0078_scope_grant_switches.sql +18 -0
  996. package/src/migrations/0079_scope_live_install_switches.sql +19 -0
  997. package/src/migrations/0080_rename_enterprise_admin.sql +18 -0
  998. package/src/migrations/0081_platform_components.sql +129 -0
  999. package/src/migrations/0082_platform_migration.sql +33 -0
  1000. package/src/migrations/0083_plugin_scope_sync_failures.sql +15 -0
  1001. package/src/migrations/0084_org_owned_items.sql +85 -0
  1002. package/src/migrations/0085_agent_templates_phase4.sql +45 -0
  1003. package/src/migrations/0086_org_layering.sql +30 -0
  1004. package/src/migrations/0087_approval_summary.sql +6 -0
  1005. package/src/migrations/0088_environments.sql +80 -0
  1006. package/src/migrations/0089_model_kinds_usage.sql +38 -0
  1007. package/src/migrations/0090_initial_passwords.sql +27 -0
  1008. package/src/migrations/0091_account_time_zone.sql +4 -0
  1009. package/src/migrations/0092_tools_default_on.sql +27 -0
  1010. package/src/migrations/0093_connected_environments.sql +37 -0
  1011. package/src/migrations/0094_environment_paths_idx.sql +7 -0
  1012. package/src/migrations/0095_environment_files_resets.sql +5 -0
  1013. package/src/migrations/0096_environment_demoted_default.sql +18 -0
  1014. package/src/migrations/0097_extension_installs_enabled_at.sql +16 -0
  1015. package/src/migrations/0098_single_provider_running_first.sql +41 -0
  1016. package/src/migrations/0099_channel_connection_guide_ack.sql +6 -0
  1017. package/src/migrations/0100_catalog_files.sql +13 -0
  1018. package/src/migrations/0101_marketplace_icons.sql +32 -0
  1019. package/src/migrations/0102_themes.sql +64 -0
  1020. package/src/migrations/0103_ui_theme_setting.sql +7 -0
  1021. package/src/migrations/0104_connector_tool_account_policies.sql +16 -0
  1022. package/src/migrations/0105_devices_rename.sql +136 -0
  1023. package/src/migrations/0106_setup_guides_v2.sql +10 -0
  1024. package/src/migrations/0107_extension_client_builds.sql +50 -0
  1025. package/src/migrations/0108_question_skipped.sql +6 -0
  1026. package/src/migrations/0109_audit_platform_idx.sql +5 -0
  1027. package/src/migrations/0110_usage_time_idx.sql +8 -0
  1028. package/src/migrations/0111_agent_skill_sharing.sql +22 -0
  1029. package/src/migrations/0112_skill_share_requests.sql +4 -0
  1030. package/dist/catalog/upgrade-targets.d.ts +0 -56
  1031. package/dist/catalog/upgrade-targets.js +0 -90
  1032. package/dist/conversations/sandbox-status.d.ts +0 -24
  1033. package/dist/conversations/sandbox-status.js +0 -52
  1034. package/dist/extensions/org-config.controller.d.ts +0 -24
  1035. package/dist/extensions/org-config.controller.js +0 -62
  1036. package/dist/tools/builtins/sandbox/names.d.ts +0 -7
  1037. package/dist/tools/builtins/sandbox/names.js +0 -20
  1038. package/dist/tools/builtins/skill-write.d.ts +0 -59
  1039. package/dist/tools/builtins/skill-write.js +0 -244
@@ -0,0 +1,876 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
8
+ return function (target, key) { decorator(target, key, paramIndex); }
9
+ };
10
+ // Org agent templates (plugin scope phase 4, spec §15, rulings P4-9 to P4-13): 另存为模板 writes
11
+ // an org row (`agent_templates`, no plugin, a bare `<name>`, version 1) from an agent, the template
12
+ // detail reads any template usable in the org, and the owner org's admins write new versions.
13
+ // Deleting and 可共享 are `OwnedItems`' (the P3 owner rules). No in-process state.
14
+ import { AGENT_TEMPLATE_LIMITS, extensionToolKey, parseAgentTemplate, parseToolKey, } from "@capybara-hq/plugin-sdk";
15
+ import { Inject, Injectable } from "@nestjs/common";
16
+ import { offeredNamed } from "../catalog/component-state.js";
17
+ import { ownerOf, ownersOf } from "../catalog/ownership.js";
18
+ import { ApiError } from "../errors.js";
19
+ import { audit } from "../identity/audit.js";
20
+ import { notifySharedUpdate } from "../inbox/org-notices.js";
21
+ import { KernelDb } from "../infra/database/kernel-db.js";
22
+ import { TransactionHost } from "../infra/database/transaction-host.js";
23
+ import { Transactional } from "../infra/database/transactional.decorator.js";
24
+ import { OrgLock } from "../orgs/org-lock.js";
25
+ import { skillVersionsById } from "../skills/usable.js";
26
+ import { isRemovedBuiltinKey } from "../tools/builtin-names.js";
27
+ import { canonicalJson } from "../tools/canonical-json.js";
28
+ import { ToolRegistry } from "../tools/registry.js";
29
+ import { AgentLookup } from "./agent-lookup.js";
30
+ import { loadTemplates, putTemplateVersionIn, readOwnTemplate, templateTypeOf, templateViewOf, usableTemplates, } from "./templates.js";
31
+ /**
32
+ * Roster names no template may take (ruling T4-R15): `general-purpose`, always the roster's first
33
+ * entry. Claude Code's other built-in types (`Explore`, `Plan`) are capitalized, which the
34
+ * template name rule already refuses.
35
+ */
36
+ export const RESERVED_TEMPLATE_NAMES = new Set(["general-purpose"]);
37
+ const EFFORTS = ["low", "medium", "high", "xhigh", "max"];
38
+ const TOOL_KEY_RE = /^[a-zA-Z0-9_-]{1,64}$/;
39
+ const notFound = () => new ApiError("component.not_found", "Agent template not found");
40
+ const agentNotFound = () => new ApiError("agent.not_found", "Agent not found");
41
+ /**
42
+ * A connector's URL as a template may record it (ruling P4-11): userinfo, query and fragment
43
+ * removed (they may carry credentials). Null when it is no absolute http(s) URL.
44
+ */
45
+ export function sanitizeEndpoint(raw) {
46
+ let u;
47
+ try {
48
+ u = new URL(raw);
49
+ }
50
+ catch {
51
+ return null;
52
+ }
53
+ if (u.protocol !== "https:" && u.protocol !== "http:")
54
+ return null;
55
+ u.username = "";
56
+ u.password = "";
57
+ u.search = "";
58
+ u.hash = "";
59
+ const out = u.toString();
60
+ return out.length <= 2048 ? out : null;
61
+ }
62
+ /** The URL a hand-configured connector's endpoint names: MCP `url`, OpenAPI `specUrl` / `baseUrl`. */
63
+ function endpointUrl(endpoint) {
64
+ if (endpoint === null || typeof endpoint !== "object" || Array.isArray(endpoint))
65
+ return null;
66
+ const e = endpoint;
67
+ for (const k of ["url", "specUrl", "baseUrl"]) {
68
+ if (typeof e[k] === "string")
69
+ return sanitizeEndpoint(e[k]);
70
+ }
71
+ return null;
72
+ }
73
+ /**
74
+ * Validates a template definition the way an `agents/<name>.md` file is (the SDK parser, so the
75
+ * two never drift): the definition minus `instructions` as the frontmatter (JSON is YAML), then
76
+ * the instructions as the body. Problems -> 400 `validation_failed` naming each.
77
+ */
78
+ export function parseTemplateDefinition(definition) {
79
+ const { instructions, ...front } = definition;
80
+ if (typeof instructions !== "string") {
81
+ throw new ApiError("validation_failed", "Invalid agent template: instructions is required", [
82
+ { path: "definition.instructions", message: "instructions must be a string" },
83
+ ]);
84
+ }
85
+ const parsed = parseAgentTemplate(`---\n${JSON.stringify(front)}\n---\n${instructions}`);
86
+ if ("errors" in parsed) {
87
+ throw new ApiError("validation_failed", `Invalid agent template: ${parsed.errors[0] ?? "unknown problem"}`, parsed.errors.map((message) => ({ path: "definition", message })));
88
+ }
89
+ return parsed.template;
90
+ }
91
+ /**
92
+ * Ruling P4-11 on an edit: a `connectors[].needs.endpoint` that carries userinfo, a query or a
93
+ * fragment, or is no http(s) URL of at most 2048 characters, is refused with 400
94
+ * `validation_failed` naming the field and what it carries (an edit is never stripped silently).
95
+ * One that differs only by normalization (a trailing slash, the host's case) is accepted:
96
+ * returns the template with each such endpoint in its canonical {@link sanitizeEndpoint} form.
97
+ */
98
+ export function canonicalEndpoints(template) {
99
+ const details = [];
100
+ const connectors = (template.connectors ?? []).map((c, i) => {
101
+ if (!("needs" in c))
102
+ return c;
103
+ const raw = c.needs.endpoint;
104
+ const clean = sanitizeEndpoint(raw);
105
+ const path = `definition.connectors.${i}.needs.endpoint`;
106
+ if (clean === null) {
107
+ details.push({ path, message: "must be an http(s) URL of at most 2048 characters" });
108
+ return c;
109
+ }
110
+ const u = new URL(raw);
111
+ const carries = [
112
+ ...(u.username !== "" || u.password !== "" ? ["userinfo"] : []),
113
+ ...(u.search !== "" ? ["a query"] : []),
114
+ ...(u.hash !== "" ? ["a fragment"] : []),
115
+ ];
116
+ if (carries.length > 0) {
117
+ details.push({
118
+ path,
119
+ message: `must not carry ${carries.join(", ")} (they may hold credentials); use ${clean}`,
120
+ });
121
+ return c;
122
+ }
123
+ return clean === raw ? c : { ...c, needs: { ...c.needs, endpoint: clean } };
124
+ });
125
+ if (details.length > 0) {
126
+ throw new ApiError("validation_failed", "A connector endpoint in an agent template must be a plain http(s) URL (no userinfo, query or fragment)", details);
127
+ }
128
+ return template.connectors === undefined ? template : { ...template, connectors };
129
+ }
130
+ /**
131
+ * The template an agent is saved as (rulings P4-10, P4-11), with what was left out. Pure reads of
132
+ * the org's state through `db`.
133
+ */
134
+ export async function templateFromAgent(db, orgId, agent, meta,
135
+ /** The extension tools loaded on this replica (a wholly turned-off extension's tools). */
136
+ extensionTools = []) {
137
+ const def = agent.definition;
138
+ const omitted = [];
139
+ const L = AGENT_TEMPLATE_LIMITS;
140
+ const blank = (s) => typeof s !== "string" || s.trim() === "";
141
+ // Model: `modelRef` and `effort` only; every other parameter and the fallback are listed
142
+ const effortParam = def.modelParams?.effort;
143
+ const effort = typeof effortParam === "string" && EFFORTS.includes(effortParam)
144
+ ? effortParam
145
+ : undefined;
146
+ for (const key of Object.keys(def.modelParams ?? {})) {
147
+ if (key === "effort" && effort !== undefined)
148
+ continue;
149
+ omitted.push({ kind: "model_param", name: key, reason: "model_param" });
150
+ }
151
+ if (def.fallback != null) {
152
+ omitted.push({
153
+ kind: "fallback_model",
154
+ name: `${def.fallback.provider}/${def.fallback.model}`,
155
+ reason: "fallback",
156
+ });
157
+ }
158
+ // Tools (tools default-on spec §3): the template turns off what the agent turns off
159
+ // (`disallowedTools`, builtin and extension tool keys; a wholly turned-off extension as all its
160
+ // loaded tools); every connector on for the agent becomes a `connectors` entry
161
+ const disabled = def.disabledTools ?? [];
162
+ const disallowedTools = [];
163
+ const disallow = (key) => {
164
+ if (!TOOL_KEY_RE.test(key) || disallowedTools.includes(key))
165
+ return;
166
+ if (disallowedTools.length >= L.tools) {
167
+ omitted.push({ kind: "tool", name: key, reason: "limit" });
168
+ return;
169
+ }
170
+ disallowedTools.push(key);
171
+ };
172
+ for (const r of disabled) {
173
+ if (r.kind === "builtin")
174
+ disallow(r.name);
175
+ else if (r.kind === "plugin") {
176
+ const names = r.tools === "all"
177
+ ? extensionTools.filter((x) => x.plugin === r.plugin).map((x) => x.name)
178
+ : r.tools;
179
+ for (const n of names)
180
+ disallow(extensionToolKey(r.plugin, n));
181
+ }
182
+ }
183
+ const liveConnectors = await db
184
+ .selectFrom("connectors")
185
+ .select(["id"])
186
+ .where("org_id", "=", orgId)
187
+ .where("status", "=", "active")
188
+ .where("deleted_at", "is", null)
189
+ .orderBy("created_at")
190
+ .orderBy("id")
191
+ .execute();
192
+ const connectorRefs = [];
193
+ for (const c of liveConnectors) {
194
+ const entry = disabled.find((r) => r.kind === "connector" && r.connectorId === c.id);
195
+ if (entry?.tools === "all")
196
+ continue;
197
+ connectorRefs.push({ connectorId: c.id, off: entry === undefined ? [] : entry.tools });
198
+ }
199
+ // builtin / plugin keys stay keys; a connector tool's policy goes to its connector entry by
200
+ // tool name (`policies`), since the key embeds this org's connector slug
201
+ const toolPolicies = {};
202
+ const connectorPolicies = new Map();
203
+ for (const [k, v] of Object.entries(def.toolPolicies ?? {})) {
204
+ // a template only tightens: an agent's `allow` (a connector tool's, decision 2026-11-09)
205
+ // is not carried into it
206
+ if (v === "allow")
207
+ continue;
208
+ // a removed builtin's policy left in a stored definition is not carried
209
+ if (isRemovedBuiltinKey(k))
210
+ continue;
211
+ const parsed = parseToolKey(k);
212
+ if (parsed !== null && parsed.kind !== "connector" && TOOL_KEY_RE.test(k)) {
213
+ toolPolicies[k] = v;
214
+ continue;
215
+ }
216
+ if (parsed?.kind === "connector") {
217
+ const list = connectorPolicies.get(parsed.slug) ?? [];
218
+ list.push({ key: k, tool: parsed.tool, policy: v });
219
+ connectorPolicies.set(parsed.slug, list);
220
+ }
221
+ }
222
+ const usedSlugs = new Set();
223
+ /** The `policies` of the entry of connector `slug` (tool names of at most 128 characters). */
224
+ const policiesOf = (slug) => {
225
+ const list = connectorPolicies.get(slug) ?? [];
226
+ if (list.length === 0)
227
+ return {};
228
+ usedSlugs.add(slug);
229
+ // capped with the entry's tools when it is pushed
230
+ return { policies: Object.fromEntries(list.map((p) => [p.tool, p.policy])) };
231
+ };
232
+ // Skills: ids -> names (pinned -> `skills`, the other selected ones -> `selectedSkills`)
233
+ const pinned = def.skills?.pinned ?? [];
234
+ const selected = def.skills?.orgSkills ?? [];
235
+ const inlineSkillIds = (def.subagents?.inline ?? []).flatMap((t) => t.skills ?? []);
236
+ const byId = await skillVersionsById(db, orgId, [...pinned, ...selected, ...inlineSkillIds]);
237
+ const agentSkillNames = new Map((await db
238
+ .selectFrom("skills")
239
+ .select(["id", "name"])
240
+ .where("org_id", "=", orgId)
241
+ .where("scope", "=", "agent")
242
+ .where("id", "in", ["", ...pinned, ...selected, ...inlineSkillIds])
243
+ .execute()).map((r) => [r.id, r.name]));
244
+ const reportedSkills = new Set();
245
+ const skillName = (id, report) => {
246
+ const s = byId.get(id);
247
+ if (s && s.scope === "org")
248
+ return s.name;
249
+ if (report && !reportedSkills.has(id)) {
250
+ reportedSkills.add(id);
251
+ const own = agentSkillNames.get(id) ?? s?.name;
252
+ omitted.push(own !== undefined
253
+ ? { kind: "skill", name: own, id, reason: "agent_skill" }
254
+ : { kind: "skill", name: id, id, reason: "unavailable" });
255
+ }
256
+ return null;
257
+ };
258
+ const skills = [];
259
+ for (const id of pinned) {
260
+ const n = skillName(id, true);
261
+ if (n !== null && !skills.includes(n) && skills.length < L.skills)
262
+ skills.push(n);
263
+ }
264
+ const selectedSkills = [];
265
+ for (const id of selected) {
266
+ if (pinned.includes(id))
267
+ continue;
268
+ const n = skillName(id, true);
269
+ if (n === null || skills.includes(n) || selectedSkills.includes(n))
270
+ continue;
271
+ if (selectedSkills.length >= L.selectedSkills) {
272
+ omitted.push({ kind: "skill", name: n, id, reason: "limit" });
273
+ continue;
274
+ }
275
+ selectedSkills.push(n);
276
+ }
277
+ // Connectors (P4-11), then the agent's pending connectors as they are
278
+ const connectors = [];
279
+ const pushConnector = (entry, name, id) => {
280
+ if (connectors.length >= L.connectors) {
281
+ omitted.push({ kind: "connector", name, ...(id !== undefined && { id }), reason: "limit" });
282
+ return;
283
+ }
284
+ let c = entry;
285
+ // an entry names at most `connectorTools` tools, its `tools` and its policy keys together
286
+ // (the SDK's limit): policies past that room are listed, never written
287
+ if (c.policies !== undefined) {
288
+ const named = "needs" in c ? c.needs.tools.length : (c.tools?.length ?? 0);
289
+ const valid = Object.entries(c.policies).filter(([tool]) => tool.trim() !== "" && [...tool].length <= 128);
290
+ const room = Math.max(0, L.connectorTools - named);
291
+ for (const [tool] of valid.slice(room)) {
292
+ omitted.push({
293
+ kind: "tool_policy",
294
+ name: tool,
295
+ ...(id !== undefined && { id }),
296
+ reason: "limit",
297
+ });
298
+ }
299
+ const kept = valid.slice(0, room);
300
+ const { policies: _all, ...rest } = c;
301
+ c = kept.length > 0 ? { ...rest, policies: Object.fromEntries(kept) } : rest;
302
+ }
303
+ connectors.push(c);
304
+ };
305
+ const ids = [...new Set(connectorRefs.map((r) => r.connectorId))];
306
+ const rows = ids.length === 0
307
+ ? []
308
+ : await db
309
+ .selectFrom("connectors as c")
310
+ .leftJoin("platform_connector_templates as p", (j) => j.onRef("p.id", "=", "c.platform_template_id").on("p.deleted_at", "is", null))
311
+ .select(["c.id", "c.name", "c.slug", "c.connector", "c.endpoint", "p.id as template_id"])
312
+ .where("c.org_id", "=", orgId)
313
+ .where("c.deleted_at", "is", null)
314
+ .where("c.id", "in", ids)
315
+ .execute();
316
+ const connectorById = new Map(rows.map((r) => [r.id, r]));
317
+ for (const id of ids) {
318
+ const c = connectorById.get(id);
319
+ if (!c) {
320
+ omitted.push({ kind: "connector", name: id, id, reason: "unavailable" });
321
+ continue;
322
+ }
323
+ const off = connectorRefs.find((r) => r.connectorId === id)?.off ?? [];
324
+ // some tools off: the entry names the connector's enabled tools that stay on
325
+ const named = off.length === 0
326
+ ? null
327
+ : (await db
328
+ .selectFrom("connector_tools")
329
+ .select("name")
330
+ .where("connector_id", "=", id)
331
+ .where("status", "=", "enabled")
332
+ .orderBy("name")
333
+ .execute())
334
+ .map((x) => x.name)
335
+ .filter((n) => !off.includes(n))
336
+ .slice(0, L.connectorTools);
337
+ if (c.template_id !== null) {
338
+ // only the platform connector template is recorded, not this connector: creating an agent
339
+ // from the template rebinds the entry to the org's oldest connector made from that
340
+ // template (P4-5 `several`), which may be another one than this
341
+ pushConnector({
342
+ template: c.template_id,
343
+ ...(named !== null && { tools: named }),
344
+ ...policiesOf(c.slug),
345
+ }, c.name, c.id);
346
+ continue;
347
+ }
348
+ if (c.connector !== "mcp" && c.connector !== "openapi") {
349
+ omitted.push({ kind: "connector", name: c.name, id: c.id, reason: "unsupported_protocol" });
350
+ continue;
351
+ }
352
+ const endpoint = endpointUrl(c.endpoint);
353
+ if (endpoint === null) {
354
+ omitted.push({ kind: "connector", name: c.name, id: c.id, reason: "no_endpoint" });
355
+ continue;
356
+ }
357
+ const enabled = named ??
358
+ (await db
359
+ .selectFrom("connector_tools")
360
+ .select("name")
361
+ .where("connector_id", "=", c.id)
362
+ .where("status", "=", "enabled")
363
+ .orderBy("name")
364
+ .execute())
365
+ .map((t) => t.name)
366
+ .slice(0, L.connectorTools);
367
+ pushConnector({
368
+ needs: {
369
+ protocol: c.connector,
370
+ endpoint,
371
+ tools: enabled.filter((t) => t.length <= 128),
372
+ label: [...c.name].slice(0, 80).join(""),
373
+ },
374
+ ...policiesOf(c.slug),
375
+ }, c.name, c.id);
376
+ }
377
+ // a policy of a connector the template does not carry (left out above) cannot go anywhere
378
+ for (const [slug, list] of connectorPolicies) {
379
+ if (usedSlugs.has(slug))
380
+ continue;
381
+ for (const p of list) {
382
+ omitted.push({ kind: "tool_policy", name: p.key, reason: "connector_tool" });
383
+ }
384
+ }
385
+ const pending = def.pendingConnectors;
386
+ for (const p of Array.isArray(pending) ? pending : []) {
387
+ const e = p;
388
+ const pendingPolicies = e.policies !== null && typeof e.policies === "object" && Object.keys(e.policies).length > 0
389
+ ? { policies: { ...e.policies } }
390
+ : {};
391
+ const label = typeof e.label === "string" ? e.label : "";
392
+ if (typeof e.source?.template === "string") {
393
+ pushConnector({
394
+ template: e.source.template,
395
+ ...(Array.isArray(e.tools) && { tools: e.tools }),
396
+ ...pendingPolicies,
397
+ }, label);
398
+ }
399
+ else if (e.source?.needs !== undefined) {
400
+ const n = e.source.needs;
401
+ const endpoint = sanitizeEndpoint(n.endpoint);
402
+ if (endpoint === null) {
403
+ omitted.push({ kind: "connector", name: label, reason: "no_endpoint" });
404
+ continue;
405
+ }
406
+ pushConnector({ needs: { ...n, endpoint }, ...pendingPolicies }, label);
407
+ }
408
+ }
409
+ // Sub-agents: template ids -> types, inline skill ids -> names; org agents are left out
410
+ const sub = def.subagents;
411
+ let subagents;
412
+ if (sub !== undefined) {
413
+ const types = [];
414
+ const inline = [];
415
+ const room = () => types.length + inline.length < L.subagentTypes;
416
+ const found = await loadTemplates(db, orgId, sub.templates ?? []);
417
+ for (const id of sub.templates ?? []) {
418
+ const t = found.get(id);
419
+ if (!t) {
420
+ omitted.push({ kind: "subagent_template", name: id, id, reason: "unavailable" });
421
+ continue;
422
+ }
423
+ const type = templateTypeOf(t.plugin, t.name);
424
+ if (types.includes(type))
425
+ continue;
426
+ if (!room()) {
427
+ omitted.push({ kind: "subagent_template", name: type, id, reason: "limit" });
428
+ continue;
429
+ }
430
+ types.push(type);
431
+ }
432
+ for (const t of sub.inline ?? []) {
433
+ // a template requires both texts non-blank (the SDK rule); the agent's schema does not
434
+ const empty = blank(t.description)
435
+ ? "description"
436
+ : blank(t.instructions)
437
+ ? "instructions"
438
+ : null;
439
+ if (empty !== null) {
440
+ omitted.push({ kind: "subagent_inline", name: t.name, field: empty, reason: "empty_text" });
441
+ continue;
442
+ }
443
+ if (!room()) {
444
+ omitted.push({ kind: "subagent_inline", name: t.name, reason: "limit" });
445
+ continue;
446
+ }
447
+ // no allowlist stays none (all of the agent's tools); a list, even `[]`, is written
448
+ const listed = t.tools ?? [];
449
+ const ownTools = listed.filter((k) => TOOL_KEY_RE.test(k) && parseToolKey(k)?.kind !== "connector");
450
+ // a connector key embeds this org's slug: an allowlist cannot carry it elsewhere
451
+ if (listed.some((k) => parseToolKey(k)?.kind === "connector")) {
452
+ omitted.push({
453
+ kind: "subagent_inline",
454
+ name: t.name,
455
+ field: "tools",
456
+ reason: "connector_tool",
457
+ });
458
+ }
459
+ for (const field of ["disallowedTools", "toolPolicies", "effort", "maxSteps"]) {
460
+ if (t[field] !== undefined) {
461
+ omitted.push({
462
+ kind: "subagent_inline",
463
+ name: t.name,
464
+ field,
465
+ reason: "unsupported_field",
466
+ });
467
+ }
468
+ }
469
+ const inlineSkills = [];
470
+ for (const id of t.skills ?? []) {
471
+ const n = skillName(id, true);
472
+ if (n === null || inlineSkills.includes(n))
473
+ continue;
474
+ if (inlineSkills.length >= L.skills) {
475
+ omitted.push({ kind: "skill", name: n, id, reason: "limit" });
476
+ continue;
477
+ }
478
+ inlineSkills.push(n);
479
+ }
480
+ inline.push({
481
+ name: t.name,
482
+ description: t.description,
483
+ instructions: t.instructions,
484
+ ...(t.tools !== undefined && { tools: [...new Set(ownTools)].slice(0, L.tools) }),
485
+ skills: inlineSkills,
486
+ model: t.model ?? "inherit",
487
+ });
488
+ }
489
+ for (const a of sub.agents ?? []) {
490
+ omitted.push({ kind: "subagent_agent", name: a.as, id: a.agentId, reason: "org_agent" });
491
+ }
492
+ subagents = {
493
+ ...(sub.general !== undefined && { general: sub.general }),
494
+ ...(types.length > 0 && { types }),
495
+ ...(inline.length > 0 && { inline }),
496
+ };
497
+ }
498
+ const quickActions = [];
499
+ for (const q of agent.profile.quickActions) {
500
+ if (blank(q.title) || blank(q.body)) {
501
+ omitted.push({ kind: "quick_action", name: q.title, reason: "empty_text" });
502
+ continue;
503
+ }
504
+ quickActions.push({ title: q.title, body: q.body });
505
+ }
506
+ const template = {
507
+ name: meta.name,
508
+ description: meta.description,
509
+ instructions: def.instructions ?? "",
510
+ ...(disallowedTools.length > 0 && { disallowedTools }),
511
+ ...(Object.keys(toolPolicies).length > 0 && { toolPolicies }),
512
+ model: "standard",
513
+ modelRef: `${def.model.provider}/${def.model.model}`,
514
+ ...(effort !== undefined && { effort }),
515
+ ...(skills.length > 0 && { skills }),
516
+ ...(selectedSkills.length > 0 && { selectedSkills }),
517
+ ...(connectors.length > 0 && { connectors }),
518
+ ...(subagents !== undefined && { subagents }),
519
+ ...(quickActions.length > 0 && { quickActions }),
520
+ ...(def.instructionFiles !== undefined && {
521
+ instructionFiles: def.instructionFiles.map((f) => ({ name: f.name, content: f.content })),
522
+ }),
523
+ };
524
+ // the same rules as a template file: a template that would not load is never written
525
+ return {
526
+ template: parseTemplateDefinition(template),
527
+ omitted,
528
+ };
529
+ }
530
+ /**
531
+ * The org's agent templates beyond the plugin ones (rulings P4-9 to P4-12): 另存为模板, the detail
532
+ * of a usable template and the owner's new versions. Writes run under the org row lock, with
533
+ * `agents.manage` re-checked there.
534
+ */
535
+ let OrgAgentTemplates = class OrgAgentTemplates {
536
+ kdb;
537
+ orgLock;
538
+ agents;
539
+ txHost;
540
+ tools;
541
+ constructor(kdb, orgLock, agents, txHost,
542
+ /** The extension tools loaded here (a wholly turned-off extension saved as its tool keys). */
543
+ tools) {
544
+ this.kdb = kdb;
545
+ this.orgLock = orgLock;
546
+ this.agents = agents;
547
+ this.txHost = txHost;
548
+ this.tools = tools;
549
+ }
550
+ get db() {
551
+ return this.kdb.db;
552
+ }
553
+ /**
554
+ * 另存为模板 (ruling P4-9): the org's live agent `agentId` (any one: an org admin may edit every
555
+ * agent of the org) saved as the org template `name` (version 1, `plugin_name` null), mapped
556
+ * by {@link templateFromAgent}. The bare name must be free in the org (rule 10): a usable
557
+ * template of that type, one of the org's own rows of that name, or a live platform template
558
+ * the org created under that name -> 409 `agent_template.name_taken` naming its owner (details
559
+ * `[{ owner, templateId }]`). Audits `agent_template.created`.
560
+ */
561
+ async saveAs(orgId, actor, agentId, meta, actorTokenId, auditDetail) {
562
+ const t = this.db;
563
+ await this.orgLock.lockAndAuthorize(orgId, actor, "agents.manage");
564
+ const live = await t
565
+ .selectFrom("agents")
566
+ .select("id")
567
+ .where("id", "=", agentId)
568
+ .where("org_id", "=", orgId)
569
+ .where("deleted_at", "is", null)
570
+ .executeTakeFirst();
571
+ if (!live)
572
+ throw agentNotFound();
573
+ const agent = await this.agents.view(agentId);
574
+ await this.assertNameFree(orgId, meta.name);
575
+ const { template, omitted } = await templateFromAgent(t, orgId, agent, meta, this.tools.extensionToolSpecs().map((x) => ({ plugin: x.plugin, name: x.spec.name })));
576
+ const put = await putTemplateVersionIn(t, { orgId, plugin: null, catalogItemId: null, catalogVersion: null, sourceFormat: "capybara" }, template);
577
+ await audit(t, {
578
+ actorAccountId: actor,
579
+ ...(actorTokenId !== undefined && { actorTokenId }),
580
+ orgId,
581
+ action: "agent_template.created",
582
+ target: put.id,
583
+ detail: {
584
+ name: template.name,
585
+ fromAgent: agentId,
586
+ omitted: omitted.length,
587
+ ...auditDetail,
588
+ },
589
+ });
590
+ return { template: await this.detail(orgId, put.id), omitted };
591
+ }
592
+ /**
593
+ * Rule 10 for a new org template named `name` (a bare type): refused for a reserved roster name
594
+ * (details `[{ reserved: true }]`), and while the org's usable set has that type, the org has a
595
+ * live row of that name without a plugin (an unusable copy too: the live-name index), a
596
+ * plugin-less platform template of that name is offered to the org (ruling P2-3's alignment),
597
+ * or the platform has a live template the org created under that name (promotion would clash).
598
+ */
599
+ async assertNameFree(orgId, name) {
600
+ const t = this.db;
601
+ const clash = (owner, templateId) => {
602
+ throw new ApiError("agent_template.name_taken", owner.kind === "platform"
603
+ ? `An agent template named ${name} is already used in this organization (the platform's)`
604
+ : owner.orgId === orgId
605
+ ? `An agent template named ${name} already exists in this organization`
606
+ : `An agent template named ${name} is already used in this organization (from organization ${owner.name})`, [{ owner, templateId }]);
607
+ };
608
+ if (RESERVED_TEMPLATE_NAMES.has(name)) {
609
+ throw new ApiError("agent_template.name_taken", `${name} is a built-in sub-agent type; choose another name`, [{ reserved: true }]);
610
+ }
611
+ const own = await t
612
+ .selectFrom("agent_templates")
613
+ .select("id")
614
+ .where("org_id", "=", orgId)
615
+ .where("plugin_name", "is", null)
616
+ .where("name", "=", name)
617
+ .where("deleted_at", "is", null)
618
+ .executeTakeFirst();
619
+ const self = ownerOf(orgId, await ownersOf(t, [orgId]));
620
+ if (own)
621
+ clash(self, own.id);
622
+ const usable = (await usableTemplates(t, orgId)).find((u) => templateTypeOf(u.plugin, u.name) === name);
623
+ if (usable)
624
+ clash(await this.ownerOfRow(orgId, usable), usable.id);
625
+ // offered to the org but not on (a switch away, as ruling P2-3 for skills): switching it on
626
+ // later would put the name in the org twice
627
+ const offered = (await offeredNamed(t, orgId, "agent_template", name)).find((c) => c.plugin === null);
628
+ if (offered) {
629
+ const ids = offered.ownerOrgId === null ? [] : [offered.ownerOrgId];
630
+ clash(ownerOf(offered.ownerOrgId, await ownersOf(t, ids)), offered.id);
631
+ }
632
+ const origin = await t
633
+ .selectFrom("platform_agent_templates")
634
+ .select(["id", "owner_org_id"])
635
+ .where("origin_org_id", "=", orgId)
636
+ .where("plugin_name", "is", null)
637
+ .where("name", "=", name)
638
+ .where("deleted_at", "is", null)
639
+ .executeTakeFirst();
640
+ if (origin) {
641
+ const ids = origin.owner_org_id === null ? [] : [origin.owner_org_id];
642
+ clash(ownerOf(origin.owner_org_id, await ownersOf(t, ids)), origin.id);
643
+ }
644
+ }
645
+ /**
646
+ * A template usable in the org by id ({@link loadTemplates}: an org row, a linked copy, a
647
+ * platform template on in the org), or the org's own template whatever its switch, with its
648
+ * definition, owner and the org's flags. Otherwise -> 404 `component.not_found`.
649
+ */
650
+ async detail(orgId, id) {
651
+ const own = await this.ownRow(orgId, id, false);
652
+ // the owner opens its own template even while it is switched off in its own org (a promoted
653
+ // one whose platform row the org switched off is not in its usable set)
654
+ const inSet = (await loadTemplates(this.db, orgId, [id])).get(id);
655
+ const t = inSet ?? (own && (await this.ownServed(own)));
656
+ if (!t)
657
+ throw notFound();
658
+ let linked = [];
659
+ if (t.origin === "platform" && !t.ownedCopy && t.id === t.platformTemplateId) {
660
+ linked = (await this.db
661
+ .selectFrom("agent_templates")
662
+ .select("id")
663
+ .where("org_id", "=", orgId)
664
+ .where("deleted_at", "is", null)
665
+ .where("pinned_version", "is", null)
666
+ .where("platform_template_id", "=", t.id)
667
+ .orderBy("id")
668
+ .execute()).map((r) => r.id);
669
+ }
670
+ return {
671
+ ...templateViewOf(t, linked),
672
+ definition: t.template,
673
+ owner: own
674
+ ? ownerOf(orgId, await ownersOf(this.db, [orgId]))
675
+ : await this.ownerOfRow(orgId, t),
676
+ owned: own !== undefined,
677
+ shareable: own?.shareable ?? false,
678
+ promoted: own !== undefined && own.link !== null,
679
+ usable: inSet !== undefined,
680
+ };
681
+ }
682
+ /**
683
+ * A new version of the org's own template `id` (ruling P4-12; `agents.manage` re-checked under
684
+ * the org row lock): `definition` is validated like a template file and keeps its name;
685
+ * `expectedVersion` must be the version the editor read (else 409
686
+ * `agent_template.version_conflict`). An unshared template gets a new version of its org row; a
687
+ * promoted one a new version of its platform row (ruling P3-4), which the org row then serves
688
+ * (ruling P3-43), and the orgs using it are told (`shared_item_updated`). An unchanged
689
+ * definition writes nothing. Not the org's own -> 409 `catalog.not_owned`; missing -> 404.
690
+ * Agents created earlier are never touched. Audits `agent_template.updated`.
691
+ */
692
+ async update(orgId, actor, id, body, actorTokenId, auditDetail) {
693
+ const t = this.db;
694
+ await this.orgLock.lockAndAuthorize(orgId, actor, "agents.manage");
695
+ const row = await this.ownRow(orgId, id, true);
696
+ if (!row)
697
+ throw await this.notOwnedOrMissing(orgId, id);
698
+ const template = canonicalEndpoints(parseTemplateDefinition(body.definition));
699
+ if (template.name !== row.name) {
700
+ throw new ApiError("validation_failed", "The name of an agent template cannot change", [
701
+ { path: "definition.name", message: `must stay ${row.name}` },
702
+ ]);
703
+ }
704
+ const conflict = (now) => new ApiError("agent_template.version_conflict", `The agent template was changed by someone else (now version ${now}, expected ${body.expectedVersion}); reload it and apply your changes again`);
705
+ if (row.link === null) {
706
+ if (row.current_version !== body.expectedVersion)
707
+ throw conflict(row.current_version);
708
+ const put = await putTemplateVersionIn(t, {
709
+ orgId,
710
+ plugin: null,
711
+ catalogItemId: null,
712
+ catalogVersion: null,
713
+ sourceFormat: "capybara",
714
+ }, template);
715
+ if (put.changed) {
716
+ await audit(t, {
717
+ actorAccountId: actor,
718
+ ...(actorTokenId !== undefined && { actorTokenId }),
719
+ orgId,
720
+ action: "agent_template.updated",
721
+ target: id,
722
+ detail: { name: row.name, from: row.current_version, to: put.version, ...auditDetail },
723
+ });
724
+ }
725
+ return this.detail(orgId, id);
726
+ }
727
+ const p = await t
728
+ .selectFrom("platform_agent_templates as p")
729
+ .innerJoin("platform_agent_template_versions as v", (j) => j.onRef("v.template_id", "=", "p.id").onRef("v.version", "=", "p.current_version"))
730
+ .select(["p.current_version", "v.definition", "v.source_format"])
731
+ .where("p.id", "=", row.link)
732
+ .where("p.deleted_at", "is", null)
733
+ .forUpdate("p")
734
+ .executeTakeFirst();
735
+ if (!p)
736
+ throw notFound();
737
+ if (p.current_version !== body.expectedVersion)
738
+ throw conflict(p.current_version);
739
+ if (canonicalJson(p.definition) === canonicalJson(template))
740
+ return this.detail(orgId, id);
741
+ const to = p.current_version + 1;
742
+ await t
743
+ .updateTable("platform_agent_templates")
744
+ .set({ current_version: to, description: template.description, updated_at: new Date() })
745
+ .where("id", "=", row.link)
746
+ .execute();
747
+ await t
748
+ .insertInto("platform_agent_template_versions")
749
+ .values({
750
+ template_id: row.link,
751
+ version: to,
752
+ definition: JSON.stringify(template),
753
+ // an org template has no file: only its parsed definition is stored
754
+ object_prefix: null,
755
+ catalog_version: null,
756
+ source_format: p.source_format,
757
+ created_by: actor,
758
+ })
759
+ .execute();
760
+ await notifySharedUpdate(t, { kind: "agent_template", id: row.link }, { name: row.name, from: String(p.current_version), to: String(to) });
761
+ await audit(t, {
762
+ actorAccountId: actor,
763
+ ...(actorTokenId !== undefined && { actorTokenId }),
764
+ orgId,
765
+ action: "agent_template.updated",
766
+ target: id,
767
+ detail: { name: row.name, platformId: row.link, from: p.current_version, to, ...auditDetail },
768
+ });
769
+ return this.detail(orgId, id);
770
+ }
771
+ /**
772
+ * The org's own template `id` ({@link readOwnTemplate}, the predicate `OwnedItems` shares), or
773
+ * undefined: another org's, a plugin's, or a copy of a platform template it does not own.
774
+ */
775
+ async ownRow(orgId, id, forUpdate) {
776
+ const r = await readOwnTemplate(this.db, orgId, id, forUpdate);
777
+ return r !== undefined && "link" in r ? r : undefined;
778
+ }
779
+ /**
780
+ * What the org's own template serves, read directly (its usable-set entry is missing while the
781
+ * org switched its promoted template off): the platform row's current version when it is newer
782
+ * than the org row's (ruling P3-43), else the org row's.
783
+ */
784
+ async ownServed(own) {
785
+ const db = this.db;
786
+ const platform = own.link === null
787
+ ? undefined
788
+ : await db
789
+ .selectFrom("platform_agent_templates as p")
790
+ .innerJoin("platform_agent_template_versions as v", (j) => j.onRef("v.template_id", "=", "p.id").onRef("v.version", "=", "p.current_version"))
791
+ .select(["p.current_version", "v.definition", "v.source_format"])
792
+ .where("p.id", "=", own.link)
793
+ .executeTakeFirst();
794
+ const row = platform !== undefined && platform.current_version !== own.current_version
795
+ ? platform
796
+ : await db
797
+ .selectFrom("agent_template_versions")
798
+ .select(["version as current_version", "definition", "source_format"])
799
+ .where("template_id", "=", own.id)
800
+ .where("version", "=", own.current_version)
801
+ .executeTakeFirst();
802
+ if (!row)
803
+ return undefined;
804
+ return {
805
+ id: own.id,
806
+ name: own.name,
807
+ plugin: null,
808
+ version: row.current_version,
809
+ template: row.definition,
810
+ sourceFormat: row.source_format,
811
+ catalogItemId: null,
812
+ catalogVersion: null,
813
+ origin: "org",
814
+ };
815
+ }
816
+ /** 409 `catalog.not_owned` for a template the org has but does not own, else 404. */
817
+ async notOwnedOrMissing(orgId, id) {
818
+ const t = (await loadTemplates(this.db, orgId, [id])).get(id);
819
+ if (!t)
820
+ return notFound();
821
+ return new ApiError("catalog.not_owned", `${t.name} is not this organization's own agent template; only its owner can change it`);
822
+ }
823
+ /**
824
+ * The owner of a usable template the org does not own itself: a platform template's (or a
825
+ * linked copy's) `owner_org_id`, a plugin template's catalog item owner, else the platform.
826
+ */
827
+ async ownerOfRow(orgId, t) {
828
+ const db = this.db;
829
+ let ownerOrgId = null;
830
+ if (t.platformTemplateId !== undefined || t.ownedCopy) {
831
+ const pid = t.platformTemplateId ??
832
+ (await db
833
+ .selectFrom("agent_templates")
834
+ .select("platform_template_id")
835
+ .where("id", "=", t.id)
836
+ .executeTakeFirst())?.platform_template_id ??
837
+ null;
838
+ if (pid !== null) {
839
+ ownerOrgId =
840
+ (await db
841
+ .selectFrom("platform_agent_templates")
842
+ .select("owner_org_id")
843
+ .where("id", "=", pid)
844
+ .executeTakeFirst())?.owner_org_id ?? null;
845
+ }
846
+ }
847
+ else if (t.catalogItemId !== null) {
848
+ ownerOrgId =
849
+ (await db
850
+ .selectFrom("catalog_items")
851
+ .select("owner_org_id")
852
+ .where("id", "=", t.catalogItemId)
853
+ .executeTakeFirst())?.owner_org_id ?? null;
854
+ }
855
+ else if (t.plugin === null) {
856
+ // an org row without a plugin is the org's own
857
+ ownerOrgId = orgId;
858
+ }
859
+ return ownerOf(ownerOrgId, await ownersOf(db, ownerOrgId === null ? [] : [ownerOrgId]));
860
+ }
861
+ };
862
+ __decorate([
863
+ Transactional()
864
+ ], OrgAgentTemplates.prototype, "saveAs", null);
865
+ __decorate([
866
+ Transactional()
867
+ ], OrgAgentTemplates.prototype, "update", null);
868
+ OrgAgentTemplates = __decorate([
869
+ Injectable(),
870
+ __param(0, Inject(KernelDb)),
871
+ __param(1, Inject(OrgLock)),
872
+ __param(2, Inject(AgentLookup)),
873
+ __param(3, Inject(TransactionHost)),
874
+ __param(4, Inject(ToolRegistry))
875
+ ], OrgAgentTemplates);
876
+ export { OrgAgentTemplates };