@lemoncat7/dsh-partner 2.2.0 → 2.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (108) hide show
  1. package/README.md +4 -0
  2. package/docs/direct-channels.md +17 -0
  3. package/docs/memory-quality.md +26 -0
  4. package/docs/releases/2.3.0.md +29 -0
  5. package/lib/agent-runtime.d.ts.map +1 -1
  6. package/lib/agent-runtime.js +12 -9
  7. package/lib/agent-runtime.js.map +1 -1
  8. package/lib/api/features/memory-layers-api.d.ts.map +1 -1
  9. package/lib/api/features/memory-layers-api.js +10 -1
  10. package/lib/api/features/memory-layers-api.js.map +1 -1
  11. package/lib/api.d.ts.map +1 -1
  12. package/lib/api.js +8 -2
  13. package/lib/api.js.map +1 -1
  14. package/lib/channels/direct/discovery.d.ts.map +1 -1
  15. package/lib/channels/direct/discovery.js +9 -4
  16. package/lib/channels/direct/discovery.js.map +1 -1
  17. package/lib/channels/direct/dispatcher.d.ts +16 -0
  18. package/lib/channels/direct/dispatcher.d.ts.map +1 -0
  19. package/lib/channels/direct/dispatcher.js +46 -0
  20. package/lib/channels/direct/dispatcher.js.map +1 -0
  21. package/lib/channels/direct/matrix-timeline.d.ts +4 -0
  22. package/lib/channels/direct/matrix-timeline.d.ts.map +1 -0
  23. package/lib/channels/direct/matrix-timeline.js +49 -0
  24. package/lib/channels/direct/matrix-timeline.js.map +1 -0
  25. package/lib/channels/direct/retry-policy.d.ts +3 -0
  26. package/lib/channels/direct/retry-policy.d.ts.map +1 -0
  27. package/lib/channels/direct/retry-policy.js +9 -0
  28. package/lib/channels/direct/retry-policy.js.map +1 -0
  29. package/lib/channels/direct/transport.d.ts.map +1 -1
  30. package/lib/channels/direct/transport.js +9 -3
  31. package/lib/channels/direct/transport.js.map +1 -1
  32. package/lib/channels/manager.d.ts +2 -1
  33. package/lib/channels/manager.d.ts.map +1 -1
  34. package/lib/channels/manager.js +104 -54
  35. package/lib/channels/manager.js.map +1 -1
  36. package/lib/client-api.d.ts +1 -0
  37. package/lib/client-api.d.ts.map +1 -1
  38. package/lib/client.js +2012 -1915
  39. package/lib/client.js.map +4 -4
  40. package/lib/index.d.ts.map +1 -1
  41. package/lib/index.js +24 -4
  42. package/lib/index.js.map +1 -1
  43. package/lib/memory-domain.d.ts +3 -0
  44. package/lib/memory-domain.d.ts.map +1 -1
  45. package/lib/memory-journal.d.ts +3 -0
  46. package/lib/memory-journal.d.ts.map +1 -1
  47. package/lib/memory-journal.js +32 -3
  48. package/lib/memory-journal.js.map +1 -1
  49. package/lib/memory-quality.d.ts +2 -0
  50. package/lib/memory-quality.d.ts.map +1 -1
  51. package/lib/memory-quality.js +8 -0
  52. package/lib/memory-quality.js.map +1 -1
  53. package/lib/memory-reflection.d.ts +1 -1
  54. package/lib/memory-reflection.d.ts.map +1 -1
  55. package/lib/memory-reflection.js +26 -13
  56. package/lib/memory-reflection.js.map +1 -1
  57. package/lib/memory-scope-migration.d.ts +4 -0
  58. package/lib/memory-scope-migration.d.ts.map +1 -0
  59. package/lib/memory-scope-migration.js +48 -0
  60. package/lib/memory-scope-migration.js.map +1 -0
  61. package/lib/memory-scope.d.ts +11 -0
  62. package/lib/memory-scope.d.ts.map +1 -0
  63. package/lib/memory-scope.js +7 -0
  64. package/lib/memory-scope.js.map +1 -0
  65. package/lib/memory-store.d.ts +9 -0
  66. package/lib/memory-store.d.ts.map +1 -1
  67. package/lib/memory-store.js +52 -3
  68. package/lib/memory-store.js.map +1 -1
  69. package/lib/persona/domain.d.ts +6 -0
  70. package/lib/persona/domain.d.ts.map +1 -0
  71. package/lib/persona/domain.js +44 -0
  72. package/lib/persona/domain.js.map +1 -0
  73. package/lib/persona/migration.d.ts +4 -0
  74. package/lib/persona/migration.d.ts.map +1 -0
  75. package/lib/persona/migration.js +22 -0
  76. package/lib/persona/migration.js.map +1 -0
  77. package/lib/persona/service.d.ts +20 -0
  78. package/lib/persona/service.d.ts.map +1 -0
  79. package/lib/persona/service.js +69 -0
  80. package/lib/persona/service.js.map +1 -0
  81. package/lib/persona/store.d.ts +11 -0
  82. package/lib/persona/store.d.ts.map +1 -0
  83. package/lib/persona/store.js +153 -0
  84. package/lib/persona/store.js.map +1 -0
  85. package/lib/persona/types.d.ts +41 -0
  86. package/lib/persona/types.d.ts.map +1 -0
  87. package/lib/persona/types.js +2 -0
  88. package/lib/persona/types.js.map +1 -0
  89. package/lib/profile-domain.d.ts.map +1 -1
  90. package/lib/profile-domain.js +2 -1
  91. package/lib/profile-domain.js.map +1 -1
  92. package/lib/ui/memory/memory-library.d.ts +2 -1
  93. package/lib/ui/memory/memory-library.d.ts.map +1 -1
  94. package/lib/ui/memory/memory-library.js +7 -6
  95. package/lib/ui/memory/memory-library.js.map +1 -1
  96. package/lib/ui/memory/memory-panel.d.ts.map +1 -1
  97. package/lib/ui/memory/memory-panel.js +10 -3
  98. package/lib/ui/memory/memory-panel.js.map +1 -1
  99. package/lib/ui/memory/persona-view.d.ts +9 -0
  100. package/lib/ui/memory/persona-view.d.ts.map +1 -0
  101. package/lib/ui/memory/persona-view.js +43 -0
  102. package/lib/ui/memory/persona-view.js.map +1 -0
  103. package/lib/ui/memory/types.d.ts +1 -1
  104. package/lib/ui/memory/types.d.ts.map +1 -1
  105. package/lib/ui/workspace-components.d.ts.map +1 -1
  106. package/lib/ui/workspace-components.js +9 -4
  107. package/lib/ui/workspace-components.js.map +1 -1
  108. package/package.json +2 -1
@@ -0,0 +1,69 @@
1
+ import { createUserMessage } from '@deepseek-ai/dsh-llm';
2
+ import { memoryFinishError } from '../memory-errors.js';
3
+ import { PERSONA_SYSTEM, parsePersona } from './domain.js';
4
+ /** Runs inside the existing sequential memory worker, never on the reply path. */
5
+ export class PersonaService {
6
+ ctx;
7
+ store;
8
+ closed = false;
9
+ controllers = new Set();
10
+ constructor(ctx, store) {
11
+ this.ctx = ctx;
12
+ this.store = store;
13
+ }
14
+ close() {
15
+ this.closed = true;
16
+ for (const controller of this.controllers)
17
+ controller.abort();
18
+ }
19
+ async process(companion, scopeId) {
20
+ if (this.closed || !companion.automation.memory.enabled)
21
+ return;
22
+ const job = await this.store.claimPersona(companion.id, scopeId);
23
+ if (!job)
24
+ return;
25
+ const controller = new AbortController();
26
+ this.controllers.add(controller);
27
+ const timeout = setTimeout(() => controller.abort(), 90_000);
28
+ try {
29
+ if (this.closed)
30
+ throw new Error('服务停止,画像任务保留');
31
+ const selection = {
32
+ ...this.ctx.agentDefaultModel.currentSelection(),
33
+ ...(companion.provider ? { provider: companion.provider } : {}),
34
+ ...(companion.model ? { model: companion.model } : {}),
35
+ ...(companion.automation.memory.provider ? { provider: companion.automation.memory.provider } : {}),
36
+ ...(companion.automation.memory.model ? { model: companion.automation.memory.model } : {}),
37
+ };
38
+ let output = '';
39
+ for await (const chunk of this.ctx.llm.stream({
40
+ ...selection, system: PERSONA_SYSTEM, temperature: 0.1, maxTokens: 3500, signal: controller.signal,
41
+ messages: [createUserMessage({ content: [{ type: 'text', text: JSON.stringify({
42
+ sources: job.sources, previous: job.previous.map(({ topic, basis, text }) => ({ topic, basis, text })),
43
+ corrections: job.corrections,
44
+ }) }], source: { kind: 'plugin', plugin: '@lemoncat7/dsh-partner', form: 'notice', summary: '伙伴综合画像' } })],
45
+ })) {
46
+ if (chunk.type === 'text-delta')
47
+ output += chunk.text;
48
+ if (output.length > 24_000)
49
+ throw new Error('画像输出超出限制');
50
+ if (chunk.type === 'finish' && chunk.reason.kind !== 'stop')
51
+ throw new Error(memoryFinishError(chunk.reason));
52
+ }
53
+ if (controller.signal.aborted)
54
+ throw new Error('画像生成中断,将自动重试');
55
+ const paragraphs = parsePersona(output, job.sources);
56
+ if (!paragraphs.length && job.previous.length)
57
+ throw new Error('未生成可替换的画像,保留现有理解并稍后重试');
58
+ await this.store.finishPersona(job, paragraphs);
59
+ }
60
+ catch (error) {
61
+ await this.store.failPersona(job, error instanceof Error ? error.message : String(error));
62
+ }
63
+ finally {
64
+ clearTimeout(timeout);
65
+ this.controllers.delete(controller);
66
+ }
67
+ }
68
+ }
69
+ //# sourceMappingURL=service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/persona/service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { DatabaseSync } from 'node:sqlite';
2
+ import type { PersonaJob, PersonaParagraph, PersonaSource, PersonaView } from './types.js';
3
+ export declare function initializePersona(db: DatabaseSync): void;
4
+ /** Bounded user evidence only: never derive a user profile from assistant prose. */
5
+ export declare function personaSources(db: DatabaseSync, companionId: string, scopeId: string, now?: number): PersonaSource[];
6
+ export declare function readPersona(db: DatabaseSync, companionId: string, scopeId: string, now?: number, sources?: PersonaSource[]): PersonaView;
7
+ export declare function claimPersona(db: DatabaseSync, companionId: string, scopeId: string, now?: number): PersonaJob | undefined;
8
+ export declare function finishPersona(db: DatabaseSync, job: PersonaJob, paragraphs: PersonaParagraph[], now?: number): void;
9
+ export declare function failPersona(db: DatabaseSync, job: PersonaJob, error: string, now?: number): void;
10
+ export declare function requestPersona(db: DatabaseSync, scopeId: string, version: string, companionId: string, paragraphId?: string, correction?: string): void;
11
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/persona/store.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,aAAa,CAAA;AAE7C,OAAO,KAAK,EAAoB,UAAU,EAAE,gBAAgB,EAAE,aAAa,EAAE,WAAW,EAAC,MAAM,YAAY,CAAA;AAG3G,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CASxD;AAED,oFAAoF;AACpF,wBAAgB,cAAc,CAAC,EAAE,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,SAAa,GAAG,aAAa,EAAE,CA2BxH;AAmBD,wBAAgB,WAAW,CAAC,EAAE,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,SAAW,EAAE,OAAO,kBAA2C,GAAG,WAAW,CAkBnK;AAED,wBAAgB,YAAY,CAAC,EAAE,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,SAAW,GAAG,UAAU,GAAG,SAAS,CAO3H;AAeD,wBAAgB,aAAa,CAAC,EAAE,EAAE,YAAY,EAAE,GAAG,EAAE,UAAU,EAAE,UAAU,EAAE,gBAAgB,EAAE,EAAE,GAAG,SAAW,GAAG,IAAI,CAerH;AAED,wBAAgB,WAAW,CAAC,EAAE,EAAE,YAAY,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,SAAW,GAAG,IAAI,CAMlG;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,UAAU,SAAG,GAAG,IAAI,CAajJ"}
@@ -0,0 +1,153 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ import { personaHash } from './domain.js';
3
+ const UPDATE_INTERVAL = 10 * 60_000;
4
+ export function initializePersona(db) {
5
+ db.exec(`CREATE TABLE IF NOT EXISTS persona_state (
6
+ scope_id TEXT PRIMARY KEY, source_hash TEXT NOT NULL DEFAULT '', payload TEXT NOT NULL DEFAULT '[]',
7
+ updated_at INTEGER NOT NULL DEFAULT 0, attempts INTEGER NOT NULL DEFAULT 0, next_at INTEGER NOT NULL DEFAULT 0,
8
+ lease_token TEXT, lease_until INTEGER NOT NULL DEFAULT 0, requested INTEGER NOT NULL DEFAULT 0,
9
+ corrections TEXT NOT NULL DEFAULT '[]', revision INTEGER NOT NULL DEFAULT 0, error TEXT NOT NULL DEFAULT ''
10
+ ); CREATE TABLE IF NOT EXISTS persona_versions (
11
+ id INTEGER PRIMARY KEY, scope_id TEXT NOT NULL, payload TEXT NOT NULL, updated_at INTEGER NOT NULL
12
+ ); CREATE INDEX IF NOT EXISTS persona_versions_scope ON persona_versions(scope_id, id);`);
13
+ }
14
+ /** Bounded user evidence only: never derive a user profile from assistant prose. */
15
+ export function personaSources(db, companionId, scopeId, now = Date.now()) {
16
+ const sources = [];
17
+ const memories = db.prepare(`SELECT * FROM memories WHERE companion_id=? AND scope_id=? AND status='active'
18
+ AND kind IN ('profile','preference','relationship') AND (expires_at IS NULL OR expires_at>?)
19
+ ORDER BY locked DESC, updated_at DESC, id LIMIT 24`).all(companionId, scopeId, now);
20
+ for (const row of memories) {
21
+ const evidence = JSON.parse(String(row.evidence_json)).slice(-2);
22
+ if (!evidence.length)
23
+ continue;
24
+ const text = `${String(row.subject)}:${String(row.content)}\n用户依据:${evidence.map(item => item.excerpt).join(';')}`.slice(0, 350);
25
+ sources.push({ id: `memory:${String(row.id)}`, kind: 'memory', text, at: Number(row.updated_at),
26
+ signature: personaHash([row.content, row.subject, row.locked, row.evidence_json]), turnIds: evidence.map(item => item.turnId) });
27
+ }
28
+ const turns = db.prepare(`SELECT id, at, substr(json_extract(turn_json,'$.user'),1,450) AS user FROM memory_jobs
29
+ WHERE scope_id=? AND length(trim(json_extract(turn_json,'$.user')))>=10 ORDER BY at DESC, id DESC LIMIT 20`).all(scopeId);
30
+ for (const row of turns) {
31
+ const text = String(row.user);
32
+ sources.push({ id: `turn:${String(row.id)}`, kind: 'turn', text, at: Number(row.at), signature: personaHash(text), turnIds: [String(row.id)] });
33
+ }
34
+ // Preserve still-valid older evidence; a moving recent-message window is not forgetting.
35
+ const saved = JSON.parse(String(rowFor(db, scopeId)?.payload ?? '[]'));
36
+ const ids = new Set(sources.map(source => source.id));
37
+ for (const source of saved.flatMap(item => item.evidence)) {
38
+ if (!ids.has(source.id) && evidenceCurrent(db, companionId, scopeId, source, now)) {
39
+ sources.push(source);
40
+ ids.add(source.id);
41
+ }
42
+ }
43
+ return sources;
44
+ }
45
+ function evidenceCurrent(db, companionId, scopeId, source, now) {
46
+ if (source.kind === 'memory') {
47
+ const row = db.prepare("SELECT * FROM memories WHERE id=? AND companion_id=? AND scope_id=? AND status='active' AND (expires_at IS NULL OR expires_at>?)")
48
+ .get(source.id.slice('memory:'.length), companionId, scopeId, now);
49
+ return !!row && personaHash([row.content, row.subject, row.locked, row.evidence_json]) === source.signature;
50
+ }
51
+ const row = db.prepare("SELECT substr(json_extract(turn_json,'$.user'),1,450) AS user FROM memory_jobs WHERE id=? AND scope_id=?")
52
+ .get(source.id.slice('turn:'.length), scopeId);
53
+ return !!row && personaHash(String(row.user)) === source.signature;
54
+ }
55
+ function rowFor(db, scopeId) {
56
+ return db.prepare('SELECT * FROM persona_state WHERE scope_id=?').get(scopeId);
57
+ }
58
+ // Regenerate once when the synthesis contract changes, even without new conversation.
59
+ const sourceHash = (sources) => personaHash(['person-centered-v2', sources.map(item => [item.id, item.signature])]);
60
+ export function readPersona(db, companionId, scopeId, now = Date.now(), sources = personaSources(db, companionId, scopeId, now)) {
61
+ const row = rowFor(db, scopeId);
62
+ const hash = sourceHash(sources);
63
+ const saved = JSON.parse(String(row?.payload ?? '[]'));
64
+ const corrections = JSON.parse(String(row?.corrections ?? '[]'));
65
+ const current = new Map(sources.map(source => [source.id, source.signature]));
66
+ // Deleted, corrected or expired evidence stops being injected immediately.
67
+ const paragraphs = saved.filter(item => !corrections.some(c => c.id === item.id)
68
+ && item.evidence.every(source => current.get(source.id) === source.signature));
69
+ const stale = row?.source_hash !== hash || paragraphs.length !== saved.length;
70
+ const enough = sources.some(item => item.kind === 'memory') || sources.length >= 3;
71
+ const status = Number(row?.lease_until) > now ? 'processing'
72
+ : Number(row?.attempts) > 0 ? 'retrying' : !enough ? 'waiting'
73
+ : stale || Boolean(row?.requested) ? 'pending' : 'ready';
74
+ return { status, paragraphs, stale, version: personaHash([row?.revision ?? 0, paragraphs]),
75
+ ...(Number(row?.updated_at) > 0 ? { updatedAt: Number(row?.updated_at) } : {}),
76
+ ...(Number(row?.next_at) > 0 ? { nextAt: Number(row?.next_at) } : {}),
77
+ ...(row?.error ? { error: String(row.error) } : {}) };
78
+ }
79
+ export function claimPersona(db, companionId, scopeId, now = Date.now()) {
80
+ db.exec('BEGIN IMMEDIATE');
81
+ try {
82
+ const job = claimWithinTransaction(db, companionId, scopeId, now);
83
+ db.exec('COMMIT');
84
+ return job;
85
+ }
86
+ catch (error) {
87
+ db.exec('ROLLBACK');
88
+ throw error;
89
+ }
90
+ }
91
+ function claimWithinTransaction(db, companionId, scopeId, now) {
92
+ const sources = personaSources(db, companionId, scopeId, now);
93
+ if (!sources.some(item => item.kind === 'memory') && sources.length < 3)
94
+ return undefined;
95
+ db.prepare('INSERT OR IGNORE INTO persona_state(scope_id) VALUES (?)').run(scopeId);
96
+ const row = rowFor(db, scopeId);
97
+ const hash = sourceHash(sources);
98
+ if (Number(row.lease_until) > now || Number(row.next_at) > now || (row.source_hash === hash && !row.requested))
99
+ return undefined;
100
+ const token = randomUUID();
101
+ db.prepare('UPDATE persona_state SET lease_token=?,lease_until=? WHERE scope_id=?').run(token, now + 3 * 60_000, scopeId);
102
+ return { companionId, scopeId, token, sourceHash: hash, sources, previous: readPersona(db, companionId, scopeId, now, sources).paragraphs,
103
+ corrections: JSON.parse(String(row.corrections)) };
104
+ }
105
+ export function finishPersona(db, job, paragraphs, now = Date.now()) {
106
+ db.exec('BEGIN IMMEDIATE');
107
+ try {
108
+ const row = rowFor(db, job.scopeId);
109
+ if (row?.lease_token !== job.token)
110
+ throw new Error('画像任务已失效,将以最新请求为准');
111
+ const latest = personaSources(db, job.companionId, job.scopeId, now);
112
+ const current = new Map(latest.map(source => [source.id, source.signature]));
113
+ if (paragraphs.some(item => item.evidence.some(source => current.get(source.id) !== source.signature)))
114
+ throw new Error('画像依据已更新,将自动重试');
115
+ if (Number(row.updated_at) > 0)
116
+ db.prepare('INSERT INTO persona_versions(scope_id,payload,updated_at) VALUES (?,?,?)').run(job.scopeId, String(row.payload), Number(row.updated_at));
117
+ db.prepare(`DELETE FROM persona_versions WHERE scope_id=? AND id NOT IN
118
+ (SELECT id FROM persona_versions WHERE scope_id=? ORDER BY id DESC LIMIT 5)`).run(job.scopeId, job.scopeId);
119
+ db.prepare(`UPDATE persona_state SET payload=?,source_hash=?,updated_at=?,next_at=?,attempts=0,error='',
120
+ lease_token=NULL,lease_until=0,requested=0,revision=revision+1 WHERE scope_id=?`).run(JSON.stringify(paragraphs), job.sourceHash, now, now + UPDATE_INTERVAL, job.scopeId);
121
+ db.exec('COMMIT');
122
+ }
123
+ catch (error) {
124
+ db.exec('ROLLBACK');
125
+ throw error;
126
+ }
127
+ }
128
+ export function failPersona(db, job, error, now = Date.now()) {
129
+ const row = rowFor(db, job.scopeId);
130
+ if (row?.lease_token !== job.token)
131
+ return;
132
+ const attempts = Number(row.attempts) + 1;
133
+ db.prepare(`UPDATE persona_state SET attempts=?,next_at=?,error=?,lease_token=NULL,lease_until=0 WHERE scope_id=? AND lease_token=?`)
134
+ .run(attempts, now + Math.min(3600000, 30000 * 2 ** Math.min(attempts - 1, 7)), error.slice(0, 500), job.scopeId, job.token);
135
+ }
136
+ export function requestPersona(db, scopeId, version, companionId, paragraphId, correction = '') {
137
+ const view = readPersona(db, companionId, scopeId);
138
+ if (view.version !== version)
139
+ throw new Error('画像已更新,请刷新后重试');
140
+ db.prepare('INSERT OR IGNORE INTO persona_state(scope_id) VALUES (?)').run(scopeId);
141
+ const corrections = JSON.parse(String(rowFor(db, scopeId).corrections));
142
+ if (paragraphId) {
143
+ const item = view.paragraphs.find(item => item.id === paragraphId);
144
+ if (!item)
145
+ throw new Error('该画像段落已不存在');
146
+ if (corrections.length >= 30)
147
+ throw new Error('纠正记录已达30条,请先整理已有记忆,避免丢失已确认的纠正');
148
+ corrections.push({ id: item.id, text: item.text, correction: correction.trim().slice(0, 500) || '用户明确否认此结论,不得继续使用或换措辞重复。', at: Date.now() });
149
+ }
150
+ db.prepare(`UPDATE persona_state SET requested=1,next_at=0,attempts=0,error='',corrections=?,revision=revision+1,
151
+ lease_token=NULL,lease_until=0 WHERE scope_id=?`).run(JSON.stringify(corrections), scopeId);
152
+ }
153
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/persona/store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ export type PersonaTopic = 'background' | 'interests' | 'collaboration' | 'changes';
2
+ export interface PersonaSource {
3
+ id: string;
4
+ kind: 'memory' | 'turn';
5
+ text: string;
6
+ at: number;
7
+ signature: string;
8
+ turnIds: string[];
9
+ }
10
+ export interface PersonaParagraph {
11
+ id: string;
12
+ topic: PersonaTopic;
13
+ basis: 'explicit' | 'observed';
14
+ text: string;
15
+ evidence: PersonaSource[];
16
+ }
17
+ export interface PersonaView {
18
+ status: 'waiting' | 'pending' | 'processing' | 'ready' | 'retrying';
19
+ paragraphs: PersonaParagraph[];
20
+ version: string;
21
+ updatedAt?: number;
22
+ nextAt?: number;
23
+ error?: string;
24
+ stale: boolean;
25
+ }
26
+ export interface PersonaCorrection {
27
+ id: string;
28
+ text: string;
29
+ correction: string;
30
+ at: number;
31
+ }
32
+ export interface PersonaJob {
33
+ companionId: string;
34
+ scopeId: string;
35
+ token: string;
36
+ sourceHash: string;
37
+ sources: PersonaSource[];
38
+ previous: PersonaParagraph[];
39
+ corrections: PersonaCorrection[];
40
+ }
41
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/persona/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG,YAAY,GAAG,WAAW,GAAG,eAAe,GAAG,SAAS,CAAA;AACnF,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,QAAQ,GAAG,MAAM,CAAA;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,EAAE,MAAM,CAAA;IACV,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,EAAE,CAAA;CAClB;AACD,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,YAAY,CAAA;IACnB,KAAK,EAAE,UAAU,GAAG,UAAU,CAAA;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,aAAa,EAAE,CAAA;CAC1B;AACD,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,YAAY,GAAG,OAAO,GAAG,UAAU,CAAA;IACnE,UAAU,EAAE,gBAAgB,EAAE,CAAA;IAC9B,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,OAAO,CAAA;CACf;AACD,MAAM,WAAW,iBAAiB;IAAG,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE;AAC/F,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,aAAa,EAAE,CAAA;IACxB,QAAQ,EAAE,gBAAgB,EAAE,CAAA;IAC5B,WAAW,EAAE,iBAAiB,EAAE,CAAA;CACjC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/persona/types.ts"],"names":[],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"profile-domain.d.ts","sourceRoot":"","sources":["../src/profile-domain.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAE5E,eAAO,MAAM,gBAAgB,mDAAoD,CAAA;AACjF,MAAM,MAAM,cAAc,GAAG,OAAO,gBAAgB,CAAC,MAAM,CAAC,CAAA;AAc5D,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAEjF;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAGrE;AAED,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,mBAAmB,CA8BzH"}
1
+ {"version":3,"file":"profile-domain.d.ts","sourceRoot":"","sources":["../src/profile-domain.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAE5E,eAAO,MAAM,gBAAgB,mDAAoD,CAAA;AACjF,MAAM,MAAM,cAAc,GAAG,OAAO,gBAAgB,CAAC,MAAM,CAAC,CAAA;AAc5D,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAEjF;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAGrE;AAED,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,mBAAmB,CA+BzH"}
@@ -33,7 +33,8 @@ export function buildProfileSnapshot(companionId, scopeId, memories) {
33
33
  break;
34
34
  }
35
35
  const preferences = memories.filter(item => item.kind === 'preference' && item.status === 'active'
36
- && (item.locked || (item.confidence >= .8 && item.importance >= .65 && new Set(item.evidence.map(source => source.turnId)).size >= 2)))
36
+ && (item.locked || (item.confidence >= .8 && item.importance >= .65 && new Set(item.evidence.map(source => source.turnId)).size >= 2)
37
+ || (item.confidence >= .95 && item.importance >= .8 && item.evidence.some(source => source.excerpt.trim().length >= 2))))
37
38
  .sort((a, b) => Number(Boolean(b.locked)) - Number(Boolean(a.locked)) || b.importance - a.importance || b.updatedAt - a.updatedAt).slice(0, 4);
38
39
  const baseline = [...entries, ...preferences];
39
40
  const version = createHash('sha256').update(baseline.map(entry => [
@@ -1 +1 @@
1
- {"version":3,"file":"profile-domain.js","sourceRoot":"","sources":["../src/profile-domain.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"profile-domain.js","sourceRoot":"","sources":["../src/profile-domain.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,10 @@
1
1
  import { type MemoryCollection, type MemoryLayers } from './types.js';
2
- export declare function MemoryLibrary({ companionId, scopeId, collection, layers, changed }: {
2
+ export declare function MemoryLibrary({ companionId, scopeId, collection, layers, enabled, changed }: {
3
3
  companionId: string;
4
4
  scopeId: string;
5
5
  collection: MemoryCollection;
6
6
  layers: MemoryLayers | undefined;
7
+ enabled: boolean;
7
8
  changed(): Promise<void>;
8
9
  }): JSX.Element;
9
10
  //# sourceMappingURL=memory-library.d.ts.map
@@ -1 +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"}
1
+ {"version":3,"file":"memory-library.d.ts","sourceRoot":"","sources":["../../../src/ui/memory/memory-library.tsx"],"names":[],"mappings":"AAYA,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,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,EAAE,OAAO,CAAC;IAAC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CAAC,GAAG,GAAG,CAAC,OAAO,CAiD3P"}
@@ -1,17 +1,18 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  import { useMemo, useRef, useState } from 'react';
3
- import { IconDataOutline16, IconUserOutline16, IconBrowseOutline16, IconListPenOutline16, IconLinkOutline16 } from '@deepseek-ai/dsh-client-ui-primitives';
3
+ import { IconDataOutline16, IconBrowseOutline16, IconListPenOutline16, IconLinkOutline16 } from '@deepseek-ai/dsh-client-ui-primitives';
4
4
  import { CollectionEmpty, WorkspaceDialog, WorkspaceNotice } from '../workspace-components.js';
5
5
  import { relativeTime } from '../partner-components.js';
6
6
  import { MemoryDetail } from './memory-detail.js';
7
7
  import { DailyReflectionDetail, memoryKind } from './memory-cards.js';
8
8
  import { MemoryGraph } from './memory-graph.js';
9
9
  import { HistoryView } from './history-view.js';
10
+ import { PersonaView } from './persona-view.js';
10
11
  import { ExperienceView } from './experience-view.js';
11
12
  import { useMemoryResource } from './use-memory-resource.js';
12
13
  import { MEMORY_STATUS } from './types.js';
13
- export function MemoryLibrary({ companionId, scopeId, collection, layers, changed }) {
14
- const [mode, setMode] = useState('profile');
14
+ export function MemoryLibrary({ companionId, scopeId, collection, layers, enabled, changed }) {
15
+ const [mode, setMode] = useState('memory');
15
16
  const [query, setQuery] = useState('');
16
17
  const [status, setStatus] = useState('active');
17
18
  const [kind, setKind] = useState('all');
@@ -29,10 +30,10 @@ export function MemoryLibrary({ companionId, scopeId, collection, layers, change
29
30
  const selectedDay = reflections.find(item => item.date === date);
30
31
  const selectMode = (value) => { setMode(value); setQuery(''); setLimit(20); if (more.current)
31
32
  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) {
33
+ const row = (item) => _jsxs("button", { type: "button", className: "dsh-partner-memory-row", "aria-label": `${item.subject}:${item.content}`, onClick: () => setInspecting(item), children: [_jsx("span", { className: "dsh-partner-memory-list-kind", children: memoryKind(item.kind) }), _jsx("span", { className: "dsh-partner-memory-row-copy", children: _jsx("p", { children: item.content }) }), _jsx("small", { className: "dsh-partner-memory-list-state", children: MEMORY_STATUS[item.status] }), _jsx("time", { dateTime: new Date(item.updatedAt).toISOString(), title: new Date(item.updatedAt).toLocaleString(), children: relativeTime(item.updatedAt) })] }, item.id);
34
+ 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 === '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
35
  more.current.open = false;
35
36
  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
+ } }, 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('scenes'), children: [_jsx(IconDataOutline16, { size: 16 }), "\u573A\u666F\u6458\u8981"] }), _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 === 'scenes' && _jsx("h3", { 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 === 'memory' && _jsx(PersonaView, { view: profile?.persona, base: base, scopeId: scopeId, enabled: enabled, changed: changed }), 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 === 'memory' && _jsxs(_Fragment, { children: [_jsxs("p", { className: "dsh-partner-memory-hint", children: ["\u5F53\u524D\u8BB0\u5FC6\u8303\u56F4\u6700\u8FD1 100 \u6761\u4E2D\uFF0C\u5339\u914D ", filtered.length, " \u6761\u3002\u70B9\u51FB\u67E5\u770B\u4F9D\u636E\u3001\u53EF\u4FE1\u5EA6\u6216\u4FEE\u6539\u5185\u5BB9\u3002"] }), _jsx("div", { className: "dsh-partner-memory-rows dsh-partner-memory-list", children: filtered.slice(0, limit).map(row) }), !filtered.length && _jsx(CollectionEmpty, { title: "\u6CA1\u6709\u5339\u914D\u7684\u8BB0\u5FC6", detail: "\u53EF\u4EE5\u5207\u6362\u7C7B\u578B\u6216\u72B6\u6001\u67E5\u770B\u5176\u4ED6\u8BB0\u5FC6\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
  }
38
39
  //# sourceMappingURL=memory-library.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"memory-library.js","sourceRoot":"","sources":["../../../src/ui/memory/memory-library.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"memory-library.js","sourceRoot":"","sources":["../../../src/ui/memory/memory-library.tsx"],"names":[],"mappings":"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"}
@@ -1 +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;AAQjF,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,CAqCd"}
1
+ {"version":3,"file":"memory-panel.d.ts","sourceRoot":"","sources":["../../../src/ui/memory/memory-panel.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAM,KAAK,aAAa,EAAE,KAAK,eAAe,EAAC,MAAM,qBAAqB,CAAA;AAQjF,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,CA0Cd"}
@@ -1,5 +1,6 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useRef, useState } from 'react';
2
+ import { useEffect, useRef, useState } from 'react';
3
+ import { conversationMemoryScope } from '../../memory-scope.js';
3
4
  import { IconRefreshOutline16 } from '@deepseek-ai/dsh-client-ui-primitives';
4
5
  import { api } from '../../client-api.js';
5
6
  import { WorkspaceHero, WorkspaceNotice, CollectionEmpty, errorMessage } from '../workspace-components.js';
@@ -16,10 +17,16 @@ export function MemoryPanel({ companion, snapshot, openSession, startSession, re
16
17
  const [error, setError] = useState();
17
18
  const [notice, setNotice] = useState();
18
19
  const base = `/companions/${encodeURIComponent(companion.id)}`;
19
- const initialScope = sessions[0] ? `${sessions[0].channelId}:${sessions[0].userId}` : '';
20
+ const initialScope = sessions[0] ? conversationMemoryScope(sessions[0], sessions) : '';
20
21
  const requested = requestedScope || initialScope;
21
22
  const collection = useMemoryResource(`${base}/memory${requested ? `?${new URLSearchParams({ scopeId: requested })}` : ''}`, 15_000);
22
23
  const scopeId = requested || collection.data?.profiles[0]?.scopeId || '';
24
+ useEffect(() => {
25
+ const profiles = collection.data?.profiles;
26
+ if (!profiles?.length || profiles.some(profile => profile.scopeId === requested))
27
+ return;
28
+ setScope(profiles.find(profile => profile.scopeId === initialScope)?.scopeId ?? profiles[0].scopeId);
29
+ }, [collection.data, requested, initialScope]);
23
30
  const layers = useMemoryResource(scopeId ? `${base}/memory/layers?${new URLSearchParams({ scopeId })}` : undefined, 15_000);
24
31
  const reload = async () => { await Promise.all([collection.reload(), layers.reload()]); };
25
32
  const run = async (action, success) => {
@@ -45,6 +52,6 @@ export function MemoryPanel({ companion, snapshot, openSession, startSession, re
45
52
  const retries = layers.data?.retryCount ?? layers.data?.jobs.filter(job => job.status === 'retrying').length ?? 0;
46
53
  const [showAllJobs, setShowAllJobs] = useState(false);
47
54
  const scopes = collection.data?.profiles ?? [];
48
- 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: [layers.data.jobCount ?? layers.data.jobs.length, " \u9879\u5C1A\u672A\u6574\u7406 \u00B7 ", retries, " \u9879\u5931\u8D25\u91CD\u8BD5", _jsx("small", { children: "\u539F\u59CB\u5BF9\u8BDD\u5DF2\u4FDD\u5B58\uFF0C\u4E0D\u5F71\u54CD\u7EE7\u7EED\u804A\u5929" })] }), _jsxs("div", { children: [layers.data.jobs.slice(0, showAllJobs ? 100 : 10).map(job => _jsxs("div", { children: [_jsxs("span", { children: [job.at && _jsx("small", { children: new Date(job.at).toLocaleString() }), job.status === 'processing' ? '正在整理' : job.status === 'retrying' ? `已失败 ${job.attempts} 次 · 下次 ${new Date(job.nextAt).toLocaleTimeString()}` : '等待执行,无需重复提交', _jsx(MemoryJobFeedback, { status: job.status, ...(job.error ? { error: job.error } : {}) }), job.attempts >= 3 && job.status === 'retrying' && _jsx("small", { children: "\u9000\u907F\u671F\u95F4\u5141\u8BB8\u540E\u7EED\u4EFB\u52A1\u7EE7\u7EED\u6574\u7406" })] }), job.status === 'retrying' && _jsx("button", { type: "button", disabled: busy, onClick: () => { void run(async () => { await api(`${base}/memory/jobs/${encodeURIComponent(job.id)}?${new URLSearchParams({ scopeId })}`, { method: 'POST' }); }, '已安排重试,当前执行结束后处理'); }, children: "\u91CD\u65B0\u6392\u961F" })] }, job.id)), layers.data.jobs.length > 10 && _jsx("button", { type: "button", onClick: () => setShowAllJobs(!showAllJobs), children: showAllJobs ? '收起' : '显示更多任务' }), (layers.data.jobCount ?? 0) > 100 && _jsx("p", { children: "\u4EC5\u5C55\u793A\u6700\u65E9100\u9879\uFF0C\u5B8C\u6210\u540E\u81EA\u52A8\u8865\u5145\u540E\u7EED\u4EFB\u52A1\u3002" })] })] }), !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(); } })] });
55
+ 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: "\u8BB0\u5FC6\u8303\u56F4" }), _jsxs("select", { "aria-label": "\u8BB0\u5FC6\u8303\u56F4", 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: 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: [layers.data.jobCount ?? layers.data.jobs.length, " \u9879\u5C1A\u672A\u6574\u7406 \u00B7 ", retries, " \u9879\u5931\u8D25\u91CD\u8BD5", _jsx("small", { children: "\u539F\u59CB\u5BF9\u8BDD\u5DF2\u4FDD\u5B58\uFF0C\u4E0D\u5F71\u54CD\u7EE7\u7EED\u804A\u5929" })] }), _jsxs("div", { children: [layers.data.jobs.slice(0, showAllJobs ? 100 : 10).map(job => _jsxs("div", { children: [_jsxs("span", { children: [job.at && _jsx("small", { children: new Date(job.at).toLocaleString() }), job.status === 'processing' ? '正在整理' : job.status === 'retrying' ? `已失败 ${job.attempts} 次 · 下次 ${new Date(job.nextAt).toLocaleTimeString()}` : '等待执行,无需重复提交', _jsx(MemoryJobFeedback, { status: job.status, ...(job.error ? { error: job.error } : {}) }), job.attempts >= 3 && job.status === 'retrying' && _jsx("small", { children: "\u9000\u907F\u671F\u95F4\u5141\u8BB8\u540E\u7EED\u4EFB\u52A1\u7EE7\u7EED\u6574\u7406" })] }), job.status === 'retrying' && _jsx("button", { type: "button", disabled: busy, onClick: () => { void run(async () => { await api(`${base}/memory/jobs/${encodeURIComponent(job.id)}?${new URLSearchParams({ scopeId })}`, { method: 'POST' }); }, '已安排重试,当前执行结束后处理'); }, children: "\u91CD\u65B0\u6392\u961F" })] }, job.id)), layers.data.jobs.length > 10 && _jsx("button", { type: "button", onClick: () => setShowAllJobs(!showAllJobs), children: showAllJobs ? '收起' : '显示更多任务' }), (layers.data.jobCount ?? 0) > 100 && _jsx("p", { children: "\u4EC5\u5C55\u793A\u6700\u65E9100\u9879\uFF0C\u5B8C\u6210\u540E\u81EA\u52A8\u8865\u5145\u540E\u7EED\u4EFB\u52A1\u3002" })] })] }), !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, enabled: companion.automation.memory.enabled, 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(); } })] });
49
56
  }
50
57
  //# sourceMappingURL=memory-panel.js.map