@hpyperry/dsh-ref-lib 0.7.0 → 0.8.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 +12 -14
- package/lib/client/RefLibDock.d.ts +4 -2
- package/lib/client/RefLibDock.d.ts.map +1 -1
- package/lib/client/RefLibDock.js +31 -23
- package/lib/client/RefLibDock.js.map +1 -1
- package/lib/client/RefLibPanel.d.ts +6 -4
- package/lib/client/RefLibPanel.d.ts.map +1 -1
- package/lib/client/RefLibPanel.js +64 -20
- package/lib/client/RefLibPanel.js.map +1 -1
- package/lib/client/index.d.ts.map +1 -1
- package/lib/client/index.js +5 -2
- package/lib/client/index.js.map +1 -1
- package/lib/client/locales.d.ts +14 -2
- package/lib/client/locales.d.ts.map +1 -1
- package/lib/client/locales.js +22 -8
- package/lib/client/locales.js.map +1 -1
- package/lib/client/styles.d.ts.map +1 -1
- package/lib/client/styles.js +158 -23
- package/lib/client/styles.js.map +1 -1
- package/lib/client.js +446 -134
- package/lib/client.js.map +1 -1
- package/lib/commands.d.ts +2 -1
- package/lib/commands.d.ts.map +1 -1
- package/lib/commands.js +15 -3
- package/lib/commands.js.map +1 -1
- package/lib/index.d.ts +3 -2
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +9 -7
- package/lib/index.js.map +1 -1
- package/lib/render.d.ts +5 -1
- package/lib/render.d.ts.map +1 -1
- package/lib/render.js +101 -11
- package/lib/render.js.map +1 -1
- package/lib/routes.d.ts.map +1 -1
- package/lib/routes.js +42 -2
- package/lib/routes.js.map +1 -1
- package/lib/service.d.ts +22 -1
- package/lib/service.d.ts.map +1 -1
- package/lib/service.js +101 -4
- package/lib/service.js.map +1 -1
- package/package.json +9 -1
package/README.md
CHANGED
|
@@ -3,27 +3,27 @@
|
|
|
3
3
|
> DeepSeek Harness(DSH)插件:给任意会话挂上**只读参考库**,agent 需要查证时
|
|
4
4
|
> **先在参考库里检索**——而不是凭空猜测或直接搜网。
|
|
5
5
|
>
|
|
6
|
-
> 安装:`dsh plugin --profile web add
|
|
6
|
+
> 安装:`dsh plugin --profile web add @hpyperry/dsh-ref-lib`
|
|
7
7
|
|
|
8
8
|
## ✨ 特性
|
|
9
9
|
|
|
10
10
|
| | 能力 | 说明 |
|
|
11
11
|
| --- | --- | --- |
|
|
12
12
|
| 🚀 | **统一入口** | 输入卡正上方的「参考库」胶囊(hero / active 常显、带数量徽标)——纯 CSS 与输入卡左缘对齐,零测量、零竞态 |
|
|
13
|
-
| 🎨 | **可视化面板** | 基名 +
|
|
14
|
-
| 📂 | **三种添加方式** | 应用内目录浏览器 / 系统原生选择器(按宿主能力自动适配)/ 手动输入路径(`~`
|
|
15
|
-
| 🧠 | **上下文注入** |
|
|
13
|
+
| 🎨 | **可视化面板** | 基名 + 完整路径列表、用途说明、悬停高亮、危险色移除、独立的空/加载/错误态 |
|
|
14
|
+
| 📂 | **三种添加方式** | 应用内目录浏览器 / 系统原生选择器(按宿主能力自动适配)/ 手动输入路径(`~` 与相对路径),可附**用途说明**(自动提取 README 标题兜底) |
|
|
15
|
+
| 🧠 | **上下文注入** | 仅向配置了参考库的会话注入定稿英文规则:库清单(含用途 routing metadata)+ **强制查证流程**(先查参考库,未覆盖才外部)+ 权威性/冲突处理 + 只读约束;空列表零 token |
|
|
16
16
|
| 🔒 | **per-session 隔离** | 每个会话独立维护,会话间互不可见;sidecar JSON 持久化,重启/恢复后仍在 |
|
|
17
17
|
| ⚡ | **静默数据通道** | client 读写走插件自注册的 `/api/ref-lib/*` HTTP 路由——不渲染命令卡片、不执行命令、不产生用户消息 |
|
|
18
18
|
| 🌐 | **双语界面** | zh/en 全量本地化,随界面语言实时切换 |
|
|
19
|
-
| ⌨️ | **命令入口** | `/ref-lib add <path> \| list \| remove <id>`,与 UI 数据一致 |
|
|
19
|
+
| ⌨️ | **命令入口** | `/ref-lib add <path> [--note <用途>] \| list \| remove <id>`,与 UI 数据一致 |
|
|
20
20
|
| 🛡️ | **安全** | loopback 护栏 + 路径消毒 + 只读保证分层(沙箱强制 / 上下文软约束) |
|
|
21
21
|
|
|
22
22
|
## 📦 安装
|
|
23
23
|
|
|
24
24
|
```bash
|
|
25
|
-
#
|
|
26
|
-
dsh plugin --profile web add
|
|
25
|
+
# 使用npm
|
|
26
|
+
dsh plugin --profile web add @hpyperry/dsh-ref-lib
|
|
27
27
|
|
|
28
28
|
# 本地开发期(改动即时生效):指向仓库本地路径
|
|
29
29
|
# dsh plugin --profile web add /path/to/ref-lib
|
|
@@ -32,17 +32,14 @@ dsh plugin --profile web add github:hpyperry/dsh-ref-lib
|
|
|
32
32
|
dsh --profile web
|
|
33
33
|
```
|
|
34
34
|
|
|
35
|
-
> 发布到 npm 后也可直接按包名安装:`dsh plugin --profile web add @hpyperry/dsh-ref-lib`。
|
|
36
|
-
|
|
37
35
|
卸载:`dsh plugin --profile web remove @hpyperry/dsh-ref-lib`
|
|
38
36
|
|
|
39
37
|
## 🚀 快速开始
|
|
40
38
|
|
|
41
39
|
1. 重启后在**输入卡正上方**看到「参考库」胶囊(新会话与具体对话均可见);
|
|
42
40
|
2. 点开面板 → 添加目录(应用内浏览器 / 系统选择器 / 手动路径三选一)→ 列表出现 → 行尾垃圾桶移除;
|
|
43
|
-
3. 或对话内命令:`/ref-lib add <path
|
|
44
|
-
4. 配置了参考库的会话,agent
|
|
45
|
-
需要查证时它会先在参考库里检索。
|
|
41
|
+
3. 或对话内命令:`/ref-lib add <path> [--note <用途>]`、`/ref-lib list`、`/ref-lib remove <id>`;
|
|
42
|
+
4. 配置了参考库的会话,agent 会收到定稿英文的"参考库规则"上下文指令——查证规范/API/项目事实时**必须先查参考库**(未覆盖才允许外部途径并自报),且禁止修改库内文件。
|
|
46
43
|
|
|
47
44
|
## ⚙️ 行为与配置
|
|
48
45
|
|
|
@@ -51,8 +48,9 @@ dsh --profile web
|
|
|
51
48
|
| 项 | 说明 |
|
|
52
49
|
| --- | --- |
|
|
53
50
|
| 数据存储 | `<dshHome>/plugin-data/ref-lib/<sessionId>.json`(per-session sidecar,随 dsh home 持久化) |
|
|
51
|
+
| 用途说明(note) | 添加时可选填写;未填写时自动提取目录 README 首个 H1 标题兜底(无 README 则为空)。note 作为 routing metadata 注入,帮助 agent 判断库的相关性 |
|
|
54
52
|
| 目录选择后端 | 启动时自动探测:应用内目录浏览器(browse)或系统原生对话框(native);可在 profile 的 `cordis.patch.yml` 切换 `directory-picker` 行为 |
|
|
55
|
-
| 上下文注入 | 仅向有参考库的会话注入(`systemPrompt.context`,空列表零 token
|
|
53
|
+
| 上下文注入 | 仅向有参考库的会话注入(`systemPrompt.context`,空列表零 token;注入文本为定稿英文模板) |
|
|
56
54
|
| 子会话 | 无自身配置时继承父会话的参考库列表 |
|
|
57
55
|
|
|
58
56
|
## 🛡️ 安全
|
|
@@ -65,7 +63,7 @@ dsh --profile web
|
|
|
65
63
|
|
|
66
64
|
- **系统原生目录选择器可能卡顿且界面语言跟随 OS**:可用「手动输入路径」绕开;或在 profile 把 `directory-picker` 切换为 `@deepseek-ai/dsh-host-directory-picker-browse`(应用内浏览器,快速且 zh/en 本地化);
|
|
67
65
|
- **settings 配置客户端白名单**(DSH rc.6 框架限制):第三方插件 namespace 默认不可被浏览器端读写,官方标注为 deferred work;
|
|
68
|
-
- UI
|
|
66
|
+
- 已添加条目的用途说明暂不支持在 UI 编辑(可移除后重新添加,或重新 `add` 同路径带新 note 更新);
|
|
69
67
|
- `/ref-lib add <path>` 的相对路径**基于当前会话工作区**解析,而非 dsh 进程启动目录。
|
|
70
68
|
|
|
71
69
|
## 🧑💻 开发
|
|
@@ -23,10 +23,12 @@ import type { RefLibEntry } from '../spec.ts';
|
|
|
23
23
|
export interface RefLibDockInjected {
|
|
24
24
|
/** 读取会话的参考库列表(GET /api/ref-lib/list,静默)。 */
|
|
25
25
|
load: (sessionId: SessionId) => Promise<RefLibEntry[]>;
|
|
26
|
-
/** 添加一个参考库目录(POST /api/ref-lib/add
|
|
27
|
-
add: (sessionId: SessionId, path: string) => Promise<void>;
|
|
26
|
+
/** 添加一个参考库目录(POST /api/ref-lib/add,静默;note 为可选用途说明)。 */
|
|
27
|
+
add: (sessionId: SessionId, path: string, note?: string) => Promise<void>;
|
|
28
28
|
/** 移除一个参考库条目(POST /api/ref-lib/remove,静默)。 */
|
|
29
29
|
remove: (sessionId: SessionId, id: string) => Promise<void>;
|
|
30
|
+
/** 更新一个条目的用途说明(POST /api/ref-lib/note,静默;空串清除)。 */
|
|
31
|
+
setNote: (sessionId: SessionId, id: string, note: string) => Promise<void>;
|
|
30
32
|
/** 唤起系统原生"选择文件夹"对话框;取消时返回 null。 */
|
|
31
33
|
pickDirectory: () => Promise<string | null>;
|
|
32
34
|
/** 列出一层目录(browse 后端);缺省路径 = 宿主主目录;signal 中止扫描。 */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RefLibDock.d.ts","sourceRoot":"","sources":["../../src/client/RefLibDock.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAA;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAA;AACjF,OAAO,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,wCAAwC,CAAA;AAEzF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAO7C,yCAAyC;AACzC,MAAM,WAAW,kBAAkB;IACjC,4CAA4C;IAC5C,IAAI,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,OAAO,CAAC,WAAW,EAAE,CAAC,CAAA;IACtD,
|
|
1
|
+
{"version":3,"file":"RefLibDock.d.ts","sourceRoot":"","sources":["../../src/client/RefLibDock.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAA;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAA;AACjF,OAAO,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,wCAAwC,CAAA;AAEzF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAO7C,yCAAyC;AACzC,MAAM,WAAW,kBAAkB;IACjC,4CAA4C;IAC5C,IAAI,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,OAAO,CAAC,WAAW,EAAE,CAAC,CAAA;IACtD,wDAAwD;IACxD,GAAG,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACzE,8CAA8C;IAC9C,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC3D,mDAAmD;IACnD,OAAO,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC1E,mCAAmC;IACnC,aAAa,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;IAC3C,kDAAkD;IAClD,aAAa,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAA;CAClF;AAED,kDAAkD;AAClD,MAAM,MAAM,eAAe,GAAG,YAAY,CAAC,yBAAyB,CAAC,GAAG,kBAAkB,GAAG,WAAW,CAAC,SAAS,CAAC,CAAA;AAsCnH;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,YAAY,CAwM/D"}
|
package/lib/client/RefLibDock.js
CHANGED
|
@@ -60,7 +60,7 @@ ensureRefLibStyles();
|
|
|
60
60
|
* @returns 胶囊入口(+ 打开时的管理面板)。
|
|
61
61
|
*/
|
|
62
62
|
export function RefLibDock(props) {
|
|
63
|
-
const { sessionId, load, add, remove, pickDirectory, listDirectory, t } = props;
|
|
63
|
+
const { sessionId, load, add, remove, setNote, pickDirectory, listDirectory, t } = props;
|
|
64
64
|
const [open, setOpen] = useState(false);
|
|
65
65
|
const [libs, setLibs] = useState([]);
|
|
66
66
|
const [loading, setLoading] = useState(false);
|
|
@@ -74,6 +74,8 @@ export function RefLibDock(props) {
|
|
|
74
74
|
// pickDirectory)。探测一次并缓存;host 侧能力在单次 boot 内稳定。
|
|
75
75
|
const [pickerMode, setPickerMode] = useState(null);
|
|
76
76
|
const [browserOpen, setBrowserOpen] = useState(false);
|
|
77
|
+
// pickPath 等待应用内浏览器选定时挂起的 resolve(取消以 null 结束)。
|
|
78
|
+
const pendingPick = useRef(null);
|
|
77
79
|
const detectPicker = async () => {
|
|
78
80
|
if (pickerMode !== null)
|
|
79
81
|
return pickerMode;
|
|
@@ -137,11 +139,11 @@ export function RefLibDock(props) {
|
|
|
137
139
|
setBusy(false);
|
|
138
140
|
}
|
|
139
141
|
};
|
|
140
|
-
const handleAddPath = async (path) => {
|
|
142
|
+
const handleAddPath = async (path, note) => {
|
|
141
143
|
setBusy(true);
|
|
142
144
|
setError(null);
|
|
143
145
|
try {
|
|
144
|
-
await add(sessionId, path);
|
|
146
|
+
await add(sessionId, path, note);
|
|
145
147
|
await refresh();
|
|
146
148
|
}
|
|
147
149
|
catch (cause) {
|
|
@@ -153,24 +155,24 @@ export function RefLibDock(props) {
|
|
|
153
155
|
setBusy(false);
|
|
154
156
|
}
|
|
155
157
|
};
|
|
156
|
-
/**
|
|
157
|
-
const
|
|
158
|
+
/** 更新条目用途说明(编辑详情保存);失败入错误槽、不抛出(编辑区保持打开)。 */
|
|
159
|
+
const handleUpdateNote = async (id, note) => {
|
|
158
160
|
setBusy(true);
|
|
159
161
|
setError(null);
|
|
160
162
|
try {
|
|
161
|
-
await
|
|
163
|
+
await setNote(sessionId, id, note);
|
|
162
164
|
await refresh();
|
|
163
|
-
return true;
|
|
164
165
|
}
|
|
165
166
|
catch (cause) {
|
|
166
167
|
setError(formatError(cause, t));
|
|
167
|
-
return false;
|
|
168
168
|
}
|
|
169
169
|
finally {
|
|
170
170
|
setBusy(false);
|
|
171
171
|
}
|
|
172
172
|
};
|
|
173
|
-
|
|
173
|
+
/** 唤起目录选择(browse 应用内浏览器 / native 系统对话框)并返回选中的路径;
|
|
174
|
+
* 取消或失败返回 null——**不直接添加**,由面板把路径填入表单(用户可补用途后提交)。 */
|
|
175
|
+
const pickPath = async () => {
|
|
174
176
|
setError(null);
|
|
175
177
|
// 探测目录选择能力:browse → 应用内目录浏览器;native → 系统 OS 对话框。
|
|
176
178
|
let mode;
|
|
@@ -179,29 +181,39 @@ export function RefLibDock(props) {
|
|
|
179
181
|
}
|
|
180
182
|
catch (cause) {
|
|
181
183
|
setError(formatError(cause, t));
|
|
182
|
-
return;
|
|
184
|
+
return null;
|
|
183
185
|
}
|
|
184
186
|
if (mode === 'browse') {
|
|
185
187
|
setBrowserOpen(true);
|
|
186
|
-
return
|
|
188
|
+
return await new Promise((resolve) => {
|
|
189
|
+
pendingPick.current = resolve;
|
|
190
|
+
});
|
|
187
191
|
}
|
|
188
192
|
setPicking(true);
|
|
189
193
|
try {
|
|
190
|
-
|
|
191
|
-
if (picked !== null)
|
|
192
|
-
await addPath(picked);
|
|
194
|
+
return await pickDirectory();
|
|
193
195
|
}
|
|
194
196
|
catch (cause) {
|
|
195
197
|
setError(formatError(cause, t));
|
|
198
|
+
return null;
|
|
196
199
|
}
|
|
197
200
|
finally {
|
|
198
201
|
setPicking(false);
|
|
199
202
|
}
|
|
200
203
|
};
|
|
201
|
-
/** 应用内浏览器选定目录 →
|
|
202
|
-
const handleBrowserPick =
|
|
203
|
-
|
|
204
|
-
|
|
204
|
+
/** 应用内浏览器选定目录 → 把路径交给等待中的 pickPath 调用方并关闭浏览器。 */
|
|
205
|
+
const handleBrowserPick = (path) => {
|
|
206
|
+
setBrowserOpen(false);
|
|
207
|
+
const resolve = pendingPick.current;
|
|
208
|
+
pendingPick.current = null;
|
|
209
|
+
resolve?.(path);
|
|
210
|
+
};
|
|
211
|
+
/** 应用内浏览器取消 → 以 null 结束等待中的 pickPath。 */
|
|
212
|
+
const handleBrowserClose = () => {
|
|
213
|
+
setBrowserOpen(false);
|
|
214
|
+
const resolve = pendingPick.current;
|
|
215
|
+
pendingPick.current = null;
|
|
216
|
+
resolve?.(null);
|
|
205
217
|
};
|
|
206
218
|
return (_jsxs(_Fragment, { children: [_jsx("div", { className: "reflib-dock", children: _jsxs("button", { type: "button", className: "reflib-chip", "data-active": open || undefined, "aria-haspopup": "dialog", "aria-expanded": open, "aria-label": libs.length > 0 ? t('dock.count.aria', { count: String(libs.length) }) : t('dock.aria'), title: t('dock.aria'), onClick: () => {
|
|
207
219
|
setOpen((value) => !value);
|
|
@@ -209,10 +221,6 @@ export function RefLibDock(props) {
|
|
|
209
221
|
setOpen(false);
|
|
210
222
|
}, libs: libs, loading: loading, busy: busy, picking: picking, removingId: removingId, error: error, t: t, onRemove: (id) => {
|
|
211
223
|
void handleRemove(id);
|
|
212
|
-
}, onAddPath: handleAddPath, onBrowse:
|
|
213
|
-
setBrowserOpen(false);
|
|
214
|
-
}, listDirectory: listDirectory, t: t, onOpen: (path) => {
|
|
215
|
-
void handleBrowserPick(path);
|
|
216
|
-
} })] }));
|
|
224
|
+
}, onAddPath: handleAddPath, onUpdateNote: handleUpdateNote, onBrowse: pickPath }), _jsx(RefLibBrowser, { open: browserOpen, onClose: handleBrowserClose, listDirectory: listDirectory, t: t, onOpen: handleBrowserPick })] }));
|
|
217
225
|
}
|
|
218
226
|
//# sourceMappingURL=RefLibDock.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RefLibDock.js","sourceRoot":"","sources":["../../src/client/RefLibDock.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAInD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAA;AAExE,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAE1C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAqB,CAAA;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAmB,CAAA;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"RefLibDock.js","sourceRoot":"","sources":["../../src/client/RefLibDock.tsx"],"names":[],"mappings":"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"}
|
|
@@ -33,10 +33,12 @@ export interface RefLibPanelProps {
|
|
|
33
33
|
t: TranslateNS<'ref-lib'>;
|
|
34
34
|
/** 移除一个条目(父组件执行异步并刷新)。 */
|
|
35
35
|
onRemove: (id: string) => void;
|
|
36
|
-
/**
|
|
37
|
-
onAddPath: (path: string) => Promise<void>;
|
|
38
|
-
/**
|
|
39
|
-
|
|
36
|
+
/** 按输入路径添加(可带用途说明 note);失败时抛出(面板保留输入内容)。 */
|
|
37
|
+
onAddPath: (path: string, note?: string) => Promise<void>;
|
|
38
|
+
/** 更新条目的用途说明(详情编辑保存);失败入错误槽、不抛出。 */
|
|
39
|
+
onUpdateNote: (id: string, note: string) => Promise<void>;
|
|
40
|
+
/** 唤起目录选择(browse/native),返回选中路径或 null(取消)——由面板填入路径字段,不直接添加。 */
|
|
41
|
+
onBrowse: () => Promise<string | null>;
|
|
40
42
|
}
|
|
41
43
|
/**
|
|
42
44
|
* 渲染参考库管理面板。
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RefLibPanel.d.ts","sourceRoot":"","sources":["../../src/client/RefLibPanel.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"RefLibPanel.d.ts","sourceRoot":"","sources":["../../src/client/RefLibPanel.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAA;AAczC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAA;AACnE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAM7C,mCAAmC;AACnC,MAAM,WAAW,gBAAgB;IAC/B,cAAc;IACd,IAAI,EAAE,OAAO,CAAA;IACb,8BAA8B;IAC9B,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,eAAe;IACf,IAAI,EAAE,SAAS,WAAW,EAAE,CAAA;IAC5B,uBAAuB;IACvB,OAAO,EAAE,OAAO,CAAA;IAChB,+BAA+B;IAC/B,IAAI,EAAE,OAAO,CAAA;IACb,gCAAgC;IAChC,OAAO,EAAE,OAAO,CAAA;IAChB,kCAAkC;IAClC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,6BAA6B;IAC7B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,aAAa;IACb,CAAC,EAAE,WAAW,CAAC,SAAS,CAAC,CAAA;IACzB,0BAA0B;IAC1B,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;IAC9B,4CAA4C;IAC5C,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACzD,oCAAoC;IACpC,YAAY,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACzD,+DAA+D;IAC/D,QAAQ,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;CACvC;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,YAAY,CAoQjE"}
|
|
@@ -10,50 +10,94 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
10
10
|
* @module @hpyperry/dsh-ref-lib/src/client/RefLibPanel
|
|
11
11
|
*/
|
|
12
12
|
import { useEffect, useState } from 'react';
|
|
13
|
-
import { Button, IconFolderOpen16, IconLoadingOutline16, IconPlusOutline16, IconSearchOutline16, IconTrashOutline16, IconWarningOutline16, Input, Modal, Tooltip, } from '@deepseek-ai/dsh-client-ui-primitives';
|
|
13
|
+
import { Button, IconEllipsisOutline16, IconFolderOpen16, IconLoadingOutline16, IconPlusOutline16, IconSearchOutline16, IconTrashOutline16, IconWarningOutline16, Input, Modal, Tooltip, } from '@deepseek-ai/dsh-client-ui-primitives';
|
|
14
14
|
import { libBasename } from "./data.js";
|
|
15
|
+
/** 用途说明最大长度(与 node half service.NOTE_MAX_LENGTH 一致)。 */
|
|
16
|
+
const NOTE_MAX_LENGTH = 120;
|
|
15
17
|
/**
|
|
16
18
|
* 渲染参考库管理面板。
|
|
17
19
|
* @param props - 见 {@link RefLibPanelProps}。
|
|
18
20
|
* @returns 对话框元素(关闭时 Modal 返回 null)。
|
|
19
21
|
*/
|
|
20
22
|
export function RefLibPanel(props) {
|
|
21
|
-
const { open, onClose, libs, loading, busy, picking, removingId, error, t, onRemove, onAddPath, onBrowse } = props;
|
|
23
|
+
const { open, onClose, libs, loading, busy, picking, removingId, error, t, onRemove, onAddPath, onUpdateNote, onBrowse } = props;
|
|
22
24
|
const [draft, setDraft] = useState('');
|
|
25
|
+
const [noteDraft, setNoteDraft] = useState('');
|
|
26
|
+
// 详情展开:正在查看/编辑的条目 id + 编辑中的用途草稿。
|
|
27
|
+
const [detailId, setDetailId] = useState(null);
|
|
28
|
+
const [editNote, setEditNote] = useState('');
|
|
23
29
|
// 面板关闭时清空输入草稿:每次打开都是干净的添加表单(失败保留输入的行为只限于面板打开期间)。
|
|
24
30
|
useEffect(() => {
|
|
25
|
-
if (!open)
|
|
31
|
+
if (!open) {
|
|
26
32
|
setDraft('');
|
|
33
|
+
setNoteDraft('');
|
|
34
|
+
setDetailId(null);
|
|
35
|
+
}
|
|
27
36
|
}, [open]);
|
|
28
37
|
const handleSubmit = async () => {
|
|
29
38
|
const trimmed = draft.trim();
|
|
30
39
|
if (trimmed === '')
|
|
31
40
|
return;
|
|
32
41
|
try {
|
|
33
|
-
|
|
42
|
+
const note = noteDraft.trim();
|
|
43
|
+
await onAddPath(trimmed, note === '' ? undefined : note);
|
|
34
44
|
setDraft('');
|
|
45
|
+
setNoteDraft('');
|
|
35
46
|
}
|
|
36
47
|
catch {
|
|
37
48
|
/* 错误由父组件在统一错误槽展示;输入保留以便修正 */
|
|
38
49
|
}
|
|
39
50
|
};
|
|
40
|
-
|
|
51
|
+
/** 浏览选中目录 → 填入路径字段(不直接添加,用户可补用途后提交)。 */
|
|
52
|
+
const handleBrowse = async () => {
|
|
53
|
+
const path = await onBrowse();
|
|
54
|
+
if (path !== null)
|
|
55
|
+
setDraft(path);
|
|
56
|
+
};
|
|
57
|
+
/** 展开/收起条目详情;展开时载入当前用途草稿。 */
|
|
58
|
+
const toggleDetail = (entry) => {
|
|
59
|
+
if (detailId === entry.id) {
|
|
60
|
+
setDetailId(null);
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
setDetailId(entry.id);
|
|
64
|
+
setEditNote(entry.note ?? '');
|
|
65
|
+
};
|
|
66
|
+
/** 保存详情编辑的用途说明;成功后收起详情。 */
|
|
67
|
+
const handleSaveNote = async () => {
|
|
68
|
+
if (detailId === null)
|
|
69
|
+
return;
|
|
70
|
+
await onUpdateNote(detailId, editNote);
|
|
71
|
+
setDetailId(null);
|
|
72
|
+
};
|
|
73
|
+
return (_jsx(Modal, { open: open, onClose: onClose, title: t('panel.title'), closeLabel: t('panel.close'), description: t('panel.description', { count: String(libs.length) }), className: "reflib-modal", children: _jsxs("div", { className: "reflib-panel", children: [error !== null && (_jsxs("div", { className: "reflib-error", role: "alert", children: [_jsx(IconWarningOutline16, { size: 14, className: "reflib-errorIcon" }), _jsx("span", { children: error })] })), loading ? (_jsxs("div", { className: "reflib-status", role: "status", children: [_jsx(IconLoadingOutline16, { size: 20, className: "reflib-spin reflib-statusIcon" }), _jsx("span", { className: "reflib-statusText", children: t('list.loading') })] })) : libs.length === 0 ? (_jsxs("div", { className: "reflib-status", children: [_jsx(IconFolderOpen16, { size: 22, className: "reflib-statusIcon" }), _jsx("span", { className: "reflib-statusText", children: t('list.empty') }), _jsx("span", { className: "reflib-statusHint", children: t('list.empty.hint') })] })) : (_jsx("div", { className: "reflib-list", children: libs.map((entry) => {
|
|
41
74
|
const name = libBasename(entry.path);
|
|
42
75
|
const removing = removingId === entry.id;
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
76
|
+
const detailOpen = detailId === entry.id;
|
|
77
|
+
return (_jsxs("div", { className: "reflib-listItem", "data-removing": removing || undefined, children: [_jsxs("div", { className: "reflib-row", children: [_jsx(IconFolderOpen16, { size: 16, className: "reflib-rowIcon" }), _jsxs("div", { className: "reflib-rowBody", children: [_jsx("span", { className: "reflib-rowName", title: entry.path, children: name }), _jsx("span", { className: "reflib-rowPath", title: entry.path, children: entry.path }), entry.note !== undefined && entry.note !== '' && (_jsx("span", { className: "reflib-rowNote", title: entry.note, children: entry.note.replace(/\s+/g, ' ') }))] }), _jsx(Tooltip, { label: t('detail.open'), side: "top", delayMs: 400, children: _jsx("button", { type: "button", className: "reflib-rowAction", "aria-label": t('detail.open.aria', { name }), "aria-expanded": detailOpen || undefined, disabled: busy || removingId !== null, onClick: () => {
|
|
78
|
+
toggleDetail(entry);
|
|
79
|
+
}, children: _jsx(IconEllipsisOutline16, { size: 14 }) }) }), _jsx(Tooltip, { label: t('list.remove'), side: "top", delayMs: 400, children: _jsx("button", { type: "button", className: "reflib-rowRemove", "aria-label": t('list.remove.aria', { name }), disabled: busy || removingId !== null, onClick: () => {
|
|
80
|
+
onRemove(entry.id);
|
|
81
|
+
}, children: removing ? (_jsx(IconLoadingOutline16, { size: 14, className: "reflib-spin" })) : (_jsx(IconTrashOutline16, { size: 14 })) }) })] }), detailOpen && (_jsxs("div", { className: "reflib-detail", children: [_jsxs("div", { className: "reflib-detailMeta", children: [_jsx("span", { className: "reflib-detailKey", children: "ID" }), _jsx("span", { className: "reflib-detailValue", children: entry.id })] }), _jsxs("div", { className: "reflib-detailMeta", children: [_jsx("span", { className: "reflib-detailKey", children: t('detail.path') }), _jsx("span", { className: "reflib-detailValue", title: entry.path, children: entry.path })] }), _jsx("span", { className: "reflib-detailKey", children: t('add.note.label') }), _jsxs("div", { className: "reflib-noteWrap", children: [_jsx("textarea", { className: "reflib-noteTextarea", value: editNote, placeholder: t('add.note.placeholder'), "aria-label": t('add.note.label'), disabled: busy, rows: 3, maxLength: NOTE_MAX_LENGTH, onChange: (event) => {
|
|
82
|
+
setEditNote(event.currentTarget.value);
|
|
83
|
+
} }), _jsxs("span", { className: "reflib-noteCount", children: [editNote.length, "/", NOTE_MAX_LENGTH] })] }), _jsxs("div", { className: "reflib-detailActions", children: [_jsx(Button, { variant: "ghost", size: "sm", disabled: busy, onClick: () => {
|
|
84
|
+
setDetailId(null);
|
|
85
|
+
}, children: t('detail.cancel') }), _jsx(Button, { variant: "primary", size: "sm", disabled: busy, onClick: () => {
|
|
86
|
+
void handleSaveNote();
|
|
87
|
+
}, children: t('detail.save') })] })] }))] }, entry.id));
|
|
88
|
+
}) })), _jsx("div", { className: "reflib-divider" }), _jsxs("div", { className: "reflib-add", children: [_jsx("span", { className: "reflib-addLabel", children: t('add.label') }), _jsxs("div", { className: "reflib-addRow", children: [_jsx(Input, { className: "reflib-addInputWrap", value: draft, placeholder: t('add.placeholder'), "aria-label": t('add.label'), disabled: busy || picking, onChange: (event) => {
|
|
89
|
+
setDraft(event.currentTarget.value);
|
|
90
|
+
}, onKeyDown: (event) => {
|
|
91
|
+
if (event.key === 'Enter' && !event.nativeEvent.isComposing) {
|
|
92
|
+
event.preventDefault();
|
|
93
|
+
void handleSubmit();
|
|
94
|
+
}
|
|
95
|
+
} }), _jsx(Button, { variant: "outline", size: "sm", icon: _jsx(IconSearchOutline16, { size: 14 }), disabled: busy || picking, onClick: () => {
|
|
96
|
+
void handleBrowse();
|
|
97
|
+
}, children: t('add.browse') })] }), _jsxs("div", { className: "reflib-noteWrap", children: [_jsx("textarea", { className: "reflib-noteTextarea", value: noteDraft, placeholder: t('add.note.placeholder'), "aria-label": t('add.note.label'), disabled: busy || picking, rows: 2, maxLength: NOTE_MAX_LENGTH, onChange: (event) => {
|
|
98
|
+
setNoteDraft(event.currentTarget.value);
|
|
99
|
+
} }), _jsxs("span", { className: "reflib-noteCount", children: [noteDraft.length, "/", NOTE_MAX_LENGTH] })] }), _jsx(Button, { variant: "primary", className: "reflib-addSubmit", icon: _jsx(IconPlusOutline16, { size: 14 }), disabled: busy || picking || draft.trim() === '', onClick: () => {
|
|
100
|
+
void handleSubmit();
|
|
101
|
+
}, children: t('add.submit') }), _jsx("span", { className: "reflib-addHint", children: t('add.hint') })] })] }) }));
|
|
58
102
|
}
|
|
59
103
|
//# sourceMappingURL=RefLibPanel.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RefLibPanel.js","sourceRoot":"","sources":["../../src/client/RefLibPanel.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAE3C,OAAO,EACL,MAAM,EACN,gBAAgB,EAChB,oBAAoB,EACpB,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,oBAAoB,EACpB,KAAK,EACL,KAAK,EACL,OAAO,GACR,MAAM,uCAAuC,CAAA;AAG9C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"RefLibPanel.js","sourceRoot":"","sources":["../../src/client/RefLibPanel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAa,MAAM,wCAAwC,CAAA;AAStF,OAAO,EAAU,KAAK,SAAS,EAAE,MAAM,cAAc,CAAA;AAErD,iCAAiC;AACjC,eAAO,MAAM,MAAM,UAAoC,CAAA;AAKvD,OAAO,QAAQ,kCAAkC,CAAC;IAChD,UAAU,kBAAkB;QAC1B,uBAAuB;QACvB,SAAS,EAAE,SAAS,CAAA;KACrB;CACF;AAgCD;;;GAGG;AACH,wBAAgB,KAAK,CAAC,GAAG,EAAE,aAAa,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAa,MAAM,wCAAwC,CAAA;AAStF,OAAO,EAAU,KAAK,SAAS,EAAE,MAAM,cAAc,CAAA;AAErD,iCAAiC;AACjC,eAAO,MAAM,MAAM,UAAoC,CAAA;AAKvD,OAAO,QAAQ,kCAAkC,CAAC;IAChD,UAAU,kBAAkB;QAC1B,uBAAuB;QACvB,SAAS,EAAE,SAAS,CAAA;KACrB;CACF;AAgCD;;;GAGG;AACH,wBAAgB,KAAK,CAAC,GAAG,EAAE,aAAa,GAAG,IAAI,CAoC9C"}
|
package/lib/client/index.js
CHANGED
|
@@ -58,12 +58,15 @@ export function apply(ctx) {
|
|
|
58
58
|
ctx.effect(() => ctx.locale.register(NS, { zh, en }), 'ref-lib: dictionaries');
|
|
59
59
|
const injected = () => ({
|
|
60
60
|
load: async (sessionId) => parseLibsPayload(await api(`/list?session=${encodeURIComponent(sessionId)}`, undefined, 'GET')),
|
|
61
|
-
add: async (sessionId, path) => {
|
|
62
|
-
await api('/add', { session: sessionId, path });
|
|
61
|
+
add: async (sessionId, path, note) => {
|
|
62
|
+
await api('/add', { session: sessionId, path, ...(note === undefined ? {} : { note }) });
|
|
63
63
|
},
|
|
64
64
|
remove: async (sessionId, id) => {
|
|
65
65
|
await api('/remove', { session: sessionId, id });
|
|
66
66
|
},
|
|
67
|
+
setNote: async (sessionId, id, note) => {
|
|
68
|
+
await api('/note', { session: sessionId, id, note });
|
|
69
|
+
},
|
|
67
70
|
pickDirectory: () => ctx.workspaces.pickDirectory(),
|
|
68
71
|
listDirectory: (path, signal) => ctx.workspaces.listDirectory(path, signal),
|
|
69
72
|
});
|
package/lib/client/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AASH,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAClF,OAAO,EAAE,UAAU,EAA2B,MAAM,iBAAkB,CAAA;AACtE,OAAO,EAAE,EAAE,EAAE,EAAE,EAAkB,MAAM,cAAc,CAAA;AAErD,iCAAiC;AACjC,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,OAAO,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAA;AAEvD,iBAAiB;AACjB,MAAM,EAAE,GAAG,SAAS,CAAA;AASpB;;;GAGG;AACH,KAAK,UAAU,GAAG,CAAI,IAAY,EAAE,OAAiB,EAAE,MAAM,GAAG,MAAM;IACpE,MAAM,GAAG,GAAG,MAAM,KAAK,CACrB,cAAc,GAAG,IAAI,EACrB,OAAO,KAAK,SAAS;QACnB,CAAC,CAAC,SAAS;QACX,CAAC,CAAC;YACE,MAAM;YACN,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;SAC9B,CACN,CAAA;IACD,IAAI,IAAI,GAAY,IAAI,CAAA;IACxB,IAAI,CAAC;QACH,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAA;IACzB,CAAC;IAAC,MAAM,CAAC;QACP,yBAAyB;IAC3B,CAAC;IACD,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,MAAM,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAA;QACzC,IAAI,MAAM,KAAK,IAAI;YAAE,MAAM,IAAI,cAAc,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAA;QAC1F,MAAM,OAAO,GAAI,IAAmC,EAAE,KAAK,IAAI,OAAO,GAAG,GAAG,CAAC,MAAM,CAAA;QACnF,MAAM,IAAI,KAAK,CAAC,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAA;IAC1E,CAAC;IACD,OAAO,IAAS,CAAA;AAClB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,KAAK,CAAC,GAAkB;IACtC,iCAAiC;IACjC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,uBAAuB,CAAC,CAAA;IAE9E,MAAM,QAAQ,GAAG,GAAuB,EAAE,CAAC,CAAC;QAC1C,IAAI,EAAE,KAAK,EAAE,SAAoB,EAA0B,EAAE,CAC3D,gBAAgB,CACd,MAAM,GAAG,CAAqB,iBAAiB,kBAAkB,CAAC,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,KAAK,CAAC,CAClG;QACH,GAAG,EAAE,KAAK,EAAE,SAAoB,EAAE,IAAY,EAAiB,EAAE;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"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"}
|
package/lib/client/locales.d.ts
CHANGED
|
@@ -20,11 +20,17 @@ export declare const zh: {
|
|
|
20
20
|
'list.empty': string;
|
|
21
21
|
'list.empty.hint': string;
|
|
22
22
|
'list.loading': string;
|
|
23
|
+
'detail.open': string;
|
|
24
|
+
'detail.open.aria': string;
|
|
25
|
+
'detail.path': string;
|
|
26
|
+
'detail.cancel': string;
|
|
27
|
+
'detail.save': string;
|
|
23
28
|
'add.label': string;
|
|
24
29
|
'add.placeholder': string;
|
|
25
30
|
'add.submit': string;
|
|
26
|
-
'add.manual': string;
|
|
27
31
|
'add.browse': string;
|
|
32
|
+
'add.note.label': string;
|
|
33
|
+
'add.note.placeholder': string;
|
|
28
34
|
'add.hint': string;
|
|
29
35
|
'browser.title': string;
|
|
30
36
|
'browser.home': string;
|
|
@@ -56,11 +62,17 @@ export declare const en: {
|
|
|
56
62
|
'list.empty': string;
|
|
57
63
|
'list.empty.hint': string;
|
|
58
64
|
'list.loading': string;
|
|
65
|
+
'detail.open': string;
|
|
66
|
+
'detail.open.aria': string;
|
|
67
|
+
'detail.path': string;
|
|
68
|
+
'detail.cancel': string;
|
|
69
|
+
'detail.save': string;
|
|
59
70
|
'add.label': string;
|
|
60
71
|
'add.placeholder': string;
|
|
61
72
|
'add.submit': string;
|
|
62
|
-
'add.manual': string;
|
|
63
73
|
'add.browse': string;
|
|
74
|
+
'add.note.label': string;
|
|
75
|
+
'add.note.placeholder': string;
|
|
64
76
|
'add.hint': string;
|
|
65
77
|
'browser.title': string;
|
|
66
78
|
'browser.home': string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"locales.d.ts","sourceRoot":"","sources":["../../src/client/locales.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,sBAAsB;AACtB,eAAO,MAAM,EAAE
|
|
1
|
+
{"version":3,"file":"locales.d.ts","sourceRoot":"","sources":["../../src/client/locales.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,sBAAsB;AACtB,eAAO,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4CmB,CAAA;AAElC,uBAAuB;AACvB,MAAM,MAAM,SAAS,GAAG,MAAM,OAAO,EAAE,CAAA;AAEvC,+BAA+B;AAC/B,eAAO,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyCsB,CAAA"}
|
package/lib/client/locales.js
CHANGED
|
@@ -20,15 +20,22 @@ export const zh = {
|
|
|
20
20
|
'list.remove': '移除',
|
|
21
21
|
'list.remove.aria': '移除参考库 {name}',
|
|
22
22
|
'list.empty': '还没有参考库',
|
|
23
|
-
'list.empty.hint': '
|
|
23
|
+
'list.empty.hint': '在下方输入目录路径,或点击「浏览」选择目录',
|
|
24
24
|
'list.loading': '正在加载…',
|
|
25
|
+
// ── 条目详情 ──
|
|
26
|
+
'detail.open': '查看详情',
|
|
27
|
+
'detail.open.aria': '查看 {name} 的详情',
|
|
28
|
+
'detail.path': '路径',
|
|
29
|
+
'detail.cancel': '取消',
|
|
30
|
+
'detail.save': '保存',
|
|
25
31
|
// ── 添加表单 ──
|
|
26
32
|
'add.label': '添加参考库',
|
|
27
33
|
'add.placeholder': '输入目录路径(支持 ~ 与相对)',
|
|
28
34
|
'add.submit': '添加',
|
|
29
|
-
'add.
|
|
30
|
-
'add.
|
|
31
|
-
'add.
|
|
35
|
+
'add.browse': '浏览',
|
|
36
|
+
'add.note.label': '用途说明',
|
|
37
|
+
'add.note.placeholder': '用途说明(可选,帮助 agent 判断相关性)',
|
|
38
|
+
'add.hint': '目录仅作只读参考;用途不填时自动提取 README 标题',
|
|
32
39
|
// ── 应用内目录浏览器(browse 后端)──
|
|
33
40
|
'browser.title': '选择目录',
|
|
34
41
|
'browser.home': '主目录',
|
|
@@ -57,14 +64,21 @@ export const en = {
|
|
|
57
64
|
'list.remove': 'Remove',
|
|
58
65
|
'list.remove.aria': 'Remove reference library {name}',
|
|
59
66
|
'list.empty': 'No reference libraries yet',
|
|
60
|
-
'list.empty.hint': 'Enter a directory path below, or click “
|
|
67
|
+
'list.empty.hint': 'Enter a directory path below, or click “Browse” to pick one',
|
|
61
68
|
'list.loading': 'Loading…',
|
|
69
|
+
// ── Entry details ──
|
|
70
|
+
'detail.open': 'View details',
|
|
71
|
+
'detail.open.aria': 'View details of {name}',
|
|
72
|
+
'detail.path': 'Path',
|
|
73
|
+
'detail.cancel': 'Cancel',
|
|
74
|
+
'detail.save': 'Save',
|
|
62
75
|
'add.label': 'Add a reference library',
|
|
63
76
|
'add.placeholder': 'Enter a directory path (~ or relative)',
|
|
64
77
|
'add.submit': 'Add',
|
|
65
|
-
'add.
|
|
66
|
-
'add.
|
|
67
|
-
'add.
|
|
78
|
+
'add.browse': 'Browse',
|
|
79
|
+
'add.note.label': 'Description',
|
|
80
|
+
'add.note.placeholder': 'Description (optional; helps the agent judge relevance)',
|
|
81
|
+
'add.hint': 'Directories are read-only references; if no description is given, the README title is used',
|
|
68
82
|
// ── In-app directory browser (browse backend) ──
|
|
69
83
|
'browser.title': 'Select Directory',
|
|
70
84
|
'browser.home': 'Home',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"locales.js","sourceRoot":"","sources":["../../src/client/locales.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,sBAAsB;AACtB,MAAM,CAAC,MAAM,EAAE,GAAG;IAChB,0CAA0C;IAC1C,YAAY,EAAE,KAAK;IACnB,WAAW,EAAE,SAAS;IACtB,iBAAiB,EAAE,iBAAiB;IACpC,aAAa;IACb,aAAa,EAAE,KAAK;IACpB,aAAa,EAAE,IAAI;IACnB,mBAAmB,EAAE,wCAAwC;IAC7D,aAAa,EAAE,IAAI;IACnB,kBAAkB,EAAE,cAAc;IAClC,YAAY,EAAE,QAAQ;IACtB,iBAAiB,EAAE,
|
|
1
|
+
{"version":3,"file":"locales.js","sourceRoot":"","sources":["../../src/client/locales.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,sBAAsB;AACtB,MAAM,CAAC,MAAM,EAAE,GAAG;IAChB,0CAA0C;IAC1C,YAAY,EAAE,KAAK;IACnB,WAAW,EAAE,SAAS;IACtB,iBAAiB,EAAE,iBAAiB;IACpC,aAAa;IACb,aAAa,EAAE,KAAK;IACpB,aAAa,EAAE,IAAI;IACnB,mBAAmB,EAAE,wCAAwC;IAC7D,aAAa,EAAE,IAAI;IACnB,kBAAkB,EAAE,cAAc;IAClC,YAAY,EAAE,QAAQ;IACtB,iBAAiB,EAAE,uBAAuB;IAC1C,cAAc,EAAE,OAAO;IACvB,aAAa;IACb,aAAa,EAAE,MAAM;IACrB,kBAAkB,EAAE,eAAe;IACnC,aAAa,EAAE,IAAI;IACnB,eAAe,EAAE,IAAI;IACrB,aAAa,EAAE,IAAI;IACnB,aAAa;IACb,WAAW,EAAE,OAAO;IACpB,iBAAiB,EAAE,kBAAkB;IACrC,YAAY,EAAE,IAAI;IAClB,YAAY,EAAE,IAAI;IAClB,gBAAgB,EAAE,MAAM;IACxB,sBAAsB,EAAE,yBAAyB;IACjD,UAAU,EAAE,8BAA8B;IAC1C,2BAA2B;IAC3B,eAAe,EAAE,MAAM;IACvB,cAAc,EAAE,KAAK;IACrB,cAAc,EAAE,OAAO;IACvB,mBAAmB,EAAE,YAAY;IACjC,oBAAoB,EAAE,aAAa;IACnC,kBAAkB,EAAE,MAAM;IAC1B,yBAAyB,EAAE,aAAa;IACxC,eAAe,EAAE,WAAW;IAC5B,iBAAiB,EAAE,MAAM;IACzB,gBAAgB,EAAE,IAAI;IACtB,+BAA+B;IAC/B,eAAe,EAAE,cAAc;IAC/B,oBAAoB,EAAE,aAAa;IACnC,cAAc,EAAE,qBAAqB;IACrC,iBAAiB,EAAE,eAAe;CACF,CAAA;AAKlC,+BAA+B;AAC/B,MAAM,CAAC,MAAM,EAAE,GAAG;IAChB,YAAY,EAAE,mBAAmB;IACjC,WAAW,EAAE,sCAAsC;IACnD,iBAAiB,EAAE,kCAAkC;IACrD,aAAa,EAAE,mBAAmB;IAClC,aAAa,EAAE,OAAO;IACtB,mBAAmB,EACjB,6GAA6G;IAC/G,aAAa,EAAE,QAAQ;IACvB,kBAAkB,EAAE,iCAAiC;IACrD,YAAY,EAAE,4BAA4B;IAC1C,iBAAiB,EAAE,6DAA6D;IAChF,cAAc,EAAE,UAAU;IAC1B,sBAAsB;IACtB,aAAa,EAAE,cAAc;IAC7B,kBAAkB,EAAE,wBAAwB;IAC5C,aAAa,EAAE,MAAM;IACrB,eAAe,EAAE,QAAQ;IACzB,aAAa,EAAE,MAAM;IACrB,WAAW,EAAE,yBAAyB;IACtC,iBAAiB,EAAE,wCAAwC;IAC3D,YAAY,EAAE,KAAK;IACnB,YAAY,EAAE,QAAQ;IACtB,gBAAgB,EAAE,aAAa;IAC/B,sBAAsB,EAAE,yDAAyD;IACjF,UAAU,EAAE,4FAA4F;IACxG,kDAAkD;IAClD,eAAe,EAAE,kBAAkB;IACnC,cAAc,EAAE,MAAM;IACtB,cAAc,EAAE,oBAAoB;IACpC,mBAAmB,EAAE,kDAAkD;IACvE,oBAAoB,EAAE,oBAAoB;IAC1C,kBAAkB,EAAE,WAAW;IAC/B,yBAAyB,EAAE,uCAAuC;IAClE,eAAe,EAAE,wBAAwB;IACzC,iBAAiB,EAAE,UAAU;IAC7B,gBAAgB,EAAE,QAAQ;IAC1B,eAAe,EAAE,kCAAkC;IACnD,oBAAoB,EAAE,yBAAyB;IAC/C,cAAc,EAAE,2DAA2D;IAC3E,iBAAiB,EAAE,yCAAyC;CACzB,CAAA"}
|