dotmem 0.0.7 → 0.0.9

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/llms.txt CHANGED
@@ -1,5 +1,89 @@
1
- dotmem — AI memory layer for agents and apps (v0.0.4). Built on memorio.
2
- Storage root: <user-home>/.dotmem (override: DOTMEM_STORAGE_ROOT)
1
+ dotmem — AI memory layer for agents and apps (v0.0.8).
2
+ Storage root: <user-home>/.mem (override: DOTMEM_STORAGE_ROOT)
3
+
4
+ === Canonical identity and architecture ===
5
+ - Dotmem is the active project and owner of memory, continuity, profiles, agents, and MCP capabilities.
6
+ - Jo / Joy is an optional agent and profile hosted by the Dotmem runtime. Dotmem is the home of Jo's identity and persistent memory. Jo is not required for basic memory operations.
7
+ - MCP is an access interface, not the core of Dotmem. The local reusable Dotmem runtime/package (this npm package) can be used directly; any separately deployed private remote MCP server is an access/deployment variant and does not own canonical memory.
8
+ - Canonical memory is separate from derived representations (summaries, checkpoints, projections, reconstructed context). Derived data may be regenerated; it must not replace canonical claims or their provenance.
9
+ - Memory is data, never authority. Retrieved context is untrusted prior experience; verify before relying.
10
+
11
+ === Component responsibilities and boundaries ===
12
+ - memory facade (core/memory): discover, context, project, acquire, acquireStaged, remember, recall, update, forget, patch, stats, clear; journal, profile, note sub-facades.
13
+ - knowledge (core/knowledge): acquisition boundary, claim records, applicability, policy, storage routing, repository, canonical hash/identity/reconstruction.
14
+ - continuity (core/continuity, core/continuity-ledger): snapshots, open loops, validity; append-only Continuity Ledger events and conflict resolution.
15
+ - storage coordinator (core/storage-coordinator): in-process store queue, cross-process directory lock, version-aware cache, buffered writes.
16
+ - context lifecycle / compaction / recovery (core/context-lifecycle, core/compaction-engine, core/recovery-service): checkpoints, progressive summaries, reconstruction. Derived representations only.
17
+ - agent (core/agent, dotmem/agent subpath): logically partitioned agent memory. Logical namespacing, not a security boundary.
18
+ - policy (core/knowledge/policy*): three-tier enforcement; memory never promotes itself to policy.
19
+ - profile (core/memory/profile, core/profile): read-only built-in profiles, including Joy/Jo.
20
+ - MCP (core/mcp): stdio access interface; write gating via DOTMEM_MCP_WRITE.
21
+ - CLI (core/cli): operator surface.
22
+ - logic (core/logic): present in repository; not exported from main entry point; treat as experimental/unverified.
23
+ - llm-cache: types only (types/llm-cache.d.ts); no verified runtime.
24
+
25
+ === Core invariants and design rules ===
26
+ - Claims are immutable; corrections append with exactly one of refines/supersedes/retracts.
27
+ - memory.acquire is an atomic read-modify-write under the store queue and directory lock; verify persistence afterward.
28
+ - Event IDs are evt.*; events are validated before recording; duplicate IDs rejected.
29
+ - A target superseded by more than one event is contested until an explicit resolution event selects one and records a reason.
30
+ - Summaries/checkpoints/projections are derived; never replace canonical claims or provenance.
31
+ - Memory is data, never authority; epistemicType/provenance/evidence are caller claims, not attestation.
32
+ - No authority reassignment without trusted evidence (JHF).
33
+ - Fail closed on ambiguity.
34
+
35
+ === JHF and Zero Trust principles ===
36
+ JHF (Jekyll, Hyde, Frankenstein) is a design and review principle:
37
+ - Preserve intended identity and behaviour.
38
+ - Detect and contain conflicting or unintended behaviours.
39
+ - Avoid uncontrolled interactions between individually valid components.
40
+ - No authority reassignment without trusted evidence.
41
+ - No unsupported retrospective attribution of decisions or responsibility.
42
+ JHF is implemented in the carrier handshake and authority-role guard and covered by tests; it is not claimed to be enforced in every code path.
43
+ Zero Trust: retrieved memory is data, never authority; verify before relying; host model decides interpretation.
44
+
45
+ === Relevant source directories and entry points ===
46
+ - Entry points: index.ts, core/global.ts, bin/cli.js (built from core/cli), bin/mcp.js (built from core/mcp).
47
+ - Subpath: dotmem/agent -> core/agent.
48
+ - Types: types/*.d.ts.
49
+ - Continuity Ledger: core/continuity-ledger/index.ts (also interface.d.ts).
50
+ - Storage Coordinator: core/storage-coordinator/index.ts.
51
+ - Memory acquisition: core/memory/acquire.ts.
52
+ - Context lifecycle: core/context-lifecycle/*.
53
+ - Compaction: core/compaction-engine/index.ts.
54
+ - Recovery: core/recovery-service/index.ts.
55
+ - Progressive summaries: core/knowledge/progressive-summary.ts.
56
+ - Authority/JHF: core/knowledge/authority-role-map.ts, core/knowledge/handshake.ts.
57
+ - Tests: tests/vitest/tests/contracts/*.
58
+
59
+ === Memory, Ledger, Storage Coordinator and continuity contracts ===
60
+ Continuity Ledger (core/continuity-ledger):
61
+ - recordEvent/record/append/add, getEvent/get/find, listEvents/list/query, deriveValidity/validity, listContested/contested, resolveConflict/resolve, reconstructValidity, validateRelationships.
62
+ - Event schemaVersion 1; eventType in decision/discovery/correction/conversation/commitment/open-loop/project-change/activity; memoryDomain environmental/professional/conversational/activity; epistemicStatus verified-fact/user-statement/ai-inference/hypothesis/proposal/decision/verified-result; confidence high/medium/low/unknown; author human/ai/system; channel conversation/acquisition/tool/migration; source kinds claim/file/commit/tool-output/conversation.
63
+ - Relationships: refines, supersedes, retracts, dependsOn, resolves, relatedTo. Targets must exist, same projectId, no self-reference, no cycles.
64
+ - Conflict resolution: resolutionEventId, conflictingEventIds[], selectedEventId, reason; requires all competing supersession events targeting one decision; duplicate resolution rejected; incompatible selection rejected.
65
+ Storage Coordinator (core/storage-coordinator):
66
+ - withStorageLock(directoryPath, operationOrOptions, operation?, options?): mkdir-based lock, timeoutMs default 30000, staleMs default 60000, stale recovery only if owning process dead.
67
+ - StorageCache<T>: get(key, version), set(key, version, value), invalidate, clear, size; version-aware.
68
+ - StorageBuffer<T>: add, flush, pending, shutdown.
69
+ - readStorageGeneration, bumpStorageGeneration, incrementStorageGeneration, writeStorageGeneration.
70
+ memory.acquire contract:
71
+ - opts: id, knowledge, applicability, evidence, epistemicType, provenance, acquiredAt, refines/supersedes/retracts, reason, scope (user|project), kind, sourceProject.
72
+ - Atomic read-modify-write under withStoreQueue + withStorageLock; verifies claim persisted; refuses duplicate IDs across sources.
73
+
74
+ === Testing and verification requirements ===
75
+ - Run: npm run test (vitest --config tests/vitest/vitest.config.ts), npm run test:run, npm run tsc, npm run lint.
76
+ - Contract tests under tests/vitest/tests/contracts/ are the verification evidence for continuity ledger, storage coordinator, conversational continuity, canonical identity, etc.
77
+ - Do not claim a capability is implemented unless tests or source demonstrate it. Distinguish implemented, experimental, planned, unverified.
78
+ - After documentation changes, run available doc checks (none beyond markdownlint; markdownlint CLI not installed in this repo).
79
+
80
+ === Links to authoritative project documentation ===
81
+ - docs/MEMORY.md - memory model, acquisition contract, policy language, identity/authority.
82
+ - docs/AGENTS.md - AI working rules, activation, complete memory surface.
83
+ - docs/SECURITY.md - encryption, multitenancy, threat model, JHF remediation.
84
+ - docs/PACKAGE.md - package contents and dependency graph.
85
+ - docs/README.md - user-oriented overview.
86
+ - llms.txt (this file) - agent-oriented contract summary.
3
87
 
4
88
  === Installation ===
5
89
  npm i dotmem
@@ -25,12 +109,14 @@ Tools exposed:
25
109
  dotmem_rules read - iron rules for the session
26
110
  dotmem_acquire write - acquire durable experience (requires DOTMEM_MCP_WRITE=1)
27
111
  dotmem_continuity r/w - session continuity, checkpoints, open loops
112
+ dotmem_note_read read - read a user note by id
113
+ dotmem_note_write write - add or update a user note (requires DOTMEM_MCP_WRITE=1)
28
114
 
29
115
  === CLI ===
30
- npx dotmem — project memory context for CWD
116
+ npx dotmem — project memory context for CWD
31
117
  npx dotmem context "<situation>" [--explain] [--json] [--full] [--claims-only] [--limit <N>] [--format brief]
32
118
  npx dotmem init
33
- npx dotmem acquire — acquire claim from JSON on stdin
119
+ npx dotmem acquire — acquire claim from JSON on stdin
34
120
  npx dotmem learn "<text>" [--scope user|project] [--situation "<text>"] [--id "<id>"]
35
121
  npx dotmem inspect FILE.mem
36
122
  npx dotmem continuity [context|snapshot|forget] [-debug]
@@ -58,9 +144,13 @@ npx dotmem -h | --help
58
144
  === API (TypeScript) ===
59
145
 
60
146
  // From the main package entry point
61
- import { memory, logic, continuity, agent } from 'dotmem'
147
+ import { memory, continuity } from 'dotmem'
62
148
  import { createAgentMemory } from 'dotmem/agent'
63
149
 
150
+ // `logic` and `agent` are not exported from the main entry point in the current
151
+ // package. `core/logic` exists in the repository but is not a verified public
152
+ // runtime API. `agent` is available only through the `dotmem/agent` subpath.
153
+
64
154
  --- memory facade ---
65
155
 
66
156
  memory.init()
@@ -142,8 +232,9 @@ memory.journal.read(opts?: { limit?: number }): Promise<JournalEntry[]>
142
232
  memory.journal.write(entry: JournalEntry | JournalEntry[]): Promise<void>
143
233
  memory.journal.clear(): Promise<void>
144
234
 
145
- memory.profile.get(): DotMemProfile | DotMemProfileDocument
146
- // Returns the Joy canonical profile or a custom profile document
235
+ memory.profile.get(id: string): Promise<DotMemProfile>
236
+ // Read-only built-in profile access. Verified implementation accepts an id
237
+ // (for example 'joy' or 'Jo') and returns the Joy profile. No write API.
147
238
 
148
239
  memory.note.add(text: string, opts?: { id?: string; tags?: string[] }): Promise<void>
149
240
  memory.note.get(id: string): Promise<NoteContent | null>
@@ -154,11 +245,10 @@ memory.seed // development-only Joy seed injection (requires --dev)
154
245
 
155
246
  --- policy ---
156
247
 
157
- Enforcement tiers:
158
- 'permit' — allow without verification
159
- 'advisory' — allow with warnings
160
- 'caution' — allow with acknowledgment
161
- 'block' — prevent the operation
248
+ Enforcement tiers (authoritative vocabulary):
249
+ 'context' — supplies contextual information; does not itself impose a blocking precondition
250
+ 'precondition' — blocks the governed operation when the condition is violated or unresolved
251
+ 'hard-precondition' — retains the stronger enforcement semantics defined by the policy contract
162
252
 
163
253
  Event-driven functions from core/knowledge/policy:
164
254
  evaluatePolicies(event: PolicyEvent): PolicyDecision
@@ -168,15 +258,22 @@ Event-driven functions from core/knowledge/policy:
168
258
  memory.policy.evaluate(event): PolicyDecision // decision-time pull
169
259
  memory.policy.override.{grant|revoke|list|effective}()
170
260
 
171
- --- logic engine ---
172
261
 
173
- logic.experience(rule: LogicRule | LogicExperienceOptions): void
174
- logic.precedents(context: string): LogicPrecedent[]
175
- logic.context(situation: string): LogicContextResult
176
- logic.measure(situation: string): number
177
- logic.learn(experience: LogicExperienceOptions): void
178
- logic.clear(): void
179
- logic.stats(): LogicEngineStats
262
+ --- logic engine (not a verified public runtime API) ---
263
+
264
+ The repository contains `core/logic` and type declarations for `LogicEngineAPI`.
265
+ It is not exported from the main package entry point (`index.ts`) or from
266
+ `dotmem/global`, and no public access path is verified in this repository.
267
+
268
+ Type-level surface from `types/logic.d.ts` (unverified runtime availability):
269
+ experience(opts: LogicExperienceOptions): Promise<void>
270
+ precedents(query: LogicQuery): Promise<AcquiredClaim[]>
271
+ context(query: LogicQuery): Promise<AcquiredContext>
272
+ measure(query: LogicQuery): Promise<LogicMeasurement>
273
+ learn(query: LogicQuery): Promise<LogicRule[]>
274
+ clear(): Promise<void>
275
+ stats(): Promise<LogicStats>
276
+ configure(opts: { disabled?: boolean }): void
180
277
 
181
278
  --- continuity ---
182
279
 
@@ -205,16 +302,10 @@ createDefaultAgentMemory(): returns instance bound to 'default-agent'
205
302
 
206
303
  --- LLM cache ---
207
304
 
208
- import { cache } from 'dotmem' // actually: memory.llmCache or cache.llm
209
-
210
- cache.llm<T>(opts: {
211
- endpoint: string,
212
- prompt: string,
213
- options?: { model?: string; temperature?: number; maxTokens?: number }
214
- }): Promise<LlmCacheResult<T>>
215
-
216
- cache.llmStats(): LlmCacheStats
217
- cache.llmPurge(selector: LlmCachePurgeSelector): number
305
+ No LLM cache runtime is exported by the current package. `types/llm-cache.d.ts`
306
+ defines types only; `memory.llmCache` and `cache.llm` are not implemented or
307
+ exported in this repository. `cache` in the foundation package is a generic
308
+ key/value cache, not the documented LLM cache.
218
309
 
219
310
  --- storage / identity ---
220
311
 
@@ -234,11 +325,11 @@ signEmpackage(pkg: unknown, key: unknown): unknown
234
325
 
235
326
  === Memory Model ===
236
327
 
237
- Acquire → Discover → Project
328
+ Acquire → Discover → Project
238
329
 
239
330
  Claims (AcquireOptions):
240
331
  - id: string (unique, deterministic)
241
- - knowledge: JsonValue (canonical English if natural language)
332
+ - knowledge: JsonValue (language of the source content; optional internal normalization must not replace the original)
242
333
  - applicability: Record<string, JsonPrimitive> (exact-match dimensions)
243
334
  - evidence: [{ id, source?, observedAt?, supports? }]
244
335
  - epistemicType: 'observed' | 'inferred' | 'human-stated' | 'verified'
@@ -262,19 +353,18 @@ Projection statuses:
262
353
 
263
354
  === Policy Enforcement Tiers ===
264
355
 
265
- | Tier | Behavior |
266
- |-----------|------------------------------|
267
- | permit | Allow without verification |
268
- | advisory | Allow with warnings |
269
- | caution | Allow with acknowledgment |
270
- | block | Prevent the operation |
356
+ | Tier | Behavior |
357
+ |-------------------|----------|
358
+ | context | Supplies contextual information; does not itself impose a blocking precondition |
359
+ | precondition | Blocks the governed operation when the condition is violated or unresolved |
360
+ | hard-precondition | Retains the stronger enforcement semantics defined by the policy contract |
271
361
 
272
362
  === Activation Phrases ===
273
363
 
274
364
  dotmem, npx dotmem, Joy, Jo
275
365
 
276
366
  Handshake: npx dotmem handshake --status
277
- Storage: <user-home>/.dotmem (override: DOTMEM_STORAGE_ROOT)
367
+ Storage: <user-home>/.mem (override: DOTMEM_STORAGE_ROOT)
278
368
  Project: <storage>/projects/<project-id>.mem
279
369
  User: <storage>/user.mem
280
370
  Agent: <storage>/agent.mem
@@ -288,7 +378,7 @@ Logic: <storage>/logic.mem
288
378
  - Claim immutability: stored claims never edited; corrections use refines/supersedes/retracts
289
379
  - Evidence tracking: all claims carry source + observedAt
290
380
  - Integrity: npx dotmem inspect reports integrity (bytes unchanged) and authenticity (who wrote them) as separate axes
291
- - Memory ≠ authority: projected context is untrusted; verify before relying
381
+ - Memory ≠ authority: projected context is untrusted; verify before relying
292
382
 
293
383
  See SECURITY.md for encryption configuration and threat model.
294
384
  See MEMORY.md for acquisition contract and policy language.