tandem-mode 0.5.0 → 0.5.2
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 +16 -2
- package/dist/agent/clipboard.js +37 -37
- package/dist/agent/clipboard.js.map +1 -1
- package/dist/agent/loop.js +41 -15
- 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 +178 -28
- 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/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 +15 -0
- package/dist/i18n/en.js.map +1 -1
- package/dist/i18n/sr.js +15 -0
- 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/ui/ApprovalMenu.js +31 -0
- package/dist/ui/ApprovalMenu.js.map +1 -0
- package/dist/ui/approvalModel.js +85 -0
- package/dist/ui/approvalModel.js.map +1 -0
- package/dist/ui/status.js +1 -1
- package/dist/ui/status.js.map +1 -1
- package/dist/ui/toolFormat.js +13 -7
- package/dist/ui/toolFormat.js.map +1 -1
- package/package.json +49 -49
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../src/config/credentials.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,YAAY,GAAG,YAAY,CAAC;AAClC,MAAM,YAAY,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC;AAE5C,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,EAAE,iBAAiB,CAAC,CAAC;AAC/F
|
|
1
|
+
{"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../src/config/credentials.ts"],"names":[],"mappings":"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"}
|
package/dist/config/env.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { getStoredApiKey } from "./credentials.js";
|
|
2
|
-
/** DEEPSEEK_API_KEY (env)
|
|
2
|
+
/** DEEPSEEK_API_KEY (env) takes priority over the OS credential store, for CI/automation. */
|
|
3
3
|
export async function resolveApiKey() {
|
|
4
4
|
const envKey = process.env["DEEPSEEK_API_KEY"];
|
|
5
5
|
if (envKey)
|
package/dist/config/store.js
CHANGED
|
@@ -18,7 +18,7 @@ async function readConfigFile(filePath) {
|
|
|
18
18
|
throw err;
|
|
19
19
|
}
|
|
20
20
|
}
|
|
21
|
-
/** Global < project. Session-level overrides (slash
|
|
21
|
+
/** Global < project. Session-level overrides (slash commands) live in the runtime state, not here. */
|
|
22
22
|
export async function loadConfig(cwd) {
|
|
23
23
|
const [global, project] = await Promise.all([
|
|
24
24
|
readConfigFile(globalConfigPath()),
|
package/dist/config/store.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/config/store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B,SAAS,gBAAgB;IACvB,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,iBAAiB,CAAC,GAAW;IACpC,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;AAClD,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,QAAgB;IAC5C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC7C,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAiB,CAAC;IACzC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,EAAE,CAAC;QAChE,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAED,
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/config/store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B,SAAS,gBAAgB;IACvB,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,iBAAiB,CAAC,GAAW;IACpC,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;AAClD,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,QAAgB;IAC5C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC7C,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAiB,CAAC;IACzC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,EAAE,CAAC;QAChE,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAED,sGAAsG;AACtG,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,GAAW;IAC1C,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC1C,cAAc,CAAC,gBAAgB,EAAE,CAAC;QAClC,cAAc,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;KACvC,CAAC,CAAC;IACH,OAAO,EAAE,GAAG,MAAM,EAAE,GAAG,OAAO,EAAE,CAAC;AACnC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,OAAqB;IAC1D,MAAM,QAAQ,GAAG,gBAAgB,EAAE,CAAC;IACpC,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,QAAQ,CAAC,CAAC;IAChD,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzD,MAAM,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,QAAQ,EAAE,GAAG,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,CAAC;AACjG,CAAC"}
|
package/dist/deepseek/client.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { retryTransient } from "./errors.js";
|
|
1
2
|
async function* readSseLines(body) {
|
|
2
3
|
const reader = body.getReader();
|
|
3
4
|
const decoder = new TextDecoder();
|
|
@@ -53,7 +54,7 @@ export async function* streamChatCompletion(env, params) {
|
|
|
53
54
|
messages: params.messages.map(toWireMessage),
|
|
54
55
|
tools: params.tools,
|
|
55
56
|
stream: true,
|
|
56
|
-
//
|
|
57
|
+
// Without this, usage arrives as null in every chunk.
|
|
57
58
|
stream_options: { include_usage: true },
|
|
58
59
|
thinking: params.thinking
|
|
59
60
|
? { type: "enabled", reasoning_effort: params.thinking.reasoningEffort }
|
|
@@ -111,8 +112,12 @@ export async function* streamChatCompletion(env, params) {
|
|
|
111
112
|
}
|
|
112
113
|
}
|
|
113
114
|
}
|
|
114
|
-
/** Non-streaming
|
|
115
|
+
/** Non-streaming call for planner/reviewer: no tools, just text/JSON + usage all at once. */
|
|
115
116
|
export async function chatCompletionOnce(env, params) {
|
|
117
|
+
// Connection drops and 429/5xx are retried with backoff; anything else surfaces immediately.
|
|
118
|
+
return retryTransient(() => chatCompletionOnceAttempt(env, params), params.signal ? { signal: params.signal } : {});
|
|
119
|
+
}
|
|
120
|
+
async function chatCompletionOnceAttempt(env, params) {
|
|
116
121
|
const response = await fetch(`${env.baseUrl}/chat/completions`, {
|
|
117
122
|
method: "POST",
|
|
118
123
|
headers: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/deepseek/client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/deepseek/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Network/API error helpers: tell transient failures (worth retrying) from real ones, and
|
|
3
|
+
* surface the underlying cause. Node's fetch hides it: `fetch failed` is only the message,
|
|
4
|
+
* the real reason (ECONNRESET, ETIMEDOUT, ...) sits in `err.cause`.
|
|
5
|
+
*/
|
|
6
|
+
export const MAX_RETRIES = 3;
|
|
7
|
+
const TRANSIENT_CODES = new Set([
|
|
8
|
+
"ECONNRESET",
|
|
9
|
+
"ECONNREFUSED",
|
|
10
|
+
"ETIMEDOUT",
|
|
11
|
+
"EPIPE",
|
|
12
|
+
"ENETUNREACH",
|
|
13
|
+
"EHOSTUNREACH",
|
|
14
|
+
"EAI_AGAIN",
|
|
15
|
+
"UND_ERR_SOCKET",
|
|
16
|
+
"UND_ERR_CONNECT_TIMEOUT",
|
|
17
|
+
"UND_ERR_HEADERS_TIMEOUT",
|
|
18
|
+
"UND_ERR_BODY_TIMEOUT",
|
|
19
|
+
"UND_ERR_CLOSED",
|
|
20
|
+
]);
|
|
21
|
+
export function isAbortError(err) {
|
|
22
|
+
return err instanceof Error && err.name === "AbortError";
|
|
23
|
+
}
|
|
24
|
+
function causeOf(err) {
|
|
25
|
+
if (typeof err !== "object" || err === null)
|
|
26
|
+
return undefined;
|
|
27
|
+
const cause = err.cause;
|
|
28
|
+
if (typeof cause === "object" && cause !== null)
|
|
29
|
+
return cause;
|
|
30
|
+
return undefined;
|
|
31
|
+
}
|
|
32
|
+
export function errorCode(err) {
|
|
33
|
+
const own = err?.code;
|
|
34
|
+
if (typeof own === "string")
|
|
35
|
+
return own;
|
|
36
|
+
return causeOf(err)?.code;
|
|
37
|
+
}
|
|
38
|
+
/** `message`, plus the underlying cause when there is one, e.g. `fetch failed (ECONNRESET: read ECONNRESET)`. */
|
|
39
|
+
export function describeError(err) {
|
|
40
|
+
if (!(err instanceof Error))
|
|
41
|
+
return String(err);
|
|
42
|
+
const cause = causeOf(err);
|
|
43
|
+
const detail = [cause?.code, cause?.message].filter((p) => typeof p === "string" && p !== "");
|
|
44
|
+
return detail.length > 0 && !err.message.includes(detail[0])
|
|
45
|
+
? `${err.message} (${detail.join(": ")})`
|
|
46
|
+
: err.message;
|
|
47
|
+
}
|
|
48
|
+
/** True for connection problems, dropped streams, 429 and 5xx; false for aborts and for 4xx such as a bad key. */
|
|
49
|
+
export function isTransientError(err) {
|
|
50
|
+
if (!(err instanceof Error) || isAbortError(err))
|
|
51
|
+
return false;
|
|
52
|
+
const code = errorCode(err);
|
|
53
|
+
if (code !== undefined && TRANSIENT_CODES.has(code))
|
|
54
|
+
return true;
|
|
55
|
+
const status = /^DeepSeek API error (\d{3})/.exec(err.message);
|
|
56
|
+
if (status) {
|
|
57
|
+
const n = Number(status[1]);
|
|
58
|
+
return n === 408 || n === 429 || (n >= 500 && n <= 599);
|
|
59
|
+
}
|
|
60
|
+
// undici's generic wording when it has no better code.
|
|
61
|
+
return err instanceof TypeError && /fetch failed|terminated|other side closed/i.test(err.message);
|
|
62
|
+
}
|
|
63
|
+
/** 1s, 2s, 4s, capped at 8s, with a little jitter so parallel runs do not retry in lockstep. */
|
|
64
|
+
export function retryDelayMs(attempt) {
|
|
65
|
+
return Math.min(8000, 1000 * 2 ** attempt) + Math.floor(Math.random() * 250);
|
|
66
|
+
}
|
|
67
|
+
/** Resolves after `ms`, or rejects with an AbortError as soon as `signal` fires. */
|
|
68
|
+
export function sleep(ms, signal) {
|
|
69
|
+
return new Promise((resolve, reject) => {
|
|
70
|
+
const abort = () => Object.assign(new Error("Aborted"), { name: "AbortError" });
|
|
71
|
+
if (signal?.aborted) {
|
|
72
|
+
reject(abort());
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
const timer = setTimeout(() => {
|
|
76
|
+
signal?.removeEventListener("abort", onAbort);
|
|
77
|
+
resolve();
|
|
78
|
+
}, ms);
|
|
79
|
+
const onAbort = () => {
|
|
80
|
+
clearTimeout(timer);
|
|
81
|
+
reject(abort());
|
|
82
|
+
};
|
|
83
|
+
signal?.addEventListener("abort", onAbort, { once: true });
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
/** Runs `fn`, retrying transient failures up to MAX_RETRIES times with backoff. Other errors are rethrown as is. */
|
|
87
|
+
export async function retryTransient(fn, opts = {}) {
|
|
88
|
+
for (let attempt = 0;; attempt++) {
|
|
89
|
+
try {
|
|
90
|
+
return await fn();
|
|
91
|
+
}
|
|
92
|
+
catch (err) {
|
|
93
|
+
if (attempt >= MAX_RETRIES || !isTransientError(err))
|
|
94
|
+
throw err;
|
|
95
|
+
const delayMs = retryDelayMs(attempt);
|
|
96
|
+
opts.onRetry?.({ attempt: attempt + 1, max: MAX_RETRIES, delayMs, reason: describeError(err) });
|
|
97
|
+
await sleep(delayMs, opts.signal);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/deepseek/errors.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,14 +3,14 @@ function parseResponsesUsage(raw) {
|
|
|
3
3
|
promptTokens: Number(raw["input_tokens"] ?? 0),
|
|
4
4
|
completionTokens: Number(raw["output_tokens"] ?? 0),
|
|
5
5
|
totalTokens: Number(raw["total_tokens"] ?? 0),
|
|
6
|
-
// Responses API
|
|
7
|
-
//
|
|
6
|
+
// Responses API caching is fully automatic: it does not report hit/miss
|
|
7
|
+
// separately the way Chat Completions does (docs/api-notes.md #5).
|
|
8
8
|
promptCacheHitTokens: Number(raw["cached_tokens"] ?? 0),
|
|
9
9
|
promptCacheMissTokens: 0,
|
|
10
10
|
reasoningTokens: 0,
|
|
11
11
|
};
|
|
12
12
|
}
|
|
13
|
-
/** `/responses`
|
|
13
|
+
/** `/responses` is stateless: an isolated call, with no effect on the main tool-calling loop or its cache. */
|
|
14
14
|
export async function runWebSearch(env, query, signal) {
|
|
15
15
|
const response = await fetch(`${env.baseUrl}/responses`, {
|
|
16
16
|
method: "POST",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webSearch.js","sourceRoot":"","sources":["../../src/deepseek/webSearch.ts"],"names":[],"mappings":"AAQA,SAAS,mBAAmB,CAAC,GAA4B;IACvD,OAAO;QACL,YAAY,EAAE,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAC9C,gBAAgB,EAAE,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QACnD,WAAW,EAAE,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAC7C,
|
|
1
|
+
{"version":3,"file":"webSearch.js","sourceRoot":"","sources":["../../src/deepseek/webSearch.ts"],"names":[],"mappings":"AAQA,SAAS,mBAAmB,CAAC,GAA4B;IACvD,OAAO;QACL,YAAY,EAAE,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAC9C,gBAAgB,EAAE,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QACnD,WAAW,EAAE,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAC7C,wEAAwE;QACxE,mEAAmE;QACnE,oBAAoB,EAAE,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QACvD,qBAAqB,EAAE,CAAC;QACxB,eAAe,EAAE,CAAC;KACnB,CAAC;AACJ,CAAC;AAED,8GAA8G;AAC9G,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,GAAc,EAAE,KAAa,EAAE,MAAoB;IACpF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,GAAG,CAAC,OAAO,YAAY,EAAE;QACvD,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,aAAa,EAAE,UAAU,GAAG,CAAC,MAAM,EAAE;SACtC;QACD,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7B,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,KAAK,EAAE,mBAAmB;YAC1B,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;YAC/B,WAAW,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE;SACpC,CAAC;KACH,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QACnD,MAAM,IAAI,KAAK,CAAC,gCAAgC,QAAQ,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC,CAAC;IAC9E,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAA4B,CAAC;IAChE,MAAM,MAAM,GAAI,IAAI,CAAC,QAAQ,CAAgD,IAAI,EAAE,CAAC;IACpF,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC;IAClE,MAAM,OAAO,GAAG,OAAO,EAAE,CAAC,SAAS,CAA+C,CAAC;IACnF,MAAM,IAAI,GAAG,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAuB,CAAC;IAEjG,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAC5D,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,mBAAmB,CAAE,IAAI,CAAC,OAAO,CAA6B,IAAI,EAAE,CAAC,EAAE,CAAC;AAChG,CAAC"}
|
package/dist/i18n/en.js
CHANGED
|
@@ -61,6 +61,21 @@ export const en = {
|
|
|
61
61
|
approvalHint: "y = allow, n = deny, a = always allow this tool for this session (answer below)",
|
|
62
62
|
approvalPrompt: "Allow {call}? (y/n/a — a = always allow this tool)",
|
|
63
63
|
autoApproved: "[--yes] auto-approved: {call}",
|
|
64
|
+
approvalTitleEdit: "Edit {path}",
|
|
65
|
+
approvalTitleShell: "Run command",
|
|
66
|
+
approvalTitleTool: "{tool}",
|
|
67
|
+
approvalTitleContinue: "Keep going?",
|
|
68
|
+
approvalQuestionEdit: "Apply this change?",
|
|
69
|
+
approvalQuestionShell: "Run this command?",
|
|
70
|
+
approvalQuestionTool: "Allow {tool}?",
|
|
71
|
+
approvalQuestionContinue: "Continue for {chunk} more calls?",
|
|
72
|
+
approvalYes: "Yes",
|
|
73
|
+
approvalAlways: "Yes, and don't ask again for {tool} this session",
|
|
74
|
+
approvalAlwaysContinue: "Yes, and always continue in this session",
|
|
75
|
+
approvalNo: "No",
|
|
76
|
+
approvalMenuHint: "↑/↓ choose · Enter confirm · 1 2 3 or y a n · Esc deny",
|
|
77
|
+
retrying: "Connection problem ({reason}). Retry {attempt}/{max} in {seconds}s…",
|
|
78
|
+
errorSessionSaved: "The session is saved: send a message (e.g. \"continue\") to pick up where it stopped.",
|
|
64
79
|
errorPrefix: "Error: {message}",
|
|
65
80
|
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
81
|
continueAsk: "The agent used {n} calls and has not finished.",
|
package/dist/i18n/en.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"en.js","sourceRoot":"","sources":["../../src/i18n/en.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"en.js","sourceRoot":"","sources":["../../src/i18n/en.ts"],"names":[],"mappings":"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"}
|
package/dist/i18n/sr.js
CHANGED
|
@@ -59,6 +59,21 @@ export const sr = {
|
|
|
59
59
|
approvalHint: "y = dozvoli, n = odbij, a = uvek dozvoli ovaj alat ovoj sesiji (odgovor ispod)",
|
|
60
60
|
approvalPrompt: "Dozvoli izvršavanje {call}? (y/n/a — a = uvek dozvoli ovaj alat)",
|
|
61
61
|
autoApproved: "[--yes] auto-odobreno: {call}",
|
|
62
|
+
approvalTitleEdit: "Izmena {path}",
|
|
63
|
+
approvalTitleShell: "Pokretanje komande",
|
|
64
|
+
approvalTitleTool: "{tool}",
|
|
65
|
+
approvalTitleContinue: "Nastaviti?",
|
|
66
|
+
approvalQuestionEdit: "Primeniti ovu izmenu?",
|
|
67
|
+
approvalQuestionShell: "Pokrenuti ovu komandu?",
|
|
68
|
+
approvalQuestionTool: "Dozvoliti {tool}?",
|
|
69
|
+
approvalQuestionContinue: "Nastaviti još {chunk} poziva?",
|
|
70
|
+
approvalYes: "Da",
|
|
71
|
+
approvalAlways: "Da, i ne pitaj ponovo za {tool} u ovoj sesiji",
|
|
72
|
+
approvalAlwaysContinue: "Da, i uvek nastavi u ovoj sesiji",
|
|
73
|
+
approvalNo: "Ne",
|
|
74
|
+
approvalMenuHint: "↑/↓ izbor · Enter potvrda · 1 2 3 ili y a n · Esc odbij",
|
|
75
|
+
retrying: "Problem sa vezom ({reason}). Ponovni pokušaj {attempt}/{max} za {seconds}s…",
|
|
76
|
+
errorSessionSaved: "Sesija je sačuvana: pošalji poruku (npr. \"nastavi\") da nastavi tamo gde je stao.",
|
|
62
77
|
errorPrefix: "Greška: {message}",
|
|
63
78
|
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
79
|
continueAsk: "Agent je iskoristio {n} poziva i nije završio.",
|
package/dist/i18n/sr.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sr.js","sourceRoot":"","sources":["../../src/i18n/sr.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sr.js","sourceRoot":"","sources":["../../src/i18n/sr.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import { chatCompletionOnce } from "../deepseek/client.js";
|
|
2
2
|
import { isPlan } from "./types.js";
|
|
3
|
-
const PLANNER_SYSTEM_PROMPT = `You are the planner in the Tandem Mode coding agent. You receive a task and a map
|
|
4
|
-
of the repository. Split the task into small, independent steps that a worker model
|
|
5
|
-
(with no access to this conversation, only the tools read_file/list_dir/search/edit/
|
|
6
|
-
git_diff/shell/view_image) can carry out on its own.
|
|
7
|
-
|
|
8
|
-
Respond ONLY with valid JSON, with no markdown fences, in exactly this schema:
|
|
9
|
-
{
|
|
10
|
-
"summary": "short description of the approach",
|
|
11
|
-
"tasks": [
|
|
12
|
-
{ "id": "t1", "description": "...", "files": ["..."], "acceptanceCriteria": "..." }
|
|
13
|
-
]
|
|
3
|
+
const PLANNER_SYSTEM_PROMPT = `You are the planner in the Tandem Mode coding agent. You receive a task and a map
|
|
4
|
+
of the repository. Split the task into small, independent steps that a worker model
|
|
5
|
+
(with no access to this conversation, only the tools read_file/list_dir/search/edit/
|
|
6
|
+
git_diff/shell/view_image) can carry out on its own.
|
|
7
|
+
|
|
8
|
+
Respond ONLY with valid JSON, with no markdown fences, in exactly this schema:
|
|
9
|
+
{
|
|
10
|
+
"summary": "short description of the approach",
|
|
11
|
+
"tasks": [
|
|
12
|
+
{ "id": "t1", "description": "...", "files": ["..."], "acceptanceCriteria": "..." }
|
|
13
|
+
]
|
|
14
14
|
}`;
|
|
15
15
|
const MAX_ATTEMPTS = 2;
|
|
16
16
|
export async function runPlanner(env, task, repoMap, signal) {
|
|
@@ -40,9 +40,9 @@ export async function runPlanner(env, task, repoMap, signal) {
|
|
|
40
40
|
}
|
|
41
41
|
return { plan: parsed, usage: result.usage };
|
|
42
42
|
}
|
|
43
|
-
//
|
|
44
|
-
//
|
|
45
|
-
//
|
|
43
|
+
// Known behavior: json_object mode occasionally returns empty/invalid
|
|
44
|
+
// content (probably transient API flakiness, not a consistent error;
|
|
45
|
+
// see docs/api-notes.md). One retry covers it without crashing the caller.
|
|
46
46
|
throw lastError ?? new Error("Planner failed after multiple attempts.");
|
|
47
47
|
}
|
|
48
48
|
//# sourceMappingURL=planner.js.map
|
|
@@ -42,7 +42,7 @@ async function listViaFs(cwd) {
|
|
|
42
42
|
await walk(cwd);
|
|
43
43
|
return results;
|
|
44
44
|
}
|
|
45
|
-
/**
|
|
45
|
+
/** A byte-for-byte stable string until the repo content changes; part of the fixed prefix for worker calls. */
|
|
46
46
|
export async function buildRepoMap(cwd) {
|
|
47
47
|
const files = (await listViaGit(cwd)) ?? (await listViaFs(cwd));
|
|
48
48
|
const truncated = files.length > MAX_FILES;
|
|
@@ -1,23 +1,23 @@
|
|
|
1
1
|
import { chatCompletionOnce } from "../deepseek/client.js";
|
|
2
2
|
import { isReviewResult } from "./types.js";
|
|
3
|
-
const REVIEWER_SYSTEM_PROMPT = `You are the reviewer in the Tandem Mode coding agent. You receive the original task,
|
|
4
|
-
the plan the worker(s) carried out, and the git diff of the actual changes. Check whether the
|
|
5
|
-
diff really fulfills the task and the plan's acceptance criteria, contains no
|
|
6
|
-
unnecessary changes, and that the code is reasonable. If a check result
|
|
7
|
-
(build/test) is attached, a non-zero exit code means the change does not pass — in that case do not
|
|
8
|
-
approve, and name the concrete error from the output in "corrections".
|
|
9
|
-
|
|
10
|
-
Respond ONLY with valid JSON, with no markdown fences, in exactly this schema:
|
|
11
|
-
{
|
|
12
|
-
"approved": true|false,
|
|
13
|
-
"notes": "brief justification",
|
|
14
|
-
"corrections": [{ "description": "...", "files": ["..."] }]
|
|
15
|
-
}
|
|
3
|
+
const REVIEWER_SYSTEM_PROMPT = `You are the reviewer in the Tandem Mode coding agent. You receive the original task,
|
|
4
|
+
the plan the worker(s) carried out, and the git diff of the actual changes. Check whether the
|
|
5
|
+
diff really fulfills the task and the plan's acceptance criteria, contains no
|
|
6
|
+
unnecessary changes, and that the code is reasonable. If a check result
|
|
7
|
+
(build/test) is attached, a non-zero exit code means the change does not pass — in that case do not
|
|
8
|
+
approve, and name the concrete error from the output in "corrections".
|
|
9
|
+
|
|
10
|
+
Respond ONLY with valid JSON, with no markdown fences, in exactly this schema:
|
|
11
|
+
{
|
|
12
|
+
"approved": true|false,
|
|
13
|
+
"notes": "brief justification",
|
|
14
|
+
"corrections": [{ "description": "...", "files": ["..."] }]
|
|
15
|
+
}
|
|
16
16
|
"corrections" is an empty array if approved is true.`;
|
|
17
17
|
const MAX_ATTEMPTS = 2;
|
|
18
18
|
const MAX_VERIFY_CHARS = 6000;
|
|
19
19
|
function formatVerify(verify) {
|
|
20
|
-
//
|
|
20
|
+
// Build/test errors are usually at the end of the output, so keep the tail, not the head.
|
|
21
21
|
const out = verify.output.length > MAX_VERIFY_CHARS ? "...(truncated)\n" + verify.output.slice(-MAX_VERIFY_CHARS) : verify.output;
|
|
22
22
|
return `\n\nCheck result (${verify.command}), exit code ${verify.exitCode ?? "n/a (not run)"}:\n${out || "(no output)"}`;
|
|
23
23
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reviewer.js","sourceRoot":"","sources":["../../src/orchestrator/reviewer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAG3D,OAAO,EAAE,cAAc,EAAgC,MAAM,YAAY,CAAC;AAE1E,MAAM,sBAAsB,GAAG;;;;;;;;;;;;;qDAasB,CAAC;AAEtD,MAAM,YAAY,GAAG,CAAC,CAAC;AACvB,MAAM,gBAAgB,GAAG,IAAI,CAAC;AAQ9B,SAAS,YAAY,CAAC,MAAoB;IACxC,
|
|
1
|
+
{"version":3,"file":"reviewer.js","sourceRoot":"","sources":["../../src/orchestrator/reviewer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAG3D,OAAO,EAAE,cAAc,EAAgC,MAAM,YAAY,CAAC;AAE1E,MAAM,sBAAsB,GAAG;;;;;;;;;;;;;qDAasB,CAAC;AAEtD,MAAM,YAAY,GAAG,CAAC,CAAC;AACvB,MAAM,gBAAgB,GAAG,IAAI,CAAC;AAQ9B,SAAS,YAAY,CAAC,MAAoB;IACxC,0FAA0F;IAC1F,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,gBAAgB,CAAC,CAAC,CAAC,kBAAkB,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;IAClI,OAAO,qBAAqB,MAAM,CAAC,OAAO,gBAAgB,MAAM,CAAC,QAAQ,IAAI,eAAe,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;AAC3H,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,GAAc,EACd,YAAoB,EACpB,IAAU,EACV,OAAe,EACf,MAAqB,EACrB,MAAoB;IAEpB,IAAI,SAA4B,CAAC;IAEjC,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,YAAY,EAAE,OAAO,EAAE,EAAE,CAAC;QACzD,MAAM,QAAQ,GAAG,MAAM,kBAAkB,CAAC,GAAG,EAAE;YAC7C,KAAK,EAAE,iBAAiB;YACxB,QAAQ,EAAE,EAAE,eAAe,EAAE,MAAM,EAAE;YACrC,UAAU,EAAE,IAAI;YAChB,QAAQ,EAAE;gBACR,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,sBAAsB,EAAE;gBACnD;oBACE,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE,mBAAmB,YAAY,cAAc,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,kBAAkB,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE;iBACpK;aACF;YACD,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC9B,CAAC,CAAC;QAEH,IAAI,MAAe,CAAC;QACpB,IAAI,CAAC;YACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACxC,CAAC;QAAC,MAAM,CAAC;YACP,SAAS,GAAG,IAAI,KAAK,CAAC,+CAA+C,OAAO,OAAO,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;YACrH,SAAS;QACX,CAAC;QACD,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5B,SAAS,GAAG,IAAI,KAAK,CAAC,8DAA8D,OAAO,OAAO,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;YACpI,SAAS;QACX,CAAC;QAED,MAAM,MAAM,GAAiB;YAC3B,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,EAAE;YACzB,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,EAAE;SACtC,CAAC;QACF,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC;IAC3C,CAAC;IAED,MAAM,SAAS,IAAI,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;AAC3E,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState } from "react";
|
|
3
|
+
import { Box, Text, useInput } from "ink";
|
|
4
|
+
import { t } from "../i18n/index.js";
|
|
5
|
+
import { buildApprovalCopy, keyToAction } from "./approvalModel.js";
|
|
6
|
+
/**
|
|
7
|
+
* Boxed, keyboard-driven approval: arrows + Enter, 1-3, or y/a/n. It owns stdin only while it is
|
|
8
|
+
* mounted, so it must not be shown at the same time as a readline interface.
|
|
9
|
+
*/
|
|
10
|
+
export function ApprovalMenu({ toolName, args, onChoice, }) {
|
|
11
|
+
const copy = buildApprovalCopy(toolName, args);
|
|
12
|
+
const ids = copy.options.map((o) => o.id);
|
|
13
|
+
const [index, setIndex] = useState(0);
|
|
14
|
+
// Guards against a second key press resolving the same prompt twice before React unmounts it.
|
|
15
|
+
const [done, setDone] = useState(false);
|
|
16
|
+
useInput((input, key) => {
|
|
17
|
+
if (done)
|
|
18
|
+
return;
|
|
19
|
+
const action = keyToAction(input, key, index, ids);
|
|
20
|
+
if (!action)
|
|
21
|
+
return;
|
|
22
|
+
if (action.type === "move") {
|
|
23
|
+
setIndex(action.index);
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
setDone(true);
|
|
27
|
+
onChoice(action.id);
|
|
28
|
+
});
|
|
29
|
+
return (_jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: "yellow", paddingX: 1, children: [_jsx(Text, { bold: true, color: "yellow", children: copy.title }), copy.body.length > 0 && (_jsx(Box, { flexDirection: "column", marginTop: 1, children: copy.body.map((line, i) => (_jsx(Text, { ...(line.color ? { color: line.color } : line.dim ? { dimColor: true } : {}), children: line.text }, i))) })), _jsx(Box, { marginTop: 1, children: _jsx(Text, { bold: true, children: copy.question }) }), copy.options.map((option, i) => (_jsxs(Text, { ...(i === index ? { color: "cyan", bold: true } : {}), children: [i === index ? "❯ " : " ", i + 1, ". ", option.label] }, option.id))), _jsx(Box, { marginTop: 1, children: _jsx(Text, { dimColor: true, children: t("approvalMenuHint") }) })] }));
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=ApprovalMenu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ApprovalMenu.js","sourceRoot":"","sources":["../../src/ui/ApprovalMenu.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { t } from "../i18n/index.js";
|
|
2
|
+
import { formatToolCall } from "./toolFormat.js";
|
|
3
|
+
/** Pseudo-tool used to ask "continue after the iteration limit?" through the same approval flow. */
|
|
4
|
+
export const CONTINUE_TOOL = "__continue__";
|
|
5
|
+
function str(value) {
|
|
6
|
+
return typeof value === "string" ? value : value === undefined || value === null ? "" : String(value);
|
|
7
|
+
}
|
|
8
|
+
/** What the approval box says for a given tool call. A shell command is always shown in full, never shortened. */
|
|
9
|
+
export function buildApprovalCopy(toolName, args) {
|
|
10
|
+
if (toolName === CONTINUE_TOOL) {
|
|
11
|
+
return {
|
|
12
|
+
title: t("approvalTitleContinue"),
|
|
13
|
+
body: [{ text: t("continueAsk", { n: Number(args["iterations"] ?? 0) }) }],
|
|
14
|
+
question: t("approvalQuestionContinue", { chunk: Number(args["chunk"] ?? 0) }),
|
|
15
|
+
options: [
|
|
16
|
+
{ id: "yes", label: t("approvalYes") },
|
|
17
|
+
{ id: "always", label: t("approvalAlwaysContinue") },
|
|
18
|
+
{ id: "no", label: t("approvalNo") },
|
|
19
|
+
],
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
const options = [
|
|
23
|
+
{ id: "yes", label: t("approvalYes") },
|
|
24
|
+
{ id: "always", label: t("approvalAlways", { tool: toolName }) },
|
|
25
|
+
{ id: "no", label: t("approvalNo") },
|
|
26
|
+
];
|
|
27
|
+
if (toolName === "shell") {
|
|
28
|
+
return {
|
|
29
|
+
title: t("approvalTitleShell"),
|
|
30
|
+
body: [{ text: str(args["command"]) }],
|
|
31
|
+
question: t("approvalQuestionShell"),
|
|
32
|
+
options,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
if (toolName === "edit") {
|
|
36
|
+
const call = formatToolCall(toolName, args);
|
|
37
|
+
const diff = (call.diff ?? []).map((l) => l.kind === "removed"
|
|
38
|
+
? { text: `- ${l.text}`, color: "red" }
|
|
39
|
+
: l.kind === "added"
|
|
40
|
+
? { text: `+ ${l.text}`, color: "green" }
|
|
41
|
+
: { text: ` ${l.text}`, dim: true });
|
|
42
|
+
return {
|
|
43
|
+
title: t("approvalTitleEdit", { path: str(args["path"]) }),
|
|
44
|
+
body: diff,
|
|
45
|
+
question: t("approvalQuestionEdit"),
|
|
46
|
+
options,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
return {
|
|
50
|
+
title: t("approvalTitleTool", { tool: toolName }),
|
|
51
|
+
body: [{ text: JSON.stringify(args) }],
|
|
52
|
+
question: t("approvalQuestionTool", { tool: toolName }),
|
|
53
|
+
options,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Maps a key press to what the menu should do. Arrows/Tab move the highlight, Enter confirms it,
|
|
58
|
+
* 1-3 or y/a/n pick directly, Esc and Ctrl+C mean "no".
|
|
59
|
+
*/
|
|
60
|
+
export function keyToAction(input, key, index, ids) {
|
|
61
|
+
const count = ids.length;
|
|
62
|
+
if (key.upArrow)
|
|
63
|
+
return { type: "move", index: (index - 1 + count) % count };
|
|
64
|
+
if (key.downArrow || key.tab)
|
|
65
|
+
return { type: "move", index: (index + 1) % count };
|
|
66
|
+
if (key.return) {
|
|
67
|
+
const id = ids[index];
|
|
68
|
+
return id ? { type: "choose", id } : null;
|
|
69
|
+
}
|
|
70
|
+
if (key.escape || (key.ctrl && input === "c"))
|
|
71
|
+
return { type: "choose", id: "no" };
|
|
72
|
+
const lower = input.toLowerCase();
|
|
73
|
+
if (lower === "y")
|
|
74
|
+
return { type: "choose", id: "yes" };
|
|
75
|
+
if (lower === "a" && ids.includes("always"))
|
|
76
|
+
return { type: "choose", id: "always" };
|
|
77
|
+
if (lower === "n")
|
|
78
|
+
return { type: "choose", id: "no" };
|
|
79
|
+
if (/^[1-9]$/.test(input)) {
|
|
80
|
+
const id = ids[Number(input) - 1];
|
|
81
|
+
return id ? { type: "choose", id } : null;
|
|
82
|
+
}
|
|
83
|
+
return null;
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=approvalModel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approvalModel.js","sourceRoot":"","sources":["../../src/ui/approvalModel.ts"],"names":[],"mappings":"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"}
|
package/dist/ui/status.js
CHANGED
package/dist/ui/status.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/ui/status.ts"],"names":[],"mappings":"AAmBA,
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/ui/status.ts"],"names":[],"mappings":"AAmBA,iFAAiF;AACjF,MAAM,UAAU,UAAU,CAAC,KAAa;IACtC,OAAO,KAAK,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAA0D;IACpF,IAAI,KAAK,GAAgB,QAAQ,CAAC;IAClC,MAAM,IAAI,GAAG,CAAC,CAAc,EAAU,EAAE,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrF,MAAM,KAAK,GAAG,CAAC,CAAc,EAAQ,EAAE;QACrC,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;YAAE,KAAK,GAAG,CAAC,CAAC;IACvC,CAAC,CAAC;IAEF,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS,IAAI,KAAK,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC;QACzD,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC;QAC9C,IAAI,KAAK,IAAI,IAAI;YAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;aAC9B,IAAI,KAAK,IAAI,GAAG;YAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACvC,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;QAC5C,IAAI,KAAK,IAAI,IAAI;YAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;aAC9B,IAAI,KAAK,IAAI,GAAG;YAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACvC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAkB;IACjD,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,KAAK,SAAS;QACxC,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;QACjE,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;IACnC,MAAM,KAAK,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC1D,IAAI,KAAK,CAAC,SAAS;QAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACjD,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;AAChE,CAAC"}
|