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

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 (670) hide show
  1. package/dist/admin/admin.controller.d.ts +17 -17
  2. package/dist/admin/admin.controller.js +43 -26
  3. package/dist/admin/admin.module.d.ts +3 -0
  4. package/dist/admin/admin.module.js +22 -0
  5. package/dist/admin/extensions.controller.d.ts +14 -14
  6. package/dist/admin/extensions.controller.js +30 -17
  7. package/dist/admin/setup-lock.d.ts +16 -0
  8. package/dist/admin/setup-lock.js +47 -0
  9. package/dist/admin/setup.controller.d.ts +8 -8
  10. package/dist/admin/setup.controller.js +27 -25
  11. package/dist/admin/setup.service.d.ts +19 -27
  12. package/dist/admin/setup.service.js +61 -61
  13. package/dist/agents/agent-lookup.d.ts +53 -0
  14. package/dist/agents/agent-lookup.js +187 -0
  15. package/dist/agents/agents.controller.d.ts +1 -1
  16. package/dist/agents/agents.controller.js +14 -8
  17. package/dist/agents/agents.module.d.ts +7 -0
  18. package/dist/agents/agents.module.js +41 -0
  19. package/dist/agents/agents.service.d.ts +39 -58
  20. package/dist/agents/agents.service.js +280 -335
  21. package/dist/agents/definition.d.ts +39 -8
  22. package/dist/agents/definition.js +201 -17
  23. package/dist/agents/models.controller.d.ts +1 -1
  24. package/dist/agents/models.controller.js +2 -2
  25. package/dist/agents/templates.controller.d.ts +1 -1
  26. package/dist/agents/templates.controller.js +2 -2
  27. package/dist/agents/templates.d.ts +6 -8
  28. package/dist/agents/templates.js +39 -8
  29. package/dist/app.d.ts +93 -0
  30. package/dist/app.js +150 -0
  31. package/dist/catalog/admin-catalog.controller.d.ts +3 -3
  32. package/dist/catalog/admin-catalog.controller.js +27 -13
  33. package/dist/catalog/catalog-content.d.ts +185 -0
  34. package/dist/catalog/catalog-content.js +326 -0
  35. package/dist/catalog/catalog-items.d.ts +186 -0
  36. package/dist/catalog/catalog-items.js +410 -0
  37. package/dist/catalog/catalog.module.d.ts +14 -0
  38. package/dist/catalog/catalog.module.js +71 -0
  39. package/dist/catalog/catalog.service.d.ts +34 -188
  40. package/dist/catalog/catalog.service.js +155 -489
  41. package/dist/catalog/claude/agents.js +13 -10
  42. package/dist/catalog/cli.d.ts +3 -2
  43. package/dist/catalog/cli.js +13 -31
  44. package/dist/catalog/job-ids.d.ts +15 -0
  45. package/dist/catalog/job-ids.js +15 -0
  46. package/dist/catalog/jobs.d.ts +27 -0
  47. package/dist/catalog/jobs.js +70 -0
  48. package/dist/catalog/locks.d.ts +24 -0
  49. package/dist/catalog/locks.js +63 -0
  50. package/dist/catalog/marketplaces.controller.d.ts +4 -4
  51. package/dist/catalog/marketplaces.controller.js +22 -11
  52. package/dist/catalog/marketplaces.service.d.ts +31 -14
  53. package/dist/catalog/marketplaces.service.js +330 -256
  54. package/dist/catalog/org-catalog.controller.d.ts +4 -3
  55. package/dist/catalog/org-catalog.controller.js +29 -14
  56. package/dist/catalog/org-catalog.service.d.ts +32 -198
  57. package/dist/catalog/org-catalog.service.js +159 -400
  58. package/dist/catalog/plugin-import.d.ts +73 -34
  59. package/dist/catalog/plugin-import.js +356 -217
  60. package/dist/catalog/plugin-install.d.ts +83 -41
  61. package/dist/catalog/plugin-install.js +421 -269
  62. package/dist/catalog/plugin-upgrade.d.ts +59 -4
  63. package/dist/catalog/plugin-upgrade.js +407 -282
  64. package/dist/catalog/requests.service.d.ts +27 -15
  65. package/dist/catalog/requests.service.js +201 -145
  66. package/dist/catalog/upgrade-targets.d.ts +4 -7
  67. package/dist/channels/actions.d.ts +6 -4
  68. package/dist/channels/actions.js +1 -1
  69. package/dist/channels/cards.d.ts +10 -4
  70. package/dist/channels/cards.js +16 -8
  71. package/dist/channels/channels.module.d.ts +40 -0
  72. package/dist/channels/channels.module.js +128 -0
  73. package/dist/channels/connections.controller.d.ts +1 -1
  74. package/dist/channels/connections.controller.js +11 -6
  75. package/dist/channels/connections.service.d.ts +43 -21
  76. package/dist/channels/connections.service.js +236 -131
  77. package/dist/channels/inbound.d.ts +34 -38
  78. package/dist/channels/inbound.js +107 -41
  79. package/dist/channels/job-ids.d.ts +10 -0
  80. package/dist/channels/job-ids.js +10 -0
  81. package/dist/channels/jobs.d.ts +85 -0
  82. package/dist/channels/jobs.js +157 -0
  83. package/dist/channels/outbound.d.ts +60 -82
  84. package/dist/channels/outbound.js +165 -194
  85. package/dist/channels/supervisor.d.ts +88 -46
  86. package/dist/channels/supervisor.js +230 -132
  87. package/dist/channels/threads.d.ts +29 -8
  88. package/dist/channels/threads.js +71 -13
  89. package/dist/channels/webhook.d.ts +20 -14
  90. package/dist/channels/webhook.js +51 -20
  91. package/dist/config/load.d.ts +3 -2
  92. package/dist/config/load.js +3 -2
  93. package/dist/config/nacos-source.js +11 -2
  94. package/dist/config/schema.d.ts +1 -0
  95. package/dist/config/schema.js +12 -6
  96. package/dist/conversations/access.d.ts +29 -0
  97. package/dist/conversations/access.js +86 -0
  98. package/dist/conversations/artifacts.d.ts +11 -11
  99. package/dist/conversations/artifacts.js +36 -10
  100. package/dist/conversations/attachments.controller.d.ts +1 -1
  101. package/dist/conversations/attachments.controller.js +8 -6
  102. package/dist/conversations/attachments.module.d.ts +7 -0
  103. package/dist/conversations/attachments.module.js +25 -0
  104. package/dist/conversations/attachments.service.d.ts +30 -22
  105. package/dist/conversations/attachments.service.js +119 -46
  106. package/dist/conversations/conversations.controller.d.ts +8 -7
  107. package/dist/conversations/conversations.controller.js +59 -29
  108. package/dist/conversations/conversations.module.d.ts +8 -0
  109. package/dist/conversations/conversations.module.js +69 -0
  110. package/dist/conversations/conversations.service.d.ts +40 -38
  111. package/dist/conversations/conversations.service.js +130 -140
  112. package/dist/conversations/event-log.d.ts +39 -18
  113. package/dist/conversations/event-log.js +93 -27
  114. package/dist/conversations/events.d.ts +23 -3
  115. package/dist/conversations/events.js +26 -14
  116. package/dist/conversations/files.d.ts +10 -10
  117. package/dist/conversations/files.js +37 -11
  118. package/dist/conversations/idem-keys.d.ts +5 -0
  119. package/dist/conversations/idem-keys.js +5 -0
  120. package/dist/conversations/job-ids.d.ts +6 -0
  121. package/dist/conversations/job-ids.js +6 -0
  122. package/dist/conversations/outputs-read.d.ts +11 -11
  123. package/dist/conversations/outputs-read.js +31 -7
  124. package/dist/conversations/queue.d.ts +48 -56
  125. package/dist/conversations/queue.js +13 -289
  126. package/dist/conversations/queue.service.d.ts +60 -0
  127. package/dist/conversations/queue.service.js +343 -0
  128. package/dist/conversations/sandbox-status.d.ts +13 -10
  129. package/dist/conversations/sandbox-status.js +36 -8
  130. package/dist/conversations/titles.d.ts +71 -24
  131. package/dist/conversations/titles.js +159 -63
  132. package/dist/ctx/bus.js +9 -3
  133. package/dist/ctx/create-ctx.d.ts +6 -0
  134. package/dist/ctx/create-ctx.js +7 -9
  135. package/dist/ctx/lock.d.ts +7 -3
  136. package/dist/ctx/lock.js +9 -20
  137. package/dist/ctx/secrets.d.ts +10 -2
  138. package/dist/ctx/secrets.js +7 -3
  139. package/dist/db/kernel-schema.d.ts +4 -4
  140. package/dist/db/pool.d.ts +5 -0
  141. package/dist/db/pool.js +1 -0
  142. package/dist/errors.d.ts +1 -0
  143. package/dist/errors.js +1 -0
  144. package/dist/evals/budget.d.ts +42 -21
  145. package/dist/evals/budget.js +114 -62
  146. package/dist/evals/evals.module.d.ts +31 -0
  147. package/dist/evals/evals.module.js +114 -0
  148. package/dist/evals/jobs.d.ts +20 -0
  149. package/dist/evals/jobs.js +45 -0
  150. package/dist/evals/recorded-tools.d.ts +27 -1
  151. package/dist/evals/recorded-tools.js +85 -10
  152. package/dist/evals/run-replay.d.ts +61 -8
  153. package/dist/evals/run-replay.js +159 -85
  154. package/dist/evals/runs.controller.d.ts +1 -1
  155. package/dist/evals/runs.controller.js +17 -8
  156. package/dist/evals/runs.service.d.ts +23 -45
  157. package/dist/evals/runs.service.js +245 -234
  158. package/dist/evals/sets.controller.d.ts +1 -1
  159. package/dist/evals/sets.controller.js +17 -8
  160. package/dist/evals/sets.service.d.ts +22 -6
  161. package/dist/evals/sets.service.js +248 -194
  162. package/dist/evals/snapshot.d.ts +2 -2
  163. package/dist/evals/step-replay.d.ts +2 -2
  164. package/dist/evals/step-replay.js +1 -1
  165. package/dist/evals/trajectory.controller.d.ts +1 -1
  166. package/dist/evals/trajectory.controller.js +11 -7
  167. package/dist/evals/trajectory.d.ts +2 -2
  168. package/dist/evals/trajectory.service.d.ts +5 -4
  169. package/dist/evals/trajectory.service.js +30 -7
  170. package/dist/evals/worker.d.ts +44 -27
  171. package/dist/evals/worker.js +220 -121
  172. package/dist/extensions/admin-ops.d.ts +61 -33
  173. package/dist/extensions/admin-ops.js +248 -154
  174. package/dist/extensions/admin-view.d.ts +38 -27
  175. package/dist/extensions/admin-view.js +126 -55
  176. package/dist/extensions/approvals.d.ts +12 -8
  177. package/dist/extensions/approvals.js +73 -46
  178. package/dist/extensions/blobs.d.ts +27 -10
  179. package/dist/extensions/blobs.js +111 -45
  180. package/dist/extensions/bootstrap.d.ts +58 -31
  181. package/dist/extensions/bootstrap.js +175 -121
  182. package/dist/extensions/cli.d.ts +20 -10
  183. package/dist/extensions/cli.js +41 -96
  184. package/dist/extensions/config-issues.d.ts +7 -0
  185. package/dist/extensions/config-issues.js +31 -0
  186. package/dist/extensions/deployment-config-store.d.ts +49 -0
  187. package/dist/extensions/deployment-config-store.js +133 -0
  188. package/dist/extensions/deployment-config.d.ts +58 -67
  189. package/dist/extensions/deployment-config.js +202 -230
  190. package/dist/extensions/enabled.d.ts +5 -5
  191. package/dist/extensions/extensions.module.d.ts +8 -0
  192. package/dist/extensions/extensions.module.js +77 -0
  193. package/dist/extensions/hooks.d.ts +3 -2
  194. package/dist/extensions/hooks.js +1 -1
  195. package/dist/extensions/host.d.ts +72 -68
  196. package/dist/extensions/host.js +191 -152
  197. package/dist/extensions/installs.d.ts +49 -16
  198. package/dist/extensions/installs.js +128 -32
  199. package/dist/extensions/job-ids.d.ts +6 -0
  200. package/dist/extensions/job-ids.js +6 -0
  201. package/dist/extensions/lifecycle-topics.d.ts +18 -0
  202. package/dist/extensions/lifecycle-topics.js +18 -0
  203. package/dist/extensions/lifecycle.d.ts +35 -47
  204. package/dist/extensions/lifecycle.js +103 -39
  205. package/dist/extensions/locks.d.ts +33 -0
  206. package/dist/extensions/locks.js +86 -0
  207. package/dist/extensions/migrate-lock.d.ts +3 -4
  208. package/dist/extensions/org-config.controller.d.ts +1 -1
  209. package/dist/extensions/org-config.controller.js +8 -5
  210. package/dist/extensions/org-config.d.ts +48 -46
  211. package/dist/extensions/org-config.js +284 -226
  212. package/dist/extensions/registry.d.ts +50 -2
  213. package/dist/extensions/registry.js +89 -4
  214. package/dist/extensions/sources.d.ts +12 -8
  215. package/dist/extensions/sources.js +34 -13
  216. package/dist/files/files.module.d.ts +3 -0
  217. package/dist/files/files.module.js +22 -0
  218. package/dist/files/previewers.controller.d.ts +7 -2
  219. package/dist/files/previewers.controller.js +17 -9
  220. package/dist/files/previewers.d.ts +13 -18
  221. package/dist/files/previewers.js +83 -36
  222. package/dist/http/adapter.d.ts +3 -0
  223. package/dist/http/adapter.js +25 -0
  224. package/dist/http/api.module.d.ts +3 -110
  225. package/dist/http/api.module.js +47 -355
  226. package/dist/http/app.d.ts +11 -15
  227. package/dist/http/app.js +17 -62
  228. package/dist/http/error-filter.module.d.ts +5 -0
  229. package/dist/http/error-filter.module.js +18 -0
  230. package/dist/http/error.filter.js +2 -2
  231. package/dist/identity/accounts.d.ts +82 -29
  232. package/dist/identity/accounts.js +294 -175
  233. package/dist/identity/api-tokens.d.ts +11 -7
  234. package/dist/identity/api-tokens.js +71 -44
  235. package/dist/identity/audit.d.ts +7 -4
  236. package/dist/identity/audit.js +5 -1
  237. package/dist/identity/auth.controller.d.ts +11 -10
  238. package/dist/identity/auth.controller.js +31 -25
  239. package/dist/identity/auth.guard.d.ts +3 -3
  240. package/dist/identity/auth.guard.js +6 -4
  241. package/dist/identity/binding.d.ts +9 -11
  242. package/dist/identity/binding.js +41 -13
  243. package/dist/identity/enterprise-admin.d.ts +18 -12
  244. package/dist/identity/enterprise-admin.js +67 -13
  245. package/dist/identity/external-identity-lock.d.ts +17 -0
  246. package/dist/identity/external-identity-lock.js +39 -0
  247. package/dist/identity/external.d.ts +19 -15
  248. package/dist/identity/external.js +163 -125
  249. package/dist/identity/identity.module.d.ts +6 -0
  250. package/dist/identity/identity.module.js +56 -0
  251. package/dist/identity/me.controller.d.ts +16 -15
  252. package/dist/identity/me.controller.js +37 -31
  253. package/dist/identity/sessions.d.ts +12 -10
  254. package/dist/identity/sessions.js +74 -42
  255. package/dist/identity/settings.d.ts +20 -14
  256. package/dist/identity/settings.js +86 -58
  257. package/dist/identity/sso.controller.d.ts +7 -7
  258. package/dist/identity/sso.controller.js +13 -9
  259. package/dist/identity/sso.d.ts +9 -12
  260. package/dist/identity/sso.js +54 -24
  261. package/dist/inbox/inbox.module.d.ts +3 -0
  262. package/dist/inbox/inbox.module.js +22 -0
  263. package/dist/inbox/inbox.service.d.ts +7 -9
  264. package/dist/inbox/inbox.service.js +32 -11
  265. package/dist/index.d.ts +16 -11
  266. package/dist/index.js +9 -6
  267. package/dist/infra/cache/cache.module.d.ts +3 -0
  268. package/dist/infra/cache/cache.module.js +16 -0
  269. package/dist/infra/cache/cache.service.d.ts +21 -0
  270. package/dist/infra/cache/cache.service.js +80 -0
  271. package/dist/infra/cache/cacheable.decorator.d.ts +32 -0
  272. package/dist/infra/cache/cacheable.decorator.js +83 -0
  273. package/dist/infra/cli/kernel-cli.module.d.ts +66 -0
  274. package/dist/infra/cli/kernel-cli.module.js +165 -0
  275. package/dist/infra/close-within.d.ts +15 -0
  276. package/dist/infra/close-within.js +36 -0
  277. package/dist/infra/config/config.module.d.ts +13 -0
  278. package/dist/infra/config/config.module.js +39 -0
  279. package/dist/infra/config/kernel-config.service.d.ts +25 -0
  280. package/dist/infra/config/kernel-config.service.js +126 -0
  281. package/dist/infra/database/after-commit.d.ts +6 -0
  282. package/dist/infra/database/after-commit.js +9 -0
  283. package/dist/infra/database/database.module.d.ts +25 -0
  284. package/dist/infra/database/database.module.js +90 -0
  285. package/dist/infra/database/kernel-db.d.ts +22 -0
  286. package/dist/infra/database/kernel-db.js +65 -0
  287. package/dist/infra/database/transaction-host.d.ts +50 -0
  288. package/dist/infra/database/transaction-host.js +125 -0
  289. package/dist/infra/database/transactional.decorator.d.ts +15 -0
  290. package/dist/infra/database/transactional.decorator.js +27 -0
  291. package/dist/infra/database/xact-lock.d.ts +17 -0
  292. package/dist/infra/database/xact-lock.js +43 -0
  293. package/dist/infra/events/kernel-events.d.ts +96 -0
  294. package/dist/infra/events/kernel-events.js +65 -0
  295. package/dist/infra/health/health.controller.d.ts +26 -0
  296. package/dist/infra/health/health.controller.js +104 -0
  297. package/dist/infra/health/health.module.d.ts +9 -0
  298. package/dist/infra/health/health.module.js +24 -0
  299. package/dist/infra/health/health.options.d.ts +10 -0
  300. package/dist/infra/health/health.options.js +15 -0
  301. package/dist/infra/health/shutdown-state.d.ts +6 -0
  302. package/dist/infra/health/shutdown-state.js +2 -0
  303. package/dist/infra/lifecycle/graceful-shutdown.module.d.ts +6 -0
  304. package/dist/infra/lifecycle/graceful-shutdown.module.js +23 -0
  305. package/dist/infra/lifecycle/graceful-shutdown.service.d.ts +70 -0
  306. package/dist/infra/lifecycle/graceful-shutdown.service.js +135 -0
  307. package/dist/infra/lifecycle/process-guards.d.ts +52 -0
  308. package/dist/infra/lifecycle/process-guards.js +86 -0
  309. package/dist/infra/lifecycle/shutdown-signals.d.ts +30 -0
  310. package/dist/infra/lifecycle/shutdown-signals.js +48 -0
  311. package/dist/infra/lock/key-template.d.ts +13 -0
  312. package/dist/infra/lock/key-template.js +46 -0
  313. package/dist/infra/lock/lock.module.d.ts +3 -0
  314. package/dist/infra/lock/lock.module.js +16 -0
  315. package/dist/infra/lock/lock.service.d.ts +120 -0
  316. package/dist/infra/lock/lock.service.js +343 -0
  317. package/dist/infra/lock/shared-lease.d.ts +44 -0
  318. package/dist/infra/lock/shared-lease.js +121 -0
  319. package/dist/infra/lock/with-lock.decorator.d.ts +28 -0
  320. package/dist/infra/lock/with-lock.decorator.js +49 -0
  321. package/dist/infra/logging/logging.module.d.ts +16 -0
  322. package/dist/infra/logging/logging.module.js +34 -0
  323. package/dist/infra/queue/configured-processor.d.ts +18 -0
  324. package/dist/infra/queue/configured-processor.js +23 -0
  325. package/dist/infra/queue/job-failure.d.ts +18 -0
  326. package/dist/infra/queue/job-failure.js +26 -0
  327. package/dist/infra/queue/queue-shutdown.d.ts +27 -0
  328. package/dist/infra/queue/queue-shutdown.js +81 -0
  329. package/dist/infra/queue/queue.module.d.ts +16 -0
  330. package/dist/infra/queue/queue.module.js +61 -0
  331. package/dist/infra/queue/redis-connection.d.ts +7 -0
  332. package/dist/infra/queue/redis-connection.js +18 -0
  333. package/dist/infra/queue/retired-schedulers.d.ts +7 -0
  334. package/dist/infra/queue/retired-schedulers.js +9 -0
  335. package/dist/infra/queue/run-job.d.ts +16 -0
  336. package/dist/infra/queue/run-job.js +19 -0
  337. package/dist/infra/redis/redis.module.d.ts +24 -0
  338. package/dist/infra/redis/redis.module.js +87 -0
  339. package/dist/infra/schedule/cron-tick.d.ts +12 -0
  340. package/dist/infra/schedule/cron-tick.js +25 -0
  341. package/dist/infra/schedule/locked-cron.decorator.d.ts +27 -0
  342. package/dist/infra/schedule/locked-cron.decorator.js +53 -0
  343. package/dist/infra/schedule/locked-interval.d.ts +69 -0
  344. package/dist/infra/schedule/locked-interval.js +190 -0
  345. package/dist/infra/schedule/locked-tick.d.ts +90 -0
  346. package/dist/infra/schedule/locked-tick.js +137 -0
  347. package/dist/infra/schedule/schedule.module.d.ts +8 -0
  348. package/dist/infra/schedule/schedule.module.js +27 -0
  349. package/dist/infra/schedule/scheduled-runs.d.ts +69 -0
  350. package/dist/infra/schedule/scheduled-runs.js +163 -0
  351. package/dist/infra/swagger/swagger.d.ts +16 -0
  352. package/dist/infra/swagger/swagger.js +31 -0
  353. package/dist/infra/throttler/credential-throttler.d.ts +35 -0
  354. package/dist/infra/throttler/credential-throttler.js +77 -0
  355. package/dist/infra/throttler/named-throttlers.d.ts +31 -0
  356. package/dist/infra/throttler/named-throttlers.js +119 -0
  357. package/dist/infra/throttler/redis-throttler-storage.d.ts +38 -0
  358. package/dist/infra/throttler/redis-throttler-storage.js +130 -0
  359. package/dist/infra/throttler/throttler.guard.d.ts +23 -0
  360. package/dist/infra/throttler/throttler.guard.js +68 -0
  361. package/dist/infra/throttler/throttler.module.d.ts +15 -0
  362. package/dist/infra/throttler/throttler.module.js +53 -0
  363. package/dist/infra/tokens.d.ts +15 -0
  364. package/dist/infra/tokens.js +15 -0
  365. package/dist/infra/validation/create-zod-dto.d.ts +23 -0
  366. package/dist/infra/validation/create-zod-dto.js +35 -0
  367. package/dist/infra/validation/parse-with-zod.d.ts +7 -0
  368. package/dist/infra/validation/parse-with-zod.js +12 -0
  369. package/dist/infra/validation/validation.module.d.ts +3 -0
  370. package/dist/infra/validation/validation.module.js +16 -0
  371. package/dist/infra/validation/zod-params.d.ts +7 -0
  372. package/dist/infra/validation/zod-params.js +42 -0
  373. package/dist/infra/validation/zod-validation.pipe.d.ts +11 -0
  374. package/dist/infra/validation/zod-validation.pipe.js +31 -0
  375. package/dist/kernel.d.ts +9 -244
  376. package/dist/kernel.js +8 -1305
  377. package/dist/kernel.module.d.ts +17 -0
  378. package/dist/kernel.module.js +136 -0
  379. package/dist/lifecycle/kernel-lifecycle.d.ts +140 -0
  380. package/dist/lifecycle/kernel-lifecycle.js +456 -0
  381. package/dist/lifecycle/tokens.d.ts +3 -0
  382. package/dist/lifecycle/tokens.js +3 -0
  383. package/dist/log-context.d.ts +2 -0
  384. package/dist/log-context.js +4 -0
  385. package/dist/models/models.module.d.ts +3 -0
  386. package/dist/models/models.module.js +24 -0
  387. package/dist/models/prices.d.ts +8 -2
  388. package/dist/models/prices.js +65 -37
  389. package/dist/models/purposes.controller.d.ts +1 -1
  390. package/dist/models/purposes.controller.js +5 -6
  391. package/dist/models/purposes.d.ts +35 -13
  392. package/dist/models/purposes.js +101 -51
  393. package/dist/orgs/directory-sync.controller.d.ts +1 -1
  394. package/dist/orgs/directory-sync.controller.js +2 -2
  395. package/dist/orgs/directory-sync.d.ts +61 -31
  396. package/dist/orgs/directory-sync.js +212 -125
  397. package/dist/orgs/invitations.controller.d.ts +8 -8
  398. package/dist/orgs/invitations.controller.js +27 -26
  399. package/dist/orgs/invitations.service.d.ts +12 -9
  400. package/dist/orgs/invitations.service.js +130 -92
  401. package/dist/orgs/job-ids.d.ts +8 -0
  402. package/dist/orgs/job-ids.js +8 -0
  403. package/dist/orgs/members.service.d.ts +19 -12
  404. package/dist/orgs/members.service.js +161 -117
  405. package/dist/orgs/offboarding.d.ts +54 -57
  406. package/dist/orgs/offboarding.js +161 -71
  407. package/dist/orgs/org-lock.d.ts +28 -19
  408. package/dist/orgs/org-lock.js +81 -35
  409. package/dist/orgs/org.guard.d.ts +1 -1
  410. package/dist/orgs/org.guard.js +2 -2
  411. package/dist/orgs/orgs.controller.d.ts +13 -13
  412. package/dist/orgs/orgs.controller.js +29 -17
  413. package/dist/orgs/orgs.module.d.ts +6 -0
  414. package/dist/orgs/orgs.module.js +68 -0
  415. package/dist/orgs/orgs.service.d.ts +30 -19
  416. package/dist/orgs/orgs.service.js +139 -86
  417. package/dist/orgs/settings.controller.d.ts +1 -1
  418. package/dist/orgs/settings.controller.js +8 -6
  419. package/dist/orgs/settings.service.d.ts +16 -10
  420. package/dist/orgs/settings.service.js +77 -48
  421. package/dist/overrides.d.ts +56 -0
  422. package/dist/overrides.js +30 -0
  423. package/dist/roles/gateway-role.d.ts +43 -0
  424. package/dist/roles/gateway-role.js +98 -0
  425. package/dist/roles/gateway.module.d.ts +8 -0
  426. package/dist/roles/gateway.module.js +28 -0
  427. package/dist/roles/worker-role.d.ts +63 -0
  428. package/dist/roles/worker-role.js +144 -0
  429. package/dist/roles/worker.module.d.ts +14 -0
  430. package/dist/roles/worker.module.js +90 -0
  431. package/dist/runtime/abort.js +19 -2
  432. package/dist/runtime/checkpointer.d.ts +8 -3
  433. package/dist/runtime/checkpointer.js +87 -55
  434. package/dist/runtime/context/build.d.ts +6 -6
  435. package/dist/runtime/context/build.js +18 -8
  436. package/dist/runtime/context/claude-tools.d.ts +2 -1
  437. package/dist/runtime/context/claude-tools.js +9 -10
  438. package/dist/runtime/context/legacy-text.d.ts +22 -0
  439. package/dist/runtime/context/legacy-text.js +37 -0
  440. package/dist/runtime/context/skills.d.ts +29 -11
  441. package/dist/runtime/context/skills.js +37 -30
  442. package/dist/runtime/conversation-lock.d.ts +20 -11
  443. package/dist/runtime/conversation-lock.js +62 -72
  444. package/dist/runtime/hook-calls.d.ts +3 -3
  445. package/dist/runtime/hook-calls.js +1 -6
  446. package/dist/runtime/job-ids.d.ts +10 -0
  447. package/dist/runtime/job-ids.js +10 -0
  448. package/dist/runtime/langgraph-loop.js +1 -1
  449. package/dist/runtime/loop.d.ts +8 -1
  450. package/dist/runtime/loop.js +14 -0
  451. package/dist/runtime/maintenance-queue.d.ts +10 -0
  452. package/dist/runtime/maintenance-queue.js +10 -0
  453. package/dist/runtime/maintenance.d.ts +45 -74
  454. package/dist/runtime/maintenance.js +139 -137
  455. package/dist/runtime/model-call.d.ts +7 -4
  456. package/dist/runtime/model-call.js +25 -58
  457. package/dist/runtime/providers.d.ts +17 -6
  458. package/dist/runtime/providers.js +66 -25
  459. package/dist/runtime/quota.d.ts +17 -3
  460. package/dist/runtime/quota.js +27 -2
  461. package/dist/runtime/retired-schedulers.d.ts +7 -0
  462. package/dist/runtime/retired-schedulers.js +31 -0
  463. package/dist/runtime/run-control.d.ts +33 -0
  464. package/dist/runtime/run-control.js +77 -0
  465. package/dist/runtime/run-finish.d.ts +27 -18
  466. package/dist/runtime/run-finish.js +98 -51
  467. package/dist/runtime/run-jobs.d.ts +48 -0
  468. package/dist/runtime/run-jobs.js +95 -0
  469. package/dist/runtime/run-processors.d.ts +60 -0
  470. package/dist/runtime/run-processors.js +185 -0
  471. package/dist/runtime/run-queue.d.ts +32 -57
  472. package/dist/runtime/run-queue.js +291 -295
  473. package/dist/runtime/run-steps.d.ts +39 -0
  474. package/dist/runtime/run-steps.js +96 -0
  475. package/dist/runtime/run-worker.d.ts +122 -76
  476. package/dist/runtime/run-worker.js +343 -229
  477. package/dist/runtime/runtime.module.d.ts +10 -0
  478. package/dist/runtime/runtime.module.js +112 -0
  479. package/dist/runtime/step-log.d.ts +40 -0
  480. package/dist/runtime/step-log.js +94 -0
  481. package/dist/runtime/stream.controller.d.ts +5 -8
  482. package/dist/runtime/stream.controller.js +14 -12
  483. package/dist/runtime/stream.d.ts +24 -6
  484. package/dist/runtime/stream.js +78 -7
  485. package/dist/runtime/subagents/child.d.ts +3 -44
  486. package/dist/runtime/subagents/child.js +0 -79
  487. package/dist/runtime/subagents/definition.d.ts +5 -10
  488. package/dist/runtime/subagents/definition.js +13 -14
  489. package/dist/runtime/subagents/dispatch.d.ts +89 -8
  490. package/dist/runtime/subagents/dispatch.js +137 -142
  491. package/dist/runtime/subagents/limits.d.ts +9 -4
  492. package/dist/runtime/subagents/limits.js +4 -2
  493. package/dist/runtime/subagents/org-agents.d.ts +4 -4
  494. package/dist/runtime/subagents/org-agents.js +3 -2
  495. package/dist/runtime/subagents/progress.d.ts +2 -2
  496. package/dist/runtime/subagents/roster.d.ts +4 -4
  497. package/dist/runtime/subagents/roster.js +2 -2
  498. package/dist/runtime/subagents/skill-fork.d.ts +8 -9
  499. package/dist/runtime/subagents/skill-fork.js +17 -6
  500. package/dist/runtime/subagents/subagents.service.d.ts +40 -0
  501. package/dist/runtime/subagents/subagents.service.js +101 -0
  502. package/dist/runtime/usage-report.d.ts +94 -52
  503. package/dist/runtime/usage-report.js +200 -100
  504. package/dist/runtime/waits.d.ts +127 -59
  505. package/dist/runtime/waits.js +433 -210
  506. package/dist/sandbox/job-ids.d.ts +10 -0
  507. package/dist/sandbox/job-ids.js +10 -0
  508. package/dist/sandbox/jobs.d.ts +41 -0
  509. package/dist/sandbox/jobs.js +113 -0
  510. package/dist/sandbox/leases.d.ts +39 -31
  511. package/dist/sandbox/leases.js +117 -257
  512. package/dist/sandbox/providers.d.ts +19 -0
  513. package/dist/sandbox/providers.js +38 -0
  514. package/dist/sandbox/sandbox.module.d.ts +8 -0
  515. package/dist/sandbox/sandbox.module.js +30 -0
  516. package/dist/sandbox/sandbox.service.d.ts +24 -29
  517. package/dist/sandbox/sandbox.service.js +106 -75
  518. package/dist/skills/catalog.d.ts +37 -24
  519. package/dist/skills/catalog.js +100 -57
  520. package/dist/skills/changes.controller.d.ts +4 -4
  521. package/dist/skills/changes.controller.js +15 -9
  522. package/dist/skills/changes.service.d.ts +30 -20
  523. package/dist/skills/changes.service.js +425 -367
  524. package/dist/skills/invocable.controller.d.ts +1 -1
  525. package/dist/skills/invocable.controller.js +8 -5
  526. package/dist/skills/invocation-keys.d.ts +1 -1
  527. package/dist/skills/invocation-keys.js +1 -1
  528. package/dist/skills/invoke.d.ts +17 -16
  529. package/dist/skills/invoke.js +53 -21
  530. package/dist/skills/skills.controller.d.ts +1 -1
  531. package/dist/skills/skills.controller.js +11 -6
  532. package/dist/skills/skills.module.d.ts +6 -0
  533. package/dist/skills/skills.module.js +30 -0
  534. package/dist/skills/skills.service.d.ts +47 -30
  535. package/dist/skills/skills.service.js +221 -158
  536. package/dist/storage/job-ids.d.ts +6 -0
  537. package/dist/storage/job-ids.js +6 -0
  538. package/dist/storage/purge.d.ts +22 -7
  539. package/dist/storage/purge.js +55 -3
  540. package/dist/storage/storage.module.d.ts +6 -0
  541. package/dist/storage/storage.module.js +23 -0
  542. package/dist/storage/storage.service.d.ts +18 -4
  543. package/dist/storage/storage.service.js +44 -3
  544. package/dist/tools/approvals.controller.d.ts +1 -1
  545. package/dist/tools/approvals.controller.js +12 -8
  546. package/dist/tools/approvals.service.d.ts +33 -25
  547. package/dist/tools/approvals.service.js +343 -259
  548. package/dist/tools/breaker.d.ts +2 -2
  549. package/dist/tools/breaker.js +21 -3
  550. package/dist/tools/builtin-names.d.ts +73 -0
  551. package/dist/tools/builtin-names.js +116 -0
  552. package/dist/tools/builtins/agent.d.ts +7 -7
  553. package/dist/tools/builtins/agent.js +7 -11
  554. package/dist/tools/builtins/ask-user.d.ts +3 -3
  555. package/dist/tools/builtins/ask-user.js +3 -3
  556. package/dist/tools/builtins/builtin-tools.d.ts +21 -0
  557. package/dist/tools/builtins/builtin-tools.js +80 -0
  558. package/dist/tools/builtins/read-tool-output.d.ts +3 -3
  559. package/dist/tools/builtins/read-tool-output.js +3 -3
  560. package/dist/tools/builtins/sandbox/bash.d.ts +5 -5
  561. package/dist/tools/builtins/sandbox/bash.js +33 -30
  562. package/dist/tools/builtins/sandbox/common.d.ts +5 -4
  563. package/dist/tools/builtins/sandbox/common.js +2 -2
  564. package/dist/tools/builtins/sandbox/deliver.d.ts +1 -1
  565. package/dist/tools/builtins/sandbox/deliver.js +13 -13
  566. package/dist/tools/builtins/sandbox/edit.d.ts +1 -1
  567. package/dist/tools/builtins/sandbox/edit.js +42 -31
  568. package/dist/tools/builtins/sandbox/file-state.d.ts +34 -0
  569. package/dist/tools/builtins/sandbox/file-state.js +34 -0
  570. package/dist/tools/builtins/sandbox/glob-match.d.ts +1 -1
  571. package/dist/tools/builtins/sandbox/glob-match.js +1 -1
  572. package/dist/tools/builtins/sandbox/glob.d.ts +1 -1
  573. package/dist/tools/builtins/sandbox/glob.js +6 -6
  574. package/dist/tools/builtins/sandbox/grep.d.ts +7 -4
  575. package/dist/tools/builtins/sandbox/grep.js +149 -32
  576. package/dist/tools/builtins/sandbox/index.d.ts +1 -1
  577. package/dist/tools/builtins/sandbox/index.js +1 -1
  578. package/dist/tools/builtins/sandbox/read.d.ts +2 -2
  579. package/dist/tools/builtins/sandbox/read.js +22 -15
  580. package/dist/tools/builtins/sandbox/write.d.ts +1 -1
  581. package/dist/tools/builtins/sandbox/write.js +38 -34
  582. package/dist/tools/builtins/skill-load.d.ts +6 -6
  583. package/dist/tools/builtins/skill-load.js +33 -17
  584. package/dist/tools/builtins/skill-write.d.ts +4 -4
  585. package/dist/tools/builtins/skill-write.js +10 -10
  586. package/dist/tools/builtins/tool-search.d.ts +13 -9
  587. package/dist/tools/builtins/tool-search.js +25 -14
  588. package/dist/tools/canonical-json.d.ts +6 -0
  589. package/dist/tools/canonical-json.js +16 -0
  590. package/dist/tools/connector-content.controller.d.ts +1 -1
  591. package/dist/tools/connector-content.controller.js +11 -6
  592. package/dist/tools/connector-content.d.ts +12 -15
  593. package/dist/tools/connector-content.js +53 -18
  594. package/dist/tools/connectors.controller.d.ts +1 -1
  595. package/dist/tools/connectors.controller.js +21 -10
  596. package/dist/tools/connectors.service.d.ts +31 -13
  597. package/dist/tools/connectors.service.js +438 -348
  598. package/dist/tools/credentials.d.ts +17 -20
  599. package/dist/tools/credentials.js +55 -34
  600. package/dist/tools/display-names.d.ts +9 -0
  601. package/dist/tools/display-names.js +24 -0
  602. package/dist/tools/drift.d.ts +29 -41
  603. package/dist/tools/drift.js +116 -84
  604. package/dist/tools/elicitation.js +1 -1
  605. package/dist/tools/info.d.ts +32 -13
  606. package/dist/tools/info.js +88 -39
  607. package/dist/tools/job-ids.d.ts +13 -0
  608. package/dist/tools/job-ids.js +15 -0
  609. package/dist/tools/jobs.d.ts +24 -0
  610. package/dist/tools/jobs.js +69 -0
  611. package/dist/tools/legacy-data.d.ts +34 -0
  612. package/dist/tools/legacy-data.js +76 -0
  613. package/dist/tools/legacy-keys.d.ts +51 -0
  614. package/dist/tools/legacy-keys.js +115 -0
  615. package/dist/tools/naming.d.ts +1 -5
  616. package/dist/tools/naming.js +1 -7
  617. package/dist/tools/oauth/flow-paths.d.ts +16 -0
  618. package/dist/tools/oauth/flow-paths.js +38 -0
  619. package/dist/tools/oauth/flow.d.ts +30 -30
  620. package/dist/tools/oauth/flow.js +109 -81
  621. package/dist/tools/oauth/oauth.controller.d.ts +3 -3
  622. package/dist/tools/oauth/oauth.controller.js +12 -9
  623. package/dist/tools/oauth/tokens.d.ts +11 -3
  624. package/dist/tools/oauth/tokens.js +15 -14
  625. package/dist/tools/outputs.d.ts +13 -4
  626. package/dist/tools/outputs.js +48 -4
  627. package/dist/tools/pipeline.d.ts +72 -50
  628. package/dist/tools/pipeline.js +239 -100
  629. package/dist/tools/policy.d.ts +3 -16
  630. package/dist/tools/policy.js +13 -19
  631. package/dist/tools/questions.controller.d.ts +2 -2
  632. package/dist/tools/questions.controller.js +9 -6
  633. package/dist/tools/questions.service.d.ts +26 -25
  634. package/dist/tools/questions.service.js +201 -142
  635. package/dist/tools/registry.d.ts +43 -38
  636. package/dist/tools/registry.js +100 -72
  637. package/dist/tools/resources.d.ts +1 -1
  638. package/dist/tools/resources.js +1 -1
  639. package/dist/tools/specs.d.ts +5 -4
  640. package/dist/tools/specs.js +3 -1
  641. package/dist/tools/tools.module.d.ts +10 -0
  642. package/dist/tools/tools.module.js +91 -0
  643. package/dist/ui/call-extension.d.ts +16 -0
  644. package/dist/ui/call-extension.js +38 -0
  645. package/dist/ui/embed-token.d.ts +9 -5
  646. package/dist/ui/embed-token.js +34 -6
  647. package/dist/ui/ui-stream.d.ts +22 -17
  648. package/dist/ui/ui-stream.js +72 -12
  649. package/dist/ui/ui.module.d.ts +7 -0
  650. package/dist/ui/ui.module.js +28 -0
  651. package/dist/ui/views.controller.d.ts +14 -12
  652. package/dist/ui/views.controller.js +32 -25
  653. package/dist/ui/views.d.ts +9 -57
  654. package/dist/ui/views.js +43 -45
  655. package/package.json +10 -3
  656. package/src/migrations/0063_tool_keys_claude_code.sql +220 -0
  657. package/dist/http/health.controller.d.ts +0 -26
  658. package/dist/http/health.controller.js +0 -79
  659. package/dist/http/tokens.d.ts +0 -131
  660. package/dist/http/tokens.js +0 -131
  661. package/dist/http/zod.pipe.d.ts +0 -8
  662. package/dist/http/zod.pipe.js +0 -14
  663. package/dist/identity/rate-limit.d.ts +0 -55
  664. package/dist/identity/rate-limit.js +0 -121
  665. package/dist/sandbox/lifecycle.d.ts +0 -21
  666. package/dist/sandbox/lifecycle.js +0 -68
  667. package/dist/tools/builtins/sandbox/names.d.ts +0 -7
  668. package/dist/tools/builtins/sandbox/names.js +0 -20
  669. /package/dist/http/{gateway.module.d.ts → gateway-routes.d.ts} +0 -0
  670. /package/dist/http/{gateway.module.js → gateway-routes.js} +0 -0
@@ -1,12 +1,8 @@
1
1
  import { isModelError, isRetryableKind, ModelError, sanitizeParams, } from "@capybara-hq/plugin-sdk";
2
- import { sql } from "kysely";
3
2
  import { MEDIA_EXCLUDED_MAX_IDS } from "../conversations/events.js";
4
3
  import { ApiError } from "../errors.js";
5
- import { usageTokens } from "../evals/budget.js";
6
4
  import { ExtensionUnloadedError } from "../extensions/inflight.js";
7
- import { audit } from "../identity/audit.js";
8
5
  import { hasInvocation, skillLoadOffered } from "../skills/catalog.js";
9
- import { recordToolSpecs } from "../tools/specs.js";
10
6
  import { buildModelRequest, latestSummary, mediaRefs, planMedia, } from "./context/build.js";
11
7
  import { acceptSummary, buildCompactionRequest, compactionBackoff, compactionPlan, shouldCompact, } from "./context/compaction.js";
12
8
  import { guardToolPairs } from "./context/pairing.js";
@@ -114,7 +110,7 @@ async function runStep(deps, input, wrapUp) {
114
110
  }
115
111
  return existing;
116
112
  }
117
- const runtime = deps.config().runtime;
113
+ const runtime = deps.config.get().runtime;
118
114
  /** 本次尝试已流出的文本;中止时写进 aborted 的 assistant_message。 */
119
115
  const streamed = { text: "" };
120
116
  try {
@@ -132,7 +128,7 @@ async function runStep(deps, input, wrapUp) {
132
128
  }
133
129
  // 每步实时解析(连接器 / 插件状态可能在步骤之间变化),解析结果记在 model_call;收尾调用同样带工具
134
130
  // a skills catalog snapshot (Ruling M17; an empty one too) or a person's skill invocation in the
135
- // log → skill_load is offered (see skillLoadOffered)
131
+ // log → Skill is offered (see skillLoadOffered)
136
132
  const resolved = await deps.tools.forAgent(input.orgId, {
137
133
  tools: input.agent.tools ?? [],
138
134
  subagents: input.agent.subagents,
@@ -145,7 +141,7 @@ async function runStep(deps, input, wrapUp) {
145
141
  looked: new Set(),
146
142
  info: new Map(),
147
143
  bytes: new Map(),
148
- run: input.mediaCache ?? new MediaCache(deps.config().attachments.requestMediaBytes),
144
+ run: input.mediaCache ?? new MediaCache(deps.config.get().attachments.requestMediaBytes),
149
145
  },
150
146
  };
151
147
  const beforeCompaction = events.length;
@@ -240,29 +236,7 @@ async function appendCounted(deps, input, events) {
240
236
  const { conversationId, parentRunId } = input;
241
237
  if (parentRunId === undefined)
242
238
  return deps.eventLog.append(conversationId, events);
243
- const out = await deps.db.transaction().execute(async (t) => {
244
- // the conversation row lock the append takes anyway, taken first to read the seq before it
245
- const before = await t
246
- .selectFrom("conversations")
247
- .select("last_seq")
248
- .where("id", "=", conversationId)
249
- .forUpdate()
250
- .executeTakeFirstOrThrow();
251
- const written = await deps.eventLog.append(conversationId, events, t);
252
- const fresh = written.filter((e) => e.seq > Number(before.last_seq));
253
- let tokens = 0;
254
- for (const e of fresh)
255
- if (e.type === "usage")
256
- tokens += usageTokens(e.payload);
257
- if (tokens > 0) {
258
- await t
259
- .updateTable("runs")
260
- .set({ subagent_tokens_used: sql `subagent_tokens_used + ${tokens}` })
261
- .where("id", "=", parentRunId)
262
- .execute();
263
- }
264
- return { written, toSeq: fresh.length > 0 ? Math.max(...fresh.map((e) => e.seq)) : null };
265
- });
239
+ const out = await deps.stepLog.appendCounted(conversationId, parentRunId, events);
266
240
  if (out.toSeq !== null)
267
241
  await deps.eventLog.notify(conversationId, out.toSeq);
268
242
  return out.written;
@@ -401,7 +375,7 @@ function buildRequest(deps, events, input, info, params, runtime, tools, wrapUp)
401
375
  ...(wrapUp && { toolChoice: "none" }),
402
376
  mediaInfo: tools.media.info,
403
377
  media: tools.media.bytes,
404
- mediaBudgetBytes: deps.config().attachments.requestMediaBytes,
378
+ mediaBudgetBytes: deps.config.get().attachments.requestMediaBytes,
405
379
  defaultMaxOutputTokens: runtime.maxOutputTokens,
406
380
  });
407
381
  return {
@@ -434,7 +408,7 @@ async function loadMedia(deps, input, events, info, tools) {
434
408
  for (const id of look)
435
409
  cache.looked.add(id);
436
410
  }
437
- const budget = deps.config().attachments.requestMediaBytes;
411
+ const budget = deps.config.get().attachments.requestMediaBytes;
438
412
  const plan = planMedia(events, info, cache.info, budget);
439
413
  const runKey = (id) => MediaCache.key(id, cache.info.get(id), plan.caps.get(id));
440
414
  const need = [];
@@ -589,11 +563,7 @@ async function maybeCompact(deps, input, events, runtime, tools) {
589
563
  plugin: verdict.plugin,
590
564
  cause: verdict.cause,
591
565
  });
592
- const written = await deps.db.transaction().execute(async (t) => {
593
- const out = await deps.eventLog.append(conversationId, [failed], t);
594
- await audit(t, entry);
595
- return out;
596
- });
566
+ const written = await deps.stepLog.appendAudited(conversationId, [failed], entry);
597
567
  if (written.length > 0) {
598
568
  await deps.eventLog.notify(conversationId, Math.max(...written.map((e) => e.seq)));
599
569
  }
@@ -783,29 +753,26 @@ async function ladder(deps, input, events, runtime, tools, wrapUp, streamed) {
783
753
  // 请求里的工具定义(含目录里的)按指纹存进 tool_specs,与 model_call 同一事务
784
754
  // (请求可由日志 + tool_specs 还原)
785
755
  const sent = new Set([...meta.tools, ...(meta.catalog ?? [])].map((t) => t.specHash));
786
- const written = await deps.db.transaction().execute(async (t) => {
787
- await recordToolSpecs(t, tools.list.filter((x) => sent.has(x.specHash)));
788
- return deps.eventLog.append(conversationId, [
789
- {
790
- type: "model_call",
791
- runId,
792
- idemKey: idem.modelCall(runId, step, attempt),
793
- payload: {
794
- step,
795
- attempt,
796
- provider: rung.ref.provider,
797
- model: rung.ref.model,
798
- fallback: rung.fallback,
799
- request: {
800
- ...meta,
801
- maxOutputTokens: request.maxOutputTokens,
802
- ...(params.dropped.length > 0 && { droppedParams: params.dropped }),
803
- estimatedInputTokens: estimate,
804
- },
756
+ const written = await deps.stepLog.appendWithSpecs(conversationId, tools.list.filter((x) => sent.has(x.specHash)), [
757
+ {
758
+ type: "model_call",
759
+ runId,
760
+ idemKey: idem.modelCall(runId, step, attempt),
761
+ payload: {
762
+ step,
763
+ attempt,
764
+ provider: rung.ref.provider,
765
+ model: rung.ref.model,
766
+ fallback: rung.fallback,
767
+ request: {
768
+ ...meta,
769
+ maxOutputTokens: request.maxOutputTokens,
770
+ ...(params.dropped.length > 0 && { droppedParams: params.dropped }),
771
+ estimatedInputTokens: estimate,
805
772
  },
806
773
  },
807
- ], t);
808
- });
774
+ },
775
+ ]);
809
776
  await deps.eventLog.notify(conversationId, Math.max(...written.map((e) => e.seq)));
810
777
  sentAt = Date.now();
811
778
  const outcome = await consumeModelStream(provider, request, info.streamIdleTimeoutMs ?? runtime.streamIdleMs, signal, (ev) => {
@@ -2,8 +2,11 @@ import { type ExtensionPointRef, type Logger, type ModelInfo, type ModelProvider
2
2
  import type { Redis } from "ioredis";
3
3
  import type { ModelRef } from "../agents/definition.js";
4
4
  import { ApiError } from "../errors.js";
5
+ import { CacheService } from "../infra/cache/cache.service.js";
5
6
  /** 单个供应商 `listModels()` 的时限(毫秒):一个卡住的供应商不拖住整个列表与解析。 */
6
7
  export declare const LIST_MODELS_TIMEOUT_MS = 10000;
8
+ /** Optional provider: the `listModels()` time limit (ms) instead of {@link LIST_MODELS_TIMEOUT_MS} (tests). */
9
+ export declare const LIST_MODELS_TIMEOUT: unique symbol;
7
10
  /**
8
11
  * 列表视图(后台模型页、组织模型页)里列模型失败的供应商在这么多秒内直接标 error、不再请求(Redis,多副本共享)。
9
12
  * 只用于列表;`resolve`(运行时)照常每次请求,失败由降级梯子重试。
@@ -48,22 +51,27 @@ export declare function adaptModelProviderV1(impl: ModelProviderV1): ModelProvid
48
51
  * 同时支持 `model-provider@1`(经 {@link adaptModelProviderV1} 适配)与 `@2`;
49
52
  * 同一插件两者都提供时用 `@2`。`@2` 的 `listModels()` 结果先过 `assertValidDeclarations`,
50
53
  * 不合规的供应商不可用(不可重试)。
51
- * 每个供应商的模型列表(`@2` 形状)缓存在 Redis `capk:models:<provider>:v<主版本>:<插件版本>:<部署配置摘要>`(EX 600),不放进程内存,
52
- * 多副本共享同一份缓存。
54
+ * Each provider's model list (`@2`-shaped) is cached in Redis (`@Cacheable`, key
55
+ * `cache:capk:models:<provider>:v<major>:<plugin version>:<config digest>`, 600 s), never in
56
+ * process memory: every replica shares it.
53
57
  */
54
58
  export declare class ProviderRegistry {
55
59
  private readonly host;
60
+ readonly cacheService: CacheService;
56
61
  private readonly kv;
57
62
  private readonly log?;
58
- private readonly opts;
59
- constructor(host: ProviderHost, kv: Redis, log?: Pick<Logger, "warn"> | undefined, opts?: {
60
- listTimeoutMs?: number;
61
- });
63
+ /** The `listModels()` time limit. */
64
+ private readonly listTimeoutMs;
65
+ constructor(host: ProviderHost, cacheService: CacheService, kv: Redis, log?: Pick<Logger, "warn"> | undefined,
66
+ /** The `listModels()` time limit. */
67
+ listTimeoutMs?: number);
62
68
  /** `listModels()` 加时限(到时按失败处理,供应商的调用留在后台、结果丢弃)。 */
63
69
  private listModelsWithTimeout;
64
70
  /** 每个插件取一个实现(`@2` 优先),按插件首次出现的顺序;不支持的主版本记 warn 后忽略。 */
65
71
  private providers;
66
72
  private models;
73
+ /** The provider's validated model list, cached under `key` (see {@link modelsKey}). */
74
+ private validatedModels;
67
75
  /** 每个已安装供应商及其模型(按插件加载顺序);列模型失败或声明不合规的供应商跳过并记 warn。 */
68
76
  list(): Promise<{
69
77
  provider: string;
@@ -84,3 +92,6 @@ export declare class ProviderRegistry {
84
92
  info: ModelInfo;
85
93
  }>;
86
94
  }
95
+ /** The model provider registry (one instance; the models and agents domains read it). */
96
+ export declare class ProvidersModule {
97
+ }
@@ -1,20 +1,39 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
8
+ return function (target, key) { decorator(target, key, paramIndex); }
9
+ };
1
10
  import { assertValidDeclarations, EFFORT_VALUES, parseExtensionPoint, } from "@capybara-hq/plugin-sdk";
11
+ import { Inject, Injectable, Module, Optional } from "@nestjs/common";
2
12
  import { ApiError } from "../errors.js";
13
+ import { ExtensionRegistry, ExtensionRegistryModule } from "../extensions/registry.js";
14
+ import { CacheService } from "../infra/cache/cache.service.js";
15
+ import { Cacheable } from "../infra/cache/cacheable.decorator.js";
16
+ import { KERNEL_LOGGER, REDIS } from "../infra/tokens.js";
3
17
  /** 供应商模型列表在 Redis 中的缓存时长(秒)。 */
4
18
  const MODELS_TTL_SECONDS = 600;
5
19
  /** 单个供应商 `listModels()` 的时限(毫秒):一个卡住的供应商不拖住整个列表与解析。 */
6
20
  export const LIST_MODELS_TIMEOUT_MS = 10_000;
21
+ /** Optional provider: the `listModels()` time limit (ms) instead of {@link LIST_MODELS_TIMEOUT_MS} (tests). */
22
+ export const LIST_MODELS_TIMEOUT = Symbol("LIST_MODELS_TIMEOUT");
7
23
  /**
8
24
  * 列表视图(后台模型页、组织模型页)里列模型失败的供应商在这么多秒内直接标 error、不再请求(Redis,多副本共享)。
9
25
  * 只用于列表;`resolve`(运行时)照常每次请求,失败由降级梯子重试。
10
26
  */
11
27
  export const LIST_FAILURE_TTL_SECONDS = 15;
12
28
  /**
13
- * 键带供应商的契约主版本:插件从 `@1` 升级到 `@2` 后不会读到 `@1`(经适配)时写入的列表
14
- * (两者都是 `@2` 形状,按形状分辨不出来)。
15
- * 键还带插件版本与部署配置摘要:插件升级(参数声明可能变了)或改部署配置(如增删模型)后,
16
- * 各副本立即按新声明校验,不必等旧缓存 TTL 到期。摘要只是哈希,不含配置明文(secret 不进键)。
17
- * 旧键按 TTL 自然过期。没有版本 / 摘要的条目(测试替身)用 `-` 占位。
29
+ * The model list's cache key (`@Cacheable` stores it as `cache:<key>`). It carries the provider's
30
+ * contract major: after a plugin moves from `@1` to `@2` it never reads the list written through
31
+ * the `@1` adapter (both are `@2`-shaped, the shape cannot tell them apart). It also carries the
32
+ * plugin version and the deployment config digest: after an upgrade (the parameter declarations may
33
+ * have changed) or a deployment config change (models added or removed) every replica validates
34
+ * the new declarations at once instead of waiting for the old entry's TTL. The digest is only a
35
+ * hash, never config text (no secret in the key). Old keys expire by TTL. Entries without a
36
+ * version / digest (test doubles) use `-`.
18
37
  */
19
38
  const modelsKey = (p) => `capk:models:${p.plugin}:v${p.major}:${p.version ?? "-"}:${p.configHash ?? "-"}`;
20
39
  /** 列表视图的失败标记({@link LIST_FAILURE_TTL_SECONDS}),与模型列表同样按版本与配置摘要区分。 */
@@ -71,31 +90,33 @@ export function adaptModelProviderV1(impl) {
71
90
  },
72
91
  };
73
92
  }
74
- /** 缓存里的条目必须是 `@2` 形状(旧版本内核写入的 `@1` 原始结果没有 `parameters`,视为未命中)。 */
75
- const isCurrentShape = (models) => Array.isArray(models) &&
76
- models.every((m) => typeof m === "object" && m !== null && Array.isArray(m.parameters));
77
93
  /**
78
94
  * 模型供应商注册表:供应商即提供 `model-provider` 能力的插件(以插件名为供应商名)。
79
95
  * 同时支持 `model-provider@1`(经 {@link adaptModelProviderV1} 适配)与 `@2`;
80
96
  * 同一插件两者都提供时用 `@2`。`@2` 的 `listModels()` 结果先过 `assertValidDeclarations`,
81
97
  * 不合规的供应商不可用(不可重试)。
82
- * 每个供应商的模型列表(`@2` 形状)缓存在 Redis `capk:models:<provider>:v<主版本>:<插件版本>:<部署配置摘要>`(EX 600),不放进程内存,
83
- * 多副本共享同一份缓存。
98
+ * Each provider's model list (`@2`-shaped) is cached in Redis (`@Cacheable`, key
99
+ * `cache:capk:models:<provider>:v<major>:<plugin version>:<config digest>`, 600 s), never in
100
+ * process memory: every replica shares it.
84
101
  */
85
- export class ProviderRegistry {
102
+ let ProviderRegistry = class ProviderRegistry {
86
103
  host;
104
+ cacheService;
87
105
  kv;
88
106
  log;
89
- opts;
90
- constructor(host, kv, log, opts = {}) {
107
+ listTimeoutMs;
108
+ constructor(host, cacheService, kv, log,
109
+ /** The `listModels()` time limit. */
110
+ listTimeoutMs = LIST_MODELS_TIMEOUT_MS) {
91
111
  this.host = host;
112
+ this.cacheService = cacheService;
92
113
  this.kv = kv;
93
114
  this.log = log;
94
- this.opts = opts;
115
+ this.listTimeoutMs = listTimeoutMs;
95
116
  }
96
117
  /** `listModels()` 加时限(到时按失败处理,供应商的调用留在后台、结果丢弃)。 */
97
118
  async listModelsWithTimeout(impl) {
98
- const ms = this.opts.listTimeoutMs ?? LIST_MODELS_TIMEOUT_MS;
119
+ const ms = this.listTimeoutMs;
99
120
  let timer;
100
121
  const call = Promise.resolve().then(() => impl.listModels());
101
122
  call.catch(() => { });
@@ -141,15 +162,12 @@ export class ProviderRegistry {
141
162
  impl: major === 2 ? impl : adaptModelProviderV1(impl),
142
163
  }));
143
164
  }
144
- async models(p) {
165
+ models(p) {
166
+ return this.validatedModels(modelsKey(p), p);
167
+ }
168
+ /** The provider's validated model list, cached under `key` (see {@link modelsKey}). */
169
+ async validatedModels(_key, p) {
145
170
  const { plugin: provider, major, impl } = p;
146
- const key = modelsKey(p);
147
- const cached = await this.kv.get(key);
148
- if (cached !== null) {
149
- const parsed = JSON.parse(cached);
150
- if (isCurrentShape(parsed))
151
- return parsed;
152
- }
153
171
  let models;
154
172
  try {
155
173
  models = await this.listModelsWithTimeout(impl);
@@ -168,7 +186,6 @@ export class ProviderRegistry {
168
186
  throw e;
169
187
  }
170
188
  }
171
- await this.kv.set(key, JSON.stringify(models), "EX", MODELS_TTL_SECONDS);
172
189
  return models;
173
190
  }
174
191
  /** 每个已安装供应商及其模型(按插件加载顺序);列模型失败或声明不合规的供应商跳过并记 warn。 */
@@ -221,4 +238,28 @@ export class ProviderRegistry {
221
238
  }
222
239
  return { provider: p.impl, info };
223
240
  }
224
- }
241
+ };
242
+ __decorate([
243
+ Cacheable({ key: "#{0}", ttl: MODELS_TTL_SECONDS })
244
+ ], ProviderRegistry.prototype, "validatedModels", null);
245
+ ProviderRegistry = __decorate([
246
+ Injectable(),
247
+ __param(0, Inject(ExtensionRegistry)),
248
+ __param(1, Inject(CacheService)),
249
+ __param(2, Inject(REDIS)),
250
+ __param(3, Inject(KERNEL_LOGGER)),
251
+ __param(4, Optional()),
252
+ __param(4, Inject(LIST_MODELS_TIMEOUT))
253
+ ], ProviderRegistry);
254
+ export { ProviderRegistry };
255
+ /** The model provider registry (one instance; the models and agents domains read it). */
256
+ let ProvidersModule = class ProvidersModule {
257
+ };
258
+ ProvidersModule = __decorate([
259
+ Module({
260
+ imports: [ExtensionRegistryModule],
261
+ providers: [ProviderRegistry],
262
+ exports: [ProviderRegistry],
263
+ })
264
+ ], ProvidersModule);
265
+ export { ProvidersModule };
@@ -1,6 +1,7 @@
1
1
  import type { Redis } from "ioredis";
2
- import type { KernelConfig } from "../config/schema.js";
3
2
  import type { SettingsService } from "../identity/settings.js";
3
+ import type { KernelConfigService } from "../infra/config/kernel-config.service.js";
4
+ import type { LeaseHandle, LockService } from "../infra/lock/lock.service.js";
4
5
  /** 组织配额租约的默认时长(毫秒):持有方每 `leaseMs / 3` 续租一次。 */
5
6
  export declare const ORG_QUOTA_LEASE_MS = 60000;
6
7
  /** 运行配额的键前缀(`capk:org-runs:<orgId>`);评测运行用 {@link EVAL_QUOTA_PREFIX}。 */
@@ -11,19 +12,32 @@ export declare const EVAL_QUOTA_PREFIX = "capk:org-evals:";
11
12
  * 组织级运行并发配额(spec 4.3):Redis ZSET `<keyPrefix><orgId>`(默认 `capk:org-runs:<orgId>`),
12
13
  * 成员 runId(评测为 jobId)、分数为租约到期时间。
13
14
  * 持有方崩溃时不 `leave`,成员在租约到期后被下一次 `tryEnter` 清理,名额不泄漏。
15
+ * One instance per key prefix, provided under {@link RUN_QUOTA} / {@link EVAL_QUOTA}.
14
16
  */
15
17
  export declare class OrgQuota {
16
18
  private readonly redis;
17
19
  private readonly keyPrefix;
18
- constructor(redis: Redis, keyPrefix?: string);
20
+ private readonly locks?;
21
+ constructor(redis: Redis, keyPrefix?: string, locks?: LockService | undefined);
19
22
  private key;
20
23
  tryEnter(orgId: string, runId: string, limit: number, leaseMs?: number): Promise<boolean>;
21
24
  /** 续期;成员已过期被清理 → false。 */
22
25
  renew(orgId: string, runId: string, leaseMs?: number): Promise<boolean>;
23
26
  leave(orgId: string, runId: string): Promise<void>;
27
+ /**
28
+ * Takes a slot ({@link tryEnter}) and keeps it while held: renewed every `leaseMs / 3` by the
29
+ * lock service's watchdog; `release()` leaves. Undefined when the organization is at its limit.
30
+ * A slot that could not be renewed (it expired meanwhile) aborts `lost` with one WARN; the
31
+ * holder may go on (the slot is a fair-share limit, not mutual exclusion).
32
+ */
33
+ enter(orgId: string, runId: string, limit: number, leaseMs?: number): Promise<LeaseHandle | undefined>;
24
34
  }
35
+ /** The organization run quota (`capk:org-runs:<orgId>`). */
36
+ export declare const RUN_QUOTA: unique symbol;
37
+ /** The organization eval quota (`capk:org-evals:<orgId>`). */
38
+ export declare const EVAL_QUOTA: unique symbol;
25
39
  /**
26
40
  * 组织的运行并发上限:部署设置 `runConcurrencyOverrides[orgId]`,没有则用 `runtime.orgConcurrency`
27
41
  * (热更新字段,每次经 `config()` 读当前值)。
28
42
  */
29
- export declare function orgRunLimit(settings: Pick<SettingsService, "get">, config: () => KernelConfig, orgId: string): Promise<number>;
43
+ export declare function orgRunLimit(settings: Pick<SettingsService, "get">, config: Pick<KernelConfigService, "get">, orgId: string): Promise<number>;
@@ -38,13 +38,16 @@ return 0
38
38
  * 组织级运行并发配额(spec 4.3):Redis ZSET `<keyPrefix><orgId>`(默认 `capk:org-runs:<orgId>`),
39
39
  * 成员 runId(评测为 jobId)、分数为租约到期时间。
40
40
  * 持有方崩溃时不 `leave`,成员在租约到期后被下一次 `tryEnter` 清理,名额不泄漏。
41
+ * One instance per key prefix, provided under {@link RUN_QUOTA} / {@link EVAL_QUOTA}.
41
42
  */
42
43
  export class OrgQuota {
43
44
  redis;
44
45
  keyPrefix;
45
- constructor(redis, keyPrefix = RUN_QUOTA_PREFIX) {
46
+ locks;
47
+ constructor(redis, keyPrefix = RUN_QUOTA_PREFIX, locks) {
46
48
  this.redis = redis;
47
49
  this.keyPrefix = keyPrefix;
50
+ this.locks = locks;
48
51
  }
49
52
  key(orgId) {
50
53
  return `${this.keyPrefix}${orgId}`;
@@ -59,12 +62,34 @@ export class OrgQuota {
59
62
  async leave(orgId, runId) {
60
63
  await this.redis.zrem(this.key(orgId), runId);
61
64
  }
65
+ /**
66
+ * Takes a slot ({@link tryEnter}) and keeps it while held: renewed every `leaseMs / 3` by the
67
+ * lock service's watchdog; `release()` leaves. Undefined when the organization is at its limit.
68
+ * A slot that could not be renewed (it expired meanwhile) aborts `lost` with one WARN; the
69
+ * holder may go on (the slot is a fair-share limit, not mutual exclusion).
70
+ */
71
+ async enter(orgId, runId, limit, leaseMs = ORG_QUOTA_LEASE_MS) {
72
+ const locks = this.locks;
73
+ if (!locks)
74
+ throw new Error("OrgQuota.enter needs the lock service");
75
+ const sentAt = Date.now();
76
+ if (!(await this.tryEnter(orgId, runId, limit, leaseMs)))
77
+ return undefined;
78
+ return locks.keepAlive(`${this.key(orgId)}/${runId}`, leaseMs, {
79
+ renew: () => this.renew(orgId, runId, leaseMs),
80
+ release: () => this.leave(orgId, runId),
81
+ }, sentAt);
82
+ }
62
83
  }
84
+ /** The organization run quota (`capk:org-runs:<orgId>`). */
85
+ export const RUN_QUOTA = Symbol("RUN_QUOTA");
86
+ /** The organization eval quota (`capk:org-evals:<orgId>`). */
87
+ export const EVAL_QUOTA = Symbol("EVAL_QUOTA");
63
88
  /**
64
89
  * 组织的运行并发上限:部署设置 `runConcurrencyOverrides[orgId]`,没有则用 `runtime.orgConcurrency`
65
90
  * (热更新字段,每次经 `config()` 读当前值)。
66
91
  */
67
92
  export async function orgRunLimit(settings, config, orgId) {
68
93
  const { runConcurrencyOverrides } = await settings.get();
69
- return runConcurrencyOverrides[orgId] ?? config().runtime.orgConcurrency;
94
+ return runConcurrencyOverrides[orgId] ?? config.get().runtime.orgConcurrency;
70
95
  }
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Job scheduler ids of the maintenance queue's fixed-period jobs before they became `@LockedCron` /
3
+ * `@LockedInterval` jobs: an upgraded deployment still has them in Redis, so a starting worker
4
+ * role removes them (else BullMQ keeps firing a job no handler knows). Each id
5
+ * comes from its domain's leaf `job-ids.ts`, so this module imports no domain code.
6
+ */
7
+ export declare const RETIRED_SCHEDULER_IDS: readonly string[];
@@ -0,0 +1,31 @@
1
+ import { MARKETPLACES_REFRESH_SCHEDULER_ID, PLUGIN_STAGING_CLEANUP_SCHEDULER_ID, } from "../catalog/job-ids.js";
2
+ import { GATEWAY_CHECK_SCHEDULER_ID } from "../channels/job-ids.js";
3
+ import { ATTACHMENT_CLEANUP_SCHEDULER_ID } from "../conversations/job-ids.js";
4
+ import { PLUGINS_RECONCILE_SCHEDULER_ID } from "../extensions/job-ids.js";
5
+ import { DIRECTORY_SCAN_SCHEDULER_ID, OFFBOARD_SWEEP_SCHEDULER_ID } from "../orgs/job-ids.js";
6
+ import { SANDBOX_DESTROY_SCHEDULER_ID, SANDBOX_SUSPEND_SCHEDULER_ID } from "../sandbox/job-ids.js";
7
+ import { STORAGE_PURGE_SCHEDULER_ID } from "../storage/job-ids.js";
8
+ import { DRIFT_SCHEDULER_ID, OUTPUT_CLEANUP_SCHEDULER_ID } from "../tools/job-ids.js";
9
+ import { USAGE_SWEEP_SCHEDULER_ID, WAIT_SWEEP_SCHEDULER_ID } from "./job-ids.js";
10
+ /**
11
+ * Job scheduler ids of the maintenance queue's fixed-period jobs before they became `@LockedCron` /
12
+ * `@LockedInterval` jobs: an upgraded deployment still has them in Redis, so a starting worker
13
+ * role removes them (else BullMQ keeps firing a job no handler knows). Each id
14
+ * comes from its domain's leaf `job-ids.ts`, so this module imports no domain code.
15
+ */
16
+ export const RETIRED_SCHEDULER_IDS = [
17
+ STORAGE_PURGE_SCHEDULER_ID,
18
+ DIRECTORY_SCAN_SCHEDULER_ID,
19
+ OFFBOARD_SWEEP_SCHEDULER_ID,
20
+ PLUGINS_RECONCILE_SCHEDULER_ID,
21
+ MARKETPLACES_REFRESH_SCHEDULER_ID,
22
+ PLUGIN_STAGING_CLEANUP_SCHEDULER_ID,
23
+ DRIFT_SCHEDULER_ID,
24
+ OUTPUT_CLEANUP_SCHEDULER_ID,
25
+ ATTACHMENT_CLEANUP_SCHEDULER_ID,
26
+ WAIT_SWEEP_SCHEDULER_ID,
27
+ USAGE_SWEEP_SCHEDULER_ID,
28
+ GATEWAY_CHECK_SCHEDULER_ID,
29
+ SANDBOX_SUSPEND_SCHEDULER_ID,
30
+ SANDBOX_DESTROY_SCHEDULER_ID,
31
+ ];
@@ -0,0 +1,33 @@
1
+ import { KernelEvents } from "../infra/events/kernel-events.js";
2
+ import type { KernelLogger } from "../log.js";
3
+ import { RunAbort } from "./abort.js";
4
+ import { RunQueue } from "./run-queue.js";
5
+ import { Waits } from "./waits.js";
6
+ /**
7
+ * Starting and stopping runs from outside the run worker: the conversations API (a message, a
8
+ * stop), the conversation queue and offboarding (a departed member's runs, `by: null`).
9
+ */
10
+ export declare class RunControl {
11
+ private readonly queue;
12
+ private readonly waits;
13
+ private readonly abort;
14
+ private readonly events;
15
+ private readonly log;
16
+ constructor(queue: Pick<RunQueue, "ensureRun" | "abortIfOrphaned">, waits: Pick<Waits, "abortWaiting" | "childFinished" | "stopChildren">, abort: Pick<RunAbort, "request">, events: KernelEvents, log: Pick<KernelLogger, "error">);
17
+ /** 有未消费的消息且没有进行中的运行时投递一轮运行;返回 runId 或 null。 */
18
+ ensureRun(conversationId: string): Promise<string | null>;
19
+ /**
20
+ * 运行是孤儿(会话锁空闲、任务已不存在,没有 worker 会收到中止广播)时直接把它写成 aborted,返回 true;
21
+ * 否则返回 false。A stopped sub-agent then reports to its parent at once, and a stopped parent
22
+ * stops its children (sub-agents spec §12).
23
+ */
24
+ abortIfOrphaned(conversationId: string, runId: string, byAccountId: string | null): Promise<boolean>;
25
+ /**
26
+ * 运行在等人处理(waiting)时直接中止:取消等待、写 `run_aborted`、删除 checkpoint,返回 true;
27
+ * 运行已不是 waiting(例如刚被续跑)→ false. Either way its approval / question cards may have
28
+ * changed: `run.wait-stopped` lets the channel outbound update them.
29
+ */
30
+ abortWaiting(conversationId: string, runId: string, byAccountId: string | null): Promise<boolean>;
31
+ /** 请求中止运行(广播到所有副本)。 */
32
+ requestAbort(runId: string, byAccountId: string | null): Promise<void>;
33
+ }
@@ -0,0 +1,77 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
8
+ return function (target, key) { decorator(target, key, paramIndex); }
9
+ };
10
+ import { Inject, Injectable } from "@nestjs/common";
11
+ import { KernelEvents } from "../infra/events/kernel-events.js";
12
+ import { KERNEL_LOGGER } from "../infra/tokens.js";
13
+ import { RunAbort } from "./abort.js";
14
+ import { RunQueue } from "./run-queue.js";
15
+ import { Waits } from "./waits.js";
16
+ /**
17
+ * Starting and stopping runs from outside the run worker: the conversations API (a message, a
18
+ * stop), the conversation queue and offboarding (a departed member's runs, `by: null`).
19
+ */
20
+ let RunControl = class RunControl {
21
+ queue;
22
+ waits;
23
+ abort;
24
+ events;
25
+ log;
26
+ constructor(queue, waits, abort, events, log) {
27
+ this.queue = queue;
28
+ this.waits = waits;
29
+ this.abort = abort;
30
+ this.events = events;
31
+ this.log = log;
32
+ }
33
+ /** 有未消费的消息且没有进行中的运行时投递一轮运行;返回 runId 或 null。 */
34
+ ensureRun(conversationId) {
35
+ return this.queue.ensureRun(conversationId);
36
+ }
37
+ /**
38
+ * 运行是孤儿(会话锁空闲、任务已不存在,没有 worker 会收到中止广播)时直接把它写成 aborted,返回 true;
39
+ * 否则返回 false。A stopped sub-agent then reports to its parent at once, and a stopped parent
40
+ * stops its children (sub-agents spec §12).
41
+ */
42
+ async abortIfOrphaned(conversationId, runId, byAccountId) {
43
+ const r = await this.queue.abortIfOrphaned(conversationId, runId, byAccountId);
44
+ if (r) {
45
+ await this.waits
46
+ .childFinished(runId)
47
+ .catch((err) => this.log.error("cannot report finished sub-agent run to its parent", { runId, err }));
48
+ await this.waits
49
+ .stopChildren(runId, null)
50
+ .catch((err) => this.log.error("cannot stop the sub-agents of a run", { runId, err }));
51
+ }
52
+ return r;
53
+ }
54
+ /**
55
+ * 运行在等人处理(waiting)时直接中止:取消等待、写 `run_aborted`、删除 checkpoint,返回 true;
56
+ * 运行已不是 waiting(例如刚被续跑)→ false. Either way its approval / question cards may have
57
+ * changed: `run.wait-stopped` lets the channel outbound update them.
58
+ */
59
+ async abortWaiting(conversationId, runId, byAccountId) {
60
+ const r = await this.waits.abortWaiting(conversationId, runId, byAccountId);
61
+ await this.events.emit("run.wait-stopped", { conversationId, runId });
62
+ return r;
63
+ }
64
+ /** 请求中止运行(广播到所有副本)。 */
65
+ requestAbort(runId, byAccountId) {
66
+ return this.abort.request(runId, byAccountId);
67
+ }
68
+ };
69
+ RunControl = __decorate([
70
+ Injectable(),
71
+ __param(0, Inject(RunQueue)),
72
+ __param(1, Inject(Waits)),
73
+ __param(2, Inject(RunAbort)),
74
+ __param(3, Inject(KernelEvents)),
75
+ __param(4, Inject(KERNEL_LOGGER))
76
+ ], RunControl);
77
+ export { RunControl };