@miller-tech/uap 1.91.0 → 1.92.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.
@@ -128,6 +128,76 @@ export const ModelPresets = {
128
128
  costPer1MOutput: 12.0,
129
129
  capabilities: ['code-generation', 'execution', 'complex-reasoning', 'agentic'],
130
130
  },
131
+ 'fable-5': {
132
+ id: 'fable-5',
133
+ name: 'Claude Fable 5',
134
+ provider: 'anthropic',
135
+ apiModel: 'claude-fable-5',
136
+ apiKeyEnvVar: 'ANTHROPIC_API_KEY',
137
+ maxContextTokens: 200000,
138
+ costPer1MInput: 5.0,
139
+ costPer1MOutput: 25.0,
140
+ capabilities: ['planning', 'complex-reasoning', 'code-generation', 'advanced-planning'],
141
+ modelContextBudget: 180000,
142
+ },
143
+ 'haiku-4.5': {
144
+ id: 'haiku-4.5',
145
+ name: 'Claude Haiku 4.5',
146
+ provider: 'anthropic',
147
+ apiModel: 'claude-haiku-4-5-20251001',
148
+ apiKeyEnvVar: 'ANTHROPIC_API_KEY',
149
+ maxContextTokens: 200000,
150
+ costPer1MInput: 1.0,
151
+ costPer1MOutput: 5.0,
152
+ capabilities: ['code-generation', 'execution', 'simple-tasks', 'agentic'],
153
+ modelContextBudget: 180000,
154
+ },
155
+ 'qwen36-a3b': {
156
+ id: 'qwen36-a3b',
157
+ name: 'Qwen 3.6 35B A3B (llama.cpp, local)',
158
+ provider: 'custom',
159
+ apiModel: 'qwen36-35b-a3b-iq4xs',
160
+ // Route through the anthropic-proxy (:4000) for <think>-stripping + tool/finalize
161
+ // guardrails (same rationale as qwen35-a3b), not llama :8080 raw.
162
+ endpoint: 'http://192.168.1.165:4000/v1',
163
+ maxContextTokens: 262144,
164
+ costPer1MInput: 0,
165
+ costPer1MOutput: 0,
166
+ capabilities: ['code-generation', 'execution', 'planning', 'simple-tasks'],
167
+ modelContextBudget: 131072,
168
+ },
169
+ };
170
+ export const RoutingPresets = {
171
+ 'fable-local-opus': {
172
+ id: 'fable-local-opus',
173
+ name: 'Fable plan / local execute / Opus review',
174
+ description: 'Plan with Claude Fable 5, execute on local Qwen 3.6, review with Claude Opus 4.8, ' +
175
+ 'fall back to local Qwen 3.6. Cloud is used only for planning and review (Max-plan ' +
176
+ 'friendly); execution stays free and local.',
177
+ roles: {
178
+ planner: 'fable-5',
179
+ executor: 'qwen36-a3b',
180
+ reviewer: 'opus-4.8',
181
+ fallback: 'qwen36-a3b',
182
+ },
183
+ models: ['fable-5', 'qwen36-a3b', 'opus-4.8'],
184
+ routingStrategy: 'balanced',
185
+ },
186
+ 'fable-haiku-opus': {
187
+ id: 'fable-haiku-opus',
188
+ name: 'Fable plan / Haiku execute / Opus review',
189
+ description: 'Plan with Claude Fable 5, execute with Claude Haiku 4.5 (fast cloud), review with ' +
190
+ 'Claude Opus 4.8, fall back to local Qwen 3.6. All-cloud hot path with a free local ' +
191
+ 'safety net.',
192
+ roles: {
193
+ planner: 'fable-5',
194
+ executor: 'haiku-4.5',
195
+ reviewer: 'opus-4.8',
196
+ fallback: 'qwen36-a3b',
197
+ },
198
+ models: ['fable-5', 'haiku-4.5', 'opus-4.8', 'qwen36-a3b'],
199
+ routingStrategy: 'performance-first',
200
+ },
131
201
  };
132
202
  /**
133
203
  * Role assignment configuration - maps roles to models
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/models/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/models/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAWxB;;GAEG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC7D,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACnC,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC;IAC5C,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACrC,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACtC,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IAC7C,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,mEAAmE;IAC9G,yEAAyE;IACzE,kEAAkE;IAClE,eAAe,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE;CACvE,CAAC,CAAC;AAIH;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAgC;IACvD,UAAU,EAAE;QACV,EAAE,EAAE,UAAU;QACd,IAAI,EAAE,iBAAiB;QACvB,QAAQ,EAAE,WAAW;QACrB,QAAQ,EAAE,iBAAiB;QAC3B,YAAY,EAAE,mBAAmB;QACjC,gBAAgB,EAAE,MAAM;QACxB,cAAc,EAAE,GAAG;QACnB,eAAe,EAAE,IAAI;QACrB,YAAY,EAAE;YACZ,UAAU;YACV,mBAAmB;YACnB,iBAAiB;YACjB,QAAQ;YACR,mBAAmB;SACpB;QACD,kBAAkB,EAAE,MAAM;QAC1B,eAAe,EAAE,OAAO;KACzB;IACD,UAAU,EAAE;QACV,EAAE,EAAE,UAAU;QACd,IAAI,EAAE,iBAAiB;QACvB,QAAQ,EAAE,WAAW;QACrB,QAAQ,EAAE,0BAA0B;QACpC,YAAY,EAAE,mBAAmB;QACjC,gBAAgB,EAAE,MAAM;QACxB,cAAc,EAAE,GAAG;QACnB,eAAe,EAAE,IAAI;QACrB,YAAY,EAAE;YACZ,UAAU;YACV,mBAAmB;YACnB,iBAAiB;YACjB,QAAQ;YACR,mBAAmB;SACpB;QACD,kBAAkB,EAAE,MAAM;KAC3B;IACD,YAAY,EAAE;QACZ,EAAE,EAAE,YAAY;QAChB,IAAI,EAAE,mBAAmB;QACzB,QAAQ,EAAE,WAAW;QACrB,QAAQ,EAAE,4BAA4B;QACtC,YAAY,EAAE,mBAAmB;QACjC,gBAAgB,EAAE,MAAM;QACxB,cAAc,EAAE,GAAG;QACnB,eAAe,EAAE,IAAI;QACrB,YAAY,EAAE,CAAC,iBAAiB,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,CAAC;QACnE,kBAAkB,EAAE,MAAM;KAC3B;IACD,KAAK,EAAE;QACL,EAAE,EAAE,OAAO;QACX,IAAI,EAAE,uBAAuB;QAC7B,QAAQ,EAAE,WAAW;QACrB,QAAQ,EAAE,2BAA2B;QACrC,YAAY,EAAE,mBAAmB;QACjC,gBAAgB,EAAE,MAAM;QACxB,cAAc,EAAE,GAAG;QACnB,eAAe,EAAE,GAAG;QACpB,YAAY,EAAE,CAAC,iBAAiB,EAAE,WAAW,EAAE,cAAc,CAAC;KAC/D;IACD,YAAY,EAAE;QACZ,EAAE,EAAE,YAAY;QAChB,IAAI,EAAE,8BAA8B;QACpC,QAAQ,EAAE,QAAQ;QAClB,QAAQ,EAAE,kBAAkB;QAC5B,2EAA2E;QAC3E,+EAA+E;QAC/E,qEAAqE;QACrE,4EAA4E;QAC5E,6EAA6E;QAC7E,QAAQ,EAAE,8BAA8B;QACxC,gBAAgB,EAAE,MAAM;QACxB,cAAc,EAAE,CAAC;QACjB,eAAe,EAAE,CAAC;QAClB,YAAY,EAAE,CAAC,iBAAiB,EAAE,WAAW,EAAE,UAAU,EAAE,cAAc,CAAC;QAC1E,kBAAkB,EAAE,MAAM;KAC3B;IACD,SAAS,EAAE;QACT,EAAE,EAAE,SAAS;QACb,IAAI,EAAE,SAAS;QACf,QAAQ,EAAE,QAAQ;QAClB,QAAQ,EAAE,SAAS;QACnB,YAAY,EAAE,gBAAgB;QAC9B,gBAAgB,EAAE,MAAM;QACxB,cAAc,EAAE,GAAG;QACnB,eAAe,EAAE,IAAI;QACrB,YAAY,EAAE,CAAC,UAAU,EAAE,iBAAiB,EAAE,mBAAmB,CAAC;KACnE;IACD,eAAe,EAAE;QACf,EAAE,EAAE,eAAe;QACnB,IAAI,EAAE,eAAe;QACrB,QAAQ,EAAE,QAAQ;QAClB,QAAQ,EAAE,eAAe;QACzB,YAAY,EAAE,gBAAgB;QAC9B,gBAAgB,EAAE,MAAM;QACxB,cAAc,EAAE,GAAG;QACnB,eAAe,EAAE,IAAI;QACrB,YAAY,EAAE,CAAC,iBAAiB,EAAE,WAAW,EAAE,mBAAmB,EAAE,SAAS,CAAC;KAC/E;IACD,SAAS,EAAE;QACT,EAAE,EAAE,SAAS;QACb,IAAI,EAAE,gBAAgB;QACtB,QAAQ,EAAE,WAAW;QACrB,QAAQ,EAAE,gBAAgB;QAC1B,YAAY,EAAE,mBAAmB;QACjC,gBAAgB,EAAE,MAAM;QACxB,cAAc,EAAE,GAAG;QACnB,eAAe,EAAE,IAAI;QACrB,YAAY,EAAE,CAAC,UAAU,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,mBAAmB,CAAC;QACvF,kBAAkB,EAAE,MAAM;KAC3B;IACD,WAAW,EAAE;QACX,EAAE,EAAE,WAAW;QACf,IAAI,EAAE,kBAAkB;QACxB,QAAQ,EAAE,WAAW;QACrB,QAAQ,EAAE,2BAA2B;QACrC,YAAY,EAAE,mBAAmB;QACjC,gBAAgB,EAAE,MAAM;QACxB,cAAc,EAAE,GAAG;QACnB,eAAe,EAAE,GAAG;QACpB,YAAY,EAAE,CAAC,iBAAiB,EAAE,WAAW,EAAE,cAAc,EAAE,SAAS,CAAC;QACzE,kBAAkB,EAAE,MAAM;KAC3B;IACD,YAAY,EAAE;QACZ,EAAE,EAAE,YAAY;QAChB,IAAI,EAAE,qCAAqC;QAC3C,QAAQ,EAAE,QAAQ;QAClB,QAAQ,EAAE,sBAAsB;QAChC,kFAAkF;QAClF,kEAAkE;QAClE,QAAQ,EAAE,8BAA8B;QACxC,gBAAgB,EAAE,MAAM;QACxB,cAAc,EAAE,CAAC;QACjB,eAAe,EAAE,CAAC;QAClB,YAAY,EAAE,CAAC,iBAAiB,EAAE,WAAW,EAAE,UAAU,EAAE,cAAc,CAAC;QAC1E,kBAAkB,EAAE,MAAM;KAC3B;CACF,CAAC;AAoBF,MAAM,CAAC,MAAM,cAAc,GAAkC;IAC3D,kBAAkB,EAAE;QAClB,EAAE,EAAE,kBAAkB;QACtB,IAAI,EAAE,0CAA0C;QAChD,WAAW,EACT,oFAAoF;YACpF,oFAAoF;YACpF,4CAA4C;QAC9C,KAAK,EAAE;YACL,OAAO,EAAE,SAAS;YAClB,QAAQ,EAAE,YAAY;YACtB,QAAQ,EAAE,UAAU;YACpB,QAAQ,EAAE,YAAY;SACvB;QACD,MAAM,EAAE,CAAC,SAAS,EAAE,YAAY,EAAE,UAAU,CAAC;QAC7C,eAAe,EAAE,UAAU;KAC5B;IACD,kBAAkB,EAAE;QAClB,EAAE,EAAE,kBAAkB;QACtB,IAAI,EAAE,0CAA0C;QAChD,WAAW,EACT,oFAAoF;YACpF,qFAAqF;YACrF,aAAa;QACf,KAAK,EAAE;YACL,OAAO,EAAE,SAAS;YAClB,QAAQ,EAAE,WAAW;YACrB,QAAQ,EAAE,UAAU;YACpB,QAAQ,EAAE,YAAY;SACvB;QACD,MAAM,EAAE,CAAC,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,CAAC;QAC1D,eAAe,EAAE,mBAAmB;KACrC;CACF,CAAC;AAIF;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;IAC7D,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,qCAAqC;IACrC,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC1C,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,gBAAgB;CACtD,CAAC,CAAC;AAIH;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,qBAAqB;IACrB,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,EAAE;IACpE,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACxC,QAAQ,EAAE,CAAC;SACR,IAAI,CAAC,CAAC,UAAU,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC;SACjF,QAAQ,EAAE;IACb,eAAe;IACf,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;IACnE,sCAAsC;IACtC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;CAChC,CAAC,CAAC;AAIH;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IAEnC,gDAAgD;IAChD,MAAM,EAAE,CAAC;SACN,KAAK,CACJ,CAAC,CAAC,KAAK,CAAC;QACN,CAAC,CAAC,MAAM,EAAE,EAAE,4BAA4B;QACxC,uBAAuB,EAAE,qBAAqB;KAC/C,CAAC,CACH;SACA,OAAO,CAAC,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;IAEtC,mBAAmB;IACnB,KAAK,EAAE,CAAC;SACL,MAAM,CAAC;QACN,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC;QACvC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC;QAC1C,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC/B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC;KAC3C,CAAC;SACD,QAAQ,EAAE;IAEb,4DAA4D;IAC5D,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,QAAQ,EAAE;IAE9C,6BAA6B;IAC7B,gBAAgB,EAAE,CAAC;SAChB,MAAM,CAAC;QACN,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;QAClC,mCAAmC;QACnC,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;QACvC,sCAAsC;QACtC,yBAAyB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;QACjD,uDAAuD;QACvD,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;KACzC,CAAC;SACD,QAAQ,EAAE;IAEb,iCAAiC;IACjC,aAAa,EAAE,CAAC;SACb,MAAM,CACL,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,EAC7C,CAAC,CAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;QACnB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;KACrB,CAAC,CACH;SACA,QAAQ,EAAE;IAEb,mBAAmB;IACnB,eAAe,EAAE,CAAC;SACf,IAAI,CAAC;QACJ,gBAAgB,EAAE,4CAA4C;QAC9D,mBAAmB,EAAE,mCAAmC;QACxD,UAAU,EAAE,+BAA+B;QAC3C,UAAU,EAAE,0BAA0B;KACvC,CAAC;SACD,OAAO,CAAC,UAAU,CAAC;IAEtB,4BAA4B;IAC5B,eAAe,EAAE,CAAC;SACf,MAAM,CAAC;QACN,6CAA6C;QAC7C,mBAAmB,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;QACxE,gCAAgC;QAChC,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;QAC5C,gCAAgC;QAChC,mBAAmB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;KAC/C,CAAC;SACD,QAAQ,EAAE;IAEb,oBAAoB;IACpB,gBAAgB,EAAE,CAAC;SAChB,MAAM,CAAC;QACN,8CAA8C;QAC9C,iBAAiB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;QAC5C,gCAAgC;QAChC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;QACjC,6BAA6B;QAC7B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,QAAQ;KAClD,CAAC;SACD,QAAQ,EAAE;CACd,CAAC,CAAC;AA2EH,wBAAwB;AACxB,MAAM,CAAC,MAAM,qBAAqB,GAAkB;IAClD,+CAA+C;IAC/C,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,EAAE;IAChE;QACE,QAAQ,EAAE,CAAC,UAAU,EAAE,gBAAgB,EAAE,YAAY,EAAE,WAAW,CAAC;QACnE,UAAU,EAAE,SAAS;QACrB,QAAQ,EAAE,EAAE;KACb;IAED,+BAA+B;IAC/B,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE;IAC3D,EAAE,QAAQ,EAAE,CAAC,cAAc,EAAE,QAAQ,EAAE,UAAU,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE;IACzF,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE;IAE7D,gDAAgD;IAChD,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,EAAE;IAC9D,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,EAAE;IAC5D,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,EAAE;IAE7D,iCAAiC;IACjC,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,EAAE;IAC3D,EAAE,QAAQ,EAAE,eAAe,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,EAAE;IAEnE,uCAAuC;IACvC,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,EAAE;CAC7D,CAAC"}
@@ -1457,7 +1457,7 @@ export declare const MultiModelSchema: z.ZodObject<{
1457
1457
  modelContextBudget?: number | undefined;
1458
1458
  reasoningEffort?: "low" | "medium" | "high" | "xhigh" | undefined;
1459
1459
  })[];
1460
- routingStrategy: "cost-optimized" | "performance-first" | "balanced" | "adaptive";
1460
+ routingStrategy: "balanced" | "performance-first" | "cost-optimized" | "adaptive";
1461
1461
  roles?: {
1462
1462
  planner: string;
1463
1463
  executor: string;
@@ -1530,7 +1530,7 @@ export declare const MultiModelSchema: z.ZodObject<{
1530
1530
  planner: string;
1531
1531
  executor: string;
1532
1532
  }>> | undefined;
1533
- routingStrategy?: "cost-optimized" | "performance-first" | "balanced" | "adaptive" | undefined;
1533
+ routingStrategy?: "balanced" | "performance-first" | "cost-optimized" | "adaptive" | undefined;
1534
1534
  plannerSettings?: {
1535
1535
  complexityThreshold?: "low" | "medium" | "high" | undefined;
1536
1536
  maxPlanningTokens?: number | undefined;
@@ -2807,7 +2807,7 @@ export declare const AgentContextConfigSchema: z.ZodObject<{
2807
2807
  modelContextBudget?: number | undefined;
2808
2808
  reasoningEffort?: "low" | "medium" | "high" | "xhigh" | undefined;
2809
2809
  })[];
2810
- routingStrategy: "cost-optimized" | "performance-first" | "balanced" | "adaptive";
2810
+ routingStrategy: "balanced" | "performance-first" | "cost-optimized" | "adaptive";
2811
2811
  roles?: {
2812
2812
  planner: string;
2813
2813
  executor: string;
@@ -2880,7 +2880,7 @@ export declare const AgentContextConfigSchema: z.ZodObject<{
2880
2880
  planner: string;
2881
2881
  executor: string;
2882
2882
  }>> | undefined;
2883
- routingStrategy?: "cost-optimized" | "performance-first" | "balanced" | "adaptive" | undefined;
2883
+ routingStrategy?: "balanced" | "performance-first" | "cost-optimized" | "adaptive" | undefined;
2884
2884
  plannerSettings?: {
2885
2885
  complexityThreshold?: "low" | "medium" | "high" | undefined;
2886
2886
  maxPlanningTokens?: number | undefined;
@@ -3297,7 +3297,7 @@ export declare const AgentContextConfigSchema: z.ZodObject<{
3297
3297
  modelContextBudget?: number | undefined;
3298
3298
  reasoningEffort?: "low" | "medium" | "high" | "xhigh" | undefined;
3299
3299
  })[];
3300
- routingStrategy: "cost-optimized" | "performance-first" | "balanced" | "adaptive";
3300
+ routingStrategy: "balanced" | "performance-first" | "cost-optimized" | "adaptive";
3301
3301
  roles?: {
3302
3302
  planner: string;
3303
3303
  executor: string;
@@ -3614,7 +3614,7 @@ export declare const AgentContextConfigSchema: z.ZodObject<{
3614
3614
  planner: string;
3615
3615
  executor: string;
3616
3616
  }>> | undefined;
3617
- routingStrategy?: "cost-optimized" | "performance-first" | "balanced" | "adaptive" | undefined;
3617
+ routingStrategy?: "balanced" | "performance-first" | "cost-optimized" | "adaptive" | undefined;
3618
3618
  plannerSettings?: {
3619
3619
  complexityThreshold?: "low" | "medium" | "high" | undefined;
3620
3620
  maxPlanningTokens?: number | undefined;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@miller-tech/uap",
3
- "version": "1.91.0",
3
+ "version": "1.92.0",
4
4
  "description": "Autonomous AI agent memory system with CLAUDE.md protocol enforcement",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -718,7 +718,10 @@ PROXY_MODEL_PROFILE_PARAM = os.environ.get(
718
718
 
719
719
  DEFAULT_PASSTHROUGH_MODEL_PATTERNS = (
720
720
  re.compile(r"^claude-opus-4-6", re.IGNORECASE),
721
+ re.compile(r"^claude-opus-4-8", re.IGNORECASE),
721
722
  re.compile(r"^claude-sonnet-4-6", re.IGNORECASE),
723
+ re.compile(r"^claude-haiku-4-5", re.IGNORECASE),
724
+ re.compile(r"^claude-fable-5", re.IGNORECASE),
722
725
  )
723
726
 
724
727
  # ---------------------------------------------------------------------------
@@ -8580,14 +8583,24 @@ async def stream_anthropic_response(
8580
8583
 
8581
8584
 
8582
8585
  def _build_passthrough_headers(request: Request) -> dict | None:
8583
- api_key = request.headers.get("x-api-key") or ANTHROPIC_API_KEY
8584
- if not api_key:
8585
- return None
8586
8586
  headers = {
8587
8587
  "Content-Type": "application/json",
8588
- "x-api-key": api_key,
8589
8588
  "anthropic-version": request.headers.get("anthropic-version", "2023-06-01"),
8590
8589
  }
8590
+ # Claude Code on a Claude Max / Pro plan authenticates with an OAuth *bearer*
8591
+ # token (Authorization: Bearer sk-ant-oat...), NOT an API key. When the client
8592
+ # sends one, forward it verbatim and do NOT attach x-api-key -- Anthropic
8593
+ # rejects requests that carry both credentials. This lets the proxy sit
8594
+ # transparently in front of api.anthropic.com for subscription-auth Claude
8595
+ # Code sessions (point ANTHROPIC_BASE_URL at the proxy and it just works).
8596
+ authorization = request.headers.get("authorization")
8597
+ if authorization:
8598
+ headers["Authorization"] = authorization
8599
+ else:
8600
+ api_key = request.headers.get("x-api-key") or ANTHROPIC_API_KEY
8601
+ if not api_key:
8602
+ return None
8603
+ headers["x-api-key"] = api_key
8591
8604
  beta = request.headers.get("anthropic-beta")
8592
8605
  if beta:
8593
8606
  headers["anthropic-beta"] = beta
@@ -0,0 +1,73 @@
1
+ """Tests for OAuth-aware Anthropic passthrough (Claude Max) + passthrough model match."""
2
+ import importlib.util
3
+ import os
4
+ import unittest
5
+ from pathlib import Path
6
+ from types import SimpleNamespace
7
+
8
+
9
+ def _load_proxy_module():
10
+ proxy_path = Path(__file__).resolve().parents[1] / "scripts" / "anthropic_proxy.py"
11
+ spec = importlib.util.spec_from_file_location("anthropic_proxy", proxy_path)
12
+ module = importlib.util.module_from_spec(spec)
13
+ spec.loader.exec_module(module)
14
+ return module
15
+
16
+
17
+ proxy = _load_proxy_module()
18
+
19
+
20
+ def req(headers):
21
+ # FastAPI Request.headers exposes a case-insensitive .get; the proxy only
22
+ # reads lowercase keys, so a plain dict is a faithful stand-in.
23
+ return SimpleNamespace(headers=headers)
24
+
25
+
26
+ class PassthroughOAuthTest(unittest.TestCase):
27
+ def test_oauth_bearer_forwarded_without_api_key(self):
28
+ h = proxy._build_passthrough_headers(
29
+ req({"authorization": "Bearer sk-ant-oat-abc", "anthropic-version": "2023-06-01"})
30
+ )
31
+ self.assertEqual(h["Authorization"], "Bearer sk-ant-oat-abc")
32
+ self.assertNotIn("x-api-key", h) # must NOT mix credentials
33
+
34
+ def test_oauth_takes_precedence_over_api_key(self):
35
+ h = proxy._build_passthrough_headers(
36
+ req({"authorization": "Bearer sk-ant-oat-abc", "x-api-key": "sk-ant-api-xyz"})
37
+ )
38
+ self.assertEqual(h["Authorization"], "Bearer sk-ant-oat-abc")
39
+ self.assertNotIn("x-api-key", h)
40
+
41
+ def test_api_key_path_still_works(self):
42
+ h = proxy._build_passthrough_headers(req({"x-api-key": "sk-ant-api-xyz"}))
43
+ self.assertEqual(h["x-api-key"], "sk-ant-api-xyz")
44
+ self.assertNotIn("Authorization", h)
45
+
46
+ def test_beta_header_forwarded(self):
47
+ h = proxy._build_passthrough_headers(
48
+ req({"authorization": "Bearer t", "anthropic-beta": "oauth-2025-04-20"})
49
+ )
50
+ self.assertEqual(h["anthropic-beta"], "oauth-2025-04-20")
51
+
52
+ def test_no_credentials_returns_none(self):
53
+ old = proxy.ANTHROPIC_API_KEY
54
+ proxy.ANTHROPIC_API_KEY = ""
55
+ try:
56
+ self.assertIsNone(proxy._build_passthrough_headers(req({})))
57
+ finally:
58
+ proxy.ANTHROPIC_API_KEY = old
59
+
60
+
61
+ class PassthroughModelMatchTest(unittest.TestCase):
62
+ def test_new_anthropic_models_passthrough(self):
63
+ for m in ("claude-opus-4-8", "claude-fable-5", "claude-haiku-4-5-20251001",
64
+ "claude-opus-4-6", "claude-sonnet-4-6"):
65
+ self.assertTrue(proxy._should_passthrough_model(m), m)
66
+
67
+ def test_local_model_not_passthrough(self):
68
+ self.assertFalse(proxy._should_passthrough_model("qwen36-35b-a3b-iq4xs"))
69
+ self.assertFalse(proxy._should_passthrough_model(""))
70
+
71
+
72
+ if __name__ == "__main__":
73
+ unittest.main()