b3-dict 0.1.1 → 0.3.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 +2 -2
- package/dist/app.d.ts +17 -5
- package/dist/app.js +29 -10
- package/dist/app.js.map +1 -1
- package/dist/cli.js +31 -7
- package/dist/cli.js.map +1 -1
- package/dist/lib/config.d.ts +6 -1
- package/dist/lib/config.js +32 -13
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/messages.d.ts +31 -2
- package/dist/lib/messages.js +66 -3
- package/dist/lib/messages.js.map +1 -1
- package/dist/lib/model.d.ts +57 -3
- package/dist/lib/model.js +99 -5
- package/dist/lib/model.js.map +1 -1
- package/dist/lib/paths.d.ts +1 -0
- package/dist/lib/paths.js +2 -1
- package/dist/lib/paths.js.map +1 -1
- package/dist/lib/settings.d.ts +16 -0
- package/dist/lib/settings.js +33 -0
- package/dist/lib/settings.js.map +1 -0
- package/dist/screens/help.d.ts +4 -0
- package/dist/screens/help.js +12 -0
- package/dist/screens/help.js.map +1 -0
- package/dist/screens/home.d.ts +1 -1
- package/dist/screens/home.js +3 -3
- package/dist/screens/home.js.map +1 -1
- package/dist/screens/model-picker.d.ts +12 -0
- package/dist/screens/model-picker.js +22 -0
- package/dist/screens/model-picker.js.map +1 -0
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -19,9 +19,9 @@ b3dict "take for granted" --fresh # skip the stored answer, ask again
|
|
|
19
19
|
b3dict "draggable" --json # raw answer envelope
|
|
20
20
|
```
|
|
21
21
|
|
|
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. 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.
|
|
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. 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,8 +1,20 @@
|
|
|
1
|
-
import { type LookupDeps } from './lib/lookup.js';
|
|
2
|
-
import
|
|
1
|
+
import { type Ask, type LookupDeps } from './lib/lookup.js';
|
|
2
|
+
import { type HelpPaths } from './lib/messages.js';
|
|
3
|
+
import type { Settings } from './lib/settings.js';
|
|
4
|
+
import { type Config, type ConfigProblem, type Result, type Route } from './lib/types.js';
|
|
5
|
+
export type Deps = Omit<LookupDeps, 'onRetry' | 'ask'> & {
|
|
6
|
+
askFor: (route: Route, model: string) => Ask;
|
|
7
|
+
saveSettings: (settings: Settings) => Result<void>;
|
|
8
|
+
};
|
|
3
9
|
export type AppProps = {
|
|
4
10
|
config: Result<Config, ConfigProblem>;
|
|
5
|
-
|
|
6
|
-
|
|
11
|
+
paths: HelpPaths;
|
|
12
|
+
routes?: Route[];
|
|
13
|
+
saved?: Settings;
|
|
14
|
+
pinned?: {
|
|
15
|
+
route?: string;
|
|
16
|
+
model?: string;
|
|
17
|
+
};
|
|
18
|
+
deps?: Deps;
|
|
7
19
|
};
|
|
8
|
-
export declare function App({ config,
|
|
20
|
+
export declare function App({ config, paths, routes, saved, pinned, deps }: AppProps): import("react").JSX.Element;
|
package/dist/app.js
CHANGED
|
@@ -7,8 +7,11 @@ 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';
|
|
11
|
+
import { Help } from './screens/help.js';
|
|
10
12
|
import { Home } from './screens/home.js';
|
|
11
13
|
import { List } from './screens/list.js';
|
|
14
|
+
import { ModelPicker } from './screens/model-picker.js';
|
|
12
15
|
import { Setup } from './screens/setup.js';
|
|
13
16
|
// Reads a list for the screen. A notice rides along when the step before it went wrong.
|
|
14
17
|
function showList(deps, which, index, notice) {
|
|
@@ -18,7 +21,7 @@ function showList(deps, which, index, notice) {
|
|
|
18
21
|
return { type: 'listShown', which, rows: rows.data, index, ...(notice && { notice }) };
|
|
19
22
|
}
|
|
20
23
|
// Intents that read or write the DB. All synchronous, so each returns the message to dispatch.
|
|
21
|
-
function perform(intent, deps) {
|
|
24
|
+
function perform(intent, deps, active) {
|
|
22
25
|
switch (intent.type) {
|
|
23
26
|
case 'openList':
|
|
24
27
|
return showList(deps, intent.which, intent.index);
|
|
@@ -34,6 +37,16 @@ function perform(intent, deps) {
|
|
|
34
37
|
? { type: 'entryOpened', entry: row.data, answer: answer.data, origin }
|
|
35
38
|
: { type: 'openFailed', query: row.data.query_text, detail: answer.error, origin };
|
|
36
39
|
}
|
|
40
|
+
// A pick holds for this session even when it can't be saved for the next one.
|
|
41
|
+
case 'pickModel': {
|
|
42
|
+
const route = active?.route;
|
|
43
|
+
const saved = route ? deps.saveSettings({ route, models: { ...active.models, [route]: intent.model } }) : ok(undefined);
|
|
44
|
+
return { type: 'modelPicked', model: intent.model, ...(!saved.ok && { notice: TUI.settingsSaveFailed(saved.error) }) };
|
|
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
|
+
}
|
|
37
50
|
case 'toggleSave': {
|
|
38
51
|
const saved = setSaved(deps.db, intent.id, intent.saved, deps.now());
|
|
39
52
|
if (intent.reload) {
|
|
@@ -45,9 +58,9 @@ function perform(intent, deps) {
|
|
|
45
58
|
}
|
|
46
59
|
// The shell: one reducer holds the state, key presses become messages, and the side effects
|
|
47
60
|
// (asking the model, reading lists, flipping the saved flag) happen here.
|
|
48
|
-
export function App({ config,
|
|
61
|
+
export function App({ config, paths, routes, saved, pinned, deps }) {
|
|
49
62
|
const { exit } = useApp();
|
|
50
|
-
const [model, dispatch] = useReducer(update, config,
|
|
63
|
+
const [model, dispatch] = useReducer(update, undefined, () => init(config, { routes, models: saved?.models }));
|
|
51
64
|
const { view } = model;
|
|
52
65
|
useInput((input, key) => {
|
|
53
66
|
const intent = intentFor(view, input, key);
|
|
@@ -56,28 +69,34 @@ export function App({ config, envPath, deps }) {
|
|
|
56
69
|
if (intent.type === 'quit') {
|
|
57
70
|
exit();
|
|
58
71
|
}
|
|
59
|
-
else if (intent.type === 'openList' ||
|
|
72
|
+
else if (intent.type === 'openList' ||
|
|
73
|
+
intent.type === 'openEntry' ||
|
|
74
|
+
intent.type === 'toggleSave' ||
|
|
75
|
+
intent.type === 'pickModel' ||
|
|
76
|
+
intent.type === 'pickRoute') {
|
|
60
77
|
if (deps)
|
|
61
|
-
dispatch(perform(intent, deps));
|
|
78
|
+
dispatch(perform(intent, deps, model.active));
|
|
62
79
|
}
|
|
63
80
|
else {
|
|
64
81
|
dispatch(intent);
|
|
65
82
|
}
|
|
66
83
|
});
|
|
84
|
+
// The config with the model picked in this session, if any.
|
|
85
|
+
const current = config.ok && model.active ? { ...config.data, route: model.active.route, model: model.active.model } : undefined;
|
|
67
86
|
const request = view.screen === 'asking' ? view.request : undefined;
|
|
68
87
|
useEffect(() => {
|
|
69
|
-
if (!request || !
|
|
88
|
+
if (!request || !current || !deps)
|
|
70
89
|
return;
|
|
71
90
|
const requestId = request.id;
|
|
72
|
-
void lookup({ query: request.query, route:
|
|
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
|
|
73
92
|
? { type: 'answered', requestId, outcome: result.data }
|
|
74
93
|
: { type: 'failed', requestId, failure: result.error }));
|
|
75
|
-
// One lookup per request id. The request object is recreated on every render,
|
|
76
|
-
//
|
|
94
|
+
// One lookup per request id. The request object is recreated on every render, deps never
|
|
95
|
+
// change after mount, and the model can only change on Home, before a request exists.
|
|
77
96
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
78
97
|
}, [request?.id]);
|
|
79
98
|
// One COUNT per Home render; renders happen on key presses, so this is cheap.
|
|
80
99
|
const counted = view.screen === 'home' && deps ? countLookups(deps.db) : undefined;
|
|
81
|
-
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Banner, { config:
|
|
100
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Banner, { config: current }), view.screen === 'setup' && _jsx(Setup, { problem: view.problem, envPath: paths.env }), view.screen === 'list' && deps && _jsx(List, { view: view, now: deps.now() }), view.screen === 'model' && _jsx(ModelPicker, { view: view, pinned: pinned }), view.screen === 'help' && _jsx(Help, { paths: paths }), view.screen !== 'setup' && view.screen !== 'list' && view.screen !== 'model' && view.screen !== 'help' && current && (_jsx(Home, { view: view, config: current, counts: counted?.ok ? counted.data : undefined, notice: counted && !counted.ok ? TUI.countFailed(counted.error) : undefined }))] }));
|
|
82
101
|
}
|
|
83
102
|
//# sourceMappingURL=app.js.map
|
package/dist/app.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAiB,MAAM,aAAa,CAAC;AAC5F,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.tsx"],"names":[],"mappings":"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"}
|
package/dist/cli.js
CHANGED
|
@@ -4,12 +4,13 @@ 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';
|
|
11
|
-
import { DB_PATH, ENV_PATH, PACKAGE_JSON_PATH } from './lib/paths.js';
|
|
11
|
+
import { DB_PATH, ENV_PATH, PACKAGE_JSON_PATH, SETTINGS_PATH } from './lib/paths.js';
|
|
12
12
|
import { renderText } from './lib/render-text.js';
|
|
13
|
+
import { readSettings, writeSettings } from './lib/settings.js';
|
|
13
14
|
import { EXIT, messageOf } from './lib/types.js';
|
|
14
15
|
const out = (text) => process.stdout.write(`${text}\n`);
|
|
15
16
|
const warn = (text) => process.stderr.write(`${text}\n`);
|
|
@@ -37,9 +38,15 @@ async function main(argv) {
|
|
|
37
38
|
// Variables already in the environment win over .env.
|
|
38
39
|
if (existsSync(ENV_PATH))
|
|
39
40
|
process.loadEnvFile(ENV_PATH);
|
|
41
|
+
// The model picked in the TUI. A file that can't be read is reported once and then ignored;
|
|
42
|
+
// the next pick overwrites it.
|
|
43
|
+
const settings = readSettings(SETTINGS_PATH);
|
|
44
|
+
if (!settings.ok)
|
|
45
|
+
warn(CLI.settingsIgnored(SETTINGS_PATH, settings.error));
|
|
46
|
+
const saved = settings.ok ? settings.data : {};
|
|
40
47
|
return command.data.mode === 'tui'
|
|
41
|
-
? runTui(resolveConfig(process.env))
|
|
42
|
-
: runOneShot(command.data, resolveConfig(process.env, command.data.model));
|
|
48
|
+
? runTui(resolveConfig(process.env, undefined, saved), saved)
|
|
49
|
+
: runOneShot(command.data, resolveConfig(process.env, command.data.model, saved));
|
|
43
50
|
}
|
|
44
51
|
async function runOneShot({ query, fresh, json, model }, config) {
|
|
45
52
|
if (!config.ok) {
|
|
@@ -67,7 +74,7 @@ async function runOneShot({ query, fresh, json, model }, config) {
|
|
|
67
74
|
db.data.close();
|
|
68
75
|
}
|
|
69
76
|
}
|
|
70
|
-
async function runTui(config) {
|
|
77
|
+
async function runTui(config, saved) {
|
|
71
78
|
if (!process.stdin.isTTY) {
|
|
72
79
|
warn(`✗ ${TUI.needsTerminal}`);
|
|
73
80
|
return EXIT.usage;
|
|
@@ -79,8 +86,25 @@ async function runTui(config) {
|
|
|
79
86
|
}
|
|
80
87
|
// Loaded here so a one-shot lookup never pays for Ink and React.
|
|
81
88
|
const [{ render }, { createElement }, { App }] = await Promise.all([import('ink'), import('react'), import('./app.js')]);
|
|
82
|
-
const deps = config.ok && db?.ok
|
|
83
|
-
|
|
89
|
+
const deps = config.ok && db?.ok
|
|
90
|
+
? {
|
|
91
|
+
...depsFor(config.data, db.data),
|
|
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 }),
|
|
94
|
+
saveSettings: (settings) => writeSettings(SETTINGS_PATH, settings),
|
|
95
|
+
}
|
|
96
|
+
: undefined;
|
|
97
|
+
const app = render(createElement(App, {
|
|
98
|
+
config,
|
|
99
|
+
paths: { env: ENV_PATH, settings: SETTINGS_PATH, db: DB_PATH },
|
|
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
|
+
},
|
|
106
|
+
deps,
|
|
107
|
+
}));
|
|
84
108
|
await app.waitUntilExit();
|
|
85
109
|
if (db?.ok)
|
|
86
110
|
db.data.close();
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,UAAU,IAAI,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,YAAY,EAAgB,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,UAAU,IAAI,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,YAAY,EAAgB,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACxE,OAAO,EAAE,MAAM,EAAW,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAmB,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,GAAG,EAAE,iBAAiB,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAC9F,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACrF,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAiB,MAAM,mBAAmB,CAAC;AAC/E,OAAO,EAAE,IAAI,EAAE,SAAS,EAA4D,MAAM,gBAAgB,CAAC;AAE3G,MAAM,GAAG,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC;AAChE,MAAM,IAAI,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC;AAEjE,MAAM,OAAO,GAAG,CAAC,MAAc,EAAE,EAAM,EAA+B,EAAE,CAAC,CAAC;IACxE,EAAE;IACF,GAAG,EAAE,SAAS,CAAC,MAAM,CAAC;IACtB,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;IACxB,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE;IACrB,KAAK,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE;CACtB,CAAC,CAAC;AAEH,KAAK,UAAU,IAAI,CAAC,IAAc;IAChC,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IACnC,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;QAChB,IAAI,CAAC,KAAK,OAAO,CAAC,KAAK,OAAO,IAAI,EAAE,CAAC,CAAC;QACtC,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,QAAQ,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAC1B,KAAK,MAAM;YACT,GAAG,CAAC,IAAI,CAAC,CAAC;YACV,OAAO,IAAI,CAAC,EAAE,CAAC;QACjB,KAAK,SAAS;YACZ,GAAG,CAAE,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAyB,CAAC,OAAO,CAAC,CAAC;YAC1F,OAAO,IAAI,CAAC,EAAE,CAAC;IACnB,CAAC;IAED,sDAAsD;IACtD,IAAI,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAExD,4FAA4F;IAC5F,+BAA+B;IAC/B,MAAM,QAAQ,GAAG,YAAY,CAAC,aAAa,CAAC,CAAC;IAC7C,IAAI,CAAC,QAAQ,CAAC,EAAE;QAAE,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,aAAa,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3E,MAAM,KAAK,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IAE/C,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,KAAK;QAChC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC;QAC7D,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,aAAa,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;AACtF,CAAC;AAED,KAAK,UAAU,UAAU,CACvB,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAqC,EAChE,MAAqC;IAErC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;QAChD,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,MAAM,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IAC3B,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACX,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,OAAO,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;QAC1C,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,MAAM;QACzB,6FAA6F;QAC7F,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,IAAI,KAAK,KAAK,SAAS,EAAE,EAClG,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CACxG,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;YACpD,OAAO,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;QAChF,CAAC;QACD,6FAA6F;QAC7F,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;QAClF,OAAO,IAAI,CAAC,EAAE,CAAC;IACjB,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;IAClB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,MAAM,CAAC,MAAqC,EAAE,KAAe;IAC1E,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,KAAK,GAAG,CAAC,aAAa,EAAE,CAAC,CAAC;QAC/B,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACnD,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACjB,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,OAAO,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;QAC1C,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED,iEAAiE;IACjE,MAAM,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IACzH,MAAM,IAAI,GACR,MAAM,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE;QACjB,CAAC,CAAC;YACE,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC;YAChC,kFAAkF;YAClF,MAAM,EAAE,CAAC,KAAY,EAAE,KAAa,EAAE,EAAE,CACtC,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACvF,YAAY,EAAE,CAAC,QAAkB,EAAE,EAAE,CAAC,aAAa,CAAC,aAAa,EAAE,QAAQ,CAAC;SAC7E;QACH,CAAC,CAAC,SAAS,CAAC;IAChB,MAAM,GAAG,GAAG,MAAM,CAChB,aAAa,CAAC,GAAG,EAAE;QACjB,MAAM;QACN,KAAK,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,EAAE,EAAE,OAAO,EAAE;QAC9D,MAAM,EAAE,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC;QACnC,KAAK;QACL,MAAM,EAAE;YACN,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,EAAE,IAAI,SAAS;YACxD,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,EAAE,IAAI,SAAS;SACtD;QACD,IAAI;KACL,CAAC,CACH,CAAC;IACF,MAAM,GAAG,CAAC,aAAa,EAAE,CAAC;IAC1B,IAAI,EAAE,EAAE,EAAE;QAAE,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;IAE5B,4FAA4F;IAC5F,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACjD,CAAC;AAED,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAC9B,CAAC,IAAI,EAAE,EAAE;IACP,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;AAC1B,CAAC,EACD,CAAC,KAAc,EAAE,EAAE;IACjB,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACzC,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC;AACrC,CAAC,CACF,CAAC"}
|
package/dist/lib/config.d.ts
CHANGED
|
@@ -1,6 +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>;
|
|
4
|
+
export declare const MODEL_CHOICES: Record<Route, readonly string[]>;
|
|
3
5
|
type Env = Record<string, string | undefined>;
|
|
4
|
-
export declare function
|
|
6
|
+
export declare function checkModel(route: Route, id: string): Result<string, 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>;
|
|
5
10
|
export declare const keyVarFor: (route: Route) => string;
|
|
6
11
|
export {};
|
package/dist/lib/config.js
CHANGED
|
@@ -3,37 +3,56 @@ export const DEFAULT_MODEL = {
|
|
|
3
3
|
openrouter: 'qwen/qwen3-235b-a22b-2507',
|
|
4
4
|
openai: 'gpt-5-mini',
|
|
5
5
|
};
|
|
6
|
+
// What the TUI's model picker offers, default first. Every one has answered a real lookup.
|
|
7
|
+
export const MODEL_CHOICES = {
|
|
8
|
+
openrouter: [DEFAULT_MODEL.openrouter, 'qwen/qwen3-30b-a3b-instruct-2507', 'z-ai/glm-4.6', 'openai/gpt-5-mini'],
|
|
9
|
+
openai: [DEFAULT_MODEL.openai],
|
|
10
|
+
};
|
|
6
11
|
const KEY_VAR = {
|
|
7
12
|
openrouter: 'OPENROUTER_API_KEY',
|
|
8
13
|
openai: 'OPENAI_API_KEY',
|
|
9
14
|
};
|
|
10
15
|
const read = (env, name) => env[name]?.trim() || undefined;
|
|
11
16
|
const isRoute = (value) => ROUTES.includes(value);
|
|
12
|
-
//
|
|
13
|
-
|
|
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.
|
|
19
|
+
export function checkModel(route, id) {
|
|
20
|
+
const model = id.trim();
|
|
21
|
+
if (model.includes('/')) {
|
|
22
|
+
return route === 'openrouter' ? ok(model) : err({ code: 'model-needs-openrouter', model });
|
|
23
|
+
}
|
|
24
|
+
return ok(route === 'openrouter' ? `openai/${model}` : model);
|
|
25
|
+
}
|
|
26
|
+
export const keyFor = (env, route) => read(env, KEY_VAR[route]);
|
|
27
|
+
// The routes a lookup could go to right now, OpenRouter first.
|
|
28
|
+
export const routesWithKeys = (env) => ROUTES.filter((route) => keyFor(env, route));
|
|
29
|
+
// Which route wins: B3_DICT_PROVIDER, then the route picked in the TUI (saved) when its key is
|
|
30
|
+
// there, then whichever key exists, OpenRouter first.
|
|
31
|
+
// Which model wins: the one-shot --model, then B3_DICT_MODEL, then the model picked in the TUI for
|
|
32
|
+
// that route (saved), then the route's default. Saved choices the keys or the route can't serve
|
|
33
|
+
// are skipped, not errors: the user didn't ask for them on this run.
|
|
34
|
+
export function resolveConfig(env, modelFlag, saved = {}) {
|
|
14
35
|
const keys = {
|
|
15
|
-
openrouter:
|
|
16
|
-
openai:
|
|
36
|
+
openrouter: keyFor(env, 'openrouter'),
|
|
37
|
+
openai: keyFor(env, 'openai'),
|
|
17
38
|
};
|
|
18
39
|
if (!keys.openrouter && !keys.openai)
|
|
19
40
|
return err({ code: 'no-key' });
|
|
20
41
|
const forced = read(env, 'B3_DICT_PROVIDER')?.toLowerCase();
|
|
21
42
|
if (forced !== undefined && !isRoute(forced))
|
|
22
43
|
return err({ code: 'bad-provider', value: forced });
|
|
23
|
-
const
|
|
44
|
+
const picked = saved.route && keys[saved.route] ? saved.route : undefined;
|
|
45
|
+
const route = forced ?? picked ?? (keys.openrouter ? 'openrouter' : 'openai');
|
|
24
46
|
const apiKey = keys[route];
|
|
25
47
|
if (!apiKey)
|
|
26
48
|
return err({ code: 'route-key-missing', route });
|
|
27
49
|
const requested = modelFlag?.trim() || read(env, 'B3_DICT_MODEL');
|
|
28
|
-
if (
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
if (requested.includes('/')) {
|
|
32
|
-
if (route !== 'openrouter')
|
|
33
|
-
return err({ code: 'model-needs-openrouter', model: requested });
|
|
34
|
-
return ok({ route, apiKey, model: requested });
|
|
50
|
+
if (requested) {
|
|
51
|
+
const model = checkModel(route, requested);
|
|
52
|
+
return model.ok ? ok({ route, apiKey, model: model.data }) : model;
|
|
35
53
|
}
|
|
36
|
-
|
|
54
|
+
const remembered = saved.models?.[route]?.trim() ? checkModel(route, saved.models[route]) : undefined;
|
|
55
|
+
return ok({ route, apiKey, model: remembered?.ok ? remembered.data : DEFAULT_MODEL[route] });
|
|
37
56
|
}
|
|
38
57
|
export const keyVarFor = (route) => KEY_VAR[route];
|
|
39
58
|
//# sourceMappingURL=config.js.map
|
package/dist/lib/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/messages.d.ts
CHANGED
|
@@ -10,6 +10,7 @@ export declare const CLI: {
|
|
|
10
10
|
readonly missingModel: "--model cần một tên model. Ví dụ: --model z-ai/glm-4.6";
|
|
11
11
|
readonly dbOpenFailed: (path: string, detail: string) => string;
|
|
12
12
|
readonly unknownError: (detail: string) => string;
|
|
13
|
+
readonly settingsIgnored: (path: string, detail: string) => string;
|
|
13
14
|
};
|
|
14
15
|
export declare const backTo: (origin?: Origin) => string;
|
|
15
16
|
export declare const TUI: {
|
|
@@ -19,13 +20,15 @@ export declare const TUI: {
|
|
|
19
20
|
readonly homeHeading: "Home";
|
|
20
21
|
readonly countFailed: (detail: string) => string;
|
|
21
22
|
readonly homeInstruction: "Hỏi về từ, thành ngữ, cách dùng. Trộn tiếng Việt và English đều được.";
|
|
22
|
-
readonly homeHintsEmpty: "gõ câu hỏi rồi enter · ↓
|
|
23
|
-
readonly homeHints: "enter hỏi · ↓
|
|
23
|
+
readonly homeHintsEmpty: "gõ câu hỏi rồi enter · ↓ menu · esc thoát";
|
|
24
|
+
readonly homeHints: "enter hỏi · ↓ menu · esc xoá ô · ctrl+c thoát";
|
|
24
25
|
readonly homeMenuHints: "↑↓ chọn · enter mở · esc về ô gõ · q thoát";
|
|
25
26
|
readonly homeMenuTitle: "── hoặc chọn: ──";
|
|
26
27
|
readonly menuLabel: {
|
|
27
28
|
readonly history: "History ";
|
|
28
29
|
readonly wordbook: "Wordbook";
|
|
30
|
+
readonly model: "Model ";
|
|
31
|
+
readonly help: "Help ";
|
|
29
32
|
};
|
|
30
33
|
readonly listHeading: {
|
|
31
34
|
readonly history: "History";
|
|
@@ -55,9 +58,35 @@ export declare const TUI: {
|
|
|
55
58
|
readonly saveFailed: (detail: string) => string;
|
|
56
59
|
readonly failedHints: (backTo: string) => string;
|
|
57
60
|
readonly setupHints: "esc thoát";
|
|
61
|
+
readonly modelHeading: "Model";
|
|
62
|
+
readonly 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.";
|
|
63
|
+
readonly modelDefault: "mặc định";
|
|
64
|
+
readonly modelNotes: Record<string, string>;
|
|
65
|
+
readonly modelInUse: "✓ đang dùng";
|
|
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: (name: string, value: string) => string;
|
|
70
|
+
readonly providerLabel: "Provider";
|
|
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";
|
|
73
|
+
readonly customHints: "enter dùng · esc huỷ";
|
|
74
|
+
readonly settingsSaveFailed: (detail: string) => string;
|
|
75
|
+
readonly helpHeading: "Help";
|
|
76
|
+
readonly helpHints: "esc về home · q thoát";
|
|
58
77
|
readonly isWord: "✓ từ có thật";
|
|
59
78
|
readonly notWord: "✗ không phải từ chuẩn";
|
|
60
79
|
};
|
|
80
|
+
export type HelpPaths = {
|
|
81
|
+
env: string;
|
|
82
|
+
settings: string;
|
|
83
|
+
db: string;
|
|
84
|
+
};
|
|
85
|
+
export type HelpSection = {
|
|
86
|
+
title: string;
|
|
87
|
+
rows: [string, string][];
|
|
88
|
+
};
|
|
89
|
+
export declare const helpSections: (paths: HelpPaths) => HelpSection[];
|
|
61
90
|
export declare function configProblemText(problem: ConfigProblem, envPath: string): string;
|
|
62
91
|
export declare function failureText(failure: Failure, config: Config, query: string): string;
|
|
63
92
|
export declare function retryText(event: RetryEvent): string;
|
package/dist/lib/messages.js
CHANGED
|
@@ -33,6 +33,7 @@ export const CLI = {
|
|
|
33
33
|
missingModel: '--model cần một tên model. Ví dụ: --model z-ai/glm-4.6',
|
|
34
34
|
dbOpenFailed: (path, detail) => `✗ Không mở được ${path}: ${detail}`,
|
|
35
35
|
unknownError: (detail) => `✗ Lỗi không rõ: ${detail}`,
|
|
36
|
+
settingsIgnored: (path, detail) => `✗ Bỏ qua ${path} vì đọc không được: ${detail}`,
|
|
36
37
|
};
|
|
37
38
|
// Where esc leads from a view that came from a list, by its heading; otherwise home.
|
|
38
39
|
export const backTo = (origin) => (origin ? TUI.listHeading[origin.which] : 'home');
|
|
@@ -43,11 +44,11 @@ export const TUI = {
|
|
|
43
44
|
homeHeading: 'Home',
|
|
44
45
|
countFailed: (detail) => `✗ Không đếm được lookup: ${detail}`,
|
|
45
46
|
homeInstruction: 'Hỏi về từ, thành ngữ, cách dùng. Trộn tiếng Việt và English đều được.',
|
|
46
|
-
homeHintsEmpty: 'gõ câu hỏi rồi enter · ↓
|
|
47
|
-
homeHints: 'enter hỏi · ↓
|
|
47
|
+
homeHintsEmpty: 'gõ câu hỏi rồi enter · ↓ menu · esc thoát',
|
|
48
|
+
homeHints: 'enter hỏi · ↓ menu · esc xoá ô · ctrl+c thoát',
|
|
48
49
|
homeMenuHints: '↑↓ chọn · enter mở · esc về ô gõ · q thoát',
|
|
49
50
|
homeMenuTitle: '── hoặc chọn: ──',
|
|
50
|
-
menuLabel: { history: 'History ', wordbook: 'Wordbook' },
|
|
51
|
+
menuLabel: { history: 'History ', wordbook: 'Wordbook', model: 'Model ', help: 'Help ' },
|
|
51
52
|
listHeading: { history: 'History', wordbook: 'Wordbook' },
|
|
52
53
|
listCount: {
|
|
53
54
|
history: (n) => `${n} lookup${n === 1 ? '' : 's'}`,
|
|
@@ -73,9 +74,71 @@ export const TUI = {
|
|
|
73
74
|
saveFailed: (detail) => `✗ Không lưu được: ${detail}`,
|
|
74
75
|
failedHints: (backTo) => `r thử lại · esc về ${backTo} · q thoát`,
|
|
75
76
|
setupHints: 'esc thoát',
|
|
77
|
+
modelHeading: 'Model',
|
|
78
|
+
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
|
+
modelDefault: 'mặc định',
|
|
80
|
+
modelNotes: { 'qwen/qwen3-30b-a3b-instruct-2507': 'nhanh' },
|
|
81
|
+
modelInUse: '✓ đang dùng',
|
|
82
|
+
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: (name, value) => `${name}=${value} đang đặt, nên lần mở sau b3dict vẫn dùng ${value}.`,
|
|
86
|
+
providerLabel: 'Provider',
|
|
87
|
+
pickerHints: '↑↓ chọn · enter dùng · esc về home · q thoát',
|
|
88
|
+
providerHints: '←→ hoặc enter đổi provider · ↓ chọn model · esc về home · q thoát',
|
|
89
|
+
customHints: 'enter dùng · esc huỷ',
|
|
90
|
+
settingsSaveFailed: (detail) => `✗ Không lưu được lựa chọn, model chỉ đổi cho lần này: ${detail}`,
|
|
91
|
+
helpHeading: 'Help',
|
|
92
|
+
helpHints: 'esc về home · q thoát',
|
|
76
93
|
isWord: '✓ từ có thật',
|
|
77
94
|
notWord: '✗ không phải từ chuẩn',
|
|
78
95
|
};
|
|
96
|
+
// The Help screen: keys by place, the variables b3dict reads, and where its files are.
|
|
97
|
+
export const helpSections = (paths) => [
|
|
98
|
+
{
|
|
99
|
+
title: 'Home',
|
|
100
|
+
rows: [
|
|
101
|
+
['enter', 'hỏi câu đang gõ'],
|
|
102
|
+
['↓', 'xuống menu: History, Wordbook, Model, Help'],
|
|
103
|
+
['esc', 'xoá ô; ô trống thì thoát'],
|
|
104
|
+
['ctrl+c', 'thoát (q trong ô gõ chỉ là chữ q)'],
|
|
105
|
+
],
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
title: 'Đáp án',
|
|
109
|
+
rows: [
|
|
110
|
+
['r', 'hỏi lại model, bỏ qua đáp án đã lưu'],
|
|
111
|
+
['s', 'lưu ★ hoặc bỏ lưu'],
|
|
112
|
+
['esc', 'về chỗ vừa mở nó'],
|
|
113
|
+
],
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
title: 'History, Wordbook',
|
|
117
|
+
rows: [
|
|
118
|
+
['↑↓', 'di chuyển'],
|
|
119
|
+
['enter', 'mở đáp án đã lưu, không gọi model'],
|
|
120
|
+
['s', 'lưu ★ hoặc bỏ lưu dòng đang chọn'],
|
|
121
|
+
],
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
title: 'Cấu hình',
|
|
125
|
+
rows: [
|
|
126
|
+
['OPENROUTER_API_KEY', 'key OpenRouter, được ưu tiên khi có cả hai'],
|
|
127
|
+
['OPENAI_API_KEY', 'key OpenAI'],
|
|
128
|
+
['B3_DICT_MODEL', 'ép model, thắng lựa chọn trong Model'],
|
|
129
|
+
['B3_DICT_PROVIDER', 'ép provider (openrouter, openai), thắng lựa chọn trong Model'],
|
|
130
|
+
['B3_DICT_HOME', 'thư mục chứa .env, settings.json, data/ (đặt ngoài .env)'],
|
|
131
|
+
],
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
title: 'File',
|
|
135
|
+
rows: [
|
|
136
|
+
['.env', paths.env],
|
|
137
|
+
['settings', paths.settings],
|
|
138
|
+
['lookups', paths.db],
|
|
139
|
+
],
|
|
140
|
+
},
|
|
141
|
+
];
|
|
79
142
|
const setupSteps = (envPath) => `1. Tạo key: ${KEY_URL.openrouter}
|
|
80
143
|
(hoặc ${KEY_URL.openai})
|
|
81
144
|
2. echo "OPENROUTER_API_KEY=sk-or-…" >> ${envPath}
|
package/dist/lib/messages.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/lib/messages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAKxC,wGAAwG;AAExG,MAAM,CAAC,MAAM,OAAO,GAA0B;IAC5C,UAAU,EAAE,4BAA4B;IACxC,MAAM,EAAE,sCAAsC;CAC/C,CAAC;AAEF,MAAM,CAAC,MAAM,IAAI,GAAG;;;;;;;;;;;;;;;;;;;;yDAoBqC,CAAC;AAE1D,6DAA6D;AAC7D,MAAM,CAAC,MAAM,GAAG,GAAG;IACjB,aAAa,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,qBAAqB,IAAI,EAAE;IAC5D,YAAY,EAAE,CAAC,MAAc,EAAE,EAAE,CAAC,yBAAyB,MAAM,EAAE;IACnE,YAAY,EAAE,iDAAiD;IAC/D,YAAY,EAAE,wDAAwD;IACtE,YAAY,EAAE,CAAC,IAAY,EAAE,MAAc,EAAE,EAAE,CAAC,mBAAmB,IAAI,KAAK,MAAM,EAAE;IACpF,YAAY,EAAE,CAAC,MAAc,EAAE,EAAE,CAAC,mBAAmB,MAAM,EAAE;
|
|
1
|
+
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/lib/messages.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/model.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import type { ListKind, ListRow, LookupRow } from './db.js';
|
|
|
2
2
|
import type { Answer } from './envelope.js';
|
|
3
3
|
import type { LookupOutcome } from './lookup.js';
|
|
4
4
|
import type { RetryEvent } from './policy.js';
|
|
5
|
-
import type { ConfigProblem, Failure } from './types.js';
|
|
5
|
+
import type { Config, ConfigProblem, Failure, Route } from './types.js';
|
|
6
6
|
export type Draft = {
|
|
7
7
|
text: string;
|
|
8
8
|
cursor: number;
|
|
@@ -16,7 +16,7 @@ export type Origin = {
|
|
|
16
16
|
which: ListKind;
|
|
17
17
|
index: number;
|
|
18
18
|
};
|
|
19
|
-
export type Focus = 'input' | ListKind;
|
|
19
|
+
export type Focus = 'input' | ListKind | 'model' | 'help';
|
|
20
20
|
export type View = {
|
|
21
21
|
screen: 'setup';
|
|
22
22
|
problem: ConfigProblem;
|
|
@@ -24,6 +24,7 @@ export type View = {
|
|
|
24
24
|
screen: 'home';
|
|
25
25
|
draft: Draft;
|
|
26
26
|
focus: Focus;
|
|
27
|
+
notice?: string;
|
|
27
28
|
} | {
|
|
28
29
|
screen: 'list';
|
|
29
30
|
which: ListKind;
|
|
@@ -46,9 +47,28 @@ export type View = {
|
|
|
46
47
|
fresh: boolean;
|
|
47
48
|
failure: Failure;
|
|
48
49
|
origin?: Origin;
|
|
50
|
+
} | {
|
|
51
|
+
screen: 'model';
|
|
52
|
+
route: Route;
|
|
53
|
+
routes: Route[];
|
|
54
|
+
rows: string[];
|
|
55
|
+
current: string;
|
|
56
|
+
index: number;
|
|
57
|
+
draft?: Draft;
|
|
58
|
+
rejected?: string;
|
|
59
|
+
notice?: string;
|
|
60
|
+
} | {
|
|
61
|
+
screen: 'help';
|
|
62
|
+
};
|
|
63
|
+
export type Active = {
|
|
64
|
+
route: Route;
|
|
65
|
+
model: string;
|
|
66
|
+
routes: Route[];
|
|
67
|
+
models: Partial<Record<Route, string>>;
|
|
49
68
|
};
|
|
50
69
|
export type Model = {
|
|
51
70
|
requests: number;
|
|
71
|
+
active?: Active;
|
|
52
72
|
view: View;
|
|
53
73
|
};
|
|
54
74
|
export type Msg = {
|
|
@@ -107,6 +127,28 @@ export type Msg = {
|
|
|
107
127
|
} | {
|
|
108
128
|
type: 'saveFailed';
|
|
109
129
|
detail: string;
|
|
130
|
+
} | {
|
|
131
|
+
type: 'modelShown';
|
|
132
|
+
} | {
|
|
133
|
+
type: 'pickerMoved';
|
|
134
|
+
by: -1 | 1;
|
|
135
|
+
} | {
|
|
136
|
+
type: 'customStarted';
|
|
137
|
+
} | {
|
|
138
|
+
type: 'customCancelled';
|
|
139
|
+
} | {
|
|
140
|
+
type: 'customRejected';
|
|
141
|
+
model: string;
|
|
142
|
+
} | {
|
|
143
|
+
type: 'modelPicked';
|
|
144
|
+
model: string;
|
|
145
|
+
notice?: string;
|
|
146
|
+
} | {
|
|
147
|
+
type: 'routePicked';
|
|
148
|
+
route: Route;
|
|
149
|
+
notice?: string;
|
|
150
|
+
} | {
|
|
151
|
+
type: 'helpShown';
|
|
110
152
|
} | {
|
|
111
153
|
type: 'back';
|
|
112
154
|
};
|
|
@@ -126,13 +168,25 @@ export type Intent = Msg | {
|
|
|
126
168
|
id: string;
|
|
127
169
|
query: string;
|
|
128
170
|
origin: Origin;
|
|
171
|
+
} | {
|
|
172
|
+
type: 'pickModel';
|
|
173
|
+
model: string;
|
|
174
|
+
} | {
|
|
175
|
+
type: 'pickRoute';
|
|
176
|
+
route: Route;
|
|
129
177
|
};
|
|
130
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
|
+
};
|
|
131
183
|
export declare function init(config: {
|
|
132
184
|
ok: true;
|
|
185
|
+
data: Pick<Config, 'route' | 'model'>;
|
|
133
186
|
} | {
|
|
134
187
|
ok: false;
|
|
135
188
|
error: ConfigProblem;
|
|
136
|
-
}): Model;
|
|
189
|
+
}, { routes, models }?: Choices): Model;
|
|
137
190
|
export declare function update(model: Model, msg: Msg): Model;
|
|
138
191
|
export declare function intentFor(view: View, input: string, key: Key): Intent | null;
|
|
192
|
+
export {};
|
package/dist/lib/model.js
CHANGED
|
@@ -1,8 +1,12 @@
|
|
|
1
|
-
|
|
1
|
+
import { checkModel, DEFAULT_MODEL, MODEL_CHOICES } from './config.js';
|
|
2
|
+
const FOCUS_ORDER = ['input', 'history', 'wordbook', 'model', 'help'];
|
|
2
3
|
const EMPTY_DRAFT = { text: '', cursor: 0 };
|
|
3
4
|
const HOME = { screen: 'home', draft: EMPTY_DRAFT, focus: 'input' };
|
|
4
|
-
export function init(config) {
|
|
5
|
-
|
|
5
|
+
export function init(config, { routes, models } = {}) {
|
|
6
|
+
if (!config.ok)
|
|
7
|
+
return { requests: 0, view: { screen: 'setup', problem: config.error } };
|
|
8
|
+
const { route, model } = config.data;
|
|
9
|
+
return { requests: 0, active: { route, model, routes: routes ?? [route], models: { ...models, [route]: model } }, view: HOME };
|
|
6
10
|
}
|
|
7
11
|
// A paste arrives as one chunk: keep its line breaks, drop anything that isn't text.
|
|
8
12
|
const clean = (text) => text
|
|
@@ -28,9 +32,15 @@ function editDraft(draft, msg) {
|
|
|
28
32
|
return draft;
|
|
29
33
|
}
|
|
30
34
|
}
|
|
35
|
+
// The picker opens on the model in use, which gets a row of its own when it isn't a choice.
|
|
36
|
+
function picker({ route, model, routes }, onProvider = false) {
|
|
37
|
+
const choices = MODEL_CHOICES[route];
|
|
38
|
+
const rows = choices.includes(model) ? [...choices] : [...choices, model];
|
|
39
|
+
return { screen: 'model', route, routes, rows, current: model, index: onProvider ? -1 : rows.indexOf(model) };
|
|
40
|
+
}
|
|
31
41
|
function ask(model, query, fresh, origin) {
|
|
32
42
|
const id = model.requests + 1;
|
|
33
|
-
return { requests: id, view: { screen: 'asking', request: { id, query, fresh }, ...(origin && { origin }) } };
|
|
43
|
+
return { ...model, requests: id, view: { screen: 'asking', request: { id, query, fresh }, ...(origin && { origin }) } };
|
|
34
44
|
}
|
|
35
45
|
export function update(model, msg) {
|
|
36
46
|
const { view } = model;
|
|
@@ -42,6 +52,8 @@ export function update(model, msg) {
|
|
|
42
52
|
case 'erased':
|
|
43
53
|
case 'moved':
|
|
44
54
|
case 'cleared':
|
|
55
|
+
if (view.screen === 'model' && view.draft)
|
|
56
|
+
return to({ ...view, draft: editDraft(view.draft, msg), rejected: undefined });
|
|
45
57
|
return view.screen === 'home' ? to({ ...view, draft: editDraft(view.draft, msg) }) : model;
|
|
46
58
|
case 'focused': {
|
|
47
59
|
if (view.screen !== 'home')
|
|
@@ -94,7 +106,44 @@ export function update(model, msg) {
|
|
|
94
106
|
return view.screen === 'answer' ? to({ ...view, entry: msg.entry, notice: undefined }) : model;
|
|
95
107
|
case 'saveFailed':
|
|
96
108
|
return view.screen === 'answer' ? to({ ...view, notice: msg.detail }) : model;
|
|
109
|
+
case 'modelShown':
|
|
110
|
+
return view.screen === 'home' && model.active ? to(picker(model.active)) : model;
|
|
111
|
+
case 'pickerMoved':
|
|
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)) });
|
|
115
|
+
case 'customStarted':
|
|
116
|
+
return view.screen === 'model' ? to({ ...view, index: view.rows.length, draft: EMPTY_DRAFT }) : model;
|
|
117
|
+
case 'customCancelled':
|
|
118
|
+
return view.screen === 'model' ? to({ ...view, draft: undefined, rejected: undefined }) : model;
|
|
119
|
+
case 'customRejected':
|
|
120
|
+
return view.screen === 'model' ? to({ ...view, rejected: msg.model }) : model;
|
|
121
|
+
case 'modelPicked': {
|
|
122
|
+
if (!model.active)
|
|
123
|
+
return model;
|
|
124
|
+
const { route, models } = model.active;
|
|
125
|
+
return {
|
|
126
|
+
...model,
|
|
127
|
+
active: { ...model.active, model: msg.model, models: { ...models, [route]: msg.model } },
|
|
128
|
+
view: { ...HOME, focus: 'model', ...(msg.notice && { notice: msg.notice }) },
|
|
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
|
+
}
|
|
139
|
+
case 'helpShown':
|
|
140
|
+
return view.screen === 'home' ? to({ screen: 'help' }) : model;
|
|
97
141
|
case 'back':
|
|
142
|
+
// The picker and Help go back to the menu row that opened them; everything else to the input.
|
|
143
|
+
if (view.screen === 'model')
|
|
144
|
+
return to({ ...HOME, focus: 'model' });
|
|
145
|
+
if (view.screen === 'help')
|
|
146
|
+
return to({ ...HOME, focus: 'help' });
|
|
98
147
|
return view.screen === 'setup' || view.screen === 'home' ? model : to(HOME);
|
|
99
148
|
}
|
|
100
149
|
}
|
|
@@ -108,8 +157,13 @@ export function intentFor(view, input, key) {
|
|
|
108
157
|
return { type: 'focused', by: -1 };
|
|
109
158
|
if (key.downArrow)
|
|
110
159
|
return { type: 'focused', by: 1 };
|
|
111
|
-
if (key.return)
|
|
160
|
+
if (key.return) {
|
|
161
|
+
if (view.focus === 'model')
|
|
162
|
+
return { type: 'modelShown' };
|
|
163
|
+
if (view.focus === 'help')
|
|
164
|
+
return { type: 'helpShown' };
|
|
112
165
|
return { type: 'openList', which: view.focus, index: 0 };
|
|
166
|
+
}
|
|
113
167
|
if (key.escape)
|
|
114
168
|
return { type: 'focusInput' };
|
|
115
169
|
return input === 'q' ? { type: 'quit' } : null;
|
|
@@ -165,6 +219,46 @@ export function intentFor(view, input, key) {
|
|
|
165
219
|
if (input === 'r')
|
|
166
220
|
return { type: 'reasked' };
|
|
167
221
|
return input === 'q' ? { type: 'quit' } : null;
|
|
222
|
+
case 'model': {
|
|
223
|
+
if (view.draft) {
|
|
224
|
+
if (key.escape)
|
|
225
|
+
return { type: 'customCancelled' };
|
|
226
|
+
if (key.return) {
|
|
227
|
+
if (view.draft.text.trim() === '')
|
|
228
|
+
return null;
|
|
229
|
+
const id = checkModel(view.route, view.draft.text);
|
|
230
|
+
return id.ok ? { type: 'pickModel', model: id.data } : { type: 'customRejected', model: view.draft.text.trim() };
|
|
231
|
+
}
|
|
232
|
+
if (key.backspace || key.delete)
|
|
233
|
+
return { type: 'erased' };
|
|
234
|
+
if (key.leftArrow)
|
|
235
|
+
return { type: 'moved', by: -1 };
|
|
236
|
+
if (key.rightArrow)
|
|
237
|
+
return { type: 'moved', by: 1 };
|
|
238
|
+
if (key.upArrow || key.downArrow || key.ctrl || key.meta || input === '')
|
|
239
|
+
return null;
|
|
240
|
+
return { type: 'typed', text: input };
|
|
241
|
+
}
|
|
242
|
+
if (key.upArrow)
|
|
243
|
+
return { type: 'pickerMoved', by: -1 };
|
|
244
|
+
if (key.downArrow)
|
|
245
|
+
return { type: 'pickerMoved', by: 1 };
|
|
246
|
+
if (key.escape)
|
|
247
|
+
return { type: 'back' };
|
|
248
|
+
if (view.index === -1 && (key.return || key.leftArrow || key.rightArrow)) {
|
|
249
|
+
const at = view.routes.indexOf(view.route);
|
|
250
|
+
return { type: 'pickRoute', route: view.routes[(at + 1) % view.routes.length] };
|
|
251
|
+
}
|
|
252
|
+
if (key.return) {
|
|
253
|
+
const row = view.rows[view.index];
|
|
254
|
+
return row ? { type: 'pickModel', model: row } : { type: 'customStarted' };
|
|
255
|
+
}
|
|
256
|
+
return input === 'q' ? { type: 'quit' } : null;
|
|
257
|
+
}
|
|
258
|
+
case 'help':
|
|
259
|
+
if (key.escape)
|
|
260
|
+
return { type: 'back' };
|
|
261
|
+
return input === 'q' ? { type: 'quit' } : null;
|
|
168
262
|
case 'setup':
|
|
169
263
|
return key.escape || input === 'q' ? { type: 'quit' } : null;
|
|
170
264
|
}
|
package/dist/lib/model.js.map
CHANGED
|
@@ -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":"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"}
|
package/dist/lib/paths.d.ts
CHANGED
|
@@ -4,5 +4,6 @@ export declare function resolveHome(env: Env, packageRoot: string, home: string)
|
|
|
4
4
|
export declare const HOME_DIR: string;
|
|
5
5
|
export declare const ENV_PATH: string;
|
|
6
6
|
export declare const DB_PATH: string;
|
|
7
|
+
export declare const SETTINGS_PATH: string;
|
|
7
8
|
export declare const PACKAGE_JSON_PATH: string;
|
|
8
9
|
export {};
|
package/dist/lib/paths.js
CHANGED
|
@@ -3,7 +3,7 @@ import { dirname, join, resolve, sep } from 'node:path';
|
|
|
3
3
|
import { fileURLToPath } from 'node:url';
|
|
4
4
|
// src/lib and dist/lib both sit two levels below the package root, so this holds in dev and after build.
|
|
5
5
|
export const PACKAGE_ROOT = resolve(dirname(fileURLToPath(import.meta.url)), '..', '..');
|
|
6
|
-
// Where .env and data/ live. A checkout keeps them beside the code; a package installed under
|
|
6
|
+
// Where .env, settings.json and data/ live. A checkout keeps them beside the code; a package installed under
|
|
7
7
|
// node_modules must not, because the next install wipes the directory. B3_DICT_HOME overrides both.
|
|
8
8
|
export function resolveHome(env, packageRoot, home) {
|
|
9
9
|
const forced = env.B3_DICT_HOME?.trim();
|
|
@@ -18,5 +18,6 @@ export function resolveHome(env, packageRoot, home) {
|
|
|
18
18
|
export const HOME_DIR = resolveHome(process.env, PACKAGE_ROOT, homedir());
|
|
19
19
|
export const ENV_PATH = join(HOME_DIR, '.env');
|
|
20
20
|
export const DB_PATH = join(HOME_DIR, 'data', 'b3-dict.db');
|
|
21
|
+
export const SETTINGS_PATH = join(HOME_DIR, 'settings.json');
|
|
21
22
|
export const PACKAGE_JSON_PATH = join(PACKAGE_ROOT, 'package.json');
|
|
22
23
|
//# sourceMappingURL=paths.js.map
|
package/dist/lib/paths.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/lib/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,yGAAyG;AACzG,MAAM,CAAC,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAIzF,
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/lib/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,yGAAyG;AACzG,MAAM,CAAC,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAIzF,6GAA6G;AAC7G,oGAAoG;AACpG,MAAM,UAAU,WAAW,CAAC,GAAQ,EAAE,WAAmB,EAAE,IAAY;IACrE,MAAM,MAAM,GAAG,GAAG,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC;IACxC,IAAI,MAAM;QAAE,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC;IACnC,IAAI,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;QACpD,MAAM,QAAQ,GAAG,GAAG,CAAC,aAAa,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC5E,OAAO,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IACnC,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,MAAM,CAAC,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,CAAC;AAE1E,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AAC/C,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;AAC5D,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;AAC7D,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { type Result } from './types.js';
|
|
3
|
+
declare const SettingsFile: z.ZodObject<{
|
|
4
|
+
route: z.ZodOptional<z.ZodEnum<{
|
|
5
|
+
openrouter: "openrouter";
|
|
6
|
+
openai: "openai";
|
|
7
|
+
}>>;
|
|
8
|
+
models: z.ZodOptional<z.ZodObject<{
|
|
9
|
+
openrouter: z.ZodOptional<z.ZodString>;
|
|
10
|
+
openai: z.ZodOptional<z.ZodString>;
|
|
11
|
+
}, z.core.$strip>>;
|
|
12
|
+
}, z.core.$strip>;
|
|
13
|
+
export type Settings = z.infer<typeof SettingsFile>;
|
|
14
|
+
export declare function readSettings(path: string): Result<Settings>;
|
|
15
|
+
export declare function writeSettings(path: string, settings: Settings): Result<void>;
|
|
16
|
+
export {};
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import { dirname } from 'node:path';
|
|
3
|
+
import { z } from 'zod';
|
|
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.object({ openrouter: z.string().optional(), openai: z.string().optional() }).optional(),
|
|
10
|
+
});
|
|
11
|
+
// A missing file is no settings. A broken one is an error the caller reports and then ignores.
|
|
12
|
+
export function readSettings(path) {
|
|
13
|
+
if (!existsSync(path))
|
|
14
|
+
return ok({});
|
|
15
|
+
try {
|
|
16
|
+
const parsed = SettingsFile.safeParse(JSON.parse(readFileSync(path, 'utf8')));
|
|
17
|
+
return parsed.success ? ok(parsed.data) : err(parsed.error.message);
|
|
18
|
+
}
|
|
19
|
+
catch (e) {
|
|
20
|
+
return err(messageOf(e));
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
export function writeSettings(path, settings) {
|
|
24
|
+
try {
|
|
25
|
+
mkdirSync(dirname(path), { recursive: true });
|
|
26
|
+
writeFileSync(path, `${JSON.stringify(settings, null, 2)}\n`);
|
|
27
|
+
return ok(undefined);
|
|
28
|
+
}
|
|
29
|
+
catch (e) {
|
|
30
|
+
return err(messageOf(e));
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=settings.js.map
|
|
@@ -0,0 +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,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,MAAM,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE;CAClG,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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text } from 'ink';
|
|
3
|
+
import { Gutter, GutterLine } from '../components/gutter-line.js';
|
|
4
|
+
import { helpSections, TUI } from '../lib/messages.js';
|
|
5
|
+
import { C } from '../lib/theme.js';
|
|
6
|
+
// Keys, settings and file paths on one screen. The first column is as wide as its longest entry.
|
|
7
|
+
export function Help({ paths }) {
|
|
8
|
+
const sections = helpSections(paths);
|
|
9
|
+
const width = Math.max(...sections.flatMap((s) => s.rows.map(([key]) => key.length))) + 2;
|
|
10
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { color: C.sapphire, bold: true, children: TUI.helpHeading }), _jsxs(Gutter, { children: [sections.map((section, at) => (_jsxs(Box, { flexDirection: "column", children: [at > 0 && _jsx(GutterLine, {}), _jsx(GutterLine, { children: _jsx(Text, { color: C.sapphire, children: section.title }) }), section.rows.map(([key, text]) => (_jsxs(GutterLine, { children: [_jsx(Box, { width: width, flexShrink: 0, children: _jsx(Text, { color: C.mauve, children: key }) }), _jsx(Text, { color: C.label, children: text })] }, key)))] }, section.title))), _jsx(GutterLine, {}), _jsx(GutterLine, { children: _jsx(Text, { color: C.overlay1, children: TUI.helpHints }) })] })] }));
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=help.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"help.js","sourceRoot":"","sources":["../../src/screens/help.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,GAAG,EAAkB,MAAM,oBAAoB,CAAC;AACvE,OAAO,EAAE,CAAC,EAAE,MAAM,iBAAiB,CAAC;AAEpC,iGAAiG;AACjG,MAAM,UAAU,IAAI,CAAC,EAAE,KAAK,EAAwB;IAClD,MAAM,QAAQ,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IACrC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC1F,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,KAAC,IAAI,IAAC,KAAK,EAAE,CAAC,CAAC,QAAQ,EAAE,IAAI,kBAC1B,GAAG,CAAC,WAAW,GACX,EACP,MAAC,MAAM,eACJ,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAC7B,MAAC,GAAG,IAAqB,aAAa,EAAC,QAAQ,aAC5C,EAAE,GAAG,CAAC,IAAI,KAAC,UAAU,KAAG,EACzB,KAAC,UAAU,cACT,KAAC,IAAI,IAAC,KAAK,EAAE,CAAC,CAAC,QAAQ,YAAG,OAAO,CAAC,KAAK,GAAQ,GACpC,EACZ,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CACjC,MAAC,UAAU,eACT,KAAC,GAAG,IAAC,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,YAC9B,KAAC,IAAI,IAAC,KAAK,EAAE,CAAC,CAAC,KAAK,YAAG,GAAG,GAAQ,GAC9B,EACN,KAAC,IAAI,IAAC,KAAK,EAAE,CAAC,CAAC,KAAK,YAAG,IAAI,GAAQ,KAJpB,GAAG,CAKP,CACd,CAAC,KAZM,OAAO,CAAC,KAAK,CAajB,CACP,CAAC,EACF,KAAC,UAAU,KAAG,EACd,KAAC,UAAU,cACT,KAAC,IAAI,IAAC,KAAK,EAAE,CAAC,CAAC,QAAQ,YAAG,GAAG,CAAC,SAAS,GAAQ,GACpC,IACN,IACL,CACP,CAAC;AACJ,CAAC"}
|
package/dist/screens/home.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import type { Counts } from '../lib/db.js';
|
|
|
2
2
|
import type { View } from '../lib/model.js';
|
|
3
3
|
import type { Config } from '../lib/types.js';
|
|
4
4
|
type HomeView = Exclude<View, {
|
|
5
|
-
screen: 'setup' | 'list';
|
|
5
|
+
screen: 'setup' | 'list' | 'model' | 'help';
|
|
6
6
|
}>;
|
|
7
7
|
type Props = {
|
|
8
8
|
view: HomeView;
|
package/dist/screens/home.js
CHANGED
|
@@ -20,7 +20,7 @@ function Body({ view, config, counts, notice }) {
|
|
|
20
20
|
switch (view.screen) {
|
|
21
21
|
case 'home': {
|
|
22
22
|
const onMenu = view.focus !== 'input';
|
|
23
|
-
return (_jsxs(_Fragment, { children: [_jsx(GutterLine, { children: _jsx(QueryInput, { draft: view.draft, active: !onMenu }) }), _jsx(GutterLine, {}), _jsx(GutterLine, { children: _jsx(Text, { color: C.overlay1, children: TUI.homeMenuTitle }) }), ['history', 'wordbook'].map((which) => (_jsx(MenuRow, {
|
|
23
|
+
return (_jsxs(_Fragment, { children: [_jsx(GutterLine, { children: _jsx(QueryInput, { draft: view.draft, active: !onMenu }) }), _jsx(GutterLine, {}), _jsx(GutterLine, { children: _jsx(Text, { color: C.overlay1, children: TUI.homeMenuTitle }) }), ['history', 'wordbook'].map((which) => (_jsx(MenuRow, { label: TUI.menuLabel[which], active: view.focus === which, detail: `(${counts?.[which] ?? '…'})` }, which))), _jsx(MenuRow, { label: TUI.menuLabel.model, active: view.focus === 'model', detail: shortModel(config.model) }), _jsx(MenuRow, { label: TUI.menuLabel.help, active: view.focus === 'help' }), [view.notice, notice].map((text) => text && (_jsx(GutterLine, { children: _jsx(Text, { color: C.red, children: text }) }, text))), _jsx(GutterLine, {}), _jsx(Hints, { children: onMenu ? TUI.homeMenuHints : view.draft.text === '' ? TUI.homeHintsEmpty : TUI.homeHints })] }));
|
|
24
24
|
}
|
|
25
25
|
case 'asking':
|
|
26
26
|
return (_jsxs(_Fragment, { children: [_jsx(GutterLine, { children: _jsx(QueryInput, { text: view.request.query }) }), _jsx(GutterLine, {}), _jsx(Waiting, { model: shortModel(config.model), retry: view.retry }, view.request.id), _jsx(Hints, { children: TUI.askingHints(backTo(view.origin)) })] }));
|
|
@@ -30,8 +30,8 @@ function Body({ view, config, counts, notice }) {
|
|
|
30
30
|
return (_jsxs(_Fragment, { children: [_jsx(GutterLine, { children: _jsx(QueryInput, { text: view.query }) }), _jsx(GutterLine, {}), _jsx(MessageBlock, { text: failureText(view.failure, config, view.query) }), _jsx(GutterLine, {}), _jsx(Hints, { children: TUI.failedHints(backTo(view.origin)) })] }));
|
|
31
31
|
}
|
|
32
32
|
}
|
|
33
|
-
function MenuRow({
|
|
34
|
-
return (_jsxs(GutterLine, { children: [_jsx(Cursor, { active: active }), _jsx(Text, { color: active ? C.mauve : C.label, bold: active, children:
|
|
33
|
+
function MenuRow({ label, active, detail }) {
|
|
34
|
+
return (_jsxs(GutterLine, { children: [_jsx(Cursor, { active: active }), _jsx(Text, { color: active ? C.mauve : C.label, bold: active, children: label }), detail && _jsxs(Text, { color: C.overlay0, children: [" ", detail] })] }));
|
|
35
35
|
}
|
|
36
36
|
// Spinner, elapsed seconds, and the retry line when the policy is waiting or regenerating.
|
|
37
37
|
function Waiting({ model, retry }) {
|
package/dist/screens/home.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"home.js","sourceRoot":"","sources":["../../src/screens/home.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,OAAO,MAAM,aAAa,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAE1D,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAGzE,OAAO,EAAE,CAAC,EAAE,MAAM,iBAAiB,CAAC;AAQpC,MAAM,KAAK,GAAG,CAAC,EAAE,QAAQ,EAAwB,EAAE,EAAE,CAAC,CACpD,KAAC,UAAU,cACT,KAAC,IAAI,IAAC,KAAK,EAAE,CAAC,CAAC,QAAQ,YAAG,QAAQ,GAAQ,GAC/B,CACd,CAAC;AAEF,MAAM,UAAU,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAS;IAC1D,gFAAgF;IAChF,MAAM,MAAM,GAAG,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;IAC1D,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,KAAC,IAAI,IAAC,KAAK,EAAE,CAAC,CAAC,QAAQ,EAAE,IAAI,kBAC1B,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,GACpD,EACN,CAAC,MAAM,IAAI,KAAC,IAAI,IAAC,KAAK,EAAE,CAAC,CAAC,QAAQ,YAAG,GAAG,CAAC,eAAe,GAAQ,EACjE,KAAC,MAAM,cACL,KAAC,IAAI,IAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAI,GAC7D,IACL,CACP,CAAC;AACJ,CAAC;AAED,SAAS,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAS;IACnD,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC;QACpB,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,KAAK,OAAO,CAAC;YACtC,OAAO,CACL,8BACE,KAAC,UAAU,cACT,KAAC,UAAU,IAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,MAAM,GAAI,GACvC,EACb,KAAC,UAAU,KAAG,EACd,KAAC,UAAU,cACT,KAAC,IAAI,IAAC,KAAK,EAAE,CAAC,CAAC,QAAQ,YAAG,GAAG,CAAC,aAAa,GAAQ,GACxC,EACX,CAAC,SAAS,EAAE,UAAU,CAAW,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CACjD,KAAC,OAAO,IAAa,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,KAAK,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"home.js","sourceRoot":"","sources":["../../src/screens/home.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { View } from '../lib/model.js';
|
|
2
|
+
type PickerView = Extract<View, {
|
|
3
|
+
screen: 'model';
|
|
4
|
+
}>;
|
|
5
|
+
export declare function ModelPicker({ view, pinned }: {
|
|
6
|
+
view: PickerView;
|
|
7
|
+
pinned?: {
|
|
8
|
+
route?: string;
|
|
9
|
+
model?: string;
|
|
10
|
+
};
|
|
11
|
+
}): import("react").JSX.Element;
|
|
12
|
+
export {};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text } from 'ink';
|
|
3
|
+
import { Cursor } from '../components/cursor.js';
|
|
4
|
+
import { Gutter, GutterLine } from '../components/gutter-line.js';
|
|
5
|
+
import { QueryInput } from '../components/query-input.js';
|
|
6
|
+
import { DEFAULT_MODEL } from '../lib/config.js';
|
|
7
|
+
import { TUI } from '../lib/messages.js';
|
|
8
|
+
import { C } from '../lib/theme.js';
|
|
9
|
+
const Muted = ({ children }) => (_jsx(GutterLine, { children: _jsx(Text, { color: C.overlay1, children: children }) }));
|
|
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;
|
|
15
|
+
const note = (id) => (id === DEFAULT_MODEL[route] ? TUI.modelDefault : TUI.modelNotes[id]);
|
|
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) => {
|
|
18
|
+
const active = !draft && at === index;
|
|
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));
|
|
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 }), [rejected && TUI.customRejected(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 })] })] }));
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=model-picker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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.
|
|
3
|
+
"version": "0.3.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",
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"!dist/lib/fixtures.*"
|
|
14
14
|
],
|
|
15
15
|
"bin": {
|
|
16
|
-
"b3dict": "
|
|
16
|
+
"b3dict": "dist/cli.js"
|
|
17
17
|
},
|
|
18
18
|
"scripts": {
|
|
19
19
|
"dev": "tsx src/cli.tsx",
|