@runcore-sh/runcore 0.4.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (351) hide show
  1. package/dictionary.json +2 -2
  2. package/dist/activity/log.js +2 -2
  3. package/dist/activity/log.js.map +1 -1
  4. package/dist/agents/governed-spawn.d.ts.map +1 -1
  5. package/dist/cli.js +101 -11
  6. package/dist/cli.js.map +1 -1
  7. package/dist/extensions/cache.d.ts +57 -0
  8. package/dist/extensions/cache.d.ts.map +1 -0
  9. package/dist/extensions/cache.js +173 -0
  10. package/dist/extensions/cache.js.map +1 -0
  11. package/dist/extensions/client.d.ts +55 -0
  12. package/dist/extensions/client.d.ts.map +1 -0
  13. package/dist/extensions/client.js +120 -0
  14. package/dist/extensions/client.js.map +1 -0
  15. package/dist/extensions/index.d.ts +13 -0
  16. package/dist/extensions/index.d.ts.map +1 -0
  17. package/dist/extensions/index.js +12 -0
  18. package/dist/extensions/index.js.map +1 -0
  19. package/dist/extensions/loader.d.ts +50 -0
  20. package/dist/extensions/loader.d.ts.map +1 -0
  21. package/dist/extensions/loader.js +166 -0
  22. package/dist/extensions/loader.js.map +1 -0
  23. package/dist/extensions/manifest.d.ts +38 -0
  24. package/dist/extensions/manifest.d.ts.map +1 -0
  25. package/dist/extensions/manifest.js +17 -0
  26. package/dist/extensions/manifest.js.map +1 -0
  27. package/dist/extensions/stubs.d.ts +27 -0
  28. package/dist/extensions/stubs.d.ts.map +1 -0
  29. package/dist/extensions/stubs.js +45 -0
  30. package/dist/extensions/stubs.js.map +1 -0
  31. package/dist/lib/audit.js +2 -2
  32. package/dist/lib/audit.js.map +1 -1
  33. package/dist/lib/brain-migrate.d.ts +21 -0
  34. package/dist/lib/brain-migrate.d.ts.map +1 -0
  35. package/dist/lib/brain-migrate.js +137 -0
  36. package/dist/lib/brain-migrate.js.map +1 -0
  37. package/dist/lib/paths.d.ts +27 -0
  38. package/dist/lib/paths.d.ts.map +1 -1
  39. package/dist/lib/paths.js +65 -0
  40. package/dist/lib/paths.js.map +1 -1
  41. package/dist/llm/call-log.d.ts +40 -0
  42. package/dist/llm/call-log.d.ts.map +1 -0
  43. package/dist/llm/call-log.js +35 -0
  44. package/dist/llm/call-log.js.map +1 -0
  45. package/dist/llm/complete.d.ts +6 -0
  46. package/dist/llm/complete.d.ts.map +1 -1
  47. package/dist/llm/complete.js +27 -0
  48. package/dist/llm/complete.js.map +1 -1
  49. package/dist/mcp-server.js +118 -2
  50. package/dist/mcp-server.js.map +1 -1
  51. package/dist/memory/file-backed.d.ts +4 -0
  52. package/dist/memory/file-backed.d.ts.map +1 -1
  53. package/dist/memory/file-backed.js +4 -0
  54. package/dist/memory/file-backed.js.map +1 -1
  55. package/dist/memory/vector-index.d.ts +4 -12
  56. package/dist/memory/vector-index.d.ts.map +1 -1
  57. package/dist/memory/vector-index.js +11 -93
  58. package/dist/memory/vector-index.js.map +1 -1
  59. package/dist/search/brain-docs.d.ts +17 -7
  60. package/dist/search/brain-docs.d.ts.map +1 -1
  61. package/dist/search/brain-docs.js +170 -52
  62. package/dist/search/brain-docs.js.map +1 -1
  63. package/dist/search/brain-rag.d.ts +45 -0
  64. package/dist/search/brain-rag.d.ts.map +1 -0
  65. package/dist/search/brain-rag.js +275 -0
  66. package/dist/search/brain-rag.js.map +1 -0
  67. package/dist/search/chunker.d.ts +24 -0
  68. package/dist/search/chunker.d.ts.map +1 -0
  69. package/dist/search/chunker.js +95 -0
  70. package/dist/search/chunker.js.map +1 -0
  71. package/dist/search/embedder.d.ts +16 -0
  72. package/dist/search/embedder.d.ts.map +1 -0
  73. package/dist/search/embedder.js +108 -0
  74. package/dist/search/embedder.js.map +1 -0
  75. package/dist/search/file-watcher.d.ts +11 -0
  76. package/dist/search/file-watcher.d.ts.map +1 -0
  77. package/dist/search/file-watcher.js +86 -0
  78. package/dist/search/file-watcher.js.map +1 -0
  79. package/dist/server.d.ts.map +1 -1
  80. package/dist/server.js +168 -20
  81. package/dist/server.js.map +1 -1
  82. package/dist/sessions/store.d.ts +9 -0
  83. package/dist/sessions/store.d.ts.map +1 -1
  84. package/dist/sessions/store.js.map +1 -1
  85. package/dist/settings.d.ts +26 -0
  86. package/dist/settings.d.ts.map +1 -1
  87. package/dist/settings.js +78 -2
  88. package/dist/settings.js.map +1 -1
  89. package/dist/tracing/init.d.ts +1 -1
  90. package/dist/tracing/init.d.ts.map +1 -1
  91. package/dist/utils/logger.js +2 -2
  92. package/dist/utils/logger.js.map +1 -1
  93. package/module-tiers.json +164 -0
  94. package/package.json +9 -13
  95. package/public/avatar/cache/1184385ec5522b57.mp4 +0 -0
  96. package/public/avatar/cache/1f15f6a1ebd7e439.mp4 +0 -0
  97. package/public/avatar/cache/2c7e47ff0bdeb8d1.mp4 +0 -0
  98. package/public/avatar/cache/5f308566f7abb8f2.mp4 +0 -0
  99. package/public/avatar/cache/62f9cfba848d724e.mp4 +0 -0
  100. package/public/avatar/cache/6d64e657e6bf2aab.mp4 +0 -0
  101. package/public/avatar/cache/763ad0349e0b6f26.mp4 +0 -0
  102. package/public/avatar/cache/81a516cfd461b2b9.mp4 +0 -0
  103. package/public/avatar/cache/9366de15fd6910ca.mp4 +0 -0
  104. package/public/avatar/cache/ade41a846b283895.mp4 +0 -0
  105. package/public/avatar/cache/b6066e5c65383eec.mp4 +0 -0
  106. package/public/avatar/cache/edadb75d37891fc7.mp4 +0 -0
  107. package/public/avatar/cache/f0ae159640621dd9.mp4 +0 -0
  108. package/public/avatar/cache/fc2e5419adf29d96.mp4 +0 -0
  109. package/public/index.html +379 -59
  110. package/dist/agents/autonomous.js +0 -749
  111. package/dist/agents/autonomous.js.map +0 -1
  112. package/dist/agents/commit.js +0 -113
  113. package/dist/agents/commit.js.map +0 -1
  114. package/dist/agents/continue.js +0 -158
  115. package/dist/agents/continue.js.map +0 -1
  116. package/dist/agents/cooldown.js +0 -397
  117. package/dist/agents/cooldown.js.map +0 -1
  118. package/dist/agents/dedup-guard.js +0 -131
  119. package/dist/agents/dedup-guard.js.map +0 -1
  120. package/dist/agents/feed.js +0 -176
  121. package/dist/agents/feed.js.map +0 -1
  122. package/dist/agents/governance.js +0 -292
  123. package/dist/agents/governance.js.map +0 -1
  124. package/dist/agents/governed-spawn.js +0 -192
  125. package/dist/agents/governed-spawn.js.map +0 -1
  126. package/dist/agents/heartbeat.js +0 -324
  127. package/dist/agents/heartbeat.js.map +0 -1
  128. package/dist/agents/instance-manager.js +0 -850
  129. package/dist/agents/instance-manager.js.map +0 -1
  130. package/dist/agents/issue-reporter.js +0 -123
  131. package/dist/agents/issue-reporter.js.map +0 -1
  132. package/dist/agents/issues.js +0 -141
  133. package/dist/agents/issues.js.map +0 -1
  134. package/dist/agents/locks.js +0 -234
  135. package/dist/agents/locks.js.map +0 -1
  136. package/dist/agents/memory.js +0 -93
  137. package/dist/agents/memory.js.map +0 -1
  138. package/dist/agents/monitor.js +0 -235
  139. package/dist/agents/monitor.js.map +0 -1
  140. package/dist/agents/orchestration.js +0 -715
  141. package/dist/agents/orchestration.js.map +0 -1
  142. package/dist/agents/recover.js +0 -166
  143. package/dist/agents/recover.js.map +0 -1
  144. package/dist/agents/reflection.js +0 -199
  145. package/dist/agents/reflection.js.map +0 -1
  146. package/dist/agents/runtime/bus.js +0 -174
  147. package/dist/agents/runtime/bus.js.map +0 -1
  148. package/dist/agents/runtime/config.js +0 -101
  149. package/dist/agents/runtime/config.js.map +0 -1
  150. package/dist/agents/runtime/driver.js +0 -214
  151. package/dist/agents/runtime/driver.js.map +0 -1
  152. package/dist/agents/runtime/errors.js +0 -40
  153. package/dist/agents/runtime/errors.js.map +0 -1
  154. package/dist/agents/runtime/index.js +0 -54
  155. package/dist/agents/runtime/index.js.map +0 -1
  156. package/dist/agents/runtime/lifecycle.js +0 -116
  157. package/dist/agents/runtime/lifecycle.js.map +0 -1
  158. package/dist/agents/runtime/manager.js +0 -948
  159. package/dist/agents/runtime/manager.js.map +0 -1
  160. package/dist/agents/runtime/registry.js +0 -195
  161. package/dist/agents/runtime/registry.js.map +0 -1
  162. package/dist/agents/runtime/resources.js +0 -146
  163. package/dist/agents/runtime/resources.js.map +0 -1
  164. package/dist/agents/runtime/types.js +0 -24
  165. package/dist/agents/runtime/types.js.map +0 -1
  166. package/dist/agents/spawn-policy.js +0 -202
  167. package/dist/agents/spawn-policy.js.map +0 -1
  168. package/dist/agents/spawn.js +0 -970
  169. package/dist/agents/spawn.js.map +0 -1
  170. package/dist/agents/triage.js +0 -81
  171. package/dist/agents/triage.js.map +0 -1
  172. package/dist/agents/workflow.js +0 -543
  173. package/dist/agents/workflow.js.map +0 -1
  174. package/dist/avatar/client.js +0 -172
  175. package/dist/avatar/client.js.map +0 -1
  176. package/dist/avatar/sidecar.js +0 -125
  177. package/dist/avatar/sidecar.js.map +0 -1
  178. package/dist/browser/sessions.js +0 -122
  179. package/dist/browser/sessions.js.map +0 -1
  180. package/dist/capabilities/definitions/browser.js +0 -242
  181. package/dist/capabilities/definitions/browser.js.map +0 -1
  182. package/dist/channels/whatsapp.js +0 -200
  183. package/dist/channels/whatsapp.js.map +0 -1
  184. package/dist/credentials/store.js +0 -189
  185. package/dist/credentials/store.js.map +0 -1
  186. package/dist/files/deep-index.js +0 -337
  187. package/dist/files/deep-index.js.map +0 -1
  188. package/dist/files/extract.js +0 -33
  189. package/dist/files/extract.js.map +0 -1
  190. package/dist/files/gdrive.js +0 -246
  191. package/dist/files/gdrive.js.map +0 -1
  192. package/dist/github/client.js +0 -408
  193. package/dist/github/client.js.map +0 -1
  194. package/dist/github/commit-analysis.js +0 -276
  195. package/dist/github/commit-analysis.js.map +0 -1
  196. package/dist/github/contributor-stats.js +0 -119
  197. package/dist/github/contributor-stats.js.map +0 -1
  198. package/dist/github/issue-sla.js +0 -220
  199. package/dist/github/issue-sla.js.map +0 -1
  200. package/dist/github/issue-triage.js +0 -286
  201. package/dist/github/issue-triage.js.map +0 -1
  202. package/dist/github/pr-readiness.js +0 -197
  203. package/dist/github/pr-readiness.js.map +0 -1
  204. package/dist/github/pr-review.js +0 -410
  205. package/dist/github/pr-review.js.map +0 -1
  206. package/dist/github/release-notes.js +0 -227
  207. package/dist/github/release-notes.js.map +0 -1
  208. package/dist/github/repo-health.js +0 -303
  209. package/dist/github/repo-health.js.map +0 -1
  210. package/dist/github/retry.js +0 -117
  211. package/dist/github/retry.js.map +0 -1
  212. package/dist/github/types.js +0 -8
  213. package/dist/github/types.js.map +0 -1
  214. package/dist/github/webhooks.js +0 -153
  215. package/dist/github/webhooks.js.map +0 -1
  216. package/dist/google/auth.js +0 -325
  217. package/dist/google/auth.js.map +0 -1
  218. package/dist/google/calendar-timer.js +0 -91
  219. package/dist/google/calendar-timer.js.map +0 -1
  220. package/dist/google/calendar.js +0 -270
  221. package/dist/google/calendar.js.map +0 -1
  222. package/dist/google/docs.js +0 -309
  223. package/dist/google/docs.js.map +0 -1
  224. package/dist/google/gmail-send.js +0 -219
  225. package/dist/google/gmail-send.js.map +0 -1
  226. package/dist/google/gmail-timer.js +0 -223
  227. package/dist/google/gmail-timer.js.map +0 -1
  228. package/dist/google/gmail.js +0 -470
  229. package/dist/google/gmail.js.map +0 -1
  230. package/dist/google/plugin.js +0 -169
  231. package/dist/google/plugin.js.map +0 -1
  232. package/dist/google/tasks-timer.js +0 -107
  233. package/dist/google/tasks-timer.js.map +0 -1
  234. package/dist/google/tasks.js +0 -331
  235. package/dist/google/tasks.js.map +0 -1
  236. package/dist/google/temporal.js +0 -176
  237. package/dist/google/temporal.js.map +0 -1
  238. package/dist/integrations/gate.js +0 -100
  239. package/dist/integrations/gate.js.map +0 -1
  240. package/dist/integrations/github.js +0 -331
  241. package/dist/integrations/github.js.map +0 -1
  242. package/dist/integrations/google-tasks.js +0 -432
  243. package/dist/integrations/google-tasks.js.map +0 -1
  244. package/dist/mdns.js +0 -110
  245. package/dist/mdns.js.map +0 -1
  246. package/dist/notifications/channel.js +0 -83
  247. package/dist/notifications/channel.js.map +0 -1
  248. package/dist/notifications/channels/adapter.js +0 -55
  249. package/dist/notifications/channels/adapter.js.map +0 -1
  250. package/dist/notifications/channels/index.js +0 -6
  251. package/dist/notifications/channels/index.js.map +0 -1
  252. package/dist/notifications/channels/log.js +0 -29
  253. package/dist/notifications/channels/log.js.map +0 -1
  254. package/dist/notifications/email.js +0 -72
  255. package/dist/notifications/email.js.map +0 -1
  256. package/dist/notifications/engine.js +0 -198
  257. package/dist/notifications/engine.js.map +0 -1
  258. package/dist/notifications/index.js +0 -24
  259. package/dist/notifications/index.js.map +0 -1
  260. package/dist/notifications/phone.js +0 -48
  261. package/dist/notifications/phone.js.map +0 -1
  262. package/dist/notifications/sms.js +0 -65
  263. package/dist/notifications/sms.js.map +0 -1
  264. package/dist/notifications/types.js +0 -14
  265. package/dist/notifications/types.js.map +0 -1
  266. package/dist/notifications/webhook.js +0 -65
  267. package/dist/notifications/webhook.js.map +0 -1
  268. package/dist/resend/inbox.js +0 -199
  269. package/dist/resend/inbox.js.map +0 -1
  270. package/dist/resend/webhooks.js +0 -244
  271. package/dist/resend/webhooks.js.map +0 -1
  272. package/dist/search/browse.js +0 -225
  273. package/dist/search/browse.js.map +0 -1
  274. package/dist/search/perplexity.js +0 -41
  275. package/dist/search/perplexity.js.map +0 -1
  276. package/dist/slack/channels.js +0 -277
  277. package/dist/slack/channels.js.map +0 -1
  278. package/dist/slack/client.js +0 -468
  279. package/dist/slack/client.js.map +0 -1
  280. package/dist/slack/retry.js +0 -100
  281. package/dist/slack/retry.js.map +0 -1
  282. package/dist/slack/types.js +0 -52
  283. package/dist/slack/types.js.map +0 -1
  284. package/dist/slack/webhooks.js +0 -285
  285. package/dist/slack/webhooks.js.map +0 -1
  286. package/dist/stt/client.js +0 -66
  287. package/dist/stt/client.js.map +0 -1
  288. package/dist/stt/sidecar.js +0 -115
  289. package/dist/stt/sidecar.js.map +0 -1
  290. package/dist/tracing/bridge.js +0 -70
  291. package/dist/tracing/bridge.js.map +0 -1
  292. package/dist/tracing/correlation.js +0 -49
  293. package/dist/tracing/correlation.js.map +0 -1
  294. package/dist/tracing/index.js +0 -18
  295. package/dist/tracing/index.js.map +0 -1
  296. package/dist/tracing/init.js +0 -81
  297. package/dist/tracing/init.js.map +0 -1
  298. package/dist/tracing/instrument.js +0 -145
  299. package/dist/tracing/instrument.js.map +0 -1
  300. package/dist/tracing/middleware.js +0 -69
  301. package/dist/tracing/middleware.js.map +0 -1
  302. package/dist/tracing/tracer.js +0 -327
  303. package/dist/tracing/tracer.js.map +0 -1
  304. package/dist/tts/client.js +0 -48
  305. package/dist/tts/client.js.map +0 -1
  306. package/dist/tts/sidecar.js +0 -148
  307. package/dist/tts/sidecar.js.map +0 -1
  308. package/dist/twilio/call.js +0 -79
  309. package/dist/twilio/call.js.map +0 -1
  310. package/dist/vault/matcher.js +0 -197
  311. package/dist/vault/matcher.js.map +0 -1
  312. package/dist/vault/personal.js +0 -163
  313. package/dist/vault/personal.js.map +0 -1
  314. package/dist/vault/policy.js +0 -159
  315. package/dist/vault/policy.js.map +0 -1
  316. package/dist/vault/store.js +0 -122
  317. package/dist/vault/store.js.map +0 -1
  318. package/dist/vault/transfer.js +0 -188
  319. package/dist/vault/transfer.js.map +0 -1
  320. package/dist/volumes/index.js +0 -2
  321. package/dist/volumes/index.js.map +0 -1
  322. package/dist/volumes/manager.js +0 -462
  323. package/dist/volumes/manager.js.map +0 -1
  324. package/dist/volumes/types.js +0 -8
  325. package/dist/volumes/types.js.map +0 -1
  326. package/dist/webhooks/config.js +0 -214
  327. package/dist/webhooks/config.js.map +0 -1
  328. package/dist/webhooks/event-log.js +0 -132
  329. package/dist/webhooks/event-log.js.map +0 -1
  330. package/dist/webhooks/handler.js +0 -103
  331. package/dist/webhooks/handler.js.map +0 -1
  332. package/dist/webhooks/handlers.js +0 -231
  333. package/dist/webhooks/handlers.js.map +0 -1
  334. package/dist/webhooks/index.js +0 -33
  335. package/dist/webhooks/index.js.map +0 -1
  336. package/dist/webhooks/mount.js +0 -400
  337. package/dist/webhooks/mount.js.map +0 -1
  338. package/dist/webhooks/registry.js +0 -143
  339. package/dist/webhooks/registry.js.map +0 -1
  340. package/dist/webhooks/relay.js +0 -53
  341. package/dist/webhooks/relay.js.map +0 -1
  342. package/dist/webhooks/retry.js +0 -270
  343. package/dist/webhooks/retry.js.map +0 -1
  344. package/dist/webhooks/router.js +0 -290
  345. package/dist/webhooks/router.js.map +0 -1
  346. package/dist/webhooks/twilio.js +0 -129
  347. package/dist/webhooks/twilio.js.map +0 -1
  348. package/dist/webhooks/types.js +0 -8
  349. package/dist/webhooks/types.js.map +0 -1
  350. package/dist/webhooks/verify.js +0 -154
  351. package/dist/webhooks/verify.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/extensions/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAOtE,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,+CAA+C;IAC/C,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC5B;AAED,MAAM,WAAW,aAAa;IAC5B,qBAAqB;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,4BAA4B;IAC5B,IAAI,EAAE,aAAa,CAAC;IACpB,2BAA2B;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,kDAAkD;IAClD,IAAI,EAAE,MAAM,CAAC;IACb,wCAAwC;IACxC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2CAA2C;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CAkFhF;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAClC,IAAI,EAAE,aAAa,EACnB,cAAc,EAAE,MAAM,EACtB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC;IAAE,SAAS,EAAE,OAAO,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAqBzD;AAED,2CAA2C;AAC3C,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,iBAAiB,EAC3B,YAAY,EAAE,MAAM,GACnB,OAAO,CAYT;AAED,mDAAmD;AACnD,qBAAa,oBAAqB,SAAQ,KAAK;aAG3B,IAAI,EAChB,aAAa,GACb,mBAAmB,GACnB,WAAW,GACX,eAAe,GACf,kBAAkB,GAClB,kBAAkB;gBAPtB,OAAO,EAAE,MAAM,EACC,IAAI,EAChB,aAAa,GACb,mBAAmB,GACnB,WAAW,GACX,eAAe,GACf,kBAAkB,GAClB,kBAAkB;CAKzB"}
@@ -0,0 +1,120 @@
1
+ /**
2
+ * Extension streaming client — fetches extension tarballs from runcore.sh.
3
+ *
4
+ * Protocol:
5
+ * GET https://runcore.sh/api/extensions/:name
6
+ * Authorization: Bearer <activation-jwt>
7
+ * X-Runcore-Version: 0.4.0
8
+ * X-Bond-Signature: <sign("ext-byok:0.4.0", bondPrivateKey)>
9
+ *
10
+ * Returns gzipped tarball with manifest + module files.
11
+ * 403 if tier insufficient, 401 if token invalid.
12
+ */
13
+ import { createVerify } from "node:crypto";
14
+ import { createLogger } from "../utils/logger.js";
15
+ import { signMessage } from "../tier/bond.js";
16
+ const log = createLogger("ext-client");
17
+ const REGISTRY_BASE = "https://runcore.sh/api/extensions";
18
+ /**
19
+ * Stream an extension from runcore.sh.
20
+ *
21
+ * Downloads the extension tarball, extracts manifest + files.
22
+ * Throws on auth failure, network error, or invalid response.
23
+ */
24
+ export async function streamExtension(opts) {
25
+ const { jwt, name, version, root, registryUrl = REGISTRY_BASE, timeoutMs = 30_000, } = opts;
26
+ const url = `${registryUrl}/${name}`;
27
+ // Sign the request with bond key for mutual authentication
28
+ const signPayload = `${name}:${version}`;
29
+ const bondSignature = await signMessage(root, signPayload);
30
+ const headers = {
31
+ Authorization: `Bearer ${jwt}`,
32
+ "X-Runcore-Version": version,
33
+ Accept: "application/json",
34
+ };
35
+ if (bondSignature) {
36
+ headers["X-Bond-Signature"] = bondSignature;
37
+ }
38
+ log.info(`Streaming ${name}@${version}...`);
39
+ const res = await fetch(url, {
40
+ method: "GET",
41
+ headers,
42
+ signal: AbortSignal.timeout(timeoutMs),
43
+ });
44
+ if (!res.ok) {
45
+ const body = await res.text().catch(() => "");
46
+ if (res.status === 401) {
47
+ throw new ExtensionStreamError(`Authentication failed for ${name}. Run \`runcore activate <token>\` to re-authenticate.`, "AUTH_FAILED");
48
+ }
49
+ if (res.status === 403) {
50
+ throw new ExtensionStreamError(`Tier insufficient for ${name}. Run \`runcore register\` to upgrade.`, "TIER_INSUFFICIENT");
51
+ }
52
+ if (res.status === 404) {
53
+ throw new ExtensionStreamError(`Extension ${name}@${version} not found. Run \`runcore update\` for latest version.`, "NOT_FOUND");
54
+ }
55
+ throw new ExtensionStreamError(`Failed to stream ${name}: ${res.status} ${body}`, "STREAM_FAILED");
56
+ }
57
+ // Parse JSON response containing manifest + base64-encoded files
58
+ const payload = (await res.json());
59
+ if (!payload.manifest || !payload.files) {
60
+ throw new ExtensionStreamError(`Invalid response for ${name} — missing manifest or files`, "INVALID_RESPONSE");
61
+ }
62
+ // Decode files
63
+ const files = new Map();
64
+ for (const [path, b64] of Object.entries(payload.files)) {
65
+ files.set(path, Buffer.from(b64, "base64"));
66
+ }
67
+ log.info(`Downloaded ${name}@${version} (${files.size} modules)`);
68
+ return { manifest: payload.manifest, files };
69
+ }
70
+ /**
71
+ * Check if a newer version of an extension is available.
72
+ * Lightweight HEAD request — doesn't download anything.
73
+ */
74
+ export async function checkForUpdate(name, currentVersion, jwt) {
75
+ try {
76
+ const res = await fetch(`${REGISTRY_BASE}/${name}/check`, {
77
+ method: "GET",
78
+ headers: {
79
+ Authorization: `Bearer ${jwt}`,
80
+ "X-Runcore-Version": currentVersion,
81
+ },
82
+ signal: AbortSignal.timeout(5_000),
83
+ });
84
+ if (!res.ok)
85
+ return { available: false };
86
+ const data = (await res.json());
87
+ return {
88
+ available: data.updateAvailable,
89
+ latestVersion: data.latest,
90
+ };
91
+ }
92
+ catch {
93
+ return { available: false };
94
+ }
95
+ }
96
+ /** Verify an Ed25519 manifest signature */
97
+ export function verifyManifestSignature(manifest, publicKeyPem) {
98
+ const { signature, ...body } = manifest;
99
+ if (!signature)
100
+ return false;
101
+ try {
102
+ const data = JSON.stringify(body, Object.keys(body).sort());
103
+ const verifier = createVerify("Ed25519");
104
+ verifier.update(data);
105
+ return verifier.verify(publicKeyPem, Buffer.from(signature, "base64url"));
106
+ }
107
+ catch {
108
+ return false;
109
+ }
110
+ }
111
+ /** Typed error for extension streaming failures */
112
+ export class ExtensionStreamError extends Error {
113
+ code;
114
+ constructor(message, code) {
115
+ super(message);
116
+ this.code = code;
117
+ this.name = "ExtensionStreamError";
118
+ }
119
+ }
120
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/extensions/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Extensions — capability delivery system.
3
+ *
4
+ * The npm package ships local-tier modules only. Higher-tier code
5
+ * (integrations, agent spawning, browser automation) streams from
6
+ * runcore.sh on activation and caches locally.
7
+ */
8
+ export { loadExtensionModule, ensureExtension, setCoreVersion, getCoreVersion, ExtensionLoadError } from "./loader.js";
9
+ export { isCached, verifyExtension, listCached, purge, purgeAll, cacheRoot } from "./cache.js";
10
+ export { streamExtension, checkForUpdate, verifyManifestSignature, ExtensionStreamError } from "./client.js";
11
+ export type { ExtensionManifest, ExtensionName, ExtensionModule } from "./manifest.js";
12
+ export { EXTENSION_TIERS, extensionTier } from "./manifest.js";
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/extensions/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,cAAc,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACvH,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC/F,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAC7G,YAAY,EAAE,iBAAiB,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACvF,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Extensions — capability delivery system.
3
+ *
4
+ * The npm package ships local-tier modules only. Higher-tier code
5
+ * (integrations, agent spawning, browser automation) streams from
6
+ * runcore.sh on activation and caches locally.
7
+ */
8
+ export { loadExtensionModule, ensureExtension, setCoreVersion, getCoreVersion, ExtensionLoadError } from "./loader.js";
9
+ export { isCached, verifyExtension, listCached, purge, purgeAll, cacheRoot } from "./cache.js";
10
+ export { streamExtension, checkForUpdate, verifyManifestSignature, ExtensionStreamError } from "./client.js";
11
+ export { EXTENSION_TIERS, extensionTier } from "./manifest.js";
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/extensions/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,cAAc,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACvH,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC/F,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAE7G,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Extension loader — the core of the capability delivery system.
3
+ *
4
+ * Resolves module imports through: cache check → integrity verify → stream if missing.
5
+ * Same pattern as the 91 existing `await import()` calls in the codebase,
6
+ * but routed through cache + stream instead of static file paths.
7
+ *
8
+ * Usage:
9
+ * const { AgentInstanceManager } = await loadExtensionModule<
10
+ * typeof import("./agents/instance-manager.js")
11
+ * >("ext-spawn", "agents/instance-manager.js");
12
+ */
13
+ import type { ExtensionName } from "./manifest.js";
14
+ /** Set the core version (called at startup from package.json) */
15
+ export declare function setCoreVersion(version: string): void;
16
+ /** Get the current core version */
17
+ export declare function getCoreVersion(): string;
18
+ /**
19
+ * Load a module from an extension.
20
+ *
21
+ * Resolution order:
22
+ * 1. Check if extension is cached for current version
23
+ * 2. Verify file integrity (SHA-256)
24
+ * 3. If missing or corrupt, stream from runcore.sh
25
+ * 4. Dynamic import the resolved file
26
+ *
27
+ * @param extension - Extension name (e.g. "ext-spawn")
28
+ * @param module - Module path within extension (e.g. "agents/spawn.js")
29
+ * @param root - Brain root directory (for token + bond key access)
30
+ * @returns The imported module
31
+ */
32
+ export declare function loadExtensionModule<T = unknown>(extension: ExtensionName, module: string, root?: string): Promise<T>;
33
+ /**
34
+ * Ensure an entire extension is cached.
35
+ * Used by `runcore sync` to pre-pull extensions.
36
+ */
37
+ export declare function ensureExtension(extension: ExtensionName, root: string, options?: {
38
+ force?: boolean;
39
+ }): Promise<{
40
+ cached: boolean;
41
+ modules: number;
42
+ }>;
43
+ /** Typed error for extension loading failures */
44
+ export declare class ExtensionLoadError extends Error {
45
+ readonly code: "TIER_INSUFFICIENT" | "NOT_CACHED" | "MODULE_NOT_FOUND" | "IMPORT_FAILED" | "INTEGRITY_FAILED";
46
+ readonly extension: ExtensionName;
47
+ readonly module: string;
48
+ constructor(message: string, code: "TIER_INSUFFICIENT" | "NOT_CACHED" | "MODULE_NOT_FOUND" | "IMPORT_FAILED" | "INTEGRITY_FAILED", extension: ExtensionName, module: string);
49
+ }
50
+ //# sourceMappingURL=loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/extensions/loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAsBnD,iEAAiE;AACjE,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEpD;AAED,mCAAmC;AACnC,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,mBAAmB,CAAC,CAAC,GAAG,OAAO,EACnD,SAAS,EAAE,aAAa,EACxB,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,CAAC,CAAC,CA6EZ;AAED;;;GAGG;AACH,wBAAsB,eAAe,CACnC,SAAS,EAAE,aAAa,EACxB,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAC5B,OAAO,CAAC;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CA6C/C;AAuBD,iDAAiD;AACjD,qBAAa,kBAAmB,SAAQ,KAAK;aAGzB,IAAI,EAChB,mBAAmB,GACnB,YAAY,GACZ,kBAAkB,GAClB,eAAe,GACf,kBAAkB;aACN,SAAS,EAAE,aAAa;aACxB,MAAM,EAAE,MAAM;gBAR9B,OAAO,EAAE,MAAM,EACC,IAAI,EAChB,mBAAmB,GACnB,YAAY,GACZ,kBAAkB,GAClB,eAAe,GACf,kBAAkB,EACN,SAAS,EAAE,aAAa,EACxB,MAAM,EAAE,MAAM;CAKjC"}
@@ -0,0 +1,166 @@
1
+ /**
2
+ * Extension loader — the core of the capability delivery system.
3
+ *
4
+ * Resolves module imports through: cache check → integrity verify → stream if missing.
5
+ * Same pattern as the 91 existing `await import()` calls in the codebase,
6
+ * but routed through cache + stream instead of static file paths.
7
+ *
8
+ * Usage:
9
+ * const { AgentInstanceManager } = await loadExtensionModule<
10
+ * typeof import("./agents/instance-manager.js")
11
+ * >("ext-spawn", "agents/instance-manager.js");
12
+ */
13
+ import { pathToFileURL } from "node:url";
14
+ import { createLogger } from "../utils/logger.js";
15
+ import { EXTENSION_TIERS } from "./manifest.js";
16
+ import { isCached, verifyModule, modulePath, loadCachedManifest, writeModule, writeManifest, writeIntegrity, purge, sha256, } from "./cache.js";
17
+ import { streamExtension } from "./client.js";
18
+ import { loadActivationToken } from "../tier/token.js";
19
+ import { meetsMinimum } from "../tier/gate.js";
20
+ const log = createLogger("ext-loader");
21
+ /** Version of the core package — used for cache keying */
22
+ let _coreVersion = "0.4.0";
23
+ /** Set the core version (called at startup from package.json) */
24
+ export function setCoreVersion(version) {
25
+ _coreVersion = version;
26
+ }
27
+ /** Get the current core version */
28
+ export function getCoreVersion() {
29
+ return _coreVersion;
30
+ }
31
+ /**
32
+ * Load a module from an extension.
33
+ *
34
+ * Resolution order:
35
+ * 1. Check if extension is cached for current version
36
+ * 2. Verify file integrity (SHA-256)
37
+ * 3. If missing or corrupt, stream from runcore.sh
38
+ * 4. Dynamic import the resolved file
39
+ *
40
+ * @param extension - Extension name (e.g. "ext-spawn")
41
+ * @param module - Module path within extension (e.g. "agents/spawn.js")
42
+ * @param root - Brain root directory (for token + bond key access)
43
+ * @returns The imported module
44
+ */
45
+ export async function loadExtensionModule(extension, module, root) {
46
+ const resolvedRoot = root ?? process.cwd();
47
+ const version = _coreVersion;
48
+ // Check tier before attempting load
49
+ const activation = await loadActivationToken(resolvedRoot);
50
+ const currentTier = activation?.token.tier ?? "local";
51
+ const requiredTier = EXTENSION_TIERS[extension];
52
+ if (!meetsMinimum(currentTier, requiredTier)) {
53
+ throw new ExtensionLoadError(`Extension "${extension}" requires tier "${requiredTier}" (current: "${currentTier}"). ` +
54
+ `Run \`runcore register\` to upgrade.`, "TIER_INSUFFICIENT", extension, module);
55
+ }
56
+ // Try loading from cache
57
+ const cached = await isCached(extension, version);
58
+ if (cached) {
59
+ const manifest = await loadCachedManifest(extension, version);
60
+ if (manifest) {
61
+ const modEntry = manifest.modules.find((m) => m.path === module);
62
+ if (modEntry) {
63
+ // Verify integrity
64
+ const valid = await verifyModule(extension, version, module, modEntry.hash);
65
+ if (valid) {
66
+ return dynamicImport(extension, version, module);
67
+ }
68
+ // Corrupted — purge and re-stream
69
+ log.warn(`Integrity check failed for ${extension}/${module} — re-downloading`);
70
+ await purge(extension, version);
71
+ }
72
+ }
73
+ }
74
+ // Stream from runcore.sh
75
+ if (!activation) {
76
+ throw new ExtensionLoadError(`Extension "${extension}" not cached and no activation token found. ` +
77
+ `Run \`runcore activate <token>\` first.`, "NOT_CACHED", extension, module);
78
+ }
79
+ log.info(`Streaming ${extension}@${version} for module ${module}...`);
80
+ const result = await streamExtension({
81
+ jwt: activation.raw,
82
+ name: extension,
83
+ version,
84
+ root: resolvedRoot,
85
+ });
86
+ // Write all files to cache
87
+ const hashes = {};
88
+ for (const [path, content] of result.files) {
89
+ await writeModule(extension, version, path, content);
90
+ hashes[path] = sha256(content);
91
+ }
92
+ await writeManifest(extension, version, result.manifest);
93
+ await writeIntegrity(extension, version, hashes);
94
+ // Verify the target module exists in the downloaded set
95
+ if (!result.files.has(module)) {
96
+ throw new ExtensionLoadError(`Module "${module}" not found in extension "${extension}@${version}".`, "MODULE_NOT_FOUND", extension, module);
97
+ }
98
+ return dynamicImport(extension, version, module);
99
+ }
100
+ /**
101
+ * Ensure an entire extension is cached.
102
+ * Used by `runcore sync` to pre-pull extensions.
103
+ */
104
+ export async function ensureExtension(extension, root, options) {
105
+ const version = _coreVersion;
106
+ // Check tier
107
+ const activation = await loadActivationToken(root);
108
+ const currentTier = activation?.token.tier ?? "local";
109
+ const requiredTier = EXTENSION_TIERS[extension];
110
+ if (!meetsMinimum(currentTier, requiredTier)) {
111
+ return { cached: false, modules: 0 };
112
+ }
113
+ // Already cached (and not forcing)?
114
+ if (!options?.force && (await isCached(extension, version))) {
115
+ const manifest = await loadCachedManifest(extension, version);
116
+ return { cached: true, modules: manifest?.modules.length ?? 0 };
117
+ }
118
+ if (!activation) {
119
+ return { cached: false, modules: 0 };
120
+ }
121
+ // Force purge if requested
122
+ if (options?.force) {
123
+ await purge(extension, version);
124
+ }
125
+ // Stream
126
+ const result = await streamExtension({
127
+ jwt: activation.raw,
128
+ name: extension,
129
+ version,
130
+ root,
131
+ });
132
+ // Write to cache
133
+ const hashes = {};
134
+ for (const [path, content] of result.files) {
135
+ await writeModule(extension, version, path, content);
136
+ hashes[path] = sha256(content);
137
+ }
138
+ await writeManifest(extension, version, result.manifest);
139
+ await writeIntegrity(extension, version, hashes);
140
+ return { cached: true, modules: result.files.size };
141
+ }
142
+ /** Dynamic import from the cache directory */
143
+ async function dynamicImport(extension, version, module) {
144
+ const filePath = modulePath(extension, version, module);
145
+ const fileUrl = pathToFileURL(filePath).href;
146
+ try {
147
+ return (await import(fileUrl));
148
+ }
149
+ catch (err) {
150
+ throw new ExtensionLoadError(`Failed to import ${extension}/${module}: ${err instanceof Error ? err.message : String(err)}`, "IMPORT_FAILED", extension, module);
151
+ }
152
+ }
153
+ /** Typed error for extension loading failures */
154
+ export class ExtensionLoadError extends Error {
155
+ code;
156
+ extension;
157
+ module;
158
+ constructor(message, code, extension, module) {
159
+ super(message);
160
+ this.code = code;
161
+ this.extension = extension;
162
+ this.module = module;
163
+ this.name = "ExtensionLoadError";
164
+ }
165
+ }
166
+ //# sourceMappingURL=loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/extensions/loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Extension manifest types — describes a streamed capability bundle.
3
+ *
4
+ * Each extension is a tier-gated set of modules that don't ship in the
5
+ * npm package. They stream from runcore.sh on activation and cache locally.
6
+ */
7
+ import type { TierName } from "../tier/types.js";
8
+ /** Individual module within an extension */
9
+ export interface ExtensionModule {
10
+ /** Relative path within extension (e.g. "vault/store.js") */
11
+ path: string;
12
+ /** SHA-256 hash of the file contents */
13
+ hash: string;
14
+ }
15
+ /** Extension manifest — shipped inside each extension tarball */
16
+ export interface ExtensionManifest {
17
+ /** Extension identifier (e.g. "ext-byok", "ext-spawn", "ext-hosted") */
18
+ name: ExtensionName;
19
+ /** Semver, locked to core package version */
20
+ version: string;
21
+ /** Minimum core version required */
22
+ minCoreVersion: string;
23
+ /** Tier required to activate this extension */
24
+ tier: TierName;
25
+ /** All modules in this extension */
26
+ modules: ExtensionModule[];
27
+ /** npm dependencies this extension needs (informational — installed by sync) */
28
+ dependencies?: Record<string, string>;
29
+ /** Ed25519 signature of the manifest (excluding this field) */
30
+ signature?: string;
31
+ }
32
+ /** Known extension names */
33
+ export type ExtensionName = "ext-byok" | "ext-spawn" | "ext-hosted";
34
+ /** Extension tier mapping */
35
+ export declare const EXTENSION_TIERS: Record<ExtensionName, TierName>;
36
+ /** Map extension name to required tier level */
37
+ export declare function extensionTier(name: ExtensionName): TierName;
38
+ //# sourceMappingURL=manifest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/extensions/manifest.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEjD,4CAA4C;AAC5C,MAAM,WAAW,eAAe;IAC9B,6DAA6D;IAC7D,IAAI,EAAE,MAAM,CAAC;IACb,wCAAwC;IACxC,IAAI,EAAE,MAAM,CAAC;CACd;AAED,iEAAiE;AACjE,MAAM,WAAW,iBAAiB;IAChC,wEAAwE;IACxE,IAAI,EAAE,aAAa,CAAC;IACpB,6CAA6C;IAC7C,OAAO,EAAE,MAAM,CAAC;IAChB,oCAAoC;IACpC,cAAc,EAAE,MAAM,CAAC;IACvB,+CAA+C;IAC/C,IAAI,EAAE,QAAQ,CAAC;IACf,oCAAoC;IACpC,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,gFAAgF;IAChF,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,+DAA+D;IAC/D,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,4BAA4B;AAC5B,MAAM,MAAM,aAAa,GAAG,UAAU,GAAG,WAAW,GAAG,YAAY,CAAC;AAEpE,6BAA6B;AAC7B,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,aAAa,EAAE,QAAQ,CAI3D,CAAC;AAEF,gDAAgD;AAChD,wBAAgB,aAAa,CAAC,IAAI,EAAE,aAAa,GAAG,QAAQ,CAE3D"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Extension manifest types — describes a streamed capability bundle.
3
+ *
4
+ * Each extension is a tier-gated set of modules that don't ship in the
5
+ * npm package. They stream from runcore.sh on activation and cache locally.
6
+ */
7
+ /** Extension tier mapping */
8
+ export const EXTENSION_TIERS = {
9
+ "ext-byok": "byok",
10
+ "ext-spawn": "spawn",
11
+ "ext-hosted": "hosted",
12
+ };
13
+ /** Map extension name to required tier level */
14
+ export function extensionTier(name) {
15
+ return EXTENSION_TIERS[name];
16
+ }
17
+ //# sourceMappingURL=manifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/extensions/manifest.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAiCH,6BAA6B;AAC7B,MAAM,CAAC,MAAM,eAAe,GAAoC;IAC9D,UAAU,EAAE,MAAM;IAClB,WAAW,EAAE,OAAO;IACpB,YAAY,EAAE,QAAQ;CACvB,CAAC;AAEF,gDAAgD;AAChD,MAAM,UAAU,aAAa,CAAC,IAAmB;IAC/C,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC;AAC/B,CAAC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Stub exports for gated modules.
3
+ *
4
+ * These provide clean error messages when someone tries to use
5
+ * a gated feature without the required tier. Type stubs (.d.ts)
6
+ * ship for autocomplete; these runtime stubs throw on access.
7
+ */
8
+ import type { TierName } from "../tier/types.js";
9
+ import type { ExtensionName } from "./manifest.js";
10
+ /**
11
+ * Create a proxy that throws a tier upgrade message on any property access.
12
+ * Used as a drop-in replacement for gated module exports.
13
+ */
14
+ export declare function createTierStub<T extends object>(moduleName: string, extension: ExtensionName, requiredTier: TierName): T;
15
+ /** Vault stub (BYOK tier) */
16
+ export declare const VaultStub: object;
17
+ /** Notifications stub (BYOK tier) */
18
+ export declare const NotificationsStub: object;
19
+ /** Agent spawn stub (Spawn tier) */
20
+ export declare const AgentSpawnStub: object;
21
+ /** Governed spawn stub (Spawn tier) */
22
+ export declare const GovernedSpawnStub: object;
23
+ /** Browser stub (Hosted tier) */
24
+ export declare const BrowserStub: object;
25
+ /** Tracing stub (Hosted tier) */
26
+ export declare const TracingStub: object;
27
+ //# sourceMappingURL=stubs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stubs.d.ts","sourceRoot":"","sources":["../../src/extensions/stubs.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEnD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS,MAAM,EAC7C,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,aAAa,EACxB,YAAY,EAAE,QAAQ,GACrB,CAAC,CAoBH;AAID,6BAA6B;AAC7B,eAAO,MAAM,SAAS,QAA8C,CAAC;AAErE,qCAAqC;AACrC,eAAO,MAAM,iBAAiB,QAAsD,CAAC;AAErF,oCAAoC;AACpC,eAAO,MAAM,cAAc,QAAuD,CAAC;AAEnF,uCAAuC;AACvC,eAAO,MAAM,iBAAiB,QAAgE,CAAC;AAE/F,iCAAiC;AACjC,eAAO,MAAM,WAAW,QAAoD,CAAC;AAE7E,iCAAiC;AACjC,eAAO,MAAM,WAAW,QAAoD,CAAC"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Stub exports for gated modules.
3
+ *
4
+ * These provide clean error messages when someone tries to use
5
+ * a gated feature without the required tier. Type stubs (.d.ts)
6
+ * ship for autocomplete; these runtime stubs throw on access.
7
+ */
8
+ /**
9
+ * Create a proxy that throws a tier upgrade message on any property access.
10
+ * Used as a drop-in replacement for gated module exports.
11
+ */
12
+ export function createTierStub(moduleName, extension, requiredTier) {
13
+ const message = `"${moduleName}" requires the "${requiredTier}" tier. ` +
14
+ `Run \`runcore register\` to upgrade, then \`runcore sync\` to download.`;
15
+ return new Proxy({}, {
16
+ get(_target, prop) {
17
+ if (prop === Symbol.toPrimitive || prop === "toString" || prop === "valueOf") {
18
+ return () => `[Stub: ${moduleName}]`;
19
+ }
20
+ if (typeof prop === "symbol")
21
+ return undefined;
22
+ throw new Error(message);
23
+ },
24
+ apply() {
25
+ throw new Error(message);
26
+ },
27
+ construct() {
28
+ throw new Error(message);
29
+ },
30
+ });
31
+ }
32
+ // ── Pre-built stubs for common gated modules ──
33
+ /** Vault stub (BYOK tier) */
34
+ export const VaultStub = createTierStub("vault", "ext-byok", "byok");
35
+ /** Notifications stub (BYOK tier) */
36
+ export const NotificationsStub = createTierStub("notifications", "ext-byok", "byok");
37
+ /** Agent spawn stub (Spawn tier) */
38
+ export const AgentSpawnStub = createTierStub("agents/spawn", "ext-spawn", "spawn");
39
+ /** Governed spawn stub (Spawn tier) */
40
+ export const GovernedSpawnStub = createTierStub("agents/governed-spawn", "ext-spawn", "spawn");
41
+ /** Browser stub (Hosted tier) */
42
+ export const BrowserStub = createTierStub("browser", "ext-hosted", "hosted");
43
+ /** Tracing stub (Hosted tier) */
44
+ export const TracingStub = createTierStub("tracing", "ext-hosted", "hosted");
45
+ //# sourceMappingURL=stubs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stubs.js","sourceRoot":"","sources":["../../src/extensions/stubs.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH;;;GAGG;AACH,MAAM,UAAU,cAAc,CAC5B,UAAkB,EAClB,SAAwB,EACxB,YAAsB;IAEtB,MAAM,OAAO,GACX,IAAI,UAAU,mBAAmB,YAAY,UAAU;QACvD,yEAAyE,CAAC;IAE5E,OAAO,IAAI,KAAK,CAAC,EAAO,EAAE;QACxB,GAAG,CAAC,OAAO,EAAE,IAAI;YACf,IAAI,IAAI,KAAK,MAAM,CAAC,WAAW,IAAI,IAAI,KAAK,UAAU,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC7E,OAAO,GAAG,EAAE,CAAC,UAAU,UAAU,GAAG,CAAC;YACvC,CAAC;YACD,IAAI,OAAO,IAAI,KAAK,QAAQ;gBAAE,OAAO,SAAS,CAAC;YAC/C,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;QAC3B,CAAC;QACD,KAAK;YACH,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;QAC3B,CAAC;QACD,SAAS;YACP,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;QAC3B,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED,iDAAiD;AAEjD,6BAA6B;AAC7B,MAAM,CAAC,MAAM,SAAS,GAAG,cAAc,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;AAErE,qCAAqC;AACrC,MAAM,CAAC,MAAM,iBAAiB,GAAG,cAAc,CAAC,eAAe,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;AAErF,oCAAoC;AACpC,MAAM,CAAC,MAAM,cAAc,GAAG,cAAc,CAAC,cAAc,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;AAEnF,uCAAuC;AACvC,MAAM,CAAC,MAAM,iBAAiB,GAAG,cAAc,CAAC,uBAAuB,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;AAE/F,iCAAiC;AACjC,MAAM,CAAC,MAAM,WAAW,GAAG,cAAc,CAAC,SAAS,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;AAE7E,iCAAiC;AACjC,MAAM,CAAC,MAAM,WAAW,GAAG,cAAc,CAAC,SAAS,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC"}
package/dist/lib/audit.js CHANGED
@@ -25,8 +25,8 @@ export function getAuditContext() {
25
25
  return auditContextStore.getStore();
26
26
  }
27
27
  // ── File setup ───────────────────────────────────────────────────────────────
28
- import { BRAIN_DIR } from "./paths.js";
29
- const OPS_DIR = join(BRAIN_DIR, "ops");
28
+ import { BRAIN_DIR, resolveBrainDir } from "./paths.js";
29
+ const OPS_DIR = resolveBrainDir("ops");
30
30
  const AUDIT_FILE = join(OPS_DIR, "audit.jsonl");
31
31
  const SCHEMA_LINE = JSON.stringify({
32
32
  _schema: "audit",
@@ -1 +1 @@
1
- {"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/lib/audit.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/lib/audit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Brain v2 migration — moves from 30+ top-level directories to 3:
3
+ * log/ ← append-only JSONL (memory, ops, metrics, ledger)
4
+ * files/ ← everything else (knowledge, identity, content, etc.)
5
+ * .config/ ← settings, access, locked paths
6
+ *
7
+ * Safe to run multiple times. Moves directories, doesn't copy.
8
+ * Creates symlinks from old paths to new locations for backward compat.
9
+ */
10
+ export interface MigrationResult {
11
+ migrated: string[];
12
+ skipped: string[];
13
+ errors: string[];
14
+ alreadyV2: boolean;
15
+ }
16
+ /**
17
+ * Migrate a brain directory from legacy layout to v2.
18
+ * Safe to run multiple times — skips already-migrated items.
19
+ */
20
+ export declare function migrateBrainToV2(): Promise<MigrationResult>;
21
+ //# sourceMappingURL=brain-migrate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brain-migrate.d.ts","sourceRoot":"","sources":["../../src/lib/brain-migrate.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AA4DH,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,eAAe,CAAC,CA8DjE"}