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

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 (616) 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 +179 -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 +261 -329
  21. package/dist/agents/definition.d.ts +8 -0
  22. package/dist/agents/definition.js +8 -0
  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 +20 -4
  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 +323 -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/cli.d.ts +3 -2
  42. package/dist/catalog/cli.js +13 -31
  43. package/dist/catalog/job-ids.d.ts +15 -0
  44. package/dist/catalog/job-ids.js +15 -0
  45. package/dist/catalog/jobs.d.ts +27 -0
  46. package/dist/catalog/jobs.js +70 -0
  47. package/dist/catalog/locks.d.ts +24 -0
  48. package/dist/catalog/locks.js +63 -0
  49. package/dist/catalog/marketplaces.controller.d.ts +4 -4
  50. package/dist/catalog/marketplaces.controller.js +22 -11
  51. package/dist/catalog/marketplaces.service.d.ts +30 -13
  52. package/dist/catalog/marketplaces.service.js +330 -256
  53. package/dist/catalog/org-catalog.controller.d.ts +4 -3
  54. package/dist/catalog/org-catalog.controller.js +29 -14
  55. package/dist/catalog/org-catalog.service.d.ts +32 -198
  56. package/dist/catalog/org-catalog.service.js +159 -400
  57. package/dist/catalog/plugin-import.d.ts +73 -34
  58. package/dist/catalog/plugin-import.js +356 -217
  59. package/dist/catalog/plugin-install.d.ts +83 -41
  60. package/dist/catalog/plugin-install.js +421 -269
  61. package/dist/catalog/plugin-upgrade.d.ts +59 -4
  62. package/dist/catalog/plugin-upgrade.js +407 -282
  63. package/dist/catalog/requests.service.d.ts +27 -15
  64. package/dist/catalog/requests.service.js +201 -145
  65. package/dist/catalog/upgrade-targets.d.ts +4 -7
  66. package/dist/channels/actions.d.ts +6 -4
  67. package/dist/channels/actions.js +1 -1
  68. package/dist/channels/cards.d.ts +2 -2
  69. package/dist/channels/channels.module.d.ts +40 -0
  70. package/dist/channels/channels.module.js +128 -0
  71. package/dist/channels/connections.controller.d.ts +1 -1
  72. package/dist/channels/connections.controller.js +11 -6
  73. package/dist/channels/connections.service.d.ts +43 -21
  74. package/dist/channels/connections.service.js +236 -131
  75. package/dist/channels/inbound.d.ts +34 -38
  76. package/dist/channels/inbound.js +107 -41
  77. package/dist/channels/job-ids.d.ts +10 -0
  78. package/dist/channels/job-ids.js +10 -0
  79. package/dist/channels/jobs.d.ts +85 -0
  80. package/dist/channels/jobs.js +157 -0
  81. package/dist/channels/outbound.d.ts +60 -82
  82. package/dist/channels/outbound.js +165 -194
  83. package/dist/channels/supervisor.d.ts +88 -46
  84. package/dist/channels/supervisor.js +230 -132
  85. package/dist/channels/threads.d.ts +29 -8
  86. package/dist/channels/threads.js +71 -13
  87. package/dist/channels/webhook.d.ts +20 -14
  88. package/dist/channels/webhook.js +51 -20
  89. package/dist/config/load.d.ts +3 -2
  90. package/dist/config/load.js +3 -2
  91. package/dist/config/nacos-source.js +11 -2
  92. package/dist/config/schema.d.ts +1 -0
  93. package/dist/config/schema.js +10 -4
  94. package/dist/conversations/access.d.ts +29 -0
  95. package/dist/conversations/access.js +86 -0
  96. package/dist/conversations/artifacts.d.ts +10 -10
  97. package/dist/conversations/artifacts.js +35 -9
  98. package/dist/conversations/attachments.controller.d.ts +1 -1
  99. package/dist/conversations/attachments.controller.js +8 -6
  100. package/dist/conversations/attachments.module.d.ts +7 -0
  101. package/dist/conversations/attachments.module.js +25 -0
  102. package/dist/conversations/attachments.service.d.ts +30 -22
  103. package/dist/conversations/attachments.service.js +119 -46
  104. package/dist/conversations/conversations.controller.d.ts +8 -7
  105. package/dist/conversations/conversations.controller.js +59 -29
  106. package/dist/conversations/conversations.module.d.ts +8 -0
  107. package/dist/conversations/conversations.module.js +69 -0
  108. package/dist/conversations/conversations.service.d.ts +40 -38
  109. package/dist/conversations/conversations.service.js +130 -140
  110. package/dist/conversations/event-log.d.ts +28 -18
  111. package/dist/conversations/event-log.js +74 -27
  112. package/dist/conversations/files.d.ts +10 -10
  113. package/dist/conversations/files.js +37 -11
  114. package/dist/conversations/idem-keys.d.ts +5 -0
  115. package/dist/conversations/idem-keys.js +5 -0
  116. package/dist/conversations/job-ids.d.ts +6 -0
  117. package/dist/conversations/job-ids.js +6 -0
  118. package/dist/conversations/outputs-read.d.ts +11 -11
  119. package/dist/conversations/outputs-read.js +31 -7
  120. package/dist/conversations/queue.d.ts +48 -56
  121. package/dist/conversations/queue.js +13 -289
  122. package/dist/conversations/queue.service.d.ts +60 -0
  123. package/dist/conversations/queue.service.js +343 -0
  124. package/dist/conversations/sandbox-status.d.ts +13 -10
  125. package/dist/conversations/sandbox-status.js +36 -8
  126. package/dist/conversations/titles.d.ts +71 -24
  127. package/dist/conversations/titles.js +159 -63
  128. package/dist/ctx/bus.js +9 -3
  129. package/dist/ctx/create-ctx.d.ts +6 -0
  130. package/dist/ctx/create-ctx.js +7 -9
  131. package/dist/ctx/lock.d.ts +7 -3
  132. package/dist/ctx/lock.js +9 -20
  133. package/dist/ctx/secrets.d.ts +10 -2
  134. package/dist/ctx/secrets.js +7 -3
  135. package/dist/db/kernel-schema.d.ts +2 -2
  136. package/dist/db/pool.d.ts +5 -0
  137. package/dist/db/pool.js +1 -0
  138. package/dist/errors.d.ts +1 -0
  139. package/dist/errors.js +1 -0
  140. package/dist/evals/budget.d.ts +42 -21
  141. package/dist/evals/budget.js +114 -62
  142. package/dist/evals/evals.module.d.ts +31 -0
  143. package/dist/evals/evals.module.js +114 -0
  144. package/dist/evals/jobs.d.ts +20 -0
  145. package/dist/evals/jobs.js +45 -0
  146. package/dist/evals/run-replay.d.ts +56 -8
  147. package/dist/evals/run-replay.js +140 -80
  148. package/dist/evals/runs.controller.d.ts +1 -1
  149. package/dist/evals/runs.controller.js +17 -8
  150. package/dist/evals/runs.service.d.ts +23 -45
  151. package/dist/evals/runs.service.js +245 -234
  152. package/dist/evals/sets.controller.d.ts +1 -1
  153. package/dist/evals/sets.controller.js +17 -8
  154. package/dist/evals/sets.service.d.ts +22 -6
  155. package/dist/evals/sets.service.js +248 -194
  156. package/dist/evals/snapshot.d.ts +2 -2
  157. package/dist/evals/step-replay.d.ts +2 -2
  158. package/dist/evals/step-replay.js +1 -1
  159. package/dist/evals/trajectory.controller.d.ts +1 -1
  160. package/dist/evals/trajectory.controller.js +11 -7
  161. package/dist/evals/trajectory.service.d.ts +5 -4
  162. package/dist/evals/trajectory.service.js +30 -7
  163. package/dist/evals/worker.d.ts +44 -27
  164. package/dist/evals/worker.js +220 -121
  165. package/dist/extensions/admin-ops.d.ts +61 -33
  166. package/dist/extensions/admin-ops.js +248 -154
  167. package/dist/extensions/admin-view.d.ts +38 -27
  168. package/dist/extensions/admin-view.js +126 -55
  169. package/dist/extensions/approvals.d.ts +12 -8
  170. package/dist/extensions/approvals.js +73 -46
  171. package/dist/extensions/blobs.d.ts +27 -10
  172. package/dist/extensions/blobs.js +111 -45
  173. package/dist/extensions/bootstrap.d.ts +58 -31
  174. package/dist/extensions/bootstrap.js +175 -121
  175. package/dist/extensions/cli.d.ts +20 -10
  176. package/dist/extensions/cli.js +41 -96
  177. package/dist/extensions/config-issues.d.ts +7 -0
  178. package/dist/extensions/config-issues.js +31 -0
  179. package/dist/extensions/deployment-config-store.d.ts +49 -0
  180. package/dist/extensions/deployment-config-store.js +133 -0
  181. package/dist/extensions/deployment-config.d.ts +58 -67
  182. package/dist/extensions/deployment-config.js +202 -230
  183. package/dist/extensions/enabled.d.ts +5 -5
  184. package/dist/extensions/extensions.module.d.ts +8 -0
  185. package/dist/extensions/extensions.module.js +77 -0
  186. package/dist/extensions/hooks.d.ts +3 -2
  187. package/dist/extensions/hooks.js +1 -1
  188. package/dist/extensions/host.d.ts +72 -68
  189. package/dist/extensions/host.js +191 -152
  190. package/dist/extensions/installs.d.ts +49 -16
  191. package/dist/extensions/installs.js +128 -32
  192. package/dist/extensions/job-ids.d.ts +6 -0
  193. package/dist/extensions/job-ids.js +6 -0
  194. package/dist/extensions/lifecycle-topics.d.ts +18 -0
  195. package/dist/extensions/lifecycle-topics.js +18 -0
  196. package/dist/extensions/lifecycle.d.ts +35 -47
  197. package/dist/extensions/lifecycle.js +103 -39
  198. package/dist/extensions/locks.d.ts +33 -0
  199. package/dist/extensions/locks.js +86 -0
  200. package/dist/extensions/migrate-lock.d.ts +3 -4
  201. package/dist/extensions/org-config.controller.d.ts +1 -1
  202. package/dist/extensions/org-config.controller.js +8 -5
  203. package/dist/extensions/org-config.d.ts +48 -46
  204. package/dist/extensions/org-config.js +284 -226
  205. package/dist/extensions/registry.d.ts +50 -2
  206. package/dist/extensions/registry.js +89 -4
  207. package/dist/extensions/sources.d.ts +12 -8
  208. package/dist/extensions/sources.js +34 -13
  209. package/dist/files/files.module.d.ts +3 -0
  210. package/dist/files/files.module.js +22 -0
  211. package/dist/files/previewers.controller.d.ts +7 -2
  212. package/dist/files/previewers.controller.js +17 -9
  213. package/dist/files/previewers.d.ts +13 -18
  214. package/dist/files/previewers.js +83 -36
  215. package/dist/http/adapter.d.ts +3 -0
  216. package/dist/http/adapter.js +25 -0
  217. package/dist/http/api.module.d.ts +3 -110
  218. package/dist/http/api.module.js +47 -355
  219. package/dist/http/app.d.ts +11 -15
  220. package/dist/http/app.js +17 -62
  221. package/dist/http/error-filter.module.d.ts +5 -0
  222. package/dist/http/error-filter.module.js +18 -0
  223. package/dist/http/error.filter.js +2 -2
  224. package/dist/identity/accounts.d.ts +82 -29
  225. package/dist/identity/accounts.js +294 -175
  226. package/dist/identity/api-tokens.d.ts +11 -7
  227. package/dist/identity/api-tokens.js +71 -44
  228. package/dist/identity/audit.d.ts +7 -4
  229. package/dist/identity/audit.js +5 -1
  230. package/dist/identity/auth.controller.d.ts +11 -10
  231. package/dist/identity/auth.controller.js +31 -25
  232. package/dist/identity/auth.guard.d.ts +3 -3
  233. package/dist/identity/auth.guard.js +6 -4
  234. package/dist/identity/binding.d.ts +9 -11
  235. package/dist/identity/binding.js +41 -13
  236. package/dist/identity/enterprise-admin.d.ts +18 -12
  237. package/dist/identity/enterprise-admin.js +67 -13
  238. package/dist/identity/external-identity-lock.d.ts +17 -0
  239. package/dist/identity/external-identity-lock.js +39 -0
  240. package/dist/identity/external.d.ts +19 -15
  241. package/dist/identity/external.js +163 -125
  242. package/dist/identity/identity.module.d.ts +6 -0
  243. package/dist/identity/identity.module.js +56 -0
  244. package/dist/identity/me.controller.d.ts +16 -15
  245. package/dist/identity/me.controller.js +37 -31
  246. package/dist/identity/sessions.d.ts +12 -10
  247. package/dist/identity/sessions.js +74 -42
  248. package/dist/identity/settings.d.ts +20 -14
  249. package/dist/identity/settings.js +85 -57
  250. package/dist/identity/sso.controller.d.ts +7 -7
  251. package/dist/identity/sso.controller.js +13 -9
  252. package/dist/identity/sso.d.ts +9 -12
  253. package/dist/identity/sso.js +54 -24
  254. package/dist/inbox/inbox.module.d.ts +3 -0
  255. package/dist/inbox/inbox.module.js +22 -0
  256. package/dist/inbox/inbox.service.d.ts +7 -9
  257. package/dist/inbox/inbox.service.js +32 -11
  258. package/dist/index.d.ts +16 -11
  259. package/dist/index.js +9 -6
  260. package/dist/infra/cache/cache.module.d.ts +3 -0
  261. package/dist/infra/cache/cache.module.js +16 -0
  262. package/dist/infra/cache/cache.service.d.ts +21 -0
  263. package/dist/infra/cache/cache.service.js +80 -0
  264. package/dist/infra/cache/cacheable.decorator.d.ts +32 -0
  265. package/dist/infra/cache/cacheable.decorator.js +83 -0
  266. package/dist/infra/cli/kernel-cli.module.d.ts +66 -0
  267. package/dist/infra/cli/kernel-cli.module.js +165 -0
  268. package/dist/infra/close-within.d.ts +15 -0
  269. package/dist/infra/close-within.js +36 -0
  270. package/dist/infra/config/config.module.d.ts +13 -0
  271. package/dist/infra/config/config.module.js +39 -0
  272. package/dist/infra/config/kernel-config.service.d.ts +25 -0
  273. package/dist/infra/config/kernel-config.service.js +126 -0
  274. package/dist/infra/database/after-commit.d.ts +6 -0
  275. package/dist/infra/database/after-commit.js +9 -0
  276. package/dist/infra/database/database.module.d.ts +25 -0
  277. package/dist/infra/database/database.module.js +90 -0
  278. package/dist/infra/database/kernel-db.d.ts +22 -0
  279. package/dist/infra/database/kernel-db.js +65 -0
  280. package/dist/infra/database/transaction-host.d.ts +50 -0
  281. package/dist/infra/database/transaction-host.js +125 -0
  282. package/dist/infra/database/transactional.decorator.d.ts +15 -0
  283. package/dist/infra/database/transactional.decorator.js +27 -0
  284. package/dist/infra/database/xact-lock.d.ts +17 -0
  285. package/dist/infra/database/xact-lock.js +43 -0
  286. package/dist/infra/events/kernel-events.d.ts +96 -0
  287. package/dist/infra/events/kernel-events.js +65 -0
  288. package/dist/infra/health/health.controller.d.ts +26 -0
  289. package/dist/infra/health/health.controller.js +104 -0
  290. package/dist/infra/health/health.module.d.ts +9 -0
  291. package/dist/infra/health/health.module.js +24 -0
  292. package/dist/infra/health/health.options.d.ts +10 -0
  293. package/dist/infra/health/health.options.js +15 -0
  294. package/dist/infra/health/shutdown-state.d.ts +6 -0
  295. package/dist/infra/health/shutdown-state.js +2 -0
  296. package/dist/infra/lifecycle/graceful-shutdown.module.d.ts +6 -0
  297. package/dist/infra/lifecycle/graceful-shutdown.module.js +23 -0
  298. package/dist/infra/lifecycle/graceful-shutdown.service.d.ts +70 -0
  299. package/dist/infra/lifecycle/graceful-shutdown.service.js +135 -0
  300. package/dist/infra/lifecycle/process-guards.d.ts +52 -0
  301. package/dist/infra/lifecycle/process-guards.js +86 -0
  302. package/dist/infra/lifecycle/shutdown-signals.d.ts +30 -0
  303. package/dist/infra/lifecycle/shutdown-signals.js +48 -0
  304. package/dist/infra/lock/key-template.d.ts +13 -0
  305. package/dist/infra/lock/key-template.js +46 -0
  306. package/dist/infra/lock/lock.module.d.ts +3 -0
  307. package/dist/infra/lock/lock.module.js +16 -0
  308. package/dist/infra/lock/lock.service.d.ts +120 -0
  309. package/dist/infra/lock/lock.service.js +343 -0
  310. package/dist/infra/lock/shared-lease.d.ts +44 -0
  311. package/dist/infra/lock/shared-lease.js +121 -0
  312. package/dist/infra/lock/with-lock.decorator.d.ts +28 -0
  313. package/dist/infra/lock/with-lock.decorator.js +49 -0
  314. package/dist/infra/logging/logging.module.d.ts +16 -0
  315. package/dist/infra/logging/logging.module.js +34 -0
  316. package/dist/infra/queue/configured-processor.d.ts +18 -0
  317. package/dist/infra/queue/configured-processor.js +23 -0
  318. package/dist/infra/queue/job-failure.d.ts +18 -0
  319. package/dist/infra/queue/job-failure.js +26 -0
  320. package/dist/infra/queue/queue-shutdown.d.ts +27 -0
  321. package/dist/infra/queue/queue-shutdown.js +81 -0
  322. package/dist/infra/queue/queue.module.d.ts +16 -0
  323. package/dist/infra/queue/queue.module.js +61 -0
  324. package/dist/infra/queue/redis-connection.d.ts +7 -0
  325. package/dist/infra/queue/redis-connection.js +18 -0
  326. package/dist/infra/queue/retired-schedulers.d.ts +7 -0
  327. package/dist/infra/queue/retired-schedulers.js +9 -0
  328. package/dist/infra/queue/run-job.d.ts +16 -0
  329. package/dist/infra/queue/run-job.js +19 -0
  330. package/dist/infra/redis/redis.module.d.ts +24 -0
  331. package/dist/infra/redis/redis.module.js +87 -0
  332. package/dist/infra/schedule/cron-tick.d.ts +12 -0
  333. package/dist/infra/schedule/cron-tick.js +25 -0
  334. package/dist/infra/schedule/locked-cron.decorator.d.ts +27 -0
  335. package/dist/infra/schedule/locked-cron.decorator.js +53 -0
  336. package/dist/infra/schedule/locked-interval.d.ts +69 -0
  337. package/dist/infra/schedule/locked-interval.js +190 -0
  338. package/dist/infra/schedule/locked-tick.d.ts +90 -0
  339. package/dist/infra/schedule/locked-tick.js +137 -0
  340. package/dist/infra/schedule/schedule.module.d.ts +8 -0
  341. package/dist/infra/schedule/schedule.module.js +27 -0
  342. package/dist/infra/schedule/scheduled-runs.d.ts +69 -0
  343. package/dist/infra/schedule/scheduled-runs.js +163 -0
  344. package/dist/infra/swagger/swagger.d.ts +16 -0
  345. package/dist/infra/swagger/swagger.js +31 -0
  346. package/dist/infra/throttler/credential-throttler.d.ts +35 -0
  347. package/dist/infra/throttler/credential-throttler.js +77 -0
  348. package/dist/infra/throttler/named-throttlers.d.ts +31 -0
  349. package/dist/infra/throttler/named-throttlers.js +119 -0
  350. package/dist/infra/throttler/redis-throttler-storage.d.ts +38 -0
  351. package/dist/infra/throttler/redis-throttler-storage.js +130 -0
  352. package/dist/infra/throttler/throttler.guard.d.ts +23 -0
  353. package/dist/infra/throttler/throttler.guard.js +68 -0
  354. package/dist/infra/throttler/throttler.module.d.ts +15 -0
  355. package/dist/infra/throttler/throttler.module.js +53 -0
  356. package/dist/infra/tokens.d.ts +15 -0
  357. package/dist/infra/tokens.js +15 -0
  358. package/dist/infra/validation/create-zod-dto.d.ts +23 -0
  359. package/dist/infra/validation/create-zod-dto.js +35 -0
  360. package/dist/infra/validation/parse-with-zod.d.ts +7 -0
  361. package/dist/infra/validation/parse-with-zod.js +12 -0
  362. package/dist/infra/validation/validation.module.d.ts +3 -0
  363. package/dist/infra/validation/validation.module.js +16 -0
  364. package/dist/infra/validation/zod-params.d.ts +7 -0
  365. package/dist/infra/validation/zod-params.js +42 -0
  366. package/dist/infra/validation/zod-validation.pipe.d.ts +11 -0
  367. package/dist/infra/validation/zod-validation.pipe.js +31 -0
  368. package/dist/kernel.d.ts +9 -244
  369. package/dist/kernel.js +8 -1305
  370. package/dist/kernel.module.d.ts +17 -0
  371. package/dist/kernel.module.js +136 -0
  372. package/dist/lifecycle/kernel-lifecycle.d.ts +140 -0
  373. package/dist/lifecycle/kernel-lifecycle.js +451 -0
  374. package/dist/lifecycle/tokens.d.ts +3 -0
  375. package/dist/lifecycle/tokens.js +3 -0
  376. package/dist/log-context.d.ts +2 -0
  377. package/dist/log-context.js +4 -0
  378. package/dist/models/models.module.d.ts +3 -0
  379. package/dist/models/models.module.js +24 -0
  380. package/dist/models/prices.d.ts +8 -2
  381. package/dist/models/prices.js +65 -37
  382. package/dist/models/purposes.controller.d.ts +1 -1
  383. package/dist/models/purposes.controller.js +5 -6
  384. package/dist/models/purposes.d.ts +35 -13
  385. package/dist/models/purposes.js +101 -51
  386. package/dist/orgs/directory-sync.controller.d.ts +1 -1
  387. package/dist/orgs/directory-sync.controller.js +2 -2
  388. package/dist/orgs/directory-sync.d.ts +61 -31
  389. package/dist/orgs/directory-sync.js +212 -125
  390. package/dist/orgs/invitations.controller.d.ts +8 -8
  391. package/dist/orgs/invitations.controller.js +27 -26
  392. package/dist/orgs/invitations.service.d.ts +12 -9
  393. package/dist/orgs/invitations.service.js +130 -92
  394. package/dist/orgs/job-ids.d.ts +8 -0
  395. package/dist/orgs/job-ids.js +8 -0
  396. package/dist/orgs/members.service.d.ts +19 -12
  397. package/dist/orgs/members.service.js +161 -117
  398. package/dist/orgs/offboarding.d.ts +54 -57
  399. package/dist/orgs/offboarding.js +161 -71
  400. package/dist/orgs/org-lock.d.ts +28 -19
  401. package/dist/orgs/org-lock.js +81 -35
  402. package/dist/orgs/org.guard.d.ts +1 -1
  403. package/dist/orgs/org.guard.js +2 -2
  404. package/dist/orgs/orgs.controller.d.ts +13 -13
  405. package/dist/orgs/orgs.controller.js +29 -17
  406. package/dist/orgs/orgs.module.d.ts +6 -0
  407. package/dist/orgs/orgs.module.js +68 -0
  408. package/dist/orgs/orgs.service.d.ts +30 -19
  409. package/dist/orgs/orgs.service.js +139 -86
  410. package/dist/orgs/settings.controller.d.ts +1 -1
  411. package/dist/orgs/settings.controller.js +8 -6
  412. package/dist/orgs/settings.service.d.ts +14 -8
  413. package/dist/orgs/settings.service.js +75 -46
  414. package/dist/overrides.d.ts +56 -0
  415. package/dist/overrides.js +30 -0
  416. package/dist/roles/gateway-role.d.ts +43 -0
  417. package/dist/roles/gateway-role.js +98 -0
  418. package/dist/roles/gateway.module.d.ts +8 -0
  419. package/dist/roles/gateway.module.js +28 -0
  420. package/dist/roles/worker-role.d.ts +63 -0
  421. package/dist/roles/worker-role.js +144 -0
  422. package/dist/roles/worker.module.d.ts +14 -0
  423. package/dist/roles/worker.module.js +90 -0
  424. package/dist/runtime/abort.js +19 -2
  425. package/dist/runtime/checkpointer.d.ts +8 -3
  426. package/dist/runtime/checkpointer.js +87 -55
  427. package/dist/runtime/conversation-lock.d.ts +20 -11
  428. package/dist/runtime/conversation-lock.js +62 -72
  429. package/dist/runtime/hook-calls.d.ts +3 -3
  430. package/dist/runtime/hook-calls.js +1 -6
  431. package/dist/runtime/job-ids.d.ts +10 -0
  432. package/dist/runtime/job-ids.js +10 -0
  433. package/dist/runtime/langgraph-loop.js +1 -1
  434. package/dist/runtime/loop.d.ts +7 -0
  435. package/dist/runtime/loop.js +14 -0
  436. package/dist/runtime/maintenance-queue.d.ts +10 -0
  437. package/dist/runtime/maintenance-queue.js +10 -0
  438. package/dist/runtime/maintenance.d.ts +45 -74
  439. package/dist/runtime/maintenance.js +139 -137
  440. package/dist/runtime/model-call.d.ts +7 -4
  441. package/dist/runtime/model-call.js +24 -57
  442. package/dist/runtime/providers.d.ts +17 -6
  443. package/dist/runtime/providers.js +66 -25
  444. package/dist/runtime/quota.d.ts +17 -3
  445. package/dist/runtime/quota.js +27 -2
  446. package/dist/runtime/retired-schedulers.d.ts +7 -0
  447. package/dist/runtime/retired-schedulers.js +31 -0
  448. package/dist/runtime/run-control.d.ts +33 -0
  449. package/dist/runtime/run-control.js +77 -0
  450. package/dist/runtime/run-finish.d.ts +26 -17
  451. package/dist/runtime/run-finish.js +98 -51
  452. package/dist/runtime/run-jobs.d.ts +48 -0
  453. package/dist/runtime/run-jobs.js +95 -0
  454. package/dist/runtime/run-processors.d.ts +60 -0
  455. package/dist/runtime/run-processors.js +185 -0
  456. package/dist/runtime/run-queue.d.ts +32 -57
  457. package/dist/runtime/run-queue.js +291 -295
  458. package/dist/runtime/run-steps.d.ts +39 -0
  459. package/dist/runtime/run-steps.js +96 -0
  460. package/dist/runtime/run-worker.d.ts +121 -75
  461. package/dist/runtime/run-worker.js +340 -226
  462. package/dist/runtime/runtime.module.d.ts +10 -0
  463. package/dist/runtime/runtime.module.js +112 -0
  464. package/dist/runtime/step-log.d.ts +40 -0
  465. package/dist/runtime/step-log.js +94 -0
  466. package/dist/runtime/stream.controller.d.ts +5 -8
  467. package/dist/runtime/stream.controller.js +14 -12
  468. package/dist/runtime/stream.d.ts +24 -6
  469. package/dist/runtime/stream.js +78 -7
  470. package/dist/runtime/subagents/child.d.ts +3 -44
  471. package/dist/runtime/subagents/child.js +0 -79
  472. package/dist/runtime/subagents/definition.d.ts +4 -4
  473. package/dist/runtime/subagents/definition.js +2 -2
  474. package/dist/runtime/subagents/dispatch.d.ts +87 -6
  475. package/dist/runtime/subagents/dispatch.js +135 -140
  476. package/dist/runtime/subagents/limits.d.ts +9 -4
  477. package/dist/runtime/subagents/limits.js +4 -2
  478. package/dist/runtime/subagents/org-agents.d.ts +4 -4
  479. package/dist/runtime/subagents/org-agents.js +1 -1
  480. package/dist/runtime/subagents/progress.d.ts +2 -2
  481. package/dist/runtime/subagents/roster.d.ts +3 -3
  482. package/dist/runtime/subagents/roster.js +1 -1
  483. package/dist/runtime/subagents/skill-fork.d.ts +6 -7
  484. package/dist/runtime/subagents/skill-fork.js +16 -5
  485. package/dist/runtime/subagents/subagents.service.d.ts +40 -0
  486. package/dist/runtime/subagents/subagents.service.js +101 -0
  487. package/dist/runtime/usage-report.d.ts +94 -52
  488. package/dist/runtime/usage-report.js +200 -100
  489. package/dist/runtime/waits.d.ts +125 -57
  490. package/dist/runtime/waits.js +431 -208
  491. package/dist/sandbox/job-ids.d.ts +10 -0
  492. package/dist/sandbox/job-ids.js +10 -0
  493. package/dist/sandbox/jobs.d.ts +41 -0
  494. package/dist/sandbox/jobs.js +113 -0
  495. package/dist/sandbox/leases.d.ts +39 -31
  496. package/dist/sandbox/leases.js +117 -257
  497. package/dist/sandbox/providers.d.ts +19 -0
  498. package/dist/sandbox/providers.js +38 -0
  499. package/dist/sandbox/sandbox.module.d.ts +8 -0
  500. package/dist/sandbox/sandbox.module.js +30 -0
  501. package/dist/sandbox/sandbox.service.d.ts +24 -29
  502. package/dist/sandbox/sandbox.service.js +106 -75
  503. package/dist/skills/catalog.d.ts +33 -20
  504. package/dist/skills/catalog.js +96 -53
  505. package/dist/skills/changes.controller.d.ts +4 -4
  506. package/dist/skills/changes.controller.js +15 -9
  507. package/dist/skills/changes.service.d.ts +28 -18
  508. package/dist/skills/changes.service.js +421 -364
  509. package/dist/skills/invocable.controller.d.ts +1 -1
  510. package/dist/skills/invocable.controller.js +8 -5
  511. package/dist/skills/invoke.d.ts +16 -15
  512. package/dist/skills/invoke.js +48 -17
  513. package/dist/skills/skills.controller.d.ts +1 -1
  514. package/dist/skills/skills.controller.js +11 -6
  515. package/dist/skills/skills.module.d.ts +6 -0
  516. package/dist/skills/skills.module.js +30 -0
  517. package/dist/skills/skills.service.d.ts +47 -30
  518. package/dist/skills/skills.service.js +221 -158
  519. package/dist/storage/job-ids.d.ts +6 -0
  520. package/dist/storage/job-ids.js +6 -0
  521. package/dist/storage/purge.d.ts +22 -7
  522. package/dist/storage/purge.js +55 -3
  523. package/dist/storage/storage.module.d.ts +6 -0
  524. package/dist/storage/storage.module.js +23 -0
  525. package/dist/storage/storage.service.d.ts +18 -4
  526. package/dist/storage/storage.service.js +44 -3
  527. package/dist/tools/approvals.controller.d.ts +1 -1
  528. package/dist/tools/approvals.controller.js +12 -8
  529. package/dist/tools/approvals.service.d.ts +27 -25
  530. package/dist/tools/approvals.service.js +324 -258
  531. package/dist/tools/breaker.d.ts +2 -2
  532. package/dist/tools/breaker.js +21 -3
  533. package/dist/tools/builtins/ask-user.d.ts +2 -2
  534. package/dist/tools/builtins/ask-user.js +1 -1
  535. package/dist/tools/builtins/builtin-tools.d.ts +21 -0
  536. package/dist/tools/builtins/builtin-tools.js +80 -0
  537. package/dist/tools/builtins/read-tool-output.d.ts +2 -2
  538. package/dist/tools/builtins/read-tool-output.js +1 -1
  539. package/dist/tools/builtins/sandbox/bash.js +2 -2
  540. package/dist/tools/builtins/sandbox/common.d.ts +2 -1
  541. package/dist/tools/builtins/sandbox/deliver.js +2 -2
  542. package/dist/tools/builtins/sandbox/edit.js +1 -1
  543. package/dist/tools/builtins/sandbox/glob.js +2 -2
  544. package/dist/tools/builtins/sandbox/grep.js +2 -2
  545. package/dist/tools/builtins/sandbox/read.js +1 -1
  546. package/dist/tools/builtins/sandbox/write.js +1 -1
  547. package/dist/tools/builtins/skill-load.d.ts +3 -3
  548. package/dist/tools/builtins/skill-load.js +1 -1
  549. package/dist/tools/canonical-json.d.ts +6 -0
  550. package/dist/tools/canonical-json.js +16 -0
  551. package/dist/tools/connector-content.controller.d.ts +1 -1
  552. package/dist/tools/connector-content.controller.js +11 -6
  553. package/dist/tools/connector-content.d.ts +12 -15
  554. package/dist/tools/connector-content.js +53 -18
  555. package/dist/tools/connectors.controller.d.ts +1 -1
  556. package/dist/tools/connectors.controller.js +21 -10
  557. package/dist/tools/connectors.service.d.ts +31 -13
  558. package/dist/tools/connectors.service.js +434 -344
  559. package/dist/tools/credentials.d.ts +17 -20
  560. package/dist/tools/credentials.js +55 -34
  561. package/dist/tools/drift.d.ts +29 -41
  562. package/dist/tools/drift.js +111 -79
  563. package/dist/tools/info.d.ts +12 -9
  564. package/dist/tools/info.js +33 -7
  565. package/dist/tools/job-ids.d.ts +13 -0
  566. package/dist/tools/job-ids.js +15 -0
  567. package/dist/tools/jobs.d.ts +24 -0
  568. package/dist/tools/jobs.js +69 -0
  569. package/dist/tools/oauth/flow-paths.d.ts +16 -0
  570. package/dist/tools/oauth/flow-paths.js +38 -0
  571. package/dist/tools/oauth/flow.d.ts +30 -30
  572. package/dist/tools/oauth/flow.js +109 -81
  573. package/dist/tools/oauth/oauth.controller.d.ts +3 -3
  574. package/dist/tools/oauth/oauth.controller.js +12 -9
  575. package/dist/tools/oauth/tokens.d.ts +11 -3
  576. package/dist/tools/oauth/tokens.js +15 -14
  577. package/dist/tools/outputs.d.ts +13 -4
  578. package/dist/tools/outputs.js +47 -3
  579. package/dist/tools/pipeline.d.ts +62 -46
  580. package/dist/tools/pipeline.js +145 -64
  581. package/dist/tools/policy.d.ts +2 -2
  582. package/dist/tools/questions.controller.d.ts +1 -1
  583. package/dist/tools/questions.controller.js +8 -5
  584. package/dist/tools/questions.service.d.ts +25 -24
  585. package/dist/tools/questions.service.js +201 -142
  586. package/dist/tools/registry.d.ts +30 -20
  587. package/dist/tools/registry.js +73 -37
  588. package/dist/tools/specs.d.ts +5 -4
  589. package/dist/tools/specs.js +3 -1
  590. package/dist/tools/tools.module.d.ts +10 -0
  591. package/dist/tools/tools.module.js +91 -0
  592. package/dist/ui/call-extension.d.ts +16 -0
  593. package/dist/ui/call-extension.js +38 -0
  594. package/dist/ui/embed-token.d.ts +9 -5
  595. package/dist/ui/embed-token.js +34 -6
  596. package/dist/ui/ui-stream.d.ts +22 -17
  597. package/dist/ui/ui-stream.js +72 -12
  598. package/dist/ui/ui.module.d.ts +7 -0
  599. package/dist/ui/ui.module.js +28 -0
  600. package/dist/ui/views.controller.d.ts +14 -12
  601. package/dist/ui/views.controller.js +32 -25
  602. package/dist/ui/views.d.ts +9 -57
  603. package/dist/ui/views.js +43 -45
  604. package/package.json +9 -2
  605. package/dist/http/health.controller.d.ts +0 -26
  606. package/dist/http/health.controller.js +0 -79
  607. package/dist/http/tokens.d.ts +0 -131
  608. package/dist/http/tokens.js +0 -131
  609. package/dist/http/zod.pipe.d.ts +0 -8
  610. package/dist/http/zod.pipe.js +0 -14
  611. package/dist/identity/rate-limit.d.ts +0 -55
  612. package/dist/identity/rate-limit.js +0 -121
  613. package/dist/sandbox/lifecycle.d.ts +0 -21
  614. package/dist/sandbox/lifecycle.js +0 -68
  615. /package/dist/http/{gateway.module.d.ts → gateway-routes.d.ts} +0 -0
  616. /package/dist/http/{gateway.module.js → gateway-routes.js} +0 -0
@@ -0,0 +1,343 @@
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";
11
+ import { Inject, Injectable } from "@nestjs/common";
12
+ import { sql } from "kysely";
13
+ import { KernelDb } from "../infra/database/kernel-db.js";
14
+ import { TransactionHost } from "../infra/database/transaction-host.js";
15
+ import { Transactional } from "../infra/database/transactional.decorator.js";
16
+ import { RunControl as RunControlService } from "../runtime/run-control.js";
17
+ import { notInvocable } from "../skills/invoke.js";
18
+ import { ConversationsService, } from "./conversations.service.js";
19
+ import { EventLog, payloadJson } from "./event-log.js";
20
+ import { userMessageIdemKey } from "./idem-keys.js";
21
+ import { alreadySent, appendQueuedIn, COLUMNS, checkText, itemNotFound, noNul, QUEUE_MAX_ITEMS, queuedSkillBlocked, queueFull, storedSkill, toItem, unpauseIfEmpty, } from "./queue.js";
22
+ /**
23
+ * The queue API (owner only, as the conversation): list, add, edit the text, delete, send now and
24
+ * resume. Every change publishes `changed: queue`.
25
+ */
26
+ let ConversationQueue = class ConversationQueue {
27
+ db;
28
+ eventLog;
29
+ conversations;
30
+ runs;
31
+ txHost;
32
+ constructor(db, eventLog, conversations,
33
+ /** Starts the conversation's next run (`ensureRun`). */
34
+ runs, txHost) {
35
+ this.db = db;
36
+ this.eventLog = eventLog;
37
+ this.conversations = conversations;
38
+ this.runs = runs;
39
+ this.txHost = txHost;
40
+ }
41
+ async list(orgId, conversationId, accountId) {
42
+ await this.conversations.get(orgId, conversationId, accountId);
43
+ return this.listIn(conversationId);
44
+ }
45
+ async listIn(conversationId) {
46
+ const t = this.db.db;
47
+ const conv = await t
48
+ .selectFrom("conversations")
49
+ .select(["queue_paused", "queue_pause_reason"])
50
+ .where("id", "=", conversationId)
51
+ .executeTakeFirstOrThrow();
52
+ const rows = await t
53
+ .selectFrom("conversation_queue")
54
+ .select(COLUMNS)
55
+ .where("conversation_id", "=", conversationId)
56
+ .orderBy("position")
57
+ .execute();
58
+ const reason = conv.queue_paused ? conv.queue_pause_reason : null;
59
+ return {
60
+ items: rows.map(toItem),
61
+ paused: conv.queue_paused,
62
+ ...(reason !== null && { pauseReason: reason }),
63
+ };
64
+ }
65
+ /**
66
+ * Queues a message. `@` resources are read now with the caller's credentials and stored with the
67
+ * item, and uploaded files are bound to the conversation now, so sending later needs nobody's
68
+ * credentials. The same `clientMessageId` again returns the queued item (`created: false`), or,
69
+ * when it was already sent, the sent `user_message` with `item: null`. Then `ensureRun`: on an
70
+ * idle conversation the item goes out at once.
71
+ */
72
+ async add(orgId, conversationId, accountId, input) {
73
+ const conv = await this.conversations.writable(orgId, conversationId, accountId);
74
+ const files = input.files ?? [];
75
+ checkText(input.text, files.length, input.attachments?.length ?? 0, input.skill !== undefined);
76
+ const prior = await this.prior(conversationId, input.clientMessageId);
77
+ if (prior)
78
+ return prior;
79
+ // a cheap unlocked check first, so a full queue never reads `@` resources (slow, remote,
80
+ // credentialed); the locked check below stays authoritative
81
+ const { n: queued } = await this.db
82
+ .selectFrom("conversation_queue")
83
+ .select((eb) => eb.fn.countAll().as("n"))
84
+ .where("conversation_id", "=", conversationId)
85
+ .executeTakeFirstOrThrow();
86
+ if (Number(queued) >= QUEUE_MAX_ITEMS)
87
+ throw queueFull();
88
+ await this.conversations.checkPick(orgId, conv, accountId, input);
89
+ // a skill invocation is rendered now, like the `@` resources (spec §4.5)
90
+ const invoked = await this.conversations.prepareQueuedSkill(orgId, conv, accountId, input);
91
+ const extra = await this.conversations.resolveExtra(orgId, accountId, input);
92
+ const skill = invoked === undefined || input.skill === undefined
93
+ ? undefined
94
+ : storedSkill(input.skill.name, invoked);
95
+ const out = await this.addIn(orgId, conversationId, accountId, input, files, skill, extra);
96
+ if (out === null) {
97
+ return ((await this.prior(conversationId, input.clientMessageId)) ?? { item: null, created: false });
98
+ }
99
+ if (out.created) {
100
+ await this.eventLog.publishChanged(conversationId, "queue");
101
+ await this.runs.ensureRun(conversationId);
102
+ }
103
+ return { item: toItem(out.row), created: out.created };
104
+ }
105
+ // its own transaction: the caller notifies and publishes after the commit
106
+ async addIn(orgId, conversationId, accountId, input, files, skill, extra) {
107
+ const t = this.db.db;
108
+ await t
109
+ .selectFrom("conversations")
110
+ .select("id")
111
+ .where("id", "=", conversationId)
112
+ .forUpdate()
113
+ .executeTakeFirstOrThrow();
114
+ const existing = await t
115
+ .selectFrom("conversation_queue")
116
+ .select(COLUMNS)
117
+ .where("conversation_id", "=", conversationId)
118
+ .where("client_message_id", "=", input.clientMessageId)
119
+ .executeTakeFirst();
120
+ if (existing)
121
+ return { row: existing, created: false };
122
+ if (await alreadySent(t, conversationId, input.clientMessageId))
123
+ return null;
124
+ const { n, last } = await t
125
+ .selectFrom("conversation_queue")
126
+ .select((eb) => [
127
+ eb.fn.countAll().as("n"),
128
+ eb.fn.max("position").as("last"),
129
+ ])
130
+ .where("conversation_id", "=", conversationId)
131
+ .executeTakeFirstOrThrow();
132
+ if (Number(n) >= QUEUE_MAX_ITEMS)
133
+ throw queueFull();
134
+ const blocks = await this.conversations.bindIn(orgId, conversationId, accountId, files);
135
+ const fileMeta = blocks.flatMap((b) => (b.type === "image" || b.type === "document") && b.source.kind === "ref"
136
+ ? [{ attachmentId: b.source.attachmentId, name: b.name ?? "", mediaType: b.mediaType }]
137
+ : []);
138
+ const row = await t
139
+ .insertInto("conversation_queue")
140
+ .values({
141
+ id: randomUUID(),
142
+ conversation_id: conversationId,
143
+ account_id: accountId,
144
+ position: last === null ? 1 : Number(last) + 1,
145
+ text: noNul(input.text),
146
+ content: payloadJson([
147
+ ...(skill === undefined ? [] : [skill.first]),
148
+ ...extra.blocks,
149
+ ...blocks,
150
+ ]),
151
+ attachments: payloadJson(extra.attachments),
152
+ files: JSON.stringify(fileMeta),
153
+ client_message_id: input.clientMessageId,
154
+ model: input.model === undefined ? null : JSON.stringify(input.model),
155
+ effort: input.effort ?? null,
156
+ skill: skill?.skill ?? null,
157
+ })
158
+ .returning(COLUMNS)
159
+ .executeTakeFirstOrThrow();
160
+ return { row, created: true };
161
+ }
162
+ /**
163
+ * Changes a queued item's text (its resources and files stay as queued). A skill invocation's
164
+ * text is its arguments: the skill is rendered again with them now.
165
+ */
166
+ async edit(orgId, conversationId, accountId, itemId, text) {
167
+ const conv = await this.conversations.writable(orgId, conversationId, accountId);
168
+ const before = await this.db
169
+ .selectFrom("conversation_queue")
170
+ .select("skill")
171
+ .where("id", "=", itemId)
172
+ .where("conversation_id", "=", conversationId)
173
+ .executeTakeFirst();
174
+ if (!before)
175
+ throw itemNotFound();
176
+ const was = before.skill;
177
+ const invoked = was === null
178
+ ? undefined
179
+ : await this.conversations.prepareQueuedSkill(orgId, conv, accountId, {
180
+ skill: { name: was.invokedAs },
181
+ text,
182
+ });
183
+ const row = await this.editIn(conversationId, itemId, text, invoked);
184
+ await this.eventLog.publishChanged(conversationId, "queue");
185
+ return toItem(row);
186
+ }
187
+ // its own transaction: the caller notifies and publishes after the commit
188
+ async editIn(conversationId, itemId, text, invoked) {
189
+ const t = this.db.db;
190
+ const cur = await t
191
+ .selectFrom("conversation_queue")
192
+ .select(["attachments", "files", "content", "skill"])
193
+ .where("id", "=", itemId)
194
+ .where("conversation_id", "=", conversationId)
195
+ .forUpdate()
196
+ .executeTakeFirst();
197
+ if (!cur)
198
+ throw itemNotFound();
199
+ const skill = cur.skill;
200
+ checkText(text, cur.files.length, cur.attachments.length, skill !== null);
201
+ // an invocation's first block is its rendered text: replace it and the record
202
+ const stored = skill === null || invoked === undefined ? undefined : storedSkill(skill.invokedAs, invoked);
203
+ return t
204
+ .updateTable("conversation_queue")
205
+ .set({
206
+ text: noNul(text),
207
+ updated_at: sql `now()`,
208
+ ...(stored !== undefined && {
209
+ skill: stored.skill,
210
+ content: payloadJson([stored.first, ...cur.content.slice(1)]),
211
+ }),
212
+ })
213
+ .where("id", "=", itemId)
214
+ .returning(COLUMNS)
215
+ .executeTakeFirstOrThrow();
216
+ }
217
+ async remove(orgId, conversationId, accountId, itemId) {
218
+ await this.conversations.writable(orgId, conversationId, accountId);
219
+ await this.removeIn(conversationId, itemId);
220
+ await this.eventLog.publishChanged(conversationId, "queue");
221
+ }
222
+ // its own transaction: the caller notifies and publishes after the commit
223
+ async removeIn(conversationId, itemId) {
224
+ const t = this.db.db;
225
+ await this.lockConversation(conversationId);
226
+ const gone = await t
227
+ .deleteFrom("conversation_queue")
228
+ .where("id", "=", itemId)
229
+ .where("conversation_id", "=", conversationId)
230
+ .returning("id")
231
+ .executeTakeFirst();
232
+ if (!gone)
233
+ throw itemNotFound();
234
+ await unpauseIfEmpty(t, conversationId);
235
+ }
236
+ /**
237
+ * Sends a queued item now: it leaves the queue and is posted as a user message in the same
238
+ * transaction (an interjection when a run is active; the items before it keep their place).
239
+ * Racing the dispatcher, exactly one of them takes the item; the loser sees it gone (404).
240
+ */
241
+ async sendNow(orgId, conversationId, accountId, itemId) {
242
+ await this.conversations.writable(orgId, conversationId, accountId);
243
+ const { event, fresh, switched } = await this.sendNowIn(conversationId, itemId);
244
+ if (fresh)
245
+ await this.eventLog.notify(conversationId, event.seq);
246
+ if (switched)
247
+ await this.eventLog.publishChanged(conversationId, "selection");
248
+ await this.eventLog.publishChanged(conversationId, "queue");
249
+ await this.runs.ensureRun(conversationId);
250
+ return event;
251
+ }
252
+ // its own transaction: the caller notifies and publishes after the commit
253
+ async sendNowIn(conversationId, itemId) {
254
+ const t = this.db.db;
255
+ await this.lockConversation(conversationId);
256
+ const head = await t
257
+ .selectFrom("conversation_queue")
258
+ .select(["skill", "client_message_id"])
259
+ .where("id", "=", itemId)
260
+ .where("conversation_id", "=", conversationId)
261
+ .executeTakeFirst();
262
+ if (!head)
263
+ throw itemNotFound();
264
+ // the skill is checked again, as at dispatch; a refused item stays queued
265
+ if (!(await alreadySent(t, conversationId, head.client_message_id))) {
266
+ const blocked = await queuedSkillBlocked(t, conversationId, head);
267
+ if (blocked !== null) {
268
+ throw notInvocable(blocked, head.skill.invokedAs);
269
+ }
270
+ }
271
+ const row = await t
272
+ .deleteFrom("conversation_queue")
273
+ .where("id", "=", itemId)
274
+ .where("conversation_id", "=", conversationId)
275
+ .returning(COLUMNS)
276
+ .executeTakeFirst();
277
+ if (!row)
278
+ throw itemNotFound();
279
+ const sent = await alreadySent(t, conversationId, row.client_message_id);
280
+ const out = await appendQueuedIn(t, this.eventLog, conversationId, row);
281
+ await unpauseIfEmpty(t, conversationId);
282
+ return { ...out, fresh: !sent };
283
+ }
284
+ /** "Continue sending": clears the pause and lets `ensureRun` send the head item. */
285
+ async resume(orgId, conversationId, accountId) {
286
+ await this.conversations.writable(orgId, conversationId, accountId);
287
+ await this.db
288
+ .updateTable("conversations")
289
+ .set({ queue_paused: false, queue_pause_reason: null })
290
+ .where("id", "=", conversationId)
291
+ .execute();
292
+ await this.eventLog.publishChanged(conversationId, "queue");
293
+ await this.runs.ensureRun(conversationId);
294
+ }
295
+ /** A queued item or a sent message for this client id (outside any transaction). */
296
+ async prior(conversationId, clientMessageId) {
297
+ const row = await this.db
298
+ .selectFrom("conversation_queue")
299
+ .select(COLUMNS)
300
+ .where("conversation_id", "=", conversationId)
301
+ .where("client_message_id", "=", clientMessageId)
302
+ .executeTakeFirst();
303
+ if (row)
304
+ return { item: toItem(row), created: false };
305
+ const event = await this.eventLog.findByIdem(conversationId, userMessageIdemKey(clientMessageId));
306
+ return event ? { item: null, event, created: false } : null;
307
+ }
308
+ async lockConversation(conversationId) {
309
+ await this.db
310
+ .selectFrom("conversations")
311
+ .select("id")
312
+ .where("id", "=", conversationId)
313
+ .forUpdate()
314
+ .executeTakeFirstOrThrow();
315
+ }
316
+ };
317
+ __decorate([
318
+ Transactional({ isolationLevel: "repeatable read" })
319
+ ], ConversationQueue.prototype, "listIn", null);
320
+ __decorate([
321
+ Transactional({ propagation: "requires_new" })
322
+ ], ConversationQueue.prototype, "addIn", null);
323
+ __decorate([
324
+ Transactional({ propagation: "requires_new" })
325
+ ], ConversationQueue.prototype, "editIn", null);
326
+ __decorate([
327
+ Transactional({ propagation: "requires_new" })
328
+ ], ConversationQueue.prototype, "removeIn", null);
329
+ __decorate([
330
+ Transactional({ propagation: "requires_new" })
331
+ ], ConversationQueue.prototype, "sendNowIn", null);
332
+ __decorate([
333
+ Transactional({ propagation: "mandatory" })
334
+ ], ConversationQueue.prototype, "lockConversation", null);
335
+ ConversationQueue = __decorate([
336
+ Injectable(),
337
+ __param(0, Inject(KernelDb)),
338
+ __param(1, Inject(EventLog)),
339
+ __param(2, Inject(ConversationsService)),
340
+ __param(3, Inject(RunControlService)),
341
+ __param(4, Inject(TransactionHost))
342
+ ], ConversationQueue);
343
+ export { ConversationQueue };
@@ -1,21 +1,24 @@
1
- import type { SandboxService } from "../sandbox/sandbox.service.js";
1
+ import { SandboxService } from "../sandbox/sandbox.service.js";
2
+ import { ConversationAccess } from "./access.js";
3
+ import { ConversationsService } from "./conversations.service.js";
2
4
  export interface SandboxStatusView {
3
5
  status: "running" | "suspended";
4
6
  lastUsedAt: string;
5
7
  }
6
- export interface ConversationSandboxStatusDeps {
7
- sandbox: Pick<SandboxService, "status">;
8
- /** 会话可见性(与会话 SSE 流同一判定:`ConversationsService.isAccessible`)。 */
9
- isAccessible(orgId: string, conversationId: string, viewerAccountId: string): Promise<boolean>;
10
- /** The conversation whose sandbox it works in: a sub-agent's parent, else itself. */
11
- sandboxConversationOf(orgId: string, conversationId: string): Promise<string>;
12
- }
13
8
  /**
14
9
  * 对话沙箱的状态(网页上下文标签,M5 T11):会话不可见 → `conversation.not_found`;
15
10
  * 没有可用的沙箱(未创建、已销毁、正在创建)→ `sandbox.not_found`(界面显示「未创建」)。
16
11
  */
17
12
  export declare class ConversationSandboxStatus {
18
- private readonly d;
19
- constructor(d: ConversationSandboxStatusDeps);
13
+ /** 会话可见性(与会话 SSE 流同一判定)。 */
14
+ private readonly access;
15
+ /** The conversation whose sandbox it works in: a sub-agent's parent, else itself. */
16
+ private readonly conversations;
17
+ private readonly sandbox;
18
+ constructor(
19
+ /** 会话可见性(与会话 SSE 流同一判定)。 */
20
+ access: Pick<ConversationAccess, "isAccessible">,
21
+ /** The conversation whose sandbox it works in: a sub-agent's parent, else itself. */
22
+ conversations: Pick<ConversationsService, "sandboxConversationOf">, sandbox: Pick<SandboxService, "status">);
20
23
  get(orgId: string, conversationId: string, viewerAccountId: string): Promise<SandboxStatusView>;
21
24
  }
@@ -1,24 +1,52 @@
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";
1
11
  import { ApiError } from "../errors.js";
12
+ import { SandboxService } from "../sandbox/sandbox.service.js";
2
13
  import { UUID_RE } from "../ui/registry.js";
14
+ import { ConversationAccess } from "./access.js";
15
+ import { ConversationsService } from "./conversations.service.js";
3
16
  /**
4
17
  * 对话沙箱的状态(网页上下文标签,M5 T11):会话不可见 → `conversation.not_found`;
5
18
  * 没有可用的沙箱(未创建、已销毁、正在创建)→ `sandbox.not_found`(界面显示「未创建」)。
6
19
  */
7
- export class ConversationSandboxStatus {
8
- d;
9
- constructor(d) {
10
- this.d = d;
20
+ let ConversationSandboxStatus = class ConversationSandboxStatus {
21
+ access;
22
+ conversations;
23
+ sandbox;
24
+ constructor(
25
+ /** 会话可见性(与会话 SSE 流同一判定)。 */
26
+ access,
27
+ /** The conversation whose sandbox it works in: a sub-agent's parent, else itself. */
28
+ conversations, sandbox) {
29
+ this.access = access;
30
+ this.conversations = conversations;
31
+ this.sandbox = sandbox;
11
32
  }
12
33
  async get(orgId, conversationId, viewerAccountId) {
13
34
  if (!UUID_RE.test(conversationId) ||
14
- !(await this.d.isAccessible(orgId, conversationId, viewerAccountId))) {
35
+ !(await this.access.isAccessible(orgId, conversationId, viewerAccountId))) {
15
36
  throw new ApiError("conversation.not_found", "Conversation not found");
16
37
  }
17
38
  // a sub-agent works in its parent conversation's sandbox (sub-agents spec §10.1)
18
- const sandboxConv = await this.d.sandboxConversationOf(orgId, conversationId);
19
- const s = await this.d.sandbox.status(orgId, sandboxConv);
39
+ const sandboxConv = await this.conversations.sandboxConversationOf(orgId, conversationId);
40
+ const s = await this.sandbox.status(orgId, sandboxConv);
20
41
  if (!s)
21
42
  throw new ApiError("sandbox.not_found", "This conversation has no sandbox");
22
43
  return { status: s.status, lastUsedAt: s.lastUsedAt.toISOString() };
23
44
  }
24
- }
45
+ };
46
+ ConversationSandboxStatus = __decorate([
47
+ Injectable(),
48
+ __param(0, Inject(ConversationAccess)),
49
+ __param(1, Inject(ConversationsService)),
50
+ __param(2, Inject(SandboxService))
51
+ ], ConversationSandboxStatus);
52
+ export { ConversationSandboxStatus };
@@ -1,10 +1,13 @@
1
- import { type Logger } from "@capybara-hq/plugin-sdk";
2
- import type { KernelConfig } from "../config/schema.js";
3
- import type { KernelDb } from "../db/kernel-schema.js";
4
- import { type ModelPurposesService } from "../models/purposes.js";
5
- import { type HookRunner } from "../runtime/hook-calls.js";
6
- import type { UsageReporter } from "../runtime/usage-report.js";
7
- import type { EventLog } from "./event-log.js";
1
+ import { type Logger, type ModelUsage } from "@capybara-hq/plugin-sdk";
2
+ import type { Job, Queue, Worker } from "bullmq";
3
+ import type { KernelSchemaDb } from "../db/kernel-schema.js";
4
+ import { KernelDb } from "../infra/database/kernel-db.js";
5
+ import { TransactionHost } from "../infra/database/transaction-host.js";
6
+ import { ModelPurposesService } from "../models/purposes.js";
7
+ import { type AuditEntry, type HookRunner } from "../runtime/hook-calls.js";
8
+ import { UsageReporter } from "../runtime/usage-report.js";
9
+ import { EventLog } from "./event-log.js";
10
+ import { type ConversationEvent } from "./events.js";
8
11
  /**
9
12
  * Model-generated conversation titles (UI refresh B, spec §5.1 "Titles").
10
13
  *
@@ -43,8 +46,8 @@ export declare function titleExcerpt(firstUser: string, firstReply: string): str
43
46
  */
44
47
  export declare function cleanTitle(reply: string): string | null;
45
48
  export interface TitleDeps {
46
- db: KernelDb;
47
- eventLog: Pick<EventLog, "append" | "readAfter" | "latestOfType" | "notify" | "publishChanged">;
49
+ db: KernelSchemaDb;
50
+ eventLog: Pick<EventLog, "append" | "appendIn" | "readAfter" | "latestOfType" | "notify" | "publishChanged">;
48
51
  purposes: Pick<ModelPurposesService, "chat">;
49
52
  log: Pick<Logger, "warn">;
50
53
  /**
@@ -55,9 +58,11 @@ export interface TitleDeps {
55
58
  usageReport?: Pick<UsageReporter, "enqueue">;
56
59
  /** Aborts the call (worker shutdown). */
57
60
  signal?: AbortSignal;
61
+ /** The job's transactional writes ({@link TitleGenerator}). */
62
+ writes: Pick<TitleGenerator, "writeResult" | "auditDenied">;
58
63
  }
59
64
  /** The attempt number to enqueue for this conversation, or null when no title job is due. */
60
- export declare function titleAttemptDue(db: KernelDb, conversationId: string): Promise<number | null>;
65
+ export declare function titleAttemptDue(db: KernelSchemaDb, conversationId: string): Promise<number | null>;
61
66
  /**
62
67
  * One title attempt. Claims the attempt (`title_attempts = attempt` → `attempt + 1`; a second
63
68
  * execution of the same attempt finds nothing to claim and returns), calls the model, writes the
@@ -65,29 +70,71 @@ export declare function titleAttemptDue(db: KernelDb, conversationId: string): P
65
70
  * no run, idempotent per attempt) in the same transaction. Errors are logged, not thrown.
66
71
  */
67
72
  export declare function runTitleJob(d: TitleDeps, conversationId: string, attempt: number): Promise<void>;
68
- export interface TitleQueueDeps extends Omit<TitleDeps, "signal"> {
69
- redisUrl: string;
70
- config: () => KernelConfig;
71
- log: Logger;
73
+ interface TitleJob {
74
+ conversationId: string;
75
+ attempt: number;
76
+ }
77
+ /**
78
+ * One title attempt's work ({@link runTitleJob}) over the injected services, with its writes in
79
+ * transactions of their own: the title with the call's usage event, and a policy denial's audit row.
80
+ */
81
+ export declare class TitleGenerator {
82
+ private readonly kdb;
83
+ private readonly eventLog;
84
+ private readonly purposes;
85
+ /** The title call fires the plugin hooks (`model.request`, `model.response`). */
86
+ private readonly host;
87
+ private readonly usageReport;
88
+ private readonly log;
89
+ readonly txHost: TransactionHost;
90
+ constructor(kdb: KernelDb, eventLog: TitleDeps["eventLog"], purposes: Pick<ModelPurposesService, "chat">,
91
+ /** The title call fires the plugin hooks (`model.request`, `model.response`). */
92
+ host: {
93
+ readonly hooks?: HookRunner;
94
+ } | undefined, usageReport: Pick<UsageReporter, "enqueue"> | undefined, log: Pick<Logger, "warn">, txHost: TransactionHost);
95
+ /** One attempt ({@link runTitleJob}); `signal` aborts the call (the worker stopping). */
96
+ run(conversationId: string, attempt: number, signal?: AbortSignal): Promise<void>;
97
+ /**
98
+ * Appends the call's `usage` event and writes the title while `title_source IS NULL` (a rename
99
+ * wins), in one transaction.
100
+ */
101
+ writeResult(conversationId: string, attempt: number, out: {
102
+ provider: string;
103
+ model: string;
104
+ usage: ModelUsage;
105
+ }, title: string | null): Promise<{
106
+ written: boolean;
107
+ usage: ConversationEvent | undefined;
108
+ }>;
109
+ /** The `hook.denied` audit row of a denied title call. */
110
+ auditDenied(entry: AuditEntry): Promise<void>;
72
111
  }
73
112
  /**
74
113
  * The title queue: `maybeEnqueue` on any role (called by the run worker after a completed run),
75
- * the worker on the `worker` role. One attempt per job, no BullMQ retries: the next completed run
76
- * enqueues the next attempt.
114
+ * consumed on the `worker` role by its `@Processor`. One attempt per job, no BullMQ retries: the
115
+ * next completed run enqueues the next attempt.
77
116
  */
78
117
  export declare class TitleQueue {
79
- private readonly d;
80
- private queue;
81
- private queueConn;
118
+ private readonly kdb;
119
+ private readonly queue;
120
+ private readonly generator;
121
+ private readonly log;
82
122
  private worker;
83
- private workerConn;
84
123
  private closed;
85
124
  private readonly stopping;
86
- constructor(d: TitleQueueDeps);
125
+ constructor(kdb: KernelDb, queue: Queue<TitleJob>, generator: Pick<TitleGenerator, "run">, log: Pick<Logger, "warn" | "error">);
87
126
  /** Enqueues the next title attempt when one is due. Never throws (logs instead). */
88
127
  maybeEnqueue(conversationId: string): Promise<void>;
89
- startWorker(): void;
90
- private process;
128
+ /** Starts consuming (worker role only): `worker` is the `@Processor` worker of {@link TITLE_QUEUE}. */
129
+ startWorker(worker: Worker<TitleJob>): void;
130
+ /** The worker's `error` event. */
131
+ onError(err: Error): void;
132
+ /** One title job (the `@Processor` calls it). */
133
+ process(j: Job<TitleJob>): Promise<void>;
134
+ /** Stops: no more enqueues, the call in flight is aborted, the worker closes. */
91
135
  stop(): Promise<void>;
92
- private getQueue;
93
136
  }
137
+ /** Conversation titles: the queue and the job (consumed on the worker role). */
138
+ export declare class TitlesModule {
139
+ }
140
+ export {};