@capybara-hq/kernel 0.1.0-rc.0 → 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 (626) hide show
  1. package/bootstrap.json +10 -6
  2. package/dist/admin/admin.controller.d.ts +17 -17
  3. package/dist/admin/admin.controller.js +43 -26
  4. package/dist/admin/admin.module.d.ts +3 -0
  5. package/dist/admin/admin.module.js +22 -0
  6. package/dist/admin/extensions.controller.d.ts +14 -14
  7. package/dist/admin/extensions.controller.js +30 -17
  8. package/dist/admin/setup-lock.d.ts +16 -0
  9. package/dist/admin/setup-lock.js +47 -0
  10. package/dist/admin/setup.controller.d.ts +8 -8
  11. package/dist/admin/setup.controller.js +27 -25
  12. package/dist/admin/setup.service.d.ts +19 -27
  13. package/dist/admin/setup.service.js +61 -61
  14. package/dist/agents/agent-lookup.d.ts +53 -0
  15. package/dist/agents/agent-lookup.js +179 -0
  16. package/dist/agents/agents.controller.d.ts +1 -1
  17. package/dist/agents/agents.controller.js +14 -8
  18. package/dist/agents/agents.module.d.ts +7 -0
  19. package/dist/agents/agents.module.js +41 -0
  20. package/dist/agents/agents.service.d.ts +39 -58
  21. package/dist/agents/agents.service.js +261 -329
  22. package/dist/agents/definition.d.ts +8 -0
  23. package/dist/agents/definition.js +8 -0
  24. package/dist/agents/models.controller.d.ts +1 -1
  25. package/dist/agents/models.controller.js +2 -2
  26. package/dist/agents/templates.controller.d.ts +1 -1
  27. package/dist/agents/templates.controller.js +2 -2
  28. package/dist/agents/templates.d.ts +6 -8
  29. package/dist/agents/templates.js +20 -4
  30. package/dist/app.d.ts +93 -0
  31. package/dist/app.js +150 -0
  32. package/dist/catalog/admin-catalog.controller.d.ts +3 -3
  33. package/dist/catalog/admin-catalog.controller.js +27 -13
  34. package/dist/catalog/catalog-content.d.ts +185 -0
  35. package/dist/catalog/catalog-content.js +323 -0
  36. package/dist/catalog/catalog-items.d.ts +186 -0
  37. package/dist/catalog/catalog-items.js +410 -0
  38. package/dist/catalog/catalog.module.d.ts +14 -0
  39. package/dist/catalog/catalog.module.js +71 -0
  40. package/dist/catalog/catalog.service.d.ts +34 -188
  41. package/dist/catalog/catalog.service.js +155 -489
  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 +30 -13
  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 +2 -2
  70. package/dist/channels/channels.module.d.ts +40 -0
  71. package/dist/channels/channels.module.js +128 -0
  72. package/dist/channels/connections.controller.d.ts +1 -1
  73. package/dist/channels/connections.controller.js +11 -6
  74. package/dist/channels/connections.service.d.ts +43 -21
  75. package/dist/channels/connections.service.js +236 -131
  76. package/dist/channels/inbound.d.ts +34 -38
  77. package/dist/channels/inbound.js +107 -41
  78. package/dist/channels/job-ids.d.ts +10 -0
  79. package/dist/channels/job-ids.js +10 -0
  80. package/dist/channels/jobs.d.ts +85 -0
  81. package/dist/channels/jobs.js +157 -0
  82. package/dist/channels/outbound.d.ts +60 -82
  83. package/dist/channels/outbound.js +165 -193
  84. package/dist/channels/supervisor.d.ts +88 -46
  85. package/dist/channels/supervisor.js +230 -132
  86. package/dist/channels/threads.d.ts +29 -8
  87. package/dist/channels/threads.js +71 -13
  88. package/dist/channels/webhook.d.ts +20 -14
  89. package/dist/channels/webhook.js +51 -20
  90. package/dist/config/load.d.ts +3 -2
  91. package/dist/config/load.js +3 -2
  92. package/dist/config/nacos-source.js +11 -2
  93. package/dist/config/schema.d.ts +16 -1
  94. package/dist/config/schema.js +54 -7
  95. package/dist/conversations/access.d.ts +29 -0
  96. package/dist/conversations/access.js +86 -0
  97. package/dist/conversations/artifacts.d.ts +10 -10
  98. package/dist/conversations/artifacts.js +35 -9
  99. package/dist/conversations/attachments.controller.d.ts +1 -1
  100. package/dist/conversations/attachments.controller.js +8 -6
  101. package/dist/conversations/attachments.module.d.ts +7 -0
  102. package/dist/conversations/attachments.module.js +25 -0
  103. package/dist/conversations/attachments.service.d.ts +30 -22
  104. package/dist/conversations/attachments.service.js +119 -46
  105. package/dist/conversations/conversations.controller.d.ts +8 -7
  106. package/dist/conversations/conversations.controller.js +59 -29
  107. package/dist/conversations/conversations.module.d.ts +8 -0
  108. package/dist/conversations/conversations.module.js +69 -0
  109. package/dist/conversations/conversations.service.d.ts +40 -38
  110. package/dist/conversations/conversations.service.js +130 -140
  111. package/dist/conversations/event-log.d.ts +28 -18
  112. package/dist/conversations/event-log.js +74 -27
  113. package/dist/conversations/files.d.ts +10 -10
  114. package/dist/conversations/files.js +37 -11
  115. package/dist/conversations/idem-keys.d.ts +5 -0
  116. package/dist/conversations/idem-keys.js +5 -0
  117. package/dist/conversations/job-ids.d.ts +6 -0
  118. package/dist/conversations/job-ids.js +6 -0
  119. package/dist/conversations/outputs-read.d.ts +11 -11
  120. package/dist/conversations/outputs-read.js +31 -7
  121. package/dist/conversations/queue.d.ts +48 -56
  122. package/dist/conversations/queue.js +13 -289
  123. package/dist/conversations/queue.service.d.ts +60 -0
  124. package/dist/conversations/queue.service.js +343 -0
  125. package/dist/conversations/sandbox-status.d.ts +13 -10
  126. package/dist/conversations/sandbox-status.js +36 -8
  127. package/dist/conversations/titles.d.ts +71 -24
  128. package/dist/conversations/titles.js +159 -62
  129. package/dist/ctx/bus.js +9 -3
  130. package/dist/ctx/create-ctx.d.ts +6 -0
  131. package/dist/ctx/create-ctx.js +7 -9
  132. package/dist/ctx/lock.d.ts +7 -3
  133. package/dist/ctx/lock.js +9 -20
  134. package/dist/ctx/queue.js +3 -2
  135. package/dist/ctx/secrets.d.ts +10 -2
  136. package/dist/ctx/secrets.js +7 -3
  137. package/dist/db/kernel-schema.d.ts +2 -2
  138. package/dist/db/pool.d.ts +5 -0
  139. package/dist/db/pool.js +1 -0
  140. package/dist/errors.d.ts +2 -0
  141. package/dist/errors.js +2 -0
  142. package/dist/evals/budget.d.ts +42 -21
  143. package/dist/evals/budget.js +114 -62
  144. package/dist/evals/evals.module.d.ts +31 -0
  145. package/dist/evals/evals.module.js +114 -0
  146. package/dist/evals/jobs.d.ts +20 -0
  147. package/dist/evals/jobs.js +45 -0
  148. package/dist/evals/run-replay.d.ts +56 -8
  149. package/dist/evals/run-replay.js +140 -80
  150. package/dist/evals/runs.controller.d.ts +1 -1
  151. package/dist/evals/runs.controller.js +17 -8
  152. package/dist/evals/runs.service.d.ts +23 -45
  153. package/dist/evals/runs.service.js +245 -234
  154. package/dist/evals/sets.controller.d.ts +1 -1
  155. package/dist/evals/sets.controller.js +17 -8
  156. package/dist/evals/sets.service.d.ts +22 -6
  157. package/dist/evals/sets.service.js +248 -194
  158. package/dist/evals/snapshot.d.ts +2 -2
  159. package/dist/evals/step-replay.d.ts +2 -2
  160. package/dist/evals/step-replay.js +1 -1
  161. package/dist/evals/trajectory.controller.d.ts +1 -1
  162. package/dist/evals/trajectory.controller.js +11 -7
  163. package/dist/evals/trajectory.service.d.ts +5 -4
  164. package/dist/evals/trajectory.service.js +30 -7
  165. package/dist/evals/worker.d.ts +44 -27
  166. package/dist/evals/worker.js +220 -120
  167. package/dist/extensions/admin-ops.d.ts +61 -33
  168. package/dist/extensions/admin-ops.js +248 -154
  169. package/dist/extensions/admin-view.d.ts +38 -27
  170. package/dist/extensions/admin-view.js +126 -55
  171. package/dist/extensions/approvals.d.ts +12 -8
  172. package/dist/extensions/approvals.js +73 -46
  173. package/dist/extensions/blobs.d.ts +27 -10
  174. package/dist/extensions/blobs.js +111 -45
  175. package/dist/extensions/bootstrap.d.ts +96 -42
  176. package/dist/extensions/bootstrap.js +303 -155
  177. package/dist/extensions/cli.d.ts +20 -10
  178. package/dist/extensions/cli.js +41 -96
  179. package/dist/extensions/config-issues.d.ts +7 -0
  180. package/dist/extensions/config-issues.js +31 -0
  181. package/dist/extensions/deployment-config-store.d.ts +49 -0
  182. package/dist/extensions/deployment-config-store.js +133 -0
  183. package/dist/extensions/deployment-config.d.ts +58 -67
  184. package/dist/extensions/deployment-config.js +202 -230
  185. package/dist/extensions/enabled.d.ts +5 -5
  186. package/dist/extensions/extensions.module.d.ts +8 -0
  187. package/dist/extensions/extensions.module.js +77 -0
  188. package/dist/extensions/hooks.d.ts +3 -2
  189. package/dist/extensions/hooks.js +1 -1
  190. package/dist/extensions/host.d.ts +72 -68
  191. package/dist/extensions/host.js +191 -152
  192. package/dist/extensions/installs.d.ts +49 -16
  193. package/dist/extensions/installs.js +128 -32
  194. package/dist/extensions/job-ids.d.ts +6 -0
  195. package/dist/extensions/job-ids.js +6 -0
  196. package/dist/extensions/lifecycle-topics.d.ts +18 -0
  197. package/dist/extensions/lifecycle-topics.js +18 -0
  198. package/dist/extensions/lifecycle.d.ts +35 -47
  199. package/dist/extensions/lifecycle.js +103 -39
  200. package/dist/extensions/locks.d.ts +33 -0
  201. package/dist/extensions/locks.js +86 -0
  202. package/dist/extensions/migrate-lock.d.ts +3 -4
  203. package/dist/extensions/org-config.controller.d.ts +1 -1
  204. package/dist/extensions/org-config.controller.js +8 -5
  205. package/dist/extensions/org-config.d.ts +48 -46
  206. package/dist/extensions/org-config.js +284 -226
  207. package/dist/extensions/registry.d.ts +50 -2
  208. package/dist/extensions/registry.js +89 -4
  209. package/dist/extensions/sources.d.ts +12 -8
  210. package/dist/extensions/sources.js +34 -13
  211. package/dist/files/files.module.d.ts +3 -0
  212. package/dist/files/files.module.js +22 -0
  213. package/dist/files/previewers.controller.d.ts +7 -2
  214. package/dist/files/previewers.controller.js +17 -9
  215. package/dist/files/previewers.d.ts +13 -18
  216. package/dist/files/previewers.js +83 -36
  217. package/dist/http/adapter.d.ts +3 -0
  218. package/dist/http/adapter.js +25 -0
  219. package/dist/http/api.module.d.ts +3 -110
  220. package/dist/http/api.module.js +47 -355
  221. package/dist/http/app.d.ts +11 -15
  222. package/dist/http/app.js +52 -47
  223. package/dist/http/error-filter.module.d.ts +5 -0
  224. package/dist/http/error-filter.module.js +18 -0
  225. package/dist/http/error.filter.js +2 -2
  226. package/dist/identity/accounts.d.ts +82 -29
  227. package/dist/identity/accounts.js +294 -175
  228. package/dist/identity/api-tokens.d.ts +11 -7
  229. package/dist/identity/api-tokens.js +71 -44
  230. package/dist/identity/audit.d.ts +7 -4
  231. package/dist/identity/audit.js +5 -1
  232. package/dist/identity/auth.controller.d.ts +11 -10
  233. package/dist/identity/auth.controller.js +31 -25
  234. package/dist/identity/auth.guard.d.ts +3 -3
  235. package/dist/identity/auth.guard.js +6 -4
  236. package/dist/identity/binding.d.ts +9 -11
  237. package/dist/identity/binding.js +41 -13
  238. package/dist/identity/enterprise-admin.d.ts +18 -12
  239. package/dist/identity/enterprise-admin.js +67 -13
  240. package/dist/identity/external-identity-lock.d.ts +17 -0
  241. package/dist/identity/external-identity-lock.js +39 -0
  242. package/dist/identity/external.d.ts +19 -15
  243. package/dist/identity/external.js +163 -125
  244. package/dist/identity/identity.module.d.ts +6 -0
  245. package/dist/identity/identity.module.js +56 -0
  246. package/dist/identity/me.controller.d.ts +16 -15
  247. package/dist/identity/me.controller.js +37 -31
  248. package/dist/identity/sessions.d.ts +12 -10
  249. package/dist/identity/sessions.js +74 -42
  250. package/dist/identity/settings.d.ts +20 -14
  251. package/dist/identity/settings.js +85 -57
  252. package/dist/identity/sso.controller.d.ts +7 -7
  253. package/dist/identity/sso.controller.js +13 -9
  254. package/dist/identity/sso.d.ts +9 -12
  255. package/dist/identity/sso.js +54 -24
  256. package/dist/inbox/inbox.module.d.ts +3 -0
  257. package/dist/inbox/inbox.module.js +22 -0
  258. package/dist/inbox/inbox.service.d.ts +7 -9
  259. package/dist/inbox/inbox.service.js +32 -11
  260. package/dist/index.d.ts +19 -12
  261. package/dist/index.js +13 -8
  262. package/dist/infra/cache/cache.module.d.ts +3 -0
  263. package/dist/infra/cache/cache.module.js +16 -0
  264. package/dist/infra/cache/cache.service.d.ts +21 -0
  265. package/dist/infra/cache/cache.service.js +80 -0
  266. package/dist/infra/cache/cacheable.decorator.d.ts +32 -0
  267. package/dist/infra/cache/cacheable.decorator.js +83 -0
  268. package/dist/infra/cli/kernel-cli.module.d.ts +66 -0
  269. package/dist/infra/cli/kernel-cli.module.js +165 -0
  270. package/dist/infra/close-within.d.ts +15 -0
  271. package/dist/infra/close-within.js +36 -0
  272. package/dist/infra/config/config.module.d.ts +13 -0
  273. package/dist/infra/config/config.module.js +39 -0
  274. package/dist/infra/config/kernel-config.service.d.ts +25 -0
  275. package/dist/infra/config/kernel-config.service.js +126 -0
  276. package/dist/infra/database/after-commit.d.ts +6 -0
  277. package/dist/infra/database/after-commit.js +9 -0
  278. package/dist/infra/database/database.module.d.ts +25 -0
  279. package/dist/infra/database/database.module.js +90 -0
  280. package/dist/infra/database/kernel-db.d.ts +22 -0
  281. package/dist/infra/database/kernel-db.js +65 -0
  282. package/dist/infra/database/transaction-host.d.ts +50 -0
  283. package/dist/infra/database/transaction-host.js +125 -0
  284. package/dist/infra/database/transactional.decorator.d.ts +15 -0
  285. package/dist/infra/database/transactional.decorator.js +27 -0
  286. package/dist/infra/database/xact-lock.d.ts +17 -0
  287. package/dist/infra/database/xact-lock.js +43 -0
  288. package/dist/infra/events/kernel-events.d.ts +96 -0
  289. package/dist/infra/events/kernel-events.js +65 -0
  290. package/dist/infra/health/health.controller.d.ts +26 -0
  291. package/dist/infra/health/health.controller.js +104 -0
  292. package/dist/infra/health/health.module.d.ts +9 -0
  293. package/dist/infra/health/health.module.js +24 -0
  294. package/dist/infra/health/health.options.d.ts +10 -0
  295. package/dist/infra/health/health.options.js +15 -0
  296. package/dist/infra/health/shutdown-state.d.ts +6 -0
  297. package/dist/infra/health/shutdown-state.js +2 -0
  298. package/dist/infra/lifecycle/graceful-shutdown.module.d.ts +6 -0
  299. package/dist/infra/lifecycle/graceful-shutdown.module.js +23 -0
  300. package/dist/infra/lifecycle/graceful-shutdown.service.d.ts +70 -0
  301. package/dist/infra/lifecycle/graceful-shutdown.service.js +135 -0
  302. package/dist/infra/lifecycle/process-guards.d.ts +52 -0
  303. package/dist/infra/lifecycle/process-guards.js +86 -0
  304. package/dist/infra/lifecycle/shutdown-signals.d.ts +30 -0
  305. package/dist/infra/lifecycle/shutdown-signals.js +48 -0
  306. package/dist/infra/lock/key-template.d.ts +13 -0
  307. package/dist/infra/lock/key-template.js +46 -0
  308. package/dist/infra/lock/lock.module.d.ts +3 -0
  309. package/dist/infra/lock/lock.module.js +16 -0
  310. package/dist/infra/lock/lock.service.d.ts +120 -0
  311. package/dist/infra/lock/lock.service.js +343 -0
  312. package/dist/infra/lock/shared-lease.d.ts +44 -0
  313. package/dist/infra/lock/shared-lease.js +121 -0
  314. package/dist/infra/lock/with-lock.decorator.d.ts +28 -0
  315. package/dist/infra/lock/with-lock.decorator.js +49 -0
  316. package/dist/infra/logging/logging.module.d.ts +16 -0
  317. package/dist/infra/logging/logging.module.js +34 -0
  318. package/dist/infra/queue/configured-processor.d.ts +18 -0
  319. package/dist/infra/queue/configured-processor.js +23 -0
  320. package/dist/infra/queue/job-failure.d.ts +18 -0
  321. package/dist/infra/queue/job-failure.js +26 -0
  322. package/dist/infra/queue/queue-shutdown.d.ts +27 -0
  323. package/dist/infra/queue/queue-shutdown.js +81 -0
  324. package/dist/infra/queue/queue.module.d.ts +16 -0
  325. package/dist/infra/queue/queue.module.js +61 -0
  326. package/dist/infra/queue/redis-connection.d.ts +7 -0
  327. package/dist/infra/queue/redis-connection.js +18 -0
  328. package/dist/infra/queue/retired-schedulers.d.ts +7 -0
  329. package/dist/infra/queue/retired-schedulers.js +9 -0
  330. package/dist/infra/queue/run-job.d.ts +16 -0
  331. package/dist/infra/queue/run-job.js +19 -0
  332. package/dist/infra/redis/redis.module.d.ts +24 -0
  333. package/dist/infra/redis/redis.module.js +87 -0
  334. package/dist/infra/schedule/cron-tick.d.ts +12 -0
  335. package/dist/infra/schedule/cron-tick.js +25 -0
  336. package/dist/infra/schedule/locked-cron.decorator.d.ts +27 -0
  337. package/dist/infra/schedule/locked-cron.decorator.js +53 -0
  338. package/dist/infra/schedule/locked-interval.d.ts +69 -0
  339. package/dist/infra/schedule/locked-interval.js +190 -0
  340. package/dist/infra/schedule/locked-tick.d.ts +90 -0
  341. package/dist/infra/schedule/locked-tick.js +137 -0
  342. package/dist/infra/schedule/schedule.module.d.ts +8 -0
  343. package/dist/infra/schedule/schedule.module.js +27 -0
  344. package/dist/infra/schedule/scheduled-runs.d.ts +69 -0
  345. package/dist/infra/schedule/scheduled-runs.js +163 -0
  346. package/dist/infra/swagger/swagger.d.ts +16 -0
  347. package/dist/infra/swagger/swagger.js +31 -0
  348. package/dist/infra/throttler/credential-throttler.d.ts +35 -0
  349. package/dist/infra/throttler/credential-throttler.js +77 -0
  350. package/dist/infra/throttler/named-throttlers.d.ts +31 -0
  351. package/dist/infra/throttler/named-throttlers.js +119 -0
  352. package/dist/infra/throttler/redis-throttler-storage.d.ts +38 -0
  353. package/dist/infra/throttler/redis-throttler-storage.js +130 -0
  354. package/dist/infra/throttler/throttler.guard.d.ts +23 -0
  355. package/dist/infra/throttler/throttler.guard.js +68 -0
  356. package/dist/infra/throttler/throttler.module.d.ts +15 -0
  357. package/dist/infra/throttler/throttler.module.js +53 -0
  358. package/dist/infra/tokens.d.ts +15 -0
  359. package/dist/infra/tokens.js +15 -0
  360. package/dist/infra/validation/create-zod-dto.d.ts +23 -0
  361. package/dist/infra/validation/create-zod-dto.js +35 -0
  362. package/dist/infra/validation/parse-with-zod.d.ts +7 -0
  363. package/dist/infra/validation/parse-with-zod.js +12 -0
  364. package/dist/infra/validation/validation.module.d.ts +3 -0
  365. package/dist/infra/validation/validation.module.js +16 -0
  366. package/dist/infra/validation/zod-params.d.ts +7 -0
  367. package/dist/infra/validation/zod-params.js +42 -0
  368. package/dist/infra/validation/zod-validation.pipe.d.ts +11 -0
  369. package/dist/infra/validation/zod-validation.pipe.js +31 -0
  370. package/dist/kernel.d.ts +9 -241
  371. package/dist/kernel.js +8 -1305
  372. package/dist/kernel.module.d.ts +17 -0
  373. package/dist/kernel.module.js +136 -0
  374. package/dist/lifecycle/kernel-lifecycle.d.ts +140 -0
  375. package/dist/lifecycle/kernel-lifecycle.js +451 -0
  376. package/dist/lifecycle/tokens.d.ts +3 -0
  377. package/dist/lifecycle/tokens.js +3 -0
  378. package/dist/log-config.d.ts +9 -0
  379. package/dist/log-config.js +27 -0
  380. package/dist/log-context.d.ts +34 -0
  381. package/dist/log-context.js +44 -0
  382. package/dist/log-loki.d.ts +34 -0
  383. package/dist/log-loki.js +145 -0
  384. package/dist/log.d.ts +41 -10
  385. package/dist/log.js +91 -17
  386. package/dist/models/models.module.d.ts +3 -0
  387. package/dist/models/models.module.js +24 -0
  388. package/dist/models/prices.d.ts +8 -2
  389. package/dist/models/prices.js +65 -37
  390. package/dist/models/purposes.controller.d.ts +1 -1
  391. package/dist/models/purposes.controller.js +5 -6
  392. package/dist/models/purposes.d.ts +35 -13
  393. package/dist/models/purposes.js +101 -51
  394. package/dist/net/public-address.js +3 -2
  395. package/dist/orgs/directory-sync.controller.d.ts +1 -1
  396. package/dist/orgs/directory-sync.controller.js +2 -2
  397. package/dist/orgs/directory-sync.d.ts +61 -31
  398. package/dist/orgs/directory-sync.js +212 -125
  399. package/dist/orgs/invitations.controller.d.ts +8 -8
  400. package/dist/orgs/invitations.controller.js +27 -26
  401. package/dist/orgs/invitations.service.d.ts +12 -9
  402. package/dist/orgs/invitations.service.js +130 -92
  403. package/dist/orgs/job-ids.d.ts +8 -0
  404. package/dist/orgs/job-ids.js +8 -0
  405. package/dist/orgs/members.service.d.ts +19 -12
  406. package/dist/orgs/members.service.js +161 -117
  407. package/dist/orgs/offboarding.d.ts +54 -57
  408. package/dist/orgs/offboarding.js +161 -71
  409. package/dist/orgs/org-lock.d.ts +28 -19
  410. package/dist/orgs/org-lock.js +81 -35
  411. package/dist/orgs/org.guard.d.ts +1 -1
  412. package/dist/orgs/org.guard.js +2 -2
  413. package/dist/orgs/orgs.controller.d.ts +13 -13
  414. package/dist/orgs/orgs.controller.js +29 -17
  415. package/dist/orgs/orgs.module.d.ts +6 -0
  416. package/dist/orgs/orgs.module.js +68 -0
  417. package/dist/orgs/orgs.service.d.ts +30 -19
  418. package/dist/orgs/orgs.service.js +139 -86
  419. package/dist/orgs/settings.controller.d.ts +1 -1
  420. package/dist/orgs/settings.controller.js +8 -6
  421. package/dist/orgs/settings.service.d.ts +14 -8
  422. package/dist/orgs/settings.service.js +75 -46
  423. package/dist/overrides.d.ts +56 -0
  424. package/dist/overrides.js +30 -0
  425. package/dist/roles/gateway-role.d.ts +43 -0
  426. package/dist/roles/gateway-role.js +98 -0
  427. package/dist/roles/gateway.module.d.ts +8 -0
  428. package/dist/roles/gateway.module.js +28 -0
  429. package/dist/roles/worker-role.d.ts +63 -0
  430. package/dist/roles/worker-role.js +144 -0
  431. package/dist/roles/worker.module.d.ts +14 -0
  432. package/dist/roles/worker.module.js +90 -0
  433. package/dist/runtime/abort.js +19 -2
  434. package/dist/runtime/checkpointer.d.ts +8 -3
  435. package/dist/runtime/checkpointer.js +87 -55
  436. package/dist/runtime/conversation-lock.d.ts +20 -11
  437. package/dist/runtime/conversation-lock.js +62 -72
  438. package/dist/runtime/hook-calls.d.ts +3 -3
  439. package/dist/runtime/hook-calls.js +1 -6
  440. package/dist/runtime/job-ids.d.ts +10 -0
  441. package/dist/runtime/job-ids.js +10 -0
  442. package/dist/runtime/langgraph-loop.js +1 -1
  443. package/dist/runtime/loop.d.ts +7 -0
  444. package/dist/runtime/loop.js +14 -0
  445. package/dist/runtime/maintenance-queue.d.ts +10 -0
  446. package/dist/runtime/maintenance-queue.js +10 -0
  447. package/dist/runtime/maintenance.d.ts +45 -74
  448. package/dist/runtime/maintenance.js +139 -136
  449. package/dist/runtime/model-call.d.ts +7 -4
  450. package/dist/runtime/model-call.js +24 -57
  451. package/dist/runtime/providers.d.ts +17 -6
  452. package/dist/runtime/providers.js +66 -25
  453. package/dist/runtime/quota.d.ts +17 -3
  454. package/dist/runtime/quota.js +27 -2
  455. package/dist/runtime/retired-schedulers.d.ts +7 -0
  456. package/dist/runtime/retired-schedulers.js +31 -0
  457. package/dist/runtime/run-control.d.ts +33 -0
  458. package/dist/runtime/run-control.js +77 -0
  459. package/dist/runtime/run-finish.d.ts +26 -17
  460. package/dist/runtime/run-finish.js +98 -51
  461. package/dist/runtime/run-jobs.d.ts +48 -0
  462. package/dist/runtime/run-jobs.js +95 -0
  463. package/dist/runtime/run-processors.d.ts +60 -0
  464. package/dist/runtime/run-processors.js +185 -0
  465. package/dist/runtime/run-queue.d.ts +32 -57
  466. package/dist/runtime/run-queue.js +291 -295
  467. package/dist/runtime/run-steps.d.ts +39 -0
  468. package/dist/runtime/run-steps.js +96 -0
  469. package/dist/runtime/run-worker.d.ts +121 -75
  470. package/dist/runtime/run-worker.js +340 -225
  471. package/dist/runtime/runtime.module.d.ts +10 -0
  472. package/dist/runtime/runtime.module.js +112 -0
  473. package/dist/runtime/step-log.d.ts +40 -0
  474. package/dist/runtime/step-log.js +94 -0
  475. package/dist/runtime/stream.controller.d.ts +5 -8
  476. package/dist/runtime/stream.controller.js +14 -12
  477. package/dist/runtime/stream.d.ts +24 -6
  478. package/dist/runtime/stream.js +78 -7
  479. package/dist/runtime/subagents/child.d.ts +3 -44
  480. package/dist/runtime/subagents/child.js +0 -79
  481. package/dist/runtime/subagents/definition.d.ts +4 -4
  482. package/dist/runtime/subagents/definition.js +2 -2
  483. package/dist/runtime/subagents/dispatch.d.ts +87 -6
  484. package/dist/runtime/subagents/dispatch.js +135 -140
  485. package/dist/runtime/subagents/limits.d.ts +9 -4
  486. package/dist/runtime/subagents/limits.js +4 -2
  487. package/dist/runtime/subagents/org-agents.d.ts +4 -4
  488. package/dist/runtime/subagents/org-agents.js +1 -1
  489. package/dist/runtime/subagents/progress.d.ts +2 -2
  490. package/dist/runtime/subagents/roster.d.ts +3 -3
  491. package/dist/runtime/subagents/roster.js +1 -1
  492. package/dist/runtime/subagents/skill-fork.d.ts +6 -7
  493. package/dist/runtime/subagents/skill-fork.js +16 -5
  494. package/dist/runtime/subagents/subagents.service.d.ts +40 -0
  495. package/dist/runtime/subagents/subagents.service.js +101 -0
  496. package/dist/runtime/usage-report.d.ts +94 -52
  497. package/dist/runtime/usage-report.js +200 -99
  498. package/dist/runtime/waits.d.ts +125 -57
  499. package/dist/runtime/waits.js +431 -208
  500. package/dist/sandbox/job-ids.d.ts +10 -0
  501. package/dist/sandbox/job-ids.js +10 -0
  502. package/dist/sandbox/jobs.d.ts +41 -0
  503. package/dist/sandbox/jobs.js +113 -0
  504. package/dist/sandbox/leases.d.ts +39 -31
  505. package/dist/sandbox/leases.js +117 -257
  506. package/dist/sandbox/providers.d.ts +19 -0
  507. package/dist/sandbox/providers.js +38 -0
  508. package/dist/sandbox/sandbox.module.d.ts +8 -0
  509. package/dist/sandbox/sandbox.module.js +30 -0
  510. package/dist/sandbox/sandbox.service.d.ts +24 -29
  511. package/dist/sandbox/sandbox.service.js +106 -75
  512. package/dist/skills/catalog.d.ts +33 -20
  513. package/dist/skills/catalog.js +96 -53
  514. package/dist/skills/changes.controller.d.ts +4 -4
  515. package/dist/skills/changes.controller.js +15 -9
  516. package/dist/skills/changes.service.d.ts +28 -18
  517. package/dist/skills/changes.service.js +421 -364
  518. package/dist/skills/invocable.controller.d.ts +1 -1
  519. package/dist/skills/invocable.controller.js +8 -5
  520. package/dist/skills/invoke.d.ts +16 -15
  521. package/dist/skills/invoke.js +48 -17
  522. package/dist/skills/skills.controller.d.ts +1 -1
  523. package/dist/skills/skills.controller.js +11 -6
  524. package/dist/skills/skills.module.d.ts +6 -0
  525. package/dist/skills/skills.module.js +30 -0
  526. package/dist/skills/skills.service.d.ts +47 -30
  527. package/dist/skills/skills.service.js +221 -158
  528. package/dist/storage/job-ids.d.ts +6 -0
  529. package/dist/storage/job-ids.js +6 -0
  530. package/dist/storage/purge.d.ts +22 -7
  531. package/dist/storage/purge.js +55 -3
  532. package/dist/storage/storage.module.d.ts +6 -0
  533. package/dist/storage/storage.module.js +23 -0
  534. package/dist/storage/storage.service.d.ts +18 -4
  535. package/dist/storage/storage.service.js +44 -3
  536. package/dist/tools/approvals.controller.d.ts +1 -1
  537. package/dist/tools/approvals.controller.js +12 -8
  538. package/dist/tools/approvals.service.d.ts +27 -25
  539. package/dist/tools/approvals.service.js +324 -258
  540. package/dist/tools/breaker.d.ts +2 -2
  541. package/dist/tools/breaker.js +21 -3
  542. package/dist/tools/builtins/ask-user.d.ts +2 -2
  543. package/dist/tools/builtins/ask-user.js +1 -1
  544. package/dist/tools/builtins/builtin-tools.d.ts +21 -0
  545. package/dist/tools/builtins/builtin-tools.js +80 -0
  546. package/dist/tools/builtins/read-tool-output.d.ts +2 -2
  547. package/dist/tools/builtins/read-tool-output.js +1 -1
  548. package/dist/tools/builtins/sandbox/bash.js +2 -2
  549. package/dist/tools/builtins/sandbox/common.d.ts +7 -4
  550. package/dist/tools/builtins/sandbox/common.js +5 -3
  551. package/dist/tools/builtins/sandbox/deliver.js +2 -2
  552. package/dist/tools/builtins/sandbox/edit.js +1 -1
  553. package/dist/tools/builtins/sandbox/glob.js +2 -2
  554. package/dist/tools/builtins/sandbox/grep.js +2 -2
  555. package/dist/tools/builtins/sandbox/read.js +1 -1
  556. package/dist/tools/builtins/sandbox/write.js +1 -1
  557. package/dist/tools/builtins/skill-load.d.ts +3 -3
  558. package/dist/tools/builtins/skill-load.js +1 -1
  559. package/dist/tools/canonical-json.d.ts +6 -0
  560. package/dist/tools/canonical-json.js +16 -0
  561. package/dist/tools/connector-content.controller.d.ts +1 -1
  562. package/dist/tools/connector-content.controller.js +11 -6
  563. package/dist/tools/connector-content.d.ts +12 -15
  564. package/dist/tools/connector-content.js +53 -18
  565. package/dist/tools/connectors.controller.d.ts +1 -1
  566. package/dist/tools/connectors.controller.js +21 -10
  567. package/dist/tools/connectors.service.d.ts +31 -13
  568. package/dist/tools/connectors.service.js +434 -344
  569. package/dist/tools/credentials.d.ts +17 -20
  570. package/dist/tools/credentials.js +55 -34
  571. package/dist/tools/drift.d.ts +29 -41
  572. package/dist/tools/drift.js +111 -79
  573. package/dist/tools/info.d.ts +12 -9
  574. package/dist/tools/info.js +33 -7
  575. package/dist/tools/job-ids.d.ts +13 -0
  576. package/dist/tools/job-ids.js +15 -0
  577. package/dist/tools/jobs.d.ts +24 -0
  578. package/dist/tools/jobs.js +69 -0
  579. package/dist/tools/oauth/flow-paths.d.ts +16 -0
  580. package/dist/tools/oauth/flow-paths.js +38 -0
  581. package/dist/tools/oauth/flow.d.ts +30 -30
  582. package/dist/tools/oauth/flow.js +109 -81
  583. package/dist/tools/oauth/oauth.controller.d.ts +3 -3
  584. package/dist/tools/oauth/oauth.controller.js +12 -9
  585. package/dist/tools/oauth/tokens.d.ts +11 -3
  586. package/dist/tools/oauth/tokens.js +15 -14
  587. package/dist/tools/outputs.d.ts +13 -4
  588. package/dist/tools/outputs.js +47 -3
  589. package/dist/tools/pipeline.d.ts +62 -46
  590. package/dist/tools/pipeline.js +145 -64
  591. package/dist/tools/policy.d.ts +2 -2
  592. package/dist/tools/questions.controller.d.ts +1 -1
  593. package/dist/tools/questions.controller.js +8 -5
  594. package/dist/tools/questions.service.d.ts +25 -24
  595. package/dist/tools/questions.service.js +201 -142
  596. package/dist/tools/registry.d.ts +30 -20
  597. package/dist/tools/registry.js +73 -37
  598. package/dist/tools/specs.d.ts +5 -4
  599. package/dist/tools/specs.js +3 -1
  600. package/dist/tools/tools.module.d.ts +10 -0
  601. package/dist/tools/tools.module.js +91 -0
  602. package/dist/ui/call-extension.d.ts +16 -0
  603. package/dist/ui/call-extension.js +38 -0
  604. package/dist/ui/embed-token.d.ts +9 -5
  605. package/dist/ui/embed-token.js +34 -6
  606. package/dist/ui/ui-stream.d.ts +22 -17
  607. package/dist/ui/ui-stream.js +72 -12
  608. package/dist/ui/ui.module.d.ts +7 -0
  609. package/dist/ui/ui.module.js +28 -0
  610. package/dist/ui/views.controller.d.ts +14 -12
  611. package/dist/ui/views.controller.js +32 -25
  612. package/dist/ui/views.d.ts +9 -57
  613. package/dist/ui/views.js +43 -45
  614. package/package.json +11 -2
  615. package/dist/http/health.controller.d.ts +0 -26
  616. package/dist/http/health.controller.js +0 -79
  617. package/dist/http/tokens.d.ts +0 -131
  618. package/dist/http/tokens.js +0 -131
  619. package/dist/http/zod.pipe.d.ts +0 -8
  620. package/dist/http/zod.pipe.js +0 -14
  621. package/dist/identity/rate-limit.d.ts +0 -55
  622. package/dist/identity/rate-limit.js +0 -121
  623. package/dist/sandbox/lifecycle.d.ts +0 -21
  624. package/dist/sandbox/lifecycle.js +0 -68
  625. /package/dist/http/{gateway.module.d.ts → gateway-routes.d.ts} +0 -0
  626. /package/dist/http/{gateway.module.js → gateway-routes.js} +0 -0
@@ -1,10 +1,9 @@
1
- import { randomUUID } from "node:crypto";
2
1
  import { sql } from "kysely";
3
2
  import { normalizeStoredDefinition } from "../agents/definition.js";
4
3
  import { ApiError } from "../errors.js";
5
- import { notInvocable, recordedSkillBlocked, } from "../skills/invoke.js";
6
- import { userMessageIdemKey, } from "./conversations.service.js";
4
+ import { recordedSkillBlocked, } from "../skills/invoke.js";
7
5
  import { payloadJson } from "./event-log.js";
6
+ import { userMessageIdemKey } from "./idem-keys.js";
8
7
  import { planSelection, readSelection } from "./selection.js";
9
8
  /**
10
9
  * Queued messages (UI refresh B, spec §5.7): messages a person queued while a run was going. They
@@ -15,7 +14,7 @@ import { planSelection, readSelection } from "./selection.js";
15
14
  */
16
15
  /** The most messages a conversation can hold in its queue. */
17
16
  export const QUEUE_MAX_ITEMS = 20;
18
- const COLUMNS = [
17
+ export const COLUMNS = [
19
18
  "id",
20
19
  "conversation_id",
21
20
  "account_id",
@@ -34,9 +33,9 @@ const COLUMNS = [
34
33
  * Queued text as the event log will store it: NUL becomes U+FFFD (PG rejects NUL in text and
35
34
  * jsonb), the mapping `payloadJson` applies to a direct send (final review m1).
36
35
  */
37
- const noNul = (text) => text.replaceAll("\0", "\uFFFD");
38
- const itemNotFound = () => new ApiError("conversation.queue_item_not_found", "Queued message not found");
39
- function toItem(r) {
36
+ export const noNul = (text) => text.replaceAll("\0", "\uFFFD");
37
+ export const itemNotFound = () => new ApiError("conversation.queue_item_not_found", "Queued message not found");
38
+ export function toItem(r) {
40
39
  const skill = r.skill;
41
40
  return {
42
41
  id: r.id,
@@ -62,7 +61,7 @@ function toItem(r) {
62
61
  * rendered text is `content[0]`) or carries files and no `@` resources (`content[0]` must be the
63
62
  * text when resources follow it).
64
63
  */
65
- function checkText(text, files, attachments, skill) {
64
+ export function checkText(text, files, attachments, skill) {
66
65
  if (text.length > 0 || skill || (files > 0 && attachments === 0))
67
66
  return;
68
67
  throw new ApiError("validation_failed", "Request validation failed", [
@@ -73,7 +72,7 @@ function checkText(text, files, attachments, skill) {
73
72
  ]);
74
73
  }
75
74
  /** The stored form of a rendered invocation and its first content block. */
76
- function storedSkill(invokedAs, invoked) {
75
+ export function storedSkill(invokedAs, invoked) {
77
76
  const skill = { invokedAs, record: invoked.skill };
78
77
  return { skill: payloadJson(skill), first: { type: "text", text: invoked.text } };
79
78
  }
@@ -122,7 +121,7 @@ export async function appendQueuedIn(t, eventLog, conversationId, r) {
122
121
  });
123
122
  }
124
123
  events.push(queuedUserMessage(r));
125
- const written = await eventLog.append(conversationId, events, t);
124
+ const written = await eventLog.appendIn(conversationId, events);
126
125
  if (next !== null) {
127
126
  await t
128
127
  .updateTable("conversations")
@@ -156,7 +155,7 @@ async function currentAgent(t, conversationId) {
156
155
  * Checked at dispatch, inside `t` (phase D Task 9): the rendered text was frozen when queued, but
157
156
  * the skill must still be one of the agent's skills a person can invoke.
158
157
  */
159
- async function queuedSkillBlocked(t, conversationId, r) {
158
+ export async function queuedSkillBlocked(t, conversationId, r) {
160
159
  const skill = r.skill;
161
160
  if (skill === null)
162
161
  return null;
@@ -178,7 +177,7 @@ export async function pauseQueueWith(t, conversationId, reason) {
178
177
  .execute();
179
178
  }
180
179
  /** Whether a user_message with this client id is already in the log (inside `t`). */
181
- async function alreadySent(t, conversationId, clientMessageId) {
180
+ export async function alreadySent(t, conversationId, clientMessageId) {
182
181
  const row = await t
183
182
  .selectFrom("conversation_events")
184
183
  .select("seq")
@@ -188,7 +187,7 @@ async function alreadySent(t, conversationId, clientMessageId) {
188
187
  return row !== undefined;
189
188
  }
190
189
  /** Clears the pause once the queue is empty (inside `t`, holding the conversation row lock). */
191
- async function unpauseIfEmpty(t, conversationId) {
190
+ export async function unpauseIfEmpty(t, conversationId) {
192
191
  await t
193
192
  .updateTable("conversations")
194
193
  .set({ queue_paused: false, queue_pause_reason: null })
@@ -200,7 +199,7 @@ async function unpauseIfEmpty(t, conversationId) {
200
199
  .where("conversation_queue.conversation_id", "=", conversationId))))
201
200
  .execute();
202
201
  }
203
- const queueFull = () => new ApiError("conversation.queue_full", `A conversation can hold at most ${QUEUE_MAX_ITEMS} queued messages`);
202
+ export const queueFull = () => new ApiError("conversation.queue_full", `A conversation can hold at most ${QUEUE_MAX_ITEMS} queued messages`);
204
203
  /**
205
204
  * Sends the queue's head item as a `user_message` inside `t` (the caller holds the conversation
206
205
  * row lock and has checked the conversation is idle and not paused); returns the event, or null
@@ -250,278 +249,3 @@ export async function pauseQueueIn(t, conversationId) {
250
249
  .where("conversation_queue.conversation_id", "=", conversationId)))
251
250
  .execute();
252
251
  }
253
- /**
254
- * The queue API (owner only, as the conversation): list, add, edit the text, delete, send now and
255
- * resume. Every change publishes `changed: queue`.
256
- */
257
- export class ConversationQueue {
258
- d;
259
- constructor(d) {
260
- this.d = d;
261
- }
262
- async list(orgId, conversationId, accountId) {
263
- await this.d.conversations.get(orgId, conversationId, accountId);
264
- return this.d.db
265
- .transaction()
266
- .setIsolationLevel("repeatable read")
267
- .execute(async (t) => {
268
- const conv = await t
269
- .selectFrom("conversations")
270
- .select(["queue_paused", "queue_pause_reason"])
271
- .where("id", "=", conversationId)
272
- .executeTakeFirstOrThrow();
273
- const rows = await t
274
- .selectFrom("conversation_queue")
275
- .select(COLUMNS)
276
- .where("conversation_id", "=", conversationId)
277
- .orderBy("position")
278
- .execute();
279
- const reason = conv.queue_paused ? conv.queue_pause_reason : null;
280
- return {
281
- items: rows.map(toItem),
282
- paused: conv.queue_paused,
283
- ...(reason !== null && { pauseReason: reason }),
284
- };
285
- });
286
- }
287
- /**
288
- * Queues a message. `@` resources are read now with the caller's credentials and stored with the
289
- * item, and uploaded files are bound to the conversation now, so sending later needs nobody's
290
- * credentials. The same `clientMessageId` again returns the queued item (`created: false`), or,
291
- * when it was already sent, the sent `user_message` with `item: null`. Then `ensureRun`: on an
292
- * idle conversation the item goes out at once.
293
- */
294
- async add(orgId, conversationId, accountId, input) {
295
- const conv = await this.d.conversations.writable(orgId, conversationId, accountId);
296
- this.d.conversations.checkFilesSupported(input);
297
- const files = input.files ?? [];
298
- checkText(input.text, files.length, input.attachments?.length ?? 0, input.skill !== undefined);
299
- const prior = await this.prior(conversationId, input.clientMessageId);
300
- if (prior)
301
- return prior;
302
- // a cheap unlocked check first, so a full queue never reads `@` resources (slow, remote,
303
- // credentialed); the locked check below stays authoritative
304
- const { n: queued } = await this.d.db
305
- .selectFrom("conversation_queue")
306
- .select((eb) => eb.fn.countAll().as("n"))
307
- .where("conversation_id", "=", conversationId)
308
- .executeTakeFirstOrThrow();
309
- if (Number(queued) >= QUEUE_MAX_ITEMS)
310
- throw queueFull();
311
- await this.d.conversations.checkPick(orgId, conv, accountId, input);
312
- // a skill invocation is rendered now, like the `@` resources (spec §4.5)
313
- const invoked = await this.d.conversations.prepareQueuedSkill(orgId, conv, accountId, input);
314
- const extra = await this.d.conversations.resolveExtra(orgId, accountId, input);
315
- const skill = invoked === undefined || input.skill === undefined
316
- ? undefined
317
- : storedSkill(input.skill.name, invoked);
318
- const out = await this.d.db.transaction().execute(async (t) => {
319
- await t
320
- .selectFrom("conversations")
321
- .select("id")
322
- .where("id", "=", conversationId)
323
- .forUpdate()
324
- .executeTakeFirstOrThrow();
325
- const existing = await t
326
- .selectFrom("conversation_queue")
327
- .select(COLUMNS)
328
- .where("conversation_id", "=", conversationId)
329
- .where("client_message_id", "=", input.clientMessageId)
330
- .executeTakeFirst();
331
- if (existing)
332
- return { row: existing, created: false };
333
- if (await alreadySent(t, conversationId, input.clientMessageId))
334
- return null;
335
- const { n, last } = await t
336
- .selectFrom("conversation_queue")
337
- .select((eb) => [
338
- eb.fn.countAll().as("n"),
339
- eb.fn.max("position").as("last"),
340
- ])
341
- .where("conversation_id", "=", conversationId)
342
- .executeTakeFirstOrThrow();
343
- if (Number(n) >= QUEUE_MAX_ITEMS)
344
- throw queueFull();
345
- const blocks = await this.d.conversations.bindIn(t, orgId, conversationId, accountId, files);
346
- const fileMeta = blocks.flatMap((b) => (b.type === "image" || b.type === "document") && b.source.kind === "ref"
347
- ? [{ attachmentId: b.source.attachmentId, name: b.name ?? "", mediaType: b.mediaType }]
348
- : []);
349
- const row = await t
350
- .insertInto("conversation_queue")
351
- .values({
352
- id: randomUUID(),
353
- conversation_id: conversationId,
354
- account_id: accountId,
355
- position: last === null ? 1 : Number(last) + 1,
356
- text: noNul(input.text),
357
- content: payloadJson([
358
- ...(skill === undefined ? [] : [skill.first]),
359
- ...extra.blocks,
360
- ...blocks,
361
- ]),
362
- attachments: payloadJson(extra.attachments),
363
- files: JSON.stringify(fileMeta),
364
- client_message_id: input.clientMessageId,
365
- model: input.model === undefined ? null : JSON.stringify(input.model),
366
- effort: input.effort ?? null,
367
- skill: skill?.skill ?? null,
368
- })
369
- .returning(COLUMNS)
370
- .executeTakeFirstOrThrow();
371
- return { row, created: true };
372
- });
373
- if (out === null) {
374
- return ((await this.prior(conversationId, input.clientMessageId)) ?? { item: null, created: false });
375
- }
376
- if (out.created) {
377
- await this.d.eventLog.publishChanged(conversationId, "queue");
378
- await this.d.runs?.ensureRun(conversationId);
379
- }
380
- return { item: toItem(out.row), created: out.created };
381
- }
382
- /**
383
- * Changes a queued item's text (its resources and files stay as queued). A skill invocation's
384
- * text is its arguments: the skill is rendered again with them now (phase D Task 9).
385
- */
386
- async edit(orgId, conversationId, accountId, itemId, text) {
387
- const conv = await this.d.conversations.writable(orgId, conversationId, accountId);
388
- const before = await this.d.db
389
- .selectFrom("conversation_queue")
390
- .select("skill")
391
- .where("id", "=", itemId)
392
- .where("conversation_id", "=", conversationId)
393
- .executeTakeFirst();
394
- if (!before)
395
- throw itemNotFound();
396
- const was = before.skill;
397
- const invoked = was === null
398
- ? undefined
399
- : await this.d.conversations.prepareQueuedSkill(orgId, conv, accountId, {
400
- skill: { name: was.invokedAs },
401
- text,
402
- });
403
- const row = await this.d.db.transaction().execute(async (t) => {
404
- const cur = await t
405
- .selectFrom("conversation_queue")
406
- .select(["attachments", "files", "content", "skill"])
407
- .where("id", "=", itemId)
408
- .where("conversation_id", "=", conversationId)
409
- .forUpdate()
410
- .executeTakeFirst();
411
- if (!cur)
412
- throw itemNotFound();
413
- const skill = cur.skill;
414
- checkText(text, cur.files.length, cur.attachments.length, skill !== null);
415
- // an invocation's first block is its rendered text: replace it and the record
416
- const stored = skill === null || invoked === undefined ? undefined : storedSkill(skill.invokedAs, invoked);
417
- return t
418
- .updateTable("conversation_queue")
419
- .set({
420
- text: noNul(text),
421
- updated_at: sql `now()`,
422
- ...(stored !== undefined && {
423
- skill: stored.skill,
424
- content: payloadJson([stored.first, ...cur.content.slice(1)]),
425
- }),
426
- })
427
- .where("id", "=", itemId)
428
- .returning(COLUMNS)
429
- .executeTakeFirstOrThrow();
430
- });
431
- await this.d.eventLog.publishChanged(conversationId, "queue");
432
- return toItem(row);
433
- }
434
- async remove(orgId, conversationId, accountId, itemId) {
435
- await this.d.conversations.writable(orgId, conversationId, accountId);
436
- await this.d.db.transaction().execute(async (t) => {
437
- await this.lockConversation(t, conversationId);
438
- const gone = await t
439
- .deleteFrom("conversation_queue")
440
- .where("id", "=", itemId)
441
- .where("conversation_id", "=", conversationId)
442
- .returning("id")
443
- .executeTakeFirst();
444
- if (!gone)
445
- throw itemNotFound();
446
- await unpauseIfEmpty(t, conversationId);
447
- });
448
- await this.d.eventLog.publishChanged(conversationId, "queue");
449
- }
450
- /**
451
- * Sends a queued item now: it leaves the queue and is posted as a user message in the same
452
- * transaction (an interjection when a run is active; the items before it keep their place).
453
- * Racing the dispatcher, exactly one of them takes the item; the loser sees it gone (404).
454
- */
455
- async sendNow(orgId, conversationId, accountId, itemId) {
456
- await this.d.conversations.writable(orgId, conversationId, accountId);
457
- const { event, fresh, switched } = await this.d.db.transaction().execute(async (t) => {
458
- await this.lockConversation(t, conversationId);
459
- const head = await t
460
- .selectFrom("conversation_queue")
461
- .select(["skill", "client_message_id"])
462
- .where("id", "=", itemId)
463
- .where("conversation_id", "=", conversationId)
464
- .executeTakeFirst();
465
- if (!head)
466
- throw itemNotFound();
467
- // the skill is checked again, as at dispatch; a refused item stays queued
468
- if (!(await alreadySent(t, conversationId, head.client_message_id))) {
469
- const blocked = await queuedSkillBlocked(t, conversationId, head);
470
- if (blocked !== null) {
471
- throw notInvocable(blocked, head.skill.invokedAs);
472
- }
473
- }
474
- const row = await t
475
- .deleteFrom("conversation_queue")
476
- .where("id", "=", itemId)
477
- .where("conversation_id", "=", conversationId)
478
- .returning(COLUMNS)
479
- .executeTakeFirst();
480
- if (!row)
481
- throw itemNotFound();
482
- const sent = await alreadySent(t, conversationId, row.client_message_id);
483
- const out = await appendQueuedIn(t, this.d.eventLog, conversationId, row);
484
- await unpauseIfEmpty(t, conversationId);
485
- return { ...out, fresh: !sent };
486
- });
487
- if (fresh)
488
- await this.d.eventLog.notify(conversationId, event.seq);
489
- if (switched)
490
- await this.d.eventLog.publishChanged(conversationId, "selection");
491
- await this.d.eventLog.publishChanged(conversationId, "queue");
492
- await this.d.runs?.ensureRun(conversationId);
493
- return event;
494
- }
495
- /** "Continue sending": clears the pause and lets `ensureRun` send the head item. */
496
- async resume(orgId, conversationId, accountId) {
497
- await this.d.conversations.writable(orgId, conversationId, accountId);
498
- await this.d.db
499
- .updateTable("conversations")
500
- .set({ queue_paused: false, queue_pause_reason: null })
501
- .where("id", "=", conversationId)
502
- .execute();
503
- await this.d.eventLog.publishChanged(conversationId, "queue");
504
- await this.d.runs?.ensureRun(conversationId);
505
- }
506
- /** A queued item or a sent message for this client id (outside any transaction). */
507
- async prior(conversationId, clientMessageId) {
508
- const row = await this.d.db
509
- .selectFrom("conversation_queue")
510
- .select(COLUMNS)
511
- .where("conversation_id", "=", conversationId)
512
- .where("client_message_id", "=", clientMessageId)
513
- .executeTakeFirst();
514
- if (row)
515
- return { item: toItem(row), created: false };
516
- const event = await this.d.eventLog.findByIdem(conversationId, userMessageIdemKey(clientMessageId));
517
- return event ? { item: null, event, created: false } : null;
518
- }
519
- async lockConversation(t, conversationId) {
520
- await t
521
- .selectFrom("conversations")
522
- .select("id")
523
- .where("id", "=", conversationId)
524
- .forUpdate()
525
- .executeTakeFirstOrThrow();
526
- }
527
- }
@@ -0,0 +1,60 @@
1
+ import { KernelDb } from "../infra/database/kernel-db.js";
2
+ import { TransactionHost } from "../infra/database/transaction-host.js";
3
+ import { ConversationsService, type RunControl } from "./conversations.service.js";
4
+ import { EventLog } from "./event-log.js";
5
+ import type { ConversationEvent } from "./events.js";
6
+ import { type QueueInput, type QueueItem, type QueuePauseReason } from "./queue.js";
7
+ /**
8
+ * The queue API (owner only, as the conversation): list, add, edit the text, delete, send now and
9
+ * resume. Every change publishes `changed: queue`.
10
+ */
11
+ export declare class ConversationQueue {
12
+ private readonly db;
13
+ private readonly eventLog;
14
+ private readonly conversations;
15
+ /** Starts the conversation's next run (`ensureRun`). */
16
+ private readonly runs;
17
+ readonly txHost: TransactionHost;
18
+ constructor(db: KernelDb, eventLog: Pick<EventLog, "appendIn" | "notify" | "publishChanged" | "findByIdem">, conversations: Pick<ConversationsService, "get" | "writable" | "resolveExtra" | "bindIn" | "checkPick" | "prepareQueuedSkill">,
19
+ /** Starts the conversation's next run (`ensureRun`). */
20
+ runs: Pick<RunControl, "ensureRun">, txHost: TransactionHost);
21
+ list(orgId: string, conversationId: string, accountId: string): Promise<{
22
+ items: QueueItem[];
23
+ paused: boolean;
24
+ pauseReason?: QueuePauseReason;
25
+ }>;
26
+ private listIn;
27
+ /**
28
+ * Queues a message. `@` resources are read now with the caller's credentials and stored with the
29
+ * item, and uploaded files are bound to the conversation now, so sending later needs nobody's
30
+ * credentials. The same `clientMessageId` again returns the queued item (`created: false`), or,
31
+ * when it was already sent, the sent `user_message` with `item: null`. Then `ensureRun`: on an
32
+ * idle conversation the item goes out at once.
33
+ */
34
+ add(orgId: string, conversationId: string, accountId: string, input: QueueInput): Promise<{
35
+ item: QueueItem | null;
36
+ event?: ConversationEvent;
37
+ created: boolean;
38
+ }>;
39
+ private addIn;
40
+ /**
41
+ * Changes a queued item's text (its resources and files stay as queued). A skill invocation's
42
+ * text is its arguments: the skill is rendered again with them now.
43
+ */
44
+ edit(orgId: string, conversationId: string, accountId: string, itemId: string, text: string): Promise<QueueItem>;
45
+ private editIn;
46
+ remove(orgId: string, conversationId: string, accountId: string, itemId: string): Promise<void>;
47
+ private removeIn;
48
+ /**
49
+ * Sends a queued item now: it leaves the queue and is posted as a user message in the same
50
+ * transaction (an interjection when a run is active; the items before it keep their place).
51
+ * Racing the dispatcher, exactly one of them takes the item; the loser sees it gone (404).
52
+ */
53
+ sendNow(orgId: string, conversationId: string, accountId: string, itemId: string): Promise<ConversationEvent>;
54
+ private sendNowIn;
55
+ /** "Continue sending": clears the pause and lets `ensureRun` send the head item. */
56
+ resume(orgId: string, conversationId: string, accountId: string): Promise<void>;
57
+ /** A queued item or a sent message for this client id (outside any transaction). */
58
+ private prior;
59
+ private lockConversation;
60
+ }