b3-dict 0.2.0 → 0.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.
package/README.md CHANGED
@@ -4,7 +4,7 @@ An AI-first dictionary for the terminal. Ask about English words, idioms, or usa
4
4
 
5
5
  ## Getting Started
6
6
 
7
- Needs Node 22 or newer and an API key from [OpenRouter](https://openrouter.ai/keys) or [OpenAI](https://platform.openai.com/api-keys).
7
+ Needs Node 22 or newer and an API key from [OpenRouter](https://openrouter.ai/keys), [OpenAI](https://platform.openai.com/api-keys) or [Fireworks](https://app.fireworks.ai/settings/users/api-keys).
8
8
 
9
9
  ```bash
10
10
  npm install
@@ -21,7 +21,7 @@ b3dict "draggable" --json # raw answer envelope
21
21
 
22
22
  Answers are stored in `data/b3-dict.db`, so asking the same thing twice costs nothing the second time. `.env` and `data/` live in this folder no matter where you run `b3dict` from. `settings.json` sits next to `.env` once you pick a model in the TUI. Installed from npm instead of a checkout, they move to `~/.local/share/b3-dict` (or `$XDG_DATA_HOME/b3-dict`); set `B3_DICT_HOME` to put them anywhere else.
23
23
 
24
- In the interactive screen, paste works for multiline questions. Once an answer is up: `r` asks again, `s` saves it to the wordbook, `esc` goes back, `q` quits. Press `↓` from the question box to reach History (everything you've asked) and Wordbook (what you starred); `enter` reopens a stored answer without calling the model, `s` stars or unstars the row. The same menu has Model, where you pick which model answers (it's remembered next time, unless `B3_DICT_MODEL` is set), and Help, which lists the keys and where your files are. From the empty question box, `esc` or `ctrl+c` quits.
24
+ In the interactive screen, paste works for multiline questions. Once an answer is up: `r` asks again, `s` saves it to the wordbook, `esc` goes back, `q` quits. Press `↓` from the question box to reach History (everything you've asked) and Wordbook (what you starred); `enter` reopens a stored answer without calling the model, `s` stars or unstars the row. The same menu has Model, where you pick which model answers, and which provider when both keys are in `.env` (remembered next time, unless `B3_DICT_PROVIDER` or `B3_DICT_MODEL` is set), and Help, which lists the keys and where your files are. From the empty question box, `esc` or `ctrl+c` quits.
25
25
 
26
26
  ## Development
27
27
 
package/dist/app.d.ts CHANGED
@@ -1,15 +1,20 @@
1
1
  import { type Ask, type LookupDeps } from './lib/lookup.js';
2
2
  import { type HelpPaths } from './lib/messages.js';
3
3
  import type { Settings } from './lib/settings.js';
4
- import type { Config, ConfigProblem, Result } from './lib/types.js';
4
+ import { type Config, type ConfigProblem, type Result, type Route } from './lib/types.js';
5
5
  export type Deps = Omit<LookupDeps, 'onRetry' | 'ask'> & {
6
- askFor: (model: string) => Ask;
6
+ askFor: (route: Route, model: string) => Ask;
7
7
  saveSettings: (settings: Settings) => Result<void>;
8
8
  };
9
9
  export type AppProps = {
10
10
  config: Result<Config, ConfigProblem>;
11
11
  paths: HelpPaths;
12
- pinned?: string;
12
+ routes?: Route[];
13
+ saved?: Settings;
14
+ pinned?: {
15
+ route?: string;
16
+ model?: string;
17
+ };
13
18
  deps?: Deps;
14
19
  };
15
- export declare function App({ config, paths, pinned, deps }: AppProps): import("react").JSX.Element;
20
+ export declare function App({ config, paths, routes, saved, pinned, deps }: AppProps): import("react").JSX.Element;
package/dist/app.js CHANGED
@@ -7,6 +7,7 @@ import { parseStored } from './lib/envelope.js';
7
7
  import { lookup } from './lib/lookup.js';
8
8
  import { TUI } from './lib/messages.js';
9
9
  import { init, intentFor, update } from './lib/model.js';
10
+ import { ok } from './lib/types.js';
10
11
  import { Help } from './screens/help.js';
11
12
  import { Home } from './screens/home.js';
12
13
  import { List } from './screens/list.js';
@@ -20,7 +21,7 @@ function showList(deps, which, index, notice) {
20
21
  return { type: 'listShown', which, rows: rows.data, index, ...(notice && { notice }) };
21
22
  }
22
23
  // Intents that read or write the DB. All synchronous, so each returns the message to dispatch.
23
- function perform(intent, deps) {
24
+ function perform(intent, deps, active) {
24
25
  switch (intent.type) {
25
26
  case 'openList':
26
27
  return showList(deps, intent.which, intent.index);
@@ -36,11 +37,16 @@ function perform(intent, deps) {
36
37
  ? { type: 'entryOpened', entry: row.data, answer: answer.data, origin }
37
38
  : { type: 'openFailed', query: row.data.query_text, detail: answer.error, origin };
38
39
  }
40
+ // A pick holds for this session even when it can't be saved for the next one.
39
41
  case 'pickModel': {
40
- // The pick holds for this session even when it can't be saved for the next one.
41
- const saved = deps.saveSettings({ model: intent.model });
42
+ const route = active?.route;
43
+ const saved = route ? deps.saveSettings({ route, models: { ...active.models, [route]: intent.model } }) : ok(undefined);
42
44
  return { type: 'modelPicked', model: intent.model, ...(!saved.ok && { notice: TUI.settingsSaveFailed(saved.error) }) };
43
45
  }
46
+ case 'pickRoute': {
47
+ const saved = deps.saveSettings({ route: intent.route, models: active?.models });
48
+ return { type: 'routePicked', route: intent.route, ...(!saved.ok && { notice: TUI.settingsSaveFailed(saved.error) }) };
49
+ }
44
50
  case 'toggleSave': {
45
51
  const saved = setSaved(deps.db, intent.id, intent.saved, deps.now());
46
52
  if (intent.reload) {
@@ -52,9 +58,9 @@ function perform(intent, deps) {
52
58
  }
53
59
  // The shell: one reducer holds the state, key presses become messages, and the side effects
54
60
  // (asking the model, reading lists, flipping the saved flag) happen here.
55
- export function App({ config, paths, pinned, deps }) {
61
+ export function App({ config, paths, routes, saved, pinned, deps }) {
56
62
  const { exit } = useApp();
57
- const [model, dispatch] = useReducer(update, config, init);
63
+ const [model, dispatch] = useReducer(update, undefined, () => init(config, { routes, models: saved?.models }));
58
64
  const { view } = model;
59
65
  useInput((input, key) => {
60
66
  const intent = intentFor(view, input, key);
@@ -66,22 +72,23 @@ export function App({ config, paths, pinned, deps }) {
66
72
  else if (intent.type === 'openList' ||
67
73
  intent.type === 'openEntry' ||
68
74
  intent.type === 'toggleSave' ||
69
- intent.type === 'pickModel') {
75
+ intent.type === 'pickModel' ||
76
+ intent.type === 'pickRoute') {
70
77
  if (deps)
71
- dispatch(perform(intent, deps));
78
+ dispatch(perform(intent, deps, model.active));
72
79
  }
73
80
  else {
74
81
  dispatch(intent);
75
82
  }
76
83
  });
77
84
  // The config with the model picked in this session, if any.
78
- const current = config.ok && model.active ? { ...config.data, model: model.active.model } : undefined;
85
+ const current = config.ok && model.active ? { ...config.data, route: model.active.route, model: model.active.model } : undefined;
79
86
  const request = view.screen === 'asking' ? view.request : undefined;
80
87
  useEffect(() => {
81
88
  if (!request || !current || !deps)
82
89
  return;
83
90
  const requestId = request.id;
84
- void lookup({ query: request.query, route: current.route, model: current.model, fresh: request.fresh }, { ...deps, ask: deps.askFor(current.model), onRetry: (event) => dispatch({ type: 'retrying', requestId, event }) }).then((result) => dispatch(result.ok
91
+ void lookup({ query: request.query, route: current.route, model: current.model, fresh: request.fresh }, { ...deps, ask: deps.askFor(current.route, current.model), onRetry: (event) => dispatch({ type: 'retrying', requestId, event }) }).then((result) => dispatch(result.ok
85
92
  ? { type: 'answered', requestId, outcome: result.data }
86
93
  : { type: 'failed', requestId, failure: result.error }));
87
94
  // One lookup per request id. The request object is recreated on every render, deps never
package/dist/app.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.tsx"],"names":[],"mappings":"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"}
package/dist/cli.js CHANGED
@@ -4,7 +4,7 @@ import { setTimeout as sleep } from 'node:timers/promises';
4
4
  import { nanoid } from 'nanoid';
5
5
  import { parseCommand } from './lib/args.js';
6
6
  import { createAsk } from './lib/ask.js';
7
- import { resolveConfig } from './lib/config.js';
7
+ import { keyFor, resolveConfig, routesWithKeys } from './lib/config.js';
8
8
  import { openDb } from './lib/db.js';
9
9
  import { lookup } from './lib/lookup.js';
10
10
  import { CLI, configProblemText, failureText, HELP, retryText, TUI } from './lib/messages.js';
@@ -43,9 +43,9 @@ async function main(argv) {
43
43
  const settings = readSettings(SETTINGS_PATH);
44
44
  if (!settings.ok)
45
45
  warn(CLI.settingsIgnored(SETTINGS_PATH, settings.error));
46
- const saved = settings.ok ? settings.data.model : undefined;
46
+ const saved = settings.ok ? settings.data : {};
47
47
  return command.data.mode === 'tui'
48
- ? runTui(resolveConfig(process.env, undefined, saved))
48
+ ? runTui(resolveConfig(process.env, undefined, saved), saved)
49
49
  : runOneShot(command.data, resolveConfig(process.env, command.data.model, saved));
50
50
  }
51
51
  async function runOneShot({ query, fresh, json, model }, config) {
@@ -74,7 +74,7 @@ async function runOneShot({ query, fresh, json, model }, config) {
74
74
  db.data.close();
75
75
  }
76
76
  }
77
- async function runTui(config) {
77
+ async function runTui(config, saved) {
78
78
  if (!process.stdin.isTTY) {
79
79
  warn(`✗ ${TUI.needsTerminal}`);
80
80
  return EXIT.usage;
@@ -89,14 +89,20 @@ async function runTui(config) {
89
89
  const deps = config.ok && db?.ok
90
90
  ? {
91
91
  ...depsFor(config.data, db.data),
92
- askFor: (model) => createAsk({ ...config.data, model }),
92
+ // The picker only offers routes that have a key, so keyFor always finds one here.
93
+ askFor: (route, model) => createAsk({ route, model, apiKey: keyFor(process.env, route) ?? config.data.apiKey }),
93
94
  saveSettings: (settings) => writeSettings(SETTINGS_PATH, settings),
94
95
  }
95
96
  : undefined;
96
97
  const app = render(createElement(App, {
97
98
  config,
98
99
  paths: { env: ENV_PATH, settings: SETTINGS_PATH, db: DB_PATH },
99
- pinned: process.env.B3_DICT_MODEL?.trim() || undefined,
100
+ routes: routesWithKeys(process.env),
101
+ saved,
102
+ pinned: {
103
+ route: process.env.B3_DICT_PROVIDER?.trim() || undefined,
104
+ model: process.env.B3_DICT_MODEL?.trim() || undefined,
105
+ },
100
106
  deps,
101
107
  }));
102
108
  await app.waitUntilExit();
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.tsx"],"names":[],"mappings":"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"}
package/dist/lib/ask.js CHANGED
@@ -1,3 +1,4 @@
1
+ import { createFireworks } from '@ai-sdk/fireworks';
1
2
  import { createOpenAI } from '@ai-sdk/openai';
2
3
  import { createOpenRouter } from '@openrouter/ai-sdk-provider';
3
4
  import { generateText, Output } from 'ai';
@@ -21,6 +22,8 @@ const SYSTEM = [
21
22
  function modelFor({ route, model, apiKey }) {
22
23
  if (route === 'openai')
23
24
  return createOpenAI({ apiKey })(model);
25
+ if (route === 'fireworks')
26
+ return createFireworks({ apiKey })(model);
24
27
  const openrouter = createOpenRouter({ apiKey });
25
28
  // OpenAI's endpoints on OpenRouter refuse to run with reasoning off (HTTP 400), and their models
26
29
  // already fit the output cap, so they get no reasoning option.
@@ -1 +1 @@
1
- {"version":3,"file":"ask.js","sourceRoot":"","sources":["../../src/lib/ask.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,GAAG,EAAE,EAAE,EAAe,MAAM,YAAY,CAAC;AAElD,kFAAkF;AAClF,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAC;AACtC,MAAM,UAAU,GAAG,MAAM,CAAC;AAE1B,6EAA6E;AAC7E,MAAM,MAAM,GAAG;IACb,4DAA4D;IAC5D,mHAAmH;IACnH,8CAA8C;IAC9C,kGAAkG;IAClG,mDAAmD;IACnD,8FAA8F;IAC9F,uIAAuI;IACvI,iMAAiM;CAClM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb,SAAS,QAAQ,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAU;IAChD,IAAI,KAAK,KAAK,QAAQ;QAAE,OAAO,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;IAC/D,MAAM,UAAU,GAAG,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IAChD,iGAAiG;IACjG,+DAA+D;IAC/D,IAAI,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC;IAC1D,iGAAiG;IACjG,wGAAwG;IACxG,OAAO,UAAU,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;AAC9E,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,SAAS,CAAC,MAAc;IACtC,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC/B,OAAO,KAAK,EAAE,KAAK,EAAE,EAAE;QACrB,IAAI,CAAC;YACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,YAAY,CAAC;gBACpC,KAAK;gBACL,MAAM,EAAE,MAAM;gBACd,MAAM,EAAE,KAAK;gBACb,eAAe,EAAE,iBAAiB;gBAClC,UAAU,EAAE,CAAC;gBACb,WAAW,EAAE,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC;gBAC5C,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;aAClD,CAAC,CAAC;YACH,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC;QACpB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"ask.js","sourceRoot":"","sources":["../../src/lib/ask.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,GAAG,EAAE,EAAE,EAAe,MAAM,YAAY,CAAC;AAElD,kFAAkF;AAClF,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAC;AACtC,MAAM,UAAU,GAAG,MAAM,CAAC;AAE1B,6EAA6E;AAC7E,MAAM,MAAM,GAAG;IACb,4DAA4D;IAC5D,mHAAmH;IACnH,8CAA8C;IAC9C,kGAAkG;IAClG,mDAAmD;IACnD,8FAA8F;IAC9F,uIAAuI;IACvI,iMAAiM;CAClM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb,SAAS,QAAQ,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAU;IAChD,IAAI,KAAK,KAAK,QAAQ;QAAE,OAAO,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;IAC/D,IAAI,KAAK,KAAK,WAAW;QAAE,OAAO,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;IACrE,MAAM,UAAU,GAAG,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IAChD,iGAAiG;IACjG,+DAA+D;IAC/D,IAAI,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC;IAC1D,iGAAiG;IACjG,wGAAwG;IACxG,OAAO,UAAU,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;AAC9E,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,SAAS,CAAC,MAAc;IACtC,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC/B,OAAO,KAAK,EAAE,KAAK,EAAE,EAAE;QACrB,IAAI,CAAC;YACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,YAAY,CAAC;gBACpC,KAAK;gBACL,MAAM,EAAE,MAAM;gBACd,MAAM,EAAE,KAAK;gBACb,eAAe,EAAE,iBAAiB;gBAClC,UAAU,EAAE,CAAC;gBACb,WAAW,EAAE,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC;gBAC5C,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;aAClD,CAAC,CAAC;YACH,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC;QACpB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
@@ -1,8 +1,11 @@
1
+ import type { Settings } from './settings.js';
1
2
  import { type Config, type ConfigProblem, type Result, type Route } from './types.js';
2
3
  export declare const DEFAULT_MODEL: Record<Route, string>;
3
4
  export declare const MODEL_CHOICES: Record<Route, readonly string[]>;
4
5
  type Env = Record<string, string | undefined>;
5
6
  export declare function checkModel(route: Route, id: string): Result<string, ConfigProblem>;
6
- export declare function resolveConfig(env: Env, modelFlag?: string, saved?: string): Result<Config, ConfigProblem>;
7
+ export declare const keyFor: (env: Env, route: Route) => string | undefined;
8
+ export declare const routesWithKeys: (env: Env) => Route[];
9
+ export declare function resolveConfig(env: Env, modelFlag?: string, saved?: Settings): Result<Config, ConfigProblem>;
7
10
  export declare const keyVarFor: (route: Route) => string;
8
11
  export {};
@@ -2,42 +2,56 @@ import { err, ok, ROUTES } from './types.js';
2
2
  export const DEFAULT_MODEL = {
3
3
  openrouter: 'qwen/qwen3-235b-a22b-2507',
4
4
  openai: 'gpt-5-mini',
5
+ fireworks: 'accounts/fireworks/models/minimax-m3',
5
6
  };
6
7
  // What the TUI's model picker offers, default first. Every one has answered a real lookup.
7
8
  export const MODEL_CHOICES = {
8
9
  openrouter: [DEFAULT_MODEL.openrouter, 'qwen/qwen3-30b-a3b-instruct-2507', 'z-ai/glm-4.6', 'openai/gpt-5-mini'],
9
10
  openai: [DEFAULT_MODEL.openai],
11
+ fireworks: [DEFAULT_MODEL.fireworks, 'accounts/fireworks/models/deepseek-v4p1-flash', 'accounts/fireworks/models/kimi-k3'],
10
12
  };
11
13
  const KEY_VAR = {
12
14
  openrouter: 'OPENROUTER_API_KEY',
13
15
  openai: 'OPENAI_API_KEY',
16
+ fireworks: 'FIREWORKS_API_KEY',
14
17
  };
18
+ const FIREWORKS_MODELS = 'accounts/fireworks/models/';
15
19
  const read = (env, name) => env[name]?.trim() || undefined;
16
20
  const isRoute = (value) => ROUTES.includes(value);
17
- // A model id as the route will serve it. A slash id is an OpenRouter id; a bare name resolves on
18
- // whichever route is active, so on OpenRouter it means OpenAI's model of that name.
21
+ // A model id as the route will serve it. A slash id is an OpenRouter id, unless it starts with
22
+ // `accounts/`, which is how Fireworks names its models and routers. A bare name resolves on
23
+ // whichever route is active: on OpenRouter it means OpenAI's model of that name, on Fireworks the
24
+ // model of that name in Fireworks' own account.
19
25
  export function checkModel(route, id) {
20
26
  const model = id.trim();
21
- if (model.includes('/')) {
22
- return route === 'openrouter' ? ok(model) : err({ code: 'model-needs-openrouter', model });
27
+ const mismatch = err({ code: 'model-not-on-route', route, model });
28
+ if (route === 'fireworks') {
29
+ if (model.startsWith('accounts/'))
30
+ return ok(model);
31
+ return model.includes('/') ? mismatch : ok(`${FIREWORKS_MODELS}${model}`);
23
32
  }
24
- return ok(route === 'openrouter' ? `openai/${model}` : model);
33
+ if (!model.includes('/'))
34
+ return ok(route === 'openrouter' ? `openai/${model}` : model);
35
+ return route === 'openrouter' ? ok(model) : mismatch;
25
36
  }
26
- // Which model wins: the one-shot --model, then B3_DICT_MODEL, then the model picked in the TUI
27
- // (saved), then the route's default. A saved model the route can't serve is skipped, not an error:
28
- // the user didn't ask for it on this run.
29
- export function resolveConfig(env, modelFlag, saved) {
30
- const keys = {
31
- openrouter: read(env, KEY_VAR.openrouter),
32
- openai: read(env, KEY_VAR.openai),
33
- };
34
- if (!keys.openrouter && !keys.openai)
37
+ export const keyFor = (env, route) => read(env, KEY_VAR[route]);
38
+ // The routes a lookup could go to right now, in auto-detect order.
39
+ export const routesWithKeys = (env) => ROUTES.filter((route) => keyFor(env, route));
40
+ // Which route wins: B3_DICT_PROVIDER, then the route picked in the TUI (saved) when its key is
41
+ // there, then the first route that has a key (OpenRouter, OpenAI, Fireworks).
42
+ // Which model wins: the one-shot --model, then B3_DICT_MODEL, then the model picked in the TUI for
43
+ // that route (saved), then the route's default. Saved choices the keys or the route can't serve
44
+ // are skipped, not errors: the user didn't ask for them on this run.
45
+ export function resolveConfig(env, modelFlag, saved = {}) {
46
+ const [detected] = routesWithKeys(env);
47
+ if (!detected)
35
48
  return err({ code: 'no-key' });
36
49
  const forced = read(env, 'B3_DICT_PROVIDER')?.toLowerCase();
37
50
  if (forced !== undefined && !isRoute(forced))
38
51
  return err({ code: 'bad-provider', value: forced });
39
- const route = forced ?? (keys.openrouter ? 'openrouter' : 'openai');
40
- const apiKey = keys[route];
52
+ const picked = saved.route && keyFor(env, saved.route) ? saved.route : undefined;
53
+ const route = forced ?? picked ?? detected;
54
+ const apiKey = keyFor(env, route);
41
55
  if (!apiKey)
42
56
  return err({ code: 'route-key-missing', route });
43
57
  const requested = modelFlag?.trim() || read(env, 'B3_DICT_MODEL');
@@ -45,7 +59,7 @@ export function resolveConfig(env, modelFlag, saved) {
45
59
  const model = checkModel(route, requested);
46
60
  return model.ok ? ok({ route, apiKey, model: model.data }) : model;
47
61
  }
48
- const remembered = saved?.trim() ? checkModel(route, saved) : undefined;
62
+ const remembered = saved.models?.[route]?.trim() ? checkModel(route, saved.models[route]) : undefined;
49
63
  return ok({ route, apiKey, model: remembered?.ok ? remembered.data : DEFAULT_MODEL[route] });
50
64
  }
51
65
  export const keyVarFor = (route) => KEY_VAR[route];
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import type { Origin } from './model.js';
2
2
  import type { RetryEvent } from './policy.js';
3
- import type { Config, ConfigProblem, Failure, Route } from './types.js';
3
+ import { type Config, type ConfigProblem, type Failure, type Route } from './types.js';
4
4
  export declare const KEY_URL: Record<Route, string>;
5
5
  export declare const HELP = "B3 Dict \u2014 h\u1ECFi v\u1EC1 t\u1EEB, th\u00E0nh ng\u1EEF, c\u00E1ch d\u00F9ng ti\u1EBFng Anh; tr\u1EA3 l\u1EDDi b\u1EB1ng ti\u1EBFng Vi\u1EC7t.\n\nC\u00E1ch d\u00F9ng:\n b3dict m\u1EDF giao di\u1EC7n h\u1ECFi \u0111\u00E1p\n b3dict \"<c\u00E2u h\u1ECFi>\" [tu\u1EF3 ch\u1ECDn] h\u1ECFi m\u1ED9t l\u1EA7n r\u1ED3i tho\u00E1t\n\nV\u00ED d\u1EE5:\n b3dict \"take for granted\"\n b3dict \"Is draggable an English word?\"\n b3dict \"pragmatic\" --model z-ai/glm-4.6\n\nTu\u1EF3 ch\u1ECDn:\n --fresh b\u1ECF qua \u0111\u00E1p \u00E1n \u0111\u00E3 l\u01B0u, h\u1ECFi l\u1EA1i model\n --model <id> d\u00F9ng model n\u00E0y cho m\u1ED9t l\u1EA7n h\u1ECFi (lu\u00F4n h\u1ECFi l\u1EA1i model)\n --json in nguy\u00EAn answer envelope d\u1EA1ng JSON\n -h, --help hi\u1EC7n tr\u1EE3 gi\u00FAp\n -V, --version hi\u1EC7n phi\u00EAn b\u1EA3n\n\nM\u00E3 tho\u00E1t:\n 0 th\u00E0nh c\u00F4ng \u00B7 1 l\u1ED7i kh\u00F4ng r\u00F5 \u00B7 2 l\u1ED7i c\u00E1ch d\u00F9ng\n 3 l\u1ED7i c\u1EA5u h\u00ECnh (key, provider, model) \u00B7 4 l\u1ED7i provider";
6
6
  export declare const CLI: {
@@ -64,10 +64,12 @@ export declare const TUI: {
64
64
  readonly modelNotes: Record<string, string>;
65
65
  readonly modelInUse: "✓ đang dùng";
66
66
  readonly customRow: "Khác: gõ id model…";
67
- readonly customExample: "Id trên OpenRouter, ví dụ z-ai/glm-4.6. Tên trần như gpt-5-nano là model của OpenAI.";
68
- readonly customRejected: (model: string) => string;
69
- readonly pinned: (model: string) => string;
67
+ readonly customExample: (route: Route) => "Tên model trên Fireworks, ví dụ deepseek-v4p1-flash. Id đầy đủ bắt đầu bằng accounts/ cũng được." | "Id trên OpenRouter, ví dụ z-ai/glm-4.6. Tên trần như gpt-5-nano là model của OpenAI.";
68
+ readonly customRejected: (route: Route, model: string) => string;
69
+ readonly pinned: (name: string, value: string) => string;
70
+ readonly providerLabel: "Provider";
70
71
  readonly pickerHints: "↑↓ chọn · enter dùng · esc về home · q thoát";
72
+ readonly providerHints: "←→ hoặc enter đổi provider · ↓ chọn model · esc về home · q thoát";
71
73
  readonly customHints: "enter dùng · esc huỷ";
72
74
  readonly settingsSaveFailed: (detail: string) => string;
73
75
  readonly helpHeading: "Help";
@@ -1,8 +1,10 @@
1
1
  import { keyVarFor } from './config.js';
2
+ import { ROUTES } from './types.js';
2
3
  // Vietnamese chrome for both surfaces, so they say the same thing. Nothing user-facing lives elsewhere.
3
4
  export const KEY_URL = {
4
5
  openrouter: 'https://openrouter.ai/keys',
5
6
  openai: 'https://platform.openai.com/api-keys',
7
+ fireworks: 'https://app.fireworks.ai/settings/users/api-keys',
6
8
  };
7
9
  export const HELP = `B3 Dict — hỏi về từ, thành ngữ, cách dùng tiếng Anh; trả lời bằng tiếng Việt.
8
10
 
@@ -77,13 +79,19 @@ export const TUI = {
77
79
  modelHeading: 'Model',
78
80
  modelInstruction: 'Model trả lời các câu hỏi sau. Đáp án đã lưu vẫn dùng lại; r để hỏi lại bằng model mới.',
79
81
  modelDefault: 'mặc định',
80
- modelNotes: { 'qwen/qwen3-30b-a3b-instruct-2507': 'nhanh' },
82
+ modelNotes: { 'qwen/qwen3-30b-a3b-instruct-2507': 'nhanh', 'accounts/fireworks/models/kimi-k3': 'chậm' },
81
83
  modelInUse: '✓ đang dùng',
82
84
  customRow: 'Khác: gõ id model…',
83
- customExample: 'Id trên OpenRouter, ví dụ z-ai/glm-4.6. Tên trần như gpt-5-nano là model của OpenAI.',
84
- customRejected: (model) => `✗ ${model} là id của OpenRouter, mà b3dict đang chạy route OpenAI. Dùng tên model của OpenAI như gpt-5-mini.`,
85
- pinned: (model) => `B3_DICT_MODEL=${model} đang đặt, nên lần mở sau b3dict vẫn dùng ${model}.`,
85
+ customExample: (route) => route === 'fireworks'
86
+ ? 'Tên model trên Fireworks, ví dụ deepseek-v4p1-flash. Id đầy đủ bắt đầu bằng accounts/ cũng được.'
87
+ : 'Id trên OpenRouter, ví dụ z-ai/glm-4.6. Tên trần như gpt-5-nano là model của OpenAI.',
88
+ customRejected: (route, model) => route === 'fireworks'
89
+ ? `✗ ${model} không phải id của Fireworks. Dùng tên trần như minimax-m3, hoặc id đầy đủ bắt đầu bằng accounts/.`
90
+ : `✗ ${model} là id của OpenRouter, mà b3dict đang chạy route OpenAI. Dùng tên model của OpenAI như gpt-5-mini.`,
91
+ pinned: (name, value) => `${name}=${value} đang đặt, nên lần mở sau b3dict vẫn dùng ${value}.`,
92
+ providerLabel: 'Provider',
86
93
  pickerHints: '↑↓ chọn · enter dùng · esc về home · q thoát',
94
+ providerHints: '←→ hoặc enter đổi provider · ↓ chọn model · esc về home · q thoát',
87
95
  customHints: 'enter dùng · esc huỷ',
88
96
  settingsSaveFailed: (detail) => `✗ Không lưu được lựa chọn, model chỉ đổi cho lần này: ${detail}`,
89
97
  helpHeading: 'Help',
@@ -121,10 +129,11 @@ export const helpSections = (paths) => [
121
129
  {
122
130
  title: 'Cấu hình',
123
131
  rows: [
124
- ['OPENROUTER_API_KEY', 'key OpenRouter, được ưu tiên khi có cả hai'],
132
+ ['OPENROUTER_API_KEY', 'key OpenRouter, được ưu tiên khi có nhiều key'],
125
133
  ['OPENAI_API_KEY', 'key OpenAI'],
134
+ ['FIREWORKS_API_KEY', 'key Fireworks'],
126
135
  ['B3_DICT_MODEL', 'ép model, thắng lựa chọn trong Model'],
127
- ['B3_DICT_PROVIDER', 'openrouter hoặc openai'],
136
+ ['B3_DICT_PROVIDER', `ép provider (${ROUTES.join(', ')}), thắng lựa chọn trong Model`],
128
137
  ['B3_DICT_HOME', 'thư mục chứa .env, settings.json, data/ (đặt ngoài .env)'],
129
138
  ],
130
139
  },
@@ -138,7 +147,8 @@ export const helpSections = (paths) => [
138
147
  },
139
148
  ];
140
149
  const setupSteps = (envPath) => `1. Tạo key: ${KEY_URL.openrouter}
141
- (hoặc ${KEY_URL.openai})
150
+ (hoặc ${KEY_URL.openai}
151
+ hoặc ${KEY_URL.fireworks})
142
152
  2. echo "OPENROUTER_API_KEY=sk-or-…" >> ${envPath}
143
153
  3. Chạy lại b3dict`;
144
154
  export function configProblemText(problem, envPath) {
@@ -146,7 +156,7 @@ export function configProblemText(problem, envPath) {
146
156
  case 'no-key':
147
157
  return `✗ Không tìm thấy API key
148
158
 
149
- B3 Dict cần OPENROUTER_API_KEY hoặc OPENAI_API_KEY trong ${envPath}
159
+ B3 Dict cần OPENROUTER_API_KEY, OPENAI_API_KEY hoặc FIREWORKS_API_KEY trong ${envPath}
150
160
 
151
161
  ${setupSteps(envPath)}`;
152
162
  case 'route-key-missing':
@@ -157,8 +167,14 @@ hoặc bỏ B3_DICT_PROVIDER để tự chọn route theo key đang có.`;
157
167
  case 'bad-provider':
158
168
  return `✗ B3_DICT_PROVIDER=${problem.value} không hợp lệ
159
169
 
160
- Chỉ nhận: openrouter hoặc openai.`;
161
- case 'model-needs-openrouter':
170
+ Chỉ nhận: ${ROUTES.join(', ')}.`;
171
+ case 'model-not-on-route':
172
+ if (problem.route === 'fireworks') {
173
+ return `✗ Model ${problem.model} không chạy được trên route Fireworks
174
+
175
+ Trên Fireworks, dùng tên trần như minimax-m3 hoặc id đầy đủ bắt đầu bằng accounts/.
176
+ Id kiểu ${problem.model} là của OpenRouter: đặt B3_DICT_PROVIDER=openrouter để dùng nó.`;
177
+ }
162
178
  return `✗ Model ${problem.model} cần route OpenRouter
163
179
 
164
180
  Tên model có dấu "/" là id của OpenRouter. Thêm OPENROUTER_API_KEY vào ${envPath}
@@ -1 +1 @@
1
- {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/lib/messages.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/lib/messages.ts"],"names":[],"mappings":"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"}
@@ -50,17 +50,21 @@ export type View = {
50
50
  } | {
51
51
  screen: 'model';
52
52
  route: Route;
53
+ routes: Route[];
53
54
  rows: string[];
54
55
  current: string;
55
56
  index: number;
56
57
  draft?: Draft;
57
58
  rejected?: string;
59
+ notice?: string;
58
60
  } | {
59
61
  screen: 'help';
60
62
  };
61
63
  export type Active = {
62
64
  route: Route;
63
65
  model: string;
66
+ routes: Route[];
67
+ models: Partial<Record<Route, string>>;
64
68
  };
65
69
  export type Model = {
66
70
  requests: number;
@@ -139,6 +143,10 @@ export type Msg = {
139
143
  type: 'modelPicked';
140
144
  model: string;
141
145
  notice?: string;
146
+ } | {
147
+ type: 'routePicked';
148
+ route: Route;
149
+ notice?: string;
142
150
  } | {
143
151
  type: 'helpShown';
144
152
  } | {
@@ -163,14 +171,22 @@ export type Intent = Msg | {
163
171
  } | {
164
172
  type: 'pickModel';
165
173
  model: string;
174
+ } | {
175
+ type: 'pickRoute';
176
+ route: Route;
166
177
  };
167
178
  export type Key = Partial<Record<'return' | 'escape' | 'backspace' | 'delete' | 'leftArrow' | 'rightArrow' | 'upArrow' | 'downArrow' | 'ctrl' | 'meta', boolean>>;
179
+ type Choices = {
180
+ routes?: Route[];
181
+ models?: Partial<Record<Route, string>>;
182
+ };
168
183
  export declare function init(config: {
169
184
  ok: true;
170
185
  data: Pick<Config, 'route' | 'model'>;
171
186
  } | {
172
187
  ok: false;
173
188
  error: ConfigProblem;
174
- }): Model;
189
+ }, { routes, models }?: Choices): Model;
175
190
  export declare function update(model: Model, msg: Msg): Model;
176
191
  export declare function intentFor(view: View, input: string, key: Key): Intent | null;
192
+ export {};
package/dist/lib/model.js CHANGED
@@ -1,11 +1,12 @@
1
- import { checkModel, MODEL_CHOICES } from './config.js';
1
+ import { checkModel, DEFAULT_MODEL, MODEL_CHOICES } from './config.js';
2
2
  const FOCUS_ORDER = ['input', 'history', 'wordbook', 'model', 'help'];
3
3
  const EMPTY_DRAFT = { text: '', cursor: 0 };
4
4
  const HOME = { screen: 'home', draft: EMPTY_DRAFT, focus: 'input' };
5
- export function init(config) {
5
+ export function init(config, { routes, models } = {}) {
6
6
  if (!config.ok)
7
7
  return { requests: 0, view: { screen: 'setup', problem: config.error } };
8
- return { requests: 0, active: { route: config.data.route, model: config.data.model }, view: HOME };
8
+ const { route, model } = config.data;
9
+ return { requests: 0, active: { route, model, routes: routes ?? [route], models: { ...models, [route]: model } }, view: HOME };
9
10
  }
10
11
  // A paste arrives as one chunk: keep its line breaks, drop anything that isn't text.
11
12
  const clean = (text) => text
@@ -32,10 +33,10 @@ function editDraft(draft, msg) {
32
33
  }
33
34
  }
34
35
  // The picker opens on the model in use, which gets a row of its own when it isn't a choice.
35
- function picker({ route, model }) {
36
+ function picker({ route, model, routes }, onProvider = false) {
36
37
  const choices = MODEL_CHOICES[route];
37
38
  const rows = choices.includes(model) ? [...choices] : [...choices, model];
38
- return { screen: 'model', route, rows, current: model, index: rows.indexOf(model) };
39
+ return { screen: 'model', route, routes, rows, current: model, index: onProvider ? -1 : rows.indexOf(model) };
39
40
  }
40
41
  function ask(model, query, fresh, origin) {
41
42
  const id = model.requests + 1;
@@ -108,21 +109,33 @@ export function update(model, msg) {
108
109
  case 'modelShown':
109
110
  return view.screen === 'home' && model.active ? to(picker(model.active)) : model;
110
111
  case 'pickerMoved':
111
- return view.screen === 'model' && !view.draft ? to({ ...view, index: clamp(view.index + msg.by, view.rows.length) }) : model;
112
+ if (view.screen !== 'model' || view.draft)
113
+ return model;
114
+ return to({ ...view, index: Math.max(view.routes.length > 1 ? -1 : 0, Math.min(view.rows.length, view.index + msg.by)) });
112
115
  case 'customStarted':
113
116
  return view.screen === 'model' ? to({ ...view, index: view.rows.length, draft: EMPTY_DRAFT }) : model;
114
117
  case 'customCancelled':
115
118
  return view.screen === 'model' ? to({ ...view, draft: undefined, rejected: undefined }) : model;
116
119
  case 'customRejected':
117
120
  return view.screen === 'model' ? to({ ...view, rejected: msg.model }) : model;
118
- case 'modelPicked':
121
+ case 'modelPicked': {
119
122
  if (!model.active)
120
123
  return model;
124
+ const { route, models } = model.active;
121
125
  return {
122
126
  ...model,
123
- active: { ...model.active, model: msg.model },
127
+ active: { ...model.active, model: msg.model, models: { ...models, [route]: msg.model } },
124
128
  view: { ...HOME, focus: 'model', ...(msg.notice && { notice: msg.notice }) },
125
129
  };
130
+ }
131
+ case 'routePicked': {
132
+ if (!model.active)
133
+ return model;
134
+ // The picker stays open on the Provider row, now listing the new route's models.
135
+ const active = { ...model.active, route: msg.route, model: model.active.models[msg.route] ?? DEFAULT_MODEL[msg.route] };
136
+ const next = picker(active, true);
137
+ return { ...model, active, view: msg.notice && next.screen === 'model' ? { ...next, notice: msg.notice } : next };
138
+ }
126
139
  case 'helpShown':
127
140
  return view.screen === 'home' ? to({ screen: 'help' }) : model;
128
141
  case 'back':
@@ -232,6 +245,10 @@ export function intentFor(view, input, key) {
232
245
  return { type: 'pickerMoved', by: 1 };
233
246
  if (key.escape)
234
247
  return { type: 'back' };
248
+ if (view.index === -1 && (key.return || key.leftArrow || key.rightArrow)) {
249
+ const step = key.leftArrow ? view.routes.length - 1 : 1;
250
+ return { type: 'pickRoute', route: view.routes[(view.routes.indexOf(view.route) + step) % view.routes.length] };
251
+ }
235
252
  if (key.return) {
236
253
  const row = view.rows[view.index];
237
254
  return row ? { type: 'pickModel', model: row } : { type: 'customStarted' };
@@ -1 +1 @@
1
- {"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/lib/model.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/lib/model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAiBvE,MAAM,WAAW,GAAY,CAAC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AA8E/E,MAAM,WAAW,GAAU,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;AACnD,MAAM,IAAI,GAAsC,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AAIvG,MAAM,UAAU,IAAI,CAClB,MAAiG,EACjG,EAAE,MAAM,EAAE,MAAM,KAAc,EAAE;IAEhC,IAAI,CAAC,MAAM,CAAC,EAAE;QAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC;IACzF,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;IACrC,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,EAAE,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACjI,CAAC;AAED,qFAAqF;AACrF,MAAM,KAAK,GAAG,CAAC,IAAY,EAAU,EAAE,CACrC,IAAI;KACD,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC;KACvB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;IACpB,4CAA4C;KAC3C,OAAO,CAAC,qCAAqC,EAAE,EAAE,CAAC,CAAC;AAExD,MAAM,KAAK,GAAG,CAAC,KAAa,EAAE,GAAW,EAAU,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;AAExF,SAAS,SAAS,CAAC,KAAY,EAAE,GAAQ;IACvC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IAC/B,QAAQ,GAAG,CAAC,IAAI,EAAE,CAAC;QACjB,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC9B,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;QACrG,CAAC;QACD,KAAK,QAAQ;YACX,OAAO,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7G,KAAK,OAAO;YACV,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QAC/D,KAAK,SAAS;YACZ,OAAO,WAAW,CAAC;QACrB;YACE,OAAO,KAAK,CAAC;IACjB,CAAC;AACH,CAAC;AAED,4FAA4F;AAC5F,SAAS,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAU,EAAE,UAAU,GAAG,KAAK;IAClE,MAAM,OAAO,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IACrC,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,CAAC,CAAC;IAC1E,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;AAChH,CAAC;AAED,SAAS,GAAG,CAAC,KAAY,EAAE,KAAa,EAAE,KAAc,EAAE,MAAe;IACvE,MAAM,EAAE,GAAG,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC;IAC9B,OAAO,EAAE,GAAG,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,GAAG,CAAC,MAAM,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;AAC1H,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,KAAY,EAAE,GAAQ;IAC3C,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC;IACvB,MAAM,EAAE,GAAG,CAAC,IAAU,EAAS,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7D,sEAAsE;IACtE,MAAM,OAAO,GAAG,CAAC,SAAiB,EAAW,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,SAAS,CAAC;IAE1G,QAAQ,GAAG,CAAC,IAAI,EAAE,CAAC;QACjB,KAAK,OAAO,CAAC;QACb,KAAK,QAAQ,CAAC;QACd,KAAK,OAAO,CAAC;QACb,KAAK,SAAS;YACZ,IAAI,IAAI,CAAC,MAAM,KAAK,OAAO,IAAI,IAAI,CAAC,KAAK;gBAAE,OAAO,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC;YAC1H,OAAO,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAE7F,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM;gBAAE,OAAO,KAAK,CAAC;YACzC,MAAM,EAAE,GAAG,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,EAAE,EAAE,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACnF,OAAO,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,WAAW,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACjD,CAAC;QAED,KAAK,YAAY;YACf,OAAO,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAE1E,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,IAAI,IAAI,CAAC,KAAK,KAAK,OAAO;gBAAE,OAAO,KAAK,CAAC;YACnE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACrC,OAAO,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QACzD,CAAC;QAED,KAAK,WAAW;YACd,OAAO,EAAE,CAAC;gBACR,MAAM,EAAE,MAAM;gBACd,KAAK,EAAE,GAAG,CAAC,KAAK;gBAChB,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBACzD,GAAG,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC;aAC1C,CAAC,CAAC;QAEL,KAAK,WAAW;YACd,OAAO,IAAI,CAAC,MAAM,KAAK,MAAM;gBAC3B,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;gBACvF,CAAC,CAAC,KAAK,CAAC;QAEZ,KAAK,aAAa;YAChB,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;QAEvI,KAAK,YAAY;YACf,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;QAE7I,KAAK,UAAU;YACb,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAExG,KAAK,UAAU;YACb,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;gBACvD,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC;gBAClH,CAAC,CAAC,KAAK,CAAC;QAEZ,KAAK,QAAQ;YACX,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;gBACvD,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC;gBACnJ,CAAC,CAAC,KAAK,CAAC;QAEZ,KAAK,SAAS;YACZ,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ;gBAAE,OAAO,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YAC/E,gFAAgF;YAChF,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE;gBAAE,OAAO,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YACjH,OAAO,KAAK,CAAC;QAEf,KAAK,YAAY;YACf,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAEjG,KAAK,YAAY;YACf,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAEhF,KAAK,YAAY;YACf,OAAO,IAAI,CAAC,MAAM,KAAK,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAEnF,KAAK,aAAa;YAChB,IAAI,IAAI,CAAC,MAAM,KAAK,OAAO,IAAI,IAAI,CAAC,KAAK;gBAAE,OAAO,KAAK,CAAC;YACxD,OAAO,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;QAE5H,KAAK,eAAe;YAClB,OAAO,IAAI,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAExG,KAAK,iBAAiB;YACpB,OAAO,IAAI,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAElG,KAAK,gBAAgB;YACnB,OAAO,IAAI,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAEhF,KAAK,aAAa,CAAC,CAAC,CAAC;YACnB,IAAI,CAAC,KAAK,CAAC,MAAM;gBAAE,OAAO,KAAK,CAAC;YAChC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC;YACvC,OAAO;gBACL,GAAG,KAAK;gBACR,MAAM,EAAE,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,KAAK,EAAE,EAAE;gBACxF,IAAI,EAAE,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE;aAC7E,CAAC;QACJ,CAAC;QAED,KAAK,aAAa,CAAC,CAAC,CAAC;YACnB,IAAI,CAAC,KAAK,CAAC,MAAM;gBAAE,OAAO,KAAK,CAAC;YAChC,iFAAiF;YACjF,MAAM,MAAM,GAAG,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACxH,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAClC,OAAO,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACpH,CAAC;QAED,KAAK,WAAW;YACd,OAAO,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAEjE,KAAK,MAAM;YACT,8FAA8F;YAC9F,IAAI,IAAI,CAAC,MAAM,KAAK,OAAO;gBAAE,OAAO,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;YACpE,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM;gBAAE,OAAO,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;YAClE,OAAO,IAAI,CAAC,MAAM,KAAK,OAAO,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;IAChF,CAAC;AACH,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAAU,EAAE,KAAa,EAAE,GAAQ;IAC3D,mEAAmE;IACnE,MAAM,IAAI,GAAG,CAAC,MAAe,EAAU,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IAExG,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC;QACpB,KAAK,MAAM;YACT,IAAI,IAAI,CAAC,KAAK,KAAK,OAAO,EAAE,CAAC;gBAC3B,IAAI,GAAG,CAAC,OAAO;oBAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC;gBACpD,IAAI,GAAG,CAAC,SAAS;oBAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;gBACrD,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;oBACf,IAAI,IAAI,CAAC,KAAK,KAAK,OAAO;wBAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;oBAC1D,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM;wBAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;oBACxD,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;gBAC3D,CAAC;gBACD,IAAI,GAAG,CAAC,MAAM;oBAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;gBAC9C,OAAO,KAAK,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YACjD,CAAC;YACD,IAAI,GAAG,CAAC,MAAM;gBAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;YAC7C,IAAI,GAAG,CAAC,SAAS;gBAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;YACrD,IAAI,GAAG,CAAC,MAAM;gBAAE,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;YACvF,sEAAsE;YACtE,IAAI,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,MAAM;gBAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;YAC3D,IAAI,GAAG,CAAC,SAAS;gBAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC;YACpD,IAAI,GAAG,CAAC,UAAU;gBAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;YACpD,IAAI,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,KAAK,KAAK,EAAE;gBAAE,OAAO,IAAI,CAAC;YACrE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;QAExC,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAClC,MAAM,MAAM,GAAW,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;YAChE,IAAI,GAAG,CAAC,OAAO;gBAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC;YACtD,IAAI,GAAG,CAAC,SAAS;gBAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;YACvD,IAAI,GAAG,CAAC,MAAM;gBAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;YACxC,IAAI,KAAK,KAAK,GAAG;gBAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;YAC3C,IAAI,CAAC,GAAG;gBAAE,OAAO,IAAI,CAAC;YACtB,IAAI,GAAG,CAAC,MAAM;gBAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC;YACxF,IAAI,KAAK,KAAK,GAAG;gBAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;YAChG,OAAO,IAAI,CAAC;QACd,CAAC;QAED,KAAK,QAAQ;YACX,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAE/C,KAAK,QAAQ;YACX,IAAI,GAAG,CAAC,MAAM;gBAAE,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACzC,IAAI,KAAK,KAAK,GAAG;gBAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;YAC9C,IAAI,KAAK,KAAK,GAAG;gBAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YAC9F,OAAO,KAAK,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAEjD,KAAK,QAAQ;YACX,IAAI,GAAG,CAAC,MAAM;gBAAE,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACzC,IAAI,KAAK,KAAK,GAAG;gBAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;YAC9C,OAAO,KAAK,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAEjD,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBACf,IAAI,GAAG,CAAC,MAAM;oBAAE,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC;gBACnD,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;oBACf,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE;wBAAE,OAAO,IAAI,CAAC;oBAC/C,MAAM,EAAE,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBACnD,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;gBACnH,CAAC;gBACD,IAAI,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,MAAM;oBAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;gBAC3D,IAAI,GAAG,CAAC,SAAS;oBAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC;gBACpD,IAAI,GAAG,CAAC,UAAU;oBAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;gBACpD,IAAI,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,KAAK,KAAK,EAAE;oBAAE,OAAO,IAAI,CAAC;gBACtF,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;YACxC,CAAC;YACD,IAAI,GAAG,CAAC,OAAO;gBAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC;YACxD,IAAI,GAAG,CAAC,SAAS;gBAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;YACzD,IAAI,GAAG,CAAC,MAAM;gBAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;YACxC,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;gBACzE,MAAM,IAAI,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACxD,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;YAClH,CAAC;YACD,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;gBACf,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAClC,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC;YAC7E,CAAC;YACD,OAAO,KAAK,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QACjD,CAAC;QAED,KAAK,MAAM;YACT,IAAI,GAAG,CAAC,MAAM;gBAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;YACxC,OAAO,KAAK,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAEjD,KAAK,OAAO;YACV,OAAO,GAAG,CAAC,MAAM,IAAI,KAAK,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACjE,CAAC;AACH,CAAC"}
@@ -1,7 +1,16 @@
1
1
  import { z } from 'zod';
2
2
  import { type Result } from './types.js';
3
3
  declare const SettingsFile: z.ZodObject<{
4
- model: z.ZodOptional<z.ZodString>;
4
+ route: z.ZodOptional<z.ZodEnum<{
5
+ openrouter: "openrouter";
6
+ openai: "openai";
7
+ fireworks: "fireworks";
8
+ }>>;
9
+ models: z.ZodOptional<z.ZodRecord<z.ZodEnum<{
10
+ openrouter: "openrouter";
11
+ openai: "openai";
12
+ fireworks: "fireworks";
13
+ }> & z.core.$partial, z.ZodString>>;
5
14
  }, z.core.$strip>;
6
15
  export type Settings = z.infer<typeof SettingsFile>;
7
16
  export declare function readSettings(path: string): Result<Settings>;
@@ -1,9 +1,13 @@
1
1
  import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
2
2
  import { dirname } from 'node:path';
3
3
  import { z } from 'zod';
4
- import { err, messageOf, ok } from './types.js';
5
- // What the TUI remembers between runs. Only the picked model for now.
6
- const SettingsFile = z.object({ model: z.string().optional() });
4
+ import { err, messageOf, ok, ROUTES } from './types.js';
5
+ // What the TUI remembers between runs: the picked route, and the model picked on each route, so
6
+ // switching back to a route brings its model back.
7
+ const SettingsFile = z.object({
8
+ route: z.enum(ROUTES).optional(),
9
+ models: z.partialRecord(z.enum(ROUTES), z.string()).optional(),
10
+ });
7
11
  // A missing file is no settings. A broken one is an error the caller reports and then ignores.
8
12
  export function readSettings(path) {
9
13
  if (!existsSync(path))
@@ -1 +1 @@
1
- {"version":3,"file":"settings.js","sourceRoot":"","sources":["../../src/lib/settings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,EAAe,MAAM,YAAY,CAAC;AAE7D,sEAAsE;AACtE,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AAGhE,+FAA+F;AAC/F,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;IACrC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;QAC9E,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACtE,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;AACH,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,QAAkB;IAC5D,IAAI,CAAC;QACH,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9C,aAAa,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QAC9D,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC;IACvB,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"settings.js","sourceRoot":"","sources":["../../src/lib/settings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAe,MAAM,YAAY,CAAC;AAErE,gGAAgG;AAChG,mDAAmD;AACnD,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5B,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE;IAChC,MAAM,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;CAC/D,CAAC,CAAC;AAGH,+FAA+F;AAC/F,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;IACrC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;QAC9E,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACtE,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;AACH,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,QAAkB;IAC5D,IAAI,CAAC;QACH,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9C,aAAa,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QAC9D,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC;IACvB,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;AACH,CAAC"}
@@ -14,7 +14,7 @@ export declare const err: <E>(error: E) => {
14
14
  error: E;
15
15
  };
16
16
  export declare const messageOf: (error: unknown) => string;
17
- export declare const ROUTES: readonly ["openrouter", "openai"];
17
+ export declare const ROUTES: readonly ["openrouter", "openai", "fireworks"];
18
18
  export type Route = (typeof ROUTES)[number];
19
19
  export type Config = {
20
20
  route: Route;
@@ -30,7 +30,8 @@ export type ConfigProblem = {
30
30
  code: 'route-key-missing';
31
31
  route: Route;
32
32
  } | {
33
- code: 'model-needs-openrouter';
33
+ code: 'model-not-on-route';
34
+ route: Route;
34
35
  model: string;
35
36
  };
36
37
  export type Failure = {
package/dist/lib/types.js CHANGED
@@ -2,6 +2,7 @@ export const ok = (data) => ({ ok: true, data });
2
2
  export const err = (error) => ({ ok: false, error });
3
3
  // The one way a thrown value becomes text.
4
4
  export const messageOf = (error) => (error instanceof Error ? error.message : String(error));
5
- export const ROUTES = ['openrouter', 'openai'];
5
+ // In auto-detect order: the first route with a key wins.
6
+ export const ROUTES = ['openrouter', 'openai', 'fireworks'];
6
7
  export const EXIT = { ok: 0, unexpected: 1, usage: 2, noKey: 3, provider: 4 };
7
8
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,EAAE,GAAG,CAAI,IAAO,EAAyB,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AAC9E,MAAM,CAAC,MAAM,GAAG,GAAG,CAAI,KAAQ,EAA2B,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;AAEpF,2CAA2C;AAC3C,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,KAAc,EAAU,EAAE,CAAC,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AAE9G,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,YAAY,EAAE,QAAQ,CAAU,CAAC;AAoBxD,MAAM,CAAC,MAAM,IAAI,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAW,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,EAAE,GAAG,CAAI,IAAO,EAAyB,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AAC9E,MAAM,CAAC,MAAM,GAAG,GAAG,CAAI,KAAQ,EAA2B,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;AAEpF,2CAA2C;AAC3C,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,KAAc,EAAU,EAAE,CAAC,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AAE9G,yDAAyD;AACzD,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,YAAY,EAAE,QAAQ,EAAE,WAAW,CAAU,CAAC;AAoBrE,MAAM,CAAC,MAAM,IAAI,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAW,CAAC"}
@@ -4,6 +4,9 @@ type PickerView = Extract<View, {
4
4
  }>;
5
5
  export declare function ModelPicker({ view, pinned }: {
6
6
  view: PickerView;
7
- pinned?: string;
7
+ pinned?: {
8
+ route?: string;
9
+ model?: string;
10
+ };
8
11
  }): import("react").JSX.Element;
9
12
  export {};
@@ -1,4 +1,4 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  import { Box, Text } from 'ink';
3
3
  import { Cursor } from '../components/cursor.js';
4
4
  import { Gutter, GutterLine } from '../components/gutter-line.js';
@@ -7,14 +7,16 @@ import { DEFAULT_MODEL } from '../lib/config.js';
7
7
  import { TUI } from '../lib/messages.js';
8
8
  import { C } from '../lib/theme.js';
9
9
  const Muted = ({ children }) => (_jsx(GutterLine, { children: _jsx(Text, { color: C.overlay1, children: children }) }));
10
- // The model picker: the route's choices, the model in use, and a box for any other id.
11
- // `pinned` is B3_DICT_MODEL, which will win again on the next run whatever is picked here.
12
- export function ModelPicker({ view, pinned }) {
13
- const { route, rows, current, index, draft, rejected } = view;
10
+ // The model picker: a Provider row when both keys are there, the route's choices, the model in use,
11
+ // and a box for any other id. `pinned` holds B3_DICT_PROVIDER and B3_DICT_MODEL, which win again on
12
+ // the next run whatever is picked here.
13
+ export function ModelPicker({ view, pinned = {} }) {
14
+ const { route, routes, rows, current, index, draft, rejected, notice } = view;
14
15
  const note = (id) => (id === DEFAULT_MODEL[route] ? TUI.modelDefault : TUI.modelNotes[id]);
15
- return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { color: C.sapphire, bold: true, children: TUI.modelHeading }), _jsx(Text, { color: C.overlay1, children: TUI.modelInstruction }), _jsxs(Gutter, { children: [rows.map((id, at) => {
16
+ const onProvider = !draft && index === -1;
17
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { color: C.sapphire, bold: true, children: TUI.modelHeading }), _jsx(Text, { color: C.overlay1, children: TUI.modelInstruction }), _jsxs(Gutter, { children: [routes.length > 1 && (_jsxs(_Fragment, { children: [_jsxs(GutterLine, { children: [_jsx(Cursor, { active: onProvider }), _jsx(Text, { color: onProvider ? C.mauve : C.label, bold: onProvider, children: TUI.providerLabel }), routes.map((name, at) => (_jsxs(Text, { children: [_jsx(Text, { color: C.overlay0, children: at === 0 ? ' ' : ' · ' }), _jsx(Text, { color: name === route ? C.green : C.overlay0, bold: name === route, children: name })] }, name)))] }), _jsx(GutterLine, {})] })), rows.map((id, at) => {
16
18
  const active = !draft && at === index;
17
19
  return (_jsxs(GutterLine, { children: [_jsx(Cursor, { active: active }), _jsx(Text, { color: active ? C.mauve : C.label, bold: active, children: id }), note(id) && _jsxs(Text, { color: C.overlay0, children: [" ", note(id)] }), id === current && _jsxs(Text, { color: C.green, children: [" ", TUI.modelInUse] })] }, id));
18
- }), draft ? (_jsx(GutterLine, { children: _jsx(QueryInput, { draft: draft }) })) : (_jsxs(GutterLine, { children: [_jsx(Cursor, { active: index === rows.length }), _jsx(Text, { color: index === rows.length ? C.mauve : C.overlay1, bold: index === rows.length, children: TUI.customRow })] })), draft && _jsx(Muted, { children: TUI.customExample }), rejected && (_jsx(GutterLine, { children: _jsx(Text, { color: C.red, children: TUI.customRejected(rejected) }) })), pinned && _jsx(Muted, { children: TUI.pinned(pinned) }), _jsx(GutterLine, {}), _jsx(Muted, { children: draft ? TUI.customHints : TUI.pickerHints })] })] }));
20
+ }), draft ? (_jsx(GutterLine, { children: _jsx(QueryInput, { draft: draft }) })) : (_jsxs(GutterLine, { children: [_jsx(Cursor, { active: index === rows.length }), _jsx(Text, { color: index === rows.length ? C.mauve : C.overlay1, bold: index === rows.length, children: TUI.customRow })] })), draft && _jsx(Muted, { children: TUI.customExample(route) }), [rejected && TUI.customRejected(route, rejected), notice].map((text) => text && (_jsx(GutterLine, { children: _jsx(Text, { color: C.red, children: text }) }, text))), pinned.route && _jsx(Muted, { children: TUI.pinned('B3_DICT_PROVIDER', pinned.route) }), pinned.model && _jsx(Muted, { children: TUI.pinned('B3_DICT_MODEL', pinned.model) }), _jsx(GutterLine, {}), _jsx(Muted, { children: draft ? TUI.customHints : onProvider ? TUI.providerHints : TUI.pickerHints })] })] }));
19
21
  }
20
22
  //# sourceMappingURL=model-picker.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"model-picker.js","sourceRoot":"","sources":["../../src/screens/model-picker.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"model-picker.js","sourceRoot":"","sources":["../../src/screens/model-picker.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "b3-dict",
3
- "version": "0.2.0",
3
+ "version": "0.4.0",
4
4
  "description": "AI-first dictionary for the terminal: freeform EN/VI questions about words, answered in Vietnamese",
5
5
  "type": "module",
6
6
  "license": "ISC",
@@ -26,6 +26,7 @@
26
26
  "release:major": "bash scripts/release.sh major"
27
27
  },
28
28
  "dependencies": {
29
+ "@ai-sdk/fireworks": "^3.0.70",
29
30
  "@ai-sdk/openai": "^4.0.83",
30
31
  "@openrouter/ai-sdk-provider": "^3.1.0",
31
32
  "ai": "^7.0.127",