@theokit/sdk 5.14.0 → 5.15.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.
- package/CHANGELOG.md +23 -0
- package/dist/{agent-Dfw3VsIX.d.ts → agent-B6C9i_qu.d.ts} +23 -213
- package/dist/{agent-DExqjqYy.d.cts → agent-B6FQad6P.d.cts} +23 -213
- package/dist/{agent-T34LCGQM.js → agent-DRDGUU6T.js} +18 -17
- package/dist/{agent-T34LCGQM.js.map → agent-DRDGUU6T.js.map} +1 -1
- package/dist/{agent-TL4K7BTG.cjs → agent-VI2HITPT.cjs} +19 -18
- package/dist/{agent-TL4K7BTG.cjs.map → agent-VI2HITPT.cjs.map} +1 -1
- package/dist/agent.d.ts +2 -3
- package/dist/{batch-EP3FCL6D.js → batch-N2XDYZED.js} +4 -4
- package/dist/{batch-EP3FCL6D.js.map → batch-N2XDYZED.js.map} +1 -1
- package/dist/{batch-IZ5EDKJ5.cjs → batch-VFR2MAUE.cjs} +7 -7
- package/dist/{batch-IZ5EDKJ5.cjs.map → batch-VFR2MAUE.cjs.map} +1 -1
- package/dist/{chunk-3ONIVO2I.js → chunk-23SS4ID4.js} +3 -3
- package/dist/{chunk-3ONIVO2I.js.map → chunk-23SS4ID4.js.map} +1 -1
- package/dist/{chunk-2C24NSNV.js → chunk-3BBTHFGJ.js} +3 -3
- package/dist/{chunk-2C24NSNV.js.map → chunk-3BBTHFGJ.js.map} +1 -1
- package/dist/{chunk-NP362THY.cjs → chunk-3F53FLQ7.cjs} +5 -7
- package/dist/chunk-3F53FLQ7.cjs.map +1 -0
- package/dist/{chunk-SXH37C7X.cjs → chunk-55LLQFHW.cjs} +6 -6
- package/dist/{chunk-SXH37C7X.cjs.map → chunk-55LLQFHW.cjs.map} +1 -1
- package/dist/{chunk-GARVAUCU.js → chunk-5M5GQYBM.js} +534 -236
- package/dist/chunk-5M5GQYBM.js.map +1 -0
- package/dist/{chunk-2WY2OFSC.cjs → chunk-64ECM3XM.cjs} +616 -318
- package/dist/chunk-64ECM3XM.cjs.map +1 -0
- package/dist/{chunk-ZJAYFSVI.js → chunk-7ACS6P5Z.js} +5 -7
- package/dist/chunk-7ACS6P5Z.js.map +1 -0
- package/dist/{chunk-NAVUTK6X.js → chunk-ARC2V7NY.js} +3 -3
- package/dist/{chunk-NAVUTK6X.js.map → chunk-ARC2V7NY.js.map} +1 -1
- package/dist/{chunk-WDVG5R2Q.cjs → chunk-AUH2EVWY.cjs} +4 -3
- package/dist/chunk-AUH2EVWY.cjs.map +1 -0
- package/dist/chunk-BNEUB52I.cjs +55 -0
- package/dist/chunk-BNEUB52I.cjs.map +1 -0
- package/dist/chunk-BPL5CVZ5.js +53 -0
- package/dist/chunk-BPL5CVZ5.js.map +1 -0
- package/dist/{chunk-NVQSBRG6.js → chunk-CBBT42VX.js} +3 -3
- package/dist/{chunk-NVQSBRG6.js.map → chunk-CBBT42VX.js.map} +1 -1
- package/dist/chunk-CHKV2L2Y.cjs +416 -0
- package/dist/chunk-CHKV2L2Y.cjs.map +1 -0
- package/dist/{chunk-SNVYOX46.cjs → chunk-DJKGDLYZ.cjs} +91 -61
- package/dist/chunk-DJKGDLYZ.cjs.map +1 -0
- package/dist/{chunk-354F3OF5.js → chunk-FGGVSHDW.js} +3 -3
- package/dist/{chunk-354F3OF5.js.map → chunk-FGGVSHDW.js.map} +1 -1
- package/dist/{chunk-6OCJWGVD.cjs → chunk-FTXY4D44.cjs} +4 -4
- package/dist/{chunk-6OCJWGVD.cjs.map → chunk-FTXY4D44.cjs.map} +1 -1
- package/dist/chunk-INVEGVGO.js +405 -0
- package/dist/chunk-INVEGVGO.js.map +1 -0
- package/dist/{chunk-ZOL3L4EH.js → chunk-IOBHFP2E.js} +49 -19
- package/dist/chunk-IOBHFP2E.js.map +1 -0
- package/dist/{chunk-BZK5QL3N.cjs → chunk-KMFBNKCT.cjs} +4 -4
- package/dist/{chunk-BZK5QL3N.cjs.map → chunk-KMFBNKCT.cjs.map} +1 -1
- package/dist/{chunk-DF77RBF4.js → chunk-LCCT5ZXJ.js} +6 -6
- package/dist/{chunk-DF77RBF4.js.map → chunk-LCCT5ZXJ.js.map} +1 -1
- package/dist/{chunk-G7XBVM3T.cjs → chunk-MHUOVS5I.cjs} +5 -5
- package/dist/{chunk-G7XBVM3T.cjs.map → chunk-MHUOVS5I.cjs.map} +1 -1
- package/dist/{chunk-CWQPQTUZ.cjs → chunk-NEH3BPFD.cjs} +15 -15
- package/dist/{chunk-CWQPQTUZ.cjs.map → chunk-NEH3BPFD.cjs.map} +1 -1
- package/dist/{chunk-5AR6O7GW.js → chunk-NK5EOTDY.js} +3 -3
- package/dist/{chunk-5AR6O7GW.js.map → chunk-NK5EOTDY.js.map} +1 -1
- package/dist/{chunk-4TEGFMSP.cjs → chunk-P7QYG4RZ.cjs} +23 -15
- package/dist/chunk-P7QYG4RZ.cjs.map +1 -0
- package/dist/chunk-PPU2D4FZ.js +19 -0
- package/dist/chunk-PPU2D4FZ.js.map +1 -0
- package/dist/{chunk-AB4OPJLD.js → chunk-RGVMJU57.js} +3 -3
- package/dist/{chunk-AB4OPJLD.js.map → chunk-RGVMJU57.js.map} +1 -1
- package/dist/{chunk-4KBI37F3.cjs → chunk-RTDVSHJR.cjs} +5 -5
- package/dist/{chunk-4KBI37F3.cjs.map → chunk-RTDVSHJR.cjs.map} +1 -1
- package/dist/{chunk-CJN5CEI3.js → chunk-RZL2W4C3.js} +23 -15
- package/dist/chunk-RZL2W4C3.js.map +1 -0
- package/dist/chunk-SPEN7RJU.cjs +18 -0
- package/dist/{chunk-R5UQL2R5.cjs.map → chunk-SPEN7RJU.cjs.map} +1 -1
- package/dist/{chunk-ZF2LDKQQ.cjs → chunk-U3DW3WDE.cjs} +9 -8
- package/dist/chunk-U3DW3WDE.cjs.map +1 -0
- package/dist/{chunk-LXG6VL6R.cjs → chunk-U7PRI3XM.cjs} +3 -3
- package/dist/{chunk-LXG6VL6R.cjs.map → chunk-U7PRI3XM.cjs.map} +1 -1
- package/dist/{chunk-H7G65PNI.js → chunk-VCQ37TC5.js} +3 -3
- package/dist/{chunk-H7G65PNI.js.map → chunk-VCQ37TC5.js.map} +1 -1
- package/dist/{chunk-SDZ4XDWS.cjs → chunk-VWYFGE27.cjs} +9 -9
- package/dist/{chunk-SDZ4XDWS.cjs.map → chunk-VWYFGE27.cjs.map} +1 -1
- package/dist/{chunk-RN3XDZGS.js → chunk-WM646HEN.js} +4 -3
- package/dist/chunk-WM646HEN.js.map +1 -0
- package/dist/chunk-X7CE7Y5W.js +305 -0
- package/dist/chunk-X7CE7Y5W.js.map +1 -0
- package/dist/{chunk-CGH4BCIY.cjs → chunk-XE3CAY6Z.cjs} +5 -5
- package/dist/{chunk-CGH4BCIY.cjs.map → chunk-XE3CAY6Z.cjs.map} +1 -1
- package/dist/chunk-XOU3CL7S.cjs +312 -0
- package/dist/chunk-XOU3CL7S.cjs.map +1 -0
- package/dist/{chunk-ULEK4OM4.js → chunk-YKNBTHMD.js} +3 -3
- package/dist/{chunk-ULEK4OM4.js.map → chunk-YKNBTHMD.js.map} +1 -1
- package/dist/{compact-session-D2MQDB6G.cjs → compact-session-NX7HUNTB.cjs} +16 -16
- package/dist/{compact-session-D2MQDB6G.cjs.map → compact-session-NX7HUNTB.cjs.map} +1 -1
- package/dist/{compact-session-N2PPHQO6.js → compact-session-Q5IGNFPW.js} +7 -7
- package/dist/{compact-session-N2PPHQO6.js.map → compact-session-Q5IGNFPW.js.map} +1 -1
- package/dist/{cron-CK2v0VWA.d.cts → cron-Bh3aWgQ2.d.cts} +2 -2
- package/dist/{cron-BubDpFJG.d.ts → cron-CCDxeeFZ.d.ts} +2 -2
- package/dist/cron.cjs +18 -17
- package/dist/cron.d.cts +4 -3
- package/dist/cron.d.ts +4 -3
- package/dist/cron.js +17 -16
- package/dist/eval.cjs +17 -16
- package/dist/eval.cjs.map +1 -1
- package/dist/eval.js +16 -15
- package/dist/eval.js.map +1 -1
- package/dist/fs-session-store-CYNTEPJZ.cjs +20 -0
- package/dist/{fs-session-store-S2AXVJIX.cjs.map → fs-session-store-CYNTEPJZ.cjs.map} +1 -1
- package/dist/fs-session-store-MYQEVUFL.js +11 -0
- package/dist/{fs-session-store-6ZCCJX3K.js.map → fs-session-store-MYQEVUFL.js.map} +1 -1
- package/dist/{index-manager-HO456AVW.cjs → index-manager-2KH75BRW.cjs} +7 -7
- package/dist/{index-manager-HO456AVW.cjs.map → index-manager-2KH75BRW.cjs.map} +1 -1
- package/dist/{index-manager-QDH56FER.js → index-manager-NF2WRLOU.js} +6 -6
- package/dist/{index-manager-QDH56FER.js.map → index-manager-NF2WRLOU.js.map} +1 -1
- package/dist/index.cjs +66 -262
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +10 -46
- package/dist/index.d.ts +10 -46
- package/dist/index.js +27 -227
- package/dist/index.js.map +1 -1
- package/dist/{inject-session-J26SHHIO.js → inject-session-4ROYLZHY.js} +3 -3
- package/dist/{inject-session-J26SHHIO.js.map → inject-session-4ROYLZHY.js.map} +1 -1
- package/dist/{inject-session-3ICZIJ2N.cjs → inject-session-AWKDCGHV.cjs} +4 -4
- package/dist/{inject-session-3ICZIJ2N.cjs.map → inject-session-AWKDCGHV.cjs.map} +1 -1
- package/dist/internal/agent-loop/doom-loop-tracker.d.ts +3 -0
- package/dist/internal/agent-loop/types.d.ts +6 -0
- package/dist/internal/error-mappers/anthropic.d.ts +3 -0
- package/dist/internal/error-mappers/openai-compatible.d.ts +2 -3
- package/dist/internal/local-agent/local-agent-dispatch.d.ts +3 -1
- package/dist/internal/local-agent/send-queue.d.ts +31 -0
- package/dist/internal/mcp/client.d.ts +2 -0
- package/dist/internal/mcp/oauth-bearer.d.ts +2 -0
- package/dist/internal/memory/adapters/index.cjs +3 -3
- package/dist/internal/memory/adapters/index.js +2 -2
- package/dist/internal/memory/dreaming/phases.d.ts +15 -0
- package/dist/internal/memory/dreaming/run.d.ts +29 -0
- package/dist/internal/memory/sdk-memory-peer-loader.d.ts +2 -0
- package/dist/internal/memory/storage/index.cjs +51 -35
- package/dist/internal/memory/storage/index.d.cts +2 -0
- package/dist/internal/memory/storage/index.d.ts +2 -0
- package/dist/internal/memory/storage/index.js +4 -4
- package/dist/internal/persistence/cwd-mutex.d.cts +4 -2
- package/dist/internal/persistence/cwd-mutex.d.ts +4 -2
- package/dist/internal/persistence/index.cjs +4 -4
- package/dist/internal/persistence/index.js +2 -2
- package/dist/internal/persistence/sqlite-session-store.d.cts +25 -0
- package/dist/internal/persistence/sqlite-session-store.d.ts +25 -0
- package/dist/internal/providers/registry.d.ts +5 -1
- package/dist/mcp-auth.cjs +25 -307
- package/dist/mcp-auth.cjs.map +1 -1
- package/dist/mcp-auth.js +5 -305
- package/dist/mcp-auth.js.map +1 -1
- package/dist/models.cjs +9 -9
- package/dist/models.js +2 -2
- package/dist/persistence.cjs +9 -4
- package/dist/persistence.cjs.map +1 -1
- package/dist/persistence.d.cts +744 -40
- package/dist/persistence.d.ts +744 -40
- package/dist/persistence.js +3 -2
- package/dist/persistence.js.map +1 -1
- package/dist/providers.cjs +4 -4
- package/dist/providers.js +2 -2
- package/dist/sandbox/docker-sandbox.d.cts +58 -0
- package/dist/sandbox/docker-sandbox.d.ts +58 -0
- package/dist/sandbox/index.cjs +129 -1
- package/dist/sandbox/index.cjs.map +1 -1
- package/dist/sandbox/index.d.cts +1 -0
- package/dist/sandbox/index.d.ts +1 -0
- package/dist/sandbox/index.js +132 -5
- package/dist/sandbox/index.js.map +1 -1
- package/dist/{sdk-agent-DwzHcuxy.d.cts → sdk-agent-BA_6_wtc.d.cts} +30 -2
- package/dist/{sdk-agent-a3fW1xUK.d.ts → sdk-agent-CnwPODYH.d.ts} +30 -2
- package/dist/session-store-Dh07jr9N.d.cts +209 -0
- package/dist/session-store-Dh07jr9N.d.ts +209 -0
- package/dist/sqlite-session-store-BbcpKY1L.d.ts +64 -0
- package/dist/sqlite-session-store-TKXtT4ON.d.cts +64 -0
- package/dist/subagents-loader-KLWF4QPD.cjs +16 -0
- package/dist/{subagents-loader-TXOA5EJJ.cjs.map → subagents-loader-KLWF4QPD.cjs.map} +1 -1
- package/dist/subagents-loader-SXETS2F2.js +7 -0
- package/dist/{subagents-loader-Z744TAKD.js.map → subagents-loader-SXETS2F2.js.map} +1 -1
- package/dist/subagents-loader.cjs +2 -2
- package/dist/subagents-loader.d.cts +3 -2
- package/dist/subagents-loader.d.ts +3 -2
- package/dist/subagents-loader.js +1 -1
- package/dist/types/agent.d.ts +14 -1
- package/dist/types/budget-tracker.d.ts +6 -2
- package/dist/types/mcp.d.ts +14 -0
- package/dist/types/run.d.ts +15 -1
- package/dist/workflow.d.cts +1 -1
- package/dist/workflow.d.ts +1 -1
- package/docs/adr/mutation-testing-scope.md +12 -2
- package/docs/error-codes.md +41 -40
- package/docs/harness-capability-map.md +32 -6
- package/package.json +1 -1
- package/dist/chunk-2WY2OFSC.cjs.map +0 -1
- package/dist/chunk-4TEGFMSP.cjs.map +0 -1
- package/dist/chunk-6CXRYPG7.cjs +0 -211
- package/dist/chunk-6CXRYPG7.cjs.map +0 -1
- package/dist/chunk-CJN5CEI3.js.map +0 -1
- package/dist/chunk-GARVAUCU.js.map +0 -1
- package/dist/chunk-MSEL5E5P.js +0 -204
- package/dist/chunk-MSEL5E5P.js.map +0 -1
- package/dist/chunk-NP362THY.cjs.map +0 -1
- package/dist/chunk-Q5EWJPRY.js +0 -18
- package/dist/chunk-Q5EWJPRY.js.map +0 -1
- package/dist/chunk-R5UQL2R5.cjs +0 -18
- package/dist/chunk-RN3XDZGS.js.map +0 -1
- package/dist/chunk-SNVYOX46.cjs.map +0 -1
- package/dist/chunk-WDVG5R2Q.cjs.map +0 -1
- package/dist/chunk-ZF2LDKQQ.cjs.map +0 -1
- package/dist/chunk-ZJAYFSVI.js.map +0 -1
- package/dist/chunk-ZOL3L4EH.js.map +0 -1
- package/dist/fs-session-store-6ZCCJX3K.js +0 -11
- package/dist/fs-session-store-S2AXVJIX.cjs +0 -20
- package/dist/subagents-loader-TXOA5EJJ.cjs +0 -16
- package/dist/subagents-loader-Z744TAKD.js +0 -7
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { acquireSessionWriter } from './chunk-5IRDK5BC.js';
|
|
2
2
|
import { transcriptPath, legacyTranscriptPath, readTranscript } from './chunk-XESYJ4JC.js';
|
|
3
3
|
import { appendJsonl } from './chunk-KU5O7WPK.js';
|
|
4
|
-
import { withFileLock } from './chunk-
|
|
4
|
+
import { withFileLock } from './chunk-FGGVSHDW.js';
|
|
5
5
|
import { existsSync } from 'fs';
|
|
6
6
|
import { mkdir } from 'fs/promises';
|
|
7
7
|
import { dirname } from 'path';
|
|
@@ -130,5 +130,5 @@ var FsSessionStore = class {
|
|
|
130
130
|
};
|
|
131
131
|
|
|
132
132
|
export { FsSessionStore };
|
|
133
|
-
//# sourceMappingURL=chunk-
|
|
134
|
-
//# sourceMappingURL=chunk-
|
|
133
|
+
//# sourceMappingURL=chunk-RGVMJU57.js.map
|
|
134
|
+
//# sourceMappingURL=chunk-RGVMJU57.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/internal/persistence/fs-session-store.ts"],"names":[],"mappings":"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","file":"chunk-AB4OPJLD.js","sourcesContent":["/**\n * SE41 — `FsSessionStore`, the DEFAULT reference implementation of the pluggable\n * {@link SessionStore} seam. It reads and append-writes the native Claude-shaped\n * `.jsonl` transcript at `<baseDir>/projects/<encoded-cwd>/<agentId>.jsonl` — the\n * exact on-disk format SE40 introduced (the file the Claude Code CLI can\n * `--continue`). Omitting `local.sessionStore` resolves to this store, so the\n * default persistence path is byte-identical to SE40 behavior.\n *\n * `readRecords` is `readTranscript(transcriptPath(...))` (a missing session →\n * `[]`, not an error — a fresh agent has no history). `appendRecords` is a TRUE\n * append: it reads the prior records, concatenates the new-turn delta, and\n * rewrites the whole line set atomically under the SE40 cross-process file lock\n * (`writeTranscript` never shrinks — the native format is an append-only\n * `parentUuid` DAG). The parent dir is created BEFORE acquiring the lock because\n * the lock's companion `<path>.lock` file needs an existing parent dir (the SE40\n * `mkdir(dirname)`-before-lock fix).\n *\n * @internal\n */\n\nimport { existsSync } from \"node:fs\";\nimport { mkdir } from \"node:fs/promises\";\nimport { dirname } from \"node:path\";\nimport type { SessionStore } from \"../../types/session-store.js\";\nimport { withFileLock } from \"./file-lock.js\";\nimport { appendJsonl } from \"./jsonl.js\";\nimport {\n legacyTranscriptPath,\n readTranscript,\n type SessionRecord,\n transcriptPath,\n} from \"./session-transcript.js\";\nimport { acquireSessionWriter, type SessionWriterLease } from \"./session-writer.js\";\n\n/** Options identifying the on-disk transcript location for the FS default store. */\nexport interface FsSessionStoreOptions {\n /** Transcript base dir (`~/.theokit` default, `~/.claude` for CLI interop) — already `~`-expanded. */\n baseDir: string;\n /** The workspace cwd whose encoded form is the transcript project dir. */\n cwd: string;\n}\n\n/**\n * Reference-counted leases, shared per path.\n *\n * `acquireSessionWriter` is STRICT on purpose: two concurrent acquisitions of the same path, and\n * exactly one wins — \"a lease that let both through would be decorative\" (the M81 test says exactly\n * that, and it is right). That is the primitive's contract, and it does not change.\n *\n * But within ONE process it is normal to have more than one store over the same session: the golden\n * compaction tests and the concurrent-send tests do exactly that, and they record real runtime\n * behavior. Applying the raw primitive there would turn a legitimate pattern into a\n * `SessionBusyError`.\n *\n * The reconciliation belongs here, in the primitive's consumer: the process takes ONE lease per path\n * and counts how many stores use it. The last to release actually frees it. Cross-process stays\n * strict — which is the problem M81 states (\"`exec resume --last` can write into the TUI's live\n * session\").\n */\nconst sharedLeases = new Map<string, { lease: SessionWriterLease; refs: number }>();\n\nasync function acquireShared(path: string): Promise<SessionWriterLease> {\n const existing = sharedLeases.get(path);\n if (existing !== undefined) {\n existing.refs++;\n return createProxy(path);\n }\n const lease = await acquireSessionWriter(path);\n sharedLeases.set(path, { lease, refs: 1 });\n return createProxy(path);\n}\n\n/** A handle that decrements the count; the last to release frees the real lease. */\nfunction createProxy(path: string): SessionWriterLease {\n let released = false;\n return {\n sessionPath: path,\n // The proxy forwards the renewal to the ONE real lease this path shares. Renewing through any\n // holder is correct and is the point: the record must say \"someone in this process is still\n // writing\", and the refcount already guarantees they are all the same owner.\n renew: (): void => {\n if (released) return;\n sharedLeases.get(path)?.lease.renew();\n },\n release: async (): Promise<void> => {\n if (released) return;\n released = true;\n const entry = sharedLeases.get(path);\n if (entry === undefined) return;\n entry.refs--;\n if (entry.refs > 0) return;\n sharedLeases.delete(path);\n await entry.lease.release();\n },\n };\n}\n\n/**\n * The default `SessionStore` — reads/append-writes the native `.jsonl` transcript.\n */\nexport class FsSessionStore implements SessionStore {\n readonly #baseDir: string;\n readonly #cwd: string;\n /** One lease per `agentId` — a store serves more than one session over the process lifetime. */\n readonly #leases = new Map<string, SessionWriterLease>();\n /** Memoized per agent so read, append and lease can never disagree about which file is the session. */\n readonly #paths = new Map<string, string>();\n\n constructor(options: FsSessionStoreOptions) {\n this.#baseDir = options.baseDir;\n this.#cwd = options.cwd;\n }\n\n /**\n * The file that IS this agent's session.\n *\n * #400 made transcript filenames UUIDs so `claude --continue` can find them. A transcript written\n * before that lives under the old name, and switching to the new one would not lose the file but\n * would abandon it: the agent would start a second, empty history beside its real one. So an\n * existing legacy file wins, and only a session with no file yet gets the new name.\n *\n * Resolved ONCE per agent. Re-deciding per call would let `acquire` lock one path while\n * `appendRecords` wrote another — the lease would be guarding a file nobody was writing.\n */\n #pathFor(agentId: string): string {\n const memoized = this.#paths.get(agentId);\n if (memoized !== undefined) return memoized;\n const canonical = transcriptPath(this.#baseDir, this.#cwd, agentId);\n const legacy = legacyTranscriptPath(this.#baseDir, this.#cwd, agentId);\n const resolved = legacy !== canonical && existsSync(legacy) ? legacy : canonical;\n this.#paths.set(agentId, resolved);\n return resolved;\n }\n\n async readRecords(agentId: string): Promise<SessionRecord[]> {\n return readTranscript(this.#pathFor(agentId));\n }\n\n async appendRecords(agentId: string, records: readonly SessionRecord[]): Promise<void> {\n // Empty delta → nothing to persist (avoids an unnecessary lock + rewrite).\n if (records.length === 0) return;\n const path = this.#pathFor(agentId);\n // mkdir BEFORE the lock: withFileLock's companion `<path>.lock` needs the parent dir.\n await mkdir(dirname(path), { recursive: true });\n\n await withFileLock(path, async () => {\n // M93 — appends the DELTA instead of rewriting the whole file.\n //\n // Before: `readTranscript` + `writeTranscript` of everything, per turn. O(n) of I/O **and** of\n // parsing on every turn, O(n^2) per session — the consumer note in\n // `agents/lib/session/backtrack.ts` records 1.4 MB / 3000 lines over 200 turns.\n //\n // Correct because the format **is already append-only**: the `parentUuid` DAG does not depend\n // on line order, and every record carries its own parent. `appendJsonl` **already existed in\n // the package** and had a single caller (`eval/runner.ts`) — the primitive was there, it was\n // the store that ignored it (rung 4).\n //\n // `withFileLock` stays — but the earlier claim that \"it is what serializes two concurrent\n // `appendRecords`\" was too strong, and M93's adversarial review measured it: removing it fails\n // no test. The reason is the paragraph above — the `parentUuid` DAG does not depend on line\n // order, so two interleaved batches reconstruct identically. The work the lock was doing\n // (protecting a read-modify-write) disappeared along with the rewrite.\n //\n // What it still covers is the TOCTOU window in `needsLineBreakBefore` (read the last byte,\n // then write): without it, two processes can both conclude \"a \\n is missing\" and produce a\n // blank line — which the reader discards, i.e. benign. It stays as a **declared, not\n // mechanized** defense (the discipline in `error-handling.md` § 4: enumerate the residue\n // rather than let a missing test pass for coverage).\n //\n // `writeTranscript` still exists for **compaction**, the one operation that legitimately\n // rewrites the file.\n for (const record of records) appendJsonl(path, record);\n });\n }\n\n /**\n * Takes the session's writer lease. Throws `SessionBusyError` when another process holds it.\n *\n * **Explicit, and NOT inside `appendRecords`** — M95's adversarial review measured why that\n * matters: the `SessionStore` contract states that \"an `appendRecords` rejection is logged to\n * stderr, NOT thrown to the caller (best-effort write)\". Acquiring there made the\n * `SessionBusyError` get **swallowed**, and the result was worse than the original problem:\n * instead of two writers interleaving lines, the loser **lost the turn silently** — nothing on\n * disk, a stderr warning invisible under the TUI, and no way for the caller to react.\n *\n * At init the error reaches someone who can act: `exec` forks to a new id, which is exactly what\n * the error message itself prescribes. It is the difference between failing where a decision is\n * possible and failing where only loss is.\n */\n async acquire(agentId: string): Promise<void> {\n if (this.#leases.has(agentId)) return;\n const path = this.#pathFor(agentId);\n await mkdir(dirname(path), { recursive: true });\n this.#leases.set(agentId, await acquireShared(path));\n }\n\n /**\n * Releases ONE agent's lease.\n *\n * It exists because `dispose()` releases **every** lease the store holds, and a store injected by\n * the consumer may serve several agents: an init that fails for agent B must not free agent A's\n * lease, which is still live and writing.\n */\n async release(agentId: string): Promise<void> {\n const lease = this.#leases.get(agentId);\n if (lease === undefined) return;\n this.#leases.delete(agentId);\n await lease.release();\n }\n\n /**\n * Releases every lease this store holds.\n *\n * Without it the `.writer.lock` outlives the process and the next open would have to wait out the\n * heartbeat window — recoverable, but 30 s of waiting after a CLEAN shutdown would be an avoidable\n * defect. Idempotent: calling it twice is not an error.\n */\n async dispose(): Promise<void> {\n const leases = [...this.#leases.values()];\n this.#leases.clear();\n for (const lease of leases) await lease.release();\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/internal/persistence/fs-session-store.ts"],"names":[],"mappings":"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","file":"chunk-RGVMJU57.js","sourcesContent":["/**\n * SE41 — `FsSessionStore`, the DEFAULT reference implementation of the pluggable\n * {@link SessionStore} seam. It reads and append-writes the native Claude-shaped\n * `.jsonl` transcript at `<baseDir>/projects/<encoded-cwd>/<agentId>.jsonl` — the\n * exact on-disk format SE40 introduced (the file the Claude Code CLI can\n * `--continue`). Omitting `local.sessionStore` resolves to this store, so the\n * default persistence path is byte-identical to SE40 behavior.\n *\n * `readRecords` is `readTranscript(transcriptPath(...))` (a missing session →\n * `[]`, not an error — a fresh agent has no history). `appendRecords` is a TRUE\n * append: it reads the prior records, concatenates the new-turn delta, and\n * rewrites the whole line set atomically under the SE40 cross-process file lock\n * (`writeTranscript` never shrinks — the native format is an append-only\n * `parentUuid` DAG). The parent dir is created BEFORE acquiring the lock because\n * the lock's companion `<path>.lock` file needs an existing parent dir (the SE40\n * `mkdir(dirname)`-before-lock fix).\n *\n * @internal\n */\n\nimport { existsSync } from \"node:fs\";\nimport { mkdir } from \"node:fs/promises\";\nimport { dirname } from \"node:path\";\nimport type { SessionStore } from \"../../types/session-store.js\";\nimport { withFileLock } from \"./file-lock.js\";\nimport { appendJsonl } from \"./jsonl.js\";\nimport {\n legacyTranscriptPath,\n readTranscript,\n type SessionRecord,\n transcriptPath,\n} from \"./session-transcript.js\";\nimport { acquireSessionWriter, type SessionWriterLease } from \"./session-writer.js\";\n\n/** Options identifying the on-disk transcript location for the FS default store. */\nexport interface FsSessionStoreOptions {\n /** Transcript base dir (`~/.theokit` default, `~/.claude` for CLI interop) — already `~`-expanded. */\n baseDir: string;\n /** The workspace cwd whose encoded form is the transcript project dir. */\n cwd: string;\n}\n\n/**\n * Reference-counted leases, shared per path.\n *\n * `acquireSessionWriter` is STRICT on purpose: two concurrent acquisitions of the same path, and\n * exactly one wins — \"a lease that let both through would be decorative\" (the M81 test says exactly\n * that, and it is right). That is the primitive's contract, and it does not change.\n *\n * But within ONE process it is normal to have more than one store over the same session: the golden\n * compaction tests and the concurrent-send tests do exactly that, and they record real runtime\n * behavior. Applying the raw primitive there would turn a legitimate pattern into a\n * `SessionBusyError`.\n *\n * The reconciliation belongs here, in the primitive's consumer: the process takes ONE lease per path\n * and counts how many stores use it. The last to release actually frees it. Cross-process stays\n * strict — which is the problem M81 states (\"`exec resume --last` can write into the TUI's live\n * session\").\n */\nconst sharedLeases = new Map<string, { lease: SessionWriterLease; refs: number }>();\n\nasync function acquireShared(path: string): Promise<SessionWriterLease> {\n const existing = sharedLeases.get(path);\n if (existing !== undefined) {\n existing.refs++;\n return createProxy(path);\n }\n const lease = await acquireSessionWriter(path);\n sharedLeases.set(path, { lease, refs: 1 });\n return createProxy(path);\n}\n\n/** A handle that decrements the count; the last to release frees the real lease. */\nfunction createProxy(path: string): SessionWriterLease {\n let released = false;\n return {\n sessionPath: path,\n // The proxy forwards the renewal to the ONE real lease this path shares. Renewing through any\n // holder is correct and is the point: the record must say \"someone in this process is still\n // writing\", and the refcount already guarantees they are all the same owner.\n renew: (): void => {\n if (released) return;\n sharedLeases.get(path)?.lease.renew();\n },\n release: async (): Promise<void> => {\n if (released) return;\n released = true;\n const entry = sharedLeases.get(path);\n if (entry === undefined) return;\n entry.refs--;\n if (entry.refs > 0) return;\n sharedLeases.delete(path);\n await entry.lease.release();\n },\n };\n}\n\n/**\n * The default `SessionStore` — reads/append-writes the native `.jsonl` transcript.\n */\nexport class FsSessionStore implements SessionStore {\n readonly #baseDir: string;\n readonly #cwd: string;\n /** One lease per `agentId` — a store serves more than one session over the process lifetime. */\n readonly #leases = new Map<string, SessionWriterLease>();\n /** Memoized per agent so read, append and lease can never disagree about which file is the session. */\n readonly #paths = new Map<string, string>();\n\n constructor(options: FsSessionStoreOptions) {\n this.#baseDir = options.baseDir;\n this.#cwd = options.cwd;\n }\n\n /**\n * The file that IS this agent's session.\n *\n * #400 made transcript filenames UUIDs so `claude --continue` can find them. A transcript written\n * before that lives under the old name, and switching to the new one would not lose the file but\n * would abandon it: the agent would start a second, empty history beside its real one. So an\n * existing legacy file wins, and only a session with no file yet gets the new name.\n *\n * Resolved ONCE per agent. Re-deciding per call would let `acquire` lock one path while\n * `appendRecords` wrote another — the lease would be guarding a file nobody was writing.\n */\n #pathFor(agentId: string): string {\n const memoized = this.#paths.get(agentId);\n if (memoized !== undefined) return memoized;\n const canonical = transcriptPath(this.#baseDir, this.#cwd, agentId);\n const legacy = legacyTranscriptPath(this.#baseDir, this.#cwd, agentId);\n const resolved = legacy !== canonical && existsSync(legacy) ? legacy : canonical;\n this.#paths.set(agentId, resolved);\n return resolved;\n }\n\n async readRecords(agentId: string): Promise<SessionRecord[]> {\n return readTranscript(this.#pathFor(agentId));\n }\n\n async appendRecords(agentId: string, records: readonly SessionRecord[]): Promise<void> {\n // Empty delta → nothing to persist (avoids an unnecessary lock + rewrite).\n if (records.length === 0) return;\n const path = this.#pathFor(agentId);\n // mkdir BEFORE the lock: withFileLock's companion `<path>.lock` needs the parent dir.\n await mkdir(dirname(path), { recursive: true });\n\n await withFileLock(path, async () => {\n // M93 — appends the DELTA instead of rewriting the whole file.\n //\n // Before: `readTranscript` + `writeTranscript` of everything, per turn. O(n) of I/O **and** of\n // parsing on every turn, O(n^2) per session — the consumer note in\n // `agents/lib/session/backtrack.ts` records 1.4 MB / 3000 lines over 200 turns.\n //\n // Correct because the format **is already append-only**: the `parentUuid` DAG does not depend\n // on line order, and every record carries its own parent. `appendJsonl` **already existed in\n // the package** and had a single caller (`eval/runner.ts`) — the primitive was there, it was\n // the store that ignored it (rung 4).\n //\n // `withFileLock` stays — but the earlier claim that \"it is what serializes two concurrent\n // `appendRecords`\" was too strong, and M93's adversarial review measured it: removing it fails\n // no test. The reason is the paragraph above — the `parentUuid` DAG does not depend on line\n // order, so two interleaved batches reconstruct identically. The work the lock was doing\n // (protecting a read-modify-write) disappeared along with the rewrite.\n //\n // What it still covers is the TOCTOU window in `needsLineBreakBefore` (read the last byte,\n // then write): without it, two processes can both conclude \"a \\n is missing\" and produce a\n // blank line — which the reader discards, i.e. benign. It stays as a **declared, not\n // mechanized** defense (the discipline in `error-handling.md` § 4: enumerate the residue\n // rather than let a missing test pass for coverage).\n //\n // `writeTranscript` still exists for **compaction**, the one operation that legitimately\n // rewrites the file.\n for (const record of records) appendJsonl(path, record);\n });\n }\n\n /**\n * Takes the session's writer lease. Throws `SessionBusyError` when another process holds it.\n *\n * **Explicit, and NOT inside `appendRecords`** — M95's adversarial review measured why that\n * matters: the `SessionStore` contract states that \"an `appendRecords` rejection is logged to\n * stderr, NOT thrown to the caller (best-effort write)\". Acquiring there made the\n * `SessionBusyError` get **swallowed**, and the result was worse than the original problem:\n * instead of two writers interleaving lines, the loser **lost the turn silently** — nothing on\n * disk, a stderr warning invisible under the TUI, and no way for the caller to react.\n *\n * At init the error reaches someone who can act: `exec` forks to a new id, which is exactly what\n * the error message itself prescribes. It is the difference between failing where a decision is\n * possible and failing where only loss is.\n */\n async acquire(agentId: string): Promise<void> {\n if (this.#leases.has(agentId)) return;\n const path = this.#pathFor(agentId);\n await mkdir(dirname(path), { recursive: true });\n this.#leases.set(agentId, await acquireShared(path));\n }\n\n /**\n * Releases ONE agent's lease.\n *\n * It exists because `dispose()` releases **every** lease the store holds, and a store injected by\n * the consumer may serve several agents: an init that fails for agent B must not free agent A's\n * lease, which is still live and writing.\n */\n async release(agentId: string): Promise<void> {\n const lease = this.#leases.get(agentId);\n if (lease === undefined) return;\n this.#leases.delete(agentId);\n await lease.release();\n }\n\n /**\n * Releases every lease this store holds.\n *\n * Without it the `.writer.lock` outlives the process and the next open would have to wait out the\n * heartbeat window — recoverable, but 30 s of waiting after a CLEAN shutdown would be an avoidable\n * defect. Idempotent: calling it twice is not an error.\n */\n async dispose(): Promise<void> {\n const leases = [...this.#leases.values()];\n this.#leases.clear();\n for (const lease of leases) await lease.release();\n }\n}\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkP7QYG4RZ_cjs = require('./chunk-P7QYG4RZ.cjs');
|
|
4
4
|
|
|
5
5
|
// src/internal/llm/model-capabilities.ts
|
|
6
6
|
var CONSERVATIVE_DEFAULTS = {
|
|
@@ -24,11 +24,11 @@ function capsFromCatalog(m) {
|
|
|
24
24
|
}
|
|
25
25
|
function resolveModelCapabilities(modelId) {
|
|
26
26
|
const bare = stripVariantSuffix(stripRoutingPrefix(modelId));
|
|
27
|
-
const fromIndex =
|
|
27
|
+
const fromIndex = chunkP7QYG4RZ_cjs.getCatalogModelInfo(bare);
|
|
28
28
|
if (fromIndex !== void 0) return capsFromCatalog(fromIndex);
|
|
29
29
|
const withVendor = inferVendorPrefix(bare);
|
|
30
30
|
if (withVendor !== bare) {
|
|
31
|
-
const vendored =
|
|
31
|
+
const vendored = chunkP7QYG4RZ_cjs.getCatalogModelInfo(withVendor);
|
|
32
32
|
if (vendored !== void 0) return capsFromCatalog(vendored);
|
|
33
33
|
}
|
|
34
34
|
return CONSERVATIVE_DEFAULTS;
|
|
@@ -57,5 +57,5 @@ function inferVendorPrefix(bare) {
|
|
|
57
57
|
|
|
58
58
|
exports.isAnthropicFamilyModel = isAnthropicFamilyModel;
|
|
59
59
|
exports.resolveModelCapabilities = resolveModelCapabilities;
|
|
60
|
-
//# sourceMappingURL=chunk-
|
|
61
|
-
//# sourceMappingURL=chunk-
|
|
60
|
+
//# sourceMappingURL=chunk-RTDVSHJR.cjs.map
|
|
61
|
+
//# sourceMappingURL=chunk-RTDVSHJR.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/internal/llm/model-capabilities.ts"],"names":["getCatalogModelInfo"],"mappings":";;;;;AAgCA,IAAM,qBAAA,GAA2C;AAAA,EAC/C,cAAA,EAAgB,KAAA;AAAA,EAChB,wBAAA,EAA0B,KAAA;AAAA,EAC1B,eAAA,EAAiB,KAAA;AAAA,EACjB,oBAAA,EAAsB,KAAA;AAAA,EACtB,gBAAA,EAAkB,IAAA;AAAA,EAClB,eAAA,EAAiB;AACnB,CAAA;AAGA,IAAM,gBAAA,GAAmB,CAAC,aAAA,EAAe,SAAA,EAAW,UAAU,CAAA;AAM9D,SAAS,gBAAgB,CAAA,EAAoC;AAC3D,EAAA,OAAO;AAAA,IACL,cAAA,EAAgB,EAAE,UAAA,EAAY,KAAA,EAAO,SAAS,OAAO,CAAA,IAAK,EAAE,UAAA,IAAc,KAAA;AAAA,IAC1E,wBAAA,EAA0B,EAAE,iBAAA,IAAqB,KAAA;AAAA,IACjD,eAAA,EAAiB,EAAE,SAAA,IAAa,KAAA;AAAA,IAChC,oBAAA,EAAuB,EAAkC,aAAA,IAAiB,KAAA;AAAA,IAC1E,gBAAA,EAAkB,CAAA,CAAE,KAAA,EAAO,OAAA,IAAW,qBAAA,CAAsB,gBAAA;AAAA,IAC5D,eAAA,EAAiB,CAAA,CAAE,KAAA,EAAO,MAAA,IAAU,qBAAA,CAAsB;AAAA,GAC5D;AACF;AAWO,SAAS,yBAAyB,OAAA,EAAoC;AAC3E,EAAA,MAAM,IAAA,GAAO,kBAAA,CAAmB,kBAAA,CAAmB,OAAO,CAAC,CAAA;AAG3D,EAAA,MAAM,SAAA,GAAYA,sCAAoB,IAAI,CAAA;AAC1C,EAAA,IAAI,SAAA,KAAc,MAAA,EAAW,OAAO,eAAA,CAAgB,SAAS,CAAA;AAG7D,EAAA,MAAM,UAAA,GAAa,kBAAkB,IAAI,CAAA;AACzC,EAAA,IAAI,eAAe,IAAA,EAAM;AACvB,IAAA,MAAM,QAAA,GAAWA,sCAAoB,UAAU,CAAA;AAC/C,IAAA,IAAI,QAAA,KAAa,MAAA,EAAW,OAAO,eAAA,CAAgB,QAAQ,CAAA;AAAA,EAC7D;AACA,EAAA,OAAO,qBAAA;AACT;AAUO,SAAS,uBAAuB,OAAA,EAAsC;AAC3E,EAAA,IAAI,OAAA,KAAY,QAAW,OAAO,KAAA;AAClC,EAAA,OAAO,uBAAA,CAAwB,IAAA,CAAK,kBAAA,CAAmB,OAAO,CAAC,CAAA;AACjE;AAEA,SAAS,mBAAmB,OAAA,EAAyB;AACnD,EAAA,KAAA,MAAW,UAAU,gBAAA,EAAkB;AACrC,IAAA,IAAI,OAAA,CAAQ,WAAW,MAAM,CAAA,SAAU,OAAA,CAAQ,KAAA,CAAM,OAAO,MAAM,CAAA;AAAA,EACpE;AACA,EAAA,OAAO,OAAA;AACT;AAOA,SAAS,mBAAmB,OAAA,EAAyB;AACnD,EAAA,MAAM,CAAA,GAAI,OAAA,CAAQ,OAAA,CAAQ,GAAG,CAAA;AAC7B,EAAA,OAAO,KAAK,CAAA,GAAI,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA,GAAI,OAAA;AACxC;AAGA,SAAS,kBAAkB,IAAA,EAAsB;AAC/C,EAAA,IAAI,KAAK,UAAA,CAAW,QAAQ,CAAA,EAAG,OAAO,aAAa,IAAI,CAAA,CAAA;AACvD,EAAA,IAAI,IAAA,CAAK,UAAA,CAAW,MAAM,CAAA,IAAK,IAAA,CAAK,WAAW,IAAI,CAAA,IAAK,IAAA,CAAK,UAAA,CAAW,IAAI,CAAA;AAC1E,IAAA,OAAO,UAAU,IAAI,CAAA,CAAA;AACvB,EAAA,IAAI,KAAK,UAAA,CAAW,QAAQ,CAAA,EAAG,OAAO,UAAU,IAAI,CAAA,CAAA;AACpD,EAAA,OAAO,IAAA;AACT","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/internal/llm/model-capabilities.ts"],"names":["getCatalogModelInfo"],"mappings":";;;;;AAgCA,IAAM,qBAAA,GAA2C;AAAA,EAC/C,cAAA,EAAgB,KAAA;AAAA,EAChB,wBAAA,EAA0B,KAAA;AAAA,EAC1B,eAAA,EAAiB,KAAA;AAAA,EACjB,oBAAA,EAAsB,KAAA;AAAA,EACtB,gBAAA,EAAkB,IAAA;AAAA,EAClB,eAAA,EAAiB;AACnB,CAAA;AAGA,IAAM,gBAAA,GAAmB,CAAC,aAAA,EAAe,SAAA,EAAW,UAAU,CAAA;AAM9D,SAAS,gBAAgB,CAAA,EAAoC;AAC3D,EAAA,OAAO;AAAA,IACL,cAAA,EAAgB,EAAE,UAAA,EAAY,KAAA,EAAO,SAAS,OAAO,CAAA,IAAK,EAAE,UAAA,IAAc,KAAA;AAAA,IAC1E,wBAAA,EAA0B,EAAE,iBAAA,IAAqB,KAAA;AAAA,IACjD,eAAA,EAAiB,EAAE,SAAA,IAAa,KAAA;AAAA,IAChC,oBAAA,EAAuB,EAAkC,aAAA,IAAiB,KAAA;AAAA,IAC1E,gBAAA,EAAkB,CAAA,CAAE,KAAA,EAAO,OAAA,IAAW,qBAAA,CAAsB,gBAAA;AAAA,IAC5D,eAAA,EAAiB,CAAA,CAAE,KAAA,EAAO,MAAA,IAAU,qBAAA,CAAsB;AAAA,GAC5D;AACF;AAWO,SAAS,yBAAyB,OAAA,EAAoC;AAC3E,EAAA,MAAM,IAAA,GAAO,kBAAA,CAAmB,kBAAA,CAAmB,OAAO,CAAC,CAAA;AAG3D,EAAA,MAAM,SAAA,GAAYA,sCAAoB,IAAI,CAAA;AAC1C,EAAA,IAAI,SAAA,KAAc,MAAA,EAAW,OAAO,eAAA,CAAgB,SAAS,CAAA;AAG7D,EAAA,MAAM,UAAA,GAAa,kBAAkB,IAAI,CAAA;AACzC,EAAA,IAAI,eAAe,IAAA,EAAM;AACvB,IAAA,MAAM,QAAA,GAAWA,sCAAoB,UAAU,CAAA;AAC/C,IAAA,IAAI,QAAA,KAAa,MAAA,EAAW,OAAO,eAAA,CAAgB,QAAQ,CAAA;AAAA,EAC7D;AACA,EAAA,OAAO,qBAAA;AACT;AAUO,SAAS,uBAAuB,OAAA,EAAsC;AAC3E,EAAA,IAAI,OAAA,KAAY,QAAW,OAAO,KAAA;AAClC,EAAA,OAAO,uBAAA,CAAwB,IAAA,CAAK,kBAAA,CAAmB,OAAO,CAAC,CAAA;AACjE;AAEA,SAAS,mBAAmB,OAAA,EAAyB;AACnD,EAAA,KAAA,MAAW,UAAU,gBAAA,EAAkB;AACrC,IAAA,IAAI,OAAA,CAAQ,WAAW,MAAM,CAAA,SAAU,OAAA,CAAQ,KAAA,CAAM,OAAO,MAAM,CAAA;AAAA,EACpE;AACA,EAAA,OAAO,OAAA;AACT;AAOA,SAAS,mBAAmB,OAAA,EAAyB;AACnD,EAAA,MAAM,CAAA,GAAI,OAAA,CAAQ,OAAA,CAAQ,GAAG,CAAA;AAC7B,EAAA,OAAO,KAAK,CAAA,GAAI,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA,GAAI,OAAA;AACxC;AAGA,SAAS,kBAAkB,IAAA,EAAsB;AAC/C,EAAA,IAAI,KAAK,UAAA,CAAW,QAAQ,CAAA,EAAG,OAAO,aAAa,IAAI,CAAA,CAAA;AACvD,EAAA,IAAI,IAAA,CAAK,UAAA,CAAW,MAAM,CAAA,IAAK,IAAA,CAAK,WAAW,IAAI,CAAA,IAAK,IAAA,CAAK,UAAA,CAAW,IAAI,CAAA;AAC1E,IAAA,OAAO,UAAU,IAAI,CAAA,CAAA;AACvB,EAAA,IAAI,KAAK,UAAA,CAAW,QAAQ,CAAA,EAAG,OAAO,UAAU,IAAI,CAAA,CAAA;AACpD,EAAA,OAAO,IAAA;AACT","file":"chunk-RTDVSHJR.cjs","sourcesContent":["/**\n * T3.10c — Model capability registry (DR3 #17).\n *\n * Typed per-model flags that let the SDK gate features at the boundary\n * (before hitting the provider) instead of letting opaque 400s surface.\n *\n * Resolution algorithm:\n * 1. Strip routing prefixes (openrouter/, vertex/, bedrock/) AND the\n * OpenRouter `:variant` suffix (:free/:nitro/…) to find the bare vendor id.\n * 2. Exact match in the `EXACT` catalog → return entry.\n * 3. Vendor inference (e.g., `claude-*` → `anthropic/claude-*`) → return entry.\n * 4. No match → conservative defaults (all false, minimum tokens).\n *\n * Module is internal, but `ModelCapabilities` + `resolveModelCapabilities` are\n * re-exported publicly via the `@theokit/sdk/models` subpath (see their @public tags).\n */\n\n/**\n * Per-model capability shape. Consumers use this to gate features at\n * the SDK boundary (before request construction, not after 400).\n *\n * @public\n */\nexport interface ModelCapabilities {\n supportsVision: boolean;\n supportsStructuredOutput: boolean;\n supportsToolUse: boolean;\n supportsCacheControl: boolean;\n maxContextTokens: number;\n maxOutputTokens: number;\n}\n\nconst CONSERVATIVE_DEFAULTS: ModelCapabilities = {\n supportsVision: false,\n supportsStructuredOutput: false,\n supportsToolUse: false,\n supportsCacheControl: false,\n maxContextTokens: 4096,\n maxOutputTokens: 4096,\n};\n\n/** Routing prefixes to strip to find the underlying vendor model. */\nconst ROUTING_PREFIXES = [\"openrouter/\", \"vertex/\", \"bedrock/\"] as const;\n\nimport { getCatalogModelInfo } from \"../providers/catalog-loader.js\";\nimport type { CatalogModel } from \"../providers/catalog-schema.js\";\n\n/** Map a catalog model block (models.dev shape) to the SDK's ModelCapabilities (M44 — catalog-backed). */\nfunction capsFromCatalog(m: CatalogModel): ModelCapabilities {\n return {\n supportsVision: m.modalities?.input?.includes(\"image\") ?? m.attachment ?? false,\n supportsStructuredOutput: m.structured_output ?? false,\n supportsToolUse: m.tool_call ?? false,\n supportsCacheControl: (m as { cache_control?: boolean }).cache_control ?? false,\n maxContextTokens: m.limit?.context ?? CONSERVATIVE_DEFAULTS.maxContextTokens,\n maxOutputTokens: m.limit?.output ?? CONSERVATIVE_DEFAULTS.maxOutputTokens,\n };\n}\n\n/**\n * Resolve per-model capability flags (vision/structured-output/tool-use/cache +\n * `maxContextTokens`/`maxOutputTokens`) for a model id. Pure, sync, offline (a\n * static catalog — no network). Strips routing prefixes (`openrouter/`/`vertex/`/\n * `bedrock/`) and OpenRouter `:variant` suffixes before lookup; unknown models get\n * conservative defaults. Public via `@theokit/sdk/models`.\n *\n * @public\n */\nexport function resolveModelCapabilities(modelId: string): ModelCapabilities {\n const bare = stripVariantSuffix(stripRoutingPrefix(modelId));\n // M44 — the catalog model-info index replaced the hand-curated EXACT map (single source of truth; the\n // vendored provider-catalog.json carries the migrated data — parity-tested against the old map snapshot).\n const fromIndex = getCatalogModelInfo(bare);\n if (fromIndex !== undefined) return capsFromCatalog(fromIndex);\n // Routing-prefixed models (vertex/claude-3-5-sonnet) strip to bare\n // model name without vendor. Try inferring the vendor from the name.\n const withVendor = inferVendorPrefix(bare);\n if (withVendor !== bare) {\n const vendored = getCatalogModelInfo(withVendor);\n if (vendored !== undefined) return capsFromCatalog(vendored);\n }\n return CONSERVATIVE_DEFAULTS;\n}\n\n/**\n * B-412 / B-475 — whether a model id names an Anthropic model the loop sends cacheable system\n * blocks to. Decided by the id, not by the catalog's `supportsCacheControl`, which is false for the\n * Anthropic ids measured on OpenRouter. After the same routing prefixes the capability lookup\n * strips (`openrouter/`, `vertex/`, `bedrock/`), the id must start with `anthropic/` or `claude`,\n * so Vertex Anthropic ids match and Bedrock ids (`anthropic.claude-…`) do not.\n * @internal\n */\nexport function isAnthropicFamilyModel(modelId: string | undefined): boolean {\n if (modelId === undefined) return false;\n return /^(anthropic\\/|claude)/.test(stripRoutingPrefix(modelId));\n}\n\nfunction stripRoutingPrefix(modelId: string): string {\n for (const prefix of ROUTING_PREFIXES) {\n if (modelId.startsWith(prefix)) return modelId.slice(prefix.length);\n }\n return modelId;\n}\n\n/**\n * Strip an OpenRouter variant suffix (`:free`/`:nitro`/`:floor`/`:beta`/…) so the\n * catalog lookup hits the underlying model. Model slugs contain no `:` except the\n * variant separator, so cutting at the first `:` is safe.\n */\nfunction stripVariantSuffix(modelId: string): string {\n const i = modelId.indexOf(\":\");\n return i >= 0 ? modelId.slice(0, i) : modelId;\n}\n\n/** Infer vendor prefix from bare model name for routing-prefixed lookups. */\nfunction inferVendorPrefix(bare: string): string {\n if (bare.startsWith(\"claude\")) return `anthropic/${bare}`;\n if (bare.startsWith(\"gpt-\") || bare.startsWith(\"o1\") || bare.startsWith(\"o3\"))\n return `openai/${bare}`;\n if (bare.startsWith(\"gemini\")) return `google/${bare}`;\n return bare;\n}\n"]}
|
|
@@ -12,7 +12,15 @@ var REGISTRY = globalSingleton(
|
|
|
12
12
|
() => /* @__PURE__ */ new Map()
|
|
13
13
|
);
|
|
14
14
|
var ALIASES = globalSingleton("theokit-sdk.providers.aliases", () => /* @__PURE__ */ new Map());
|
|
15
|
-
function
|
|
15
|
+
function key(name) {
|
|
16
|
+
return name.toLowerCase();
|
|
17
|
+
}
|
|
18
|
+
function registerProvider(input) {
|
|
19
|
+
const profile = {
|
|
20
|
+
...input,
|
|
21
|
+
name: key(input.name),
|
|
22
|
+
...input.aliases === void 0 ? {} : { aliases: input.aliases.map(key) }
|
|
23
|
+
};
|
|
16
24
|
if (REGISTRY.has(profile.name)) {
|
|
17
25
|
diag(`[theokit-sdk] Provider "${profile.name}" overridden by user plugin.
|
|
18
26
|
`);
|
|
@@ -28,8 +36,8 @@ function registerProvider(profile) {
|
|
|
28
36
|
}
|
|
29
37
|
}
|
|
30
38
|
function getProviderProfile(name) {
|
|
31
|
-
const
|
|
32
|
-
return REGISTRY.get(
|
|
39
|
+
const lower = key(name);
|
|
40
|
+
return REGISTRY.get(ALIASES.get(lower) ?? lower);
|
|
33
41
|
}
|
|
34
42
|
function listProviders() {
|
|
35
43
|
return Array.from(REGISTRY.values());
|
|
@@ -1414,18 +1422,18 @@ var patchedModelKeys = globalSingleton(
|
|
|
1414
1422
|
var indexState = globalSingleton("theokit-sdk.providers.model-info-loaded", () => ({
|
|
1415
1423
|
loaded: false
|
|
1416
1424
|
}));
|
|
1417
|
-
function getCatalogModelInfo(
|
|
1425
|
+
function getCatalogModelInfo(key2) {
|
|
1418
1426
|
ensureModelIndexLoaded();
|
|
1419
|
-
return modelInfoIndex.get(
|
|
1427
|
+
return modelInfoIndex.get(key2);
|
|
1420
1428
|
}
|
|
1421
|
-
function isPatchedModelKey(
|
|
1422
|
-
return patchedModelKeys.has(
|
|
1429
|
+
function isPatchedModelKey(key2) {
|
|
1430
|
+
return patchedModelKeys.has(key2);
|
|
1423
1431
|
}
|
|
1424
|
-
function patchModelInfo(
|
|
1432
|
+
function patchModelInfo(key2, model) {
|
|
1425
1433
|
ensureModelIndexLoaded();
|
|
1426
|
-
const existing = modelInfoIndex.get(
|
|
1427
|
-
modelInfoIndex.set(
|
|
1428
|
-
patchedModelKeys.add(
|
|
1434
|
+
const existing = modelInfoIndex.get(key2);
|
|
1435
|
+
modelInfoIndex.set(key2, existing === void 0 ? model : { ...existing, ...model });
|
|
1436
|
+
patchedModelKeys.add(key2);
|
|
1429
1437
|
}
|
|
1430
1438
|
function ensureModelIndexLoaded() {
|
|
1431
1439
|
if (indexState.loaded) return;
|
|
@@ -1455,8 +1463,8 @@ function indexEntryModels(entry) {
|
|
|
1455
1463
|
}
|
|
1456
1464
|
modelInfoIndex.set(`${entry.id}/${modelId}`, parsed.data);
|
|
1457
1465
|
for (const alias of entry.aliases ?? []) {
|
|
1458
|
-
const
|
|
1459
|
-
if (!modelInfoIndex.has(
|
|
1466
|
+
const key2 = `${alias}/${modelId}`;
|
|
1467
|
+
if (!modelInfoIndex.has(key2)) modelInfoIndex.set(key2, parsed.data);
|
|
1460
1468
|
}
|
|
1461
1469
|
}
|
|
1462
1470
|
}
|
|
@@ -1870,5 +1878,5 @@ function registerBuiltins() {
|
|
|
1870
1878
|
}
|
|
1871
1879
|
|
|
1872
1880
|
export { catalogModelSchema, getCatalogCapabilities, getCatalogModelInfo, getProviderProfile, inferModelDialect, inferRegionFromModelId, isPatchedModelKey, listProviders, loadProviderCatalog, patchModelInfo, registerBuiltins, registerProvider, resolveBedrockBaseUrl, resolveVertexBaseUrl, stripBedrockPrefix, stripVertexPrefix };
|
|
1873
|
-
//# sourceMappingURL=chunk-
|
|
1874
|
-
//# sourceMappingURL=chunk-
|
|
1881
|
+
//# sourceMappingURL=chunk-RZL2W4C3.js.map
|
|
1882
|
+
//# sourceMappingURL=chunk-RZL2W4C3.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/internal/providers/registry.ts","../src/internal/providers/catalog-schema.ts","../src/internal/providers/provider-catalog.json","../src/internal/providers/catalog-loader.ts","../src/internal/providers/builtin/anthropic.ts","../src/internal/providers/builtin/bedrock.ts","../src/internal/providers/builtin/openai-compatible.ts","../src/internal/providers/builtin/cerebras.ts","../src/internal/providers/builtin/cohere.ts","../src/internal/providers/builtin/deepinfra.ts","../src/internal/providers/builtin/gemini.ts","../src/internal/providers/builtin/google.ts","../src/internal/providers/builtin/groq.ts","../src/internal/providers/builtin/llamacpp.ts","../src/internal/providers/builtin/lmstudio.ts","../src/internal/providers/builtin/mistral.ts","../src/internal/providers/builtin/ollama.ts","../src/internal/providers/builtin/openai.ts","../src/internal/providers/builtin/openai-chatgpt.ts","../src/internal/providers/builtin/openrouter.ts","../src/internal/providers/builtin/perplexity.ts","../src/internal/providers/builtin/together.ts","../src/internal/providers/builtin/vertex.ts","../src/internal/providers/builtin/xai.ts","../src/internal/providers/builtin/index.ts"],"names":["key"],"mappings":";;;;;;;;;AAqBA,IAAM,QAAA,GAAW,eAAA;AAAA,EACf,gCAAA;AAAA,EACA,0BAAU,GAAA;AACZ,CAAA;AACA,IAAM,UAAU,eAAA,CAAgB,+BAAA,EAAiC,sBAAM,IAAI,KAAqB,CAAA;AAGhG,SAAS,IAAI,IAAA,EAAsB;AACjC,EAAA,OAAO,KAAK,WAAA,EAAY;AAC1B;AAMO,SAAS,iBAAiB,KAAA,EAA8B;AAC7D,EAAA,MAAM,OAAA,GAA2B;AAAA,IAC/B,GAAG,KAAA;AAAA,IACH,IAAA,EAAM,GAAA,CAAI,KAAA,CAAM,IAAI,CAAA;AAAA,IACpB,GAAI,KAAA,CAAM,OAAA,KAAY,MAAA,GAAY,EAAC,GAAI,EAAE,OAAA,EAAS,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,GAAG,CAAA;AAAE,GAC3E;AACA,EAAA,IAAI,QAAA,CAAS,GAAA,CAAI,OAAA,CAAQ,IAAI,CAAA,EAAG;AAC9B,IAAA,IAAA,CAAK,CAAA,wBAAA,EAA2B,QAAQ,IAAI,CAAA;AAAA,CAAgC,CAAA;AAAA,EAC9E;AACA,EAAA,QAAA,CAAS,GAAA,CAAI,OAAA,CAAQ,IAAA,EAAM,OAAO,CAAA;AAClC,EAAA,KAAA,MAAW,KAAA,IAAS,OAAA,CAAQ,OAAA,IAAW,EAAC,EAAG;AAEzC,IAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,GAAA,CAAI,KAAK,CAAA;AAClC,IAAA,IAAI,QAAA,KAAa,MAAA,IAAa,QAAA,KAAa,OAAA,CAAQ,IAAA,EAAM;AACvD,MAAA,IAAA,CAAK,wBAAwB,KAAK,CAAA,kBAAA,EAAqB,QAAQ,CAAA,QAAA,EAAW,QAAQ,IAAI,CAAA;AAAA,CAAM,CAAA;AAAA,IAC9F;AACA,IAAA,OAAA,CAAQ,GAAA,CAAI,KAAA,EAAO,OAAA,CAAQ,IAAI,CAAA;AAAA,EACjC;AACF;AAEO,SAAS,mBAAmB,IAAA,EAA2C;AAC5E,EAAA,MAAM,KAAA,GAAQ,IAAI,IAAI,CAAA;AACtB,EAAA,OAAO,SAAS,GAAA,CAAI,OAAA,CAAQ,GAAA,CAAI,KAAK,KAAK,KAAK,CAAA;AACjD;AAEO,SAAS,aAAA,GAAmC;AACjD,EAAA,OAAO,KAAA,CAAM,IAAA,CAAK,QAAA,CAAS,MAAA,EAAQ,CAAA;AACrC;AC3CO,IAAM,aAAa,CAAC,MAAA,EAAQ,OAAA,EAAS,OAAA,EAAS,SAAS,KAAK,CAAA;AAanE,IAAM,UAAA,GAAa,EAChB,MAAA,CAAO;AAAA;AAAA,EAEN,KAAA,EAAO,CAAA,CAAE,MAAA,EAAO,CAAE,WAAA,EAAY;AAAA,EAC9B,MAAA,EAAQ,CAAA,CAAE,MAAA,EAAO,CAAE,WAAA,EAAY;AAAA,EAC/B,YAAY,CAAA,CAAE,MAAA,EAAO,CAAE,WAAA,GAAc,QAAA,EAAS;AAAA,EAC9C,aAAa,CAAA,CAAE,MAAA,EAAO,CAAE,WAAA,GAAc,QAAA;AACxC,CAAC,EACA,KAAA,EAAM;AAET,IAAM,WAAA,GAAc,EACjB,MAAA,CAAO;AAAA,EACN,OAAA,EAAS,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC7B,OAAO,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACtC,QAAQ,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA;AAChC,CAAC,EACA,KAAA,EAAM;AAET,IAAM,gBAAA,GAAmB,EACtB,MAAA,CAAO;AAAA,EACN,KAAA,EAAO,EAAE,KAAA,CAAM,CAAA,CAAE,KAAK,UAAU,CAAC,EAAE,QAAA,EAAS;AAAA,EAC5C,MAAA,EAAQ,EAAE,KAAA,CAAM,CAAA,CAAE,KAAK,UAAU,CAAC,EAAE,QAAA;AACtC,CAAC,EACA,KAAA,EAAM;AAEF,IAAM,kBAAA,GAAqB,EAC/B,MAAA,CAAO;AAAA,EACN,IAAA,EAAM,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC1B,YAAA,EAAc,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAClC,UAAA,EAAY,CAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EACjC,SAAA,EAAW,CAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EAChC,WAAA,EAAa,CAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EAClC,SAAA,EAAW,CAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA;AAAA,EAEhC,iBAAA,EAAmB,CAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA;AAAA,EAExC,aAAA,EAAe,CAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,EAAS;AAAA,EACpC,IAAA,EAAM,WAAW,QAAA,EAAS;AAAA,EAC1B,KAAA,EAAO,YAAY,QAAA,EAAS;AAAA,EAC5B,UAAA,EAAY,iBAAiB,QAAA,EAAS;AAAA,EACtC,MAAA,EAAQ,EAAE,IAAA,CAAK,CAAC,SAAS,MAAA,EAAQ,YAAY,CAAC,CAAA,CAAE,QAAA;AAClD,CAAC,EACA,KAAA;AAkDI,IAAM,kBAAA,GAAqB,EAC/B,MAAA,CAAO;AAAA,EACN,EAAA,EAAI,CAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EACpB,WAAA,EAAa,CAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EAC7B,OAAA,EAAS,EAAE,IAAA,CAAK;AAAA,IACd,kBAAA;AAAA,IACA,oBAAA;AAAA,IACA,eAAA;AAAA,IACA,SAAA;AAAA,IACA;AAAA,GACD,CAAA;AAAA,EACD,QAAA,EAAU,EAAE,IAAA,CAAK;AAAA,IACf,SAAA;AAAA,IACA,mBAAA;AAAA,IACA,gBAAA;AAAA,IACA,SAAA;AAAA,IACA,YAAA;AAAA,IACA,WAAA;AAAA,IACA;AAAA,GACD,CAAA;AAAA,EACD,OAAA,EAAS,EAAE,MAAA,EAAO;AAAA,EAClB,OAAA,EAAS,CAAA,CAAE,KAAA,CAAM,CAAA,CAAE,QAAQ,CAAA;AAAA,EAC3B,cAAA,EAAgB,CAAA,CAAE,KAAA,CAAM,CAAA,CAAE,QAAQ,CAAA;AAAA,EAClC,YAAA,EAAc,EAAE,MAAA,CAAO;AAAA,IACrB,eAAA,EAAiB,EAAE,OAAA,EAAQ;AAAA,IAC3B,cAAA,EAAgB,EAAE,OAAA,EAAQ;AAAA,IAC1B,wBAAA,EAA0B,EAAE,OAAA,EAAQ;AAAA,IACpC,iBAAA,EAAmB,EAAE,OAAA,EAAQ;AAAA,IAC7B,oBAAA,EAAsB,EAAE,OAAA,EAAQ;AAAA,IAChC,gBAAA,EAAkB,EAAE,MAAA,EAAO,CAAE,KAAI,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,IACvD,eAAA,EAAiB,EAAE,MAAA,EAAO,CAAE,KAAI,CAAE,QAAA,GAAW,QAAA;AAAS,GACvD,CAAA;AAAA,EACD,SAAS,CAAA,CAAE,KAAA,CAAM,EAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA,EACtC,SAAA,EAAW,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC/B,QAAA,EAAU,CAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC9B,YAAA,EAAc,CAAA,CAAE,MAAA,CAAO,CAAA,CAAE,MAAA,IAAU,CAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,QAAA,EAAS;AAAA,EACxD,MAAA,EAAQ,EAAE,MAAA,CAAO,CAAA,CAAE,QAAO,EAAG,kBAAkB,EAAE,QAAA;AACnD,CAAC,EACA,KAAA,EAAM;;;ACnKT,IAAA,wBAAA,GAAA;AAAA,EACE;AAAA,IACE,EAAA,EAAM,QAAA;AAAA,IACN,WAAA,EAAe,QAAA;AAAA,IACf,OAAA,EAAW,kBAAA;AAAA,IACX,QAAA,EAAY,SAAA;AAAA,IACZ,OAAA,EAAW,2BAAA;AAAA,IACX,OAAA,EAAW,CAAC,gBAAgB,CAAA;AAAA,IAC5B,cAAA,EAAkB,CAAC,aAAA,EAAe,QAAQ,CAAA;AAAA,IAC1C,YAAA,EAAgB;AAAA,MACd,eAAA,EAAmB,IAAA;AAAA,MACnB,cAAA,EAAkB,IAAA;AAAA,MAClB,wBAAA,EAA4B,IAAA;AAAA,MAC5B,iBAAA,EAAqB,IAAA;AAAA,MACrB,oBAAA,EAAwB;AAAA,KAC1B;AAAA,IACA,OAAA,EAAW,CAAC,QAAA,EAAU,gBAAgB,CAAA;AAAA,IACtC,MAAA,EAAU;AAAA,MACR,aAAA,EAAe;AAAA,QACb,IAAA,EAAQ,aAAA;AAAA,QACR,YAAA,EAAgB,YAAA;AAAA,QAChB,UAAA,EAAc,IAAA;AAAA,QACd,SAAA,EAAa,KAAA;AAAA,QACb,WAAA,EAAe,IAAA;AAAA,QACf,SAAA,EAAa,IAAA;AAAA,QACb,iBAAA,EAAqB,IAAA;AAAA,QACrB,IAAA,EAAQ;AAAA,UACN,KAAA,EAAS,IAAA;AAAA,UACT,MAAA,EAAU,GAAA;AAAA,UACV,UAAA,EAAc;AAAA,SAChB;AAAA,QACA,KAAA,EAAS;AAAA,UACP,OAAA,EAAW,KAAA;AAAA,UACX,MAAA,EAAU;AAAA,SACZ;AAAA,QACA,UAAA,EAAc;AAAA,UACZ,KAAA,EAAS,CAAC,MAAA,EAAQ,OAAO,CAAA;AAAA,UACzB,MAAA,EAAU,CAAC,MAAM;AAAA,SACnB;AAAA,QACA,aAAA,EAAiB;AAAA,OACnB;AAAA,MACA,QAAA,EAAU;AAAA,QACR,IAAA,EAAQ,QAAA;AAAA,QACR,YAAA,EAAgB,YAAA;AAAA,QAChB,UAAA,EAAc,IAAA;AAAA,QACd,SAAA,EAAa,KAAA;AAAA,QACb,WAAA,EAAe,IAAA;AAAA,QACf,SAAA,EAAa,IAAA;AAAA,QACb,iBAAA,EAAqB,IAAA;AAAA,QACrB,IAAA,EAAQ;AAAA,UACN,KAAA,EAAS,GAAA;AAAA,UACT,MAAA,EAAU,EAAA;AAAA,UACV,UAAA,EAAc;AAAA,SAChB;AAAA,QACA,KAAA,EAAS;AAAA,UACP,OAAA,EAAW,KAAA;AAAA,UACX,MAAA,EAAU;AAAA,SACZ;AAAA,QACA,UAAA,EAAc;AAAA,UACZ,KAAA,EAAS,CAAC,MAAA,EAAQ,OAAO,CAAA;AAAA,UACzB,MAAA,EAAU,CAAC,MAAM;AAAA,SACnB;AAAA,QACA,aAAA,EAAiB;AAAA,OACnB;AAAA,MACA,aAAA,EAAe;AAAA,QACb,IAAA,EAAQ,aAAA;AAAA,QACR,YAAA,EAAgB,YAAA;AAAA,QAChB,UAAA,EAAc,IAAA;AAAA,QACd,SAAA,EAAa,KAAA;AAAA,QACb,WAAA,EAAe,IAAA;AAAA,QACf,SAAA,EAAa,IAAA;AAAA,QACb,iBAAA,EAAqB,KAAA;AAAA,QACrB,IAAA,EAAQ;AAAA,UACN,KAAA,EAAS,EAAA;AAAA,UACT,MAAA,EAAU;AAAA,SACZ;AAAA,QACA,KAAA,EAAS;AAAA,UACP,OAAA,EAAW,KAAA;AAAA,UACX,MAAA,EAAU;AAAA,SACZ;AAAA,QACA,UAAA,EAAc;AAAA,UACZ,KAAA,EAAS,CAAC,MAAA,EAAQ,OAAO,CAAA;AAAA,UACzB,MAAA,EAAU,CAAC,MAAM;AAAA,SACnB;AAAA,QACA,aAAA,EAAiB;AAAA,OACnB;AAAA,MACA,EAAA,EAAM;AAAA,QACJ,IAAA,EAAQ,IAAA;AAAA,QACR,YAAA,EAAgB,YAAA;AAAA,QAChB,UAAA,EAAc,IAAA;AAAA,QACd,SAAA,EAAa,IAAA;AAAA,QACb,WAAA,EAAe,KAAA;AAAA,QACf,SAAA,EAAa,IAAA;AAAA,QACb,iBAAA,EAAqB,IAAA;AAAA,QACrB,IAAA,EAAQ;AAAA,UACN,KAAA,EAAS,EAAA;AAAA,UACT,MAAA,EAAU,EAAA;AAAA,UACV,UAAA,EAAc;AAAA,SAChB;AAAA,QACA,KAAA,EAAS;AAAA,UACP,OAAA,EAAW,GAAA;AAAA,UACX,MAAA,EAAU;AAAA,SACZ;AAAA,QACA,UAAA,EAAc;AAAA,UACZ,KAAA,EAAS,CAAC,MAAM,CAAA;AAAA,UAChB,MAAA,EAAU,CAAC,MAAM;AAAA,SACnB;AAAA,QACA,aAAA,EAAiB;AAAA,OACnB;AAAA,MACA,EAAA,EAAM;AAAA,QACJ,IAAA,EAAQ,IAAA;AAAA,QACR,YAAA,EAAgB,YAAA;AAAA,QAChB,UAAA,EAAc,IAAA;AAAA,QACd,SAAA,EAAa,IAAA;AAAA,QACb,WAAA,EAAe,KAAA;AAAA,QACf,SAAA,EAAa,IAAA;AAAA,QACb,iBAAA,EAAqB,IAAA;AAAA,QACrB,IAAA,EAAQ;AAAA,UACN,KAAA,EAAS,CAAA;AAAA,UACT,MAAA,EAAU,CAAA;AAAA,UACV,UAAA,EAAc;AAAA,SAChB;AAAA,QACA,KAAA,EAAS;AAAA,UACP,OAAA,EAAW,GAAA;AAAA,UACX,MAAA,EAAU;AAAA,SACZ;AAAA,QACA,UAAA,EAAc;AAAA,UACZ,KAAA,EAAS,CAAC,MAAM,CAAA;AAAA,UAChB,MAAA,EAAU,CAAC,MAAM;AAAA,SACnB;AAAA,QACA,aAAA,EAAiB;AAAA,OACnB;AAAA,MACA,SAAA,EAAW;AAAA,QACT,IAAA,EAAQ,SAAA;AAAA,QACR,YAAA,EAAgB,YAAA;AAAA,QAChB,UAAA,EAAc,IAAA;AAAA,QACd,SAAA,EAAa,KAAA;AAAA,QACb,WAAA,EAAe,IAAA;AAAA,QACf,SAAA,EAAa,IAAA;AAAA,QACb,iBAAA,EAAqB,IAAA;AAAA,QACrB,IAAA,EAAQ;AAAA,UACN,KAAA,EAAS,CAAA;AAAA,UACT,MAAA,EAAU,CAAA;AAAA,UACV,UAAA,EAAc;AAAA,SAChB;AAAA,QACA,KAAA,EAAS;AAAA,UACP,OAAA,EAAW,OAAA;AAAA,UACX,MAAA,EAAU;AAAA,SACZ;AAAA,QACA,UAAA,EAAc;AAAA,UACZ,KAAA,EAAS,CAAC,MAAA,EAAQ,OAAO,CAAA;AAAA,UACzB,MAAA,EAAU,CAAC,MAAM;AAAA,SACnB;AAAA,QACA,aAAA,EAAiB;AAAA,OACnB;AAAA,MACA,SAAA,EAAW;AAAA,QACT,KAAA,EAAS;AAAA,UACP,OAAA,EAAW,GAAA;AAAA,UACX,MAAA,EAAU;AAAA;AACZ,OACF;AAAA,MACA,cAAA,EAAgB;AAAA,QACd,KAAA,EAAS;AAAA,UACP,OAAA,EAAW,GAAA;AAAA,UACX,MAAA,EAAU;AAAA;AACZ,OACF;AAAA,MACA,SAAA,EAAW;AAAA,QACT,KAAA,EAAS;AAAA,UACP,OAAA,EAAW,GAAA;AAAA,UACX,MAAA,EAAU;AAAA;AACZ,OACF;AAAA,MACA,SAAA,EAAW;AAAA,QACT,KAAA,EAAS;AAAA,UACP,OAAA,EAAW,GAAA;AAAA,UACX,MAAA,EAAU;AAAA;AACZ;AACF;AACF,GACF;AAAA,EACA;AAAA,IACE,EAAA,EAAM,WAAA;AAAA,IACN,WAAA,EAAe,WAAA;AAAA,IACf,OAAA,EAAW,oBAAA;AAAA,IACX,QAAA,EAAY,SAAA;AAAA,IACZ,OAAA,EAAW,8BAAA;AAAA,IACX,OAAA,EAAW,CAAC,mBAAmB,CAAA;AAAA,IAC/B,cAAA,EAAkB,CAAC,0BAAA,EAA4B,yBAAyB,CAAA;AAAA,IACxE,YAAA,EAAgB;AAAA,MACd,eAAA,EAAmB,IAAA;AAAA,MACnB,cAAA,EAAkB,IAAA;AAAA,MAClB,wBAAA,EAA4B,KAAA;AAAA,MAC5B,iBAAA,EAAqB,IAAA;AAAA,MACrB,oBAAA,EAAwB;AAAA,KAC1B;AAAA,IACA,OAAA,EAAW,CAAC,WAAW,CAAA;AAAA,IACvB,MAAA,EAAU;AAAA,MACR,yBAAA,EAA2B;AAAA,QACzB,SAAA,EAAa,IAAA;AAAA,QACb,iBAAA,EAAqB,KAAA;AAAA,QACrB,aAAA,EAAiB,IAAA;AAAA,QACjB,UAAA,EAAc;AAAA,UACZ,KAAA,EAAS,CAAC,MAAM;AAAA,SAClB;AAAA,QACA,KAAA,EAAS;AAAA,UACP,OAAA,EAAW,GAAA;AAAA,UACX,MAAA,EAAU;AAAA;AACZ,OACF;AAAA,MACA,iBAAA,EAAmB;AAAA,QACjB,IAAA,EAAQ,iBAAA;AAAA,QACR,YAAA,EAAgB,YAAA;AAAA,QAChB,UAAA,EAAc,IAAA;AAAA,QACd,SAAA,EAAa,IAAA;AAAA,QACb,WAAA,EAAe,KAAA;AAAA,QACf,SAAA,EAAa,IAAA;AAAA,QACb,iBAAA,EAAqB,IAAA;AAAA,QACrB,IAAA,EAAQ;AAAA,UACN,KAAA,EAAS,CAAA;AAAA,UACT,MAAA,EAAU,EAAA;AAAA,UACV,UAAA,EAAc,GAAA;AAAA,UACd,WAAA,EAAe;AAAA,SACjB;AAAA,QACA,KAAA,EAAS;AAAA,UACP,OAAA,EAAW,GAAA;AAAA,UACX,MAAA,EAAU;AAAA,SACZ;AAAA,QACA,UAAA,EAAc;AAAA,UACZ,KAAA,EAAS,CAAC,MAAA,EAAQ,OAAA,EAAS,KAAK,CAAA;AAAA,UAChC,MAAA,EAAU,CAAC,MAAM;AAAA,SACnB;AAAA,QACA,aAAA,EAAiB;AAAA,OACnB;AAAA,MACA,mBAAA,EAAqB;AAAA,QACnB,IAAA,EAAQ,mBAAA;AAAA,QACR,YAAA,EAAgB,YAAA;AAAA,QAChB,UAAA,EAAc,IAAA;AAAA,QACd,SAAA,EAAa,IAAA;AAAA,QACb,WAAA,EAAe,IAAA;AAAA,QACf,SAAA,EAAa,IAAA;AAAA,QACb,iBAAA,EAAqB,IAAA;AAAA,QACrB,IAAA,EAAQ;AAAA,UACN,KAAA,EAAS,CAAA;AAAA,UACT,MAAA,EAAU,EAAA;AAAA,UACV,UAAA,EAAc,GAAA;AAAA,UACd,WAAA,EAAe;AAAA,SACjB;AAAA,QACA,KAAA,EAAS;AAAA,UACP,OAAA,EAAW,GAAA;AAAA,UACX,MAAA,EAAU;AAAA,SACZ;AAAA,QACA,UAAA,EAAc;AAAA,UACZ,KAAA,EAAS,CAAC,MAAA,EAAQ,OAAA,EAAS,KAAK,CAAA;AAAA,UAChC,MAAA,EAAU,CAAC,MAAM;AAAA,SACnB;AAAA,QACA,aAAA,EAAiB;AAAA,OACnB;AAAA,MACA,2BAAA,EAA6B;AAAA,QAC3B,IAAA,EAAQ,kBAAA;AAAA,QACR,YAAA,EAAgB,YAAA;AAAA,QAChB,UAAA,EAAc,IAAA;AAAA,QACd,SAAA,EAAa,IAAA;AAAA,QACb,WAAA,EAAe,IAAA;AAAA,QACf,SAAA,EAAa,IAAA;AAAA,QACb,iBAAA,EAAqB,IAAA;AAAA,QACrB,IAAA,EAAQ;AAAA,UACN,KAAA,EAAS,CAAA;AAAA,UACT,MAAA,EAAU,CAAA;AAAA,UACV,UAAA,EAAc,GAAA;AAAA,UACd,WAAA,EAAe;AAAA,SACjB;AAAA,QACA,KAAA,EAAS;AAAA,UACP,OAAA,EAAW,GAAA;AAAA,UACX,MAAA,EAAU;AAAA,SACZ;AAAA,QACA,UAAA,EAAc;AAAA,UACZ,KAAA,EAAS,CAAC,MAAA,EAAQ,OAAA,EAAS,KAAK,CAAA;AAAA,UAChC,MAAA,EAAU,CAAC,MAAM;AAAA,SACnB;AAAA,QACA,aAAA,EAAiB;AAAA,OACnB;AAAA,MACA,eAAA,EAAiB;AAAA,QACf,SAAA,EAAa,IAAA;AAAA,QACb,iBAAA,EAAqB,KAAA;AAAA,QACrB,aAAA,EAAiB,IAAA;AAAA,QACjB,UAAA,EAAc;AAAA,UACZ,KAAA,EAAS,CAAC,MAAA,EAAQ,OAAO;AAAA,SAC3B;AAAA,QACA,KAAA,EAAS;AAAA,UACP,OAAA,EAAW,GAAA;AAAA,UACX,MAAA,EAAU;AAAA;AACZ,OACF;AAAA,MACA,iBAAA,EAAmB;AAAA,QACjB,SAAA,EAAa,IAAA;AAAA,QACb,iBAAA,EAAqB,KAAA;AAAA,QACrB,aAAA,EAAiB,IAAA;AAAA,QACjB,UAAA,EAAc;AAAA,UACZ,KAAA,EAAS,CAAC,MAAA,EAAQ,OAAO;AAAA,SAC3B;AAAA,QACA,KAAA,EAAS;AAAA,UACP,OAAA,EAAW,GAAA;AAAA,UACX,MAAA,EAAU;AAAA;AACZ,OACF;AAAA,MACA,mBAAA,EAAqB;AAAA,QACnB,SAAA,EAAa,IAAA;AAAA,QACb,iBAAA,EAAqB,KAAA;AAAA,QACrB,aAAA,EAAiB,IAAA;AAAA,QACjB,UAAA,EAAc;AAAA,UACZ,KAAA,EAAS,CAAC,MAAA,EAAQ,OAAO;AAAA,SAC3B;AAAA,QACA,KAAA,EAAS;AAAA,UACP,OAAA,EAAW,GAAA;AAAA,UACX,MAAA,EAAU;AAAA;AACZ,OACF;AAAA,MACA,0BAAA,EAA4B;AAAA,QAC1B,SAAA,EAAa,IAAA;AAAA,QACb,iBAAA,EAAqB,KAAA;AAAA,QACrB,aAAA,EAAiB,IAAA;AAAA,QACjB,UAAA,EAAc;AAAA,UACZ,KAAA,EAAS,CAAC,MAAA,EAAQ,OAAO;AAAA,SAC3B;AAAA,QACA,KAAA,EAAS;AAAA,UACP,OAAA,EAAW,GAAA;AAAA,UACX,MAAA,EAAU;AAAA;AACZ,OACF;AAAA,MACA,gBAAA,EAAkB;AAAA,QAChB,SAAA,EAAa,IAAA;AAAA,QACb,iBAAA,EAAqB,KAAA;AAAA,QACrB,aAAA,EAAiB,IAAA;AAAA,QACjB,UAAA,EAAc;AAAA,UACZ,KAAA,EAAS,CAAC,MAAA,EAAQ,OAAO;AAAA,SAC3B;AAAA,QACA,KAAA,EAAS;AAAA,UACP,OAAA,EAAW,GAAA;AAAA,UACX,MAAA,EAAU;AAAA;AACZ,OACF;AAAA,MACA,eAAA,EAAiB;AAAA,QACf,SAAA,EAAa,IAAA;AAAA,QACb,iBAAA,EAAqB,KAAA;AAAA,QACrB,aAAA,EAAiB,IAAA;AAAA,QACjB,UAAA,EAAc;AAAA,UACZ,KAAA,EAAS,CAAC,MAAA,EAAQ,OAAO;AAAA,SAC3B;AAAA,QACA,KAAA,EAAS;AAAA,UACP,OAAA,EAAW,GAAA;AAAA,UACX,MAAA,EAAU;AAAA;AACZ,OACF;AAAA,MACA,iBAAA,EAAmB;AAAA,QACjB,SAAA,EAAa,IAAA;AAAA,QACb,iBAAA,EAAqB,KAAA;AAAA,QACrB,aAAA,EAAiB,IAAA;AAAA,QACjB,UAAA,EAAc;AAAA,UACZ,KAAA,EAAS,CAAC,MAAA,EAAQ,OAAO;AAAA,SAC3B;AAAA,QACA,KAAA,EAAS;AAAA,UACP,OAAA,EAAW,GAAA;AAAA,UACX,MAAA,EAAU;AAAA;AACZ,OACF;AAAA,MACA,mBAAA,EAAqB;AAAA,QACnB,SAAA,EAAa,IAAA;AAAA,QACb,iBAAA,EAAqB,KAAA;AAAA,QACrB,aAAA,EAAiB,IAAA;AAAA,QACjB,UAAA,EAAc;AAAA,UACZ,KAAA,EAAS,CAAC,MAAA,EAAQ,OAAO;AAAA,SAC3B;AAAA,QACA,KAAA,EAAS;AAAA,UACP,OAAA,EAAW,GAAA;AAAA,UACX,MAAA,EAAU;AAAA;AACZ,OACF;AAAA,MACA,mBAAA,EAAqB;AAAA,QACnB,SAAA,EAAa,IAAA;AAAA,QACb,iBAAA,EAAqB,KAAA;AAAA,QACrB,aAAA,EAAiB,IAAA;AAAA,QACjB,UAAA,EAAc;AAAA,UACZ,KAAA,EAAS,CAAC,MAAA,EAAQ,OAAO;AAAA,SAC3B;AAAA,QACA,KAAA,EAAS;AAAA,UACP,OAAA,EAAW,GAAA;AAAA,UACX,MAAA,EAAU;AAAA;AACZ;AACF;AACF,GACF;AAAA,EACA;AAAA,IACE,EAAA,EAAM,YAAA;AAAA,IACN,WAAA,EAAe,YAAA;AAAA,IACf,OAAA,EAAW,kBAAA;AAAA,IACX,QAAA,EAAY,SAAA;AAAA,IACZ,OAAA,EAAW,8BAAA;AAAA,IACX,OAAA,EAAW,CAAC,oBAAoB,CAAA;AAAA,IAChC,cAAA,EAAkB,CAAC,oBAAoB,CAAA;AAAA,IACvC,YAAA,EAAgB;AAAA,MACd,eAAA,EAAmB,IAAA;AAAA,MACnB,cAAA,EAAkB,IAAA;AAAA,MAClB,wBAAA,EAA4B,IAAA;AAAA,MAC5B,iBAAA,EAAqB,IAAA;AAAA,MACrB,oBAAA,EAAwB;AAAA,KAC1B;AAAA,IACA,OAAA,EAAW,CAAC,YAAY;AAAA,GAC1B;AAAA,EACA;AAAA,IACE,EAAA,EAAM,MAAA;AAAA,IACN,WAAA,EAAe,MAAA;AAAA,IACf,OAAA,EAAW,kBAAA;AAAA,IACX,QAAA,EAAY,SAAA;AAAA,IACZ,OAAA,EAAW,gCAAA;AAAA,IACX,OAAA,EAAW,CAAC,cAAc,CAAA;AAAA,IAC1B,cAAA,EAAkB,CAAC,yBAAyB,CAAA;AAAA,IAC5C,YAAA,EAAgB;AAAA,MACd,eAAA,EAAmB,IAAA;AAAA,MACnB,cAAA,EAAkB,IAAA;AAAA,MAClB,wBAAA,EAA4B,IAAA;AAAA,MAC5B,iBAAA,EAAqB,IAAA;AAAA,MACrB,oBAAA,EAAwB;AAAA,KAC1B;AAAA,IACA,MAAA,EAAU;AAAA,MACR,yBAAA,EAA2B;AAAA,QACzB,IAAA,EAAQ,eAAA;AAAA,QACR,YAAA,EAAgB,YAAA;AAAA,QAChB,UAAA,EAAc,KAAA;AAAA,QACd,SAAA,EAAa,KAAA;AAAA,QACb,WAAA,EAAe,IAAA;AAAA,QACf,SAAA,EAAa,IAAA;AAAA,QACb,IAAA,EAAQ;AAAA,UACN,KAAA,EAAS,IAAA;AAAA,UACT,MAAA,EAAU;AAAA,SACZ;AAAA,QACA,KAAA,EAAS;AAAA,UACP,OAAA,EAAW,MAAA;AAAA,UACX,MAAA,EAAU;AAAA,SACZ;AAAA,QACA,UAAA,EAAc;AAAA,UACZ,KAAA,EAAS,CAAC,MAAM,CAAA;AAAA,UAChB,MAAA,EAAU,CAAC,MAAM;AAAA;AACnB;AACF;AACF,GACF;AAAA,EACA;AAAA,IACE,EAAA,EAAM,SAAA;AAAA,IACN,WAAA,EAAe,YAAA;AAAA,IACf,OAAA,EAAW,kBAAA;AAAA,IACX,QAAA,EAAY,SAAA;AAAA,IACZ,OAAA,EAAW,2BAAA;AAAA,IACX,OAAA,EAAW,CAAC,iBAAiB,CAAA;AAAA,IAC7B,cAAA,EAAkB,CAAC,sBAAsB,CAAA;AAAA,IACzC,YAAA,EAAgB;AAAA,MACd,eAAA,EAAmB,IAAA;AAAA,MACnB,cAAA,EAAkB,IAAA;AAAA,MAClB,wBAAA,EAA4B,IAAA;AAAA,MAC5B,iBAAA,EAAqB,IAAA;AAAA,MACrB,oBAAA,EAAwB;AAAA,KAC1B;AAAA,IACA,MAAA,EAAU;AAAA,MACR,sBAAA,EAAwB;AAAA,QACtB,IAAA,EAAQ,wBAAA;AAAA,QACR,YAAA,EAAgB,YAAA;AAAA,QAChB,UAAA,EAAc,IAAA;AAAA,QACd,SAAA,EAAa,KAAA;AAAA,QACb,WAAA,EAAe,IAAA;AAAA,QACf,SAAA,EAAa,IAAA;AAAA,QACb,IAAA,EAAQ;AAAA,UACN,KAAA,EAAS,GAAA;AAAA,UACT,MAAA,EAAU;AAAA,SACZ;AAAA,QACA,KAAA,EAAS;AAAA,UACP,OAAA,EAAW,MAAA;AAAA,UACX,MAAA,EAAU;AAAA,SACZ;AAAA,QACA,UAAA,EAAc;AAAA,UACZ,KAAA,EAAS,CAAC,MAAA,EAAQ,OAAO,CAAA;AAAA,UACzB,MAAA,EAAU,CAAC,MAAM;AAAA;AACnB;AACF;AACF,GACF;AAAA,EACA;AAAA,IACE,EAAA,EAAM,UAAA;AAAA,IACN,WAAA,EAAe,UAAA;AAAA,IACf,OAAA,EAAW,kBAAA;AAAA,IACX,QAAA,EAAY,SAAA;AAAA,IACZ,OAAA,EAAW,6BAAA;AAAA,IACX,OAAA,EAAW,CAAC,kBAAkB,CAAA;AAAA,IAC9B,cAAA,EAAkB,CAAC,eAAe,CAAA;AAAA,IAClC,YAAA,EAAgB;AAAA,MACd,eAAA,EAAmB,IAAA;AAAA,MACnB,cAAA,EAAkB,KAAA;AAAA,MAClB,wBAAA,EAA4B,IAAA;AAAA,MAC5B,iBAAA,EAAqB,IAAA;AAAA,MACrB,oBAAA,EAAwB;AAAA,KAC1B;AAAA,IACA,MAAA,EAAU;AAAA,MACR,eAAA,EAAiB;AAAA,QACf,IAAA,EAAQ,eAAA;AAAA,QACR,YAAA,EAAgB,YAAA;AAAA,QAChB,UAAA,EAAc,IAAA;AAAA,QACd,SAAA,EAAa,KAAA;AAAA,QACb,WAAA,EAAe,IAAA;AAAA,QACf,SAAA,EAAa,IAAA;AAAA,QACb,IAAA,EAAQ;AAAA,UACN,KAAA,EAAS,IAAA;AAAA,UACT,MAAA,EAAU,IAAA;AAAA,UACV,UAAA,EAAc;AAAA,SAChB;AAAA,QACA,KAAA,EAAS;AAAA,UACP,OAAA,EAAW,GAAA;AAAA,UACX,MAAA,EAAU;AAAA,SACZ;AAAA,QACA,UAAA,EAAc;AAAA,UACZ,KAAA,EAAS,CAAC,MAAM,CAAA;AAAA,UAChB,MAAA,EAAU,CAAC,MAAM;AAAA;AACnB,OACF;AAAA,MACA,mBAAA,EAAqB;AAAA,QACnB,IAAA,EAAQ,mBAAA;AAAA,QACR,YAAA,EAAgB,YAAA;AAAA,QAChB,UAAA,EAAc,KAAA;AAAA,QACd,SAAA,EAAa,IAAA;AAAA,QACb,WAAA,EAAe,IAAA;AAAA,QACf,SAAA,EAAa,IAAA;AAAA,QACb,iBAAA,EAAqB,KAAA;AAAA,QACrB,IAAA,EAAQ;AAAA,UACN,KAAA,EAAS,IAAA;AAAA,UACT,MAAA,EAAU,IAAA;AAAA,UACV,UAAA,EAAc;AAAA,SAChB;AAAA,QACA,KAAA,EAAS;AAAA,UACP,OAAA,EAAW,OAAA;AAAA,UACX,MAAA,EAAU;AAAA,SACZ;AAAA,QACA,UAAA,EAAc;AAAA,UACZ,KAAA,EAAS,CAAC,MAAM,CAAA;AAAA,UAChB,MAAA,EAAU,CAAC,MAAM;AAAA,SACnB;AAAA,QACA,aAAA,EAAiB;AAAA,OACnB;AAAA,MACA,eAAA,EAAiB;AAAA,QACf,SAAA,EAAa,IAAA;AAAA,QACb,iBAAA,EAAqB,KAAA;AAAA,QACrB,aAAA,EAAiB,KAAA;AAAA,QACjB,UAAA,EAAc;AAAA,UACZ,KAAA,EAAS,CAAC,MAAM;AAAA,SAClB;AAAA,QACA,KAAA,EAAS;AAAA,UACP,OAAA,EAAW,MAAA;AAAA,UACX,MAAA,EAAU;AAAA;AACZ;AACF;AACF,GACF;AAAA,EACA;AAAA,IACE,EAAA,EAAM,UAAA;AAAA,IACN,WAAA,EAAe,aAAA;AAAA,IACf,OAAA,EAAW,kBAAA;AAAA,IACX,QAAA,EAAY,SAAA;AAAA,IACZ,OAAA,EAAW,6BAAA;AAAA,IACX,OAAA,EAAW,CAAC,kBAAkB,CAAA;AAAA,IAC9B,cAAA,EAAkB,CAAC,8CAA8C,CAAA;AAAA,IACjE,YAAA,EAAgB;AAAA,MACd,eAAA,EAAmB,IAAA;AAAA,MACnB,cAAA,EAAkB,IAAA;AAAA,MAClB,wBAAA,EAA4B,IAAA;AAAA,MAC5B,iBAAA,EAAqB,IAAA;AAAA,MACrB,oBAAA,EAAwB;AAAA;AAC1B,GACF;AAAA,EACA;AAAA,IACE,EAAA,EAAM,WAAA;AAAA,IACN,WAAA,EAAe,cAAA;AAAA,IACf,OAAA,EAAW,kBAAA;AAAA,IACX,QAAA,EAAY,SAAA;AAAA,IACZ,OAAA,EAAW,uCAAA;AAAA,IACX,OAAA,EAAW,CAAC,mBAAmB,CAAA;AAAA,IAC/B,cAAA,EAAkB,CAAC,mDAAmD,CAAA;AAAA,IACtE,YAAA,EAAgB;AAAA,MACd,eAAA,EAAmB,IAAA;AAAA,MACnB,cAAA,EAAkB,IAAA;AAAA,MAClB,wBAAA,EAA4B,IAAA;AAAA,MAC5B,iBAAA,EAAqB,IAAA;AAAA,MACrB,oBAAA,EAAwB;AAAA;AAC1B,GACF;AAAA,EACA;AAAA,IACE,EAAA,EAAM,eAAA;AAAA,IACN,WAAA,EAAe,eAAA;AAAA,IACf,OAAA,EAAW,kBAAA;AAAA,IACX,QAAA,EAAY,SAAA;AAAA,IACZ,OAAA,EAAW,yDAAA;AAAA,IACX,OAAA,EAAW,CAAC,gBAAA,EAAkB,gBAAgB,CAAA;AAAA,IAC9C,cAAA,EAAkB,CAAC,kBAAkB,CAAA;AAAA,IACrC,YAAA,EAAgB;AAAA,MACd,eAAA,EAAmB,IAAA;AAAA,MACnB,cAAA,EAAkB,IAAA;AAAA,MAClB,wBAAA,EAA4B,IAAA;AAAA,MAC5B,iBAAA,EAAqB,IAAA;AAAA,MACrB,oBAAA,EAAwB;AAAA,KAC1B;AAAA,IACA,OAAA,EAAW,CAAC,QAAA,EAAU,QAAQ,CAAA;AAAA,IAC9B,MAAA,EAAU;AAAA,MACR,kBAAA,EAAoB;AAAA,QAClB,IAAA,EAAQ,kBAAA;AAAA,QACR,YAAA,EAAgB,YAAA;AAAA,QAChB,UAAA,EAAc,IAAA;AAAA,QACd,SAAA,EAAa,KAAA;AAAA,QACb,WAAA,EAAe,IAAA;AAAA,QACf,SAAA,EAAa,IAAA;AAAA,QACb,iBAAA,EAAqB,IAAA;AAAA,QACrB,IAAA,EAAQ;AAAA,UACN,KAAA,EAAS,GAAA;AAAA,UACT,MAAA,EAAU,GAAA;AAAA,UACV,UAAA,EAAc;AAAA,SAChB;AAAA,QACA,KAAA,EAAS;AAAA,UACP,OAAA,EAAW,OAAA;AAAA,UACX,MAAA,EAAU;AAAA,SACZ;AAAA,QACA,UAAA,EAAc;AAAA,UACZ,OAAS,CAAC,MAAA,EAAQ,OAAA,EAAS,OAAA,EAAS,SAAS,KAAK,CAAA;AAAA,UAClD,MAAA,EAAU,CAAC,MAAM;AAAA,SACnB;AAAA,QACA,MAAA,EAAU;AAAA,OACZ;AAAA,MACA,uBAAA,EAAyB;AAAA,QACvB,IAAA,EAAQ,uBAAA;AAAA,QACR,YAAA,EAAgB,YAAA;AAAA,QAChB,UAAA,EAAc,IAAA;AAAA,QACd,SAAA,EAAa,IAAA;AAAA,QACb,WAAA,EAAe,IAAA;AAAA,QACf,SAAA,EAAa,IAAA;AAAA,QACb,iBAAA,EAAqB,IAAA;AAAA,QACrB,IAAA,EAAQ;AAAA,UACN,KAAA,EAAS,GAAA;AAAA,UACT,MAAA,EAAU,GAAA;AAAA,UACV,UAAA,EAAc;AAAA,SAChB;AAAA,QACA,KAAA,EAAS;AAAA,UACP,OAAA,EAAW,OAAA;AAAA,UACX,MAAA,EAAU;AAAA,SACZ;AAAA,QACA,UAAA,EAAc;AAAA,UACZ,KAAA,EAAS,CAAC,MAAA,EAAQ,OAAO,CAAA;AAAA,UACzB,MAAA,EAAU,CAAC,MAAM;AAAA,SACnB;AAAA,QACA,aAAA,EAAiB;AAAA,OACnB;AAAA,MACA,gBAAA,EAAkB;AAAA,QAChB,IAAA,EAAQ,gBAAA;AAAA,QACR,YAAA,EAAgB,YAAA;AAAA,QAChB,UAAA,EAAc,IAAA;AAAA,QACd,SAAA,EAAa,IAAA;AAAA,QACb,WAAA,EAAe,IAAA;AAAA,QACf,SAAA,EAAa,IAAA;AAAA,QACb,iBAAA,EAAqB,IAAA;AAAA,QACrB,IAAA,EAAQ;AAAA,UACN,KAAA,EAAS,IAAA;AAAA,UACT,MAAA,EAAU,EAAA;AAAA,UACV,UAAA,EAAc;AAAA,SAChB;AAAA,QACA,KAAA,EAAS;AAAA,UACP,OAAA,EAAW,OAAA;AAAA,UACX,MAAA,EAAU;AAAA,SACZ;AAAA,QACA,UAAA,EAAc;AAAA,UACZ,KAAA,EAAS,CAAC,MAAA,EAAQ,OAAO,CAAA;AAAA,UACzB,MAAA,EAAU,CAAC,MAAM;AAAA,SACnB;AAAA,QACA,aAAA,EAAiB;AAAA;AACnB;AACF,GACF;AAAA,EACA;AAAA,IACE,EAAA,EAAM,QAAA;AAAA,IACN,WAAA,EAAe,QAAA;AAAA,IACf,OAAA,EAAW,kBAAA;AAAA,IACX,QAAA,EAAY,MAAA;AAAA,IACZ,OAAA,EAAW,2BAAA;AAAA,IACX,SAAW,EAAC;AAAA,IACZ,cAAA,EAAkB,CAAC,UAAU,CAAA;AAAA,IAC7B,YAAA,EAAgB;AAAA,MACd,eAAA,EAAmB,IAAA;AAAA,MACnB,cAAA,EAAkB,IAAA;AAAA,MAClB,wBAAA,EAA4B,IAAA;AAAA,MAC5B,iBAAA,EAAqB,IAAA;AAAA,MACrB,oBAAA,EAAwB;AAAA,KAC1B;AAAA,IACA,OAAA,EAAW,CAAC,QAAQ;AAAA,GACtB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,UAAA;AAAA,IACN,WAAA,EAAe,WAAA;AAAA,IACf,OAAA,EAAW,kBAAA;AAAA,IACX,QAAA,EAAY,MAAA;AAAA,IACZ,OAAA,EAAW,0BAAA;AAAA,IACX,SAAW,EAAC;AAAA,IACZ,cAAA,EAAkB,CAAC,4BAA4B,CAAA;AAAA,IAC/C,YAAA,EAAgB;AAAA,MACd,eAAA,EAAmB,IAAA;AAAA,MACnB,cAAA,EAAkB,KAAA;AAAA,MAClB,wBAAA,EAA4B,IAAA;AAAA,MAC5B,iBAAA,EAAqB,IAAA;AAAA,MACrB,oBAAA,EAAwB;AAAA,KAC1B;AAAA,IACA,OAAA,EAAW,CAAC,UAAU;AAAA,GACxB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,UAAA;AAAA,IACN,WAAA,EAAe,WAAA;AAAA,IACf,OAAA,EAAW,kBAAA;AAAA,IACX,QAAA,EAAY,MAAA;AAAA,IACZ,OAAA,EAAW,0BAAA;AAAA,IACX,SAAW,EAAC;AAAA,IACZ,cAAA,EAAkB,CAAC,SAAS,CAAA;AAAA,IAC5B,YAAA,EAAgB;AAAA,MACd,eAAA,EAAmB,IAAA;AAAA,MACnB,cAAA,EAAkB,KAAA;AAAA,MAClB,wBAAA,EAA4B,KAAA;AAAA,MAC5B,iBAAA,EAAqB,IAAA;AAAA,MACrB,oBAAA,EAAwB;AAAA,KAC1B;AAAA,IACA,OAAA,EAAW,CAAC,UAAU;AAAA,GACxB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,SAAA;AAAA,IACN,WAAA,EAAe,aAAA;AAAA,IACf,OAAA,EAAW,SAAA;AAAA,IACX,QAAA,EAAY,SAAA;AAAA,IACZ,OAAA,EAAW,iDAAA;AAAA,IACX,OAAA,EAAW,CAAC,mBAAA,EAAqB,uBAAuB,CAAA;AAAA,IACxD,cAAA,EAAkB,CAAC,2CAA2C,CAAA;AAAA,IAC9D,YAAA,EAAgB;AAAA,MACd,eAAA,EAAmB,IAAA;AAAA,MACnB,cAAA,EAAkB,IAAA;AAAA,MAClB,wBAAA,EAA4B,KAAA;AAAA,MAC5B,iBAAA,EAAqB,IAAA;AAAA,MACrB,oBAAA,EAAwB;AAAA,KAC1B;AAAA,IACA,OAAA,EAAW,CAAC,SAAS;AAAA,GACvB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,QAAA;AAAA,IACN,WAAA,EAAe,kBAAA;AAAA,IACf,OAAA,EAAW,kBAAA;AAAA,IACX,QAAA,EAAY,WAAA;AAAA,IACZ,OAAA,EAAW,kDAAA;AAAA,IACX,OAAA,EAAW,CAAC,gCAAgC,CAAA;AAAA,IAC5C,cAAA,EAAkB,CAAC,gBAAgB,CAAA;AAAA,IACnC,YAAA,EAAgB;AAAA,MACd,eAAA,EAAmB,IAAA;AAAA,MACnB,cAAA,EAAkB,IAAA;AAAA,MAClB,wBAAA,EAA4B,IAAA;AAAA,MAC5B,iBAAA,EAAqB,IAAA;AAAA,MACrB,oBAAA,EAAwB;AAAA,KAC1B;AAAA,IACA,OAAA,EAAW,CAAC,QAAQ;AAAA,GACtB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,QAAA;AAAA,IACN,WAAA,EAAe,QAAA;AAAA,IACf,OAAA,EAAW,kBAAA;AAAA,IACX,QAAA,EAAY,SAAA;AAAA,IACZ,OAAA,EAAW,2BAAA;AAAA,IACX,OAAA,EAAW,CAAC,gBAAgB,CAAA;AAAA,IAC5B,cAAA,EAAkB,CAAC,gBAAgB,CAAA;AAAA,IACnC,YAAA,EAAgB;AAAA,MACd,eAAA,EAAmB,IAAA;AAAA,MACnB,cAAA,EAAkB,KAAA;AAAA,MAClB,wBAAA,EAA4B,IAAA;AAAA,MAC5B,iBAAA,EAAqB,IAAA;AAAA,MACrB,oBAAA,EAAwB;AAAA;AAC1B,GACF;AAAA,EACA;AAAA,IACE,EAAA,EAAM,YAAA;AAAA,IACN,WAAA,EAAe,YAAA;AAAA,IACf,OAAA,EAAW,kBAAA;AAAA,IACX,QAAA,EAAY,SAAA;AAAA,IACZ,OAAA,EAAW,2BAAA;AAAA,IACX,OAAA,EAAW,CAAC,oBAAoB,CAAA;AAAA,IAChC,cAAA,EAAkB,CAAC,mCAAmC,CAAA;AAAA,IACtD,YAAA,EAAgB;AAAA,MACd,eAAA,EAAmB,KAAA;AAAA,MACnB,cAAA,EAAkB,KAAA;AAAA,MAClB,wBAAA,EAA4B,KAAA;AAAA,MAC5B,iBAAA,EAAqB,IAAA;AAAA,MACrB,oBAAA,EAAwB;AAAA;AAC1B,GACF;AAAA,EACA;AAAA,IACE,EAAA,EAAM,KAAA;AAAA,IACN,WAAA,EAAe,YAAA;AAAA,IACf,OAAA,EAAW,kBAAA;AAAA,IACX,QAAA,EAAY,SAAA;AAAA,IACZ,OAAA,EAAW,qBAAA;AAAA,IACX,OAAA,EAAW,CAAC,aAAa,CAAA;AAAA,IACzB,cAAA,EAAkB,CAAC,QAAQ,CAAA;AAAA,IAC3B,YAAA,EAAgB;AAAA,MACd,eAAA,EAAmB,IAAA;AAAA,MACnB,cAAA,EAAkB,IAAA;AAAA,MAClB,wBAAA,EAA4B,IAAA;AAAA,MAC5B,iBAAA,EAAqB,IAAA;AAAA,MACrB,oBAAA,EAAwB;AAAA,KAC1B;AAAA,IACA,OAAA,EAAW,CAAC,MAAM;AAAA,GACpB;AAAA,EACA;AAAA,IACE,EAAA,EAAM,WAAA;AAAA,IACN,WAAA,EAAe,WAAA;AAAA,IACf,OAAA,EAAW,kBAAA;AAAA,IACX,QAAA,EAAY,SAAA;AAAA,IACZ,OAAA,EAAW,6BAAA;AAAA,IACX,OAAA,EAAW,CAAC,mBAAmB,CAAA;AAAA,IAC/B,cAAA,EAAkB,CAAC,6BAA6B,CAAA;AAAA,IAChD,YAAA,EAAgB;AAAA,MACd,eAAA,EAAmB,IAAA;AAAA,MACnB,cAAA,EAAkB,KAAA;AAAA,MAClB,wBAAA,EAA4B,IAAA;AAAA,MAC5B,iBAAA,EAAqB,IAAA;AAAA,MACrB,oBAAA,EAAwB;AAAA;AAC1B,GACF;AAAA,EACA;AAAA,IACE,EAAA,EAAM,UAAA;AAAA,IACN,WAAA,EAAe,UAAA;AAAA,IACf,OAAA,EAAW,kBAAA;AAAA,IACX,QAAA,EAAY,SAAA;AAAA,IACZ,OAAA,EAAW,4BAAA;AAAA,IACX,OAAA,EAAW,CAAC,kBAAkB,CAAA;AAAA,IAC9B,cAAA,EAAkB,CAAC,cAAc,CAAA;AAAA,IACjC,YAAA,EAAgB;AAAA,MACd,eAAA,EAAmB,IAAA;AAAA,MACnB,cAAA,EAAkB,KAAA;AAAA,MAClB,wBAAA,EAA4B,IAAA;AAAA,MAC5B,iBAAA,EAAqB,IAAA;AAAA,MACrB,oBAAA,EAAwB;AAAA;AAC1B,GACF;AAAA,EACA;AAAA,IACE,EAAA,EAAM,WAAA;AAAA,IACN,WAAA,EAAe,WAAA;AAAA,IACf,OAAA,EAAW,kBAAA;AAAA,IACX,QAAA,EAAY,SAAA;AAAA,IACZ,OAAA,EAAW,qCAAA;AAAA,IACX,OAAA,EAAW,CAAC,mBAAmB,CAAA;AAAA,IAC/B,cAAA,EAAkB,CAAC,wCAAwC,CAAA;AAAA,IAC3D,YAAA,EAAgB;AAAA,MACd,eAAA,EAAmB,IAAA;AAAA,MACnB,cAAA,EAAkB,IAAA;AAAA,MAClB,wBAAA,EAA4B,IAAA;AAAA,MAC5B,iBAAA,EAAqB,IAAA;AAAA,MACrB,oBAAA,EAAwB;AAAA;AAC1B,GACF;AAAA,EACA;AAAA,IACE,EAAA,EAAM,aAAA;AAAA,IACN,WAAA,EAAe,cAAA;AAAA,IACf,OAAA,EAAW,kBAAA;AAAA,IACX,QAAA,EAAY,SAAA;AAAA,IACZ,OAAA,EAAW,yCAAA;AAAA,IACX,OAAA,EAAW,CAAC,UAAA,EAAY,qBAAqB,CAAA;AAAA,IAC7C,cAAA,EAAkB,CAAC,kCAAkC,CAAA;AAAA,IACrD,YAAA,EAAgB;AAAA,MACd,eAAA,EAAmB,IAAA;AAAA,MACnB,cAAA,EAAkB,KAAA;AAAA,MAClB,wBAAA,EAA4B,KAAA;AAAA,MAC5B,iBAAA,EAAqB,IAAA;AAAA,MACrB,oBAAA,EAAwB;AAAA;AAC1B,GACF;AAAA,EACA;AAAA,IACE,EAAA,EAAM,QAAA;AAAA,IACN,WAAA,EAAe,YAAA;AAAA,IACf,OAAA,EAAW,kBAAA;AAAA,IACX,QAAA,EAAY,SAAA;AAAA,IACZ,OAAA,EAAW,qCAAA;AAAA,IACX,OAAA,EAAW,CAAC,gBAAgB,CAAA;AAAA,IAC5B,cAAA,EAAkB,CAAC,6BAA6B,CAAA;AAAA,IAChD,YAAA,EAAgB;AAAA,MACd,eAAA,EAAmB,IAAA;AAAA,MACnB,cAAA,EAAkB,IAAA;AAAA,MAClB,wBAAA,EAA4B,IAAA;AAAA,MAC5B,iBAAA,EAAqB,IAAA;AAAA,MACrB,oBAAA,EAAwB;AAAA;AAC1B,GACF;AAAA,EACA;AAAA,IACE,EAAA,EAAM,QAAA;AAAA,IACN,WAAA,EAAe,WAAA;AAAA,IACf,OAAA,EAAW,kBAAA;AAAA,IACX,QAAA,EAAY,SAAA;AAAA,IACZ,OAAA,EAAW,wCAAA;AAAA,IACX,OAAA,EAAW,CAAC,gBAAgB,CAAA;AAAA,IAC5B,cAAA,EAAkB,CAAC,cAAc,CAAA;AAAA,IACjC,YAAA,EAAgB;AAAA,MACd,eAAA,EAAmB,IAAA;AAAA,MACnB,cAAA,EAAkB,KAAA;AAAA,MAClB,wBAAA,EAA4B,KAAA;AAAA,MAC5B,iBAAA,EAAqB,IAAA;AAAA,MACrB,oBAAA,EAAwB;AAAA;AAC1B,GACF;AAAA,EACA;AAAA,IACE,EAAA,EAAM,UAAA;AAAA,IACN,WAAA,EAAe,UAAA;AAAA,IACf,OAAA,EAAW,kBAAA;AAAA,IACX,QAAA,EAAY,SAAA;AAAA,IACZ,OAAA,EAAW,uCAAA;AAAA,IACX,OAAA,EAAW,CAAC,kBAAkB,CAAA;AAAA,IAC9B,cAAA,EAAkB,CAAC,sCAAsC,CAAA;AAAA,IACzD,YAAA,EAAgB;AAAA,MACd,eAAA,EAAmB,IAAA;AAAA,MACnB,cAAA,EAAkB,KAAA;AAAA,MAClB,wBAAA,EAA4B,IAAA;AAAA,MAC5B,iBAAA,EAAqB,IAAA;AAAA,MACrB,oBAAA,EAAwB;AAAA;AAC1B,GACF;AAAA,EACA;AAAA,IACE,EAAA,EAAM,WAAA;AAAA,IACN,WAAA,EAAe,WAAA;AAAA,IACf,OAAA,EAAW,kBAAA;AAAA,IACX,QAAA,EAAY,SAAA;AAAA,IACZ,OAAA,EAAW,uCAAA;AAAA,IACX,OAAA,EAAW,CAAC,qBAAqB,CAAA;AAAA,IACjC,cAAA,EAAkB,CAAC,gCAAgC,CAAA;AAAA,IACnD,YAAA,EAAgB;AAAA,MACd,eAAA,EAAmB,KAAA;AAAA,MACnB,cAAA,EAAkB,IAAA;AAAA,MAClB,wBAAA,EAA4B,KAAA;AAAA,MAC5B,iBAAA,EAAqB,IAAA;AAAA,MACrB,oBAAA,EAAwB;AAAA;AAC1B,GACF;AAAA,EACA;AAAA,IACE,EAAA,EAAM,MAAA;AAAA,IACN,WAAA,EAAe,WAAA;AAAA,IACf,OAAA,EAAW,kBAAA;AAAA,IACX,QAAA,EAAY,SAAA;AAAA,IACZ,OAAA,EAAW,gCAAA;AAAA,IACX,OAAA,EAAW,CAAC,cAAc,CAAA;AAAA,IAC1B,cAAA,EAAkB,CAAC,iBAAiB,CAAA;AAAA,IACpC,YAAA,EAAgB;AAAA,MACd,eAAA,EAAmB,IAAA;AAAA,MACnB,cAAA,EAAkB,KAAA;AAAA,MAClB,wBAAA,EAA4B,IAAA;AAAA,MAC5B,iBAAA,EAAqB,IAAA;AAAA,MACrB,oBAAA,EAAwB;AAAA;AAC1B,GACF;AAAA,EACA;AAAA,IACE,EAAA,EAAM,aAAA;AAAA,IACN,WAAA,EAAe,aAAA;AAAA,IACf,OAAA,EAAW,kBAAA;AAAA,IACX,QAAA,EAAY,SAAA;AAAA,IACZ,OAAA,EAAW,gCAAA;AAAA,IACX,OAAA,EAAW,CAAC,qBAAqB,CAAA;AAAA,IACjC,cAAA,EAAkB,CAAC,mBAAmB,CAAA;AAAA,IACtC,YAAA,EAAgB;AAAA,MACd,eAAA,EAAmB,KAAA;AAAA,MACnB,cAAA,EAAkB,KAAA;AAAA,MAClB,wBAAA,EAA4B,KAAA;AAAA,MAC5B,iBAAA,EAAqB,IAAA;AAAA,MACrB,oBAAA,EAAwB;AAAA;AAC1B,GACF;AAAA,EACA;AAAA,IACE,EAAA,EAAM,YAAA;AAAA,IACN,WAAA,EAAe,uBAAA;AAAA,IACf,OAAA,EAAW,kBAAA;AAAA,IACX,QAAA,EAAY,SAAA;AAAA,IACZ,OAAA,EAAW,kEAAA;AAAA,IACX,OAAA,EAAW,CAAC,sBAAA,EAAwB,uBAAuB,CAAA;AAAA,IAC3D,cAAA,EAAkB,CAAC,iCAAiC,CAAA;AAAA,IACpD,YAAA,EAAgB;AAAA,MACd,eAAA,EAAmB,IAAA;AAAA,MACnB,cAAA,EAAkB,KAAA;AAAA,MAClB,wBAAA,EAA4B,KAAA;AAAA,MAC5B,iBAAA,EAAqB,IAAA;AAAA,MACrB,oBAAA,EAAwB;AAAA;AAC1B,GACF;AAAA,EACA;AAAA,IACE,EAAA,EAAM,cAAA;AAAA,IACN,WAAA,EAAe,cAAA;AAAA,IACf,OAAA,EAAW,kBAAA;AAAA,IACX,QAAA,EAAY,SAAA;AAAA,IACZ,OAAA,EAAW,qEAAA;AAAA,IACX,OAAA,EAAW,CAAC,sBAAA,EAAwB,uBAAuB,CAAA;AAAA,IAC3D,cAAA,EAAkB,CAAC,QAAQ,CAAA;AAAA,IAC3B,YAAA,EAAgB;AAAA,MACd,eAAA,EAAmB,IAAA;AAAA,MACnB,cAAA,EAAkB,IAAA;AAAA,MAClB,wBAAA,EAA4B,IAAA;AAAA,MAC5B,iBAAA,EAAqB,IAAA;AAAA,MACrB,oBAAA,EAAwB;AAAA;AAC1B,GACF;AAAA,EACA;AAAA,IACE,EAAA,EAAM,eAAA;AAAA,IACN,WAAA,EAAe,eAAA;AAAA,IACf,OAAA,EAAW,kBAAA;AAAA,IACX,QAAA,EAAY,SAAA;AAAA,IACZ,OAAA,EAAW,uCAAA;AAAA,IACX,OAAA,EAAW,CAAC,cAAc,CAAA;AAAA,IAC1B,cAAA,EAAkB,CAAC,aAAa,CAAA;AAAA,IAChC,YAAA,EAAgB;AAAA,MACd,eAAA,EAAmB,IAAA;AAAA,MACnB,cAAA,EAAkB,IAAA;AAAA,MAClB,wBAAA,EAA4B,IAAA;AAAA,MAC5B,iBAAA,EAAqB,IAAA;AAAA,MACrB,oBAAA,EAAwB;AAAA;AAC1B,GACF;AAAA,EACA;AAAA,IACE,EAAA,EAAM,YAAA;AAAA,IACN,WAAA,EAAe,YAAA;AAAA,IACf,OAAA,EAAW,kBAAA;AAAA,IACX,QAAA,EAAY,SAAA;AAAA,IACZ,OAAA,EAAW,+BAAA;AAAA,IACX,OAAA,EAAW,CAAC,oBAAoB,CAAA;AAAA,IAChC,cAAA,EAAkB,CAAC,wCAAwC,CAAA;AAAA,IAC3D,YAAA,EAAgB;AAAA,MACd,eAAA,EAAmB,IAAA;AAAA,MACnB,cAAA,EAAkB,KAAA;AAAA,MAClB,wBAAA,EAA4B,IAAA;AAAA,MAC5B,iBAAA,EAAqB,IAAA;AAAA,MACrB,oBAAA,EAAwB;AAAA;AAC1B,GACF;AAAA,EACA;AAAA,IACE,EAAA,EAAM,QAAA;AAAA,IACN,WAAA,EAAe,WAAA;AAAA,IACf,OAAA,EAAW,kBAAA;AAAA,IACX,QAAA,EAAY,SAAA;AAAA,IACZ,OAAA,EAAW,iCAAA;AAAA,IACX,OAAA,EAAW,CAAC,gBAAgB,CAAA;AAAA,IAC5B,cAAA,EAAkB,CAAC,mCAAmC,CAAA;AAAA,IACtD,YAAA,EAAgB;AAAA,MACd,eAAA,EAAmB,IAAA;AAAA,MACnB,cAAA,EAAkB,KAAA;AAAA,MAClB,wBAAA,EAA4B,IAAA;AAAA,MAC5B,iBAAA,EAAqB,IAAA;AAAA,MACrB,oBAAA,EAAwB;AAAA;AAC1B,GACF;AAAA,EACA;AAAA,IACE,EAAA,EAAM,UAAA;AAAA,IACN,WAAA,EAAe,iBAAA;AAAA,IACf,OAAA,EAAW,kBAAA;AAAA,IACX,QAAA,EAAY,SAAA;AAAA,IACZ,OAAA,EAAW,4BAAA;AAAA,IACX,OAAA,EAAW,CAAC,kBAAkB,CAAA;AAAA,IAC9B,cAAA,EAAkB,CAAC,gBAAgB,CAAA;AAAA,IACnC,YAAA,EAAgB;AAAA,MACd,eAAA,EAAmB,IAAA;AAAA,MACnB,cAAA,EAAkB,KAAA;AAAA,MAClB,wBAAA,EAA4B,KAAA;AAAA,MAC5B,iBAAA,EAAqB,IAAA;AAAA,MACrB,oBAAA,EAAwB;AAAA;AAC1B,GACF;AAAA,EACA;AAAA,IACE,EAAA,EAAM,MAAA;AAAA,IACN,WAAA,EAAe,gBAAA;AAAA,IACf,OAAA,EAAW,kBAAA;AAAA,IACX,QAAA,EAAY,SAAA;AAAA,IACZ,OAAA,EAAW,mDAAA;AAAA,IACX,OAAA,EAAW,CAAC,mBAAmB,CAAA;AAAA,IAC/B,cAAA,EAAkB,CAAC,WAAW,CAAA;AAAA,IAC9B,YAAA,EAAgB;AAAA,MACd,eAAA,EAAmB,IAAA;AAAA,MACnB,cAAA,EAAkB,IAAA;AAAA,MAClB,wBAAA,EAA4B,IAAA;AAAA,MAC5B,iBAAA,EAAqB,IAAA;AAAA,MACrB,oBAAA,EAAwB;AAAA,KAC1B;AAAA,IACA,OAAA,EAAW,CAAC,WAAW,CAAA;AAAA,IACvB,MAAA,EAAU;AAAA,MACR,8BAAA,EAAgC;AAAA,QAC9B,SAAA,EAAa,IAAA;AAAA,QACb,iBAAA,EAAqB,KAAA;AAAA,QACrB,aAAA,EAAiB,KAAA;AAAA,QACjB,UAAA,EAAc;AAAA,UACZ,KAAA,EAAS,CAAC,MAAM;AAAA,SAClB;AAAA,QACA,KAAA,EAAS;AAAA,UACP,OAAA,EAAW,IAAA;AAAA,UACX,MAAA,EAAU;AAAA;AACZ;AACF;AACF,GACF;AAAA,EACA;AAAA,IACE,EAAA,EAAM,OAAA;AAAA,IACN,WAAA,EAAe,gBAAA;AAAA,IACf,OAAA,EAAW,kBAAA;AAAA,IACX,QAAA,EAAY,SAAA;AAAA,IACZ,OAAA,EAAW,sCAAA;AAAA,IACX,OAAA,EAAW,CAAC,eAAe,CAAA;AAAA,IAC3B,cAAA,EAAkB,CAAC,YAAY,CAAA;AAAA,IAC/B,YAAA,EAAgB;AAAA,MACd,eAAA,EAAmB,IAAA;AAAA,MACnB,cAAA,EAAkB,IAAA;AAAA,MAClB,wBAAA,EAA4B,IAAA;AAAA,MAC5B,iBAAA,EAAqB,IAAA;AAAA,MACrB,oBAAA,EAAwB;AAAA,KAC1B;AAAA,IACA,OAAA,EAAW,CAAC,KAAA,EAAO,MAAM,CAAA;AAAA,IACzB,MAAA,EAAU;AAAA,MACR,eAAA,EAAiB;AAAA,QACf,IAAA,EAAQ,eAAA;AAAA,QACR,YAAA,EAAgB,YAAA;AAAA,QAChB,UAAA,EAAc,KAAA;AAAA,QACd,SAAA,EAAa,IAAA;AAAA,QACb,WAAA,EAAe,IAAA;AAAA,QACf,SAAA,EAAa,IAAA;AAAA,QACb,IAAA,EAAQ;AAAA,UACN,KAAA,EAAS,CAAA;AAAA,UACT,MAAA,EAAU,CAAA;AAAA,UACV,UAAA,EAAc,CAAA;AAAA,UACd,WAAA,EAAe;AAAA,SACjB;AAAA,QACA,KAAA,EAAS;AAAA,UACP,OAAA,EAAW,MAAA;AAAA,UACX,MAAA,EAAU;AAAA,SACZ;AAAA,QACA,UAAA,EAAc;AAAA,UACZ,KAAA,EAAS,CAAC,MAAM,CAAA;AAAA,UAChB,MAAA,EAAU,CAAC,MAAM;AAAA,SACnB;AAAA,QACA,iBAAA,EAAqB,KAAA;AAAA,QACrB,aAAA,EAAiB;AAAA;AACnB;AACF,GACF;AAAA,EACA;AAAA,IACE,EAAA,EAAM,SAAA;AAAA,IACN,WAAA,EAAe,SAAA;AAAA,IACf,OAAA,EAAW,kBAAA;AAAA,IACX,QAAA,EAAY,SAAA;AAAA,IACZ,OAAA,EAAW,6BAAA;AAAA,IACX,OAAA,EAAW,CAAC,iBAAiB,CAAA;AAAA,IAC7B,cAAA,EAAkB,CAAC,iBAAiB,CAAA;AAAA,IACpC,YAAA,EAAgB;AAAA,MACd,eAAA,EAAmB,IAAA;AAAA,MACnB,cAAA,EAAkB,KAAA;AAAA,MAClB,wBAAA,EAA4B,KAAA;AAAA,MAC5B,iBAAA,EAAqB,IAAA;AAAA,MACrB,oBAAA,EAAwB;AAAA;AAC1B,GACF;AAAA,EACA;AAAA,IACE,EAAA,EAAM,UAAA;AAAA,IACN,WAAA,EAAe,UAAA;AAAA,IACf,OAAA,EAAW,kBAAA;AAAA,IACX,QAAA,EAAY,SAAA;AAAA,IACZ,OAAA,EAAW,gCAAA;AAAA,IACX,OAAA,EAAW,CAAC,kBAAkB,CAAA;AAAA,IAC9B,cAAA,EAAkB,CAAC,WAAW,CAAA;AAAA,IAC9B,YAAA,EAAgB;AAAA,MACd,eAAA,EAAmB,IAAA;AAAA,MACnB,cAAA,EAAkB,KAAA;AAAA,MAClB,wBAAA,EAA4B,KAAA;AAAA,MAC5B,iBAAA,EAAqB,IAAA;AAAA,MACrB,oBAAA,EAAwB;AAAA;AAC1B,GACF;AAAA,EACA;AAAA,IACE,EAAA,EAAM,QAAA;AAAA,IACN,WAAA,EAAe,WAAA;AAAA,IACf,OAAA,EAAW,kBAAA;AAAA,IACX,QAAA,EAAY,SAAA;AAAA,IACZ,OAAA,EAAW,6BAAA;AAAA,IACX,OAAA,EAAW,CAAC,gBAAgB,CAAA;AAAA,IAC5B,cAAA,EAAkB,CAAC,UAAU,CAAA;AAAA,IAC7B,YAAA,EAAgB;AAAA,MACd,eAAA,EAAmB,KAAA;AAAA,MACnB,cAAA,EAAkB,KAAA;AAAA,MAClB,wBAAA,EAA4B,KAAA;AAAA,MAC5B,iBAAA,EAAqB,KAAA;AAAA,MACrB,oBAAA,EAAwB;AAAA;AAC1B,GACF;AAAA,EACA;AAAA,IACE,EAAA,EAAM,MAAA;AAAA,IACN,WAAA,EAAe,SAAA;AAAA,IACf,OAAA,EAAW,kBAAA;AAAA,IACX,QAAA,EAAY,SAAA;AAAA,IACZ,OAAA,EAAW,wBAAA;AAAA,IACX,OAAA,EAAW,CAAC,cAAc,CAAA;AAAA,IAC1B,cAAA,EAAkB,CAAC,oBAAoB,CAAA;AAAA,IACvC,YAAA,EAAgB;AAAA,MACd,eAAA,EAAmB,KAAA;AAAA,MACnB,cAAA,EAAkB,KAAA;AAAA,MAClB,wBAAA,EAA4B,KAAA;AAAA,MAC5B,iBAAA,EAAqB,KAAA;AAAA,MACrB,oBAAA,EAAwB;AAAA;AAC1B,GACF;AAAA,EACA;AAAA,IACE,EAAA,EAAM,UAAA;AAAA,IACN,WAAA,EAAe,oBAAA;AAAA,IACf,OAAA,EAAW,kBAAA;AAAA,IACX,QAAA,EAAY,SAAA;AAAA,IACZ,OAAA,EAAW,4BAAA;AAAA,IACX,OAAA,EAAW,CAAC,kBAAA,EAAoB,gBAAgB,CAAA;AAAA,IAChD,cAAA,EAAkB,CAAC,aAAa,CAAA;AAAA,IAChC,YAAA,EAAgB;AAAA,MACd,eAAA,EAAmB,IAAA;AAAA,MACnB,cAAA,EAAkB,IAAA;AAAA,MAClB,wBAAA,EAA4B,IAAA;AAAA,MAC5B,iBAAA,EAAqB,IAAA;AAAA,MACrB,oBAAA,EAAwB;AAAA,KAC1B;AAAA,IACA,MAAA,EAAU;AAAA,MACR,aAAA,EAAe;AAAA,QACb,IAAA,EAAQ,oBAAA;AAAA,QACR,YAAA,EAAgB,YAAA;AAAA,QAChB,UAAA,EAAc,KAAA;AAAA,QACd,SAAA,EAAa,KAAA;AAAA,QACb,WAAA,EAAe,IAAA;AAAA,QACf,SAAA,EAAa,IAAA;AAAA,QACb,IAAA,EAAQ;AAAA,UACN,KAAA,EAAS,IAAA;AAAA,UACT,MAAA,EAAU,GAAA;AAAA,UACV,UAAA,EAAc;AAAA,SAChB;AAAA,QACA,KAAA,EAAS;AAAA,UACP,OAAA,EAAW,KAAA;AAAA,UACX,MAAA,EAAU;AAAA,SACZ;AAAA,QACA,UAAA,EAAc;AAAA,UACZ,KAAA,EAAS,CAAC,MAAA,EAAQ,OAAO,CAAA;AAAA,UACzB,MAAA,EAAU,CAAC,MAAM;AAAA;AACnB;AACF;AACF,GACF;AAAA,EACA;AAAA,IACE,EAAA,EAAM,SAAA;AAAA,IACN,WAAA,EAAe,mBAAA;AAAA,IACf,OAAA,EAAW,kBAAA;AAAA,IACX,QAAA,EAAY,SAAA;AAAA,IACZ,OAAA,EAAW,2BAAA;AAAA,IACX,OAAA,EAAW,CAAC,iBAAiB,CAAA;AAAA,IAC7B,cAAA,EAAkB,CAAC,aAAa,CAAA;AAAA,IAChC,YAAA,EAAgB;AAAA,MACd,eAAA,EAAmB,IAAA;AAAA,MACnB,cAAA,EAAkB,IAAA;AAAA,MAClB,wBAAA,EAA4B,IAAA;AAAA,MAC5B,iBAAA,EAAqB,IAAA;AAAA,MACrB,oBAAA,EAAwB;AAAA;AAC1B,GACF;AAAA,EACA;AAAA,IACE,EAAA,EAAM,SAAA;AAAA,IACN,WAAA,EAAe,SAAA;AAAA,IACf,OAAA,EAAW,kBAAA;AAAA,IACX,QAAA,EAAY,SAAA;AAAA,IACZ,OAAA,EAAW,8BAAA;AAAA,IACX,OAAA,EAAW,CAAC,iBAAiB,CAAA;AAAA,IAC7B,cAAA,EAAkB,CAAC,sCAAsC,CAAA;AAAA,IACzD,YAAA,EAAgB;AAAA,MACd,eAAA,EAAmB,IAAA;AAAA,MACnB,cAAA,EAAkB,KAAA;AAAA,MAClB,wBAAA,EAA4B,IAAA;AAAA,MAC5B,iBAAA,EAAqB,IAAA;AAAA,MACrB,oBAAA,EAAwB;AAAA;AAC1B,GACF;AAAA,EACA;AAAA,IACE,EAAA,EAAM,OAAA;AAAA,IACN,WAAA,EAAe,OAAA;AAAA,IACf,OAAA,EAAW,kBAAA;AAAA,IACX,QAAA,EAAY,SAAA;AAAA,IACZ,OAAA,EAAW,0BAAA;AAAA,IACX,OAAA,EAAW,CAAC,gBAAA,EAAkB,oBAAoB,CAAA;AAAA,IAClD,cAAA,EAAkB,CAAC,sCAAsC,CAAA;AAAA,IACzD,YAAA,EAAgB;AAAA,MACd,eAAA,EAAmB,IAAA;AAAA,MACnB,cAAA,EAAkB,KAAA;AAAA,MAClB,wBAAA,EAA4B,KAAA;AAAA,MAC5B,iBAAA,EAAqB,IAAA;AAAA,MACrB,oBAAA,EAAwB;AAAA;AAC1B;AAEJ,CAAA;;;AC5rCA,IAAM,cAAA,GAAiB,eAAA;AAAA,EACrB,wCAAA;AAAA,EACA,0BAAU,GAAA;AACZ,CAAA;AAEA,IAAM,gBAAA,GAAmB,eAAA;AAAA,EACvB,0CAAA;AAAA,EACA,0BAAU,GAAA;AACZ,CAAA;AACA,IAAM,UAAA,GAAa,eAAA,CAAgB,yCAAA,EAA2C,OAAO;AAAA,EACnF,MAAA,EAAQ;AACV,CAAA,CAAE,CAAA;AASK,SAAS,oBAAoBA,IAAAA,EAAuC;AACzE,EAAA,sBAAA,EAAuB;AACvB,EAAA,OAAO,cAAA,CAAe,IAAIA,IAAG,CAAA;AAC/B;AAGO,SAAS,kBAAkBA,IAAAA,EAAsB;AACtD,EAAA,OAAO,gBAAA,CAAiB,IAAIA,IAAG,CAAA;AACjC;AASO,SAAS,cAAA,CAAeA,MAAa,KAAA,EAA2B;AACrE,EAAA,sBAAA,EAAuB;AACvB,EAAA,MAAM,QAAA,GAAW,cAAA,CAAe,GAAA,CAAIA,IAAG,CAAA;AACvC,EAAA,cAAA,CAAe,GAAA,CAAIA,IAAAA,EAAK,QAAA,KAAa,MAAA,GAAY,KAAA,GAAQ,EAAE,GAAG,QAAA,EAAU,GAAG,KAAA,EAAO,CAAA;AAClF,EAAA,gBAAA,CAAiB,IAAIA,IAAG,CAAA;AAC1B;AAQA,SAAS,sBAAA,GAA+B;AACtC,EAAA,IAAI,WAAW,MAAA,EAAQ;AACvB,EAAA,UAAA,CAAW,MAAA,GAAS,IAAA;AAGpB,EAAA,IAAI;AACF,IAAA,MAAM,UAAU,mBAAA,EAAoB;AACpC,IAAA,KAAA,MAAW,KAAA,IAAS,MAAA,CAAO,MAAA,CAAO,OAAO,CAAA,EAAG;AAC1C,MAAA,gBAAA,CAAiB,KAAK,CAAA;AAAA,IACxB;AAAA,EACF,SAAS,GAAA,EAAK;AACZ,IAAA,IAAA;AAAA,MACE,CAAA,kDAAA,EAAsD,IAAc,OAAO,CAAA;AAAA;AAAA,KAC7E;AAAA,EACF;AACF;AAYA,SAAS,iBAAiB,KAAA,EAA2B;AACnD,EAAA,IAAI,MAAM,MAAA,KAAW,MAAA,IAAa,OAAO,KAAA,CAAM,WAAW,QAAA,EAAU;AACpE,EAAA,KAAA,MAAW,CAAC,SAAS,GAAG,CAAA,IAAK,OAAO,OAAA,CAAQ,KAAA,CAAM,MAAM,CAAA,EAAG;AACzD,IAAA,MAAM,MAAA,GAAS,kBAAA,CAAmB,SAAA,CAAU,GAAG,CAAA;AAC/C,IAAA,IAAI,CAAC,OAAO,OAAA,EAAS;AACnB,MAAA,IAAA;AAAA,QACE,CAAA,sDAAA,EAAyD,KAAA,CAAM,EAAE,CAAA,CAAA,EAAI,OAAO,CAAA,GAAA,EACvE,MAAA,CAAO,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,EAAG,OAAA,IAAW,SAAS;AAAA;AAAA,OACnD;AACA,MAAA;AAAA,IACF;AAIA,IAAA,cAAA,CAAe,GAAA,CAAI,GAAG,KAAA,CAAM,EAAE,IAAI,OAAO,CAAA,CAAA,EAAI,OAAO,IAAI,CAAA;AACxD,IAAA,KAAA,MAAW,KAAA,IAAS,KAAA,CAAM,OAAA,IAAW,EAAC,EAAG;AACvC,MAAA,MAAMA,IAAAA,GAAM,CAAA,EAAG,KAAK,CAAA,CAAA,EAAI,OAAO,CAAA,CAAA;AAC/B,MAAA,IAAI,CAAC,eAAe,GAAA,CAAIA,IAAG,GAAG,cAAA,CAAe,GAAA,CAAIA,IAAAA,EAAK,MAAA,CAAO,IAAI,CAAA;AAAA,IACnE;AAAA,EACF;AACF;AAaA,SAAS,cAAc,GAAA,EAAmD;AACxE,EAAA,MAAM,MAAA,GAAS,kBAAA,CAAmB,SAAA,CAAU,GAAG,CAAA;AAE/C,EAAA,OAAO,MAAA,CAAO,OAAA,GAAW,MAAA,CAAO,IAAA,GAAwB,IAAA;AAC1D;AAEO,SAAS,oBAAoB,IAAA,EAAkD;AAGpF,EAAA,IAAI,OAAA,GAAqC,CAAC,GAAI,wBAA6C,CAAA;AAE3F,EAAA,IAAI,MAAM,oBAAA,EAAsB;AAC9B,IAAA,OAAA,GAAU;AAAA,MACR,GAAG,OAAA;AAAA,MACH,EAAE,EAAA,EAAI,oBAAA,EAAsB,WAAA,EAAa,KAAA;AAAM,KACjD;AAAA,EACF;AAEA,EAAA,MAAM,SAAuC,EAAC;AAC9C,EAAA,KAAA,MAAW,OAAO,OAAA,EAAS;AACzB,IAAA,MAAM,SAAA,GAAY,cAAc,GAA8B,CAAA;AAC9D,IAAA,IAAI,cAAc,IAAA,EAAM;AACtB,MAAA,IAAA;AAAA,QACE,CAAA,sDAAA,EAAyD,KAAK,SAAA,CAAU,GAAG,EAAE,KAAA,CAAM,CAAA,EAAG,GAAG,CAAC;AAAA;AAAA,OAC5F;AACA,MAAA;AAAA,IACF;AACA,IAAA,MAAA,CAAO,SAAA,CAAU,EAAE,CAAA,GAAI,SAAA;AAAA,EACzB;AACA,EAAA,OAAO,MAAA;AACT;AAEA,IAAI,kBAAA,GAAkE,IAAA;AAO/D,SAAS,uBAAuB,UAAA,EAAsD;AAC3F,EAAA,IAAI,uBAAuB,IAAA,EAAM;AAC/B,IAAA,MAAM,UAAU,mBAAA,EAAoB;AACpC,IAAA,kBAAA,GAAqB,EAAC;AACtB,IAAA,KAAA,MAAW,KAAA,IAAS,MAAA,CAAO,MAAA,CAAO,OAAO,CAAA,EAAG;AAC1C,MAAA,kBAAA,CAAmB,KAAA,CAAM,EAAE,CAAA,GAAI,KAAA,CAAM,YAAA;AAGrC,MAAA,KAAA,MAAW,KAAA,IAAS,KAAA,CAAM,OAAA,IAAW,EAAC,EAAG;AACvC,QAAA,IAAI,mBAAmB,KAAK,CAAA,KAAM,QAAW,kBAAA,CAAmB,KAAK,IAAI,KAAA,CAAM,YAAA;AAAA,MACjF;AAAA,IACF;AAAA,EACF;AACA,EAAA,OAAO,mBAAmB,UAAU,CAAA;AACtC;AAEO,SAAS,yBAAyB,IAAA,EAA0B;AACjE,EAAA,MAAM,OAAA,GAAU,oBAAoB,IAAI,CAAA;AACxC,EAAA,KAAA,MAAW,KAAA,IAAS,MAAA,CAAO,MAAA,CAAO,OAAO,CAAA,EAAG;AAI1C,IAAA,IAAI,kBAAA,CAAmB,KAAA,CAAM,EAAE,CAAA,KAAM,MAAA,EAAW;AAChD,IAAA,IAAI,KAAA,CAAM,SAAS,IAAA,CAAK,CAAC,MAAM,kBAAA,CAAmB,CAAC,CAAA,KAAM,MAAS,CAAA,EAAG;AAErE,IAAA,MAAM,OAAA,GAA2B;AAAA,MAC/B,MAAM,KAAA,CAAM,EAAA;AAAA,MACZ,SAAS,KAAA,CAAM,OAAA;AAAA,MACf,UAAU,KAAA,CAAM,QAAA;AAAA,MAChB,SAAS,KAAA,CAAM,OAAA;AAAA,MACf,SAAS,KAAA,CAAM,OAAA;AAAA,MACf,gBAAgB,KAAA,CAAM,cAAA;AAAA,MACtB,aAAa,KAAA,CAAM,WAAA;AAAA,MACnB,SAAS,KAAA,CAAM,OAAA;AAAA,MACf,WAAW,KAAA,CAAM,SAAA;AAAA,MACjB,UAAU,KAAA,CAAM,QAAA;AAAA,MAChB,cAAc,KAAA,CAAM;AAAA,KACtB;AACA,IAAA,gBAAA,CAAiB,OAAO,CAAA;AAAA,EAC1B;AACF;;;AC7QO,IAAM,SAAA,GAA6B;AAAA,EACxC,IAAA,EAAM,WAAA;AAAA,EACN,OAAA,EAAS,oBAAA;AAAA,EACT,OAAA,EAAS,CAAC,mBAAmB,CAAA;AAAA,EAC7B,QAAA,EAAU,SAAA;AAAA,EACV,OAAA,EAAS,2BAAA;AAAA,EACT,SAAA,EAAW,qCAAA;AAAA,EACX,QAAA,EAAU,mBAAA;AAAA,EACV,cAAA,EAAgB,CAAC,iBAAA,EAAmB,mBAAA,EAAqB,2BAA2B,CAAA;AAAA;AAAA;AAAA;AAAA,EAIpF,YAAA,EAAc;AAAA,IACZ,gBAAA,EAAkB;AAAA;AAEtB,CAAA;;;ACDO,IAAM,OAAA,GAA2B;AAAA,EACtC,IAAA,EAAM,SAAA;AAAA,EACN,OAAA,EAAS,mBAAA;AAAA,EACT,OAAA,EAAS,CAAC,0BAA0B,CAAA;AAAA,EACpC,QAAA,EAAU,YAAA;AAAA,EACV,OAAA,EAAS,iDAAA;AAAA,EACT,SAAA,EAAW,MAAA;AAAA,EACX,QAAA,EAAU,+BAAA;AAAA,EACV,cAAA,EAAgB;AAAA,IACd,6CAAA;AAAA,IACA,2CAAA;AAAA,IACA;AAAA;AAEJ,CAAA;AAGO,SAAS,mBAAmB,OAAA,EAAyB;AAC1D,EAAA,OAAO,OAAA,CAAQ,OAAA,CAAQ,YAAA,EAAc,EAAE,CAAA;AACzC;AAQO,SAAS,uBAAuB,OAAA,EAAqC;AAC1E,EAAA,MAAM,EAAA,GAAK,mBAAmB,OAAO,CAAA;AACrC,EAAA,IAAI,EAAA,CAAG,UAAA,CAAW,SAAS,CAAA,EAAG,OAAO,WAAA;AACrC,EAAA,IAAI,GAAG,UAAA,CAAW,KAAK,GAAG,OAAO,OAAA,CAAQ,IAAI,UAAA,IAAc,WAAA;AAC3D,EAAA,IAAI,GAAG,UAAA,CAAW,KAAK,GAAG,OAAO,OAAA,CAAQ,IAAI,UAAA,IAAc,WAAA;AAC3D,EAAA,IAAI,GAAG,UAAA,CAAW,OAAO,GAAG,OAAO,OAAA,CAAQ,IAAI,UAAA,IAAc,gBAAA;AAC7D,EAAA,IAAI,EAAA,CAAG,UAAA,CAAW,KAAK,CAAA,EAAG,OAAO,gBAAA;AACjC,EAAA,OAAO,MAAA;AACT;AAGO,SAAS,sBAAsB,OAAA,EAAyB;AAC7D,EAAA,MAAM,SAAS,sBAAA,CAAuB,OAAO,CAAA,IAAK,OAAA,CAAQ,IAAI,UAAA,IAAc,WAAA;AAC5E,EAAA,OAAO,2BAA2B,MAAM,CAAA,cAAA,CAAA;AAC1C;;;AC9CO,SAAS,wBACd,CAAA,EACiB;AACjB,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,kBAAA;AAAA,IACT,QAAA,EAAU,SAAA;AAAA,IACV,gBAAgB,EAAC;AAAA,IACjB,GAAG;AAAA,GACL;AACF;;;ACbO,IAAM,WAAW,uBAAA,CAAwB;AAAA,EAC9C,IAAA,EAAM,UAAA;AAAA,EACN,OAAA,EAAS,4BAAA;AAAA,EACT,OAAA,EAAS,CAAC,kBAAkB,CAAA;AAAA,EAC5B,cAAA,EAAgB,CAAC,cAAA,EAAgB,aAAa,CAAA;AAAA,EAC9C,YAAA,EAAc,EAAE,kCAAA,EAAoC,SAAA,EAAU;AAAA,EAC9D,QAAA,EAAU;AACZ,CAAC,CAAA;;;ACJM,IAAM,SAAS,uBAAA,CAAwB;AAAA,EAC5C,IAAA,EAAM,QAAA;AAAA,EACN,OAAA,EAAS,wCAAA;AAAA,EACT,OAAA,EAAS,CAAC,gBAAA,EAAkB,YAAY,CAAA;AAAA,EACxC,cAAA,EAAgB,CAAC,mBAAmB,CAAA;AAAA,EACpC,QAAA,EAAU;AACZ,CAAC,CAAA;;;ACZM,IAAM,YAAY,uBAAA,CAAwB;AAAA,EAC/C,IAAA,EAAM,WAAA;AAAA,EACN,OAAA,EAAS,qCAAA;AAAA,EACT,OAAA,EAAS,CAAC,mBAAmB,CAAA;AAAA,EAC7B,cAAA,EAAgB,CAAC,gBAAgB,CAAA;AAAA,EACjC,QAAA,EAAU;AACZ,CAAC,CAAA;;;ACCM,IAAM,MAAA,GAA0B;AAAA,EACrC,IAAA,EAAM,QAAA;AAAA,EACN,OAAA,EAAS,kBAAA;AAAA,EACT,OAAA,EAAS,CAAC,oBAAoB,CAAA;AAAA,EAC9B,QAAA,EAAU,SAAA;AAAA,EACV,OAAA,EAAS,2BAAA;AAAA,EACT,QAAA,EAAU,eAAA;AAAA,EACV,cAAA,EAAgB,CAAC,6BAA6B;AAChD,CAAA;;;ACXO,IAAM,SAAS,uBAAA,CAAwB;AAAA,EAC5C,IAAA,EAAM,QAAA;AAAA,EACN,OAAA,EAAS,yDAAA;AAAA,EACT,OAAA,EAAS,CAAC,gBAAA,EAAkB,gBAAA,EAAkB,8BAA8B,CAAA;AAAA,EAC5E,cAAA,EAAgB,CAAC,gBAAA,EAAkB,kBAAkB,CAAA;AAAA,EACrD,QAAA,EAAU;AACZ,CAAC,CAAA;;;ACVM,IAAM,OAAO,uBAAA,CAAwB;AAAA,EAC1C,IAAA,EAAM,MAAA;AAAA,EACN,OAAA,EAAS,gCAAA;AAAA,EACT,OAAA,EAAS,CAAC,cAAc,CAAA;AAAA,EACxB,cAAA,EAAgB,CAAC,yBAAA,EAA2B,sBAAsB,CAAA;AAAA,EAClE,QAAA,EAAU;AACZ,CAAC,CAAA;;;ACcM,IAAM,QAAA,GAA4B;AAAA,EACvC,IAAA,EAAM,UAAA;AAAA,EACN,OAAA,EAAS,CAAC,WAAA,EAAa,WAAW,CAAA;AAAA,EAClC,OAAA,EAAS,kBAAA;AAAA,EACT,OAAA,EAAS,CAAC,kBAAkB,CAAA;AAAA,EAC5B,QAAA,EAAU,MAAA;AAAA,EACV,OAAA,EAAS,uBAAA;AAAA,EACT,SAAA,EAAW,iCAAA;AAAA,EACX,QAAA,EAAU,WAAA;AAAA,EACV,cAAA,EAAgB,CAAC,cAAc;AACjC,CAAA;;;ACZO,IAAM,QAAA,GAA4B;AAAA,EACvC,IAAA,EAAM,UAAA;AAAA,EACN,OAAA,EAAS,CAAC,WAAA,EAAa,WAAW,CAAA;AAAA,EAClC,OAAA,EAAS,kBAAA;AAAA,EACT,OAAA,EAAS,CAAC,kBAAkB,CAAA;AAAA,EAC5B,QAAA,EAAU,MAAA;AAAA,EACV,OAAA,EAAS,uBAAA;AAAA,EACT,SAAA,EAAW,iCAAA;AAAA,EACX,QAAA,EAAU,WAAA;AAAA,EACV,cAAA,EAAgB,CAAC,cAAc;AACjC,CAAA;;;AC5BO,IAAM,UAAU,uBAAA,CAAwB;AAAA,EAC7C,IAAA,EAAM,SAAA;AAAA,EACN,OAAA,EAAS,2BAAA;AAAA,EACT,OAAA,EAAS,CAAC,iBAAiB,CAAA;AAAA,EAC3B,cAAA,EAAgB,CAAC,sBAAA,EAAwB,kBAAkB,CAAA;AAAA,EAC3D,QAAA,EAAU;AACZ,CAAC,CAAA;;;ACQM,IAAM,MAAA,GAA0B;AAAA,EACrC,IAAA,EAAM,QAAA;AAAA,EACN,OAAA,EAAS,kBAAA;AAAA,EACT,OAAA,EAAS,CAAC,gBAAgB,CAAA;AAAA,EAC1B,QAAA,EAAU,MAAA;AAAA,EACV,OAAA,EAAS,wBAAA;AAAA,EACT,SAAA,EAAW,kCAAA;AAAA,EACX,QAAA,EAAU,WAAA;AAAA,EACV,cAAA,EAAgB,CAAC,UAAA,EAAY,SAAA,EAAW,SAAS;AACnD,CAAA;;;ACxBO,IAAM,MAAA,GAA0B;AAAA,EACrC,IAAA,EAAM,QAAA;AAAA,EACN,OAAA,EAAS,kBAAA;AAAA,EACT,OAAA,EAAS,CAAC,gBAAgB,CAAA;AAAA,EAC1B,QAAA,EAAU,SAAA;AAAA,EACV,OAAA,EAAS,wBAAA;AAAA,EACT,SAAA,EAAW,kCAAA;AAAA,EACX,QAAA,EAAU,gBAAA;AAAA,EACV,cAAA,EAAgB,CAAC,QAAA,EAAU,aAAa;AAC1C,CAAA;ACgBA,IAAM,aAAA,GAAuC;AAAA,EAC3C,MAAM,OAAA,EAAQ;AAAA,EACd,OAAA,EAAS,UAAA;AAAA,EACT,QAAA,EAAU,WAAA;AAAA,EACV,UAAA,EAAY;AACd,CAAA;AAQA,IAAM,mBAAA,GAA2C;AAAA,EAC/C,QAAA,EAAU,QAAA;AAAA,EACV,iBAAA,EAAmB,yCAAA;AAAA,EACnB,aAAA,EAAe,qCAAA;AAAA,EACf,QAAA,EAAU,8BAAA;AAAA,EACV,MAAA,EAAQ,CAAC,QAAA,EAAU,SAAA,EAAW,SAAS,gBAAgB,CAAA;AAAA,EACvD,WAAA,EAAa;AACf,CAAA;AASA,SAAS,UAAA,GAA2B;AAClC,EAAA,QAAQ,OAAO,OAAoC,IAAA,KAAuC;AACxF,IAAA,MAAM,MAAM,OAAA,CAAQ,GAAA;AACpB,IAAA,MAAM,QAAA,GAAW,MAAM,iBAAA,CAAkB;AAAA,MACvC,QAAA,EAAU,QAAA;AAAA,MACV,KAAA,EAAO,aAAA;AAAA,MACP,KAAA,EAAO,mBAAA;AAAA,MACP;AAAA,KACD,CAAA;AACD,IAAA,IAAI,aAAa,MAAA,EAAW;AAM1B,MAAA,MAAM,IAAI,mBAAA;AAAA,QACR,8GAAA;AAAA,QACA,EAAE,MAAM,oBAAA;AAAqB,OAC/B;AAAA,IACF;AACA,IAAA,MAAM,SAAA,GAAY,eAAA,CAAgB,aAAA,EAAe,GAAG,CAAA,EAAG,UAAA;AACvD,IAAA,MAAM,OAAA,GAAU,IAAI,OAAA,CAAQ,IAAA,EAAM,OAAO,CAAA;AACzC,IAAA,OAAA,CAAQ,GAAA,CAAI,eAAA,EAAiB,CAAA,OAAA,EAAU,QAAA,CAAS,MAAM,CAAA,CAAE,CAAA;AACxD,IAAA,IAAI,SAAA,KAAc,MAAA,EAAW,OAAA,CAAQ,GAAA,CAAI,sBAAsB,SAAS,CAAA;AACxE,IAAA,OAAO,MAAM,KAAA,EAAO,EAAE,GAAG,IAAA,EAAM,SAAS,CAAA;AAAA,EAC1C,CAAA;AACF;AAEO,IAAM,cAAA,GAAkC;AAAA,EAC7C,IAAA,EAAM,gBAAA;AAAA,EACN,OAAA,EAAS,eAAA;AAAA,EACT,QAAA,EAAU,mBAAA;AAAA,EACV,OAAA,EAAS,uCAAA;AAAA,EACT,SAAS,EAAC;AAAA,EACV,cAAA,EAAgB;AAAA,IACd,wBAAA;AAAA,IACA,6BAAA;AAAA,IACA;AAAA,GACF;AAAA;AAAA;AAAA;AAAA,EAIA,YAAA,EAAc,EAAE,UAAA,EAAY,SAAA,EAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOtC,kBAAA,EAAoB,IAAA;AAAA,EACpB,SAAA,EAAW;AAAA;AAAA,IAET,KAAA,EAAO,MAAM,UAAA;AAAW;AAE5B,CAAA;;;AC5GO,IAAM,UAAA,GAA8B;AAAA,EACzC,IAAA,EAAM,YAAA;AAAA,EACN,OAAA,EAAS,kBAAA;AAAA,EACT,OAAA,EAAS,CAAC,IAAI,CAAA;AAAA;AAAA,EAEd,OAAA,EAAS,CAAC,oBAAA,EAAsB,gBAAgB,CAAA;AAAA,EAChD,QAAA,EAAU,SAAA;AAAA,EACV,OAAA,EAAS,2BAAA;AAAA,EACT,SAAA,EAAW,qCAAA;AAAA,EACX,QAAA,EAAU,eAAA;AAAA;AAAA,EAEV,cAAA,EAAgB,CAAC,oBAAA,EAAsB,4BAA4B,CAAA;AAAA;AAAA;AAAA,EAGnE,YAAA,EAAc,EAAE,cAAA,EAAgB,qBAAA,EAAuB,WAAW,SAAA;AACpE,CAAA;;;ACXO,IAAM,aAAa,uBAAA,CAAwB;AAAA,EAChD,IAAA,EAAM,YAAA;AAAA,EACN,OAAA,EAAS,2BAAA;AAAA,EACT,mBAAA,EAAqB,mBAAA;AAAA,EACrB,OAAA,EAAS,CAAC,oBAAoB,CAAA;AAAA,EAC9B,cAAA,EAAgB,CAAC,WAAA,EAAa,OAAO,CAAA;AAAA,EACrC,QAAA,EAAU;AACZ,CAAC,CAAA;;;ACVM,IAAM,WAAW,uBAAA,CAAwB;AAAA,EAC9C,IAAA,EAAM,UAAA;AAAA,EACN,OAAA,EAAS,CAAC,YAAY,CAAA;AAAA,EACtB,OAAA,EAAS,6BAAA;AAAA,EACT,OAAA,EAAS,CAAC,kBAAkB,CAAA;AAAA,EAC5B,cAAA,EAAgB,CAAC,gCAAgC,CAAA;AAAA,EACjD,QAAA,EAAU;AACZ,CAAC,CAAA;;;ACKM,IAAM,MAAA,GAA0B;AAAA,EACrC,IAAA,EAAM,QAAA;AAAA,EACN,OAAA,EAAS,oBAAA;AAAA;AAAA,EACT,OAAA,EAAS,CAAC,gCAAgC,CAAA;AAAA,EAC1C,QAAA,EAAU,WAAA;AAAA,EACV,OAAA,EAAS,+CAAA;AAAA,EACT,SAAA,EAAW,MAAA;AAAA,EACX,QAAA,EAAU,2BAAA;AAAA,EACV,cAAA,EAAgB;AAAA,IACd,6CAAA;AAAA,IACA;AAAA;AAEJ,CAAA;AAOO,SAAS,qBAAqB,IAAA,EAI1B;AACT,EAAA,MAAM,OACJ,IAAA,CAAK,QAAA,KAAa,WACd,2BAAA,GACA,CAAA,EAAG,KAAK,QAAQ,CAAA,0BAAA,CAAA;AACtB,EAAA,IAAI,IAAA,CAAK,iBAAiB,QAAA,EAAU;AAElC,IAAA,OAAO,WAAW,IAAI,CAAA,aAAA,EAAgB,KAAK,SAAS,CAAA,WAAA,EAAc,KAAK,QAAQ,CAAA,kBAAA,CAAA;AAAA,EACjF;AAEA,EAAA,OAAO,WAAW,IAAI,CAAA,aAAA,EAAgB,KAAK,SAAS,CAAA,WAAA,EAAc,KAAK,QAAQ,CAAA,qBAAA,CAAA;AACjF;AAGO,SAAS,kBAAkB,OAAA,EAAyC;AACzE,EAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,aAAa,CAAA,EAAG,OAAO,WAAA;AAC5C,EAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,UAAU,CAAA,EAAG,OAAO,QAAA;AACzC,EAAA,OAAO,QAAA;AACT;AAGO,SAAS,kBAAkB,OAAA,EAAyB;AACzD,EAAA,OAAO,OAAA,CAAQ,OAAA,CAAQ,+BAAA,EAAiC,EAAE,CAAA;AAC5D;;;AC1DO,IAAM,MAAM,uBAAA,CAAwB;AAAA,EACzC,IAAA,EAAM,KAAA;AAAA,EACN,OAAA,EAAS,CAAC,MAAM,CAAA;AAAA,EAChB,OAAA,EAAS,qBAAA;AAAA,EACT,OAAA,EAAS,CAAC,aAAa,CAAA;AAAA,EACvB,cAAA,EAAgB,CAAC,UAAA,EAAY,UAAU,CAAA;AAAA,EACvC,QAAA,EAAU;AACZ,CAAC,CAAA;;;ACyBD,IAAM,gBAAA,GAAmB,eAAA,CAAgB,2CAAA,EAA6C,OAAO;AAAA,EAC3F,IAAA,EAAM;AACR,CAAA,CAAE,CAAA;AAEK,SAAS,gBAAA,GAAyB;AACvC,EAAA,IAAI,iBAAiB,IAAA,EAAM;AAC3B,EAAA,gBAAA,CAAiB,IAAA,GAAO,IAAA;AAExB,EAAA,gBAAA,CAAiB,SAAS,CAAA;AAC1B,EAAA,gBAAA,CAAiB,MAAM,CAAA;AACvB,EAAA,gBAAA,CAAiB,cAAc,CAAA;AAC/B,EAAA,gBAAA,CAAiB,UAAU,CAAA;AAC3B,EAAA,gBAAA,CAAiB,MAAM,CAAA;AACvB,EAAA,gBAAA,CAAiB,MAAM,CAAA;AACvB,EAAA,gBAAA,CAAiB,QAAQ,CAAA;AACzB,EAAA,gBAAA,CAAiB,QAAQ,CAAA;AACzB,EAAA,gBAAA,CAAiB,OAAO,CAAA;AACxB,EAAA,gBAAA,CAAiB,MAAM,CAAA;AAEvB,EAAA,gBAAA,CAAiB,MAAM,CAAA;AACvB,EAAA,gBAAA,CAAiB,OAAO,CAAA;AACxB,EAAA,gBAAA,CAAiB,IAAI,CAAA;AACrB,EAAA,gBAAA,CAAiB,MAAM,CAAA;AACvB,EAAA,gBAAA,CAAiB,SAAS,CAAA;AAC1B,EAAA,gBAAA,CAAiB,QAAQ,CAAA;AACzB,EAAA,gBAAA,CAAiB,GAAG,CAAA;AACpB,EAAA,gBAAA,CAAiB,UAAU,CAAA;AAC3B,EAAA,gBAAA,CAAiB,QAAQ,CAAA;AAEzB,EAAA,wBAAA,EAAyB;AAC3B","file":"chunk-RZL2W4C3.js","sourcesContent":["/**\n * Provider registry (T3.2, ADR D107).\n *\n * `registerProvider` is idempotent and surface-warning: re-registering\n * a `name` logs to stderr (D107 last-writer-wins with WARN). Alias\n * collisions also warn (EC-5).\n *\n * @internal\n */\n\nimport { diag } from \"../diagnostics.js\";\nimport { globalSingleton } from \"../global-singleton.js\";\nimport type { ProviderProfile } from \"./types.js\";\n\n/**\n * M44 B1 fix — the registry state lives on `globalThis` keyed by `Symbol.for`, so EVERY bundle copy of this\n * module (tsup bundles each entry separately with `splitting: false` — `dist/index.js` and `dist/models.js`\n * each embed their own copy) shares the SAME maps. Without this, `@theokit/sdk/models`'s\n * `refreshModelCatalog` saw an eternally-empty registry and its patches were invisible to the core bundle's\n * capability/pricing lookups (state duplication made load-bearing by M44).\n */\nconst REGISTRY = globalSingleton(\n \"theokit-sdk.providers.registry\",\n () => new Map<string, ProviderProfile>(),\n);\nconst ALIASES = globalSingleton(\"theokit-sdk.providers.aliases\", () => new Map<string, string>());\n\n/** Routes look every provider name up in lowercase, so the registry keys by lowercase too. */\nfunction key(name: string): string {\n return name.toLowerCase();\n}\n\n/**\n * Registers `profile` under its lowercase name and lowercase aliases, because routes look provider\n * names up in lowercase: a profile named `AcmeAI` with alias `AcmeX` is reached by either spelling.\n */\nexport function registerProvider(input: ProviderProfile): void {\n const profile: ProviderProfile = {\n ...input,\n name: key(input.name),\n ...(input.aliases === undefined ? {} : { aliases: input.aliases.map(key) }),\n };\n if (REGISTRY.has(profile.name)) {\n diag(`[theokit-sdk] Provider \"${profile.name}\" overridden by user plugin.\\n`);\n }\n REGISTRY.set(profile.name, profile);\n for (const alias of profile.aliases ?? []) {\n // EC-5: surface alias collision so operators notice mis-routing.\n const previous = ALIASES.get(alias);\n if (previous !== undefined && previous !== profile.name) {\n diag(`[theokit-sdk] Alias \"${alias}\" collision: was \"${previous}\", now \"${profile.name}\".\\n`);\n }\n ALIASES.set(alias, profile.name);\n }\n}\n\nexport function getProviderProfile(name: string): ProviderProfile | undefined {\n const lower = key(name);\n return REGISTRY.get(ALIASES.get(lower) ?? lower);\n}\n\nexport function listProviders(): ProviderProfile[] {\n return Array.from(REGISTRY.values());\n}\n\n/** Test-only reset. @internal */\nexport function _resetProvidersForTests(): void {\n REGISTRY.clear();\n ALIASES.clear();\n}\n","import { z } from \"zod\";\n\n/**\n * M44 — the per-model catalog sub-schema. Field names mirror models.dev VERBATIM (snake_case) so\n * `scripts/refresh-catalog.mjs` regenerates the vendored data mechanically from `api.json` with zero\n * renaming (ADR D1).\n * TOLERANT by design: every field optional, unknown keys ignored — models.dev adds fields over time and\n * additive drift must never break the loader (Blueprint §6.4).\n *\n * theokit extensions beyond models.dev: `structured_output` / `cache_control` (both already exist on the\n * SDK's `ModelCapabilities`; models.dev has no such flags).\n *\n * Semver-exempt: nothing here is declared in `package.json` `exports`. `MODALITIES` is nonetheless\n * reachable from published declarations through the type graph, so it must be EMITTED.\n *\n * NOTE — no internal-visibility tag in this block. `tsconfig.base.json` sets `stripInternal: true`,\n * and TypeScript scans EVERY leading comment range of the declaration that follows; the tag that\n * used to sit here deleted the `MODALITIES` declaration below from the emitted `.d.ts`.\n */\n\nexport const MODALITIES = [\"text\", \"audio\", \"image\", \"video\", \"pdf\"] as const;\n\n/**\n * One input or output medium a model accepts or produces.\n *\n * The union is derived from `MODALITIES`, so it is closed: a models.dev entry whose\n * `modalities.input` or `modalities.output` array contains a string outside this set fails\n * `catalogModelSchema.safeParse`, and `patchIndexFromApiJson` drops that single model rather\n * than the whole payload. Widening the catalog to a new medium means adding it to `MODALITIES`\n * first — nothing else in the schema enumerates media.\n */\nexport type Modality = (typeof MODALITIES)[number];\n\nconst costSchema = z\n .object({\n /** USD per 1M tokens (models.dev convention). */\n input: z.number().nonnegative(),\n output: z.number().nonnegative(),\n cache_read: z.number().nonnegative().optional(),\n cache_write: z.number().nonnegative().optional(),\n })\n .loose();\n\nconst limitSchema = z\n .object({\n context: z.number().positive(),\n input: z.number().positive().optional(),\n output: z.number().positive().optional(),\n })\n .loose();\n\nconst modalitiesSchema = z\n .object({\n input: z.array(z.enum(MODALITIES)).optional(),\n output: z.array(z.enum(MODALITIES)).optional(),\n })\n .loose();\n\nexport const catalogModelSchema = z\n .object({\n name: z.string().optional(),\n release_date: z.string().optional(),\n attachment: z.boolean().optional(),\n reasoning: z.boolean().optional(),\n temperature: z.boolean().optional(),\n tool_call: z.boolean().optional(),\n /** theokit extension — maps to ModelCapabilities.supportsStructuredOutput. */\n structured_output: z.boolean().optional(),\n /** theokit extension — maps to ModelCapabilities.supportsCacheControl. */\n cache_control: z.boolean().optional(),\n cost: costSchema.optional(),\n limit: limitSchema.optional(),\n modalities: modalitiesSchema.optional(),\n status: z.enum([\"alpha\", \"beta\", \"deprecated\"]).optional(),\n })\n .loose();\n\n/**\n * One model entry as it is stored in the vendored catalog and as models.dev publishes it.\n *\n * Every field is optional, so an entry that carries only `name` still parses. Reading a value\n * therefore means handling `undefined` at each level — `model.cost?.cache_read`, not\n * `model.cost.cache_read`. Field names are models.dev's own snake_case, kept verbatim so the\n * refresh script can copy `api.json` across without renaming.\n *\n * The schema is loose rather than strict: unknown keys survive parsing and stay on the returned\n * object instead of being rejected or dropped. That is what lets models.dev add a field without\n * breaking the loader — the cost is that a typo in a key name parses silently, so a caller\n * cannot use \"it parsed\" as evidence that a field it expected was present.\n *\n * `structured_output` and `cache_control` are theokit's own additions; models.dev publishes\n * neither.\n */\nexport type CatalogModel = z.infer<typeof catalogModelSchema>;\n\n/**\n * Per-token pricing for one model, in USD per 1M tokens (models.dev's unit — not per token, and\n * not per 1K).\n *\n * `input` and `output` are required and non-negative; the two cache buckets are optional and\n * absent for models that do not price caching separately. Absent is not zero: a missing\n * `cache_read` means the catalog says nothing about the cost of a cache hit, so a caller that\n * defaults it to 0 is asserting free cache reads on its own authority.\n *\n * Like `CatalogModel`, the shape is loose — unknown pricing keys published upstream are kept on\n * the parsed value.\n */\nexport type CatalogModelCost = z.infer<typeof costSchema>;\n\n/**\n * One provider entry in the vendored catalog.\n *\n * LOOSE like `catalogModelSchema` beside it, and for the same reason: this validates a vendored data\n * file that upstream extends over time, so unknown keys are kept rather than rejected. What it does\n * NOT do is what the hand-rolled check it replaced did — assert. That check tested nine fields with\n * `typeof`/`Array.isArray` and then cast the whole object through `as unknown as CatalogEntry`, so\n * `capabilities`' contents, `aliases`, `modelsUrl`, `hostname`, `extraHeaders` and `models` were\n * declared and never checked. Standing next to zod — one of this package's three runtime\n * dependencies — and reimplementing a worse version of it is the Don't-Reinvent rung of\n * `rules/parsimony-ladder.md`.\n *\n * `apiMode` and `authType` are the closed unions from `types/provider-profile.ts`. Enumerating them\n * here means an entry naming a mode the SDK cannot dispatch is dropped with a WARN at load, instead\n * of reaching `selectTransport` as a string that matches no branch.\n */\nexport const catalogEntrySchema = z\n .object({\n id: z.string().min(1),\n displayName: z.string().min(1),\n apiMode: z.enum([\n \"chat_completions\",\n \"anthropic_messages\",\n \"responses_api\",\n \"bedrock\",\n \"bedrock_anthropic\",\n ]),\n authType: z.enum([\n \"api_key\",\n \"oauth_device_code\",\n \"oauth_external\",\n \"aws_sdk\",\n \"aws_bearer\",\n \"gcp_oauth\",\n \"none\",\n ]),\n baseUrl: z.string(),\n envVars: z.array(z.string()),\n fallbackModels: z.array(z.string()),\n capabilities: z.object({\n supportsToolUse: z.boolean(),\n supportsVision: z.boolean(),\n supportsStructuredOutput: z.boolean(),\n supportsStreaming: z.boolean(),\n supportsCacheControl: z.boolean(),\n maxContextTokens: z.number().int().positive().optional(),\n maxOutputTokens: z.number().int().positive().optional(),\n }),\n aliases: z.array(z.string()).optional(),\n modelsUrl: z.string().optional(),\n hostname: z.string().optional(),\n extraHeaders: z.record(z.string(), z.string()).optional(),\n models: z.record(z.string(), catalogModelSchema).optional(),\n })\n .loose();\n","[\n {\n \"id\": \"openai\",\n \"displayName\": \"OpenAI\",\n \"apiMode\": \"chat_completions\",\n \"authType\": \"api_key\",\n \"baseUrl\": \"https://api.openai.com/v1\",\n \"envVars\": [\"OPENAI_API_KEY\"],\n \"fallbackModels\": [\"gpt-4o-mini\", \"gpt-4o\"],\n \"capabilities\": {\n \"supportsToolUse\": true,\n \"supportsVision\": true,\n \"supportsStructuredOutput\": true,\n \"supportsStreaming\": true,\n \"supportsCacheControl\": false\n },\n \"aliases\": [\"openai\", \"openai-chatgpt\"],\n \"models\": {\n \"gpt-4o-mini\": {\n \"name\": \"GPT-4o mini\",\n \"release_date\": \"2024-07-18\",\n \"attachment\": true,\n \"reasoning\": false,\n \"temperature\": true,\n \"tool_call\": true,\n \"structured_output\": true,\n \"cost\": {\n \"input\": 0.15,\n \"output\": 0.6,\n \"cache_read\": 0.075\n },\n \"limit\": {\n \"context\": 128000,\n \"output\": 16384\n },\n \"modalities\": {\n \"input\": [\"text\", \"image\"],\n \"output\": [\"text\"]\n },\n \"cache_control\": false\n },\n \"gpt-4o\": {\n \"name\": \"GPT-4o\",\n \"release_date\": \"2024-05-13\",\n \"attachment\": true,\n \"reasoning\": false,\n \"temperature\": true,\n \"tool_call\": true,\n \"structured_output\": true,\n \"cost\": {\n \"input\": 2.5,\n \"output\": 10,\n \"cache_read\": 1.25\n },\n \"limit\": {\n \"context\": 128000,\n \"output\": 16384\n },\n \"modalities\": {\n \"input\": [\"text\", \"image\"],\n \"output\": [\"text\"]\n },\n \"cache_control\": false\n },\n \"gpt-4-turbo\": {\n \"name\": \"GPT-4 Turbo\",\n \"release_date\": \"2023-11-06\",\n \"attachment\": true,\n \"reasoning\": false,\n \"temperature\": true,\n \"tool_call\": true,\n \"structured_output\": false,\n \"cost\": {\n \"input\": 10,\n \"output\": 30\n },\n \"limit\": {\n \"context\": 128000,\n \"output\": 4096\n },\n \"modalities\": {\n \"input\": [\"text\", \"image\"],\n \"output\": [\"text\"]\n },\n \"cache_control\": false\n },\n \"o1\": {\n \"name\": \"o1\",\n \"release_date\": \"2024-12-05\",\n \"attachment\": true,\n \"reasoning\": true,\n \"temperature\": false,\n \"tool_call\": true,\n \"structured_output\": true,\n \"cost\": {\n \"input\": 15,\n \"output\": 60,\n \"cache_read\": 7.5\n },\n \"limit\": {\n \"context\": 200000,\n \"output\": 100000\n },\n \"modalities\": {\n \"input\": [\"text\"],\n \"output\": [\"text\"]\n },\n \"cache_control\": false\n },\n \"o3\": {\n \"name\": \"o3\",\n \"release_date\": \"2025-04-16\",\n \"attachment\": true,\n \"reasoning\": true,\n \"temperature\": false,\n \"tool_call\": true,\n \"structured_output\": true,\n \"cost\": {\n \"input\": 2,\n \"output\": 8,\n \"cache_read\": 0.5\n },\n \"limit\": {\n \"context\": 200000,\n \"output\": 100000\n },\n \"modalities\": {\n \"input\": [\"text\"],\n \"output\": [\"text\"]\n },\n \"cache_control\": false\n },\n \"gpt-4.1\": {\n \"name\": \"GPT-4.1\",\n \"release_date\": \"2025-04-14\",\n \"attachment\": true,\n \"reasoning\": false,\n \"temperature\": true,\n \"tool_call\": true,\n \"structured_output\": true,\n \"cost\": {\n \"input\": 2,\n \"output\": 8,\n \"cache_read\": 0.5\n },\n \"limit\": {\n \"context\": 1047576,\n \"output\": 32768\n },\n \"modalities\": {\n \"input\": [\"text\", \"image\"],\n \"output\": [\"text\"]\n },\n \"cache_control\": false\n },\n \"gpt-5.4\": {\n \"limit\": {\n \"context\": 400000,\n \"output\": 128000\n }\n },\n \"gpt-5.4-mini\": {\n \"limit\": {\n \"context\": 400000,\n \"output\": 128000\n }\n },\n \"gpt-5.3\": {\n \"limit\": {\n \"context\": 400000,\n \"output\": 128000\n }\n },\n \"gpt-5.2\": {\n \"limit\": {\n \"context\": 400000,\n \"output\": 128000\n }\n }\n }\n },\n {\n \"id\": \"anthropic\",\n \"displayName\": \"Anthropic\",\n \"apiMode\": \"anthropic_messages\",\n \"authType\": \"api_key\",\n \"baseUrl\": \"https://api.anthropic.com/v1\",\n \"envVars\": [\"ANTHROPIC_API_KEY\"],\n \"fallbackModels\": [\"claude-sonnet-4-20250514\", \"claude-3-5-haiku-latest\"],\n \"capabilities\": {\n \"supportsToolUse\": true,\n \"supportsVision\": true,\n \"supportsStructuredOutput\": false,\n \"supportsStreaming\": true,\n \"supportsCacheControl\": true\n },\n \"aliases\": [\"anthropic\"],\n \"models\": {\n \"claude-3-5-haiku-latest\": {\n \"tool_call\": true,\n \"structured_output\": false,\n \"cache_control\": true,\n \"modalities\": {\n \"input\": [\"text\"]\n },\n \"limit\": {\n \"context\": 200000,\n \"output\": 8192\n }\n },\n \"claude-opus-4-7\": {\n \"name\": \"Claude Opus 4.7\",\n \"release_date\": \"2026-04-14\",\n \"attachment\": true,\n \"reasoning\": true,\n \"temperature\": false,\n \"tool_call\": true,\n \"structured_output\": true,\n \"cost\": {\n \"input\": 5,\n \"output\": 25,\n \"cache_read\": 0.5,\n \"cache_write\": 6.25\n },\n \"limit\": {\n \"context\": 1000000,\n \"output\": 128000\n },\n \"modalities\": {\n \"input\": [\"text\", \"image\", \"pdf\"],\n \"output\": [\"text\"]\n },\n \"cache_control\": true\n },\n \"claude-sonnet-4-6\": {\n \"name\": \"Claude Sonnet 4.6\",\n \"release_date\": \"2026-02-17\",\n \"attachment\": true,\n \"reasoning\": true,\n \"temperature\": true,\n \"tool_call\": true,\n \"structured_output\": true,\n \"cost\": {\n \"input\": 3,\n \"output\": 15,\n \"cache_read\": 0.3,\n \"cache_write\": 3.75\n },\n \"limit\": {\n \"context\": 1000000,\n \"output\": 128000\n },\n \"modalities\": {\n \"input\": [\"text\", \"image\", \"pdf\"],\n \"output\": [\"text\"]\n },\n \"cache_control\": true\n },\n \"claude-haiku-4-5-20251001\": {\n \"name\": \"Claude Haiku 4.5\",\n \"release_date\": \"2025-10-15\",\n \"attachment\": true,\n \"reasoning\": true,\n \"temperature\": true,\n \"tool_call\": true,\n \"structured_output\": true,\n \"cost\": {\n \"input\": 1,\n \"output\": 5,\n \"cache_read\": 0.1,\n \"cache_write\": 1.25\n },\n \"limit\": {\n \"context\": 200000,\n \"output\": 64000\n },\n \"modalities\": {\n \"input\": [\"text\", \"image\", \"pdf\"],\n \"output\": [\"text\"]\n },\n \"cache_control\": true\n },\n \"claude-opus-4\": {\n \"tool_call\": true,\n \"structured_output\": false,\n \"cache_control\": true,\n \"modalities\": {\n \"input\": [\"text\", \"image\"]\n },\n \"limit\": {\n \"context\": 200000,\n \"output\": 32000\n }\n },\n \"claude-sonnet-4\": {\n \"tool_call\": true,\n \"structured_output\": false,\n \"cache_control\": true,\n \"modalities\": {\n \"input\": [\"text\", \"image\"]\n },\n \"limit\": {\n \"context\": 200000,\n \"output\": 16000\n }\n },\n \"claude-3-5-sonnet\": {\n \"tool_call\": true,\n \"structured_output\": false,\n \"cache_control\": true,\n \"modalities\": {\n \"input\": [\"text\", \"image\"]\n },\n \"limit\": {\n \"context\": 200000,\n \"output\": 8192\n }\n },\n \"claude-3-5-sonnet-latest\": {\n \"tool_call\": true,\n \"structured_output\": false,\n \"cache_control\": true,\n \"modalities\": {\n \"input\": [\"text\", \"image\"]\n },\n \"limit\": {\n \"context\": 200000,\n \"output\": 8192\n }\n },\n \"claude-3-haiku\": {\n \"tool_call\": true,\n \"structured_output\": false,\n \"cache_control\": true,\n \"modalities\": {\n \"input\": [\"text\", \"image\"]\n },\n \"limit\": {\n \"context\": 200000,\n \"output\": 4096\n }\n },\n \"claude-3-opus\": {\n \"tool_call\": true,\n \"structured_output\": false,\n \"cache_control\": true,\n \"modalities\": {\n \"input\": [\"text\", \"image\"]\n },\n \"limit\": {\n \"context\": 200000,\n \"output\": 4096\n }\n },\n \"claude-opus-4.1\": {\n \"tool_call\": true,\n \"structured_output\": false,\n \"cache_control\": true,\n \"modalities\": {\n \"input\": [\"text\", \"image\"]\n },\n \"limit\": {\n \"context\": 200000,\n \"output\": 32000\n }\n },\n \"claude-sonnet-4.5\": {\n \"tool_call\": true,\n \"structured_output\": false,\n \"cache_control\": true,\n \"modalities\": {\n \"input\": [\"text\", \"image\"]\n },\n \"limit\": {\n \"context\": 200000,\n \"output\": 16000\n }\n },\n \"claude-3.5-sonnet\": {\n \"tool_call\": true,\n \"structured_output\": false,\n \"cache_control\": true,\n \"modalities\": {\n \"input\": [\"text\", \"image\"]\n },\n \"limit\": {\n \"context\": 200000,\n \"output\": 8192\n }\n }\n }\n },\n {\n \"id\": \"openrouter\",\n \"displayName\": \"OpenRouter\",\n \"apiMode\": \"chat_completions\",\n \"authType\": \"api_key\",\n \"baseUrl\": \"https://openrouter.ai/api/v1\",\n \"envVars\": [\"OPENROUTER_API_KEY\"],\n \"fallbackModels\": [\"openai/gpt-4o-mini\"],\n \"capabilities\": {\n \"supportsToolUse\": true,\n \"supportsVision\": true,\n \"supportsStructuredOutput\": true,\n \"supportsStreaming\": true,\n \"supportsCacheControl\": false\n },\n \"aliases\": [\"openrouter\"]\n },\n {\n \"id\": \"groq\",\n \"displayName\": \"Groq\",\n \"apiMode\": \"chat_completions\",\n \"authType\": \"api_key\",\n \"baseUrl\": \"https://api.groq.com/openai/v1\",\n \"envVars\": [\"GROQ_API_KEY\"],\n \"fallbackModels\": [\"llama-3.3-70b-versatile\"],\n \"capabilities\": {\n \"supportsToolUse\": true,\n \"supportsVision\": true,\n \"supportsStructuredOutput\": true,\n \"supportsStreaming\": true,\n \"supportsCacheControl\": false\n },\n \"models\": {\n \"llama-3.3-70b-versatile\": {\n \"name\": \"Llama 3.3 70B\",\n \"release_date\": \"2024-12-06\",\n \"attachment\": false,\n \"reasoning\": false,\n \"temperature\": true,\n \"tool_call\": true,\n \"cost\": {\n \"input\": 0.59,\n \"output\": 0.79\n },\n \"limit\": {\n \"context\": 131072,\n \"output\": 32768\n },\n \"modalities\": {\n \"input\": [\"text\"],\n \"output\": [\"text\"]\n }\n }\n }\n },\n {\n \"id\": \"mistral\",\n \"displayName\": \"Mistral AI\",\n \"apiMode\": \"chat_completions\",\n \"authType\": \"api_key\",\n \"baseUrl\": \"https://api.mistral.ai/v1\",\n \"envVars\": [\"MISTRAL_API_KEY\"],\n \"fallbackModels\": [\"mistral-large-latest\"],\n \"capabilities\": {\n \"supportsToolUse\": true,\n \"supportsVision\": true,\n \"supportsStructuredOutput\": true,\n \"supportsStreaming\": true,\n \"supportsCacheControl\": false\n },\n \"models\": {\n \"mistral-large-latest\": {\n \"name\": \"Mistral Large (latest)\",\n \"release_date\": \"2024-11-01\",\n \"attachment\": true,\n \"reasoning\": false,\n \"temperature\": true,\n \"tool_call\": true,\n \"cost\": {\n \"input\": 0.5,\n \"output\": 1.5\n },\n \"limit\": {\n \"context\": 262144,\n \"output\": 262144\n },\n \"modalities\": {\n \"input\": [\"text\", \"image\"],\n \"output\": [\"text\"]\n }\n }\n }\n },\n {\n \"id\": \"deepseek\",\n \"displayName\": \"DeepSeek\",\n \"apiMode\": \"chat_completions\",\n \"authType\": \"api_key\",\n \"baseUrl\": \"https://api.deepseek.com/v1\",\n \"envVars\": [\"DEEPSEEK_API_KEY\"],\n \"fallbackModels\": [\"deepseek-chat\"],\n \"capabilities\": {\n \"supportsToolUse\": true,\n \"supportsVision\": false,\n \"supportsStructuredOutput\": true,\n \"supportsStreaming\": true,\n \"supportsCacheControl\": false\n },\n \"models\": {\n \"deepseek-chat\": {\n \"name\": \"DeepSeek Chat\",\n \"release_date\": \"2025-12-01\",\n \"attachment\": true,\n \"reasoning\": false,\n \"temperature\": true,\n \"tool_call\": true,\n \"cost\": {\n \"input\": 0.14,\n \"output\": 0.28,\n \"cache_read\": 0.0028\n },\n \"limit\": {\n \"context\": 1000000,\n \"output\": 384000\n },\n \"modalities\": {\n \"input\": [\"text\"],\n \"output\": [\"text\"]\n }\n },\n \"deepseek-v4-flash\": {\n \"name\": \"DeepSeek V4 Flash\",\n \"release_date\": \"2026-04-24\",\n \"attachment\": false,\n \"reasoning\": true,\n \"temperature\": true,\n \"tool_call\": true,\n \"structured_output\": false,\n \"cost\": {\n \"input\": 0.14,\n \"output\": 0.28,\n \"cache_read\": 0.0028\n },\n \"limit\": {\n \"context\": 1048576,\n \"output\": 8000\n },\n \"modalities\": {\n \"input\": [\"text\"],\n \"output\": [\"text\"]\n },\n \"cache_control\": false\n },\n \"deepseek-v3.2\": {\n \"tool_call\": true,\n \"structured_output\": false,\n \"cache_control\": false,\n \"modalities\": {\n \"input\": [\"text\"]\n },\n \"limit\": {\n \"context\": 131072,\n \"output\": 8000\n }\n }\n }\n },\n {\n \"id\": \"together\",\n \"displayName\": \"Together AI\",\n \"apiMode\": \"chat_completions\",\n \"authType\": \"api_key\",\n \"baseUrl\": \"https://api.together.xyz/v1\",\n \"envVars\": [\"TOGETHER_API_KEY\"],\n \"fallbackModels\": [\"meta-llama/Meta-Llama-3.1-70B-Instruct-Turbo\"],\n \"capabilities\": {\n \"supportsToolUse\": true,\n \"supportsVision\": true,\n \"supportsStructuredOutput\": true,\n \"supportsStreaming\": true,\n \"supportsCacheControl\": false\n }\n },\n {\n \"id\": \"fireworks\",\n \"displayName\": \"Fireworks AI\",\n \"apiMode\": \"chat_completions\",\n \"authType\": \"api_key\",\n \"baseUrl\": \"https://api.fireworks.ai/inference/v1\",\n \"envVars\": [\"FIREWORKS_API_KEY\"],\n \"fallbackModels\": [\"accounts/fireworks/models/llama-v3p1-70b-instruct\"],\n \"capabilities\": {\n \"supportsToolUse\": true,\n \"supportsVision\": true,\n \"supportsStructuredOutput\": true,\n \"supportsStreaming\": true,\n \"supportsCacheControl\": false\n }\n },\n {\n \"id\": \"google-gemini\",\n \"displayName\": \"Google Gemini\",\n \"apiMode\": \"chat_completions\",\n \"authType\": \"api_key\",\n \"baseUrl\": \"https://generativelanguage.googleapis.com/v1beta/openai\",\n \"envVars\": [\"GOOGLE_API_KEY\", \"GEMINI_API_KEY\"],\n \"fallbackModels\": [\"gemini-2.0-flash\"],\n \"capabilities\": {\n \"supportsToolUse\": true,\n \"supportsVision\": true,\n \"supportsStructuredOutput\": true,\n \"supportsStreaming\": true,\n \"supportsCacheControl\": false\n },\n \"aliases\": [\"gemini\", \"google\"],\n \"models\": {\n \"gemini-2.0-flash\": {\n \"name\": \"Gemini 2.0 Flash\",\n \"release_date\": \"2024-12-11\",\n \"attachment\": true,\n \"reasoning\": false,\n \"temperature\": true,\n \"tool_call\": true,\n \"structured_output\": true,\n \"cost\": {\n \"input\": 0.1,\n \"output\": 0.4,\n \"cache_read\": 0.025\n },\n \"limit\": {\n \"context\": 1048576,\n \"output\": 8192\n },\n \"modalities\": {\n \"input\": [\"text\", \"image\", \"audio\", \"video\", \"pdf\"],\n \"output\": [\"text\"]\n },\n \"status\": \"deprecated\"\n },\n \"gemini-2.5-flash-lite\": {\n \"name\": \"Gemini 2.5 Flash-Lite\",\n \"release_date\": \"2025-06-17\",\n \"attachment\": true,\n \"reasoning\": true,\n \"temperature\": true,\n \"tool_call\": true,\n \"structured_output\": true,\n \"cost\": {\n \"input\": 0.1,\n \"output\": 0.4,\n \"cache_read\": 0.01\n },\n \"limit\": {\n \"context\": 1048576,\n \"output\": 8000\n },\n \"modalities\": {\n \"input\": [\"text\", \"image\"],\n \"output\": [\"text\"]\n },\n \"cache_control\": false\n },\n \"gemini-2.5-pro\": {\n \"name\": \"Gemini 2.5 Pro\",\n \"release_date\": \"2025-06-17\",\n \"attachment\": true,\n \"reasoning\": true,\n \"temperature\": true,\n \"tool_call\": true,\n \"structured_output\": true,\n \"cost\": {\n \"input\": 1.25,\n \"output\": 10,\n \"cache_read\": 0.125\n },\n \"limit\": {\n \"context\": 1048576,\n \"output\": 8000\n },\n \"modalities\": {\n \"input\": [\"text\", \"image\"],\n \"output\": [\"text\"]\n },\n \"cache_control\": false\n }\n }\n },\n {\n \"id\": \"ollama\",\n \"displayName\": \"Ollama\",\n \"apiMode\": \"chat_completions\",\n \"authType\": \"none\",\n \"baseUrl\": \"http://localhost:11434/v1\",\n \"envVars\": [],\n \"fallbackModels\": [\"llama3.2\"],\n \"capabilities\": {\n \"supportsToolUse\": true,\n \"supportsVision\": true,\n \"supportsStructuredOutput\": true,\n \"supportsStreaming\": true,\n \"supportsCacheControl\": false\n },\n \"aliases\": [\"ollama\"]\n },\n {\n \"id\": \"lmstudio\",\n \"displayName\": \"LM Studio\",\n \"apiMode\": \"chat_completions\",\n \"authType\": \"none\",\n \"baseUrl\": \"http://localhost:1234/v1\",\n \"envVars\": [],\n \"fallbackModels\": [\"lmstudio-community/default\"],\n \"capabilities\": {\n \"supportsToolUse\": true,\n \"supportsVision\": false,\n \"supportsStructuredOutput\": true,\n \"supportsStreaming\": true,\n \"supportsCacheControl\": false\n },\n \"aliases\": [\"lmstudio\"]\n },\n {\n \"id\": \"llamacpp\",\n \"displayName\": \"llama.cpp\",\n \"apiMode\": \"chat_completions\",\n \"authType\": \"none\",\n \"baseUrl\": \"http://localhost:8080/v1\",\n \"envVars\": [],\n \"fallbackModels\": [\"default\"],\n \"capabilities\": {\n \"supportsToolUse\": true,\n \"supportsVision\": false,\n \"supportsStructuredOutput\": false,\n \"supportsStreaming\": true,\n \"supportsCacheControl\": false\n },\n \"aliases\": [\"llamacpp\"]\n },\n {\n \"id\": \"bedrock\",\n \"displayName\": \"AWS Bedrock\",\n \"apiMode\": \"bedrock\",\n \"authType\": \"aws_sdk\",\n \"baseUrl\": \"https://bedrock-runtime.us-east-1.amazonaws.com\",\n \"envVars\": [\"AWS_ACCESS_KEY_ID\", \"AWS_SECRET_ACCESS_KEY\"],\n \"fallbackModels\": [\"anthropic.claude-3-5-sonnet-20241022-v2:0\"],\n \"capabilities\": {\n \"supportsToolUse\": true,\n \"supportsVision\": true,\n \"supportsStructuredOutput\": false,\n \"supportsStreaming\": true,\n \"supportsCacheControl\": true\n },\n \"aliases\": [\"bedrock\"]\n },\n {\n \"id\": \"vertex\",\n \"displayName\": \"Google Vertex AI\",\n \"apiMode\": \"chat_completions\",\n \"authType\": \"gcp_oauth\",\n \"baseUrl\": \"https://us-central1-aiplatform.googleapis.com/v1\",\n \"envVars\": [\"GOOGLE_APPLICATION_CREDENTIALS\"],\n \"fallbackModels\": [\"gemini-1.5-pro\"],\n \"capabilities\": {\n \"supportsToolUse\": true,\n \"supportsVision\": true,\n \"supportsStructuredOutput\": true,\n \"supportsStreaming\": true,\n \"supportsCacheControl\": false\n },\n \"aliases\": [\"vertex\"]\n },\n {\n \"id\": \"cohere\",\n \"displayName\": \"Cohere\",\n \"apiMode\": \"chat_completions\",\n \"authType\": \"api_key\",\n \"baseUrl\": \"https://api.cohere.com/v2\",\n \"envVars\": [\"COHERE_API_KEY\"],\n \"fallbackModels\": [\"command-r-plus\"],\n \"capabilities\": {\n \"supportsToolUse\": true,\n \"supportsVision\": false,\n \"supportsStructuredOutput\": true,\n \"supportsStreaming\": true,\n \"supportsCacheControl\": false\n }\n },\n {\n \"id\": \"perplexity\",\n \"displayName\": \"Perplexity\",\n \"apiMode\": \"chat_completions\",\n \"authType\": \"api_key\",\n \"baseUrl\": \"https://api.perplexity.ai\",\n \"envVars\": [\"PERPLEXITY_API_KEY\"],\n \"fallbackModels\": [\"llama-3.1-sonar-large-128k-online\"],\n \"capabilities\": {\n \"supportsToolUse\": false,\n \"supportsVision\": false,\n \"supportsStructuredOutput\": false,\n \"supportsStreaming\": true,\n \"supportsCacheControl\": false\n }\n },\n {\n \"id\": \"xai\",\n \"displayName\": \"xAI (Grok)\",\n \"apiMode\": \"chat_completions\",\n \"authType\": \"api_key\",\n \"baseUrl\": \"https://api.x.ai/v1\",\n \"envVars\": [\"XAI_API_KEY\"],\n \"fallbackModels\": [\"grok-2\"],\n \"capabilities\": {\n \"supportsToolUse\": true,\n \"supportsVision\": true,\n \"supportsStructuredOutput\": true,\n \"supportsStreaming\": true,\n \"supportsCacheControl\": false\n },\n \"aliases\": [\"grok\"]\n },\n {\n \"id\": \"sambanova\",\n \"displayName\": \"SambaNova\",\n \"apiMode\": \"chat_completions\",\n \"authType\": \"api_key\",\n \"baseUrl\": \"https://api.sambanova.ai/v1\",\n \"envVars\": [\"SAMBANOVA_API_KEY\"],\n \"fallbackModels\": [\"Meta-Llama-3.1-70B-Instruct\"],\n \"capabilities\": {\n \"supportsToolUse\": true,\n \"supportsVision\": false,\n \"supportsStructuredOutput\": true,\n \"supportsStreaming\": true,\n \"supportsCacheControl\": false\n }\n },\n {\n \"id\": \"cerebras\",\n \"displayName\": \"Cerebras\",\n \"apiMode\": \"chat_completions\",\n \"authType\": \"api_key\",\n \"baseUrl\": \"https://api.cerebras.ai/v1\",\n \"envVars\": [\"CEREBRAS_API_KEY\"],\n \"fallbackModels\": [\"llama3.1-70b\"],\n \"capabilities\": {\n \"supportsToolUse\": true,\n \"supportsVision\": false,\n \"supportsStructuredOutput\": true,\n \"supportsStreaming\": true,\n \"supportsCacheControl\": false\n }\n },\n {\n \"id\": \"deepinfra\",\n \"displayName\": \"DeepInfra\",\n \"apiMode\": \"chat_completions\",\n \"authType\": \"api_key\",\n \"baseUrl\": \"https://api.deepinfra.com/v1/openai\",\n \"envVars\": [\"DEEPINFRA_API_KEY\"],\n \"fallbackModels\": [\"meta-llama/Meta-Llama-3.1-70B-Instruct\"],\n \"capabilities\": {\n \"supportsToolUse\": true,\n \"supportsVision\": true,\n \"supportsStructuredOutput\": true,\n \"supportsStreaming\": true,\n \"supportsCacheControl\": false\n }\n },\n {\n \"id\": \"huggingface\",\n \"displayName\": \"Hugging Face\",\n \"apiMode\": \"chat_completions\",\n \"authType\": \"api_key\",\n \"baseUrl\": \"https://api-inference.huggingface.co/v1\",\n \"envVars\": [\"HF_TOKEN\", \"HUGGINGFACE_API_KEY\"],\n \"fallbackModels\": [\"meta-llama/Llama-3.2-3B-Instruct\"],\n \"capabilities\": {\n \"supportsToolUse\": true,\n \"supportsVision\": false,\n \"supportsStructuredOutput\": false,\n \"supportsStreaming\": true,\n \"supportsCacheControl\": false\n }\n },\n {\n \"id\": \"nvidia\",\n \"displayName\": \"NVIDIA NIM\",\n \"apiMode\": \"chat_completions\",\n \"authType\": \"api_key\",\n \"baseUrl\": \"https://integrate.api.nvidia.com/v1\",\n \"envVars\": [\"NVIDIA_API_KEY\"],\n \"fallbackModels\": [\"meta/llama-3.1-70b-instruct\"],\n \"capabilities\": {\n \"supportsToolUse\": true,\n \"supportsVision\": true,\n \"supportsStructuredOutput\": true,\n \"supportsStreaming\": true,\n \"supportsCacheControl\": false\n }\n },\n {\n \"id\": \"lepton\",\n \"displayName\": \"Lepton AI\",\n \"apiMode\": \"chat_completions\",\n \"authType\": \"api_key\",\n \"baseUrl\": \"https://llama3-1-70b.lepton.run/api/v1\",\n \"envVars\": [\"LEPTON_API_KEY\"],\n \"fallbackModels\": [\"llama3-1-70b\"],\n \"capabilities\": {\n \"supportsToolUse\": true,\n \"supportsVision\": false,\n \"supportsStructuredOutput\": false,\n \"supportsStreaming\": true,\n \"supportsCacheControl\": false\n }\n },\n {\n \"id\": \"anyscale\",\n \"displayName\": \"Anyscale\",\n \"apiMode\": \"chat_completions\",\n \"authType\": \"api_key\",\n \"baseUrl\": \"https://api.endpoints.anyscale.com/v1\",\n \"envVars\": [\"ANYSCALE_API_KEY\"],\n \"fallbackModels\": [\"meta-llama/Meta-Llama-3-70B-Instruct\"],\n \"capabilities\": {\n \"supportsToolUse\": true,\n \"supportsVision\": false,\n \"supportsStructuredOutput\": true,\n \"supportsStreaming\": true,\n \"supportsCacheControl\": false\n }\n },\n {\n \"id\": \"replicate\",\n \"displayName\": \"Replicate\",\n \"apiMode\": \"chat_completions\",\n \"authType\": \"api_key\",\n \"baseUrl\": \"https://openai-proxy.replicate.com/v1\",\n \"envVars\": [\"REPLICATE_API_TOKEN\"],\n \"fallbackModels\": [\"meta/meta-llama-3-70b-instruct\"],\n \"capabilities\": {\n \"supportsToolUse\": false,\n \"supportsVision\": true,\n \"supportsStructuredOutput\": false,\n \"supportsStreaming\": true,\n \"supportsCacheControl\": false\n }\n },\n {\n \"id\": \"ai21\",\n \"displayName\": \"AI21 Labs\",\n \"apiMode\": \"chat_completions\",\n \"authType\": \"api_key\",\n \"baseUrl\": \"https://api.ai21.com/studio/v1\",\n \"envVars\": [\"AI21_API_KEY\"],\n \"fallbackModels\": [\"jamba-1.5-large\"],\n \"capabilities\": {\n \"supportsToolUse\": true,\n \"supportsVision\": false,\n \"supportsStructuredOutput\": true,\n \"supportsStreaming\": true,\n \"supportsCacheControl\": false\n }\n },\n {\n \"id\": \"aleph-alpha\",\n \"displayName\": \"Aleph Alpha\",\n \"apiMode\": \"chat_completions\",\n \"authType\": \"api_key\",\n \"baseUrl\": \"https://api.aleph-alpha.com/v1\",\n \"envVars\": [\"ALEPH_ALPHA_API_KEY\"],\n \"fallbackModels\": [\"luminous-extended\"],\n \"capabilities\": {\n \"supportsToolUse\": false,\n \"supportsVision\": false,\n \"supportsStructuredOutput\": false,\n \"supportsStreaming\": true,\n \"supportsCacheControl\": false\n }\n },\n {\n \"id\": \"cloudflare\",\n \"displayName\": \"Cloudflare Workers AI\",\n \"apiMode\": \"chat_completions\",\n \"authType\": \"api_key\",\n \"baseUrl\": \"https://api.cloudflare.com/client/v4/accounts/{account_id}/ai/v1\",\n \"envVars\": [\"CLOUDFLARE_API_TOKEN\", \"CLOUDFLARE_ACCOUNT_ID\"],\n \"fallbackModels\": [\"@cf/meta/llama-3.1-70b-instruct\"],\n \"capabilities\": {\n \"supportsToolUse\": true,\n \"supportsVision\": false,\n \"supportsStructuredOutput\": false,\n \"supportsStreaming\": true,\n \"supportsCacheControl\": false\n }\n },\n {\n \"id\": \"azure-openai\",\n \"displayName\": \"Azure OpenAI\",\n \"apiMode\": \"chat_completions\",\n \"authType\": \"api_key\",\n \"baseUrl\": \"https://{resource}.openai.azure.com/openai/deployments/{deployment}\",\n \"envVars\": [\"AZURE_OPENAI_API_KEY\", \"AZURE_OPENAI_ENDPOINT\"],\n \"fallbackModels\": [\"gpt-4o\"],\n \"capabilities\": {\n \"supportsToolUse\": true,\n \"supportsVision\": true,\n \"supportsStructuredOutput\": true,\n \"supportsStreaming\": true,\n \"supportsCacheControl\": false\n }\n },\n {\n \"id\": \"github-models\",\n \"displayName\": \"GitHub Models\",\n \"apiMode\": \"chat_completions\",\n \"authType\": \"api_key\",\n \"baseUrl\": \"https://models.inference.ai.azure.com\",\n \"envVars\": [\"GITHUB_TOKEN\"],\n \"fallbackModels\": [\"gpt-4o-mini\"],\n \"capabilities\": {\n \"supportsToolUse\": true,\n \"supportsVision\": true,\n \"supportsStructuredOutput\": true,\n \"supportsStreaming\": true,\n \"supportsCacheControl\": false\n }\n },\n {\n \"id\": \"hyperbolic\",\n \"displayName\": \"Hyperbolic\",\n \"apiMode\": \"chat_completions\",\n \"authType\": \"api_key\",\n \"baseUrl\": \"https://api.hyperbolic.xyz/v1\",\n \"envVars\": [\"HYPERBOLIC_API_KEY\"],\n \"fallbackModels\": [\"meta-llama/Meta-Llama-3.1-70B-Instruct\"],\n \"capabilities\": {\n \"supportsToolUse\": true,\n \"supportsVision\": false,\n \"supportsStructuredOutput\": true,\n \"supportsStreaming\": true,\n \"supportsCacheControl\": false\n }\n },\n {\n \"id\": \"novita\",\n \"displayName\": \"Novita AI\",\n \"apiMode\": \"chat_completions\",\n \"authType\": \"api_key\",\n \"baseUrl\": \"https://api.novita.ai/v3/openai\",\n \"envVars\": [\"NOVITA_API_KEY\"],\n \"fallbackModels\": [\"meta-llama/llama-3.1-70b-instruct\"],\n \"capabilities\": {\n \"supportsToolUse\": true,\n \"supportsVision\": false,\n \"supportsStructuredOutput\": true,\n \"supportsStreaming\": true,\n \"supportsCacheControl\": false\n }\n },\n {\n \"id\": \"moonshot\",\n \"displayName\": \"Moonshot (Kimi)\",\n \"apiMode\": \"chat_completions\",\n \"authType\": \"api_key\",\n \"baseUrl\": \"https://api.moonshot.cn/v1\",\n \"envVars\": [\"MOONSHOT_API_KEY\"],\n \"fallbackModels\": [\"moonshot-v1-8k\"],\n \"capabilities\": {\n \"supportsToolUse\": true,\n \"supportsVision\": false,\n \"supportsStructuredOutput\": false,\n \"supportsStreaming\": true,\n \"supportsCacheControl\": false\n }\n },\n {\n \"id\": \"qwen\",\n \"displayName\": \"Qwen (Alibaba)\",\n \"apiMode\": \"chat_completions\",\n \"authType\": \"api_key\",\n \"baseUrl\": \"https://dashscope.aliyuncs.com/compatible-mode/v1\",\n \"envVars\": [\"DASHSCOPE_API_KEY\"],\n \"fallbackModels\": [\"qwen-plus\"],\n \"capabilities\": {\n \"supportsToolUse\": true,\n \"supportsVision\": true,\n \"supportsStructuredOutput\": true,\n \"supportsStreaming\": true,\n \"supportsCacheControl\": false\n },\n \"aliases\": [\"dashscope\"],\n \"models\": {\n \"qwen3-coder-30b-a3b-instruct\": {\n \"tool_call\": true,\n \"structured_output\": false,\n \"cache_control\": false,\n \"modalities\": {\n \"input\": [\"text\"]\n },\n \"limit\": {\n \"context\": 160000,\n \"output\": 8000\n }\n }\n }\n },\n {\n \"id\": \"zhipu\",\n \"displayName\": \"Zhipu AI (GLM)\",\n \"apiMode\": \"chat_completions\",\n \"authType\": \"api_key\",\n \"baseUrl\": \"https://open.bigmodel.cn/api/paas/v4\",\n \"envVars\": [\"ZHIPU_API_KEY\"],\n \"fallbackModels\": [\"glm-4-plus\"],\n \"capabilities\": {\n \"supportsToolUse\": true,\n \"supportsVision\": true,\n \"supportsStructuredOutput\": true,\n \"supportsStreaming\": true,\n \"supportsCacheControl\": false\n },\n \"aliases\": [\"glm\", \"z-ai\"],\n \"models\": {\n \"glm-4.7-flash\": {\n \"name\": \"GLM-4.7-Flash\",\n \"release_date\": \"2026-01-19\",\n \"attachment\": false,\n \"reasoning\": true,\n \"temperature\": true,\n \"tool_call\": true,\n \"cost\": {\n \"input\": 0,\n \"output\": 0,\n \"cache_read\": 0,\n \"cache_write\": 0\n },\n \"limit\": {\n \"context\": 202752,\n \"output\": 8000\n },\n \"modalities\": {\n \"input\": [\"text\"],\n \"output\": [\"text\"]\n },\n \"structured_output\": false,\n \"cache_control\": false\n }\n }\n },\n {\n \"id\": \"minimax\",\n \"displayName\": \"MiniMax\",\n \"apiMode\": \"chat_completions\",\n \"authType\": \"api_key\",\n \"baseUrl\": \"https://api.minimax.chat/v1\",\n \"envVars\": [\"MINIMAX_API_KEY\"],\n \"fallbackModels\": [\"MiniMax-Text-01\"],\n \"capabilities\": {\n \"supportsToolUse\": true,\n \"supportsVision\": false,\n \"supportsStructuredOutput\": false,\n \"supportsStreaming\": true,\n \"supportsCacheControl\": false\n }\n },\n {\n \"id\": \"baichuan\",\n \"displayName\": \"Baichuan\",\n \"apiMode\": \"chat_completions\",\n \"authType\": \"api_key\",\n \"baseUrl\": \"https://api.baichuan-ai.com/v1\",\n \"envVars\": [\"BAICHUAN_API_KEY\"],\n \"fallbackModels\": [\"Baichuan4\"],\n \"capabilities\": {\n \"supportsToolUse\": true,\n \"supportsVision\": false,\n \"supportsStructuredOutput\": false,\n \"supportsStreaming\": true,\n \"supportsCacheControl\": false\n }\n },\n {\n \"id\": \"voyage\",\n \"displayName\": \"Voyage AI\",\n \"apiMode\": \"chat_completions\",\n \"authType\": \"api_key\",\n \"baseUrl\": \"https://api.voyageai.com/v1\",\n \"envVars\": [\"VOYAGE_API_KEY\"],\n \"fallbackModels\": [\"voyage-3\"],\n \"capabilities\": {\n \"supportsToolUse\": false,\n \"supportsVision\": false,\n \"supportsStructuredOutput\": false,\n \"supportsStreaming\": false,\n \"supportsCacheControl\": false\n }\n },\n {\n \"id\": \"jina\",\n \"displayName\": \"Jina AI\",\n \"apiMode\": \"chat_completions\",\n \"authType\": \"api_key\",\n \"baseUrl\": \"https://api.jina.ai/v1\",\n \"envVars\": [\"JINA_API_KEY\"],\n \"fallbackModels\": [\"jina-embeddings-v3\"],\n \"capabilities\": {\n \"supportsToolUse\": false,\n \"supportsVision\": false,\n \"supportsStructuredOutput\": false,\n \"supportsStreaming\": false,\n \"supportsCacheControl\": false\n }\n },\n {\n \"id\": \"helicone\",\n \"displayName\": \"Helicone (Gateway)\",\n \"apiMode\": \"chat_completions\",\n \"authType\": \"api_key\",\n \"baseUrl\": \"https://oai.helicone.ai/v1\",\n \"envVars\": [\"HELICONE_API_KEY\", \"OPENAI_API_KEY\"],\n \"fallbackModels\": [\"gpt-4o-mini\"],\n \"capabilities\": {\n \"supportsToolUse\": true,\n \"supportsVision\": true,\n \"supportsStructuredOutput\": true,\n \"supportsStreaming\": true,\n \"supportsCacheControl\": false\n },\n \"models\": {\n \"gpt-4o-mini\": {\n \"name\": \"OpenAI GPT-4o-mini\",\n \"release_date\": \"2024-07-18\",\n \"attachment\": false,\n \"reasoning\": false,\n \"temperature\": true,\n \"tool_call\": true,\n \"cost\": {\n \"input\": 0.15,\n \"output\": 0.6,\n \"cache_read\": 0.075\n },\n \"limit\": {\n \"context\": 128000,\n \"output\": 16384\n },\n \"modalities\": {\n \"input\": [\"text\", \"image\"],\n \"output\": [\"text\"]\n }\n }\n }\n },\n {\n \"id\": \"portkey\",\n \"displayName\": \"Portkey (Gateway)\",\n \"apiMode\": \"chat_completions\",\n \"authType\": \"api_key\",\n \"baseUrl\": \"https://api.portkey.ai/v1\",\n \"envVars\": [\"PORTKEY_API_KEY\"],\n \"fallbackModels\": [\"gpt-4o-mini\"],\n \"capabilities\": {\n \"supportsToolUse\": true,\n \"supportsVision\": true,\n \"supportsStructuredOutput\": true,\n \"supportsStreaming\": true,\n \"supportsCacheControl\": false\n }\n },\n {\n \"id\": \"baseten\",\n \"displayName\": \"Baseten\",\n \"apiMode\": \"chat_completions\",\n \"authType\": \"api_key\",\n \"baseUrl\": \"https://bridge.baseten.co/v1\",\n \"envVars\": [\"BASETEN_API_KEY\"],\n \"fallbackModels\": [\"meta-llama/Meta-Llama-3-70B-Instruct\"],\n \"capabilities\": {\n \"supportsToolUse\": true,\n \"supportsVision\": false,\n \"supportsStructuredOutput\": true,\n \"supportsStreaming\": true,\n \"supportsCacheControl\": false\n }\n },\n {\n \"id\": \"modal\",\n \"displayName\": \"Modal\",\n \"apiMode\": \"chat_completions\",\n \"authType\": \"api_key\",\n \"baseUrl\": \"https://api.modal.com/v1\",\n \"envVars\": [\"MODAL_TOKEN_ID\", \"MODAL_TOKEN_SECRET\"],\n \"fallbackModels\": [\"meta-llama/Meta-Llama-3-70B-Instruct\"],\n \"capabilities\": {\n \"supportsToolUse\": true,\n \"supportsVision\": false,\n \"supportsStructuredOutput\": false,\n \"supportsStreaming\": true,\n \"supportsCacheControl\": false\n }\n }\n]\n","/**\n * Provider catalog loader (T10.1, ADR D447).\n *\n * Provider metadata, EMBEDDED at build time. Malformed entries are skipped with WARN (EC-1) — never\n * crash.\n *\n * ## Why embedded and not read from disk\n *\n * It used to be `readFileSync` from a directory computed as\n * `dirname(fileURLToPath(import.meta.url))` at module scope. Both halves break on a runtime with no\n * filesystem, in that order, and this file is only model METADATA — so an environment that could not\n * read it could not run a turn at all.\n *\n * Measured end to end on 2026-09-28, driving a real deploy of a TheoKit app (theokit#705):\n *\n * 1. Cloudflare EXECUTES the top-level module during validation, so the upload was refused before\n * any request existed — `The \"path\" argument must be of type string … Received undefined`,\n * code 10021.\n * 2. With `import.meta.url` substituted by the consumer's bundler, the module initialised and the\n * TURN failed: `[unenv] fs.readFileSync is not implemented yet!`\n * 3. With a newer `compatibility_date`, workerd implements `readFileSync` and the error became the\n * honest one: `ENOENT: readAll '/provider-catalog.json'`. The same `ENOENT` reached a deployed\n * Vercel function, whose bundle carries the JS and not the JSON.\n *\n * No consumer's bundler can fix that from outside. Probed from inside a deployed worker, workerd's\n * whole virtual filesystem is `/bundle/worker.js`, an empty `/tmp` and `/dev` — there is nowhere to\n * put this package's private data file such that `join(dirname(<a file URL>), …)` finds it, short of\n * hardcoding our internal layout into their build.\n *\n * `with { type: \"json\" }` follows `internal/budget/pricing-registry.ts`, which has imported a sibling\n * JSON exactly this way in this package for as long as it has existed. Bundlers inline it, so the\n * emitted module carries the data and reaches for nothing.\n *\n * @internal\n */\n\nimport { diag } from \"../diagnostics.js\";\nimport { globalSingleton } from \"../global-singleton.js\";\nimport { type CatalogModel, catalogEntrySchema, catalogModelSchema } from \"./catalog-schema.js\";\nimport embeddedCatalog from \"./provider-catalog.json\" with { type: \"json\" };\nimport { getProviderProfile, registerProvider } from \"./registry.js\";\nimport type { ApiMode, AuthType, ProviderProfile } from \"./types.js\";\n\nexport interface ProviderCapabilities {\n supportsToolUse: boolean;\n supportsVision: boolean;\n supportsStructuredOutput: boolean;\n supportsStreaming: boolean;\n supportsCacheControl: boolean;\n maxContextTokens?: number;\n maxOutputTokens?: number;\n}\n\nexport interface CatalogEntry {\n id: string;\n displayName: string;\n apiMode: ApiMode;\n authType: AuthType;\n baseUrl: string;\n envVars: string[];\n fallbackModels: string[];\n capabilities: ProviderCapabilities;\n aliases?: string[];\n modelsUrl?: string;\n hostname?: string;\n extraHeaders?: Record<string, string>;\n /**\n * M44 — OPTIONAL per-model data (models.dev shape, snake_case — see `catalog-schema.ts`), keyed by the\n * BARE model id. Additive: entries without it behave byte-identically to before. The loader indexes this\n * into the model-info index (`getCatalogModelInfo`) rather than onto `ProviderProfile` (ADR D2 — the\n * builtins-first registration skip means profile-attached data would never reach builtin providers).\n */\n models?: Record<string, CatalogModel>;\n}\n\n/**\n * M44 — the model-info index: `provider/model` → per-model catalog data (the EXACT-map key convention).\n * Populated by the vendored catalog load AND patched by the optional models-dev source (cache entries win\n * per model). The single lookup surface for capability / cost / limit enrichment.\n */\n// M44 B1 fix — index state on globalThis (Symbol.for) so every bundle copy shares the SAME maps (see the\n// identical pattern + rationale in registry.ts).\nconst modelInfoIndex = globalSingleton(\n \"theokit-sdk.providers.model-info-index\",\n () => new Map<string, CatalogModel>(),\n);\n/** M44 M5 fix — keys patched by the live models-dev source (honest pricing provenance). */\nconst patchedModelKeys = globalSingleton(\n \"theokit-sdk.providers.model-info-patched\",\n () => new Set<string>(),\n);\nconst indexState = globalSingleton(\"theokit-sdk.providers.model-info-loaded\", () => ({\n loaded: false,\n}));\n\n/**\n * Look up per-model catalog data by `provider/model` key.\n *\n * Semver-exempt: not declared in `package.json` `exports`, but re-exported by\n * `catalog-source-models-dev.ts`, whose declaration is reachable from published entries — so it\n * must be EMITTED.\n */\nexport function getCatalogModelInfo(key: string): CatalogModel | undefined {\n ensureModelIndexLoaded();\n return modelInfoIndex.get(key);\n}\n\n/** Was this key patched by the LIVE models-dev source (vs the vendored catalog)? @internal */\nexport function isPatchedModelKey(key: string): boolean {\n return patchedModelKeys.has(key);\n}\n\n/**\n * Patch the index with fresher per-model data (the models-dev source). M44 H2 fix — a per-FIELD shallow\n * MERGE, not a wholesale replace: models.dev can never supply the theokit extension fields\n * (`cache_control`, `structured_output` overlays), so a replace would wipe them and silently flip\n * capability answers. Incoming fields win; existing fields survive when the patch omits them.\n * @internal\n */\nexport function patchModelInfo(key: string, model: CatalogModel): void {\n ensureModelIndexLoaded();\n const existing = modelInfoIndex.get(key);\n modelInfoIndex.set(key, existing === undefined ? model : { ...existing, ...model });\n patchedModelKeys.add(key);\n}\n\n/** All indexed `provider/model` keys (for maintenance/tests). @internal */\nexport function listModelInfoKeys(): string[] {\n ensureModelIndexLoaded();\n return [...modelInfoIndex.keys()];\n}\n\nfunction ensureModelIndexLoaded(): void {\n if (indexState.loaded) return;\n indexState.loaded = true;\n // M44 L9 fix — never throw from a capability/pricing lookup: a missing/corrupt vendored catalog degrades\n // to conservative defaults with a WARN (the deleted EXACT map could never throw; keep that property).\n try {\n const catalog = loadProviderCatalog();\n for (const entry of Object.values(catalog)) {\n indexEntryModels(entry);\n }\n } catch (err) {\n diag(\n `[theokit-sdk] WARN: provider catalog unavailable (${(err as Error).message}) — per-model data disabled\\n`,\n );\n }\n}\n\n/**\n * Index an entry's `models` block. Runs for EVERY catalog entry — including those whose PROVIDER\n * registration is skipped builtins-first — so builtin providers still get their per-model data (ADR D2).\n * A malformed model sub-entry drops THAT MODEL with WARN and keeps the provider (EC-1 philosophy extended).\n */\n// PRE-EXISTING debt, exposed when M75 fixed the Biome config that used to abort before\n// sweeping these files (a nested root under refactor/). It is not new code and was not touched\n// by M75; refactoring SDK internals without review would trade a visible problem for a diff\n// risky. Tracked in usetheodev/theokit-sdk#151.\n// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: one pass over a vendored data file, branching per OPTIONAL field the upstream schema may or may not carry (models, cost, modalities, limits). Splitting it produces N helpers that each re-check the same entry — the branches are field presence, not decisions.\nfunction indexEntryModels(entry: CatalogEntry): void {\n if (entry.models === undefined || typeof entry.models !== \"object\") return;\n for (const [modelId, raw] of Object.entries(entry.models)) {\n const parsed = catalogModelSchema.safeParse(raw);\n if (!parsed.success) {\n diag(\n `[theokit-sdk] WARN: Skipping malformed catalog model \"${entry.id}/${modelId}\": ` +\n `${parsed.error.issues[0]?.message ?? \"invalid\"}\\n`,\n );\n continue;\n }\n // Index under the entry id AND every alias — capability lookups are VENDOR-keyed (e.g.\n // `google/gemini-2.5-pro` while the entry id is `google-gemini` with alias `google`), so alias keys are\n // what make the vendor-keyed convention resolve without a second mapping table.\n modelInfoIndex.set(`${entry.id}/${modelId}`, parsed.data);\n for (const alias of entry.aliases ?? []) {\n const key = `${alias}/${modelId}`;\n if (!modelInfoIndex.has(key)) modelInfoIndex.set(key, parsed.data);\n }\n }\n}\n\n/** Test-only reset for the model-info index. @internal */\nexport function _resetModelInfoIndexForTests(): void {\n modelInfoIndex.clear();\n patchedModelKeys.clear();\n indexState.loaded = false;\n}\n\ninterface LoadOptions {\n _testInjectMalformed?: boolean;\n}\n\nfunction validateEntry(raw: Record<string, unknown>): CatalogEntry | null {\n const parsed = catalogEntrySchema.safeParse(raw);\n // The WARN-and-skip behaviour at the call site is unchanged; only what counts as valid is.\n return parsed.success ? (parsed.data as CatalogEntry) : null;\n}\n\nexport function loadProviderCatalog(opts?: LoadOptions): Record<string, CatalogEntry> {\n // Copied, not aliased: `_testInjectMalformed` below appends to it, and the embedded array is a\n // module-level singleton every caller shares.\n let entries: Record<string, unknown>[] = [...(embeddedCatalog as Record<string, unknown>[])];\n\n if (opts?._testInjectMalformed) {\n entries = [\n ...entries,\n { id: \"malformed-provider\", displayName: \"Bad\" } as Record<string, unknown>,\n ];\n }\n\n const result: Record<string, CatalogEntry> = {};\n for (const raw of entries) {\n const validated = validateEntry(raw as Record<string, unknown>);\n if (validated === null) {\n diag(\n `[theokit-sdk] WARN: Skipping malformed catalog entry: ${JSON.stringify(raw).slice(0, 100)}\\n`,\n );\n continue;\n }\n result[validated.id] = validated;\n }\n return result;\n}\n\nlet _capabilitiesCache: Record<string, ProviderCapabilities> | null = null;\n\n// PRE-EXISTING debt, exposed when M75 fixed the Biome config that used to abort before\n// sweeping these files (a nested root under refactor/). It is not new code and was not touched\n// by M75; refactoring SDK internals without review would trade a visible problem for a diff\n// risky. Tracked in usetheodev/theokit-sdk#151.\n// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: a lazily-built cache with three states (unbuilt, built-and-hit, built-and-miss) folded into one read. The branch count is the state machine; extracting the build makes the miss path re-enter the same check.\nexport function getCatalogCapabilities(providerId: string): ProviderCapabilities | undefined {\n if (_capabilitiesCache === null) {\n const catalog = loadProviderCatalog();\n _capabilitiesCache = {};\n for (const entry of Object.values(catalog)) {\n _capabilitiesCache[entry.id] = entry.capabilities;\n // M45 review L4 — alias keys too (e.g. entry `google-gemini` alias `google`), consistent with the\n // model-info index's alias-keyed convention.\n for (const alias of entry.aliases ?? []) {\n if (_capabilitiesCache[alias] === undefined) _capabilitiesCache[alias] = entry.capabilities;\n }\n }\n }\n return _capabilitiesCache[providerId];\n}\n\nexport function registerCatalogProviders(opts?: LoadOptions): void {\n const catalog = loadProviderCatalog(opts);\n for (const entry of Object.values(catalog)) {\n // Skip catalog entries that would overwrite first-party builtins.\n // Builtins have richer env-var handling and are registered first.\n // Also skip if any alias collides with an existing provider name.\n if (getProviderProfile(entry.id) !== undefined) continue;\n if (entry.aliases?.some((a) => getProviderProfile(a) !== undefined)) continue;\n\n const profile: ProviderProfile = {\n name: entry.id,\n apiMode: entry.apiMode,\n authType: entry.authType,\n baseUrl: entry.baseUrl,\n envVars: entry.envVars,\n fallbackModels: entry.fallbackModels,\n displayName: entry.displayName,\n aliases: entry.aliases,\n modelsUrl: entry.modelsUrl,\n hostname: entry.hostname,\n extraHeaders: entry.extraHeaders,\n };\n registerProvider(profile);\n }\n}\n","import type { ProviderProfile } from \"../types.js\";\n\nexport const ANTHROPIC: ProviderProfile = {\n name: \"anthropic\",\n apiMode: \"anthropic_messages\",\n envVars: [\"ANTHROPIC_API_KEY\"],\n authType: \"api_key\",\n baseUrl: \"https://api.anthropic.com\",\n modelsUrl: \"https://api.anthropic.com/v1/models\",\n hostname: \"api.anthropic.com\",\n fallbackModels: [\"claude-opus-4-7\", \"claude-sonnet-4-6\", \"claude-haiku-4-5-20251001\"],\n // M45 — the Anthropic beta-features header (interleaved thinking + fine-grained tool streaming). An\n // Anthropic API constant. The\n // SANCTIONED behavior delta of M45 (ADR D4) — consumed by the anthropic transport's extraHeaders wiring.\n extraHeaders: {\n \"anthropic-beta\": \"interleaved-thinking-2025-05-14,fine-grained-tool-streaming-2025-05-14\",\n },\n};\n","/**\n * AWS Bedrock profile (Adoption Roadmap #8; ADRs D286-D302).\n *\n * Bearer-only auth via `AWS_BEARER_TOKEN_BEDROCK` env (GA Sep 2025).\n * Optional `@aws/bedrock-token-generator` peer dep auto-refreshes short-term\n * tokens (D287). Transport via native `fetch`; no `@aws-sdk/*` dependency.\n *\n * Model IDs follow the `bedrock/{aws-id}` convention so the router can\n * infer the provider via prefix routing (D186). The client strips the\n * `bedrock/` prefix before building the URL.\n *\n * @internal\n */\n\nimport type { ProviderProfile } from \"../types.js\";\n\nexport const BEDROCK: ProviderProfile = {\n name: \"bedrock\",\n apiMode: \"bedrock_anthropic\",\n envVars: [\"AWS_BEARER_TOKEN_BEDROCK\"],\n authType: \"aws_bearer\",\n baseUrl: \"https://bedrock-runtime.us-east-1.amazonaws.com\",\n modelsUrl: undefined,\n hostname: \"bedrock-runtime.amazonaws.com\",\n fallbackModels: [\n \"bedrock/us.anthropic.claude-sonnet-4-5-v1:0\",\n \"bedrock/us.anthropic.claude-opus-4-7-v1:0\",\n \"bedrock/global.anthropic.claude-haiku-4-5-v1:0\",\n ],\n};\n\n/** Strip `\"bedrock/\"` prefix so the raw AWS model id is used in the URL. */\nexport function stripBedrockPrefix(modelId: string): string {\n return modelId.replace(/^bedrock\\//, \"\");\n}\n\n/**\n * Infer AWS region from a Bedrock model id prefix (D290).\n *\n * `global.*` routes via `us-east-1` (AWS default entrypoint for global\n * inference profiles).\n */\nexport function inferRegionFromModelId(modelId: string): string | undefined {\n const id = stripBedrockPrefix(modelId);\n if (id.startsWith(\"global.\")) return \"us-east-1\";\n if (id.startsWith(\"us.\")) return process.env.AWS_REGION ?? \"us-east-1\";\n if (id.startsWith(\"eu.\")) return process.env.AWS_REGION ?? \"eu-west-1\";\n if (id.startsWith(\"apac.\")) return process.env.AWS_REGION ?? \"ap-southeast-1\";\n if (id.startsWith(\"jp.\")) return \"ap-northeast-1\";\n return undefined;\n}\n\n/** Resolve baseUrl from model id; falls back to `AWS_REGION` env or `us-east-1`. */\nexport function resolveBedrockBaseUrl(modelId: string): string {\n const region = inferRegionFromModelId(modelId) ?? process.env.AWS_REGION ?? \"us-east-1\";\n return `https://bedrock-runtime.${region}.amazonaws.com`;\n}\n","import type { ProviderProfile } from \"../types.js\";\n\n/**\n * M45 — the data-only base for OpenAI-compatible chat_completions providers. A profile-map pattern\n * flattened to\n * theokit's data model: leaves declare name/baseUrl/envVars (+ overrides) in ~10 lines; the router's\n * URL-join rule (version-segment detection + `chatCompletionsPath` escape) derives the endpoint.\n *\n * @internal\n */\nexport function openAiCompatibleProfile(\n p: { name: string; baseUrl: string; envVars: readonly string[] } & Partial<ProviderProfile>,\n): ProviderProfile {\n return {\n apiMode: \"chat_completions\",\n authType: \"api_key\",\n fallbackModels: [],\n ...p,\n };\n}\n","import { openAiCompatibleProfile } from \"./openai-compatible.js\";\n\n/**\n * M45 — Cerebras. The integration header value is theokit's own: the header attributes TRAFFIC.\n * Models per models.dev (2026-07 snapshot).\n */\nexport const CEREBRAS = openAiCompatibleProfile({\n name: \"cerebras\",\n baseUrl: \"https://api.cerebras.ai/v1\",\n envVars: [\"CEREBRAS_API_KEY\"],\n fallbackModels: [\"gpt-oss-120b\", \"zai-glm-4.7\"],\n extraHeaders: { \"X-Cerebras-3rd-Party-Integration\": \"theokit\" },\n hostname: \"api.cerebras.ai\",\n});\n","import { openAiCompatibleProfile } from \"./openai-compatible.js\";\n\n/**\n * M45 — Cohere via its OpenAI-compatibility surface (`api.cohere.ai/compatibility/v1` — the native v2 API\n * is NOT chat_completions; the discovery flagged the old catalog baseUrl as doubly wrong). Models per\n * models.dev `cohere` (2026-07 snapshot). SOURCE NOTE (review L2): the compatibility endpoint + `CO_API_KEY`\n * come from Cohere's own docs/python-SDK convention (not vendored in this repo's references) — verify with a\n * live smoke when a key is available.\n */\nexport const COHERE = openAiCompatibleProfile({\n name: \"cohere\",\n baseUrl: \"https://api.cohere.ai/compatibility/v1\",\n envVars: [\"COHERE_API_KEY\", \"CO_API_KEY\"],\n fallbackModels: [\"command-a-03-2025\"],\n hostname: \"api.cohere.ai\",\n});\n","import { openAiCompatibleProfile } from \"./openai-compatible.js\";\n\n/** M45 — DeepInfra. OpenAI-compat surface under /v1/openai (models.dev `deepinfra`). */\nexport const DEEPINFRA = openAiCompatibleProfile({\n name: \"deepinfra\",\n baseUrl: \"https://api.deepinfra.com/v1/openai\",\n envVars: [\"DEEPINFRA_API_KEY\"],\n fallbackModels: [\"Qwen/Qwen3-32B\"],\n hostname: \"api.deepinfra.com\",\n});\n","import type { ProviderProfile } from \"../types.js\";\n\n/**\n * Gemini via OpenRouter passthrough. Direct Gemini API uses a different\n * dialect (`generateContent`); SDK currently routes through OpenRouter's\n * OpenAI-compatible endpoint so the chat_completions transport works.\n *\n * A future plugin `@theokit-provider-gemini-direct` can override this with\n * `apiMode: \"gemini_generate_content\"` once that transport ships.\n */\nexport const GEMINI: ProviderProfile = {\n name: \"gemini\",\n apiMode: \"chat_completions\",\n envVars: [\"OPENROUTER_API_KEY\"],\n authType: \"api_key\",\n baseUrl: \"https://openrouter.ai/api\",\n hostname: \"openrouter.ai\",\n fallbackModels: [\"google/gemini-2.0-flash-001\"],\n};\n","import { openAiCompatibleProfile } from \"./openai-compatible.js\";\n\n/**\n * M45 — Google Gemini via the DIRECT OpenAI-compat endpoint (a Google API key, not OpenRouter). Distinct\n * from the `gemini` builtin (an OpenRouter passthrough) by ADR D3 — two routes, two names. Endpoint + env\n * vars per Google's OpenAI-compatibility docs (mirrored by models.dev `google` + the M44 catalog entry).\n */\nexport const GOOGLE = openAiCompatibleProfile({\n name: \"google\",\n baseUrl: \"https://generativelanguage.googleapis.com/v1beta/openai\",\n envVars: [\"GOOGLE_API_KEY\", \"GEMINI_API_KEY\", \"GOOGLE_GENERATIVE_AI_API_KEY\"],\n fallbackModels: [\"gemini-2.5-pro\", \"gemini-2.5-flash\"],\n hostname: \"generativelanguage.googleapis.com\",\n});\n","import { openAiCompatibleProfile } from \"./openai-compatible.js\";\n\n/** M45 — Groq. Values per models.dev `groq` (2026-07 snapshot); OpenAI-compat surface under /openai/v1. */\nexport const GROQ = openAiCompatibleProfile({\n name: \"groq\",\n baseUrl: \"https://api.groq.com/openai/v1\",\n envVars: [\"GROQ_API_KEY\"],\n fallbackModels: [\"llama-3.3-70b-versatile\", \"llama-3.1-8b-instant\"],\n hostname: \"api.groq.com\",\n});\n","import type { ProviderProfile } from \"../types.js\";\n\n/**\n * llama.cpp server provider profile (T7.2, ADR D189).\n *\n * llama.cpp ships a HTTP server binary (`./server` since b1500+) that\n * implements the OpenAI-compatible `/v1/chat/completions` endpoint on\n * `http://localhost:8080` by default. Inherits `authType: \"none\"` from\n * D182 — no API key required for local use.\n *\n * llama.cpp idiosyncrasies:\n * - Server loads a single GGUF model at startup via `--model` CLI\n * flag. The `model` field in the chat-completions request is\n * cosmetic — any string works; the response comes from the loaded\n * model regardless. This is documented in\n * `.claude/knowledge-base/reviews/edge-case/ollama-integration-edge-cases-2026-05-21.md`\n * as EC-O.\n * - Tool calling support depends entirely on the underlying model.\n *\n * Override the default URL with `LLAMACPP_HOST`.\n *\n * @internal\n */\nexport const LLAMACPP: ProviderProfile = {\n name: \"llamacpp\",\n aliases: [\"llama-cpp\", \"llama.cpp\"],\n apiMode: \"chat_completions\",\n envVars: [\"LLAMACPP_API_KEY\"],\n authType: \"none\",\n baseUrl: \"http://localhost:8080\",\n modelsUrl: \"http://localhost:8080/v1/models\",\n hostname: \"localhost\",\n fallbackModels: [\"loaded-model\"],\n};\n","import type { ProviderProfile } from \"../types.js\";\n\n/**\n * LM Studio provider profile (T7.1, ADR D188).\n *\n * LM Studio exposes an OpenAI-compatible `/v1/chat/completions` endpoint\n * on `http://localhost:1234` by default (configurable via the LM Studio\n * UI under \"Local Server\"). Inherits the `authType: \"none\"` primitive\n * from D182 — no API key required for local use.\n *\n * LM Studio idiosyncrasies:\n * - Loads ONE model at a time via the desktop UI. The `model` field in\n * the chat-completions request is informational only — LM Studio\n * serves whatever model is currently loaded.\n * - `/v1/models` returns a single entry pointing to the loaded model.\n * - Tool calling depends on the underlying model.\n *\n * Override the default URL with `LMSTUDIO_HOST` (mirrors `OLLAMA_HOST`).\n *\n * @internal\n */\nexport const LMSTUDIO: ProviderProfile = {\n name: \"lmstudio\",\n aliases: [\"lm-studio\", \"lm_studio\"],\n apiMode: \"chat_completions\",\n envVars: [\"LMSTUDIO_API_KEY\"],\n authType: \"none\",\n baseUrl: \"http://localhost:1234\",\n modelsUrl: \"http://localhost:1234/v1/models\",\n hostname: \"localhost\",\n fallbackModels: [\"loaded-model\"],\n};\n","import { openAiCompatibleProfile } from \"./openai-compatible.js\";\n\n/** M45 — Mistral (La Plateforme). Values per models.dev `mistral` (2026-07 snapshot). */\nexport const MISTRAL = openAiCompatibleProfile({\n name: \"mistral\",\n baseUrl: \"https://api.mistral.ai/v1\",\n envVars: [\"MISTRAL_API_KEY\"],\n fallbackModels: [\"mistral-large-latest\", \"codestral-latest\"],\n hostname: \"api.mistral.ai\",\n});\n","import type { ProviderProfile } from \"../types.js\";\n\n/**\n * Ollama — local-first LLM runtime (ADR D182).\n *\n * Ships as a builtin so `Agent.create({ model: \"ollama/llama3.2\" })` works\n * with zero configuration when `ollama serve` is running on the default\n * port. `authType: \"none\"` signals the router to skip env-key resolution\n * and use a placeholder credential (Ollama ignores Authorization headers\n * on local installs).\n *\n * Overrides:\n * - `OLLAMA_HOST` — replaces the default `http://localhost:11434` baseUrl\n * (advanced users running Ollama on a remote machine).\n * - `OLLAMA_API_KEY` — replaces the placeholder when Ollama is behind a\n * reverse-proxy with auth or when using Ollama Cloud (paid tier).\n */\nexport const OLLAMA: ProviderProfile = {\n name: \"ollama\",\n apiMode: \"chat_completions\",\n envVars: [\"OLLAMA_API_KEY\"],\n authType: \"none\",\n baseUrl: \"http://localhost:11434\",\n modelsUrl: \"http://localhost:11434/v1/models\",\n hostname: \"localhost\",\n fallbackModels: [\"llama3.2\", \"qwen2.5\", \"mistral\"],\n};\n","import type { ProviderProfile } from \"../types.js\";\n\nexport const OPENAI: ProviderProfile = {\n name: \"openai\",\n apiMode: \"chat_completions\",\n envVars: [\"OPENAI_API_KEY\"],\n authType: \"api_key\",\n baseUrl: \"https://api.openai.com\",\n modelsUrl: \"https://api.openai.com/v1/models\",\n hostname: \"api.openai.com\",\n fallbackModels: [\"gpt-4o\", \"gpt-4o-mini\"],\n};\n","/**\n * M43 — the ChatGPT \"Codex\" backend as a first-class builtin `ProviderProfile`. Migrated from the\n * agent-builder M40 workaround; the SDK now owns the provider, so a consumer only selects\n * `openai-chatgpt/<model>` and logs in — ZERO provider logic in the consumer.\n *\n * The provider-auth model (see the codex-provider-in-sdk blueprint):\n * - static profile + a `transform.fetch` that resolves the LIVE credential per HTTP request (fresh Bearer +\n * dynamic `ChatGPT-Account-Id`), so a mid-turn expiry refreshes transparently with NO agent rebuild;\n * - the protocol values (endpoint, models, oauth config, `originator` header) are SDK-owned constants.\n *\n * @internal\n */\n\nimport { homedir } from \"node:os\";\n\nimport { AuthenticationError } from \"../../../errors.js\";\nimport { readStoredOAuth } from \"../../auth/credential-store.js\";\nimport { resolveCredential } from \"../../auth/resolve-credential.js\";\nimport type { CredentialStoreConfig, OAuthProviderConfig } from \"../../auth/types.js\";\nimport type { ProviderProfile } from \"../types.js\";\n\n/**\n * The SDK-owned ambient credential store the transform reads. Defaults to `~/.theokit/auth.json`. A consumer\n * points it at its existing store dir via the DEDICATED `THEOKIT_AUTH_HOME` env var (NOT `THEOKIT_HOME` — that\n * is the SDK's whole home directory for personality/credential-pool/profiles; overloading it would redirect\n * the entire runtime). The SDK's ambient credential service.\n */\nconst DEFAULT_STORE: CredentialStoreConfig = {\n home: homedir(),\n dirName: \".theokit\",\n fileName: \"auth.json\",\n homeEnvVar: \"THEOKIT_AUTH_HOME\",\n};\n\n/**\n * The OpenAI OAuth config the transform resolves + refreshes against. `provider: \"openai\"` is the STORE\n * provider (what `/login` persists), deliberately distinct from this profile's routing name `openai-chatgpt`\n * — the two-namespace split separates the integration id from the routed provider. Endpoints/clientId/scopes\n * are OpenAI's published OAuth values.\n */\nconst OPENAI_OAUTH_CONFIG: OAuthProviderConfig = {\n provider: \"openai\",\n authorizeEndpoint: \"https://auth.openai.com/oauth/authorize\",\n tokenEndpoint: \"https://auth.openai.com/oauth/token\",\n clientId: \"app_EMoamEEZ73f0CkXaXp7hrann\",\n scopes: [\"openid\", \"profile\", \"email\", \"offline_access\"],\n redirectUri: \"https://auth.openai.com/deviceauth/callback\",\n};\n\n/**\n * Build the per-request fetch: resolve a FRESH (refreshed) Bearer + the LIVE account-id from the ambient\n * store, and inject them as headers. Re-resolves on EVERY call → mid-turn refresh with no rebuild. A\n * `Headers` object is used so `authorization` is set case-insensitively (never doubled). If no credential is\n * logged in, throw a clear error rather than putting the router's `__oauth_lazy_token__` placeholder on the\n * wire (fail-closed — missing-credential semantics).\n */\nfunction codexFetch(): typeof fetch {\n return (async (input: Parameters<typeof fetch>[0], init?: Parameters<typeof fetch>[1]) => {\n const env = process.env as Record<string, string | undefined>;\n const resolved = await resolveCredential({\n provider: \"openai\",\n store: DEFAULT_STORE,\n oauth: OPENAI_OAUTH_CONFIG,\n env,\n });\n if (resolved === undefined) {\n // AuthenticationError, not a bare Error. `isTransientError` is\n // `err instanceof TheokitAgentError && err.isRetryable`, so a bare Error here is permanently\n // non-retryable AND invisible to a consumer branching on `instanceof AuthenticationError` —\n // which is what a caller does when a login has expired. router.ts:378 already throws typed for\n // the same missing-OAuth-credential condition.\n throw new AuthenticationError(\n 'openai-chatgpt: no ChatGPT credential found — run the OpenAI device login (e.g. \"/login openai\") first.',\n { code: \"missing_credential\" },\n );\n }\n const accountId = readStoredOAuth(DEFAULT_STORE, env)?.account_id;\n const headers = new Headers(init?.headers);\n headers.set(\"authorization\", `Bearer ${resolved.apiKey}`);\n if (accountId !== undefined) headers.set(\"ChatGPT-Account-Id\", accountId);\n return fetch(input, { ...init, headers });\n }) as typeof fetch;\n}\n\nexport const OPENAI_CHATGPT: ProviderProfile = {\n name: \"openai-chatgpt\",\n apiMode: \"responses_api\",\n authType: \"oauth_device_code\",\n baseUrl: \"https://chatgpt.com/backend-api/codex\",\n envVars: [],\n fallbackModels: [\n \"openai-chatgpt/gpt-5.4\",\n \"openai-chatgpt/gpt-5.4-mini\",\n \"openai-chatgpt/gpt-5.5\",\n ],\n // #165 — this shipped as `codex_cli_rs`, another vendor's client identifier. Claiming to be a different\n // vendor's client is a false statement of identity. Third-party clients send their OWN name against\n // this same endpoint, which also shows the route is not restricted to the official client.\n extraHeaders: { originator: \"theokit\" },\n // usetheokit/theokit-sdk#383 — carry the model's encrypted reasoning between the rounds of a turn.\n // On for THIS profile and no other because this is the endpoint the issue measured: OpenAI Codex\n // sends `include: [\"reasoning.encrypted_content\"]` with `reasoning.context: \"all_turns\"` to the\n // same backend, same model, on the same account, so acceptance is observed rather than assumed.\n // The issue's measurement — a third of our bytes, 2.8x our tokens — is what this closes together\n // with `prompt_cache_key`.\n encryptedReasoning: true,\n transform: {\n // Only `fetch` (async) can await the credential refresh; `headers` is sync and cannot.\n fetch: () => codexFetch(),\n },\n};\n","import type { ProviderProfile } from \"../types.js\";\n\nexport const OPENROUTER: ProviderProfile = {\n name: \"openrouter\",\n apiMode: \"chat_completions\",\n aliases: [\"or\"],\n // Ordered fallback (EC-10): OPENROUTER_API_KEY preferred, OPENAI_API_KEY as compat.\n envVars: [\"OPENROUTER_API_KEY\", \"OPENAI_API_KEY\"],\n authType: \"api_key\",\n baseUrl: \"https://openrouter.ai/api\",\n modelsUrl: \"https://openrouter.ai/api/v1/models\",\n hostname: \"openrouter.ai\",\n // M45 — models refreshed (claude-3-haiku retired upstream).\n fallbackModels: [\"openai/gpt-4o-mini\", \"anthropic/claude-haiku-4-5\"],\n // M45 — OpenRouter app-attribution headers. VALUES are\n // theokit's own — copying another app's referer would misattribute traffic).\n extraHeaders: { \"HTTP-Referer\": \"https://usetheo.dev\", \"X-Title\": \"theokit\" },\n};\n","import { openAiCompatibleProfile } from \"./openai-compatible.js\";\n\n/**\n * M45 — Perplexity. Its endpoint is UNVERSIONED (`/chat/completions`) — the explicit `chatCompletionsPath`\n * escape expresses it (the sonar-online model family was retired; models per models.dev `perplexity`).\n */\nexport const PERPLEXITY = openAiCompatibleProfile({\n name: \"perplexity\",\n baseUrl: \"https://api.perplexity.ai\",\n chatCompletionsPath: \"/chat/completions\",\n envVars: [\"PERPLEXITY_API_KEY\"],\n fallbackModels: [\"sonar-pro\", \"sonar\"],\n hostname: \"api.perplexity.ai\",\n});\n","import { openAiCompatibleProfile } from \"./openai-compatible.js\";\n\n/** M45 — Together AI (models.dev id `togetherai` — kept as an alias). Values per the 2026-07 snapshot. */\nexport const TOGETHER = openAiCompatibleProfile({\n name: \"together\",\n aliases: [\"togetherai\"],\n baseUrl: \"https://api.together.xyz/v1\",\n envVars: [\"TOGETHER_API_KEY\"],\n fallbackModels: [\"Qwen/Qwen2.5-7B-Instruct-Turbo\"],\n hostname: \"api.together.xyz\",\n});\n","/**\n * GCP Vertex AI profile (Adoption Roadmap #8; ADRs D286-D302).\n *\n * Required peer dep: `google-auth-library` (D288). Resolves access tokens\n * via ADC (env → gcloud → metadata server → WIF).\n *\n * Model IDs follow the convention `vertex/{dialect}/{model}`:\n * - `vertex/google/gemini-2.0-flash-001` → OpenAI-compat endpoint (D291)\n * - `vertex/anthropic/claude-sonnet-4-5@20250929` → :rawPredict (D292)\n *\n * @internal\n */\n\nimport type { ProviderProfile } from \"../types.js\";\n\nexport const VERTEX: ProviderProfile = {\n name: \"vertex\",\n apiMode: \"anthropic_messages\", // sub-dispatched in selectTransport by profile.name\n envVars: [\"GOOGLE_APPLICATION_CREDENTIALS\"],\n authType: \"gcp_oauth\",\n baseUrl: \"https://us-central1-aiplatform.googleapis.com\",\n modelsUrl: undefined,\n hostname: \"aiplatform.googleapis.com\",\n fallbackModels: [\n \"vertex/anthropic/claude-sonnet-4-5@20250929\",\n \"vertex/google/gemini-2.0-flash-001\",\n ],\n};\n\n/**\n * D293 absorbed: when location === \"global\", use `aiplatform.googleapis.com`\n * (no `global-` prefix) — known bug `streamRawPredict` 404 at\n * `global-aiplatform.googleapis.com` (a peer#10287).\n */\nexport function resolveVertexBaseUrl(opts: {\n projectId: string;\n location: string;\n modelDialect: \"anthropic\" | \"gemini\";\n}): string {\n const host =\n opts.location === \"global\"\n ? \"aiplatform.googleapis.com\"\n : `${opts.location}-aiplatform.googleapis.com`;\n if (opts.modelDialect === \"gemini\") {\n // OpenAI-compat endpoint (D291) — the client appends `/chat/completions`.\n return `https://${host}/v1/projects/${opts.projectId}/locations/${opts.location}/endpoints/openapi`;\n }\n // Anthropic — base URL up to `/publishers/anthropic` (model id appended by client).\n return `https://${host}/v1/projects/${opts.projectId}/locations/${opts.location}/publishers/anthropic`;\n}\n\n/** Detect dialect from a `vertex/{dialect}/{model}` id. Default: gemini. */\nexport function inferModelDialect(modelId: string): \"anthropic\" | \"gemini\" {\n if (modelId.includes(\"/anthropic/\")) return \"anthropic\";\n if (modelId.includes(\"/google/\")) return \"gemini\";\n return \"gemini\";\n}\n\n/** Strip the `vertex/{dialect}/` prefix so the raw model id is used in the URL. */\nexport function stripVertexPrefix(modelId: string): string {\n return modelId.replace(/^vertex\\/(anthropic|google)\\//, \"\");\n}\n","import { openAiCompatibleProfile } from \"./openai-compatible.js\";\n\n/** M45 — xAI (Grok). Values per models.dev `xai` (2026-07 snapshot; grok-2 retired). */\nexport const XAI = openAiCompatibleProfile({\n name: \"xai\",\n aliases: [\"grok\"],\n baseUrl: \"https://api.x.ai/v1\",\n envVars: [\"XAI_API_KEY\"],\n fallbackModels: [\"grok-4.5\", \"grok-4.3\"],\n hostname: \"api.x.ai\",\n});\n","/**\n * Eager registration of builtin providers (T3.3). Side-effect import:\n * importing this module registers the 4 builtins with the registry.\n *\n * Lazy user-plugin discovery is handled by `discovery.ts` (T3.4).\n *\n * @internal\n */\n\nimport { globalSingleton } from \"../../global-singleton.js\";\nimport { registerCatalogProviders } from \"../catalog-loader.js\";\nimport { registerProvider } from \"../registry.js\";\nimport { ANTHROPIC } from \"./anthropic.js\";\nimport { BEDROCK } from \"./bedrock.js\";\nimport { CEREBRAS } from \"./cerebras.js\";\nimport { COHERE } from \"./cohere.js\";\nimport { DEEPINFRA } from \"./deepinfra.js\";\nimport { GEMINI } from \"./gemini.js\";\nimport { GOOGLE } from \"./google.js\";\nimport { GROQ } from \"./groq.js\";\nimport { LLAMACPP } from \"./llamacpp.js\";\nimport { LMSTUDIO } from \"./lmstudio.js\";\nimport { MISTRAL } from \"./mistral.js\";\nimport { OLLAMA } from \"./ollama.js\";\nimport { OPENAI } from \"./openai.js\";\nimport { OPENAI_CHATGPT } from \"./openai-chatgpt.js\";\nimport { OPENROUTER } from \"./openrouter.js\";\nimport { PERPLEXITY } from \"./perplexity.js\";\nimport { TOGETHER } from \"./together.js\";\nimport { VERTEX } from \"./vertex.js\";\nimport { XAI } from \"./xai.js\";\n\n// M45 review M2 — the guard lives on globalThis like the registry itself (M44 B1): a process importing both\n// bundle copies (`@theokit/sdk` + `@theokit/sdk/models`) must not re-register 19 builtins with bogus\n// \"overridden by user plugin\" WARNs.\nconst _registeredState = globalSingleton(\"theokit-sdk.providers.builtins-registered\", () => ({\n done: false,\n}));\n\nexport function registerBuiltins(): void {\n if (_registeredState.done) return;\n _registeredState.done = true;\n // First-party builtins (take priority — registered first)\n registerProvider(ANTHROPIC);\n registerProvider(OPENAI);\n registerProvider(OPENAI_CHATGPT);\n registerProvider(OPENROUTER);\n registerProvider(GEMINI);\n registerProvider(OLLAMA);\n registerProvider(LMSTUDIO);\n registerProvider(LLAMACPP);\n registerProvider(BEDROCK);\n registerProvider(VERTEX);\n // M45 — the data-provider fleet (one file each on the openai-compatible base).\n registerProvider(GOOGLE);\n registerProvider(MISTRAL);\n registerProvider(GROQ);\n registerProvider(COHERE);\n registerProvider(DEEPINFRA);\n registerProvider(TOGETHER);\n registerProvider(XAI);\n registerProvider(PERPLEXITY);\n registerProvider(CEREBRAS);\n // Dynamic catalog — 40+ providers from JSON (T10.1, ADR D447)\n registerCatalogProviders();\n}\n\n/** Test-only reset. @internal */\nexport function _resetBuiltinsRegistered(): void {\n _registeredState.done = false;\n}\n\nexport {\n ANTHROPIC,\n BEDROCK,\n GEMINI,\n LLAMACPP,\n LMSTUDIO,\n OLLAMA,\n OPENAI,\n OPENAI_CHATGPT,\n OPENROUTER,\n VERTEX,\n};\n"]}
|