daedalus-cli 0.4.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 (144) hide show
  1. package/Daedalus.bat +18 -0
  2. package/LICENSE +21 -0
  3. package/README.md +254 -0
  4. package/dist/agents/agent.d.ts +10 -0
  5. package/dist/agents/agent.d.ts.map +1 -0
  6. package/dist/agents/agent.js +3 -0
  7. package/dist/agents/agent.js.map +1 -0
  8. package/dist/agents/orchestrator.d.ts +18 -0
  9. package/dist/agents/orchestrator.d.ts.map +1 -0
  10. package/dist/agents/orchestrator.js +171 -0
  11. package/dist/agents/orchestrator.js.map +1 -0
  12. package/dist/agents/roles.d.ts +14 -0
  13. package/dist/agents/roles.d.ts.map +1 -0
  14. package/dist/agents/roles.js +126 -0
  15. package/dist/agents/roles.js.map +1 -0
  16. package/dist/config/index.d.ts +485 -0
  17. package/dist/config/index.d.ts.map +1 -0
  18. package/dist/config/index.js +237 -0
  19. package/dist/config/index.js.map +1 -0
  20. package/dist/highlight.d.ts +4 -0
  21. package/dist/highlight.d.ts.map +1 -0
  22. package/dist/highlight.js +42 -0
  23. package/dist/highlight.js.map +1 -0
  24. package/dist/index.d.ts +3 -0
  25. package/dist/index.d.ts.map +1 -0
  26. package/dist/index.js +1386 -0
  27. package/dist/index.js.map +1 -0
  28. package/dist/indexing/fts.d.ts +40 -0
  29. package/dist/indexing/fts.d.ts.map +1 -0
  30. package/dist/indexing/fts.js +121 -0
  31. package/dist/indexing/fts.js.map +1 -0
  32. package/dist/indexing/indexer.d.ts +22 -0
  33. package/dist/indexing/indexer.d.ts.map +1 -0
  34. package/dist/indexing/indexer.js +518 -0
  35. package/dist/indexing/indexer.js.map +1 -0
  36. package/dist/onboarding/wizard.d.ts +2 -0
  37. package/dist/onboarding/wizard.d.ts.map +1 -0
  38. package/dist/onboarding/wizard.js +231 -0
  39. package/dist/onboarding/wizard.js.map +1 -0
  40. package/dist/router/health.d.ts +6 -0
  41. package/dist/router/health.d.ts.map +1 -0
  42. package/dist/router/health.js +74 -0
  43. package/dist/router/health.js.map +1 -0
  44. package/dist/router/index.d.ts +33 -0
  45. package/dist/router/index.d.ts.map +1 -0
  46. package/dist/router/index.js +214 -0
  47. package/dist/router/index.js.map +1 -0
  48. package/dist/router/rate-limiter.d.ts +7 -0
  49. package/dist/router/rate-limiter.d.ts.map +1 -0
  50. package/dist/router/rate-limiter.js +36 -0
  51. package/dist/router/rate-limiter.js.map +1 -0
  52. package/dist/router/types.d.ts +81 -0
  53. package/dist/router/types.d.ts.map +1 -0
  54. package/dist/router/types.js +3 -0
  55. package/dist/router/types.js.map +1 -0
  56. package/dist/session/jsonl.d.ts +20 -0
  57. package/dist/session/jsonl.d.ts.map +1 -0
  58. package/dist/session/jsonl.js +61 -0
  59. package/dist/session/jsonl.js.map +1 -0
  60. package/dist/session/manager.d.ts +42 -0
  61. package/dist/session/manager.d.ts.map +1 -0
  62. package/dist/session/manager.js +184 -0
  63. package/dist/session/manager.js.map +1 -0
  64. package/dist/session/memory.d.ts +23 -0
  65. package/dist/session/memory.d.ts.map +1 -0
  66. package/dist/session/memory.js +88 -0
  67. package/dist/session/memory.js.map +1 -0
  68. package/dist/session/sqlite.d.ts +59 -0
  69. package/dist/session/sqlite.d.ts.map +1 -0
  70. package/dist/session/sqlite.js +174 -0
  71. package/dist/session/sqlite.js.map +1 -0
  72. package/dist/tools/builtin/delegation.d.ts +17 -0
  73. package/dist/tools/builtin/delegation.d.ts.map +1 -0
  74. package/dist/tools/builtin/delegation.js +85 -0
  75. package/dist/tools/builtin/delegation.js.map +1 -0
  76. package/dist/tools/builtin/diff-ui.d.ts +21 -0
  77. package/dist/tools/builtin/diff-ui.d.ts.map +1 -0
  78. package/dist/tools/builtin/diff-ui.js +211 -0
  79. package/dist/tools/builtin/diff-ui.js.map +1 -0
  80. package/dist/tools/builtin/files.d.ts +29 -0
  81. package/dist/tools/builtin/files.d.ts.map +1 -0
  82. package/dist/tools/builtin/files.js +286 -0
  83. package/dist/tools/builtin/files.js.map +1 -0
  84. package/dist/tools/builtin/git.d.ts +7 -0
  85. package/dist/tools/builtin/git.d.ts.map +1 -0
  86. package/dist/tools/builtin/git.js +11 -0
  87. package/dist/tools/builtin/git.js.map +1 -0
  88. package/dist/tools/builtin/indexing.d.ts +22 -0
  89. package/dist/tools/builtin/indexing.d.ts.map +1 -0
  90. package/dist/tools/builtin/indexing.js +159 -0
  91. package/dist/tools/builtin/indexing.js.map +1 -0
  92. package/dist/tools/builtin/project-config.d.ts +17 -0
  93. package/dist/tools/builtin/project-config.d.ts.map +1 -0
  94. package/dist/tools/builtin/project-config.js +66 -0
  95. package/dist/tools/builtin/project-config.js.map +1 -0
  96. package/dist/tools/builtin/terminal.d.ts +7 -0
  97. package/dist/tools/builtin/terminal.d.ts.map +1 -0
  98. package/dist/tools/builtin/terminal.js +99 -0
  99. package/dist/tools/builtin/terminal.js.map +1 -0
  100. package/dist/tools/builtin/todo.d.ts +20 -0
  101. package/dist/tools/builtin/todo.d.ts.map +1 -0
  102. package/dist/tools/builtin/todo.js +36 -0
  103. package/dist/tools/builtin/todo.js.map +1 -0
  104. package/dist/tools/builtin/web.d.ts +10 -0
  105. package/dist/tools/builtin/web.d.ts.map +1 -0
  106. package/dist/tools/builtin/web.js +67 -0
  107. package/dist/tools/builtin/web.js.map +1 -0
  108. package/dist/tools/daedalus-spinner.d.ts +29 -0
  109. package/dist/tools/daedalus-spinner.d.ts.map +1 -0
  110. package/dist/tools/daedalus-spinner.js +77 -0
  111. package/dist/tools/daedalus-spinner.js.map +1 -0
  112. package/dist/tools/definitions.d.ts +5 -0
  113. package/dist/tools/definitions.d.ts.map +1 -0
  114. package/dist/tools/definitions.js +296 -0
  115. package/dist/tools/definitions.js.map +1 -0
  116. package/dist/tools/executor.d.ts +4 -0
  117. package/dist/tools/executor.d.ts.map +1 -0
  118. package/dist/tools/executor.js +86 -0
  119. package/dist/tools/executor.js.map +1 -0
  120. package/dist/tools/mcp/http.d.ts +23 -0
  121. package/dist/tools/mcp/http.d.ts.map +1 -0
  122. package/dist/tools/mcp/http.js +200 -0
  123. package/dist/tools/mcp/http.js.map +1 -0
  124. package/dist/tools/mcp/registry.d.ts +16 -0
  125. package/dist/tools/mcp/registry.d.ts.map +1 -0
  126. package/dist/tools/mcp/registry.js +92 -0
  127. package/dist/tools/mcp/registry.js.map +1 -0
  128. package/dist/tools/mcp/stdio.d.ts +26 -0
  129. package/dist/tools/mcp/stdio.d.ts.map +1 -0
  130. package/dist/tools/mcp/stdio.js +157 -0
  131. package/dist/tools/mcp/stdio.js.map +1 -0
  132. package/dist/tools/mcp/tool-executor.d.ts +3 -0
  133. package/dist/tools/mcp/tool-executor.d.ts.map +1 -0
  134. package/dist/tools/mcp/tool-executor.js +23 -0
  135. package/dist/tools/mcp/tool-executor.js.map +1 -0
  136. package/dist/tools/mcp/types.d.ts +26 -0
  137. package/dist/tools/mcp/types.d.ts.map +1 -0
  138. package/dist/tools/mcp/types.js +3 -0
  139. package/dist/tools/mcp/types.js.map +1 -0
  140. package/dist/types.d.ts +58 -0
  141. package/dist/types.d.ts.map +1 -0
  142. package/dist/types.js +3 -0
  143. package/dist/types.js.map +1 -0
  144. package/package.json +63 -0
@@ -0,0 +1,286 @@
1
+ // File operation tools
2
+ import fs from 'fs';
3
+ import path from 'path';
4
+ import { fileURLToPath } from 'url';
5
+ import { execSync } from 'child_process';
6
+ import { runDiffWorkflow } from './diff-ui.js';
7
+ /** Ask the user a yes/no/all/skip question — writes to stdout, reads one line from stdin. */
8
+ function askUser(question) {
9
+ return new Promise((resolve) => {
10
+ process.stdout.write(question);
11
+ const onData = (chunk) => {
12
+ const text = chunk.toString('utf8');
13
+ // Handle backspace, enter, etc. — just take the first line
14
+ const line = text.replace(/\r?\n/g, '').trim().toLowerCase();
15
+ if (line) {
16
+ process.stdin.off('data', onData);
17
+ resolve(line);
18
+ }
19
+ };
20
+ process.stdin.on('data', onData);
21
+ // Resume stdin if paused (e.g. after spinner stopped)
22
+ if (process.stdin.isPaused())
23
+ process.stdin.resume();
24
+ });
25
+ }
26
+ const __filename = fileURLToPath(import.meta.url);
27
+ const __dirname = path.dirname(__filename);
28
+ function resolvePath(p, projectRoot) {
29
+ if (path.isAbsolute(p))
30
+ return p;
31
+ return path.resolve(projectRoot, p);
32
+ }
33
+ function formatError(error, toolCallId = '', name = '') {
34
+ return { toolCallId, name, success: false, content: '', error };
35
+ }
36
+ export async function readFile(args, context) {
37
+ try {
38
+ const targetPath = resolvePath(args.path, context.projectRoot);
39
+ const offset = args.offset ?? 1;
40
+ const limit = args.limit ?? 1000;
41
+ if (!fs.existsSync(targetPath)) {
42
+ return formatError(`File not found: ${args.path}`);
43
+ }
44
+ const content = fs.readFileSync(targetPath, 'utf8');
45
+ const lines = content.split('\n');
46
+ const totalLines = lines.length;
47
+ const start = Math.max(0, offset - 1);
48
+ const end = Math.min(totalLines, start + limit);
49
+ const selected = lines.slice(start, end);
50
+ let output = '';
51
+ for (let i = 0; i < selected.length; i++) {
52
+ output += `${start + i + 1}|${selected[i]}\n`;
53
+ }
54
+ if (end < totalLines) {
55
+ output += `... [${totalLines - end} more lines]`;
56
+ }
57
+ return { toolCallId: '', name: 'read_file', success: true, content: output };
58
+ }
59
+ catch (err) {
60
+ return formatError(`Failed to read file: ${err.message}`);
61
+ }
62
+ }
63
+ export async function writeFile(args, context) {
64
+ try {
65
+ const targetPath = resolvePath(args.path, context.projectRoot);
66
+ const dir = path.dirname(targetPath);
67
+ if (!fs.existsSync(dir)) {
68
+ fs.mkdirSync(dir, { recursive: true });
69
+ }
70
+ fs.writeFileSync(targetPath, args.content, 'utf8');
71
+ return { toolCallId: '', name: 'write_file', success: true, content: `Written ${args.content.length} chars to ${args.path}` };
72
+ }
73
+ catch (err) {
74
+ return formatError(`Failed to write file: ${err.message}`);
75
+ }
76
+ }
77
+ export async function patchFile(args, context) {
78
+ try {
79
+ const targetPath = resolvePath(args.path, context.projectRoot);
80
+ if (!fs.existsSync(targetPath)) {
81
+ return formatError(`File not found: ${args.path}`);
82
+ }
83
+ const rawContent = fs.readFileSync(targetPath, 'utf8');
84
+ const hasCRLF = rawContent.includes('\r\n');
85
+ const content = hasCRLF ? rawContent.replace(/\r\n/g, '\n') : rawContent;
86
+ const oldStr = args.old_string.replace(/\r\n/g, '\n');
87
+ const newStr = (args.new_string ?? '').replace(/\r\n/g, '\n');
88
+ const replaceAll = args.replace_all ?? false;
89
+ let patched;
90
+ if (replaceAll) {
91
+ if (!content.includes(oldStr)) {
92
+ return formatError(`Old string not found in file (checked with CRLF normalization)`);
93
+ }
94
+ patched = content.split(oldStr).join(newStr);
95
+ }
96
+ else {
97
+ const idx = content.indexOf(oldStr);
98
+ if (idx === -1) {
99
+ const fileLines = content.split('\n').length;
100
+ return formatError(`Old string not found in ${args.path} (${fileLines} lines, CRLF normalized). ` +
101
+ `Tip: use read_file to verify exact whitespace/indentation before patching.`);
102
+ }
103
+ const secondIdx = content.indexOf(oldStr, idx + oldStr.length);
104
+ if (secondIdx !== -1) {
105
+ return formatError(`Old string matches multiple locations; use replace_all: true or add more surrounding context`);
106
+ }
107
+ patched = content.slice(0, idx) + newStr + content.slice(idx + oldStr.length);
108
+ }
109
+ const finalNormalized = hasCRLF ? patched.replace(/\r\n/g, '\n').replace(/\n/g, '\r\n') : patched;
110
+ const autoApply = context.autoApplyEdits ?? 'prompt';
111
+ if (autoApply === 'skip') {
112
+ return {
113
+ toolCallId: '',
114
+ name: 'patch',
115
+ success: true,
116
+ content: `PATCH_AUTO_SKIPPED: ${args.path} — dry-run mode active. Change NOT written.`,
117
+ };
118
+ }
119
+ if (autoApply === 'all') {
120
+ fs.writeFileSync(targetPath, finalNormalized, 'utf8');
121
+ if (context.patchHistory) {
122
+ context.patchHistory.push({
123
+ filePath: targetPath,
124
+ oldContent: content,
125
+ newContent: finalNormalized,
126
+ timestamp: Date.now(),
127
+ description: args.old_string.split('\n')[0].slice(0, 60),
128
+ });
129
+ }
130
+ return { toolCallId: '', name: 'patch', success: true, content: `Patched ${args.path}${hasCRLF ? ' (CRLF preserved)' : ''}` };
131
+ }
132
+ // Show interactive diff via diff-ui
133
+ const diffOpts = {
134
+ filePath: args.path,
135
+ oldContent: content,
136
+ newContent: finalNormalized,
137
+ autoApply,
138
+ };
139
+ const diffResult = await runDiffWorkflow(diffOpts, autoApply, context);
140
+ if (diffResult.decision === 'no' || diffResult.decision === 'skip') {
141
+ return {
142
+ toolCallId: '',
143
+ name: 'patch',
144
+ success: false,
145
+ content: '',
146
+ error: `PATCH_DECLINED: User chose not to apply changes to ${args.path}. Do NOT retry the same patch.`,
147
+ };
148
+ }
149
+ const writeContent = diffResult.editedContent
150
+ ? (hasCRLF ? diffResult.editedContent.replace(/\n/g, '\r\n') : diffResult.editedContent)
151
+ : finalNormalized;
152
+ fs.writeFileSync(targetPath, writeContent, 'utf8');
153
+ if (diffResult.decision === 'all') {
154
+ context.autoApplyEdits = 'all';
155
+ }
156
+ if (context.patchHistory) {
157
+ context.patchHistory.push({
158
+ filePath: targetPath,
159
+ oldContent: content,
160
+ newContent: writeContent,
161
+ timestamp: Date.now(),
162
+ description: args.old_string.split('\n')[0].slice(0, 60),
163
+ });
164
+ }
165
+ return { toolCallId: '', name: 'patch', success: true, content: `Patched ${args.path}${hasCRLF ? ' (CRLF preserved)' : ''}` };
166
+ }
167
+ catch (err) {
168
+ return formatError(`Failed to patch file: ${err.message}`);
169
+ }
170
+ }
171
+ function rgAvailable() {
172
+ try {
173
+ execSync('rg --version', { stdio: 'ignore' });
174
+ return true;
175
+ }
176
+ catch {
177
+ return false;
178
+ }
179
+ }
180
+ function nativeGrep(dir, pattern, fileGlob, limit = 50) {
181
+ const regex = new RegExp(pattern, 'i');
182
+ const results = [];
183
+ const walk = (d, depth = 0) => {
184
+ if (depth > 8 || results.length >= limit)
185
+ return;
186
+ try {
187
+ const entries = fs.readdirSync(d, { withFileTypes: true });
188
+ for (const e of entries) {
189
+ if (results.length >= limit)
190
+ break;
191
+ const full = path.join(d, e.name);
192
+ if (e.isDirectory()) {
193
+ if (e.name !== '.' && e.name !== '..' && e.name !== 'node_modules' && e.name !== '.git')
194
+ walk(full, depth + 1);
195
+ }
196
+ else if (e.isFile()) {
197
+ if (fileGlob && !e.name.endsWith(fileGlob.replace('*', '')))
198
+ continue;
199
+ try {
200
+ const content = fs.readFileSync(full, 'utf8');
201
+ const lines = content.split('\n');
202
+ for (let i = 0; i < lines.length; i++) {
203
+ if (regex.test(lines[i]))
204
+ results.push(`${full}:${i + 1}:${lines[i].trim().slice(0, 200)}`);
205
+ }
206
+ }
207
+ catch { }
208
+ }
209
+ }
210
+ }
211
+ catch { }
212
+ };
213
+ walk(dir);
214
+ return results.slice(0, limit);
215
+ }
216
+ export async function searchFiles(args, context) {
217
+ try {
218
+ const searchPath = args.path ? resolvePath(args.path, context.projectRoot) : context.projectRoot;
219
+ const target = args.target ?? 'content';
220
+ const limit = args.limit ?? 50;
221
+ if (target === 'files') {
222
+ // File name search — use walkDir (native)
223
+ const files = walkDir(searchPath, 8, args.pattern);
224
+ const content = files.slice(0, limit).sort().join('\n');
225
+ return { toolCallId: '', name: 'search_files', success: true, content: content || '(no matches)' };
226
+ }
227
+ // Content search — try ripgrep first, fall back to native
228
+ if (rgAvailable()) {
229
+ let cmd = `rg --no-heading --line-number --color=never `;
230
+ cmd += JSON.stringify(args.pattern);
231
+ if (args.file_glob)
232
+ cmd += ` --glob ${JSON.stringify(args.file_glob)}`;
233
+ cmd += ` ${JSON.stringify(searchPath)} | head -n ${limit}`;
234
+ const { execute: terminalExecute } = await import('./terminal.js');
235
+ const result = await terminalExecute({ command: cmd, timeout: 30, workdir: context.projectRoot }, context);
236
+ return { toolCallId: '', name: 'search_files', success: result.success, content: result.content || '(no matches)', error: result.error };
237
+ }
238
+ // Native fallback
239
+ const matches = nativeGrep(searchPath, args.pattern, args.file_glob, limit);
240
+ return { toolCallId: '', name: 'search_files', success: true, content: matches.length > 0 ? matches.join('\n') : '(no matches)' };
241
+ }
242
+ catch (err) {
243
+ return formatError(`Search failed: ${err.message}`);
244
+ }
245
+ }
246
+ function walkDir(dir, maxDepth, pattern, _currentDepth = 0) {
247
+ if (_currentDepth > maxDepth)
248
+ return [];
249
+ const results = [];
250
+ try {
251
+ const entries = fs.readdirSync(dir, { withFileTypes: true });
252
+ for (const entry of entries) {
253
+ const fullPath = path.join(dir, entry.name);
254
+ if (entry.isDirectory()) {
255
+ if (entry.name === '.' || entry.name === '..')
256
+ continue;
257
+ results.push(...walkDir(fullPath, maxDepth, pattern, _currentDepth + 1));
258
+ }
259
+ else if (entry.isFile()) {
260
+ if (!pattern || entry.name.endsWith(pattern.replace('*', ''))) {
261
+ results.push(fullPath);
262
+ }
263
+ }
264
+ }
265
+ }
266
+ catch {
267
+ // skip unreadable
268
+ }
269
+ return results;
270
+ }
271
+ export async function listFiles(args, context) {
272
+ try {
273
+ const targetPath = args.path ? resolvePath(args.path, context.projectRoot) : context.projectRoot;
274
+ const depth = args.depth ?? 3;
275
+ const glob = args.glob;
276
+ const files = walkDir(targetPath, depth, glob);
277
+ const content = files.length > 0
278
+ ? files.sort().join('\n')
279
+ : '(empty)';
280
+ return { toolCallId: '', name: 'list_files', success: true, content };
281
+ }
282
+ catch (err) {
283
+ return formatError(`List files failed: ${err.message}`);
284
+ }
285
+ }
286
+ //# sourceMappingURL=files.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"files.js","sourceRoot":"","sources":["../../../src/tools/builtin/files.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { ToolContext, ToolResult } from '../../types.js';
2
+ export declare function diff(args: {
3
+ staged?: boolean;
4
+ path?: string;
5
+ }, context: ToolContext): Promise<ToolResult>;
6
+ export declare function status(args: Record<string, never>, context: ToolContext): Promise<ToolResult>;
7
+ //# sourceMappingURL=git.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../../src/tools/builtin/git.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAGzD,wBAAsB,IAAI,CAAC,IAAI,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAI/G;AAED,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAEnG"}
@@ -0,0 +1,11 @@
1
+ // Git tools
2
+ import { execute } from './terminal.js';
3
+ export async function diff(args, context) {
4
+ const staged = args.staged ? '--staged' : '';
5
+ const pathArg = args.path ? ` -- ${args.path}` : '';
6
+ return execute({ command: `git diff ${staged}${pathArg}`, timeout: 30, workdir: context.projectRoot }, context);
7
+ }
8
+ export async function status(args, context) {
9
+ return execute({ command: 'git status --porcelain', timeout: 10, workdir: context.projectRoot }, context);
10
+ }
11
+ //# sourceMappingURL=git.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git.js","sourceRoot":"","sources":["../../../src/tools/builtin/git.ts"],"names":[],"mappings":"AAAA,YAAY;AAGZ,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,IAAyC,EAAE,OAAoB;IACxF,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACpD,OAAO,OAAO,CAAC,EAAE,OAAO,EAAE,YAAY,MAAM,GAAG,OAAO,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,WAAW,EAAE,EAAE,OAAO,CAAC,CAAC;AAClH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,IAA2B,EAAE,OAAoB;IAC5E,OAAO,OAAO,CAAC,EAAE,OAAO,EAAE,wBAAwB,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,WAAW,EAAE,EAAE,OAAO,CAAC,CAAC;AAC5G,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { ToolContext, ToolResult } from '../../types.js';
2
+ export declare function getProjectHash(projectRoot: string): string;
3
+ export declare function getIndexDbPath(projectRoot: string): string;
4
+ /** Crawl and index the codebase. Respects incremental hashing — only re-indexes changed files. */
5
+ export declare function index_codebase(args: {
6
+ exclude?: string[];
7
+ extensions?: string[];
8
+ }, context: ToolContext): Promise<ToolResult>;
9
+ /** Fuzzy-search symbols (functions, classes, types, interfaces) using FTS5. */
10
+ export declare function find_symbol(args: {
11
+ query: string;
12
+ limit?: number;
13
+ }, context: ToolContext): Promise<ToolResult>;
14
+ /** Exact-name lookup — returns file, line range, and signature for a symbol. */
15
+ export declare function get_definition(args: {
16
+ name: string;
17
+ }, context: ToolContext): Promise<ToolResult>;
18
+ /** Returns every call-site that references a given symbol name. */
19
+ export declare function get_references(args: {
20
+ name: string;
21
+ }, context: ToolContext): Promise<ToolResult>;
22
+ //# sourceMappingURL=indexing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indexing.d.ts","sourceRoot":"","sources":["../../../src/tools/builtin/indexing.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAIzD,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAI1D;AAWD,kGAAkG;AAClG,wBAAsB,cAAc,CAClC,IAAI,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,EACnD,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC,CAkCrB;AAED,+EAA+E;AAC/E,wBAAsB,WAAW,CAC/B,IAAI,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,EACvC,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC,CAoCrB;AAED,gFAAgF;AAChF,wBAAsB,cAAc,CAClC,IAAI,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EACtB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC,CAsCrB;AAED,mEAAmE;AACnE,wBAAsB,cAAc,CAClC,IAAI,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EACtB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC,CA+BrB"}
@@ -0,0 +1,159 @@
1
+ // Codebase indexing tools — find_symbol, get_definition, get_references, index_codebase
2
+ // Uses a shared SQLite FTS5 database via context.indexDb (opened once in main).
3
+ import path from 'path';
4
+ import os from 'os';
5
+ import crypto from 'crypto';
6
+ import { initIndexDb, searchSymbols, findDefinitions, findReferences } from '../../indexing/fts.js';
7
+ import { indexCodebase } from '../../indexing/indexer.js';
8
+ // ── Shared DB helpers ──────────────────────────────────────────────────────────
9
+ export function getProjectHash(projectRoot) {
10
+ return crypto.createHash('sha256').update(path.resolve(projectRoot)).digest('hex').slice(0, 12);
11
+ }
12
+ export function getIndexDbPath(projectRoot) {
13
+ const homedir = os.homedir();
14
+ const projectHash = getProjectHash(projectRoot);
15
+ return path.join(homedir, '.daedalus', 'sessions', projectHash, 'index.sqlite');
16
+ }
17
+ /** Get or create the index DB — uses the shared context.indexDb when available. */
18
+ function getDb(context) {
19
+ if (context.indexDb)
20
+ return context.indexDb;
21
+ // Fallback: open a fresh connection (e.g. when called from a sub-agent)
22
+ return initIndexDb(getIndexDbPath(context.projectRoot));
23
+ }
24
+ // ── Tool implementations ───────────────────────────────────────────────────────
25
+ /** Crawl and index the codebase. Respects incremental hashing — only re-indexes changed files. */
26
+ export async function index_codebase(args, context) {
27
+ try {
28
+ const db = getDb(context);
29
+ // Mutate context so subsequent tool calls in this turn use the same open DB
30
+ if (!context.indexDb)
31
+ context.indexDb = db;
32
+ const projectHash = context.projectHash || getProjectHash(context.projectRoot);
33
+ const result = indexCodebase(db, context.projectRoot, projectHash, {
34
+ exclude: args.exclude,
35
+ extensions: args.extensions,
36
+ });
37
+ const errNote = result.errors.length > 0
38
+ ? `\n⚠ ${result.errors.length} file(s) had errors:\n${result.errors.slice(0, 5).map(e => ` • ${e}`).join('\n')}`
39
+ : '';
40
+ return {
41
+ toolCallId: '',
42
+ name: 'index_codebase',
43
+ success: true,
44
+ content: `✔ Indexed ${result.indexedFiles} file(s), skipped ${result.skippedFiles} unchanged ` +
45
+ `(${result.totalFiles} total scanned).${errNote}`,
46
+ };
47
+ }
48
+ catch (err) {
49
+ return {
50
+ toolCallId: '',
51
+ name: 'index_codebase',
52
+ success: false,
53
+ content: '',
54
+ error: `Failed to index codebase: ${err.message}`,
55
+ };
56
+ }
57
+ }
58
+ /** Fuzzy-search symbols (functions, classes, types, interfaces) using FTS5. */
59
+ export async function find_symbol(args, context) {
60
+ try {
61
+ const db = getDb(context);
62
+ const projectHash = context.projectHash || getProjectHash(context.projectRoot);
63
+ const limit = args.limit ?? 30;
64
+ const symbols = searchSymbols(db, args.query, projectHash, limit);
65
+ if (symbols.length === 0) {
66
+ return {
67
+ toolCallId: '',
68
+ name: 'find_symbol',
69
+ success: true,
70
+ content: `No symbols found matching "${args.query}". ` +
71
+ `Run index_codebase first if you haven't indexed this project yet.`,
72
+ };
73
+ }
74
+ const lines = symbols.map(s => ` [${s.kind.padEnd(9)}] ${s.name.padEnd(32)} ${s.file_path}:${s.line_start}–${s.line_end}\n ${s.signature}`);
75
+ return {
76
+ toolCallId: '',
77
+ name: 'find_symbol',
78
+ success: true,
79
+ content: `Found ${symbols.length} symbol(s) matching "${args.query}":\n\n${lines.join('\n\n')}`,
80
+ };
81
+ }
82
+ catch (err) {
83
+ return {
84
+ toolCallId: '',
85
+ name: 'find_symbol',
86
+ success: false,
87
+ content: '',
88
+ error: `Failed to search symbols: ${err.message}`,
89
+ };
90
+ }
91
+ }
92
+ /** Exact-name lookup — returns file, line range, and signature for a symbol. */
93
+ export async function get_definition(args, context) {
94
+ try {
95
+ const db = getDb(context);
96
+ const projectHash = context.projectHash || getProjectHash(context.projectRoot);
97
+ const defs = findDefinitions(db, args.name, projectHash);
98
+ if (defs.length === 0) {
99
+ return {
100
+ toolCallId: '',
101
+ name: 'get_definition',
102
+ success: true,
103
+ content: `No definition found for "${args.name}". ` +
104
+ `Try find_symbol for a fuzzy search, or run index_codebase to update the index.`,
105
+ };
106
+ }
107
+ const lines = defs.map(d => ` [${d.kind}] ${d.name}\n` +
108
+ ` File: ${d.file_path} lines ${d.line_start}–${d.line_end}\n` +
109
+ ` Signature: ${d.signature}`);
110
+ return {
111
+ toolCallId: '',
112
+ name: 'get_definition',
113
+ success: true,
114
+ content: `Definition(s) for "${args.name}":\n\n${lines.join('\n\n')}`,
115
+ };
116
+ }
117
+ catch (err) {
118
+ return {
119
+ toolCallId: '',
120
+ name: 'get_definition',
121
+ success: false,
122
+ content: '',
123
+ error: `Failed to find definitions: ${err.message}`,
124
+ };
125
+ }
126
+ }
127
+ /** Returns every call-site that references a given symbol name. */
128
+ export async function get_references(args, context) {
129
+ try {
130
+ const db = getDb(context);
131
+ const projectHash = context.projectHash || getProjectHash(context.projectRoot);
132
+ const refs = findReferences(db, args.name, projectHash);
133
+ if (refs.length === 0) {
134
+ return {
135
+ toolCallId: '',
136
+ name: 'get_references',
137
+ success: true,
138
+ content: `No references found for "${args.name}". The symbol may be unused or not yet indexed.`,
139
+ };
140
+ }
141
+ const lines = refs.map(r => ` • ${r.caller_name.padEnd(28)} ${r.caller_file}:${r.caller_line}`);
142
+ return {
143
+ toolCallId: '',
144
+ name: 'get_references',
145
+ success: true,
146
+ content: `${refs.length} reference(s) to "${args.name}":\n\n${lines.join('\n')}`,
147
+ };
148
+ }
149
+ catch (err) {
150
+ return {
151
+ toolCallId: '',
152
+ name: 'get_references',
153
+ success: false,
154
+ content: '',
155
+ error: `Failed to find references: ${err.message}`,
156
+ };
157
+ }
158
+ }
159
+ //# sourceMappingURL=indexing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indexing.js","sourceRoot":"","sources":["../../../src/tools/builtin/indexing.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ export interface ProjectConfig {
2
+ projectHash: string;
3
+ projectRoot: string;
4
+ testCommand?: string;
5
+ buildCommand?: string;
6
+ lintCommand?: string;
7
+ devCommand?: string;
8
+ autoRunTests?: boolean;
9
+ enableGitAutoCommit?: boolean;
10
+ updated_at: number;
11
+ }
12
+ export declare function loadProjectConfig(projectRoot: string): ProjectConfig;
13
+ export declare function saveProjectConfig(config: ProjectConfig): void;
14
+ export declare function getTestCommand(projectRoot: string): string | undefined;
15
+ export declare function setTestCommand(projectRoot: string, command: string): void;
16
+ export declare function getProjectConfig(projectRoot: string): ProjectConfig;
17
+ //# sourceMappingURL=project-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-config.d.ts","sourceRoot":"","sources":["../../../src/tools/builtin/project-config.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,UAAU,EAAE,MAAM,CAAC;CACpB;AAyBD,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,aAAa,CAmBpE;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAU7D;AAED,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAGtE;AAED,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAIzE;AAED,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,aAAa,CAEnE"}
@@ -0,0 +1,66 @@
1
+ // Project configuration for Daedalus
2
+ // Stores per-project settings like test commands, build commands, etc.
3
+ import fs from 'fs';
4
+ import path from 'path';
5
+ import os from 'os';
6
+ import crypto from 'crypto';
7
+ function getConfigDir() {
8
+ return path.join(os.homedir(), '.daedalus', 'config');
9
+ }
10
+ function getConfigPath(projectRoot) {
11
+ const projectHash = crypto.createHash('sha256').update(path.resolve(projectRoot)).digest('hex').slice(0, 12);
12
+ return path.join(getConfigDir(), `${projectHash}.json`);
13
+ }
14
+ function getDefaultConfig(projectRoot) {
15
+ return {
16
+ projectHash: crypto.createHash('sha256').update(path.resolve(projectRoot)).digest('hex').slice(0, 12),
17
+ projectRoot: path.resolve(projectRoot),
18
+ testCommand: undefined,
19
+ buildCommand: undefined,
20
+ lintCommand: undefined,
21
+ devCommand: undefined,
22
+ autoRunTests: true,
23
+ enableGitAutoCommit: false,
24
+ updated_at: Date.now(),
25
+ };
26
+ }
27
+ export function loadProjectConfig(projectRoot) {
28
+ const configPath = getConfigPath(projectRoot);
29
+ const dir = path.dirname(configPath);
30
+ if (!fs.existsSync(dir)) {
31
+ fs.mkdirSync(dir, { recursive: true });
32
+ }
33
+ if (!fs.existsSync(configPath)) {
34
+ return getDefaultConfig(projectRoot);
35
+ }
36
+ try {
37
+ const data = JSON.parse(fs.readFileSync(configPath, 'utf8'));
38
+ // Merge with defaults to ensure all fields exist
39
+ return { ...getDefaultConfig(projectRoot), ...data };
40
+ }
41
+ catch {
42
+ return getDefaultConfig(projectRoot);
43
+ }
44
+ }
45
+ export function saveProjectConfig(config) {
46
+ const configPath = getConfigPath(config.projectRoot);
47
+ const dir = path.dirname(configPath);
48
+ if (!fs.existsSync(dir)) {
49
+ fs.mkdirSync(dir, { recursive: true });
50
+ }
51
+ config.updated_at = Date.now();
52
+ fs.writeFileSync(configPath, JSON.stringify(config, null, 2), 'utf8');
53
+ }
54
+ export function getTestCommand(projectRoot) {
55
+ const config = loadProjectConfig(projectRoot);
56
+ return config.testCommand;
57
+ }
58
+ export function setTestCommand(projectRoot, command) {
59
+ const config = loadProjectConfig(projectRoot);
60
+ config.testCommand = command;
61
+ saveProjectConfig(config);
62
+ }
63
+ export function getProjectConfig(projectRoot) {
64
+ return loadProjectConfig(projectRoot);
65
+ }
66
+ //# sourceMappingURL=project-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-config.js","sourceRoot":"","sources":["../../../src/tools/builtin/project-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { ToolContext, ToolResult } from '../../types.js';
2
+ export declare function execute(args: {
3
+ command: string;
4
+ timeout?: number;
5
+ workdir?: string;
6
+ }, context: ToolContext): Promise<ToolResult>;
7
+ //# sourceMappingURL=terminal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal.d.ts","sourceRoot":"","sources":["../../../src/tools/builtin/terminal.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEzD,wBAAsB,OAAO,CAAC,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAoGtI"}