b3-dict 0.0.0-stage → 0.2.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 +50 -2
- package/dist/app.d.ts +15 -0
- package/dist/app.js +95 -0
- package/dist/app.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +114 -0
- package/dist/cli.js.map +1 -0
- package/dist/components/answer-view.d.ts +6 -0
- package/dist/components/answer-view.js +27 -0
- package/dist/components/answer-view.js.map +1 -0
- package/dist/components/banner.d.ts +5 -0
- package/dist/components/banner.js +12 -0
- package/dist/components/banner.js.map +1 -0
- package/dist/components/cursor.d.ts +3 -0
- package/dist/components/cursor.js +6 -0
- package/dist/components/cursor.js.map +1 -0
- package/dist/components/gutter-line.d.ts +7 -0
- package/dist/components/gutter-line.js +12 -0
- package/dist/components/gutter-line.js.map +1 -0
- package/dist/components/lookup-list.d.ts +12 -0
- package/dist/components/lookup-list.js +23 -0
- package/dist/components/lookup-list.js.map +1 -0
- package/dist/components/message-block.d.ts +3 -0
- package/dist/components/message-block.js +11 -0
- package/dist/components/message-block.js.map +1 -0
- package/dist/components/query-input.d.ts +7 -0
- package/dist/components/query-input.js +21 -0
- package/dist/components/query-input.js.map +1 -0
- package/dist/lib/args.d.ts +15 -0
- package/dist/lib/args.js +41 -0
- package/dist/lib/args.js.map +1 -0
- package/dist/lib/ask.d.ts +4 -0
- package/dist/lib/ask.js +54 -0
- package/dist/lib/ask.js.map +1 -0
- package/dist/lib/config.d.ts +8 -0
- package/dist/lib/config.js +52 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/db.d.ts +27 -0
- package/dist/lib/db.js +98 -0
- package/dist/lib/db.js.map +1 -0
- package/dist/lib/envelope.d.ts +37 -0
- package/dist/lib/envelope.js +74 -0
- package/dist/lib/envelope.js.map +1 -0
- package/dist/lib/lookup.d.ts +25 -0
- package/dist/lib/lookup.js +41 -0
- package/dist/lib/lookup.js.map +1 -0
- package/dist/lib/messages.d.ts +90 -0
- package/dist/lib/messages.js +192 -0
- package/dist/lib/messages.js.map +1 -0
- package/dist/lib/model.d.ts +176 -0
- package/dist/lib/model.js +249 -0
- package/dist/lib/model.js.map +1 -0
- package/dist/lib/paths.d.ts +9 -0
- package/dist/lib/paths.js +23 -0
- package/dist/lib/paths.js.map +1 -0
- package/dist/lib/policy.d.ts +22 -0
- package/dist/lib/policy.js +92 -0
- package/dist/lib/policy.js.map +1 -0
- package/dist/lib/render-text.d.ts +2 -0
- package/dist/lib/render-text.js +28 -0
- package/dist/lib/render-text.js.map +1 -0
- package/dist/lib/settings.d.ts +9 -0
- package/dist/lib/settings.js +29 -0
- package/dist/lib/settings.js.map +1 -0
- package/dist/lib/theme.d.ts +14 -0
- package/dist/lib/theme.js +16 -0
- package/dist/lib/theme.js.map +1 -0
- package/dist/lib/time.d.ts +1 -0
- package/dist/lib/time.js +23 -0
- package/dist/lib/time.js.map +1 -0
- package/dist/lib/types.d.ts +47 -0
- package/dist/lib/types.js +7 -0
- package/dist/lib/types.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 +14 -0
- package/dist/screens/home.js +45 -0
- package/dist/screens/home.js.map +1 -0
- package/dist/screens/list.d.ts +9 -0
- package/dist/screens/list.js +13 -0
- package/dist/screens/list.js.map +1 -0
- package/dist/screens/model-picker.d.ts +9 -0
- package/dist/screens/model-picker.js +20 -0
- package/dist/screens/model-picker.js.map +1 -0
- package/dist/screens/setup.d.ts +5 -0
- package/dist/screens/setup.js +11 -0
- package/dist/screens/setup.js.map +1 -0
- package/package.json +48 -4
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
import { keyVarFor } from './config.js';
|
|
2
|
+
// Vietnamese chrome for both surfaces, so they say the same thing. Nothing user-facing lives elsewhere.
|
|
3
|
+
export const KEY_URL = {
|
|
4
|
+
openrouter: 'https://openrouter.ai/keys',
|
|
5
|
+
openai: 'https://platform.openai.com/api-keys',
|
|
6
|
+
};
|
|
7
|
+
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
|
+
|
|
9
|
+
Cách dùng:
|
|
10
|
+
b3dict mở giao diện hỏi đáp
|
|
11
|
+
b3dict "<câu hỏi>" [tuỳ chọn] hỏi một lần rồi thoát
|
|
12
|
+
|
|
13
|
+
Ví dụ:
|
|
14
|
+
b3dict "take for granted"
|
|
15
|
+
b3dict "Is draggable an English word?"
|
|
16
|
+
b3dict "pragmatic" --model z-ai/glm-4.6
|
|
17
|
+
|
|
18
|
+
Tuỳ chọn:
|
|
19
|
+
--fresh bỏ qua đáp án đã lưu, hỏi lại model
|
|
20
|
+
--model <id> dùng model này cho một lần hỏi (luôn hỏi lại model)
|
|
21
|
+
--json in nguyên answer envelope dạng JSON
|
|
22
|
+
-h, --help hiện trợ giúp
|
|
23
|
+
-V, --version hiện phiên bản
|
|
24
|
+
|
|
25
|
+
Mã thoát:
|
|
26
|
+
0 thành công · 1 lỗi không rõ · 2 lỗi cách dùng
|
|
27
|
+
3 lỗi cấu hình (key, provider, model) · 4 lỗi provider`;
|
|
28
|
+
// One-shot only: usage errors and the lines around a lookup.
|
|
29
|
+
export const CLI = {
|
|
30
|
+
unknownOption: (name) => `Không có tuỳ chọn ${name}`,
|
|
31
|
+
badArguments: (detail) => `Tham số không hợp lệ: ${detail}`,
|
|
32
|
+
missingQuery: 'Thiếu câu hỏi. Ví dụ: b3dict "take for granted"',
|
|
33
|
+
missingModel: '--model cần một tên model. Ví dụ: --model z-ai/glm-4.6',
|
|
34
|
+
dbOpenFailed: (path, detail) => `✗ Không mở được ${path}: ${detail}`,
|
|
35
|
+
unknownError: (detail) => `✗ Lỗi không rõ: ${detail}`,
|
|
36
|
+
settingsIgnored: (path, detail) => `✗ Bỏ qua ${path} vì đọc không được: ${detail}`,
|
|
37
|
+
};
|
|
38
|
+
// Where esc leads from a view that came from a list, by its heading; otherwise home.
|
|
39
|
+
export const backTo = (origin) => (origin ? TUI.listHeading[origin.which] : 'home');
|
|
40
|
+
export const TUI = {
|
|
41
|
+
subtitle: 'AI-first dictionary',
|
|
42
|
+
needsTerminal: 'Giao diện b3dict cần chạy trong terminal. Muốn hỏi một lần: b3dict "<câu hỏi>"',
|
|
43
|
+
setupHeading: 'Setup',
|
|
44
|
+
homeHeading: 'Home',
|
|
45
|
+
countFailed: (detail) => `✗ Không đếm được lookup: ${detail}`,
|
|
46
|
+
homeInstruction: 'Hỏi về từ, thành ngữ, cách dùng. Trộn tiếng Việt và English đều được.',
|
|
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',
|
|
49
|
+
homeMenuHints: '↑↓ chọn · enter mở · esc về ô gõ · q thoát',
|
|
50
|
+
homeMenuTitle: '── hoặc chọn: ──',
|
|
51
|
+
menuLabel: { history: 'History ', wordbook: 'Wordbook', model: 'Model ', help: 'Help ' },
|
|
52
|
+
listHeading: { history: 'History', wordbook: 'Wordbook' },
|
|
53
|
+
listCount: {
|
|
54
|
+
history: (n) => `${n} lookup${n === 1 ? '' : 's'}`,
|
|
55
|
+
wordbook: (n) => `${n} đã lưu`,
|
|
56
|
+
},
|
|
57
|
+
listEmpty: {
|
|
58
|
+
history: 'Chưa có lookup nào. Về home và gõ một câu hỏi.',
|
|
59
|
+
wordbook: 'Chưa lưu từ nào. Bấm s trên một đáp án để lưu ★.',
|
|
60
|
+
},
|
|
61
|
+
listHints: {
|
|
62
|
+
history: '↑↓ di chuyển · enter mở · s lưu/bỏ ★ · esc về home · q thoát',
|
|
63
|
+
wordbook: '↑↓ di chuyển · enter mở · s bỏ lưu · esc về home · q thoát',
|
|
64
|
+
},
|
|
65
|
+
listEmptyHints: 'esc về home · q thoát',
|
|
66
|
+
listFailed: (detail) => `✗ Không đọc được danh sách: ${detail}`,
|
|
67
|
+
moreAbove: (n) => `↑ ${n} nữa`,
|
|
68
|
+
moreBelow: (n) => `↓ ${n} nữa`,
|
|
69
|
+
savedAgo: (age) => (age === 'vừa xong' ? 'lưu vừa xong' : `lưu ${age} trước`),
|
|
70
|
+
asking: (model) => `đang hỏi ${model}…`,
|
|
71
|
+
askingHints: (backTo) => `esc về ${backTo}`,
|
|
72
|
+
cached: 'đáp án đã lưu từ trước',
|
|
73
|
+
answerHints: (saved, backTo) => `r hỏi lại · s ${saved ? 'bỏ lưu' : 'lưu ★'} · esc về ${backTo} · q thoát`,
|
|
74
|
+
saveFailed: (detail) => `✗ Không lưu được: ${detail}`,
|
|
75
|
+
failedHints: (backTo) => `r thử lại · esc về ${backTo} · q thoát`,
|
|
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: (model) => `B3_DICT_MODEL=${model} đang đặt, nên lần mở sau b3dict vẫn dùng ${model}.`,
|
|
86
|
+
pickerHints: '↑↓ chọn · enter dùng · esc về home · q thoát',
|
|
87
|
+
customHints: 'enter dùng · esc huỷ',
|
|
88
|
+
settingsSaveFailed: (detail) => `✗ Không lưu được lựa chọn, model chỉ đổi cho lần này: ${detail}`,
|
|
89
|
+
helpHeading: 'Help',
|
|
90
|
+
helpHints: 'esc về home · q thoát',
|
|
91
|
+
isWord: '✓ từ có thật',
|
|
92
|
+
notWord: '✗ không phải từ chuẩn',
|
|
93
|
+
};
|
|
94
|
+
// The Help screen: keys by place, the variables b3dict reads, and where its files are.
|
|
95
|
+
export const helpSections = (paths) => [
|
|
96
|
+
{
|
|
97
|
+
title: 'Home',
|
|
98
|
+
rows: [
|
|
99
|
+
['enter', 'hỏi câu đang gõ'],
|
|
100
|
+
['↓', 'xuống menu: History, Wordbook, Model, Help'],
|
|
101
|
+
['esc', 'xoá ô; ô trống thì thoát'],
|
|
102
|
+
['ctrl+c', 'thoát (q trong ô gõ chỉ là chữ q)'],
|
|
103
|
+
],
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
title: 'Đáp án',
|
|
107
|
+
rows: [
|
|
108
|
+
['r', 'hỏi lại model, bỏ qua đáp án đã lưu'],
|
|
109
|
+
['s', 'lưu ★ hoặc bỏ lưu'],
|
|
110
|
+
['esc', 'về chỗ vừa mở nó'],
|
|
111
|
+
],
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
title: 'History, Wordbook',
|
|
115
|
+
rows: [
|
|
116
|
+
['↑↓', 'di chuyển'],
|
|
117
|
+
['enter', 'mở đáp án đã lưu, không gọi model'],
|
|
118
|
+
['s', 'lưu ★ hoặc bỏ lưu dòng đang chọn'],
|
|
119
|
+
],
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
title: 'Cấu hình',
|
|
123
|
+
rows: [
|
|
124
|
+
['OPENROUTER_API_KEY', 'key OpenRouter, được ưu tiên khi có cả hai'],
|
|
125
|
+
['OPENAI_API_KEY', 'key OpenAI'],
|
|
126
|
+
['B3_DICT_MODEL', 'ép model, thắng lựa chọn trong Model'],
|
|
127
|
+
['B3_DICT_PROVIDER', 'openrouter hoặc openai'],
|
|
128
|
+
['B3_DICT_HOME', 'thư mục chứa .env, settings.json, data/ (đặt ngoài .env)'],
|
|
129
|
+
],
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
title: 'File',
|
|
133
|
+
rows: [
|
|
134
|
+
['.env', paths.env],
|
|
135
|
+
['settings', paths.settings],
|
|
136
|
+
['lookups', paths.db],
|
|
137
|
+
],
|
|
138
|
+
},
|
|
139
|
+
];
|
|
140
|
+
const setupSteps = (envPath) => `1. Tạo key: ${KEY_URL.openrouter}
|
|
141
|
+
(hoặc ${KEY_URL.openai})
|
|
142
|
+
2. echo "OPENROUTER_API_KEY=sk-or-…" >> ${envPath}
|
|
143
|
+
3. Chạy lại b3dict`;
|
|
144
|
+
export function configProblemText(problem, envPath) {
|
|
145
|
+
switch (problem.code) {
|
|
146
|
+
case 'no-key':
|
|
147
|
+
return `✗ Không tìm thấy API key
|
|
148
|
+
|
|
149
|
+
B3 Dict cần OPENROUTER_API_KEY hoặc OPENAI_API_KEY trong ${envPath}
|
|
150
|
+
|
|
151
|
+
${setupSteps(envPath)}`;
|
|
152
|
+
case 'route-key-missing':
|
|
153
|
+
return `✗ B3_DICT_PROVIDER=${problem.route} nhưng chưa có ${keyVarFor(problem.route)}
|
|
154
|
+
|
|
155
|
+
Thêm ${keyVarFor(problem.route)} vào ${envPath} (tạo key: ${KEY_URL[problem.route]}),
|
|
156
|
+
hoặc bỏ B3_DICT_PROVIDER để tự chọn route theo key đang có.`;
|
|
157
|
+
case 'bad-provider':
|
|
158
|
+
return `✗ B3_DICT_PROVIDER=${problem.value} không hợp lệ
|
|
159
|
+
|
|
160
|
+
Chỉ nhận: openrouter hoặc openai.`;
|
|
161
|
+
case 'model-needs-openrouter':
|
|
162
|
+
return `✗ Model ${problem.model} cần route OpenRouter
|
|
163
|
+
|
|
164
|
+
Tên model có dấu "/" là id của OpenRouter. Thêm OPENROUTER_API_KEY vào ${envPath}
|
|
165
|
+
(tạo key: ${KEY_URL.openrouter}), hoặc dùng tên model của OpenAI như gpt-5-mini.`;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
export function failureText(failure, config, query) {
|
|
169
|
+
switch (failure.reason) {
|
|
170
|
+
case 'invalid-key':
|
|
171
|
+
return `✗ API key không hợp lệ (${keyVarFor(config.route)})
|
|
172
|
+
Tạo key mới: ${KEY_URL[config.route]}
|
|
173
|
+
Chi tiết: ${failure.detail}`;
|
|
174
|
+
case 'transient':
|
|
175
|
+
return `✗ Không gọi được ${config.route} sau khi đã thử lại
|
|
176
|
+
Chi tiết: ${failure.detail}`;
|
|
177
|
+
case 'rejected':
|
|
178
|
+
return `✗ ${config.route} từ chối yêu cầu
|
|
179
|
+
Kiểm tra lại tên model (${config.model}), hoặc thử: b3dict ${JSON.stringify(query)} --model <id>
|
|
180
|
+
Chi tiết: ${failure.detail}`;
|
|
181
|
+
case 'bad-output':
|
|
182
|
+
return `✗ Model ${config.model} không trả về đáp án dùng được
|
|
183
|
+
Thử model khác: b3dict ${JSON.stringify(query)} --model <id>
|
|
184
|
+
Chi tiết: ${failure.detail}`;
|
|
185
|
+
case 'unexpected':
|
|
186
|
+
return CLI.unknownError(failure.detail);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
export function retryText(event) {
|
|
190
|
+
return event.type === 'transient' ? `thử lại ${event.attempt}/${event.of}…` : 'đáp án chưa dùng được, hỏi lại model…';
|
|
191
|
+
}
|
|
192
|
+
//# sourceMappingURL=messages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/lib/messages.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
import type { ListKind, ListRow, LookupRow } from './db.js';
|
|
2
|
+
import type { Answer } from './envelope.js';
|
|
3
|
+
import type { LookupOutcome } from './lookup.js';
|
|
4
|
+
import type { RetryEvent } from './policy.js';
|
|
5
|
+
import type { Config, ConfigProblem, Failure, Route } from './types.js';
|
|
6
|
+
export type Draft = {
|
|
7
|
+
text: string;
|
|
8
|
+
cursor: number;
|
|
9
|
+
};
|
|
10
|
+
export type AskRequest = {
|
|
11
|
+
id: number;
|
|
12
|
+
query: string;
|
|
13
|
+
fresh: boolean;
|
|
14
|
+
};
|
|
15
|
+
export type Origin = {
|
|
16
|
+
which: ListKind;
|
|
17
|
+
index: number;
|
|
18
|
+
};
|
|
19
|
+
export type Focus = 'input' | ListKind | 'model' | 'help';
|
|
20
|
+
export type View = {
|
|
21
|
+
screen: 'setup';
|
|
22
|
+
problem: ConfigProblem;
|
|
23
|
+
} | {
|
|
24
|
+
screen: 'home';
|
|
25
|
+
draft: Draft;
|
|
26
|
+
focus: Focus;
|
|
27
|
+
notice?: string;
|
|
28
|
+
} | {
|
|
29
|
+
screen: 'list';
|
|
30
|
+
which: ListKind;
|
|
31
|
+
rows: ListRow[];
|
|
32
|
+
index: number;
|
|
33
|
+
notice?: string;
|
|
34
|
+
} | {
|
|
35
|
+
screen: 'asking';
|
|
36
|
+
request: AskRequest;
|
|
37
|
+
retry?: RetryEvent;
|
|
38
|
+
origin?: Origin;
|
|
39
|
+
} | ({
|
|
40
|
+
screen: 'answer';
|
|
41
|
+
query: string;
|
|
42
|
+
notice?: string;
|
|
43
|
+
origin?: Origin;
|
|
44
|
+
} & LookupOutcome) | {
|
|
45
|
+
screen: 'failed';
|
|
46
|
+
query: string;
|
|
47
|
+
fresh: boolean;
|
|
48
|
+
failure: Failure;
|
|
49
|
+
origin?: Origin;
|
|
50
|
+
} | {
|
|
51
|
+
screen: 'model';
|
|
52
|
+
route: Route;
|
|
53
|
+
rows: string[];
|
|
54
|
+
current: string;
|
|
55
|
+
index: number;
|
|
56
|
+
draft?: Draft;
|
|
57
|
+
rejected?: string;
|
|
58
|
+
} | {
|
|
59
|
+
screen: 'help';
|
|
60
|
+
};
|
|
61
|
+
export type Active = {
|
|
62
|
+
route: Route;
|
|
63
|
+
model: string;
|
|
64
|
+
};
|
|
65
|
+
export type Model = {
|
|
66
|
+
requests: number;
|
|
67
|
+
active?: Active;
|
|
68
|
+
view: View;
|
|
69
|
+
};
|
|
70
|
+
export type Msg = {
|
|
71
|
+
type: 'typed';
|
|
72
|
+
text: string;
|
|
73
|
+
} | {
|
|
74
|
+
type: 'erased';
|
|
75
|
+
} | {
|
|
76
|
+
type: 'moved';
|
|
77
|
+
by: -1 | 1;
|
|
78
|
+
} | {
|
|
79
|
+
type: 'cleared';
|
|
80
|
+
} | {
|
|
81
|
+
type: 'focused';
|
|
82
|
+
by: -1 | 1;
|
|
83
|
+
} | {
|
|
84
|
+
type: 'focusInput';
|
|
85
|
+
} | {
|
|
86
|
+
type: 'submitted';
|
|
87
|
+
} | {
|
|
88
|
+
type: 'listShown';
|
|
89
|
+
which: ListKind;
|
|
90
|
+
rows: ListRow[];
|
|
91
|
+
index: number;
|
|
92
|
+
notice?: string;
|
|
93
|
+
} | {
|
|
94
|
+
type: 'listMoved';
|
|
95
|
+
by: -1 | 1;
|
|
96
|
+
} | {
|
|
97
|
+
type: 'entryOpened';
|
|
98
|
+
entry: LookupRow;
|
|
99
|
+
answer: Answer;
|
|
100
|
+
origin: Origin;
|
|
101
|
+
} | {
|
|
102
|
+
type: 'openFailed';
|
|
103
|
+
query: string;
|
|
104
|
+
detail: string;
|
|
105
|
+
origin: Origin;
|
|
106
|
+
} | {
|
|
107
|
+
type: 'retrying';
|
|
108
|
+
requestId: number;
|
|
109
|
+
event: RetryEvent;
|
|
110
|
+
} | {
|
|
111
|
+
type: 'answered';
|
|
112
|
+
requestId: number;
|
|
113
|
+
outcome: LookupOutcome;
|
|
114
|
+
} | {
|
|
115
|
+
type: 'failed';
|
|
116
|
+
requestId: number;
|
|
117
|
+
failure: Failure;
|
|
118
|
+
} | {
|
|
119
|
+
type: 'reasked';
|
|
120
|
+
} | {
|
|
121
|
+
type: 'entrySaved';
|
|
122
|
+
entry: LookupRow;
|
|
123
|
+
} | {
|
|
124
|
+
type: 'saveFailed';
|
|
125
|
+
detail: string;
|
|
126
|
+
} | {
|
|
127
|
+
type: 'modelShown';
|
|
128
|
+
} | {
|
|
129
|
+
type: 'pickerMoved';
|
|
130
|
+
by: -1 | 1;
|
|
131
|
+
} | {
|
|
132
|
+
type: 'customStarted';
|
|
133
|
+
} | {
|
|
134
|
+
type: 'customCancelled';
|
|
135
|
+
} | {
|
|
136
|
+
type: 'customRejected';
|
|
137
|
+
model: string;
|
|
138
|
+
} | {
|
|
139
|
+
type: 'modelPicked';
|
|
140
|
+
model: string;
|
|
141
|
+
notice?: string;
|
|
142
|
+
} | {
|
|
143
|
+
type: 'helpShown';
|
|
144
|
+
} | {
|
|
145
|
+
type: 'back';
|
|
146
|
+
};
|
|
147
|
+
export type Intent = Msg | {
|
|
148
|
+
type: 'quit';
|
|
149
|
+
} | {
|
|
150
|
+
type: 'toggleSave';
|
|
151
|
+
id: string;
|
|
152
|
+
saved: boolean;
|
|
153
|
+
reload?: Origin;
|
|
154
|
+
} | {
|
|
155
|
+
type: 'openList';
|
|
156
|
+
which: ListKind;
|
|
157
|
+
index: number;
|
|
158
|
+
} | {
|
|
159
|
+
type: 'openEntry';
|
|
160
|
+
id: string;
|
|
161
|
+
query: string;
|
|
162
|
+
origin: Origin;
|
|
163
|
+
} | {
|
|
164
|
+
type: 'pickModel';
|
|
165
|
+
model: string;
|
|
166
|
+
};
|
|
167
|
+
export type Key = Partial<Record<'return' | 'escape' | 'backspace' | 'delete' | 'leftArrow' | 'rightArrow' | 'upArrow' | 'downArrow' | 'ctrl' | 'meta', boolean>>;
|
|
168
|
+
export declare function init(config: {
|
|
169
|
+
ok: true;
|
|
170
|
+
data: Pick<Config, 'route' | 'model'>;
|
|
171
|
+
} | {
|
|
172
|
+
ok: false;
|
|
173
|
+
error: ConfigProblem;
|
|
174
|
+
}): Model;
|
|
175
|
+
export declare function update(model: Model, msg: Msg): Model;
|
|
176
|
+
export declare function intentFor(view: View, input: string, key: Key): Intent | null;
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
import { checkModel, MODEL_CHOICES } from './config.js';
|
|
2
|
+
const FOCUS_ORDER = ['input', 'history', 'wordbook', 'model', 'help'];
|
|
3
|
+
const EMPTY_DRAFT = { text: '', cursor: 0 };
|
|
4
|
+
const HOME = { screen: 'home', draft: EMPTY_DRAFT, focus: 'input' };
|
|
5
|
+
export function init(config) {
|
|
6
|
+
if (!config.ok)
|
|
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 };
|
|
9
|
+
}
|
|
10
|
+
// A paste arrives as one chunk: keep its line breaks, drop anything that isn't text.
|
|
11
|
+
const clean = (text) => text
|
|
12
|
+
.replace(/\r\n?/g, '\n')
|
|
13
|
+
.replace(/\t/g, ' ')
|
|
14
|
+
// eslint-disable-next-line no-control-regex
|
|
15
|
+
.replace(/[\u0000-\u0009\u000b-\u001f\u007f]/g, '');
|
|
16
|
+
const clamp = (value, max) => Math.min(max, Math.max(0, value));
|
|
17
|
+
function editDraft(draft, msg) {
|
|
18
|
+
const { text, cursor } = draft;
|
|
19
|
+
switch (msg.type) {
|
|
20
|
+
case 'typed': {
|
|
21
|
+
const added = clean(msg.text);
|
|
22
|
+
return { text: text.slice(0, cursor) + added + text.slice(cursor), cursor: cursor + added.length };
|
|
23
|
+
}
|
|
24
|
+
case 'erased':
|
|
25
|
+
return cursor === 0 ? draft : { text: text.slice(0, cursor - 1) + text.slice(cursor), cursor: cursor - 1 };
|
|
26
|
+
case 'moved':
|
|
27
|
+
return { text, cursor: clamp(cursor + msg.by, text.length) };
|
|
28
|
+
case 'cleared':
|
|
29
|
+
return EMPTY_DRAFT;
|
|
30
|
+
default:
|
|
31
|
+
return draft;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
// 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
|
+
const choices = MODEL_CHOICES[route];
|
|
37
|
+
const rows = choices.includes(model) ? [...choices] : [...choices, model];
|
|
38
|
+
return { screen: 'model', route, rows, current: model, index: rows.indexOf(model) };
|
|
39
|
+
}
|
|
40
|
+
function ask(model, query, fresh, origin) {
|
|
41
|
+
const id = model.requests + 1;
|
|
42
|
+
return { ...model, requests: id, view: { screen: 'asking', request: { id, query, fresh }, ...(origin && { origin }) } };
|
|
43
|
+
}
|
|
44
|
+
export function update(model, msg) {
|
|
45
|
+
const { view } = model;
|
|
46
|
+
const to = (next) => ({ ...model, view: next });
|
|
47
|
+
// A result only counts if it answers the request on screen right now.
|
|
48
|
+
const current = (requestId) => view.screen === 'asking' && view.request.id === requestId;
|
|
49
|
+
switch (msg.type) {
|
|
50
|
+
case 'typed':
|
|
51
|
+
case 'erased':
|
|
52
|
+
case 'moved':
|
|
53
|
+
case 'cleared':
|
|
54
|
+
if (view.screen === 'model' && view.draft)
|
|
55
|
+
return to({ ...view, draft: editDraft(view.draft, msg), rejected: undefined });
|
|
56
|
+
return view.screen === 'home' ? to({ ...view, draft: editDraft(view.draft, msg) }) : model;
|
|
57
|
+
case 'focused': {
|
|
58
|
+
if (view.screen !== 'home')
|
|
59
|
+
return model;
|
|
60
|
+
const at = clamp(FOCUS_ORDER.indexOf(view.focus) + msg.by, FOCUS_ORDER.length - 1);
|
|
61
|
+
return to({ ...view, focus: FOCUS_ORDER[at] });
|
|
62
|
+
}
|
|
63
|
+
case 'focusInput':
|
|
64
|
+
return view.screen === 'home' ? to({ ...view, focus: 'input' }) : model;
|
|
65
|
+
case 'submitted': {
|
|
66
|
+
if (view.screen !== 'home' || view.focus !== 'input')
|
|
67
|
+
return model;
|
|
68
|
+
const query = view.draft.text.trim();
|
|
69
|
+
return query === '' ? model : ask(model, query, false);
|
|
70
|
+
}
|
|
71
|
+
case 'listShown':
|
|
72
|
+
return to({
|
|
73
|
+
screen: 'list',
|
|
74
|
+
which: msg.which,
|
|
75
|
+
rows: msg.rows,
|
|
76
|
+
index: clamp(msg.index, Math.max(0, msg.rows.length - 1)),
|
|
77
|
+
...(msg.notice && { notice: msg.notice }),
|
|
78
|
+
});
|
|
79
|
+
case 'listMoved':
|
|
80
|
+
return view.screen === 'list'
|
|
81
|
+
? to({ ...view, index: clamp(view.index + msg.by, Math.max(0, view.rows.length - 1)) })
|
|
82
|
+
: model;
|
|
83
|
+
case 'entryOpened':
|
|
84
|
+
return to({ screen: 'answer', query: msg.entry.query_text, answer: msg.answer, entry: msg.entry, cached: true, origin: msg.origin });
|
|
85
|
+
case 'openFailed':
|
|
86
|
+
return to({ screen: 'failed', query: msg.query, fresh: false, failure: { reason: 'unexpected', detail: msg.detail }, origin: msg.origin });
|
|
87
|
+
case 'retrying':
|
|
88
|
+
return view.screen === 'asking' && current(msg.requestId) ? to({ ...view, retry: msg.event }) : model;
|
|
89
|
+
case 'answered':
|
|
90
|
+
return view.screen === 'asking' && current(msg.requestId)
|
|
91
|
+
? to({ screen: 'answer', query: view.request.query, ...(view.origin && { origin: view.origin }), ...msg.outcome })
|
|
92
|
+
: model;
|
|
93
|
+
case 'failed':
|
|
94
|
+
return view.screen === 'asking' && current(msg.requestId)
|
|
95
|
+
? to({ screen: 'failed', query: view.request.query, fresh: view.request.fresh, failure: msg.failure, ...(view.origin && { origin: view.origin }) })
|
|
96
|
+
: model;
|
|
97
|
+
case 'reasked':
|
|
98
|
+
if (view.screen === 'answer')
|
|
99
|
+
return ask(model, view.query, true, view.origin);
|
|
100
|
+
// A failed open may have no query to ask; never send the model an empty prompt.
|
|
101
|
+
if (view.screen === 'failed' && view.query.trim() !== '')
|
|
102
|
+
return ask(model, view.query, view.fresh, view.origin);
|
|
103
|
+
return model;
|
|
104
|
+
case 'entrySaved':
|
|
105
|
+
return view.screen === 'answer' ? to({ ...view, entry: msg.entry, notice: undefined }) : model;
|
|
106
|
+
case 'saveFailed':
|
|
107
|
+
return view.screen === 'answer' ? to({ ...view, notice: msg.detail }) : model;
|
|
108
|
+
case 'modelShown':
|
|
109
|
+
return view.screen === 'home' && model.active ? to(picker(model.active)) : model;
|
|
110
|
+
case 'pickerMoved':
|
|
111
|
+
return view.screen === 'model' && !view.draft ? to({ ...view, index: clamp(view.index + msg.by, view.rows.length) }) : model;
|
|
112
|
+
case 'customStarted':
|
|
113
|
+
return view.screen === 'model' ? to({ ...view, index: view.rows.length, draft: EMPTY_DRAFT }) : model;
|
|
114
|
+
case 'customCancelled':
|
|
115
|
+
return view.screen === 'model' ? to({ ...view, draft: undefined, rejected: undefined }) : model;
|
|
116
|
+
case 'customRejected':
|
|
117
|
+
return view.screen === 'model' ? to({ ...view, rejected: msg.model }) : model;
|
|
118
|
+
case 'modelPicked':
|
|
119
|
+
if (!model.active)
|
|
120
|
+
return model;
|
|
121
|
+
return {
|
|
122
|
+
...model,
|
|
123
|
+
active: { ...model.active, model: msg.model },
|
|
124
|
+
view: { ...HOME, focus: 'model', ...(msg.notice && { notice: msg.notice }) },
|
|
125
|
+
};
|
|
126
|
+
case 'helpShown':
|
|
127
|
+
return view.screen === 'home' ? to({ screen: 'help' }) : model;
|
|
128
|
+
case 'back':
|
|
129
|
+
// The picker and Help go back to the menu row that opened them; everything else to the input.
|
|
130
|
+
if (view.screen === 'model')
|
|
131
|
+
return to({ ...HOME, focus: 'model' });
|
|
132
|
+
if (view.screen === 'help')
|
|
133
|
+
return to({ ...HOME, focus: 'help' });
|
|
134
|
+
return view.screen === 'setup' || view.screen === 'home' ? model : to(HOME);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
export function intentFor(view, input, key) {
|
|
138
|
+
// Views reached from a list go back to that list, at the same row.
|
|
139
|
+
const back = (origin) => (origin ? { type: 'openList', ...origin } : { type: 'back' });
|
|
140
|
+
switch (view.screen) {
|
|
141
|
+
case 'home':
|
|
142
|
+
if (view.focus !== 'input') {
|
|
143
|
+
if (key.upArrow)
|
|
144
|
+
return { type: 'focused', by: -1 };
|
|
145
|
+
if (key.downArrow)
|
|
146
|
+
return { type: 'focused', by: 1 };
|
|
147
|
+
if (key.return) {
|
|
148
|
+
if (view.focus === 'model')
|
|
149
|
+
return { type: 'modelShown' };
|
|
150
|
+
if (view.focus === 'help')
|
|
151
|
+
return { type: 'helpShown' };
|
|
152
|
+
return { type: 'openList', which: view.focus, index: 0 };
|
|
153
|
+
}
|
|
154
|
+
if (key.escape)
|
|
155
|
+
return { type: 'focusInput' };
|
|
156
|
+
return input === 'q' ? { type: 'quit' } : null;
|
|
157
|
+
}
|
|
158
|
+
if (key.return)
|
|
159
|
+
return { type: 'submitted' };
|
|
160
|
+
if (key.downArrow)
|
|
161
|
+
return { type: 'focused', by: 1 };
|
|
162
|
+
if (key.escape)
|
|
163
|
+
return view.draft.text === '' ? { type: 'quit' } : { type: 'cleared' };
|
|
164
|
+
// Ink reports the Backspace key as `delete`, so both erase backwards.
|
|
165
|
+
if (key.backspace || key.delete)
|
|
166
|
+
return { type: 'erased' };
|
|
167
|
+
if (key.leftArrow)
|
|
168
|
+
return { type: 'moved', by: -1 };
|
|
169
|
+
if (key.rightArrow)
|
|
170
|
+
return { type: 'moved', by: 1 };
|
|
171
|
+
if (key.upArrow || key.ctrl || key.meta || input === '')
|
|
172
|
+
return null;
|
|
173
|
+
return { type: 'typed', text: input };
|
|
174
|
+
case 'list': {
|
|
175
|
+
const row = view.rows[view.index];
|
|
176
|
+
const origin = { which: view.which, index: view.index };
|
|
177
|
+
if (key.upArrow)
|
|
178
|
+
return { type: 'listMoved', by: -1 };
|
|
179
|
+
if (key.downArrow)
|
|
180
|
+
return { type: 'listMoved', by: 1 };
|
|
181
|
+
if (key.escape)
|
|
182
|
+
return { type: 'back' };
|
|
183
|
+
if (input === 'q')
|
|
184
|
+
return { type: 'quit' };
|
|
185
|
+
if (!row)
|
|
186
|
+
return null;
|
|
187
|
+
if (key.return)
|
|
188
|
+
return { type: 'openEntry', id: row.id, query: row.query_text, origin };
|
|
189
|
+
if (input === 's')
|
|
190
|
+
return { type: 'toggleSave', id: row.id, saved: !row.saved, reload: origin };
|
|
191
|
+
return null;
|
|
192
|
+
}
|
|
193
|
+
case 'asking':
|
|
194
|
+
return key.escape ? back(view.origin) : null;
|
|
195
|
+
case 'answer':
|
|
196
|
+
if (key.escape)
|
|
197
|
+
return back(view.origin);
|
|
198
|
+
if (input === 'r')
|
|
199
|
+
return { type: 'reasked' };
|
|
200
|
+
if (input === 's')
|
|
201
|
+
return { type: 'toggleSave', id: view.entry.id, saved: !view.entry.saved };
|
|
202
|
+
return input === 'q' ? { type: 'quit' } : null;
|
|
203
|
+
case 'failed':
|
|
204
|
+
if (key.escape)
|
|
205
|
+
return back(view.origin);
|
|
206
|
+
if (input === 'r')
|
|
207
|
+
return { type: 'reasked' };
|
|
208
|
+
return input === 'q' ? { type: 'quit' } : null;
|
|
209
|
+
case 'model': {
|
|
210
|
+
if (view.draft) {
|
|
211
|
+
if (key.escape)
|
|
212
|
+
return { type: 'customCancelled' };
|
|
213
|
+
if (key.return) {
|
|
214
|
+
if (view.draft.text.trim() === '')
|
|
215
|
+
return null;
|
|
216
|
+
const id = checkModel(view.route, view.draft.text);
|
|
217
|
+
return id.ok ? { type: 'pickModel', model: id.data } : { type: 'customRejected', model: view.draft.text.trim() };
|
|
218
|
+
}
|
|
219
|
+
if (key.backspace || key.delete)
|
|
220
|
+
return { type: 'erased' };
|
|
221
|
+
if (key.leftArrow)
|
|
222
|
+
return { type: 'moved', by: -1 };
|
|
223
|
+
if (key.rightArrow)
|
|
224
|
+
return { type: 'moved', by: 1 };
|
|
225
|
+
if (key.upArrow || key.downArrow || key.ctrl || key.meta || input === '')
|
|
226
|
+
return null;
|
|
227
|
+
return { type: 'typed', text: input };
|
|
228
|
+
}
|
|
229
|
+
if (key.upArrow)
|
|
230
|
+
return { type: 'pickerMoved', by: -1 };
|
|
231
|
+
if (key.downArrow)
|
|
232
|
+
return { type: 'pickerMoved', by: 1 };
|
|
233
|
+
if (key.escape)
|
|
234
|
+
return { type: 'back' };
|
|
235
|
+
if (key.return) {
|
|
236
|
+
const row = view.rows[view.index];
|
|
237
|
+
return row ? { type: 'pickModel', model: row } : { type: 'customStarted' };
|
|
238
|
+
}
|
|
239
|
+
return input === 'q' ? { type: 'quit' } : null;
|
|
240
|
+
}
|
|
241
|
+
case 'help':
|
|
242
|
+
if (key.escape)
|
|
243
|
+
return { type: 'back' };
|
|
244
|
+
return input === 'q' ? { type: 'quit' } : null;
|
|
245
|
+
case 'setup':
|
|
246
|
+
return key.escape || input === 'q' ? { type: 'quit' } : null;
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
//# sourceMappingURL=model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/lib/model.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare const PACKAGE_ROOT: string;
|
|
2
|
+
type Env = Record<string, string | undefined>;
|
|
3
|
+
export declare function resolveHome(env: Env, packageRoot: string, home: string): string;
|
|
4
|
+
export declare const HOME_DIR: string;
|
|
5
|
+
export declare const ENV_PATH: string;
|
|
6
|
+
export declare const DB_PATH: string;
|
|
7
|
+
export declare const SETTINGS_PATH: string;
|
|
8
|
+
export declare const PACKAGE_JSON_PATH: string;
|
|
9
|
+
export {};
|