@x12i/ai-profiles 1.2.5 → 1.4.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.
Files changed (36) hide show
  1. package/README.md +146 -30
  2. package/dist/buildResolvedProfile.d.ts +1 -0
  3. package/dist/buildResolvedProfile.d.ts.map +1 -1
  4. package/dist/buildResolvedProfile.js +10 -6
  5. package/dist/buildResolvedProfile.js.map +1 -1
  6. package/dist/constants.d.ts +0 -9
  7. package/dist/constants.d.ts.map +1 -1
  8. package/dist/constants.js +0 -13
  9. package/dist/constants.js.map +1 -1
  10. package/dist/data/models-profiles.json +8 -1
  11. package/dist/data/profiles-shortcuts.json +3 -0
  12. package/dist/index.d.ts +2 -2
  13. package/dist/index.d.ts.map +1 -1
  14. package/dist/index.js +1 -1
  15. package/dist/index.js.map +1 -1
  16. package/dist/isKnownProfileOrShortcut.d.ts +2 -5
  17. package/dist/isKnownProfileOrShortcut.d.ts.map +1 -1
  18. package/dist/isKnownProfileOrShortcut.js +4 -15
  19. package/dist/isKnownProfileOrShortcut.js.map +1 -1
  20. package/dist/profileInputMatch.d.ts +20 -0
  21. package/dist/profileInputMatch.d.ts.map +1 -0
  22. package/dist/profileInputMatch.js +30 -0
  23. package/dist/profileInputMatch.js.map +1 -0
  24. package/dist/resolveAIProfile.d.ts.map +1 -1
  25. package/dist/resolveAIProfile.js +26 -17
  26. package/dist/resolveAIProfile.js.map +1 -1
  27. package/dist/resolveModelRouting.d.ts +19 -0
  28. package/dist/resolveModelRouting.d.ts.map +1 -0
  29. package/dist/resolveModelRouting.js +71 -0
  30. package/dist/resolveModelRouting.js.map +1 -0
  31. package/dist/types.d.ts +12 -2
  32. package/dist/types.d.ts.map +1 -1
  33. package/dist/validation/validateModelsProfilesJson.d.ts.map +1 -1
  34. package/dist/validation/validateModelsProfilesJson.js +1 -7
  35. package/dist/validation/validateModelsProfilesJson.js.map +1 -1
  36. package/package.json +4 -1
package/README.md CHANGED
@@ -8,6 +8,20 @@ Resolve AI profile names into concrete model choices. The package ships JSON in
8
8
  npm install @x12i/ai-profiles
9
9
  ```
10
10
 
11
+ ## Public API
12
+
13
+ | Export | Sync? | Purpose |
14
+ |--------|-------|---------|
15
+ | `listAIProfiles(options?)` | No (async) | Profile summaries: primary `profile` key, `aliases[]`, choices, defaults |
16
+ | `listAIShortcuts()` | Yes | Shortcut table: `{ key, profile, choice?, description? }[]` |
17
+ | `resolveAIProfile(input, options?)` | No (async) | Resolve input → model, pricing, runtime, canonical `profile` key |
18
+ | `resolveUseOpenRouter(explicit?)` | Yes | Resolve OpenRouter vs vendor-direct routing (option → env → default) |
19
+ | `buildOpenRouterModelId(provider, modelId)` | Yes | Build an OpenRouter slug (`openai/gpt-5.4`) from registry fields |
20
+ | `isKnownProfileOrShortcut(input)` | Yes (bundled only) | Whether input is a known primary key, shortcut, or alias |
21
+ | `AIProfilesError` | — | Typed errors (`UNKNOWN_PROFILE`, …) |
22
+
23
+ Registry JSON lives in `models-profiles.json` (profiles + aliases) and `profiles-shortcuts.json` (shortcuts).
24
+
11
25
  ## Basic usage
12
26
 
13
27
  ```ts
@@ -21,18 +35,54 @@ import {
21
35
  const profiles = await listAIProfiles();
22
36
  const model = await resolveAIProfile("cheap");
23
37
 
24
- console.log(model.provider);
25
- console.log(model.modelId);
38
+ console.log(model.profile); // canonical primary key: cheap
39
+ console.log(model.provider); // "openrouter" by default for remote profiles
40
+ console.log(model.modelId); // "google/gemini-2.5-flash-lite"
41
+ console.log(model.routing); // "openrouter" | "direct"
26
42
  console.log(model.pricing);
27
43
  console.log(model.instructionTier);
28
44
  console.log(model.backend);
29
45
  ```
30
46
 
31
- ## Sync validation (bundled registry)
47
+ ## Naming: many names, one profile
48
+
49
+ Each **profile** has exactly one **primary key** (e.g. `balanced`, `cheap`) and **many aliases** — alternate strings that mean the same profile. Data is in `models-profiles.json` under each profile’s `aliases` array.
50
+
51
+ **Shortcuts** (`profiles-shortcuts.json`) are a second registry of names. A shortcut points at a profile and may pin a specific **choice** (e.g. `cheapest` → `cheap` + `cost_floor`).
52
+
53
+ The same string can appear as both an alias and a shortcut. That is intentional.
54
+
55
+ ### Resolution order
56
+
57
+ For `resolveAIProfile(input)` and `isKnownProfileOrShortcut(input)` (bundled path uses the same rules):
58
+
59
+ 1. **Primary key** — input matches a profile id → that profile, default choice (unless `options.choice` is set).
60
+ 2. **Shortcut** — input matches a shortcut key → shortcut’s profile and choice (shortcut overrides alias when both exist).
61
+ 3. **Alias** — input matches an entry in some profile’s `aliases` → that profile, default choice.
62
+
63
+ Input is normalized (trimmed, lowercased) before matching.
64
+
65
+ ### Examples
66
+
67
+ ```ts
68
+ // Primary key
69
+ await resolveAIProfile("balanced"); // profile: balanced
32
70
 
33
- `listAIProfiles()` is async and returns profile summaries only. Shortcuts (e.g. `cheapest`) resolve via `resolveAIProfile` but are not included in that list unless you call `listAIShortcuts()`.
71
+ // Alias only (on cheap in bundled data)
72
+ await resolveAIProfile("cost-sensitive"); // profile: cheap, choice: default
34
73
 
35
- Use **`isKnownProfileOrShortcut(input)`** for form validation and Run-button gating on first paint — it reads the **bundled** registry only (no network, no cache race):
74
+ // Alias shared with shortcut — shortcut wins if it pins a choice
75
+ await resolveAIProfile("default"); // profile: balanced (via default shortcut)
76
+
77
+ // Shortcut with explicit choice
78
+ await resolveAIProfile("cheapest"); // profile: cheap, choice: cost_floor
79
+ ```
80
+
81
+ `listAIProfiles()` returns each profile’s `aliases` so UIs can show friendly labels. `listAIShortcuts()` lists shortcut keys separately (not duplicated inside `listAIProfiles()`).
82
+
83
+ ## Sync validation (bundled registry)
84
+
85
+ Use **`isKnownProfileOrShortcut(input)`** before run/execute or on first paint when the remote registry may not be loaded yet. It reads the **bundled** JSON only (no network, no in-memory cache race).
36
86
 
37
87
  ```ts
38
88
  const canRun =
@@ -41,45 +91,97 @@ const canRun =
41
91
  isKnownProfileOrShortcut(fallbackProfile);
42
92
  ```
43
93
 
44
- Unknown strings fail validation before `resolveAIProfile` / execute.
94
+ Accepts **primary keys**, **shortcuts**, and **profile aliases**. Unknown strings return `false`.
95
+
96
+ After validation, call `resolveAIProfile` (usually `source: "auto"` or `"bundled"`) to get the canonical `resolved.profile` primary key and model details.
45
97
 
46
- ### Primary keys vs aliases
98
+ ### UI guidance
47
99
 
48
- - **Studio dropdowns** should use `profile` keys from `await listAIProfiles()` (e.g. `balanced`, `cheap`).
49
- - **Shortcut dropdowns** (optional) use `listAIShortcuts()` → `{ key, profile, choice?, description? }`.
50
- - **Profile aliases** (e.g. `"standard"` on `balanced`) are metadata on each summary’s `aliases` field. They are **not** primary keys and are **not** accepted by `isKnownProfileOrShortcut` unless the same string is also a shortcut key in `profiles-shortcuts.json`.
51
- - **Reserved keys** (`default`) are invalid as profile keys and shortcut keys. Profile aliases must not use legacy graph-engine tokens (`default`, `strong`, `weak`). Store primary keys only (e.g. `balanced`, not `default`).
52
- - **Legacy graph-engine migration** — one-time mapping for old graph JSON (not runtime shortcuts):
100
+ - **Profile picker**: `await listAIProfiles()` → use each row’s `profile` as the value; show `displayName` / `aliases` as labels if helpful.
101
+ - **Shortcut picker** (optional): `listAIShortcuts()` → use `key` as the value.
102
+ - **Stored config**: any accepted name (primary, alias, or shortcut) is valid; prefer primary keys for new data if you want one canonical form in your own schema.
103
+
104
+ ## Force a choice
53
105
 
54
106
  ```ts
55
- import { legacyGraphEngineAliasMap } from "@x12i/ai-profiles";
107
+ const model = await resolveAIProfile("cheap", {
108
+ choice: "safer_provider",
109
+ });
110
+ ```
111
+
112
+ ## OpenRouter vs vendor-direct routing
56
113
 
57
- // { default: "balanced", strong: "deep", weak: "cheap" }
58
- const primary = legacyGraphEngineAliasMap[legacyToken] ?? legacyToken;
114
+ Remote profiles (anything that is not `local` / on-device) can be resolved for **OpenRouter** or for a **vendor API directly**. Local CPU profiles are always returned as-is.
115
+
116
+ ### Resolution priority
117
+
118
+ 1. **`options.useOpenRouter`** when passed to `resolveAIProfile`
119
+ 2. **`USE_OPENROUTER`** in `.env` / process env
120
+ 3. **Default: `true`** (OpenRouter)
121
+
122
+ Supported today: **OpenRouter** and **vendor-direct**. Azure and AWS routing are not supported yet.
123
+
124
+ ### OpenRouter (default)
125
+
126
+ ```ts
127
+ const resolved = await resolveAIProfile("cheap");
128
+ // or explicitly:
129
+ await resolveAIProfile("cheap", { useOpenRouter: true });
130
+
131
+ // resolved.provider === "openrouter"
132
+ // resolved.modelId === "google/gemini-2.5-flash-lite"
133
+ // resolved.routing === "openrouter"
134
+ // resolved.backend === "openrouter"
59
135
  ```
60
136
 
61
- FuncX runtime shortcuts in `profiles-shortcuts.json` differ (e.g. `resolveAIProfile("strong")` → `pro`, `"weak"` → `local`). Use the map only when rewriting stored graph profile fields to primary keys.
137
+ Registry choices store vendor-native ids (e.g. `gpt-5.4`, `gemini-2.5-flash-lite`). When routing via OpenRouter, this package rewrites them to full slugs: `{vendor}/{model}` (e.g. `openai/gpt-5.4`, `anthropic/claude-sonnet-4.6`). Anthropic version segments are normalized to dotted form (`4.6`, not `4-6`).
62
138
 
63
- - **Legacy FuncX mode shortcuts** (`weak`, `normal`, `strong`, `ultra`) and **local shortcuts** (`cpu`, `offline`, `on-device`) resolve via `profiles-shortcuts.json`. Do not conflate `cpu` (on-device) with `cheapest` / `economy` (remote, low cost).
139
+ This applies to **primary keys, aliases, and shortcuts** — any input that resolves to a remote profile choice.
64
140
 
65
- ## Resolve a shortcut
141
+ ### Vendor-direct
66
142
 
67
143
  ```ts
68
- const model = await resolveAIProfile("cheapest");
144
+ const resolved = await resolveAIProfile("cheap", { useOpenRouter: false });
69
145
 
70
- console.log(model.profile); // cheap
71
- console.log(model.choice); // cost_floor
72
- console.log(model.modelId);
146
+ // resolved.provider === "google"
147
+ // resolved.modelId === "gemini-2.5-flash-lite"
148
+ // resolved.routing === "direct"
149
+ // resolved.backend === "custom"
73
150
  ```
74
151
 
75
- ## Force a choice
152
+ Use this when calling OpenAI, Anthropic, Google, etc. APIs directly instead of through OpenRouter.
153
+
154
+ ### Env fallback
155
+
156
+ Set in `.env` or the process environment:
157
+
158
+ ```env
159
+ USE_OPENROUTER=1 # or true, yes, on → OpenRouter
160
+ USE_OPENROUTER=0 # or false, no, off → vendor-direct
161
+ ```
162
+
163
+ When `useOpenRouter` is omitted from `resolveAIProfile`, the env value is used. An explicit option always wins over env.
76
164
 
77
165
  ```ts
78
- const model = await resolveAIProfile("cheap", {
79
- choice: "safer_provider",
80
- });
166
+ process.env.USE_OPENROUTER = "0";
167
+ await resolveAIProfile("cheap"); // vendor-direct
168
+
169
+ await resolveAIProfile("cheap", { useOpenRouter: true }); // still OpenRouter
81
170
  ```
82
171
 
172
+ Helper exports:
173
+
174
+ ```ts
175
+ import { resolveUseOpenRouter, buildOpenRouterModelId } from "@x12i/ai-profiles";
176
+
177
+ resolveUseOpenRouter(); // true by default
178
+ resolveUseOpenRouter(false); // explicit override
179
+
180
+ buildOpenRouterModelId("openai", "gpt-5.4"); // "openai/gpt-5.4"
181
+ ```
182
+
183
+ Tests: `test/resolveModelRouting.test.ts`.
184
+
83
185
  ## Use bundled only
84
186
 
85
187
  ```ts
@@ -128,6 +230,7 @@ const resolved = await resolveAIProfile(
128
230
  const modelConfig = {
129
231
  provider: resolved.provider,
130
232
  model: resolved.modelId,
233
+ routing: resolved.routing,
131
234
  instructionTier: resolved.instructionTier,
132
235
  backend: resolved.backend,
133
236
  temperature: resolved.runtime.temperature,
@@ -135,6 +238,13 @@ const modelConfig = {
135
238
  toolPolicy: resolved.runtime.toolPolicy,
136
239
  reasoningEffort: resolved.runtime.reasoningEffort,
137
240
  };
241
+
242
+ // Default OpenRouter routing:
243
+ // provider: "openrouter", model: "openai/gpt-5.4", routing: "openrouter"
244
+
245
+ // Vendor-direct:
246
+ // await resolveAIProfile(..., { useOpenRouter: false })
247
+ // provider: "openai", model: "gpt-5.4", routing: "direct"
138
248
  ```
139
249
 
140
250
  ## Profile matrix (FuncX contract)
@@ -149,13 +259,19 @@ const modelConfig = {
149
259
  | `local` / `llama_cpp_gguf` | CPU | **`cpu`** | `funcx:llama-cpp:gguf` |
150
260
  | `local` / `transformersjs_default` | CPU | **`cpu`** | `Xenova/distilbart-cnn-6-6` |
151
261
 
152
- Legacy mode shortcuts: `weak` → local, `normal` → balanced, `strong` → pro, `ultra` → deep.
262
+ FuncX mode shortcuts (bundled): `weak` → local, `normal` → balanced, `strong` → pro, `ultra` → deep, `default` → balanced.
153
263
 
154
264
  Local CPU choices expose FuncX env keys in `resolved.metadata` (e.g. `LLAMA_CPP_MODEL_PATH`, `TRANSFORMERS_JS_MODEL_ID`).
155
265
 
156
266
  ### OpenRouter model ids
157
267
 
158
- Remote profile choices use vendor-native `modelId` values (e.g. `gpt-5.4`, `gemini-2.5-flash-lite`). Anthropic version segments follow OpenRouter slugs (`claude-sonnet-4.6`, not `claude-sonnet-4-6`). `@x12i/ai-tools` resolves these to full OpenRouter slugs (`openai/gpt-5.4`) and remaps deprecated ids when the bundled catalog is stale.
268
+ Remote profile choices in `models-profiles.json` use vendor-native `modelId` values (e.g. `gpt-5.4`, `gemini-2.5-flash-lite`). By default, `resolveAIProfile` returns OpenRouter-ready output:
269
+
270
+ - `provider`: `"openrouter"`
271
+ - `modelId`: full slug such as `openai/gpt-5.4`
272
+ - `routing`: `"openrouter"`
273
+
274
+ Pass `useOpenRouter: false` (or `USE_OPENROUTER=0`) to get vendor-native `provider` + `modelId` for direct API calls. `@x12i/ai-tools` can still remap deprecated OpenRouter ids when the bundled catalog is stale.
159
275
 
160
276
  ### Keeping models aligned over time
161
277
 
@@ -170,7 +286,7 @@ npm run verify:openrouter # bundled profiles vs ai-tools catalog (sibling
170
286
  npm run verify:openrouter:live # same vs live open-assets catalog (pre-release)
171
287
  ```
172
288
 
173
- Unit tests in `test/openrouterAlignment.test.ts` guard resolution rules offline. Use `verify:openrouter` when updating profile model ids; use `verify:openrouter:live` after refreshing [open-assets](https://open-assets.x12i.com/openrouter-models-catalog.json).
289
+ Unit tests in `test/openrouterAlignment.test.ts` and `test/resolveModelRouting.test.ts` guard resolution rules offline. Use `verify:openrouter` when updating profile model ids; use `verify:openrouter:live` after refreshing [open-assets](https://open-assets.x12i.com/openrouter-models-catalog.json).
174
290
 
175
291
  Vendor-direct-only choices (not routed via OpenRouter) can opt out:
176
292
 
@@ -181,7 +297,7 @@ Vendor-direct-only choices (not routed via OpenRouter) can opt out:
181
297
  ## Tests
182
298
 
183
299
  ```bash
184
- npm test # build + full suite (62 tests)
300
+ npm test # build + full suite
185
301
  npm run test:unit # source tests only (skip integration/exports)
186
302
  npm run test:integration # integration + dist export smoke tests
187
303
  npm run pack:check # dry-run npm tarball contents
@@ -7,6 +7,7 @@ interface BuildResolvedProfileInput {
7
7
  shortcut?: AIProfileShortcut;
8
8
  registry: AIProfilesRegistry;
9
9
  loaderWarnings?: AIProfileWarning[];
10
+ useOpenRouter?: boolean;
10
11
  }
11
12
  export declare function buildResolvedProfile(params: BuildResolvedProfileInput): ResolvedAIProfile;
12
13
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"buildResolvedProfile.d.ts","sourceRoot":"","sources":["../src/buildResolvedProfile.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,eAAe,EACf,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EAClB,MAAM,YAAY,CAAC;AAEpB,UAAU,yBAAyB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,mBAAmB,CAAC;IAC7B,MAAM,EAAE,eAAe,CAAC;IACxB,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAC7B,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,cAAc,CAAC,EAAE,gBAAgB,EAAE,CAAC;CACrC;AAED,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,yBAAyB,GAChC,iBAAiB,CAuGnB"}
1
+ {"version":3,"file":"buildResolvedProfile.d.ts","sourceRoot":"","sources":["../src/buildResolvedProfile.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EACV,eAAe,EACf,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EAClB,MAAM,YAAY,CAAC;AAEpB,UAAU,yBAAyB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,mBAAmB,CAAC;IAC7B,MAAM,EAAE,eAAe,CAAC;IACxB,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAC7B,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,cAAc,CAAC,EAAE,gBAAgB,EAAE,CAAC;IACpC,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,yBAAyB,GAChC,iBAAiB,CA2GnB"}
@@ -1,8 +1,9 @@
1
1
  import { DEFAULT_CACHE_TTL_MS, DEFAULT_RUNTIME_DEFAULTS } from "./constants.js";
2
2
  import { getMemoryCache } from "./loader/memoryCache.js";
3
3
  import { resolveBackend, resolveInstructionTier, } from "./resolveInstructionTierAndBackend.js";
4
+ import { applyModelRouting, resolveUseOpenRouter, } from "./resolveModelRouting.js";
4
5
  export function buildResolvedProfile(params) {
5
- const { input, shortcutKey, profile, choice, shortcut, registry, loaderWarnings = [], } = params;
6
+ const { input, shortcutKey, profile, choice, shortcut, registry, loaderWarnings = [], useOpenRouter: explicitUseOpenRouter, } = params;
6
7
  const warnings = [...loaderWarnings];
7
8
  const cache = getMemoryCache();
8
9
  const cacheLoadedAt = cache?.loadedAt ?? Date.parse(registry.loadedAt);
@@ -38,11 +39,13 @@ export function buildResolvedProfile(params) {
38
39
  ...(choice.runtime ?? {}),
39
40
  };
40
41
  const instructionTier = resolveInstructionTier(profile, mergedRuntime.instructionTier);
41
- const backend = resolveBackend(profile, choice, mergedRuntime.backend);
42
+ const resolvedBackend = resolveBackend(profile, choice, mergedRuntime.backend);
43
+ const useOpenRouter = resolveUseOpenRouter(explicitUseOpenRouter);
44
+ const routed = applyModelRouting(choice, resolvedBackend, useOpenRouter);
42
45
  const runtime = {
43
46
  ...mergedRuntime,
44
47
  instructionTier,
45
- backend,
48
+ backend: routed.backend,
46
49
  };
47
50
  const resolved = {
48
51
  input,
@@ -53,10 +56,11 @@ export function buildResolvedProfile(params) {
53
56
  choice: choice.choice,
54
57
  choiceDisplayName: choice.displayName,
55
58
  choiceDescription: choice.description,
56
- provider: choice.provider,
57
- modelId: choice.modelId,
59
+ provider: routed.provider,
60
+ modelId: routed.modelId,
61
+ routing: routed.routing,
58
62
  instructionTier,
59
- backend,
63
+ backend: routed.backend,
60
64
  pricing,
61
65
  runtime,
62
66
  ...(choice.metadata !== undefined ? { metadata: choice.metadata } : {}),
@@ -1 +1 @@
1
- {"version":3,"file":"buildResolvedProfile.js","sourceRoot":"","sources":["../src/buildResolvedProfile.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"buildResolvedProfile.js","sourceRoot":"","sources":["../src/buildResolvedProfile.ts"],"names":[],"mappings":"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"}
@@ -5,15 +5,6 @@ export declare const REMOTE_MODELS_PROFILES_URL = "https://open-assets.x12i.com/
5
5
  export declare const REMOTE_PROFILES_SHORTCUTS_URL = "https://open-assets.x12i.com/profiles-shortcuts.json";
6
6
  export declare const MODELS_PROFILES_SCHEMA: "x12i.ai-profiles.models-profiles";
7
7
  export declare const PROFILES_SHORTCUTS_SCHEMA: "x12i.ai-profiles.shortcuts";
8
- /** Reserved keys — not valid profile or shortcut identifiers. */
9
- export declare const RESERVED_PROFILE_KEYS: readonly ["default"];
10
- /**
11
- * Legacy graph-engine profile tokens. Forbidden on `profile.aliases` and as
12
- * primary keys; use `legacyGraphEngineAliasMap` for one-time graph JSON migration.
13
- */
14
- export declare const LEGACY_GRAPH_ENGINE_ALIAS_KEYS: readonly ["default", "strong", "weak"];
15
- /** Must not appear on any profile `aliases` array. */
16
- export declare const FORBIDDEN_PROFILE_ALIASES: readonly ["default", "strong", "weak"];
17
8
  export declare const INSTRUCTION_TIERS: readonly ["default", "cpu", "reasoning"];
18
9
  export declare const AI_PROFILE_BACKENDS: readonly ["openrouter", "llama-cpp", "transformersjs", "custom"];
19
10
  export declare const DEFAULT_RUNTIME_DEFAULTS: Required<AIRuntimeDefaults>;
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEpD,eAAO,MAAM,oBAAoB,QAAsB,CAAC;AACxD,eAAO,MAAM,wBAAwB,OAAO,CAAC;AAE7C,eAAO,MAAM,0BAA0B,sDACc,CAAC;AAEtD,eAAO,MAAM,6BAA6B,yDACc,CAAC;AAEzD,eAAO,MAAM,sBAAsB,EAAG,kCAA2C,CAAC;AAClF,eAAO,MAAM,yBAAyB,EAAG,4BAAqC,CAAC;AAE/E,iEAAiE;AACjE,eAAO,MAAM,qBAAqB,sBAAuB,CAAC;AAE1D;;;GAGG;AACH,eAAO,MAAM,8BAA8B,wCAIjC,CAAC;AAEX,sDAAsD;AACtD,eAAO,MAAM,yBAAyB,wCAAiC,CAAC;AAExE,eAAO,MAAM,iBAAiB,0CAA2C,CAAC;AAE1E,eAAO,MAAM,mBAAmB,kEAKtB,CAAC;AAEX,eAAO,MAAM,wBAAwB,EAAE,QAAQ,CAAC,iBAAiB,CAahE,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEpD,eAAO,MAAM,oBAAoB,QAAsB,CAAC;AACxD,eAAO,MAAM,wBAAwB,OAAO,CAAC;AAE7C,eAAO,MAAM,0BAA0B,sDACc,CAAC;AAEtD,eAAO,MAAM,6BAA6B,yDACc,CAAC;AAEzD,eAAO,MAAM,sBAAsB,EAAG,kCAA2C,CAAC;AAClF,eAAO,MAAM,yBAAyB,EAAG,4BAAqC,CAAC;AAE/E,eAAO,MAAM,iBAAiB,0CAA2C,CAAC;AAE1E,eAAO,MAAM,mBAAmB,kEAKtB,CAAC;AAEX,eAAO,MAAM,wBAAwB,EAAE,QAAQ,CAAC,iBAAiB,CAahE,CAAC"}
package/dist/constants.js CHANGED
@@ -4,19 +4,6 @@ export const REMOTE_MODELS_PROFILES_URL = "https://open-assets.x12i.com/models-p
4
4
  export const REMOTE_PROFILES_SHORTCUTS_URL = "https://open-assets.x12i.com/profiles-shortcuts.json";
5
5
  export const MODELS_PROFILES_SCHEMA = "x12i.ai-profiles.models-profiles";
6
6
  export const PROFILES_SHORTCUTS_SCHEMA = "x12i.ai-profiles.shortcuts";
7
- /** Reserved keys — not valid profile or shortcut identifiers. */
8
- export const RESERVED_PROFILE_KEYS = ["default"];
9
- /**
10
- * Legacy graph-engine profile tokens. Forbidden on `profile.aliases` and as
11
- * primary keys; use `legacyGraphEngineAliasMap` for one-time graph JSON migration.
12
- */
13
- export const LEGACY_GRAPH_ENGINE_ALIAS_KEYS = [
14
- "default",
15
- "strong",
16
- "weak",
17
- ];
18
- /** Must not appear on any profile `aliases` array. */
19
- export const FORBIDDEN_PROFILE_ALIASES = LEGACY_GRAPH_ENGINE_ALIAS_KEYS;
20
7
  export const INSTRUCTION_TIERS = ["default", "cpu", "reasoning"];
21
8
  export const AI_PROFILE_BACKENDS = [
22
9
  "openrouter",
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AACxD,MAAM,CAAC,MAAM,wBAAwB,GAAG,IAAI,CAAC;AAE7C,MAAM,CAAC,MAAM,0BAA0B,GACrC,mDAAmD,CAAC;AAEtD,MAAM,CAAC,MAAM,6BAA6B,GACxC,sDAAsD,CAAC;AAEzD,MAAM,CAAC,MAAM,sBAAsB,GAAG,kCAA2C,CAAC;AAClF,MAAM,CAAC,MAAM,yBAAyB,GAAG,4BAAqC,CAAC;AAE/E,iEAAiE;AACjE,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,SAAS,CAAU,CAAC;AAE1D;;;GAGG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAG;IAC5C,SAAS;IACT,QAAQ;IACR,MAAM;CACE,CAAC;AAEX,sDAAsD;AACtD,MAAM,CAAC,MAAM,yBAAyB,GAAG,8BAA8B,CAAC;AAExE,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,SAAS,EAAE,KAAK,EAAE,WAAW,CAAU,CAAC;AAE1E,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,YAAY;IACZ,WAAW;IACX,gBAAgB;IAChB,QAAQ;CACA,CAAC;AAEX,MAAM,CAAC,MAAM,wBAAwB,GAAgC;IACnE,eAAe,EAAE,QAAQ;IACzB,UAAU,EAAE,MAAM;IAClB,WAAW,EAAE,GAAG;IAChB,UAAU,EAAE,MAAM;IAClB,aAAa,EAAE,MAAM;IACrB,gBAAgB,EAAE,KAAK;IACvB,QAAQ,EAAE,KAAK;IACf,eAAe,EAAE,KAAK;IACtB,kBAAkB,EAAE,KAAK;IACzB,WAAW,EAAE,MAAM;IACnB,eAAe,EAAE,SAAS;IAC1B,OAAO,EAAE,YAAY;CACtB,CAAC"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AACxD,MAAM,CAAC,MAAM,wBAAwB,GAAG,IAAI,CAAC;AAE7C,MAAM,CAAC,MAAM,0BAA0B,GACrC,mDAAmD,CAAC;AAEtD,MAAM,CAAC,MAAM,6BAA6B,GACxC,sDAAsD,CAAC;AAEzD,MAAM,CAAC,MAAM,sBAAsB,GAAG,kCAA2C,CAAC;AAClF,MAAM,CAAC,MAAM,yBAAyB,GAAG,4BAAqC,CAAC;AAE/E,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,SAAS,EAAE,KAAK,EAAE,WAAW,CAAU,CAAC;AAE1E,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,YAAY;IACZ,WAAW;IACX,gBAAgB;IAChB,QAAQ;CACA,CAAC;AAEX,MAAM,CAAC,MAAM,wBAAwB,GAAgC;IACnE,eAAe,EAAE,QAAQ;IACzB,UAAU,EAAE,MAAM;IAClB,WAAW,EAAE,GAAG;IAChB,UAAU,EAAE,MAAM;IAClB,aAAa,EAAE,MAAM;IACrB,gBAAgB,EAAE,KAAK;IACvB,QAAQ,EAAE,KAAK;IACf,eAAe,EAAE,KAAK;IACtB,kBAAkB,EAAE,KAAK;IACzB,WAAW,EAAE,MAAM;IACnB,eAAe,EAAE,SAAS;IAC1B,OAAO,EAAE,YAAY;CACtB,CAAC"}
@@ -160,6 +160,7 @@
160
160
  "description": "Default model selection for normal graph execution.",
161
161
  "category": "standard",
162
162
  "aliases": [
163
+ "default",
163
164
  "standard",
164
165
  "normal"
165
166
  ],
@@ -310,7 +311,8 @@
310
311
  "aliases": [
311
312
  "premium",
312
313
  "best",
313
- "highest-quality"
314
+ "highest-quality",
315
+ "strong"
314
316
  ],
315
317
  "defaultChoice": "default",
316
318
  "choices": {
@@ -629,6 +631,11 @@
629
631
  "displayName": "Local / CPU",
630
632
  "description": "On-device inference via FuncX CPU backends. No OpenRouter. Uses cpu instruction tier.",
631
633
  "category": "local",
634
+ "aliases": [
635
+ "weak",
636
+ "offline",
637
+ "on-device"
638
+ ],
632
639
  "defaultChoice": "llama_cpp_gguf",
633
640
  "choices": {
634
641
  "llama_cpp_gguf": {
@@ -30,6 +30,9 @@
30
30
  "profile": "fast",
31
31
  "choice": "cheaper_fast"
32
32
  },
33
+ "default": {
34
+ "profile": "balanced"
35
+ },
33
36
  "standard": {
34
37
  "profile": "balanced"
35
38
  },
package/dist/index.d.ts CHANGED
@@ -2,9 +2,9 @@ export { listAIProfiles } from "./listAIProfiles.js";
2
2
  export { listAIShortcuts } from "./listAIShortcuts.js";
3
3
  export { resolveAIProfile } from "./resolveAIProfile.js";
4
4
  export { isKnownProfileOrShortcut } from "./isKnownProfileOrShortcut.js";
5
- export { legacyGraphEngineAliasMap, LEGACY_GRAPH_ENGINE_ALIAS_KEYS, } from "./legacyGraphEngineAliasMap.js";
6
- export type { LegacyGraphEngineAliasKey } from "./legacyGraphEngineAliasMap.js";
5
+ export { resolveUseOpenRouter, readUseOpenRouterFromEnv, buildOpenRouterModelId, } from "./resolveModelRouting.js";
7
6
  export type { AIProfilesRegistry, AIProfileDefinition, AIProfileChoice, AIProfileShortcut, AIProfileSummary, AIShortcutSummary, ResolvedAIProfile, ListAIProfilesOptions, ResolveAIProfileOptions, AIProvider, AIModelPricing, AIRuntimeDefaults, AIProfileBackend, AIProfileWarning, InstructionTier, RegistrySourceMode, } from "./types.js";
7
+ export type { AIModelRoutingMode } from "./resolveModelRouting.js";
8
8
  export { AIProfilesError } from "./errors.js";
9
9
  export type { AIProfilesErrorCode } from "./errors.js";
10
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EACL,yBAAyB,EACzB,8BAA8B,GAC/B,MAAM,gCAAgC,CAAC;AACxC,YAAY,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAEhF,YAAY,EACV,kBAAkB,EAClB,mBAAmB,EACnB,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,qBAAqB,EACrB,uBAAuB,EACvB,UAAU,EACV,cAAc,EACd,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,kBAAkB,GACnB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,YAAY,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,sBAAsB,GACvB,MAAM,0BAA0B,CAAC;AAElC,YAAY,EACV,kBAAkB,EAClB,mBAAmB,EACnB,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,qBAAqB,EACrB,uBAAuB,EACvB,UAAU,EACV,cAAc,EACd,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,kBAAkB,GACnB,MAAM,YAAY,CAAC;AAEpB,YAAY,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAEnE,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,YAAY,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC"}
package/dist/index.js CHANGED
@@ -2,6 +2,6 @@ export { listAIProfiles } from "./listAIProfiles.js";
2
2
  export { listAIShortcuts } from "./listAIShortcuts.js";
3
3
  export { resolveAIProfile } from "./resolveAIProfile.js";
4
4
  export { isKnownProfileOrShortcut } from "./isKnownProfileOrShortcut.js";
5
- export { legacyGraphEngineAliasMap, LEGACY_GRAPH_ENGINE_ALIAS_KEYS, } from "./legacyGraphEngineAliasMap.js";
5
+ export { resolveUseOpenRouter, readUseOpenRouterFromEnv, buildOpenRouterModelId, } from "./resolveModelRouting.js";
6
6
  export { AIProfilesError } from "./errors.js";
7
7
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EACL,yBAAyB,EACzB,8BAA8B,GAC/B,MAAM,gCAAgC,CAAC;AAsBxC,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,sBAAsB,GACvB,MAAM,0BAA0B,CAAC;AAuBlC,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC"}
@@ -1,9 +1,6 @@
1
1
  /**
2
- * Returns true when `input` matches a profile primary key or a shortcut key
3
- * in the bundled registry. Sync — no network and safe on first paint.
4
- *
5
- * Profile aliases (see `listAIProfiles`) are not primary keys and are not
6
- * accepted here unless the same string is also a shortcut key.
2
+ * Returns true when `input` matches a profile primary key, shortcut, or alias.
3
+ * Sync — bundled registry only, safe on first paint.
7
4
  */
8
5
  export declare function isKnownProfileOrShortcut(input: string): boolean;
9
6
  //# sourceMappingURL=isKnownProfileOrShortcut.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"isKnownProfileOrShortcut.d.ts","sourceRoot":"","sources":["../src/isKnownProfileOrShortcut.ts"],"names":[],"mappings":"AAIA;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAkB/D"}
1
+ {"version":3,"file":"isKnownProfileOrShortcut.d.ts","sourceRoot":"","sources":["../src/isKnownProfileOrShortcut.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAG/D"}
@@ -1,22 +1,11 @@
1
1
  import { getBundledRegistry } from "./bundledRegistry.js";
2
- import { RESERVED_PROFILE_KEYS } from "./constants.js";
3
- import { normalizeKey } from "./normalizeKey.js";
2
+ import { matchProfileInput } from "./profileInputMatch.js";
4
3
  /**
5
- * Returns true when `input` matches a profile primary key or a shortcut key
6
- * in the bundled registry. Sync — no network and safe on first paint.
7
- *
8
- * Profile aliases (see `listAIProfiles`) are not primary keys and are not
9
- * accepted here unless the same string is also a shortcut key.
4
+ * Returns true when `input` matches a profile primary key, shortcut, or alias.
5
+ * Sync — bundled registry only, safe on first paint.
10
6
  */
11
7
  export function isKnownProfileOrShortcut(input) {
12
- const key = normalizeKey(input);
13
- if (!key) {
14
- return false;
15
- }
16
- if (RESERVED_PROFILE_KEYS.includes(key)) {
17
- return false;
18
- }
19
8
  const registry = getBundledRegistry();
20
- return key in registry.profiles || key in registry.shortcuts;
9
+ return matchProfileInput(registry, input) !== undefined;
21
10
  }
22
11
  //# sourceMappingURL=isKnownProfileOrShortcut.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"isKnownProfileOrShortcut.js","sourceRoot":"","sources":["../src/isKnownProfileOrShortcut.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD;;;;;;GAMG;AACH,MAAM,UAAU,wBAAwB,CAAC,KAAa;IACpD,MAAM,GAAG,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IAEhC,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IACE,qBAAqB,CAAC,QAAQ,CAC5B,GAA6C,CAC9C,EACD,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,QAAQ,GAAG,kBAAkB,EAAE,CAAC;IAEtC,OAAO,GAAG,IAAI,QAAQ,CAAC,QAAQ,IAAI,GAAG,IAAI,QAAQ,CAAC,SAAS,CAAC;AAC/D,CAAC"}
1
+ {"version":3,"file":"isKnownProfileOrShortcut.js","sourceRoot":"","sources":["../src/isKnownProfileOrShortcut.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D;;;GAGG;AACH,MAAM,UAAU,wBAAwB,CAAC,KAAa;IACpD,MAAM,QAAQ,GAAG,kBAAkB,EAAE,CAAC;IACtC,OAAO,iBAAiB,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,SAAS,CAAC;AAC1D,CAAC"}
@@ -0,0 +1,20 @@
1
+ import type { AIProfileShortcut, AIProfilesRegistry } from "./types.js";
2
+ export type ProfileInputMatch = {
3
+ kind: "profile";
4
+ profileKey: string;
5
+ } | {
6
+ kind: "shortcut";
7
+ profileKey: string;
8
+ shortcutKey: string;
9
+ shortcut: AIProfileShortcut;
10
+ } | {
11
+ kind: "alias";
12
+ profileKey: string;
13
+ alias: string;
14
+ };
15
+ /**
16
+ * Resolves user input to a profile: primary key, shortcut (optional choice), or alias.
17
+ * Shortcuts take precedence over aliases when the same string appears in both.
18
+ */
19
+ export declare function matchProfileInput(registry: Pick<AIProfilesRegistry, "profiles" | "shortcuts">, input: string): ProfileInputMatch | undefined;
20
+ //# sourceMappingURL=profileInputMatch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profileInputMatch.d.ts","sourceRoot":"","sources":["../src/profileInputMatch.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAExE,MAAM,MAAM,iBAAiB,GACzB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GACvC;IACE,IAAI,EAAE,UAAU,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,iBAAiB,CAAC;CAC7B,GACD;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzD;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,IAAI,CAAC,kBAAkB,EAAE,UAAU,GAAG,WAAW,CAAC,EAC5D,KAAK,EAAE,MAAM,GACZ,iBAAiB,GAAG,SAAS,CA6B/B"}
@@ -0,0 +1,30 @@
1
+ import { normalizeKey } from "./normalizeKey.js";
2
+ /**
3
+ * Resolves user input to a profile: primary key, shortcut (optional choice), or alias.
4
+ * Shortcuts take precedence over aliases when the same string appears in both.
5
+ */
6
+ export function matchProfileInput(registry, input) {
7
+ const key = normalizeKey(input);
8
+ if (!key) {
9
+ return undefined;
10
+ }
11
+ if (registry.profiles[key]) {
12
+ return { kind: "profile", profileKey: key };
13
+ }
14
+ const shortcut = registry.shortcuts[key];
15
+ if (shortcut) {
16
+ return {
17
+ kind: "shortcut",
18
+ profileKey: shortcut.profile,
19
+ shortcutKey: key,
20
+ shortcut,
21
+ };
22
+ }
23
+ for (const [profileKey, profile] of Object.entries(registry.profiles)) {
24
+ if (profile.aliases?.some((alias) => normalizeKey(alias) === key)) {
25
+ return { kind: "alias", profileKey, alias: key };
26
+ }
27
+ }
28
+ return undefined;
29
+ }
30
+ //# sourceMappingURL=profileInputMatch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profileInputMatch.js","sourceRoot":"","sources":["../src/profileInputMatch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAajD;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAC/B,QAA4D,EAC5D,KAAa;IAEb,MAAM,GAAG,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IAEhC,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3B,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC;IAC9C,CAAC;IAED,MAAM,QAAQ,GAAG,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAEzC,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO;YACL,IAAI,EAAE,UAAU;YAChB,UAAU,EAAE,QAAQ,CAAC,OAAO;YAC5B,WAAW,EAAE,GAAG;YAChB,QAAQ;SACT,CAAC;IACJ,CAAC;IAED,KAAK,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACtE,IAAI,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;YAClE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;QACnD,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"resolveAIProfile.d.ts","sourceRoot":"","sources":["../src/resolveAIProfile.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE7E,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,iBAAiB,CAAC,CAmE5B"}
1
+ {"version":3,"file":"resolveAIProfile.d.ts","sourceRoot":"","sources":["../src/resolveAIProfile.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE7E,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,iBAAiB,CAAC,CA8E5B"}
@@ -1,29 +1,37 @@
1
1
  import { buildResolvedProfile } from "./buildResolvedProfile.js";
2
2
  import { AIProfilesError } from "./errors.js";
3
3
  import { loadAIProfilesRegistryWithWarnings } from "./loader/loadAIProfilesRegistry.js";
4
- import { normalizeKey } from "./normalizeKey.js";
4
+ import { matchProfileInput } from "./profileInputMatch.js";
5
5
  export async function resolveAIProfile(input, options = {}) {
6
6
  const { registry, warnings } = await loadAIProfilesRegistryWithWarnings({
7
7
  source: options.source,
8
8
  refresh: options.refresh,
9
9
  });
10
- const key = normalizeKey(input);
11
- const directProfile = registry.profiles[key];
12
- const shortcut = registry.shortcuts[key];
10
+ const match = matchProfileInput(registry, input);
11
+ if (!match) {
12
+ throw new AIProfilesError("UNKNOWN_PROFILE", `Unknown AI profile, shortcut, or alias: ${input}`, { input });
13
+ }
13
14
  let profileKey;
14
15
  let choiceKey;
15
- let matchedShortcut = shortcut;
16
- if (directProfile) {
17
- profileKey = key;
18
- choiceKey = options.choice ?? directProfile.defaultChoice;
19
- matchedShortcut = undefined;
20
- }
21
- else if (shortcut) {
22
- profileKey = shortcut.profile;
23
- choiceKey = options.choice ?? shortcut.choice;
24
- }
25
- else {
26
- throw new AIProfilesError("UNKNOWN_PROFILE", `Unknown AI profile or shortcut: ${input}`, { input });
16
+ let matchedShortcut;
17
+ switch (match.kind) {
18
+ case "profile":
19
+ profileKey = match.profileKey;
20
+ choiceKey =
21
+ options.choice ?? registry.profiles[profileKey].defaultChoice;
22
+ matchedShortcut = undefined;
23
+ break;
24
+ case "shortcut":
25
+ profileKey = match.profileKey;
26
+ choiceKey = options.choice ?? match.shortcut.choice;
27
+ matchedShortcut = match.shortcut;
28
+ break;
29
+ case "alias":
30
+ profileKey = match.profileKey;
31
+ choiceKey =
32
+ options.choice ?? registry.profiles[profileKey].defaultChoice;
33
+ matchedShortcut = undefined;
34
+ break;
27
35
  }
28
36
  const profile = registry.profiles[profileKey];
29
37
  if (!profile) {
@@ -42,12 +50,13 @@ export async function resolveAIProfile(input, options = {}) {
42
50
  }
43
51
  return buildResolvedProfile({
44
52
  input,
45
- shortcutKey: matchedShortcut ? key : undefined,
53
+ shortcutKey: match.kind === "shortcut" ? match.shortcutKey : undefined,
46
54
  profile,
47
55
  choice,
48
56
  shortcut: matchedShortcut,
49
57
  registry,
50
58
  loaderWarnings: warnings,
59
+ useOpenRouter: options.useOpenRouter,
51
60
  });
52
61
  }
53
62
  //# sourceMappingURL=resolveAIProfile.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"resolveAIProfile.js","sourceRoot":"","sources":["../src/resolveAIProfile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,kCAAkC,EAAE,MAAM,oCAAoC,CAAC;AACxF,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGjD,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,KAAa,EACb,UAAmC,EAAE;IAErC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,MAAM,kCAAkC,CAAC;QACtE,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,OAAO,EAAE,OAAO,CAAC,OAAO;KACzB,CAAC,CAAC;IAEH,MAAM,GAAG,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IAEhC,MAAM,aAAa,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC7C,MAAM,QAAQ,GAAG,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAEzC,IAAI,UAAkB,CAAC;IACvB,IAAI,SAA6B,CAAC;IAClC,IAAI,eAAe,GAAgC,QAAQ,CAAC;IAE5D,IAAI,aAAa,EAAE,CAAC;QAClB,UAAU,GAAG,GAAG,CAAC;QACjB,SAAS,GAAG,OAAO,CAAC,MAAM,IAAI,aAAa,CAAC,aAAa,CAAC;QAC1D,eAAe,GAAG,SAAS,CAAC;IAC9B,CAAC;SAAM,IAAI,QAAQ,EAAE,CAAC;QACpB,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC;QAC9B,SAAS,GAAG,OAAO,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,CAAC;IAChD,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,eAAe,CACvB,iBAAiB,EACjB,mCAAmC,KAAK,EAAE,EAC1C,EAAE,KAAK,EAAE,CACV,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAE9C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,eAAe,CACvB,iBAAiB,EACjB,uBAAuB,UAAU,EAAE,EACnC,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,CAC/B,CAAC;IACJ,CAAC;IAED,MAAM,cAAc,GAAG,SAAS,IAAI,OAAO,CAAC,aAAa,CAAC;IAC1D,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IAE/C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,IAAI,OAAO,CAAC,4BAA4B,EAAE,CAAC;YACzC,OAAO,gBAAgB,CAAC,UAAU,EAAE;gBAClC,GAAG,OAAO;gBACV,MAAM,EAAE,OAAO,CAAC,aAAa;aAC9B,CAAC,CAAC;QACL,CAAC;QAED,MAAM,IAAI,eAAe,CACvB,gBAAgB,EAChB,mBAAmB,cAAc,qBAAqB,UAAU,GAAG,EACnE,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,cAAc,EAAE,CACvD,CAAC;IACJ,CAAC;IAED,OAAO,oBAAoB,CAAC;QAC1B,KAAK;QACL,WAAW,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS;QAC9C,OAAO;QACP,MAAM;QACN,QAAQ,EAAE,eAAe;QACzB,QAAQ;QACR,cAAc,EAAE,QAAQ;KACzB,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"resolveAIProfile.js","sourceRoot":"","sources":["../src/resolveAIProfile.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { AIProfileBackend, AIProfileChoice, AIProvider } from "./types.js";
2
+ export type AIModelRoutingMode = "openrouter" | "direct";
3
+ /** Reads `USE_OPENROUTER` from process env (loading `.env` once when unset). */
4
+ export declare function readUseOpenRouterFromEnv(): boolean | undefined;
5
+ /**
6
+ * Resolves whether to route via OpenRouter.
7
+ * Explicit option wins, then `USE_OPENROUTER` env, then default `true`.
8
+ */
9
+ export declare function resolveUseOpenRouter(explicit?: boolean): boolean;
10
+ export declare function isRemoteProfileChoice(choice: AIProfileChoice): boolean;
11
+ export declare function buildOpenRouterModelId(provider: string, modelId: string): string;
12
+ export interface AppliedModelRouting {
13
+ provider: AIProvider;
14
+ modelId: string;
15
+ backend: AIProfileBackend;
16
+ routing: AIModelRoutingMode;
17
+ }
18
+ export declare function applyModelRouting(choice: AIProfileChoice, backend: AIProfileBackend, useOpenRouter: boolean): AppliedModelRouting;
19
+ //# sourceMappingURL=resolveModelRouting.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveModelRouting.d.ts","sourceRoot":"","sources":["../src/resolveModelRouting.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAGhF,MAAM,MAAM,kBAAkB,GAAG,YAAY,GAAG,QAAQ,CAAC;AAyBzD,gFAAgF;AAChF,wBAAgB,wBAAwB,IAAI,OAAO,GAAG,SAAS,CAU9D;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,CAAC,EAAE,OAAO,GAAG,OAAO,CAMhE;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAUtE;AAED,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAOhF;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,UAAU,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,gBAAgB,CAAC;IAC1B,OAAO,EAAE,kBAAkB,CAAC;CAC7B;AAED,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,eAAe,EACvB,OAAO,EAAE,gBAAgB,EACzB,aAAa,EAAE,OAAO,GACrB,mBAAmB,CAgBrB"}
@@ -0,0 +1,71 @@
1
+ import { loadDotenv } from "@x12i/env";
2
+ import { normalizeAnthropicVersionSlug } from "./validation/openRouterAlignment.js";
3
+ let dotenvLoaded = false;
4
+ function ensureDotenvLoaded() {
5
+ if (!dotenvLoaded) {
6
+ loadDotenv();
7
+ dotenvLoaded = true;
8
+ }
9
+ }
10
+ function parseBooleanEnv(value) {
11
+ const normalized = value.trim().toLowerCase();
12
+ if (["1", "true", "yes", "on"].includes(normalized)) {
13
+ return true;
14
+ }
15
+ if (["0", "false", "no", "off"].includes(normalized)) {
16
+ return false;
17
+ }
18
+ return undefined;
19
+ }
20
+ /** Reads `USE_OPENROUTER` from process env (loading `.env` once when unset). */
21
+ export function readUseOpenRouterFromEnv() {
22
+ ensureDotenvLoaded();
23
+ const raw = process.env.USE_OPENROUTER;
24
+ if (raw === undefined || raw.trim() === "") {
25
+ return undefined;
26
+ }
27
+ return parseBooleanEnv(raw);
28
+ }
29
+ /**
30
+ * Resolves whether to route via OpenRouter.
31
+ * Explicit option wins, then `USE_OPENROUTER` env, then default `true`.
32
+ */
33
+ export function resolveUseOpenRouter(explicit) {
34
+ if (explicit !== undefined) {
35
+ return explicit;
36
+ }
37
+ return readUseOpenRouterFromEnv() ?? true;
38
+ }
39
+ export function isRemoteProfileChoice(choice) {
40
+ if (choice.provider === "local") {
41
+ return false;
42
+ }
43
+ if (choice.modelId.startsWith("funcx:") || choice.modelId.startsWith("Xenova/")) {
44
+ return false;
45
+ }
46
+ return true;
47
+ }
48
+ export function buildOpenRouterModelId(provider, modelId) {
49
+ if (modelId.includes("/")) {
50
+ return modelId;
51
+ }
52
+ const normalizedModel = normalizeAnthropicVersionSlug(modelId);
53
+ return `${provider}/${normalizedModel}`;
54
+ }
55
+ export function applyModelRouting(choice, backend, useOpenRouter) {
56
+ if (!isRemoteProfileChoice(choice) || !useOpenRouter) {
57
+ return {
58
+ provider: choice.provider,
59
+ modelId: choice.modelId,
60
+ backend: useOpenRouter ? backend : backend === "openrouter" ? "custom" : backend,
61
+ routing: "direct",
62
+ };
63
+ }
64
+ return {
65
+ provider: "openrouter",
66
+ modelId: buildOpenRouterModelId(choice.provider, choice.modelId),
67
+ backend: "openrouter",
68
+ routing: "openrouter",
69
+ };
70
+ }
71
+ //# sourceMappingURL=resolveModelRouting.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveModelRouting.js","sourceRoot":"","sources":["../src/resolveModelRouting.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export type AIProvider = "openai" | "anthropic" | "google" | "deepseek" | "mistral" | "groq" | "xai" | "local" | "custom";
1
+ export type AIProvider = "openai" | "anthropic" | "google" | "deepseek" | "mistral" | "groq" | "xai" | "local" | "custom" | "openrouter";
2
2
  export type InstructionTier = "default" | "cpu" | "reasoning";
3
3
  export type AIProfileBackend = "openrouter" | "llama-cpp" | "transformersjs" | "custom";
4
4
  export interface AIModelPricing {
@@ -48,6 +48,7 @@ export interface AIProfileDefinition {
48
48
  displayName: string;
49
49
  description: string;
50
50
  category: string;
51
+ /** Many alternate names for this profile (see `matchProfileInput`). */
51
52
  aliases?: string[];
52
53
  defaultChoice: string;
53
54
  choices: Record<string, AIProfileChoice>;
@@ -95,7 +96,7 @@ export interface AIProfileSummary {
95
96
  category: string;
96
97
  defaultChoice: string;
97
98
  choices: string[];
98
- /** Human-friendly alternate names; not accepted by `isKnownProfileOrShortcut`. */
99
+ /** Additional names for the same profile (also valid for resolve / sync validation). */
99
100
  aliases: string[];
100
101
  defaultProvider: AIProvider;
101
102
  defaultModelId: string;
@@ -124,6 +125,8 @@ export interface ResolvedAIProfile {
124
125
  choiceDescription: string;
125
126
  provider: AIProvider;
126
127
  modelId: string;
128
+ /** How the resolved provider/model were routed (`openrouter` vs vendor-direct). */
129
+ routing: "openrouter" | "direct";
127
130
  instructionTier: InstructionTier;
128
131
  backend: AIProfileBackend;
129
132
  pricing?: AIModelPricing & {
@@ -158,6 +161,13 @@ export interface ResolveAIProfileOptions {
158
161
  refresh?: boolean;
159
162
  allowFallbackToDefaultChoice?: boolean;
160
163
  strict?: boolean;
164
+ /**
165
+ * When true (default), remote models resolve via OpenRouter (`provider: "openrouter"`,
166
+ * `modelId: "{vendor}/{model}"`). When false, use the choice's vendor provider and model id.
167
+ * Falls back to `USE_OPENROUTER` in `.env` when omitted (`1`/`true` → OpenRouter,
168
+ * `0`/`false` → direct). Azure and AWS routing are not supported yet.
169
+ */
170
+ useOpenRouter?: boolean;
161
171
  }
162
172
  export interface LoadRegistryOptions {
163
173
  source?: RegistrySourceMode;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"validateModelsProfilesJson.d.ts","sourceRoot":"","sources":["../../src/validation/validateModelsProfilesJson.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EACV,mBAAmB,EACnB,kBAAkB,EAClB,qBAAqB,EACtB,MAAM,aAAa,CAAC;AA2OrB,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,OAAO,GAAG,kBAAkB,CAgD7E;AAED,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,GAC5C,qBAAqB,CAiFvB"}
1
+ {"version":3,"file":"validateModelsProfilesJson.d.ts","sourceRoot":"","sources":["../../src/validation/validateModelsProfilesJson.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,mBAAmB,EACnB,kBAAkB,EAClB,qBAAqB,EACtB,MAAM,aAAa,CAAC;AAgOrB,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,OAAO,GAAG,kBAAkB,CAgD7E;AAED,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,GAC5C,qBAAqB,CAqEvB"}
@@ -1,5 +1,5 @@
1
1
  import { AIProfilesError } from "../errors.js";
2
- import { AI_PROFILE_BACKENDS, FORBIDDEN_PROFILE_ALIASES, INSTRUCTION_TIERS, MODELS_PROFILES_SCHEMA, PROFILES_SHORTCUTS_SCHEMA, RESERVED_PROFILE_KEYS, } from "../constants.js";
2
+ import { AI_PROFILE_BACKENDS, INSTRUCTION_TIERS, MODELS_PROFILES_SCHEMA, PROFILES_SHORTCUTS_SCHEMA, } from "../constants.js";
3
3
  function isRecord(value) {
4
4
  return typeof value === "object" && value !== null && !Array.isArray(value);
5
5
  }
@@ -84,9 +84,6 @@ function validateProfile(profileKey, profile) {
84
84
  if (typeof alias !== "string" || alias.trim() === "") {
85
85
  throw new AIProfilesError("REGISTRY_VALIDATION_FAILED", `Invalid alias on profile '${profileKey}'`, { profile: profileKey, alias });
86
86
  }
87
- if (FORBIDDEN_PROFILE_ALIASES.includes(alias)) {
88
- throw new AIProfilesError("REGISTRY_VALIDATION_FAILED", `Profile '${profileKey}' alias '${alias}' is reserved (legacy graph-engine token)`, { profile: profileKey, alias });
89
- }
90
87
  }
91
88
  }
92
89
  }
@@ -128,9 +125,6 @@ export function validateProfilesShortcutsJson(value, profiles) {
128
125
  throw new AIProfilesError("REGISTRY_VALIDATION_FAILED", "profiles-shortcuts.json shortcuts must be an object");
129
126
  }
130
127
  for (const [shortcutKey, shortcut] of Object.entries(value.shortcuts)) {
131
- if (RESERVED_PROFILE_KEYS.includes(shortcutKey)) {
132
- throw new AIProfilesError("REGISTRY_VALIDATION_FAILED", `Shortcut key '${shortcutKey}' is reserved`, { shortcut: shortcutKey });
133
- }
134
128
  if (!isRecord(shortcut)) {
135
129
  throw new AIProfilesError("REGISTRY_VALIDATION_FAILED", `Invalid shortcut '${shortcutKey}'`, { shortcut: shortcutKey });
136
130
  }
@@ -1 +1 @@
1
- {"version":3,"file":"validateModelsProfilesJson.js","sourceRoot":"","sources":["../../src/validation/validateModelsProfilesJson.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validateModelsProfilesJson.js","sourceRoot":"","sources":["../../src/validation/validateModelsProfilesJson.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EACjB,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,iBAAiB,CAAC;AAOzB,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,aAAa,CACpB,KAAc,EACd,KAAa,EACb,OAAe;IAEf,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACrD,MAAM,IAAI,eAAe,CACvB,4BAA4B,EAC5B,sBAAsB,KAAK,OAAO,OAAO,EAAE,EAC3C,EAAE,KAAK,EAAE,OAAO,EAAE,CACnB,CAAC;IACJ,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,oBAAoB,CAC3B,OAAgC,EAChC,UAAkB,EAClB,SAAiB;IAEjB,IAAI,OAAO,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;QAC1C,IACE,CAAC,iBAAiB,CAAC,QAAQ,CACzB,OAAO,CAAC,eAAqD,CAC9D,EACD,CAAC;YACD,MAAM,IAAI,eAAe,CACvB,4BAA4B,EAC5B,4BAA4B,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,iBAAiB,UAAU,aAAa,SAAS,GAAG,EAC/G,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,OAAO,CAAC,eAAe,EAAE,CACrF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAClC,IACE,CAAC,mBAAmB,CAAC,QAAQ,CAC3B,OAAO,CAAC,OAA+C,CACxD,EACD,CAAC;YACD,MAAM,IAAI,eAAe,CACvB,4BAA4B,EAC5B,oBAAoB,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,iBAAiB,UAAU,aAAa,SAAS,GAAG,EAC/F,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CACrE,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,2BAA2B,CAClC,QAAiC,EACjC,UAAkB,EAClB,SAAiB;IAEjB,MAAM,YAAY,GAAG,aAAa,CAChC,QAAQ,CAAC,YAAY,EACrB,uBAAuB,EACvB,YAAY,UAAU,aAAa,SAAS,GAAG,CAChD,CAAC;IAEF,IACE,CAAC,mBAAmB,CAAC,QAAQ,CAC3B,YAAoD,CACrD;QACD,YAAY,KAAK,YAAY;QAC7B,YAAY,KAAK,QAAQ,EACzB,CAAC;QACD,MAAM,IAAI,eAAe,CACvB,4BAA4B,EAC5B,iBAAiB,SAAS,iBAAiB,UAAU,yDAAyD,EAC9G,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,CACzD,CAAC;IACJ,CAAC;IAED,aAAa,CACX,QAAQ,CAAC,WAAW,EACpB,sBAAsB,EACtB,YAAY,UAAU,aAAa,SAAS,GAAG,CAChD,CAAC;IAEF,IAAI,YAAY,KAAK,WAAW,EAAE,CAAC;QACjC,aAAa,CACX,QAAQ,CAAC,YAAY,EACrB,uBAAuB,EACvB,YAAY,UAAU,aAAa,SAAS,GAAG,CAChD,CAAC;QACF,aAAa,CACX,QAAQ,CAAC,gBAAgB,EACzB,2BAA2B,EAC3B,YAAY,UAAU,aAAa,SAAS,GAAG,CAChD,CAAC;IACJ,CAAC;IAED,IAAI,YAAY,KAAK,gBAAgB,EAAE,CAAC;QACtC,aAAa,CACX,QAAQ,CAAC,UAAU,EACnB,qBAAqB,EACrB,YAAY,UAAU,aAAa,SAAS,GAAG,CAChD,CAAC;QACF,aAAa,CACX,QAAQ,CAAC,cAAc,EACvB,yBAAyB,EACzB,YAAY,UAAU,aAAa,SAAS,GAAG,CAChD,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CACrB,SAAiB,EACjB,MAAe,EACf,UAAkB;IAElB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,eAAe,CACvB,4BAA4B,EAC5B,mBAAmB,SAAS,kBAAkB,UAAU,GAAG,EAC3D,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,CAC3C,CAAC;IACJ,CAAC;IAED,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,YAAY,UAAU,aAAa,SAAS,GAAG,CAAC,CAAC;IACxF,aAAa,CACX,MAAM,CAAC,WAAW,EAClB,aAAa,EACb,YAAY,UAAU,aAAa,SAAS,GAAG,CAChD,CAAC;IACF,aAAa,CACX,MAAM,CAAC,WAAW,EAClB,aAAa,EACb,YAAY,UAAU,aAAa,SAAS,GAAG,CAChD,CAAC;IACF,aAAa,CACX,MAAM,CAAC,QAAQ,EACf,UAAU,EACV,YAAY,UAAU,aAAa,SAAS,GAAG,CAChD,CAAC;IACF,aAAa,CACX,MAAM,CAAC,OAAO,EACd,SAAS,EACT,YAAY,UAAU,aAAa,SAAS,GAAG,CAChD,CAAC;IAEF,IAAI,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7B,oBAAoB,CAAC,MAAM,CAAC,OAAO,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;IAC9D,CAAC;IAED,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QAChC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC/B,MAAM,IAAI,eAAe,CACvB,4BAA4B,EAC5B,iBAAiB,SAAS,iBAAiB,UAAU,qBAAqB,EAC1E,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,CAC3C,CAAC;QACJ,CAAC;QAED,2BAA2B,CAAC,MAAM,CAAC,QAAQ,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;IACtE,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,UAAkB,EAAE,OAAgB;IAC3D,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,eAAe,CACvB,4BAA4B,EAC5B,oBAAoB,UAAU,GAAG,EACjC,EAAE,OAAO,EAAE,UAAU,EAAE,CACxB,CAAC;IACJ,CAAC;IAED,aAAa,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,EAAE,YAAY,UAAU,GAAG,CAAC,CAAC;IACrE,aAAa,CAAC,OAAO,CAAC,WAAW,EAAE,aAAa,EAAE,YAAY,UAAU,GAAG,CAAC,CAAC;IAC7E,aAAa,CAAC,OAAO,CAAC,WAAW,EAAE,aAAa,EAAE,YAAY,UAAU,GAAG,CAAC,CAAC;IAC7E,aAAa,CAAC,OAAO,CAAC,QAAQ,EAAE,UAAU,EAAE,YAAY,UAAU,GAAG,CAAC,CAAC;IACvE,aAAa,CACX,OAAO,CAAC,aAAa,EACrB,eAAe,EACf,YAAY,UAAU,GAAG,CAC1B,CAAC;IAEF,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,eAAe,CACvB,4BAA4B,EAC5B,gCAAgC,UAAU,GAAG,EAC7C,EAAE,OAAO,EAAE,UAAU,EAAE,CACxB,CAAC;IACJ,CAAC;IAED,MAAM,aAAa,GAAG,OAAO,CAAC,aAAuB,CAAC;IACtD,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;QACpC,MAAM,IAAI,eAAe,CACvB,4BAA4B,EAC5B,YAAY,UAAU,oBAAoB,aAAa,kBAAkB,EACzE,EAAE,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,CACvC,CAAC;IACJ,CAAC;IAED,KAAK,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAClE,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;IAChD,CAAC;IAED,IAAI,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9B,oBAAoB,CAAC,OAAO,CAAC,OAAO,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;IAC/D,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACnC,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;gBACrD,MAAM,IAAI,eAAe,CACvB,4BAA4B,EAC5B,6BAA6B,UAAU,GAAG,EAC1C,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,CAC/B,CAAC;YACJ,CAAC;QAEH,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,KAAc;IACvD,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,eAAe,CACvB,4BAA4B,EAC5B,wCAAwC,CACzC,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,sBAAsB,EAAE,CAAC;QAC5C,MAAM,IAAI,eAAe,CACvB,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC,CAAC,4BAA4B,EAC3E,kDAAkD,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,EACxE,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CACzB,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAChC,aAAa,CAAC,KAAK,CAAC,OAAO,EAAE,SAAS,EAAE,sBAAsB,CAAC,CAAC;IAClE,CAAC;IAED,IAAI,KAAK,CAAC,QAAQ,KAAK,KAAK,EAAE,CAAC;QAC7B,MAAM,IAAI,eAAe,CACvB,4BAA4B,EAC5B,2CAA2C,EAC3C,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAC7B,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,CAAC,WAAW,KAAK,WAAW,EAAE,CAAC;QACtC,MAAM,IAAI,eAAe,CACvB,4BAA4B,EAC5B,oDAAoD,EACpD,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,CACnC,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,eAAe,CACvB,4BAA4B,EAC5B,iDAAiD,CAClD,CAAC;IACJ,CAAC;IAED,KAAK,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;QACnE,eAAe,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACvC,CAAC;IAED,OAAO,KAAsC,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,6BAA6B,CAC3C,KAAc,EACd,QAA6C;IAE7C,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,eAAe,CACvB,4BAA4B,EAC5B,2CAA2C,CAC5C,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,yBAAyB,EAAE,CAAC;QAC/C,MAAM,IAAI,eAAe,CACvB,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC,CAAC,4BAA4B,EAC3E,qDAAqD,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,EAC3E,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CACzB,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAChC,aAAa,CAAC,KAAK,CAAC,OAAO,EAAE,SAAS,EAAE,yBAAyB,CAAC,CAAC;IACrE,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,eAAe,CACvB,4BAA4B,EAC5B,qDAAqD,CACtD,CAAC;IACJ,CAAC;IAED,KAAK,MAAM,CAAC,WAAW,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;QACtE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,eAAe,CACvB,4BAA4B,EAC5B,qBAAqB,WAAW,GAAG,EACnC,EAAE,QAAQ,EAAE,WAAW,EAAE,CAC1B,CAAC;QACJ,CAAC;QAED,MAAM,UAAU,GAAG,aAAa,CAC9B,QAAQ,CAAC,OAAO,EAChB,SAAS,EACT,aAAa,WAAW,GAAG,CAC5B,CAAC;QAEF,MAAM,OAAO,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;QACrC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,eAAe,CACvB,4BAA4B,EAC5B,aAAa,WAAW,iCAAiC,UAAU,GAAG,EACtE,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,UAAU,EAAE,CAC/C,CAAC;QACJ,CAAC;QAED,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAClC,MAAM,SAAS,GAAG,aAAa,CAC7B,QAAQ,CAAC,MAAM,EACf,QAAQ,EACR,aAAa,WAAW,GAAG,CAC5B,CAAC;YAEF,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;gBAChC,MAAM,IAAI,eAAe,CACvB,4BAA4B,EAC5B,aAAa,WAAW,gCAAgC,SAAS,kBAAkB,UAAU,GAAG,EAChG,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,CAClE,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,KAAyC,CAAC;AACnD,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@x12i/ai-profiles",
3
- "version": "1.2.5",
3
+ "version": "1.4.0",
4
4
  "description": "Resolve AI profile names into concrete model choices with bundled defaults and remote JSON refresh",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -63,5 +63,8 @@
63
63
  "@types/node": "^22.15.21",
64
64
  "typescript": "^5.8.3",
65
65
  "vitest": "^3.1.4"
66
+ },
67
+ "dependencies": {
68
+ "@x12i/env": "^4.0.1"
66
69
  }
67
70
  }