@warmdrift/kgauto-compiler 2.0.0-alpha.94 → 2.0.0-alpha.96

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
@@ -92,6 +92,26 @@ var PROFILES_RAW = [
92
92
  // on Fable 5 (omit instead) — MOOT here: ANTHROPIC_LOWERING_BASE carries no
93
93
  // `thinking` field, so kgauto never sends the param. (L-049/L-081.)
94
94
  id: "claude-fable-5",
95
+ // alpha.95 — MEASURED, 2026-08-28, guard-probe-suite --discover run 32.
96
+ // This model declared no cliffs, which is why the offline check had
97
+ // nothing measured to say about it. The claim states its denominator:
98
+ // the fixture demands 3 specific tools from a 20-tool menu, so this is
99
+ // evidence of correct selection + 3-way parallel emission at that menu
100
+ // size — NOT evidence of 20 concurrent calls.
101
+ probedLimits: [
102
+ {
103
+ metric: "tool_count",
104
+ testedAt: 20,
105
+ demanded: 3,
106
+ served: [3, 3, 3],
107
+ outcome: "held",
108
+ trials: 3,
109
+ lastProbed: "2026-08-28",
110
+ probeRunId: 32,
111
+ route: "direct",
112
+ claim: "Measured 2026-08-28: served 3 of 3 demanded tools from a 20-tool menu, 3/3 trials, direct route."
113
+ }
114
+ ],
95
115
  verifiedAgainstDocs: "2026-06-21",
96
116
  provider: "anthropic",
97
117
  status: "current",
@@ -212,6 +232,26 @@ var PROFILES_RAW = [
212
232
  // failure, where a template-clone of PRICE (the field that actually varies,
213
233
  // there by 2.5-3.75x) went unverified for 65 days.
214
234
  id: "claude-opus-5",
235
+ // alpha.95 — MEASURED, 2026-08-28, guard-probe-suite --discover run 33.
236
+ // This model declared no cliffs, which is why the offline check had
237
+ // nothing measured to say about it. The claim states its denominator:
238
+ // the fixture demands 3 specific tools from a 20-tool menu, so this is
239
+ // evidence of correct selection + 3-way parallel emission at that menu
240
+ // size — NOT evidence of 20 concurrent calls.
241
+ probedLimits: [
242
+ {
243
+ metric: "tool_count",
244
+ testedAt: 20,
245
+ demanded: 3,
246
+ served: [3, 3, 3],
247
+ outcome: "held",
248
+ trials: 3,
249
+ lastProbed: "2026-08-28",
250
+ probeRunId: 33,
251
+ route: "direct",
252
+ claim: "Measured 2026-08-28: served 3 of 3 demanded tools from a 20-tool menu, 3/3 trials, direct route."
253
+ }
254
+ ],
215
255
  verifiedAgainstDocs: "2026-07-25",
216
256
  provider: "anthropic",
217
257
  status: "current",
@@ -796,18 +836,22 @@ var PROFILES_RAW = [
796
836
  maxContextTokens: 1e6,
797
837
  maxOutputTokens: 384e3,
798
838
  maxTools: 16,
799
- 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,
800
846
  structuredOutput: "native",
801
847
  systemPromptMode: "inline",
802
848
  streaming: true,
803
- cliffs: [
804
- {
805
- metric: "tool_count",
806
- threshold: 1,
807
- action: "drop_to_top_relevant",
808
- reason: "Sequential tool calls only \u2014 L-040"
809
- }
810
- ],
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: [],
811
855
  costInputPer1m: 0.44,
812
856
  costOutputPer1m: 1.32,
813
857
  lowering: {
@@ -819,7 +863,12 @@ var PROFILES_RAW = [
819
863
  { signal: "rate_limit", action: "escalate", reason: "429 \u2014 escalate" }
820
864
  ],
821
865
  strengths: ["cost", "1m_context", "json_output", "code", "reasoning"],
822
- 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"],
823
872
  // alpha.47 — explicit slow override. Tag derivation would say 'medium'
824
873
  // (no 'latency' weakness, no 'speed' strength), but the alpha.46 shadow
825
874
  // probe MEASURED deepseek-v4-flash at 20485ms served (2026-06-03) — ~2.3×
@@ -831,7 +880,11 @@ var PROFILES_RAW = [
831
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.",
832
881
  // Master plan §6.2 anchor. Brain-validated tier 1 cross-provider for
833
882
  // classify (169 rows, 0% empty). Tier 0 for summarize-with-no-tools.
834
- // 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`.
835
888
  archetypePerf: {
836
889
  classify: 7,
837
890
  // brain-validated, 169 rows
@@ -843,8 +896,16 @@ var PROFILES_RAW = [
843
896
  plan: 5,
844
897
  extract: 5,
845
898
  critique: 4,
846
- hunt: 4
847
- // 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
848
909
  },
849
910
  // alpha.43 — family-level conventions for the `deepseek-chat` family
850
911
  // (V4-Flash + future non-thinking-mode members). V4-Flash struggles
@@ -869,18 +930,22 @@ var PROFILES_RAW = [
869
930
  maxContextTokens: 1e6,
870
931
  maxOutputTokens: 384e3,
871
932
  maxTools: 16,
872
- 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,
873
940
  structuredOutput: "native",
874
941
  systemPromptMode: "inline",
875
942
  streaming: true,
876
- cliffs: [
877
- {
878
- metric: "tool_count",
879
- threshold: 1,
880
- action: "drop_to_top_relevant",
881
- reason: "Sequential tool calls only \u2014 L-040"
882
- }
883
- ],
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: [],
884
949
  // Verified against the live DeepSeek pricing page 2026-06-22: the 75%-off
885
950
  // launch "promo" ($0.435/$0.87) did NOT revert on 2026-05-31 — it became the
886
951
  // standing price (docs show $0.435 in / $0.87 out cache-miss, $0.003625
@@ -898,7 +963,12 @@ var PROFILES_RAW = [
898
963
  { signal: "rate_limit", action: "escalate", reason: "429 \u2014 escalate" }
899
964
  ],
900
965
  strengths: ["quality", "reasoning", "1m_context", "json_output", "code", "extended_thinking"],
901
- 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"],
902
972
  // alpha.47 — explicit slow override. Measured 47722ms on the alpha.46
903
973
  // shadow probe (2026-06-03) — it's an extended-thinking reasoner, slowest
904
974
  // of the served set. Tag derivation would say 'medium'; the measurement says
@@ -917,14 +987,24 @@ var PROFILES_RAW = [
917
987
  summarize: 7,
918
988
  extract: 6,
919
989
  transform: 6,
920
- hunt: 4
921
- // 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
922
1000
  },
923
1001
  // alpha.43 — family-level conventions for the `deepseek-reasoner` family
924
1002
  // (V4-Pro is the family rep; future thinking-mode members inherit).
925
1003
  //
926
- // The decisive-archetype suffix is the load-bearing piece: 2026-05-28
927
- // 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
928
1008
  // showed 8/10 judge rationales citing "candidate hedges and fails to
929
1009
  // commit to a single classification" or "candidate refuses to pick
930
1010
  // among the labels." Without the forcing-function suffix, every
@@ -945,24 +1025,35 @@ var PROFILES_RAW = [
945
1025
  {
946
1026
  archetype: "classify",
947
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.",
948
- 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.'
949
1029
  },
950
1030
  {
951
1031
  archetype: "extract",
952
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.",
953
- 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.'
954
1034
  },
955
1035
  {
956
1036
  archetype: "ask",
957
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.",
958
- 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."
959
- },
960
- {
961
- archetype: "hunt",
962
- whenToolCountAtLeast: 3,
963
- 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.",
964
- 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.'
965
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.
966
1057
  ]
967
1058
  },
968
1059
  // ── OpenAI ──
@@ -1090,6 +1181,26 @@ var PROFILES_RAW = [
1090
1181
  },
1091
1182
  {
1092
1183
  id: "gpt-5.4-mini",
1184
+ // alpha.95 — MEASURED, 2026-08-28, guard-probe-suite --discover run 34.
1185
+ // This model declared no cliffs, which is why the offline check had
1186
+ // nothing measured to say about it. The claim states its denominator:
1187
+ // the fixture demands 3 specific tools from a 20-tool menu, so this is
1188
+ // evidence of correct selection + 3-way parallel emission at that menu
1189
+ // size — NOT evidence of 20 concurrent calls.
1190
+ probedLimits: [
1191
+ {
1192
+ metric: "tool_count",
1193
+ testedAt: 20,
1194
+ demanded: 3,
1195
+ served: [3, 3, 3],
1196
+ outcome: "held",
1197
+ trials: 3,
1198
+ lastProbed: "2026-08-28",
1199
+ probeRunId: 34,
1200
+ route: "direct",
1201
+ claim: "Measured 2026-08-28: served 3 of 3 demanded tools from a 20-tool menu, 3/3 trials, direct route."
1202
+ }
1203
+ ],
1093
1204
  verifiedAgainstDocs: "2026-05-17",
1094
1205
  provider: "openai",
1095
1206
  status: "current",
@@ -1133,6 +1244,26 @@ var PROFILES_RAW = [
1133
1244
  },
1134
1245
  {
1135
1246
  id: "gpt-5.4-nano",
1247
+ // alpha.95 — MEASURED, 2026-08-28, guard-probe-suite --discover run 35.
1248
+ // This model declared no cliffs, which is why the offline check had
1249
+ // nothing measured to say about it. The claim states its denominator:
1250
+ // the fixture demands 3 specific tools from a 20-tool menu, so this is
1251
+ // evidence of correct selection + 3-way parallel emission at that menu
1252
+ // size — NOT evidence of 20 concurrent calls.
1253
+ probedLimits: [
1254
+ {
1255
+ metric: "tool_count",
1256
+ testedAt: 20,
1257
+ demanded: 3,
1258
+ served: [3, 3, 3],
1259
+ outcome: "held",
1260
+ trials: 3,
1261
+ lastProbed: "2026-08-28",
1262
+ probeRunId: 35,
1263
+ route: "direct",
1264
+ claim: "Measured 2026-08-28: served 3 of 3 demanded tools from a 20-tool menu, 3/3 trials, direct route."
1265
+ }
1266
+ ],
1136
1267
  verifiedAgainstDocs: "2026-05-17",
1137
1268
  provider: "openai",
1138
1269
  status: "current",
@@ -1748,6 +1879,26 @@ var PROFILES_RAW = [
1748
1879
  // 'preview' per the Fable precedent — no brain evidence yet; promotion to
1749
1880
  // 'current' is an explicit call. (L-049/L-081.)
1750
1881
  id: "claude-sonnet-5",
1882
+ // alpha.95 — MEASURED, 2026-08-28, guard-probe-suite --discover run 36.
1883
+ // This model declared no cliffs, which is why the offline check had
1884
+ // nothing measured to say about it. The claim states its denominator:
1885
+ // the fixture demands 3 specific tools from a 20-tool menu, so this is
1886
+ // evidence of correct selection + 3-way parallel emission at that menu
1887
+ // size — NOT evidence of 20 concurrent calls.
1888
+ probedLimits: [
1889
+ {
1890
+ metric: "tool_count",
1891
+ testedAt: 20,
1892
+ demanded: 3,
1893
+ served: [3, 3, 3],
1894
+ outcome: "held",
1895
+ trials: 3,
1896
+ lastProbed: "2026-08-28",
1897
+ probeRunId: 36,
1898
+ route: "direct",
1899
+ claim: "Measured 2026-08-28: served 3 of 3 demanded tools from a 20-tool menu, 3/3 trials, direct route."
1900
+ }
1901
+ ],
1751
1902
  verifiedAgainstDocs: "2026-08-14",
1752
1903
  provider: "anthropic",
1753
1904
  status: "current",
package/dist/profiles.mjs CHANGED
@@ -14,7 +14,7 @@ import {
14
14
  registerProfiles,
15
15
  resolveModelAlias,
16
16
  tryGetProfile
17
- } from "./chunk-57XCZGN5.mjs";
17
+ } from "./chunk-AMV3M2KH.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.94",
3
+ "version": "2.0.0-alpha.96",
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",
@@ -114,4 +114,4 @@
114
114
  "typescript": "^5.7.0",
115
115
  "vitest": "^3.1.0"
116
116
  }
117
- }
117
+ }