@visorcraft/idlehands 0.9.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.
Files changed (197) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +30 -0
  3. package/dist/agent.js +2604 -0
  4. package/dist/agent.js.map +1 -0
  5. package/dist/anton/controller.js +341 -0
  6. package/dist/anton/controller.js.map +1 -0
  7. package/dist/anton/lock.js +110 -0
  8. package/dist/anton/lock.js.map +1 -0
  9. package/dist/anton/parser.js +303 -0
  10. package/dist/anton/parser.js.map +1 -0
  11. package/dist/anton/prompt.js +203 -0
  12. package/dist/anton/prompt.js.map +1 -0
  13. package/dist/anton/reporter.js +119 -0
  14. package/dist/anton/reporter.js.map +1 -0
  15. package/dist/anton/session.js +51 -0
  16. package/dist/anton/session.js.map +1 -0
  17. package/dist/anton/types.js +7 -0
  18. package/dist/anton/types.js.map +1 -0
  19. package/dist/anton/verifier.js +263 -0
  20. package/dist/anton/verifier.js.map +1 -0
  21. package/dist/bench/compare.js +239 -0
  22. package/dist/bench/compare.js.map +1 -0
  23. package/dist/bench/debug_hooks.js +17 -0
  24. package/dist/bench/debug_hooks.js.map +1 -0
  25. package/dist/bench/json_extract.js +22 -0
  26. package/dist/bench/json_extract.js.map +1 -0
  27. package/dist/bench/openclaw.js +86 -0
  28. package/dist/bench/openclaw.js.map +1 -0
  29. package/dist/bench/report.js +116 -0
  30. package/dist/bench/report.js.map +1 -0
  31. package/dist/bench/runner.js +312 -0
  32. package/dist/bench/runner.js.map +1 -0
  33. package/dist/bench/types.js +2 -0
  34. package/dist/bench/types.js.map +1 -0
  35. package/dist/bot/commands.js +444 -0
  36. package/dist/bot/commands.js.map +1 -0
  37. package/dist/bot/confirm-discord.js +133 -0
  38. package/dist/bot/confirm-discord.js.map +1 -0
  39. package/dist/bot/confirm-telegram.js +290 -0
  40. package/dist/bot/confirm-telegram.js.map +1 -0
  41. package/dist/bot/discord.js +826 -0
  42. package/dist/bot/discord.js.map +1 -0
  43. package/dist/bot/format.js +210 -0
  44. package/dist/bot/format.js.map +1 -0
  45. package/dist/bot/session-manager.js +270 -0
  46. package/dist/bot/session-manager.js.map +1 -0
  47. package/dist/bot/telegram.js +678 -0
  48. package/dist/bot/telegram.js.map +1 -0
  49. package/dist/cli/agent-turn.js +45 -0
  50. package/dist/cli/agent-turn.js.map +1 -0
  51. package/dist/cli/args.js +236 -0
  52. package/dist/cli/args.js.map +1 -0
  53. package/dist/cli/bot.js +252 -0
  54. package/dist/cli/bot.js.map +1 -0
  55. package/dist/cli/build-repl-context.js +365 -0
  56. package/dist/cli/build-repl-context.js.map +1 -0
  57. package/dist/cli/command-registry.js +20 -0
  58. package/dist/cli/command-registry.js.map +1 -0
  59. package/dist/cli/commands/anton.js +271 -0
  60. package/dist/cli/commands/anton.js.map +1 -0
  61. package/dist/cli/commands/editing.js +328 -0
  62. package/dist/cli/commands/editing.js.map +1 -0
  63. package/dist/cli/commands/model.js +274 -0
  64. package/dist/cli/commands/model.js.map +1 -0
  65. package/dist/cli/commands/project.js +255 -0
  66. package/dist/cli/commands/project.js.map +1 -0
  67. package/dist/cli/commands/runtime.js +63 -0
  68. package/dist/cli/commands/runtime.js.map +1 -0
  69. package/dist/cli/commands/session.js +281 -0
  70. package/dist/cli/commands/session.js.map +1 -0
  71. package/dist/cli/commands/tools.js +126 -0
  72. package/dist/cli/commands/tools.js.map +1 -0
  73. package/dist/cli/commands/trifecta.js +221 -0
  74. package/dist/cli/commands/trifecta.js.map +1 -0
  75. package/dist/cli/commands/tui.js +17 -0
  76. package/dist/cli/commands/tui.js.map +1 -0
  77. package/dist/cli/init.js +222 -0
  78. package/dist/cli/init.js.map +1 -0
  79. package/dist/cli/input.js +360 -0
  80. package/dist/cli/input.js.map +1 -0
  81. package/dist/cli/oneshot.js +254 -0
  82. package/dist/cli/oneshot.js.map +1 -0
  83. package/dist/cli/repl-context.js +2 -0
  84. package/dist/cli/repl-context.js.map +1 -0
  85. package/dist/cli/runtime-cmds.js +811 -0
  86. package/dist/cli/runtime-cmds.js.map +1 -0
  87. package/dist/cli/service.js +145 -0
  88. package/dist/cli/service.js.map +1 -0
  89. package/dist/cli/session-state.js +130 -0
  90. package/dist/cli/session-state.js.map +1 -0
  91. package/dist/cli/setup.js +815 -0
  92. package/dist/cli/setup.js.map +1 -0
  93. package/dist/cli/shell.js +79 -0
  94. package/dist/cli/shell.js.map +1 -0
  95. package/dist/cli/status.js +392 -0
  96. package/dist/cli/status.js.map +1 -0
  97. package/dist/cli/watch.js +33 -0
  98. package/dist/cli/watch.js.map +1 -0
  99. package/dist/client.js +676 -0
  100. package/dist/client.js.map +1 -0
  101. package/dist/commands.js +194 -0
  102. package/dist/commands.js.map +1 -0
  103. package/dist/config.js +507 -0
  104. package/dist/config.js.map +1 -0
  105. package/dist/confirm/auto.js +13 -0
  106. package/dist/confirm/auto.js.map +1 -0
  107. package/dist/confirm/headless.js +41 -0
  108. package/dist/confirm/headless.js.map +1 -0
  109. package/dist/confirm/terminal.js +90 -0
  110. package/dist/confirm/terminal.js.map +1 -0
  111. package/dist/context.js +49 -0
  112. package/dist/context.js.map +1 -0
  113. package/dist/git.js +136 -0
  114. package/dist/git.js.map +1 -0
  115. package/dist/harnesses.js +171 -0
  116. package/dist/harnesses.js.map +1 -0
  117. package/dist/history.js +139 -0
  118. package/dist/history.js.map +1 -0
  119. package/dist/index.js +700 -0
  120. package/dist/index.js.map +1 -0
  121. package/dist/indexer.js +374 -0
  122. package/dist/indexer.js.map +1 -0
  123. package/dist/jsonrpc.js +76 -0
  124. package/dist/jsonrpc.js.map +1 -0
  125. package/dist/lens.js +525 -0
  126. package/dist/lens.js.map +1 -0
  127. package/dist/lsp.js +605 -0
  128. package/dist/lsp.js.map +1 -0
  129. package/dist/markdown.js +275 -0
  130. package/dist/markdown.js.map +1 -0
  131. package/dist/mcp.js +554 -0
  132. package/dist/mcp.js.map +1 -0
  133. package/dist/recovery.js +178 -0
  134. package/dist/recovery.js.map +1 -0
  135. package/dist/replay.js +132 -0
  136. package/dist/replay.js.map +1 -0
  137. package/dist/replay_cli.js +24 -0
  138. package/dist/replay_cli.js.map +1 -0
  139. package/dist/runtime/executor.js +418 -0
  140. package/dist/runtime/executor.js.map +1 -0
  141. package/dist/runtime/planner.js +197 -0
  142. package/dist/runtime/planner.js.map +1 -0
  143. package/dist/runtime/store.js +289 -0
  144. package/dist/runtime/store.js.map +1 -0
  145. package/dist/runtime/types.js +2 -0
  146. package/dist/runtime/types.js.map +1 -0
  147. package/dist/safety.js +446 -0
  148. package/dist/safety.js.map +1 -0
  149. package/dist/spinner.js +224 -0
  150. package/dist/spinner.js.map +1 -0
  151. package/dist/sys/context.js +124 -0
  152. package/dist/sys/context.js.map +1 -0
  153. package/dist/sys/snapshot.sh +97 -0
  154. package/dist/term.js +61 -0
  155. package/dist/term.js.map +1 -0
  156. package/dist/themes.js +135 -0
  157. package/dist/themes.js.map +1 -0
  158. package/dist/tools.js +1114 -0
  159. package/dist/tools.js.map +1 -0
  160. package/dist/tui/branch-picker.js +65 -0
  161. package/dist/tui/branch-picker.js.map +1 -0
  162. package/dist/tui/command-handler.js +108 -0
  163. package/dist/tui/command-handler.js.map +1 -0
  164. package/dist/tui/confirm.js +90 -0
  165. package/dist/tui/confirm.js.map +1 -0
  166. package/dist/tui/controller.js +463 -0
  167. package/dist/tui/controller.js.map +1 -0
  168. package/dist/tui/event-bridge.js +44 -0
  169. package/dist/tui/event-bridge.js.map +1 -0
  170. package/dist/tui/events.js +2 -0
  171. package/dist/tui/events.js.map +1 -0
  172. package/dist/tui/keymap.js +144 -0
  173. package/dist/tui/keymap.js.map +1 -0
  174. package/dist/tui/layout.js +11 -0
  175. package/dist/tui/layout.js.map +1 -0
  176. package/dist/tui/render.js +186 -0
  177. package/dist/tui/render.js.map +1 -0
  178. package/dist/tui/screen.js +48 -0
  179. package/dist/tui/screen.js.map +1 -0
  180. package/dist/tui/state.js +167 -0
  181. package/dist/tui/state.js.map +1 -0
  182. package/dist/tui/theme.js +70 -0
  183. package/dist/tui/theme.js.map +1 -0
  184. package/dist/tui/types.js +2 -0
  185. package/dist/tui/types.js.map +1 -0
  186. package/dist/types.js +2 -0
  187. package/dist/types.js.map +1 -0
  188. package/dist/upgrade.js +412 -0
  189. package/dist/upgrade.js.map +1 -0
  190. package/dist/utils.js +87 -0
  191. package/dist/utils.js.map +1 -0
  192. package/dist/vault.js +520 -0
  193. package/dist/vault.js.map +1 -0
  194. package/dist/vim.js +160 -0
  195. package/dist/vim.js.map +1 -0
  196. package/package.json +67 -0
  197. package/src/sys/snapshot.sh +97 -0
@@ -0,0 +1,119 @@
1
+ /**
2
+ * Anton autonomous task runner — display/format helpers.
3
+ *
4
+ * The controller NEVER builds display strings itself. All formatting happens here.
5
+ */
6
+ /**
7
+ * Format duration as human-readable string.
8
+ * e.g. "2m 30s", "45s", "1h 5m"
9
+ */
10
+ function formatDuration(ms) {
11
+ const sec = Math.round(ms / 1000);
12
+ if (sec < 60)
13
+ return `${sec}s`;
14
+ const min = Math.floor(sec / 60);
15
+ const remainSec = sec % 60;
16
+ if (min < 60) {
17
+ return remainSec > 0 ? `${min}m ${remainSec}s` : `${min}m`;
18
+ }
19
+ const hr = Math.floor(min / 60);
20
+ const remainMin = min % 60;
21
+ if (remainMin > 0) {
22
+ return `${hr}h ${remainMin}m`;
23
+ }
24
+ return `${hr}h`;
25
+ }
26
+ /**
27
+ * Format tokens with k/M suffixes.
28
+ */
29
+ function formatTokens(tokens) {
30
+ if (tokens < 1000)
31
+ return `${tokens}`;
32
+ if (tokens < 1000000)
33
+ return `${(tokens / 1000).toFixed(1)}k`;
34
+ return `${(tokens / 1000000).toFixed(1)}M`;
35
+ }
36
+ /**
37
+ * Format final run summary.
38
+ */
39
+ export function formatRunSummary(result) {
40
+ const lines = [
41
+ '🤖 Anton Complete',
42
+ ` ✅ ${result.completed} tasks completed`,
43
+ ` ⏭️ ${result.skipped} tasks skipped`,
44
+ ` ❌ ${result.failed} tasks failed`,
45
+ ` 📋 ${result.remaining} remaining`,
46
+ ` ⏱️ ${formatDuration(result.totalDurationMs)}`,
47
+ ` 📊 ${formatTokens(result.totalTokens)} tokens`,
48
+ ` 💾 ${result.totalCommits} commits`,
49
+ ` Stop: ${result.stopReason}`,
50
+ ];
51
+ return lines.join('\n');
52
+ }
53
+ /**
54
+ * Format progress bar (20 chars wide).
55
+ * [████████░░░░░░░░░░░░] 5/20 (25%)
56
+ */
57
+ export function formatProgressBar(progress) {
58
+ const completed = progress.completedSoFar;
59
+ const total = progress.totalPending;
60
+ const percent = total > 0 ? Math.round((completed / total) * 100) : 0;
61
+ const filled = Math.round((completed / total) * 20);
62
+ const empty = 20 - filled;
63
+ const bar = '█'.repeat(filled) + '░'.repeat(empty);
64
+ return `[${bar}] ${completed}/${total} (${percent}%)`;
65
+ }
66
+ /**
67
+ * Format task start message.
68
+ */
69
+ export function formatTaskStart(task, attempt, progress) {
70
+ const index = progress.completedSoFar + 1;
71
+ const total = progress.totalPending;
72
+ return `🔧 [${index}/${total}] ${task.text} (attempt ${attempt})`;
73
+ }
74
+ /**
75
+ * Format task end message.
76
+ */
77
+ export function formatTaskEnd(task, result, progress) {
78
+ const emoji = result.status === 'passed' ? '✅' : '❌';
79
+ const duration = formatDuration(result.durationMs);
80
+ const tokens = formatTokens(result.tokensUsed);
81
+ return `${emoji} ${task.text} — ${result.status} (${duration}, ${tokens} tokens)`;
82
+ }
83
+ /**
84
+ * Format task skip message.
85
+ */
86
+ export function formatTaskSkip(task, reason) {
87
+ return `⏭️ ${task.text} — skipped: ${reason}`;
88
+ }
89
+ /**
90
+ * Format dry run plan summary.
91
+ */
92
+ export function formatDryRunPlan(taskFile, commands) {
93
+ const lines = [
94
+ '🧪 Dry Run Plan',
95
+ ` 📋 ${taskFile.totalCount} total tasks`,
96
+ ` ⏳ ${taskFile.pending.length} pending tasks`,
97
+ ` ✅ ${taskFile.completed.length} already completed`,
98
+ ];
99
+ if (commands.build) {
100
+ lines.push(` 🔨 Build: ${commands.build}`);
101
+ }
102
+ if (commands.test) {
103
+ lines.push(` 🧪 Test: ${commands.test}`);
104
+ }
105
+ if (commands.lint) {
106
+ lines.push(` 🔍 Lint: ${commands.lint}`);
107
+ }
108
+ lines.push('');
109
+ lines.push('Pending tasks:');
110
+ for (const task of taskFile.pending.slice(0, 10)) {
111
+ const indent = ' '.repeat(task.depth + 1);
112
+ lines.push(`${indent}• ${task.text}`);
113
+ }
114
+ if (taskFile.pending.length > 10) {
115
+ lines.push(` ... and ${taskFile.pending.length - 10} more tasks`);
116
+ }
117
+ return lines.join('\n');
118
+ }
119
+ //# sourceMappingURL=reporter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reporter.js","sourceRoot":"","sources":["../../src/anton/reporter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Anton autonomous task runner — session config builders and factory wrapper.
3
+ */
4
+ import { createSession } from '../agent.js';
5
+ /**
6
+ * Build session config for main task execution sessions.
7
+ */
8
+ export function buildSessionConfig(base, config) {
9
+ return {
10
+ ...base,
11
+ dir: config.projectDir,
12
+ approval_mode: config.approvalMode,
13
+ no_confirm: config.approvalMode === 'yolo',
14
+ verbose: false,
15
+ quiet: true,
16
+ max_iterations: 50,
17
+ timeout: config.taskTimeoutSec,
18
+ };
19
+ }
20
+ /**
21
+ * Build session config for L2 AI verification sessions.
22
+ * Minimal, fast config optimized for verification tasks.
23
+ */
24
+ export function buildVerifyConfig(base, config) {
25
+ return {
26
+ ...base,
27
+ dir: config.projectDir,
28
+ model: config.verifyModel || base.model,
29
+ approval_mode: 'yolo',
30
+ no_confirm: true,
31
+ verbose: false,
32
+ quiet: true,
33
+ max_iterations: 1,
34
+ trifecta: { enabled: false },
35
+ mcp: { servers: [] },
36
+ lsp: { enabled: false },
37
+ sub_agents: { enabled: false },
38
+ };
39
+ }
40
+ /**
41
+ * Default session factory for autonomous execution.
42
+ * Auto-approves all agent confirmations.
43
+ */
44
+ export async function defaultCreateSession(config, apiKey) {
45
+ return createSession({
46
+ config,
47
+ apiKey,
48
+ confirm: async () => true, // auto-approve for autonomous loop
49
+ });
50
+ }
51
+ //# sourceMappingURL=session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/anton/session.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAqB,EAAE,MAAsB;IAC9E,OAAO;QACL,GAAG,IAAI;QACP,GAAG,EAAE,MAAM,CAAC,UAAU;QACtB,aAAa,EAAE,MAAM,CAAC,YAAY;QAClC,UAAU,EAAE,MAAM,CAAC,YAAY,KAAK,MAAM;QAC1C,OAAO,EAAE,KAAK;QACd,KAAK,EAAE,IAAI;QACX,cAAc,EAAE,EAAE;QAClB,OAAO,EAAE,MAAM,CAAC,cAAc;KAC/B,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAqB,EAAE,MAAsB;IAC7E,OAAO;QACL,GAAG,IAAI;QACP,GAAG,EAAE,MAAM,CAAC,UAAU;QACtB,KAAK,EAAE,MAAM,CAAC,WAAW,IAAI,IAAI,CAAC,KAAK;QACvC,aAAa,EAAE,MAAe;QAC9B,UAAU,EAAE,IAAI;QAChB,OAAO,EAAE,KAAK;QACd,KAAK,EAAE,IAAI;QACX,cAAc,EAAE,CAAC;QACjB,QAAQ,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE;QAC5B,GAAG,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;QACpB,GAAG,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE;QACvB,UAAU,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE;KAC/B,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,MAAuB,EAAE,MAAe;IACjF,OAAO,aAAa,CAAC;QACnB,MAAM;QACN,MAAM;QACN,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI,EAAG,mCAAmC;KAChE,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Anton autonomous task runner — type definitions.
3
+ *
4
+ * Zero runtime logic. Types/interfaces/enums only.
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/anton/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
@@ -0,0 +1,263 @@
1
+ /**
2
+ * Anton verification engine — Phase E implementation.
3
+ *
4
+ * Implements the three-level verification cascade:
5
+ * - L0: Agent completion status
6
+ * - L1: Build/test/lint commands
7
+ * - L2: AI code review (optional)
8
+ */
9
+ import { spawnSync } from 'node:child_process';
10
+ import { readFileSync, existsSync } from 'node:fs';
11
+ import { join } from 'node:path';
12
+ import { runCommand } from '../runtime/executor.js';
13
+ /**
14
+ * Detect verification commands based on project files and overrides.
15
+ * Priority: overrides → package.json → Cargo.toml → Makefile → Python configs
16
+ */
17
+ export async function detectVerificationCommands(cwd, overrides) {
18
+ const result = {
19
+ build: overrides.build,
20
+ test: overrides.test,
21
+ lint: overrides.lint,
22
+ };
23
+ // L1: Overrides take absolute precedence
24
+ if (result.build !== undefined && result.test !== undefined && result.lint !== undefined) {
25
+ return result;
26
+ }
27
+ // L2: Check package.json for npm scripts
28
+ try {
29
+ const pkgPath = join(cwd, 'package.json');
30
+ if (existsSync(pkgPath)) {
31
+ const pkg = JSON.parse(readFileSync(pkgPath, 'utf8'));
32
+ const scripts = pkg.scripts || {};
33
+ if (result.build === undefined && scripts.build) {
34
+ result.build = 'npm run build';
35
+ }
36
+ if (result.test === undefined && scripts.test) {
37
+ // Skip if it's just the default npm error stub
38
+ const testScript = scripts.test.trim();
39
+ if (testScript !== 'echo "Error: no test specified" && exit 1') {
40
+ result.test = 'npm test';
41
+ }
42
+ }
43
+ if (result.lint === undefined && scripts.lint) {
44
+ result.lint = 'npm run lint';
45
+ }
46
+ }
47
+ }
48
+ catch {
49
+ // Ignore JSON parse errors
50
+ }
51
+ // L3: Check Cargo.toml for Rust projects
52
+ if (existsSync(join(cwd, 'Cargo.toml'))) {
53
+ if (result.build === undefined) {
54
+ result.build = 'cargo build';
55
+ }
56
+ if (result.test === undefined) {
57
+ result.test = 'cargo test';
58
+ }
59
+ if (result.lint === undefined && isCommandAvailable('cargo', 'clippy')) {
60
+ result.lint = 'cargo clippy';
61
+ }
62
+ }
63
+ // L4: Check Makefile
64
+ if (existsSync(join(cwd, 'Makefile'))) {
65
+ if (result.build === undefined) {
66
+ result.build = 'make';
67
+ }
68
+ if (result.test === undefined && makeTargetExists(cwd, 'test')) {
69
+ result.test = 'make test';
70
+ }
71
+ }
72
+ // L5: Check Python configs
73
+ if (existsSync(join(cwd, 'pyproject.toml')) || existsSync(join(cwd, 'setup.py'))) {
74
+ if (result.test === undefined && isCommandAvailable('pytest')) {
75
+ result.test = 'pytest';
76
+ }
77
+ if (result.lint === undefined && isCommandAvailable('ruff')) {
78
+ result.lint = 'ruff check .';
79
+ }
80
+ }
81
+ return result;
82
+ }
83
+ /**
84
+ * Run the full verification cascade (L0 → L1 → L2).
85
+ */
86
+ export async function runVerification(opts) {
87
+ const result = {
88
+ l0_agentDone: false,
89
+ l1_build: undefined,
90
+ l1_test: undefined,
91
+ l1_lint: undefined,
92
+ l2_ai: undefined,
93
+ l2_reason: undefined,
94
+ passed: false,
95
+ summary: '',
96
+ };
97
+ // L0: Check agent completion status
98
+ result.l0_agentDone = opts.agentResult.status === 'done';
99
+ if (!result.l0_agentDone) {
100
+ result.passed = false;
101
+ result.summary = `Agent reported status: ${opts.agentResult.status}`;
102
+ return result;
103
+ }
104
+ // L1: Run build/test/lint commands
105
+ let l1_all = true;
106
+ const failedCommands = [];
107
+ if (opts.commands.build !== undefined) {
108
+ try {
109
+ const buildResult = await runCommand(opts.commands.build, 180_000);
110
+ result.l1_build = buildResult.exitCode === 0;
111
+ if (!result.l1_build) {
112
+ l1_all = false;
113
+ failedCommands.push(`build: ${truncateStderr(buildResult.stderr)}`);
114
+ }
115
+ }
116
+ catch (err) {
117
+ result.l1_build = false;
118
+ l1_all = false;
119
+ failedCommands.push(`build: ${String(err)}`);
120
+ }
121
+ }
122
+ if (opts.commands.test !== undefined) {
123
+ try {
124
+ const testResult = await runCommand(opts.commands.test, 180_000);
125
+ result.l1_test = testResult.exitCode === 0;
126
+ if (!result.l1_test) {
127
+ l1_all = false;
128
+ failedCommands.push(`test: ${truncateStderr(testResult.stderr)}`);
129
+ }
130
+ }
131
+ catch (err) {
132
+ result.l1_test = false;
133
+ l1_all = false;
134
+ failedCommands.push(`test: ${String(err)}`);
135
+ }
136
+ }
137
+ if (opts.commands.lint !== undefined) {
138
+ try {
139
+ const lintResult = await runCommand(opts.commands.lint, 180_000);
140
+ result.l1_lint = lintResult.exitCode === 0;
141
+ if (!result.l1_lint) {
142
+ l1_all = false;
143
+ failedCommands.push(`lint: ${truncateStderr(lintResult.stderr)}`);
144
+ }
145
+ }
146
+ catch (err) {
147
+ result.l1_lint = false;
148
+ l1_all = false;
149
+ failedCommands.push(`lint: ${String(err)}`);
150
+ }
151
+ }
152
+ // If L1 failed, skip L2
153
+ if (!l1_all) {
154
+ result.passed = false;
155
+ result.summary = `Command failures: ${failedCommands.join('; ')}`;
156
+ return result;
157
+ }
158
+ // L2: AI verification (only if enabled and conditions met)
159
+ if (opts.config.verifyAi &&
160
+ opts.diff.trim() &&
161
+ opts.createVerifySession) {
162
+ let session = null;
163
+ try {
164
+ session = await opts.createVerifySession();
165
+ const prompt = `You are a code review verifier. Task: "${opts.task.text}"
166
+
167
+ Diff:
168
+ \`\`\`diff
169
+ ${opts.diff}
170
+ \`\`\`
171
+
172
+ Reply with exactly one JSON object:
173
+ {"pass": true, "reason": "..."}
174
+ or
175
+ {"pass": false, "reason": "..."}`;
176
+ const response = await session.ask(prompt);
177
+ try {
178
+ const parsed = JSON.parse(response.trim());
179
+ if (typeof parsed.pass === 'boolean') {
180
+ result.l2_ai = parsed.pass;
181
+ result.l2_reason = parsed.reason || 'No reason provided';
182
+ }
183
+ else {
184
+ result.l2_ai = false;
185
+ result.l2_reason = 'Invalid verifier response: missing pass field';
186
+ }
187
+ }
188
+ catch {
189
+ result.l2_ai = false;
190
+ result.l2_reason = 'Invalid verifier response: not valid JSON';
191
+ }
192
+ }
193
+ catch (err) {
194
+ result.l2_ai = false;
195
+ result.l2_reason = `Verifier session error: ${String(err)}`;
196
+ }
197
+ finally {
198
+ if (session) {
199
+ try {
200
+ await session.close();
201
+ }
202
+ catch {
203
+ // Ignore close errors
204
+ }
205
+ }
206
+ }
207
+ }
208
+ // Overall result
209
+ const l2_pass = result.l2_ai ?? true; // undefined means skipped, treat as pass
210
+ result.passed = result.l0_agentDone && l1_all && l2_pass;
211
+ if (result.passed) {
212
+ result.summary = 'All checks passed';
213
+ }
214
+ else {
215
+ const failures = [];
216
+ if (!result.l0_agentDone)
217
+ failures.push('L0: agent not done');
218
+ if (!l1_all)
219
+ failures.push(`L1: ${failedCommands.join(', ')}`);
220
+ if (result.l2_ai === false)
221
+ failures.push(`L2: ${result.l2_reason}`);
222
+ result.summary = failures.join('; ');
223
+ }
224
+ return result;
225
+ }
226
+ // Helper functions
227
+ function isCommandAvailable(...cmd) {
228
+ const command = cmd.length === 1 ? cmd[0] : cmd.join(' ');
229
+ const result = spawnSync('which', [cmd[0]], {
230
+ timeout: 5000,
231
+ encoding: 'utf8',
232
+ stdio: ['ignore', 'pipe', 'ignore']
233
+ });
234
+ if (result.status !== 0)
235
+ return false;
236
+ // For compound commands like 'cargo clippy', test the full command
237
+ if (cmd.length > 1) {
238
+ const testResult = spawnSync('bash', ['-c', `${command} --help >/dev/null 2>&1`], {
239
+ timeout: 5000,
240
+ });
241
+ return testResult.status === 0;
242
+ }
243
+ return true;
244
+ }
245
+ function makeTargetExists(cwd, target) {
246
+ try {
247
+ const result = spawnSync('make', ['-n', target], {
248
+ cwd,
249
+ timeout: 5000,
250
+ stdio: ['ignore', 'ignore', 'pipe']
251
+ });
252
+ // make -n returns 0 if target exists and is valid
253
+ return result.status === 0;
254
+ }
255
+ catch {
256
+ return false;
257
+ }
258
+ }
259
+ function truncateStderr(stderr) {
260
+ const cleaned = stderr.trim();
261
+ return cleaned.length > 500 ? `${cleaned.slice(0, 500)}...` : cleaned;
262
+ }
263
+ //# sourceMappingURL=verifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verifier.js","sourceRoot":"","sources":["../../src/anton/verifier.ts"],"names":[],"mappings":"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"}