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.
- package/Daedalus.bat +18 -0
- package/LICENSE +21 -0
- package/README.md +254 -0
- package/dist/agents/agent.d.ts +10 -0
- package/dist/agents/agent.d.ts.map +1 -0
- package/dist/agents/agent.js +3 -0
- package/dist/agents/agent.js.map +1 -0
- package/dist/agents/orchestrator.d.ts +18 -0
- package/dist/agents/orchestrator.d.ts.map +1 -0
- package/dist/agents/orchestrator.js +171 -0
- package/dist/agents/orchestrator.js.map +1 -0
- package/dist/agents/roles.d.ts +14 -0
- package/dist/agents/roles.d.ts.map +1 -0
- package/dist/agents/roles.js +126 -0
- package/dist/agents/roles.js.map +1 -0
- package/dist/config/index.d.ts +485 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +237 -0
- package/dist/config/index.js.map +1 -0
- package/dist/highlight.d.ts +4 -0
- package/dist/highlight.d.ts.map +1 -0
- package/dist/highlight.js +42 -0
- package/dist/highlight.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1386 -0
- package/dist/index.js.map +1 -0
- package/dist/indexing/fts.d.ts +40 -0
- package/dist/indexing/fts.d.ts.map +1 -0
- package/dist/indexing/fts.js +121 -0
- package/dist/indexing/fts.js.map +1 -0
- package/dist/indexing/indexer.d.ts +22 -0
- package/dist/indexing/indexer.d.ts.map +1 -0
- package/dist/indexing/indexer.js +518 -0
- package/dist/indexing/indexer.js.map +1 -0
- package/dist/onboarding/wizard.d.ts +2 -0
- package/dist/onboarding/wizard.d.ts.map +1 -0
- package/dist/onboarding/wizard.js +231 -0
- package/dist/onboarding/wizard.js.map +1 -0
- package/dist/router/health.d.ts +6 -0
- package/dist/router/health.d.ts.map +1 -0
- package/dist/router/health.js +74 -0
- package/dist/router/health.js.map +1 -0
- package/dist/router/index.d.ts +33 -0
- package/dist/router/index.d.ts.map +1 -0
- package/dist/router/index.js +214 -0
- package/dist/router/index.js.map +1 -0
- package/dist/router/rate-limiter.d.ts +7 -0
- package/dist/router/rate-limiter.d.ts.map +1 -0
- package/dist/router/rate-limiter.js +36 -0
- package/dist/router/rate-limiter.js.map +1 -0
- package/dist/router/types.d.ts +81 -0
- package/dist/router/types.d.ts.map +1 -0
- package/dist/router/types.js +3 -0
- package/dist/router/types.js.map +1 -0
- package/dist/session/jsonl.d.ts +20 -0
- package/dist/session/jsonl.d.ts.map +1 -0
- package/dist/session/jsonl.js +61 -0
- package/dist/session/jsonl.js.map +1 -0
- package/dist/session/manager.d.ts +42 -0
- package/dist/session/manager.d.ts.map +1 -0
- package/dist/session/manager.js +184 -0
- package/dist/session/manager.js.map +1 -0
- package/dist/session/memory.d.ts +23 -0
- package/dist/session/memory.d.ts.map +1 -0
- package/dist/session/memory.js +88 -0
- package/dist/session/memory.js.map +1 -0
- package/dist/session/sqlite.d.ts +59 -0
- package/dist/session/sqlite.d.ts.map +1 -0
- package/dist/session/sqlite.js +174 -0
- package/dist/session/sqlite.js.map +1 -0
- package/dist/tools/builtin/delegation.d.ts +17 -0
- package/dist/tools/builtin/delegation.d.ts.map +1 -0
- package/dist/tools/builtin/delegation.js +85 -0
- package/dist/tools/builtin/delegation.js.map +1 -0
- package/dist/tools/builtin/diff-ui.d.ts +21 -0
- package/dist/tools/builtin/diff-ui.d.ts.map +1 -0
- package/dist/tools/builtin/diff-ui.js +211 -0
- package/dist/tools/builtin/diff-ui.js.map +1 -0
- package/dist/tools/builtin/files.d.ts +29 -0
- package/dist/tools/builtin/files.d.ts.map +1 -0
- package/dist/tools/builtin/files.js +286 -0
- package/dist/tools/builtin/files.js.map +1 -0
- package/dist/tools/builtin/git.d.ts +7 -0
- package/dist/tools/builtin/git.d.ts.map +1 -0
- package/dist/tools/builtin/git.js +11 -0
- package/dist/tools/builtin/git.js.map +1 -0
- package/dist/tools/builtin/indexing.d.ts +22 -0
- package/dist/tools/builtin/indexing.d.ts.map +1 -0
- package/dist/tools/builtin/indexing.js +159 -0
- package/dist/tools/builtin/indexing.js.map +1 -0
- package/dist/tools/builtin/project-config.d.ts +17 -0
- package/dist/tools/builtin/project-config.d.ts.map +1 -0
- package/dist/tools/builtin/project-config.js +66 -0
- package/dist/tools/builtin/project-config.js.map +1 -0
- package/dist/tools/builtin/terminal.d.ts +7 -0
- package/dist/tools/builtin/terminal.d.ts.map +1 -0
- package/dist/tools/builtin/terminal.js +99 -0
- package/dist/tools/builtin/terminal.js.map +1 -0
- package/dist/tools/builtin/todo.d.ts +20 -0
- package/dist/tools/builtin/todo.d.ts.map +1 -0
- package/dist/tools/builtin/todo.js +36 -0
- package/dist/tools/builtin/todo.js.map +1 -0
- package/dist/tools/builtin/web.d.ts +10 -0
- package/dist/tools/builtin/web.d.ts.map +1 -0
- package/dist/tools/builtin/web.js +67 -0
- package/dist/tools/builtin/web.js.map +1 -0
- package/dist/tools/daedalus-spinner.d.ts +29 -0
- package/dist/tools/daedalus-spinner.d.ts.map +1 -0
- package/dist/tools/daedalus-spinner.js +77 -0
- package/dist/tools/daedalus-spinner.js.map +1 -0
- package/dist/tools/definitions.d.ts +5 -0
- package/dist/tools/definitions.d.ts.map +1 -0
- package/dist/tools/definitions.js +296 -0
- package/dist/tools/definitions.js.map +1 -0
- package/dist/tools/executor.d.ts +4 -0
- package/dist/tools/executor.d.ts.map +1 -0
- package/dist/tools/executor.js +86 -0
- package/dist/tools/executor.js.map +1 -0
- package/dist/tools/mcp/http.d.ts +23 -0
- package/dist/tools/mcp/http.d.ts.map +1 -0
- package/dist/tools/mcp/http.js +200 -0
- package/dist/tools/mcp/http.js.map +1 -0
- package/dist/tools/mcp/registry.d.ts +16 -0
- package/dist/tools/mcp/registry.d.ts.map +1 -0
- package/dist/tools/mcp/registry.js +92 -0
- package/dist/tools/mcp/registry.js.map +1 -0
- package/dist/tools/mcp/stdio.d.ts +26 -0
- package/dist/tools/mcp/stdio.d.ts.map +1 -0
- package/dist/tools/mcp/stdio.js +157 -0
- package/dist/tools/mcp/stdio.js.map +1 -0
- package/dist/tools/mcp/tool-executor.d.ts +3 -0
- package/dist/tools/mcp/tool-executor.d.ts.map +1 -0
- package/dist/tools/mcp/tool-executor.js +23 -0
- package/dist/tools/mcp/tool-executor.js.map +1 -0
- package/dist/tools/mcp/types.d.ts +26 -0
- package/dist/tools/mcp/types.d.ts.map +1 -0
- package/dist/tools/mcp/types.js +3 -0
- package/dist/tools/mcp/types.js.map +1 -0
- package/dist/types.d.ts +58 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- 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"}
|