claude-auto-continue 1.0.37 → 1.0.39
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/PatternDetector.js +2 -1
- package/dist/PatternDetector.js.map +1 -1
- package/dist/ProcessSupervisor.d.ts +2 -2
- package/dist/ProcessSupervisor.js +14 -38
- package/dist/ProcessSupervisor.js.map +1 -1
- package/dist/StatusBar.d.ts +0 -35
- package/dist/StatusBar.js +0 -79
- package/dist/StatusBar.js.map +1 -1
- package/dist/cli.js +3 -41
- package/dist/cli.js.map +1 -1
- package/package.json +1 -1
package/dist/PatternDetector.js
CHANGED
|
@@ -13,8 +13,9 @@ const config_js_1 = require("./config.js");
|
|
|
13
13
|
* Format B (mid-era): "Claude usage limit reached. Your limit will reset at 3pm (America/Santiago)."
|
|
14
14
|
* Format C: "You've hit your limit · resets 4pm (Europe/Berlin)"
|
|
15
15
|
* Format D (current): "You're out of extra usage · resets 4am (Europe/Istanbul)"
|
|
16
|
+
* Format E (menu): "Stop and wait for limit to reset" (the interactive menu itself)
|
|
16
17
|
*/
|
|
17
|
-
const DEFAULT_PATTERN = /(?:Claude(?:\s+AI)?\s+usage\s+limit\s+reached[|.]|you(?:'ve| have)\s+hit\s+your\s+limit|you(?:'re| are)\s+out\s+of\s+extra\s+usage)/i;
|
|
18
|
+
const DEFAULT_PATTERN = /(?:Claude(?:\s+AI)?\s+usage\s+limit\s+reached[|.]|you(?:'ve| have)\s+hit\s+your\s+limit|you(?:'re| are)\s+out\s+of\s+extra\s+usage|Stop\s+and\s+wait\s+for\s+limit\s+to\s+reset)/i;
|
|
18
19
|
/** Matches a 10+ digit unix timestamp after a pipe: |1760000400 */
|
|
19
20
|
const UNIX_TS_PATTERN = /\|(\d{10,})/;
|
|
20
21
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PatternDetector.js","sourceRoot":"","sources":["../src/PatternDetector.ts"],"names":[],"mappings":";;;;;;AAAA,mCAAsC;AACtC,4DAAmC;AACnC,2CAAyC;AAYzC
|
|
1
|
+
{"version":3,"file":"PatternDetector.js","sourceRoot":"","sources":["../src/PatternDetector.ts"],"names":[],"mappings":"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"}
|
|
@@ -30,8 +30,8 @@ export interface ProcessSupervisorOptions {
|
|
|
30
30
|
overrideCooldownSec?: number;
|
|
31
31
|
/** Override process.exit for testing. Default: process.exit */
|
|
32
32
|
onExit?: (code: number) => void;
|
|
33
|
-
/** Override PTY output handler.
|
|
34
|
-
onOutput?: (data:
|
|
33
|
+
/** Override PTY output handler. Default: process.stdout.write */
|
|
34
|
+
onOutput?: (data: string) => void;
|
|
35
35
|
}
|
|
36
36
|
/**
|
|
37
37
|
* ProcessSupervisor — the core PTY orchestrator.
|
|
@@ -38,7 +38,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
38
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
39
|
exports.ProcessSupervisor = void 0;
|
|
40
40
|
const events_1 = require("events");
|
|
41
|
-
const string_decoder_1 = require("string_decoder");
|
|
42
41
|
const pty = __importStar(require("node-pty"));
|
|
43
42
|
const strip_ansi_1 = __importDefault(require("strip-ansi"));
|
|
44
43
|
const PatternDetector_js_1 = require("./PatternDetector.js");
|
|
@@ -103,41 +102,22 @@ class ProcessSupervisor extends events_1.EventEmitter {
|
|
|
103
102
|
cols: process.stdout.columns ?? 80,
|
|
104
103
|
rows: process.stdout.rows ?? 24,
|
|
105
104
|
cwd: process.cwd(),
|
|
106
|
-
env:
|
|
107
|
-
...process.env,
|
|
108
|
-
// Ensure UTF-8 locale is set so the PTY handles multi-byte characters
|
|
109
|
-
// (box-drawing, emoji, etc.) correctly. Without this, some systems
|
|
110
|
-
// default to ASCII/Latin-1 and garble Unicode output.
|
|
111
|
-
LANG: process.env['LANG'] ?? 'en_US.UTF-8',
|
|
112
|
-
},
|
|
113
|
-
// Raw binary mode — we handle encoding ourselves to guarantee
|
|
114
|
-
// byte-accurate passthrough of UTF-8 output (box-drawing chars, etc.)
|
|
115
|
-
encoding: null,
|
|
105
|
+
env: process.env,
|
|
116
106
|
});
|
|
117
107
|
this.#writer = new StdinWriter_js_1.StdinWriter(ptyProcess);
|
|
118
|
-
//
|
|
119
|
-
// so text detection (menu visibility, rate-limit patterns) works correctly.
|
|
120
|
-
const decoder = new string_decoder_1.StringDecoder('utf8');
|
|
121
|
-
// --- PTY output: pass raw bytes to output handler, decoded text to detector ---
|
|
122
|
-
// During WAITING/LIMIT_DETECTED, the countdown card owns the terminal display.
|
|
123
|
-
// Forwarding PTY output (e.g. menu dismissal responses) would dirty the screen.
|
|
108
|
+
// --- PTY output: always forward to display, only feed detector during RUNNING ---
|
|
124
109
|
ptyProcess.onData((data) => {
|
|
125
|
-
// data is a binary string (encoding: null) — each char code = one byte.
|
|
126
|
-
// Convert to Buffer for byte-accurate stdout output.
|
|
127
|
-
const buf = Buffer.from(data, 'binary');
|
|
128
|
-
// Decode via StringDecoder for proper UTF-8 text (handles partial sequences)
|
|
129
|
-
const text = decoder.write(buf);
|
|
130
110
|
// Track "What do you want to do?" menu visibility across all states
|
|
131
|
-
const clean = (0, strip_ansi_1.default)(
|
|
111
|
+
const clean = (0, strip_ansi_1.default)(data);
|
|
132
112
|
if (/What do you want to do\?/.test(clean)) {
|
|
133
113
|
this.#menuVisible = true;
|
|
134
114
|
}
|
|
135
115
|
else if (this.#menuVisible && clean.trim().length > 0) {
|
|
136
116
|
this.#menuVisible = false;
|
|
137
117
|
}
|
|
118
|
+
this.#onOutput(data);
|
|
138
119
|
if (this.#state === "RUNNING" /* SessionState.RUNNING */) {
|
|
139
|
-
this.#
|
|
140
|
-
this.#detector.feed(text);
|
|
120
|
+
this.#detector.feed(data);
|
|
141
121
|
}
|
|
142
122
|
});
|
|
143
123
|
// --- PTY exit: clean up and exit ---
|
|
@@ -158,11 +138,17 @@ class ProcessSupervisor extends events_1.EventEmitter {
|
|
|
158
138
|
let lastCtrlC = 0;
|
|
159
139
|
process.stdin.on('data', (chunk) => {
|
|
160
140
|
const str = chunk.toString('binary');
|
|
161
|
-
// Detect Ctrl+C (0x03)
|
|
141
|
+
// Detect Ctrl+C (0x03)
|
|
162
142
|
if (str === '\x03') {
|
|
143
|
+
// During cooldown/resuming — single Ctrl+C exits immediately
|
|
144
|
+
if (this.#state !== "RUNNING" /* SessionState.RUNNING */) {
|
|
145
|
+
this.shutdown();
|
|
146
|
+
this.#onExitCallback(130);
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
// During RUNNING — double press within 1s exits clac
|
|
163
150
|
const now = Date.now();
|
|
164
151
|
if (now - lastCtrlC < 1000) {
|
|
165
|
-
// Double Ctrl+C — force exit
|
|
166
152
|
this.shutdown();
|
|
167
153
|
this.#onExitCallback(130);
|
|
168
154
|
return;
|
|
@@ -177,18 +163,8 @@ class ProcessSupervisor extends events_1.EventEmitter {
|
|
|
177
163
|
});
|
|
178
164
|
}
|
|
179
165
|
// --- Terminal resize forwarding ---
|
|
180
|
-
// Only forward resizes during RUNNING state to avoid scrambling Claude's
|
|
181
|
-
// display while the alternate screen (countdown) is active.
|
|
182
166
|
process.stdout.on('resize', () => {
|
|
183
|
-
|
|
184
|
-
ptyProcess.resize(process.stdout.columns ?? 80, process.stdout.rows ?? 24);
|
|
185
|
-
}
|
|
186
|
-
});
|
|
187
|
-
// Sync PTY size when returning to RUNNING state (in case terminal was resized during WAITING)
|
|
188
|
-
this.on('stateChange', (event) => {
|
|
189
|
-
if (event.state === 'RUNNING') {
|
|
190
|
-
ptyProcess.resize(process.stdout.columns ?? 80, process.stdout.rows ?? 24);
|
|
191
|
-
}
|
|
167
|
+
ptyProcess.resize(process.stdout.columns ?? 80, process.stdout.rows ?? 24);
|
|
192
168
|
});
|
|
193
169
|
}
|
|
194
170
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProcessSupervisor.js","sourceRoot":"","sources":["../src/ProcessSupervisor.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,mCAAsC;AACtC,
|
|
1
|
+
{"version":3,"file":"ProcessSupervisor.js","sourceRoot":"","sources":["../src/ProcessSupervisor.ts"],"names":[],"mappings":"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"}
|
package/dist/StatusBar.d.ts
CHANGED
|
@@ -1,41 +1,6 @@
|
|
|
1
|
-
export interface StatusBarOptions {
|
|
2
|
-
cols?: number;
|
|
3
|
-
}
|
|
4
1
|
/**
|
|
5
2
|
* Format a countdown from now until resetTime as a human-readable string.
|
|
6
3
|
* Returns "Xh Xm Xs" for durations over an hour, "Xm Xs" otherwise.
|
|
7
4
|
* Returns "0m 00s" for past or null dates.
|
|
8
5
|
*/
|
|
9
6
|
export declare function formatCountdown(resetTime: Date): string;
|
|
10
|
-
/**
|
|
11
|
-
* Format a Date as a human-readable absolute time (e.g., "2:45 PM").
|
|
12
|
-
*/
|
|
13
|
-
export declare function formatResetTime(resetTime: Date): string;
|
|
14
|
-
/**
|
|
15
|
-
* StatusBar — renders a fixed top-row status bar with color-coded session state.
|
|
16
|
-
*
|
|
17
|
-
* Pure renderer: produces strings, does NOT write to stdout directly.
|
|
18
|
-
* The caller is responsible for writing the returned strings to the terminal.
|
|
19
|
-
*/
|
|
20
|
-
export declare class StatusBar {
|
|
21
|
-
cols: number;
|
|
22
|
-
constructor(options?: StatusBarOptions);
|
|
23
|
-
/**
|
|
24
|
-
* Render the status bar string for the given state.
|
|
25
|
-
* Returns a complete ANSI sequence: save cursor, move to row 1, render bar, restore cursor.
|
|
26
|
-
*/
|
|
27
|
-
render(state: string, opts?: {
|
|
28
|
-
resetTime?: Date;
|
|
29
|
-
cwd?: string;
|
|
30
|
-
}): string;
|
|
31
|
-
/**
|
|
32
|
-
* Produce the ANSI sequence to initialize the scroll region.
|
|
33
|
-
* Confines scrolling to rows 2..termRows, leaving row 1 for the status bar.
|
|
34
|
-
*/
|
|
35
|
-
initScrollRegion(rows: number): string;
|
|
36
|
-
/**
|
|
37
|
-
* Produce the ANSI cleanup sequence.
|
|
38
|
-
* Resets scroll region, shows cursor, and resets all attributes.
|
|
39
|
-
*/
|
|
40
|
-
cleanup(): string;
|
|
41
|
-
}
|
package/dist/StatusBar.js
CHANGED
|
@@ -1,9 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.StatusBar = void 0;
|
|
4
3
|
exports.formatCountdown = formatCountdown;
|
|
5
|
-
exports.formatResetTime = formatResetTime;
|
|
6
|
-
const ansi_js_1 = require("./ansi.js");
|
|
7
4
|
/**
|
|
8
5
|
* Format a countdown from now until resetTime as a human-readable string.
|
|
9
6
|
* Returns "Xh Xm Xs" for durations over an hour, "Xm Xs" otherwise.
|
|
@@ -20,80 +17,4 @@ function formatCountdown(resetTime) {
|
|
|
20
17
|
}
|
|
21
18
|
return `${minutes}m ${String(seconds).padStart(2, '0')}s`;
|
|
22
19
|
}
|
|
23
|
-
/**
|
|
24
|
-
* Format a Date as a human-readable absolute time (e.g., "2:45 PM").
|
|
25
|
-
*/
|
|
26
|
-
function formatResetTime(resetTime) {
|
|
27
|
-
return resetTime.toLocaleTimeString([], { hour: 'numeric', minute: '2-digit' });
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* StatusBar — renders a fixed top-row status bar with color-coded session state.
|
|
31
|
-
*
|
|
32
|
-
* Pure renderer: produces strings, does NOT write to stdout directly.
|
|
33
|
-
* The caller is responsible for writing the returned strings to the terminal.
|
|
34
|
-
*/
|
|
35
|
-
class StatusBar {
|
|
36
|
-
cols;
|
|
37
|
-
constructor(options = {}) {
|
|
38
|
-
this.cols = options.cols ?? 80;
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* Render the status bar string for the given state.
|
|
42
|
-
* Returns a complete ANSI sequence: save cursor, move to row 1, render bar, restore cursor.
|
|
43
|
-
*/
|
|
44
|
-
render(state, opts = {}) {
|
|
45
|
-
const { resetTime, cwd = '' } = opts;
|
|
46
|
-
let stateText;
|
|
47
|
-
let colorFn;
|
|
48
|
-
switch (state) {
|
|
49
|
-
case 'RUNNING':
|
|
50
|
-
stateText = 'Running';
|
|
51
|
-
colorFn = ansi_js_1.green;
|
|
52
|
-
break;
|
|
53
|
-
case 'WAITING':
|
|
54
|
-
stateText = 'Waiting';
|
|
55
|
-
colorFn = ansi_js_1.yellow;
|
|
56
|
-
break;
|
|
57
|
-
case 'RESUMING':
|
|
58
|
-
stateText = 'Resuming';
|
|
59
|
-
colorFn = ansi_js_1.green;
|
|
60
|
-
break;
|
|
61
|
-
case 'DEAD':
|
|
62
|
-
stateText = 'Dead';
|
|
63
|
-
colorFn = ansi_js_1.red;
|
|
64
|
-
break;
|
|
65
|
-
default:
|
|
66
|
-
stateText = state;
|
|
67
|
-
colorFn = ansi_js_1.green;
|
|
68
|
-
}
|
|
69
|
-
// Build bar content
|
|
70
|
-
const parts = [colorFn(stateText)];
|
|
71
|
-
if (state === 'WAITING' && resetTime) {
|
|
72
|
-
const countdown = formatCountdown(resetTime);
|
|
73
|
-
const resetAt = formatResetTime(resetTime);
|
|
74
|
-
parts.push(`${countdown} (resets ${resetAt})`);
|
|
75
|
-
}
|
|
76
|
-
if (cwd) {
|
|
77
|
-
parts.push(cwd);
|
|
78
|
-
}
|
|
79
|
-
const content = ` ${parts.join(' | ')} `;
|
|
80
|
-
const barContent = (0, ansi_js_1.inverse)(content);
|
|
81
|
-
return `${ansi_js_1.saveCursor}${(0, ansi_js_1.moveTo)(1, 1)}${ansi_js_1.clearLine}${barContent}${ansi_js_1.restoreCursor}`;
|
|
82
|
-
}
|
|
83
|
-
/**
|
|
84
|
-
* Produce the ANSI sequence to initialize the scroll region.
|
|
85
|
-
* Confines scrolling to rows 2..termRows, leaving row 1 for the status bar.
|
|
86
|
-
*/
|
|
87
|
-
initScrollRegion(rows) {
|
|
88
|
-
return `${(0, ansi_js_1.setScrollRegion)(2, rows)}${(0, ansi_js_1.moveTo)(2, 1)}`;
|
|
89
|
-
}
|
|
90
|
-
/**
|
|
91
|
-
* Produce the ANSI cleanup sequence.
|
|
92
|
-
* Resets scroll region, shows cursor, and resets all attributes.
|
|
93
|
-
*/
|
|
94
|
-
cleanup() {
|
|
95
|
-
return `${ansi_js_1.resetScrollRegion}${ansi_js_1.showCursor}${ansi_js_1.resetAttributes}`;
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
exports.StatusBar = StatusBar;
|
|
99
20
|
//# sourceMappingURL=StatusBar.js.map
|
package/dist/StatusBar.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StatusBar.js","sourceRoot":"","sources":["../src/StatusBar.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"StatusBar.js","sourceRoot":"","sources":["../src/StatusBar.ts"],"names":[],"mappings":";;AAKA,0CAWC;AAhBD;;;;GAIG;AACH,SAAgB,eAAe,CAAC,SAAe;IAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAChE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;IAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;IAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IACnD,MAAM,OAAO,GAAG,QAAQ,GAAG,EAAE,CAAC;IAE9B,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QACd,OAAO,GAAG,KAAK,KAAK,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC;IAC/F,CAAC;IACD,OAAO,GAAG,OAAO,KAAK,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC;AAC5D,CAAC"}
|
package/dist/cli.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const ProcessSupervisor_js_1 = require("./ProcessSupervisor.js");
|
|
4
|
-
const
|
|
4
|
+
const StatusBar_js_1 = require("./StatusBar.js");
|
|
5
5
|
const fs_1 = require("fs");
|
|
6
6
|
const path_1 = require("path");
|
|
7
7
|
const child_process_1 = require("child_process");
|
|
@@ -126,15 +126,9 @@ function main() {
|
|
|
126
126
|
overrideCooldownSec = undefined;
|
|
127
127
|
}
|
|
128
128
|
const { claudeArgs } = parseArgs(process.argv);
|
|
129
|
-
const cols = () => process.stdout.columns ?? 80;
|
|
130
|
-
const rows = () => process.stdout.rows ?? 24;
|
|
131
129
|
const cwd = process.cwd();
|
|
132
130
|
const folderName = cwd.split('/').pop() ?? cwd;
|
|
133
|
-
// Create display components
|
|
134
|
-
const card = new CountdownCard_js_1.CountdownCard({ cols: cols(), rows: rows() });
|
|
135
131
|
let countdownInterval = null;
|
|
136
|
-
let ownsTerminal = false;
|
|
137
|
-
let currentResetTime = null;
|
|
138
132
|
// Create supervisor with output routed through the standard handler
|
|
139
133
|
const supervisor = new ProcessSupervisor_js_1.ProcessSupervisor({
|
|
140
134
|
onOutput: (data) => {
|
|
@@ -151,47 +145,18 @@ function main() {
|
|
|
151
145
|
countdownInterval = null;
|
|
152
146
|
}
|
|
153
147
|
if (state === 'WAITING' && resetTime) {
|
|
154
|
-
setTerminalTitle(`${folderName} -
|
|
155
|
-
currentResetTime = resetTime;
|
|
156
|
-
if (!ownsTerminal) {
|
|
157
|
-
ownsTerminal = true;
|
|
158
|
-
process.stdout.write('\x1b[?1049h');
|
|
159
|
-
}
|
|
160
|
-
process.stdout.write('\x1b[2J\x1b[3J\x1b[H');
|
|
161
|
-
process.stdout.write(card.render({ resetTime, cwd }));
|
|
148
|
+
setTerminalTitle(`${folderName} - Cooldown ${(0, StatusBar_js_1.formatCountdown)(resetTime)}`);
|
|
162
149
|
countdownInterval = setInterval(() => {
|
|
163
150
|
if (supervisor.state !== 'WAITING') {
|
|
164
151
|
clearInterval(countdownInterval);
|
|
165
152
|
countdownInterval = null;
|
|
166
153
|
return;
|
|
167
154
|
}
|
|
168
|
-
setTerminalTitle(`${folderName} -
|
|
169
|
-
process.stdout.write('\x1b[2J\x1b[3J\x1b[H');
|
|
170
|
-
process.stdout.write(card.render({ resetTime, cwd }));
|
|
155
|
+
setTerminalTitle(`${folderName} - Cooldown ${(0, StatusBar_js_1.formatCountdown)(resetTime)}`);
|
|
171
156
|
}, 1000);
|
|
172
157
|
}
|
|
173
158
|
else if (state === 'RUNNING' || state === 'DEAD') {
|
|
174
159
|
setTerminalTitle('');
|
|
175
|
-
currentResetTime = null;
|
|
176
|
-
if (ownsTerminal) {
|
|
177
|
-
ownsTerminal = false;
|
|
178
|
-
// Leave alternate screen buffer (restores saved main screen)
|
|
179
|
-
process.stdout.write('\x1b[?1049l');
|
|
180
|
-
// Clear the restored stale content — Claude Code's state has changed
|
|
181
|
-
// while we were on the alternate screen, so the restored content is
|
|
182
|
-
// out of sync. Clearing lets Claude redraw cleanly after the resize
|
|
183
|
-
// signal (sent by ProcessSupervisor on RUNNING state change).
|
|
184
|
-
process.stdout.write('\x1b[2J\x1b[3J\x1b[H');
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
});
|
|
188
|
-
// Handle terminal resize
|
|
189
|
-
process.stdout.on('resize', () => {
|
|
190
|
-
card.cols = cols();
|
|
191
|
-
card.rows = rows();
|
|
192
|
-
if (ownsTerminal && currentResetTime) {
|
|
193
|
-
process.stdout.write('\x1b[2J\x1b[3J\x1b[H');
|
|
194
|
-
process.stdout.write(card.render({ resetTime: currentResetTime, cwd }));
|
|
195
160
|
}
|
|
196
161
|
});
|
|
197
162
|
// Terminal cleanup on all exit paths
|
|
@@ -200,9 +165,6 @@ function main() {
|
|
|
200
165
|
clearInterval(countdownInterval);
|
|
201
166
|
countdownInterval = null;
|
|
202
167
|
}
|
|
203
|
-
if (ownsTerminal) {
|
|
204
|
-
process.stdout.write('\x1b[?1049l');
|
|
205
|
-
}
|
|
206
168
|
setTerminalTitle('');
|
|
207
169
|
};
|
|
208
170
|
process.on('exit', cleanup);
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;AAAA,iEAA2D;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|