tailii-host 0.4.0 → 0.6.0
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/approval/hook.js +11 -1
- package/dist/approval/hook.js.map +1 -1
- package/dist/backend/herdr.d.ts +30 -1
- package/dist/backend/herdr.js +103 -20
- package/dist/backend/herdr.js.map +1 -1
- package/dist/backend/sessionBackend.d.ts +12 -0
- package/dist/backend/sessionBackend.js +6 -0
- package/dist/backend/sessionBackend.js.map +1 -1
- package/dist/backend/tmux.d.ts +153 -3
- package/dist/backend/tmux.js +488 -14
- package/dist/backend/tmux.js.map +1 -1
- package/dist/chat/chatTailController.d.ts +3 -1
- package/dist/chat/chatTailController.js +3 -0
- package/dist/chat/chatTailController.js.map +1 -1
- package/dist/chat/subagentTailer.d.ts +51 -0
- package/dist/chat/subagentTailer.js +491 -47
- package/dist/chat/subagentTailer.js.map +1 -1
- package/dist/chat/subagentTranscript.js +51 -5
- package/dist/chat/subagentTranscript.js.map +1 -1
- package/dist/chat/transcriptTailer.d.ts +37 -1
- package/dist/chat/transcriptTailer.js +170 -3
- package/dist/chat/transcriptTailer.js.map +1 -1
- package/dist/codex/codexAppServer.js +20 -0
- package/dist/codex/codexAppServer.js.map +1 -1
- package/dist/codex/codexNativeTurnController.js +20 -4
- package/dist/codex/codexNativeTurnController.js.map +1 -1
- package/dist/codex/codexRolloutTailer.d.ts +1 -0
- package/dist/codex/codexRolloutTailer.js +7 -0
- package/dist/codex/codexRolloutTailer.js.map +1 -1
- package/dist/codex/codexSystemNotice.d.ts +16 -0
- package/dist/codex/codexSystemNotice.js +195 -0
- package/dist/codex/codexSystemNotice.js.map +1 -0
- package/dist/commands/doctor.d.ts +2 -6
- package/dist/commands/doctor.js +2 -29
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/launch.d.ts +2 -0
- package/dist/commands/launch.js +5 -0
- package/dist/commands/launch.js.map +1 -1
- package/dist/engine/engine.js +32 -22
- package/dist/engine/engine.js.map +1 -1
- package/dist/engine/handlers/accountUsage.d.ts +17 -0
- package/dist/engine/handlers/accountUsage.js +40 -6
- package/dist/engine/handlers/accountUsage.js.map +1 -1
- package/dist/engine/handlers/mode.js +42 -1
- package/dist/engine/handlers/mode.js.map +1 -1
- package/dist/engine/handlers/session.js +5 -3
- package/dist/engine/handlers/session.js.map +1 -1
- package/dist/engine/handlers/usage.js +4 -1
- package/dist/engine/handlers/usage.js.map +1 -1
- package/dist/engine/handlers/workspace.js +38 -1
- package/dist/engine/handlers/workspace.js.map +1 -1
- package/dist/hub/effortDialog.d.ts +20 -0
- package/dist/hub/effortDialog.js +40 -0
- package/dist/hub/effortDialog.js.map +1 -0
- package/dist/hub/engineRelaySocket.d.ts +3 -0
- package/dist/hub/engineRelaySocket.js +2 -1
- package/dist/hub/engineRelaySocket.js.map +1 -1
- package/dist/hub/hubDaemon.js +20 -3
- package/dist/hub/hubDaemon.js.map +1 -1
- package/dist/hub/hubProtocol.js +8 -2
- package/dist/hub/hubProtocol.js.map +1 -1
- package/dist/hub/panePreviewPump.d.ts +27 -0
- package/dist/hub/panePreviewPump.js +62 -1
- package/dist/hub/panePreviewPump.js.map +1 -1
- package/dist/hub/questionInjection.js +2 -1
- package/dist/hub/questionInjection.js.map +1 -1
- package/dist/hub/reaper.d.ts +5 -0
- package/dist/hub/reaper.js +25 -7
- package/dist/hub/reaper.js.map +1 -1
- package/dist/hub/sessionHub.d.ts +48 -1
- package/dist/hub/sessionHub.js +248 -25
- package/dist/hub/sessionHub.js.map +1 -1
- package/dist/protocol/decode.js +45 -0
- package/dist/protocol/decode.js.map +1 -1
- package/dist/protocol/encode.js +2 -0
- package/dist/protocol/encode.js.map +1 -1
- package/dist/protocol/messages.d.ts +65 -1
- package/dist/services/accountIdentity.js +3 -1
- package/dist/services/accountIdentity.js.map +1 -1
- package/dist/services/fileService.d.ts +19 -1
- package/dist/services/fileService.js +126 -0
- package/dist/services/fileService.js.map +1 -1
- package/dist/services/keychainMirror.d.ts +9 -0
- package/dist/services/keychainMirror.js +64 -0
- package/dist/services/keychainMirror.js.map +1 -0
- package/dist/services/officialApps.d.ts +12 -0
- package/dist/services/officialApps.js +84 -30
- package/dist/services/officialApps.js.map +1 -1
- package/dist/services/planUsageFetcher.d.ts +53 -5
- package/dist/services/planUsageFetcher.js +109 -22
- package/dist/services/planUsageFetcher.js.map +1 -1
- package/dist/sessions/claudeSessionStore.js +30 -0
- package/dist/sessions/claudeSessionStore.js.map +1 -1
- package/dist/sessions/heartbeat.d.ts +7 -1
- package/dist/sessions/heartbeat.js +3 -1
- package/dist/sessions/heartbeat.js.map +1 -1
- package/dist/sessions/sessionSearch.js +23 -5
- package/dist/sessions/sessionSearch.js.map +1 -1
- package/dist/shared/cliVersions.d.ts +14 -0
- package/dist/shared/cliVersions.js +38 -0
- package/dist/shared/cliVersions.js.map +1 -0
- package/dist/shared/crossSession.d.ts +15 -0
- package/dist/shared/crossSession.js +75 -0
- package/dist/shared/crossSession.js.map +1 -0
- package/dist/shared/harnessReminder.d.ts +32 -0
- package/dist/shared/harnessReminder.js +124 -0
- package/dist/shared/harnessReminder.js.map +1 -0
- package/dist/shared/lineWriter.d.ts +7 -0
- package/dist/shared/lineWriter.js +26 -0
- package/dist/shared/lineWriter.js.map +1 -1
- package/dist/shared/systemNotice.d.ts +30 -0
- package/dist/shared/systemNotice.js +209 -0
- package/dist/shared/systemNotice.js.map +1 -0
- package/package.json +3 -3
|
@@ -78,9 +78,15 @@ export class CompositeSessionBackend {
|
|
|
78
78
|
sendTextSubmit(name, text) {
|
|
79
79
|
return this.backendFor(name).sendTextSubmit(name, text);
|
|
80
80
|
}
|
|
81
|
+
sendLoginCode(name, code) {
|
|
82
|
+
return this.backendFor(name).sendLoginCode(name, code);
|
|
83
|
+
}
|
|
81
84
|
capturePane(name, options = {}) {
|
|
82
85
|
return this.backendFor(name).capturePane(name, options);
|
|
83
86
|
}
|
|
87
|
+
captureVisibleAnsi(name) {
|
|
88
|
+
return this.backendFor(name).captureVisibleAnsi(name);
|
|
89
|
+
}
|
|
84
90
|
agentProcessAlive(name) {
|
|
85
91
|
return this.backendFor(name).agentProcessAlive(name);
|
|
86
92
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sessionBackend.js","sourceRoot":"","sources":["../../src/backend/sessionBackend.ts"],"names":[],"mappings":"AAAA,oBAAoB;AACpB,qDAAqD;AACrD,EAAE;AACF,4DAA4D;AAC5D,8DAA8D;AAC9D,iDAAiD;AACjD,qCAAqC;AAErC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EACL,kBAAkB,GAGnB,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"sessionBackend.js","sourceRoot":"","sources":["../../src/backend/sessionBackend.ts"],"names":[],"mappings":"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"}
|
package/dist/backend/tmux.d.ts
CHANGED
|
@@ -43,8 +43,136 @@ export declare function inputBoxIsShellMode(box: ClaudeInputBox | null): boolean
|
|
|
43
43
|
* (`sendTextSubmit` が `selectionDialogVisible` → Esc で担保)。
|
|
44
44
|
*/
|
|
45
45
|
export declare function extractClaudeInputBox(screen: string): ClaudeInputBox | null;
|
|
46
|
+
/**
|
|
47
|
+
* claude TUI の「プロンプト提案」(2.1.25x 頃〜。空の入力欄に薄字で次の一手を提示し、
|
|
48
|
+
* → / Tab で採用、Enter で即送信される)と空入力プレースホルダーは、いずれも通常の
|
|
49
|
+
* 未送信テキストと**同じ入力欄位置**に描画される。`--format text`(SGR 除去済み)では
|
|
50
|
+
* 本文と区別できないため、注入の残留 flush 判定・送信確定ループがこれらを実テキストと
|
|
51
|
+
* 誤認し、Enter で提案をそのまま送信してしまう(実障害 2026-09-03: iPhone 送信のたびに
|
|
52
|
+
* AI の提案文が勝手に送られ、送信が壊れる)。
|
|
53
|
+
*
|
|
54
|
+
* 決定的シグナル: 提案もプレースホルダーも本文が SGR 2(faint/薄字)で描画される。
|
|
55
|
+
* 利用者入力・中断時の queued 書き戻しは faint ではない(実測 herdr `pane read --format
|
|
56
|
+
* ansi` 2026-09-03: 提案は 本文が ESC[2m 包み、実テキストは faint 無し)。
|
|
57
|
+
*
|
|
58
|
+
* ANSI 画面から入力欄本文を切り出し、本文の可視文字がすべて faint なら「実テキスト無し」
|
|
59
|
+
* とみなす(=提案/プレースホルダー)。faint でない可視文字が 1 つでもあれば実テキスト有り。
|
|
60
|
+
* 判定不能(罫線が見つからない・本文空)は false。
|
|
61
|
+
*/
|
|
62
|
+
export declare function inputBoxHasRealPendingText(ansiScreen: string): boolean;
|
|
63
|
+
/**
|
|
64
|
+
* 入力欄の「実テキスト」(薄字プロンプト提案・プレースホルダーを除いた未送信本文)を返す。
|
|
65
|
+
* `null` = 入力欄が見つからない(罫線が窓外・描画崩れ)、`""` = 空 or 提案/プレースホルダー、
|
|
66
|
+
* それ以外 = 実テキスト。text capture の box.text を使う判定(clearInputBox の空判定・
|
|
67
|
+
* inputBoxContainsText の probe 照合)が提案を実テキストと誤認するのを塞ぐため、ANSI から
|
|
68
|
+
* faint を見て実テキストだけを取り出す(prompt-suggestion-chip)。
|
|
69
|
+
*/
|
|
70
|
+
export declare function inputBoxRealText(ansiScreen: string): string | null;
|
|
71
|
+
/**
|
|
72
|
+
* claude TUI のプロンプト提案文を取り出す(提案チップ表示用)。
|
|
73
|
+
* 入力欄本文が薄字(faint)のみ かつ 既知プレースホルダーでない非空テキストのときだけ、その
|
|
74
|
+
* 本文を返す(=提案)。空・実テキスト(利用者入力/中断書き戻し)・プレースホルダーは null。
|
|
75
|
+
* inputBoxHasRealPendingText と同じ解析(analyzeInputBox)を共有し、判定を一貫させる。
|
|
76
|
+
*/
|
|
77
|
+
export declare function extractInputBoxSuggestion(ansiScreen: string): string | null;
|
|
78
|
+
/**
|
|
79
|
+
* `/login` の OAuth コード入力待ち行(実測 claude 2.1.241: `Paste code here if prompted >`)。
|
|
80
|
+
* ブラウザで取得したコードを貼る唯一の入力面で、通常の入力欄(罫線ペア)は描画されない。
|
|
81
|
+
*/
|
|
82
|
+
export declare const LOGIN_CODE_PROMPT_MARKER = "Paste code here if prompted";
|
|
83
|
+
/**
|
|
84
|
+
* `/login` でコード送信が失敗した後の再試行待ち行(実測 2.1.241:
|
|
85
|
+
* `OAuth error: Request failed with status code 400` の下に `Press Enter to retry.`)。
|
|
86
|
+
*/
|
|
87
|
+
export declare const LOGIN_RETRY_MARKER = "Press Enter to retry";
|
|
88
|
+
/** `/login` 方式選択(`Select login method:`)のタイトル行(実測 2.1.241。フッターは `Esc to cancel` のみ)。 */
|
|
89
|
+
export declare const LOGIN_METHOD_MARKER = "Select login method";
|
|
90
|
+
/**
|
|
91
|
+
* 成功後の継続待ち画面(CLI 2.1.241 の文字列 `Login successful. Press Enter to continue…`。
|
|
92
|
+
* 入力欄は無く、Enter / Esc で閉じて通常の入力欄へ戻る)。
|
|
93
|
+
* 2026-08-25 実障害: この画面を知らず「交換中」として 10s 待って失敗を返し、利用者がキャンセル
|
|
94
|
+
* (Esc)すると閉じてログイン済みになる、という逆転が起きた。
|
|
95
|
+
*/
|
|
96
|
+
export declare const LOGIN_CONTINUE_MARKER = "to continue";
|
|
97
|
+
/** 画面が `/login` のコード入力待ちか(TESTABLE)。chat 注入の門番と login_code_send の前提確認に使う。 */
|
|
98
|
+
export declare function screenHasLoginCodePrompt(screen: string): boolean;
|
|
99
|
+
/** 成功後の継続待ち(`Login successful. Press Enter to continue…`)が pane 末尾付近にあるか。 */
|
|
100
|
+
export declare function screenHasLoginContinue(screen: string): boolean;
|
|
101
|
+
/**
|
|
102
|
+
* 画面が `/login` フローのどこか(方式選択 / コード入力待ち / 失敗後の再試行待ち)にいるか(TESTABLE)。
|
|
103
|
+
* chat 注入の門番用。コード欄以外の 2 画面も、通常本文 + Enter が選択リストや retry を
|
|
104
|
+
* 押してしまうため同じく拒否する。
|
|
105
|
+
*/
|
|
106
|
+
export declare function screenInLoginFlow(screen: string): boolean;
|
|
107
|
+
/**
|
|
108
|
+
* コード送出後の画面の判定:
|
|
109
|
+
* - `prompt`: コード欄がまだある(CR 取りこぼし or 交換前)
|
|
110
|
+
* - `retry`: OAuth 拒否(`Press Enter to retry`)
|
|
111
|
+
* - `method`: 方式選択へ戻った(Esc / retry を押した等。受理ではない)
|
|
112
|
+
* - `continue`: 成功後の継続待ち(`Login successful. Press Enter to continue…`)— ログインは完了
|
|
113
|
+
* - `accepted`: **陽性証拠**あり — 通常入力欄(罫線ペア)の復帰
|
|
114
|
+
* - `pending`: どれでもない(交換中)。「コード欄が無い」だけでは受理にしない。
|
|
115
|
+
*/
|
|
116
|
+
export type LoginCodeScreenState = "prompt" | "retry" | "method" | "continue" | "accepted" | "pending";
|
|
117
|
+
export declare function loginCodeScreenState(screen: string): LoginCodeScreenState;
|
|
118
|
+
/**
|
|
119
|
+
* retry 画面の理由行。`OAuth error` で始まる行(末尾窓内の最後のもの)だけを採用する。
|
|
120
|
+
* 直上行フォールバックは持たない(コードをエコーしたコード欄の行が理由として result / ログへ
|
|
121
|
+
* 漏れる)。念のためコード欄マーカーを含む行は採用しない。
|
|
122
|
+
*/
|
|
123
|
+
export declare function loginCodeErrorLine(screen: string): string | null;
|
|
124
|
+
/**
|
|
125
|
+
* login-code 経路の失敗(利用者へそのまま出せる文言だけを message に持つ)。
|
|
126
|
+
* コード本文を含む生の backend エラー(tmux の args 等)を result / diag に流さないための型。
|
|
127
|
+
* chat 注入の門番(1 キーも送る前の確定拒否)にも使う — hub はこの型を「未送出の失敗」として
|
|
128
|
+
* uncertain(配送不明)に積まない。
|
|
129
|
+
*/
|
|
130
|
+
export declare class LoginCodeError extends Error {
|
|
131
|
+
constructor(message: string);
|
|
132
|
+
}
|
|
133
|
+
/** login_code_send が拒否するメッセージ(コード入力待ちでない)。 */
|
|
134
|
+
export declare const LOGIN_CODE_PROMPT_NOT_VISIBLE = "Claude \u306F\u30ED\u30B0\u30A4\u30F3\u30B3\u30FC\u30C9\u306E\u5165\u529B\u5F85\u3061\u3067\u306F\u3042\u308A\u307E\u305B\u3093\uFF08/login \u3092\u5B9F\u884C\u3057\u3066\u304B\u3089\u9001\u3063\u3066\u304F\u3060\u3055\u3044\uFF09";
|
|
135
|
+
/** retry 画面で login_code_send されたときの案内。 */
|
|
136
|
+
export declare const LOGIN_CODE_RETRY_PENDING = "Claude \u306F\u518D\u8A66\u884C\u5F85\u3061\u3067\u3059\u3002\u300C\u3082\u3046\u4E00\u5EA6\u300D\u3092\u62BC\u3057\u3066\u304B\u3089\u3001\u65B0\u3057\u3044\u30B3\u30FC\u30C9\u3092\u9001\u3063\u3066\u304F\u3060\u3055\u3044";
|
|
137
|
+
/** chat 注入が `/login` フロー中の画面を検出したときの拒否文言(hub が会話本文へそのまま出す)。 */
|
|
138
|
+
export declare const CHAT_BLOCKED_BY_LOGIN_PROMPT = "Claude \u304C /login \u306E\u9014\u4E2D\u3067\u3059\u3002\u8EE2\u5199\u30AB\u30FC\u30C9\u304B\u3089\u64CD\u4F5C\u3059\u308B\u304B\u3001\u30AD\u30E3\u30F3\u30BB\u30EB\u3057\u3066\u304B\u3089\u9001\u3063\u3066\u304F\u3060\u3055\u3044";
|
|
139
|
+
/** コード送出は届いたが、待ってもコード欄が消えない(CR 取りこぼし・TUI 停止)。 */
|
|
140
|
+
export declare const LOGIN_CODE_NOT_ACCEPTED = "\u30B3\u30FC\u30C9\u304C Claude \u306B\u53D7\u7406\u3055\u308C\u307E\u305B\u3093\u3067\u3057\u305F\uFF08\u3082\u3046\u4E00\u5EA6\u9001\u308B\u304B\u3001Mac \u5074\u306E\u753B\u9762\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\uFF09";
|
|
141
|
+
/** コード本文がコード欄に反映されなかった(send-text 取りこぼし)。CR は撃たない。 */
|
|
142
|
+
export declare const LOGIN_CODE_NOT_ECHOED = "\u30B3\u30FC\u30C9\u304C\u5165\u529B\u6B04\u306B\u53CD\u6620\u3055\u308C\u307E\u305B\u3093\u3067\u3057\u305F\uFF08\u3082\u3046\u4E00\u5EA6\u9001\u3063\u3066\u304F\u3060\u3055\u3044\uFF09";
|
|
143
|
+
/** 交換が長引き、受理も拒否も確定しなかった。 */
|
|
144
|
+
export declare const LOGIN_CODE_UNSETTLED = "\u30ED\u30B0\u30A4\u30F3\u306E\u7D50\u679C\u3092\u78BA\u8A8D\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\uFF08Mac \u5074\u306E\u753B\u9762\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\uFF09";
|
|
145
|
+
/** login_code_send の失敗を利用者向け文言へ写す(コード本文・内部 args を漏らさない)。 */
|
|
146
|
+
export declare function loginCodeErrorMessage(error: unknown): string;
|
|
147
|
+
/** backend 非依存の login-code 送出手順の注入点。 */
|
|
148
|
+
export interface LoginCodeSubmitOps {
|
|
149
|
+
/** 画面(判定不能は null)。 */
|
|
150
|
+
capture: () => Promise<string | null>;
|
|
151
|
+
sendLiteral: (text: string) => Promise<void>;
|
|
152
|
+
sendEnter: () => Promise<void>;
|
|
153
|
+
/** 本文→CR の間隔(Ink の取り込み窓。実測 300ms 未満で CR が飲まれる)。 */
|
|
154
|
+
delayMs: number;
|
|
155
|
+
/** 画面ポーリング間隔。 */
|
|
156
|
+
pollMs: number;
|
|
157
|
+
/** CR 1 回あたり、コード欄が消えるのを待つ上限。交換中(pending)はこの 2 倍まで待つ。 */
|
|
158
|
+
settleMs: number;
|
|
159
|
+
now?: () => number;
|
|
160
|
+
}
|
|
161
|
+
/** コード欄に本文が反映されたか(入力は末尾 6 文字以外マスク表示される実測に合わせ、末尾で照合)。 */
|
|
162
|
+
export declare function loginCodeEchoed(screen: string, code: string): boolean;
|
|
163
|
+
/**
|
|
164
|
+
* `/login` のコードを送出し、結果を画面で確定させる(tmux / herdr 共通, TESTABLE)。
|
|
165
|
+
* - 送出前にコード欄が無ければ何も送らず throw(retry 画面は専用の案内)
|
|
166
|
+
* - 本文送出後、コード欄へのエコーを確認してから CR(反映していなければ CR を撃たず throw —
|
|
167
|
+
* 切り詰めたコードを送ってワンタイムコードを焼かない)
|
|
168
|
+
* - CR 後は `loginCodeScreenState` で待つ。retry / method は即 throw(余分な CR で retry を
|
|
169
|
+
* 押さない)。accepted(陽性証拠)で受理。prompt が settleMs 残れば **再キャプチャして prompt
|
|
170
|
+
* のときだけ** CR を 1 回再送。pending は settleMs×2 まで待ち、確定しなければ throw。
|
|
171
|
+
* 暗黙の ok は返さない。
|
|
172
|
+
*/
|
|
173
|
+
export declare function submitLoginCode(code: string, ops: LoginCodeSubmitOps): Promise<void>;
|
|
46
174
|
/** 実 tmux を絶対パスで起動する既定ランナー。tmux 非0 exit は throw せず結果で表現する。 */
|
|
47
|
-
export declare function processTmuxCommandRunner(tmuxPath?: string): TmuxCommandRunner;
|
|
175
|
+
export declare function processTmuxCommandRunner(tmuxPath?: string, timeoutMs?: number): TmuxCommandRunner;
|
|
48
176
|
/** TmuxSessionManager が投げる型付きエラー。 */
|
|
49
177
|
export declare class TmuxFailedError extends Error {
|
|
50
178
|
readonly args: string[];
|
|
@@ -66,12 +194,19 @@ export declare class TmuxSessionManager {
|
|
|
66
194
|
private readonly runner;
|
|
67
195
|
readonly store: SessionMetadataStore;
|
|
68
196
|
private readonly captureLines;
|
|
197
|
+
/** login-code 送出の待ち時間(テスト注入用)。 */
|
|
198
|
+
private readonly loginTiming;
|
|
69
199
|
private readonly protocolVersion;
|
|
70
200
|
constructor(options?: {
|
|
71
201
|
runner?: TmuxCommandRunner;
|
|
72
202
|
store?: SessionMetadataStore;
|
|
73
203
|
captureLines?: number;
|
|
74
204
|
protocolVersion?: number;
|
|
205
|
+
loginTiming?: {
|
|
206
|
+
delayMs?: number;
|
|
207
|
+
pollMs?: number;
|
|
208
|
+
settleMs?: number;
|
|
209
|
+
};
|
|
75
210
|
});
|
|
76
211
|
/**
|
|
77
212
|
* 現存する各セッションを name/cwd/alive で列挙する(name 昇順、メタのみは alive:false)。
|
|
@@ -96,14 +231,21 @@ export declare class TmuxSessionManager {
|
|
|
96
231
|
* literal 送出 → 150ms(Ink 再描画待ち)→ Enter。
|
|
97
232
|
*/
|
|
98
233
|
sendTextSubmit(name: string, text: string): Promise<void>;
|
|
234
|
+
/**
|
|
235
|
+
* `/login` の OAuth コードを入力欄へ渡して確定する(login_code_send)。
|
|
236
|
+
* コード入力待ちの画面でなければ何も送らず throw する(誤って通常入力欄へ
|
|
237
|
+
* コードが本文として送信されるのを防ぐ)。literal 送出 → 150ms → Enter は
|
|
238
|
+
* sendTextSubmit と同じ Ink の取り込み間隔。
|
|
239
|
+
*/
|
|
240
|
+
sendLoginCode(name: string, code: string): Promise<void>;
|
|
241
|
+
/** 画面キャプチャ(判定不能=capture 失敗は null)。 */
|
|
242
|
+
private captureVisibleScreenOrNull;
|
|
99
243
|
/**
|
|
100
244
|
* 入力欄がシェルモードなら BSpace で通常入力へ戻す。判定不能・tmux エラーは no-op
|
|
101
245
|
* (fail-open。この補助操作のエラーを表に出すと「送信できない」原因が BSpace 送出の
|
|
102
246
|
* 失敗に見えてしまうので、実エラーは続く本文注入の send-keys 失敗として顕在化させる)。
|
|
103
247
|
*/
|
|
104
248
|
private exitShellMode;
|
|
105
|
-
/** 入力欄に未送信テキストが残っているか。判定不能は false。 */
|
|
106
|
-
private inputBoxHasPendingText;
|
|
107
249
|
/**
|
|
108
250
|
* 入力欄判定用に **viewport 全体**を取る(末尾 N 行で切らない)。
|
|
109
251
|
*
|
|
@@ -114,6 +256,14 @@ export declare class TmuxSessionManager {
|
|
|
114
256
|
* tmux は `-S` を付けなければ viewport のみ(履歴を引かない)。
|
|
115
257
|
*/
|
|
116
258
|
private captureVisibleScreen;
|
|
259
|
+
/**
|
|
260
|
+
* viewport 全体を ANSI エスケープ付き(`capture-pane -e`)で取る。faint(SGR 2)属性で
|
|
261
|
+
* プロンプト提案/プレースホルダーを実テキストと見分けるのに使う(inputBoxHasRealPendingText)。
|
|
262
|
+
* 判定不能=capture 失敗は null(fail-open)。
|
|
263
|
+
*/
|
|
264
|
+
private captureVisibleScreenAnsiOrNull;
|
|
265
|
+
/** SessionBackend: プロンプト提案抽出用の viewport ANSI キャプチャ(失敗は throw)。 */
|
|
266
|
+
captureVisibleAnsi(name: string): Promise<string>;
|
|
117
267
|
/** 指定セッションの pane へ tmux send-keys を発行する(literal は -l)。 */
|
|
118
268
|
sendKeys(name: string, keys: string[], literal?: boolean): Promise<void>;
|
|
119
269
|
/** `capture-pane -p -t <name> -S -<N>` で末尾 N 行のペイン内容を返す(末尾空行は削る)。 */
|