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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (616) hide show
  1. package/dist/admin/admin.controller.d.ts +17 -17
  2. package/dist/admin/admin.controller.js +43 -26
  3. package/dist/admin/admin.module.d.ts +3 -0
  4. package/dist/admin/admin.module.js +22 -0
  5. package/dist/admin/extensions.controller.d.ts +14 -14
  6. package/dist/admin/extensions.controller.js +30 -17
  7. package/dist/admin/setup-lock.d.ts +16 -0
  8. package/dist/admin/setup-lock.js +47 -0
  9. package/dist/admin/setup.controller.d.ts +8 -8
  10. package/dist/admin/setup.controller.js +27 -25
  11. package/dist/admin/setup.service.d.ts +19 -27
  12. package/dist/admin/setup.service.js +61 -61
  13. package/dist/agents/agent-lookup.d.ts +53 -0
  14. package/dist/agents/agent-lookup.js +179 -0
  15. package/dist/agents/agents.controller.d.ts +1 -1
  16. package/dist/agents/agents.controller.js +14 -8
  17. package/dist/agents/agents.module.d.ts +7 -0
  18. package/dist/agents/agents.module.js +41 -0
  19. package/dist/agents/agents.service.d.ts +39 -58
  20. package/dist/agents/agents.service.js +261 -329
  21. package/dist/agents/definition.d.ts +8 -0
  22. package/dist/agents/definition.js +8 -0
  23. package/dist/agents/models.controller.d.ts +1 -1
  24. package/dist/agents/models.controller.js +2 -2
  25. package/dist/agents/templates.controller.d.ts +1 -1
  26. package/dist/agents/templates.controller.js +2 -2
  27. package/dist/agents/templates.d.ts +6 -8
  28. package/dist/agents/templates.js +20 -4
  29. package/dist/app.d.ts +93 -0
  30. package/dist/app.js +150 -0
  31. package/dist/catalog/admin-catalog.controller.d.ts +3 -3
  32. package/dist/catalog/admin-catalog.controller.js +27 -13
  33. package/dist/catalog/catalog-content.d.ts +185 -0
  34. package/dist/catalog/catalog-content.js +323 -0
  35. package/dist/catalog/catalog-items.d.ts +186 -0
  36. package/dist/catalog/catalog-items.js +410 -0
  37. package/dist/catalog/catalog.module.d.ts +14 -0
  38. package/dist/catalog/catalog.module.js +71 -0
  39. package/dist/catalog/catalog.service.d.ts +34 -188
  40. package/dist/catalog/catalog.service.js +155 -489
  41. package/dist/catalog/cli.d.ts +3 -2
  42. package/dist/catalog/cli.js +13 -31
  43. package/dist/catalog/job-ids.d.ts +15 -0
  44. package/dist/catalog/job-ids.js +15 -0
  45. package/dist/catalog/jobs.d.ts +27 -0
  46. package/dist/catalog/jobs.js +70 -0
  47. package/dist/catalog/locks.d.ts +24 -0
  48. package/dist/catalog/locks.js +63 -0
  49. package/dist/catalog/marketplaces.controller.d.ts +4 -4
  50. package/dist/catalog/marketplaces.controller.js +22 -11
  51. package/dist/catalog/marketplaces.service.d.ts +30 -13
  52. package/dist/catalog/marketplaces.service.js +330 -256
  53. package/dist/catalog/org-catalog.controller.d.ts +4 -3
  54. package/dist/catalog/org-catalog.controller.js +29 -14
  55. package/dist/catalog/org-catalog.service.d.ts +32 -198
  56. package/dist/catalog/org-catalog.service.js +159 -400
  57. package/dist/catalog/plugin-import.d.ts +73 -34
  58. package/dist/catalog/plugin-import.js +356 -217
  59. package/dist/catalog/plugin-install.d.ts +83 -41
  60. package/dist/catalog/plugin-install.js +421 -269
  61. package/dist/catalog/plugin-upgrade.d.ts +59 -4
  62. package/dist/catalog/plugin-upgrade.js +407 -282
  63. package/dist/catalog/requests.service.d.ts +27 -15
  64. package/dist/catalog/requests.service.js +201 -145
  65. package/dist/catalog/upgrade-targets.d.ts +4 -7
  66. package/dist/channels/actions.d.ts +6 -4
  67. package/dist/channels/actions.js +1 -1
  68. package/dist/channels/cards.d.ts +2 -2
  69. package/dist/channels/channels.module.d.ts +40 -0
  70. package/dist/channels/channels.module.js +128 -0
  71. package/dist/channels/connections.controller.d.ts +1 -1
  72. package/dist/channels/connections.controller.js +11 -6
  73. package/dist/channels/connections.service.d.ts +43 -21
  74. package/dist/channels/connections.service.js +236 -131
  75. package/dist/channels/inbound.d.ts +34 -38
  76. package/dist/channels/inbound.js +107 -41
  77. package/dist/channels/job-ids.d.ts +10 -0
  78. package/dist/channels/job-ids.js +10 -0
  79. package/dist/channels/jobs.d.ts +85 -0
  80. package/dist/channels/jobs.js +157 -0
  81. package/dist/channels/outbound.d.ts +60 -82
  82. package/dist/channels/outbound.js +165 -194
  83. package/dist/channels/supervisor.d.ts +88 -46
  84. package/dist/channels/supervisor.js +230 -132
  85. package/dist/channels/threads.d.ts +29 -8
  86. package/dist/channels/threads.js +71 -13
  87. package/dist/channels/webhook.d.ts +20 -14
  88. package/dist/channels/webhook.js +51 -20
  89. package/dist/config/load.d.ts +3 -2
  90. package/dist/config/load.js +3 -2
  91. package/dist/config/nacos-source.js +11 -2
  92. package/dist/config/schema.d.ts +1 -0
  93. package/dist/config/schema.js +10 -4
  94. package/dist/conversations/access.d.ts +29 -0
  95. package/dist/conversations/access.js +86 -0
  96. package/dist/conversations/artifacts.d.ts +10 -10
  97. package/dist/conversations/artifacts.js +35 -9
  98. package/dist/conversations/attachments.controller.d.ts +1 -1
  99. package/dist/conversations/attachments.controller.js +8 -6
  100. package/dist/conversations/attachments.module.d.ts +7 -0
  101. package/dist/conversations/attachments.module.js +25 -0
  102. package/dist/conversations/attachments.service.d.ts +30 -22
  103. package/dist/conversations/attachments.service.js +119 -46
  104. package/dist/conversations/conversations.controller.d.ts +8 -7
  105. package/dist/conversations/conversations.controller.js +59 -29
  106. package/dist/conversations/conversations.module.d.ts +8 -0
  107. package/dist/conversations/conversations.module.js +69 -0
  108. package/dist/conversations/conversations.service.d.ts +40 -38
  109. package/dist/conversations/conversations.service.js +130 -140
  110. package/dist/conversations/event-log.d.ts +28 -18
  111. package/dist/conversations/event-log.js +74 -27
  112. package/dist/conversations/files.d.ts +10 -10
  113. package/dist/conversations/files.js +37 -11
  114. package/dist/conversations/idem-keys.d.ts +5 -0
  115. package/dist/conversations/idem-keys.js +5 -0
  116. package/dist/conversations/job-ids.d.ts +6 -0
  117. package/dist/conversations/job-ids.js +6 -0
  118. package/dist/conversations/outputs-read.d.ts +11 -11
  119. package/dist/conversations/outputs-read.js +31 -7
  120. package/dist/conversations/queue.d.ts +48 -56
  121. package/dist/conversations/queue.js +13 -289
  122. package/dist/conversations/queue.service.d.ts +60 -0
  123. package/dist/conversations/queue.service.js +343 -0
  124. package/dist/conversations/sandbox-status.d.ts +13 -10
  125. package/dist/conversations/sandbox-status.js +36 -8
  126. package/dist/conversations/titles.d.ts +71 -24
  127. package/dist/conversations/titles.js +159 -63
  128. package/dist/ctx/bus.js +9 -3
  129. package/dist/ctx/create-ctx.d.ts +6 -0
  130. package/dist/ctx/create-ctx.js +7 -9
  131. package/dist/ctx/lock.d.ts +7 -3
  132. package/dist/ctx/lock.js +9 -20
  133. package/dist/ctx/secrets.d.ts +10 -2
  134. package/dist/ctx/secrets.js +7 -3
  135. package/dist/db/kernel-schema.d.ts +2 -2
  136. package/dist/db/pool.d.ts +5 -0
  137. package/dist/db/pool.js +1 -0
  138. package/dist/errors.d.ts +1 -0
  139. package/dist/errors.js +1 -0
  140. package/dist/evals/budget.d.ts +42 -21
  141. package/dist/evals/budget.js +114 -62
  142. package/dist/evals/evals.module.d.ts +31 -0
  143. package/dist/evals/evals.module.js +114 -0
  144. package/dist/evals/jobs.d.ts +20 -0
  145. package/dist/evals/jobs.js +45 -0
  146. package/dist/evals/run-replay.d.ts +56 -8
  147. package/dist/evals/run-replay.js +140 -80
  148. package/dist/evals/runs.controller.d.ts +1 -1
  149. package/dist/evals/runs.controller.js +17 -8
  150. package/dist/evals/runs.service.d.ts +23 -45
  151. package/dist/evals/runs.service.js +245 -234
  152. package/dist/evals/sets.controller.d.ts +1 -1
  153. package/dist/evals/sets.controller.js +17 -8
  154. package/dist/evals/sets.service.d.ts +22 -6
  155. package/dist/evals/sets.service.js +248 -194
  156. package/dist/evals/snapshot.d.ts +2 -2
  157. package/dist/evals/step-replay.d.ts +2 -2
  158. package/dist/evals/step-replay.js +1 -1
  159. package/dist/evals/trajectory.controller.d.ts +1 -1
  160. package/dist/evals/trajectory.controller.js +11 -7
  161. package/dist/evals/trajectory.service.d.ts +5 -4
  162. package/dist/evals/trajectory.service.js +30 -7
  163. package/dist/evals/worker.d.ts +44 -27
  164. package/dist/evals/worker.js +220 -121
  165. package/dist/extensions/admin-ops.d.ts +61 -33
  166. package/dist/extensions/admin-ops.js +248 -154
  167. package/dist/extensions/admin-view.d.ts +38 -27
  168. package/dist/extensions/admin-view.js +126 -55
  169. package/dist/extensions/approvals.d.ts +12 -8
  170. package/dist/extensions/approvals.js +73 -46
  171. package/dist/extensions/blobs.d.ts +27 -10
  172. package/dist/extensions/blobs.js +111 -45
  173. package/dist/extensions/bootstrap.d.ts +58 -31
  174. package/dist/extensions/bootstrap.js +175 -121
  175. package/dist/extensions/cli.d.ts +20 -10
  176. package/dist/extensions/cli.js +41 -96
  177. package/dist/extensions/config-issues.d.ts +7 -0
  178. package/dist/extensions/config-issues.js +31 -0
  179. package/dist/extensions/deployment-config-store.d.ts +49 -0
  180. package/dist/extensions/deployment-config-store.js +133 -0
  181. package/dist/extensions/deployment-config.d.ts +58 -67
  182. package/dist/extensions/deployment-config.js +202 -230
  183. package/dist/extensions/enabled.d.ts +5 -5
  184. package/dist/extensions/extensions.module.d.ts +8 -0
  185. package/dist/extensions/extensions.module.js +77 -0
  186. package/dist/extensions/hooks.d.ts +3 -2
  187. package/dist/extensions/hooks.js +1 -1
  188. package/dist/extensions/host.d.ts +72 -68
  189. package/dist/extensions/host.js +191 -152
  190. package/dist/extensions/installs.d.ts +49 -16
  191. package/dist/extensions/installs.js +128 -32
  192. package/dist/extensions/job-ids.d.ts +6 -0
  193. package/dist/extensions/job-ids.js +6 -0
  194. package/dist/extensions/lifecycle-topics.d.ts +18 -0
  195. package/dist/extensions/lifecycle-topics.js +18 -0
  196. package/dist/extensions/lifecycle.d.ts +35 -47
  197. package/dist/extensions/lifecycle.js +103 -39
  198. package/dist/extensions/locks.d.ts +33 -0
  199. package/dist/extensions/locks.js +86 -0
  200. package/dist/extensions/migrate-lock.d.ts +3 -4
  201. package/dist/extensions/org-config.controller.d.ts +1 -1
  202. package/dist/extensions/org-config.controller.js +8 -5
  203. package/dist/extensions/org-config.d.ts +48 -46
  204. package/dist/extensions/org-config.js +284 -226
  205. package/dist/extensions/registry.d.ts +50 -2
  206. package/dist/extensions/registry.js +89 -4
  207. package/dist/extensions/sources.d.ts +12 -8
  208. package/dist/extensions/sources.js +34 -13
  209. package/dist/files/files.module.d.ts +3 -0
  210. package/dist/files/files.module.js +22 -0
  211. package/dist/files/previewers.controller.d.ts +7 -2
  212. package/dist/files/previewers.controller.js +17 -9
  213. package/dist/files/previewers.d.ts +13 -18
  214. package/dist/files/previewers.js +83 -36
  215. package/dist/http/adapter.d.ts +3 -0
  216. package/dist/http/adapter.js +25 -0
  217. package/dist/http/api.module.d.ts +3 -110
  218. package/dist/http/api.module.js +47 -355
  219. package/dist/http/app.d.ts +11 -15
  220. package/dist/http/app.js +17 -62
  221. package/dist/http/error-filter.module.d.ts +5 -0
  222. package/dist/http/error-filter.module.js +18 -0
  223. package/dist/http/error.filter.js +2 -2
  224. package/dist/identity/accounts.d.ts +82 -29
  225. package/dist/identity/accounts.js +294 -175
  226. package/dist/identity/api-tokens.d.ts +11 -7
  227. package/dist/identity/api-tokens.js +71 -44
  228. package/dist/identity/audit.d.ts +7 -4
  229. package/dist/identity/audit.js +5 -1
  230. package/dist/identity/auth.controller.d.ts +11 -10
  231. package/dist/identity/auth.controller.js +31 -25
  232. package/dist/identity/auth.guard.d.ts +3 -3
  233. package/dist/identity/auth.guard.js +6 -4
  234. package/dist/identity/binding.d.ts +9 -11
  235. package/dist/identity/binding.js +41 -13
  236. package/dist/identity/enterprise-admin.d.ts +18 -12
  237. package/dist/identity/enterprise-admin.js +67 -13
  238. package/dist/identity/external-identity-lock.d.ts +17 -0
  239. package/dist/identity/external-identity-lock.js +39 -0
  240. package/dist/identity/external.d.ts +19 -15
  241. package/dist/identity/external.js +163 -125
  242. package/dist/identity/identity.module.d.ts +6 -0
  243. package/dist/identity/identity.module.js +56 -0
  244. package/dist/identity/me.controller.d.ts +16 -15
  245. package/dist/identity/me.controller.js +37 -31
  246. package/dist/identity/sessions.d.ts +12 -10
  247. package/dist/identity/sessions.js +74 -42
  248. package/dist/identity/settings.d.ts +20 -14
  249. package/dist/identity/settings.js +85 -57
  250. package/dist/identity/sso.controller.d.ts +7 -7
  251. package/dist/identity/sso.controller.js +13 -9
  252. package/dist/identity/sso.d.ts +9 -12
  253. package/dist/identity/sso.js +54 -24
  254. package/dist/inbox/inbox.module.d.ts +3 -0
  255. package/dist/inbox/inbox.module.js +22 -0
  256. package/dist/inbox/inbox.service.d.ts +7 -9
  257. package/dist/inbox/inbox.service.js +32 -11
  258. package/dist/index.d.ts +16 -11
  259. package/dist/index.js +9 -6
  260. package/dist/infra/cache/cache.module.d.ts +3 -0
  261. package/dist/infra/cache/cache.module.js +16 -0
  262. package/dist/infra/cache/cache.service.d.ts +21 -0
  263. package/dist/infra/cache/cache.service.js +80 -0
  264. package/dist/infra/cache/cacheable.decorator.d.ts +32 -0
  265. package/dist/infra/cache/cacheable.decorator.js +83 -0
  266. package/dist/infra/cli/kernel-cli.module.d.ts +66 -0
  267. package/dist/infra/cli/kernel-cli.module.js +165 -0
  268. package/dist/infra/close-within.d.ts +15 -0
  269. package/dist/infra/close-within.js +36 -0
  270. package/dist/infra/config/config.module.d.ts +13 -0
  271. package/dist/infra/config/config.module.js +39 -0
  272. package/dist/infra/config/kernel-config.service.d.ts +25 -0
  273. package/dist/infra/config/kernel-config.service.js +126 -0
  274. package/dist/infra/database/after-commit.d.ts +6 -0
  275. package/dist/infra/database/after-commit.js +9 -0
  276. package/dist/infra/database/database.module.d.ts +25 -0
  277. package/dist/infra/database/database.module.js +90 -0
  278. package/dist/infra/database/kernel-db.d.ts +22 -0
  279. package/dist/infra/database/kernel-db.js +65 -0
  280. package/dist/infra/database/transaction-host.d.ts +50 -0
  281. package/dist/infra/database/transaction-host.js +125 -0
  282. package/dist/infra/database/transactional.decorator.d.ts +15 -0
  283. package/dist/infra/database/transactional.decorator.js +27 -0
  284. package/dist/infra/database/xact-lock.d.ts +17 -0
  285. package/dist/infra/database/xact-lock.js +43 -0
  286. package/dist/infra/events/kernel-events.d.ts +96 -0
  287. package/dist/infra/events/kernel-events.js +65 -0
  288. package/dist/infra/health/health.controller.d.ts +26 -0
  289. package/dist/infra/health/health.controller.js +104 -0
  290. package/dist/infra/health/health.module.d.ts +9 -0
  291. package/dist/infra/health/health.module.js +24 -0
  292. package/dist/infra/health/health.options.d.ts +10 -0
  293. package/dist/infra/health/health.options.js +15 -0
  294. package/dist/infra/health/shutdown-state.d.ts +6 -0
  295. package/dist/infra/health/shutdown-state.js +2 -0
  296. package/dist/infra/lifecycle/graceful-shutdown.module.d.ts +6 -0
  297. package/dist/infra/lifecycle/graceful-shutdown.module.js +23 -0
  298. package/dist/infra/lifecycle/graceful-shutdown.service.d.ts +70 -0
  299. package/dist/infra/lifecycle/graceful-shutdown.service.js +135 -0
  300. package/dist/infra/lifecycle/process-guards.d.ts +52 -0
  301. package/dist/infra/lifecycle/process-guards.js +86 -0
  302. package/dist/infra/lifecycle/shutdown-signals.d.ts +30 -0
  303. package/dist/infra/lifecycle/shutdown-signals.js +48 -0
  304. package/dist/infra/lock/key-template.d.ts +13 -0
  305. package/dist/infra/lock/key-template.js +46 -0
  306. package/dist/infra/lock/lock.module.d.ts +3 -0
  307. package/dist/infra/lock/lock.module.js +16 -0
  308. package/dist/infra/lock/lock.service.d.ts +120 -0
  309. package/dist/infra/lock/lock.service.js +343 -0
  310. package/dist/infra/lock/shared-lease.d.ts +44 -0
  311. package/dist/infra/lock/shared-lease.js +121 -0
  312. package/dist/infra/lock/with-lock.decorator.d.ts +28 -0
  313. package/dist/infra/lock/with-lock.decorator.js +49 -0
  314. package/dist/infra/logging/logging.module.d.ts +16 -0
  315. package/dist/infra/logging/logging.module.js +34 -0
  316. package/dist/infra/queue/configured-processor.d.ts +18 -0
  317. package/dist/infra/queue/configured-processor.js +23 -0
  318. package/dist/infra/queue/job-failure.d.ts +18 -0
  319. package/dist/infra/queue/job-failure.js +26 -0
  320. package/dist/infra/queue/queue-shutdown.d.ts +27 -0
  321. package/dist/infra/queue/queue-shutdown.js +81 -0
  322. package/dist/infra/queue/queue.module.d.ts +16 -0
  323. package/dist/infra/queue/queue.module.js +61 -0
  324. package/dist/infra/queue/redis-connection.d.ts +7 -0
  325. package/dist/infra/queue/redis-connection.js +18 -0
  326. package/dist/infra/queue/retired-schedulers.d.ts +7 -0
  327. package/dist/infra/queue/retired-schedulers.js +9 -0
  328. package/dist/infra/queue/run-job.d.ts +16 -0
  329. package/dist/infra/queue/run-job.js +19 -0
  330. package/dist/infra/redis/redis.module.d.ts +24 -0
  331. package/dist/infra/redis/redis.module.js +87 -0
  332. package/dist/infra/schedule/cron-tick.d.ts +12 -0
  333. package/dist/infra/schedule/cron-tick.js +25 -0
  334. package/dist/infra/schedule/locked-cron.decorator.d.ts +27 -0
  335. package/dist/infra/schedule/locked-cron.decorator.js +53 -0
  336. package/dist/infra/schedule/locked-interval.d.ts +69 -0
  337. package/dist/infra/schedule/locked-interval.js +190 -0
  338. package/dist/infra/schedule/locked-tick.d.ts +90 -0
  339. package/dist/infra/schedule/locked-tick.js +137 -0
  340. package/dist/infra/schedule/schedule.module.d.ts +8 -0
  341. package/dist/infra/schedule/schedule.module.js +27 -0
  342. package/dist/infra/schedule/scheduled-runs.d.ts +69 -0
  343. package/dist/infra/schedule/scheduled-runs.js +163 -0
  344. package/dist/infra/swagger/swagger.d.ts +16 -0
  345. package/dist/infra/swagger/swagger.js +31 -0
  346. package/dist/infra/throttler/credential-throttler.d.ts +35 -0
  347. package/dist/infra/throttler/credential-throttler.js +77 -0
  348. package/dist/infra/throttler/named-throttlers.d.ts +31 -0
  349. package/dist/infra/throttler/named-throttlers.js +119 -0
  350. package/dist/infra/throttler/redis-throttler-storage.d.ts +38 -0
  351. package/dist/infra/throttler/redis-throttler-storage.js +130 -0
  352. package/dist/infra/throttler/throttler.guard.d.ts +23 -0
  353. package/dist/infra/throttler/throttler.guard.js +68 -0
  354. package/dist/infra/throttler/throttler.module.d.ts +15 -0
  355. package/dist/infra/throttler/throttler.module.js +53 -0
  356. package/dist/infra/tokens.d.ts +15 -0
  357. package/dist/infra/tokens.js +15 -0
  358. package/dist/infra/validation/create-zod-dto.d.ts +23 -0
  359. package/dist/infra/validation/create-zod-dto.js +35 -0
  360. package/dist/infra/validation/parse-with-zod.d.ts +7 -0
  361. package/dist/infra/validation/parse-with-zod.js +12 -0
  362. package/dist/infra/validation/validation.module.d.ts +3 -0
  363. package/dist/infra/validation/validation.module.js +16 -0
  364. package/dist/infra/validation/zod-params.d.ts +7 -0
  365. package/dist/infra/validation/zod-params.js +42 -0
  366. package/dist/infra/validation/zod-validation.pipe.d.ts +11 -0
  367. package/dist/infra/validation/zod-validation.pipe.js +31 -0
  368. package/dist/kernel.d.ts +9 -244
  369. package/dist/kernel.js +8 -1305
  370. package/dist/kernel.module.d.ts +17 -0
  371. package/dist/kernel.module.js +136 -0
  372. package/dist/lifecycle/kernel-lifecycle.d.ts +140 -0
  373. package/dist/lifecycle/kernel-lifecycle.js +451 -0
  374. package/dist/lifecycle/tokens.d.ts +3 -0
  375. package/dist/lifecycle/tokens.js +3 -0
  376. package/dist/log-context.d.ts +2 -0
  377. package/dist/log-context.js +4 -0
  378. package/dist/models/models.module.d.ts +3 -0
  379. package/dist/models/models.module.js +24 -0
  380. package/dist/models/prices.d.ts +8 -2
  381. package/dist/models/prices.js +65 -37
  382. package/dist/models/purposes.controller.d.ts +1 -1
  383. package/dist/models/purposes.controller.js +5 -6
  384. package/dist/models/purposes.d.ts +35 -13
  385. package/dist/models/purposes.js +101 -51
  386. package/dist/orgs/directory-sync.controller.d.ts +1 -1
  387. package/dist/orgs/directory-sync.controller.js +2 -2
  388. package/dist/orgs/directory-sync.d.ts +61 -31
  389. package/dist/orgs/directory-sync.js +212 -125
  390. package/dist/orgs/invitations.controller.d.ts +8 -8
  391. package/dist/orgs/invitations.controller.js +27 -26
  392. package/dist/orgs/invitations.service.d.ts +12 -9
  393. package/dist/orgs/invitations.service.js +130 -92
  394. package/dist/orgs/job-ids.d.ts +8 -0
  395. package/dist/orgs/job-ids.js +8 -0
  396. package/dist/orgs/members.service.d.ts +19 -12
  397. package/dist/orgs/members.service.js +161 -117
  398. package/dist/orgs/offboarding.d.ts +54 -57
  399. package/dist/orgs/offboarding.js +161 -71
  400. package/dist/orgs/org-lock.d.ts +28 -19
  401. package/dist/orgs/org-lock.js +81 -35
  402. package/dist/orgs/org.guard.d.ts +1 -1
  403. package/dist/orgs/org.guard.js +2 -2
  404. package/dist/orgs/orgs.controller.d.ts +13 -13
  405. package/dist/orgs/orgs.controller.js +29 -17
  406. package/dist/orgs/orgs.module.d.ts +6 -0
  407. package/dist/orgs/orgs.module.js +68 -0
  408. package/dist/orgs/orgs.service.d.ts +30 -19
  409. package/dist/orgs/orgs.service.js +139 -86
  410. package/dist/orgs/settings.controller.d.ts +1 -1
  411. package/dist/orgs/settings.controller.js +8 -6
  412. package/dist/orgs/settings.service.d.ts +14 -8
  413. package/dist/orgs/settings.service.js +75 -46
  414. package/dist/overrides.d.ts +56 -0
  415. package/dist/overrides.js +30 -0
  416. package/dist/roles/gateway-role.d.ts +43 -0
  417. package/dist/roles/gateway-role.js +98 -0
  418. package/dist/roles/gateway.module.d.ts +8 -0
  419. package/dist/roles/gateway.module.js +28 -0
  420. package/dist/roles/worker-role.d.ts +63 -0
  421. package/dist/roles/worker-role.js +144 -0
  422. package/dist/roles/worker.module.d.ts +14 -0
  423. package/dist/roles/worker.module.js +90 -0
  424. package/dist/runtime/abort.js +19 -2
  425. package/dist/runtime/checkpointer.d.ts +8 -3
  426. package/dist/runtime/checkpointer.js +87 -55
  427. package/dist/runtime/conversation-lock.d.ts +20 -11
  428. package/dist/runtime/conversation-lock.js +62 -72
  429. package/dist/runtime/hook-calls.d.ts +3 -3
  430. package/dist/runtime/hook-calls.js +1 -6
  431. package/dist/runtime/job-ids.d.ts +10 -0
  432. package/dist/runtime/job-ids.js +10 -0
  433. package/dist/runtime/langgraph-loop.js +1 -1
  434. package/dist/runtime/loop.d.ts +7 -0
  435. package/dist/runtime/loop.js +14 -0
  436. package/dist/runtime/maintenance-queue.d.ts +10 -0
  437. package/dist/runtime/maintenance-queue.js +10 -0
  438. package/dist/runtime/maintenance.d.ts +45 -74
  439. package/dist/runtime/maintenance.js +139 -137
  440. package/dist/runtime/model-call.d.ts +7 -4
  441. package/dist/runtime/model-call.js +24 -57
  442. package/dist/runtime/providers.d.ts +17 -6
  443. package/dist/runtime/providers.js +66 -25
  444. package/dist/runtime/quota.d.ts +17 -3
  445. package/dist/runtime/quota.js +27 -2
  446. package/dist/runtime/retired-schedulers.d.ts +7 -0
  447. package/dist/runtime/retired-schedulers.js +31 -0
  448. package/dist/runtime/run-control.d.ts +33 -0
  449. package/dist/runtime/run-control.js +77 -0
  450. package/dist/runtime/run-finish.d.ts +26 -17
  451. package/dist/runtime/run-finish.js +98 -51
  452. package/dist/runtime/run-jobs.d.ts +48 -0
  453. package/dist/runtime/run-jobs.js +95 -0
  454. package/dist/runtime/run-processors.d.ts +60 -0
  455. package/dist/runtime/run-processors.js +185 -0
  456. package/dist/runtime/run-queue.d.ts +32 -57
  457. package/dist/runtime/run-queue.js +291 -295
  458. package/dist/runtime/run-steps.d.ts +39 -0
  459. package/dist/runtime/run-steps.js +96 -0
  460. package/dist/runtime/run-worker.d.ts +121 -75
  461. package/dist/runtime/run-worker.js +340 -226
  462. package/dist/runtime/runtime.module.d.ts +10 -0
  463. package/dist/runtime/runtime.module.js +112 -0
  464. package/dist/runtime/step-log.d.ts +40 -0
  465. package/dist/runtime/step-log.js +94 -0
  466. package/dist/runtime/stream.controller.d.ts +5 -8
  467. package/dist/runtime/stream.controller.js +14 -12
  468. package/dist/runtime/stream.d.ts +24 -6
  469. package/dist/runtime/stream.js +78 -7
  470. package/dist/runtime/subagents/child.d.ts +3 -44
  471. package/dist/runtime/subagents/child.js +0 -79
  472. package/dist/runtime/subagents/definition.d.ts +4 -4
  473. package/dist/runtime/subagents/definition.js +2 -2
  474. package/dist/runtime/subagents/dispatch.d.ts +87 -6
  475. package/dist/runtime/subagents/dispatch.js +135 -140
  476. package/dist/runtime/subagents/limits.d.ts +9 -4
  477. package/dist/runtime/subagents/limits.js +4 -2
  478. package/dist/runtime/subagents/org-agents.d.ts +4 -4
  479. package/dist/runtime/subagents/org-agents.js +1 -1
  480. package/dist/runtime/subagents/progress.d.ts +2 -2
  481. package/dist/runtime/subagents/roster.d.ts +3 -3
  482. package/dist/runtime/subagents/roster.js +1 -1
  483. package/dist/runtime/subagents/skill-fork.d.ts +6 -7
  484. package/dist/runtime/subagents/skill-fork.js +16 -5
  485. package/dist/runtime/subagents/subagents.service.d.ts +40 -0
  486. package/dist/runtime/subagents/subagents.service.js +101 -0
  487. package/dist/runtime/usage-report.d.ts +94 -52
  488. package/dist/runtime/usage-report.js +200 -100
  489. package/dist/runtime/waits.d.ts +125 -57
  490. package/dist/runtime/waits.js +431 -208
  491. package/dist/sandbox/job-ids.d.ts +10 -0
  492. package/dist/sandbox/job-ids.js +10 -0
  493. package/dist/sandbox/jobs.d.ts +41 -0
  494. package/dist/sandbox/jobs.js +113 -0
  495. package/dist/sandbox/leases.d.ts +39 -31
  496. package/dist/sandbox/leases.js +117 -257
  497. package/dist/sandbox/providers.d.ts +19 -0
  498. package/dist/sandbox/providers.js +38 -0
  499. package/dist/sandbox/sandbox.module.d.ts +8 -0
  500. package/dist/sandbox/sandbox.module.js +30 -0
  501. package/dist/sandbox/sandbox.service.d.ts +24 -29
  502. package/dist/sandbox/sandbox.service.js +106 -75
  503. package/dist/skills/catalog.d.ts +33 -20
  504. package/dist/skills/catalog.js +96 -53
  505. package/dist/skills/changes.controller.d.ts +4 -4
  506. package/dist/skills/changes.controller.js +15 -9
  507. package/dist/skills/changes.service.d.ts +28 -18
  508. package/dist/skills/changes.service.js +421 -364
  509. package/dist/skills/invocable.controller.d.ts +1 -1
  510. package/dist/skills/invocable.controller.js +8 -5
  511. package/dist/skills/invoke.d.ts +16 -15
  512. package/dist/skills/invoke.js +48 -17
  513. package/dist/skills/skills.controller.d.ts +1 -1
  514. package/dist/skills/skills.controller.js +11 -6
  515. package/dist/skills/skills.module.d.ts +6 -0
  516. package/dist/skills/skills.module.js +30 -0
  517. package/dist/skills/skills.service.d.ts +47 -30
  518. package/dist/skills/skills.service.js +221 -158
  519. package/dist/storage/job-ids.d.ts +6 -0
  520. package/dist/storage/job-ids.js +6 -0
  521. package/dist/storage/purge.d.ts +22 -7
  522. package/dist/storage/purge.js +55 -3
  523. package/dist/storage/storage.module.d.ts +6 -0
  524. package/dist/storage/storage.module.js +23 -0
  525. package/dist/storage/storage.service.d.ts +18 -4
  526. package/dist/storage/storage.service.js +44 -3
  527. package/dist/tools/approvals.controller.d.ts +1 -1
  528. package/dist/tools/approvals.controller.js +12 -8
  529. package/dist/tools/approvals.service.d.ts +27 -25
  530. package/dist/tools/approvals.service.js +324 -258
  531. package/dist/tools/breaker.d.ts +2 -2
  532. package/dist/tools/breaker.js +21 -3
  533. package/dist/tools/builtins/ask-user.d.ts +2 -2
  534. package/dist/tools/builtins/ask-user.js +1 -1
  535. package/dist/tools/builtins/builtin-tools.d.ts +21 -0
  536. package/dist/tools/builtins/builtin-tools.js +80 -0
  537. package/dist/tools/builtins/read-tool-output.d.ts +2 -2
  538. package/dist/tools/builtins/read-tool-output.js +1 -1
  539. package/dist/tools/builtins/sandbox/bash.js +2 -2
  540. package/dist/tools/builtins/sandbox/common.d.ts +2 -1
  541. package/dist/tools/builtins/sandbox/deliver.js +2 -2
  542. package/dist/tools/builtins/sandbox/edit.js +1 -1
  543. package/dist/tools/builtins/sandbox/glob.js +2 -2
  544. package/dist/tools/builtins/sandbox/grep.js +2 -2
  545. package/dist/tools/builtins/sandbox/read.js +1 -1
  546. package/dist/tools/builtins/sandbox/write.js +1 -1
  547. package/dist/tools/builtins/skill-load.d.ts +3 -3
  548. package/dist/tools/builtins/skill-load.js +1 -1
  549. package/dist/tools/canonical-json.d.ts +6 -0
  550. package/dist/tools/canonical-json.js +16 -0
  551. package/dist/tools/connector-content.controller.d.ts +1 -1
  552. package/dist/tools/connector-content.controller.js +11 -6
  553. package/dist/tools/connector-content.d.ts +12 -15
  554. package/dist/tools/connector-content.js +53 -18
  555. package/dist/tools/connectors.controller.d.ts +1 -1
  556. package/dist/tools/connectors.controller.js +21 -10
  557. package/dist/tools/connectors.service.d.ts +31 -13
  558. package/dist/tools/connectors.service.js +434 -344
  559. package/dist/tools/credentials.d.ts +17 -20
  560. package/dist/tools/credentials.js +55 -34
  561. package/dist/tools/drift.d.ts +29 -41
  562. package/dist/tools/drift.js +111 -79
  563. package/dist/tools/info.d.ts +12 -9
  564. package/dist/tools/info.js +33 -7
  565. package/dist/tools/job-ids.d.ts +13 -0
  566. package/dist/tools/job-ids.js +15 -0
  567. package/dist/tools/jobs.d.ts +24 -0
  568. package/dist/tools/jobs.js +69 -0
  569. package/dist/tools/oauth/flow-paths.d.ts +16 -0
  570. package/dist/tools/oauth/flow-paths.js +38 -0
  571. package/dist/tools/oauth/flow.d.ts +30 -30
  572. package/dist/tools/oauth/flow.js +109 -81
  573. package/dist/tools/oauth/oauth.controller.d.ts +3 -3
  574. package/dist/tools/oauth/oauth.controller.js +12 -9
  575. package/dist/tools/oauth/tokens.d.ts +11 -3
  576. package/dist/tools/oauth/tokens.js +15 -14
  577. package/dist/tools/outputs.d.ts +13 -4
  578. package/dist/tools/outputs.js +47 -3
  579. package/dist/tools/pipeline.d.ts +62 -46
  580. package/dist/tools/pipeline.js +145 -64
  581. package/dist/tools/policy.d.ts +2 -2
  582. package/dist/tools/questions.controller.d.ts +1 -1
  583. package/dist/tools/questions.controller.js +8 -5
  584. package/dist/tools/questions.service.d.ts +25 -24
  585. package/dist/tools/questions.service.js +201 -142
  586. package/dist/tools/registry.d.ts +30 -20
  587. package/dist/tools/registry.js +73 -37
  588. package/dist/tools/specs.d.ts +5 -4
  589. package/dist/tools/specs.js +3 -1
  590. package/dist/tools/tools.module.d.ts +10 -0
  591. package/dist/tools/tools.module.js +91 -0
  592. package/dist/ui/call-extension.d.ts +16 -0
  593. package/dist/ui/call-extension.js +38 -0
  594. package/dist/ui/embed-token.d.ts +9 -5
  595. package/dist/ui/embed-token.js +34 -6
  596. package/dist/ui/ui-stream.d.ts +22 -17
  597. package/dist/ui/ui-stream.js +72 -12
  598. package/dist/ui/ui.module.d.ts +7 -0
  599. package/dist/ui/ui.module.js +28 -0
  600. package/dist/ui/views.controller.d.ts +14 -12
  601. package/dist/ui/views.controller.js +32 -25
  602. package/dist/ui/views.d.ts +9 -57
  603. package/dist/ui/views.js +43 -45
  604. package/package.json +9 -2
  605. package/dist/http/health.controller.d.ts +0 -26
  606. package/dist/http/health.controller.js +0 -79
  607. package/dist/http/tokens.d.ts +0 -131
  608. package/dist/http/tokens.js +0 -131
  609. package/dist/http/zod.pipe.d.ts +0 -8
  610. package/dist/http/zod.pipe.js +0 -14
  611. package/dist/identity/rate-limit.d.ts +0 -55
  612. package/dist/identity/rate-limit.js +0 -121
  613. package/dist/sandbox/lifecycle.d.ts +0 -21
  614. package/dist/sandbox/lifecycle.js +0 -68
  615. /package/dist/http/{gateway.module.d.ts → gateway-routes.d.ts} +0 -0
  616. /package/dist/http/{gateway.module.js → gateway-routes.js} +0 -0
@@ -1,12 +1,29 @@
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 { TOOL_TITLE_MAX, ToolError, validateToolPresentation, } from "@capybara-hq/plugin-sdk";
11
+ import { getQueueToken } from "@nestjs/bullmq";
12
+ import { Inject, Injectable } from "@nestjs/common";
2
13
  import { sql } from "kysely";
3
14
  import { ApiError } from "../errors.js";
4
15
  import { audit } from "../identity/audit.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 { KERNEL_LOGGER } from "../infra/tokens.js";
21
+ import { MAINTENANCE_QUEUE_NAME } from "../runtime/maintenance-queue.js";
5
22
  import { HIDDEN_FORMAT_RE } from "../text.js";
6
- import { CredentialMissing, isOAuth } from "./credentials.js";
23
+ import { CredentialMissing, Credentials, isOAuth } from "./credentials.js";
7
24
  import { toolKey, toolKeyIssue } from "./naming.js";
8
25
  import { redactDeep, redactorFor } from "./redact.js";
9
- import { canonicalJson, policyFromAnnotations, specHash } from "./registry.js";
26
+ import { canonicalJson, policyFromAnnotations, specHash, ToolRegistry } from "./registry.js";
10
27
  import { resourceToolSpecs } from "./resources.js";
11
28
  import { recordToolSpecs } from "./specs.js";
12
29
  /**
@@ -20,15 +37,12 @@ import { recordToolSpecs } from "./specs.js";
20
37
  * 连接器从未拍过快照(`tools_synced_at` 为空且没有工具行,即 OAuth 授权码连接器安装时不 listTools,A16)时,
21
38
  * 首个快照按安装处理(直接启用)。
22
39
  *
23
- * 触发:维护队列的周期扫描(`tools.driftIntervalHours`)、连接器在会话中报告工具清单变了(MCP
40
+ * 触发:周期扫描(`drift-scan`,每 `tools.driftIntervalHours` 一次的 `@LockedInterval`,见 jobs.ts)、连接器在会话中报告工具清单变了(MCP
24
41
  * `notifications/tools/list_changed`)、管理员手动刷新(`ConnectorsService.refresh`,走同一套比对)。
25
42
  * 授权(`tool_grants` / `conversation_tool_grants`)按 spec_hash 比对(D8),复核通过采用新指纹后旧授权自然失效。
26
43
  */
27
- /** 周期扫描:任务名与 job scheduler id(不含 `:`)。 */
28
- export const DRIFT_SCAN_JOB = "drift-scan";
29
- export const DRIFT_SCHEDULER_ID = "drift-scan-interval";
30
- /** 单个连接器的漂移检查任务名。 */
31
- export const DRIFT_CONNECTOR_JOB = "drift-connector";
44
+ import { DRIFT_CONNECTOR_JOB } from "./job-ids.js";
45
+ export { DRIFT_CONNECTOR_JOB, DRIFT_SCAN_JOB, DRIFT_SCHEDULER_ID } from "./job-ids.js";
32
46
  /**
33
47
  * list_changed 触发的检查:jobId 按连接器与分钟桶去重(同一分钟内多次通知只检查一次;connectorId 为 UUID,不含 `:`)。
34
48
  */
@@ -167,30 +181,28 @@ export function toolIssue(slug, spec) {
167
181
  }
168
182
  /** 任务保留时长:完成的 jobId 留一段时间,同一桶内的重复投递被 BullMQ 按 jobId 去重。 */
169
183
  const KEEP_FAILED = { age: 86_400 };
170
- export class ToolDrift {
171
- d;
172
- constructor(d) {
173
- this.d = d;
174
- const m = d.maintenance;
175
- if (m) {
176
- m.schedule({
177
- id: DRIFT_SCHEDULER_ID,
178
- name: DRIFT_SCAN_JOB,
179
- everyMs: () => this.intervalMs(),
180
- });
181
- m.handle(DRIFT_SCAN_JOB, async () => {
182
- const n = await this.scan();
183
- if (n > 0)
184
- d.log.info("tool drift checks enqueued", { count: n });
185
- });
186
- m.handle(DRIFT_CONNECTOR_JOB, async (job) => {
187
- const { orgId, connectorId, trigger } = job.data;
188
- await this.check(orgId, connectorId, trigger);
189
- });
190
- }
184
+ let ToolDrift = class ToolDrift {
185
+ db;
186
+ registry;
187
+ credentials;
188
+ config;
189
+ log;
190
+ queue;
191
+ txHost;
192
+ constructor(db, registry, credentials, config, log,
193
+ /** The maintenance queue's producer (`drift-connector` jobs). */
194
+ queue, txHost) {
195
+ this.db = db;
196
+ this.registry = registry;
197
+ this.credentials = credentials;
198
+ this.config = config;
199
+ this.log = log;
200
+ this.queue = queue;
201
+ this.txHost = txHost;
191
202
  }
203
+ /** The scan period (`tools.driftIntervalHours`). */
192
204
  intervalMs() {
193
- return this.d.config().tools.driftIntervalHours * 3_600_000;
205
+ return this.config.get().tools.driftIntervalHours * 3_600_000;
194
206
  }
195
207
  /**
196
208
  * 打开一次会话拉工具清单,无论成败都关闭会话;会话带 `listResources` 即视为支持 resources。
@@ -200,11 +212,11 @@ export class ToolDrift {
200
212
  async listTools(connector, endpoint, auth, logCtx,
201
213
  /** 收到 401:OAuth 连接器在刷新锁内刷新(参数为最后一次注入的鉴权)。 */
202
214
  onUnauthorized = async () => { }) {
203
- const c = this.d.registry.findConnector(connector);
215
+ const c = this.registry.findConnector(connector);
204
216
  if (!c) {
205
217
  throw new ApiError("connector.connect_failed", `The connector ${connector} is not installed`);
206
218
  }
207
- const signal = AbortSignal.timeout(this.d.config().tools.timeoutMs);
219
+ const signal = AbortSignal.timeout(this.config.get().tools.timeoutMs);
208
220
  const injected = [];
209
221
  const tracked = async () => {
210
222
  const inj = await auth();
@@ -230,20 +242,21 @@ export class ToolDrift {
230
242
  if (e instanceof CredentialMissing)
231
243
  throw e;
232
244
  // 日志经 logger 打码(凭据值已在构造注入时登记)
233
- this.d.log.warn("connector listTools failed", { ...logCtx, connector, err: e });
245
+ this.log.warn("connector listTools failed", { ...logCtx, connector, err: e });
234
246
  throw new ApiError("connector.connect_failed", connectFailedMessage(e, redactorFor(injected)));
235
247
  }
236
248
  finally {
237
249
  await session?.close().catch((e) => {
238
- this.d.log.warn("connector session close failed", { ...logCtx, connector, err: e });
250
+ this.log.warn("connector session close failed", { ...logCtx, connector, err: e });
239
251
  });
240
252
  }
241
253
  }
242
254
  /**
243
- * 把新快照与当前工具行比对并写入(调用方已在事务内锁住连接器行);返回按名排序的变化。
255
+ * 把新快照与当前工具行比对并写入(调用方已在事务内锁住连接器行:`mandatory`);返回按名排序的变化。
244
256
  * 规则见文件头。待复核的新定义也写进 `tool_specs`(内容寻址,只增不改)。
245
257
  */
246
- async apply(t, app, rows) {
258
+ async apply(app, rows) {
259
+ const t = this.db.db;
247
260
  const current = await t
248
261
  .selectFrom("connector_tools")
249
262
  .select([
@@ -341,7 +354,7 @@ export class ToolDrift {
341
354
  .where("name", "=", r.name)
342
355
  .execute();
343
356
  // No audit row (the model sees nothing new), but leave a trace for operators.
344
- this.d.log.info("connector tool display updated", {
357
+ this.log.info("connector tool display updated", {
345
358
  event: "connector.tool_display_updated",
346
359
  connectorId: app.id,
347
360
  tool: r.name,
@@ -393,8 +406,8 @@ export class ToolDrift {
393
406
  * 连不上 / 都失败 → 跳过(不改快照,下个周期或下次通知再查)。
394
407
  */
395
408
  async check(orgId, connectorId, trigger) {
396
- const { db, log } = this.d;
397
- const app = (await db
409
+ const log = this.log;
410
+ const app = (await this.db
398
411
  .selectFrom("connectors")
399
412
  .select([
400
413
  "id",
@@ -415,7 +428,7 @@ export class ToolDrift {
415
428
  return { status: "skipped", reason: "not_found" };
416
429
  if (app.status !== "active")
417
430
  return { status: "skipped", reason: "inactive" };
418
- if (!this.d.registry.findConnector(app.connector)) {
431
+ if (!this.registry.findConnector(app.connector)) {
419
432
  log.warn("tool drift check skipped: connector not installed", {
420
433
  orgId,
421
434
  connectorId,
@@ -427,7 +440,7 @@ export class ToolDrift {
427
440
  const personal = auth.type !== "none" && !isOAuth(auth) && auth.ownership === "personal";
428
441
  const personalOAuth = auth.type === "oauth_code";
429
442
  const accounts = personal || personalOAuth
430
- ? await this.d.credentials.personalHolders(orgId, connectorId, PERSONAL_CANDIDATES)
443
+ ? await this.credentials.personalHolders(orgId, connectorId, PERSONAL_CANDIDATES)
431
444
  : [app.created_by];
432
445
  if (accounts.length === 0) {
433
446
  log.info("tool drift check skipped: no member credential", { orgId, connectorId });
@@ -437,7 +450,7 @@ export class ToolDrift {
437
450
  let reason = "no_credential";
438
451
  for (const accountId of accounts) {
439
452
  try {
440
- listed = await this.listTools(app.connector, app.endpoint, () => this.d.credentials.injection(orgId, connectorId, auth, accountId), { orgId, connectorId, trigger }, (last) => this.d.credentials.onUnauthorized(orgId, connectorId, auth, accountId, last));
453
+ listed = await this.listTools(app.connector, app.endpoint, () => this.credentials.injection(orgId, connectorId, auth, accountId), { orgId, connectorId, trigger }, (last) => this.credentials.onUnauthorized(orgId, connectorId, auth, accountId, last));
441
454
  break;
442
455
  }
443
456
  catch (e) {
@@ -455,53 +468,57 @@ export class ToolDrift {
455
468
  return { status: "skipped", reason };
456
469
  }
457
470
  const { rows } = snapshot(app.slug, listed.specs, listed.resources);
458
- const changes = await db.transaction().execute(async (t) => {
459
- const locked = await t
460
- .selectFrom("connectors")
461
- .select(["id", "tools_synced_at"])
462
- .where("id", "=", connectorId)
463
- .where("deleted_at", "is", null)
464
- .where("status", "=", "active")
465
- .forUpdate()
466
- .executeTakeFirst();
467
- if (!locked)
468
- return null;
469
- const c = await this.apply(t, locked, rows);
470
- if (c.added.length + c.changed.length + c.removed.length > 0) {
471
- await audit(t, {
472
- orgId,
473
- action: "connector.tools_drifted",
474
- target: connectorId,
475
- detail: {
476
- added: c.added.length,
477
- changed: c.changed.length,
478
- removed: c.removed.length,
479
- trigger,
480
- },
481
- });
482
- }
483
- return c;
484
- });
471
+ const changes = await this.applyChecked(orgId, connectorId, trigger, rows);
485
472
  if (!changes)
486
473
  return { status: "skipped", reason: "inactive" };
487
474
  return { status: "checked", changes };
488
475
  }
476
+ /** The locked compare-and-write of {@link check}, audited when something changed. */
477
+ async applyChecked(orgId, connectorId, trigger, rows) {
478
+ const t = this.db.db;
479
+ const locked = await t
480
+ .selectFrom("connectors")
481
+ .select(["id", "tools_synced_at"])
482
+ .where("id", "=", connectorId)
483
+ .where("deleted_at", "is", null)
484
+ .where("status", "=", "active")
485
+ .forUpdate()
486
+ .executeTakeFirst();
487
+ if (!locked)
488
+ return null;
489
+ const c = await this.apply(locked, rows);
490
+ if (c.added.length + c.changed.length + c.removed.length > 0) {
491
+ await audit(t, {
492
+ orgId,
493
+ action: "connector.tools_drifted",
494
+ target: connectorId,
495
+ detail: {
496
+ added: c.added.length,
497
+ changed: c.changed.length,
498
+ removed: c.removed.length,
499
+ trigger,
500
+ },
501
+ });
502
+ }
503
+ return c;
504
+ }
489
505
  /**
490
506
  * 连接器在会话中报告工具清单变了:投递一次该连接器的检查(jobId 按分钟桶去重)。投递失败只记日志。
491
507
  */
492
508
  async onToolsChanged(orgId, connectorId) {
493
- const m = this.d.maintenance;
494
- if (!m || connectorId.includes(":"))
509
+ if (connectorId.includes(":"))
495
510
  return;
496
511
  try {
497
- await m.add(DRIFT_CONNECTOR_JOB, { orgId, connectorId, trigger: "list_changed" }, {
512
+ await this.queue.add(DRIFT_CONNECTOR_JOB, { orgId, connectorId, trigger: "list_changed" }, {
498
513
  jobId: listChangedJobId(connectorId),
514
+ // a check runs once: a failure waits for the next trigger (the queue default retries)
515
+ attempts: 1,
499
516
  removeOnComplete: { age: 3_600 },
500
517
  removeOnFail: KEEP_FAILED,
501
518
  });
502
519
  }
503
520
  catch (err) {
504
- this.d.log.warn("cannot enqueue tool drift check", { orgId, connectorId, err });
521
+ this.log.warn("cannot enqueue tool drift check", { orgId, connectorId, err });
505
522
  }
506
523
  }
507
524
  /**
@@ -509,12 +526,9 @@ export class ToolDrift {
509
526
  * jobId 按周期桶去重——即使扫描在多个副本上重复执行,每个连接器每周期也只检查一次。返回投递数。
510
527
  */
511
528
  async scan() {
512
- const m = this.d.maintenance;
513
- if (!m)
514
- return 0;
515
529
  const interval = this.intervalMs();
516
530
  const bucket = Math.floor(Date.now() / interval);
517
- const apps = await this.d.db
531
+ const apps = await this.db
518
532
  .selectFrom("connectors")
519
533
  .select(["id", "org_id"])
520
534
  .where("deleted_at", "is", null)
@@ -528,12 +542,30 @@ export class ToolDrift {
528
542
  for (const a of apps) {
529
543
  if (a.id.includes(":"))
530
544
  continue;
531
- await m.add(DRIFT_CONNECTOR_JOB, { orgId: a.org_id, connectorId: a.id, trigger: "schedule" }, {
545
+ await this.queue.add(DRIFT_CONNECTOR_JOB, { orgId: a.org_id, connectorId: a.id, trigger: "schedule" }, {
532
546
  jobId: driftScanJobId(a.id, bucket),
547
+ attempts: 1,
533
548
  removeOnComplete: { age: Math.ceil(interval / 1000) },
534
549
  removeOnFail: KEEP_FAILED,
535
550
  });
536
551
  }
537
552
  return apps.length;
538
553
  }
539
- }
554
+ };
555
+ __decorate([
556
+ Transactional({ propagation: "mandatory" })
557
+ ], ToolDrift.prototype, "apply", null);
558
+ __decorate([
559
+ Transactional()
560
+ ], ToolDrift.prototype, "applyChecked", null);
561
+ ToolDrift = __decorate([
562
+ Injectable(),
563
+ __param(0, Inject(KernelDb)),
564
+ __param(1, Inject(ToolRegistry)),
565
+ __param(2, Inject(Credentials)),
566
+ __param(3, Inject(KernelConfigService)),
567
+ __param(4, Inject(KERNEL_LOGGER)),
568
+ __param(5, Inject(getQueueToken(MAINTENANCE_QUEUE_NAME))),
569
+ __param(6, Inject(TransactionHost))
570
+ ], ToolDrift);
571
+ export { ToolDrift };
@@ -1,5 +1,7 @@
1
- import type { KernelDb } from "../db/kernel-schema.js";
2
- import type { ToolRegistry } from "./registry.js";
1
+ import { ConversationAccess } from "../conversations/access.js";
2
+ import type { KernelSchemaDb } from "../db/kernel-schema.js";
3
+ import { KernelDb } from "../infra/database/kernel-db.js";
4
+ import { ToolRegistry } from "./registry.js";
3
5
  /**
4
6
  * Tool presentation metadata for the conversation page (UI refresh B, design spec §6.16.9): the
5
7
  * kind picks the row verb and the group counts, the title and key arguments the row's wording.
@@ -35,7 +37,7 @@ export declare const BUILTIN_TOOL_KINDS: Readonly<Record<string, ToolKind>>;
35
37
  export declare const TOOL_INFO_MAX_KEYS = 100;
36
38
  export declare const TOOL_INFO_KEY_MAX = 200;
37
39
  export interface ToolInfoDeps {
38
- db: KernelDb;
40
+ db: KernelSchemaDb;
39
41
  registry: Pick<ToolRegistry, "builtinSpecs" | "extensionToolSpecs">;
40
42
  }
41
43
  /**
@@ -55,13 +57,14 @@ export interface ToolInfoDeps {
55
57
  * here it only changes the label.
56
58
  */
57
59
  export declare function toolInfo(deps: ToolInfoDeps, orgId: string, keys: readonly string[]): Promise<ToolInfo[]>;
58
- export interface ConversationToolInfoDeps extends ToolInfoDeps {
59
- /** Conversation visibility (the same rule as the events API: `ConversationsService.isAccessible`). */
60
- isAccessible(orgId: string, conversationId: string, viewerAccountId: string): Promise<boolean>;
61
- }
62
60
  /** `GET /conversations/:id/tools`: {@link toolInfo} for a conversation the viewer can read. */
63
61
  export declare class ConversationToolInfo {
64
- private readonly d;
65
- constructor(d: ConversationToolInfoDeps);
62
+ private readonly db;
63
+ private readonly registry;
64
+ /** Conversation visibility (the same rule as the events API). */
65
+ private readonly access;
66
+ constructor(db: KernelDb, registry: Pick<ToolRegistry, "builtinSpecs" | "extensionToolSpecs">,
67
+ /** Conversation visibility (the same rule as the events API). */
68
+ access: Pick<ConversationAccess, "isAccessible">);
66
69
  get(orgId: string, conversationId: string, viewerAccountId: string, keys: readonly string[]): Promise<ToolInfo[]>;
67
70
  }
@@ -1,6 +1,19 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
8
+ return function (target, key) { decorator(target, key, paramIndex); }
9
+ };
10
+ import { Inject, Injectable } from "@nestjs/common";
11
+ import { ConversationAccess } from "../conversations/access.js";
1
12
  import { ApiError } from "../errors.js";
13
+ import { KernelDb } from "../infra/database/kernel-db.js";
2
14
  import { UUID_RE } from "../ui/registry.js";
3
15
  import { KEY_SEPARATOR, toolKey } from "./naming.js";
16
+ import { ToolRegistry } from "./registry.js";
4
17
  /** Kinds of the kernel builtin tools; a builtin missing here is a plain `tool`. */
5
18
  export const BUILTIN_TOOL_KINDS = {
6
19
  sandbox_bash: "command",
@@ -98,16 +111,29 @@ export async function toolInfo(deps, orgId, keys) {
98
111
  });
99
112
  }
100
113
  /** `GET /conversations/:id/tools`: {@link toolInfo} for a conversation the viewer can read. */
101
- export class ConversationToolInfo {
102
- d;
103
- constructor(d) {
104
- this.d = d;
114
+ let ConversationToolInfo = class ConversationToolInfo {
115
+ db;
116
+ registry;
117
+ access;
118
+ constructor(db, registry,
119
+ /** Conversation visibility (the same rule as the events API). */
120
+ access) {
121
+ this.db = db;
122
+ this.registry = registry;
123
+ this.access = access;
105
124
  }
106
125
  async get(orgId, conversationId, viewerAccountId, keys) {
107
126
  if (!UUID_RE.test(conversationId) ||
108
- !(await this.d.isAccessible(orgId, conversationId, viewerAccountId))) {
127
+ !(await this.access.isAccessible(orgId, conversationId, viewerAccountId))) {
109
128
  throw new ApiError("conversation.not_found", "Conversation not found");
110
129
  }
111
- return toolInfo(this.d, orgId, keys);
130
+ return toolInfo({ db: this.db.db, registry: this.registry }, orgId, keys);
112
131
  }
113
- }
132
+ };
133
+ ConversationToolInfo = __decorate([
134
+ Injectable(),
135
+ __param(0, Inject(KernelDb)),
136
+ __param(1, Inject(ToolRegistry)),
137
+ __param(2, Inject(ConversationAccess))
138
+ ], ConversationToolInfo);
139
+ export { ConversationToolInfo };
@@ -0,0 +1,13 @@
1
+ /** The periodic drift scan (`@LockedInterval`, tools/jobs.ts). */
2
+ export declare const DRIFT_SCAN_JOB = "drift-scan";
3
+ /** The BullMQ repeatable scheduler the scan had before it became `@LockedInterval` (retired). */
4
+ export declare const DRIFT_SCHEDULER_ID = "drift-scan-interval";
5
+ /**
6
+ * 单个连接器的漂移检查任务名(维护队列上的一次性任务:生产方是 `ToolDrift`,消费方是
7
+ * `MaintenanceProcessor`)。
8
+ */
9
+ export declare const DRIFT_CONNECTOR_JOB = "drift-connector";
10
+ /** The hourly cleanup of expired tool output archives (`@LockedCron`, tools/jobs.ts). */
11
+ export declare const OUTPUT_CLEANUP_JOB = "output-cleanup";
12
+ /** The BullMQ repeatable scheduler the cleanup had before it became `@LockedCron` (retired). */
13
+ export declare const OUTPUT_CLEANUP_SCHEDULER_ID = "output-cleanup-hourly";
@@ -0,0 +1,15 @@
1
+ // The tools' job names and the retired scheduler ids: a leaf module (no service imports), read by
2
+ // the maintenance queue's retirement list.
3
+ /** The periodic drift scan (`@LockedInterval`, tools/jobs.ts). */
4
+ export const DRIFT_SCAN_JOB = "drift-scan";
5
+ /** The BullMQ repeatable scheduler the scan had before it became `@LockedInterval` (retired). */
6
+ export const DRIFT_SCHEDULER_ID = "drift-scan-interval";
7
+ /**
8
+ * 单个连接器的漂移检查任务名(维护队列上的一次性任务:生产方是 `ToolDrift`,消费方是
9
+ * `MaintenanceProcessor`)。
10
+ */
11
+ export const DRIFT_CONNECTOR_JOB = "drift-connector";
12
+ /** The hourly cleanup of expired tool output archives (`@LockedCron`, tools/jobs.ts). */
13
+ export const OUTPUT_CLEANUP_JOB = "output-cleanup";
14
+ /** The BullMQ repeatable scheduler the cleanup had before it became `@LockedCron` (retired). */
15
+ export const OUTPUT_CLEANUP_SCHEDULER_ID = "output-cleanup-hourly";
@@ -0,0 +1,24 @@
1
+ import { KernelConfigService } from "../infra/config/kernel-config.service.js";
2
+ import { KernelDb } from "../infra/database/kernel-db.js";
3
+ import { LockService } from "../infra/lock/lock.service.js";
4
+ import type { KernelLogger } from "../log.js";
5
+ import { ToolDrift } from "./drift.js";
6
+ /**
7
+ * The tools' periodic jobs, each run once per tick across replicas: the tool drift scan
8
+ * (`drift-scan`, every `tools.driftIntervalHours` and once right after the start, as the old
9
+ * repeatable scheduler's first run: `@LockedInterval` with `runOnStart`; a repeated scan in the
10
+ * same period enqueues nothing new, its job ids are per period) and the hourly cleanup of expired
11
+ * tool output archives (`output-cleanup`: `@LockedCron`).
12
+ */
13
+ export declare class ToolJobs {
14
+ private readonly drift;
15
+ private readonly db;
16
+ readonly config: KernelConfigService;
17
+ readonly lockService: LockService;
18
+ readonly log: KernelLogger;
19
+ constructor(drift: Pick<ToolDrift, "scan">, db: KernelDb, config: KernelConfigService, lockService: LockService, log: KernelLogger);
20
+ /** Enqueues a drift check of every active connector not checked in this period. */
21
+ scanDrift(): Promise<void>;
22
+ /** Deletes expired tool output archives (in batches, no long transaction). */
23
+ cleanupOutputs(): Promise<void>;
24
+ }
@@ -0,0 +1,69 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
8
+ return function (target, key) { decorator(target, key, paramIndex); }
9
+ };
10
+ import { Inject, Injectable } from "@nestjs/common";
11
+ import { KernelConfigService } from "../infra/config/kernel-config.service.js";
12
+ import { KernelDb } from "../infra/database/kernel-db.js";
13
+ import { LockService } from "../infra/lock/lock.service.js";
14
+ import { LockedCron } from "../infra/schedule/locked-cron.decorator.js";
15
+ import { LockedInterval } from "../infra/schedule/locked-interval.js";
16
+ import { KERNEL_LOGGER } from "../infra/tokens.js";
17
+ import { ToolDrift } from "./drift.js";
18
+ import { DRIFT_SCAN_JOB, OUTPUT_CLEANUP_JOB } from "./job-ids.js";
19
+ import { deleteExpiredOutputs } from "./outputs.js";
20
+ /**
21
+ * The tools' periodic jobs, each run once per tick across replicas: the tool drift scan
22
+ * (`drift-scan`, every `tools.driftIntervalHours` and once right after the start, as the old
23
+ * repeatable scheduler's first run: `@LockedInterval` with `runOnStart`; a repeated scan in the
24
+ * same period enqueues nothing new, its job ids are per period) and the hourly cleanup of expired
25
+ * tool output archives (`output-cleanup`: `@LockedCron`).
26
+ */
27
+ let ToolJobs = class ToolJobs {
28
+ drift;
29
+ db;
30
+ config;
31
+ lockService;
32
+ log;
33
+ constructor(drift, db, config, lockService, log) {
34
+ this.drift = drift;
35
+ this.db = db;
36
+ this.config = config;
37
+ this.lockService = lockService;
38
+ this.log = log;
39
+ }
40
+ /** Enqueues a drift check of every active connector not checked in this period. */
41
+ async scanDrift() {
42
+ const n = await this.drift.scan();
43
+ if (n > 0)
44
+ this.log.info("tool drift checks enqueued", { count: n });
45
+ }
46
+ /** Deletes expired tool output archives (in batches, no long transaction). */
47
+ async cleanupOutputs() {
48
+ const n = await deleteExpiredOutputs(this.db.db);
49
+ if (n > 0)
50
+ this.log.info("expired tool outputs deleted", { count: n });
51
+ }
52
+ };
53
+ __decorate([
54
+ LockedInterval(DRIFT_SCAN_JOB, (c) => c.tools.driftIntervalHours * 3_600_000, {
55
+ runOnStart: true,
56
+ })
57
+ ], ToolJobs.prototype, "scanDrift", null);
58
+ __decorate([
59
+ LockedCron("0 * * * *", { name: OUTPUT_CLEANUP_JOB })
60
+ ], ToolJobs.prototype, "cleanupOutputs", null);
61
+ ToolJobs = __decorate([
62
+ Injectable(),
63
+ __param(0, Inject(ToolDrift)),
64
+ __param(1, Inject(KernelDb)),
65
+ __param(2, Inject(KernelConfigService)),
66
+ __param(3, Inject(LockService)),
67
+ __param(4, Inject(KERNEL_LOGGER))
68
+ ], ToolJobs);
69
+ export { ToolJobs };
@@ -0,0 +1,16 @@
1
+ import { ApiError } from "../../errors.js";
2
+ /** 授权回调的路径(`http.publicUrl` + 它 = 注册给授权服务器的 redirect_uri)。 */
3
+ export declare const OAUTH_CALLBACK_PATH = "/api/v1/oauth/callback";
4
+ /** state 的有效期(秒)。 */
5
+ export declare const OAUTH_STATE_TTL_SECONDS = 600;
6
+ /** 浏览器绑定 Cookie:回调必须来自发起连接的同一个浏览器。 */
7
+ export declare const OAUTH_BINDING_COOKIE = "cap_oauth";
8
+ /** 回调失败、或连接时没给回跳页面时回到的网页(next-intl 会补语言前缀)。 */
9
+ export declare const DEFAULT_RETURN_PATH = "/settings/connections";
10
+ /** OAuth 连接器需要 `http.publicUrl`(回调地址);未配置 → 这条校验错误。 */
11
+ export declare const publicUrlRequired: () => ApiError;
12
+ export declare function callbackUrl(publicUrl: string): string;
13
+ /**
14
+ * 回跳页面只接受站内相对路径(防开放重定向):以单个 `/` 开头,不含 `\` 与控制字符,解析后仍在同一个源。
15
+ */
16
+ export declare function isSafeReturnPath(p: string): boolean;
@@ -0,0 +1,38 @@
1
+ import { ApiError } from "../../errors.js";
2
+ // The OAuth connect flow's paths and URL rules: a leaf module (no service imports), so the
3
+ // connectors service can use them without an import cycle through the flow.
4
+ /** 授权回调的路径(`http.publicUrl` + 它 = 注册给授权服务器的 redirect_uri)。 */
5
+ export const OAUTH_CALLBACK_PATH = "/api/v1/oauth/callback";
6
+ /** state 的有效期(秒)。 */
7
+ export const OAUTH_STATE_TTL_SECONDS = 600;
8
+ /** 浏览器绑定 Cookie:回调必须来自发起连接的同一个浏览器。 */
9
+ export const OAUTH_BINDING_COOKIE = "cap_oauth";
10
+ /** 回调失败、或连接时没给回跳页面时回到的网页(next-intl 会补语言前缀)。 */
11
+ export const DEFAULT_RETURN_PATH = "/settings/connections";
12
+ /** OAuth 连接器需要 `http.publicUrl`(回调地址);未配置 → 这条校验错误。 */
13
+ export const publicUrlRequired = () => new ApiError("validation_failed", "Request validation failed", [
14
+ {
15
+ path: "auth",
16
+ message: "OAuth connectors require http.publicUrl to be configured (it is used to build the OAuth callback URL)",
17
+ },
18
+ ]);
19
+ export function callbackUrl(publicUrl) {
20
+ return `${publicUrl.replace(/\/+$/, "")}${OAUTH_CALLBACK_PATH}`;
21
+ }
22
+ /**
23
+ * 回跳页面只接受站内相对路径(防开放重定向):以单个 `/` 开头,不含 `\` 与控制字符,解析后仍在同一个源。
24
+ */
25
+ export function isSafeReturnPath(p) {
26
+ if (p.length > 500 || !p.startsWith("/") || p.startsWith("//"))
27
+ return false;
28
+ // biome-ignore lint/suspicious/noControlCharactersInRegex: 正是要拒绝控制字符
29
+ if (/[\\\u0000-\u001f\u007f]/.test(p))
30
+ return false;
31
+ const base = "https://return.invalid";
32
+ try {
33
+ return new URL(p, base).origin === base;
34
+ }
35
+ catch {
36
+ return false;
37
+ }
38
+ }