@warmdrift/kgauto-compiler 2.0.0-alpha.95 → 2.0.0-alpha.97

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/dist/profiles.js CHANGED
@@ -836,18 +836,22 @@ var PROFILES_RAW = [
836
836
  maxContextTokens: 1e6,
837
837
  maxOutputTokens: 384e3,
838
838
  maxTools: 16,
839
- parallelToolCalls: false,
839
+ // alpha.96 — CORRECTED from `false`, which was AI-generated at greenfield
840
+ // (2026-04-25) and never re-checked. Measured 2026-08-28 direct to
841
+ // api.deepseek.com, no kgauto in the path, 6 tools offered, 3 trials:
842
+ // 3 parallel tool calls returned, 3/3. L-040's original evidence said
843
+ // "7-8 calls per step" — which was never a claim that only one tool may be
844
+ // offered. See the note in lower.ts:lowerDeepSeek.
845
+ parallelToolCalls: true,
840
846
  structuredOutput: "native",
841
847
  systemPromptMode: "inline",
842
848
  streaming: true,
843
- cliffs: [
844
- {
845
- metric: "tool_count",
846
- threshold: 1,
847
- action: "drop_to_top_relevant",
848
- reason: "Sequential tool calls only \u2014 L-040"
849
- }
850
- ],
849
+ // alpha.96 — the `tool_count@1 -> drop_to_top_relevant` cliff was DELETED.
850
+ // It restated `parallelToolCalls: false` as a threshold and was falsified by
851
+ // the same measurement. It is not kept-and-flagged (the usual lifecycle)
852
+ // because it was never a real failure mode: it was a second enforcement of a
853
+ // wrong belief, and keeping it active would keep amputating tools.
854
+ cliffs: [],
851
855
  costInputPer1m: 0.44,
852
856
  costOutputPer1m: 1.32,
853
857
  lowering: {
@@ -859,7 +863,12 @@ var PROFILES_RAW = [
859
863
  { signal: "rate_limit", action: "escalate", reason: "429 \u2014 escalate" }
860
864
  ],
861
865
  strengths: ["cost", "1m_context", "json_output", "code", "reasoning"],
862
- weaknesses: ["parallel_tools", "large_tool_sets"],
866
+ // alpha.96 — 'parallel_tools' REMOVED: measurably false (2026-08-28, direct
867
+ // to api.deepseek.com, 6 tools, 3 trials, 3 parallel calls, both models).
868
+ // 'large_tool_sets' KEPT and explicitly unverified — the probe offered 6 of
869
+ // a declared maxTools 16, so it says nothing about behaviour at 16. Not
870
+ // falsified is not the same as confirmed.
871
+ weaknesses: ["large_tool_sets"],
863
872
  // alpha.47 — explicit slow override. Tag derivation would say 'medium'
864
873
  // (no 'latency' weakness, no 'speed' strength), but the alpha.46 shadow
865
874
  // probe MEASURED deepseek-v4-flash at 20485ms served (2026-06-03) — ~2.3×
@@ -871,7 +880,11 @@ var PROFILES_RAW = [
871
880
  notes: "Cheap workhorse. 1M context, 384k max output. Cache-hit input $0.0028/M (1/50\xD7 of miss). Aliased as `deepseek-chat` (non-thinking) and `deepseek-reasoner` (thinking) \u2014 see ALIASES. PEAK/OFF-PEAK since 2026-08-16 (page fetched 2026-08-24): peak = weekdays 01:00-04:00 + 06:00-10:00 UTC, off-peak = all other hours at HALF peak. Encoded prices ARE the peak rate (conservative: never understate cost); off-peak traffic costs half what the estimate says. alpha.87 was built + verified 2026-08-14 (prices then live), held at the publish gate 10 days, and published 2026-08-24 \u2014 by which time the 08-16 transition had killed them ($0.14/$0.28 flash, $0.435/$0.87 pro); corrected here (alpha.88). Build-then-hold is the mechanism: re-verify prices at publish when publish is not same-session as build. A single price field cannot represent a two-rate schedule; catalog-sync extractions oscillate between the rates day-to-day (peak read 08-21, off-peak read 08-22) \u2014 time-of-day pricing remains unmodeled, roadmap.",
872
881
  // Master plan §6.2 anchor. Brain-validated tier 1 cross-provider for
873
882
  // classify (169 rows, 0% empty). Tier 0 for summarize-with-no-tools.
874
- // Falls off on hunt (sequential tools L-040) and reasoning depth.
883
+ // alpha.96 the hunt half of this sentence is RETRACTED: "sequential tools
884
+ // — L-040" was falsified 2026-08-28 (direct measurement, 3 parallel tool
885
+ // calls, both models). Do not use this comment to re-lower `hunt`; it is
886
+ // the exact prose that justified the wrong score. The reasoning-depth
887
+ // rationale is untouched and still carries `critique`.
875
888
  archetypePerf: {
876
889
  classify: 7,
877
890
  // brain-validated, 169 rows
@@ -883,8 +896,16 @@ var PROFILES_RAW = [
883
896
  plan: 5,
884
897
  extract: 5,
885
898
  critique: 4,
886
- hunt: 4
887
- // sequential tool calls only — L-040
899
+ // alpha.96 — was 4. Its ONLY written justification was "sequential tool
900
+ // calls only — L-040", which is falsified. A score derived from a false
901
+ // premise cannot be kept, and re-guessing a penalty would just relaunder
902
+ // the same belief. Set to the floor (6) = "no evidence of deficiency",
903
+ // NOT an endorsement. This is a JUDGMENT, not a measurement, and it is
904
+ // the honest direction of the two: the only hunt-shaped evidence we have
905
+ // is positive (a research-agent fixture, 3 of 3 demanded tools correctly
906
+ // selected from a 6-tool menu, 3/3 trials, both models). Replace with a
907
+ // real number from the golden-eval hunt corpus — that is what it is for.
908
+ hunt: 6
888
909
  },
889
910
  // alpha.43 — family-level conventions for the `deepseek-chat` family
890
911
  // (V4-Flash + future non-thinking-mode members). V4-Flash struggles
@@ -909,18 +930,22 @@ var PROFILES_RAW = [
909
930
  maxContextTokens: 1e6,
910
931
  maxOutputTokens: 384e3,
911
932
  maxTools: 16,
912
- parallelToolCalls: false,
933
+ // alpha.96 — CORRECTED from `false`, which was AI-generated at greenfield
934
+ // (2026-04-25) and never re-checked. Measured 2026-08-28 direct to
935
+ // api.deepseek.com, no kgauto in the path, 6 tools offered, 3 trials:
936
+ // 3 parallel tool calls returned, 3/3. L-040's original evidence said
937
+ // "7-8 calls per step" — which was never a claim that only one tool may be
938
+ // offered. See the note in lower.ts:lowerDeepSeek.
939
+ parallelToolCalls: true,
913
940
  structuredOutput: "native",
914
941
  systemPromptMode: "inline",
915
942
  streaming: true,
916
- cliffs: [
917
- {
918
- metric: "tool_count",
919
- threshold: 1,
920
- action: "drop_to_top_relevant",
921
- reason: "Sequential tool calls only \u2014 L-040"
922
- }
923
- ],
943
+ // alpha.96 — the `tool_count@1 -> drop_to_top_relevant` cliff was DELETED.
944
+ // It restated `parallelToolCalls: false` as a threshold and was falsified by
945
+ // the same measurement. It is not kept-and-flagged (the usual lifecycle)
946
+ // because it was never a real failure mode: it was a second enforcement of a
947
+ // wrong belief, and keeping it active would keep amputating tools.
948
+ cliffs: [],
924
949
  // Verified against the live DeepSeek pricing page 2026-06-22: the 75%-off
925
950
  // launch "promo" ($0.435/$0.87) did NOT revert on 2026-05-31 — it became the
926
951
  // standing price (docs show $0.435 in / $0.87 out cache-miss, $0.003625
@@ -938,7 +963,12 @@ var PROFILES_RAW = [
938
963
  { signal: "rate_limit", action: "escalate", reason: "429 \u2014 escalate" }
939
964
  ],
940
965
  strengths: ["quality", "reasoning", "1m_context", "json_output", "code", "extended_thinking"],
941
- weaknesses: ["parallel_tools", "large_tool_sets"],
966
+ // alpha.96 — 'parallel_tools' REMOVED: measurably false (2026-08-28, direct
967
+ // to api.deepseek.com, 6 tools, 3 trials, 3 parallel calls, both models).
968
+ // 'large_tool_sets' KEPT and explicitly unverified — the probe offered 6 of
969
+ // a declared maxTools 16, so it says nothing about behaviour at 16. Not
970
+ // falsified is not the same as confirmed.
971
+ weaknesses: ["large_tool_sets"],
942
972
  // alpha.47 — explicit slow override. Measured 47722ms on the alpha.46
943
973
  // shadow probe (2026-06-03) — it's an extended-thinking reasoner, slowest
944
974
  // of the served set. Tag derivation would say 'medium'; the measurement says
@@ -957,14 +987,24 @@ var PROFILES_RAW = [
957
987
  summarize: 7,
958
988
  extract: 6,
959
989
  transform: 6,
960
- hunt: 4
961
- // sequential toolssame as V4-Flash
990
+ // alpha.96 — was 4. Its ONLY written justification was "sequential tool
991
+ // calls onlyL-040", which is falsified. A score derived from a false
992
+ // premise cannot be kept, and re-guessing a penalty would just relaunder
993
+ // the same belief. Set to the floor (6) = "no evidence of deficiency",
994
+ // NOT an endorsement. This is a JUDGMENT, not a measurement, and it is
995
+ // the honest direction of the two: the only hunt-shaped evidence we have
996
+ // is positive (a research-agent fixture, 3 of 3 demanded tools correctly
997
+ // selected from a 6-tool menu, 3/3 trials, both models). Replace with a
998
+ // real number from the golden-eval hunt corpus — that is what it is for.
999
+ hunt: 6
962
1000
  },
963
1001
  // alpha.43 — family-level conventions for the `deepseek-reasoner` family
964
1002
  // (V4-Pro is the family rep; future thinking-mode members inherit).
965
1003
  //
966
- // The decisive-archetype suffix is the load-bearing piece: 2026-05-28
967
- // first real V4-Pro probe on tt-intel/classify (exclusion-finding ID 20)
1004
+ // The decisive-archetype suffix is the load-bearing piece. ⚠️ alpha.96:
1005
+ // its evidence was purged as poison on 2026-05-29 (s51) retained as a
1006
+ // hypothesis, not a finding. Original claim, for the record: 2026-05-28
1007
+ // first real V4-Pro probe on tt-intel/classify
968
1008
  // showed 8/10 judge rationales citing "candidate hedges and fails to
969
1009
  // commit to a single classification" or "candidate refuses to pick
970
1010
  // among the labels." Without the forcing-function suffix, every
@@ -985,24 +1025,35 @@ var PROFILES_RAW = [
985
1025
  {
986
1026
  archetype: "classify",
987
1027
  promptSuffix: "\n\nOutput exactly one classification label. Do not hedge, do not add preamble, do not explain your reasoning. If uncertain, pick the most likely label and commit to it.",
988
- reason: "Reasoners (deepseek-reasoner family) hedge on decisive-output archetypes by design. Evidence: 2026-05-28 V4-Pro probe on tt-intel/classify (exclusion-finding ID 20, brain probe_outcomes); 8 of 10 judge rationales cited hedging or refusal-to-commit. Forcing-function suffix converts reasoner output to decisive labels."
1028
+ reason: 'Reasoners (deepseek-reasoner family) hedge on decisive-output archetypes by design. UNEVIDENCED HYPOTHESIS as of alpha.96 \u2014 this reason used to cite a 2026-05-28 V4-Pro probe on tt-intel/classify ("8 of 10 judge rationales cited hedging") and named `brain probe_outcomes` as its source. That source is EMPTY: probed 2026-08-28, zero probe_outcomes rows exist before 2026-06-01 and zero `classify` rows have ever existed. The probe was deleted on 2026-05-29 by the s51 poison purge \u2014 it replayed against truncated `prompt_preview`, which s51 established yields meaningless verdicts. The conclusion outlived the purge of its own evidence and kept shaping prompts for three months. The pointer was wrong too: exclusion-finding ID 20 is a zero-calls `recommend-probe` on classify, confidence low, later declined \u2014 the probe TRIGGER, never its result. KEPT because a promptSuffix is capability-PRESERVING (adds an instruction, removes nothing a raw call had) and is visible in mutations_applied. Re-evidence from the golden-eval corpus or drop it.'
989
1029
  },
990
1030
  {
991
1031
  archetype: "extract",
992
1032
  promptSuffix: "\n\nOutput exactly the requested structured fields. Do not hedge, do not add preamble, do not explain your reasoning. If a field is unknown, emit the field with a null/empty value and commit to that \u2014 do not refuse to extract.",
993
- reason: "Reasoners (deepseek-reasoner family) hedge on decisive-output archetypes by design. Evidence: same family failure shape as classify (exclusion-finding ID 20, 2026-05-28). Forcing-function suffix asks for commitment instead of epistemic-humility hedging."
1033
+ reason: 'Reasoners (deepseek-reasoner family) hedge on decisive-output archetypes by design. UNEVIDENCED HYPOTHESIS as of alpha.96 \u2014 the supporting evidence NO LONGER EXISTS. The cited 2026-05-28 V4-Pro classify probe ("8/10 judge rationales") was deleted on 2026-05-29 by the s51 poison purge, because it replayed against truncated `prompt_preview` and s51 established such verdicts are meaningless. Probed: zero probe_outcomes rows exist before 2026-06-01 and zero `classify` rows have EVER existed. The pointer was also wrong \u2014 exclusion-finding ID 20 is a zero-calls `recommend-probe` on classify, confidence low, later declined; it was the trigger for the probe, never its result. KEPT anyway because a promptSuffix is capability-PRESERVING (it adds an instruction and removes nothing a raw call had), so the cost of being wrong is bounded and a consumer can see it in mutations_applied. Re-evidence it from the golden-eval corpus or drop it.'
994
1034
  },
995
1035
  {
996
1036
  archetype: "ask",
997
1037
  promptSuffix: "\n\nAnswer the question directly. Do not hedge, do not add preamble, do not explain your reasoning unless explicitly asked. If uncertain, give your best answer and commit to it.",
998
- reason: "Reasoners (deepseek-reasoner family) hedge on decisive-output archetypes by design. Evidence: same family failure shape as classify (exclusion-finding ID 20, 2026-05-28). Forcing-function suffix asks for commitment instead of epistemic-humility hedging."
999
- },
1000
- {
1001
- archetype: "hunt",
1002
- whenToolCountAtLeast: 3,
1003
- cliffWarning: "Reasoners (deepseek-reasoner family) produce sequential reasoning chains by design; hunt archetypes with 3+ parallel tools lose substantial throughput. Consider gemini-flash family (parallel-strong) instead \u2014 see L-040 / L-041.",
1004
- reason: "L-040 + L-041 architectural reading; 2026-05-28 V4-Pro probe evidence (exclusion-finding ID 20) confirms reasoner-family hunt fit is structurally weak."
1038
+ reason: 'Reasoners (deepseek-reasoner family) hedge on decisive-output archetypes by design. UNEVIDENCED HYPOTHESIS as of alpha.96 \u2014 the supporting evidence NO LONGER EXISTS. The cited 2026-05-28 V4-Pro classify probe ("8/10 judge rationales") was deleted on 2026-05-29 by the s51 poison purge, because it replayed against truncated `prompt_preview` and s51 established such verdicts are meaningless. Probed: zero probe_outcomes rows exist before 2026-06-01 and zero `classify` rows have EVER existed. The pointer was also wrong \u2014 exclusion-finding ID 20 is a zero-calls `recommend-probe` on classify, confidence low, later declined; it was the trigger for the probe, never its result. KEPT anyway because a promptSuffix is capability-PRESERVING (it adds an instruction and removes nothing a raw call had), so the cost of being wrong is bounded and a consumer can see it in mutations_applied. Re-evidence it from the golden-eval corpus or drop it.'
1005
1039
  }
1040
+ // alpha.96 — the `hunt` convention was DELETED, not corrected.
1041
+ // It warned that "hunt archetypes with 3+ parallel tools lose substantial
1042
+ // throughput" and steered callers to gemini-flash. Measured false
1043
+ // 2026-08-28: 6 tools offered, 3 of 3 demanded served in parallel, 3/3
1044
+ // trials, both V4 models, direct to the provider.
1045
+ //
1046
+ // Its cited evidence did not say what it claimed. exclusion-finding ID 20
1047
+ // is `intent_archetype: 'classify'` (not hunt), `verdict:
1048
+ // 'recommend-probe'` (i.e. NOBODY PROBED), `confidence: 'low'`, its
1049
+ // message reads "deepseek-v4-pro has zero calls", it was later
1050
+ // `declined`, and its own `parallel_tool_hint: false` was this profile's
1051
+ // own belief round-tripped back as input. A no-data finding on the wrong
1052
+ // archetype was paraphrased into "probe evidence confirms".
1053
+ //
1054
+ // Deleted rather than re-scoped because a cliffWarning is
1055
+ // capability-REDUCING (it steers traffic away from a model) and nothing
1056
+ // evidenced remains. Re-add only from a measured hunt eval.
1006
1057
  ]
1007
1058
  },
1008
1059
  // ── OpenAI ──
@@ -1901,6 +1952,19 @@ var PROFILES_RAW = [
1901
1952
  id: "glm-5.2",
1902
1953
  verifiedAgainstDocs: "2026-07-18",
1903
1954
  provider: "zai",
1955
+ probedLimits: [
1956
+ {
1957
+ metric: "tool_count",
1958
+ testedAt: 6,
1959
+ demanded: 3,
1960
+ served: [3, 3, 3],
1961
+ outcome: "held",
1962
+ trials: 3,
1963
+ lastProbed: "2026-08-29",
1964
+ route: "openrouter:baidu",
1965
+ claim: "Measured 2026-08-29 via OpenRouter (served-by Baidu): 6 tools offered, 3 of 3 demanded served in parallel, 3/3 trials. Route-scoped \u2014 direct z.ai is unmeasured (no key held)."
1966
+ }
1967
+ ],
1904
1968
  status: "preview",
1905
1969
  maxContextTokens: 1048576,
1906
1970
  maxOutputTokens: 131072,
@@ -1911,7 +1975,8 @@ var PROFILES_RAW = [
1911
1975
  // NOTHING about multiple tool_calls per response. Conservative false so
1912
1976
  // hunt-shaped ranking doesn't over-promise; flip on doc or probe
1913
1977
  // evidence (L-081: undocumented ≠ true).
1914
- parallelToolCalls: false,
1978
+ parallelToolCalls: true,
1979
+ // alpha.96 — see weaknesses note; was an unevidenced blanket false
1915
1980
  structuredOutput: "native",
1916
1981
  systemPromptMode: "inline",
1917
1982
  streaming: true,
@@ -1934,7 +1999,17 @@ var PROFILES_RAW = [
1934
1999
  { signal: "model_not_found", action: "escalate", reason: "Deprecated \u2014 escalate (L-061)" }
1935
2000
  ],
1936
2001
  strengths: ["cost", "1m_context", "code", "tool_use", "json_output", "reasoning"],
1937
- weaknesses: ["parallel_tools"],
2002
+ // alpha.96 — 'parallel_tools' REMOVED. Measured 2026-08-29 via OpenRouter
2003
+ // (served-by Baidu), 6 tools offered, 3 of 3 demanded served in PARALLEL,
2004
+ // 3/3 trials. ROUTE-SCOPED: per the alpha.92 execute-leg contract there is
2005
+ // no cross-route verdict transfer, and direct z.ai is UNMEASURED (we hold
2006
+ // no zai key). But `parallelToolCalls: false` was a blanket claim with no
2007
+ // route qualification and no evidence at all, and it is capability-
2008
+ // REDUCING — it drives requires-adapter/reject. An unsubstantiated reducer
2009
+ // must not reduce. Contradicted on the one route we can reach is enough to
2010
+ // stop enforcing it; it is not enough to claim the opposite, which is why
2011
+ // probedLimits below carries the route.
2012
+ weaknesses: [],
1938
2013
  notes: "GLM-5.2 (Z.ai, 2026-06): agentic-coding flagship. 1,048,576 ctx / 131,072 max out. $1.40/$4.40 per 1M; cached input $0.26/M (automatic caching, no marker; storage limited-time free as of 2026-07-18). Thinking on by default (`thinking.type`), `reasoning_effort` max..none. Parallel tool calls UNDOCUMENTED on the hosted API \u2014 profile says false until doc or probe evidence. status:preview \u2014 no brain evidence yet; earns placement via the machinery.",
1939
2014
  // Starter hypotheses — verify with telemetry/probes; NO brain evidence
1940
2015
  // yet. Anchored on the vendor's agentic-coding positioning at a
@@ -1952,8 +2027,11 @@ var PROFILES_RAW = [
1952
2027
  extract: 6,
1953
2028
  critique: 6,
1954
2029
  classify: 6,
1955
- hunt: 5
1956
- // tools work; parallel unproven discounted
2030
+ // alpha.96 — was 5, discounted for "parallel unproven". Parallel is no
2031
+ // longer unproven on the reachable route (3/3, 2026-08-29). The discount
2032
+ // had no other stated basis, so it is withdrawn to the neutral floor.
2033
+ // Judgment, not measurement — same standard as the DeepSeek correction.
2034
+ hunt: 6
1957
2035
  }
1958
2036
  },
1959
2037
  // ── Moonshot (Kimi) ──
@@ -2086,7 +2164,24 @@ function bestEffortProfile(id) {
2086
2164
  maxContextTokens: 128e3,
2087
2165
  maxOutputTokens: 4096,
2088
2166
  maxTools: donor.maxTools,
2089
- parallelToolCalls: false,
2167
+ // alpha.97 — was `false`. That was the SAME MISTAKE as the three profiles
2168
+ // corrected in alpha.96, in the one place it does the most damage: applied
2169
+ // to models nobody has measured at all.
2170
+ //
2171
+ // `false` here is capability-REDUCING and unsubstantiated by construction —
2172
+ // a synthesized profile exists precisely because we know nothing. It made
2173
+ // `getModelCompatibility(<any unprofiled model>, {archetype:'hunt'})`
2174
+ // return `requires-adapter` (verified: raw score 5 vs floor 6, adapter
2175
+ // offered), so every consumer on `onUnprofiledModel:'best-effort'` was told
2176
+ // to serialize tool calls on a model we had never touched.
2177
+ //
2178
+ // The never-worse-than-raw rule decides it: for an unknown model kgauto
2179
+ // must behave exactly as a direct call would, and a direct call passes
2180
+ // every tool and lets the provider default apply. `true` is not a claim
2181
+ // that the model parallelises — it is the absence of a claim, expressed as
2182
+ // non-interference. The honest long-term fix is a third state (unknown)
2183
+ // rather than a boolean; that is P4 in the rebuild contract.
2184
+ parallelToolCalls: true,
2090
2185
  structuredOutput: "none",
2091
2186
  systemPromptMode: donor.systemPromptMode,
2092
2187
  streaming: donor.streaming,
@@ -2096,7 +2191,7 @@ function bestEffortProfile(id) {
2096
2191
  lowering: donor.lowering,
2097
2192
  recovery: [],
2098
2193
  strengths: [],
2099
- weaknesses: ["best-effort synthesized profile \u2014 no verified capability data"],
2194
+ weaknesses: ["best-effort synthesized profile \u2014 no verified capability data; kgauto does not reduce capability for a model it has never measured (alpha.97)"],
2100
2195
  notes: `Synthesized by onUnprofiledModel:'best-effort' (provider ${provider} inferred from id; wire mechanics borrowed from ${donor.id}). No cliffs, no measured knowledge, cost UNKNOWN (recorded as 0). Replace via registerProfiles() for real guards.`
2101
2196
  };
2102
2197
  CONSUMER_INDEX.set(canonical, synth);
package/dist/profiles.mjs CHANGED
@@ -14,7 +14,7 @@ import {
14
14
  registerProfiles,
15
15
  resolveModelAlias,
16
16
  tryGetProfile
17
- } from "./chunk-D3BVYXNA.mjs";
17
+ } from "./chunk-HHIXHL4O.mjs";
18
18
  export {
19
19
  ALIASES,
20
20
  LATENCY_TIER_MS,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@warmdrift/kgauto-compiler",
3
- "version": "2.0.0-alpha.95",
3
+ "version": "2.0.0-alpha.97",
4
4
  "description": "Prompt compiler with executable provider knowledge for multi-model AI apps: normalized multi-provider transport with fallback chains, compile-time cliff guards, a curated model registry, and a telemetry flight recorder. Swap models without rewriting prompts.",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",