@klarkxy/dsh-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 +41 -0
- package/README.md +40 -0
- package/cordis.patch.yml +5 -0
- package/docs/README.zh-CN.md +9 -0
- package/lib/client.inner.cjs +1036 -0
- package/lib/client.inner.cjs.map +1 -0
- package/lib/client.js +1206 -0
- package/lib/contracts.d.ts +122 -0
- package/lib/contracts.js +81 -0
- package/lib/contracts.js.map +1 -0
- package/lib/index.d.ts +110 -0
- package/lib/index.js +1515 -0
- package/lib/index.js.map +1 -0
- package/package.json +105 -0
package/lib/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["fail"],"sources":["../src/idle.ts","../src/errors.ts","../src/storage.ts","../src/rpc.ts","../src/recall.ts","../src/dream.ts","../src/evidence.ts","../src/inject.ts","../src/capacity.ts","../src/store.ts","../src/service.ts","../src/index.ts"],"sourcesContent":["import { DREAM_MIN_INTERVAL_MS, DREAM_MIN_MATERIAL } from './contracts.ts'\nimport type { MemoryRecord, MemoryTombstone } from './contracts.ts'\n\nexport function shouldRunIdleDream(input: {\n dreamIdleEnabled: boolean\n pluginActive: boolean\n agentIdle: boolean\n dreamRunning: boolean\n lastActivityAt: number\n now: number\n idleMs: number\n lastAttemptAt?: number\n minIntervalMs?: number\n materialCount: number\n minMaterial?: number\n}): boolean {\n if (!input.dreamIdleEnabled || !input.pluginActive || !input.agentIdle || input.dreamRunning) return false\n if (input.now - input.lastActivityAt < input.idleMs) return false\n if (input.lastAttemptAt !== undefined && input.now - input.lastAttemptAt < (input.minIntervalMs ?? DREAM_MIN_INTERVAL_MS)) return false\n return input.materialCount >= (input.minMaterial ?? DREAM_MIN_MATERIAL)\n}\n\nexport function countDreamMaterial(\n state: {\n records: ReadonlyArray<Pick<MemoryRecord, 'createdAt' | 'updatedAt'>>\n tombstones: ReadonlyArray<Pick<MemoryTombstone, 'deletedAt'>>\n },\n since: number | undefined,\n): number {\n if (since === undefined) return state.records.length\n let count = 0\n for (const record of state.records) {\n if (record.createdAt > since || record.updatedAt > since) count += 1\n }\n for (const row of state.tombstones) {\n if (row.deletedAt > since) count += 1\n }\n return count\n}\n\nexport function nextIdleDeadline(idleAt: number, idleMs: number): number {\n return idleAt + idleMs\n}\n","export class MemoryError extends Error {\n constructor(message: string, readonly code: string) {\n super(message)\n this.name = 'MemoryError'\n }\n}\n\nexport const MEMORY_CONFLICT = 'MEMORY_CONFLICT'\nexport const MEMORY_INVALID = 'MEMORY_INVALID'\nexport const MEMORY_NOT_FOUND = 'MEMORY_NOT_FOUND'\nexport const MEMORY_DISABLED = 'MEMORY_DISABLED'\nexport const MEMORY_SAVE_FAILED = 'MEMORY_SAVE_FAILED'\nexport const MEMORY_CAPACITY = 'MEMORY_CAPACITY'\nexport const MEMORY_SCOPE = 'MEMORY_SCOPE'\nexport const MEMORY_EVIDENCE = 'MEMORY_EVIDENCE'\nexport const MEMORY_TOMBSTONE = 'MEMORY_TOMBSTONE'\nexport const MEMORY_STALE = 'MEMORY_STALE'\nexport const MEMORY_AI_UNAVAILABLE = 'MEMORY_AI_UNAVAILABLE'\nexport const MEMORY_CANCELLED = 'MEMORY_CANCELLED'\nexport const MEMORY_DELETED = 'MEMORY_DELETED'\n\nexport function fail(code: string, message: string): never {\n throw new MemoryError(message, code)\n}\n\nexport function isAbortError(error: unknown): boolean {\n if (!error || typeof error !== 'object') return false\n const name = 'name' in error ? String(error.name) : ''\n const code = 'code' in error ? String((error as { code?: unknown }).code) : ''\n return name === 'AbortError' || name === 'TimeoutError' || code === 'ABORT_ERR' || code === 'ABORTED'\n}\n","import { defineDomain, domainTable } from '@deepseek-ai/dsh-storage-domain'\nimport { z } from 'zod'\nimport {\n defaultSettings, MAX_PROJECT_ID_CHARS, type DreamPlan, type MemoryPersistedState, type MemoryRecord,\n type MemorySettings, type MemoryTombstone,\n} from './contracts.ts'\n\nexport const evidenceSchema = z.object({\n sessionId: z.string().min(1).max(200),\n seq: z.number().int().nonnegative(),\n kind: z.enum(['user', 'tool', 'turn', 'manual']),\n excerpt: z.string().max(400).optional(),\n}).strict()\n\nexport const knowledgeScopeSchema = z.discriminatedUnion('kind', [\n z.object({ kind: z.literal('global') }).strict(),\n z.object({ kind: z.literal('project'), projectId: z.string().min(1).max(MAX_PROJECT_ID_CHARS) }).strict(),\n])\n\nexport const basisRefSchema = z.object({\n id: z.string().min(1).max(80),\n revision: z.number().int().nonnegative(),\n}).strict()\n\nexport const memoryRecordSchema = z.object({\n id: z.string().min(1).max(80),\n revision: z.number().int().nonnegative(),\n scope: knowledgeScopeSchema,\n kind: z.enum(['preference', 'project-fact', 'decision', 'lesson']),\n status: z.enum(['candidate', 'active', 'rejected', 'superseded', 'revoked', 'deleted']),\n title: z.string().min(1).max(160),\n content: z.string().min(1).max(4000),\n tags: z.array(z.string().min(1).max(40)).max(16),\n evidence: z.array(evidenceSchema).max(16),\n exceptions: z.array(z.string().max(200)).max(16),\n source: z.enum(['user', 'memory', 'dream', 'self-improvement']),\n createdAt: z.number().int().nonnegative(),\n updatedAt: z.number().int().nonnegative(),\n expiresAt: z.number().int().positive().optional(),\n supersedes: z.array(z.string().min(1).max(80)).max(32).optional(),\n basis: z.array(basisRefSchema).max(16).optional(),\n}).strict()\n\nexport const newMemoryRecordSchema = memoryRecordSchema.omit({\n id: true, revision: true, createdAt: true, updatedAt: true,\n})\n\nexport const settingsSchema = z.object({\n revision: z.number().int().nonnegative(),\n injectEnabled: z.boolean(),\n dreamIdleEnabled: z.boolean(),\n idleMs: z.number().int().min(60_000).max(180 * 60_000),\n}).strict()\n\nexport const updateSettingsSchema = z.object({\n expectedRevision: z.number().int().nonnegative(),\n settings: settingsSchema.omit({ revision: true }),\n}).strict()\n\nexport const tombstoneSchema = z.object({\n id: z.string().min(1).max(80),\n deletedAt: z.number().int().nonnegative(),\n lastRevision: z.number().int().nonnegative(),\n}).strict()\n\nexport const dreamSnapshotSchema = z.object({\n id: z.string().min(1).max(80),\n revision: z.number().int().nonnegative(),\n status: memoryRecordSchema.shape.status,\n scope: knowledgeScopeSchema,\n expiresAt: z.number().int().positive().optional(),\n}).strict()\n\nexport const dreamProposalSchema = z.object({\n title: z.string().min(1).max(160),\n content: z.string().min(1).max(4000),\n kind: z.enum(['preference', 'project-fact', 'decision']),\n tags: z.array(z.string().min(1).max(40)).max(16),\n exceptions: z.array(z.string().max(200)).max(16),\n evidence: z.array(evidenceSchema).max(16),\n sourceIds: z.array(z.string().min(1).max(80)).min(1).max(16),\n scope: knowledgeScopeSchema,\n}).strict()\n\nexport const dreamPlanSchema = z.object({\n id: z.string().min(1).max(80),\n revision: z.number().int().nonnegative(),\n sessionId: z.string().min(1).max(200),\n projectId: z.string().min(1).max(MAX_PROJECT_ID_CHARS).optional(),\n status: z.enum(['preview', 'applied', 'cancelled', 'stale', 'failed', 'noop']),\n sourceVersion: z.string().min(1).max(64),\n snapshot: z.array(dreamSnapshotSchema).max(64),\n proposals: z.array(dreamProposalSchema).max(16),\n generation: z.number().int().nonnegative(),\n createdAt: z.number().int().nonnegative(),\n updatedAt: z.number().int().nonnegative(),\n error: z.string().max(240).optional(),\n}).strict()\n\nexport const createRpcSchema = z.object({\n sessionId: z.string().min(1).max(200),\n title: z.string().min(1).max(160),\n content: z.string().min(1).max(4000),\n kind: z.enum(['preference', 'project-fact', 'decision', 'lesson']),\n global: z.boolean().optional(),\n tags: z.array(z.string().min(1).max(40)).max(16).optional(),\n exceptions: z.array(z.string().max(200)).max(16).optional(),\n evidence: z.array(evidenceSchema).max(16).optional(),\n expiresAt: z.number().int().positive().optional(),\n}).strict()\n\nexport const patchRpcSchema = z.object({\n sessionId: z.string().min(1).max(200),\n id: z.string().min(1).max(80),\n expectedRevision: z.number().int().nonnegative(),\n title: z.string().min(1).max(160).optional(),\n content: z.string().min(1).max(4000).optional(),\n tags: z.array(z.string().min(1).max(40)).max(16).optional(),\n exceptions: z.array(z.string().max(200)).max(16).optional(),\n status: memoryRecordSchema.shape.status.optional(),\n expiresAt: z.number().int().positive().optional(),\n}).strict()\n\nexport const revisionRpcSchema = z.object({\n sessionId: z.string().min(1).max(200),\n id: z.string().min(1).max(80),\n expectedRevision: z.number().int().nonnegative(),\n}).strict()\n\nexport const listRpcSchema = z.object({\n sessionId: z.string().min(1).max(200),\n query: z.string().max(200).optional(),\n kinds: z.array(memoryRecordSchema.shape.kind).max(4).optional(),\n statuses: z.array(memoryRecordSchema.shape.status).max(8).optional(),\n global: z.boolean().optional(),\n limit: z.number().int().min(1).max(100).optional(),\n}).strict()\n\nexport const MAX_MEMORY_RECORDS = 4096\nexport const MAX_MEMORY_TOMBSTONES = 4096\nexport const MAX_MEMORY_DREAMS = 256\n\nexport const memoryStateSchema = z.object({\n settings: settingsSchema,\n records: z.array(memoryRecordSchema).max(MAX_MEMORY_RECORDS),\n tombstones: z.array(tombstoneSchema).max(MAX_MEMORY_TOMBSTONES),\n dreams: z.array(dreamPlanSchema).max(MAX_MEMORY_DREAMS),\n lastAttemptAt: z.number().int().nonnegative().optional(),\n}).strict()\n\nexport const memoryDomain = defineDomain({\n name: 'dsh_editor_memory',\n version: 2,\n tables: {\n state: domainTable<string, MemoryPersistedState>(memoryStateSchema),\n },\n})\n\nexport function storedSettings(value: MemorySettings | undefined): MemorySettings {\n return value ? { ...defaultSettings(), ...value } : defaultSettings()\n}\n\nexport type { DreamPlan, MemoryRecord, MemoryTombstone }\n","import type { RpcResult } from './contracts.ts'\nimport { fail, ok, parseSessionId, projectIdFromCwd, sessionCwd } from './contracts.ts'\nimport { MemoryError } from './errors.ts'\nimport type { MemoryRuntime } from './service.ts'\nimport {\n createRpcSchema, listRpcSchema, patchRpcSchema, revisionRpcSchema, updateSettingsSchema,\n} from './storage.ts'\n\nexport type SessionLookup = (sessionId: string) => unknown\n\nexport async function handleMemoryRpc(\n endpoint: string,\n payload: unknown,\n signal: AbortSignal,\n runtime: MemoryRuntime,\n sessions: SessionLookup,\n): Promise<RpcResult> {\n if (signal.aborted) return fail('MEMORY_CANCELLED', '请求已取消')\n try {\n if (endpoint === 'status') {\n const sessionId = parseSessionId(payload)\n return ok(await runtime.readStatus(sessionId, sessionId ? projectOf(sessions, sessionId) : undefined))\n }\n if (endpoint === 'settings.update') {\n const parsed = updateSettingsSchema.safeParse(payload)\n if (!parsed.success) return fail('MEMORY_INVALID', '记忆设置格式无效。')\n return ok(await runtime.updateSettings(parsed.data.settings, parsed.data.expectedRevision))\n }\n if (endpoint === 'records.list') {\n const parsed = listRpcSchema.safeParse(payload)\n if (!parsed.success) return fail('MEMORY_INVALID', '查询格式无效。')\n const projectId = projectOf(sessions, parsed.data.sessionId)\n const scope = parsed.data.global === true || !projectId\n ? { kind: 'global' as const }\n : { kind: 'project' as const, projectId }\n return ok(await runtime.list({\n scope,\n query: parsed.data.query,\n kinds: parsed.data.kinds,\n statuses: parsed.data.statuses,\n limit: parsed.data.limit,\n }))\n }\n if (endpoint === 'records.create') {\n const parsed = createRpcSchema.safeParse(payload)\n if (!parsed.success) return fail('MEMORY_INVALID', '新增条目格式无效。')\n const projectId = projectOf(sessions, parsed.data.sessionId)\n return ok(await runtime.createManualRecord({\n sessionId: parsed.data.sessionId,\n projectId,\n explicitGlobal: parsed.data.global === true,\n title: parsed.data.title,\n content: parsed.data.content,\n kind: parsed.data.kind,\n tags: parsed.data.tags,\n exceptions: parsed.data.exceptions,\n evidence: parsed.data.evidence,\n expiresAt: parsed.data.expiresAt,\n }))\n }\n if (endpoint === 'records.update') {\n const parsed = patchRpcSchema.safeParse(payload)\n if (!parsed.success) return fail('MEMORY_INVALID', '更新格式无效。')\n const { id, expectedRevision, sessionId: _sessionId, ...patch } = parsed.data\n return ok(await runtime.update(id, patch, expectedRevision))\n }\n if (endpoint === 'records.remove') {\n const parsed = revisionRpcSchema.safeParse(payload)\n if (!parsed.success) return fail('MEMORY_INVALID', '删除参数无效。')\n await runtime.remove(parsed.data.id, parsed.data.expectedRevision)\n return ok({ id: parsed.data.id })\n }\n if (endpoint === 'records.accept') return mutation(runtime.accept.bind(runtime), payload)\n if (endpoint === 'records.reject') return mutation(runtime.reject.bind(runtime), payload)\n if (endpoint === 'records.revoke') return mutation(runtime.revoke.bind(runtime), payload)\n if (endpoint === 'dream.run') {\n const sessionId = parseSessionId(payload)\n if (!sessionId) return fail('MEMORY_INVALID', '缺少会话。')\n return ok(await runtime.runIdleDream(sessionId, projectOf(sessions, sessionId), 'manual'))\n }\n return fail('MEMORY_INVALID', '未知操作。')\n } catch (error) {\n const code = error instanceof MemoryError ? error.code : 'MEMORY_FAILED'\n return fail(code, error instanceof Error ? error.message : '记忆操作失败。')\n }\n}\n\nfunction projectOf(sessions: SessionLookup, sessionId: string): string | undefined {\n return projectIdFromCwd(sessionCwd(sessions(sessionId)))\n}\n\nasync function mutation(\n run: (id: string, expectedRevision: number) => Promise<unknown>,\n payload: unknown,\n): Promise<RpcResult> {\n const parsed = revisionRpcSchema.safeParse(payload)\n if (!parsed.success) return fail('MEMORY_INVALID', '参数无效。')\n return ok(await run(parsed.data.id, parsed.data.expectedRevision))\n}\n","import {\n INJECT_KINDS, MAX_RECALL_RECORDS, MAX_RECALL_TOKENS, MEMORY_INJECTION_SECTION, MEMORY_PLUGIN,\n RECALL_EXCLUDED_STATUSES, scopeKey,\n type KnowledgeKind, type KnowledgeScope, type MemoryQuery, type MemoryRecord,\n} from './contracts.ts'\n\nexport function estimateTokens(text: string): number {\n let tokens = 0\n for (const char of text) tokens += char.charCodeAt(0) > 127 ? 1 : 0.25\n return Math.max(1, Math.ceil(tokens))\n}\n\nexport function isExpired(record: Pick<MemoryRecord, 'expiresAt'>, now: number): boolean {\n return typeof record.expiresAt === 'number' && record.expiresAt <= now\n}\n\nexport function scopeMatches(record: KnowledgeScope, query: KnowledgeScope): boolean {\n if (query.kind === 'global') return record.kind === 'global'\n if (record.kind === 'global') return true\n return record.kind === 'project' && record.projectId === query.projectId\n}\n\nexport function recordMatchesQuery(record: MemoryRecord, query: MemoryQuery, now: number): boolean {\n if (!scopeMatches(record.scope, query.scope)) return false\n if (query.kinds && query.kinds.length > 0 && !query.kinds.includes(record.kind)) return false\n if (query.statuses && query.statuses.length > 0 && !query.statuses.includes(record.status)) return false\n if (query.query) {\n const needle = query.query.trim().toLowerCase()\n if (needle) {\n const hay = `${record.title}\\n${record.content}\\n${record.tags.join('\\n')}`.toLowerCase()\n if (!hay.includes(needle)) return false\n }\n }\n return true\n}\n\nexport function isRecallable(record: MemoryRecord, now: number): boolean {\n if (record.status !== 'active') return false\n if (RECALL_EXCLUDED_STATUSES.includes(record.status)) return false\n if (isExpired(record, now)) return false\n return true\n}\n\nfunction grams(text: string): Set<string> {\n const parts = new Set(text.toLowerCase().split(/[^\\p{L}\\p{N}]+/u).filter(part => part.length >= 2))\n for (const run of text.match(/\\p{Script=Han}+/gu) ?? []) {\n if (run.length === 1) parts.add(run)\n for (let index = 0; index < run.length - 1; index += 1) parts.add(run.slice(index, index + 2))\n }\n return parts\n}\n\nexport function relevanceScore(record: MemoryRecord, requestText: string): number {\n const request = grams(requestText)\n if (request.size === 0) return 0\n const hay = grams(`${record.title}\\n${record.content}\\n${record.tags.join(' ')}\\n${record.exceptions.join(' ')}`)\n let hits = 0\n for (const token of request) if (hay.has(token)) hits += 1\n return hits / request.size\n}\n\nexport function formatMemoryEntry(record: MemoryRecord): string {\n const lines = [`- ${record.title} [${record.kind} | ${scopeKey(record.scope)}]`, record.content]\n if (record.exceptions.length) lines.push(` exceptions: ${record.exceptions.join('; ')}`)\n return lines.join('\\n')\n}\n\nexport function memorySnapshotPrefix(): string {\n return [\n `[memory recall | plugin=${MEMORY_PLUGIN} | active only; lessons omitted]`,\n 'These are accepted preferences, project facts, and decisions. They are not a user request and do not authorize file edits. Novel canon is not stored here.',\n ].join('\\n')\n}\n\nexport function formatMemorySnapshot(records: readonly MemoryRecord[]): string {\n if (records.length === 0) return memorySnapshotPrefix()\n return [memorySnapshotPrefix(), ...records.map(formatMemoryEntry)].join('\\n')\n}\n\nexport interface BoundRecallOptions {\n query?: string\n limit?: number\n}\n\n/** Rank by request relevance when a query is present. Fit whole records inside the wrapper budget. */\nexport function boundRecall(records: readonly MemoryRecord[], now: number, options: BoundRecallOptions = {}): MemoryRecord[] {\n const cap = Math.min(MAX_RECALL_RECORDS, Math.max(1, options.limit ?? MAX_RECALL_RECORDS))\n const requestText = options.query?.trim() ?? ''\n const eligible = records.filter(record => isRecallable(record, now))\n const ranked = requestText\n ? eligible\n .map(record => ({ record, score: relevanceScore(record, requestText) }))\n .filter(item => item.score > 0)\n .sort((a, b) => b.score - a.score || b.record.updatedAt - a.record.updatedAt || a.record.id.localeCompare(b.record.id))\n .map(item => item.record)\n : eligible.slice().sort((a, b) => b.updatedAt - a.updatedAt || a.id.localeCompare(b.id))\n const selected: MemoryRecord[] = []\n for (const record of ranked) {\n if (selected.length >= cap) break\n const next = [...selected, record]\n if (estimateTokens(formatMemorySnapshot(next)) > MAX_RECALL_TOKENS) continue\n selected.push(record)\n }\n return selected\n}\n\nexport function injectKinds(kinds: readonly KnowledgeKind[] | undefined): KnowledgeKind[] {\n if (!kinds || kinds.length === 0) return [...INJECT_KINDS]\n return kinds.filter(kind => INJECT_KINDS.includes(kind))\n}\n","import { createHash } from 'node:crypto'\nimport {\n scopeKey, scopesEqual,\n type DreamPlan, type DreamProposal, type DreamSnapshotEntry, type KnowledgeScope, type MemoryPersistedState,\n type MemoryRecord,\n} from './contracts.ts'\nimport { fail, MEMORY_INVALID, MEMORY_STALE, MEMORY_TOMBSTONE } from './errors.ts'\nimport { isExpired } from './recall.ts'\n\nexport const DREAM_SYSTEM = [\n 'Consolidate the supplied memory records into merge or dedup candidate previews.',\n 'Keep each proposal in the same scope as its sources. Never expand a project record to global.',\n 'Do not rewrite active records in place. Do not invent preferences without quoted evidence.',\n 'Do not treat novel canon or worldbook text as Memory.',\n 'Expiry is a retention bound. Do not infer that a planned event completed merely because a date has elapsed.',\n 'A derived candidate must not outlive its sources. Do not drop or extend expiry to make knowledge perpetual.',\n 'Reply with JSON {\"proposals\":[{\"title\":string,\"content\":string,\"kind\":\"preference\"|\"project-fact\"|\"decision\",\"sourceIds\":string[],\"exceptions\":string[]}]} or {\"proposals\":[]}.',\n].join(' ')\n\nexport function isDreamSource(record: MemoryRecord, now: number): boolean {\n if (record.kind === 'lesson') return false\n if (record.status !== 'active' && record.status !== 'candidate') return false\n if (isExpired(record, now)) return false\n return true\n}\n\nexport function snapshotRecords(records: readonly MemoryRecord[]): DreamSnapshotEntry[] {\n return records.map(record => ({\n id: record.id,\n revision: record.revision,\n status: record.status,\n scope: structuredClone(record.scope),\n expiresAt: record.expiresAt,\n })).sort((a, b) => a.id.localeCompare(b.id))\n}\n\n/** Bounded CAS token. Exact revisions still live on snapshot/basis, not in this hash. */\nexport function dreamSourceVersion(snapshot: readonly DreamSnapshotEntry[]): string {\n const canonical = snapshot\n .map(entry => `${entry.id}@${entry.revision}:${entry.status}:${scopeKey(entry.scope)}:${entry.expiresAt ?? ''}`)\n .sort()\n .join('\\n')\n return createHash('sha256').update(canonical).digest('hex')\n}\n\nexport function earliestExpiry(records: readonly Pick<MemoryRecord, 'expiresAt'>[]): number | undefined {\n let min: number | undefined\n for (const record of records) {\n if (typeof record.expiresAt !== 'number') continue\n min = min === undefined ? record.expiresAt : Math.min(min, record.expiresAt)\n }\n return min\n}\n\nexport function parseDreamText(text: string, snapshot: readonly DreamSnapshotEntry[], fallbackScope: KnowledgeScope): DreamProposal[] {\n const trimmed = text.trim()\n if (!trimmed) return []\n const fenced = trimmed.match(/```(?:json)?\\s*([\\s\\S]*?)```/i)\n const body = (fenced?.[1] ?? trimmed).trim()\n const start = body.indexOf('{')\n const end = body.lastIndexOf('}')\n if (start < 0 || end <= start) return []\n let parsed: unknown\n try { parsed = JSON.parse(body.slice(start, end + 1)) } catch { return [] }\n if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) return []\n const raw = (parsed as { proposals?: unknown }).proposals\n if (!Array.isArray(raw)) return []\n const byId = new Map(snapshot.map(entry => [entry.id, entry]))\n const proposals: DreamProposal[] = []\n for (const item of raw.slice(0, 16)) {\n if (!item || typeof item !== 'object' || Array.isArray(item)) continue\n const row = item as Record<string, unknown>\n if (typeof row.title !== 'string' || typeof row.content !== 'string') continue\n const kind = row.kind === 'preference' || row.kind === 'project-fact' || row.kind === 'decision' ? row.kind : undefined\n if (!kind) continue\n const sourceIds = Array.isArray(row.sourceIds)\n ? [...new Set(row.sourceIds.filter((id): id is string => typeof id === 'string' && byId.has(id)))].slice(0, 16)\n : []\n if (sourceIds.length === 0) continue\n const sources = sourceIds.map(id => byId.get(id)!).filter(entry => entry.status === 'active' || entry.status === 'candidate')\n if (sources.length === 0) continue\n const scope = sources[0]!.scope\n if (sources.some(entry => !scopesEqual(entry.scope, scope))) continue\n if (scope.kind === 'project' && fallbackScope.kind === 'global') continue\n if (fallbackScope.kind === 'project' && scope.kind === 'global') continue\n const exceptions = Array.isArray(row.exceptions)\n ? row.exceptions.filter((value): value is string => typeof value === 'string').map(value => value.trim()).filter(Boolean).slice(0, 8)\n : []\n proposals.push({\n title: row.title.trim().slice(0, 160),\n content: row.content.trim().slice(0, 4000),\n kind,\n tags: ['dream'],\n exceptions,\n evidence: [],\n sourceIds,\n scope: structuredClone(scope),\n })\n }\n return proposals.filter(proposal => proposal.title && proposal.content)\n}\n\nexport function recordMap(state: MemoryPersistedState): Map<string, MemoryRecord> {\n return new Map(state.records.map(record => [record.id, record]))\n}\n\nexport function tombstoneSet(state: MemoryPersistedState): Set<string> {\n return new Set(state.tombstones.map(row => row.id))\n}\n\nfunction assertLiveUnexpired(\n record: MemoryRecord | undefined,\n tombstoned: ReadonlySet<string>,\n id: string,\n now: number,\n missing: string,\n): MemoryRecord {\n if (tombstoned.has(id)) fail(MEMORY_TOMBSTONE, '记录已删除,不能由梦境恢复。')\n if (!record) fail(MEMORY_STALE, missing)\n if (record.status === 'deleted') fail(MEMORY_TOMBSTONE, '记录已删除,不能由梦境恢复。')\n if (isExpired(record, now)) fail(MEMORY_STALE, '依据记录已过期,梦境预览作废。')\n return record\n}\n\nexport function assertDreamApply(\n plan: DreamPlan,\n current: ReadonlyMap<string, MemoryRecord>,\n tombstoned: ReadonlySet<string>,\n now: number,\n): void {\n if (plan.status !== 'preview') fail(MEMORY_INVALID, '只能应用未处理的梦境预览。')\n if (dreamSourceVersion(plan.snapshot) !== plan.sourceVersion) fail(MEMORY_STALE, '梦境快照已失效。')\n for (const entry of plan.snapshot) {\n const record = assertLiveUnexpired(current.get(entry.id), tombstoned, entry.id, now, '梦境所依据的记录已不存在。')\n if (record.revision !== entry.revision) fail(MEMORY_STALE, '记录已被修改或删除,梦境预览作废。')\n if (!scopesEqual(record.scope, entry.scope)) fail(MEMORY_STALE, '记录范围已变化,未扩大或覆盖。')\n if ((record.expiresAt ?? undefined) !== (entry.expiresAt ?? undefined)) fail(MEMORY_STALE, '记录有效期已变化,梦境预览作废。')\n }\n for (const proposal of plan.proposals) {\n if (proposal.scope.kind === 'global' && plan.snapshot.some(entry => proposal.sourceIds.includes(entry.id) && entry.scope.kind === 'project')) {\n fail(MEMORY_INVALID, '梦境不能把项目记忆扩大为全局。')\n }\n for (const sourceId of proposal.sourceIds) {\n assertLiveUnexpired(current.get(sourceId), tombstoned, sourceId, now, '合并来源已不存在。')\n }\n }\n}\n\n/** Exact source revisions behind a derived candidate. Missing basis skips (manual adds). */\nexport function assertBasisCurrent(\n record: Pick<MemoryRecord, 'basis' | 'expiresAt'>,\n current: ReadonlyMap<string, MemoryRecord>,\n tombstoned: ReadonlySet<string>,\n now: number,\n): void {\n if (isExpired(record, now)) fail(MEMORY_STALE, '候选已过期,不能采纳。')\n if (!record.basis?.length) return\n for (const ref of record.basis) {\n if (tombstoned.has(ref.id)) fail(MEMORY_TOMBSTONE, '依据记录已删除,不能采纳。')\n const live = current.get(ref.id)\n if (!live) fail(MEMORY_STALE, '依据记录已不存在,候选作废。')\n if (live.revision !== ref.revision) fail(MEMORY_STALE, '依据记录已修改,须按当前版本重新整理。')\n if (live.status === 'deleted') fail(MEMORY_TOMBSTONE, '依据记录已删除,不能采纳。')\n if (isExpired(live, now)) fail(MEMORY_STALE, '依据记录已过期,不能采纳。')\n }\n}\n\nexport function stampInheritedExpiry<T extends { expiresAt?: number }>(\n record: T,\n sources: readonly Pick<MemoryRecord, 'expiresAt'>[],\n): T {\n const inherited = earliestExpiry(sources)\n if (inherited === undefined) return record\n const current = record.expiresAt\n record.expiresAt = current === undefined ? inherited : Math.min(current, inherited)\n return record\n}\n\nexport function basisFromSnapshot(snapshot: readonly DreamSnapshotEntry[], sourceIds: readonly string[]): Array<{ id: string; revision: number }> {\n const byId = new Map(snapshot.map(entry => [entry.id, entry]))\n const basis: Array<{ id: string; revision: number }> = []\n for (const id of sourceIds) {\n const entry = byId.get(id)\n if (!entry) continue\n basis.push({ id: entry.id, revision: entry.revision })\n }\n return basis\n}\n\nexport function inheritEvidence(records: readonly MemoryRecord[], sourceIds: readonly string[]): DreamProposal['evidence'] {\n const seen = new Set<string>()\n const evidence: DreamProposal['evidence'] = []\n for (const id of sourceIds) {\n const record = records.find(item => item.id === id)\n if (!record) continue\n for (const ref of record.evidence) {\n const key = `${ref.sessionId}:${ref.seq}:${ref.kind}`\n if (seen.has(key)) continue\n seen.add(key)\n evidence.push({ ...ref })\n }\n }\n return evidence.slice(0, 16)\n}\n","import type { EvidenceRef, KnowledgeKind, NewMemoryRecord } from './contracts.ts'\nimport { fail, MEMORY_EVIDENCE, MEMORY_INVALID, MEMORY_SCOPE } from './errors.ts'\n\nconst HUMAN_KINDS: readonly KnowledgeKind[] = ['preference', 'project-fact']\n\nexport function hasEvidence(refs: readonly EvidenceRef[]): boolean {\n return refs.some(ref => ref.sessionId.trim().length > 0 && Number.isFinite(ref.seq) && ref.seq >= 0)\n}\n\n/** Preference/fact candidates need evidence or an explicit manual (user) add. Never infer global. */\nexport function assertCreatable(record: NewMemoryRecord): void {\n if (record.scope.kind === 'project' && !record.scope.projectId.trim()) {\n fail(MEMORY_SCOPE, '项目记忆需要会话工作目录,不能改写为全局。')\n }\n if (record.kind === 'lesson') {\n if (record.source !== 'self-improvement' && record.source !== 'user') {\n fail(MEMORY_INVALID, '教训条目只能由自我改进或手动添加写入。')\n }\n return\n }\n if (HUMAN_KINDS.includes(record.kind)) {\n if (record.source === 'user') return\n if (record.source === 'dream' && hasEvidence(record.evidence)) return\n if (hasEvidence(record.evidence) && (record.source === 'memory' || record.source === 'dream')) return\n fail(MEMORY_EVIDENCE, '偏好和项目事实需要原文依据,或由作者手动添加。')\n }\n}\n\nexport function assertNoSilentGlobal(explicitGlobal: boolean, projectId: string | undefined): void {\n if (explicitGlobal) return\n if (!projectId) fail(MEMORY_SCOPE, '当前会话没有项目目录。写入全局须明确勾选。')\n}\n","import {\n MEMORY_INJECTION_SECTION, MEMORY_PLUGIN, MEMORY_SOURCE_KIND,\n type InjectedMemoryMessage, type MemoryRecord, type PreStepDecision,\n} from './contracts.ts'\nimport { estimateTokens, formatMemorySnapshot } from './recall.ts'\n\nexport function isMemoryInjectMessage(message: unknown): boolean {\n if (!message || typeof message !== 'object') return false\n const row = message as { source?: { kind?: string; plugin?: string; form?: string; sections?: Array<{ name?: string }> } }\n if (row.source?.kind !== MEMORY_SOURCE_KIND || row.source.plugin !== MEMORY_PLUGIN) return false\n return row.source.form === 'snapshot'\n && Boolean(row.source.sections?.some(section => section.name === MEMORY_INJECTION_SECTION))\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> | undefined {\n return value && typeof value === 'object' && !Array.isArray(value) ? value as Record<string, unknown> : undefined\n}\n\nexport function textFromContent(content: unknown): string {\n if (!Array.isArray(content)) return typeof content === 'string' ? content : ''\n const parts: string[] = []\n for (const block of content) {\n const row = asRecord(block)\n if (!row) continue\n if (row.type === 'text' && typeof row.text === 'string') parts.push(row.text)\n }\n return parts.join('\\n')\n}\n\n/** Latest real human user text. Plugin snapshots are not human context. */\nexport function requestTextFromMessages(messages: readonly unknown[]): string {\n for (let index = messages.length - 1; index >= 0; index -= 1) {\n const row = asRecord(messages[index])\n if (!row) continue\n const source = asRecord(row.source)\n if (source?.kind !== 'user') continue\n const text = textFromContent(row.content).trim()\n if (text) return text\n }\n return ''\n}\n\nexport function memoryInjectPayload(records: readonly MemoryRecord[]): InjectedMemoryMessage {\n const text = formatMemorySnapshot(records)\n return {\n content: [{ type: 'text', text }],\n source: {\n kind: MEMORY_SOURCE_KIND,\n plugin: MEMORY_PLUGIN,\n form: 'snapshot',\n sections: [{ name: MEMORY_INJECTION_SECTION, text }],\n },\n }\n}\n\nexport function applyMemoryInjection(\n decision: PreStepDecision,\n records: readonly MemoryRecord[],\n createMessage: (payload: InjectedMemoryMessage) => unknown,\n): PreStepDecision {\n if (decision.kind !== 'enter') return decision\n const without = decision.messages.filter(message => !isMemoryInjectMessage(message))\n if (records.length === 0) return { ...decision, messages: without }\n return { ...decision, messages: [createMessage(memoryInjectPayload(records)), ...without] }\n}\n\nexport function stripMemoryInjection(decision: PreStepDecision): PreStepDecision {\n if (decision.kind !== 'enter') return decision\n return { ...decision, messages: decision.messages.filter(message => !isMemoryInjectMessage(message)) }\n}\n\nexport { estimateTokens, formatMemorySnapshot }\n","import type { DreamPlan, MemoryPersistedState } from './contracts.ts'\nimport { MAX_MEMORY_DREAMS, MAX_MEMORY_RECORDS, MAX_MEMORY_TOMBSTONES } from './storage.ts'\n\nconst TERMINAL_DREAM = new Set<DreamPlan['status']>(['applied', 'cancelled', 'stale', 'failed', 'noop'])\n\nexport function memoryStateOverCapacity(state: MemoryPersistedState): boolean {\n return state.records.length > MAX_MEMORY_RECORDS\n || state.tombstones.length > MAX_MEMORY_TOMBSTONES\n || state.dreams.length > MAX_MEMORY_DREAMS\n}\n\nexport function protectedTombstoneIds(state: MemoryPersistedState, activePlanIds: ReadonlySet<string> = new Set()): Set<string> {\n const ids = new Set<string>(activePlanIds)\n for (const record of state.records) {\n for (const ref of record.basis ?? []) ids.add(ref.id)\n for (const sourceId of record.supersedes ?? []) ids.add(sourceId)\n }\n for (const plan of state.dreams) {\n for (const entry of plan.snapshot) ids.add(entry.id)\n for (const proposal of plan.proposals) {\n for (const sourceId of proposal.sourceIds) ids.add(sourceId)\n }\n }\n return ids\n}\n\n/** Drop oldest unused terminal dreams, then unreferenced tombstones, only when a bound is exceeded. */\nexport function compactMemoryState(state: MemoryPersistedState, activePlanIds: ReadonlySet<string> = new Set()): void {\n if (state.dreams.length > MAX_MEMORY_DREAMS) {\n const droppable = state.dreams\n .filter(plan => TERMINAL_DREAM.has(plan.status) && !activePlanIds.has(plan.id))\n .sort((left, right) => left.createdAt - right.createdAt || left.updatedAt - right.updatedAt || left.id.localeCompare(right.id))\n const dropIds = new Set(droppable.slice(0, state.dreams.length - MAX_MEMORY_DREAMS).map(plan => plan.id))\n if (dropIds.size) state.dreams = state.dreams.filter(plan => !dropIds.has(plan.id))\n }\n if (state.tombstones.length > MAX_MEMORY_TOMBSTONES) {\n const protectedIds = protectedTombstoneIds(state, activePlanIds)\n const droppable = state.tombstones\n .filter(row => !protectedIds.has(row.id))\n .sort((left, right) => left.deletedAt - right.deletedAt || left.id.localeCompare(right.id))\n const dropIds = new Set(droppable.slice(0, state.tombstones.length - MAX_MEMORY_TOMBSTONES).map(row => row.id))\n if (dropIds.size) state.tombstones = state.tombstones.filter(row => !dropIds.has(row.id))\n }\n}\n","import { defaultSettings, type MemoryPersistedState } from './contracts.ts'\n\nexport interface MemoryStore {\n load(): MemoryPersistedState\n save(state: MemoryPersistedState): Promise<void>\n}\n\nexport function emptyMemoryState(): MemoryPersistedState {\n return { settings: defaultSettings(), records: [], tombstones: [], dreams: [] }\n}\n\nexport function cloneState(state: MemoryPersistedState): MemoryPersistedState {\n return structuredClone(state)\n}\n\nexport function createMemoryStore(options: { failAfter?: number; initial?: MemoryPersistedState } = {}): MemoryStore & {\n failNext(): void\n holdNextSave(): { started: Promise<void>; release: () => void }\n snapshot(): MemoryPersistedState\n} {\n let current = cloneState(options.initial ?? emptyMemoryState())\n let remainingFails = options.failAfter ?? 0\n const gates: Array<{ notifyStarted: () => void; wait: Promise<void> }> = []\n return {\n failNext() { remainingFails += 1 },\n holdNextSave() {\n let notifyStarted = () => {}\n const started = new Promise<void>(resolve => { notifyStarted = resolve })\n let release = () => {}\n const wait = new Promise<void>(resolve => { release = resolve })\n gates.push({ notifyStarted, wait })\n return { started, release: () => release() }\n },\n snapshot() { return cloneState(current) },\n load() { return cloneState(current) },\n async save(next) {\n const gate = gates.shift()\n if (gate) {\n gate.notifyStarted()\n await gate.wait\n }\n if (remainingFails > 0) {\n remainingFails -= 1\n throw new Error('storage write failed')\n }\n current = cloneState(next)\n },\n }\n}\n","import { randomUUID } from 'node:crypto'\nimport type {\n AiFeatureScope, DreamPlan, InjectedMemoryMessage, KnowledgeScope, MemoryMutationOptions, MemoryPersistedState,\n MemoryQuery, MemoryRecord, MemoryService, MemorySettings, MemoryStatus, NewMemoryRecord, PreStepDecision, PurposeSpec,\n} from './contracts.ts'\nimport { cloneRecord, INJECT_KINDS, MEMORY_DREAM_PURPOSE, projectIdFromCwd, sessionCwd } from './contracts.ts'\nimport {\n DREAM_SYSTEM, assertBasisCurrent, assertDreamApply, basisFromSnapshot, inheritEvidence, isDreamSource,\n parseDreamText, recordMap, snapshotRecords, stampInheritedExpiry, tombstoneSet, dreamSourceVersion,\n} from './dream.ts'\nimport {\n fail, isAbortError, MemoryError, MEMORY_AI_UNAVAILABLE, MEMORY_CANCELLED, MEMORY_CAPACITY, MEMORY_CONFLICT,\n MEMORY_DELETED, MEMORY_DISABLED, MEMORY_INVALID, MEMORY_NOT_FOUND, MEMORY_SAVE_FAILED, MEMORY_SCOPE, MEMORY_STALE,\n MEMORY_TOMBSTONE,\n} from './errors.ts'\nimport { assertCreatable, assertNoSilentGlobal, hasEvidence } from './evidence.ts'\nimport { applyMemoryInjection, requestTextFromMessages, stripMemoryInjection } from './inject.ts'\nimport { countDreamMaterial } from './idle.ts'\nimport { boundRecall, injectKinds, isExpired, recordMatchesQuery } from './recall.ts'\nimport { compactMemoryState, memoryStateOverCapacity } from './capacity.ts'\nimport { cloneState, type MemoryStore } from './store.ts'\nimport { memoryStateSchema, newMemoryRecordSchema } from './storage.ts'\n\nexport interface MemoryRuntimeOptions {\n store: MemoryStore\n now?: () => number\n id?: () => string\n activateAi?: () => AiFeatureScope | undefined\n createInjectMessage?: (payload: InjectedMemoryMessage) => unknown\n}\n\nconst dreamPurpose: PurposeSpec = {\n id: MEMORY_DREAM_PURPOSE,\n label: '记忆整理',\n defaultTarget: { kind: 'role', role: 'strong' },\n maxOutputTokens: 1024,\n maxInputChars: 12_000,\n timeoutMs: 60_000,\n}\n\ntype DreamJob = { abort: AbortController; generation: number; planId: string }\n\nexport class MemoryRuntime implements MemoryService {\n private live: MemoryPersistedState\n private generation = 0\n private disposed = false\n private storageFailed = false\n private pending = Promise.resolve()\n private ai?: AiFeatureScope\n private unregisterPurpose?: () => void\n private readonly jobs = new Map<string, DreamJob>()\n private readonly now: () => number\n private readonly customId?: () => string\n\n constructor(private readonly options: MemoryRuntimeOptions) {\n this.live = cloneState(options.store.load())\n this.now = options.now ?? Date.now\n this.customId = options.id\n this.syncAi()\n }\n\n get pluginActive(): boolean { return !this.disposed }\n\n status(sessionId?: string, projectId?: string): MemoryStatus {\n const records = this.live.records\n .filter(record => !this.tombstoned(record.id))\n .filter(record => !sessionId || this.visibleInSession(record, projectId))\n .map(cloneRecord)\n const dreams = this.live.dreams\n .filter(plan => !sessionId || plan.sessionId === sessionId)\n .map(plan => structuredClone(plan))\n return {\n settings: structuredClone(this.live.settings),\n records,\n dreams,\n runningDreams: dreams.filter(plan => this.jobs.has(plan.id)).map(plan => plan.id),\n projectId,\n storageFailed: this.storageFailed,\n aiAvailable: Boolean(this.ai?.active),\n }\n }\n\n /** Wait for durable state writes, never for model generation. */\n async readStatus(sessionId?: string, projectId?: string): Promise<MemoryStatus> {\n await this.pending\n return this.status(sessionId, projectId)\n }\n\n async dispose(): Promise<void> {\n this.disposed = true\n this.generation += 1\n this.abortDreams()\n this.detachAi()\n await this.pending\n }\n\n async updateSettings(next: Omit<MemorySettings, 'revision'>, expectedRevision: number): Promise<MemorySettings> {\n return this.serialize(async () => {\n this.assertOpen()\n if (expectedRevision !== this.live.settings.revision) fail(MEMORY_CONFLICT, '记忆设置已更新,请刷新后重试。')\n const proposed = this.snapshot()\n proposed.settings = { ...next, revision: expectedRevision + 1 }\n const disableInject = this.live.settings.injectEnabled && !proposed.settings.injectEnabled\n const disableDream = this.live.settings.dreamIdleEnabled && !proposed.settings.dreamIdleEnabled\n await this.persistProposed(proposed)\n this.commit(proposed)\n if (disableInject || disableDream) {\n this.generation += 1\n this.abortDreams()\n }\n this.syncAi()\n return structuredClone(this.live.settings)\n })\n }\n\n async list(query: MemoryQuery): Promise<MemoryRecord[]> {\n const now = this.now()\n const limit = query.limit ?? 100\n return this.live.records\n .filter(record => !this.tombstoned(record.id))\n .filter(record => recordMatchesQuery(record, query, now))\n .sort((a, b) => b.updatedAt - a.updatedAt || a.id.localeCompare(b.id))\n .slice(0, Math.min(100, Math.max(1, limit)))\n .map(cloneRecord)\n }\n\n async recall(query: MemoryQuery): Promise<MemoryRecord[]> {\n const listed = await this.list({\n ...query,\n query: undefined,\n kinds: query.kinds && query.kinds.length ? query.kinds : [...INJECT_KINDS],\n statuses: query.statuses ?? ['active'],\n limit: 100,\n })\n return boundRecall(listed, this.now(), { query: query.query, limit: query.limit ?? 5 })\n }\n\n async create(record: NewMemoryRecord, options?: MemoryMutationOptions): Promise<MemoryRecord> {\n return this.serialize(async () => {\n this.assertMutationCurrent(options)\n this.assertOpen()\n const parsed = newMemoryRecordSchema.safeParse(record)\n if (!parsed.success) fail(MEMORY_INVALID, '记忆条目格式无效。')\n assertCreatable(parsed.data)\n const proposed = this.snapshot()\n const id = this.mintId(proposed)\n const now = this.now()\n const stored: MemoryRecord = { ...parsed.data, id, revision: 1, createdAt: now, updatedAt: now }\n proposed.records.push(stored)\n await this.persistProposed(proposed)\n this.commit(proposed)\n return cloneRecord(stored)\n })\n }\n\n async update(id: string, patch: Partial<Pick<MemoryRecord, 'title' | 'content' | 'tags' | 'exceptions' | 'status' | 'expiresAt'>>, expectedRevision: number, options?: MemoryMutationOptions): Promise<MemoryRecord> {\n return this.serialize(async () => {\n this.assertMutationCurrent(options)\n return this.updateIn(this.snapshot(), id, patch, expectedRevision, true)\n })\n }\n\n async remove(id: string, expectedRevision: number, options?: MemoryMutationOptions): Promise<void> {\n return this.serialize(async () => {\n this.assertMutationCurrent(options)\n this.assertOpen()\n const proposed = this.snapshot()\n const current = this.requireIn(proposed, id)\n if (current.revision !== expectedRevision) fail(MEMORY_CONFLICT, '条目已被其他操作修改,请刷新后重试。')\n proposed.tombstones.push({ id, deletedAt: this.now(), lastRevision: current.revision })\n proposed.records = proposed.records.filter(record => record.id !== id)\n this.staleDreamsTouching(proposed, [id])\n await this.persistProposed(proposed)\n this.commit(proposed)\n })\n }\n\n async accept(id: string, expectedRevision: number): Promise<MemoryRecord> {\n return this.serialize(async () => {\n this.assertOpen()\n const proposed = this.snapshot()\n const current = this.requireIn(proposed, id)\n if (current.revision !== expectedRevision) fail(MEMORY_CONFLICT, '条目已被其他操作修改,请刷新后重试。')\n if (current.status !== 'candidate') fail(MEMORY_INVALID, '只能采纳候选条目。')\n const now = this.now()\n assertBasisCurrent(current, recordMap(proposed), tombstoneSet(proposed), now)\n const sources = (current.basis ?? []).map(ref => proposed.records.find(item => item.id === ref.id)).filter((item): item is MemoryRecord => Boolean(item))\n stampInheritedExpiry(current, sources)\n if (isExpired(current, now)) fail(MEMORY_STALE, '候选已过期,不能采纳。')\n current.status = 'active'\n current.revision += 1\n current.updatedAt = now\n for (const sourceId of current.supersedes ?? []) {\n const source = proposed.records.find(record => record.id === sourceId)\n if (!source || this.tombstonedIn(proposed, sourceId)) continue\n const pin = current.basis?.find(ref => ref.id === sourceId)\n if (current.basis?.length) {\n if (!pin || source.revision !== pin.revision) fail(MEMORY_STALE, '依据记录已修改,须按当前版本重新整理。')\n }\n if (source.status === 'deleted') fail(MEMORY_TOMBSTONE, '依据记录已删除,不能采纳。')\n if (source.status === 'active') {\n source.status = 'superseded'\n source.revision += 1\n source.updatedAt = now\n }\n }\n this.staleDreamsTouching(proposed, [id, ...(current.supersedes ?? [])])\n await this.persistProposed(proposed)\n this.commit(proposed)\n return cloneRecord(this.requireIn(this.live, id))\n })\n }\n\n async reject(id: string, expectedRevision: number): Promise<MemoryRecord> {\n return this.serialize(async () => {\n const proposed = this.snapshot()\n return this.updateIn(proposed, id, { status: 'rejected' }, expectedRevision, true, record => {\n if (record.status !== 'candidate') fail(MEMORY_INVALID, '只能拒绝候选条目。')\n })\n })\n }\n\n async revoke(id: string, expectedRevision: number): Promise<MemoryRecord> {\n return this.serialize(async () => {\n const proposed = this.snapshot()\n return this.updateIn(proposed, id, { status: 'revoked' }, expectedRevision, true, record => {\n if (record.status !== 'active') fail(MEMORY_INVALID, '只能撤销已生效条目。')\n })\n })\n }\n\n async promoteToGlobal(id: string, expectedRevision: number, options?: MemoryMutationOptions): Promise<MemoryRecord> {\n return this.serialize(async () => {\n this.assertMutationCurrent(options)\n this.assertOpen()\n const proposed = this.snapshot()\n const current = this.requireIn(proposed, id)\n if (current.revision !== expectedRevision) fail(MEMORY_CONFLICT, '条目已被其他操作修改,请刷新后重试。')\n if (current.status !== 'candidate' && current.status !== 'active') {\n fail(MEMORY_INVALID, '只能把未过期的候选或已生效条目提升为全局。')\n }\n const now = this.now()\n if (isExpired(current, now)) fail(MEMORY_STALE, '条目已过期,不能提升为全局。')\n current.scope = { kind: 'global' }\n current.status = 'active'\n current.revision += 1\n current.updatedAt = now\n this.staleDreamsTouching(proposed, [id])\n await this.persistProposed(proposed)\n this.commit(proposed)\n return cloneRecord(this.requireIn(this.live, id))\n })\n }\n\n async handlePreStep(input: {\n sessionId: string\n session?: unknown\n signal: AbortSignal\n next: () => Promise<PreStepDecision>\n }): Promise<PreStepDecision> {\n const generation = this.generation\n const decision = await input.next()\n if (!this.canInject(generation, input.signal)) return stripMemoryInjection(decision)\n if (decision.kind !== 'enter') return decision\n const requestText = requestTextFromMessages(decision.messages)\n if (!requestText) return stripMemoryInjection(decision)\n const projectId = projectIdFromCwd(sessionCwd(input.session))\n const scope: KnowledgeScope = projectId ? { kind: 'project', projectId } : { kind: 'global' }\n const records = await this.recall({\n scope,\n query: requestText,\n kinds: injectKinds(undefined),\n limit: 5,\n })\n if (!this.canInject(generation, input.signal)) return stripMemoryInjection(decision)\n const create = this.options.createInjectMessage ?? (payload => payload)\n return applyMemoryInjection(decision, records, create)\n }\n\n async previewDream(sessionId: string, projectId: string | undefined, trigger: 'manual' | 'idle' = 'manual'): Promise<DreamPlan> {\n this.requireAi()\n const prepared = await this.serialize(async () => {\n this.assertOpen()\n if (trigger === 'idle' && !this.live.settings.dreamIdleEnabled) fail(MEMORY_DISABLED, '闲时整理未开启。')\n const generation = this.generation\n const now = this.now()\n const scope: KnowledgeScope = projectId ? { kind: 'project', projectId } : { kind: 'global' }\n const records = (await this.list({ scope, statuses: ['active', 'candidate'], limit: 64 }))\n .filter(record => isDreamSource(record, now))\n const snapshot = snapshotRecords(records)\n const proposed = this.snapshot()\n const plan = {\n id: this.mintId(proposed),\n revision: 1,\n sessionId,\n projectId,\n status: 'preview' as const,\n sourceVersion: dreamSourceVersion(snapshot),\n snapshot,\n proposals: [],\n generation,\n createdAt: now,\n updatedAt: now,\n }\n proposed.dreams.push(plan)\n await this.persistProposed(proposed)\n this.commit(proposed)\n const abort = new AbortController()\n this.jobs.set(plan.id, { abort, generation, planId: plan.id })\n return { plan, records, snapshot, scope, generation, abort }\n })\n const ai = this.requireAi()\n try {\n const result = await ai.run({\n purpose: MEMORY_DREAM_PURPOSE,\n sessionId,\n sourceVersion: prepared.plan.sourceVersion,\n system: DREAM_SYSTEM,\n input: JSON.stringify({\n scope: prepared.scope,\n records: prepared.records.map(record => ({\n id: record.id, kind: record.kind, title: record.title, content: record.content,\n scope: record.scope, exceptions: record.exceptions, evidence: record.evidence,\n status: record.status, revision: record.revision, expiresAt: record.expiresAt ?? null,\n })),\n }),\n priority: trigger === 'idle' ? 'background' : 'interactive',\n signal: prepared.abort.signal,\n isCurrent: () => this.isDreamCurrent(prepared.plan.id, prepared.generation),\n })\n return this.serialize(async () => {\n if (!this.isDreamCurrent(prepared.plan.id, prepared.generation)) {\n return this.markDream(prepared.plan.id, { status: 'stale', error: '已取消或设置已关闭。' })\n }\n if (result.receipt.status !== 'success') {\n const status = result.receipt.status === 'cancelled' ? 'cancelled' : 'failed'\n return this.markDream(prepared.plan.id, { status, error: result.receipt.error ?? '整理未完成。' })\n }\n const proposals = parseDreamText(result.text, prepared.snapshot, prepared.scope).map(proposal => ({\n ...proposal,\n evidence: inheritEvidence(prepared.records, proposal.sourceIds),\n }))\n return this.markDream(prepared.plan.id, { proposals, status: 'preview' })\n })\n } catch (error) {\n return this.serialize(async () => {\n if (isAbortError(error) || !this.isDreamCurrent(prepared.plan.id, prepared.generation)) {\n return this.markDream(prepared.plan.id, { status: 'cancelled', error: '已取消。' })\n }\n return this.markDream(prepared.plan.id, { status: 'failed', error: '整理失败。' })\n })\n } finally {\n this.jobs.delete(prepared.plan.id)\n }\n }\n\n async runIdleDream(sessionId: string, projectId: string | undefined, trigger: 'manual' | 'idle' = 'idle'): Promise<DreamPlan> {\n try {\n const plan = await this.previewDream(sessionId, projectId, trigger)\n if (plan.status !== 'preview' || plan.proposals.length === 0) {\n if (plan.status === 'preview') await this.markDreamQuietly(plan.id, { status: 'noop' })\n await this.stampDreamAttempt()\n return this.currentDream(plan.id) ?? plan\n }\n try {\n const applied = await this.applyDream(plan.id, plan.revision)\n await this.stampDreamAttempt()\n return applied\n } catch {\n await this.markDreamQuietly(plan.id, { status: 'failed', error: '自动整理应用失败。' })\n await this.stampDreamAttempt()\n return this.currentDream(plan.id) ?? plan\n }\n } catch (error) {\n await this.recordFailedDreamAttempt(sessionId, projectId, error)\n throw error\n }\n }\n\n get dreamLastAttemptAt(): number | undefined {\n return this.live.lastAttemptAt\n }\n\n dreamMaterialCount(): number {\n return countDreamMaterial(this.live, this.live.lastAttemptAt)\n }\n\n async applyDream(planId: string, expectedRevision: number): Promise<DreamPlan> {\n return this.serialize(async () => {\n this.assertOpen()\n if (this.jobs.has(planId)) fail(MEMORY_INVALID, '整理尚未完成,请稍候。')\n const proposed = this.snapshot()\n const plan = this.requireDreamIn(proposed, planId)\n if (plan.revision !== expectedRevision) fail(MEMORY_CONFLICT, '梦境预览已更新,请刷新后重试。')\n const now = this.now()\n try {\n assertDreamApply(plan, recordMap(proposed), tombstoneSet(proposed), now)\n } catch (error) {\n plan.status = 'stale'\n plan.revision += 1\n plan.updatedAt = this.now()\n plan.error = error instanceof Error ? error.message : '预览已过期。'\n await this.persistProposed(proposed)\n this.commit(proposed)\n throw error instanceof Error ? error : fail(MEMORY_STALE, '预览已过期。')\n }\n const touched = new Set<string>()\n for (const proposal of plan.proposals) {\n const id = this.mintId(proposed)\n const sources = proposal.sourceIds\n .map(sourceId => proposed.records.find(item => item.id === sourceId))\n .filter((item): item is MemoryRecord => Boolean(item))\n const record: MemoryRecord = {\n id,\n revision: 1,\n scope: proposal.scope,\n kind: proposal.kind,\n status: 'active',\n title: proposal.title,\n content: proposal.content,\n tags: proposal.tags,\n evidence: hasEvidence(proposal.evidence) ? proposal.evidence : [{ sessionId: plan.sessionId, seq: 0, kind: 'manual', excerpt: 'dream' }],\n exceptions: proposal.exceptions,\n source: 'dream',\n createdAt: now,\n updatedAt: now,\n supersedes: proposal.sourceIds,\n basis: basisFromSnapshot(plan.snapshot, proposal.sourceIds),\n }\n stampInheritedExpiry(record, sources)\n if (isExpired(record, now)) fail(MEMORY_STALE, '依据记录已过期,梦境预览作废。')\n assertCreatable(record)\n proposed.records.push(record)\n touched.add(id)\n for (const sourceId of proposal.sourceIds) {\n const source = proposed.records.find(item => item.id === sourceId)\n if (!source || this.tombstonedIn(proposed, sourceId)) continue\n if (source.status === 'active') {\n source.status = 'superseded'\n source.revision += 1\n source.updatedAt = now\n }\n touched.add(sourceId)\n }\n }\n plan.status = 'applied'\n plan.revision += 1\n plan.updatedAt = now\n this.staleDreamsTouching(proposed, [...touched])\n await this.persistProposed(proposed)\n this.commit(proposed)\n return structuredClone(this.requireDreamIn(this.live, planId))\n })\n }\n\n async cancelDream(planId: string, expectedRevision: number): Promise<DreamPlan> {\n return this.serialize(async () => {\n const plan = this.live.dreams.find(item => item.id === planId)\n if (!plan) fail(MEMORY_NOT_FOUND, '找不到该梦境预览。')\n if (plan.revision !== expectedRevision) fail(MEMORY_CONFLICT, '梦境预览已更新,请刷新后重试。')\n this.jobs.get(planId)?.abort.abort()\n this.jobs.delete(planId)\n return this.markDream(planId, { status: 'cancelled' })\n })\n }\n\n createManualRecord(input: {\n sessionId: string\n projectId?: string\n explicitGlobal: boolean\n title: string\n content: string\n kind: NewMemoryRecord['kind']\n tags?: string[]\n exceptions?: string[]\n evidence?: NewMemoryRecord['evidence']\n expiresAt?: number\n }): Promise<MemoryRecord> {\n assertNoSilentGlobal(input.explicitGlobal, input.projectId)\n const scope: KnowledgeScope = input.explicitGlobal ? { kind: 'global' } : { kind: 'project', projectId: input.projectId! }\n return this.create({\n scope,\n kind: input.kind,\n status: 'active',\n title: input.title,\n content: input.content,\n tags: input.tags ?? [],\n exceptions: input.exceptions ?? [],\n evidence: input.evidence ?? [],\n source: 'user',\n expiresAt: input.expiresAt,\n })\n }\n\n abortDreams(): void {\n for (const job of this.jobs.values()) job.abort.abort()\n this.jobs.clear()\n }\n\n hasActiveDream(sessionId?: string): boolean {\n for (const job of this.jobs.values()) {\n const plan = this.live.dreams.find(item => item.id === job.planId)\n if (!plan) continue\n if (!sessionId || plan.sessionId === sessionId) return true\n }\n return false\n }\n\n private async updateIn(\n proposed: MemoryPersistedState,\n id: string,\n patch: Partial<Pick<MemoryRecord, 'title' | 'content' | 'tags' | 'exceptions' | 'status' | 'expiresAt'>>,\n expectedRevision: number,\n persist: boolean,\n guard?: (record: MemoryRecord) => void,\n ): Promise<MemoryRecord> {\n this.assertOpen()\n const current = this.requireIn(proposed, id)\n if (current.revision !== expectedRevision) fail(MEMORY_CONFLICT, '条目已被其他操作修改,请刷新后重试。')\n if (current.status === 'deleted') fail(MEMORY_DELETED, '条目已删除,不能恢复。')\n guard?.(current)\n Object.assign(current, patch, {\n id: current.id,\n revision: current.revision + 1,\n scope: current.scope,\n kind: current.kind,\n source: current.source,\n createdAt: current.createdAt,\n updatedAt: this.now(),\n })\n this.staleDreamsTouching(proposed, [id])\n if (persist) {\n await this.persistProposed(proposed)\n this.commit(proposed)\n return cloneRecord(this.requireIn(this.live, id))\n }\n return cloneRecord(current)\n }\n\n private mintId(proposed: MemoryPersistedState): string {\n if (this.customId) {\n const id = this.customId()\n if (this.idTaken(proposed, id)) {\n if (this.tombstonedIn(proposed, id)) fail(MEMORY_TOMBSTONE, '该标识已删除,不能恢复。')\n fail(MEMORY_CONFLICT, '记忆编号冲突。')\n }\n return id\n }\n for (let attempt = 0; attempt < 8; attempt += 1) {\n const id = randomUUID()\n if (!this.idTaken(proposed, id)) return id\n }\n fail(MEMORY_CONFLICT, '记忆编号冲突。')\n }\n\n private idTaken(state: MemoryPersistedState, id: string): boolean {\n return this.tombstonedIn(state, id)\n || state.records.some(record => record.id === id)\n || state.dreams.some(plan => plan.id === id)\n }\n\n private tombstoned(id: string): boolean {\n return this.tombstonedIn(this.live, id)\n }\n\n private tombstonedIn(state: MemoryPersistedState, id: string): boolean {\n return state.tombstones.some(row => row.id === id)\n }\n\n private requireIn(state: MemoryPersistedState, id: string): MemoryRecord {\n if (this.tombstonedIn(state, id)) fail(MEMORY_TOMBSTONE, '条目已删除,不能恢复。')\n const record = state.records.find(item => item.id === id)\n if (!record) fail(MEMORY_NOT_FOUND, '找不到该记忆条目。')\n return record\n }\n\n private requireDreamIn(state: MemoryPersistedState, id: string): DreamPlan {\n const plan = state.dreams.find(item => item.id === id)\n if (!plan) fail(MEMORY_NOT_FOUND, '找不到该梦境预览。')\n return plan\n }\n\n private async markDream(\n id: string,\n patch: Partial<Pick<DreamPlan, 'status' | 'proposals' | 'error'>>,\n ): Promise<DreamPlan> {\n const proposed = this.snapshot()\n const plan = this.requireDreamIn(proposed, id)\n Object.assign(plan, patch, { revision: plan.revision + 1, updatedAt: this.now() })\n await this.persistProposed(proposed)\n this.commit(proposed)\n return structuredClone(this.requireDreamIn(this.live, id))\n }\n\n private currentDream(id: string): DreamPlan | undefined {\n const plan = this.live.dreams.find(item => item.id === id)\n return plan ? structuredClone(plan) : undefined\n }\n\n private async markDreamQuietly(id: string, patch: Partial<Pick<DreamPlan, 'status' | 'proposals' | 'error'>>): Promise<void> {\n try {\n await this.serialize(async () => {\n const current = this.live.dreams.find(item => item.id === id)\n if (!current || current.status !== 'preview') return\n await this.markDream(id, patch)\n })\n } catch {}\n }\n\n private async stampDreamAttempt(): Promise<void> {\n try {\n await this.serialize(async () => {\n const proposed = this.snapshot()\n proposed.lastAttemptAt = this.now()\n await this.persistProposed(proposed)\n this.commit(proposed)\n })\n } catch {}\n }\n\n private async recordFailedDreamAttempt(sessionId: string, projectId: string | undefined, error: unknown): Promise<void> {\n try {\n await this.serialize(async () => {\n const proposed = this.snapshot()\n const now = this.now()\n proposed.lastAttemptAt = now\n proposed.dreams.push({\n id: this.mintId(proposed),\n revision: 1,\n sessionId,\n projectId,\n status: 'failed',\n sourceVersion: dreamSourceVersion([]),\n snapshot: [],\n proposals: [],\n generation: this.generation,\n createdAt: now,\n updatedAt: now,\n error: error instanceof Error ? error.message.slice(0, 240) : '整理失败。',\n })\n await this.persistProposed(proposed)\n this.commit(proposed)\n })\n } catch {}\n }\n\n private staleDreamsTouching(state: MemoryPersistedState, ids: readonly string[]): void {\n const set = new Set(ids)\n const now = this.now()\n for (const plan of state.dreams) {\n if (plan.status !== 'preview') continue\n if (plan.snapshot.some(entry => set.has(entry.id))) {\n plan.status = 'stale'\n plan.revision += 1\n plan.updatedAt = now\n plan.error = '相关记录已删除或修正。'\n }\n }\n }\n\n private visibleInSession(record: MemoryRecord, projectId: string | undefined): boolean {\n if (record.scope.kind === 'global') return true\n return Boolean(projectId) && record.scope.kind === 'project' && record.scope.projectId === projectId\n }\n\n private canInject(generation: number, signal: AbortSignal): boolean {\n return !this.disposed && this.live.settings.injectEnabled && this.generation === generation && !signal.aborted\n }\n\n private isDreamCurrent(planId: string, generation: number): boolean {\n if (this.disposed || this.generation !== generation) return false\n const plan = this.live.dreams.find(item => item.id === planId)\n return Boolean(plan && plan.status === 'preview' && this.ai?.active)\n }\n\n private requireAi(): AiFeatureScope {\n this.syncAi()\n if (!this.ai?.active) fail(MEMORY_AI_UNAVAILABLE, '需要先加载 @klarkxy/dsh-ai-services,记忆插件不会自动启用它。')\n return this.ai\n }\n\n private syncAi(): void {\n if (this.disposed) { this.detachAi(); return }\n if (this.ai?.active) return\n const ai = this.options.activateAi?.()\n this.ai = ai\n if (ai) {\n try { this.unregisterPurpose = ai.registerPurpose(dreamPurpose) }\n catch { this.unregisterPurpose = undefined }\n }\n }\n\n private detachAi(): void {\n this.unregisterPurpose?.()\n this.unregisterPurpose = undefined\n this.ai?.dispose()\n this.ai = undefined\n }\n\n private assertOpen(): void {\n if (this.disposed) fail(MEMORY_DISABLED, '记忆插件已停止。')\n }\n\n private snapshot(): MemoryPersistedState {\n return cloneState(this.live)\n }\n\n private commit(proposed: MemoryPersistedState): void {\n this.live = cloneState(proposed)\n }\n\n private assertMutationCurrent(options?: MemoryMutationOptions): void {\n if (!options) return\n if (options.signal?.aborted) fail(MEMORY_CANCELLED, '请求已取消')\n if (!options.isCurrent) return\n let current = false\n try {\n current = options.isCurrent()\n } catch {\n fail(MEMORY_CANCELLED, '请求已取消')\n }\n if (!current) fail(MEMORY_CANCELLED, '请求已取消')\n }\n\n private async persistProposed(proposed: MemoryPersistedState): Promise<void> {\n compactMemoryState(proposed, new Set(this.jobs.keys()))\n const parsed = memoryStateSchema.safeParse(proposed)\n if (!parsed.success) {\n if (memoryStateOverCapacity(proposed)) fail(MEMORY_CAPACITY, '记忆容量已满,已保留原内容。')\n fail(MEMORY_INVALID, '记忆状态格式无效。')\n }\n try {\n await this.options.store.save(cloneState(proposed))\n this.storageFailed = false\n } catch (error) {\n if (error instanceof MemoryError && (error.code === MEMORY_CANCELLED || error.code === MEMORY_CAPACITY)) throw error\n this.storageFailed = true\n if (error instanceof Error && 'code' in error) throw error\n fail(MEMORY_SAVE_FAILED, '记忆保存失败,已保留原内容。')\n }\n }\n\n private serialize<T>(run: () => Promise<T>): Promise<T> {\n const task = this.pending.then(run, run)\n this.pending = task.then(() => {}, () => {})\n return task\n }\n}\n\nexport { MEMORY_SCOPE }\n","import type { Context } from '@deepseek-ai/cordis'\nimport { createUserMessage } from '@deepseek-ai/dsh-llm'\nimport type { AiServices } from '@klarkxy/dsh-ai-services/contracts'\nimport { registerHostRpc, type HostRpcContext } from '@klarkxy/dsh-ai-services/host-rpc'\nimport {\n MEMORY_ACTIVATE_ID, MEMORY_PLUGIN, MEMORY_RPC_CHANNEL, projectIdFromCwd, sessionCwd,\n type InjectedMemoryMessage, type MemoryPersistedState, type PreStepDecision, type RpcResult,\n} from './contracts.ts'\nimport { shouldRunIdleDream } from './idle.ts'\nimport { handleMemoryRpc } from './rpc.ts'\nimport { MemoryRuntime } from './service.ts'\nimport { cloneState, emptyMemoryState, type MemoryStore } from './store.ts'\nimport { memoryDomain, storedSettings } from './storage.ts'\n\nexport const name = MEMORY_PLUGIN\nexport const inject = ['storageDomain', 'connection', 'webServer', 'aiServices', 'sessions'] as const\nexport { MemoryRuntime } from './service.ts'\nexport { CHAT_EVENTS_SLOT, MEMORY_RPC_CHANNEL, defaultSettings, projectIdFromCwd } from './contracts.ts'\n\ndeclare module '@deepseek-ai/cordis' {\n interface Context { aiMemory: MemoryRuntime }\n}\n\ntype DomainHandle = {\n table(name: 'state'): {\n get(key: string): unknown\n put(key: string, value: unknown): Promise<void>\n delete(key: string): Promise<boolean>\n entries(): IterableIterator<[string, unknown]>\n }\n close(): Promise<void>\n}\n\ntype Host = Context & HostRpcContext & {\n storageDomain: { open: (spec: typeof memoryDomain) => Promise<DomainHandle> }\n aiServices: AiServices\n sessions: { get(id: string): unknown }\n}\n\nexport async function apply(ctx: Context): Promise<void> {\n const host = ctx as Host\n const domain = await host.storageDomain.open(memoryDomain)\n const store = domainStore(domain)\n const idle = { agentIdle: new Map<string, boolean>(), lastActivity: new Map<string, number>(), timers: new Map<string, ReturnType<typeof setTimeout>>() }\n const runtime = new MemoryRuntime({\n store,\n activateAi: () => host.aiServices.activate(MEMORY_ACTIVATE_ID),\n createInjectMessage: payload => createPluginUserMessage(payload),\n })\n ctx.provide('aiMemory', runtime)\n ctx.effect(() => async () => {\n for (const timer of idle.timers.values()) clearTimeout(timer)\n idle.timers.clear()\n await runtime.dispose()\n await domain.close()\n }, 'dsh-memory.dispose')\n ctx.effect(() => registerHostRpc(host, MEMORY_RPC_CHANNEL, (endpoint, payload, signal): Promise<RpcResult> => (\n handleMemoryRpc(endpoint, payload, signal, runtime, sessionId => readSession(ctx, sessionId))\n )), 'dsh-memory.rpc')\n ctx.effect(() => {\n const offStep = listen(ctx, 'agent/pre-step', async (\n payload: { agent: { id?: unknown; session?: unknown }; signal: AbortSignal },\n next: () => Promise<PreStepDecision>,\n ) => runtime.handlePreStep({\n sessionId: String((payload.agent as { id?: unknown }).id ?? ''),\n session: payload.agent.session,\n signal: payload.signal,\n next,\n }))\n const offStatus = listen(ctx, 'agent/status', (payload: { agent: { id?: unknown; session?: unknown }; status: string }) => {\n const sessionId = String((payload.agent as { id?: unknown }).id ?? '')\n if (!sessionId) return\n const now = Date.now()\n if (payload.status === 'running') {\n idle.agentIdle.set(sessionId, false)\n idle.lastActivity.set(sessionId, now)\n const timer = idle.timers.get(sessionId)\n if (timer) { clearTimeout(timer); idle.timers.delete(sessionId) }\n return\n }\n if (payload.status !== 'idle') return\n idle.agentIdle.set(sessionId, true)\n idle.lastActivity.set(sessionId, idle.lastActivity.get(sessionId) ?? now)\n const timer = idle.timers.get(sessionId)\n if (timer) clearTimeout(timer)\n const wait = runtime.status().settings.idleMs\n idle.timers.set(sessionId, setTimeout(() => {\n idle.timers.delete(sessionId)\n const settings = runtime.status().settings\n if (!shouldRunIdleDream({\n dreamIdleEnabled: settings.dreamIdleEnabled,\n pluginActive: runtime.pluginActive,\n agentIdle: idle.agentIdle.get(sessionId) === true,\n dreamRunning: runtime.hasActiveDream(sessionId),\n lastActivityAt: idle.lastActivity.get(sessionId) ?? now,\n now: Date.now(),\n idleMs: settings.idleMs,\n lastAttemptAt: runtime.dreamLastAttemptAt,\n materialCount: runtime.dreamMaterialCount(),\n })) return\n void runtime.runIdleDream(sessionId, projectIdFromCwd(sessionCwd(readSession(ctx, sessionId))), 'idle').catch(() => {})\n }, wait))\n })\n return () => { offStep?.(); offStatus?.() }\n }, 'dsh-memory.hooks')\n}\n\nexport function createPluginUserMessage(payload: InjectedMemoryMessage): unknown {\n return createUserMessage({\n source: payload.source,\n content: payload.content,\n })\n}\n\nfunction domainStore(domain: DomainHandle): MemoryStore {\n const table = domain.table('state')\n return {\n load() {\n const stored = table.get('current') as MemoryPersistedState | undefined\n if (!stored) return emptyMemoryState()\n return cloneState({\n settings: storedSettings(stored.settings),\n records: stored.records ?? [],\n tombstones: stored.tombstones ?? [],\n dreams: stored.dreams ?? [],\n lastAttemptAt: stored.lastAttemptAt,\n })\n },\n async save(state) {\n await table.put('current', cloneState(state))\n },\n }\n}\n\nfunction readSession(ctx: Context, sessionId: string): unknown {\n return (ctx as Host).sessions.get(sessionId)\n}\n\nfunction listen(ctx: Context, name: string, handler: (...args: never[]) => unknown): (() => void) | undefined {\n const on = ctx.on as unknown as (event: string, listener: (...args: never[]) => unknown) => (() => void) | void\n const off = on.call(ctx, name, handler)\n return typeof off === 'function' ? off : undefined\n}\n"],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@klarkxy/dsh-memory",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Memory and optional Dream for long-term preferences, project facts, decisions, and lessons",
|
|
5
|
+
"license": "SEE LICENSE IN LICENSE",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"engines": {
|
|
8
|
+
"node": ">=22"
|
|
9
|
+
},
|
|
10
|
+
"main": "./lib/index.js",
|
|
11
|
+
"types": "./lib/index.d.ts",
|
|
12
|
+
"exports": {
|
|
13
|
+
".": {
|
|
14
|
+
"types": "./lib/index.d.ts",
|
|
15
|
+
"import": "./lib/index.js",
|
|
16
|
+
"default": "./lib/index.js"
|
|
17
|
+
},
|
|
18
|
+
"./contracts": {
|
|
19
|
+
"types": "./lib/contracts.d.ts",
|
|
20
|
+
"import": "./lib/contracts.js",
|
|
21
|
+
"default": "./lib/contracts.js"
|
|
22
|
+
},
|
|
23
|
+
"./client": {
|
|
24
|
+
"default": "./lib/client.js"
|
|
25
|
+
},
|
|
26
|
+
"./package.json": "./package.json"
|
|
27
|
+
},
|
|
28
|
+
"files": [
|
|
29
|
+
"lib",
|
|
30
|
+
"cordis.patch.yml",
|
|
31
|
+
"README.md",
|
|
32
|
+
"docs/README.zh-CN.md",
|
|
33
|
+
"LICENSE"
|
|
34
|
+
],
|
|
35
|
+
"dsh": {
|
|
36
|
+
"bundle": {
|
|
37
|
+
"patch": "./cordis.patch.yml"
|
|
38
|
+
},
|
|
39
|
+
"client": {
|
|
40
|
+
"platform": "web",
|
|
41
|
+
"inject": [
|
|
42
|
+
"@deepseek-ai/dsh-client-connection",
|
|
43
|
+
"@deepseek-ai/dsh-api-session-controller",
|
|
44
|
+
"@deepseek-ai/dsh-client-locale",
|
|
45
|
+
"@deepseek-ai/dsh-client-ui-session"
|
|
46
|
+
]
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
"dshEditor": {
|
|
50
|
+
"role": "feature",
|
|
51
|
+
"visibility": "public",
|
|
52
|
+
"wrapClient": true,
|
|
53
|
+
"entries": [
|
|
54
|
+
{
|
|
55
|
+
"id": "memory",
|
|
56
|
+
"title": "记忆",
|
|
57
|
+
"description": "长期偏好、项目事实与决策;梦境整理可选",
|
|
58
|
+
"feature": "memory",
|
|
59
|
+
"service": "aiMemory"
|
|
60
|
+
}
|
|
61
|
+
]
|
|
62
|
+
},
|
|
63
|
+
"dependencies": {
|
|
64
|
+
"@deepseek-ai/dsh-llm": "0.1.7-alpha.1",
|
|
65
|
+
"@deepseek-ai/dsh-storage-domain": "0.1.7-alpha.1",
|
|
66
|
+
"zod": "^4.1.5",
|
|
67
|
+
"@klarkxy/dsh-ai-services": "0.1.0"
|
|
68
|
+
},
|
|
69
|
+
"peerDependencies": {
|
|
70
|
+
"@deepseek-ai/cordis": "^4.0.3"
|
|
71
|
+
},
|
|
72
|
+
"devDependencies": {
|
|
73
|
+
"@deepseek-ai/cordis": "^4.0.3",
|
|
74
|
+
"react": "^18.2.0",
|
|
75
|
+
"@types/react": "18.3.31"
|
|
76
|
+
},
|
|
77
|
+
"keywords": [
|
|
78
|
+
"dsh",
|
|
79
|
+
"dsh-plugin",
|
|
80
|
+
"deepseek-harness",
|
|
81
|
+
"memory",
|
|
82
|
+
"dream"
|
|
83
|
+
],
|
|
84
|
+
"repository": {
|
|
85
|
+
"type": "git",
|
|
86
|
+
"url": "git+https://github.com/klarkxy/dsh-editor.git",
|
|
87
|
+
"directory": "packages/dsh-memory"
|
|
88
|
+
},
|
|
89
|
+
"homepage": "https://github.com/klarkxy/dsh-editor/tree/main/packages/dsh-memory#readme",
|
|
90
|
+
"bugs": {
|
|
91
|
+
"url": "https://github.com/klarkxy/dsh-editor/issues"
|
|
92
|
+
},
|
|
93
|
+
"publishConfig": {
|
|
94
|
+
"access": "public",
|
|
95
|
+
"registry": "https://registry.npmjs.org/"
|
|
96
|
+
},
|
|
97
|
+
"dshRelease": {
|
|
98
|
+
"contentHash": "sha256-6af0db4b9718744fc9244d7837d3704979a498515b7b3720c34949886f5b81f9"
|
|
99
|
+
},
|
|
100
|
+
"scripts": {
|
|
101
|
+
"build": "tsdown && node ../../scripts/wrap-client.mjs @klarkxy/dsh-memory",
|
|
102
|
+
"typecheck": "tsc --noEmit -p tsconfig.json",
|
|
103
|
+
"test": "vitest run --root ../.. packages/dsh-memory/src"
|
|
104
|
+
}
|
|
105
|
+
}
|