ai-fly 0.3.2 → 0.4.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/dist/ai-fly.js +5 -5
  2. package/dist/{common-CqxqIg6D.mjs → common-BwKEJKOZ.mjs} +2 -2
  3. package/dist/{common-CgxCXeTt.mjs → common-Cr7D8JyX.mjs} +1 -1
  4. package/dist/{daemon-ZWUSWAgM.mjs → daemon-C4kj0IwL.mjs} +3 -3
  5. package/dist/{forget-BXL2x4Wv.mjs → forget-oMwM-SsU.mjs} +2 -2
  6. package/dist/{group-B96IKEDF.mjs → group-CjwGDch3.mjs} +1 -1
  7. package/dist/{import-rpBFh_pa.mjs → import-Zy3LL_PR.mjs} +4 -4
  8. package/dist/{join-CaFx5yoF.mjs → join-BJMcNGV-.mjs} +3 -3
  9. package/dist/{join-u1DqTU3U.mjs → join-CdKKj7QS.mjs} +2 -2
  10. package/dist/{key-KcUU3yhJ.mjs → key-BcNxtRJx.mjs} +3 -3
  11. package/dist/{key-BiEp995L.mjs → key-TP7lZeqW.mjs} +1 -1
  12. package/dist/{local-test-C3HGjGY3.mjs → local-test-DbpiPEsD.mjs} +1 -1
  13. package/dist/{models-dev-2UfQoIpQ.mjs → models-dev-7CclWuHF.mjs} +17 -1
  14. package/dist/{mux-CS1zhF4W.mjs → mux-BEXBL7rE.mjs} +1 -1
  15. package/dist/{ports-BRXd5UXh.mjs → ports-Csv91JOD.mjs} +2 -2
  16. package/dist/{presets-C73CAMZ6.mjs → presets-DRO5N4Vm.mjs} +2 -2
  17. package/dist/{revoke-CkpvK33Q.mjs → revoke-CXTcFgoT.mjs} +2 -2
  18. package/dist/{rewrite-xZHWnyJk.mjs → rewrite-BL3jNnFZ.mjs} +77 -7
  19. package/dist/{route-test-Oew0CO1U.mjs → route-test-DqKRThLp.mjs} +3 -3
  20. package/dist/{rpc-contract-5qyWzT5t.mjs → rpc-contract-CdiRZhUn.mjs} +4 -0
  21. package/dist/{run-3pdPsD8e.mjs → run-W7DBz_bR.mjs} +3 -3
  22. package/dist/{runtime-DNs9GtGp.mjs → runtime-CGF9Sndm.mjs} +2 -2
  23. package/dist/{secret-COdVHzjH.mjs → secret-DKN75Vry.mjs} +2 -2
  24. package/dist/secrets-BKKxR3iB.mjs +2 -0
  25. package/dist/{secrets-BYI6ooTJ.mjs → secrets-DFdwYE_V.mjs} +2 -2
  26. package/dist/{serve-DSBlodTF.mjs → serve-FjBsmK5n.mjs} +2 -2
  27. package/dist/{serve-Be4zdKVj.mjs → serve-GRJthOwO.mjs} +4 -4
  28. package/dist/{service-B5uORhl3.mjs → service-DnQhGK4m.mjs} +21 -7
  29. package/dist/{settings-C1Hb4zwd.mjs → settings-BAa8I7Ww.mjs} +2 -2
  30. package/dist/{settings-DU0YqNDt.mjs → settings-Dho5hk5Z.mjs} +1 -1
  31. package/dist/{share-Cug0944N.mjs → share-DpQPO1eC.mjs} +4 -4
  32. package/dist/{status-Bttb9aPj.mjs → status-BaRyycxh.mjs} +3 -3
  33. package/dist/{status-SkNsxGnk.mjs → status-Ce-lxy52.mjs} +3 -3
  34. package/dist/{store-CrTUwskE.mjs → store-YUMvMCBg.mjs} +1 -1
  35. package/dist/{store-CQShpYar.mjs → store-jmpkM28T.mjs} +1 -1
  36. package/dist/{test-mlaZC1y5.mjs → test-Dxkkc-KN.mjs} +2 -2
  37. package/package.json +1 -1
  38. package/dist/secrets-u19-8EyW.mjs +0 -2
package/dist/ai-fly.js CHANGED
@@ -61,17 +61,17 @@ async function dispatch(command, rest) {
61
61
  const lazy = (load) => {
62
62
  return (argv, ctx) => load().then((m) => m.run([...argv], ctx));
63
63
  };
64
- return match(command).with("serve", () => lazy(() => import("./serve-DSBlodTF.mjs"))(rest)).with("daemon", () => lazy(() => import("./daemon-ZWUSWAgM.mjs"))(rest)).with("presets", () => lazy(() => import("./presets-C73CAMZ6.mjs"))(rest)).with("secret", () => lazy(() => import("./secret-COdVHzjH.mjs"))(rest)).with("settings", async () => (await import("./settings-DU0YqNDt.mjs")).runAsSettings(rest, {})).with("relay", async () => (await import("./settings-DU0YqNDt.mjs")).runAsRelay(rest, {})).with("test", () => lazy(() => import("./test-mlaZC1y5.mjs"))(rest)).with("service", () => lazy(() => import("./service-B5uORhl3.mjs"))(rest)).with("group", () => lazy(() => import("./group-B96IKEDF.mjs"))(rest)).with("share", () => lazy(() => import("./share-Cug0944N.mjs"))(rest)).with("revoke", () => lazy(() => import("./revoke-CkpvK33Q.mjs"))(rest)).with("join", () => lazy(() => import("./join-CaFx5yoF.mjs"))(rest)).with("import", () => lazy(() => import("./import-rpBFh_pa.mjs"))(rest)).with("run", () => lazy(() => import("./run-3pdPsD8e.mjs"))(rest)).with("ports", () => lazy(() => import("./ports-BRXd5UXh.mjs"))(rest)).with("forget", () => lazy(() => import("./forget-BXL2x4Wv.mjs"))(rest)).with("key", () => {
65
- if (rest[0] === "add") return lazy(() => import("./key-KcUU3yhJ.mjs"))(rest);
66
- return lazy(() => import("./key-BiEp995L.mjs"))(rest);
64
+ return match(command).with("serve", () => lazy(() => import("./serve-FjBsmK5n.mjs"))(rest)).with("daemon", () => lazy(() => import("./daemon-C4kj0IwL.mjs"))(rest)).with("presets", () => lazy(() => import("./presets-DRO5N4Vm.mjs"))(rest)).with("secret", () => lazy(() => import("./secret-DKN75Vry.mjs"))(rest)).with("settings", async () => (await import("./settings-Dho5hk5Z.mjs")).runAsSettings(rest, {})).with("relay", async () => (await import("./settings-Dho5hk5Z.mjs")).runAsRelay(rest, {})).with("test", () => lazy(() => import("./test-Dxkkc-KN.mjs"))(rest)).with("service", () => lazy(() => import("./service-DnQhGK4m.mjs"))(rest)).with("group", () => lazy(() => import("./group-CjwGDch3.mjs"))(rest)).with("share", () => lazy(() => import("./share-DpQPO1eC.mjs"))(rest)).with("revoke", () => lazy(() => import("./revoke-CXTcFgoT.mjs"))(rest)).with("join", () => lazy(() => import("./join-BJMcNGV-.mjs"))(rest)).with("import", () => lazy(() => import("./import-Zy3LL_PR.mjs"))(rest)).with("run", () => lazy(() => import("./run-W7DBz_bR.mjs"))(rest)).with("ports", () => lazy(() => import("./ports-Csv91JOD.mjs"))(rest)).with("forget", () => lazy(() => import("./forget-oMwM-SsU.mjs"))(rest)).with("key", () => {
65
+ if (rest[0] === "add") return lazy(() => import("./key-BcNxtRJx.mjs"))(rest);
66
+ return lazy(() => import("./key-TP7lZeqW.mjs"))(rest);
67
67
  }).with("status", async () => {
68
68
  const [scope, ...tail] = rest;
69
69
  const wantProvider = scope === "provider" || scope !== "consumer" && providerDirExists();
70
70
  const wantConsumer = scope === "consumer" || scope !== "provider" && consumersRootExists();
71
71
  const argv = scope === "provider" || scope === "consumer" ? tail : rest;
72
72
  let code = 0;
73
- if (wantProvider) code = Math.max(code, await lazy(() => import("./status-SkNsxGnk.mjs"))(argv));
74
- if (wantConsumer) code = Math.max(code, await lazy(() => import("./status-Bttb9aPj.mjs"))(argv));
73
+ if (wantProvider) code = Math.max(code, await lazy(() => import("./status-Ce-lxy52.mjs"))(argv));
74
+ if (wantConsumer) code = Math.max(code, await lazy(() => import("./status-BaRyycxh.mjs"))(argv));
75
75
  if (!wantProvider && !wantConsumer) process.stdout.write("nothing to report: no provider storage and no imported consumers\n");
76
76
  return code;
77
77
  }).otherwise(() => {
@@ -1,7 +1,7 @@
1
1
  import { n as UsageError } from "./errors-BGtxPkM7.mjs";
2
2
  import { n as resolveRelayUrls, t as loadConfig } from "./config-BlZnFqx7.mjs";
3
- import { t as ProviderStore } from "./store-CrTUwskE.mjs";
4
- import { t as loadSettings } from "./settings-C1Hb4zwd.mjs";
3
+ import { t as ProviderStore } from "./store-YUMvMCBg.mjs";
4
+ import { t as loadSettings } from "./settings-BAa8I7Ww.mjs";
5
5
  import { homedir } from "node:os";
6
6
  import { join } from "node:path";
7
7
  //#region src/cli/commands/provider/common.ts
@@ -1,6 +1,6 @@
1
1
  import { n as resolveRelayUrls, t as loadConfig } from "./config-BlZnFqx7.mjs";
2
2
  import { n as loadSdk, t as resolveHttpProxy } from "./proxy-D7VMUVEg.mjs";
3
- import { t as loadSettings } from "./settings-C1Hb4zwd.mjs";
3
+ import { t as loadSettings } from "./settings-BAa8I7Ww.mjs";
4
4
  import { homedir } from "node:os";
5
5
  //#region src/cli/commands/consumer/common.ts
6
6
  function ctxOut(ctx) {
@@ -1,8 +1,8 @@
1
1
  import { n as UsageError, r as reportCliError, t as CliError } from "./errors-BGtxPkM7.mjs";
2
2
  import { n as parseArgv } from "./args-CSxXW9eD.mjs";
3
- import { r as settingsPath, t as loadSettings } from "./settings-C1Hb4zwd.mjs";
3
+ import { r as settingsPath, t as loadSettings } from "./settings-BAa8I7Ww.mjs";
4
4
  import { a as killHard, c as terminateGracefully, i as isAlive, l as writeLastStart, n as daemonDir, o as readLastStart, r as ensureDaemonDir, s as readPid, t as clearPid, u as writePid } from "./daemon-state-CYkiW3SA.mjs";
5
- import { r as openStore } from "./common-CqxqIg6D.mjs";
5
+ import { r as openStore } from "./common-BwKEJKOZ.mjs";
6
6
  import { openSync, readFileSync } from "node:fs";
7
7
  import { homedir } from "node:os";
8
8
  import { isAbsolute, resolve } from "node:path";
@@ -99,7 +99,7 @@ async function start(startArgv, home) {
99
99
  process.on("exit", () => {
100
100
  clearPid(home);
101
101
  });
102
- const { run: serveRun } = await import("./serve-DSBlodTF.mjs");
102
+ const { run: serveRun } = await import("./serve-FjBsmK5n.mjs");
103
103
  return serveRun([...startArgv], { homedir: home });
104
104
  }
105
105
  /** 后台 pid(活性核验;陈旧 pidfile 就地清理返回 null)。 */
@@ -1,7 +1,7 @@
1
1
  import { n as UsageError } from "./errors-BGtxPkM7.mjs";
2
2
  import { n as parseArgv } from "./args-CSxXW9eD.mjs";
3
- import { d as removeKeyring, n as consumersRoot } from "./store-CQShpYar.mjs";
4
- import { n as ctxHomedir, r as ctxOut } from "./common-CgxCXeTt.mjs";
3
+ import { d as removeKeyring, n as consumersRoot } from "./store-jmpkM28T.mjs";
4
+ import { n as ctxHomedir, r as ctxOut } from "./common-Cr7D8JyX.mjs";
5
5
  import { homedir } from "node:os";
6
6
  //#region src/cli/commands/consumer/forget.ts
7
7
  async function run(argv, ctx = {}) {
@@ -1,6 +1,6 @@
1
1
  import { n as UsageError, r as reportCliError } from "./errors-BGtxPkM7.mjs";
2
2
  import { n as parseArgv } from "./args-CSxXW9eD.mjs";
3
- import { d as str, l as resolveDataDir, n as multi, r as openStore, s as parsePositiveInt } from "./common-CqxqIg6D.mjs";
3
+ import { d as str, l as resolveDataDir, n as multi, r as openStore, s as parsePositiveInt } from "./common-BwKEJKOZ.mjs";
4
4
  import { homedir } from "node:os";
5
5
  //#region src/cli/commands/provider/group.ts
6
6
  const SPEC = {
@@ -1,9 +1,9 @@
1
1
  import { n as UsageError } from "./errors-BGtxPkM7.mjs";
2
2
  import { n as parseArgv } from "./args-CSxXW9eD.mjs";
3
- import { n as consumersRoot, s as listKeyrings } from "./store-CQShpYar.mjs";
4
- import { a as ringsForRun, i as printListeners, n as ctxHomedir, o as waitForSignals, r as ctxOut, t as createSdkFabricFactory } from "./common-CgxCXeTt.mjs";
5
- import { a as importLink, i as formatLinkPreview, n as decodeShareLink, r as formatKeyringSummary } from "./join-u1DqTU3U.mjs";
6
- import { n as createFabricProviderTransport, t as startEngine } from "./runtime-DNs9GtGp.mjs";
3
+ import { n as consumersRoot, s as listKeyrings } from "./store-jmpkM28T.mjs";
4
+ import { a as ringsForRun, i as printListeners, n as ctxHomedir, o as waitForSignals, r as ctxOut, t as createSdkFabricFactory } from "./common-Cr7D8JyX.mjs";
5
+ import { a as importLink, i as formatLinkPreview, n as decodeShareLink, r as formatKeyringSummary } from "./join-CdKKj7QS.mjs";
6
+ import { n as createFabricProviderTransport, t as startEngine } from "./runtime-CGF9Sndm.mjs";
7
7
  import { homedir } from "node:os";
8
8
  //#region src/cli/commands/consumer/import.ts
9
9
  async function run(argv, ctx = {}) {
@@ -1,8 +1,8 @@
1
1
  import { n as UsageError } from "./errors-BGtxPkM7.mjs";
2
2
  import { n as parseArgv } from "./args-CSxXW9eD.mjs";
3
- import { n as consumersRoot } from "./store-CQShpYar.mjs";
4
- import { n as ctxHomedir, r as ctxOut, t as createSdkFabricFactory } from "./common-CgxCXeTt.mjs";
5
- import { o as joinDevice } from "./join-u1DqTU3U.mjs";
3
+ import { n as consumersRoot } from "./store-jmpkM28T.mjs";
4
+ import { n as ctxHomedir, r as ctxOut, t as createSdkFabricFactory } from "./common-Cr7D8JyX.mjs";
5
+ import { o as joinDevice } from "./join-CdKKj7QS.mjs";
6
6
  import { homedir } from "node:os";
7
7
  //#region src/cli/commands/consumer/join.ts
8
8
  async function run(argv, ctx = {}) {
@@ -1,7 +1,7 @@
1
1
  import { t as CliError } from "./errors-BGtxPkM7.mjs";
2
- import { o as decodeZ32, s as randomZ32 } from "./rpc-contract-5qyWzT5t.mjs";
2
+ import { o as decodeZ32, s as randomZ32 } from "./rpc-contract-CdiRZhUn.mjs";
3
3
  import { l as SERVICE_ENTRY_SCHEMA } from "./frames-BDqvhB2Y.mjs";
4
- import { a as hasFabricIdentity, c as loadKeyring, f as saveKeyring, h as upsertKey, i as findKeyringDir, l as mergeImportView, o as keyringDir, r as fabricDir } from "./store-CQShpYar.mjs";
4
+ import { a as hasFabricIdentity, c as loadKeyring, f as saveKeyring, h as upsertKey, i as findKeyringDir, l as mergeImportView, o as keyringDir, r as fabricDir } from "./store-jmpkM28T.mjs";
5
5
  import { existsSync, mkdirSync, renameSync, rmSync } from "node:fs";
6
6
  import { join } from "node:path";
7
7
  import { z } from "zod";
@@ -1,8 +1,8 @@
1
1
  import { n as UsageError } from "./errors-BGtxPkM7.mjs";
2
2
  import { n as parseArgv } from "./args-CSxXW9eD.mjs";
3
- import { n as consumersRoot } from "./store-CQShpYar.mjs";
4
- import { n as ctxHomedir, r as ctxOut } from "./common-CgxCXeTt.mjs";
5
- import { r as formatKeyringSummary, t as addKey } from "./join-u1DqTU3U.mjs";
3
+ import { n as consumersRoot } from "./store-jmpkM28T.mjs";
4
+ import { n as ctxHomedir, r as ctxOut } from "./common-Cr7D8JyX.mjs";
5
+ import { r as formatKeyringSummary, t as addKey } from "./join-CdKKj7QS.mjs";
6
6
  import { homedir } from "node:os";
7
7
  //#region src/cli/commands/consumer/key.ts
8
8
  async function run(argv, ctx = {}) {
@@ -1,6 +1,6 @@
1
1
  import { n as UsageError, r as reportCliError } from "./errors-BGtxPkM7.mjs";
2
2
  import { n as parseArgv } from "./args-CSxXW9eD.mjs";
3
- import { c as requireString, d as str, l as resolveDataDir, r as openStore } from "./common-CqxqIg6D.mjs";
3
+ import { c as requireString, d as str, l as resolveDataDir, r as openStore } from "./common-BwKEJKOZ.mjs";
4
4
  import { homedir } from "node:os";
5
5
  //#region src/cli/commands/provider/key.ts
6
6
  const SPEC = {
@@ -1,4 +1,4 @@
1
- import { n as ROUTE_LOCAL_PREFIX } from "./rpc-contract-5qyWzT5t.mjs";
1
+ import { n as ROUTE_LOCAL_PREFIX } from "./rpc-contract-CdiRZhUn.mjs";
2
2
  //#region src/consumer/local-test.ts
3
3
  const DEFAULT_TIMEOUT_MS = 2e4;
4
4
  const BODY_EXCERPT_MAX = 2e3;
@@ -1,4 +1,4 @@
1
- import { t as PRESET_SCHEMA } from "./rpc-contract-5qyWzT5t.mjs";
1
+ import { t as PRESET_SCHEMA } from "./rpc-contract-CdiRZhUn.mjs";
2
2
  import { mkdirSync, readFileSync, renameSync, writeFileSync } from "node:fs";
3
3
  import { homedir } from "node:os";
4
4
  import { dirname, join } from "node:path";
@@ -58,6 +58,22 @@ var providers_default = {
58
58
  }],
59
59
  "notes": "OpenAI-compatible at /v1/* (chat completions + responses, codex-ready); Anthropic-compatible surface at /anthropic/* (per vendor docs).",
60
60
  "source": "https://models.dev/api.json + https://api-docs.deepseek.com/guides/anthropic_api"
61
+ },
62
+ {
63
+ "id": "codex",
64
+ "label": "Codex (ChatGPT backend)",
65
+ "apiForm": "openai-responses",
66
+ "baseUrl": "https://chatgpt.com",
67
+ "defaultPort": 4306,
68
+ "matchDomains": ["chatgpt.com"],
69
+ "routes": [{
70
+ "forms": ["openai-responses"],
71
+ "localPrefix": "/codex",
72
+ "upstreamPrefix": "/backend-api/codex"
73
+ }],
74
+ "authHeader": "$file:~/.codex/auth.json#.tokens.access_token?bearer",
75
+ "notes": "ChatGPT Codex backend (Responses API). Auth reads ~/.codex/auth.json per request (codex CLI login state; no key needed). Point agents at OPENAI_BASE_URL=http://127.0.0.1:<port>/codex with wire_api=responses. WS clients: ws://127.0.0.1:<port>/codex/responses upgrades to wss upstream.",
76
+ "source": "https://github.com/openai/codex (~/.codex/auth.json login state)"
61
77
  }
62
78
  ]
63
79
  };
@@ -1,4 +1,4 @@
1
- import { s as randomZ32 } from "./rpc-contract-5qyWzT5t.mjs";
1
+ import { s as randomZ32 } from "./rpc-contract-CdiRZhUn.mjs";
2
2
  import { a as FRAME_TYPE_NAME, d as isKnownFrameType, i as FRAME_TYPE, r as FRAME_HEADER_SCHEMAS, t as ERROR_CODE, u as classifySchemaFailure } from "./frames-BDqvhB2Y.mjs";
3
3
  //#region src/wire/codec.ts
4
4
  const WIRE_MAGIC_PREFIX = "aifly";
@@ -1,7 +1,7 @@
1
1
  import { n as UsageError } from "./errors-BGtxPkM7.mjs";
2
2
  import { n as parseArgv } from "./args-CSxXW9eD.mjs";
3
- import { m as setPort, n as consumersRoot, s as listKeyrings } from "./store-CQShpYar.mjs";
4
- import { n as ctxHomedir, r as ctxOut } from "./common-CgxCXeTt.mjs";
3
+ import { m as setPort, n as consumersRoot, s as listKeyrings } from "./store-jmpkM28T.mjs";
4
+ import { n as ctxHomedir, r as ctxOut } from "./common-Cr7D8JyX.mjs";
5
5
  import { i as validatePortArg, n as desiredPortFor } from "./ports-pI59MtmI.mjs";
6
6
  import { homedir } from "node:os";
7
7
  //#region src/cli/commands/consumer/ports.ts
@@ -1,7 +1,7 @@
1
1
  import { n as UsageError, r as reportCliError } from "./errors-BGtxPkM7.mjs";
2
2
  import { n as parseArgv } from "./args-CSxXW9eD.mjs";
3
- import { t as loadSettings } from "./settings-C1Hb4zwd.mjs";
4
- import { n as loadCuratedPresets, r as modelsDevCachePath, t as fetchModelsDevPresets } from "./models-dev-2UfQoIpQ.mjs";
3
+ import { t as loadSettings } from "./settings-BAa8I7Ww.mjs";
4
+ import { n as loadCuratedPresets, r as modelsDevCachePath, t as fetchModelsDevPresets } from "./models-dev-7CclWuHF.mjs";
5
5
  import { homedir } from "node:os";
6
6
  //#region src/cli/commands/provider/presets.ts
7
7
  const SPEC = { json: { type: "boolean" } };
@@ -1,8 +1,8 @@
1
1
  import { n as UsageError, r as reportCliError } from "./errors-BGtxPkM7.mjs";
2
2
  import { n as parseArgv } from "./args-CSxXW9eD.mjs";
3
3
  import { t as resolveHttpProxy } from "./proxy-D7VMUVEg.mjs";
4
- import { d as str, l as resolveDataDir, u as resolvedRelayUrls } from "./common-CqxqIg6D.mjs";
5
- import { t as openExistingFabric } from "./serve-Be4zdKVj.mjs";
4
+ import { d as str, l as resolveDataDir, u as resolvedRelayUrls } from "./common-BwKEJKOZ.mjs";
5
+ import { t as openExistingFabric } from "./serve-GRJthOwO.mjs";
6
6
  import { homedir } from "node:os";
7
7
  //#region src/cli/commands/provider/revoke.ts
8
8
  const SPEC = {
@@ -1,6 +1,9 @@
1
- import { a as routeLocalPrefix } from "./rpc-contract-5qyWzT5t.mjs";
1
+ import { a as routeLocalPrefix } from "./rpc-contract-CdiRZhUn.mjs";
2
2
  import { n as FORBIDDEN_REQ_HEADER_NAMES } from "./frames-BDqvhB2Y.mjs";
3
- import { a as parseUpstreamUrl, c as matchRequestPath, o as expandUriTemplate, s as compileMatchPattern } from "./store-CrTUwskE.mjs";
3
+ import { a as parseUpstreamUrl, c as matchRequestPath, o as expandUriTemplate, s as compileMatchPattern } from "./store-YUMvMCBg.mjs";
4
+ import { readFileSync } from "node:fs";
5
+ import { homedir } from "node:os";
6
+ import { join } from "node:path";
4
7
  const ENV_REF_PREFIX = "$env:";
5
8
  /** $secret 引用前缀(密钥库名;与 $env 同样按引用整体掩码)。 */
6
9
  const SECRET_REF_PREFIX = "$secret:";
@@ -121,18 +124,85 @@ var SecretMissingError = class extends Error {
121
124
  }
122
125
  };
123
126
  /**
124
- * 头值解析:literal 原样;`$secret:<name>` 优先于 `$env:` 判定——命中密钥库返回
125
- * 完整值,未命中(含空名/空值/未注入密钥源)抛 SecretMissingError(不回退空值、
126
- * 不省略该头);`$env:<VAR>` 语义保持——空串/未设置返回 undefined(= 省略该头)。
127
- * 两者可并存于不同头(逐头独立解析)。
127
+ * 解析 `$file:` 引用。path 支持 `~` 前缀(解析时展开);jsonPath 为 jq 风格
128
+ * 点径(`.tokens.access_token`,支持 `[n]` 数组下标);`?bearer` 后缀给非空
129
+ * 值拼 `Bearer ` 前缀。格式非法(缺 `#`)抛 SecretMissingError 同族的
130
+ * UsageError 语义由调用方决定——此处返回 null 交由上层按未命中处理。
128
131
  */
129
- function resolveHeaderValue(value, env, secrets) {
132
+ function parseFileRef(value) {
133
+ const body = value.slice(6);
134
+ const hash = body.indexOf("#");
135
+ if (hash <= 0) return null;
136
+ let spec = body.slice(hash + 1);
137
+ let bearer = false;
138
+ if (spec.endsWith("?bearer")) {
139
+ bearer = true;
140
+ spec = spec.slice(0, -7);
141
+ }
142
+ if (spec === "" || !spec.startsWith(".")) return null;
143
+ return {
144
+ path: body.slice(0, hash),
145
+ jsonPath: spec,
146
+ bearer
147
+ };
148
+ }
149
+ /** jq 风格点径求值(`.a.b` / `.a[0].b`;起点须以 `.` 开头)。未命中返回 undefined。 */
150
+ function evalJsonPath(root, jsonPath) {
151
+ if (!jsonPath.startsWith(".")) return void 0;
152
+ let cur = root;
153
+ const segments = jsonPath.slice(1).split(/(?=\[)|\./).filter((s) => s !== "");
154
+ for (const seg of segments) {
155
+ if (cur === null || cur === void 0) return void 0;
156
+ const arr = /^\[(\d+)\]$/.exec(seg);
157
+ if (arr !== null) {
158
+ if (!Array.isArray(cur)) return void 0;
159
+ cur = cur[Number(arr[1])];
160
+ continue;
161
+ }
162
+ if (typeof cur !== "object") return void 0;
163
+ cur = cur[seg];
164
+ }
165
+ return cur;
166
+ }
167
+ /** 默认文件凭据源:读文件 + JSON 解析 + 点径求值(仅字符串值;`~` 已在上层展开)。 */
168
+ const defaultFileCredentialSource = (path, jsonPath) => {
169
+ let raw;
170
+ try {
171
+ raw = readFileSync(path, "utf8");
172
+ } catch {
173
+ return;
174
+ }
175
+ let parsed;
176
+ try {
177
+ parsed = JSON.parse(raw);
178
+ } catch {
179
+ return;
180
+ }
181
+ const value = evalJsonPath(parsed, jsonPath);
182
+ return typeof value === "string" && value !== "" ? value : void 0;
183
+ };
184
+ /**
185
+ * 头值解析:literal 原样;`$secret:<name>` 优先于 `$env:`/`$file:` 判定——命中
186
+ * 密钥库返回完整值,未命中(含空名/空值/未注入密钥源)抛 SecretMissingError
187
+ * (不回退空值、不省略该头);`$file:<path>#<json-path>[?bearer]` 每请求读盘
188
+ * (文件/键/空值未命中同抛 SecretMissingError;`?bearer` 拼前缀);
189
+ * `$env:<VAR>` 语义保持——空串/未设置返回 undefined(= 省略该头)。
190
+ * 各源可并存于不同头(逐头独立解析)。
191
+ */
192
+ function resolveHeaderValue(value, env, secrets, files = defaultFileCredentialSource) {
130
193
  if (value.startsWith("$secret:")) {
131
194
  const name = value.slice(8);
132
195
  const resolved = secrets?.(name);
133
196
  if (resolved === void 0 || resolved === "") throw new SecretMissingError();
134
197
  return resolved;
135
198
  }
199
+ if (value.startsWith("$file:")) {
200
+ const ref = parseFileRef(value);
201
+ if (ref === null) throw new SecretMissingError();
202
+ const resolved = files(ref.path.startsWith("~/") ? join(homedir(), ref.path.slice(1)) : ref.path, ref.jsonPath);
203
+ if (resolved === void 0 || resolved === "") throw new SecretMissingError();
204
+ return ref.bearer ? `Bearer ${resolved}` : resolved;
205
+ }
136
206
  if (!value.startsWith("$env:")) return value;
137
207
  const name = value.slice(5);
138
208
  if (name === "") return void 0;
@@ -1,6 +1,6 @@
1
- import { n as ROUTE_LOCAL_PREFIX } from "./rpc-contract-5qyWzT5t.mjs";
2
- import { t as formProbe } from "./local-test-C3HGjGY3.mjs";
3
- import { i as buildUpstreamRequest, t as PathNotOfferedError } from "./rewrite-xZHWnyJk.mjs";
1
+ import { n as ROUTE_LOCAL_PREFIX } from "./rpc-contract-CdiRZhUn.mjs";
2
+ import { t as formProbe } from "./local-test-DbpiPEsD.mjs";
3
+ import { i as buildUpstreamRequest, t as PathNotOfferedError } from "./rewrite-BL3jNnFZ.mjs";
4
4
  //#region src/provider/route-test.ts
5
5
  const DEFAULT_TIMEOUT_MS = 2e4;
6
6
  const BODY_EXCERPT_MAX = 2e3;
@@ -228,6 +228,7 @@ const CONSUMER_PROVIDER_STATUS_SCHEMA = z.object({
228
228
  });
229
229
  const API_FORM_SCHEMA = z.enum([
230
230
  "openai-completions",
231
+ "openai-responses",
231
232
  "anthropic-messages",
232
233
  "gemini-native"
233
234
  ]);
@@ -240,6 +241,9 @@ const PRESET_SCHEMA = z.strictObject({
240
241
  iconId: z.string().min(1).max(128).optional(),
241
242
  /** 惯用环境变量名(仅用于 $env 注入建议与文档;本地运行时模板无此字段)。 */
242
243
  keyEnv: z.string().min(1).max(256).optional(),
244
+ /** 预填 authorization 头值模板(如 `$file:~/.codex/auth.json#.tokens.access_token?bearer`);
245
+ * 优先级:显式 secretName > authHeader > keyEnv。 */
246
+ authHeader: z.string().min(3).max(2048).optional(),
243
247
  /** 使用方本地端口建议(避开 <1024 特权段)。 */
244
248
  defaultPort: z.number().int().min(1024).max(65535),
245
249
  /** 官方域名集(exact/suffix 建议的生成源)。 */
@@ -1,8 +1,8 @@
1
1
  import { n as UsageError, r as reportCliError, t as CliError } from "./errors-BGtxPkM7.mjs";
2
2
  import { n as parseArgv } from "./args-CSxXW9eD.mjs";
3
- import { n as consumersRoot, s as listKeyrings } from "./store-CQShpYar.mjs";
4
- import { a as ringsForRun, i as printListeners, n as ctxHomedir, o as waitForSignals, r as ctxOut, t as createSdkFabricFactory } from "./common-CgxCXeTt.mjs";
5
- import { n as createFabricProviderTransport, t as startEngine } from "./runtime-DNs9GtGp.mjs";
3
+ import { n as consumersRoot, s as listKeyrings } from "./store-jmpkM28T.mjs";
4
+ import { a as ringsForRun, i as printListeners, n as ctxHomedir, o as waitForSignals, r as ctxOut, t as createSdkFabricFactory } from "./common-Cr7D8JyX.mjs";
5
+ import { n as createFabricProviderTransport, t as startEngine } from "./runtime-CGF9Sndm.mjs";
6
6
  import { a as killHard, c as terminateGracefully, i as isAlive, l as writeLastStart, n as daemonDir, o as readLastStart, r as ensureDaemonDir, s as readPid, t as clearPid, u as writePid } from "./daemon-state-CYkiW3SA.mjs";
7
7
  import { openSync, readFileSync } from "node:fs";
8
8
  import { resolve } from "node:path";
@@ -1,6 +1,6 @@
1
1
  import { i as FRAME_TYPE, o as HTTP_METHODS } from "./frames-BDqvhB2Y.mjs";
2
- import { c as loadKeyring, f as saveKeyring, p as setActualPorts, t as applyCatalog, u as reconcileKeyMetadata } from "./store-CQShpYar.mjs";
3
- import { i as splitBody, n as FabricWireAdapter, t as WireSession } from "./mux-CS1zhF4W.mjs";
2
+ import { c as loadKeyring, f as saveKeyring, p as setActualPorts, t as applyCatalog, u as reconcileKeyMetadata } from "./store-jmpkM28T.mjs";
3
+ import { i as splitBody, n as FabricWireAdapter, t as WireSession } from "./mux-BEXBL7rE.mjs";
4
4
  import { n as desiredPortFor, r as listenWithFallback, t as LOOPBACK_HOST } from "./ports-pI59MtmI.mjs";
5
5
  import { Hono } from "hono";
6
6
  import { createAdaptorServer } from "@hono/node-server";
@@ -1,7 +1,7 @@
1
1
  import { n as UsageError, r as reportCliError } from "./errors-BGtxPkM7.mjs";
2
2
  import { n as parseArgv } from "./args-CSxXW9eD.mjs";
3
- import { d as str, l as resolveDataDir } from "./common-CqxqIg6D.mjs";
4
- import { t as SecretsStore } from "./secrets-BYI6ooTJ.mjs";
3
+ import { d as str, l as resolveDataDir } from "./common-BwKEJKOZ.mjs";
4
+ import { t as SecretsStore } from "./secrets-DFdwYE_V.mjs";
5
5
  import { homedir } from "node:os";
6
6
  import process from "node:process";
7
7
  import { createInterface } from "node:readline";
@@ -0,0 +1,2 @@
1
+ import { t as SecretsStore } from "./secrets-DFdwYE_V.mjs";
2
+ export { SecretsStore };
@@ -1,5 +1,5 @@
1
- import { r as SECRET_NAME_SCHEMA } from "./rpc-contract-5qyWzT5t.mjs";
2
- import { i as ensurePrivateDir, n as StoreError, r as atomicWriteFileSync } from "./store-CrTUwskE.mjs";
1
+ import { r as SECRET_NAME_SCHEMA } from "./rpc-contract-CdiRZhUn.mjs";
2
+ import { i as ensurePrivateDir, n as StoreError, r as atomicWriteFileSync } from "./store-YUMvMCBg.mjs";
3
3
  import { existsSync, readFileSync } from "node:fs";
4
4
  import { join } from "node:path";
5
5
  import { z } from "zod";
@@ -1,8 +1,8 @@
1
1
  import { n as UsageError, r as reportCliError } from "./errors-BGtxPkM7.mjs";
2
2
  import { n as parseArgv } from "./args-CSxXW9eD.mjs";
3
3
  import { t as resolveHttpProxy } from "./proxy-D7VMUVEg.mjs";
4
- import { d as str, l as resolveDataDir, u as resolvedRelayUrls } from "./common-CqxqIg6D.mjs";
5
- import { n as startProviderDaemon } from "./serve-Be4zdKVj.mjs";
4
+ import { d as str, l as resolveDataDir, u as resolvedRelayUrls } from "./common-BwKEJKOZ.mjs";
5
+ import { n as startProviderDaemon } from "./serve-GRJthOwO.mjs";
6
6
  import { homedir } from "node:os";
7
7
  //#region src/cli/commands/provider/serve.ts
8
8
  const SPEC = {
@@ -1,9 +1,9 @@
1
1
  import { c as RESP_META_HEADER_WHITELIST, i as FRAME_TYPE, s as REJECTED_CODE, t as ERROR_CODE } from "./frames-BDqvhB2Y.mjs";
2
2
  import { n as loadSdk } from "./proxy-D7VMUVEg.mjs";
3
- import { i as ensurePrivateDir, r as atomicWriteFileSync, t as ProviderStore } from "./store-CrTUwskE.mjs";
4
- import { n as FabricWireAdapter, r as DEFAULT_BODY_CHUNK_BYTES, t as WireSession } from "./mux-CS1zhF4W.mjs";
5
- import { a as collectEnvVarNames, i as buildUpstreamRequest, n as RewriteError, r as SecretMissingError, s as buildServiceEntry, t as PathNotOfferedError } from "./rewrite-xZHWnyJk.mjs";
6
- import { t as SecretsStore } from "./secrets-BYI6ooTJ.mjs";
3
+ import { i as ensurePrivateDir, r as atomicWriteFileSync, t as ProviderStore } from "./store-YUMvMCBg.mjs";
4
+ import { n as FabricWireAdapter, r as DEFAULT_BODY_CHUNK_BYTES, t as WireSession } from "./mux-BEXBL7rE.mjs";
5
+ import { a as collectEnvVarNames, i as buildUpstreamRequest, n as RewriteError, r as SecretMissingError, s as buildServiceEntry, t as PathNotOfferedError } from "./rewrite-BL3jNnFZ.mjs";
6
+ import { t as SecretsStore } from "./secrets-DFdwYE_V.mjs";
7
7
  import { appendFileSync, existsSync, readFileSync, readdirSync, watch } from "node:fs";
8
8
  import "node:os";
9
9
  import { dirname, join } from "node:path";
@@ -1,7 +1,7 @@
1
1
  import { n as UsageError, r as reportCliError } from "./errors-BGtxPkM7.mjs";
2
2
  import { n as parseArgv } from "./args-CSxXW9eD.mjs";
3
- import { a as parseMatchSpec, d as str, i as parseHeaderSetSpec, l as resolveDataDir, n as multi, o as parsePortNumber, r as openStore, t as buildRewrite } from "./common-CqxqIg6D.mjs";
4
- import { n as loadCuratedPresets } from "./models-dev-2UfQoIpQ.mjs";
3
+ import { a as parseMatchSpec, d as str, i as parseHeaderSetSpec, l as resolveDataDir, n as multi, o as parsePortNumber, r as openStore, t as buildRewrite } from "./common-BwKEJKOZ.mjs";
4
+ import { n as loadCuratedPresets } from "./models-dev-7CclWuHF.mjs";
5
5
  import { homedir } from "node:os";
6
6
  //#region src/cli/commands/provider/service.ts
7
7
  const SPEC = {
@@ -75,6 +75,10 @@ function add(options, positionals, home) {
75
75
  name: "authorization",
76
76
  value: `\$secret:${str(options.secret)}`
77
77
  });
78
+ else if (preset?.authHeader !== void 0 && !headerSetSpecs.some((h) => h.name.toLowerCase() === "authorization")) headerSetSpecs.push({
79
+ name: "authorization",
80
+ value: preset.authHeader
81
+ });
78
82
  const dataDir = resolveDataDir(str(options.data), home);
79
83
  const service = openStore(dataDir).addService({
80
84
  name,
@@ -203,18 +207,28 @@ function get(options, positionals, home) {
203
207
  async function test(options, positionals, home) {
204
208
  const name = positionals[1];
205
209
  if (name === void 0) throw new UsageError("error: service test requires a <name> argument");
206
- const formRaw = options.form === void 0 ? "openai-chat" : str(options.form);
207
- if (!ROUTE_FORMS.includes(formRaw)) throw new UsageError(`error: --form must be one of ${ROUTE_FORMS.join(", ")}`);
208
210
  const dataDir = resolveDataDir(str(options.data), home);
209
211
  const service = openStore(dataDir).getServiceByName(name);
210
212
  if (service === void 0) throw new UsageError(`error: service '${name}' not found`);
211
- const { testServiceRoute } = await import("./route-test-Oew0CO1U.mjs");
212
- const { SecretsStore } = await import("./secrets-u19-8EyW.mjs");
213
+ let formRaw;
214
+ if (options.form !== void 0) formRaw = str(options.form);
215
+ else {
216
+ const localPrefix = options["local-prefix"] !== void 0 ? str(options["local-prefix"]) : void 0;
217
+ const routes = (service.routes ?? []).filter((r) => r.mode !== "pattern");
218
+ formRaw = (localPrefix !== void 0 ? routes.find((r) => r.localPrefix === localPrefix) : routes.length === 1 ? routes[0] : void 0)?.forms[0] ?? "openai-chat";
219
+ }
220
+ if (!ROUTE_FORMS.includes(formRaw)) throw new UsageError(`error: --form must be one of ${ROUTE_FORMS.join(", ")}`);
221
+ const { testServiceRoute } = await import("./route-test-DqKRThLp.mjs");
222
+ const { SecretsStore } = await import("./secrets-BKKxR3iB.mjs");
213
223
  const secretsStore = SecretsStore.open(dataDir);
224
+ const hitLocalPrefix = options["local-prefix"] !== void 0 ? str(options["local-prefix"]) : (() => {
225
+ const routes = (service.routes ?? []).filter((r) => r.mode !== "pattern");
226
+ return routes.length === 1 ? routes[0].localPrefix : void 0;
227
+ })();
214
228
  const result = await testServiceRoute({
215
229
  service,
216
230
  form: formRaw,
217
- ...options["local-prefix"] !== void 0 ? { localPrefix: str(options["local-prefix"]) } : {},
231
+ ...hitLocalPrefix !== void 0 ? { localPrefix: hitLocalPrefix } : {},
218
232
  ...options.model !== void 0 ? { model: str(options.model) } : {},
219
233
  ...options.content !== void 0 ? { content: str(options.content) } : {},
220
234
  secrets: (secretName) => secretsStore.resolve(secretName)?.headerValue
@@ -1,5 +1,5 @@
1
- import { i as SETTINGS_SCHEMA } from "./rpc-contract-5qyWzT5t.mjs";
2
- import { i as ensurePrivateDir, r as atomicWriteFileSync } from "./store-CrTUwskE.mjs";
1
+ import { i as SETTINGS_SCHEMA } from "./rpc-contract-CdiRZhUn.mjs";
2
+ import { i as ensurePrivateDir, r as atomicWriteFileSync } from "./store-YUMvMCBg.mjs";
3
3
  import { readFileSync } from "node:fs";
4
4
  import { homedir } from "node:os";
5
5
  import { join } from "node:path";
@@ -1,6 +1,6 @@
1
1
  import { n as UsageError, r as reportCliError } from "./errors-BGtxPkM7.mjs";
2
2
  import { n as parseArgv } from "./args-CSxXW9eD.mjs";
3
- import { n as saveSettings, r as settingsPath, t as loadSettings } from "./settings-C1Hb4zwd.mjs";
3
+ import { n as saveSettings, r as settingsPath, t as loadSettings } from "./settings-BAa8I7Ww.mjs";
4
4
  import { homedir } from "node:os";
5
5
  //#region src/cli/commands/settings.ts
6
6
  const SPEC = { default: { type: "boolean" } };
@@ -2,10 +2,10 @@ import { r as reportCliError, t as CliError } from "./errors-BGtxPkM7.mjs";
2
2
  import { n as parseArgv, r as parseDurationMs, t as assertDurationRange } from "./args-CSxXW9eD.mjs";
3
3
  import { l as SERVICE_ENTRY_SCHEMA } from "./frames-BDqvhB2Y.mjs";
4
4
  import { t as resolveHttpProxy } from "./proxy-D7VMUVEg.mjs";
5
- import { n as StoreError } from "./store-CrTUwskE.mjs";
6
- import { c as requireString, d as str, l as resolveDataDir, r as openStore, u as resolvedRelayUrls } from "./common-CqxqIg6D.mjs";
7
- import { t as openExistingFabric } from "./serve-Be4zdKVj.mjs";
8
- import { s as buildServiceEntry } from "./rewrite-xZHWnyJk.mjs";
5
+ import { n as StoreError } from "./store-YUMvMCBg.mjs";
6
+ import { c as requireString, d as str, l as resolveDataDir, r as openStore, u as resolvedRelayUrls } from "./common-BwKEJKOZ.mjs";
7
+ import { t as openExistingFabric } from "./serve-GRJthOwO.mjs";
8
+ import { s as buildServiceEntry } from "./rewrite-BL3jNnFZ.mjs";
9
9
  import { homedir } from "node:os";
10
10
  import { z } from "zod";
11
11
  //#region src/provider/link.ts
@@ -1,7 +1,7 @@
1
1
  import { n as parseArgv } from "./args-CSxXW9eD.mjs";
2
- import { n as consumersRoot, s as listKeyrings } from "./store-CQShpYar.mjs";
3
- import { a as ringsForRun, n as ctxHomedir, r as ctxOut, t as createSdkFabricFactory } from "./common-CgxCXeTt.mjs";
4
- import { n as createFabricProviderTransport, t as startEngine } from "./runtime-DNs9GtGp.mjs";
2
+ import { n as consumersRoot, s as listKeyrings } from "./store-jmpkM28T.mjs";
3
+ import { a as ringsForRun, n as ctxHomedir, r as ctxOut, t as createSdkFabricFactory } from "./common-Cr7D8JyX.mjs";
4
+ import { n as createFabricProviderTransport, t as startEngine } from "./runtime-CGF9Sndm.mjs";
5
5
  import { homedir } from "node:os";
6
6
  //#region src/cli/commands/consumer/status.ts
7
7
  /** 状态显示名(spec 六态)。 */
@@ -1,9 +1,9 @@
1
1
  import { r as reportCliError } from "./errors-BGtxPkM7.mjs";
2
2
  import { n as parseArgv } from "./args-CSxXW9eD.mjs";
3
3
  import { t as resolveHttpProxy } from "./proxy-D7VMUVEg.mjs";
4
- import { d as str, l as resolveDataDir, r as openStore, u as resolvedRelayUrls } from "./common-CqxqIg6D.mjs";
5
- import { t as openExistingFabric } from "./serve-Be4zdKVj.mjs";
6
- import { c as detailDisplayLines, o as buildServiceDetail } from "./rewrite-xZHWnyJk.mjs";
4
+ import { d as str, l as resolveDataDir, r as openStore, u as resolvedRelayUrls } from "./common-BwKEJKOZ.mjs";
5
+ import { t as openExistingFabric } from "./serve-GRJthOwO.mjs";
6
+ import { c as detailDisplayLines, o as buildServiceDetail } from "./rewrite-BL3jNnFZ.mjs";
7
7
  import { homedir } from "node:os";
8
8
  //#region src/cli/commands/provider/status.ts
9
9
  const SPEC = {
@@ -1,4 +1,4 @@
1
- import { n as ROUTE_LOCAL_PREFIX, s as randomZ32 } from "./rpc-contract-5qyWzT5t.mjs";
1
+ import { n as ROUTE_LOCAL_PREFIX, s as randomZ32 } from "./rpc-contract-CdiRZhUn.mjs";
2
2
  import { chmodSync, existsSync, mkdirSync, readFileSync, renameSync, writeFileSync } from "node:fs";
3
3
  import { join } from "node:path";
4
4
  import { z } from "zod";
@@ -1,5 +1,5 @@
1
1
  import { t as CliError } from "./errors-BGtxPkM7.mjs";
2
- import { s as randomZ32 } from "./rpc-contract-5qyWzT5t.mjs";
2
+ import { s as randomZ32 } from "./rpc-contract-CdiRZhUn.mjs";
3
3
  import { l as SERVICE_ENTRY_SCHEMA } from "./frames-BDqvhB2Y.mjs";
4
4
  import { chmodSync, existsSync, mkdirSync, readFileSync, readdirSync, renameSync, rmSync, statSync, writeFileSync } from "node:fs";
5
5
  import { homedir } from "node:os";
@@ -1,8 +1,8 @@
1
1
  import { n as UsageError, r as reportCliError } from "./errors-BGtxPkM7.mjs";
2
2
  import { n as parseArgv } from "./args-CSxXW9eD.mjs";
3
- import { n as consumersRoot, s as listKeyrings } from "./store-CQShpYar.mjs";
3
+ import { n as consumersRoot, s as listKeyrings } from "./store-jmpkM28T.mjs";
4
4
  import { n as desiredPortFor } from "./ports-pI59MtmI.mjs";
5
- import { n as testLocalService } from "./local-test-C3HGjGY3.mjs";
5
+ import { n as testLocalService } from "./local-test-DbpiPEsD.mjs";
6
6
  import { homedir } from "node:os";
7
7
  //#region src/cli/commands/consumer/test.ts
8
8
  const SPEC = {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ai-fly",
3
- "version": "0.3.2",
3
+ "version": "0.4.0-alpha.1",
4
4
  "description": "ai-fly — peer-to-peer HTTP/WebSocket bridge with AI-ready presets, over OpenDWeb fabric",
5
5
  "license": "MIT OR Apache-2.0",
6
6
  "type": "module",
@@ -1,2 +0,0 @@
1
- import { t as SecretsStore } from "./secrets-BYI6ooTJ.mjs";
2
- export { SecretsStore };