@capybara-hq/kernel 0.0.0-stage → 0.1.0-rc.1

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 (637) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +2 -0
  3. package/README.md +20 -2
  4. package/bootstrap.json +26 -0
  5. package/dist/admin/admin.controller.d.ts +139 -0
  6. package/dist/admin/admin.controller.js +238 -0
  7. package/dist/admin/extensions.controller.d.ts +100 -0
  8. package/dist/admin/extensions.controller.js +226 -0
  9. package/dist/admin/setup.controller.d.ts +36 -0
  10. package/dist/admin/setup.controller.js +106 -0
  11. package/dist/admin/setup.service.d.ts +47 -0
  12. package/dist/admin/setup.service.js +90 -0
  13. package/dist/agents/agents.controller.d.ts +205 -0
  14. package/dist/agents/agents.controller.js +144 -0
  15. package/dist/agents/agents.service.d.ts +177 -0
  16. package/dist/agents/agents.service.js +677 -0
  17. package/dist/agents/definition.d.ts +198 -0
  18. package/dist/agents/definition.js +152 -0
  19. package/dist/agents/models.controller.d.ts +13 -0
  20. package/dist/agents/models.controller.js +31 -0
  21. package/dist/agents/templates.controller.d.ts +15 -0
  22. package/dist/agents/templates.controller.js +37 -0
  23. package/dist/agents/templates.d.ts +83 -0
  24. package/dist/agents/templates.js +173 -0
  25. package/dist/catalog/admin-catalog.controller.d.ts +143 -0
  26. package/dist/catalog/admin-catalog.controller.js +245 -0
  27. package/dist/catalog/catalog.service.d.ts +430 -0
  28. package/dist/catalog/catalog.service.js +882 -0
  29. package/dist/catalog/claude/agents.d.ts +27 -0
  30. package/dist/catalog/claude/agents.js +270 -0
  31. package/dist/catalog/claude/commands.d.ts +50 -0
  32. package/dist/catalog/claude/commands.js +179 -0
  33. package/dist/catalog/claude/manifest.d.ts +69 -0
  34. package/dist/catalog/claude/manifest.js +134 -0
  35. package/dist/catalog/claude/marketplace.d.ts +35 -0
  36. package/dist/catalog/claude/marketplace.js +194 -0
  37. package/dist/catalog/claude/mcp.d.ts +33 -0
  38. package/dist/catalog/claude/mcp.js +226 -0
  39. package/dist/catalog/claude/report.d.ts +86 -0
  40. package/dist/catalog/claude/report.js +121 -0
  41. package/dist/catalog/claude/translate.d.ts +56 -0
  42. package/dist/catalog/claude/translate.js +857 -0
  43. package/dist/catalog/cli.d.ts +46 -0
  44. package/dist/catalog/cli.js +211 -0
  45. package/dist/catalog/git-source.d.ts +127 -0
  46. package/dist/catalog/git-source.js +520 -0
  47. package/dist/catalog/marketplace-fetch.d.ts +99 -0
  48. package/dist/catalog/marketplace-fetch.js +203 -0
  49. package/dist/catalog/marketplaces.controller.d.ts +97 -0
  50. package/dist/catalog/marketplaces.controller.js +197 -0
  51. package/dist/catalog/marketplaces.service.d.ts +340 -0
  52. package/dist/catalog/marketplaces.service.js +1217 -0
  53. package/dist/catalog/org-catalog.controller.d.ts +128 -0
  54. package/dist/catalog/org-catalog.controller.js +277 -0
  55. package/dist/catalog/org-catalog.service.d.ts +246 -0
  56. package/dist/catalog/org-catalog.service.js +625 -0
  57. package/dist/catalog/plugin-import.d.ts +436 -0
  58. package/dist/catalog/plugin-import.js +1069 -0
  59. package/dist/catalog/plugin-install.d.ts +447 -0
  60. package/dist/catalog/plugin-install.js +1333 -0
  61. package/dist/catalog/plugin-package.d.ts +143 -0
  62. package/dist/catalog/plugin-package.js +382 -0
  63. package/dist/catalog/plugin-upgrade.d.ts +222 -0
  64. package/dist/catalog/plugin-upgrade.js +1219 -0
  65. package/dist/catalog/requests.service.d.ts +162 -0
  66. package/dist/catalog/requests.service.js +504 -0
  67. package/dist/catalog/schema-path.d.ts +7 -0
  68. package/dist/catalog/schema-path.js +63 -0
  69. package/dist/catalog/upgrade-targets.d.ts +59 -0
  70. package/dist/catalog/upgrade-targets.js +90 -0
  71. package/dist/catalog/versions.d.ts +31 -0
  72. package/dist/catalog/versions.js +44 -0
  73. package/dist/channels/actions.d.ts +37 -0
  74. package/dist/channels/actions.js +121 -0
  75. package/dist/channels/cards.d.ts +44 -0
  76. package/dist/channels/cards.js +156 -0
  77. package/dist/channels/connections.controller.d.ts +59 -0
  78. package/dist/channels/connections.controller.js +115 -0
  79. package/dist/channels/connections.service.d.ts +187 -0
  80. package/dist/channels/connections.service.js +534 -0
  81. package/dist/channels/features.d.ts +12 -0
  82. package/dist/channels/features.js +22 -0
  83. package/dist/channels/inbound.d.ts +120 -0
  84. package/dist/channels/inbound.js +332 -0
  85. package/dist/channels/outbound.d.ts +140 -0
  86. package/dist/channels/outbound.js +1126 -0
  87. package/dist/channels/phrases.d.ts +100 -0
  88. package/dist/channels/phrases.js +81 -0
  89. package/dist/channels/supervisor.d.ts +182 -0
  90. package/dist/channels/supervisor.js +625 -0
  91. package/dist/channels/threads.d.ts +29 -0
  92. package/dist/channels/threads.js +104 -0
  93. package/dist/channels/webhook-url.d.ts +16 -0
  94. package/dist/channels/webhook-url.js +34 -0
  95. package/dist/channels/webhook.controller.d.ts +19 -0
  96. package/dist/channels/webhook.controller.js +72 -0
  97. package/dist/channels/webhook.d.ts +73 -0
  98. package/dist/channels/webhook.js +274 -0
  99. package/dist/config/docs.d.ts +9 -0
  100. package/dist/config/docs.js +85 -0
  101. package/dist/config/env.d.ts +6 -0
  102. package/dist/config/env.js +73 -0
  103. package/dist/config/fields.d.ts +42 -0
  104. package/dist/config/fields.js +214 -0
  105. package/dist/config/file-source.d.ts +3 -0
  106. package/dist/config/file-source.js +31 -0
  107. package/dist/config/load.d.ts +20 -0
  108. package/dist/config/load.js +98 -0
  109. package/dist/config/nacos-source.d.ts +31 -0
  110. package/dist/config/nacos-source.js +229 -0
  111. package/dist/config/schema.d.ts +237 -0
  112. package/dist/config/schema.js +1192 -0
  113. package/dist/config/sources.d.ts +18 -0
  114. package/dist/config/sources.js +59 -0
  115. package/dist/config/types.d.ts +9 -0
  116. package/dist/config/types.js +7 -0
  117. package/dist/conversations/artifacts.d.ts +52 -0
  118. package/dist/conversations/artifacts.js +137 -0
  119. package/dist/conversations/attachments.controller.d.ts +28 -0
  120. package/dist/conversations/attachments.controller.js +96 -0
  121. package/dist/conversations/attachments.service.d.ts +180 -0
  122. package/dist/conversations/attachments.service.js +578 -0
  123. package/dist/conversations/conversations.controller.d.ts +288 -0
  124. package/dist/conversations/conversations.controller.js +607 -0
  125. package/dist/conversations/conversations.service.d.ts +321 -0
  126. package/dist/conversations/conversations.service.js +754 -0
  127. package/dist/conversations/event-log.d.ts +122 -0
  128. package/dist/conversations/event-log.js +259 -0
  129. package/dist/conversations/events.d.ts +856 -0
  130. package/dist/conversations/events.js +639 -0
  131. package/dist/conversations/files.d.ts +92 -0
  132. package/dist/conversations/files.js +213 -0
  133. package/dist/conversations/outputs-read.d.ts +34 -0
  134. package/dist/conversations/outputs-read.js +37 -0
  135. package/dist/conversations/queue.d.ts +169 -0
  136. package/dist/conversations/queue.js +527 -0
  137. package/dist/conversations/sandbox-status.d.ts +21 -0
  138. package/dist/conversations/sandbox-status.js +24 -0
  139. package/dist/conversations/selection.d.ts +46 -0
  140. package/dist/conversations/selection.js +75 -0
  141. package/dist/conversations/titles.d.ts +93 -0
  142. package/dist/conversations/titles.js +423 -0
  143. package/dist/ctx/bus.d.ts +16 -0
  144. package/dist/ctx/bus.js +101 -0
  145. package/dist/ctx/create-ctx.d.ts +109 -0
  146. package/dist/ctx/create-ctx.js +592 -0
  147. package/dist/ctx/kv.d.ts +4 -0
  148. package/dist/ctx/kv.js +31 -0
  149. package/dist/ctx/lock.d.ts +4 -0
  150. package/dist/ctx/lock.js +39 -0
  151. package/dist/ctx/namespace.d.ts +6 -0
  152. package/dist/ctx/namespace.js +12 -0
  153. package/dist/ctx/queue.d.ts +25 -0
  154. package/dist/ctx/queue.js +151 -0
  155. package/dist/ctx/secrets.d.ts +45 -0
  156. package/dist/ctx/secrets.js +175 -0
  157. package/dist/db/kernel-schema.d.ts +1122 -0
  158. package/dist/db/kernel-schema.js +5 -0
  159. package/dist/db/migrator.d.ts +28 -0
  160. package/dist/db/migrator.js +140 -0
  161. package/dist/db/pool.d.ts +21 -0
  162. package/dist/db/pool.js +28 -0
  163. package/dist/db/sql-statements.d.ts +34 -0
  164. package/dist/db/sql-statements.js +168 -0
  165. package/dist/errors.d.ts +211 -0
  166. package/dist/errors.js +213 -0
  167. package/dist/evals/budget.d.ts +61 -0
  168. package/dist/evals/budget.js +181 -0
  169. package/dist/evals/diff.d.ts +55 -0
  170. package/dist/evals/diff.js +133 -0
  171. package/dist/evals/judge.d.ts +53 -0
  172. package/dist/evals/judge.js +149 -0
  173. package/dist/evals/plan.d.ts +47 -0
  174. package/dist/evals/plan.js +77 -0
  175. package/dist/evals/reconstruct.d.ts +137 -0
  176. package/dist/evals/reconstruct.js +322 -0
  177. package/dist/evals/recorded-tools.d.ts +54 -0
  178. package/dist/evals/recorded-tools.js +167 -0
  179. package/dist/evals/run-replay.d.ts +86 -0
  180. package/dist/evals/run-replay.js +502 -0
  181. package/dist/evals/runs.controller.d.ts +100 -0
  182. package/dist/evals/runs.controller.js +199 -0
  183. package/dist/evals/runs.service.d.ts +275 -0
  184. package/dist/evals/runs.service.js +836 -0
  185. package/dist/evals/sets.controller.d.ts +61 -0
  186. package/dist/evals/sets.controller.js +183 -0
  187. package/dist/evals/sets.service.d.ts +128 -0
  188. package/dist/evals/sets.service.js +558 -0
  189. package/dist/evals/snapshot.d.ts +76 -0
  190. package/dist/evals/snapshot.js +207 -0
  191. package/dist/evals/step-replay.d.ts +113 -0
  192. package/dist/evals/step-replay.js +181 -0
  193. package/dist/evals/trajectory.controller.d.ts +41 -0
  194. package/dist/evals/trajectory.controller.js +88 -0
  195. package/dist/evals/trajectory.d.ts +144 -0
  196. package/dist/evals/trajectory.js +338 -0
  197. package/dist/evals/trajectory.service.d.ts +108 -0
  198. package/dist/evals/trajectory.service.js +323 -0
  199. package/dist/evals/worker.d.ts +101 -0
  200. package/dist/evals/worker.js +790 -0
  201. package/dist/extensions/admin-ops.d.ts +105 -0
  202. package/dist/extensions/admin-ops.js +353 -0
  203. package/dist/extensions/admin-view.d.ts +79 -0
  204. package/dist/extensions/admin-view.js +327 -0
  205. package/dist/extensions/approvals.d.ts +119 -0
  206. package/dist/extensions/approvals.js +205 -0
  207. package/dist/extensions/blobs.d.ts +45 -0
  208. package/dist/extensions/blobs.js +160 -0
  209. package/dist/extensions/bootstrap.d.ts +176 -0
  210. package/dist/extensions/bootstrap.js +535 -0
  211. package/dist/extensions/cli.d.ts +61 -0
  212. package/dist/extensions/cli.js +165 -0
  213. package/dist/extensions/config-json-schema.d.ts +9 -0
  214. package/dist/extensions/config-json-schema.js +73 -0
  215. package/dist/extensions/deployment-config.d.ts +138 -0
  216. package/dist/extensions/deployment-config.js +394 -0
  217. package/dist/extensions/enabled.d.ts +31 -0
  218. package/dist/extensions/enabled.js +55 -0
  219. package/dist/extensions/hooks.d.ts +161 -0
  220. package/dist/extensions/hooks.js +425 -0
  221. package/dist/extensions/host.d.ts +577 -0
  222. package/dist/extensions/host.js +2071 -0
  223. package/dist/extensions/inflight.d.ts +69 -0
  224. package/dist/extensions/inflight.js +277 -0
  225. package/dist/extensions/installs.d.ts +166 -0
  226. package/dist/extensions/installs.js +253 -0
  227. package/dist/extensions/instance.d.ts +167 -0
  228. package/dist/extensions/instance.js +329 -0
  229. package/dist/extensions/ledger.d.ts +30 -0
  230. package/dist/extensions/ledger.js +50 -0
  231. package/dist/extensions/lifecycle.d.ts +80 -0
  232. package/dist/extensions/lifecycle.js +152 -0
  233. package/dist/extensions/migrate-lock.d.ts +51 -0
  234. package/dist/extensions/migrate-lock.js +100 -0
  235. package/dist/extensions/org-config.controller.d.ts +24 -0
  236. package/dist/extensions/org-config.controller.js +59 -0
  237. package/dist/extensions/org-config.d.ts +169 -0
  238. package/dist/extensions/org-config.js +520 -0
  239. package/dist/extensions/package.d.ts +115 -0
  240. package/dist/extensions/package.js +246 -0
  241. package/dist/extensions/permission-set.d.ts +117 -0
  242. package/dist/extensions/permission-set.js +184 -0
  243. package/dist/extensions/permission-view.d.ts +194 -0
  244. package/dist/extensions/permission-view.js +284 -0
  245. package/dist/extensions/registry.d.ts +24 -0
  246. package/dist/extensions/registry.js +56 -0
  247. package/dist/extensions/resolve.d.ts +12 -0
  248. package/dist/extensions/resolve.js +71 -0
  249. package/dist/extensions/sources.d.ts +69 -0
  250. package/dist/extensions/sources.js +120 -0
  251. package/dist/extensions/sync.d.ts +40 -0
  252. package/dist/extensions/sync.js +242 -0
  253. package/dist/files/previewers.controller.d.ts +46 -0
  254. package/dist/files/previewers.controller.js +105 -0
  255. package/dist/files/previewers.d.ts +100 -0
  256. package/dist/files/previewers.js +250 -0
  257. package/dist/http/api.module.d.ts +114 -0
  258. package/dist/http/api.module.js +448 -0
  259. package/dist/http/app.d.ts +77 -0
  260. package/dist/http/app.js +220 -0
  261. package/dist/http/error.filter.d.ts +21 -0
  262. package/dist/http/error.filter.js +85 -0
  263. package/dist/http/gateway.module.d.ts +15 -0
  264. package/dist/http/gateway.module.js +13 -0
  265. package/dist/http/health.controller.d.ts +26 -0
  266. package/dist/http/health.controller.js +79 -0
  267. package/dist/http/nest-logger.d.ts +20 -0
  268. package/dist/http/nest-logger.js +28 -0
  269. package/dist/http/plugin-dispatch.d.ts +68 -0
  270. package/dist/http/plugin-dispatch.js +200 -0
  271. package/dist/http/tokens.d.ts +131 -0
  272. package/dist/http/tokens.js +131 -0
  273. package/dist/http/zod.pipe.d.ts +8 -0
  274. package/dist/http/zod.pipe.js +14 -0
  275. package/dist/identity/accounts.d.ts +93 -0
  276. package/dist/identity/accounts.js +367 -0
  277. package/dist/identity/api-tokens.d.ts +73 -0
  278. package/dist/identity/api-tokens.js +197 -0
  279. package/dist/identity/audit.d.ts +23 -0
  280. package/dist/identity/audit.js +41 -0
  281. package/dist/identity/auth.controller.d.ts +40 -0
  282. package/dist/identity/auth.controller.js +130 -0
  283. package/dist/identity/auth.guard.d.ts +41 -0
  284. package/dist/identity/auth.guard.js +162 -0
  285. package/dist/identity/binding.d.ts +47 -0
  286. package/dist/identity/binding.js +84 -0
  287. package/dist/identity/cookies.d.ts +16 -0
  288. package/dist/identity/cookies.js +32 -0
  289. package/dist/identity/credential-check.d.ts +17 -0
  290. package/dist/identity/credential-check.js +24 -0
  291. package/dist/identity/enterprise-admin.d.ts +14 -0
  292. package/dist/identity/enterprise-admin.js +27 -0
  293. package/dist/identity/external.d.ts +106 -0
  294. package/dist/identity/external.js +337 -0
  295. package/dist/identity/hash.d.ts +2 -0
  296. package/dist/identity/hash.js +3 -0
  297. package/dist/identity/login.d.ts +6 -0
  298. package/dist/identity/login.js +20 -0
  299. package/dist/identity/me.controller.d.ts +61 -0
  300. package/dist/identity/me.controller.js +159 -0
  301. package/dist/identity/passwords.d.ts +6 -0
  302. package/dist/identity/passwords.js +37 -0
  303. package/dist/identity/principal.d.ts +56 -0
  304. package/dist/identity/principal.js +38 -0
  305. package/dist/identity/rate-limit.d.ts +55 -0
  306. package/dist/identity/rate-limit.js +121 -0
  307. package/dist/identity/sessions.d.ts +84 -0
  308. package/dist/identity/sessions.js +306 -0
  309. package/dist/identity/settings.d.ts +121 -0
  310. package/dist/identity/settings.js +248 -0
  311. package/dist/identity/sso.controller.d.ts +59 -0
  312. package/dist/identity/sso.controller.js +192 -0
  313. package/dist/identity/sso.d.ts +83 -0
  314. package/dist/identity/sso.js +202 -0
  315. package/dist/inbox/inbox.service.d.ts +43 -0
  316. package/dist/inbox/inbox.service.js +57 -0
  317. package/dist/index.d.ts +69 -0
  318. package/dist/index.js +67 -0
  319. package/dist/kernel.d.ts +259 -0
  320. package/dist/kernel.js +1326 -0
  321. package/dist/log-config.d.ts +9 -0
  322. package/dist/log-config.js +27 -0
  323. package/dist/log-context.d.ts +32 -0
  324. package/dist/log-context.js +40 -0
  325. package/dist/log-loki.d.ts +34 -0
  326. package/dist/log-loki.js +145 -0
  327. package/dist/log.d.ts +79 -0
  328. package/dist/log.js +303 -0
  329. package/dist/models/prices.d.ts +53 -0
  330. package/dist/models/prices.js +121 -0
  331. package/dist/models/purposes.controller.d.ts +19 -0
  332. package/dist/models/purposes.controller.js +56 -0
  333. package/dist/models/purposes.d.ts +140 -0
  334. package/dist/models/purposes.js +267 -0
  335. package/dist/net/proxy.d.ts +44 -0
  336. package/dist/net/proxy.js +162 -0
  337. package/dist/net/public-address.d.ts +60 -0
  338. package/dist/net/public-address.js +272 -0
  339. package/dist/net/safe-fetch.d.ts +38 -0
  340. package/dist/net/safe-fetch.js +140 -0
  341. package/dist/orgs/directory-sync.controller.d.ts +14 -0
  342. package/dist/orgs/directory-sync.controller.js +40 -0
  343. package/dist/orgs/directory-sync.d.ts +166 -0
  344. package/dist/orgs/directory-sync.js +558 -0
  345. package/dist/orgs/invitations.controller.d.ts +58 -0
  346. package/dist/orgs/invitations.controller.js +137 -0
  347. package/dist/orgs/invitations.service.d.ts +80 -0
  348. package/dist/orgs/invitations.service.js +217 -0
  349. package/dist/orgs/members.service.d.ts +63 -0
  350. package/dist/orgs/members.service.js +234 -0
  351. package/dist/orgs/offboarding.d.ts +141 -0
  352. package/dist/orgs/offboarding.js +398 -0
  353. package/dist/orgs/org-lock.d.ts +32 -0
  354. package/dist/orgs/org-lock.js +46 -0
  355. package/dist/orgs/org.guard.d.ts +35 -0
  356. package/dist/orgs/org.guard.js +95 -0
  357. package/dist/orgs/orgs.controller.d.ts +78 -0
  358. package/dist/orgs/orgs.controller.js +192 -0
  359. package/dist/orgs/orgs.service.d.ts +61 -0
  360. package/dist/orgs/orgs.service.js +209 -0
  361. package/dist/orgs/roles.d.ts +13 -0
  362. package/dist/orgs/roles.js +58 -0
  363. package/dist/orgs/settings.controller.d.ts +20 -0
  364. package/dist/orgs/settings.controller.js +53 -0
  365. package/dist/orgs/settings.service.d.ts +120 -0
  366. package/dist/orgs/settings.service.js +178 -0
  367. package/dist/packages/npm.d.ts +50 -0
  368. package/dist/packages/npm.js +218 -0
  369. package/dist/packages/provenance.d.ts +47 -0
  370. package/dist/packages/provenance.js +147 -0
  371. package/dist/packages/tgz.d.ts +76 -0
  372. package/dist/packages/tgz.js +225 -0
  373. package/dist/runtime/abort.d.ts +32 -0
  374. package/dist/runtime/abort.js +71 -0
  375. package/dist/runtime/checkpointer.d.ts +32 -0
  376. package/dist/runtime/checkpointer.js +243 -0
  377. package/dist/runtime/context/build.d.ts +254 -0
  378. package/dist/runtime/context/build.js +693 -0
  379. package/dist/runtime/context/claude-tools.d.ts +11 -0
  380. package/dist/runtime/context/claude-tools.js +24 -0
  381. package/dist/runtime/context/compaction.d.ts +26 -0
  382. package/dist/runtime/context/compaction.js +195 -0
  383. package/dist/runtime/context/pairing.d.ts +11 -0
  384. package/dist/runtime/context/pairing.js +82 -0
  385. package/dist/runtime/context/reminders.d.ts +5 -0
  386. package/dist/runtime/context/reminders.js +11 -0
  387. package/dist/runtime/context/skills.d.ts +105 -0
  388. package/dist/runtime/context/skills.js +283 -0
  389. package/dist/runtime/context/tokens.d.ts +19 -0
  390. package/dist/runtime/context/tokens.js +104 -0
  391. package/dist/runtime/conversation-lock.d.ts +40 -0
  392. package/dist/runtime/conversation-lock.js +97 -0
  393. package/dist/runtime/hook-calls.d.ts +84 -0
  394. package/dist/runtime/hook-calls.js +136 -0
  395. package/dist/runtime/langgraph-loop.d.ts +52 -0
  396. package/dist/runtime/langgraph-loop.js +247 -0
  397. package/dist/runtime/loop.d.ts +93 -0
  398. package/dist/runtime/loop.js +7 -0
  399. package/dist/runtime/maintenance.d.ts +80 -0
  400. package/dist/runtime/maintenance.js +148 -0
  401. package/dist/runtime/media-cache.d.ts +21 -0
  402. package/dist/runtime/media-cache.js +51 -0
  403. package/dist/runtime/model-call.d.ts +176 -0
  404. package/dist/runtime/model-call.js +1049 -0
  405. package/dist/runtime/providers.d.ts +86 -0
  406. package/dist/runtime/providers.js +224 -0
  407. package/dist/runtime/quota.d.ts +29 -0
  408. package/dist/runtime/quota.js +70 -0
  409. package/dist/runtime/run-finish.d.ts +45 -0
  410. package/dist/runtime/run-finish.js +69 -0
  411. package/dist/runtime/run-queue.d.ts +121 -0
  412. package/dist/runtime/run-queue.js +493 -0
  413. package/dist/runtime/run-worker.d.ts +138 -0
  414. package/dist/runtime/run-worker.js +806 -0
  415. package/dist/runtime/stream.controller.d.ts +34 -0
  416. package/dist/runtime/stream.controller.js +122 -0
  417. package/dist/runtime/stream.d.ts +63 -0
  418. package/dist/runtime/stream.js +262 -0
  419. package/dist/runtime/subagents/child.d.ts +80 -0
  420. package/dist/runtime/subagents/child.js +225 -0
  421. package/dist/runtime/subagents/definition.d.ts +103 -0
  422. package/dist/runtime/subagents/definition.js +392 -0
  423. package/dist/runtime/subagents/dispatch.d.ts +69 -0
  424. package/dist/runtime/subagents/dispatch.js +502 -0
  425. package/dist/runtime/subagents/limits.d.ts +23 -0
  426. package/dist/runtime/subagents/limits.js +34 -0
  427. package/dist/runtime/subagents/org-agents.d.ts +50 -0
  428. package/dist/runtime/subagents/org-agents.js +70 -0
  429. package/dist/runtime/subagents/preamble.d.ts +7 -0
  430. package/dist/runtime/subagents/preamble.js +11 -0
  431. package/dist/runtime/subagents/progress.d.ts +26 -0
  432. package/dist/runtime/subagents/progress.js +36 -0
  433. package/dist/runtime/subagents/roster.d.ts +55 -0
  434. package/dist/runtime/subagents/roster.js +111 -0
  435. package/dist/runtime/subagents/skill-fork.d.ts +123 -0
  436. package/dist/runtime/subagents/skill-fork.js +259 -0
  437. package/dist/runtime/usage-report.d.ts +163 -0
  438. package/dist/runtime/usage-report.js +551 -0
  439. package/dist/runtime/waits.d.ts +233 -0
  440. package/dist/runtime/waits.js +883 -0
  441. package/dist/sandbox/leases.d.ts +169 -0
  442. package/dist/sandbox/leases.js +515 -0
  443. package/dist/sandbox/lifecycle.d.ts +21 -0
  444. package/dist/sandbox/lifecycle.js +68 -0
  445. package/dist/sandbox/sandbox.service.d.ts +249 -0
  446. package/dist/sandbox/sandbox.service.js +908 -0
  447. package/dist/skills/catalog.d.ts +149 -0
  448. package/dist/skills/catalog.js +405 -0
  449. package/dist/skills/changes.controller.d.ts +56 -0
  450. package/dist/skills/changes.controller.js +136 -0
  451. package/dist/skills/changes.service.d.ts +175 -0
  452. package/dist/skills/changes.service.js +805 -0
  453. package/dist/skills/invocable.controller.d.ts +23 -0
  454. package/dist/skills/invocable.controller.js +50 -0
  455. package/dist/skills/invocation-keys.d.ts +23 -0
  456. package/dist/skills/invocation-keys.js +44 -0
  457. package/dist/skills/invoke.d.ts +135 -0
  458. package/dist/skills/invoke.js +286 -0
  459. package/dist/skills/package.d.ts +87 -0
  460. package/dist/skills/package.js +227 -0
  461. package/dist/skills/skills.controller.d.ts +40 -0
  462. package/dist/skills/skills.controller.js +110 -0
  463. package/dist/skills/skills.service.d.ts +192 -0
  464. package/dist/skills/skills.service.js +567 -0
  465. package/dist/storage/prefix.d.ts +36 -0
  466. package/dist/storage/prefix.js +104 -0
  467. package/dist/storage/purge.d.ts +27 -0
  468. package/dist/storage/purge.js +75 -0
  469. package/dist/storage/storage.service.d.ts +44 -0
  470. package/dist/storage/storage.service.js +145 -0
  471. package/dist/text.d.ts +13 -0
  472. package/dist/text.js +13 -0
  473. package/dist/tools/approvals.controller.d.ts +53 -0
  474. package/dist/tools/approvals.controller.js +128 -0
  475. package/dist/tools/approvals.service.d.ts +172 -0
  476. package/dist/tools/approvals.service.js +568 -0
  477. package/dist/tools/breaker.d.ts +28 -0
  478. package/dist/tools/breaker.js +72 -0
  479. package/dist/tools/builtins/agent.d.ts +81 -0
  480. package/dist/tools/builtins/agent.js +223 -0
  481. package/dist/tools/builtins/ask-user.d.ts +28 -0
  482. package/dist/tools/builtins/ask-user.js +139 -0
  483. package/dist/tools/builtins/read-tool-output.d.ts +18 -0
  484. package/dist/tools/builtins/read-tool-output.js +108 -0
  485. package/dist/tools/builtins/sandbox/bash.d.ts +16 -0
  486. package/dist/tools/builtins/sandbox/bash.js +137 -0
  487. package/dist/tools/builtins/sandbox/common.d.ts +116 -0
  488. package/dist/tools/builtins/sandbox/common.js +306 -0
  489. package/dist/tools/builtins/sandbox/deliver.d.ts +5 -0
  490. package/dist/tools/builtins/sandbox/deliver.js +180 -0
  491. package/dist/tools/builtins/sandbox/edit.d.ts +4 -0
  492. package/dist/tools/builtins/sandbox/edit.js +98 -0
  493. package/dist/tools/builtins/sandbox/glob-match.d.ts +25 -0
  494. package/dist/tools/builtins/sandbox/glob-match.js +240 -0
  495. package/dist/tools/builtins/sandbox/glob.d.ts +4 -0
  496. package/dist/tools/builtins/sandbox/glob.js +104 -0
  497. package/dist/tools/builtins/sandbox/grep.d.ts +9 -0
  498. package/dist/tools/builtins/sandbox/grep.js +133 -0
  499. package/dist/tools/builtins/sandbox/index.d.ts +12 -0
  500. package/dist/tools/builtins/sandbox/index.js +27 -0
  501. package/dist/tools/builtins/sandbox/names.d.ts +7 -0
  502. package/dist/tools/builtins/sandbox/names.js +20 -0
  503. package/dist/tools/builtins/sandbox/read.d.ts +8 -0
  504. package/dist/tools/builtins/sandbox/read.js +121 -0
  505. package/dist/tools/builtins/sandbox/write.d.ts +4 -0
  506. package/dist/tools/builtins/sandbox/write.js +88 -0
  507. package/dist/tools/builtins/skill-load.d.ts +53 -0
  508. package/dist/tools/builtins/skill-load.js +446 -0
  509. package/dist/tools/builtins/skill-write.d.ts +59 -0
  510. package/dist/tools/builtins/skill-write.js +244 -0
  511. package/dist/tools/builtins/tool-search.d.ts +31 -0
  512. package/dist/tools/builtins/tool-search.js +171 -0
  513. package/dist/tools/connector-content.controller.d.ts +34 -0
  514. package/dist/tools/connector-content.controller.js +78 -0
  515. package/dist/tools/connector-content.d.ts +104 -0
  516. package/dist/tools/connector-content.js +267 -0
  517. package/dist/tools/connectors.controller.d.ts +210 -0
  518. package/dist/tools/connectors.controller.js +234 -0
  519. package/dist/tools/connectors.service.d.ts +303 -0
  520. package/dist/tools/connectors.service.js +1102 -0
  521. package/dist/tools/credentials.d.ts +139 -0
  522. package/dist/tools/credentials.js +351 -0
  523. package/dist/tools/drift.d.ts +141 -0
  524. package/dist/tools/drift.js +539 -0
  525. package/dist/tools/elicitation.d.ts +81 -0
  526. package/dist/tools/elicitation.js +266 -0
  527. package/dist/tools/endpoint.d.ts +18 -0
  528. package/dist/tools/endpoint.js +115 -0
  529. package/dist/tools/info.d.ts +67 -0
  530. package/dist/tools/info.js +113 -0
  531. package/dist/tools/naming.d.ts +27 -0
  532. package/dist/tools/naming.js +47 -0
  533. package/dist/tools/oauth/discovery.d.ts +65 -0
  534. package/dist/tools/oauth/discovery.js +307 -0
  535. package/dist/tools/oauth/flow.d.ts +63 -0
  536. package/dist/tools/oauth/flow.js +237 -0
  537. package/dist/tools/oauth/oauth.controller.d.ts +31 -0
  538. package/dist/tools/oauth/oauth.controller.js +95 -0
  539. package/dist/tools/oauth/tokens.d.ts +111 -0
  540. package/dist/tools/oauth/tokens.js +258 -0
  541. package/dist/tools/outputs.d.ts +61 -0
  542. package/dist/tools/outputs.js +156 -0
  543. package/dist/tools/pipeline.d.ts +322 -0
  544. package/dist/tools/pipeline.js +1236 -0
  545. package/dist/tools/policy.d.ts +60 -0
  546. package/dist/tools/policy.js +236 -0
  547. package/dist/tools/questions.controller.d.ts +24 -0
  548. package/dist/tools/questions.controller.js +58 -0
  549. package/dist/tools/questions.service.d.ts +103 -0
  550. package/dist/tools/questions.service.js +295 -0
  551. package/dist/tools/redact.d.ts +20 -0
  552. package/dist/tools/redact.js +60 -0
  553. package/dist/tools/registry.d.ts +246 -0
  554. package/dist/tools/registry.js +481 -0
  555. package/dist/tools/resources.d.ts +16 -0
  556. package/dist/tools/resources.js +76 -0
  557. package/dist/tools/specs.d.ts +14 -0
  558. package/dist/tools/specs.js +31 -0
  559. package/dist/tools/validate.d.ts +20 -0
  560. package/dist/tools/validate.js +183 -0
  561. package/dist/tools/view.d.ts +43 -0
  562. package/dist/tools/view.js +225 -0
  563. package/dist/ui/embed-token.d.ts +31 -0
  564. package/dist/ui/embed-token.js +132 -0
  565. package/dist/ui/registry.d.ts +58 -0
  566. package/dist/ui/registry.js +90 -0
  567. package/dist/ui/ui-stream.d.ts +37 -0
  568. package/dist/ui/ui-stream.js +162 -0
  569. package/dist/ui/views.controller.d.ts +81 -0
  570. package/dist/ui/views.controller.js +261 -0
  571. package/dist/ui/views.d.ts +155 -0
  572. package/dist/ui/views.js +306 -0
  573. package/dist/version.d.ts +5 -0
  574. package/dist/version.js +6 -0
  575. package/package.json +69 -3
  576. package/src/migrations/0001_init.sql +8 -0
  577. package/src/migrations/0002_secrets.sql +8 -0
  578. package/src/migrations/0003_identity.sql +117 -0
  579. package/src/migrations/0004_plugin_org_config_nullable.sql +3 -0
  580. package/src/migrations/0005_agents.sql +27 -0
  581. package/src/migrations/0006_conversations.sql +37 -0
  582. package/src/migrations/0007_checkpoints.sql +26 -0
  583. package/src/migrations/0008_runs_trigger_seq.sql +3 -0
  584. package/src/migrations/0009_runs_active_unique.sql +4 -0
  585. package/src/migrations/0010_tools.sql +125 -0
  586. package/src/migrations/0011_approvals_spec.sql +10 -0
  587. package/src/migrations/0012_run_waits.sql +24 -0
  588. package/src/migrations/0013_app_tools_source.sql +4 -0
  589. package/src/migrations/0014_tool_specs.sql +8 -0
  590. package/src/migrations/0015_tool_drift.sql +20 -0
  591. package/src/migrations/0016_plugin_permissions.sql +11 -0
  592. package/src/migrations/0017_identity_sources.sql +6 -0
  593. package/src/migrations/0018_channels.sql +74 -0
  594. package/src/migrations/0019_identity_trust.sql +17 -0
  595. package/src/migrations/0020_channel_card_lookup.sql +10 -0
  596. package/src/migrations/0021_org_storage_purge.sql +9 -0
  597. package/src/migrations/0022_attachments.sql +29 -0
  598. package/src/migrations/0023_sandboxes.sql +37 -0
  599. package/src/migrations/0024_skills.sql +46 -0
  600. package/src/migrations/0025_skills_catalog_idx.sql +6 -0
  601. package/src/migrations/0026_skill_changes.sql +34 -0
  602. package/src/migrations/0027_model_prices.sql +18 -0
  603. package/src/migrations/0028_evals.sql +105 -0
  604. package/src/migrations/0029_model_purposes.sql +18 -0
  605. package/src/migrations/0030_plugin_installs.sql +73 -0
  606. package/src/migrations/0031_plugin_snapshot_source.sql +6 -0
  607. package/src/migrations/0032_plugin_deployment_configs.sql +10 -0
  608. package/src/migrations/0033_rename_apps_to_connectors.sql +25 -0
  609. package/src/migrations/0034_directory.sql +49 -0
  610. package/src/migrations/0035_catalogs.sql +40 -0
  611. package/src/migrations/0036_app_import_staging.sql +17 -0
  612. package/src/migrations/0037_directory_installs.sql +92 -0
  613. package/src/migrations/0038_channel_inbound_mode.sql +6 -0
  614. package/src/migrations/0039_channel_card_pending.sql +8 -0
  615. package/src/migrations/0040_usage_report_sweep.sql +10 -0
  616. package/src/migrations/0041_rename_plugins_to_extensions.sql +38 -0
  617. package/src/migrations/0042_rename_directory_to_catalog.sql +80 -0
  618. package/src/migrations/0043_rename_app_installs_to_plugin_installs.sql +20 -0
  619. package/src/migrations/0044_catalog_one_kind.sql +90 -0
  620. package/src/migrations/0045_plugin_dependencies.sql +9 -0
  621. package/src/migrations/0046_git_sources.sql +25 -0
  622. package/src/migrations/0047_marketplace_entry_heads.sql +7 -0
  623. package/src/migrations/0048_marketplace_entry_trees.sql +8 -0
  624. package/src/migrations/0049_plugin_upgrades.sql +37 -0
  625. package/src/migrations/0050_bootstrap.sql +53 -0
  626. package/src/migrations/0051_claude_compat.sql +26 -0
  627. package/src/migrations/0052_conversations_account_agent_idx.sql +5 -0
  628. package/src/migrations/0053_subagents.sql +73 -0
  629. package/src/migrations/0054_subagent_wait_expiry.sql +7 -0
  630. package/src/migrations/0055_subagent_parent_indexes.sql +10 -0
  631. package/src/migrations/0056_approval_reason.sql +3 -0
  632. package/src/migrations/0057_conversation_titles.sql +11 -0
  633. package/src/migrations/0058_conversation_selection.sql +4 -0
  634. package/src/migrations/0059_conversation_queue.sql +22 -0
  635. package/src/migrations/0060_file_previewers.sql +10 -0
  636. package/src/migrations/0061_queue_selection.sql +5 -0
  637. package/src/migrations/0062_queued_skill.sql +8 -0
@@ -0,0 +1,53 @@
1
+ import type { ModelUsage } from "@capybara-hq/plugin-sdk";
2
+ import { z } from "zod";
3
+ import type { KernelDb } from "../db/kernel-schema.js";
4
+ /**
5
+ * 一个模型的价格(C2):每百万 token,币种为部署设置 `priceCurrency`。由企业管理员录入,插件不声明价格。
6
+ * 缓存读 / 写价为 null 时按输入价计。
7
+ */
8
+ export interface ModelPrice {
9
+ provider: string;
10
+ model: string;
11
+ inputPerMTok: number;
12
+ outputPerMTok: number;
13
+ cacheReadPerMTok: number | null;
14
+ cacheWritePerMTok: number | null;
15
+ }
16
+ /** 价格表:键为 {@link priceKey}(`${provider}\n${model}`)。 */
17
+ export type PriceTable = ReadonlyMap<string, ModelPrice>;
18
+ /** 价格表的键。供应商名与模型 id 不含换行,拼接不会撞键。 */
19
+ export declare const priceKey: (provider: string, model: string) => string;
20
+ /** 一次调用的估算成本;没有价格 → null。用量的四项互不重叠(见 plugin-sdk `ModelUsage`)。 */
21
+ export declare function costOf(usage: ModelUsage, price: ModelPrice | undefined): number | null;
22
+ /** `PUT /api/v1/admin/model-prices` 的 body:设一个价格,或 `price: null` 删除。 */
23
+ export declare const MODEL_PRICE_PUT: z.ZodUnion<readonly [z.ZodObject<{
24
+ provider: z.ZodString;
25
+ model: z.ZodString;
26
+ inputPerMTok: z.ZodNumber;
27
+ outputPerMTok: z.ZodNumber;
28
+ cacheReadPerMTok: z.ZodNullable<z.ZodNumber>;
29
+ cacheWritePerMTok: z.ZodNullable<z.ZodNumber>;
30
+ }, z.core.$strict>, z.ZodObject<{
31
+ provider: z.ZodString;
32
+ model: z.ZodString;
33
+ price: z.ZodNull;
34
+ }, z.core.$strict>]>;
35
+ export type ModelPricePut = z.infer<typeof MODEL_PRICE_PUT>;
36
+ /** 模型价格(PG `model_prices`):每次读都查库,不在进程内缓存(多副本下改价立刻生效)。 */
37
+ export declare class PricesService {
38
+ private readonly db;
39
+ constructor(db: KernelDb);
40
+ /** 全部价格,按 provider、model 排序。 */
41
+ list(): Promise<ModelPrice[]>;
42
+ /** 价格表(按 {@link priceKey} 查)。 */
43
+ table(): Promise<PriceTable>;
44
+ /**
45
+ * 设置或删除(`price: null`)一个模型的价格:事务内取企业管理员锁并复核发起人仍是活跃企业管理员
46
+ * (否则 `forbidden`),写审计 `model_price.updated` / `model_price.deleted`。
47
+ */
48
+ put(input: ModelPrice | {
49
+ provider: string;
50
+ model: string;
51
+ price: null;
52
+ }, actorAccountId: string, actorTokenId?: string): Promise<void>;
53
+ }
@@ -0,0 +1,121 @@
1
+ import { z } from "zod";
2
+ import { ApiError } from "../errors.js";
3
+ import { audit } from "../identity/audit.js";
4
+ import { lockEnterpriseAdminsAndAuthorize } from "../identity/enterprise-admin.js";
5
+ /** 价格表的键。供应商名与模型 id 不含换行,拼接不会撞键。 */
6
+ export const priceKey = (provider, model) => `${provider}\n${model}`;
7
+ /** 一次调用的估算成本;没有价格 → null。用量的四项互不重叠(见 plugin-sdk `ModelUsage`)。 */
8
+ export function costOf(usage, price) {
9
+ if (price === undefined)
10
+ return null;
11
+ const cacheRead = price.cacheReadPerMTok ?? price.inputPerMTok;
12
+ const cacheWrite = price.cacheWritePerMTok ?? price.inputPerMTok;
13
+ return ((usage.inputTokens * price.inputPerMTok +
14
+ usage.outputTokens * price.outputPerMTok +
15
+ usage.cacheReadTokens * cacheRead +
16
+ usage.cacheWriteTokens * cacheWrite) /
17
+ 1_000_000);
18
+ }
19
+ /** 单价:≥ 0 且 ≤ 1e6(有限数)。 */
20
+ const PerMTok = z.number().min(0).max(1_000_000);
21
+ const Name = z.string().min(1).max(200);
22
+ /** `PUT /api/v1/admin/model-prices` 的 body:设一个价格,或 `price: null` 删除。 */
23
+ export const MODEL_PRICE_PUT = z.union([
24
+ z
25
+ .object({
26
+ provider: Name,
27
+ model: Name,
28
+ inputPerMTok: PerMTok,
29
+ outputPerMTok: PerMTok,
30
+ cacheReadPerMTok: PerMTok.nullable(),
31
+ cacheWritePerMTok: PerMTok.nullable(),
32
+ })
33
+ .strict(),
34
+ z.object({ provider: Name, model: Name, price: z.null() }).strict(),
35
+ ]);
36
+ const num = (v) => Number(v);
37
+ const numOrNull = (v) => (v === null ? null : Number(v));
38
+ /** 模型价格(PG `model_prices`):每次读都查库,不在进程内缓存(多副本下改价立刻生效)。 */
39
+ export class PricesService {
40
+ db;
41
+ constructor(db) {
42
+ this.db = db;
43
+ }
44
+ /** 全部价格,按 provider、model 排序。 */
45
+ async list() {
46
+ const rows = await this.db
47
+ .selectFrom("model_prices")
48
+ .select([
49
+ "provider",
50
+ "model",
51
+ "input_per_mtok",
52
+ "output_per_mtok",
53
+ "cache_read_per_mtok",
54
+ "cache_write_per_mtok",
55
+ ])
56
+ .orderBy("provider")
57
+ .orderBy("model")
58
+ .execute();
59
+ return rows.map((r) => ({
60
+ provider: r.provider,
61
+ model: r.model,
62
+ inputPerMTok: num(r.input_per_mtok),
63
+ outputPerMTok: num(r.output_per_mtok),
64
+ cacheReadPerMTok: numOrNull(r.cache_read_per_mtok),
65
+ cacheWritePerMTok: numOrNull(r.cache_write_per_mtok),
66
+ }));
67
+ }
68
+ /** 价格表(按 {@link priceKey} 查)。 */
69
+ async table() {
70
+ return new Map((await this.list()).map((p) => [priceKey(p.provider, p.model), p]));
71
+ }
72
+ /**
73
+ * 设置或删除(`price: null`)一个模型的价格:事务内取企业管理员锁并复核发起人仍是活跃企业管理员
74
+ * (否则 `forbidden`),写审计 `model_price.updated` / `model_price.deleted`。
75
+ */
76
+ async put(input, actorAccountId, actorTokenId) {
77
+ const check = MODEL_PRICE_PUT.safeParse(input);
78
+ if (!check.success) {
79
+ throw new ApiError("validation_failed", "Invalid model price", check.error.issues.map((i) => ({ path: i.path.join("."), message: i.message })));
80
+ }
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() }))
111
+ .execute();
112
+ await audit(trx, {
113
+ actorAccountId,
114
+ ...(actorTokenId !== undefined && { actorTokenId }),
115
+ action: "model_price.updated",
116
+ target,
117
+ detail: { ...v },
118
+ });
119
+ });
120
+ }
121
+ }
@@ -0,0 +1,19 @@
1
+ import { type Principal } from "../identity/principal.js";
2
+ import { type OrgContext } from "../orgs/org.guard.js";
3
+ import { type ModelPurposesService, type PurposePut, type PurposeTarget, type PurposeView } from "./purposes.js";
4
+ /** body 的目标(参数缺省为 `{}`)。 */
5
+ export declare const purposeTargetOf: (b: PurposePut) => PurposeTarget | null;
6
+ /**
7
+ * 本组织的模型用途映射(`/api/v1/orgs/:orgId/model-purposes`):`org.models.manage`(admin 起、只给人)。
8
+ * 列表给出每个用途的部署默认、组织覆盖与生效的映射;PUT 设置或(`target: null`)清除组织覆盖。
9
+ */
10
+ export declare class ModelPurposesController {
11
+ private readonly purposes;
12
+ constructor(purposes: ModelPurposesService);
13
+ list(principal: Principal, org: OrgContext): Promise<{
14
+ purposes: PurposeView[];
15
+ }>;
16
+ put(principal: Principal, org: OrgContext, purpose: string, body: PurposePut): Promise<{
17
+ purpose: PurposeView;
18
+ }>;
19
+ }
@@ -0,0 +1,56 @@
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 { 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";
13
+ import { CurrentPrincipal, patTokenId, requireUser, } from "../identity/principal.js";
14
+ import { CurrentOrg, OrgAction } from "../orgs/org.guard.js";
15
+ import { PURPOSE_PUT, } from "./purposes.js";
16
+ /** body 的目标(参数缺省为 `{}`)。 */
17
+ export const purposeTargetOf = (b) => b.target === null ? null : { model: b.target.model, params: b.target.params ?? {} };
18
+ /**
19
+ * 本组织的模型用途映射(`/api/v1/orgs/:orgId/model-purposes`):`org.models.manage`(admin 起、只给人)。
20
+ * 列表给出每个用途的部署默认、组织覆盖与生效的映射;PUT 设置或(`target: null`)清除组织覆盖。
21
+ */
22
+ let ModelPurposesController = class ModelPurposesController {
23
+ purposes;
24
+ constructor(purposes) {
25
+ this.purposes = purposes;
26
+ }
27
+ async list(principal, org) {
28
+ requireUser(principal);
29
+ return { purposes: await this.purposes.list(org.orgId) };
30
+ }
31
+ async put(principal, org, purpose, body) {
32
+ const p = requireUser(principal);
33
+ return {
34
+ purpose: await this.purposes.setOrg(org.orgId, purpose, purposeTargetOf(body), p.account.id, patTokenId(p)),
35
+ };
36
+ }
37
+ };
38
+ __decorate([
39
+ Get(),
40
+ OrgAction("org.models.manage"),
41
+ __param(0, CurrentPrincipal()),
42
+ __param(1, CurrentOrg())
43
+ ], ModelPurposesController.prototype, "list", null);
44
+ __decorate([
45
+ Put(":purpose"),
46
+ OrgAction("org.models.manage"),
47
+ __param(0, CurrentPrincipal()),
48
+ __param(1, CurrentOrg()),
49
+ __param(2, Param("purpose")),
50
+ __param(3, Body(new ZodPipe(PURPOSE_PUT)))
51
+ ], ModelPurposesController.prototype, "put", null);
52
+ ModelPurposesController = __decorate([
53
+ Controller("api/v1/orgs/:orgId/model-purposes"),
54
+ __param(0, Inject(MODEL_PURPOSES))
55
+ ], ModelPurposesController);
56
+ export { ModelPurposesController };
@@ -0,0 +1,140 @@
1
+ import { type ContentBlock, type ExtensionManifest, type ModelRequest, type ModelUsage, type ParamValue, type StopReason } from "@capybara-hq/plugin-sdk";
2
+ import { z } from "zod";
3
+ import { ModelRef } from "../agents/definition.js";
4
+ import type { KernelConfig } from "../config/schema.js";
5
+ import type { KernelDb } from "../db/kernel-schema.js";
6
+ import { type ProviderRegistry } from "../runtime/providers.js";
7
+ /**
8
+ * 模型用途映射(C9):内核与插件按「用途」取模型,不在代码里写死模型。
9
+ * - 用途 = 内核用途 {@link KERNEL_PURPOSES}(目前只有评委 `eval`),或已加载插件 `permissions.models` 声明的;
10
+ * - 映射 = 部署默认(`org_id` 为 null,企业管理员设)+ 组织覆盖(组织管理员设,`org.models.manage`);
11
+ * 生效的映射先取组织覆盖、再取部署默认,都没有 → `model.unconfigured`;
12
+ * - 目标模型按部署范围解析(与运行时一致),参数按目标模型自己的声明严格校验;不做模型白名单;
13
+ * - 每次都查 PG,不在进程内缓存(多副本下改映射立即生效)。`ctx.models` 仍预留,插件暂不能调用。
14
+ */
15
+ /**
16
+ * Purposes the kernel declares: the eval judge, and the three sub-agent model tiers (phase C,
17
+ * spec §5.4: `fast` / `standard` / `capable` → `subagent_<tier>`; an unmapped tier runs on the
18
+ * parent's model).
19
+ */
20
+ export declare const KERNEL_PURPOSES: readonly [{
21
+ readonly purpose: "eval";
22
+ readonly kind: "chat";
23
+ readonly label: {
24
+ readonly zh: "评测评委";
25
+ readonly en: "Eval judge";
26
+ };
27
+ }, {
28
+ readonly purpose: "title";
29
+ readonly kind: "chat";
30
+ readonly label: {
31
+ readonly zh: "会话标题";
32
+ readonly en: "Conversation titles";
33
+ };
34
+ }, {
35
+ readonly purpose: "subagent_fast";
36
+ readonly kind: "chat";
37
+ readonly label: {
38
+ readonly zh: "子代理:快速";
39
+ readonly en: "Sub-agent: fast";
40
+ };
41
+ }, {
42
+ readonly purpose: "subagent_standard";
43
+ readonly kind: "chat";
44
+ readonly label: {
45
+ readonly zh: "子代理:标准";
46
+ readonly en: "Sub-agent: standard";
47
+ };
48
+ }, {
49
+ readonly purpose: "subagent_capable";
50
+ readonly kind: "chat";
51
+ readonly label: {
52
+ readonly zh: "子代理:最强";
53
+ readonly en: "Sub-agent: capable";
54
+ };
55
+ }];
56
+ /** 一个用途映射到的模型与参数。 */
57
+ export interface PurposeTarget {
58
+ model: ModelRef;
59
+ params: Record<string, ParamValue>;
60
+ }
61
+ export interface PurposeView {
62
+ purpose: string;
63
+ kind: "chat" | "embedding";
64
+ label: {
65
+ zh: string;
66
+ en: string;
67
+ };
68
+ /** `kernel` 或声明它的插件名。 */
69
+ declaredBy: string;
70
+ default: PurposeTarget | null;
71
+ override: PurposeTarget | null;
72
+ effective: PurposeTarget | null;
73
+ }
74
+ /** `PUT …/model-purposes/:purpose` 的 body:设映射,或 `target: null` 清除。 */
75
+ export declare const PURPOSE_PUT: z.ZodObject<{
76
+ target: z.ZodNullable<z.ZodObject<{
77
+ model: z.ZodObject<{
78
+ provider: z.ZodString;
79
+ model: z.ZodString;
80
+ }, z.core.$strict>;
81
+ params: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean]>>>;
82
+ }, z.core.$strict>>;
83
+ }, z.core.$strict>;
84
+ export type PurposePut = z.infer<typeof PURPOSE_PUT>;
85
+ /**
86
+ * 用途请求已经发出、但没有正常收完(出错、超时、中止):`tokens` 是应计入预算的估算用量(输入估算 + 已流出字符 / 4,
87
+ * 与评测回放一致),`cause` 是原始错误。请求发出之前的失败(未映射、模型不可用)原样抛出。
88
+ */
89
+ export declare class PurposeAttemptError extends Error {
90
+ readonly cause: unknown;
91
+ readonly tokens: number;
92
+ readonly provider: string;
93
+ readonly model: string;
94
+ constructor(cause: unknown, tokens: number, provider: string, model: string);
95
+ }
96
+ export interface ModelPurposesDeps {
97
+ db: KernelDb;
98
+ registry: Pick<ProviderRegistry, "resolve">;
99
+ config: () => KernelConfig;
100
+ /** 已加载插件的清单(取 `permissions.models`)。 */
101
+ manifests: () => readonly ExtensionManifest[];
102
+ }
103
+ export declare class ModelPurposesService {
104
+ private readonly d;
105
+ constructor(d: ModelPurposesDeps);
106
+ /** 全部已声明的用途:内核的在前,其后按插件加载顺序。 */
107
+ private declared;
108
+ private find;
109
+ private rows;
110
+ private views;
111
+ /** 全部用途与映射;不给 `orgId` = 部署级视图(`override` 一律为 null)。 */
112
+ list(orgId?: string): Promise<PurposeView[]>;
113
+ /** 校验目标:模型可解析(部署范围)、参数按它的声明严格通过。 */
114
+ private check;
115
+ private set;
116
+ /** 设置(或 `null` 清除)部署默认;只有企业管理员(事务内复核)。 */
117
+ setDefault(purpose: string, target: PurposeTarget | null, actor: string, actorTokenId?: string): Promise<PurposeView>;
118
+ /** 设置(或 `null` 清除)组织覆盖;事务内锁组织并复核 `org.models.manage`。 */
119
+ setOrg(orgId: string, purpose: string, target: PurposeTarget | null, actor: string, actorTokenId?: string): Promise<PurposeView>;
120
+ /** 生效的映射:组织覆盖,否则部署默认;都没有 → `model.unconfigured`;用途未声明 → `model.purpose_unknown`。 */
121
+ resolve(orgId: string, purpose: string): Promise<PurposeTarget>;
122
+ /**
123
+ * 按用途发一次对话请求:解析映射、按目标模型的声明宽松处理参数(补默认值,与运行时一致),用 `consumeModelStream`
124
+ * 收完(只有流空闲看门狗)。输出上限取 `min(req.maxOutputTokens, 目标模型的 maxOutputTokens)`。
125
+ * 请求发出之前的失败原样抛出;发出之后的失败包成 {@link PurposeAttemptError}(带估算用量)。
126
+ * `opts.fallback`: the target used when the purpose is not mapped (`model.unconfigured`).
127
+ * `opts.beforeSend`: called with the resolved target and the final request just before sending;
128
+ * what it throws is thrown as is (a pre-send failure, e.g. a denied `model.request` hook).
129
+ */
130
+ chat(orgId: string, purpose: string, req: Omit<ModelRequest, "model" | "params">, signal: AbortSignal, opts?: {
131
+ fallback?: PurposeTarget;
132
+ beforeSend?: (target: ModelRef, request: ModelRequest) => Promise<void>;
133
+ }): Promise<{
134
+ content: ContentBlock[];
135
+ stopReason: StopReason;
136
+ usage: ModelUsage;
137
+ provider: string;
138
+ model: string;
139
+ }>;
140
+ }
@@ -0,0 +1,267 @@
1
+ import { sanitizeParams, } from "@capybara-hq/plugin-sdk";
2
+ import { z } from "zod";
3
+ import { paramIssues } from "../agents/agents.service.js";
4
+ import { ModelRef } from "../agents/definition.js";
5
+ import { ApiError } from "../errors.js";
6
+ import { audit } from "../identity/audit.js";
7
+ import { lockEnterpriseAdminsAndAuthorize } from "../identity/enterprise-admin.js";
8
+ import { lockOrgAndAuthorize } from "../orgs/org-lock.js";
9
+ import { estimateTokens } from "../runtime/context/tokens.js";
10
+ import { consumeModelStream } from "../runtime/model-call.js";
11
+ import { ProviderListError } from "../runtime/providers.js";
12
+ /**
13
+ * 模型用途映射(C9):内核与插件按「用途」取模型,不在代码里写死模型。
14
+ * - 用途 = 内核用途 {@link KERNEL_PURPOSES}(目前只有评委 `eval`),或已加载插件 `permissions.models` 声明的;
15
+ * - 映射 = 部署默认(`org_id` 为 null,企业管理员设)+ 组织覆盖(组织管理员设,`org.models.manage`);
16
+ * 生效的映射先取组织覆盖、再取部署默认,都没有 → `model.unconfigured`;
17
+ * - 目标模型按部署范围解析(与运行时一致),参数按目标模型自己的声明严格校验;不做模型白名单;
18
+ * - 每次都查 PG,不在进程内缓存(多副本下改映射立即生效)。`ctx.models` 仍预留,插件暂不能调用。
19
+ */
20
+ /**
21
+ * Purposes the kernel declares: the eval judge, and the three sub-agent model tiers (phase C,
22
+ * spec §5.4: `fast` / `standard` / `capable` → `subagent_<tier>`; an unmapped tier runs on the
23
+ * parent's model).
24
+ */
25
+ export const KERNEL_PURPOSES = [
26
+ { purpose: "eval", kind: "chat", label: { zh: "评测评委", en: "Eval judge" } },
27
+ /** Conversation titles (UI refresh B); unmapped → the conversation's current chat model. */
28
+ { purpose: "title", kind: "chat", label: { zh: "会话标题", en: "Conversation titles" } },
29
+ {
30
+ purpose: "subagent_fast",
31
+ kind: "chat",
32
+ label: { zh: "子代理:快速", en: "Sub-agent: fast" },
33
+ },
34
+ {
35
+ purpose: "subagent_standard",
36
+ kind: "chat",
37
+ label: { zh: "子代理:标准", en: "Sub-agent: standard" },
38
+ },
39
+ {
40
+ purpose: "subagent_capable",
41
+ kind: "chat",
42
+ label: { zh: "子代理:最强", en: "Sub-agent: capable" },
43
+ },
44
+ ];
45
+ /** `PUT …/model-purposes/:purpose` 的 body:设映射,或 `target: null` 清除。 */
46
+ export const PURPOSE_PUT = z
47
+ .object({
48
+ target: z
49
+ .object({
50
+ model: ModelRef.strict(),
51
+ params: z.record(z.string(), z.union([z.string(), z.number(), z.boolean()])).optional(),
52
+ })
53
+ .strict()
54
+ .nullable(),
55
+ })
56
+ .strict();
57
+ /**
58
+ * 用途请求已经发出、但没有正常收完(出错、超时、中止):`tokens` 是应计入预算的估算用量(输入估算 + 已流出字符 / 4,
59
+ * 与评测回放一致),`cause` 是原始错误。请求发出之前的失败(未映射、模型不可用)原样抛出。
60
+ */
61
+ export class PurposeAttemptError extends Error {
62
+ cause;
63
+ tokens;
64
+ provider;
65
+ model;
66
+ constructor(cause, tokens, provider, model) {
67
+ super(cause instanceof Error ? cause.message : String(cause), { cause });
68
+ this.cause = cause;
69
+ this.tokens = tokens;
70
+ this.provider = provider;
71
+ this.model = model;
72
+ this.name = "PurposeAttemptError";
73
+ }
74
+ }
75
+ const unknownPurpose = (purpose) => new ApiError("model.purpose_unknown", `Unknown model purpose "${purpose}"`);
76
+ const invalid = (details) => new ApiError("validation_failed", "Invalid purpose target", details);
77
+ const targetOf = (r) => r === undefined
78
+ ? null
79
+ : {
80
+ model: { provider: r.provider, model: r.model },
81
+ params: (r.params ?? {}),
82
+ };
83
+ export class ModelPurposesService {
84
+ d;
85
+ constructor(d) {
86
+ this.d = d;
87
+ }
88
+ /** 全部已声明的用途:内核的在前,其后按插件加载顺序。 */
89
+ declared() {
90
+ const out = KERNEL_PURPOSES.map((p) => ({
91
+ purpose: p.purpose,
92
+ kind: p.kind,
93
+ label: { ...p.label },
94
+ declaredBy: "kernel",
95
+ }));
96
+ const seen = new Set(out.map((p) => p.purpose));
97
+ for (const m of this.d.manifests()) {
98
+ for (const p of m.permissions?.models ?? []) {
99
+ if (seen.has(p.purpose))
100
+ continue;
101
+ seen.add(p.purpose);
102
+ out.push({
103
+ purpose: p.purpose,
104
+ kind: p.kind,
105
+ label: { zh: p.label.zh, en: p.label.en },
106
+ declaredBy: m.name,
107
+ });
108
+ }
109
+ }
110
+ return out;
111
+ }
112
+ find(purpose) {
113
+ const p = this.declared().find((x) => x.purpose === purpose);
114
+ if (!p)
115
+ throw unknownPurpose(purpose);
116
+ return p;
117
+ }
118
+ async rows(purposes, orgId) {
119
+ if (purposes.length === 0)
120
+ return [];
121
+ return this.d.db
122
+ .selectFrom("model_purpose_mappings")
123
+ .select(["org_id", "purpose", "provider", "model", "params"])
124
+ .where("purpose", "in", purposes)
125
+ .where((eb) => orgId === undefined
126
+ ? eb("org_id", "is", null)
127
+ : eb.or([eb("org_id", "is", null), eb("org_id", "=", orgId)]))
128
+ .execute();
129
+ }
130
+ async views(decl, orgId) {
131
+ const rows = await this.rows(decl.map((p) => p.purpose), orgId);
132
+ return decl.map((p) => {
133
+ const def = targetOf(rows.find((r) => r.purpose === p.purpose && r.org_id === null));
134
+ const ovr = orgId === undefined
135
+ ? null
136
+ : targetOf(rows.find((r) => r.purpose === p.purpose && r.org_id === orgId));
137
+ return { ...p, default: def, override: ovr, effective: ovr ?? def };
138
+ });
139
+ }
140
+ /** 全部用途与映射;不给 `orgId` = 部署级视图(`override` 一律为 null)。 */
141
+ async list(orgId) {
142
+ return this.views(this.declared(), orgId);
143
+ }
144
+ /** 校验目标:模型可解析(部署范围)、参数按它的声明严格通过。 */
145
+ async check(target) {
146
+ let info;
147
+ try {
148
+ ({ info } = await this.d.registry.resolve(target.model));
149
+ }
150
+ catch (e) {
151
+ if (e instanceof ProviderListError)
152
+ throw e;
153
+ if (e instanceof ApiError && e.code === "agent.model_unavailable") {
154
+ throw invalid([{ path: "target.model", message: "model is not available" }]);
155
+ }
156
+ throw e;
157
+ }
158
+ const issues = paramIssues("target.params", info.parameters, target.params);
159
+ if (issues.length > 0)
160
+ throw invalid(issues);
161
+ }
162
+ async set(orgId, purpose, target, actor, actorTokenId) {
163
+ const decl = this.find(purpose);
164
+ if (target)
165
+ await this.check(target);
166
+ await this.d.db.transaction().execute(async (trx) => {
167
+ if (orgId === null)
168
+ await lockEnterpriseAdminsAndAuthorize(trx, actor);
169
+ else
170
+ await lockOrgAndAuthorize(trx, orgId, actor, "org.models.manage");
171
+ if (target === null) {
172
+ await trx
173
+ .deleteFrom("model_purpose_mappings")
174
+ .where("purpose", "=", purpose)
175
+ .where((eb) => (orgId === null ? eb("org_id", "is", null) : eb("org_id", "=", orgId)))
176
+ .execute();
177
+ }
178
+ else {
179
+ const values = {
180
+ provider: target.model.provider,
181
+ model: target.model.model,
182
+ params: JSON.stringify(target.params),
183
+ updated_by: actor,
184
+ };
185
+ await trx
186
+ .insertInto("model_purpose_mappings")
187
+ .values({ org_id: orgId, purpose, ...values })
188
+ .onConflict((oc) => oc
189
+ .constraint("model_purpose_mappings_scope_key")
190
+ .doUpdateSet({ ...values, updated_at: new Date() }))
191
+ .execute();
192
+ }
193
+ await audit(trx, {
194
+ actorAccountId: actor,
195
+ ...(actorTokenId !== undefined && { actorTokenId }),
196
+ ...(orgId !== null && { orgId }),
197
+ action: "model.purpose_mapped",
198
+ target: purpose,
199
+ detail: { scope: orgId === null ? "deployment" : "org", target },
200
+ });
201
+ });
202
+ const [view] = await this.views([decl], orgId ?? undefined);
203
+ return view;
204
+ }
205
+ /** 设置(或 `null` 清除)部署默认;只有企业管理员(事务内复核)。 */
206
+ setDefault(purpose, target, actor, actorTokenId) {
207
+ return this.set(null, purpose, target, actor, actorTokenId);
208
+ }
209
+ /** 设置(或 `null` 清除)组织覆盖;事务内锁组织并复核 `org.models.manage`。 */
210
+ setOrg(orgId, purpose, target, actor, actorTokenId) {
211
+ return this.set(orgId, purpose, target, actor, actorTokenId);
212
+ }
213
+ /** 生效的映射:组织覆盖,否则部署默认;都没有 → `model.unconfigured`;用途未声明 → `model.purpose_unknown`。 */
214
+ async resolve(orgId, purpose) {
215
+ const [view] = await this.views([this.find(purpose)], orgId);
216
+ if (!view?.effective) {
217
+ throw new ApiError("model.unconfigured", `No model is configured for the "${purpose}" purpose`);
218
+ }
219
+ return view.effective;
220
+ }
221
+ /**
222
+ * 按用途发一次对话请求:解析映射、按目标模型的声明宽松处理参数(补默认值,与运行时一致),用 `consumeModelStream`
223
+ * 收完(只有流空闲看门狗)。输出上限取 `min(req.maxOutputTokens, 目标模型的 maxOutputTokens)`。
224
+ * 请求发出之前的失败原样抛出;发出之后的失败包成 {@link PurposeAttemptError}(带估算用量)。
225
+ * `opts.fallback`: the target used when the purpose is not mapped (`model.unconfigured`).
226
+ * `opts.beforeSend`: called with the resolved target and the final request just before sending;
227
+ * what it throws is thrown as is (a pre-send failure, e.g. a denied `model.request` hook).
228
+ */
229
+ async chat(orgId, purpose, req, signal, opts = {}) {
230
+ let target;
231
+ try {
232
+ target = await this.resolve(orgId, purpose);
233
+ }
234
+ catch (e) {
235
+ if (!(e instanceof ApiError && e.code === "model.unconfigured") || !opts.fallback)
236
+ throw e;
237
+ target = opts.fallback;
238
+ }
239
+ const { provider, info } = await this.d.registry.resolve(target.model);
240
+ const request = {
241
+ ...req,
242
+ model: info.id,
243
+ params: sanitizeParams(info.parameters, target.params).value,
244
+ // 输出上限不超过目标模型自己的上限(与运行时 assembleModelRequest 一致)
245
+ maxOutputTokens: Math.min(req.maxOutputTokens, info.maxOutputTokens),
246
+ };
247
+ const idleMs = info.streamIdleTimeoutMs ?? this.d.config().runtime.streamIdleMs;
248
+ await opts.beforeSend?.(target.model, request);
249
+ let chars = 0;
250
+ try {
251
+ const out = await consumeModelStream(provider, request, idleMs, signal, (ev) => {
252
+ chars += ev.text.length;
253
+ });
254
+ return {
255
+ content: out.content,
256
+ stopReason: out.stopReason,
257
+ usage: out.usage,
258
+ provider: target.model.provider,
259
+ model: target.model.model,
260
+ };
261
+ }
262
+ catch (err) {
263
+ const tokens = estimateTokens(request.messages, request.system, request.tools) + Math.ceil(chars / 4);
264
+ throw new PurposeAttemptError(err, tokens, target.model.provider, target.model.model);
265
+ }
266
+ }
267
+ }