@roackb2/heddle 1.6.0 → 1.7.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 (193) hide show
  1. package/README.md +5 -0
  2. package/dist/examples/repo-investigator.js +2 -2
  3. package/dist/examples/repo-investigator.js.map +1 -1
  4. package/dist/src/cli/ask.d.ts.map +1 -1
  5. package/dist/src/cli/ask.js +4 -4
  6. package/dist/src/cli/ask.js.map +1 -1
  7. package/dist/src/cli/chat/commands/debug-snapshot-command.js +2 -2
  8. package/dist/src/cli/chat/commands/debug-snapshot-command.js.map +1 -1
  9. package/dist/src/cli/chat/state/local-commands.js +6 -6
  10. package/dist/src/cli/chat/state/local-commands.js.map +1 -1
  11. package/dist/src/cli/chat/utils/runtime.d.ts.map +1 -1
  12. package/dist/src/cli/chat/utils/runtime.js +3 -3
  13. package/dist/src/cli/chat/utils/runtime.js.map +1 -1
  14. package/dist/src/cli/main.js +22 -20
  15. package/dist/src/cli/main.js.map +1 -1
  16. package/dist/src/cli/remote/control-plane-client.d.ts +1 -1
  17. package/dist/src/core/agent/budget/index.d.ts +2 -0
  18. package/dist/src/core/agent/budget/index.d.ts.map +1 -0
  19. package/dist/src/core/agent/budget/index.js +2 -0
  20. package/dist/src/core/agent/budget/index.js.map +1 -0
  21. package/dist/src/core/agent/budget/step-budget.d.ts +12 -0
  22. package/dist/src/core/agent/budget/step-budget.d.ts.map +1 -0
  23. package/dist/src/core/agent/budget/step-budget.js +21 -0
  24. package/dist/src/core/agent/budget/step-budget.js.map +1 -0
  25. package/dist/src/core/agent/context/run-context-builder.js +6 -6
  26. package/dist/src/core/agent/context/run-context-builder.js.map +1 -1
  27. package/dist/src/core/agent/tools/tool-dispatcher.d.ts +3 -4
  28. package/dist/src/core/agent/tools/tool-dispatcher.d.ts.map +1 -1
  29. package/dist/src/core/agent/tools/tool-dispatcher.js +2 -2
  30. package/dist/src/core/agent/tools/tool-dispatcher.js.map +1 -1
  31. package/dist/src/core/agent/types.d.ts +5 -5
  32. package/dist/src/core/agent/types.d.ts.map +1 -1
  33. package/dist/src/core/chat/engine/turns/memory/turn-memory-maintenance.d.ts.map +1 -1
  34. package/dist/src/core/chat/engine/turns/memory/turn-memory-maintenance.js +9 -5
  35. package/dist/src/core/chat/engine/turns/memory/turn-memory-maintenance.js.map +1 -1
  36. package/dist/src/core/chat/engine/turns/runtime/runtime-resolver.d.ts.map +1 -1
  37. package/dist/src/core/chat/engine/turns/runtime/runtime-resolver.js +2 -3
  38. package/dist/src/core/chat/engine/turns/runtime/runtime-resolver.js.map +1 -1
  39. package/dist/src/core/commands/slash/autocomplete.d.ts +9 -4
  40. package/dist/src/core/commands/slash/autocomplete.d.ts.map +1 -1
  41. package/dist/src/core/commands/slash/autocomplete.js +53 -48
  42. package/dist/src/core/commands/slash/autocomplete.js.map +1 -1
  43. package/dist/src/core/commands/slash/modules/auth/auth-commands.js +4 -4
  44. package/dist/src/core/commands/slash/modules/auth/auth-commands.js.map +1 -1
  45. package/dist/src/core/commands/slash/modules/compaction/compaction-commands.js +2 -2
  46. package/dist/src/core/commands/slash/modules/compaction/compaction-commands.js.map +1 -1
  47. package/dist/src/core/commands/slash/modules/drift/drift-commands.js +4 -4
  48. package/dist/src/core/commands/slash/modules/drift/drift-commands.js.map +1 -1
  49. package/dist/src/core/commands/slash/modules/heartbeat/heartbeat-commands.js +3 -3
  50. package/dist/src/core/commands/slash/modules/heartbeat/heartbeat-commands.js.map +1 -1
  51. package/dist/src/core/commands/slash/modules/model/model-commands.js +8 -8
  52. package/dist/src/core/commands/slash/modules/model/model-commands.js.map +1 -1
  53. package/dist/src/core/commands/slash/modules/session/session-commands.js +6 -6
  54. package/dist/src/core/commands/slash/modules/session/session-commands.js.map +1 -1
  55. package/dist/src/core/commands/slash/parser.d.ts +10 -5
  56. package/dist/src/core/commands/slash/parser.d.ts.map +1 -1
  57. package/dist/src/core/commands/slash/parser.js +42 -37
  58. package/dist/src/core/commands/slash/parser.js.map +1 -1
  59. package/dist/src/core/commands/slash/registry.d.ts +12 -3
  60. package/dist/src/core/commands/slash/registry.d.ts.map +1 -1
  61. package/dist/src/core/commands/slash/registry.js +50 -45
  62. package/dist/src/core/commands/slash/registry.js.map +1 -1
  63. package/dist/src/core/heartbeat/wake/service.d.ts.map +1 -1
  64. package/dist/src/core/heartbeat/wake/service.js +2 -3
  65. package/dist/src/core/heartbeat/wake/service.js.map +1 -1
  66. package/dist/src/core/memory/catalog.d.ts +22 -40
  67. package/dist/src/core/memory/catalog.d.ts.map +1 -1
  68. package/dist/src/core/memory/catalog.js +166 -155
  69. package/dist/src/core/memory/catalog.js.map +1 -1
  70. package/dist/src/core/memory/index.d.ts +14 -0
  71. package/dist/src/core/memory/index.d.ts.map +1 -0
  72. package/dist/src/core/memory/index.js +13 -0
  73. package/dist/src/core/memory/index.js.map +1 -0
  74. package/dist/src/core/memory/maintainer-prompt.d.ts +14 -0
  75. package/dist/src/core/memory/maintainer-prompt.d.ts.map +1 -0
  76. package/dist/src/core/memory/maintainer-prompt.js +58 -0
  77. package/dist/src/core/memory/maintainer-prompt.js.map +1 -0
  78. package/dist/src/core/memory/maintainer.d.ts +20 -44
  79. package/dist/src/core/memory/maintainer.d.ts.map +1 -1
  80. package/dist/src/core/memory/maintainer.js +124 -184
  81. package/dist/src/core/memory/maintainer.js.map +1 -1
  82. package/dist/src/core/memory/maintenance-integration.d.ts +22 -19
  83. package/dist/src/core/memory/maintenance-integration.d.ts.map +1 -1
  84. package/dist/src/core/memory/maintenance-integration.js +158 -163
  85. package/dist/src/core/memory/maintenance-integration.js.map +1 -1
  86. package/dist/src/core/memory/maintenance-repository.d.ts +27 -0
  87. package/dist/src/core/memory/maintenance-repository.d.ts.map +1 -0
  88. package/dist/src/core/memory/maintenance-repository.js +134 -0
  89. package/dist/src/core/memory/maintenance-repository.js.map +1 -0
  90. package/dist/src/core/memory/note-service.d.ts +23 -0
  91. package/dist/src/core/memory/note-service.d.ts.map +1 -0
  92. package/dist/src/core/memory/note-service.js +165 -0
  93. package/dist/src/core/memory/note-service.js.map +1 -0
  94. package/dist/src/core/memory/path-utils.d.ts +15 -0
  95. package/dist/src/core/memory/path-utils.d.ts.map +1 -0
  96. package/dist/src/core/memory/path-utils.js +31 -0
  97. package/dist/src/core/memory/path-utils.js.map +1 -0
  98. package/dist/src/core/memory/schemas.d.ts +116 -0
  99. package/dist/src/core/memory/schemas.d.ts.map +1 -0
  100. package/dist/src/core/memory/schemas.js +53 -0
  101. package/dist/src/core/memory/schemas.js.map +1 -0
  102. package/dist/src/core/memory/types.d.ts +149 -0
  103. package/dist/src/core/memory/types.d.ts.map +1 -0
  104. package/dist/src/core/memory/types.js +2 -0
  105. package/dist/src/core/memory/types.js.map +1 -0
  106. package/dist/src/core/memory/validation.d.ts +20 -38
  107. package/dist/src/core/memory/validation.d.ts.map +1 -1
  108. package/dist/src/core/memory/validation.js +98 -83
  109. package/dist/src/core/memory/validation.js.map +1 -1
  110. package/dist/src/core/memory/visibility.d.ts +19 -41
  111. package/dist/src/core/memory/visibility.d.ts.map +1 -1
  112. package/dist/src/core/memory/visibility.js +53 -153
  113. package/dist/src/core/memory/visibility.js.map +1 -1
  114. package/dist/src/core/review/index.d.ts +3 -0
  115. package/dist/src/core/review/index.d.ts.map +1 -0
  116. package/dist/src/core/review/index.js +2 -0
  117. package/dist/src/core/review/index.js.map +1 -0
  118. package/dist/src/core/review/service.d.ts +22 -0
  119. package/dist/src/core/review/service.d.ts.map +1 -0
  120. package/dist/src/core/review/service.js +143 -0
  121. package/dist/src/core/review/service.js.map +1 -0
  122. package/dist/src/core/review/{diff-domain.d.ts → types.d.ts} +1 -3
  123. package/dist/src/core/review/types.d.ts.map +1 -0
  124. package/dist/src/core/review/types.js +2 -0
  125. package/dist/src/core/review/types.js.map +1 -0
  126. package/dist/src/core/runtime/tools/service.js +2 -2
  127. package/dist/src/core/runtime/tools/service.js.map +1 -1
  128. package/dist/src/core/tools/execute-tool.d.ts +5 -4
  129. package/dist/src/core/tools/execute-tool.d.ts.map +1 -1
  130. package/dist/src/core/tools/execute-tool.js +23 -25
  131. package/dist/src/core/tools/execute-tool.js.map +1 -1
  132. package/dist/src/core/tools/index.d.ts +5 -0
  133. package/dist/src/core/tools/index.d.ts.map +1 -0
  134. package/dist/src/core/tools/index.js +4 -0
  135. package/dist/src/core/tools/index.js.map +1 -0
  136. package/dist/src/core/tools/registry.d.ts +8 -7
  137. package/dist/src/core/tools/registry.d.ts.map +1 -1
  138. package/dist/src/core/tools/registry.js +18 -21
  139. package/dist/src/core/tools/registry.js.map +1 -1
  140. package/dist/src/core/tools/toolkit.d.ts +9 -4
  141. package/dist/src/core/tools/toolkit.d.ts.map +1 -1
  142. package/dist/src/core/tools/toolkit.js +21 -16
  143. package/dist/src/core/tools/toolkit.js.map +1 -1
  144. package/dist/src/core/tools/toolkits/knowledge/memory-notes.d.ts +1 -1
  145. package/dist/src/core/tools/toolkits/knowledge/memory-notes.d.ts.map +1 -1
  146. package/dist/src/core/tools/toolkits/knowledge/memory-notes.js +48 -238
  147. package/dist/src/core/tools/toolkits/knowledge/memory-notes.js.map +1 -1
  148. package/dist/src/core/tools/toolkits/knowledge/record-knowledge.d.ts.map +1 -1
  149. package/dist/src/core/tools/toolkits/knowledge/record-knowledge.js +75 -105
  150. package/dist/src/core/tools/toolkits/knowledge/record-knowledge.js.map +1 -1
  151. package/dist/src/core/trace/format.d.ts +9 -3
  152. package/dist/src/core/trace/format.d.ts.map +1 -1
  153. package/dist/src/core/trace/format.js +106 -107
  154. package/dist/src/core/trace/format.js.map +1 -1
  155. package/dist/src/core/trace/index.d.ts +4 -0
  156. package/dist/src/core/trace/index.d.ts.map +1 -0
  157. package/dist/src/core/trace/index.js +3 -0
  158. package/dist/src/core/trace/index.js.map +1 -0
  159. package/dist/src/core/trace/recorder.d.ts +10 -7
  160. package/dist/src/core/trace/recorder.d.ts.map +1 -1
  161. package/dist/src/core/trace/recorder.js +15 -17
  162. package/dist/src/core/trace/recorder.js.map +1 -1
  163. package/dist/src/core/trace/types.d.ts +7 -0
  164. package/dist/src/core/trace/types.d.ts.map +1 -0
  165. package/dist/src/core/trace/types.js +2 -0
  166. package/dist/src/core/trace/types.js.map +1 -0
  167. package/dist/src/index.d.ts +15 -14
  168. package/dist/src/index.d.ts.map +1 -1
  169. package/dist/src/index.js +11 -8
  170. package/dist/src/index.js.map +1 -1
  171. package/dist/src/server/features/control-plane/controllers/ask.d.ts.map +1 -1
  172. package/dist/src/server/features/control-plane/controllers/ask.js +6 -7
  173. package/dist/src/server/features/control-plane/controllers/ask.js.map +1 -1
  174. package/dist/src/server/features/control-plane/controllers/chat-turn-review-presenter.js +3 -3
  175. package/dist/src/server/features/control-plane/controllers/chat-turn-review-presenter.js.map +1 -1
  176. package/dist/src/server/features/control-plane/controllers/memory.d.ts +2 -1
  177. package/dist/src/server/features/control-plane/controllers/memory.d.ts.map +1 -1
  178. package/dist/src/server/features/control-plane/controllers/memory.js +8 -7
  179. package/dist/src/server/features/control-plane/controllers/memory.js.map +1 -1
  180. package/dist/src/server/features/control-plane/controllers/workspace-diff.js +2 -2
  181. package/dist/src/server/features/control-plane/controllers/workspace-diff.js.map +1 -1
  182. package/dist/src/server/features/control-plane/router.d.ts +1 -1
  183. package/dist/src/server/features/control-plane/types.d.ts +2 -2
  184. package/dist/src/server/features/control-plane/types.d.ts.map +1 -1
  185. package/dist/src/server/router.d.ts +1 -1
  186. package/package.json +1 -1
  187. package/dist/src/core/review/diff-domain.d.ts.map +0 -1
  188. package/dist/src/core/review/diff-domain.js +0 -134
  189. package/dist/src/core/review/diff-domain.js.map +0 -1
  190. package/dist/src/core/utils/budget.d.ts +0 -13
  191. package/dist/src/core/utils/budget.d.ts.map +0 -1
  192. package/dist/src/core/utils/budget.js +0 -22
  193. package/dist/src/core/utils/budget.js.map +0 -1
@@ -1,9 +1,6 @@
1
- import { access, readdir, readFile, stat } from 'node:fs/promises';
2
- import { isAbsolute, relative, resolve } from 'node:path';
3
- import { spawn } from 'node:child_process';
4
- import { executeScopedEdit } from '../coding-files/file-edit-core.js';
1
+ import { resolve } from 'node:path';
2
+ import { MemoryNoteService } from '../../../../core/memory/note-service.js';
5
3
  const DEFAULT_MEMORY_ROOT = resolve(process.cwd(), '.heddle', 'memory');
6
- const DEFAULT_MAX_SEARCH_RESULTS = 100;
7
4
  export function createListMemoryNotesTool(options = {}) {
8
5
  return {
9
6
  name: 'list_memory_notes',
@@ -19,37 +16,17 @@ export function createListMemoryNotesTool(options = {}) {
19
16
  },
20
17
  },
21
18
  async execute(raw) {
22
- if (!isListMemoryNotesInput(raw)) {
19
+ if (!MemoryNotesToolInput.isList(raw)) {
23
20
  return { ok: false, error: 'Invalid input for list_memory_notes. Optional field: path.' };
24
21
  }
25
- const memoryRoot = resolveMemoryRoot(options);
26
- const targetPath = resolveMemoryPath(memoryRoot, raw.path ?? '.');
27
- if (!targetPath.ok) {
28
- return { ok: false, error: targetPath.error };
29
- }
30
- const exists = await pathExists(targetPath.path);
31
- if (!exists) {
32
- return { ok: true, output: '' };
33
- }
34
22
  try {
35
- const info = await stat(targetPath.path);
36
- if (info.isFile()) {
37
- return {
38
- ok: true,
39
- output: toMemoryRelativePath(memoryRoot, targetPath.path),
40
- };
41
- }
42
- const entries = await listMarkdownNotes(targetPath.path);
43
23
  return {
44
24
  ok: true,
45
- output: entries.map((entry) => toMemoryRelativePath(memoryRoot, entry)).join('\n'),
25
+ output: (await memoryNotes(options).list(raw)).join('\n'),
46
26
  };
47
27
  }
48
28
  catch (error) {
49
- return {
50
- ok: false,
51
- error: `Failed to list memory notes in ${targetPath.path}: ${error instanceof Error ? error.message : String(error)}`,
52
- };
29
+ return { ok: false, error: error instanceof Error ? error.message : String(error) };
53
30
  }
54
31
  },
55
32
  };
@@ -78,32 +55,17 @@ export function createReadMemoryNoteTool(options = {}) {
78
55
  required: ['path'],
79
56
  },
80
57
  async execute(raw) {
81
- if (!isReadMemoryNoteInput(raw)) {
58
+ if (!MemoryNotesToolInput.isRead(raw)) {
82
59
  return { ok: false, error: 'Invalid input for read_memory_note. Required field: path. Optional fields: maxLines, offset.' };
83
60
  }
84
- const memoryRoot = resolveMemoryRoot(options);
85
- const targetPath = resolveMemoryPath(memoryRoot, raw.path);
86
- if (!targetPath.ok) {
87
- return { ok: false, error: targetPath.error };
88
- }
89
61
  try {
90
- const content = await readFile(targetPath.path, 'utf8');
91
62
  return {
92
63
  ok: true,
93
- output: pageText(content, raw.offset, raw.maxLines),
64
+ output: await memoryNotes(options).read(raw),
94
65
  };
95
66
  }
96
67
  catch (error) {
97
- if (isErrorWithCode(error, 'EISDIR')) {
98
- return {
99
- ok: false,
100
- error: `Failed to read ${targetPath.path}: path is a directory, not a file. Use list_memory_notes to inspect memory directories.`,
101
- };
102
- }
103
- return {
104
- ok: false,
105
- error: `Failed to read ${targetPath.path}: ${error instanceof Error ? error.message : String(error)}`,
106
- };
68
+ return { ok: false, error: error instanceof Error ? error.message : String(error) };
107
69
  }
108
70
  },
109
71
  };
@@ -132,20 +94,18 @@ export function createSearchMemoryNotesTool(options = {}) {
132
94
  required: ['query'],
133
95
  },
134
96
  async execute(raw) {
135
- if (!isSearchMemoryNotesInput(raw)) {
97
+ if (!MemoryNotesToolInput.isSearch(raw)) {
136
98
  return { ok: false, error: 'Invalid input for search_memory_notes. Required field: query. Optional fields: path, maxResults.' };
137
99
  }
138
- const memoryRoot = resolveMemoryRoot(options);
139
- const targetPath = resolveMemoryPath(memoryRoot, raw.path ?? '.');
140
- if (!targetPath.ok) {
141
- return { ok: false, error: targetPath.error };
100
+ try {
101
+ return {
102
+ ok: true,
103
+ output: await memoryNotes(options).search(raw),
104
+ };
142
105
  }
143
- const exists = await pathExists(targetPath.path);
144
- if (!exists) {
145
- return { ok: true, output: 'No matches found.' };
106
+ catch (error) {
107
+ return { ok: false, error: error instanceof Error ? error.message : String(error) };
146
108
  }
147
- const searchResult = await searchWithCli(memoryRoot, targetPath.path, raw.query, sanitizeMaxResults(raw.maxResults));
148
- return searchResult;
149
109
  },
150
110
  };
151
111
  }
@@ -185,14 +145,7 @@ export function createEditMemoryNoteTool(options = {}) {
185
145
  required: ['path'],
186
146
  },
187
147
  async execute(raw) {
188
- return executeScopedEdit(raw, {
189
- toolName: 'edit_memory_note',
190
- rootPath: resolveMemoryRoot(options),
191
- rootLabel: 'memory root',
192
- subjectLabel: 'memory note',
193
- creationHint: 'Set createIfMissing to true if you want edit_memory_note to create it.',
194
- enforceRoot: true,
195
- });
148
+ return await memoryNotes(options).edit(raw);
196
149
  },
197
150
  };
198
151
  }
@@ -200,184 +153,41 @@ export const listMemoryNotesTool = createListMemoryNotesTool();
200
153
  export const readMemoryNoteTool = createReadMemoryNoteTool();
201
154
  export const searchMemoryNotesTool = createSearchMemoryNotesTool();
202
155
  export const editMemoryNoteTool = createEditMemoryNoteTool();
203
- function resolveMemoryRoot(options) {
204
- return resolve(options.memoryRoot ?? DEFAULT_MEMORY_ROOT);
205
- }
206
- function resolveMemoryPath(memoryRoot, requestedPath) {
207
- if (!requestedPath.trim()) {
208
- return { ok: false, error: `Memory note paths must be non-empty and stay inside ${memoryRoot}.` };
209
- }
210
- const targetPath = resolve(memoryRoot, requestedPath);
211
- const rel = relative(memoryRoot, targetPath);
212
- if (rel.startsWith('..') || isAbsolute(rel)) {
213
- return { ok: false, error: `Memory note paths must stay inside ${memoryRoot}. Refusing to access ${targetPath}.` };
214
- }
215
- return { ok: true, path: targetPath };
216
- }
217
- async function listMarkdownNotes(root) {
218
- const results = [];
219
- const entries = await readdir(root, { withFileTypes: true });
220
- for (const entry of entries) {
221
- const nextPath = resolve(root, entry.name);
222
- if (entry.isDirectory()) {
223
- results.push(...await listMarkdownNotes(nextPath));
224
- continue;
156
+ class MemoryNotesToolInput {
157
+ static isList(raw) {
158
+ if (raw === undefined) {
159
+ return true;
225
160
  }
226
- if (entry.isFile() && isMarkdownPath(nextPath)) {
227
- results.push(nextPath);
161
+ if (!raw || typeof raw !== 'object' || Array.isArray(raw)) {
162
+ return false;
228
163
  }
164
+ const input = raw;
165
+ return Object.keys(input).every((key) => key === 'path')
166
+ && (input.path === undefined || typeof input.path === 'string');
229
167
  }
230
- return results.sort();
231
- }
232
- function pageText(content, offset, maxLines) {
233
- const lines = content.split('\n');
234
- const start = offset && offset > 0 ? Math.floor(offset) : 0;
235
- const end = maxLines && maxLines > 0 ? start + Math.floor(maxLines) : undefined;
236
- if (start > 0 || end !== undefined) {
237
- return lines.slice(start, end).join('\n');
238
- }
239
- return content;
240
- }
241
- function sanitizeMaxResults(value) {
242
- if (!value || !Number.isFinite(value) || value <= 0) {
243
- return DEFAULT_MAX_SEARCH_RESULTS;
244
- }
245
- return Math.min(Math.floor(value), DEFAULT_MAX_SEARCH_RESULTS);
246
- }
247
- function toMemoryRelativePath(memoryRoot, filePath) {
248
- const rel = relative(memoryRoot, filePath);
249
- return rel || '.';
250
- }
251
- function isMarkdownPath(path) {
252
- return /\.md$/i.test(path);
253
- }
254
- async function pathExists(path) {
255
- try {
256
- await access(path);
257
- return true;
258
- }
259
- catch {
260
- return false;
261
- }
262
- }
263
- function isListMemoryNotesInput(raw) {
264
- if (raw === undefined) {
265
- return true;
266
- }
267
- if (!raw || typeof raw !== 'object' || Array.isArray(raw)) {
268
- return false;
269
- }
270
- const input = raw;
271
- const keys = Object.keys(input);
272
- if (keys.some((key) => key !== 'path')) {
273
- return false;
274
- }
275
- return input.path === undefined || typeof input.path === 'string';
276
- }
277
- function isReadMemoryNoteInput(raw) {
278
- if (!raw || typeof raw !== 'object' || Array.isArray(raw)) {
279
- return false;
280
- }
281
- const input = raw;
282
- const keys = Object.keys(input);
283
- if (keys.some((key) => key !== 'path' && key !== 'maxLines' && key !== 'offset')) {
284
- return false;
285
- }
286
- return (typeof input.path === 'string' &&
287
- (input.maxLines === undefined || typeof input.maxLines === 'number') &&
288
- (input.offset === undefined || typeof input.offset === 'number'));
289
- }
290
- function isSearchMemoryNotesInput(raw) {
291
- if (!raw || typeof raw !== 'object' || Array.isArray(raw)) {
292
- return false;
293
- }
294
- const input = raw;
295
- const keys = Object.keys(input);
296
- if (keys.some((key) => key !== 'query' && key !== 'path' && key !== 'maxResults')) {
297
- return false;
298
- }
299
- return (typeof input.query === 'string' &&
300
- input.query.trim().length > 0 &&
301
- (input.path === undefined || typeof input.path === 'string') &&
302
- (input.maxResults === undefined || typeof input.maxResults === 'number'));
303
- }
304
- function isErrorWithCode(error, code) {
305
- return error instanceof Error && 'code' in error && error.code === code;
306
- }
307
- async function searchWithCli(memoryRoot, targetPath, query, maxResults) {
308
- const relativeTarget = toMemoryRelativePath(memoryRoot, targetPath);
309
- const normalizedTarget = relativeTarget === '.' ? '.' : relativeTarget;
310
- const rgResult = await runSearchCommand('rg', ['-n', '--no-heading', '--glob', '*.md', query, normalizedTarget], memoryRoot);
311
- if (rgResult.kind === 'ok') {
312
- return {
313
- ok: true,
314
- output: trimSearchOutput(rgResult.stdout, maxResults),
315
- };
316
- }
317
- if (rgResult.kind === 'nonzero_no_match') {
318
- return { ok: true, output: 'No matches found.' };
319
- }
320
- if (rgResult.kind !== 'missing_binary') {
321
- return {
322
- ok: false,
323
- error: `Failed to search memory notes in ${targetPath}: ${rgResult.error}`,
324
- };
325
- }
326
- const grepResult = await runSearchCommand('grep', ['-R', '-n', '--include=*.md', query, normalizedTarget], memoryRoot);
327
- if (grepResult.kind === 'ok') {
328
- return {
329
- ok: true,
330
- output: trimSearchOutput(grepResult.stdout, maxResults),
331
- };
332
- }
333
- if (grepResult.kind === 'nonzero_no_match') {
334
- return { ok: true, output: 'No matches found.' };
168
+ static isRead(raw) {
169
+ if (!raw || typeof raw !== 'object' || Array.isArray(raw)) {
170
+ return false;
171
+ }
172
+ const input = raw;
173
+ return Object.keys(input).every((key) => key === 'path' || key === 'maxLines' || key === 'offset')
174
+ && typeof input.path === 'string'
175
+ && (input.maxLines === undefined || typeof input.maxLines === 'number')
176
+ && (input.offset === undefined || typeof input.offset === 'number');
177
+ }
178
+ static isSearch(raw) {
179
+ if (!raw || typeof raw !== 'object' || Array.isArray(raw)) {
180
+ return false;
181
+ }
182
+ const input = raw;
183
+ return Object.keys(input).every((key) => key === 'query' || key === 'path' || key === 'maxResults')
184
+ && typeof input.query === 'string'
185
+ && input.query.trim().length > 0
186
+ && (input.path === undefined || typeof input.path === 'string')
187
+ && (input.maxResults === undefined || typeof input.maxResults === 'number');
335
188
  }
336
- return {
337
- ok: false,
338
- error: `Failed to search memory notes in ${targetPath}: ${grepResult.error}`,
339
- };
340
- }
341
- function trimSearchOutput(stdout, maxResults) {
342
- const lines = stdout
343
- .split('\n')
344
- .map((line) => line.trimEnd().replace(/^\.\//, ''))
345
- .filter((line) => line.length > 0)
346
- .slice(0, maxResults);
347
- return lines.length > 0 ? lines.join('\n') : 'No matches found.';
348
189
  }
349
- async function runSearchCommand(binary, args, cwd) {
350
- return new Promise((resolvePromise) => {
351
- const child = spawn(binary, args, {
352
- cwd,
353
- stdio: ['ignore', 'pipe', 'pipe'],
354
- });
355
- let stdout = '';
356
- let stderr = '';
357
- child.stdout.on('data', (chunk) => {
358
- stdout += chunk.toString();
359
- });
360
- child.stderr.on('data', (chunk) => {
361
- stderr += chunk.toString();
362
- });
363
- child.on('error', (error) => {
364
- if ('code' in error && error.code === 'ENOENT') {
365
- resolvePromise({ kind: 'missing_binary', error: `${binary} is not available in the environment.` });
366
- return;
367
- }
368
- resolvePromise({ kind: 'error', error: error.message });
369
- });
370
- child.on('close', (code) => {
371
- if (code === 0) {
372
- resolvePromise({ kind: 'ok', stdout });
373
- return;
374
- }
375
- if (code === 1) {
376
- resolvePromise({ kind: 'nonzero_no_match', error: stderr.trim() || `${binary} returned exit code 1` });
377
- return;
378
- }
379
- resolvePromise({ kind: 'error', error: stderr.trim() || `${binary} returned exit code ${code ?? 'unknown'}` });
380
- });
381
- });
190
+ function memoryNotes(options) {
191
+ return new MemoryNoteService(resolve(options.memoryRoot ?? DEFAULT_MEMORY_ROOT));
382
192
  }
383
193
  //# sourceMappingURL=memory-notes.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"memory-notes.js","sourceRoot":"","sources":["../../../../../../src/core/tools/toolkits/knowledge/memory-notes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"memory-notes.js","sourceRoot":"","sources":["../../../../../../src/core/tools/toolkits/knowledge/memory-notes.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"record-knowledge.d.ts","sourceRoot":"","sources":["../../../../../../src/core/tools/toolkits/knowledge/record-knowledge.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAc,MAAM,mBAAmB,CAAC;AAEpE,MAAM,MAAM,0BAA0B,GAAG;IACvC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,MAAM,CAAC;CACvB,CAAC;AAiBF,wBAAgB,yBAAyB,CAAC,OAAO,GAAE,0BAA+B,GAAG,cAAc,CAsElG;AAED,eAAO,MAAM,mBAAmB,gBAA8B,CAAC"}
1
+ {"version":3,"file":"record-knowledge.d.ts","sourceRoot":"","sources":["../../../../../../src/core/tools/toolkits/knowledge/record-knowledge.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAc,MAAM,mBAAmB,CAAC;AAEpE,MAAM,MAAM,0BAA0B,GAAG;IACvC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,MAAM,CAAC;CACvB,CAAC;AAmBF,wBAAgB,yBAAyB,CAAC,OAAO,GAAE,0BAA+B,GAAG,cAAc,CAoElG;AAED,eAAO,MAAM,mBAAmB,gBAA8B,CAAC"}
@@ -1,5 +1,6 @@
1
- import { mkdir, appendFile } from 'node:fs/promises';
2
- import { dirname, isAbsolute, relative, resolve } from 'node:path';
1
+ import { resolve } from 'node:path';
2
+ import { MemoryMaintenanceRepository } from '../../../../core/memory/maintenance-repository.js';
3
+ import { MemoryMaintenanceService } from '../../../../core/memory/maintainer.js';
3
4
  const DEFAULT_MEMORY_ROOT = resolve(process.cwd(), '.heddle', 'memory');
4
5
  const MAX_SUMMARY_LENGTH = 2000;
5
6
  const MAX_EVIDENCE_ITEMS = 8;
@@ -45,12 +46,11 @@ export function createRecordKnowledgeTool(options = {}) {
45
46
  required: ['summary'],
46
47
  },
47
48
  async execute(raw) {
48
- const parsed = validateRecordKnowledgeInput(raw, resolveMemoryRoot(options));
49
+ const memoryRoot = resolveMemoryRoot(options);
50
+ const parsed = RecordKnowledgeToolInput.validate(raw, memoryRoot);
49
51
  if (!parsed.ok) {
50
52
  return { ok: false, error: parsed.error };
51
53
  }
52
- const memoryRoot = resolveMemoryRoot(options);
53
- const candidatePath = resolve(memoryRoot, '_maintenance', 'candidates.jsonl');
54
54
  const now = options.now?.() ?? new Date();
55
55
  const record = {
56
56
  id: options.nextId?.() ?? `candidate-${now.getTime()}`,
@@ -58,8 +58,7 @@ export function createRecordKnowledgeTool(options = {}) {
58
58
  status: 'pending',
59
59
  ...parsed.input,
60
60
  };
61
- await mkdir(dirname(candidatePath), { recursive: true });
62
- await appendFile(candidatePath, `${JSON.stringify(record)}\n`, 'utf8');
61
+ await new MemoryMaintenanceRepository(memoryRoot).appendCandidate(record);
63
62
  return {
64
63
  ok: true,
65
64
  output: {
@@ -73,109 +72,80 @@ export function createRecordKnowledgeTool(options = {}) {
73
72
  };
74
73
  }
75
74
  export const recordKnowledgeTool = createRecordKnowledgeTool();
76
- function validateRecordKnowledgeInput(raw, memoryRoot) {
77
- if (!raw || typeof raw !== 'object' || Array.isArray(raw)) {
78
- return { ok: false, error: invalidInputMessage() };
79
- }
80
- const input = raw;
81
- const allowedKeys = new Set(['summary', 'evidence', 'categoryHint', 'importance', 'confidence', 'sourceRefs']);
82
- if (Object.keys(input).some((key) => !allowedKeys.has(key))) {
83
- return { ok: false, error: invalidInputMessage() };
84
- }
85
- if (typeof input.summary !== 'string' || !input.summary.trim() || input.summary.length > MAX_SUMMARY_LENGTH) {
86
- return { ok: false, error: `Invalid input for record_knowledge. Required field summary must be a non-empty string up to ${MAX_SUMMARY_LENGTH} characters.` };
87
- }
88
- const summary = input.summary.trim();
89
- if (containsSecretLikeText(summary)) {
90
- return { ok: false, error: 'record_knowledge refused secret-like content in summary. Do not store credentials, tokens, private keys, or passwords in memory.' };
91
- }
92
- const evidence = validateOptionalStringArray(input.evidence, 'evidence', MAX_EVIDENCE_ITEMS);
93
- if (!evidence.ok) {
94
- return { ok: false, error: evidence.error };
95
- }
96
- if (evidence.values.some(containsSecretLikeText)) {
97
- return { ok: false, error: 'record_knowledge refused secret-like content in evidence. Do not store credentials, tokens, private keys, or passwords in memory.' };
98
- }
99
- const sourceRefs = validateOptionalStringArray(input.sourceRefs, 'sourceRefs', MAX_SOURCE_REFS);
100
- if (!sourceRefs.ok) {
101
- return { ok: false, error: sourceRefs.error };
102
- }
103
- const invalidSourceRef = sourceRefs.values.find((sourceRef) => !isSafeSourceRef(sourceRef, memoryRoot));
104
- if (invalidSourceRef) {
105
- return { ok: false, error: `record_knowledge sourceRefs must be workspace-relative paths or non-path references. Refusing unsafe sourceRef: ${invalidSourceRef}` };
106
- }
107
- if (sourceRefs.values.some(containsSecretLikeText)) {
108
- return { ok: false, error: 'record_knowledge refused secret-like content in sourceRefs. Do not store credentials, tokens, private keys, or passwords in memory.' };
109
- }
110
- if (input.categoryHint !== undefined && (typeof input.categoryHint !== 'string' || !input.categoryHint.trim() || input.categoryHint.length > 80)) {
111
- return { ok: false, error: 'Invalid input for record_knowledge. Optional field categoryHint must be a non-empty string up to 80 characters.' };
112
- }
113
- if (input.importance !== undefined && input.importance !== 'low' && input.importance !== 'medium' && input.importance !== 'high') {
114
- return { ok: false, error: 'Invalid input for record_knowledge. Optional field importance must be one of: low, medium, high.' };
115
- }
116
- if (input.confidence !== undefined
117
- && input.confidence !== 'user-stated'
118
- && input.confidence !== 'tool-verified'
119
- && input.confidence !== 'inferred'
120
- && input.confidence !== 'historical') {
121
- return { ok: false, error: 'Invalid input for record_knowledge. Optional field confidence must be one of: user-stated, tool-verified, inferred, historical.' };
122
- }
123
- return {
124
- ok: true,
125
- input: {
126
- summary,
127
- evidence: evidence.values.length > 0 ? evidence.values : undefined,
128
- categoryHint: typeof input.categoryHint === 'string' ? input.categoryHint.trim() : undefined,
129
- importance: input.importance,
130
- confidence: input.confidence,
131
- sourceRefs: sourceRefs.values.length > 0 ? sourceRefs.values : undefined,
132
- },
133
- };
134
- }
135
- function validateOptionalStringArray(raw, field, maxItems) {
136
- if (raw === undefined) {
137
- return { ok: true, values: [] };
138
- }
139
- if (!Array.isArray(raw) || raw.length > maxItems || raw.some((value) => typeof value !== 'string' || !value.trim() || value.length > MAX_TEXT_FIELD_LENGTH)) {
140
- return { ok: false, error: `Invalid input for record_knowledge. Optional field ${field} must be an array of up to ${maxItems} non-empty strings, each up to ${MAX_TEXT_FIELD_LENGTH} characters.` };
141
- }
142
- return { ok: true, values: raw.map((value) => value.trim()) };
143
- }
144
- function containsSecretLikeText(value) {
145
- const normalized = value.toLowerCase();
146
- return /\b(api[_ -]?key|password|passwd|private[_ -]?key|access[_ -]?token|refresh[_ -]?token|bearer\s+[a-z0-9._~+/=-]{12,})\b/i.test(value)
147
- || /\bsecret\s*[:=]\s*\S{8,}/i.test(value)
148
- || /\bsk-[a-z0-9_-]{12,}\b/i.test(value)
149
- || normalized.includes('-----begin private key-----')
150
- || normalized.includes('-----begin rsa private key-----')
151
- || normalized.includes('-----begin openSSH private key-----'.toLowerCase());
152
- }
153
- function isSafeSourceRef(value, memoryRoot) {
154
- if (value.includes('\0')) {
155
- return false;
156
- }
157
- if (value.startsWith('trace-') || value.startsWith('session-') || value.startsWith('command:')) {
158
- return true;
159
- }
160
- if (/^[a-z][a-z0-9+.-]*:/i.test(value)) {
161
- return false;
75
+ class RecordKnowledgeToolInput {
76
+ static validate(raw, memoryRoot) {
77
+ if (!raw || typeof raw !== 'object' || Array.isArray(raw)) {
78
+ return { ok: false, error: RecordKnowledgeToolInput.invalidInputMessage() };
79
+ }
80
+ const input = raw;
81
+ const allowedKeys = new Set(['summary', 'evidence', 'categoryHint', 'importance', 'confidence', 'sourceRefs']);
82
+ if (Object.keys(input).some((key) => !allowedKeys.has(key))) {
83
+ return { ok: false, error: RecordKnowledgeToolInput.invalidInputMessage() };
84
+ }
85
+ if (typeof input.summary !== 'string' || !input.summary.trim() || input.summary.length > MAX_SUMMARY_LENGTH) {
86
+ return { ok: false, error: `Invalid input for record_knowledge. Required field summary must be a non-empty string up to ${MAX_SUMMARY_LENGTH} characters.` };
87
+ }
88
+ const summary = input.summary.trim();
89
+ if (!MemoryMaintenanceService.isRecordableCandidateText(summary)) {
90
+ return { ok: false, error: 'record_knowledge refused secret-like content in summary. Do not store credentials, tokens, private keys, or passwords in memory.' };
91
+ }
92
+ const evidence = RecordKnowledgeToolInput.validateOptionalStringArray(input.evidence, 'evidence', MAX_EVIDENCE_ITEMS);
93
+ if (!evidence.ok) {
94
+ return { ok: false, error: evidence.error };
95
+ }
96
+ if (evidence.values.some((value) => !MemoryMaintenanceService.isRecordableCandidateText(value))) {
97
+ return { ok: false, error: 'record_knowledge refused secret-like content in evidence. Do not store credentials, tokens, private keys, or passwords in memory.' };
98
+ }
99
+ const sourceRefs = RecordKnowledgeToolInput.validateOptionalStringArray(input.sourceRefs, 'sourceRefs', MAX_SOURCE_REFS);
100
+ if (!sourceRefs.ok) {
101
+ return { ok: false, error: sourceRefs.error };
102
+ }
103
+ const invalidSourceRef = sourceRefs.values.find((sourceRef) => !MemoryMaintenanceService.isSafeSourceRef(sourceRef, memoryRoot));
104
+ if (invalidSourceRef) {
105
+ return { ok: false, error: `record_knowledge sourceRefs must be workspace-relative paths or non-path references. Refusing unsafe sourceRef: ${invalidSourceRef}` };
106
+ }
107
+ if (sourceRefs.values.some((value) => !MemoryMaintenanceService.isRecordableCandidateText(value))) {
108
+ return { ok: false, error: 'record_knowledge refused secret-like content in sourceRefs. Do not store credentials, tokens, private keys, or passwords in memory.' };
109
+ }
110
+ if (input.categoryHint !== undefined && (typeof input.categoryHint !== 'string' || !input.categoryHint.trim() || input.categoryHint.length > 80)) {
111
+ return { ok: false, error: 'Invalid input for record_knowledge. Optional field categoryHint must be a non-empty string up to 80 characters.' };
112
+ }
113
+ if (input.importance !== undefined && input.importance !== 'low' && input.importance !== 'medium' && input.importance !== 'high') {
114
+ return { ok: false, error: 'Invalid input for record_knowledge. Optional field importance must be one of: low, medium, high.' };
115
+ }
116
+ if (input.confidence !== undefined
117
+ && input.confidence !== 'user-stated'
118
+ && input.confidence !== 'tool-verified'
119
+ && input.confidence !== 'inferred'
120
+ && input.confidence !== 'historical') {
121
+ return { ok: false, error: 'Invalid input for record_knowledge. Optional field confidence must be one of: user-stated, tool-verified, inferred, historical.' };
122
+ }
123
+ return {
124
+ ok: true,
125
+ input: {
126
+ summary,
127
+ evidence: evidence.values.length > 0 ? evidence.values : undefined,
128
+ categoryHint: typeof input.categoryHint === 'string' ? input.categoryHint.trim() : undefined,
129
+ importance: input.importance,
130
+ confidence: input.confidence,
131
+ sourceRefs: sourceRefs.values.length > 0 ? sourceRefs.values : undefined,
132
+ },
133
+ };
162
134
  }
163
- if (isAbsolute(value)) {
164
- return false;
135
+ static validateOptionalStringArray(raw, field, maxItems) {
136
+ if (raw === undefined) {
137
+ return { ok: true, values: [] };
138
+ }
139
+ if (!Array.isArray(raw) || raw.length > maxItems || raw.some((value) => typeof value !== 'string' || !value.trim() || value.length > MAX_TEXT_FIELD_LENGTH)) {
140
+ return { ok: false, error: `Invalid input for record_knowledge. Optional field ${field} must be an array of up to ${maxItems} non-empty strings, each up to ${MAX_TEXT_FIELD_LENGTH} characters.` };
141
+ }
142
+ return { ok: true, values: raw.map((value) => value.trim()) };
165
143
  }
166
- const normalizedSegments = value.replace(/\\/g, '/').split('/');
167
- if (normalizedSegments.includes('..')) {
168
- return false;
144
+ static invalidInputMessage() {
145
+ return 'Invalid input for record_knowledge. Required field: summary. Optional fields: evidence, categoryHint, importance, confidence, sourceRefs.';
169
146
  }
170
- const workspaceRoot = resolve(memoryRoot, '..', '..');
171
- const resolved = resolve(workspaceRoot, value);
172
- const rel = relative(workspaceRoot, resolved);
173
- return rel !== '' && !rel.startsWith('..') && !isAbsolute(rel);
174
147
  }
175
148
  function resolveMemoryRoot(options) {
176
149
  return resolve(options.memoryRoot ?? DEFAULT_MEMORY_ROOT);
177
150
  }
178
- function invalidInputMessage() {
179
- return 'Invalid input for record_knowledge. Required field: summary. Optional fields: evidence, categoryHint, importance, confidence, sourceRefs.';
180
- }
181
151
  //# sourceMappingURL=record-knowledge.js.map