@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.
- package/README.md +21 -1
- package/docs/memory-quality.md +115 -0
- package/docs/releases/1.12.0.md +25 -0
- package/lib/agent-runtime.d.ts +1 -1
- package/lib/agent-runtime.d.ts.map +1 -1
- package/lib/agent-runtime.js +16 -11
- package/lib/agent-runtime.js.map +1 -1
- package/lib/api/features/memory-layers-api.d.ts +5 -0
- package/lib/api/features/memory-layers-api.d.ts.map +1 -0
- package/lib/api/features/memory-layers-api.js +42 -0
- package/lib/api/features/memory-layers-api.js.map +1 -0
- package/lib/api.d.ts.map +1 -1
- package/lib/api.js +5 -1
- package/lib/api.js.map +1 -1
- package/lib/client-api.d.ts +2 -0
- package/lib/client-api.d.ts.map +1 -1
- package/lib/client.d.ts.map +1 -1
- package/lib/client.js +2894 -2553
- package/lib/client.js.map +4 -4
- package/lib/collaboration/composition.js +2 -2
- package/lib/collaboration/composition.js.map +1 -1
- package/lib/concern-store.d.ts +1 -0
- package/lib/concern-store.d.ts.map +1 -1
- package/lib/concern-store.js +17 -0
- package/lib/concern-store.js.map +1 -1
- package/lib/concern-tool.d.ts +1 -1
- package/lib/concern-tool.d.ts.map +1 -1
- package/lib/concern-tool.js +12 -9
- package/lib/concern-tool.js.map +1 -1
- package/lib/daily-review.d.ts +1 -0
- package/lib/daily-review.d.ts.map +1 -1
- package/lib/daily-review.js +14 -3
- package/lib/daily-review.js.map +1 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +13 -0
- package/lib/index.js.map +1 -1
- package/lib/memory-artifacts.d.ts +42 -0
- package/lib/memory-artifacts.d.ts.map +1 -0
- package/lib/memory-artifacts.js +120 -0
- package/lib/memory-artifacts.js.map +1 -0
- package/lib/memory-domain.d.ts +10 -0
- package/lib/memory-domain.d.ts.map +1 -1
- package/lib/memory-journal.d.ts +16 -0
- package/lib/memory-journal.d.ts.map +1 -0
- package/lib/memory-journal.js +51 -0
- package/lib/memory-journal.js.map +1 -0
- package/lib/memory-prompt-context.d.ts.map +1 -1
- package/lib/memory-prompt-context.js +2 -1
- package/lib/memory-prompt-context.js.map +1 -1
- package/lib/memory-quality.d.ts +4 -0
- package/lib/memory-quality.d.ts.map +1 -0
- package/lib/memory-quality.js +16 -0
- package/lib/memory-quality.js.map +1 -0
- package/lib/memory-reflection.d.ts +15 -2
- package/lib/memory-reflection.d.ts.map +1 -1
- package/lib/memory-reflection.js +103 -17
- package/lib/memory-reflection.js.map +1 -1
- package/lib/memory-retrieval.d.ts +5 -0
- package/lib/memory-retrieval.d.ts.map +1 -0
- package/lib/memory-retrieval.js +20 -0
- package/lib/memory-retrieval.js.map +1 -0
- package/lib/memory-store.d.ts +26 -2
- package/lib/memory-store.d.ts.map +1 -1
- package/lib/memory-store.js +142 -50
- package/lib/memory-store.js.map +1 -1
- package/lib/memory-worker.d.ts +25 -0
- package/lib/memory-worker.d.ts.map +1 -0
- package/lib/memory-worker.js +42 -0
- package/lib/memory-worker.js.map +1 -0
- package/lib/profile-domain.d.ts.map +1 -1
- package/lib/profile-domain.js +12 -4
- package/lib/profile-domain.js.map +1 -1
- package/lib/ui/memory/automation-settings.d.ts +8 -0
- package/lib/ui/memory/automation-settings.d.ts.map +1 -0
- package/lib/ui/memory/automation-settings.js +60 -0
- package/lib/ui/memory/automation-settings.js.map +1 -0
- package/lib/ui/memory/concern-board.d.ts +12 -0
- package/lib/ui/memory/concern-board.d.ts.map +1 -0
- package/lib/ui/memory/concern-board.js +129 -0
- package/lib/ui/memory/concern-board.js.map +1 -0
- package/lib/ui/memory/concern-panel.d.ts +7 -0
- package/lib/ui/memory/concern-panel.d.ts.map +1 -0
- package/lib/ui/memory/concern-panel.js +62 -0
- package/lib/ui/memory/concern-panel.js.map +1 -0
- package/lib/ui/memory/experience-view.d.ts +8 -0
- package/lib/ui/memory/experience-view.d.ts.map +1 -0
- package/lib/ui/memory/experience-view.js +52 -0
- package/lib/ui/memory/experience-view.js.map +1 -0
- package/lib/ui/memory/history-view.d.ts +6 -0
- package/lib/ui/memory/history-view.d.ts.map +1 -0
- package/lib/ui/memory/history-view.js +40 -0
- package/lib/ui/memory/history-view.js.map +1 -0
- package/lib/ui/memory/memory-cards.d.ts +14 -0
- package/lib/ui/memory/memory-cards.d.ts.map +1 -0
- package/lib/ui/memory/memory-cards.js +17 -0
- package/lib/ui/memory/memory-cards.js.map +1 -0
- package/lib/ui/memory/memory-detail.d.ts +8 -0
- package/lib/ui/memory/memory-detail.d.ts.map +1 -0
- package/lib/ui/memory/memory-detail.js +45 -0
- package/lib/ui/memory/memory-detail.js.map +1 -0
- package/lib/ui/memory/memory-graph.d.ts +8 -0
- package/lib/ui/memory/memory-graph.d.ts.map +1 -0
- package/lib/ui/memory/memory-graph.js +43 -0
- package/lib/ui/memory/memory-graph.js.map +1 -0
- package/lib/ui/memory/memory-library.d.ts +9 -0
- package/lib/ui/memory/memory-library.d.ts.map +1 -0
- package/lib/ui/memory/memory-library.js +38 -0
- package/lib/ui/memory/memory-library.js.map +1 -0
- package/lib/ui/memory/memory-panel.d.ts +10 -0
- package/lib/ui/memory/memory-panel.d.ts.map +1 -0
- package/lib/ui/memory/memory-panel.js +48 -0
- package/lib/ui/memory/memory-panel.js.map +1 -0
- package/lib/ui/memory/types.d.ts +44 -0
- package/lib/ui/memory/types.d.ts.map +1 -0
- package/lib/ui/memory/types.js +2 -0
- package/lib/ui/memory/types.js.map +1 -0
- package/lib/ui/memory/use-memory-resource.d.ts +9 -0
- package/lib/ui/memory/use-memory-resource.d.ts.map +1 -0
- package/lib/ui/memory/use-memory-resource.js +65 -0
- package/lib/ui/memory/use-memory-resource.js.map +1 -0
- package/package.json +3 -1
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { MemoryView, DailyReflectionView } from '../../client-api.js';
|
|
2
|
+
export declare function DailyReflectionDetail({ entry }: {
|
|
3
|
+
entry: DailyReflectionView;
|
|
4
|
+
}): JSX.Element;
|
|
5
|
+
export declare function MemoryCard({ item, editing, busy, setEditing, save, remove }: {
|
|
6
|
+
item: MemoryView;
|
|
7
|
+
editing: MemoryView | undefined;
|
|
8
|
+
busy: boolean;
|
|
9
|
+
setEditing(value?: MemoryView): void;
|
|
10
|
+
save(): void;
|
|
11
|
+
remove(): void;
|
|
12
|
+
}): JSX.Element;
|
|
13
|
+
export declare function memoryKind(value: MemoryView['kind']): string;
|
|
14
|
+
//# sourceMappingURL=memory-cards.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-cards.d.ts","sourceRoot":"","sources":["../../../src/ui/memory/memory-cards.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,UAAU,EAAE,mBAAmB,EAAC,MAAM,qBAAqB,CAAA;AAExE,wBAAgB,qBAAqB,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,EAAE,mBAAmB,CAAA;CAAE,GAAG,GAAG,CAAC,OAAO,CAE5F;AAOD,wBAAgB,UAAU,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,UAAU,GAAG,SAAS,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,KAAK,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IAAC,IAAI,IAAI,IAAI,CAAC;IAAC,MAAM,IAAI,IAAI,CAAA;CAAE,GAAG,GAAG,CAAC,OAAO,CAYnO;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC,GAAG,MAAM,CAAsH"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { useState } from 'react';
|
|
3
|
+
import { relativeTime } from '../partner-components.js';
|
|
4
|
+
export function DailyReflectionDetail({ entry }) {
|
|
5
|
+
return _jsxs("article", { className: "dsh-partner-diary-detail", children: [_jsxs("header", { children: [_jsx("time", { children: entry.date }), _jsxs("strong", { children: [entry.turnCount, " \u8F6E\u4EA4\u6D41\u540E\u7684\u7406\u89E3"] }), _jsxs("small", { children: ["\u66F4\u65B0\u4E8E ", new Date(entry.updatedAt).toLocaleString()] })] }), _jsx("p", { children: entry.summary }), _jsx(ReflectionGroup, { title: "\u5F85\u8DDF\u8FDB", items: entry.openTasks }), _jsx(ReflectionGroup, { title: "\u5F53\u5929\u4E8B\u4EF6", items: entry.events }), _jsx(ReflectionGroup, { title: "\u65B0\u7406\u89E3", items: entry.learnings }), _jsx(ReflectionGroup, { title: "\u5DF2\u5B8C\u6210", items: entry.completedTasks })] });
|
|
6
|
+
}
|
|
7
|
+
function ReflectionGroup({ title, items }) {
|
|
8
|
+
if (items.length === 0)
|
|
9
|
+
return null;
|
|
10
|
+
return _jsxs("section", { children: [_jsx("strong", { children: title }), _jsx("ul", { children: items.map(item => _jsx("li", { children: item }, item)) })] });
|
|
11
|
+
}
|
|
12
|
+
export function MemoryCard({ item, editing, busy, setEditing, save, remove }) {
|
|
13
|
+
const [confirmingRemove, setConfirmingRemove] = useState(false);
|
|
14
|
+
return _jsx("article", { "data-kind": item.kind, children: editing ? _jsxs("div", { className: "dsh-partner-memory-editor", children: [_jsx("input", { "aria-label": "\u8BB0\u5FC6\u4E3B\u9898", value: editing.subject, onChange: event => setEditing({ ...editing, subject: event.target.value }) }), _jsx("textarea", { "aria-label": "\u8BB0\u5FC6\u5185\u5BB9", value: editing.content, onChange: event => setEditing({ ...editing, content: event.target.value }) }), _jsxs("footer", { children: [_jsx("button", { type: "button", onClick: () => setEditing(undefined), children: "\u53D6\u6D88" }), _jsx("button", { type: "button", className: "is-primary", disabled: busy || !editing.subject.trim() || !editing.content.trim(), onClick: save, children: "\u4FDD\u5B58\u4FEE\u6B63" })] })] }) : _jsxs(_Fragment, { children: [_jsxs("header", { children: [_jsx("span", { children: memoryKind(item.kind) }), _jsx("div", { children: confirmingRemove ? _jsxs(_Fragment, { children: [_jsx("button", { type: "button", onClick: () => setConfirmingRemove(false), children: "\u53D6\u6D88" }), _jsx("button", { type: "button", className: "is-danger", disabled: busy, onClick: remove, children: "\u786E\u8BA4\u5220\u9664" })] }) : _jsxs(_Fragment, { children: [_jsx("button", { type: "button", onClick: () => setEditing({ ...item }), children: "\u7F16\u8F91" }), _jsx("button", { type: "button", onClick: () => setConfirmingRemove(true), children: "\u5220\u9664" })] }) })] }), _jsx("strong", { children: item.subject }), _jsx("p", { children: item.content }), _jsxs("footer", { children: [_jsx("progress", { max: 1, value: item.confidence, "aria-label": `置信度 ${Math.round(item.confidence * 100)}%` }), _jsxs("small", { children: [item.locked ? '手动确认' : `${Math.round(item.confidence * 100)}% 可信`, " \u00B7 ", relativeTime(item.updatedAt)] })] }), item.evidence.length > 0 && _jsxs("details", { className: "dsh-partner-memory-evidence", children: [_jsxs("summary", { children: ["\u67E5\u770B\u5BF9\u8BDD\u4F9D\u636E ", _jsx("b", { children: item.evidence.length })] }), _jsx("div", { children: [...item.evidence].reverse().map(evidence => _jsxs("blockquote", { children: [_jsx("p", { children: evidence.excerpt }), _jsx("time", { children: new Date(evidence.at).toLocaleString() })] }, `${evidence.turnId}:${evidence.at}`)) })] })] }) });
|
|
15
|
+
}
|
|
16
|
+
export function memoryKind(value) { return ({ profile: '画像', preference: '偏好', task: '任务', event: '事件', relationship: '关系', emotion: '情绪信号' })[value]; }
|
|
17
|
+
//# sourceMappingURL=memory-cards.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-cards.js","sourceRoot":"","sources":["../../../src/ui/memory/memory-cards.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type MemoryView } from '../../client-api.js';
|
|
2
|
+
export declare function MemoryDetail({ companionId, item, close, changed }: {
|
|
3
|
+
companionId: string;
|
|
4
|
+
item: MemoryView;
|
|
5
|
+
close(): void;
|
|
6
|
+
changed(): Promise<void>;
|
|
7
|
+
}): JSX.Element;
|
|
8
|
+
//# sourceMappingURL=memory-detail.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-detail.d.ts","sourceRoot":"","sources":["../../../src/ui/memory/memory-detail.tsx"],"names":[],"mappings":"AACA,OAAO,EAAM,KAAK,UAAU,EAAC,MAAM,qBAAqB,CAAA;AAKxD,wBAAgB,YAAY,CAAC,EAAC,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAC,EAAE;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,UAAU,CAAC;IAAC,KAAK,IAAI,IAAI,CAAC;IAAC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CAAC,GAAG,GAAG,CAAC,OAAO,CAyB/J"}
|
|
@@ -0,0 +1,45 @@
|
|
|
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 { WorkspaceDialog, WorkspaceNotice, errorMessage } from '../workspace-components.js';
|
|
5
|
+
import { MemoryCard } from './memory-cards.js';
|
|
6
|
+
import { MEMORY_STATUS } from './types.js';
|
|
7
|
+
export function MemoryDetail({ companionId, item, close, changed }) {
|
|
8
|
+
const [current, setCurrent] = useState(item);
|
|
9
|
+
const [editing, setEditing] = useState();
|
|
10
|
+
const [busy, setBusy] = useState(false);
|
|
11
|
+
const [error, setError] = useState();
|
|
12
|
+
const [notice, setNotice] = useState();
|
|
13
|
+
const lock = useRef(false);
|
|
14
|
+
const run = async (remove = false) => {
|
|
15
|
+
if (lock.current || (!remove && !editing))
|
|
16
|
+
return;
|
|
17
|
+
lock.current = true;
|
|
18
|
+
setBusy(true);
|
|
19
|
+
setError(undefined);
|
|
20
|
+
try {
|
|
21
|
+
const path = `/companions/${encodeURIComponent(companionId)}/memory/${encodeURIComponent(current.id)}`;
|
|
22
|
+
if (remove) {
|
|
23
|
+
await api(path, { method: 'DELETE' });
|
|
24
|
+
close();
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
const updated = await api(path, { method: 'PUT', body: JSON.stringify({ subject: editing.subject, content: editing.content }) });
|
|
28
|
+
setCurrent(updated);
|
|
29
|
+
setEditing(undefined);
|
|
30
|
+
setNotice('修正已保存,并锁定为用户确认的内容');
|
|
31
|
+
}
|
|
32
|
+
await changed();
|
|
33
|
+
}
|
|
34
|
+
catch (reason) {
|
|
35
|
+
setError(errorMessage(reason));
|
|
36
|
+
}
|
|
37
|
+
finally {
|
|
38
|
+
lock.current = false;
|
|
39
|
+
setBusy(false);
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
return _jsxs(WorkspaceDialog, { title: "\u8BB0\u5FC6\u8BE6\u60C5", detail: `${MEMORY_STATUS[current.status]} · 修改后的内容会优先保留;删除需要再次确认。`, close: () => { if (!busy)
|
|
43
|
+
close(); }, children: [error && _jsx(WorkspaceNotice, { children: error }), notice && _jsx(WorkspaceNotice, { kind: "success", children: notice }), _jsx("div", { className: "dsh-partner-library-detail", children: _jsx(MemoryCard, { item: current, editing: editing, busy: busy, setEditing: setEditing, save: () => { void run(); }, remove: () => { void run(true); } }, current.id) })] });
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=memory-detail.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-detail.js","sourceRoot":"","sources":["../../../src/ui/memory/memory-detail.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { MemoryView, MemoryGraphView, UserProfileSnapshotView } from '../../client-api.js';
|
|
2
|
+
export declare function MemoryGraph({ graph, profiles, query, inspect }: {
|
|
3
|
+
graph: MemoryGraphView;
|
|
4
|
+
profiles: UserProfileSnapshotView[];
|
|
5
|
+
query: string;
|
|
6
|
+
inspect(item: MemoryView): void;
|
|
7
|
+
}): JSX.Element;
|
|
8
|
+
//# sourceMappingURL=memory-graph.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-graph.d.ts","sourceRoot":"","sources":["../../../src/ui/memory/memory-graph.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,UAAU,EAAsB,eAAe,EAAE,uBAAuB,EAAC,MAAM,qBAAqB,CAAA;AAMjH,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;IAAE,KAAK,EAAE,eAAe,CAAC;IAAC,QAAQ,EAAE,uBAAuB,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAAA;CAAE,GAAG,GAAG,CAAC,OAAO,CA0B7L"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState } from 'react';
|
|
3
|
+
import { ContentState as State } from '../partner-components.js';
|
|
4
|
+
import { memoryKind } from './memory-cards.js';
|
|
5
|
+
const RELATION_FILTERS = ['all', 'conflicts_with', 'depends_on', 'supports', 'follows', 'about'];
|
|
6
|
+
export function MemoryGraph({ graph, profiles, query, inspect }) {
|
|
7
|
+
const byId = new Map(graph.memories.map(item => [item.id, item]));
|
|
8
|
+
const scopeIds = [...new Set(graph.relations.map(item => item.scopeId))];
|
|
9
|
+
const [requestedScopeId, setRequestedScopeId] = useState();
|
|
10
|
+
const scopeId = scopeIds.includes(requestedScopeId ?? '') ? requestedScopeId : scopeIds[0];
|
|
11
|
+
const [filter, setFilter] = useState('all');
|
|
12
|
+
const scoped = graph.relations.filter(item => item.scopeId === scopeId);
|
|
13
|
+
const visible = scoped.filter(item => {
|
|
14
|
+
if (filter !== 'all' && item.kind !== filter)
|
|
15
|
+
return false;
|
|
16
|
+
const source = byId.get(item.sourceMemoryId);
|
|
17
|
+
const target = byId.get(item.targetMemoryId);
|
|
18
|
+
return !query || `${source?.subject ?? ''} ${source?.content ?? ''} ${target?.subject ?? ''} ${target?.content ?? ''} ${item.label}`.toLocaleLowerCase().includes(query);
|
|
19
|
+
}).sort((left, right) => Number(right.kind === 'conflicts_with') - Number(left.kind === 'conflicts_with') || right.confidence - left.confidence);
|
|
20
|
+
const [selectedRelationId, setSelectedRelationId] = useState();
|
|
21
|
+
const selected = visible.find(item => item.id === selectedRelationId) ?? visible[0];
|
|
22
|
+
const source = selected ? byId.get(selected.sourceMemoryId) : undefined;
|
|
23
|
+
const target = selected ? byId.get(selected.targetMemoryId) : undefined;
|
|
24
|
+
const label = profiles.find(item => item.scopeId === scopeId)?.label ?? (scopeId ? `联系人 ${scopeId.slice(-6)}` : '当前联系人');
|
|
25
|
+
const conflictCount = scoped.filter(item => item.kind === 'conflicts_with').length;
|
|
26
|
+
if (graph.relations.length === 0)
|
|
27
|
+
return _jsx(State, { title: "\u8FD8\u6CA1\u6709\u53EF\u9760\u5173\u7CFB", detail: "\u6BCF\u65E5\u7EC8\u5BA1\u53EA\u4F1A\u4FDD\u5B58\u6709\u660E\u786E\u8BC1\u636E\u7684\u8BB0\u5FC6\u8054\u7CFB\uFF0C\u4E0D\u4F1A\u4E3A\u4E86\u586B\u6EE1\u56FE\u8C31\u800C\u731C\u6D4B\u3002" });
|
|
28
|
+
return _jsxs("div", { className: "dsh-partner-graph-audit", children: [_jsxs("header", { className: "dsh-partner-graph-toolbar", children: [_jsxs("span", { children: [_jsx("small", { children: "\u5173\u7CFB\u5BA1\u8BA1" }), _jsxs("strong", { children: [label, " \u7684\u7406\u89E3\u5173\u7CFB"] }), _jsxs("p", { children: [scoped.length, " \u6761\u53EF\u9760\u8054\u7CFB", conflictCount > 0 ? `,其中 ${conflictCount} 条需要确认` : ',暂无待确认冲突'] })] }), scopeIds.length > 1 && _jsxs("label", { children: [_jsx("span", { children: "\u8054\u7CFB\u4EBA" }), _jsx("select", { value: scopeId, onChange: event => { setRequestedScopeId(event.target.value); setSelectedRelationId(undefined); }, children: scopeIds.map(value => _jsx("option", { value: value, children: profiles.find(item => item.scopeId === value)?.label ?? `联系人 ${value.slice(-6)}` }, value)) })] })] }), _jsx("nav", { className: "dsh-partner-graph-filters", "aria-label": "\u5173\u7CFB\u7C7B\u578B", children: RELATION_FILTERS.map(value => { const count = value === 'all' ? scoped.length : scoped.filter(item => item.kind === value).length; return _jsxs("button", { type: "button", className: filter === value ? 'is-active' : '', "aria-pressed": filter === value, onClick: () => { setFilter(value); setSelectedRelationId(undefined); }, children: [value === 'all' ? '全部' : relationLabel(value), " ", _jsx("b", { children: count })] }, value); }) }), _jsxs("div", { className: "dsh-partner-graph-browser", children: [_jsx("div", { className: "dsh-partner-graph-index", role: "list", children: visible.length === 0 ? _jsx(State, { title: "\u6CA1\u6709\u5339\u914D\u7684\u5173\u7CFB", detail: "\u8C03\u6574\u5173\u7CFB\u7C7B\u578B\u6216\u641C\u7D22\u5173\u952E\u8BCD\u540E\u518D\u8BD5\u3002", compact: true }) : visible.map(item => { const from = byId.get(item.sourceMemoryId); const to = byId.get(item.targetMemoryId); return _jsxs("button", { type: "button", role: "listitem", "data-kind": item.kind, className: selected?.id === item.id ? 'is-active' : '', onClick: () => setSelectedRelationId(item.id), children: [_jsx("span", { children: relationLabel(item.kind) }), _jsxs("strong", { children: [from?.subject ?? '已删除记忆', " ", _jsx("i", { "aria-hidden": "true", children: "\u2192" }), " ", to?.subject ?? '已删除记忆'] }), _jsx("p", { children: item.label }), _jsxs("small", { children: [Math.round(item.confidence * 100), "% \u53EF\u4FE1"] })] }, item.id); }) }), _jsx("div", { className: "dsh-partner-graph-stage", children: selected && source && target ? _jsxs("article", { "data-kind": selected.kind, children: [_jsxs("header", { children: [_jsx("span", { children: relationLabel(selected.kind) }), _jsxs("strong", { children: [source.subject, " ", _jsx("i", { "aria-hidden": "true", children: "\u2192" }), " ", target.subject] }), _jsx("p", { children: selected.label }), _jsx("small", { children: relationGuidance(selected.kind) })] }), _jsxs("div", { className: "dsh-partner-graph-pair", children: [_jsx(GraphMemory, { item: source, side: "\u8D77\u70B9", inspect: inspect }), _jsxs("div", { "aria-hidden": "true", children: [_jsx("i", {}), _jsx("span", { children: relationLabel(selected.kind) }), _jsx("i", {})] }), _jsx(GraphMemory, { item: target, side: "\u5173\u8054\u9879", inspect: inspect })] }), _jsxs("footer", { children: [_jsxs("small", { children: ["\u6700\u8FD1\u7EC8\u5BA1\u4E8E ", new Date(selected.updatedAt).toLocaleString()] }), _jsxs("strong", { children: ["\u5173\u7CFB\u7F6E\u4FE1\u5EA6 ", Math.round(selected.confidence * 100), "%"] })] })] }) : _jsx(State, { title: "\u9009\u62E9\u4E00\u6761\u5173\u7CFB", detail: "\u5173\u7CFB\u4E24\u7AEF\u7684\u8BB0\u5FC6\u4E0E\u4F7F\u7528\u65B9\u5F0F\u4F1A\u663E\u793A\u5728\u8FD9\u91CC\u3002", compact: true }) })] })] });
|
|
29
|
+
}
|
|
30
|
+
function GraphMemory({ item, side, inspect }) {
|
|
31
|
+
return _jsxs("section", { children: [_jsxs("header", { children: [_jsxs("small", { children: [side, " \u00B7 ", memoryKind(item.kind)] }), _jsx("strong", { children: item.subject })] }), _jsx("p", { children: item.content }), _jsx("button", { type: "button", onClick: () => inspect(item), children: "\u67E5\u770B\u5E76\u4FEE\u6B63" })] });
|
|
32
|
+
}
|
|
33
|
+
function relationLabel(kind) { return ({ supports: '支持', depends_on: '依赖', about: '关于', conflicts_with: '冲突', follows: '后续' })[kind]; }
|
|
34
|
+
function relationGuidance(kind) {
|
|
35
|
+
return ({
|
|
36
|
+
supports: '回答涉及目标记忆时,可把起点作为明确支持依据,但不能据此补写新事实。',
|
|
37
|
+
depends_on: '处理起点事项时,应同时检查关联项是否成立或已经完成。',
|
|
38
|
+
about: '两条记忆属于同一上下文,召回其中一条时可以补充另一条帮助理解。',
|
|
39
|
+
conflicts_with: '两条理解暂时不能同时作为事实;伙伴应在相关话题出现时指出差异并请求确认。',
|
|
40
|
+
follows: '它们存在明确先后关系,后续判断需要保留这个顺序。',
|
|
41
|
+
})[kind];
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=memory-graph.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-graph.js","sourceRoot":"","sources":["../../../src/ui/memory/memory-graph.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,QAAQ,EAAC,MAAM,OAAO,CAAA;AAE9B,OAAO,EAAC,YAAY,IAAI,KAAK,EAAC,MAAM,0BAA0B,CAAA;AAC9D,OAAO,EAAC,UAAU,EAAC,MAAM,mBAAmB,CAAA;AAE5C,MAAM,gBAAgB,GAAqB,CAAC,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,CAAC,CAAA;AAElH,MAAM,UAAU,WAAW,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAmH;IAC9K,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,CAAA;IACjE,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;IACxE,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,QAAQ,EAAU,CAAA;IAClE,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,gBAAiB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;IAC3F,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAiB,KAAK,CAAC,CAAA;IAC3D,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,KAAK,OAAO,CAAC,CAAA;IACvE,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;QACnC,IAAI,MAAM,KAAK,KAAK,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;YAAE,OAAO,KAAK,CAAA;QAC1D,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAAC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;QAC1F,OAAO,CAAC,KAAK,IAAI,GAAG,MAAM,EAAE,OAAO,IAAI,EAAE,IAAI,MAAM,EAAE,OAAO,IAAI,EAAE,IAAI,MAAM,EAAE,OAAO,IAAI,EAAE,IAAI,MAAM,EAAE,OAAO,IAAI,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,iBAAiB,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC1K,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,KAAK,gBAAgB,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,gBAAgB,CAAC,IAAI,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,CAAA;IAChJ,MAAM,CAAC,kBAAkB,EAAE,qBAAqB,CAAC,GAAG,QAAQ,EAAU,CAAA;IACtE,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,kBAAkB,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAA;IACnF,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IACvE,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IACvE,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,KAAK,OAAO,CAAC,EAAE,KAAK,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA;IACxH,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,gBAAgB,CAAC,CAAC,MAAM,CAAA;IAClF,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAC,KAAK,IAAC,KAAK,EAAC,4CAAS,EAAC,MAAM,EAAC,4LAAiC,GAAG,CAAA;IAC3G,OAAO,eAAK,SAAS,EAAC,yBAAyB,aAC7C,kBAAQ,SAAS,EAAC,2BAA2B,aAAC,2BAAM,uDAAmB,EAAA,6BAAS,KAAK,uCAAgB,EAAA,wBAAI,MAAM,CAAC,MAAM,qCAAQ,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,aAAa,QAAQ,CAAC,CAAC,CAAC,UAAU,IAAK,IAAO,EAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,4BAAO,gDAAgB,EAAA,iBAAQ,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,GAAG,mBAAmB,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAA,CAAC,CAAC,YAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,iBAAQ,KAAK,EAAE,KAAK,YAAe,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,KAAK,KAAK,CAAC,EAAE,KAAK,IAAI,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,IAAxF,KAAK,CAA6F,CAAC,GAAU,IAAQ,IAAU,EACjiB,cAAK,SAAS,EAAC,2BAA2B,gBAAY,0BAAM,YAAE,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,MAAM,KAAK,GAAG,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,kBAAQ,IAAI,EAAC,QAAQ,EAAa,SAAS,EAAE,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,kBAAgB,MAAM,KAAK,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAA,CAAC,CAAC,aAAG,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,OAAE,sBAAI,KAAK,GAAK,KAA5N,KAAK,CAAgO,CAAA,CAAC,CAAC,CAAC,GAAO,EACld,eAAK,SAAS,EAAC,2BAA2B,aAAC,cAAK,SAAS,EAAC,yBAAyB,EAAC,IAAI,EAAC,MAAM,YAAE,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,KAAC,KAAK,IAAC,KAAK,EAAC,4CAAS,EAAC,MAAM,EAAC,kGAAkB,EAAC,OAAO,SAAG,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,kBAAQ,IAAI,EAAC,QAAQ,EAAC,IAAI,EAAC,UAAU,eAA0B,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC,aAAE,yBAAO,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAQ,EAAA,6BAAS,IAAI,EAAE,OAAO,IAAI,OAAO,OAAE,2BAAe,MAAM,uBAAM,OAAE,EAAE,EAAE,OAAO,IAAI,OAAO,IAAU,EAAA,sBAAI,IAAI,CAAC,KAAK,GAAK,EAAA,4BAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC,sBAAa,KAAtV,IAAI,CAAC,EAAE,CAAwV,CAAA,CAAC,CAAC,CAAC,GAAO,EAC3rB,cAAK,SAAS,EAAC,yBAAyB,YAAE,QAAQ,IAAI,MAAM,IAAI,MAAM,CAAC,CAAC,CAAC,gCAAoB,QAAQ,CAAC,IAAI,aAAE,6BAAQ,yBAAO,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAQ,EAAA,6BAAS,MAAM,CAAC,OAAO,OAAE,2BAAe,MAAM,uBAAM,OAAE,MAAM,CAAC,OAAO,IAAU,EAAA,sBAAI,QAAQ,CAAC,KAAK,GAAK,EAAA,0BAAQ,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAS,IAAS,EAAA,eAAK,SAAS,EAAC,wBAAwB,aAAC,KAAC,WAAW,IAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAC,cAAI,EAAC,OAAO,EAAE,OAAO,GAAI,EAAA,8BAAiB,MAAM,aAAC,aAAK,EAAA,yBAAO,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAQ,EAAA,aAAK,IAAM,EAAA,KAAC,WAAW,IAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAC,oBAAK,EAAC,OAAO,EAAE,OAAO,GAAI,IAAM,EAAA,6BAAQ,+DAAc,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,cAAc,EAAE,IAAS,EAAA,gEAAe,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,GAAG,GAAG,CAAC,SAAW,IAAS,IAAU,CAAC,CAAC,CAAC,KAAC,KAAK,IAAC,KAAK,EAAC,sCAAQ,EAAC,MAAM,EAAC,oHAAqB,EAAC,OAAO,SAAG,GAAO,IAClxB,IACF,CAAA;AACR,CAAC;AAED,SAAS,WAAW,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAuE;IAC/G,OAAO,8BAAS,6BAAQ,4BAAQ,IAAI,cAAK,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAS,EAAA,2BAAS,IAAI,CAAC,OAAO,GAAU,IAAS,EAAA,sBAAI,IAAI,CAAC,OAAO,GAAK,EAAA,iBAAQ,IAAI,EAAC,QAAQ,EAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,+CAAgB,IAAU,CAAA;AAClN,CAAC;AAED,SAAS,aAAa,CAAC,IAAgC,IAAY,OAAO,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAA,CAAC,CAAC;AAC1K,SAAS,gBAAgB,CAAC,IAAgC;IACxD,OAAO,CAAC;QACN,QAAQ,EAAE,oCAAoC;QAC9C,UAAU,EAAE,4BAA4B;QACxC,KAAK,EAAE,iCAAiC;QACxC,cAAc,EAAE,sCAAsC;QACtD,OAAO,EAAE,0BAA0B;KACpC,CAAC,CAAC,IAAI,CAAC,CAAA;AACV,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type MemoryCollection, type MemoryLayers } from './types.js';
|
|
2
|
+
export declare function MemoryLibrary({ companionId, scopeId, collection, layers, changed }: {
|
|
3
|
+
companionId: string;
|
|
4
|
+
scopeId: string;
|
|
5
|
+
collection: MemoryCollection;
|
|
6
|
+
layers: MemoryLayers | undefined;
|
|
7
|
+
changed(): Promise<void>;
|
|
8
|
+
}): JSX.Element;
|
|
9
|
+
//# sourceMappingURL=memory-library.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-library.d.ts","sourceRoot":"","sources":["../../../src/ui/memory/memory-library.tsx"],"names":[],"mappings":"AAWA,OAAO,EAAgB,KAAK,gBAAgB,EAAE,KAAK,YAAY,EAAkB,MAAM,YAAY,CAAA;AAEnG,wBAAgB,aAAa,CAAC,EAAC,WAAW,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAC,EAAE;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,gBAAgB,CAAC;IAAC,MAAM,EAAE,YAAY,GAAG,SAAS,CAAC;IAAC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CAAC,GAAG,GAAG,CAAC,OAAO,CAoDhO"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { useMemo, useRef, useState } from 'react';
|
|
3
|
+
import { IconDataOutline16, IconUserOutline16, IconBrowseOutline16, IconListPenOutline16, IconLinkOutline16 } from '@deepseek-ai/dsh-client-ui-primitives';
|
|
4
|
+
import { CollectionEmpty, WorkspaceDialog, WorkspaceNotice } from '../workspace-components.js';
|
|
5
|
+
import { relativeTime } from '../partner-components.js';
|
|
6
|
+
import { MemoryDetail } from './memory-detail.js';
|
|
7
|
+
import { DailyReflectionDetail, memoryKind } from './memory-cards.js';
|
|
8
|
+
import { MemoryGraph } from './memory-graph.js';
|
|
9
|
+
import { HistoryView } from './history-view.js';
|
|
10
|
+
import { ExperienceView } from './experience-view.js';
|
|
11
|
+
import { useMemoryResource } from './use-memory-resource.js';
|
|
12
|
+
import { MEMORY_STATUS } from './types.js';
|
|
13
|
+
export function MemoryLibrary({ companionId, scopeId, collection, layers, changed }) {
|
|
14
|
+
const [mode, setMode] = useState('profile');
|
|
15
|
+
const [query, setQuery] = useState('');
|
|
16
|
+
const [status, setStatus] = useState('active');
|
|
17
|
+
const [kind, setKind] = useState('all');
|
|
18
|
+
const [limit, setLimit] = useState(20);
|
|
19
|
+
const [inspecting, setInspecting] = useState();
|
|
20
|
+
const [date, setDate] = useState();
|
|
21
|
+
const more = useRef(null);
|
|
22
|
+
const base = `/companions/${encodeURIComponent(companionId)}`;
|
|
23
|
+
const graph = useMemoryResource(mode === 'graph' ? `${base}/memory/graph` : undefined);
|
|
24
|
+
const normalized = query.trim().toLocaleLowerCase();
|
|
25
|
+
const profile = collection.profiles.find(item => item.scopeId === scopeId);
|
|
26
|
+
const filtered = useMemo(() => collection.memories.filter(item => item.scopeId === scopeId && (status === 'all' || item.status === status)
|
|
27
|
+
&& (kind === 'all' || item.kind === kind) && (!normalized || `${item.subject} ${item.content}`.toLocaleLowerCase().includes(normalized))), [collection.memories, scopeId, status, kind, normalized]);
|
|
28
|
+
const reflections = collection.reflections.filter(item => item.scopeId === scopeId && (!normalized || `${item.date} ${item.summary}`.toLocaleLowerCase().includes(normalized)));
|
|
29
|
+
const selectedDay = reflections.find(item => item.date === date);
|
|
30
|
+
const selectMode = (value) => { setMode(value); setQuery(''); setLimit(20); if (more.current)
|
|
31
|
+
more.current.open = false; };
|
|
32
|
+
const row = (item) => _jsxs("button", { type: "button", className: "dsh-partner-memory-row", onClick: () => setInspecting(item), children: [_jsxs("span", { className: "dsh-partner-memory-row-copy", children: [_jsx("strong", { children: item.subject }), _jsx("p", { children: item.content }), _jsxs("small", { children: [memoryKind(item.kind), " \u00B7 ", item.locked ? '用户确认' : `${Math.round(item.confidence * 100)}% 可信`, " \u00B7 ", relativeTime(item.updatedAt)] })] }), _jsx("span", { className: "dsh-partner-memory-badge", "data-status": item.status, children: MEMORY_STATUS[item.status] })] }, item.id);
|
|
33
|
+
return _jsxs("section", { className: "dsh-partner-memory-library-v2", children: [_jsxs("nav", { className: "dsh-partner-memory-nav", "aria-label": "\u8BB0\u5FC6\u5185\u5BB9", children: [_jsxs("button", { type: "button", "aria-pressed": mode === 'profile', onClick: () => selectMode('profile'), children: [_jsx(IconUserOutline16, { size: 16 }), "\u753B\u50CF"] }), _jsxs("button", { type: "button", "aria-pressed": mode === 'memory' || mode === 'scenes', onClick: () => selectMode('memory'), children: [_jsx(IconDataOutline16, { size: 16 }), "\u8BB0\u5FC6"] }), _jsxs("button", { type: "button", "aria-pressed": mode === 'reflection' || mode === 'history', onClick: () => selectMode('reflection'), children: [_jsx(IconBrowseOutline16, { size: 16 }), "\u56DE\u987E"] }), _jsxs("details", { className: "dsh-partner-memory-more", ref: more, onKeyDown: event => { if (event.key === 'Escape' && more.current) {
|
|
34
|
+
more.current.open = false;
|
|
35
|
+
more.current.querySelector('summary')?.focus();
|
|
36
|
+
} }, children: [_jsxs("summary", { "aria-label": "\u66F4\u591A\u8BB0\u5FC6\u5185\u5BB9", children: [mode === 'experiences' ? '经验审核' : mode === 'graph' ? '关系图谱' : '更多', " ", _jsx("span", { "aria-hidden": "true", children: "\u22EF" })] }), _jsxs("div", { children: [_jsxs("button", { type: "button", onClick: () => selectMode('experiences'), children: [_jsx(IconListPenOutline16, { size: 16 }), "\u7ECF\u9A8C\u5BA1\u6838 ", _jsx("small", { children: layers?.experiences.filter(item => item.status === 'draft').length ?? 0 })] }), _jsxs("button", { type: "button", onClick: () => selectMode('graph'), children: [_jsx(IconLinkOutline16, { size: 16 }), "\u5173\u7CFB\u56FE\u8C31"] })] })] })] }), (mode === 'memory' || mode === 'scenes') && _jsxs("div", { className: "dsh-partner-memory-segment", "aria-label": "\u8BB0\u5FC6\u89C6\u56FE", children: [_jsx("button", { type: "button", "aria-pressed": mode === 'memory', onClick: () => selectMode('memory'), children: "\u8BB0\u5FC6\u6761\u76EE" }), _jsx("button", { type: "button", "aria-pressed": mode === 'scenes', onClick: () => selectMode('scenes'), children: "\u573A\u666F\u6458\u8981" })] }), (mode === 'reflection' || mode === 'history') && _jsxs("div", { className: "dsh-partner-memory-segment", "aria-label": "\u56DE\u987E\u89C6\u56FE", children: [_jsx("button", { type: "button", "aria-pressed": mode === 'reflection', onClick: () => selectMode('reflection'), children: "\u6BCF\u65E5\u56DE\u987E" }), _jsx("button", { type: "button", "aria-pressed": mode === 'history', onClick: () => selectMode('history'), children: "\u5BF9\u8BDD\u5386\u53F2" })] }), mode !== 'profile' && mode !== 'experiences' && _jsxs("div", { className: "dsh-partner-memory-toolbar", children: [_jsxs("label", { className: "dsh-partner-memory-search", children: [_jsx("span", { className: "sr-only", children: "\u641C\u7D22\u5F53\u524D\u5185\u5BB9" }), _jsx("input", { type: "search", placeholder: mode === 'history' ? '搜索已加载的历史' : '搜索当前内容', value: query, onChange: event => { setQuery(event.target.value); setLimit(20); } })] }), mode === 'memory' && _jsxs(_Fragment, { children: [_jsxs("label", { children: [_jsx("span", { className: "sr-only", children: "\u8BB0\u5FC6\u72B6\u6001" }), _jsxs("select", { "aria-label": "\u8BB0\u5FC6\u72B6\u6001", value: status, onChange: event => { setStatus(event.target.value); setLimit(20); }, children: [_jsx("option", { value: "all", children: "\u5168\u90E8\u72B6\u6001" }), Object.entries(MEMORY_STATUS).map(([value, label]) => _jsx("option", { value: value, children: label }, value))] })] }), _jsxs("label", { children: [_jsx("span", { className: "sr-only", children: "\u8BB0\u5FC6\u7C7B\u578B" }), _jsxs("select", { "aria-label": "\u8BB0\u5FC6\u7C7B\u578B", value: kind, onChange: event => { setKind(event.target.value); setLimit(20); }, children: [_jsx("option", { value: "all", children: "\u5168\u90E8\u7C7B\u578B" }), ['profile', 'preference', 'task', 'event', 'relationship', 'emotion'].map(value => _jsx("option", { value: value, children: memoryKind(value) }, value))] })] })] })] }), mode === 'profile' && _jsxs("div", { className: "dsh-partner-memory-profile", children: [_jsxs("header", { children: [_jsxs("span", { children: [_jsx("small", { children: "\u57FA\u4E8E\u6709\u6548\u8BB0\u5FC6\uFF0C\u800C\u4E0D\u662F\u731C\u6D4B" }), _jsx("h3", { children: "\u4F19\u4F34\u5BF9\u4F60\u7684\u7406\u89E3" })] }), _jsx("small", { children: profile?.updatedAt ? `更新于 ${relativeTime(profile.updatedAt)}` : '等待可靠依据' })] }), _jsxs("section", { children: [_jsx("h4", { children: "\u660E\u786E\u4E8B\u5B9E" }), _jsx("div", { className: "dsh-partner-memory-rows", children: profile?.entries.map(row) }), !profile?.entries.length && _jsx(CollectionEmpty, { title: "\u8FD8\u6CA1\u6709\u8DB3\u591F\u7684\u8EAB\u4EFD\u4E0E\u80CC\u666F\u4FE1\u606F", detail: "\u53EA\u6536\u5F55\u4F60\u660E\u786E\u8868\u8FBE\u7684\u4E8B\u5B9E\uFF0C\u4E0D\u63A8\u6D4B\u804C\u4E1A\u3001\u6027\u683C\u6216\u9690\u79C1\u3002" })] }), _jsxs("section", { children: [_jsx("h4", { children: "\u7A33\u5B9A\u534F\u4F5C\u504F\u597D" }), _jsx("div", { className: "dsh-partner-memory-rows", children: profile?.preferences?.map(row) }), !profile?.preferences?.length && _jsx(CollectionEmpty, { title: "\u8FD8\u5728\u79EF\u7D2F\u7A33\u5B9A\u504F\u597D", detail: "\u53CD\u590D\u786E\u8BA4\u6216\u624B\u52A8\u9501\u5B9A\u7684\u53EF\u9760\u504F\u597D\u4F1A\u51FA\u73B0\u5728\u8FD9\u91CC\u3002" })] }), profile && _jsxs("p", { className: "dsh-partner-memory-hint", children: [profile.evidenceCount, " \u5904\u5BF9\u8BDD\u4F9D\u636E \u00B7 ", profile.lockedCount, " \u9879\u7528\u6237\u786E\u8BA4 ", _jsxs("span", { title: profile.version, children: ["\u00B7 \u753B\u50CF\u7248\u672C ", profile.version.slice(0, 8)] })] })] }), mode === 'memory' && _jsxs(_Fragment, { children: [_jsxs("p", { className: "dsh-partner-memory-hint", children: ["\u5F53\u524D\u8054\u7CFB\u4EBA\u6700\u8FD1 100 \u6761\u4E2D\uFF0C\u5339\u914D ", filtered.length, " \u6761\u3002\u70B9\u51FB\u6761\u76EE\u67E5\u770B\u4F9D\u636E\u6216\u4FEE\u6B63\u3002"] }), _jsx("div", { className: "dsh-partner-memory-rows", children: filtered.slice(0, limit).map(row) }), !filtered.length && _jsx(CollectionEmpty, { title: "\u6CA1\u6709\u5339\u914D\u7684\u8BB0\u5FC6", detail: "\u53EF\u4EE5\u5207\u6362\u72B6\u6001\u67E5\u770B\u5DF2\u5B8C\u6210\u3001\u8FC7\u671F\u6216\u88AB\u66FF\u4EE3\u7684\u5185\u5BB9\u3002" }), filtered.length > limit && _jsx("button", { type: "button", onClick: () => setLimit(value => value + 20), children: "\u518D\u663E\u793A 20 \u6761" })] }), mode === 'scenes' && _jsxs(_Fragment, { children: [_jsx("p", { className: "dsh-partner-memory-hint", children: "\u6458\u8981\u5F15\u7528\u5F53\u524D\u6709\u6548\u8BB0\u5FC6\uFF0C\u539F\u8BB0\u5FC6\u4FEE\u6B63\u540E\u540C\u6B65\u53D8\u5316\u3002\u6BCF\u65E5\u7EC8\u5BA1\u65F6\u6574\u7406\u3002" }), layers?.scenes.filter(scene => !normalized || `${scene.title} ${scene.summary}`.toLocaleLowerCase().includes(normalized)).map(scene => _jsxs("details", { className: "dsh-partner-memory-record", children: [_jsxs("summary", { children: [_jsx("strong", { children: scene.title }), _jsxs("small", { children: [scene.memoryIds.length, " \u6761\u4F9D\u636E"] })] }), _jsxs("div", { children: [_jsx("p", { children: scene.summary }), _jsx("small", { children: relativeTime(scene.updatedAt) })] })] }, scene.id)), !layers?.scenes.some(scene => !normalized || (scene.title + ' ' + scene.summary).toLocaleLowerCase().includes(normalized)) && _jsx(CollectionEmpty, { title: normalized ? "没有匹配的场景摘要" : "还没有场景摘要", detail: "\u5F00\u542F\u6BCF\u65E5\u7EC8\u5BA1\u540E\uFF0C\u4F1A\u9010\u6B65\u5C06\u76F8\u5173\u7684\u6709\u6548\u8BB0\u5FC6\u7EC4\u7EC7\u5728\u4E00\u8D77\u3002" })] }), mode === 'reflection' && _jsxs(_Fragment, { children: [_jsx("div", { className: "dsh-partner-memory-rows", children: reflections.map(day => _jsxs("button", { className: "dsh-partner-memory-row", type: "button", onClick: () => setDate(day.date), children: [_jsxs("span", { children: [_jsx("strong", { children: day.date }), _jsx("p", { children: day.summary }), _jsxs("small", { children: [day.turnCount, " \u8F6E\u4EA4\u6D41 \u00B7 ", day.completedTasks.length, " \u9879\u5B8C\u6210"] })] }), _jsx("small", { children: "\u67E5\u770B" })] }, `${day.scopeId}:${day.date}`)) }), !reflections.length && _jsx(CollectionEmpty, { title: "\u8FD8\u6CA1\u6709\u5339\u914D\u7684\u56DE\u987E", detail: "\u5B66\u4E60\u5F00\u542F\u540E\uFF0C\u5728\u540E\u53F0\u5B8C\u6210\u63D0\u70BC\u65F6\u66F4\u65B0\u3002" })] }), mode === 'history' && _jsx(HistoryView, { base: base, scopeId: scopeId, query: normalized }, scopeId), mode === 'experiences' && _jsx(ExperienceView, { items: layers?.experiences ?? [], base: base, scopeId: scopeId, changed: changed }), mode === 'graph' && _jsxs(_Fragment, { children: [graph.error && _jsxs(WorkspaceNotice, { children: [graph.error, " ", _jsx("button", { type: "button", onClick: () => { void graph.reload(); }, children: "\u91CD\u8BD5" })] }), graph.data ? _jsx(MemoryGraph, { graph: { memories: graph.data.memories.filter(item => item.scopeId === scopeId), relations: graph.data.relations.filter(item => item.scopeId === scopeId) }, profiles: collection.profiles.filter(item => item.scopeId === scopeId), query: normalized, inspect: setInspecting }) : !graph.error && _jsx(CollectionEmpty, { title: "\u6B63\u5728\u8BFB\u53D6\u5173\u7CFB\u56FE\u8C31" })] }), inspecting && _jsx(MemoryDetail, { companionId: companionId, item: inspecting, close: () => setInspecting(undefined), changed: changed }, inspecting.id), selectedDay && _jsx(WorkspaceDialog, { title: `${selectedDay.date} 每日回顾`, detail: "\u8FC7\u7A0B\u8BB0\u5F55\u4E0E\u5F53\u65E5\u603B\u7ED3\uFF0C\u4E0D\u76F4\u63A5\u4F5C\u4E3A\u957F\u671F\u4E8B\u5B9E\u3002", close: () => setDate(undefined), children: _jsx(DailyReflectionDetail, { entry: selectedDay }) })] });
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=memory-library.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-library.js","sourceRoot":"","sources":["../../../src/ui/memory/memory-library.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type CompanionView, type PartnerSnapshot } from '../../client-api.js';
|
|
2
|
+
export declare function MemoryPanel({ companion, snapshot, openSession, startSession, renewSession, onChanged }: {
|
|
3
|
+
companion: CompanionView;
|
|
4
|
+
snapshot: PartnerSnapshot;
|
|
5
|
+
openSession(routeId: string, sessionId: string): Promise<void>;
|
|
6
|
+
startSession(companionId: string): Promise<void>;
|
|
7
|
+
renewSession(routeId: string): Promise<void>;
|
|
8
|
+
onChanged(): Promise<void>;
|
|
9
|
+
}): JSX.Element;
|
|
10
|
+
//# sourceMappingURL=memory-panel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-panel.d.ts","sourceRoot":"","sources":["../../../src/ui/memory/memory-panel.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAM,KAAK,aAAa,EAAE,KAAK,eAAe,EAAC,MAAM,qBAAqB,CAAA;AAOjF,wBAAgB,WAAW,CAAC,EAAC,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,SAAS,EAAC,EAAE;IACrG,SAAS,EAAE,aAAa,CAAC;IAAC,QAAQ,EAAE,eAAe,CAAC;IAAC,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpH,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAAC,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAAC,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CAC3H,GAAG,GAAG,CAAC,OAAO,CAoCd"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { jsx as _jsx, 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 { MemoryLibrary } from './memory-library.js';
|
|
7
|
+
import { AutomationSettings } from './automation-settings.js';
|
|
8
|
+
import { useMemoryResource } from './use-memory-resource.js';
|
|
9
|
+
export function MemoryPanel({ companion, snapshot, openSession, startSession, renewSession, onChanged }) {
|
|
10
|
+
const sessions = snapshot.sessions.filter(item => item.companionId === companion.id).sort((a, b) => Number(b.kind === 'local') - Number(a.kind === 'local') || b.lastMessageAt - a.lastMessageAt);
|
|
11
|
+
const [requestedScope, setScope] = useState('');
|
|
12
|
+
const [settings, setSettings] = useState(false);
|
|
13
|
+
const [busy, setBusy] = useState(false);
|
|
14
|
+
const lock = useRef(false);
|
|
15
|
+
const [error, setError] = useState();
|
|
16
|
+
const [notice, setNotice] = useState();
|
|
17
|
+
const base = `/companions/${encodeURIComponent(companion.id)}`;
|
|
18
|
+
const initialScope = sessions[0] ? `${sessions[0].channelId}:${sessions[0].userId}` : '';
|
|
19
|
+
const requested = requestedScope || initialScope;
|
|
20
|
+
const collection = useMemoryResource(`${base}/memory${requested ? `?${new URLSearchParams({ scopeId: requested })}` : ''}`, 15_000);
|
|
21
|
+
const scopeId = requested || collection.data?.profiles[0]?.scopeId || '';
|
|
22
|
+
const layers = useMemoryResource(scopeId ? `${base}/memory/layers?${new URLSearchParams({ scopeId })}` : undefined, 15_000);
|
|
23
|
+
const reload = async () => { await Promise.all([collection.reload(), layers.reload()]); };
|
|
24
|
+
const run = async (action, success) => {
|
|
25
|
+
if (lock.current)
|
|
26
|
+
return;
|
|
27
|
+
lock.current = true;
|
|
28
|
+
setBusy(true);
|
|
29
|
+
setError(undefined);
|
|
30
|
+
setNotice(undefined);
|
|
31
|
+
try {
|
|
32
|
+
await action();
|
|
33
|
+
setNotice(success);
|
|
34
|
+
await reload();
|
|
35
|
+
}
|
|
36
|
+
catch (reason) {
|
|
37
|
+
setError(errorMessage(reason));
|
|
38
|
+
}
|
|
39
|
+
finally {
|
|
40
|
+
lock.current = false;
|
|
41
|
+
setBusy(false);
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
const retries = layers.data?.jobs.filter(job => job.status === 'retrying').length ?? 0;
|
|
45
|
+
const scopes = collection.data?.profiles ?? [];
|
|
46
|
+
return _jsxs("div", { className: "dsh-partner-memory-page", children: [_jsx(WorkspaceHero, { eyebrow: "MEMORY & CONTEXT", title: "\u8BB0\u5FC6\u5E93", detail: "\u77E5\u9053\u8BB0\u4F4F\u4E86\u4EC0\u4E48\u3001\u4F9D\u636E\u662F\u4EC0\u4E48\uFF0C\u4E5F\u80FD\u7EA0\u6B63\u5DF2\u7ECF\u8FC7\u65F6\u7684\u7406\u89E3\u3002", actions: _jsx("button", { type: "button", onClick: () => setSettings(true), children: "\u8BB0\u5FC6\u8BBE\u7F6E" }) }), _jsxs("div", { className: "dsh-partner-memory-context", children: [_jsxs("label", { children: [_jsx("span", { children: "\u5F53\u524D\u8054\u7CFB\u4EBA" }), _jsxs("select", { "aria-label": "\u5F53\u524D\u8054\u7CFB\u4EBA", value: scopeId, onChange: event => { setScope(event.target.value); setError(undefined); setNotice(undefined); }, children: [!scopes.length && _jsx("option", { value: scopeId, children: scopeId ? '本地对话' : '暂无联系人' }), scopes.map(profile => _jsx("option", { value: profile.scopeId, children: sessions.some(session => session.kind === 'local' && `${session.channelId}:${session.userId}` === profile.scopeId) ? '本地对话' : profile.label }, profile.scopeId))] })] }), _jsx("span", { className: "dsh-partner-memory-badge", children: companion.automation.memory.enabled ? '学习已开启' : '学习已暂停' }), _jsx("button", { type: "button", "aria-label": "\u5237\u65B0\u8BB0\u5FC6", disabled: collection.loading || layers.loading, onClick: () => { void reload(); }, children: _jsx(IconRefreshOutline16, { size: 16 }) })] }), (error || collection.error || layers.error) && _jsx(WorkspaceNotice, { children: error || collection.error || layers.error }), notice && _jsx(WorkspaceNotice, { kind: "success", children: notice }), !!layers.data?.jobs.length && _jsxs("details", { className: "dsh-partner-memory-jobs", children: [_jsxs("summary", { children: [retries ? `${retries} 项等待重试` : `${layers.data.jobs.length} 项正在排队整理`, _jsx("small", { children: "\u4E0D\u5F71\u54CD\u7EE7\u7EED\u804A\u5929" })] }), _jsx("div", { children: layers.data.jobs.slice(0, 10).map(job => _jsxs("div", { children: [_jsx("span", { children: job.status === 'processing' ? '正在整理' : job.status === 'retrying' ? `已重试 ${job.attempts} 次 · 下次 ${new Date(job.nextAt).toLocaleTimeString()}` : '等待整理' }), job.status !== 'processing' && _jsx("button", { type: "button", disabled: busy, onClick: () => { void run(async () => { await api(`${base}/memory/jobs/${encodeURIComponent(job.id)}?${new URLSearchParams({ scopeId })}`, { method: 'POST' }); }, '已安排重试'); }, children: "\u7ACB\u5373\u91CD\u8BD5" })] }, job.id)) })] }), !collection.data ? _jsx(CollectionEmpty, { title: collection.error ? '记忆读取失败' : '正在读取记忆', action: collection.error ? _jsx("button", { type: "button", onClick: () => { void reload(); }, children: "\u91CD\u8BD5" }) : undefined }) : _jsx(MemoryLibrary, { companionId: companion.id, scopeId: scopeId, collection: collection.data, layers: layers.data, changed: reload }, scopeId), _jsxs("details", { className: "dsh-partner-memory-record is-sessions", children: [_jsxs("summary", { children: ["\u4F19\u4F34\u4F1A\u8BDD ", _jsx("small", { children: sessions.length })] }), _jsxs("div", { children: [sessions.map(session => _jsxs("div", { className: "dsh-partner-memory-session", children: [_jsxs("span", { children: [_jsx("strong", { children: session.kind === 'local' ? '本地对话' : `渠道联系人 · ${session.userId.slice(-6)}` }), _jsx("small", { children: session.archived ? '已归档' : '可继续对话' })] }), _jsx("button", { type: "button", disabled: busy, onClick: () => { void run(() => session.archived ? renewSession(session.id) : openSession(session.id, session.sessionId), session.archived ? '新会话已创建' : '会话已打开'); }, children: session.archived ? '新建会话' : '打开会话' })] }, session.id)), !sessions.length && _jsx("button", { type: "button", disabled: busy, onClick: () => { void run(() => startSession(companion.id), '会话已创建'); }, children: "\u5F00\u59CB\u5BF9\u8BDD" })] })] }), settings && _jsx(AutomationSettings, { companion: companion, kind: "memory", close: () => setSettings(false), onChanged: async () => { await onChanged(); await reload(); } })] });
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=memory-panel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-panel.js","sourceRoot":"","sources":["../../../src/ui/memory/memory-panel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { MemoryView, DailyReflectionView, UserProfileSnapshotView } from '../../client-api.js';
|
|
2
|
+
export interface MemoryCollection {
|
|
3
|
+
memories: MemoryView[];
|
|
4
|
+
reflections: DailyReflectionView[];
|
|
5
|
+
profiles: UserProfileSnapshotView[];
|
|
6
|
+
}
|
|
7
|
+
export interface SceneView {
|
|
8
|
+
id: string;
|
|
9
|
+
title: string;
|
|
10
|
+
summary: string;
|
|
11
|
+
memoryIds: string[];
|
|
12
|
+
updatedAt: number;
|
|
13
|
+
}
|
|
14
|
+
export interface ExperienceView {
|
|
15
|
+
id: string;
|
|
16
|
+
title: string;
|
|
17
|
+
steps: string[];
|
|
18
|
+
evidence: Array<{
|
|
19
|
+
turnId: string;
|
|
20
|
+
quote: string;
|
|
21
|
+
}>;
|
|
22
|
+
version: string;
|
|
23
|
+
status: 'draft' | 'approved' | 'rejected';
|
|
24
|
+
updatedAt: number;
|
|
25
|
+
}
|
|
26
|
+
export interface MemoryLayers {
|
|
27
|
+
scenes: SceneView[];
|
|
28
|
+
experiences: ExperienceView[];
|
|
29
|
+
jobs: Array<{
|
|
30
|
+
id: string;
|
|
31
|
+
status: string;
|
|
32
|
+
attempts: number;
|
|
33
|
+
nextAt: number;
|
|
34
|
+
}>;
|
|
35
|
+
}
|
|
36
|
+
export interface HistoryTurn {
|
|
37
|
+
id: string;
|
|
38
|
+
at: number;
|
|
39
|
+
user: string;
|
|
40
|
+
assistant: string;
|
|
41
|
+
}
|
|
42
|
+
export type MemoryMode = 'profile' | 'memory' | 'reflection' | 'history' | 'scenes' | 'experiences' | 'graph';
|
|
43
|
+
export declare const MEMORY_STATUS: Record<MemoryView['status'], string>;
|
|
44
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/ui/memory/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,UAAU,EAAE,mBAAmB,EAAE,uBAAuB,EAAC,MAAM,qBAAqB,CAAA;AACjG,MAAM,WAAW,gBAAgB;IAAE,QAAQ,EAAE,UAAU,EAAE,CAAC;IAAC,WAAW,EAAE,mBAAmB,EAAE,CAAC;IAAC,QAAQ,EAAE,uBAAuB,EAAE,CAAA;CAAC;AACnI,MAAM,WAAW,SAAS;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,EAAE,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAC;AAC/G,MAAM,WAAW,cAAc;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,QAAQ,EAAE,KAAK,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAC,CAAC,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,GAAG,UAAU,GAAG,UAAU,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAC;AAC7M,MAAM,WAAW,YAAY;IAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IAAC,WAAW,EAAE,cAAc,EAAE,CAAC;IAAC,IAAI,EAAE,KAAK,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAC,CAAC,CAAA;CAAC;AAC/J,MAAM,WAAW,WAAW;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAC;AACtF,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,QAAQ,GAAG,YAAY,GAAG,SAAS,GAAG,QAAQ,GAAG,aAAa,GAAG,OAAO,CAAA;AAC7G,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAuE,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/ui/memory/types.ts"],"names":[],"mappings":"AAOA,MAAM,CAAC,MAAM,aAAa,GAAyC,EAAC,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAC,CAAA"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/** Only the latest request may publish. Polls pause while the page is hidden,
|
|
2
|
+
* never overlap, and never reset an editor's local draft. */
|
|
3
|
+
export declare function useMemoryResource<T>(path: string | undefined, pollMs?: number): {
|
|
4
|
+
data: T | undefined;
|
|
5
|
+
error: string | undefined;
|
|
6
|
+
loading: boolean;
|
|
7
|
+
reload: () => Promise<void>;
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=use-memory-resource.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-memory-resource.d.ts","sourceRoot":"","sources":["../../../src/ui/memory/use-memory-resource.ts"],"names":[],"mappings":"AAIA;6DAC6D;AAC7D,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,MAAM,SAAI;;;;kBAMlC,OAAO,CAAC,IAAI,CAAC;EA4BnD"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { useCallback, useEffect, useRef, useState } from 'react';
|
|
2
|
+
import { api } from '../../client-api.js';
|
|
3
|
+
import { errorMessage } from '../workspace-components.js';
|
|
4
|
+
/** Only the latest request may publish. Polls pause while the page is hidden,
|
|
5
|
+
* never overlap, and never reset an editor's local draft. */
|
|
6
|
+
export function useMemoryResource(path, pollMs = 0) {
|
|
7
|
+
const [snapshot, setData] = useState();
|
|
8
|
+
const [error, setError] = useState();
|
|
9
|
+
const [loading, setLoading] = useState(false);
|
|
10
|
+
const sequence = useRef(0);
|
|
11
|
+
const request = useRef();
|
|
12
|
+
const reload = useCallback(async () => {
|
|
13
|
+
if (!path)
|
|
14
|
+
return;
|
|
15
|
+
request.current?.abort();
|
|
16
|
+
const controller = new AbortController();
|
|
17
|
+
request.current = controller;
|
|
18
|
+
const revision = ++sequence.current;
|
|
19
|
+
setLoading(true);
|
|
20
|
+
try {
|
|
21
|
+
const result = await api(path, { signal: controller.signal });
|
|
22
|
+
if (revision === sequence.current && !controller.signal.aborted) {
|
|
23
|
+
setData({ path, value: result });
|
|
24
|
+
setError(undefined);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
catch (reason) {
|
|
28
|
+
if (revision === sequence.current && !controller.signal.aborted)
|
|
29
|
+
setError(errorMessage(reason));
|
|
30
|
+
}
|
|
31
|
+
finally {
|
|
32
|
+
if (revision === sequence.current)
|
|
33
|
+
setLoading(false);
|
|
34
|
+
}
|
|
35
|
+
}, [path]);
|
|
36
|
+
useEffect(() => {
|
|
37
|
+
setData(undefined);
|
|
38
|
+
setError(undefined);
|
|
39
|
+
setLoading(Boolean(path));
|
|
40
|
+
let disposed = false;
|
|
41
|
+
let timer;
|
|
42
|
+
const schedule = () => { if (timer)
|
|
43
|
+
clearTimeout(timer); if (!disposed && pollMs > 0)
|
|
44
|
+
timer = setTimeout(() => { void tick(); }, pollMs); };
|
|
45
|
+
const tick = async () => {
|
|
46
|
+
if (disposed)
|
|
47
|
+
return;
|
|
48
|
+
if (!document.hidden)
|
|
49
|
+
await reload();
|
|
50
|
+
schedule();
|
|
51
|
+
};
|
|
52
|
+
const visible = () => { if (!document.hidden) {
|
|
53
|
+
if (timer)
|
|
54
|
+
clearTimeout(timer);
|
|
55
|
+
void tick();
|
|
56
|
+
} };
|
|
57
|
+
void reload().then(schedule);
|
|
58
|
+
if (pollMs)
|
|
59
|
+
document.addEventListener('visibilitychange', visible);
|
|
60
|
+
return () => { disposed = true; if (timer)
|
|
61
|
+
clearTimeout(timer); document.removeEventListener('visibilitychange', visible); ++sequence.current; request.current?.abort(); };
|
|
62
|
+
}, [reload, pollMs]);
|
|
63
|
+
return { data: snapshot?.path === path ? snapshot?.value : undefined, error, loading, reload };
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=use-memory-resource.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-memory-resource.js","sourceRoot":"","sources":["../../../src/ui/memory/use-memory-resource.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lemoncat7/dsh-partner",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.12.0",
|
|
4
4
|
"description": "Long-lived AI companions with WeChat channel routing for DeepSeek Harness",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"deepseek-harness",
|
|
@@ -31,6 +31,8 @@
|
|
|
31
31
|
"lib/**/*.map",
|
|
32
32
|
"cordis.patch.yml",
|
|
33
33
|
"docs/architecture.md",
|
|
34
|
+
"docs/memory-quality.md",
|
|
35
|
+
"docs/releases/1.12.0.md",
|
|
34
36
|
"docs/THIRD_PARTY_LICENSES.md",
|
|
35
37
|
"README.md",
|
|
36
38
|
"LICENSE"
|