@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
@@ -0,0 +1,145 @@
1
+ const PUSH_PATH = "/loki/api/v1/push";
2
+ const PUSH_TIMEOUT_MS = 10_000;
3
+ /** A batch is pushed right away once it reaches this many records. */
4
+ const BATCH_SIZE = 1_000;
5
+ const ERROR_NOTE_INTERVAL_MS = 60_000;
6
+ function pushUrl(url) {
7
+ const u = new URL(url);
8
+ if (!u.pathname.endsWith(PUSH_PATH))
9
+ u.pathname = `${u.pathname.replace(/\/+$/, "")}${PUSH_PATH}`;
10
+ return u;
11
+ }
12
+ /**
13
+ * Batches JSON log lines and POSTs them to Loki's push API (JSON body), one stream per level with
14
+ * the labels `{ job: "capybara", ...labels, role, level }`. Pushing never blocks or throws into the
15
+ * caller: a failed push drops its batch and is reported to `onError` at most once per minute; while
16
+ * Loki is down at most `maxBuffer` records are kept. The interval timer is unref'd.
17
+ */
18
+ export function createLokiStream(opts) {
19
+ const url = pushUrl(opts.url);
20
+ const intervalMs = opts.intervalMs ?? 2_000;
21
+ const maxBuffer = opts.maxBuffer ?? 10_000;
22
+ const now = opts.now ?? Date.now;
23
+ const onError = opts.onError ?? ((m) => void process.stderr.write(`capybara: ${m}\n`));
24
+ // the marker keeps these pushes out of HTTP client traces (apps/capybara tracing.ts)
25
+ const headers = {
26
+ "content-type": "application/json",
27
+ "x-capybara-log-push": "1",
28
+ };
29
+ if (opts.username !== undefined || opts.password !== undefined) {
30
+ const token = Buffer.from(`${opts.username ?? ""}:${opts.password ?? ""}`).toString("base64");
31
+ headers.authorization = `Basic ${token}`;
32
+ }
33
+ const baseLabels = { job: "capybara", ...opts.labels, role: opts.role };
34
+ let buffer = [];
35
+ let dropped = 0;
36
+ let inFlight;
37
+ let timer;
38
+ let lastNote = Number.NEGATIVE_INFINITY;
39
+ let closed = false;
40
+ /** Reports at most once a minute; `message` names the Loki origin only (a URL may carry credentials). */
41
+ const report = (message) => {
42
+ const t = now();
43
+ if (t - lastNote < ERROR_NOTE_INTERVAL_MS)
44
+ return;
45
+ lastNote = t;
46
+ onError(`${message}; further Loki errors are not reported for a minute`);
47
+ };
48
+ const note = (reason) => report(`cannot push logs to Loki at ${url.origin} (${reason}); records are dropped until it recovers`);
49
+ const pushBatch = async (batch, lost) => {
50
+ const streams = new Map();
51
+ for (const e of batch) {
52
+ const values = streams.get(e.level) ?? [];
53
+ values.push([e.ns, e.line]);
54
+ streams.set(e.level, values);
55
+ }
56
+ const body = JSON.stringify({
57
+ streams: [...streams].map(([level, values]) => ({
58
+ stream: { ...baseLabels, level },
59
+ values,
60
+ })),
61
+ });
62
+ try {
63
+ const res = await fetch(url, {
64
+ method: "POST",
65
+ headers,
66
+ body,
67
+ signal: AbortSignal.timeout(PUSH_TIMEOUT_MS),
68
+ });
69
+ await res.body?.cancel();
70
+ if (!res.ok)
71
+ note(`HTTP ${res.status}`);
72
+ else if (lost > 0) {
73
+ report(`${lost} log records for Loki at ${url.origin} were dropped: the buffer was full`);
74
+ }
75
+ }
76
+ catch (e) {
77
+ note(e instanceof Error ? (e.cause instanceof Error ? e.cause.message : e.message) : "error");
78
+ }
79
+ };
80
+ /** Starts a push of the current buffer unless one is in flight. */
81
+ const kick = () => {
82
+ if (inFlight || buffer.length === 0)
83
+ return inFlight ?? Promise.resolve();
84
+ const batch = buffer;
85
+ const lost = dropped;
86
+ buffer = [];
87
+ dropped = 0;
88
+ inFlight = pushBatch(batch, lost).finally(() => {
89
+ inFlight = undefined;
90
+ });
91
+ return inFlight;
92
+ };
93
+ const ensureTimer = () => {
94
+ if (timer || closed)
95
+ return;
96
+ timer = setInterval(() => void kick(), intervalMs);
97
+ timer.unref();
98
+ };
99
+ return {
100
+ write(chunk) {
101
+ for (const line of chunk.split("\n")) {
102
+ if (line === "")
103
+ continue;
104
+ let level = "info";
105
+ let ms = Date.now();
106
+ try {
107
+ const rec = JSON.parse(line);
108
+ if (typeof rec.level === "string")
109
+ level = rec.level;
110
+ if (typeof rec.time === "string") {
111
+ const t = Date.parse(rec.time);
112
+ if (!Number.isNaN(t))
113
+ ms = t;
114
+ }
115
+ }
116
+ catch {
117
+ // not JSON: push it as is
118
+ }
119
+ buffer.push({ level, ns: `${BigInt(ms) * 1000000n}`, line });
120
+ if (buffer.length > maxBuffer) {
121
+ buffer.shift();
122
+ dropped++;
123
+ }
124
+ }
125
+ ensureTimer();
126
+ if (buffer.length >= BATCH_SIZE)
127
+ void kick();
128
+ },
129
+ async flush() {
130
+ while (inFlight || buffer.length > 0) {
131
+ if (inFlight)
132
+ await inFlight;
133
+ else
134
+ await kick();
135
+ }
136
+ },
137
+ async close() {
138
+ closed = true;
139
+ if (timer)
140
+ clearInterval(timer);
141
+ timer = undefined;
142
+ await this.flush();
143
+ },
144
+ };
145
+ }
package/dist/log.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import type { Logger } from "@capybara-hq/plugin-sdk";
2
+ import { type LokiOptions } from "./log-loki.js";
2
3
  /** 日志级别,按严重程度递增。 */
3
4
  export declare const LOG_LEVELS: readonly ["debug", "info", "warn", "error"];
4
5
  /** 日志级别。 */
@@ -11,7 +12,7 @@ export interface KernelLogger extends Logger {
11
12
  setLevel(level: string): void;
12
13
  /**
13
14
  * 登记部署方(运维)给的密钥值:内核配置与插件部署级配置里的 secret 字段。此后日志消息与字段里出现这些值都替换为
14
- * `[REDACTED]`(顶层的 `ts` / `level` 不打码)。字符串与数字(转成字符串)登记,布尔不登记;
15
+ * `[REDACTED]`(顶层的 `time` / `level` 不打码)。字符串与数字(转成字符串)登记,布尔不登记;
15
16
  * 数组与对象递归展开其中的标量;短于 4 个字符的值不登记(会误伤普通文本)。
16
17
  * 数值字段的字符串形式等于已登记值时同样打码。
17
18
  */
@@ -27,6 +28,8 @@ export interface KernelLogger extends Logger {
27
28
  * 报错说明)之前用。
28
29
  */
29
30
  redact(text: string): string;
31
+ /** Waits until buffered records reached every output (Loki); never rejects. Call before exit. */
32
+ flush(): Promise<void>;
30
33
  }
31
34
  /**
32
35
  * 用与 logger 相同的匹配器打码任意文本(工具结果等不经过日志的内容用):展开规则同 `addOrgSecrets`
@@ -34,15 +37,43 @@ export interface KernelLogger extends Logger {
34
37
  * 不得小于匹配器的分桶前缀长度 4)。没有可用的值时原样返回。
35
38
  */
36
39
  export declare function createRedactor(values: readonly unknown[], minLength?: number): (s: string) => string;
37
- /**
38
- * 创建结构化 JSON logger:每条日志写一行 `{ ts, level, msg, ...fields }`。
39
- * 字段不能覆盖 ts / level / msg;Error 序列化为 name / message / stack;
40
- * 经 `addSecrets` 登记的部署方密钥在消息与字段的任何字符串里都被打码;经 `addOrgSecrets` 登记的组织来源密钥
41
- * 只在字段里打码,不动顶层 msg;顶层 ts / level 从不打码。
42
- * `opts.orgSecretCapacity` 为组织来源密钥集合的容量(测试用);`opts.onMatcherBuild` 在每次重建匹配器时调用(测试用)。
43
- */
44
- export declare function createLogger(level?: string, opts?: {
40
+ /** Console format: `pretty` (pino-pretty, one line per record), `json`, or `auto` (pretty on a TTY). */
41
+ export declare const LOG_FORMATS: readonly ["auto", "pretty", "json"];
42
+ /** Console format. */
43
+ export type LogFormat = (typeof LOG_FORMATS)[number];
44
+ /** A minimal writable the console output goes to (`process.stdout` by default). */
45
+ export interface LogOutput {
46
+ write(chunk: string): unknown;
47
+ }
48
+ /** Options of {@link createLogger}. */
49
+ export interface LoggerOptions {
50
+ /**
51
+ * Receives every record as one JSON line (no trailing newline) instead of the console; the
52
+ * console format is ignored. Used by tests and embedders that collect records themselves.
53
+ */
45
54
  write?: (line: string) => void;
55
+ /** Console format; default `auto`. */
56
+ format?: LogFormat;
57
+ /** Console stream; default `process.stdout`. */
58
+ out?: LogOutput;
59
+ /** Whether the console is a terminal (picks `auto` and colors); default `process.stdout.isTTY`. */
60
+ isTTY?: boolean;
61
+ /** Also push every record to Loki. */
62
+ loki?: LokiOptions;
63
+ /** Fields on every record (e.g. `role`); log calls cannot overwrite them. */
64
+ base?: Record<string, string>;
65
+ /** Capacity of the org secret set (tests). */
46
66
  orgSecretCapacity?: number;
67
+ /** Called on every matcher rebuild (tests). */
47
68
  onMatcherBuild?: () => void;
48
- }): KernelLogger;
69
+ }
70
+ /**
71
+ * Creates the kernel logger on pino. Each record is `{ time, level, msg, ...base, ...fields }` with
72
+ * `level` the label and `time` ISO 8601; fields cannot overwrite time / level / msg or the base
73
+ * fields; an Error becomes name / message / stack (and cause). Redaction happens before pino, so
74
+ * every output sees the same redacted record: deployment secrets (`addSecrets`) in msg and every
75
+ * field string, org secrets (`addOrgSecrets`) in fields only; level and time are never redacted.
76
+ * The console gets pino-pretty or JSON lines per `opts.format`; `opts.write` replaces the console
77
+ * with a JSON line sink.
78
+ */
79
+ export declare function createLogger(level?: string, opts?: LoggerOptions): KernelLogger;
package/dist/log.js CHANGED
@@ -1,9 +1,13 @@
1
+ import { pino } from "pino";
2
+ import { prettyFactory } from "pino-pretty";
1
3
  import { secretScalars } from "./config/fields.js";
4
+ import { logContext } from "./log-context.js";
5
+ import { createLokiStream } from "./log-loki.js";
2
6
  /** 日志级别,按严重程度递增。 */
3
7
  export const LOG_LEVELS = ["debug", "info", "warn", "error"];
4
8
  const LEVELS = LOG_LEVELS;
5
9
  const REDACTED = "[REDACTED]";
6
- const RESERVED = new Set(["ts", "level", "msg"]);
10
+ const RESERVED = new Set(["time", "level", "msg"]);
7
11
  /** 部署方密钥的最短登记长度:过短的值打码会误伤普通文本。 */
8
12
  const MIN_SECRET_LEN = 4;
9
13
  /** 组织来源密钥的最短登记长度。 */
@@ -101,16 +105,64 @@ function expandSecret(value) {
101
105
  }
102
106
  return out;
103
107
  }
108
+ /** Console format: `pretty` (pino-pretty, one line per record), `json`, or `auto` (pretty on a TTY). */
109
+ export const LOG_FORMATS = ["auto", "pretty", "json"];
110
+ /** Fields shown in the pretty prefix instead of the trailing object, in this order. */
111
+ const PREFIX_FIELDS = ["reqId", "traceId", "jobId", "runId", "plugin"];
112
+ /** pino-pretty's message format: `[role] [reqId=…] [plugin=…] msg`, each part only when present. */
113
+ function prettyMessage(log, messageKey) {
114
+ const parts = [];
115
+ if (typeof log.role === "string")
116
+ parts.push(`[${log.role}]`);
117
+ for (const k of PREFIX_FIELDS) {
118
+ const v = log[k];
119
+ if (typeof v === "string" || typeof v === "number")
120
+ parts.push(`[${k}=${v}]`);
121
+ }
122
+ parts.push(String(log[messageKey] ?? ""));
123
+ return parts.join(" ");
124
+ }
125
+ function consoleStream(opts) {
126
+ if (opts.write) {
127
+ const write = opts.write;
128
+ // pino hands each record as one string ending in "\n"
129
+ return { write: (s) => write(s.endsWith("\n") ? s.slice(0, -1) : s) };
130
+ }
131
+ const format = opts.format ?? "auto";
132
+ if (!LOG_FORMATS.includes(format)) {
133
+ throw new Error(`invalid log.format "${format}" (expected ${LOG_FORMATS.join(", ")})`);
134
+ }
135
+ const out = opts.out ?? process.stdout;
136
+ const isTTY = opts.isTTY ?? process.stdout.isTTY === true;
137
+ const pretty = format === "pretty" || (format === "auto" && isTTY);
138
+ if (!pretty)
139
+ return { write: (s) => out.write(s) };
140
+ // In process (no worker thread): pino-pretty formats each line synchronously.
141
+ const format_ = prettyFactory({
142
+ colorize: isTTY,
143
+ colorizeObjects: isTTY,
144
+ singleLine: true,
145
+ // errors stay inside the one-line object instead of a multi-line stack block
146
+ errorLikeObjectKeys: [],
147
+ translateTime: "SYS:HH:MM:ss.l",
148
+ ignore: ["pid", "hostname", "role", "spanId", ...PREFIX_FIELDS].join(","),
149
+ messageFormat: (log, messageKey) => prettyMessage(log, messageKey),
150
+ });
151
+ return { write: (s) => out.write(format_(s)) };
152
+ }
104
153
  /**
105
- * 创建结构化 JSON logger:每条日志写一行 `{ ts, level, msg, ...fields }`。
106
- * 字段不能覆盖 ts / level / msg;Error 序列化为 name / message / stack;
107
- * 经 `addSecrets` 登记的部署方密钥在消息与字段的任何字符串里都被打码;经 `addOrgSecrets` 登记的组织来源密钥
108
- * 只在字段里打码,不动顶层 msg;顶层 ts / level 从不打码。
109
- * `opts.orgSecretCapacity` 为组织来源密钥集合的容量(测试用);`opts.onMatcherBuild` 在每次重建匹配器时调用(测试用)。
154
+ * Creates the kernel logger on pino. Each record is `{ time, level, msg, ...base, ...fields }` with
155
+ * `level` the label and `time` ISO 8601; fields cannot overwrite time / level / msg or the base
156
+ * fields; an Error becomes name / message / stack (and cause). Redaction happens before pino, so
157
+ * every output sees the same redacted record: deployment secrets (`addSecrets`) in msg and every
158
+ * field string, org secrets (`addOrgSecrets`) in fields only; level and time are never redacted.
159
+ * The console gets pino-pretty or JSON lines per `opts.format`; `opts.write` replaces the console
160
+ * with a JSON line sink.
110
161
  */
111
162
  export function createLogger(level = "info", opts = {}) {
112
163
  let current = parseLevel(level);
113
- const write = opts.write ?? ((line) => process.stdout.write(`${line}\n`));
164
+ const base = opts.base ?? {};
165
+ const reserved = new Set([...RESERVED, ...Object.keys(base)]);
114
166
  const orgCapacity = opts.orgSecretCapacity ?? ORG_SECRET_CAPACITY;
115
167
  /** 部署方密钥(数量由配置决定,不淘汰)。 */
116
168
  const secrets = new Set();
@@ -136,12 +188,10 @@ export function createLogger(level = "info", opts = {}) {
136
188
  return deployMatcher(s);
137
189
  };
138
190
  const isSecret = (v) => secrets.has(v) || orgSecrets.has(v);
191
+ /** Redacts and serializes the fields to JSON (errors expanded, cycles cut). */
139
192
  const serialize = (entry) => {
140
193
  const seen = new WeakSet();
141
- return JSON.stringify(entry, function (key, value) {
142
- if (this === entry && RESERVED.has(key)) {
143
- return key === "msg" && typeof value === "string" ? redactMsg(value) : value;
144
- }
194
+ return JSON.stringify(entry, (_key, value) => {
145
195
  if (typeof value === "string")
146
196
  return redact(value);
147
197
  if ((typeof value === "number" || typeof value === "bigint") && isSecret(String(value))) {
@@ -167,21 +217,42 @@ export function createLogger(level = "info", opts = {}) {
167
217
  return value;
168
218
  });
169
219
  };
220
+ const loki = opts.loki ? createLokiStream(opts.loki) : undefined;
221
+ const sink = pino({
222
+ level: "debug",
223
+ base,
224
+ messageKey: "msg",
225
+ timestamp: pino.stdTimeFunctions.isoTime,
226
+ formatters: { level: (label) => ({ level: label }) },
227
+ // request / job / trace fields of the current async context (log-context.ts)
228
+ mixin: () => ({ ...logContext() }),
229
+ // fields arrive already serialized: no pino serializers, no depth or size limits
230
+ serializers: { err: (e) => e },
231
+ depthLimit: Number.MAX_SAFE_INTEGER,
232
+ edgeLimit: Number.MAX_SAFE_INTEGER,
233
+ },
234
+ // level filtering is ours (setLevel); every stream takes everything that got this far
235
+ loki
236
+ ? pino.multistream([
237
+ { level: "debug", stream: consoleStream(opts) },
238
+ { level: "debug", stream: loki },
239
+ ])
240
+ : consoleStream(opts));
170
241
  const emit = (lvl, msg, fields) => {
171
242
  if (LEVELS.indexOf(lvl) < LEVELS.indexOf(current))
172
243
  return;
173
- const entry = { ts: new Date().toISOString(), level: lvl, msg };
244
+ const entry = {};
174
245
  for (const [k, v] of Object.entries(fields ?? {}))
175
- if (!RESERVED.has(k))
246
+ if (!reserved.has(k))
176
247
  entry[k] = v;
177
- let line;
248
+ let obj;
178
249
  try {
179
- line = serialize(entry);
250
+ obj = JSON.parse(serialize(entry));
180
251
  }
181
252
  catch {
182
- line = serialize({ ts: entry.ts, level: lvl, msg, logError: "unserializable fields" });
253
+ obj = { logError: "unserializable fields" };
183
254
  }
184
- write(line);
255
+ sink[lvl](obj, redactMsg(msg));
185
256
  };
186
257
  return {
187
258
  debug: (msg, fields) => emit("debug", msg, fields),
@@ -192,6 +263,9 @@ export function createLogger(level = "info", opts = {}) {
192
263
  return current;
193
264
  },
194
265
  redact: (text) => redact(text),
266
+ flush: async () => {
267
+ await loki?.flush();
268
+ },
195
269
  setLevel(l) {
196
270
  current = parseLevel(l);
197
271
  },
@@ -0,0 +1,3 @@
1
+ /** Model prices and model purposes. */
2
+ export declare class ModelsModule {
3
+ }
@@ -0,0 +1,24 @@
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 { ExtensionRegistryModule } from "../extensions/registry.js";
9
+ import { IdentityModule } from "../identity/identity.module.js";
10
+ import { OrgLockModule } from "../orgs/org-lock.js";
11
+ import { ProvidersModule } from "../runtime/providers.js";
12
+ import { PricesService } from "./prices.js";
13
+ import { ModelPurposesService } from "./purposes.js";
14
+ /** Model prices and model purposes. */
15
+ let ModelsModule = class ModelsModule {
16
+ };
17
+ ModelsModule = __decorate([
18
+ Module({
19
+ imports: [ExtensionRegistryModule, IdentityModule, OrgLockModule, ProvidersModule],
20
+ providers: [PricesService, ModelPurposesService],
21
+ exports: [PricesService, ModelPurposesService],
22
+ })
23
+ ], ModelsModule);
24
+ export { ModelsModule };
@@ -1,6 +1,8 @@
1
1
  import type { ModelUsage } from "@capybara-hq/plugin-sdk";
2
2
  import { z } from "zod";
3
- import type { KernelDb } from "../db/kernel-schema.js";
3
+ import { EnterpriseAdminLock } from "../identity/enterprise-admin.js";
4
+ import { KernelDb } from "../infra/database/kernel-db.js";
5
+ import { TransactionHost } from "../infra/database/transaction-host.js";
4
6
  /**
5
7
  * 一个模型的价格(C2):每百万 token,币种为部署设置 `priceCurrency`。由企业管理员录入,插件不声明价格。
6
8
  * 缓存读 / 写价为 null 时按输入价计。
@@ -36,7 +38,9 @@ export type ModelPricePut = z.infer<typeof MODEL_PRICE_PUT>;
36
38
  /** 模型价格(PG `model_prices`):每次读都查库,不在进程内缓存(多副本下改价立刻生效)。 */
37
39
  export declare class PricesService {
38
40
  private readonly db;
39
- constructor(db: KernelDb);
41
+ readonly txHost: TransactionHost;
42
+ private readonly adminLock;
43
+ constructor(db: KernelDb, txHost: TransactionHost, adminLock: EnterpriseAdminLock);
40
44
  /** 全部价格,按 provider、model 排序。 */
41
45
  list(): Promise<ModelPrice[]>;
42
46
  /** 价格表(按 {@link priceKey} 查)。 */
@@ -50,4 +54,6 @@ export declare class PricesService {
50
54
  model: string;
51
55
  price: null;
52
56
  }, actorAccountId: string, actorTokenId?: string): Promise<void>;
57
+ /** The write of {@link put}, under the enterprise admin lock. */
58
+ private write;
53
59
  }
@@ -1,7 +1,20 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
8
+ return function (target, key) { decorator(target, key, paramIndex); }
9
+ };
10
+ import { Inject, Injectable } from "@nestjs/common";
1
11
  import { z } from "zod";
2
12
  import { ApiError } from "../errors.js";
3
13
  import { audit } from "../identity/audit.js";
4
- import { lockEnterpriseAdminsAndAuthorize } from "../identity/enterprise-admin.js";
14
+ import { EnterpriseAdminLock } from "../identity/enterprise-admin.js";
15
+ import { KernelDb } from "../infra/database/kernel-db.js";
16
+ import { TransactionHost } from "../infra/database/transaction-host.js";
17
+ import { Transactional } from "../infra/database/transactional.decorator.js";
5
18
  /** 价格表的键。供应商名与模型 id 不含换行,拼接不会撞键。 */
6
19
  export const priceKey = (provider, model) => `${provider}\n${model}`;
7
20
  /** 一次调用的估算成本;没有价格 → null。用量的四项互不重叠(见 plugin-sdk `ModelUsage`)。 */
@@ -36,10 +49,14 @@ export const MODEL_PRICE_PUT = z.union([
36
49
  const num = (v) => Number(v);
37
50
  const numOrNull = (v) => (v === null ? null : Number(v));
38
51
  /** 模型价格(PG `model_prices`):每次读都查库,不在进程内缓存(多副本下改价立刻生效)。 */
39
- export class PricesService {
52
+ let PricesService = class PricesService {
40
53
  db;
41
- constructor(db) {
54
+ txHost;
55
+ adminLock;
56
+ constructor(db, txHost, adminLock) {
42
57
  this.db = db;
58
+ this.txHost = txHost;
59
+ this.adminLock = adminLock;
43
60
  }
44
61
  /** 全部价格,按 provider、model 排序。 */
45
62
  async list() {
@@ -78,44 +95,55 @@ export class PricesService {
78
95
  if (!check.success) {
79
96
  throw new ApiError("validation_failed", "Invalid model price", check.error.issues.map((i) => ({ path: i.path.join("."), message: i.message })));
80
97
  }
81
- const v = check.data;
82
- await this.db.transaction().execute(async (trx) => {
83
- await lockEnterpriseAdminsAndAuthorize(trx, actorAccountId);
84
- const target = `${v.provider}/${v.model}`;
85
- if ("price" in v) {
86
- await trx
87
- .deleteFrom("model_prices")
88
- .where("provider", "=", v.provider)
89
- .where("model", "=", v.model)
90
- .execute();
91
- await audit(trx, {
92
- actorAccountId,
93
- ...(actorTokenId !== undefined && { actorTokenId }),
94
- action: "model_price.deleted",
95
- target,
96
- detail: { provider: v.provider, model: v.model },
97
- });
98
- return;
99
- }
100
- const values = {
101
- input_per_mtok: v.inputPerMTok,
102
- output_per_mtok: v.outputPerMTok,
103
- cache_read_per_mtok: v.cacheReadPerMTok,
104
- cache_write_per_mtok: v.cacheWritePerMTok,
105
- updated_by: actorAccountId,
106
- };
107
- await trx
108
- .insertInto("model_prices")
109
- .values({ provider: v.provider, model: v.model, ...values })
110
- .onConflict((oc) => oc.columns(["provider", "model"]).doUpdateSet({ ...values, updated_at: new Date() }))
98
+ await this.write(check.data, actorAccountId, actorTokenId);
99
+ }
100
+ /** The write of {@link put}, under the enterprise admin lock. */
101
+ async write(v, actorAccountId, actorTokenId) {
102
+ await this.adminLock.lockAndAuthorize(actorAccountId);
103
+ const target = `${v.provider}/${v.model}`;
104
+ if ("price" in v) {
105
+ await this.db
106
+ .deleteFrom("model_prices")
107
+ .where("provider", "=", v.provider)
108
+ .where("model", "=", v.model)
111
109
  .execute();
112
- await audit(trx, {
110
+ await audit(this.db.db, {
113
111
  actorAccountId,
114
112
  ...(actorTokenId !== undefined && { actorTokenId }),
115
- action: "model_price.updated",
113
+ action: "model_price.deleted",
116
114
  target,
117
- detail: { ...v },
115
+ detail: { provider: v.provider, model: v.model },
118
116
  });
117
+ return;
118
+ }
119
+ const values = {
120
+ input_per_mtok: v.inputPerMTok,
121
+ output_per_mtok: v.outputPerMTok,
122
+ cache_read_per_mtok: v.cacheReadPerMTok,
123
+ cache_write_per_mtok: v.cacheWritePerMTok,
124
+ updated_by: actorAccountId,
125
+ };
126
+ await this.db
127
+ .insertInto("model_prices")
128
+ .values({ provider: v.provider, model: v.model, ...values })
129
+ .onConflict((oc) => oc.columns(["provider", "model"]).doUpdateSet({ ...values, updated_at: new Date() }))
130
+ .execute();
131
+ await audit(this.db.db, {
132
+ actorAccountId,
133
+ ...(actorTokenId !== undefined && { actorTokenId }),
134
+ action: "model_price.updated",
135
+ target,
136
+ detail: { ...v },
119
137
  });
120
138
  }
121
- }
139
+ };
140
+ __decorate([
141
+ Transactional()
142
+ ], PricesService.prototype, "write", null);
143
+ PricesService = __decorate([
144
+ Injectable(),
145
+ __param(0, Inject(KernelDb)),
146
+ __param(1, Inject(TransactionHost)),
147
+ __param(2, Inject(EnterpriseAdminLock))
148
+ ], PricesService);
149
+ export { PricesService };
@@ -1,6 +1,6 @@
1
1
  import { type Principal } from "../identity/principal.js";
2
2
  import { type OrgContext } from "../orgs/org.guard.js";
3
- import { type ModelPurposesService, type PurposePut, type PurposeTarget, type PurposeView } from "./purposes.js";
3
+ import { ModelPurposesService, type PurposePut, type PurposeTarget, type PurposeView } from "./purposes.js";
4
4
  /** body 的目标(参数缺省为 `{}`)。 */
5
5
  export declare const purposeTargetOf: (b: PurposePut) => PurposeTarget | null;
6
6
  /**
@@ -7,12 +7,11 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
7
7
  var __param = (this && this.__param) || function (paramIndex, decorator) {
8
8
  return function (target, key) { decorator(target, key, paramIndex); }
9
9
  };
10
- import { Body, Controller, Get, Inject, Param, Put } from "@nestjs/common";
11
- import { MODEL_PURPOSES } from "../http/tokens.js";
12
- import { ZodPipe } from "../http/zod.pipe.js";
10
+ import { Controller, Get, Inject, Param, Put } from "@nestjs/common";
13
11
  import { CurrentPrincipal, patTokenId, requireUser, } from "../identity/principal.js";
12
+ import { ZBody } from "../infra/validation/zod-params.js";
14
13
  import { CurrentOrg, OrgAction } from "../orgs/org.guard.js";
15
- import { PURPOSE_PUT, } from "./purposes.js";
14
+ import { ModelPurposesService, PurposePutDto, } from "./purposes.js";
16
15
  /** body 的目标(参数缺省为 `{}`)。 */
17
16
  export const purposeTargetOf = (b) => b.target === null ? null : { model: b.target.model, params: b.target.params ?? {} };
18
17
  /**
@@ -47,10 +46,10 @@ __decorate([
47
46
  __param(0, CurrentPrincipal()),
48
47
  __param(1, CurrentOrg()),
49
48
  __param(2, Param("purpose")),
50
- __param(3, Body(new ZodPipe(PURPOSE_PUT)))
49
+ __param(3, ZBody(PurposePutDto))
51
50
  ], ModelPurposesController.prototype, "put", null);
52
51
  ModelPurposesController = __decorate([
53
52
  Controller("api/v1/orgs/:orgId/model-purposes"),
54
- __param(0, Inject(MODEL_PURPOSES))
53
+ __param(0, Inject(ModelPurposesService))
55
54
  ], ModelPurposesController);
56
55
  export { ModelPurposesController };