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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (670) hide show
  1. package/dist/admin/admin.controller.d.ts +17 -17
  2. package/dist/admin/admin.controller.js +43 -26
  3. package/dist/admin/admin.module.d.ts +3 -0
  4. package/dist/admin/admin.module.js +22 -0
  5. package/dist/admin/extensions.controller.d.ts +14 -14
  6. package/dist/admin/extensions.controller.js +30 -17
  7. package/dist/admin/setup-lock.d.ts +16 -0
  8. package/dist/admin/setup-lock.js +47 -0
  9. package/dist/admin/setup.controller.d.ts +8 -8
  10. package/dist/admin/setup.controller.js +27 -25
  11. package/dist/admin/setup.service.d.ts +19 -27
  12. package/dist/admin/setup.service.js +61 -61
  13. package/dist/agents/agent-lookup.d.ts +53 -0
  14. package/dist/agents/agent-lookup.js +187 -0
  15. package/dist/agents/agents.controller.d.ts +1 -1
  16. package/dist/agents/agents.controller.js +14 -8
  17. package/dist/agents/agents.module.d.ts +7 -0
  18. package/dist/agents/agents.module.js +41 -0
  19. package/dist/agents/agents.service.d.ts +39 -58
  20. package/dist/agents/agents.service.js +280 -335
  21. package/dist/agents/definition.d.ts +39 -8
  22. package/dist/agents/definition.js +201 -17
  23. package/dist/agents/models.controller.d.ts +1 -1
  24. package/dist/agents/models.controller.js +2 -2
  25. package/dist/agents/templates.controller.d.ts +1 -1
  26. package/dist/agents/templates.controller.js +2 -2
  27. package/dist/agents/templates.d.ts +6 -8
  28. package/dist/agents/templates.js +39 -8
  29. package/dist/app.d.ts +93 -0
  30. package/dist/app.js +150 -0
  31. package/dist/catalog/admin-catalog.controller.d.ts +3 -3
  32. package/dist/catalog/admin-catalog.controller.js +27 -13
  33. package/dist/catalog/catalog-content.d.ts +185 -0
  34. package/dist/catalog/catalog-content.js +326 -0
  35. package/dist/catalog/catalog-items.d.ts +186 -0
  36. package/dist/catalog/catalog-items.js +410 -0
  37. package/dist/catalog/catalog.module.d.ts +14 -0
  38. package/dist/catalog/catalog.module.js +71 -0
  39. package/dist/catalog/catalog.service.d.ts +34 -188
  40. package/dist/catalog/catalog.service.js +155 -489
  41. package/dist/catalog/claude/agents.js +13 -10
  42. package/dist/catalog/cli.d.ts +3 -2
  43. package/dist/catalog/cli.js +13 -31
  44. package/dist/catalog/job-ids.d.ts +15 -0
  45. package/dist/catalog/job-ids.js +15 -0
  46. package/dist/catalog/jobs.d.ts +27 -0
  47. package/dist/catalog/jobs.js +70 -0
  48. package/dist/catalog/locks.d.ts +24 -0
  49. package/dist/catalog/locks.js +63 -0
  50. package/dist/catalog/marketplaces.controller.d.ts +4 -4
  51. package/dist/catalog/marketplaces.controller.js +22 -11
  52. package/dist/catalog/marketplaces.service.d.ts +31 -14
  53. package/dist/catalog/marketplaces.service.js +330 -256
  54. package/dist/catalog/org-catalog.controller.d.ts +4 -3
  55. package/dist/catalog/org-catalog.controller.js +29 -14
  56. package/dist/catalog/org-catalog.service.d.ts +32 -198
  57. package/dist/catalog/org-catalog.service.js +159 -400
  58. package/dist/catalog/plugin-import.d.ts +73 -34
  59. package/dist/catalog/plugin-import.js +356 -217
  60. package/dist/catalog/plugin-install.d.ts +83 -41
  61. package/dist/catalog/plugin-install.js +421 -269
  62. package/dist/catalog/plugin-upgrade.d.ts +59 -4
  63. package/dist/catalog/plugin-upgrade.js +407 -282
  64. package/dist/catalog/requests.service.d.ts +27 -15
  65. package/dist/catalog/requests.service.js +201 -145
  66. package/dist/catalog/upgrade-targets.d.ts +4 -7
  67. package/dist/channels/actions.d.ts +6 -4
  68. package/dist/channels/actions.js +1 -1
  69. package/dist/channels/cards.d.ts +10 -4
  70. package/dist/channels/cards.js +16 -8
  71. package/dist/channels/channels.module.d.ts +40 -0
  72. package/dist/channels/channels.module.js +128 -0
  73. package/dist/channels/connections.controller.d.ts +1 -1
  74. package/dist/channels/connections.controller.js +11 -6
  75. package/dist/channels/connections.service.d.ts +43 -21
  76. package/dist/channels/connections.service.js +236 -131
  77. package/dist/channels/inbound.d.ts +34 -38
  78. package/dist/channels/inbound.js +107 -41
  79. package/dist/channels/job-ids.d.ts +10 -0
  80. package/dist/channels/job-ids.js +10 -0
  81. package/dist/channels/jobs.d.ts +85 -0
  82. package/dist/channels/jobs.js +157 -0
  83. package/dist/channels/outbound.d.ts +60 -82
  84. package/dist/channels/outbound.js +165 -194
  85. package/dist/channels/supervisor.d.ts +88 -46
  86. package/dist/channels/supervisor.js +230 -132
  87. package/dist/channels/threads.d.ts +29 -8
  88. package/dist/channels/threads.js +71 -13
  89. package/dist/channels/webhook.d.ts +20 -14
  90. package/dist/channels/webhook.js +51 -20
  91. package/dist/config/load.d.ts +3 -2
  92. package/dist/config/load.js +3 -2
  93. package/dist/config/nacos-source.js +11 -2
  94. package/dist/config/schema.d.ts +1 -0
  95. package/dist/config/schema.js +12 -6
  96. package/dist/conversations/access.d.ts +29 -0
  97. package/dist/conversations/access.js +86 -0
  98. package/dist/conversations/artifacts.d.ts +11 -11
  99. package/dist/conversations/artifacts.js +36 -10
  100. package/dist/conversations/attachments.controller.d.ts +1 -1
  101. package/dist/conversations/attachments.controller.js +8 -6
  102. package/dist/conversations/attachments.module.d.ts +7 -0
  103. package/dist/conversations/attachments.module.js +25 -0
  104. package/dist/conversations/attachments.service.d.ts +30 -22
  105. package/dist/conversations/attachments.service.js +119 -46
  106. package/dist/conversations/conversations.controller.d.ts +8 -7
  107. package/dist/conversations/conversations.controller.js +59 -29
  108. package/dist/conversations/conversations.module.d.ts +8 -0
  109. package/dist/conversations/conversations.module.js +69 -0
  110. package/dist/conversations/conversations.service.d.ts +40 -38
  111. package/dist/conversations/conversations.service.js +130 -140
  112. package/dist/conversations/event-log.d.ts +39 -18
  113. package/dist/conversations/event-log.js +93 -27
  114. package/dist/conversations/events.d.ts +23 -3
  115. package/dist/conversations/events.js +26 -14
  116. package/dist/conversations/files.d.ts +10 -10
  117. package/dist/conversations/files.js +37 -11
  118. package/dist/conversations/idem-keys.d.ts +5 -0
  119. package/dist/conversations/idem-keys.js +5 -0
  120. package/dist/conversations/job-ids.d.ts +6 -0
  121. package/dist/conversations/job-ids.js +6 -0
  122. package/dist/conversations/outputs-read.d.ts +11 -11
  123. package/dist/conversations/outputs-read.js +31 -7
  124. package/dist/conversations/queue.d.ts +48 -56
  125. package/dist/conversations/queue.js +13 -289
  126. package/dist/conversations/queue.service.d.ts +60 -0
  127. package/dist/conversations/queue.service.js +343 -0
  128. package/dist/conversations/sandbox-status.d.ts +13 -10
  129. package/dist/conversations/sandbox-status.js +36 -8
  130. package/dist/conversations/titles.d.ts +71 -24
  131. package/dist/conversations/titles.js +159 -63
  132. package/dist/ctx/bus.js +9 -3
  133. package/dist/ctx/create-ctx.d.ts +6 -0
  134. package/dist/ctx/create-ctx.js +7 -9
  135. package/dist/ctx/lock.d.ts +7 -3
  136. package/dist/ctx/lock.js +9 -20
  137. package/dist/ctx/secrets.d.ts +10 -2
  138. package/dist/ctx/secrets.js +7 -3
  139. package/dist/db/kernel-schema.d.ts +4 -4
  140. package/dist/db/pool.d.ts +5 -0
  141. package/dist/db/pool.js +1 -0
  142. package/dist/errors.d.ts +1 -0
  143. package/dist/errors.js +1 -0
  144. package/dist/evals/budget.d.ts +42 -21
  145. package/dist/evals/budget.js +114 -62
  146. package/dist/evals/evals.module.d.ts +31 -0
  147. package/dist/evals/evals.module.js +114 -0
  148. package/dist/evals/jobs.d.ts +20 -0
  149. package/dist/evals/jobs.js +45 -0
  150. package/dist/evals/recorded-tools.d.ts +27 -1
  151. package/dist/evals/recorded-tools.js +85 -10
  152. package/dist/evals/run-replay.d.ts +61 -8
  153. package/dist/evals/run-replay.js +159 -85
  154. package/dist/evals/runs.controller.d.ts +1 -1
  155. package/dist/evals/runs.controller.js +17 -8
  156. package/dist/evals/runs.service.d.ts +23 -45
  157. package/dist/evals/runs.service.js +245 -234
  158. package/dist/evals/sets.controller.d.ts +1 -1
  159. package/dist/evals/sets.controller.js +17 -8
  160. package/dist/evals/sets.service.d.ts +22 -6
  161. package/dist/evals/sets.service.js +248 -194
  162. package/dist/evals/snapshot.d.ts +2 -2
  163. package/dist/evals/step-replay.d.ts +2 -2
  164. package/dist/evals/step-replay.js +1 -1
  165. package/dist/evals/trajectory.controller.d.ts +1 -1
  166. package/dist/evals/trajectory.controller.js +11 -7
  167. package/dist/evals/trajectory.d.ts +2 -2
  168. package/dist/evals/trajectory.service.d.ts +5 -4
  169. package/dist/evals/trajectory.service.js +30 -7
  170. package/dist/evals/worker.d.ts +44 -27
  171. package/dist/evals/worker.js +220 -121
  172. package/dist/extensions/admin-ops.d.ts +61 -33
  173. package/dist/extensions/admin-ops.js +248 -154
  174. package/dist/extensions/admin-view.d.ts +38 -27
  175. package/dist/extensions/admin-view.js +126 -55
  176. package/dist/extensions/approvals.d.ts +12 -8
  177. package/dist/extensions/approvals.js +73 -46
  178. package/dist/extensions/blobs.d.ts +27 -10
  179. package/dist/extensions/blobs.js +111 -45
  180. package/dist/extensions/bootstrap.d.ts +58 -31
  181. package/dist/extensions/bootstrap.js +175 -121
  182. package/dist/extensions/cli.d.ts +20 -10
  183. package/dist/extensions/cli.js +41 -96
  184. package/dist/extensions/config-issues.d.ts +7 -0
  185. package/dist/extensions/config-issues.js +31 -0
  186. package/dist/extensions/deployment-config-store.d.ts +49 -0
  187. package/dist/extensions/deployment-config-store.js +133 -0
  188. package/dist/extensions/deployment-config.d.ts +58 -67
  189. package/dist/extensions/deployment-config.js +202 -230
  190. package/dist/extensions/enabled.d.ts +5 -5
  191. package/dist/extensions/extensions.module.d.ts +8 -0
  192. package/dist/extensions/extensions.module.js +77 -0
  193. package/dist/extensions/hooks.d.ts +3 -2
  194. package/dist/extensions/hooks.js +1 -1
  195. package/dist/extensions/host.d.ts +72 -68
  196. package/dist/extensions/host.js +191 -152
  197. package/dist/extensions/installs.d.ts +49 -16
  198. package/dist/extensions/installs.js +128 -32
  199. package/dist/extensions/job-ids.d.ts +6 -0
  200. package/dist/extensions/job-ids.js +6 -0
  201. package/dist/extensions/lifecycle-topics.d.ts +18 -0
  202. package/dist/extensions/lifecycle-topics.js +18 -0
  203. package/dist/extensions/lifecycle.d.ts +35 -47
  204. package/dist/extensions/lifecycle.js +103 -39
  205. package/dist/extensions/locks.d.ts +33 -0
  206. package/dist/extensions/locks.js +86 -0
  207. package/dist/extensions/migrate-lock.d.ts +3 -4
  208. package/dist/extensions/org-config.controller.d.ts +1 -1
  209. package/dist/extensions/org-config.controller.js +8 -5
  210. package/dist/extensions/org-config.d.ts +48 -46
  211. package/dist/extensions/org-config.js +284 -226
  212. package/dist/extensions/registry.d.ts +50 -2
  213. package/dist/extensions/registry.js +89 -4
  214. package/dist/extensions/sources.d.ts +12 -8
  215. package/dist/extensions/sources.js +34 -13
  216. package/dist/files/files.module.d.ts +3 -0
  217. package/dist/files/files.module.js +22 -0
  218. package/dist/files/previewers.controller.d.ts +7 -2
  219. package/dist/files/previewers.controller.js +17 -9
  220. package/dist/files/previewers.d.ts +13 -18
  221. package/dist/files/previewers.js +83 -36
  222. package/dist/http/adapter.d.ts +3 -0
  223. package/dist/http/adapter.js +25 -0
  224. package/dist/http/api.module.d.ts +3 -110
  225. package/dist/http/api.module.js +47 -355
  226. package/dist/http/app.d.ts +11 -15
  227. package/dist/http/app.js +17 -62
  228. package/dist/http/error-filter.module.d.ts +5 -0
  229. package/dist/http/error-filter.module.js +18 -0
  230. package/dist/http/error.filter.js +2 -2
  231. package/dist/identity/accounts.d.ts +82 -29
  232. package/dist/identity/accounts.js +294 -175
  233. package/dist/identity/api-tokens.d.ts +11 -7
  234. package/dist/identity/api-tokens.js +71 -44
  235. package/dist/identity/audit.d.ts +7 -4
  236. package/dist/identity/audit.js +5 -1
  237. package/dist/identity/auth.controller.d.ts +11 -10
  238. package/dist/identity/auth.controller.js +31 -25
  239. package/dist/identity/auth.guard.d.ts +3 -3
  240. package/dist/identity/auth.guard.js +6 -4
  241. package/dist/identity/binding.d.ts +9 -11
  242. package/dist/identity/binding.js +41 -13
  243. package/dist/identity/enterprise-admin.d.ts +18 -12
  244. package/dist/identity/enterprise-admin.js +67 -13
  245. package/dist/identity/external-identity-lock.d.ts +17 -0
  246. package/dist/identity/external-identity-lock.js +39 -0
  247. package/dist/identity/external.d.ts +19 -15
  248. package/dist/identity/external.js +163 -125
  249. package/dist/identity/identity.module.d.ts +6 -0
  250. package/dist/identity/identity.module.js +56 -0
  251. package/dist/identity/me.controller.d.ts +16 -15
  252. package/dist/identity/me.controller.js +37 -31
  253. package/dist/identity/sessions.d.ts +12 -10
  254. package/dist/identity/sessions.js +74 -42
  255. package/dist/identity/settings.d.ts +20 -14
  256. package/dist/identity/settings.js +86 -58
  257. package/dist/identity/sso.controller.d.ts +7 -7
  258. package/dist/identity/sso.controller.js +13 -9
  259. package/dist/identity/sso.d.ts +9 -12
  260. package/dist/identity/sso.js +54 -24
  261. package/dist/inbox/inbox.module.d.ts +3 -0
  262. package/dist/inbox/inbox.module.js +22 -0
  263. package/dist/inbox/inbox.service.d.ts +7 -9
  264. package/dist/inbox/inbox.service.js +32 -11
  265. package/dist/index.d.ts +16 -11
  266. package/dist/index.js +9 -6
  267. package/dist/infra/cache/cache.module.d.ts +3 -0
  268. package/dist/infra/cache/cache.module.js +16 -0
  269. package/dist/infra/cache/cache.service.d.ts +21 -0
  270. package/dist/infra/cache/cache.service.js +80 -0
  271. package/dist/infra/cache/cacheable.decorator.d.ts +32 -0
  272. package/dist/infra/cache/cacheable.decorator.js +83 -0
  273. package/dist/infra/cli/kernel-cli.module.d.ts +66 -0
  274. package/dist/infra/cli/kernel-cli.module.js +165 -0
  275. package/dist/infra/close-within.d.ts +15 -0
  276. package/dist/infra/close-within.js +36 -0
  277. package/dist/infra/config/config.module.d.ts +13 -0
  278. package/dist/infra/config/config.module.js +39 -0
  279. package/dist/infra/config/kernel-config.service.d.ts +25 -0
  280. package/dist/infra/config/kernel-config.service.js +126 -0
  281. package/dist/infra/database/after-commit.d.ts +6 -0
  282. package/dist/infra/database/after-commit.js +9 -0
  283. package/dist/infra/database/database.module.d.ts +25 -0
  284. package/dist/infra/database/database.module.js +90 -0
  285. package/dist/infra/database/kernel-db.d.ts +22 -0
  286. package/dist/infra/database/kernel-db.js +65 -0
  287. package/dist/infra/database/transaction-host.d.ts +50 -0
  288. package/dist/infra/database/transaction-host.js +125 -0
  289. package/dist/infra/database/transactional.decorator.d.ts +15 -0
  290. package/dist/infra/database/transactional.decorator.js +27 -0
  291. package/dist/infra/database/xact-lock.d.ts +17 -0
  292. package/dist/infra/database/xact-lock.js +43 -0
  293. package/dist/infra/events/kernel-events.d.ts +96 -0
  294. package/dist/infra/events/kernel-events.js +65 -0
  295. package/dist/infra/health/health.controller.d.ts +26 -0
  296. package/dist/infra/health/health.controller.js +104 -0
  297. package/dist/infra/health/health.module.d.ts +9 -0
  298. package/dist/infra/health/health.module.js +24 -0
  299. package/dist/infra/health/health.options.d.ts +10 -0
  300. package/dist/infra/health/health.options.js +15 -0
  301. package/dist/infra/health/shutdown-state.d.ts +6 -0
  302. package/dist/infra/health/shutdown-state.js +2 -0
  303. package/dist/infra/lifecycle/graceful-shutdown.module.d.ts +6 -0
  304. package/dist/infra/lifecycle/graceful-shutdown.module.js +23 -0
  305. package/dist/infra/lifecycle/graceful-shutdown.service.d.ts +70 -0
  306. package/dist/infra/lifecycle/graceful-shutdown.service.js +135 -0
  307. package/dist/infra/lifecycle/process-guards.d.ts +52 -0
  308. package/dist/infra/lifecycle/process-guards.js +86 -0
  309. package/dist/infra/lifecycle/shutdown-signals.d.ts +30 -0
  310. package/dist/infra/lifecycle/shutdown-signals.js +48 -0
  311. package/dist/infra/lock/key-template.d.ts +13 -0
  312. package/dist/infra/lock/key-template.js +46 -0
  313. package/dist/infra/lock/lock.module.d.ts +3 -0
  314. package/dist/infra/lock/lock.module.js +16 -0
  315. package/dist/infra/lock/lock.service.d.ts +120 -0
  316. package/dist/infra/lock/lock.service.js +343 -0
  317. package/dist/infra/lock/shared-lease.d.ts +44 -0
  318. package/dist/infra/lock/shared-lease.js +121 -0
  319. package/dist/infra/lock/with-lock.decorator.d.ts +28 -0
  320. package/dist/infra/lock/with-lock.decorator.js +49 -0
  321. package/dist/infra/logging/logging.module.d.ts +16 -0
  322. package/dist/infra/logging/logging.module.js +34 -0
  323. package/dist/infra/queue/configured-processor.d.ts +18 -0
  324. package/dist/infra/queue/configured-processor.js +23 -0
  325. package/dist/infra/queue/job-failure.d.ts +18 -0
  326. package/dist/infra/queue/job-failure.js +26 -0
  327. package/dist/infra/queue/queue-shutdown.d.ts +27 -0
  328. package/dist/infra/queue/queue-shutdown.js +81 -0
  329. package/dist/infra/queue/queue.module.d.ts +16 -0
  330. package/dist/infra/queue/queue.module.js +61 -0
  331. package/dist/infra/queue/redis-connection.d.ts +7 -0
  332. package/dist/infra/queue/redis-connection.js +18 -0
  333. package/dist/infra/queue/retired-schedulers.d.ts +7 -0
  334. package/dist/infra/queue/retired-schedulers.js +9 -0
  335. package/dist/infra/queue/run-job.d.ts +16 -0
  336. package/dist/infra/queue/run-job.js +19 -0
  337. package/dist/infra/redis/redis.module.d.ts +24 -0
  338. package/dist/infra/redis/redis.module.js +87 -0
  339. package/dist/infra/schedule/cron-tick.d.ts +12 -0
  340. package/dist/infra/schedule/cron-tick.js +25 -0
  341. package/dist/infra/schedule/locked-cron.decorator.d.ts +27 -0
  342. package/dist/infra/schedule/locked-cron.decorator.js +53 -0
  343. package/dist/infra/schedule/locked-interval.d.ts +69 -0
  344. package/dist/infra/schedule/locked-interval.js +190 -0
  345. package/dist/infra/schedule/locked-tick.d.ts +90 -0
  346. package/dist/infra/schedule/locked-tick.js +137 -0
  347. package/dist/infra/schedule/schedule.module.d.ts +8 -0
  348. package/dist/infra/schedule/schedule.module.js +27 -0
  349. package/dist/infra/schedule/scheduled-runs.d.ts +69 -0
  350. package/dist/infra/schedule/scheduled-runs.js +163 -0
  351. package/dist/infra/swagger/swagger.d.ts +16 -0
  352. package/dist/infra/swagger/swagger.js +31 -0
  353. package/dist/infra/throttler/credential-throttler.d.ts +35 -0
  354. package/dist/infra/throttler/credential-throttler.js +77 -0
  355. package/dist/infra/throttler/named-throttlers.d.ts +31 -0
  356. package/dist/infra/throttler/named-throttlers.js +119 -0
  357. package/dist/infra/throttler/redis-throttler-storage.d.ts +38 -0
  358. package/dist/infra/throttler/redis-throttler-storage.js +130 -0
  359. package/dist/infra/throttler/throttler.guard.d.ts +23 -0
  360. package/dist/infra/throttler/throttler.guard.js +68 -0
  361. package/dist/infra/throttler/throttler.module.d.ts +15 -0
  362. package/dist/infra/throttler/throttler.module.js +53 -0
  363. package/dist/infra/tokens.d.ts +15 -0
  364. package/dist/infra/tokens.js +15 -0
  365. package/dist/infra/validation/create-zod-dto.d.ts +23 -0
  366. package/dist/infra/validation/create-zod-dto.js +35 -0
  367. package/dist/infra/validation/parse-with-zod.d.ts +7 -0
  368. package/dist/infra/validation/parse-with-zod.js +12 -0
  369. package/dist/infra/validation/validation.module.d.ts +3 -0
  370. package/dist/infra/validation/validation.module.js +16 -0
  371. package/dist/infra/validation/zod-params.d.ts +7 -0
  372. package/dist/infra/validation/zod-params.js +42 -0
  373. package/dist/infra/validation/zod-validation.pipe.d.ts +11 -0
  374. package/dist/infra/validation/zod-validation.pipe.js +31 -0
  375. package/dist/kernel.d.ts +9 -244
  376. package/dist/kernel.js +8 -1305
  377. package/dist/kernel.module.d.ts +17 -0
  378. package/dist/kernel.module.js +136 -0
  379. package/dist/lifecycle/kernel-lifecycle.d.ts +140 -0
  380. package/dist/lifecycle/kernel-lifecycle.js +456 -0
  381. package/dist/lifecycle/tokens.d.ts +3 -0
  382. package/dist/lifecycle/tokens.js +3 -0
  383. package/dist/log-context.d.ts +2 -0
  384. package/dist/log-context.js +4 -0
  385. package/dist/models/models.module.d.ts +3 -0
  386. package/dist/models/models.module.js +24 -0
  387. package/dist/models/prices.d.ts +8 -2
  388. package/dist/models/prices.js +65 -37
  389. package/dist/models/purposes.controller.d.ts +1 -1
  390. package/dist/models/purposes.controller.js +5 -6
  391. package/dist/models/purposes.d.ts +35 -13
  392. package/dist/models/purposes.js +101 -51
  393. package/dist/orgs/directory-sync.controller.d.ts +1 -1
  394. package/dist/orgs/directory-sync.controller.js +2 -2
  395. package/dist/orgs/directory-sync.d.ts +61 -31
  396. package/dist/orgs/directory-sync.js +212 -125
  397. package/dist/orgs/invitations.controller.d.ts +8 -8
  398. package/dist/orgs/invitations.controller.js +27 -26
  399. package/dist/orgs/invitations.service.d.ts +12 -9
  400. package/dist/orgs/invitations.service.js +130 -92
  401. package/dist/orgs/job-ids.d.ts +8 -0
  402. package/dist/orgs/job-ids.js +8 -0
  403. package/dist/orgs/members.service.d.ts +19 -12
  404. package/dist/orgs/members.service.js +161 -117
  405. package/dist/orgs/offboarding.d.ts +54 -57
  406. package/dist/orgs/offboarding.js +161 -71
  407. package/dist/orgs/org-lock.d.ts +28 -19
  408. package/dist/orgs/org-lock.js +81 -35
  409. package/dist/orgs/org.guard.d.ts +1 -1
  410. package/dist/orgs/org.guard.js +2 -2
  411. package/dist/orgs/orgs.controller.d.ts +13 -13
  412. package/dist/orgs/orgs.controller.js +29 -17
  413. package/dist/orgs/orgs.module.d.ts +6 -0
  414. package/dist/orgs/orgs.module.js +68 -0
  415. package/dist/orgs/orgs.service.d.ts +30 -19
  416. package/dist/orgs/orgs.service.js +139 -86
  417. package/dist/orgs/settings.controller.d.ts +1 -1
  418. package/dist/orgs/settings.controller.js +8 -6
  419. package/dist/orgs/settings.service.d.ts +16 -10
  420. package/dist/orgs/settings.service.js +77 -48
  421. package/dist/overrides.d.ts +56 -0
  422. package/dist/overrides.js +30 -0
  423. package/dist/roles/gateway-role.d.ts +43 -0
  424. package/dist/roles/gateway-role.js +98 -0
  425. package/dist/roles/gateway.module.d.ts +8 -0
  426. package/dist/roles/gateway.module.js +28 -0
  427. package/dist/roles/worker-role.d.ts +63 -0
  428. package/dist/roles/worker-role.js +144 -0
  429. package/dist/roles/worker.module.d.ts +14 -0
  430. package/dist/roles/worker.module.js +90 -0
  431. package/dist/runtime/abort.js +19 -2
  432. package/dist/runtime/checkpointer.d.ts +8 -3
  433. package/dist/runtime/checkpointer.js +87 -55
  434. package/dist/runtime/context/build.d.ts +6 -6
  435. package/dist/runtime/context/build.js +18 -8
  436. package/dist/runtime/context/claude-tools.d.ts +2 -1
  437. package/dist/runtime/context/claude-tools.js +9 -10
  438. package/dist/runtime/context/legacy-text.d.ts +22 -0
  439. package/dist/runtime/context/legacy-text.js +37 -0
  440. package/dist/runtime/context/skills.d.ts +29 -11
  441. package/dist/runtime/context/skills.js +37 -30
  442. package/dist/runtime/conversation-lock.d.ts +20 -11
  443. package/dist/runtime/conversation-lock.js +62 -72
  444. package/dist/runtime/hook-calls.d.ts +3 -3
  445. package/dist/runtime/hook-calls.js +1 -6
  446. package/dist/runtime/job-ids.d.ts +10 -0
  447. package/dist/runtime/job-ids.js +10 -0
  448. package/dist/runtime/langgraph-loop.js +1 -1
  449. package/dist/runtime/loop.d.ts +8 -1
  450. package/dist/runtime/loop.js +14 -0
  451. package/dist/runtime/maintenance-queue.d.ts +10 -0
  452. package/dist/runtime/maintenance-queue.js +10 -0
  453. package/dist/runtime/maintenance.d.ts +45 -74
  454. package/dist/runtime/maintenance.js +139 -137
  455. package/dist/runtime/model-call.d.ts +7 -4
  456. package/dist/runtime/model-call.js +25 -58
  457. package/dist/runtime/providers.d.ts +17 -6
  458. package/dist/runtime/providers.js +66 -25
  459. package/dist/runtime/quota.d.ts +17 -3
  460. package/dist/runtime/quota.js +27 -2
  461. package/dist/runtime/retired-schedulers.d.ts +7 -0
  462. package/dist/runtime/retired-schedulers.js +31 -0
  463. package/dist/runtime/run-control.d.ts +33 -0
  464. package/dist/runtime/run-control.js +77 -0
  465. package/dist/runtime/run-finish.d.ts +27 -18
  466. package/dist/runtime/run-finish.js +98 -51
  467. package/dist/runtime/run-jobs.d.ts +48 -0
  468. package/dist/runtime/run-jobs.js +95 -0
  469. package/dist/runtime/run-processors.d.ts +60 -0
  470. package/dist/runtime/run-processors.js +185 -0
  471. package/dist/runtime/run-queue.d.ts +32 -57
  472. package/dist/runtime/run-queue.js +291 -295
  473. package/dist/runtime/run-steps.d.ts +39 -0
  474. package/dist/runtime/run-steps.js +96 -0
  475. package/dist/runtime/run-worker.d.ts +122 -76
  476. package/dist/runtime/run-worker.js +343 -229
  477. package/dist/runtime/runtime.module.d.ts +10 -0
  478. package/dist/runtime/runtime.module.js +112 -0
  479. package/dist/runtime/step-log.d.ts +40 -0
  480. package/dist/runtime/step-log.js +94 -0
  481. package/dist/runtime/stream.controller.d.ts +5 -8
  482. package/dist/runtime/stream.controller.js +14 -12
  483. package/dist/runtime/stream.d.ts +24 -6
  484. package/dist/runtime/stream.js +78 -7
  485. package/dist/runtime/subagents/child.d.ts +3 -44
  486. package/dist/runtime/subagents/child.js +0 -79
  487. package/dist/runtime/subagents/definition.d.ts +5 -10
  488. package/dist/runtime/subagents/definition.js +13 -14
  489. package/dist/runtime/subagents/dispatch.d.ts +89 -8
  490. package/dist/runtime/subagents/dispatch.js +137 -142
  491. package/dist/runtime/subagents/limits.d.ts +9 -4
  492. package/dist/runtime/subagents/limits.js +4 -2
  493. package/dist/runtime/subagents/org-agents.d.ts +4 -4
  494. package/dist/runtime/subagents/org-agents.js +3 -2
  495. package/dist/runtime/subagents/progress.d.ts +2 -2
  496. package/dist/runtime/subagents/roster.d.ts +4 -4
  497. package/dist/runtime/subagents/roster.js +2 -2
  498. package/dist/runtime/subagents/skill-fork.d.ts +8 -9
  499. package/dist/runtime/subagents/skill-fork.js +17 -6
  500. package/dist/runtime/subagents/subagents.service.d.ts +40 -0
  501. package/dist/runtime/subagents/subagents.service.js +101 -0
  502. package/dist/runtime/usage-report.d.ts +94 -52
  503. package/dist/runtime/usage-report.js +200 -100
  504. package/dist/runtime/waits.d.ts +127 -59
  505. package/dist/runtime/waits.js +433 -210
  506. package/dist/sandbox/job-ids.d.ts +10 -0
  507. package/dist/sandbox/job-ids.js +10 -0
  508. package/dist/sandbox/jobs.d.ts +41 -0
  509. package/dist/sandbox/jobs.js +113 -0
  510. package/dist/sandbox/leases.d.ts +39 -31
  511. package/dist/sandbox/leases.js +117 -257
  512. package/dist/sandbox/providers.d.ts +19 -0
  513. package/dist/sandbox/providers.js +38 -0
  514. package/dist/sandbox/sandbox.module.d.ts +8 -0
  515. package/dist/sandbox/sandbox.module.js +30 -0
  516. package/dist/sandbox/sandbox.service.d.ts +24 -29
  517. package/dist/sandbox/sandbox.service.js +106 -75
  518. package/dist/skills/catalog.d.ts +37 -24
  519. package/dist/skills/catalog.js +100 -57
  520. package/dist/skills/changes.controller.d.ts +4 -4
  521. package/dist/skills/changes.controller.js +15 -9
  522. package/dist/skills/changes.service.d.ts +30 -20
  523. package/dist/skills/changes.service.js +425 -367
  524. package/dist/skills/invocable.controller.d.ts +1 -1
  525. package/dist/skills/invocable.controller.js +8 -5
  526. package/dist/skills/invocation-keys.d.ts +1 -1
  527. package/dist/skills/invocation-keys.js +1 -1
  528. package/dist/skills/invoke.d.ts +17 -16
  529. package/dist/skills/invoke.js +53 -21
  530. package/dist/skills/skills.controller.d.ts +1 -1
  531. package/dist/skills/skills.controller.js +11 -6
  532. package/dist/skills/skills.module.d.ts +6 -0
  533. package/dist/skills/skills.module.js +30 -0
  534. package/dist/skills/skills.service.d.ts +47 -30
  535. package/dist/skills/skills.service.js +221 -158
  536. package/dist/storage/job-ids.d.ts +6 -0
  537. package/dist/storage/job-ids.js +6 -0
  538. package/dist/storage/purge.d.ts +22 -7
  539. package/dist/storage/purge.js +55 -3
  540. package/dist/storage/storage.module.d.ts +6 -0
  541. package/dist/storage/storage.module.js +23 -0
  542. package/dist/storage/storage.service.d.ts +18 -4
  543. package/dist/storage/storage.service.js +44 -3
  544. package/dist/tools/approvals.controller.d.ts +1 -1
  545. package/dist/tools/approvals.controller.js +12 -8
  546. package/dist/tools/approvals.service.d.ts +33 -25
  547. package/dist/tools/approvals.service.js +343 -259
  548. package/dist/tools/breaker.d.ts +2 -2
  549. package/dist/tools/breaker.js +21 -3
  550. package/dist/tools/builtin-names.d.ts +73 -0
  551. package/dist/tools/builtin-names.js +116 -0
  552. package/dist/tools/builtins/agent.d.ts +7 -7
  553. package/dist/tools/builtins/agent.js +7 -11
  554. package/dist/tools/builtins/ask-user.d.ts +3 -3
  555. package/dist/tools/builtins/ask-user.js +3 -3
  556. package/dist/tools/builtins/builtin-tools.d.ts +21 -0
  557. package/dist/tools/builtins/builtin-tools.js +80 -0
  558. package/dist/tools/builtins/read-tool-output.d.ts +3 -3
  559. package/dist/tools/builtins/read-tool-output.js +3 -3
  560. package/dist/tools/builtins/sandbox/bash.d.ts +5 -5
  561. package/dist/tools/builtins/sandbox/bash.js +33 -30
  562. package/dist/tools/builtins/sandbox/common.d.ts +5 -4
  563. package/dist/tools/builtins/sandbox/common.js +2 -2
  564. package/dist/tools/builtins/sandbox/deliver.d.ts +1 -1
  565. package/dist/tools/builtins/sandbox/deliver.js +13 -13
  566. package/dist/tools/builtins/sandbox/edit.d.ts +1 -1
  567. package/dist/tools/builtins/sandbox/edit.js +42 -31
  568. package/dist/tools/builtins/sandbox/file-state.d.ts +34 -0
  569. package/dist/tools/builtins/sandbox/file-state.js +34 -0
  570. package/dist/tools/builtins/sandbox/glob-match.d.ts +1 -1
  571. package/dist/tools/builtins/sandbox/glob-match.js +1 -1
  572. package/dist/tools/builtins/sandbox/glob.d.ts +1 -1
  573. package/dist/tools/builtins/sandbox/glob.js +6 -6
  574. package/dist/tools/builtins/sandbox/grep.d.ts +7 -4
  575. package/dist/tools/builtins/sandbox/grep.js +149 -32
  576. package/dist/tools/builtins/sandbox/index.d.ts +1 -1
  577. package/dist/tools/builtins/sandbox/index.js +1 -1
  578. package/dist/tools/builtins/sandbox/read.d.ts +2 -2
  579. package/dist/tools/builtins/sandbox/read.js +22 -15
  580. package/dist/tools/builtins/sandbox/write.d.ts +1 -1
  581. package/dist/tools/builtins/sandbox/write.js +38 -34
  582. package/dist/tools/builtins/skill-load.d.ts +6 -6
  583. package/dist/tools/builtins/skill-load.js +33 -17
  584. package/dist/tools/builtins/skill-write.d.ts +4 -4
  585. package/dist/tools/builtins/skill-write.js +10 -10
  586. package/dist/tools/builtins/tool-search.d.ts +13 -9
  587. package/dist/tools/builtins/tool-search.js +25 -14
  588. package/dist/tools/canonical-json.d.ts +6 -0
  589. package/dist/tools/canonical-json.js +16 -0
  590. package/dist/tools/connector-content.controller.d.ts +1 -1
  591. package/dist/tools/connector-content.controller.js +11 -6
  592. package/dist/tools/connector-content.d.ts +12 -15
  593. package/dist/tools/connector-content.js +53 -18
  594. package/dist/tools/connectors.controller.d.ts +1 -1
  595. package/dist/tools/connectors.controller.js +21 -10
  596. package/dist/tools/connectors.service.d.ts +31 -13
  597. package/dist/tools/connectors.service.js +438 -348
  598. package/dist/tools/credentials.d.ts +17 -20
  599. package/dist/tools/credentials.js +55 -34
  600. package/dist/tools/display-names.d.ts +9 -0
  601. package/dist/tools/display-names.js +24 -0
  602. package/dist/tools/drift.d.ts +29 -41
  603. package/dist/tools/drift.js +116 -84
  604. package/dist/tools/elicitation.js +1 -1
  605. package/dist/tools/info.d.ts +32 -13
  606. package/dist/tools/info.js +88 -39
  607. package/dist/tools/job-ids.d.ts +13 -0
  608. package/dist/tools/job-ids.js +15 -0
  609. package/dist/tools/jobs.d.ts +24 -0
  610. package/dist/tools/jobs.js +69 -0
  611. package/dist/tools/legacy-data.d.ts +34 -0
  612. package/dist/tools/legacy-data.js +76 -0
  613. package/dist/tools/legacy-keys.d.ts +51 -0
  614. package/dist/tools/legacy-keys.js +115 -0
  615. package/dist/tools/naming.d.ts +1 -5
  616. package/dist/tools/naming.js +1 -7
  617. package/dist/tools/oauth/flow-paths.d.ts +16 -0
  618. package/dist/tools/oauth/flow-paths.js +38 -0
  619. package/dist/tools/oauth/flow.d.ts +30 -30
  620. package/dist/tools/oauth/flow.js +109 -81
  621. package/dist/tools/oauth/oauth.controller.d.ts +3 -3
  622. package/dist/tools/oauth/oauth.controller.js +12 -9
  623. package/dist/tools/oauth/tokens.d.ts +11 -3
  624. package/dist/tools/oauth/tokens.js +15 -14
  625. package/dist/tools/outputs.d.ts +13 -4
  626. package/dist/tools/outputs.js +48 -4
  627. package/dist/tools/pipeline.d.ts +72 -50
  628. package/dist/tools/pipeline.js +239 -100
  629. package/dist/tools/policy.d.ts +3 -16
  630. package/dist/tools/policy.js +13 -19
  631. package/dist/tools/questions.controller.d.ts +2 -2
  632. package/dist/tools/questions.controller.js +9 -6
  633. package/dist/tools/questions.service.d.ts +26 -25
  634. package/dist/tools/questions.service.js +201 -142
  635. package/dist/tools/registry.d.ts +43 -38
  636. package/dist/tools/registry.js +100 -72
  637. package/dist/tools/resources.d.ts +1 -1
  638. package/dist/tools/resources.js +1 -1
  639. package/dist/tools/specs.d.ts +5 -4
  640. package/dist/tools/specs.js +3 -1
  641. package/dist/tools/tools.module.d.ts +10 -0
  642. package/dist/tools/tools.module.js +91 -0
  643. package/dist/ui/call-extension.d.ts +16 -0
  644. package/dist/ui/call-extension.js +38 -0
  645. package/dist/ui/embed-token.d.ts +9 -5
  646. package/dist/ui/embed-token.js +34 -6
  647. package/dist/ui/ui-stream.d.ts +22 -17
  648. package/dist/ui/ui-stream.js +72 -12
  649. package/dist/ui/ui.module.d.ts +7 -0
  650. package/dist/ui/ui.module.js +28 -0
  651. package/dist/ui/views.controller.d.ts +14 -12
  652. package/dist/ui/views.controller.js +32 -25
  653. package/dist/ui/views.d.ts +9 -57
  654. package/dist/ui/views.js +43 -45
  655. package/package.json +10 -3
  656. package/src/migrations/0063_tool_keys_claude_code.sql +220 -0
  657. package/dist/http/health.controller.d.ts +0 -26
  658. package/dist/http/health.controller.js +0 -79
  659. package/dist/http/tokens.d.ts +0 -131
  660. package/dist/http/tokens.js +0 -131
  661. package/dist/http/zod.pipe.d.ts +0 -8
  662. package/dist/http/zod.pipe.js +0 -14
  663. package/dist/identity/rate-limit.d.ts +0 -55
  664. package/dist/identity/rate-limit.js +0 -121
  665. package/dist/sandbox/lifecycle.d.ts +0 -21
  666. package/dist/sandbox/lifecycle.js +0 -68
  667. package/dist/tools/builtins/sandbox/names.d.ts +0 -7
  668. package/dist/tools/builtins/sandbox/names.js +0 -20
  669. /package/dist/http/{gateway.module.d.ts → gateway-routes.d.ts} +0 -0
  670. /package/dist/http/{gateway.module.js → gateway-routes.js} +0 -0
package/dist/index.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  export { SetupService } from "./admin/setup.service.js";
2
+ export { closeKernelApp, createKernelApp, type KernelAppOptions, kernelAppHttp, kernelAppPort, startKernelApp, } from "./app.js";
2
3
  export { type CatalogCli, openCatalogCli } from "./catalog/cli.js";
3
4
  export { GitSourceError, type ReadGitTreeOptions, readGitTree, } from "./catalog/git-source.js";
4
5
  export type { PluginConfirmResult, PluginReview } from "./catalog/plugin-import.js";
@@ -19,23 +20,23 @@ export { createKv } from "./ctx/kv.js";
19
20
  export { createLock } from "./ctx/lock.js";
20
21
  export { createQueue } from "./ctx/queue.js";
21
22
  export { createKeyring, createSecrets, type DerivedKeys, type Keyring, rewrapDataKeys, } from "./ctx/secrets.js";
22
- export { type KernelDatabase, type KernelDb, kernelDb } from "./db/kernel-schema.js";
23
+ export { type KernelDatabase, type KernelSchemaDb, kernelDb } from "./db/kernel-schema.js";
23
24
  export { type MigrationOwner, migrate } from "./db/migrator.js";
24
25
  export { createDb } from "./db/pool.js";
25
26
  export { destructiveStatements, isDestructiveBody, isDestructiveSql, type SqlStatement, splitSqlStatements, } from "./db/sql-statements.js";
26
27
  export { ApiError, ERROR_CODES, type ErrorCode } from "./errors.js";
27
- export { ExtensionAdminOps, type ExtensionAdminOpsDeps } from "./extensions/admin-ops.js";
28
+ export { ExtensionAdminOps } from "./extensions/admin-ops.js";
28
29
  export { ExtensionAdmin, PLUGINS_CHANGED_TOPIC } from "./extensions/admin-view.js";
29
30
  export { type ApprovalDecision, ExtensionApprovals, type PendingExtension, type PermissionSnapshot, planApprovals, snapshotCovers, withPreApproved, } from "./extensions/approvals.js";
30
31
  export { blobKey, ExtensionBlobIntegrityError, type ExtensionBlobSource, ExtensionBlobs, } from "./extensions/blobs.js";
31
- export { BOOTSTRAP_MANIFEST_FILE, type BootstrapEntryResult, BootstrapFailedError, type BootstrapFailure, type BootstrapResolveOptions, type BootstrapResult, BootstrapService, type BootstrapServiceDeps, bootstrapManifestSha256, readBootstrapManifest, resolveBootstrapPackages, } from "./extensions/bootstrap.js";
32
+ export { BOOTSTRAP_MANIFEST_FILE, type BootstrapEntryResult, BootstrapFailedError, type BootstrapFailure, type BootstrapResolveOptions, type BootstrapResult, BootstrapService, bootstrapManifestSha256, readBootstrapManifest, resolveBootstrapPackages, } from "./extensions/bootstrap.js";
32
33
  export { type ExtensionCli, openExtensionCli } from "./extensions/cli.js";
33
34
  export { DEPLOYMENT_SECRETS_ORG, type DeploymentConfigField, type DeploymentConfigView, ExtensionDeploymentConfigService, mergeDeploymentConfig, PLUGIN_DEPLOYMENT_CONFIG_TOPIC, readStoredDeploymentConfig, } from "./extensions/deployment-config.js";
34
35
  export { assertSecretsReachable, ExtensionHost, type ExtensionLoadPlan, type InspectedExtension, type InstalledExtensionLoader, type InstallFailureReason, } from "./extensions/host.js";
35
36
  export { ExtensionUnloadedError, type InflightEntry, InflightTracker, PLUGIN_UNLOADED_TOOL_ERROR, type TrackOptions, trackCalls, } from "./extensions/inflight.js";
36
37
  export { type DesiredExtension, type ExtensionInstallRow, ExtensionInstalls, type IngestSource, type PackageReview, } from "./extensions/installs.js";
37
38
  export { DEFAULT_DISPOSE_TIMEOUT_MS, type DisposeOptions, ExtensionInstance, ImportTracker, type LoadDeps, loadInstance, ManifestMismatchError, type Registration, type RegistrationKind, UPGRADE_WARN_THRESHOLD, } from "./extensions/instance.js";
38
- export { ExtensionLifecycle, type ExtensionLifecycleDeps, type LifecycleHost, PLUGINS_RECONCILE_JOB, PLUGINS_RECONCILE_TOPIC, } from "./extensions/lifecycle.js";
39
+ export { ExtensionLifecycle, PLUGINS_RECONCILE_JOB, PLUGINS_RECONCILE_TOPIC, } from "./extensions/lifecycle.js";
39
40
  export { ensureMigrated, MIGRATE_LOCK_PREFIX, type MigrateLockDeps, PLUGINS_MIGRATED_TOPIC, unrunMigrations, } from "./extensions/migrate-lock.js";
40
41
  export { EXTENSION_PACKAGE_LIMITS, type ExtensionPackage, ExtensionPackageError, type ExtensionPackageLimits, type ExtensionPackageSection, extractExtensionPackage, HOST_ZOD_VERSION, permissionSetOfPackage, type ReadExtensionPackageOptions, readExtensionPackage, } from "./extensions/package.js";
41
42
  export { blockingKeys, computePermissionSet, diffPermissions, type PermissionSet, permissionKeys, WARNINGS_KEY_PREFIX, } from "./extensions/permission-set.js";
@@ -44,26 +45,30 @@ export { ExtensionRegistry } from "./extensions/registry.js";
44
45
  export { ExtensionResolveError, resolveExtensions } from "./extensions/resolve.js";
45
46
  export { type ExtensionLoadStatus, type ExtensionSource, newReplicaId, type PendingReason, ReplicaStatusStore, } from "./extensions/sources.js";
46
47
  export { syncPackage } from "./extensions/sync.js";
47
- export { type CreateHttpAppOptions, createHttpApp, type HealthOptions, type KernelHttp, type KernelHttpApp, } from "./http/app.js";
48
- export { type Account, AccountsService } from "./identity/accounts.js";
48
+ export type { KernelHttp, KernelHttpApp } from "./http/app.js";
49
+ export { type Account, AccountsModule, AccountsService } from "./identity/accounts.js";
49
50
  export { type ApiTokenRecord, ApiTokenService } from "./identity/api-tokens.js";
50
51
  export { audit } from "./identity/audit.js";
51
52
  export { normalizeLogin, validatePassword } from "./identity/login.js";
52
53
  export { DUMMY_PASSWORD_HASH, hashPassword, verifyPassword } from "./identity/passwords.js";
53
54
  export { type IssuedSession, REFRESH_RACE_GRACE_MS, SessionService, } from "./identity/sessions.js";
54
55
  export { DEPLOYMENT_SETTINGS, type DeploymentSettings, SettingsService, } from "./identity/settings.js";
55
- export { createKernel, KERNEL_MIGRATIONS_DIR, KERNEL_SCHEMA, type Kernel, type KernelOptions, type KernelRuns, migrateAll, } from "./kernel.js";
56
+ export { type KernelCliOptions, openKernelCli, openKernelCliOverPool, } from "./infra/cli/kernel-cli.module.js";
57
+ export { GUARD_CIRCUIT_LIMIT, GUARD_CIRCUIT_WINDOW_MS, installProcessGuards, type ProcessGuardDeps, } from "./infra/lifecycle/process-guards.js";
58
+ export { handleShutdownSignals, type ShutdownSignalHandle, type ShutdownSignalOptions, } from "./infra/lifecycle/shutdown-signals.js";
59
+ export { KERNEL_MIGRATIONS_DIR, KERNEL_SCHEMA, migrateAll } from "./kernel.js";
56
60
  export { createLogger, type KernelLogger, LOG_FORMATS, LOG_LEVELS, type LogFormat, type LoggerOptions, type LogLevel, type LogOutput, } from "./log.js";
57
61
  export { createConfiguredLogger, loggerOptionsFromConfig } from "./log-config.js";
58
62
  export { type ContextJob, type JobWrapper, type LogContext, logContext, setJobWrapper, setTraceContextSource, withJobContext, withLogContext, } from "./log-context.js";
59
63
  export { type Org, OrgsService } from "./orgs/orgs.service.js";
64
+ export type { KernelOverride } from "./overrides.js";
60
65
  export { fetchNpmPackage, IntegrityMismatchError, type NpmFetchConfig, NpmFetchError, PackageTooLargeError, } from "./packages/npm.js";
61
66
  export { UNKNOWN_RESULT_TEXT } from "./runtime/context/pairing.js";
62
67
  export type { AgentLoop, LoopContext, LoopOutcome } from "./runtime/loop.js";
63
- export { MAINTENANCE_QUEUE_NAME } from "./runtime/maintenance.js";
68
+ export { MAINTENANCE_QUEUE_NAME } from "./runtime/maintenance-queue.js";
64
69
  export { runJobId } from "./runtime/run-queue.js";
65
- export { SANDBOX_DESTROY_JOB, SANDBOX_SUSPEND_JOB, } from "./sandbox/lifecycle.js";
66
- export { SANDBOX_LOCK_TTL_MS, SandboxService, type SandboxServiceDeps, type SandboxUseInfo, } from "./sandbox/sandbox.service.js";
70
+ export { SANDBOX_DESTROY_JOB, SANDBOX_SUSPEND_JOB, } from "./sandbox/jobs.js";
71
+ export { SANDBOX_LOCK_TTL_MS, SandboxService, type SandboxUseInfo, } from "./sandbox/sandbox.service.js";
67
72
  export { MAX_STORAGE_KEY_BYTES, StorageKeyError, } from "./storage/prefix.js";
68
- export { StorageService, type StorageServiceDeps } from "./storage/storage.service.js";
73
+ export { PrefixedStorage, StorageService, type StorageSource, } from "./storage/storage.service.js";
69
74
  export { SANDBOX_RECREATED_NOTICE, SANDBOX_STARTED_NOTICE, } from "./tools/builtins/sandbox/common.js";
package/dist/index.js CHANGED
@@ -1,4 +1,5 @@
1
1
  export { SetupService } from "./admin/setup.service.js";
2
+ export { closeKernelApp, createKernelApp, kernelAppHttp, kernelAppPort, startKernelApp, } from "./app.js";
2
3
  export { openCatalogCli } from "./catalog/cli.js";
3
4
  // The git reader marketplaces use; core's check:bootstrap reads the official marketplace with it.
4
5
  export { GitSourceError, readGitTree, } from "./catalog/git-source.js";
@@ -43,25 +44,27 @@ export { ExtensionRegistry } from "./extensions/registry.js";
43
44
  export { ExtensionResolveError, resolveExtensions } from "./extensions/resolve.js";
44
45
  export { newReplicaId, ReplicaStatusStore, } from "./extensions/sources.js";
45
46
  export { syncPackage } from "./extensions/sync.js";
46
- export { createHttpApp, } from "./http/app.js";
47
- export { AccountsService } from "./identity/accounts.js";
47
+ export { AccountsModule, AccountsService } from "./identity/accounts.js";
48
48
  export { ApiTokenService } from "./identity/api-tokens.js";
49
49
  export { audit } from "./identity/audit.js";
50
50
  export { normalizeLogin, validatePassword } from "./identity/login.js";
51
51
  export { DUMMY_PASSWORD_HASH, hashPassword, verifyPassword } from "./identity/passwords.js";
52
52
  export { REFRESH_RACE_GRACE_MS, SessionService, } from "./identity/sessions.js";
53
53
  export { DEPLOYMENT_SETTINGS, SettingsService, } from "./identity/settings.js";
54
- export { createKernel, KERNEL_MIGRATIONS_DIR, KERNEL_SCHEMA, migrateAll, } from "./kernel.js";
54
+ export { openKernelCli, openKernelCliOverPool, } from "./infra/cli/kernel-cli.module.js";
55
+ export { GUARD_CIRCUIT_LIMIT, GUARD_CIRCUIT_WINDOW_MS, installProcessGuards, } from "./infra/lifecycle/process-guards.js";
56
+ export { handleShutdownSignals, } from "./infra/lifecycle/shutdown-signals.js";
57
+ export { KERNEL_MIGRATIONS_DIR, KERNEL_SCHEMA, migrateAll } from "./kernel.js";
55
58
  export { createLogger, LOG_FORMATS, LOG_LEVELS, } from "./log.js";
56
59
  export { createConfiguredLogger, loggerOptionsFromConfig } from "./log-config.js";
57
60
  export { logContext, setJobWrapper, setTraceContextSource, withJobContext, withLogContext, } from "./log-context.js";
58
61
  export { OrgsService } from "./orgs/orgs.service.js";
59
62
  export { fetchNpmPackage, IntegrityMismatchError, NpmFetchError, PackageTooLargeError, } from "./packages/npm.js";
60
63
  export { UNKNOWN_RESULT_TEXT } from "./runtime/context/pairing.js";
61
- export { MAINTENANCE_QUEUE_NAME } from "./runtime/maintenance.js";
64
+ export { MAINTENANCE_QUEUE_NAME } from "./runtime/maintenance-queue.js";
62
65
  export { runJobId } from "./runtime/run-queue.js";
63
- export { SANDBOX_DESTROY_JOB, SANDBOX_SUSPEND_JOB, } from "./sandbox/lifecycle.js";
66
+ export { SANDBOX_DESTROY_JOB, SANDBOX_SUSPEND_JOB, } from "./sandbox/jobs.js";
64
67
  export { SANDBOX_LOCK_TTL_MS, SandboxService, } from "./sandbox/sandbox.service.js";
65
68
  export { MAX_STORAGE_KEY_BYTES, StorageKeyError, } from "./storage/prefix.js";
66
- export { StorageService } from "./storage/storage.service.js";
69
+ export { PrefixedStorage, StorageService, } from "./storage/storage.service.js";
67
70
  export { SANDBOX_RECREATED_NOTICE, SANDBOX_STARTED_NOTICE, } from "./tools/builtins/sandbox/common.js";
@@ -0,0 +1,3 @@
1
+ /** Global: `CacheService` (and the `@Cacheable` / `@CacheEvict` decorators, which read it from `this.cacheService`). */
2
+ export declare class CacheModule {
3
+ }
@@ -0,0 +1,16 @@
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 { Global, Module } from "@nestjs/common";
8
+ import { CacheService } from "./cache.service.js";
9
+ /** Global: `CacheService` (and the `@Cacheable` / `@CacheEvict` decorators, which read it from `this.cacheService`). */
10
+ let CacheModule = class CacheModule {
11
+ };
12
+ CacheModule = __decorate([
13
+ Global(),
14
+ Module({ providers: [CacheService], exports: [CacheService] })
15
+ ], CacheModule);
16
+ export { CacheModule };
@@ -0,0 +1,21 @@
1
+ import type { Redis } from "ioredis";
2
+ import type { KernelLogger } from "../../log.js";
3
+ /** Stored instead of a value when a method returned null and `cacheNull` is set. */
4
+ export declare const CACHE_NULL_SENTINEL = "__CACHE_NULL__";
5
+ /**
6
+ * Redis access of `@Cacheable` / `@CacheEvict`. Every operation fails open: a Redis error is
7
+ * logged at warn and behaves like a miss (read) or a no-op (write, delete); it never throws.
8
+ */
9
+ export declare class CacheService {
10
+ private readonly redis;
11
+ private readonly log;
12
+ constructor(redis: Redis, log: KernelLogger);
13
+ /** The raw stored string under `cache:<key>`, or undefined on a miss or a Redis error. */
14
+ get(key: string): Promise<string | undefined>;
15
+ /** Stores `value` under `cache:<key>` with a TTL in seconds. */
16
+ set(key: string, value: string, ttlSeconds: number): Promise<void>;
17
+ /** Like `set`, serializing `value` as JSON; an unserializable value (bigint, cycle) is not cached. */
18
+ setJson(key: string, value: unknown, ttlSeconds: number): Promise<void>;
19
+ /** Deletes `cache:<key>`. */
20
+ del(key: string): Promise<void>;
21
+ }
@@ -0,0 +1,80 @@
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
+ // Ported from octok-platform libs/common/src/cache/cacheable.decorator.ts (owner-approved, 2026-10-28).
11
+ // Adapted: an injectable service over the shared Redis connection that fails open.
12
+ import { Inject, Injectable } from "@nestjs/common";
13
+ import { KERNEL_LOGGER, REDIS } from "../tokens.js";
14
+ /** Stored instead of a value when a method returned null and `cacheNull` is set. */
15
+ export const CACHE_NULL_SENTINEL = "__CACHE_NULL__";
16
+ const prefixed = (key) => (key.startsWith("cache:") ? key : `cache:${key}`);
17
+ /**
18
+ * Redis access of `@Cacheable` / `@CacheEvict`. Every operation fails open: a Redis error is
19
+ * logged at warn and behaves like a miss (read) or a no-op (write, delete); it never throws.
20
+ */
21
+ let CacheService = class CacheService {
22
+ redis;
23
+ log;
24
+ constructor(redis, log) {
25
+ this.redis = redis;
26
+ this.log = log;
27
+ }
28
+ /** The raw stored string under `cache:<key>`, or undefined on a miss or a Redis error. */
29
+ async get(key) {
30
+ const cacheKey = prefixed(key);
31
+ try {
32
+ return (await this.redis.get(cacheKey)) ?? undefined;
33
+ }
34
+ catch (err) {
35
+ this.log.warn("cache read failed, calling through", { cacheKey, err });
36
+ return undefined;
37
+ }
38
+ }
39
+ /** Stores `value` under `cache:<key>` with a TTL in seconds. */
40
+ async set(key, value, ttlSeconds) {
41
+ const cacheKey = prefixed(key);
42
+ try {
43
+ await this.redis.set(cacheKey, value, "EX", ttlSeconds);
44
+ }
45
+ catch (err) {
46
+ this.log.warn("cache write failed, result not cached", { cacheKey, err });
47
+ }
48
+ }
49
+ /** Like `set`, serializing `value` as JSON; an unserializable value (bigint, cycle) is not cached. */
50
+ async setJson(key, value, ttlSeconds) {
51
+ let json;
52
+ try {
53
+ json = JSON.stringify(value);
54
+ }
55
+ catch (err) {
56
+ this.log.warn("cache value not serializable, result not cached", {
57
+ cacheKey: prefixed(key),
58
+ err,
59
+ });
60
+ return;
61
+ }
62
+ await this.set(key, json, ttlSeconds);
63
+ }
64
+ /** Deletes `cache:<key>`. */
65
+ async del(key) {
66
+ const cacheKey = prefixed(key);
67
+ try {
68
+ await this.redis.del(cacheKey);
69
+ }
70
+ catch (err) {
71
+ this.log.warn("cache eviction failed", { cacheKey, err });
72
+ }
73
+ }
74
+ };
75
+ CacheService = __decorate([
76
+ Injectable(),
77
+ __param(0, Inject(REDIS)),
78
+ __param(1, Inject(KERNEL_LOGGER))
79
+ ], CacheService);
80
+ export { CacheService };
@@ -0,0 +1,32 @@
1
+ export interface CacheableOptions {
2
+ /**
3
+ * Cache key; `cache:` is prepended unless present. Placeholders expand from the method
4
+ * arguments: `#{0}`, `#{1.book.title}`, `#{user.id}` (= `#{0.user.id}`).
5
+ */
6
+ key: string;
7
+ /** Lifetime in seconds (default 300). */
8
+ ttl?: number;
9
+ /** Also cache a null / undefined result, as a sentinel (default false). */
10
+ cacheNull?: boolean;
11
+ }
12
+ /**
13
+ * Method decorator: caches the JSON-serializable result in Redis (like Spring's `@Cacheable`).
14
+ * A hit returns the parsed value without calling the method; Redis errors call the method. Inside a
15
+ * transaction the cache is bypassed (neither read nor written): the method may read rows the
16
+ * transaction wrote, which other callers must not see before the commit, or a cached value older
17
+ * than them. The class must inject `@Inject(CacheService) readonly cacheService: CacheService`.
18
+ */
19
+ export declare function Cacheable(options: CacheableOptions): (_target: object, _key: string | symbol, descriptor: PropertyDescriptor) => PropertyDescriptor;
20
+ export interface CacheEvictOptions {
21
+ /** One key to evict (same placeholders as `@Cacheable`). */
22
+ key?: string;
23
+ /** Several keys; `#{result}` / `#{result.id}` read the method's return value. */
24
+ keys?: string[];
25
+ }
26
+ /**
27
+ * Method decorator: evicts cache keys after the method succeeded (nothing is evicted when it
28
+ * throws). Inside a transaction the keys are evicted after its COMMIT (`afterCommit`; nothing on a
29
+ * rollback): evicted earlier, a reader could cache the old rows again before the commit. The class
30
+ * must inject `@Inject(CacheService) readonly cacheService: CacheService`.
31
+ */
32
+ export declare function CacheEvict(options: CacheEvictOptions): (_target: object, _key: string | symbol, descriptor: PropertyDescriptor) => PropertyDescriptor;
@@ -0,0 +1,83 @@
1
+ // Ported from octok-platform libs/common/src/cache/cacheable.decorator.ts (owner-approved, 2026-10-28).
2
+ // Adapted: the CacheService comes from the `cacheService` property, as `@Transactional` reads
3
+ // `txHost` and `@WithLock` reads `lockService`; Redis errors fail open (see CacheService).
4
+ import { afterCommit } from "../database/after-commit.js";
5
+ import { currentStore } from "../database/transaction-host.js";
6
+ import { generateKey } from "../lock/key-template.js";
7
+ import { CACHE_NULL_SENTINEL } from "./cache.service.js";
8
+ function serviceOf(self, decorator) {
9
+ if (!self.cacheService) {
10
+ throw new Error(`${decorator}() needs the class to inject \`CacheService\` as \`cacheService\` ` +
11
+ "(`@Inject(CacheService) readonly cacheService: CacheService`).");
12
+ }
13
+ return self.cacheService;
14
+ }
15
+ /**
16
+ * Method decorator: caches the JSON-serializable result in Redis (like Spring's `@Cacheable`).
17
+ * A hit returns the parsed value without calling the method; Redis errors call the method. Inside a
18
+ * transaction the cache is bypassed (neither read nor written): the method may read rows the
19
+ * transaction wrote, which other callers must not see before the commit, or a cached value older
20
+ * than them. The class must inject `@Inject(CacheService) readonly cacheService: CacheService`.
21
+ */
22
+ export function Cacheable(options) {
23
+ return (_target, _key, descriptor) => {
24
+ const original = descriptor.value;
25
+ descriptor.value = async function (...args) {
26
+ const cache = serviceOf(this, "@Cacheable");
27
+ if (currentStore())
28
+ return original.apply(this, args);
29
+ const key = generateKey(options.key, args);
30
+ const cached = await cache.get(key);
31
+ if (cached === CACHE_NULL_SENTINEL && options.cacheNull)
32
+ return null;
33
+ if (cached !== undefined && cached !== CACHE_NULL_SENTINEL) {
34
+ try {
35
+ return JSON.parse(cached);
36
+ }
37
+ catch {
38
+ // An unreadable entry is a miss; it is overwritten below.
39
+ }
40
+ }
41
+ const result = await original.apply(this, args);
42
+ const ttl = options.ttl ?? 300;
43
+ if (result == null) {
44
+ if (options.cacheNull) {
45
+ await cache.set(key, CACHE_NULL_SENTINEL, ttl);
46
+ // A hit returns null, so a miss returns null too (never undefined).
47
+ return null;
48
+ }
49
+ }
50
+ else {
51
+ await cache.setJson(key, result, ttl);
52
+ }
53
+ return result;
54
+ };
55
+ return descriptor;
56
+ };
57
+ }
58
+ /**
59
+ * Method decorator: evicts cache keys after the method succeeded (nothing is evicted when it
60
+ * throws). Inside a transaction the keys are evicted after its COMMIT (`afterCommit`; nothing on a
61
+ * rollback): evicted earlier, a reader could cache the old rows again before the commit. The class
62
+ * must inject `@Inject(CacheService) readonly cacheService: CacheService`.
63
+ */
64
+ export function CacheEvict(options) {
65
+ return (_target, _key, descriptor) => {
66
+ const original = descriptor.value;
67
+ descriptor.value = async function (...args) {
68
+ const cache = serviceOf(this, "@CacheEvict");
69
+ const result = await original.apply(this, args);
70
+ const patterns = options.keys ?? (options.key ? [options.key] : []);
71
+ const evict = async () => {
72
+ for (const pattern of patterns)
73
+ await cache.del(generateKey(pattern, args, { result }));
74
+ };
75
+ if (currentStore())
76
+ afterCommit(evict);
77
+ else
78
+ await evict();
79
+ return result;
80
+ };
81
+ return descriptor;
82
+ };
83
+ }
@@ -0,0 +1,66 @@
1
+ import { type DynamicModule, type INestApplicationContext, type OnApplicationShutdown, type Type } from "@nestjs/common";
2
+ import { Redis } from "ioredis";
3
+ import type { Kysely } from "kysely";
4
+ import type { KernelConfig } from "../../config/schema.js";
5
+ import type { KernelLogger } from "../../log.js";
6
+ /** Closes the CLI's Redis connection with the context. */
7
+ export declare class CliRedisLifecycle implements OnApplicationShutdown {
8
+ private readonly redis;
9
+ constructor(redis: Redis);
10
+ onApplicationShutdown(): void;
11
+ }
12
+ /**
13
+ * The CLI's Redis: one lazy connection (a command that never touches Redis never connects), which
14
+ * keeps reconnecting while each command on a broken connection fails fast, and the publish-only
15
+ * kernel bus over it (`capybara extensions *` publish `kernel.plugins.changed`; the bootstrap step
16
+ * takes `lock:bootstrap`).
17
+ */
18
+ export declare class CliRedisModule {
19
+ }
20
+ export interface KernelCliOptions {
21
+ logger: KernelLogger;
22
+ /** Environment overrides (default `process.env`). */
23
+ env?: NodeJS.ProcessEnv;
24
+ /** The directory bare extension package names are resolved from. */
25
+ resolveFrom?: string;
26
+ /** The domain modules the command needs. */
27
+ modules: (Type | DynamicModule)[];
28
+ /**
29
+ * Whether the context has the CLI's Redis (connection, publish-only bus) and `LockService`
30
+ * (default true). `false` for the commands that only use PostgreSQL (`admin create`,
31
+ * `admin grant`): their context cannot reach Redis at all.
32
+ */
33
+ redis?: boolean;
34
+ }
35
+ /**
36
+ * The application context of a CLI command (decision R13 of the Nest kernel spec): the config
37
+ * loaded once (no watch), the logger, the database, the CLI's Redis, locks and in-process events,
38
+ * plus only the domain modules the command needs. Open it with {@link openKernelCli} and close it
39
+ * at the end of the command.
40
+ */
41
+ export declare class KernelCliModule {
42
+ static forRoot(config: KernelConfig, opts: KernelCliOptions): DynamicModule;
43
+ /**
44
+ * A context over a pool the caller owns, for code that has a pool and no config
45
+ * (`@capybara-hq/testing`'s `createLocalAccount`): the logger, the database handles over `pool`
46
+ * (never closed by the context), in-process events and the given modules. No config, no keyring,
47
+ * no Redis: only modules that need nothing more fit.
48
+ */
49
+ static overPool(pool: Kysely<any>, opts: {
50
+ logger: KernelLogger;
51
+ modules: (Type | DynamicModule)[];
52
+ }): DynamicModule;
53
+ }
54
+ /**
55
+ * Opens a CLI command's application context ({@link KernelCliModule.forRoot}); the caller closes
56
+ * it (`app.close()`: the pool, and the Redis connection when the context has one).
57
+ */
58
+ export declare function openKernelCli(config: KernelConfig, opts: KernelCliOptions): Promise<INestApplicationContext>;
59
+ /**
60
+ * Opens a context over a pool the caller owns ({@link KernelCliModule.overPool}); closing it
61
+ * leaves the pool open.
62
+ */
63
+ export declare function openKernelCliOverPool(pool: Kysely<any>, opts: {
64
+ logger: KernelLogger;
65
+ modules: (Type | DynamicModule)[];
66
+ }): Promise<INestApplicationContext>;
@@ -0,0 +1,165 @@
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
+ var KernelCliModule_1;
11
+ import { Global, Inject, Injectable, Module, } from "@nestjs/common";
12
+ import { NestFactory } from "@nestjs/core";
13
+ import { Redis } from "ioredis";
14
+ import { createBus } from "../../ctx/bus.js";
15
+ import { KERNEL_APP_OPTIONS } from "../../lifecycle/tokens.js";
16
+ import { ConfigModule } from "../config/config.module.js";
17
+ import { KernelConfigService } from "../config/kernel-config.service.js";
18
+ import { DatabaseModule } from "../database/database.module.js";
19
+ import { KernelEventsModule } from "../events/kernel-events.js";
20
+ import { GracefulShutdownModule } from "../lifecycle/graceful-shutdown.module.js";
21
+ import { LockModule } from "../lock/lock.module.js";
22
+ import { LoggingModule } from "../logging/logging.module.js";
23
+ import { KERNEL_BUS, KERNEL_LOGGER, REDIS, REDIS_SUBSCRIBER } from "../tokens.js";
24
+ /** How long the CLI's Redis connection may take before a command fails (a publish only warns). */
25
+ const CLI_REDIS_CONNECT_TIMEOUT_MS = 3_000;
26
+ /**
27
+ * The cap of the reconnect backoff. The connection keeps reconnecting (a `capybara bootstrap`
28
+ * holding `lock:bootstrap` renews it again once Redis is back), while a command issued on a broken
29
+ * connection still fails after one reconnect attempt (`maxRetriesPerRequest: 1`).
30
+ */
31
+ const CLI_REDIS_MAX_BACKOFF_MS = 2_000;
32
+ /** The CLI subscribes to nothing: the kernel bus is publish-only there. */
33
+ const NO_SUBSCRIBER = {
34
+ subscribe: () => Promise.reject(new Error("the CLI does not subscribe")),
35
+ };
36
+ /** Closes the CLI's Redis connection with the context. */
37
+ let CliRedisLifecycle = class CliRedisLifecycle {
38
+ redis;
39
+ constructor(redis) {
40
+ this.redis = redis;
41
+ }
42
+ onApplicationShutdown() {
43
+ this.redis.disconnect();
44
+ }
45
+ };
46
+ CliRedisLifecycle = __decorate([
47
+ Injectable(),
48
+ __param(0, Inject(REDIS))
49
+ ], CliRedisLifecycle);
50
+ export { CliRedisLifecycle };
51
+ /**
52
+ * The CLI's Redis: one lazy connection (a command that never touches Redis never connects), which
53
+ * keeps reconnecting while each command on a broken connection fails fast, and the publish-only
54
+ * kernel bus over it (`capybara extensions *` publish `kernel.plugins.changed`; the bootstrap step
55
+ * takes `lock:bootstrap`).
56
+ */
57
+ let CliRedisModule = class CliRedisModule {
58
+ };
59
+ CliRedisModule = __decorate([
60
+ Global(),
61
+ Module({
62
+ providers: [
63
+ {
64
+ provide: REDIS,
65
+ inject: [KernelConfigService],
66
+ useFactory: (config) => {
67
+ const redis = new Redis(config.get().redis.url, {
68
+ lazyConnect: true,
69
+ connectTimeout: CLI_REDIS_CONNECT_TIMEOUT_MS,
70
+ maxRetriesPerRequest: 1,
71
+ retryStrategy: (times) => Math.min(times * 200, CLI_REDIS_MAX_BACKOFF_MS),
72
+ });
73
+ // a failed publish or lock surfaces where it is used; the CLI's output stays clean
74
+ redis.on("error", () => { });
75
+ return redis;
76
+ },
77
+ },
78
+ { provide: REDIS_SUBSCRIBER, useValue: NO_SUBSCRIBER },
79
+ {
80
+ provide: KERNEL_BUS,
81
+ inject: [REDIS, KERNEL_LOGGER],
82
+ useFactory: (redis, log) => createBus(redis, NO_SUBSCRIBER, "kernel", log),
83
+ },
84
+ CliRedisLifecycle,
85
+ ],
86
+ exports: [REDIS, REDIS_SUBSCRIBER, KERNEL_BUS],
87
+ })
88
+ ], CliRedisModule);
89
+ export { CliRedisModule };
90
+ /**
91
+ * The application context of a CLI command (decision R13 of the Nest kernel spec): the config
92
+ * loaded once (no watch), the logger, the database, the CLI's Redis, locks and in-process events,
93
+ * plus only the domain modules the command needs. Open it with {@link openKernelCli} and close it
94
+ * at the end of the command.
95
+ */
96
+ let KernelCliModule = KernelCliModule_1 = class KernelCliModule {
97
+ static forRoot(config, opts) {
98
+ const appOptions = {
99
+ logger: opts.logger,
100
+ ...(opts.env !== undefined && { env: opts.env }),
101
+ ...(opts.resolveFrom !== undefined && { resolveFrom: opts.resolveFrom }),
102
+ };
103
+ return {
104
+ module: KernelCliModule_1,
105
+ global: true,
106
+ imports: [
107
+ LoggingModule.forRoot(config, { logger: opts.logger }),
108
+ ConfigModule.forRoot(config, opts.env !== undefined ? { env: opts.env } : {}),
109
+ GracefulShutdownModule,
110
+ DatabaseModule.forRoot(),
111
+ ...(opts.redis === false ? [] : [CliRedisModule, LockModule]),
112
+ KernelEventsModule,
113
+ ...opts.modules,
114
+ ],
115
+ providers: [{ provide: KERNEL_APP_OPTIONS, useValue: appOptions }],
116
+ exports: [KERNEL_APP_OPTIONS],
117
+ };
118
+ }
119
+ /**
120
+ * A context over a pool the caller owns, for code that has a pool and no config
121
+ * (`@capybara-hq/testing`'s `createLocalAccount`): the logger, the database handles over `pool`
122
+ * (never closed by the context), in-process events and the given modules. No config, no keyring,
123
+ * no Redis: only modules that need nothing more fit.
124
+ */
125
+ static overPool(
126
+ // biome-ignore lint/suspicious/noExplicitAny: the pool carries no schema types
127
+ pool, opts) {
128
+ return {
129
+ module: KernelCliModule_1,
130
+ global: true,
131
+ imports: [
132
+ LoggingModule.forLogger(opts.logger),
133
+ DatabaseModule.borrowing(pool),
134
+ KernelEventsModule,
135
+ ...opts.modules,
136
+ ],
137
+ };
138
+ }
139
+ };
140
+ KernelCliModule = KernelCliModule_1 = __decorate([
141
+ Global(),
142
+ Module({})
143
+ // biome-ignore lint/complexity/noStaticOnlyClass: a Nest dynamic module
144
+ ], KernelCliModule);
145
+ export { KernelCliModule };
146
+ /** Creates a Nest application context of `module` the way every CLI context is created. */
147
+ function createCliContext(module) {
148
+ return NestFactory.createApplicationContext(module, { logger: false, abortOnError: false });
149
+ }
150
+ /**
151
+ * Opens a CLI command's application context ({@link KernelCliModule.forRoot}); the caller closes
152
+ * it (`app.close()`: the pool, and the Redis connection when the context has one).
153
+ */
154
+ export function openKernelCli(config, opts) {
155
+ return createCliContext(KernelCliModule.forRoot(config, opts));
156
+ }
157
+ /**
158
+ * Opens a context over a pool the caller owns ({@link KernelCliModule.overPool}); closing it
159
+ * leaves the pool open.
160
+ */
161
+ export function openKernelCliOverPool(
162
+ // biome-ignore lint/suspicious/noExplicitAny: the pool carries no schema types
163
+ pool, opts) {
164
+ return createCliContext(KernelCliModule.overPool(pool, opts));
165
+ }
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Waits for `p` at most `ms`: resolves true when it resolved in time, false when the time ran out
3
+ * (`p` keeps running; nothing is aborted). A rejection of `p` in time is thrown. The one "wait at
4
+ * most N ms" of the kernel's stop path.
5
+ */
6
+ export declare function waitWithin(p: Promise<unknown>, ms: number): Promise<boolean>;
7
+ /**
8
+ * Waits for an infra resource to close at shutdown (the bus subscriber, Redis, the pool) at most
9
+ * `budgetMs`, the share of the total stop budget left (`GracefulShutdown.remainingMs()`): a close
10
+ * that does not finish in time (Redis unreachable, a client never released) is abandoned with a
11
+ * warning, so the shutdown never hangs on it. Resolves true when `p` settled successfully in time.
12
+ */
13
+ export declare function closeWithin(label: string, p: Promise<unknown>, budgetMs: number, log: {
14
+ warn(msg: string, fields?: Record<string, unknown>): void;
15
+ }): Promise<boolean>;
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Waits for `p` at most `ms`: resolves true when it resolved in time, false when the time ran out
3
+ * (`p` keeps running; nothing is aborted). A rejection of `p` in time is thrown. The one "wait at
4
+ * most N ms" of the kernel's stop path.
5
+ */
6
+ export async function waitWithin(p, ms) {
7
+ let timer;
8
+ const timeout = new Promise((resolve) => {
9
+ timer = setTimeout(() => resolve(false), Math.max(0, ms));
10
+ timer.unref();
11
+ });
12
+ try {
13
+ return await Promise.race([p.then(() => true), timeout]);
14
+ }
15
+ finally {
16
+ clearTimeout(timer);
17
+ }
18
+ }
19
+ /**
20
+ * Waits for an infra resource to close at shutdown (the bus subscriber, Redis, the pool) at most
21
+ * `budgetMs`, the share of the total stop budget left (`GracefulShutdown.remainingMs()`): a close
22
+ * that does not finish in time (Redis unreachable, a client never released) is abandoned with a
23
+ * warning, so the shutdown never hangs on it. Resolves true when `p` settled successfully in time.
24
+ */
25
+ export async function closeWithin(label, p, budgetMs, log) {
26
+ try {
27
+ const done = await waitWithin(p, budgetMs);
28
+ if (!done)
29
+ log.warn("shutdown step timed out", { step: label });
30
+ return done;
31
+ }
32
+ catch (err) {
33
+ log.warn("shutdown step failed", { step: label, err });
34
+ return false;
35
+ }
36
+ }