@visorcraft/idlehands 1.1.9 → 1.1.11

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.
@@ -7,16 +7,128 @@
7
7
  import { parseTaskFile, findRunnablePendingTasks, markTaskChecked, insertSubTasks, autoCompleteAncestors } from './parser.js';
8
8
  import { buildAntonPrompt, parseAntonResult } from './prompt.js';
9
9
  import { detectVerificationCommands, runVerification } from './verifier.js';
10
- import { acquireAntonLock, releaseAntonLock } from './lock.js';
10
+ import { acquireAntonLock, releaseAntonLock, touchAntonLock } from './lock.js';
11
+ import { loadRuntimes } from '../runtime/store.js';
12
+ import { plan } from '../runtime/planner.js';
13
+ import { execute, loadActiveRuntime, runOnHost } from '../runtime/executor.js';
14
+ import { waitForModelsReady } from '../runtime/health.js';
11
15
  import { buildSessionConfig, buildVerifyConfig, defaultCreateSession } from './session.js';
12
16
  import { formatDryRunPlan } from './reporter.js';
13
17
  import { ensureCleanWorkingTree, getWorkingDiff, commitAll, restoreTrackedChanges, cleanUntracked, createBranch } from '../git.js';
18
+ import { estimateTokens } from '../utils.js';
19
+ function endpointBase(endpoint) {
20
+ if (!endpoint)
21
+ return null;
22
+ const e = endpoint.trim().replace(/\/+$/, '');
23
+ if (!e)
24
+ return null;
25
+ return e.endsWith('/v1') ? e : `${e}/v1`;
26
+ }
27
+ async function probeEndpointReady(endpoint) {
28
+ const base = endpointBase(endpoint);
29
+ if (!base)
30
+ return { ok: false, reason: 'endpoint-not-configured' };
31
+ const ctrl = new AbortController();
32
+ const t = setTimeout(() => ctrl.abort(), 7000);
33
+ try {
34
+ const res = await fetch(`${base}/models`, { signal: ctrl.signal });
35
+ if (res.status === 503)
36
+ return { ok: false, reason: 'loading-http-503' };
37
+ if (!res.ok)
38
+ return { ok: false, reason: `http-${res.status}` };
39
+ return { ok: true, reason: 'ok' };
40
+ }
41
+ catch (e) {
42
+ const msg = String(e?.message ?? e).toLowerCase();
43
+ if (msg.includes('aborted'))
44
+ return { ok: false, reason: 'timeout' };
45
+ return { ok: false, reason: msg.slice(0, 120) };
46
+ }
47
+ finally {
48
+ clearTimeout(t);
49
+ }
50
+ }
51
+ function classifyInfraError(err) {
52
+ const msg = String(err?.message ?? err ?? '').toLowerCase();
53
+ if (!msg)
54
+ return 'other';
55
+ if (msg.includes('aborted') || msg.includes('cancel'))
56
+ return 'other';
57
+ if (msg.includes('503') || msg.includes('model is loading') || msg.includes('loading')) {
58
+ return 'loading';
59
+ }
60
+ const infraPatterns = [
61
+ 'econnrefused',
62
+ 'could not connect',
63
+ 'connection refused',
64
+ 'enotfound',
65
+ 'fetch failed',
66
+ 'connect timeout',
67
+ 'socket hang up',
68
+ 'no models found',
69
+ 'endpoint',
70
+ ];
71
+ if (infraPatterns.some((p) => msg.includes(p))) {
72
+ return 'infra_down';
73
+ }
74
+ return 'other';
75
+ }
76
+ async function ensureAntonRuntimeReady(idlehandsConfig, opts) {
77
+ const endpointProbe = await probeEndpointReady(idlehandsConfig.endpoint);
78
+ if (endpointProbe.ok)
79
+ return { ok: true, detail: 'endpoint-ready' };
80
+ // Try runtime orchestration recovery when endpoint probe fails.
81
+ let rtConfig;
82
+ try {
83
+ rtConfig = await loadRuntimes();
84
+ }
85
+ catch {
86
+ return { ok: false, detail: `endpoint-not-ready (${endpointProbe.reason}); runtimes-unavailable` };
87
+ }
88
+ const active = await loadActiveRuntime();
89
+ let targetModelId;
90
+ if (active?.modelId && rtConfig.models.some((m) => m.id === active.modelId && m.enabled)) {
91
+ targetModelId = active.modelId;
92
+ }
93
+ else if (typeof idlehandsConfig.model === 'string' && rtConfig.models.some((m) => m.id === idlehandsConfig.model && m.enabled)) {
94
+ targetModelId = idlehandsConfig.model;
95
+ }
96
+ if (!targetModelId) {
97
+ return { ok: false, detail: `endpoint-not-ready (${endpointProbe.reason}); no-runtime-model-mapping` };
98
+ }
99
+ const planOut = plan({ modelId: targetModelId, mode: 'live', forceRestart: opts.forceRestart }, rtConfig, active);
100
+ if (!planOut.ok) {
101
+ return { ok: false, detail: `runtime-plan-failed ${planOut.code}: ${planOut.reason}` };
102
+ }
103
+ const execRes = await execute(planOut, {
104
+ force: true,
105
+ confirm: async () => true,
106
+ });
107
+ if (!execRes.ok) {
108
+ return { ok: false, detail: `runtime-exec-failed: ${execRes.error ?? 'unknown'}` };
109
+ }
110
+ const timeoutMs = Math.max(10_000, opts.timeoutMs ?? ((planOut.model.launch.probe_timeout_sec ?? 600) * 1000));
111
+ for (const resolvedHost of planOut.hosts) {
112
+ const hostCfg = rtConfig.hosts.find((h) => h.id === resolvedHost.id);
113
+ if (!hostCfg)
114
+ continue;
115
+ const ready = await waitForModelsReady(runOnHost, hostCfg, planOut.model.runtime_defaults?.port ?? 8080, {
116
+ timeoutMs,
117
+ intervalMs: planOut.model.launch.probe_interval_ms ?? 2000,
118
+ });
119
+ if (!ready.ok) {
120
+ return { ok: false, detail: `wait-ready failed on ${resolvedHost.id}: ${ready.reason ?? 'timeout'}` };
121
+ }
122
+ }
123
+ return { ok: true, detail: 'runtime-ready' };
124
+ }
14
125
  /**
15
126
  * Main Anton orchestrator.
16
127
  */
17
128
  export async function runAnton(opts) {
18
129
  const { config, idlehandsConfig, progress, abortSignal, apiKey, vault, lens } = opts;
19
130
  const createSessionFn = opts.createSession || defaultCreateSession;
131
+ const runtimeResilienceEnabled = !opts.createSession; // unit tests inject mock sessions; skip runtime orchestration there.
20
132
  const startTimeMs = Date.now();
21
133
  let lockAcquired = false;
22
134
  let totalTokens = 0;
@@ -24,6 +136,7 @@ export async function runAnton(opts) {
24
136
  let iterationsUsed = 0;
25
137
  const attempts = [];
26
138
  const taskRetryCount = new Map();
139
+ let lockHeartbeatTimer = null;
27
140
  // SIGINT handler
28
141
  const handleAbort = () => {
29
142
  abortSignal.aborted = true;
@@ -33,6 +146,14 @@ export async function runAnton(opts) {
33
146
  // 1. Acquire Anton lock
34
147
  await acquireAntonLock(config.taskFile, config.projectDir);
35
148
  lockAcquired = true;
149
+ // Keep Anton lock fresh + emit heartbeat while run is active.
150
+ lockHeartbeatTimer = setInterval(() => {
151
+ void touchAntonLock();
152
+ try {
153
+ progress.onHeartbeat?.();
154
+ }
155
+ catch { }
156
+ }, 5000);
36
157
  // 2. Parse task file
37
158
  let taskFile = await parseTaskFile(config.taskFile);
38
159
  const initialPending = taskFile.pending.length;
@@ -74,6 +195,17 @@ export async function runAnton(opts) {
74
195
  stopReason: 'all_done',
75
196
  };
76
197
  }
198
+ // Runtime preflight (infra guardrail): ensure endpoint/model is actually ready
199
+ // before spending tokens on task attempts.
200
+ if (runtimeResilienceEnabled) {
201
+ const preflight = await ensureAntonRuntimeReady(idlehandsConfig, {
202
+ forceRestart: false,
203
+ timeoutMs: 120_000,
204
+ });
205
+ if (!preflight.ok) {
206
+ throw new Error(`Anton preflight failed: ${preflight.detail}`);
207
+ }
208
+ }
77
209
  // 7. Main loop
78
210
  mainLoop: while (true) {
79
211
  // Re-parse task file each iteration
@@ -142,12 +274,27 @@ export async function runAnton(opts) {
142
274
  // Spawn fresh session per attempt
143
275
  const sessionConfig = buildSessionConfig(idlehandsConfig, config);
144
276
  session = await createSessionFn(sessionConfig, apiKey);
145
- // Set up timeout
277
+ // Set up timeout + stop propagation for the currently running attempt.
278
+ // /anton stop flips abortSignal.aborted; we poll that and cancel session.ask immediately
279
+ // instead of waiting for the task attempt to naturally finish.
146
280
  const controller = new AbortController();
147
- const timeoutHandle = setTimeout(() => {
281
+ const cancelCurrentAttempt = () => {
282
+ if (controller.signal.aborted)
283
+ return;
148
284
  controller.abort();
149
- session?.cancel();
285
+ try {
286
+ session?.cancel();
287
+ }
288
+ catch { }
289
+ };
290
+ const timeoutHandle = setTimeout(() => {
291
+ cancelCurrentAttempt();
150
292
  }, config.taskTimeoutSec * 1000);
293
+ const abortPoll = setInterval(() => {
294
+ if (abortSignal.aborted) {
295
+ cancelCurrentAttempt();
296
+ }
297
+ }, 250);
151
298
  try {
152
299
  const taskStartMs = Date.now();
153
300
  // Build prompt and ask session
@@ -162,8 +309,34 @@ export async function runAnton(opts) {
162
309
  lens,
163
310
  maxContextTokens: idlehandsConfig.context_max_tokens || 8000,
164
311
  });
165
- const result = await session.ask(prompt);
166
- clearTimeout(timeoutHandle);
312
+ const promptText = typeof prompt === 'string' ? prompt : JSON.stringify(prompt);
313
+ const estimatedPromptTokens = estimateTokens(promptText);
314
+ if (estimatedPromptTokens > config.maxPromptTokensPerAttempt) {
315
+ throw new Error(`prompt-budget-exceeded: estimated=${estimatedPromptTokens} max=${config.maxPromptTokensPerAttempt}`);
316
+ }
317
+ let result;
318
+ let recoveredInfra = false;
319
+ while (true) {
320
+ try {
321
+ result = await session.ask(prompt, { signal: controller.signal });
322
+ break;
323
+ }
324
+ catch (e) {
325
+ const infraKind = classifyInfraError(e);
326
+ if (!runtimeResilienceEnabled || abortSignal.aborted || controller.signal.aborted || recoveredInfra || infraKind === 'other') {
327
+ throw e;
328
+ }
329
+ const recovery = await ensureAntonRuntimeReady(idlehandsConfig, {
330
+ forceRestart: infraKind === 'infra_down',
331
+ timeoutMs: 180_000,
332
+ });
333
+ if (!recovery.ok) {
334
+ throw new Error(`infra-recovery-failed: ${recovery.detail}`);
335
+ }
336
+ recoveredInfra = true;
337
+ // Retry the same attempt once after infra recovery without incrementing retry counters.
338
+ }
339
+ }
167
340
  const taskEndMs = Date.now();
168
341
  const durationMs = taskEndMs - taskStartMs;
169
342
  const tokensUsed = session.usage.prompt + session.usage.completion;
@@ -251,7 +424,6 @@ export async function runAnton(opts) {
251
424
  iterationsUsed++;
252
425
  }
253
426
  catch (error) {
254
- clearTimeout(timeoutHandle);
255
427
  const isTimeout = controller.signal.aborted;
256
428
  attempt = {
257
429
  taskKey: currentTask.key,
@@ -266,6 +438,10 @@ export async function runAnton(opts) {
266
438
  };
267
439
  totalTokens += attempt.tokensUsed;
268
440
  }
441
+ finally {
442
+ clearTimeout(timeoutHandle);
443
+ clearInterval(abortPoll);
444
+ }
269
445
  }
270
446
  finally {
271
447
  if (session) {
@@ -275,7 +451,13 @@ export async function runAnton(opts) {
275
451
  attempts.push(attempt);
276
452
  // Update retry count
277
453
  if (attempt.status !== 'passed') {
278
- taskRetryCount.set(currentTask.key, attemptNumber);
454
+ if ((attempt.error ?? '').startsWith('prompt-budget-exceeded')) {
455
+ // Don't burn retries/tokens forever on oversized prompts.
456
+ taskRetryCount.set(currentTask.key, config.maxRetriesPerTask);
457
+ }
458
+ else {
459
+ taskRetryCount.set(currentTask.key, attemptNumber);
460
+ }
279
461
  }
280
462
  // Report task end
281
463
  progress.onTaskEnd(currentTask, attempt, currentProgress);
@@ -331,6 +513,10 @@ export async function runAnton(opts) {
331
513
  return result;
332
514
  }
333
515
  finally {
516
+ if (lockHeartbeatTimer) {
517
+ clearInterval(lockHeartbeatTimer);
518
+ lockHeartbeatTimer = null;
519
+ }
334
520
  // 8. Lock release in finally
335
521
  if (lockAcquired) {
336
522
  await releaseAntonLock();
@@ -1 +1 @@
1
- {"version":3,"file":"controller.js","sourceRoot":"","sources":["../../src/anton/controller.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"controller.js","sourceRoot":"","sources":["../../src/anton/controller.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,8 @@ import { stateDir } from '../utils.js';
4
4
  function lockPath() {
5
5
  return path.join(stateDir(), 'anton.lock');
6
6
  }
7
- const STALE_LOCK_MS = 60 * 60 * 1000; // 1 hour
7
+ const STALE_LOCK_MS = 60 * 60 * 1000; // 1 hour hard cap
8
+ const STALE_HEARTBEAT_MS = 2 * 60 * 1000; // no heartbeat for 2m => stale run
8
9
  function isPidAlive(pid) {
9
10
  try {
10
11
  process.kill(pid, 0);
@@ -22,12 +23,25 @@ function lockAgeMs(lock) {
22
23
  return null;
23
24
  return Date.now() - ts;
24
25
  }
26
+ function heartbeatAgeMs(lock) {
27
+ if (!lock?.heartbeatAt)
28
+ return null;
29
+ const ts = Date.parse(lock.heartbeatAt);
30
+ if (!Number.isFinite(ts))
31
+ return null;
32
+ return Date.now() - ts;
33
+ }
25
34
  function isLockStale(lock) {
26
35
  if (!lock)
27
36
  return false;
37
+ if (!Number.isFinite(lock.pid) || lock.pid <= 1)
38
+ return true;
28
39
  const age = lockAgeMs(lock);
29
40
  if (age != null && age > STALE_LOCK_MS)
30
41
  return true;
42
+ const hbAge = heartbeatAgeMs(lock);
43
+ if (hbAge != null && hbAge > STALE_HEARTBEAT_MS)
44
+ return true;
31
45
  return !isPidAlive(lock.pid);
32
46
  }
33
47
  async function ensureStateDir() {
@@ -40,6 +54,7 @@ async function readLock() {
40
54
  return {
41
55
  pid: typeof parsed.pid === 'number' ? parsed.pid : 0,
42
56
  startedAt: typeof parsed.startedAt === 'string' ? parsed.startedAt : '',
57
+ heartbeatAt: typeof parsed.heartbeatAt === 'string' ? parsed.heartbeatAt : (typeof parsed.startedAt === 'string' ? parsed.startedAt : ''),
43
58
  cwd: typeof parsed.cwd === 'string' ? parsed.cwd : '',
44
59
  taskFile: typeof parsed.taskFile === 'string' ? parsed.taskFile : '',
45
60
  };
@@ -50,9 +65,11 @@ async function readLock() {
50
65
  }
51
66
  async function writeLock(taskFile, cwd) {
52
67
  await ensureStateDir();
68
+ const now = new Date().toISOString();
53
69
  const payload = {
54
70
  pid: process.pid,
55
- startedAt: new Date().toISOString(),
71
+ startedAt: now,
72
+ heartbeatAt: now,
56
73
  cwd,
57
74
  taskFile,
58
75
  };
@@ -97,6 +114,18 @@ export async function acquireAntonLock(taskFile, cwd) {
97
114
  throw error;
98
115
  }
99
116
  }
117
+ export async function touchAntonLock() {
118
+ try {
119
+ const current = await readLock();
120
+ if (!current || current.pid !== process.pid)
121
+ return;
122
+ current.heartbeatAt = new Date().toISOString();
123
+ await fs.writeFile(lockPath(), JSON.stringify(current), { encoding: 'utf8' });
124
+ }
125
+ catch {
126
+ // best effort
127
+ }
128
+ }
100
129
  export async function releaseAntonLock() {
101
130
  await removeLock();
102
131
  }
@@ -1 +1 @@
1
- {"version":3,"file":"lock.js","sourceRoot":"","sources":["../../src/anton/lock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,SAAS,QAAQ;IACf,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,YAAY,CAAC,CAAC;AAC7C,CAAC;AACD,MAAM,aAAa,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,SAAS;AAS/C,SAAS,UAAU,CAAC,GAAW;IAC7B,IAAI,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,IAAsB;IACvC,IAAI,CAAC,IAAI,EAAE,SAAS;QAAE,OAAO,IAAI,CAAC;IAClC,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACtC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QAAE,OAAO,IAAI,CAAC;IACtC,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;AACzB,CAAC;AAED,SAAS,WAAW,CAAC,IAAsB;IACzC,IAAI,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IACxB,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC5B,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,GAAG,aAAa;QAAE,OAAO,IAAI,CAAC;IACpD,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/B,CAAC;AAED,KAAK,UAAU,cAAc;IAC3B,MAAM,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAClD,CAAC;AAED,KAAK,UAAU,QAAQ;IACrB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,MAAM,CAAC,CAAC;QACtD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACnC,OAAO;YACL,GAAG,EAAE,OAAO,MAAM,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACpD,SAAS,EAAE,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE;YACvE,GAAG,EAAE,OAAO,MAAM,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;YACrD,QAAQ,EAAE,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;SACrE,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,QAAgB,EAAE,GAAW;IACpD,MAAM,cAAc,EAAE,CAAC;IACvB,MAAM,OAAO,GAAc;QACzB,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,GAAG;QACH,QAAQ;KACT,CAAC;IACF,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AAC5F,CAAC;AAED,KAAK,UAAU,UAAU;IACvB,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QACP,cAAc;IAChB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,QAAgB,EAAE,GAAW;IAClE,MAAM,QAAQ,GAAG,MAAM,QAAQ,EAAE,CAAC;IAElC,IAAI,QAAQ,EAAE,CAAC;QACb,IAAI,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1B,OAAO,CAAC,IAAI,CAAC,2CAA2C,QAAQ,CAAC,GAAG,kBAAkB,CAAC,CAAC;YACxF,MAAM,UAAU,EAAE,CAAC;QACrB,CAAC;aAAM,IAAI,QAAQ,CAAC,GAAG,KAAK,OAAO,CAAC,GAAG,EAAE,CAAC;YACxC,yEAAyE;YACzE,MAAM,UAAU,EAAE,CAAC;QACrB,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CAAC,uCAAuC,QAAQ,CAAC,GAAG,2BAA2B,CAAC,CAAC;QAClG,CAAC;IACH,CAAC;IAED,IAAI,CAAC;QACH,MAAM,SAAS,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IACjC,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC5B,gDAAgD;YAChD,MAAM,WAAW,GAAG,MAAM,QAAQ,EAAE,CAAC;YACrC,IAAI,WAAW,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC7C,MAAM,IAAI,KAAK,CAAC,uCAAuC,WAAW,CAAC,GAAG,2BAA2B,CAAC,CAAC;YACrG,CAAC;YACD,iEAAiE;YACjE,OAAO,gBAAgB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QACzC,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,MAAM,UAAU,EAAE,CAAC;AACrB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,MAAM,IAAI,GAAG,MAAM,QAAQ,EAAE,CAAC;IAC9B,OAAO,IAAI,KAAK,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AAC7C,CAAC"}
1
+ {"version":3,"file":"lock.js","sourceRoot":"","sources":["../../src/anton/lock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,SAAS,QAAQ;IACf,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,YAAY,CAAC,CAAC;AAC7C,CAAC;AACD,MAAM,aAAa,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,kBAAkB;AACxD,MAAM,kBAAkB,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,mCAAmC;AAU7E,SAAS,UAAU,CAAC,GAAW;IAC7B,IAAI,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,IAAsB;IACvC,IAAI,CAAC,IAAI,EAAE,SAAS;QAAE,OAAO,IAAI,CAAC;IAClC,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACtC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QAAE,OAAO,IAAI,CAAC;IACtC,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;AACzB,CAAC;AAED,SAAS,cAAc,CAAC,IAAsB;IAC5C,IAAI,CAAC,IAAI,EAAE,WAAW;QAAE,OAAO,IAAI,CAAC;IACpC,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACxC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QAAE,OAAO,IAAI,CAAC;IACtC,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;AACzB,CAAC;AAED,SAAS,WAAW,CAAC,IAAsB;IACzC,IAAI,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IACxB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7D,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC5B,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,GAAG,aAAa;QAAE,OAAO,IAAI,CAAC;IACpD,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IACnC,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,GAAG,kBAAkB;QAAE,OAAO,IAAI,CAAC;IAC7D,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/B,CAAC;AAED,KAAK,UAAU,cAAc;IAC3B,MAAM,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAClD,CAAC;AAED,KAAK,UAAU,QAAQ;IACrB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,MAAM,CAAC,CAAC;QACtD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACnC,OAAO;YACL,GAAG,EAAE,OAAO,MAAM,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACpD,SAAS,EAAE,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE;YACvE,WAAW,EAAE,OAAO,MAAM,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;YACzI,GAAG,EAAE,OAAO,MAAM,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;YACrD,QAAQ,EAAE,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;SACrE,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,QAAgB,EAAE,GAAW;IACpD,MAAM,cAAc,EAAE,CAAC;IACvB,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrC,MAAM,OAAO,GAAc;QACzB,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,SAAS,EAAE,GAAG;QACd,WAAW,EAAE,GAAG;QAChB,GAAG;QACH,QAAQ;KACT,CAAC;IACF,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AAC5F,CAAC;AAED,KAAK,UAAU,UAAU;IACvB,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QACP,cAAc;IAChB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,QAAgB,EAAE,GAAW;IAClE,MAAM,QAAQ,GAAG,MAAM,QAAQ,EAAE,CAAC;IAElC,IAAI,QAAQ,EAAE,CAAC;QACb,IAAI,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1B,OAAO,CAAC,IAAI,CAAC,2CAA2C,QAAQ,CAAC,GAAG,kBAAkB,CAAC,CAAC;YACxF,MAAM,UAAU,EAAE,CAAC;QACrB,CAAC;aAAM,IAAI,QAAQ,CAAC,GAAG,KAAK,OAAO,CAAC,GAAG,EAAE,CAAC;YACxC,yEAAyE;YACzE,MAAM,UAAU,EAAE,CAAC;QACrB,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CAAC,uCAAuC,QAAQ,CAAC,GAAG,2BAA2B,CAAC,CAAC;QAClG,CAAC;IACH,CAAC;IAED,IAAI,CAAC;QACH,MAAM,SAAS,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IACjC,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC5B,gDAAgD;YAChD,MAAM,WAAW,GAAG,MAAM,QAAQ,EAAE,CAAC;YACrC,IAAI,WAAW,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC7C,MAAM,IAAI,KAAK,CAAC,uCAAuC,WAAW,CAAC,GAAG,2BAA2B,CAAC,CAAC;YACrG,CAAC;YACD,iEAAiE;YACjE,OAAO,gBAAgB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QACzC,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,QAAQ,EAAE,CAAC;QACjC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,KAAK,OAAO,CAAC,GAAG;YAAE,OAAO;QACpD,OAAO,CAAC,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC/C,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;IAChF,CAAC;IAAC,MAAM,CAAC;QACP,cAAc;IAChB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,MAAM,UAAU,EAAE,CAAC;AACrB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,MAAM,IAAI,GAAG,MAAM,QAAQ,EAAE,CAAC;IAC9B,OAAO,IAAI,KAAK,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AAC7C,CAAC"}
@@ -372,6 +372,10 @@ export async function handleAnton({ ctx, sessions }) {
372
372
  await ctx.reply('No Anton run in progress.');
373
373
  return;
374
374
  }
375
+ if (managed.antonAbortSignal?.aborted) {
376
+ await ctx.reply('🛑 Anton is stopping. Please wait for the current attempt to unwind.');
377
+ return;
378
+ }
375
379
  if (managed.antonProgress) {
376
380
  await ctx.reply(formatProgressBar(managed.antonProgress));
377
381
  }
@@ -386,6 +390,7 @@ export async function handleAnton({ ctx, sessions }) {
386
390
  await ctx.reply('No Anton run in progress.');
387
391
  return;
388
392
  }
393
+ managed.lastActivity = Date.now();
389
394
  managed.antonAbortSignal.aborted = true;
390
395
  await ctx.reply('🛑 Anton stop requested. Run will halt after the current task.');
391
396
  return;
@@ -419,8 +424,20 @@ export async function handleAnton({ ctx, sessions }) {
419
424
  return;
420
425
  }
421
426
  if (session.antonActive) {
422
- await ctx.reply('⚠️ Anton is already running. Use /anton stop first.');
423
- return;
427
+ const staleMs = Date.now() - session.lastActivity;
428
+ if (staleMs > 120_000) {
429
+ session.antonActive = false;
430
+ session.antonAbortSignal = null;
431
+ session.antonProgress = null;
432
+ await ctx.reply('♻️ Recovered stale Anton run state. Starting a fresh run...');
433
+ }
434
+ else {
435
+ const msg = session.antonAbortSignal?.aborted
436
+ ? '🛑 Anton is still stopping. Please wait a moment, then try again.'
437
+ : '⚠️ Anton is already running. Use /anton stop first.';
438
+ await ctx.reply(msg);
439
+ return;
440
+ }
424
441
  }
425
442
  const cwd = session.workingDir;
426
443
  const filePath = path.resolve(cwd, filePart);
@@ -440,6 +457,7 @@ export async function handleAnton({ ctx, sessions }) {
440
457
  taskTimeoutSec: defaults.task_timeout_sec ?? 600,
441
458
  totalTimeoutSec: defaults.total_timeout_sec ?? 7200,
442
459
  maxTotalTokens: defaults.max_total_tokens ?? Infinity,
460
+ maxPromptTokensPerAttempt: defaults.max_prompt_tokens_per_attempt ?? 128_000,
443
461
  autoCommit: defaults.auto_commit ?? true,
444
462
  branch: false,
445
463
  allowDirty: false,
@@ -465,6 +483,7 @@ export async function handleAnton({ ctx, sessions }) {
465
483
  const progress = {
466
484
  onTaskStart(task, attempt, prog) {
467
485
  session.antonProgress = prog;
486
+ session.lastActivity = Date.now();
468
487
  const now = Date.now();
469
488
  if (now - lastProgressAt >= ANTON_RATE_LIMIT_MS) {
470
489
  lastProgressAt = now;
@@ -473,6 +492,7 @@ export async function handleAnton({ ctx, sessions }) {
473
492
  },
474
493
  onTaskEnd(task, result, prog) {
475
494
  session.antonProgress = prog;
495
+ session.lastActivity = Date.now();
476
496
  const now = Date.now();
477
497
  if (now - lastProgressAt >= ANTON_RATE_LIMIT_MS) {
478
498
  lastProgressAt = now;
@@ -480,15 +500,20 @@ export async function handleAnton({ ctx, sessions }) {
480
500
  }
481
501
  },
482
502
  onTaskSkip(task, reason) {
503
+ session.lastActivity = Date.now();
483
504
  ctx.reply(formatTaskSkip(task, reason)).catch(() => { });
484
505
  },
485
506
  onRunComplete(result) {
507
+ session.lastActivity = Date.now();
486
508
  session.antonLastResult = result;
487
509
  session.antonActive = false;
488
510
  session.antonAbortSignal = null;
489
511
  session.antonProgress = null;
490
512
  ctx.reply(formatRunSummary(result)).catch(() => { });
491
513
  },
514
+ onHeartbeat() {
515
+ session.lastActivity = Date.now();
516
+ },
492
517
  };
493
518
  let pendingCount = 0;
494
519
  try {
@@ -505,6 +530,7 @@ export async function handleAnton({ ctx, sessions }) {
505
530
  vault: session.session.vault,
506
531
  lens: session.session.lens,
507
532
  }).catch((err) => {
533
+ session.lastActivity = Date.now();
508
534
  session.antonActive = false;
509
535
  session.antonAbortSignal = null;
510
536
  session.antonProgress = null;