@lemoncat7/dsh-partner 1.11.1 → 1.12.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 (121) hide show
  1. package/README.md +21 -1
  2. package/docs/memory-quality.md +115 -0
  3. package/docs/releases/1.12.0.md +25 -0
  4. package/lib/agent-runtime.d.ts +1 -1
  5. package/lib/agent-runtime.d.ts.map +1 -1
  6. package/lib/agent-runtime.js +16 -11
  7. package/lib/agent-runtime.js.map +1 -1
  8. package/lib/api/features/memory-layers-api.d.ts +5 -0
  9. package/lib/api/features/memory-layers-api.d.ts.map +1 -0
  10. package/lib/api/features/memory-layers-api.js +42 -0
  11. package/lib/api/features/memory-layers-api.js.map +1 -0
  12. package/lib/api.d.ts.map +1 -1
  13. package/lib/api.js +5 -1
  14. package/lib/api.js.map +1 -1
  15. package/lib/client-api.d.ts +2 -0
  16. package/lib/client-api.d.ts.map +1 -1
  17. package/lib/client.d.ts.map +1 -1
  18. package/lib/client.js +2894 -2553
  19. package/lib/client.js.map +4 -4
  20. package/lib/collaboration/composition.js +2 -2
  21. package/lib/collaboration/composition.js.map +1 -1
  22. package/lib/concern-store.d.ts +1 -0
  23. package/lib/concern-store.d.ts.map +1 -1
  24. package/lib/concern-store.js +17 -0
  25. package/lib/concern-store.js.map +1 -1
  26. package/lib/concern-tool.d.ts +1 -1
  27. package/lib/concern-tool.d.ts.map +1 -1
  28. package/lib/concern-tool.js +12 -9
  29. package/lib/concern-tool.js.map +1 -1
  30. package/lib/daily-review.d.ts +1 -0
  31. package/lib/daily-review.d.ts.map +1 -1
  32. package/lib/daily-review.js +14 -3
  33. package/lib/daily-review.js.map +1 -1
  34. package/lib/index.d.ts.map +1 -1
  35. package/lib/index.js +13 -0
  36. package/lib/index.js.map +1 -1
  37. package/lib/memory-artifacts.d.ts +42 -0
  38. package/lib/memory-artifacts.d.ts.map +1 -0
  39. package/lib/memory-artifacts.js +120 -0
  40. package/lib/memory-artifacts.js.map +1 -0
  41. package/lib/memory-domain.d.ts +10 -0
  42. package/lib/memory-domain.d.ts.map +1 -1
  43. package/lib/memory-journal.d.ts +16 -0
  44. package/lib/memory-journal.d.ts.map +1 -0
  45. package/lib/memory-journal.js +51 -0
  46. package/lib/memory-journal.js.map +1 -0
  47. package/lib/memory-prompt-context.d.ts.map +1 -1
  48. package/lib/memory-prompt-context.js +2 -1
  49. package/lib/memory-prompt-context.js.map +1 -1
  50. package/lib/memory-quality.d.ts +4 -0
  51. package/lib/memory-quality.d.ts.map +1 -0
  52. package/lib/memory-quality.js +16 -0
  53. package/lib/memory-quality.js.map +1 -0
  54. package/lib/memory-reflection.d.ts +15 -2
  55. package/lib/memory-reflection.d.ts.map +1 -1
  56. package/lib/memory-reflection.js +103 -17
  57. package/lib/memory-reflection.js.map +1 -1
  58. package/lib/memory-retrieval.d.ts +5 -0
  59. package/lib/memory-retrieval.d.ts.map +1 -0
  60. package/lib/memory-retrieval.js +20 -0
  61. package/lib/memory-retrieval.js.map +1 -0
  62. package/lib/memory-store.d.ts +26 -2
  63. package/lib/memory-store.d.ts.map +1 -1
  64. package/lib/memory-store.js +142 -50
  65. package/lib/memory-store.js.map +1 -1
  66. package/lib/memory-worker.d.ts +25 -0
  67. package/lib/memory-worker.d.ts.map +1 -0
  68. package/lib/memory-worker.js +42 -0
  69. package/lib/memory-worker.js.map +1 -0
  70. package/lib/profile-domain.d.ts.map +1 -1
  71. package/lib/profile-domain.js +12 -4
  72. package/lib/profile-domain.js.map +1 -1
  73. package/lib/ui/memory/automation-settings.d.ts +8 -0
  74. package/lib/ui/memory/automation-settings.d.ts.map +1 -0
  75. package/lib/ui/memory/automation-settings.js +60 -0
  76. package/lib/ui/memory/automation-settings.js.map +1 -0
  77. package/lib/ui/memory/concern-board.d.ts +12 -0
  78. package/lib/ui/memory/concern-board.d.ts.map +1 -0
  79. package/lib/ui/memory/concern-board.js +129 -0
  80. package/lib/ui/memory/concern-board.js.map +1 -0
  81. package/lib/ui/memory/concern-panel.d.ts +7 -0
  82. package/lib/ui/memory/concern-panel.d.ts.map +1 -0
  83. package/lib/ui/memory/concern-panel.js +62 -0
  84. package/lib/ui/memory/concern-panel.js.map +1 -0
  85. package/lib/ui/memory/experience-view.d.ts +8 -0
  86. package/lib/ui/memory/experience-view.d.ts.map +1 -0
  87. package/lib/ui/memory/experience-view.js +52 -0
  88. package/lib/ui/memory/experience-view.js.map +1 -0
  89. package/lib/ui/memory/history-view.d.ts +6 -0
  90. package/lib/ui/memory/history-view.d.ts.map +1 -0
  91. package/lib/ui/memory/history-view.js +40 -0
  92. package/lib/ui/memory/history-view.js.map +1 -0
  93. package/lib/ui/memory/memory-cards.d.ts +14 -0
  94. package/lib/ui/memory/memory-cards.d.ts.map +1 -0
  95. package/lib/ui/memory/memory-cards.js +17 -0
  96. package/lib/ui/memory/memory-cards.js.map +1 -0
  97. package/lib/ui/memory/memory-detail.d.ts +8 -0
  98. package/lib/ui/memory/memory-detail.d.ts.map +1 -0
  99. package/lib/ui/memory/memory-detail.js +45 -0
  100. package/lib/ui/memory/memory-detail.js.map +1 -0
  101. package/lib/ui/memory/memory-graph.d.ts +8 -0
  102. package/lib/ui/memory/memory-graph.d.ts.map +1 -0
  103. package/lib/ui/memory/memory-graph.js +43 -0
  104. package/lib/ui/memory/memory-graph.js.map +1 -0
  105. package/lib/ui/memory/memory-library.d.ts +9 -0
  106. package/lib/ui/memory/memory-library.d.ts.map +1 -0
  107. package/lib/ui/memory/memory-library.js +38 -0
  108. package/lib/ui/memory/memory-library.js.map +1 -0
  109. package/lib/ui/memory/memory-panel.d.ts +10 -0
  110. package/lib/ui/memory/memory-panel.d.ts.map +1 -0
  111. package/lib/ui/memory/memory-panel.js +48 -0
  112. package/lib/ui/memory/memory-panel.js.map +1 -0
  113. package/lib/ui/memory/types.d.ts +44 -0
  114. package/lib/ui/memory/types.d.ts.map +1 -0
  115. package/lib/ui/memory/types.js +2 -0
  116. package/lib/ui/memory/types.js.map +1 -0
  117. package/lib/ui/memory/use-memory-resource.d.ts +9 -0
  118. package/lib/ui/memory/use-memory-resource.d.ts.map +1 -0
  119. package/lib/ui/memory/use-memory-resource.js +65 -0
  120. package/lib/ui/memory/use-memory-resource.js.map +1 -0
  121. package/package.json +3 -1
@@ -18,6 +18,9 @@ export function isProfileBaselineEntry(memory) {
18
18
  && (memory.locked === true || (memory.confidence >= PROFILE_CONFIDENCE_MIN && memory.importance >= PROFILE_IMPORTANCE_MIN));
19
19
  }
20
20
  export function buildProfileSnapshot(companionId, scopeId, memories) {
21
+ const now = Date.now();
22
+ memories = memories.filter(item => item.companionId === companionId && item.scopeId === scopeId
23
+ && (item.expiresAt === undefined || item.expiresAt > now));
21
24
  const entries = [];
22
25
  const subjects = new Set();
23
26
  for (const memory of memories.filter(isProfileBaselineEntry).sort(compareProfileEntries)) {
@@ -29,17 +32,22 @@ export function buildProfileSnapshot(companionId, scopeId, memories) {
29
32
  if (entries.length >= PROFILE_ENTRY_LIMIT)
30
33
  break;
31
34
  }
32
- const version = createHash('sha256').update(entries.map(entry => [
35
+ const preferences = memories.filter(item => item.kind === 'preference' && item.status === 'active'
36
+ && (item.locked || (item.confidence >= .8 && item.importance >= .65 && new Set(item.evidence.map(source => source.turnId)).size >= 2)))
37
+ .sort((a, b) => Number(Boolean(b.locked)) - Number(Boolean(a.locked)) || b.importance - a.importance || b.updatedAt - a.updatedAt).slice(0, 4);
38
+ const baseline = [...entries, ...preferences];
39
+ const version = createHash('sha256').update(baseline.map(entry => [
33
40
  entry.id, canonicalProfileSubject(entry.subject) ?? entry.subject, entry.content, entry.locked ? 1 : 0,
34
41
  ].join('\u0000')).join('\u0001')).digest('hex').slice(0, 12);
35
42
  return {
36
43
  companionId,
37
44
  scopeId,
38
45
  version,
39
- ...(entries[0] ? { updatedAt: Math.max(...entries.map(entry => entry.updatedAt)) } : {}),
46
+ ...(baseline[0] ? { updatedAt: Math.max(...baseline.map(entry => entry.updatedAt)) } : {}),
40
47
  entries,
41
- evidenceCount: new Set(entries.flatMap(entry => entry.evidence.map(evidence => evidence.turnId))).size,
42
- lockedCount: entries.filter(entry => entry.locked).length,
48
+ preferences,
49
+ evidenceCount: new Set(baseline.flatMap(entry => entry.evidence.map(evidence => evidence.turnId))).size,
50
+ lockedCount: baseline.filter(entry => entry.locked).length,
43
51
  };
44
52
  }
45
53
  function compareProfileEntries(left, right) {
@@ -1 +1 @@
1
- {"version":3,"file":"profile-domain.js","sourceRoot":"","sources":["../src/profile-domain.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"profile-domain.js","sourceRoot":"","sources":["../src/profile-domain.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { type CompanionView } from '../../client-api.js';
2
+ export declare function AutomationSettings({ companion, kind, close, onChanged }: {
3
+ companion: CompanionView;
4
+ kind: 'memory' | 'heartbeat';
5
+ close(): void;
6
+ onChanged(): Promise<void>;
7
+ }): JSX.Element;
8
+ //# sourceMappingURL=automation-settings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"automation-settings.d.ts","sourceRoot":"","sources":["../../../src/ui/memory/automation-settings.tsx"],"names":[],"mappings":"AACA,OAAO,EAAM,KAAK,aAAa,EAA6C,MAAM,qBAAqB,CAAA;AAKvG,wBAAgB,kBAAkB,CAAC,EAAC,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAC,EAAE;IAAC,SAAS,EAAE,aAAa,CAAC;IAAC,IAAI,EAAE,QAAQ,GAAG,WAAW,CAAC;IAAC,KAAK,IAAI,IAAI,CAAC;IAAC,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CAAC,GAAG,GAAG,CAAC,OAAO,CAqCxL"}
@@ -0,0 +1,60 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useRef, useState } from 'react';
3
+ import { api } from '../../client-api.js';
4
+ import { FormField as Field } from '../partner-components.js';
5
+ import { WorkspaceDialog, WorkspaceNotice, errorMessage } from '../workspace-components.js';
6
+ import { useMemoryResource } from './use-memory-resource.js';
7
+ export function AutomationSettings({ companion, kind, close, onChanged }) {
8
+ const [automation, setAutomation] = useState(() => structuredClone(companion.automation));
9
+ const lock = useRef(false);
10
+ const [busy, setBusy] = useState(false);
11
+ const [error, setError] = useState();
12
+ const [notice, setNotice] = useState();
13
+ const { data: modelCatalog, error: catalogError } = useMemoryResource(kind === 'memory' ? '/models' : undefined);
14
+ const inheritedProvider = companion.provider || modelCatalog?.defaultSelection.provider || '';
15
+ const selectedProvider = automation.memory.provider || inheritedProvider;
16
+ const modelOptions = modelCatalog?.providers.find(item => item.id === selectedProvider)?.models ?? [];
17
+ const save = async () => {
18
+ if (lock.current)
19
+ return;
20
+ lock.current = true;
21
+ setBusy(true);
22
+ setError(undefined);
23
+ setNotice(undefined);
24
+ try {
25
+ await api('/companions/' + encodeURIComponent(companion.id) + '/automation', { method: 'PUT', body: JSON.stringify({ automation: { ...companion.automation, [kind]: automation[kind] } }) });
26
+ setNotice('设置已保存');
27
+ await onChanged();
28
+ }
29
+ catch (reason) {
30
+ setError(errorMessage(reason));
31
+ }
32
+ finally {
33
+ lock.current = false;
34
+ setBusy(false);
35
+ }
36
+ };
37
+ const review = async () => {
38
+ if (lock.current)
39
+ return;
40
+ lock.current = true;
41
+ setBusy(true);
42
+ setError(undefined);
43
+ setNotice(undefined);
44
+ try {
45
+ const result = await api('/companions/' + encodeURIComponent(companion.id) + '/memory/review', { method: 'POST' });
46
+ setNotice(result.reason ?? '终审完成 ' + result.reviewed + ' 篇,失败 ' + result.failed + ' 篇');
47
+ await onChanged();
48
+ }
49
+ catch (reason) {
50
+ setError(errorMessage(reason));
51
+ }
52
+ finally {
53
+ lock.current = false;
54
+ setBusy(false);
55
+ }
56
+ };
57
+ return _jsx(WorkspaceDialog, { title: kind === 'memory' ? '记忆设置' : '持续关注设置', detail: kind === 'memory' ? '管理学习、历史保留与每日整理。有效的长期认识独立保留。' : '持续关注用于观察变化;定时执行工作请使用定时任务。', close: () => { if (!busy)
58
+ close(); }, children: _jsxs("div", { className: "dsh-partner-memory-settings", children: [(error || catalogError) && _jsx(WorkspaceNotice, { children: error || catalogError }), notice && _jsx(WorkspaceNotice, { kind: "success", children: notice }), kind === 'memory' ? (_jsxs("section", { className: "dsh-partner-automation", children: [_jsxs("header", { children: [_jsxs("span", { children: [_jsx("strong", { children: "\u5B66\u4E60\u4E0E\u957F\u671F\u8BB0\u5FC6" }), _jsx("small", { children: "\u6309\u8054\u7CFB\u4EBA\u5F52\u6863\u5B8C\u6574\u5BF9\u8BDD\uFF0C\u63D0\u70BC\u6BCF\u65E5\u56DE\u987E\u548C\u7ED3\u6784\u5316\u8BB0\u5FC6\uFF0C\u5E76\u5728\u76F8\u5173\u8BDD\u9898\u51FA\u73B0\u65F6\u53EC\u56DE\u3002" })] }), _jsx("button", { type: "button", className: "dsh-partner-switch", disabled: busy, role: "switch", "data-on": automation.memory.enabled, "aria-checked": automation.memory.enabled, "aria-label": "\u542F\u7528\u4F19\u4F34\u5B66\u4E60", onClick: () => setAutomation(current => ({ ...current, memory: { ...current.memory, enabled: !current.memory.enabled } })), children: _jsx("i", {}) })] }), _jsxs("div", { className: "dsh-partner-automation-fields is-memory-model", children: [_jsx(Field, { label: "\u5386\u53F2\u4FDD\u7559\u671F\u9650", hint: "\u4E0D\u4F1A\u5220\u9664\u4ECD\u6709\u6548\u7684\u957F\u671F\u504F\u597D", children: _jsxs("select", { value: automation.memory.retentionDays, onChange: event => setAutomation(current => ({ ...current, memory: { ...current.memory, retentionDays: Number(event.target.value) } })), children: [_jsx("option", { value: 0, children: "\u6C38\u4E45\u4FDD\u7559" }), _jsx("option", { value: 30, children: "30 \u5929" }), _jsx("option", { value: 90, children: "90 \u5929" }), _jsx("option", { value: 180, children: "180 \u5929" }), _jsx("option", { value: 365, children: "1 \u5E74" }), _jsx("option", { value: 1095, children: "3 \u5E74" })] }) }), _jsx(Field, { label: "\u63D0\u70BC Provider", hint: "\u9ED8\u8BA4\u7EE7\u627F\u4F19\u4F34", children: _jsxs("select", { value: automation.memory.provider ?? '', onChange: event => setAutomation(current => ({ ...current, memory: { ...current.memory, provider: event.target.value, model: '' } })), children: [_jsxs("option", { value: "", children: ["\u8DDF\u968F\u4F19\u4F34 \u00B7 ", inheritedProvider || 'DSH 默认'] }), modelCatalog?.providers.map(provider => _jsx("option", { value: provider.id, children: provider.name || provider.id }, provider.id))] }) }), _jsx(Field, { label: "\u63D0\u70BC\u6A21\u578B", hint: "\u9ED8\u8BA4\u7EE7\u627F\u4F19\u4F34", children: _jsxs("select", { value: automation.memory.model ?? '', onChange: event => setAutomation(current => ({ ...current, memory: { ...current.memory, model: event.target.value } })), children: [_jsxs("option", { value: "", children: ["\u8DDF\u968F\u4F19\u4F34 \u00B7 ", companion.model || modelCatalog?.defaultSelection.model || 'DSH 默认'] }), modelOptions.map(model => _jsx("option", { value: model.id, children: model.name || model.id }, model.id))] }) })] }), _jsxs("div", { className: "dsh-partner-review-policy", children: [_jsx("button", { type: "button", className: "dsh-partner-switch", disabled: busy, role: "switch", "data-on": automation.memory.dailyReviewEnabled, "aria-checked": automation.memory.dailyReviewEnabled, "aria-label": "\u542F\u7528\u6BCF\u65E5\u7EC8\u5BA1", onClick: () => setAutomation(current => ({ ...current, memory: { ...current.memory, dailyReviewEnabled: !current.memory.dailyReviewEnabled } })), children: _jsx("i", {}) }), _jsxs("span", { children: [_jsx("strong", { children: "\u6BCF\u65E5\u7EC8\u5BA1" }), _jsx("small", { children: "\u6B21\u65E5\u81EA\u52A8\u5408\u5E76\u91CD\u590D\u3001\u7EA0\u6B63\u504F\u5DEE\u5E76\u5EFA\u7ACB\u8BB0\u5FC6\u5173\u7CFB" })] }), _jsx("label", { children: _jsx("select", { "aria-label": "\u6BCF\u65E5\u7EC8\u5BA1\u65F6\u95F4", value: automation.memory.dailyReviewHour, onChange: event => setAutomation(current => ({ ...current, memory: { ...current.memory, dailyReviewHour: Number(event.target.value) } })), children: Array.from({ length: 24 }, (_, hour) => _jsxs("option", { value: hour, children: [String(hour).padStart(2, '0'), ":00"] }, hour)) }) }), _jsx("button", { type: "button", disabled: busy, onClick: () => { void review(); }, children: "\u7ACB\u5373\u7EC8\u5BA1" })] })] })) : (_jsxs("section", { className: "dsh-partner-automation", children: [_jsxs("header", { children: [_jsxs("span", { children: [_jsx("strong", { children: "\u6301\u7EED\u611F\u77E5" }), _jsx("small", { children: "\u4F19\u4F34\u53EA\u89C2\u5BDF\u5C1A\u672A\u95ED\u73AF\u7684\u4E8B\u60C5\u662F\u5426\u51FA\u73B0\u65B0\u53D8\u5316\uFF0C\u5E76\u7531\u514B\u5236\u7684\u6253\u6270\u7B56\u7565\u51B3\u5B9A\u4F55\u65F6\u544A\u8BC9\u4F60\u3002" })] }), _jsx("button", { type: "button", className: "dsh-partner-switch", disabled: busy, role: "switch", "data-on": automation.heartbeat.enabled, "aria-checked": automation.heartbeat.enabled, "aria-label": "\u542F\u7528\u4F19\u4F34\u5FC3\u8DF3", onClick: () => setAutomation(current => ({ ...current, heartbeat: { ...current.heartbeat, enabled: !current.heartbeat.enabled } })), children: _jsx("i", {}) })] }), _jsxs("div", { className: "dsh-partner-automation-fields is-heartbeat", children: [_jsx(Field, { label: "\u68C0\u67E5\u95F4\u9694", children: _jsxs("select", { value: automation.heartbeat.intervalMinutes, onChange: event => setAutomation(current => ({ ...current, heartbeat: { ...current.heartbeat, intervalMinutes: Number(event.target.value) } })), children: [_jsx("option", { value: 30, children: "30 \u5206\u949F" }), _jsx("option", { value: 60, children: "1 \u5C0F\u65F6" }), _jsx("option", { value: 180, children: "3 \u5C0F\u65F6" }), _jsx("option", { value: 360, children: "6 \u5C0F\u65F6" }), _jsx("option", { value: 720, children: "12 \u5C0F\u65F6" }), _jsx("option", { value: 1440, children: "24 \u5C0F\u65F6" })] }) }), _jsx(Field, { label: "\u514D\u6253\u6270\u5F00\u59CB", children: _jsx("input", { type: "number", min: 0, max: 23, value: automation.heartbeat.quietStartHour, onChange: event => setAutomation(current => ({ ...current, heartbeat: { ...current.heartbeat, quietStartHour: Number(event.target.value) } })) }) }), _jsx(Field, { label: "\u514D\u6253\u6270\u7ED3\u675F", children: _jsx("input", { type: "number", min: 0, max: 23, value: automation.heartbeat.quietEndHour, onChange: event => setAutomation(current => ({ ...current, heartbeat: { ...current.heartbeat, quietEndHour: Number(event.target.value) } })) }) }), _jsx(Field, { label: "\u6BCF\u65E5\u4E0A\u9650", children: _jsxs("select", { value: automation.heartbeat.dailyLimit, onChange: event => setAutomation(current => ({ ...current, heartbeat: { ...current.heartbeat, dailyLimit: Number(event.target.value) } })), children: [_jsx("option", { value: 0, children: "\u4E0D\u9650" }), _jsx("option", { value: 1, children: "1 \u6B21" }), _jsx("option", { value: 2, children: "2 \u6B21" }), _jsx("option", { value: 3, children: "3 \u6B21" }), _jsx("option", { value: 5, children: "5 \u6B21" }), _jsx("option", { value: 8, children: "8 \u6B21" })] }) })] })] })), _jsxs("footer", { className: "dsh-partner-memory-actions", children: [_jsx("button", { type: "button", disabled: busy, onClick: close, children: "\u5173\u95ED" }), _jsx("button", { type: "button", className: "is-primary", disabled: busy, onClick: () => { void save(); }, children: busy ? '正在处理…' : '保存设置' })] })] }) });
59
+ }
60
+ //# sourceMappingURL=automation-settings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"automation-settings.js","sourceRoot":"","sources":["../../../src/ui/memory/automation-settings.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { type ConcernActivityView, type ConcernView } from '../../client-api.js';
2
+ export declare function ConcernBoard({ companionId, activity, value, busy, onValue, onAdd, onCheck, onAct }: {
3
+ companionId: string;
4
+ activity: ConcernActivityView;
5
+ value: string;
6
+ busy: boolean;
7
+ onValue(value: string): void;
8
+ onAdd(): void;
9
+ onCheck(item: ConcernView): void;
10
+ onAct(item: ConcernView, action: 'watch' | 'ignore' | 'prioritize' | 'resolve'): void;
11
+ }): JSX.Element;
12
+ //# sourceMappingURL=concern-board.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"concern-board.d.ts","sourceRoot":"","sources":["../../../src/ui/memory/concern-board.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAM,KAAK,mBAAmB,EAAE,KAAK,WAAW,EAAsD,MAAM,qBAAqB,CAAA;AAGxI,wBAAgB,YAAY,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;IACnG,WAAW,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,mBAAmB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,KAAK,IAAI,IAAI,CAAA;IAC7H,OAAO,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,CAAA;IAChC,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,GAAG,QAAQ,GAAG,YAAY,GAAG,SAAS,GAAG,IAAI,CAAA;CACtF,GAAG,GAAG,CAAC,OAAO,CAiFd"}
@@ -0,0 +1,129 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useEffect, useId, useRef, useState } from 'react';
3
+ import { IconCheckOutline14, IconChevronDownOutline14, IconPlusOutline16, IconLinkOutline16, IconDataOutline16 } from '@deepseek-ai/dsh-client-ui-primitives';
4
+ import { api } from '../../client-api.js';
5
+ import { futureTime } from '../../time-format.js';
6
+ import { errorMessage as message } from '../workspace-components.js';
7
+ export function ConcernBoard({ companionId, activity, value, busy, onValue, onAdd, onCheck, onAct }) {
8
+ const visible = activity.concerns.filter(item => item.state !== 'archived');
9
+ const active = visible.filter(item => item.state !== 'resolved');
10
+ const resolved = visible.filter(item => item.state === 'resolved');
11
+ const latest = new Map([...activity.observations].reverse().map(item => [item.concernId, item]));
12
+ const [composing, setComposing] = useState(false);
13
+ const [expandedId, setExpandedId] = useState();
14
+ const [visibleCount, setVisibleCount] = useState(5);
15
+ const [mention, setMention] = useState();
16
+ const [sources, setSources] = useState([]);
17
+ const [sourcesLoading, setSourcesLoading] = useState(false);
18
+ const [sourceError, setSourceError] = useState();
19
+ const [activeSource, setActiveSource] = useState(0);
20
+ const inputRef = useRef(null);
21
+ const listboxId = useId();
22
+ const shown = active.slice(0, visibleCount);
23
+ const suggestionsOpen = composing && mention !== undefined;
24
+ useEffect(() => {
25
+ if (!suggestionsOpen || mention === undefined) {
26
+ setSources([]);
27
+ setSourcesLoading(false);
28
+ setSourceError(undefined);
29
+ return;
30
+ }
31
+ const controller = new AbortController();
32
+ const timer = window.setTimeout(() => {
33
+ setSourcesLoading(true);
34
+ setSourceError(undefined);
35
+ const params = new URLSearchParams({ q: mention.query });
36
+ void api(`/companions/${encodeURIComponent(companionId)}/concern-sources?${params}`, { signal: controller.signal }).then(result => {
37
+ if (!controller.signal.aborted) {
38
+ setSources(result.items);
39
+ setActiveSource(0);
40
+ }
41
+ }).catch(reason => {
42
+ if (!controller.signal.aborted) {
43
+ setSources([]);
44
+ setSourceError(message(reason));
45
+ }
46
+ }).finally(() => { if (!controller.signal.aborted)
47
+ setSourcesLoading(false); });
48
+ }, 150);
49
+ return () => { window.clearTimeout(timer); controller.abort(); };
50
+ }, [companionId, mention?.query, suggestionsOpen]);
51
+ const submit = (event) => { event.preventDefault(); onAdd(); setComposing(false); setMention(undefined); };
52
+ const chooseSource = (source) => {
53
+ if (mention === undefined)
54
+ return;
55
+ const next = `${value.slice(0, mention.start)}${source.token} ${value.slice(mention.end)}`;
56
+ const cursor = mention.start + source.token.length + 1;
57
+ onValue(next);
58
+ setMention(undefined);
59
+ setSources([]);
60
+ window.requestAnimationFrame(() => { inputRef.current?.focus(); inputRef.current?.setSelectionRange(cursor, cursor); });
61
+ };
62
+ return _jsxs("section", { className: "dsh-partner-concern-board", "aria-labelledby": "partner-concerns-title", children: [_jsxs("header", { children: [_jsxs("span", { children: [_jsxs("strong", { id: "partner-concerns-title", children: ["\u4F19\u4F34\u5728\u610F\u7684\u4E8B ", _jsx("b", { children: active.length })] }), _jsx("p", { children: "\u5C1A\u672A\u95ED\u73AF\u3001\u503C\u5F97\u7EE7\u7EED\u7559\u610F\u7684\u4E8B\u60C5" })] }), _jsxs("button", { type: "button", "aria-expanded": composing, onClick: () => setComposing(current => !current), children: [_jsx(IconPlusOutline16, { size: 14 }), "\u4EA4\u4EE3\u4E00\u4EF6\u4E8B"] })] }), composing && _jsxs("form", { className: "dsh-partner-concern-compose", onSubmit: submit, children: [_jsxs("label", { children: [_jsx("span", { children: "\u9700\u8981\u7559\u610F\u7684\u4E8B" }), _jsxs("div", { className: "dsh-partner-concern-input-wrap", children: [_jsx("input", { ref: inputRef, autoFocus: true, value: value, maxLength: 300, placeholder: "\u8F93\u5165 @ \u9009\u62E9\u6587\u4EF6\u6216\u77E5\u8BC6\u6587\u6863", role: "combobox", "aria-autocomplete": "list", "aria-expanded": suggestionsOpen, "aria-controls": suggestionsOpen ? listboxId : undefined, "aria-activedescendant": suggestionsOpen && sources[activeSource] ? `${listboxId}-option-${activeSource}` : undefined, onChange: event => { onValue(event.target.value); setMention(activeMention(event.target.value, event.target.selectionStart ?? event.target.value.length)); }, onClick: event => setMention(activeMention(event.currentTarget.value, event.currentTarget.selectionStart ?? event.currentTarget.value.length)), onKeyDown: event => {
63
+ if (!suggestionsOpen)
64
+ return;
65
+ if (event.key === 'ArrowDown') {
66
+ event.preventDefault();
67
+ setActiveSource(index => sources.length === 0 ? 0 : (index + 1) % sources.length);
68
+ }
69
+ else if (event.key === 'ArrowUp') {
70
+ event.preventDefault();
71
+ setActiveSource(index => sources.length === 0 ? 0 : (index - 1 + sources.length) % sources.length);
72
+ }
73
+ else if (event.key === 'Enter' && sources[activeSource]) {
74
+ event.preventDefault();
75
+ chooseSource(sources[activeSource]);
76
+ }
77
+ else if (event.key === 'Escape') {
78
+ event.preventDefault();
79
+ setMention(undefined);
80
+ }
81
+ } }), suggestionsOpen && _jsx("div", { id: listboxId, className: "dsh-partner-concern-sources", role: "listbox", "aria-label": "\u53EF\u5F15\u7528\u7684\u6587\u4EF6\u4E0E\u77E5\u8BC6\u6587\u6863", children: sourcesLoading ? _jsx("p", { role: "status", children: "\u6B63\u5728\u67E5\u627E\u53EF\u5F15\u7528\u5185\u5BB9\u2026" }) : sourceError ? _jsxs("p", { role: "status", children: ["\u5019\u9009\u52A0\u8F7D\u5931\u8D25\uFF1A", sourceError] }) : sources.length === 0 ? _jsx("p", { role: "status", children: "\u6CA1\u6709\u627E\u5230\u5339\u914D\u7684\u6587\u4EF6\u6216\u5DF2\u6302\u8F7D\u77E5\u8BC6\u6587\u6863" }) : _jsx(_Fragment, { children: sources.map((source, index) => _jsxs("button", { type: "button", role: "option", id: `${listboxId}-option-${index}`, "aria-selected": index === activeSource, "data-kind": source.kind, onMouseDown: event => event.preventDefault(), onMouseEnter: () => setActiveSource(index), onClick: () => chooseSource(source), children: [_jsx("span", { children: source.kind === 'file' ? _jsx(IconDataOutline16, { size: 15 }) : _jsx(IconLinkOutline16, { size: 15 }) }), _jsx("strong", { children: source.label }), _jsx("small", { children: source.detail })] }, `${source.kind}:${source.token}`)) }) })] }), _jsxs("small", { className: "dsh-partner-concern-compose-hint", children: ["\u8F93\u5165 ", _jsx("b", { children: "@" }), " \u4F1A\u5217\u51FA\u5F53\u524D\u4F1A\u8BDD\u6587\u4EF6\u548C\u5DF2\u6302\u8F7D\u7684\u77E5\u8BC6\u6587\u6863\uFF0C\u4E5F\u53EF\u4EE5\u7EE7\u7EED\u8F93\u5165\u5173\u952E\u8BCD\u7B5B\u9009\u3002"] })] }), _jsxs("div", { children: [_jsx("button", { type: "button", onClick: () => { setComposing(false); setMention(undefined); onValue(''); }, children: "\u53D6\u6D88" }), _jsx("button", { type: "submit", className: "is-primary", disabled: busy || !value.trim(), children: "\u8BA9\u4F19\u4F34\u8BB0\u7740" })] })] }), _jsx("div", { className: "dsh-partner-concern-list", role: "list", children: active.length === 0 ? _jsx("p", { className: "dsh-partner-concern-empty", children: "\u6700\u8FD1\u6CA1\u6709\u672A\u95ED\u73AF\u7684\u4E8B\u3002\u4F60\u4E5F\u53EF\u4EE5\u76F4\u63A5\u5BF9\u4F19\u4F34\u8BF4\u201C\u8FD9\u4E2A\u5E2E\u6211\u7559\u610F\u201D\u3002" }) : shown.map(item => {
82
+ const observation = latest.get(item.id);
83
+ const expanded = expandedId === item.id;
84
+ const status = observation ? concernObservationStatus(observation) : item.state === 'active' ? '正在留意' : '暂时记着';
85
+ return _jsxs("article", { role: "listitem", "data-state": item.state, "data-expanded": expanded, children: [_jsxs("button", { type: "button", className: "dsh-partner-concern-row", "aria-expanded": expanded, onClick: () => setExpandedId(current => current === item.id ? undefined : item.id), children: [_jsxs("span", { className: "dsh-partner-concern-state", children: [_jsx("i", {}), status] }), _jsxs("span", { className: "dsh-partner-concern-copy", children: [_jsx("strong", { children: item.subject }), _jsx("small", { children: observation ? observation.event : item.reason })] }), _jsxs("span", { className: "dsh-partner-concern-time", title: `计划于 ${new Date(item.nextCheckAt).toLocaleString()} 再次留意`, children: [_jsx("small", { children: "\u4E0B\u6B21\u7559\u610F" }), _jsx("strong", { children: futureTime(item.nextCheckAt) })] }), _jsx(IconChevronDownOutline14, { size: 14 })] }), expanded && _jsxs("div", { className: "dsh-partner-concern-detail", children: [_jsx("p", { children: item.reason }), observation && _jsxs(_Fragment, { children: [_jsx("blockquote", { children: observation.event }), _jsxs("div", { className: "dsh-partner-concern-decision", "data-decision": observation.decision, children: [_jsx("strong", { children: concernObservationStatus(observation) }), _jsx("span", { children: observation.decisionReason || concernObservationExplanation(observation) }), _jsxs("small", { children: ["\u6253\u6270\u5206\u6570 ", Math.round(observation.interruptScore * 100), observation.notificationRuleEffect !== 'auto' && observation.notificationRuleReason ? ` · 知识规则:${observation.notificationRuleReason}` : ''] })] })] }), item.resources.length > 0 && _jsx("div", { className: "dsh-partner-concern-resources", children: item.resources.map(resource => _jsxs("span", { children: [resource.kind === 'file' ? '文件' : '知识', " \u00B7 ", resource.label] }, `${resource.kind}:${resource.locator}`)) }), _jsxs("small", { children: [item.origin === 'explicit' ? '你明确交代' : '伙伴从对话中注意到', " \u00B7 ", watchKindLabel(item.watchKind)] }), _jsxs("div", { className: "dsh-partner-concern-actions", "aria-label": `${item.subject} 的操作`, children: [_jsx("button", { type: "button", disabled: busy, onClick: () => onCheck(item), children: "\u7ACB\u5373\u68C0\u67E5\u8FD9\u6761" }), _jsx("button", { type: "button", disabled: busy, onClick: () => onAct(item, 'watch'), children: "\u7EE7\u7EED\u7559\u610F" }), _jsx("button", { type: "button", disabled: busy, onClick: () => onAct(item, 'prioritize'), children: "\u63D0\u9AD8\u5173\u6CE8" }), _jsx("button", { type: "button", disabled: busy, onClick: () => onAct(item, 'resolve'), children: "\u5DF2\u7ECF\u89E3\u51B3" }), _jsx("button", { type: "button", className: "is-danger", disabled: busy, onClick: () => onAct(item, 'ignore'), children: "\u522B\u7BA1\u8FD9\u4E2A" })] })] })] }, item.id);
86
+ }) }), (active.length > shown.length || visibleCount > 5) && _jsx("div", { className: "dsh-partner-concern-more", children: active.length > shown.length ? _jsxs("button", { type: "button", onClick: () => setVisibleCount(count => Math.min(active.length, count + 20)), children: ["\u518D\u663E\u793A ", Math.min(20, active.length - shown.length), " \u6761"] }) : _jsx("button", { type: "button", onClick: () => setVisibleCount(5), children: "\u6536\u8D77\u5217\u8868" }) }), resolved.length > 0 && _jsxs("details", { className: "dsh-partner-concern-resolved", children: [_jsxs("summary", { children: ["\u5DF2\u7ECF\u89E3\u51B3 ", _jsx("b", { children: resolved.length })] }), _jsx("div", { children: resolved.slice(0, 30).map(item => _jsxs("article", { children: [_jsx("span", { children: _jsx(IconCheckOutline14, { size: 13 }) }), _jsx("strong", { children: item.subject }), _jsx("button", { type: "button", disabled: busy, onClick: () => onAct(item, 'watch'), children: "\u91CD\u65B0\u7559\u610F" })] }, item.id)) })] })] });
87
+ }
88
+ function activeMention(value, cursor) {
89
+ const prefix = value.slice(0, cursor);
90
+ const start = prefix.lastIndexOf('@');
91
+ if (start < 0 || (start > 0 && !/\s/u.test(prefix[start - 1] ?? '')))
92
+ return undefined;
93
+ const fragment = prefix.slice(start + 1);
94
+ if (fragment.startsWith('知识库[')) {
95
+ if (fragment.includes(']'))
96
+ return undefined;
97
+ return { start, end: cursor, query: fragment.slice(4) };
98
+ }
99
+ if (fragment.startsWith('"')) {
100
+ if (fragment.slice(1).includes('"'))
101
+ return undefined;
102
+ return { start, end: cursor, query: fragment.slice(1) };
103
+ }
104
+ if (/\s/u.test(fragment))
105
+ return undefined;
106
+ return { start, end: cursor, query: fragment };
107
+ }
108
+ function watchKindLabel(value) {
109
+ return value === 'knowledge' ? '知识库变化' : value === 'workspace' ? '项目变化' : value === 'web' ? '外部变化' : '按事情判断来源';
110
+ }
111
+ function concernObservationStatus(item) {
112
+ if (item.decision === 'notify')
113
+ return item.mentionedAt === undefined ? '待提醒' : '已提醒';
114
+ if (item.decision === 'feed')
115
+ return '伙伴动态';
116
+ if (item.decision === 'defer')
117
+ return item.mentionedAt === undefined ? '待顺带提' : '已顺带提';
118
+ return '静默记下';
119
+ }
120
+ function concernObservationExplanation(item) {
121
+ if (item.decision === 'notify')
122
+ return item.mentionedAt === undefined ? '达到主动提醒条件,等待渠道投递' : '已经通过批准的渠道主动提醒';
123
+ if (item.decision === 'feed')
124
+ return '只显示在伙伴动态,不会自动转成主动提醒';
125
+ if (item.decision === 'defer')
126
+ return item.mentionedAt === undefined ? '下次出现相关对话时顺带提及' : '已经在相关对话中顺带提及';
127
+ return '仅保留为观察记录,不打扰你';
128
+ }
129
+ //# sourceMappingURL=concern-board.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"concern-board.js","sourceRoot":"","sources":["../../../src/ui/memory/concern-board.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { type CompanionView, type PartnerSnapshot } from '../../client-api.js';
2
+ export declare function ConcernPanel({ companion, snapshot, onChanged }: {
3
+ companion: CompanionView;
4
+ snapshot: PartnerSnapshot;
5
+ onChanged(): Promise<void>;
6
+ }): JSX.Element;
7
+ //# sourceMappingURL=concern-panel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"concern-panel.d.ts","sourceRoot":"","sources":["../../../src/ui/memory/concern-panel.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAM,KAAK,aAAa,EAAE,KAAK,eAAe,EAA6C,MAAM,qBAAqB,CAAA;AAO7H,wBAAgB,YAAY,CAAC,EAAC,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAC,EAAE;IAAC,SAAS,EAAE,aAAa,CAAC;IAAC,QAAQ,EAAE,eAAe,CAAC;IAAC,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CAAC,GAAG,GAAG,CAAC,OAAO,CAsC7J"}
@@ -0,0 +1,62 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useRef, useState } from 'react';
3
+ import { IconRefreshOutline16 } from '@deepseek-ai/dsh-client-ui-primitives';
4
+ import { api } from '../../client-api.js';
5
+ import { WorkspaceHero, WorkspaceNotice, CollectionEmpty, errorMessage } from '../workspace-components.js';
6
+ import { relativeTime } from '../partner-components.js';
7
+ import { useMemoryResource } from './use-memory-resource.js';
8
+ import { AutomationSettings } from './automation-settings.js';
9
+ import { ConcernBoard } from './concern-board.js';
10
+ export function ConcernPanel({ companion, snapshot, onChanged }) {
11
+ const base = `/companions/${encodeURIComponent(companion.id)}`;
12
+ const resource = useMemoryResource(`${base}/concerns`, 15_000);
13
+ const [settings, setSettings] = useState(false);
14
+ const [value, setValue] = useState('');
15
+ const [busy, setBusy] = useState(false);
16
+ const lock = useRef(false);
17
+ const [notice, setNotice] = useState();
18
+ const [error, setError] = useState();
19
+ const heartbeat = snapshot.heartbeatStates.find(item => item.companionId === companion.id);
20
+ const run = async (action) => {
21
+ if (lock.current)
22
+ return;
23
+ lock.current = true;
24
+ setBusy(true);
25
+ setError(undefined);
26
+ setNotice(undefined);
27
+ try {
28
+ setNotice(await action());
29
+ await resource.reload();
30
+ }
31
+ catch (reason) {
32
+ setError(errorMessage(reason));
33
+ }
34
+ finally {
35
+ lock.current = false;
36
+ setBusy(false);
37
+ }
38
+ };
39
+ const check = (concernId) => {
40
+ void run(async () => {
41
+ const result = await api(`${base}/heartbeat/trigger`, { method: 'POST', body: JSON.stringify(concernId ? { concernId } : {}) });
42
+ await onChanged();
43
+ return result.sent ? '检查完成,已发送提醒' : result.reason ?? '检查完成';
44
+ });
45
+ };
46
+ const act = (item, action) => {
47
+ void run(async () => {
48
+ await api(`${base}/concerns/${encodeURIComponent(item.id)}/action`, { method: 'POST', body: JSON.stringify({ action }) });
49
+ return ({ watch: '已恢复留意', ignore: '不再关注这件事', prioritize: '已提高关注', resolve: '已标记解决' })[action];
50
+ });
51
+ };
52
+ return _jsxs("div", { className: "dsh-partner-memory-page is-concerns", children: [_jsx(WorkspaceHero, { eyebrow: "ONGOING WATCHES", title: "\u6301\u7EED\u5173\u6CE8", detail: "\u53EA\u7559\u610F\u9700\u8981\u7EE7\u7EED\u89C2\u5BDF\u7684\u4E8B\uFF0C\u6709\u503C\u5F97\u544A\u8BC9\u4F60\u7684\u53D8\u5316\u65F6\u518D\u51FA\u73B0\u3002", actions: _jsxs(_Fragment, { children: [_jsx("button", { type: "button", disabled: busy, onClick: () => check(), children: "\u68C0\u67E5\u5230\u671F\u9879" }), _jsx("button", { type: "button", onClick: () => setSettings(true), children: "\u5173\u6CE8\u8BBE\u7F6E" })] }) }), _jsxs("div", { className: "dsh-partner-memory-status", children: [_jsx("span", { children: companion.automation.heartbeat.enabled ? '持续感知已开启' : '持续感知已暂停' }), _jsxs("small", { children: ["\u6700\u8FD1\u68C0\u67E5\uFF1A", heartbeat?.lastCheckedAt ? relativeTime(heartbeat.lastCheckedAt) : '尚未', " \u00B7 \u4ECA\u65E5\u63D0\u9192 ", heartbeat?.sentCount ?? 0, " \u6B21"] }), _jsx("button", { type: "button", disabled: resource.loading, "aria-label": "\u5237\u65B0\u5173\u6CE8", onClick: () => { void resource.reload(); }, children: _jsx(IconRefreshOutline16, { size: 16 }) })] }), (error || resource.error || heartbeat?.lastError) && _jsx(WorkspaceNotice, { children: error || resource.error || heartbeat?.lastError }), notice && _jsx(WorkspaceNotice, { kind: "success", children: notice }), !resource.data ? _jsx(CollectionEmpty, { title: resource.error ? '关注读取失败' : '正在读取关注', action: resource.error ? _jsx("button", { type: "button", onClick: () => { void resource.reload(); }, children: "\u91CD\u8BD5" }) : undefined }) : _jsx(ConcernBoard, { companionId: companion.id, activity: resource.data, value: value, busy: busy, onValue: setValue, onCheck: item => check(item.id), onAct: act, onAdd: () => {
53
+ void run(async () => {
54
+ if (!value.trim())
55
+ return '请填写需要持续关注的事情';
56
+ await api(`${base}/concerns`, { method: 'POST', body: JSON.stringify({ subject: value.trim() }) });
57
+ setValue('');
58
+ return '已加入持续关注';
59
+ });
60
+ } }), settings && _jsx(AutomationSettings, { companion: companion, kind: "heartbeat", close: () => setSettings(false), onChanged: onChanged })] });
61
+ }
62
+ //# sourceMappingURL=concern-panel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"concern-panel.js","sourceRoot":"","sources":["../../../src/ui/memory/concern-panel.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,MAAM,EAAE,QAAQ,EAAC,MAAM,OAAO,CAAA;AACtC,OAAO,EAAC,oBAAoB,EAAC,MAAM,uCAAuC,CAAA;AAC1E,OAAO,EAAC,GAAG,EAAuF,MAAM,qBAAqB,CAAA;AAC7H,OAAO,EAAC,aAAa,EAAE,eAAe,EAAE,eAAe,EAAE,YAAY,EAAC,MAAM,4BAA4B,CAAA;AACxG,OAAO,EAAC,YAAY,EAAC,MAAM,0BAA0B,CAAA;AACrD,OAAO,EAAC,iBAAiB,EAAC,MAAM,0BAA0B,CAAA;AAC1D,OAAO,EAAC,kBAAkB,EAAC,MAAM,0BAA0B,CAAA;AAC3D,OAAO,EAAC,YAAY,EAAC,MAAM,oBAAoB,CAAA;AAE/C,MAAM,UAAU,YAAY,CAAC,EAAC,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAoF;IAC9I,MAAM,IAAI,GAAG,eAAe,kBAAkB,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAA;IAC9D,MAAM,QAAQ,GAAG,iBAAiB,CAAsB,GAAG,IAAI,WAAW,EAAE,MAAM,CAAC,CAAA;IACnF,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC/C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAA;IACtC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IACvC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;IAC1B,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,EAAU,CAAA;IAC9C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,EAAU,CAAA;IAC5C,MAAM,SAAS,GAAG,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,KAAK,SAAS,CAAC,EAAE,CAAC,CAAA;IAC1F,MAAM,GAAG,GAAG,KAAK,EAAE,MAA6B,EAAiB,EAAE;QACjE,IAAI,IAAI,CAAC,OAAO;YAAE,OAAM;QACxB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAAC,SAAS,CAAC,SAAS,CAAC,CAAA;QAC7E,IAAI,CAAC;YAAA,SAAS,CAAC,MAAM,MAAM,EAAE,CAAC,CAAC;YAAC,MAAM,QAAQ,CAAC,MAAM,EAAE,CAAA;QAAA,CAAC;QACxD,OAAO,MAAM,EAAE,CAAC;YAAA,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAA;QAAA,CAAC;gBACvC,CAAC;YAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;YAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QAAA,CAAC;IAChD,CAAC,CAAA;IACD,MAAM,KAAK,GAAG,CAAC,SAAkB,EAAQ,EAAE;QAAE,KAAK,GAAG,CAAC,KAAK,IAAI,EAAE;YAC/D,MAAM,MAAM,GAAG,MAAM,GAAG,CAAmC,GAAG,IAAI,oBAAoB,EAAE,EAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,EAAC,SAAS,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAC,CAAC,CAAA;YAC7J,MAAM,SAAS,EAAE,CAAA;YACjB,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAA;QAC7D,CAAC,CAAC,CAAA;IAAA,CAAC,CAAA;IACH,MAAM,GAAG,GAAG,CAAC,IAAiB,EAAE,MAAqD,EAAQ,EAAE;QAAE,KAAK,GAAG,CAAC,KAAK,IAAI,EAAE;YACnH,MAAM,GAAG,CAAC,GAAG,IAAI,aAAa,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,EAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAC,MAAM,EAAC,CAAC,EAAC,CAAC,CAAA;YACrH,OAAO,CAAC,EAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAC,CAAC,CAAC,MAAM,CAAC,CAAA;QAC7F,CAAC,CAAC,CAAA;IAAA,CAAC,CAAA;IACH,OAAO,eAAK,SAAS,EAAC,qCAAqC,aACzD,KAAC,aAAa,IAAC,OAAO,EAAC,iBAAiB,EAAC,KAAK,EAAC,0BAAM,EAAC,MAAM,EAAC,8JAA4B,EAAC,OAAO,EAAE,8BAAE,iBAAQ,IAAI,EAAC,QAAQ,EAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,+CAAgB,EAAA,iBAAQ,IAAI,EAAC,QAAQ,EAAC,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,yCAAe,IAAG,GAAI,EAC7P,eAAK,SAAS,EAAC,2BAA2B,aAAC,yBAAO,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,GAAQ,EAAA,8DAAa,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,uCAAU,SAAS,EAAE,SAAS,IAAI,CAAC,eAAW,EAAA,iBAAQ,IAAI,EAAC,QAAQ,EAAC,QAAQ,EAAE,QAAQ,CAAC,OAAO,gBAAa,0BAAM,EAAC,OAAO,EAAE,GAAG,EAAE,GAAE,KAAK,QAAQ,CAAC,MAAM,EAAE,CAAA,CAAA,CAAC,YAAE,KAAC,oBAAoB,IAAC,IAAI,EAAE,EAAE,GAAI,GAAS,IAAM,EACvZ,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK,IAAI,SAAS,EAAE,SAAS,CAAC,IAAI,KAAC,eAAe,cAAE,KAAK,IAAI,QAAQ,CAAC,KAAK,IAAI,SAAS,EAAE,SAAS,GAAmB,EACzI,MAAM,IAAI,KAAC,eAAe,IAAC,IAAI,EAAC,SAAS,YAAE,MAAM,GAAmB,EACpE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAC,eAAe,IAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,iBAAQ,IAAI,EAAC,QAAQ,EAAC,OAAO,EAAE,GAAG,EAAE,GAAE,KAAK,QAAQ,CAAC,MAAM,EAAE,CAAA,CAAA,CAAC,6BAAa,CAAC,CAAC,CAAC,SAAS,GAAI,CAAC,CAAC,CAAC,KAAC,YAAY,IAAC,WAAW,EAAE,SAAS,CAAC,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE;oBAAE,KAAK,GAAG,CAAC,KAAK,IAAI,EAAE;wBAClY,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;4BAAE,OAAO,cAAc,CAAA;wBACxC,MAAM,GAAG,CAAC,GAAG,IAAI,WAAW,EAAE,EAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAC,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE,EAAC,CAAC,EAAC,CAAC,CAAA;wBAC9F,QAAQ,CAAC,EAAE,CAAC,CAAC;wBAAC,OAAO,SAAS,CAAA;oBAChC,CAAC,CAAC,CAAA;gBAAA,CAAC,GAAI,EACN,QAAQ,IAAI,KAAC,kBAAkB,IAAC,SAAS,EAAE,SAAS,EAAE,IAAI,EAAC,WAAW,EAAC,KAAK,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,SAAS,GAAI,IAC7H,CAAA;AACR,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { ExperienceView as Draft } from './types.js';
2
+ export declare function ExperienceView({ items, base, scopeId, changed }: {
3
+ items: Draft[];
4
+ base: string;
5
+ scopeId: string;
6
+ changed(): Promise<void>;
7
+ }): JSX.Element;
8
+ //# sourceMappingURL=experience-view.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"experience-view.d.ts","sourceRoot":"","sources":["../../../src/ui/memory/experience-view.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAC,cAAc,IAAI,KAAK,EAAC,MAAM,YAAY,CAAA;AAEvD,wBAAgB,cAAc,CAAC,EAAC,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAC,EAAE;IAAC,KAAK,EAAE,KAAK,EAAE,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CAAC,GAAG,GAAG,CAAC,OAAO,CAwCtJ"}
@@ -0,0 +1,52 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useRef, useState } from 'react';
3
+ import { api } from '../../client-api.js';
4
+ import { WorkspaceDialog, WorkspaceNotice, CollectionEmpty, errorMessage } from '../workspace-components.js';
5
+ export function ExperienceView({ items, base, scopeId, changed }) {
6
+ const [selected, setSelected] = useState();
7
+ const [busy, setBusy] = useState(false);
8
+ const lock = useRef(false);
9
+ const [error, setError] = useState();
10
+ const [notice, setNotice] = useState();
11
+ const [filter, setFilter] = useState('draft');
12
+ const item = items.find(entry => entry.id === selected);
13
+ const review = async (action) => {
14
+ if (!item || lock.current)
15
+ return;
16
+ lock.current = true;
17
+ setBusy(true);
18
+ setError(undefined);
19
+ const path = `${base}/memory/experiences/${encodeURIComponent(item.id)}?${new URLSearchParams({ scopeId })}`;
20
+ try {
21
+ if (action === 'export') {
22
+ const { document } = await api(path);
23
+ const url = URL.createObjectURL(new Blob([document], { type: 'text/markdown;charset=utf-8' }));
24
+ const anchor = window.document.createElement('a');
25
+ anchor.href = url;
26
+ anchor.download = `${item.id}.md`;
27
+ window.document.body.append(anchor);
28
+ anchor.click();
29
+ anchor.remove();
30
+ setTimeout(() => URL.revokeObjectURL(url), 1000);
31
+ setNotice('已导出草稿;不会自动安装或授权给伙伴');
32
+ }
33
+ else {
34
+ await api(path, { method: 'POST', body: JSON.stringify({ action, version: item.version }) });
35
+ setSelected(undefined);
36
+ setNotice(action === 'approved' ? '已通过审核,可在已通过列表中导出' : '已拒绝此草稿');
37
+ await changed();
38
+ }
39
+ }
40
+ catch (reason) {
41
+ setError(errorMessage(reason));
42
+ await changed();
43
+ }
44
+ finally {
45
+ lock.current = false;
46
+ setBusy(false);
47
+ }
48
+ };
49
+ return _jsxs(_Fragment, { children: [_jsx("p", { className: "dsh-partner-memory-hint", children: "\u4ECE\u6709\u6210\u529F\u4F9D\u636E\u7684\u7ECF\u5386\u4E2D\u63D0\u70BC\u3002\u5BA1\u6838\u901A\u8FC7\u540E\u4EC5\u5141\u8BB8\u5BFC\u51FA\uFF0C\u4E0D\u4F1A\u81EA\u52A8\u5B89\u88C5 Skill\u3002" }), notice && _jsx(WorkspaceNotice, { kind: "success", children: notice }), _jsx("div", { className: "dsh-partner-memory-segment", "aria-label": "\u7ECF\u9A8C\u72B6\u6001", children: ['draft', 'approved', 'rejected'].map(status => _jsxs("button", { type: "button", "aria-pressed": filter === status, onClick: () => setFilter(status), children: [({ draft: '待审核', approved: '已通过', rejected: '已拒绝' })[status], " ", _jsx("small", { children: items.filter(draft => draft.status === status).length })] }, status)) }), _jsx("div", { className: "dsh-partner-memory-rows", children: items.filter(draft => draft.status === filter).map(draft => _jsxs("button", { className: "dsh-partner-memory-row", type: "button", onClick: () => { setSelected(draft.id); setError(undefined); }, children: [_jsxs("span", { children: [_jsx("strong", { children: draft.title }), _jsxs("small", { children: [draft.steps.length, " \u4E2A\u6B65\u9AA4 \u00B7 ", draft.evidence.length, " \u5904\u4F9D\u636E"] })] }), _jsx("small", { children: "\u67E5\u770B" })] }, draft.id)) }), !items.some(draft => draft.status === filter) && _jsx(CollectionEmpty, { title: "\u6CA1\u6709\u6B64\u72B6\u6001\u7684\u7ECF\u9A8C\u8349\u7A3F", detail: "\u53EA\u6709\u660E\u786E\u6210\u529F\u4E14\u53EF\u590D\u7528\u7684\u7ECF\u5386\u624D\u4F1A\u6210\u4E3A\u5019\u9009\uFF1B\u9700\u8981\u5F00\u542F\u6BCF\u65E5\u7EC8\u5BA1\u3002" }), item && _jsxs(WorkspaceDialog, { title: item.title, detail: "\u8BF7\u6838\u5BF9\u9002\u7528\u8303\u56F4\u3001\u64CD\u4F5C\u6B65\u9AA4\u53CA\u6210\u529F\u4F9D\u636E\uFF1B\u5386\u53F2\u6210\u529F\u4E0D\u4EE3\u8868\u6BCF\u6B21\u90FD\u9002\u7528\u3002", close: () => { if (!busy)
50
+ setSelected(undefined); }, children: [error && _jsx(WorkspaceNotice, { children: error }), _jsx("ol", { className: "dsh-partner-memory-procedure", children: item.steps.map((step, index) => _jsx("li", { children: step }, index)) }), _jsxs("details", { className: "dsh-partner-memory-record", children: [_jsxs("summary", { children: ["\u6210\u529F\u4F9D\u636E \u00B7 ", item.evidence.length] }), _jsx("div", { children: item.evidence.map(source => _jsxs("blockquote", { children: [_jsx("p", { children: source.quote }), _jsx("small", { children: source.turnId })] }, `${source.turnId}:${source.quote}`)) })] }), _jsx("footer", { className: "dsh-partner-memory-actions", children: item.status === 'draft' ? _jsxs(_Fragment, { children: [_jsx("button", { type: "button", disabled: busy, onClick: () => { void review('rejected'); }, children: "\u62D2\u7EDD" }), _jsx("button", { className: "is-primary", type: "button", disabled: busy, onClick: () => { void review('approved'); }, children: busy ? '处理中…' : '通过审核' })] }) : item.status === 'approved' ? _jsx("button", { type: "button", disabled: busy, onClick: () => { void review('export'); }, children: busy ? '导出中…' : '导出 Markdown' }) : _jsx("span", { children: "\u6B64\u8349\u7A3F\u5DF2\u62D2\u7EDD\uFF0C\u4E0D\u4F1A\u81EA\u52A8\u542F\u7528\u3002" }) })] })] });
51
+ }
52
+ //# sourceMappingURL=experience-view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"experience-view.js","sourceRoot":"","sources":["../../../src/ui/memory/experience-view.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export declare function HistoryView({ base, scopeId, query }: {
2
+ base: string;
3
+ scopeId: string;
4
+ query: string;
5
+ }): JSX.Element;
6
+ //# sourceMappingURL=history-view.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history-view.d.ts","sourceRoot":"","sources":["../../../src/ui/memory/history-view.tsx"],"names":[],"mappings":"AAKA,wBAAgB,WAAW,CAAC,EAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAC,EAAE;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAC,GAAG,GAAG,CAAC,OAAO,CA4B/G"}
@@ -0,0 +1,40 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useEffect, useRef, useState } from 'react';
3
+ import { api } from '../../client-api.js';
4
+ import { CollectionEmpty, WorkspaceNotice, errorMessage } from '../workspace-components.js';
5
+ export function HistoryView({ base, scopeId, query }) {
6
+ const [turns, setTurns] = useState([]);
7
+ const [loading, setLoading] = useState(false);
8
+ const [error, setError] = useState();
9
+ const [more, setMore] = useState(true);
10
+ const [page, setPage] = useState(0);
11
+ const cursor = useRef();
12
+ useEffect(() => {
13
+ const controller = new AbortController();
14
+ setLoading(true);
15
+ setError(undefined);
16
+ const params = new URLSearchParams({ scopeId });
17
+ if (cursor.current) {
18
+ params.set('before', String(cursor.current.at));
19
+ params.set('beforeId', cursor.current.id);
20
+ }
21
+ void api(`${base}/memory/history?${params}`, { signal: controller.signal }).then(items => {
22
+ if (controller.signal.aborted)
23
+ return;
24
+ setTurns(existing => [...new Map([...existing, ...items].map(turn => [turn.id, turn])).values()]);
25
+ setMore(items.length === 30);
26
+ cursor.current = items.at(-1) ?? cursor.current;
27
+ }).catch(reason => { if (!controller.signal.aborted)
28
+ setError(errorMessage(reason)); })
29
+ .finally(() => { if (!controller.signal.aborted)
30
+ setLoading(false); });
31
+ return () => controller.abort();
32
+ }, [base, scopeId, page]);
33
+ const filtered = turns.filter(turn => !query || `${turn.user} ${turn.assistant}`.toLocaleLowerCase().includes(query));
34
+ return _jsxs("div", { className: "dsh-partner-memory-records", children: [_jsx("p", { className: "dsh-partner-memory-hint", children: "\u663E\u793A\u65B0\u7248\u8BB0\u5FC6\u6D41\u7A0B\u8BB0\u5F55\u7684\u5BF9\u8BDD\uFF1B\u65E7\u8BB0\u5F55\u4ECD\u4FDD\u7559\u5728\u539F\u4F1A\u8BDD\u4E2D\u3002\u641C\u7D22\u4EC5\u7B5B\u9009\u5DF2\u52A0\u8F7D\u7684\u5185\u5BB9\u3002" }), error && _jsx(WorkspaceNotice, { children: error }), !filtered.length && _jsx(CollectionEmpty, { title: loading ? '正在读取历史' : '暂无匹配的历史记录' }), filtered.map(turn => _jsx(HistoryRecord, { turn: turn }, turn.id)), (more || error) && _jsx("button", { type: "button", disabled: loading, onClick: () => setPage(value => value + 1), children: loading ? '读取中…' : error ? '重试读取' : '加载更早的 30 轮' })] });
35
+ }
36
+ function HistoryRecord({ turn }) {
37
+ const [open, setOpen] = useState(false);
38
+ return _jsxs("details", { className: "dsh-partner-memory-record", onToggle: event => setOpen(event.currentTarget.open), children: [_jsxs("summary", { children: [_jsx("time", { children: new Date(turn.at).toLocaleString() }), _jsx("strong", { children: turn.user.slice(0, 120) })] }), open && _jsxs("div", { children: [_jsx("h3", { children: "\u7528\u6237\u539F\u8BDD" }), _jsx("p", { children: turn.user }), _jsx("h3", { children: "\u52A9\u624B\u5F53\u65F6\u7684\u56DE\u7B54" }), _jsx("p", { children: turn.assistant }), _jsx("small", { children: "\u5386\u53F2\u56DE\u7B54\u4E0D\u4EE3\u8868\u5F53\u524D\u5DF2\u9A8C\u8BC1\u7684\u4E8B\u5B9E\u3002" })] })] });
39
+ }
40
+ //# sourceMappingURL=history-view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history-view.js","sourceRoot":"","sources":["../../../src/ui/memory/history-view.tsx"],"names":[],"mappings":"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"}