@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,81 @@
1
+ import type { ToolSpec } from "@capybara-hq/plugin-sdk";
2
+ import { z } from "zod";
3
+ import type { EventPayload } from "../../conversations/events.js";
4
+ import { type RosterEntry } from "../../runtime/subagents/roster.js";
5
+ import type { BuiltinTool } from "../registry.js";
6
+ /**
7
+ * The `agent` builtin tool (sub-agents spec §4): dispatches a sub-agent. Its description is built
8
+ * per parent agent version from the roster ({@link agentToolSpec}); the tool pipeline handles the
9
+ * call itself (dispatch, suspend, resume), so {@link agentTool}'s `run` is only a guard.
10
+ */
11
+ export declare const AGENT_TOOL = "agent";
12
+ /** How a sub-agent's run ended (`subagent_finished.status`). */
13
+ export type SubagentStatus = EventPayload<"subagent_finished">["status"];
14
+ /** The input of an `agent` call (§4.2). */
15
+ export declare const AgentToolInput: z.ZodObject<{
16
+ description: z.ZodString;
17
+ prompt: z.ZodString;
18
+ subagent_type: z.ZodOptional<z.ZodString>;
19
+ model: z.ZodOptional<z.ZodEnum<{
20
+ capable: "capable";
21
+ fast: "fast";
22
+ inherit: "inherit";
23
+ standard: "standard";
24
+ }>>;
25
+ resume: z.ZodOptional<z.ZodString>;
26
+ }, z.core.$strict>;
27
+ export type AgentToolInputT = z.infer<typeof AgentToolInput>;
28
+ /**
29
+ * The `agent` tool definition of a parent agent version (§4.3): the fixed text with
30
+ * `maxConcurrent`, then one line per roster entry in roster order. Built at tool resolution, so the
31
+ * spec hash changes with the roster or the limit (logged per request in `tool_specs`).
32
+ */
33
+ export declare function agentToolSpec(roster: readonly RosterEntry[], maxConcurrent: number): ToolSpec;
34
+ /** Refusals (§4.5): `isError` results written without starting anything (model-visible). */
35
+ export declare const AGENT_REFUSALS: {
36
+ readonly unknownType: (x: string, roster: readonly string[]) => string;
37
+ readonly tooManyConcurrent: (n: number) => string;
38
+ readonly tooManyDispatches: (n: number) => string;
39
+ readonly budget: (n: number) => string;
40
+ readonly noSuchAgent: (id: string) => string;
41
+ readonly stillRunning: (id: string) => string;
42
+ readonly resumeWithType: "resume cannot be combined with subagent_type or model.";
43
+ readonly notAvailableHere: "Sub-agents are not available in this conversation.";
44
+ readonly agentNotAvailable: (name: string) => string;
45
+ };
46
+ /**
47
+ * The parent run was stopped while this sub-agent worked (§4.4, §12): the result of a stopped
48
+ * parent's open `agent` call, and the text of a child stopped with its parent.
49
+ */
50
+ export declare const AGENT_STOPPED_WITH_RUN_TEXT = "The run was stopped while this sub-agent was working; it was stopped too.";
51
+ /**
52
+ * The tool result of a finished sub-agent (§4.4): the text for how its run ended, a blank line, and
53
+ * the status line with its `agentId`. `ownModel`: an org agent dispatched with a `model` that was
54
+ * ignored. `abortedBy: "parent"`: stopped together with the parent run (seen only in logs).
55
+ */
56
+ export declare function agentResultText(r: {
57
+ reply: string;
58
+ agentId: string;
59
+ status: SubagentStatus;
60
+ errorCode?: string;
61
+ errorMessage?: string;
62
+ toolCalls: number;
63
+ durationMs: number;
64
+ tokens: number;
65
+ ownModel?: boolean;
66
+ abortedBy?: "user" | "parent";
67
+ /**
68
+ * Phase D: the report of a person's fork invocation, whose parent need not have the `agent`
69
+ * tool: the status line leaves out the resume hint (batch 3 review m2).
70
+ */
71
+ noResumeHint?: boolean;
72
+ }): {
73
+ content: string;
74
+ isError: boolean;
75
+ };
76
+ /**
77
+ * The builtin. `defaultPolicy: "allow"` (§4.6): a sub-agent runs only tools its parent may run,
78
+ * each under its own policy. The tool pipeline dispatches `agent` calls itself; `run` answers only
79
+ * when a call reaches it anyway.
80
+ */
81
+ export declare const agentTool: BuiltinTool;
@@ -0,0 +1,223 @@
1
+ import { z } from "zod";
2
+ import { ROSTER_DESCRIPTION_MAX } from "../../runtime/subagents/roster.js";
3
+ /**
4
+ * The `agent` builtin tool (sub-agents spec §4): dispatches a sub-agent. Its description is built
5
+ * per parent agent version from the roster ({@link agentToolSpec}); the tool pipeline handles the
6
+ * call itself (dispatch, suspend, resume), so {@link agentTool}'s `run` is only a guard.
7
+ */
8
+ export const AGENT_TOOL = "agent";
9
+ /** The input of an `agent` call (§4.2). */
10
+ export const AgentToolInput = z
11
+ .object({
12
+ description: z.string().min(1).max(80),
13
+ prompt: z.string().min(1).max(100_000),
14
+ subagent_type: z.string().min(1).max(130).optional(),
15
+ model: z.enum(["inherit", "fast", "standard", "capable"]).optional(),
16
+ resume: z.string().max(64).optional(),
17
+ })
18
+ .strict();
19
+ /** Display only (UI refresh B): the task name, then the type; never sent to the model. */
20
+ const KEY_ARGS = ["description", "subagent_type"];
21
+ const INPUT_SCHEMA = {
22
+ type: "object",
23
+ properties: {
24
+ description: {
25
+ type: "string",
26
+ minLength: 1,
27
+ maxLength: 80,
28
+ description: "A short label for the task (3 to 6 words), shown to the user.",
29
+ },
30
+ prompt: {
31
+ type: "string",
32
+ minLength: 1,
33
+ maxLength: 100000,
34
+ description: "The complete task for the sub-agent. It sees nothing else of this conversation: include " +
35
+ "every fact, file path and constraint it needs, and say what its final reply must contain.",
36
+ },
37
+ subagent_type: {
38
+ type: "string",
39
+ minLength: 1,
40
+ maxLength: 130,
41
+ description: "Which agent type to run, from the list in this tool's description. Defaults to " +
42
+ "general-purpose.",
43
+ },
44
+ model: {
45
+ type: "string",
46
+ enum: ["inherit", "fast", "standard", "capable"],
47
+ description: "Model tier for this sub-agent: fast and cheap for mechanical work, standard for " +
48
+ "integration and judgment, capable for design and final reviews. Defaults to the agent " +
49
+ "type's own setting, else your model.",
50
+ },
51
+ resume: {
52
+ type: "string",
53
+ maxLength: 64,
54
+ description: "The agentId from an earlier result of this tool: sends prompt to that sub-agent as a " +
55
+ "follow-up, with its earlier context intact. Leave subagent_type and model unset.",
56
+ },
57
+ },
58
+ required: ["description", "prompt"],
59
+ additionalProperties: false,
60
+ };
61
+ /** The text before the roster (§4.3), with the concurrency limit. */
62
+ const head = (maxConcurrent) => "Dispatch a sub-agent: a fresh agent with its own context that works on one task and returns its " +
63
+ "final reply as this tool's result. The sub-agent sees only your prompt, not this conversation, so " +
64
+ "include everything it needs and say what its final reply must contain. It shares your sandbox " +
65
+ "files. You wait until it finishes. To run several at once, call this tool several times in the " +
66
+ `same response (at most ${maxConcurrent} at a time); their commands run in the sandbox at the ` +
67
+ "same time, so give parallel sub-agents separate files or directories. Sub-agents cannot " +
68
+ "dispatch sub-agents or ask the user questions. To send a finished sub-agent a follow-up while " +
69
+ "keeping its context, pass the agentId from its result as resume.\n" +
70
+ "\n" +
71
+ "Agent types (subagent_type):\n";
72
+ /**
73
+ * Roster text from owners and plugins, made inert (batch 1 review M1): whitespace runs (newlines
74
+ * included) become one space, so an entry stays one line and cannot add entries or sections, and
75
+ * `<` / `>` become `‹` / `›`, so no tag can be opened or closed (Claude agent descriptions carry
76
+ * `<example>` blocks; they stay readable). Length-preserving apart from the whitespace.
77
+ */
78
+ const inert = (s) => s.replace(/\s+/g, " ").trim().replaceAll("<", "‹").replaceAll(">", "›");
79
+ function rosterLine(e) {
80
+ const description = inert(e.description).slice(0, ROSTER_DESCRIPTION_MAX);
81
+ const line = `- ${inert(e.type)}: ${description}`;
82
+ if (e.source !== "agent")
83
+ return line;
84
+ return e.agentName === undefined
85
+ ? `${line} (another agent, with its own tools and model)`
86
+ : `${line} (the agent "${inert(e.agentName).replaceAll('"', "'")}", with its own tools and model)`;
87
+ }
88
+ /**
89
+ * The `agent` tool definition of a parent agent version (§4.3): the fixed text with
90
+ * `maxConcurrent`, then one line per roster entry in roster order. Built at tool resolution, so the
91
+ * spec hash changes with the roster or the limit (logged per request in `tool_specs`).
92
+ */
93
+ export function agentToolSpec(roster, maxConcurrent) {
94
+ return {
95
+ name: AGENT_TOOL,
96
+ description: head(maxConcurrent) + roster.map(rosterLine).join("\n"),
97
+ inputSchema: INPUT_SCHEMA,
98
+ keyArgs: KEY_ARGS,
99
+ };
100
+ }
101
+ /**
102
+ * The static definition: the rendering for a roster of only general-purpose at the default
103
+ * `subagents.maxConcurrentPerRun` (what an agent without `subagents` gets under the defaults).
104
+ * Written out as a literal for the tool design check; a test pins it equal to
105
+ * `agentToolSpec([general-purpose], 4)`.
106
+ */
107
+ const SPEC = {
108
+ name: "agent",
109
+ description: "Dispatch a sub-agent: a fresh agent with its own context that works on one task and returns its " +
110
+ "final reply as this tool's result. The sub-agent sees only your prompt, not this conversation, so " +
111
+ "include everything it needs and say what its final reply must contain. It shares your sandbox " +
112
+ "files. You wait until it finishes. To run several at once, call this tool several times in the " +
113
+ "same response (at most 4 at a time); their commands run in the sandbox at the same time, so give " +
114
+ "parallel sub-agents separate files or directories. Sub-agents cannot dispatch sub-agents or ask " +
115
+ "the user questions. To send a finished sub-agent a follow-up while keeping its context, pass the " +
116
+ "agentId from its result as resume.\n" +
117
+ "\n" +
118
+ "Agent types (subagent_type):\n" +
119
+ "- general-purpose: a copy of you with your tools and skills, for multi-step work.",
120
+ inputSchema: INPUT_SCHEMA,
121
+ keyArgs: KEY_ARGS,
122
+ };
123
+ /** Refusals (§4.5): `isError` results written without starting anything (model-visible). */
124
+ export const AGENT_REFUSALS = {
125
+ unknownType: (x, roster) => `Unknown subagent_type "${x}". Available: ${roster.join(", ")}.`,
126
+ tooManyConcurrent: (n) => `At most ${n} sub-agents can run at once in this run; dispatch the remaining tasks after these finish.`,
127
+ tooManyDispatches: (n) => `This run has dispatched ${n} sub-agents, the limit; do the remaining work yourself.`,
128
+ budget: (n) => `Sub-agents of this run have used their token budget (${count(n)} tokens); do the remaining work yourself.`,
129
+ noSuchAgent: (id) => `No sub-agent with agentId "${id}" in this conversation.`,
130
+ stillRunning: (id) => `Sub-agent "${id}" is still running; wait for its result before sending a follow-up.`,
131
+ resumeWithType: "resume cannot be combined with subagent_type or model.",
132
+ notAvailableHere: "Sub-agents are not available in this conversation.",
133
+ agentNotAvailable: (name) => `The agent "${name}" is not available to the person who started this conversation; do this task yourself or use another agent type.`,
134
+ };
135
+ /**
136
+ * The parent run was stopped while this sub-agent worked (§4.4, §12): the result of a stopped
137
+ * parent's open `agent` call, and the text of a child stopped with its parent.
138
+ */
139
+ export const AGENT_STOPPED_WITH_RUN_TEXT = "The run was stopped while this sub-agent was working; it was stopped too.";
140
+ /** `12345` → `12,345` (no locale data involved, so the text is the same on every replica). */
141
+ const count = (n) => String(Math.round(n)).replace(/\B(?=(\d{3})+(?!\d))/g, ",");
142
+ /** `4s`, `1m 05s`, `1h 02m`. */
143
+ function duration(ms) {
144
+ const s = Math.round(ms / 1000);
145
+ if (s < 60)
146
+ return `${s}s`;
147
+ if (s < 3600)
148
+ return `${Math.floor(s / 60)}m ${String(s % 60).padStart(2, "0")}s`;
149
+ return `${Math.floor(s / 3600)}h ${String(Math.floor((s % 3600) / 60)).padStart(2, "0")}m`;
150
+ }
151
+ /**
152
+ * The tool result of a finished sub-agent (§4.4): the text for how its run ended, a blank line, and
153
+ * the status line with its `agentId`. `ownModel`: an org agent dispatched with a `model` that was
154
+ * ignored. `abortedBy: "parent"`: stopped together with the parent run (seen only in logs).
155
+ */
156
+ export function agentResultText(r) {
157
+ const reply = r.reply.trim();
158
+ let status;
159
+ let text;
160
+ let isError = true;
161
+ switch (r.status) {
162
+ case "completed":
163
+ [status, text, isError] = ["completed", reply, false];
164
+ break;
165
+ case "max_steps":
166
+ [status, text, isError] = [
167
+ "stopped at the step limit; the reply may be partial",
168
+ reply,
169
+ false,
170
+ ];
171
+ break;
172
+ case "max_duration":
173
+ status = "stopped at the time limit; the reply may be partial";
174
+ text = reply === "" ? "The sub-agent produced no reply before the time limit." : reply;
175
+ isError = false;
176
+ break;
177
+ case "budget":
178
+ [status, text] = ["stopped: token budget used up", reply];
179
+ break;
180
+ case "aborted":
181
+ [status, text] =
182
+ r.abortedBy === "parent"
183
+ ? ["stopped with this run", AGENT_STOPPED_WITH_RUN_TEXT]
184
+ : ["stopped by the user", "The user stopped this sub-agent."];
185
+ break;
186
+ case "timed_out":
187
+ // the parent's sub-agents wait timed out (§7.2) and stopped it; the parent goes on
188
+ [status, text] = ["timed out", "stopped: the sub-agent wait timed out"];
189
+ break;
190
+ case "failed":
191
+ status = r.errorCode === undefined ? "failed" : `failed (${r.errorCode})`;
192
+ text =
193
+ r.errorMessage === undefined
194
+ ? "The sub-agent failed."
195
+ : `The sub-agent failed: ${r.errorMessage}`;
196
+ break;
197
+ }
198
+ const parts = [
199
+ `agentId: ${r.agentId}`,
200
+ status,
201
+ ...(r.ownModel === true ? ["model: the agent's own"] : []),
202
+ `${r.toolCalls} tool ${r.toolCalls === 1 ? "call" : "calls"}`,
203
+ duration(r.durationMs),
204
+ r.noResumeHint === true
205
+ ? `${count(r.tokens)} tokens.`
206
+ : `${count(r.tokens)} tokens. Pass the agentId as resume to send this sub-agent a follow-up.`,
207
+ ];
208
+ const line = `[${parts.join(" · ")}]`;
209
+ return { content: text === "" ? line : `${text}\n\n${line}`, isError };
210
+ }
211
+ /**
212
+ * The builtin. `defaultPolicy: "allow"` (§4.6): a sub-agent runs only tools its parent may run,
213
+ * each under its own policy. The tool pipeline dispatches `agent` calls itself; `run` answers only
214
+ * when a call reaches it anyway.
215
+ */
216
+ export const agentTool = {
217
+ spec: SPEC,
218
+ defaultPolicy: "allow",
219
+ run: async () => ({
220
+ content: [{ type: "text", text: AGENT_REFUSALS.notAvailableHere }],
221
+ isError: true,
222
+ }),
223
+ };
@@ -0,0 +1,28 @@
1
+ import { type FormAnswer, type InputForm } from "@capybara-hq/plugin-sdk";
2
+ import type { KernelConfig } from "../../config/schema.js";
3
+ import type { BuiltinTool } from "../registry.js";
4
+ interface Question {
5
+ question: string;
6
+ header: string;
7
+ multiSelect: boolean;
8
+ options: {
9
+ label: string;
10
+ description: string;
11
+ }[];
12
+ }
13
+ /**
14
+ * 问题 → 表单(每个问题一个枚举字段)。InputForm 没有「选项说明」:header 与各选项说明写进字段说明,
15
+ * 每个选项一行 `- <label>: <description>`。
16
+ */
17
+ export declare function questionsForm(questions: Question[]): InputForm;
18
+ /** 答案 → 给模型的结果文本:`User answered: "<question>" = "<answer>"; …`。 */
19
+ export declare function answerText(questions: Question[], answer: FormAnswer): string;
20
+ /**
21
+ * 内置工具 `ask_user`:用通用的输入请求机制实现——首次调用返回 `input_required`,
22
+ * 内核暂停运行并展示表单;用户回答(或超时)后用同一 input 再次调用,按 `ctx.resume` 生成结果。
23
+ * 默认 allow(提问本身就是让用户参与,不再审批)。
24
+ */
25
+ export declare function askUserTool(deps: {
26
+ config: () => KernelConfig;
27
+ }): BuiltinTool;
28
+ export {};
@@ -0,0 +1,139 @@
1
+ import { ToolError } from "@capybara-hq/plugin-sdk";
2
+ const SPEC = {
3
+ name: "ask_user",
4
+ description: "Ask the user one or more multiple-choice questions and wait for the answers. Use it when you " +
5
+ "need the user's preference or decision to continue, or when a request is ambiguous; do not use " +
6
+ "it for questions you can answer yourself. Each question has a short header, 2-4 options with a " +
7
+ "label and a description, and can allow selecting several options (multiSelect). The user can " +
8
+ "always choose Other and type their own answer instead. The run pauses until the user answers; " +
9
+ "if they do not answer in time, the result says so.",
10
+ inputSchema: {
11
+ type: "object",
12
+ properties: {
13
+ questions: {
14
+ type: "array",
15
+ minItems: 1,
16
+ maxItems: 4,
17
+ description: "Questions to ask (1-4).",
18
+ items: {
19
+ type: "object",
20
+ properties: {
21
+ question: {
22
+ type: "string",
23
+ minLength: 1,
24
+ description: "The complete question, ending with a question mark.",
25
+ },
26
+ header: {
27
+ type: "string",
28
+ minLength: 1,
29
+ maxLength: 12,
30
+ description: 'A very short label for the question (max 12 chars), e.g. "Database".',
31
+ },
32
+ multiSelect: {
33
+ type: "boolean",
34
+ description: "Allow the user to select more than one option.",
35
+ },
36
+ options: {
37
+ type: "array",
38
+ minItems: 2,
39
+ maxItems: 4,
40
+ description: "The choices (2-4). Do not add an Other option; it is always offered.",
41
+ items: {
42
+ type: "object",
43
+ properties: {
44
+ label: {
45
+ type: "string",
46
+ minLength: 1,
47
+ description: "Short text of the choice (1-5 words).",
48
+ },
49
+ description: {
50
+ type: "string",
51
+ description: "What this choice means or implies.",
52
+ },
53
+ },
54
+ required: ["label", "description"],
55
+ additionalProperties: false,
56
+ },
57
+ },
58
+ },
59
+ required: ["question", "header", "multiSelect", "options"],
60
+ additionalProperties: false,
61
+ },
62
+ },
63
+ },
64
+ required: ["questions"],
65
+ additionalProperties: false,
66
+ },
67
+ };
68
+ /** 第 i 个问题的字段 key。 */
69
+ const fieldKey = (i) => `q${i}`;
70
+ /**
71
+ * 问题 → 表单(每个问题一个枚举字段)。InputForm 没有「选项说明」:header 与各选项说明写进字段说明,
72
+ * 每个选项一行 `- <label>: <description>`。
73
+ */
74
+ export function questionsForm(questions) {
75
+ return {
76
+ title: questions.map((q) => q.header).join(" · "),
77
+ fields: questions.map((q, i) => ({
78
+ key: fieldKey(i),
79
+ label: q.question,
80
+ description: [
81
+ q.header,
82
+ ...q.options.map((o) => o.description === "" ? `- ${o.label}` : `- ${o.label}: ${o.description}`),
83
+ ].join("\n"),
84
+ schema: { type: "string", enum: q.options.map((o) => o.label) },
85
+ multiSelect: q.multiSelect,
86
+ allowOther: true,
87
+ required: true,
88
+ })),
89
+ };
90
+ }
91
+ /** 答案 → 给模型的结果文本:`User answered: "<question>" = "<answer>"; …`。 */
92
+ export function answerText(questions, answer) {
93
+ const parts = questions.map((q, i) => {
94
+ const v = answer[fieldKey(i)];
95
+ const text = v === undefined ? "(no answer)" : Array.isArray(v) ? v.join(", ") : String(v);
96
+ return `"${q.question}" = "${text}"`;
97
+ });
98
+ return `User answered: ${parts.join("; ")}`;
99
+ }
100
+ /** 给模型的结果文本 + 给界面的一句话说明(中英文,不进模型上下文)。 */
101
+ const text = (t, zh, en) => ({
102
+ content: [{ type: "text", text: t }],
103
+ display: { summary: { zh, en } },
104
+ });
105
+ /**
106
+ * 内置工具 `ask_user`:用通用的输入请求机制实现——首次调用返回 `input_required`,
107
+ * 内核暂停运行并展示表单;用户回答(或超时)后用同一 input 再次调用,按 `ctx.resume` 生成结果。
108
+ * 默认 allow(提问本身就是让用户参与,不再审批)。
109
+ */
110
+ export function askUserTool(deps) {
111
+ return {
112
+ spec: SPEC,
113
+ defaultPolicy: "allow",
114
+ async run(input, ctx) {
115
+ const { questions } = input;
116
+ if (ctx.resume) {
117
+ const { answer, state } = ctx.resume;
118
+ if (answer !== null) {
119
+ const n = questions.length;
120
+ return text(answerText(questions, answer), `用户回答了 ${n} 个问题`, `User answered ${n} question${n === 1 ? "" : "s"}`);
121
+ }
122
+ const hours = state?.hours;
123
+ // 运行在等待中被中止时内核直接写取消说明,不会再调用工具;能走到这里的 null 只有超时
124
+ // (以及未来的「用户关闭提问」,那时 state 不带小时数)。
125
+ return typeof hours === "number"
126
+ ? text(`The user did not answer within ${hours}h.`, `用户未在 ${hours} 小时内回答`, `No answer within ${hours}h`)
127
+ : text("The user dismissed the question.", "用户关闭了提问", "User dismissed the question");
128
+ }
129
+ for (const q of questions) {
130
+ const labels = q.options.map((o) => o.label);
131
+ if (new Set(labels).size !== labels.length) {
132
+ throw new ToolError(`Option labels must be unique within a question; "${q.question}" has duplicates. Provide distinct labels.`);
133
+ }
134
+ }
135
+ const state = { hours: deps.config().tools.approvalTimeoutHours };
136
+ return { kind: "input_required", form: questionsForm(questions), state };
137
+ },
138
+ };
139
+ }
@@ -0,0 +1,18 @@
1
+ import type { KernelConfig } from "../../config/schema.js";
2
+ import { type ToolOutputs } from "../outputs.js";
3
+ import type { BuiltinTool } from "../registry.js";
4
+ /**
5
+ * 按行分页读取:从 `offset` 行(第一行从 `charOffset` 字符起)读最多 `limit` 行,正文不超过 `budget` 个字符。
6
+ * 正文按整行截止;只有第一行本身就超过上限时按字符切,并写明续读位置。结尾写 `[Lines a–b of total]`(0 起)。
7
+ */
8
+ export declare function readPage(id: string, content: string, opts: {
9
+ offset: number;
10
+ limit: number;
11
+ charOffset: number;
12
+ budget: number;
13
+ }): string;
14
+ /** 内置工具 `read_tool_output`:读本会话未过期的输出存档(只读、默认 allow)。 */
15
+ export declare function readToolOutputTool(deps: {
16
+ outputs: Pick<ToolOutputs, "load">;
17
+ config: () => KernelConfig;
18
+ }): BuiltinTool;
@@ -0,0 +1,108 @@
1
+ import { ToolError } from "@capybara-hq/plugin-sdk";
2
+ import { outputNotFoundText } from "../outputs.js";
3
+ /** 默认一次读的行数。 */
4
+ const DEFAULT_LIMIT = 200;
5
+ /**
6
+ * 给尾部说明留的字符数:正文上限同时不超过 `outputSpillChars - FOOTER_RESERVE`,
7
+ * 读取结果本身不会因超过转存阈值被再次转存。
8
+ */
9
+ const FOOTER_RESERVE = 200;
10
+ const SPEC = {
11
+ name: "read_tool_output",
12
+ description: "Read a saved tool output by its id, page by page. Large tool results are truncated in the " +
13
+ "conversation and saved in full; the truncation notice gives the output id. Lines are numbered " +
14
+ "from 0. Each call returns up to `limit` lines starting at line `offset`, capped at a maximum " +
15
+ "number of characters, and ends with `[Lines <a>–<b> of <total>]`; continue with offset=<b+1>. " +
16
+ "If a single line is too long, it is cut and the result says which offset and charOffset to " +
17
+ "call again with. Outputs expire after a retention period.",
18
+ inputSchema: {
19
+ type: "object",
20
+ properties: {
21
+ id: {
22
+ type: "string",
23
+ minLength: 1,
24
+ description: "The output id from the truncation notice.",
25
+ },
26
+ offset: {
27
+ type: "integer",
28
+ minimum: 0,
29
+ description: "First line to read (0-based). Default 0.",
30
+ },
31
+ limit: {
32
+ type: "integer",
33
+ minimum: 1,
34
+ description: `Maximum number of lines to read. Default ${DEFAULT_LIMIT}.`,
35
+ },
36
+ charOffset: {
37
+ type: "integer",
38
+ minimum: 0,
39
+ description: "Character position to start from within the first line (only to continue a cut line). Default 0.",
40
+ },
41
+ },
42
+ required: ["id"],
43
+ additionalProperties: false,
44
+ },
45
+ annotations: { readOnlyHint: true },
46
+ };
47
+ /**
48
+ * 按行分页读取:从 `offset` 行(第一行从 `charOffset` 字符起)读最多 `limit` 行,正文不超过 `budget` 个字符。
49
+ * 正文按整行截止;只有第一行本身就超过上限时按字符切,并写明续读位置。结尾写 `[Lines a–b of total]`(0 起)。
50
+ */
51
+ export function readPage(id, content, opts) {
52
+ const lines = content.split("\n");
53
+ const total = lines.length;
54
+ const { offset, limit, charOffset, budget } = opts;
55
+ if (offset >= total) {
56
+ throw new ToolError(`Offset ${offset} is past the end of output ${id} (${total} lines). Use an offset below ${total}.`);
57
+ }
58
+ const first = lines[offset];
59
+ if (charOffset > 0 && charOffset >= first.length) {
60
+ throw new ToolError(`charOffset ${charOffset} is past the end of line ${offset} (${first.length} characters). Use a charOffset below ${first.length}.`);
61
+ }
62
+ const end = Math.min(total, offset + limit);
63
+ const parts = [];
64
+ let used = 0;
65
+ let last = offset;
66
+ let cut = null;
67
+ for (let i = offset; i < end; i++) {
68
+ const text = i === offset ? first.slice(charOffset) : lines[i];
69
+ const cost = (parts.length > 0 ? 1 : 0) + text.length;
70
+ if (used + cost <= budget) {
71
+ parts.push(text);
72
+ used += cost;
73
+ last = i;
74
+ continue;
75
+ }
76
+ if (parts.length === 0) {
77
+ // 这一行本身就超过上限:按字符切
78
+ parts.push(text.slice(0, budget));
79
+ last = i;
80
+ const next = charOffset + budget;
81
+ cut = `[Line ${i} continues; call again with offset=${i} charOffset=${next}]`;
82
+ }
83
+ break;
84
+ }
85
+ const footer = `[Lines ${offset}–${last} of ${total}]`;
86
+ return [parts.join("\n"), ...(cut === null ? [] : [cut]), footer].join("\n");
87
+ }
88
+ /** 内置工具 `read_tool_output`:读本会话未过期的输出存档(只读、默认 allow)。 */
89
+ export function readToolOutputTool(deps) {
90
+ return {
91
+ spec: SPEC,
92
+ defaultPolicy: "allow",
93
+ async run(input, ctx) {
94
+ const { id, offset = 0, limit = DEFAULT_LIMIT, charOffset = 0 } = input;
95
+ const content = await deps.outputs.load({ orgId: ctx.orgId, conversationId: ctx.conversationId }, id);
96
+ if (content === null)
97
+ throw new ToolError(outputNotFoundText(id));
98
+ const cfg = deps.config().tools;
99
+ const budget = Math.max(1, Math.min(cfg.maxResultReadChars, cfg.outputSpillChars - FOOTER_RESERVE));
100
+ return {
101
+ content: [
102
+ { type: "text", text: readPage(id, content, { offset, limit, charOffset, budget }) },
103
+ ],
104
+ display: { summary: { zh: `已读取输出 ${id}`, en: `Read output ${id}` } },
105
+ };
106
+ },
107
+ };
108
+ }
@@ -0,0 +1,16 @@
1
+ import { type ExecResult } from "@capybara-hq/plugin-sdk";
2
+ import type { BuiltinTool } from "../../registry.js";
3
+ import { type SandboxToolDeps } from "./common.js";
4
+ /** 不给 `timeoutSeconds` 时的命令超时(秒),不超过 `sandbox.limits.maxCommandSeconds`。 */
5
+ export declare const BASH_DEFAULT_TIMEOUT_SECONDS = 120;
6
+ /** The longest `description` (the shell row shows it instead of the command). */
7
+ export declare const BASH_DESCRIPTION_MAX_CHARS = 120;
8
+ /** bash 结果超过这么多字符即转存(走现有输出存档,模型用 read_tool_output 分页读)。 */
9
+ export declare const BASH_SPILL_CHARS = 30000;
10
+ /**
11
+ * 命令结果 → 给模型的文本。`budgetClamped`:运行的时限把超时收紧到了 `seconds`(Ruling M20),超时说明改为
12
+ * 指向 `runtime.maxRunSeconds`,而不是让模型加大 timeoutSeconds。
13
+ */
14
+ export declare function formatExec(r: ExecResult, seconds: number, budgetClamped?: boolean): string;
15
+ /** 内置工具 `sandbox_bash`:在本对话的沙箱里执行命令。 */
16
+ export declare function sandboxBashTool(deps: SandboxToolDeps): BuiltinTool;