@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,33 +1,35 @@
1
- import { createHash, randomUUID } from "node:crypto";
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 { randomUUID } from "node:crypto";
2
11
  import { isChannelSendError, } from "@capybara-hq/plugin-sdk";
3
- import { DelayedError, Queue, UnrecoverableError, Worker } from "bullmq";
12
+ import { Inject, Injectable } from "@nestjs/common";
13
+ import { DelayedError, UnrecoverableError } from "bullmq";
4
14
  import { sql } from "kysely";
5
- import { conversationTopic, } from "../conversations/event-log.js";
15
+ import { conversationTopic, EventLog, } from "../conversations/event-log.js";
6
16
  import { ApiError } from "../errors.js";
7
- import { withJobContext } from "../log-context.js";
17
+ import { KernelConfigService } from "../infra/config/kernel-config.service.js";
18
+ import { KernelDb } from "../infra/database/kernel-db.js";
19
+ import { TransactionHost } from "../infra/database/transaction-host.js";
20
+ import { Transactional } from "../infra/database/transactional.decorator.js";
21
+ import { KERNEL_BUS, KERNEL_LOGGER } from "../infra/tokens.js";
8
22
  import { readOrgSettings } from "../orgs/settings.service.js";
9
- import { ConversationLock } from "../runtime/conversation-lock.js";
10
- import { bullConnection } from "../runtime/run-queue.js";
23
+ import { ConversationLock, } from "../runtime/conversation-lock.js";
24
+ import { ApprovalsService } from "../tools/approvals.service.js";
25
+ import { QuestionsService } from "../tools/questions.service.js";
11
26
  import { approvalCard, cardMessage, connectUrl, conversationUrl, questionCard, webBase, } from "./cards.js";
27
+ import { ChannelConnections } from "./connections.service.js";
28
+ import { ChannelInbound } from "./inbound.js";
29
+ import { ChannelJobs, INBOUND_JOB, idempotencyKey, } from "./jobs.js";
12
30
  import { phrase } from "./phrases.js";
13
- /** 渠道队列(出站投递与入站任务,不含 `:`),只在 worker 角色上消费。 */
14
- export const CHANNEL_QUEUE_NAME = "cap-kernel-channels";
15
- /** 投递任务名。 */
16
- export const DELIVER_JOB = "deliver";
17
- /** 投递任务 id(不含 `:`):同一会话、同一日志位置只排一个任务。 */
18
- export const deliverJobId = (conversationId, seq) => `deliver-${conversationId}-${seq}`;
19
- /**
20
- * 结束后复核排的任务 id:每次唯一(带随机后缀,不含 `:`)。不能复用 `deliver-<会话>-<seq>`——同 id 的任务
21
- * 可能正因锁被占而即将直接结束,BullMQ 会把新任务去重进它,于是没人投递。
22
- */
23
- export const followUpJobId = (conversationId, seq) => `deliver-${conversationId}-${seq}-f${randomUUID().slice(0, 8)}`;
24
- /**
25
- * 发给插件的幂等键(Ruling A15):把逻辑键(如 `<会话>-<seq>`)做 sha256,取 base64url 的前 32 个字符——
26
- * 稳定、只含 `[A-Za-z0-9_-]`,满足常见平台的长度限制。
27
- */
28
- export function idempotencyKey(raw) {
29
- return createHash("sha256").update(raw).digest("base64url").slice(0, 32);
30
- }
31
+ // The queue, job names, ids and priorities live with the producer (jobs.ts)
32
+ export { CHANNEL_QUEUE_NAME, DELIVER_ATTEMPTS, DELIVER_JOB, DELIVER_PRIORITY, deliverJobId, followUpJobId, INBOUND_ATTEMPTS, INBOUND_JOB, INBOUND_PRIORITY, idempotencyKey, inboundJobId, } from "./jobs.js";
31
33
  /**
32
34
  * 投递锁被占时怎么办:读不到持有者(刚被释放)→ 再取一次;是自己上一次(已崩溃、被 stalled 重新投递)的尝试 →
33
35
  * 推迟重试等它过期;别的任务 → 直接结束(它会读到新事件,结束时还会复核)。
@@ -59,8 +61,6 @@ const LOCK_BUSY_DELAY_MS = 1000;
59
61
  const PLUGIN_PENDING_DELAY_MS = 5000;
60
62
  /** 插件一直没有在任何副本上加载:任务排进队列这么久之后放弃(之后的新事件会再排任务)。 */
61
63
  const PLUGIN_PENDING_MAX_MS = 3_600_000;
62
- /** 可重试失败(限流、5xx、网络、超时)的总尝试次数。 */
63
- export const DELIVER_ATTEMPTS = 8;
64
64
  /** 同一事件不可重试地失败这么多次后跳过它(Ruling A14)。 */
65
65
  export const POISON_FAILURES = 3;
66
66
  /** 退避:未给出建议等待时长时 `min(上限, 基数 · 2^(n-1))`。 */
@@ -70,22 +70,6 @@ const BACKOFF_MAX_MS = 60_000;
70
70
  const PAGE = 200;
71
71
  /** `last_error` 的最大长度(同渠道选主)。 */
72
72
  const MAX_ERROR_CHARS = 1000;
73
- /** 入站任务名。 */
74
- export const INBOUND_JOB = "inbound";
75
- /**
76
- * BullMQ 优先级(数字越小越先):入站任务先于出站投递任务——投递任务可能占着并发槽等输出,
77
- * 用户发来的消息不能排在它们后面。
78
- */
79
- export const INBOUND_PRIORITY = 1;
80
- export const DELIVER_PRIORITY = 10;
81
- /** 入站任务的总尝试次数(处理失败由 BullMQ 指数退避重试:1s、2s、4s、8s)。 */
82
- export const INBOUND_ATTEMPTS = 5;
83
- const INBOUND_BACKOFF_MS = 1000;
84
- /**
85
- * 入站消息的任务 id(不含 `:`):`inbound-<连接>-<sha256(消息 id) 的 base64url 前 22 位>`。同一条消息只排一个任务
86
- * (已完成的任务保留一段时间,期间重复入队被 BullMQ 忽略)。
87
- */
88
- export const inboundJobId = (connectionId, messageId) => `inbound-${connectionId}-${createHash("sha256").update(messageId).digest("base64url").slice(0, 22)}`;
89
73
  /** 可重试的投递失败:带已打码的说明与平台建议的等待时长,供退避策略与最后一次失败时记录。 */
90
74
  class RetryableDeliveryError extends Error {
91
75
  connectionId;
@@ -121,9 +105,8 @@ export function deliverBackoff(attemptsMade, err) {
121
105
  }
122
106
  /**
123
107
  * 渠道出站投递:把会话日志里 `channel_deliveries.last_seq` 之后的内容按序投到 IM。
124
- * - 生产方(任意角色):`enqueue(conversationId)` 投递 `deliver-<会话>-<当前 seq>` 任务(会话没有投递目标时什么都不做)。
125
- * 内核在会话每次追加事件后都调用它(事件日志的 notify 钩子),运行开始时也调用。
126
- * - Worker(只在 worker 角色):每个任务先取按会话互斥的投递锁,订阅 `conv.<id>` 后补读日志;运行进入 waiting /
108
+ * - 生产方(任意角色):{@link ChannelJobs}(`deliver-<会话>-<当前 seq>` 任务;会话没有投递目标时什么都不做)。
109
+ * - Worker(只在 worker 角色,经 `@Processor`):每个任务先取按会话互斥的投递锁,订阅 `conv.<id>` 后补读日志;运行进入 waiting /
127
110
  * 终态且日志读完,或追上后 `channels.deliveryIdleMs` 内没有新的总线消息,任务就结束(不长期占并发槽)。
128
111
  * 锁被别的任务持有 → 本任务直接结束:持有者会读到新事件,且它结束时(释放锁之后)复核日志是否有新内容,有就再排一个任务;
129
112
  * 锁被自己上一次(已崩溃的)尝试占着 → 推迟重试,等锁过期。
@@ -131,127 +114,82 @@ export function deliverBackoff(attemptsMade, err) {
131
114
  * 并记下 IM 消息 id(草稿 id、卡片消息 id),已投递的不会重发。
132
115
  * 审批 / 提问卡片在发送之前先记一行 `pending`(T5a),卡片一出现就被点击也能通过 Ruling A13 的核对;
133
116
  * 推进 `last_seq` 的事务再补上消息 id、改为 `sent`。崩溃后续投的副本用同一个幂等键重发。
134
- * 同一队列还承载入站任务(`inbound`,Ruling A21):由 `enqueueInbound` 排入,worker 调用 `deps.inbound` 处理,
135
- * 失败按 BullMQ 指数退避重试。
117
+ * 同一队列还承载入站任务(`inbound`,Ruling A21):由 {@link ChannelJobs.enqueueInbound} 排入,worker 调用
118
+ * {@link ChannelInbound.handle} 处理,失败按 BullMQ 指数退避重试。
136
119
  * 状态全部在 PG / Redis;进程内只有本任务自己的订阅、草稿节流时刻与等待定时器(本进程持有的资源)。
137
120
  */
138
- export class ChannelOutbound {
139
- d;
140
- queue;
141
- queueConn;
121
+ let ChannelOutbound = class ChannelOutbound {
122
+ kdb;
123
+ inbound;
124
+ jobs;
125
+ config;
126
+ log;
127
+ txHost;
142
128
  worker;
143
- workerConn;
144
129
  closed = false;
145
130
  /** 停机:进行中的任务在下一个检查点交还队列(由其他副本续投)。 */
146
131
  stopping = new AbortController();
147
132
  lock;
148
- constructor(d) {
149
- this.d = d;
150
- this.lock = new ConversationLock(d.redis, d.log, DELIVER_LOCK_PREFIX);
151
- }
152
- /** 会话有 IM 投递目标时投递一个出站任务(同一日志位置重复调用只排一个);已关闭时什么都不做。 */
153
- async enqueue(conversationId, opts = {}) {
154
- if (this.closed)
155
- return;
156
- const row = await this.d.db
157
- .selectFrom("channel_deliveries")
158
- .innerJoin("conversations", "conversations.id", "channel_deliveries.conversation_id")
159
- .select("conversations.last_seq")
160
- .where("channel_deliveries.conversation_id", "=", conversationId)
161
- .executeTakeFirst();
162
- if (!row || this.closed)
163
- return;
164
- await this.getQueue().add(DELIVER_JOB, { conversationId }, {
165
- jobId: opts.followUp
166
- ? followUpJobId(conversationId, Number(row.last_seq))
167
- : deliverJobId(conversationId, Number(row.last_seq)),
168
- attempts: DELIVER_ATTEMPTS,
169
- backoff: { type: "deliver" },
170
- priority: DELIVER_PRIORITY,
171
- removeOnComplete: true,
172
- removeOnFail: true,
173
- });
133
+ d;
134
+ constructor(kdb, bus, eventLog,
135
+ /** The conversation lock provider; delivery takes it under its own key prefix. */
136
+ lock, connections, approvals, questions,
137
+ /** 入站任务的处理(worker 上执行 `ChannelInbound.handle`);失败抛错由 BullMQ 重试。 */
138
+ inbound, jobs, config, log, txHost) {
139
+ this.kdb = kdb;
140
+ this.inbound = inbound;
141
+ this.jobs = jobs;
142
+ this.config = config;
143
+ this.log = log;
144
+ this.txHost = txHost;
145
+ this.lock = lock.scoped(DELIVER_LOCK_PREFIX);
146
+ this.d = {
147
+ get db() {
148
+ return kdb.db;
149
+ },
150
+ bus,
151
+ eventLog,
152
+ connections,
153
+ approvals,
154
+ questions,
155
+ config,
156
+ log,
157
+ writes: this,
158
+ };
174
159
  }
175
160
  /**
176
- * 排一个入站任务(Ruling A21,同一队列 `cap-kernel-channels`):处理失败按 {@link INBOUND_ATTEMPTS} 次指数退避重试。
177
- * 已关闭时抛错(调用方据此让插件不确认、由平台重投)。
161
+ * Starts consuming (worker role only): `worker` is the `@Processor` worker of the channel queue
162
+ * (its job lock and stalled detection follow the run queue's config).
178
163
  */
179
- async enqueueInbound(connectionId, event, jobId) {
180
- await this.getQueue().add(INBOUND_JOB, { connectionId, event }, {
181
- jobId,
182
- attempts: INBOUND_ATTEMPTS,
183
- priority: INBOUND_PRIORITY,
184
- backoff: { type: "exponential", delay: INBOUND_BACKOFF_MS },
185
- removeOnComplete: { age: 3600, count: 1000 },
186
- removeOnFail: { age: 86_400 },
187
- });
164
+ startWorker(worker) {
165
+ if (this.worker || this.closed)
166
+ return;
167
+ this.worker = worker;
168
+ void worker.run().catch((err) => this.onError(err));
188
169
  }
189
- /**
190
- * 连接重新可投递(轮换了凭据 / 重新启用):给该连接投递进度落后于会话日志的会话各排一个出站任务,
191
- * 补投停用或凭据失效期间落下的内容(不必等下一条消息)。
192
- */
193
- async resumeConnection(connectionId) {
194
- const rows = await this.d.db
195
- .selectFrom("channel_deliveries")
196
- .innerJoin("conversations", "conversations.id", "channel_deliveries.conversation_id")
197
- .select("channel_deliveries.conversation_id")
198
- .where("channel_deliveries.connection_id", "=", connectionId)
199
- .whereRef("channel_deliveries.last_seq", "<", "conversations.last_seq")
200
- .execute();
201
- for (const r of rows)
202
- await this.enqueue(r.conversation_id, { followUp: true });
170
+ /** The worker's `error` event. */
171
+ onError(err) {
172
+ this.log.error("channel outbound worker error", { err });
203
173
  }
204
- /** 启动 Worker(只在含 `worker` 角色的进程)。任务锁与 stalled 检测沿用运行队列的配置。 */
205
- startWorker() {
206
- if (this.worker || this.closed)
174
+ /** The worker's `failed` event (a requeue for later is not a failure). */
175
+ onFailed(job, err) {
176
+ if (err instanceof DelayedError || err.name === "DelayedError")
207
177
  return;
208
- const { jobLockMs, stalledIntervalMs } = this.d.config().runtime;
209
- this.workerConn = bullConnection(this.d.redisUrl, this.d.log);
210
- this.worker = new Worker(CHANNEL_QUEUE_NAME, (job, token) => withJobContext(CHANNEL_QUEUE_NAME, job, () => this.process(job, token)), {
211
- connection: this.workerConn,
212
- concurrency: this.d.config().channels.deliveryConcurrency,
213
- lockDuration: jobLockMs,
214
- stalledInterval: stalledIntervalMs,
215
- maxStalledCount: 3,
216
- settings: { backoffStrategy: (n, _type, err) => deliverBackoff(n, err) },
217
- });
218
- this.worker.on("error", (err) => this.d.log.error("channel outbound worker error", { err }));
219
- this.worker.on("failed", (job, err) => {
220
- if (err instanceof DelayedError || err.name === "DelayedError")
221
- return;
222
- this.d.log.warn("channel delivery attempt failed", { jobId: job?.id, error: err.message });
223
- });
178
+ this.log.warn("channel delivery attempt failed", { jobId: job?.id, error: err.message });
224
179
  }
180
+ /** Stops: the jobs in flight are handed back at their next checkpoint, the worker closes. */
225
181
  async close() {
226
182
  this.closed = true;
227
183
  this.stopping.abort();
228
184
  const w = this.worker;
229
- const q = this.queue;
230
185
  this.worker = undefined;
231
- this.queue = undefined;
232
186
  await w?.close().catch(() => { });
233
- await q?.close().catch(() => { });
234
- for (const c of [this.workerConn, this.queueConn]) {
235
- if (c)
236
- await c.quit().catch(() => c.disconnect());
237
- }
238
- this.workerConn = undefined;
239
- this.queueConn = undefined;
240
- }
241
- getQueue() {
242
- if (this.closed)
243
- throw new Error("channel outbound queue is closed");
244
- if (!this.queue) {
245
- this.queueConn = bullConnection(this.d.redisUrl, this.d.log);
246
- this.queue = new Queue(CHANNEL_QUEUE_NAME, { connection: this.queueConn });
247
- this.queue.on("error", (err) => this.d.log.error("channel outbound queue error", { err }));
248
- }
249
- return this.queue;
250
187
  }
251
188
  async requeue(job, token, delayMs) {
252
189
  await job.moveToDelayed(Date.now() + delayMs, token);
253
190
  throw new DelayedError();
254
191
  }
192
+ /** One job of the channel queue (the `@Processor` calls it): a delivery or an inbound event. */
255
193
  async process(job, token) {
256
194
  if (this.stopping.signal.aborted)
257
195
  return this.requeue(job, token, 0);
@@ -262,7 +200,7 @@ export class ChannelOutbound {
262
200
  /** 本副本没有加载连接的插件:推迟重试(不消耗重试次数),排队超过上限才放弃。 */
263
201
  async pluginPending(job, token, what) {
264
202
  if (Date.now() - job.timestamp > PLUGIN_PENDING_MAX_MS) {
265
- this.d.log.warn(`channel ${what} dropped: extension not loaded on any replica in time`, {
203
+ this.log.warn(`channel ${what} dropped: extension not loaded on any replica in time`, {
266
204
  jobId: job.id,
267
205
  });
268
206
  return;
@@ -275,10 +213,8 @@ export class ChannelOutbound {
275
213
  */
276
214
  async processInbound(job, token) {
277
215
  const { connectionId, event } = job.data;
278
- if (!this.d.inbound)
279
- throw new Error("channel inbound handler is not configured");
280
216
  try {
281
- await this.d.inbound(connectionId, event);
217
+ await this.inbound.handle(connectionId, event);
282
218
  }
283
219
  catch (err) {
284
220
  if (err instanceof ApiError && err.code === "extension.not_found") {
@@ -287,7 +223,7 @@ export class ChannelOutbound {
287
223
  if (isChannelSendError(err) &&
288
224
  !err.retryable &&
289
225
  (err.reason === "auth" || err.reason === "target_gone")) {
290
- this.d.log.warn("channel inbound reply failed permanently", {
226
+ this.log.warn("channel inbound reply failed permanently", {
291
227
  connectionId,
292
228
  type: event.type,
293
229
  reason: err.reason,
@@ -295,7 +231,7 @@ export class ChannelOutbound {
295
231
  throw new UnrecoverableError(`inbound reply failed: ${err.reason}`);
296
232
  }
297
233
  if (job.attemptsMade + 1 >= (job.opts.attempts ?? 1)) {
298
- this.d.log.error("channel inbound event dropped after retries", {
234
+ this.log.error("channel inbound event dropped after retries", {
299
235
  connectionId,
300
236
  type: event.type,
301
237
  err,
@@ -307,7 +243,7 @@ export class ChannelOutbound {
307
243
  async deliver(job, token) {
308
244
  const { conversationId } = job.data;
309
245
  const owner = `${job.id ?? "job"}.`;
310
- const acquire = () => this.lock.acquire(conversationId, `${owner}${randomUUID()}`, this.d.config().runtime.jobLockMs);
246
+ const acquire = () => this.lock.acquire(conversationId, `${owner}${randomUUID()}`, this.config.get().runtime.jobLockMs);
311
247
  let lease = await acquire();
312
248
  if (!lease) {
313
249
  const action = busyLockAction(await this.lock.holder(conversationId), owner);
@@ -337,7 +273,7 @@ export class ChannelOutbound {
337
273
  finally {
338
274
  await lease
339
275
  .release()
340
- .catch((err) => this.d.log.warn("cannot release channel delivery lock", { conversationId, err }));
276
+ .catch((err) => this.log.warn("cannot release channel delivery lock", { conversationId, err }));
341
277
  }
342
278
  if (outcome.error)
343
279
  await this.recordError(outcome.error.connectionId, outcome.error.message);
@@ -360,7 +296,7 @@ export class ChannelOutbound {
360
296
  return;
361
297
  case "changed":
362
298
  // 连接改过(轮换凭据等):释放锁之后排新任务,用新的出站会话从 last_seq 接着投
363
- await this.enqueue(conversationId, { followUp: true });
299
+ await this.jobs.enqueue(conversationId, { followUp: true });
364
300
  return;
365
301
  case "pending":
366
302
  return this.pluginPending(job, token, "delivery");
@@ -368,7 +304,7 @@ export class ChannelOutbound {
368
304
  }
369
305
  /** 会话日志当前的最后位置(会话不存在时 undefined)。 */
370
306
  async lastSeq(conversationId) {
371
- const conv = await this.d.db
307
+ const conv = await this.kdb
372
308
  .selectFrom("conversations")
373
309
  .select("last_seq")
374
310
  .where("id", "=", conversationId)
@@ -379,20 +315,81 @@ export class ChannelOutbound {
379
315
  async followUp(conversationId, seen) {
380
316
  const last = await this.lastSeq(conversationId);
381
317
  if (last !== undefined && last > seen)
382
- await this.enqueue(conversationId, { followUp: true });
318
+ await this.jobs.enqueue(conversationId, { followUp: true });
383
319
  }
384
320
  /** 不可重试(或重试用尽)的发送失败:记连接 `last_error`(已打码)。 */
385
321
  async recordError(connectionId, message) {
386
322
  const text = `delivery failed: ${message}`.slice(0, MAX_ERROR_CHARS);
387
- this.d.log.warn("channel delivery failed", { connectionId, error: text });
388
- await this.d.db
323
+ this.log.warn("channel delivery failed", { connectionId, error: text });
324
+ await this.kdb
389
325
  .updateTable("channel_connections")
390
326
  .set({ last_error: text })
391
327
  .where("id", "=", connectionId)
392
328
  .execute()
393
- .catch((err) => this.d.log.warn("cannot record channel delivery error", { err }));
329
+ .catch((err) => this.log.warn("cannot record channel delivery error", { err }));
394
330
  }
395
- }
331
+ /**
332
+ * 推进 `last_seq`(同一事务记下草稿 / 卡片消息 id,清零失败计数)。以「仍是 `persisted`」为条件:
333
+ * 被别人推进过(投递锁丢失后另一实例接手)返回 false,什么都不写。
334
+ */
335
+ async advanceIn(a) {
336
+ const r = await this.kdb
337
+ .updateTable("channel_deliveries")
338
+ .set({
339
+ last_seq: String(a.seq),
340
+ fail_seq: null,
341
+ fail_count: 0,
342
+ ...(a.draft !== undefined && { draft_message_id: a.draft }),
343
+ updated_at: new Date(),
344
+ })
345
+ .where("conversation_id", "=", a.conversationId)
346
+ .where("last_seq", "=", String(a.persisted))
347
+ .executeTakeFirst();
348
+ if (r.numUpdatedRows === 0n)
349
+ return false;
350
+ if (a.card) {
351
+ // The row was recorded as `pending` before the send (recordCard); fill in the message id
352
+ const { messageId, target } = a.card;
353
+ await this.kdb
354
+ .insertInto("channel_card_messages")
355
+ .values({
356
+ conversation_id: a.conversationId,
357
+ connection_id: a.card.connectionId,
358
+ card_kind: a.card.kind,
359
+ card_id: a.card.id,
360
+ message_id: messageId,
361
+ status: "sent",
362
+ target: JSON.stringify(target),
363
+ })
364
+ .onConflict((oc) => oc.columns(["conversation_id", "connection_id", "card_kind", "card_id"]).doUpdateSet({
365
+ message_id: messageId,
366
+ status: "sent",
367
+ target: JSON.stringify(target),
368
+ }))
369
+ .execute();
370
+ }
371
+ return true;
372
+ }
373
+ };
374
+ __decorate([
375
+ Transactional()
376
+ ], ChannelOutbound.prototype, "advanceIn", null);
377
+ ChannelOutbound = __decorate([
378
+ Injectable(),
379
+ __param(0, Inject(KernelDb)),
380
+ __param(1, Inject(KERNEL_BUS)),
381
+ __param(2, Inject(EventLog)),
382
+ __param(3, Inject(ConversationLock)),
383
+ __param(4, Inject(ChannelConnections)),
384
+ __param(5, Inject(ApprovalsService)),
385
+ __param(6, Inject(QuestionsService)),
386
+ __param(7, Inject(ChannelInbound)),
387
+ __param(8, Inject(ChannelJobs)),
388
+ __param(9, Inject(KernelConfigService)),
389
+ __param(10, Inject(KERNEL_LOGGER)),
390
+ __param(11, Inject(TransactionHost))
391
+ ], ChannelOutbound);
392
+ export { ChannelOutbound };
396
393
  /** 一次投递任务(本进程持有):订阅、补读、草稿节流。 */
397
394
  class Delivery {
398
395
  d;
@@ -482,7 +479,7 @@ class Delivery {
482
479
  this.persisted = this.seen;
483
480
  this.draftId = row.draft_message_id;
484
481
  this.locale = (await readOrgSettings(this.d.db, this.s.row.orgId)).locale;
485
- this.base = webBase(this.d.config().http.publicUrl);
482
+ this.base = webBase(this.d.config.get().http.publicUrl);
486
483
  return await this.loop();
487
484
  }
488
485
  catch (err) {
@@ -586,7 +583,7 @@ class Delivery {
586
583
  return undefined;
587
584
  }
588
585
  async loop() {
589
- const idleMs = this.d.config().channels.deliveryIdleMs;
586
+ const idleMs = this.d.config.get().channels.deliveryIdleMs;
590
587
  let lastMessageAt = Date.now();
591
588
  let needCatchUp = true;
592
589
  this.checkedAt = Date.now();
@@ -690,43 +687,17 @@ class Delivery {
690
687
  * 被别人推进过(投递锁丢失后另一实例接手)就停止,不再重复发送。
691
688
  */
692
689
  async advance(seq, opts = {}) {
693
- await this.d.db.transaction().execute(async (t) => {
694
- const r = await t
695
- .updateTable("channel_deliveries")
696
- .set({
697
- last_seq: String(seq),
698
- fail_seq: null,
699
- fail_count: 0,
700
- ...(opts.draft !== undefined && { draft_message_id: opts.draft }),
701
- updated_at: new Date(),
702
- })
703
- .where("conversation_id", "=", this.conversationId)
704
- .where("last_seq", "=", String(this.persisted))
705
- .executeTakeFirst();
706
- if (r.numUpdatedRows === 0n)
707
- throw new DeliveryLostError();
708
- if (opts.card) {
709
- // The row was recorded as `pending` before the send (recordCard); fill in the message id
710
- const messageId = opts.card.messageId;
711
- await t
712
- .insertInto("channel_card_messages")
713
- .values({
714
- conversation_id: this.conversationId,
715
- connection_id: this.s.row.id,
716
- card_kind: opts.card.kind,
717
- card_id: opts.card.id,
718
- message_id: messageId,
719
- status: "sent",
720
- target: JSON.stringify(this.target),
721
- })
722
- .onConflict((oc) => oc.columns(["conversation_id", "connection_id", "card_kind", "card_id"]).doUpdateSet({
723
- message_id: messageId,
724
- status: "sent",
725
- target: JSON.stringify(this.target),
726
- }))
727
- .execute();
728
- }
690
+ const advanced = await this.d.writes.advanceIn({
691
+ conversationId: this.conversationId,
692
+ persisted: this.persisted,
693
+ seq,
694
+ ...(opts.draft !== undefined && { draft: opts.draft }),
695
+ ...(opts.card && {
696
+ card: { ...opts.card, connectionId: this.s.row.id, target: this.target },
697
+ }),
729
698
  });
699
+ if (!advanced)
700
+ throw new DeliveryLostError();
730
701
  this.persisted = seq;
731
702
  if (opts.draft !== undefined) {
732
703
  this.draftId = opts.draft;