@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
@@ -8,28 +8,33 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
8
8
  return function (target, key) { decorator(target, key, paramIndex); }
9
9
  };
10
10
  import { createHash, timingSafeEqual } from "node:crypto";
11
- import { Body, Controller, Get, HttpCode, Inject, Post, Req, Res } from "@nestjs/common";
11
+ import { Controller, Get, HttpCode, Inject, Post, Req, Res } from "@nestjs/common";
12
12
  import { z } from "zod";
13
13
  import { ApiError } from "../errors.js";
14
- import { KERNEL_CONFIG, RATE_LIMITER, SESSIONS, SETUP } from "../http/tokens.js";
15
- import { ZodPipe } from "../http/zod.pipe.js";
16
14
  import { clientMeta } from "../identity/auth.controller.js";
17
15
  import { setSessionCookies } from "../identity/cookies.js";
18
16
  import { MAX_PASSWORD_LENGTH } from "../identity/login.js";
19
17
  import { Public } from "../identity/principal.js";
20
- const SetupBody = z.object({
18
+ import { SessionService } from "../identity/sessions.js";
19
+ import { KernelConfigService } from "../infra/config/kernel-config.service.js";
20
+ import { CredentialThrottler } from "../infra/throttler/credential-throttler.js";
21
+ import { createZodDto } from "../infra/validation/create-zod-dto.js";
22
+ import { ZBody } from "../infra/validation/zod-params.js";
23
+ import { SetupService } from "./setup.service.js";
24
+ const SetupSchema = z.object({
21
25
  login: z.string().min(1).max(64),
22
26
  password: z.string().min(1).max(MAX_PASSWORD_LENGTH),
23
27
  displayName: z.string().trim().min(1).max(100),
24
28
  orgName: z.string().max(100).optional(),
25
29
  setupToken: z.string().max(1024).optional(),
26
30
  });
31
+ class SetupBody extends createZodDto(SetupSchema, "SetupBody") {
32
+ }
27
33
  /**
28
- * 初始化令牌的限流(scope `setup`):同一客户端 IP 10 次、全部署合计 100 次 / 900s
29
- * (合计上限防换 IP 爆破;令牌本身应足够长,正常情况下打不满)。
34
+ * The setup token's credential throttlers: 10 per client IP, 100 for the whole deployment per
35
+ * 900 s (the total stops guessing from many IPs; a long token never hits it in normal use).
30
36
  */
31
- const SETUP_TOKEN_LIMIT_TOTAL = 100;
32
- const SETUP_TOKEN_LIMIT_PER_IP = 10;
37
+ const SETUP_THROTTLERS = ["setup-token", "setup-ip"];
33
38
  const sha256 = (s) => createHash("sha256").update(s, "utf8").digest();
34
39
  /** 常数时间比较:两边先取 SHA-256,长度恒等,不因长度不同提前返回或抛错。 */
35
40
  function tokenMatches(given, expected) {
@@ -40,12 +45,12 @@ let SetupController = class SetupController {
40
45
  setup;
41
46
  sessions;
42
47
  config;
43
- limiter;
44
- constructor(setup, sessions, config, limiter) {
48
+ throttler;
49
+ constructor(setup, sessions, config, throttler) {
45
50
  this.setup = setup;
46
51
  this.sessions = sessions;
47
52
  this.config = config;
48
- this.limiter = limiter;
53
+ this.throttler = throttler;
49
54
  }
50
55
  async status() {
51
56
  return this.setup.status();
@@ -56,19 +61,14 @@ let SetupController = class SetupController {
56
61
  * 核对前先占用限流额度,超限 → 429 `auth.rate_limited`,核对通过后退还。
57
62
  */
58
63
  async complete(body, req, reply) {
59
- const cfg = this.config();
64
+ const cfg = this.config.get();
60
65
  const expected = cfg.auth.setupToken;
61
66
  if (expected !== undefined) {
62
- const { ip } = clientMeta(req);
63
- const rl = await this.limiter.reserveScoped("setup", "token", ip, SETUP_TOKEN_LIMIT_TOTAL, SETUP_TOKEN_LIMIT_PER_IP);
64
- if (!rl.allowed) {
65
- reply.header("retry-after", String(rl.retryAfterSeconds));
66
- throw new ApiError("auth.rate_limited", "Too many setup attempts; try again later");
67
- }
67
+ await this.throttler.reserve(SETUP_THROTTLERS, req, reply);
68
68
  if (!tokenMatches(body.setupToken, expected)) {
69
69
  throw new ApiError("setup.token_invalid", "Setup token is missing or invalid");
70
70
  }
71
- await this.limiter.succeededScoped("setup", "token", ip);
71
+ await this.throttler.succeeded(SETUP_THROTTLERS, req);
72
72
  }
73
73
  // 会话行与账号 / 组织在同一事务里写入;Cookie 在提交之后才设置
74
74
  const meta = clientMeta(req);
@@ -77,7 +77,9 @@ let SetupController = class SetupController {
77
77
  password: body.password,
78
78
  displayName: body.displayName,
79
79
  orgName: body.orgName,
80
- }, (trx, account) => this.sessions.create(account.id, meta, trx));
80
+ },
81
+ // runs in the setup's transaction
82
+ (account) => this.sessions.create(account.id, meta));
81
83
  if (!session)
82
84
  throw new Error("setup completed without a session");
83
85
  setSessionCookies(reply, session, cfg);
@@ -92,15 +94,15 @@ __decorate([
92
94
  Post(),
93
95
  Public(),
94
96
  HttpCode(201),
95
- __param(0, Body(new ZodPipe(SetupBody))),
97
+ __param(0, ZBody(SetupBody)),
96
98
  __param(1, Req()),
97
99
  __param(2, Res({ passthrough: true }))
98
100
  ], SetupController.prototype, "complete", null);
99
101
  SetupController = __decorate([
100
102
  Controller("api/v1/setup"),
101
- __param(0, Inject(SETUP)),
102
- __param(1, Inject(SESSIONS)),
103
- __param(2, Inject(KERNEL_CONFIG)),
104
- __param(3, Inject(RATE_LIMITER))
103
+ __param(0, Inject(SetupService)),
104
+ __param(1, Inject(SessionService)),
105
+ __param(2, Inject(KernelConfigService)),
106
+ __param(3, Inject(CredentialThrottler))
105
107
  ], SetupController);
106
108
  export { SetupController };
@@ -1,47 +1,39 @@
1
- import type { Transaction } from "kysely";
2
- import type { KernelDatabase, KernelDb } from "../db/kernel-schema.js";
3
- import type { Account, AccountsService } from "../identity/accounts.js";
4
- import type { Org, OrgsService } from "../orgs/orgs.service.js";
5
- /** 初始化向导与 CLI 建企业管理员。框架无关,由调用方注入依赖。 */
1
+ import { type Account, AccountsService } from "../identity/accounts.js";
2
+ import { KernelDb } from "../infra/database/kernel-db.js";
3
+ import { TransactionHost } from "../infra/database/transaction-host.js";
4
+ import { type Org, OrgsService } from "../orgs/orgs.service.js";
5
+ import { SetupLock } from "./setup-lock.js";
6
+ /**
7
+ * The setup wizard. The CLI's enterprise admin creation (`createEnterpriseAdmin`,
8
+ * `createEnterpriseAdminIfNone`) is on `AccountsService`, under the same {@link SetupLock}.
9
+ */
6
10
  export declare class SetupService {
7
11
  private readonly db;
12
+ readonly txHost: TransactionHost;
13
+ private readonly setupLock;
8
14
  private readonly accounts;
9
15
  private readonly orgs;
10
- constructor(db: KernelDb, accounts: AccountsService, orgs: OrgsService);
16
+ constructor(db: KernelDb, txHost: TransactionHost, setupLock: SetupLock, accounts: AccountsService, orgs: OrgsService);
11
17
  /** 不存在活跃企业管理员即需要初始化(每次实时查 PG,不缓存)。 */
12
18
  status(): Promise<{
13
19
  needsSetup: boolean;
14
20
  }>;
15
21
  /**
16
- * 完成初始化:单个事务内先取咨询锁串行化并发的初始化请求,锁内再确认没有活跃企业管理员,
17
- * 然后建企业管理员账号、(给了 `orgName` 时)建组织并以其为 owner。任一步失败整体回滚。
18
- * 给了 `inTx` 时在同一事务的最后调用它(初始化向导用它建会话),结果放在 `extra`;它失败同样整体回滚。
22
+ * Completes the setup in one transaction: {@link SetupLock} serializes concurrent setups, and
23
+ * under it there must still be no active enterprise admin; then creates the enterprise admin
24
+ * and (with `orgName`) an org it owns. Any failure rolls everything back. `inTx` runs last in the
25
+ * same transaction (the wizard creates the session there), its result is `extra`; its failure
26
+ * rolls back too.
19
27
  */
20
28
  complete<T = undefined>(input: {
21
29
  login: string;
22
30
  password: string;
23
31
  displayName: string;
24
32
  orgName?: string | undefined;
25
- }, inTx?: (trx: Transaction<KernelDatabase>, account: Account) => Promise<T>): Promise<{
33
+ }, inTx?: (account: Account) => Promise<T>): Promise<{
26
34
  account: Account;
27
35
  org?: Org;
28
36
  extra: T | undefined;
29
37
  }>;
30
- /** CLI 用:直接建企业管理员,不检查是否已初始化;登录名已存在 → `account.login_taken`。 */
31
- createEnterpriseAdmin(input: EnterpriseAdminInput): Promise<Account>;
32
- /**
33
- * CLI `admin create --if-none`: create an enterprise admin only when no active one exists. The
34
- * check and the insert run in one transaction under the same advisory lock as {@link complete},
35
- * so concurrent runs (and a concurrent web setup) create exactly one. Returns undefined when an
36
- * active enterprise admin already exists; a taken login still throws `account.login_taken`.
37
- */
38
- createEnterpriseAdminIfNone(input: EnterpriseAdminInput): Promise<Account | undefined>;
39
- private insertEnterpriseAdmin;
40
- }
41
- /** Input of the CLI enterprise admin creation. */
42
- export interface EnterpriseAdminInput {
43
- login: string;
44
- password: string;
45
- displayName: string;
46
- email?: string | undefined;
38
+ private completeIn;
47
39
  }
@@ -1,14 +1,36 @@
1
- import { sql } from "kysely";
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";
2
11
  import { ApiError } from "../errors.js";
12
+ import { AccountsService } from "../identity/accounts.js";
3
13
  import { audit } from "../identity/audit.js";
14
+ import { KernelDb } from "../infra/database/kernel-db.js";
15
+ import { TransactionHost } from "../infra/database/transaction-host.js";
16
+ import { Transactional } from "../infra/database/transactional.decorator.js";
17
+ import { OrgsService } from "../orgs/orgs.service.js";
18
+ import { SetupLock } from "./setup-lock.js";
4
19
  const alreadyCompleted = () => new ApiError("setup.already_completed", "Deployment is already set up");
5
- /** 初始化向导与 CLI 建企业管理员。框架无关,由调用方注入依赖。 */
6
- export class SetupService {
20
+ /**
21
+ * The setup wizard. The CLI's enterprise admin creation (`createEnterpriseAdmin`,
22
+ * `createEnterpriseAdminIfNone`) is on `AccountsService`, under the same {@link SetupLock}.
23
+ */
24
+ let SetupService = class SetupService {
7
25
  db;
26
+ txHost;
27
+ setupLock;
8
28
  accounts;
9
29
  orgs;
10
- constructor(db, accounts, orgs) {
30
+ constructor(db, txHost, setupLock, accounts, orgs) {
11
31
  this.db = db;
32
+ this.txHost = txHost;
33
+ this.setupLock = setupLock;
12
34
  this.accounts = accounts;
13
35
  this.orgs = orgs;
14
36
  }
@@ -17,74 +39,52 @@ export class SetupService {
17
39
  return { needsSetup: (await this.accounts.countEnterpriseAdmins()) === 0 };
18
40
  }
19
41
  /**
20
- * 完成初始化:单个事务内先取咨询锁串行化并发的初始化请求,锁内再确认没有活跃企业管理员,
21
- * 然后建企业管理员账号、(给了 `orgName` 时)建组织并以其为 owner。任一步失败整体回滚。
22
- * 给了 `inTx` 时在同一事务的最后调用它(初始化向导用它建会话),结果放在 `extra`;它失败同样整体回滚。
42
+ * Completes the setup in one transaction: {@link SetupLock} serializes concurrent setups, and
43
+ * under it there must still be no active enterprise admin; then creates the enterprise admin
44
+ * and (with `orgName`) an org it owns. Any failure rolls everything back. `inTx` runs last in the
45
+ * same transaction (the wizard creates the session there), its result is `extra`; its failure
46
+ * rolls back too.
23
47
  */
24
48
  async complete(input, inTx) {
25
- // 先做一次廉价的预检查(已初始化的部署不白跑 scrypt),再在 BEGIN 之前算好哈希:
26
- // 不在持有咨询锁的事务里跑 scrypt;锁内仍会复核
49
+ // A cheap pre-check first (a set-up deployment does not run scrypt for nothing), then the hash
50
+ // before BEGIN: no scrypt inside the transaction holding the lock; the check runs again under it
27
51
  if ((await this.accounts.countEnterpriseAdmins()) > 0)
28
52
  throw alreadyCompleted();
29
53
  const passwordHash = await this.accounts.hashNewPassword(input.password);
30
- return this.db.transaction().execute(async (trx) => {
31
- await sql `SELECT pg_advisory_xact_lock(hashtext('capybara.setup'))`.execute(trx);
32
- if ((await this.accounts.countEnterpriseAdmins(trx)) > 0)
33
- throw alreadyCompleted();
34
- const account = await this.accounts.createLocal({
35
- login: input.login,
36
- password: input.password,
37
- displayName: input.displayName,
38
- enterpriseAdmin: true,
39
- }, trx, passwordHash);
40
- const org = input.orgName !== undefined
41
- ? await this.orgs.create({ name: input.orgName }, account, { trx })
42
- : undefined;
43
- await audit(trx, {
44
- actorAccountId: account.id,
45
- action: "deployment.setup_completed",
46
- target: account.id,
47
- ...(org && { orgId: org.id, detail: { orgId: org.id } }),
48
- });
49
- const extra = inTx ? await inTx(trx, account) : undefined;
50
- return { account, ...(org && { org }), extra };
51
- });
52
- }
53
- /** CLI 用:直接建企业管理员,不检查是否已初始化;登录名已存在 → `account.login_taken`。 */
54
- async createEnterpriseAdmin(input) {
55
- const passwordHash = await this.accounts.hashNewPassword(input.password);
56
- return this.db
57
- .transaction()
58
- .execute((trx) => this.insertEnterpriseAdmin(trx, input, passwordHash));
59
- }
60
- /**
61
- * CLI `admin create --if-none`: create an enterprise admin only when no active one exists. The
62
- * check and the insert run in one transaction under the same advisory lock as {@link complete},
63
- * so concurrent runs (and a concurrent web setup) create exactly one. Returns undefined when an
64
- * active enterprise admin already exists; a taken login still throws `account.login_taken`.
65
- */
66
- async createEnterpriseAdminIfNone(input) {
67
- const passwordHash = await this.accounts.hashNewPassword(input.password);
68
- return this.db.transaction().execute(async (trx) => {
69
- await sql `SELECT pg_advisory_xact_lock(hashtext('capybara.setup'))`.execute(trx);
70
- if ((await this.accounts.countEnterpriseAdmins(trx)) > 0)
71
- return undefined;
72
- return this.insertEnterpriseAdmin(trx, input, passwordHash);
73
- });
54
+ return this.completeIn(input, passwordHash, inTx);
74
55
  }
75
- async insertEnterpriseAdmin(trx, input, passwordHash) {
56
+ async completeIn(input, passwordHash, inTx) {
57
+ await this.setupLock.lock();
58
+ if ((await this.accounts.countEnterpriseAdmins()) > 0)
59
+ throw alreadyCompleted();
76
60
  const account = await this.accounts.createLocal({
77
61
  login: input.login,
78
62
  password: input.password,
79
63
  displayName: input.displayName,
80
64
  enterpriseAdmin: true,
81
- ...(input.email !== undefined && { email: input.email }),
82
- }, trx, passwordHash);
83
- await audit(trx, {
84
- action: "account.created",
65
+ }, passwordHash);
66
+ const org = input.orgName !== undefined
67
+ ? await this.orgs.create({ name: input.orgName }, account)
68
+ : undefined;
69
+ await audit(this.db.db, {
70
+ actorAccountId: account.id,
71
+ action: "deployment.setup_completed",
85
72
  target: account.id,
86
- detail: { enterpriseAdmin: true, via: "cli" },
73
+ ...(org && { orgId: org.id, detail: { orgId: org.id } }),
87
74
  });
88
- return account;
75
+ const extra = inTx ? await inTx(account) : undefined;
76
+ return { account, ...(org && { org }), extra };
89
77
  }
90
- }
78
+ };
79
+ __decorate([
80
+ Transactional()
81
+ ], SetupService.prototype, "completeIn", null);
82
+ SetupService = __decorate([
83
+ Injectable(),
84
+ __param(0, Inject(KernelDb)),
85
+ __param(1, Inject(TransactionHost)),
86
+ __param(2, Inject(SetupLock)),
87
+ __param(3, Inject(AccountsService)),
88
+ __param(4, Inject(OrgsService))
89
+ ], SetupService);
90
+ export { SetupService };
@@ -0,0 +1,53 @@
1
+ import { type ExpressionBuilder } from "kysely";
2
+ import type { KernelDatabase, KernelSchemaDb } from "../db/kernel-schema.js";
3
+ import { KernelDb } from "../infra/database/kernel-db.js";
4
+ import { type AgentDefinition } from "./definition.js";
5
+ export declare const AGENT_VISIBILITIES: readonly ["private", "org", "members"];
6
+ export type AgentVisibility = (typeof AGENT_VISIBILITIES)[number];
7
+ /** 对外的 agent 视图:当前版本的定义 + 元数据;`memberIds` 只在 visibility='members' 时为数组。 */
8
+ export interface AgentView {
9
+ id: string;
10
+ orgId: string;
11
+ ownerAccountId: string;
12
+ visibility: AgentVisibility;
13
+ currentVersion: number;
14
+ definition: AgentDefinition;
15
+ memberIds: string[] | null;
16
+ /** 负责人离职后被转给组织所有者、等待管理员重新指派。 */
17
+ needsReassignment: boolean;
18
+ createdAt: Date;
19
+ updatedAt: Date;
20
+ }
21
+ /**
22
+ * 可见性判定(`canUse`)的 SQL 条件:agent 未删除、所属组织未删除,且
23
+ * - viewer 为账号:仍是该组织成员(含访客),并且是负责人 / visibility='org' / 在 agent_members 名单中;
24
+ * - viewer 为 null(该组织的服务令牌):只认 visibility='org'。
25
+ */
26
+ export declare function visibleTo(viewerAccountId: string | null): (eb: ExpressionBuilder<KernelDatabase, "agents">) => import("kysely").ExpressionWrapper<KernelDatabase, "agents", import("kysely").SqlBool>;
27
+ /**
28
+ * Whether the live agent `agentId` is visible to `accountId` under the normal visibility rule
29
+ * ({@link visibleTo}: owner, `visibility = 'org'`, or listed in `agent_members`, while a member of
30
+ * the live org). Deleted agents are never visible.
31
+ */
32
+ export declare function isAgentVisibleTo(db: KernelSchemaDb, agentId: string, accountId: string): Promise<boolean>;
33
+ /**
34
+ * Reads agents for a viewer (the visibility rule {@link visibleTo}): the part of `AgentsService`
35
+ * the conversations, the skill invoker and the attachments read, with no dependency on the
36
+ * services that write agents (it breaks the agents ↔ skills module cycle, spec §3 (a)). Reads go
37
+ * through `KernelDb`, so inside a transaction they see its writes.
38
+ */
39
+ export declare class AgentLookup {
40
+ private readonly db;
41
+ constructor(db: KernelDb);
42
+ /** 取对 viewer 可见的 agent;`viewerAccountId = null` 表示该组织的服务令牌。不可见 → `agent.not_found`。 */
43
+ get(orgId: string, agentId: string, viewerAccountId: string | null): Promise<AgentView>;
44
+ /** 组织内对 viewer 可见的全部 agent(按创建时间)。 */
45
+ listVisible(orgId: string, viewerAccountId: string | null): Promise<AgentView[]>;
46
+ /** One agent's view (no visibility check: the caller did it); missing → `agent.not_found`. */
47
+ view(agentId: string): Promise<AgentView>;
48
+ /** 按给定 id 顺序组装视图(调用方已完成可见性判定)。 */
49
+ views(ids: string[]): Promise<AgentView[]>;
50
+ }
51
+ /** The one {@link AgentLookup} (database only). */
52
+ export declare class AgentLookupModule {
53
+ }
@@ -0,0 +1,179 @@
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, Module } from "@nestjs/common";
11
+ import { sql } from "kysely";
12
+ import { ApiError } from "../errors.js";
13
+ import { KernelDb } from "../infra/database/kernel-db.js";
14
+ import { normalizeStoredDefinition } from "./definition.js";
15
+ export const AGENT_VISIBILITIES = ["private", "org", "members"];
16
+ const notFound = () => new ApiError("agent.not_found", "Agent not found");
17
+ /**
18
+ * 可见性判定(`canUse`)的 SQL 条件:agent 未删除、所属组织未删除,且
19
+ * - viewer 为账号:仍是该组织成员(含访客),并且是负责人 / visibility='org' / 在 agent_members 名单中;
20
+ * - viewer 为 null(该组织的服务令牌):只认 visibility='org'。
21
+ */
22
+ export function visibleTo(viewerAccountId) {
23
+ return (eb) => {
24
+ const orgLive = eb.exists(eb
25
+ .selectFrom("orgs")
26
+ .select(sql `1`.as("one"))
27
+ .whereRef("orgs.id", "=", "agents.org_id")
28
+ .where("orgs.deleted_at", "is", null));
29
+ if (viewerAccountId === null) {
30
+ return eb.and([orgLive, eb("agents.visibility", "=", "org")]);
31
+ }
32
+ return eb.and([
33
+ orgLive,
34
+ eb.exists(eb
35
+ .selectFrom("memberships")
36
+ .select(sql `1`.as("one"))
37
+ .whereRef("memberships.org_id", "=", "agents.org_id")
38
+ .where("memberships.account_id", "=", viewerAccountId)),
39
+ eb.or([
40
+ eb("agents.owner_account_id", "=", viewerAccountId),
41
+ eb("agents.visibility", "=", "org"),
42
+ eb.and([
43
+ eb("agents.visibility", "=", "members"),
44
+ eb.exists(eb
45
+ .selectFrom("agent_members")
46
+ .select(sql `1`.as("one"))
47
+ .whereRef("agent_members.agent_id", "=", "agents.id")
48
+ .where("agent_members.account_id", "=", viewerAccountId)),
49
+ ]),
50
+ ]),
51
+ ]);
52
+ };
53
+ }
54
+ /**
55
+ * Whether the live agent `agentId` is visible to `accountId` under the normal visibility rule
56
+ * ({@link visibleTo}: owner, `visibility = 'org'`, or listed in `agent_members`, while a member of
57
+ * the live org). Deleted agents are never visible.
58
+ */
59
+ export async function isAgentVisibleTo(db, agentId, accountId) {
60
+ const row = await db
61
+ .selectFrom("agents")
62
+ .select("id")
63
+ .where("id", "=", agentId)
64
+ .where("deleted_at", "is", null)
65
+ .where(visibleTo(accountId))
66
+ .executeTakeFirst();
67
+ return row !== undefined;
68
+ }
69
+ /**
70
+ * Reads agents for a viewer (the visibility rule {@link visibleTo}): the part of `AgentsService`
71
+ * the conversations, the skill invoker and the attachments read, with no dependency on the
72
+ * services that write agents (it breaks the agents ↔ skills module cycle, spec §3 (a)). Reads go
73
+ * through `KernelDb`, so inside a transaction they see its writes.
74
+ */
75
+ let AgentLookup = class AgentLookup {
76
+ db;
77
+ constructor(db) {
78
+ this.db = db;
79
+ }
80
+ /** 取对 viewer 可见的 agent;`viewerAccountId = null` 表示该组织的服务令牌。不可见 → `agent.not_found`。 */
81
+ async get(orgId, agentId, viewerAccountId) {
82
+ const row = await this.db
83
+ .selectFrom("agents")
84
+ .select("id")
85
+ .where("id", "=", agentId)
86
+ .where("org_id", "=", orgId)
87
+ .where("deleted_at", "is", null)
88
+ .where(visibleTo(viewerAccountId))
89
+ .executeTakeFirst();
90
+ if (!row)
91
+ throw notFound();
92
+ return this.view(agentId);
93
+ }
94
+ /** 组织内对 viewer 可见的全部 agent(按创建时间)。 */
95
+ async listVisible(orgId, viewerAccountId) {
96
+ const rows = await this.db
97
+ .selectFrom("agents")
98
+ .select("id")
99
+ .where("org_id", "=", orgId)
100
+ .where("deleted_at", "is", null)
101
+ .where(visibleTo(viewerAccountId))
102
+ .orderBy("created_at")
103
+ .orderBy("id")
104
+ .execute();
105
+ return this.views(rows.map((r) => r.id));
106
+ }
107
+ /** One agent's view (no visibility check: the caller did it); missing → `agent.not_found`. */
108
+ async view(agentId) {
109
+ const views = await this.views([agentId]);
110
+ const v = views[0];
111
+ if (!v)
112
+ throw notFound();
113
+ return v;
114
+ }
115
+ /** 按给定 id 顺序组装视图(调用方已完成可见性判定)。 */
116
+ async views(ids) {
117
+ if (ids.length === 0)
118
+ return [];
119
+ const db = this.db;
120
+ const rows = await db
121
+ .selectFrom("agents")
122
+ .innerJoin("agent_versions", (j) => j
123
+ .onRef("agent_versions.agent_id", "=", "agents.id")
124
+ .onRef("agent_versions.version", "=", "agents.current_version"))
125
+ .select([
126
+ "agents.id",
127
+ "agents.org_id",
128
+ "agents.owner_account_id",
129
+ "agents.visibility",
130
+ "agents.current_version",
131
+ "agents.needs_reassignment",
132
+ "agents.created_at",
133
+ "agents.updated_at",
134
+ "agent_versions.definition",
135
+ ])
136
+ .where("agents.id", "in", ids)
137
+ .execute();
138
+ const memberRows = await db
139
+ .selectFrom("agent_members")
140
+ .select(["agent_id", "account_id"])
141
+ .where("agent_id", "in", ids)
142
+ .orderBy("account_id")
143
+ .execute();
144
+ const byId = new Map(rows.map((r) => [r.id, r]));
145
+ return ids.flatMap((id) => {
146
+ const r = byId.get(id);
147
+ if (!r)
148
+ return [];
149
+ return [
150
+ {
151
+ id: r.id,
152
+ orgId: r.org_id,
153
+ ownerAccountId: r.owner_account_id,
154
+ visibility: r.visibility,
155
+ currentVersion: r.current_version,
156
+ definition: normalizeStoredDefinition(r.definition),
157
+ memberIds: r.visibility === "members"
158
+ ? memberRows.filter((m) => m.agent_id === id).map((m) => m.account_id)
159
+ : null,
160
+ needsReassignment: r.needs_reassignment,
161
+ createdAt: r.created_at,
162
+ updatedAt: r.updated_at,
163
+ },
164
+ ];
165
+ });
166
+ }
167
+ };
168
+ AgentLookup = __decorate([
169
+ Injectable(),
170
+ __param(0, Inject(KernelDb))
171
+ ], AgentLookup);
172
+ export { AgentLookup };
173
+ /** The one {@link AgentLookup} (database only). */
174
+ let AgentLookupModule = class AgentLookupModule {
175
+ };
176
+ AgentLookupModule = __decorate([
177
+ Module({ providers: [AgentLookup], exports: [AgentLookup] })
178
+ ], AgentLookupModule);
179
+ export { AgentLookupModule };
@@ -1,7 +1,7 @@
1
1
  import { z } from "zod";
2
2
  import { type Principal } from "../identity/principal.js";
3
3
  import { type OrgContext } from "../orgs/org.guard.js";
4
- import { type AgentsService, type AgentVersionSummary, type AgentView, type AgentWarning } from "./agents.service.js";
4
+ import { AgentsService, type AgentVersionSummary, type AgentView, type AgentWarning } from "./agents.service.js";
5
5
  declare const OwnerBody: z.ZodObject<{
6
6
  accountId: z.ZodString;
7
7
  }, z.core.$strict>;
@@ -7,13 +7,13 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
7
7
  var __param = (this && this.__param) || function (paramIndex, decorator) {
8
8
  return function (target, key) { decorator(target, key, paramIndex); }
9
9
  };
10
- import { Body, Controller, Delete, Get, HttpCode, Inject, Param, Patch, Post, } from "@nestjs/common";
10
+ import { Controller, Delete, Get, HttpCode, Inject, Param, Patch, Post } from "@nestjs/common";
11
11
  import { z } from "zod";
12
- import { AGENTS } from "../http/tokens.js";
13
- import { ZodPipe } from "../http/zod.pipe.js";
14
12
  import { CurrentPrincipal, patTokenId, requireUser, } from "../identity/principal.js";
13
+ import { createZodDto } from "../infra/validation/create-zod-dto.js";
14
+ import { ZBody } from "../infra/validation/zod-params.js";
15
15
  import { CurrentOrg, OrgAction } from "../orgs/org.guard.js";
16
- import { AGENT_VISIBILITIES, } from "./agents.service.js";
16
+ import { AGENT_VISIBILITIES, AgentsService, } from "./agents.service.js";
17
17
  import { AgentDefinitionSchema, AgentToolRef, DEFAULT_AGENT_TOOLS } from "./definition.js";
18
18
  const MemberIds = z.array(z.string().min(1).max(100)).max(1000);
19
19
  const OwnerBody = z.object({ accountId: z.string().min(1).max(100) }).strict();
@@ -42,6 +42,12 @@ const UpdateBody = z
42
42
  .strict();
43
43
  /** 服务令牌没有账号:以 null 作为 viewer,只看到 visibility='org' 的 agent。 */
44
44
  const viewerOf = (p) => (p.kind === "user" ? p.account.id : null);
45
+ class AgentCreateBodyDto extends createZodDto(CreateBody, "AgentCreateBody") {
46
+ }
47
+ class AgentUpdateBodyDto extends createZodDto(UpdateBody, "AgentUpdateBody") {
48
+ }
49
+ class AgentOwnerBodyDto extends createZodDto(OwnerBody, "AgentOwnerBody") {
50
+ }
45
51
  /**
46
52
  * Agent 定义(`/api/v1/orgs/:orgId/agents`)。读用 `agents.use`(访客与服务令牌可用),
47
53
  * 写用 `agents.create`(member 以上、HUMAN_ONLY),修改 / 删除的负责人或管理员判定在服务的组织行锁内完成。
@@ -90,7 +96,7 @@ __decorate([
90
96
  OrgAction("agents.create"),
91
97
  __param(0, CurrentPrincipal()),
92
98
  __param(1, CurrentOrg()),
93
- __param(2, Body(new ZodPipe(CreateBody)))
99
+ __param(2, ZBody(AgentCreateBodyDto))
94
100
  ], AgentsController.prototype, "create", null);
95
101
  __decorate([
96
102
  Get(),
@@ -111,7 +117,7 @@ __decorate([
111
117
  __param(0, CurrentPrincipal()),
112
118
  __param(1, CurrentOrg()),
113
119
  __param(2, Param("agentId")),
114
- __param(3, Body(new ZodPipe(UpdateBody)))
120
+ __param(3, ZBody(AgentUpdateBodyDto))
115
121
  ], AgentsController.prototype, "update", null);
116
122
  __decorate([
117
123
  Delete(":agentId"),
@@ -128,7 +134,7 @@ __decorate([
128
134
  __param(0, CurrentPrincipal()),
129
135
  __param(1, CurrentOrg()),
130
136
  __param(2, Param("agentId")),
131
- __param(3, Body(new ZodPipe(OwnerBody)))
137
+ __param(3, ZBody(AgentOwnerBodyDto))
132
138
  ], AgentsController.prototype, "reassign", null);
133
139
  __decorate([
134
140
  Get(":agentId/versions"),
@@ -139,6 +145,6 @@ __decorate([
139
145
  ], AgentsController.prototype, "versions", null);
140
146
  AgentsController = __decorate([
141
147
  Controller("api/v1/orgs/:orgId/agents"),
142
- __param(0, Inject(AGENTS))
148
+ __param(0, Inject(AgentsService))
143
149
  ], AgentsController);
144
150
  export { AgentsController };
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Agents: the one {@link AgentsService} (definitions, versions, visibility; writes under the org
3
+ * row lock) and the plugin agent templates. Reads for a viewer are {@link AgentLookupModule}'s
4
+ * (re-exported), which the conversations and the skill invoker use without this module.
5
+ */
6
+ export declare class AgentsModule {
7
+ }