@love-moon/tui-driver 0.2.3 → 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.
@@ -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;IAqDrB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAsB5B,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;YAsE/B,WAAW;YAOX,UAAU;YAIV,MAAM;YAIN,eAAe;YA2Bf,aAAa;IA8G3B,OAAO,CAAC,aAAa;YA0CP,QAAQ;YAwBR,OAAO;IASrB,OAAO,CAAC,eAAe;IAcvB,QAAQ,IAAI,cAAc;IAI1B,UAAU,CAAC,QAAQ,GAAE,cAAuC,GAAG,gBAAgB;IAqCzE,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvC,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxC,IAAI,IAAI,IAAI;IAMZ,OAAO,CAAC,KAAK;IAIb,OAAO,CAAC,cAAc;YAQR,qBAAqB;IAuBnC,OAAO,CAAC,aAAa;IAerB,OAAO,CAAC,kBAAkB;CAgD3B"}
1
+ {"version":3,"file":"TuiDriver.d.ts","sourceRoot":"","sources":["../../src/driver/TuiDriver.ts"],"names":[],"mappings":"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"}
@@ -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");
@@ -415,6 +495,103 @@ class TuiDriver extends events_1.EventEmitter {
415
495
  snapshot() {
416
496
  return this.screen.snapshot();
417
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
+ }
418
595
  getSignals(snapshot = this.screen.snapshot()) {
419
596
  const signals = this.profile.signals;
420
597
  if (!signals) {
@@ -461,6 +638,10 @@ class TuiDriver extends events_1.EventEmitter {
461
638
  sleep(ms) {
462
639
  return new Promise((resolve) => setTimeout(resolve, ms));
463
640
  }
641
+ terminateSessionForLoginRequired() {
642
+ this.pty.kill();
643
+ this.isBooted = false;
644
+ }
464
645
  resolveTimeout(timeoutMs, defaultTimeoutMs) {
465
646
  const value = timeoutMs ?? defaultTimeoutMs;
466
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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"}
@@ -4,6 +4,8 @@ export interface TuiAnchors {
4
4
  busy?: RegExp[];
5
5
  error?: RegExp[];
6
6
  trust?: RegExp[];
7
+ login?: RegExp[];
8
+ permission?: RegExp[];
7
9
  }
8
10
  export interface TuiKeys {
9
11
  submit: string[];
@@ -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;CAClB;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
+ {"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":";;AAyDA,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"}
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"}
@@ -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;AAC1F,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"}
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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/driver/index.ts"],"names":[],"mappings":";;;AAAA,+CAA0F;AAAjF,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
+ {"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,UA2F9B,CAAC;AAEH,eAAe,iBAAiB,CAAC"}
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
- /Error:/i,
31
- /Failed to/i,
30
+ // 只匹配 CLI 系统错误,不匹配代码中的文本
31
+ /^Error:/m, // 行首的 Error:
32
+ /^Failed to connect/im, // 连接失败
32
33
  /Connection refused/i,
33
34
  /Authentication failed/i,
34
- /Rate limit/i,
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,SAAS;YACT,YAAY;YACZ,qBAAqB;YACrB,wBAAwB;YACxB,aAAa;YACb,aAAa;SACd;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
+ {"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,UAkFzB,CAAC;AAEH,eAAe,YAAY,CAAC"}
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
- /Error:/i,
32
- /Failed/i,
33
- /API.*error/i,
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,SAAS;YACT,SAAS;YACT,aAAa;SACd;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"}
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";
@@ -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,GACjB,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"}
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":";;;AA+CA,oCAmBC;AAlED,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,8CAiB2B;AAhBzB,qGAAA,SAAS,OAAA;AAQT,yGAAA,aAAa,OAAA;AACb,wGAAA,YAAY,OAAA;AAGZ,6GAAA,iBAAiB,OAAA;AACjB,wGAAA,YAAY,OAAA;AAKd,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"}
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@love-moon/tui-driver",
3
- "version": "0.2.3",
3
+ "version": "0.2.4",
4
4
  "description": "TUI Driver for interactive CLI tools like Claude Code and Codex",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -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
 
@@ -511,6 +608,117 @@ export class TuiDriver extends EventEmitter {
511
608
  return this.screen.snapshot();
512
609
  }
513
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
+
514
722
  getSignals(snapshot: ScreenSnapshot = this.screen.snapshot()): TuiScreenSignals {
515
723
  const signals = this.profile.signals;
516
724
  if (!signals) {
@@ -566,6 +774,11 @@ export class TuiDriver extends EventEmitter {
566
774
  return new Promise((resolve) => setTimeout(resolve, ms));
567
775
  }
568
776
 
777
+ private terminateSessionForLoginRequired(): void {
778
+ this.pty.kill();
779
+ this.isBooted = false;
780
+ }
781
+
569
782
  private resolveTimeout(timeoutMs: number | undefined, defaultTimeoutMs: number): number {
570
783
  const value = timeoutMs ?? defaultTimeoutMs;
571
784
  if (!Number.isFinite(value) || value <= 0) {
@@ -5,6 +5,8 @@ export interface TuiAnchors {
5
5
  busy?: RegExp[];
6
6
  error?: RegExp[];
7
7
  trust?: RegExp[];
8
+ login?: RegExp[]; // 需要登录的提示
9
+ permission?: RegExp[]; // 需要权限确认的提示
8
10
  }
9
11
 
10
12
  export interface TuiKeys {
@@ -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
- /Error:/i,
30
- /Failed to/i,
29
+ // 只匹配 CLI 系统错误,不匹配代码中的文本
30
+ /^Error:/m, // 行首的 Error:
31
+ /^Failed to connect/im, // 连接失败
31
32
  /Connection refused/i,
32
33
  /Authentication failed/i,
33
- /Rate limit/i,
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
- /Error:/i,
31
- /Failed/i,
32
- /API.*error/i,
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
@@ -27,6 +27,8 @@ export {
27
27
  codexProfile,
28
28
  TuiSignals,
29
29
  TuiScreenSignals,
30
+ HealthStatus,
31
+ HealthReason,
30
32
  } from "./driver/index.js";
31
33
 
32
34
  // Extract
@@ -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();