tandem-mode 0.2.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +249 -204
- package/README.sr.md +29 -0
- package/dist/agent/compact.js +80 -0
- package/dist/agent/compact.js.map +1 -0
- package/dist/agent/loop.js +12 -2
- package/dist/agent/loop.js.map +1 -1
- package/dist/agent/tools/gitDiff.js +37 -14
- package/dist/agent/tools/gitDiff.js.map +1 -1
- package/dist/agent/tools/shell.js +25 -7
- package/dist/agent/tools/shell.js.map +1 -1
- package/dist/benchmark/runner.js.map +1 -1
- package/dist/benchmark/tasks/{bitwiseBulkPriceWizard.js → bulkPriceWizard.js} +3 -3
- package/dist/benchmark/tasks/bulkPriceWizard.js.map +1 -0
- package/dist/cli.js +104 -7
- package/dist/cli.js.map +1 -1
- package/dist/config/profiles.js +108 -0
- package/dist/config/profiles.js.map +1 -0
- package/dist/config/schema.js +1 -0
- package/dist/config/schema.js.map +1 -1
- package/dist/i18n/en.js +41 -15
- package/dist/i18n/en.js.map +1 -1
- package/dist/i18n/sr.js +41 -15
- package/dist/i18n/sr.js.map +1 -1
- package/dist/orchestrator/notify.js +38 -0
- package/dist/orchestrator/notify.js.map +1 -0
- package/dist/orchestrator/orchestrate.js +15 -0
- package/dist/orchestrator/orchestrate.js.map +1 -1
- package/dist/repl/commands.js +99 -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 +89 -0
- package/dist/ui/toolFormat.js.map +1 -0
- package/package.json +49 -49
- package/dist/benchmark/tasks/bitwiseBulkPriceWizard.js.map +0 -1
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { mkdir, readFile, readdir, writeFile } from "node:fs/promises";
|
|
2
|
+
import os from "node:os";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
// The name becomes a file name, so it is restricted to a safe charset: no path
|
|
5
|
+
// separators, no dots, no way to leave the profiles directory.
|
|
6
|
+
const NAME_PATTERN = /^[a-z0-9][a-z0-9_-]{0,39}$/;
|
|
7
|
+
function profilesDir() {
|
|
8
|
+
return path.join(os.homedir(), ".tandem", "profiles");
|
|
9
|
+
}
|
|
10
|
+
/** Lower-cases and validates; returns `null` for a name that cannot be used. */
|
|
11
|
+
export function normalizeProfileName(raw) {
|
|
12
|
+
const name = raw.trim().toLowerCase();
|
|
13
|
+
return NAME_PATTERN.test(name) ? name : null;
|
|
14
|
+
}
|
|
15
|
+
export function profilePath(name) {
|
|
16
|
+
return path.join(profilesDir(), `${name}.json`);
|
|
17
|
+
}
|
|
18
|
+
/** Throws an Error with a reason on a malformed file; only known fields are kept. */
|
|
19
|
+
export function parseProfile(raw) {
|
|
20
|
+
if (typeof raw !== "object" || raw === null || Array.isArray(raw)) {
|
|
21
|
+
throw new Error("expected a JSON object");
|
|
22
|
+
}
|
|
23
|
+
const input = raw;
|
|
24
|
+
const profile = {};
|
|
25
|
+
if (input["model"] !== undefined) {
|
|
26
|
+
if (input["model"] !== "deepseek-v4-pro" && input["model"] !== "deepseek-v4-flash") {
|
|
27
|
+
throw new Error(`unknown model ${JSON.stringify(input["model"])}`);
|
|
28
|
+
}
|
|
29
|
+
profile.model = input["model"];
|
|
30
|
+
}
|
|
31
|
+
if (input["reasoningEffort"] !== undefined) {
|
|
32
|
+
const effort = input["reasoningEffort"];
|
|
33
|
+
if (effort !== "low" && effort !== "high" && effort !== "max") {
|
|
34
|
+
throw new Error(`unknown reasoningEffort ${JSON.stringify(effort)}`);
|
|
35
|
+
}
|
|
36
|
+
profile.reasoningEffort = effort;
|
|
37
|
+
}
|
|
38
|
+
if (input["budgetUsd"] !== undefined) {
|
|
39
|
+
const budget = input["budgetUsd"];
|
|
40
|
+
if (typeof budget !== "number" || !Number.isFinite(budget) || budget <= 0) {
|
|
41
|
+
throw new Error("budgetUsd must be a positive number");
|
|
42
|
+
}
|
|
43
|
+
profile.budgetUsd = budget;
|
|
44
|
+
}
|
|
45
|
+
if (input["maxReviewLoops"] !== undefined) {
|
|
46
|
+
const loops = input["maxReviewLoops"];
|
|
47
|
+
if (typeof loops !== "number" || !Number.isInteger(loops) || loops <= 0) {
|
|
48
|
+
throw new Error("maxReviewLoops must be a positive integer");
|
|
49
|
+
}
|
|
50
|
+
profile.maxReviewLoops = loops;
|
|
51
|
+
}
|
|
52
|
+
return profile;
|
|
53
|
+
}
|
|
54
|
+
export async function saveProfile(name, profile) {
|
|
55
|
+
const filePath = profilePath(name);
|
|
56
|
+
await mkdir(path.dirname(filePath), { recursive: true });
|
|
57
|
+
await writeFile(filePath, JSON.stringify(profile, null, 2) + "\n", "utf8");
|
|
58
|
+
return filePath;
|
|
59
|
+
}
|
|
60
|
+
/** `null` if there is no such profile; throws on a malformed file. */
|
|
61
|
+
export async function loadProfile(name) {
|
|
62
|
+
let raw;
|
|
63
|
+
try {
|
|
64
|
+
raw = await readFile(profilePath(name), "utf8");
|
|
65
|
+
}
|
|
66
|
+
catch (err) {
|
|
67
|
+
if (err.code === "ENOENT")
|
|
68
|
+
return null;
|
|
69
|
+
throw err;
|
|
70
|
+
}
|
|
71
|
+
let parsed;
|
|
72
|
+
try {
|
|
73
|
+
parsed = JSON.parse(raw);
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
throw new Error("not valid JSON");
|
|
77
|
+
}
|
|
78
|
+
return parseProfile(parsed);
|
|
79
|
+
}
|
|
80
|
+
export async function listProfiles() {
|
|
81
|
+
let entries;
|
|
82
|
+
try {
|
|
83
|
+
entries = await readdir(profilesDir());
|
|
84
|
+
}
|
|
85
|
+
catch (err) {
|
|
86
|
+
if (err.code === "ENOENT")
|
|
87
|
+
return [];
|
|
88
|
+
throw err;
|
|
89
|
+
}
|
|
90
|
+
return entries
|
|
91
|
+
.filter((f) => f.endsWith(".json"))
|
|
92
|
+
.map((f) => f.slice(0, -".json".length))
|
|
93
|
+
.filter((n) => NAME_PATTERN.test(n))
|
|
94
|
+
.sort();
|
|
95
|
+
}
|
|
96
|
+
export function describeProfile(profile) {
|
|
97
|
+
const parts = [];
|
|
98
|
+
if (profile.model)
|
|
99
|
+
parts.push(`model=${profile.model}`);
|
|
100
|
+
if (profile.reasoningEffort)
|
|
101
|
+
parts.push(`effort=${profile.reasoningEffort}`);
|
|
102
|
+
if (profile.budgetUsd !== undefined)
|
|
103
|
+
parts.push(`budget=$${profile.budgetUsd.toFixed(2)}`);
|
|
104
|
+
if (profile.maxReviewLoops !== undefined)
|
|
105
|
+
parts.push(`loops=${profile.maxReviewLoops}`);
|
|
106
|
+
return parts.join(" ");
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=profiles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profiles.js","sourceRoot":"","sources":["../../src/config/profiles.ts"],"names":[],"mappings":"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"}
|
package/dist/config/schema.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAkBA,MAAM,CAAC,MAAM,cAAc,GAEvB;IACF,YAAY,EAAE,iBAAiB;IAC/B,sBAAsB,EAAE,MAAM;IAC9B,cAAc,EAAE,CAAC;IACjB,aAAa,EAAE,EAAE;CAClB,CAAC"}
|
package/dist/i18n/en.js
CHANGED
|
@@ -1,20 +1,24 @@
|
|
|
1
1
|
// Source of truth for UI messages. `sr.ts` must define every key declared here.
|
|
2
2
|
// Placeholders are written as {name} and filled in by `t()`.
|
|
3
3
|
export const en = {
|
|
4
|
-
helpText: `Commands:
|
|
5
|
-
/plan <task> planner/worker/reviewer orchestration
|
|
6
|
-
/model [deepseek-v4-pro|deepseek-v4-flash] show or change the model
|
|
7
|
-
/thinking [on|off] toggle thinking mode
|
|
8
|
-
/effort [low|high|max] show or change reasoning effort
|
|
9
|
-
/status current settings and session
|
|
10
|
-
/
|
|
11
|
-
/
|
|
12
|
-
/
|
|
13
|
-
/
|
|
14
|
-
/
|
|
15
|
-
/
|
|
16
|
-
/
|
|
17
|
-
/
|
|
4
|
+
helpText: `Commands:
|
|
5
|
+
/plan <task> planner/worker/reviewer orchestration
|
|
6
|
+
/model [deepseek-v4-pro|deepseek-v4-flash] show or change the model
|
|
7
|
+
/thinking [on|off] toggle thinking mode
|
|
8
|
+
/effort [low|high|max] show or change reasoning effort
|
|
9
|
+
/status current settings and session
|
|
10
|
+
/diff [--staged] [path] show the working-tree diff (no API call)
|
|
11
|
+
/usage token usage, estimated cost, off-peak projection
|
|
12
|
+
/budget [amount] show or set the budget in USD
|
|
13
|
+
/new new session
|
|
14
|
+
/save-profile <name> save model, effort, budget and review loops as a profile
|
|
15
|
+
/profile [name] load a saved profile, or list them
|
|
16
|
+
/compact summarize the history into a new session to free up context
|
|
17
|
+
/fork new session with a copy of the current history
|
|
18
|
+
/resume [id] resume the latest or a specific session
|
|
19
|
+
/paste [message] send an image from the clipboard
|
|
20
|
+
/clear clear the screen
|
|
21
|
+
/help this list
|
|
18
22
|
/exit exit`,
|
|
19
23
|
usageLine: "Usage: {syntax}",
|
|
20
24
|
unknownCommand: "Unknown command: /{cmd}. Type /help.",
|
|
@@ -25,6 +29,7 @@ export const en = {
|
|
|
25
29
|
statusNotSet: "not set",
|
|
26
30
|
statusVerify: "Verify command: {value}",
|
|
27
31
|
statusVerifyNone: "not set",
|
|
32
|
+
statusNotify: "Notify command: {value}",
|
|
28
33
|
statusMessages: "Messages in history: {count}",
|
|
29
34
|
usageCalls: "Calls: {count}",
|
|
30
35
|
usageTokens: "Tokens: {input} in ({cached} cached) / {output} out",
|
|
@@ -39,6 +44,17 @@ export const en = {
|
|
|
39
44
|
sessionNotFound: "Session '{id}' not found.",
|
|
40
45
|
sessionNoneInDir: "No previous session in this directory.",
|
|
41
46
|
sessionResumed: "Resumed session: {id} ({count} messages)",
|
|
47
|
+
compactNothing: "Nothing to compact yet.",
|
|
48
|
+
compactWorking: "Compacting {count} messages...",
|
|
49
|
+
compactDone: "Compacted {before} messages into {after}. New session: {id} (previous session {previous} is untouched on disk)",
|
|
50
|
+
compactFailed: "Compaction failed, history unchanged: {message}",
|
|
51
|
+
profileInvalidName: "Profile names use a-z, 0-9, - and _ (up to 40 characters, starting with a letter or digit).",
|
|
52
|
+
profileSaved: "Profile '{name}' saved to {path}",
|
|
53
|
+
profileLoaded: "Loaded profile '{name}': {summary}",
|
|
54
|
+
profileNotFound: "Profile '{name}' not found. Type /profile to list saved profiles.",
|
|
55
|
+
profileInvalid: "Profile '{name}' is invalid: {reason}",
|
|
56
|
+
profileList: "Saved profiles: {names}",
|
|
57
|
+
profileNone: "No saved profiles. Save the current settings with /save-profile <name>.",
|
|
42
58
|
toolDenied: " (denied)",
|
|
43
59
|
toolMoreLines: " … ({count} lines)",
|
|
44
60
|
destructiveAction: "Destructive action: {call}",
|
|
@@ -46,7 +62,16 @@ export const en = {
|
|
|
46
62
|
approvalPrompt: "Allow {call}? (y/n/a — a = always allow this tool)",
|
|
47
63
|
autoApproved: "[--yes] auto-approved: {call}",
|
|
48
64
|
errorPrefix: "Error: {message}",
|
|
49
|
-
maxIterations: "Reached the maximum number of iterations without a final answer.",
|
|
65
|
+
maxIterations: "Reached the maximum number of iterations without a final answer. The session is saved: send a message (e.g. \"continue\") to pick up where it stopped.",
|
|
66
|
+
continueAsk: "The agent used {n} calls and has not finished.",
|
|
67
|
+
continueHint: "y = continue for {chunk} more calls, n = stop, a = always continue in this session (answer below)",
|
|
68
|
+
continuePrompt: "Continue for {chunk} more calls? (y/n/a — a = always continue this session)",
|
|
69
|
+
autoContinued: "[auto-continue] {n} calls used, continuing (spent ~{spent} of {budget})",
|
|
70
|
+
autoContinueNeedsBudget: "autoContinue only works together with a budget (--budget or budgetUsd); without one the agent will ask before continuing.",
|
|
71
|
+
continueStopped: "Stopped at the iteration limit (non-interactive run). Re-run with --auto-continue and --budget to let it go on.",
|
|
72
|
+
statusMode_chat: "chat",
|
|
73
|
+
statusMode_plan: "plan",
|
|
74
|
+
statusCalls: "call {n}/{max}",
|
|
50
75
|
budgetExceeded: "Budget of {budget} reached (spent ~{spent}). The loop stopped before the next call — the session is saved, raise the budget with /budget and continue.",
|
|
51
76
|
interrupted: "⏹ Interrupted (ESC). The session is saved up to this point.",
|
|
52
77
|
orchestrationInterrupted: "⏹ Orchestration interrupted (ESC).",
|
|
@@ -78,6 +103,7 @@ export const en = {
|
|
|
78
103
|
orchApproved: "✅ Reviewer approved. {notes}\n",
|
|
79
104
|
orchChangesRequested: "⚠ Reviewer requests changes ({loops}/{max}): {notes}",
|
|
80
105
|
orchMaxLoops: "\n❌ Reached max_review_loops ({max}) without approval — check manually.\n",
|
|
106
|
+
notifyFailed: "⚠ The notification command failed: {reason}",
|
|
81
107
|
clipboardCmdNotFound: 'Command "{cmd}" not found. {hint}',
|
|
82
108
|
clipboardInstallWl: "Install wl-clipboard (e.g. sudo apt install wl-clipboard).",
|
|
83
109
|
clipboardInstallXclip: "Install xclip (e.g. sudo apt install xclip).",
|
package/dist/i18n/en.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"en.js","sourceRoot":"","sources":["../../src/i18n/en.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,6DAA6D;AAC7D,MAAM,CAAC,MAAM,EAAE,GAAG;IAChB,QAAQ,EAAE
|
|
1
|
+
{"version":3,"file":"en.js","sourceRoot":"","sources":["../../src/i18n/en.ts"],"names":[],"mappings":"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"}
|
package/dist/i18n/sr.js
CHANGED
|
@@ -1,18 +1,22 @@
|
|
|
1
1
|
export const sr = {
|
|
2
|
-
helpText: `Komande:
|
|
3
|
-
/plan <zadatak> planner/worker/reviewer orkestracija
|
|
4
|
-
/model [deepseek-v4-pro|deepseek-v4-flash] prikaži ili promeni model
|
|
5
|
-
/thinking [on|off] uključi/isključi thinking mode
|
|
6
|
-
/effort [low|high|max] prikaži ili promeni reasoning effort
|
|
7
|
-
/status trenutna podešavanja i sesija
|
|
8
|
-
/
|
|
9
|
-
/
|
|
10
|
-
/
|
|
11
|
-
/
|
|
12
|
-
/
|
|
13
|
-
/
|
|
14
|
-
/
|
|
15
|
-
/
|
|
2
|
+
helpText: `Komande:
|
|
3
|
+
/plan <zadatak> planner/worker/reviewer orkestracija
|
|
4
|
+
/model [deepseek-v4-pro|deepseek-v4-flash] prikaži ili promeni model
|
|
5
|
+
/thinking [on|off] uključi/isključi thinking mode
|
|
6
|
+
/effort [low|high|max] prikaži ili promeni reasoning effort
|
|
7
|
+
/status trenutna podešavanja i sesija
|
|
8
|
+
/diff [--staged] [putanja] prikaži diff radnog stabla (bez API poziva)
|
|
9
|
+
/usage utrošak tokena, procenjena cena, off-peak projekcija
|
|
10
|
+
/budget [iznos] prikaži ili postavi budžet u USD
|
|
11
|
+
/new nova sesija
|
|
12
|
+
/save-profile <ime> sačuvaj model, effort, budžet i review krugove kao profil
|
|
13
|
+
/profile [ime] učitaj sačuvan profil, ili prikaži listu
|
|
14
|
+
/compact sažmi istoriju u novu sesiju da se oslobodi kontekst
|
|
15
|
+
/fork nova sesija sa kopijom trenutne istorije
|
|
16
|
+
/resume [id] nastavi poslednju ili navedenu sesiju
|
|
17
|
+
/paste [poruka] pošalji sliku iz clipboard-a
|
|
18
|
+
/clear očisti ekran
|
|
19
|
+
/help ova lista
|
|
16
20
|
/exit izlaz`,
|
|
17
21
|
usageLine: "Upotreba: {syntax}",
|
|
18
22
|
unknownCommand: "Nepoznata komanda: /{cmd}. Ukucaj /help.",
|
|
@@ -23,6 +27,7 @@ export const sr = {
|
|
|
23
27
|
statusNotSet: "nije postavljen",
|
|
24
28
|
statusVerify: "Verify komanda: {value}",
|
|
25
29
|
statusVerifyNone: "nije postavljena",
|
|
30
|
+
statusNotify: "Notify komanda: {value}",
|
|
26
31
|
statusMessages: "Poruka u istoriji: {count}",
|
|
27
32
|
usageCalls: "Pozivi: {count}",
|
|
28
33
|
usageTokens: "Tokeni: {input} in ({cached} cached) / {output} out",
|
|
@@ -37,6 +42,17 @@ export const sr = {
|
|
|
37
42
|
sessionNotFound: "Sesija '{id}' nije pronađena.",
|
|
38
43
|
sessionNoneInDir: "Nema prethodne sesije u ovom direktorijumu.",
|
|
39
44
|
sessionResumed: "Nastavljena sesija: {id} ({count} poruka)",
|
|
45
|
+
compactNothing: "Još nema šta da se sažme.",
|
|
46
|
+
compactWorking: "Sažimam {count} poruka...",
|
|
47
|
+
compactDone: "Sažeto {before} poruka u {after}. Nova sesija: {id} (prethodna sesija {previous} ostaje netaknuta na disku)",
|
|
48
|
+
compactFailed: "Sažimanje nije uspelo, istorija je nepromenjena: {message}",
|
|
49
|
+
profileInvalidName: "Imena profila koriste a-z, 0-9, - i _ (do 40 karaktera, počinju slovom ili cifrom).",
|
|
50
|
+
profileSaved: "Profil '{name}' sačuvan u {path}",
|
|
51
|
+
profileLoaded: "Učitan profil '{name}': {summary}",
|
|
52
|
+
profileNotFound: "Profil '{name}' nije pronađen. Ukucaj /profile za listu sačuvanih profila.",
|
|
53
|
+
profileInvalid: "Profil '{name}' nije ispravan: {reason}",
|
|
54
|
+
profileList: "Sačuvani profili: {names}",
|
|
55
|
+
profileNone: "Nema sačuvanih profila. Sačuvaj trenutna podešavanja sa /save-profile <ime>.",
|
|
40
56
|
toolDenied: " (odbijeno)",
|
|
41
57
|
toolMoreLines: " … ({count} linija)",
|
|
42
58
|
destructiveAction: "Destruktivna akcija: {call}",
|
|
@@ -44,7 +60,16 @@ export const sr = {
|
|
|
44
60
|
approvalPrompt: "Dozvoli izvršavanje {call}? (y/n/a — a = uvek dozvoli ovaj alat)",
|
|
45
61
|
autoApproved: "[--yes] auto-odobreno: {call}",
|
|
46
62
|
errorPrefix: "Greška: {message}",
|
|
47
|
-
maxIterations: "Dostignut je maksimalan broj iteracija bez finalnog odgovora.",
|
|
63
|
+
maxIterations: "Dostignut je maksimalan broj iteracija bez finalnog odgovora. Sesija je sačuvana: pošalji poruku (npr. \"nastavi\") da nastavi tamo gde je stao.",
|
|
64
|
+
continueAsk: "Agent je iskoristio {n} poziva i nije završio.",
|
|
65
|
+
continueHint: "y = nastavi još {chunk} poziva, n = stani, a = uvek nastavi u ovoj sesiji (odgovor ispod)",
|
|
66
|
+
continuePrompt: "Nastaviti još {chunk} poziva? (y/n/a — a = uvek nastavi u ovoj sesiji)",
|
|
67
|
+
autoContinued: "[auto-continue] iskorišćeno {n} poziva, nastavljam (potrošeno ~{spent} od {budget})",
|
|
68
|
+
autoContinueNeedsBudget: "autoContinue radi samo uz budžet (--budget ili budgetUsd); bez njega agent pita pre nastavka.",
|
|
69
|
+
continueStopped: "Stao na granici iteracija (neinteraktivni rad). Pokreni ponovo sa --auto-continue i --budget da nastavi.",
|
|
70
|
+
statusMode_chat: "chat",
|
|
71
|
+
statusMode_plan: "plan",
|
|
72
|
+
statusCalls: "poziv {n}/{max}",
|
|
48
73
|
budgetExceeded: "Budžet od {budget} je dostignut (potrošeno ~{spent}). Petlja je zaustavljena pre sledećeg poziva — sesija je sačuvana, povećaj budžet sa /budget i nastavi.",
|
|
49
74
|
interrupted: "⏹ Prekinuto (ESC). Sesija je sačuvana do ove tačke.",
|
|
50
75
|
orchestrationInterrupted: "⏹ Orkestracija prekinuta (ESC).",
|
|
@@ -76,6 +101,7 @@ export const sr = {
|
|
|
76
101
|
orchApproved: "✅ Reviewer odobrio. {notes}\n",
|
|
77
102
|
orchChangesRequested: "⚠ Reviewer traži izmene ({loops}/{max}): {notes}",
|
|
78
103
|
orchMaxLoops: "\n❌ Dostignut max_review_loops ({max}) bez odobrenja — proveri ručno.\n",
|
|
104
|
+
notifyFailed: "⚠ Komanda za obaveštenje nije uspela: {reason}",
|
|
79
105
|
clipboardCmdNotFound: 'Komanda "{cmd}" nije pronađena. {hint}',
|
|
80
106
|
clipboardInstallWl: "Instaliraj wl-clipboard (npr. sudo apt install wl-clipboard).",
|
|
81
107
|
clipboardInstallXclip: "Instaliraj xclip (npr. sudo apt install xclip).",
|
package/dist/i18n/sr.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sr.js","sourceRoot":"","sources":["../../src/i18n/sr.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,EAAE,GAA+B;IAC5C,QAAQ,EAAE
|
|
1
|
+
{"version":3,"file":"sr.js","sourceRoot":"","sources":["../../src/i18n/sr.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,EAAE,GAA+B;IAC5C,QAAQ,EAAE;;;;;;;;;;;;;;;;;;oDAkBwC;IAElD,SAAS,EAAE,oBAAoB;IAC/B,cAAc,EAAE,0CAA0C;IAE1D,YAAY,EAAE,yBAAyB;IACvC,aAAa,EAAE,2BAA2B;IAE1C,aAAa,EAAE,cAAc;IAC7B,YAAY,EAAE,iBAAiB;IAC/B,YAAY,EAAE,iBAAiB;IAC/B,YAAY,EAAE,yBAAyB;IACvC,gBAAgB,EAAE,kBAAkB;IACpC,YAAY,EAAE,yBAAyB;IACvC,cAAc,EAAE,4BAA4B;IAE5C,UAAU,EAAE,iBAAiB;IAC7B,WAAW,EAAE,qDAAqD;IAClE,SAAS,EAAE,yBAAyB;IACpC,YAAY,EAAE,wCAAwC;IACtD,WAAW,EAAE,2CAA2C;IAExD,SAAS,EAAE,gCAAgC;IAC3C,aAAa,EAAE,2BAA2B;IAC1C,UAAU,EAAE,yBAAyB;IAErC,UAAU,EAAE,mBAAmB;IAC/B,aAAa,EAAE,8EAA8E;IAC7F,eAAe,EAAE,+BAA+B;IAChD,gBAAgB,EAAE,6CAA6C;IAC/D,cAAc,EAAE,2CAA2C;IAE3D,cAAc,EAAE,2BAA2B;IAC3C,cAAc,EAAE,2BAA2B;IAC3C,WAAW,EACT,6GAA6G;IAC/G,aAAa,EAAE,4DAA4D;IAE3E,kBAAkB,EAAE,qFAAqF;IACzG,YAAY,EAAE,kCAAkC;IAChD,aAAa,EAAE,mCAAmC;IAClD,eAAe,EAAE,4EAA4E;IAC7F,cAAc,EAAE,yCAAyC;IACzD,WAAW,EAAE,2BAA2B;IACxC,WAAW,EAAE,8EAA8E;IAE3F,UAAU,EAAE,aAAa;IACzB,aAAa,EAAE,qBAAqB;IACpC,iBAAiB,EAAE,6BAA6B;IAChD,YAAY,EAAE,gFAAgF;IAC9F,cAAc,EAAE,kEAAkE;IAClF,YAAY,EAAE,+BAA+B;IAC7C,WAAW,EAAE,mBAAmB;IAChC,aAAa,EACX,kJAAkJ;IACpJ,WAAW,EAAE,gDAAgD;IAC7D,YAAY,EAAE,2FAA2F;IACzG,cAAc,EAAE,wEAAwE;IACxF,aAAa,EAAE,qFAAqF;IACpG,uBAAuB,EACrB,+FAA+F;IACjG,eAAe,EACb,0GAA0G;IAC5G,eAAe,EAAE,MAAM;IACvB,eAAe,EAAE,MAAM;IACvB,WAAW,EAAE,iBAAiB;IAC9B,cAAc,EACZ,6JAA6J;IAC/J,WAAW,EAAE,qDAAqD;IAClE,wBAAwB,EAAE,iCAAiC;IAC3D,kBAAkB,EAAE,kCAAkC;IAEtD,QAAQ,EAAE,qCAAqC;IAC/C,WAAW,EAAE,sFAAsF;IACnG,WAAW,EAAE,sCAAsC;IACnD,YAAY,EAAE,2BAA2B;IAEzC,QAAQ,EACN,iIAAiI;IACnI,WAAW,EAAE,+CAA+C;IAC5D,iBAAiB,EAAE,yDAAyD;IAE5E,WAAW,EAAE,qDAAqD;IAClE,cAAc,EAAE,QAAQ;IACxB,YAAY,EAAE,qBAAqB;IACnC,cAAc,EAAE,4BAA4B;IAC5C,WAAW,EAAE,sBAAsB;IACnC,cAAc,EAAE,iCAAiC;IACjD,gBAAgB,EAAE,qCAAqC;IACvD,YAAY,EAAE,iCAAiC;IAC/C,WAAW,EAAE,uFAAuF;IAEpG,YAAY,EAAE,oBAAoB;IAClC,QAAQ,EAAE,iBAAiB;IAC3B,UAAU,EAAE,8BAA8B;IAC1C,oBAAoB,EAAE,0CAA0C;IAChE,YAAY,EAAE,8BAA8B;IAC5C,UAAU,EAAE,0BAA0B;IACtC,gBAAgB,EAAE,UAAU;IAC5B,gBAAgB,EAAE,sBAAsB;IACxC,YAAY,EAAE,+BAA+B;IAC7C,oBAAoB,EAAE,kDAAkD;IACxE,YAAY,EAAE,yEAAyE;IACvF,YAAY,EAAE,gDAAgD;IAE9D,oBAAoB,EAAE,wCAAwC;IAC9D,kBAAkB,EAAE,+DAA+D;IACnF,qBAAqB,EAAE,iDAAiD;IACxE,oBAAoB,EAAE,+DAA+D;CACtF,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { runShell } from "../agent/tools/shell.js";
|
|
2
|
+
import { t } from "../i18n/index.js";
|
|
3
|
+
// The notification must never hold up the end of a run for long.
|
|
4
|
+
const NOTIFY_TIMEOUT_MS = 15_000;
|
|
5
|
+
const MAX_TASK_CHARS = 500;
|
|
6
|
+
const MAX_NOTES_CHARS = 1_000;
|
|
7
|
+
// Environment values cannot contain NUL bytes.
|
|
8
|
+
function envValue(text, max) {
|
|
9
|
+
return text.replaceAll("\0", "").slice(0, max);
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Runs the user's `notifyCommand` after a /plan run. Details go in as environment
|
|
13
|
+
* variables, never spliced into the command text, so a task or review note cannot
|
|
14
|
+
* inject shell code. A failing command only prints a warning.
|
|
15
|
+
*/
|
|
16
|
+
export async function notifyCompletion(command, cwd, info) {
|
|
17
|
+
if (!command)
|
|
18
|
+
return;
|
|
19
|
+
try {
|
|
20
|
+
const { exitCode, output } = await runShell(command, cwd, undefined, {
|
|
21
|
+
timeoutMs: NOTIFY_TIMEOUT_MS,
|
|
22
|
+
env: {
|
|
23
|
+
TANDEM_OUTCOME: info.outcome,
|
|
24
|
+
TANDEM_TASK: envValue(info.task, MAX_TASK_CHARS),
|
|
25
|
+
TANDEM_NOTES: envValue(info.notes, MAX_NOTES_CHARS),
|
|
26
|
+
TANDEM_REVIEW_LOOPS: String(info.reviewLoops),
|
|
27
|
+
TANDEM_COST_USD: info.costUsd.toFixed(4),
|
|
28
|
+
},
|
|
29
|
+
});
|
|
30
|
+
if (exitCode !== 0) {
|
|
31
|
+
console.warn(t("notifyFailed", { reason: `exit code ${exitCode}: ${output.trim().slice(0, 200)}` }));
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
catch (err) {
|
|
35
|
+
console.warn(t("notifyFailed", { reason: err instanceof Error ? err.message : String(err) }));
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=notify.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notify.js","sourceRoot":"","sources":["../../src/orchestrator/notify.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,CAAC,EAAE,MAAM,kBAAkB,CAAC;AAcrC,iEAAiE;AACjE,MAAM,iBAAiB,GAAG,MAAM,CAAC;AACjC,MAAM,cAAc,GAAG,GAAG,CAAC;AAC3B,MAAM,eAAe,GAAG,KAAK,CAAC;AAE9B,+CAA+C;AAC/C,SAAS,QAAQ,CAAC,IAAY,EAAE,GAAW;IACzC,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AACjD,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,OAA2B,EAAE,GAAW,EAAE,IAAgB;IAC/F,IAAI,CAAC,OAAO;QAAE,OAAO;IACrB,IAAI,CAAC;QACH,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE;YACnE,SAAS,EAAE,iBAAiB;YAC5B,GAAG,EAAE;gBACH,cAAc,EAAE,IAAI,CAAC,OAAO;gBAC5B,WAAW,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC;gBAChD,YAAY,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,eAAe,CAAC;gBACnD,mBAAmB,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC;gBAC7C,eAAe,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;aACzC;SACF,CAAC,CAAC;QACH,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;YACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,MAAM,EAAE,aAAa,QAAQ,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QACvG,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,MAAM,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IAChG,CAAC;AACH,CAAC"}
|
|
@@ -3,6 +3,7 @@ import { buildRepoMap } from "./repoMap.js";
|
|
|
3
3
|
import { runPlanner } from "./planner.js";
|
|
4
4
|
import { runReviewer } from "./reviewer.js";
|
|
5
5
|
import { runShell } from "../agent/tools/shell.js";
|
|
6
|
+
import { notifyCompletion } from "./notify.js";
|
|
6
7
|
import { t } from "../i18n/index.js";
|
|
7
8
|
const WORKER_SYSTEM_PROMPT = `You are a worker in a Tandem Mode orchestration. You get ONE concrete task from
|
|
8
9
|
the plan below, with a repository map. You have no access to the conversation
|
|
@@ -55,6 +56,13 @@ export async function runOrchestration(task, opts) {
|
|
|
55
56
|
opts.usage.add("deepseek-v4-pro", reviewUsage);
|
|
56
57
|
if (review.approved) {
|
|
57
58
|
console.log(t("orchApproved", { notes: review.notes }));
|
|
59
|
+
await notifyCompletion(opts.notifyCommand, opts.cwd, {
|
|
60
|
+
outcome: "approved",
|
|
61
|
+
task,
|
|
62
|
+
notes: review.notes,
|
|
63
|
+
reviewLoops: loops,
|
|
64
|
+
costUsd: opts.usage.estimatedCostUsd(),
|
|
65
|
+
});
|
|
58
66
|
return;
|
|
59
67
|
}
|
|
60
68
|
loops++;
|
|
@@ -62,6 +70,13 @@ export async function runOrchestration(task, opts) {
|
|
|
62
70
|
review.corrections.forEach((c) => console.log(` - ${c.description}`));
|
|
63
71
|
if (loops >= opts.maxReviewLoops) {
|
|
64
72
|
console.log(t("orchMaxLoops", { max: opts.maxReviewLoops }));
|
|
73
|
+
await notifyCompletion(opts.notifyCommand, opts.cwd, {
|
|
74
|
+
outcome: "max_review_loops",
|
|
75
|
+
task,
|
|
76
|
+
notes: review.notes,
|
|
77
|
+
reviewLoops: loops,
|
|
78
|
+
costUsd: opts.usage.estimatedCostUsd(),
|
|
79
|
+
});
|
|
65
80
|
return;
|
|
66
81
|
}
|
|
67
82
|
for (const correction of review.corrections) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orchestrate.js","sourceRoot":"","sources":["../../src/orchestrator/orchestrate.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAqB,MAAM,eAAe,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,CAAC,EAAE,MAAM,kBAAkB,CAAC;AAGrC,MAAM,oBAAoB,GAAG;;;;qEAIwC,CAAC;
|
|
1
|
+
{"version":3,"file":"orchestrate.js","sourceRoot":"","sources":["../../src/orchestrator/orchestrate.ts"],"names":[],"mappings":"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"}
|
package/dist/repl/commands.js
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
import { createSession, findLatestSession, findSessionById, loadSessionMessages, appendSessionMessage, } from "../agent/session.js";
|
|
2
|
+
import { compactConversation, SUMMARY_MODEL } from "../agent/compact.js";
|
|
3
|
+
import { gitDiffTool } from "../agent/tools/gitDiff.js";
|
|
4
|
+
import { describeProfile, listProfiles, loadProfile, normalizeProfileName, saveProfile, } from "../config/profiles.js";
|
|
2
5
|
import { SYSTEM_PROMPT } from "./system-prompt.js";
|
|
3
6
|
import { t } from "../i18n/index.js";
|
|
4
7
|
export async function handleCommand(line, state) {
|
|
@@ -53,10 +56,19 @@ export async function handleCommand(line, state) {
|
|
|
53
56
|
console.log(`Thinking: ${state.thinkingEnabled ? `on (${state.reasoningEffort})` : "off"}`);
|
|
54
57
|
console.log(t("statusBudget", { value: state.budgetUsd !== undefined ? `$${state.budgetUsd.toFixed(2)}` : t("statusNotSet") }));
|
|
55
58
|
console.log(`Max review loops: ${state.maxReviewLoops}`);
|
|
59
|
+
console.log(`Max iterations: ${state.maxIterations}${state.autoContinue ? " (auto-continue)" : ""}`);
|
|
56
60
|
console.log(t("statusVerify", { value: state.verifyCommand ?? t("statusVerifyNone") }));
|
|
61
|
+
console.log(t("statusNotify", { value: state.notifyCommand ?? t("statusVerifyNone") }));
|
|
57
62
|
console.log(t("statusMessages", { count: state.messages.length }));
|
|
58
63
|
return "continue";
|
|
59
64
|
}
|
|
65
|
+
case "diff": {
|
|
66
|
+
const staged = rest[0] === "--staged";
|
|
67
|
+
const scopePath = (staged ? rest.slice(1) : rest).join(" ").trim();
|
|
68
|
+
const result = await gitDiffTool.execute({ staged, ...(scopePath ? { path: scopePath } : {}) }, { cwd: state.cwd, env: state.env, usage: state.usage });
|
|
69
|
+
console.log(result.output);
|
|
70
|
+
return "continue";
|
|
71
|
+
}
|
|
60
72
|
case "usage": {
|
|
61
73
|
const totals = state.usage.totals();
|
|
62
74
|
const cost = state.usage.estimatedCostUsd();
|
|
@@ -95,6 +107,93 @@ export async function handleCommand(line, state) {
|
|
|
95
107
|
console.log(t("sessionNew", { id: state.session.id }));
|
|
96
108
|
return "continue";
|
|
97
109
|
}
|
|
110
|
+
case "save-profile": {
|
|
111
|
+
const name = normalizeProfileName(arg);
|
|
112
|
+
if (!name) {
|
|
113
|
+
console.log(arg ? t("profileInvalidName") : t("usageLine", { syntax: "/save-profile <name>" }));
|
|
114
|
+
return "continue";
|
|
115
|
+
}
|
|
116
|
+
const profile = {
|
|
117
|
+
model: state.model,
|
|
118
|
+
reasoningEffort: state.reasoningEffort,
|
|
119
|
+
maxReviewLoops: state.maxReviewLoops,
|
|
120
|
+
...(state.budgetUsd !== undefined ? { budgetUsd: state.budgetUsd } : {}),
|
|
121
|
+
};
|
|
122
|
+
try {
|
|
123
|
+
const filePath = await saveProfile(name, profile);
|
|
124
|
+
console.log(t("profileSaved", { name, path: filePath }));
|
|
125
|
+
}
|
|
126
|
+
catch (err) {
|
|
127
|
+
console.log(t("errorPrefix", { message: err instanceof Error ? err.message : String(err) }));
|
|
128
|
+
}
|
|
129
|
+
return "continue";
|
|
130
|
+
}
|
|
131
|
+
case "profile": {
|
|
132
|
+
if (!arg) {
|
|
133
|
+
try {
|
|
134
|
+
const names = await listProfiles();
|
|
135
|
+
console.log(names.length > 0 ? t("profileList", { names: names.join(", ") }) : t("profileNone"));
|
|
136
|
+
}
|
|
137
|
+
catch (err) {
|
|
138
|
+
console.log(t("errorPrefix", { message: err instanceof Error ? err.message : String(err) }));
|
|
139
|
+
}
|
|
140
|
+
return "continue";
|
|
141
|
+
}
|
|
142
|
+
const name = normalizeProfileName(arg);
|
|
143
|
+
if (!name) {
|
|
144
|
+
console.log(t("profileInvalidName"));
|
|
145
|
+
return "continue";
|
|
146
|
+
}
|
|
147
|
+
try {
|
|
148
|
+
const profile = await loadProfile(name);
|
|
149
|
+
if (!profile) {
|
|
150
|
+
console.log(t("profileNotFound", { name }));
|
|
151
|
+
return "continue";
|
|
152
|
+
}
|
|
153
|
+
// Only the fields present in the profile are applied; the rest of the session is left alone.
|
|
154
|
+
if (profile.model)
|
|
155
|
+
state.model = profile.model;
|
|
156
|
+
if (profile.reasoningEffort)
|
|
157
|
+
state.reasoningEffort = profile.reasoningEffort;
|
|
158
|
+
if (profile.budgetUsd !== undefined)
|
|
159
|
+
state.budgetUsd = profile.budgetUsd;
|
|
160
|
+
if (profile.maxReviewLoops !== undefined)
|
|
161
|
+
state.maxReviewLoops = profile.maxReviewLoops;
|
|
162
|
+
console.log(t("profileLoaded", { name, summary: describeProfile(profile) }));
|
|
163
|
+
}
|
|
164
|
+
catch (err) {
|
|
165
|
+
console.log(t("profileInvalid", { name, reason: err instanceof Error ? err.message : String(err) }));
|
|
166
|
+
}
|
|
167
|
+
return "continue";
|
|
168
|
+
}
|
|
169
|
+
case "compact": {
|
|
170
|
+
if (state.messages.filter((m) => m.role !== "system").length < 2) {
|
|
171
|
+
console.log(t("compactNothing"));
|
|
172
|
+
return "continue";
|
|
173
|
+
}
|
|
174
|
+
console.log(t("compactWorking", { count: state.messages.length }));
|
|
175
|
+
try {
|
|
176
|
+
const first = state.messages[0];
|
|
177
|
+
const systemPrompt = first?.role === "system" && first.content ? first.content : SYSTEM_PROMPT;
|
|
178
|
+
const result = await compactConversation(state.env, state.messages, systemPrompt);
|
|
179
|
+
state.usage.add(SUMMARY_MODEL, result.usage);
|
|
180
|
+
// New session instead of rewriting the old file: the original history stays on
|
|
181
|
+
// disk untouched, and /resume of the new session loads the compact version.
|
|
182
|
+
const previous = state.session;
|
|
183
|
+
const next = await createSession(state.cwd);
|
|
184
|
+
for (const msg of result.messages) {
|
|
185
|
+
await appendSessionMessage(next, msg);
|
|
186
|
+
}
|
|
187
|
+
const before = state.messages.length;
|
|
188
|
+
state.session = next;
|
|
189
|
+
state.messages = result.messages;
|
|
190
|
+
console.log(t("compactDone", { before, after: result.messages.length, id: next.id, previous: previous.id }));
|
|
191
|
+
}
|
|
192
|
+
catch (err) {
|
|
193
|
+
console.log(t("compactFailed", { message: err instanceof Error ? err.message : String(err) }));
|
|
194
|
+
}
|
|
195
|
+
return "continue";
|
|
196
|
+
}
|
|
98
197
|
case "fork": {
|
|
99
198
|
const forked = await createSession(state.cwd);
|
|
100
199
|
for (const msg of state.messages) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/repl/commands.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/repl/commands.ts"],"names":[],"mappings":"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"}
|