developer-ai 1.1.0 โ 1.1.1
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/dist/cli.js +24 -12
- package/dist/cli.js.map +1 -1
- package/dist/constants.d.ts +1 -1
- package/dist/constants.js +1 -1
- package/dist/core/agent.d.ts +10 -0
- package/dist/core/agent.d.ts.map +1 -1
- package/dist/core/agent.js +61 -5
- package/dist/core/agent.js.map +1 -1
- package/dist/core/system-prompt.d.ts.map +1 -1
- package/dist/core/system-prompt.js +22 -5
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/skills/loader.d.ts +7 -3
- package/dist/skills/loader.d.ts.map +1 -1
- package/dist/skills/loader.js +109 -12
- package/dist/skills/loader.js.map +1 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +2 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/patch-file.d.ts +13 -0
- package/dist/tools/patch-file.d.ts.map +1 -0
- package/dist/tools/patch-file.js +120 -0
- package/dist/tools/patch-file.js.map +1 -0
- package/dist/ui/spinner.d.ts +21 -0
- package/dist/ui/spinner.d.ts.map +1 -0
- package/dist/ui/spinner.js +76 -0
- package/dist/ui/spinner.js.map +1 -0
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -12,6 +12,7 @@ import { McpManager } from './mcp/client.js';
|
|
|
12
12
|
import { SkillsLoader } from './skills/loader.js';
|
|
13
13
|
import { OpenAIProvider } from './providers/openai.js';
|
|
14
14
|
import { OllamaProvider } from './providers/ollama.js';
|
|
15
|
+
import { ShimmerSpinner } from './ui/spinner.js';
|
|
15
16
|
import { VERSION } from './constants.js';
|
|
16
17
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
17
18
|
// ---- Helpers ----
|
|
@@ -63,6 +64,7 @@ async function createAgent(opts, confirmFn) {
|
|
|
63
64
|
workspaceDir: process.cwd(),
|
|
64
65
|
autoYes: opts.yes ?? false,
|
|
65
66
|
allowDangerous: opts.allowDangerous ?? false,
|
|
67
|
+
showThinking: opts.showThinking ?? false,
|
|
66
68
|
maxIterations: 30,
|
|
67
69
|
confirmFn,
|
|
68
70
|
});
|
|
@@ -82,11 +84,14 @@ async function runRepl(opts) {
|
|
|
82
84
|
resolve(answer.trim().toLowerCase().startsWith('y'));
|
|
83
85
|
});
|
|
84
86
|
});
|
|
85
|
-
console.log(chalk.bold.cyan('\n Developer-AI') +
|
|
87
|
+
console.log(chalk.bold.cyan('\n ๐ Developer-AI') +
|
|
86
88
|
chalk.dim(` v${VERSION}`) +
|
|
87
89
|
chalk.dim(` ยท provider: ${loadConfig().provider}`));
|
|
88
|
-
console.log(chalk.dim(` Workspace: ${process.cwd()}`));
|
|
89
|
-
|
|
90
|
+
console.log(chalk.dim(` ๐ Workspace: ${process.cwd()}`));
|
|
91
|
+
if (opts.showThinking) {
|
|
92
|
+
console.log(chalk.dim(` ๐ญ Show-thinking: enabled`));
|
|
93
|
+
}
|
|
94
|
+
console.log(chalk.dim(' ๐ก Type "exit" to quit, "clear" to reset context.\n'));
|
|
90
95
|
const agent = await createAgent(opts, confirmFn);
|
|
91
96
|
rl.prompt();
|
|
92
97
|
rl.on('line', async (line) => {
|
|
@@ -96,25 +101,28 @@ async function runRepl(opts) {
|
|
|
96
101
|
return;
|
|
97
102
|
}
|
|
98
103
|
if (input === 'exit' || input === 'quit' || input === '.exit') {
|
|
99
|
-
console.log(chalk.dim('Goodbye!'));
|
|
104
|
+
console.log(chalk.dim('๐ Goodbye!'));
|
|
100
105
|
rl.close();
|
|
101
106
|
process.exit(0);
|
|
102
107
|
}
|
|
103
108
|
if (input === 'clear') {
|
|
104
109
|
agent.resetHistory();
|
|
105
|
-
console.log(chalk.dim('Context cleared.\n'));
|
|
110
|
+
console.log(chalk.dim('๐งน Context cleared.\n'));
|
|
106
111
|
rl.prompt();
|
|
107
112
|
return;
|
|
108
113
|
}
|
|
109
114
|
// Pause readline while the agent is working
|
|
110
115
|
rl.pause();
|
|
116
|
+
const spinner = new ShimmerSpinner('Thinking');
|
|
111
117
|
try {
|
|
112
|
-
|
|
118
|
+
spinner.start();
|
|
113
119
|
const response = await agent.chat(input);
|
|
120
|
+
spinner.stop();
|
|
114
121
|
console.log('\n' + response + '\n');
|
|
115
122
|
}
|
|
116
123
|
catch (err) {
|
|
117
|
-
|
|
124
|
+
spinner.stop();
|
|
125
|
+
console.error(chalk.red(`\nโ Error: ${err.message}\n`));
|
|
118
126
|
}
|
|
119
127
|
rl.resume();
|
|
120
128
|
rl.prompt();
|
|
@@ -134,20 +142,23 @@ async function runOneShot(instruction, opts) {
|
|
|
134
142
|
resolve(answer.trim().toLowerCase().startsWith('y'));
|
|
135
143
|
});
|
|
136
144
|
});
|
|
145
|
+
const spinner = new ShimmerSpinner('Processing');
|
|
137
146
|
try {
|
|
138
147
|
const agent = await createAgent(opts, confirmFn);
|
|
139
|
-
|
|
148
|
+
spinner.start();
|
|
140
149
|
const response = await agent.chat(instruction);
|
|
150
|
+
spinner.stop();
|
|
141
151
|
console.log(response);
|
|
142
152
|
}
|
|
143
153
|
catch (err) {
|
|
144
|
-
|
|
154
|
+
spinner.stop();
|
|
155
|
+
console.error(chalk.red(`โ Error: ${err.message}`));
|
|
145
156
|
process.exit(1);
|
|
146
157
|
}
|
|
147
158
|
}
|
|
148
159
|
// ---- Onboard command ----
|
|
149
160
|
async function runOnboard() {
|
|
150
|
-
console.log(chalk.bold.cyan('\n Developer-AI Setup\n'));
|
|
161
|
+
console.log(chalk.bold.cyan('\n โ๏ธ Developer-AI Setup\n'));
|
|
151
162
|
const rl = readline.createInterface({
|
|
152
163
|
input: process.stdin,
|
|
153
164
|
output: process.stdout,
|
|
@@ -189,8 +200,8 @@ async function runOnboard() {
|
|
|
189
200
|
config.webSearch.serperApiKey = key.trim();
|
|
190
201
|
}
|
|
191
202
|
saveConfig(config);
|
|
192
|
-
console.log(chalk.green('\n
|
|
193
|
-
console.log(chalk.dim('
|
|
203
|
+
console.log(chalk.green('\n โ
Configuration saved to ~/.developer-ai/config.json'));
|
|
204
|
+
console.log(chalk.dim(' ๐ File permissions set to owner-only (0600).\n'));
|
|
194
205
|
rl.close();
|
|
195
206
|
}
|
|
196
207
|
// ---- Program definition ----
|
|
@@ -201,6 +212,7 @@ program
|
|
|
201
212
|
.version(VERSION)
|
|
202
213
|
.option('--yes', 'Auto-confirm all prompts (non-interactive)', false)
|
|
203
214
|
.option('--allow-dangerous', 'Allow dangerous commands without confirmation', false)
|
|
215
|
+
.option('--show-thinking', 'Display the model\'s reasoning/thinking process', false)
|
|
204
216
|
.argument('[instruction...]', 'One-shot instruction (non-interactive)')
|
|
205
217
|
.action(async (instructionParts, options) => {
|
|
206
218
|
const instruction = instructionParts.join(' ').trim();
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,QAAQ,MAAM,eAAe,CAAC;AACrC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC1E,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/constants.d.ts
CHANGED
|
@@ -4,5 +4,5 @@ export declare const MAX_FILE_SIZE: number;
|
|
|
4
4
|
export declare const MAX_OUTPUT_LENGTH = 10000;
|
|
5
5
|
export declare const MAX_AGENT_ITERATIONS = 30;
|
|
6
6
|
export declare const COMMAND_TIMEOUT_MS = 30000;
|
|
7
|
-
export declare const VERSION = "1.
|
|
7
|
+
export declare const VERSION = "1.1.1";
|
|
8
8
|
//# sourceMappingURL=constants.d.ts.map
|
package/dist/constants.js
CHANGED
|
@@ -4,5 +4,5 @@ export const MAX_FILE_SIZE = 1024 * 1024; // 1 MB
|
|
|
4
4
|
export const MAX_OUTPUT_LENGTH = 10_000;
|
|
5
5
|
export const MAX_AGENT_ITERATIONS = 30;
|
|
6
6
|
export const COMMAND_TIMEOUT_MS = 30_000;
|
|
7
|
-
export const VERSION = '1.
|
|
7
|
+
export const VERSION = '1.1.1';
|
|
8
8
|
//# sourceMappingURL=constants.js.map
|
package/dist/core/agent.d.ts
CHANGED
|
@@ -11,6 +11,7 @@ export interface AgentOptions {
|
|
|
11
11
|
autoYes: boolean;
|
|
12
12
|
allowDangerous: boolean;
|
|
13
13
|
maxIterations: number;
|
|
14
|
+
showThinking: boolean;
|
|
14
15
|
confirmFn: (message: string) => Promise<boolean>;
|
|
15
16
|
}
|
|
16
17
|
export declare class Agent {
|
|
@@ -23,6 +24,7 @@ export declare class Agent {
|
|
|
23
24
|
private autoYes;
|
|
24
25
|
private allowDangerous;
|
|
25
26
|
private maxIterations;
|
|
27
|
+
private showThinking;
|
|
26
28
|
private confirmFn;
|
|
27
29
|
constructor(opts: AgentOptions);
|
|
28
30
|
initialize(): Promise<void>;
|
|
@@ -34,5 +36,13 @@ export declare class Agent {
|
|
|
34
36
|
resetHistory(): void;
|
|
35
37
|
private executeTool;
|
|
36
38
|
private logToolExecution;
|
|
39
|
+
/**
|
|
40
|
+
* Split thinking blocks (wrapped in <think>...</think>) from visible content.
|
|
41
|
+
*/
|
|
42
|
+
private splitThinking;
|
|
43
|
+
/**
|
|
44
|
+
* Display thinking/reasoning text to stderr with visual formatting.
|
|
45
|
+
*/
|
|
46
|
+
private emitThinking;
|
|
37
47
|
}
|
|
38
48
|
//# sourceMappingURL=agent.d.ts.map
|
package/dist/core/agent.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/core/agent.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAIV,WAAW,EAEZ,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,YAAY,EAAe,MAAM,sBAAsB,CAAC;AACtE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGnD,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,WAAW,CAAC;IACtB,YAAY,EAAE,YAAY,CAAC;IAC3B,UAAU,EAAE,UAAU,CAAC;IACvB,YAAY,EAAE,YAAY,CAAC;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,EAAE,OAAO,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAClD;AAED,qBAAa,KAAK;IAChB,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,QAAQ,CAAc;IAC9B,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,cAAc,CAAU;IAChC,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,SAAS,CAAwC;gBAE7C,IAAI,EAAE,YAAY;
|
|
1
|
+
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/core/agent.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAIV,WAAW,EAEZ,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,YAAY,EAAe,MAAM,sBAAsB,CAAC;AACtE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGnD,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,WAAW,CAAC;IACtB,YAAY,EAAE,YAAY,CAAC;IAC3B,UAAU,EAAE,UAAU,CAAC;IACvB,YAAY,EAAE,YAAY,CAAC;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,EAAE,OAAO,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,OAAO,CAAC;IACtB,SAAS,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAClD;AAED,qBAAa,KAAK;IAChB,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,QAAQ,CAAc;IAC9B,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,cAAc,CAAU;IAChC,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,YAAY,CAAU;IAC9B,OAAO,CAAC,SAAS,CAAwC;gBAE7C,IAAI,EAAE,YAAY;IAaxB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAIjC;;;OAGG;IACG,IAAI,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA0FhD,YAAY,IAAI,IAAI;YAMN,WAAW;IA8BzB,OAAO,CAAC,gBAAgB;IA2CxB;;OAEG;IACH,OAAO,CAAC,aAAa;IAkBrB;;OAEG;IACH,OAAO,CAAC,YAAY;CAerB"}
|
package/dist/core/agent.js
CHANGED
|
@@ -10,6 +10,7 @@ export class Agent {
|
|
|
10
10
|
autoYes;
|
|
11
11
|
allowDangerous;
|
|
12
12
|
maxIterations;
|
|
13
|
+
showThinking;
|
|
13
14
|
confirmFn;
|
|
14
15
|
constructor(opts) {
|
|
15
16
|
this.provider = opts.provider;
|
|
@@ -20,6 +21,7 @@ export class Agent {
|
|
|
20
21
|
this.autoYes = opts.autoYes;
|
|
21
22
|
this.allowDangerous = opts.allowDangerous;
|
|
22
23
|
this.maxIterations = opts.maxIterations;
|
|
24
|
+
this.showThinking = opts.showThinking;
|
|
23
25
|
this.confirmFn = opts.confirmFn;
|
|
24
26
|
}
|
|
25
27
|
async initialize() {
|
|
@@ -65,6 +67,10 @@ export class Agent {
|
|
|
65
67
|
}
|
|
66
68
|
// Tool calls โ execute, feed results back, continue
|
|
67
69
|
if (response.toolCalls.length > 0) {
|
|
70
|
+
// Extract and display thinking/reasoning if --show-thinking is on
|
|
71
|
+
if (this.showThinking && response.content) {
|
|
72
|
+
this.emitThinking(response.content);
|
|
73
|
+
}
|
|
68
74
|
this.messages.push({
|
|
69
75
|
role: 'assistant',
|
|
70
76
|
content: response.content,
|
|
@@ -84,8 +90,14 @@ export class Agent {
|
|
|
84
90
|
}
|
|
85
91
|
// Final text response
|
|
86
92
|
if (response.content) {
|
|
87
|
-
|
|
88
|
-
|
|
93
|
+
// Show any final thinking if enabled
|
|
94
|
+
const { thinking, visible } = this.splitThinking(response.content);
|
|
95
|
+
if (this.showThinking && thinking) {
|
|
96
|
+
this.emitThinking(thinking);
|
|
97
|
+
}
|
|
98
|
+
const finalContent = visible || response.content;
|
|
99
|
+
this.messages.push({ role: 'assistant', content: finalContent });
|
|
100
|
+
return finalContent;
|
|
89
101
|
}
|
|
90
102
|
// Neither content nor tool calls โ loop shouldn't continue
|
|
91
103
|
break;
|
|
@@ -134,10 +146,21 @@ export class Agent {
|
|
|
134
146
|
catch {
|
|
135
147
|
/* ignore */
|
|
136
148
|
}
|
|
137
|
-
|
|
149
|
+
// Tool-specific icons for visual clarity
|
|
150
|
+
const TOOL_ICONS = {
|
|
151
|
+
read_file: '๐',
|
|
152
|
+
write_file: '๐',
|
|
153
|
+
patch_file: '๐ฉน',
|
|
154
|
+
list_files: '๐',
|
|
155
|
+
search_text: '๐',
|
|
156
|
+
run_command: 'โก',
|
|
157
|
+
web_search: '๐',
|
|
158
|
+
};
|
|
159
|
+
const toolIcon = TOOL_ICONS[name] ?? '๐ง';
|
|
160
|
+
const statusIcon = result.success ? chalk.green('โ') : chalk.red('โ');
|
|
138
161
|
const label = chalk.cyan(`[${name}]`);
|
|
139
162
|
// Concise single-line summary per tool call
|
|
140
|
-
const detail = name === 'write_file' || name === 'read_file'
|
|
163
|
+
const detail = name === 'write_file' || name === 'read_file' || name === 'patch_file'
|
|
141
164
|
? String(args['path'] ?? '')
|
|
142
165
|
: name === 'run_command'
|
|
143
166
|
? String(args['command'] ?? '')
|
|
@@ -146,10 +169,43 @@ export class Agent {
|
|
|
146
169
|
: name === 'search_text' || name === 'web_search'
|
|
147
170
|
? `"${String(args['query'] ?? '')}"`
|
|
148
171
|
: '';
|
|
149
|
-
process.stderr.write(` ${
|
|
172
|
+
process.stderr.write(` ${toolIcon} ${statusIcon} ${label} ${detail}\n`);
|
|
150
173
|
if (!result.success && result.error) {
|
|
151
174
|
process.stderr.write(` ${chalk.red(result.error)}\n`);
|
|
152
175
|
}
|
|
153
176
|
}
|
|
177
|
+
/**
|
|
178
|
+
* Split thinking blocks (wrapped in <think>...</think>) from visible content.
|
|
179
|
+
*/
|
|
180
|
+
splitThinking(content) {
|
|
181
|
+
const thinkRegex = /<think>([\s\S]*?)<\/think>/gi;
|
|
182
|
+
const thinkBlocks = [];
|
|
183
|
+
let visible = content;
|
|
184
|
+
let match;
|
|
185
|
+
while ((match = thinkRegex.exec(content)) !== null) {
|
|
186
|
+
thinkBlocks.push(match[1]?.trim() ?? '');
|
|
187
|
+
}
|
|
188
|
+
visible = content.replace(thinkRegex, '').trim();
|
|
189
|
+
return {
|
|
190
|
+
thinking: thinkBlocks.length > 0 ? thinkBlocks.join('\n\n') : null,
|
|
191
|
+
visible,
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Display thinking/reasoning text to stderr with visual formatting.
|
|
196
|
+
*/
|
|
197
|
+
emitThinking(text) {
|
|
198
|
+
const { thinking } = this.splitThinking(text);
|
|
199
|
+
const content = thinking ?? text;
|
|
200
|
+
if (!content.trim())
|
|
201
|
+
return;
|
|
202
|
+
const border = chalk.dim.magenta('โ');
|
|
203
|
+
const header = chalk.dim.magenta('โโ ๐ญ Reasoning โโโโโโโโโโโโโโโโโ');
|
|
204
|
+
const footer = chalk.dim.magenta('โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ');
|
|
205
|
+
const lines = content
|
|
206
|
+
.split('\n')
|
|
207
|
+
.map((line) => `${border} ${chalk.dim.italic(line)}`);
|
|
208
|
+
process.stderr.write(`\n${header}\n${lines.join('\n')}\n${footer}\n\n`);
|
|
209
|
+
}
|
|
154
210
|
}
|
|
155
211
|
//# sourceMappingURL=agent.js.map
|
package/dist/core/agent.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/core/agent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAW1B,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/core/agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"system-prompt.d.ts","sourceRoot":"","sources":["../../src/core/system-prompt.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,MAAM,EAAE,GACtB,MAAM,
|
|
1
|
+
{"version":3,"file":"system-prompt.d.ts","sourceRoot":"","sources":["../../src/core/system-prompt.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,MAAM,EAAE,GACtB,MAAM,CAyDR"}
|
|
@@ -6,11 +6,11 @@ export function buildSystemPrompt(workspaceDir, skillSnippets) {
|
|
|
6
6
|
let prompt = `You are Developer-AI, a terminal coding agent operating inside the user's current workspace.
|
|
7
7
|
Workspace root: ${workspaceDir}
|
|
8
8
|
|
|
9
|
-
You must accomplish tasks by calling the provided tools. Never claim you changed a file unless you used write_file.
|
|
9
|
+
You must accomplish tasks by calling the provided tools. Never claim you changed a file unless you used write_file or patch_file.
|
|
10
10
|
|
|
11
11
|
## Operating Rules
|
|
12
12
|
- Think step-by-step. Explain your plan briefly (1โ4 bullets), then execute with tool calls.
|
|
13
|
-
- Prefer minimal, correct changes.
|
|
13
|
+
- Prefer minimal, correct changes. Avoid rewriting entire files when only a few lines need to change.
|
|
14
14
|
- When creating websites or apps:
|
|
15
15
|
โข Produce self-contained files (inline SVGs, inline data).
|
|
16
16
|
โข NEVER reference external assets, images, or data files that don't exist.
|
|
@@ -20,8 +20,24 @@ You must accomplish tasks by calling the provided tools. Never claim you changed
|
|
|
20
20
|
- If a tool fails, explain briefly and try an alternative approach.
|
|
21
21
|
- After completing edits, summarise what changed and how to run/test.
|
|
22
22
|
|
|
23
|
+
## Token-Efficient Editing Strategy
|
|
24
|
+
You have TWO file-editing tools. Choose wisely to minimise token usage:
|
|
25
|
+
|
|
26
|
+
1. **patch_file** (PREFERRED for edits) โ targeted string replacement.
|
|
27
|
+
- Use for changing text, fixing bugs, updating values, renaming, small additions/removals.
|
|
28
|
+
- Provide old_string with 2โ3 lines of surrounding context so it matches exactly once.
|
|
29
|
+
- Example: changing footer text, updating a version number, fixing a typo.
|
|
30
|
+
|
|
31
|
+
2. **write_file** โ full file creation or complete rewrite.
|
|
32
|
+
- Use ONLY when creating new files or when >50% of the file content changes.
|
|
33
|
+
- Set confirmOverwrite=true when overwriting.
|
|
34
|
+
|
|
35
|
+
โ ๏ธ CRITICAL: For small changes (a line, a paragraph, a CSS rule), ALWAYS use patch_file.
|
|
36
|
+
Never rewrite an entire file just to change a few lines โ this wastes tokens and risks data loss.
|
|
37
|
+
|
|
23
38
|
## Tool Usage
|
|
24
|
-
- Use
|
|
39
|
+
- Use patch_file for targeted edits to existing files (preferred).
|
|
40
|
+
- Use write_file to create new files or do complete rewrites.
|
|
25
41
|
- Use read_file to inspect existing files before modifying them.
|
|
26
42
|
- Use list_files to understand the project structure.
|
|
27
43
|
- Use search_text to find code patterns across the workspace.
|
|
@@ -29,10 +45,11 @@ You must accomplish tasks by calling the provided tools. Never claim you changed
|
|
|
29
45
|
- Use web_search if you need to look something up online (may not be configured).
|
|
30
46
|
|
|
31
47
|
## Never
|
|
32
|
-
- Fabricate file edits โ always use
|
|
48
|
+
- Fabricate file edits โ always use write_file or patch_file.
|
|
33
49
|
- Output secrets or API keys.
|
|
34
50
|
- Run destructive commands (rm -rf, etc.) without explicit user approval.
|
|
35
|
-
- Reference external assets/files that haven't been created
|
|
51
|
+
- Reference external assets/files that haven't been created.
|
|
52
|
+
- Rewrite an entire file when patch_file can accomplish the edit.`;
|
|
36
53
|
if (skillSnippets.length > 0) {
|
|
37
54
|
prompt += '\n\n## Relevant Skills\n';
|
|
38
55
|
for (const snippet of skillSnippets) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"system-prompt.js","sourceRoot":"","sources":["../../src/core/system-prompt.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAC/B,YAAoB,EACpB,aAAuB;IAEvB,IAAI,MAAM,GAAG;kBACG,YAAY
|
|
1
|
+
{"version":3,"file":"system-prompt.js","sourceRoot":"","sources":["../../src/core/system-prompt.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAC/B,YAAoB,EACpB,aAAuB;IAEvB,IAAI,MAAM,GAAG;kBACG,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kEA6CoC,CAAC;IAEjE,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,0BAA0B,CAAC;QACrC,KAAK,MAAM,OAAO,IAAI,aAAa,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,OAAO,IAAI,CAAC;QAC7B,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
package/dist/skills/loader.d.ts
CHANGED
|
@@ -3,9 +3,11 @@ interface Skill {
|
|
|
3
3
|
description: string;
|
|
4
4
|
content: string;
|
|
5
5
|
filePath: string;
|
|
6
|
+
/** Pre-computed keyword set for fast matching */
|
|
7
|
+
keywords: Set<string>;
|
|
6
8
|
}
|
|
7
9
|
/**
|
|
8
|
-
* Loads SKILL.md files and provides
|
|
10
|
+
* Loads SKILL.md files and provides intelligent keyword-based matching
|
|
9
11
|
* to inject relevant skill context into agent prompts.
|
|
10
12
|
*/
|
|
11
13
|
export declare class SkillsLoader {
|
|
@@ -15,8 +17,10 @@ export declare class SkillsLoader {
|
|
|
15
17
|
constructor(skillsDirs: string[]);
|
|
16
18
|
load(): Promise<void>;
|
|
17
19
|
/**
|
|
18
|
-
* Find skills relevant to a query using
|
|
19
|
-
*
|
|
20
|
+
* Find skills relevant to a query using multi-signal scoring:
|
|
21
|
+
* 1. Alias-based category matching (highest weight)
|
|
22
|
+
* 2. Name / description keyword matches
|
|
23
|
+
* 3. Body content keyword matches
|
|
20
24
|
*/
|
|
21
25
|
findRelevant(query: string, maxResults?: number): Skill[];
|
|
22
26
|
getAll(): Skill[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/skills/loader.ts"],"names":[],"mappings":"AAIA,UAAU,KAAK;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/skills/loader.ts"],"names":[],"mappings":"AAIA,UAAU,KAAK;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,iDAAiD;IACjD,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CACvB;AA6DD;;;GAGG;AACH,qBAAa,YAAY;IAIX,OAAO,CAAC,UAAU;IAH9B,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,MAAM,CAAS;gBAEH,UAAU,EAAE,MAAM,EAAE;IAElC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAwC3B;;;;;OAKG;IACH,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,SAAI,GAAG,KAAK,EAAE;IAyDpD,MAAM,IAAI,KAAK,EAAE;CAGlB"}
|
package/dist/skills/loader.js
CHANGED
|
@@ -2,7 +2,65 @@ import fs from 'node:fs';
|
|
|
2
2
|
import path from 'node:path';
|
|
3
3
|
import { glob } from 'glob';
|
|
4
4
|
/**
|
|
5
|
-
*
|
|
5
|
+
* Category-keyword map for smarter skill matching.
|
|
6
|
+
* Maps common user terms โ skill names they likely need.
|
|
7
|
+
*/
|
|
8
|
+
const SKILL_ALIASES = {
|
|
9
|
+
// Task-type aliases
|
|
10
|
+
'fix': ['debugging', 'error-handling'],
|
|
11
|
+
'bug': ['debugging', 'error-handling'],
|
|
12
|
+
'debug': ['debugging'],
|
|
13
|
+
'error': ['error-handling', 'debugging'],
|
|
14
|
+
'crash': ['debugging', 'error-handling'],
|
|
15
|
+
'test': ['testing-strategy', 'webapp-testing'],
|
|
16
|
+
'spec': ['testing-strategy'],
|
|
17
|
+
'unit': ['testing-strategy'],
|
|
18
|
+
'e2e': ['webapp-testing'],
|
|
19
|
+
'cypress': ['webapp-testing'],
|
|
20
|
+
'playwright': ['webapp-testing'],
|
|
21
|
+
'review': ['code-review'],
|
|
22
|
+
'pr': ['code-review', 'git-workflow'],
|
|
23
|
+
'refactor': ['refactoring'],
|
|
24
|
+
'clean': ['refactoring'],
|
|
25
|
+
'restructure': ['refactoring'],
|
|
26
|
+
'optimize': ['performance-optimization'],
|
|
27
|
+
'performance': ['performance-optimization'],
|
|
28
|
+
'slow': ['performance-optimization'],
|
|
29
|
+
'fast': ['performance-optimization'],
|
|
30
|
+
'speed': ['performance-optimization'],
|
|
31
|
+
'security': ['security-audit'],
|
|
32
|
+
'vulnerability': ['security-audit'],
|
|
33
|
+
'auth': ['security-audit', 'api-design'],
|
|
34
|
+
'xss': ['security-audit'],
|
|
35
|
+
'injection': ['security-audit'],
|
|
36
|
+
'api': ['api-design'],
|
|
37
|
+
'rest': ['api-design'],
|
|
38
|
+
'graphql': ['api-design'],
|
|
39
|
+
'endpoint': ['api-design'],
|
|
40
|
+
'accessible': ['accessibility'],
|
|
41
|
+
'a11y': ['accessibility'],
|
|
42
|
+
'aria': ['accessibility'],
|
|
43
|
+
'wcag': ['accessibility'],
|
|
44
|
+
'screen reader': ['accessibility'],
|
|
45
|
+
'docs': ['documentation'],
|
|
46
|
+
'readme': ['documentation'],
|
|
47
|
+
'document': ['documentation'],
|
|
48
|
+
'comment': ['documentation'],
|
|
49
|
+
'git': ['git-workflow'],
|
|
50
|
+
'branch': ['git-workflow'],
|
|
51
|
+
'commit': ['git-workflow'],
|
|
52
|
+
'merge': ['git-workflow'],
|
|
53
|
+
'prompt': ['prompt-engineering'],
|
|
54
|
+
'website': ['human-like-coding'],
|
|
55
|
+
'landing': ['human-like-coding'],
|
|
56
|
+
'ui': ['human-like-coding', 'accessibility'],
|
|
57
|
+
'frontend': ['human-like-coding', 'webapp-testing'],
|
|
58
|
+
'css': ['human-like-coding'],
|
|
59
|
+
'design': ['human-like-coding'],
|
|
60
|
+
'html': ['human-like-coding'],
|
|
61
|
+
};
|
|
62
|
+
/**
|
|
63
|
+
* Loads SKILL.md files and provides intelligent keyword-based matching
|
|
6
64
|
* to inject relevant skill context into agent prompts.
|
|
7
65
|
*/
|
|
8
66
|
export class SkillsLoader {
|
|
@@ -24,11 +82,24 @@ export class SkillsLoader {
|
|
|
24
82
|
try {
|
|
25
83
|
const content = fs.readFileSync(fullPath, 'utf-8');
|
|
26
84
|
const parsed = parseFrontmatter(content);
|
|
85
|
+
const name = parsed.name || path.basename(path.dirname(fullPath));
|
|
86
|
+
// Pre-compute keywords from name, description, and first section
|
|
87
|
+
const keywords = new Set();
|
|
88
|
+
for (const word of `${name} ${parsed.description}`.toLowerCase().split(/[\s\-_]+/)) {
|
|
89
|
+
if (word.length > 2)
|
|
90
|
+
keywords.add(word);
|
|
91
|
+
}
|
|
92
|
+
// Extract first 1000 chars of body for keyword indexing
|
|
93
|
+
for (const word of parsed.body.slice(0, 1000).toLowerCase().split(/\W+/)) {
|
|
94
|
+
if (word.length > 3)
|
|
95
|
+
keywords.add(word);
|
|
96
|
+
}
|
|
27
97
|
this.skills.push({
|
|
28
|
-
name
|
|
98
|
+
name,
|
|
29
99
|
description: parsed.description,
|
|
30
100
|
content: parsed.body,
|
|
31
101
|
filePath: fullPath,
|
|
102
|
+
keywords,
|
|
32
103
|
});
|
|
33
104
|
}
|
|
34
105
|
catch {
|
|
@@ -39,28 +110,54 @@ export class SkillsLoader {
|
|
|
39
110
|
this.loaded = true;
|
|
40
111
|
}
|
|
41
112
|
/**
|
|
42
|
-
* Find skills relevant to a query using
|
|
43
|
-
*
|
|
113
|
+
* Find skills relevant to a query using multi-signal scoring:
|
|
114
|
+
* 1. Alias-based category matching (highest weight)
|
|
115
|
+
* 2. Name / description keyword matches
|
|
116
|
+
* 3. Body content keyword matches
|
|
44
117
|
*/
|
|
45
118
|
findRelevant(query, maxResults = 3) {
|
|
46
119
|
if (this.skills.length === 0)
|
|
47
120
|
return [];
|
|
48
|
-
const
|
|
49
|
-
|
|
121
|
+
const queryLower = query.toLowerCase();
|
|
122
|
+
const queryWords = queryLower
|
|
50
123
|
.split(/\s+/)
|
|
51
124
|
.filter((w) => w.length > 2);
|
|
125
|
+
// Determine which skill names are boosted via alias mapping
|
|
126
|
+
const aliasBoosts = new Set();
|
|
127
|
+
for (const word of queryWords) {
|
|
128
|
+
const aliases = SKILL_ALIASES[word];
|
|
129
|
+
if (aliases) {
|
|
130
|
+
for (const a of aliases)
|
|
131
|
+
aliasBoosts.add(a);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
// Also check multi-word aliases
|
|
135
|
+
for (const [phrase, skills] of Object.entries(SKILL_ALIASES)) {
|
|
136
|
+
if (phrase.includes(' ') && queryLower.includes(phrase)) {
|
|
137
|
+
for (const s of skills)
|
|
138
|
+
aliasBoosts.add(s);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
52
141
|
const scored = this.skills.map((skill) => {
|
|
53
|
-
const header = `${skill.name} ${skill.description}`.toLowerCase();
|
|
54
142
|
let score = 0;
|
|
143
|
+
const header = `${skill.name} ${skill.description}`.toLowerCase();
|
|
144
|
+
// Alias-based boost (strongest signal)
|
|
145
|
+
if (aliasBoosts.has(skill.name)) {
|
|
146
|
+
score += 10;
|
|
147
|
+
}
|
|
148
|
+
// Exact name hit
|
|
149
|
+
if (queryWords.some((w) => skill.name.toLowerCase().includes(w))) {
|
|
150
|
+
score += 5;
|
|
151
|
+
}
|
|
152
|
+
// Header keyword matches
|
|
55
153
|
for (const word of queryWords) {
|
|
56
154
|
if (header.includes(word))
|
|
57
155
|
score += 3;
|
|
58
|
-
if (skill.content.toLowerCase().includes(word))
|
|
59
|
-
score += 1;
|
|
60
156
|
}
|
|
61
|
-
//
|
|
62
|
-
|
|
63
|
-
|
|
157
|
+
// Body keyword matches
|
|
158
|
+
for (const word of queryWords) {
|
|
159
|
+
if (skill.keywords.has(word))
|
|
160
|
+
score += 1;
|
|
64
161
|
}
|
|
65
162
|
return { skill, score };
|
|
66
163
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/skills/loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/skills/loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAS7C,wBAAgB,kBAAkB,IAAI,YAAY,CAUjD;AAED,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC"}
|
package/dist/tools/index.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { ToolRegistry } from './registry.js';
|
|
2
2
|
import { readFileTool } from './read-file.js';
|
|
3
3
|
import { writeFileTool } from './write-file.js';
|
|
4
|
+
import { patchFileTool } from './patch-file.js';
|
|
4
5
|
import { listFilesTool } from './list-files.js';
|
|
5
6
|
import { searchTextTool } from './search-text.js';
|
|
6
7
|
import { runCommandTool } from './run-command.js';
|
|
@@ -9,6 +10,7 @@ export function createToolRegistry() {
|
|
|
9
10
|
const registry = new ToolRegistry();
|
|
10
11
|
registry.register(readFileTool);
|
|
11
12
|
registry.register(writeFileTool);
|
|
13
|
+
registry.register(patchFileTool);
|
|
12
14
|
registry.register(listFilesTool);
|
|
13
15
|
registry.register(searchTextTool);
|
|
14
16
|
registry.register(runCommandTool);
|
package/dist/tools/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,MAAM,UAAU,kBAAkB;IAChC,MAAM,QAAQ,GAAG,IAAI,YAAY,EAAE,CAAC;IACpC,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IAChC,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IACjC,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IACjC,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IAClC,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IAClC,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IACjC,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,MAAM,UAAU,kBAAkB;IAChC,MAAM,QAAQ,GAAG,IAAI,YAAY,EAAE,CAAC;IACpC,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IAChC,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IACjC,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IACjC,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IACjC,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IAClC,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IAClC,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IACjC,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { ToolHandler } from './registry.js';
|
|
2
|
+
/**
|
|
3
|
+
* Targeted string-replacement tool โ like GitHub Copilot's replace_string_in_file.
|
|
4
|
+
* Saves tokens by only sending the changed portion instead of the entire file.
|
|
5
|
+
*
|
|
6
|
+
* Rules:
|
|
7
|
+
* - `old_string` must match exactly ONE location in the file.
|
|
8
|
+
* - If it matches zero or multiple locations, the tool fails with a clear error.
|
|
9
|
+
* - Surrounding context (3+ unchanged lines) should be included in `old_string`
|
|
10
|
+
* to guarantee uniqueness.
|
|
11
|
+
*/
|
|
12
|
+
export declare const patchFileTool: ToolHandler;
|
|
13
|
+
//# sourceMappingURL=patch-file.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"patch-file.d.ts","sourceRoot":"","sources":["../../src/tools/patch-file.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAe,MAAM,eAAe,CAAC;AAU9D;;;;;;;;;GASG;AACH,eAAO,MAAM,aAAa,EAAE,WAoG3B,CAAC"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import fs from 'node:fs/promises';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { z } from 'zod';
|
|
4
|
+
import { resolveSafePath } from './utils.js';
|
|
5
|
+
const schema = z.object({
|
|
6
|
+
path: z.string().describe('Workspace-relative file path'),
|
|
7
|
+
old_string: z.string().describe('Exact text to find and replace (must match uniquely)'),
|
|
8
|
+
new_string: z.string().describe('Replacement text'),
|
|
9
|
+
});
|
|
10
|
+
/**
|
|
11
|
+
* Targeted string-replacement tool โ like GitHub Copilot's replace_string_in_file.
|
|
12
|
+
* Saves tokens by only sending the changed portion instead of the entire file.
|
|
13
|
+
*
|
|
14
|
+
* Rules:
|
|
15
|
+
* - `old_string` must match exactly ONE location in the file.
|
|
16
|
+
* - If it matches zero or multiple locations, the tool fails with a clear error.
|
|
17
|
+
* - Surrounding context (3+ unchanged lines) should be included in `old_string`
|
|
18
|
+
* to guarantee uniqueness.
|
|
19
|
+
*/
|
|
20
|
+
export const patchFileTool = {
|
|
21
|
+
name: 'patch_file',
|
|
22
|
+
description: 'Apply a targeted text replacement to an existing file. ' +
|
|
23
|
+
'Provide the exact `old_string` to find (must match exactly one location) and the `new_string` to replace it with. ' +
|
|
24
|
+
'This is far more token-efficient than rewriting the entire file โ prefer this for small edits. ' +
|
|
25
|
+
'Include 2-3 lines of surrounding context in old_string to ensure a unique match.',
|
|
26
|
+
schema,
|
|
27
|
+
jsonSchema: {
|
|
28
|
+
type: 'object',
|
|
29
|
+
properties: {
|
|
30
|
+
path: { type: 'string', description: 'Workspace-relative file path' },
|
|
31
|
+
old_string: {
|
|
32
|
+
type: 'string',
|
|
33
|
+
description: 'Exact text to find. Must match exactly one location in the file. Include surrounding context lines for uniqueness.',
|
|
34
|
+
},
|
|
35
|
+
new_string: {
|
|
36
|
+
type: 'string',
|
|
37
|
+
description: 'Replacement text. Use empty string to delete the matched text.',
|
|
38
|
+
},
|
|
39
|
+
},
|
|
40
|
+
required: ['path', 'old_string', 'new_string'],
|
|
41
|
+
},
|
|
42
|
+
async execute(input, ctx) {
|
|
43
|
+
const { path: filePath, old_string, new_string } = schema.parse(input);
|
|
44
|
+
const resolved = resolveSafePath(ctx.workspaceDir, filePath);
|
|
45
|
+
if (!resolved) {
|
|
46
|
+
return { success: false, output: '', error: 'Path escapes workspace directory' };
|
|
47
|
+
}
|
|
48
|
+
// Read current content
|
|
49
|
+
let content;
|
|
50
|
+
try {
|
|
51
|
+
content = await fs.readFile(resolved, 'utf-8');
|
|
52
|
+
}
|
|
53
|
+
catch (err) {
|
|
54
|
+
return {
|
|
55
|
+
success: false,
|
|
56
|
+
output: '',
|
|
57
|
+
error: `Cannot read file: ${err.message}`,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
// Count occurrences
|
|
61
|
+
const occurrences = countOccurrences(content, old_string);
|
|
62
|
+
if (occurrences === 0) {
|
|
63
|
+
// Provide helpful context: show a snippet of the file so the LLM can self-correct
|
|
64
|
+
const preview = content.slice(0, 500);
|
|
65
|
+
return {
|
|
66
|
+
success: false,
|
|
67
|
+
output: '',
|
|
68
|
+
error: `old_string not found in "${filePath}". ` +
|
|
69
|
+
`Make sure you copied the text exactly (whitespace matters).\n` +
|
|
70
|
+
`File preview (first 500 chars):\n${preview}`,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
if (occurrences > 1) {
|
|
74
|
+
return {
|
|
75
|
+
success: false,
|
|
76
|
+
output: '',
|
|
77
|
+
error: `old_string matched ${occurrences} locations in "${filePath}". ` +
|
|
78
|
+
`Include more surrounding context to make the match unique.`,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
// Apply the single replacement
|
|
82
|
+
const updated = content.replace(old_string, new_string);
|
|
83
|
+
try {
|
|
84
|
+
await fs.mkdir(path.dirname(resolved), { recursive: true });
|
|
85
|
+
await fs.writeFile(resolved, updated, 'utf-8');
|
|
86
|
+
const oldLines = old_string.split('\n').length;
|
|
87
|
+
const newLines = new_string.split('\n').length;
|
|
88
|
+
const diff = newLines - oldLines;
|
|
89
|
+
const diffLabel = diff === 0
|
|
90
|
+
? 'same line count'
|
|
91
|
+
: diff > 0
|
|
92
|
+
? `+${diff} lines`
|
|
93
|
+
: `${diff} lines`;
|
|
94
|
+
return {
|
|
95
|
+
success: true,
|
|
96
|
+
output: `Patched: ${filePath} (replaced ${old_string.length} โ ${new_string.length} chars, ${diffLabel})`,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
catch (err) {
|
|
100
|
+
return {
|
|
101
|
+
success: false,
|
|
102
|
+
output: '',
|
|
103
|
+
error: `Cannot write file: ${err.message}`,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
},
|
|
107
|
+
};
|
|
108
|
+
/** Count non-overlapping occurrences of `needle` in `haystack`. */
|
|
109
|
+
function countOccurrences(haystack, needle) {
|
|
110
|
+
if (needle.length === 0)
|
|
111
|
+
return 0;
|
|
112
|
+
let count = 0;
|
|
113
|
+
let pos = 0;
|
|
114
|
+
while ((pos = haystack.indexOf(needle, pos)) !== -1) {
|
|
115
|
+
count++;
|
|
116
|
+
pos += needle.length;
|
|
117
|
+
}
|
|
118
|
+
return count;
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=patch-file.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"patch-file.js","sourceRoot":"","sources":["../../src/tools/patch-file.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Terminal shimmer animation for thinking indicators.
|
|
3
|
+
* Creates a gentle left-to-right glow sweep effect using ANSI colours.
|
|
4
|
+
*/
|
|
5
|
+
export declare class ShimmerSpinner {
|
|
6
|
+
private interval;
|
|
7
|
+
private frame;
|
|
8
|
+
private readonly text;
|
|
9
|
+
private readonly stream;
|
|
10
|
+
private static readonly PALETTE;
|
|
11
|
+
private static readonly THINKING_FRAMES;
|
|
12
|
+
constructor(text?: string, stream?: NodeJS.WriteStream);
|
|
13
|
+
start(): void;
|
|
14
|
+
stop(clearLine?: boolean): void;
|
|
15
|
+
private render;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Show reasoning/thinking text with a distinct visual style.
|
|
19
|
+
*/
|
|
20
|
+
export declare function formatThinking(text: string): string;
|
|
21
|
+
//# sourceMappingURL=spinner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spinner.d.ts","sourceRoot":"","sources":["../../src/ui/spinner.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAA+C;IAC/D,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAG5C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAQ7B;IAEF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAKrC;gBAEU,IAAI,SAAa,EAAE,MAAM,GAAE,MAAM,CAAC,WAA4B;IAK1E,KAAK,IAAI,IAAI;IAUb,IAAI,CAAC,SAAS,UAAO,GAAG,IAAI;IAW5B,OAAO,CAAC,MAAM;CAkBf;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQnD"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
/**
|
|
3
|
+
* Terminal shimmer animation for thinking indicators.
|
|
4
|
+
* Creates a gentle left-to-right glow sweep effect using ANSI colours.
|
|
5
|
+
*/
|
|
6
|
+
export class ShimmerSpinner {
|
|
7
|
+
interval = null;
|
|
8
|
+
frame = 0;
|
|
9
|
+
text;
|
|
10
|
+
stream;
|
|
11
|
+
// Shimmer colour palette โ subtle glow sweep
|
|
12
|
+
static PALETTE = [
|
|
13
|
+
chalk.dim.gray,
|
|
14
|
+
chalk.gray,
|
|
15
|
+
chalk.white,
|
|
16
|
+
chalk.bold.white,
|
|
17
|
+
chalk.white,
|
|
18
|
+
chalk.gray,
|
|
19
|
+
chalk.dim.gray,
|
|
20
|
+
];
|
|
21
|
+
static THINKING_FRAMES = [
|
|
22
|
+
'๐ง Thinking',
|
|
23
|
+
'๐ง Thinking.',
|
|
24
|
+
'๐ง Thinking..',
|
|
25
|
+
'๐ง Thinking...',
|
|
26
|
+
];
|
|
27
|
+
constructor(text = 'Thinking', stream = process.stderr) {
|
|
28
|
+
this.text = text;
|
|
29
|
+
this.stream = stream;
|
|
30
|
+
}
|
|
31
|
+
start() {
|
|
32
|
+
if (this.interval)
|
|
33
|
+
return;
|
|
34
|
+
this.stream.write('\n');
|
|
35
|
+
this.interval = setInterval(() => {
|
|
36
|
+
this.render();
|
|
37
|
+
this.frame++;
|
|
38
|
+
}, 120);
|
|
39
|
+
}
|
|
40
|
+
stop(clearLine = true) {
|
|
41
|
+
if (!this.interval)
|
|
42
|
+
return;
|
|
43
|
+
clearInterval(this.interval);
|
|
44
|
+
this.interval = null;
|
|
45
|
+
if (clearLine) {
|
|
46
|
+
// Clear the spinner line
|
|
47
|
+
this.stream.write('\r\x1b[2K');
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
render() {
|
|
51
|
+
const palette = ShimmerSpinner.PALETTE;
|
|
52
|
+
const paletteLen = palette.length;
|
|
53
|
+
// Build the shimmer text character by character
|
|
54
|
+
const dots = ShimmerSpinner.THINKING_FRAMES[this.frame % 4];
|
|
55
|
+
let shimmer = '';
|
|
56
|
+
for (let i = 0; i < dots.length; i++) {
|
|
57
|
+
const char = dots[i];
|
|
58
|
+
// Each character gets a colour based on its position + current frame offset
|
|
59
|
+
const colourIdx = (i + this.frame) % paletteLen;
|
|
60
|
+
const colourFn = palette[colourIdx];
|
|
61
|
+
shimmer += colourFn(char);
|
|
62
|
+
}
|
|
63
|
+
this.stream.write(`\r\x1b[2K ${shimmer}`);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Show reasoning/thinking text with a distinct visual style.
|
|
68
|
+
*/
|
|
69
|
+
export function formatThinking(text) {
|
|
70
|
+
const border = chalk.dim.magenta('โ');
|
|
71
|
+
const header = chalk.dim.magenta('โโ ๐ญ Reasoning โโโโโโโโโโโโโโโโโ');
|
|
72
|
+
const footer = chalk.dim.magenta('โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ');
|
|
73
|
+
const lines = text.split('\n').map((line) => `${border} ${chalk.dim.italic(line)}`);
|
|
74
|
+
return `${header}\n${lines.join('\n')}\n${footer}`;
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=spinner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spinner.js","sourceRoot":"","sources":["../../src/ui/spinner.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED