@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,147 @@
1
+ import { readCapped } from "./npm.js";
2
+ /** The predicate type of an SLSA v1 provenance statement. */
3
+ export const SLSA_PROVENANCE_V1 = "https://slsa.dev/provenance/v1";
4
+ /** Attestation answers are a few KB; anything far larger is not one. */
5
+ const MAX_ATTESTATION_BYTES = 1024 * 1024;
6
+ /** Provenance must not hold up an import: a slow registry gives "not checked". */
7
+ export const PROVENANCE_TIMEOUT_MS = 15_000;
8
+ const NPM_NAME_RE = /^(?:@[a-z0-9][a-z0-9._~-]*\/)?[a-z0-9][a-z0-9._~-]*$/;
9
+ const SEMVER_RE = /^[0-9A-Za-z.+-]{1,256}$/;
10
+ const COMMIT_RE = /^[0-9a-f]{40}(?:[0-9a-f]{24})?$/;
11
+ const notChecked = (reason) => ({ checked: false, reason });
12
+ const errMsg = (e) => (e instanceof Error ? e.message : String(e));
13
+ const isObject = (v) => typeof v === "object" && v !== null && !Array.isArray(v);
14
+ const str = (v) => typeof v === "string" && v.length > 0 && v.length <= 2048 ? v : undefined;
15
+ /** The hex sha512 of a `sha512-<base64>` integrity (undefined for anything else). */
16
+ function sha512Hex(integrity) {
17
+ for (const part of integrity.trim().split(/\s+/)) {
18
+ const m = /^sha512-([A-Za-z0-9+/]+={0,2})$/.exec(part);
19
+ if (m) {
20
+ const b = Buffer.from(m[1], "base64");
21
+ if (b.length === 64)
22
+ return b.toString("hex");
23
+ }
24
+ }
25
+ return undefined;
26
+ }
27
+ /**
28
+ * Reads the SLSA provenance of `name@version` from the configured registry. `integrity` (the
29
+ * tarball's `sha512-…`, when known) must be among the statement's subject digests, so a statement
30
+ * about another tarball is not shown. Never throws (an aborted `signal` included).
31
+ */
32
+ export async function fetchProvenance(cfg, name, version, signal, opts = {}) {
33
+ if (!NPM_NAME_RE.test(name) || name.length > 214 || !SEMVER_RE.test(version)) {
34
+ return notChecked("not a valid npm package name and version");
35
+ }
36
+ let body;
37
+ try {
38
+ const registry = new URL(cfg.registry.endsWith("/") ? cfg.registry : `${cfg.registry}/`);
39
+ // the npm client's escaping: a scoped name's `/` is %2f
40
+ const url = new URL(`-/npm/v1/attestations/${name.replace("/", "%2f")}@${encodeURIComponent(version)}`, registry);
41
+ const res = await fetch(url, {
42
+ headers: {
43
+ accept: "application/json",
44
+ ...(cfg.token !== undefined && { authorization: `Bearer ${cfg.token}` }),
45
+ },
46
+ redirect: "manual",
47
+ signal,
48
+ });
49
+ if (res.status === 404) {
50
+ await res.body?.cancel().catch(() => { });
51
+ return notChecked("the registry has no provenance for this version");
52
+ }
53
+ if (!res.ok) {
54
+ await res.body?.cancel().catch(() => { });
55
+ return notChecked(`the registry answered HTTP ${res.status} for the attestations`);
56
+ }
57
+ const raw = await readCapped(res, MAX_ATTESTATION_BYTES, () => new Error("the attestations are too large"));
58
+ body = JSON.parse(raw.toString("utf8"));
59
+ }
60
+ catch (e) {
61
+ if (signal.aborted)
62
+ return notChecked("the registry did not answer in time");
63
+ return notChecked(`cannot read the attestations: ${errMsg(e)}`);
64
+ }
65
+ try {
66
+ return parseAttestations(body, opts.integrity);
67
+ }
68
+ catch (e) {
69
+ return notChecked(`cannot read the attestations: ${errMsg(e)}`);
70
+ }
71
+ }
72
+ /**
73
+ * Parses an attestations answer (`{ attestations: [{ predicateType, bundle: { dsseEnvelope } }] }`).
74
+ * Exported for tests.
75
+ */
76
+ export function parseAttestations(body, integrity) {
77
+ if (!isObject(body) || !Array.isArray(body.attestations)) {
78
+ return notChecked("the attestations answer is not in the npm format");
79
+ }
80
+ const att = body.attestations.find((a) => isObject(a) && a.predicateType === SLSA_PROVENANCE_V1);
81
+ if (!att)
82
+ return notChecked("the registry has no SLSA provenance for this version");
83
+ const env = isObject(att.bundle) ? att.bundle.dsseEnvelope : undefined;
84
+ if (!isObject(env) || typeof env.payload !== "string") {
85
+ return notChecked("the provenance has no DSSE envelope");
86
+ }
87
+ if (env.payloadType !== "application/vnd.in-toto+json") {
88
+ return notChecked("the provenance is not an in-toto statement");
89
+ }
90
+ let stmt;
91
+ try {
92
+ stmt = JSON.parse(Buffer.from(env.payload, "base64").toString("utf8"));
93
+ }
94
+ catch {
95
+ return notChecked("the provenance statement is not valid JSON");
96
+ }
97
+ if (!isObject(stmt) || stmt.predicateType !== SLSA_PROVENANCE_V1 || !isObject(stmt.predicate)) {
98
+ return notChecked("the provenance statement is not SLSA provenance v1");
99
+ }
100
+ if (integrity !== undefined) {
101
+ const want = sha512Hex(integrity);
102
+ const subjects = Array.isArray(stmt.subject) ? stmt.subject : [];
103
+ const matches = subjects.some((s) => isObject(s) && isObject(s.digest) && s.digest.sha512 === want);
104
+ if (want === undefined || !matches) {
105
+ return notChecked("the provenance is about another tarball than the one downloaded");
106
+ }
107
+ }
108
+ const def = stmt.predicate.buildDefinition;
109
+ if (!isObject(def))
110
+ return notChecked("the provenance has no build definition");
111
+ const workflow = isObject(def.externalParameters) ? def.externalParameters.workflow : undefined;
112
+ const repository = isObject(workflow) ? str(workflow.repository) : undefined;
113
+ const path = isObject(workflow) ? str(workflow.path) : undefined;
114
+ const deps = Array.isArray(def.resolvedDependencies) ? def.resolvedDependencies : [];
115
+ const first = deps[0];
116
+ const commit = isObject(first) && isObject(first.digest) ? str(first.digest.gitCommit) : undefined;
117
+ const buildType = str(def.buildType);
118
+ if (repository === undefined)
119
+ return notChecked("the provenance names no repository");
120
+ if (path === undefined)
121
+ return notChecked("the provenance names no workflow");
122
+ if (commit === undefined || !COMMIT_RE.test(commit)) {
123
+ return notChecked("the provenance names no git commit");
124
+ }
125
+ if (buildType === undefined)
126
+ return notChecked("the provenance names no build type");
127
+ return { checked: true, repository, commit, workflow: path, buildType };
128
+ }
129
+ /** A repository URL compared case-insensitively, without `git+`, `.git` and a trailing `/`. */
130
+ function repoKey(url) {
131
+ const s = url
132
+ .trim()
133
+ .replace(/^git\+/, "")
134
+ .replace(/\/+$/, "")
135
+ .replace(/\.git$/, "");
136
+ try {
137
+ const u = new URL(s);
138
+ return `${u.host}${u.pathname}`.toLowerCase().replace(/\/+$/, "");
139
+ }
140
+ catch {
141
+ return s.toLowerCase();
142
+ }
143
+ }
144
+ /** Two repository URLs name the same repository (scheme, `git+`, `.git`, case ignored). */
145
+ export function sameRepository(a, b) {
146
+ return repoKey(a) === repoKey(b);
147
+ }
@@ -0,0 +1,76 @@
1
+ /**
2
+ * Unpacking a package tgz (npm pack layout, every entry under `package/`) and reading its
3
+ * `package.json`, shared by the plugin package reader (`catalog/plugin-package.ts`) and the
4
+ * extension package reader (`extensions/package.ts`). The tgz is always hostile input:
5
+ *
6
+ * - at most `maxBytes` compressed (the caller passes `packages.maxBytes`); `zlib.gunzip`'s
7
+ * `maxOutputLength` caps the **actual** unpacked bytes ({@link PACKAGE_TGZ_LIMITS}.maxUnpackedBytes),
8
+ * stopping decompression bombs. The package and its content are handled in memory.
9
+ * - the tar is parsed with tar-stream (3.2.2, pinned): in memory only, never the file system (unlike
10
+ * node-tar's extract, with its history of path traversal / symlink CVEs), header checksums checked,
11
+ * pax / GNU long names handled; it only hands over raw headers and every decision is made here.
12
+ * - only regular files and directories: symlinks, hard links, devices, fifos are refused; at most
13
+ * {@link PACKAGE_TGZ_LIMITS}.maxEntries entries; paths under `package/` and safe (plugin-sdk
14
+ * `isSafePackagePath`: no `..`, `.`, empty segments, backslashes, control characters, drive
15
+ * letters), deduplicated case-insensitively (they would overwrite each other on a case-insensitive
16
+ * file system); no `node_modules/`, `*.node`, `binding.gyp`.
17
+ * - `package.json` at most {@link PACKAGE_TGZ_LIMITS}.maxPackageJsonBytes, strict UTF-8 +
18
+ * `JSON.parse`.
19
+ *
20
+ * Problems throw {@link PackageTgzError}; each reader maps it to its own error.
21
+ */
22
+ /** Limits on unpacking and on `package.json`. */
23
+ export declare const PACKAGE_TGZ_LIMITS: {
24
+ /** Total unpacked tar bytes. */
25
+ readonly maxUnpackedBytes: number;
26
+ /** Tar entries (directories included). */
27
+ readonly maxEntries: 5000;
28
+ /** Bytes of `package.json`. */
29
+ readonly maxPackageJsonBytes: number;
30
+ };
31
+ /**
32
+ * The host's zod version (a plugin package's `peerDependencies.zod` must be satisfied by it: the
33
+ * plugin uses this zod when loaded). Resolved from the kernel's own dependencies, the same package
34
+ * `syncPackage` links for extensions.
35
+ */
36
+ export declare const HOST_ZOD_VERSION: string;
37
+ /** The message for a tgz in the pre-0.1.0 format (follows the package's name). */
38
+ export declare const LEGACY_FORMAT_MESSAGE = "uses the pre-0.1.0 package format (capybara section / app.yaml); repack it as a plugin with .capybara-plugin/plugin.json (pnpm pack-plugin)";
39
+ /** `./skills/x` → `skills/x` (manifest paths start with `./`). */
40
+ export declare const packagePath: (p: string) => string;
41
+ /** A tgz or `package.json` problem; `issues` lists them (English, shown to the admin). */
42
+ export declare class PackageTgzError extends Error {
43
+ readonly issues: string[];
44
+ constructor(issues: string[]);
45
+ }
46
+ /** Unpack limits: `maxBytes` is `packages.maxBytes`; the rest default to {@link PACKAGE_TGZ_LIMITS}. */
47
+ export interface PackageTgzLimits {
48
+ maxBytes: number;
49
+ maxUnpackedBytes?: number;
50
+ maxEntries?: number;
51
+ }
52
+ /** A file in the tgz (path relative to the package root, `package/` removed). */
53
+ export interface PackageFile {
54
+ path: string;
55
+ data: Buffer;
56
+ }
57
+ /**
58
+ * Unpacks a tgz by the rules in the file header, without looking at the content. Invalid ->
59
+ * {@link PackageTgzError}.
60
+ */
61
+ export declare function unpackPackageTgz(bytes: Uint8Array, limits: PackageTgzLimits): Promise<PackageFile[]>;
62
+ /**
63
+ * Reads the package's `package.json`: it must exist, be at most
64
+ * {@link PACKAGE_TGZ_LIMITS}.maxPackageJsonBytes and strict UTF-8 JSON. Invalid ->
65
+ * {@link PackageTgzError}. Returns the parse result (shape not validated).
66
+ */
67
+ export declare function parsePackageJsonFile(file: {
68
+ data: Uint8Array;
69
+ } | undefined): unknown;
70
+ /**
71
+ * Packs files (paths relative to the package root) as an npm-pack style tgz under `package/`,
72
+ * deterministically: sorted paths, mode 0644, mtime 0, so the same files always give the same bytes
73
+ * (and the same package store key). Used for a git plugin with an extension, whose extension is
74
+ * stored and installed as a package like any other. The result is read back with the tgz rules.
75
+ */
76
+ export declare function packPackageTgz(files: ReadonlyMap<string, Uint8Array>): Promise<Uint8Array>;
@@ -0,0 +1,225 @@
1
+ import { createRequire } from "node:module";
2
+ import { promisify } from "node:util";
3
+ import { gunzip, gzip } from "node:zlib";
4
+ import { isSafePackagePath } from "@capybara-hq/plugin-sdk";
5
+ import { extract as tarExtract, pack as tarPack } from "tar-stream";
6
+ /**
7
+ * Unpacking a package tgz (npm pack layout, every entry under `package/`) and reading its
8
+ * `package.json`, shared by the plugin package reader (`catalog/plugin-package.ts`) and the
9
+ * extension package reader (`extensions/package.ts`). The tgz is always hostile input:
10
+ *
11
+ * - at most `maxBytes` compressed (the caller passes `packages.maxBytes`); `zlib.gunzip`'s
12
+ * `maxOutputLength` caps the **actual** unpacked bytes ({@link PACKAGE_TGZ_LIMITS}.maxUnpackedBytes),
13
+ * stopping decompression bombs. The package and its content are handled in memory.
14
+ * - the tar is parsed with tar-stream (3.2.2, pinned): in memory only, never the file system (unlike
15
+ * node-tar's extract, with its history of path traversal / symlink CVEs), header checksums checked,
16
+ * pax / GNU long names handled; it only hands over raw headers and every decision is made here.
17
+ * - only regular files and directories: symlinks, hard links, devices, fifos are refused; at most
18
+ * {@link PACKAGE_TGZ_LIMITS}.maxEntries entries; paths under `package/` and safe (plugin-sdk
19
+ * `isSafePackagePath`: no `..`, `.`, empty segments, backslashes, control characters, drive
20
+ * letters), deduplicated case-insensitively (they would overwrite each other on a case-insensitive
21
+ * file system); no `node_modules/`, `*.node`, `binding.gyp`.
22
+ * - `package.json` at most {@link PACKAGE_TGZ_LIMITS}.maxPackageJsonBytes, strict UTF-8 +
23
+ * `JSON.parse`.
24
+ *
25
+ * Problems throw {@link PackageTgzError}; each reader maps it to its own error.
26
+ */
27
+ /** Limits on unpacking and on `package.json`. */
28
+ export const PACKAGE_TGZ_LIMITS = {
29
+ /** Total unpacked tar bytes. */
30
+ maxUnpackedBytes: 256 * 1024 * 1024,
31
+ /** Tar entries (directories included). */
32
+ maxEntries: 5000,
33
+ /** Bytes of `package.json`. */
34
+ maxPackageJsonBytes: 1024 * 1024,
35
+ };
36
+ /**
37
+ * The host's zod version (a plugin package's `peerDependencies.zod` must be satisfied by it: the
38
+ * plugin uses this zod when loaded). Resolved from the kernel's own dependencies, the same package
39
+ * `syncPackage` links for extensions.
40
+ */
41
+ export const HOST_ZOD_VERSION = createRequire(import.meta.url)("zod/package.json").version;
42
+ /** The message for a tgz in the pre-0.1.0 format (follows the package's name). */
43
+ export const LEGACY_FORMAT_MESSAGE = "uses the pre-0.1.0 package format (capybara section / app.yaml); repack it as a plugin with .capybara-plugin/plugin.json (pnpm pack-plugin)";
44
+ /** `./skills/x` → `skills/x` (manifest paths start with `./`). */
45
+ export const packagePath = (p) => p.replace(/^\.\//, "").replace(/\/+$/, "");
46
+ /** A tgz or `package.json` problem; `issues` lists them (English, shown to the admin). */
47
+ export class PackageTgzError extends Error {
48
+ issues;
49
+ constructor(issues) {
50
+ super(issues[0] ?? "unknown problem");
51
+ this.name = "PackageTgzError";
52
+ this.issues = issues;
53
+ }
54
+ }
55
+ /** The npm pack prefix of every entry. */
56
+ const PREFIX = "package/";
57
+ const fail = (issue) => {
58
+ throw new PackageTgzError([issue]);
59
+ };
60
+ const errMsg = (e) => (e instanceof Error ? e.message : String(e));
61
+ const isForbiddenFile = (path) => {
62
+ const segs = path.split("/");
63
+ if (segs.includes("node_modules"))
64
+ return `${path}: node_modules/ is not allowed`;
65
+ const base = segs[segs.length - 1];
66
+ if (base === "binding.gyp")
67
+ return `${path}: binding.gyp is not allowed (native addons)`;
68
+ if (base.endsWith(".node"))
69
+ return `${path}: native addon (.node) files are not allowed`;
70
+ return undefined;
71
+ };
72
+ /** Decompresses and parses the tar and returns the files in it (with `package/` removed from paths). Anything non-conforming -> {@link PackageTgzError}. */
73
+ async function unpack(bytes, opts) {
74
+ if (bytes.byteLength > opts.maxBytes) {
75
+ fail(`the package is larger than ${opts.maxBytes} bytes`);
76
+ }
77
+ let tarBuf;
78
+ try {
79
+ tarBuf = await promisify(gunzip)(Buffer.from(bytes.buffer, bytes.byteOffset, bytes.byteLength), {
80
+ maxOutputLength: opts.maxUnpackedBytes,
81
+ });
82
+ }
83
+ catch (e) {
84
+ if (e.code === "ERR_BUFFER_TOO_LARGE" || e instanceof RangeError) {
85
+ throw new PackageTgzError([
86
+ `the package is larger than ${opts.maxUnpackedBytes} bytes unpacked`,
87
+ ]);
88
+ }
89
+ throw new PackageTgzError(["the file is not a gzip-compressed tar archive"]);
90
+ }
91
+ const files = [];
92
+ const seen = new Set();
93
+ const dirs = new Set();
94
+ let entries = 0;
95
+ const ex = tarExtract();
96
+ ex.end(tarBuf);
97
+ try {
98
+ for await (const entry of ex) {
99
+ const h = entry.header;
100
+ entries++;
101
+ if (entries > opts.maxEntries)
102
+ fail(`the package has more than ${opts.maxEntries} entries`);
103
+ const raw = String(h.name);
104
+ const type = h.type;
105
+ if (type !== "file" && type !== "directory") {
106
+ entry.resume();
107
+ fail(`${raw}: ${type ?? "unknown"} entries are not allowed (only regular files)`);
108
+ }
109
+ const name = type === "directory" && raw.endsWith("/") ? raw.slice(0, -1) : raw;
110
+ if (!name.startsWith(PREFIX) && name !== PREFIX.slice(0, -1)) {
111
+ entry.resume();
112
+ fail(`${raw}: every entry must be under package/`);
113
+ }
114
+ const rel = name.slice(PREFIX.length);
115
+ if (type === "directory") {
116
+ entry.resume();
117
+ if (rel !== "" && !isSafePackagePath(rel))
118
+ fail(`${raw}: unsafe path`);
119
+ continue;
120
+ }
121
+ if (!isSafePackagePath(rel)) {
122
+ entry.resume();
123
+ fail(`${raw}: unsafe path`);
124
+ }
125
+ const forbidden = isForbiddenFile(rel);
126
+ if (forbidden) {
127
+ entry.resume();
128
+ fail(forbidden);
129
+ }
130
+ const key = rel.toLowerCase();
131
+ if (seen.has(key) || dirs.has(key)) {
132
+ entry.resume();
133
+ fail(`${raw}: duplicate path (paths are compared case-insensitively)`);
134
+ }
135
+ seen.add(key);
136
+ const segs = key.split("/");
137
+ for (let i = 1; i < segs.length; i++) {
138
+ const d = segs.slice(0, i).join("/");
139
+ if (seen.has(d))
140
+ fail(`${raw}: path conflicts with file "${d}"`);
141
+ dirs.add(d);
142
+ }
143
+ const chunks = [];
144
+ for await (const c of entry)
145
+ chunks.push(c);
146
+ // One chunk is used as is (no copy); only several are concatenated
147
+ files.push({
148
+ path: rel,
149
+ data: chunks.length === 1 ? chunks[0] : Buffer.concat(chunks),
150
+ });
151
+ }
152
+ }
153
+ catch (e) {
154
+ ex.destroy();
155
+ if (e instanceof PackageTgzError)
156
+ throw e;
157
+ fail(`the tar archive is malformed: ${errMsg(e)}`);
158
+ }
159
+ return files;
160
+ }
161
+ const utf8 = (path, data) => {
162
+ try {
163
+ return new TextDecoder("utf-8", { fatal: true }).decode(data);
164
+ }
165
+ catch {
166
+ return fail(`${path} is not valid UTF-8 text`);
167
+ }
168
+ };
169
+ /**
170
+ * Unpacks a tgz by the rules in the file header, without looking at the content. Invalid ->
171
+ * {@link PackageTgzError}.
172
+ */
173
+ export function unpackPackageTgz(bytes, limits) {
174
+ return unpack(bytes, {
175
+ maxBytes: limits.maxBytes,
176
+ maxUnpackedBytes: limits.maxUnpackedBytes ?? PACKAGE_TGZ_LIMITS.maxUnpackedBytes,
177
+ maxEntries: limits.maxEntries ?? PACKAGE_TGZ_LIMITS.maxEntries,
178
+ });
179
+ }
180
+ /**
181
+ * Reads the package's `package.json`: it must exist, be at most
182
+ * {@link PACKAGE_TGZ_LIMITS}.maxPackageJsonBytes and strict UTF-8 JSON. Invalid ->
183
+ * {@link PackageTgzError}. Returns the parse result (shape not validated).
184
+ */
185
+ export function parsePackageJsonFile(file) {
186
+ if (!file)
187
+ return fail("package.json not found in the package");
188
+ if (file.data.byteLength > PACKAGE_TGZ_LIMITS.maxPackageJsonBytes) {
189
+ fail(`package.json is larger than ${PACKAGE_TGZ_LIMITS.maxPackageJsonBytes} bytes`);
190
+ }
191
+ const text = utf8("package.json", file.data);
192
+ try {
193
+ return JSON.parse(text);
194
+ }
195
+ catch {
196
+ return fail("package.json is not valid JSON");
197
+ }
198
+ }
199
+ /**
200
+ * Packs files (paths relative to the package root) as an npm-pack style tgz under `package/`,
201
+ * deterministically: sorted paths, mode 0644, mtime 0, so the same files always give the same bytes
202
+ * (and the same package store key). Used for a git plugin with an extension, whose extension is
203
+ * stored and installed as a package like any other. The result is read back with the tgz rules.
204
+ */
205
+ export async function packPackageTgz(files) {
206
+ const p = tarPack();
207
+ const chunks = [];
208
+ const done = (async () => {
209
+ for await (const c of p)
210
+ chunks.push(c);
211
+ })();
212
+ for (const path of [...files.keys()].sort()) {
213
+ const data = Buffer.from(files.get(path));
214
+ await new Promise((resolve, reject) => p.entry({
215
+ name: `${PREFIX}${path}`,
216
+ type: "file",
217
+ mode: 0o644,
218
+ mtime: new Date(0),
219
+ size: data.length,
220
+ }, data, (err) => (err ? reject(err) : resolve())));
221
+ }
222
+ p.finalize();
223
+ await done;
224
+ return new Uint8Array(await promisify(gzip)(Buffer.concat(chunks)));
225
+ }
@@ -0,0 +1,32 @@
1
+ import type { ExtensionContext } from "@capybara-hq/plugin-sdk";
2
+ import type { Redis } from "ioredis";
3
+ /** 中止广播的内核 bus 主题。 */
4
+ export declare const RUN_ABORT_TOPIC = "run.abort";
5
+ /**
6
+ * Why the kernel stops a run, when it is not a plain stop: `wait_timeout`, a sub-agent stopped by
7
+ * its parent's sub-agents wait timeout. Written to `run_aborted.detail`.
8
+ */
9
+ export type RunAbortDetail = "wait_timeout";
10
+ /** Who stopped a run, and why when the kernel did. */
11
+ export interface RunAbortBy {
12
+ byAccountId: string | null;
13
+ detail?: RunAbortDetail;
14
+ }
15
+ /**
16
+ * 跨副本中止(spec 4.3「中止信号经 Redis 广播」):`request` 先写标记键再广播;
17
+ * `watch` 先订阅、再检查一次标记键,订阅之前发出的中止也不会丢。
18
+ */
19
+ export declare class RunAbort {
20
+ private readonly redis;
21
+ private readonly bus;
22
+ constructor(redis: Redis, bus: ExtensionContext["bus"]);
23
+ request(runId: string, byAccountId: string | null, detail?: RunAbortDetail): Promise<void>;
24
+ /**
25
+ * Whether a stop of this run was requested (reads the marker key): who asked (and why, when the
26
+ * kernel did), or null. For the moments without a subscriber (a run that just suspended and is
27
+ * about to become `waiting`), to pick up a stop that arrived meanwhile.
28
+ */
29
+ requested(runId: string): Promise<RunAbortBy | null>;
30
+ /** Subscribes to stops of one run; `onAbort` is called at most once. Returns the unsubscribe. */
31
+ watch(runId: string, onAbort: (byAccountId: string | null, detail?: RunAbortDetail) => void): Promise<() => Promise<void>>;
32
+ }
@@ -0,0 +1,71 @@
1
+ /** 中止广播的内核 bus 主题。 */
2
+ export const RUN_ABORT_TOPIC = "run.abort";
3
+ /** 中止标记的保留时长(秒)。 */
4
+ const ABORT_TTL_SECONDS = 3600;
5
+ const abortKey = (runId) => `capk:run-abort:${runId}`;
6
+ const detailOf = (v) => v === "wait_timeout" ? { detail: v } : {};
7
+ const parseStored = (stored) => {
8
+ const m = JSON.parse(stored);
9
+ return {
10
+ byAccountId: typeof m.byAccountId === "string" ? m.byAccountId : null,
11
+ ...detailOf(m.detail),
12
+ };
13
+ };
14
+ /**
15
+ * 跨副本中止(spec 4.3「中止信号经 Redis 广播」):`request` 先写标记键再广播;
16
+ * `watch` 先订阅、再检查一次标记键,订阅之前发出的中止也不会丢。
17
+ */
18
+ export class RunAbort {
19
+ redis;
20
+ bus;
21
+ constructor(redis, bus) {
22
+ this.redis = redis;
23
+ this.bus = bus;
24
+ }
25
+ async request(runId, byAccountId, detail) {
26
+ const by = { byAccountId, ...(detail !== undefined && { detail }) };
27
+ await this.redis.set(abortKey(runId), JSON.stringify(by), "EX", ABORT_TTL_SECONDS);
28
+ const msg = { runId, ...by };
29
+ await this.bus.publish(RUN_ABORT_TOPIC, msg);
30
+ }
31
+ /**
32
+ * Whether a stop of this run was requested (reads the marker key): who asked (and why, when the
33
+ * kernel did), or null. For the moments without a subscriber (a run that just suspended and is
34
+ * about to become `waiting`), to pick up a stop that arrived meanwhile.
35
+ */
36
+ async requested(runId) {
37
+ const stored = await this.redis.get(abortKey(runId));
38
+ if (stored === null)
39
+ return null;
40
+ return parseStored(stored);
41
+ }
42
+ /** Subscribes to stops of one run; `onAbort` is called at most once. Returns the unsubscribe. */
43
+ async watch(runId, onAbort) {
44
+ let fired = false;
45
+ const fire = (by) => {
46
+ if (fired)
47
+ return;
48
+ fired = true;
49
+ onAbort(by.byAccountId, by.detail);
50
+ };
51
+ const unsubscribe = await this.bus.subscribe(RUN_ABORT_TOPIC, (payload) => {
52
+ const m = payload;
53
+ if (m?.runId === runId) {
54
+ fire({
55
+ byAccountId: typeof m.byAccountId === "string" ? m.byAccountId : null,
56
+ ...detailOf(m.detail),
57
+ });
58
+ }
59
+ });
60
+ try {
61
+ const stored = await this.redis.get(abortKey(runId));
62
+ if (stored !== null)
63
+ fire(parseStored(stored));
64
+ }
65
+ catch (err) {
66
+ await unsubscribe();
67
+ throw err;
68
+ }
69
+ return unsubscribe;
70
+ }
71
+ }
@@ -0,0 +1,32 @@
1
+ import type { RunnableConfig } from "@langchain/core/runnables";
2
+ import { BaseCheckpointSaver, type ChannelVersions, type Checkpoint, type CheckpointListOptions, type CheckpointMetadata, type CheckpointTuple, type PendingWrite } from "@langchain/langgraph-checkpoint";
3
+ import type { KernelDb } from "../db/kernel-schema.js";
4
+ /**
5
+ * LangGraph checkpoint saver,存在内核 schema 的 `lg_checkpoints` / `lg_checkpoint_writes` 里(0007_checkpoints.sql)。
6
+ *
7
+ * - 每个 checkpoint 存整份(含全部 channel_values),不按 channel 增量存,所以 {@link pruneToLatest}
8
+ * 之后最新一份仍能独立还原。不要配合实验性的 `DeltaChannel` 使用:它依赖父链上的 writes 还原状态。
9
+ * - thread_id 约定为 runId。
10
+ * - 所有状态都在 PG 里,不持有进程内状态,任意副本都能续跑。
11
+ */
12
+ export declare class KyselyCheckpointSaver extends BaseCheckpointSaver {
13
+ private readonly db;
14
+ constructor(db: KernelDb);
15
+ getTuple(config: RunnableConfig): Promise<CheckpointTuple | undefined>;
16
+ list(config: RunnableConfig, options?: CheckpointListOptions): AsyncGenerator<CheckpointTuple>;
17
+ put(config: RunnableConfig, checkpoint: Checkpoint, metadata: CheckpointMetadata, _newVersions: ChannelVersions): Promise<RunnableConfig>;
18
+ putWrites(config: RunnableConfig, writes: PendingWrite[], taskId: string, taskPath?: string): Promise<void>;
19
+ deleteThread(threadId: string): Promise<void>;
20
+ /**
21
+ * 一轮运行结束后调用:根命名空间(`checkpoint_ns = ''`)下只保留最新一个 checkpoint 及其 writes,
22
+ * 更早的 checkpoint 与它们的 writes 删除。只删 checkpoint_id **小于**最新的(按字节序):
23
+ * 读出最新与删除之间并发写入的更新 checkpoint 不会被误删(R20)。返回删除的 checkpoint 条数。其他命名空间(子图)不动。
24
+ * 保留下来的 checkpoint 的 parent_checkpoint_id 原样保留(父 checkpoint 已不存在)。
25
+ */
26
+ pruneToLatest(threadId: string): Promise<number>;
27
+ private toTuple;
28
+ /** 某个 checkpoint 的 writes,按 `writesSortKey`(task_path, task_id, idx)排序。 */
29
+ private loadWrites;
30
+ /** v < 4 的旧 checkpoint:把父 checkpoint 上的 TASKS writes 迁成本 checkpoint 的 TASKS channel(同 MemorySaver)。 */
31
+ private migratePendingSends;
32
+ }