@roackb2/heddle 0.0.4 → 0.0.6

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 (71) hide show
  1. package/README.md +36 -5
  2. package/dist/src/__tests__/chat-compaction.test.js +39 -0
  3. package/dist/src/__tests__/chat-compaction.test.js.map +1 -1
  4. package/dist/src/__tests__/chat-format.test.js +14 -1
  5. package/dist/src/__tests__/chat-format.test.js.map +1 -1
  6. package/dist/src/__tests__/local-commands.test.js +65 -101
  7. package/dist/src/__tests__/local-commands.test.js.map +1 -1
  8. package/dist/src/__tests__/prompt-input.test.js +47 -0
  9. package/dist/src/__tests__/prompt-input.test.js.map +1 -1
  10. package/dist/src/__tests__/prompts.test.js +3 -0
  11. package/dist/src/__tests__/prompts.test.js.map +1 -1
  12. package/dist/src/__tests__/tools.test.js +78 -0
  13. package/dist/src/__tests__/tools.test.js.map +1 -1
  14. package/dist/src/cli/ask.d.ts.map +1 -1
  15. package/dist/src/cli/ask.js +5 -1
  16. package/dist/src/cli/ask.js.map +1 -1
  17. package/dist/src/cli/chat/App.d.ts.map +1 -1
  18. package/dist/src/cli/chat/App.js +5 -5
  19. package/dist/src/cli/chat/App.js.map +1 -1
  20. package/dist/src/cli/chat/components/PromptInput.d.ts +7 -0
  21. package/dist/src/cli/chat/components/PromptInput.d.ts.map +1 -1
  22. package/dist/src/cli/chat/components/PromptInput.js +48 -11
  23. package/dist/src/cli/chat/components/PromptInput.js.map +1 -1
  24. package/dist/src/cli/chat/components/SlashHintPanel.js +2 -30
  25. package/dist/src/cli/chat/components/SlashHintPanel.js.map +1 -1
  26. package/dist/src/cli/chat/hooks/useAgentRun.d.ts.map +1 -1
  27. package/dist/src/cli/chat/hooks/useAgentRun.js +28 -8
  28. package/dist/src/cli/chat/hooks/useAgentRun.js.map +1 -1
  29. package/dist/src/cli/chat/state/compaction.d.ts +4 -0
  30. package/dist/src/cli/chat/state/compaction.d.ts.map +1 -1
  31. package/dist/src/cli/chat/state/compaction.js +21 -5
  32. package/dist/src/cli/chat/state/compaction.js.map +1 -1
  33. package/dist/src/cli/chat/state/local-commands.d.ts +6 -0
  34. package/dist/src/cli/chat/state/local-commands.d.ts.map +1 -1
  35. package/dist/src/cli/chat/state/local-commands.js +38 -45
  36. package/dist/src/cli/chat/state/local-commands.js.map +1 -1
  37. package/dist/src/cli/chat/state/storage.js +1 -0
  38. package/dist/src/cli/chat/state/storage.js.map +1 -1
  39. package/dist/src/cli/chat/state/types.d.ts +1 -0
  40. package/dist/src/cli/chat/state/types.d.ts.map +1 -1
  41. package/dist/src/cli/chat/submit.d.ts.map +1 -1
  42. package/dist/src/cli/chat/submit.js +27 -1
  43. package/dist/src/cli/chat/submit.js.map +1 -1
  44. package/dist/src/cli/chat/utils/format.d.ts +5 -0
  45. package/dist/src/cli/chat/utils/format.d.ts.map +1 -1
  46. package/dist/src/cli/chat/utils/format.js +23 -0
  47. package/dist/src/cli/chat/utils/format.js.map +1 -1
  48. package/dist/src/cli/chat/utils/runtime.d.ts +1 -0
  49. package/dist/src/cli/chat/utils/runtime.d.ts.map +1 -1
  50. package/dist/src/cli/chat/utils/runtime.js +1 -0
  51. package/dist/src/cli/chat/utils/runtime.js.map +1 -1
  52. package/dist/src/index.d.ts +2 -0
  53. package/dist/src/index.d.ts.map +1 -1
  54. package/dist/src/index.js +1 -0
  55. package/dist/src/index.js.map +1 -1
  56. package/dist/src/prompts/system-prompt.d.ts.map +1 -1
  57. package/dist/src/prompts/system-prompt.js +10 -0
  58. package/dist/src/prompts/system-prompt.js.map +1 -1
  59. package/dist/src/tools/edit-file.d.ts +3 -7
  60. package/dist/src/tools/edit-file.d.ts.map +1 -1
  61. package/dist/src/tools/edit-file.js +16 -222
  62. package/dist/src/tools/edit-file.js.map +1 -1
  63. package/dist/src/tools/file-edit-core.d.ts +31 -0
  64. package/dist/src/tools/file-edit-core.d.ts.map +1 -0
  65. package/dist/src/tools/file-edit-core.js +231 -0
  66. package/dist/src/tools/file-edit-core.js.map +1 -0
  67. package/dist/src/tools/memory-notes.d.ts +13 -0
  68. package/dist/src/tools/memory-notes.d.ts.map +1 -0
  69. package/dist/src/tools/memory-notes.js +382 -0
  70. package/dist/src/tools/memory-notes.js.map +1 -0
  71. package/package.json +1 -1
@@ -0,0 +1,382 @@
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 './file-edit-core.js';
5
+ const DEFAULT_MEMORY_ROOT = resolve(process.cwd(), '.heddle', 'memory');
6
+ const DEFAULT_MAX_SEARCH_RESULTS = 100;
7
+ export function createListMemoryNotesTool(options = {}) {
8
+ return {
9
+ name: 'list_memory_notes',
10
+ description: 'List markdown notes inside Heddle persistent memory under .heddle/memory. Use this when you want to inspect what durable project knowledge already exists before updating memory. Optional field: path, relative to the memory root, to limit listing to a subdirectory. Returns relative note paths. Example inputs: {}, { "path": "." }, { "path": "architecture" }.',
11
+ parameters: {
12
+ type: 'object',
13
+ additionalProperties: false,
14
+ properties: {
15
+ path: {
16
+ type: 'string',
17
+ description: 'Optional memory-relative subdirectory to list from',
18
+ },
19
+ },
20
+ },
21
+ async execute(raw) {
22
+ if (!isListMemoryNotesInput(raw)) {
23
+ return { ok: false, error: 'Invalid input for list_memory_notes. Optional field: path.' };
24
+ }
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
+ 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
+ return {
44
+ ok: true,
45
+ output: entries.map((entry) => toMemoryRelativePath(memoryRoot, entry)).join('\n'),
46
+ };
47
+ }
48
+ 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
+ };
53
+ }
54
+ },
55
+ };
56
+ }
57
+ export function createReadMemoryNoteTool(options = {}) {
58
+ return {
59
+ name: 'read_memory_note',
60
+ description: 'Read a persistent memory note from .heddle/memory. Use this for durable project notes such as architecture, known issues, or common commands. Optional fields: maxLines and offset for paging long notes. The path must stay inside the memory root. Example inputs: { "path": "project-summary.md" }, { "path": "architecture.md", "offset": 40, "maxLines": 80 }.',
61
+ parameters: {
62
+ type: 'object',
63
+ additionalProperties: false,
64
+ properties: {
65
+ path: {
66
+ type: 'string',
67
+ description: 'Memory-relative path to the note',
68
+ },
69
+ maxLines: {
70
+ type: 'number',
71
+ description: 'Maximum number of lines to return',
72
+ },
73
+ offset: {
74
+ type: 'number',
75
+ description: '0-based line offset to start from',
76
+ },
77
+ },
78
+ required: ['path'],
79
+ },
80
+ async execute(raw) {
81
+ if (!isReadMemoryNoteInput(raw)) {
82
+ return { ok: false, error: 'Invalid input for read_memory_note. Required field: path. Optional fields: maxLines, offset.' };
83
+ }
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
+ try {
90
+ const content = await readFile(targetPath.path, 'utf8');
91
+ return {
92
+ ok: true,
93
+ output: pageText(content, raw.offset, raw.maxLines),
94
+ };
95
+ }
96
+ 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
+ };
107
+ }
108
+ },
109
+ };
110
+ }
111
+ export function createSearchMemoryNotesTool(options = {}) {
112
+ return {
113
+ name: 'search_memory_notes',
114
+ description: 'Search markdown notes under .heddle/memory using mature command-line search tools. Use this when you want durable project knowledge but do not yet know which note contains it. Input example: { "query": "test command" }. Optional fields: path to limit the search to a subdirectory or note, and maxResults to cap returned lines. Returns grep-style path:line:content output or "No matches found.".',
115
+ parameters: {
116
+ type: 'object',
117
+ additionalProperties: false,
118
+ properties: {
119
+ query: {
120
+ type: 'string',
121
+ description: 'Text to search for in memory notes',
122
+ },
123
+ path: {
124
+ type: 'string',
125
+ description: 'Optional memory-relative subdirectory or note path to search within',
126
+ },
127
+ maxResults: {
128
+ type: 'number',
129
+ description: 'Maximum number of matching lines to return',
130
+ },
131
+ },
132
+ required: ['query'],
133
+ },
134
+ async execute(raw) {
135
+ if (!isSearchMemoryNotesInput(raw)) {
136
+ return { ok: false, error: 'Invalid input for search_memory_notes. Required field: query. Optional fields: path, maxResults.' };
137
+ }
138
+ const memoryRoot = resolveMemoryRoot(options);
139
+ const targetPath = resolveMemoryPath(memoryRoot, raw.path ?? '.');
140
+ if (!targetPath.ok) {
141
+ return { ok: false, error: targetPath.error };
142
+ }
143
+ const exists = await pathExists(targetPath.path);
144
+ if (!exists) {
145
+ return { ok: true, output: 'No matches found.' };
146
+ }
147
+ const searchResult = await searchWithCli(memoryRoot, targetPath.path, raw.query, sanitizeMaxResults(raw.maxResults));
148
+ return searchResult;
149
+ },
150
+ };
151
+ }
152
+ export function createEditMemoryNoteTool(options = {}) {
153
+ return {
154
+ name: 'edit_memory_note',
155
+ description: 'Create or edit a persistent markdown note inside .heddle/memory. Use this for stable reusable project knowledge that should survive future sessions. Use { "path", "oldText", "newText" } for an exact replacement, optionally with replaceAll, or use { "path", "content", "createIfMissing" } to overwrite an existing note or create a new one explicitly. This tool does not require approval; you should maintain durable memory proactively at sensible checkpoints. If the built-in edit flow is insufficient, it is acceptable to use mature shell tools against the memory directory.',
156
+ parameters: {
157
+ type: 'object',
158
+ additionalProperties: false,
159
+ properties: {
160
+ path: {
161
+ type: 'string',
162
+ description: 'Memory-relative markdown note path',
163
+ },
164
+ oldText: {
165
+ type: 'string',
166
+ description: 'Existing text to replace exactly',
167
+ },
168
+ newText: {
169
+ type: 'string',
170
+ description: 'Replacement text for oldText',
171
+ },
172
+ replaceAll: {
173
+ type: 'boolean',
174
+ description: 'Replace every matching occurrence instead of requiring a single exact match',
175
+ },
176
+ content: {
177
+ type: 'string',
178
+ description: 'Full note content to write',
179
+ },
180
+ createIfMissing: {
181
+ type: 'boolean',
182
+ description: 'Allow creating the note if it does not already exist when using content',
183
+ },
184
+ },
185
+ required: ['path'],
186
+ },
187
+ 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
+ });
195
+ },
196
+ };
197
+ }
198
+ export const listMemoryNotesTool = createListMemoryNotesTool();
199
+ export const readMemoryNoteTool = createReadMemoryNoteTool();
200
+ export const searchMemoryNotesTool = createSearchMemoryNotesTool();
201
+ export const editMemoryNoteTool = createEditMemoryNoteTool();
202
+ function resolveMemoryRoot(options) {
203
+ return resolve(options.memoryRoot ?? DEFAULT_MEMORY_ROOT);
204
+ }
205
+ function resolveMemoryPath(memoryRoot, requestedPath) {
206
+ if (!requestedPath.trim()) {
207
+ return { ok: false, error: `Memory note paths must be non-empty and stay inside ${memoryRoot}.` };
208
+ }
209
+ const targetPath = resolve(memoryRoot, requestedPath);
210
+ const rel = relative(memoryRoot, targetPath);
211
+ if (rel.startsWith('..') || isAbsolute(rel)) {
212
+ return { ok: false, error: `Memory note paths must stay inside ${memoryRoot}. Refusing to access ${targetPath}.` };
213
+ }
214
+ return { ok: true, path: targetPath };
215
+ }
216
+ async function listMarkdownNotes(root) {
217
+ const results = [];
218
+ const entries = await readdir(root, { withFileTypes: true });
219
+ for (const entry of entries) {
220
+ const nextPath = resolve(root, entry.name);
221
+ if (entry.isDirectory()) {
222
+ results.push(...await listMarkdownNotes(nextPath));
223
+ continue;
224
+ }
225
+ if (entry.isFile() && isMarkdownPath(nextPath)) {
226
+ results.push(nextPath);
227
+ }
228
+ }
229
+ return results.sort();
230
+ }
231
+ function pageText(content, offset, maxLines) {
232
+ const lines = content.split('\n');
233
+ const start = offset && offset > 0 ? Math.floor(offset) : 0;
234
+ const end = maxLines && maxLines > 0 ? start + Math.floor(maxLines) : undefined;
235
+ if (start > 0 || end !== undefined) {
236
+ return lines.slice(start, end).join('\n');
237
+ }
238
+ return content;
239
+ }
240
+ function sanitizeMaxResults(value) {
241
+ if (!value || !Number.isFinite(value) || value <= 0) {
242
+ return DEFAULT_MAX_SEARCH_RESULTS;
243
+ }
244
+ return Math.min(Math.floor(value), DEFAULT_MAX_SEARCH_RESULTS);
245
+ }
246
+ function toMemoryRelativePath(memoryRoot, filePath) {
247
+ const rel = relative(memoryRoot, filePath);
248
+ return rel || '.';
249
+ }
250
+ function isMarkdownPath(path) {
251
+ return /\.md$/i.test(path);
252
+ }
253
+ async function pathExists(path) {
254
+ try {
255
+ await access(path);
256
+ return true;
257
+ }
258
+ catch {
259
+ return false;
260
+ }
261
+ }
262
+ function isListMemoryNotesInput(raw) {
263
+ if (raw === undefined) {
264
+ return true;
265
+ }
266
+ if (!raw || typeof raw !== 'object' || Array.isArray(raw)) {
267
+ return false;
268
+ }
269
+ const input = raw;
270
+ const keys = Object.keys(input);
271
+ if (keys.some((key) => key !== 'path')) {
272
+ return false;
273
+ }
274
+ return input.path === undefined || typeof input.path === 'string';
275
+ }
276
+ function isReadMemoryNoteInput(raw) {
277
+ if (!raw || typeof raw !== 'object' || Array.isArray(raw)) {
278
+ return false;
279
+ }
280
+ const input = raw;
281
+ const keys = Object.keys(input);
282
+ if (keys.some((key) => key !== 'path' && key !== 'maxLines' && key !== 'offset')) {
283
+ return false;
284
+ }
285
+ return (typeof input.path === 'string' &&
286
+ (input.maxLines === undefined || typeof input.maxLines === 'number') &&
287
+ (input.offset === undefined || typeof input.offset === 'number'));
288
+ }
289
+ function isSearchMemoryNotesInput(raw) {
290
+ if (!raw || typeof raw !== 'object' || Array.isArray(raw)) {
291
+ return false;
292
+ }
293
+ const input = raw;
294
+ const keys = Object.keys(input);
295
+ if (keys.some((key) => key !== 'query' && key !== 'path' && key !== 'maxResults')) {
296
+ return false;
297
+ }
298
+ return (typeof input.query === 'string' &&
299
+ input.query.trim().length > 0 &&
300
+ (input.path === undefined || typeof input.path === 'string') &&
301
+ (input.maxResults === undefined || typeof input.maxResults === 'number'));
302
+ }
303
+ function isErrorWithCode(error, code) {
304
+ return error instanceof Error && 'code' in error && error.code === code;
305
+ }
306
+ async function searchWithCli(memoryRoot, targetPath, query, maxResults) {
307
+ const relativeTarget = toMemoryRelativePath(memoryRoot, targetPath);
308
+ const normalizedTarget = relativeTarget === '.' ? '.' : relativeTarget;
309
+ const rgResult = await runSearchCommand('rg', ['-n', '--no-heading', '--glob', '*.md', query, normalizedTarget], memoryRoot);
310
+ if (rgResult.kind === 'ok') {
311
+ return {
312
+ ok: true,
313
+ output: trimSearchOutput(rgResult.stdout, maxResults),
314
+ };
315
+ }
316
+ if (rgResult.kind === 'nonzero_no_match') {
317
+ return { ok: true, output: 'No matches found.' };
318
+ }
319
+ if (rgResult.kind !== 'missing_binary') {
320
+ return {
321
+ ok: false,
322
+ error: `Failed to search memory notes in ${targetPath}: ${rgResult.error}`,
323
+ };
324
+ }
325
+ const grepResult = await runSearchCommand('grep', ['-R', '-n', '--include=*.md', query, normalizedTarget], memoryRoot);
326
+ if (grepResult.kind === 'ok') {
327
+ return {
328
+ ok: true,
329
+ output: trimSearchOutput(grepResult.stdout, maxResults),
330
+ };
331
+ }
332
+ if (grepResult.kind === 'nonzero_no_match') {
333
+ return { ok: true, output: 'No matches found.' };
334
+ }
335
+ return {
336
+ ok: false,
337
+ error: `Failed to search memory notes in ${targetPath}: ${grepResult.error}`,
338
+ };
339
+ }
340
+ function trimSearchOutput(stdout, maxResults) {
341
+ const lines = stdout
342
+ .split('\n')
343
+ .map((line) => line.trimEnd().replace(/^\.\//, ''))
344
+ .filter((line) => line.length > 0)
345
+ .slice(0, maxResults);
346
+ return lines.length > 0 ? lines.join('\n') : 'No matches found.';
347
+ }
348
+ async function runSearchCommand(binary, args, cwd) {
349
+ return new Promise((resolvePromise) => {
350
+ const child = spawn(binary, args, {
351
+ cwd,
352
+ stdio: ['ignore', 'pipe', 'pipe'],
353
+ });
354
+ let stdout = '';
355
+ let stderr = '';
356
+ child.stdout.on('data', (chunk) => {
357
+ stdout += chunk.toString();
358
+ });
359
+ child.stderr.on('data', (chunk) => {
360
+ stderr += chunk.toString();
361
+ });
362
+ child.on('error', (error) => {
363
+ if ('code' in error && error.code === 'ENOENT') {
364
+ resolvePromise({ kind: 'missing_binary', error: `${binary} is not available in the environment.` });
365
+ return;
366
+ }
367
+ resolvePromise({ kind: 'error', error: error.message });
368
+ });
369
+ child.on('close', (code) => {
370
+ if (code === 0) {
371
+ resolvePromise({ kind: 'ok', stdout });
372
+ return;
373
+ }
374
+ if (code === 1) {
375
+ resolvePromise({ kind: 'nonzero_no_match', error: stderr.trim() || `${binary} returned exit code 1` });
376
+ return;
377
+ }
378
+ resolvePromise({ kind: 'error', error: stderr.trim() || `${binary} returned exit code ${code ?? 'unknown'}` });
379
+ });
380
+ });
381
+ }
382
+ //# sourceMappingURL=memory-notes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-notes.js","sourceRoot":"","sources":["../../../src/tools/memory-notes.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@roackb2/heddle",
3
- "version": "0.0.4",
3
+ "version": "0.0.6",
4
4
  "description": "An open-source terminal coding agent runtime and CLI with OpenAI and Anthropic support",
5
5
  "author": "Jay / Fienna Liang <roackb2@gmail.com>",
6
6
  "license": "MIT",