@hpyperry/dsh-ref-lib 0.7.0 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/README.md +13 -14
  2. package/lib/client/RefLibCommandCard.d.ts +29 -0
  3. package/lib/client/RefLibCommandCard.d.ts.map +1 -0
  4. package/lib/client/RefLibCommandCard.js +48 -0
  5. package/lib/client/RefLibCommandCard.js.map +1 -0
  6. package/lib/client/RefLibDock.d.ts +4 -2
  7. package/lib/client/RefLibDock.d.ts.map +1 -1
  8. package/lib/client/RefLibDock.js +121 -37
  9. package/lib/client/RefLibDock.js.map +1 -1
  10. package/lib/client/RefLibPanel.d.ts +6 -4
  11. package/lib/client/RefLibPanel.d.ts.map +1 -1
  12. package/lib/client/RefLibPanel.js +69 -20
  13. package/lib/client/RefLibPanel.js.map +1 -1
  14. package/lib/client/index.d.ts.map +1 -1
  15. package/lib/client/index.js +13 -2
  16. package/lib/client/index.js.map +1 -1
  17. package/lib/client/locales.d.ts +30 -2
  18. package/lib/client/locales.d.ts.map +1 -1
  19. package/lib/client/locales.js +42 -8
  20. package/lib/client/locales.js.map +1 -1
  21. package/lib/client/refresh-guard.d.ts +31 -0
  22. package/lib/client/refresh-guard.d.ts.map +1 -0
  23. package/lib/client/refresh-guard.js +38 -0
  24. package/lib/client/refresh-guard.js.map +1 -0
  25. package/lib/client/styles.d.ts.map +1 -1
  26. package/lib/client/styles.js +269 -23
  27. package/lib/client/styles.js.map +1 -1
  28. package/lib/client.js +1141 -500
  29. package/lib/client.js.map +1 -1
  30. package/lib/commands.d.ts +2 -1
  31. package/lib/commands.d.ts.map +1 -1
  32. package/lib/commands.js +15 -3
  33. package/lib/commands.js.map +1 -1
  34. package/lib/index.d.ts +3 -2
  35. package/lib/index.d.ts.map +1 -1
  36. package/lib/index.js +9 -7
  37. package/lib/index.js.map +1 -1
  38. package/lib/logic.d.ts +16 -1
  39. package/lib/logic.d.ts.map +1 -1
  40. package/lib/logic.js +19 -0
  41. package/lib/logic.js.map +1 -1
  42. package/lib/render.d.ts +10 -4
  43. package/lib/render.d.ts.map +1 -1
  44. package/lib/render.js +113 -16
  45. package/lib/render.js.map +1 -1
  46. package/lib/routes.d.ts.map +1 -1
  47. package/lib/routes.js +46 -2
  48. package/lib/routes.js.map +1 -1
  49. package/lib/service.d.ts +52 -3
  50. package/lib/service.d.ts.map +1 -1
  51. package/lib/service.js +172 -14
  52. package/lib/service.js.map +1 -1
  53. package/lib/spec.d.ts +9 -0
  54. package/lib/spec.d.ts.map +1 -1
  55. package/lib/validate.d.ts +1 -1
  56. package/lib/validate.d.ts.map +1 -1
  57. package/lib/validate.js +11 -3
  58. package/lib/validate.js.map +1 -1
  59. package/package.json +17 -9
@@ -10,50 +10,99 @@ 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
- await onAddPath(trimmed);
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
- return (_jsx(Modal, { open: open, onClose: onClose, title: t('panel.title'), closeLabel: t('panel.close'), description: t('panel.description', { count: String(libs.length) }), 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) => {
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
- return (_jsxs("div", { className: "reflib-row", "data-removing": removing || undefined, 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 })] }), _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: () => {
44
- onRemove(entry.id);
45
- }, children: removing ? (_jsx(IconLoadingOutline16, { size: 14, className: "reflib-spin" })) : (_jsx(IconTrashOutline16, { size: 14 })) }) })] }, entry.id));
46
- }) })), _jsx("div", { className: "reflib-divider" }), _jsxs("div", { className: "reflib-add", children: [_jsx("span", { className: "reflib-addLabel", children: t('add.label') }), _jsx(Button, { variant: "primary", className: "reflib-addBrowseMain", icon: _jsx(IconSearchOutline16, { size: 16 }), disabled: busy || picking, onClick: () => {
47
- void onBrowse();
48
- }, children: t('add.browse') }), _jsxs("div", { className: "reflib-addManual", children: [_jsx("span", { className: "reflib-addManualLabel", children: t('add.manual') }), _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) => {
49
- setDraft(event.currentTarget.value);
50
- }, onKeyDown: (event) => {
51
- if (event.key === 'Enter' && !event.nativeEvent.isComposing) {
52
- event.preventDefault();
53
- void handleSubmit();
54
- }
55
- } }), _jsx(Button, { variant: "primary", size: "sm", icon: _jsx(IconPlusOutline16, { size: 14 }), disabled: busy || picking || draft.trim() === '', onClick: () => {
56
- void handleSubmit();
57
- }, children: t('add.submit') })] })] }), _jsx("span", { className: "reflib-addHint", children: t('add.hint') })] })] }) }));
76
+ const detailOpen = detailId === entry.id;
77
+ const unavailable = entry.status !== undefined && entry.status !== 'available';
78
+ return (_jsxs("div", { className: "reflib-listItem", "data-removing": removing || undefined, "data-status": unavailable ? entry.status : undefined, children: [_jsxs("div", { className: "reflib-row", children: [unavailable
79
+ ? _jsx(IconWarningOutline16, { size: 16, className: "reflib-rowIcon reflib-rowIconWarn" })
80
+ : _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 }), unavailable && (_jsx("span", { className: "reflib-rowStatus", role: "status", children: t(entry.status === 'missing' ? 'status.missing' : 'status.notDirectory') })), 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,
81
+ // 失效条目只允许移除:详情/用途编辑禁用(node note 接口同样拒绝)。
82
+ disabled: busy || removingId !== null || unavailable, onClick: () => {
83
+ toggleDetail(entry);
84
+ }, 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: () => {
85
+ onRemove(entry.id);
86
+ }, children: removing ? (_jsx(IconLoadingOutline16, { size: 14, className: "reflib-spin" })) : (_jsx(IconTrashOutline16, { size: 14 })) }) })] }), detailOpen && !unavailable && (_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) => {
87
+ setEditNote(event.currentTarget.value);
88
+ } }), _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: () => {
89
+ setDetailId(null);
90
+ }, children: t('detail.cancel') }), _jsx(Button, { variant: "primary", size: "sm", disabled: busy, onClick: () => {
91
+ void handleSaveNote();
92
+ }, children: t('detail.save') })] })] }))] }, entry.id));
93
+ }) })), _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) => {
94
+ setDraft(event.currentTarget.value);
95
+ }, onKeyDown: (event) => {
96
+ if (event.key === 'Enter' && !event.nativeEvent.isComposing) {
97
+ event.preventDefault();
98
+ void handleSubmit();
99
+ }
100
+ } }), _jsx(Button, { variant: "outline", size: "sm", icon: _jsx(IconSearchOutline16, { size: 14 }), disabled: busy || picking, onClick: () => {
101
+ void handleBrowse();
102
+ }, 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) => {
103
+ setNoteDraft(event.currentTarget.value);
104
+ } }), _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: () => {
105
+ void handleSubmit();
106
+ }, children: t('add.submit') }), _jsx("span", { className: "reflib-addHint", children: t('add.hint') })] })] }) }));
58
107
  }
59
108
  //# sourceMappingURL=RefLibPanel.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"RefLibPanel.js","sourceRoot":"","sources":["../../src/client/RefLibPanel.tsx"],"names":[],"mappings":"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"}
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,CAiC9C"}
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;AAUtF,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,CAiD9C"}
@@ -15,6 +15,7 @@
15
15
  * @module @hpyperry/dsh-ref-lib/src/client
16
16
  */
17
17
  import { parseApiErrorPayload, parseLibsPayload, RefLibApiError } from "./data.js";
18
+ import { RefLibCommandCard } from "./RefLibCommandCard.js";
18
19
  import { RefLibDock } from "./RefLibDock.js";
19
20
  import { zh, en } from "./locales.js";
20
21
  /** 所需服务(cordis fiber inject)。 */
@@ -58,12 +59,15 @@ export function apply(ctx) {
58
59
  ctx.effect(() => ctx.locale.register(NS, { zh, en }), 'ref-lib: dictionaries');
59
60
  const injected = () => ({
60
61
  load: async (sessionId) => parseLibsPayload(await api(`/list?session=${encodeURIComponent(sessionId)}`, undefined, 'GET')),
61
- add: async (sessionId, path) => {
62
- await api('/add', { session: sessionId, path });
62
+ add: async (sessionId, path, note) => {
63
+ await api('/add', { session: sessionId, path, ...(note === undefined ? {} : { note }) });
63
64
  },
64
65
  remove: async (sessionId, id) => {
65
66
  await api('/remove', { session: sessionId, id });
66
67
  },
68
+ setNote: async (sessionId, id, note) => {
69
+ await api('/note', { session: sessionId, id, note });
70
+ },
67
71
  pickDirectory: () => ctx.workspaces.pickDirectory(),
68
72
  listDirectory: (path, signal) => ctx.workspaces.listDirectory(path, signal),
69
73
  });
@@ -76,5 +80,12 @@ export function apply(ctx) {
76
80
  locale: NS,
77
81
  inject: injected,
78
82
  }, RefLibDock));
83
+ // /ref-lib 命令结果专属卡片:官方 GenericCommandCard 长结果显示不全(折叠单行
84
+ // ellipsis / 展开 260px 内滚动),本卡片默认全展开完整结果 + 复制按钮。
85
+ ctx.slots.inject('conversation.chat.commandview', () => ctx.slots.register({
86
+ name: 'conversation.chat.commandview',
87
+ key: 'ref-lib',
88
+ locale: NS,
89
+ }, RefLibCommandCard));
79
90
  }
80
91
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"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"}
@@ -12,6 +12,9 @@ export declare const zh: {
12
12
  'dock.label': string;
13
13
  'dock.aria': string;
14
14
  'dock.count.aria': string;
15
+ 'dock.unavailable': string;
16
+ 'status.missing': string;
17
+ 'status.notDirectory': string;
15
18
  'panel.title': string;
16
19
  'panel.close': string;
17
20
  'panel.description': string;
@@ -20,11 +23,17 @@ export declare const zh: {
20
23
  'list.empty': string;
21
24
  'list.empty.hint': string;
22
25
  'list.loading': string;
26
+ 'detail.open': string;
27
+ 'detail.open.aria': string;
28
+ 'detail.path': string;
29
+ 'detail.cancel': string;
30
+ 'detail.save': string;
23
31
  'add.label': string;
24
32
  'add.placeholder': string;
25
33
  'add.submit': string;
26
- 'add.manual': string;
27
34
  'add.browse': string;
35
+ 'add.note.label': string;
36
+ 'add.note.placeholder': string;
28
37
  'add.hint': string;
29
38
  'browser.title': string;
30
39
  'browser.home': string;
@@ -40,6 +49,11 @@ export declare const zh: {
40
49
  'error.notDirectory': string;
41
50
  'error.unsafe': string;
42
51
  'error.unknownId': string;
52
+ 'error.unavailable': string;
53
+ 'command.running': string;
54
+ 'command.done': string;
55
+ 'command.copy': string;
56
+ 'command.copied': string;
43
57
  };
44
58
  /** ref-lib 命名空间的键集。 */
45
59
  export type RefLibKey = keyof typeof zh;
@@ -48,6 +62,9 @@ export declare const en: {
48
62
  'dock.label': string;
49
63
  'dock.aria': string;
50
64
  'dock.count.aria': string;
65
+ 'dock.unavailable': string;
66
+ 'status.missing': string;
67
+ 'status.notDirectory': string;
51
68
  'panel.title': string;
52
69
  'panel.close': string;
53
70
  'panel.description': string;
@@ -56,11 +73,17 @@ export declare const en: {
56
73
  'list.empty': string;
57
74
  'list.empty.hint': string;
58
75
  'list.loading': string;
76
+ 'detail.open': string;
77
+ 'detail.open.aria': string;
78
+ 'detail.path': string;
79
+ 'detail.cancel': string;
80
+ 'detail.save': string;
59
81
  'add.label': string;
60
82
  'add.placeholder': string;
61
83
  'add.submit': string;
62
- 'add.manual': string;
63
84
  'add.browse': string;
85
+ 'add.note.label': string;
86
+ 'add.note.placeholder': string;
64
87
  'add.hint': string;
65
88
  'browser.title': string;
66
89
  'browser.home': string;
@@ -76,5 +99,10 @@ export declare const en: {
76
99
  'error.notDirectory': string;
77
100
  'error.unsafe': string;
78
101
  'error.unknownId': string;
102
+ 'error.unavailable': string;
103
+ 'command.running': string;
104
+ 'command.done': string;
105
+ 'command.copy': string;
106
+ 'command.copied': string;
79
107
  };
80
108
  //# sourceMappingURL=locales.d.ts.map
@@ -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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqCmB,CAAA;AAElC,uBAAuB;AACvB,MAAM,MAAM,SAAS,GAAG,MAAM,OAAO,EAAE,CAAA;AAEvC,+BAA+B;AAC/B,eAAO,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkCsB,CAAA"}
1
+ {"version":3,"file":"locales.d.ts","sourceRoot":"","sources":["../../src/client/locales.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,sBAAsB;AACtB,eAAO,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsDmB,CAAA;AAElC,uBAAuB;AACvB,MAAM,MAAM,SAAS,GAAG,MAAM,OAAO,EAAE,CAAA;AAEvC,+BAA+B;AAC/B,eAAO,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmDsB,CAAA"}
@@ -13,6 +13,10 @@ export const zh = {
13
13
  'dock.label': '参考库',
14
14
  'dock.aria': '管理只读参考库',
15
15
  'dock.count.aria': '参考库,共 {count} 个',
16
+ 'dock.unavailable': '参考库,{count} 个失效',
17
+ // ── 条目可用性(失效检测,v9)──
18
+ 'status.missing': '目录已删除或不可访问',
19
+ 'status.notDirectory': '路径不再是目录',
16
20
  // ── 管理面板 ──
17
21
  'panel.title': '参考库',
18
22
  'panel.close': '关闭',
@@ -20,15 +24,22 @@ export const zh = {
20
24
  'list.remove': '移除',
21
25
  'list.remove.aria': '移除参考库 {name}',
22
26
  'list.empty': '还没有参考库',
23
- 'list.empty.hint': '在下方输入目录路径,或点击「选择目录」从系统选择',
27
+ 'list.empty.hint': '在下方输入目录路径,或点击「浏览」选择目录',
24
28
  'list.loading': '正在加载…',
29
+ // ── 条目详情 ──
30
+ 'detail.open': '查看详情',
31
+ 'detail.open.aria': '查看 {name} 的详情',
32
+ 'detail.path': '路径',
33
+ 'detail.cancel': '取消',
34
+ 'detail.save': '保存',
25
35
  // ── 添加表单 ──
26
36
  'add.label': '添加参考库',
27
37
  'add.placeholder': '输入目录路径(支持 ~ 与相对)',
28
38
  'add.submit': '添加',
29
- 'add.manual': '或手动输入路径',
30
- 'add.browse': '选择目录',
31
- 'add.hint': '目录仅作只读参考;位于工作区之外时由系统强制只读',
39
+ 'add.browse': '浏览',
40
+ 'add.note.label': '用途说明',
41
+ 'add.note.placeholder': '用途说明(可选,帮助 agent 判断相关性)',
42
+ 'add.hint': '目录仅作只读参考;用途不填时自动提取 README 标题',
32
43
  // ── 应用内目录浏览器(browse 后端)──
33
44
  'browser.title': '选择目录',
34
45
  'browser.home': '主目录',
@@ -45,26 +56,43 @@ export const zh = {
45
56
  'error.notDirectory': '不是目录:{path}',
46
57
  'error.unsafe': '路径包含控制字符,已拒绝:{path}',
47
58
  'error.unknownId': '未找到参考库条目:{id}',
59
+ 'error.unavailable': '参考库目录不可用(仅允许移除)',
60
+ // ── /ref-lib 命令结果卡片(conversation.chat.commandview)──
61
+ 'command.running': '执行中…',
62
+ 'command.done': '完成',
63
+ 'command.copy': '复制',
64
+ 'command.copied': '已复制',
48
65
  };
49
66
  /** 英文词典,与 zh 键集逐键对齐(编译期校验)。 */
50
67
  export const en = {
51
68
  'dock.label': 'Reference Library',
52
69
  'dock.aria': 'Manage read-only reference libraries',
53
70
  'dock.count.aria': 'Reference library, {count} total',
71
+ 'dock.unavailable': 'Reference library, {count} unavailable',
72
+ // ── Entry availability (stale detection, v9) ──
73
+ 'status.missing': 'Directory deleted or unavailable',
74
+ 'status.notDirectory': 'Path is no longer a directory',
54
75
  'panel.title': 'Reference Library',
55
76
  'panel.close': 'Close',
56
77
  'panel.description': '{count} read-only reference libraries: the agent may read them for reference, but must not modify any files',
57
78
  'list.remove': 'Remove',
58
79
  'list.remove.aria': 'Remove reference library {name}',
59
80
  'list.empty': 'No reference libraries yet',
60
- 'list.empty.hint': 'Enter a directory path below, or click “Choose directory” to pick one',
81
+ 'list.empty.hint': 'Enter a directory path below, or click “Browse” to pick one',
61
82
  'list.loading': 'Loading…',
83
+ // ── Entry details ──
84
+ 'detail.open': 'View details',
85
+ 'detail.open.aria': 'View details of {name}',
86
+ 'detail.path': 'Path',
87
+ 'detail.cancel': 'Cancel',
88
+ 'detail.save': 'Save',
62
89
  'add.label': 'Add a reference library',
63
90
  'add.placeholder': 'Enter a directory path (~ or relative)',
64
91
  'add.submit': 'Add',
65
- 'add.manual': 'or enter a path manually',
66
- 'add.browse': 'Choose directory',
67
- 'add.hint': 'Directories are read-only references; outside the workspace they are enforced read-only by the system',
92
+ 'add.browse': 'Browse',
93
+ 'add.note.label': 'Description',
94
+ 'add.note.placeholder': 'Description (optional; helps the agent judge relevance)',
95
+ 'add.hint': 'Directories are read-only references; if no description is given, the README title is used',
68
96
  // ── In-app directory browser (browse backend) ──
69
97
  'browser.title': 'Select Directory',
70
98
  'browser.home': 'Home',
@@ -80,5 +108,11 @@ export const en = {
80
108
  'error.notDirectory': 'Not a directory: {path}',
81
109
  'error.unsafe': 'Path contains control characters and was rejected: {path}',
82
110
  'error.unknownId': 'Reference library entry not found: {id}',
111
+ 'error.unavailable': 'Reference library directory unavailable (remove only)',
112
+ // ── /ref-lib command result card (conversation.chat.commandview) ──
113
+ 'command.running': 'Running…',
114
+ 'command.done': 'Done',
115
+ 'command.copy': 'Copy',
116
+ 'command.copied': 'Copied',
83
117
  };
84
118
  //# sourceMappingURL=locales.js.map
@@ -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,0BAA0B;IAC7C,cAAc,EAAE,OAAO;IACvB,aAAa;IACb,WAAW,EAAE,OAAO;IACpB,iBAAiB,EAAE,kBAAkB;IACrC,YAAY,EAAE,IAAI;IAClB,YAAY,EAAE,SAAS;IACvB,YAAY,EAAE,MAAM;IACpB,UAAU,EAAE,0BAA0B;IACtC,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,uEAAuE;IAC1F,cAAc,EAAE,UAAU;IAC1B,WAAW,EAAE,yBAAyB;IACtC,iBAAiB,EAAE,wCAAwC;IAC3D,YAAY,EAAE,KAAK;IACnB,YAAY,EAAE,0BAA0B;IACxC,YAAY,EAAE,kBAAkB;IAChC,UAAU,EAAE,uGAAuG;IACnH,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"}
1
+ {"version":3,"file":"locales.js","sourceRoot":"","sources":["../../src/client/locales.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * 并发读守卫(竞态控制核心):只接受"最后发起"的请求结果。
3
+ *
4
+ * RefLibDock 有多个并发"拉取列表"来源——挂载预载、打开面板、30s 轮询、操作后的
5
+ * 刷新——网络返回顺序不保证,旧快照可能覆盖新快照。守卫用递增编号标记每次发起:
6
+ * 返回时只有仍持有**最新编号**的请求结果才被应用,其余一律丢弃。
7
+ *
8
+ * 为什么"最后发起"就代表最新:`list` 返回的是请求发起时刻的服务端快照,发起越晚
9
+ * 快照越新,所以只信最后发起者 ≈ 只信最新快照。操作后的刷新总是最后发起(操作
10
+ * 完成后才发起),天然胜出;响应乱序时旧号被丢弃,最终一致。
11
+ *
12
+ * 纯 TS、零依赖、零 DOM——node 环境可直接单元测试(tests/refresh-guard.spec.ts)。
13
+ * @module @hpyperry/dsh-ref-lib/src/client/refresh-guard
14
+ */
15
+ export declare class RefreshGuard {
16
+ private seq;
17
+ /** 发起一次请求,返回本次请求的编号。 */
18
+ begin(): number;
19
+ /**
20
+ * 该编号是否仍是最新发起者。
21
+ * @param mine - 发起时 {@link begin} 返回的编号。
22
+ * @returns true 表示应应用该请求的结果;false 表示期间又有新请求发起,结果已过期。
23
+ */
24
+ isLatest(mine: number): boolean;
25
+ /**
26
+ * 作废所有 in-flight 请求的结果(会话切换 / 组件卸载时调用):seq 递增后,
27
+ * 任何旧编号的 {@link isLatest} 都返回 false。
28
+ */
29
+ invalidate(): void;
30
+ }
31
+ //# sourceMappingURL=refresh-guard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refresh-guard.d.ts","sourceRoot":"","sources":["../../src/client/refresh-guard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,GAAG,CAAI;IAEf,wBAAwB;IACxB,KAAK,IAAI,MAAM;IAKf;;;;OAIG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI/B;;;OAGG;IACH,UAAU,IAAI,IAAI;CAGnB"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * 并发读守卫(竞态控制核心):只接受"最后发起"的请求结果。
3
+ *
4
+ * RefLibDock 有多个并发"拉取列表"来源——挂载预载、打开面板、30s 轮询、操作后的
5
+ * 刷新——网络返回顺序不保证,旧快照可能覆盖新快照。守卫用递增编号标记每次发起:
6
+ * 返回时只有仍持有**最新编号**的请求结果才被应用,其余一律丢弃。
7
+ *
8
+ * 为什么"最后发起"就代表最新:`list` 返回的是请求发起时刻的服务端快照,发起越晚
9
+ * 快照越新,所以只信最后发起者 ≈ 只信最新快照。操作后的刷新总是最后发起(操作
10
+ * 完成后才发起),天然胜出;响应乱序时旧号被丢弃,最终一致。
11
+ *
12
+ * 纯 TS、零依赖、零 DOM——node 环境可直接单元测试(tests/refresh-guard.spec.ts)。
13
+ * @module @hpyperry/dsh-ref-lib/src/client/refresh-guard
14
+ */
15
+ export class RefreshGuard {
16
+ seq = 0;
17
+ /** 发起一次请求,返回本次请求的编号。 */
18
+ begin() {
19
+ this.seq += 1;
20
+ return this.seq;
21
+ }
22
+ /**
23
+ * 该编号是否仍是最新发起者。
24
+ * @param mine - 发起时 {@link begin} 返回的编号。
25
+ * @returns true 表示应应用该请求的结果;false 表示期间又有新请求发起,结果已过期。
26
+ */
27
+ isLatest(mine) {
28
+ return mine === this.seq;
29
+ }
30
+ /**
31
+ * 作废所有 in-flight 请求的结果(会话切换 / 组件卸载时调用):seq 递增后,
32
+ * 任何旧编号的 {@link isLatest} 都返回 false。
33
+ */
34
+ invalidate() {
35
+ this.seq += 1;
36
+ }
37
+ }
38
+ //# sourceMappingURL=refresh-guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refresh-guard.js","sourceRoot":"","sources":["../../src/client/refresh-guard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,MAAM,OAAO,YAAY;IACf,GAAG,GAAG,CAAC,CAAA;IAEf,wBAAwB;IACxB,KAAK;QACH,IAAI,CAAC,GAAG,IAAI,CAAC,CAAA;QACb,OAAO,IAAI,CAAC,GAAG,CAAA;IACjB,CAAC;IAED;;;;OAIG;IACH,QAAQ,CAAC,IAAY;QACnB,OAAO,IAAI,KAAK,IAAI,CAAC,GAAG,CAAA;IAC1B,CAAC;IAED;;;OAGG;IACH,UAAU;QACR,IAAI,CAAC,GAAG,IAAI,CAAC,CAAA;IACf,CAAC;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../src/client/styles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AA4eH,mDAAmD;AACnD,wBAAgB,kBAAkB,IAAI,IAAI,CAQzC"}
1
+ {"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../src/client/styles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAkuBH,mDAAmD;AACnD,wBAAgB,kBAAkB,IAAI,IAAI,CAQzC"}