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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (626) hide show
  1. package/bootstrap.json +10 -6
  2. package/dist/admin/admin.controller.d.ts +17 -17
  3. package/dist/admin/admin.controller.js +43 -26
  4. package/dist/admin/admin.module.d.ts +3 -0
  5. package/dist/admin/admin.module.js +22 -0
  6. package/dist/admin/extensions.controller.d.ts +14 -14
  7. package/dist/admin/extensions.controller.js +30 -17
  8. package/dist/admin/setup-lock.d.ts +16 -0
  9. package/dist/admin/setup-lock.js +47 -0
  10. package/dist/admin/setup.controller.d.ts +8 -8
  11. package/dist/admin/setup.controller.js +27 -25
  12. package/dist/admin/setup.service.d.ts +19 -27
  13. package/dist/admin/setup.service.js +61 -61
  14. package/dist/agents/agent-lookup.d.ts +53 -0
  15. package/dist/agents/agent-lookup.js +179 -0
  16. package/dist/agents/agents.controller.d.ts +1 -1
  17. package/dist/agents/agents.controller.js +14 -8
  18. package/dist/agents/agents.module.d.ts +7 -0
  19. package/dist/agents/agents.module.js +41 -0
  20. package/dist/agents/agents.service.d.ts +39 -58
  21. package/dist/agents/agents.service.js +261 -329
  22. package/dist/agents/definition.d.ts +8 -0
  23. package/dist/agents/definition.js +8 -0
  24. package/dist/agents/models.controller.d.ts +1 -1
  25. package/dist/agents/models.controller.js +2 -2
  26. package/dist/agents/templates.controller.d.ts +1 -1
  27. package/dist/agents/templates.controller.js +2 -2
  28. package/dist/agents/templates.d.ts +6 -8
  29. package/dist/agents/templates.js +20 -4
  30. package/dist/app.d.ts +93 -0
  31. package/dist/app.js +150 -0
  32. package/dist/catalog/admin-catalog.controller.d.ts +3 -3
  33. package/dist/catalog/admin-catalog.controller.js +27 -13
  34. package/dist/catalog/catalog-content.d.ts +185 -0
  35. package/dist/catalog/catalog-content.js +323 -0
  36. package/dist/catalog/catalog-items.d.ts +186 -0
  37. package/dist/catalog/catalog-items.js +410 -0
  38. package/dist/catalog/catalog.module.d.ts +14 -0
  39. package/dist/catalog/catalog.module.js +71 -0
  40. package/dist/catalog/catalog.service.d.ts +34 -188
  41. package/dist/catalog/catalog.service.js +155 -489
  42. package/dist/catalog/cli.d.ts +3 -2
  43. package/dist/catalog/cli.js +13 -31
  44. package/dist/catalog/job-ids.d.ts +15 -0
  45. package/dist/catalog/job-ids.js +15 -0
  46. package/dist/catalog/jobs.d.ts +27 -0
  47. package/dist/catalog/jobs.js +70 -0
  48. package/dist/catalog/locks.d.ts +24 -0
  49. package/dist/catalog/locks.js +63 -0
  50. package/dist/catalog/marketplaces.controller.d.ts +4 -4
  51. package/dist/catalog/marketplaces.controller.js +22 -11
  52. package/dist/catalog/marketplaces.service.d.ts +30 -13
  53. package/dist/catalog/marketplaces.service.js +330 -256
  54. package/dist/catalog/org-catalog.controller.d.ts +4 -3
  55. package/dist/catalog/org-catalog.controller.js +29 -14
  56. package/dist/catalog/org-catalog.service.d.ts +32 -198
  57. package/dist/catalog/org-catalog.service.js +159 -400
  58. package/dist/catalog/plugin-import.d.ts +73 -34
  59. package/dist/catalog/plugin-import.js +356 -217
  60. package/dist/catalog/plugin-install.d.ts +83 -41
  61. package/dist/catalog/plugin-install.js +421 -269
  62. package/dist/catalog/plugin-upgrade.d.ts +59 -4
  63. package/dist/catalog/plugin-upgrade.js +407 -282
  64. package/dist/catalog/requests.service.d.ts +27 -15
  65. package/dist/catalog/requests.service.js +201 -145
  66. package/dist/catalog/upgrade-targets.d.ts +4 -7
  67. package/dist/channels/actions.d.ts +6 -4
  68. package/dist/channels/actions.js +1 -1
  69. package/dist/channels/cards.d.ts +2 -2
  70. package/dist/channels/channels.module.d.ts +40 -0
  71. package/dist/channels/channels.module.js +128 -0
  72. package/dist/channels/connections.controller.d.ts +1 -1
  73. package/dist/channels/connections.controller.js +11 -6
  74. package/dist/channels/connections.service.d.ts +43 -21
  75. package/dist/channels/connections.service.js +236 -131
  76. package/dist/channels/inbound.d.ts +34 -38
  77. package/dist/channels/inbound.js +107 -41
  78. package/dist/channels/job-ids.d.ts +10 -0
  79. package/dist/channels/job-ids.js +10 -0
  80. package/dist/channels/jobs.d.ts +85 -0
  81. package/dist/channels/jobs.js +157 -0
  82. package/dist/channels/outbound.d.ts +60 -82
  83. package/dist/channels/outbound.js +165 -193
  84. package/dist/channels/supervisor.d.ts +88 -46
  85. package/dist/channels/supervisor.js +230 -132
  86. package/dist/channels/threads.d.ts +29 -8
  87. package/dist/channels/threads.js +71 -13
  88. package/dist/channels/webhook.d.ts +20 -14
  89. package/dist/channels/webhook.js +51 -20
  90. package/dist/config/load.d.ts +3 -2
  91. package/dist/config/load.js +3 -2
  92. package/dist/config/nacos-source.js +11 -2
  93. package/dist/config/schema.d.ts +16 -1
  94. package/dist/config/schema.js +54 -7
  95. package/dist/conversations/access.d.ts +29 -0
  96. package/dist/conversations/access.js +86 -0
  97. package/dist/conversations/artifacts.d.ts +10 -10
  98. package/dist/conversations/artifacts.js +35 -9
  99. package/dist/conversations/attachments.controller.d.ts +1 -1
  100. package/dist/conversations/attachments.controller.js +8 -6
  101. package/dist/conversations/attachments.module.d.ts +7 -0
  102. package/dist/conversations/attachments.module.js +25 -0
  103. package/dist/conversations/attachments.service.d.ts +30 -22
  104. package/dist/conversations/attachments.service.js +119 -46
  105. package/dist/conversations/conversations.controller.d.ts +8 -7
  106. package/dist/conversations/conversations.controller.js +59 -29
  107. package/dist/conversations/conversations.module.d.ts +8 -0
  108. package/dist/conversations/conversations.module.js +69 -0
  109. package/dist/conversations/conversations.service.d.ts +40 -38
  110. package/dist/conversations/conversations.service.js +130 -140
  111. package/dist/conversations/event-log.d.ts +28 -18
  112. package/dist/conversations/event-log.js +74 -27
  113. package/dist/conversations/files.d.ts +10 -10
  114. package/dist/conversations/files.js +37 -11
  115. package/dist/conversations/idem-keys.d.ts +5 -0
  116. package/dist/conversations/idem-keys.js +5 -0
  117. package/dist/conversations/job-ids.d.ts +6 -0
  118. package/dist/conversations/job-ids.js +6 -0
  119. package/dist/conversations/outputs-read.d.ts +11 -11
  120. package/dist/conversations/outputs-read.js +31 -7
  121. package/dist/conversations/queue.d.ts +48 -56
  122. package/dist/conversations/queue.js +13 -289
  123. package/dist/conversations/queue.service.d.ts +60 -0
  124. package/dist/conversations/queue.service.js +343 -0
  125. package/dist/conversations/sandbox-status.d.ts +13 -10
  126. package/dist/conversations/sandbox-status.js +36 -8
  127. package/dist/conversations/titles.d.ts +71 -24
  128. package/dist/conversations/titles.js +159 -62
  129. package/dist/ctx/bus.js +9 -3
  130. package/dist/ctx/create-ctx.d.ts +6 -0
  131. package/dist/ctx/create-ctx.js +7 -9
  132. package/dist/ctx/lock.d.ts +7 -3
  133. package/dist/ctx/lock.js +9 -20
  134. package/dist/ctx/queue.js +3 -2
  135. package/dist/ctx/secrets.d.ts +10 -2
  136. package/dist/ctx/secrets.js +7 -3
  137. package/dist/db/kernel-schema.d.ts +2 -2
  138. package/dist/db/pool.d.ts +5 -0
  139. package/dist/db/pool.js +1 -0
  140. package/dist/errors.d.ts +2 -0
  141. package/dist/errors.js +2 -0
  142. package/dist/evals/budget.d.ts +42 -21
  143. package/dist/evals/budget.js +114 -62
  144. package/dist/evals/evals.module.d.ts +31 -0
  145. package/dist/evals/evals.module.js +114 -0
  146. package/dist/evals/jobs.d.ts +20 -0
  147. package/dist/evals/jobs.js +45 -0
  148. package/dist/evals/run-replay.d.ts +56 -8
  149. package/dist/evals/run-replay.js +140 -80
  150. package/dist/evals/runs.controller.d.ts +1 -1
  151. package/dist/evals/runs.controller.js +17 -8
  152. package/dist/evals/runs.service.d.ts +23 -45
  153. package/dist/evals/runs.service.js +245 -234
  154. package/dist/evals/sets.controller.d.ts +1 -1
  155. package/dist/evals/sets.controller.js +17 -8
  156. package/dist/evals/sets.service.d.ts +22 -6
  157. package/dist/evals/sets.service.js +248 -194
  158. package/dist/evals/snapshot.d.ts +2 -2
  159. package/dist/evals/step-replay.d.ts +2 -2
  160. package/dist/evals/step-replay.js +1 -1
  161. package/dist/evals/trajectory.controller.d.ts +1 -1
  162. package/dist/evals/trajectory.controller.js +11 -7
  163. package/dist/evals/trajectory.service.d.ts +5 -4
  164. package/dist/evals/trajectory.service.js +30 -7
  165. package/dist/evals/worker.d.ts +44 -27
  166. package/dist/evals/worker.js +220 -120
  167. package/dist/extensions/admin-ops.d.ts +61 -33
  168. package/dist/extensions/admin-ops.js +248 -154
  169. package/dist/extensions/admin-view.d.ts +38 -27
  170. package/dist/extensions/admin-view.js +126 -55
  171. package/dist/extensions/approvals.d.ts +12 -8
  172. package/dist/extensions/approvals.js +73 -46
  173. package/dist/extensions/blobs.d.ts +27 -10
  174. package/dist/extensions/blobs.js +111 -45
  175. package/dist/extensions/bootstrap.d.ts +96 -42
  176. package/dist/extensions/bootstrap.js +303 -155
  177. package/dist/extensions/cli.d.ts +20 -10
  178. package/dist/extensions/cli.js +41 -96
  179. package/dist/extensions/config-issues.d.ts +7 -0
  180. package/dist/extensions/config-issues.js +31 -0
  181. package/dist/extensions/deployment-config-store.d.ts +49 -0
  182. package/dist/extensions/deployment-config-store.js +133 -0
  183. package/dist/extensions/deployment-config.d.ts +58 -67
  184. package/dist/extensions/deployment-config.js +202 -230
  185. package/dist/extensions/enabled.d.ts +5 -5
  186. package/dist/extensions/extensions.module.d.ts +8 -0
  187. package/dist/extensions/extensions.module.js +77 -0
  188. package/dist/extensions/hooks.d.ts +3 -2
  189. package/dist/extensions/hooks.js +1 -1
  190. package/dist/extensions/host.d.ts +72 -68
  191. package/dist/extensions/host.js +191 -152
  192. package/dist/extensions/installs.d.ts +49 -16
  193. package/dist/extensions/installs.js +128 -32
  194. package/dist/extensions/job-ids.d.ts +6 -0
  195. package/dist/extensions/job-ids.js +6 -0
  196. package/dist/extensions/lifecycle-topics.d.ts +18 -0
  197. package/dist/extensions/lifecycle-topics.js +18 -0
  198. package/dist/extensions/lifecycle.d.ts +35 -47
  199. package/dist/extensions/lifecycle.js +103 -39
  200. package/dist/extensions/locks.d.ts +33 -0
  201. package/dist/extensions/locks.js +86 -0
  202. package/dist/extensions/migrate-lock.d.ts +3 -4
  203. package/dist/extensions/org-config.controller.d.ts +1 -1
  204. package/dist/extensions/org-config.controller.js +8 -5
  205. package/dist/extensions/org-config.d.ts +48 -46
  206. package/dist/extensions/org-config.js +284 -226
  207. package/dist/extensions/registry.d.ts +50 -2
  208. package/dist/extensions/registry.js +89 -4
  209. package/dist/extensions/sources.d.ts +12 -8
  210. package/dist/extensions/sources.js +34 -13
  211. package/dist/files/files.module.d.ts +3 -0
  212. package/dist/files/files.module.js +22 -0
  213. package/dist/files/previewers.controller.d.ts +7 -2
  214. package/dist/files/previewers.controller.js +17 -9
  215. package/dist/files/previewers.d.ts +13 -18
  216. package/dist/files/previewers.js +83 -36
  217. package/dist/http/adapter.d.ts +3 -0
  218. package/dist/http/adapter.js +25 -0
  219. package/dist/http/api.module.d.ts +3 -110
  220. package/dist/http/api.module.js +47 -355
  221. package/dist/http/app.d.ts +11 -15
  222. package/dist/http/app.js +52 -47
  223. package/dist/http/error-filter.module.d.ts +5 -0
  224. package/dist/http/error-filter.module.js +18 -0
  225. package/dist/http/error.filter.js +2 -2
  226. package/dist/identity/accounts.d.ts +82 -29
  227. package/dist/identity/accounts.js +294 -175
  228. package/dist/identity/api-tokens.d.ts +11 -7
  229. package/dist/identity/api-tokens.js +71 -44
  230. package/dist/identity/audit.d.ts +7 -4
  231. package/dist/identity/audit.js +5 -1
  232. package/dist/identity/auth.controller.d.ts +11 -10
  233. package/dist/identity/auth.controller.js +31 -25
  234. package/dist/identity/auth.guard.d.ts +3 -3
  235. package/dist/identity/auth.guard.js +6 -4
  236. package/dist/identity/binding.d.ts +9 -11
  237. package/dist/identity/binding.js +41 -13
  238. package/dist/identity/enterprise-admin.d.ts +18 -12
  239. package/dist/identity/enterprise-admin.js +67 -13
  240. package/dist/identity/external-identity-lock.d.ts +17 -0
  241. package/dist/identity/external-identity-lock.js +39 -0
  242. package/dist/identity/external.d.ts +19 -15
  243. package/dist/identity/external.js +163 -125
  244. package/dist/identity/identity.module.d.ts +6 -0
  245. package/dist/identity/identity.module.js +56 -0
  246. package/dist/identity/me.controller.d.ts +16 -15
  247. package/dist/identity/me.controller.js +37 -31
  248. package/dist/identity/sessions.d.ts +12 -10
  249. package/dist/identity/sessions.js +74 -42
  250. package/dist/identity/settings.d.ts +20 -14
  251. package/dist/identity/settings.js +85 -57
  252. package/dist/identity/sso.controller.d.ts +7 -7
  253. package/dist/identity/sso.controller.js +13 -9
  254. package/dist/identity/sso.d.ts +9 -12
  255. package/dist/identity/sso.js +54 -24
  256. package/dist/inbox/inbox.module.d.ts +3 -0
  257. package/dist/inbox/inbox.module.js +22 -0
  258. package/dist/inbox/inbox.service.d.ts +7 -9
  259. package/dist/inbox/inbox.service.js +32 -11
  260. package/dist/index.d.ts +19 -12
  261. package/dist/index.js +13 -8
  262. package/dist/infra/cache/cache.module.d.ts +3 -0
  263. package/dist/infra/cache/cache.module.js +16 -0
  264. package/dist/infra/cache/cache.service.d.ts +21 -0
  265. package/dist/infra/cache/cache.service.js +80 -0
  266. package/dist/infra/cache/cacheable.decorator.d.ts +32 -0
  267. package/dist/infra/cache/cacheable.decorator.js +83 -0
  268. package/dist/infra/cli/kernel-cli.module.d.ts +66 -0
  269. package/dist/infra/cli/kernel-cli.module.js +165 -0
  270. package/dist/infra/close-within.d.ts +15 -0
  271. package/dist/infra/close-within.js +36 -0
  272. package/dist/infra/config/config.module.d.ts +13 -0
  273. package/dist/infra/config/config.module.js +39 -0
  274. package/dist/infra/config/kernel-config.service.d.ts +25 -0
  275. package/dist/infra/config/kernel-config.service.js +126 -0
  276. package/dist/infra/database/after-commit.d.ts +6 -0
  277. package/dist/infra/database/after-commit.js +9 -0
  278. package/dist/infra/database/database.module.d.ts +25 -0
  279. package/dist/infra/database/database.module.js +90 -0
  280. package/dist/infra/database/kernel-db.d.ts +22 -0
  281. package/dist/infra/database/kernel-db.js +65 -0
  282. package/dist/infra/database/transaction-host.d.ts +50 -0
  283. package/dist/infra/database/transaction-host.js +125 -0
  284. package/dist/infra/database/transactional.decorator.d.ts +15 -0
  285. package/dist/infra/database/transactional.decorator.js +27 -0
  286. package/dist/infra/database/xact-lock.d.ts +17 -0
  287. package/dist/infra/database/xact-lock.js +43 -0
  288. package/dist/infra/events/kernel-events.d.ts +96 -0
  289. package/dist/infra/events/kernel-events.js +65 -0
  290. package/dist/infra/health/health.controller.d.ts +26 -0
  291. package/dist/infra/health/health.controller.js +104 -0
  292. package/dist/infra/health/health.module.d.ts +9 -0
  293. package/dist/infra/health/health.module.js +24 -0
  294. package/dist/infra/health/health.options.d.ts +10 -0
  295. package/dist/infra/health/health.options.js +15 -0
  296. package/dist/infra/health/shutdown-state.d.ts +6 -0
  297. package/dist/infra/health/shutdown-state.js +2 -0
  298. package/dist/infra/lifecycle/graceful-shutdown.module.d.ts +6 -0
  299. package/dist/infra/lifecycle/graceful-shutdown.module.js +23 -0
  300. package/dist/infra/lifecycle/graceful-shutdown.service.d.ts +70 -0
  301. package/dist/infra/lifecycle/graceful-shutdown.service.js +135 -0
  302. package/dist/infra/lifecycle/process-guards.d.ts +52 -0
  303. package/dist/infra/lifecycle/process-guards.js +86 -0
  304. package/dist/infra/lifecycle/shutdown-signals.d.ts +30 -0
  305. package/dist/infra/lifecycle/shutdown-signals.js +48 -0
  306. package/dist/infra/lock/key-template.d.ts +13 -0
  307. package/dist/infra/lock/key-template.js +46 -0
  308. package/dist/infra/lock/lock.module.d.ts +3 -0
  309. package/dist/infra/lock/lock.module.js +16 -0
  310. package/dist/infra/lock/lock.service.d.ts +120 -0
  311. package/dist/infra/lock/lock.service.js +343 -0
  312. package/dist/infra/lock/shared-lease.d.ts +44 -0
  313. package/dist/infra/lock/shared-lease.js +121 -0
  314. package/dist/infra/lock/with-lock.decorator.d.ts +28 -0
  315. package/dist/infra/lock/with-lock.decorator.js +49 -0
  316. package/dist/infra/logging/logging.module.d.ts +16 -0
  317. package/dist/infra/logging/logging.module.js +34 -0
  318. package/dist/infra/queue/configured-processor.d.ts +18 -0
  319. package/dist/infra/queue/configured-processor.js +23 -0
  320. package/dist/infra/queue/job-failure.d.ts +18 -0
  321. package/dist/infra/queue/job-failure.js +26 -0
  322. package/dist/infra/queue/queue-shutdown.d.ts +27 -0
  323. package/dist/infra/queue/queue-shutdown.js +81 -0
  324. package/dist/infra/queue/queue.module.d.ts +16 -0
  325. package/dist/infra/queue/queue.module.js +61 -0
  326. package/dist/infra/queue/redis-connection.d.ts +7 -0
  327. package/dist/infra/queue/redis-connection.js +18 -0
  328. package/dist/infra/queue/retired-schedulers.d.ts +7 -0
  329. package/dist/infra/queue/retired-schedulers.js +9 -0
  330. package/dist/infra/queue/run-job.d.ts +16 -0
  331. package/dist/infra/queue/run-job.js +19 -0
  332. package/dist/infra/redis/redis.module.d.ts +24 -0
  333. package/dist/infra/redis/redis.module.js +87 -0
  334. package/dist/infra/schedule/cron-tick.d.ts +12 -0
  335. package/dist/infra/schedule/cron-tick.js +25 -0
  336. package/dist/infra/schedule/locked-cron.decorator.d.ts +27 -0
  337. package/dist/infra/schedule/locked-cron.decorator.js +53 -0
  338. package/dist/infra/schedule/locked-interval.d.ts +69 -0
  339. package/dist/infra/schedule/locked-interval.js +190 -0
  340. package/dist/infra/schedule/locked-tick.d.ts +90 -0
  341. package/dist/infra/schedule/locked-tick.js +137 -0
  342. package/dist/infra/schedule/schedule.module.d.ts +8 -0
  343. package/dist/infra/schedule/schedule.module.js +27 -0
  344. package/dist/infra/schedule/scheduled-runs.d.ts +69 -0
  345. package/dist/infra/schedule/scheduled-runs.js +163 -0
  346. package/dist/infra/swagger/swagger.d.ts +16 -0
  347. package/dist/infra/swagger/swagger.js +31 -0
  348. package/dist/infra/throttler/credential-throttler.d.ts +35 -0
  349. package/dist/infra/throttler/credential-throttler.js +77 -0
  350. package/dist/infra/throttler/named-throttlers.d.ts +31 -0
  351. package/dist/infra/throttler/named-throttlers.js +119 -0
  352. package/dist/infra/throttler/redis-throttler-storage.d.ts +38 -0
  353. package/dist/infra/throttler/redis-throttler-storage.js +130 -0
  354. package/dist/infra/throttler/throttler.guard.d.ts +23 -0
  355. package/dist/infra/throttler/throttler.guard.js +68 -0
  356. package/dist/infra/throttler/throttler.module.d.ts +15 -0
  357. package/dist/infra/throttler/throttler.module.js +53 -0
  358. package/dist/infra/tokens.d.ts +15 -0
  359. package/dist/infra/tokens.js +15 -0
  360. package/dist/infra/validation/create-zod-dto.d.ts +23 -0
  361. package/dist/infra/validation/create-zod-dto.js +35 -0
  362. package/dist/infra/validation/parse-with-zod.d.ts +7 -0
  363. package/dist/infra/validation/parse-with-zod.js +12 -0
  364. package/dist/infra/validation/validation.module.d.ts +3 -0
  365. package/dist/infra/validation/validation.module.js +16 -0
  366. package/dist/infra/validation/zod-params.d.ts +7 -0
  367. package/dist/infra/validation/zod-params.js +42 -0
  368. package/dist/infra/validation/zod-validation.pipe.d.ts +11 -0
  369. package/dist/infra/validation/zod-validation.pipe.js +31 -0
  370. package/dist/kernel.d.ts +9 -241
  371. package/dist/kernel.js +8 -1305
  372. package/dist/kernel.module.d.ts +17 -0
  373. package/dist/kernel.module.js +136 -0
  374. package/dist/lifecycle/kernel-lifecycle.d.ts +140 -0
  375. package/dist/lifecycle/kernel-lifecycle.js +451 -0
  376. package/dist/lifecycle/tokens.d.ts +3 -0
  377. package/dist/lifecycle/tokens.js +3 -0
  378. package/dist/log-config.d.ts +9 -0
  379. package/dist/log-config.js +27 -0
  380. package/dist/log-context.d.ts +34 -0
  381. package/dist/log-context.js +44 -0
  382. package/dist/log-loki.d.ts +34 -0
  383. package/dist/log-loki.js +145 -0
  384. package/dist/log.d.ts +41 -10
  385. package/dist/log.js +91 -17
  386. package/dist/models/models.module.d.ts +3 -0
  387. package/dist/models/models.module.js +24 -0
  388. package/dist/models/prices.d.ts +8 -2
  389. package/dist/models/prices.js +65 -37
  390. package/dist/models/purposes.controller.d.ts +1 -1
  391. package/dist/models/purposes.controller.js +5 -6
  392. package/dist/models/purposes.d.ts +35 -13
  393. package/dist/models/purposes.js +101 -51
  394. package/dist/net/public-address.js +3 -2
  395. package/dist/orgs/directory-sync.controller.d.ts +1 -1
  396. package/dist/orgs/directory-sync.controller.js +2 -2
  397. package/dist/orgs/directory-sync.d.ts +61 -31
  398. package/dist/orgs/directory-sync.js +212 -125
  399. package/dist/orgs/invitations.controller.d.ts +8 -8
  400. package/dist/orgs/invitations.controller.js +27 -26
  401. package/dist/orgs/invitations.service.d.ts +12 -9
  402. package/dist/orgs/invitations.service.js +130 -92
  403. package/dist/orgs/job-ids.d.ts +8 -0
  404. package/dist/orgs/job-ids.js +8 -0
  405. package/dist/orgs/members.service.d.ts +19 -12
  406. package/dist/orgs/members.service.js +161 -117
  407. package/dist/orgs/offboarding.d.ts +54 -57
  408. package/dist/orgs/offboarding.js +161 -71
  409. package/dist/orgs/org-lock.d.ts +28 -19
  410. package/dist/orgs/org-lock.js +81 -35
  411. package/dist/orgs/org.guard.d.ts +1 -1
  412. package/dist/orgs/org.guard.js +2 -2
  413. package/dist/orgs/orgs.controller.d.ts +13 -13
  414. package/dist/orgs/orgs.controller.js +29 -17
  415. package/dist/orgs/orgs.module.d.ts +6 -0
  416. package/dist/orgs/orgs.module.js +68 -0
  417. package/dist/orgs/orgs.service.d.ts +30 -19
  418. package/dist/orgs/orgs.service.js +139 -86
  419. package/dist/orgs/settings.controller.d.ts +1 -1
  420. package/dist/orgs/settings.controller.js +8 -6
  421. package/dist/orgs/settings.service.d.ts +14 -8
  422. package/dist/orgs/settings.service.js +75 -46
  423. package/dist/overrides.d.ts +56 -0
  424. package/dist/overrides.js +30 -0
  425. package/dist/roles/gateway-role.d.ts +43 -0
  426. package/dist/roles/gateway-role.js +98 -0
  427. package/dist/roles/gateway.module.d.ts +8 -0
  428. package/dist/roles/gateway.module.js +28 -0
  429. package/dist/roles/worker-role.d.ts +63 -0
  430. package/dist/roles/worker-role.js +144 -0
  431. package/dist/roles/worker.module.d.ts +14 -0
  432. package/dist/roles/worker.module.js +90 -0
  433. package/dist/runtime/abort.js +19 -2
  434. package/dist/runtime/checkpointer.d.ts +8 -3
  435. package/dist/runtime/checkpointer.js +87 -55
  436. package/dist/runtime/conversation-lock.d.ts +20 -11
  437. package/dist/runtime/conversation-lock.js +62 -72
  438. package/dist/runtime/hook-calls.d.ts +3 -3
  439. package/dist/runtime/hook-calls.js +1 -6
  440. package/dist/runtime/job-ids.d.ts +10 -0
  441. package/dist/runtime/job-ids.js +10 -0
  442. package/dist/runtime/langgraph-loop.js +1 -1
  443. package/dist/runtime/loop.d.ts +7 -0
  444. package/dist/runtime/loop.js +14 -0
  445. package/dist/runtime/maintenance-queue.d.ts +10 -0
  446. package/dist/runtime/maintenance-queue.js +10 -0
  447. package/dist/runtime/maintenance.d.ts +45 -74
  448. package/dist/runtime/maintenance.js +139 -136
  449. package/dist/runtime/model-call.d.ts +7 -4
  450. package/dist/runtime/model-call.js +24 -57
  451. package/dist/runtime/providers.d.ts +17 -6
  452. package/dist/runtime/providers.js +66 -25
  453. package/dist/runtime/quota.d.ts +17 -3
  454. package/dist/runtime/quota.js +27 -2
  455. package/dist/runtime/retired-schedulers.d.ts +7 -0
  456. package/dist/runtime/retired-schedulers.js +31 -0
  457. package/dist/runtime/run-control.d.ts +33 -0
  458. package/dist/runtime/run-control.js +77 -0
  459. package/dist/runtime/run-finish.d.ts +26 -17
  460. package/dist/runtime/run-finish.js +98 -51
  461. package/dist/runtime/run-jobs.d.ts +48 -0
  462. package/dist/runtime/run-jobs.js +95 -0
  463. package/dist/runtime/run-processors.d.ts +60 -0
  464. package/dist/runtime/run-processors.js +185 -0
  465. package/dist/runtime/run-queue.d.ts +32 -57
  466. package/dist/runtime/run-queue.js +291 -295
  467. package/dist/runtime/run-steps.d.ts +39 -0
  468. package/dist/runtime/run-steps.js +96 -0
  469. package/dist/runtime/run-worker.d.ts +121 -75
  470. package/dist/runtime/run-worker.js +340 -225
  471. package/dist/runtime/runtime.module.d.ts +10 -0
  472. package/dist/runtime/runtime.module.js +112 -0
  473. package/dist/runtime/step-log.d.ts +40 -0
  474. package/dist/runtime/step-log.js +94 -0
  475. package/dist/runtime/stream.controller.d.ts +5 -8
  476. package/dist/runtime/stream.controller.js +14 -12
  477. package/dist/runtime/stream.d.ts +24 -6
  478. package/dist/runtime/stream.js +78 -7
  479. package/dist/runtime/subagents/child.d.ts +3 -44
  480. package/dist/runtime/subagents/child.js +0 -79
  481. package/dist/runtime/subagents/definition.d.ts +4 -4
  482. package/dist/runtime/subagents/definition.js +2 -2
  483. package/dist/runtime/subagents/dispatch.d.ts +87 -6
  484. package/dist/runtime/subagents/dispatch.js +135 -140
  485. package/dist/runtime/subagents/limits.d.ts +9 -4
  486. package/dist/runtime/subagents/limits.js +4 -2
  487. package/dist/runtime/subagents/org-agents.d.ts +4 -4
  488. package/dist/runtime/subagents/org-agents.js +1 -1
  489. package/dist/runtime/subagents/progress.d.ts +2 -2
  490. package/dist/runtime/subagents/roster.d.ts +3 -3
  491. package/dist/runtime/subagents/roster.js +1 -1
  492. package/dist/runtime/subagents/skill-fork.d.ts +6 -7
  493. package/dist/runtime/subagents/skill-fork.js +16 -5
  494. package/dist/runtime/subagents/subagents.service.d.ts +40 -0
  495. package/dist/runtime/subagents/subagents.service.js +101 -0
  496. package/dist/runtime/usage-report.d.ts +94 -52
  497. package/dist/runtime/usage-report.js +200 -99
  498. package/dist/runtime/waits.d.ts +125 -57
  499. package/dist/runtime/waits.js +431 -208
  500. package/dist/sandbox/job-ids.d.ts +10 -0
  501. package/dist/sandbox/job-ids.js +10 -0
  502. package/dist/sandbox/jobs.d.ts +41 -0
  503. package/dist/sandbox/jobs.js +113 -0
  504. package/dist/sandbox/leases.d.ts +39 -31
  505. package/dist/sandbox/leases.js +117 -257
  506. package/dist/sandbox/providers.d.ts +19 -0
  507. package/dist/sandbox/providers.js +38 -0
  508. package/dist/sandbox/sandbox.module.d.ts +8 -0
  509. package/dist/sandbox/sandbox.module.js +30 -0
  510. package/dist/sandbox/sandbox.service.d.ts +24 -29
  511. package/dist/sandbox/sandbox.service.js +106 -75
  512. package/dist/skills/catalog.d.ts +33 -20
  513. package/dist/skills/catalog.js +96 -53
  514. package/dist/skills/changes.controller.d.ts +4 -4
  515. package/dist/skills/changes.controller.js +15 -9
  516. package/dist/skills/changes.service.d.ts +28 -18
  517. package/dist/skills/changes.service.js +421 -364
  518. package/dist/skills/invocable.controller.d.ts +1 -1
  519. package/dist/skills/invocable.controller.js +8 -5
  520. package/dist/skills/invoke.d.ts +16 -15
  521. package/dist/skills/invoke.js +48 -17
  522. package/dist/skills/skills.controller.d.ts +1 -1
  523. package/dist/skills/skills.controller.js +11 -6
  524. package/dist/skills/skills.module.d.ts +6 -0
  525. package/dist/skills/skills.module.js +30 -0
  526. package/dist/skills/skills.service.d.ts +47 -30
  527. package/dist/skills/skills.service.js +221 -158
  528. package/dist/storage/job-ids.d.ts +6 -0
  529. package/dist/storage/job-ids.js +6 -0
  530. package/dist/storage/purge.d.ts +22 -7
  531. package/dist/storage/purge.js +55 -3
  532. package/dist/storage/storage.module.d.ts +6 -0
  533. package/dist/storage/storage.module.js +23 -0
  534. package/dist/storage/storage.service.d.ts +18 -4
  535. package/dist/storage/storage.service.js +44 -3
  536. package/dist/tools/approvals.controller.d.ts +1 -1
  537. package/dist/tools/approvals.controller.js +12 -8
  538. package/dist/tools/approvals.service.d.ts +27 -25
  539. package/dist/tools/approvals.service.js +324 -258
  540. package/dist/tools/breaker.d.ts +2 -2
  541. package/dist/tools/breaker.js +21 -3
  542. package/dist/tools/builtins/ask-user.d.ts +2 -2
  543. package/dist/tools/builtins/ask-user.js +1 -1
  544. package/dist/tools/builtins/builtin-tools.d.ts +21 -0
  545. package/dist/tools/builtins/builtin-tools.js +80 -0
  546. package/dist/tools/builtins/read-tool-output.d.ts +2 -2
  547. package/dist/tools/builtins/read-tool-output.js +1 -1
  548. package/dist/tools/builtins/sandbox/bash.js +2 -2
  549. package/dist/tools/builtins/sandbox/common.d.ts +7 -4
  550. package/dist/tools/builtins/sandbox/common.js +5 -3
  551. package/dist/tools/builtins/sandbox/deliver.js +2 -2
  552. package/dist/tools/builtins/sandbox/edit.js +1 -1
  553. package/dist/tools/builtins/sandbox/glob.js +2 -2
  554. package/dist/tools/builtins/sandbox/grep.js +2 -2
  555. package/dist/tools/builtins/sandbox/read.js +1 -1
  556. package/dist/tools/builtins/sandbox/write.js +1 -1
  557. package/dist/tools/builtins/skill-load.d.ts +3 -3
  558. package/dist/tools/builtins/skill-load.js +1 -1
  559. package/dist/tools/canonical-json.d.ts +6 -0
  560. package/dist/tools/canonical-json.js +16 -0
  561. package/dist/tools/connector-content.controller.d.ts +1 -1
  562. package/dist/tools/connector-content.controller.js +11 -6
  563. package/dist/tools/connector-content.d.ts +12 -15
  564. package/dist/tools/connector-content.js +53 -18
  565. package/dist/tools/connectors.controller.d.ts +1 -1
  566. package/dist/tools/connectors.controller.js +21 -10
  567. package/dist/tools/connectors.service.d.ts +31 -13
  568. package/dist/tools/connectors.service.js +434 -344
  569. package/dist/tools/credentials.d.ts +17 -20
  570. package/dist/tools/credentials.js +55 -34
  571. package/dist/tools/drift.d.ts +29 -41
  572. package/dist/tools/drift.js +111 -79
  573. package/dist/tools/info.d.ts +12 -9
  574. package/dist/tools/info.js +33 -7
  575. package/dist/tools/job-ids.d.ts +13 -0
  576. package/dist/tools/job-ids.js +15 -0
  577. package/dist/tools/jobs.d.ts +24 -0
  578. package/dist/tools/jobs.js +69 -0
  579. package/dist/tools/oauth/flow-paths.d.ts +16 -0
  580. package/dist/tools/oauth/flow-paths.js +38 -0
  581. package/dist/tools/oauth/flow.d.ts +30 -30
  582. package/dist/tools/oauth/flow.js +109 -81
  583. package/dist/tools/oauth/oauth.controller.d.ts +3 -3
  584. package/dist/tools/oauth/oauth.controller.js +12 -9
  585. package/dist/tools/oauth/tokens.d.ts +11 -3
  586. package/dist/tools/oauth/tokens.js +15 -14
  587. package/dist/tools/outputs.d.ts +13 -4
  588. package/dist/tools/outputs.js +47 -3
  589. package/dist/tools/pipeline.d.ts +62 -46
  590. package/dist/tools/pipeline.js +145 -64
  591. package/dist/tools/policy.d.ts +2 -2
  592. package/dist/tools/questions.controller.d.ts +1 -1
  593. package/dist/tools/questions.controller.js +8 -5
  594. package/dist/tools/questions.service.d.ts +25 -24
  595. package/dist/tools/questions.service.js +201 -142
  596. package/dist/tools/registry.d.ts +30 -20
  597. package/dist/tools/registry.js +73 -37
  598. package/dist/tools/specs.d.ts +5 -4
  599. package/dist/tools/specs.js +3 -1
  600. package/dist/tools/tools.module.d.ts +10 -0
  601. package/dist/tools/tools.module.js +91 -0
  602. package/dist/ui/call-extension.d.ts +16 -0
  603. package/dist/ui/call-extension.js +38 -0
  604. package/dist/ui/embed-token.d.ts +9 -5
  605. package/dist/ui/embed-token.js +34 -6
  606. package/dist/ui/ui-stream.d.ts +22 -17
  607. package/dist/ui/ui-stream.js +72 -12
  608. package/dist/ui/ui.module.d.ts +7 -0
  609. package/dist/ui/ui.module.js +28 -0
  610. package/dist/ui/views.controller.d.ts +14 -12
  611. package/dist/ui/views.controller.js +32 -25
  612. package/dist/ui/views.d.ts +9 -57
  613. package/dist/ui/views.js +43 -45
  614. package/package.json +11 -2
  615. package/dist/http/health.controller.d.ts +0 -26
  616. package/dist/http/health.controller.js +0 -79
  617. package/dist/http/tokens.d.ts +0 -131
  618. package/dist/http/tokens.js +0 -131
  619. package/dist/http/zod.pipe.d.ts +0 -8
  620. package/dist/http/zod.pipe.js +0 -14
  621. package/dist/identity/rate-limit.d.ts +0 -55
  622. package/dist/identity/rate-limit.js +0 -121
  623. package/dist/sandbox/lifecycle.d.ts +0 -21
  624. package/dist/sandbox/lifecycle.js +0 -68
  625. /package/dist/http/{gateway.module.d.ts → gateway-routes.d.ts} +0 -0
  626. /package/dist/http/{gateway.module.js → gateway-routes.js} +0 -0
@@ -1,145 +1,36 @@
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 { isDeepStrictEqual } from "node:util";
2
- import { sql } from "kysely";
11
+ import { Inject, Injectable } from "@nestjs/common";
3
12
  import { configFields, describeSchema, getPath, secretValues } from "../config/fields.js";
4
- import { fieldSource } from "../config/sources.js";
13
+ import { configSourceKind, extensionConfigSources, fieldSource, } from "../config/sources.js";
5
14
  import { createSecrets } from "../ctx/secrets.js";
6
15
  import { ApiError } from "../errors.js";
7
16
  import { audit } from "../identity/audit.js";
8
- import { lockEnterpriseAdminsAndAuthorize } from "../identity/enterprise-admin.js";
17
+ import { EnterpriseAdminLock } from "../identity/enterprise-admin.js";
18
+ import { KernelConfigService } from "../infra/config/kernel-config.service.js";
19
+ import { KernelDb } from "../infra/database/kernel-db.js";
20
+ import { TransactionHost } from "../infra/database/transaction-host.js";
21
+ import { Transactional } from "../infra/database/transactional.decorator.js";
22
+ import { KERNEL_BUS, KERNEL_LOGGER, KEYRING } from "../infra/tokens.js";
23
+ import { KERNEL_APP_OPTIONS } from "../lifecycle/tokens.js";
24
+ import { toIssues } from "./config-issues.js";
9
25
  import { configToJsonSchema } from "./config-json-schema.js";
10
- import { toIssues } from "./org-config.js";
11
- /** 部署级插件配置的密钥存在 `capybara.secrets` 的这个 org_id 下(不是真实组织;namespace `kernel`)。 */
12
- export const DEPLOYMENT_SECRETS_ORG = "_deployment";
13
- /** 内核自己的 secrets 命名空间(`kernel` 是保留插件名)。 */
14
- const SECRETS_NAMESPACE = "kernel";
15
- const SECRET_KEY_PREFIX = "plugin-deployment-config:";
16
- const secretKey = (plugin, path) => `${SECRET_KEY_PREFIX}${plugin}:${path}`;
17
- /**
18
- * 部署配置保存之后(kernel bus 主题,频道 `cap:kernel:plugin-deployment-config`,payload `{ plugin }`):
19
- * 各副本重读并校验——只改了 hot 字段就地替换,改了非 hot 字段重新加载实例,不合法保持当前值并告警;
20
- * 插件此刻待配置时,下一次 reconcile 加载它。
21
- */
22
- export const PLUGIN_DEPLOYMENT_CONFIG_TOPIC = "plugin-deployment-config";
23
- /** 由 zod schema 得出字段清单(`configFields`:对象路径上的叶子,secret 向下继承)。 */
24
- export function schemaFields(schema) {
25
- if (!schema)
26
- return [];
27
- return configFields(schema).map((f) => ({
28
- path: f.path,
29
- secret: f.meta?.secret === true,
30
- hot: f.meta?.hot === true,
31
- }));
32
- }
33
- const isObj = (v) => typeof v === "object" && v !== null && !Array.isArray(v);
34
- /** 按点路径设值,缺失的中间对象自动创建;中间节点不是对象时放弃。 */
35
- function setDeep(obj, path, value) {
36
- const segs = path.split(".");
37
- let node = obj;
38
- for (const seg of segs.slice(0, -1)) {
39
- const next = node[seg];
40
- if (next === undefined)
41
- node[seg] = {};
42
- else if (!isObj(next))
43
- return;
44
- node = node[seg];
45
- }
46
- node[segs[segs.length - 1]] = value;
47
- }
48
- /** 按点路径删除键;删完变空的中间对象一并删掉。 */
49
- function deleteDeep(obj, path) {
50
- const segs = path.split(".");
51
- const chain = [obj];
52
- let node = obj;
53
- for (const seg of segs.slice(0, -1)) {
54
- if (!isObj(node))
55
- return;
56
- node = node[seg];
57
- if (!isObj(node))
58
- return;
59
- chain.push(node);
60
- }
61
- delete chain[chain.length - 1][segs[segs.length - 1]];
62
- for (let i = chain.length - 1; i > 0; i--) {
63
- if (Object.keys(chain[i]).length > 0)
64
- break;
65
- delete chain[i - 1][segs[i - 1]];
66
- }
67
- }
68
- /** 叶子点路径(对象递归;其余都是叶子)。 */
69
- function leafPaths(value, prefix = "", out = []) {
70
- if (isObj(value)) {
71
- for (const [k, v] of Object.entries(value))
72
- leafPaths(v, prefix ? `${prefix}.${k}` : k, out);
73
- }
74
- else if (prefix !== "")
75
- out.push(prefix);
76
- return out;
77
- }
78
- /** 启动配置(文件 / 环境变量合并后的值)是否覆盖了这个字段:给了它、它下面的值,或在祖先上给了非对象值。 */
79
- function coveredBy(fileValue, path) {
80
- let node = fileValue;
81
- for (const seg of path.split(".")) {
82
- if (node === undefined)
83
- return false;
84
- if (!isObj(node))
85
- return true;
86
- node = node[seg];
87
- }
88
- return node !== undefined;
89
- }
90
- /**
91
- * 合并一个插件的部署配置(C10 的优先级:环境变量 > 文件 / Nacos > PG > schema 默认值):以启动配置
92
- * (`fileValue`,已含环境变量)为底,逐字段补上 PG 里保存、而启动配置没有覆盖的值。按字段合并:启动配置给了的字段
93
- * 整个以它为准(不与 PG 的值深合并)。`fields` 为字段点路径(没有 schema 时用 PG 值的叶子路径)。默认值由校验补上。
94
- */
95
- export function mergeDeploymentConfig(stored, fileValue, fields = leafPaths(stored)) {
96
- if (fileValue !== undefined && !isObj(fileValue))
97
- return fileValue;
98
- const out = structuredClone(fileValue ?? {});
99
- for (const path of fields) {
100
- const v = getPath(stored, path);
101
- if (v === undefined || coveredBy(fileValue, path))
102
- continue;
103
- setDeep(out, path, structuredClone(v));
104
- }
105
- return out;
106
- }
107
- /**
108
- * PG 里一个插件保存的部署配置(非密钥字段 + 解密的密钥字段,按点路径放回对象)。只并入 `secretPaths`(当前
109
- * schema 里是密钥的字段)的密钥:旧版本留下、现在已不是密钥或已删掉的字段不解密、不并入(否则会被当成明文回显
110
- * 或保存)。
111
- */
112
- export async function readStoredDeploymentConfig(db, keyring, plugin, opts) {
113
- let q = db
114
- .selectFrom("extension_deployment_configs")
115
- .select("config")
116
- .where("plugin", "=", plugin);
117
- if (opts.forUpdate)
118
- q = q.forUpdate();
119
- const row = await q.executeTakeFirst();
120
- const out = structuredClone(row?.config ?? {});
121
- const prefix = secretKey(plugin, "");
122
- const wanted = new Set(opts.secretPaths);
123
- if (wanted.size === 0)
124
- return out;
125
- const keys = await db
126
- .selectFrom("secrets")
127
- .select("key")
128
- .where("namespace", "=", SECRETS_NAMESPACE)
129
- .where("org_id", "=", DEPLOYMENT_SECRETS_ORG)
130
- .execute();
131
- const secrets = createSecrets(db, keyring, SECRETS_NAMESPACE);
132
- for (const { key } of keys) {
133
- if (!key.startsWith(prefix) || !wanted.has(key.slice(prefix.length)))
134
- continue;
135
- const v = await secrets.get(DEPLOYMENT_SECRETS_ORG, key);
136
- if (v !== null)
137
- setDeep(out, key.slice(prefix.length), JSON.parse(v));
138
- }
139
- return out;
140
- }
141
- /** 字段清单里的密钥字段路径。 */
142
- export const secretPathsOf = (fields) => fields.filter((f) => f.secret).map((f) => f.path);
26
+ import { DEPLOYMENT_SECRETS_ORG, deleteDeep, mergeDeploymentConfig, readStoredDeploymentConfig, SECRETS_NAMESPACE, schemaFields, secretKey, secretPathsOf, setDeep, } from "./deployment-config-store.js";
27
+ import { ExtensionHost } from "./host.js";
28
+ import { ExtensionInstalls } from "./installs.js";
29
+ import { ExtensionLifecycle } from "./lifecycle.js";
30
+ import { PLUGIN_DEPLOYMENT_CONFIG_TOPIC } from "./lifecycle-topics.js";
31
+ import { PluginDeploymentConfigLock } from "./locks.js";
32
+ export { DEPLOYMENT_SECRETS_ORG, mergeDeploymentConfig, readStoredDeploymentConfig, schemaFields, secretPathsOf, };
33
+ export { PLUGIN_DEPLOYMENT_CONFIG_TOPIC };
143
34
  /** JSON Schema 转换按 schema 对象缓存(清单不可变)。 */
144
35
  const jsonSchemaCache = new WeakMap();
145
36
  function jsonSchemaOf(schema) {
@@ -166,31 +57,83 @@ function defaultOf(schema, path) {
166
57
  * follows {@link mergeDeploymentConfig}. No in-process state, shared by every replica.
167
58
  * Secret values are never echoed: responses only say "set", audits only record which paths changed.
168
59
  */
169
- export class ExtensionDeploymentConfigService {
170
- d;
171
- constructor(d) {
172
- this.d = d;
60
+ let ExtensionDeploymentConfigService = class ExtensionDeploymentConfigService {
61
+ kdb;
62
+ txHost;
63
+ adminLock;
64
+ configLock;
65
+ keyring;
66
+ config;
67
+ host;
68
+ installs;
69
+ lifecycle;
70
+ bus;
71
+ log;
72
+ /** Where each startup-config field comes from (see `extensionConfigSources`); those fields are read-only. */
73
+ sources;
74
+ constructor(kdb, txHost,
75
+ /** The enterprise admin lock (identity/enterprise-admin.ts): joins the transaction. */
76
+ adminLock, configLock, keyring, config,
77
+ /** This replica's extension schemas (loaded, config-declared or prepared install records). */
78
+ host,
79
+ /** The effective (stored plus startup) deployment config. */
80
+ installs,
81
+ /** Applies a saved config on this replica at once (other replicas through the bus). */
82
+ lifecycle,
83
+ /** Publishes {@link PLUGIN_DEPLOYMENT_CONFIG_TOPIC} after a save (a failure only warns). */
84
+ bus, log, options) {
85
+ this.kdb = kdb;
86
+ this.txHost = txHost;
87
+ this.adminLock = adminLock;
88
+ this.configLock = configLock;
89
+ this.keyring = keyring;
90
+ this.config = config;
91
+ this.host = host;
92
+ this.installs = installs;
93
+ this.lifecycle = lifecycle;
94
+ this.bus = bus;
95
+ this.log = log;
96
+ const env = options.env ?? process.env;
97
+ this.sources =
98
+ options.extensionConfigSources ??
99
+ extensionConfigSources({ extensionConfig: config.get().extensionConfig }, env, configSourceKind(env));
100
+ }
101
+ get db() {
102
+ return this.kdb.db;
103
+ }
104
+ /** The startup config's `extensionConfig` (file / Nacos merged with env). */
105
+ fileConfig() {
106
+ return this.config.get().extensionConfig;
107
+ }
108
+ /**
109
+ * The extension's deployment config description; undefined when the deployment does not know
110
+ * the extension (`extension.not_found`). Public for tests only.
111
+ */
112
+ async schemaOf(plugin) {
113
+ const local = this.host.deploymentSchema(plugin);
114
+ if (local)
115
+ return { ...local, fields: schemaFields(local.schema) };
116
+ // 与配置声明重名的安装记录不生效
117
+ if (this.host.declared().has(plugin))
118
+ return undefined;
119
+ return staticDeploymentSchema(this.db, plugin);
173
120
  }
174
121
  /** 插件的生效部署配置(未校验):启动配置为底,补上 PG 里保存的字段。`schema` 给出时按它的字段合并。 */
175
- async effective(plugin, fileValue, schema) {
176
- const stored = await readStoredDeploymentConfig(this.d.db, this.d.keyring, plugin, {
177
- secretPaths: secretPathsOf(schemaFields(schema)),
178
- });
179
- const fields = schema ? configFields(schema).map((f) => f.path) : undefined;
180
- return mergeDeploymentConfig(stored, fileValue, fields);
122
+ effective(plugin, fileValue, schema) {
123
+ return this.installs.effectiveDeploymentConfig(plugin, fileValue, schema);
181
124
  }
182
125
  /** Admin view; an extension unknown to the deployment -> `extension.not_found`. */
183
126
  async view(plugin) {
184
127
  const info = await this.info(plugin);
185
- const stored = await this.d.db
186
- .transaction()
187
- .setIsolationLevel("repeatable read")
188
- .setAccessMode("read only")
189
- .execute((t) => readStoredDeploymentConfig(t, this.d.keyring, plugin, {
190
- secretPaths: secretPathsOf(info.fields),
191
- }));
128
+ const stored = await this.readStored(plugin, info);
192
129
  return this.render(plugin, info, stored);
193
130
  }
131
+ /** `REPEATABLE READ` read-only: every stored field from one snapshot. */
132
+ readStored(plugin, info) {
133
+ return readStoredDeploymentConfig(this.db, this.keyring, plugin, {
134
+ secretPaths: secretPathsOf(info.fields),
135
+ });
136
+ }
194
137
  /**
195
138
  * Saves some fields: `values` keyed by field dot path, `null` = clear (back to the default),
196
139
  * omitted = unchanged.
@@ -213,94 +156,32 @@ export class ExtensionDeploymentConfigService {
213
156
  if (unknown.length > 0) {
214
157
  throw new ApiError("extension.config_invalid", `Unknown deployment config fields for extension ${plugin}`, unknown.map((path) => ({ path, message: "unknown field" })));
215
158
  }
216
- const sources = this.d.sources[plugin];
159
+ const sources = this.sources[plugin];
217
160
  const readonly = Object.keys(values).filter((p) => fieldSource(sources, p) !== undefined);
218
161
  if (readonly.length > 0) {
219
162
  throw new ApiError("extension.config_readonly", `These deployment config fields of extension ${plugin} are set in the startup config (file, Nacos or environment) and are read-only here: ${readonly.join(", ")}`, readonly.map((path) => ({ path, source: fieldSource(sources, path) })));
220
163
  }
221
- const fileValue = this.d.fileConfig()[plugin];
164
+ const fileValue = this.fileConfig()[plugin];
222
165
  const fieldPaths = info.fields.map((f) => f.path);
223
- let saved;
224
- let changed = [];
225
- await this.d.db.transaction().execute(async (t) => {
226
- await lockEnterpriseAdminsAndAuthorize(t, actor);
227
- await sql `SELECT pg_advisory_xact_lock(hashtext(${`capybara.plugin-deployment-config:${plugin}`}))`.execute(t);
228
- const before = await readStoredDeploymentConfig(t, this.d.keyring, plugin, {
229
- forUpdate: true,
230
- secretPaths: secretPathsOf(info.fields),
231
- });
232
- const next = structuredClone(before);
233
- for (const [path, v] of Object.entries(values)) {
234
- if (v === null)
235
- deleteDeep(next, path);
236
- else
237
- setDeep(next, path, structuredClone(v));
238
- }
239
- if (info.schema) {
240
- const r = info.schema.safeParse(mergeDeploymentConfig(next, fileValue, fieldPaths));
241
- if (!r.success) {
242
- // 启动配置里只读字段自己的问题这里改不了(照样保存,插件保持待配置),其余拒绝
243
- const issues = toIssues(r.error).filter((i) => i.path === "" || fieldSource(sources, i.path) === undefined);
244
- if (issues.length > 0) {
245
- throw new ApiError("extension.config_invalid", `Invalid deployment config for extension ${plugin}`, issues);
246
- }
247
- }
248
- }
249
- changed = Object.keys(values)
250
- .filter((p) => !isDeepStrictEqual(getPath(before, p), getPath(next, p)))
251
- .sort();
252
- saved = next;
253
- if (changed.length === 0)
254
- return;
255
- const plain = structuredClone(next);
256
- const secrets = createSecrets(t, this.d.keyring, SECRETS_NAMESPACE);
257
- for (const f of info.fields) {
258
- if (!f.secret)
259
- continue;
260
- deleteDeep(plain, f.path);
261
- if (!(f.path in values))
262
- continue;
263
- const v = getPath(next, f.path);
264
- if (v === undefined)
265
- await secrets.delete(DEPLOYMENT_SECRETS_ORG, secretKey(plugin, f.path));
266
- else
267
- await secrets.set(DEPLOYMENT_SECRETS_ORG, secretKey(plugin, f.path), JSON.stringify(v));
268
- }
269
- await t
270
- .insertInto("extension_deployment_configs")
271
- .values({ plugin, config: JSON.stringify(plain), updated_by: actor })
272
- .onConflict((oc) => oc.column("plugin").doUpdateSet({
273
- config: JSON.stringify(plain),
274
- updated_by: actor,
275
- updated_at: new Date(),
276
- }))
277
- .execute();
278
- await audit(t, {
279
- actorAccountId: actor,
280
- ...(actorTokenId !== undefined && { actorTokenId }),
281
- action: "extension.deployment_config_updated",
282
- target: plugin,
283
- detail: { changedPaths: changed },
284
- });
285
- });
166
+ const { saved, changed } = await this.write(plugin, values, actor, actorTokenId, info, sources, fileValue);
286
167
  const stored = saved ?? {};
287
- if (info.schema && this.d.onSecrets) {
288
- const values = secretValues(info.schema, mergeDeploymentConfig(stored, fileValue, fieldPaths));
289
- if (values.length > 0)
290
- this.d.onSecrets(values);
168
+ if (info.schema) {
169
+ const secrets = secretValues(info.schema, mergeDeploymentConfig(stored, fileValue, fieldPaths));
170
+ if (secrets.length > 0)
171
+ this.log.addSecrets(secrets);
291
172
  }
292
173
  if (changed.length > 0) {
293
174
  try {
294
- await this.d.bus?.publish(PLUGIN_DEPLOYMENT_CONFIG_TOPIC, { plugin });
175
+ await this.bus.publish(PLUGIN_DEPLOYMENT_CONFIG_TOPIC, { plugin });
295
176
  }
296
177
  catch (err) {
297
- this.d.log.warn("cannot publish plugin-deployment-config after saving", { plugin, err });
178
+ this.log.warn("cannot publish plugin-deployment-config after saving", { plugin, err });
298
179
  }
299
180
  try {
300
- await this.d.applyLocal?.(plugin);
181
+ await this.lifecycle.applyConfig(plugin);
301
182
  }
302
183
  catch (err) {
303
- this.d.log.error("applying the plugin deployment config on this replica failed", {
184
+ this.log.error("applying the plugin deployment config on this replica failed", {
304
185
  plugin,
305
186
  err,
306
187
  });
@@ -308,16 +189,81 @@ export class ExtensionDeploymentConfigService {
308
189
  }
309
190
  return this.render(plugin, info, stored);
310
191
  }
192
+ async write(plugin, values, actor, actorTokenId, info, sources, fileValue) {
193
+ const fieldPaths = info.fields.map((f) => f.path);
194
+ let changed = [];
195
+ const t = this.db;
196
+ await this.adminLock.lockAndAuthorize(actor);
197
+ await this.configLock.lock(plugin);
198
+ const before = await readStoredDeploymentConfig(t, this.keyring, plugin, {
199
+ forUpdate: true,
200
+ secretPaths: secretPathsOf(info.fields),
201
+ });
202
+ const next = structuredClone(before);
203
+ for (const [path, v] of Object.entries(values)) {
204
+ if (v === null)
205
+ deleteDeep(next, path);
206
+ else
207
+ setDeep(next, path, structuredClone(v));
208
+ }
209
+ if (info.schema) {
210
+ const r = info.schema.safeParse(mergeDeploymentConfig(next, fileValue, fieldPaths));
211
+ if (!r.success) {
212
+ // 启动配置里只读字段自己的问题这里改不了(照样保存,插件保持待配置),其余拒绝
213
+ const issues = toIssues(r.error).filter((i) => i.path === "" || fieldSource(sources, i.path) === undefined);
214
+ if (issues.length > 0) {
215
+ throw new ApiError("extension.config_invalid", `Invalid deployment config for extension ${plugin}`, issues);
216
+ }
217
+ }
218
+ }
219
+ changed = Object.keys(values)
220
+ .filter((p) => !isDeepStrictEqual(getPath(before, p), getPath(next, p)))
221
+ .sort();
222
+ const saved = next;
223
+ if (changed.length === 0)
224
+ return { saved, changed };
225
+ const plain = structuredClone(next);
226
+ const secrets = createSecrets(t, this.keyring, SECRETS_NAMESPACE);
227
+ for (const f of info.fields) {
228
+ if (!f.secret)
229
+ continue;
230
+ deleteDeep(plain, f.path);
231
+ if (!(f.path in values))
232
+ continue;
233
+ const v = getPath(next, f.path);
234
+ if (v === undefined)
235
+ await secrets.delete(DEPLOYMENT_SECRETS_ORG, secretKey(plugin, f.path));
236
+ else
237
+ await secrets.set(DEPLOYMENT_SECRETS_ORG, secretKey(plugin, f.path), JSON.stringify(v));
238
+ }
239
+ await t
240
+ .insertInto("extension_deployment_configs")
241
+ .values({ plugin, config: JSON.stringify(plain), updated_by: actor })
242
+ .onConflict((oc) => oc.column("plugin").doUpdateSet({
243
+ config: JSON.stringify(plain),
244
+ updated_by: actor,
245
+ updated_at: new Date(),
246
+ }))
247
+ .execute();
248
+ await audit(t, {
249
+ actorAccountId: actor,
250
+ ...(actorTokenId !== undefined && { actorTokenId }),
251
+ action: "extension.deployment_config_updated",
252
+ target: plugin,
253
+ detail: { changedPaths: changed },
254
+ });
255
+ return { saved, changed };
256
+ }
311
257
  async info(plugin) {
312
- const info = await this.d.schemaOf(plugin);
258
+ const info = await this.schemaOf(plugin);
313
259
  if (!info) {
314
260
  throw new ApiError("extension.not_found", `Extension ${plugin} is not known to this deployment`);
315
261
  }
316
262
  return info;
317
263
  }
318
264
  render(plugin, info, stored) {
319
- const fileValue = this.d.fileConfig()[plugin];
320
- const sources = this.d.sources[plugin];
265
+ const fileValue = this.fileConfig()[plugin];
266
+ const sources = this.sources[plugin];
321
267
  const raw = mergeDeploymentConfig(stored, fileValue, info.fields.map((f) => f.path));
322
268
  let effective = raw;
323
269
  let valid = true;
@@ -367,7 +313,33 @@ export class ExtensionDeploymentConfigService {
367
313
  issues,
368
314
  };
369
315
  }
370
- }
316
+ };
317
+ __decorate([
318
+ Transactional({
319
+ propagation: "requires_new",
320
+ isolationLevel: "repeatable read",
321
+ accessMode: "read only",
322
+ })
323
+ ], ExtensionDeploymentConfigService.prototype, "readStored", null);
324
+ __decorate([
325
+ Transactional()
326
+ ], ExtensionDeploymentConfigService.prototype, "write", null);
327
+ ExtensionDeploymentConfigService = __decorate([
328
+ Injectable(),
329
+ __param(0, Inject(KernelDb)),
330
+ __param(1, Inject(TransactionHost)),
331
+ __param(2, Inject(EnterpriseAdminLock)),
332
+ __param(3, Inject(PluginDeploymentConfigLock)),
333
+ __param(4, Inject(KEYRING)),
334
+ __param(5, Inject(KernelConfigService)),
335
+ __param(6, Inject(ExtensionHost)),
336
+ __param(7, Inject(ExtensionInstalls)),
337
+ __param(8, Inject(ExtensionLifecycle)),
338
+ __param(9, Inject(KERNEL_BUS)),
339
+ __param(10, Inject(KERNEL_LOGGER)),
340
+ __param(11, Inject(KERNEL_APP_OPTIONS))
341
+ ], ExtensionDeploymentConfigService);
342
+ export { ExtensionDeploymentConfigService };
371
343
  /**
372
344
  * 本副本拿不到模块时(未加载的安装记录)按包内审阅过的静态清单给出字段(没有 zod schema:不校验,加载时再校验)。
373
345
  */
@@ -1,4 +1,4 @@
1
- import type { KernelDb } from "../db/kernel-schema.js";
1
+ import type { KernelSchemaDb } from "../db/kernel-schema.js";
2
2
  /**
3
3
  * Which extensions an organization has enabled. Two sources, and every reader goes through these
4
4
  * helpers so none of them misses one:
@@ -9,7 +9,7 @@ import type { KernelDb } from "../db/kernel-schema.js";
9
9
  * that need that check it themselves, as before. `db` may be a transaction.
10
10
  */
11
11
  /** The names of the extensions enabled in `orgId` (a subquery with one column, `plugin`). */
12
- export declare function enabledExtensionsQuery(db: KernelDb, orgId: string): import("kysely").SelectQueryBuilder<import("../db/kernel-schema.js").KernelDatabase & {
12
+ export declare function enabledExtensionsQuery(db: KernelSchemaDb, orgId: string): import("kysely").SelectQueryBuilder<import("../db/kernel-schema.js").KernelDatabase & {
13
13
  eoc: import("../db/kernel-schema.js").ExtensionOrgConfigsTable;
14
14
  }, "eoc", {
15
15
  plugin: string;
@@ -19,13 +19,13 @@ export declare function enabledExtensionsQuery(db: KernelDb, orgId: string): imp
19
19
  * `plugin`): `.innerJoin(enabledExtensionsByOrg(db).as("en"), (j) => j.onRef("en.org_id", …)…)`.
20
20
  * Soft-deleted orgs are included, as their org config rows are; callers filter `orgs.deleted_at`.
21
21
  */
22
- export declare function enabledExtensionsByOrg(db: KernelDb): import("kysely").SelectQueryBuilder<import("../db/kernel-schema.js").KernelDatabase & {
22
+ export declare function enabledExtensionsByOrg(db: KernelSchemaDb): import("kysely").SelectQueryBuilder<import("../db/kernel-schema.js").KernelDatabase & {
23
23
  eoc: import("../db/kernel-schema.js").ExtensionOrgConfigsTable;
24
24
  }, "eoc", {
25
25
  org_id: string;
26
26
  plugin: string;
27
27
  }>;
28
28
  /** Whether `plugin` is enabled in `orgId` (see the file header). */
29
- export declare function isExtensionEnabled(db: KernelDb, orgId: string, plugin: string): Promise<boolean>;
29
+ export declare function isExtensionEnabled(db: KernelSchemaDb, orgId: string, plugin: string): Promise<boolean>;
30
30
  /** The names of the required bootstrap plugins (installed with `required`). */
31
- export declare function requiredExtensions(db: KernelDb): Promise<Set<string>>;
31
+ export declare function requiredExtensions(db: KernelSchemaDb): Promise<Set<string>>;
@@ -0,0 +1,8 @@
1
+ /**
2
+ * The extensions domain: the extension host (it builds each `ctx` from the injected kernel
3
+ * services), the package store and install records (the desired state the host converges to, one
4
+ * way: spec §3), the per-replica lifecycle and its periodic reconcile, the admin operations,
5
+ * deployment and org configs, the bootstrap step, and the shared {@link ExtensionRegistry}.
6
+ */
7
+ export declare class ExtensionsModule {
8
+ }
@@ -0,0 +1,77 @@
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
+ import { Module } from "@nestjs/common";
8
+ import { EnterpriseAdminLockModule } from "../identity/enterprise-admin.js";
9
+ import { OrgLockModule } from "../orgs/org-lock.js";
10
+ import { StorageModule } from "../storage/storage.module.js";
11
+ import { EmbedTokensModule } from "../ui/embed-token.js";
12
+ import { ExtensionAdminOps } from "./admin-ops.js";
13
+ import { ExtensionAdmin } from "./admin-view.js";
14
+ import { ExtensionApprovals } from "./approvals.js";
15
+ import { ExtensionBlobs } from "./blobs.js";
16
+ import { BootstrapService } from "./bootstrap.js";
17
+ import { ExtensionDeploymentConfigService } from "./deployment-config.js";
18
+ import { ExtensionHost } from "./host.js";
19
+ import { ExtensionInstalls } from "./installs.js";
20
+ import { ExtensionLifecycle } from "./lifecycle.js";
21
+ import { PluginApproveLock, PluginDeploymentConfigLock, PluginInstallLock } from "./locks.js";
22
+ import { OrgExtensionConfigs } from "./org-config.js";
23
+ import { ExtensionRegistryModule } from "./registry.js";
24
+ import { ReplicaStatusStore } from "./sources.js";
25
+ /**
26
+ * The extensions domain: the extension host (it builds each `ctx` from the injected kernel
27
+ * services), the package store and install records (the desired state the host converges to, one
28
+ * way: spec §3), the per-replica lifecycle and its periodic reconcile, the admin operations,
29
+ * deployment and org configs, the bootstrap step, and the shared {@link ExtensionRegistry}.
30
+ */
31
+ let ExtensionsModule = class ExtensionsModule {
32
+ };
33
+ ExtensionsModule = __decorate([
34
+ Module({
35
+ imports: [
36
+ ExtensionRegistryModule,
37
+ EnterpriseAdminLockModule,
38
+ OrgLockModule,
39
+ StorageModule,
40
+ // ctx.ui verifies embed tokens with the one provider the UI routes issue them with
41
+ EmbedTokensModule,
42
+ ],
43
+ providers: [
44
+ PluginInstallLock,
45
+ PluginApproveLock,
46
+ PluginDeploymentConfigLock,
47
+ ExtensionApprovals,
48
+ ExtensionBlobs,
49
+ ExtensionInstalls,
50
+ ReplicaStatusStore,
51
+ ExtensionHost,
52
+ ExtensionLifecycle,
53
+ ExtensionAdmin,
54
+ ExtensionAdminOps,
55
+ ExtensionDeploymentConfigService,
56
+ OrgExtensionConfigs,
57
+ BootstrapService,
58
+ ],
59
+ exports: [
60
+ ExtensionRegistryModule,
61
+ PluginInstallLock,
62
+ PluginApproveLock,
63
+ ExtensionApprovals,
64
+ ExtensionBlobs,
65
+ ExtensionInstalls,
66
+ ReplicaStatusStore,
67
+ ExtensionHost,
68
+ ExtensionLifecycle,
69
+ ExtensionAdmin,
70
+ ExtensionAdminOps,
71
+ ExtensionDeploymentConfigService,
72
+ OrgExtensionConfigs,
73
+ BootstrapService,
74
+ ],
75
+ })
76
+ ], ExtensionsModule);
77
+ export { ExtensionsModule };
@@ -1,6 +1,6 @@
1
1
  import { type AvailableHook, type HookHandler, type HookOptions, type HookPayloads, type Logger, type PolicyHook } from "@capybara-hq/plugin-sdk";
2
- import type { Redis } from "ioredis";
3
2
  import type { KernelConfig } from "../config/schema.js";
3
+ import type { LockService } from "../infra/lock/lock.service.js";
4
4
  import { type InflightTracker } from "./inflight.js";
5
5
  /** Default of `hooks.timeoutMs` (used when a host is built without kernel config, e.g. in tests). */
6
6
  export declare const DEFAULT_HOOK_TIMEOUT_MS = 5000;
@@ -112,7 +112,8 @@ export declare class HookRegistry {
112
112
  */
113
113
  expectedPolicy?(mount: PolicyHook): readonly string[];
114
114
  enabledPlugins(orgId: string): Promise<Set<string>>;
115
- redis: Redis;
115
+ /** The warn-once markers (`lease`: set unless present, with a TTL). */
116
+ locks: Pick<LockService, "lease">;
116
117
  config: () => {
117
118
  hooks: Pick<KernelConfig["hooks"], "timeoutMs">;
118
119
  };
@@ -414,7 +414,7 @@ export class HookRegistry {
414
414
  const key = `capk:hook-warn:${plugin}:${mount}:${kind}`;
415
415
  let first = true;
416
416
  try {
417
- first = (await this.d.redis.set(key, "1", "PX", WARN_WINDOW_MS, "NX")) === "OK";
417
+ first = await this.d.locks.lease(key, "1", WARN_WINDOW_MS);
418
418
  }
419
419
  catch {
420
420
  // Redis unavailable: log anyway rather than hiding the failure