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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (670) hide show
  1. package/dist/admin/admin.controller.d.ts +17 -17
  2. package/dist/admin/admin.controller.js +43 -26
  3. package/dist/admin/admin.module.d.ts +3 -0
  4. package/dist/admin/admin.module.js +22 -0
  5. package/dist/admin/extensions.controller.d.ts +14 -14
  6. package/dist/admin/extensions.controller.js +30 -17
  7. package/dist/admin/setup-lock.d.ts +16 -0
  8. package/dist/admin/setup-lock.js +47 -0
  9. package/dist/admin/setup.controller.d.ts +8 -8
  10. package/dist/admin/setup.controller.js +27 -25
  11. package/dist/admin/setup.service.d.ts +19 -27
  12. package/dist/admin/setup.service.js +61 -61
  13. package/dist/agents/agent-lookup.d.ts +53 -0
  14. package/dist/agents/agent-lookup.js +187 -0
  15. package/dist/agents/agents.controller.d.ts +1 -1
  16. package/dist/agents/agents.controller.js +14 -8
  17. package/dist/agents/agents.module.d.ts +7 -0
  18. package/dist/agents/agents.module.js +41 -0
  19. package/dist/agents/agents.service.d.ts +39 -58
  20. package/dist/agents/agents.service.js +280 -335
  21. package/dist/agents/definition.d.ts +39 -8
  22. package/dist/agents/definition.js +201 -17
  23. package/dist/agents/models.controller.d.ts +1 -1
  24. package/dist/agents/models.controller.js +2 -2
  25. package/dist/agents/templates.controller.d.ts +1 -1
  26. package/dist/agents/templates.controller.js +2 -2
  27. package/dist/agents/templates.d.ts +6 -8
  28. package/dist/agents/templates.js +39 -8
  29. package/dist/app.d.ts +93 -0
  30. package/dist/app.js +150 -0
  31. package/dist/catalog/admin-catalog.controller.d.ts +3 -3
  32. package/dist/catalog/admin-catalog.controller.js +27 -13
  33. package/dist/catalog/catalog-content.d.ts +185 -0
  34. package/dist/catalog/catalog-content.js +326 -0
  35. package/dist/catalog/catalog-items.d.ts +186 -0
  36. package/dist/catalog/catalog-items.js +410 -0
  37. package/dist/catalog/catalog.module.d.ts +14 -0
  38. package/dist/catalog/catalog.module.js +71 -0
  39. package/dist/catalog/catalog.service.d.ts +34 -188
  40. package/dist/catalog/catalog.service.js +155 -489
  41. package/dist/catalog/claude/agents.js +13 -10
  42. package/dist/catalog/cli.d.ts +3 -2
  43. package/dist/catalog/cli.js +13 -31
  44. package/dist/catalog/job-ids.d.ts +15 -0
  45. package/dist/catalog/job-ids.js +15 -0
  46. package/dist/catalog/jobs.d.ts +27 -0
  47. package/dist/catalog/jobs.js +70 -0
  48. package/dist/catalog/locks.d.ts +24 -0
  49. package/dist/catalog/locks.js +63 -0
  50. package/dist/catalog/marketplaces.controller.d.ts +4 -4
  51. package/dist/catalog/marketplaces.controller.js +22 -11
  52. package/dist/catalog/marketplaces.service.d.ts +31 -14
  53. package/dist/catalog/marketplaces.service.js +330 -256
  54. package/dist/catalog/org-catalog.controller.d.ts +4 -3
  55. package/dist/catalog/org-catalog.controller.js +29 -14
  56. package/dist/catalog/org-catalog.service.d.ts +32 -198
  57. package/dist/catalog/org-catalog.service.js +159 -400
  58. package/dist/catalog/plugin-import.d.ts +73 -34
  59. package/dist/catalog/plugin-import.js +356 -217
  60. package/dist/catalog/plugin-install.d.ts +83 -41
  61. package/dist/catalog/plugin-install.js +421 -269
  62. package/dist/catalog/plugin-upgrade.d.ts +59 -4
  63. package/dist/catalog/plugin-upgrade.js +407 -282
  64. package/dist/catalog/requests.service.d.ts +27 -15
  65. package/dist/catalog/requests.service.js +201 -145
  66. package/dist/catalog/upgrade-targets.d.ts +4 -7
  67. package/dist/channels/actions.d.ts +6 -4
  68. package/dist/channels/actions.js +1 -1
  69. package/dist/channels/cards.d.ts +10 -4
  70. package/dist/channels/cards.js +16 -8
  71. package/dist/channels/channels.module.d.ts +40 -0
  72. package/dist/channels/channels.module.js +128 -0
  73. package/dist/channels/connections.controller.d.ts +1 -1
  74. package/dist/channels/connections.controller.js +11 -6
  75. package/dist/channels/connections.service.d.ts +43 -21
  76. package/dist/channels/connections.service.js +236 -131
  77. package/dist/channels/inbound.d.ts +34 -38
  78. package/dist/channels/inbound.js +107 -41
  79. package/dist/channels/job-ids.d.ts +10 -0
  80. package/dist/channels/job-ids.js +10 -0
  81. package/dist/channels/jobs.d.ts +85 -0
  82. package/dist/channels/jobs.js +157 -0
  83. package/dist/channels/outbound.d.ts +60 -82
  84. package/dist/channels/outbound.js +165 -194
  85. package/dist/channels/supervisor.d.ts +88 -46
  86. package/dist/channels/supervisor.js +230 -132
  87. package/dist/channels/threads.d.ts +29 -8
  88. package/dist/channels/threads.js +71 -13
  89. package/dist/channels/webhook.d.ts +20 -14
  90. package/dist/channels/webhook.js +51 -20
  91. package/dist/config/load.d.ts +3 -2
  92. package/dist/config/load.js +3 -2
  93. package/dist/config/nacos-source.js +11 -2
  94. package/dist/config/schema.d.ts +1 -0
  95. package/dist/config/schema.js +12 -6
  96. package/dist/conversations/access.d.ts +29 -0
  97. package/dist/conversations/access.js +86 -0
  98. package/dist/conversations/artifacts.d.ts +11 -11
  99. package/dist/conversations/artifacts.js +36 -10
  100. package/dist/conversations/attachments.controller.d.ts +1 -1
  101. package/dist/conversations/attachments.controller.js +8 -6
  102. package/dist/conversations/attachments.module.d.ts +7 -0
  103. package/dist/conversations/attachments.module.js +25 -0
  104. package/dist/conversations/attachments.service.d.ts +30 -22
  105. package/dist/conversations/attachments.service.js +119 -46
  106. package/dist/conversations/conversations.controller.d.ts +8 -7
  107. package/dist/conversations/conversations.controller.js +59 -29
  108. package/dist/conversations/conversations.module.d.ts +8 -0
  109. package/dist/conversations/conversations.module.js +69 -0
  110. package/dist/conversations/conversations.service.d.ts +40 -38
  111. package/dist/conversations/conversations.service.js +130 -140
  112. package/dist/conversations/event-log.d.ts +39 -18
  113. package/dist/conversations/event-log.js +93 -27
  114. package/dist/conversations/events.d.ts +23 -3
  115. package/dist/conversations/events.js +26 -14
  116. package/dist/conversations/files.d.ts +10 -10
  117. package/dist/conversations/files.js +37 -11
  118. package/dist/conversations/idem-keys.d.ts +5 -0
  119. package/dist/conversations/idem-keys.js +5 -0
  120. package/dist/conversations/job-ids.d.ts +6 -0
  121. package/dist/conversations/job-ids.js +6 -0
  122. package/dist/conversations/outputs-read.d.ts +11 -11
  123. package/dist/conversations/outputs-read.js +31 -7
  124. package/dist/conversations/queue.d.ts +48 -56
  125. package/dist/conversations/queue.js +13 -289
  126. package/dist/conversations/queue.service.d.ts +60 -0
  127. package/dist/conversations/queue.service.js +343 -0
  128. package/dist/conversations/sandbox-status.d.ts +13 -10
  129. package/dist/conversations/sandbox-status.js +36 -8
  130. package/dist/conversations/titles.d.ts +71 -24
  131. package/dist/conversations/titles.js +159 -63
  132. package/dist/ctx/bus.js +9 -3
  133. package/dist/ctx/create-ctx.d.ts +6 -0
  134. package/dist/ctx/create-ctx.js +7 -9
  135. package/dist/ctx/lock.d.ts +7 -3
  136. package/dist/ctx/lock.js +9 -20
  137. package/dist/ctx/secrets.d.ts +10 -2
  138. package/dist/ctx/secrets.js +7 -3
  139. package/dist/db/kernel-schema.d.ts +4 -4
  140. package/dist/db/pool.d.ts +5 -0
  141. package/dist/db/pool.js +1 -0
  142. package/dist/errors.d.ts +1 -0
  143. package/dist/errors.js +1 -0
  144. package/dist/evals/budget.d.ts +42 -21
  145. package/dist/evals/budget.js +114 -62
  146. package/dist/evals/evals.module.d.ts +31 -0
  147. package/dist/evals/evals.module.js +114 -0
  148. package/dist/evals/jobs.d.ts +20 -0
  149. package/dist/evals/jobs.js +45 -0
  150. package/dist/evals/recorded-tools.d.ts +27 -1
  151. package/dist/evals/recorded-tools.js +85 -10
  152. package/dist/evals/run-replay.d.ts +61 -8
  153. package/dist/evals/run-replay.js +159 -85
  154. package/dist/evals/runs.controller.d.ts +1 -1
  155. package/dist/evals/runs.controller.js +17 -8
  156. package/dist/evals/runs.service.d.ts +23 -45
  157. package/dist/evals/runs.service.js +245 -234
  158. package/dist/evals/sets.controller.d.ts +1 -1
  159. package/dist/evals/sets.controller.js +17 -8
  160. package/dist/evals/sets.service.d.ts +22 -6
  161. package/dist/evals/sets.service.js +248 -194
  162. package/dist/evals/snapshot.d.ts +2 -2
  163. package/dist/evals/step-replay.d.ts +2 -2
  164. package/dist/evals/step-replay.js +1 -1
  165. package/dist/evals/trajectory.controller.d.ts +1 -1
  166. package/dist/evals/trajectory.controller.js +11 -7
  167. package/dist/evals/trajectory.d.ts +2 -2
  168. package/dist/evals/trajectory.service.d.ts +5 -4
  169. package/dist/evals/trajectory.service.js +30 -7
  170. package/dist/evals/worker.d.ts +44 -27
  171. package/dist/evals/worker.js +220 -121
  172. package/dist/extensions/admin-ops.d.ts +61 -33
  173. package/dist/extensions/admin-ops.js +248 -154
  174. package/dist/extensions/admin-view.d.ts +38 -27
  175. package/dist/extensions/admin-view.js +126 -55
  176. package/dist/extensions/approvals.d.ts +12 -8
  177. package/dist/extensions/approvals.js +73 -46
  178. package/dist/extensions/blobs.d.ts +27 -10
  179. package/dist/extensions/blobs.js +111 -45
  180. package/dist/extensions/bootstrap.d.ts +58 -31
  181. package/dist/extensions/bootstrap.js +175 -121
  182. package/dist/extensions/cli.d.ts +20 -10
  183. package/dist/extensions/cli.js +41 -96
  184. package/dist/extensions/config-issues.d.ts +7 -0
  185. package/dist/extensions/config-issues.js +31 -0
  186. package/dist/extensions/deployment-config-store.d.ts +49 -0
  187. package/dist/extensions/deployment-config-store.js +133 -0
  188. package/dist/extensions/deployment-config.d.ts +58 -67
  189. package/dist/extensions/deployment-config.js +202 -230
  190. package/dist/extensions/enabled.d.ts +5 -5
  191. package/dist/extensions/extensions.module.d.ts +8 -0
  192. package/dist/extensions/extensions.module.js +77 -0
  193. package/dist/extensions/hooks.d.ts +3 -2
  194. package/dist/extensions/hooks.js +1 -1
  195. package/dist/extensions/host.d.ts +72 -68
  196. package/dist/extensions/host.js +191 -152
  197. package/dist/extensions/installs.d.ts +49 -16
  198. package/dist/extensions/installs.js +128 -32
  199. package/dist/extensions/job-ids.d.ts +6 -0
  200. package/dist/extensions/job-ids.js +6 -0
  201. package/dist/extensions/lifecycle-topics.d.ts +18 -0
  202. package/dist/extensions/lifecycle-topics.js +18 -0
  203. package/dist/extensions/lifecycle.d.ts +35 -47
  204. package/dist/extensions/lifecycle.js +103 -39
  205. package/dist/extensions/locks.d.ts +33 -0
  206. package/dist/extensions/locks.js +86 -0
  207. package/dist/extensions/migrate-lock.d.ts +3 -4
  208. package/dist/extensions/org-config.controller.d.ts +1 -1
  209. package/dist/extensions/org-config.controller.js +8 -5
  210. package/dist/extensions/org-config.d.ts +48 -46
  211. package/dist/extensions/org-config.js +284 -226
  212. package/dist/extensions/registry.d.ts +50 -2
  213. package/dist/extensions/registry.js +89 -4
  214. package/dist/extensions/sources.d.ts +12 -8
  215. package/dist/extensions/sources.js +34 -13
  216. package/dist/files/files.module.d.ts +3 -0
  217. package/dist/files/files.module.js +22 -0
  218. package/dist/files/previewers.controller.d.ts +7 -2
  219. package/dist/files/previewers.controller.js +17 -9
  220. package/dist/files/previewers.d.ts +13 -18
  221. package/dist/files/previewers.js +83 -36
  222. package/dist/http/adapter.d.ts +3 -0
  223. package/dist/http/adapter.js +25 -0
  224. package/dist/http/api.module.d.ts +3 -110
  225. package/dist/http/api.module.js +47 -355
  226. package/dist/http/app.d.ts +11 -15
  227. package/dist/http/app.js +17 -62
  228. package/dist/http/error-filter.module.d.ts +5 -0
  229. package/dist/http/error-filter.module.js +18 -0
  230. package/dist/http/error.filter.js +2 -2
  231. package/dist/identity/accounts.d.ts +82 -29
  232. package/dist/identity/accounts.js +294 -175
  233. package/dist/identity/api-tokens.d.ts +11 -7
  234. package/dist/identity/api-tokens.js +71 -44
  235. package/dist/identity/audit.d.ts +7 -4
  236. package/dist/identity/audit.js +5 -1
  237. package/dist/identity/auth.controller.d.ts +11 -10
  238. package/dist/identity/auth.controller.js +31 -25
  239. package/dist/identity/auth.guard.d.ts +3 -3
  240. package/dist/identity/auth.guard.js +6 -4
  241. package/dist/identity/binding.d.ts +9 -11
  242. package/dist/identity/binding.js +41 -13
  243. package/dist/identity/enterprise-admin.d.ts +18 -12
  244. package/dist/identity/enterprise-admin.js +67 -13
  245. package/dist/identity/external-identity-lock.d.ts +17 -0
  246. package/dist/identity/external-identity-lock.js +39 -0
  247. package/dist/identity/external.d.ts +19 -15
  248. package/dist/identity/external.js +163 -125
  249. package/dist/identity/identity.module.d.ts +6 -0
  250. package/dist/identity/identity.module.js +56 -0
  251. package/dist/identity/me.controller.d.ts +16 -15
  252. package/dist/identity/me.controller.js +37 -31
  253. package/dist/identity/sessions.d.ts +12 -10
  254. package/dist/identity/sessions.js +74 -42
  255. package/dist/identity/settings.d.ts +20 -14
  256. package/dist/identity/settings.js +86 -58
  257. package/dist/identity/sso.controller.d.ts +7 -7
  258. package/dist/identity/sso.controller.js +13 -9
  259. package/dist/identity/sso.d.ts +9 -12
  260. package/dist/identity/sso.js +54 -24
  261. package/dist/inbox/inbox.module.d.ts +3 -0
  262. package/dist/inbox/inbox.module.js +22 -0
  263. package/dist/inbox/inbox.service.d.ts +7 -9
  264. package/dist/inbox/inbox.service.js +32 -11
  265. package/dist/index.d.ts +16 -11
  266. package/dist/index.js +9 -6
  267. package/dist/infra/cache/cache.module.d.ts +3 -0
  268. package/dist/infra/cache/cache.module.js +16 -0
  269. package/dist/infra/cache/cache.service.d.ts +21 -0
  270. package/dist/infra/cache/cache.service.js +80 -0
  271. package/dist/infra/cache/cacheable.decorator.d.ts +32 -0
  272. package/dist/infra/cache/cacheable.decorator.js +83 -0
  273. package/dist/infra/cli/kernel-cli.module.d.ts +66 -0
  274. package/dist/infra/cli/kernel-cli.module.js +165 -0
  275. package/dist/infra/close-within.d.ts +15 -0
  276. package/dist/infra/close-within.js +36 -0
  277. package/dist/infra/config/config.module.d.ts +13 -0
  278. package/dist/infra/config/config.module.js +39 -0
  279. package/dist/infra/config/kernel-config.service.d.ts +25 -0
  280. package/dist/infra/config/kernel-config.service.js +126 -0
  281. package/dist/infra/database/after-commit.d.ts +6 -0
  282. package/dist/infra/database/after-commit.js +9 -0
  283. package/dist/infra/database/database.module.d.ts +25 -0
  284. package/dist/infra/database/database.module.js +90 -0
  285. package/dist/infra/database/kernel-db.d.ts +22 -0
  286. package/dist/infra/database/kernel-db.js +65 -0
  287. package/dist/infra/database/transaction-host.d.ts +50 -0
  288. package/dist/infra/database/transaction-host.js +125 -0
  289. package/dist/infra/database/transactional.decorator.d.ts +15 -0
  290. package/dist/infra/database/transactional.decorator.js +27 -0
  291. package/dist/infra/database/xact-lock.d.ts +17 -0
  292. package/dist/infra/database/xact-lock.js +43 -0
  293. package/dist/infra/events/kernel-events.d.ts +96 -0
  294. package/dist/infra/events/kernel-events.js +65 -0
  295. package/dist/infra/health/health.controller.d.ts +26 -0
  296. package/dist/infra/health/health.controller.js +104 -0
  297. package/dist/infra/health/health.module.d.ts +9 -0
  298. package/dist/infra/health/health.module.js +24 -0
  299. package/dist/infra/health/health.options.d.ts +10 -0
  300. package/dist/infra/health/health.options.js +15 -0
  301. package/dist/infra/health/shutdown-state.d.ts +6 -0
  302. package/dist/infra/health/shutdown-state.js +2 -0
  303. package/dist/infra/lifecycle/graceful-shutdown.module.d.ts +6 -0
  304. package/dist/infra/lifecycle/graceful-shutdown.module.js +23 -0
  305. package/dist/infra/lifecycle/graceful-shutdown.service.d.ts +70 -0
  306. package/dist/infra/lifecycle/graceful-shutdown.service.js +135 -0
  307. package/dist/infra/lifecycle/process-guards.d.ts +52 -0
  308. package/dist/infra/lifecycle/process-guards.js +86 -0
  309. package/dist/infra/lifecycle/shutdown-signals.d.ts +30 -0
  310. package/dist/infra/lifecycle/shutdown-signals.js +48 -0
  311. package/dist/infra/lock/key-template.d.ts +13 -0
  312. package/dist/infra/lock/key-template.js +46 -0
  313. package/dist/infra/lock/lock.module.d.ts +3 -0
  314. package/dist/infra/lock/lock.module.js +16 -0
  315. package/dist/infra/lock/lock.service.d.ts +120 -0
  316. package/dist/infra/lock/lock.service.js +343 -0
  317. package/dist/infra/lock/shared-lease.d.ts +44 -0
  318. package/dist/infra/lock/shared-lease.js +121 -0
  319. package/dist/infra/lock/with-lock.decorator.d.ts +28 -0
  320. package/dist/infra/lock/with-lock.decorator.js +49 -0
  321. package/dist/infra/logging/logging.module.d.ts +16 -0
  322. package/dist/infra/logging/logging.module.js +34 -0
  323. package/dist/infra/queue/configured-processor.d.ts +18 -0
  324. package/dist/infra/queue/configured-processor.js +23 -0
  325. package/dist/infra/queue/job-failure.d.ts +18 -0
  326. package/dist/infra/queue/job-failure.js +26 -0
  327. package/dist/infra/queue/queue-shutdown.d.ts +27 -0
  328. package/dist/infra/queue/queue-shutdown.js +81 -0
  329. package/dist/infra/queue/queue.module.d.ts +16 -0
  330. package/dist/infra/queue/queue.module.js +61 -0
  331. package/dist/infra/queue/redis-connection.d.ts +7 -0
  332. package/dist/infra/queue/redis-connection.js +18 -0
  333. package/dist/infra/queue/retired-schedulers.d.ts +7 -0
  334. package/dist/infra/queue/retired-schedulers.js +9 -0
  335. package/dist/infra/queue/run-job.d.ts +16 -0
  336. package/dist/infra/queue/run-job.js +19 -0
  337. package/dist/infra/redis/redis.module.d.ts +24 -0
  338. package/dist/infra/redis/redis.module.js +87 -0
  339. package/dist/infra/schedule/cron-tick.d.ts +12 -0
  340. package/dist/infra/schedule/cron-tick.js +25 -0
  341. package/dist/infra/schedule/locked-cron.decorator.d.ts +27 -0
  342. package/dist/infra/schedule/locked-cron.decorator.js +53 -0
  343. package/dist/infra/schedule/locked-interval.d.ts +69 -0
  344. package/dist/infra/schedule/locked-interval.js +190 -0
  345. package/dist/infra/schedule/locked-tick.d.ts +90 -0
  346. package/dist/infra/schedule/locked-tick.js +137 -0
  347. package/dist/infra/schedule/schedule.module.d.ts +8 -0
  348. package/dist/infra/schedule/schedule.module.js +27 -0
  349. package/dist/infra/schedule/scheduled-runs.d.ts +69 -0
  350. package/dist/infra/schedule/scheduled-runs.js +163 -0
  351. package/dist/infra/swagger/swagger.d.ts +16 -0
  352. package/dist/infra/swagger/swagger.js +31 -0
  353. package/dist/infra/throttler/credential-throttler.d.ts +35 -0
  354. package/dist/infra/throttler/credential-throttler.js +77 -0
  355. package/dist/infra/throttler/named-throttlers.d.ts +31 -0
  356. package/dist/infra/throttler/named-throttlers.js +119 -0
  357. package/dist/infra/throttler/redis-throttler-storage.d.ts +38 -0
  358. package/dist/infra/throttler/redis-throttler-storage.js +130 -0
  359. package/dist/infra/throttler/throttler.guard.d.ts +23 -0
  360. package/dist/infra/throttler/throttler.guard.js +68 -0
  361. package/dist/infra/throttler/throttler.module.d.ts +15 -0
  362. package/dist/infra/throttler/throttler.module.js +53 -0
  363. package/dist/infra/tokens.d.ts +15 -0
  364. package/dist/infra/tokens.js +15 -0
  365. package/dist/infra/validation/create-zod-dto.d.ts +23 -0
  366. package/dist/infra/validation/create-zod-dto.js +35 -0
  367. package/dist/infra/validation/parse-with-zod.d.ts +7 -0
  368. package/dist/infra/validation/parse-with-zod.js +12 -0
  369. package/dist/infra/validation/validation.module.d.ts +3 -0
  370. package/dist/infra/validation/validation.module.js +16 -0
  371. package/dist/infra/validation/zod-params.d.ts +7 -0
  372. package/dist/infra/validation/zod-params.js +42 -0
  373. package/dist/infra/validation/zod-validation.pipe.d.ts +11 -0
  374. package/dist/infra/validation/zod-validation.pipe.js +31 -0
  375. package/dist/kernel.d.ts +9 -244
  376. package/dist/kernel.js +8 -1305
  377. package/dist/kernel.module.d.ts +17 -0
  378. package/dist/kernel.module.js +136 -0
  379. package/dist/lifecycle/kernel-lifecycle.d.ts +140 -0
  380. package/dist/lifecycle/kernel-lifecycle.js +456 -0
  381. package/dist/lifecycle/tokens.d.ts +3 -0
  382. package/dist/lifecycle/tokens.js +3 -0
  383. package/dist/log-context.d.ts +2 -0
  384. package/dist/log-context.js +4 -0
  385. package/dist/models/models.module.d.ts +3 -0
  386. package/dist/models/models.module.js +24 -0
  387. package/dist/models/prices.d.ts +8 -2
  388. package/dist/models/prices.js +65 -37
  389. package/dist/models/purposes.controller.d.ts +1 -1
  390. package/dist/models/purposes.controller.js +5 -6
  391. package/dist/models/purposes.d.ts +35 -13
  392. package/dist/models/purposes.js +101 -51
  393. package/dist/orgs/directory-sync.controller.d.ts +1 -1
  394. package/dist/orgs/directory-sync.controller.js +2 -2
  395. package/dist/orgs/directory-sync.d.ts +61 -31
  396. package/dist/orgs/directory-sync.js +212 -125
  397. package/dist/orgs/invitations.controller.d.ts +8 -8
  398. package/dist/orgs/invitations.controller.js +27 -26
  399. package/dist/orgs/invitations.service.d.ts +12 -9
  400. package/dist/orgs/invitations.service.js +130 -92
  401. package/dist/orgs/job-ids.d.ts +8 -0
  402. package/dist/orgs/job-ids.js +8 -0
  403. package/dist/orgs/members.service.d.ts +19 -12
  404. package/dist/orgs/members.service.js +161 -117
  405. package/dist/orgs/offboarding.d.ts +54 -57
  406. package/dist/orgs/offboarding.js +161 -71
  407. package/dist/orgs/org-lock.d.ts +28 -19
  408. package/dist/orgs/org-lock.js +81 -35
  409. package/dist/orgs/org.guard.d.ts +1 -1
  410. package/dist/orgs/org.guard.js +2 -2
  411. package/dist/orgs/orgs.controller.d.ts +13 -13
  412. package/dist/orgs/orgs.controller.js +29 -17
  413. package/dist/orgs/orgs.module.d.ts +6 -0
  414. package/dist/orgs/orgs.module.js +68 -0
  415. package/dist/orgs/orgs.service.d.ts +30 -19
  416. package/dist/orgs/orgs.service.js +139 -86
  417. package/dist/orgs/settings.controller.d.ts +1 -1
  418. package/dist/orgs/settings.controller.js +8 -6
  419. package/dist/orgs/settings.service.d.ts +16 -10
  420. package/dist/orgs/settings.service.js +77 -48
  421. package/dist/overrides.d.ts +56 -0
  422. package/dist/overrides.js +30 -0
  423. package/dist/roles/gateway-role.d.ts +43 -0
  424. package/dist/roles/gateway-role.js +98 -0
  425. package/dist/roles/gateway.module.d.ts +8 -0
  426. package/dist/roles/gateway.module.js +28 -0
  427. package/dist/roles/worker-role.d.ts +63 -0
  428. package/dist/roles/worker-role.js +144 -0
  429. package/dist/roles/worker.module.d.ts +14 -0
  430. package/dist/roles/worker.module.js +90 -0
  431. package/dist/runtime/abort.js +19 -2
  432. package/dist/runtime/checkpointer.d.ts +8 -3
  433. package/dist/runtime/checkpointer.js +87 -55
  434. package/dist/runtime/context/build.d.ts +6 -6
  435. package/dist/runtime/context/build.js +18 -8
  436. package/dist/runtime/context/claude-tools.d.ts +2 -1
  437. package/dist/runtime/context/claude-tools.js +9 -10
  438. package/dist/runtime/context/legacy-text.d.ts +22 -0
  439. package/dist/runtime/context/legacy-text.js +37 -0
  440. package/dist/runtime/context/skills.d.ts +29 -11
  441. package/dist/runtime/context/skills.js +37 -30
  442. package/dist/runtime/conversation-lock.d.ts +20 -11
  443. package/dist/runtime/conversation-lock.js +62 -72
  444. package/dist/runtime/hook-calls.d.ts +3 -3
  445. package/dist/runtime/hook-calls.js +1 -6
  446. package/dist/runtime/job-ids.d.ts +10 -0
  447. package/dist/runtime/job-ids.js +10 -0
  448. package/dist/runtime/langgraph-loop.js +1 -1
  449. package/dist/runtime/loop.d.ts +8 -1
  450. package/dist/runtime/loop.js +14 -0
  451. package/dist/runtime/maintenance-queue.d.ts +10 -0
  452. package/dist/runtime/maintenance-queue.js +10 -0
  453. package/dist/runtime/maintenance.d.ts +45 -74
  454. package/dist/runtime/maintenance.js +139 -137
  455. package/dist/runtime/model-call.d.ts +7 -4
  456. package/dist/runtime/model-call.js +25 -58
  457. package/dist/runtime/providers.d.ts +17 -6
  458. package/dist/runtime/providers.js +66 -25
  459. package/dist/runtime/quota.d.ts +17 -3
  460. package/dist/runtime/quota.js +27 -2
  461. package/dist/runtime/retired-schedulers.d.ts +7 -0
  462. package/dist/runtime/retired-schedulers.js +31 -0
  463. package/dist/runtime/run-control.d.ts +33 -0
  464. package/dist/runtime/run-control.js +77 -0
  465. package/dist/runtime/run-finish.d.ts +27 -18
  466. package/dist/runtime/run-finish.js +98 -51
  467. package/dist/runtime/run-jobs.d.ts +48 -0
  468. package/dist/runtime/run-jobs.js +95 -0
  469. package/dist/runtime/run-processors.d.ts +60 -0
  470. package/dist/runtime/run-processors.js +185 -0
  471. package/dist/runtime/run-queue.d.ts +32 -57
  472. package/dist/runtime/run-queue.js +291 -295
  473. package/dist/runtime/run-steps.d.ts +39 -0
  474. package/dist/runtime/run-steps.js +96 -0
  475. package/dist/runtime/run-worker.d.ts +122 -76
  476. package/dist/runtime/run-worker.js +343 -229
  477. package/dist/runtime/runtime.module.d.ts +10 -0
  478. package/dist/runtime/runtime.module.js +112 -0
  479. package/dist/runtime/step-log.d.ts +40 -0
  480. package/dist/runtime/step-log.js +94 -0
  481. package/dist/runtime/stream.controller.d.ts +5 -8
  482. package/dist/runtime/stream.controller.js +14 -12
  483. package/dist/runtime/stream.d.ts +24 -6
  484. package/dist/runtime/stream.js +78 -7
  485. package/dist/runtime/subagents/child.d.ts +3 -44
  486. package/dist/runtime/subagents/child.js +0 -79
  487. package/dist/runtime/subagents/definition.d.ts +5 -10
  488. package/dist/runtime/subagents/definition.js +13 -14
  489. package/dist/runtime/subagents/dispatch.d.ts +89 -8
  490. package/dist/runtime/subagents/dispatch.js +137 -142
  491. package/dist/runtime/subagents/limits.d.ts +9 -4
  492. package/dist/runtime/subagents/limits.js +4 -2
  493. package/dist/runtime/subagents/org-agents.d.ts +4 -4
  494. package/dist/runtime/subagents/org-agents.js +3 -2
  495. package/dist/runtime/subagents/progress.d.ts +2 -2
  496. package/dist/runtime/subagents/roster.d.ts +4 -4
  497. package/dist/runtime/subagents/roster.js +2 -2
  498. package/dist/runtime/subagents/skill-fork.d.ts +8 -9
  499. package/dist/runtime/subagents/skill-fork.js +17 -6
  500. package/dist/runtime/subagents/subagents.service.d.ts +40 -0
  501. package/dist/runtime/subagents/subagents.service.js +101 -0
  502. package/dist/runtime/usage-report.d.ts +94 -52
  503. package/dist/runtime/usage-report.js +200 -100
  504. package/dist/runtime/waits.d.ts +127 -59
  505. package/dist/runtime/waits.js +433 -210
  506. package/dist/sandbox/job-ids.d.ts +10 -0
  507. package/dist/sandbox/job-ids.js +10 -0
  508. package/dist/sandbox/jobs.d.ts +41 -0
  509. package/dist/sandbox/jobs.js +113 -0
  510. package/dist/sandbox/leases.d.ts +39 -31
  511. package/dist/sandbox/leases.js +117 -257
  512. package/dist/sandbox/providers.d.ts +19 -0
  513. package/dist/sandbox/providers.js +38 -0
  514. package/dist/sandbox/sandbox.module.d.ts +8 -0
  515. package/dist/sandbox/sandbox.module.js +30 -0
  516. package/dist/sandbox/sandbox.service.d.ts +24 -29
  517. package/dist/sandbox/sandbox.service.js +106 -75
  518. package/dist/skills/catalog.d.ts +37 -24
  519. package/dist/skills/catalog.js +100 -57
  520. package/dist/skills/changes.controller.d.ts +4 -4
  521. package/dist/skills/changes.controller.js +15 -9
  522. package/dist/skills/changes.service.d.ts +30 -20
  523. package/dist/skills/changes.service.js +425 -367
  524. package/dist/skills/invocable.controller.d.ts +1 -1
  525. package/dist/skills/invocable.controller.js +8 -5
  526. package/dist/skills/invocation-keys.d.ts +1 -1
  527. package/dist/skills/invocation-keys.js +1 -1
  528. package/dist/skills/invoke.d.ts +17 -16
  529. package/dist/skills/invoke.js +53 -21
  530. package/dist/skills/skills.controller.d.ts +1 -1
  531. package/dist/skills/skills.controller.js +11 -6
  532. package/dist/skills/skills.module.d.ts +6 -0
  533. package/dist/skills/skills.module.js +30 -0
  534. package/dist/skills/skills.service.d.ts +47 -30
  535. package/dist/skills/skills.service.js +221 -158
  536. package/dist/storage/job-ids.d.ts +6 -0
  537. package/dist/storage/job-ids.js +6 -0
  538. package/dist/storage/purge.d.ts +22 -7
  539. package/dist/storage/purge.js +55 -3
  540. package/dist/storage/storage.module.d.ts +6 -0
  541. package/dist/storage/storage.module.js +23 -0
  542. package/dist/storage/storage.service.d.ts +18 -4
  543. package/dist/storage/storage.service.js +44 -3
  544. package/dist/tools/approvals.controller.d.ts +1 -1
  545. package/dist/tools/approvals.controller.js +12 -8
  546. package/dist/tools/approvals.service.d.ts +33 -25
  547. package/dist/tools/approvals.service.js +343 -259
  548. package/dist/tools/breaker.d.ts +2 -2
  549. package/dist/tools/breaker.js +21 -3
  550. package/dist/tools/builtin-names.d.ts +73 -0
  551. package/dist/tools/builtin-names.js +116 -0
  552. package/dist/tools/builtins/agent.d.ts +7 -7
  553. package/dist/tools/builtins/agent.js +7 -11
  554. package/dist/tools/builtins/ask-user.d.ts +3 -3
  555. package/dist/tools/builtins/ask-user.js +3 -3
  556. package/dist/tools/builtins/builtin-tools.d.ts +21 -0
  557. package/dist/tools/builtins/builtin-tools.js +80 -0
  558. package/dist/tools/builtins/read-tool-output.d.ts +3 -3
  559. package/dist/tools/builtins/read-tool-output.js +3 -3
  560. package/dist/tools/builtins/sandbox/bash.d.ts +5 -5
  561. package/dist/tools/builtins/sandbox/bash.js +33 -30
  562. package/dist/tools/builtins/sandbox/common.d.ts +5 -4
  563. package/dist/tools/builtins/sandbox/common.js +2 -2
  564. package/dist/tools/builtins/sandbox/deliver.d.ts +1 -1
  565. package/dist/tools/builtins/sandbox/deliver.js +13 -13
  566. package/dist/tools/builtins/sandbox/edit.d.ts +1 -1
  567. package/dist/tools/builtins/sandbox/edit.js +42 -31
  568. package/dist/tools/builtins/sandbox/file-state.d.ts +34 -0
  569. package/dist/tools/builtins/sandbox/file-state.js +34 -0
  570. package/dist/tools/builtins/sandbox/glob-match.d.ts +1 -1
  571. package/dist/tools/builtins/sandbox/glob-match.js +1 -1
  572. package/dist/tools/builtins/sandbox/glob.d.ts +1 -1
  573. package/dist/tools/builtins/sandbox/glob.js +6 -6
  574. package/dist/tools/builtins/sandbox/grep.d.ts +7 -4
  575. package/dist/tools/builtins/sandbox/grep.js +149 -32
  576. package/dist/tools/builtins/sandbox/index.d.ts +1 -1
  577. package/dist/tools/builtins/sandbox/index.js +1 -1
  578. package/dist/tools/builtins/sandbox/read.d.ts +2 -2
  579. package/dist/tools/builtins/sandbox/read.js +22 -15
  580. package/dist/tools/builtins/sandbox/write.d.ts +1 -1
  581. package/dist/tools/builtins/sandbox/write.js +38 -34
  582. package/dist/tools/builtins/skill-load.d.ts +6 -6
  583. package/dist/tools/builtins/skill-load.js +33 -17
  584. package/dist/tools/builtins/skill-write.d.ts +4 -4
  585. package/dist/tools/builtins/skill-write.js +10 -10
  586. package/dist/tools/builtins/tool-search.d.ts +13 -9
  587. package/dist/tools/builtins/tool-search.js +25 -14
  588. package/dist/tools/canonical-json.d.ts +6 -0
  589. package/dist/tools/canonical-json.js +16 -0
  590. package/dist/tools/connector-content.controller.d.ts +1 -1
  591. package/dist/tools/connector-content.controller.js +11 -6
  592. package/dist/tools/connector-content.d.ts +12 -15
  593. package/dist/tools/connector-content.js +53 -18
  594. package/dist/tools/connectors.controller.d.ts +1 -1
  595. package/dist/tools/connectors.controller.js +21 -10
  596. package/dist/tools/connectors.service.d.ts +31 -13
  597. package/dist/tools/connectors.service.js +438 -348
  598. package/dist/tools/credentials.d.ts +17 -20
  599. package/dist/tools/credentials.js +55 -34
  600. package/dist/tools/display-names.d.ts +9 -0
  601. package/dist/tools/display-names.js +24 -0
  602. package/dist/tools/drift.d.ts +29 -41
  603. package/dist/tools/drift.js +116 -84
  604. package/dist/tools/elicitation.js +1 -1
  605. package/dist/tools/info.d.ts +32 -13
  606. package/dist/tools/info.js +88 -39
  607. package/dist/tools/job-ids.d.ts +13 -0
  608. package/dist/tools/job-ids.js +15 -0
  609. package/dist/tools/jobs.d.ts +24 -0
  610. package/dist/tools/jobs.js +69 -0
  611. package/dist/tools/legacy-data.d.ts +34 -0
  612. package/dist/tools/legacy-data.js +76 -0
  613. package/dist/tools/legacy-keys.d.ts +51 -0
  614. package/dist/tools/legacy-keys.js +115 -0
  615. package/dist/tools/naming.d.ts +1 -5
  616. package/dist/tools/naming.js +1 -7
  617. package/dist/tools/oauth/flow-paths.d.ts +16 -0
  618. package/dist/tools/oauth/flow-paths.js +38 -0
  619. package/dist/tools/oauth/flow.d.ts +30 -30
  620. package/dist/tools/oauth/flow.js +109 -81
  621. package/dist/tools/oauth/oauth.controller.d.ts +3 -3
  622. package/dist/tools/oauth/oauth.controller.js +12 -9
  623. package/dist/tools/oauth/tokens.d.ts +11 -3
  624. package/dist/tools/oauth/tokens.js +15 -14
  625. package/dist/tools/outputs.d.ts +13 -4
  626. package/dist/tools/outputs.js +48 -4
  627. package/dist/tools/pipeline.d.ts +72 -50
  628. package/dist/tools/pipeline.js +239 -100
  629. package/dist/tools/policy.d.ts +3 -16
  630. package/dist/tools/policy.js +13 -19
  631. package/dist/tools/questions.controller.d.ts +2 -2
  632. package/dist/tools/questions.controller.js +9 -6
  633. package/dist/tools/questions.service.d.ts +26 -25
  634. package/dist/tools/questions.service.js +201 -142
  635. package/dist/tools/registry.d.ts +43 -38
  636. package/dist/tools/registry.js +100 -72
  637. package/dist/tools/resources.d.ts +1 -1
  638. package/dist/tools/resources.js +1 -1
  639. package/dist/tools/specs.d.ts +5 -4
  640. package/dist/tools/specs.js +3 -1
  641. package/dist/tools/tools.module.d.ts +10 -0
  642. package/dist/tools/tools.module.js +91 -0
  643. package/dist/ui/call-extension.d.ts +16 -0
  644. package/dist/ui/call-extension.js +38 -0
  645. package/dist/ui/embed-token.d.ts +9 -5
  646. package/dist/ui/embed-token.js +34 -6
  647. package/dist/ui/ui-stream.d.ts +22 -17
  648. package/dist/ui/ui-stream.js +72 -12
  649. package/dist/ui/ui.module.d.ts +7 -0
  650. package/dist/ui/ui.module.js +28 -0
  651. package/dist/ui/views.controller.d.ts +14 -12
  652. package/dist/ui/views.controller.js +32 -25
  653. package/dist/ui/views.d.ts +9 -57
  654. package/dist/ui/views.js +43 -45
  655. package/package.json +10 -3
  656. package/src/migrations/0063_tool_keys_claude_code.sql +220 -0
  657. package/dist/http/health.controller.d.ts +0 -26
  658. package/dist/http/health.controller.js +0 -79
  659. package/dist/http/tokens.d.ts +0 -131
  660. package/dist/http/tokens.js +0 -131
  661. package/dist/http/zod.pipe.d.ts +0 -8
  662. package/dist/http/zod.pipe.js +0 -14
  663. package/dist/identity/rate-limit.d.ts +0 -55
  664. package/dist/identity/rate-limit.js +0 -121
  665. package/dist/sandbox/lifecycle.d.ts +0 -21
  666. package/dist/sandbox/lifecycle.js +0 -68
  667. package/dist/tools/builtins/sandbox/names.d.ts +0 -7
  668. package/dist/tools/builtins/sandbox/names.js +0 -20
  669. /package/dist/http/{gateway.module.d.ts → gateway-routes.d.ts} +0 -0
  670. /package/dist/http/{gateway.module.js → gateway-routes.js} +0 -0
@@ -1,7 +1,23 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
8
+ return function (target, key) { decorator(target, key, paramIndex); }
9
+ };
1
10
  import { randomUUID } from "node:crypto";
2
- import { validateAnswer, } from "@capybara-hq/plugin-sdk";
11
+ import { validateAnswer } from "@capybara-hq/plugin-sdk";
12
+ import { Inject, Injectable } from "@nestjs/common";
3
13
  import { sql } from "kysely";
14
+ import { EventLog } from "../conversations/event-log.js";
4
15
  import { ApiError } from "../errors.js";
16
+ import { KernelConfigService } from "../infra/config/kernel-config.service.js";
17
+ import { KernelDb } from "../infra/database/kernel-db.js";
18
+ import { TransactionHost } from "../infra/database/transaction-host.js";
19
+ import { Transactional } from "../infra/database/transactional.decorator.js";
20
+ import { KernelEvents } from "../infra/events/kernel-events.js";
5
21
  const notFound = () => new ApiError("question.not_found", "Question not found");
6
22
  const notInitiator = () => new ApiError("forbidden", "Only the user who started the run can answer this question");
7
23
  const toView = ({ state: _state, ...rest }) => rest;
@@ -32,75 +48,88 @@ const isPlainObject = (v) => typeof v === "object" && v !== null && !Array.isArr
32
48
  * 输入请求:新建(tools 节点)、回答(只有对话发起人)、超时与取消(等待机制)。
33
49
  * 状态全部在 PG:回答 / 超时 / 取消都在事务里 `SELECT … FOR UPDATE` 该行,多副本并发时恰好一个生效,
34
50
  * 只有生效的那次写 `question_answered`。HTTP 接口见 questions.controller.ts。
51
+ *
52
+ * An answer is announced after the commit as the domain event `question.answered` (exactly once),
53
+ * which the run's waits follow to resume it (spec §3b; the wait sweep resumes a run whose resume was
54
+ * lost). Events are appended in the context's transaction (`EventLog.appendIn`).
35
55
  */
36
- export class QuestionsService {
37
- deps;
38
- constructor(deps) {
39
- this.deps = deps;
56
+ let QuestionsService = class QuestionsService {
57
+ db;
58
+ config;
59
+ eventLog;
60
+ events;
61
+ txHost;
62
+ constructor(db, config, eventLog, events, txHost) {
63
+ this.db = db;
64
+ this.config = config;
65
+ this.eventLog = eventLog;
66
+ this.events = events;
67
+ this.txHost = txHost;
40
68
  }
41
69
  /**
42
70
  * 新建 pending 输入请求(`expires_at` = 现在 + `tools.approvalTimeoutHours`)并写 `question_asked`,同一事务。
43
71
  * 按 (run_id, call_id, attempt) 幂等:已存在则返回已有记录,事件按 `question_asked:<id>` 幂等。
44
72
  */
45
73
  async ask(input) {
46
- const { db, eventLog, config } = this.deps;
47
- const hours = config().tools.approvalTimeoutHours;
74
+ const { record, toSeq } = await this.askIn(input);
75
+ await this.eventLog.notify(record.conversationId, toSeq);
76
+ return record;
77
+ }
78
+ async askIn(input) {
79
+ const hours = this.config.get().tools.approvalTimeoutHours;
48
80
  const spec = {
49
81
  form: input.form,
50
82
  state: input.state ?? null,
51
83
  toolKey: input.toolKey,
52
84
  step: input.step,
53
85
  };
54
- const { record, toSeq } = await db.transaction().execute(async (t) => {
55
- await t
56
- .insertInto("questions")
57
- .values({
58
- id: randomUUID(),
59
- org_id: input.orgId,
60
- conversation_id: input.conversationId,
61
- run_id: input.runId,
62
- call_id: input.callId,
63
- attempt: input.attempt,
64
- spec: JSON.stringify(spec),
65
- answer: null,
66
- answered_by: null,
67
- expires_at: sql `now() + ${hours}::integer * interval '1 hour'`,
68
- })
69
- .onConflict((oc) => oc.columns(["run_id", "call_id", "attempt"]).doNothing())
70
- .execute();
71
- const row = await t
72
- .selectFrom("questions")
73
- .selectAll()
74
- .where("run_id", "=", input.runId)
75
- .where("call_id", "=", input.callId)
76
- .where("attempt", "=", input.attempt)
77
- .executeTakeFirstOrThrow();
78
- const rec = toRecord(row);
79
- const written = await eventLog.append(rec.conversationId, [
80
- {
81
- type: "question_asked",
82
- runId: rec.runId,
83
- idemKey: `question_asked:${rec.id}`,
84
- payload: {
85
- step: rec.step,
86
- callId: rec.callId,
87
- questionId: rec.id,
88
- form: rec.form,
89
- expiresAt: rec.expiresAt,
90
- },
86
+ const t = this.db.db;
87
+ await t
88
+ .insertInto("questions")
89
+ .values({
90
+ id: randomUUID(),
91
+ org_id: input.orgId,
92
+ conversation_id: input.conversationId,
93
+ run_id: input.runId,
94
+ call_id: input.callId,
95
+ attempt: input.attempt,
96
+ spec: JSON.stringify(spec),
97
+ answer: null,
98
+ answered_by: null,
99
+ expires_at: sql `now() + ${hours}::integer * interval '1 hour'`,
100
+ })
101
+ .onConflict((oc) => oc.columns(["run_id", "call_id", "attempt"]).doNothing())
102
+ .execute();
103
+ const row = await t
104
+ .selectFrom("questions")
105
+ .selectAll()
106
+ .where("run_id", "=", input.runId)
107
+ .where("call_id", "=", input.callId)
108
+ .where("attempt", "=", input.attempt)
109
+ .executeTakeFirstOrThrow();
110
+ const rec = toRecord(row);
111
+ const written = await this.eventLog.appendIn(rec.conversationId, [
112
+ {
113
+ type: "question_asked",
114
+ runId: rec.runId,
115
+ idemKey: `question_asked:${rec.id}`,
116
+ payload: {
117
+ step: rec.step,
118
+ callId: rec.callId,
119
+ questionId: rec.id,
120
+ form: rec.form,
121
+ expiresAt: rec.expiresAt,
91
122
  },
92
- ], t);
93
- return { record: rec, toSeq: Math.max(...written.map((e) => e.seq)) };
94
- });
95
- await eventLog.notify(record.conversationId, toSeq);
96
- return record;
123
+ },
124
+ ]);
125
+ return { record: rec, toSeq: Math.max(...written.map((e) => e.seq)) };
97
126
  }
98
127
  /**
99
128
  * 读一条输入请求(网页展示表单用):只有该运行的发起人(其他人 → 403 `forbidden`);
100
129
  * 不属于该组织 / 不存在 → `question.not_found`。
101
130
  */
102
131
  async get(orgId, questionId, accountId) {
103
- const row = await this.deps.db
132
+ const row = await this.db
104
133
  .selectFrom("questions")
105
134
  .innerJoin("runs", "runs.id", "questions.run_id")
106
135
  .selectAll("questions")
@@ -116,7 +145,7 @@ export class QuestionsService {
116
145
  }
117
146
  /** 某个调用的全部输入请求(按轮次升序)。 */
118
147
  async forCall(runId, callId) {
119
- const rows = await this.deps.db
148
+ const rows = await this.db
120
149
  .selectFrom("questions")
121
150
  .selectAll()
122
151
  .where("run_id", "=", runId)
@@ -132,103 +161,107 @@ export class QuestionsService {
132
161
  * 传 `orgId` 时还要求输入请求属于该组织(HTTP 接口用)。
133
162
  */
134
163
  async answer(questionId, accountId, answer, orgId) {
135
- const { db, eventLog } = this.deps;
136
- const { record, toSeq } = await db.transaction().execute(async (t) => {
137
- let q = t
138
- .selectFrom("questions")
139
- .selectAll()
140
- .select(sql `expires_at <= now()`.as("expired"))
141
- .where("id", "=", questionId);
142
- if (orgId !== undefined)
143
- q = q.where("org_id", "=", orgId);
144
- const locked = await q.forUpdate().executeTakeFirst();
145
- if (!locked)
146
- throw notFound();
147
- const run = await t
148
- .selectFrom("runs")
149
- .select("trigger_account_id")
150
- .where("id", "=", locked.run_id)
151
- .executeTakeFirst();
152
- if (run?.trigger_account_id !== accountId)
153
- throw notInitiator();
154
- const before = toRecord(locked);
155
- if (before.status !== "pending") {
156
- throw new ApiError("question.already_answered", "Question has already been answered");
157
- }
158
- if (locked.expired) {
159
- throw new ApiError("question.already_answered", "Question has expired");
160
- }
161
- const problems = isPlainObject(answer)
162
- ? validateAnswer(before.form, answer)
163
- : ["answer must be an object"];
164
- if (problems.length > 0) {
165
- throw new ApiError("validation_failed", "Answer does not match the form", problems.map((message) => ({ path: "answer", message })));
166
- }
167
- const updated = await t
168
- .updateTable("questions")
169
- .set({
170
- status: "answered",
171
- answer: JSON.stringify(answer),
172
- answered_by: accountId,
173
- answered_at: sql `now()`,
174
- })
175
- .where("id", "=", questionId)
176
- .returningAll()
177
- .executeTakeFirstOrThrow();
178
- const toSeq = await this.answeredEvent(t, before, answer, accountId, "answered");
179
- return { record: toRecord(updated), toSeq };
164
+ const { record, toSeq } = await this.answerIn(questionId, accountId, answer, orgId);
165
+ await this.eventLog.notify(record.conversationId, toSeq);
166
+ // waits resume the run and its IM delivery is enqueued (handler failures are logged)
167
+ await this.events.emit("question.answered", {
168
+ id: record.id,
169
+ orgId: record.orgId,
170
+ conversationId: record.conversationId,
171
+ runId: record.runId,
180
172
  });
181
- await eventLog.notify(record.conversationId, toSeq);
182
- if (this.deps.onAnswered) {
183
- try {
184
- await this.deps.onAnswered(record);
185
- }
186
- catch (err) {
187
- this.deps.log.warn("question onAnswered hook failed", { questionId: record.id, err });
188
- }
189
- }
190
173
  return record;
191
174
  }
175
+ // its own transaction (as the legacy one was): `question.answered` is emitted only after the
176
+ // answer committed, even when a caller has a transaction open
177
+ async answerIn(questionId, accountId, answer, orgId) {
178
+ const t = this.db.db;
179
+ let q = t
180
+ .selectFrom("questions")
181
+ .selectAll()
182
+ .select(sql `expires_at <= now()`.as("expired"))
183
+ .where("id", "=", questionId);
184
+ if (orgId !== undefined)
185
+ q = q.where("org_id", "=", orgId);
186
+ const locked = await q.forUpdate().executeTakeFirst();
187
+ if (!locked)
188
+ throw notFound();
189
+ const run = await t
190
+ .selectFrom("runs")
191
+ .select("trigger_account_id")
192
+ .where("id", "=", locked.run_id)
193
+ .executeTakeFirst();
194
+ if (run?.trigger_account_id !== accountId)
195
+ throw notInitiator();
196
+ const before = toRecord(locked);
197
+ if (before.status !== "pending") {
198
+ throw new ApiError("question.already_answered", "Question has already been answered");
199
+ }
200
+ if (locked.expired) {
201
+ throw new ApiError("question.already_answered", "Question has expired");
202
+ }
203
+ const problems = isPlainObject(answer)
204
+ ? validateAnswer(before.form, answer)
205
+ : ["answer must be an object"];
206
+ if (problems.length > 0) {
207
+ throw new ApiError("validation_failed", "Answer does not match the form", problems.map((message) => ({ path: "answer", message })));
208
+ }
209
+ const updated = await t
210
+ .updateTable("questions")
211
+ .set({
212
+ status: "answered",
213
+ answer: JSON.stringify(answer),
214
+ answered_by: accountId,
215
+ answered_at: sql `now()`,
216
+ })
217
+ .where("id", "=", questionId)
218
+ .returningAll()
219
+ .executeTakeFirstOrThrow();
220
+ const toSeq = await this.answeredEvent(before, answer, accountId, "answered");
221
+ return { record: toRecord(updated), toSeq };
222
+ }
192
223
  /**
193
224
  * 超时(等待机制的超时任务调用):仍 pending 且已到期 → 置 expired、写 `question_answered{expired}`。
194
225
  * 返回 `expired`(本次生效)/ `not_due`(尚未到期)/ `settled`(已回答、已取消或不存在)。
195
226
  */
196
227
  async expire(questionId) {
197
- const { db, eventLog } = this.deps;
198
- const r = await db.transaction().execute(async (t) => {
199
- const locked = await t
200
- .selectFrom("questions")
201
- .selectAll()
202
- .select(sql `expires_at <= now()`.as("expired"))
203
- .where("id", "=", questionId)
204
- .forUpdate()
205
- .executeTakeFirst();
206
- if (!locked)
207
- return { outcome: "settled" };
208
- const before = toRecord(locked);
209
- if (before.status !== "pending")
210
- return { outcome: "settled", record: before };
211
- if (!locked.expired)
212
- return { outcome: "not_due", record: before };
213
- const updated = await t
214
- .updateTable("questions")
215
- .set({ status: "expired", answered_at: sql `now()` })
216
- .where("id", "=", questionId)
217
- .returningAll()
218
- .executeTakeFirstOrThrow();
219
- const toSeq = await this.answeredEvent(t, before, null, null, "expired");
220
- return { outcome: "expired", record: toRecord(updated), toSeq };
221
- });
228
+ const r = await this.expireIn(questionId);
222
229
  if ("toSeq" in r && r.toSeq !== undefined && r.record) {
223
- await eventLog.notify(r.record.conversationId, r.toSeq);
230
+ await this.eventLog.notify(r.record.conversationId, r.toSeq);
224
231
  }
225
232
  return r.record ? { outcome: r.outcome, record: r.record } : { outcome: r.outcome };
226
233
  }
234
+ async expireIn(questionId) {
235
+ const t = this.db.db;
236
+ const locked = await t
237
+ .selectFrom("questions")
238
+ .selectAll()
239
+ .select(sql `expires_at <= now()`.as("expired"))
240
+ .where("id", "=", questionId)
241
+ .forUpdate()
242
+ .executeTakeFirst();
243
+ if (!locked)
244
+ return { outcome: "settled" };
245
+ const before = toRecord(locked);
246
+ if (before.status !== "pending")
247
+ return { outcome: "settled", record: before };
248
+ if (!locked.expired)
249
+ return { outcome: "not_due", record: before };
250
+ const updated = await t
251
+ .updateTable("questions")
252
+ .set({ status: "expired", answered_at: sql `now()` })
253
+ .where("id", "=", questionId)
254
+ .returningAll()
255
+ .executeTakeFirstOrThrow();
256
+ const toSeq = await this.answeredEvent(before, null, null, "expired");
257
+ return { outcome: "expired", record: toRecord(updated), toSeq };
258
+ }
227
259
  /**
228
- * 在事务 `t` 内取消运行的全部 pending 输入请求(运行在等待中被中止),各写 `question_answered{cancelled}`。
229
- * 返回被取消的记录;调用方提交后发布事件。
260
+ * 在调用方的事务内(`mandatory`)取消运行的全部 pending 输入请求(运行在等待中被中止),各写
261
+ * `question_answered{cancelled}`。返回被取消的记录;调用方提交后发布事件。
230
262
  */
231
- async cancelPendingIn(t, runId) {
263
+ async cancelPendingIn(runId) {
264
+ const t = this.db.db;
232
265
  const rows = await t
233
266
  .selectFrom("questions")
234
267
  .selectAll()
@@ -246,17 +279,18 @@ export class QuestionsService {
246
279
  .returningAll()
247
280
  .executeTakeFirstOrThrow();
248
281
  const rec = toRecord(row);
249
- await this.answeredEvent(t, rec, null, null, "cancelled");
282
+ await this.answeredEvent(rec, null, null, "cancelled");
250
283
  out.push(toRecord(updated));
251
284
  }
252
285
  return out;
253
286
  }
254
287
  /**
255
- * 在事务 `t` 内取消某组织里由 `accountId` 发起的运行上的全部 pending 输入请求(只有运行发起人能回答,
288
+ * 在调用方的事务内(`mandatory`)取消某组织里由 `accountId` 发起的运行上的全部 pending 输入请求(只有运行发起人能回答,
256
289
  * 即「其作为处理人」的提问;成员离职时调用),走与 {@link cancelPendingIn} 相同的取消路径:置 cancelled、
257
290
  * 写 `question_answered{cancelled}`。返回被取消的记录与各会话写到的最大 seq;调用方提交后发布事件。
258
291
  */
259
- async cancelPendingFor(t, orgId, accountId) {
292
+ async cancelPendingFor(orgId, accountId) {
293
+ const t = this.db.db;
260
294
  const rows = await t
261
295
  .selectFrom("questions")
262
296
  .selectAll()
@@ -275,21 +309,46 @@ export class QuestionsService {
275
309
  .where("id", "=", row.id)
276
310
  .returningAll()
277
311
  .executeTakeFirstOrThrow();
278
- const seq = await this.answeredEvent(t, toRecord(row), null, null, "cancelled");
312
+ const seq = await this.answeredEvent(toRecord(row), null, null, "cancelled");
279
313
  seqs.set(row.conversation_id, Math.max(seqs.get(row.conversation_id) ?? 0, seq));
280
314
  records.push(toRecord(updated));
281
315
  }
282
316
  return { records, seqs };
283
317
  }
284
- async answeredEvent(t, q, answer, byAccountId, outcome) {
285
- const written = await this.deps.eventLog.append(q.conversationId, [
318
+ /** `question_answered` in the current transaction; returns its seq. */
319
+ async answeredEvent(q, answer, byAccountId, outcome) {
320
+ const written = await this.eventLog.appendIn(q.conversationId, [
286
321
  {
287
322
  type: "question_answered",
288
323
  runId: q.runId,
289
324
  idemKey: `question_answered:${q.id}`,
290
325
  payload: { questionId: q.id, callId: q.callId, answer, byAccountId, outcome },
291
326
  },
292
- ], t);
327
+ ]);
293
328
  return Math.max(...written.map((e) => e.seq));
294
329
  }
295
- }
330
+ };
331
+ __decorate([
332
+ Transactional()
333
+ ], QuestionsService.prototype, "askIn", null);
334
+ __decorate([
335
+ Transactional({ propagation: "requires_new" })
336
+ ], QuestionsService.prototype, "answerIn", null);
337
+ __decorate([
338
+ Transactional()
339
+ ], QuestionsService.prototype, "expireIn", null);
340
+ __decorate([
341
+ Transactional({ propagation: "mandatory" })
342
+ ], QuestionsService.prototype, "cancelPendingIn", null);
343
+ __decorate([
344
+ Transactional({ propagation: "mandatory" })
345
+ ], QuestionsService.prototype, "cancelPendingFor", null);
346
+ QuestionsService = __decorate([
347
+ Injectable(),
348
+ __param(0, Inject(KernelDb)),
349
+ __param(1, Inject(KernelConfigService)),
350
+ __param(2, Inject(EventLog)),
351
+ __param(3, Inject(KernelEvents)),
352
+ __param(4, Inject(TransactionHost))
353
+ ], QuestionsService);
354
+ export { QuestionsService };
@@ -1,17 +1,14 @@
1
- import type { Connector, InputRequired, Logger, ToolAnnotations, ToolCallContext, ToolResult, ToolSpec } from "@capybara-hq/plugin-sdk";
1
+ import type { Connector, InputRequired, ToolAnnotations, ToolCallContext, ToolResult, ToolSpec } from "@capybara-hq/plugin-sdk";
2
2
  import type { AgentDefinition } from "../agents/definition.js";
3
- import type { KernelConfig } from "../config/schema.js";
4
3
  import type { ToolView } from "../conversations/events.js";
5
- import type { KernelDb } from "../db/kernel-schema.js";
6
- import type { ExtensionHost } from "../extensions/host.js";
4
+ import { ExtensionHost } from "../extensions/host.js";
5
+ import { ExtensionRegistry } from "../extensions/registry.js";
6
+ import { KernelConfigService } from "../infra/config/kernel-config.service.js";
7
+ import { KernelDb } from "../infra/database/kernel-db.js";
7
8
  import type { OrgRole } from "../orgs/roles.js";
8
- import type { Credentials } from "./credentials.js";
9
- /**
10
- * 内核内置工具的名字(Task 10 / Task 19 实现;M5 T8 加沙箱工具)。保存 agent 时内置工具引用按这份清单校验,
11
- * 不依赖当前是否已注册,避免实现落地顺序影响已保存的定义;运行时未注册的照常报不可用。
12
- * `skill_write`(M5 T15)由 agent 定义显式引用才可用(负责人决定 agent 能否改自己的技能)。
13
- */
14
- export declare const BUILTIN_TOOL_NAMES: readonly ["ask_user", "read_tool_output", "tool_search", "skill_load", "skill_write", "sandbox_bash", "sandbox_read", "sandbox_write", "sandbox_edit", "sandbox_glob", "sandbox_grep", "sandbox_deliver", "agent"];
9
+ import { BuiltinTools } from "./builtins/builtin-tools.js";
10
+ export { BUILTIN_TOOL_NAMES } from "./builtin-names.js";
11
+ export { canonicalJson } from "./canonical-json.js";
15
12
  /** 保存 agent 时引用校验的问题(`path` 为 `tools.<i>`)。 */
16
13
  export interface ToolRefIssue {
17
14
  path: string;
@@ -19,7 +16,7 @@ export interface ToolRefIssue {
19
16
  }
20
17
  /**
21
18
  * 内置工具处理函数的上下文:在 SDK 的 `ToolCallContext` 之上,管线额外传入本步解析出的工具
22
- * (`tool_search` 据此搜索)。插件处理函数收到的仍是 `ToolCallContext`。
19
+ * (`ToolSearch` 据此搜索)。插件处理函数收到的仍是 `ToolCallContext`。
23
20
  */
24
21
  export interface BuiltinCallContext extends ToolCallContext {
25
22
  tools?: readonly ResolvedTool[];
@@ -37,7 +34,7 @@ export interface BuiltinCallContext extends ToolCallContext {
37
34
  sandboxConversationId?: string;
38
35
  }
39
36
  /**
40
- * 内置工具的结果:`ToolResult` 之外可带 `loadedTools`(`tool_search` 加载的工具 key,
37
+ * 内置工具的结果:`ToolResult` 之外可带 `loadedTools`(`ToolSearch` 加载的工具 key,
41
38
  * 管线写进 `tool_result.loadedTools`)。
42
39
  */
43
40
  export type BuiltinResult = (ToolResult & {
@@ -50,7 +47,7 @@ export type BuiltinResult = (ToolResult & {
50
47
  }) | InputRequired;
51
48
  /** 内置工具的处理函数(插件的 `ToolHandler` 可直接赋给它)。 */
52
49
  export type BuiltinHandler = (input: unknown, ctx: BuiltinCallContext) => Promise<BuiltinResult>;
53
- /** 内核内置工具(`ask_user` 等,Task 10 实现具体工具);key 就是 `spec.name`。 */
50
+ /** 内核内置工具(`AskUserQuestion` 等,Task 10 实现具体工具);key 就是 `spec.name`。 */
54
51
  export interface BuiltinTool {
55
52
  spec: ToolSpec;
56
53
  defaultPolicy: "allow" | "ask";
@@ -114,13 +111,11 @@ export interface ResolvedTool {
114
111
  */
115
112
  requiredRole?: OrgRole;
116
113
  }
117
- /** 不可用的引用:`ref` 尽量写成模型认识的工具 key(`docs__search`、`docs__*`),否则 `app:<id>`。 */
114
+ /** 不可用的引用:`ref` 尽量写成模型认识的工具 key(`mcp__docs__search`、`mcp__docs__*`),否则 `app:<id>`。 */
118
115
  export interface UnavailableTool {
119
116
  ref: string;
120
117
  reason: string;
121
118
  }
122
- /** 键排序、去掉 undefined 的 JSON(jsonb 不保留键顺序,指纹必须与顺序无关)。 */
123
- export declare function canonicalJson(v: unknown): string;
124
119
  /** The first 16 hex digits of sha256(canonicalJson(v)): a fingerprint independent of key order. */
125
120
  export declare function contentHash(v: unknown): string;
126
121
  /**
@@ -138,17 +133,6 @@ export declare function withoutDisplayFields<T>(spec: T): T;
138
133
  export declare function specHash(spec: unknown): string;
139
134
  /** 由注解推导默认策略:只读 → allow;其余(破坏性 / 无注解)→ ask。 */
140
135
  export declare function policyFromAnnotations(a: ToolAnnotations | undefined): "allow" | "ask";
141
- export interface ToolRegistryDeps {
142
- db: KernelDb;
143
- host: ExtensionHost;
144
- credentials: Credentials;
145
- log: Logger;
146
- builtins: BuiltinTool[];
147
- /**
148
- * 当前配置(`tools.searchThreshold*`)。不提供时从不启用 `tool_search`(只用于不关心它的测试 / 调用方)。
149
- */
150
- config?: () => KernelConfig;
151
- }
152
136
  /** `forAgent` 的结果。 */
153
137
  export interface AgentTools {
154
138
  tools: ResolvedTool[];
@@ -159,7 +143,7 @@ export interface AgentTools {
159
143
  */
160
144
  hidden?: UnavailableTool[];
161
145
  /**
162
- * 本步是否启用 `tool_search`(spec 5.5):启用时 `tools` 末尾含 `tool_search`,构建请求时只放内置工具
146
+ * 本步是否启用 `ToolSearch`(spec 5.5):启用时 `tools` 末尾含 `ToolSearch`,构建请求时只放内置工具
163
147
  * 与已加载工具的完整定义,其余进目录。缺省视为未启用。
164
148
  */
165
149
  toolSearch?: boolean;
@@ -182,8 +166,29 @@ export interface AgentTools {
182
166
  * different sources with the same key report a duplicate.
183
167
  */
184
168
  export declare class ToolRegistry {
185
- private readonly deps;
186
- constructor(deps: ToolRegistryDeps);
169
+ private readonly db;
170
+ /** Extension tools and the organization's enabled extensions. */
171
+ private readonly host;
172
+ /** The installed connectors (`connector@1`, from the extension registry). */
173
+ private readonly extensions;
174
+ private readonly builtinTools;
175
+ /**
176
+ * `tools.searchThreshold*` and the sub-agent limits. Absent (some tests): `ToolSearch` is never
177
+ * offered and the sub-agent limits are the schema defaults.
178
+ */
179
+ private readonly config?;
180
+ constructor(db: KernelDb,
181
+ /** Extension tools and the organization's enabled extensions. */
182
+ host: Pick<ExtensionHost, "tools" | "enabledPlugins">,
183
+ /** The installed connectors (`connector@1`, from the extension registry). */
184
+ extensions: Pick<ExtensionRegistry, "list">, builtinTools: Pick<BuiltinTools, "list">,
185
+ /**
186
+ * `tools.searchThreshold*` and the sub-agent limits. Absent (some tests): `ToolSearch` is never
187
+ * offered and the sub-agent limits are the schema defaults.
188
+ */
189
+ config?: Pick<KernelConfigService, "get"> | undefined);
190
+ /** The kernel's builtin tools (`ToolSearch` is added by {@link forAgent}, not by definitions). */
191
+ private get builtins();
187
192
  /** `host.list("connector")` 中 `kind` 匹配的第一个实现;未安装返回 undefined。 */
188
193
  findConnector(kind: string): Connector | undefined;
189
194
  /** 同 {@link findConnector},未安装时抛错。 */
@@ -218,23 +223,23 @@ export declare class ToolRegistry {
218
223
  issues: ToolRefIssue[];
219
224
  }>;
220
225
  /**
221
- * 解析 agent 引用的工具(见类注释),再判定是否启用 `tool_search`:组织设置 `toolSearch === "on"`,且
226
+ * 解析 agent 引用的工具(见类注释),再判定是否启用 `ToolSearch`:组织设置 `toolSearch === "on"`,且
222
227
  * 可用工具数 > `tools.searchThresholdTools` 或其定义的估算 token > `tools.searchThresholdTokens`。
223
- * 启用时把内置 `tool_search` 追加到末尾。定义里显式引用的 `tool_search` 忽略(由这里按设置管理)。
224
- * `skillLoad`:对话日志里有技能目录快照(`skills_catalog`,Ruling M17)→ 加入内置 `skill_load`(始终完整加载);
225
- * 定义里显式引用的 `skill_load` 同样忽略。
228
+ * 启用时把内置 `ToolSearch` 追加到末尾。定义里显式引用的 `ToolSearch` 忽略(由这里按设置管理)。
229
+ * `skillLoad`:对话日志里有技能目录快照(`skills_catalog`,Ruling M17)→ 加入内置 `Skill`(始终完整加载);
230
+ * 定义里显式引用的 `Skill` 同样忽略。
226
231
  */
227
232
  forAgent(orgId: string, def: {
228
233
  tools: readonly AgentToolRef[];
229
234
  skillLoad?: boolean;
230
- /** The definition's sub-agent roster source: the `agent` tool's description lists it. */
235
+ /** The definition's sub-agent roster source: the `Agent` tool's description lists it. */
231
236
  subagents?: AgentDefinition["subagents"];
232
237
  }): Promise<AgentTools>;
233
- /** 是否启用 `tool_search`(见 {@link forAgent});先比阈值,超过才读组织设置。 */
238
+ /** 是否启用 `ToolSearch`(见 {@link forAgent});先比阈值,超过才读组织设置。 */
234
239
  private searchActive;
235
240
  private resolve;
236
241
  /**
237
- * `subagents.maxConcurrentPerRun` with the organization's override, for the `agent` tool's
242
+ * `subagents.maxConcurrentPerRun` with the organization's override, for the `Agent` tool's
238
243
  * description (§4.3). A change of the limit changes the tool's spec hash; replays read the
239
244
  * definition logged by hash, so no drift reason is involved. Without config (some tests): the
240
245
  * schema default.