@serjm/deepseek-code 0.3.2 → 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 (40) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/README.md +12 -0
  3. package/README.ru.md +12 -0
  4. package/dist/cli/headless.d.ts.map +1 -1
  5. package/dist/cli/headless.js +2 -0
  6. package/dist/cli/headless.js.map +1 -1
  7. package/dist/commands/index.d.ts +7 -0
  8. package/dist/commands/index.d.ts.map +1 -1
  9. package/dist/commands/index.js +130 -21
  10. package/dist/commands/index.js.map +1 -1
  11. package/dist/core/agent-loop.d.ts +26 -1
  12. package/dist/core/agent-loop.d.ts.map +1 -1
  13. package/dist/core/agent-loop.js +157 -4
  14. package/dist/core/agent-loop.js.map +1 -1
  15. package/dist/core/i18n.d.ts +2 -0
  16. package/dist/core/i18n.d.ts.map +1 -1
  17. package/dist/core/i18n.js +6 -0
  18. package/dist/core/i18n.js.map +1 -1
  19. package/dist/core/metrics.d.ts +43 -0
  20. package/dist/core/metrics.d.ts.map +1 -1
  21. package/dist/core/metrics.js +170 -6
  22. package/dist/core/metrics.js.map +1 -1
  23. package/dist/tools/chrome.js +53 -53
  24. package/dist/tools/edit.d.ts.map +1 -1
  25. package/dist/tools/edit.js +30 -8
  26. package/dist/tools/edit.js.map +1 -1
  27. package/dist/tools/types.d.ts +28 -0
  28. package/dist/tools/types.d.ts.map +1 -1
  29. package/dist/tools/types.js +10 -0
  30. package/dist/tools/types.js.map +1 -1
  31. package/dist/tools/write.d.ts.map +1 -1
  32. package/dist/tools/write.js +13 -1
  33. package/dist/tools/write.js.map +1 -1
  34. package/dist/ui/app.d.ts.map +1 -1
  35. package/dist/ui/app.js +46 -1
  36. package/dist/ui/app.js.map +1 -1
  37. package/dist/ui/input-bar.d.ts.map +1 -1
  38. package/dist/ui/input-bar.js +268 -70
  39. package/dist/ui/input-bar.js.map +1 -1
  40. package/package.json +2 -1
@@ -1,4 +1,85 @@
1
+ import { execSync } from 'node:child_process';
1
2
  import { MODEL_PRICING } from '../config/defaults.js';
3
+ /**
4
+ * Safely capture git status --porcelain output.
5
+ * Returns null outside git repos or on any error.
6
+ */
7
+ export function captureGitStatus(cwd) {
8
+ try {
9
+ const stdout = execSync('git status --porcelain', {
10
+ cwd,
11
+ encoding: 'utf-8',
12
+ timeout: 5000,
13
+ stdio: ['ignore', 'pipe', 'ignore'],
14
+ });
15
+ return parsePorcelain(stdout);
16
+ }
17
+ catch {
18
+ return null;
19
+ }
20
+ }
21
+ /**
22
+ * Parse git status --porcelain output into GitStatusSnapshot.
23
+ */
24
+ export function parsePorcelain(stdout) {
25
+ const lines = stdout.split(/\r?\n/).filter(Boolean);
26
+ const dirty = [];
27
+ const untracked = [];
28
+ const added = [];
29
+ const deleted = [];
30
+ const allMap = new Map();
31
+ for (const line of lines) {
32
+ // XY <path> or XY "<quoted path>"
33
+ const match = line.match(/^([ MADRC?!]{2})\s+(.+)$/);
34
+ if (!match)
35
+ continue;
36
+ const xy = match[1];
37
+ let path = match[2];
38
+ // Remove surrounding quotes that git adds for special characters
39
+ if (path.startsWith('"') && path.endsWith('"')) {
40
+ path = path.slice(1, -1);
41
+ }
42
+ const staged = xy[0];
43
+ const worktree = xy[1];
44
+ // Untracked: ??
45
+ if (staged === '?' && worktree === '?') {
46
+ untracked.push(path);
47
+ allMap.set(path, true);
48
+ continue;
49
+ }
50
+ // Added (staged): A<space>
51
+ if (staged === 'A') {
52
+ added.push(path);
53
+ allMap.set(path, true);
54
+ }
55
+ // Deleted: D<space> or <space>D
56
+ if (staged === 'D' || worktree === 'D') {
57
+ deleted.push(path);
58
+ allMap.set(path, true);
59
+ }
60
+ // Modified: M<space>, <space>M, MM, or renamed (R)
61
+ if (staged === 'M' || worktree === 'M' ||
62
+ staged === 'R' || worktree === 'R') {
63
+ dirty.push(path);
64
+ allMap.set(path, true);
65
+ }
66
+ // Also handle staged modifications with other indicators
67
+ if (staged !== '?' && worktree !== '?' && !['A', 'D', 'M', 'R'].includes(staged) && !['D', 'M', 'R'].includes(worktree)) {
68
+ // Anything else that's not clean: treat as dirty
69
+ if (staged !== ' ' || worktree !== ' ') {
70
+ dirty.push(path);
71
+ allMap.set(path, true);
72
+ }
73
+ }
74
+ }
75
+ return {
76
+ dirty,
77
+ untracked,
78
+ added,
79
+ deleted,
80
+ all: Array.from(allMap.keys()),
81
+ };
82
+ }
2
83
  export class MetricsCollector {
3
84
  startTime = Date.now();
4
85
  _toolCalls = 0;
@@ -8,8 +89,11 @@ export class MetricsCollector {
8
89
  _outputTokens = 0;
9
90
  _reasoningOutputTokens = 0;
10
91
  _lastInputTokens = 0;
92
+ _apiCalls = 0;
11
93
  toolTimings = new Map();
12
94
  toolCallLog = [];
95
+ _gitBaseline = null;
96
+ _gitFinal = null;
13
97
  get toolCalls() {
14
98
  return this._toolCalls;
15
99
  }
@@ -31,9 +115,25 @@ export class MetricsCollector {
31
115
  get totalTokens() {
32
116
  return this._inputTokens + this._outputTokens;
33
117
  }
118
+ get apiCalls() {
119
+ return this._apiCalls;
120
+ }
34
121
  get elapsedMs() {
35
122
  return Date.now() - this.startTime;
36
123
  }
124
+ /** Get a copy of the tool call log for budget/inspection purposes */
125
+ get toolCallLogEntries() {
126
+ return [...this.toolCallLog];
127
+ }
128
+ /** Get count of a specific tool in the call log */
129
+ getToolCallCount(name) {
130
+ return this.toolCallLog.filter(t => t.tool === name).length;
131
+ }
132
+ /** Get count of tool calls matching any of the given names */
133
+ getToolCallCountAny(names) {
134
+ const nameSet = new Set(names);
135
+ return this.toolCallLog.filter(t => nameSet.has(t.tool)).length;
136
+ }
37
137
  recordToolCallStart(toolName) {
38
138
  this.toolTimings.set(toolName, { start: Date.now() });
39
139
  }
@@ -63,6 +163,7 @@ export class MetricsCollector {
63
163
  this._reasoningOutputTokens += usage.reasoningOutput ?? 0;
64
164
  if (input > 0)
65
165
  this._lastInputTokens = input;
166
+ this._apiCalls++;
66
167
  }
67
168
  /**
68
169
  * Get current context window usage as % of max context.
@@ -104,14 +205,48 @@ export class MetricsCollector {
104
205
  const cost = this.estimatedCostUSD(model);
105
206
  const costStr = cost > 0 ? ` · $${cost.toFixed(4)}` : '';
106
207
  let summary = '\n\n━━━ Execution Summary ━━━\n';
107
- const cacheStr = this._cacheHitInputTokens > 0 || this._cacheMissInputTokens > 0
108
- ? `, cache hit: ${this._cacheHitInputTokens.toLocaleString()}, cache miss: ${this._cacheMissInputTokens.toLocaleString()}`
208
+ // API calls count
209
+ const apiCallStr = this._apiCalls > 0
210
+ ? `API calls: ${this._apiCalls}\n`
109
211
  : '';
110
- const reasoningStr = this._reasoningOutputTokens > 0 ? `, reasoning: ${this._reasoningOutputTokens.toLocaleString()}` : '';
111
- summary += `Tool uses: ${this._toolCalls} · Tokens: ${this.totalTokens.toLocaleString()} (in: ${this._inputTokens.toLocaleString()}${cacheStr}, out: ${this._outputTokens.toLocaleString()}${reasoningStr})${costStr} · Time: ${mins}m ${secs}s\n`;
112
- // Add compact tool breakdown if there were calls
212
+ summary += apiCallStr;
213
+ // Session input/output totals (sum across all API calls)
214
+ const inputStr = this._inputTokens.toLocaleString();
215
+ const outputStr = this._outputTokens.toLocaleString();
216
+ const totalStr = this.totalTokens.toLocaleString();
217
+ const reasoningStr = this._reasoningOutputTokens > 0
218
+ ? ` (reasoning: ${this._reasoningOutputTokens.toLocaleString()})`
219
+ : '';
220
+ summary += ` Session input tokens: ${inputStr}`;
221
+ if (this._cacheHitInputTokens > 0 || this._cacheMissInputTokens > 0) {
222
+ summary += ` (cache hit: ${this._cacheHitInputTokens.toLocaleString()}, cache miss: ${this._cacheMissInputTokens.toLocaleString()})`;
223
+ }
224
+ summary += '\n';
225
+ summary += ` Session output tokens: ${outputStr}${reasoningStr}\n`;
226
+ summary += ` Session total tokens: ${totalStr}\n`;
227
+ // Last request context window (the actual size of the last prompt)
228
+ const contextPercent = this.getCurrentWindowPercent();
229
+ if (contextPercent > 0 && this._lastInputTokens > 0) {
230
+ summary += `\nLast request context: ${this._lastInputTokens.toLocaleString()} tokens (${contextPercent}% of 128k window)\n`;
231
+ }
232
+ // Git change report
233
+ const gitReport = this.getGitChangeReport();
234
+ if (gitReport && (gitReport.duringRun.length > 0 || gitReport.newUntracked.length > 0 || gitReport.beforeRun.length > 0)) {
235
+ const formatList = (items) => {
236
+ if (items.length === 0)
237
+ return '(none)';
238
+ const limited = items.slice(0, 10);
239
+ const suffix = items.length > 10 ? ', ... +' + (items.length - 10) + ' more' : '';
240
+ return limited.join(', ') + suffix;
241
+ };
242
+ summary += '\nFiles:\n';
243
+ summary += ` changed during run: ${formatList(gitReport.duringRun)}\n`;
244
+ summary += ` new untracked: ${formatList(gitReport.newUntracked)}\n`;
245
+ summary += ` dirty before run: ${formatList(gitReport.beforeRun)}\n`;
246
+ }
247
+ // Tool breakdown
113
248
  if (this.toolCallLog.length > 0) {
114
- // Group by tool name for compact display
249
+ summary += '\n';
115
250
  const groups = new Map();
116
251
  for (const call of this.toolCallLog) {
117
252
  const g = groups.get(call.tool) ?? { count: 0, totalDuration: 0, success: 0, fail: 0 };
@@ -127,6 +262,7 @@ export class MetricsCollector {
127
262
  }
128
263
  summary += `Tools: ${Array.from(groups.entries()).map(([name, g]) => `${name} x${g.count}${g.fail > 0 ? ` (${g.success} ok ${g.fail} failed)` : ''}`).join(', ')}\n`;
129
264
  }
265
+ summary += `Time: ${mins}m ${secs}s${costStr}\n`;
130
266
  summary += '━━━━━━━━━━━━━━━━━━━━━━━━━━\n';
131
267
  return summary;
132
268
  }
@@ -139,8 +275,36 @@ export class MetricsCollector {
139
275
  this._outputTokens = 0;
140
276
  this._reasoningOutputTokens = 0;
141
277
  this._lastInputTokens = 0;
278
+ this._apiCalls = 0;
142
279
  this.toolTimings.clear();
143
280
  this.toolCallLog = [];
281
+ this._gitBaseline = null;
282
+ this._gitFinal = null;
283
+ }
284
+ /** Capture git baseline at the start of a session. */
285
+ captureGitBaseline(cwd) {
286
+ this._gitBaseline = captureGitStatus(cwd);
287
+ }
288
+ /** Capture git final at the end of a session. */
289
+ captureGitFinal(cwd) {
290
+ this._gitFinal = captureGitStatus(cwd);
291
+ }
292
+ /**
293
+ * Get a structured change report comparing baseline and final statuses.
294
+ * Returns null if either baseline or final hasn't been captured.
295
+ */
296
+ getGitChangeReport() {
297
+ if (this._gitBaseline === null || this._gitFinal === null)
298
+ return null;
299
+ const baselineSet = new Set(this._gitBaseline.all);
300
+ const baselineUntrackedSet = new Set(this._gitBaseline.untracked);
301
+ const duringRun = this._gitFinal.all.filter(p => !baselineSet.has(p));
302
+ const newUntracked = this._gitFinal.untracked.filter(p => !baselineUntrackedSet.has(p));
303
+ return {
304
+ beforeRun: [...this._gitBaseline.all],
305
+ duringRun,
306
+ newUntracked,
307
+ };
144
308
  }
145
309
  }
146
310
  //# sourceMappingURL=metrics.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../src/core/metrics.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../src/core/metrics.ts"],"names":[],"mappings":"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"}
@@ -576,26 +576,26 @@ export function getLastBrowserTestResult() {
576
576
  * Returns the server and the URL.
577
577
  */
578
578
  async function startTestServer() {
579
- const html = `<!DOCTYPE html>
580
- <html lang="en">
581
- <head><meta charset="UTF-8"><title>Browser Test Page</title></head>
582
- <body>
583
- <h1 id="test-title">Browser Test</h1>
584
- <p id="test-paragraph">Hello, world!</p>
585
- <button id="test-button" onclick="document.getElementById('test-output').textContent='clicked'">Click Me</button>
586
- <input id="test-input" type="text" placeholder="Type here">
587
- <label><input type="checkbox" id="test-checkbox" checked> Checkbox</label>
588
- <label><input type="radio" name="test-radio" id="radio-1" checked> Radio 1</label>
589
- <label><input type="radio" name="test-radio" id="radio-2"> Radio 2</label>
590
- <div id="test-output"></div>
591
- <script>
592
- console.log('Browser test page loaded');
593
- console.error('Test error message');
594
- localStorage.setItem('test-key', 'test-value');
595
- sessionStorage.setItem('session-key', 'session-value');
596
- document.cookie = 'test-cookie=chocolate-chip; path=/';
597
- </script>
598
- </body>
579
+ const html = `<!DOCTYPE html>
580
+ <html lang="en">
581
+ <head><meta charset="UTF-8"><title>Browser Test Page</title></head>
582
+ <body>
583
+ <h1 id="test-title">Browser Test</h1>
584
+ <p id="test-paragraph">Hello, world!</p>
585
+ <button id="test-button" onclick="document.getElementById('test-output').textContent='clicked'">Click Me</button>
586
+ <input id="test-input" type="text" placeholder="Type here">
587
+ <label><input type="checkbox" id="test-checkbox" checked> Checkbox</label>
588
+ <label><input type="radio" name="test-radio" id="radio-1" checked> Radio 1</label>
589
+ <label><input type="radio" name="test-radio" id="radio-2"> Radio 2</label>
590
+ <div id="test-output"></div>
591
+ <script>
592
+ console.log('Browser test page loaded');
593
+ console.error('Test error message');
594
+ localStorage.setItem('test-key', 'test-value');
595
+ sessionStorage.setItem('session-key', 'session-value');
596
+ document.cookie = 'test-cookie=chocolate-chip; path=/';
597
+ </script>
598
+ </body>
599
599
  </html>`;
600
600
  return new Promise((resolve, reject) => {
601
601
  const server = createServer((_req, res) => {
@@ -668,23 +668,23 @@ export async function browserTest(options) {
668
668
  }
669
669
  if (!testUrl) {
670
670
  // Fall back to data: URL for basic tests, skip storage/network
671
- const dataUrl = `data:text/html,<!DOCTYPE html>
672
- <html lang="en">
673
- <head><meta charset="UTF-8"><title>Browser Test Page</title></head>
674
- <body>
675
- <h1 id="test-title">Browser Test</h1>
676
- <p id="test-paragraph">Hello, world!</p>
677
- <button id="test-button" onclick="document.getElementById('test-output').textContent='clicked'">Click Me</button>
678
- <input id="test-input" type="text" placeholder="Type here">
679
- <label><input type="checkbox" id="test-checkbox" checked> Checkbox</label>
680
- <label><input type="radio" name="test-radio" id="radio-1" checked> Radio 1</label>
681
- <label><input type="radio" name="test-radio" id="radio-2"> Radio 2</label>
682
- <div id="test-output"></div>
683
- <script>
684
- console.log('Browser test page loaded');
685
- console.error('Test error message');
686
- </script>
687
- </body>
671
+ const dataUrl = `data:text/html,<!DOCTYPE html>
672
+ <html lang="en">
673
+ <head><meta charset="UTF-8"><title>Browser Test Page</title></head>
674
+ <body>
675
+ <h1 id="test-title">Browser Test</h1>
676
+ <p id="test-paragraph">Hello, world!</p>
677
+ <button id="test-button" onclick="document.getElementById('test-output').textContent='clicked'">Click Me</button>
678
+ <input id="test-input" type="text" placeholder="Type here">
679
+ <label><input type="checkbox" id="test-checkbox" checked> Checkbox</label>
680
+ <label><input type="radio" name="test-radio" id="radio-1" checked> Radio 1</label>
681
+ <label><input type="radio" name="test-radio" id="radio-2"> Radio 2</label>
682
+ <div id="test-output"></div>
683
+ <script>
684
+ console.log('Browser test page loaded');
685
+ console.error('Test error message');
686
+ </script>
687
+ </body>
688
688
  </html>`;
689
689
  const baseArgs = { url: dataUrl, sameTab: true, timeout: 30000 };
690
690
  async function runDataStep(name, action, extraArgs) {
@@ -1026,22 +1026,22 @@ function buildRealTestReport(results, totalCalls, totalSites) {
1026
1026
  }
1027
1027
  export const chromeTool = {
1028
1028
  name: 'chrome',
1029
- description: `Control a real browser through a native Chrome runtime.
1030
- Use it for UI validation, rendered DOM inspection, console and network debugging,
1031
- screenshots, and multi-step browser workflows when terminal tools are not enough.
1032
- If the task mentions localhost pages, forms, browser bugs, screenshots, rendered state,
1033
- console output, or network requests, this is the primary tool.
1034
-
1035
- Examples:
1036
- - { "action": "open", "url": "https://example.com" }
1037
- - { "action": "text", "url": "https://example.com", "selector": "h1" }
1038
- - { "action": "click", "url": "https://example.com", "selector": ".submit-btn" }
1039
- - { "action": "fill", "url": "https://example.com/login", "selector": "#email", "text": "user@example.com" }
1040
- - { "action": "eval", "url": "https://example.com", "code": "document.title" }
1041
- - { "action": "network", "url": "https://example.com", "api": true }
1042
- - { "action": "state" }
1043
- - { "action": "shot", "url": "https://example.com", "output": "screenshot.png", "full": true }
1044
- - Use "sameTab": true for multi-step flows in one tab.
1029
+ description: `Control a real browser through a native Chrome runtime.
1030
+ Use it for UI validation, rendered DOM inspection, console and network debugging,
1031
+ screenshots, and multi-step browser workflows when terminal tools are not enough.
1032
+ If the task mentions localhost pages, forms, browser bugs, screenshots, rendered state,
1033
+ console output, or network requests, this is the primary tool.
1034
+
1035
+ Examples:
1036
+ - { "action": "open", "url": "https://example.com" }
1037
+ - { "action": "text", "url": "https://example.com", "selector": "h1" }
1038
+ - { "action": "click", "url": "https://example.com", "selector": ".submit-btn" }
1039
+ - { "action": "fill", "url": "https://example.com/login", "selector": "#email", "text": "user@example.com" }
1040
+ - { "action": "eval", "url": "https://example.com", "code": "document.title" }
1041
+ - { "action": "network", "url": "https://example.com", "api": true }
1042
+ - { "action": "state" }
1043
+ - { "action": "shot", "url": "https://example.com", "output": "screenshot.png", "full": true }
1044
+ - Use "sameTab": true for multi-step flows in one tab.
1045
1045
  - Use "headless": true for automation or CI-safe browser execution.`,
1046
1046
  parameters: chromeParameters,
1047
1047
  execute: async (args) => {
@@ -1 +1 @@
1
- {"version":3,"file":"edit.d.ts","sourceRoot":"","sources":["../../src/tools/edit.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,IAAI,EAAmB,MAAM,YAAY,CAAA;AAGvD,eAAO,MAAM,QAAQ,EAAE,IA6EtB,CAAA"}
1
+ {"version":3,"file":"edit.d.ts","sourceRoot":"","sources":["../../src/tools/edit.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,IAAI,EAAmB,MAAM,YAAY,CAAA;AAGvD,eAAO,MAAM,QAAQ,EAAE,IAoGtB,CAAA"}
@@ -37,6 +37,18 @@ export const editTool = {
37
37
  try {
38
38
  assertPathInWorkspace(filePath);
39
39
  const content = await readFile(filePath, 'utf-8');
40
+ // Check if old_string exists
41
+ const index = content.indexOf(oldString);
42
+ if (index === -1) {
43
+ return {
44
+ success: false,
45
+ output: '',
46
+ error: 'String not found in file',
47
+ changed: false,
48
+ verified: false,
49
+ changedFiles: [],
50
+ };
51
+ }
40
52
  if (replaceAll) {
41
53
  const replaced = content.replaceAll(oldString, newString);
42
54
  if (replaced === content) {
@@ -44,28 +56,35 @@ export const editTool = {
44
56
  success: false,
45
57
  output: '',
46
58
  error: 'String not found in file',
59
+ changed: false,
60
+ verified: false,
61
+ changedFiles: [],
47
62
  };
48
63
  }
49
64
  await writeFile(filePath, replaced, 'utf-8');
65
+ // Verify by re-reading
66
+ const writtenContent = await readFile(filePath, 'utf-8');
67
+ const verified = writtenContent === replaced;
50
68
  return {
51
69
  success: true,
52
70
  output: `Replaced all occurrences in ${filePath}`,
71
+ changed: true,
72
+ verified,
73
+ changedFiles: [filePath],
53
74
  };
54
75
  }
55
76
  else {
56
- const index = content.indexOf(oldString);
57
- if (index === -1) {
58
- return {
59
- success: false,
60
- output: '',
61
- error: 'String not found in file',
62
- };
63
- }
64
77
  const replaced = content.replace(oldString, newString);
65
78
  await writeFile(filePath, replaced, 'utf-8');
79
+ // Verify by re-reading
80
+ const writtenContent = await readFile(filePath, 'utf-8');
81
+ const verified = writtenContent === replaced;
66
82
  return {
67
83
  success: true,
68
84
  output: `Successfully edited ${filePath}`,
85
+ changed: true,
86
+ verified,
87
+ changedFiles: [filePath],
69
88
  };
70
89
  }
71
90
  }
@@ -74,6 +93,9 @@ export const editTool = {
74
93
  success: false,
75
94
  output: '',
76
95
  error: `Failed to edit file: ${err.message}`,
96
+ changed: false,
97
+ verified: false,
98
+ changedFiles: [],
77
99
  };
78
100
  }
79
101
  },
@@ -1 +1 @@
1
- {"version":3,"file":"edit.js","sourceRoot":"","sources":["../../src/tools/edit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAEtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAA;AAExD,MAAM,CAAC,MAAM,QAAQ,GAAS;IAC5B,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,iFAAiF;IAC9F,UAAU,EAAE;QACV;YACE,IAAI,EAAE,WAAW;YACjB,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,uCAAuC;YACpD,QAAQ,EAAE,IAAI;SACf;QACD;YACE,IAAI,EAAE,YAAY;YAClB,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,2BAA2B;YACxC,QAAQ,EAAE,IAAI;SACf;QACD;YACE,IAAI,EAAE,YAAY;YAClB,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,sBAAsB;YACnC,QAAQ,EAAE,IAAI;SACf;QACD;YACE,IAAI,EAAE,aAAa;YACnB,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,mDAAmD;YAChE,QAAQ,EAAE,KAAK;SAChB;KACF;IACD,KAAK,CAAC,OAAO,CAAE,IAA6B;QAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAmB,CAAA;QACzC,MAAM,SAAS,GAAG,IAAI,CAAC,UAAoB,CAAA;QAC3C,MAAM,SAAS,GAAG,IAAI,CAAC,UAAoB,CAAA;QAC3C,MAAM,UAAU,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,CAAA;QAErC,IAAI,CAAC;YACH,qBAAqB,CAAC,QAAQ,CAAC,CAAA;YAC/B,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;YAEjD,IAAI,UAAU,EAAE,CAAC;gBACf,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;gBACzD,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;oBACzB,OAAO;wBACL,OAAO,EAAE,KAAK;wBACd,MAAM,EAAE,EAAE;wBACV,KAAK,EAAE,0BAA0B;qBAClC,CAAA;gBACH,CAAC;gBACD,MAAM,SAAS,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAA;gBAC5C,OAAO;oBACL,OAAO,EAAE,IAAI;oBACb,MAAM,EAAE,+BAA+B,QAAQ,EAAE;iBAClD,CAAA;YACH,CAAC;iBAAM,CAAC;gBACN,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;gBACxC,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;oBACjB,OAAO;wBACL,OAAO,EAAE,KAAK;wBACd,MAAM,EAAE,EAAE;wBACV,KAAK,EAAE,0BAA0B;qBAClC,CAAA;gBACH,CAAC;gBACD,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;gBACtD,MAAM,SAAS,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAA;gBAC5C,OAAO;oBACL,OAAO,EAAE,IAAI;oBACb,MAAM,EAAE,uBAAuB,QAAQ,EAAE;iBAC1C,CAAA;YACH,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,EAAE;gBACV,KAAK,EAAE,wBAAyB,GAAa,CAAC,OAAO,EAAE;aACxD,CAAA;QACH,CAAC;IACH,CAAC;CACF,CAAA"}
1
+ {"version":3,"file":"edit.js","sourceRoot":"","sources":["../../src/tools/edit.ts"],"names":[],"mappings":"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"}
@@ -14,12 +14,40 @@ export interface ToolResult {
14
14
  success: boolean;
15
15
  output: string;
16
16
  error?: string;
17
+ /** Whether the tool actually changed something (e.g., file written/modified) */
18
+ changed?: boolean;
19
+ /** Whether the change was verified by re-reading from disk */
20
+ verified?: boolean;
21
+ /** List of files that were changed */
22
+ changedFiles?: string[];
17
23
  }
18
24
  export type ApprovalRequirement = 'always' | 'auto' | 'never';
25
+ /**
26
+ * Budget limits for a task session.
27
+ * All values are optional — unset means unlimited.
28
+ * 0 is treated as "no limit" (falsy check).
29
+ */
30
+ export interface TaskBudget {
31
+ /** Maximum total tool calls across all iterations */
32
+ maxToolCalls?: number;
33
+ /** Maximum API calls (round trips to model) */
34
+ maxApiCalls?: number;
35
+ /** Maximum iterations (overrides AgentLoopOptions.maxIterations if set) */
36
+ maxIterations?: number;
37
+ /** Maximum calls to read_file tool */
38
+ maxReadFiles?: number;
39
+ /** Maximum calls to shell/bash/run_shell_command tools */
40
+ maxShellCommands?: number;
41
+ }
19
42
  export interface ToolDefinition {
20
43
  tool: Tool;
21
44
  approval: ApprovalRequirement;
22
45
  }
46
+ /**
47
+ * Preset budget for small/audit tasks (headless mode).
48
+ * Limits tool calls, API calls, read_file, and shell commands.
49
+ */
50
+ export declare const AUDIT_BUDGET_PRESET: TaskBudget;
23
51
  /**
24
52
  * OpenAI-compatible tool format for DeepSeek API function calling.
25
53
  */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/tools/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,IAAI;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;CAC7D;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC;IAC3D,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,mBAAmB,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAA;AAE7D,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,IAAI,CAAC;IACX,QAAQ,EAAE,mBAAmB,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ,CAAC;YACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACpC,QAAQ,EAAE,MAAM,EAAE,CAAC;SACpB,CAAC;KACH,CAAC;CACH;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAE,WAAW,EAAE,cAAc,EAAE,GAAG,UAAU,EAAE,CA4B1E;AAKD;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,EAAE,aAAa,EAAE,GACtB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAyDzB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/tools/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,IAAI;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;CAC7D;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC;IAC3D,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gFAAgF;IAChF,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,sCAAsC;IACtC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,MAAM,mBAAmB,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAA;AAE7D;;;;GAIG;AACH,MAAM,WAAW,UAAU;IACzB,qDAAqD;IACrD,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,+CAA+C;IAC/C,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,2EAA2E;IAC3E,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,sCAAsC;IACtC,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,0DAA0D;IAC1D,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC1B;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,IAAI,CAAC;IACX,QAAQ,EAAE,mBAAmB,CAAC;CAC/B;AAED;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAE,UAKjC,CAAA;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ,CAAC;YACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACpC,QAAQ,EAAE,MAAM,EAAE,CAAC;SACpB,CAAC;KACH,CAAC;CACH;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAE,WAAW,EAAE,cAAc,EAAE,GAAG,UAAU,EAAE,CA4B1E;AAKD;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,EAAE,aAAa,EAAE,GACtB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAyDzB"}
@@ -1,3 +1,13 @@
1
+ /**
2
+ * Preset budget for small/audit tasks (headless mode).
3
+ * Limits tool calls, API calls, read_file, and shell commands.
4
+ */
5
+ export const AUDIT_BUDGET_PRESET = {
6
+ maxToolCalls: 12,
7
+ maxApiCalls: 6,
8
+ maxReadFiles: 5,
9
+ maxShellCommands: 4,
10
+ };
1
11
  /**
2
12
  * Convert our internal ToolDefinition[] to OpenAI-compatible tool format.
3
13
  */
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/tools/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/tools/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"write.d.ts","sourceRoot":"","sources":["../../src/tools/write.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,IAAI,EAAmB,MAAM,YAAY,CAAA;AAKvD,eAAO,MAAM,SAAS,EAAE,IA8CvB,CAAA"}
1
+ {"version":3,"file":"write.d.ts","sourceRoot":"","sources":["../../src/tools/write.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,IAAI,EAAmB,MAAM,YAAY,CAAA;AAKvD,eAAO,MAAM,SAAS,EAAE,IA4DvB,CAAA"}
@@ -1,4 +1,4 @@
1
- import { writeFile, mkdir } from 'node:fs/promises';
1
+ import { writeFile, readFile, mkdir } from 'node:fs/promises';
2
2
  import { dirname } from 'node:path';
3
3
  import { assertPathInWorkspace } from './path-safety.js';
4
4
  const MAX_FILE_SIZE = 1_048_576; // 1MB limit
@@ -28,15 +28,24 @@ export const writeTool = {
28
28
  success: false,
29
29
  output: '',
30
30
  error: `File too large: ${content.length} bytes exceeds the maximum of ${MAX_FILE_SIZE} bytes (1MB). Use run_shell_command to write large files.`,
31
+ changed: false,
32
+ verified: false,
33
+ changedFiles: [],
31
34
  };
32
35
  }
33
36
  try {
34
37
  assertPathInWorkspace(filePath);
35
38
  await mkdir(dirname(filePath), { recursive: true });
36
39
  await writeFile(filePath, content, 'utf-8');
40
+ // Verify by re-reading the file
41
+ const writtenContent = await readFile(filePath, 'utf-8');
42
+ const verified = writtenContent === content;
37
43
  return {
38
44
  success: true,
39
45
  output: `Successfully wrote ${content.length} bytes to ${filePath}`,
46
+ changed: true,
47
+ verified,
48
+ changedFiles: [filePath],
40
49
  };
41
50
  }
42
51
  catch (err) {
@@ -44,6 +53,9 @@ export const writeTool = {
44
53
  success: false,
45
54
  output: '',
46
55
  error: `Failed to write file: ${err.message}`,
56
+ changed: false,
57
+ verified: false,
58
+ changedFiles: [],
47
59
  };
48
60
  }
49
61
  },
@@ -1 +1 @@
1
- {"version":3,"file":"write.js","sourceRoot":"","sources":["../../src/tools/write.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEnC,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAA;AAExD,MAAM,aAAa,GAAG,SAAS,CAAA,CAAC,YAAY;AAE5C,MAAM,CAAC,MAAM,SAAS,GAAS;IAC7B,IAAI,EAAE,YAAY;IAClB,WAAW,EAAE,iFAAiF;IAC9F,UAAU,EAAE;QACV;YACE,IAAI,EAAE,WAAW;YACjB,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,wCAAwC;YACrD,QAAQ,EAAE,IAAI;SACf;QACD;YACE,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,kCAAkC;YAC/C,QAAQ,EAAE,IAAI;SACf;KACF;IACD,KAAK,CAAC,OAAO,CAAE,IAA6B;QAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAmB,CAAA;QACzC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAiB,CAAA;QAEtC,mBAAmB;QACnB,IAAI,OAAO,CAAC,MAAM,GAAG,aAAa,EAAE,CAAC;YACnC,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,EAAE;gBACV,KAAK,EAAE,mBAAmB,OAAO,CAAC,MAAM,iCAAiC,aAAa,2DAA2D;aAClJ,CAAA;QACH,CAAC;QAED,IAAI,CAAC;YACH,qBAAqB,CAAC,QAAQ,CAAC,CAAA;YAC/B,MAAM,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;YACnD,MAAM,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;YAC3C,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,sBAAsB,OAAO,CAAC,MAAM,aAAa,QAAQ,EAAE;aACpE,CAAA;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,EAAE;gBACV,KAAK,EAAE,yBAA0B,GAAa,CAAC,OAAO,EAAE;aACzD,CAAA;QACH,CAAC;IACH,CAAC;CACF,CAAA"}
1
+ {"version":3,"file":"write.js","sourceRoot":"","sources":["../../src/tools/write.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEnC,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAA;AAExD,MAAM,aAAa,GAAG,SAAS,CAAA,CAAC,YAAY;AAE5C,MAAM,CAAC,MAAM,SAAS,GAAS;IAC7B,IAAI,EAAE,YAAY;IAClB,WAAW,EAAE,iFAAiF;IAC9F,UAAU,EAAE;QACV;YACE,IAAI,EAAE,WAAW;YACjB,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,wCAAwC;YACrD,QAAQ,EAAE,IAAI;SACf;QACD;YACE,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,kCAAkC;YAC/C,QAAQ,EAAE,IAAI;SACf;KACF;IACD,KAAK,CAAC,OAAO,CAAE,IAA6B;QAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAmB,CAAA;QACzC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAiB,CAAA;QAEtC,mBAAmB;QACnB,IAAI,OAAO,CAAC,MAAM,GAAG,aAAa,EAAE,CAAC;YACnC,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,EAAE;gBACV,KAAK,EAAE,mBAAmB,OAAO,CAAC,MAAM,iCAAiC,aAAa,2DAA2D;gBACjJ,OAAO,EAAE,KAAK;gBACd,QAAQ,EAAE,KAAK;gBACf,YAAY,EAAE,EAAE;aACjB,CAAA;QACH,CAAC;QAED,IAAI,CAAC;YACH,qBAAqB,CAAC,QAAQ,CAAC,CAAA;YAC/B,MAAM,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;YACnD,MAAM,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;YAE3C,gCAAgC;YAChC,MAAM,cAAc,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;YACxD,MAAM,QAAQ,GAAG,cAAc,KAAK,OAAO,CAAA;YAE3C,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,sBAAsB,OAAO,CAAC,MAAM,aAAa,QAAQ,EAAE;gBACnE,OAAO,EAAE,IAAI;gBACb,QAAQ;gBACR,YAAY,EAAE,CAAC,QAAQ,CAAC;aACzB,CAAA;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,EAAE;gBACV,KAAK,EAAE,yBAA0B,GAAa,CAAC,OAAO,EAAE;gBACxD,OAAO,EAAE,KAAK;gBACd,QAAQ,EAAE,KAAK;gBACf,YAAY,EAAE,EAAE;aACjB,CAAA;QACH,CAAC;IACH,CAAC;CACF,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../src/ui/app.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAgB,MAAM,uBAAuB,CAAA;AAGzE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAkB3D,UAAU,QAAQ;IAChB,MAAM,EAAE,cAAc,CAAC;IACvB,OAAO,EAAE,cAAc,CAAC;CACzB;AA4BD,wBAAgB,GAAG,CAAE,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,QAAQ,2CAg7BjD"}
1
+ {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../src/ui/app.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAgB,MAAM,uBAAuB,CAAA;AAGzE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAmB3D,UAAU,QAAQ;IAChB,MAAM,EAAE,cAAc,CAAC;IACvB,OAAO,EAAE,cAAc,CAAC;CACzB;AA4BD,wBAAgB,GAAG,CAAE,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,QAAQ,2CAm/BjD"}