@visorcraft/idlehands 1.1.17 → 1.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent/formatting.js +30 -13
- package/dist/agent/formatting.js.map +1 -1
- package/dist/agent/review-artifact.js +12 -8
- package/dist/agent/review-artifact.js.map +1 -1
- package/dist/agent/tool-calls.js +57 -20
- package/dist/agent/tool-calls.js.map +1 -1
- package/dist/agent/tool-loop-detection.js +310 -0
- package/dist/agent/tool-loop-detection.js.map +1 -0
- package/dist/agent/tool-loop-guard.js +251 -0
- package/dist/agent/tool-loop-guard.js.map +1 -0
- package/dist/agent.js +460 -144
- package/dist/agent.js.map +1 -1
- package/dist/anton/controller.js +46 -30
- package/dist/anton/controller.js.map +1 -1
- package/dist/anton/lock.js +5 -1
- package/dist/anton/lock.js.map +1 -1
- package/dist/anton/parser.js +18 -19
- package/dist/anton/parser.js.map +1 -1
- package/dist/anton/prompt.js +42 -11
- package/dist/anton/prompt.js.map +1 -1
- package/dist/anton/reporter.js.map +1 -1
- package/dist/anton/session.js.map +1 -1
- package/dist/anton/verifier.js +3 -5
- package/dist/anton/verifier.js.map +1 -1
- package/dist/bench/compare.js +53 -20
- package/dist/bench/compare.js.map +1 -1
- package/dist/bench/openclaw.js +4 -4
- package/dist/bench/openclaw.js.map +1 -1
- package/dist/bench/report.js +11 -3
- package/dist/bench/report.js.map +1 -1
- package/dist/bench/runner.js +20 -14
- package/dist/bench/runner.js.map +1 -1
- package/dist/bot/commands.js +65 -31
- package/dist/bot/commands.js.map +1 -1
- package/dist/bot/confirm-discord.js +32 -9
- package/dist/bot/confirm-discord.js.map +1 -1
- package/dist/bot/confirm-telegram.js +26 -10
- package/dist/bot/confirm-telegram.js.map +1 -1
- package/dist/bot/dir-guard.js +18 -3
- package/dist/bot/dir-guard.js.map +1 -1
- package/dist/bot/discord-routing.js +28 -4
- package/dist/bot/discord-routing.js.map +1 -1
- package/dist/bot/discord-streaming.js +3 -3
- package/dist/bot/discord-streaming.js.map +1 -1
- package/dist/bot/discord.js +82 -37
- package/dist/bot/discord.js.map +1 -1
- package/dist/bot/escalation.js +124 -0
- package/dist/bot/escalation.js.map +1 -0
- package/dist/bot/format.js +2 -5
- package/dist/bot/format.js.map +1 -1
- package/dist/bot/session-manager.js +17 -6
- package/dist/bot/session-manager.js.map +1 -1
- package/dist/bot/telegram.js +88 -28
- package/dist/bot/telegram.js.map +1 -1
- package/dist/cli/agent-turn.js +10 -4
- package/dist/cli/agent-turn.js.map +1 -1
- package/dist/cli/args.js +51 -9
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/bot.js +19 -9
- package/dist/cli/bot.js.map +1 -1
- package/dist/cli/build-repl-context.js +60 -26
- package/dist/cli/build-repl-context.js.map +1 -1
- package/dist/cli/command-registry.js.map +1 -1
- package/dist/cli/commands/anton.js +5 -3
- package/dist/cli/commands/anton.js.map +1 -1
- package/dist/cli/commands/editing.js +27 -12
- package/dist/cli/commands/editing.js.map +1 -1
- package/dist/cli/commands/model.js +16 -7
- package/dist/cli/commands/model.js.map +1 -1
- package/dist/cli/commands/project.js +52 -17
- package/dist/cli/commands/project.js.map +1 -1
- package/dist/cli/commands/runtime.js +1 -1
- package/dist/cli/commands/runtime.js.map +1 -1
- package/dist/cli/commands/secrets.js +279 -0
- package/dist/cli/commands/secrets.js.map +1 -0
- package/dist/cli/commands/session.js +49 -1
- package/dist/cli/commands/session.js.map +1 -1
- package/dist/cli/commands/tools.js +3 -1
- package/dist/cli/commands/tools.js.map +1 -1
- package/dist/cli/commands/trifecta.js +1 -1
- package/dist/cli/commands/trifecta.js.map +1 -1
- package/dist/cli/commands/tui.js.map +1 -1
- package/dist/cli/init.js +50 -16
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/input.js +25 -7
- package/dist/cli/input.js.map +1 -1
- package/dist/cli/oneshot.js +31 -19
- package/dist/cli/oneshot.js.map +1 -1
- package/dist/cli/repl-dispatch.js +10 -6
- package/dist/cli/repl-dispatch.js.map +1 -1
- package/dist/cli/runtime-cmds.js +110 -46
- package/dist/cli/runtime-cmds.js.map +1 -1
- package/dist/cli/service.js +3 -3
- package/dist/cli/service.js.map +1 -1
- package/dist/cli/session-state.js +12 -5
- package/dist/cli/session-state.js.map +1 -1
- package/dist/cli/setup.js +86 -33
- package/dist/cli/setup.js.map +1 -1
- package/dist/cli/shell.js +4 -4
- package/dist/cli/shell.js.map +1 -1
- package/dist/cli/status.js +56 -12
- package/dist/cli/status.js.map +1 -1
- package/dist/client.js +40 -21
- package/dist/client.js.map +1 -1
- package/dist/commands.js +1 -1
- package/dist/commands.js.map +1 -1
- package/dist/config.js +171 -15
- package/dist/config.js.map +1 -1
- package/dist/confirm/auto.js.map +1 -1
- package/dist/confirm/headless.js +13 -2
- package/dist/confirm/headless.js.map +1 -1
- package/dist/confirm/terminal.js +1 -5
- package/dist/confirm/terminal.js.map +1 -1
- package/dist/context.js +9 -3
- package/dist/context.js.map +1 -1
- package/dist/git.js +56 -61
- package/dist/git.js.map +1 -1
- package/dist/harnesses.js +137 -37
- package/dist/harnesses.js.map +1 -1
- package/dist/history.js +12 -4
- package/dist/history.js.map +1 -1
- package/dist/hooks/index.js +2 -2
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/loader.js +6 -5
- package/dist/hooks/loader.js.map +1 -1
- package/dist/hooks/manager.js.map +1 -1
- package/dist/hooks/plugins/example-console.js.map +1 -1
- package/dist/hooks/scaffold.js +8 -6
- package/dist/hooks/scaffold.js.map +1 -1
- package/dist/index.js +120 -66
- package/dist/index.js.map +1 -1
- package/dist/indexer.js +6 -18
- package/dist/indexer.js.map +1 -1
- package/dist/jsonrpc.js.map +1 -1
- package/dist/lens.js +38 -16
- package/dist/lens.js.map +1 -1
- package/dist/lsp.js +60 -24
- package/dist/lsp.js.map +1 -1
- package/dist/markdown.js +6 -6
- package/dist/markdown.js.map +1 -1
- package/dist/mcp.js +15 -6
- package/dist/mcp.js.map +1 -1
- package/dist/model-customization.js +7 -3
- package/dist/model-customization.js.map +1 -1
- package/dist/progress/message-edit-scheduler.js +15 -3
- package/dist/progress/message-edit-scheduler.js.map +1 -1
- package/dist/progress/progress-message-renderer.js.map +1 -1
- package/dist/progress/progress-presenter.js +3 -3
- package/dist/progress/progress-presenter.js.map +1 -1
- package/dist/progress/serialize-telegram.js.map +1 -1
- package/dist/progress/tool-summary.js +3 -1
- package/dist/progress/tool-summary.js.map +1 -1
- package/dist/progress/turn-progress.js +3 -1
- package/dist/progress/turn-progress.js.map +1 -1
- package/dist/recovery.js +11 -3
- package/dist/recovery.js.map +1 -1
- package/dist/replay.js +9 -3
- package/dist/replay.js.map +1 -1
- package/dist/replay_cli.js +5 -3
- package/dist/replay_cli.js.map +1 -1
- package/dist/runtime/executor.js +66 -20
- package/dist/runtime/executor.js.map +1 -1
- package/dist/runtime/health.js.map +1 -1
- package/dist/runtime/host-runner.js +103 -0
- package/dist/runtime/host-runner.js.map +1 -0
- package/dist/runtime/planner.js +3 -1
- package/dist/runtime/planner.js.map +1 -1
- package/dist/runtime/secrets.js +102 -0
- package/dist/runtime/secrets.js.map +1 -0
- package/dist/runtime/store.js +95 -19
- package/dist/runtime/store.js.map +1 -1
- package/dist/safety.js +38 -21
- package/dist/safety.js.map +1 -1
- package/dist/spinner.js +7 -8
- package/dist/spinner.js.map +1 -1
- package/dist/sys/context.js +3 -3
- package/dist/sys/context.js.map +1 -1
- package/dist/term.js +1 -1
- package/dist/term.js.map +1 -1
- package/dist/themes.js +11 -5
- package/dist/themes.js.map +1 -1
- package/dist/tools/tool-error.js +2 -5
- package/dist/tools/tool-error.js.map +1 -1
- package/dist/tools.js +69 -34
- package/dist/tools.js.map +1 -1
- package/dist/tui/branch-picker.js +9 -3
- package/dist/tui/branch-picker.js.map +1 -1
- package/dist/tui/command-handler.js +88 -36
- package/dist/tui/command-handler.js.map +1 -1
- package/dist/tui/confirm.js.map +1 -1
- package/dist/tui/controller.js +234 -117
- package/dist/tui/controller.js.map +1 -1
- package/dist/tui/event-bridge.js.map +1 -1
- package/dist/tui/keymap.js +93 -71
- package/dist/tui/keymap.js.map +1 -1
- package/dist/tui/layout.js +9 -1
- package/dist/tui/layout.js.map +1 -1
- package/dist/tui/render.js +17 -5
- package/dist/tui/render.js.map +1 -1
- package/dist/tui/screen.js.map +1 -1
- package/dist/tui/state.js +129 -63
- package/dist/tui/state.js.map +1 -1
- package/dist/tui/theme.js +12 -3
- package/dist/tui/theme.js.map +1 -1
- package/dist/upgrade.js +28 -15
- package/dist/upgrade.js.map +1 -1
- package/dist/utils.js +8 -5
- package/dist/utils.js.map +1 -1
- package/dist/vault.js +48 -12
- package/dist/vault.js.map +1 -1
- package/dist/vim.js.map +1 -1
- package/package.json +11 -2
package/dist/confirm/headless.js
CHANGED
|
@@ -6,8 +6,19 @@
|
|
|
6
6
|
* - reject: reject all mutating operations (--non-interactive)
|
|
7
7
|
* - default/plan: reject everything (can't prompt a non-interactive terminal)
|
|
8
8
|
*/
|
|
9
|
-
const READ_ONLY_TOOLS = new Set([
|
|
10
|
-
'
|
|
9
|
+
const READ_ONLY_TOOLS = new Set([
|
|
10
|
+
'read_file',
|
|
11
|
+
'read_files',
|
|
12
|
+
'list_dir',
|
|
13
|
+
'search_files',
|
|
14
|
+
'sys_context',
|
|
15
|
+
'vault_search',
|
|
16
|
+
'lsp_diagnostics',
|
|
17
|
+
'lsp_symbols',
|
|
18
|
+
'lsp_hover',
|
|
19
|
+
'lsp_definition',
|
|
20
|
+
'lsp_references',
|
|
21
|
+
]);
|
|
11
22
|
export class HeadlessConfirmProvider {
|
|
12
23
|
mode;
|
|
13
24
|
constructor(mode) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"headless.js","sourceRoot":"","sources":["../../src/confirm/headless.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;
|
|
1
|
+
{"version":3,"file":"headless.js","sourceRoot":"","sources":["../../src/confirm/headless.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AASH,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC;IAC9B,WAAW;IACX,YAAY;IACZ,UAAU;IACV,cAAc;IACd,aAAa;IACb,cAAc;IACd,iBAAiB;IACjB,aAAa;IACb,WAAW;IACX,gBAAgB;IAChB,gBAAgB;CACjB,CAAC,CAAC;AAEH,MAAM,OAAO,uBAAuB;IACd;IAApB,YAAoB,IAAkB;QAAlB,SAAI,GAAJ,IAAI,CAAc;IAAG,CAAC;IAE1C,KAAK,CAAC,OAAO,CAAC,IAAoB;QAChC,sCAAsC;QACtC,IAAI,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QAEhD,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;YAClB,KAAK,MAAM;gBACT,OAAO,IAAI,CAAC;YACd,KAAK,WAAW;gBACd,wDAAwD;gBACxD,OAAO,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC;YAC9B,KAAK,QAAQ;gBACX,mFAAmF;gBACnF,OAAO,CAAC,KAAK,CACX,8BAA8B,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,OAAO,IAAI,cAAc,qCAAqC,CAChH,CAAC;gBACF,OAAO,KAAK,CAAC;YACf,KAAK,SAAS,CAAC;YACf,KAAK,MAAM;gBACT,4CAA4C;gBAC5C,OAAO,CAAC,KAAK,CACX,uBAAuB,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,OAAO,UAAU,IAAI,CAAC,IAAI,WAAW,CAChF,CAAC;gBACF,OAAO,KAAK,CAAC;QACjB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,IAAmB;QACnC,OAAO,CAAC,KAAK,CAAC,sBAAsB,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IACnE,CAAC;CACF"}
|
package/dist/confirm/terminal.js
CHANGED
|
@@ -79,11 +79,7 @@ export class TerminalConfirmProvider {
|
|
|
79
79
|
const maxW = Math.min(process.stdout.columns ?? 80, 80);
|
|
80
80
|
const inner = summary.length > maxW - 6 ? summary.slice(0, maxW - 9) + '...' : summary;
|
|
81
81
|
const border = '─'.repeat(Math.max(inner.length + 2, 20));
|
|
82
|
-
const lines = [
|
|
83
|
-
`┌${border}┐`,
|
|
84
|
-
`│ ${inner.padEnd(border.length - 1)}│`,
|
|
85
|
-
`└${border}┘`
|
|
86
|
-
];
|
|
82
|
+
const lines = [`┌${border}┐`, `│ ${inner.padEnd(border.length - 1)}│`, `└${border}┘`];
|
|
87
83
|
return `${lines.join('\n')}\n${suffix} `;
|
|
88
84
|
}
|
|
89
85
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"terminal.js","sourceRoot":"","sources":["../../src/confirm/terminal.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"terminal.js","sourceRoot":"","sources":["../../src/confirm/terminal.ts"],"names":[],"mappings":"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"}
|
package/dist/context.js
CHANGED
|
@@ -23,7 +23,9 @@ function resolveHintPath(abs, cwd) {
|
|
|
23
23
|
}
|
|
24
24
|
function summarizeProjectContext(text, maxTokens = 1024) {
|
|
25
25
|
const maxChars = Math.max(800, Math.floor(maxTokens * 4));
|
|
26
|
-
const lines = String(text ?? '')
|
|
26
|
+
const lines = String(text ?? '')
|
|
27
|
+
.replace(/\r/g, '')
|
|
28
|
+
.split('\n');
|
|
27
29
|
const picked = [];
|
|
28
30
|
const seen = new Set();
|
|
29
31
|
const push = (line) => {
|
|
@@ -44,7 +46,8 @@ function summarizeProjectContext(text, maxTokens = 1024) {
|
|
|
44
46
|
const nxt = lines[j] ?? '';
|
|
45
47
|
if (/^\s{0,3}#{1,4}\s+/.test(nxt))
|
|
46
48
|
break;
|
|
47
|
-
if (/^\s*[-*]\s+/.test(nxt) ||
|
|
49
|
+
if (/^\s*[-*]\s+/.test(nxt) ||
|
|
50
|
+
/\b(TODO|FIXME|NOTE|IMPORTANT|MUST|NEVER|ALWAYS|RULE)\b/i.test(nxt)) {
|
|
48
51
|
push(nxt);
|
|
49
52
|
}
|
|
50
53
|
}
|
|
@@ -71,7 +74,10 @@ function summarizeProjectContext(text, maxTokens = 1024) {
|
|
|
71
74
|
}
|
|
72
75
|
let out = picked.join('\n');
|
|
73
76
|
if (!out.trim())
|
|
74
|
-
out = lines
|
|
77
|
+
out = lines
|
|
78
|
+
.filter((l) => l.trim())
|
|
79
|
+
.slice(0, 120)
|
|
80
|
+
.join('\n');
|
|
75
81
|
if (out.length > maxChars) {
|
|
76
82
|
out = out.slice(0, maxChars) + `\n[summary truncated, source larger than ~${maxTokens} tokens]`;
|
|
77
83
|
}
|
package/dist/context.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"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"}
|
package/dist/git.js
CHANGED
|
@@ -1,27 +1,19 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
child = spawn(BASH, ['-lc', cmd], { cwd, stdio: ['ignore', 'pipe', 'ignore'] });
|
|
8
|
-
}
|
|
9
|
-
catch {
|
|
10
|
-
resolve({ rc: 127, out: '' });
|
|
11
|
-
return;
|
|
12
|
-
}
|
|
13
|
-
const out = [];
|
|
14
|
-
const t = setTimeout(() => child.kill('SIGKILL'), Math.max(1, timeoutSec) * 1000);
|
|
15
|
-
child.on('error', () => {
|
|
16
|
-
clearTimeout(t);
|
|
17
|
-
resolve({ rc: 127, out: '' });
|
|
18
|
-
});
|
|
19
|
-
child.stdout.on('data', (d) => out.push(d));
|
|
20
|
-
child.on('close', (code) => {
|
|
21
|
-
clearTimeout(t);
|
|
22
|
-
resolve({ rc: code ?? 0, out: Buffer.concat(out).toString('utf8') });
|
|
23
|
-
});
|
|
1
|
+
import { spawnSync } from 'node:child_process';
|
|
2
|
+
function runGit(cwd, args, timeoutMs) {
|
|
3
|
+
const res = spawnSync('git', args, {
|
|
4
|
+
cwd,
|
|
5
|
+
encoding: 'utf8',
|
|
6
|
+
timeout: timeoutMs,
|
|
24
7
|
});
|
|
8
|
+
return {
|
|
9
|
+
status: res.status ?? 1,
|
|
10
|
+
stdout: String(res.stdout || ''),
|
|
11
|
+
stderr: String(res.stderr || ''),
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
function isInsideWorkTree(cwd) {
|
|
15
|
+
const inside = runGit(cwd, ['rev-parse', '--is-inside-work-tree'], 1000);
|
|
16
|
+
return inside.status === 0 && inside.stdout.trim().startsWith('true');
|
|
25
17
|
}
|
|
26
18
|
function clipLines(s, maxLines, maxChars) {
|
|
27
19
|
const lines = s.split(/\r?\n/).filter(Boolean);
|
|
@@ -35,26 +27,25 @@ function clipLines(s, maxLines, maxChars) {
|
|
|
35
27
|
}
|
|
36
28
|
export async function loadGitContext(cwd) {
|
|
37
29
|
// Avoid slow git operations; keep it short and bounded.
|
|
38
|
-
|
|
39
|
-
if (inside.rc !== 0 || !inside.out.trim().startsWith('true'))
|
|
30
|
+
if (!isInsideWorkTree(cwd))
|
|
40
31
|
return '';
|
|
41
|
-
const branch =
|
|
42
|
-
const status =
|
|
43
|
-
const diffstat =
|
|
44
|
-
const recent =
|
|
32
|
+
const branch = runGit(cwd, ['rev-parse', '--abbrev-ref', 'HEAD'], 1000).stdout;
|
|
33
|
+
const status = runGit(cwd, ['status', '-s'], 2000).stdout;
|
|
34
|
+
const diffstat = runGit(cwd, ['diff', '--stat'], 2000).stdout;
|
|
35
|
+
const recent = runGit(cwd, ['log', '--oneline', '-5'], 2000).stdout;
|
|
45
36
|
const parts = [];
|
|
46
|
-
parts.push(`[git branch: ${branch.
|
|
47
|
-
const st = clipLines(status
|
|
37
|
+
parts.push(`[git branch: ${branch.trim() || 'unknown'}]`);
|
|
38
|
+
const st = clipLines(status, 40, 2000);
|
|
48
39
|
if (st.trim()) {
|
|
49
40
|
parts.push('[git status -s]');
|
|
50
41
|
parts.push(st);
|
|
51
42
|
}
|
|
52
|
-
const ds = clipLines(diffstat
|
|
43
|
+
const ds = clipLines(diffstat, 40, 2000);
|
|
53
44
|
if (ds.trim()) {
|
|
54
45
|
parts.push('[git diff --stat]');
|
|
55
46
|
parts.push(ds);
|
|
56
47
|
}
|
|
57
|
-
const lg = clipLines(recent
|
|
48
|
+
const lg = clipLines(recent, 8, 1200);
|
|
58
49
|
if (lg.trim()) {
|
|
59
50
|
parts.push('[git log --oneline -5]');
|
|
60
51
|
parts.push(lg);
|
|
@@ -62,73 +53,77 @@ export async function loadGitContext(cwd) {
|
|
|
62
53
|
return parts.join('\n');
|
|
63
54
|
}
|
|
64
55
|
export function isGitDirty(cwd) {
|
|
65
|
-
|
|
66
|
-
if (inside.status !== 0 || !String(inside.stdout || '').trim().startsWith('true'))
|
|
56
|
+
if (!isInsideWorkTree(cwd))
|
|
67
57
|
return false;
|
|
68
|
-
const st =
|
|
69
|
-
return st.status === 0 &&
|
|
58
|
+
const st = runGit(cwd, ['status', '--porcelain'], 1500);
|
|
59
|
+
return st.status === 0 && st.stdout.trim().length > 0;
|
|
70
60
|
}
|
|
71
61
|
export function stashWorkingTree(cwd) {
|
|
72
62
|
const stamp = new Date().toISOString();
|
|
73
|
-
const res =
|
|
74
|
-
const out = `${res.stdout
|
|
63
|
+
const res = runGit(cwd, ['stash', 'push', '-u', '-m', `idlehands auto-stash ${stamp}`], 5000);
|
|
64
|
+
const out = `${res.stdout}${res.stderr}`.trim();
|
|
75
65
|
if (res.status === 0)
|
|
76
66
|
return { ok: true, message: out || 'stashed' };
|
|
77
|
-
return { ok: false, message: out || `git stash failed (rc=${res.status
|
|
67
|
+
return { ok: false, message: out || `git stash failed (rc=${res.status})` };
|
|
78
68
|
}
|
|
79
69
|
export async function loadGitStartupSummary(cwd) {
|
|
80
|
-
|
|
81
|
-
if (inside.rc !== 0 || !inside.out.trim().startsWith('true'))
|
|
70
|
+
if (!isInsideWorkTree(cwd))
|
|
82
71
|
return '';
|
|
83
|
-
const branch = (
|
|
84
|
-
const status = (
|
|
72
|
+
const branch = runGit(cwd, ['rev-parse', '--abbrev-ref', 'HEAD'], 1000).stdout.trim() || 'unknown';
|
|
73
|
+
const status = runGit(cwd, ['status', '--porcelain'], 2000).stdout.split(/\r?\n/).filter(Boolean);
|
|
85
74
|
const modified = status.filter((l) => /^[ MARC][MDARC]/.test(l) || /^[MDARC][ MARC]/.test(l)).length;
|
|
86
75
|
const untracked = status.filter((l) => l.startsWith('??')).length;
|
|
87
76
|
return `${modified} modified files, ${untracked} untracked, on branch ${branch}`;
|
|
88
77
|
}
|
|
89
78
|
export function ensureCleanWorkingTree(cwd) {
|
|
90
79
|
if (isGitDirty(cwd)) {
|
|
91
|
-
throw new Error(
|
|
80
|
+
throw new Error('Anton: Working tree not clean. Commit or stash first.');
|
|
92
81
|
}
|
|
93
82
|
}
|
|
94
83
|
export function getWorkingDiff(cwd) {
|
|
95
|
-
|
|
96
|
-
if (inside.status !== 0 || !String(inside.stdout || '').trim().startsWith('true'))
|
|
84
|
+
if (!isInsideWorkTree(cwd))
|
|
97
85
|
return '';
|
|
98
|
-
const res =
|
|
99
|
-
return
|
|
86
|
+
const res = runGit(cwd, ['diff', 'HEAD'], 30000);
|
|
87
|
+
return res.stdout;
|
|
100
88
|
}
|
|
101
89
|
export function commitAll(cwd, message) {
|
|
102
|
-
const
|
|
103
|
-
if (
|
|
90
|
+
const addRes = runGit(cwd, ['add', '-A'], 30000);
|
|
91
|
+
if (addRes.status !== 0) {
|
|
92
|
+
throw new Error(`git add failed: ${addRes.stderr || addRes.stdout || 'unknown error'}`);
|
|
93
|
+
}
|
|
94
|
+
const commitRes = runGit(cwd, ['commit', '-m', message], 30000);
|
|
95
|
+
if (commitRes.status !== 0) {
|
|
104
96
|
// Check if it's because there's nothing to commit
|
|
105
|
-
const status =
|
|
106
|
-
if (status.status === 0 &&
|
|
97
|
+
const status = runGit(cwd, ['status', '--porcelain'], 1500);
|
|
98
|
+
if (status.status === 0 && status.stdout.trim().length === 0) {
|
|
107
99
|
return '';
|
|
108
100
|
}
|
|
109
|
-
throw new Error(`git commit failed: ${
|
|
101
|
+
throw new Error(`git commit failed: ${commitRes.stderr || commitRes.stdout || 'unknown error'}`);
|
|
110
102
|
}
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
return String(hashRes.stdout || '').trim();
|
|
103
|
+
const hashRes = runGit(cwd, ['rev-parse', '--short', 'HEAD'], 30000);
|
|
104
|
+
return hashRes.stdout.trim();
|
|
114
105
|
}
|
|
115
106
|
export function commitAmend(cwd) {
|
|
116
|
-
const
|
|
107
|
+
const addRes = runGit(cwd, ['add', '-A'], 30000);
|
|
108
|
+
if (addRes.status !== 0) {
|
|
109
|
+
throw new Error(`git add failed: ${addRes.stderr || addRes.stdout || 'unknown error'}`);
|
|
110
|
+
}
|
|
111
|
+
const res = runGit(cwd, ['commit', '--amend', '--no-edit'], 30000);
|
|
117
112
|
if (res.status !== 0) {
|
|
118
113
|
throw new Error(`git commit --amend failed: ${res.stderr || res.stdout || 'unknown error'}`);
|
|
119
114
|
}
|
|
120
115
|
}
|
|
121
116
|
export function restoreTrackedChanges(cwd) {
|
|
122
|
-
|
|
117
|
+
runGit(cwd, ['checkout', '--', '.'], 30000);
|
|
123
118
|
}
|
|
124
119
|
export function cleanUntracked(cwd) {
|
|
125
|
-
const res =
|
|
120
|
+
const res = runGit(cwd, ['clean', '-fd'], 30000);
|
|
126
121
|
if (res.status !== 0) {
|
|
127
122
|
throw new Error(`git clean failed: ${res.stderr || res.stdout || 'unknown error'}`);
|
|
128
123
|
}
|
|
129
124
|
}
|
|
130
125
|
export function createBranch(cwd, name) {
|
|
131
|
-
const res =
|
|
126
|
+
const res = runGit(cwd, ['checkout', '-b', name], 30000);
|
|
132
127
|
if (res.status !== 0) {
|
|
133
128
|
throw new Error(`git checkout -b failed: ${res.stderr || res.stdout || 'unknown error'}`);
|
|
134
129
|
}
|
package/dist/git.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git.js","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"git.js","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"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"}
|
package/dist/harnesses.js
CHANGED
|
@@ -2,88 +2,191 @@ import { readFileSync, readdirSync } from 'node:fs';
|
|
|
2
2
|
import { join } from 'node:path';
|
|
3
3
|
import { configDir } from './utils.js';
|
|
4
4
|
/** Default behavioral configs used to fill gaps in user-defined harnesses and inline definitions */
|
|
5
|
-
const DEFAULT_THINKING = {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
5
|
+
const DEFAULT_THINKING = {
|
|
6
|
+
format: 'xml',
|
|
7
|
+
openTag: '<think>',
|
|
8
|
+
closeTag: '</think>',
|
|
9
|
+
strip: true,
|
|
10
|
+
};
|
|
11
|
+
const DEFAULT_TOOL_CALLS = {
|
|
12
|
+
reliableToolCallsArray: false,
|
|
13
|
+
contentFallbackLikely: true,
|
|
14
|
+
parallelCalls: true,
|
|
15
|
+
retryOnMalformed: 3,
|
|
16
|
+
};
|
|
17
|
+
const DEFAULT_QUIRKS = {
|
|
18
|
+
omitsRequiredParams: false,
|
|
19
|
+
loopsOnToolError: false,
|
|
20
|
+
emitsMarkdownInToolArgs: false,
|
|
21
|
+
needsExplicitToolCallFormatReminder: false,
|
|
22
|
+
};
|
|
23
|
+
const QUIRKS_NEEDS_REMINDER = {
|
|
24
|
+
...DEFAULT_QUIRKS,
|
|
25
|
+
needsExplicitToolCallFormatReminder: true,
|
|
26
|
+
};
|
|
9
27
|
const HARNESS = [
|
|
10
28
|
{
|
|
11
29
|
id: 'qwen3-coder',
|
|
12
30
|
match: [/qwen3-coder/i],
|
|
13
31
|
description: 'Qwen3-Coder family (tool-native MoE)',
|
|
14
|
-
defaults: {
|
|
32
|
+
defaults: {
|
|
33
|
+
temperature: 0.2,
|
|
34
|
+
top_p: 0.95,
|
|
35
|
+
max_tokens: 32768,
|
|
36
|
+
trifecta: { vaultMode: 'active' },
|
|
37
|
+
},
|
|
15
38
|
thinking: { format: 'xml', openTag: '<think>', closeTag: '</think>', strip: true },
|
|
16
|
-
toolCalls: {
|
|
39
|
+
toolCalls: {
|
|
40
|
+
reliableToolCallsArray: false,
|
|
41
|
+
contentFallbackLikely: true,
|
|
42
|
+
parallelCalls: true,
|
|
43
|
+
retryOnMalformed: 3,
|
|
44
|
+
},
|
|
17
45
|
quirks: DEFAULT_QUIRKS,
|
|
18
|
-
systemPromptSuffix: 'Prefer apply_patch or edit_range for most edits. Use write_file for full rewrites, and use edit_file only for exact old_text replacement when necessary.\nWhen answering questions about code, search first (search_files or grep), then read only the relevant files. Never scan an entire directory by reading files one by one.'
|
|
46
|
+
systemPromptSuffix: 'Prefer apply_patch or edit_range for most edits. Use write_file for full rewrites, and use edit_file only for exact old_text replacement when necessary.\nWhen answering questions about code, search first (search_files or grep), then read only the relevant files. Never scan an entire directory by reading files one by one.',
|
|
19
47
|
},
|
|
20
48
|
{
|
|
21
49
|
id: 'qwen3-moe',
|
|
22
50
|
match: [/qwen3/i],
|
|
23
51
|
description: 'Qwen3 MoE family (non-coder variants)',
|
|
24
|
-
defaults: {
|
|
52
|
+
defaults: {
|
|
53
|
+
temperature: 0.2,
|
|
54
|
+
top_p: 0.95,
|
|
55
|
+
max_tokens: 16384,
|
|
56
|
+
trifecta: { vaultMode: 'passive' },
|
|
57
|
+
},
|
|
25
58
|
thinking: { format: 'xml', openTag: '<think>', closeTag: '</think>', strip: true },
|
|
26
|
-
toolCalls: {
|
|
59
|
+
toolCalls: {
|
|
60
|
+
reliableToolCallsArray: true,
|
|
61
|
+
contentFallbackLikely: true,
|
|
62
|
+
parallelCalls: true,
|
|
63
|
+
retryOnMalformed: 2,
|
|
64
|
+
},
|
|
27
65
|
quirks: QUIRKS_NEEDS_REMINDER,
|
|
28
|
-
systemPromptSuffix: 'When answering questions about code, search first (search_files or grep), then read only the relevant files. Never scan an entire directory by reading files one by one.'
|
|
66
|
+
systemPromptSuffix: 'When answering questions about code, search first (search_files or grep), then read only the relevant files. Never scan an entire directory by reading files one by one.',
|
|
29
67
|
},
|
|
30
68
|
{
|
|
31
69
|
id: 'qwen',
|
|
32
70
|
match: [/qwen/i],
|
|
33
71
|
description: 'Qwen family (generic, includes Qwen2.5)',
|
|
34
|
-
defaults: {
|
|
72
|
+
defaults: {
|
|
73
|
+
temperature: 0.2,
|
|
74
|
+
top_p: 0.95,
|
|
75
|
+
max_tokens: 16384,
|
|
76
|
+
trifecta: { vaultMode: 'passive' },
|
|
77
|
+
},
|
|
35
78
|
thinking: { format: 'none', strip: false },
|
|
36
|
-
toolCalls: {
|
|
37
|
-
|
|
79
|
+
toolCalls: {
|
|
80
|
+
reliableToolCallsArray: true,
|
|
81
|
+
contentFallbackLikely: true,
|
|
82
|
+
parallelCalls: true,
|
|
83
|
+
retryOnMalformed: 2,
|
|
84
|
+
},
|
|
85
|
+
quirks: QUIRKS_NEEDS_REMINDER,
|
|
38
86
|
},
|
|
39
87
|
{
|
|
40
88
|
id: 'nemotron',
|
|
41
89
|
match: [/nemotron/i],
|
|
42
90
|
description: 'Nemotron family — loops on errors, omits params, low agent quality',
|
|
43
|
-
defaults: {
|
|
91
|
+
defaults: {
|
|
92
|
+
temperature: 0.2,
|
|
93
|
+
top_p: 0.95,
|
|
94
|
+
max_tokens: 16384,
|
|
95
|
+
trifecta: { vaultMode: 'passive' },
|
|
96
|
+
},
|
|
44
97
|
thinking: { format: 'none', strip: false },
|
|
45
|
-
toolCalls: {
|
|
46
|
-
|
|
98
|
+
toolCalls: {
|
|
99
|
+
reliableToolCallsArray: false,
|
|
100
|
+
contentFallbackLikely: true,
|
|
101
|
+
parallelCalls: false,
|
|
102
|
+
retryOnMalformed: 1,
|
|
103
|
+
},
|
|
104
|
+
quirks: {
|
|
105
|
+
...QUIRKS_NEEDS_REMINDER,
|
|
106
|
+
omitsRequiredParams: true,
|
|
107
|
+
loopsOnToolError: true,
|
|
108
|
+
maxIterationsOverride: 10,
|
|
109
|
+
},
|
|
47
110
|
},
|
|
48
111
|
{
|
|
49
112
|
id: 'mistral',
|
|
50
113
|
match: [/mistral/i],
|
|
51
114
|
description: 'Mistral family — no thinking tokens, may need chat-template-file',
|
|
52
|
-
defaults: {
|
|
115
|
+
defaults: {
|
|
116
|
+
temperature: 0.2,
|
|
117
|
+
top_p: 0.95,
|
|
118
|
+
max_tokens: 16384,
|
|
119
|
+
trifecta: { vaultMode: 'passive' },
|
|
120
|
+
},
|
|
53
121
|
thinking: { format: 'none', strip: false },
|
|
54
|
-
toolCalls: {
|
|
55
|
-
|
|
122
|
+
toolCalls: {
|
|
123
|
+
reliableToolCallsArray: true,
|
|
124
|
+
contentFallbackLikely: false,
|
|
125
|
+
parallelCalls: true,
|
|
126
|
+
retryOnMalformed: 2,
|
|
127
|
+
},
|
|
128
|
+
quirks: DEFAULT_QUIRKS,
|
|
56
129
|
},
|
|
57
130
|
{
|
|
58
131
|
id: 'gpt-oss',
|
|
59
132
|
match: [/gpt-oss/i, /gpt_oss/i],
|
|
60
133
|
description: 'GPT-OSS — correct tool format but bad decisions, scans everything',
|
|
61
|
-
defaults: {
|
|
134
|
+
defaults: {
|
|
135
|
+
temperature: 0.2,
|
|
136
|
+
top_p: 0.95,
|
|
137
|
+
max_tokens: 16384,
|
|
138
|
+
trifecta: { vaultMode: 'passive' },
|
|
139
|
+
},
|
|
62
140
|
thinking: { format: 'none', strip: false },
|
|
63
|
-
toolCalls: {
|
|
141
|
+
toolCalls: {
|
|
142
|
+
reliableToolCallsArray: true,
|
|
143
|
+
contentFallbackLikely: false,
|
|
144
|
+
parallelCalls: true,
|
|
145
|
+
retryOnMalformed: 2,
|
|
146
|
+
},
|
|
64
147
|
quirks: { ...DEFAULT_QUIRKS, maxIterationsOverride: 10 },
|
|
65
|
-
systemPromptSuffix: 'When answering questions about code, search first (search_files or grep), then read only the relevant files. Never scan an entire directory by reading files one by one.'
|
|
148
|
+
systemPromptSuffix: 'When answering questions about code, search first (search_files or grep), then read only the relevant files. Never scan an entire directory by reading files one by one.',
|
|
66
149
|
},
|
|
67
150
|
{
|
|
68
151
|
id: 'llama',
|
|
69
152
|
match: [/llama/i],
|
|
70
153
|
description: 'Llama family (llama.cpp style)',
|
|
71
|
-
defaults: {
|
|
154
|
+
defaults: {
|
|
155
|
+
temperature: 0.2,
|
|
156
|
+
top_p: 0.95,
|
|
157
|
+
max_tokens: 16384,
|
|
158
|
+
trifecta: { vaultMode: 'passive' },
|
|
159
|
+
},
|
|
72
160
|
thinking: { format: 'none', strip: false },
|
|
73
|
-
toolCalls: {
|
|
161
|
+
toolCalls: {
|
|
162
|
+
reliableToolCallsArray: false,
|
|
163
|
+
contentFallbackLikely: true,
|
|
164
|
+
parallelCalls: false,
|
|
165
|
+
retryOnMalformed: 2,
|
|
166
|
+
},
|
|
74
167
|
quirks: QUIRKS_NEEDS_REMINDER,
|
|
75
|
-
systemPromptSuffix: 'When answering questions about code, search first (search_files or grep), then read only the relevant files. Never scan an entire directory by reading files one by one.'
|
|
168
|
+
systemPromptSuffix: 'When answering questions about code, search first (search_files or grep), then read only the relevant files. Never scan an entire directory by reading files one by one.',
|
|
76
169
|
},
|
|
77
170
|
{
|
|
78
171
|
id: 'generic',
|
|
79
172
|
match: [/.*/],
|
|
80
173
|
description: 'Generic fallback harness — conservative, all fallbacks enabled',
|
|
81
|
-
defaults: {
|
|
174
|
+
defaults: {
|
|
175
|
+
temperature: 0.2,
|
|
176
|
+
top_p: 0.95,
|
|
177
|
+
max_tokens: 16384,
|
|
178
|
+
trifecta: { vaultMode: 'passive' },
|
|
179
|
+
},
|
|
82
180
|
thinking: { format: 'xml', openTag: '<think>', closeTag: '</think>', strip: true },
|
|
83
|
-
toolCalls: {
|
|
181
|
+
toolCalls: {
|
|
182
|
+
reliableToolCallsArray: false,
|
|
183
|
+
contentFallbackLikely: true,
|
|
184
|
+
parallelCalls: true,
|
|
185
|
+
retryOnMalformed: 3,
|
|
186
|
+
},
|
|
84
187
|
quirks: DEFAULT_QUIRKS,
|
|
85
|
-
systemPromptSuffix: 'When answering questions about code, search first (search_files or grep), then read only the relevant files. Never scan an entire directory by reading files one by one.'
|
|
86
|
-
}
|
|
188
|
+
systemPromptSuffix: 'When answering questions about code, search first (search_files or grep), then read only the relevant files. Never scan an entire directory by reading files one by one.',
|
|
189
|
+
},
|
|
87
190
|
];
|
|
88
191
|
/**
|
|
89
192
|
* Load user-defined harnesses from ~/.config/idlehands/harnesses/*.json
|
|
@@ -94,7 +197,7 @@ function loadUserHarnesses() {
|
|
|
94
197
|
const dir = join(configDir(), 'harnesses');
|
|
95
198
|
let files;
|
|
96
199
|
try {
|
|
97
|
-
files = readdirSync(dir).filter(f => f.endsWith('.json'));
|
|
200
|
+
files = readdirSync(dir).filter((f) => f.endsWith('.json'));
|
|
98
201
|
}
|
|
99
202
|
catch {
|
|
100
203
|
return [];
|
|
@@ -114,12 +217,12 @@ function loadUserHarnesses() {
|
|
|
114
217
|
temperature: raw.params?.temperature ?? raw.defaults?.temperature,
|
|
115
218
|
top_p: raw.params?.top_p ?? raw.defaults?.top_p,
|
|
116
219
|
max_tokens: raw.params?.max_tokens ?? raw.defaults?.max_tokens,
|
|
117
|
-
trifecta: raw.defaults?.trifecta
|
|
220
|
+
trifecta: raw.defaults?.trifecta,
|
|
118
221
|
},
|
|
119
222
|
thinking: { ...DEFAULT_THINKING, ...(raw.thinking ?? {}) },
|
|
120
223
|
toolCalls: { ...DEFAULT_TOOL_CALLS, ...(raw.toolCalls ?? {}) },
|
|
121
224
|
quirks: { ...DEFAULT_QUIRKS, ...(raw.quirks ?? {}) },
|
|
122
|
-
systemPromptSuffix: raw.systemPromptSuffix
|
|
225
|
+
systemPromptSuffix: raw.systemPromptSuffix,
|
|
123
226
|
};
|
|
124
227
|
result.push(harness);
|
|
125
228
|
}
|
|
@@ -140,11 +243,8 @@ function getMergedHarnesses() {
|
|
|
140
243
|
return HARNESS;
|
|
141
244
|
}
|
|
142
245
|
// User harnesses override built-ins by id, then remaining built-ins follow
|
|
143
|
-
const userIds = new Set(user.map(h => h.id));
|
|
144
|
-
const merged = [
|
|
145
|
-
...user,
|
|
146
|
-
...HARNESS.filter(h => !userIds.has(h.id))
|
|
147
|
-
];
|
|
246
|
+
const userIds = new Set(user.map((h) => h.id));
|
|
247
|
+
const merged = [...user, ...HARNESS.filter((h) => !userIds.has(h.id))];
|
|
148
248
|
_mergedHarnesses = merged;
|
|
149
249
|
return merged;
|
|
150
250
|
}
|