@capybara-hq/kernel 0.1.0-rc.4 → 0.1.0-rc.6

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 (534) hide show
  1. package/bootstrap.json +61 -5
  2. package/dist/admin/admin.controller.d.ts +51 -14
  3. package/dist/admin/admin.controller.js +60 -19
  4. package/dist/admin/extensions.controller.d.ts +16 -2
  5. package/dist/admin/extensions.controller.js +26 -6
  6. package/dist/admin/setup-lock.d.ts +1 -1
  7. package/dist/admin/setup-lock.js +1 -1
  8. package/dist/admin/setup.controller.d.ts +1 -1
  9. package/dist/admin/setup.controller.js +1 -1
  10. package/dist/admin/setup.service.d.ts +4 -4
  11. package/dist/admin/setup.service.js +8 -8
  12. package/dist/agents/agent-lookup.d.ts +16 -0
  13. package/dist/agents/agent-lookup.js +11 -0
  14. package/dist/agents/agents.controller.d.ts +76 -1
  15. package/dist/agents/agents.controller.js +90 -11
  16. package/dist/agents/agents.module.d.ts +4 -1
  17. package/dist/agents/agents.module.js +32 -6
  18. package/dist/agents/agents.service.d.ts +54 -23
  19. package/dist/agents/agents.service.js +180 -76
  20. package/dist/agents/definition.d.ts +49 -0
  21. package/dist/agents/definition.js +45 -0
  22. package/dist/agents/from-template.d.ts +106 -0
  23. package/dist/agents/from-template.js +649 -0
  24. package/dist/agents/from-template.service.d.ts +60 -0
  25. package/dist/agents/from-template.service.js +161 -0
  26. package/dist/agents/models.controller.d.ts +34 -5
  27. package/dist/agents/models.controller.js +50 -6
  28. package/dist/agents/org-templates.d.ts +176 -0
  29. package/dist/agents/org-templates.js +827 -0
  30. package/dist/agents/pending-connector-requests.d.ts +77 -0
  31. package/dist/agents/pending-connector-requests.js +215 -0
  32. package/dist/agents/pending-connectors.controller.d.ts +39 -0
  33. package/dist/agents/pending-connectors.controller.js +91 -0
  34. package/dist/agents/pending-connectors.service.d.ts +62 -0
  35. package/dist/agents/pending-connectors.service.js +282 -0
  36. package/dist/agents/readiness.controller.d.ts +5 -5
  37. package/dist/agents/readiness.controller.js +6 -6
  38. package/dist/agents/templates.controller.d.ts +86 -5
  39. package/dist/agents/templates.controller.js +171 -7
  40. package/dist/agents/templates.d.ts +127 -23
  41. package/dist/agents/templates.js +475 -52
  42. package/dist/background/background.module.js +8 -1
  43. package/dist/background/finish.d.ts +3 -2
  44. package/dist/background/launch-lock.d.ts +4 -3
  45. package/dist/background/launch-lock.js +4 -3
  46. package/dist/background/poll.job.d.ts +9 -6
  47. package/dist/background/poll.job.js +30 -22
  48. package/dist/background/session.d.ts +13 -2
  49. package/dist/background/session.js +13 -0
  50. package/dist/background/stop.d.ts +12 -6
  51. package/dist/background/stop.js +57 -39
  52. package/dist/background/store.d.ts +18 -6
  53. package/dist/background/store.js +12 -6
  54. package/dist/background/tasks.service.d.ts +15 -5
  55. package/dist/background/tasks.service.js +42 -17
  56. package/dist/background/wake-rules.d.ts +27 -18
  57. package/dist/background/wake-rules.js +52 -22
  58. package/dist/background/wake.d.ts +13 -11
  59. package/dist/background/wake.js +20 -14
  60. package/dist/catalog/admin-catalog.controller.d.ts +129 -30
  61. package/dist/catalog/admin-catalog.controller.js +213 -42
  62. package/dist/catalog/catalog-content.d.ts +58 -32
  63. package/dist/catalog/catalog-content.js +34 -8
  64. package/dist/catalog/catalog-import.module.d.ts +7 -0
  65. package/dist/catalog/catalog-import.module.js +60 -0
  66. package/dist/catalog/catalog-items.d.ts +111 -7
  67. package/dist/catalog/catalog-items.js +279 -13
  68. package/dist/catalog/catalog-scope.service.d.ts +260 -0
  69. package/dist/catalog/catalog-scope.service.js +1116 -0
  70. package/dist/catalog/catalog.module.d.ts +7 -9
  71. package/dist/catalog/catalog.module.js +41 -31
  72. package/dist/catalog/catalog.service.d.ts +101 -29
  73. package/dist/catalog/catalog.service.js +104 -106
  74. package/dist/catalog/cli.d.ts +11 -1
  75. package/dist/catalog/cli.js +26 -1
  76. package/dist/catalog/component-promotion.d.ts +96 -0
  77. package/dist/catalog/component-promotion.js +395 -0
  78. package/dist/catalog/component-scope.controller.d.ts +152 -0
  79. package/dist/catalog/component-scope.controller.js +287 -0
  80. package/dist/catalog/component-scope.service.d.ts +303 -0
  81. package/dist/catalog/component-scope.service.js +936 -0
  82. package/dist/catalog/component-state.d.ts +174 -0
  83. package/dist/catalog/component-state.js +437 -0
  84. package/dist/catalog/job-ids.d.ts +30 -0
  85. package/dist/catalog/job-ids.js +25 -0
  86. package/dist/catalog/marketplace-fetch.d.ts +1 -1
  87. package/dist/catalog/marketplaces.controller.d.ts +22 -5
  88. package/dist/catalog/marketplaces.controller.js +56 -7
  89. package/dist/catalog/marketplaces.service.d.ts +54 -14
  90. package/dist/catalog/marketplaces.service.js +71 -22
  91. package/dist/catalog/org-catalog.controller.d.ts +125 -34
  92. package/dist/catalog/org-catalog.controller.js +181 -65
  93. package/dist/catalog/org-catalog.service.d.ts +65 -33
  94. package/dist/catalog/org-catalog.service.js +324 -157
  95. package/dist/catalog/org-extension-switch.d.ts +41 -0
  96. package/dist/catalog/org-extension-switch.js +115 -0
  97. package/dist/catalog/org-extension.controller.d.ts +119 -0
  98. package/dist/catalog/org-extension.controller.js +266 -0
  99. package/dist/catalog/org-plugin-uploads.controller.d.ts +98 -0
  100. package/dist/catalog/org-plugin-uploads.controller.js +213 -0
  101. package/dist/catalog/org-plugin-uploads.d.ts +63 -0
  102. package/dist/catalog/org-plugin-uploads.js +116 -0
  103. package/dist/catalog/owned-items.d.ts +184 -0
  104. package/dist/catalog/owned-items.js +789 -0
  105. package/dist/catalog/owned-plugin-cleanup.d.ts +56 -0
  106. package/dist/catalog/owned-plugin-cleanup.js +194 -0
  107. package/dist/catalog/ownership.d.ts +172 -0
  108. package/dist/catalog/ownership.js +326 -0
  109. package/dist/catalog/platform-components.d.ts +221 -0
  110. package/dist/catalog/platform-components.js +761 -0
  111. package/dist/catalog/platform-migration.d.ts +115 -0
  112. package/dist/catalog/platform-migration.js +582 -0
  113. package/dist/catalog/plugin-import.d.ts +178 -34
  114. package/dist/catalog/plugin-import.js +622 -82
  115. package/dist/catalog/plugin-install.d.ts +185 -41
  116. package/dist/catalog/plugin-install.js +758 -126
  117. package/dist/catalog/plugin-upgrade.d.ts +260 -225
  118. package/dist/catalog/plugin-upgrade.js +1147 -1136
  119. package/dist/catalog/request-rules.d.ts +65 -0
  120. package/dist/catalog/request-rules.js +217 -0
  121. package/dist/catalog/requests.service.d.ts +193 -118
  122. package/dist/catalog/requests.service.js +526 -343
  123. package/dist/catalog/reserved-names.d.ts +8 -0
  124. package/dist/catalog/reserved-names.js +42 -0
  125. package/dist/catalog/scope-orgs.d.ts +21 -0
  126. package/dist/catalog/scope-orgs.js +67 -0
  127. package/dist/catalog/scope-state.d.ts +35 -0
  128. package/dist/catalog/scope-state.js +87 -0
  129. package/dist/catalog/scope-sync-workers.d.ts +7 -0
  130. package/dist/catalog/scope-sync-workers.js +29 -0
  131. package/dist/catalog/scope-sync.d.ts +176 -0
  132. package/dist/catalog/scope-sync.js +576 -0
  133. package/dist/catalog/scope.d.ts +42 -0
  134. package/dist/catalog/scope.js +42 -0
  135. package/dist/catalog/unshare.d.ts +22 -0
  136. package/dist/catalog/unshare.js +118 -0
  137. package/dist/channels/actions.js +1 -0
  138. package/dist/channels/cards.js +20 -2
  139. package/dist/channels/channels.module.js +2 -0
  140. package/dist/channels/inbound.d.ts +9 -1
  141. package/dist/channels/inbound.js +67 -5
  142. package/dist/channels/phrases.d.ts +35 -0
  143. package/dist/channels/phrases.js +29 -0
  144. package/dist/config/docs.js +3 -1
  145. package/dist/config/schema.d.ts +10 -2
  146. package/dist/config/schema.js +70 -22
  147. package/dist/conversations/access.d.ts +6 -4
  148. package/dist/conversations/access.js +27 -5
  149. package/dist/conversations/agent-tree.d.ts +46 -0
  150. package/dist/conversations/agent-tree.js +92 -0
  151. package/dist/conversations/conversations.controller.d.ts +43 -18
  152. package/dist/conversations/conversations.controller.js +79 -38
  153. package/dist/conversations/conversations.module.d.ts +1 -1
  154. package/dist/conversations/conversations.module.js +7 -7
  155. package/dist/conversations/conversations.service.d.ts +73 -15
  156. package/dist/conversations/conversations.service.js +115 -35
  157. package/dist/conversations/environment-status.d.ts +24 -0
  158. package/dist/conversations/environment-status.js +71 -0
  159. package/dist/conversations/event-log.d.ts +20 -5
  160. package/dist/conversations/event-log.js +60 -0
  161. package/dist/conversations/events.d.ts +84 -2
  162. package/dist/conversations/events.js +91 -17
  163. package/dist/conversations/queue.service.d.ts +1 -1
  164. package/dist/conversations/queue.service.js +5 -0
  165. package/dist/conversations/titles.d.ts +5 -3
  166. package/dist/conversations/titles.js +21 -8
  167. package/dist/conversations/tree.d.ts +17 -0
  168. package/dist/conversations/tree.js +42 -0
  169. package/dist/ctx/create-ctx.d.ts +20 -1
  170. package/dist/ctx/create-ctx.js +38 -7
  171. package/dist/db/kernel-schema.d.ts +386 -18
  172. package/dist/environments/access.d.ts +41 -0
  173. package/dist/environments/access.js +77 -0
  174. package/dist/environments/conversation-environments.d.ts +61 -0
  175. package/dist/environments/conversation-environments.js +170 -0
  176. package/dist/environments/dto.d.ts +25 -0
  177. package/dist/environments/dto.js +12 -0
  178. package/dist/environments/environments.controller.d.ts +33 -0
  179. package/dist/environments/environments.controller.js +110 -0
  180. package/dist/environments/environments.module.d.ts +8 -0
  181. package/dist/environments/environments.module.js +27 -0
  182. package/dist/environments/environments.service.d.ts +153 -0
  183. package/dist/environments/environments.service.js +541 -0
  184. package/dist/environments/legacy-cleanup.job.d.ts +34 -0
  185. package/dist/environments/legacy-cleanup.job.js +141 -0
  186. package/dist/errors.d.ts +85 -2
  187. package/dist/errors.js +85 -2
  188. package/dist/evals/reconstruct.d.ts +18 -9
  189. package/dist/evals/reconstruct.js +26 -7
  190. package/dist/evals/run-replay.d.ts +4 -2
  191. package/dist/evals/run-replay.js +20 -6
  192. package/dist/evals/runs.service.d.ts +2 -1
  193. package/dist/evals/runs.service.js +13 -12
  194. package/dist/evals/step-replay.d.ts +4 -6
  195. package/dist/evals/step-replay.js +4 -3
  196. package/dist/evals/trajectory.service.d.ts +8 -3
  197. package/dist/evals/trajectory.service.js +26 -14
  198. package/dist/evals/worker.d.ts +5 -5
  199. package/dist/evals/worker.js +9 -3
  200. package/dist/extensions/admin-ops.d.ts +36 -10
  201. package/dist/extensions/admin-ops.js +65 -42
  202. package/dist/extensions/admin-view.d.ts +37 -10
  203. package/dist/extensions/admin-view.js +103 -20
  204. package/dist/extensions/bootstrap.d.ts +17 -4
  205. package/dist/extensions/bootstrap.js +70 -9
  206. package/dist/extensions/cli.d.ts +12 -0
  207. package/dist/extensions/cli.js +11 -2
  208. package/dist/extensions/config-hash.d.ts +10 -0
  209. package/dist/extensions/config-hash.js +38 -0
  210. package/dist/extensions/deployment-config.d.ts +28 -5
  211. package/dist/extensions/deployment-config.js +48 -7
  212. package/dist/extensions/effective-config.d.ts +127 -0
  213. package/dist/extensions/effective-config.js +368 -0
  214. package/dist/extensions/extensions.module.js +11 -11
  215. package/dist/extensions/hooks.d.ts +37 -4
  216. package/dist/extensions/hooks.js +82 -16
  217. package/dist/extensions/host.d.ts +24 -10
  218. package/dist/extensions/host.js +49 -54
  219. package/dist/extensions/installs.d.ts +20 -8
  220. package/dist/extensions/installs.js +37 -15
  221. package/dist/extensions/org-config.d.ts +75 -6
  222. package/dist/extensions/org-config.js +184 -32
  223. package/dist/extensions/org-levels.d.ts +37 -0
  224. package/dist/extensions/org-levels.js +71 -0
  225. package/dist/extensions/org-overrides.d.ts +151 -0
  226. package/dist/extensions/org-overrides.js +524 -0
  227. package/dist/extensions/permission-view.d.ts +16 -4
  228. package/dist/extensions/permission-view.js +4 -4
  229. package/dist/extensions/plugin-items.d.ts +21 -0
  230. package/dist/extensions/plugin-items.js +42 -0
  231. package/dist/extensions/point-defaults.d.ts +12 -5
  232. package/dist/extensions/point-defaults.js +37 -9
  233. package/dist/extensions/resolve.d.ts +5 -1
  234. package/dist/extensions/resolve.js +15 -2
  235. package/dist/extensions/state.module.d.ts +9 -0
  236. package/dist/extensions/state.module.js +38 -0
  237. package/dist/files/previewers.d.ts +8 -1
  238. package/dist/files/previewers.js +35 -6
  239. package/dist/http/api.module.js +25 -3
  240. package/dist/http/app.d.ts +11 -2
  241. package/dist/http/app.js +31 -5
  242. package/dist/http/plugin-dispatch.d.ts +4 -1
  243. package/dist/http/plugin-dispatch.js +14 -2
  244. package/dist/identity/accounts.d.ts +29 -29
  245. package/dist/identity/accounts.js +47 -47
  246. package/dist/identity/audit.d.ts +2 -1
  247. package/dist/identity/auth.guard.d.ts +13 -5
  248. package/dist/identity/auth.guard.js +26 -9
  249. package/dist/identity/identity.module.d.ts +1 -1
  250. package/dist/identity/identity.module.js +4 -4
  251. package/dist/identity/me.controller.js +1 -1
  252. package/dist/identity/principal.d.ts +3 -3
  253. package/dist/identity/principal.js +3 -3
  254. package/dist/identity/settings.d.ts +22 -11
  255. package/dist/identity/settings.js +53 -18
  256. package/dist/identity/{enterprise-admin.d.ts → super-admin.d.ts} +5 -5
  257. package/dist/identity/{enterprise-admin.js → super-admin.js} +24 -24
  258. package/dist/inbox/inbox.module.d.ts +4 -1
  259. package/dist/inbox/inbox.module.js +7 -3
  260. package/dist/inbox/inbox.service.d.ts +62 -3
  261. package/dist/inbox/inbox.service.js +74 -4
  262. package/dist/inbox/org-notices.d.ts +63 -0
  263. package/dist/inbox/org-notices.js +91 -0
  264. package/dist/inbox/platform-inbox.controller.d.ts +23 -0
  265. package/dist/inbox/platform-inbox.controller.js +58 -0
  266. package/dist/inbox/platform-inbox.service.d.ts +151 -0
  267. package/dist/inbox/platform-inbox.service.js +263 -0
  268. package/dist/inbox/platform-notices.d.ts +19 -0
  269. package/dist/inbox/platform-notices.js +9 -0
  270. package/dist/index.d.ts +1 -1
  271. package/dist/index.js +1 -1
  272. package/dist/infra/cli/kernel-cli.module.js +9 -1
  273. package/dist/infra/config/kernel-config.service.js +24 -1
  274. package/dist/infra/database/xact-lock.d.ts +1 -1
  275. package/dist/infra/database/xact-lock.js +1 -1
  276. package/dist/infra/events/kernel-events.d.ts +19 -2
  277. package/dist/infra/queue/add-job-once.d.ts +14 -0
  278. package/dist/infra/queue/add-job-once.js +16 -0
  279. package/dist/kernel.module.js +6 -0
  280. package/dist/lifecycle/kernel-lifecycle.d.ts +1 -1
  281. package/dist/lifecycle/kernel-lifecycle.js +4 -4
  282. package/dist/models/embeddings.d.ts +82 -0
  283. package/dist/models/embeddings.js +326 -0
  284. package/dist/models/enablement.controller.d.ts +40 -0
  285. package/dist/models/enablement.controller.js +74 -0
  286. package/dist/models/enablement.d.ts +99 -0
  287. package/dist/models/enablement.js +263 -0
  288. package/dist/models/models.module.d.ts +5 -1
  289. package/dist/models/models.module.js +16 -4
  290. package/dist/models/prices.d.ts +5 -5
  291. package/dist/models/prices.js +4 -4
  292. package/dist/models/purposes.controller.d.ts +6 -4
  293. package/dist/models/purposes.controller.js +13 -7
  294. package/dist/models/purposes.d.ts +37 -12
  295. package/dist/models/purposes.js +63 -17
  296. package/dist/orgs/directory-sync.d.ts +14 -5
  297. package/dist/orgs/directory-sync.js +41 -17
  298. package/dist/orgs/offboarding.d.ts +9 -7
  299. package/dist/orgs/offboarding.js +28 -17
  300. package/dist/orgs/org-lock.d.ts +5 -0
  301. package/dist/orgs/org-lock.js +13 -0
  302. package/dist/orgs/org.guard.d.ts +10 -0
  303. package/dist/orgs/org.guard.js +43 -32
  304. package/dist/orgs/orgs.module.js +3 -0
  305. package/dist/orgs/orgs.service.d.ts +20 -7
  306. package/dist/orgs/orgs.service.js +32 -12
  307. package/dist/orgs/roles.d.ts +1 -1
  308. package/dist/orgs/roles.js +5 -1
  309. package/dist/orgs/settings.controller.d.ts +1 -1
  310. package/dist/orgs/settings.service.d.ts +15 -3
  311. package/dist/orgs/settings.service.js +6 -2
  312. package/dist/overrides.d.ts +3 -0
  313. package/dist/overrides.js +2 -0
  314. package/dist/platform/actor.d.ts +48 -0
  315. package/dist/platform/actor.js +100 -0
  316. package/dist/platform/agent-docs.d.ts +18 -0
  317. package/dist/platform/agent-docs.js +59 -0
  318. package/dist/platform/availability.d.ts +14 -0
  319. package/dist/platform/availability.js +43 -0
  320. package/dist/platform/errors.d.ts +11 -0
  321. package/dist/platform/errors.js +26 -0
  322. package/dist/platform/exclusions.d.ts +12 -0
  323. package/dist/platform/exclusions.js +1405 -0
  324. package/dist/platform/method.d.ts +6 -0
  325. package/dist/platform/method.js +15 -0
  326. package/dist/platform/operation.d.ts +92 -0
  327. package/dist/platform/operation.js +35 -0
  328. package/dist/platform/ops/agent-templates.ops.d.ts +14 -0
  329. package/dist/platform/ops/agent-templates.ops.js +92 -0
  330. package/dist/platform/ops/agents.ops.d.ts +19 -0
  331. package/dist/platform/ops/agents.ops.js +294 -0
  332. package/dist/platform/ops/connectors.ops.d.ts +15 -0
  333. package/dist/platform/ops/connectors.ops.js +126 -0
  334. package/dist/platform/ops/errors.d.ts +11 -0
  335. package/dist/platform/ops/errors.js +22 -0
  336. package/dist/platform/ops/extensions.ops.d.ts +19 -0
  337. package/dist/platform/ops/extensions.ops.js +116 -0
  338. package/dist/platform/ops/marketplaces.ops.d.ts +16 -0
  339. package/dist/platform/ops/marketplaces.ops.js +157 -0
  340. package/dist/platform/ops/paging.d.ts +14 -0
  341. package/dist/platform/ops/paging.js +20 -0
  342. package/dist/platform/ops/platform.ops.d.ts +23 -0
  343. package/dist/platform/ops/platform.ops.js +158 -0
  344. package/dist/platform/ops/plugins.ops.d.ts +33 -0
  345. package/dist/platform/ops/plugins.ops.js +377 -0
  346. package/dist/platform/ops/requests.ops.d.ts +14 -0
  347. package/dist/platform/ops/requests.ops.js +153 -0
  348. package/dist/platform/ops/role.d.ts +4 -0
  349. package/dist/platform/ops/role.js +10 -0
  350. package/dist/platform/ops/skills.ops.d.ts +13 -0
  351. package/dist/platform/ops/skills.ops.js +98 -0
  352. package/dist/platform/ops/summary.d.ts +10 -0
  353. package/dist/platform/ops/summary.js +18 -0
  354. package/dist/platform/platform-ops.module.d.ts +7 -0
  355. package/dist/platform/platform-ops.module.js +55 -0
  356. package/dist/platform/platform.module.d.ts +8 -0
  357. package/dist/platform/platform.module.js +25 -0
  358. package/dist/platform/redact-orgs.d.ts +7 -0
  359. package/dist/platform/redact-orgs.js +52 -0
  360. package/dist/platform/registry.d.ts +30 -0
  361. package/dist/platform/registry.js +111 -0
  362. package/dist/roles/worker-role.d.ts +6 -4
  363. package/dist/roles/worker-role.js +14 -7
  364. package/dist/roles/worker.module.d.ts +1 -1
  365. package/dist/roles/worker.module.js +9 -1
  366. package/dist/runtime/context/build.d.ts +6 -4
  367. package/dist/runtime/context/build.js +26 -7
  368. package/dist/runtime/context/claude-tools.d.ts +2 -1
  369. package/dist/runtime/context/claude-tools.js +5 -4
  370. package/dist/runtime/context/compaction.js +9 -0
  371. package/dist/runtime/context/reminders.d.ts +2 -0
  372. package/dist/runtime/context/reminders.js +2 -0
  373. package/dist/runtime/context/skills.js +9 -2
  374. package/dist/runtime/context/tool-changes.d.ts +27 -0
  375. package/dist/runtime/context/tool-changes.js +60 -0
  376. package/dist/runtime/hook-calls.d.ts +8 -1
  377. package/dist/runtime/hook-calls.js +40 -7
  378. package/dist/runtime/langgraph-loop.d.ts +3 -1
  379. package/dist/runtime/langgraph-loop.js +35 -17
  380. package/dist/runtime/loop.d.ts +32 -4
  381. package/dist/runtime/maintenance.d.ts +7 -4
  382. package/dist/runtime/maintenance.js +23 -8
  383. package/dist/runtime/model-call.d.ts +38 -11
  384. package/dist/runtime/model-call.js +97 -24
  385. package/dist/runtime/providers.d.ts +146 -32
  386. package/dist/runtime/providers.js +321 -67
  387. package/dist/runtime/run-control.d.ts +11 -1
  388. package/dist/runtime/run-control.js +12 -0
  389. package/dist/runtime/run-drafts.d.ts +85 -0
  390. package/dist/runtime/run-drafts.js +230 -0
  391. package/dist/runtime/run-jobs.d.ts +3 -5
  392. package/dist/runtime/run-jobs.js +3 -7
  393. package/dist/runtime/run-queue.d.ts +37 -3
  394. package/dist/runtime/run-queue.js +188 -11
  395. package/dist/runtime/run-worker.d.ts +12 -6
  396. package/dist/runtime/run-worker.js +58 -35
  397. package/dist/runtime/runtime.module.js +3 -0
  398. package/dist/runtime/step-log.d.ts +9 -4
  399. package/dist/runtime/step-log.js +8 -5
  400. package/dist/runtime/stream.controller.d.ts +23 -1
  401. package/dist/runtime/stream.controller.js +60 -3
  402. package/dist/runtime/stream.d.ts +4 -1
  403. package/dist/runtime/stream.js +27 -3
  404. package/dist/runtime/subagents/child.d.ts +55 -7
  405. package/dist/runtime/subagents/child.js +105 -7
  406. package/dist/runtime/subagents/definition.d.ts +12 -3
  407. package/dist/runtime/subagents/definition.js +46 -32
  408. package/dist/runtime/subagents/deliveries.d.ts +71 -0
  409. package/dist/runtime/subagents/deliveries.js +228 -0
  410. package/dist/runtime/subagents/dispatch.d.ts +115 -26
  411. package/dist/runtime/subagents/dispatch.js +212 -141
  412. package/dist/runtime/subagents/limits.d.ts +24 -5
  413. package/dist/runtime/subagents/limits.js +40 -6
  414. package/dist/runtime/subagents/messages.d.ts +95 -0
  415. package/dist/runtime/subagents/messages.js +328 -0
  416. package/dist/runtime/subagents/preamble.d.ts +4 -4
  417. package/dist/runtime/subagents/preamble.js +9 -7
  418. package/dist/runtime/subagents/progress.d.ts +8 -6
  419. package/dist/runtime/subagents/progress.js +11 -6
  420. package/dist/runtime/subagents/render.d.ts +30 -0
  421. package/dist/runtime/subagents/render.js +53 -0
  422. package/dist/runtime/subagents/roster.d.ts +24 -7
  423. package/dist/runtime/subagents/roster.js +47 -11
  424. package/dist/runtime/subagents/skill-fork.d.ts +3 -2
  425. package/dist/runtime/subagents/skill-fork.js +8 -4
  426. package/dist/runtime/subagents/status.d.ts +14 -0
  427. package/dist/runtime/subagents/status.js +23 -0
  428. package/dist/runtime/subagents/subagents.service.d.ts +7 -4
  429. package/dist/runtime/subagents/subagents.service.js +11 -6
  430. package/dist/runtime/usage-report-jobs.d.ts +88 -0
  431. package/dist/runtime/usage-report-jobs.js +158 -0
  432. package/dist/runtime/usage-report.d.ts +33 -38
  433. package/dist/runtime/usage-report.js +169 -96
  434. package/dist/runtime/waits.d.ts +140 -37
  435. package/dist/runtime/waits.js +394 -106
  436. package/dist/sandbox/jobs.d.ts +40 -13
  437. package/dist/sandbox/jobs.js +57 -20
  438. package/dist/sandbox/leases.d.ts +37 -54
  439. package/dist/sandbox/leases.js +71 -115
  440. package/dist/sandbox/providers.d.ts +2 -2
  441. package/dist/sandbox/providers.js +1 -1
  442. package/dist/sandbox/sandbox.module.d.ts +3 -2
  443. package/dist/sandbox/sandbox.module.js +4 -3
  444. package/dist/sandbox/sandbox.service.d.ts +229 -134
  445. package/dist/sandbox/sandbox.service.js +630 -409
  446. package/dist/skills/catalog.d.ts +3 -2
  447. package/dist/skills/catalog.js +21 -43
  448. package/dist/skills/changes.controller.d.ts +7 -0
  449. package/dist/skills/changes.controller.js +19 -1
  450. package/dist/skills/invoke.js +8 -3
  451. package/dist/skills/package.d.ts +20 -1
  452. package/dist/skills/package.js +28 -1
  453. package/dist/skills/skills.controller.d.ts +39 -4
  454. package/dist/skills/skills.controller.js +88 -10
  455. package/dist/skills/skills.module.js +10 -1
  456. package/dist/skills/skills.service.d.ts +106 -26
  457. package/dist/skills/skills.service.js +421 -75
  458. package/dist/skills/usable.d.ts +81 -0
  459. package/dist/skills/usable.js +379 -0
  460. package/dist/tools/approvals.service.d.ts +20 -2
  461. package/dist/tools/approvals.service.js +23 -4
  462. package/dist/tools/builtin-names.d.ts +21 -5
  463. package/dist/tools/builtin-names.js +30 -5
  464. package/dist/tools/builtins/agent.d.ts +23 -21
  465. package/dist/tools/builtins/agent.js +62 -55
  466. package/dist/tools/builtins/builtin-tools.d.ts +6 -2
  467. package/dist/tools/builtins/builtin-tools.js +37 -12
  468. package/dist/tools/builtins/handback.d.ts +28 -0
  469. package/dist/tools/builtins/handback.js +53 -0
  470. package/dist/tools/builtins/platform.d.ts +34 -0
  471. package/dist/tools/builtins/platform.js +362 -0
  472. package/dist/tools/builtins/sandbox/bash.js +13 -3
  473. package/dist/tools/builtins/sandbox/common.d.ts +43 -24
  474. package/dist/tools/builtins/sandbox/common.js +80 -45
  475. package/dist/tools/builtins/sandbox/edit.js +2 -2
  476. package/dist/tools/builtins/sandbox/glob.js +2 -2
  477. package/dist/tools/builtins/sandbox/grep.js +2 -4
  478. package/dist/tools/builtins/sandbox/index.d.ts +1 -1
  479. package/dist/tools/builtins/sandbox/index.js +1 -1
  480. package/dist/tools/builtins/sandbox/read.js +1 -1
  481. package/dist/tools/builtins/sandbox/task-output.d.ts +14 -3
  482. package/dist/tools/builtins/sandbox/task-output.js +30 -5
  483. package/dist/tools/builtins/sandbox/task-stop.js +2 -1
  484. package/dist/tools/builtins/sandbox/write.js +2 -2
  485. package/dist/tools/builtins/send-message.d.ts +56 -0
  486. package/dist/tools/builtins/send-message.js +100 -0
  487. package/dist/tools/builtins/skill-load.d.ts +22 -14
  488. package/dist/tools/builtins/skill-load.js +86 -57
  489. package/dist/tools/builtins/skill-write.js +1 -1
  490. package/dist/tools/builtins/web/extract.js +5 -1
  491. package/dist/tools/builtins/web/fetch.js +1 -0
  492. package/dist/tools/builtins/web/search.js +1 -0
  493. package/dist/tools/connectors.controller.d.ts +10 -0
  494. package/dist/tools/connectors.controller.js +12 -0
  495. package/dist/tools/connectors.service.d.ts +46 -5
  496. package/dist/tools/connectors.service.js +94 -15
  497. package/dist/tools/extension-tools.controller.d.ts +14 -0
  498. package/dist/tools/extension-tools.controller.js +37 -0
  499. package/dist/tools/info.d.ts +42 -1
  500. package/dist/tools/info.js +64 -1
  501. package/dist/tools/org-tool-switches.d.ts +74 -0
  502. package/dist/tools/org-tool-switches.js +184 -0
  503. package/dist/tools/pipeline.d.ts +46 -40
  504. package/dist/tools/pipeline.js +193 -364
  505. package/dist/tools/policy.d.ts +1 -1
  506. package/dist/tools/policy.js +36 -16
  507. package/dist/tools/registry.d.ts +98 -5
  508. package/dist/tools/registry.js +87 -9
  509. package/dist/tools/tools.module.js +12 -2
  510. package/dist/ui/views.d.ts +2 -1
  511. package/dist/ui/views.js +17 -3
  512. package/package.json +3 -3
  513. package/src/migrations/0074_subagent_tree.sql +50 -0
  514. package/src/migrations/0075_plugin_scope.sql +61 -0
  515. package/src/migrations/0076_skills_created_by_nullable.sql +6 -0
  516. package/src/migrations/0077_scope_requests.sql +52 -0
  517. package/src/migrations/0078_scope_grant_switches.sql +18 -0
  518. package/src/migrations/0079_scope_live_install_switches.sql +19 -0
  519. package/src/migrations/0080_rename_enterprise_admin.sql +18 -0
  520. package/src/migrations/0081_platform_components.sql +129 -0
  521. package/src/migrations/0082_platform_migration.sql +33 -0
  522. package/src/migrations/0083_plugin_scope_sync_failures.sql +15 -0
  523. package/src/migrations/0084_org_owned_items.sql +85 -0
  524. package/src/migrations/0085_agent_templates_phase4.sql +45 -0
  525. package/src/migrations/0086_org_layering.sql +30 -0
  526. package/src/migrations/0087_approval_summary.sql +6 -0
  527. package/src/migrations/0088_environments.sql +80 -0
  528. package/src/migrations/0089_model_kinds_usage.sql +38 -0
  529. package/dist/catalog/upgrade-targets.d.ts +0 -56
  530. package/dist/catalog/upgrade-targets.js +0 -90
  531. package/dist/conversations/sandbox-status.d.ts +0 -24
  532. package/dist/conversations/sandbox-status.js +0 -52
  533. package/dist/extensions/org-config.controller.d.ts +0 -32
  534. package/dist/extensions/org-config.controller.js +0 -70
@@ -0,0 +1,649 @@
1
+ // Creating an agent from a template (plugin scope phase 4, rulings P4-3…P4-6, P4-8): what a
2
+ // template carries into a new agent, resolved against the org's state at preview and again at
3
+ // create. Pure resolution over read snapshots: the database reads go through `db`, the replica's
4
+ // extension state and the model lookups through `opts`; nothing is written here.
5
+ import { createHash } from "node:crypto";
6
+ import { connectorToolKey, extensionToolKey, parseToolKey, SKILL_ENTRY_FILE, validateParams, } from "@capybara-hq/plugin-sdk";
7
+ import { connectorTemplateState } from "../catalog/component-state.js";
8
+ import { invocationOf, PINNED_SKILLS_LIMITS } from "../skills/catalog.js";
9
+ import { usableSkillVersions } from "../skills/usable.js";
10
+ import { CONTROL_OR_HIDDEN_RE } from "../text.js";
11
+ import { AGENT_TOOL, BASH_COMPANION_TOOLS, BUILTIN, BUILTIN_TOOL_NAMES, DEFAULT_AGENT_TOOLS, } from "../tools/builtin-names.js";
12
+ import { canonicalJson } from "../tools/canonical-json.js";
13
+ import { AgentDefinitionSchema, SUBAGENT_NAME_RE, SUBAGENT_ROSTER_MAX, } from "./definition.js";
14
+ import { INSTRUCTION_FILE_LIMITS, INSTRUCTION_FILE_NAME_RE, joinInstructionFiles, } from "./instruction-files.js";
15
+ import { sanitizeEndpoint } from "./org-templates.js";
16
+ import { PROFILE_LIMITS, ProfileInputSchema } from "./profile.js";
17
+ import { templateTypeOf, usableTemplates } from "./templates.js";
18
+ /** `provider/model` → a model ref; null when malformed. */
19
+ function parseModelRef(s) {
20
+ const i = s.indexOf("/");
21
+ if (i <= 0 || i === s.length - 1)
22
+ return null;
23
+ return { provider: s.slice(0, i), model: s.slice(i + 1) };
24
+ }
25
+ /** P4-4: `modelRef` when usable, else the tier's purpose, else the org's default chat model. */
26
+ async function autoModel(t, opts) {
27
+ const fromRef = t.modelRef === undefined ? null : parseModelRef(t.modelRef);
28
+ if (fromRef !== null) {
29
+ const decl = await opts.resolveModel(fromRef);
30
+ if (decl !== null)
31
+ return { ref: fromRef, params: {}, source: "modelRef", decl };
32
+ }
33
+ const tier = t.model ?? "inherit";
34
+ if (tier !== "inherit") {
35
+ const target = await opts.purpose(`subagent_${tier}`);
36
+ if (target !== null) {
37
+ const decl = await opts.resolveModel(target.model);
38
+ if (decl !== null) {
39
+ return { ref: target.model, params: { ...target.params }, source: "tier", decl };
40
+ }
41
+ }
42
+ }
43
+ const def = await opts.defaultModel();
44
+ if (def === null)
45
+ return null;
46
+ const decl = await opts.resolveModel(def);
47
+ return decl === null ? null : { ref: def, params: {}, source: "default", decl };
48
+ }
49
+ /** A template `effort` on a choice: the model parameter when declared and valid (P4-4). */
50
+ function withEffort(c, effort) {
51
+ if (c === null)
52
+ return null;
53
+ const params = { ...c.params };
54
+ if (effort !== undefined) {
55
+ const decl = c.decl.find((p) => p.standard === "effort");
56
+ if (decl !== undefined && validateParams([decl], { [decl.key]: effort }).ok) {
57
+ params[decl.key] = effort;
58
+ }
59
+ }
60
+ return { ref: c.ref, params, source: c.source };
61
+ }
62
+ /**
63
+ * `s` cut to `max` UTF-16 units (what the kernel's zod schemas count), never splitting a
64
+ * surrogate pair.
65
+ */
66
+ export function cutUtf16(s, max) {
67
+ if (s.length <= max)
68
+ return s;
69
+ let out = s.slice(0, max);
70
+ const last = out.charCodeAt(out.length - 1);
71
+ if (last >= 0xd800 && last <= 0xdbff)
72
+ out = out.slice(0, -1);
73
+ return out;
74
+ }
75
+ /** A usable skill by name: `<plugin>:<name>`, or a bare name preferring the template's plugin. */
76
+ function skillByName(skills, ref, ownPlugin) {
77
+ const i = ref.indexOf(":");
78
+ const found = i < 0
79
+ ? skills.filter((s) => s.name === ref)
80
+ : skills.filter((s) => s.name === ref.slice(i + 1) && s.plugin === ref.slice(0, i));
81
+ const rank = (s) => (ownPlugin !== null && s.plugin === ownPlugin ? 0 : 1);
82
+ return [...found].sort((a, b) => rank(a) - rank(b) || (a.id < b.id ? -1 : a.id > b.id ? 1 : 0))[0];
83
+ }
84
+ /**
85
+ * Whether the org may see platform connector template `row`: usable (on) or offered in the org,
86
+ * owned by it, or one it has made connectors from (they stay its own, also after the template is
87
+ * removed). Anything else is not the org's to know about.
88
+ */
89
+ async function visibleConnectorTemplate(db, orgId, row) {
90
+ if (row.owner_org_id === orgId)
91
+ return true;
92
+ if ((await connectorTemplateState(db, orgId, row.id)) !== "absent")
93
+ return true;
94
+ const made = await db
95
+ .selectFrom("connectors")
96
+ .select("id")
97
+ .where("org_id", "=", orgId)
98
+ .where("platform_template_id", "=", row.id)
99
+ .where("deleted_at", "is", null)
100
+ .executeTakeFirst();
101
+ return made !== undefined;
102
+ }
103
+ /**
104
+ * The platform connector template a `{ template }` entry names: `<plugin>:<id>` by its plugin's
105
+ * catalog item; a bare `<id>` of the template's own plugin; otherwise a platform connector template
106
+ * id (what 另存为模板 writes, P4-11). Only templates the org may see count
107
+ * ({@link visibleConnectorTemplate}): one it may not is not found, so its name never reaches the
108
+ * preview. A live row wins; a soft-deleted one (`deleted`) still names the org connectors made
109
+ * from it, but nothing new can be made from it.
110
+ */
111
+ async function connectorTemplateOf(db, orgId, ref, own) {
112
+ const base = db
113
+ .selectFrom("platform_connector_templates as p")
114
+ .innerJoin("catalog_items as c", "c.id", "p.catalog_item_id")
115
+ .select(["p.id", "p.file", "p.owner_org_id", "p.deleted_at", "c.deleted_at as item_deleted_at"])
116
+ // live first, then the most recently created
117
+ .orderBy((eb) => eb.case().when("p.deleted_at", "is", null).then(0).else(1).end())
118
+ .orderBy("p.created_at", "desc");
119
+ const firstVisible = async (rows) => {
120
+ for (const r of rows)
121
+ if (await visibleConnectorTemplate(db, orgId, r))
122
+ return r;
123
+ return undefined;
124
+ };
125
+ const i = ref.indexOf(":");
126
+ let row;
127
+ if (i > 0) {
128
+ row = await firstVisible(await base
129
+ .where("c.name", "=", ref.slice(0, i))
130
+ .where("p.template_id", "=", ref.slice(i + 1))
131
+ .execute());
132
+ }
133
+ else {
134
+ if (own.catalogItemId !== null) {
135
+ row = await firstVisible(await base
136
+ .where("p.catalog_item_id", "=", own.catalogItemId)
137
+ .where("p.template_id", "=", ref)
138
+ .execute());
139
+ }
140
+ if (row === undefined && own.plugin !== null) {
141
+ row = await firstVisible(await base.where("c.name", "=", own.plugin).where("p.template_id", "=", ref).execute());
142
+ }
143
+ row ??= await firstVisible(await base.where("p.id", "=", ref).execute());
144
+ }
145
+ if (row === undefined)
146
+ return null;
147
+ return {
148
+ id: row.id,
149
+ file: row.file,
150
+ deleted: row.deleted_at !== null || row.item_deleted_at !== null,
151
+ };
152
+ }
153
+ /** The org's live connectors made from platform connector template `id`, oldest first. */
154
+ async function connectorsFrom(db, orgId, id) {
155
+ const rows = await db
156
+ .selectFrom("connectors")
157
+ .select(["id", "name", "slug"])
158
+ .where("org_id", "=", orgId)
159
+ .where("platform_template_id", "=", id)
160
+ .where("deleted_at", "is", null)
161
+ .orderBy("created_at")
162
+ .orderBy("id")
163
+ .execute();
164
+ if (rows.length === 0)
165
+ return [];
166
+ const tools = await db
167
+ .selectFrom("connector_tools")
168
+ .select(["connector_id", "name"])
169
+ .where("connector_id", "in", rows.map((r) => r.id))
170
+ .orderBy("name")
171
+ .execute();
172
+ return rows.map((r) => ({
173
+ ...r,
174
+ tools: tools.filter((x) => x.connector_id === r.id).map((x) => x.name),
175
+ }));
176
+ }
177
+ const labelOf = (file, fallback) => {
178
+ const name = file?.displayName?.en;
179
+ return cutUtf16(typeof name === "string" && name.trim() !== "" ? name : fallback, 160);
180
+ };
181
+ /** The pending connector key of the template's `connectors[i]` (stable per entry). */
182
+ export const pendingKeyOf = (i) => `connector-${i + 1}`;
183
+ const RANK = { ask: 1, deny: 2 };
184
+ /**
185
+ * The template's instruction files as the agent accepts them (InstructionFilesSchema): valid,
186
+ * case-insensitively unique names, at most 20, the join within the limit (files past it dropped
187
+ * from the end; a single file too long is cut).
188
+ */
189
+ function instructionFilesOf(t, item, dropped) {
190
+ const out = [];
191
+ const lines = [];
192
+ const seen = new Set();
193
+ for (const f of t.instructionFiles ?? []) {
194
+ if (!INSTRUCTION_FILE_NAME_RE.test(f.name) || CONTROL_OR_HIDDEN_RE.test(f.name)) {
195
+ lines.push({ name: f.name, state: "unavailable", reason: "invalid_name" });
196
+ }
197
+ else if (seen.has(f.name.toLowerCase())) {
198
+ lines.push({ name: f.name, state: "unavailable", reason: "duplicate" });
199
+ }
200
+ else if (out.length >= INSTRUCTION_FILE_LIMITS.count) {
201
+ lines.push({ name: f.name, state: "unavailable", reason: "too_many" });
202
+ }
203
+ else {
204
+ seen.add(f.name.toLowerCase());
205
+ out.push({ name: f.name, content: f.content });
206
+ lines.push({ name: f.name, state: "carried" });
207
+ }
208
+ }
209
+ while (out.length > 1 && joinInstructionFiles(out).length > INSTRUCTION_FILE_LIMITS.joinedChars) {
210
+ const gone = out.pop();
211
+ const line = lines.find((l) => l.name === gone.name && l.state === "carried");
212
+ if (line)
213
+ Object.assign(line, { state: "unavailable", reason: "too_long" });
214
+ }
215
+ const only = out[0];
216
+ if (out.length === 1 && only && only.content.length > INSTRUCTION_FILE_LIMITS.joinedChars) {
217
+ only.content = cutUtf16(only.content, INSTRUCTION_FILE_LIMITS.joinedChars);
218
+ dropped.push("instructionFiles.0.content");
219
+ }
220
+ for (const l of lines)
221
+ item(l.name, l.state, l.reason);
222
+ return out;
223
+ }
224
+ /**
225
+ * Resolves what `row`'s template carries into a new agent of `orgId` (P4-4, P4-5, P4-6). Never
226
+ * throws for the org's state: what does not resolve is listed and left out, and text is cut to
227
+ * the kernel's limits; the result is checked against the agent and profile schemas.
228
+ */
229
+ export async function planFromTemplate(db, orgId, row, opts) {
230
+ const t = row.template;
231
+ const items = [];
232
+ const dropped = [];
233
+ const item = (kind, name, state, reason) => items.push({ kind, name, state, ...(reason !== undefined && { reason }) });
234
+ // prompt, description, quick actions (cut in UTF-16 units, as the kernel schemas count)
235
+ const files = instructionFilesOf(t, (n, s, r) => item("instruction_file", n, s, r), dropped);
236
+ let instructions;
237
+ if (files.length === 0) {
238
+ if ((t.instructionFiles ?? []).length === 0)
239
+ item("instruction_file", "AGENTS.md", "carried");
240
+ instructions = cutUtf16(t.instructions, INSTRUCTION_FILE_LIMITS.joinedChars);
241
+ if (instructions !== t.instructions)
242
+ dropped.push("instructions");
243
+ }
244
+ const fullDescription = typeof t.description === "string" ? t.description : "";
245
+ const description = cutUtf16(fullDescription, PROFILE_LIMITS.description);
246
+ if (description !== fullDescription)
247
+ dropped.push("description");
248
+ if (description !== "")
249
+ item("description", "description", "carried");
250
+ const quickActions = (t.quickActions ?? []).slice(0, PROFILE_LIMITS.quickActions).map((q, i) => {
251
+ const title = cutUtf16(q.title, PROFILE_LIMITS.title);
252
+ const body = cutUtf16(q.body, PROFILE_LIMITS.body);
253
+ if (title !== q.title)
254
+ dropped.push(`quickActions.${i}.title`);
255
+ if (body !== q.body)
256
+ dropped.push(`quickActions.${i}.body`);
257
+ item("quick_action", title, "carried");
258
+ return { title, body };
259
+ });
260
+ if (t.maxSteps !== undefined)
261
+ dropped.push("maxSteps");
262
+ // tools: builtin and plugin keys usable in the org (P4-5)
263
+ const disallowed = new Set(t.disallowedTools ?? []);
264
+ const tools = [];
265
+ const builtinNames = new Set(BUILTIN_TOOL_NAMES);
266
+ if (t.tools === undefined) {
267
+ for (const ref of DEFAULT_AGENT_TOOLS) {
268
+ if (ref.kind === "builtin" && !disallowed.has(ref.name)) {
269
+ tools.push(ref);
270
+ item("tool", ref.name, "carried", "default");
271
+ }
272
+ }
273
+ }
274
+ else {
275
+ for (const key of t.tools) {
276
+ if (disallowed.has(key))
277
+ continue;
278
+ const parsed = parseToolKey(key);
279
+ if (parsed?.kind === "builtin" && builtinNames.has(parsed.name)) {
280
+ tools.push({ kind: "builtin", name: parsed.name });
281
+ item("tool", key, "carried");
282
+ }
283
+ else if (parsed?.kind === "extension") {
284
+ const ok = opts.enabledPlugins.has(parsed.plugin) &&
285
+ opts.pluginTools.some((x) => x.plugin === parsed.plugin && x.name === parsed.tool);
286
+ if (ok) {
287
+ tools.push({ kind: "plugin", plugin: parsed.plugin, name: parsed.tool });
288
+ item("tool", key, "carried");
289
+ }
290
+ else
291
+ item("tool", key, "unavailable", "plugin_unavailable");
292
+ }
293
+ else if (parsed?.kind === "connector") {
294
+ item("tool", key, "unavailable", "connector_key");
295
+ }
296
+ else
297
+ item("tool", key, "unavailable", "unknown_tool");
298
+ }
299
+ }
300
+ // skills: by name against the org's usable skills (P4-5); every name gets its item
301
+ const usable = await usableSkillVersions(db, orgId);
302
+ const orgSkills = [];
303
+ const select = (id) => {
304
+ if (!orgSkills.includes(id))
305
+ orgSkills.push(id);
306
+ };
307
+ const pinned = [];
308
+ let pinnedBytes = 0;
309
+ const preloaded = new Set(t.skills ?? []);
310
+ const skillNames = [...new Set([...(t.skills ?? []), ...(t.selectedSkills ?? [])])];
311
+ for (const name of skillNames) {
312
+ const s = skillByName(usable, name, row.plugin);
313
+ if (!s) {
314
+ item("skill", name, "unavailable", "not_found");
315
+ continue;
316
+ }
317
+ select(s.id);
318
+ if (!preloaded.has(name)) {
319
+ item("skill", name, "carried", pinned.includes(s.id) ? "pinned" : undefined);
320
+ continue;
321
+ }
322
+ if (pinned.includes(s.id)) {
323
+ item("skill", name, "carried", "pinned");
324
+ continue;
325
+ }
326
+ const bytes = s.manifest.files.find((f) => f.path === SKILL_ENTRY_FILE)?.size ?? 0;
327
+ if (!invocationOf(s.manifest).model) {
328
+ item("skill", name, "carried", "not_pinned_manual_only");
329
+ }
330
+ else if (pinned.length >= PINNED_SKILLS_LIMITS.count ||
331
+ pinnedBytes + bytes > PINNED_SKILLS_LIMITS.totalBytes) {
332
+ item("skill", name, "carried", "not_pinned_too_large");
333
+ }
334
+ else {
335
+ pinned.push(s.id);
336
+ pinnedBytes += bytes;
337
+ item("skill", name, "carried", "pinned");
338
+ }
339
+ }
340
+ // connectors (P4-5, P4-6)
341
+ const pendingConnectors = [];
342
+ const slugs = new Map();
343
+ const connectorPolicies = {};
344
+ for (const [i, entry] of (t.connectors ?? []).entries()) {
345
+ const key = pendingKeyOf(i);
346
+ const policies = entry.policies !== undefined && Object.keys(entry.policies).length > 0;
347
+ if ("needs" in entry) {
348
+ // ruling P4-11 on every path into a pending entry, a plugin's template included: no
349
+ // userinfo, query or fragment (they may carry credentials); no http(s) URL, no entry
350
+ const endpoint = sanitizeEndpoint(entry.needs.endpoint);
351
+ if (endpoint === null) {
352
+ item("connector", entry.needs.label, "unavailable", "invalid_endpoint");
353
+ continue;
354
+ }
355
+ pendingConnectors.push({
356
+ key,
357
+ label: entry.needs.label,
358
+ source: { needs: { ...entry.needs, endpoint, tools: [...entry.needs.tools] } },
359
+ tools: [...entry.needs.tools],
360
+ ...(policies && { policies: { ...entry.policies } }),
361
+ });
362
+ item("connector", entry.needs.label, "pending", "needs");
363
+ continue;
364
+ }
365
+ const ct = await connectorTemplateOf(db, orgId, entry.template, {
366
+ plugin: row.plugin,
367
+ catalogItemId: row.catalogItemId,
368
+ });
369
+ if (ct === null) {
370
+ item("connector", entry.template, "unavailable", "template_not_found");
371
+ continue;
372
+ }
373
+ const label = labelOf(ct.file, entry.template);
374
+ const pending = (reason) => {
375
+ // nothing new can be made from a removed connector template
376
+ if (ct.deleted) {
377
+ item("connector", label, "unavailable", "template_not_found");
378
+ return;
379
+ }
380
+ pendingConnectors.push({
381
+ key,
382
+ label,
383
+ source: { template: ct.id },
384
+ ...(entry.tools !== undefined && { tools: [...entry.tools] }),
385
+ ...(policies && { policies: { ...entry.policies } }),
386
+ });
387
+ item("connector", label, "pending", reason);
388
+ };
389
+ const made = await connectorsFrom(db, orgId, ct.id);
390
+ // the entry binds the org's oldest connector made from the template (P4-5 `several`)
391
+ const first = made[0];
392
+ if (first === undefined) {
393
+ pending("no_connector");
394
+ continue;
395
+ }
396
+ let names = entry.tools === undefined ? first.tools : entry.tools;
397
+ if (entry.tools !== undefined) {
398
+ const present = entry.tools.filter((n) => first.tools.includes(n));
399
+ if (present.length === 0) {
400
+ // pending keeps every name: none is dropped
401
+ pending("tools_missing");
402
+ continue;
403
+ }
404
+ for (const n of entry.tools) {
405
+ if (!first.tools.includes(n))
406
+ dropped.push(`connectors.${key}.tools.${n}`);
407
+ }
408
+ names = present;
409
+ }
410
+ // `disallowedTools` naming its tools narrows it (P4-5)
411
+ const allowed = names.filter((n) => !disallowed.has(connectorToolKey(first.slug, n)));
412
+ if (allowed.length === 0) {
413
+ item("connector", first.name, "unavailable", "disallowed");
414
+ continue;
415
+ }
416
+ const narrowed = allowed.length !== names.length;
417
+ const refTools = entry.tools === undefined && !narrowed ? "all" : allowed;
418
+ for (const [name, p] of Object.entries(entry.policies ?? {})) {
419
+ if (!allowed.includes(name)) {
420
+ dropped.push(`connectors.${key}.policies.${name}`);
421
+ continue;
422
+ }
423
+ const k = connectorToolKey(first.slug, name);
424
+ const prev = connectorPolicies[k];
425
+ if (prev === undefined || RANK[p] > RANK[prev])
426
+ connectorPolicies[k] = p;
427
+ }
428
+ const existing = tools.find((r) => r.kind === "connector" && r.connectorId === first.id);
429
+ if (existing === undefined) {
430
+ tools.push({ kind: "connector", connectorId: first.id, tools: refTools });
431
+ }
432
+ else if (existing.tools !== "all") {
433
+ existing.tools =
434
+ refTools === "all" ? "all" : [...new Set([...existing.tools, ...refTools])];
435
+ }
436
+ slugs.set(first.id, first);
437
+ item("connector", first.name, "carried", made.length > 1 ? "several" : undefined);
438
+ }
439
+ // sub-agents (P4-5): types against the org's usable templates, inline definitions
440
+ const sub = t.subagents;
441
+ let subagents;
442
+ if (sub !== undefined) {
443
+ const out = {};
444
+ if (sub.general !== undefined)
445
+ out.general = sub.general;
446
+ let room = SUBAGENT_ROSTER_MAX - (sub.general === false ? 0 : 1);
447
+ const taken = new Set(sub.general === false ? [] : ["general-purpose"]);
448
+ const inlineNames = new Set((sub.inline ?? []).map((x) => x.name));
449
+ const templateIds = [];
450
+ if ((sub.types ?? []).length > 0) {
451
+ const roster = (await usableTemplates(db, orgId)).map((u) => ({
452
+ id: u.id,
453
+ type: templateTypeOf(u.plugin, u.name),
454
+ }));
455
+ for (const type of sub.types ?? []) {
456
+ // a bare name prefers the template's own plugin (`<plugin>:<name>`, as a forked skill's
457
+ // `agent` does: resolveSkillForkType), then the exact type, then a unique `<p>:<name>`
458
+ // (findType); a qualified name only matches exactly
459
+ const own = !type.includes(":") && row.plugin !== null
460
+ ? roster.find((r) => r.type === templateTypeOf(row.plugin, type))
461
+ : undefined;
462
+ const bare = type.includes(":") ? [] : roster.filter((r) => r.type.endsWith(`:${type}`));
463
+ const found = own ?? roster.find((r) => r.type === type) ?? (bare.length === 1 ? bare[0] : undefined);
464
+ if (found === undefined) {
465
+ item("subagent", type, "unavailable", "type_not_found");
466
+ }
467
+ else if (taken.has(found.type) || inlineNames.has(found.type)) {
468
+ item("subagent", type, "unavailable", "type_taken");
469
+ }
470
+ else if (room <= 0 || templateIds.length >= 20) {
471
+ item("subagent", type, "unavailable", "too_many");
472
+ }
473
+ else {
474
+ taken.add(found.type);
475
+ templateIds.push(found.id);
476
+ room -= 1;
477
+ item("subagent", found.type, "carried");
478
+ }
479
+ }
480
+ }
481
+ if (templateIds.length > 0)
482
+ out.templates = templateIds;
483
+ const inline = [];
484
+ for (const x of sub.inline ?? []) {
485
+ if (!SUBAGENT_NAME_RE.test(x.name) || taken.has(x.name)) {
486
+ item("subagent", x.name, "unavailable", "type_taken");
487
+ continue;
488
+ }
489
+ if (room <= 0 || inline.length >= 10) {
490
+ item("subagent", x.name, "unavailable", "too_many");
491
+ continue;
492
+ }
493
+ taken.add(x.name);
494
+ room -= 1;
495
+ const skillIds = [];
496
+ for (const name of x.skills ?? []) {
497
+ const s = skillByName(usable, name, row.plugin);
498
+ if (!s) {
499
+ if (!items.some((i) => i.kind === "skill" && i.name === name)) {
500
+ item("skill", name, "unavailable", "not_found");
501
+ }
502
+ continue;
503
+ }
504
+ if (!skillIds.includes(s.id))
505
+ skillIds.push(s.id);
506
+ if (!orgSkills.includes(s.id)) {
507
+ select(s.id);
508
+ item("skill", name, "carried", "subagent");
509
+ }
510
+ }
511
+ const description = cutUtf16(x.description, 4096);
512
+ const instr = cutUtf16(x.instructions, 100_000);
513
+ if (description !== x.description)
514
+ dropped.push(`subagents.inline.${x.name}.description`);
515
+ if (instr !== x.instructions)
516
+ dropped.push(`subagents.inline.${x.name}.instructions`);
517
+ inline.push({
518
+ name: x.name,
519
+ description,
520
+ instructions: instr,
521
+ // absent = no allowlist (all the agent's tools), `[]` = no tools (ruling P4-T3-8)
522
+ ...(x.tools !== undefined && { tools: [...x.tools] }),
523
+ ...(skillIds.length > 0 && { skills: skillIds.slice(0, 3) }),
524
+ ...(x.model !== undefined && { model: x.model }),
525
+ });
526
+ item("subagent", x.name, "carried");
527
+ }
528
+ if (inline.length > 0)
529
+ out.inline = inline;
530
+ subagents = out;
531
+ // a roster needs the `Agent` tool to be offered (ruling P4-T3-5), unless the template
532
+ // disallows it
533
+ const describes = templateIds.length > 0 || inline.length > 0 || sub.general === true;
534
+ if (describes &&
535
+ !disallowed.has(AGENT_TOOL) &&
536
+ !tools.some((r) => r.kind === "builtin" && r.name === AGENT_TOOL)) {
537
+ tools.push({ kind: "builtin", name: AGENT_TOOL });
538
+ item("tool", AGENT_TOOL, "carried", "subagents");
539
+ }
540
+ }
541
+ // the tool keys the agent has, for policies and inline allowlists
542
+ const keys = new Set();
543
+ for (const r of tools) {
544
+ if (r.kind === "builtin") {
545
+ keys.add(r.name);
546
+ if (r.name === BUILTIN.Bash)
547
+ for (const c of BASH_COMPANION_TOOLS)
548
+ keys.add(c);
549
+ }
550
+ else if (r.kind === "plugin")
551
+ keys.add(extensionToolKey(r.plugin, r.name));
552
+ else {
553
+ const c = slugs.get(r.connectorId);
554
+ if (!c)
555
+ continue;
556
+ for (const n of r.tools === "all" ? c.tools : r.tools)
557
+ keys.add(connectorToolKey(c.slug, n));
558
+ }
559
+ }
560
+ const toolPolicies = {};
561
+ for (const [key, p] of [
562
+ ...Object.entries(t.toolPolicies ?? {}),
563
+ ...Object.entries(connectorPolicies),
564
+ ]) {
565
+ if (!keys.has(key) || (p !== "ask" && p !== "deny"))
566
+ continue;
567
+ const prev = toolPolicies[key];
568
+ if (prev === undefined || RANK[p] > RANK[prev])
569
+ toolPolicies[key] = p;
570
+ }
571
+ for (const x of subagents?.inline ?? []) {
572
+ if (x.tools === undefined)
573
+ continue;
574
+ for (const k of x.tools) {
575
+ if (!keys.has(k))
576
+ dropped.push(`subagents.inline.${x.name}.tools.${k}`);
577
+ }
578
+ // an allowlist stays one: all its tools dropped leaves `[]` (no tool), never all of them
579
+ x.tools = x.tools.filter((k) => keys.has(k));
580
+ }
581
+ const definition = {
582
+ name: row.name.slice(0, 80),
583
+ avatarUrl: null,
584
+ ...(instructions === undefined ? { instructionFiles: files } : { instructions }),
585
+ fallback: null,
586
+ fallbackParams: {},
587
+ tools,
588
+ toolPolicies,
589
+ ...((orgSkills.length > 0 || pinned.length > 0) && {
590
+ skills: { orgSkills, ...(pinned.length > 0 && { pinned }) },
591
+ }),
592
+ ...(subagents !== undefined && { subagents }),
593
+ ...(pendingConnectors.length > 0 && { pendingConnectors }),
594
+ };
595
+ const profile = { description, quickActions };
596
+ // the model (P4-4): the automatic choice always; the person's choice keeps its params when equal
597
+ const autoChoice = await autoModel(t, opts);
598
+ const auto = withEffort(autoChoice, t.effort);
599
+ let model = auto;
600
+ if (opts.model !== undefined &&
601
+ (auto === null ||
602
+ auto.ref.provider !== opts.model.provider ||
603
+ auto.ref.model !== opts.model.model)) {
604
+ const decl = (await opts.resolveModel(opts.model)) ?? [];
605
+ model = withEffort({ ref: opts.model, params: {}, source: "chosen", decl }, t.effort);
606
+ }
607
+ // a standard knob's key is its name (`effort`)
608
+ if (t.effort !== undefined && model?.params.effort !== t.effort)
609
+ dropped.push("effort");
610
+ // the result fits the kernel's schemas; a residue here is a bug in the cutting above
611
+ const check = AgentDefinitionSchema.safeParse({
612
+ ...definition,
613
+ instructions: definition.instructions ?? joinInstructionFiles(files),
614
+ model: model?.ref ?? { provider: "none", model: "none" },
615
+ modelParams: model?.params ?? {},
616
+ });
617
+ const checkProfile = ProfileInputSchema.safeParse(profile);
618
+ if (!check.success || !checkProfile.success) {
619
+ const issues = [...(check.error?.issues ?? []), ...(checkProfile.error?.issues ?? [])];
620
+ throw new Error(`template ${row.id} v${row.version} planned outside the agent schema: ${issues
621
+ .map((x) => `${x.path.join(".")}: ${x.message}`)
622
+ .join("; ")}`);
623
+ }
624
+ const baseHash = createHash("sha256")
625
+ .update(canonicalJson({
626
+ templateId: row.id,
627
+ version: row.version,
628
+ definition,
629
+ profile,
630
+ items,
631
+ dropped: dropped.filter((d) => d !== "effort"),
632
+ }))
633
+ .digest("hex");
634
+ const modelHash = createHash("sha256")
635
+ .update(canonicalJson(auto === null ? null : { ref: auto.ref, params: auto.params }))
636
+ .digest("hex")
637
+ .slice(0, 16);
638
+ return {
639
+ definition,
640
+ profile,
641
+ model,
642
+ auto,
643
+ items,
644
+ dropped,
645
+ baseHash,
646
+ modelHash,
647
+ hash: `${baseHash}.${modelHash}`,
648
+ };
649
+ }