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

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 (631) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +2 -0
  3. package/README.md +20 -2
  4. package/bootstrap.json +22 -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 +1125 -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 +223 -0
  112. package/dist/config/schema.js +1151 -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 +422 -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 +150 -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 +210 -0
  166. package/dist/errors.js +212 -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 +789 -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 +149 -0
  210. package/dist/extensions/bootstrap.js +441 -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 +170 -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 +67 -0
  318. package/dist/index.js +65 -0
  319. package/dist/kernel.d.ts +256 -0
  320. package/dist/kernel.js +1326 -0
  321. package/dist/log.d.ts +48 -0
  322. package/dist/log.js +229 -0
  323. package/dist/models/prices.d.ts +53 -0
  324. package/dist/models/prices.js +121 -0
  325. package/dist/models/purposes.controller.d.ts +19 -0
  326. package/dist/models/purposes.controller.js +56 -0
  327. package/dist/models/purposes.d.ts +140 -0
  328. package/dist/models/purposes.js +267 -0
  329. package/dist/net/proxy.d.ts +44 -0
  330. package/dist/net/proxy.js +162 -0
  331. package/dist/net/public-address.d.ts +60 -0
  332. package/dist/net/public-address.js +271 -0
  333. package/dist/net/safe-fetch.d.ts +38 -0
  334. package/dist/net/safe-fetch.js +140 -0
  335. package/dist/orgs/directory-sync.controller.d.ts +14 -0
  336. package/dist/orgs/directory-sync.controller.js +40 -0
  337. package/dist/orgs/directory-sync.d.ts +166 -0
  338. package/dist/orgs/directory-sync.js +558 -0
  339. package/dist/orgs/invitations.controller.d.ts +58 -0
  340. package/dist/orgs/invitations.controller.js +137 -0
  341. package/dist/orgs/invitations.service.d.ts +80 -0
  342. package/dist/orgs/invitations.service.js +217 -0
  343. package/dist/orgs/members.service.d.ts +63 -0
  344. package/dist/orgs/members.service.js +234 -0
  345. package/dist/orgs/offboarding.d.ts +141 -0
  346. package/dist/orgs/offboarding.js +398 -0
  347. package/dist/orgs/org-lock.d.ts +32 -0
  348. package/dist/orgs/org-lock.js +46 -0
  349. package/dist/orgs/org.guard.d.ts +35 -0
  350. package/dist/orgs/org.guard.js +95 -0
  351. package/dist/orgs/orgs.controller.d.ts +78 -0
  352. package/dist/orgs/orgs.controller.js +192 -0
  353. package/dist/orgs/orgs.service.d.ts +61 -0
  354. package/dist/orgs/orgs.service.js +209 -0
  355. package/dist/orgs/roles.d.ts +13 -0
  356. package/dist/orgs/roles.js +58 -0
  357. package/dist/orgs/settings.controller.d.ts +20 -0
  358. package/dist/orgs/settings.controller.js +53 -0
  359. package/dist/orgs/settings.service.d.ts +120 -0
  360. package/dist/orgs/settings.service.js +178 -0
  361. package/dist/packages/npm.d.ts +50 -0
  362. package/dist/packages/npm.js +218 -0
  363. package/dist/packages/provenance.d.ts +47 -0
  364. package/dist/packages/provenance.js +147 -0
  365. package/dist/packages/tgz.d.ts +76 -0
  366. package/dist/packages/tgz.js +225 -0
  367. package/dist/runtime/abort.d.ts +32 -0
  368. package/dist/runtime/abort.js +71 -0
  369. package/dist/runtime/checkpointer.d.ts +32 -0
  370. package/dist/runtime/checkpointer.js +243 -0
  371. package/dist/runtime/context/build.d.ts +254 -0
  372. package/dist/runtime/context/build.js +693 -0
  373. package/dist/runtime/context/claude-tools.d.ts +11 -0
  374. package/dist/runtime/context/claude-tools.js +24 -0
  375. package/dist/runtime/context/compaction.d.ts +26 -0
  376. package/dist/runtime/context/compaction.js +195 -0
  377. package/dist/runtime/context/pairing.d.ts +11 -0
  378. package/dist/runtime/context/pairing.js +82 -0
  379. package/dist/runtime/context/reminders.d.ts +5 -0
  380. package/dist/runtime/context/reminders.js +11 -0
  381. package/dist/runtime/context/skills.d.ts +105 -0
  382. package/dist/runtime/context/skills.js +283 -0
  383. package/dist/runtime/context/tokens.d.ts +19 -0
  384. package/dist/runtime/context/tokens.js +104 -0
  385. package/dist/runtime/conversation-lock.d.ts +40 -0
  386. package/dist/runtime/conversation-lock.js +97 -0
  387. package/dist/runtime/hook-calls.d.ts +84 -0
  388. package/dist/runtime/hook-calls.js +136 -0
  389. package/dist/runtime/langgraph-loop.d.ts +52 -0
  390. package/dist/runtime/langgraph-loop.js +247 -0
  391. package/dist/runtime/loop.d.ts +93 -0
  392. package/dist/runtime/loop.js +7 -0
  393. package/dist/runtime/maintenance.d.ts +80 -0
  394. package/dist/runtime/maintenance.js +147 -0
  395. package/dist/runtime/media-cache.d.ts +21 -0
  396. package/dist/runtime/media-cache.js +51 -0
  397. package/dist/runtime/model-call.d.ts +176 -0
  398. package/dist/runtime/model-call.js +1049 -0
  399. package/dist/runtime/providers.d.ts +86 -0
  400. package/dist/runtime/providers.js +224 -0
  401. package/dist/runtime/quota.d.ts +29 -0
  402. package/dist/runtime/quota.js +70 -0
  403. package/dist/runtime/run-finish.d.ts +45 -0
  404. package/dist/runtime/run-finish.js +69 -0
  405. package/dist/runtime/run-queue.d.ts +121 -0
  406. package/dist/runtime/run-queue.js +493 -0
  407. package/dist/runtime/run-worker.d.ts +138 -0
  408. package/dist/runtime/run-worker.js +805 -0
  409. package/dist/runtime/stream.controller.d.ts +34 -0
  410. package/dist/runtime/stream.controller.js +122 -0
  411. package/dist/runtime/stream.d.ts +63 -0
  412. package/dist/runtime/stream.js +262 -0
  413. package/dist/runtime/subagents/child.d.ts +80 -0
  414. package/dist/runtime/subagents/child.js +225 -0
  415. package/dist/runtime/subagents/definition.d.ts +103 -0
  416. package/dist/runtime/subagents/definition.js +392 -0
  417. package/dist/runtime/subagents/dispatch.d.ts +69 -0
  418. package/dist/runtime/subagents/dispatch.js +502 -0
  419. package/dist/runtime/subagents/limits.d.ts +23 -0
  420. package/dist/runtime/subagents/limits.js +34 -0
  421. package/dist/runtime/subagents/org-agents.d.ts +50 -0
  422. package/dist/runtime/subagents/org-agents.js +70 -0
  423. package/dist/runtime/subagents/preamble.d.ts +7 -0
  424. package/dist/runtime/subagents/preamble.js +11 -0
  425. package/dist/runtime/subagents/progress.d.ts +26 -0
  426. package/dist/runtime/subagents/progress.js +36 -0
  427. package/dist/runtime/subagents/roster.d.ts +55 -0
  428. package/dist/runtime/subagents/roster.js +111 -0
  429. package/dist/runtime/subagents/skill-fork.d.ts +123 -0
  430. package/dist/runtime/subagents/skill-fork.js +259 -0
  431. package/dist/runtime/usage-report.d.ts +163 -0
  432. package/dist/runtime/usage-report.js +550 -0
  433. package/dist/runtime/waits.d.ts +233 -0
  434. package/dist/runtime/waits.js +883 -0
  435. package/dist/sandbox/leases.d.ts +169 -0
  436. package/dist/sandbox/leases.js +515 -0
  437. package/dist/sandbox/lifecycle.d.ts +21 -0
  438. package/dist/sandbox/lifecycle.js +68 -0
  439. package/dist/sandbox/sandbox.service.d.ts +249 -0
  440. package/dist/sandbox/sandbox.service.js +908 -0
  441. package/dist/skills/catalog.d.ts +149 -0
  442. package/dist/skills/catalog.js +405 -0
  443. package/dist/skills/changes.controller.d.ts +56 -0
  444. package/dist/skills/changes.controller.js +136 -0
  445. package/dist/skills/changes.service.d.ts +175 -0
  446. package/dist/skills/changes.service.js +805 -0
  447. package/dist/skills/invocable.controller.d.ts +23 -0
  448. package/dist/skills/invocable.controller.js +50 -0
  449. package/dist/skills/invocation-keys.d.ts +23 -0
  450. package/dist/skills/invocation-keys.js +44 -0
  451. package/dist/skills/invoke.d.ts +135 -0
  452. package/dist/skills/invoke.js +286 -0
  453. package/dist/skills/package.d.ts +87 -0
  454. package/dist/skills/package.js +227 -0
  455. package/dist/skills/skills.controller.d.ts +40 -0
  456. package/dist/skills/skills.controller.js +110 -0
  457. package/dist/skills/skills.service.d.ts +192 -0
  458. package/dist/skills/skills.service.js +567 -0
  459. package/dist/storage/prefix.d.ts +36 -0
  460. package/dist/storage/prefix.js +104 -0
  461. package/dist/storage/purge.d.ts +27 -0
  462. package/dist/storage/purge.js +75 -0
  463. package/dist/storage/storage.service.d.ts +44 -0
  464. package/dist/storage/storage.service.js +145 -0
  465. package/dist/text.d.ts +13 -0
  466. package/dist/text.js +13 -0
  467. package/dist/tools/approvals.controller.d.ts +53 -0
  468. package/dist/tools/approvals.controller.js +128 -0
  469. package/dist/tools/approvals.service.d.ts +172 -0
  470. package/dist/tools/approvals.service.js +568 -0
  471. package/dist/tools/breaker.d.ts +28 -0
  472. package/dist/tools/breaker.js +72 -0
  473. package/dist/tools/builtins/agent.d.ts +81 -0
  474. package/dist/tools/builtins/agent.js +223 -0
  475. package/dist/tools/builtins/ask-user.d.ts +28 -0
  476. package/dist/tools/builtins/ask-user.js +139 -0
  477. package/dist/tools/builtins/read-tool-output.d.ts +18 -0
  478. package/dist/tools/builtins/read-tool-output.js +108 -0
  479. package/dist/tools/builtins/sandbox/bash.d.ts +16 -0
  480. package/dist/tools/builtins/sandbox/bash.js +137 -0
  481. package/dist/tools/builtins/sandbox/common.d.ts +114 -0
  482. package/dist/tools/builtins/sandbox/common.js +304 -0
  483. package/dist/tools/builtins/sandbox/deliver.d.ts +5 -0
  484. package/dist/tools/builtins/sandbox/deliver.js +180 -0
  485. package/dist/tools/builtins/sandbox/edit.d.ts +4 -0
  486. package/dist/tools/builtins/sandbox/edit.js +98 -0
  487. package/dist/tools/builtins/sandbox/glob-match.d.ts +25 -0
  488. package/dist/tools/builtins/sandbox/glob-match.js +240 -0
  489. package/dist/tools/builtins/sandbox/glob.d.ts +4 -0
  490. package/dist/tools/builtins/sandbox/glob.js +104 -0
  491. package/dist/tools/builtins/sandbox/grep.d.ts +9 -0
  492. package/dist/tools/builtins/sandbox/grep.js +133 -0
  493. package/dist/tools/builtins/sandbox/index.d.ts +12 -0
  494. package/dist/tools/builtins/sandbox/index.js +27 -0
  495. package/dist/tools/builtins/sandbox/names.d.ts +7 -0
  496. package/dist/tools/builtins/sandbox/names.js +20 -0
  497. package/dist/tools/builtins/sandbox/read.d.ts +8 -0
  498. package/dist/tools/builtins/sandbox/read.js +121 -0
  499. package/dist/tools/builtins/sandbox/write.d.ts +4 -0
  500. package/dist/tools/builtins/sandbox/write.js +88 -0
  501. package/dist/tools/builtins/skill-load.d.ts +53 -0
  502. package/dist/tools/builtins/skill-load.js +446 -0
  503. package/dist/tools/builtins/skill-write.d.ts +59 -0
  504. package/dist/tools/builtins/skill-write.js +244 -0
  505. package/dist/tools/builtins/tool-search.d.ts +31 -0
  506. package/dist/tools/builtins/tool-search.js +171 -0
  507. package/dist/tools/connector-content.controller.d.ts +34 -0
  508. package/dist/tools/connector-content.controller.js +78 -0
  509. package/dist/tools/connector-content.d.ts +104 -0
  510. package/dist/tools/connector-content.js +267 -0
  511. package/dist/tools/connectors.controller.d.ts +210 -0
  512. package/dist/tools/connectors.controller.js +234 -0
  513. package/dist/tools/connectors.service.d.ts +303 -0
  514. package/dist/tools/connectors.service.js +1102 -0
  515. package/dist/tools/credentials.d.ts +139 -0
  516. package/dist/tools/credentials.js +351 -0
  517. package/dist/tools/drift.d.ts +141 -0
  518. package/dist/tools/drift.js +539 -0
  519. package/dist/tools/elicitation.d.ts +81 -0
  520. package/dist/tools/elicitation.js +266 -0
  521. package/dist/tools/endpoint.d.ts +18 -0
  522. package/dist/tools/endpoint.js +115 -0
  523. package/dist/tools/info.d.ts +67 -0
  524. package/dist/tools/info.js +113 -0
  525. package/dist/tools/naming.d.ts +27 -0
  526. package/dist/tools/naming.js +47 -0
  527. package/dist/tools/oauth/discovery.d.ts +65 -0
  528. package/dist/tools/oauth/discovery.js +307 -0
  529. package/dist/tools/oauth/flow.d.ts +63 -0
  530. package/dist/tools/oauth/flow.js +237 -0
  531. package/dist/tools/oauth/oauth.controller.d.ts +31 -0
  532. package/dist/tools/oauth/oauth.controller.js +95 -0
  533. package/dist/tools/oauth/tokens.d.ts +111 -0
  534. package/dist/tools/oauth/tokens.js +258 -0
  535. package/dist/tools/outputs.d.ts +61 -0
  536. package/dist/tools/outputs.js +156 -0
  537. package/dist/tools/pipeline.d.ts +322 -0
  538. package/dist/tools/pipeline.js +1236 -0
  539. package/dist/tools/policy.d.ts +60 -0
  540. package/dist/tools/policy.js +236 -0
  541. package/dist/tools/questions.controller.d.ts +24 -0
  542. package/dist/tools/questions.controller.js +58 -0
  543. package/dist/tools/questions.service.d.ts +103 -0
  544. package/dist/tools/questions.service.js +295 -0
  545. package/dist/tools/redact.d.ts +20 -0
  546. package/dist/tools/redact.js +60 -0
  547. package/dist/tools/registry.d.ts +246 -0
  548. package/dist/tools/registry.js +481 -0
  549. package/dist/tools/resources.d.ts +16 -0
  550. package/dist/tools/resources.js +76 -0
  551. package/dist/tools/specs.d.ts +14 -0
  552. package/dist/tools/specs.js +31 -0
  553. package/dist/tools/validate.d.ts +20 -0
  554. package/dist/tools/validate.js +183 -0
  555. package/dist/tools/view.d.ts +43 -0
  556. package/dist/tools/view.js +225 -0
  557. package/dist/ui/embed-token.d.ts +31 -0
  558. package/dist/ui/embed-token.js +132 -0
  559. package/dist/ui/registry.d.ts +58 -0
  560. package/dist/ui/registry.js +90 -0
  561. package/dist/ui/ui-stream.d.ts +37 -0
  562. package/dist/ui/ui-stream.js +162 -0
  563. package/dist/ui/views.controller.d.ts +81 -0
  564. package/dist/ui/views.controller.js +261 -0
  565. package/dist/ui/views.d.ts +155 -0
  566. package/dist/ui/views.js +306 -0
  567. package/dist/version.d.ts +5 -0
  568. package/dist/version.js +6 -0
  569. package/package.json +67 -3
  570. package/src/migrations/0001_init.sql +8 -0
  571. package/src/migrations/0002_secrets.sql +8 -0
  572. package/src/migrations/0003_identity.sql +117 -0
  573. package/src/migrations/0004_plugin_org_config_nullable.sql +3 -0
  574. package/src/migrations/0005_agents.sql +27 -0
  575. package/src/migrations/0006_conversations.sql +37 -0
  576. package/src/migrations/0007_checkpoints.sql +26 -0
  577. package/src/migrations/0008_runs_trigger_seq.sql +3 -0
  578. package/src/migrations/0009_runs_active_unique.sql +4 -0
  579. package/src/migrations/0010_tools.sql +125 -0
  580. package/src/migrations/0011_approvals_spec.sql +10 -0
  581. package/src/migrations/0012_run_waits.sql +24 -0
  582. package/src/migrations/0013_app_tools_source.sql +4 -0
  583. package/src/migrations/0014_tool_specs.sql +8 -0
  584. package/src/migrations/0015_tool_drift.sql +20 -0
  585. package/src/migrations/0016_plugin_permissions.sql +11 -0
  586. package/src/migrations/0017_identity_sources.sql +6 -0
  587. package/src/migrations/0018_channels.sql +74 -0
  588. package/src/migrations/0019_identity_trust.sql +17 -0
  589. package/src/migrations/0020_channel_card_lookup.sql +10 -0
  590. package/src/migrations/0021_org_storage_purge.sql +9 -0
  591. package/src/migrations/0022_attachments.sql +29 -0
  592. package/src/migrations/0023_sandboxes.sql +37 -0
  593. package/src/migrations/0024_skills.sql +46 -0
  594. package/src/migrations/0025_skills_catalog_idx.sql +6 -0
  595. package/src/migrations/0026_skill_changes.sql +34 -0
  596. package/src/migrations/0027_model_prices.sql +18 -0
  597. package/src/migrations/0028_evals.sql +105 -0
  598. package/src/migrations/0029_model_purposes.sql +18 -0
  599. package/src/migrations/0030_plugin_installs.sql +73 -0
  600. package/src/migrations/0031_plugin_snapshot_source.sql +6 -0
  601. package/src/migrations/0032_plugin_deployment_configs.sql +10 -0
  602. package/src/migrations/0033_rename_apps_to_connectors.sql +25 -0
  603. package/src/migrations/0034_directory.sql +49 -0
  604. package/src/migrations/0035_catalogs.sql +40 -0
  605. package/src/migrations/0036_app_import_staging.sql +17 -0
  606. package/src/migrations/0037_directory_installs.sql +92 -0
  607. package/src/migrations/0038_channel_inbound_mode.sql +6 -0
  608. package/src/migrations/0039_channel_card_pending.sql +8 -0
  609. package/src/migrations/0040_usage_report_sweep.sql +10 -0
  610. package/src/migrations/0041_rename_plugins_to_extensions.sql +38 -0
  611. package/src/migrations/0042_rename_directory_to_catalog.sql +80 -0
  612. package/src/migrations/0043_rename_app_installs_to_plugin_installs.sql +20 -0
  613. package/src/migrations/0044_catalog_one_kind.sql +90 -0
  614. package/src/migrations/0045_plugin_dependencies.sql +9 -0
  615. package/src/migrations/0046_git_sources.sql +25 -0
  616. package/src/migrations/0047_marketplace_entry_heads.sql +7 -0
  617. package/src/migrations/0048_marketplace_entry_trees.sql +8 -0
  618. package/src/migrations/0049_plugin_upgrades.sql +37 -0
  619. package/src/migrations/0050_bootstrap.sql +53 -0
  620. package/src/migrations/0051_claude_compat.sql +26 -0
  621. package/src/migrations/0052_conversations_account_agent_idx.sql +5 -0
  622. package/src/migrations/0053_subagents.sql +73 -0
  623. package/src/migrations/0054_subagent_wait_expiry.sql +7 -0
  624. package/src/migrations/0055_subagent_parent_indexes.sql +10 -0
  625. package/src/migrations/0056_approval_reason.sql +3 -0
  626. package/src/migrations/0057_conversation_titles.sql +11 -0
  627. package/src/migrations/0058_conversation_selection.sql +4 -0
  628. package/src/migrations/0059_conversation_queue.sql +22 -0
  629. package/src/migrations/0060_file_previewers.sql +10 -0
  630. package/src/migrations/0061_queue_selection.sql +5 -0
  631. package/src/migrations/0062_queued_skill.sql +8 -0
@@ -0,0 +1,100 @@
1
+ import { type FilePreviewer, type Logger, type UiView } from "@capybara-hq/plugin-sdk";
2
+ import type { ConversationFiles } from "../conversations/files.js";
3
+ import type { KernelDb } from "../db/kernel-schema.js";
4
+ import type { ExtensionHost } from "../extensions/host.js";
5
+ import type { StorageService } from "../storage/storage.service.js";
6
+ /** Time limit of a previewer's render (UI refresh spec §5.3: 10 s on the conversation page). */
7
+ export declare const FILE_PREVIEW_TIMEOUT_MS = 10000;
8
+ /** A previewer that takes a file, as listed for the conversation page. */
9
+ export interface PreviewerItem {
10
+ plugin: string;
11
+ id: string;
12
+ title: {
13
+ zh: string;
14
+ en: string;
15
+ };
16
+ kind: "view" | "embed";
17
+ /** The most bytes the previewer takes: the web caps what it posts to an embed at this. */
18
+ maxBytes: number;
19
+ }
20
+ /** A previewer in the org's order (the admin list). */
21
+ export interface OrgPreviewerItem extends PreviewerItem {
22
+ accepts: FilePreviewer["accepts"];
23
+ maxBytes: number;
24
+ position: number;
25
+ disabled: boolean;
26
+ }
27
+ export interface PreviewerRegistryDeps {
28
+ db: KernelDb;
29
+ host: Pick<ExtensionHost, "list">;
30
+ /** Extensions enabled in the org (queried every time). */
31
+ enabledPlugins(orgId: string): Promise<Set<string>>;
32
+ files: Pick<ConversationFiles, "file">;
33
+ storage: Pick<StorageService, "kernel">;
34
+ log: Pick<Logger, "warn">;
35
+ /** Default {@link FILE_PREVIEW_TIMEOUT_MS}. */
36
+ timeoutMs?: number;
37
+ }
38
+ /**
39
+ * `file-preview@1` (UI refresh spec §5.8): which previewers take a file, in the org's order
40
+ * (`capybara.file_previewers` rows first by position, then the rest in provider order; disabled ones
41
+ * dropped; only extensions enabled in the org), and rendering a view previewer through a read grant
42
+ * for that one file (valid only during the call, capped at the previewer's `maxBytes`; the extension
43
+ * never gets a storage key or URL). Providers are validated when they are provided (`ctx.provide`).
44
+ * Not Nest-dependent; no state across requests.
45
+ */
46
+ export declare class PreviewerRegistry {
47
+ private readonly d;
48
+ private readonly timeoutMs;
49
+ constructor(d: PreviewerRegistryDeps);
50
+ /** Every previewer loaded on this replica, in provider order (load order, then list order). */
51
+ private loaded;
52
+ /** The org's previewers (enabled extensions only) in its order, disabled ones included. */
53
+ private ordered;
54
+ /** The admin list: every previewer of the org's enabled extensions, in order. */
55
+ list(orgId: string): Promise<OrgPreviewerItem[]>;
56
+ /**
57
+ * Sets the org's order: `items` first in the given order (with their `disabled`), the rest after
58
+ * them in provider order. An item naming no previewer of an enabled extension, or named twice →
59
+ * 400 `validation_failed`. Only rows of previewers this replica knows are replaced: rows of an
60
+ * extension that is disabled now (or not loaded here yet) keep their order and `disabled`.
61
+ * Audited as `org.file_previewers.updated`.
62
+ */
63
+ put(orgId: string, items: {
64
+ plugin: string;
65
+ id: string;
66
+ disabled: boolean;
67
+ }[], actor?: {
68
+ accountId?: string;
69
+ tokenId?: string;
70
+ }): Promise<OrgPreviewerItem[]>;
71
+ /** Previewers that take this file (viewer must read the conversation), in the org's order. */
72
+ forFile(orgId: string, conversationId: string, viewer: string, fileId: string): Promise<PreviewerItem[]>;
73
+ private accepting;
74
+ /**
75
+ * Renders a view previewer for one file: 404 `ui.not_found` when it does not take the file (or is
76
+ * disabled, not enabled, an embed); the render's errors as for plugin views (504 / 502).
77
+ */
78
+ render(t: {
79
+ orgId: string;
80
+ accountId: string;
81
+ conversationId: string;
82
+ fileId: string;
83
+ plugin: string;
84
+ id: string;
85
+ locale: "zh" | "en";
86
+ }): Promise<UiView>;
87
+ /**
88
+ * Whether an embed token for a `file-preview` contribution may be issued for this file: the
89
+ * viewer reads the conversation, the file is in it, and an enabled previewer of that extension
90
+ * with `embed: contribution` takes it. Conversation / file not found throws 404.
91
+ */
92
+ embedAllowed(t: {
93
+ orgId: string;
94
+ accountId: string;
95
+ conversationId: string;
96
+ fileId: string;
97
+ plugin: string;
98
+ contribution: string;
99
+ }): Promise<boolean>;
100
+ }
@@ -0,0 +1,250 @@
1
+ import { FILE_PREVIEW_EXTENSION_POINT, previewerAccepts, validateUiView, } from "@capybara-hq/plugin-sdk";
2
+ import { sql } from "kysely";
3
+ import { ApiError } from "../errors.js";
4
+ import { audit } from "../identity/audit.js";
5
+ import { callExtension } from "../ui/views.js";
6
+ /** Time limit of a previewer's render (UI refresh spec §5.3: 10 s on the conversation page). */
7
+ export const FILE_PREVIEW_TIMEOUT_MS = 10_000;
8
+ const notFound = () => new ApiError("ui.not_found", "Previewer not found");
9
+ const item = (l) => ({
10
+ plugin: l.plugin,
11
+ id: l.previewer.id,
12
+ title: { zh: l.previewer.title.zh, en: l.previewer.title.en },
13
+ kind: l.previewer.embed !== undefined ? "embed" : "view",
14
+ maxBytes: l.previewer.maxBytes,
15
+ });
16
+ /** Reads a stream into one buffer; more than `max` bytes → throws (the grant's cap). */
17
+ async function readAtMost(body, max) {
18
+ const reader = body.getReader();
19
+ const chunks = [];
20
+ let n = 0;
21
+ try {
22
+ for (;;) {
23
+ const { done, value } = await reader.read();
24
+ if (done)
25
+ break;
26
+ n += value.byteLength;
27
+ if (n > max)
28
+ throw new Error(`the file is larger than this previewer's maxBytes (${max})`);
29
+ chunks.push(value);
30
+ }
31
+ }
32
+ finally {
33
+ await reader.cancel().catch(() => { });
34
+ }
35
+ const out = new Uint8Array(n);
36
+ let at = 0;
37
+ for (const c of chunks) {
38
+ out.set(c, at);
39
+ at += c.byteLength;
40
+ }
41
+ return out;
42
+ }
43
+ /**
44
+ * `file-preview@1` (UI refresh spec §5.8): which previewers take a file, in the org's order
45
+ * (`capybara.file_previewers` rows first by position, then the rest in provider order; disabled ones
46
+ * dropped; only extensions enabled in the org), and rendering a view previewer through a read grant
47
+ * for that one file (valid only during the call, capped at the previewer's `maxBytes`; the extension
48
+ * never gets a storage key or URL). Providers are validated when they are provided (`ctx.provide`).
49
+ * Not Nest-dependent; no state across requests.
50
+ */
51
+ export class PreviewerRegistry {
52
+ d;
53
+ timeoutMs;
54
+ constructor(d) {
55
+ this.d = d;
56
+ this.timeoutMs = d.timeoutMs ?? FILE_PREVIEW_TIMEOUT_MS;
57
+ }
58
+ /** Every previewer loaded on this replica, in provider order (load order, then list order). */
59
+ loaded() {
60
+ return this.d.host
61
+ .list("file-preview")
62
+ .filter((e) => e.capability === FILE_PREVIEW_EXTENSION_POINT)
63
+ .flatMap((e) => e.impl.previewers.map((previewer) => ({
64
+ plugin: e.plugin,
65
+ previewer,
66
+ inflight: e.inflight,
67
+ })));
68
+ }
69
+ /** The org's previewers (enabled extensions only) in its order, disabled ones included. */
70
+ async ordered(orgId) {
71
+ const enabled = await this.d.enabledPlugins(orgId);
72
+ const loaded = this.loaded().filter((l) => enabled.has(l.plugin));
73
+ if (loaded.length === 0)
74
+ return [];
75
+ const rows = await this.d.db
76
+ .selectFrom("file_previewers")
77
+ .select(["plugin", "previewer_id", "position", "disabled"])
78
+ .where("org_id", "=", orgId)
79
+ .execute();
80
+ const rowOf = new Map(rows.map((r) => [`${r.plugin}/${r.previewer_id}`, r]));
81
+ const keyed = loaded.map((l, i) => {
82
+ const r = rowOf.get(`${l.plugin}/${l.previewer.id}`);
83
+ return { l, r, i };
84
+ });
85
+ keyed.sort((a, b) => {
86
+ if (a.r && b.r)
87
+ return a.r.position - b.r.position || a.i - b.i;
88
+ if (a.r)
89
+ return -1;
90
+ if (b.r)
91
+ return 1;
92
+ return a.i - b.i;
93
+ });
94
+ return keyed.map(({ l, r }) => ({ ...l, disabled: r?.disabled ?? false }));
95
+ }
96
+ /** The admin list: every previewer of the org's enabled extensions, in order. */
97
+ async list(orgId) {
98
+ return (await this.ordered(orgId)).map((l, position) => ({
99
+ ...item(l),
100
+ accepts: l.previewer.accepts,
101
+ position,
102
+ disabled: l.disabled,
103
+ }));
104
+ }
105
+ /**
106
+ * Sets the org's order: `items` first in the given order (with their `disabled`), the rest after
107
+ * them in provider order. An item naming no previewer of an enabled extension, or named twice →
108
+ * 400 `validation_failed`. Only rows of previewers this replica knows are replaced: rows of an
109
+ * extension that is disabled now (or not loaded here yet) keep their order and `disabled`.
110
+ * Audited as `org.file_previewers.updated`.
111
+ */
112
+ async put(orgId, items, actor = {}) {
113
+ const known = new Set((await this.ordered(orgId)).map((l) => `${l.plugin}/${l.previewer.id}`));
114
+ const seen = new Set();
115
+ for (const i of items) {
116
+ const k = `${i.plugin}/${i.id}`;
117
+ if (!known.has(k) || seen.has(k)) {
118
+ throw new ApiError("validation_failed", `${k} is not a previewer of an extension enabled in this organization, or is listed twice`);
119
+ }
120
+ seen.add(k);
121
+ }
122
+ await this.d.db.transaction().execute(async (trx) => {
123
+ if (known.size > 0) {
124
+ await trx
125
+ .deleteFrom("file_previewers")
126
+ .where("org_id", "=", orgId)
127
+ .where(sql `plugin || '/' || previewer_id`, "in", [...known])
128
+ .execute();
129
+ }
130
+ if (items.length > 0) {
131
+ await trx
132
+ .insertInto("file_previewers")
133
+ .values(items.map((i, position) => ({
134
+ org_id: orgId,
135
+ plugin: i.plugin,
136
+ previewer_id: i.id,
137
+ position,
138
+ disabled: i.disabled,
139
+ })))
140
+ .execute();
141
+ }
142
+ await audit(trx, {
143
+ ...(actor.accountId !== undefined && { actorAccountId: actor.accountId }),
144
+ ...(actor.tokenId !== undefined && { actorTokenId: actor.tokenId }),
145
+ orgId,
146
+ action: "org.file_previewers.updated",
147
+ detail: { items },
148
+ });
149
+ });
150
+ return this.list(orgId);
151
+ }
152
+ /** Previewers that take this file (viewer must read the conversation), in the org's order. */
153
+ async forFile(orgId, conversationId, viewer, fileId) {
154
+ const file = await this.d.files.file(orgId, conversationId, viewer, fileId);
155
+ return (await this.accepting(orgId, file)).map(item);
156
+ }
157
+ async accepting(orgId, file) {
158
+ return (await this.ordered(orgId)).filter((l) => !l.disabled && previewerAccepts(l.previewer, file));
159
+ }
160
+ /**
161
+ * Renders a view previewer for one file: 404 `ui.not_found` when it does not take the file (or is
162
+ * disabled, not enabled, an embed); the render's errors as for plugin views (504 / 502).
163
+ */
164
+ async render(t) {
165
+ const file = await this.d.files.file(t.orgId, t.conversationId, t.accountId, t.fileId);
166
+ const l = (await this.accepting(t.orgId, file)).find((x) => x.plugin === t.plugin && x.previewer.id === t.id);
167
+ const render = l?.previewer.render;
168
+ if (!l || render === undefined)
169
+ throw notFound();
170
+ const maxBytes = l.previewer.maxBytes;
171
+ const store = this.d.storage.kernel(t.orgId);
172
+ let open = true;
173
+ const expired = () => new Error("the file read grant has expired");
174
+ const fields = { plugin: t.plugin, previewer: t.id, orgId: t.orgId };
175
+ let view;
176
+ // The grant ends when the kernel stops waiting (return, throw, timeout, unload), whether or not
177
+ // the render has settled; read() also refuses once its signal aborted, since an object store
178
+ // need not honour an already-aborted signal.
179
+ try {
180
+ view = await callExtension({
181
+ log: this.d.log,
182
+ plugin: t.plugin,
183
+ what: "file preview",
184
+ fields,
185
+ timeoutMs: this.timeoutMs,
186
+ failCode: "ui.render_failed",
187
+ failMessage: `Plugin ${t.plugin} failed to preview the file with ${t.id}`,
188
+ fn: (signal) => l.inflight.run(signal, async (s) => {
189
+ try {
190
+ return await render.call(l.previewer, {
191
+ orgId: t.orgId,
192
+ accountId: t.accountId,
193
+ conversationId: t.conversationId,
194
+ locale: t.locale,
195
+ signal: s,
196
+ file: {
197
+ id: file.id,
198
+ name: file.name,
199
+ contentType: file.contentType,
200
+ size: file.size,
201
+ },
202
+ read: async () => {
203
+ if (!open || s.aborted)
204
+ throw expired();
205
+ if (file.size > maxBytes) {
206
+ throw new Error(`the file is larger than this previewer's maxBytes (${maxBytes})`);
207
+ }
208
+ const got = await store.get(file.objectKey, { signal: s });
209
+ if (!got)
210
+ throw new Error("the file is no longer available");
211
+ if (!open || s.aborted) {
212
+ await got.body.cancel().catch(() => { });
213
+ throw expired();
214
+ }
215
+ const bytes = await readAtMost(got.body, maxBytes);
216
+ if (!open || s.aborted)
217
+ throw expired();
218
+ return bytes;
219
+ },
220
+ });
221
+ }
222
+ finally {
223
+ open = false;
224
+ }
225
+ }),
226
+ });
227
+ }
228
+ finally {
229
+ open = false;
230
+ }
231
+ const problems = validateUiView(view);
232
+ if (problems.length > 0) {
233
+ this.d.log.warn("file previewer returned an invalid view", {
234
+ ...fields,
235
+ problems: problems.slice(0, 10),
236
+ });
237
+ throw new ApiError("ui.invalid_view", `Plugin ${t.plugin} returned an invalid view`);
238
+ }
239
+ return view;
240
+ }
241
+ /**
242
+ * Whether an embed token for a `file-preview` contribution may be issued for this file: the
243
+ * viewer reads the conversation, the file is in it, and an enabled previewer of that extension
244
+ * with `embed: contribution` takes it. Conversation / file not found throws 404.
245
+ */
246
+ async embedAllowed(t) {
247
+ const file = await this.d.files.file(t.orgId, t.conversationId, t.accountId, t.fileId);
248
+ return (await this.accepting(t.orgId, file)).some((l) => l.plugin === t.plugin && l.previewer.embed === t.contribution);
249
+ }
250
+ }
@@ -0,0 +1,114 @@
1
+ import type { Logger } from "@capybara-hq/plugin-sdk";
2
+ import { type DynamicModule } from "@nestjs/common";
3
+ import type { Redis } from "ioredis";
4
+ import type { CatalogService } from "../catalog/catalog.service.js";
5
+ import type { MarketplacesService } from "../catalog/marketplaces.service.js";
6
+ import type { PluginImport } from "../catalog/plugin-import.js";
7
+ import type { ChannelConnections } from "../channels/connections.service.js";
8
+ import type { KernelConfig } from "../config/schema.js";
9
+ import type { AttachmentsService } from "../conversations/attachments.service.js";
10
+ import { type RunControl } from "../conversations/conversations.service.js";
11
+ import type { EventBus, EventLog } from "../conversations/event-log.js";
12
+ import type { Keyring } from "../ctx/secrets.js";
13
+ import type { KernelDb } from "../db/kernel-schema.js";
14
+ import { type EvalQueue } from "../evals/runs.service.js";
15
+ import type { ExtensionAdminOps } from "../extensions/admin-ops.js";
16
+ import type { ExtensionAdmin } from "../extensions/admin-view.js";
17
+ import type { ExtensionDeploymentConfigService } from "../extensions/deployment-config.js";
18
+ import type { ExtensionHost } from "../extensions/host.js";
19
+ import type { ExtensionInstalls } from "../extensions/installs.js";
20
+ import type { OrgExtensionConfigs } from "../extensions/org-config.js";
21
+ import type { KernelIdentity } from "../kernel.js";
22
+ import type { PricesService } from "../models/prices.js";
23
+ import type { ModelPurposesService } from "../models/purposes.js";
24
+ import type { ProviderRegistry } from "../runtime/providers.js";
25
+ import type { SandboxService } from "../sandbox/sandbox.service.js";
26
+ import type { SkillChangesService } from "../skills/changes.service.js";
27
+ import type { SkillsService } from "../skills/skills.service.js";
28
+ import type { StorageService } from "../storage/storage.service.js";
29
+ import type { ApprovalsService } from "../tools/approvals.service.js";
30
+ import type { ConnectorContent } from "../tools/connector-content.js";
31
+ import type { Credentials } from "../tools/credentials.js";
32
+ import type { ToolDrift } from "../tools/drift.js";
33
+ import type { ToolOutputs } from "../tools/outputs.js";
34
+ import type { QuestionsService } from "../tools/questions.service.js";
35
+ import type { ToolRegistry } from "../tools/registry.js";
36
+ /** 内核 API 的依赖:由 createKernel 传入,ApiModule 据此构造各领域服务。 */
37
+ export interface ApiDeps {
38
+ db: KernelDb;
39
+ redis: Redis;
40
+ keyring: Keyring;
41
+ /** 取当前配置(热更新后返回新配置)。 */
42
+ config: () => KernelConfig;
43
+ log: Logger;
44
+ host: ExtensionHost;
45
+ /** The same instance as `Kernel.orgExtensionConfigs`. */
46
+ orgExtensionConfigs: OrgExtensionConfigs;
47
+ /** 内核总线(命名空间 `kernel`,插件名不能取 `kernel`,不会与插件冲突)。 */
48
+ bus: EventBus;
49
+ /** 会话事件日志(与运行 worker 共用同一实例)。 */
50
+ eventLog: EventLog;
51
+ /** 模型供应商注册表(与运行 worker 共用同一实例)。 */
52
+ registry: ProviderRegistry;
53
+ /** 运行投递与中止。 */
54
+ runs: RunControl;
55
+ /** 连接器凭据(与 `Kernel.tools.credentials` 同一实例)。 */
56
+ credentials: Credentials;
57
+ /** 工具注册表(与 `Kernel.tools.registry` 同一实例)。 */
58
+ toolRegistry: ToolRegistry;
59
+ /** 工具调用审批(与 `Kernel.tools.approvals` 同一实例)。 */
60
+ approvals: ApprovalsService;
61
+ /** 工具调用的输入请求(与 `Kernel.tools.questions` 同一实例)。 */
62
+ questions: QuestionsService;
63
+ /** 工具定义漂移检测(与 `Kernel.tools.drift` 同一实例;手动刷新走同一套比对)。 */
64
+ drift: ToolDrift;
65
+ /** 工具输出存档(与 `Kernel.tools.outputs` 同一实例;网页的运行标签读全文)。 */
66
+ outputs: ToolOutputs;
67
+ /** 连接器的 prompts / resources(斜杠命令、@ 资源引用与消息附件)。 */
68
+ connectorContent: ConnectorContent;
69
+ /** 外部身份、绑定、第三方登录与离职处理(与 `Kernel.identity` 同一组实例)。 */
70
+ identity: KernelIdentity;
71
+ /** 渠道连接(与 `Kernel.channels.connections` 同一实例)。 */
72
+ channels: ChannelConnections;
73
+ /** 对话附件(与 `Kernel.attachments` 同一实例)。 */
74
+ attachments: AttachmentsService;
75
+ /** 对象存储(与 `Kernel.storage` 同一实例;产物下载用)。 */
76
+ storage: StorageService;
77
+ /** 按对话的沙箱(与 `Kernel.sandbox` 同一实例;上下文标签读状态)。 */
78
+ sandbox: SandboxService;
79
+ /** 技能库(与 `Kernel.skills` 同一实例)。 */
80
+ skills: SkillsService;
81
+ /** agent 自写技能与技能变更审批(与 `Kernel.skillChanges` 同一实例)。 */
82
+ skillChanges: SkillChangesService;
83
+ /** 模型价格表(与 `Kernel.prices` 同一实例)。 */
84
+ prices: PricesService;
85
+ /** 模型用途映射(与 `Kernel.purposes` 同一实例;评测 worker 的评委也用它)。 */
86
+ purposes: ModelPurposesService;
87
+ /** Extension package imports and install records (the same instance as `Kernel.extensionInstalls`). */
88
+ extensionInstalls: ExtensionInstalls;
89
+ /** Deployment-level extension admin: list and web approval (the same instance as `Kernel.extensionAdmin`). */
90
+ extensionAdmin: ExtensionAdmin;
91
+ /** Deployment-level extension install / enable / disable / uninstall (the same instance as `Kernel.extensionAdminOps`). */
92
+ extensionAdminOps: ExtensionAdminOps;
93
+ /** Deployment-level extension config (the same instance as `Kernel.extensionDeploymentConfigs`). */
94
+ extensionDeploymentConfigs: ExtensionDeploymentConfigService;
95
+ /** The enterprise catalog (the same instance as `Kernel.catalog`). */
96
+ catalog: CatalogService;
97
+ /** Plugin (app bundle) import (the same instance as `Kernel.pluginImport`). */
98
+ pluginImport: PluginImport;
99
+ /** Marketplaces (the same instance as `Kernel.marketplaces`). */
100
+ marketplaces: MarketplacesService;
101
+ /** 评测队列的生产方(与 worker 同一队列名)。 */
102
+ evalQueue: Pick<EvalQueue, "enqueue">;
103
+ /** 删除 agent 后投递销毁它各对话的沙箱(一次性维护任务);不给时留给不活跃销毁扫描。 */
104
+ sandboxDestroy?: {
105
+ destroy(conversationIds: string[]): Promise<void>;
106
+ };
107
+ }
108
+ /**
109
+ * 内核 API 模块(`/api/v1/*`),只在角色含 `api` 时挂载。
110
+ * 全局守卫 `AuthGuard` 默认拒绝:未标注 `@Public()` 的路由一律要求凭据(含根模块的健康检查,它们显式标了 `@Public()`)。
111
+ */
112
+ export declare class ApiModule {
113
+ static register(deps: ApiDeps): DynamicModule;
114
+ }