@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,207 @@
1
+ import { normalizeStoredDefinition } from "../agents/definition.js";
2
+ import { ApiError } from "../errors.js";
3
+ import { childRunDefinition } from "../runtime/subagents/definition.js";
4
+ /** The follow-up narrowing on the last sub-agent task message of `events`, if any. */
5
+ function lastTaskNarrowing(events) {
6
+ const task = events.findLast((e) => e.type === "user_message" && e.payload.dispatch !== undefined);
7
+ return task?.payload?.dispatch?.narrowed;
8
+ }
9
+ const TERMINAL = new Set(["run_finished", "run_failed", "run_aborted"]);
10
+ /** 读事件的分页大小。 */
11
+ const PAGE = 1000;
12
+ /**
13
+ * 给某次运行建用例快照。会话不在该组织、或运行不属于该会话 → `conversation.not_found`;
14
+ * 运行还没有终态事件 → `eval.run_not_finished`(409);序列化后超过 `maxBytes` 字节 → `eval.case_too_large`(413)。
15
+ * `maxBytes` 由调用方传入(`evals.maxCaseBytes`)。
16
+ */
17
+ export async function takeSnapshot(db, orgId, conversationId, runId, maxBytes) {
18
+ const conv = await db
19
+ .selectFrom("conversations")
20
+ .select(["agent_id", "kind"])
21
+ .where("id", "=", conversationId)
22
+ .where("org_id", "=", orgId)
23
+ .executeTakeFirst();
24
+ const run = conv
25
+ ? await db
26
+ .selectFrom("runs")
27
+ .select("agent_version")
28
+ .where("id", "=", runId)
29
+ .where("conversation_id", "=", conversationId)
30
+ .executeTakeFirst()
31
+ : undefined;
32
+ if (!conv || !run) {
33
+ throw new ApiError("conversation.not_found", "Conversation or run not found");
34
+ }
35
+ const end = await db
36
+ .selectFrom("conversation_events")
37
+ .select("seq")
38
+ .where("conversation_id", "=", conversationId)
39
+ .where("run_id", "=", runId)
40
+ .where("type", "in", [...TERMINAL])
41
+ .orderBy("seq")
42
+ .executeTakeFirst();
43
+ if (!end)
44
+ throw new ApiError("eval.run_not_finished", "The run has not finished yet");
45
+ const endSeq = Number(end.seq);
46
+ const tooLarge = () => new ApiError("eval.case_too_large", `The run's snapshot is larger than the ${maxBytes}-byte limit`);
47
+ const events = [];
48
+ /** 已读事件序列化后的字节数(快照总大小的下界):一超过上限就停,不把超大的对话整个读进内存。 */
49
+ let bytes = 0;
50
+ let after = 0;
51
+ for (;;) {
52
+ const rows = await db
53
+ .selectFrom("conversation_events")
54
+ .select(["seq", "type", "run_id", "payload", "created_at"])
55
+ .where("conversation_id", "=", conversationId)
56
+ .where("seq", ">", String(after))
57
+ .where("seq", "<=", String(endSeq))
58
+ .orderBy("seq")
59
+ .limit(PAGE)
60
+ .execute();
61
+ for (const r of rows) {
62
+ const e = {
63
+ seq: Number(r.seq),
64
+ type: r.type,
65
+ payload: r.payload,
66
+ runId: r.run_id,
67
+ createdAt: new Date(r.created_at).toISOString(),
68
+ };
69
+ bytes += Buffer.byteLength(JSON.stringify(e));
70
+ if (bytes > maxBytes)
71
+ throw tooLarge();
72
+ events.push(e);
73
+ }
74
+ const last = rows.at(-1);
75
+ if (rows.length < PAGE || !last)
76
+ break;
77
+ after = Number(last.seq);
78
+ }
79
+ const versions = new Set([run.agent_version]);
80
+ const hashes = new Set();
81
+ for (const e of events) {
82
+ if (e.type === "run_started") {
83
+ versions.add(e.payload.agentVersion);
84
+ }
85
+ else if (e.type === "model_call") {
86
+ const req = e.payload.request;
87
+ for (const t of [...(req.tools ?? []), ...(req.catalog ?? [])])
88
+ hashes.add(t.specHash);
89
+ }
90
+ }
91
+ const definitions = {};
92
+ const defRows = await db
93
+ .selectFrom("agent_versions")
94
+ .select(["version", "definition"])
95
+ .where("agent_id", "=", conv.agent_id)
96
+ .where("version", "in", [...versions])
97
+ .orderBy("version")
98
+ .execute();
99
+ for (const r of defRows) {
100
+ definitions[String(r.version)] = normalizeStoredDefinition(r.definition);
101
+ }
102
+ const toolSpecs = {};
103
+ if (hashes.size > 0) {
104
+ const specRows = await db
105
+ .selectFrom("tool_specs")
106
+ .select(["spec_hash", "spec"])
107
+ .where("spec_hash", "in", [...hashes].sort())
108
+ .orderBy("spec_hash")
109
+ .execute();
110
+ for (const r of specRows)
111
+ toolSpecs[r.spec_hash] = r.spec;
112
+ }
113
+ const started = events.find((e) => e.type === "subagent_started")?.payload;
114
+ const invokedSkill = started?.template.invokedSkill;
115
+ const dispatch = conv.kind === "subagent"
116
+ ? await db
117
+ .selectFrom("subagent_dispatches")
118
+ .select(["parent_conversation_id", "parent_run_id", "parent_call_id"])
119
+ .where("child_run_id", "=", runId)
120
+ .executeTakeFirst()
121
+ : undefined;
122
+ const snapshot = {
123
+ version: 1,
124
+ orgId,
125
+ conversationId,
126
+ runId,
127
+ agentId: conv.agent_id,
128
+ agentVersion: run.agent_version,
129
+ events,
130
+ definitions,
131
+ toolSpecs,
132
+ ...(started !== undefined && {
133
+ subagent: {
134
+ // this run's definition: the frozen one with its follow-up's narrowing (final review
135
+ // I1); the run's task message is the last one up to its terminal event
136
+ definition: childRunDefinition(normalizeStoredDefinition(started.definition), lastTaskNarrowing(events)),
137
+ preamble: started.preamble,
138
+ ...(invokedSkill !== undefined && { invokedSkill }),
139
+ },
140
+ }),
141
+ ...(dispatch !== undefined && {
142
+ parent: {
143
+ conversationId: dispatch.parent_conversation_id,
144
+ runId: dispatch.parent_run_id,
145
+ callId: dispatch.parent_call_id,
146
+ },
147
+ }),
148
+ };
149
+ if (Buffer.byteLength(JSON.stringify(snapshot)) > maxBytes)
150
+ throw tooLarge();
151
+ return snapshot;
152
+ }
153
+ /**
154
+ * 读出库里存的快照(`eval_cases.snapshot`):把各版本定义里改名前(D17)的 `{ kind: "app" }` 工具引用规范化为
155
+ * connector 形(C27)。整轮回放会把定义交给实时注册表,不规范化的话连接器工具全部失效。其余字段原样。
156
+ */
157
+ export function readSnapshot(raw) {
158
+ const s = raw;
159
+ const definitions = {};
160
+ for (const [v, d] of Object.entries(s.definitions ?? {})) {
161
+ definitions[v] = normalizeStoredDefinition(d);
162
+ }
163
+ return {
164
+ ...s,
165
+ definitions,
166
+ ...(s.subagent !== undefined && {
167
+ subagent: { ...s.subagent, definition: normalizeStoredDefinition(s.subagent.definition) },
168
+ }),
169
+ };
170
+ }
171
+ /** 快照事件还原为日志事件(`createdAt` 转回 Date)。 */
172
+ export function toEvents(s) {
173
+ return s.events.map((e) => ({
174
+ conversationId: s.conversationId,
175
+ seq: e.seq,
176
+ type: e.type,
177
+ payload: e.payload,
178
+ runId: e.runId,
179
+ createdAt: new Date(e.createdAt),
180
+ }));
181
+ }
182
+ /**
183
+ * 快照运行里可单步回放的模型调用:每步的最后一次尝试(含收尾调用),且该步有回复(`assistant_message`);
184
+ * 没有回复的步骤(尝试都失败)不在其中。按 seq 升序。
185
+ */
186
+ export function replayableCalls(s) {
187
+ const lastCall = new Map();
188
+ const replies = new Map();
189
+ for (const e of s.events) {
190
+ if (e.runId !== s.runId)
191
+ continue;
192
+ if (e.type === "model_call") {
193
+ lastCall.set(e.payload.step, e.seq);
194
+ }
195
+ else if (e.type === "assistant_message") {
196
+ const step = e.payload.step;
197
+ replies.set(step, [...(replies.get(step) ?? []), e.seq]);
198
+ }
199
+ }
200
+ const out = [];
201
+ for (const [step, seq] of lastCall) {
202
+ const reply = replies.get(step)?.find((r) => r > seq);
203
+ if (reply !== undefined)
204
+ out.push({ seq, step, assistantSeq: reply });
205
+ }
206
+ return out.sort((a, b) => a.seq - b.seq);
207
+ }
@@ -0,0 +1,113 @@
1
+ import { type ContentBlock, type ModelUsage, type ParamValue, type StopReason } from "@capybara-hq/plugin-sdk";
2
+ import type { AgentDefinition, ModelRef } from "../agents/definition.js";
3
+ import type { KernelConfig } from "../config/schema.js";
4
+ import { type Selection } from "../conversations/selection.js";
5
+ import { type MediaSourceDeps } from "../runtime/model-call.js";
6
+ import type { ProviderRegistry } from "../runtime/providers.js";
7
+ import { type DriftReason } from "./reconstruct.js";
8
+ import type { CaseSnapshot } from "./snapshot.js";
9
+ /**
10
+ * 单步回放(D2 / C5):由用例快照还原某一步的模型请求,换成候选(agent 版本 / 模型 / 参数 / 指令)重发,
11
+ * 与快照里该步的回复(基线)比较。工具定义沿用记录(C5);媒体按快照的组织与对话取原附件(C3)。
12
+ * 只读快照,不写任何日志。
13
+ */
14
+ /** 评测候选:各项都可缺省(缺省 = 沿用用例自己的)。 */
15
+ export interface EvalCandidate {
16
+ agentVersion?: number;
17
+ model?: ModelRef;
18
+ modelParams?: Record<string, ParamValue>;
19
+ instructions?: string;
20
+ }
21
+ /** 某个用例上的候选({@link resolveCandidate})。 */
22
+ export interface ResolvedCandidate {
23
+ definition: AgentDefinition;
24
+ agentVersion: number;
25
+ model: ModelRef;
26
+ /** 发送前再按候选模型的声明宽松处理(补默认值,见 {@link replayStep})。 */
27
+ params: Record<string, ParamValue>;
28
+ /** 与用例的原版本、原定义完全相同时为 false:此时按基线还原(不改 system / 参数,漂移可比)。 */
29
+ changed: boolean;
30
+ /** The run used a person's model switch and the candidate's model replaces it (`model_switched`). */
31
+ overridesSwitch: boolean;
32
+ /**
33
+ * A plugin template's child case: the template's current version (set by the worker), compared
34
+ * with the logged one for `subagent_changed` when the candidate changed.
35
+ */
36
+ subagentTemplate?: {
37
+ id: string;
38
+ version: number;
39
+ };
40
+ /**
41
+ * A child case under another agent version: that version's own definition (with the candidate's
42
+ * instructions), compared with the logged sub-agent for `subagent_changed`. Never rendered.
43
+ */
44
+ subagentVersion?: AgentDefinition;
45
+ }
46
+ /** Where a child case's sub-agent came from (`subagent_started.template.source`). */
47
+ export type SubagentSource = "general" | "inline" | "plugin" | "agent";
48
+ /** 候选一次请求的输出。 */
49
+ export interface ReplayOutput {
50
+ content: ContentBlock[];
51
+ stopReason: StopReason;
52
+ usage: ModelUsage;
53
+ provider: string;
54
+ model: string;
55
+ latencyMs: number;
56
+ }
57
+ export interface StepReplayDeps {
58
+ registry: Pick<ProviderRegistry, "resolve">;
59
+ config: () => KernelConfig;
60
+ /** 附件来源(与运行时同一个,按组织 + 对话取);不给时媒体一律按「不再可用」占位。 */
61
+ media?: MediaSourceDeps;
62
+ }
63
+ /**
64
+ * 候选在某个用例上所用的模型({@link resolveCandidate} 的同一规则):候选模型,否则候选版本的模型,否则用例原版本的
65
+ * 模型(`baseModel`)。估算只用存好的 `base_model`,不读快照。
66
+ * A child case (`subagent` given) keeps its logged model unless the candidate names one; only an
67
+ * org agent child (`agent`) takes another version's model, as its dispatch would (a template's
68
+ * tier does not follow the parent's model).
69
+ */
70
+ export declare function candidateModel(baseModel: ModelRef, c: EvalCandidate, versionDef?: AgentDefinition, switchedModel?: ModelRef, subagent?: SubagentSource): ModelRef;
71
+ /**
72
+ * 候选落到某个用例上:定义取候选版本的(`versionDef`,由调用方按 `agentVersion` 查好),否则用例自己的版本;
73
+ * 指令、模型覆盖其上。参数:给了用候选的;没给时模型未变沿用定义的 `modelParams`,换了模型为空(原参数属于原模型)。
74
+ * `base.definition` is the definition the run used (`caseBase`: the person's switch applied); a
75
+ * candidate version gets the same switch (`base.selection`) unless the candidate sets a model.
76
+ */
77
+ export declare function resolveCandidate(base: {
78
+ definition: AgentDefinition;
79
+ agentVersion: number;
80
+ selection?: Selection;
81
+ }, c: EvalCandidate, versionDef?: AgentDefinition,
82
+ /** A child case: its sub-agent's source (the definition is then always the logged one). */
83
+ subagent?: SubagentSource): ResolvedCandidate;
84
+ /**
85
+ * 候选请求已经发出、但没有正常收完(出错、超时、中止):`tokens` 是这次尝试应计入预算的估算用量,
86
+ * `cause` 是原始错误(调用方按它分类重试)。请求发出之前的失败(解析模型、取附件)原样抛出,不计费。
87
+ */
88
+ export declare class ReplayAttemptError extends Error {
89
+ readonly cause: unknown;
90
+ readonly tokens: number;
91
+ constructor(cause: unknown, tokens: number);
92
+ }
93
+ /**
94
+ * 回放一步:基线取快照里该步的回复与用量;候选请求 = `reconstructRequest`(候选未变时按基线还原,
95
+ * 否则带候选的定义、版本与参数——参数按候选模型的声明宽松处理,与运行时一致),用 `consumeModelStream` 收完。
96
+ * 请求发出之前的错误原样抛出(`agent.model_unavailable`、取附件暂时失败为 `MediaUnavailableError`);请求发出之后的
97
+ * 错误包成 {@link ReplayAttemptError}(带估算用量,调用方计入预算后按 `cause` 分类重试)。
98
+ * 模型按部署范围解析(与运行时一致;组织级模型准入若在第二段落地,须同样覆盖评测候选)。
99
+ * 不另设单次请求的墙钟时限:与运行时一样只有流空闲看门狗(`streamIdleTimeoutMs` / `runtime.streamIdleMs`)。
100
+ */
101
+ export declare function replayStep(d: StepReplayDeps, s: CaseSnapshot, call: {
102
+ seq: number;
103
+ step: number;
104
+ assistantSeq: number;
105
+ }, candidate: ResolvedCandidate, signal: AbortSignal): Promise<{
106
+ baseline: {
107
+ content: ContentBlock[];
108
+ stopReason: StopReason;
109
+ usage: ModelUsage | null;
110
+ };
111
+ candidate: ReplayOutput;
112
+ drift: DriftReason[];
113
+ }>;
@@ -0,0 +1,181 @@
1
+ import { sanitizeParams, } from "@capybara-hq/plugin-sdk";
2
+ import { effectiveDefinition, NO_SELECTION, sameModel, } from "../conversations/selection.js";
3
+ import { estimateTokens } from "../runtime/context/tokens.js";
4
+ import { consumeModelStream, MediaUnavailableError, } from "../runtime/model-call.js";
5
+ import { loadSnapshotMedia, reconstructRequest } from "./reconstruct.js";
6
+ /** 键排序后的 JSON(比较参数是否相同)。 */
7
+ const canonical = (v) => JSON.stringify(Object.keys(v)
8
+ .sort()
9
+ .map((k) => [k, v[k]]));
10
+ /**
11
+ * 候选在某个用例上所用的模型({@link resolveCandidate} 的同一规则):候选模型,否则候选版本的模型,否则用例原版本的
12
+ * 模型(`baseModel`)。估算只用存好的 `base_model`,不读快照。
13
+ * A child case (`subagent` given) keeps its logged model unless the candidate names one; only an
14
+ * org agent child (`agent`) takes another version's model, as its dispatch would (a template's
15
+ * tier does not follow the parent's model).
16
+ */
17
+ export function candidateModel(baseModel, c, versionDef, switchedModel, subagent) {
18
+ if (c.model !== undefined)
19
+ return c.model;
20
+ if (subagent !== undefined && subagent !== "agent")
21
+ return baseModel;
22
+ // a candidate version keeps the person's switch, as resolveCandidate replays it (a child case
23
+ // has no switch: its model is the logged one)
24
+ if (c.agentVersion !== undefined && versionDef !== undefined) {
25
+ return switchedModel ?? versionDef.model;
26
+ }
27
+ return baseModel;
28
+ }
29
+ /**
30
+ * 候选落到某个用例上:定义取候选版本的(`versionDef`,由调用方按 `agentVersion` 查好),否则用例自己的版本;
31
+ * 指令、模型覆盖其上。参数:给了用候选的;没给时模型未变沿用定义的 `modelParams`,换了模型为空(原参数属于原模型)。
32
+ * `base.definition` is the definition the run used (`caseBase`: the person's switch applied); a
33
+ * candidate version gets the same switch (`base.selection`) unless the candidate sets a model.
34
+ */
35
+ export function resolveCandidate(base, c, versionDef,
36
+ /** A child case: its sub-agent's source (the definition is then always the logged one). */
37
+ subagent) {
38
+ const selection = base.selection ?? NO_SELECTION;
39
+ const agentVersion = c.agentVersion ?? base.agentVersion;
40
+ // a child case renders its logged effective definition; another version is only compared
41
+ const from = subagent === undefined && c.agentVersion !== undefined && versionDef !== undefined
42
+ ? effectiveDefinition(versionDef, selection)
43
+ : base.definition;
44
+ const model = candidateModel(base.definition.model, c, versionDef, selection.model ?? undefined, subagent);
45
+ // an org agent child under another version runs that version's params, as its dispatch would,
46
+ // even when the model stayed the same
47
+ const orgAgentVersion = subagent === "agent" && c.agentVersion !== undefined && versionDef !== undefined
48
+ ? versionDef
49
+ : undefined;
50
+ const params = c.modelParams ??
51
+ (orgAgentVersion !== undefined && sameModel(model, orgAgentVersion.model)
52
+ ? { ...(orgAgentVersion.modelParams ?? {}) }
53
+ : sameModel(model, from.model)
54
+ ? { ...(from.modelParams ?? {}) }
55
+ : {});
56
+ const definition = {
57
+ ...from,
58
+ model,
59
+ modelParams: params,
60
+ ...(c.instructions !== undefined && { instructions: c.instructions }),
61
+ };
62
+ const changed = agentVersion !== base.agentVersion ||
63
+ !sameModel(model, base.definition.model) ||
64
+ definition.instructions !== base.definition.instructions ||
65
+ canonical(params) !== canonical(base.definition.modelParams ?? {});
66
+ const overridesSwitch = selection.model !== null && !sameModel(model, selection.model);
67
+ const otherVersion = subagent !== undefined && agentVersion !== base.agentVersion && versionDef !== undefined;
68
+ return {
69
+ definition,
70
+ agentVersion,
71
+ model,
72
+ params,
73
+ changed,
74
+ overridesSwitch,
75
+ ...(otherVersion && {
76
+ subagentVersion: {
77
+ ...versionDef,
78
+ ...(c.instructions !== undefined && { instructions: c.instructions }),
79
+ },
80
+ }),
81
+ };
82
+ }
83
+ /**
84
+ * 候选请求已经发出、但没有正常收完(出错、超时、中止):`tokens` 是这次尝试应计入预算的估算用量,
85
+ * `cause` 是原始错误(调用方按它分类重试)。请求发出之前的失败(解析模型、取附件)原样抛出,不计费。
86
+ */
87
+ export class ReplayAttemptError extends Error {
88
+ cause;
89
+ tokens;
90
+ constructor(cause, tokens) {
91
+ super(cause instanceof Error ? cause.message : String(cause), { cause });
92
+ this.cause = cause;
93
+ this.tokens = tokens;
94
+ this.name = "ReplayAttemptError";
95
+ }
96
+ }
97
+ /** 快照里该步的回复(`assistantSeq`)与其后同一步的第一条 usage。 */
98
+ function baselineOf(s, call) {
99
+ const reply = s.events.find((e) => e.seq === call.assistantSeq);
100
+ const p = (reply?.payload ?? { content: [], stopReason: "end_turn" });
101
+ const usage = s.events.find((e) => e.type === "usage" &&
102
+ e.payload.purpose === undefined &&
103
+ e.runId === s.runId &&
104
+ e.seq > call.seq &&
105
+ e.payload.step === call.step);
106
+ let u = null;
107
+ if (usage) {
108
+ const x = usage.payload;
109
+ u = {
110
+ inputTokens: x.inputTokens,
111
+ outputTokens: x.outputTokens,
112
+ cacheReadTokens: x.cacheReadTokens,
113
+ cacheWriteTokens: x.cacheWriteTokens,
114
+ };
115
+ }
116
+ return { content: p.content, stopReason: p.stopReason, usage: u };
117
+ }
118
+ /**
119
+ * 回放一步:基线取快照里该步的回复与用量;候选请求 = `reconstructRequest`(候选未变时按基线还原,
120
+ * 否则带候选的定义、版本与参数——参数按候选模型的声明宽松处理,与运行时一致),用 `consumeModelStream` 收完。
121
+ * 请求发出之前的错误原样抛出(`agent.model_unavailable`、取附件暂时失败为 `MediaUnavailableError`);请求发出之后的
122
+ * 错误包成 {@link ReplayAttemptError}(带估算用量,调用方计入预算后按 `cause` 分类重试)。
123
+ * 模型按部署范围解析(与运行时一致;组织级模型准入若在第二段落地,须同样覆盖评测候选)。
124
+ * 不另设单次请求的墙钟时限:与运行时一样只有流空闲看门狗(`streamIdleTimeoutMs` / `runtime.streamIdleMs`)。
125
+ */
126
+ export async function replayStep(d, s, call, candidate, signal) {
127
+ const baseline = baselineOf(s, call);
128
+ const { provider, info } = await d.registry.resolve(candidate.model);
129
+ let media;
130
+ if (d.media) {
131
+ try {
132
+ media = await loadSnapshotMedia(s, call.seq, info, d.media);
133
+ }
134
+ catch (err) {
135
+ throw new MediaUnavailableError(err);
136
+ }
137
+ }
138
+ const { request, drift, mediaTokens } = reconstructRequest(s, call.seq, {
139
+ model: info,
140
+ ...(candidate.changed && {
141
+ definition: candidate.definition,
142
+ agentVersion: candidate.agentVersion,
143
+ params: sanitizeParams(info.parameters, candidate.params).value,
144
+ modelRef: candidate.model,
145
+ ...(candidate.subagentTemplate !== undefined && {
146
+ subagentTemplate: candidate.subagentTemplate,
147
+ }),
148
+ ...(candidate.subagentVersion !== undefined && {
149
+ subagentVersion: candidate.subagentVersion,
150
+ }),
151
+ }),
152
+ ...(media !== undefined && { mediaInfo: media.mediaInfo, media: media.media }),
153
+ });
154
+ const idleMs = info.streamIdleTimeoutMs ?? d.config().runtime.streamIdleMs;
155
+ const started = Date.now();
156
+ let streamedChars = 0;
157
+ let out;
158
+ try {
159
+ out = await consumeModelStream(provider, request, idleMs, signal, (ev) => {
160
+ streamedChars += ev.text.length;
161
+ });
162
+ }
163
+ catch (err) {
164
+ // 请求已发出:供应商流里不带中途用量(model-provider@2 只在 message_complete 给 usage),
165
+ // 按估算计费——输入 = 与运行时同一个估算器,输出 = 已流出的字符数 / 4
166
+ const input = estimateTokens(request.messages, request.system, request.tools, mediaTokens);
167
+ throw new ReplayAttemptError(err, input + Math.ceil(streamedChars / 4));
168
+ }
169
+ return {
170
+ baseline,
171
+ candidate: {
172
+ content: out.content,
173
+ stopReason: out.stopReason,
174
+ usage: out.usage,
175
+ provider: candidate.model.provider,
176
+ model: candidate.model.model,
177
+ latencyMs: Date.now() - started,
178
+ },
179
+ drift,
180
+ };
181
+ }
@@ -0,0 +1,41 @@
1
+ import { z } from "zod";
2
+ import { type Principal } from "../identity/principal.js";
3
+ import { type OrgContext } from "../orgs/org.guard.js";
4
+ import { type TrajectoryDetail, type TrajectoryListItem, type TrajectoryService } from "./trajectory.service.js";
5
+ declare const ListQuery: z.ZodObject<{
6
+ agentId: z.ZodOptional<z.ZodString>;
7
+ kind: z.ZodOptional<z.ZodEnum<{
8
+ chat: "chat";
9
+ eval: "eval";
10
+ }>>;
11
+ status: z.ZodOptional<z.ZodEnum<{
12
+ aborted: "aborted";
13
+ completed: "completed";
14
+ failed: "failed";
15
+ queued: "queued";
16
+ running: "running";
17
+ waiting: "waiting";
18
+ }>>;
19
+ before: z.ZodOptional<z.ZodString>;
20
+ limit: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
21
+ }, z.core.$strip>;
22
+ /** 详情的运行窗口:`runId` 与 `before` / `limit` 互斥;都不给时读全对话(形状不变)。 */
23
+ declare const DetailQuery: z.ZodObject<{
24
+ runId: z.ZodOptional<z.ZodString>;
25
+ before: z.ZodOptional<z.ZodString>;
26
+ limit: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
27
+ }, z.core.$strip>;
28
+ /**
29
+ * 轨迹查看器(`/api/v1/orgs/:orgId/trajectories`):`trajectories.read`(member 起、只给人),
30
+ * 服务里再判定「组织管理员或 agent 负责人」;无权一律 404 `trajectory.not_found`。
31
+ */
32
+ export declare class TrajectoryController {
33
+ private readonly trajectories;
34
+ constructor(trajectories: TrajectoryService);
35
+ list(principal: Principal, org: OrgContext, q: z.infer<typeof ListQuery>): Promise<{
36
+ items: TrajectoryListItem[];
37
+ next: string | null;
38
+ }>;
39
+ get(principal: Principal, org: OrgContext, conversationId: string, q: z.infer<typeof DetailQuery>): Promise<TrajectoryDetail>;
40
+ }
41
+ export {};
@@ -0,0 +1,88 @@
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 { Controller, Get, Inject, Param, Query } from "@nestjs/common";
11
+ import { z } from "zod";
12
+ import { TRAJECTORIES } from "../http/tokens.js";
13
+ import { ZodPipe } from "../http/zod.pipe.js";
14
+ import { CurrentPrincipal, patTokenId, requireUser, } from "../identity/principal.js";
15
+ import { CurrentOrg, OrgAction } from "../orgs/org.guard.js";
16
+ import { RUN_STATUSES, } from "./trajectory.service.js";
17
+ const ListQuery = z.object({
18
+ agentId: z.string().min(1).max(100).optional(),
19
+ kind: z.enum(["chat", "eval"]).optional(),
20
+ status: z.enum(RUN_STATUSES).optional(),
21
+ before: z.string().min(1).max(100).optional(),
22
+ limit: z.coerce.number().int().min(1).max(100).default(50),
23
+ });
24
+ /** 详情的运行窗口:`runId` 与 `before` / `limit` 互斥;都不给时读全对话(形状不变)。 */
25
+ const DetailQuery = z
26
+ .object({
27
+ runId: z.string().min(1).max(100).optional(),
28
+ before: z.string().min(1).max(100).optional(),
29
+ limit: z.coerce.number().int().min(1).max(50).optional(),
30
+ })
31
+ .refine((q) => q.runId === undefined || (q.before === undefined && q.limit === undefined), {
32
+ message: "runId cannot be combined with before or limit",
33
+ path: ["runId"],
34
+ });
35
+ /** 只给 `before` 时的页大小。 */
36
+ const DEFAULT_RUN_PAGE = 20;
37
+ /**
38
+ * 轨迹查看器(`/api/v1/orgs/:orgId/trajectories`):`trajectories.read`(member 起、只给人),
39
+ * 服务里再判定「组织管理员或 agent 负责人」;无权一律 404 `trajectory.not_found`。
40
+ */
41
+ let TrajectoryController = class TrajectoryController {
42
+ trajectories;
43
+ constructor(trajectories) {
44
+ this.trajectories = trajectories;
45
+ }
46
+ async list(principal, org, q) {
47
+ const user = requireUser(principal);
48
+ return this.trajectories.list(org.orgId, user.account.id, {
49
+ limit: q.limit,
50
+ ...(q.agentId !== undefined && { agentId: q.agentId }),
51
+ ...(q.kind !== undefined && { kind: q.kind }),
52
+ ...(q.status !== undefined && { status: q.status }),
53
+ ...(q.before !== undefined && { before: q.before }),
54
+ });
55
+ }
56
+ async get(principal, org, conversationId, q) {
57
+ const user = requireUser(principal);
58
+ const window = q.runId !== undefined
59
+ ? { runId: q.runId }
60
+ : q.limit !== undefined || q.before !== undefined
61
+ ? {
62
+ limit: q.limit ?? DEFAULT_RUN_PAGE,
63
+ ...(q.before !== undefined && { before: q.before }),
64
+ }
65
+ : undefined;
66
+ return this.trajectories.get(org.orgId, user.account.id, conversationId, patTokenId(user), window);
67
+ }
68
+ };
69
+ __decorate([
70
+ Get(),
71
+ OrgAction("trajectories.read"),
72
+ __param(0, CurrentPrincipal()),
73
+ __param(1, CurrentOrg()),
74
+ __param(2, Query(new ZodPipe(ListQuery)))
75
+ ], TrajectoryController.prototype, "list", null);
76
+ __decorate([
77
+ Get(":conversationId"),
78
+ OrgAction("trajectories.read"),
79
+ __param(0, CurrentPrincipal()),
80
+ __param(1, CurrentOrg()),
81
+ __param(2, Param("conversationId")),
82
+ __param(3, Query(new ZodPipe(DetailQuery)))
83
+ ], TrajectoryController.prototype, "get", null);
84
+ TrajectoryController = __decorate([
85
+ Controller("api/v1/orgs/:orgId/trajectories"),
86
+ __param(0, Inject(TRAJECTORIES))
87
+ ], TrajectoryController);
88
+ export { TrajectoryController };