shadok-ai 0.1.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/README.md +196 -0
- package/dist/args.d.ts +8 -0
- package/dist/args.js +17 -0
- package/dist/args.js.map +1 -0
- package/dist/channels.d.ts +61 -0
- package/dist/channels.js +169 -0
- package/dist/channels.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +100 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +31 -0
- package/dist/config.js +59 -0
- package/dist/config.js.map +1 -0
- package/dist/detect.d.ts +17 -0
- package/dist/detect.js +41 -0
- package/dist/detect.js.map +1 -0
- package/dist/extract.d.ts +55 -0
- package/dist/extract.js +269 -0
- package/dist/extract.js.map +1 -0
- package/dist/main.d.ts +2 -0
- package/dist/main.js +90 -0
- package/dist/main.js.map +1 -0
- package/dist/pace.d.ts +33 -0
- package/dist/pace.js +53 -0
- package/dist/pace.js.map +1 -0
- package/dist/retry.d.ts +15 -0
- package/dist/retry.js +40 -0
- package/dist/retry.js.map +1 -0
- package/dist/secrets.d.ts +21 -0
- package/dist/secrets.js +71 -0
- package/dist/secrets.js.map +1 -0
- package/dist/server.d.ts +1 -0
- package/dist/server.js +854 -0
- package/dist/server.js.map +1 -0
- package/dist/session.d.ts +74 -0
- package/dist/session.js +244 -0
- package/dist/session.js.map +1 -0
- package/dist/setup-prompt.d.ts +6 -0
- package/dist/setup-prompt.js +25 -0
- package/dist/setup-prompt.js.map +1 -0
- package/dist/supervisor.d.ts +55 -0
- package/dist/supervisor.js +61 -0
- package/dist/supervisor.js.map +1 -0
- package/dist/tail.d.ts +66 -0
- package/dist/tail.js +244 -0
- package/dist/tail.js.map +1 -0
- package/dist/telegram.d.ts +48 -0
- package/dist/telegram.js +565 -0
- package/dist/telegram.js.map +1 -0
- package/dist/tmux.d.ts +69 -0
- package/dist/tmux.js +267 -0
- package/dist/tmux.js.map +1 -0
- package/dist/update-flag.d.ts +13 -0
- package/dist/update-flag.js +36 -0
- package/dist/update-flag.js.map +1 -0
- package/dist/updater.d.ts +18 -0
- package/dist/updater.js +45 -0
- package/dist/updater.js.map +1 -0
- package/dist/usage.d.ts +23 -0
- package/dist/usage.js +125 -0
- package/dist/usage.js.map +1 -0
- package/dist/worktree.d.ts +63 -0
- package/dist/worktree.js +153 -0
- package/dist/worktree.js.map +1 -0
- package/package.json +44 -0
- package/public/index.html +2583 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
export interface PilotOptions {
|
|
2
|
+
/** Path to the claude executable (default: "claude" from PATH). */
|
|
3
|
+
claudePath?: string;
|
|
4
|
+
/** Arguments passed to the CLI (e.g. ["--resume", "<id>"]). */
|
|
5
|
+
args?: string[];
|
|
6
|
+
/** Working directory of the session. */
|
|
7
|
+
cwd?: string;
|
|
8
|
+
cols?: number;
|
|
9
|
+
rows?: number;
|
|
10
|
+
env?: Record<string, string>;
|
|
11
|
+
}
|
|
12
|
+
export interface WaitOptions {
|
|
13
|
+
timeoutMs?: number;
|
|
14
|
+
}
|
|
15
|
+
export interface WaitIdleOptions extends WaitOptions {
|
|
16
|
+
/** How long the screen must stay unchanged to be considered "idle". */
|
|
17
|
+
stableMs?: number;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Drives an interactive `claude` session (the TUI) through a pseudo-terminal.
|
|
21
|
+
*
|
|
22
|
+
* The output stream is replayed into a headless virtual terminal
|
|
23
|
+
* (@xterm/headless), which lets us read the screen as a human would see it
|
|
24
|
+
* instead of parsing the raw ANSI escape stream.
|
|
25
|
+
*/
|
|
26
|
+
export declare class PtyPilot {
|
|
27
|
+
private readonly opts;
|
|
28
|
+
private proc;
|
|
29
|
+
private term;
|
|
30
|
+
private dataListeners;
|
|
31
|
+
private exitListeners;
|
|
32
|
+
private lastDataAt;
|
|
33
|
+
private exited;
|
|
34
|
+
constructor(options?: PilotOptions);
|
|
35
|
+
/** Spawns the `claude` process inside a PTY. */
|
|
36
|
+
start(): void;
|
|
37
|
+
/** Raw stream (with ANSI sequences), useful for a "mirror" mode. */
|
|
38
|
+
onData(cb: (chunk: string) => void): () => void;
|
|
39
|
+
onExit(cb: (code: number) => void): () => void;
|
|
40
|
+
get hasExited(): boolean;
|
|
41
|
+
/** The currently visible screen (the last rendered `rows` lines). */
|
|
42
|
+
screen(): string;
|
|
43
|
+
/** The whole terminal content, scrollback included. */
|
|
44
|
+
fullBuffer(): string;
|
|
45
|
+
/** Writes text as-is into the TUI (without submitting). */
|
|
46
|
+
write(text: string): void;
|
|
47
|
+
/**
|
|
48
|
+
* Types a prompt then presses Enter.
|
|
49
|
+
*
|
|
50
|
+
* The TUI flushes stdin received before its keyboard handler is ready:
|
|
51
|
+
* we paste the text (bracketed paste) and retry until it shows up on
|
|
52
|
+
* screen, clearing partial input (Ctrl-U) between attempts. Then we
|
|
53
|
+
* verify the message actually went through (spinner visible or "❯ …"
|
|
54
|
+
* echo in the transcript), with retries.
|
|
55
|
+
*/
|
|
56
|
+
submit(text: string): Promise<void>;
|
|
57
|
+
/** A concise client-facing error; the full screen goes to the server log only. */
|
|
58
|
+
private submitError;
|
|
59
|
+
press(key: "enter" | "escape" | "up" | "down" | "left" | "right" | "tab" | "ctrl-c"): void;
|
|
60
|
+
/** True when the TUI indicates that Claude is working. */
|
|
61
|
+
isWorking(): boolean;
|
|
62
|
+
/** Waits until a predicate on the screen becomes true. */
|
|
63
|
+
waitFor(predicate: (screen: string) => boolean, { timeoutMs }?: WaitOptions): Promise<string>;
|
|
64
|
+
/**
|
|
65
|
+
* Waits until Claude is idle: no working marker on screen and the screen
|
|
66
|
+
* stable for `stableMs`.
|
|
67
|
+
*/
|
|
68
|
+
waitForIdle({ stableMs, timeoutMs, }?: WaitIdleOptions): Promise<string>;
|
|
69
|
+
/** Waits for the process to exit (after /exit for example). */
|
|
70
|
+
waitForExit({ timeoutMs }?: WaitOptions): Promise<number>;
|
|
71
|
+
/** Clean shutdown: /exit, then kill if the process does not leave. */
|
|
72
|
+
stop(): Promise<void>;
|
|
73
|
+
kill(): void;
|
|
74
|
+
}
|
package/dist/session.js
ADDED
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
import pty from "node-pty";
|
|
2
|
+
import xterm from "@xterm/headless";
|
|
3
|
+
import { screenShowsWork, inputHasProbe } from "./detect.js";
|
|
4
|
+
const { Terminal } = xterm;
|
|
5
|
+
/**
|
|
6
|
+
* Drives an interactive `claude` session (the TUI) through a pseudo-terminal.
|
|
7
|
+
*
|
|
8
|
+
* The output stream is replayed into a headless virtual terminal
|
|
9
|
+
* (@xterm/headless), which lets us read the screen as a human would see it
|
|
10
|
+
* instead of parsing the raw ANSI escape stream.
|
|
11
|
+
*/
|
|
12
|
+
export class PtyPilot {
|
|
13
|
+
opts;
|
|
14
|
+
proc = null;
|
|
15
|
+
term;
|
|
16
|
+
dataListeners = new Set();
|
|
17
|
+
exitListeners = new Set();
|
|
18
|
+
lastDataAt = 0;
|
|
19
|
+
exited = false;
|
|
20
|
+
constructor(options = {}) {
|
|
21
|
+
this.opts = { cols: 100, rows: 40, ...options };
|
|
22
|
+
this.term = new Terminal({
|
|
23
|
+
cols: this.opts.cols,
|
|
24
|
+
rows: this.opts.rows,
|
|
25
|
+
scrollback: 10_000,
|
|
26
|
+
allowProposedApi: true,
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
/** Spawns the `claude` process inside a PTY. */
|
|
30
|
+
start() {
|
|
31
|
+
if (this.proc)
|
|
32
|
+
throw new Error("Session already started.");
|
|
33
|
+
// Strip variables from a possible parent Claude Code session: a nested
|
|
34
|
+
// `claude` that detects them may disable its interactive mode.
|
|
35
|
+
const env = {};
|
|
36
|
+
for (const [k, v] of Object.entries(process.env)) {
|
|
37
|
+
if (v === undefined)
|
|
38
|
+
continue;
|
|
39
|
+
if (/^(CLAUDE|CLAUDECODE|AI_AGENT)/.test(k))
|
|
40
|
+
continue;
|
|
41
|
+
env[k] = v;
|
|
42
|
+
}
|
|
43
|
+
this.proc = pty.spawn(this.opts.claudePath ?? "claude", this.opts.args ?? [], {
|
|
44
|
+
name: "xterm-256color",
|
|
45
|
+
cols: this.opts.cols,
|
|
46
|
+
rows: this.opts.rows,
|
|
47
|
+
cwd: this.opts.cwd ?? process.cwd(),
|
|
48
|
+
env: { ...env, TERM: "xterm-256color", ...this.opts.env },
|
|
49
|
+
});
|
|
50
|
+
this.proc.onData((chunk) => {
|
|
51
|
+
this.lastDataAt = Date.now();
|
|
52
|
+
this.term.write(chunk);
|
|
53
|
+
for (const cb of this.dataListeners)
|
|
54
|
+
cb(chunk);
|
|
55
|
+
});
|
|
56
|
+
// The app queries the terminal (cursor position, capabilities…) and
|
|
57
|
+
// waits for the responses. xterm generates them through onData: forward
|
|
58
|
+
// them back to the PTY so we behave like a real terminal.
|
|
59
|
+
this.term.onData((response) => this.proc?.write(response));
|
|
60
|
+
this.term.onBinary((response) => this.proc?.write(response));
|
|
61
|
+
this.proc.onExit(({ exitCode }) => {
|
|
62
|
+
this.exited = true;
|
|
63
|
+
for (const cb of this.exitListeners)
|
|
64
|
+
cb(exitCode);
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
/** Raw stream (with ANSI sequences), useful for a "mirror" mode. */
|
|
68
|
+
onData(cb) {
|
|
69
|
+
this.dataListeners.add(cb);
|
|
70
|
+
return () => this.dataListeners.delete(cb);
|
|
71
|
+
}
|
|
72
|
+
onExit(cb) {
|
|
73
|
+
this.exitListeners.add(cb);
|
|
74
|
+
return () => this.exitListeners.delete(cb);
|
|
75
|
+
}
|
|
76
|
+
get hasExited() {
|
|
77
|
+
return this.exited;
|
|
78
|
+
}
|
|
79
|
+
/** The currently visible screen (the last rendered `rows` lines). */
|
|
80
|
+
screen() {
|
|
81
|
+
const buf = this.term.buffer.active;
|
|
82
|
+
const lines = [];
|
|
83
|
+
const start = buf.length - this.term.rows;
|
|
84
|
+
for (let i = Math.max(0, start); i < buf.length; i++) {
|
|
85
|
+
lines.push(buf.getLine(i)?.translateToString(true) ?? "");
|
|
86
|
+
}
|
|
87
|
+
return lines.join("\n");
|
|
88
|
+
}
|
|
89
|
+
/** The whole terminal content, scrollback included. */
|
|
90
|
+
fullBuffer() {
|
|
91
|
+
const buf = this.term.buffer.active;
|
|
92
|
+
const lines = [];
|
|
93
|
+
for (let i = 0; i < buf.length; i++) {
|
|
94
|
+
lines.push(buf.getLine(i)?.translateToString(true) ?? "");
|
|
95
|
+
}
|
|
96
|
+
// Drop trailing empty lines.
|
|
97
|
+
while (lines.length && lines[lines.length - 1].trim() === "")
|
|
98
|
+
lines.pop();
|
|
99
|
+
return lines.join("\n");
|
|
100
|
+
}
|
|
101
|
+
/** Writes text as-is into the TUI (without submitting). */
|
|
102
|
+
write(text) {
|
|
103
|
+
if (!this.proc)
|
|
104
|
+
throw new Error("Session not started.");
|
|
105
|
+
this.proc.write(text);
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Types a prompt then presses Enter.
|
|
109
|
+
*
|
|
110
|
+
* The TUI flushes stdin received before its keyboard handler is ready:
|
|
111
|
+
* we paste the text (bracketed paste) and retry until it shows up on
|
|
112
|
+
* screen, clearing partial input (Ctrl-U) between attempts. Then we
|
|
113
|
+
* verify the message actually went through (spinner visible or "❯ …"
|
|
114
|
+
* echo in the transcript), with retries.
|
|
115
|
+
*/
|
|
116
|
+
async submit(text) {
|
|
117
|
+
const probe = text.slice(0, 15);
|
|
118
|
+
let typed = false;
|
|
119
|
+
for (let attempt = 0; attempt < 6; attempt++) {
|
|
120
|
+
this.write(`\x1b[200~${text}\x1b[201~`);
|
|
121
|
+
try {
|
|
122
|
+
await this.waitFor((s) => s.includes(probe), { timeoutMs: 2_000 });
|
|
123
|
+
typed = true;
|
|
124
|
+
break;
|
|
125
|
+
}
|
|
126
|
+
catch {
|
|
127
|
+
this.write("\x15"); // Ctrl-U: clear any partial input.
|
|
128
|
+
await sleep(300);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
if (!typed) {
|
|
132
|
+
throw this.submitError("the text never appeared in the input box");
|
|
133
|
+
}
|
|
134
|
+
await sleep(200);
|
|
135
|
+
// Sent = spinner visible, or the text we typed has LEFT the input box.
|
|
136
|
+
// (Not "echo still on screen" — a fast turn scrolls it away and that
|
|
137
|
+
// false-negatived, dumping the whole screen as an error.)
|
|
138
|
+
const submitted = (s) => screenShowsWork(s) || !inputHasProbe(s, probe);
|
|
139
|
+
for (let attempt = 0; attempt < 3; attempt++) {
|
|
140
|
+
this.press("enter");
|
|
141
|
+
try {
|
|
142
|
+
await this.waitFor(submitted, { timeoutMs: 3_000 });
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
catch {
|
|
146
|
+
// Enter was swallowed by the TUI: try again.
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
throw this.submitError("the prompt does not seem to have been sent");
|
|
150
|
+
}
|
|
151
|
+
/** A concise client-facing error; the full screen goes to the server log only. */
|
|
152
|
+
submitError(reason) {
|
|
153
|
+
console.error(`submit failed — ${reason}. Screen:\n${this.screen()}`);
|
|
154
|
+
return new Error(`submit: ${reason}.`);
|
|
155
|
+
}
|
|
156
|
+
press(key) {
|
|
157
|
+
const seq = {
|
|
158
|
+
enter: "\r",
|
|
159
|
+
escape: "\x1b",
|
|
160
|
+
up: "\x1b[A",
|
|
161
|
+
down: "\x1b[B",
|
|
162
|
+
left: "\x1b[D",
|
|
163
|
+
right: "\x1b[C",
|
|
164
|
+
tab: "\t",
|
|
165
|
+
"ctrl-c": "\x03",
|
|
166
|
+
};
|
|
167
|
+
this.write(seq[key]);
|
|
168
|
+
}
|
|
169
|
+
/** True when the TUI indicates that Claude is working. */
|
|
170
|
+
isWorking() {
|
|
171
|
+
return screenShowsWork(this.screen());
|
|
172
|
+
}
|
|
173
|
+
/** Waits until a predicate on the screen becomes true. */
|
|
174
|
+
async waitFor(predicate, { timeoutMs = 60_000 } = {}) {
|
|
175
|
+
const deadline = Date.now() + timeoutMs;
|
|
176
|
+
while (Date.now() < deadline) {
|
|
177
|
+
if (this.exited)
|
|
178
|
+
throw new Error("The claude process has exited.");
|
|
179
|
+
const s = this.screen();
|
|
180
|
+
if (predicate(s))
|
|
181
|
+
return s;
|
|
182
|
+
await sleep(100);
|
|
183
|
+
}
|
|
184
|
+
throw new Error(`waitFor: timed out after ${timeoutMs} ms. Last screen:\n${this.screen()}`);
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Waits until Claude is idle: no working marker on screen and the screen
|
|
188
|
+
* stable for `stableMs`.
|
|
189
|
+
*/
|
|
190
|
+
async waitForIdle({ stableMs = 1_500, timeoutMs = 600_000, } = {}) {
|
|
191
|
+
const deadline = Date.now() + timeoutMs;
|
|
192
|
+
let lastScreen = "";
|
|
193
|
+
let stableSince = 0;
|
|
194
|
+
while (Date.now() < deadline) {
|
|
195
|
+
if (this.exited)
|
|
196
|
+
throw new Error("The claude process has exited.");
|
|
197
|
+
const s = this.screen();
|
|
198
|
+
const working = screenShowsWork(s);
|
|
199
|
+
if (!working && s === lastScreen) {
|
|
200
|
+
if (stableSince === 0)
|
|
201
|
+
stableSince = Date.now();
|
|
202
|
+
if (Date.now() - stableSince >= stableMs)
|
|
203
|
+
return s;
|
|
204
|
+
}
|
|
205
|
+
else {
|
|
206
|
+
stableSince = 0;
|
|
207
|
+
lastScreen = s;
|
|
208
|
+
}
|
|
209
|
+
await sleep(150);
|
|
210
|
+
}
|
|
211
|
+
throw new Error(`waitForIdle: timed out after ${timeoutMs} ms. Last screen:\n${this.screen()}`);
|
|
212
|
+
}
|
|
213
|
+
/** Waits for the process to exit (after /exit for example). */
|
|
214
|
+
waitForExit({ timeoutMs = 15_000 } = {}) {
|
|
215
|
+
if (this.exited)
|
|
216
|
+
return Promise.resolve(0);
|
|
217
|
+
return new Promise((resolve, reject) => {
|
|
218
|
+
const timer = setTimeout(() => reject(new Error("waitForExit: timed out")), timeoutMs);
|
|
219
|
+
this.onExit((code) => {
|
|
220
|
+
clearTimeout(timer);
|
|
221
|
+
resolve(code);
|
|
222
|
+
});
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
/** Clean shutdown: /exit, then kill if the process does not leave. */
|
|
226
|
+
async stop() {
|
|
227
|
+
if (!this.proc || this.exited)
|
|
228
|
+
return;
|
|
229
|
+
try {
|
|
230
|
+
await this.submit("/exit");
|
|
231
|
+
await this.waitForExit({ timeoutMs: 8_000 });
|
|
232
|
+
}
|
|
233
|
+
catch {
|
|
234
|
+
this.proc.kill();
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
kill() {
|
|
238
|
+
this.proc?.kill();
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
function sleep(ms) {
|
|
242
|
+
return new Promise((r) => setTimeout(r, ms));
|
|
243
|
+
}
|
|
244
|
+
//# sourceMappingURL=session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* First-run prompt for the Telegram bot token. Masked input (the token is a
|
|
3
|
+
* secret — never echoed). Returns the trimmed token, or null if the user just
|
|
4
|
+
* pressed Enter to skip. TTY-only; callers must not invoke it headless.
|
|
5
|
+
*/
|
|
6
|
+
export declare function promptToken(): Promise<string | null>;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import readline from "node:readline";
|
|
2
|
+
/**
|
|
3
|
+
* First-run prompt for the Telegram bot token. Masked input (the token is a
|
|
4
|
+
* secret — never echoed). Returns the trimmed token, or null if the user just
|
|
5
|
+
* pressed Enter to skip. TTY-only; callers must not invoke it headless.
|
|
6
|
+
*/
|
|
7
|
+
export function promptToken() {
|
|
8
|
+
const rl = readline.createInterface({ input: process.stdin, output: process.stdout, terminal: true });
|
|
9
|
+
// Mask keystrokes: overwrite whatever readline would echo.
|
|
10
|
+
const output = process.stdout;
|
|
11
|
+
rl._writeToOutput = (s) => {
|
|
12
|
+
// Let the prompt text and newlines through; hide the typed characters.
|
|
13
|
+
if (s.includes("\n") || s.startsWith("Telegram"))
|
|
14
|
+
output.write(s);
|
|
15
|
+
};
|
|
16
|
+
return new Promise((resolve) => {
|
|
17
|
+
rl.question("Telegram bot token? (Enter to skip — you can add it later) ", (answer) => {
|
|
18
|
+
rl.close();
|
|
19
|
+
output.write("\n");
|
|
20
|
+
const t = answer.trim();
|
|
21
|
+
resolve(t.length ? t : null);
|
|
22
|
+
});
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=setup-prompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup-prompt.js","sourceRoot":"","sources":["../src/setup-prompt.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,eAAe,CAAC;AAErC;;;;GAIG;AACH,MAAM,UAAU,WAAW;IACzB,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAEtG,2DAA2D;IAC3D,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAC7B,EAAyD,CAAC,cAAc,GAAG,CAAC,CAAS,EAAE,EAAE;QACxF,uEAAuE;QACvE,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC;YAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACpE,CAAC,CAAC;IAEF,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,EAAE,CAAC,QAAQ,CACT,6DAA6D,EAC7D,CAAC,MAAM,EAAE,EAAE;YACT,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACnB,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;YACxB,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC/B,CAAC,CACF,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Supervisor: spawns the server child, watches its exit, and decides whether to
|
|
3
|
+
* respawn (crash, with backoff), update (exit code 75), stop (0), or give up
|
|
4
|
+
* (crash-looping). The decision is a pure function so it is unit-tested without
|
|
5
|
+
* spawning anything; runSupervisor() wires it to real process/npm adapters.
|
|
6
|
+
*/
|
|
7
|
+
/** Sentinel exit code the server uses to ask the supervisor for an update. */
|
|
8
|
+
export declare const UPDATE_EXIT_CODE = 75;
|
|
9
|
+
export interface BackoffOpts {
|
|
10
|
+
windowMs: number;
|
|
11
|
+
cap: number;
|
|
12
|
+
baseMs: number;
|
|
13
|
+
maxMs: number;
|
|
14
|
+
}
|
|
15
|
+
export declare const DEFAULT_BACKOFF: BackoffOpts;
|
|
16
|
+
export type Action = {
|
|
17
|
+
kind: "stop";
|
|
18
|
+
} | {
|
|
19
|
+
kind: "update";
|
|
20
|
+
} | {
|
|
21
|
+
kind: "respawn";
|
|
22
|
+
delayMs: number;
|
|
23
|
+
} | {
|
|
24
|
+
kind: "give-up";
|
|
25
|
+
reason: string;
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Map a child exit code to the next action. `recentCrashes` is the list of
|
|
29
|
+
* timestamps (ms) of prior crash-respawns; `now` is the current time. Only
|
|
30
|
+
* genuine crashes count toward the cap — a clean stop or an update do not.
|
|
31
|
+
*/
|
|
32
|
+
export declare function nextAction(code: number, recentCrashes: number[], now: number, opts?: BackoffOpts): Action;
|
|
33
|
+
export interface SupervisorDeps {
|
|
34
|
+
/** Spawn the server child; resolves with its exit code when it exits. */
|
|
35
|
+
spawnServer: () => Promise<number>;
|
|
36
|
+
/** Fetch + install the latest server; returns the result to hand the child. */
|
|
37
|
+
update: () => Promise<{
|
|
38
|
+
ok: true;
|
|
39
|
+
version: string;
|
|
40
|
+
} | {
|
|
41
|
+
ok: false;
|
|
42
|
+
error: string;
|
|
43
|
+
}>;
|
|
44
|
+
/** Persist the update result so the next server boot can announce it. */
|
|
45
|
+
writeUpdateResult: (r: {
|
|
46
|
+
ok: boolean;
|
|
47
|
+
version?: string;
|
|
48
|
+
error?: string;
|
|
49
|
+
}) => void;
|
|
50
|
+
sleep: (ms: number) => Promise<void>;
|
|
51
|
+
now: () => number;
|
|
52
|
+
log: (msg: string) => void;
|
|
53
|
+
}
|
|
54
|
+
/** Run the supervise loop until the child stops cleanly or we give up. */
|
|
55
|
+
export declare function runSupervisor(deps: SupervisorDeps, opts?: BackoffOpts): Promise<number>;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Supervisor: spawns the server child, watches its exit, and decides whether to
|
|
3
|
+
* respawn (crash, with backoff), update (exit code 75), stop (0), or give up
|
|
4
|
+
* (crash-looping). The decision is a pure function so it is unit-tested without
|
|
5
|
+
* spawning anything; runSupervisor() wires it to real process/npm adapters.
|
|
6
|
+
*/
|
|
7
|
+
/** Sentinel exit code the server uses to ask the supervisor for an update. */
|
|
8
|
+
export const UPDATE_EXIT_CODE = 75;
|
|
9
|
+
export const DEFAULT_BACKOFF = {
|
|
10
|
+
windowMs: 60_000,
|
|
11
|
+
cap: 5,
|
|
12
|
+
baseMs: 1_000,
|
|
13
|
+
maxMs: 30_000,
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Map a child exit code to the next action. `recentCrashes` is the list of
|
|
17
|
+
* timestamps (ms) of prior crash-respawns; `now` is the current time. Only
|
|
18
|
+
* genuine crashes count toward the cap — a clean stop or an update do not.
|
|
19
|
+
*/
|
|
20
|
+
export function nextAction(code, recentCrashes, now, opts = DEFAULT_BACKOFF) {
|
|
21
|
+
if (code === 0)
|
|
22
|
+
return { kind: "stop" };
|
|
23
|
+
if (code === UPDATE_EXIT_CODE)
|
|
24
|
+
return { kind: "update" };
|
|
25
|
+
const inWindow = recentCrashes.filter((t) => now - t < opts.windowMs);
|
|
26
|
+
if (inWindow.length >= opts.cap) {
|
|
27
|
+
return { kind: "give-up", reason: `${inWindow.length} crashes within ${opts.windowMs / 1000}s` };
|
|
28
|
+
}
|
|
29
|
+
const delayMs = Math.min(opts.maxMs, opts.baseMs * 2 ** inWindow.length);
|
|
30
|
+
return { kind: "respawn", delayMs };
|
|
31
|
+
}
|
|
32
|
+
/** Run the supervise loop until the child stops cleanly or we give up. */
|
|
33
|
+
export async function runSupervisor(deps, opts = DEFAULT_BACKOFF) {
|
|
34
|
+
const recentCrashes = [];
|
|
35
|
+
for (;;) {
|
|
36
|
+
const code = await deps.spawnServer();
|
|
37
|
+
const action = nextAction(code, recentCrashes, deps.now(), opts);
|
|
38
|
+
switch (action.kind) {
|
|
39
|
+
case "stop":
|
|
40
|
+
deps.log("server stopped cleanly");
|
|
41
|
+
return 0;
|
|
42
|
+
case "give-up":
|
|
43
|
+
deps.log(`giving up: ${action.reason}`);
|
|
44
|
+
return 1;
|
|
45
|
+
case "update": {
|
|
46
|
+
deps.log("update requested");
|
|
47
|
+
const r = await deps.update();
|
|
48
|
+
deps.writeUpdateResult(r);
|
|
49
|
+
deps.log(r.ok ? `updated to v${r.version}` : `update failed: ${r.error}`);
|
|
50
|
+
// Respawn immediately; a failed update just reruns the current version.
|
|
51
|
+
break;
|
|
52
|
+
}
|
|
53
|
+
case "respawn":
|
|
54
|
+
recentCrashes.push(deps.now());
|
|
55
|
+
deps.log(`server crashed (code ${code}); respawning in ${action.delayMs}ms`);
|
|
56
|
+
await deps.sleep(action.delayMs);
|
|
57
|
+
break;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=supervisor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"supervisor.js","sourceRoot":"","sources":["../src/supervisor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,8EAA8E;AAC9E,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,CAAC;AASnC,MAAM,CAAC,MAAM,eAAe,GAAgB;IAC1C,QAAQ,EAAE,MAAM;IAChB,GAAG,EAAE,CAAC;IACN,MAAM,EAAE,KAAK;IACb,KAAK,EAAE,MAAM;CACd,CAAC;AAQF;;;;GAIG;AACH,MAAM,UAAU,UAAU,CACxB,IAAY,EACZ,aAAuB,EACvB,GAAW,EACX,IAAI,GAAgB,eAAe;IAEnC,IAAI,IAAI,KAAK,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IACxC,IAAI,IAAI,KAAK,gBAAgB;QAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IACzD,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;IACtE,IAAI,QAAQ,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;QAChC,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC,MAAM,mBAAmB,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,EAAE,CAAC;IACnG,CAAC;IACD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;IACzE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;AACtC,CAAC;AAgBD,0EAA0E;AAC1E,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAoB,EAAE,IAAI,GAAgB,eAAe;IAC3F,MAAM,aAAa,GAAa,EAAE,CAAC;IACnC,SAAS,CAAC;QACR,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QACtC,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,EAAE,aAAa,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC;QACjE,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;YACpB,KAAK,MAAM;gBACT,IAAI,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;gBACnC,OAAO,CAAC,CAAC;YACX,KAAK,SAAS;gBACZ,IAAI,CAAC,GAAG,CAAC,cAAc,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;gBACxC,OAAO,CAAC,CAAC;YACX,KAAK,QAAQ,EAAE,CAAC;gBACd,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;gBAC7B,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;gBAC9B,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;gBAC1B,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;gBAC1E,wEAAwE;gBACxE,MAAM;YACR,CAAC;YACD,KAAK,SAAS;gBACZ,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;gBAC/B,IAAI,CAAC,GAAG,CAAC,wBAAwB,IAAI,oBAAoB,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC;gBAC7E,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBACjC,MAAM;QACV,CAAC;IACH,CAAC;AACH,CAAC"}
|
package/dist/tail.d.ts
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/** Token counts of one assistant API message (`message.usage` in the .jsonl). */
|
|
2
|
+
export interface TokenUsage {
|
|
3
|
+
input: number;
|
|
4
|
+
output: number;
|
|
5
|
+
cacheCreation: number;
|
|
6
|
+
cacheRead: number;
|
|
7
|
+
}
|
|
8
|
+
/** A streamed piece of an assistant turn, read from the session .jsonl. */
|
|
9
|
+
export type TailEvent = {
|
|
10
|
+
kind: "text";
|
|
11
|
+
text: string;
|
|
12
|
+
} | {
|
|
13
|
+
kind: "tool";
|
|
14
|
+
id: string;
|
|
15
|
+
name: string;
|
|
16
|
+
summary: string;
|
|
17
|
+
} | {
|
|
18
|
+
kind: "result";
|
|
19
|
+
toolUseId: string;
|
|
20
|
+
text: string;
|
|
21
|
+
isError: boolean;
|
|
22
|
+
} | {
|
|
23
|
+
kind: "usage";
|
|
24
|
+
messageId: string;
|
|
25
|
+
usage: TokenUsage;
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Path of the .jsonl transcript Claude Code writes for a session.
|
|
29
|
+
*
|
|
30
|
+
* The obvious path is `<encoded cwd>/<id>.jsonl`, but Claude derives the
|
|
31
|
+
* encoded dir from the cwd it was LAUNCHED with. After a repo/worktree move
|
|
32
|
+
* (or the shadok-ai rename) a still-running agent keeps writing under its
|
|
33
|
+
* original encoded dir, which no longer matches the current cwd — so the tail
|
|
34
|
+
* would watch a stale file and nothing streams. To be immune to that drift we
|
|
35
|
+
* prefer the newest `<id>.jsonl` found anywhere under ~/.claude/projects; the
|
|
36
|
+
* file being actively appended is always the newest. Falls back to the
|
|
37
|
+
* cwd-derived path for a brand-new session whose file doesn't exist yet.
|
|
38
|
+
*/
|
|
39
|
+
export declare function sessionFilePath(cwd: string, sessionId: string): string;
|
|
40
|
+
/** The most-recently-modified `<id>.jsonl` across all project dirs, or null. */
|
|
41
|
+
export declare function newestTranscriptById(sessionId: string): string | null;
|
|
42
|
+
/**
|
|
43
|
+
* Tails a session .jsonl: watches for appended lines and yields the assistant
|
|
44
|
+
* `text` and `tool_use` blocks as they are written — the authoritative,
|
|
45
|
+
* untruncated content, streamed at message granularity.
|
|
46
|
+
*
|
|
47
|
+
* `onEvent` fires for each new block. Returns a stop() function.
|
|
48
|
+
* Starts from the current end of file, so only NEW turns are streamed
|
|
49
|
+
* (existing history is replayed separately via loadHistory).
|
|
50
|
+
*/
|
|
51
|
+
export declare function tailSession(file: string, onEvent: (e: TailEvent) => void, intervalMs?: number): () => void;
|
|
52
|
+
/**
|
|
53
|
+
* Pure parser for one transcript line → the events it yields. Exported for
|
|
54
|
+
* tests; `tailSession` streams these live. Returns [] for anything that isn't
|
|
55
|
+
* a streamable assistant/user event.
|
|
56
|
+
*/
|
|
57
|
+
export declare function parseLine(line: string): TailEvent[];
|
|
58
|
+
export declare function parseUsage(message: any): TokenUsage | null;
|
|
59
|
+
/**
|
|
60
|
+
* Sums the token usage already written to a transcript, keyed by message id.
|
|
61
|
+
* Streaming writes several records per message with the same id and growing
|
|
62
|
+
* counts — keeping the last record per id yields each message's final usage.
|
|
63
|
+
*/
|
|
64
|
+
export declare function scanUsage(file: string): Map<string, TokenUsage>;
|
|
65
|
+
/** Flattens a tool_result's content (string or block array) to display text. */
|
|
66
|
+
export declare function resultText(content: any): string;
|