@zooique/memora 4.0.0 → 5.0.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/CHANGELOG.md +165 -1743
- package/README.en.md +43 -36
- package/README.md +308 -303
- package/dist/agent/agent.d.ts +46 -82
- package/dist/agent/agent.d.ts.map +1 -1
- package/dist/agent/agent.js +153 -220
- package/dist/agent/agent.js.map +1 -1
- package/dist/agent/assembler.d.ts +3 -16
- package/dist/agent/assembler.d.ts.map +1 -1
- package/dist/agent/assembler.js +46 -35
- package/dist/agent/assembler.js.map +1 -1
- package/dist/agent/backgroundTasks.d.ts +8 -1
- package/dist/agent/backgroundTasks.d.ts.map +1 -1
- package/dist/agent/backgroundTasks.js +8 -1
- package/dist/agent/backgroundTasks.js.map +1 -1
- package/dist/agent/budget.d.ts +23 -5
- package/dist/agent/budget.d.ts.map +1 -1
- package/dist/agent/budget.js +8 -2
- package/dist/agent/budget.js.map +1 -1
- package/dist/agent/builtinToolHandlers.d.ts +27 -8
- package/dist/agent/builtinToolHandlers.d.ts.map +1 -1
- package/dist/agent/builtinToolHandlers.js +45 -9
- package/dist/agent/builtinToolHandlers.js.map +1 -1
- package/dist/agent/builtinTools.d.ts.map +1 -1
- package/dist/agent/builtinTools.js +4 -3
- package/dist/agent/builtinTools.js.map +1 -1
- package/dist/agent/constants.d.ts +0 -6
- package/dist/agent/constants.d.ts.map +1 -1
- package/dist/agent/constants.js +7 -8
- package/dist/agent/constants.js.map +1 -1
- package/dist/agent/contextManager.d.ts +8 -0
- package/dist/agent/contextManager.d.ts.map +1 -1
- package/dist/agent/contextManager.js +45 -3
- package/dist/agent/contextManager.js.map +1 -1
- package/dist/agent/contextPreparer.d.ts +1 -1
- package/dist/agent/contextPreparer.d.ts.map +1 -1
- package/dist/agent/contextPreparer.js +15 -10
- package/dist/agent/contextPreparer.js.map +1 -1
- package/dist/agent/guardRail.d.ts +1 -1
- package/dist/agent/guardRail.d.ts.map +1 -1
- package/dist/agent/guardRail.js +1 -1
- package/dist/agent/guardRail.js.map +1 -1
- package/dist/agent/loop.d.ts +46 -13
- package/dist/agent/loop.d.ts.map +1 -1
- package/dist/agent/loop.js +128 -25
- package/dist/agent/loop.js.map +1 -1
- package/dist/agent/managers/archiveCoordinator.d.ts +15 -3
- package/dist/agent/managers/archiveCoordinator.d.ts.map +1 -1
- package/dist/agent/managers/archiveCoordinator.js +13 -7
- package/dist/agent/managers/archiveCoordinator.js.map +1 -1
- package/dist/agent/managers/chatLockManager.d.ts +3 -9
- package/dist/agent/managers/chatLockManager.d.ts.map +1 -1
- package/dist/agent/managers/chatLockManager.js +7 -25
- package/dist/agent/managers/chatLockManager.js.map +1 -1
- package/dist/agent/managers/llmCaller.d.ts.map +1 -1
- package/dist/agent/managers/llmCaller.js +27 -1
- package/dist/agent/managers/llmCaller.js.map +1 -1
- package/dist/agent/managers/memoryInspector.d.ts +12 -7
- package/dist/agent/managers/memoryInspector.d.ts.map +1 -1
- package/dist/agent/managers/memoryInspector.js +32 -19
- package/dist/agent/managers/memoryInspector.js.map +1 -1
- package/dist/agent/managers/roundSummaryGenerator.d.ts +3 -1
- package/dist/agent/managers/roundSummaryGenerator.d.ts.map +1 -1
- package/dist/agent/managers/roundSummaryGenerator.js +14 -4
- package/dist/agent/managers/roundSummaryGenerator.js.map +1 -1
- package/dist/agent/managers/sessionArchiver.d.ts +20 -6
- package/dist/agent/managers/sessionArchiver.d.ts.map +1 -1
- package/dist/agent/managers/sessionArchiver.js +19 -5
- package/dist/agent/managers/sessionArchiver.js.map +1 -1
- package/dist/agent/managers/sessionManager.d.ts +21 -88
- package/dist/agent/managers/sessionManager.d.ts.map +1 -1
- package/dist/agent/managers/sessionManager.js +77 -278
- package/dist/agent/managers/sessionManager.js.map +1 -1
- package/dist/agent/seed/orchestrator.d.ts.map +1 -1
- package/dist/agent/seed/orchestrator.js +3 -3
- package/dist/agent/seed/orchestrator.js.map +1 -1
- package/dist/agent/seed/prepare.d.ts.map +1 -1
- package/dist/agent/seed/prepare.js +9 -4
- package/dist/agent/seed/prepare.js.map +1 -1
- package/dist/agent/seed/types.d.ts +11 -4
- package/dist/agent/seed/types.d.ts.map +1 -1
- package/dist/agent/seed/types.js +2 -2
- package/dist/agent/toolExecutor.d.ts +51 -6
- package/dist/agent/toolExecutor.d.ts.map +1 -1
- package/dist/agent/toolExecutor.js +74 -9
- package/dist/agent/toolExecutor.js.map +1 -1
- package/dist/agent/toolResultCache.js +1 -1
- package/dist/agent/toolRunner.d.ts +4 -2
- package/dist/agent/toolRunner.d.ts.map +1 -1
- package/dist/agent/toolRunner.js +7 -4
- package/dist/agent/toolRunner.js.map +1 -1
- package/dist/agent/types.d.ts +8 -25
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/index.d.ts +9 -20
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +35 -32
- package/dist/index.js.map +1 -1
- package/dist/logging/logger.d.ts +4 -1
- package/dist/logging/logger.d.ts.map +1 -1
- package/dist/logging/logger.js +5 -2
- package/dist/logging/logger.js.map +1 -1
- package/dist/memory/gcService.d.ts.map +1 -1
- package/dist/memory/gcService.js +3 -5
- package/dist/memory/gcService.js.map +1 -1
- package/dist/memory/inMemorySessionStore.d.ts +2 -2
- package/dist/memory/inMemorySessionStore.js +2 -2
- package/dist/memory/inMemoryStorage.d.ts +4 -3
- package/dist/memory/inMemoryStorage.d.ts.map +1 -1
- package/dist/memory/inMemoryStorage.js +2 -2
- package/dist/memory/inMemoryStorage.js.map +1 -1
- package/dist/memory/nodeSqliteStorage.d.ts +17 -0
- package/dist/memory/nodeSqliteStorage.d.ts.map +1 -0
- package/dist/memory/nodeSqliteStorage.js +393 -0
- package/dist/memory/nodeSqliteStorage.js.map +1 -0
- package/dist/memory/projectManager.d.ts +10 -20
- package/dist/memory/projectManager.d.ts.map +1 -1
- package/dist/memory/projectManager.js +27 -41
- package/dist/memory/projectManager.js.map +1 -1
- package/dist/memory/roundStore.d.ts +76 -1
- package/dist/memory/roundStore.d.ts.map +1 -1
- package/dist/memory/roundStore.js.map +1 -1
- package/dist/memory/roundSummaryLookup.d.ts +26 -0
- package/dist/memory/roundSummaryLookup.d.ts.map +1 -0
- package/dist/memory/roundSummaryLookup.js +19 -0
- package/dist/memory/roundSummaryLookup.js.map +1 -0
- package/dist/memory/sessionStore.d.ts +19 -2
- package/dist/memory/sessionStore.d.ts.map +1 -1
- package/dist/memory/sessionStore.js.map +1 -1
- package/dist/memory/sourceValidation.d.ts +2 -13
- package/dist/memory/sourceValidation.d.ts.map +1 -1
- package/dist/memory/sourceValidation.js +5 -16
- package/dist/memory/sourceValidation.js.map +1 -1
- package/dist/memory/storageInterface.d.ts +26 -16
- package/dist/memory/storageInterface.d.ts.map +1 -1
- package/dist/memory/supersedeResolve.d.ts +39 -0
- package/dist/memory/supersedeResolve.d.ts.map +1 -0
- package/dist/memory/supersedeResolve.js +16 -0
- package/dist/memory/supersedeResolve.js.map +1 -0
- package/dist/memory/types.d.ts +3 -2
- package/dist/memory/types.d.ts.map +1 -1
- package/dist/memory/types.js +2 -1
- package/dist/memory/types.js.map +1 -1
- package/dist/role-pack/rolePackManager.d.ts +33 -24
- package/dist/role-pack/rolePackManager.d.ts.map +1 -1
- package/dist/role-pack/rolePackManager.js +48 -42
- package/dist/role-pack/rolePackManager.js.map +1 -1
- package/dist/role-pack/strategyKeys.d.ts +8 -0
- package/dist/role-pack/strategyKeys.d.ts.map +1 -1
- package/dist/role-pack/strategyKeys.js +10 -0
- package/dist/role-pack/strategyKeys.js.map +1 -1
- package/dist/role-pack/strategyResolver.d.ts +6 -1
- package/dist/role-pack/strategyResolver.d.ts.map +1 -1
- package/dist/role-pack/strategyResolver.js +20 -2
- package/dist/role-pack/strategyResolver.js.map +1 -1
- package/dist/role-pack/types.d.ts +5 -1
- package/dist/role-pack/types.d.ts.map +1 -1
- package/dist/security/pathGuard.d.ts +1 -1
- package/dist/security/pathGuard.d.ts.map +1 -1
- package/dist/security/pathGuard.js +1 -1
- package/dist/security/pathGuard.js.map +1 -1
- package/dist/utils/backgroundTask.d.ts +56 -34
- package/dist/utils/backgroundTask.d.ts.map +1 -1
- package/dist/utils/backgroundTask.js +130 -99
- package/dist/utils/backgroundTask.js.map +1 -1
- package/dist/utils/errors.d.ts +3 -2
- package/dist/utils/errors.d.ts.map +1 -1
- package/dist/utils/errors.js +3 -2
- package/dist/utils/errors.js.map +1 -1
- package/dist/utils/eventEmitter.d.ts +20 -22
- package/dist/utils/eventEmitter.d.ts.map +1 -1
- package/dist/utils/eventEmitter.js +0 -3
- package/dist/utils/eventEmitter.js.map +1 -1
- package/dist/utils/time.d.ts +3 -3
- package/dist/utils/time.d.ts.map +1 -1
- package/dist/utils/time.js +3 -3
- package/dist/utils/time.js.map +1 -1
- package/dist/utils/toError.d.ts +1 -1
- package/dist/utils/toError.js +1 -1
- package/dist/web-fetch/loginWall.d.ts +39 -0
- package/dist/web-fetch/loginWall.d.ts.map +1 -0
- package/dist/web-fetch/loginWall.js +78 -0
- package/dist/web-fetch/loginWall.js.map +1 -0
- package/dist/web-fetch/types.d.ts +8 -0
- package/dist/web-fetch/types.d.ts.map +1 -1
- package/dist/web-fetch/webFetchProvider.d.ts.map +1 -1
- package/dist/web-fetch/webFetchProvider.js +3 -1
- package/dist/web-fetch/webFetchProvider.js.map +1 -1
- package/dist/web-search/fetchWebSearchProvider.js +28 -23
- package/dist/web-search/fetchWebSearchProvider.js.map +1 -1
- package/docs/architecture/role-pack-authoring-guide.md +3 -1
- package/docs/architecture/role-pack-spec.md +2 -1
- package/docs/memora-api-reference.md +1349 -1276
- package/docs/memora-/345/215/207/347/272/247/346/214/207/345/215/227-4.x-/345/210/260-5.0.0.md +385 -0
- package/docs/memora-/346/216/245/345/205/245/346/214/207/345/215/227.md +87 -49
- package/docs/role-pack-/345/274/200/346/224/276/351/224/256/346/214/207/345/215/227.md +148 -148
- package/package.json +9 -4
- package/role-packs/README.md +41 -40
- package/role-packs/memora/345/212/251/346/211/213/rules.md +4 -4
- package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/manifest.json +1 -0
- package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/persona.md +46 -46
- package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/rules.md +16 -16
- package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/emotion-wave.md +46 -46
- package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/foreshadow.md +29 -29
- package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/outline-expand.md +73 -48
- package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/project-init/scripts/init-novel-project.mjs +445 -441
- package/role-packs//345/205/261/351/270/243/345/260/217/350/257/264/345/256/266/skills/story-bible.md +62 -62
- package/role-packs//347/231/275/350/257/235/346/226/271/346/241/210/350/256/276/350/256/241/345/270/210/manifest.json +1 -0
- package/dist/agent/managers/dedupManager.d.ts +0 -85
- package/dist/agent/managers/dedupManager.d.ts.map +0 -1
- package/dist/agent/managers/dedupManager.js +0 -248
- package/dist/agent/managers/dedupManager.js.map +0 -1
- package/dist/agent/managers/goalConsistencyChecker.d.ts +0 -42
- package/dist/agent/managers/goalConsistencyChecker.d.ts.map +0 -1
- package/dist/agent/managers/goalConsistencyChecker.js +0 -178
- package/dist/agent/managers/goalConsistencyChecker.js.map +0 -1
- package/dist/agent/managers/llmJudgeHelper.d.ts +0 -21
- package/dist/agent/managers/llmJudgeHelper.d.ts.map +0 -1
- package/dist/agent/managers/llmJudgeHelper.js +0 -32
- package/dist/agent/managers/llmJudgeHelper.js.map +0 -1
- package/dist/agent/managers/memoryAdvisor.d.ts +0 -105
- package/dist/agent/managers/memoryAdvisor.d.ts.map +0 -1
- package/dist/agent/managers/memoryAdvisor.js +0 -322
- package/dist/agent/managers/memoryAdvisor.js.map +0 -1
- package/dist/agent/managers/memoryGovernance.d.ts +0 -24
- package/dist/agent/managers/memoryGovernance.d.ts.map +0 -1
- package/dist/agent/managers/memoryGovernance.js +0 -46
- package/dist/agent/managers/memoryGovernance.js.map +0 -1
- package/dist/memory/governance.d.ts +0 -17
- package/dist/memory/governance.d.ts.map +0 -1
- package/dist/memory/governance.js +0 -17
- package/dist/memory/governance.js.map +0 -1
- package/dist/memory/projectRegistry.d.ts +0 -47
- package/dist/memory/projectRegistry.d.ts.map +0 -1
- package/dist/memory/projectRegistry.js +0 -151
- package/dist/memory/projectRegistry.js.map +0 -1
- package/dist/utils/recallDefaults.d.ts +0 -16
- package/dist/utils/recallDefaults.d.ts.map +0 -1
- package/dist/utils/recallDefaults.js +0 -16
- package/dist/utils/recallDefaults.js.map +0 -1
package/README.en.md
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
[](https://nodejs.org)
|
|
7
7
|
[](https://www.typescriptlang.org)
|
|
8
8
|
[](https://vitest.dev)
|
|
9
|
-
[](https://vitest.dev)
|
|
10
10
|
[](package.json)
|
|
11
11
|
[](LICENSE)
|
|
12
12
|
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
## What problem are you facing?
|
|
18
18
|
|
|
19
19
|
- **LLM forgets everything between sessions** — Your users remember what they said, your agent doesn't
|
|
20
|
-
- **Existing memory solutions are either too heavy (framework-bound) or too shallow (CRUD only)** — No
|
|
20
|
+
- **Existing memory solutions are either too heavy (framework-bound) or too shallow (CRUD only)** — No write-time supersede: either decay-only forgetting, or old and new memories coexist and contradict each other
|
|
21
21
|
- **Memory and persona are tangled** — Switch personas and lose your history
|
|
22
22
|
- **You don't want to send data to the cloud** — Need a local, private memory layer with zero external dependencies
|
|
23
23
|
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
|
|
26
26
|
Memora is an **Agent memory kernel** — framework-agnostic, cloud-independent, focused on one thing: **giving your agent cross-session, cross-topic long-term memory that stays clean.**
|
|
27
27
|
|
|
28
|
-
"Clean" means:
|
|
28
|
+
"Clean" means: write-time supersede (soft `supersededBy` pointer, traceable) and last-used refresh (accessedAt, used for ordering) — no importance weighting, and not just stuffing history into the context window. **Governance happens at write time only**: there is no subscription-style post-hoc sweep (dedup / conflict detection / related suggestions were retired as a whole in 5.0.0 — see the Core Capabilities table).
|
|
29
29
|
|
|
30
30
|
```typescript
|
|
31
31
|
import { Agent, createProviderFromConfig } from '@zooique/memora';
|
|
@@ -50,11 +50,6 @@ for await (const chunk of agent.chat('I love TypeScript')) {
|
|
|
50
50
|
// Next session — the LLM can call search_memories to retrieve this memory
|
|
51
51
|
const reply = await agent.chatSync('What language do I like?');
|
|
52
52
|
|
|
53
|
-
// Memory governance — dedup / conflict detection / source health
|
|
54
|
-
await agent.governance.deduplicate();
|
|
55
|
-
await agent.governance.detectConflicts();
|
|
56
|
-
const health = agent.governance.sourceHealth();
|
|
57
|
-
|
|
58
53
|
await agent.close();
|
|
59
54
|
```
|
|
60
55
|
|
|
@@ -66,14 +61,14 @@ await agent.close();
|
|
|
66
61
|
|
|
67
62
|
| | Memora | Vector memory libs (agent-memory, MemStack) | Framework-builtin memory (Mastra, LangGraph) |
|
|
68
63
|
|---|---|---|---|
|
|
69
|
-
| **Memory governance** | ✅
|
|
64
|
+
| **Memory governance** | ✅ Write-time supersede (soft `supersededBy`, traceable) | ⚠️ Decay only or none | ⚠️ Partial |
|
|
70
65
|
| **Framework lock-in** | ✅ Zero — pure kernel | ✅ Standalone | ❌ Tied to framework |
|
|
71
66
|
| **Data privacy** | ✅ 100% local | ✅ Local | ⚠️ Partially cloud |
|
|
72
67
|
| **Runtime deps** | ✅ Zero (node:* only) | ❌ SQLite / better-sqlite3 | ❌ Heavy |
|
|
73
68
|
| **Persona/memory separation** | ✅ Role-pack boundary discipline | ❌ No persona concept | ⚠️ Simple prompt |
|
|
74
69
|
| **Embeddable** | ✅ Any Node.js host | ✅ Standalone lib | ❌ Framework-internal |
|
|
75
70
|
|
|
76
|
-
**One-line positioning**: If you want a **framework-agnostic, governance-capable, zero-dependency** memory layer, Memora is currently the only option on npm.
|
|
71
|
+
**One-line positioning**: If you want a **framework-agnostic, governance-capable (write-time supersede), zero-dependency** memory layer, Memora is currently the only option on npm.
|
|
77
72
|
|
|
78
73
|
---
|
|
79
74
|
|
|
@@ -85,7 +80,7 @@ await agent.close();
|
|
|
85
80
|
|
|
86
81
|
Memora is a **brain kernel that cannot run standalone** — it has interfaces but no "form." A CLI, WebUI, desktop sprite, or novel generator can be its "host." The host gives it a body (UI), blood vessels (Provider), and neural circuits (event loops).
|
|
87
82
|
|
|
88
|
-
> **Version positioning (
|
|
83
|
+
> **Version positioning (v5.0.0)**: **Node.js-only · Zero third-party runtime deps Agent kernel**. **v5.0.0 (current)**: major public surface pruning (23 exports + 32 public members + 3 events removed) + multi-project shape finalized (one Agent = one project) + three never-live chains retired (goal-drift detection / memory governance facade / checkpoint fake-flushing) + a `node:*` built-in SQLite storage implementation added (`createNodeSqliteStorage`) — see the [upgrade guide](docs/memora-升级指南-4.x-到-5.0.0.md) for per-item migration. **v4.0.0**: public export surface collapsed (54 exports removed; full list in the `[4.0.0]` section of [CHANGELOG](./CHANGELOG.md)) + `agent.memory.search()` removed (`searchByKeyword()` is the sole entry).
|
|
89
84
|
|
|
90
85
|
---
|
|
91
86
|
|
|
@@ -95,7 +90,7 @@ Memora is a **brain kernel that cannot run standalone** — it has interfaces bu
|
|
|
95
90
|
|-----------|-------------|
|
|
96
91
|
| **Long-term Memory** | Cross-session, cross-topic memory persistence with tool-based recall (`search_memories`; no automatic injection) |
|
|
97
92
|
| **Memory Search Tool** | Keyword-only retrieval (`search_memories`), refreshes `accessedAt` on hit (semantic vector channel removed via B0, 2026-09-18) |
|
|
98
|
-
| **Memory Governance** | Write-time supersede + last-used refresh (`accessedAt` used for ordering; no importance weighting)
|
|
93
|
+
| **Memory Governance** | **Write-time governance only**: write-time supersede + last-used refresh (`accessedAt` used for ordering; no importance weighting). Subscription-style post-hoc governance (dedup / conflict detection / related suggestions) was retired as a whole in 5.0.0 |
|
|
99
94
|
| **Agent-Persona Separation** | Agent is a pure memory engine; persona is a personality vessel. Switch personas without losing memories |
|
|
100
95
|
| **Unified Memory Model** | Everything is a "Memory" primitive, distinguished by open-string `source` — no closed enums |
|
|
101
96
|
| **Domain-agnostic** | Same architecture, different memory configs → different domains |
|
|
@@ -119,8 +114,7 @@ import { Agent, createProviderFromConfig } from '@zooique/memora';
|
|
|
119
114
|
// Host responsibility: create an LLM Provider
|
|
120
115
|
// Works with any OpenAI Chat Completions-compatible service
|
|
121
116
|
// createProviderFromConfig is the canonical entry (baseUrl+model+apiKey → validated creation; provider
|
|
122
|
-
// selection is the host's responsibility).
|
|
123
|
-
// (active selection resolved inside the kernel) when you delegate the whole Config to it.
|
|
117
|
+
// selection is the host's responsibility).
|
|
124
118
|
const provider = createProviderFromConfig('primary', {
|
|
125
119
|
provider: 'openaiCompatible',
|
|
126
120
|
apiKey: process.env.LLM_API_KEY!,
|
|
@@ -159,15 +153,15 @@ const reply = await agent.chatSync('What language do I like?');
|
|
|
159
153
|
// Search memories (keyword-only; semantic vector channel removed via B0, 2026-09-18), limit is a number
|
|
160
154
|
const hits = await agent.memory.searchByKeyword('TypeScript preference', 5);
|
|
161
155
|
|
|
162
|
-
//
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
const conflicts = await agent.governance.detectConflicts();
|
|
156
|
+
// Source health diagnosis (pure computation, no LLM): sources are discovered dynamically
|
|
157
|
+
// via getAllSources(); per-source count / days since last access
|
|
158
|
+
const stats = agent.memory.stats();
|
|
159
|
+
console.log(stats.bySource);
|
|
167
160
|
|
|
168
|
-
//
|
|
169
|
-
|
|
170
|
-
|
|
161
|
+
// Write-time governance is handled by supersede: a new memory replaces the old one and
|
|
162
|
+
// leaves a soft `supersededBy` pointer (nothing is deleted, history stays traceable).
|
|
163
|
+
// Subscription-style post-hoc governance (dedup / conflict detection / related
|
|
164
|
+
// suggestions) was retired as a whole in 5.0.0 - see the note in API reference §4.
|
|
171
165
|
```
|
|
172
166
|
|
|
173
167
|
### Cleanup
|
|
@@ -189,8 +183,8 @@ await agent.close();
|
|
|
189
183
|
│ ┌──────────────────────────────────────────┐ │
|
|
190
184
|
│ │ Memora Kernel (Agent) │ │
|
|
191
185
|
│ │ - chat(input) → streaming response │ │
|
|
192
|
-
│ │ - Keyword-only search
|
|
193
|
-
│ │ -
|
|
186
|
+
│ │ - Keyword-only search │ │
|
|
187
|
+
│ │ - Write-time governance (supersede) │ │
|
|
194
188
|
│ │ - Role pack matching / Skill matching │ │
|
|
195
189
|
│ │ - Tool registration / execution │ │
|
|
196
190
|
│ │ - Session archive / round persistence │ │
|
|
@@ -204,10 +198,25 @@ The kernel interacts with the outside world through interfaces. Hosts inject imp
|
|
|
204
198
|
|
|
205
199
|
| Interface | Responsibility | Built-in Implementation |
|
|
206
200
|
|-----------|---------------|------------------------|
|
|
207
|
-
| `IMemoryStorage` | Memory CRUD + search + query by source | `
|
|
201
|
+
| `IMemoryStorage` | Memory CRUD + search + query by source | Built-in in-memory default (placeholder, non-persistent; internal class, not on the public surface — PUB-API-PRUNE-2) + optional persistent impl `createNodeSqliteStorage(dbPath)` (built-in `node:sqlite`, zero third-party deps) | Host picks the backend: create SQLite via the kernel factory, or implement its own (JSON / own SQLite) |
|
|
208
202
|
| `ISessionStore` | Session history persistence | None (host implements) |
|
|
209
203
|
| `ILogger` | Logging output | console fallback |
|
|
210
|
-
| `ITracer` | Observability spans | `
|
|
204
|
+
| `ITracer` | Observability spans | Internal noop (not on the public surface; omit `tracer` for zero overhead) |
|
|
205
|
+
|
|
206
|
+
### Multi-project and Agent boundaries (settled model)
|
|
207
|
+
|
|
208
|
+
**One Agent binds to one project** — `projectPath` + one storage + one session domain. For multiple projects, the **host** creates one Agent instance per project; the kernel neither switches projects nor maintains a cross-project registry.
|
|
209
|
+
|
|
210
|
+
| Dimension | Model |
|
|
211
|
+
|-----------|-------|
|
|
212
|
+
| One project (one Agent) | May own N sessions (`switchSession` / `switchToSession` / `forkSession`), but **only one runs at a time** |
|
|
213
|
+
| N projects (N Agent instances) | Run **in parallel**, each with its own memory store / sessions / project lock |
|
|
214
|
+
| Parallelism | **Counted by project, not by session** |
|
|
215
|
+
| Sessions within a project | **Share one memory store** (search has no session filter) ⇒ experience carries across sessions |
|
|
216
|
+
|
|
217
|
+
> **Trade-off (stated explicitly)**: this model deliberately does **not** mirror the mainstream "one session = one Agent instance" design. The cost: **two sessions cannot run in parallel within the same project** (mainstream tools just open two terminals). This is known and accepted, tracked as `MULTI-SESS-1` (observation only) — it is revisited only if a real need for "two parallel tasks in one repo" appears.
|
|
218
|
+
> **Rationale**: the memory store belongs to the **project**; a session is just a conversation thread inside it. Drawing the identity boundary at the project (not the session) is what lets experience carry across sessions.
|
|
219
|
+
> See the [integration guide](docs/memora-接入指南.md) ("多项目怎么办") for wiring details and data layout.
|
|
211
220
|
|
|
212
221
|
## Project Structure
|
|
213
222
|
|
|
@@ -220,8 +229,8 @@ src/
|
|
|
220
229
|
│ ├── assembler.ts # Component assembler (pure factory)
|
|
221
230
|
│ ├── contextManager.ts / contextPreparer.ts / toolExecutor.ts / toolRunner.ts ···
|
|
222
231
|
│ ├── seed/ # Minimal execution loop (prepare → act/difficulty → reflect, incl. external task outer loop)
|
|
223
|
-
│ └── managers/ #
|
|
224
|
-
├── memory/ # Memory engine (IMemoryStorage + InMemoryStorage +
|
|
232
|
+
│ └── managers/ # Specialized Managers/service classes (memoryInspector / roundSummaryGenerator / sessionManager / sessionArchiver / archiveCoordinator / workProjection / textPolishManager / chatLockManager, etc.)
|
|
233
|
+
├── memory/ # Memory engine (IMemoryStorage + InMemoryStorage + optional SQLite store + keyword recall / supersede resolution)
|
|
225
234
|
├── role-pack/ # Role packs (manifest parsing + validator + strategyResolver + capability mapping)
|
|
226
235
|
├── skill/ # Skill management (global pool + role-pack binding, progressive disclosure + skillScriptRunner)
|
|
227
236
|
├── llm/ # LLM adapter layer (provider + openaiCompatible + factory)
|
|
@@ -251,13 +260,10 @@ src/
|
|
|
251
260
|
|
|
252
261
|
| Metric | Value |
|
|
253
262
|
|--------|-------|
|
|
254
|
-
| Source |
|
|
255
|
-
| Tests | Dual vitest suites (kernel + host), run by the root vitest config
|
|
256
|
-
| Tests Passing |
|
|
257
|
-
|
|
|
258
|
-
| Branch Coverage | 84.83% |
|
|
259
|
-
| Function Coverage | 92.41% |
|
|
260
|
-
| Line Coverage | 91.79% |
|
|
263
|
+
| Source | All production files under src/ (zero third-party runtime deps; no count listed — any count is a point-in-time snapshot) |
|
|
264
|
+
| Tests | Dual vitest suites (kernel + host), run by the root vitest config |
|
|
265
|
+
| Tests Passing | All passing (pass/skip counts as measured by pre-release CI — point-in-time snapshots, not recorded here) |
|
|
266
|
+
| Test Coverage | Statement / branch / function / line coverage: run `npm run test:cov` for current values (no percentages recorded here — they are point-in-time snapshots) |
|
|
261
267
|
| Runtime Dependencies | **0** |
|
|
262
268
|
| Architecture Decision Records | In-repo `.trae/decisions/` directory (see its `README.md` for the index; no count listed here — any count is a point-in-time snapshot) |
|
|
263
269
|
|
|
@@ -274,6 +280,7 @@ npm run build # Compile to dist/
|
|
|
274
280
|
## Documentation
|
|
275
281
|
|
|
276
282
|
- [Integration Guide](docs/memora-接入指南.md) — Complete host developer onboarding manual (Chinese)
|
|
283
|
+
- [**Upgrading from 4.x to 5.0.0**](docs/memora-升级指南-4.x-到-5.0.0.md) — What was removed and how to migrate each item (Chinese; required for the major upgrade)
|
|
277
284
|
- [API Reference](docs/memora-api-reference.md) — Public API quick reference (Chinese)
|
|
278
285
|
- [Config Example](config.example.json) — LLM / Security config template
|
|
279
286
|
|
|
@@ -287,7 +294,7 @@ npm run build # Compile to dist/
|
|
|
287
294
|
|---|---|---|---|
|
|
288
295
|
| Data privacy | ✅ 100% local | ❌ Cloud-dependent | ⚠️ Varies |
|
|
289
296
|
| Runtime deps | ✅ Zero | N/A (SaaS) | ❌ Heavy |
|
|
290
|
-
| Memory lifecycle | ✅
|
|
297
|
+
| Memory lifecycle | ✅ Write-time supersede | ⚠️ Partial | ❌ CRUD only |
|
|
291
298
|
| Domain-agnostic | ✅ Open-string source | ⚠️ Opinionated | ⚠️ Framework-locked |
|
|
292
299
|
| Embeddable | ✅ Any Node.js host | ❌ API calls only | ⚠️ Framework-bound |
|
|
293
300
|
| Relation graph | ✅ Built-in sidecar | ❌ Rare | ❌ Rare |
|