tg-claude 0.3.3 → 0.3.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.
- package/package.json +2 -3
- package/dist/claude/ClaudeProcess.d.ts +0 -77
- package/dist/claude/ClaudeProcess.d.ts.map +0 -1
- package/dist/claude/ClaudeProcess.js +0 -270
- package/dist/claude/ClaudeProcess.js.map +0 -1
- package/dist/claude/EventAdapter.d.ts +0 -44
- package/dist/claude/EventAdapter.d.ts.map +0 -1
- package/dist/claude/EventAdapter.js +0 -135
- package/dist/claude/EventAdapter.js.map +0 -1
- package/dist/claude/index.d.ts +0 -10
- package/dist/claude/index.d.ts.map +0 -1
- package/dist/claude/index.js +0 -9
- package/dist/claude/index.js.map +0 -1
- package/dist/claude/types.d.ts +0 -244
- package/dist/claude/types.d.ts.map +0 -1
- package/dist/claude/types.js +0 -8
- package/dist/claude/types.js.map +0 -1
- package/dist/env.d.ts +0 -21
- package/dist/env.d.ts.map +0 -1
- package/dist/env.js +0 -49
- package/dist/env.js.map +0 -1
- package/dist/index.d.ts +0 -2
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -415
- package/dist/index.js.map +0 -1
- package/dist/parser/AnsiStripper.d.ts +0 -54
- package/dist/parser/AnsiStripper.d.ts.map +0 -1
- package/dist/parser/AnsiStripper.js +0 -115
- package/dist/parser/AnsiStripper.js.map +0 -1
- package/dist/parser/OptionExtractor.d.ts +0 -31
- package/dist/parser/OptionExtractor.d.ts.map +0 -1
- package/dist/parser/OptionExtractor.js +0 -91
- package/dist/parser/OptionExtractor.js.map +0 -1
- package/dist/parser/OutputParser.d.ts +0 -121
- package/dist/parser/OutputParser.d.ts.map +0 -1
- package/dist/parser/OutputParser.js +0 -306
- package/dist/parser/OutputParser.js.map +0 -1
- package/dist/parser/PromptDetector.d.ts +0 -20
- package/dist/parser/PromptDetector.d.ts.map +0 -1
- package/dist/parser/PromptDetector.js +0 -68
- package/dist/parser/PromptDetector.js.map +0 -1
- package/dist/parser/index.d.ts +0 -7
- package/dist/parser/index.d.ts.map +0 -1
- package/dist/parser/index.js +0 -5
- package/dist/parser/index.js.map +0 -1
- package/dist/parser/types.d.ts +0 -73
- package/dist/parser/types.d.ts.map +0 -1
- package/dist/parser/types.js +0 -2
- package/dist/parser/types.js.map +0 -1
- package/dist/pty/OutputBuffer.d.ts +0 -39
- package/dist/pty/OutputBuffer.d.ts.map +0 -1
- package/dist/pty/OutputBuffer.js +0 -55
- package/dist/pty/OutputBuffer.js.map +0 -1
- package/dist/pty/PtyProcess.d.ts +0 -47
- package/dist/pty/PtyProcess.d.ts.map +0 -1
- package/dist/pty/PtyProcess.js +0 -94
- package/dist/pty/PtyProcess.js.map +0 -1
- package/dist/pty/PtyService.d.ts +0 -55
- package/dist/pty/PtyService.d.ts.map +0 -1
- package/dist/pty/PtyService.js +0 -115
- package/dist/pty/PtyService.js.map +0 -1
- package/dist/pty/index.d.ts +0 -5
- package/dist/pty/index.d.ts.map +0 -1
- package/dist/pty/index.js +0 -4
- package/dist/pty/index.js.map +0 -1
- package/dist/pty/types.d.ts +0 -36
- package/dist/pty/types.d.ts.map +0 -1
- package/dist/pty/types.js +0 -2
- package/dist/pty/types.js.map +0 -1
- package/dist/router/BoundedQueue.d.ts +0 -57
- package/dist/router/BoundedQueue.d.ts.map +0 -1
- package/dist/router/BoundedQueue.js +0 -86
- package/dist/router/BoundedQueue.js.map +0 -1
- package/dist/router/EventRouter.d.ts +0 -103
- package/dist/router/EventRouter.d.ts.map +0 -1
- package/dist/router/EventRouter.js +0 -169
- package/dist/router/EventRouter.js.map +0 -1
- package/dist/router/index.d.ts +0 -13
- package/dist/router/index.d.ts.map +0 -1
- package/dist/router/index.js +0 -12
- package/dist/router/index.js.map +0 -1
- package/dist/router/types.d.ts +0 -104
- package/dist/router/types.d.ts.map +0 -1
- package/dist/router/types.js +0 -6
- package/dist/router/types.js.map +0 -1
- package/dist/setup/envWriter.d.ts +0 -22
- package/dist/setup/envWriter.d.ts.map +0 -1
- package/dist/setup/envWriter.js +0 -68
- package/dist/setup/envWriter.js.map +0 -1
- package/dist/setup/index.d.ts +0 -4
- package/dist/setup/index.d.ts.map +0 -1
- package/dist/setup/index.js +0 -4
- package/dist/setup/index.js.map +0 -1
- package/dist/setup/validators.d.ts +0 -22
- package/dist/setup/validators.d.ts.map +0 -1
- package/dist/setup/validators.js +0 -47
- package/dist/setup/validators.js.map +0 -1
- package/dist/setup/wizard.d.ts +0 -7
- package/dist/setup/wizard.d.ts.map +0 -1
- package/dist/setup/wizard.js +0 -56
- package/dist/setup/wizard.js.map +0 -1
- package/dist/telegram/TelegramBot.d.ts +0 -163
- package/dist/telegram/TelegramBot.d.ts.map +0 -1
- package/dist/telegram/TelegramBot.js +0 -634
- package/dist/telegram/TelegramBot.js.map +0 -1
- package/dist/telegram/index.d.ts +0 -7
- package/dist/telegram/index.d.ts.map +0 -1
- package/dist/telegram/index.js +0 -6
- package/dist/telegram/index.js.map +0 -1
- package/dist/telegram/types.d.ts +0 -30
- package/dist/telegram/types.d.ts.map +0 -1
- package/dist/telegram/types.js +0 -5
- package/dist/telegram/types.js.map +0 -1
- package/dist/terminal/TerminalInterface.d.ts +0 -61
- package/dist/terminal/TerminalInterface.d.ts.map +0 -1
- package/dist/terminal/TerminalInterface.js +0 -218
- package/dist/terminal/TerminalInterface.js.map +0 -1
- package/dist/terminal/index.d.ts +0 -3
- package/dist/terminal/index.d.ts.map +0 -1
- package/dist/terminal/index.js +0 -2
- package/dist/terminal/index.js.map +0 -1
- package/dist/terminal/types.d.ts +0 -17
- package/dist/terminal/types.d.ts.map +0 -1
- package/dist/terminal/types.js +0 -2
- package/dist/terminal/types.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tg-claude",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.4",
|
|
4
4
|
"description": "Bridge between Claude Code CLI and Telegram for mobile interaction",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -14,8 +14,7 @@
|
|
|
14
14
|
"scripts": {
|
|
15
15
|
"build": "tsc",
|
|
16
16
|
"start": "node dist/index.js",
|
|
17
|
-
"dev": "tsx src/index.ts"
|
|
18
|
-
"prepare": "npm run build"
|
|
17
|
+
"dev": "tsx src/index.ts"
|
|
19
18
|
},
|
|
20
19
|
"engines": {
|
|
21
20
|
"node": ">=20"
|
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
import type { ClaudeProcessOptions, ClaudeProcessEvents } from './types.js';
|
|
2
|
-
/**
|
|
3
|
-
* ClaudeProcess spawns the Claude CLI as a subprocess and parses
|
|
4
|
-
* NDJSON stream-json output into typed events.
|
|
5
|
-
*
|
|
6
|
-
* Usage:
|
|
7
|
-
* ```typescript
|
|
8
|
-
* const claude = new ClaudeProcess({
|
|
9
|
-
* cwd: '/path/to/project',
|
|
10
|
-
* prompt: 'Hello, Claude!',
|
|
11
|
-
* });
|
|
12
|
-
*
|
|
13
|
-
* claude.on('init', (e) => console.log('Session:', e.sessionId));
|
|
14
|
-
* claude.on('text', (e) => console.log('Text:', e.text));
|
|
15
|
-
* claude.on('complete', (e) => console.log('Done:', e.result));
|
|
16
|
-
* claude.on('error', (e) => console.error('Error:', e.message));
|
|
17
|
-
*
|
|
18
|
-
* await claude.start();
|
|
19
|
-
* ```
|
|
20
|
-
*/
|
|
21
|
-
export declare class ClaudeProcess {
|
|
22
|
-
private readonly options;
|
|
23
|
-
private readonly emitter;
|
|
24
|
-
private proc;
|
|
25
|
-
private readline;
|
|
26
|
-
private sessionId;
|
|
27
|
-
private running;
|
|
28
|
-
private stderrChunks;
|
|
29
|
-
private emittedToolUseIds;
|
|
30
|
-
constructor(options: ClaudeProcessOptions);
|
|
31
|
-
/**
|
|
32
|
-
* Subscribe to process events
|
|
33
|
-
*/
|
|
34
|
-
on<K extends keyof ClaudeProcessEvents>(event: K, listener: ClaudeProcessEvents[K]): this;
|
|
35
|
-
/**
|
|
36
|
-
* Subscribe to process events (once)
|
|
37
|
-
*/
|
|
38
|
-
once<K extends keyof ClaudeProcessEvents>(event: K, listener: ClaudeProcessEvents[K]): this;
|
|
39
|
-
/**
|
|
40
|
-
* Unsubscribe from process events
|
|
41
|
-
*/
|
|
42
|
-
off<K extends keyof ClaudeProcessEvents>(event: K, listener: ClaudeProcessEvents[K]): this;
|
|
43
|
-
/**
|
|
44
|
-
* Remove all listeners for an event
|
|
45
|
-
*/
|
|
46
|
-
removeAllListeners<K extends keyof ClaudeProcessEvents>(event?: K): this;
|
|
47
|
-
/**
|
|
48
|
-
* Start the Claude CLI process and begin parsing output
|
|
49
|
-
* Resolves when the process exits (or rejects on spawn error)
|
|
50
|
-
*/
|
|
51
|
-
start(): Promise<void>;
|
|
52
|
-
/**
|
|
53
|
-
* Build CLI arguments based on options
|
|
54
|
-
*/
|
|
55
|
-
private buildArgs;
|
|
56
|
-
/**
|
|
57
|
-
* Handle a parsed stream-json message
|
|
58
|
-
*/
|
|
59
|
-
private handleMessage;
|
|
60
|
-
/**
|
|
61
|
-
* Emit an error event with structured details
|
|
62
|
-
*/
|
|
63
|
-
private emitError;
|
|
64
|
-
/**
|
|
65
|
-
* Get the current session ID (available after 'init' event)
|
|
66
|
-
*/
|
|
67
|
-
get currentSessionId(): string | null;
|
|
68
|
-
/**
|
|
69
|
-
* Check if the process is currently running
|
|
70
|
-
*/
|
|
71
|
-
get isRunning(): boolean;
|
|
72
|
-
/**
|
|
73
|
-
* Kill the Claude CLI process
|
|
74
|
-
*/
|
|
75
|
-
kill(): void;
|
|
76
|
-
}
|
|
77
|
-
//# sourceMappingURL=ClaudeProcess.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ClaudeProcess.d.ts","sourceRoot":"","sources":["../../src/claude/ClaudeProcess.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,oBAAoB,EACpB,mBAAmB,EAcpB,MAAM,YAAY,CAAC;AAapB;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,aAAa;IASZ,OAAO,CAAC,QAAQ,CAAC,OAAO;IARpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoC;IAC5D,OAAO,CAAC,IAAI,CAA6B;IACzC,OAAO,CAAC,QAAQ,CAA0B;IAC1C,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,iBAAiB,CAAqB;gBAEjB,OAAO,EAAE,oBAAoB;IAI1D;;OAEG;IACH,EAAE,CAAC,CAAC,SAAS,MAAM,mBAAmB,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,IAAI;IAKzF;;OAEG;IACH,IAAI,CAAC,CAAC,SAAS,MAAM,mBAAmB,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,IAAI;IAK3F;;OAEG;IACH,GAAG,CAAC,CAAC,SAAS,MAAM,mBAAmB,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,IAAI;IAK1F;;OAEG;IACH,kBAAkB,CAAC,CAAC,SAAS,MAAM,mBAAmB,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,IAAI;IAKxE;;;OAGG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAkF5B;;OAEG;IACH,OAAO,CAAC,SAAS;IAoBjB;;OAEG;IACH,OAAO,CAAC,aAAa;IAoFrB;;OAEG;IACH,OAAO,CAAC,SAAS;IASjB;;OAEG;IACH,IAAI,gBAAgB,IAAI,MAAM,GAAG,IAAI,CAEpC;IAED;;OAEG;IACH,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED;;OAEG;IACH,IAAI,IAAI,IAAI;CAKb"}
|
|
@@ -1,270 +0,0 @@
|
|
|
1
|
-
import { spawn } from 'child_process';
|
|
2
|
-
import { createInterface } from 'readline';
|
|
3
|
-
import { EventEmitter } from 'events';
|
|
4
|
-
/**
|
|
5
|
-
* ClaudeProcess spawns the Claude CLI as a subprocess and parses
|
|
6
|
-
* NDJSON stream-json output into typed events.
|
|
7
|
-
*
|
|
8
|
-
* Usage:
|
|
9
|
-
* ```typescript
|
|
10
|
-
* const claude = new ClaudeProcess({
|
|
11
|
-
* cwd: '/path/to/project',
|
|
12
|
-
* prompt: 'Hello, Claude!',
|
|
13
|
-
* });
|
|
14
|
-
*
|
|
15
|
-
* claude.on('init', (e) => console.log('Session:', e.sessionId));
|
|
16
|
-
* claude.on('text', (e) => console.log('Text:', e.text));
|
|
17
|
-
* claude.on('complete', (e) => console.log('Done:', e.result));
|
|
18
|
-
* claude.on('error', (e) => console.error('Error:', e.message));
|
|
19
|
-
*
|
|
20
|
-
* await claude.start();
|
|
21
|
-
* ```
|
|
22
|
-
*/
|
|
23
|
-
export class ClaudeProcess {
|
|
24
|
-
options;
|
|
25
|
-
emitter;
|
|
26
|
-
proc = null;
|
|
27
|
-
readline = null;
|
|
28
|
-
sessionId = null;
|
|
29
|
-
running = false;
|
|
30
|
-
stderrChunks = [];
|
|
31
|
-
emittedToolUseIds = new Set(); // Dedupe tool_use events
|
|
32
|
-
constructor(options) {
|
|
33
|
-
this.options = options;
|
|
34
|
-
this.emitter = new EventEmitter();
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* Subscribe to process events
|
|
38
|
-
*/
|
|
39
|
-
on(event, listener) {
|
|
40
|
-
this.emitter.on(event, listener);
|
|
41
|
-
return this;
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* Subscribe to process events (once)
|
|
45
|
-
*/
|
|
46
|
-
once(event, listener) {
|
|
47
|
-
this.emitter.once(event, listener);
|
|
48
|
-
return this;
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* Unsubscribe from process events
|
|
52
|
-
*/
|
|
53
|
-
off(event, listener) {
|
|
54
|
-
this.emitter.off(event, listener);
|
|
55
|
-
return this;
|
|
56
|
-
}
|
|
57
|
-
/**
|
|
58
|
-
* Remove all listeners for an event
|
|
59
|
-
*/
|
|
60
|
-
removeAllListeners(event) {
|
|
61
|
-
this.emitter.removeAllListeners(event);
|
|
62
|
-
return this;
|
|
63
|
-
}
|
|
64
|
-
/**
|
|
65
|
-
* Start the Claude CLI process and begin parsing output
|
|
66
|
-
* Resolves when the process exits (or rejects on spawn error)
|
|
67
|
-
*/
|
|
68
|
-
async start() {
|
|
69
|
-
if (this.running) {
|
|
70
|
-
throw new Error('ClaudeProcess is already running');
|
|
71
|
-
}
|
|
72
|
-
const args = this.buildArgs();
|
|
73
|
-
this.running = true;
|
|
74
|
-
try {
|
|
75
|
-
this.proc = spawn('claude', args, {
|
|
76
|
-
cwd: this.options.cwd,
|
|
77
|
-
stdio: ['ignore', 'pipe', 'pipe'],
|
|
78
|
-
});
|
|
79
|
-
}
|
|
80
|
-
catch (err) {
|
|
81
|
-
this.running = false;
|
|
82
|
-
const error = err;
|
|
83
|
-
this.emitError('spawn', `Failed to spawn claude CLI: ${error.message}`);
|
|
84
|
-
return;
|
|
85
|
-
}
|
|
86
|
-
// Handle spawn errors (e.g., ENOENT when claude is not found)
|
|
87
|
-
this.proc.on('error', (err) => {
|
|
88
|
-
this.running = false;
|
|
89
|
-
if (err.code === 'ENOENT') {
|
|
90
|
-
this.emitError('spawn', "Claude CLI not found. Ensure 'claude' is installed and in PATH.");
|
|
91
|
-
}
|
|
92
|
-
else {
|
|
93
|
-
this.emitError('spawn', `Failed to spawn claude CLI: ${err.message}`);
|
|
94
|
-
}
|
|
95
|
-
});
|
|
96
|
-
// Collect stderr for error reporting
|
|
97
|
-
if (this.proc.stderr) {
|
|
98
|
-
this.proc.stderr.on('data', (chunk) => {
|
|
99
|
-
this.stderrChunks.push(chunk);
|
|
100
|
-
});
|
|
101
|
-
}
|
|
102
|
-
// Create readline interface on stdout for NDJSON parsing
|
|
103
|
-
if (this.proc.stdout) {
|
|
104
|
-
this.readline = createInterface({ input: this.proc.stdout });
|
|
105
|
-
// Parse each line as JSON
|
|
106
|
-
for await (const line of this.readline) {
|
|
107
|
-
if (!line.trim())
|
|
108
|
-
continue;
|
|
109
|
-
try {
|
|
110
|
-
const msg = JSON.parse(line);
|
|
111
|
-
this.handleMessage(msg);
|
|
112
|
-
}
|
|
113
|
-
catch (err) {
|
|
114
|
-
const error = err;
|
|
115
|
-
this.emitError('parse', `Failed to parse JSON: ${error.message}`, {
|
|
116
|
-
line: line.slice(0, 200),
|
|
117
|
-
});
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
// Wait for process to exit
|
|
122
|
-
const exitCode = await new Promise((resolve) => {
|
|
123
|
-
if (!this.proc) {
|
|
124
|
-
resolve(null);
|
|
125
|
-
return;
|
|
126
|
-
}
|
|
127
|
-
this.proc.on('close', (code) => {
|
|
128
|
-
this.running = false;
|
|
129
|
-
resolve(code);
|
|
130
|
-
});
|
|
131
|
-
});
|
|
132
|
-
// Report non-zero exit
|
|
133
|
-
if (exitCode !== null && exitCode !== 0) {
|
|
134
|
-
const stderr = Buffer.concat(this.stderrChunks).toString();
|
|
135
|
-
this.emitError('exit', `Claude CLI exited with code ${exitCode}`, {
|
|
136
|
-
code: exitCode,
|
|
137
|
-
stderr: stderr.slice(0, 1000),
|
|
138
|
-
});
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
/**
|
|
142
|
-
* Build CLI arguments based on options
|
|
143
|
-
*/
|
|
144
|
-
buildArgs() {
|
|
145
|
-
const args = [
|
|
146
|
-
'-p',
|
|
147
|
-
this.options.prompt,
|
|
148
|
-
'--output-format',
|
|
149
|
-
'stream-json',
|
|
150
|
-
'--verbose',
|
|
151
|
-
];
|
|
152
|
-
if (this.options.sessionId) {
|
|
153
|
-
args.push('--resume', this.options.sessionId);
|
|
154
|
-
}
|
|
155
|
-
if (this.options.permissionMode) {
|
|
156
|
-
args.push('--permission-mode', this.options.permissionMode);
|
|
157
|
-
}
|
|
158
|
-
return args;
|
|
159
|
-
}
|
|
160
|
-
/**
|
|
161
|
-
* Handle a parsed stream-json message
|
|
162
|
-
*/
|
|
163
|
-
handleMessage(msg) {
|
|
164
|
-
switch (msg.type) {
|
|
165
|
-
case 'system':
|
|
166
|
-
if ('subtype' in msg && msg.subtype === 'init') {
|
|
167
|
-
const initMsg = msg;
|
|
168
|
-
this.sessionId = initMsg.session_id;
|
|
169
|
-
const initEvent = {
|
|
170
|
-
sessionId: initMsg.session_id,
|
|
171
|
-
tools: initMsg.tools,
|
|
172
|
-
model: initMsg.model,
|
|
173
|
-
};
|
|
174
|
-
this.emitter.emit('init', initEvent);
|
|
175
|
-
}
|
|
176
|
-
// Hook messages (hook_started, hook_response) are skipped silently
|
|
177
|
-
break;
|
|
178
|
-
case 'assistant': {
|
|
179
|
-
const assistantMsg = msg;
|
|
180
|
-
for (const block of assistantMsg.message.content) {
|
|
181
|
-
if (block.type === 'text') {
|
|
182
|
-
const textEvent = { text: block.text };
|
|
183
|
-
this.emitter.emit('text', textEvent);
|
|
184
|
-
}
|
|
185
|
-
else if (block.type === 'tool_use') {
|
|
186
|
-
// Deduplicate tool_use events by ID (same message may be streamed multiple times)
|
|
187
|
-
if (this.emittedToolUseIds.has(block.id)) {
|
|
188
|
-
continue;
|
|
189
|
-
}
|
|
190
|
-
this.emittedToolUseIds.add(block.id);
|
|
191
|
-
const toolUseEvent = {
|
|
192
|
-
id: block.id,
|
|
193
|
-
name: block.name,
|
|
194
|
-
input: block.input,
|
|
195
|
-
};
|
|
196
|
-
this.emitter.emit('tool_use', toolUseEvent);
|
|
197
|
-
// Emit special 'question' event for AskUserQuestion tool
|
|
198
|
-
if (block.name === 'AskUserQuestion') {
|
|
199
|
-
const askInput = block.input;
|
|
200
|
-
if (askInput.questions && askInput.questions.length > 0) {
|
|
201
|
-
const q = askInput.questions[0]; // Handle first question
|
|
202
|
-
const questionEvent = {
|
|
203
|
-
question: q.question,
|
|
204
|
-
options: q.options,
|
|
205
|
-
multiSelect: q.multiSelect,
|
|
206
|
-
};
|
|
207
|
-
this.emitter.emit('question', questionEvent);
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
break;
|
|
213
|
-
}
|
|
214
|
-
case 'user': {
|
|
215
|
-
const userMsg = msg;
|
|
216
|
-
// Emit tool_result for each tool result in the message
|
|
217
|
-
for (const content of userMsg.message.content) {
|
|
218
|
-
if (content.type === 'tool_result') {
|
|
219
|
-
const toolResultEvent = {
|
|
220
|
-
result: content.content,
|
|
221
|
-
isError: content.is_error,
|
|
222
|
-
};
|
|
223
|
-
this.emitter.emit('tool_result', toolResultEvent);
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
break;
|
|
227
|
-
}
|
|
228
|
-
case 'result': {
|
|
229
|
-
const resultMsg = msg;
|
|
230
|
-
const completeEvent = {
|
|
231
|
-
result: resultMsg.result,
|
|
232
|
-
sessionId: resultMsg.session_id,
|
|
233
|
-
cost: resultMsg.total_cost_usd,
|
|
234
|
-
duration: resultMsg.duration_ms,
|
|
235
|
-
isError: resultMsg.is_error,
|
|
236
|
-
};
|
|
237
|
-
this.emitter.emit('complete', completeEvent);
|
|
238
|
-
break;
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
/**
|
|
243
|
-
* Emit an error event with structured details
|
|
244
|
-
*/
|
|
245
|
-
emitError(type, message, details) {
|
|
246
|
-
const errorEvent = { type, message, details };
|
|
247
|
-
this.emitter.emit('error', errorEvent);
|
|
248
|
-
}
|
|
249
|
-
/**
|
|
250
|
-
* Get the current session ID (available after 'init' event)
|
|
251
|
-
*/
|
|
252
|
-
get currentSessionId() {
|
|
253
|
-
return this.sessionId;
|
|
254
|
-
}
|
|
255
|
-
/**
|
|
256
|
-
* Check if the process is currently running
|
|
257
|
-
*/
|
|
258
|
-
get isRunning() {
|
|
259
|
-
return this.running;
|
|
260
|
-
}
|
|
261
|
-
/**
|
|
262
|
-
* Kill the Claude CLI process
|
|
263
|
-
*/
|
|
264
|
-
kill() {
|
|
265
|
-
if (this.proc && this.running) {
|
|
266
|
-
this.proc.kill('SIGTERM');
|
|
267
|
-
}
|
|
268
|
-
}
|
|
269
|
-
}
|
|
270
|
-
//# sourceMappingURL=ClaudeProcess.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ClaudeProcess.js","sourceRoot":"","sources":["../../src/claude/ClaudeProcess.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import type { ClaudeProcess } from './ClaudeProcess.js';
|
|
2
|
-
import type { EventRouter } from '../router/EventRouter.js';
|
|
3
|
-
/**
|
|
4
|
-
* EventAdapter bridges ClaudeProcess events to EventRouter format.
|
|
5
|
-
*
|
|
6
|
-
* Subscribes to ClaudeProcess events and publishes corresponding
|
|
7
|
-
* OutboundEvents to the router for Telegram integration.
|
|
8
|
-
*/
|
|
9
|
-
export declare class EventAdapter {
|
|
10
|
-
private readonly claudeProcess;
|
|
11
|
-
private readonly router;
|
|
12
|
-
private readonly sessionId;
|
|
13
|
-
private _lastSessionId;
|
|
14
|
-
private _textBuffer;
|
|
15
|
-
private _hasQuestion;
|
|
16
|
-
constructor(claudeProcess: ClaudeProcess, router: EventRouter, sessionId: string);
|
|
17
|
-
/**
|
|
18
|
-
* Subscribe to ClaudeProcess events and wire to router
|
|
19
|
-
*/
|
|
20
|
-
private subscribeToEvents;
|
|
21
|
-
/**
|
|
22
|
-
* Clean result text for Telegram
|
|
23
|
-
* - Strips TUI box drawing characters
|
|
24
|
-
* - Returns "Task completed" if empty after cleaning
|
|
25
|
-
*/
|
|
26
|
-
private cleanResult;
|
|
27
|
-
/**
|
|
28
|
-
* Get the session ID from Claude's last run (for --resume)
|
|
29
|
-
*/
|
|
30
|
-
get lastSessionId(): string | null;
|
|
31
|
-
/**
|
|
32
|
-
* Get accumulated text output
|
|
33
|
-
*/
|
|
34
|
-
get textBuffer(): string;
|
|
35
|
-
/**
|
|
36
|
-
* Check if a question was asked in this turn
|
|
37
|
-
*/
|
|
38
|
-
get hasQuestion(): boolean;
|
|
39
|
-
/**
|
|
40
|
-
* Clear text buffer and question state for new conversation turn
|
|
41
|
-
*/
|
|
42
|
-
reset(): void;
|
|
43
|
-
}
|
|
44
|
-
//# sourceMappingURL=EventAdapter.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"EventAdapter.d.ts","sourceRoot":"","sources":["../../src/claude/EventAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAS5D;;;;;GAKG;AACH,qBAAa,YAAY;IAMrB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAP5B,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,WAAW,CAAM;IACzB,OAAO,CAAC,YAAY,CAAS;gBAGV,aAAa,EAAE,aAAa,EAC5B,MAAM,EAAE,WAAW,EACnB,SAAS,EAAE,MAAM;IAKpC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAoFzB;;;;OAIG;IACH,OAAO,CAAC,WAAW;IAQnB;;OAEG;IACH,IAAI,aAAa,IAAI,MAAM,GAAG,IAAI,CAEjC;IAED;;OAEG;IACH,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED;;OAEG;IACH,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED;;OAEG;IACH,KAAK,IAAI,IAAI;CAId"}
|
|
@@ -1,135 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* TUI box drawing characters to strip from summaries
|
|
3
|
-
*/
|
|
4
|
-
const TUI_CHARS_REGEX = /[─│┌┐└┘├┤┬┴┼═║╔╗╚╝╠╣╦╩╬]/g;
|
|
5
|
-
/**
|
|
6
|
-
* EventAdapter bridges ClaudeProcess events to EventRouter format.
|
|
7
|
-
*
|
|
8
|
-
* Subscribes to ClaudeProcess events and publishes corresponding
|
|
9
|
-
* OutboundEvents to the router for Telegram integration.
|
|
10
|
-
*/
|
|
11
|
-
export class EventAdapter {
|
|
12
|
-
claudeProcess;
|
|
13
|
-
router;
|
|
14
|
-
sessionId;
|
|
15
|
-
_lastSessionId = null;
|
|
16
|
-
_textBuffer = '';
|
|
17
|
-
_hasQuestion = false;
|
|
18
|
-
constructor(claudeProcess, router, sessionId) {
|
|
19
|
-
this.claudeProcess = claudeProcess;
|
|
20
|
-
this.router = router;
|
|
21
|
-
this.sessionId = sessionId;
|
|
22
|
-
this.subscribeToEvents();
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* Subscribe to ClaudeProcess events and wire to router
|
|
26
|
-
*/
|
|
27
|
-
subscribeToEvents() {
|
|
28
|
-
// Accumulate text output for context
|
|
29
|
-
this.claudeProcess.on('text', (event) => {
|
|
30
|
-
this._textBuffer += event.text;
|
|
31
|
-
});
|
|
32
|
-
// Log tool usage for debugging/status
|
|
33
|
-
this.claudeProcess.on('tool_use', (event) => {
|
|
34
|
-
console.log(`[ADAPTER] Tool use: ${event.name}`);
|
|
35
|
-
if (event.name === 'AskUserQuestion') {
|
|
36
|
-
console.log(`[ADAPTER] AskUserQuestion input:`, JSON.stringify(event.input, null, 2));
|
|
37
|
-
}
|
|
38
|
-
});
|
|
39
|
-
// Log tool results for debugging/status
|
|
40
|
-
this.claudeProcess.on('tool_result', (event) => {
|
|
41
|
-
const preview = event.result.slice(0, 100);
|
|
42
|
-
console.log(`[ADAPTER] Tool result: ${preview}${event.result.length > 100 ? '...' : ''}`);
|
|
43
|
-
});
|
|
44
|
-
// Handle AskUserQuestion - publish prompt event to router
|
|
45
|
-
this.claudeProcess.on('question', (event) => {
|
|
46
|
-
// Block ALL questions once one has been asked (Claude retries with variations)
|
|
47
|
-
// Only allow new questions after reset() is called (when user responds)
|
|
48
|
-
if (this._hasQuestion) {
|
|
49
|
-
console.log(`[ADAPTER] Blocking retry question (already awaiting response): ${event.question.slice(0, 50)}...`);
|
|
50
|
-
return;
|
|
51
|
-
}
|
|
52
|
-
this._hasQuestion = true;
|
|
53
|
-
console.log(`[ADAPTER] Question detected: ${event.question}`);
|
|
54
|
-
// Convert to PromptOption format (index is 1-based)
|
|
55
|
-
const options = event.options.map((opt, idx) => ({
|
|
56
|
-
index: idx + 1,
|
|
57
|
-
text: `${opt.label} - ${opt.description}`,
|
|
58
|
-
selected: idx === 0, // First option selected by default
|
|
59
|
-
}));
|
|
60
|
-
const promptEvent = {
|
|
61
|
-
type: 'blocking-prompt',
|
|
62
|
-
question: event.question,
|
|
63
|
-
options,
|
|
64
|
-
rawContext: this._textBuffer.slice(-500), // Last 500 chars of context
|
|
65
|
-
timestamp: Date.now(),
|
|
66
|
-
multiSelect: event.multiSelect, // Pass through multiSelect flag
|
|
67
|
-
};
|
|
68
|
-
this.router.publishOutbound({
|
|
69
|
-
sessionId: this.sessionId,
|
|
70
|
-
type: 'prompt',
|
|
71
|
-
payload: promptEvent,
|
|
72
|
-
timestamp: Date.now(),
|
|
73
|
-
});
|
|
74
|
-
});
|
|
75
|
-
// Handle completion - publish to router (skip if question was asked)
|
|
76
|
-
this.claudeProcess.on('complete', (event) => {
|
|
77
|
-
this._lastSessionId = event.sessionId;
|
|
78
|
-
// Skip completion notification if a question was asked
|
|
79
|
-
// (user needs to respond to question first)
|
|
80
|
-
if (this._hasQuestion) {
|
|
81
|
-
console.log(`[ADAPTER] Complete (skipped notification - awaiting question response): sessionId=${event.sessionId}, cost=$${event.cost.toFixed(4)}`);
|
|
82
|
-
return;
|
|
83
|
-
}
|
|
84
|
-
const summary = this.cleanResult(event.result);
|
|
85
|
-
const payload = {
|
|
86
|
-
summary,
|
|
87
|
-
duration: event.duration,
|
|
88
|
-
};
|
|
89
|
-
console.log(`[ADAPTER] Complete: sessionId=${event.sessionId}, cost=$${event.cost.toFixed(4)}`);
|
|
90
|
-
this.router.publishOutbound({
|
|
91
|
-
sessionId: this.sessionId,
|
|
92
|
-
type: 'completion',
|
|
93
|
-
payload,
|
|
94
|
-
timestamp: Date.now(),
|
|
95
|
-
});
|
|
96
|
-
});
|
|
97
|
-
}
|
|
98
|
-
/**
|
|
99
|
-
* Clean result text for Telegram
|
|
100
|
-
* - Strips TUI box drawing characters
|
|
101
|
-
* - Returns "Task completed" if empty after cleaning
|
|
102
|
-
*/
|
|
103
|
-
cleanResult(result) {
|
|
104
|
-
// Strip TUI box drawing characters
|
|
105
|
-
const cleaned = result.replace(TUI_CHARS_REGEX, '').trim();
|
|
106
|
-
// Return default if empty
|
|
107
|
-
return cleaned || 'Task completed';
|
|
108
|
-
}
|
|
109
|
-
/**
|
|
110
|
-
* Get the session ID from Claude's last run (for --resume)
|
|
111
|
-
*/
|
|
112
|
-
get lastSessionId() {
|
|
113
|
-
return this._lastSessionId;
|
|
114
|
-
}
|
|
115
|
-
/**
|
|
116
|
-
* Get accumulated text output
|
|
117
|
-
*/
|
|
118
|
-
get textBuffer() {
|
|
119
|
-
return this._textBuffer;
|
|
120
|
-
}
|
|
121
|
-
/**
|
|
122
|
-
* Check if a question was asked in this turn
|
|
123
|
-
*/
|
|
124
|
-
get hasQuestion() {
|
|
125
|
-
return this._hasQuestion;
|
|
126
|
-
}
|
|
127
|
-
/**
|
|
128
|
-
* Clear text buffer and question state for new conversation turn
|
|
129
|
-
*/
|
|
130
|
-
reset() {
|
|
131
|
-
this._textBuffer = '';
|
|
132
|
-
this._hasQuestion = false;
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
//# sourceMappingURL=EventAdapter.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"EventAdapter.js","sourceRoot":"","sources":["../../src/claude/EventAdapter.ts"],"names":[],"mappings":"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"}
|
package/dist/claude/index.d.ts
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Claude CLI integration module
|
|
3
|
-
*
|
|
4
|
-
* Provides subprocess management for Claude CLI with stream-json output parsing.
|
|
5
|
-
* This replaces PTY-based ANSI parsing with structured JSON events.
|
|
6
|
-
*/
|
|
7
|
-
export { ClaudeProcess } from './ClaudeProcess.js';
|
|
8
|
-
export { EventAdapter } from './EventAdapter.js';
|
|
9
|
-
export type { BaseMessage, SystemInitMessage, SystemHookMessage, SystemMessage, TextBlock, ToolUseBlock, ContentBlock, MessageUsage, AssistantMessage, ToolResultContent, UserMessage, ResultSubtype, ResultMessage, StreamMessage, InitEvent, TextEvent, ToolUseEvent, ToolResultEvent, CompleteEvent, ErrorType, ErrorEvent, PermissionMode, ClaudeProcessOptions, ClaudeProcessEvents, } from './types.js';
|
|
10
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/claude/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,YAAY,EAEV,WAAW,EACX,iBAAiB,EACjB,iBAAiB,EACjB,aAAa,EACb,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,WAAW,EACX,aAAa,EACb,aAAa,EACb,aAAa,EAEb,SAAS,EACT,SAAS,EACT,YAAY,EACZ,eAAe,EACf,aAAa,EACb,SAAS,EACT,UAAU,EAEV,cAAc,EACd,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,YAAY,CAAC"}
|
package/dist/claude/index.js
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Claude CLI integration module
|
|
3
|
-
*
|
|
4
|
-
* Provides subprocess management for Claude CLI with stream-json output parsing.
|
|
5
|
-
* This replaces PTY-based ANSI parsing with structured JSON events.
|
|
6
|
-
*/
|
|
7
|
-
export { ClaudeProcess } from './ClaudeProcess.js';
|
|
8
|
-
export { EventAdapter } from './EventAdapter.js';
|
|
9
|
-
//# sourceMappingURL=index.js.map
|
package/dist/claude/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/claude/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC"}
|