@capybara-hq/kernel 0.1.0-rc.3 → 0.1.0-rc.5

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 (604) hide show
  1. package/bootstrap.json +61 -5
  2. package/dist/admin/admin.controller.d.ts +47 -16
  3. package/dist/admin/admin.controller.js +44 -19
  4. package/dist/admin/extensions.controller.d.ts +24 -3
  5. package/dist/admin/extensions.controller.js +48 -8
  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 +19 -0
  13. package/dist/agents/agent-lookup.js +21 -0
  14. package/dist/agents/agent-profile.service.d.ts +29 -0
  15. package/dist/agents/agent-profile.service.js +117 -0
  16. package/dist/agents/agents.controller.d.ts +168 -3
  17. package/dist/agents/agents.controller.js +201 -12
  18. package/dist/agents/agents.module.d.ts +4 -1
  19. package/dist/agents/agents.module.js +36 -6
  20. package/dist/agents/agents.service.d.ts +64 -27
  21. package/dist/agents/agents.service.js +199 -74
  22. package/dist/agents/definition.d.ts +53 -0
  23. package/dist/agents/definition.js +55 -0
  24. package/dist/agents/from-template.d.ts +106 -0
  25. package/dist/agents/from-template.js +649 -0
  26. package/dist/agents/from-template.service.d.ts +60 -0
  27. package/dist/agents/from-template.service.js +161 -0
  28. package/dist/agents/instruction-files.d.ts +60 -0
  29. package/dist/agents/instruction-files.js +111 -0
  30. package/dist/agents/models.controller.d.ts +9 -3
  31. package/dist/agents/models.controller.js +19 -4
  32. package/dist/agents/org-templates.d.ts +176 -0
  33. package/dist/agents/org-templates.js +827 -0
  34. package/dist/agents/pending-connector-requests.d.ts +77 -0
  35. package/dist/agents/pending-connector-requests.js +215 -0
  36. package/dist/agents/pending-connectors.controller.d.ts +39 -0
  37. package/dist/agents/pending-connectors.controller.js +91 -0
  38. package/dist/agents/pending-connectors.service.d.ts +62 -0
  39. package/dist/agents/pending-connectors.service.js +282 -0
  40. package/dist/agents/profile.d.ts +96 -0
  41. package/dist/agents/profile.js +51 -0
  42. package/dist/agents/readiness.controller.d.ts +26 -0
  43. package/dist/agents/readiness.controller.js +56 -0
  44. package/dist/agents/templates.controller.d.ts +86 -5
  45. package/dist/agents/templates.controller.js +171 -7
  46. package/dist/agents/templates.d.ts +127 -23
  47. package/dist/agents/templates.js +476 -53
  48. package/dist/background/background.controller.d.ts +38 -0
  49. package/dist/background/background.controller.js +87 -0
  50. package/dist/background/background.module.d.ts +10 -0
  51. package/dist/background/background.module.js +39 -0
  52. package/dist/background/finish.d.ts +44 -0
  53. package/dist/background/finish.js +94 -0
  54. package/dist/background/launch-lock.d.ts +15 -0
  55. package/dist/background/launch-lock.js +40 -0
  56. package/dist/background/launch.d.ts +36 -0
  57. package/dist/background/launch.js +70 -0
  58. package/dist/background/poll.job.d.ts +56 -0
  59. package/dist/background/poll.job.js +190 -0
  60. package/dist/background/render.d.ts +23 -0
  61. package/dist/background/render.js +48 -0
  62. package/dist/background/session.d.ts +48 -0
  63. package/dist/background/session.js +79 -0
  64. package/dist/background/status.d.ts +35 -0
  65. package/dist/background/status.js +57 -0
  66. package/dist/background/stop.d.ts +68 -0
  67. package/dist/background/stop.js +243 -0
  68. package/dist/background/store.d.ts +162 -0
  69. package/dist/background/store.js +357 -0
  70. package/dist/background/store.module.d.ts +6 -0
  71. package/dist/background/store.module.js +22 -0
  72. package/dist/background/tasks.service.d.ts +77 -0
  73. package/dist/background/tasks.service.js +211 -0
  74. package/dist/background/wake-rules.d.ts +66 -0
  75. package/dist/background/wake-rules.js +113 -0
  76. package/dist/background/wake.d.ts +30 -0
  77. package/dist/background/wake.js +63 -0
  78. package/dist/catalog/admin-catalog.controller.d.ts +129 -30
  79. package/dist/catalog/admin-catalog.controller.js +213 -42
  80. package/dist/catalog/catalog-content.d.ts +58 -32
  81. package/dist/catalog/catalog-content.js +34 -8
  82. package/dist/catalog/catalog-import.module.d.ts +7 -0
  83. package/dist/catalog/catalog-import.module.js +60 -0
  84. package/dist/catalog/catalog-items.d.ts +111 -7
  85. package/dist/catalog/catalog-items.js +279 -13
  86. package/dist/catalog/catalog-scope.service.d.ts +260 -0
  87. package/dist/catalog/catalog-scope.service.js +1116 -0
  88. package/dist/catalog/catalog.module.d.ts +7 -9
  89. package/dist/catalog/catalog.module.js +41 -31
  90. package/dist/catalog/catalog.service.d.ts +101 -29
  91. package/dist/catalog/catalog.service.js +104 -106
  92. package/dist/catalog/claude/agents.js +2 -0
  93. package/dist/catalog/cli.d.ts +11 -1
  94. package/dist/catalog/cli.js +26 -1
  95. package/dist/catalog/component-promotion.d.ts +96 -0
  96. package/dist/catalog/component-promotion.js +395 -0
  97. package/dist/catalog/component-scope.controller.d.ts +152 -0
  98. package/dist/catalog/component-scope.controller.js +287 -0
  99. package/dist/catalog/component-scope.service.d.ts +303 -0
  100. package/dist/catalog/component-scope.service.js +936 -0
  101. package/dist/catalog/component-state.d.ts +174 -0
  102. package/dist/catalog/component-state.js +437 -0
  103. package/dist/catalog/job-ids.d.ts +30 -0
  104. package/dist/catalog/job-ids.js +25 -0
  105. package/dist/catalog/marketplace-fetch.d.ts +1 -1
  106. package/dist/catalog/marketplaces.controller.d.ts +22 -5
  107. package/dist/catalog/marketplaces.controller.js +56 -7
  108. package/dist/catalog/marketplaces.service.d.ts +54 -14
  109. package/dist/catalog/marketplaces.service.js +71 -22
  110. package/dist/catalog/org-catalog.controller.d.ts +125 -34
  111. package/dist/catalog/org-catalog.controller.js +181 -65
  112. package/dist/catalog/org-catalog.service.d.ts +65 -33
  113. package/dist/catalog/org-catalog.service.js +324 -157
  114. package/dist/catalog/org-extension-switch.d.ts +41 -0
  115. package/dist/catalog/org-extension-switch.js +115 -0
  116. package/dist/catalog/org-extension.controller.d.ts +119 -0
  117. package/dist/catalog/org-extension.controller.js +266 -0
  118. package/dist/catalog/org-plugin-uploads.controller.d.ts +98 -0
  119. package/dist/catalog/org-plugin-uploads.controller.js +213 -0
  120. package/dist/catalog/org-plugin-uploads.d.ts +63 -0
  121. package/dist/catalog/org-plugin-uploads.js +116 -0
  122. package/dist/catalog/owned-items.d.ts +184 -0
  123. package/dist/catalog/owned-items.js +789 -0
  124. package/dist/catalog/owned-plugin-cleanup.d.ts +56 -0
  125. package/dist/catalog/owned-plugin-cleanup.js +194 -0
  126. package/dist/catalog/ownership.d.ts +172 -0
  127. package/dist/catalog/ownership.js +326 -0
  128. package/dist/catalog/platform-components.d.ts +221 -0
  129. package/dist/catalog/platform-components.js +761 -0
  130. package/dist/catalog/platform-migration.d.ts +115 -0
  131. package/dist/catalog/platform-migration.js +582 -0
  132. package/dist/catalog/plugin-import.d.ts +178 -34
  133. package/dist/catalog/plugin-import.js +623 -83
  134. package/dist/catalog/plugin-install.d.ts +185 -41
  135. package/dist/catalog/plugin-install.js +758 -126
  136. package/dist/catalog/plugin-upgrade.d.ts +260 -225
  137. package/dist/catalog/plugin-upgrade.js +1148 -1137
  138. package/dist/catalog/request-rules.d.ts +65 -0
  139. package/dist/catalog/request-rules.js +217 -0
  140. package/dist/catalog/requests.service.d.ts +193 -118
  141. package/dist/catalog/requests.service.js +526 -343
  142. package/dist/catalog/reserved-names.d.ts +8 -0
  143. package/dist/catalog/reserved-names.js +42 -0
  144. package/dist/catalog/scope-orgs.d.ts +21 -0
  145. package/dist/catalog/scope-orgs.js +67 -0
  146. package/dist/catalog/scope-state.d.ts +35 -0
  147. package/dist/catalog/scope-state.js +87 -0
  148. package/dist/catalog/scope-sync-workers.d.ts +7 -0
  149. package/dist/catalog/scope-sync-workers.js +29 -0
  150. package/dist/catalog/scope-sync.d.ts +176 -0
  151. package/dist/catalog/scope-sync.js +576 -0
  152. package/dist/catalog/scope.d.ts +42 -0
  153. package/dist/catalog/scope.js +42 -0
  154. package/dist/catalog/unshare.d.ts +22 -0
  155. package/dist/catalog/unshare.js +118 -0
  156. package/dist/channels/actions.js +1 -0
  157. package/dist/channels/cards.js +21 -3
  158. package/dist/channels/channels.module.js +2 -0
  159. package/dist/channels/connections.service.d.ts +16 -1
  160. package/dist/channels/connections.service.js +38 -4
  161. package/dist/channels/inbound.d.ts +9 -1
  162. package/dist/channels/inbound.js +67 -5
  163. package/dist/channels/phrases.d.ts +35 -0
  164. package/dist/channels/phrases.js +29 -0
  165. package/dist/channels/threads.d.ts +5 -0
  166. package/dist/channels/threads.js +8 -0
  167. package/dist/config/docs.js +3 -1
  168. package/dist/config/schema.d.ts +24 -2
  169. package/dist/config/schema.js +145 -19
  170. package/dist/conversations/access.d.ts +6 -4
  171. package/dist/conversations/access.js +29 -5
  172. package/dist/conversations/agent-tree.d.ts +46 -0
  173. package/dist/conversations/agent-tree.js +92 -0
  174. package/dist/conversations/attachments.service.d.ts +30 -0
  175. package/dist/conversations/attachments.service.js +130 -5
  176. package/dist/conversations/conversations.controller.d.ts +79 -23
  177. package/dist/conversations/conversations.controller.js +141 -50
  178. package/dist/conversations/conversations.module.d.ts +1 -1
  179. package/dist/conversations/conversations.module.js +10 -7
  180. package/dist/conversations/conversations.service.d.ts +108 -9
  181. package/dist/conversations/conversations.service.js +237 -30
  182. package/dist/conversations/environment-status.d.ts +24 -0
  183. package/dist/conversations/environment-status.js +71 -0
  184. package/dist/conversations/event-log.d.ts +21 -6
  185. package/dist/conversations/event-log.js +70 -1
  186. package/dist/conversations/events.d.ts +140 -0
  187. package/dist/conversations/events.js +142 -13
  188. package/dist/conversations/queue.d.ts +3 -1
  189. package/dist/conversations/queue.js +13 -2
  190. package/dist/conversations/queue.service.d.ts +1 -1
  191. package/dist/conversations/queue.service.js +8 -1
  192. package/dist/conversations/titles.d.ts +12 -3
  193. package/dist/conversations/titles.js +36 -8
  194. package/dist/conversations/tree.d.ts +17 -0
  195. package/dist/conversations/tree.js +42 -0
  196. package/dist/ctx/create-ctx.d.ts +5 -0
  197. package/dist/ctx/create-ctx.js +15 -5
  198. package/dist/db/kernel-schema.d.ts +420 -20
  199. package/dist/db/pool.d.ts +5 -0
  200. package/dist/db/pool.js +3 -0
  201. package/dist/environments/access.d.ts +41 -0
  202. package/dist/environments/access.js +77 -0
  203. package/dist/environments/conversation-environments.d.ts +61 -0
  204. package/dist/environments/conversation-environments.js +170 -0
  205. package/dist/environments/dto.d.ts +25 -0
  206. package/dist/environments/dto.js +12 -0
  207. package/dist/environments/environments.controller.d.ts +33 -0
  208. package/dist/environments/environments.controller.js +110 -0
  209. package/dist/environments/environments.module.d.ts +8 -0
  210. package/dist/environments/environments.module.js +27 -0
  211. package/dist/environments/environments.service.d.ts +153 -0
  212. package/dist/environments/environments.service.js +541 -0
  213. package/dist/environments/legacy-cleanup.job.d.ts +34 -0
  214. package/dist/environments/legacy-cleanup.job.js +141 -0
  215. package/dist/errors.d.ts +90 -2
  216. package/dist/errors.js +90 -2
  217. package/dist/evals/reconstruct.d.ts +18 -9
  218. package/dist/evals/reconstruct.js +26 -7
  219. package/dist/evals/run-replay.d.ts +7 -2
  220. package/dist/evals/run-replay.js +42 -7
  221. package/dist/evals/step-replay.d.ts +2 -5
  222. package/dist/evals/step-replay.js +13 -7
  223. package/dist/evals/trajectory.js +1 -1
  224. package/dist/evals/trajectory.service.d.ts +8 -3
  225. package/dist/evals/trajectory.service.js +26 -14
  226. package/dist/evals/worker.d.ts +5 -5
  227. package/dist/evals/worker.js +9 -3
  228. package/dist/extensions/admin-ops.d.ts +36 -10
  229. package/dist/extensions/admin-ops.js +67 -42
  230. package/dist/extensions/admin-view.d.ts +39 -10
  231. package/dist/extensions/admin-view.js +111 -20
  232. package/dist/extensions/blobs.js +1 -0
  233. package/dist/extensions/bootstrap.d.ts +17 -4
  234. package/dist/extensions/bootstrap.js +70 -9
  235. package/dist/extensions/cli.d.ts +12 -0
  236. package/dist/extensions/cli.js +11 -2
  237. package/dist/extensions/config-issues.d.ts +13 -1
  238. package/dist/extensions/config-issues.js +22 -5
  239. package/dist/extensions/config-json-schema.d.ts +43 -7
  240. package/dist/extensions/config-json-schema.js +124 -58
  241. package/dist/extensions/deployment-config-store.d.ts +6 -0
  242. package/dist/extensions/deployment-config.d.ts +78 -8
  243. package/dist/extensions/deployment-config.js +172 -34
  244. package/dist/extensions/display-name.d.ts +22 -0
  245. package/dist/extensions/display-name.js +77 -0
  246. package/dist/extensions/effective-config.d.ts +127 -0
  247. package/dist/extensions/effective-config.js +368 -0
  248. package/dist/extensions/extensions.module.js +14 -2
  249. package/dist/extensions/hooks.d.ts +37 -4
  250. package/dist/extensions/hooks.js +82 -16
  251. package/dist/extensions/host.d.ts +45 -2
  252. package/dist/extensions/host.js +112 -16
  253. package/dist/extensions/installs.d.ts +20 -8
  254. package/dist/extensions/installs.js +37 -15
  255. package/dist/extensions/org-config.d.ts +81 -6
  256. package/dist/extensions/org-config.js +195 -44
  257. package/dist/extensions/org-levels.d.ts +37 -0
  258. package/dist/extensions/org-levels.js +71 -0
  259. package/dist/extensions/org-overrides.d.ts +151 -0
  260. package/dist/extensions/org-overrides.js +524 -0
  261. package/dist/extensions/package.d.ts +14 -1
  262. package/dist/extensions/package.js +51 -2
  263. package/dist/extensions/permission-view.d.ts +19 -4
  264. package/dist/extensions/permission-view.js +4 -4
  265. package/dist/extensions/plugin-items.d.ts +21 -0
  266. package/dist/extensions/plugin-items.js +42 -0
  267. package/dist/extensions/point-defaults.controller.d.ts +34 -0
  268. package/dist/extensions/point-defaults.controller.js +71 -0
  269. package/dist/extensions/point-defaults.d.ts +71 -0
  270. package/dist/extensions/point-defaults.js +234 -0
  271. package/dist/extensions/registry.d.ts +1 -1
  272. package/dist/extensions/registry.js +2 -0
  273. package/dist/extensions/resolve.d.ts +5 -1
  274. package/dist/extensions/resolve.js +15 -2
  275. package/dist/files/previewers.d.ts +8 -1
  276. package/dist/files/previewers.js +35 -6
  277. package/dist/http/api.module.js +31 -3
  278. package/dist/http/app.d.ts +11 -2
  279. package/dist/http/app.js +31 -5
  280. package/dist/http/nest-logger.d.ts +6 -5
  281. package/dist/http/nest-logger.js +24 -10
  282. package/dist/identity/accounts.d.ts +29 -29
  283. package/dist/identity/accounts.js +47 -47
  284. package/dist/identity/audit.d.ts +2 -1
  285. package/dist/identity/auth.controller.js +9 -5
  286. package/dist/identity/auth.guard.d.ts +13 -5
  287. package/dist/identity/auth.guard.js +26 -9
  288. package/dist/identity/cookies.d.ts +20 -5
  289. package/dist/identity/cookies.js +44 -6
  290. package/dist/identity/identity.module.d.ts +1 -1
  291. package/dist/identity/identity.module.js +4 -4
  292. package/dist/identity/me.controller.d.ts +5 -1
  293. package/dist/identity/me.controller.js +12 -3
  294. package/dist/identity/principal.d.ts +3 -3
  295. package/dist/identity/principal.js +3 -3
  296. package/dist/identity/sessions.d.ts +12 -0
  297. package/dist/identity/sessions.js +45 -0
  298. package/dist/identity/settings.d.ts +22 -11
  299. package/dist/identity/settings.js +53 -18
  300. package/dist/identity/{enterprise-admin.d.ts → super-admin.d.ts} +5 -5
  301. package/dist/identity/{enterprise-admin.js → super-admin.js} +24 -24
  302. package/dist/inbox/inbox.module.d.ts +4 -1
  303. package/dist/inbox/inbox.module.js +7 -3
  304. package/dist/inbox/inbox.service.d.ts +62 -3
  305. package/dist/inbox/inbox.service.js +74 -4
  306. package/dist/inbox/org-notices.d.ts +63 -0
  307. package/dist/inbox/org-notices.js +91 -0
  308. package/dist/inbox/platform-inbox.controller.d.ts +23 -0
  309. package/dist/inbox/platform-inbox.controller.js +58 -0
  310. package/dist/inbox/platform-inbox.service.d.ts +151 -0
  311. package/dist/inbox/platform-inbox.service.js +263 -0
  312. package/dist/inbox/platform-notices.d.ts +19 -0
  313. package/dist/inbox/platform-notices.js +9 -0
  314. package/dist/index.d.ts +2 -2
  315. package/dist/index.js +1 -1
  316. package/dist/infra/cli/kernel-cli.module.js +9 -1
  317. package/dist/infra/config/kernel-config.service.js +27 -1
  318. package/dist/infra/database/database.module.js +1 -0
  319. package/dist/infra/database/xact-lock.d.ts +1 -1
  320. package/dist/infra/database/xact-lock.js +1 -1
  321. package/dist/infra/events/kernel-events.d.ts +19 -2
  322. package/dist/infra/lifecycle/process-guards.js +4 -0
  323. package/dist/infra/logging/logging.module.d.ts +4 -2
  324. package/dist/infra/logging/logging.module.js +24 -6
  325. package/dist/infra/queue/add-job-once.d.ts +14 -0
  326. package/dist/infra/queue/add-job-once.js +16 -0
  327. package/dist/infra/queue/redis-connection.d.ts +6 -0
  328. package/dist/infra/queue/redis-connection.js +7 -0
  329. package/dist/infra/redis/redis.module.js +6 -2
  330. package/dist/infra/tokens.d.ts +6 -1
  331. package/dist/infra/tokens.js +6 -1
  332. package/dist/kernel.module.js +6 -0
  333. package/dist/lifecycle/kernel-lifecycle.d.ts +1 -1
  334. package/dist/lifecycle/kernel-lifecycle.js +4 -4
  335. package/dist/log.d.ts +13 -1
  336. package/dist/log.js +93 -17
  337. package/dist/models/prices.d.ts +5 -5
  338. package/dist/models/prices.js +4 -4
  339. package/dist/models/purposes.controller.d.ts +6 -4
  340. package/dist/models/purposes.controller.js +13 -7
  341. package/dist/models/purposes.d.ts +43 -9
  342. package/dist/models/purposes.js +48 -18
  343. package/dist/orgs/directory-sync.d.ts +14 -5
  344. package/dist/orgs/directory-sync.js +41 -17
  345. package/dist/orgs/offboarding.d.ts +12 -8
  346. package/dist/orgs/offboarding.js +54 -33
  347. package/dist/orgs/org-lock.d.ts +5 -0
  348. package/dist/orgs/org-lock.js +13 -0
  349. package/dist/orgs/org.guard.d.ts +10 -0
  350. package/dist/orgs/org.guard.js +43 -32
  351. package/dist/orgs/orgs.module.js +3 -0
  352. package/dist/orgs/orgs.service.d.ts +20 -7
  353. package/dist/orgs/orgs.service.js +32 -12
  354. package/dist/orgs/roles.d.ts +1 -1
  355. package/dist/orgs/roles.js +5 -1
  356. package/dist/orgs/settings.controller.d.ts +1 -1
  357. package/dist/orgs/settings.service.d.ts +20 -3
  358. package/dist/orgs/settings.service.js +19 -4
  359. package/dist/overrides.d.ts +3 -0
  360. package/dist/overrides.js +2 -0
  361. package/dist/platform/actor.d.ts +48 -0
  362. package/dist/platform/actor.js +100 -0
  363. package/dist/platform/agent-docs.d.ts +18 -0
  364. package/dist/platform/agent-docs.js +59 -0
  365. package/dist/platform/availability.d.ts +14 -0
  366. package/dist/platform/availability.js +43 -0
  367. package/dist/platform/errors.d.ts +11 -0
  368. package/dist/platform/errors.js +26 -0
  369. package/dist/platform/exclusions.d.ts +12 -0
  370. package/dist/platform/exclusions.js +1387 -0
  371. package/dist/platform/method.d.ts +6 -0
  372. package/dist/platform/method.js +15 -0
  373. package/dist/platform/operation.d.ts +92 -0
  374. package/dist/platform/operation.js +35 -0
  375. package/dist/platform/ops/agent-templates.ops.d.ts +14 -0
  376. package/dist/platform/ops/agent-templates.ops.js +92 -0
  377. package/dist/platform/ops/agents.ops.d.ts +19 -0
  378. package/dist/platform/ops/agents.ops.js +294 -0
  379. package/dist/platform/ops/connectors.ops.d.ts +15 -0
  380. package/dist/platform/ops/connectors.ops.js +126 -0
  381. package/dist/platform/ops/errors.d.ts +11 -0
  382. package/dist/platform/ops/errors.js +22 -0
  383. package/dist/platform/ops/extensions.ops.d.ts +19 -0
  384. package/dist/platform/ops/extensions.ops.js +116 -0
  385. package/dist/platform/ops/marketplaces.ops.d.ts +16 -0
  386. package/dist/platform/ops/marketplaces.ops.js +157 -0
  387. package/dist/platform/ops/paging.d.ts +14 -0
  388. package/dist/platform/ops/paging.js +20 -0
  389. package/dist/platform/ops/platform.ops.d.ts +23 -0
  390. package/dist/platform/ops/platform.ops.js +158 -0
  391. package/dist/platform/ops/plugins.ops.d.ts +33 -0
  392. package/dist/platform/ops/plugins.ops.js +377 -0
  393. package/dist/platform/ops/requests.ops.d.ts +14 -0
  394. package/dist/platform/ops/requests.ops.js +153 -0
  395. package/dist/platform/ops/role.d.ts +4 -0
  396. package/dist/platform/ops/role.js +10 -0
  397. package/dist/platform/ops/skills.ops.d.ts +13 -0
  398. package/dist/platform/ops/skills.ops.js +98 -0
  399. package/dist/platform/ops/summary.d.ts +10 -0
  400. package/dist/platform/ops/summary.js +18 -0
  401. package/dist/platform/platform-ops.module.d.ts +7 -0
  402. package/dist/platform/platform-ops.module.js +55 -0
  403. package/dist/platform/platform.module.d.ts +8 -0
  404. package/dist/platform/platform.module.js +25 -0
  405. package/dist/platform/redact-orgs.d.ts +7 -0
  406. package/dist/platform/redact-orgs.js +52 -0
  407. package/dist/platform/registry.d.ts +30 -0
  408. package/dist/platform/registry.js +111 -0
  409. package/dist/roles/worker-role.d.ts +6 -4
  410. package/dist/roles/worker-role.js +14 -7
  411. package/dist/roles/worker.module.d.ts +1 -1
  412. package/dist/roles/worker.module.js +15 -1
  413. package/dist/runtime/context/build.d.ts +11 -7
  414. package/dist/runtime/context/build.js +46 -19
  415. package/dist/runtime/context/claude-tools.d.ts +3 -1
  416. package/dist/runtime/context/claude-tools.js +8 -6
  417. package/dist/runtime/context/compaction.js +13 -0
  418. package/dist/runtime/context/reminders.d.ts +2 -0
  419. package/dist/runtime/context/reminders.js +2 -0
  420. package/dist/runtime/context/skills.js +9 -2
  421. package/dist/runtime/context/tool-changes.d.ts +27 -0
  422. package/dist/runtime/context/tool-changes.js +60 -0
  423. package/dist/runtime/hook-calls.js +2 -0
  424. package/dist/runtime/langgraph-loop.d.ts +3 -1
  425. package/dist/runtime/langgraph-loop.js +36 -17
  426. package/dist/runtime/loop.d.ts +34 -5
  427. package/dist/runtime/maintenance.d.ts +9 -4
  428. package/dist/runtime/maintenance.js +35 -8
  429. package/dist/runtime/model-call.d.ts +46 -8
  430. package/dist/runtime/model-call.js +72 -21
  431. package/dist/runtime/providers.d.ts +6 -0
  432. package/dist/runtime/providers.js +8 -0
  433. package/dist/runtime/run-control.d.ts +11 -1
  434. package/dist/runtime/run-control.js +12 -0
  435. package/dist/runtime/run-drafts.d.ts +85 -0
  436. package/dist/runtime/run-drafts.js +230 -0
  437. package/dist/runtime/run-jobs.d.ts +3 -5
  438. package/dist/runtime/run-jobs.js +3 -7
  439. package/dist/runtime/run-queue.d.ts +59 -2
  440. package/dist/runtime/run-queue.js +311 -38
  441. package/dist/runtime/run-worker.d.ts +11 -5
  442. package/dist/runtime/run-worker.js +69 -33
  443. package/dist/runtime/runtime.module.js +11 -3
  444. package/dist/runtime/step-log.d.ts +15 -4
  445. package/dist/runtime/step-log.js +24 -7
  446. package/dist/runtime/stream.controller.d.ts +23 -1
  447. package/dist/runtime/stream.controller.js +60 -3
  448. package/dist/runtime/stream.d.ts +4 -1
  449. package/dist/runtime/stream.js +27 -3
  450. package/dist/runtime/subagents/child.d.ts +55 -7
  451. package/dist/runtime/subagents/child.js +105 -7
  452. package/dist/runtime/subagents/definition.d.ts +12 -3
  453. package/dist/runtime/subagents/definition.js +44 -28
  454. package/dist/runtime/subagents/deliveries.d.ts +71 -0
  455. package/dist/runtime/subagents/deliveries.js +228 -0
  456. package/dist/runtime/subagents/dispatch.d.ts +115 -26
  457. package/dist/runtime/subagents/dispatch.js +212 -141
  458. package/dist/runtime/subagents/limits.d.ts +24 -5
  459. package/dist/runtime/subagents/limits.js +40 -6
  460. package/dist/runtime/subagents/messages.d.ts +95 -0
  461. package/dist/runtime/subagents/messages.js +328 -0
  462. package/dist/runtime/subagents/preamble.d.ts +4 -4
  463. package/dist/runtime/subagents/preamble.js +9 -7
  464. package/dist/runtime/subagents/progress.d.ts +8 -6
  465. package/dist/runtime/subagents/progress.js +11 -6
  466. package/dist/runtime/subagents/render.d.ts +30 -0
  467. package/dist/runtime/subagents/render.js +53 -0
  468. package/dist/runtime/subagents/roster.d.ts +24 -7
  469. package/dist/runtime/subagents/roster.js +47 -11
  470. package/dist/runtime/subagents/skill-fork.d.ts +3 -2
  471. package/dist/runtime/subagents/skill-fork.js +8 -4
  472. package/dist/runtime/subagents/status.d.ts +14 -0
  473. package/dist/runtime/subagents/status.js +23 -0
  474. package/dist/runtime/subagents/subagents.service.d.ts +7 -4
  475. package/dist/runtime/subagents/subagents.service.js +11 -6
  476. package/dist/runtime/usage-report.d.ts +2 -1
  477. package/dist/runtime/usage-report.js +19 -13
  478. package/dist/runtime/waits.d.ts +145 -36
  479. package/dist/runtime/waits.js +423 -109
  480. package/dist/sandbox/jobs.d.ts +40 -13
  481. package/dist/sandbox/jobs.js +57 -20
  482. package/dist/sandbox/leases.d.ts +37 -54
  483. package/dist/sandbox/leases.js +71 -115
  484. package/dist/sandbox/providers.d.ts +2 -2
  485. package/dist/sandbox/providers.js +1 -1
  486. package/dist/sandbox/sandbox.module.d.ts +3 -2
  487. package/dist/sandbox/sandbox.module.js +10 -4
  488. package/dist/sandbox/sandbox.service.d.ts +282 -129
  489. package/dist/sandbox/sandbox.service.js +736 -381
  490. package/dist/skills/catalog.d.ts +3 -2
  491. package/dist/skills/catalog.js +21 -43
  492. package/dist/skills/changes.controller.d.ts +7 -0
  493. package/dist/skills/changes.controller.js +19 -1
  494. package/dist/skills/invoke.js +8 -3
  495. package/dist/skills/package.d.ts +20 -1
  496. package/dist/skills/package.js +28 -1
  497. package/dist/skills/skills.controller.d.ts +39 -4
  498. package/dist/skills/skills.controller.js +88 -10
  499. package/dist/skills/skills.module.js +10 -1
  500. package/dist/skills/skills.service.d.ts +106 -26
  501. package/dist/skills/skills.service.js +421 -75
  502. package/dist/skills/usable.d.ts +81 -0
  503. package/dist/skills/usable.js +379 -0
  504. package/dist/tools/approvals.service.d.ts +20 -2
  505. package/dist/tools/approvals.service.js +25 -4
  506. package/dist/tools/builtin-names.d.ts +41 -7
  507. package/dist/tools/builtin-names.js +59 -7
  508. package/dist/tools/builtins/agent.d.ts +23 -21
  509. package/dist/tools/builtins/agent.js +62 -55
  510. package/dist/tools/builtins/builtin-tools.d.ts +19 -1
  511. package/dist/tools/builtins/builtin-tools.js +59 -2
  512. package/dist/tools/builtins/handback.d.ts +28 -0
  513. package/dist/tools/builtins/handback.js +53 -0
  514. package/dist/tools/builtins/platform.d.ts +34 -0
  515. package/dist/tools/builtins/platform.js +362 -0
  516. package/dist/tools/builtins/sandbox/bash.d.ts +1 -1
  517. package/dist/tools/builtins/sandbox/bash.js +241 -4
  518. package/dist/tools/builtins/sandbox/common.d.ts +69 -27
  519. package/dist/tools/builtins/sandbox/common.js +87 -48
  520. package/dist/tools/builtins/sandbox/deliver.js +1 -1
  521. package/dist/tools/builtins/sandbox/edit.js +2 -2
  522. package/dist/tools/builtins/sandbox/glob.js +2 -2
  523. package/dist/tools/builtins/sandbox/grep.js +2 -4
  524. package/dist/tools/builtins/sandbox/index.d.ts +3 -1
  525. package/dist/tools/builtins/sandbox/index.js +7 -1
  526. package/dist/tools/builtins/sandbox/read.js +1 -1
  527. package/dist/tools/builtins/sandbox/task-output.d.ts +74 -0
  528. package/dist/tools/builtins/sandbox/task-output.js +329 -0
  529. package/dist/tools/builtins/sandbox/task-stop.d.ts +10 -0
  530. package/dist/tools/builtins/sandbox/task-stop.js +113 -0
  531. package/dist/tools/builtins/sandbox/write.js +2 -2
  532. package/dist/tools/builtins/send-message.d.ts +56 -0
  533. package/dist/tools/builtins/send-message.js +100 -0
  534. package/dist/tools/builtins/skill-load.d.ts +22 -14
  535. package/dist/tools/builtins/skill-load.js +86 -57
  536. package/dist/tools/builtins/skill-write.js +1 -1
  537. package/dist/tools/builtins/web/errors.d.ts +8 -0
  538. package/dist/tools/builtins/web/errors.js +53 -0
  539. package/dist/tools/builtins/web/extract.d.ts +62 -0
  540. package/dist/tools/builtins/web/extract.js +271 -0
  541. package/dist/tools/builtins/web/fetch.d.ts +55 -0
  542. package/dist/tools/builtins/web/fetch.js +175 -0
  543. package/dist/tools/builtins/web/index.d.ts +13 -0
  544. package/dist/tools/builtins/web/index.js +12 -0
  545. package/dist/tools/builtins/web/page-cache.d.ts +25 -0
  546. package/dist/tools/builtins/web/page-cache.js +77 -0
  547. package/dist/tools/builtins/web/search.d.ts +25 -0
  548. package/dist/tools/builtins/web/search.js +210 -0
  549. package/dist/tools/builtins/web/url.d.ts +17 -0
  550. package/dist/tools/builtins/web/url.js +43 -0
  551. package/dist/tools/connectors.controller.d.ts +10 -0
  552. package/dist/tools/connectors.controller.js +12 -0
  553. package/dist/tools/connectors.service.d.ts +46 -5
  554. package/dist/tools/connectors.service.js +94 -15
  555. package/dist/tools/extension-tools.controller.d.ts +14 -0
  556. package/dist/tools/extension-tools.controller.js +37 -0
  557. package/dist/tools/info.d.ts +42 -1
  558. package/dist/tools/info.js +64 -1
  559. package/dist/tools/oauth/flow-paths.d.ts +1 -1
  560. package/dist/tools/oauth/flow-paths.js +1 -1
  561. package/dist/tools/org-tool-switches.d.ts +74 -0
  562. package/dist/tools/org-tool-switches.js +184 -0
  563. package/dist/tools/pipeline.d.ts +46 -40
  564. package/dist/tools/pipeline.js +202 -364
  565. package/dist/tools/policy.d.ts +1 -1
  566. package/dist/tools/policy.js +36 -16
  567. package/dist/tools/registry.d.ts +120 -8
  568. package/dist/tools/registry.js +112 -19
  569. package/dist/tools/tools.module.js +24 -2
  570. package/dist/tools/validate.js +1 -1
  571. package/dist/ui/views.d.ts +2 -1
  572. package/dist/ui/views.js +17 -3
  573. package/package.json +3 -3
  574. package/src/migrations/0064_account_last_org.sql +7 -0
  575. package/src/migrations/0065_conversation_archive.sql +8 -0
  576. package/src/migrations/0066_extension_display_name.sql +4 -0
  577. package/src/migrations/0067_agent_profiles.sql +20 -0
  578. package/src/migrations/0068_agent_avatar_uploads.sql +7 -0
  579. package/src/migrations/0069_attachments_agent_idx.sql +3 -0
  580. package/src/migrations/0070_background_tasks.sql +37 -0
  581. package/src/migrations/0071_background_tasks_reserve.sql +6 -0
  582. package/src/migrations/0072_background_tasks_stopping.sql +5 -0
  583. package/src/migrations/0073_org_extension_point_defaults.sql +11 -0
  584. package/src/migrations/0074_subagent_tree.sql +50 -0
  585. package/src/migrations/0075_plugin_scope.sql +61 -0
  586. package/src/migrations/0076_skills_created_by_nullable.sql +6 -0
  587. package/src/migrations/0077_scope_requests.sql +52 -0
  588. package/src/migrations/0078_scope_grant_switches.sql +18 -0
  589. package/src/migrations/0079_scope_live_install_switches.sql +19 -0
  590. package/src/migrations/0080_rename_enterprise_admin.sql +18 -0
  591. package/src/migrations/0081_platform_components.sql +129 -0
  592. package/src/migrations/0082_platform_migration.sql +33 -0
  593. package/src/migrations/0083_plugin_scope_sync_failures.sql +15 -0
  594. package/src/migrations/0084_org_owned_items.sql +85 -0
  595. package/src/migrations/0085_agent_templates_phase4.sql +45 -0
  596. package/src/migrations/0086_org_layering.sql +30 -0
  597. package/src/migrations/0087_approval_summary.sql +6 -0
  598. package/src/migrations/0088_environments.sql +80 -0
  599. package/dist/catalog/upgrade-targets.d.ts +0 -56
  600. package/dist/catalog/upgrade-targets.js +0 -90
  601. package/dist/conversations/sandbox-status.d.ts +0 -24
  602. package/dist/conversations/sandbox-status.js +0 -52
  603. package/dist/extensions/org-config.controller.d.ts +0 -24
  604. package/dist/extensions/org-config.controller.js +0 -62
@@ -10,7 +10,8 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
10
10
  import { Inject, Injectable, Optional } from "@nestjs/common";
11
11
  import { DelayedError } from "bullmq";
12
12
  import { sql } from "kysely";
13
- import { conversationTopic, EventLog, } from "../conversations/event-log.js";
13
+ import { EventLog } from "../conversations/event-log.js";
14
+ import { isAbsorbable, } from "../conversations/events.js";
14
15
  import { effectiveDefinition, NO_SELECTION, readSelection, sameModel, sameSelection, } from "../conversations/selection.js";
15
16
  import { TitleQueue } from "../conversations/titles.js";
16
17
  import { ApiError } from "../errors.js";
@@ -31,10 +32,11 @@ import { ConversationLock } from "./conversation-lock.js";
31
32
  import { RunError } from "./model-call.js";
32
33
  import { ProviderListError, ProviderRegistry } from "./providers.js";
33
34
  import { ORG_QUOTA_LEASE_MS, orgRunLimit, RUN_QUOTA } from "./quota.js";
35
+ import { RunDrafts, streamSink } from "./run-drafts.js";
34
36
  import { RunFinish, TERMINAL_STATUSES } from "./run-finish.js";
35
37
  import { RunQueue } from "./run-queue.js";
36
38
  import { AgentLoops, RunSteps } from "./run-steps.js";
37
- import { dispatchOfChildRun } from "./subagents/child.js";
39
+ import { dispatchOfChildRun, rootConversationOf } from "./subagents/child.js";
38
40
  import { childRunDefinition } from "./subagents/definition.js";
39
41
  import { forkBoundary } from "./subagents/skill-fork.js";
40
42
  import { Waits } from "./waits.js";
@@ -85,6 +87,7 @@ let RunWorker = class RunWorker {
85
87
  pipeline;
86
88
  finisher;
87
89
  txHost;
90
+ drafts;
88
91
  hooks;
89
92
  /** The two run queues' BullMQ workers (spec §7.4), once {@link start}ed on the worker role. */
90
93
  workers = [];
@@ -113,7 +116,9 @@ let RunWorker = class RunWorker {
113
116
  * (`stopOpenAgentCalls`; a no-op without dispatches); `fire` runs their observe hooks after the
114
117
  * commit (sub-agents spec §12, review m1: a failed or stalled parent too).
115
118
  */
116
- pipeline, finisher, txHost, hooks) {
119
+ pipeline, finisher, txHost,
120
+ /** The steps' live drafts this process writes for the runs it executes. */
121
+ drafts, hooks) {
117
122
  this.kdb = kdb;
118
123
  this.eventLog = eventLog;
119
124
  this.lock = lock;
@@ -133,6 +138,7 @@ let RunWorker = class RunWorker {
133
138
  this.pipeline = pipeline;
134
139
  this.finisher = finisher;
135
140
  this.txHost = txHost;
141
+ this.drafts = drafts;
136
142
  this.hooks = hooks;
137
143
  this.loop = loops.create(steps.deps);
138
144
  }
@@ -177,35 +183,16 @@ let RunWorker = class RunWorker {
177
183
  }
178
184
  }
179
185
  /**
180
- * 流式增量发布到会话频道(与 `{ kind: "events" }` 共用 `conv.<id>`),任意副本上的订阅方都能收到。
181
- * 发布失败只记日志:增量只是草稿,最终内容以日志中的 assistant_message 为准。
186
+ * The run's stream sink: deltas on the conversation's topic (any replica's subscribers get them)
187
+ * and the steps' live drafts in Redis ({@link streamSink}, spec 2026-11-07 §3.2).
182
188
  */
183
189
  sinkFor(conversationId) {
184
- // 本次运行执行中推出的文本字符数(按步,step_reset 清零):本进程正在执行的这次运行自己的计数
185
- let at = { runId: "", step: -1, chars: 0 };
186
- return (d) => {
187
- if (at.runId !== d.runId || at.step !== d.step || d.kind === "step_reset") {
188
- at = { runId: d.runId, step: d.step, chars: 0 };
189
- }
190
- const offset = at.chars;
191
- if (d.kind === "text")
192
- at.chars += d.text?.length ?? 0;
193
- const msg = {
194
- kind: "delta",
195
- runId: d.runId,
196
- step: d.step,
197
- delta: d.kind,
198
- ...(d.text !== undefined && { text: d.text }),
199
- ...(d.kind === "text" && { offset }),
200
- };
201
- this.bus
202
- .publish(conversationTopic(conversationId), msg)
203
- .catch((err) => this.log.warn("stream delta publish failed", { conversationId, err }));
204
- };
190
+ return streamSink(conversationId, { bus: this.bus, drafts: this.drafts, log: this.log });
205
191
  }
206
192
  /**
207
193
  * After any terminal commit of a run that is not a sub-agent's (sub-agents spec §12): stops its
208
- * active children on its behalf (no account). The wait sweep is the backstop.
194
+ * active fork invocation child on its behalf (no account); background `Agent` children keep
195
+ * running (agent map spec §5.4). The wait sweep is the backstop.
209
196
  */
210
197
  async stopChildren(runId) {
211
198
  try {
@@ -227,6 +214,14 @@ let RunWorker = class RunWorker {
227
214
  catch (err) {
228
215
  this.log.error("cannot report finished sub-agent run to its parent", { runId, err });
229
216
  }
217
+ // a sub-agent a person stopped stops its descendants too, also one it dispatched after the
218
+ // tree stop read the tree (agent map spec §6); any other end leaves them running
219
+ try {
220
+ await this.waits.stopDescendantsOfStopped(runId);
221
+ }
222
+ catch (err) {
223
+ this.log.error("cannot stop the descendants of a stopped sub-agent", { runId, err });
224
+ }
230
225
  }
231
226
  /**
232
227
  * 任务结束后的 ensureRun,失败按 {@link ENSURE_RETRY_DELAYS_MS} 退避重试;停机开始后不再等待间隔
@@ -368,6 +363,7 @@ let RunWorker = class RunWorker {
368
363
  "trigger_seq",
369
364
  "started_at",
370
365
  "waited_ms",
366
+ "budget_run_id",
371
367
  ])
372
368
  .where("id", "=", runId)
373
369
  .executeTakeFirst();
@@ -385,7 +381,7 @@ let RunWorker = class RunWorker {
385
381
  return;
386
382
  const conv = await this.db
387
383
  .selectFrom("conversations")
388
- .select(["org_id", "agent_id", "kind"])
384
+ .select(["org_id", "agent_id", "kind", "subagent_depth"])
389
385
  .where("id", "=", conversationId)
390
386
  .executeTakeFirst();
391
387
  if (!conv)
@@ -531,18 +527,36 @@ let RunWorker = class RunWorker {
531
527
  maxSteps = Math.min(started.payload.maxSteps, runtime.maxSteps);
532
528
  const row = await dispatchOfChildRun(this.db, runId);
533
529
  const otherAgent = started.payload.template.source === "agent";
530
+ const parentConversationId = row?.parentConversationId ?? started.payload.parent.conversationId;
531
+ // a sub-agent conversation is at depth 1 at least: one written before depths were recorded
532
+ // (default 0) was a child of a root
533
+ const depth = Math.max(conv.subagent_depth, 1) - 1;
534
+ const rootConversationId = depth === 0
535
+ ? parentConversationId
536
+ : await rootConversationOf(this.db, parentConversationId);
537
+ // the tree's budget window of THIS run (agent map spec §6): its own `budget_run_id`, set when
538
+ // it was created (a dispatch, or a wake run from the root's current window), else its
539
+ // dispatch's; never derived from the parent run, which for a wake run is the first dispatch's
540
+ const budgetRunId = run.budget_run_id ?? row?.budgetRunId;
534
541
  parent = row
535
542
  ? {
536
543
  conversationId: row.parentConversationId,
537
544
  runId: row.parentRunId,
538
545
  callId: row.parentCallId,
546
+ depth,
547
+ rootConversationId,
539
548
  otherAgent,
549
+ ...(budgetRunId !== undefined && { budgetRunId }),
550
+ ...(row.forSkill === true && { forSkill: true }),
540
551
  }
541
552
  : {
542
553
  conversationId: started.payload.parent.conversationId,
543
554
  runId: started.payload.parent.runId,
544
555
  callId: started.payload.parent.callId,
556
+ depth,
557
+ rootConversationId,
545
558
  otherAgent,
559
+ ...(budgetRunId !== undefined && { budgetRunId }),
546
560
  };
547
561
  }
548
562
  else {
@@ -642,15 +656,16 @@ let RunWorker = class RunWorker {
642
656
  .executeTakeFirstOrThrow();
643
657
  const startConsumed = Number(consumed_seq);
644
658
  let absorbed = startConsumed;
645
- const pendingUserMessages = async (afterSeq) => {
659
+ const pendingAbsorbable = async (afterSeq) => {
646
660
  // loop 声明已吸收到 afterSeq(续跑时来自 checkpoint,可能包含之前进程吸收的消息)。
647
661
  absorbed = Math.max(absorbed, afterSeq);
648
662
  const out = [];
649
663
  let after = Math.max(afterSeq, startConsumed);
650
664
  for (;;) {
651
665
  const page = await this.eventLog.readAfter(conversationId, after, READ_PAGE);
666
+ // messages and finished background tasks (spec 2026-11-05-background-bash-design §2.4)
652
667
  for (const e of page)
653
- if (e.type === "user_message")
668
+ if (isAbsorbable(e))
654
669
  out.push(e);
655
670
  const last = page.at(-1);
656
671
  if (page.length < READ_PAGE || !last)
@@ -677,7 +692,7 @@ let RunWorker = class RunWorker {
677
692
  signal: ac.signal,
678
693
  shutdown: state.shutdown.signal,
679
694
  sink: this.sinkFor(conversationId),
680
- pendingUserMessages,
695
+ pendingAbsorbable,
681
696
  limits: { maxSteps, deadline },
682
697
  // a sub-agent's conversation fires hooks like a chat, with `parent` set (spec §11)
683
698
  conversationKind: conv.kind === "eval" ? "eval" : conv.kind === "subagent" ? "subagent" : "chat",
@@ -701,6 +716,10 @@ let RunWorker = class RunWorker {
701
716
  });
702
717
  return "finished";
703
718
  }
719
+ finally {
720
+ // the execution here ended: what this process held of the run's drafts goes
721
+ this.drafts.release(runId);
722
+ }
704
723
  if (state.abandoned)
705
724
  return "abandoned";
706
725
  // 锁在运行中丢失:无论 loop 返回什么都不写终态,任务回到队列由持锁者续跑。
@@ -814,6 +833,14 @@ let RunWorker = class RunWorker {
814
833
  const agent = saved !== undefined
815
834
  ? effectiveDefinition(saved, await readSelection(t, conversationId))
816
835
  : current;
836
+ // a wake run's boundary is a finished background task (background Bash §3) or a sub-agent's
837
+ // delivery (agent map spec §5.3), not a message
838
+ const boundary = await t
839
+ .selectFrom("conversation_events")
840
+ .select("type")
841
+ .where("conversation_id", "=", conversationId)
842
+ .where("seq", "=", run.trigger_seq)
843
+ .executeTakeFirst();
817
844
  const [ev] = await this.eventLog.appendIn(conversationId, [
818
845
  {
819
846
  type: "run_started",
@@ -823,6 +850,14 @@ let RunWorker = class RunWorker {
823
850
  agentVersion: run.agent_version,
824
851
  model: agent.model,
825
852
  triggerAccountId: run.trigger_account_id,
853
+ ...(boundary?.type === "background_task_finished" && {
854
+ trigger: "background_task",
855
+ triggerSeq: Number(run.trigger_seq),
856
+ }),
857
+ ...(boundary?.type === "subagent_delivery" && {
858
+ trigger: "subagent",
859
+ triggerSeq: Number(run.trigger_seq),
860
+ }),
826
861
  },
827
862
  },
828
863
  ]);
@@ -914,7 +949,8 @@ RunWorker = __decorate([
914
949
  __param(18, Inject(ToolPipeline)),
915
950
  __param(19, Inject(RunFinish)),
916
951
  __param(20, Inject(TransactionHost)),
917
- __param(21, Optional()),
918
- __param(21, Inject(RUN_HOOKS))
952
+ __param(21, Inject(RunDrafts)),
953
+ __param(22, Optional()),
954
+ __param(22, Inject(RUN_HOOKS))
919
955
  ], RunWorker);
920
956
  export { RunWorker };
@@ -5,6 +5,8 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
5
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
6
  };
7
7
  import { Module } from "@nestjs/common";
8
+ import { BackgroundModule } from "../background/background.module.js";
9
+ import { BackgroundWake } from "../background/wake.js";
8
10
  import { ConversationAccessModule } from "../conversations/access.js";
9
11
  import { AttachmentsModule } from "../conversations/attachments.module.js";
10
12
  import { EventLogModule } from "../conversations/event-log.js";
@@ -23,12 +25,13 @@ import { MAINTENANCE_QUEUE_NAME } from "./maintenance-queue.js";
23
25
  import { ProvidersModule } from "./providers.js";
24
26
  import { EVAL_QUOTA, EVAL_QUOTA_PREFIX, OrgQuota, RUN_QUOTA, RUN_QUOTA_PREFIX } from "./quota.js";
25
27
  import { RunControl } from "./run-control.js";
28
+ import { RunDrafts } from "./run-drafts.js";
26
29
  import { RunFinish } from "./run-finish.js";
27
30
  import { RunJobsModule } from "./run-jobs.js";
28
31
  import { RunQueue } from "./run-queue.js";
29
32
  import { AgentLoops, RunSteps } from "./run-steps.js";
30
33
  import { RunWorker } from "./run-worker.js";
31
- import { StepLog } from "./step-log.js";
34
+ import { StepLogModule } from "./step-log.js";
32
35
  import { ConversationStreams } from "./stream.js";
33
36
  import { SubagentsModule } from "./subagents/subagents.service.js";
34
37
  import { UsageReportModule } from "./usage-report.js";
@@ -58,6 +61,8 @@ RuntimeModule = __decorate([
58
61
  SubagentsModule,
59
62
  UsageReportModule,
60
63
  TitlesModule,
64
+ StepLogModule,
65
+ BackgroundModule,
61
66
  // the producer side of `wait-timeout` jobs (`MaintenanceProcessor` consumes them)
62
67
  QueueModule.registerQueue(MAINTENANCE_QUEUE_NAME),
63
68
  ],
@@ -67,14 +72,16 @@ RuntimeModule = __decorate([
67
72
  RunAbort,
68
73
  KyselyCheckpointSaver,
69
74
  RunFinish,
70
- StepLog,
71
75
  RunQueue,
72
76
  Waits,
73
77
  DecisionResumer,
74
78
  RunControl,
79
+ RunDrafts,
75
80
  AgentLoops,
76
81
  RunSteps,
77
82
  RunWorker,
83
+ // a finished background task wakes an idle conversation (background Bash spec §3)
84
+ BackgroundWake,
78
85
  // one quota per key prefix (the org run quota, the org eval quota)
79
86
  {
80
87
  provide: RUN_QUOTA,
@@ -93,10 +100,11 @@ RuntimeModule = __decorate([
93
100
  RunAbort,
94
101
  KyselyCheckpointSaver,
95
102
  RunFinish,
96
- StepLog,
103
+ StepLogModule,
97
104
  RunQueue,
98
105
  Waits,
99
106
  RunControl,
107
+ RunDrafts,
100
108
  AgentLoops,
101
109
  RunSteps,
102
110
  RunWorker,
@@ -19,11 +19,16 @@ export declare class StepLog {
19
19
  constructor(kdb: KernelDb, eventLog: EventLog, txHost: TransactionHost);
20
20
  /**
21
21
  * Appends events of a sub-agent's run and adds the tokens of the usage events it newly wrote to
22
- * the parent run's `subagent_tokens_used` (sub-agents spec §8.3): a usage event already in the
23
- * log (an idempotent hit after a crash) adds nothing, so each call counts exactly once. Returns
24
- * what was written (hits included) and the highest new seq (null: nothing new).
22
+ * the `subagent_tokens_used` of the tree's budget run (sub-agents spec §8.3, agent map spec §6:
23
+ * the whole tree counts on one run): `counter.budgetRunId`, the run's own window
24
+ * (`SubagentParent.budgetRunId`), else the parent run's ({@link budgetRunOf}). A usage event
25
+ * already in the log (an idempotent hit after a crash) adds nothing, so each call counts exactly
26
+ * once. Returns what was written (hits included) and the highest new seq (null: nothing new).
25
27
  */
26
- appendCounted(conversationId: string, parentRunId: string, events: AppendEvent[]): Promise<{
28
+ appendCounted(conversationId: string, counter: {
29
+ parentRunId: string;
30
+ budgetRunId?: string | undefined;
31
+ }, events: AppendEvent[]): Promise<{
27
32
  written: ConversationEvent[];
28
33
  toSeq: number | null;
29
34
  }>;
@@ -38,3 +43,9 @@ export declare class StepLog {
38
43
  spec: ToolSpec;
39
44
  }[], events: AppendEvent[]): Promise<ConversationEvent[]>;
40
45
  }
46
+ /**
47
+ * The step writes ({@link StepLog}): a module of its own, so the tools domain (the `WebFetch`
48
+ * extraction's usage and denials) uses them without importing the runtime.
49
+ */
50
+ export declare class StepLogModule {
51
+ }
@@ -7,15 +7,16 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
7
7
  var __param = (this && this.__param) || function (paramIndex, decorator) {
8
8
  return function (target, key) { decorator(target, key, paramIndex); }
9
9
  };
10
- import { Inject, Injectable } from "@nestjs/common";
10
+ import { Inject, Injectable, Module } from "@nestjs/common";
11
11
  import { sql } from "kysely";
12
- import { EventLog } from "../conversations/event-log.js";
12
+ import { EventLog, EventLogModule } from "../conversations/event-log.js";
13
13
  import { usageTokens } from "../evals/budget.js";
14
14
  import { audit } from "../identity/audit.js";
15
15
  import { KernelDb } from "../infra/database/kernel-db.js";
16
16
  import { TransactionHost } from "../infra/database/transaction-host.js";
17
17
  import { Transactional } from "../infra/database/transactional.decorator.js";
18
18
  import { recordToolSpecs } from "../tools/specs.js";
19
+ import { budgetRunOf } from "./subagents/limits.js";
19
20
  /**
20
21
  * The writes of a run step that go to the event log together with another row, each in a
21
22
  * transaction of its own (the caller notifies the log after the commit): a model call with the
@@ -33,11 +34,13 @@ let StepLog = class StepLog {
33
34
  }
34
35
  /**
35
36
  * Appends events of a sub-agent's run and adds the tokens of the usage events it newly wrote to
36
- * the parent run's `subagent_tokens_used` (sub-agents spec §8.3): a usage event already in the
37
- * log (an idempotent hit after a crash) adds nothing, so each call counts exactly once. Returns
38
- * what was written (hits included) and the highest new seq (null: nothing new).
37
+ * the `subagent_tokens_used` of the tree's budget run (sub-agents spec §8.3, agent map spec §6:
38
+ * the whole tree counts on one run): `counter.budgetRunId`, the run's own window
39
+ * (`SubagentParent.budgetRunId`), else the parent run's ({@link budgetRunOf}). A usage event
40
+ * already in the log (an idempotent hit after a crash) adds nothing, so each call counts exactly
41
+ * once. Returns what was written (hits included) and the highest new seq (null: nothing new).
39
42
  */
40
- async appendCounted(conversationId, parentRunId, events) {
43
+ async appendCounted(conversationId, counter, events) {
41
44
  const t = this.kdb.db;
42
45
  // the conversation row lock the append takes anyway, taken first to read the seq before it
43
46
  const before = await t
@@ -56,7 +59,7 @@ let StepLog = class StepLog {
56
59
  await t
57
60
  .updateTable("runs")
58
61
  .set({ subagent_tokens_used: sql `subagent_tokens_used + ${tokens}` })
59
- .where("id", "=", parentRunId)
62
+ .where("id", "=", counter.budgetRunId ?? (await budgetRunOf(t, counter.parentRunId)))
60
63
  .execute();
61
64
  }
62
65
  return { written, toSeq: fresh.length > 0 ? Math.max(...fresh.map((e) => e.seq)) : null };
@@ -92,3 +95,17 @@ StepLog = __decorate([
92
95
  __param(2, Inject(TransactionHost))
93
96
  ], StepLog);
94
97
  export { StepLog };
98
+ /**
99
+ * The step writes ({@link StepLog}): a module of its own, so the tools domain (the `WebFetch`
100
+ * extraction's usage and denials) uses them without importing the runtime.
101
+ */
102
+ let StepLogModule = class StepLogModule {
103
+ };
104
+ StepLogModule = __decorate([
105
+ Module({
106
+ imports: [EventLogModule],
107
+ providers: [StepLog],
108
+ exports: [StepLog],
109
+ })
110
+ ], StepLogModule);
111
+ export { StepLogModule };
@@ -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`;订阅失败照常抛出。此时尚未写任何响应,调用方可以按普通错误返回。