@runcore-sh/runcore 0.4.0 → 0.5.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.
- package/dictionary.json +2 -2
- package/dist/activity/log.js +2 -2
- package/dist/activity/log.js.map +1 -1
- package/dist/agents/governed-spawn.d.ts.map +1 -1
- package/dist/cli.js +101 -11
- package/dist/cli.js.map +1 -1
- package/dist/extensions/cache.d.ts +57 -0
- package/dist/extensions/cache.d.ts.map +1 -0
- package/dist/extensions/cache.js +173 -0
- package/dist/extensions/cache.js.map +1 -0
- package/dist/extensions/client.d.ts +55 -0
- package/dist/extensions/client.d.ts.map +1 -0
- package/dist/extensions/client.js +120 -0
- package/dist/extensions/client.js.map +1 -0
- package/dist/extensions/index.d.ts +13 -0
- package/dist/extensions/index.d.ts.map +1 -0
- package/dist/extensions/index.js +12 -0
- package/dist/extensions/index.js.map +1 -0
- package/dist/extensions/loader.d.ts +50 -0
- package/dist/extensions/loader.d.ts.map +1 -0
- package/dist/extensions/loader.js +166 -0
- package/dist/extensions/loader.js.map +1 -0
- package/dist/extensions/manifest.d.ts +38 -0
- package/dist/extensions/manifest.d.ts.map +1 -0
- package/dist/extensions/manifest.js +17 -0
- package/dist/extensions/manifest.js.map +1 -0
- package/dist/extensions/stubs.d.ts +27 -0
- package/dist/extensions/stubs.d.ts.map +1 -0
- package/dist/extensions/stubs.js +45 -0
- package/dist/extensions/stubs.js.map +1 -0
- package/dist/lib/audit.js +2 -2
- package/dist/lib/audit.js.map +1 -1
- package/dist/lib/brain-migrate.d.ts +21 -0
- package/dist/lib/brain-migrate.d.ts.map +1 -0
- package/dist/lib/brain-migrate.js +137 -0
- package/dist/lib/brain-migrate.js.map +1 -0
- package/dist/lib/paths.d.ts +27 -0
- package/dist/lib/paths.d.ts.map +1 -1
- package/dist/lib/paths.js +65 -0
- package/dist/lib/paths.js.map +1 -1
- package/dist/llm/call-log.d.ts +40 -0
- package/dist/llm/call-log.d.ts.map +1 -0
- package/dist/llm/call-log.js +35 -0
- package/dist/llm/call-log.js.map +1 -0
- package/dist/llm/complete.d.ts +6 -0
- package/dist/llm/complete.d.ts.map +1 -1
- package/dist/llm/complete.js +27 -0
- package/dist/llm/complete.js.map +1 -1
- package/dist/mcp-server.js +118 -2
- package/dist/mcp-server.js.map +1 -1
- package/dist/memory/file-backed.d.ts +4 -0
- package/dist/memory/file-backed.d.ts.map +1 -1
- package/dist/memory/file-backed.js +4 -0
- package/dist/memory/file-backed.js.map +1 -1
- package/dist/memory/vector-index.d.ts +4 -12
- package/dist/memory/vector-index.d.ts.map +1 -1
- package/dist/memory/vector-index.js +11 -93
- package/dist/memory/vector-index.js.map +1 -1
- package/dist/search/brain-docs.d.ts +17 -7
- package/dist/search/brain-docs.d.ts.map +1 -1
- package/dist/search/brain-docs.js +170 -52
- package/dist/search/brain-docs.js.map +1 -1
- package/dist/search/brain-rag.d.ts +45 -0
- package/dist/search/brain-rag.d.ts.map +1 -0
- package/dist/search/brain-rag.js +275 -0
- package/dist/search/brain-rag.js.map +1 -0
- package/dist/search/chunker.d.ts +24 -0
- package/dist/search/chunker.d.ts.map +1 -0
- package/dist/search/chunker.js +95 -0
- package/dist/search/chunker.js.map +1 -0
- package/dist/search/embedder.d.ts +16 -0
- package/dist/search/embedder.d.ts.map +1 -0
- package/dist/search/embedder.js +108 -0
- package/dist/search/embedder.js.map +1 -0
- package/dist/search/file-watcher.d.ts +11 -0
- package/dist/search/file-watcher.d.ts.map +1 -0
- package/dist/search/file-watcher.js +86 -0
- package/dist/search/file-watcher.js.map +1 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +814 -472
- package/dist/server.js.map +1 -1
- package/dist/sessions/store.d.ts +9 -0
- package/dist/sessions/store.d.ts.map +1 -1
- package/dist/sessions/store.js.map +1 -1
- package/dist/settings.d.ts +26 -0
- package/dist/settings.d.ts.map +1 -1
- package/dist/settings.js +78 -2
- package/dist/settings.js.map +1 -1
- package/dist/tracing/init.d.ts +1 -1
- package/dist/tracing/init.d.ts.map +1 -1
- package/dist/utils/logger.js +2 -2
- package/dist/utils/logger.js.map +1 -1
- package/module-tiers.json +164 -0
- package/package.json +9 -13
- package/public/avatar/cache/1184385ec5522b57.mp4 +0 -0
- package/public/avatar/cache/1f15f6a1ebd7e439.mp4 +0 -0
- package/public/avatar/cache/2c7e47ff0bdeb8d1.mp4 +0 -0
- package/public/avatar/cache/5f308566f7abb8f2.mp4 +0 -0
- package/public/avatar/cache/62f9cfba848d724e.mp4 +0 -0
- package/public/avatar/cache/6d64e657e6bf2aab.mp4 +0 -0
- package/public/avatar/cache/763ad0349e0b6f26.mp4 +0 -0
- package/public/avatar/cache/81a516cfd461b2b9.mp4 +0 -0
- package/public/avatar/cache/9366de15fd6910ca.mp4 +0 -0
- package/public/avatar/cache/ade41a846b283895.mp4 +0 -0
- package/public/avatar/cache/b6066e5c65383eec.mp4 +0 -0
- package/public/avatar/cache/edadb75d37891fc7.mp4 +0 -0
- package/public/avatar/cache/f0ae159640621dd9.mp4 +0 -0
- package/public/avatar/cache/fc2e5419adf29d96.mp4 +0 -0
- package/public/index.html +379 -59
- package/dist/agents/autonomous.js +0 -749
- package/dist/agents/autonomous.js.map +0 -1
- package/dist/agents/commit.js +0 -113
- package/dist/agents/commit.js.map +0 -1
- package/dist/agents/continue.js +0 -158
- package/dist/agents/continue.js.map +0 -1
- package/dist/agents/cooldown.js +0 -397
- package/dist/agents/cooldown.js.map +0 -1
- package/dist/agents/dedup-guard.js +0 -131
- package/dist/agents/dedup-guard.js.map +0 -1
- package/dist/agents/feed.js +0 -176
- package/dist/agents/feed.js.map +0 -1
- package/dist/agents/governance.js +0 -292
- package/dist/agents/governance.js.map +0 -1
- package/dist/agents/governed-spawn.js +0 -192
- package/dist/agents/governed-spawn.js.map +0 -1
- package/dist/agents/heartbeat.js +0 -324
- package/dist/agents/heartbeat.js.map +0 -1
- package/dist/agents/instance-manager.js +0 -850
- package/dist/agents/instance-manager.js.map +0 -1
- package/dist/agents/issue-reporter.js +0 -123
- package/dist/agents/issue-reporter.js.map +0 -1
- package/dist/agents/issues.js +0 -141
- package/dist/agents/issues.js.map +0 -1
- package/dist/agents/locks.js +0 -234
- package/dist/agents/locks.js.map +0 -1
- package/dist/agents/memory.js +0 -93
- package/dist/agents/memory.js.map +0 -1
- package/dist/agents/monitor.js +0 -235
- package/dist/agents/monitor.js.map +0 -1
- package/dist/agents/orchestration.js +0 -715
- package/dist/agents/orchestration.js.map +0 -1
- package/dist/agents/recover.js +0 -166
- package/dist/agents/recover.js.map +0 -1
- package/dist/agents/reflection.js +0 -199
- package/dist/agents/reflection.js.map +0 -1
- package/dist/agents/runtime/bus.js +0 -174
- package/dist/agents/runtime/bus.js.map +0 -1
- package/dist/agents/runtime/config.js +0 -101
- package/dist/agents/runtime/config.js.map +0 -1
- package/dist/agents/runtime/driver.js +0 -214
- package/dist/agents/runtime/driver.js.map +0 -1
- package/dist/agents/runtime/errors.js +0 -40
- package/dist/agents/runtime/errors.js.map +0 -1
- package/dist/agents/runtime/index.js +0 -54
- package/dist/agents/runtime/index.js.map +0 -1
- package/dist/agents/runtime/lifecycle.js +0 -116
- package/dist/agents/runtime/lifecycle.js.map +0 -1
- package/dist/agents/runtime/manager.js +0 -948
- package/dist/agents/runtime/manager.js.map +0 -1
- package/dist/agents/runtime/registry.js +0 -195
- package/dist/agents/runtime/registry.js.map +0 -1
- package/dist/agents/runtime/resources.js +0 -146
- package/dist/agents/runtime/resources.js.map +0 -1
- package/dist/agents/runtime/types.js +0 -24
- package/dist/agents/runtime/types.js.map +0 -1
- package/dist/agents/spawn-policy.js +0 -202
- package/dist/agents/spawn-policy.js.map +0 -1
- package/dist/agents/spawn.js +0 -970
- package/dist/agents/spawn.js.map +0 -1
- package/dist/agents/triage.js +0 -81
- package/dist/agents/triage.js.map +0 -1
- package/dist/agents/workflow.js +0 -543
- package/dist/agents/workflow.js.map +0 -1
- package/dist/avatar/client.js +0 -172
- package/dist/avatar/client.js.map +0 -1
- package/dist/avatar/sidecar.js +0 -125
- package/dist/avatar/sidecar.js.map +0 -1
- package/dist/browser/sessions.js +0 -122
- package/dist/browser/sessions.js.map +0 -1
- package/dist/capabilities/definitions/browser.js +0 -242
- package/dist/capabilities/definitions/browser.js.map +0 -1
- package/dist/channels/whatsapp.js +0 -200
- package/dist/channels/whatsapp.js.map +0 -1
- package/dist/credentials/store.js +0 -189
- package/dist/credentials/store.js.map +0 -1
- package/dist/files/deep-index.js +0 -337
- package/dist/files/deep-index.js.map +0 -1
- package/dist/files/extract.js +0 -33
- package/dist/files/extract.js.map +0 -1
- package/dist/files/gdrive.js +0 -246
- package/dist/files/gdrive.js.map +0 -1
- package/dist/github/client.js +0 -408
- package/dist/github/client.js.map +0 -1
- package/dist/github/commit-analysis.js +0 -276
- package/dist/github/commit-analysis.js.map +0 -1
- package/dist/github/contributor-stats.js +0 -119
- package/dist/github/contributor-stats.js.map +0 -1
- package/dist/github/issue-sla.js +0 -220
- package/dist/github/issue-sla.js.map +0 -1
- package/dist/github/issue-triage.js +0 -286
- package/dist/github/issue-triage.js.map +0 -1
- package/dist/github/pr-readiness.js +0 -197
- package/dist/github/pr-readiness.js.map +0 -1
- package/dist/github/pr-review.js +0 -410
- package/dist/github/pr-review.js.map +0 -1
- package/dist/github/release-notes.js +0 -227
- package/dist/github/release-notes.js.map +0 -1
- package/dist/github/repo-health.js +0 -303
- package/dist/github/repo-health.js.map +0 -1
- package/dist/github/retry.js +0 -117
- package/dist/github/retry.js.map +0 -1
- package/dist/github/types.js +0 -8
- package/dist/github/types.js.map +0 -1
- package/dist/github/webhooks.js +0 -153
- package/dist/github/webhooks.js.map +0 -1
- package/dist/google/auth.js +0 -325
- package/dist/google/auth.js.map +0 -1
- package/dist/google/calendar-timer.js +0 -91
- package/dist/google/calendar-timer.js.map +0 -1
- package/dist/google/calendar.js +0 -270
- package/dist/google/calendar.js.map +0 -1
- package/dist/google/docs.js +0 -309
- package/dist/google/docs.js.map +0 -1
- package/dist/google/gmail-send.js +0 -219
- package/dist/google/gmail-send.js.map +0 -1
- package/dist/google/gmail-timer.js +0 -223
- package/dist/google/gmail-timer.js.map +0 -1
- package/dist/google/gmail.js +0 -470
- package/dist/google/gmail.js.map +0 -1
- package/dist/google/plugin.js +0 -169
- package/dist/google/plugin.js.map +0 -1
- package/dist/google/tasks-timer.js +0 -107
- package/dist/google/tasks-timer.js.map +0 -1
- package/dist/google/tasks.js +0 -331
- package/dist/google/tasks.js.map +0 -1
- package/dist/google/temporal.js +0 -176
- package/dist/google/temporal.js.map +0 -1
- package/dist/integrations/gate.js +0 -100
- package/dist/integrations/gate.js.map +0 -1
- package/dist/integrations/github.js +0 -331
- package/dist/integrations/github.js.map +0 -1
- package/dist/integrations/google-tasks.js +0 -432
- package/dist/integrations/google-tasks.js.map +0 -1
- package/dist/mdns.js +0 -110
- package/dist/mdns.js.map +0 -1
- package/dist/notifications/channel.js +0 -83
- package/dist/notifications/channel.js.map +0 -1
- package/dist/notifications/channels/adapter.js +0 -55
- package/dist/notifications/channels/adapter.js.map +0 -1
- package/dist/notifications/channels/index.js +0 -6
- package/dist/notifications/channels/index.js.map +0 -1
- package/dist/notifications/channels/log.js +0 -29
- package/dist/notifications/channels/log.js.map +0 -1
- package/dist/notifications/email.js +0 -72
- package/dist/notifications/email.js.map +0 -1
- package/dist/notifications/engine.js +0 -198
- package/dist/notifications/engine.js.map +0 -1
- package/dist/notifications/index.js +0 -24
- package/dist/notifications/index.js.map +0 -1
- package/dist/notifications/phone.js +0 -48
- package/dist/notifications/phone.js.map +0 -1
- package/dist/notifications/sms.js +0 -65
- package/dist/notifications/sms.js.map +0 -1
- package/dist/notifications/types.js +0 -14
- package/dist/notifications/types.js.map +0 -1
- package/dist/notifications/webhook.js +0 -65
- package/dist/notifications/webhook.js.map +0 -1
- package/dist/resend/inbox.js +0 -199
- package/dist/resend/inbox.js.map +0 -1
- package/dist/resend/webhooks.js +0 -244
- package/dist/resend/webhooks.js.map +0 -1
- package/dist/search/browse.js +0 -225
- package/dist/search/browse.js.map +0 -1
- package/dist/search/perplexity.js +0 -41
- package/dist/search/perplexity.js.map +0 -1
- package/dist/slack/channels.js +0 -277
- package/dist/slack/channels.js.map +0 -1
- package/dist/slack/client.js +0 -468
- package/dist/slack/client.js.map +0 -1
- package/dist/slack/retry.js +0 -100
- package/dist/slack/retry.js.map +0 -1
- package/dist/slack/types.js +0 -52
- package/dist/slack/types.js.map +0 -1
- package/dist/slack/webhooks.js +0 -285
- package/dist/slack/webhooks.js.map +0 -1
- package/dist/stt/client.js +0 -66
- package/dist/stt/client.js.map +0 -1
- package/dist/stt/sidecar.js +0 -115
- package/dist/stt/sidecar.js.map +0 -1
- package/dist/tracing/bridge.js +0 -70
- package/dist/tracing/bridge.js.map +0 -1
- package/dist/tracing/correlation.js +0 -49
- package/dist/tracing/correlation.js.map +0 -1
- package/dist/tracing/index.js +0 -18
- package/dist/tracing/index.js.map +0 -1
- package/dist/tracing/init.js +0 -81
- package/dist/tracing/init.js.map +0 -1
- package/dist/tracing/instrument.js +0 -145
- package/dist/tracing/instrument.js.map +0 -1
- package/dist/tracing/middleware.js +0 -69
- package/dist/tracing/middleware.js.map +0 -1
- package/dist/tracing/tracer.js +0 -327
- package/dist/tracing/tracer.js.map +0 -1
- package/dist/tts/client.js +0 -48
- package/dist/tts/client.js.map +0 -1
- package/dist/tts/sidecar.js +0 -148
- package/dist/tts/sidecar.js.map +0 -1
- package/dist/twilio/call.js +0 -79
- package/dist/twilio/call.js.map +0 -1
- package/dist/vault/matcher.js +0 -197
- package/dist/vault/matcher.js.map +0 -1
- package/dist/vault/personal.js +0 -163
- package/dist/vault/personal.js.map +0 -1
- package/dist/vault/policy.js +0 -159
- package/dist/vault/policy.js.map +0 -1
- package/dist/vault/store.js +0 -122
- package/dist/vault/store.js.map +0 -1
- package/dist/vault/transfer.js +0 -188
- package/dist/vault/transfer.js.map +0 -1
- package/dist/volumes/index.js +0 -2
- package/dist/volumes/index.js.map +0 -1
- package/dist/volumes/manager.js +0 -462
- package/dist/volumes/manager.js.map +0 -1
- package/dist/volumes/types.js +0 -8
- package/dist/volumes/types.js.map +0 -1
- package/dist/webhooks/config.js +0 -214
- package/dist/webhooks/config.js.map +0 -1
- package/dist/webhooks/event-log.js +0 -132
- package/dist/webhooks/event-log.js.map +0 -1
- package/dist/webhooks/handler.js +0 -103
- package/dist/webhooks/handler.js.map +0 -1
- package/dist/webhooks/handlers.js +0 -231
- package/dist/webhooks/handlers.js.map +0 -1
- package/dist/webhooks/index.js +0 -33
- package/dist/webhooks/index.js.map +0 -1
- package/dist/webhooks/mount.js +0 -400
- package/dist/webhooks/mount.js.map +0 -1
- package/dist/webhooks/registry.js +0 -143
- package/dist/webhooks/registry.js.map +0 -1
- package/dist/webhooks/relay.js +0 -53
- package/dist/webhooks/relay.js.map +0 -1
- package/dist/webhooks/retry.js +0 -270
- package/dist/webhooks/retry.js.map +0 -1
- package/dist/webhooks/router.js +0 -290
- package/dist/webhooks/router.js.map +0 -1
- package/dist/webhooks/twilio.js +0 -129
- package/dist/webhooks/twilio.js.map +0 -1
- package/dist/webhooks/types.js +0 -8
- package/dist/webhooks/types.js.map +0 -1
- package/dist/webhooks/verify.js +0 -154
- 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 =
|
|
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",
|
package/dist/lib/audit.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/lib/audit.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAS,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,IAAI,EAAW,QAAQ,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;AAyBlC,gFAAgF;AAEhF,MAAM,iBAAiB,GAAG,IAAI,iBAAiB,EAAgB,CAAC;AAEhE;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAI,GAAiB,EAAE,EAAW;IACnE,OAAO,iBAAiB,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;AACxC,CAAC;AAED,8CAA8C;AAC9C,MAAM,UAAU,eAAe;IAC7B,OAAO,iBAAiB,CAAC,QAAQ,EAAE,CAAC;AACtC,CAAC;AAED,gFAAgF;AAEhF,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;
|
|
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"}
|