@capybara-hq/kernel 0.0.0-stage → 0.1.0-rc.0

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 (631) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +2 -0
  3. package/README.md +20 -2
  4. package/bootstrap.json +22 -0
  5. package/dist/admin/admin.controller.d.ts +139 -0
  6. package/dist/admin/admin.controller.js +238 -0
  7. package/dist/admin/extensions.controller.d.ts +100 -0
  8. package/dist/admin/extensions.controller.js +226 -0
  9. package/dist/admin/setup.controller.d.ts +36 -0
  10. package/dist/admin/setup.controller.js +106 -0
  11. package/dist/admin/setup.service.d.ts +47 -0
  12. package/dist/admin/setup.service.js +90 -0
  13. package/dist/agents/agents.controller.d.ts +205 -0
  14. package/dist/agents/agents.controller.js +144 -0
  15. package/dist/agents/agents.service.d.ts +177 -0
  16. package/dist/agents/agents.service.js +677 -0
  17. package/dist/agents/definition.d.ts +198 -0
  18. package/dist/agents/definition.js +152 -0
  19. package/dist/agents/models.controller.d.ts +13 -0
  20. package/dist/agents/models.controller.js +31 -0
  21. package/dist/agents/templates.controller.d.ts +15 -0
  22. package/dist/agents/templates.controller.js +37 -0
  23. package/dist/agents/templates.d.ts +83 -0
  24. package/dist/agents/templates.js +173 -0
  25. package/dist/catalog/admin-catalog.controller.d.ts +143 -0
  26. package/dist/catalog/admin-catalog.controller.js +245 -0
  27. package/dist/catalog/catalog.service.d.ts +430 -0
  28. package/dist/catalog/catalog.service.js +882 -0
  29. package/dist/catalog/claude/agents.d.ts +27 -0
  30. package/dist/catalog/claude/agents.js +270 -0
  31. package/dist/catalog/claude/commands.d.ts +50 -0
  32. package/dist/catalog/claude/commands.js +179 -0
  33. package/dist/catalog/claude/manifest.d.ts +69 -0
  34. package/dist/catalog/claude/manifest.js +134 -0
  35. package/dist/catalog/claude/marketplace.d.ts +35 -0
  36. package/dist/catalog/claude/marketplace.js +194 -0
  37. package/dist/catalog/claude/mcp.d.ts +33 -0
  38. package/dist/catalog/claude/mcp.js +226 -0
  39. package/dist/catalog/claude/report.d.ts +86 -0
  40. package/dist/catalog/claude/report.js +121 -0
  41. package/dist/catalog/claude/translate.d.ts +56 -0
  42. package/dist/catalog/claude/translate.js +857 -0
  43. package/dist/catalog/cli.d.ts +46 -0
  44. package/dist/catalog/cli.js +211 -0
  45. package/dist/catalog/git-source.d.ts +127 -0
  46. package/dist/catalog/git-source.js +520 -0
  47. package/dist/catalog/marketplace-fetch.d.ts +99 -0
  48. package/dist/catalog/marketplace-fetch.js +203 -0
  49. package/dist/catalog/marketplaces.controller.d.ts +97 -0
  50. package/dist/catalog/marketplaces.controller.js +197 -0
  51. package/dist/catalog/marketplaces.service.d.ts +340 -0
  52. package/dist/catalog/marketplaces.service.js +1217 -0
  53. package/dist/catalog/org-catalog.controller.d.ts +128 -0
  54. package/dist/catalog/org-catalog.controller.js +277 -0
  55. package/dist/catalog/org-catalog.service.d.ts +246 -0
  56. package/dist/catalog/org-catalog.service.js +625 -0
  57. package/dist/catalog/plugin-import.d.ts +436 -0
  58. package/dist/catalog/plugin-import.js +1069 -0
  59. package/dist/catalog/plugin-install.d.ts +447 -0
  60. package/dist/catalog/plugin-install.js +1333 -0
  61. package/dist/catalog/plugin-package.d.ts +143 -0
  62. package/dist/catalog/plugin-package.js +382 -0
  63. package/dist/catalog/plugin-upgrade.d.ts +222 -0
  64. package/dist/catalog/plugin-upgrade.js +1219 -0
  65. package/dist/catalog/requests.service.d.ts +162 -0
  66. package/dist/catalog/requests.service.js +504 -0
  67. package/dist/catalog/schema-path.d.ts +7 -0
  68. package/dist/catalog/schema-path.js +63 -0
  69. package/dist/catalog/upgrade-targets.d.ts +59 -0
  70. package/dist/catalog/upgrade-targets.js +90 -0
  71. package/dist/catalog/versions.d.ts +31 -0
  72. package/dist/catalog/versions.js +44 -0
  73. package/dist/channels/actions.d.ts +37 -0
  74. package/dist/channels/actions.js +121 -0
  75. package/dist/channels/cards.d.ts +44 -0
  76. package/dist/channels/cards.js +156 -0
  77. package/dist/channels/connections.controller.d.ts +59 -0
  78. package/dist/channels/connections.controller.js +115 -0
  79. package/dist/channels/connections.service.d.ts +187 -0
  80. package/dist/channels/connections.service.js +534 -0
  81. package/dist/channels/features.d.ts +12 -0
  82. package/dist/channels/features.js +22 -0
  83. package/dist/channels/inbound.d.ts +120 -0
  84. package/dist/channels/inbound.js +332 -0
  85. package/dist/channels/outbound.d.ts +140 -0
  86. package/dist/channels/outbound.js +1125 -0
  87. package/dist/channels/phrases.d.ts +100 -0
  88. package/dist/channels/phrases.js +81 -0
  89. package/dist/channels/supervisor.d.ts +182 -0
  90. package/dist/channels/supervisor.js +625 -0
  91. package/dist/channels/threads.d.ts +29 -0
  92. package/dist/channels/threads.js +104 -0
  93. package/dist/channels/webhook-url.d.ts +16 -0
  94. package/dist/channels/webhook-url.js +34 -0
  95. package/dist/channels/webhook.controller.d.ts +19 -0
  96. package/dist/channels/webhook.controller.js +72 -0
  97. package/dist/channels/webhook.d.ts +73 -0
  98. package/dist/channels/webhook.js +274 -0
  99. package/dist/config/docs.d.ts +9 -0
  100. package/dist/config/docs.js +85 -0
  101. package/dist/config/env.d.ts +6 -0
  102. package/dist/config/env.js +73 -0
  103. package/dist/config/fields.d.ts +42 -0
  104. package/dist/config/fields.js +214 -0
  105. package/dist/config/file-source.d.ts +3 -0
  106. package/dist/config/file-source.js +31 -0
  107. package/dist/config/load.d.ts +20 -0
  108. package/dist/config/load.js +98 -0
  109. package/dist/config/nacos-source.d.ts +31 -0
  110. package/dist/config/nacos-source.js +229 -0
  111. package/dist/config/schema.d.ts +223 -0
  112. package/dist/config/schema.js +1151 -0
  113. package/dist/config/sources.d.ts +18 -0
  114. package/dist/config/sources.js +59 -0
  115. package/dist/config/types.d.ts +9 -0
  116. package/dist/config/types.js +7 -0
  117. package/dist/conversations/artifacts.d.ts +52 -0
  118. package/dist/conversations/artifacts.js +137 -0
  119. package/dist/conversations/attachments.controller.d.ts +28 -0
  120. package/dist/conversations/attachments.controller.js +96 -0
  121. package/dist/conversations/attachments.service.d.ts +180 -0
  122. package/dist/conversations/attachments.service.js +578 -0
  123. package/dist/conversations/conversations.controller.d.ts +288 -0
  124. package/dist/conversations/conversations.controller.js +607 -0
  125. package/dist/conversations/conversations.service.d.ts +321 -0
  126. package/dist/conversations/conversations.service.js +754 -0
  127. package/dist/conversations/event-log.d.ts +122 -0
  128. package/dist/conversations/event-log.js +259 -0
  129. package/dist/conversations/events.d.ts +856 -0
  130. package/dist/conversations/events.js +639 -0
  131. package/dist/conversations/files.d.ts +92 -0
  132. package/dist/conversations/files.js +213 -0
  133. package/dist/conversations/outputs-read.d.ts +34 -0
  134. package/dist/conversations/outputs-read.js +37 -0
  135. package/dist/conversations/queue.d.ts +169 -0
  136. package/dist/conversations/queue.js +527 -0
  137. package/dist/conversations/sandbox-status.d.ts +21 -0
  138. package/dist/conversations/sandbox-status.js +24 -0
  139. package/dist/conversations/selection.d.ts +46 -0
  140. package/dist/conversations/selection.js +75 -0
  141. package/dist/conversations/titles.d.ts +93 -0
  142. package/dist/conversations/titles.js +422 -0
  143. package/dist/ctx/bus.d.ts +16 -0
  144. package/dist/ctx/bus.js +101 -0
  145. package/dist/ctx/create-ctx.d.ts +109 -0
  146. package/dist/ctx/create-ctx.js +592 -0
  147. package/dist/ctx/kv.d.ts +4 -0
  148. package/dist/ctx/kv.js +31 -0
  149. package/dist/ctx/lock.d.ts +4 -0
  150. package/dist/ctx/lock.js +39 -0
  151. package/dist/ctx/namespace.d.ts +6 -0
  152. package/dist/ctx/namespace.js +12 -0
  153. package/dist/ctx/queue.d.ts +25 -0
  154. package/dist/ctx/queue.js +150 -0
  155. package/dist/ctx/secrets.d.ts +45 -0
  156. package/dist/ctx/secrets.js +175 -0
  157. package/dist/db/kernel-schema.d.ts +1122 -0
  158. package/dist/db/kernel-schema.js +5 -0
  159. package/dist/db/migrator.d.ts +28 -0
  160. package/dist/db/migrator.js +140 -0
  161. package/dist/db/pool.d.ts +21 -0
  162. package/dist/db/pool.js +28 -0
  163. package/dist/db/sql-statements.d.ts +34 -0
  164. package/dist/db/sql-statements.js +168 -0
  165. package/dist/errors.d.ts +210 -0
  166. package/dist/errors.js +212 -0
  167. package/dist/evals/budget.d.ts +61 -0
  168. package/dist/evals/budget.js +181 -0
  169. package/dist/evals/diff.d.ts +55 -0
  170. package/dist/evals/diff.js +133 -0
  171. package/dist/evals/judge.d.ts +53 -0
  172. package/dist/evals/judge.js +149 -0
  173. package/dist/evals/plan.d.ts +47 -0
  174. package/dist/evals/plan.js +77 -0
  175. package/dist/evals/reconstruct.d.ts +137 -0
  176. package/dist/evals/reconstruct.js +322 -0
  177. package/dist/evals/recorded-tools.d.ts +54 -0
  178. package/dist/evals/recorded-tools.js +167 -0
  179. package/dist/evals/run-replay.d.ts +86 -0
  180. package/dist/evals/run-replay.js +502 -0
  181. package/dist/evals/runs.controller.d.ts +100 -0
  182. package/dist/evals/runs.controller.js +199 -0
  183. package/dist/evals/runs.service.d.ts +275 -0
  184. package/dist/evals/runs.service.js +836 -0
  185. package/dist/evals/sets.controller.d.ts +61 -0
  186. package/dist/evals/sets.controller.js +183 -0
  187. package/dist/evals/sets.service.d.ts +128 -0
  188. package/dist/evals/sets.service.js +558 -0
  189. package/dist/evals/snapshot.d.ts +76 -0
  190. package/dist/evals/snapshot.js +207 -0
  191. package/dist/evals/step-replay.d.ts +113 -0
  192. package/dist/evals/step-replay.js +181 -0
  193. package/dist/evals/trajectory.controller.d.ts +41 -0
  194. package/dist/evals/trajectory.controller.js +88 -0
  195. package/dist/evals/trajectory.d.ts +144 -0
  196. package/dist/evals/trajectory.js +338 -0
  197. package/dist/evals/trajectory.service.d.ts +108 -0
  198. package/dist/evals/trajectory.service.js +323 -0
  199. package/dist/evals/worker.d.ts +101 -0
  200. package/dist/evals/worker.js +789 -0
  201. package/dist/extensions/admin-ops.d.ts +105 -0
  202. package/dist/extensions/admin-ops.js +353 -0
  203. package/dist/extensions/admin-view.d.ts +79 -0
  204. package/dist/extensions/admin-view.js +327 -0
  205. package/dist/extensions/approvals.d.ts +119 -0
  206. package/dist/extensions/approvals.js +205 -0
  207. package/dist/extensions/blobs.d.ts +45 -0
  208. package/dist/extensions/blobs.js +160 -0
  209. package/dist/extensions/bootstrap.d.ts +149 -0
  210. package/dist/extensions/bootstrap.js +441 -0
  211. package/dist/extensions/cli.d.ts +61 -0
  212. package/dist/extensions/cli.js +165 -0
  213. package/dist/extensions/config-json-schema.d.ts +9 -0
  214. package/dist/extensions/config-json-schema.js +73 -0
  215. package/dist/extensions/deployment-config.d.ts +138 -0
  216. package/dist/extensions/deployment-config.js +394 -0
  217. package/dist/extensions/enabled.d.ts +31 -0
  218. package/dist/extensions/enabled.js +55 -0
  219. package/dist/extensions/hooks.d.ts +161 -0
  220. package/dist/extensions/hooks.js +425 -0
  221. package/dist/extensions/host.d.ts +577 -0
  222. package/dist/extensions/host.js +2071 -0
  223. package/dist/extensions/inflight.d.ts +69 -0
  224. package/dist/extensions/inflight.js +277 -0
  225. package/dist/extensions/installs.d.ts +166 -0
  226. package/dist/extensions/installs.js +253 -0
  227. package/dist/extensions/instance.d.ts +167 -0
  228. package/dist/extensions/instance.js +329 -0
  229. package/dist/extensions/ledger.d.ts +30 -0
  230. package/dist/extensions/ledger.js +50 -0
  231. package/dist/extensions/lifecycle.d.ts +80 -0
  232. package/dist/extensions/lifecycle.js +152 -0
  233. package/dist/extensions/migrate-lock.d.ts +51 -0
  234. package/dist/extensions/migrate-lock.js +100 -0
  235. package/dist/extensions/org-config.controller.d.ts +24 -0
  236. package/dist/extensions/org-config.controller.js +59 -0
  237. package/dist/extensions/org-config.d.ts +169 -0
  238. package/dist/extensions/org-config.js +520 -0
  239. package/dist/extensions/package.d.ts +115 -0
  240. package/dist/extensions/package.js +246 -0
  241. package/dist/extensions/permission-set.d.ts +117 -0
  242. package/dist/extensions/permission-set.js +184 -0
  243. package/dist/extensions/permission-view.d.ts +194 -0
  244. package/dist/extensions/permission-view.js +284 -0
  245. package/dist/extensions/registry.d.ts +24 -0
  246. package/dist/extensions/registry.js +56 -0
  247. package/dist/extensions/resolve.d.ts +12 -0
  248. package/dist/extensions/resolve.js +71 -0
  249. package/dist/extensions/sources.d.ts +69 -0
  250. package/dist/extensions/sources.js +120 -0
  251. package/dist/extensions/sync.d.ts +40 -0
  252. package/dist/extensions/sync.js +242 -0
  253. package/dist/files/previewers.controller.d.ts +46 -0
  254. package/dist/files/previewers.controller.js +105 -0
  255. package/dist/files/previewers.d.ts +100 -0
  256. package/dist/files/previewers.js +250 -0
  257. package/dist/http/api.module.d.ts +114 -0
  258. package/dist/http/api.module.js +448 -0
  259. package/dist/http/app.d.ts +77 -0
  260. package/dist/http/app.js +170 -0
  261. package/dist/http/error.filter.d.ts +21 -0
  262. package/dist/http/error.filter.js +85 -0
  263. package/dist/http/gateway.module.d.ts +15 -0
  264. package/dist/http/gateway.module.js +13 -0
  265. package/dist/http/health.controller.d.ts +26 -0
  266. package/dist/http/health.controller.js +79 -0
  267. package/dist/http/nest-logger.d.ts +20 -0
  268. package/dist/http/nest-logger.js +28 -0
  269. package/dist/http/plugin-dispatch.d.ts +68 -0
  270. package/dist/http/plugin-dispatch.js +200 -0
  271. package/dist/http/tokens.d.ts +131 -0
  272. package/dist/http/tokens.js +131 -0
  273. package/dist/http/zod.pipe.d.ts +8 -0
  274. package/dist/http/zod.pipe.js +14 -0
  275. package/dist/identity/accounts.d.ts +93 -0
  276. package/dist/identity/accounts.js +367 -0
  277. package/dist/identity/api-tokens.d.ts +73 -0
  278. package/dist/identity/api-tokens.js +197 -0
  279. package/dist/identity/audit.d.ts +23 -0
  280. package/dist/identity/audit.js +41 -0
  281. package/dist/identity/auth.controller.d.ts +40 -0
  282. package/dist/identity/auth.controller.js +130 -0
  283. package/dist/identity/auth.guard.d.ts +41 -0
  284. package/dist/identity/auth.guard.js +162 -0
  285. package/dist/identity/binding.d.ts +47 -0
  286. package/dist/identity/binding.js +84 -0
  287. package/dist/identity/cookies.d.ts +16 -0
  288. package/dist/identity/cookies.js +32 -0
  289. package/dist/identity/credential-check.d.ts +17 -0
  290. package/dist/identity/credential-check.js +24 -0
  291. package/dist/identity/enterprise-admin.d.ts +14 -0
  292. package/dist/identity/enterprise-admin.js +27 -0
  293. package/dist/identity/external.d.ts +106 -0
  294. package/dist/identity/external.js +337 -0
  295. package/dist/identity/hash.d.ts +2 -0
  296. package/dist/identity/hash.js +3 -0
  297. package/dist/identity/login.d.ts +6 -0
  298. package/dist/identity/login.js +20 -0
  299. package/dist/identity/me.controller.d.ts +61 -0
  300. package/dist/identity/me.controller.js +159 -0
  301. package/dist/identity/passwords.d.ts +6 -0
  302. package/dist/identity/passwords.js +37 -0
  303. package/dist/identity/principal.d.ts +56 -0
  304. package/dist/identity/principal.js +38 -0
  305. package/dist/identity/rate-limit.d.ts +55 -0
  306. package/dist/identity/rate-limit.js +121 -0
  307. package/dist/identity/sessions.d.ts +84 -0
  308. package/dist/identity/sessions.js +306 -0
  309. package/dist/identity/settings.d.ts +121 -0
  310. package/dist/identity/settings.js +248 -0
  311. package/dist/identity/sso.controller.d.ts +59 -0
  312. package/dist/identity/sso.controller.js +192 -0
  313. package/dist/identity/sso.d.ts +83 -0
  314. package/dist/identity/sso.js +202 -0
  315. package/dist/inbox/inbox.service.d.ts +43 -0
  316. package/dist/inbox/inbox.service.js +57 -0
  317. package/dist/index.d.ts +67 -0
  318. package/dist/index.js +65 -0
  319. package/dist/kernel.d.ts +256 -0
  320. package/dist/kernel.js +1326 -0
  321. package/dist/log.d.ts +48 -0
  322. package/dist/log.js +229 -0
  323. package/dist/models/prices.d.ts +53 -0
  324. package/dist/models/prices.js +121 -0
  325. package/dist/models/purposes.controller.d.ts +19 -0
  326. package/dist/models/purposes.controller.js +56 -0
  327. package/dist/models/purposes.d.ts +140 -0
  328. package/dist/models/purposes.js +267 -0
  329. package/dist/net/proxy.d.ts +44 -0
  330. package/dist/net/proxy.js +162 -0
  331. package/dist/net/public-address.d.ts +60 -0
  332. package/dist/net/public-address.js +271 -0
  333. package/dist/net/safe-fetch.d.ts +38 -0
  334. package/dist/net/safe-fetch.js +140 -0
  335. package/dist/orgs/directory-sync.controller.d.ts +14 -0
  336. package/dist/orgs/directory-sync.controller.js +40 -0
  337. package/dist/orgs/directory-sync.d.ts +166 -0
  338. package/dist/orgs/directory-sync.js +558 -0
  339. package/dist/orgs/invitations.controller.d.ts +58 -0
  340. package/dist/orgs/invitations.controller.js +137 -0
  341. package/dist/orgs/invitations.service.d.ts +80 -0
  342. package/dist/orgs/invitations.service.js +217 -0
  343. package/dist/orgs/members.service.d.ts +63 -0
  344. package/dist/orgs/members.service.js +234 -0
  345. package/dist/orgs/offboarding.d.ts +141 -0
  346. package/dist/orgs/offboarding.js +398 -0
  347. package/dist/orgs/org-lock.d.ts +32 -0
  348. package/dist/orgs/org-lock.js +46 -0
  349. package/dist/orgs/org.guard.d.ts +35 -0
  350. package/dist/orgs/org.guard.js +95 -0
  351. package/dist/orgs/orgs.controller.d.ts +78 -0
  352. package/dist/orgs/orgs.controller.js +192 -0
  353. package/dist/orgs/orgs.service.d.ts +61 -0
  354. package/dist/orgs/orgs.service.js +209 -0
  355. package/dist/orgs/roles.d.ts +13 -0
  356. package/dist/orgs/roles.js +58 -0
  357. package/dist/orgs/settings.controller.d.ts +20 -0
  358. package/dist/orgs/settings.controller.js +53 -0
  359. package/dist/orgs/settings.service.d.ts +120 -0
  360. package/dist/orgs/settings.service.js +178 -0
  361. package/dist/packages/npm.d.ts +50 -0
  362. package/dist/packages/npm.js +218 -0
  363. package/dist/packages/provenance.d.ts +47 -0
  364. package/dist/packages/provenance.js +147 -0
  365. package/dist/packages/tgz.d.ts +76 -0
  366. package/dist/packages/tgz.js +225 -0
  367. package/dist/runtime/abort.d.ts +32 -0
  368. package/dist/runtime/abort.js +71 -0
  369. package/dist/runtime/checkpointer.d.ts +32 -0
  370. package/dist/runtime/checkpointer.js +243 -0
  371. package/dist/runtime/context/build.d.ts +254 -0
  372. package/dist/runtime/context/build.js +693 -0
  373. package/dist/runtime/context/claude-tools.d.ts +11 -0
  374. package/dist/runtime/context/claude-tools.js +24 -0
  375. package/dist/runtime/context/compaction.d.ts +26 -0
  376. package/dist/runtime/context/compaction.js +195 -0
  377. package/dist/runtime/context/pairing.d.ts +11 -0
  378. package/dist/runtime/context/pairing.js +82 -0
  379. package/dist/runtime/context/reminders.d.ts +5 -0
  380. package/dist/runtime/context/reminders.js +11 -0
  381. package/dist/runtime/context/skills.d.ts +105 -0
  382. package/dist/runtime/context/skills.js +283 -0
  383. package/dist/runtime/context/tokens.d.ts +19 -0
  384. package/dist/runtime/context/tokens.js +104 -0
  385. package/dist/runtime/conversation-lock.d.ts +40 -0
  386. package/dist/runtime/conversation-lock.js +97 -0
  387. package/dist/runtime/hook-calls.d.ts +84 -0
  388. package/dist/runtime/hook-calls.js +136 -0
  389. package/dist/runtime/langgraph-loop.d.ts +52 -0
  390. package/dist/runtime/langgraph-loop.js +247 -0
  391. package/dist/runtime/loop.d.ts +93 -0
  392. package/dist/runtime/loop.js +7 -0
  393. package/dist/runtime/maintenance.d.ts +80 -0
  394. package/dist/runtime/maintenance.js +147 -0
  395. package/dist/runtime/media-cache.d.ts +21 -0
  396. package/dist/runtime/media-cache.js +51 -0
  397. package/dist/runtime/model-call.d.ts +176 -0
  398. package/dist/runtime/model-call.js +1049 -0
  399. package/dist/runtime/providers.d.ts +86 -0
  400. package/dist/runtime/providers.js +224 -0
  401. package/dist/runtime/quota.d.ts +29 -0
  402. package/dist/runtime/quota.js +70 -0
  403. package/dist/runtime/run-finish.d.ts +45 -0
  404. package/dist/runtime/run-finish.js +69 -0
  405. package/dist/runtime/run-queue.d.ts +121 -0
  406. package/dist/runtime/run-queue.js +493 -0
  407. package/dist/runtime/run-worker.d.ts +138 -0
  408. package/dist/runtime/run-worker.js +805 -0
  409. package/dist/runtime/stream.controller.d.ts +34 -0
  410. package/dist/runtime/stream.controller.js +122 -0
  411. package/dist/runtime/stream.d.ts +63 -0
  412. package/dist/runtime/stream.js +262 -0
  413. package/dist/runtime/subagents/child.d.ts +80 -0
  414. package/dist/runtime/subagents/child.js +225 -0
  415. package/dist/runtime/subagents/definition.d.ts +103 -0
  416. package/dist/runtime/subagents/definition.js +392 -0
  417. package/dist/runtime/subagents/dispatch.d.ts +69 -0
  418. package/dist/runtime/subagents/dispatch.js +502 -0
  419. package/dist/runtime/subagents/limits.d.ts +23 -0
  420. package/dist/runtime/subagents/limits.js +34 -0
  421. package/dist/runtime/subagents/org-agents.d.ts +50 -0
  422. package/dist/runtime/subagents/org-agents.js +70 -0
  423. package/dist/runtime/subagents/preamble.d.ts +7 -0
  424. package/dist/runtime/subagents/preamble.js +11 -0
  425. package/dist/runtime/subagents/progress.d.ts +26 -0
  426. package/dist/runtime/subagents/progress.js +36 -0
  427. package/dist/runtime/subagents/roster.d.ts +55 -0
  428. package/dist/runtime/subagents/roster.js +111 -0
  429. package/dist/runtime/subagents/skill-fork.d.ts +123 -0
  430. package/dist/runtime/subagents/skill-fork.js +259 -0
  431. package/dist/runtime/usage-report.d.ts +163 -0
  432. package/dist/runtime/usage-report.js +550 -0
  433. package/dist/runtime/waits.d.ts +233 -0
  434. package/dist/runtime/waits.js +883 -0
  435. package/dist/sandbox/leases.d.ts +169 -0
  436. package/dist/sandbox/leases.js +515 -0
  437. package/dist/sandbox/lifecycle.d.ts +21 -0
  438. package/dist/sandbox/lifecycle.js +68 -0
  439. package/dist/sandbox/sandbox.service.d.ts +249 -0
  440. package/dist/sandbox/sandbox.service.js +908 -0
  441. package/dist/skills/catalog.d.ts +149 -0
  442. package/dist/skills/catalog.js +405 -0
  443. package/dist/skills/changes.controller.d.ts +56 -0
  444. package/dist/skills/changes.controller.js +136 -0
  445. package/dist/skills/changes.service.d.ts +175 -0
  446. package/dist/skills/changes.service.js +805 -0
  447. package/dist/skills/invocable.controller.d.ts +23 -0
  448. package/dist/skills/invocable.controller.js +50 -0
  449. package/dist/skills/invocation-keys.d.ts +23 -0
  450. package/dist/skills/invocation-keys.js +44 -0
  451. package/dist/skills/invoke.d.ts +135 -0
  452. package/dist/skills/invoke.js +286 -0
  453. package/dist/skills/package.d.ts +87 -0
  454. package/dist/skills/package.js +227 -0
  455. package/dist/skills/skills.controller.d.ts +40 -0
  456. package/dist/skills/skills.controller.js +110 -0
  457. package/dist/skills/skills.service.d.ts +192 -0
  458. package/dist/skills/skills.service.js +567 -0
  459. package/dist/storage/prefix.d.ts +36 -0
  460. package/dist/storage/prefix.js +104 -0
  461. package/dist/storage/purge.d.ts +27 -0
  462. package/dist/storage/purge.js +75 -0
  463. package/dist/storage/storage.service.d.ts +44 -0
  464. package/dist/storage/storage.service.js +145 -0
  465. package/dist/text.d.ts +13 -0
  466. package/dist/text.js +13 -0
  467. package/dist/tools/approvals.controller.d.ts +53 -0
  468. package/dist/tools/approvals.controller.js +128 -0
  469. package/dist/tools/approvals.service.d.ts +172 -0
  470. package/dist/tools/approvals.service.js +568 -0
  471. package/dist/tools/breaker.d.ts +28 -0
  472. package/dist/tools/breaker.js +72 -0
  473. package/dist/tools/builtins/agent.d.ts +81 -0
  474. package/dist/tools/builtins/agent.js +223 -0
  475. package/dist/tools/builtins/ask-user.d.ts +28 -0
  476. package/dist/tools/builtins/ask-user.js +139 -0
  477. package/dist/tools/builtins/read-tool-output.d.ts +18 -0
  478. package/dist/tools/builtins/read-tool-output.js +108 -0
  479. package/dist/tools/builtins/sandbox/bash.d.ts +16 -0
  480. package/dist/tools/builtins/sandbox/bash.js +137 -0
  481. package/dist/tools/builtins/sandbox/common.d.ts +114 -0
  482. package/dist/tools/builtins/sandbox/common.js +304 -0
  483. package/dist/tools/builtins/sandbox/deliver.d.ts +5 -0
  484. package/dist/tools/builtins/sandbox/deliver.js +180 -0
  485. package/dist/tools/builtins/sandbox/edit.d.ts +4 -0
  486. package/dist/tools/builtins/sandbox/edit.js +98 -0
  487. package/dist/tools/builtins/sandbox/glob-match.d.ts +25 -0
  488. package/dist/tools/builtins/sandbox/glob-match.js +240 -0
  489. package/dist/tools/builtins/sandbox/glob.d.ts +4 -0
  490. package/dist/tools/builtins/sandbox/glob.js +104 -0
  491. package/dist/tools/builtins/sandbox/grep.d.ts +9 -0
  492. package/dist/tools/builtins/sandbox/grep.js +133 -0
  493. package/dist/tools/builtins/sandbox/index.d.ts +12 -0
  494. package/dist/tools/builtins/sandbox/index.js +27 -0
  495. package/dist/tools/builtins/sandbox/names.d.ts +7 -0
  496. package/dist/tools/builtins/sandbox/names.js +20 -0
  497. package/dist/tools/builtins/sandbox/read.d.ts +8 -0
  498. package/dist/tools/builtins/sandbox/read.js +121 -0
  499. package/dist/tools/builtins/sandbox/write.d.ts +4 -0
  500. package/dist/tools/builtins/sandbox/write.js +88 -0
  501. package/dist/tools/builtins/skill-load.d.ts +53 -0
  502. package/dist/tools/builtins/skill-load.js +446 -0
  503. package/dist/tools/builtins/skill-write.d.ts +59 -0
  504. package/dist/tools/builtins/skill-write.js +244 -0
  505. package/dist/tools/builtins/tool-search.d.ts +31 -0
  506. package/dist/tools/builtins/tool-search.js +171 -0
  507. package/dist/tools/connector-content.controller.d.ts +34 -0
  508. package/dist/tools/connector-content.controller.js +78 -0
  509. package/dist/tools/connector-content.d.ts +104 -0
  510. package/dist/tools/connector-content.js +267 -0
  511. package/dist/tools/connectors.controller.d.ts +210 -0
  512. package/dist/tools/connectors.controller.js +234 -0
  513. package/dist/tools/connectors.service.d.ts +303 -0
  514. package/dist/tools/connectors.service.js +1102 -0
  515. package/dist/tools/credentials.d.ts +139 -0
  516. package/dist/tools/credentials.js +351 -0
  517. package/dist/tools/drift.d.ts +141 -0
  518. package/dist/tools/drift.js +539 -0
  519. package/dist/tools/elicitation.d.ts +81 -0
  520. package/dist/tools/elicitation.js +266 -0
  521. package/dist/tools/endpoint.d.ts +18 -0
  522. package/dist/tools/endpoint.js +115 -0
  523. package/dist/tools/info.d.ts +67 -0
  524. package/dist/tools/info.js +113 -0
  525. package/dist/tools/naming.d.ts +27 -0
  526. package/dist/tools/naming.js +47 -0
  527. package/dist/tools/oauth/discovery.d.ts +65 -0
  528. package/dist/tools/oauth/discovery.js +307 -0
  529. package/dist/tools/oauth/flow.d.ts +63 -0
  530. package/dist/tools/oauth/flow.js +237 -0
  531. package/dist/tools/oauth/oauth.controller.d.ts +31 -0
  532. package/dist/tools/oauth/oauth.controller.js +95 -0
  533. package/dist/tools/oauth/tokens.d.ts +111 -0
  534. package/dist/tools/oauth/tokens.js +258 -0
  535. package/dist/tools/outputs.d.ts +61 -0
  536. package/dist/tools/outputs.js +156 -0
  537. package/dist/tools/pipeline.d.ts +322 -0
  538. package/dist/tools/pipeline.js +1236 -0
  539. package/dist/tools/policy.d.ts +60 -0
  540. package/dist/tools/policy.js +236 -0
  541. package/dist/tools/questions.controller.d.ts +24 -0
  542. package/dist/tools/questions.controller.js +58 -0
  543. package/dist/tools/questions.service.d.ts +103 -0
  544. package/dist/tools/questions.service.js +295 -0
  545. package/dist/tools/redact.d.ts +20 -0
  546. package/dist/tools/redact.js +60 -0
  547. package/dist/tools/registry.d.ts +246 -0
  548. package/dist/tools/registry.js +481 -0
  549. package/dist/tools/resources.d.ts +16 -0
  550. package/dist/tools/resources.js +76 -0
  551. package/dist/tools/specs.d.ts +14 -0
  552. package/dist/tools/specs.js +31 -0
  553. package/dist/tools/validate.d.ts +20 -0
  554. package/dist/tools/validate.js +183 -0
  555. package/dist/tools/view.d.ts +43 -0
  556. package/dist/tools/view.js +225 -0
  557. package/dist/ui/embed-token.d.ts +31 -0
  558. package/dist/ui/embed-token.js +132 -0
  559. package/dist/ui/registry.d.ts +58 -0
  560. package/dist/ui/registry.js +90 -0
  561. package/dist/ui/ui-stream.d.ts +37 -0
  562. package/dist/ui/ui-stream.js +162 -0
  563. package/dist/ui/views.controller.d.ts +81 -0
  564. package/dist/ui/views.controller.js +261 -0
  565. package/dist/ui/views.d.ts +155 -0
  566. package/dist/ui/views.js +306 -0
  567. package/dist/version.d.ts +5 -0
  568. package/dist/version.js +6 -0
  569. package/package.json +67 -3
  570. package/src/migrations/0001_init.sql +8 -0
  571. package/src/migrations/0002_secrets.sql +8 -0
  572. package/src/migrations/0003_identity.sql +117 -0
  573. package/src/migrations/0004_plugin_org_config_nullable.sql +3 -0
  574. package/src/migrations/0005_agents.sql +27 -0
  575. package/src/migrations/0006_conversations.sql +37 -0
  576. package/src/migrations/0007_checkpoints.sql +26 -0
  577. package/src/migrations/0008_runs_trigger_seq.sql +3 -0
  578. package/src/migrations/0009_runs_active_unique.sql +4 -0
  579. package/src/migrations/0010_tools.sql +125 -0
  580. package/src/migrations/0011_approvals_spec.sql +10 -0
  581. package/src/migrations/0012_run_waits.sql +24 -0
  582. package/src/migrations/0013_app_tools_source.sql +4 -0
  583. package/src/migrations/0014_tool_specs.sql +8 -0
  584. package/src/migrations/0015_tool_drift.sql +20 -0
  585. package/src/migrations/0016_plugin_permissions.sql +11 -0
  586. package/src/migrations/0017_identity_sources.sql +6 -0
  587. package/src/migrations/0018_channels.sql +74 -0
  588. package/src/migrations/0019_identity_trust.sql +17 -0
  589. package/src/migrations/0020_channel_card_lookup.sql +10 -0
  590. package/src/migrations/0021_org_storage_purge.sql +9 -0
  591. package/src/migrations/0022_attachments.sql +29 -0
  592. package/src/migrations/0023_sandboxes.sql +37 -0
  593. package/src/migrations/0024_skills.sql +46 -0
  594. package/src/migrations/0025_skills_catalog_idx.sql +6 -0
  595. package/src/migrations/0026_skill_changes.sql +34 -0
  596. package/src/migrations/0027_model_prices.sql +18 -0
  597. package/src/migrations/0028_evals.sql +105 -0
  598. package/src/migrations/0029_model_purposes.sql +18 -0
  599. package/src/migrations/0030_plugin_installs.sql +73 -0
  600. package/src/migrations/0031_plugin_snapshot_source.sql +6 -0
  601. package/src/migrations/0032_plugin_deployment_configs.sql +10 -0
  602. package/src/migrations/0033_rename_apps_to_connectors.sql +25 -0
  603. package/src/migrations/0034_directory.sql +49 -0
  604. package/src/migrations/0035_catalogs.sql +40 -0
  605. package/src/migrations/0036_app_import_staging.sql +17 -0
  606. package/src/migrations/0037_directory_installs.sql +92 -0
  607. package/src/migrations/0038_channel_inbound_mode.sql +6 -0
  608. package/src/migrations/0039_channel_card_pending.sql +8 -0
  609. package/src/migrations/0040_usage_report_sweep.sql +10 -0
  610. package/src/migrations/0041_rename_plugins_to_extensions.sql +38 -0
  611. package/src/migrations/0042_rename_directory_to_catalog.sql +80 -0
  612. package/src/migrations/0043_rename_app_installs_to_plugin_installs.sql +20 -0
  613. package/src/migrations/0044_catalog_one_kind.sql +90 -0
  614. package/src/migrations/0045_plugin_dependencies.sql +9 -0
  615. package/src/migrations/0046_git_sources.sql +25 -0
  616. package/src/migrations/0047_marketplace_entry_heads.sql +7 -0
  617. package/src/migrations/0048_marketplace_entry_trees.sql +8 -0
  618. package/src/migrations/0049_plugin_upgrades.sql +37 -0
  619. package/src/migrations/0050_bootstrap.sql +53 -0
  620. package/src/migrations/0051_claude_compat.sql +26 -0
  621. package/src/migrations/0052_conversations_account_agent_idx.sql +5 -0
  622. package/src/migrations/0053_subagents.sql +73 -0
  623. package/src/migrations/0054_subagent_wait_expiry.sql +7 -0
  624. package/src/migrations/0055_subagent_parent_indexes.sql +10 -0
  625. package/src/migrations/0056_approval_reason.sql +3 -0
  626. package/src/migrations/0057_conversation_titles.sql +11 -0
  627. package/src/migrations/0058_conversation_selection.sql +4 -0
  628. package/src/migrations/0059_conversation_queue.sql +22 -0
  629. package/src/migrations/0060_file_previewers.sql +10 -0
  630. package/src/migrations/0061_queue_selection.sql +5 -0
  631. package/src/migrations/0062_queued_skill.sql +8 -0
@@ -0,0 +1,392 @@
1
+ import { SKILL_ENTRY_FILE, sanitizeParams, } from "@capybara-hq/plugin-sdk";
2
+ import { loadTemplates } from "../../agents/templates.js";
3
+ import { ApiError } from "../../errors.js";
4
+ import { PINNED_SKILLS_LIMITS } from "../../skills/catalog.js";
5
+ import { toolKey } from "../../tools/naming.js";
6
+ /**
7
+ * Tools a sub-agent never gets (spec §5.3, §5.5): `agent` (depth 1), `ask_user` (the person does not
8
+ * see the child), `sandbox_deliver` (delivering files is the parent's job) and `skill_write`.
9
+ */
10
+ export const CHILD_REMOVED_TOOLS = ["agent", "ask_user", "sandbox_deliver", "skill_write"];
11
+ /**
12
+ * The roster entry's template is gone (an inline template edited away, a plugin template
13
+ * uninstalled) between resolving the roster and reading it. The dispatch refuses the call as an
14
+ * unknown type.
15
+ */
16
+ export class SubagentTypeGoneError extends Error {
17
+ type;
18
+ constructor(type) {
19
+ super(`agent template ${type} not found`);
20
+ this.type = type;
21
+ this.name = "SubagentTypeGoneError";
22
+ }
23
+ }
24
+ const RANK = { ask: 1, deny: 2 };
25
+ const isPolicy = (p) => p === "ask" || p === "deny";
26
+ /**
27
+ * `base` with `over` applied on top, the stricter value winning per key (`deny` > `ask`). Values
28
+ * other than `ask` / `deny` (stored template data is not re-validated) are skipped on both sides.
29
+ */
30
+ export function stricterPolicies(base, over) {
31
+ const out = {};
32
+ for (const [key, p] of Object.entries(base))
33
+ if (isPolicy(p))
34
+ out[key] = p;
35
+ for (const [key, p] of Object.entries(over)) {
36
+ if (!isPolicy(p))
37
+ continue;
38
+ const prev = out[key];
39
+ if (prev === undefined || RANK[p] > RANK[prev])
40
+ out[key] = p;
41
+ }
42
+ return out;
43
+ }
44
+ async function loadConnectors(db, orgId, refs) {
45
+ const ids = [...new Set(refs.flatMap((r) => (r.kind === "connector" ? [r.connectorId] : [])))];
46
+ const out = new Map();
47
+ if (ids.length === 0)
48
+ return out;
49
+ const rows = await db
50
+ .selectFrom("connectors")
51
+ .select(["id", "slug"])
52
+ .where("org_id", "=", orgId)
53
+ .where("deleted_at", "is", null)
54
+ .where("id", "in", ids)
55
+ .execute();
56
+ const tools = rows.length === 0
57
+ ? []
58
+ : await db
59
+ .selectFrom("connector_tools")
60
+ .select(["connector_id", "name"])
61
+ .where("connector_id", "in", rows.map((r) => r.id))
62
+ .orderBy("name")
63
+ .execute();
64
+ for (const r of rows) {
65
+ out.set(r.id, {
66
+ slug: r.slug,
67
+ tools: tools.filter((t) => t.connector_id === r.id).map((t) => t.name),
68
+ });
69
+ }
70
+ return out;
71
+ }
72
+ /**
73
+ * Narrows tool refs by resolved key (spec §5.3): keeps a key when `allow` (if given) lists it and
74
+ * neither `deny` nor {@link CHILD_REMOVED_TOOLS} does. A connector ref with `tools: "all"` stays
75
+ * live only when nothing can narrow it (no allowlist and no deny key under `<slug>__`), so a tool
76
+ * the connector gains later never slips past the template; otherwise it becomes the kept names, or
77
+ * is dropped. A connector that no longer exists keeps its ref only without an allowlist.
78
+ */
79
+ function narrowTools(refs, connectors, allow, deny) {
80
+ const removed = new Set(CHILD_REMOVED_TOOLS);
81
+ const keep = (key) => !removed.has(key) && !deny.has(key) && (allow === null || allow.has(key));
82
+ const out = [];
83
+ for (const ref of refs) {
84
+ if (ref.kind === "builtin") {
85
+ if (keep(ref.name))
86
+ out.push(ref);
87
+ }
88
+ else if (ref.kind === "plugin") {
89
+ if (keep(toolKey(ref.plugin, ref.name)))
90
+ out.push(ref);
91
+ }
92
+ else {
93
+ const c = connectors.get(ref.connectorId);
94
+ if (!c) {
95
+ if (allow === null)
96
+ out.push(ref);
97
+ continue;
98
+ }
99
+ const prefix = toolKey(c.slug, "");
100
+ if (ref.tools === "all" && allow === null && ![...deny].some((k) => k.startsWith(prefix))) {
101
+ out.push(ref);
102
+ continue;
103
+ }
104
+ const names = ref.tools === "all" ? c.tools : ref.tools;
105
+ const kept = names.filter((name) => keep(toolKey(c.slug, name)));
106
+ if (kept.length > 0)
107
+ out.push({ ...ref, tools: kept });
108
+ }
109
+ }
110
+ return out;
111
+ }
112
+ /**
113
+ * The template's skills the parent selects (its `orgSkills` or the parent agent's own skills),
114
+ * within the pinned limits (spec §5.3): inline templates name skill ids, plugin templates skill
115
+ * names (`<name>` or `<plugin>:<name>`). A name that matches more than one selected skill picks, in
116
+ * this order, the skill from the template's own plugin, the agent's own skill, the org skill (ties
117
+ * by id), with a warning. Dropped ones get a warning.
118
+ */
119
+ async function pinnedFor(db, a, refs, byName) {
120
+ if (refs.length === 0)
121
+ return { pinned: [], warnings: [] };
122
+ const orgSkills = a.parent.skills?.orgSkills ?? [];
123
+ const rows = (await db
124
+ .selectFrom("skills as s")
125
+ .innerJoin("skill_versions as v", (j) => j.onRef("v.skill_id", "=", "s.id").onRef("v.version", "=", "s.current_version"))
126
+ .leftJoin("catalog_items as c", "c.id", "s.catalog_item_id")
127
+ .select(["s.id", "s.name", "s.scope", "v.manifest", "c.name as plugin"])
128
+ .where("s.org_id", "=", a.orgId)
129
+ .where("s.deleted_at", "is", null)
130
+ .where((eb) => {
131
+ const own = eb.and([eb("s.scope", "=", "agent"), eb("s.agent_id", "=", a.parentAgentId)]);
132
+ return orgSkills.length === 0
133
+ ? own
134
+ : eb.or([own, eb.and([eb("s.scope", "=", "org"), eb("s.id", "in", orgSkills)])]);
135
+ })
136
+ .orderBy("s.id")
137
+ .execute()).map((r) => ({
138
+ id: r.id,
139
+ name: r.name,
140
+ scope: r.scope,
141
+ plugin: r.plugin,
142
+ bytes: r.manifest.files.find((f) => f.path === SKILL_ENTRY_FILE)?.size ?? 0,
143
+ }));
144
+ const pinned = [];
145
+ const warnings = [];
146
+ const own = byName?.plugin;
147
+ const rank = (r) => own !== undefined && r.plugin === own ? 0 : r.scope === "agent" ? 1 : 2;
148
+ const match = (ref) => {
149
+ if (byName === null)
150
+ return rows.find((r) => r.id === ref);
151
+ const i = ref.indexOf(":");
152
+ const found = i < 0
153
+ ? rows.filter((r) => r.name === ref)
154
+ : rows.filter((r) => r.name === ref.slice(i + 1) && r.plugin === ref.slice(0, i));
155
+ // rows are ordered by id, and the sort is stable: ties keep that order
156
+ const [first, ...rest] = found.sort((x, y) => rank(x) - rank(y));
157
+ if (first && rest.length > 0) {
158
+ const which = [`the one from the plugin ${own}`, "the agent's own skill", "the org skill"][rank(first)];
159
+ warnings.push(`The skill name "${ref}" matches more than one selected skill; ${which} was pinned.`);
160
+ }
161
+ return first;
162
+ };
163
+ let total = 0;
164
+ for (const ref of refs) {
165
+ const r = match(ref);
166
+ if (!r) {
167
+ warnings.push(`The skill "${ref}" was not pinned: the agent does not select it.`);
168
+ continue;
169
+ }
170
+ if (pinned.includes(r.id))
171
+ continue;
172
+ if (pinned.length >= PINNED_SKILLS_LIMITS.count) {
173
+ warnings.push(`The skill "${r.name}" was not pinned: at most 3 skills can be pinned.`);
174
+ continue;
175
+ }
176
+ if (total + r.bytes > PINNED_SKILLS_LIMITS.totalBytes) {
177
+ warnings.push(`The skill "${r.name}" was not pinned: pinned skills are limited to 32 KB in total.`);
178
+ continue;
179
+ }
180
+ total += r.bytes;
181
+ pinned.push(r.id);
182
+ }
183
+ return { pinned, warnings };
184
+ }
185
+ /** The `effort` declaration of `model`, or null (or when the model cannot be resolved). */
186
+ async function effortDecl(registry, model) {
187
+ try {
188
+ const { info } = await registry.resolve(model);
189
+ return info.parameters.find((p) => p.standard === "effort") ?? null;
190
+ }
191
+ catch {
192
+ return null;
193
+ }
194
+ }
195
+ /** Model, params and fallback of a sub-agent (spec §5.4). */
196
+ async function resolveTier(d, orgId, parent, tier) {
197
+ const inherit = {
198
+ model: parent.model,
199
+ modelParams: parent.modelParams,
200
+ fallback: parent.fallback,
201
+ fallbackParams: parent.fallbackParams,
202
+ };
203
+ if (tier === "inherit")
204
+ return { ...inherit, tierFallback: false };
205
+ try {
206
+ const target = await d.purposes.resolve(orgId, `subagent_${tier}`);
207
+ return {
208
+ model: target.model,
209
+ modelParams: target.params,
210
+ fallback: null,
211
+ fallbackParams: {},
212
+ tierFallback: false,
213
+ };
214
+ }
215
+ catch (e) {
216
+ if (e instanceof ApiError && e.code === "model.unconfigured") {
217
+ return { ...inherit, tierFallback: true };
218
+ }
219
+ throw e;
220
+ }
221
+ }
222
+ /** `"{parent name} › {agent type}"`, within the 80-character name limit. */
223
+ const childName = (parent, type) => `${parent} › ${type}`.slice(0, 80);
224
+ function orgAgentDefinition(d, a) {
225
+ // the version the gates checked (checkOrgAgent), never read again here: a version saved in
226
+ // between could be one the gates never saw (batch 3 review M1)
227
+ if (a.orgAgent === undefined) {
228
+ throw new Error(`org agent ${a.entry.type} dispatched without its checked version`);
229
+ }
230
+ const agentId = a.entry.agentId ?? "";
231
+ const own = a.orgAgent.definition;
232
+ const { subagents: _subagents, skills, ...rest } = own;
233
+ const definition = {
234
+ ...rest,
235
+ // its own tools, not intersected with the parent's; only the child-removed ones go
236
+ tools: narrowTools(own.tools, new Map(), null, new Set()),
237
+ // its policies, then the parent's on top, stricter wins (keys outside its tools are inert)
238
+ toolPolicies: stricterPolicies(own.toolPolicies ?? {}, a.parent.toolPolicies ?? {}),
239
+ ...(skills !== undefined && {
240
+ skills: {
241
+ orgSkills: skills.orgSkills,
242
+ ...(skills.pinned !== undefined && { pinned: skills.pinned }),
243
+ },
244
+ }),
245
+ };
246
+ return {
247
+ definition,
248
+ template: { source: "agent", id: agentId, version: a.orgAgent.version },
249
+ maxSteps: d.config().runtime.maxSteps,
250
+ warnings: [],
251
+ model: own.model,
252
+ tierFallback: false,
253
+ };
254
+ }
255
+ /**
256
+ * The effective definition of a sub-agent at its first dispatch (spec §5.3–§5.5):
257
+ * - `general` / `inline` / `plugin`: the parent's definition narrowed by the template (tools by
258
+ * resolved key, `disallowedTools`, {@link CHILD_REMOVED_TOOLS}; policies stricter-wins), the
259
+ * template's instructions, pinned = the template's skills the parent selects (general pins
260
+ * nothing), `maxSteps = min(template ?? runtime.maxSteps, runtime.maxSteps)`, and the model tier
261
+ * `tier` (the call's) → the template's → `inherit`; an unmapped tier runs on the parent's model
262
+ * (`tierFallback`); a template `effort` is set when the resolved model declares it;
263
+ * - `agent`: the org agent's version that passed the gates (`orgAgent`, from {@link checkOrgAgent}),
264
+ * its own tools minus the child-removed ones, its policies with the parent's on top (stricter
265
+ * wins), its skills and model; `tier` ignored.
266
+ * The `subagents` block is never part of a child's definition (depth 1).
267
+ */
268
+ export async function effectiveDefinition(d, a) {
269
+ if (a.entry.source === "agent")
270
+ return orgAgentDefinition(d, a);
271
+ const runtimeMax = d.config().runtime.maxSteps;
272
+ const { parent, entry } = a;
273
+ let template = null;
274
+ let ref = { source: entry.source };
275
+ if (entry.source === "inline") {
276
+ template = parent.subagents?.inline?.find((t) => t.name === entry.type) ?? null;
277
+ if (!template)
278
+ throw new SubagentTypeGoneError(entry.type);
279
+ }
280
+ else if (entry.source === "plugin") {
281
+ const row = (await loadTemplates(d.db, a.orgId, [entry.templateId ?? ""])).get(entry.templateId ?? "");
282
+ if (!row)
283
+ throw new SubagentTypeGoneError(entry.type);
284
+ template = row.template;
285
+ ref = { source: "plugin", id: row.id, version: row.version, plugin: row.plugin };
286
+ }
287
+ const connectors = await loadConnectors(d.db, a.orgId, parent.tools);
288
+ const tools = narrowTools(parent.tools, connectors, template?.tools !== undefined ? new Set(template.tools) : null, new Set(template?.disallowedTools ?? []));
289
+ const toolPolicies = stricterPolicies(parent.toolPolicies ?? {}, template?.toolPolicies ?? {});
290
+ const { pinned, warnings } = await pinnedFor(d.db, a, template?.skills ?? [], entry.source === "plugin" ? { plugin: entry.plugin } : null);
291
+ const tier = a.tier ?? template?.model ?? "inherit";
292
+ const m = await resolveTier(d, a.orgId, parent, tier);
293
+ let modelParams = m.modelParams;
294
+ if (template?.effort !== undefined) {
295
+ const decl = await effortDecl(d.registry, m.model);
296
+ if (decl) {
297
+ const v = sanitizeParams([decl], { [decl.key]: template.effort }).value[decl.key];
298
+ if (v !== undefined)
299
+ modelParams = { ...modelParams, [decl.key]: v };
300
+ }
301
+ }
302
+ const parentSkills = parent.skills;
303
+ const definition = {
304
+ name: childName(parent.name, entry.type),
305
+ avatarUrl: parent.avatarUrl,
306
+ instructions: template?.instructions ?? parent.instructions,
307
+ model: m.model,
308
+ fallback: m.fallback,
309
+ modelParams,
310
+ fallbackParams: m.fallbackParams,
311
+ tools,
312
+ toolPolicies,
313
+ ...((parentSkills !== undefined || pinned.length > 0) && {
314
+ skills: {
315
+ orgSkills: parentSkills?.orgSkills ?? [],
316
+ ...(pinned.length > 0 && { pinned }),
317
+ },
318
+ }),
319
+ };
320
+ return {
321
+ definition,
322
+ template: ref,
323
+ maxSteps: Math.min(template?.maxSteps ?? runtimeMax, runtimeMax),
324
+ warnings,
325
+ model: m.model,
326
+ tierFallback: m.tierFallback,
327
+ };
328
+ }
329
+ /**
330
+ * The refs of `frozen` that `current` still has: a builtin or plugin tool by name, a connector by
331
+ * id; a connector's `all` meets the other side's names (`all` on both stays `all`), and a
332
+ * connector left with no names is dropped. Pure: a connector `current` lists is not looked up.
333
+ */
334
+ export function intersectTools(frozen, current) {
335
+ const out = [];
336
+ for (const ref of frozen) {
337
+ if (ref.kind === "builtin") {
338
+ if (current.some((c) => c.kind === "builtin" && c.name === ref.name))
339
+ out.push(ref);
340
+ }
341
+ else if (ref.kind === "plugin") {
342
+ if (current.some((c) => c.kind === "plugin" && c.plugin === ref.plugin && c.name === ref.name)) {
343
+ out.push(ref);
344
+ }
345
+ }
346
+ else {
347
+ const c = current.find((x) => x.kind === "connector" && x.connectorId === ref.connectorId);
348
+ if (!c)
349
+ continue;
350
+ if (c.tools === "all") {
351
+ out.push(ref);
352
+ continue;
353
+ }
354
+ const names = ref.tools === "all" ? c.tools : ref.tools.filter((n) => c.tools.includes(n));
355
+ if (names.length > 0)
356
+ out.push({ ...ref, tools: names });
357
+ }
358
+ }
359
+ return out;
360
+ }
361
+ /**
362
+ * The narrowing of a follow-up (final review I1): `frozen` (the child's `subagent_started`
363
+ * definition) against `current`, the definition a fresh dispatch would read now: the dispatching
364
+ * parent run's version for `general` / inline / plugin children, the dispatched org agent's
365
+ * current version for an org agent child (whose tools are its own at dispatch too, §5.5). Its
366
+ * `orgSkills` keep only those `current` still selects; a pinned id that was one of the frozen org
367
+ * skills goes with it (the agent's own skills stay).
368
+ */
369
+ export function narrowFollowUp(frozen, current) {
370
+ const tools = intersectTools(frozen.tools, current.tools);
371
+ if (frozen.skills === undefined)
372
+ return { tools };
373
+ const frozenOrg = new Set(frozen.skills.orgSkills);
374
+ const now = new Set(current.skills?.orgSkills ?? []);
375
+ const orgSkills = frozen.skills.orgSkills.filter((id) => now.has(id));
376
+ const pinned = frozen.skills.pinned?.filter((id) => !frozenOrg.has(id) || now.has(id));
377
+ return { tools, skills: { orgSkills, ...(pinned !== undefined && { pinned }) } };
378
+ }
379
+ /** The definition a child run uses: the frozen one with its trigger's follow-up narrowing. */
380
+ export function childRunDefinition(frozen, narrowed) {
381
+ if (narrowed === undefined)
382
+ return frozen;
383
+ const { skills, ...rest } = frozen;
384
+ const kept = skills === undefined || narrowed.skills === undefined
385
+ ? skills
386
+ : {
387
+ ...skills,
388
+ orgSkills: narrowed.skills.orgSkills,
389
+ ...(narrowed.skills.pinned !== undefined && { pinned: narrowed.skills.pinned }),
390
+ };
391
+ return { ...rest, tools: narrowed.tools, ...(kept !== undefined && { skills: kept }) };
392
+ }
@@ -0,0 +1,69 @@
1
+ import type { Logger } from "@capybara-hq/plugin-sdk";
2
+ import { type AgentDefinition } from "../../agents/definition.js";
3
+ import type { KernelConfig } from "../../config/schema.js";
4
+ import type { EventLog } from "../../conversations/event-log.js";
5
+ import type { EventPayload } from "../../conversations/events.js";
6
+ import type { ConversationKind, KernelDb } from "../../db/kernel-schema.js";
7
+ import type { ModelPurposesService } from "../../models/purposes.js";
8
+ import { type AgentToolInputT } from "../../tools/builtins/agent.js";
9
+ import type { ToolStepContext } from "../../tools/pipeline.js";
10
+ import type { ProviderRegistry } from "../providers.js";
11
+ import { type RunJobData } from "../run-queue.js";
12
+ export interface DispatchDeps {
13
+ db: KernelDb;
14
+ eventLog: EventLog;
15
+ purposes: Pick<ModelPurposesService, "resolve">;
16
+ registry: Pick<ProviderRegistry, "resolve">;
17
+ config: () => KernelConfig;
18
+ /** Enqueues a child run (on the sub-agent run queue: `kind` is always `subagent`). */
19
+ enqueue: (data: RunJobData, jobId: string, kind: ConversationKind) => Promise<void>;
20
+ log: Pick<Logger, "error" | "warn">;
21
+ }
22
+ export type DispatchOutcome = {
23
+ kind: "dispatched";
24
+ childRunId: string;
25
+ } | {
26
+ kind: "refused";
27
+ content: string;
28
+ };
29
+ /**
30
+ * A dispatch for a person's fork invocation (phase D spec §6.2, `advanceSkillForks`), not for a
31
+ * model's `agent` call: `general-purpose` is always available (the `agent` tool and
32
+ * `subagents.general` do not gate it), an unknown type falls back to it with a warning, and the
33
+ * child records the invoked skill.
34
+ */
35
+ export interface SkillForkDispatch {
36
+ /** The invocation message's seq. */
37
+ seq: number;
38
+ /** The invocation record (`user_message.skill`), also put on the child's task message. */
39
+ skill: NonNullable<EventPayload<"user_message">["skill"]>;
40
+ /** Warnings decided when rendering the task (`SkillInvoker.renderTask`). */
41
+ warnings: string[];
42
+ /** The task for the sub-agent's effective definition (replaces `input.prompt`). */
43
+ task: (child: AgentDefinition) => string;
44
+ }
45
+ /** Idempotency key of the parent's `subagent_dispatched` event. */
46
+ export declare const dispatchedIdemKey: (runId: string, callId: string) => string;
47
+ /**
48
+ * Dispatches the sub-agent of one `agent` call (spec §7.1), after the pipeline's validation,
49
+ * policy, approval and `tool.preExecute` stages. A new sub-agent: resolves its type and effective
50
+ * definition, then in one transaction (holding the parent run's row lock, so the dispatches of one
51
+ * run serialize) inserts the child conversation, appends `subagent_started` and the task message,
52
+ * inserts the child run (`queued`) and the `subagent_dispatches` row, appends `subagent_dispatched`
53
+ * to the parent and audits `subagent.dispatched`. A `resume` appends the follow-up message and
54
+ * starts the child's next run the same way. After commit the child run is enqueued; a failed
55
+ * enqueue only logs (the dispatch is durable, the wait sweep re-enqueues it).
56
+ *
57
+ * Refusals (§4.5) start nothing: a call from a sub-agent, an unknown type, an org agent that fails
58
+ * one of its gates ({@link orgAgentGates}, at every dispatch and follow-up; audited
59
+ * `subagent.refused`), `resume` with `subagent_type` / `model`, a `resume` id that is not a
60
+ * sub-agent of this conversation (whatever it is otherwise: no detail about other conversations),
61
+ * or one whose run is still active.
62
+ */
63
+ export declare function dispatchSubagent(d: DispatchDeps, a: {
64
+ ctx: ToolStepContext;
65
+ callId: string;
66
+ input: AgentToolInputT;
67
+ /** Phase D: a person's fork invocation (see {@link SkillForkDispatch}). */
68
+ forSkill?: SkillForkDispatch;
69
+ }): Promise<DispatchOutcome>;