@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,155 @@
1
+ import { type FormAnswer, type Logger, type UiActionResult, type UiContribution, type UiIcon, type UiView } from "@capybara-hq/plugin-sdk";
2
+ import type { KernelDb } from "../db/kernel-schema.js";
3
+ import type { ExtensionHost } from "../extensions/host.js";
4
+ import type { OrgRole } from "../orgs/roles.js";
5
+ /** 插件 render / action 的时限(spec §4.2:慢的插件只让那个标签失败)。 */
6
+ export declare const UI_CALL_TIMEOUT_MS = 5000;
7
+ /** 列出贡献接口的一项。 */
8
+ export interface UiContributionItem {
9
+ plugin: string;
10
+ id: string;
11
+ title: UiContribution["title"];
12
+ /** Normalized: the old `conversation` is listed as `panel`. */
13
+ place: Exclude<UiContribution["place"], "conversation" | "file-preview">;
14
+ /** `"conversation"` when the manifest still says the old place. */
15
+ legacyPlace?: "conversation";
16
+ kind: UiContribution["kind"];
17
+ /** 仅 embed:插件路由下 `/ui/` 开头的路径(网页经 `/plugin-ui/<plugin>/...` 代理访问)。 */
18
+ path?: string;
19
+ /** From `UI_ICONS`; `puzzle` when the manifest names none. */
20
+ icon: UiIcon;
21
+ }
22
+ /** 嵌入应用的签发目标:已核对组织启用与对话访问。 */
23
+ export interface UiEmbedTarget {
24
+ plugin: string;
25
+ contribution: string;
26
+ /** 清单里的 `path`(`/ui/` 开头)。 */
27
+ path: string;
28
+ conversationId?: string;
29
+ /** Only a `file-preview` embed: the one file the token is for. */
30
+ fileId?: string;
31
+ }
32
+ export interface UiViewsDeps {
33
+ host: Pick<ExtensionHost, "uiContributions">;
34
+ /** Names of the extensions enabled in the organization (`extension_org_configs.enabled` plus required bootstrap plugins, `enabled.ts`), queried every time, not cached. */
35
+ enabledPlugins(orgId: string): Promise<Set<string>>;
36
+ /** 调用者能否访问这个对话(与会话 SSE 流同一判定)。 */
37
+ canAccessConversation(orgId: string, conversationId: string, accountId: string): Promise<boolean>;
38
+ /**
39
+ * Throws unless the caller may write to the conversation: a sub-agent's is read-only (409
40
+ * `conversation.read_only`, sub-agents spec §6.1). Checked before an action (final review m3).
41
+ */
42
+ checkWritable?(orgId: string, conversationId: string, accountId: string): Promise<void>;
43
+ /**
44
+ * A `file-preview` embed token: whether that extension's previewer with `embed: contribution`
45
+ * takes this file of the conversation (the viewer must read it; not found throws 404).
46
+ */
47
+ previewEmbedAllowed?(t: {
48
+ orgId: string;
49
+ accountId: string;
50
+ conversationId: string;
51
+ fileId: string;
52
+ plugin: string;
53
+ contribution: string;
54
+ }): Promise<boolean>;
55
+ /**
56
+ * The `card` a `tool_result` of this conversation recorded for `callId` (`ToolResult.card`), or
57
+ * null. An inline card request is served only when it matches (the card is attested by the log).
58
+ */
59
+ recordedCard?(conversationId: string, callId: string): Promise<{
60
+ plugin: string;
61
+ view: string;
62
+ key?: string;
63
+ } | null>;
64
+ log: Pick<Logger, "warn">;
65
+ /** 默认 {@link UI_CALL_TIMEOUT_MS}(测试可调小)。 */
66
+ timeoutMs?: number;
67
+ }
68
+ /** 取视图 / 执行动作的调用者与目标(身份来自内核鉴权)。 */
69
+ export interface UiTarget {
70
+ orgId: string;
71
+ accountId: string;
72
+ /** 调用者在 `orgId` 的角色(OrgGuard 查出的成员关系)。 */
73
+ role: OrgRole;
74
+ plugin: string;
75
+ id: string;
76
+ conversationId?: string;
77
+ locale: "zh" | "en";
78
+ /** A panel opened from an open target: the item to scroll to. */
79
+ item?: string;
80
+ /** An inline card: the tool call it hangs off and its `ToolResult.card.key`. */
81
+ card?: {
82
+ callId: string;
83
+ key?: string;
84
+ };
85
+ }
86
+ /**
87
+ * The card a `tool_result` of the conversation recorded for `callId`, or null (the inline-card
88
+ * attestation of {@link UiViewsDeps.recordedCard}). Scans one conversation's tool results.
89
+ */
90
+ export declare function recordedCard(db: KernelDb, conversationId: string, callId: string): Promise<{
91
+ plugin: string;
92
+ view: string;
93
+ key?: string;
94
+ } | null>;
95
+ /**
96
+ * Drops open targets that name no `panel` of the extension (design spec §6.16; review M6): the web
97
+ * only opens listed panels of the same extension, and the kernel does not pass others on.
98
+ */
99
+ export declare function dropForeignOpens(view: UiView, panels: ReadonlySet<string>): UiView;
100
+ /**
101
+ * 插件视图(第一档:渲染 schema):列出贡献、调用插件 `render` / `action`。
102
+ * - 只认在该组织已启用、且已在本副本加载的插件(启用状态每次查库);
103
+ * - 对话视图要求调用者能访问这个对话(与 SSE 流一致),访问不了与不存在一样返回 404 `ui.not_found`;
104
+ * - 组织页面(`place: "page"`,视图与嵌入)只给 member 以上:guest 列表里看不到、取视图 / 动作 / 令牌一律 404;
105
+ * - 组织页面视图不接受 `conversationId`(带了 400,与对话视图缺它一致);
106
+ * - 调用带 5 秒时限与中止信号:render 抛错 502 `ui.render_failed`、action 抛错 502 `ui.action_failed`、
107
+ * 超时 504 `ui.timeout`、返回非法视图 502
108
+ * `ui.invalid_view`,都记告警日志、不写对话日志(这些不是模型可见的内容)。
109
+ * 不依赖 Nest;不保存跨请求状态。
110
+ */
111
+ export declare class UiViews {
112
+ private readonly d;
113
+ private readonly timeoutMs;
114
+ constructor(d: UiViewsDeps);
115
+ /** 该组织、该角色可见的界面贡献:插件已启用且已加载;kind view 的要求插件注册了 render;组织页面要 member 以上。 */
116
+ contributions(orgId: string, role: OrgRole): Promise<UiContributionItem[]>;
117
+ /**
118
+ * 嵌入应用:核对贡献是 embed、插件在该组织启用;对话嵌入要求调用者能访问该对话(否则 404,与视图一致),
119
+ * 组织页面不收 `conversationId`。返回签发令牌所需的目标(令牌由调用方签)。
120
+ */
121
+ embed(t: Omit<UiTarget, "locale"> & {
122
+ fileId?: string;
123
+ }): Promise<UiEmbedTarget>;
124
+ /** 取视图:调用插件 `render`,校验返回的视图。 */
125
+ render(t: UiTarget): Promise<UiView>;
126
+ /** 执行动作:调用插件 `action`(视图里的按钮 / 表单提交),校验返回的提示或新视图。 */
127
+ act(t: UiTarget, input: {
128
+ actionId: string;
129
+ payload?: unknown;
130
+ answer?: FormAnswer;
131
+ }): Promise<UiActionResult>;
132
+ /** Ids of the extension's live `panel` contributions (aliases of panels included). */
133
+ private panels;
134
+ /** 找贡献、核对组织启用与对话访问;返回传给插件的参数(不含 signal)。 */
135
+ private resolve;
136
+ /** 带时限调用插件:超时中止信号并 504;抛错 502(render / action 各一个码,不回显插件的异常信息)。 */
137
+ private call;
138
+ /** 非法结果:记告警(列出前几条问题)并 502 `ui.invalid_view`。 */
139
+ private check;
140
+ }
141
+ /**
142
+ * Calls an extension with a time limit and an abort signal (plugin views, actions and file
143
+ * previewers): over the limit the signal aborts and the call is 504 `ui.timeout`; a throw is
144
+ * `failCode` (502) without echoing the extension's message. An `ApiError` thrown by `fn` passes.
145
+ */
146
+ export declare function callExtension<T>(o: {
147
+ log: Pick<Logger, "warn">;
148
+ plugin: string;
149
+ what: string;
150
+ fields: Record<string, unknown>;
151
+ timeoutMs: number;
152
+ failCode: "ui.render_failed" | "ui.action_failed";
153
+ failMessage: string;
154
+ fn: (signal: AbortSignal) => Promise<T>;
155
+ }): Promise<T>;
@@ -0,0 +1,306 @@
1
+ import { normalizePlace, validateUiView, } from "@capybara-hq/plugin-sdk";
2
+ import { sql } from "kysely";
3
+ import { ApiError } from "../errors.js";
4
+ import { canUsePlace, isConversationPlace, UUID_RE } from "./registry.js";
5
+ /** 插件 render / action 的时限(spec §4.2:慢的插件只让那个标签失败)。 */
6
+ export const UI_CALL_TIMEOUT_MS = 5_000;
7
+ /**
8
+ * The card a `tool_result` of the conversation recorded for `callId`, or null (the inline-card
9
+ * attestation of {@link UiViewsDeps.recordedCard}). Scans one conversation's tool results.
10
+ */
11
+ export async function recordedCard(db, conversationId, callId) {
12
+ const row = await db
13
+ .selectFrom("conversation_events")
14
+ .select(sql `payload->'card'`.as("card"))
15
+ .where("conversation_id", "=", conversationId)
16
+ .where("type", "=", "tool_result")
17
+ .where(sql `payload->>'callId'`, "=", callId)
18
+ .where(sql `payload ? 'card'`)
19
+ .orderBy("seq", "desc")
20
+ .limit(1)
21
+ .executeTakeFirst();
22
+ const c = row?.card;
23
+ if (!c || typeof c.plugin !== "string" || typeof c.view !== "string")
24
+ return null;
25
+ return { plugin: c.plugin, view: c.view, ...(typeof c.key === "string" && { key: c.key }) };
26
+ }
27
+ /**
28
+ * Drops open targets that name no `panel` of the extension (design spec §6.16; review M6): the web
29
+ * only opens listed panels of the same extension, and the kernel does not pass others on.
30
+ */
31
+ export function dropForeignOpens(view, panels) {
32
+ const ok = (o) => o != null && panels.has(o.contribution);
33
+ const blocks = view.blocks.map((b) => {
34
+ if (b.type === "checklist" || b.type === "keyValue") {
35
+ const items = b.items.map((it) => {
36
+ if (it.open === undefined || ok(it.open))
37
+ return it;
38
+ const { open: _drop, ...rest } = it;
39
+ return rest;
40
+ });
41
+ return { ...b, items };
42
+ }
43
+ if (b.type === "table" && b.open !== undefined) {
44
+ return { ...b, open: b.open.map((o) => (ok(o) ? o : null)) };
45
+ }
46
+ return b;
47
+ });
48
+ const { open, ...rest } = view;
49
+ return { ...rest, ...(open !== undefined && ok(open) && { open }), blocks };
50
+ }
51
+ const TOAST_MAX = 500;
52
+ const MAX_LOGGED_PROBLEMS = 10;
53
+ const notFound = () => new ApiError("ui.not_found", "UI contribution not found");
54
+ const isObj = (v) => typeof v === "object" && v !== null && !Array.isArray(v);
55
+ /** 校验动作结果,返回问题列表(空 = 合法)。 */
56
+ function actionResultProblems(r) {
57
+ if (!isObj(r))
58
+ return ["action result must be an object"];
59
+ if (r.view !== undefined)
60
+ return validateUiView(r.view).map((p) => `view: ${p}`);
61
+ if (r.toast === undefined)
62
+ return [];
63
+ if (!isObj(r.toast))
64
+ return ["toast must be an object with zh and en"];
65
+ const out = [];
66
+ for (const k of ["zh", "en"]) {
67
+ const v = r.toast[k];
68
+ if (typeof v !== "string" || v === "" || v.length > TOAST_MAX)
69
+ out.push(`toast.${k} must be a non-empty string of at most ${TOAST_MAX} characters`);
70
+ }
71
+ return out;
72
+ }
73
+ /**
74
+ * 插件视图(第一档:渲染 schema):列出贡献、调用插件 `render` / `action`。
75
+ * - 只认在该组织已启用、且已在本副本加载的插件(启用状态每次查库);
76
+ * - 对话视图要求调用者能访问这个对话(与 SSE 流一致),访问不了与不存在一样返回 404 `ui.not_found`;
77
+ * - 组织页面(`place: "page"`,视图与嵌入)只给 member 以上:guest 列表里看不到、取视图 / 动作 / 令牌一律 404;
78
+ * - 组织页面视图不接受 `conversationId`(带了 400,与对话视图缺它一致);
79
+ * - 调用带 5 秒时限与中止信号:render 抛错 502 `ui.render_failed`、action 抛错 502 `ui.action_failed`、
80
+ * 超时 504 `ui.timeout`、返回非法视图 502
81
+ * `ui.invalid_view`,都记告警日志、不写对话日志(这些不是模型可见的内容)。
82
+ * 不依赖 Nest;不保存跨请求状态。
83
+ */
84
+ export class UiViews {
85
+ d;
86
+ timeoutMs;
87
+ constructor(d) {
88
+ this.d = d;
89
+ this.timeoutMs = d.timeoutMs ?? UI_CALL_TIMEOUT_MS;
90
+ }
91
+ /** 该组织、该角色可见的界面贡献:插件已启用且已加载;kind view 的要求插件注册了 render;组织页面要 member 以上。 */
92
+ async contributions(orgId, role) {
93
+ const all = this.d.host.uiContributions();
94
+ if (all.length === 0)
95
+ return [];
96
+ const enabled = await this.d.enabledPlugins(orgId);
97
+ return all
98
+ .filter((c) => enabled.has(c.plugin) &&
99
+ c.contribution.aliasOf === undefined &&
100
+ c.contribution.place !== "file-preview" &&
101
+ (c.contribution.kind === "embed" || c.render) &&
102
+ canUsePlace(c.contribution.place, role))
103
+ .map(({ plugin, contribution: c }) => ({
104
+ plugin,
105
+ id: c.id,
106
+ title: c.title,
107
+ place: normalizePlace(c.place),
108
+ ...(c.place === "conversation" && { legacyPlace: "conversation" }),
109
+ kind: c.kind,
110
+ ...(c.kind === "embed" && c.path !== undefined && { path: c.path }),
111
+ icon: c.icon ?? "puzzle",
112
+ }));
113
+ }
114
+ /**
115
+ * 嵌入应用:核对贡献是 embed、插件在该组织启用;对话嵌入要求调用者能访问该对话(否则 404,与视图一致),
116
+ * 组织页面不收 `conversationId`。返回签发令牌所需的目标(令牌由调用方签)。
117
+ */
118
+ async embed(t) {
119
+ const { fileId, ...target } = t;
120
+ const { entry, args } = await this.resolve({ ...target, locale: "en" }, "embed");
121
+ const path = entry.contribution.path;
122
+ if (path === undefined)
123
+ throw notFound();
124
+ const preview = entry.contribution.place === "file-preview";
125
+ if (preview !== (fileId !== undefined)) {
126
+ throw new ApiError("validation_failed", preview
127
+ ? "fileId is required for a file-preview embed"
128
+ : "fileId is only allowed for a file-preview embed");
129
+ }
130
+ if (fileId !== undefined) {
131
+ const allowed = this.d.previewEmbedAllowed !== undefined &&
132
+ (await this.d.previewEmbedAllowed({
133
+ orgId: t.orgId,
134
+ accountId: t.accountId,
135
+ conversationId: args.conversationId,
136
+ fileId,
137
+ plugin: t.plugin,
138
+ contribution: t.id,
139
+ }));
140
+ if (!allowed)
141
+ throw notFound();
142
+ }
143
+ return {
144
+ plugin: t.plugin,
145
+ contribution: t.id,
146
+ path,
147
+ ...(args.conversationId !== undefined && { conversationId: args.conversationId }),
148
+ ...(fileId !== undefined && { fileId }),
149
+ };
150
+ }
151
+ /** 取视图:调用插件 `render`,校验返回的视图。 */
152
+ async render(t) {
153
+ const { entry, args } = await this.resolve(t, "render");
154
+ const render = entry.render;
155
+ const view = await this.call(t, "render", (signal) => render({ ...args, signal }));
156
+ this.check(t, "render", validateUiView(view));
157
+ return dropForeignOpens(view, this.panels(t.plugin));
158
+ }
159
+ /** 执行动作:调用插件 `action`(视图里的按钮 / 表单提交),校验返回的提示或新视图。 */
160
+ async act(t, input) {
161
+ const { entry, args } = await this.resolve(t, "action");
162
+ const action = entry.action;
163
+ const r = await this.call(t, "action", (signal) => action({
164
+ ...args,
165
+ signal,
166
+ actionId: input.actionId,
167
+ ...(input.payload !== undefined && { payload: input.payload }),
168
+ ...(input.answer !== undefined && { answer: input.answer }),
169
+ }));
170
+ this.check(t, "action", actionResultProblems(r));
171
+ const res = r;
172
+ if (res.view !== undefined)
173
+ return { view: dropForeignOpens(res.view, this.panels(t.plugin)) };
174
+ return res.toast !== undefined ? { toast: { zh: res.toast.zh, en: res.toast.en } } : {};
175
+ }
176
+ /** Ids of the extension's live `panel` contributions (aliases of panels included). */
177
+ panels(plugin) {
178
+ return new Set(this.d.host
179
+ .uiContributions()
180
+ .filter((c) => c.plugin === plugin && normalizePlace(c.contribution.place) === "panel")
181
+ .map((c) => c.contribution.id));
182
+ }
183
+ /** 找贡献、核对组织启用与对话访问;返回传给插件的参数(不含 signal)。 */
184
+ async resolve(t, need) {
185
+ const loaded = this.d.host.uiContributions();
186
+ const named = loaded.find((c) => c.plugin === t.plugin && c.contribution.id === t.id);
187
+ // a retired alias answers with the contribution it names (same extension and kind)
188
+ const aliasOf = named?.contribution.aliasOf;
189
+ const id = aliasOf ?? t.id;
190
+ const entry = loaded.find((c) => c.plugin === t.plugin &&
191
+ c.contribution.id === id &&
192
+ c.contribution.aliasOf === undefined &&
193
+ (need === "embed"
194
+ ? c.contribution.kind === "embed"
195
+ : c.contribution.kind === "view" && c[need] !== undefined));
196
+ if (!entry || !canUsePlace(entry.contribution.place, t.role))
197
+ throw notFound();
198
+ if (!(await this.d.enabledPlugins(t.orgId)).has(t.plugin))
199
+ throw notFound();
200
+ const base = { orgId: t.orgId, accountId: t.accountId, role: t.role, locale: t.locale };
201
+ if (!isConversationPlace(entry.contribution.place)) {
202
+ if (t.item !== undefined || t.card !== undefined) {
203
+ throw new ApiError("validation_failed", "item and callId are for conversation views");
204
+ }
205
+ if (t.conversationId !== undefined) {
206
+ throw new ApiError("validation_failed", `conversationId is not allowed for an organization page ${need === "embed" ? "embed" : "view"}`);
207
+ }
208
+ return { entry, args: base };
209
+ }
210
+ const conversationId = t.conversationId;
211
+ if (conversationId === undefined) {
212
+ throw new ApiError("validation_failed", `conversationId is required for a conversation ${need === "embed" ? "embed" : "view"}`);
213
+ }
214
+ if (!UUID_RE.test(conversationId) ||
215
+ !(await this.d.canAccessConversation(t.orgId, conversationId, t.accountId))) {
216
+ throw notFound();
217
+ }
218
+ // an action is a person's write: a sub-agent's conversation takes none (views still render)
219
+ if (need === "action")
220
+ await this.d.checkWritable?.(t.orgId, conversationId, t.accountId);
221
+ if (t.card !== undefined) {
222
+ // args.card is attested: an inline view, and a tool_result of this conversation recorded this
223
+ // very card (plugin, the requested id or its alias target, key); else it is not found
224
+ const recorded = normalizePlace(entry.contribution.place) === "inline" && this.d.recordedCard !== undefined
225
+ ? await this.d.recordedCard(conversationId, t.card.callId)
226
+ : null;
227
+ if (recorded === null ||
228
+ recorded.plugin !== t.plugin ||
229
+ (recorded.view !== t.id && recorded.view !== id) ||
230
+ recorded.key !== t.card.key) {
231
+ throw notFound();
232
+ }
233
+ }
234
+ return {
235
+ entry,
236
+ args: {
237
+ ...base,
238
+ conversationId,
239
+ ...(t.item !== undefined && { item: t.item }),
240
+ ...(t.card !== undefined && { card: t.card }),
241
+ },
242
+ };
243
+ }
244
+ /** 带时限调用插件:超时中止信号并 504;抛错 502(render / action 各一个码,不回显插件的异常信息)。 */
245
+ call(t, what, fn) {
246
+ return callExtension({
247
+ log: this.d.log,
248
+ plugin: t.plugin,
249
+ what,
250
+ fields: { plugin: t.plugin, contribution: t.id, orgId: t.orgId },
251
+ timeoutMs: this.timeoutMs,
252
+ failCode: what === "render" ? "ui.render_failed" : "ui.action_failed",
253
+ failMessage: `Plugin ${t.plugin} failed to ${what} ${t.id}`,
254
+ fn,
255
+ });
256
+ }
257
+ /** 非法结果:记告警(列出前几条问题)并 502 `ui.invalid_view`。 */
258
+ check(t, what, problems) {
259
+ if (problems.length === 0)
260
+ return;
261
+ this.d.log.warn(`plugin ui ${what} returned an invalid view`, {
262
+ plugin: t.plugin,
263
+ contribution: t.id,
264
+ orgId: t.orgId,
265
+ problems: problems.slice(0, MAX_LOGGED_PROBLEMS),
266
+ });
267
+ throw new ApiError("ui.invalid_view", `Plugin ${t.plugin} returned an invalid view`);
268
+ }
269
+ }
270
+ /**
271
+ * Calls an extension with a time limit and an abort signal (plugin views, actions and file
272
+ * previewers): over the limit the signal aborts and the call is 504 `ui.timeout`; a throw is
273
+ * `failCode` (502) without echoing the extension's message. An `ApiError` thrown by `fn` passes.
274
+ */
275
+ export async function callExtension(o) {
276
+ const ac = new AbortController();
277
+ let timer;
278
+ const timeout = new Promise((resolve) => {
279
+ timer = setTimeout(() => {
280
+ ac.abort(new Error(`plugin ui ${o.what} timed out`));
281
+ resolve("timeout");
282
+ }, o.timeoutMs);
283
+ });
284
+ try {
285
+ const r = await Promise.race([
286
+ Promise.resolve()
287
+ .then(() => o.fn(ac.signal))
288
+ .then((value) => ({ value })),
289
+ timeout,
290
+ ]);
291
+ if (r === "timeout") {
292
+ o.log.warn(`plugin ui ${o.what} timed out`, { ...o.fields, timeoutMs: o.timeoutMs });
293
+ throw new ApiError("ui.timeout", `Plugin ${o.plugin} did not respond within ${o.timeoutMs / 1000}s`);
294
+ }
295
+ return r.value;
296
+ }
297
+ catch (e) {
298
+ if (e instanceof ApiError)
299
+ throw e;
300
+ o.log.warn(`plugin ui ${o.what} failed`, { ...o.fields, err: e });
301
+ throw new ApiError(o.failCode, o.failMessage);
302
+ }
303
+ finally {
304
+ clearTimeout(timer);
305
+ }
306
+ }
@@ -0,0 +1,5 @@
1
+ /**
2
+ * 内核版本(`@capybara-hq/kernel` 的 package.json `version`;src 与 dist 都在包根下一层,同一个相对路径)。
3
+ * 清单条目的 `minKernel` 按它判断兼容。
4
+ */
5
+ export declare const KERNEL_VERSION: string;
@@ -0,0 +1,6 @@
1
+ import { createRequire } from "node:module";
2
+ /**
3
+ * 内核版本(`@capybara-hq/kernel` 的 package.json `version`;src 与 dist 都在包根下一层,同一个相对路径)。
4
+ * 清单条目的 `minKernel` 按它判断兼容。
5
+ */
6
+ export const KERNEL_VERSION = createRequire(import.meta.url)("../package.json").version;
package/package.json CHANGED
@@ -1,6 +1,72 @@
1
1
  {
2
2
  "name": "@capybara-hq/kernel",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
3
+ "version": "0.1.0-rc.1",
4
+ "description": "Capybara kernel: config, database, plugin host and HTTP API of the Capybara agent platform",
5
+ "license": "Apache-2.0",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "git+https://github.com/capybara-hq/core.git",
9
+ "directory": "packages/kernel"
10
+ },
11
+ "homepage": "https://github.com/capybara-hq/core/tree/main/packages/kernel#readme",
12
+ "type": "module",
13
+ "engines": {
14
+ "node": ">=24"
15
+ },
16
+ "main": "./dist/index.js",
17
+ "types": "./dist/index.d.ts",
18
+ "exports": {
19
+ ".": {
20
+ "types": "./dist/index.d.ts",
21
+ "import": "./dist/index.js",
22
+ "default": "./dist/index.js"
23
+ }
24
+ },
25
+ "files": [
26
+ "dist",
27
+ "src/migrations",
28
+ "bootstrap.json",
29
+ "README.md",
30
+ "NOTICE"
31
+ ],
32
+ "dependencies": {
33
+ "@fastify/cookie": "^11.1.3",
34
+ "@langchain/core": "^1.2.18",
35
+ "@langchain/langgraph": "^1.5.1",
36
+ "@langchain/langgraph-checkpoint": "^1.2.0",
37
+ "@nestjs/common": "^12.1.3",
38
+ "@nestjs/core": "^12.1.3",
39
+ "@nestjs/platform-fastify": "^12.1.3",
40
+ "ajv": "^8.20.0",
41
+ "bullmq": "^6.3.15",
42
+ "es-module-lexer": "2.3.2",
43
+ "fastify": "5.12.5",
44
+ "find-my-way": "9.9.0",
45
+ "ioredis": "^6.0.0",
46
+ "isomorphic-git": "1.43.3",
47
+ "jose": "^6.2.12",
48
+ "kysely": "^0.29.6",
49
+ "pg": "^8.23.1",
50
+ "pino": "10.4.0",
51
+ "pino-pretty": "13.2.0",
52
+ "reflect-metadata": "0.2.2",
53
+ "rxjs": "^7.8.2",
54
+ "semver": "^7.8.5",
55
+ "tar-stream": "3.2.2",
56
+ "undici": "^8.12.3",
57
+ "yaml": "^2.9.1",
58
+ "yauzl": "3.4.0",
59
+ "zod": "^4.6.7",
60
+ "@capybara-hq/plugin-sdk": "^0.1.0-rc.0"
61
+ },
62
+ "devDependencies": {
63
+ "@langchain/langgraph-checkpoint-validation": "^1.2.0",
64
+ "@types/pg": "^8.23.1",
65
+ "@types/semver": "^7.8.0",
66
+ "@types/yauzl": "3.4.0",
67
+ "@capybara-hq/testing": "0.1.0-rc.2"
68
+ },
69
+ "scripts": {
70
+ "build": "tsc -b"
71
+ }
6
72
  }
@@ -0,0 +1,8 @@
1
+ CREATE SCHEMA IF NOT EXISTS capybara;
2
+
3
+ CREATE TABLE IF NOT EXISTS capybara.org_data_keys (
4
+ org_id text PRIMARY KEY,
5
+ wrapped_key bytea NOT NULL,
6
+ master_key_id text NOT NULL,
7
+ created_at timestamptz NOT NULL DEFAULT now()
8
+ );
@@ -0,0 +1,8 @@
1
+ CREATE TABLE IF NOT EXISTS capybara.secrets (
2
+ namespace text NOT NULL,
3
+ org_id text NOT NULL,
4
+ key text NOT NULL,
5
+ ciphertext bytea NOT NULL,
6
+ updated_at timestamptz NOT NULL DEFAULT now(),
7
+ PRIMARY KEY (namespace, org_id, key)
8
+ );