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,174 @@
1
+ // SQLite session database helpers for Daedalus
2
+ import Database from 'better-sqlite3';
3
+ import fs from 'fs';
4
+ import path from 'path';
5
+ /** Initialize the global sessions index database */
6
+ export function initIndexDb(dbPath) {
7
+ const dir = path.dirname(dbPath);
8
+ if (!fs.existsSync(dir)) {
9
+ fs.mkdirSync(dir, { recursive: true });
10
+ }
11
+ const db = new Database(dbPath);
12
+ db.exec(`
13
+ CREATE TABLE IF NOT EXISTS sessions (
14
+ id TEXT PRIMARY KEY,
15
+ project_path TEXT NOT NULL,
16
+ project_hash TEXT NOT NULL,
17
+ title TEXT NOT NULL,
18
+ created_at INTEGER NOT NULL,
19
+ updated_at INTEGER NOT NULL
20
+ );
21
+ CREATE INDEX IF NOT EXISTS idx_sessions_project_hash ON sessions(project_hash);
22
+ `);
23
+ return db;
24
+ }
25
+ /** Register a session in the global index */
26
+ export function registerSession(db, meta) {
27
+ db.prepare(`
28
+ INSERT INTO sessions (id, project_path, project_hash, title, created_at, updated_at)
29
+ VALUES (?, ?, ?, ?, ?, ?)
30
+ ON CONFLICT(id) DO UPDATE SET
31
+ title = excluded.title,
32
+ updated_at = excluded.updated_at
33
+ `).run(meta.id, meta.project_path, meta.project_hash, meta.title, meta.created_at, meta.updated_at);
34
+ }
35
+ /** List all sessions for a specific project */
36
+ export function listSessionsForProject(db, projectHash) {
37
+ return db.prepare(`
38
+ SELECT id, project_path, project_hash, title, created_at, updated_at
39
+ FROM sessions
40
+ WHERE project_hash = ?
41
+ ORDER BY updated_at DESC
42
+ `).all(projectHash);
43
+ }
44
+ /** Delete a session from the index */
45
+ export function deleteSessionFromIndex(db, sessionId) {
46
+ db.prepare('DELETE FROM sessions WHERE id = ?').run(sessionId);
47
+ }
48
+ /** Initialize a specific session database */
49
+ export function initSessionDb(dbPath) {
50
+ const dir = path.dirname(dbPath);
51
+ if (!fs.existsSync(dir)) {
52
+ fs.mkdirSync(dir, { recursive: true });
53
+ }
54
+ const db = new Database(dbPath);
55
+ db.exec(`
56
+ CREATE TABLE IF NOT EXISTS turns (
57
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
58
+ role TEXT NOT NULL,
59
+ content TEXT NOT NULL,
60
+ tool_calls TEXT,
61
+ tool_call_id TEXT,
62
+ name TEXT,
63
+ model TEXT,
64
+ tokens_input INTEGER,
65
+ tokens_output INTEGER,
66
+ latency_ms INTEGER,
67
+ created_at INTEGER DEFAULT (strftime('%s','now')*1000)
68
+ );
69
+
70
+ CREATE TABLE IF NOT EXISTS agent_state (
71
+ key TEXT PRIMARY KEY,
72
+ value TEXT NOT NULL,
73
+ updated_at INTEGER NOT NULL
74
+ );
75
+
76
+ CREATE TABLE IF NOT EXISTS active_files (
77
+ path TEXT PRIMARY KEY,
78
+ alias TEXT NOT NULL,
79
+ added_at INTEGER NOT NULL
80
+ );
81
+
82
+ CREATE TABLE IF NOT EXISTS todos (
83
+ id TEXT PRIMARY KEY,
84
+ content TEXT NOT NULL,
85
+ status TEXT NOT NULL,
86
+ agent_role TEXT,
87
+ created_at INTEGER NOT NULL,
88
+ updated_at INTEGER NOT NULL
89
+ );
90
+ `);
91
+ return db;
92
+ }
93
+ /** Save a turn to the session database */
94
+ export function saveTurn(db, turn) {
95
+ db.prepare(`
96
+ INSERT INTO turns (role, content, tool_calls, tool_call_id, name, model, tokens_input, tokens_output, latency_ms)
97
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
98
+ `).run(turn.role, turn.content, turn.tool_calls || null, turn.tool_call_id || null, turn.name || null, turn.model || null, turn.tokens_input || null, turn.tokens_output || null, turn.latency_ms || null);
99
+ }
100
+ /** Get all turns from the session database */
101
+ export function getTurns(db) {
102
+ return db.prepare(`
103
+ SELECT id, role, content, tool_calls, tool_call_id, name, model, tokens_input, tokens_output, latency_ms, created_at
104
+ FROM turns
105
+ ORDER BY id ASC
106
+ `).all();
107
+ }
108
+ /** Clear all turns in the session database */
109
+ export function clearTurns(db) {
110
+ db.prepare('DELETE FROM turns').run();
111
+ }
112
+ /** Save active files context */
113
+ export function saveActiveFiles(db, files) {
114
+ db.transaction(() => {
115
+ db.prepare('DELETE FROM active_files').run();
116
+ const insert = db.prepare('INSERT INTO active_files (path, alias, added_at) VALUES (?, ?, ?)');
117
+ const now = Date.now();
118
+ for (const [absPath, alias] of files.entries()) {
119
+ insert.run(absPath, alias, now);
120
+ }
121
+ })();
122
+ }
123
+ /** Get active files context */
124
+ export function getActiveFiles(db) {
125
+ const rows = db.prepare('SELECT path, alias FROM active_files').all();
126
+ const map = new Map();
127
+ for (const r of rows) {
128
+ map.set(r.path, r.alias);
129
+ }
130
+ return map;
131
+ }
132
+ /** Save todos list */
133
+ export function saveTodos(db, todos) {
134
+ db.transaction(() => {
135
+ db.prepare('DELETE FROM todos').run();
136
+ const insert = db.prepare(`
137
+ INSERT INTO todos (id, content, status, agent_role, created_at, updated_at)
138
+ VALUES (?, ?, ?, ?, ?, ?)
139
+ `);
140
+ const now = Date.now();
141
+ for (const t of todos) {
142
+ insert.run(t.id, t.content, t.status, t.agent_role || null, t.created_at || now, t.updated_at || now);
143
+ }
144
+ })();
145
+ }
146
+ /** Get todos list */
147
+ export function getTodos(db) {
148
+ return db.prepare(`
149
+ SELECT id, content, status, agent_role, created_at, updated_at
150
+ FROM todos
151
+ ORDER BY created_at ASC
152
+ `).all();
153
+ }
154
+ /** Save state key-value */
155
+ export function saveState(db, key, val) {
156
+ db.prepare(`
157
+ INSERT INTO agent_state (key, value, updated_at)
158
+ VALUES (?, ?, ?)
159
+ ON CONFLICT(key) DO UPDATE SET value = excluded.value, updated_at = excluded.updated_at
160
+ `).run(key, JSON.stringify(val), Date.now());
161
+ }
162
+ /** Get state value */
163
+ export function getState(db, key) {
164
+ const row = db.prepare('SELECT value FROM agent_state WHERE key = ?').get(key);
165
+ if (!row)
166
+ return null;
167
+ try {
168
+ return JSON.parse(row.value);
169
+ }
170
+ catch {
171
+ return null;
172
+ }
173
+ }
174
+ //# sourceMappingURL=sqlite.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../../src/session/sqlite.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { ToolContext, ToolResult } from '../../types.js';
2
+ interface LocalRouter {
3
+ chat: {
4
+ completions: {
5
+ create(params: any): Promise<any>;
6
+ };
7
+ };
8
+ }
9
+ export declare function setRouterClient(client: LocalRouter): void;
10
+ export declare function manage(args: {
11
+ goal: string;
12
+ context?: string;
13
+ role?: string;
14
+ toolsets?: string[];
15
+ }, context: ToolContext): Promise<ToolResult>;
16
+ export {};
17
+ //# sourceMappingURL=delegation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delegation.d.ts","sourceRoot":"","sources":["../../../src/tools/builtin/delegation.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAKzD,UAAU,WAAW;IACnB,IAAI,EAAE;QACJ,WAAW,EAAE;YACX,MAAM,CAAC,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;SACnC,CAAC;KACH,CAAC;CACH;AAID,wBAAgB,eAAe,CAAC,MAAM,EAAE,WAAW,QAElD;AAED,wBAAsB,MAAM,CAAC,IAAI,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAoFpJ"}
@@ -0,0 +1,85 @@
1
+ // Delegation tool for spawning sub-agents
2
+ import { BUILTIN_TOOLS } from '../definitions.js';
3
+ import { executeToolCalls } from '../executor.js';
4
+ import { getAgentRole, filterToolsForRole } from '../../agents/roles.js';
5
+ let routerClient = null;
6
+ export function setRouterClient(client) {
7
+ routerClient = client;
8
+ }
9
+ export async function manage(args, context) {
10
+ if (!routerClient) {
11
+ return {
12
+ toolCallId: '',
13
+ name: 'delegate_task',
14
+ success: false,
15
+ content: '',
16
+ error: 'Router client not initialized for delegation',
17
+ };
18
+ }
19
+ try {
20
+ const role = args.role ?? 'coder';
21
+ const agentRole = getAgentRole(role);
22
+ const messages = [
23
+ { role: 'system', content: agentRole.systemPrompt },
24
+ { role: 'user', content: `${args.context ?? ''}\n\nTask: ${args.goal}` },
25
+ ];
26
+ const tools = filterToolsForRole(BUILTIN_TOOLS, role);
27
+ let turns = 0;
28
+ const maxTurns = 10;
29
+ while (turns < maxTurns) {
30
+ const completion = await routerClient.chat.completions.create({
31
+ model: 'auto',
32
+ messages,
33
+ temperature: 0.1,
34
+ tools,
35
+ tool_choice: 'auto',
36
+ });
37
+ const message = completion.choices[0].message;
38
+ messages.push(message);
39
+ if (message.tool_calls && message.tool_calls.length > 0) {
40
+ const subContext = {
41
+ ...context,
42
+ agentRole: role,
43
+ };
44
+ const results = await executeToolCalls(message.tool_calls.map((tc) => ({
45
+ id: tc.id,
46
+ type: 'function',
47
+ function: { name: tc.function.name, arguments: tc.function.arguments },
48
+ })), subContext);
49
+ for (const result of results) {
50
+ messages.push({
51
+ role: 'tool',
52
+ content: result.content,
53
+ tool_call_id: result.toolCallId,
54
+ });
55
+ }
56
+ turns++;
57
+ continue;
58
+ }
59
+ // Agent completed
60
+ return {
61
+ toolCallId: '',
62
+ name: 'delegate_task',
63
+ success: true,
64
+ content: message.content || 'Sub-agent completed',
65
+ };
66
+ }
67
+ return {
68
+ toolCallId: '',
69
+ name: 'delegate_task',
70
+ success: true,
71
+ content: 'Sub-agent reached max turns',
72
+ };
73
+ }
74
+ catch (err) {
75
+ return {
76
+ toolCallId: '',
77
+ name: 'delegate_task',
78
+ success: false,
79
+ content: '',
80
+ error: `Delegation failed: ${err.message}`,
81
+ };
82
+ }
83
+ }
84
+ // Role prompts and tool filtering are now centrally defined in agents/roles.ts.
85
+ //# sourceMappingURL=delegation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delegation.js","sourceRoot":"","sources":["../../../src/tools/builtin/delegation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { ToolContext } from '../../types.js';
2
+ export type DiffDecision = 'yes' | 'no' | 'all' | 'skip' | 'diff' | 'edit';
3
+ export interface DiffOptions {
4
+ filePath: string;
5
+ oldContent: string;
6
+ newContent: string;
7
+ autoApply?: 'prompt' | 'all' | 'skip';
8
+ }
9
+ export interface DiffResult {
10
+ decision: DiffDecision;
11
+ editedContent?: string;
12
+ }
13
+ /** Generate a colored unified diff */
14
+ export declare function generateUnifiedDiff(oldContent: string, newContent: string, filePath: string): string;
15
+ /** Show compact diff summary (for 'diff' option) */
16
+ export declare function generateDiffSummary(oldContent: string, newContent: string): string;
17
+ export declare function promptDiffDecision(options: DiffOptions, globalAutoApply?: 'prompt' | 'all' | 'skip', context?: ToolContext): Promise<DiffResult>;
18
+ /** Open editor for manual editing */
19
+ export declare function openEditor(content: string): Promise<string>;
20
+ export declare function runDiffWorkflow(options: DiffOptions, globalAutoApply?: 'prompt' | 'all' | 'skip', context?: ToolContext): Promise<DiffResult>;
21
+ //# sourceMappingURL=diff-ui.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diff-ui.d.ts","sourceRoot":"","sources":["../../../src/tools/builtin/diff-ui.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAE3E,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;CACvC;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,YAAY,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,sCAAsC;AACtC,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GACf,MAAM,CA6CR;AAED,oDAAoD;AACpD,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GACjB,MAAM,CAcR;AAED,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,WAAW,EACpB,eAAe,GAAE,QAAQ,GAAG,KAAK,GAAG,MAAiB,EACrD,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC,UAAU,CAAC,CA8DrB;AAED,qCAAqC;AACrC,wBAAsB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAwCjE;AAED,wBAAsB,eAAe,CACnC,OAAO,EAAE,WAAW,EACpB,eAAe,GAAE,QAAQ,GAAG,KAAK,GAAG,MAAiB,EACrD,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC,UAAU,CAAC,CA4CrB"}
@@ -0,0 +1,211 @@
1
+ // Interactive visual diff approval UI
2
+ // Shows unified diff with colors and prompts for y/n/a/s/e/d
3
+ import pc from 'picocolors';
4
+ import * as diff from 'diff';
5
+ /** Generate a colored unified diff */
6
+ export function generateUnifiedDiff(oldContent, newContent, filePath) {
7
+ const oldLines = oldContent.split('\n');
8
+ const newLines = newContent.split('\n');
9
+ const patches = diff.diffLines(oldContent, newContent);
10
+ let output = '';
11
+ output += pc.bold(pc.cyan(`\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n`));
12
+ output += pc.bold(pc.cyan(`\u2502 Proposed change to ${filePath.padEnd(55)} \u2502\n`));
13
+ output += pc.bold(pc.cyan(`\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n`));
14
+ let lineNumOld = 1;
15
+ let lineNumNew = 1;
16
+ for (const part of patches) {
17
+ if (part.added && part.removed) {
18
+ // This shouldn't happen with diffLines, but handle anyway
19
+ }
20
+ else if (part.added) {
21
+ const addedLines = part.value.split('\n');
22
+ for (const line of addedLines) {
23
+ if (line === '' && addedLines.indexOf(line) === addedLines.length - 1)
24
+ continue;
25
+ output += pc.green(`\u2502 + ${String(lineNumNew).padStart(4)} | ${line}\n`);
26
+ lineNumNew++;
27
+ }
28
+ }
29
+ else if (part.removed) {
30
+ const removedLines = part.value.split('\n');
31
+ for (const line of removedLines) {
32
+ if (line === '' && removedLines.indexOf(line) === removedLines.length - 1)
33
+ continue;
34
+ output += pc.red(`\u2502 - ${String(lineNumOld).padStart(4)} | ${line}\n`);
35
+ lineNumOld++;
36
+ }
37
+ }
38
+ else {
39
+ // Unchanged context
40
+ const contextLines = part.value.split('\n');
41
+ for (const line of contextLines) {
42
+ if (line === '' && contextLines.indexOf(line) === contextLines.length - 1)
43
+ continue;
44
+ output += pc.gray(`\u2502 ${String(lineNumOld).padStart(4)} | ${line}\n`);
45
+ lineNumOld++;
46
+ lineNumNew++;
47
+ }
48
+ }
49
+ }
50
+ output += pc.bold(pc.cyan(`\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n`));
51
+ return output;
52
+ }
53
+ /** Show compact diff summary (for 'diff' option) */
54
+ export function generateDiffSummary(oldContent, newContent) {
55
+ const patches = diff.diffLines(oldContent, newContent);
56
+ let added = 0;
57
+ let removed = 0;
58
+ for (const part of patches) {
59
+ if (part.added) {
60
+ added += part.value.split('\n').filter(l => l).length;
61
+ }
62
+ else if (part.removed) {
63
+ removed += part.value.split('\n').filter(l => l).length;
64
+ }
65
+ }
66
+ return `Lines: ${pc.green(`+${added}`)} ${pc.red(`-${removed}`)}`;
67
+ }
68
+ export async function promptDiffDecision(options, globalAutoApply = 'prompt', context) {
69
+ // Check if we are running as a sub-agent
70
+ const isSubAgent = context && context.agentRole !== 'main';
71
+ // Check global auto-apply setting
72
+ if (globalAutoApply === 'all' || isSubAgent) {
73
+ return { decision: 'yes' };
74
+ }
75
+ if (globalAutoApply === 'skip') {
76
+ return { decision: 'skip' };
77
+ }
78
+ // Non-interactive fallback: skip to avoid hanging
79
+ if (!process.stdin.isTTY) {
80
+ return { decision: 'skip' };
81
+ }
82
+ // Show the diff
83
+ const diffOutput = generateUnifiedDiff(options.oldContent, options.newContent, options.filePath);
84
+ process.stdout.write(diffOutput);
85
+ process.stdout.write(pc.bold(`\nApply? [y]es / [n]o / [a]ll / [s]kip / [d]iff / [e]dit: `));
86
+ return new Promise((resolve) => {
87
+ // Raw mode for single keypress
88
+ if (process.stdin.isTTY) {
89
+ process.stdin.setRawMode?.(true);
90
+ }
91
+ const onKey = (key) => {
92
+ const char = key.toString().toLowerCase();
93
+ let decision = null;
94
+ switch (char) {
95
+ case 'y':
96
+ decision = 'yes';
97
+ break;
98
+ case 'n':
99
+ decision = 'no';
100
+ break;
101
+ case 'a':
102
+ decision = 'all';
103
+ break;
104
+ case 's':
105
+ decision = 'skip';
106
+ break;
107
+ case 'd':
108
+ decision = 'diff';
109
+ break;
110
+ case 'e':
111
+ decision = 'edit';
112
+ break;
113
+ case '\u0003': // Ctrl+C
114
+ process.stdout.write('\n');
115
+ cleanup();
116
+ resolve({ decision: 'no' });
117
+ return;
118
+ }
119
+ if (decision) {
120
+ process.stdout.write(`${char.toUpperCase()}\n`);
121
+ cleanup();
122
+ resolve({ decision });
123
+ }
124
+ };
125
+ process.stdin.on('data', onKey);
126
+ function cleanup() {
127
+ process.stdin.off('data', onKey);
128
+ if (process.stdin.isTTY) {
129
+ process.stdin.setRawMode?.(false);
130
+ }
131
+ }
132
+ });
133
+ }
134
+ /** Open editor for manual editing */
135
+ export async function openEditor(content) {
136
+ const os = await import('os');
137
+ const fs = await import('fs');
138
+ const path = await import('path');
139
+ const { spawn } = await import('child_process');
140
+ // Create temp file
141
+ const tmpDir = os.tmpdir();
142
+ const tmpFile = path.join(tmpDir, `daedalus-edit-${Date.now()}.tmp`);
143
+ fs.writeFileSync(tmpFile, content, 'utf8');
144
+ // Determine editor
145
+ const editor = process.env.EDITOR || process.env.VISUAL || (process.platform === 'win32' ? 'notepad' : 'nano');
146
+ return new Promise((resolve, reject) => {
147
+ const child = spawn(editor, [tmpFile], {
148
+ stdio: 'inherit',
149
+ shell: true,
150
+ });
151
+ child.on('close', (code) => {
152
+ if (code === 0) {
153
+ try {
154
+ const edited = fs.readFileSync(tmpFile, 'utf8');
155
+ fs.unlinkSync(tmpFile);
156
+ resolve(edited);
157
+ }
158
+ catch (err) {
159
+ reject(err);
160
+ }
161
+ }
162
+ else {
163
+ fs.unlinkSync(tmpFile);
164
+ reject(new Error(`Editor exited with code ${code}`));
165
+ }
166
+ });
167
+ child.on('error', (err) => {
168
+ fs.unlinkSync(tmpFile);
169
+ reject(err);
170
+ });
171
+ });
172
+ }
173
+ export async function runDiffWorkflow(options, globalAutoApply = 'prompt', context) {
174
+ let currentContent = options.newContent;
175
+ try {
176
+ context?.pauseSpinner?.();
177
+ while (true) {
178
+ const result = await promptDiffDecision({ ...options, newContent: currentContent }, globalAutoApply, context);
179
+ if (result.decision === 'edit') {
180
+ try {
181
+ const edited = await openEditor(currentContent);
182
+ if (edited !== currentContent) {
183
+ currentContent = edited;
184
+ process.stdout.write(pc.green('\u2713 Edit saved. Showing updated diff...\n'));
185
+ continue; // Re-show diff with edited content
186
+ }
187
+ // No change, re-prompt
188
+ continue;
189
+ }
190
+ catch (err) {
191
+ process.stdout.write(pc.red(`\u26a0 Editor error: ${err.message}\n`));
192
+ continue;
193
+ }
194
+ }
195
+ if (result.decision === 'diff') {
196
+ // Show detailed diff summary
197
+ process.stdout.write(`\n${generateDiffSummary(options.oldContent, currentContent)}\n`);
198
+ continue; // Re-prompt
199
+ }
200
+ // For yes/no/all/skip, return with potentially edited content
201
+ return {
202
+ decision: result.decision,
203
+ editedContent: currentContent !== options.newContent ? currentContent : undefined,
204
+ };
205
+ }
206
+ }
207
+ finally {
208
+ context?.resumeSpinner?.();
209
+ }
210
+ }
211
+ //# sourceMappingURL=diff-ui.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diff-ui.js","sourceRoot":"","sources":["../../../src/tools/builtin/diff-ui.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import { ToolContext, ToolResult } from '../../types.js';
2
+ export declare function readFile(args: {
3
+ path: string;
4
+ offset?: number;
5
+ limit?: number;
6
+ }, context: ToolContext): Promise<ToolResult>;
7
+ export declare function writeFile(args: {
8
+ path: string;
9
+ content: string;
10
+ }, context: ToolContext): Promise<ToolResult>;
11
+ export declare function patchFile(args: {
12
+ path: string;
13
+ old_string: string;
14
+ new_string: string;
15
+ replace_all?: boolean;
16
+ }, context: ToolContext): Promise<ToolResult>;
17
+ export declare function searchFiles(args: {
18
+ pattern: string;
19
+ target?: 'content' | 'files';
20
+ path?: string;
21
+ file_glob?: string;
22
+ limit?: number;
23
+ }, context: ToolContext): Promise<ToolResult>;
24
+ export declare function listFiles(args: {
25
+ path?: string;
26
+ depth?: number;
27
+ glob?: string;
28
+ }, context: ToolContext): Promise<ToolResult>;
29
+ //# sourceMappingURL=files.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../../src/tools/builtin/files.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAkCzD,wBAAsB,QAAQ,CAAC,IAAI,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CA6BjI;AAED,wBAAsB,SAAS,CAAC,IAAI,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAYlH;AAED,wBAAsB,SAAS,CAAC,IAAI,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,OAAO,CAAA;CAAE,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CA4GhK;AAkCD,wBAAsB,WAAW,CAAC,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CA+BvL;AAwBD,wBAAsB,SAAS,CAAC,IAAI,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAejI"}