@love-moon/tui-driver 0.2.12 → 0.2.14
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 +104 -0
- package/dist/driver/TuiDriver.d.ts.map +1 -1
- package/dist/driver/TuiDriver.js +1215 -8
- package/dist/driver/TuiDriver.js.map +1 -1
- package/dist/driver/index.d.ts +2 -1
- package/dist/driver/index.d.ts.map +1 -1
- package/dist/driver/index.js.map +1 -1
- package/dist/driver/profiles/copilot.profile.js +10 -10
- package/dist/driver/profiles/copilot.profile.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/pty/PtySession.d.ts +1 -0
- package/dist/pty/PtySession.d.ts.map +1 -1
- package/dist/pty/PtySession.js +9 -0
- package/dist/pty/PtySession.js.map +1 -1
- package/docs/how-to-add-a-new-backend.md +212 -0
- package/package.json +1 -1
- package/src/driver/TuiDriver.ts +1640 -124
- package/src/driver/index.ts +14 -1
- package/src/driver/profiles/copilot.profile.ts +10 -10
- package/src/index.ts +4 -0
- package/src/pty/PtySession.ts +10 -0
- package/test/backend-session-discovery.test.ts +134 -0
- package/test/codex-session-discovery.test.ts +112 -0
- package/test/copilot-profile.test.ts +12 -0
- package/test/copilot-signals.test.ts +14 -0
- package/test/session-file-extraction.test.ts +562 -0
- package/test/timeout-resolution.test.ts +37 -0
|
@@ -5,6 +5,7 @@ import { TuiState } from "./StateMachine.js";
|
|
|
5
5
|
export interface TuiDriverOptions {
|
|
6
6
|
profile: TuiProfile;
|
|
7
7
|
cwd?: string;
|
|
8
|
+
expectedSessionId?: string;
|
|
8
9
|
debug?: boolean;
|
|
9
10
|
onSnapshot?: (snapshot: ScreenSnapshot, state: TuiState) => void;
|
|
10
11
|
onSignals?: (signals: TuiScreenSignals, snapshot: ScreenSnapshot, state: TuiState) => void;
|
|
@@ -23,6 +24,8 @@ export interface AskResult {
|
|
|
23
24
|
replyInProgress?: boolean;
|
|
24
25
|
statusLine?: string;
|
|
25
26
|
statusDoneLine?: string;
|
|
27
|
+
sessionId?: string;
|
|
28
|
+
sessionFilePath?: string;
|
|
26
29
|
}
|
|
27
30
|
export type HealthReason = "healthy" | "login_required" | "permission_required" | "error_state" | "not_ready" | "process_exited";
|
|
28
31
|
export interface HealthStatus {
|
|
@@ -40,6 +43,33 @@ export interface TuiScreenSignals {
|
|
|
40
43
|
statusLine?: string;
|
|
41
44
|
statusDoneLine?: string;
|
|
42
45
|
}
|
|
46
|
+
export interface TuiSessionInfo {
|
|
47
|
+
backend: string;
|
|
48
|
+
sessionId: string;
|
|
49
|
+
sessionFilePath: string;
|
|
50
|
+
}
|
|
51
|
+
export interface TuiSessionUsageSummary {
|
|
52
|
+
backend: string;
|
|
53
|
+
sessionId: string;
|
|
54
|
+
sessionFilePath: string;
|
|
55
|
+
tokenUsagePercent?: number;
|
|
56
|
+
contextUsagePercent?: number;
|
|
57
|
+
}
|
|
58
|
+
export interface TuiSessionAssistantMessage {
|
|
59
|
+
backend: string;
|
|
60
|
+
sessionId: string;
|
|
61
|
+
sessionFilePath: string;
|
|
62
|
+
text: string;
|
|
63
|
+
timestamp?: string;
|
|
64
|
+
}
|
|
65
|
+
export interface TuiSessionAssistantMessageBatch {
|
|
66
|
+
backend: string;
|
|
67
|
+
sessionId: string;
|
|
68
|
+
sessionFilePath: string;
|
|
69
|
+
nextOffset: number;
|
|
70
|
+
fileSize: number;
|
|
71
|
+
messages: TuiSessionAssistantMessage[];
|
|
72
|
+
}
|
|
43
73
|
export declare class TuiDriver extends EventEmitter {
|
|
44
74
|
private pty;
|
|
45
75
|
private screen;
|
|
@@ -52,22 +82,93 @@ export declare class TuiDriver extends EventEmitter {
|
|
|
52
82
|
private onSignals?;
|
|
53
83
|
private isBooted;
|
|
54
84
|
private isKilled;
|
|
85
|
+
private sessionCwd;
|
|
86
|
+
private hasExplicitSessionCwd;
|
|
87
|
+
private expectedSessionId;
|
|
88
|
+
private sessionDetectStartSec;
|
|
89
|
+
private sessionDetectBaselineIds;
|
|
90
|
+
private sessionInfo;
|
|
91
|
+
private lastSessionInfo;
|
|
92
|
+
private sessionUsageCache;
|
|
93
|
+
private initialCommand;
|
|
94
|
+
private initialArgs;
|
|
55
95
|
constructor(options: TuiDriverOptions);
|
|
56
96
|
private setupEventHandlers;
|
|
57
97
|
private log;
|
|
58
98
|
get state(): TuiState;
|
|
59
99
|
get running(): boolean;
|
|
100
|
+
getSessionInfo(): TuiSessionInfo | null;
|
|
101
|
+
ensureSessionInfo(timeoutMs?: number): Promise<TuiSessionInfo | null>;
|
|
102
|
+
getSessionUsageSummary(): Promise<TuiSessionUsageSummary | null>;
|
|
103
|
+
getSessionFileSize(sessionInfo?: TuiSessionInfo | null): Promise<number>;
|
|
104
|
+
readSessionAssistantMessagesSince(sessionInfo: TuiSessionInfo, startOffset?: number): Promise<TuiSessionAssistantMessageBatch>;
|
|
60
105
|
boot(): Promise<void>;
|
|
61
106
|
ensureReady(): Promise<void>;
|
|
62
107
|
ask(prompt: string): Promise<AskResult>;
|
|
63
108
|
private prepareTurn;
|
|
64
109
|
private typePrompt;
|
|
65
110
|
private submit;
|
|
111
|
+
private supportsSessionFileTracking;
|
|
112
|
+
private discoverSessionInfo;
|
|
113
|
+
private detectSessionInfoByBackend;
|
|
114
|
+
private getPinnedSessionIds;
|
|
115
|
+
private toSessionInfo;
|
|
116
|
+
private pickSessionDiscoveryCandidate;
|
|
117
|
+
private collectBaselineSessionIds;
|
|
118
|
+
private captureSessionBaseline;
|
|
119
|
+
private detectCodexSessionInfo;
|
|
120
|
+
private captureCodexSessionBaseline;
|
|
121
|
+
private collectClaudeSessionCandidates;
|
|
122
|
+
private captureClaudeSessionBaseline;
|
|
123
|
+
private detectClaudeSessionInfo;
|
|
124
|
+
private collectCopilotSessionCandidates;
|
|
125
|
+
private captureCopilotSessionBaseline;
|
|
126
|
+
private detectCopilotSessionInfo;
|
|
127
|
+
private querySqliteRows;
|
|
128
|
+
private querySqliteRow;
|
|
129
|
+
private encodeClaudeProjectPath;
|
|
130
|
+
private readWorkspaceYamlValue;
|
|
131
|
+
private pathExists;
|
|
132
|
+
private captureSessionFileCheckpoint;
|
|
133
|
+
private requiresSessionFileCheckpointForTurn;
|
|
134
|
+
private resolveSessionFileCheckpointForTurn;
|
|
135
|
+
private readSessionFileStat;
|
|
136
|
+
private waitForSessionFileGrowth;
|
|
137
|
+
private waitForSessionFileIdle;
|
|
138
|
+
private extractAnswerFromSessionFile;
|
|
139
|
+
private extractSessionUsageSummaryFromJsonLines;
|
|
140
|
+
private extractCodexUsageFromJsonLines;
|
|
141
|
+
private extractClaudeUsageFromJsonLines;
|
|
142
|
+
private extractCopilotUsageFromJsonLines;
|
|
143
|
+
private readNumberPath;
|
|
144
|
+
private normalizePercent;
|
|
145
|
+
private requiresSessionCompletionMarker;
|
|
146
|
+
private supportsSessionAssistantReplyIdleFallback;
|
|
147
|
+
private hasSessionCompletionMarker;
|
|
148
|
+
private readSessionFileJsonLines;
|
|
149
|
+
private readSessionFileLinesSince;
|
|
150
|
+
private hasSessionAssistantReply;
|
|
151
|
+
private extractAssistantReplyFromJsonLines;
|
|
152
|
+
private extractAssistantMessagesFromJsonLines;
|
|
153
|
+
private hasCodexTaskCompleteFromJsonLines;
|
|
154
|
+
private hasCopilotTurnEndFromJsonLines;
|
|
155
|
+
private extractCodexTaskCompleteMessageFromJsonLines;
|
|
156
|
+
private isCodexTaskCompleteEntry;
|
|
157
|
+
private isCopilotTurnStartEntry;
|
|
158
|
+
private isCopilotTurnEndEntry;
|
|
159
|
+
private summarizeForLog;
|
|
160
|
+
private extractCodexAssistantText;
|
|
161
|
+
private extractClaudeAssistantText;
|
|
162
|
+
private extractCopilotAssistantText;
|
|
66
163
|
private waitStreamStart;
|
|
67
164
|
private waitStreamEnd;
|
|
68
165
|
private extractAnswer;
|
|
69
166
|
private recovery;
|
|
70
167
|
private restart;
|
|
168
|
+
private resolveRestartSessionInfo;
|
|
169
|
+
private resolveRestartArgs;
|
|
170
|
+
private stripResumeArgs;
|
|
171
|
+
private buildResumeArgsForBackend;
|
|
71
172
|
private captureSnapshot;
|
|
72
173
|
snapshot(): ScreenSnapshot;
|
|
73
174
|
/**
|
|
@@ -86,12 +187,15 @@ export declare class TuiDriver extends EventEmitter {
|
|
|
86
187
|
getSignals(snapshot?: ScreenSnapshot): TuiScreenSignals;
|
|
87
188
|
sendKeys(keys: string[]): Promise<void>;
|
|
88
189
|
write(data: string): Promise<void>;
|
|
190
|
+
forceRestart(): Promise<void>;
|
|
89
191
|
kill(): void;
|
|
90
192
|
private createSessionClosedError;
|
|
91
193
|
private assertAliveOrThrow;
|
|
92
194
|
private sleep;
|
|
93
195
|
private terminateSessionForLoginRequired;
|
|
94
196
|
private resolveTimeout;
|
|
197
|
+
private normalizeTimeoutValue;
|
|
198
|
+
private resolveMaxStageTimeoutMs;
|
|
95
199
|
private waitForScrollbackIdle;
|
|
96
200
|
private findLastMatch;
|
|
97
201
|
private anyAddedLineMatches;
|
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"TuiDriver.d.ts","sourceRoot":"","sources":["../../src/driver/TuiDriver.ts"],"names":[],"mappings":"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"}
|