@songsid/agend 2.1.4-beta.35 → 2.1.4-beta.36
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/backend/claude-code.d.ts +29 -2
- package/dist/backend/claude-code.js +207 -18
- package/dist/backend/claude-code.js.map +1 -1
- package/dist/backend/types.d.ts +17 -3
- package/dist/backend/types.js.map +1 -1
- package/dist/daemon.d.ts +20 -0
- package/dist/daemon.js +65 -2
- package/dist/daemon.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,4 +1,22 @@
|
|
|
1
1
|
import { type CliBackend, type CliBackendConfig, type ErrorPattern, type RuntimeDialog, type StartupDialog } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Take `lockPath` via exclusive create, recording {pid, token} so a stale lock
|
|
4
|
+
* can be attributed. Returns the token to release with, or null when the lock
|
|
5
|
+
* could not be acquired within the retry budget.
|
|
6
|
+
*
|
|
7
|
+
* A held lock is NEVER auto-reclaimed. Reclaiming under concurrency cannot be
|
|
8
|
+
* made atomic with the primitives available (rename/link both leave a window
|
|
9
|
+
* where a reclaimed-and-reacquired live lock gets stolen), and every claude.json
|
|
10
|
+
* update is best-effort with a fallback — a skipped trust write is picked up by
|
|
11
|
+
* the startup-dialog dismisser. A lock left by a crashed holder therefore means
|
|
12
|
+
* skipped updates until it is removed manually (delete the .agend.lock file);
|
|
13
|
+
* the crash window is one writeFileSync inside a ~1ms critical section. When
|
|
14
|
+
* the recorded owner PID is verifiably dead we skip immediately instead of
|
|
15
|
+
* burning the whole retry budget waiting for a release that can never come.
|
|
16
|
+
*/
|
|
17
|
+
export declare function acquireClaudeJsonLock(lockPath: string, maxAttempts?: number): string | null;
|
|
18
|
+
/** Release a lock taken by acquireClaudeJsonLock, only if we still own it. */
|
|
19
|
+
export declare function releaseClaudeJsonLock(lockPath: string, token: string): void;
|
|
2
20
|
export declare class ClaudeCodeBackend implements CliBackend {
|
|
3
21
|
private instanceDir;
|
|
4
22
|
readonly binaryName = "claude";
|
|
@@ -96,9 +114,18 @@ export declare class ClaudeCodeBackend implements CliBackend {
|
|
|
96
114
|
apiModels: import("./types.js").ModelOption[];
|
|
97
115
|
}>;
|
|
98
116
|
cleanup(_config: CliBackendConfig): void;
|
|
99
|
-
/**
|
|
117
|
+
/**
|
|
118
|
+
* Pre-accept Claude Code's workspace trust dialog for this working directory.
|
|
119
|
+
* The interactive TUI blocks a fresh workspace on "Do you trust the files in
|
|
120
|
+
* this folder?" and nothing in tmux answers it, so the process exits and the
|
|
121
|
+
* instance crash-loops. No CLI flag skips it interactively (verified on
|
|
122
|
+
* 2.1.250 — only -p / non-TTY stdout bypass the dialog); the recognised
|
|
123
|
+
* signal is projects[<cwd>].hasTrustDialogAccepted in claude.json.
|
|
124
|
+
*/
|
|
125
|
+
preTrust(workingDirectory: string): void;
|
|
126
|
+
/** Pre-approve ANTHROPIC_API_KEY in claude.json to skip the interactive prompt */
|
|
100
127
|
private preApproveApiKey;
|
|
101
|
-
/** Check if user has an active OAuth session in
|
|
128
|
+
/** Check if user has an active OAuth session in claude.json */
|
|
102
129
|
private hasOAuthSession;
|
|
103
130
|
private writeStatusLineScript;
|
|
104
131
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { join, resolve } from "node:path";
|
|
2
|
-
import { existsSync, readFileSync, readdirSync, realpathSync, writeFileSync } from "node:fs";
|
|
1
|
+
import { dirname, join, resolve } from "node:path";
|
|
2
|
+
import { chmodSync, existsSync, mkdirSync, readFileSync, readdirSync, realpathSync, renameSync, unlinkSync, writeFileSync } from "node:fs";
|
|
3
3
|
import { homedir } from "node:os";
|
|
4
4
|
import { resolveBinary, shellQuote, validateModel, warnIfModelMismatch } from "./types.js";
|
|
5
5
|
/** Mirror Claude Code's ~/.claude/projects key for a working directory. */
|
|
@@ -23,6 +23,128 @@ function claudeProjectKey(cwd) {
|
|
|
23
23
|
}
|
|
24
24
|
return `${sanitized.slice(0, 200)}-${Math.abs(hash).toString(36)}`;
|
|
25
25
|
}
|
|
26
|
+
/** Claude Code's top-level config file, honoring CLAUDE_CONFIG_DIR. */
|
|
27
|
+
function claudeJsonPath() {
|
|
28
|
+
const configDir = process.env.CLAUDE_CONFIG_DIR?.trim();
|
|
29
|
+
return configDir ? join(configDir, ".claude.json") : join(homedir(), ".claude.json");
|
|
30
|
+
}
|
|
31
|
+
function sleepSync(ms) {
|
|
32
|
+
Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, ms);
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Take `lockPath` via exclusive create, recording {pid, token} so a stale lock
|
|
36
|
+
* can be attributed. Returns the token to release with, or null when the lock
|
|
37
|
+
* could not be acquired within the retry budget.
|
|
38
|
+
*
|
|
39
|
+
* A held lock is NEVER auto-reclaimed. Reclaiming under concurrency cannot be
|
|
40
|
+
* made atomic with the primitives available (rename/link both leave a window
|
|
41
|
+
* where a reclaimed-and-reacquired live lock gets stolen), and every claude.json
|
|
42
|
+
* update is best-effort with a fallback — a skipped trust write is picked up by
|
|
43
|
+
* the startup-dialog dismisser. A lock left by a crashed holder therefore means
|
|
44
|
+
* skipped updates until it is removed manually (delete the .agend.lock file);
|
|
45
|
+
* the crash window is one writeFileSync inside a ~1ms critical section. When
|
|
46
|
+
* the recorded owner PID is verifiably dead we skip immediately instead of
|
|
47
|
+
* burning the whole retry budget waiting for a release that can never come.
|
|
48
|
+
*/
|
|
49
|
+
export function acquireClaudeJsonLock(lockPath, maxAttempts = 40) {
|
|
50
|
+
const token = `${process.pid}.${Math.random().toString(16).slice(2)}`;
|
|
51
|
+
const payload = JSON.stringify({ pid: process.pid, token });
|
|
52
|
+
for (let attempt = 0; attempt < maxAttempts; attempt++) {
|
|
53
|
+
try {
|
|
54
|
+
writeFileSync(lockPath, payload, { flag: "wx", mode: 0o600 });
|
|
55
|
+
return token;
|
|
56
|
+
}
|
|
57
|
+
catch { /* already held — fall through to the holder check */ }
|
|
58
|
+
let ownerPid = null;
|
|
59
|
+
try {
|
|
60
|
+
ownerPid = Number(JSON.parse(readFileSync(lockPath, "utf-8")).pid) || null;
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
continue; /* vanished (retry the create now) or content not written yet (retry) */
|
|
64
|
+
}
|
|
65
|
+
if (ownerPid !== null) {
|
|
66
|
+
try {
|
|
67
|
+
process.kill(ownerPid, 0);
|
|
68
|
+
}
|
|
69
|
+
catch (err) {
|
|
70
|
+
// ESRCH = the holder is dead and will never release — give up now.
|
|
71
|
+
// EPERM means alive under another user: keep waiting like any holder.
|
|
72
|
+
if (err.code === "ESRCH")
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
sleepSync(25);
|
|
77
|
+
}
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
80
|
+
/** Release a lock taken by acquireClaudeJsonLock, only if we still own it. */
|
|
81
|
+
export function releaseClaudeJsonLock(lockPath, token) {
|
|
82
|
+
try {
|
|
83
|
+
const holder = JSON.parse(readFileSync(lockPath, "utf-8"));
|
|
84
|
+
if (holder.token === token)
|
|
85
|
+
unlinkSync(lockPath);
|
|
86
|
+
}
|
|
87
|
+
catch { /* already gone or replaced — nothing of ours to release */ }
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Read-modify-write claude.json under a lock file, so concurrent instance
|
|
91
|
+
* spawns don't drop each other's updates, then replace it via atomic rename so
|
|
92
|
+
* a reader never sees a torn file. The file and its lock are created 0600 —
|
|
93
|
+
* claude.json holds OAuth account data, and the rename would otherwise replace
|
|
94
|
+
* the CLI's own 0600 file with the temp file's default 0644/umask mode.
|
|
95
|
+
* `mutate` returns false to skip the write. If the lock cannot be acquired the
|
|
96
|
+
* update is SKIPPED, never performed unlocked (last-write-wins against a
|
|
97
|
+
* concurrent holder could drop that holder's entry); an existing-but-
|
|
98
|
+
* unparseable file is likewise left untouched — never clobber the user's whole
|
|
99
|
+
* config over a parse error. Both give up to the getStartupDialogs() fallback.
|
|
100
|
+
*/
|
|
101
|
+
function updateClaudeJson(mutate) {
|
|
102
|
+
const path = claudeJsonPath();
|
|
103
|
+
// The parent must exist before both the lock create and the rename — on a
|
|
104
|
+
// fresh machine (no ~/.claude.json yet) an ENOENT here previously made every
|
|
105
|
+
// lock attempt fail, silently degrading to unlocked last-write-wins.
|
|
106
|
+
mkdirSync(dirname(path), { recursive: true });
|
|
107
|
+
const lockPath = `${path}.agend.lock`;
|
|
108
|
+
const token = acquireClaudeJsonLock(lockPath);
|
|
109
|
+
if (token === null)
|
|
110
|
+
return;
|
|
111
|
+
try {
|
|
112
|
+
let cfg = {};
|
|
113
|
+
let raw = null;
|
|
114
|
+
try {
|
|
115
|
+
raw = readFileSync(path, "utf-8");
|
|
116
|
+
}
|
|
117
|
+
catch { /* missing file — create a minimal one */ }
|
|
118
|
+
if (raw !== null) {
|
|
119
|
+
try {
|
|
120
|
+
const parsed = JSON.parse(raw);
|
|
121
|
+
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed))
|
|
122
|
+
return;
|
|
123
|
+
cfg = parsed;
|
|
124
|
+
}
|
|
125
|
+
catch {
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
if (!mutate(cfg))
|
|
130
|
+
return;
|
|
131
|
+
const tempPath = join(dirname(path), `.claude.json.${process.pid}.${Math.random().toString(16).slice(2)}.tmp`);
|
|
132
|
+
try {
|
|
133
|
+
writeFileSync(tempPath, JSON.stringify(cfg, null, 2), { flag: "wx", mode: 0o600 });
|
|
134
|
+
chmodSync(tempPath, 0o600); // mode above is masked by umask; make 0600 unconditional
|
|
135
|
+
renameSync(tempPath, path);
|
|
136
|
+
}
|
|
137
|
+
finally {
|
|
138
|
+
try {
|
|
139
|
+
unlinkSync(tempPath);
|
|
140
|
+
}
|
|
141
|
+
catch { /* already renamed */ }
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
finally {
|
|
145
|
+
releaseClaudeJsonLock(lockPath, token);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
26
148
|
export class ClaudeCodeBackend {
|
|
27
149
|
instanceDir;
|
|
28
150
|
binaryName = "claude";
|
|
@@ -218,10 +340,31 @@ export class ClaudeCodeBackend {
|
|
|
218
340
|
}
|
|
219
341
|
getStartupDialogs() {
|
|
220
342
|
return [
|
|
343
|
+
// A corrupt claude.json shows a modal whose only options are "1. Exit and
|
|
344
|
+
// fix manually" / "2. Reset with default configuration" (captured live on
|
|
345
|
+
// 2.1.250). Neither is dismissable in a useful direction: Enter exits
|
|
346
|
+
// (crash loop), reset wipes the user's config. The modal's ❯ selector
|
|
347
|
+
// would satisfy the ready pattern, so without this entry the instance
|
|
348
|
+
// reports ready and queued messages get typed into the modal. Must stay
|
|
349
|
+
// FIRST so no dismiss pattern grabs the pane before it.
|
|
350
|
+
{
|
|
351
|
+
pattern: /Configuration error[\s\S]{0,800}?contains invalid JSON/,
|
|
352
|
+
keys: [],
|
|
353
|
+
description: "Claude corrupt-config modal — not dismissable, reporting config_error",
|
|
354
|
+
fatal: { type: "config_error", action: "pause", message: "claude.json is corrupt — Claude Code cannot start. Fix or remove the file (Claude backs the corrupt copy up under <config>/backups/), then wake the instance." },
|
|
355
|
+
},
|
|
221
356
|
// Session resume prompt must be checked BEFORE ready pattern, because ❯ in
|
|
222
357
|
// "❯ 1. Resume from summary" would falsely match the ready pattern /❯/.
|
|
223
358
|
{ pattern: /Resume from summary \(recommended\)/, keys: ["Down", "Enter"], description: "Claude session resume prompt — select 'Resume full session as-is'" },
|
|
224
359
|
{ pattern: /[❯›]\s*\d+\.\s*No/m, keys: ["Down", "Enter"], description: "Claude 'No, exit' confirmation — navigate to Yes" },
|
|
360
|
+
// The 2.1.250 workspace-trust dialog has no numbered options — the cursor
|
|
361
|
+
// sits on "❯ No, exit" above "Yes, I trust this folder" (captured live).
|
|
362
|
+
// It must be matched BEFORE the generic /I trust/ Enter fallback below:
|
|
363
|
+
// that pattern also matches this screen's "Yes, I trust this folder" text,
|
|
364
|
+
// and a bare Enter there confirms "No, exit" — the dialog fallback itself
|
|
365
|
+
// used to exit the CLI. preTrust() normally prevents the dialog entirely;
|
|
366
|
+
// this is the recovery path when the config write was skipped.
|
|
367
|
+
{ pattern: /[❯›]\s*No, exit/m, keys: ["Down", "Enter"], description: "Claude workspace trust dialog — navigate to 'Yes, I trust this folder'" },
|
|
225
368
|
{ pattern: /I accept|I trust/i, keys: ["Enter"], description: "Claude 'Yes, I accept' trust dialog" },
|
|
226
369
|
{ pattern: /Resume Session/i, keys: ["Escape"], description: "Claude resume session picker — start fresh" },
|
|
227
370
|
];
|
|
@@ -312,32 +455,78 @@ export class ClaudeCodeBackend {
|
|
|
312
455
|
cleanup(_config) {
|
|
313
456
|
// mcp-config.json is in instance dir, cleaned up when instance is deleted
|
|
314
457
|
}
|
|
315
|
-
/**
|
|
458
|
+
/**
|
|
459
|
+
* Pre-accept Claude Code's workspace trust dialog for this working directory.
|
|
460
|
+
* The interactive TUI blocks a fresh workspace on "Do you trust the files in
|
|
461
|
+
* this folder?" and nothing in tmux answers it, so the process exits and the
|
|
462
|
+
* instance crash-loops. No CLI flag skips it interactively (verified on
|
|
463
|
+
* 2.1.250 — only -p / non-TTY stdout bypass the dialog); the recognised
|
|
464
|
+
* signal is projects[<cwd>].hasTrustDialogAccepted in claude.json.
|
|
465
|
+
*/
|
|
466
|
+
preTrust(workingDirectory) {
|
|
467
|
+
const cwd = workingDirectory?.trim();
|
|
468
|
+
if (!cwd)
|
|
469
|
+
return;
|
|
470
|
+
const literal = resolve(cwd);
|
|
471
|
+
let canonical = literal;
|
|
472
|
+
try {
|
|
473
|
+
canonical = realpathSync(literal);
|
|
474
|
+
}
|
|
475
|
+
catch { /* not created yet — trust the literal path */ }
|
|
476
|
+
// Trust both spellings when they differ: Claude keys projects by the cwd's
|
|
477
|
+
// realpath but falls back to the unresolved absolute path (see
|
|
478
|
+
// claudeProjectKey above), and which one the TUI sees depends on how tmux
|
|
479
|
+
// entered the directory.
|
|
480
|
+
const paths = canonical === literal ? [canonical] : [canonical, literal];
|
|
481
|
+
try {
|
|
482
|
+
updateClaudeJson(cfg => {
|
|
483
|
+
let projects = cfg.projects;
|
|
484
|
+
if (!projects || typeof projects !== "object" || Array.isArray(projects)) {
|
|
485
|
+
projects = {};
|
|
486
|
+
cfg.projects = projects;
|
|
487
|
+
}
|
|
488
|
+
let changed = false;
|
|
489
|
+
for (const p of paths) {
|
|
490
|
+
const existing = projects[p];
|
|
491
|
+
const entry = existing && typeof existing === "object" && !Array.isArray(existing)
|
|
492
|
+
? existing
|
|
493
|
+
: {};
|
|
494
|
+
if (entry.hasTrustDialogAccepted === true)
|
|
495
|
+
continue;
|
|
496
|
+
entry.hasTrustDialogAccepted = true;
|
|
497
|
+
projects[p] = entry;
|
|
498
|
+
changed = true;
|
|
499
|
+
}
|
|
500
|
+
return changed;
|
|
501
|
+
});
|
|
502
|
+
}
|
|
503
|
+
catch { /* best effort — startup dialog auto-dismiss remains the fallback */ }
|
|
504
|
+
}
|
|
505
|
+
/** Pre-approve ANTHROPIC_API_KEY in claude.json to skip the interactive prompt */
|
|
316
506
|
preApproveApiKey(_config) {
|
|
317
507
|
const apiKey = process.env.ANTHROPIC_API_KEY;
|
|
318
508
|
if (!apiKey)
|
|
319
509
|
return;
|
|
320
510
|
const fingerprint = apiKey.length > 20 ? apiKey.slice(-20) : apiKey;
|
|
321
|
-
const claudeJsonPath = join(homedir(), ".claude.json");
|
|
322
|
-
let claudeCfg = {};
|
|
323
511
|
try {
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
512
|
+
updateClaudeJson(cfg => {
|
|
513
|
+
const existing = cfg.customApiKeyResponses;
|
|
514
|
+
const approved = existing?.approved ?? [];
|
|
515
|
+
if (approved.includes(fingerprint))
|
|
516
|
+
return false;
|
|
517
|
+
cfg.customApiKeyResponses = {
|
|
518
|
+
approved: [...approved, fingerprint],
|
|
519
|
+
rejected: existing?.rejected ?? [],
|
|
520
|
+
};
|
|
521
|
+
return true;
|
|
522
|
+
});
|
|
335
523
|
}
|
|
524
|
+
catch { /* best effort — the startup prompt remains the fallback */ }
|
|
336
525
|
}
|
|
337
|
-
/** Check if user has an active OAuth session in
|
|
526
|
+
/** Check if user has an active OAuth session in claude.json */
|
|
338
527
|
hasOAuthSession() {
|
|
339
528
|
try {
|
|
340
|
-
const cfg = JSON.parse(readFileSync(
|
|
529
|
+
const cfg = JSON.parse(readFileSync(claudeJsonPath(), "utf-8"));
|
|
341
530
|
return !!cfg.oauthAccount?.accountUuid;
|
|
342
531
|
}
|
|
343
532
|
catch {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../src/backend/claude-code.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../src/backend/claude-code.ts"],"names":[],"mappings":"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"}
|
package/dist/backend/types.d.ts
CHANGED
|
@@ -40,7 +40,7 @@ export interface CliBackendConfig {
|
|
|
40
40
|
/** Action to take when an error pattern is detected in PTY output. */
|
|
41
41
|
export type ErrorActionType = "notify" | "failover" | "restart" | "pause";
|
|
42
42
|
/** Categorizes detected errors for logging and response. */
|
|
43
|
-
export type ErrorType = "rate_limit" | "auth_error" | "crash" | "network" | "quota" | "timeout" | "model_error";
|
|
43
|
+
export type ErrorType = "rate_limit" | "auth_error" | "crash" | "network" | "quota" | "timeout" | "model_error" | "config_error";
|
|
44
44
|
export interface ErrorPattern {
|
|
45
45
|
pattern: RegExp;
|
|
46
46
|
type: ErrorType;
|
|
@@ -94,8 +94,22 @@ export interface RuntimeDialog {
|
|
|
94
94
|
/** Human-readable description for logging. */
|
|
95
95
|
description: string;
|
|
96
96
|
}
|
|
97
|
-
/**
|
|
98
|
-
|
|
97
|
+
/**
|
|
98
|
+
* A dialog that may appear during CLI startup (trust prompts, session pickers, etc.).
|
|
99
|
+
* With `fatal` set, the screen cannot be dismissed by keypresses (e.g. a corrupt
|
|
100
|
+
* claude.json modal whose only choices are "exit" and "reset config"): the daemon
|
|
101
|
+
* reports the error instead of sending keys — `keys` is ignored and should be [].
|
|
102
|
+
* This must be detected as a dialog, not left to the ready check: such modals
|
|
103
|
+
* often contain the `❯` selector that ready patterns match, so they would
|
|
104
|
+
* otherwise pass as ready and queued messages would be typed into the modal.
|
|
105
|
+
*/
|
|
106
|
+
export type StartupDialog = RuntimeDialog & {
|
|
107
|
+
fatal?: {
|
|
108
|
+
type: ErrorType;
|
|
109
|
+
action: ErrorActionType;
|
|
110
|
+
message: string;
|
|
111
|
+
};
|
|
112
|
+
};
|
|
99
113
|
export interface CliBackend {
|
|
100
114
|
/** The CLI binary name (e.g. "claude", "gemini", "codex") */
|
|
101
115
|
readonly binaryName: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/backend/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACvE,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAgG1C,4EAA4E;AAC5E,MAAM,UAAU,eAAe,CAAC,UAAkB;IAChD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,UAAU,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC/H,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,SAAS,CAAC;IAC7D,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,SAAS,CAAC;IAAC,CAAC;AAC/B,CAAC;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/backend/types.ts"],"names":[],"mappings":"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"}
|
package/dist/daemon.d.ts
CHANGED
|
@@ -418,6 +418,17 @@ export declare class Daemon extends EventEmitter {
|
|
|
418
418
|
private authFailureUnresolved;
|
|
419
419
|
/** One login-screen auth report per spawn — the screen persists across polls. */
|
|
420
420
|
private loginScreenReported;
|
|
421
|
+
/** A fatal startup screen (see StartupDialog.fatal) was already reported this run. */
|
|
422
|
+
private fatalStartupReported;
|
|
423
|
+
/**
|
|
424
|
+
* The CLI is parked on a fatal startup screen and every pane write must be
|
|
425
|
+
* refused. This is deliberately separate from the pause that the reported
|
|
426
|
+
* pty_error triggers: the pause is applied by an async handler, and a queued
|
|
427
|
+
* delivery would race it into the modal (where paste+Enter can confirm
|
|
428
|
+
* "Exit and fix manually"). Set synchronously at dialog-match time; cleared
|
|
429
|
+
* when a startup scan reaches a real ready prompt, or on wake().
|
|
430
|
+
*/
|
|
431
|
+
private fatalStartupBlocked;
|
|
421
432
|
/** model_error seen mid-turn: notify only if it survives to the idle screen. */
|
|
422
433
|
private pendingModelErrorKey;
|
|
423
434
|
/**
|
|
@@ -790,6 +801,15 @@ export declare class Daemon extends EventEmitter {
|
|
|
790
801
|
* serial in both cases so separate PTY writes can never overlap.
|
|
791
802
|
*/
|
|
792
803
|
private deliverMessage;
|
|
804
|
+
/**
|
|
805
|
+
* While the CLI is parked on a fatal startup screen (see fatalStartupBlocked),
|
|
806
|
+
* no pane write may happen: paste+Enter into the corrupt-config modal would
|
|
807
|
+
* confirm "Exit and fix manually" and exit the CLI. The message is failed (❌)
|
|
808
|
+
* rather than held — the accompanying config_error notification tells the user
|
|
809
|
+
* what to fix, and holding would only build a queue that floods the pane the
|
|
810
|
+
* moment the flag clears.
|
|
811
|
+
*/
|
|
812
|
+
private refuseFatalStartupDelivery;
|
|
793
813
|
/**
|
|
794
814
|
* A raw `%output` silence check is authoritative for ordinary TUIs. It is not
|
|
795
815
|
* for a backend such as agy whose status-line hook periodically redraws an
|
package/dist/daemon.js
CHANGED
|
@@ -847,6 +847,17 @@ export class Daemon extends EventEmitter {
|
|
|
847
847
|
authFailureUnresolved = false;
|
|
848
848
|
/** One login-screen auth report per spawn — the screen persists across polls. */
|
|
849
849
|
loginScreenReported = false;
|
|
850
|
+
/** A fatal startup screen (see StartupDialog.fatal) was already reported this run. */
|
|
851
|
+
fatalStartupReported = false;
|
|
852
|
+
/**
|
|
853
|
+
* The CLI is parked on a fatal startup screen and every pane write must be
|
|
854
|
+
* refused. This is deliberately separate from the pause that the reported
|
|
855
|
+
* pty_error triggers: the pause is applied by an async handler, and a queued
|
|
856
|
+
* delivery would race it into the modal (where paste+Enter can confirm
|
|
857
|
+
* "Exit and fix manually"). Set synchronously at dialog-match time; cleared
|
|
858
|
+
* when a startup scan reaches a real ready prompt, or on wake().
|
|
859
|
+
*/
|
|
860
|
+
fatalStartupBlocked = false;
|
|
850
861
|
/** model_error seen mid-turn: notify only if it survives to the idle screen. */
|
|
851
862
|
pendingModelErrorKey = null;
|
|
852
863
|
/**
|
|
@@ -2337,6 +2348,8 @@ export class Daemon extends EventEmitter {
|
|
|
2337
2348
|
this.pausePending = false;
|
|
2338
2349
|
this.authFailureUnresolved = false;
|
|
2339
2350
|
this.loginScreenReported = false;
|
|
2351
|
+
this.fatalStartupReported = false;
|
|
2352
|
+
this.fatalStartupBlocked = false;
|
|
2340
2353
|
if (this.pauseWakeState === "active")
|
|
2341
2354
|
return;
|
|
2342
2355
|
if (this.pauseWakeState === "pausing")
|
|
@@ -3332,6 +3345,8 @@ export class Daemon extends EventEmitter {
|
|
|
3332
3345
|
await this.waitForSpawnToSettle();
|
|
3333
3346
|
if (cancelled())
|
|
3334
3347
|
return false;
|
|
3348
|
+
if (this.refuseFatalStartupDelivery(status))
|
|
3349
|
+
return false;
|
|
3335
3350
|
let windowId = this.getWindowId();
|
|
3336
3351
|
const supportsQueuedInput = this.backend?.supportsQueuedInput?.() === true;
|
|
3337
3352
|
let handingOffToNativeQueue = false;
|
|
@@ -3373,9 +3388,29 @@ export class Daemon extends EventEmitter {
|
|
|
3373
3388
|
return this.paneWriteLock.run(async () => {
|
|
3374
3389
|
if (cancelled())
|
|
3375
3390
|
return false;
|
|
3391
|
+
// Re-checked here because the flag can be set during the waits above
|
|
3392
|
+
// (a spawn's dialog scan runs concurrently with a queued delivery).
|
|
3393
|
+
if (this.refuseFatalStartupDelivery(status))
|
|
3394
|
+
return false;
|
|
3376
3395
|
return this.writeMessageToPane(formatted, windowId, handingOffToNativeQueue, status);
|
|
3377
3396
|
});
|
|
3378
3397
|
}
|
|
3398
|
+
/**
|
|
3399
|
+
* While the CLI is parked on a fatal startup screen (see fatalStartupBlocked),
|
|
3400
|
+
* no pane write may happen: paste+Enter into the corrupt-config modal would
|
|
3401
|
+
* confirm "Exit and fix manually" and exit the CLI. The message is failed (❌)
|
|
3402
|
+
* rather than held — the accompanying config_error notification tells the user
|
|
3403
|
+
* what to fix, and holding would only build a queue that floods the pane the
|
|
3404
|
+
* moment the flag clears.
|
|
3405
|
+
*/
|
|
3406
|
+
refuseFatalStartupDelivery(status) {
|
|
3407
|
+
if (!this.fatalStartupBlocked)
|
|
3408
|
+
return false;
|
|
3409
|
+
this.logger.error("Delivery refused — CLI is parked on a fatal startup screen");
|
|
3410
|
+
if (status)
|
|
3411
|
+
this.emit("message_failed", status); // ❌
|
|
3412
|
+
return true;
|
|
3413
|
+
}
|
|
3379
3414
|
/**
|
|
3380
3415
|
* A raw `%output` silence check is authoritative for ordinary TUIs. It is not
|
|
3381
3416
|
* for a backend such as agy whose status-line hook periodically redraws an
|
|
@@ -4358,7 +4393,10 @@ export class Daemon extends EventEmitter {
|
|
|
4358
4393
|
if (!await this.tmux.isWindowAlive())
|
|
4359
4394
|
return false;
|
|
4360
4395
|
const ready = await this.dismissDialogsUntilReady(3);
|
|
4361
|
-
|
|
4396
|
+
// A fatal startup screen returns true (the spawn is over — respawning
|
|
4397
|
+
// would only re-show the same screen) but is NOT ready-for-delivery:
|
|
4398
|
+
// fatalStartupBlocked gates every pane write in deliverMessage.
|
|
4399
|
+
if (ready && !this.fatalStartupBlocked)
|
|
4362
4400
|
this.firstDeliveryDelay.recordReady();
|
|
4363
4401
|
return ready;
|
|
4364
4402
|
}
|
|
@@ -4381,6 +4419,26 @@ export class Daemon extends EventEmitter {
|
|
|
4381
4419
|
let matched = false;
|
|
4382
4420
|
for (const dialog of startupDialogs) {
|
|
4383
4421
|
if (dialog.pattern.test(pane)) {
|
|
4422
|
+
// A fatal startup screen cannot be dismissed by keypresses (e.g. a
|
|
4423
|
+
// corrupt claude.json modal offering only "exit" / "reset config").
|
|
4424
|
+
// It must be caught HERE and not fall through to the ready check:
|
|
4425
|
+
// the modal contains the `❯` selector the ready pattern matches, so
|
|
4426
|
+
// it would otherwise pass as ready and queued messages would be
|
|
4427
|
+
// typed into the modal. Report the error (pause stops delivery) and
|
|
4428
|
+
// stop the retry loop — like the sign-in screen case below, only a
|
|
4429
|
+
// human fixing the config ends this state.
|
|
4430
|
+
if (dialog.fatal) {
|
|
4431
|
+
// Block deliveries BEFORE the emit: the pty_error pause handler
|
|
4432
|
+
// is async, and a queued message would otherwise win the race
|
|
4433
|
+
// and be pasted into the modal.
|
|
4434
|
+
this.fatalStartupBlocked = true;
|
|
4435
|
+
if (!this.fatalStartupReported) {
|
|
4436
|
+
this.fatalStartupReported = true;
|
|
4437
|
+
this.logger.warn({ description: dialog.description }, "Fatal startup screen detected — reporting instead of dismissing");
|
|
4438
|
+
this.emit("pty_error", { name: this.name, ...dialog.fatal });
|
|
4439
|
+
}
|
|
4440
|
+
return true;
|
|
4441
|
+
}
|
|
4384
4442
|
this.logger.debug(`Dismissing startup dialog: ${dialog.description}`);
|
|
4385
4443
|
// Restart is exactly when inbound messages pile up, and nothing gates
|
|
4386
4444
|
// delivery on `spawning`. Take the pane lock for the key sequence so a
|
|
@@ -4413,8 +4471,13 @@ export class Daemon extends EventEmitter {
|
|
|
4413
4471
|
if (matched)
|
|
4414
4472
|
continue;
|
|
4415
4473
|
// CLI is ready (pattern defined by each backend)
|
|
4416
|
-
if (this.backend.getReadyPattern().test(pane))
|
|
4474
|
+
if (this.backend.getReadyPattern().test(pane)) {
|
|
4475
|
+
// A real ready prompt (with no fatal dialog on screen — those are
|
|
4476
|
+
// matched above, before this check) means the fatal screen is gone,
|
|
4477
|
+
// e.g. the user fixed the config and the instance respawned.
|
|
4478
|
+
this.fatalStartupBlocked = false;
|
|
4417
4479
|
return true;
|
|
4480
|
+
}
|
|
4418
4481
|
// A CLI parked at its own sign-in screen is an AUTH incident: no dialog
|
|
4419
4482
|
// key can dismiss it and no ready pattern will ever appear. Report it as
|
|
4420
4483
|
// an auth error (the lifecycle double-checks with the token-free probe)
|