@oni.bot/core 1.0.3 → 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.
Files changed (146) hide show
  1. package/dist/checkpointers/postgres.d.ts.map +1 -1
  2. package/dist/checkpointers/postgres.js +2 -1
  3. package/dist/checkpointers/postgres.js.map +1 -1
  4. package/dist/cli/inspect.d.ts.map +1 -1
  5. package/dist/cli/inspect.js +4 -2
  6. package/dist/cli/inspect.js.map +1 -1
  7. package/dist/coordination/request-reply.d.ts +11 -2
  8. package/dist/coordination/request-reply.d.ts.map +1 -1
  9. package/dist/coordination/request-reply.js.map +1 -1
  10. package/dist/events/bus.d.ts.map +1 -1
  11. package/dist/events/bus.js +1 -0
  12. package/dist/events/bus.js.map +1 -1
  13. package/dist/graph.d.ts +11 -1
  14. package/dist/graph.d.ts.map +1 -1
  15. package/dist/graph.js +4 -2
  16. package/dist/graph.js.map +1 -1
  17. package/dist/harness/agent-loop.d.ts +1 -7
  18. package/dist/harness/agent-loop.d.ts.map +1 -1
  19. package/dist/harness/agent-loop.js +2 -642
  20. package/dist/harness/agent-loop.js.map +1 -1
  21. package/dist/harness/loop/hooks.d.ts +7 -0
  22. package/dist/harness/loop/hooks.d.ts.map +1 -0
  23. package/dist/harness/loop/hooks.js +46 -0
  24. package/dist/harness/loop/hooks.js.map +1 -0
  25. package/dist/harness/loop/index.d.ts +8 -0
  26. package/dist/harness/loop/index.d.ts.map +1 -0
  27. package/dist/harness/loop/index.js +257 -0
  28. package/dist/harness/loop/index.js.map +1 -0
  29. package/dist/harness/loop/inference.d.ts +19 -0
  30. package/dist/harness/loop/inference.d.ts.map +1 -0
  31. package/dist/harness/loop/inference.js +121 -0
  32. package/dist/harness/loop/inference.js.map +1 -0
  33. package/dist/harness/loop/memory.d.ts +22 -0
  34. package/dist/harness/loop/memory.d.ts.map +1 -0
  35. package/dist/harness/loop/memory.js +73 -0
  36. package/dist/harness/loop/memory.js.map +1 -0
  37. package/dist/harness/loop/safety.d.ts +8 -0
  38. package/dist/harness/loop/safety.d.ts.map +1 -0
  39. package/dist/harness/loop/safety.js +21 -0
  40. package/dist/harness/loop/safety.js.map +1 -0
  41. package/dist/harness/loop/tools.d.ts +24 -0
  42. package/dist/harness/loop/tools.d.ts.map +1 -0
  43. package/dist/harness/loop/tools.js +184 -0
  44. package/dist/harness/loop/tools.js.map +1 -0
  45. package/dist/harness/loop/types.d.ts +7 -0
  46. package/dist/harness/loop/types.d.ts.map +1 -0
  47. package/dist/harness/loop/types.js +9 -0
  48. package/dist/harness/loop/types.js.map +1 -0
  49. package/dist/harness/memory/fs-compat.d.ts +3 -0
  50. package/dist/harness/memory/fs-compat.d.ts.map +1 -0
  51. package/dist/harness/memory/fs-compat.js +26 -0
  52. package/dist/harness/memory/fs-compat.js.map +1 -0
  53. package/dist/harness/memory/index.d.ts +105 -0
  54. package/dist/harness/memory/index.d.ts.map +1 -0
  55. package/dist/harness/memory/index.js +491 -0
  56. package/dist/harness/memory/index.js.map +1 -0
  57. package/dist/harness/memory/prompter.d.ts +7 -0
  58. package/dist/harness/memory/prompter.d.ts.map +1 -0
  59. package/dist/harness/memory/prompter.js +24 -0
  60. package/dist/harness/memory/prompter.js.map +1 -0
  61. package/dist/harness/memory/ranker.d.ts +15 -0
  62. package/dist/harness/memory/ranker.d.ts.map +1 -0
  63. package/dist/harness/memory/ranker.js +72 -0
  64. package/dist/harness/memory/ranker.js.map +1 -0
  65. package/dist/harness/memory/scanner.d.ts +26 -0
  66. package/dist/harness/memory/scanner.d.ts.map +1 -0
  67. package/dist/harness/memory/scanner.js +187 -0
  68. package/dist/harness/memory/scanner.js.map +1 -0
  69. package/dist/harness/memory/types.d.ts +50 -0
  70. package/dist/harness/memory/types.d.ts.map +1 -0
  71. package/dist/harness/memory/types.js +7 -0
  72. package/dist/harness/memory/types.js.map +1 -0
  73. package/dist/harness/memory-loader.d.ts +2 -149
  74. package/dist/harness/memory-loader.d.ts.map +1 -1
  75. package/dist/harness/memory-loader.js +1 -713
  76. package/dist/harness/memory-loader.js.map +1 -1
  77. package/dist/hitl/interrupt.d.ts.map +1 -1
  78. package/dist/hitl/interrupt.js +2 -1
  79. package/dist/hitl/interrupt.js.map +1 -1
  80. package/dist/prebuilt/react-agent.d.ts.map +1 -1
  81. package/dist/prebuilt/react-agent.js +6 -2
  82. package/dist/prebuilt/react-agent.js.map +1 -1
  83. package/dist/pregel/checkpointing.d.ts +12 -0
  84. package/dist/pregel/checkpointing.d.ts.map +1 -0
  85. package/dist/pregel/checkpointing.js +60 -0
  86. package/dist/pregel/checkpointing.js.map +1 -0
  87. package/dist/pregel/execution.d.ts +7 -0
  88. package/dist/pregel/execution.d.ts.map +1 -0
  89. package/dist/pregel/execution.js +178 -0
  90. package/dist/pregel/execution.js.map +1 -0
  91. package/dist/pregel/index.d.ts +61 -0
  92. package/dist/pregel/index.d.ts.map +1 -0
  93. package/dist/pregel/index.js +154 -0
  94. package/dist/pregel/index.js.map +1 -0
  95. package/dist/pregel/interrupts.d.ts +3 -0
  96. package/dist/pregel/interrupts.d.ts.map +1 -0
  97. package/dist/pregel/interrupts.js +7 -0
  98. package/dist/pregel/interrupts.js.map +1 -0
  99. package/dist/pregel/state-helpers.d.ts +12 -0
  100. package/dist/pregel/state-helpers.d.ts.map +1 -0
  101. package/dist/pregel/state-helpers.js +71 -0
  102. package/dist/pregel/state-helpers.js.map +1 -0
  103. package/dist/pregel/streaming.d.ts +5 -0
  104. package/dist/pregel/streaming.d.ts.map +1 -0
  105. package/dist/pregel/streaming.js +462 -0
  106. package/dist/pregel/streaming.js.map +1 -0
  107. package/dist/pregel/types.d.ts +48 -0
  108. package/dist/pregel/types.d.ts.map +1 -0
  109. package/dist/pregel/types.js +5 -0
  110. package/dist/pregel/types.js.map +1 -0
  111. package/dist/pregel.d.ts +1 -66
  112. package/dist/pregel.d.ts.map +1 -1
  113. package/dist/pregel.js +2 -854
  114. package/dist/pregel.js.map +1 -1
  115. package/dist/swarm/agent-node.d.ts +11 -0
  116. package/dist/swarm/agent-node.d.ts.map +1 -0
  117. package/dist/swarm/agent-node.js +156 -0
  118. package/dist/swarm/agent-node.js.map +1 -0
  119. package/dist/swarm/compile-ext.d.ts +5 -0
  120. package/dist/swarm/compile-ext.d.ts.map +1 -0
  121. package/dist/swarm/compile-ext.js +126 -0
  122. package/dist/swarm/compile-ext.js.map +1 -0
  123. package/dist/swarm/config.d.ts +147 -0
  124. package/dist/swarm/config.d.ts.map +1 -0
  125. package/dist/swarm/config.js +17 -0
  126. package/dist/swarm/config.js.map +1 -0
  127. package/dist/swarm/factories.d.ts +37 -0
  128. package/dist/swarm/factories.d.ts.map +1 -0
  129. package/dist/swarm/factories.js +703 -0
  130. package/dist/swarm/factories.js.map +1 -0
  131. package/dist/swarm/graph.d.ts +14 -147
  132. package/dist/swarm/graph.d.ts.map +1 -1
  133. package/dist/swarm/graph.js +30 -917
  134. package/dist/swarm/graph.js.map +1 -1
  135. package/dist/swarm/pool.js.map +1 -1
  136. package/dist/swarm/supervisor.js.map +1 -1
  137. package/dist/testing/index.d.ts +2 -2
  138. package/dist/testing/index.d.ts.map +1 -1
  139. package/dist/testing/index.js +3 -2
  140. package/dist/testing/index.js.map +1 -1
  141. package/dist/tools/define.d.ts +2 -1
  142. package/dist/tools/define.d.ts.map +1 -1
  143. package/dist/tools/define.js +3 -1
  144. package/dist/tools/define.js.map +1 -1
  145. package/dist/tools/types.d.ts.map +1 -1
  146. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ranker.js","sourceRoot":"","sources":["../../../src/harness/memory/ranker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import type { MemoryTier, MemoryType, MemoryUnit, Frontmatter } from "./types.js";
2
+ export declare function parseFrontmatter(content: string): {
3
+ meta: Frontmatter;
4
+ body: string;
5
+ };
6
+ export declare function estimateTokens(content: string): number;
7
+ export declare function inferTypeFromPath(relPath: string): MemoryType;
8
+ export declare function inferTierFromPath(relPath: string, type: MemoryType): MemoryTier;
9
+ export declare function extractTagsFromContent(body: string): string[];
10
+ export declare function extractSummary(body: string): string;
11
+ /**
12
+ * Read a single markdown file from disk and build a MemoryUnit.
13
+ * Returns null if the file cannot be read.
14
+ */
15
+ export declare function registerFile(absPath: string, relPath: string): MemoryUnit | null;
16
+ /**
17
+ * Recursively scan a directory for .md files (skipping INDEX.md).
18
+ * Returns a map of relPath → MemoryUnit for all successfully registered files.
19
+ */
20
+ export declare function scanDirectory(absDir: string, relDir: string, fs: typeof import("fs"), path: typeof import("path")): Map<string, MemoryUnit>;
21
+ /**
22
+ * Scan the memory root directory and return all discovered MemoryUnits.
23
+ * Returns an empty map if fs/path are unavailable or root doesn't exist.
24
+ */
25
+ export declare function scanRoot(root: string): Map<string, MemoryUnit>;
26
+ //# sourceMappingURL=scanner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../../../src/harness/memory/scanner.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAIlF,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CA8BrF;AAID,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEtD;AAID,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,CAW7D;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,UAAU,CAuB/E;AAID,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAO7D;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAInD;AAID;;;GAGG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAwBhF;AAID;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,EAAE,EAAE,cAAc,IAAI,CAAC,EACvB,IAAI,EAAE,cAAc,MAAM,CAAC,GAC1B,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CA2BzB;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAK9D"}
@@ -0,0 +1,187 @@
1
+ // ============================================================
2
+ // @oni.bot/core/harness/memory — scanner
3
+ //
4
+ // Filesystem scan, frontmatter parsing, tag/summary inference,
5
+ // and token cost estimation.
6
+ // Uses getFs()/getPath() from fs-compat.ts — never top-level fs imports.
7
+ // ============================================================
8
+ import { getFs, getPath } from "./fs-compat.js";
9
+ // ─── Frontmatter ─────────────────────────────────────────────────────────────
10
+ export function parseFrontmatter(content) {
11
+ const normalized = content.replace(/\r\n/g, "\n");
12
+ const match = normalized.match(/^---\n([\s\S]*?)\n---\n?([\s\S]*)$/);
13
+ if (!match)
14
+ return { meta: {}, body: content };
15
+ const raw = match[1];
16
+ const body = match[2];
17
+ const meta = {};
18
+ for (const line of raw.split("\n")) {
19
+ const colonIdx = line.indexOf(":");
20
+ if (colonIdx === -1)
21
+ continue;
22
+ const key = line.slice(0, colonIdx).trim();
23
+ const val = line.slice(colonIdx + 1).trim();
24
+ if (!key || !val)
25
+ continue;
26
+ switch (key) {
27
+ case "type":
28
+ meta.type = val;
29
+ break;
30
+ case "tier": {
31
+ const parsed = parseInt(val, 10);
32
+ if (parsed >= 0 && parsed <= 3)
33
+ meta.tier = parsed;
34
+ break;
35
+ }
36
+ case "tags":
37
+ meta.tags = val.split(",").map((t) => t.trim()).filter(Boolean);
38
+ break;
39
+ case "summary":
40
+ meta.summary = val;
41
+ break;
42
+ case "triggers":
43
+ meta.triggers = val.split(",").map((t) => t.trim()).filter(Boolean);
44
+ break;
45
+ }
46
+ }
47
+ return { meta, body };
48
+ }
49
+ // ─── Token estimation ─────────────────────────────────────────────────────────
50
+ export function estimateTokens(content) {
51
+ return Math.ceil(content.length / 4);
52
+ }
53
+ // ─── Path-based type/tier inference ──────────────────────────────────────────
54
+ export function inferTypeFromPath(relPath) {
55
+ const top = relPath.split(/[\\/]/)[0] ?? "";
56
+ const map = {
57
+ identity: "identity",
58
+ working: "working",
59
+ procedural: "procedural",
60
+ episodic: "episodic",
61
+ semantic: "semantic",
62
+ user: "user",
63
+ };
64
+ return map[top] ?? "semantic";
65
+ }
66
+ export function inferTierFromPath(relPath, type) {
67
+ if (type === "identity")
68
+ return 0;
69
+ if (type === "working")
70
+ return 1;
71
+ if (type === "user")
72
+ return relPath.includes("RELATIONSHIPS") ? 2 : 1;
73
+ if (type === "procedural") {
74
+ if (relPath.endsWith("INDEX.md"))
75
+ return 1;
76
+ if (relPath.includes("examples"))
77
+ return 3;
78
+ return 2;
79
+ }
80
+ if (type === "episodic") {
81
+ if (relPath.endsWith("INDEX.md"))
82
+ return 1;
83
+ if (relPath.includes("archive"))
84
+ return 3;
85
+ return 2;
86
+ }
87
+ if (type === "semantic") {
88
+ const parts = relPath.split(/[\\/]/);
89
+ // root INDEX.md: semantic/INDEX.md → 2 parts
90
+ if (parts.length === 2 && parts[1] === "INDEX.md")
91
+ return 1;
92
+ // domain INDEX.md: semantic/<domain>/INDEX.md → 3 parts
93
+ if (parts.length === 3 && parts[2] === "INDEX.md")
94
+ return 2;
95
+ return 3;
96
+ }
97
+ return 2;
98
+ }
99
+ // ─── Tag + summary extraction ─────────────────────────────────────────────────
100
+ export function extractTagsFromContent(body) {
101
+ const headings = [...body.matchAll(/^##\s+(.+)$/gm)].map((m) => m[1].toLowerCase().replace(/\s+/g, "-"));
102
+ const firstLine = body.split("\n").find((l) => l.trim() && !l.startsWith("#")) ?? "";
103
+ const words = firstLine.toLowerCase().match(/\b[a-z]{4,}\b/g) ?? [];
104
+ return [...new Set([...headings, ...words.slice(0, 5)])];
105
+ }
106
+ export function extractSummary(body) {
107
+ const firstParagraph = body.split("\n\n").find((p) => p.trim() && !p.startsWith("#"));
108
+ if (!firstParagraph)
109
+ return "";
110
+ return firstParagraph.replace(/\n/g, " ").trim().slice(0, 120);
111
+ }
112
+ // ─── File registration ────────────────────────────────────────────────────────
113
+ /**
114
+ * Read a single markdown file from disk and build a MemoryUnit.
115
+ * Returns null if the file cannot be read.
116
+ */
117
+ export function registerFile(absPath, relPath) {
118
+ const fs = getFs();
119
+ if (!fs)
120
+ return null;
121
+ try {
122
+ const raw = fs.readFileSync(absPath, "utf-8");
123
+ const { meta, body } = parseFrontmatter(raw);
124
+ const type = meta.type ?? inferTypeFromPath(relPath);
125
+ const tier = meta.tier ?? inferTierFromPath(relPath, type);
126
+ const stat = fs.statSync(absPath);
127
+ return {
128
+ key: relPath,
129
+ path: absPath,
130
+ type,
131
+ tier,
132
+ tags: meta.tags ?? extractTagsFromContent(body),
133
+ summary: meta.summary ?? extractSummary(body),
134
+ tokenCost: estimateTokens(raw),
135
+ triggers: meta.triggers ?? [],
136
+ updatedAt: stat.mtime.toISOString(),
137
+ };
138
+ }
139
+ catch {
140
+ return null;
141
+ }
142
+ }
143
+ // ─── Directory scan ───────────────────────────────────────────────────────────
144
+ /**
145
+ * Recursively scan a directory for .md files (skipping INDEX.md).
146
+ * Returns a map of relPath → MemoryUnit for all successfully registered files.
147
+ */
148
+ export function scanDirectory(absDir, relDir, fs, path) {
149
+ const result = new Map();
150
+ let entries;
151
+ try {
152
+ entries = fs.readdirSync(absDir, { withFileTypes: true });
153
+ }
154
+ catch {
155
+ return result;
156
+ }
157
+ for (const entry of entries) {
158
+ // Skip INDEX.md — it is metadata, not a memory unit
159
+ if (entry.name === "INDEX.md")
160
+ continue;
161
+ const relPath = relDir ? path.join(relDir, entry.name) : entry.name;
162
+ const absPath = path.join(absDir, entry.name);
163
+ if (entry.isDirectory()) {
164
+ const sub = scanDirectory(absPath, relPath, fs, path);
165
+ for (const [k, v] of sub)
166
+ result.set(k, v);
167
+ }
168
+ else if (entry.name.endsWith(".md")) {
169
+ const unit = registerFile(absPath, relPath);
170
+ if (unit)
171
+ result.set(relPath, unit);
172
+ }
173
+ }
174
+ return result;
175
+ }
176
+ /**
177
+ * Scan the memory root directory and return all discovered MemoryUnits.
178
+ * Returns an empty map if fs/path are unavailable or root doesn't exist.
179
+ */
180
+ export function scanRoot(root) {
181
+ const fs = getFs();
182
+ const path = getPath();
183
+ if (!fs || !path || !fs.existsSync(root))
184
+ return new Map();
185
+ return scanDirectory(root, "", fs, path);
186
+ }
187
+ //# sourceMappingURL=scanner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scanner.js","sourceRoot":"","sources":["../../../src/harness/memory/scanner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ export type MemoryTier = 0 | 1 | 2 | 3;
2
+ export type MemoryType = "identity" | "working" | "procedural" | "episodic" | "semantic" | "user";
3
+ export interface MemoryUnit {
4
+ /** Relative path from memory root, e.g. "procedural/pptx/notes.md" */
5
+ key: string;
6
+ /** Absolute path on disk */
7
+ path: string;
8
+ type: MemoryType;
9
+ tier: MemoryTier;
10
+ /** From frontmatter; fallback: h2 headings + first-line keywords (≤5) */
11
+ tags: string[];
12
+ /** From frontmatter; fallback: first non-heading paragraph (≤120 chars) */
13
+ summary: string;
14
+ /** Math.ceil(content.length / 4) */
15
+ tokenCost: number;
16
+ /** Natural language patterns that trigger this unit */
17
+ triggers: string[];
18
+ /** ISO mtime */
19
+ updatedAt: string;
20
+ /** Absent after scan(); populated after hydrate() or persist() */
21
+ content?: string;
22
+ }
23
+ export interface LoadResult {
24
+ units: MemoryUnit[];
25
+ totalTokens: number;
26
+ budget: number;
27
+ /** Candidates that exceeded the budget (content NOT hydrated) */
28
+ dropped: MemoryUnit[];
29
+ }
30
+ export interface MemoryLoaderConfig {
31
+ root: string;
32
+ /** Default: { 0: 800, 1: 2000, 2: 4000, 3: 8000 } */
33
+ budgets?: Partial<Record<MemoryTier, number>>;
34
+ /** Days to keep episodic sessions in recent/ before archiving. Default: 7 */
35
+ episodicRecentDays?: number;
36
+ /** Auto-rebuild INDEX.md after every persist(). Default: true */
37
+ autoIndex?: boolean;
38
+ /** Minimum relevance score (0–1) for match()/query(). Default: 0.2 */
39
+ matchThreshold?: number;
40
+ debug?: boolean;
41
+ }
42
+ /** Internal frontmatter type — NOT exported as MemoryFrontmatter */
43
+ export interface Frontmatter {
44
+ type?: MemoryType;
45
+ tier?: MemoryTier;
46
+ tags?: string[];
47
+ summary?: string;
48
+ triggers?: string[];
49
+ }
50
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/harness/memory/types.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,UAAU,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAEvC,MAAM,MAAM,UAAU,GAClB,UAAU,GACV,SAAS,GACT,YAAY,GACZ,UAAU,GACV,UAAU,GACV,MAAM,CAAC;AAEX,MAAM,WAAW,UAAU;IACzB,sEAAsE;IACtE,GAAG,EAAE,MAAM,CAAC;IACZ,4BAA4B;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,EAAE,UAAU,CAAC;IACjB,yEAAyE;IACzE,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,2EAA2E;IAC3E,OAAO,EAAE,MAAM,CAAC;IAChB,oCAAoC;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,uDAAuD;IACvD,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,gBAAgB;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,kEAAkE;IAClE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,iEAAiE;IACjE,OAAO,EAAE,UAAU,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,qDAAqD;IACrD,OAAO,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;IAC9C,6EAA6E;IAC7E,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,iEAAiE;IACjE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,sEAAsE;IACtE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,oEAAoE;AACpE,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB"}
@@ -0,0 +1,7 @@
1
+ // ============================================================
2
+ // @oni.bot/core/harness/memory — types
3
+ //
4
+ // All public and internal types for the MemoryLoader system.
5
+ // ============================================================
6
+ export {};
7
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/harness/memory/types.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,uCAAuC;AACvC,EAAE;AACF,6DAA6D;AAC7D,+DAA+D"}
@@ -1,150 +1,3 @@
1
- import type { ToolDefinition } from "../tools/types.js";
2
- export type MemoryTier = 0 | 1 | 2 | 3;
3
- export type MemoryType = "identity" | "working" | "procedural" | "episodic" | "semantic" | "user";
4
- export interface MemoryUnit {
5
- /** Relative path from memory root, e.g. "procedural/pptx/notes.md" */
6
- key: string;
7
- /** Absolute path on disk */
8
- path: string;
9
- type: MemoryType;
10
- tier: MemoryTier;
11
- /** From frontmatter; fallback: h2 headings + first-line keywords (≤5) */
12
- tags: string[];
13
- /** From frontmatter; fallback: first non-heading paragraph (≤120 chars) */
14
- summary: string;
15
- /** Math.ceil(content.length / 4) */
16
- tokenCost: number;
17
- /** Natural language patterns that trigger this unit */
18
- triggers: string[];
19
- /** ISO mtime */
20
- updatedAt: string;
21
- /** Absent after scan(); populated after hydrate() or persist() */
22
- content?: string;
23
- }
24
- export interface LoadResult {
25
- units: MemoryUnit[];
26
- totalTokens: number;
27
- budget: number;
28
- /** Candidates that exceeded the budget (content NOT hydrated) */
29
- dropped: MemoryUnit[];
30
- }
31
- export interface MemoryLoaderConfig {
32
- root: string;
33
- /** Default: { 0: 800, 1: 2000, 2: 4000, 3: 8000 } */
34
- budgets?: Partial<Record<MemoryTier, number>>;
35
- /** Days to keep episodic sessions in recent/ before archiving. Default: 7 */
36
- episodicRecentDays?: number;
37
- /** Auto-rebuild INDEX.md after every persist(). Default: true */
38
- autoIndex?: boolean;
39
- /** Minimum relevance score (0–1) for match()/query(). Default: 0.2 */
40
- matchThreshold?: number;
41
- debug?: boolean;
42
- }
43
- export declare class MemoryLoader {
44
- private readonly config;
45
- private units;
46
- private loaded;
47
- private static readonly DEFAULT_BUDGETS;
48
- constructor(config: MemoryLoaderConfig);
49
- static fromRoot(root: string, opts?: Partial<MemoryLoaderConfig>): MemoryLoader;
50
- private ensureDirectoryStructure;
51
- scan(): void;
52
- private scanDirectory;
53
- private registerFile;
54
- private extractTagsFromContent;
55
- private extractSummary;
56
- /**
57
- * wake() — Load Tier 0 (identity). Always called first.
58
- * Additive: already-loaded units are skipped.
59
- */
60
- wake(): LoadResult;
61
- /**
62
- * orient() — Load Tier 1 (working, user/PROFILE, INDEX files).
63
- * Additive.
64
- */
65
- orient(): LoadResult;
66
- /**
67
- * match(task) — Load Tier 2 units relevant to the task string.
68
- * Scored by tag-overlap × recency. Additive.
69
- * Returns empty LoadResult if taskTokens is empty (no error).
70
- */
71
- match(task: string): LoadResult;
72
- /**
73
- * query(topic) — Load Tier 3 units. Called only via the memory_query tool.
74
- * Additive.
75
- */
76
- query(topic: string): LoadResult;
77
- /**
78
- * load(key) — Directly load a specific memory unit by key. Additive.
79
- */
80
- load(key: string): MemoryUnit | null;
81
- /**
82
- * loadType(type) — Load all units of a given memory type.
83
- * Budget: 16000t fixed (intentional escape hatch). Additive.
84
- */
85
- loadType(type: MemoryType): LoadResult;
86
- /**
87
- * buildSystemPrompt(tiers) — Assemble loaded units into a system prompt string.
88
- * Default tiers: [0, 1, 2]
89
- */
90
- buildSystemPrompt(tiers?: MemoryTier[]): string;
91
- /**
92
- * getLoadedManifest() — Compact list of loaded keys + costs.
93
- * Format: "- <key> (T<tier>, <cost>t)" per line.
94
- */
95
- getLoadedManifest(): string;
96
- /** resetSession() — Clear loaded set and release hydrated content. Does not remove files. */
97
- resetSession(): void;
98
- /**
99
- * persist() — Write a memory unit to disk.
100
- * autoIndex: rebuildIndex() called synchronously before return when autoIndex === true.
101
- * Returns MemoryUnit with content populated.
102
- */
103
- persist(type: MemoryType, filename: string, content: string, subfolder?: string): MemoryUnit;
104
- private persistInternal;
105
- /**
106
- * persistEpisodic() — Write session log to episodic/recent/<date>_<sessionId>.md.
107
- * Triggers compaction if recent/ has files older than episodicRecentDays.
108
- */
109
- persistEpisodic(sessionId: string, content: string): MemoryUnit;
110
- /**
111
- * persistSemantic() — Write knowledge unit to semantic/<domain>/<topic>.md.
112
- * Rebuilds both domain INDEX.md and root semantic INDEX.md.
113
- */
114
- persistSemantic(domain: string, topic: string, content: string): MemoryUnit;
115
- /**
116
- * rebuildIndex() — Rewrite the INDEX.md for a given folder.
117
- * INDEX.md files are write-only — never read back by the loader.
118
- */
119
- rebuildIndex(folder: string): void;
120
- /** rebuildAllIndexes() — Rebuild every INDEX.md in the tree. */
121
- rebuildAllIndexes(): void;
122
- stats(): {
123
- totalUnits: number;
124
- currentlyLoaded: number;
125
- totalTokensOnDisk: number;
126
- byType: Record<string, number>;
127
- byTier: Record<string, number>;
128
- root: string;
129
- };
130
- /**
131
- * getQueryTool() — Returns the memory_query ToolDefinition.
132
- * The `reason` param is prompting-only — not used in execute logic.
133
- * `_ctx` is typed as ToolContext (base); MemoryLoader needs no harness-specific context.
134
- */
135
- getQueryTool(): ToolDefinition<{
136
- topic: string;
137
- reason: string;
138
- }, object>;
139
- private loadByTier;
140
- private getUnitsByTier;
141
- private getBudget;
142
- private applyBudget;
143
- private hydrate;
144
- private scoreRelevance;
145
- private extractTagsFromString;
146
- private injectFrontmatter;
147
- private compactEpisodicIfNeeded;
148
- private log;
149
- }
1
+ export { MemoryLoader } from './memory/index.js';
2
+ export type { MemoryUnit, MemoryTier, MemoryType, MemoryLoaderConfig, LoadResult } from './memory/types.js';
150
3
  //# sourceMappingURL=memory-loader.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"memory-loader.d.ts","sourceRoot":"","sources":["../../src/harness/memory-loader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"memory-loader.d.ts","sourceRoot":"","sources":["../../src/harness/memory-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC"}