@warmdrift/kgauto-compiler 2.0.0-alpha.85 → 2.0.0-alpha.87

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.
@@ -2,7 +2,7 @@ import {
2
2
  allProfiles,
3
3
  resolveModelAlias,
4
4
  tryGetProfile
5
- } from "./chunk-FD3NFXDC.mjs";
5
+ } from "./chunk-YVKTTTTB.mjs";
6
6
 
7
7
  // src/brain-query.ts
8
8
  var FRESH_SNAPSHOT = {
@@ -13,6 +13,9 @@ var FRESH_SNAPSHOT = {
13
13
  };
14
14
  var snapshot = { ...FRESH_SNAPSHOT };
15
15
  var runtime;
16
+ function configFreshness() {
17
+ return runtime && snapshot.data ? "brain" : "bundled";
18
+ }
16
19
  function configureBrainQuery(rt) {
17
20
  runtime = rt;
18
21
  snapshot = { ...FRESH_SNAPSHOT };
@@ -451,8 +454,14 @@ var STARTER_CHAINS_GROUNDED = {
451
454
  critique: [
452
455
  { id: "claude-opus-4-7", grounding: "judgment", reason: "Highest reasoning bar, no degradation tier \u2014 engineer pick, awaiting measured backing" },
453
456
  { id: "claude-sonnet-4-6", grounding: "judgment", reason: "Same-provider walk-down from Opus on 429" },
454
- { id: "gemini-2.5-pro", grounding: "judgment", reason: "Cross-provider anchor in similar quality bracket" },
455
- { id: "gpt-5.5", grounding: "judgment", reason: "alpha.16: third-provider frontier-tier floor (archetypePerf=9)" }
457
+ // alpha.86: gemini-2.5-pro dropped availability-restricted (tt-intel
458
+ // measured 4/4 cohort refusal 2026-08-02; kgauto key free-tier-quota
459
+ // 429 2026-08-08). No current Google model clears the critique floor
460
+ // (3.5-flash critique=5; 3.1-pro-preview scores 10 but is preview —
461
+ // default chains carry promoted models only). deepseek-v4-pro takes the
462
+ // third-provider tail instead.
463
+ { id: "gpt-5.5", grounding: "judgment", reason: "alpha.16: third-provider frontier-tier floor (archetypePerf=9)" },
464
+ { id: "deepseek-v4-pro", grounding: "judgment", reason: "alpha.86: third-provider tail replacing availability-restricted gemini-2.5-pro \u2014 critique=6 clears the floor exactly; last-resort when Anthropic AND OpenAI are down, not a quality peer of the tiers above" }
456
465
  ],
457
466
  // alpha.62 (eval spine) — pairwise output comparison. Same reasoning-floor
458
467
  // posture as critique (a verdict from a weak judge is worse than no
@@ -461,14 +470,16 @@ var STARTER_CHAINS_GROUNDED = {
461
470
  judge: [
462
471
  { id: "claude-opus-4-8", grounding: "judgment", reason: "Highest reasoning bar for pairwise verdicts \u2014 current opus (s64 roster)" },
463
472
  { id: "claude-sonnet-4-6", grounding: "judgment", reason: "Same-provider walk-down on 429" },
464
- { id: "gemini-2.5-pro", grounding: "judgment", reason: "Cross-provider anchor in similar quality bracket" },
465
- { id: "gpt-5.5", grounding: "judgment", reason: "Third-provider frontier-tier floor" }
473
+ // alpha.86: gemini-2.5-pro dropped (availability-restricted; see critique
474
+ // note). gpt-5.5 remains the cross-provider frontier floor for verdicts.
475
+ { id: "gpt-5.5", grounding: "judgment", reason: "Third-provider frontier-tier floor" },
476
+ { id: "deepseek-v4-pro", grounding: "judgment", reason: "alpha.86: third-provider tail replacing availability-restricted gemini-2.5-pro \u2014 native structured output per the judge contract; last-resort tier" }
466
477
  ],
467
478
  // Reasoning matters — Sonnet primary; walk UP to Opus on 429.
468
479
  plan: [
469
480
  { id: "claude-sonnet-4-6", grounding: "judgment", reason: "Reasoning + cost balance \u2014 engineer pick" },
470
481
  { id: "claude-opus-4-7", grounding: "judgment", reason: 'Same-provider walk-UP on 429 (rare exception to "always cheaper")' },
471
- { id: "gemini-2.5-pro", grounding: "judgment", reason: "Cross-provider anchor" },
482
+ { id: "gemini-3.5-flash", grounding: "judgment", reason: "alpha.86: cross-provider anchor \u2014 replaces availability-restricted gemini-2.5-pro (tt-intel 4/4 cohort refusal 2026-08-02; probed serving 200 on kgauto key 2026-08-08)" },
472
483
  { id: "deepseek-v4-pro", grounding: "judgment", reason: "Tier 3 cost floor \u2014 no brain evidence yet" },
473
484
  { id: "gpt-5.4", grounding: "judgment", reason: "alpha.33: third-provider tail (archetypePerf=7) \u2014 closes openai-in-default-fallback-chains" }
474
485
  ],
@@ -476,7 +487,7 @@ var STARTER_CHAINS_GROUNDED = {
476
487
  generate: [
477
488
  { id: "claude-sonnet-4-6", grounding: "judgment", reason: "Quality + cost match \u2014 engineer pick" },
478
489
  { id: "claude-haiku-4-5", grounding: "judgment", reason: "Same-provider step-down" },
479
- { id: "gemini-2.5-pro", grounding: "judgment", reason: "Cross-provider anchor" },
490
+ { id: "gemini-3.5-flash", grounding: "judgment", reason: "alpha.86: cross-provider anchor \u2014 replaces availability-restricted gemini-2.5-pro (tt-intel 4/4 cohort refusal 2026-08-02; probed serving 200 on kgauto key 2026-08-08)" },
480
491
  { id: "gpt-5.4-mini", grounding: "judgment", reason: "alpha.16: third-provider tail (archetypePerf=7) \u2014 closes mono-Anthropic gap" }
481
492
  ],
482
493
  // ask::sonnet — STARTER_CHAINS calls this "Quality + cost match" but
@@ -485,7 +496,7 @@ var STARTER_CHAINS_GROUNDED = {
485
496
  ask: [
486
497
  { id: "claude-sonnet-4-6", grounding: "judgment", reason: "Quality + cost match \u2014 engineer pick. NOTE: tt-intel s78 prod showed 27% empty rate; placement awaits measurement validation" },
487
498
  { id: "claude-haiku-4-5", grounding: "judgment", reason: "Same-provider step-down" },
488
- { id: "gemini-2.5-pro", grounding: "judgment", reason: "Cross-provider anchor" },
499
+ { id: "gemini-3.5-flash", grounding: "judgment", reason: "alpha.86: cross-provider anchor \u2014 replaces availability-restricted gemini-2.5-pro (tt-intel 4/4 cohort refusal 2026-08-02; probed serving 200 on kgauto key 2026-08-08)" },
489
500
  { id: "gpt-5.4-mini", grounding: "judgment", reason: "alpha.16: third-provider tail (archetypePerf=7)" }
490
501
  ],
491
502
  // Structured-output archetype — Flash skipped (alpha.8 MAX_TOKENS cliff,
@@ -493,14 +504,14 @@ var STARTER_CHAINS_GROUNDED = {
493
504
  extract: [
494
505
  { id: "claude-sonnet-4-6", grounding: "judgment", reason: "Reliable structured-output anchor \u2014 engineer pick" },
495
506
  { id: "claude-haiku-4-5", grounding: "judgment", reason: "Same-provider step-down with native structured output" },
496
- { id: "gemini-2.5-pro", grounding: "judgment", reason: "Cross-provider anchor with structured-output support" },
507
+ { id: "gemini-3.5-flash", grounding: "judgment", reason: "alpha.86: cross-provider anchor with native structured output \u2014 replaces availability-restricted gemini-2.5-pro" },
497
508
  { id: "gpt-5.4", grounding: "capability-fact", reason: "alpha.16: third-provider floor \u2014 native structured-output capability (archetypePerf=8)" }
498
509
  ],
499
510
  // Forgiving archetype — Sonnet primary but Flash safely floors it.
500
511
  transform: [
501
512
  { id: "claude-sonnet-4-6", grounding: "judgment", reason: "Quality anchor \u2014 engineer pick" },
502
513
  { id: "claude-haiku-4-5", grounding: "judgment", reason: "Same-provider step-down" },
503
- { id: "gemini-2.5-pro", grounding: "judgment", reason: "Cross-provider anchor" },
514
+ { id: "gemini-3.5-flash", grounding: "judgment", reason: "alpha.86: cross-provider anchor \u2014 replaces availability-restricted gemini-2.5-pro (tt-intel 4/4 cohort refusal 2026-08-02; probed serving 200 on kgauto key 2026-08-08)" },
504
515
  { id: "gemini-2.5-flash", grounding: "judgment", reason: "Cost floor \u2014 forgiving archetype tolerates Flash" },
505
516
  { id: "gpt-5.4-mini", grounding: "judgment", reason: "alpha.33: third-provider tail (archetypePerf=7) \u2014 closes openai-in-default-fallback-chains" }
506
517
  ],
@@ -508,7 +519,7 @@ var STARTER_CHAINS_GROUNDED = {
508
519
  // (capability-fact: Flash 15-75 parallel calls/step vs DeepSeek 7-8).
509
520
  hunt: [
510
521
  { id: "gemini-2.5-flash", grounding: "capability-fact", reason: "L-040 parallel-tool throughput champion (15-75 calls/step)" },
511
- { id: "gemini-2.5-pro", grounding: "capability-fact", reason: "Cross-provider tier 1 with strong parallel-tool support" },
522
+ { id: "gemini-3.5-flash", grounding: "capability-fact", reason: "alpha.86: parallel-tool agentic tier (hunt archetypePerf 9, L-040 family) \u2014 replaces availability-restricted gemini-2.5-pro" },
512
523
  { id: "claude-sonnet-4-6", grounding: "judgment", reason: "Quality safety net for blocked-Flash case" },
513
524
  { id: "claude-haiku-4-5", grounding: "judgment", reason: "Reduced tool budget \u2014 cliff at 16 fires" },
514
525
  { id: "gpt-5.4-mini", grounding: "judgment", reason: "alpha.33: third-provider tail \u2014 OpenAI parallel-tool capable archetype" }
@@ -556,9 +567,9 @@ var STARTER_CHAINS_BY_MODE_GROUNDED = {
556
567
  reason: "Cross-provider safety net \u2014 Sonnet handles sequential agentic loops cleanly"
557
568
  },
558
569
  {
559
- id: "gemini-2.5-pro",
570
+ id: "gemini-3.5-flash",
560
571
  grounding: "judgment",
561
- reason: "Third-provider tail when no DeepSeek key reachable"
572
+ reason: "alpha.86: third-provider tail when no DeepSeek key reachable \u2014 replaces availability-restricted gemini-2.5-pro"
562
573
  }
563
574
  ]
564
575
  }
@@ -808,6 +819,7 @@ var loadChainsFromBrain = createBrainQueryCache({
808
819
  });
809
820
 
810
821
  export {
822
+ configFreshness,
811
823
  configureBrainQuery,
812
824
  createBrainQueryCache,
813
825
  isBrainQueryActiveFor,
@@ -1,5 +1,5 @@
1
1
  // src/version.ts
2
- var LIBRARY_VERSION = "2.0.0-alpha.85";
2
+ var LIBRARY_VERSION = "2.0.0-alpha.87";
3
3
 
4
4
  // src/key-health.ts
5
5
  var JSON_HEADERS = { "Content-Type": "application/json" };
@@ -211,7 +211,7 @@ var PROFILES_RAW = [
211
211
  },
212
212
  {
213
213
  id: "claude-opus-4-7",
214
- verifiedAgainstDocs: "2026-05-08",
214
+ verifiedAgainstDocs: "2026-08-14",
215
215
  provider: "anthropic",
216
216
  status: "legacy",
217
217
  // s76 2026-07-25: docs list as LEGACY (Opus 5 is current). Bundle said current while the brain already said legacy — the two disagreed.
@@ -261,7 +261,7 @@ var PROFILES_RAW = [
261
261
  },
262
262
  {
263
263
  id: "claude-opus-4-6",
264
- verifiedAgainstDocs: "2026-05-08",
264
+ verifiedAgainstDocs: "2026-08-14",
265
265
  provider: "anthropic",
266
266
  status: "legacy",
267
267
  maxContextTokens: 1e6,
@@ -306,7 +306,7 @@ var PROFILES_RAW = [
306
306
  },
307
307
  {
308
308
  id: "claude-sonnet-4-6",
309
- verifiedAgainstDocs: "2026-05-08",
309
+ verifiedAgainstDocs: "2026-08-14",
310
310
  provider: "anthropic",
311
311
  status: "legacy",
312
312
  // s76 2026-07-25: docs list as LEGACY (Sonnet 5 is current).
@@ -347,7 +347,7 @@ var PROFILES_RAW = [
347
347
  },
348
348
  {
349
349
  id: "claude-haiku-4-5",
350
- verifiedAgainstDocs: "2026-05-08",
350
+ verifiedAgainstDocs: "2026-08-14",
351
351
  provider: "anthropic",
352
352
  status: "current",
353
353
  maxContextTokens: 2e5,
@@ -410,7 +410,7 @@ var PROFILES_RAW = [
410
410
  // ── Google ──
411
411
  {
412
412
  id: "gemini-2.5-flash",
413
- verifiedAgainstDocs: "2026-05-08",
413
+ verifiedAgainstDocs: "2026-08-14",
414
414
  provider: "google",
415
415
  status: "current",
416
416
  maxContextTokens: 1048576,
@@ -516,7 +516,7 @@ var PROFILES_RAW = [
516
516
  // thresholds. The brain will validate/relax these as evidence accumulates
517
517
  // per (archetype, model) tuple. Currently ZERO brain rows for this model.
518
518
  id: "gemini-2.5-flash-lite",
519
- verifiedAgainstDocs: "2026-05-13",
519
+ verifiedAgainstDocs: "2026-08-14",
520
520
  provider: "google",
521
521
  status: "current",
522
522
  maxContextTokens: 1048576,
@@ -611,9 +611,21 @@ var PROFILES_RAW = [
611
611
  },
612
612
  {
613
613
  id: "gemini-2.5-pro",
614
- verifiedAgainstDocs: "2026-05-08",
614
+ verifiedAgainstDocs: "2026-08-08",
615
615
  provider: "google",
616
- status: "current",
616
+ // alpha.86 — AVAILABILITY demotion, not a provider-lifecycle mirror.
617
+ // Google's docs still list 2.5-pro as Stable, but the serving layer
618
+ // disagrees per account cohort: tt-intel measured 4/4 refusals
619
+ // ("no longer available to new users", 2026-08-02, their bench), and
620
+ // kgauto's own key 429s on a FreeTier per-day quota (probed
621
+ // 2026-08-08). A chain anchor that hard-fails for whole account
622
+ // cohorts is not an anchor; `legacy` removes it from cost-ordered
623
+ // chains and new selection while keeping the profile resolvable for
624
+ // consumers who pass it explicitly. Re-promotion is one status flip
625
+ // if Google restores availability. The registry cannot yet express
626
+ // account-cohort availability as data — see interfaces/kgauto.md
627
+ // ## Requested 2026-08-02.
628
+ status: "legacy",
617
629
  maxContextTokens: 1048576,
618
630
  maxOutputTokens: 65535,
619
631
  maxTools: 128,
@@ -643,7 +655,7 @@ var PROFILES_RAW = [
643
655
  }
644
656
  ],
645
657
  strengths: ["reasoning", "1m_context", "structured_output", "tool_use"],
646
- weaknesses: ["pricing_above_200k"],
658
+ weaknesses: ["pricing_above_200k", "availability_restricted_by_account_cohort"],
647
659
  // Master plan §3.3 anchor: tier-2 cross-provider in almost every chain.
648
660
  // Sits on the frontier at perf-9 — close to Sonnet but cheaper input.
649
661
  archetypePerf: {
@@ -661,7 +673,7 @@ var PROFILES_RAW = [
661
673
  },
662
674
  {
663
675
  id: "gemini-3.1-pro-preview",
664
- verifiedAgainstDocs: "2026-05-08",
676
+ verifiedAgainstDocs: "2026-08-14",
665
677
  provider: "google",
666
678
  status: "preview",
667
679
  maxContextTokens: 1048576,
@@ -721,7 +733,7 @@ var PROFILES_RAW = [
721
733
  // deepseek-reasoner registered as aliases (see ALIASES below).
722
734
  {
723
735
  id: "deepseek-v4-flash",
724
- verifiedAgainstDocs: "2026-05-08",
736
+ verifiedAgainstDocs: "2026-08-14",
725
737
  provider: "deepseek",
726
738
  status: "current",
727
739
  maxContextTokens: 1e6,
@@ -759,7 +771,7 @@ var PROFILES_RAW = [
759
771
  // baseQuality (it carries 'reasoning') with no latency counterweight,
760
772
  // leapfrogged gemini-2.5-flash as PB's summarize leader once reachable.
761
773
  latencyTier: "slow",
762
- 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.",
774
+ 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. PRICING MODEL CHANGE effective 2026-08-16: DeepSeek moves to peak/off-peak billing, off-peak at HALF the peak rate (docs, fetched 2026-08-14). Encoded prices are peak; cost math for off-peak traffic will overstate by up to 2x until time-of-day pricing is modeled.",
763
775
  // Master plan §6.2 anchor. Brain-validated tier 1 cross-provider for
764
776
  // classify (169 rows, 0% empty). Tier 0 for summarize-with-no-tools.
765
777
  // Falls off on hunt (sequential tools — L-040) and reasoning depth.
@@ -794,7 +806,7 @@ var PROFILES_RAW = [
794
806
  },
795
807
  {
796
808
  id: "deepseek-v4-pro",
797
- verifiedAgainstDocs: "2026-06-22",
809
+ verifiedAgainstDocs: "2026-08-14",
798
810
  provider: "deepseek",
799
811
  status: "current",
800
812
  maxContextTokens: 1e6,
@@ -835,7 +847,7 @@ var PROFILES_RAW = [
835
847
  // of the served set. Tag derivation would say 'medium'; the measurement says
836
848
  // otherwise.
837
849
  latencyTier: "slow",
838
- notes: "Pro tier. 1M context, 384k max output. $0.435/$0.87 per 1M (cache-hit in $0.003625) \u2014 verified live 2026-06-22; the launch promo became the standing price (no revert). Default mode = thinking.",
850
+ notes: "Pro tier. 1M context, 384k max output. $0.435/$0.87 per 1M (cache-hit in $0.003625) \u2014 verified live 2026-06-22; the launch promo became the standing price (no revert). Default mode = thinking. PRICING MODEL CHANGE effective 2026-08-16: DeepSeek moves to peak/off-peak billing, off-peak at HALF the peak rate (docs, fetched 2026-08-14). Encoded prices are peak; cost math for off-peak traffic will overstate by up to 2x until time-of-day pricing is modeled.",
839
851
  // Master plan §3.3: tier 3 cross-provider for plan chain. Reasoning
840
852
  // bumped one notch over V4-Flash; same parallel-tool ceiling.
841
853
  archetypePerf: {
@@ -1443,13 +1455,109 @@ var PROFILES_RAW = [
1443
1455
  // +1 vs 2.5-flash — but still below Sonnet/Opus reasoning floor
1444
1456
  }
1445
1457
  },
1458
+ // ─────────────────────────────────────────────────────────────────────────
1459
+ // gemini-3.6-flash — hand-onboarded s86 (2026-08-14), step-zero against
1460
+ // Google docs (models/gemini-3.6-flash page + pricing via catalog-sync's
1461
+ // two-agreeing-extraction the same day). Docs list it as Stable and call
1462
+ // it "previous-generation Flash" (3.5-flash is now "legacy" in Google's
1463
+ // wording) — but kgauto status is 'preview' per the standing entry rule:
1464
+ // a new model enters on capability data verified only at the docs level,
1465
+ // preview is unreachable by starter chains, and promotion to routing
1466
+ // happens through brain evidence, not through Google's marketing tier.
1467
+ // This also means NO family-primary retarget rides this release.
1468
+ // ─────────────────────────────────────────────────────────────────────────
1469
+ {
1470
+ id: "gemini-3.6-flash",
1471
+ verifiedAgainstDocs: "2026-08-14",
1472
+ versionAdded: "2.0.0-alpha.87",
1473
+ provider: "google",
1474
+ status: "preview",
1475
+ maxContextTokens: 1048576,
1476
+ maxOutputTokens: 65536,
1477
+ maxTools: 128,
1478
+ parallelToolCalls: true,
1479
+ structuredOutput: "native",
1480
+ systemPromptMode: "separate",
1481
+ streaming: true,
1482
+ cliffs: [
1483
+ {
1484
+ metric: "input_tokens",
1485
+ threshold: 8e3,
1486
+ action: "downgrade_quality_warning",
1487
+ reason: "Inherited Flash-family guard (2.5\u21923.5 lineage); no 3.6 brain evidence yet"
1488
+ },
1489
+ {
1490
+ metric: "tool_count",
1491
+ threshold: 20,
1492
+ action: "drop_to_top_relevant",
1493
+ reason: "Inherited from Flash family: tool reliability drops above ~20 (despite 128 hard limit). Validate per (archetype, model) after n\u226520."
1494
+ },
1495
+ {
1496
+ metric: "thinking_with_short_output",
1497
+ threshold: 1,
1498
+ action: "force_thinking_budget_zero",
1499
+ reason: "Thinking supported per Google docs; same drain risk as 2.5/3.5-flash \u2014 thinking tokens consume maxOutputTokens"
1500
+ },
1501
+ {
1502
+ metric: "tool_count",
1503
+ threshold: 1,
1504
+ whenIntent: "summarize",
1505
+ action: "strip_tools",
1506
+ reason: "Inherited from 2.5-flash s11 cliff: summarize+tools \u2192 empty response. Preemptive family guard until brain evidence on 3.6-flash specifically."
1507
+ }
1508
+ ],
1509
+ costInputPer1m: 1.5,
1510
+ costOutputPer1m: 7.5,
1511
+ lowering: {
1512
+ ...GOOGLE_LOWERING_BASE,
1513
+ cache: { ...GOOGLE_LOWERING_BASE.cache, discount: 0.1 },
1514
+ thinking: { field: "generationConfig.thinkingConfig.thinkingBudget", default: "auto" }
1515
+ },
1516
+ recovery: [
1517
+ {
1518
+ signal: "empty_response_after_tool",
1519
+ action: "retry_with_params",
1520
+ retryParams: { "generationConfig.thinkingConfig.thinkingBudget": 0 },
1521
+ maxRetries: 1,
1522
+ reason: "Inherited Flash-family pattern: empty after tool result \u2014 retry with thinking off"
1523
+ },
1524
+ {
1525
+ signal: "empty_response",
1526
+ action: "retry_with_params",
1527
+ retryParams: { "generationConfig.thinkingConfig.thinkingBudget": 0 },
1528
+ maxRetries: 1,
1529
+ reason: "Empty response \u2014 try with thinking off"
1530
+ },
1531
+ {
1532
+ signal: "malformed_function_call",
1533
+ action: "escalate",
1534
+ reason: "MALFORMED_FUNCTION_CALL maps to stop \u2014 escalate to next target"
1535
+ }
1536
+ ],
1537
+ strengths: ["agentic_loops", "coding", "1m_context", "parallel_tools", "thinking_mode"],
1538
+ weaknesses: ["no_brain_evidence_yet"],
1539
+ notes: "Hand-onboarded s86 (2026-08-14), step-zero verified: 1,048,576 ctx / 65,536 out (Google model page), $1.50/$7.50 per 1M (catalog-sync two-agreeing-extraction same day \u2014 CHEAPER output than 3.5-flash at $9.00). Docs status Stable; enters kgauto as preview per standing rule (availability != lifecycle, promotion via brain evidence). Function calling + structured outputs + thinking per docs; parallel tools assumed per Flash family (docs silent). First flagged by the release watcher s73; sat in the onboarding queue 18 days \u2014 drained by the s86 catalog-sync run.",
1540
+ archetypePerf: {
1541
+ hunt: 9,
1542
+ // Flash-family parallel-tool tier (L-040); inherited from 3.5-flash
1543
+ classify: 7,
1544
+ summarize: 7,
1545
+ transform: 7,
1546
+ ask: 8,
1547
+ generate: 8,
1548
+ plan: 7,
1549
+ extract: 7,
1550
+ critique: 5
1551
+ }
1552
+ },
1446
1553
  {
1447
1554
  // Auto-onboarded 2026-07-01 from `claude-sonnet-4-6`; VERIFIED 2026-07-02
1448
1555
  // against the claude-api reference (cc-portfolio ratification pass). The
1449
- // clone got context right (1M) and pricing right at sticker ($3/$15
1450
- // NOTE an introductory $2/$10 per MTok runs through 2026-08-31; sticker
1451
- // encoded here per the time-bounded-pricing convention, intro belongs in
1452
- // brain kgauto_pricing if worth capturing). The clone got max output WRONG:
1556
+ // clone got context right (1M). PRICING RE-BASED 2026-08-14 (s86): the
1557
+ // introductory $2/$10 was made PERMANENT Anthropic's pricing page now
1558
+ // states the scheduled Sept-1 increase to $3/$15 "will not occur", so
1559
+ // $2/$10 IS the sticker. (The $3/$15 encoded 07-02 was correct under the
1560
+ // time-bounded-pricing convention at the time; the bound was cancelled.) The clone got max output WRONG:
1453
1561
  // Sonnet 5 is 128k, not 4-6's 64k — corrected. New tokenizer (~30% more
1454
1562
  // tokens for the same text vs 4-6): byte-budget consumers should re-baseline.
1455
1563
  // API quirks (claude-api ref): (a) NON-DEFAULT temperature/top_p/top_k
@@ -1462,7 +1570,7 @@ var PROFILES_RAW = [
1462
1570
  // 'preview' per the Fable precedent — no brain evidence yet; promotion to
1463
1571
  // 'current' is an explicit call. (L-049/L-081.)
1464
1572
  id: "claude-sonnet-5",
1465
- verifiedAgainstDocs: "2026-07-02",
1573
+ verifiedAgainstDocs: "2026-08-14",
1466
1574
  provider: "anthropic",
1467
1575
  status: "current",
1468
1576
  // s76 2026-07-25: GA per docs; was preview.
@@ -1474,8 +1582,9 @@ var PROFILES_RAW = [
1474
1582
  systemPromptMode: "inline",
1475
1583
  streaming: true,
1476
1584
  cliffs: [],
1477
- costInputPer1m: 3,
1478
- costOutputPer1m: 15,
1585
+ costInputPer1m: 2,
1586
+ // 2026-08-14: intro price made PERMANENT (docs: "the previously scheduled increase to $3/$15 on September 1, 2026 will not occur")
1587
+ costOutputPer1m: 10,
1479
1588
  lowering: ANTHROPIC_LOWERING_BASE,
1480
1589
  recovery: [
1481
1590
  { signal: "rate_limit", action: "escalate", reason: "429 \u2014 escalate" },
@@ -1666,6 +1775,55 @@ function _setProfileBrainHook(hook) {
1666
1775
  function canonicalId(id) {
1667
1776
  return brainHook.resolveAlias?.(id) ?? ALIASES[id] ?? id;
1668
1777
  }
1778
+ var CONSUMER_INDEX = /* @__PURE__ */ new Map();
1779
+ function registerProfiles(profiles) {
1780
+ for (const p of profiles) CONSUMER_INDEX.set(p.id, p);
1781
+ }
1782
+ function _testClearConsumerProfiles() {
1783
+ CONSUMER_INDEX.clear();
1784
+ }
1785
+ function inferProviderFromId(id) {
1786
+ const lower = id.toLowerCase();
1787
+ if (lower.startsWith("claude")) return "anthropic";
1788
+ if (lower.startsWith("gemini") || lower.startsWith("palm")) return "google";
1789
+ if (lower.startsWith("gpt") || /^o[0-9]/.test(lower) || lower.startsWith("chatgpt")) return "openai";
1790
+ if (lower.startsWith("deepseek")) return "deepseek";
1791
+ if (lower.startsWith("glm")) return "zai";
1792
+ if (lower.startsWith("kimi") || lower.startsWith("moonshot")) return "moonshot";
1793
+ return void 0;
1794
+ }
1795
+ function bestEffortProfile(id) {
1796
+ const canonical = canonicalId(id);
1797
+ const existing = tryGetProfile(canonical);
1798
+ if (existing) return existing;
1799
+ const provider = inferProviderFromId(canonical);
1800
+ if (!provider) return void 0;
1801
+ const donor = PROFILES_RAW.find((p) => p.provider === provider && p.status === "current") ?? PROFILES_RAW.find((p) => p.provider === provider);
1802
+ if (!donor) return void 0;
1803
+ const synth = {
1804
+ id: canonical,
1805
+ provider,
1806
+ bestEffort: true,
1807
+ status: "preview",
1808
+ maxContextTokens: 128e3,
1809
+ maxOutputTokens: 4096,
1810
+ maxTools: donor.maxTools,
1811
+ parallelToolCalls: false,
1812
+ structuredOutput: "none",
1813
+ systemPromptMode: donor.systemPromptMode,
1814
+ streaming: donor.streaming,
1815
+ cliffs: [],
1816
+ costInputPer1m: 0,
1817
+ costOutputPer1m: 0,
1818
+ lowering: donor.lowering,
1819
+ recovery: [],
1820
+ strengths: [],
1821
+ weaknesses: ["best-effort synthesized profile \u2014 no verified capability data"],
1822
+ 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.`
1823
+ };
1824
+ CONSUMER_INDEX.set(canonical, synth);
1825
+ return synth;
1826
+ }
1669
1827
  function resolveModelAlias(id) {
1670
1828
  return canonicalId(id);
1671
1829
  }
@@ -1674,18 +1832,22 @@ var PROFILE_INDEX = new Map(
1674
1832
  );
1675
1833
  function getProfile(id) {
1676
1834
  const canonical = canonicalId(id);
1835
+ const fromConsumer = CONSUMER_INDEX.get(canonical);
1836
+ if (fromConsumer) return fromConsumer;
1677
1837
  const fromBrain = brainHook.getProfile?.(canonical);
1678
1838
  if (fromBrain) return fromBrain;
1679
1839
  const p = PROFILE_INDEX.get(canonical);
1680
1840
  if (!p) {
1681
1841
  const known = [...PROFILE_INDEX.keys(), ...Object.keys(ALIASES)].join(", ");
1682
- throw new Error(`Unknown model id: "${id}". Known: ${known}`);
1842
+ throw new Error(
1843
+ `Unknown model id: "${id}". Known: ${known}. For a model kgauto has not onboarded: registerProfiles([...]) supplies a full profile, or policy.onUnprofiledModel:'best-effort' compiles with guards skipped (alpha.87).`
1844
+ );
1683
1845
  }
1684
1846
  return p;
1685
1847
  }
1686
1848
  function tryGetProfile(id) {
1687
1849
  const canonical = canonicalId(id);
1688
- return brainHook.getProfile?.(canonical) ?? PROFILE_INDEX.get(canonical);
1850
+ return CONSUMER_INDEX.get(canonical) ?? brainHook.getProfile?.(canonical) ?? PROFILE_INDEX.get(canonical);
1689
1851
  }
1690
1852
  function allProfiles() {
1691
1853
  return PROFILES_RAW;
@@ -1702,6 +1864,10 @@ export {
1702
1864
  latencyTierOf,
1703
1865
  ALIASES,
1704
1866
  _setProfileBrainHook,
1867
+ registerProfiles,
1868
+ _testClearConsumerProfiles,
1869
+ inferProviderFromId,
1870
+ bestEffortProfile,
1705
1871
  resolveModelAlias,
1706
1872
  getProfile,
1707
1873
  tryGetProfile,
@@ -1,6 +1,6 @@
1
- import { G as GlassboxEvent } from '../types-y42mwdvM.mjs';
2
- export { A as AdvisoryFiredData, C as CompileDoneData, a as CompileStartData, E as ExecuteAttemptData, b as ExecuteSuccessData, F as FallbackWalkedData, c as GLASSBOX_STREAM_TTL_MS, d as GlassboxEventKind, e as GlassboxPubSub } from '../types-y42mwdvM.mjs';
3
- import '../ir-JUoybVM-.mjs';
1
+ import { G as GlassboxEvent } from '../types-7sF3adLO.mjs';
2
+ export { A as AdvisoryFiredData, C as CompileDoneData, a as CompileStartData, E as ExecuteAttemptData, b as ExecuteSuccessData, F as FallbackWalkedData, c as GLASSBOX_STREAM_TTL_MS, d as GlassboxEventKind, e as GlassboxPubSub } from '../types-7sF3adLO.mjs';
3
+ import '../ir-P3NEU8z4.mjs';
4
4
  import '../dialect.mjs';
5
5
 
6
6
  /**
@@ -1,6 +1,6 @@
1
- import { G as GlassboxEvent } from '../types-BqTKRECa.js';
2
- export { A as AdvisoryFiredData, C as CompileDoneData, a as CompileStartData, E as ExecuteAttemptData, b as ExecuteSuccessData, F as FallbackWalkedData, c as GLASSBOX_STREAM_TTL_MS, d as GlassboxEventKind, e as GlassboxPubSub } from '../types-BqTKRECa.js';
3
- import '../ir-DfrM71pA.js';
1
+ import { G as GlassboxEvent } from '../types-B_MjEB0h.js';
2
+ export { A as AdvisoryFiredData, C as CompileDoneData, a as CompileStartData, E as ExecuteAttemptData, b as ExecuteSuccessData, F as FallbackWalkedData, c as GLASSBOX_STREAM_TTL_MS, d as GlassboxEventKind, e as GlassboxPubSub } from '../types-B_MjEB0h.js';
3
+ import '../ir-ZgN2KkuF.js';
4
4
  import '../dialect.js';
5
5
 
6
6
  /**
@@ -1,5 +1,5 @@
1
- import { T as TraceHealth } from '../types-BGH_KAHu.mjs';
2
- import '../ir-JUoybVM-.mjs';
1
+ import { T as TraceHealth } from '../types-CK0zUlVE.mjs';
2
+ import '../ir-P3NEU8z4.mjs';
3
3
  import '../dialect.mjs';
4
4
 
5
5
  /**
@@ -1,5 +1,5 @@
1
- import { T as TraceHealth } from '../types-DLDJbCha.js';
2
- import '../ir-DfrM71pA.js';
1
+ import { T as TraceHealth } from '../types-BgfuVIVI.js';
2
+ import '../ir-ZgN2KkuF.js';
3
3
  import '../dialect.js';
4
4
 
5
5
  /**
@@ -1,7 +1,7 @@
1
- import { G as GlassboxEvent } from '../types-y42mwdvM.mjs';
2
- import { a as TraceDetail, b as TraceSummary, c as TraceCounterfactual } from '../types-BGH_KAHu.mjs';
3
- export { A as AdvisoryRecord, T as TraceHealth, d as TraceSectionRewrite } from '../types-BGH_KAHu.mjs';
4
- import '../ir-JUoybVM-.mjs';
1
+ import { G as GlassboxEvent } from '../types-7sF3adLO.mjs';
2
+ import { a as TraceDetail, b as TraceSummary, c as TraceCounterfactual } from '../types-CK0zUlVE.mjs';
3
+ export { A as AdvisoryRecord, T as TraceHealth, d as TraceSectionRewrite } from '../types-CK0zUlVE.mjs';
4
+ import '../ir-P3NEU8z4.mjs';
5
5
  import '../dialect.mjs';
6
6
 
7
7
  /**
@@ -1,7 +1,7 @@
1
- import { G as GlassboxEvent } from '../types-BqTKRECa.js';
2
- import { a as TraceDetail, b as TraceSummary, c as TraceCounterfactual } from '../types-DLDJbCha.js';
3
- export { A as AdvisoryRecord, T as TraceHealth, d as TraceSectionRewrite } from '../types-DLDJbCha.js';
4
- import '../ir-DfrM71pA.js';
1
+ import { G as GlassboxEvent } from '../types-B_MjEB0h.js';
2
+ import { a as TraceDetail, b as TraceSummary, c as TraceCounterfactual } from '../types-BgfuVIVI.js';
3
+ export { A as AdvisoryRecord, T as TraceHealth, d as TraceSectionRewrite } from '../types-BgfuVIVI.js';
4
+ import '../ir-ZgN2KkuF.js';
5
5
  import '../dialect.js';
6
6
 
7
7
  /**