dsh-daoing-memory 0.1.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/LICENSE +21 -0
- package/README.md +91 -0
- package/README.zh-CN.md +91 -0
- package/cordis.patch.yml +22 -0
- package/lib/client.js +10339 -0
- package/lib/client.js.map +1 -0
- package/lib/index.js +3138 -0
- package/lib/invariant.js +33 -0
- package/lib/tools.js +1472 -0
- package/lib/typert.host.d.ts +3 -0
- package/lib/typert.host.js +4058 -0
- package/lib/typert.remote-client.d.ts +149 -0
- package/lib/typert.remote-client.d.ts.map +1 -0
- package/lib/typert.remote-client.js +3167 -0
- package/lib/types/client/ExperiencePage.d.ts +15 -0
- package/lib/types/client/ExperiencePage.d.ts.map +1 -0
- package/lib/types/client/ExperiencePage.js +117 -0
- package/lib/types/client/ExperiencePage.js.map +1 -0
- package/lib/types/client/FactDiaryPage.d.ts +17 -0
- package/lib/types/client/FactDiaryPage.d.ts.map +1 -0
- package/lib/types/client/FactDiaryPage.js +155 -0
- package/lib/types/client/FactDiaryPage.js.map +1 -0
- package/lib/types/client/HumanOpsPage.d.ts +16 -0
- package/lib/types/client/HumanOpsPage.d.ts.map +1 -0
- package/lib/types/client/HumanOpsPage.js +208 -0
- package/lib/types/client/HumanOpsPage.js.map +1 -0
- package/lib/types/client/LedgerPage.d.ts +13 -0
- package/lib/types/client/LedgerPage.d.ts.map +1 -0
- package/lib/types/client/LedgerPage.js +113 -0
- package/lib/types/client/LedgerPage.js.map +1 -0
- package/lib/types/client/MemoryNavSection.d.ts +20 -0
- package/lib/types/client/MemoryNavSection.d.ts.map +1 -0
- package/lib/types/client/MemoryNavSection.js +23 -0
- package/lib/types/client/MemoryNavSection.js.map +1 -0
- package/lib/types/client/Workbench.d.ts +23 -0
- package/lib/types/client/Workbench.d.ts.map +1 -0
- package/lib/types/client/Workbench.js +140 -0
- package/lib/types/client/Workbench.js.map +1 -0
- package/lib/types/client/actions.d.ts +165 -0
- package/lib/types/client/actions.d.ts.map +1 -0
- package/lib/types/client/actions.js +51 -0
- package/lib/types/client/actions.js.map +1 -0
- package/lib/types/client/index.d.ts +24 -0
- package/lib/types/client/index.d.ts.map +1 -0
- package/lib/types/client/index.js +103 -0
- package/lib/types/client/index.js.map +1 -0
- package/lib/types/client/navStore.d.ts +45 -0
- package/lib/types/client/navStore.d.ts.map +1 -0
- package/lib/types/client/navStore.js +36 -0
- package/lib/types/client/navStore.js.map +1 -0
- package/lib/types/core.d.ts +195 -0
- package/lib/types/core.d.ts.map +1 -0
- package/lib/types/core.js +1304 -0
- package/lib/types/core.js.map +1 -0
- package/lib/types/index.d.ts +71 -0
- package/lib/types/index.d.ts.map +1 -0
- package/lib/types/index.js +97 -0
- package/lib/types/index.js.map +1 -0
- package/lib/types/invariant.d.ts +21 -0
- package/lib/types/invariant.d.ts.map +1 -0
- package/lib/types/invariant.js +33 -0
- package/lib/types/invariant.js.map +1 -0
- package/lib/types/service.d.ts +130 -0
- package/lib/types/service.d.ts.map +1 -0
- package/lib/types/service.js +417 -0
- package/lib/types/service.js.map +1 -0
- package/lib/types/store.d.ts +244 -0
- package/lib/types/store.d.ts.map +1 -0
- package/lib/types/store.js +864 -0
- package/lib/types/store.js.map +1 -0
- package/lib/types/tools.d.ts +25 -0
- package/lib/types/tools.d.ts.map +1 -0
- package/lib/types/tools.js +1144 -0
- package/lib/types/tools.js.map +1 -0
- package/lib/types/types.d.ts +836 -0
- package/lib/types/types.d.ts.map +1 -0
- package/lib/types/types.js +8 -0
- package/lib/types/types.js.map +1 -0
- package/package.json +106 -0
- package/skill/memory-extraction.md +62 -0
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* Memory workbench takeover: covers the frame area to the right of the
|
|
4
|
+
* sidebar while a monitoring page is selected in the left-sidebar memory nav
|
|
5
|
+
* group. The header title follows the selected page; opening a session row
|
|
6
|
+
* clears the selection and returns to the native conversation view. All human
|
|
7
|
+
* mutations go through the audited Remote callbacks.
|
|
8
|
+
*/
|
|
9
|
+
import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
10
|
+
import { bindMemoryActions } from "./actions.js";
|
|
11
|
+
import { MEMORY_NAV_ITEMS } from "./navStore.js";
|
|
12
|
+
import { ExperiencePage } from "./ExperiencePage.js";
|
|
13
|
+
import { FactDiaryPage } from "./FactDiaryPage.js";
|
|
14
|
+
import { LedgerPage } from "./LedgerPage.js";
|
|
15
|
+
import { HumanOpsPage } from "./HumanOpsPage.js";
|
|
16
|
+
import css from './Workbench.module.css';
|
|
17
|
+
/** Format an epoch-ms timestamp as a compact local string. */
|
|
18
|
+
export function formatTs(ts) {
|
|
19
|
+
return new Date(ts).toLocaleString('zh-CN', { hour12: false });
|
|
20
|
+
}
|
|
21
|
+
/** Confirmation prompt with an audited reason; resolves undefined when cancelled. */
|
|
22
|
+
export function promptReason(action) {
|
|
23
|
+
const reason = window.prompt(`「${action}」将写入审计账本。请填写原因(必填):`);
|
|
24
|
+
if (reason === null)
|
|
25
|
+
return undefined;
|
|
26
|
+
const trimmed = reason.trim();
|
|
27
|
+
if (trimmed === '') {
|
|
28
|
+
window.alert('原因是必填项:人工操作必须可审计。');
|
|
29
|
+
return undefined;
|
|
30
|
+
}
|
|
31
|
+
return trimmed;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* The workbench entry component. Renders nothing unless a monitoring page is
|
|
35
|
+
* selected in the nav store and a current session exists (the Remote face is
|
|
36
|
+
* session-bound).
|
|
37
|
+
*/
|
|
38
|
+
export function MemoryWorkbench(props) {
|
|
39
|
+
const nav = props.useStore(s => s);
|
|
40
|
+
const sessionList = props.useSessions(s => s);
|
|
41
|
+
const sessionId = sessionList.current;
|
|
42
|
+
const [info, setInfo] = useState(null);
|
|
43
|
+
const [stats, setStats] = useState(null);
|
|
44
|
+
const [sidebarWidth, setSidebarWidth] = useState(260);
|
|
45
|
+
const rootRef = useRef(null);
|
|
46
|
+
const fetchInfo = props.workbenchInfo;
|
|
47
|
+
const fetchStats = props.stats;
|
|
48
|
+
useEffect(() => {
|
|
49
|
+
if (sessionId === undefined)
|
|
50
|
+
return;
|
|
51
|
+
let cancelled = false;
|
|
52
|
+
void fetchInfo(sessionId).then((value) => {
|
|
53
|
+
if (!cancelled)
|
|
54
|
+
setInfo(value);
|
|
55
|
+
}).catch(() => { });
|
|
56
|
+
return () => { cancelled = true; };
|
|
57
|
+
}, [fetchInfo, sessionId]);
|
|
58
|
+
const refreshStats = useCallback(() => {
|
|
59
|
+
if (sessionId === undefined)
|
|
60
|
+
return;
|
|
61
|
+
void fetchStats(sessionId).then(setStats).catch(() => { });
|
|
62
|
+
}, [fetchStats, sessionId]);
|
|
63
|
+
useEffect(() => {
|
|
64
|
+
if (info === null)
|
|
65
|
+
return;
|
|
66
|
+
refreshStats();
|
|
67
|
+
const timer = setInterval(refreshStats, 15000);
|
|
68
|
+
return () => { clearInterval(timer); };
|
|
69
|
+
}, [info, refreshStats, nav.page]);
|
|
70
|
+
const active = nav.page !== null && info !== null && sessionId !== undefined;
|
|
71
|
+
// Opening a session returns to the native conversation view: clear the nav
|
|
72
|
+
// selection whenever the current session changes. Never fires on mount —
|
|
73
|
+
// the store survives remounts, so the initial ref value is the baseline.
|
|
74
|
+
// Clicking outside the takeover (a session row, New Session, settings —
|
|
75
|
+
// anything but the memory nav group and the panel itself) returns to the
|
|
76
|
+
// native view. Click-outside is the deterministic dismissal signal: opening
|
|
77
|
+
// an already-current session reuses it without moving `current`, so a
|
|
78
|
+
// session-change watch alone would miss the gesture.
|
|
79
|
+
useEffect(() => {
|
|
80
|
+
if (!active)
|
|
81
|
+
return;
|
|
82
|
+
const onPointerDown = (event) => {
|
|
83
|
+
const target = event.target;
|
|
84
|
+
if (!(target instanceof Element))
|
|
85
|
+
return;
|
|
86
|
+
if (target.closest('[data-memory-workbench]') !== null)
|
|
87
|
+
return;
|
|
88
|
+
if (target.closest('[data-memory-nav]') !== null)
|
|
89
|
+
return;
|
|
90
|
+
props.actions.clear();
|
|
91
|
+
};
|
|
92
|
+
window.addEventListener('pointerdown', onPointerDown, true);
|
|
93
|
+
return () => { window.removeEventListener('pointerdown', onPointerDown, true); };
|
|
94
|
+
}, [active, props.actions]);
|
|
95
|
+
// Belt and braces: a genuine current-session change (quick-open, another
|
|
96
|
+
// tab's session) also returns to the conversation. The ref baseline keeps
|
|
97
|
+
// the mount-time restore of the persisted selection from clearing.
|
|
98
|
+
const prevSession = useRef(sessionId);
|
|
99
|
+
useEffect(() => {
|
|
100
|
+
if (prevSession.current === sessionId)
|
|
101
|
+
return;
|
|
102
|
+
prevSession.current = sessionId;
|
|
103
|
+
props.actions.clear();
|
|
104
|
+
}, [sessionId, props.actions]);
|
|
105
|
+
// Measure the sidebar column so the panel starts exactly where it ends. The
|
|
106
|
+
// slot renderer wraps each entry in its own div, so walk up to the overlay
|
|
107
|
+
// layer (the stable data-shell-overlay hook) and take the frame's first
|
|
108
|
+
// child — the sidebar column.
|
|
109
|
+
useEffect(() => {
|
|
110
|
+
if (!active)
|
|
111
|
+
return;
|
|
112
|
+
const root = rootRef.current;
|
|
113
|
+
if (root === null)
|
|
114
|
+
return;
|
|
115
|
+
const layer = root.closest('[data-shell-overlay]');
|
|
116
|
+
const frame = layer?.parentElement ?? null;
|
|
117
|
+
const sidebar = frame?.firstElementChild ?? null;
|
|
118
|
+
if (!(sidebar instanceof HTMLElement))
|
|
119
|
+
return;
|
|
120
|
+
const update = () => { setSidebarWidth(sidebar.getBoundingClientRect().width); };
|
|
121
|
+
update();
|
|
122
|
+
const observer = new ResizeObserver(update);
|
|
123
|
+
observer.observe(sidebar);
|
|
124
|
+
return () => { observer.disconnect(); };
|
|
125
|
+
}, [active]);
|
|
126
|
+
// The pages call the session-free face; bind once per current session. The
|
|
127
|
+
// injected Remote callbacks are minted once per plugin activation, so only a
|
|
128
|
+
// session change rebuilds the bound face (a remount rebuilds the component).
|
|
129
|
+
const bound = useMemo(() => (sessionId === undefined ? null : bindMemoryActions(props, sessionId)),
|
|
130
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps -- stable injected face, see comment above
|
|
131
|
+
[sessionId]);
|
|
132
|
+
if (!active || info === null || bound === null)
|
|
133
|
+
return null;
|
|
134
|
+
const current = MEMORY_NAV_ITEMS.find(item => item.key === nav.page);
|
|
135
|
+
const title = current?.label ?? info.workspaceTitle;
|
|
136
|
+
return (_jsxs("div", { ref: rootRef, className: css.panel, style: { left: `${String(sidebarWidth)}px` }, "data-memory-workbench": true, children: [_jsxs("header", { className: css.header, children: [_jsxs("div", { className: css.titleBlock, children: [_jsx("span", { className: css.title, children: title }), _jsx("span", { className: css.subtitle, children: "\u81EA\u8FDB\u5316\u8BB0\u5FC6 \u00B7 \u751F\u7528\u4FEE\u8BB0 \u00B7 \u5168\u5C40\u5171\u4EAB\u8BB0\u5FC6\u5E93" })] }), _jsx("div", { className: css.statline, children: stats === null
|
|
137
|
+
? '加载中…'
|
|
138
|
+
: `经验 ${String(stats.experiences.total)}(live ${String(stats.experiences.byStatus.live)} / 隔离 ${String(stats.experiences.byStatus.challenged)})· 画像 ${String(stats.facts.current)} · 日记 ${String(stats.diary.total)}(待提取 ${String(stats.diary.unextracted)})· 账本 ${String(stats.ledgerBlocks)} 块` })] }), _jsxs("main", { className: css.body, children: [nav.page === 'experience' && _jsx(ExperiencePage, { actions: bound, onChanged: refreshStats }), nav.page === 'fact' && _jsx(FactDiaryPage, { actions: bound, onChanged: refreshStats }), nav.page === 'ledger' && _jsx(LedgerPage, { actions: bound }), nav.page === 'human' && _jsx(HumanOpsPage, { actions: bound, onChanged: refreshStats })] })] }));
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=Workbench.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Workbench.js","sourceRoot":"","sources":["../../../src/client/Workbench.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The injected business face of the memory workbench entry: plain data
|
|
3
|
+
* callbacks over the memory Remote namespace. Live framework data (sessions,
|
|
4
|
+
* workspaces) arrives through the standard props shares instead.
|
|
5
|
+
*
|
|
6
|
+
* Two contracts live here. `MemoryWorkbenchActions` is the page-facing face:
|
|
7
|
+
* every callback is already bound to the current session. `MemoryRemoteActions`
|
|
8
|
+
* is the slot-injected face: the generated memory Remote requires the session
|
|
9
|
+
* id as the first wire argument (the host resolves it back to the Agent), so
|
|
10
|
+
* each callback takes it explicitly and `bindMemoryActions` curries it away
|
|
11
|
+
* once the workbench knows the current session.
|
|
12
|
+
*/
|
|
13
|
+
import type { SessionId } from '@deepseek-ai/dsh-client-runtime/client';
|
|
14
|
+
import type { ConcernTree, ConsolidateRequest, ConsolidateResult, DiaryEntry, ExperienceListFilter, ExperienceSnapshot, ExtractionRecord, FactEntry, HumanAddExperienceRequest, HumanAddFactRequest, HumanAckDiaryRequest, HumanConfirmFactRequest, HumanDeleteConcernRequest, HumanDeleteExperienceRequest, HumanDeleteFactRequest, HumanEditExperienceRequest, HumanEditFactRequest, HumanPinRequest, HumanReleaseColdRequest, HumanSetConcernStatusRequest, IngestRequest, IngestResult, LedgerBlock, LedgerIntegrityResult, LedgerQueryRequest, MemoryExport, MemoryStats, MemoryWorkbenchInfo, RollbackExperienceRequest } from '../types.ts';
|
|
15
|
+
/** Callbacks the workbench pages call; each one lands in the audited ledger. */
|
|
16
|
+
export interface MemoryWorkbenchActions {
|
|
17
|
+
/** The workbench descriptor (workspace matching + config view). */
|
|
18
|
+
workbenchInfo: () => Promise<MemoryWorkbenchInfo>;
|
|
19
|
+
/** Aggregated library statistics. */
|
|
20
|
+
stats: () => Promise<MemoryStats>;
|
|
21
|
+
/** Experience revisions by filter. */
|
|
22
|
+
listExperiences: (filter: ExperienceListFilter) => Promise<ExperienceSnapshot[]>;
|
|
23
|
+
/** Every revision of one family (superseded index for rollback). */
|
|
24
|
+
family: (id: string) => Promise<ExperienceSnapshot[]>;
|
|
25
|
+
/** Diary timeline (007 §2: server-side pagination, newest first). */
|
|
26
|
+
listDiary: (limit: number, offset: number, onlyUnextracted: boolean) => Promise<DiaryEntry[]>;
|
|
27
|
+
/** Several diary entries by id (008 Path A: fact→diary provenance). */
|
|
28
|
+
getDiaryByIds: (ids: string[]) => Promise<DiaryEntry[]>;
|
|
29
|
+
/** Fact versions (008 §3: server-side pagination). */
|
|
30
|
+
listFacts: (category: string, includeHistory: boolean, limit: number, offset: number) => Promise<FactEntry[]>;
|
|
31
|
+
/** Count facts matching the filter (008 §3: pagination total). */
|
|
32
|
+
listFactsCount: (category: string, includeHistory: boolean) => Promise<number>;
|
|
33
|
+
/** 关心事项 trees (top-level + discussion loop) (010 §D: filter + pagination). */
|
|
34
|
+
listConcerns: (kind: string, status: string, limit: number, offset: number) => Promise<ConcernTree[]>;
|
|
35
|
+
/** Count top-level concerns matching the filter (010 §D: pagination total). */
|
|
36
|
+
listConcernsCount: (kind: string, status: string) => Promise<number>;
|
|
37
|
+
/** Extraction runs (008 §3: server-side pagination). */
|
|
38
|
+
extractionLog: (limit: number, offset: number) => Promise<ExtractionRecord[]>;
|
|
39
|
+
/** Total extraction runs (008 §3: pagination total). */
|
|
40
|
+
extractionLogCount: () => Promise<number>;
|
|
41
|
+
/** Apply a consolidation run: merge related experiences (008 §1). */
|
|
42
|
+
consolidate: (request: ConsolidateRequest) => Promise<ConsolidateResult>;
|
|
43
|
+
/** Whether a consolidation run is due (008 §1). */
|
|
44
|
+
consolidationDue: () => Promise<{
|
|
45
|
+
due: boolean;
|
|
46
|
+
lastTs: number;
|
|
47
|
+
newSince: number;
|
|
48
|
+
hoursSince: number;
|
|
49
|
+
}>;
|
|
50
|
+
/** Ledger query (newest first). */
|
|
51
|
+
ledgerQuery: (request: LedgerQueryRequest) => Promise<LedgerBlock[]>;
|
|
52
|
+
/** Count ledger blocks matching a filter (007 §2 pagination). */
|
|
53
|
+
ledgerQueryCount: (request: LedgerQueryRequest) => Promise<number>;
|
|
54
|
+
/** Verify the ledger hash chain. */
|
|
55
|
+
verifyLedger: () => Promise<LedgerIntegrityResult>;
|
|
56
|
+
/** Full library export (JSON download for experiments/migration). */
|
|
57
|
+
exportLibrary: () => Promise<MemoryExport>;
|
|
58
|
+
/** Human pin/unpin. */
|
|
59
|
+
humanPin: (request: HumanPinRequest) => Promise<ExperienceSnapshot>;
|
|
60
|
+
/** Human delete (tombstone + ledger fingerprint). */
|
|
61
|
+
humanDeleteExperience: (request: HumanDeleteExperienceRequest) => Promise<void>;
|
|
62
|
+
/** Human edit of the active revision. */
|
|
63
|
+
humanEditExperience: (request: HumanEditExperienceRequest) => Promise<ExperienceSnapshot>;
|
|
64
|
+
/** Human injection in the fixed experience format. */
|
|
65
|
+
humanAddExperience: (request: HumanAddExperienceRequest) => Promise<ExperienceSnapshot>;
|
|
66
|
+
/** Human authority (V2): promote a candidate straight to live. */
|
|
67
|
+
humanPromote: (id: string, reason: string) => Promise<ExperienceSnapshot>;
|
|
68
|
+
/** Human rollback to a superseded revision. */
|
|
69
|
+
humanRollback: (request: RollbackExperienceRequest) => Promise<ExperienceSnapshot>;
|
|
70
|
+
/** Human fact add. */
|
|
71
|
+
humanAddFact: (request: HumanAddFactRequest) => Promise<FactEntry>;
|
|
72
|
+
/** Human fact edit. */
|
|
73
|
+
humanEditFact: (request: HumanEditFactRequest) => Promise<FactEntry>;
|
|
74
|
+
/** Human fact delete (tombstone). */
|
|
75
|
+
humanDeleteFact: (request: HumanDeleteFactRequest) => Promise<void>;
|
|
76
|
+
/** Human fact confirmation (lock/unlock). */
|
|
77
|
+
humanConfirmFact: (request: HumanConfirmFactRequest) => Promise<FactEntry>;
|
|
78
|
+
/** Human acknowledgement of a pending diary entry (reviewed, no fact extracted). */
|
|
79
|
+
humanAckDiary: (request: HumanAckDiaryRequest) => Promise<DiaryEntry>;
|
|
80
|
+
/** Human lifecycle change of a top-level concern (007 §2.4). */
|
|
81
|
+
humanSetConcernStatus: (request: HumanSetConcernStatusRequest) => Promise<void>;
|
|
82
|
+
/** Human delete of a concern subtree (007 §2.4). */
|
|
83
|
+
humanDeleteConcern: (request: HumanDeleteConcernRequest) => Promise<void>;
|
|
84
|
+
/** Human re-release of a cold-palace revision back to candidate (006 §3.2). */
|
|
85
|
+
humanReleaseCold: (request: HumanReleaseColdRequest) => Promise<ExperienceSnapshot>;
|
|
86
|
+
/** 摄取归一: submit extracted candidates with provenance (006 §1). */
|
|
87
|
+
ingest: (request: IngestRequest) => Promise<IngestResult>;
|
|
88
|
+
}
|
|
89
|
+
/** The slot-injected face: every callback carries the session id first. */
|
|
90
|
+
export interface MemoryRemoteActions {
|
|
91
|
+
/** The workbench descriptor (workspace matching + config view). */
|
|
92
|
+
workbenchInfo: (session: SessionId) => Promise<MemoryWorkbenchInfo>;
|
|
93
|
+
/** Aggregated library statistics. */
|
|
94
|
+
stats: (session: SessionId) => Promise<MemoryStats>;
|
|
95
|
+
/** Experience revisions by filter. */
|
|
96
|
+
listExperiences: (session: SessionId, filter: ExperienceListFilter) => Promise<ExperienceSnapshot[]>;
|
|
97
|
+
/** Every revision of one family (superseded index for rollback). */
|
|
98
|
+
family: (session: SessionId, id: string) => Promise<ExperienceSnapshot[]>;
|
|
99
|
+
/** Diary timeline (007 §2: server-side pagination, newest first). */
|
|
100
|
+
listDiary: (session: SessionId, limit: number, offset: number, onlyUnextracted: boolean) => Promise<DiaryEntry[]>;
|
|
101
|
+
/** Several diary entries by id (008 Path A: fact→diary provenance). */
|
|
102
|
+
getDiaryByIds: (session: SessionId, ids: string[]) => Promise<DiaryEntry[]>;
|
|
103
|
+
/** Fact versions (008 §3: server-side pagination). */
|
|
104
|
+
listFacts: (session: SessionId, category: string, includeHistory: boolean, limit: number, offset: number) => Promise<FactEntry[]>;
|
|
105
|
+
/** Count facts matching the filter (008 §3: pagination total). */
|
|
106
|
+
listFactsCount: (session: SessionId, category: string, includeHistory: boolean) => Promise<number>;
|
|
107
|
+
/** 关心事项 trees (top-level + discussion loop) (010 §D: filter + pagination). */
|
|
108
|
+
listConcerns: (session: SessionId, kind: string, status: string, limit: number, offset: number) => Promise<ConcernTree[]>;
|
|
109
|
+
/** Count top-level concerns matching the filter (010 §D: pagination total). */
|
|
110
|
+
listConcernsCount: (session: SessionId, kind: string, status: string) => Promise<number>;
|
|
111
|
+
/** Extraction runs (008 §3: server-side pagination). */
|
|
112
|
+
extractionLog: (session: SessionId, limit: number, offset: number) => Promise<ExtractionRecord[]>;
|
|
113
|
+
/** Total extraction runs (008 §3: pagination total). */
|
|
114
|
+
extractionLogCount: (session: SessionId) => Promise<number>;
|
|
115
|
+
/** Apply a consolidation run: merge related experiences (008 §1). */
|
|
116
|
+
consolidate: (session: SessionId, request: ConsolidateRequest) => Promise<ConsolidateResult>;
|
|
117
|
+
/** Whether a consolidation run is due (008 §1). */
|
|
118
|
+
consolidationDue: (session: SessionId) => Promise<{
|
|
119
|
+
due: boolean;
|
|
120
|
+
lastTs: number;
|
|
121
|
+
newSince: number;
|
|
122
|
+
hoursSince: number;
|
|
123
|
+
}>;
|
|
124
|
+
/** Ledger query (newest first). */
|
|
125
|
+
ledgerQuery: (session: SessionId, request: LedgerQueryRequest) => Promise<LedgerBlock[]>;
|
|
126
|
+
/** Count ledger blocks matching a filter (007 §2 pagination). */
|
|
127
|
+
ledgerQueryCount: (session: SessionId, request: LedgerQueryRequest) => Promise<number>;
|
|
128
|
+
/** Verify the ledger hash chain. */
|
|
129
|
+
verifyLedger: (session: SessionId) => Promise<LedgerIntegrityResult>;
|
|
130
|
+
/** Full library export (JSON download for experiments/migration). */
|
|
131
|
+
exportLibrary: (session: SessionId) => Promise<MemoryExport>;
|
|
132
|
+
/** Human pin/unpin. */
|
|
133
|
+
humanPin: (session: SessionId, request: HumanPinRequest) => Promise<ExperienceSnapshot>;
|
|
134
|
+
/** Human delete (tombstone + ledger fingerprint). */
|
|
135
|
+
humanDeleteExperience: (session: SessionId, request: HumanDeleteExperienceRequest) => Promise<void>;
|
|
136
|
+
/** Human edit of the active revision. */
|
|
137
|
+
humanEditExperience: (session: SessionId, request: HumanEditExperienceRequest) => Promise<ExperienceSnapshot>;
|
|
138
|
+
/** Human injection in the fixed experience format. */
|
|
139
|
+
humanAddExperience: (session: SessionId, request: HumanAddExperienceRequest) => Promise<ExperienceSnapshot>;
|
|
140
|
+
/** Human authority (V2): promote a candidate straight to live. */
|
|
141
|
+
humanPromote: (session: SessionId, id: string, reason: string) => Promise<ExperienceSnapshot>;
|
|
142
|
+
/** Human rollback to a superseded revision. */
|
|
143
|
+
humanRollback: (session: SessionId, request: RollbackExperienceRequest) => Promise<ExperienceSnapshot>;
|
|
144
|
+
/** Human fact add. */
|
|
145
|
+
humanAddFact: (session: SessionId, request: HumanAddFactRequest) => Promise<FactEntry>;
|
|
146
|
+
/** Human fact edit. */
|
|
147
|
+
humanEditFact: (session: SessionId, request: HumanEditFactRequest) => Promise<FactEntry>;
|
|
148
|
+
/** Human fact delete (tombstone). */
|
|
149
|
+
humanDeleteFact: (session: SessionId, request: HumanDeleteFactRequest) => Promise<void>;
|
|
150
|
+
/** Human fact confirmation (lock/unlock). */
|
|
151
|
+
humanConfirmFact: (session: SessionId, request: HumanConfirmFactRequest) => Promise<FactEntry>;
|
|
152
|
+
/** Human acknowledgement of a pending diary entry (reviewed, no fact extracted). */
|
|
153
|
+
humanAckDiary: (session: SessionId, request: HumanAckDiaryRequest) => Promise<DiaryEntry>;
|
|
154
|
+
/** Human lifecycle change of a top-level concern (007 §2.4). */
|
|
155
|
+
humanSetConcernStatus: (session: SessionId, request: HumanSetConcernStatusRequest) => Promise<void>;
|
|
156
|
+
/** Human delete of a concern subtree (007 §2.4). */
|
|
157
|
+
humanDeleteConcern: (session: SessionId, request: HumanDeleteConcernRequest) => Promise<void>;
|
|
158
|
+
/** Human re-release of a cold-palace revision back to candidate (006 §3.2). */
|
|
159
|
+
humanReleaseCold: (session: SessionId, request: HumanReleaseColdRequest) => Promise<ExperienceSnapshot>;
|
|
160
|
+
/** 摄取归一: submit extracted candidates with provenance (006 §1). */
|
|
161
|
+
ingest: (session: SessionId, request: IngestRequest) => Promise<IngestResult>;
|
|
162
|
+
}
|
|
163
|
+
/** Curry the session id away so the pages keep calling the bound face. */
|
|
164
|
+
export declare function bindMemoryActions(remote: MemoryRemoteActions, session: SessionId): MemoryWorkbenchActions;
|
|
165
|
+
//# sourceMappingURL=actions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../../../src/client/actions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The injected business face of the memory workbench entry: plain data
|
|
3
|
+
* callbacks over the memory Remote namespace. Live framework data (sessions,
|
|
4
|
+
* workspaces) arrives through the standard props shares instead.
|
|
5
|
+
*
|
|
6
|
+
* Two contracts live here. `MemoryWorkbenchActions` is the page-facing face:
|
|
7
|
+
* every callback is already bound to the current session. `MemoryRemoteActions`
|
|
8
|
+
* is the slot-injected face: the generated memory Remote requires the session
|
|
9
|
+
* id as the first wire argument (the host resolves it back to the Agent), so
|
|
10
|
+
* each callback takes it explicitly and `bindMemoryActions` curries it away
|
|
11
|
+
* once the workbench knows the current session.
|
|
12
|
+
*/
|
|
13
|
+
/** Curry the session id away so the pages keep calling the bound face. */
|
|
14
|
+
export function bindMemoryActions(remote, session) {
|
|
15
|
+
return {
|
|
16
|
+
workbenchInfo: () => remote.workbenchInfo(session),
|
|
17
|
+
stats: () => remote.stats(session),
|
|
18
|
+
listExperiences: (filter) => remote.listExperiences(session, filter),
|
|
19
|
+
family: (id) => remote.family(session, id),
|
|
20
|
+
listDiary: (limit, offset, onlyUnextracted) => remote.listDiary(session, limit, offset, onlyUnextracted),
|
|
21
|
+
getDiaryByIds: (ids) => remote.getDiaryByIds(session, ids),
|
|
22
|
+
listFacts: (category, includeHistory, limit, offset) => remote.listFacts(session, category, includeHistory, limit, offset),
|
|
23
|
+
listFactsCount: (category, includeHistory) => remote.listFactsCount(session, category, includeHistory),
|
|
24
|
+
listConcerns: (kind, status, limit, offset) => remote.listConcerns(session, kind, status, limit, offset),
|
|
25
|
+
listConcernsCount: (kind, status) => remote.listConcernsCount(session, kind, status),
|
|
26
|
+
extractionLog: (limit, offset) => remote.extractionLog(session, limit, offset),
|
|
27
|
+
extractionLogCount: () => remote.extractionLogCount(session),
|
|
28
|
+
consolidate: (request) => remote.consolidate(session, request),
|
|
29
|
+
consolidationDue: () => remote.consolidationDue(session),
|
|
30
|
+
ledgerQuery: (request) => remote.ledgerQuery(session, request),
|
|
31
|
+
ledgerQueryCount: (request) => remote.ledgerQueryCount(session, request),
|
|
32
|
+
verifyLedger: () => remote.verifyLedger(session),
|
|
33
|
+
exportLibrary: () => remote.exportLibrary(session),
|
|
34
|
+
humanPin: (request) => remote.humanPin(session, request),
|
|
35
|
+
humanDeleteExperience: (request) => remote.humanDeleteExperience(session, request),
|
|
36
|
+
humanEditExperience: (request) => remote.humanEditExperience(session, request),
|
|
37
|
+
humanAddExperience: (request) => remote.humanAddExperience(session, request),
|
|
38
|
+
humanPromote: (id, reason) => remote.humanPromote(session, id, reason),
|
|
39
|
+
humanRollback: (request) => remote.humanRollback(session, request),
|
|
40
|
+
humanAddFact: (request) => remote.humanAddFact(session, request),
|
|
41
|
+
humanEditFact: (request) => remote.humanEditFact(session, request),
|
|
42
|
+
humanDeleteFact: (request) => remote.humanDeleteFact(session, request),
|
|
43
|
+
humanConfirmFact: (request) => remote.humanConfirmFact(session, request),
|
|
44
|
+
humanAckDiary: (request) => remote.humanAckDiary(session, request),
|
|
45
|
+
humanSetConcernStatus: (request) => remote.humanSetConcernStatus(session, request),
|
|
46
|
+
humanDeleteConcern: (request) => remote.humanDeleteConcern(session, request),
|
|
47
|
+
humanReleaseCold: (request) => remote.humanReleaseCold(session, request),
|
|
48
|
+
ingest: (request) => remote.ingest(session, request),
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=actions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"actions.js","sourceRoot":"","sources":["../../../src/client/actions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory workbench plugin, browser half: mounts the generated memory Remote
|
|
3
|
+
* contribution, then registers two entries that share one nav store — a
|
|
4
|
+
* sidebar.sections nav group (left column, between New Session and the
|
|
5
|
+
* workspace browser) and a shell.overlay takeover (the monitoring pages on
|
|
6
|
+
* the right). Selecting a menu in the nav group shows the matching page;
|
|
7
|
+
* opening a session returns to the native conversation view.
|
|
8
|
+
*/
|
|
9
|
+
import type { ClientContext } from '@deepseek-ai/dsh-client-runtime/client';
|
|
10
|
+
/**
|
|
11
|
+
* Required services: slot seat, session list, and the Remote carrier. The
|
|
12
|
+
* `remote.memory` namespace is NOT an inject dependency: this plugin mounts
|
|
13
|
+
* that contribution itself inside apply — waiting on it here would deadlock
|
|
14
|
+
* the fiber (a plugin cannot wait on its own provision).
|
|
15
|
+
*/
|
|
16
|
+
export declare const inject: string[];
|
|
17
|
+
/**
|
|
18
|
+
* Client plugin body: mount the memory Remote contribution, then register the
|
|
19
|
+
* nav group and the overlay takeover sharing one nav store handle.
|
|
20
|
+
* @param ctx - client root context.
|
|
21
|
+
* @returns disposer after both entries and the Remote namespace unregister.
|
|
22
|
+
*/
|
|
23
|
+
export declare function apply(ctx: ClientContext): Promise<() => Promise<void>>;
|
|
24
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/client/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAa,MAAM,wCAAwC,CAAA;AAYtF;;;;;GAKG;AACH,eAAO,MAAM,MAAM,UAAkC,CAAA;AAQrD;;;;;GAKG;AACH,wBAAsB,KAAK,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,CAwE5E"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory workbench plugin, browser half: mounts the generated memory Remote
|
|
3
|
+
* contribution, then registers two entries that share one nav store — a
|
|
4
|
+
* sidebar.sections nav group (left column, between New Session and the
|
|
5
|
+
* workspace browser) and a shell.overlay takeover (the monitoring pages on
|
|
6
|
+
* the right). Selecting a menu in the nav group shows the matching page;
|
|
7
|
+
* opening a session returns to the native conversation view.
|
|
8
|
+
*/
|
|
9
|
+
import memoryRemote from 'dsh-daoing-memory/remote';
|
|
10
|
+
import { MemoryNavSection } from "./MemoryNavSection.js";
|
|
11
|
+
import { MemoryWorkbench } from "./Workbench.js";
|
|
12
|
+
import { createMemoryNavStore } from "./navStore.js";
|
|
13
|
+
/**
|
|
14
|
+
* Required services: slot seat, session list, and the Remote carrier. The
|
|
15
|
+
* `remote.memory` namespace is NOT an inject dependency: this plugin mounts
|
|
16
|
+
* that contribution itself inside apply — waiting on it here would deadlock
|
|
17
|
+
* the fiber (a plugin cannot wait on its own provision).
|
|
18
|
+
*/
|
|
19
|
+
export const inject = ['slots', 'sessions', 'remote'];
|
|
20
|
+
/** Fold the RemoteResult envelope; carrier failures surface as thrown errors the pages catch. */
|
|
21
|
+
function unwrap(result) {
|
|
22
|
+
if (result.ok)
|
|
23
|
+
return result.value;
|
|
24
|
+
throw new Error(result.error.message);
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Client plugin body: mount the memory Remote contribution, then register the
|
|
28
|
+
* nav group and the overlay takeover sharing one nav store handle.
|
|
29
|
+
* @param ctx - client root context.
|
|
30
|
+
* @returns disposer after both entries and the Remote namespace unregister.
|
|
31
|
+
*/
|
|
32
|
+
export async function apply(ctx) {
|
|
33
|
+
const disposeMount = await ctx.remote.$mount(memoryRemote);
|
|
34
|
+
// $mount registers a standalone `remote.memory` service; read it through the
|
|
35
|
+
// strict global store (ctx.get) — the ctx property proxy would demand an
|
|
36
|
+
// inject declaration, and injecting a service this plugin itself provides
|
|
37
|
+
// deadlocks the fiber.
|
|
38
|
+
const memory = ctx.get('remote.memory');
|
|
39
|
+
if (memory === undefined)
|
|
40
|
+
throw new Error('memory: remote namespace did not mount');
|
|
41
|
+
// Every generated method takes the session id first (wire transform of the
|
|
42
|
+
// host Agent parameter); the workbench binds it once the current session is
|
|
43
|
+
// known, so pages keep calling the session-free face.
|
|
44
|
+
const actions = {
|
|
45
|
+
workbenchInfo: async (session) => unwrap(await memory.workbenchInfo(session)),
|
|
46
|
+
stats: async (session) => unwrap(await memory.stats(session)),
|
|
47
|
+
listExperiences: async (session, filter) => unwrap(await memory.list(session, filter)),
|
|
48
|
+
family: async (session, id) => unwrap(await memory.family(session, id)),
|
|
49
|
+
listDiary: async (session, limit, offset, onlyUnextracted) => unwrap(await memory.listDiary(session, limit, offset, onlyUnextracted)),
|
|
50
|
+
getDiaryByIds: async (session, ids) => unwrap(await memory.getDiaryByIds(session, ids)),
|
|
51
|
+
listFacts: async (session, category, includeHistory, limit, offset) => unwrap(await memory.listFacts(session, category, includeHistory, limit, offset)),
|
|
52
|
+
listFactsCount: async (session, category, includeHistory) => unwrap(await memory.listFactsCount(session, category, includeHistory)),
|
|
53
|
+
listConcerns: async (session, kind, status, limit, offset) => unwrap(await memory.listConcerns(session, kind, status, limit, offset)),
|
|
54
|
+
listConcernsCount: async (session, kind, status) => unwrap(await memory.listConcernsCount(session, kind, status)),
|
|
55
|
+
extractionLog: async (session, limit, offset) => unwrap(await memory.extractionLog(session, limit, offset)),
|
|
56
|
+
extractionLogCount: async (session) => unwrap(await memory.extractionLogCount(session)),
|
|
57
|
+
consolidate: async (session, request) => unwrap(await memory.consolidate(session, request)),
|
|
58
|
+
consolidationDue: async (session) => unwrap(await memory.consolidationDue(session)),
|
|
59
|
+
ledgerQuery: async (session, request) => unwrap(await memory.ledgerQuery(session, request)),
|
|
60
|
+
ledgerQueryCount: async (session, request) => unwrap(await memory.ledgerQueryCount(session, request)),
|
|
61
|
+
verifyLedger: async (session) => unwrap(await memory.verifyLedger(session)),
|
|
62
|
+
exportLibrary: async (session) => unwrap(await memory.exportLibrary(session)),
|
|
63
|
+
humanPin: async (session, request) => unwrap(await memory.humanPin(session, request)),
|
|
64
|
+
humanDeleteExperience: async (session, request) => { unwrap(await memory.humanDeleteExperience(session, request)); },
|
|
65
|
+
humanEditExperience: async (session, request) => unwrap(await memory.humanEditExperience(session, request)),
|
|
66
|
+
humanAddExperience: async (session, request) => unwrap(await memory.humanAddExperience(session, request)),
|
|
67
|
+
humanPromote: async (session, id, reason) => unwrap(await memory.humanPromote(session, id, reason)),
|
|
68
|
+
humanRollback: async (session, request) => unwrap(await memory.humanRollback(session, request)),
|
|
69
|
+
humanAddFact: async (session, request) => unwrap(await memory.humanAddFact(session, request)),
|
|
70
|
+
humanEditFact: async (session, request) => unwrap(await memory.humanEditFact(session, request)),
|
|
71
|
+
humanDeleteFact: async (session, request) => { unwrap(await memory.humanDeleteFact(session, request)); },
|
|
72
|
+
humanConfirmFact: async (session, request) => unwrap(await memory.humanConfirmFact(session, request)),
|
|
73
|
+
humanAckDiary: async (session, request) => unwrap(await memory.humanAckDiary(session, request)),
|
|
74
|
+
humanSetConcernStatus: async (session, request) => { unwrap(await memory.humanSetConcernStatus(session, request)); },
|
|
75
|
+
humanDeleteConcern: async (session, request) => { unwrap(await memory.humanDeleteConcern(session, request)); },
|
|
76
|
+
humanReleaseCold: async (session, request) => unwrap(await memory.humanReleaseCold(session, request)),
|
|
77
|
+
ingest: async (session, request) => unwrap(await memory.ingest(session, request)),
|
|
78
|
+
};
|
|
79
|
+
// One nav store shared by both registrations: the sidebar group writes the
|
|
80
|
+
// selection, the overlay reads it. Both slots belong to other packages
|
|
81
|
+
// (ui-sidebar / ui-layout), so register through slots.inject — it waits for
|
|
82
|
+
// the declaration and removes the contribution when it collapses.
|
|
83
|
+
const navStore = createMemoryNavStore();
|
|
84
|
+
const disposeNav = ctx.slots.inject('sidebar.sections', () => ctx.slots.register({
|
|
85
|
+
name: 'sidebar.sections',
|
|
86
|
+
id: 'memory-nav',
|
|
87
|
+
order: 100,
|
|
88
|
+
store: navStore,
|
|
89
|
+
}, MemoryNavSection));
|
|
90
|
+
const disposeOverlay = ctx.slots.inject('shell.overlay', () => ctx.slots.register({
|
|
91
|
+
name: 'shell.overlay',
|
|
92
|
+
id: 'memory-workbench',
|
|
93
|
+
order: 100,
|
|
94
|
+
store: navStore,
|
|
95
|
+
inject: () => actions,
|
|
96
|
+
}, MemoryWorkbench));
|
|
97
|
+
return async () => {
|
|
98
|
+
disposeNav();
|
|
99
|
+
disposeOverlay();
|
|
100
|
+
await disposeMount();
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/client/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory monitoring nav store: shared viewing state between the left-sidebar
|
|
3
|
+
* nav group (sidebar.sections) and the right-pane takeover (shell.overlay).
|
|
4
|
+
* One factory handle is created in apply and passed to both registrations so
|
|
5
|
+
* selecting a menu in the sidebar and rendering the matching page read the
|
|
6
|
+
* same state. Module level exports the factory only — a module-level handle
|
|
7
|
+
* would pin the store's identity across plugin reloads.
|
|
8
|
+
*/
|
|
9
|
+
import { type EngineStoreHandle } from '@deepseek-ai/dsh-client-runtime/client';
|
|
10
|
+
/** The four fixed monitoring pages. */
|
|
11
|
+
export declare const MEMORY_NAV_ITEMS: readonly [{
|
|
12
|
+
readonly key: "experience";
|
|
13
|
+
readonly label: "经验库监控";
|
|
14
|
+
}, {
|
|
15
|
+
readonly key: "fact";
|
|
16
|
+
readonly label: "画像·日记";
|
|
17
|
+
}, {
|
|
18
|
+
readonly key: "ledger";
|
|
19
|
+
readonly label: "账本";
|
|
20
|
+
}, {
|
|
21
|
+
readonly key: "human";
|
|
22
|
+
readonly label: "人工管理";
|
|
23
|
+
}];
|
|
24
|
+
/** One monitoring page key. */
|
|
25
|
+
export type MemoryNavKey = typeof MEMORY_NAV_ITEMS[number]['key'];
|
|
26
|
+
/** Nav state: which page is active (null = the takeover overlay is hidden) and the group fold. */
|
|
27
|
+
type MemoryNavState = {
|
|
28
|
+
page: MemoryNavKey | null;
|
|
29
|
+
collapsed: boolean;
|
|
30
|
+
};
|
|
31
|
+
/** Annotation twin of the actions literal (the export needs a declared return type). */
|
|
32
|
+
type MemoryNavActions = {
|
|
33
|
+
select: (draft: MemoryNavState, page: MemoryNavKey) => void;
|
|
34
|
+
clear: (draft: MemoryNavState) => void;
|
|
35
|
+
toggleCollapsed: (draft: MemoryNavState) => void;
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* Create the memory nav store handle. `select` both chooses the page and
|
|
39
|
+
* expands the group; `clear` hides the takeover overlay (used when the user
|
|
40
|
+
* opens a session row, returning to the native conversation view).
|
|
41
|
+
* @returns the store handle (spec + type + identity + factory in one).
|
|
42
|
+
*/
|
|
43
|
+
export declare function createMemoryNavStore(): EngineStoreHandle<MemoryNavState, MemoryNavActions>;
|
|
44
|
+
export {};
|
|
45
|
+
//# sourceMappingURL=navStore.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"navStore.d.ts","sourceRoot":"","sources":["../../../src/client/navStore.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAe,KAAK,iBAAiB,EAAE,MAAM,wCAAwC,CAAA;AAE5F,uCAAuC;AACvC,eAAO,MAAM,gBAAgB;;;;;;;;;;;;EAKnB,CAAA;AAEV,+BAA+B;AAC/B,MAAM,MAAM,YAAY,GAAG,OAAO,gBAAgB,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAA;AAEjE,kGAAkG;AAClG,KAAK,cAAc,GAAG;IACpB,IAAI,EAAE,YAAY,GAAG,IAAI,CAAA;IACzB,SAAS,EAAE,OAAO,CAAA;CACnB,CAAA;AAED,wFAAwF;AACxF,KAAK,gBAAgB,GAAG;IACtB,MAAM,EAAE,CAAC,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,YAAY,KAAK,IAAI,CAAA;IAC3D,KAAK,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAA;IACtC,eAAe,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAA;CACjD,CAAA;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,IAAI,iBAAiB,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAY1F"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory monitoring nav store: shared viewing state between the left-sidebar
|
|
3
|
+
* nav group (sidebar.sections) and the right-pane takeover (shell.overlay).
|
|
4
|
+
* One factory handle is created in apply and passed to both registrations so
|
|
5
|
+
* selecting a menu in the sidebar and rendering the matching page read the
|
|
6
|
+
* same state. Module level exports the factory only — a module-level handle
|
|
7
|
+
* would pin the store's identity across plugin reloads.
|
|
8
|
+
*/
|
|
9
|
+
import { defineStore } from '@deepseek-ai/dsh-client-runtime/client';
|
|
10
|
+
/** The four fixed monitoring pages. */
|
|
11
|
+
export const MEMORY_NAV_ITEMS = [
|
|
12
|
+
{ key: 'experience', label: '经验库监控' },
|
|
13
|
+
{ key: 'fact', label: '画像·日记' },
|
|
14
|
+
{ key: 'ledger', label: '账本' },
|
|
15
|
+
{ key: 'human', label: '人工管理' },
|
|
16
|
+
];
|
|
17
|
+
/**
|
|
18
|
+
* Create the memory nav store handle. `select` both chooses the page and
|
|
19
|
+
* expands the group; `clear` hides the takeover overlay (used when the user
|
|
20
|
+
* opens a session row, returning to the native conversation view).
|
|
21
|
+
* @returns the store handle (spec + type + identity + factory in one).
|
|
22
|
+
*/
|
|
23
|
+
export function createMemoryNavStore() {
|
|
24
|
+
return defineStore({
|
|
25
|
+
init: () => ({ page: null, collapsed: false }),
|
|
26
|
+
actions: {
|
|
27
|
+
select: (d, page) => {
|
|
28
|
+
d.page = page;
|
|
29
|
+
d.collapsed = false;
|
|
30
|
+
},
|
|
31
|
+
clear: (d) => { d.page = null; },
|
|
32
|
+
toggleCollapsed: (d) => { d.collapsed = !d.collapsed; },
|
|
33
|
+
},
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=navStore.js.map
|