tandem-mode 0.4.0 → 0.5.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/README.md +257 -233
- package/dist/agent/clipboard.js +37 -37
- package/dist/agent/clipboard.js.map +1 -1
- package/dist/agent/loop.js +52 -16
- package/dist/agent/loop.js.map +1 -1
- package/dist/agent/session.js +2 -2
- package/dist/agent/session.js.map +1 -1
- package/dist/agent/tools/edit.js +1 -1
- package/dist/agent/tools/edit.js.map +1 -1
- package/dist/agent/tools/listDir.js +49 -6
- package/dist/agent/tools/listDir.js.map +1 -1
- package/dist/agent/tools/safeCommand.js +70 -0
- package/dist/agent/tools/safeCommand.js.map +1 -0
- package/dist/agent/tools/search.js +5 -6
- package/dist/agent/tools/search.js.map +1 -1
- package/dist/agent/tools/searchFallback.js +162 -0
- package/dist/agent/tools/searchFallback.js.map +1 -0
- package/dist/agent/tools/shell.js +3 -13
- package/dist/agent/tools/shell.js.map +1 -1
- package/dist/agent/tools/viewImage.js +2 -2
- package/dist/agent/tools/viewImage.js.map +1 -1
- package/dist/agent/tools/webSearch.js +2 -2
- package/dist/agent/tools/webSearch.js.map +1 -1
- package/dist/agent/usage.js +2 -2
- package/dist/agent/usage.js.map +1 -1
- package/dist/benchmark/runner.js +8 -8
- package/dist/benchmark/runner.js.map +1 -1
- package/dist/cli.js +118 -19
- package/dist/cli.js.map +1 -1
- package/dist/config/credentials.js +37 -37
- package/dist/config/credentials.js.map +1 -1
- package/dist/config/env.js +1 -1
- package/dist/config/schema.js +1 -0
- package/dist/config/schema.js.map +1 -1
- package/dist/config/store.js +1 -1
- package/dist/config/store.js.map +1 -1
- package/dist/deepseek/client.js +7 -2
- package/dist/deepseek/client.js.map +1 -1
- package/dist/deepseek/errors.js +101 -0
- package/dist/deepseek/errors.js.map +1 -0
- package/dist/deepseek/webSearch.js +3 -3
- package/dist/deepseek/webSearch.js.map +1 -1
- package/dist/i18n/en.js +30 -19
- package/dist/i18n/en.js.map +1 -1
- package/dist/i18n/sr.js +30 -19
- package/dist/i18n/sr.js.map +1 -1
- package/dist/orchestrator/planner.js +14 -14
- package/dist/orchestrator/repoMap.js +1 -1
- package/dist/orchestrator/reviewer.js +14 -14
- package/dist/orchestrator/reviewer.js.map +1 -1
- package/dist/repl/commands.js +1 -0
- package/dist/repl/commands.js.map +1 -1
- package/dist/ui/status.js +37 -0
- package/dist/ui/status.js.map +1 -0
- package/dist/ui/toolFormat.js +95 -0
- package/dist/ui/toolFormat.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"searchFallback.js","sourceRoot":"","sources":["../../../src/agent/tools/searchFallback.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,19 +1,8 @@
|
|
|
1
1
|
import { spawn } from "node:child_process";
|
|
2
|
+
import { isReadOnlyCommand } from "./safeCommand.js";
|
|
2
3
|
const MAX_OUTPUT_CHARS = 20_000;
|
|
3
4
|
const HARD_MAX_BUFFER_CHARS = 5_000_000;
|
|
4
5
|
const TIMEOUT_MS = 120_000;
|
|
5
|
-
// Konzervativna bela lista — read-only komande koje ne traže odobrenje.
|
|
6
|
-
// Sve što ne poklopi ovde se tretira kao destruktivno; bolje suvišno
|
|
7
|
-
// pitati nego tiho izvršiti nešto nepovratno.
|
|
8
|
-
const SAFE_COMMAND_PATTERNS = [
|
|
9
|
-
/^git\s+(status|log|diff|show|branch|remote(\s+-v)?)\b/i,
|
|
10
|
-
/^(ls|dir)\b/i,
|
|
11
|
-
/^pwd$/i,
|
|
12
|
-
/^(cat|type)\s+\S/i,
|
|
13
|
-
/^echo\s+/i,
|
|
14
|
-
/^(php|node|npm|pnpm|npx|python|python3)\s+(-v|--version|-l)\b/i,
|
|
15
|
-
/^(which|where)\s+\S/i,
|
|
16
|
-
];
|
|
17
6
|
/**
|
|
18
7
|
* `child.kill()` only stops the shell itself; a command it started (node, curl, ...)
|
|
19
8
|
* keeps running and keeps the pipes open, which holds the whole CLI process open
|
|
@@ -102,7 +91,8 @@ export const shellTool = {
|
|
|
102
91
|
},
|
|
103
92
|
isDestructive(args) {
|
|
104
93
|
const command = String(args["command"] ?? "").trim();
|
|
105
|
-
|
|
94
|
+
// Conservative: only a command made entirely of known read-only parts skips the approval prompt.
|
|
95
|
+
return !isReadOnlyCommand(command);
|
|
106
96
|
},
|
|
107
97
|
async execute(args, ctx) {
|
|
108
98
|
const command = String(args["command"] ?? "");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shell.js","sourceRoot":"","sources":["../../../src/agent/tools/shell.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAqB,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"shell.js","sourceRoot":"","sources":["../../../src/agent/tools/shell.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,8 +21,8 @@ export const viewImageTool = {
|
|
|
21
21
|
const resolved = path.resolve(ctx.cwd, imagePath);
|
|
22
22
|
try {
|
|
23
23
|
const { text, usage } = await describeImage(ctx.env, resolved, question, ctx.signal);
|
|
24
|
-
// vision-exp
|
|
25
|
-
//
|
|
24
|
+
// vision-exp has no published price list; the cost is reported at the Flash
|
|
25
|
+
// rate as the best available estimate (the actual token counts are exact).
|
|
26
26
|
ctx.usage.add("deepseek-v4-flash", usage);
|
|
27
27
|
return { output: text, isError: false };
|
|
28
28
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"viewImage.js","sourceRoot":"","sources":["../../../src/agent/tools/viewImage.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAGzD,MAAM,CAAC,MAAM,aAAa,GAAmB;IAC3C,IAAI,EAAE,YAAY;IAClB,WAAW,EACT,+NAA+N;IACjO,UAAU,EAAE;QACV,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,oBAAoB,EAAE;YAC3D,QAAQ,EAAE;gBACR,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,0GAA0G;aACxH;SACF;QACD,QAAQ,EAAE,CAAC,MAAM,CAAC;KACnB;IACD,aAAa,EAAE,GAAG,EAAE,CAAC,KAAK;IAC1B,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG;QACrB,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACzE,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QAElD,IAAI,CAAC;YACH,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;YACrF,
|
|
1
|
+
{"version":3,"file":"viewImage.js","sourceRoot":"","sources":["../../../src/agent/tools/viewImage.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAGzD,MAAM,CAAC,MAAM,aAAa,GAAmB;IAC3C,IAAI,EAAE,YAAY;IAClB,WAAW,EACT,+NAA+N;IACjO,UAAU,EAAE;QACV,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,oBAAoB,EAAE;YAC3D,QAAQ,EAAE;gBACR,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,0GAA0G;aACxH;SACF;QACD,QAAQ,EAAE,CAAC,MAAM,CAAC;KACnB;IACD,aAAa,EAAE,GAAG,EAAE,CAAC,KAAK;IAC1B,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG;QACrB,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACzE,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QAElD,IAAI,CAAC;YACH,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;YACrF,4EAA4E;YAC5E,2EAA2E;YAC3E,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC;YAC1C,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QAC1C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,EAAE,MAAM,EAAE,yBAA0B,GAAa,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QACtF,CAAC;IACH,CAAC;CACF,CAAC"}
|
|
@@ -14,8 +14,8 @@ export const webSearchTool = {
|
|
|
14
14
|
const query = String(args["query"] ?? "");
|
|
15
15
|
try {
|
|
16
16
|
const { text, usage } = await runWebSearch(ctx.env, query, ctx.signal);
|
|
17
|
-
// Responses API
|
|
18
|
-
//
|
|
17
|
+
// The Responses API has no separate published price list; the cost is reported at
|
|
18
|
+
// the Flash rate as the best available estimate (the actual token counts are exact).
|
|
19
19
|
ctx.usage.add("deepseek-v4-flash", usage);
|
|
20
20
|
return { output: text, isError: false };
|
|
21
21
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webSearch.js","sourceRoot":"","sources":["../../../src/agent/tools/webSearch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAG3D,MAAM,CAAC,MAAM,aAAa,GAAmB;IAC3C,IAAI,EAAE,YAAY;IAClB,WAAW,EACT,uKAAuK;IACzK,UAAU,EAAE;QACV,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,eAAe,EAAE;SACxD;QACD,QAAQ,EAAE,CAAC,OAAO,CAAC;KACpB;IACD,aAAa,EAAE,GAAG,EAAE,CAAC,KAAK;IAC1B,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG;QACrB,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QAC1C,IAAI,CAAC;YACH,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;YACvE,
|
|
1
|
+
{"version":3,"file":"webSearch.js","sourceRoot":"","sources":["../../../src/agent/tools/webSearch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAG3D,MAAM,CAAC,MAAM,aAAa,GAAmB;IAC3C,IAAI,EAAE,YAAY;IAClB,WAAW,EACT,uKAAuK;IACzK,UAAU,EAAE;QACV,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,eAAe,EAAE;SACxD;QACD,QAAQ,EAAE,CAAC,OAAO,CAAC;KACpB;IACD,aAAa,EAAE,GAAG,EAAE,CAAC,KAAK;IAC1B,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG;QACrB,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QAC1C,IAAI,CAAC;YACH,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;YACvE,kFAAkF;YAClF,qFAAqF;YACrF,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC;YAC1C,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QAC1C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,EAAE,MAAM,EAAE,iBAAkB,GAAa,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC9E,CAAC;IACH,CAAC;CACF,CAAC"}
|
package/dist/agent/usage.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { estimateCallCost, isPeakHour } from "./pricing.js";
|
|
2
|
-
/**
|
|
2
|
+
/** Strictly from the API `usage` field; never a client-side token estimate. */
|
|
3
3
|
export class UsageAccumulator {
|
|
4
4
|
entries = [];
|
|
5
5
|
add(model, usage) {
|
|
@@ -28,7 +28,7 @@ export class UsageAccumulator {
|
|
|
28
28
|
estimatedCostUsd() {
|
|
29
29
|
return this.entries.reduce((sum, e) => sum + estimateCallCost(e.model, e.usage, e.isPeak), 0);
|
|
30
30
|
}
|
|
31
|
-
/**
|
|
31
|
+
/** What this session would have cost had every call fallen into the off-peak window. */
|
|
32
32
|
offPeakEquivalentCostUsd() {
|
|
33
33
|
return this.entries.reduce((sum, e) => sum + estimateCallCost(e.model, e.usage, false), 0);
|
|
34
34
|
}
|
package/dist/agent/usage.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usage.js","sourceRoot":"","sources":["../../src/agent/usage.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAQ5D
|
|
1
|
+
{"version":3,"file":"usage.js","sourceRoot":"","sources":["../../src/agent/usage.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAQ5D,+EAA+E;AAC/E,MAAM,OAAO,gBAAgB;IACnB,OAAO,GAAiB,EAAE,CAAC;IAEnC,GAAG,CAAC,KAA8C,EAAE,KAAgB;QAClE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;IACtE,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;IAC7B,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CACxB,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;YACX,YAAY,EAAE,GAAG,CAAC,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,YAAY;YACrD,gBAAgB,EAAE,GAAG,CAAC,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,gBAAgB;YACjE,WAAW,EAAE,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,WAAW;YAClD,oBAAoB,EAAE,GAAG,CAAC,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,oBAAoB;YAC7E,qBAAqB,EAAE,GAAG,CAAC,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,qBAAqB;YAChF,eAAe,EAAE,GAAG,CAAC,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,eAAe;SAC/D,CAAC,EACF;YACE,YAAY,EAAE,CAAC;YACf,gBAAgB,EAAE,CAAC;YACnB,WAAW,EAAE,CAAC;YACd,oBAAoB,EAAE,CAAC;YACvB,qBAAqB,EAAE,CAAC;YACxB,eAAe,EAAE,CAAC;SACnB,CACF,CAAC;IACJ,CAAC;IAED,gBAAgB;QACd,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,gBAAgB,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAChG,CAAC;IAED,wFAAwF;IACxF,wBAAwB;QACtB,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,gBAAgB,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7F,CAAC;CACF"}
|
package/dist/benchmark/runner.js
CHANGED
|
@@ -6,9 +6,9 @@ import { runOrchestration } from "../orchestrator/orchestrate.js";
|
|
|
6
6
|
import { createSession, appendSessionMessage } from "../agent/session.js";
|
|
7
7
|
import { UsageAccumulator } from "../agent/usage.js";
|
|
8
8
|
const execFileAsync = promisify(execFile);
|
|
9
|
-
const SYSTEM_PROMPT = `You are a coding agent fixing a reported bug in a WordPress/WooCommerce
|
|
10
|
-
plugin. Use the available tools (read_file, list_dir, search, edit, git_diff,
|
|
11
|
-
shell) to find and fix exactly the bug described. When you are done, reply
|
|
9
|
+
const SYSTEM_PROMPT = `You are a coding agent fixing a reported bug in a WordPress/WooCommerce
|
|
10
|
+
plugin. Use the available tools (read_file, list_dir, search, edit, git_diff,
|
|
11
|
+
shell) to find and fix exactly the bug described. When you are done, reply
|
|
12
12
|
concisely without further tool calls.`;
|
|
13
13
|
async function resetRepo(repoPath, baselineRef) {
|
|
14
14
|
await execFileAsync("git", ["reset", "--hard", baselineRef], { cwd: repoPath });
|
|
@@ -65,9 +65,9 @@ export async function runOneAttempt(env, config, task, repoPath, baselineRef) {
|
|
|
65
65
|
usage,
|
|
66
66
|
runWorkerTurn: (turn) => runHeadlessTurn(turn.messages, turn.model, turn.thinking, env, repoPath, session, usage, stats),
|
|
67
67
|
});
|
|
68
|
-
//
|
|
69
|
-
//
|
|
70
|
-
//
|
|
68
|
+
// Orchestration has no single "final" signal like the plain loop: "completed" here
|
|
69
|
+
// means the pipeline ran to the end without an exception, not that the reviewer
|
|
70
|
+
// approved (that is covered by the "correct" dimension via the verify script).
|
|
71
71
|
stats.completed = true;
|
|
72
72
|
}
|
|
73
73
|
else {
|
|
@@ -164,8 +164,8 @@ export async function runBenchmark(env, tasks, configs, repoPath, baselineRef, o
|
|
|
164
164
|
durationMs: 0,
|
|
165
165
|
error: message,
|
|
166
166
|
});
|
|
167
|
-
//
|
|
168
|
-
//
|
|
167
|
+
// Put the repo back in a clean state even after a failure mid-attempt, so the
|
|
168
|
+
// next task/config does not inherit a half-modified working tree.
|
|
169
169
|
await resetRepo(repoPath, baselineRef).catch(() => { });
|
|
170
170
|
}
|
|
171
171
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/benchmark/runner.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/benchmark/runner.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.js
CHANGED
|
@@ -20,9 +20,26 @@ import { saveClipboardImage } from "./agent/clipboard.js";
|
|
|
20
20
|
import { runOrchestration } from "./orchestrator/orchestrate.js";
|
|
21
21
|
import { notifyCompletion } from "./orchestrator/notify.js";
|
|
22
22
|
import { appendSessionMessage, createSession, findLatestSession, loadSessionMessages } from "./agent/session.js";
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
23
|
+
import { formatToolCall, formatToolResult } from "./ui/toolFormat.js";
|
|
24
|
+
import { formatStatusLine } from "./ui/status.js";
|
|
25
|
+
import { describeError } from "./deepseek/errors.js";
|
|
26
|
+
/** Pseudo-tool used to ask "continue after the iteration limit?" through the same y/n/a mechanism. */
|
|
27
|
+
const CONTINUE_TOOL = "__continue__";
|
|
28
|
+
function approvalText(toolName, args) {
|
|
29
|
+
if (toolName === CONTINUE_TOOL) {
|
|
30
|
+
return t("continuePrompt", { chunk: Number(args["chunk"] ?? 0) });
|
|
31
|
+
}
|
|
32
|
+
return t("approvalPrompt", { call: `${toolName}(${JSON.stringify(args)})` });
|
|
33
|
+
}
|
|
34
|
+
function diffColor(kind) {
|
|
35
|
+
return kind === "removed" ? "red" : kind === "added" ? "green" : undefined;
|
|
36
|
+
}
|
|
37
|
+
function diffPrefix(kind) {
|
|
38
|
+
return kind === "removed" ? "- " : kind === "added" ? "+ " : " ";
|
|
39
|
+
}
|
|
40
|
+
// Only the last N characters are shown while the model is thinking: enough for the
|
|
41
|
+
// "Thinking…" preview, and it stops Ink from re-rendering/re-laying-out the whole
|
|
42
|
+
// (potentially huge) growing string on every token, which is an O(n²) cost and can exhaust the heap.
|
|
26
43
|
const REASONING_DISPLAY_CAP = 4_000;
|
|
27
44
|
function TurnView({ state, turn, askApproval, onDone, }) {
|
|
28
45
|
const { exit } = useApp();
|
|
@@ -33,6 +50,8 @@ function TurnView({ state, turn, askApproval, onDone, }) {
|
|
|
33
50
|
const [usageLine, setUsageLine] = useState(null);
|
|
34
51
|
const [error, setError] = useState(null);
|
|
35
52
|
const [notice, setNotice] = useState(null);
|
|
53
|
+
const [iter, setIter] = useState(null);
|
|
54
|
+
const [retryNote, setRetryNote] = useState(null);
|
|
36
55
|
useEffect(() => {
|
|
37
56
|
async function run() {
|
|
38
57
|
const approve = async (toolName, args) => {
|
|
@@ -56,6 +75,32 @@ function TurnView({ state, turn, askApproval, onDone, }) {
|
|
|
56
75
|
session: state.session,
|
|
57
76
|
usage: state.usage,
|
|
58
77
|
approve,
|
|
78
|
+
maxIterations: state.maxIterations,
|
|
79
|
+
onIterationLimit: async ({ iterations }) => {
|
|
80
|
+
const chunk = state.maxIterations;
|
|
81
|
+
// Auto-continue only with a budget: the budget hard-stops the loop before the next call.
|
|
82
|
+
if (state.autoContinue && turn.budgetUsd !== undefined) {
|
|
83
|
+
setNotice(t("autoContinued", {
|
|
84
|
+
n: iterations,
|
|
85
|
+
spent: `$${state.usage.estimatedCostUsd().toFixed(4)}`,
|
|
86
|
+
budget: `$${turn.budgetUsd.toFixed(2)}`,
|
|
87
|
+
}));
|
|
88
|
+
return true;
|
|
89
|
+
}
|
|
90
|
+
if (state.alwaysApprovedTools.has(CONTINUE_TOOL))
|
|
91
|
+
return true;
|
|
92
|
+
// --yes means "no questions" (scripts/CI): nobody can answer, so do not wait on stdin.
|
|
93
|
+
if (state.autoApprove) {
|
|
94
|
+
setNotice(t("continueStopped"));
|
|
95
|
+
return false;
|
|
96
|
+
}
|
|
97
|
+
setPending({ toolName: CONTINUE_TOOL, args: { iterations, chunk } });
|
|
98
|
+
const response = await askApproval(CONTINUE_TOOL, { iterations, chunk });
|
|
99
|
+
setPending(null);
|
|
100
|
+
if (response.always && response.approved)
|
|
101
|
+
state.alwaysApprovedTools.add(CONTINUE_TOOL);
|
|
102
|
+
return response.approved;
|
|
103
|
+
},
|
|
59
104
|
...(turn.thinking !== undefined ? { thinking: turn.thinking } : {}),
|
|
60
105
|
...(turn.budgetUsd !== undefined ? { budgetUsd: turn.budgetUsd } : {}),
|
|
61
106
|
...(turn.signal !== undefined ? { signal: turn.signal } : {}),
|
|
@@ -65,15 +110,18 @@ function TurnView({ state, turn, askApproval, onDone, }) {
|
|
|
65
110
|
function handleEvent(event) {
|
|
66
111
|
switch (event.type) {
|
|
67
112
|
case "reasoning_delta":
|
|
113
|
+
setRetryNote(null);
|
|
68
114
|
setReasoning((prev) => {
|
|
69
115
|
const next = prev + event.delta;
|
|
70
116
|
return next.length > REASONING_DISPLAY_CAP ? next.slice(-REASONING_DISPLAY_CAP) : next;
|
|
71
117
|
});
|
|
72
118
|
break;
|
|
73
119
|
case "content_delta":
|
|
120
|
+
setRetryNote(null);
|
|
74
121
|
setContent((prev) => prev + event.delta);
|
|
75
122
|
break;
|
|
76
123
|
case "tool_call_start":
|
|
124
|
+
setRetryNote(null);
|
|
77
125
|
setToolLog((prev) => [...prev, { id: event.id, name: event.name, args: event.args, status: "running" }]);
|
|
78
126
|
break;
|
|
79
127
|
case "tool_call_result":
|
|
@@ -90,8 +138,19 @@ function TurnView({ state, turn, askApproval, onDone, }) {
|
|
|
90
138
|
case "final":
|
|
91
139
|
setContent(event.content);
|
|
92
140
|
break;
|
|
141
|
+
case "iteration":
|
|
142
|
+
setIter({ n: event.n, max: event.max });
|
|
143
|
+
break;
|
|
144
|
+
case "retrying":
|
|
145
|
+
setRetryNote(t("retrying", {
|
|
146
|
+
attempt: event.attempt,
|
|
147
|
+
max: event.max,
|
|
148
|
+
seconds: Math.max(1, Math.round(event.delayMs / 1000)),
|
|
149
|
+
reason: event.reason,
|
|
150
|
+
}));
|
|
151
|
+
break;
|
|
93
152
|
case "max_iterations_reached":
|
|
94
|
-
setNotice(t("maxIterations"));
|
|
153
|
+
setNotice((prev) => prev ?? t("maxIterations"));
|
|
95
154
|
break;
|
|
96
155
|
case "budget_exceeded":
|
|
97
156
|
setNotice(t("budgetExceeded", { budget: `$${event.budgetUsd.toFixed(2)}`, spent: `$${event.spentUsd.toFixed(4)}` }));
|
|
@@ -104,7 +163,8 @@ function TurnView({ state, turn, askApproval, onDone, }) {
|
|
|
104
163
|
}
|
|
105
164
|
run()
|
|
106
165
|
.catch((err) => {
|
|
107
|
-
setError(
|
|
166
|
+
setError(describeError(err));
|
|
167
|
+
setNotice(t("errorSessionSaved"));
|
|
108
168
|
})
|
|
109
169
|
.finally(() => {
|
|
110
170
|
exit();
|
|
@@ -116,8 +176,24 @@ function TurnView({ state, turn, askApproval, onDone, }) {
|
|
|
116
176
|
const lines = entry.output?.split("\n") ?? [];
|
|
117
177
|
const preview = lines.slice(0, 3).join("\n");
|
|
118
178
|
const more = lines.length > 3;
|
|
119
|
-
|
|
120
|
-
|
|
179
|
+
const call = formatToolCall(entry.name, entry.args);
|
|
180
|
+
const summary = entry.output !== undefined ? formatToolResult(entry.name, entry.output, entry.isError === true).summary : undefined;
|
|
181
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Text, { color: entry.status === "denied" ? "yellow" : entry.isError ? "red" : "cyan", children: ["\u23FA ", call.title, entry.status === "running" ? "…" : entry.status === "denied" ? t("toolDenied") : ""] }), call.diff?.map((line, i) => {
|
|
182
|
+
const color = diffColor(line.kind);
|
|
183
|
+
return (_jsxs(Text, { ...(color ? { color } : { dimColor: true }), children: [" ", diffPrefix(line.kind), line.text] }, i));
|
|
184
|
+
}), summary ? (_jsxs(Text, { dimColor: true, children: [" ⎿ ", summary] })) : (preview && (_jsxs(Text, { dimColor: true, ...(entry.isError ? { color: "red" } : {}), children: [" ⎿ ", preview.slice(0, 400), more || preview.length > 400 ? t("toolMoreLines", { count: lines.length }) : ""] })))] }, entry.id));
|
|
185
|
+
}), pending && pending.toolName === CONTINUE_TOOL && (_jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: "yellow", paddingX: 1, children: [_jsx(Text, { color: "yellow", bold: true, children: t("continueAsk", { n: Number(pending.args["iterations"] ?? 0) }) }), _jsx(Text, { dimColor: true, children: t("continueHint", { chunk: Number(pending.args["chunk"] ?? 0) }) })] })), pending && pending.toolName !== CONTINUE_TOOL && (_jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: "yellow", paddingX: 1, children: [_jsx(Text, { color: "yellow", bold: true, children: t("destructiveAction", { call: `${pending.toolName}(${JSON.stringify(pending.args)})` }) }), _jsx(Text, { dimColor: true, children: t("approvalHint") })] })), content.length > 0 && _jsx(Text, { children: content }), usageLine && _jsx(Text, { color: "gray", children: usageLine }), retryNote && _jsx(Text, { color: "yellow", children: retryNote }), notice && _jsx(Text, { color: "yellow", children: notice }), error && _jsx(Text, { color: "red", children: t("errorPrefix", { message: error }) }), _jsx(StatusBar, { state: state, turn: turn, iter: iter })] }));
|
|
186
|
+
}
|
|
187
|
+
function StatusBar({ state, turn, iter, }) {
|
|
188
|
+
const status = formatStatusLine({
|
|
189
|
+
model: turn.model,
|
|
190
|
+
mode: t(`statusMode_${state.activeMode}`),
|
|
191
|
+
costUsd: state.usage.estimatedCostUsd(),
|
|
192
|
+
...(turn.budgetUsd !== undefined ? { budgetUsd: turn.budgetUsd } : {}),
|
|
193
|
+
...(iter ? { call: iter, callLabel: t("statusCalls", { n: iter.n, max: iter.max }) } : {}),
|
|
194
|
+
});
|
|
195
|
+
const color = status.level === "danger" ? "red" : status.level === "warn" ? "yellow" : "gray";
|
|
196
|
+
return _jsx(Text, { color: color, children: `▌ ${status.text}` });
|
|
121
197
|
}
|
|
122
198
|
function truncatePath(p, max = 50) {
|
|
123
199
|
return p.length > max ? `…${p.slice(-(max - 1))}` : p;
|
|
@@ -139,6 +215,7 @@ async function runTurnConfig(state, turn, askApproval) {
|
|
|
139
215
|
});
|
|
140
216
|
}
|
|
141
217
|
async function runTurn(state, userText, askApproval, signal) {
|
|
218
|
+
state.activeMode = "chat";
|
|
142
219
|
const userMsg = { role: "user", content: userText };
|
|
143
220
|
state.messages.push(userMsg);
|
|
144
221
|
await appendSessionMessage(state.session, userMsg);
|
|
@@ -156,6 +233,7 @@ function isAbortError(err) {
|
|
|
156
233
|
return err instanceof Error && err.name === "AbortError";
|
|
157
234
|
}
|
|
158
235
|
async function runPlanTask(state, task, askApproval, signal) {
|
|
236
|
+
state.activeMode = "plan";
|
|
159
237
|
try {
|
|
160
238
|
await runOrchestration(task, {
|
|
161
239
|
cwd: state.cwd,
|
|
@@ -173,7 +251,7 @@ async function runPlanTask(state, task, askApproval, signal) {
|
|
|
173
251
|
console.log(t("orchestrationInterrupted"));
|
|
174
252
|
}
|
|
175
253
|
else {
|
|
176
|
-
const message =
|
|
254
|
+
const message = describeError(err);
|
|
177
255
|
console.error(t("orchestrationError", { message }));
|
|
178
256
|
await notifyCompletion(state.notifyCommand, state.cwd, {
|
|
179
257
|
outcome: "error",
|
|
@@ -184,6 +262,9 @@ async function runPlanTask(state, task, askApproval, signal) {
|
|
|
184
262
|
});
|
|
185
263
|
}
|
|
186
264
|
}
|
|
265
|
+
finally {
|
|
266
|
+
state.activeMode = "chat";
|
|
267
|
+
}
|
|
187
268
|
}
|
|
188
269
|
function parseApprovalAnswer(raw) {
|
|
189
270
|
const lower = raw.trim().toLowerCase();
|
|
@@ -191,7 +272,7 @@ function parseApprovalAnswer(raw) {
|
|
|
191
272
|
return { approved: true, always: true };
|
|
192
273
|
return { approved: lower === "y", always: false };
|
|
193
274
|
}
|
|
194
|
-
/**
|
|
275
|
+
/** For single-shot turns: its own for-await line reader, only for y/n/a approvals. */
|
|
195
276
|
function createLineApprover() {
|
|
196
277
|
const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
|
|
197
278
|
const resolveRef = { current: null };
|
|
@@ -205,7 +286,7 @@ function createLineApprover() {
|
|
|
205
286
|
};
|
|
206
287
|
void consumeLines();
|
|
207
288
|
const approve = (toolName, args) => {
|
|
208
|
-
console.log(`\n${
|
|
289
|
+
console.log(`\n${approvalText(toolName, args)}`);
|
|
209
290
|
return new Promise((resolve) => {
|
|
210
291
|
resolveRef.current = resolve;
|
|
211
292
|
});
|
|
@@ -213,10 +294,10 @@ function createLineApprover() {
|
|
|
213
294
|
return { approve, close: () => rl.close() };
|
|
214
295
|
}
|
|
215
296
|
/**
|
|
216
|
-
* `.question()`
|
|
217
|
-
* (
|
|
218
|
-
*
|
|
219
|
-
*
|
|
297
|
+
* `.question()` is unreliable on piped/non-TTY stdin after the first call
|
|
298
|
+
* (a known Node quirk: the second call never resolves). So lines are read
|
|
299
|
+
* exclusively through `for await...of rl`, which delivers every line reliably,
|
|
300
|
+
* with a manual state machine for approvals instead of a nested
|
|
220
301
|
* `.question()`.
|
|
221
302
|
*/
|
|
222
303
|
async function runRepl(state) {
|
|
@@ -238,13 +319,13 @@ async function runRepl(state) {
|
|
|
238
319
|
let turnActive = false;
|
|
239
320
|
let lastTurn = Promise.resolve();
|
|
240
321
|
const askApproval = (toolName, args) => {
|
|
241
|
-
console.log(`\n${
|
|
322
|
+
console.log(`\n${approvalText(toolName, args)}`);
|
|
242
323
|
return new Promise((resolve) => {
|
|
243
324
|
approvalRef.current = resolve;
|
|
244
325
|
});
|
|
245
326
|
};
|
|
246
|
-
// ESC
|
|
247
|
-
//
|
|
327
|
+
// ESC interrupts the current turn. Works only on a real TTY: piped/scripted
|
|
328
|
+
// input generates no keypress events, so the interrupt is a silent no-op there.
|
|
248
329
|
const abortRef = { current: null };
|
|
249
330
|
readline.emitKeypressEvents(process.stdin);
|
|
250
331
|
process.stdin.on("keypress", (_str, key) => {
|
|
@@ -332,6 +413,8 @@ function parseArgv(argv) {
|
|
|
332
413
|
let effort;
|
|
333
414
|
let budgetUsd;
|
|
334
415
|
let maxReviewLoops;
|
|
416
|
+
let maxIterations;
|
|
417
|
+
let autoContinue = false;
|
|
335
418
|
let language;
|
|
336
419
|
for (let i = 0; i < argv.length; i++) {
|
|
337
420
|
const arg = argv[i];
|
|
@@ -364,6 +447,14 @@ function parseArgv(argv) {
|
|
|
364
447
|
if (Number.isFinite(value) && value > 0)
|
|
365
448
|
maxReviewLoops = value;
|
|
366
449
|
}
|
|
450
|
+
else if (arg === "--max-iterations") {
|
|
451
|
+
const value = Number(argv[++i]);
|
|
452
|
+
if (Number.isInteger(value) && value > 0)
|
|
453
|
+
maxIterations = value;
|
|
454
|
+
}
|
|
455
|
+
else if (arg === "--auto-continue") {
|
|
456
|
+
autoContinue = true;
|
|
457
|
+
}
|
|
367
458
|
else if (arg === "--lang") {
|
|
368
459
|
const value = argv[++i];
|
|
369
460
|
if (value === "en" || value === "sr")
|
|
@@ -373,7 +464,7 @@ function parseArgv(argv) {
|
|
|
373
464
|
rest.push(arg);
|
|
374
465
|
}
|
|
375
466
|
}
|
|
376
|
-
const parsed = { prompt: rest.join(" ").trim(), resume, autoApprove, plan };
|
|
467
|
+
const parsed = { prompt: rest.join(" ").trim(), resume, autoApprove, plan, autoContinue };
|
|
377
468
|
if (model !== undefined)
|
|
378
469
|
parsed.model = model;
|
|
379
470
|
if (effort !== undefined)
|
|
@@ -382,6 +473,8 @@ function parseArgv(argv) {
|
|
|
382
473
|
parsed.budgetUsd = budgetUsd;
|
|
383
474
|
if (maxReviewLoops !== undefined)
|
|
384
475
|
parsed.maxReviewLoops = maxReviewLoops;
|
|
476
|
+
if (maxIterations !== undefined)
|
|
477
|
+
parsed.maxIterations = maxIterations;
|
|
385
478
|
if (language !== undefined)
|
|
386
479
|
parsed.language = language;
|
|
387
480
|
return parsed;
|
|
@@ -444,6 +537,9 @@ async function main() {
|
|
|
444
537
|
thinkingEnabled: true,
|
|
445
538
|
reasoningEffort: parsed.effort ?? config.defaultReasoningEffort ?? DEFAULT_CONFIG.defaultReasoningEffort,
|
|
446
539
|
maxReviewLoops: parsed.maxReviewLoops ?? config.maxReviewLoops ?? DEFAULT_CONFIG.maxReviewLoops,
|
|
540
|
+
maxIterations: parsed.maxIterations ?? config.maxIterations ?? DEFAULT_CONFIG.maxIterations,
|
|
541
|
+
autoContinue: parsed.autoContinue || config.autoContinue === true,
|
|
542
|
+
activeMode: "chat",
|
|
447
543
|
autoApprove: parsed.autoApprove,
|
|
448
544
|
alwaysApprovedTools: new Set(),
|
|
449
545
|
session,
|
|
@@ -457,6 +553,9 @@ async function main() {
|
|
|
457
553
|
const budgetUsd = parsed.budgetUsd ?? config.budgetUsd;
|
|
458
554
|
if (budgetUsd !== undefined)
|
|
459
555
|
state.budgetUsd = budgetUsd;
|
|
556
|
+
if (state.autoContinue && state.budgetUsd === undefined) {
|
|
557
|
+
console.error(t("autoContinueNeedsBudget"));
|
|
558
|
+
}
|
|
460
559
|
if (parsed.prompt) {
|
|
461
560
|
const approver = createLineApprover();
|
|
462
561
|
const controller = new AbortController();
|
|
@@ -480,7 +579,7 @@ async function main() {
|
|
|
480
579
|
}
|
|
481
580
|
}
|
|
482
581
|
main().catch((err) => {
|
|
483
|
-
console.error(
|
|
582
|
+
console.error(describeError(err));
|
|
484
583
|
process.exitCode = 1;
|
|
485
584
|
});
|
|
486
585
|
//# sourceMappingURL=cli.js.map
|