@love-moon/tui-driver 0.2.2 → 0.2.4
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/driver/TuiDriver.d.ts +21 -0
- package/dist/driver/TuiDriver.d.ts.map +1 -1
- package/dist/driver/TuiDriver.js +219 -0
- package/dist/driver/TuiDriver.js.map +1 -1
- package/dist/driver/TuiProfile.d.ts +2 -0
- package/dist/driver/TuiProfile.d.ts.map +1 -1
- package/dist/driver/TuiProfile.js.map +1 -1
- package/dist/driver/index.d.ts +1 -1
- package/dist/driver/index.d.ts.map +1 -1
- package/dist/driver/index.js.map +1 -1
- package/dist/driver/profiles/claudeCode.profile.d.ts.map +1 -1
- package/dist/driver/profiles/claudeCode.profile.js +28 -4
- package/dist/driver/profiles/claudeCode.profile.js.map +1 -1
- package/dist/driver/profiles/codex.profile.d.ts.map +1 -1
- package/dist/driver/profiles/codex.profile.js +30 -3
- package/dist/driver/profiles/codex.profile.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/driver/TuiDriver.ts +252 -0
- package/src/driver/TuiProfile.ts +2 -0
- package/src/driver/index.ts +1 -1
- package/src/driver/profiles/claudeCode.profile.ts +28 -4
- package/src/driver/profiles/codex.profile.ts +30 -3
- package/src/index.ts +2 -0
- package/test-long-task.mjs +145 -0
|
@@ -23,6 +23,13 @@ export interface AskResult {
|
|
|
23
23
|
statusLine?: string;
|
|
24
24
|
statusDoneLine?: string;
|
|
25
25
|
}
|
|
26
|
+
export type HealthReason = "healthy" | "login_required" | "permission_required" | "error_state" | "not_ready" | "process_exited";
|
|
27
|
+
export interface HealthStatus {
|
|
28
|
+
healthy: boolean;
|
|
29
|
+
reason: HealthReason;
|
|
30
|
+
message?: string;
|
|
31
|
+
matchedPattern?: string;
|
|
32
|
+
}
|
|
26
33
|
export interface TuiScreenSignals {
|
|
27
34
|
hasPrompt: boolean;
|
|
28
35
|
promptLine?: string;
|
|
@@ -60,11 +67,25 @@ export declare class TuiDriver extends EventEmitter {
|
|
|
60
67
|
private restart;
|
|
61
68
|
private captureSnapshot;
|
|
62
69
|
snapshot(): ScreenSnapshot;
|
|
70
|
+
/**
|
|
71
|
+
* 健康检查:检测当前 TUI 状态是否正常
|
|
72
|
+
* 返回健康状态和失效原因
|
|
73
|
+
*/
|
|
74
|
+
healthCheck(snapshot?: ScreenSnapshot): HealthStatus;
|
|
75
|
+
/**
|
|
76
|
+
* 查找匹配的模式(用于诊断)
|
|
77
|
+
*/
|
|
78
|
+
private findMatchedPattern;
|
|
79
|
+
/**
|
|
80
|
+
* 尝试自动确认权限提示
|
|
81
|
+
*/
|
|
82
|
+
autoConfirmPermission(): Promise<boolean>;
|
|
63
83
|
getSignals(snapshot?: ScreenSnapshot): TuiScreenSignals;
|
|
64
84
|
sendKeys(keys: string[]): Promise<void>;
|
|
65
85
|
write(data: string): Promise<void>;
|
|
66
86
|
kill(): void;
|
|
67
87
|
private sleep;
|
|
88
|
+
private terminateSessionForLoginRequired;
|
|
68
89
|
private resolveTimeout;
|
|
69
90
|
private waitForScrollbackIdle;
|
|
70
91
|
private findLastMatch;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TuiDriver.d.ts","sourceRoot":"","sources":["../../src/driver/TuiDriver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAGtC,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAK3D,OAAO,EAAE,UAAU,EAAc,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAgB,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE3D,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,UAAU,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,cAAc,EAAE,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAC;IACjE,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,cAAc,EAAE,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAC;CAC5F;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,cAAc,CAAC;IAC/B,aAAa,EAAE,cAAc,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,eAAe,EAAE,OAAO,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,qBAAa,SAAU,SAAQ,YAAY;IACzC,OAAO,CAAC,GAAG,CAAa;IACxB,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,OAAO,CAAa;IAC5B,OAAO,CAAC,KAAK,CAAU;IACvB,OAAO,CAAC,UAAU,CAAC,CAAsD;IACzE,OAAO,CAAC,SAAS,CAAC,CAAiF;IACnG,OAAO,CAAC,QAAQ,CAAS;gBAEb,OAAO,EAAE,gBAAgB;IA6BrC,OAAO,CAAC,kBAAkB;IAyB1B,OAAO,CAAC,GAAG;IAMX,IAAI,KAAK,IAAI,QAAQ,CAEpB;IAED,IAAI,OAAO,IAAI,OAAO,CAErB;IAEK,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"TuiDriver.d.ts","sourceRoot":"","sources":["../../src/driver/TuiDriver.ts"],"names":[],"mappings":"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"}
|
package/dist/driver/TuiDriver.js
CHANGED
|
@@ -83,9 +83,17 @@ class TuiDriver extends events_1.EventEmitter {
|
|
|
83
83
|
const trustMatcher = this.profile.anchors.trust
|
|
84
84
|
? Matchers_js_1.Matchers.anyOf(this.profile.anchors.trust)
|
|
85
85
|
: null;
|
|
86
|
+
const loginMatcher = this.profile.anchors.login?.length
|
|
87
|
+
? Matchers_js_1.Matchers.anyOf(this.profile.anchors.login)
|
|
88
|
+
: null;
|
|
89
|
+
const permissionMatcher = this.profile.anchors.permission?.length
|
|
90
|
+
? Matchers_js_1.Matchers.anyOf(this.profile.anchors.permission)
|
|
91
|
+
: null;
|
|
86
92
|
const startTime = Date.now();
|
|
87
93
|
let readySince = null;
|
|
88
94
|
let lastTrustConfirmAt = 0;
|
|
95
|
+
let lastPermissionConfirmAt = 0;
|
|
96
|
+
let loginDetectedAt = null;
|
|
89
97
|
while (true) {
|
|
90
98
|
if (!this.running) {
|
|
91
99
|
throw new Error("Boot failed: TUI process exited before ready");
|
|
@@ -103,12 +111,50 @@ class TuiDriver extends events_1.EventEmitter {
|
|
|
103
111
|
else {
|
|
104
112
|
readySince = null;
|
|
105
113
|
}
|
|
114
|
+
// 检测登录提示 - 首次命中后使用粘性计时,避免被动画刷新导致反复重置
|
|
115
|
+
if (loginMatcher && loginMatcher(snapshot)) {
|
|
116
|
+
if (loginDetectedAt === null) {
|
|
117
|
+
loginDetectedAt = now;
|
|
118
|
+
this.log("Login prompt detected, waiting to confirm...");
|
|
119
|
+
}
|
|
120
|
+
else if (now - loginDetectedAt >= 3000) {
|
|
121
|
+
// 登录提示持续 3 秒,确认需要登录
|
|
122
|
+
const health = this.healthCheck(snapshot);
|
|
123
|
+
const error = new Error(`Boot failed: ${health.message || "Login required"}`);
|
|
124
|
+
error.reason = "login_required";
|
|
125
|
+
error.matchedPattern = health.matchedPattern;
|
|
126
|
+
this.terminateSessionForLoginRequired();
|
|
127
|
+
this.emit("login_required", health);
|
|
128
|
+
throw error;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
// 处理 trust 提示(已有逻辑)
|
|
106
132
|
if (trustMatcher && trustMatcher(snapshot) && now - lastTrustConfirmAt >= 1500) {
|
|
107
133
|
lastTrustConfirmAt = now;
|
|
108
134
|
this.log("Trust prompt detected, confirming...");
|
|
109
135
|
await this.pty.sendKeys(this.profile.keys.trustConfirm ?? ["ENTER"], 0);
|
|
110
136
|
}
|
|
137
|
+
// 处理 permission 提示(新增)- 排除 trust 提示
|
|
138
|
+
if (permissionMatcher && permissionMatcher(snapshot) &&
|
|
139
|
+
(!trustMatcher || !trustMatcher(snapshot)) &&
|
|
140
|
+
now - lastPermissionConfirmAt >= 2000) {
|
|
141
|
+
lastPermissionConfirmAt = now;
|
|
142
|
+
this.log("Permission prompt detected, attempting auto-confirm...");
|
|
143
|
+
await this.pty.sendKeys(this.profile.keys.trustConfirm ?? ["ENTER"], 0);
|
|
144
|
+
}
|
|
111
145
|
if (Number.isFinite(bootTimeout) && now - startTime >= bootTimeout) {
|
|
146
|
+
// 超时时进行健康检查,提供更详细的错误信息
|
|
147
|
+
const health = this.healthCheck(snapshot);
|
|
148
|
+
if (!health.healthy) {
|
|
149
|
+
const error = new Error(`Boot timeout: ${health.message || health.reason}`);
|
|
150
|
+
error.reason = health.reason;
|
|
151
|
+
error.matchedPattern = health.matchedPattern;
|
|
152
|
+
if (health.reason === "login_required") {
|
|
153
|
+
this.terminateSessionForLoginRequired();
|
|
154
|
+
this.emit("login_required", health);
|
|
155
|
+
}
|
|
156
|
+
throw error;
|
|
157
|
+
}
|
|
112
158
|
throw new Error("Boot timeout: TUI did not become ready");
|
|
113
159
|
}
|
|
114
160
|
await this.sleep(100);
|
|
@@ -139,6 +185,40 @@ class TuiDriver extends events_1.EventEmitter {
|
|
|
139
185
|
const startTime = Date.now();
|
|
140
186
|
try {
|
|
141
187
|
await this.ensureReady();
|
|
188
|
+
// 健康检查:在执行前检测异常状态
|
|
189
|
+
const health = this.healthCheck();
|
|
190
|
+
if (!health.healthy) {
|
|
191
|
+
this.log(`Health check failed: ${health.reason} - ${health.message}`);
|
|
192
|
+
// 尝试自动恢复
|
|
193
|
+
if (health.reason === "permission_required") {
|
|
194
|
+
const confirmed = await this.autoConfirmPermission();
|
|
195
|
+
if (!confirmed) {
|
|
196
|
+
const error = new Error(`Cannot proceed: ${health.message}`);
|
|
197
|
+
error.reason = health.reason;
|
|
198
|
+
error.matchedPattern = health.matchedPattern;
|
|
199
|
+
throw error;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
else if (health.reason === "login_required") {
|
|
203
|
+
const error = new Error(`Cannot proceed: ${health.message}`);
|
|
204
|
+
error.reason = health.reason;
|
|
205
|
+
error.matchedPattern = health.matchedPattern;
|
|
206
|
+
this.terminateSessionForLoginRequired();
|
|
207
|
+
this.emit("login_required", health);
|
|
208
|
+
throw error;
|
|
209
|
+
}
|
|
210
|
+
else if (health.reason === "error_state") {
|
|
211
|
+
// 尝试恢复
|
|
212
|
+
await this.recovery();
|
|
213
|
+
// 再次检查
|
|
214
|
+
const healthAfter = this.healthCheck();
|
|
215
|
+
if (!healthAfter.healthy) {
|
|
216
|
+
const error = new Error(`Cannot proceed: ${healthAfter.message}`);
|
|
217
|
+
error.reason = healthAfter.reason;
|
|
218
|
+
throw error;
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
}
|
|
142
222
|
this.stateMachine.transition("PREPARE_TURN");
|
|
143
223
|
await this.prepareTurn();
|
|
144
224
|
this.stateMachine.transition("TYPE_PROMPT");
|
|
@@ -266,6 +346,25 @@ class TuiDriver extends events_1.EventEmitter {
|
|
|
266
346
|
if (!replyOrHintResult.success) {
|
|
267
347
|
throw new Error("Stream end timeout: no reply detected");
|
|
268
348
|
}
|
|
349
|
+
// Check if we matched promptHint but not replyStart - this indicates potential empty response
|
|
350
|
+
const snapshot = this.screen.snapshot();
|
|
351
|
+
const hasReplyStart = replyStartMatcher(snapshot);
|
|
352
|
+
if (!hasReplyStart && promptHintMatcher) {
|
|
353
|
+
const hasPromptHint = promptHintMatcher(snapshot);
|
|
354
|
+
if (hasPromptHint) {
|
|
355
|
+
this.log(`waitStreamEnd: WARNING - promptHint matched but replyStart did not. Waiting for actual reply...`);
|
|
356
|
+
// Wait a bit longer for the actual reply to appear
|
|
357
|
+
const retryResult = await this.expect.until({
|
|
358
|
+
name: "STREAM_END_REPLY_RETRY",
|
|
359
|
+
match: replyStartMatcher,
|
|
360
|
+
stableMs: 200,
|
|
361
|
+
timeoutMs: 10000, // Give it 10 more seconds
|
|
362
|
+
});
|
|
363
|
+
if (!retryResult.success) {
|
|
364
|
+
this.log(`waitStreamEnd: No reply detected after retry. Response may be empty.`);
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
}
|
|
269
368
|
await this.waitForScrollbackIdle(idleMs, timeout);
|
|
270
369
|
if (statusMatcher) {
|
|
271
370
|
const statusClearResult = await this.expect.until({
|
|
@@ -317,6 +416,14 @@ class TuiDriver extends events_1.EventEmitter {
|
|
|
317
416
|
}
|
|
318
417
|
}
|
|
319
418
|
extractAnswer(before, after) {
|
|
419
|
+
// Debug: log the diff between before and after
|
|
420
|
+
if (this.debug) {
|
|
421
|
+
const { added, removed } = (0, Diff_js_1.computeLineDiff)(before.scrollbackText, after.scrollbackText);
|
|
422
|
+
this.log(`extractAnswer: DEBUG diff added=${added.length} lines, removed=${removed.length} lines`);
|
|
423
|
+
if (added.length > 0) {
|
|
424
|
+
this.log(`extractAnswer: DEBUG added lines:\n${added.slice(0, 20).map((l, i) => ` [+${i}] "${l}"`).join('\n')}`);
|
|
425
|
+
}
|
|
426
|
+
}
|
|
320
427
|
const extractor = new OutputExtractor_js_1.OutputExtractor(this.profile.extraction);
|
|
321
428
|
const primary = extractor.extract(before, after).text;
|
|
322
429
|
this.log(`extractAnswer: primary="${primary?.slice(0, 200) || '(empty)'}"`);
|
|
@@ -328,6 +435,12 @@ class TuiDriver extends events_1.EventEmitter {
|
|
|
328
435
|
const hasReplySignal = Boolean((signals.replyText && signals.replyText.trim()) ||
|
|
329
436
|
(Array.isArray(signals.replyBlocks) && signals.replyBlocks.length > 0));
|
|
330
437
|
if (!hasReplySignal) {
|
|
438
|
+
// Debug: log the scrollback content when no reply is found
|
|
439
|
+
if (this.debug) {
|
|
440
|
+
const lines = after.scrollbackText.split("\n");
|
|
441
|
+
this.log(`extractAnswer: WARNING - no reply signal found. Scrollback has ${lines.length} lines.`);
|
|
442
|
+
this.log(`extractAnswer: DEBUG scrollback tail (last 20 lines):\n${lines.slice(-20).map((l, i) => ` [${lines.length - 20 + i}] "${l}"`).join('\n')}`);
|
|
443
|
+
}
|
|
331
444
|
return "";
|
|
332
445
|
}
|
|
333
446
|
// Fallback: if includeLinePatterns misses the assistant block, retry with relaxed extraction.
|
|
@@ -382,6 +495,103 @@ class TuiDriver extends events_1.EventEmitter {
|
|
|
382
495
|
snapshot() {
|
|
383
496
|
return this.screen.snapshot();
|
|
384
497
|
}
|
|
498
|
+
/**
|
|
499
|
+
* 健康检查:检测当前 TUI 状态是否正常
|
|
500
|
+
* 返回健康状态和失效原因
|
|
501
|
+
*/
|
|
502
|
+
healthCheck(snapshot) {
|
|
503
|
+
const snap = snapshot ?? this.screen.snapshot();
|
|
504
|
+
// 检查进程是否退出
|
|
505
|
+
if (!this.running) {
|
|
506
|
+
return {
|
|
507
|
+
healthy: false,
|
|
508
|
+
reason: "process_exited",
|
|
509
|
+
message: "TUI process has exited",
|
|
510
|
+
};
|
|
511
|
+
}
|
|
512
|
+
// 检测登录状态
|
|
513
|
+
if (this.profile.anchors.login?.length) {
|
|
514
|
+
const loginMatcher = Matchers_js_1.Matchers.anyOf(this.profile.anchors.login);
|
|
515
|
+
if (loginMatcher(snap)) {
|
|
516
|
+
const matchedPattern = this.findMatchedPattern(snap, this.profile.anchors.login);
|
|
517
|
+
return {
|
|
518
|
+
healthy: false,
|
|
519
|
+
reason: "login_required",
|
|
520
|
+
message: "CLI requires authentication. Please run login command manually.",
|
|
521
|
+
matchedPattern,
|
|
522
|
+
};
|
|
523
|
+
}
|
|
524
|
+
}
|
|
525
|
+
// 检测权限提示(排除已知的 trust 提示,因为 trust 会自动处理)
|
|
526
|
+
if (this.profile.anchors.permission?.length) {
|
|
527
|
+
const permissionMatcher = Matchers_js_1.Matchers.anyOf(this.profile.anchors.permission);
|
|
528
|
+
const trustMatcher = this.profile.anchors.trust?.length
|
|
529
|
+
? Matchers_js_1.Matchers.anyOf(this.profile.anchors.trust)
|
|
530
|
+
: null;
|
|
531
|
+
// 只有当匹配 permission 但不匹配 trust 时才报告
|
|
532
|
+
if (permissionMatcher(snap) && (!trustMatcher || !trustMatcher(snap))) {
|
|
533
|
+
const matchedPattern = this.findMatchedPattern(snap, this.profile.anchors.permission);
|
|
534
|
+
return {
|
|
535
|
+
healthy: false,
|
|
536
|
+
reason: "permission_required",
|
|
537
|
+
message: "CLI requires permission confirmation",
|
|
538
|
+
matchedPattern,
|
|
539
|
+
};
|
|
540
|
+
}
|
|
541
|
+
}
|
|
542
|
+
// 检测错误状态
|
|
543
|
+
if (this.profile.anchors.error?.length) {
|
|
544
|
+
const errorMatcher = Matchers_js_1.Matchers.anyOf(this.profile.anchors.error);
|
|
545
|
+
if (errorMatcher(snap)) {
|
|
546
|
+
const matchedPattern = this.findMatchedPattern(snap, this.profile.anchors.error);
|
|
547
|
+
return {
|
|
548
|
+
healthy: false,
|
|
549
|
+
reason: "error_state",
|
|
550
|
+
message: "CLI is in error state",
|
|
551
|
+
matchedPattern,
|
|
552
|
+
};
|
|
553
|
+
}
|
|
554
|
+
}
|
|
555
|
+
return { healthy: true, reason: "healthy" };
|
|
556
|
+
}
|
|
557
|
+
/**
|
|
558
|
+
* 查找匹配的模式(用于诊断)
|
|
559
|
+
*/
|
|
560
|
+
findMatchedPattern(snapshot, patterns) {
|
|
561
|
+
const text = snapshot.scrollbackText + "\n" + snapshot.viewportText;
|
|
562
|
+
for (const pattern of patterns) {
|
|
563
|
+
const match = text.match(pattern);
|
|
564
|
+
if (match) {
|
|
565
|
+
return match[0];
|
|
566
|
+
}
|
|
567
|
+
}
|
|
568
|
+
return undefined;
|
|
569
|
+
}
|
|
570
|
+
/**
|
|
571
|
+
* 尝试自动确认权限提示
|
|
572
|
+
*/
|
|
573
|
+
async autoConfirmPermission() {
|
|
574
|
+
const snapshot = this.screen.snapshot();
|
|
575
|
+
const permissionMatcher = this.profile.anchors.permission?.length
|
|
576
|
+
? Matchers_js_1.Matchers.anyOf(this.profile.anchors.permission)
|
|
577
|
+
: null;
|
|
578
|
+
if (!permissionMatcher || !permissionMatcher(snapshot)) {
|
|
579
|
+
return false;
|
|
580
|
+
}
|
|
581
|
+
this.log("Permission prompt detected, attempting auto-confirm...");
|
|
582
|
+
// 使用 trustConfirm 按键序列,如果没有则使用 ENTER
|
|
583
|
+
const confirmKeys = this.profile.keys.trustConfirm ?? ["ENTER"];
|
|
584
|
+
await this.pty.sendKeys(confirmKeys, 100);
|
|
585
|
+
await this.sleep(500);
|
|
586
|
+
// 检查是否成功
|
|
587
|
+
const afterSnapshot = this.screen.snapshot();
|
|
588
|
+
if (!permissionMatcher(afterSnapshot)) {
|
|
589
|
+
this.log("Permission prompt cleared successfully");
|
|
590
|
+
return true;
|
|
591
|
+
}
|
|
592
|
+
this.log("Permission prompt still present after auto-confirm");
|
|
593
|
+
return false;
|
|
594
|
+
}
|
|
385
595
|
getSignals(snapshot = this.screen.snapshot()) {
|
|
386
596
|
const signals = this.profile.signals;
|
|
387
597
|
if (!signals) {
|
|
@@ -394,6 +604,11 @@ class TuiDriver extends events_1.EventEmitter {
|
|
|
394
604
|
// Log lines that match replyStart pattern
|
|
395
605
|
const replyStartLines = lines.filter(line => signals.replyStart?.some(pattern => pattern.test(line)));
|
|
396
606
|
this.log(`getSignals: scrollback lines=${lines.length}, replyStart matches: ${JSON.stringify(replyStartLines.slice(0, 3))}`);
|
|
607
|
+
// Debug: dump last 30 lines of scrollback when no reply found
|
|
608
|
+
if (replyStartLines.length === 0 && this.debug) {
|
|
609
|
+
const lastLines = lines.slice(-30);
|
|
610
|
+
this.log(`getSignals: DEBUG scrollback tail (last 30 lines):\n${lastLines.map((l, i) => ` [${lines.length - 30 + i}] "${l}"`).join('\n')}`);
|
|
611
|
+
}
|
|
397
612
|
const promptLine = this.findLastMatch(lines, signals.prompt);
|
|
398
613
|
const statusLine = this.findLastMatch(lines, signals.status);
|
|
399
614
|
const statusDoneLine = this.findLastMatch(lines, signals.statusDone);
|
|
@@ -423,6 +638,10 @@ class TuiDriver extends events_1.EventEmitter {
|
|
|
423
638
|
sleep(ms) {
|
|
424
639
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
425
640
|
}
|
|
641
|
+
terminateSessionForLoginRequired() {
|
|
642
|
+
this.pty.kill();
|
|
643
|
+
this.isBooted = false;
|
|
644
|
+
}
|
|
426
645
|
resolveTimeout(timeoutMs, defaultTimeoutMs) {
|
|
427
646
|
const value = timeoutMs ?? defaultTimeoutMs;
|
|
428
647
|
if (!Number.isFinite(value) || value <= 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TuiDriver.js","sourceRoot":"","sources":["../../src/driver/TuiDriver.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TuiDriver.js","sourceRoot":"","sources":["../../src/driver/TuiDriver.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TuiProfile.d.ts","sourceRoot":"","sources":["../../src/driver/TuiProfile.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GAAG,aAAa,GAAG,OAAO,CAAC;AAErD,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"TuiProfile.d.ts","sourceRoot":"","sources":["../../src/driver/TuiProfile.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GAAG,aAAa,GAAG,OAAO,CAAC;AAErD,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,OAAO;IACtB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,eAAe,GAAG,iBAAiB,CAAC;IAC1C,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,cAAc,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,OAAO,EAAE,UAAU,CAAC;IACpB,IAAI,EAAE,OAAO,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,OAAO,CAAC,EAAE,UAAU,CAAC;IACrB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,UAAU,EAAE,aAAa,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE;QACT,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;CACH;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG;IAC3D,IAAI,EAAE,cAAc,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,UAAU,CAAC;IACpB,IAAI,EAAE,OAAO,CAAC;IACd,UAAU,EAAE,aAAa,CAAC;CAC3B,GAAG,UAAU,CAQb"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TuiProfile.js","sourceRoot":"","sources":["../../src/driver/TuiProfile.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"TuiProfile.js","sourceRoot":"","sources":["../../src/driver/TuiProfile.ts"],"names":[],"mappings":";;AA2DA,sCAcC;AAdD,SAAgB,aAAa,CAAC,OAM7B;IACC,OAAO;QACL,IAAI,EAAE,EAAE;QACR,IAAI,EAAE,GAAG;QACT,IAAI,EAAE,EAAE;QACR,UAAU,EAAE,IAAI;QAChB,GAAG,OAAO;KACX,CAAC;AACJ,CAAC"}
|
package/dist/driver/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { TuiDriver, TuiDriverOptions, AskResult, TuiScreenSignals } from "./TuiDriver.js";
|
|
1
|
+
export { TuiDriver, TuiDriverOptions, AskResult, TuiScreenSignals, HealthStatus, HealthReason } from "./TuiDriver.js";
|
|
2
2
|
export { TuiProfile, TuiProfileName, TuiAnchors, TuiKeys, TuiExtraction, TuiSignals, createProfile } from "./TuiProfile.js";
|
|
3
3
|
export { StateMachine, TuiState, StateTransition } from "./StateMachine.js";
|
|
4
4
|
export { claudeCodeProfile, codexProfile } from "./profiles/index.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/driver/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/driver/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,SAAS,EAAE,gBAAgB,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACtH,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,UAAU,EAAE,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC5H,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC"}
|
package/dist/driver/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/driver/index.ts"],"names":[],"mappings":";;;AAAA,+
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/driver/index.ts"],"names":[],"mappings":";;;AAAA,+CAAsH;AAA7G,yGAAA,SAAS,OAAA;AAClB,iDAA4H;AAAvC,8GAAA,aAAa,OAAA;AAClG,qDAA4E;AAAnE,+GAAA,YAAY,OAAA;AACrB,gDAAsE;AAA7D,6GAAA,iBAAiB,OAAA;AAAE,wGAAA,YAAY,OAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claudeCode.profile.d.ts","sourceRoot":"","sources":["../../../src/driver/profiles/claudeCode.profile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAiB,MAAM,kBAAkB,CAAC;AAE7D,eAAO,MAAM,iBAAiB,EAAE,
|
|
1
|
+
{"version":3,"file":"claudeCode.profile.d.ts","sourceRoot":"","sources":["../../../src/driver/profiles/claudeCode.profile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAiB,MAAM,kBAAkB,CAAC;AAE7D,eAAO,MAAM,iBAAiB,EAAE,UAmH9B,CAAC;AAEH,eAAe,iBAAiB,CAAC"}
|
|
@@ -27,12 +27,36 @@ exports.claudeCodeProfile = (0, TuiProfile_js_1.createProfile)({
|
|
|
27
27
|
/Working/i,
|
|
28
28
|
],
|
|
29
29
|
error: [
|
|
30
|
-
|
|
31
|
-
|
|
30
|
+
// 只匹配 CLI 系统错误,不匹配代码中的文本
|
|
31
|
+
/^Error:/m, // 行首的 Error:
|
|
32
|
+
/^Failed to connect/im, // 连接失败
|
|
32
33
|
/Connection refused/i,
|
|
33
34
|
/Authentication failed/i,
|
|
34
|
-
/
|
|
35
|
-
/API.*error/i,
|
|
35
|
+
/API rate limit exceeded/i, // 更精确的 rate limit 匹配
|
|
36
|
+
/API.*error.*occurred/i,
|
|
37
|
+
/Request failed/i,
|
|
38
|
+
/Network error/i,
|
|
39
|
+
],
|
|
40
|
+
login: [
|
|
41
|
+
// 只匹配 CLI 登录提示,需要更精确
|
|
42
|
+
/^Please log in/m,
|
|
43
|
+
/^Authentication required/m,
|
|
44
|
+
/^Sign in to continue/m,
|
|
45
|
+
/^Not authenticated/m,
|
|
46
|
+
/^You need to log in/m,
|
|
47
|
+
/^Session expired/m,
|
|
48
|
+
/^Token expired/m,
|
|
49
|
+
/run.*claude login/i, // 提示运行 claude login
|
|
50
|
+
],
|
|
51
|
+
permission: [
|
|
52
|
+
// 只匹配 CLI 权限提示,不匹配代码中的文本
|
|
53
|
+
// 这些模式需要更精确,避免匹配到正常的代码输出
|
|
54
|
+
/^Do you want to allow/m,
|
|
55
|
+
/^Grant access to/m,
|
|
56
|
+
/^Approve this action/m,
|
|
57
|
+
/^Permission required:/m,
|
|
58
|
+
/Press Enter to allow/i,
|
|
59
|
+
/Press Y to confirm/i,
|
|
36
60
|
],
|
|
37
61
|
},
|
|
38
62
|
keys: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claudeCode.profile.js","sourceRoot":"","sources":["../../../src/driver/profiles/claudeCode.profile.ts"],"names":[],"mappings":";;;AAAA,oDAA6D;AAEhD,QAAA,iBAAiB,GAAe,IAAA,6BAAa,EAAC;IACzD,IAAI,EAAE,aAAa;IACnB,OAAO,EAAE,QAAQ;IACjB,IAAI,EAAE,EAAE;IACR,GAAG,EAAE;QACH,IAAI,EAAE,gBAAgB;QACtB,IAAI,EAAE,aAAa;QACnB,MAAM,EAAE,aAAa;KACtB;IAED,OAAO,EAAE;QACP,KAAK,EAAE;YACL,QAAQ,EAAqB,iCAAiC;YAC9D,gBAAgB,EAAa,yCAAyC;SACvE;QACD,KAAK,EAAE;YACL,uBAAuB;YACvB,qBAAqB;YACrB,2BAA2B;SAC5B;QACD,IAAI,EAAE;YACJ,GAAG,EAA0B,+BAA+B;YAC5D,WAAW;YACX,UAAU;SACX;QACD,KAAK,EAAE;YACL,
|
|
1
|
+
{"version":3,"file":"claudeCode.profile.js","sourceRoot":"","sources":["../../../src/driver/profiles/claudeCode.profile.ts"],"names":[],"mappings":";;;AAAA,oDAA6D;AAEhD,QAAA,iBAAiB,GAAe,IAAA,6BAAa,EAAC;IACzD,IAAI,EAAE,aAAa;IACnB,OAAO,EAAE,QAAQ;IACjB,IAAI,EAAE,EAAE;IACR,GAAG,EAAE;QACH,IAAI,EAAE,gBAAgB;QACtB,IAAI,EAAE,aAAa;QACnB,MAAM,EAAE,aAAa;KACtB;IAED,OAAO,EAAE;QACP,KAAK,EAAE;YACL,QAAQ,EAAqB,iCAAiC;YAC9D,gBAAgB,EAAa,yCAAyC;SACvE;QACD,KAAK,EAAE;YACL,uBAAuB;YACvB,qBAAqB;YACrB,2BAA2B;SAC5B;QACD,IAAI,EAAE;YACJ,GAAG,EAA0B,+BAA+B;YAC5D,WAAW;YACX,UAAU;SACX;QACD,KAAK,EAAE;YACL,yBAAyB;YACzB,UAAU,EAAmB,aAAa;YAC1C,sBAAsB,EAAO,OAAO;YACpC,qBAAqB;YACrB,wBAAwB;YACxB,0BAA0B,EAAG,qBAAqB;YAClD,uBAAuB;YACvB,iBAAiB;YACjB,gBAAgB;SACjB;QACD,KAAK,EAAE;YACL,qBAAqB;YACrB,iBAAiB;YACjB,2BAA2B;YAC3B,uBAAuB;YACvB,qBAAqB;YACrB,sBAAsB;YACtB,mBAAmB;YACnB,iBAAiB;YACjB,oBAAoB,EAAS,oBAAoB;SAClD;QACD,UAAU,EAAE;YACV,yBAAyB;YACzB,yBAAyB;YACzB,wBAAwB;YACxB,mBAAmB;YACnB,uBAAuB;YACvB,wBAAwB;YACxB,uBAAuB;YACvB,qBAAqB;SACtB;KACF;IAED,IAAI,EAAE;QACJ,MAAM,EAAE,CAAC,OAAO,CAAC;QACjB,OAAO,EAAE,CAAC,QAAQ,CAAC;QACnB,MAAM,EAAE,CAAC,QAAQ,CAAC;KACnB;IAED,UAAU,EAAE;QACV,IAAI,EAAE,iBAAiB;QACvB,mBAAmB,EAAE;YACnB,4CAA4C;SAC7C;QACD,gBAAgB,EAAE;YAChB,QAAQ;SACT;QACD,aAAa,EAAE;YACb,SAAS,EAAoB,mBAAmB;YAChD,SAAS,EAAoB,8BAA8B;YAC3D,eAAe,EAAc,eAAe;YAC5C,eAAe;YACf,oBAAoB,EAAS,YAAY;YACzC,QAAQ,EAAqB,mBAAmB;YAChD,OAAO,EAAsB,UAAU;YACvC,OAAO,EAAsB,aAAa;YAC1C,OAAO,EAAsB,mCAAmC;SACjE;QACD,SAAS,EAAE,IAAI;QACf,aAAa,EAAE,CAAC;KACjB;IAED,OAAO,EAAE;QACP,MAAM,EAAE,CAAC,QAAQ,CAAC;QAClB,UAAU,EAAE,CAAC,oBAAoB,CAAC;QAClC,UAAU,EAAE,CAAC,4CAA4C,CAAC;QAC1D,SAAS,EAAE,CAAC,QAAQ,CAAC;QACrB,MAAM,EAAE;YACN,wCAAwC;YACxC,mBAAmB,EAAG,qEAAqE;SAC5F;QACD,UAAU,EAAE;YACV,2BAA2B,EAAG,mDAAmD;SAClF;KACF;IAED,iBAAiB,EAAE,IAAI;IAEvB,IAAI,EAAE,GAAG;IACT,IAAI,EAAE,EAAE;IACR,UAAU,EAAE,IAAI;IAEhB,QAAQ,EAAE;QACR,IAAI,EAAE,CAAC;QACP,KAAK,EAAE,CAAC;QACR,WAAW,EAAE,CAAC;QACd,SAAS,EAAE,CAAC;QACZ,IAAI,EAAE,IAAI;KACX;CACF,CAAC,CAAC;AAEH,kBAAe,yBAAiB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex.profile.d.ts","sourceRoot":"","sources":["../../../src/driver/profiles/codex.profile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAiB,MAAM,kBAAkB,CAAC;AAE7D,eAAO,MAAM,YAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"codex.profile.d.ts","sourceRoot":"","sources":["../../../src/driver/profiles/codex.profile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAiB,MAAM,kBAAkB,CAAC;AAE7D,eAAO,MAAM,YAAY,EAAE,UA6GzB,CAAC;AAEH,eAAe,YAAY,CAAC"}
|
|
@@ -28,9 +28,36 @@ exports.codexProfile = (0, TuiProfile_js_1.createProfile)({
|
|
|
28
28
|
/\b(Working|Thinking)\s*\(\d+s\s*•\s*esc to interrupt\)/i,
|
|
29
29
|
],
|
|
30
30
|
error: [
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
/
|
|
31
|
+
// 只匹配 CLI 系统错误
|
|
32
|
+
/^Error:/m,
|
|
33
|
+
/^Failed to connect/im,
|
|
34
|
+
/API rate limit exceeded/i,
|
|
35
|
+
/API.*error.*occurred/i,
|
|
36
|
+
/Request failed/i,
|
|
37
|
+
/Network error/i,
|
|
38
|
+
],
|
|
39
|
+
login: [
|
|
40
|
+
// 只匹配 CLI 登录提示
|
|
41
|
+
/^Please log in/m,
|
|
42
|
+
/^Authentication required/m,
|
|
43
|
+
/^Not authenticated/m,
|
|
44
|
+
/^Session expired/m,
|
|
45
|
+
/run.*codex login/i,
|
|
46
|
+
/run.*openai login/i,
|
|
47
|
+
// Codex API key onboarding/login screen
|
|
48
|
+
/Paste or type your API key/i,
|
|
49
|
+
/stored locally in auth\.json/i,
|
|
50
|
+
/^╭API key/m,
|
|
51
|
+
/Press Enter to save/i,
|
|
52
|
+
],
|
|
53
|
+
permission: [
|
|
54
|
+
// 只匹配 CLI 权限提示
|
|
55
|
+
/^Do you want to allow/m,
|
|
56
|
+
/^Grant access to/m,
|
|
57
|
+
/^Approve this action/m,
|
|
58
|
+
/^Permission required:/m,
|
|
59
|
+
/Press Enter to allow/i,
|
|
60
|
+
/Press Y to confirm/i,
|
|
34
61
|
],
|
|
35
62
|
},
|
|
36
63
|
keys: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex.profile.js","sourceRoot":"","sources":["../../../src/driver/profiles/codex.profile.ts"],"names":[],"mappings":";;;AAAA,oDAA6D;AAEhD,QAAA,YAAY,GAAe,IAAA,6BAAa,EAAC;IACpD,IAAI,EAAE,OAAO;IACb,OAAO,EAAE,OAAO;IAChB,IAAI,EAAE,EAAE;IACR,GAAG,EAAE;QACH,IAAI,EAAE,gBAAgB;QACtB,IAAI,EAAE,aAAa;QACnB,MAAM,EAAE,aAAa;KACtB;IAED,OAAO,EAAE;QACP,KAAK,EAAE;YACL,2CAA2C;YAC3C,+GAA+G;SAChH;QACD,KAAK,EAAE;YACL,4BAA4B;YAC5B,8CAA8C;YAC9C,iEAAiE;YACjE,yCAAyC;YACzC,0BAA0B;SAC3B;QACD,IAAI,EAAE;YACJ,kCAAkC;YAClC,yDAAyD;SAC1D;QACD,KAAK,EAAE;YACL,
|
|
1
|
+
{"version":3,"file":"codex.profile.js","sourceRoot":"","sources":["../../../src/driver/profiles/codex.profile.ts"],"names":[],"mappings":";;;AAAA,oDAA6D;AAEhD,QAAA,YAAY,GAAe,IAAA,6BAAa,EAAC;IACpD,IAAI,EAAE,OAAO;IACb,OAAO,EAAE,OAAO;IAChB,IAAI,EAAE,EAAE;IACR,GAAG,EAAE;QACH,IAAI,EAAE,gBAAgB;QACtB,IAAI,EAAE,aAAa;QACnB,MAAM,EAAE,aAAa;KACtB;IAED,OAAO,EAAE;QACP,KAAK,EAAE;YACL,2CAA2C;YAC3C,+GAA+G;SAChH;QACD,KAAK,EAAE;YACL,4BAA4B;YAC5B,8CAA8C;YAC9C,iEAAiE;YACjE,yCAAyC;YACzC,0BAA0B;SAC3B;QACD,IAAI,EAAE;YACJ,kCAAkC;YAClC,yDAAyD;SAC1D;QACD,KAAK,EAAE;YACL,eAAe;YACf,UAAU;YACV,sBAAsB;YACtB,0BAA0B;YAC1B,uBAAuB;YACvB,iBAAiB;YACjB,gBAAgB;SACjB;QACD,KAAK,EAAE;YACL,eAAe;YACf,iBAAiB;YACjB,2BAA2B;YAC3B,qBAAqB;YACrB,mBAAmB;YACnB,mBAAmB;YACnB,oBAAoB;YACpB,wCAAwC;YACxC,6BAA6B;YAC7B,+BAA+B;YAC/B,YAAY;YACZ,sBAAsB;SACvB;QACD,UAAU,EAAE;YACV,eAAe;YACf,wBAAwB;YACxB,mBAAmB;YACnB,uBAAuB;YACvB,wBAAwB;YACxB,uBAAuB;YACvB,qBAAqB;SACtB;KACF;IAED,IAAI,EAAE;QACJ,MAAM,EAAE,CAAC,OAAO,CAAC;QACjB,OAAO,EAAE,EAAE;QACX,MAAM,EAAE,CAAC,QAAQ,CAAC;QAClB,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC;KAC9B;IAED,UAAU,EAAE;QACV,IAAI,EAAE,iBAAiB;QACvB,mBAAmB,EAAE;YACnB,iCAAiC;SAClC;QACD,gBAAgB,EAAE;YAChB,WAAW;SACZ;QACD,aAAa,EAAE;YACb,SAAS;YACT,YAAY;YACZ,YAAY;YACZ,aAAa;SACd;QACD,SAAS,EAAE,IAAI;QACf,aAAa,EAAE,CAAC;KACjB;IAED,OAAO,EAAE;QACP,MAAM,EAAE,CAAC,WAAW,CAAC;QACrB,UAAU,EAAE,CAAC,iCAAiC,CAAC;QAC/C,SAAS,EAAE,CAAC,WAAW,CAAC;QACxB,MAAM,EAAE;YACN,kCAAkC;YAClC,yDAAyD;SAC1D;QACD,UAAU,EAAE,CAAC,0BAA0B,EAAE,oBAAoB,CAAC;KAC/D;IAED,iBAAiB,EAAE,IAAI;IAEvB,IAAI,EAAE,GAAG;IACT,IAAI,EAAE,EAAE;IACR,UAAU,EAAE,IAAI;IAEhB,QAAQ,EAAE;QACR,IAAI,EAAE,CAAC;QACP,KAAK,EAAE,CAAC;QACR,WAAW,EAAE,CAAC;QACd,SAAS,EAAE,CAAC;QACZ,IAAI,EAAE,IAAI;KACX;CACF,CAAC,CAAC;AAEH,kBAAe,oBAAY,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ export { HeadlessScreen, HeadlessScreenOptions } from "./term/index.js";
|
|
|
3
3
|
export { ScreenSnapshot, ScreenSnapshotData } from "./term/index.js";
|
|
4
4
|
export { ExpectEngine, UntilOptions, IdleOptions, ExpectResult } from "./expect/index.js";
|
|
5
5
|
export { Matchers, MatcherFn } from "./expect/index.js";
|
|
6
|
-
export { TuiDriver, TuiDriverOptions, AskResult, TuiProfile, TuiProfileName, TuiAnchors, TuiKeys, TuiExtraction, createProfile, StateMachine, TuiState, StateTransition, claudeCodeProfile, codexProfile, TuiSignals, TuiScreenSignals, } from "./driver/index.js";
|
|
6
|
+
export { TuiDriver, TuiDriverOptions, AskResult, TuiProfile, TuiProfileName, TuiAnchors, TuiKeys, TuiExtraction, createProfile, StateMachine, TuiState, StateTransition, claudeCodeProfile, codexProfile, TuiSignals, TuiScreenSignals, HealthStatus, HealthReason, } from "./driver/index.js";
|
|
7
7
|
export { OutputExtractor, ExtractionResult, computeLineDiff, computeCharDiff, getAddedText, getRemovedText, DiffResult, } from "./extract/index.js";
|
|
8
8
|
import { TuiDriver, TuiDriverOptions } from "./driver/index.js";
|
|
9
9
|
import { TuiProfileName } from "./driver/index.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAG/D,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAGrE,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC1F,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAGxD,OAAO,EACL,SAAS,EACT,gBAAgB,EAChB,SAAS,EACT,UAAU,EACV,cAAc,EACd,UAAU,EACV,OAAO,EACP,aAAa,EACb,aAAa,EACb,YAAY,EACZ,QAAQ,EACR,eAAe,EACf,iBAAiB,EACjB,YAAY,EACZ,UAAU,EACV,gBAAgB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAG/D,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAGrE,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC1F,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAGxD,OAAO,EACL,SAAS,EACT,gBAAgB,EAChB,SAAS,EACT,UAAU,EACV,cAAc,EACd,UAAU,EACV,OAAO,EACP,aAAa,EACb,aAAa,EACb,YAAY,EACZ,QAAQ,EACR,eAAe,EACf,iBAAiB,EACjB,YAAY,EACZ,UAAU,EACV,gBAAgB,EAChB,YAAY,EACZ,YAAY,GACb,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,YAAY,EACZ,cAAc,EACd,UAAU,GACX,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAEhE,OAAO,EAAE,cAAc,EAAc,MAAM,mBAAmB,CAAC;AAE/D,wBAAgB,YAAY,CAC1B,WAAW,EAAE,cAAc,EAC3B,OAAO,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC,GACnD,SAAS,CAgBX"}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAiDA,oCAmBC;AApED,cAAc;AACd,2CAA+D;AAAtD,sGAAA,UAAU,OAAA;AAEnB,oBAAoB;AACpB,4CAAwE;AAA/D,0GAAA,cAAc,OAAA;AACvB,4CAAqE;AAA5D,0GAAA,cAAc,OAAA;AAEvB,gBAAgB;AAChB,8CAA0F;AAAjF,wGAAA,YAAY,OAAA;AACrB,8CAAwD;AAA/C,oGAAA,QAAQ,OAAA;AAEjB,SAAS;AACT,8CAmB2B;AAlBzB,qGAAA,SAAS,OAAA;AAQT,yGAAA,aAAa,OAAA;AACb,wGAAA,YAAY,OAAA;AAGZ,6GAAA,iBAAiB,OAAA;AACjB,wGAAA,YAAY,OAAA;AAOd,UAAU;AACV,+CAQ4B;AAP1B,2GAAA,eAAe,OAAA;AAEf,2GAAA,eAAe,OAAA;AACf,2GAAA,eAAe,OAAA;AACf,wGAAA,YAAY,OAAA;AACZ,0GAAA,cAAc,OAAA;AAIhB,+BAA+B;AAC/B,gDAAgE;AAChE,gDAAoE;AAGpE,SAAgB,YAAY,CAC1B,WAA2B,EAC3B,OAAoD;IAEpD,MAAM,WAAW,GAAG,WAAW,KAAK,aAAa,CAAC,CAAC,CAAC,4BAAiB,CAAC,CAAC,CAAC,uBAAY,CAAC;IAErF,6CAA6C;IAC7C,MAAM,OAAO,GAAe;QAC1B,GAAG,WAAW;QACd,GAAG,EAAE;YACH,GAAG,OAAO,CAAC,GAA6B;YACxC,GAAG,WAAW,CAAC,GAAG;SACnB;KACF,CAAC;IAEF,OAAO,IAAI,oBAAS,CAAC;QACnB,OAAO;QACP,GAAG,OAAO;KACX,CAAC,CAAC;AACL,CAAC"}
|
package/package.json
CHANGED
package/src/driver/TuiDriver.ts
CHANGED
|
@@ -32,6 +32,21 @@ export interface AskResult {
|
|
|
32
32
|
statusDoneLine?: string;
|
|
33
33
|
}
|
|
34
34
|
|
|
35
|
+
export type HealthReason =
|
|
36
|
+
| "healthy"
|
|
37
|
+
| "login_required"
|
|
38
|
+
| "permission_required"
|
|
39
|
+
| "error_state"
|
|
40
|
+
| "not_ready"
|
|
41
|
+
| "process_exited";
|
|
42
|
+
|
|
43
|
+
export interface HealthStatus {
|
|
44
|
+
healthy: boolean;
|
|
45
|
+
reason: HealthReason;
|
|
46
|
+
message?: string;
|
|
47
|
+
matchedPattern?: string;
|
|
48
|
+
}
|
|
49
|
+
|
|
35
50
|
export interface TuiScreenSignals {
|
|
36
51
|
hasPrompt: boolean;
|
|
37
52
|
promptLine?: string;
|
|
@@ -134,9 +149,18 @@ export class TuiDriver extends EventEmitter {
|
|
|
134
149
|
const trustMatcher = this.profile.anchors.trust
|
|
135
150
|
? Matchers.anyOf(this.profile.anchors.trust)
|
|
136
151
|
: null;
|
|
152
|
+
const loginMatcher = this.profile.anchors.login?.length
|
|
153
|
+
? Matchers.anyOf(this.profile.anchors.login)
|
|
154
|
+
: null;
|
|
155
|
+
const permissionMatcher = this.profile.anchors.permission?.length
|
|
156
|
+
? Matchers.anyOf(this.profile.anchors.permission)
|
|
157
|
+
: null;
|
|
158
|
+
|
|
137
159
|
const startTime = Date.now();
|
|
138
160
|
let readySince: number | null = null;
|
|
139
161
|
let lastTrustConfirmAt = 0;
|
|
162
|
+
let lastPermissionConfirmAt = 0;
|
|
163
|
+
let loginDetectedAt: number | null = null;
|
|
140
164
|
|
|
141
165
|
while (true) {
|
|
142
166
|
if (!this.running) {
|
|
@@ -156,13 +180,52 @@ export class TuiDriver extends EventEmitter {
|
|
|
156
180
|
readySince = null;
|
|
157
181
|
}
|
|
158
182
|
|
|
183
|
+
// 检测登录提示 - 首次命中后使用粘性计时,避免被动画刷新导致反复重置
|
|
184
|
+
if (loginMatcher && loginMatcher(snapshot)) {
|
|
185
|
+
if (loginDetectedAt === null) {
|
|
186
|
+
loginDetectedAt = now;
|
|
187
|
+
this.log("Login prompt detected, waiting to confirm...");
|
|
188
|
+
} else if (now - loginDetectedAt >= 3000) {
|
|
189
|
+
// 登录提示持续 3 秒,确认需要登录
|
|
190
|
+
const health = this.healthCheck(snapshot);
|
|
191
|
+
const error = new Error(`Boot failed: ${health.message || "Login required"}`);
|
|
192
|
+
(error as any).reason = "login_required";
|
|
193
|
+
(error as any).matchedPattern = health.matchedPattern;
|
|
194
|
+
this.terminateSessionForLoginRequired();
|
|
195
|
+
this.emit("login_required", health);
|
|
196
|
+
throw error;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
// 处理 trust 提示(已有逻辑)
|
|
159
201
|
if (trustMatcher && trustMatcher(snapshot) && now - lastTrustConfirmAt >= 1500) {
|
|
160
202
|
lastTrustConfirmAt = now;
|
|
161
203
|
this.log("Trust prompt detected, confirming...");
|
|
162
204
|
await this.pty.sendKeys(this.profile.keys.trustConfirm ?? ["ENTER"], 0);
|
|
163
205
|
}
|
|
164
206
|
|
|
207
|
+
// 处理 permission 提示(新增)- 排除 trust 提示
|
|
208
|
+
if (permissionMatcher && permissionMatcher(snapshot) &&
|
|
209
|
+
(!trustMatcher || !trustMatcher(snapshot)) &&
|
|
210
|
+
now - lastPermissionConfirmAt >= 2000) {
|
|
211
|
+
lastPermissionConfirmAt = now;
|
|
212
|
+
this.log("Permission prompt detected, attempting auto-confirm...");
|
|
213
|
+
await this.pty.sendKeys(this.profile.keys.trustConfirm ?? ["ENTER"], 0);
|
|
214
|
+
}
|
|
215
|
+
|
|
165
216
|
if (Number.isFinite(bootTimeout) && now - startTime >= bootTimeout) {
|
|
217
|
+
// 超时时进行健康检查,提供更详细的错误信息
|
|
218
|
+
const health = this.healthCheck(snapshot);
|
|
219
|
+
if (!health.healthy) {
|
|
220
|
+
const error = new Error(`Boot timeout: ${health.message || health.reason}`);
|
|
221
|
+
(error as any).reason = health.reason;
|
|
222
|
+
(error as any).matchedPattern = health.matchedPattern;
|
|
223
|
+
if (health.reason === "login_required") {
|
|
224
|
+
this.terminateSessionForLoginRequired();
|
|
225
|
+
this.emit("login_required", health);
|
|
226
|
+
}
|
|
227
|
+
throw error;
|
|
228
|
+
}
|
|
166
229
|
throw new Error("Boot timeout: TUI did not become ready");
|
|
167
230
|
}
|
|
168
231
|
|
|
@@ -202,6 +265,40 @@ export class TuiDriver extends EventEmitter {
|
|
|
202
265
|
try {
|
|
203
266
|
await this.ensureReady();
|
|
204
267
|
|
|
268
|
+
// 健康检查:在执行前检测异常状态
|
|
269
|
+
const health = this.healthCheck();
|
|
270
|
+
if (!health.healthy) {
|
|
271
|
+
this.log(`Health check failed: ${health.reason} - ${health.message}`);
|
|
272
|
+
|
|
273
|
+
// 尝试自动恢复
|
|
274
|
+
if (health.reason === "permission_required") {
|
|
275
|
+
const confirmed = await this.autoConfirmPermission();
|
|
276
|
+
if (!confirmed) {
|
|
277
|
+
const error = new Error(`Cannot proceed: ${health.message}`);
|
|
278
|
+
(error as any).reason = health.reason;
|
|
279
|
+
(error as any).matchedPattern = health.matchedPattern;
|
|
280
|
+
throw error;
|
|
281
|
+
}
|
|
282
|
+
} else if (health.reason === "login_required") {
|
|
283
|
+
const error = new Error(`Cannot proceed: ${health.message}`);
|
|
284
|
+
(error as any).reason = health.reason;
|
|
285
|
+
(error as any).matchedPattern = health.matchedPattern;
|
|
286
|
+
this.terminateSessionForLoginRequired();
|
|
287
|
+
this.emit("login_required", health);
|
|
288
|
+
throw error;
|
|
289
|
+
} else if (health.reason === "error_state") {
|
|
290
|
+
// 尝试恢复
|
|
291
|
+
await this.recovery();
|
|
292
|
+
// 再次检查
|
|
293
|
+
const healthAfter = this.healthCheck();
|
|
294
|
+
if (!healthAfter.healthy) {
|
|
295
|
+
const error = new Error(`Cannot proceed: ${healthAfter.message}`);
|
|
296
|
+
(error as any).reason = healthAfter.reason;
|
|
297
|
+
throw error;
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
|
|
205
302
|
this.stateMachine.transition("PREPARE_TURN");
|
|
206
303
|
await this.prepareTurn();
|
|
207
304
|
|
|
@@ -347,6 +444,26 @@ export class TuiDriver extends EventEmitter {
|
|
|
347
444
|
throw new Error("Stream end timeout: no reply detected");
|
|
348
445
|
}
|
|
349
446
|
|
|
447
|
+
// Check if we matched promptHint but not replyStart - this indicates potential empty response
|
|
448
|
+
const snapshot = this.screen.snapshot();
|
|
449
|
+
const hasReplyStart = replyStartMatcher(snapshot);
|
|
450
|
+
if (!hasReplyStart && promptHintMatcher) {
|
|
451
|
+
const hasPromptHint = promptHintMatcher(snapshot);
|
|
452
|
+
if (hasPromptHint) {
|
|
453
|
+
this.log(`waitStreamEnd: WARNING - promptHint matched but replyStart did not. Waiting for actual reply...`);
|
|
454
|
+
// Wait a bit longer for the actual reply to appear
|
|
455
|
+
const retryResult = await this.expect.until({
|
|
456
|
+
name: "STREAM_END_REPLY_RETRY",
|
|
457
|
+
match: replyStartMatcher,
|
|
458
|
+
stableMs: 200,
|
|
459
|
+
timeoutMs: 10000, // Give it 10 more seconds
|
|
460
|
+
});
|
|
461
|
+
if (!retryResult.success) {
|
|
462
|
+
this.log(`waitStreamEnd: No reply detected after retry. Response may be empty.`);
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
}
|
|
466
|
+
|
|
350
467
|
await this.waitForScrollbackIdle(idleMs, timeout);
|
|
351
468
|
|
|
352
469
|
if (statusMatcher) {
|
|
@@ -399,6 +516,14 @@ export class TuiDriver extends EventEmitter {
|
|
|
399
516
|
}
|
|
400
517
|
|
|
401
518
|
private extractAnswer(before: ScreenSnapshot, after: ScreenSnapshot): string {
|
|
519
|
+
// Debug: log the diff between before and after
|
|
520
|
+
if (this.debug) {
|
|
521
|
+
const { added, removed } = computeLineDiff(before.scrollbackText, after.scrollbackText);
|
|
522
|
+
this.log(`extractAnswer: DEBUG diff added=${added.length} lines, removed=${removed.length} lines`);
|
|
523
|
+
if (added.length > 0) {
|
|
524
|
+
this.log(`extractAnswer: DEBUG added lines:\n${added.slice(0, 20).map((l, i) => ` [+${i}] "${l}"`).join('\n')}`);
|
|
525
|
+
}
|
|
526
|
+
}
|
|
402
527
|
const extractor = new OutputExtractor(this.profile.extraction);
|
|
403
528
|
const primary = extractor.extract(before, after).text;
|
|
404
529
|
this.log(`extractAnswer: primary="${primary?.slice(0, 200) || '(empty)'}"`);
|
|
@@ -413,6 +538,12 @@ export class TuiDriver extends EventEmitter {
|
|
|
413
538
|
(Array.isArray(signals.replyBlocks) && signals.replyBlocks.length > 0)
|
|
414
539
|
);
|
|
415
540
|
if (!hasReplySignal) {
|
|
541
|
+
// Debug: log the scrollback content when no reply is found
|
|
542
|
+
if (this.debug) {
|
|
543
|
+
const lines = after.scrollbackText.split("\n");
|
|
544
|
+
this.log(`extractAnswer: WARNING - no reply signal found. Scrollback has ${lines.length} lines.`);
|
|
545
|
+
this.log(`extractAnswer: DEBUG scrollback tail (last 20 lines):\n${lines.slice(-20).map((l, i) => ` [${lines.length - 20 + i}] "${l}"`).join('\n')}`);
|
|
546
|
+
}
|
|
416
547
|
return "";
|
|
417
548
|
}
|
|
418
549
|
|
|
@@ -477,6 +608,117 @@ export class TuiDriver extends EventEmitter {
|
|
|
477
608
|
return this.screen.snapshot();
|
|
478
609
|
}
|
|
479
610
|
|
|
611
|
+
/**
|
|
612
|
+
* 健康检查:检测当前 TUI 状态是否正常
|
|
613
|
+
* 返回健康状态和失效原因
|
|
614
|
+
*/
|
|
615
|
+
healthCheck(snapshot?: ScreenSnapshot): HealthStatus {
|
|
616
|
+
const snap = snapshot ?? this.screen.snapshot();
|
|
617
|
+
|
|
618
|
+
// 检查进程是否退出
|
|
619
|
+
if (!this.running) {
|
|
620
|
+
return {
|
|
621
|
+
healthy: false,
|
|
622
|
+
reason: "process_exited",
|
|
623
|
+
message: "TUI process has exited",
|
|
624
|
+
};
|
|
625
|
+
}
|
|
626
|
+
|
|
627
|
+
// 检测登录状态
|
|
628
|
+
if (this.profile.anchors.login?.length) {
|
|
629
|
+
const loginMatcher = Matchers.anyOf(this.profile.anchors.login);
|
|
630
|
+
if (loginMatcher(snap)) {
|
|
631
|
+
const matchedPattern = this.findMatchedPattern(snap, this.profile.anchors.login);
|
|
632
|
+
return {
|
|
633
|
+
healthy: false,
|
|
634
|
+
reason: "login_required",
|
|
635
|
+
message: "CLI requires authentication. Please run login command manually.",
|
|
636
|
+
matchedPattern,
|
|
637
|
+
};
|
|
638
|
+
}
|
|
639
|
+
}
|
|
640
|
+
|
|
641
|
+
// 检测权限提示(排除已知的 trust 提示,因为 trust 会自动处理)
|
|
642
|
+
if (this.profile.anchors.permission?.length) {
|
|
643
|
+
const permissionMatcher = Matchers.anyOf(this.profile.anchors.permission);
|
|
644
|
+
const trustMatcher = this.profile.anchors.trust?.length
|
|
645
|
+
? Matchers.anyOf(this.profile.anchors.trust)
|
|
646
|
+
: null;
|
|
647
|
+
|
|
648
|
+
// 只有当匹配 permission 但不匹配 trust 时才报告
|
|
649
|
+
if (permissionMatcher(snap) && (!trustMatcher || !trustMatcher(snap))) {
|
|
650
|
+
const matchedPattern = this.findMatchedPattern(snap, this.profile.anchors.permission);
|
|
651
|
+
return {
|
|
652
|
+
healthy: false,
|
|
653
|
+
reason: "permission_required",
|
|
654
|
+
message: "CLI requires permission confirmation",
|
|
655
|
+
matchedPattern,
|
|
656
|
+
};
|
|
657
|
+
}
|
|
658
|
+
}
|
|
659
|
+
|
|
660
|
+
// 检测错误状态
|
|
661
|
+
if (this.profile.anchors.error?.length) {
|
|
662
|
+
const errorMatcher = Matchers.anyOf(this.profile.anchors.error);
|
|
663
|
+
if (errorMatcher(snap)) {
|
|
664
|
+
const matchedPattern = this.findMatchedPattern(snap, this.profile.anchors.error);
|
|
665
|
+
return {
|
|
666
|
+
healthy: false,
|
|
667
|
+
reason: "error_state",
|
|
668
|
+
message: "CLI is in error state",
|
|
669
|
+
matchedPattern,
|
|
670
|
+
};
|
|
671
|
+
}
|
|
672
|
+
}
|
|
673
|
+
|
|
674
|
+
return { healthy: true, reason: "healthy" };
|
|
675
|
+
}
|
|
676
|
+
|
|
677
|
+
/**
|
|
678
|
+
* 查找匹配的模式(用于诊断)
|
|
679
|
+
*/
|
|
680
|
+
private findMatchedPattern(snapshot: ScreenSnapshot, patterns: RegExp[]): string | undefined {
|
|
681
|
+
const text = snapshot.scrollbackText + "\n" + snapshot.viewportText;
|
|
682
|
+
for (const pattern of patterns) {
|
|
683
|
+
const match = text.match(pattern);
|
|
684
|
+
if (match) {
|
|
685
|
+
return match[0];
|
|
686
|
+
}
|
|
687
|
+
}
|
|
688
|
+
return undefined;
|
|
689
|
+
}
|
|
690
|
+
|
|
691
|
+
/**
|
|
692
|
+
* 尝试自动确认权限提示
|
|
693
|
+
*/
|
|
694
|
+
async autoConfirmPermission(): Promise<boolean> {
|
|
695
|
+
const snapshot = this.screen.snapshot();
|
|
696
|
+
const permissionMatcher = this.profile.anchors.permission?.length
|
|
697
|
+
? Matchers.anyOf(this.profile.anchors.permission)
|
|
698
|
+
: null;
|
|
699
|
+
|
|
700
|
+
if (!permissionMatcher || !permissionMatcher(snapshot)) {
|
|
701
|
+
return false;
|
|
702
|
+
}
|
|
703
|
+
|
|
704
|
+
this.log("Permission prompt detected, attempting auto-confirm...");
|
|
705
|
+
|
|
706
|
+
// 使用 trustConfirm 按键序列,如果没有则使用 ENTER
|
|
707
|
+
const confirmKeys = this.profile.keys.trustConfirm ?? ["ENTER"];
|
|
708
|
+
await this.pty.sendKeys(confirmKeys, 100);
|
|
709
|
+
await this.sleep(500);
|
|
710
|
+
|
|
711
|
+
// 检查是否成功
|
|
712
|
+
const afterSnapshot = this.screen.snapshot();
|
|
713
|
+
if (!permissionMatcher(afterSnapshot)) {
|
|
714
|
+
this.log("Permission prompt cleared successfully");
|
|
715
|
+
return true;
|
|
716
|
+
}
|
|
717
|
+
|
|
718
|
+
this.log("Permission prompt still present after auto-confirm");
|
|
719
|
+
return false;
|
|
720
|
+
}
|
|
721
|
+
|
|
480
722
|
getSignals(snapshot: ScreenSnapshot = this.screen.snapshot()): TuiScreenSignals {
|
|
481
723
|
const signals = this.profile.signals;
|
|
482
724
|
if (!signals) {
|
|
@@ -492,6 +734,11 @@ export class TuiDriver extends EventEmitter {
|
|
|
492
734
|
signals.replyStart?.some(pattern => pattern.test(line))
|
|
493
735
|
);
|
|
494
736
|
this.log(`getSignals: scrollback lines=${lines.length}, replyStart matches: ${JSON.stringify(replyStartLines.slice(0, 3))}`);
|
|
737
|
+
// Debug: dump last 30 lines of scrollback when no reply found
|
|
738
|
+
if (replyStartLines.length === 0 && this.debug) {
|
|
739
|
+
const lastLines = lines.slice(-30);
|
|
740
|
+
this.log(`getSignals: DEBUG scrollback tail (last 30 lines):\n${lastLines.map((l, i) => ` [${lines.length - 30 + i}] "${l}"`).join('\n')}`);
|
|
741
|
+
}
|
|
495
742
|
const promptLine = this.findLastMatch(lines, signals.prompt);
|
|
496
743
|
const statusLine = this.findLastMatch(lines, signals.status);
|
|
497
744
|
const statusDoneLine = this.findLastMatch(lines, signals.statusDone);
|
|
@@ -527,6 +774,11 @@ export class TuiDriver extends EventEmitter {
|
|
|
527
774
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
528
775
|
}
|
|
529
776
|
|
|
777
|
+
private terminateSessionForLoginRequired(): void {
|
|
778
|
+
this.pty.kill();
|
|
779
|
+
this.isBooted = false;
|
|
780
|
+
}
|
|
781
|
+
|
|
530
782
|
private resolveTimeout(timeoutMs: number | undefined, defaultTimeoutMs: number): number {
|
|
531
783
|
const value = timeoutMs ?? defaultTimeoutMs;
|
|
532
784
|
if (!Number.isFinite(value) || value <= 0) {
|
package/src/driver/TuiProfile.ts
CHANGED
package/src/driver/index.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { TuiDriver, TuiDriverOptions, AskResult, TuiScreenSignals } from "./TuiDriver.js";
|
|
1
|
+
export { TuiDriver, TuiDriverOptions, AskResult, TuiScreenSignals, HealthStatus, HealthReason } from "./TuiDriver.js";
|
|
2
2
|
export { TuiProfile, TuiProfileName, TuiAnchors, TuiKeys, TuiExtraction, TuiSignals, createProfile } from "./TuiProfile.js";
|
|
3
3
|
export { StateMachine, TuiState, StateTransition } from "./StateMachine.js";
|
|
4
4
|
export { claudeCodeProfile, codexProfile } from "./profiles/index.js";
|
|
@@ -26,12 +26,36 @@ export const claudeCodeProfile: TuiProfile = createProfile({
|
|
|
26
26
|
/Working/i,
|
|
27
27
|
],
|
|
28
28
|
error: [
|
|
29
|
-
|
|
30
|
-
|
|
29
|
+
// 只匹配 CLI 系统错误,不匹配代码中的文本
|
|
30
|
+
/^Error:/m, // 行首的 Error:
|
|
31
|
+
/^Failed to connect/im, // 连接失败
|
|
31
32
|
/Connection refused/i,
|
|
32
33
|
/Authentication failed/i,
|
|
33
|
-
/
|
|
34
|
-
/API.*error/i,
|
|
34
|
+
/API rate limit exceeded/i, // 更精确的 rate limit 匹配
|
|
35
|
+
/API.*error.*occurred/i,
|
|
36
|
+
/Request failed/i,
|
|
37
|
+
/Network error/i,
|
|
38
|
+
],
|
|
39
|
+
login: [
|
|
40
|
+
// 只匹配 CLI 登录提示,需要更精确
|
|
41
|
+
/^Please log in/m,
|
|
42
|
+
/^Authentication required/m,
|
|
43
|
+
/^Sign in to continue/m,
|
|
44
|
+
/^Not authenticated/m,
|
|
45
|
+
/^You need to log in/m,
|
|
46
|
+
/^Session expired/m,
|
|
47
|
+
/^Token expired/m,
|
|
48
|
+
/run.*claude login/i, // 提示运行 claude login
|
|
49
|
+
],
|
|
50
|
+
permission: [
|
|
51
|
+
// 只匹配 CLI 权限提示,不匹配代码中的文本
|
|
52
|
+
// 这些模式需要更精确,避免匹配到正常的代码输出
|
|
53
|
+
/^Do you want to allow/m,
|
|
54
|
+
/^Grant access to/m,
|
|
55
|
+
/^Approve this action/m,
|
|
56
|
+
/^Permission required:/m,
|
|
57
|
+
/Press Enter to allow/i,
|
|
58
|
+
/Press Y to confirm/i,
|
|
35
59
|
],
|
|
36
60
|
},
|
|
37
61
|
|
|
@@ -27,9 +27,36 @@ export const codexProfile: TuiProfile = createProfile({
|
|
|
27
27
|
/\b(Working|Thinking)\s*\(\d+s\s*•\s*esc to interrupt\)/i,
|
|
28
28
|
],
|
|
29
29
|
error: [
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
/
|
|
30
|
+
// 只匹配 CLI 系统错误
|
|
31
|
+
/^Error:/m,
|
|
32
|
+
/^Failed to connect/im,
|
|
33
|
+
/API rate limit exceeded/i,
|
|
34
|
+
/API.*error.*occurred/i,
|
|
35
|
+
/Request failed/i,
|
|
36
|
+
/Network error/i,
|
|
37
|
+
],
|
|
38
|
+
login: [
|
|
39
|
+
// 只匹配 CLI 登录提示
|
|
40
|
+
/^Please log in/m,
|
|
41
|
+
/^Authentication required/m,
|
|
42
|
+
/^Not authenticated/m,
|
|
43
|
+
/^Session expired/m,
|
|
44
|
+
/run.*codex login/i,
|
|
45
|
+
/run.*openai login/i,
|
|
46
|
+
// Codex API key onboarding/login screen
|
|
47
|
+
/Paste or type your API key/i,
|
|
48
|
+
/stored locally in auth\.json/i,
|
|
49
|
+
/^╭API key/m,
|
|
50
|
+
/Press Enter to save/i,
|
|
51
|
+
],
|
|
52
|
+
permission: [
|
|
53
|
+
// 只匹配 CLI 权限提示
|
|
54
|
+
/^Do you want to allow/m,
|
|
55
|
+
/^Grant access to/m,
|
|
56
|
+
/^Approve this action/m,
|
|
57
|
+
/^Permission required:/m,
|
|
58
|
+
/Press Enter to allow/i,
|
|
59
|
+
/Press Y to confirm/i,
|
|
33
60
|
],
|
|
34
61
|
},
|
|
35
62
|
|
package/src/index.ts
CHANGED
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* 测试 tui-driver 的多轮对话和长时间任务
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { createDriver } from "./dist/index.js";
|
|
7
|
+
|
|
8
|
+
const backend = process.argv[2] || "claude-code";
|
|
9
|
+
console.log(`Testing multi-turn conversation with backend: ${backend}`);
|
|
10
|
+
console.log(`Start time: ${new Date().toISOString()}`);
|
|
11
|
+
|
|
12
|
+
const driver = createDriver(backend, { debug: false });
|
|
13
|
+
|
|
14
|
+
// 监听事件
|
|
15
|
+
driver.on("login_required", (health) => {
|
|
16
|
+
console.log(`\n[EVENT] login_required: ${health.message}`);
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
driver.on("exit", (code, signal) => {
|
|
20
|
+
console.log(`\n[EVENT] Process exited: code=${code}, signal=${signal}`);
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
driver.on("stateChange", (transition) => {
|
|
24
|
+
console.log(`[STATE] ${transition.from} -> ${transition.to}`);
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
async function runTurn(turnNumber, prompt) {
|
|
28
|
+
console.log(`\n${"=".repeat(60)}`);
|
|
29
|
+
console.log(`Turn ${turnNumber}: ${prompt.slice(0, 80)}...`);
|
|
30
|
+
console.log(`Start: ${new Date().toISOString()}`);
|
|
31
|
+
console.log("=".repeat(60));
|
|
32
|
+
|
|
33
|
+
const startTime = Date.now();
|
|
34
|
+
|
|
35
|
+
// 在执行前检查健康状态
|
|
36
|
+
const healthBefore = driver.healthCheck();
|
|
37
|
+
console.log(`Health before: ${JSON.stringify(healthBefore)}`);
|
|
38
|
+
|
|
39
|
+
try {
|
|
40
|
+
const result = await driver.ask(prompt);
|
|
41
|
+
const elapsed = (Date.now() - startTime) / 1000;
|
|
42
|
+
|
|
43
|
+
console.log(`\n--- Turn ${turnNumber} Result ---`);
|
|
44
|
+
console.log(`Success: ${result.success}`);
|
|
45
|
+
console.log(`Elapsed: ${elapsed.toFixed(1)}s`);
|
|
46
|
+
console.log(`Answer length: ${result.answer?.length || 0} chars`);
|
|
47
|
+
console.log(`Answer preview: ${result.answer?.slice(0, 300) || "(empty)"}...`);
|
|
48
|
+
|
|
49
|
+
if (result.error) {
|
|
50
|
+
console.log(`Error: ${result.error.message}`);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// 执行后检查健康状态
|
|
54
|
+
const healthAfter = driver.healthCheck();
|
|
55
|
+
console.log(`Health after: ${JSON.stringify(healthAfter)}`);
|
|
56
|
+
|
|
57
|
+
return { success: result.success, elapsed, answer: result.answer };
|
|
58
|
+
} catch (error) {
|
|
59
|
+
const elapsed = (Date.now() - startTime) / 1000;
|
|
60
|
+
console.log(`\n--- Turn ${turnNumber} Error ---`);
|
|
61
|
+
console.log(`Elapsed: ${elapsed.toFixed(1)}s`);
|
|
62
|
+
console.log(`Error: ${error.message}`);
|
|
63
|
+
if (error.reason) {
|
|
64
|
+
console.log(`Reason: ${error.reason}`);
|
|
65
|
+
}
|
|
66
|
+
if (error.matchedPattern) {
|
|
67
|
+
console.log(`Matched pattern: ${error.matchedPattern}`);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// 打印当前屏幕内容用于调试
|
|
71
|
+
const snapshot = driver.snapshot();
|
|
72
|
+
console.log(`\nScreen viewport (last 20 lines):`);
|
|
73
|
+
const lines = snapshot.viewportText.split('\n').slice(-20);
|
|
74
|
+
lines.forEach((line, i) => console.log(` [${i}] ${line}`));
|
|
75
|
+
|
|
76
|
+
return { success: false, elapsed, error: error.message };
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
async function test() {
|
|
81
|
+
const results = [];
|
|
82
|
+
|
|
83
|
+
try {
|
|
84
|
+
console.log("\n--- Starting boot ---");
|
|
85
|
+
await driver.boot();
|
|
86
|
+
console.log("Boot successful!");
|
|
87
|
+
|
|
88
|
+
// 多轮对话测试,目标是超过5分钟
|
|
89
|
+
const prompts = [
|
|
90
|
+
"Hi, I'm testing a long conversation. Just say 'Turn 1 complete' and nothing else.",
|
|
91
|
+
"Create a Python script that generates the Fibonacci sequence up to 1000 terms. Save it as fib.py and run it to show the last 10 terms.",
|
|
92
|
+
"Now modify fib.py to also calculate the golden ratio approximation using consecutive Fibonacci numbers. Run it and show the results.",
|
|
93
|
+
"Create a new script called factorial.py that calculates factorials of numbers 1-20 using both iterative and recursive methods. Compare their performance.",
|
|
94
|
+
"Write a script called sorting_benchmark.py that compares bubble sort, quick sort, and merge sort on a list of 1000 random numbers. Show timing results.",
|
|
95
|
+
"Create a script that generates a simple ASCII art pattern - a pyramid of asterisks with 15 rows. Save and run it.",
|
|
96
|
+
"Write a script that reads a text file and counts word frequencies. Test it on any file in the current directory.",
|
|
97
|
+
"Create a simple calculator script that can handle basic operations (+, -, *, /) with proper error handling.",
|
|
98
|
+
"Write a script that generates random passwords of configurable length with letters, numbers, and symbols.",
|
|
99
|
+
"Create a script that converts temperatures between Celsius, Fahrenheit, and Kelvin. Include a test suite.",
|
|
100
|
+
"Write a script that validates email addresses using regex. Test it with various valid and invalid examples.",
|
|
101
|
+
"Create a simple todo list manager script that can add, remove, and list tasks. Store tasks in a JSON file.",
|
|
102
|
+
"Write a script that calculates statistics (mean, median, mode, std dev) for a list of numbers.",
|
|
103
|
+
"Create a script that generates a multiplication table from 1-12 in a nicely formatted grid.",
|
|
104
|
+
"Write a final summary of all the scripts we created today. List them with brief descriptions.",
|
|
105
|
+
];
|
|
106
|
+
|
|
107
|
+
for (let i = 0; i < prompts.length; i++) {
|
|
108
|
+
results.push(await runTurn(i + 1, prompts[i]));
|
|
109
|
+
|
|
110
|
+
// 检查是否已经超过5分钟
|
|
111
|
+
const totalTime = results.reduce((sum, r) => sum + r.elapsed, 0);
|
|
112
|
+
if (totalTime >= 300) {
|
|
113
|
+
console.log(`\n[INFO] Reached 5 minutes (${(totalTime / 60).toFixed(1)} min), stopping test.`);
|
|
114
|
+
break;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
// 汇总结果
|
|
119
|
+
console.log("\n" + "=".repeat(60));
|
|
120
|
+
console.log("TEST SUMMARY");
|
|
121
|
+
console.log("=".repeat(60));
|
|
122
|
+
|
|
123
|
+
let totalTime = 0;
|
|
124
|
+
results.forEach((r, i) => {
|
|
125
|
+
console.log(`Turn ${i + 1}: ${r.success ? "✅" : "❌"} (${r.elapsed.toFixed(1)}s)`);
|
|
126
|
+
totalTime += r.elapsed;
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
const successCount = results.filter(r => r.success).length;
|
|
130
|
+
console.log(`\nSuccess rate: ${successCount}/${results.length} (${(successCount/results.length*100).toFixed(0)}%)`);
|
|
131
|
+
console.log(`Total time: ${totalTime.toFixed(1)}s (${(totalTime / 60).toFixed(1)} minutes)`);
|
|
132
|
+
console.log(`End time: ${new Date().toISOString()}`);
|
|
133
|
+
|
|
134
|
+
driver.kill();
|
|
135
|
+
process.exit(results.every(r => r.success) ? 0 : 1);
|
|
136
|
+
|
|
137
|
+
} catch (error) {
|
|
138
|
+
console.error("\n--- Fatal Error ---");
|
|
139
|
+
console.error("Message:", error.message);
|
|
140
|
+
driver.kill();
|
|
141
|
+
process.exit(1);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
test();
|