opencode-harnmem 0.0.0-stage → 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.
Files changed (87) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +45 -2
  3. package/index.js +512 -0
  4. package/lib/engine.mjs +72 -0
  5. package/lib/format.mjs +119 -0
  6. package/lib/settings.mjs +131 -0
  7. package/package.json +23 -3
  8. package/vendor/core/assets.d.ts +52 -0
  9. package/vendor/core/assets.d.ts.map +1 -0
  10. package/vendor/core/assets.js +227 -0
  11. package/vendor/core/assets.js.map +1 -0
  12. package/vendor/core/config.d.ts +36 -0
  13. package/vendor/core/config.d.ts.map +1 -0
  14. package/vendor/core/config.js +134 -0
  15. package/vendor/core/config.js.map +1 -0
  16. package/vendor/core/consolidate.d.ts +14 -0
  17. package/vendor/core/consolidate.d.ts.map +1 -0
  18. package/vendor/core/consolidate.js +237 -0
  19. package/vendor/core/consolidate.js.map +1 -0
  20. package/vendor/core/data/synonyms.en.txt +61 -0
  21. package/vendor/core/data/synonyms.zh.txt +157 -0
  22. package/vendor/core/extract.d.ts +49 -0
  23. package/vendor/core/extract.d.ts.map +1 -0
  24. package/vendor/core/extract.js +179 -0
  25. package/vendor/core/extract.js.map +1 -0
  26. package/vendor/core/frontmatter.d.ts +31 -0
  27. package/vendor/core/frontmatter.d.ts.map +1 -0
  28. package/vendor/core/frontmatter.js +372 -0
  29. package/vendor/core/frontmatter.js.map +1 -0
  30. package/vendor/core/harnmem.d.ts +87 -0
  31. package/vendor/core/harnmem.d.ts.map +1 -0
  32. package/vendor/core/harnmem.js +918 -0
  33. package/vendor/core/harnmem.js.map +1 -0
  34. package/vendor/core/hot-context.d.ts +28 -0
  35. package/vendor/core/hot-context.d.ts.map +1 -0
  36. package/vendor/core/hot-context.js +179 -0
  37. package/vendor/core/hot-context.js.map +1 -0
  38. package/vendor/core/index.d.ts +16 -0
  39. package/vendor/core/index.d.ts.map +1 -0
  40. package/vendor/core/index.js +10 -0
  41. package/vendor/core/index.js.map +1 -0
  42. package/vendor/core/indexer.d.ts +107 -0
  43. package/vendor/core/indexer.d.ts.map +1 -0
  44. package/vendor/core/indexer.js +282 -0
  45. package/vendor/core/indexer.js.map +1 -0
  46. package/vendor/core/inspect.d.ts +278 -0
  47. package/vendor/core/inspect.d.ts.map +1 -0
  48. package/vendor/core/inspect.js +643 -0
  49. package/vendor/core/inspect.js.map +1 -0
  50. package/vendor/core/lifecycle.d.ts +50 -0
  51. package/vendor/core/lifecycle.d.ts.map +1 -0
  52. package/vendor/core/lifecycle.js +249 -0
  53. package/vendor/core/lifecycle.js.map +1 -0
  54. package/vendor/core/project.d.ts +41 -0
  55. package/vendor/core/project.d.ts.map +1 -0
  56. package/vendor/core/project.js +197 -0
  57. package/vendor/core/project.js.map +1 -0
  58. package/vendor/core/prompts/README.md +96 -0
  59. package/vendor/core/prompts/consolidate-digest.md +31 -0
  60. package/vendor/core/prompts/extract.md +80 -0
  61. package/vendor/core/prompts/migrate.md +96 -0
  62. package/vendor/core/prompts/synonyms.md +43 -0
  63. package/vendor/core/prompts/write-policy.md +12 -0
  64. package/vendor/core/retrieval.d.ts +95 -0
  65. package/vendor/core/retrieval.d.ts.map +1 -0
  66. package/vendor/core/retrieval.js +569 -0
  67. package/vendor/core/retrieval.js.map +1 -0
  68. package/vendor/core/store.d.ts +145 -0
  69. package/vendor/core/store.d.ts.map +1 -0
  70. package/vendor/core/store.js +511 -0
  71. package/vendor/core/store.js.map +1 -0
  72. package/vendor/core/suggest.d.ts +128 -0
  73. package/vendor/core/suggest.d.ts.map +1 -0
  74. package/vendor/core/suggest.js +384 -0
  75. package/vendor/core/suggest.js.map +1 -0
  76. package/vendor/core/text.d.ts +80 -0
  77. package/vendor/core/text.d.ts.map +1 -0
  78. package/vendor/core/text.js +253 -0
  79. package/vendor/core/text.js.map +1 -0
  80. package/vendor/core/types.d.ts +453 -0
  81. package/vendor/core/types.d.ts.map +1 -0
  82. package/vendor/core/types.js +14 -0
  83. package/vendor/core/types.js.map +1 -0
  84. package/vendor/core/util.d.ts +38 -0
  85. package/vendor/core/util.d.ts.map +1 -0
  86. package/vendor/core/util.js +248 -0
  87. package/vendor/core/util.js.map +1 -0
@@ -0,0 +1,282 @@
1
+ import { fieldsOf } from "./config.js";
2
+ import { DEFAULT_BM25, idf, weightedTerms } from "./text.js";
3
+ import { sha256Hex } from "./util.js";
4
+ export class ShardIndex {
5
+ name;
6
+ seq;
7
+ docs;
8
+ docLens;
9
+ avgLen;
10
+ docTerms;
11
+ postings;
12
+ constructor(name, seq, docs, docLens, avgLen, docTerms, postings) {
13
+ this.name = name;
14
+ this.seq = seq;
15
+ this.docs = docs;
16
+ this.docLens = docLens;
17
+ this.avgLen = avgLen;
18
+ this.docTerms = docTerms;
19
+ this.postings = postings;
20
+ }
21
+ get byId() {
22
+ return (this._byId ??= new Map(this.docs.map((d, i) => [d.id, i])));
23
+ }
24
+ _byId = null;
25
+ /**
26
+ * Adjacency maps built once per index: outgoing links (`id -> targets`) and
27
+ * incoming links (`target -> sources`). Link diffusion on dense corpora used
28
+ * to scan every doc per lookup (O(N^2) per query); these maps make each
29
+ * neighbor lookup O(degree). Built lazily because most queries never touch
30
+ * links; invalidated naturally by constructing a new ShardIndex.
31
+ */
32
+ adjacency() {
33
+ if (this._adjacency)
34
+ return this._adjacency;
35
+ const out = new Map();
36
+ const incoming = new Map();
37
+ for (const doc of this.docs) {
38
+ const targets = [...new Set(doc.links)];
39
+ out.set(doc.id, targets);
40
+ for (const target of targets) {
41
+ const sources = incoming.get(target);
42
+ if (sources)
43
+ sources.push(doc.id);
44
+ else
45
+ incoming.set(target, [doc.id]);
46
+ }
47
+ }
48
+ this._adjacency = { out, incoming };
49
+ return this._adjacency;
50
+ }
51
+ _adjacency = null;
52
+ /** Outgoing links from `id` (deduped, link order). */
53
+ outLinks(id) {
54
+ return this.adjacency().out.get(id) ?? [];
55
+ }
56
+ /** Incoming links to `id` (docs that link to it, doc order). */
57
+ inLinks(id) {
58
+ return this.adjacency().incoming.get(id) ?? [];
59
+ }
60
+ static build(name, records, seq, config, shard) {
61
+ const fields = fieldsOf(config);
62
+ const docs = [];
63
+ const docLens = [];
64
+ const docTerms = [];
65
+ const postings = new Map();
66
+ const ttl = config.retrieval?.ttlDays ?? {};
67
+ records.forEach((record, idx) => {
68
+ const { tf, len } = weightedTerms({
69
+ title: record.title,
70
+ description: record.description,
71
+ tags: record.tags,
72
+ entities: record.entities,
73
+ body: record.content,
74
+ }, fields);
75
+ docs.push({
76
+ id: record.id,
77
+ shard: name,
78
+ scope: record.scope,
79
+ project: record.project,
80
+ title: record.title,
81
+ description: record.description,
82
+ type: record.type,
83
+ tags: record.tags,
84
+ entities: record.entities,
85
+ status: record.status,
86
+ importance: record.importance,
87
+ confidence: record.confidence,
88
+ pinned: record.pinned,
89
+ created: record.created,
90
+ updated: record.updated,
91
+ lastUsed: record.lastUsed ?? 0,
92
+ usedCount: record.usedCount,
93
+ validFrom: record.validFrom,
94
+ validTo: record.validTo,
95
+ links: record.links,
96
+ sourceTrust: trustOf(record.source.harness),
97
+ contentHash: sha256Hex(record.content).slice(0, 16),
98
+ ttlDays: ttl[record.type] ?? 180,
99
+ });
100
+ docLens.push(len);
101
+ docTerms.push([...tf.keys()]);
102
+ for (const [term, value] of tf) {
103
+ let posting = postings.get(term);
104
+ if (!posting) {
105
+ posting = new Map();
106
+ postings.set(term, posting);
107
+ }
108
+ posting.set(idx, value);
109
+ }
110
+ });
111
+ const avgLen = docs.length === 0 ? 0 : docLens.reduce((a, b) => a + b, 0) / docLens.length;
112
+ return new ShardIndex(name, seq, docs, docLens, avgLen, docTerms, postings);
113
+ }
114
+ static fromJson(json) {
115
+ const postings = new Map();
116
+ for (const [term, list] of Object.entries(json.postings ?? {})) {
117
+ const map = new Map();
118
+ for (const [idx, w] of list)
119
+ map.set(idx, w);
120
+ postings.set(term, map);
121
+ }
122
+ return new ShardIndex(json.name, json.seq, json.docs, json.docLens, json.avgLen, json.docTerms ?? [], postings);
123
+ }
124
+ toJson(builtAt) {
125
+ const postings = {};
126
+ for (const [term, map] of this.postings) {
127
+ const list = [];
128
+ for (const [idx, w] of map)
129
+ list.push([idx, w]);
130
+ postings[term] = list;
131
+ }
132
+ return {
133
+ version: 1,
134
+ name: this.name,
135
+ seq: this.seq,
136
+ builtAt,
137
+ docs: this.docs,
138
+ docLens: this.docLens,
139
+ avgLen: this.avgLen,
140
+ docTerms: this.docTerms,
141
+ postings,
142
+ };
143
+ }
144
+ /** Number of documents containing a term. */
145
+ df(term) {
146
+ return this.postings.get(term)?.size ?? 0;
147
+ }
148
+ idfOf(term) {
149
+ return idf(this.docs.length, this.df(term));
150
+ }
151
+ /** Raw BM25F score for one doc. */
152
+ score(queryTerms, docIdx, params = DEFAULT_BM25) {
153
+ let score = 0;
154
+ const docLen = this.docLens[docIdx] ?? this.avgLen;
155
+ const norm = params.k1 * (1 - params.b + (params.b * docLen) / (this.avgLen || 1));
156
+ for (const term of queryTerms) {
157
+ const wTf = this.postings.get(term)?.get(docIdx);
158
+ if (!wTf)
159
+ continue;
160
+ score += this.idfOf(term) * ((wTf * (params.k1 + 1)) / (wTf + norm));
161
+ }
162
+ return score;
163
+ }
164
+ /** Ids linked from or to `id` (1-hop, both directions), O(degree). */
165
+ linkNeighbors(id) {
166
+ const out = this.outLinks(id);
167
+ const incoming = this.inLinks(id);
168
+ if (incoming.length === 0)
169
+ return out;
170
+ if (out.length === 0)
171
+ return incoming;
172
+ return [...new Set([...out, ...incoming])];
173
+ }
174
+ /** Docs that link to `id` (sorted for deterministic output). */
175
+ backlinks(id) {
176
+ return [...new Set(this.inLinks(id))].sort();
177
+ }
178
+ }
179
+ /** Source trust by harness: user speech 1.0, tools 0.8, model inference 0.5. */
180
+ export function trustOf(harness) {
181
+ switch (harness) {
182
+ case "user":
183
+ return 1.0;
184
+ case "pi":
185
+ case "dsh":
186
+ case "claude-code":
187
+ return 0.5;
188
+ case "import":
189
+ return 0.7;
190
+ case "tool":
191
+ return 0.8;
192
+ default:
193
+ return 0.5;
194
+ }
195
+ }
196
+ export class IndexManager {
197
+ store;
198
+ config;
199
+ cache = new Map();
200
+ usage = null;
201
+ constructor(store, config) {
202
+ this.store = store;
203
+ this.config = config;
204
+ }
205
+ setConfig(config) {
206
+ this.config = config;
207
+ this.cache.clear();
208
+ }
209
+ invalidate() {
210
+ this.cache.clear();
211
+ }
212
+ /** Usage counters are merged into doc metadata before ranking (no index rebuild). */
213
+ setUsage(usage) {
214
+ this.usage = usage;
215
+ for (const index of this.cache.values())
216
+ this.applyUsage(index);
217
+ }
218
+ applyUsage(index) {
219
+ if (!this.usage || this.usage.size === 0)
220
+ return index;
221
+ for (const doc of index.docs) {
222
+ const usage = this.usage.get(doc.id);
223
+ if (!usage)
224
+ continue;
225
+ if (usage.lastUsed > doc.lastUsed)
226
+ doc.lastUsed = usage.lastUsed;
227
+ if (usage.usedCount > doc.usedCount)
228
+ doc.usedCount = usage.usedCount;
229
+ }
230
+ return index;
231
+ }
232
+ /** Cached accessor by shard name, with on-disk cache validation via per-shard seq. */
233
+ async get(shard) {
234
+ const current = await this.store.getShardSeq(shard.name);
235
+ const cached = this.cache.get(shard.name);
236
+ if (cached && cached.seq === current)
237
+ return this.applyUsage(cached);
238
+ const raw = (await this.store.loadIndex(shardKeyOf(shard)));
239
+ if (raw && raw.version === 1 && raw.name === shard.name && raw.seq === current) {
240
+ const index = ShardIndex.fromJson(raw);
241
+ this.cache.set(shard.name, index);
242
+ return this.applyUsage(index);
243
+ }
244
+ const { records } = await this.store.readShard(shard);
245
+ const index = ShardIndex.build(shard.name, records, current, this.config, shard);
246
+ this.cache.set(shard.name, index);
247
+ await this.store.saveIndex(shardKeyOf(shard), index.toJson(Date.now()));
248
+ return this.applyUsage(index);
249
+ }
250
+ /** Force rebuild of a shard (writes new index + manifest entry). */
251
+ async rebuild(shard) {
252
+ const { records } = await this.store.readShard(shard);
253
+ const seq = await this.store.getShardSeq(shard.name);
254
+ const index = ShardIndex.build(shard.name, records, seq, this.config, shard);
255
+ this.cache.set(shard.name, index);
256
+ await this.store.saveIndex(shardKeyOf(shard), index.toJson(Date.now()));
257
+ await this.saveManifest();
258
+ return index;
259
+ }
260
+ async rebuildAll() {
261
+ const shards = await this.store.listShards();
262
+ const out = [];
263
+ for (const shard of shards)
264
+ out.push(await this.rebuild(shard));
265
+ await this.store.writeManifest(await this.store.getSeq(), out.map((i) => ({ name: i.name, docs: i.docs.length })));
266
+ return out;
267
+ }
268
+ async saveManifest() {
269
+ const shards = await this.store.listShards();
270
+ await this.store.writeManifest(await this.store.getSeq(), shards.map((s) => ({ name: s.name, scope: s.scope })));
271
+ }
272
+ get size() {
273
+ let n = 0;
274
+ for (const index of this.cache.values())
275
+ n += index.docs.length;
276
+ return n;
277
+ }
278
+ }
279
+ export function shardKeyOf(shard) {
280
+ return shard.name;
281
+ }
282
+ //# sourceMappingURL=indexer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indexer.js","sourceRoot":"","sources":["../src/indexer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,278 @@
1
+ import { Store } from "./store.js";
2
+ import type { MemoryCategory, MemoryScope, MemoryStatus, MemoryType } from "./types.js";
3
+ /** Options for {@link MemoryInspector.open}. */
4
+ export interface MemoryInspectorOptions {
5
+ /** HarnMem home; defaults to `HARNMEM_HOME` then `~/.harnmem`. */
6
+ home?: string;
7
+ /** Clock override for deterministic tests. */
8
+ now?: number;
9
+ /** Parsed-shard cache TTL in milliseconds; `0` disables caching. */
10
+ cacheTtlMs?: number;
11
+ }
12
+ /** One diagnostics/warning row surfaced by the inspector. */
13
+ export interface InspectIssue {
14
+ level: "warn" | "error";
15
+ code: string;
16
+ message: string;
17
+ }
18
+ /** A record file that failed to parse (the rest of the shard still renders). */
19
+ export interface InspectFileError {
20
+ file: string;
21
+ message: string;
22
+ }
23
+ /** Per-shard aggregate shown in the overview. */
24
+ export interface InspectShard {
25
+ /** Shard name: `"user"` or the project id (`<slug>-<hash>`). */
26
+ name: string;
27
+ scope: MemoryScope;
28
+ project: string | null;
29
+ projectName: string | null;
30
+ label: string;
31
+ total: number;
32
+ active: number;
33
+ superseded: number;
34
+ archived: number;
35
+ pinned: number;
36
+ bytes: number;
37
+ tokens: number;
38
+ indexBytes: number;
39
+ lastUpdated: number | null;
40
+ }
41
+ /** List-row projection of one memory (no body). */
42
+ export interface InspectRow {
43
+ id: string;
44
+ type: MemoryType;
45
+ category: MemoryCategory | null;
46
+ scope: MemoryScope;
47
+ project: string | null;
48
+ projectName: string | null;
49
+ title: string;
50
+ description: string;
51
+ preview: string;
52
+ tags: string[];
53
+ entities: string[];
54
+ importance: number;
55
+ confidence: number;
56
+ pinned: boolean;
57
+ status: MemoryStatus;
58
+ created: number;
59
+ updated: number;
60
+ lastUsed: number | null;
61
+ usedCount: number;
62
+ validFrom: number;
63
+ validTo: number | null;
64
+ supersededBy: string | null;
65
+ links: string[];
66
+ supersedes: string[];
67
+ evidence: number;
68
+ bytes: number;
69
+ tokens: number;
70
+ harness: string;
71
+ }
72
+ /** Full projection of one memory, including the on-disk text. */
73
+ export interface InspectMemory extends InspectRow {
74
+ /** Markdown body (frontmatter stripped). */
75
+ content: string;
76
+ /** Parsed frontmatter as stored. */
77
+ frontmatter: Record<string, unknown>;
78
+ /** Verbatim file contents. */
79
+ raw: string;
80
+ /** Path relative to the HarnMem home, POSIX separators. */
81
+ filePath: string;
82
+ /** Ids of records whose `links` point here (cross-shard). */
83
+ backlinks: string[];
84
+ /** Older versions, newest first, when `history` was requested. */
85
+ history?: InspectRow[];
86
+ }
87
+ /** Project registry entry merged with on-disk shard facts. */
88
+ export interface InspectProject {
89
+ id: string;
90
+ slug: string;
91
+ name: string;
92
+ paths: string[];
93
+ harnesses: string[];
94
+ registered: boolean;
95
+ shards: string[];
96
+ total: number;
97
+ pinned: number;
98
+ lastUpdated: number | null;
99
+ }
100
+ /** Index health reported by the overview. */
101
+ export interface InspectIndexStatus {
102
+ manifest: {
103
+ seq: number;
104
+ builtAt: number;
105
+ bytes: number;
106
+ shards: Array<{
107
+ name: string;
108
+ docs: number;
109
+ }>;
110
+ } | null;
111
+ /** Current store sequence (`state/seq.json`). */
112
+ seq: number;
113
+ /** Manifest sequence is behind the store sequence. */
114
+ stale: boolean;
115
+ files: Array<{
116
+ shard: string;
117
+ path: string;
118
+ bytes: number;
119
+ exists: boolean;
120
+ docs: number | null;
121
+ records: number;
122
+ }>;
123
+ }
124
+ /** The injected hot-index block, replayed from disk. */
125
+ export interface InspectContext {
126
+ cwd: string | null;
127
+ projectId: string | null;
128
+ projectName: string | null;
129
+ shards: string[];
130
+ text: string;
131
+ ids: string[];
132
+ tokensEstimate: number;
133
+ bytes: number;
134
+ budgetTokens: number;
135
+ hotEntries: number;
136
+ atBudget: boolean;
137
+ }
138
+ /** Whole-home snapshot for the overview screen. */
139
+ export interface InspectOverview {
140
+ version: 1;
141
+ home: string;
142
+ generatedAt: number;
143
+ project: string | null;
144
+ projectName: string | null;
145
+ totals: {
146
+ records: number;
147
+ active: number;
148
+ superseded: number;
149
+ archived: number;
150
+ pinned: number;
151
+ bytes: number;
152
+ tokens: number;
153
+ shards: number;
154
+ projects: number;
155
+ trash: number;
156
+ digests: number;
157
+ };
158
+ byType: Record<string, number>;
159
+ byStatus: Record<string, number>;
160
+ byHarness: Record<string, number>;
161
+ budget: {
162
+ injectTokens: number;
163
+ hotEntries: number;
164
+ maxPinned: number;
165
+ };
166
+ context: InspectContext;
167
+ shards: InspectShard[];
168
+ projects: InspectProject[];
169
+ index: InspectIndexStatus;
170
+ issues: InspectIssue[];
171
+ fileErrors: InspectFileError[];
172
+ }
173
+ /** Result of {@link MemoryInspector.list}. */
174
+ export interface InspectList {
175
+ shard: string;
176
+ label: string;
177
+ total: number;
178
+ rows: InspectRow[];
179
+ generatedAt: number;
180
+ }
181
+ /** Result of {@link MemoryInspector.indexText}. */
182
+ export interface InspectIndexText {
183
+ text: string;
184
+ bytes: number;
185
+ parts: Array<{
186
+ shard: string;
187
+ label: string;
188
+ path: string;
189
+ text: string;
190
+ bytes: number;
191
+ }>;
192
+ generatedAt: number;
193
+ }
194
+ /** Options for {@link MemoryInspector.list}. */
195
+ export interface InspectListOptions {
196
+ /** `"all"` (default), `"user"`, or a project shard name. */
197
+ shard?: string;
198
+ /** Include superseded/archived records; defaults to `true`. */
199
+ includeInactive?: boolean;
200
+ }
201
+ /** Options for {@link MemoryInspector.overview}. */
202
+ export interface InspectOverviewOptions {
203
+ /** Working directory used to resolve the current project shard. */
204
+ cwd?: string;
205
+ }
206
+ /** Options for {@link MemoryInspector.context}. */
207
+ export interface InspectContextOptions {
208
+ cwd?: string;
209
+ /** Override the injection token budget. */
210
+ budgetTokens?: number;
211
+ /** Override the hot-entry count. */
212
+ hotEntries?: number;
213
+ }
214
+ /** Options for {@link MemoryInspector.read}. */
215
+ export interface InspectReadOptions {
216
+ id: string;
217
+ /** Include the superseded-version chain. */
218
+ history?: boolean;
219
+ }
220
+ /** Options for {@link MemoryInspector.indexText}. */
221
+ export interface InspectIndexOptions {
222
+ /** `"all"` (default), `"user"`, or a project shard name. */
223
+ shard?: string;
224
+ }
225
+ /**
226
+ * Read-only view over one HarnMem home.
227
+ *
228
+ * @example
229
+ * ```ts
230
+ * const inspector = await MemoryInspector.open({ home });
231
+ * const overview = await inspector.overview({ cwd });
232
+ * const list = await inspector.list({ shard: "all" });
233
+ * await inspector.close();
234
+ * ```
235
+ */
236
+ export declare class MemoryInspector {
237
+ /** Resolved HarnMem home (absolute). */
238
+ readonly home: string;
239
+ /** Underlying store handle; only its read methods are used. */
240
+ readonly store: Store;
241
+ private readonly fixedNow;
242
+ private readonly cacheTtlMs;
243
+ private readonly snapshots;
244
+ private registryCache;
245
+ private constructor();
246
+ /**
247
+ * Open an inspector over `home` (resolved like the engine: explicit option,
248
+ * then `HARNMEM_HOME`, then `~/.harnmem`). Never writes to disk.
249
+ */
250
+ static open(options?: MemoryInspectorOptions): Promise<MemoryInspector>;
251
+ /** Drop cached shards and registry state. */
252
+ close(): Promise<void>;
253
+ private clock;
254
+ private registry;
255
+ private snapshot;
256
+ private shardsFor;
257
+ private labelOf;
258
+ private row;
259
+ private renderContext;
260
+ /** All project registry rows, merged with on-disk shard totals. */
261
+ projects(): Promise<InspectProject[]>;
262
+ /** Whole-home snapshot used by the overview screen. */
263
+ overview(options?: InspectOverviewOptions): Promise<InspectOverview>;
264
+ private indexStatus;
265
+ private countFiles;
266
+ private countDigests;
267
+ /** Memories in one shard (or all shards), newest-first per the panel order. */
268
+ list(options?: InspectListOptions): Promise<InspectList>;
269
+ /** One memory with body, frontmatter, raw text, backlinks and optional history. */
270
+ read(options: InspectReadOptions): Promise<InspectMemory | null>;
271
+ /** Replay the injected hot-index block for a working directory. */
272
+ context(options?: InspectContextOptions): Promise<InspectContext>;
273
+ /** Verbatim `MEMORY.md` shard index text (what humans and models skim). */
274
+ indexText(options?: InspectIndexOptions): Promise<InspectIndexText>;
275
+ }
276
+ /** Convenience wrapper around {@link MemoryInspector.open}. */
277
+ export declare function openInspector(options?: MemoryInspectorOptions): Promise<MemoryInspector>;
278
+ //# sourceMappingURL=inspect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspect.d.ts","sourceRoot":"","sources":["../src/inspect.ts"],"names":[],"mappings":"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"}