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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (534) hide show
  1. package/bootstrap.json +61 -5
  2. package/dist/admin/admin.controller.d.ts +51 -14
  3. package/dist/admin/admin.controller.js +60 -19
  4. package/dist/admin/extensions.controller.d.ts +16 -2
  5. package/dist/admin/extensions.controller.js +26 -6
  6. package/dist/admin/setup-lock.d.ts +1 -1
  7. package/dist/admin/setup-lock.js +1 -1
  8. package/dist/admin/setup.controller.d.ts +1 -1
  9. package/dist/admin/setup.controller.js +1 -1
  10. package/dist/admin/setup.service.d.ts +4 -4
  11. package/dist/admin/setup.service.js +8 -8
  12. package/dist/agents/agent-lookup.d.ts +16 -0
  13. package/dist/agents/agent-lookup.js +11 -0
  14. package/dist/agents/agents.controller.d.ts +76 -1
  15. package/dist/agents/agents.controller.js +90 -11
  16. package/dist/agents/agents.module.d.ts +4 -1
  17. package/dist/agents/agents.module.js +32 -6
  18. package/dist/agents/agents.service.d.ts +54 -23
  19. package/dist/agents/agents.service.js +180 -76
  20. package/dist/agents/definition.d.ts +49 -0
  21. package/dist/agents/definition.js +45 -0
  22. package/dist/agents/from-template.d.ts +106 -0
  23. package/dist/agents/from-template.js +649 -0
  24. package/dist/agents/from-template.service.d.ts +60 -0
  25. package/dist/agents/from-template.service.js +161 -0
  26. package/dist/agents/models.controller.d.ts +34 -5
  27. package/dist/agents/models.controller.js +50 -6
  28. package/dist/agents/org-templates.d.ts +176 -0
  29. package/dist/agents/org-templates.js +827 -0
  30. package/dist/agents/pending-connector-requests.d.ts +77 -0
  31. package/dist/agents/pending-connector-requests.js +215 -0
  32. package/dist/agents/pending-connectors.controller.d.ts +39 -0
  33. package/dist/agents/pending-connectors.controller.js +91 -0
  34. package/dist/agents/pending-connectors.service.d.ts +62 -0
  35. package/dist/agents/pending-connectors.service.js +282 -0
  36. package/dist/agents/readiness.controller.d.ts +5 -5
  37. package/dist/agents/readiness.controller.js +6 -6
  38. package/dist/agents/templates.controller.d.ts +86 -5
  39. package/dist/agents/templates.controller.js +171 -7
  40. package/dist/agents/templates.d.ts +127 -23
  41. package/dist/agents/templates.js +475 -52
  42. package/dist/background/background.module.js +8 -1
  43. package/dist/background/finish.d.ts +3 -2
  44. package/dist/background/launch-lock.d.ts +4 -3
  45. package/dist/background/launch-lock.js +4 -3
  46. package/dist/background/poll.job.d.ts +9 -6
  47. package/dist/background/poll.job.js +30 -22
  48. package/dist/background/session.d.ts +13 -2
  49. package/dist/background/session.js +13 -0
  50. package/dist/background/stop.d.ts +12 -6
  51. package/dist/background/stop.js +57 -39
  52. package/dist/background/store.d.ts +18 -6
  53. package/dist/background/store.js +12 -6
  54. package/dist/background/tasks.service.d.ts +15 -5
  55. package/dist/background/tasks.service.js +42 -17
  56. package/dist/background/wake-rules.d.ts +27 -18
  57. package/dist/background/wake-rules.js +52 -22
  58. package/dist/background/wake.d.ts +13 -11
  59. package/dist/background/wake.js +20 -14
  60. package/dist/catalog/admin-catalog.controller.d.ts +129 -30
  61. package/dist/catalog/admin-catalog.controller.js +213 -42
  62. package/dist/catalog/catalog-content.d.ts +58 -32
  63. package/dist/catalog/catalog-content.js +34 -8
  64. package/dist/catalog/catalog-import.module.d.ts +7 -0
  65. package/dist/catalog/catalog-import.module.js +60 -0
  66. package/dist/catalog/catalog-items.d.ts +111 -7
  67. package/dist/catalog/catalog-items.js +279 -13
  68. package/dist/catalog/catalog-scope.service.d.ts +260 -0
  69. package/dist/catalog/catalog-scope.service.js +1116 -0
  70. package/dist/catalog/catalog.module.d.ts +7 -9
  71. package/dist/catalog/catalog.module.js +41 -31
  72. package/dist/catalog/catalog.service.d.ts +101 -29
  73. package/dist/catalog/catalog.service.js +104 -106
  74. package/dist/catalog/cli.d.ts +11 -1
  75. package/dist/catalog/cli.js +26 -1
  76. package/dist/catalog/component-promotion.d.ts +96 -0
  77. package/dist/catalog/component-promotion.js +395 -0
  78. package/dist/catalog/component-scope.controller.d.ts +152 -0
  79. package/dist/catalog/component-scope.controller.js +287 -0
  80. package/dist/catalog/component-scope.service.d.ts +303 -0
  81. package/dist/catalog/component-scope.service.js +936 -0
  82. package/dist/catalog/component-state.d.ts +174 -0
  83. package/dist/catalog/component-state.js +437 -0
  84. package/dist/catalog/job-ids.d.ts +30 -0
  85. package/dist/catalog/job-ids.js +25 -0
  86. package/dist/catalog/marketplace-fetch.d.ts +1 -1
  87. package/dist/catalog/marketplaces.controller.d.ts +22 -5
  88. package/dist/catalog/marketplaces.controller.js +56 -7
  89. package/dist/catalog/marketplaces.service.d.ts +54 -14
  90. package/dist/catalog/marketplaces.service.js +71 -22
  91. package/dist/catalog/org-catalog.controller.d.ts +125 -34
  92. package/dist/catalog/org-catalog.controller.js +181 -65
  93. package/dist/catalog/org-catalog.service.d.ts +65 -33
  94. package/dist/catalog/org-catalog.service.js +324 -157
  95. package/dist/catalog/org-extension-switch.d.ts +41 -0
  96. package/dist/catalog/org-extension-switch.js +115 -0
  97. package/dist/catalog/org-extension.controller.d.ts +119 -0
  98. package/dist/catalog/org-extension.controller.js +266 -0
  99. package/dist/catalog/org-plugin-uploads.controller.d.ts +98 -0
  100. package/dist/catalog/org-plugin-uploads.controller.js +213 -0
  101. package/dist/catalog/org-plugin-uploads.d.ts +63 -0
  102. package/dist/catalog/org-plugin-uploads.js +116 -0
  103. package/dist/catalog/owned-items.d.ts +184 -0
  104. package/dist/catalog/owned-items.js +789 -0
  105. package/dist/catalog/owned-plugin-cleanup.d.ts +56 -0
  106. package/dist/catalog/owned-plugin-cleanup.js +194 -0
  107. package/dist/catalog/ownership.d.ts +172 -0
  108. package/dist/catalog/ownership.js +326 -0
  109. package/dist/catalog/platform-components.d.ts +221 -0
  110. package/dist/catalog/platform-components.js +761 -0
  111. package/dist/catalog/platform-migration.d.ts +115 -0
  112. package/dist/catalog/platform-migration.js +582 -0
  113. package/dist/catalog/plugin-import.d.ts +178 -34
  114. package/dist/catalog/plugin-import.js +622 -82
  115. package/dist/catalog/plugin-install.d.ts +185 -41
  116. package/dist/catalog/plugin-install.js +758 -126
  117. package/dist/catalog/plugin-upgrade.d.ts +260 -225
  118. package/dist/catalog/plugin-upgrade.js +1147 -1136
  119. package/dist/catalog/request-rules.d.ts +65 -0
  120. package/dist/catalog/request-rules.js +217 -0
  121. package/dist/catalog/requests.service.d.ts +193 -118
  122. package/dist/catalog/requests.service.js +526 -343
  123. package/dist/catalog/reserved-names.d.ts +8 -0
  124. package/dist/catalog/reserved-names.js +42 -0
  125. package/dist/catalog/scope-orgs.d.ts +21 -0
  126. package/dist/catalog/scope-orgs.js +67 -0
  127. package/dist/catalog/scope-state.d.ts +35 -0
  128. package/dist/catalog/scope-state.js +87 -0
  129. package/dist/catalog/scope-sync-workers.d.ts +7 -0
  130. package/dist/catalog/scope-sync-workers.js +29 -0
  131. package/dist/catalog/scope-sync.d.ts +176 -0
  132. package/dist/catalog/scope-sync.js +576 -0
  133. package/dist/catalog/scope.d.ts +42 -0
  134. package/dist/catalog/scope.js +42 -0
  135. package/dist/catalog/unshare.d.ts +22 -0
  136. package/dist/catalog/unshare.js +118 -0
  137. package/dist/channels/actions.js +1 -0
  138. package/dist/channels/cards.js +20 -2
  139. package/dist/channels/channels.module.js +2 -0
  140. package/dist/channels/inbound.d.ts +9 -1
  141. package/dist/channels/inbound.js +67 -5
  142. package/dist/channels/phrases.d.ts +35 -0
  143. package/dist/channels/phrases.js +29 -0
  144. package/dist/config/docs.js +3 -1
  145. package/dist/config/schema.d.ts +10 -2
  146. package/dist/config/schema.js +70 -22
  147. package/dist/conversations/access.d.ts +6 -4
  148. package/dist/conversations/access.js +27 -5
  149. package/dist/conversations/agent-tree.d.ts +46 -0
  150. package/dist/conversations/agent-tree.js +92 -0
  151. package/dist/conversations/conversations.controller.d.ts +43 -18
  152. package/dist/conversations/conversations.controller.js +79 -38
  153. package/dist/conversations/conversations.module.d.ts +1 -1
  154. package/dist/conversations/conversations.module.js +7 -7
  155. package/dist/conversations/conversations.service.d.ts +73 -15
  156. package/dist/conversations/conversations.service.js +115 -35
  157. package/dist/conversations/environment-status.d.ts +24 -0
  158. package/dist/conversations/environment-status.js +71 -0
  159. package/dist/conversations/event-log.d.ts +20 -5
  160. package/dist/conversations/event-log.js +60 -0
  161. package/dist/conversations/events.d.ts +84 -2
  162. package/dist/conversations/events.js +91 -17
  163. package/dist/conversations/queue.service.d.ts +1 -1
  164. package/dist/conversations/queue.service.js +5 -0
  165. package/dist/conversations/titles.d.ts +5 -3
  166. package/dist/conversations/titles.js +21 -8
  167. package/dist/conversations/tree.d.ts +17 -0
  168. package/dist/conversations/tree.js +42 -0
  169. package/dist/ctx/create-ctx.d.ts +20 -1
  170. package/dist/ctx/create-ctx.js +38 -7
  171. package/dist/db/kernel-schema.d.ts +386 -18
  172. package/dist/environments/access.d.ts +41 -0
  173. package/dist/environments/access.js +77 -0
  174. package/dist/environments/conversation-environments.d.ts +61 -0
  175. package/dist/environments/conversation-environments.js +170 -0
  176. package/dist/environments/dto.d.ts +25 -0
  177. package/dist/environments/dto.js +12 -0
  178. package/dist/environments/environments.controller.d.ts +33 -0
  179. package/dist/environments/environments.controller.js +110 -0
  180. package/dist/environments/environments.module.d.ts +8 -0
  181. package/dist/environments/environments.module.js +27 -0
  182. package/dist/environments/environments.service.d.ts +153 -0
  183. package/dist/environments/environments.service.js +541 -0
  184. package/dist/environments/legacy-cleanup.job.d.ts +34 -0
  185. package/dist/environments/legacy-cleanup.job.js +141 -0
  186. package/dist/errors.d.ts +85 -2
  187. package/dist/errors.js +85 -2
  188. package/dist/evals/reconstruct.d.ts +18 -9
  189. package/dist/evals/reconstruct.js +26 -7
  190. package/dist/evals/run-replay.d.ts +4 -2
  191. package/dist/evals/run-replay.js +20 -6
  192. package/dist/evals/runs.service.d.ts +2 -1
  193. package/dist/evals/runs.service.js +13 -12
  194. package/dist/evals/step-replay.d.ts +4 -6
  195. package/dist/evals/step-replay.js +4 -3
  196. package/dist/evals/trajectory.service.d.ts +8 -3
  197. package/dist/evals/trajectory.service.js +26 -14
  198. package/dist/evals/worker.d.ts +5 -5
  199. package/dist/evals/worker.js +9 -3
  200. package/dist/extensions/admin-ops.d.ts +36 -10
  201. package/dist/extensions/admin-ops.js +65 -42
  202. package/dist/extensions/admin-view.d.ts +37 -10
  203. package/dist/extensions/admin-view.js +103 -20
  204. package/dist/extensions/bootstrap.d.ts +17 -4
  205. package/dist/extensions/bootstrap.js +70 -9
  206. package/dist/extensions/cli.d.ts +12 -0
  207. package/dist/extensions/cli.js +11 -2
  208. package/dist/extensions/config-hash.d.ts +10 -0
  209. package/dist/extensions/config-hash.js +38 -0
  210. package/dist/extensions/deployment-config.d.ts +28 -5
  211. package/dist/extensions/deployment-config.js +48 -7
  212. package/dist/extensions/effective-config.d.ts +127 -0
  213. package/dist/extensions/effective-config.js +368 -0
  214. package/dist/extensions/extensions.module.js +11 -11
  215. package/dist/extensions/hooks.d.ts +37 -4
  216. package/dist/extensions/hooks.js +82 -16
  217. package/dist/extensions/host.d.ts +24 -10
  218. package/dist/extensions/host.js +49 -54
  219. package/dist/extensions/installs.d.ts +20 -8
  220. package/dist/extensions/installs.js +37 -15
  221. package/dist/extensions/org-config.d.ts +75 -6
  222. package/dist/extensions/org-config.js +184 -32
  223. package/dist/extensions/org-levels.d.ts +37 -0
  224. package/dist/extensions/org-levels.js +71 -0
  225. package/dist/extensions/org-overrides.d.ts +151 -0
  226. package/dist/extensions/org-overrides.js +524 -0
  227. package/dist/extensions/permission-view.d.ts +16 -4
  228. package/dist/extensions/permission-view.js +4 -4
  229. package/dist/extensions/plugin-items.d.ts +21 -0
  230. package/dist/extensions/plugin-items.js +42 -0
  231. package/dist/extensions/point-defaults.d.ts +12 -5
  232. package/dist/extensions/point-defaults.js +37 -9
  233. package/dist/extensions/resolve.d.ts +5 -1
  234. package/dist/extensions/resolve.js +15 -2
  235. package/dist/extensions/state.module.d.ts +9 -0
  236. package/dist/extensions/state.module.js +38 -0
  237. package/dist/files/previewers.d.ts +8 -1
  238. package/dist/files/previewers.js +35 -6
  239. package/dist/http/api.module.js +25 -3
  240. package/dist/http/app.d.ts +11 -2
  241. package/dist/http/app.js +31 -5
  242. package/dist/http/plugin-dispatch.d.ts +4 -1
  243. package/dist/http/plugin-dispatch.js +14 -2
  244. package/dist/identity/accounts.d.ts +29 -29
  245. package/dist/identity/accounts.js +47 -47
  246. package/dist/identity/audit.d.ts +2 -1
  247. package/dist/identity/auth.guard.d.ts +13 -5
  248. package/dist/identity/auth.guard.js +26 -9
  249. package/dist/identity/identity.module.d.ts +1 -1
  250. package/dist/identity/identity.module.js +4 -4
  251. package/dist/identity/me.controller.js +1 -1
  252. package/dist/identity/principal.d.ts +3 -3
  253. package/dist/identity/principal.js +3 -3
  254. package/dist/identity/settings.d.ts +22 -11
  255. package/dist/identity/settings.js +53 -18
  256. package/dist/identity/{enterprise-admin.d.ts → super-admin.d.ts} +5 -5
  257. package/dist/identity/{enterprise-admin.js → super-admin.js} +24 -24
  258. package/dist/inbox/inbox.module.d.ts +4 -1
  259. package/dist/inbox/inbox.module.js +7 -3
  260. package/dist/inbox/inbox.service.d.ts +62 -3
  261. package/dist/inbox/inbox.service.js +74 -4
  262. package/dist/inbox/org-notices.d.ts +63 -0
  263. package/dist/inbox/org-notices.js +91 -0
  264. package/dist/inbox/platform-inbox.controller.d.ts +23 -0
  265. package/dist/inbox/platform-inbox.controller.js +58 -0
  266. package/dist/inbox/platform-inbox.service.d.ts +151 -0
  267. package/dist/inbox/platform-inbox.service.js +263 -0
  268. package/dist/inbox/platform-notices.d.ts +19 -0
  269. package/dist/inbox/platform-notices.js +9 -0
  270. package/dist/index.d.ts +1 -1
  271. package/dist/index.js +1 -1
  272. package/dist/infra/cli/kernel-cli.module.js +9 -1
  273. package/dist/infra/config/kernel-config.service.js +24 -1
  274. package/dist/infra/database/xact-lock.d.ts +1 -1
  275. package/dist/infra/database/xact-lock.js +1 -1
  276. package/dist/infra/events/kernel-events.d.ts +19 -2
  277. package/dist/infra/queue/add-job-once.d.ts +14 -0
  278. package/dist/infra/queue/add-job-once.js +16 -0
  279. package/dist/kernel.module.js +6 -0
  280. package/dist/lifecycle/kernel-lifecycle.d.ts +1 -1
  281. package/dist/lifecycle/kernel-lifecycle.js +4 -4
  282. package/dist/models/embeddings.d.ts +82 -0
  283. package/dist/models/embeddings.js +326 -0
  284. package/dist/models/enablement.controller.d.ts +40 -0
  285. package/dist/models/enablement.controller.js +74 -0
  286. package/dist/models/enablement.d.ts +99 -0
  287. package/dist/models/enablement.js +263 -0
  288. package/dist/models/models.module.d.ts +5 -1
  289. package/dist/models/models.module.js +16 -4
  290. package/dist/models/prices.d.ts +5 -5
  291. package/dist/models/prices.js +4 -4
  292. package/dist/models/purposes.controller.d.ts +6 -4
  293. package/dist/models/purposes.controller.js +13 -7
  294. package/dist/models/purposes.d.ts +37 -12
  295. package/dist/models/purposes.js +63 -17
  296. package/dist/orgs/directory-sync.d.ts +14 -5
  297. package/dist/orgs/directory-sync.js +41 -17
  298. package/dist/orgs/offboarding.d.ts +9 -7
  299. package/dist/orgs/offboarding.js +28 -17
  300. package/dist/orgs/org-lock.d.ts +5 -0
  301. package/dist/orgs/org-lock.js +13 -0
  302. package/dist/orgs/org.guard.d.ts +10 -0
  303. package/dist/orgs/org.guard.js +43 -32
  304. package/dist/orgs/orgs.module.js +3 -0
  305. package/dist/orgs/orgs.service.d.ts +20 -7
  306. package/dist/orgs/orgs.service.js +32 -12
  307. package/dist/orgs/roles.d.ts +1 -1
  308. package/dist/orgs/roles.js +5 -1
  309. package/dist/orgs/settings.controller.d.ts +1 -1
  310. package/dist/orgs/settings.service.d.ts +15 -3
  311. package/dist/orgs/settings.service.js +6 -2
  312. package/dist/overrides.d.ts +3 -0
  313. package/dist/overrides.js +2 -0
  314. package/dist/platform/actor.d.ts +48 -0
  315. package/dist/platform/actor.js +100 -0
  316. package/dist/platform/agent-docs.d.ts +18 -0
  317. package/dist/platform/agent-docs.js +59 -0
  318. package/dist/platform/availability.d.ts +14 -0
  319. package/dist/platform/availability.js +43 -0
  320. package/dist/platform/errors.d.ts +11 -0
  321. package/dist/platform/errors.js +26 -0
  322. package/dist/platform/exclusions.d.ts +12 -0
  323. package/dist/platform/exclusions.js +1405 -0
  324. package/dist/platform/method.d.ts +6 -0
  325. package/dist/platform/method.js +15 -0
  326. package/dist/platform/operation.d.ts +92 -0
  327. package/dist/platform/operation.js +35 -0
  328. package/dist/platform/ops/agent-templates.ops.d.ts +14 -0
  329. package/dist/platform/ops/agent-templates.ops.js +92 -0
  330. package/dist/platform/ops/agents.ops.d.ts +19 -0
  331. package/dist/platform/ops/agents.ops.js +294 -0
  332. package/dist/platform/ops/connectors.ops.d.ts +15 -0
  333. package/dist/platform/ops/connectors.ops.js +126 -0
  334. package/dist/platform/ops/errors.d.ts +11 -0
  335. package/dist/platform/ops/errors.js +22 -0
  336. package/dist/platform/ops/extensions.ops.d.ts +19 -0
  337. package/dist/platform/ops/extensions.ops.js +116 -0
  338. package/dist/platform/ops/marketplaces.ops.d.ts +16 -0
  339. package/dist/platform/ops/marketplaces.ops.js +157 -0
  340. package/dist/platform/ops/paging.d.ts +14 -0
  341. package/dist/platform/ops/paging.js +20 -0
  342. package/dist/platform/ops/platform.ops.d.ts +23 -0
  343. package/dist/platform/ops/platform.ops.js +158 -0
  344. package/dist/platform/ops/plugins.ops.d.ts +33 -0
  345. package/dist/platform/ops/plugins.ops.js +377 -0
  346. package/dist/platform/ops/requests.ops.d.ts +14 -0
  347. package/dist/platform/ops/requests.ops.js +153 -0
  348. package/dist/platform/ops/role.d.ts +4 -0
  349. package/dist/platform/ops/role.js +10 -0
  350. package/dist/platform/ops/skills.ops.d.ts +13 -0
  351. package/dist/platform/ops/skills.ops.js +98 -0
  352. package/dist/platform/ops/summary.d.ts +10 -0
  353. package/dist/platform/ops/summary.js +18 -0
  354. package/dist/platform/platform-ops.module.d.ts +7 -0
  355. package/dist/platform/platform-ops.module.js +55 -0
  356. package/dist/platform/platform.module.d.ts +8 -0
  357. package/dist/platform/platform.module.js +25 -0
  358. package/dist/platform/redact-orgs.d.ts +7 -0
  359. package/dist/platform/redact-orgs.js +52 -0
  360. package/dist/platform/registry.d.ts +30 -0
  361. package/dist/platform/registry.js +111 -0
  362. package/dist/roles/worker-role.d.ts +6 -4
  363. package/dist/roles/worker-role.js +14 -7
  364. package/dist/roles/worker.module.d.ts +1 -1
  365. package/dist/roles/worker.module.js +9 -1
  366. package/dist/runtime/context/build.d.ts +6 -4
  367. package/dist/runtime/context/build.js +26 -7
  368. package/dist/runtime/context/claude-tools.d.ts +2 -1
  369. package/dist/runtime/context/claude-tools.js +5 -4
  370. package/dist/runtime/context/compaction.js +9 -0
  371. package/dist/runtime/context/reminders.d.ts +2 -0
  372. package/dist/runtime/context/reminders.js +2 -0
  373. package/dist/runtime/context/skills.js +9 -2
  374. package/dist/runtime/context/tool-changes.d.ts +27 -0
  375. package/dist/runtime/context/tool-changes.js +60 -0
  376. package/dist/runtime/hook-calls.d.ts +8 -1
  377. package/dist/runtime/hook-calls.js +40 -7
  378. package/dist/runtime/langgraph-loop.d.ts +3 -1
  379. package/dist/runtime/langgraph-loop.js +35 -17
  380. package/dist/runtime/loop.d.ts +32 -4
  381. package/dist/runtime/maintenance.d.ts +7 -4
  382. package/dist/runtime/maintenance.js +23 -8
  383. package/dist/runtime/model-call.d.ts +38 -11
  384. package/dist/runtime/model-call.js +97 -24
  385. package/dist/runtime/providers.d.ts +146 -32
  386. package/dist/runtime/providers.js +321 -67
  387. package/dist/runtime/run-control.d.ts +11 -1
  388. package/dist/runtime/run-control.js +12 -0
  389. package/dist/runtime/run-drafts.d.ts +85 -0
  390. package/dist/runtime/run-drafts.js +230 -0
  391. package/dist/runtime/run-jobs.d.ts +3 -5
  392. package/dist/runtime/run-jobs.js +3 -7
  393. package/dist/runtime/run-queue.d.ts +37 -3
  394. package/dist/runtime/run-queue.js +188 -11
  395. package/dist/runtime/run-worker.d.ts +12 -6
  396. package/dist/runtime/run-worker.js +58 -35
  397. package/dist/runtime/runtime.module.js +3 -0
  398. package/dist/runtime/step-log.d.ts +9 -4
  399. package/dist/runtime/step-log.js +8 -5
  400. package/dist/runtime/stream.controller.d.ts +23 -1
  401. package/dist/runtime/stream.controller.js +60 -3
  402. package/dist/runtime/stream.d.ts +4 -1
  403. package/dist/runtime/stream.js +27 -3
  404. package/dist/runtime/subagents/child.d.ts +55 -7
  405. package/dist/runtime/subagents/child.js +105 -7
  406. package/dist/runtime/subagents/definition.d.ts +12 -3
  407. package/dist/runtime/subagents/definition.js +46 -32
  408. package/dist/runtime/subagents/deliveries.d.ts +71 -0
  409. package/dist/runtime/subagents/deliveries.js +228 -0
  410. package/dist/runtime/subagents/dispatch.d.ts +115 -26
  411. package/dist/runtime/subagents/dispatch.js +212 -141
  412. package/dist/runtime/subagents/limits.d.ts +24 -5
  413. package/dist/runtime/subagents/limits.js +40 -6
  414. package/dist/runtime/subagents/messages.d.ts +95 -0
  415. package/dist/runtime/subagents/messages.js +328 -0
  416. package/dist/runtime/subagents/preamble.d.ts +4 -4
  417. package/dist/runtime/subagents/preamble.js +9 -7
  418. package/dist/runtime/subagents/progress.d.ts +8 -6
  419. package/dist/runtime/subagents/progress.js +11 -6
  420. package/dist/runtime/subagents/render.d.ts +30 -0
  421. package/dist/runtime/subagents/render.js +53 -0
  422. package/dist/runtime/subagents/roster.d.ts +24 -7
  423. package/dist/runtime/subagents/roster.js +47 -11
  424. package/dist/runtime/subagents/skill-fork.d.ts +3 -2
  425. package/dist/runtime/subagents/skill-fork.js +8 -4
  426. package/dist/runtime/subagents/status.d.ts +14 -0
  427. package/dist/runtime/subagents/status.js +23 -0
  428. package/dist/runtime/subagents/subagents.service.d.ts +7 -4
  429. package/dist/runtime/subagents/subagents.service.js +11 -6
  430. package/dist/runtime/usage-report-jobs.d.ts +88 -0
  431. package/dist/runtime/usage-report-jobs.js +158 -0
  432. package/dist/runtime/usage-report.d.ts +33 -38
  433. package/dist/runtime/usage-report.js +169 -96
  434. package/dist/runtime/waits.d.ts +140 -37
  435. package/dist/runtime/waits.js +394 -106
  436. package/dist/sandbox/jobs.d.ts +40 -13
  437. package/dist/sandbox/jobs.js +57 -20
  438. package/dist/sandbox/leases.d.ts +37 -54
  439. package/dist/sandbox/leases.js +71 -115
  440. package/dist/sandbox/providers.d.ts +2 -2
  441. package/dist/sandbox/providers.js +1 -1
  442. package/dist/sandbox/sandbox.module.d.ts +3 -2
  443. package/dist/sandbox/sandbox.module.js +4 -3
  444. package/dist/sandbox/sandbox.service.d.ts +229 -134
  445. package/dist/sandbox/sandbox.service.js +630 -409
  446. package/dist/skills/catalog.d.ts +3 -2
  447. package/dist/skills/catalog.js +21 -43
  448. package/dist/skills/changes.controller.d.ts +7 -0
  449. package/dist/skills/changes.controller.js +19 -1
  450. package/dist/skills/invoke.js +8 -3
  451. package/dist/skills/package.d.ts +20 -1
  452. package/dist/skills/package.js +28 -1
  453. package/dist/skills/skills.controller.d.ts +39 -4
  454. package/dist/skills/skills.controller.js +88 -10
  455. package/dist/skills/skills.module.js +10 -1
  456. package/dist/skills/skills.service.d.ts +106 -26
  457. package/dist/skills/skills.service.js +421 -75
  458. package/dist/skills/usable.d.ts +81 -0
  459. package/dist/skills/usable.js +379 -0
  460. package/dist/tools/approvals.service.d.ts +20 -2
  461. package/dist/tools/approvals.service.js +23 -4
  462. package/dist/tools/builtin-names.d.ts +21 -5
  463. package/dist/tools/builtin-names.js +30 -5
  464. package/dist/tools/builtins/agent.d.ts +23 -21
  465. package/dist/tools/builtins/agent.js +62 -55
  466. package/dist/tools/builtins/builtin-tools.d.ts +6 -2
  467. package/dist/tools/builtins/builtin-tools.js +37 -12
  468. package/dist/tools/builtins/handback.d.ts +28 -0
  469. package/dist/tools/builtins/handback.js +53 -0
  470. package/dist/tools/builtins/platform.d.ts +34 -0
  471. package/dist/tools/builtins/platform.js +362 -0
  472. package/dist/tools/builtins/sandbox/bash.js +13 -3
  473. package/dist/tools/builtins/sandbox/common.d.ts +43 -24
  474. package/dist/tools/builtins/sandbox/common.js +80 -45
  475. package/dist/tools/builtins/sandbox/edit.js +2 -2
  476. package/dist/tools/builtins/sandbox/glob.js +2 -2
  477. package/dist/tools/builtins/sandbox/grep.js +2 -4
  478. package/dist/tools/builtins/sandbox/index.d.ts +1 -1
  479. package/dist/tools/builtins/sandbox/index.js +1 -1
  480. package/dist/tools/builtins/sandbox/read.js +1 -1
  481. package/dist/tools/builtins/sandbox/task-output.d.ts +14 -3
  482. package/dist/tools/builtins/sandbox/task-output.js +30 -5
  483. package/dist/tools/builtins/sandbox/task-stop.js +2 -1
  484. package/dist/tools/builtins/sandbox/write.js +2 -2
  485. package/dist/tools/builtins/send-message.d.ts +56 -0
  486. package/dist/tools/builtins/send-message.js +100 -0
  487. package/dist/tools/builtins/skill-load.d.ts +22 -14
  488. package/dist/tools/builtins/skill-load.js +86 -57
  489. package/dist/tools/builtins/skill-write.js +1 -1
  490. package/dist/tools/builtins/web/extract.js +5 -1
  491. package/dist/tools/builtins/web/fetch.js +1 -0
  492. package/dist/tools/builtins/web/search.js +1 -0
  493. package/dist/tools/connectors.controller.d.ts +10 -0
  494. package/dist/tools/connectors.controller.js +12 -0
  495. package/dist/tools/connectors.service.d.ts +46 -5
  496. package/dist/tools/connectors.service.js +94 -15
  497. package/dist/tools/extension-tools.controller.d.ts +14 -0
  498. package/dist/tools/extension-tools.controller.js +37 -0
  499. package/dist/tools/info.d.ts +42 -1
  500. package/dist/tools/info.js +64 -1
  501. package/dist/tools/org-tool-switches.d.ts +74 -0
  502. package/dist/tools/org-tool-switches.js +184 -0
  503. package/dist/tools/pipeline.d.ts +46 -40
  504. package/dist/tools/pipeline.js +193 -364
  505. package/dist/tools/policy.d.ts +1 -1
  506. package/dist/tools/policy.js +36 -16
  507. package/dist/tools/registry.d.ts +98 -5
  508. package/dist/tools/registry.js +87 -9
  509. package/dist/tools/tools.module.js +12 -2
  510. package/dist/ui/views.d.ts +2 -1
  511. package/dist/ui/views.js +17 -3
  512. package/package.json +3 -3
  513. package/src/migrations/0074_subagent_tree.sql +50 -0
  514. package/src/migrations/0075_plugin_scope.sql +61 -0
  515. package/src/migrations/0076_skills_created_by_nullable.sql +6 -0
  516. package/src/migrations/0077_scope_requests.sql +52 -0
  517. package/src/migrations/0078_scope_grant_switches.sql +18 -0
  518. package/src/migrations/0079_scope_live_install_switches.sql +19 -0
  519. package/src/migrations/0080_rename_enterprise_admin.sql +18 -0
  520. package/src/migrations/0081_platform_components.sql +129 -0
  521. package/src/migrations/0082_platform_migration.sql +33 -0
  522. package/src/migrations/0083_plugin_scope_sync_failures.sql +15 -0
  523. package/src/migrations/0084_org_owned_items.sql +85 -0
  524. package/src/migrations/0085_agent_templates_phase4.sql +45 -0
  525. package/src/migrations/0086_org_layering.sql +30 -0
  526. package/src/migrations/0087_approval_summary.sql +6 -0
  527. package/src/migrations/0088_environments.sql +80 -0
  528. package/src/migrations/0089_model_kinds_usage.sql +38 -0
  529. package/dist/catalog/upgrade-targets.d.ts +0 -56
  530. package/dist/catalog/upgrade-targets.js +0 -90
  531. package/dist/conversations/sandbox-status.d.ts +0 -24
  532. package/dist/conversations/sandbox-status.js +0 -52
  533. package/dist/extensions/org-config.controller.d.ts +0 -32
  534. package/dist/extensions/org-config.controller.js +0 -70
@@ -1,18 +1,27 @@
1
+ import type { Logger } from "@capybara-hq/plugin-sdk";
1
2
  import type { FastifyReply, FastifyRequest } from "fastify";
2
3
  import { z } from "zod";
4
+ import { ConversationAccess } from "../conversations/access.js";
3
5
  import { ConversationsService } from "../conversations/conversations.service.js";
4
6
  import { ApiTokenService } from "../identity/api-tokens.js";
5
7
  import { type Principal } from "../identity/principal.js";
6
8
  import { SessionService } from "../identity/sessions.js";
7
9
  import { type OrgContext } from "../orgs/org.guard.js";
10
+ import { type RunDraft, RunDrafts } from "./run-drafts.js";
8
11
  import { ConversationStreams } from "./stream.js";
9
12
  declare const StreamQuery: z.ZodObject<{
10
13
  after: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
11
14
  }, z.core.$strip>;
15
+ declare const DraftParams: z.ZodObject<{
16
+ id: z.ZodString;
17
+ runId: z.ZodString;
18
+ }, z.core.$strip>;
12
19
  /**
13
20
  * 会话事件流(SSE):`GET /api/v1/orgs/:orgId/conversations/:id/stream?after=<seq>`,`agents.use`,只有会话所有者可用。
14
21
  * - 打开时不阻塞地调用一次 ensureRun(`ConversationsService.kickRun`),停在「运行中」的孤儿运行由此被清理;
15
22
  * - 先订阅会话频道、再回放 `after`(或优先的 `Last-Event-ID`)之后的事件:`id: <seq>` / `event: event`;
23
+ * - after that catch-up, one `event: draft` (`data: {"runId","step","text","thinking"}`) per step of
24
+ * the running run whose `assistant_message` is not logged (live drafts, spec 2026-11-07 §3.2);
16
25
  * 之后收到 `events` 通知就补读新事件(按 seq 去重),收到增量就发 `event: delta`,收到界面刷新
17
26
  * (插件 `ctx.ui.invalidate`)就发 `event: ui`(`data: {"plugin","contribution"}`);
18
27
  * - 每 `runtime.sseHeartbeatMs` 发 `: ping` 注释;每 `runtime.sseRecheckMs` 复核凭据(会话未吊销 / 令牌仍有效,
@@ -25,7 +34,20 @@ export declare class ConversationStreamController {
25
34
  private readonly sessions;
26
35
  private readonly tokens;
27
36
  private readonly conversations;
28
- constructor(streams: ConversationStreams, sessions: SessionService, tokens: ApiTokenService, conversations: ConversationsService);
37
+ private readonly access;
38
+ private readonly drafts;
39
+ private readonly log;
40
+ constructor(streams: ConversationStreams, sessions: SessionService, tokens: ApiTokenService, conversations: ConversationsService, access: ConversationAccess, drafts: RunDrafts, log: Pick<Logger, "warn">);
41
+ /**
42
+ * The live drafts of one run (spec 2026-11-07 §3.2): `{ drafts: { step, text, thinking }[] }`,
43
+ * the steps still streaming whose `assistant_message` is not logged (none once the run is no
44
+ * longer running). What a stream client asks for when a delta's `offset` is past its draft.
45
+ * The stream's access rule (the conversation is visible to the viewer, else 404
46
+ * `conversation.not_found`); a run not of this conversation → 404 `run.not_found`.
47
+ */
48
+ draft(principal: Principal, org: OrgContext, params: z.infer<typeof DraftParams>): Promise<{
49
+ drafts: RunDraft[];
50
+ }>;
29
51
  stream(principal: Principal, org: OrgContext, id: string, q: z.infer<typeof StreamQuery>, lastEventId: string | undefined, req: FastifyRequest, reply: FastifyReply): Promise<void>;
30
52
  }
31
53
  export {};
@@ -9,15 +9,18 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
9
9
  };
10
10
  import { Controller, Get, Headers, Inject, Param, Req, Res } from "@nestjs/common";
11
11
  import { z } from "zod";
12
+ import { ConversationAccess } from "../conversations/access.js";
12
13
  import { ConversationsService } from "../conversations/conversations.service.js";
13
14
  import { ApiError } from "../errors.js";
14
15
  import { ApiTokenService } from "../identity/api-tokens.js";
15
16
  import { credentialCheck } from "../identity/credential-check.js";
16
17
  import { CurrentPrincipal, requireUser } from "../identity/principal.js";
17
18
  import { SessionService } from "../identity/sessions.js";
19
+ import { KERNEL_LOGGER } from "../infra/tokens.js";
18
20
  import { createZodDto } from "../infra/validation/create-zod-dto.js";
19
- import { ZQuery } from "../infra/validation/zod-params.js";
21
+ import { ZParam, ZQuery } from "../infra/validation/zod-params.js";
20
22
  import { CurrentOrg, OrgAction } from "../orgs/org.guard.js";
23
+ import { RunDrafts } from "./run-drafts.js";
21
24
  import { ConversationStreams } from "./stream.js";
22
25
  const BEARER_RE = /^Bearer\s+(\S+)$/i;
23
26
  const StreamQuery = z.object({
@@ -32,12 +35,20 @@ function parseLastEventId(v) {
32
35
  }
33
36
  return n;
34
37
  }
38
+ const DraftParams = z.object({
39
+ id: z.string().min(1).max(100),
40
+ runId: z.string().min(1).max(100),
41
+ });
35
42
  class ConversationStreamQueryDto extends createZodDto(StreamQuery, "ConversationStreamQuery") {
36
43
  }
44
+ class RunDraftParamsDto extends createZodDto(DraftParams, "RunDraftParams") {
45
+ }
37
46
  /**
38
47
  * 会话事件流(SSE):`GET /api/v1/orgs/:orgId/conversations/:id/stream?after=<seq>`,`agents.use`,只有会话所有者可用。
39
48
  * - 打开时不阻塞地调用一次 ensureRun(`ConversationsService.kickRun`),停在「运行中」的孤儿运行由此被清理;
40
49
  * - 先订阅会话频道、再回放 `after`(或优先的 `Last-Event-ID`)之后的事件:`id: <seq>` / `event: event`;
50
+ * - after that catch-up, one `event: draft` (`data: {"runId","step","text","thinking"}`) per step of
51
+ * the running run whose `assistant_message` is not logged (live drafts, spec 2026-11-07 §3.2);
41
52
  * 之后收到 `events` 通知就补读新事件(按 seq 去重),收到增量就发 `event: delta`,收到界面刷新
42
53
  * (插件 `ctx.ui.invalidate`)就发 `event: ui`(`data: {"plugin","contribution"}`);
43
54
  * - 每 `runtime.sseHeartbeatMs` 发 `: ping` 注释;每 `runtime.sseRecheckMs` 复核凭据(会话未吊销 / 令牌仍有效,
@@ -50,11 +61,47 @@ let ConversationStreamController = class ConversationStreamController {
50
61
  sessions;
51
62
  tokens;
52
63
  conversations;
53
- constructor(streams, sessions, tokens, conversations) {
64
+ access;
65
+ drafts;
66
+ log;
67
+ constructor(streams, sessions, tokens, conversations, access, drafts, log) {
54
68
  this.streams = streams;
55
69
  this.sessions = sessions;
56
70
  this.tokens = tokens;
57
71
  this.conversations = conversations;
72
+ this.access = access;
73
+ this.drafts = drafts;
74
+ this.log = log;
75
+ }
76
+ /**
77
+ * The live drafts of one run (spec 2026-11-07 §3.2): `{ drafts: { step, text, thinking }[] }`,
78
+ * the steps still streaming whose `assistant_message` is not logged (none once the run is no
79
+ * longer running). What a stream client asks for when a delta's `offset` is past its draft.
80
+ * The stream's access rule (the conversation is visible to the viewer, else 404
81
+ * `conversation.not_found`); a run not of this conversation → 404 `run.not_found`.
82
+ */
83
+ async draft(principal, org, params) {
84
+ const p = requireUser(principal);
85
+ if (!(await this.access.isAccessible(org.orgId, params.id, p.account.id))) {
86
+ throw new ApiError("conversation.not_found", "Conversation not found");
87
+ }
88
+ if (!(await this.drafts.runOf(params.id, params.runId))) {
89
+ throw new ApiError("run.not_found", "Run not found");
90
+ }
91
+ let live;
92
+ try {
93
+ live = await this.drafts.live(params.id, params.runId);
94
+ }
95
+ catch (err) {
96
+ // a convenience, like the stream's: no drafts rather than an error (the log stays the truth)
97
+ this.log.warn("cannot read live drafts", {
98
+ conversationId: params.id,
99
+ runId: params.runId,
100
+ err,
101
+ });
102
+ live = [];
103
+ }
104
+ return { drafts: live.map(({ step, text, thinking }) => ({ step, text, thinking })) };
58
105
  }
59
106
  async stream(principal, org, id, q, lastEventId, req, reply) {
60
107
  const p = requireUser(principal);
@@ -103,6 +150,13 @@ let ConversationStreamController = class ConversationStreamController {
103
150
  handle.begin();
104
151
  }
105
152
  };
153
+ __decorate([
154
+ Get(":id/runs/:runId/draft"),
155
+ OrgAction("agents.use"),
156
+ __param(0, CurrentPrincipal()),
157
+ __param(1, CurrentOrg()),
158
+ __param(2, ZParam(RunDraftParamsDto))
159
+ ], ConversationStreamController.prototype, "draft", null);
106
160
  __decorate([
107
161
  Get(":id/stream"),
108
162
  OrgAction("agents.use"),
@@ -119,6 +173,9 @@ ConversationStreamController = __decorate([
119
173
  __param(0, Inject(ConversationStreams)),
120
174
  __param(1, Inject(SessionService)),
121
175
  __param(2, Inject(ApiTokenService)),
122
- __param(3, Inject(ConversationsService))
176
+ __param(3, Inject(ConversationsService)),
177
+ __param(4, Inject(ConversationAccess)),
178
+ __param(5, Inject(RunDrafts)),
179
+ __param(6, Inject(KERNEL_LOGGER))
123
180
  ], ConversationStreamController);
124
181
  export { ConversationStreamController };
@@ -4,6 +4,7 @@ import { EventLog } from "../conversations/event-log.js";
4
4
  import type { CredentialCheck } from "../identity/credential-check.js";
5
5
  import { KernelConfigService } from "../infra/config/kernel-config.service.js";
6
6
  import { GracefulShutdown } from "../infra/lifecycle/graceful-shutdown.service.js";
7
+ import { type LiveDraft, RunDrafts } from "./run-drafts.js";
7
8
  /** 一次 SSE 连接的输出端(由 HTTP 层包装原始响应)。 */
8
9
  export interface SseOutput {
9
10
  write(chunk: string): void;
@@ -25,6 +26,8 @@ export interface ConversationStreamsDeps {
25
26
  access(orgId: string, conversationId: string, viewerAccountId: string): Promise<boolean>;
26
27
  config: Pick<KernelConfigService, "get">;
27
28
  log: Pick<Logger, "warn">;
29
+ /** The live drafts of the conversation's running run (sent once, after the open catch-up). */
30
+ drafts(conversationId: string): Promise<LiveDraft[]>;
28
31
  }
29
32
  export interface StreamParams {
30
33
  orgId: string;
@@ -60,7 +63,7 @@ export declare class ConversationStreams {
60
63
  * an event stream. Without `GracefulShutdown` (a standalone HTTP application, tests only) the
61
64
  * streams end with their connections.
62
65
  */
63
- constructor(eventLog: Pick<EventLog, "readAfter">, bus: StreamBus, access: Pick<ConversationAccess, "isAccessible">, config: Pick<KernelConfigService, "get">, log: Pick<Logger, "warn">, shutdown?: Pick<GracefulShutdown, "signal">);
66
+ constructor(eventLog: Pick<EventLog, "readAfter">, bus: StreamBus, access: Pick<ConversationAccess, "isAccessible">, config: Pick<KernelConfigService, "get">, log: Pick<Logger, "warn">, drafts: Pick<RunDrafts, "live">, shutdown?: Pick<GracefulShutdown, "signal">);
64
67
  /**
65
68
  * 复核凭据与可见性,并先订阅会话频道(之后再回放,避免遗漏两者之间提交的事件)。
66
69
  * 凭据失效 → 对应的 `auth.*`;不可见 → `conversation.not_found`;订阅失败照常抛出。此时尚未写任何响应,调用方可以按普通错误返回。
@@ -15,6 +15,7 @@ import { KernelConfigService } from "../infra/config/kernel-config.service.js";
15
15
  import { GracefulShutdown } from "../infra/lifecycle/graceful-shutdown.service.js";
16
16
  import { KERNEL_BUS, KERNEL_LOGGER } from "../infra/tokens.js";
17
17
  import { isUiBusMessage, uiFrame } from "../ui/registry.js";
18
+ import { RunDrafts } from "./run-drafts.js";
18
19
  /** 补读事件的分页大小。 */
19
20
  const PAGE = 500;
20
21
  /** 慢客户端的积压上限:超过即关闭流,客户端带 Last-Event-ID 重连补读。 */
@@ -55,6 +56,7 @@ function isBusMessage(m) {
55
56
  return k === "delta" && typeof m.runId === "string";
56
57
  }
57
58
  const eventFrame = (e) => `id: ${e.seq}\nevent: event\ndata: ${JSON.stringify(e)}\n\n`;
59
+ const draftFrame = (d) => `event: draft\ndata: ${JSON.stringify({ runId: d.runId, step: d.step, text: d.text, thinking: d.thinking })}\n\n`;
58
60
  /**
59
61
  * 会话事件流(SSE):本进程持有的连接集合,停机时一并关闭。
60
62
  * 跨副本的数据只经 PG(事件日志)与内核 bus(`conv.<id>`)流动,进程内只保存连接本身的资源
@@ -71,13 +73,14 @@ let ConversationStreams = class ConversationStreams {
71
73
  * an event stream. Without `GracefulShutdown` (a standalone HTTP application, tests only) the
72
74
  * streams end with their connections.
73
75
  */
74
- constructor(eventLog, bus, access, config, log, shutdown) {
76
+ constructor(eventLog, bus, access, config, log, drafts, shutdown) {
75
77
  this.d = {
76
78
  eventLog,
77
79
  bus,
78
80
  access: (orgId, conversationId, viewer) => access.isAccessible(orgId, conversationId, viewer),
79
81
  config,
80
82
  log,
83
+ drafts: (conversationId) => drafts.live(conversationId),
81
84
  };
82
85
  if (shutdown?.signal.aborted)
83
86
  this.closeAll();
@@ -131,8 +134,9 @@ ConversationStreams = __decorate([
131
134
  __param(2, Inject(ConversationAccess)),
132
135
  __param(3, Inject(KernelConfigService)),
133
136
  __param(4, Inject(KERNEL_LOGGER)),
134
- __param(5, Optional()),
135
- __param(5, Inject(GracefulShutdown))
137
+ __param(5, Inject(RunDrafts)),
138
+ __param(6, Optional()),
139
+ __param(6, Inject(GracefulShutdown))
136
140
  ], ConversationStreams);
137
141
  export { ConversationStreams };
138
142
  /**
@@ -176,6 +180,9 @@ class Connection {
176
180
  this.openGate = resolve;
177
181
  });
178
182
  this.enqueue(() => this.catchUp());
183
+ // live drafts (spec 2026-11-07 §3.2): after the catch-up, before any delta (deltas are queued
184
+ // behind this); a delta also in the draft is dropped by the client by its offset
185
+ this.enqueue(() => this.sendDrafts());
179
186
  }
180
187
  async subscribe() {
181
188
  const un = await this.d.bus.subscribe(conversationTopic(this.p.conversationId), (m) => this.onMessage(m));
@@ -282,6 +289,23 @@ class Connection {
282
289
  return;
283
290
  }
284
291
  }
292
+ /** One `event: draft` per step of the running run whose `assistant_message` is not logged. */
293
+ async sendDrafts() {
294
+ let drafts;
295
+ try {
296
+ drafts = await this.d.drafts(this.p.conversationId);
297
+ }
298
+ catch (err) {
299
+ // a convenience: without it the client resumes from the next delta (and asks for the draft)
300
+ this.d.log.warn("conversation stream cannot read live drafts", {
301
+ conversationId: this.p.conversationId,
302
+ err,
303
+ });
304
+ return;
305
+ }
306
+ for (const d of drafts)
307
+ this.write(draftFrame(d));
308
+ }
285
309
  /** 发最后一帧错误并关闭(未发完的排队输出随关闭丢弃)。 */
286
310
  fail(code) {
287
311
  if (this.closed)
@@ -1,6 +1,7 @@
1
1
  import type { AppendEvent, EventLog } from "../../conversations/event-log.js";
2
2
  import type { EventPayload } from "../../conversations/events.js";
3
3
  import type { KernelSchemaDb } from "../../db/kernel-schema.js";
4
+ import type { SubagentAbortedBy } from "./status.js";
4
5
  /** Idempotency key of the parent's `subagent_finished` event. */
5
6
  export declare const finishedIdemKey: (childRunId: string) => string;
6
7
  /** A dispatch row, by its child run. */
@@ -10,29 +11,76 @@ export interface DispatchRow {
10
11
  parentConversationId: string;
11
12
  childConversationId: string;
12
13
  childRunId: string;
14
+ /** The budget run the dispatch counts against (agent map spec §6); set when read from the row. */
15
+ budgetRunId?: string;
16
+ /**
17
+ * A person's fork invocation (phase D, `subagent_dispatches.for_skill`): the parent run waits on
18
+ * it (`subagents` wait); every other dispatch runs in the background (agent map spec §5.4).
19
+ */
20
+ forSkill?: boolean;
13
21
  }
14
22
  /** The dispatch that started `childRunId`, or null (not a sub-agent run). */
15
23
  export declare function dispatchOfChildRun(db: KernelSchemaDb, childRunId: string): Promise<DispatchRow | null>;
24
+ /**
25
+ * The dispatch row a finished child run reports through (agent map spec §5.2: every run of a child
26
+ * conversation that ends appends one `finished` delivery to its parent): the run's own dispatch
27
+ * (`Agent`, `SendMessage`), else, for a run nobody dispatched (a wake run, §5.3), the newest dispatch
28
+ * of its conversation with `childRunId` set to this run, `forSkill` false (a wake run of a fork's
29
+ * child is delivered like any background run; no parent run waits on it) and the run's own budget
30
+ * run. Null when the run is unknown or its conversation was never dispatched.
31
+ */
32
+ export declare function deliveryRowOfChildRun(db: KernelSchemaDb, childRunId: string): Promise<DispatchRow | null>;
16
33
  /** The dispatch of the parent call `(runId, callId)`, or null (not dispatched yet). */
17
34
  export declare function dispatchOfCall(db: KernelSchemaDb, runId: string, callId: string): Promise<DispatchRow | null>;
18
35
  /**
19
- * The tool result of a finished child run (spec §4.4) and its `subagent_finished` payload, from
20
- * the child's log only: the status from its terminal event, the reply from its last
36
+ * The root conversation of `conversationId`'s tree (agent map spec §6): the first ancestor without
37
+ * a parent, or `conversationId` itself for a root (or an unknown id).
38
+ */
39
+ export declare function rootConversationOf(db: KernelSchemaDb, conversationId: string): Promise<string>;
40
+ /** Where a sub-agent's request for a person is shown: see {@link rootSurfaceOf}. */
41
+ export interface RootSurface {
42
+ /** The root conversation of the sub-agent's tree. */
43
+ conversationId: string;
44
+ /** The root run the event is logged under: the one that last dispatched the branch. */
45
+ runId: string;
46
+ /** Child conversation ids from the root's child down to the sub-agent itself. */
47
+ path: string[];
48
+ }
49
+ /**
50
+ * Where the sub-agent conversation `conversationId`, in its run `runId`, shows a request for a
51
+ * person (`subagent_waiting`: an approval, a question or a connect card; agent map spec §7): the
52
+ * **root** conversation of its tree, the only one a person looks at, with the path from the root's
53
+ * child down to it, under the root run that last dispatched (or messaged) the root's child on that
54
+ * path (for a child of the root, the run's own dispatch first). `parent`, when the caller knows the
55
+ * run's dispatch and it was made by the root (`depth` 0), answers without a read. Null for a root
56
+ * conversation, or a branch the root never dispatched.
57
+ */
58
+ export declare function rootSurfaceOf(db: KernelSchemaDb, conversationId: string, runId: string, parent?: {
59
+ conversationId: string;
60
+ runId: string;
61
+ depth: number;
62
+ }): Promise<RootSurface | null>;
63
+ /**
64
+ * The result of a finished child run (spec §4.4) and its `subagent_finished` payload, from the
65
+ * child's log only: the status from its terminal event, the reply from its last
21
66
  * `assistant_message` (text blocks), the tool call count from its `tool_result` events, the usage
22
67
  * from its `usage` events (compaction included) and the duration from `run_started` to the
23
- * terminal event. Null while the run has no terminal event.
68
+ * terminal event. Null while the run has no terminal event. `content` is the fork report's text
69
+ * (`agentResultText`); `reply`, `errorMessage` and `abortedBy` are what a background child's
70
+ * finished `subagent_delivery` carries.
24
71
  *
25
72
  * `modelGiven`: the parent's call named a `model`; for an org agent, which runs on its own model
26
73
  * (§5.4, §5.5), the status line then says `model: the agent's own`.
27
74
  */
28
- export declare function childResult(eventLog: EventLog, row: DispatchRow,
29
- /** `forSkill`: a fork invocation's report (no resume hint, see `agentResultText`). */
30
- opts?: {
75
+ export declare function childResult(eventLog: EventLog, row: DispatchRow, opts?: {
31
76
  modelGiven?: boolean;
32
- forSkill?: boolean;
33
77
  }): Promise<{
34
78
  content: string;
35
79
  isError: boolean;
80
+ /** The text of the child's last `assistant_message`. */
81
+ reply: string;
82
+ errorMessage?: string;
83
+ abortedBy?: SubagentAbortedBy;
36
84
  finished: EventPayload<"subagent_finished">;
37
85
  } | null>;
38
86
  /** The parent's `subagent_finished` event for a finished child (idempotent by its key). */
@@ -8,6 +8,8 @@ const DISPATCH_COLUMNS = [
8
8
  "parent_conversation_id",
9
9
  "child_conversation_id",
10
10
  "child_run_id",
11
+ "budget_run_id",
12
+ "for_skill",
11
13
  ];
12
14
  const toRow = (r) => ({
13
15
  parentRunId: r.parent_run_id,
@@ -15,6 +17,8 @@ const toRow = (r) => ({
15
17
  parentConversationId: r.parent_conversation_id,
16
18
  childConversationId: r.child_conversation_id,
17
19
  childRunId: r.child_run_id,
20
+ budgetRunId: r.budget_run_id,
21
+ forSkill: r.for_skill,
18
22
  });
19
23
  /** The dispatch that started `childRunId`, or null (not a sub-agent run). */
20
24
  export async function dispatchOfChildRun(db, childRunId) {
@@ -25,6 +29,41 @@ export async function dispatchOfChildRun(db, childRunId) {
25
29
  .executeTakeFirst();
26
30
  return r ? toRow(r) : null;
27
31
  }
32
+ /**
33
+ * The dispatch row a finished child run reports through (agent map spec §5.2: every run of a child
34
+ * conversation that ends appends one `finished` delivery to its parent): the run's own dispatch
35
+ * (`Agent`, `SendMessage`), else, for a run nobody dispatched (a wake run, §5.3), the newest dispatch
36
+ * of its conversation with `childRunId` set to this run, `forSkill` false (a wake run of a fork's
37
+ * child is delivered like any background run; no parent run waits on it) and the run's own budget
38
+ * run. Null when the run is unknown or its conversation was never dispatched.
39
+ */
40
+ export async function deliveryRowOfChildRun(db, childRunId) {
41
+ const own = await dispatchOfChildRun(db, childRunId);
42
+ if (own)
43
+ return own;
44
+ const run = await db
45
+ .selectFrom("runs")
46
+ .select(["conversation_id", "budget_run_id"])
47
+ .where("id", "=", childRunId)
48
+ .executeTakeFirst();
49
+ if (!run)
50
+ return null;
51
+ const latest = await db
52
+ .selectFrom("subagent_dispatches")
53
+ .select(DISPATCH_COLUMNS)
54
+ .where("child_conversation_id", "=", run.conversation_id)
55
+ .orderBy("created_at", "desc")
56
+ .limit(1)
57
+ .executeTakeFirst();
58
+ if (!latest)
59
+ return null;
60
+ return {
61
+ ...toRow(latest),
62
+ childRunId,
63
+ forSkill: false,
64
+ ...(run.budget_run_id !== null && { budgetRunId: run.budget_run_id }),
65
+ };
66
+ }
28
67
  /** The dispatch of the parent call `(runId, callId)`, or null (not dispatched yet). */
29
68
  export async function dispatchOfCall(db, runId, callId) {
30
69
  const r = await db
@@ -35,6 +74,63 @@ export async function dispatchOfCall(db, runId, callId) {
35
74
  .executeTakeFirst();
36
75
  return r ? toRow(r) : null;
37
76
  }
77
+ /**
78
+ * `conversationId` and its ancestors, nearest first, ending at the root of its tree (the first
79
+ * conversation without a parent); just `[conversationId]` for a root or an unknown id. Walks at
80
+ * most 16 levels, far above `subagents.maxDepth`'s bound of 5.
81
+ */
82
+ async function ancestryOf(db, conversationId) {
83
+ const chain = [conversationId];
84
+ for (let i = 0; i < 16; i++) {
85
+ const row = await db
86
+ .selectFrom("conversations")
87
+ .select("parent_conversation_id")
88
+ .where("id", "=", chain[chain.length - 1])
89
+ .executeTakeFirst();
90
+ if (!row?.parent_conversation_id)
91
+ return chain;
92
+ chain.push(row.parent_conversation_id);
93
+ }
94
+ return chain;
95
+ }
96
+ /**
97
+ * The root conversation of `conversationId`'s tree (agent map spec §6): the first ancestor without
98
+ * a parent, or `conversationId` itself for a root (or an unknown id).
99
+ */
100
+ export async function rootConversationOf(db, conversationId) {
101
+ return (await ancestryOf(db, conversationId)).at(-1);
102
+ }
103
+ /**
104
+ * Where the sub-agent conversation `conversationId`, in its run `runId`, shows a request for a
105
+ * person (`subagent_waiting`: an approval, a question or a connect card; agent map spec §7): the
106
+ * **root** conversation of its tree, the only one a person looks at, with the path from the root's
107
+ * child down to it, under the root run that last dispatched (or messaged) the root's child on that
108
+ * path (for a child of the root, the run's own dispatch first). `parent`, when the caller knows the
109
+ * run's dispatch and it was made by the root (`depth` 0), answers without a read. Null for a root
110
+ * conversation, or a branch the root never dispatched.
111
+ */
112
+ export async function rootSurfaceOf(db, conversationId, runId, parent) {
113
+ if (parent?.depth === 0) {
114
+ return { conversationId: parent.conversationId, runId: parent.runId, path: [conversationId] };
115
+ }
116
+ const chain = await ancestryOf(db, conversationId);
117
+ if (chain.length < 2)
118
+ return null;
119
+ const root = chain.at(-1);
120
+ const path = chain.slice(0, -1).reverse();
121
+ const top = path[0];
122
+ const own = path.length === 1 ? await dispatchOfChildRun(db, runId) : null;
123
+ const dispatch = own ??
124
+ (await db
125
+ .selectFrom("subagent_dispatches")
126
+ .select(["parent_run_id as parentRunId"])
127
+ .where("child_conversation_id", "=", top)
128
+ .where("parent_conversation_id", "=", root)
129
+ .orderBy("created_at", "desc")
130
+ .limit(1)
131
+ .executeTakeFirst());
132
+ return dispatch ? { conversationId: root, runId: dispatch.parentRunId, path } : null;
133
+ }
38
134
  /** All events of one run of a conversation, by seq. */
39
135
  async function runEvents(eventLog, conversationId, runId) {
40
136
  const out = [];
@@ -49,18 +145,18 @@ async function runEvents(eventLog, conversationId, runId) {
49
145
  }
50
146
  }
51
147
  /**
52
- * The tool result of a finished child run (spec §4.4) and its `subagent_finished` payload, from
53
- * the child's log only: the status from its terminal event, the reply from its last
148
+ * The result of a finished child run (spec §4.4) and its `subagent_finished` payload, from the
149
+ * child's log only: the status from its terminal event, the reply from its last
54
150
  * `assistant_message` (text blocks), the tool call count from its `tool_result` events, the usage
55
151
  * from its `usage` events (compaction included) and the duration from `run_started` to the
56
- * terminal event. Null while the run has no terminal event.
152
+ * terminal event. Null while the run has no terminal event. `content` is the fork report's text
153
+ * (`agentResultText`); `reply`, `errorMessage` and `abortedBy` are what a background child's
154
+ * finished `subagent_delivery` carries.
57
155
  *
58
156
  * `modelGiven`: the parent's call named a `model`; for an org agent, which runs on its own model
59
157
  * (§5.4, §5.5), the status line then says `model: the agent's own`.
60
158
  */
61
- export async function childResult(eventLog, row,
62
- /** `forSkill`: a fork invocation's report (no resume hint, see `agentResultText`). */
63
- opts = {}) {
159
+ export async function childResult(eventLog, row, opts = {}) {
64
160
  const events = await runEvents(eventLog, row.childConversationId, row.childRunId);
65
161
  const terminal = events.find((e) => e.type === "run_finished" || e.type === "run_failed" || e.type === "run_aborted");
66
162
  if (!terminal)
@@ -121,10 +217,12 @@ opts = {}) {
121
217
  tokens: usageTokens(usage),
122
218
  ...(abortedBy !== undefined && { abortedBy }),
123
219
  ...(ownModel && { ownModel }),
124
- ...(opts.forSkill === true && { noResumeHint: true }),
125
220
  });
126
221
  return {
127
222
  ...text,
223
+ reply,
224
+ ...(errorMessage !== undefined && { errorMessage }),
225
+ ...(abortedBy !== undefined && { abortedBy }),
128
226
  finished: {
129
227
  subagentId: row.childConversationId,
130
228
  childRunId: row.childRunId,
@@ -42,6 +42,13 @@ export interface CheckedOrgAgent {
42
42
  version: number;
43
43
  definition: AgentDefinition;
44
44
  }
45
+ /** Where a new child sits (agent map spec §6): its depth below the root and the tree's limit. */
46
+ export interface ChildDepth {
47
+ /** The child's depth: 1 for a child of a root conversation. */
48
+ childDepth: number;
49
+ /** `subagents.maxDepth` for the organization; a child at it never gets `Agent`. */
50
+ maxDepth: number;
51
+ }
45
52
  /**
46
53
  * The effective definition of a sub-agent at its first dispatch (spec §5.3–§5.5):
47
54
  * - `general` / `inline` / `plugin`: the parent's definition narrowed by the template (tools by
@@ -52,10 +59,12 @@ export interface CheckedOrgAgent {
52
59
  * (`tierFallback`); a template `effort` is set when the resolved model declares it;
53
60
  * - `agent`: the org agent's version that passed the gates (`orgAgent`, from {@link checkOrgAgent}),
54
61
  * its own tools minus the child-removed ones, its policies with the parent's on top (stricter
55
- * wins), its skills and model; `tier` ignored.
56
- * The `subagents` block is never part of a child's definition (depth 1).
62
+ * wins), its skills, model and `subagents` block; `tier` ignored.
63
+ * Nesting (agent map spec §4.1): `Agent` stays unless the child is at `maxDepth`; the frozen
64
+ * definition keeps a `subagents` block, the roster the child dispatches from: an org agent's own,
65
+ * otherwise the parent definition's (a general-purpose, inline or plugin child inherits it).
57
66
  */
58
- export declare function effectiveDefinition(d: EffectiveDefinitionDeps, a: {
67
+ export declare function effectiveDefinition(d: EffectiveDefinitionDeps, a: ChildDepth & {
59
68
  orgId: string;
60
69
  parent: AgentDefinition;
61
70
  parentAgentId: string;