hmem-mcp 1.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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-init.js","sourceRoot":"","sources":["../src/cli-init.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Script: cli.ts
4
+ * Purpose: CLI entry point for hmem (serve, init)
5
+ * Author: DEVELOPER
6
+ * Created: 2026-02-21
7
+ */
8
+ export {};
package/dist/cli.js ADDED
@@ -0,0 +1,42 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Script: cli.ts
4
+ * Purpose: CLI entry point for hmem (serve, init)
5
+ * Author: DEVELOPER
6
+ * Created: 2026-02-21
7
+ */
8
+ const command = process.argv[2];
9
+ switch (command) {
10
+ case "serve":
11
+ await import("./mcp-server.js");
12
+ break;
13
+ case "init": {
14
+ const { runInit } = await import("./cli-init.js");
15
+ await runInit();
16
+ break;
17
+ }
18
+ case "version":
19
+ case "--version":
20
+ case "-v":
21
+ console.log("hmem 1.1.0");
22
+ break;
23
+ default:
24
+ console.log(`hmem — Humanlike Memory for AI Agents
25
+
26
+ Usage:
27
+ hmem serve Start the MCP server (stdio transport)
28
+ hmem init Interactive installer for AI coding tools
29
+ hmem version Show version
30
+
31
+ Environment variables (for serve):
32
+ HMEM_PROJECT_DIR Root directory for .hmem files (required)
33
+ HMEM_AGENT_ID Agent identifier (optional)
34
+ HMEM_AGENT_ROLE Role: worker | al | pl | ceo (default: worker)
35
+
36
+ Examples:
37
+ npx hmem init # Configure your AI tools
38
+ HMEM_PROJECT_DIR=. npx hmem serve # Start server in current directory`);
39
+ break;
40
+ }
41
+ export {};
42
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;;GAKG;AAEH,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAEhC,QAAQ,OAAO,EAAE,CAAC;IAChB,KAAK,OAAO;QACV,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;QAChC,MAAM;IAER,KAAK,MAAM,CAAC,CAAC,CAAC;QACZ,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC;QAClD,MAAM,OAAO,EAAE,CAAC;QAChB,MAAM;IACR,CAAC;IAED,KAAK,SAAS,CAAC;IACf,KAAK,WAAW,CAAC;IACjB,KAAK,IAAI;QACP,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAC1B,MAAM;IAER;QACE,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;6EAc6D,CAAC,CAAC;QAC3E,MAAM;AACV,CAAC"}
package/dist/config.js ADDED
@@ -0,0 +1,88 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { DEFAULT_CONFIG } from "./types.js";
4
+ /** Loaded council.config.json (null if not found) */
5
+ let _councilConfig = null;
6
+ export function getCouncilConfig() {
7
+ return _councilConfig;
8
+ }
9
+ export function loadConfig(projectDir) {
10
+ const resolved = path.resolve(projectDir);
11
+ // Try to load council.config.json
12
+ const configPath = path.join(resolved, "council.config.json");
13
+ if (fs.existsSync(configPath)) {
14
+ try {
15
+ _councilConfig = JSON.parse(fs.readFileSync(configPath, "utf-8"));
16
+ }
17
+ catch {
18
+ // Ignore parse errors, use defaults
19
+ }
20
+ }
21
+ const orch = _councilConfig?.orchestrator;
22
+ const retry = _councilConfig?.retry;
23
+ return {
24
+ ...DEFAULT_CONFIG,
25
+ projectDir: resolved,
26
+ logJsonMode: process.env.COUNCIL_LOG_JSON === "true" || orch?.log_json_mode === true,
27
+ pollMs: orch?.poll_ms ?? DEFAULT_CONFIG.pollMs,
28
+ ackTimeoutMs: orch?.ack_timeout_ms ?? DEFAULT_CONFIG.ackTimeoutMs,
29
+ execWarningMs: orch?.exec_warning_ms ?? DEFAULT_CONFIG.execWarningMs,
30
+ zombieKillMs: orch?.zombie_kill_ms ?? DEFAULT_CONFIG.zombieKillMs,
31
+ maxSpawnDepth: orch?.max_spawn_depth ?? DEFAULT_CONFIG.maxSpawnDepth,
32
+ maxSpawnsPerAgent: orch?.max_spawns_per_agent ?? DEFAULT_CONFIG.maxSpawnsPerAgent,
33
+ logMaxBytes: orch?.log_max_bytes ?? DEFAULT_CONFIG.logMaxBytes,
34
+ archiveDays: orch?.archive_days ?? DEFAULT_CONFIG.archiveDays,
35
+ autoSynthesize: orch?.auto_synthesize ?? DEFAULT_CONFIG.autoSynthesize,
36
+ synthesizeTemplate: orch?.synthesize_template ?? DEFAULT_CONFIG.synthesizeTemplate,
37
+ logLevel: process.env.COUNCIL_LOG_LEVEL || orch?.log_level || DEFAULT_CONFIG.logLevel,
38
+ enableSurveys: orch?.enable_surveys ?? DEFAULT_CONFIG.enableSurveys,
39
+ surveyTemplate: orch?.survey_template ?? DEFAULT_CONFIG.surveyTemplate,
40
+ maxConcurrentAgents: orch?.max_concurrent_agents ?? DEFAULT_CONFIG.maxConcurrentAgents,
41
+ maxConcurrentOpencode: orch?.max_concurrent_opencode ?? DEFAULT_CONFIG.maxConcurrentOpencode,
42
+ loadThrottleAvg1: orch?.load_throttle_avg1 ?? DEFAULT_CONFIG.loadThrottleAvg1,
43
+ loadKillAvg1: orch?.load_kill_avg1 ?? DEFAULT_CONFIG.loadKillAvg1,
44
+ workerModelBlacklist: orch?.worker_model_blacklist ?? DEFAULT_CONFIG.workerModelBlacklist,
45
+ retry: {
46
+ maxRetries: retry?.max_retries ?? DEFAULT_CONFIG.retry.maxRetries,
47
+ retryDelayMs: retry?.retry_delay_ms ?? DEFAULT_CONFIG.retry.retryDelayMs,
48
+ backoffMultiplier: retry?.backoff_multiplier ?? DEFAULT_CONFIG.retry.backoffMultiplier,
49
+ },
50
+ scheduledAgents: (_councilConfig?.scheduled_agents || []).map(sa => ({
51
+ agent_id: sa.agent_id || "UNKNOWN",
52
+ template: sa.template || sa.agent_id || "UNKNOWN",
53
+ enabled: sa.enabled ?? false,
54
+ interval_hours: sa.interval_hours ?? 0,
55
+ day_of_week: sa.day_of_week ?? -1,
56
+ preferred_hour: sa.preferred_hour ?? 3,
57
+ on_project_complete: sa.on_project_complete ?? false,
58
+ command: sa.command || "",
59
+ max_load_avg1: sa.max_load_avg1 ?? 0,
60
+ max_failures: sa.max_failures ?? 3,
61
+ })),
62
+ };
63
+ }
64
+ export function loadCatalog(projectDir) {
65
+ const catalogPath = path.join(projectDir, "AGENT_CATALOG.json");
66
+ if (!fs.existsSync(catalogPath)) {
67
+ throw new Error(`AGENT_CATALOG.json not found: ${catalogPath}`);
68
+ }
69
+ const raw = JSON.parse(fs.readFileSync(catalogPath, "utf-8"));
70
+ const catalog = {};
71
+ for (const [key, value] of Object.entries(raw)) {
72
+ // Skip metadata fields (_version, _description, _category*)
73
+ if (key.startsWith("_"))
74
+ continue;
75
+ catalog[key] = value;
76
+ }
77
+ return catalog;
78
+ }
79
+ export function ensureDirectories(projectDir) {
80
+ const dirs = [
81
+ path.join(projectDir, "orchestrator", "logs"),
82
+ ];
83
+ for (const dir of dirs) {
84
+ if (!fs.existsSync(dir)) {
85
+ fs.mkdirSync(dir, { recursive: true });
86
+ }
87
+ }
88
+ }
@@ -0,0 +1,87 @@
1
+ /**
2
+ * hmem configuration — loaded from hmem.config.json in the project directory.
3
+ * All values have sensible defaults; the config file is optional.
4
+ *
5
+ * Place hmem.config.json in HMEM_PROJECT_DIR (next to your .hmem files).
6
+ *
7
+ * ## Character limits
8
+ *
9
+ * Option A — just set the two endpoints, levels in between are interpolated linearly:
10
+ * {
11
+ * "maxL1Chars": 500,
12
+ * "maxLnChars": 50000
13
+ * }
14
+ *
15
+ * Option B — specify all levels explicitly:
16
+ * {
17
+ * "maxCharsPerLevel": [500, 5000, 15000, 30000, 50000]
18
+ * }
19
+ *
20
+ * Option A and B can be combined; explicit array takes precedence.
21
+ *
22
+ * ## Recency gradient (recentDepthTiers)
23
+ *
24
+ * Controls how many child levels are inlined for the N most recent entries
25
+ * in a default read() call. Each tier adds depth for the freshest entries:
26
+ *
27
+ * {
28
+ * "recentDepthTiers": [
29
+ * { "count": 3, "depth": 3 }, // last 3 entries → L1 + L2 + L3
30
+ * { "count": 10, "depth": 2 } // last 10 entries → L1 + L2
31
+ * ]
32
+ * }
33
+ *
34
+ * Tiers are evaluated per-entry: the highest applicable depth wins.
35
+ * Backward compat: legacy "recentChildrenCount": N is treated as
36
+ * [{ "count": N, "depth": 2 }].
37
+ */
38
+ export interface DepthTier {
39
+ /** How many of the most recent entries this tier applies to */
40
+ count: number;
41
+ /** Max depth to inline (2 = L2, 3 = L2+L3, etc.) */
42
+ depth: number;
43
+ }
44
+ export interface HmemConfig {
45
+ /**
46
+ * Max characters per level, indexed by depth (0=L1, 1=L2, …, maxDepth-1=Ln).
47
+ * Computed from maxL1Chars + maxLnChars via linear interpolation if not set explicitly.
48
+ */
49
+ maxCharsPerLevel: number[];
50
+ /** Max tree depth (1 = L1 only, 5 = full depth). Default: 5 */
51
+ maxDepth: number;
52
+ /**
53
+ * Recency gradient: each tier defines how deep to inline children for the N most recent entries.
54
+ * Tiers are cumulative — the highest applicable depth wins for each entry position.
55
+ * Default: last 10 entries show L2, last 3 entries also show L3.
56
+ */
57
+ recentDepthTiers: DepthTier[];
58
+ /** Max entries returned by a default bulk read(). Default: 100 */
59
+ defaultReadLimit: number;
60
+ /**
61
+ * Memory category prefixes. Keys are single uppercase letters, values are human-readable names.
62
+ * Default: P=Project, L=Lesson, T=Task, E=Error, D=Decision, M=Milestone, S=Skill, F=Favorite.
63
+ * Users can add custom prefixes (e.g. "R": "Research") in hmem.config.json.
64
+ */
65
+ prefixes: Record<string, string>;
66
+ }
67
+ export declare const DEFAULT_PREFIXES: Record<string, string>;
68
+ export declare const DEFAULT_CONFIG: HmemConfig;
69
+ /**
70
+ * Format prefix map as "P=Project, L=Lesson, ..." for tool descriptions.
71
+ */
72
+ export declare function formatPrefixList(prefixes: Record<string, string>): string;
73
+ /**
74
+ * Compute a linearly interpolated char-limit array between l1 and ln for `depth` levels.
75
+ * depth=1 → [l1], depth=2 → [l1, ln], depth=5 → [l1, …, ln]
76
+ */
77
+ export declare function linearLimits(l1: number, ln: number, depth: number): number[];
78
+ /**
79
+ * Resolve the inline depth for the entry at position `i` (0 = most recent)
80
+ * given the configured tiers. Returns 1 if no tier applies (L1 only).
81
+ */
82
+ export declare function resolveDepthForPosition(i: number, tiers: DepthTier[]): number;
83
+ /**
84
+ * Load hmem.config.json from projectDir.
85
+ * Unknown keys are ignored. Missing keys fall back to defaults.
86
+ */
87
+ export declare function loadHmemConfig(projectDir: string): HmemConfig;
@@ -0,0 +1,120 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ export const DEFAULT_PREFIXES = {
4
+ P: "Project",
5
+ L: "Lesson",
6
+ T: "Task",
7
+ E: "Error",
8
+ D: "Decision",
9
+ M: "Milestone",
10
+ S: "Skill",
11
+ F: "Favorite",
12
+ };
13
+ export const DEFAULT_CONFIG = {
14
+ maxCharsPerLevel: [120, 2_500, 10_000, 25_000, 50_000],
15
+ maxDepth: 5,
16
+ recentDepthTiers: [
17
+ { count: 10, depth: 2 },
18
+ { count: 3, depth: 3 },
19
+ ],
20
+ defaultReadLimit: 100,
21
+ prefixes: { ...DEFAULT_PREFIXES },
22
+ };
23
+ /**
24
+ * Format prefix map as "P=Project, L=Lesson, ..." for tool descriptions.
25
+ */
26
+ export function formatPrefixList(prefixes) {
27
+ return Object.entries(prefixes).map(([k, v]) => `${k}=${v}`).join(", ");
28
+ }
29
+ /**
30
+ * Compute a linearly interpolated char-limit array between l1 and ln for `depth` levels.
31
+ * depth=1 → [l1], depth=2 → [l1, ln], depth=5 → [l1, …, ln]
32
+ */
33
+ export function linearLimits(l1, ln, depth) {
34
+ if (depth <= 1)
35
+ return [l1];
36
+ return Array.from({ length: depth }, (_, i) => Math.round(l1 + (ln - l1) * (i / (depth - 1))));
37
+ }
38
+ /**
39
+ * Resolve the inline depth for the entry at position `i` (0 = most recent)
40
+ * given the configured tiers. Returns 1 if no tier applies (L1 only).
41
+ */
42
+ export function resolveDepthForPosition(i, tiers) {
43
+ let maxDepth = 1;
44
+ for (const tier of tiers) {
45
+ if (i < tier.count && tier.depth > maxDepth) {
46
+ maxDepth = tier.depth;
47
+ }
48
+ }
49
+ return maxDepth;
50
+ }
51
+ /**
52
+ * Load hmem.config.json from projectDir.
53
+ * Unknown keys are ignored. Missing keys fall back to defaults.
54
+ */
55
+ export function loadHmemConfig(projectDir) {
56
+ const configPath = path.join(projectDir, "hmem.config.json");
57
+ if (!fs.existsSync(configPath)) {
58
+ return { ...DEFAULT_CONFIG, recentDepthTiers: [...DEFAULT_CONFIG.recentDepthTiers], prefixes: { ...DEFAULT_PREFIXES } };
59
+ }
60
+ try {
61
+ const raw = JSON.parse(fs.readFileSync(configPath, "utf-8"));
62
+ const cfg = {
63
+ ...DEFAULT_CONFIG,
64
+ recentDepthTiers: [...DEFAULT_CONFIG.recentDepthTiers],
65
+ };
66
+ if (typeof raw.maxDepth === "number" && raw.maxDepth >= 1 && raw.maxDepth <= 10)
67
+ cfg.maxDepth = raw.maxDepth;
68
+ if (typeof raw.defaultReadLimit === "number" && raw.defaultReadLimit > 0)
69
+ cfg.defaultReadLimit = raw.defaultReadLimit;
70
+ // Recency tiers: explicit array > legacy recentChildrenCount > default
71
+ if (Array.isArray(raw.recentDepthTiers)) {
72
+ const tiers = raw.recentDepthTiers.filter((t) => typeof t.count === "number" &&
73
+ typeof t.depth === "number" &&
74
+ t.count > 0 &&
75
+ t.depth >= 1);
76
+ if (tiers.length > 0)
77
+ cfg.recentDepthTiers = tiers;
78
+ }
79
+ else if (typeof raw.recentChildrenCount === "number" && raw.recentChildrenCount >= 0) {
80
+ // Backward compat: treat as single tier with depth 2
81
+ cfg.recentDepthTiers = raw.recentChildrenCount > 0
82
+ ? [{ count: raw.recentChildrenCount, depth: 2 }]
83
+ : [];
84
+ }
85
+ // Prefixes: merge user-defined with defaults (user can override or add)
86
+ if (raw.prefixes && typeof raw.prefixes === "object" && !Array.isArray(raw.prefixes)) {
87
+ const merged = { ...DEFAULT_PREFIXES };
88
+ for (const [key, val] of Object.entries(raw.prefixes)) {
89
+ if (typeof key === "string" && /^[A-Z]$/.test(key) && typeof val === "string" && val.length > 0) {
90
+ merged[key] = val;
91
+ }
92
+ }
93
+ cfg.prefixes = merged;
94
+ }
95
+ // Resolve char limits: explicit array > linear endpoints > default
96
+ if (Array.isArray(raw.maxCharsPerLevel) && raw.maxCharsPerLevel.length >= 1) {
97
+ const levels = raw.maxCharsPerLevel;
98
+ if (levels.every((n) => typeof n === "number" && n > 0)) {
99
+ const padded = [...levels];
100
+ while (padded.length < cfg.maxDepth)
101
+ padded.push(padded[padded.length - 1]);
102
+ cfg.maxCharsPerLevel = padded.slice(0, cfg.maxDepth);
103
+ }
104
+ }
105
+ else if (typeof raw.maxL1Chars === "number" || typeof raw.maxLnChars === "number") {
106
+ const l1 = typeof raw.maxL1Chars === "number" ? raw.maxL1Chars : DEFAULT_CONFIG.maxCharsPerLevel[0];
107
+ const ln = typeof raw.maxLnChars === "number" ? raw.maxLnChars : DEFAULT_CONFIG.maxCharsPerLevel[DEFAULT_CONFIG.maxCharsPerLevel.length - 1];
108
+ cfg.maxCharsPerLevel = linearLimits(l1, ln, cfg.maxDepth);
109
+ }
110
+ else {
111
+ cfg.maxCharsPerLevel = linearLimits(DEFAULT_CONFIG.maxCharsPerLevel[0], DEFAULT_CONFIG.maxCharsPerLevel[DEFAULT_CONFIG.maxCharsPerLevel.length - 1], cfg.maxDepth);
112
+ }
113
+ return cfg;
114
+ }
115
+ catch (e) {
116
+ console.error(`[hmem] Failed to parse hmem.config.json: ${e}. Using defaults.`);
117
+ return { ...DEFAULT_CONFIG, recentDepthTiers: [...DEFAULT_CONFIG.recentDepthTiers], prefixes: { ...DEFAULT_PREFIXES } };
118
+ }
119
+ }
120
+ //# sourceMappingURL=hmem-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hmem-config.js","sourceRoot":"","sources":["../src/hmem-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,175 @@
1
+ /**
2
+ * Humanlike Memory Store (.hmem)
3
+ *
4
+ * SQLite-based long-term memory for agents with true tree structure.
5
+ * L1 summaries live in the `memories` table (injected at startup).
6
+ * L2+ nodes live in `memory_nodes` — each node has its own compound ID
7
+ * (e.g., E0006.1, E0006.1.2) and is individually addressable.
8
+ *
9
+ * Two store types:
10
+ * - Personal: per-agent memory (Agents/THOR/THOR.hmem)
11
+ * - Company: shared knowledge base (FIRMENWISSEN.hmem) with role-based access
12
+ *
13
+ * ID format:
14
+ * Root entries: PREFIX + zero-padded sequence (e.g., P0001, L0023, T0042)
15
+ * Sub-nodes: root_id + "." + sibling_seq, recursively (e.g., E0006.1, E0006.1.2)
16
+ *
17
+ * Prefixes: P=Project, L=Lesson, T=Task, E=Error, D=Decision, M=Milestone, F=Favorite, S=Skill
18
+ *
19
+ * Role hierarchy: worker < al < pl < ceo
20
+ * Each entry has a min_role — agents only see entries at or below their clearance.
21
+ *
22
+ * read_memory(id) semantics:
23
+ * Always returns the node + its DIRECT children only.
24
+ * To go deeper, call read_memory(id=child_id).
25
+ * depth parameter is IGNORED for ID-based queries.
26
+ */
27
+ import type { HmemConfig } from "./hmem-config.js";
28
+ export type AgentRole = "worker" | "al" | "pl" | "ceo";
29
+ export interface MemoryEntry {
30
+ id: string;
31
+ prefix: string;
32
+ seq: number;
33
+ created_at: string;
34
+ level_1: string;
35
+ level_2: string | null;
36
+ level_3: string | null;
37
+ level_4: string | null;
38
+ level_5: string | null;
39
+ access_count: number;
40
+ last_accessed: string | null;
41
+ links: string[] | null;
42
+ min_role: AgentRole;
43
+ children?: MemoryNode[];
44
+ }
45
+ export interface MemoryNode {
46
+ id: string;
47
+ parent_id: string;
48
+ root_id: string;
49
+ depth: number;
50
+ seq: number;
51
+ content: string;
52
+ created_at: string;
53
+ access_count: number;
54
+ last_accessed: string | null;
55
+ child_count?: number;
56
+ children?: MemoryNode[];
57
+ }
58
+ export interface ReadOptions {
59
+ id?: string;
60
+ depth?: number;
61
+ prefix?: string;
62
+ after?: string;
63
+ before?: string;
64
+ search?: string;
65
+ limit?: number;
66
+ agentRole?: AgentRole;
67
+ recentDepthTiers?: import("./hmem-config.js").DepthTier[];
68
+ }
69
+ export interface WriteResult {
70
+ id: string;
71
+ timestamp: string;
72
+ }
73
+ export declare class HmemStore {
74
+ private db;
75
+ private readonly dbPath;
76
+ private readonly cfg;
77
+ /** True if integrity_check found errors on open (read-only mode recommended). */
78
+ readonly corrupted: boolean;
79
+ constructor(hmemPath: string, config?: HmemConfig);
80
+ /**
81
+ * Write a new memory entry.
82
+ * Content uses tab indentation to define the tree:
83
+ * "Project X: built a dashboard\n\tMy role was frontend\n\t\tUsed React + Vite"
84
+ * L1 (no tabs) → memories.level_1
85
+ * Each indented line → its own memory_nodes row with compound ID
86
+ * Multiple lines at the same indent depth → siblings (new capability)
87
+ */
88
+ write(prefix: string, content: string, links?: string[], minRole?: AgentRole): WriteResult;
89
+ /**
90
+ * Read memories with flexible querying.
91
+ *
92
+ * For ID-based queries: always returns the node + its DIRECT children.
93
+ * depth parameter is ignored for ID queries (one level at a time).
94
+ *
95
+ * For bulk queries: returns L1 summaries (depth=1 default).
96
+ */
97
+ read(opts?: ReadOptions): MemoryEntry[];
98
+ /**
99
+ * Get all Level 1 entries for injection at agent startup.
100
+ * Does NOT bump access_count (routine injection).
101
+ */
102
+ getLevel1All(agentRole?: AgentRole): string;
103
+ /**
104
+ * Export entire memory to Markdown for git tracking.
105
+ */
106
+ exportMarkdown(): string;
107
+ /**
108
+ * Get statistics about the memory store.
109
+ */
110
+ stats(): {
111
+ total: number;
112
+ byPrefix: Record<string, number>;
113
+ };
114
+ /**
115
+ * Update specific fields of an existing root entry (curator use only).
116
+ */
117
+ update(id: string, fields: Partial<Pick<MemoryEntry, "level_1" | "level_2" | "level_3" | "level_4" | "level_5" | "links" | "min_role">>): boolean;
118
+ /**
119
+ * Delete an entry by ID (curator use only).
120
+ * Also deletes all associated memory_nodes.
121
+ */
122
+ delete(id: string): boolean;
123
+ close(): void;
124
+ private migrate;
125
+ /**
126
+ * One-time migration: move level_2..level_5 data to memory_nodes tree.
127
+ * Idempotent — tracked via schema_version table.
128
+ */
129
+ private migrateToTree;
130
+ private buildRoleFilter;
131
+ private nextSeq;
132
+ private bumpAccess;
133
+ private bumpNodeAccess;
134
+ /** Fetch direct children of a node (root or compound), including their grandchild counts. */
135
+ private fetchChildren;
136
+ /**
137
+ * Fetch children recursively up to maxDepth.
138
+ * currentDepth: the depth level of the children being fetched (2 = L2, 3 = L3, …)
139
+ * maxDepth: stop recursing when currentDepth > maxDepth
140
+ */
141
+ private fetchChildrenDeep;
142
+ private rowToNode;
143
+ private rowToEntry;
144
+ /**
145
+ * Wrap a MemoryNode as a MemoryEntry for uniform API return.
146
+ * The formatter detects node entries by checking e.id.includes(".").
147
+ * level_1 is repurposed to carry the node content.
148
+ */
149
+ private nodeToEntry;
150
+ /**
151
+ * Parse tab-indented content into L1 text + a list of tree nodes.
152
+ *
153
+ * Algorithm:
154
+ * - seqAtParent: Map<parentId, number> — sibling counter per parent
155
+ * - lastIdAtDepth: Map<depth, nodeId> — last-written node id at each depth
156
+ *
157
+ * Each indented line at depth D:
158
+ * parent = (D == 2) ? rootId : lastIdAtDepth[D-1]
159
+ * seq = ++seqAtParent[parent]
160
+ * id = parent + "." + seq
161
+ *
162
+ * @param content Tab-indented content string
163
+ * @param rootId The root entry ID (e.g. "E0006") — used to build compound IDs
164
+ */
165
+ private parseTree;
166
+ }
167
+ export declare function resolveHmemPath(projectDir: string, templateName: string): string;
168
+ /**
169
+ * Open (or create) an HmemStore for an agent's personal memory.
170
+ */
171
+ export declare function openAgentMemory(projectDir: string, templateName: string, config?: HmemConfig): HmemStore;
172
+ /**
173
+ * Open (or create) the shared company knowledge store (FIRMENWISSEN.hmem).
174
+ */
175
+ export declare function openCompanyMemory(projectDir: string, config?: HmemConfig): HmemStore;