claude-telegram-mirror 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 +331 -0
- package/dist/bot/commands.d.ts +41 -0
- package/dist/bot/commands.d.ts.map +1 -0
- package/dist/bot/commands.js +231 -0
- package/dist/bot/commands.js.map +1 -0
- package/dist/bot/formatting.d.ts +62 -0
- package/dist/bot/formatting.d.ts.map +1 -0
- package/dist/bot/formatting.js +295 -0
- package/dist/bot/formatting.js.map +1 -0
- package/dist/bot/telegram.d.ts +93 -0
- package/dist/bot/telegram.d.ts.map +1 -0
- package/dist/bot/telegram.js +378 -0
- package/dist/bot/telegram.js.map +1 -0
- package/dist/bot/types.d.ts +28 -0
- package/dist/bot/types.d.ts.map +1 -0
- package/dist/bot/types.js +5 -0
- package/dist/bot/types.js.map +1 -0
- package/dist/bridge/daemon.d.ts +93 -0
- package/dist/bridge/daemon.d.ts.map +1 -0
- package/dist/bridge/daemon.js +626 -0
- package/dist/bridge/daemon.js.map +1 -0
- package/dist/bridge/index.d.ts +10 -0
- package/dist/bridge/index.d.ts.map +1 -0
- package/dist/bridge/index.js +9 -0
- package/dist/bridge/index.js.map +1 -0
- package/dist/bridge/injector.d.ts +97 -0
- package/dist/bridge/injector.d.ts.map +1 -0
- package/dist/bridge/injector.js +289 -0
- package/dist/bridge/injector.js.map +1 -0
- package/dist/bridge/session.d.ts +108 -0
- package/dist/bridge/session.d.ts.map +1 -0
- package/dist/bridge/session.js +381 -0
- package/dist/bridge/session.js.map +1 -0
- package/dist/bridge/socket.d.ts +97 -0
- package/dist/bridge/socket.d.ts.map +1 -0
- package/dist/bridge/socket.js +436 -0
- package/dist/bridge/socket.js.map +1 -0
- package/dist/bridge/types.d.ts +38 -0
- package/dist/bridge/types.d.ts.map +1 -0
- package/dist/bridge/types.js +5 -0
- package/dist/bridge/types.js.map +1 -0
- package/dist/cli.d.ts +7 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +332 -0
- package/dist/cli.js.map +1 -0
- package/dist/hooks/handler.d.ts +94 -0
- package/dist/hooks/handler.d.ts.map +1 -0
- package/dist/hooks/handler.js +431 -0
- package/dist/hooks/handler.js.map +1 -0
- package/dist/hooks/index.d.ts +8 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +7 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/installer.d.ts +46 -0
- package/dist/hooks/installer.d.ts.map +1 -0
- package/dist/hooks/installer.js +317 -0
- package/dist/hooks/installer.js.map +1 -0
- package/dist/hooks/types.d.ts +88 -0
- package/dist/hooks/types.d.ts.map +1 -0
- package/dist/hooks/types.js +6 -0
- package/dist/hooks/types.js.map +1 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/dist/service/doctor.d.ts +10 -0
- package/dist/service/doctor.d.ts.map +1 -0
- package/dist/service/doctor.js +424 -0
- package/dist/service/doctor.js.map +1 -0
- package/dist/service/manager.d.ts +48 -0
- package/dist/service/manager.d.ts.map +1 -0
- package/dist/service/manager.js +584 -0
- package/dist/service/manager.js.map +1 -0
- package/dist/service/setup.d.ts +10 -0
- package/dist/service/setup.d.ts.map +1 -0
- package/dist/service/setup.js +266 -0
- package/dist/service/setup.js.map +1 -0
- package/dist/utils/chunker.d.ts +24 -0
- package/dist/utils/chunker.d.ts.map +1 -0
- package/dist/utils/chunker.js +123 -0
- package/dist/utils/chunker.js.map +1 -0
- package/dist/utils/config.d.ts +48 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +154 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/logger.d.ts +7 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +28 -0
- package/dist/utils/logger.js.map +1 -0
- package/package.json +88 -0
- package/postinstall.cjs +76 -0
- package/scripts/claude-wrapper.sh +122 -0
- package/scripts/doctor.sh +433 -0
- package/scripts/get-chat-id.sh +64 -0
- package/scripts/global-hooks.sh +39 -0
- package/scripts/install.sh +831 -0
- package/scripts/start-daemon.sh +49 -0
- package/scripts/telegram-hook.sh +449 -0
- package/scripts/uninstall.sh +261 -0
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bridge Module
|
|
3
|
+
* Exports all bridge-related functionality
|
|
4
|
+
*/
|
|
5
|
+
export { BridgeDaemon } from './daemon.js';
|
|
6
|
+
export { SocketServer, SocketClient, DEFAULT_SOCKET_PATH } from './socket.js';
|
|
7
|
+
export { SessionManager } from './session.js';
|
|
8
|
+
export { InputInjector, createInjector } from './injector.js';
|
|
9
|
+
export type { BridgeMessage, Session, PendingApproval } from './types.js';
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/bridge/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC9D,YAAY,EACV,aAAa,EACb,OAAO,EACP,eAAe,EAChB,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bridge Module
|
|
3
|
+
* Exports all bridge-related functionality
|
|
4
|
+
*/
|
|
5
|
+
export { BridgeDaemon } from './daemon.js';
|
|
6
|
+
export { SocketServer, SocketClient, DEFAULT_SOCKET_PATH } from './socket.js';
|
|
7
|
+
export { SessionManager } from './session.js';
|
|
8
|
+
export { InputInjector, createInjector } from './injector.js';
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/bridge/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Input Injector
|
|
3
|
+
* Injects user input from Telegram into Claude Code CLI
|
|
4
|
+
*/
|
|
5
|
+
import { EventEmitter } from 'events';
|
|
6
|
+
/**
|
|
7
|
+
* Injection method types
|
|
8
|
+
*/
|
|
9
|
+
type InjectionMethod = 'tmux' | 'pty' | 'fifo' | 'none';
|
|
10
|
+
/**
|
|
11
|
+
* Input Injector Configuration
|
|
12
|
+
*/
|
|
13
|
+
interface InjectorConfig {
|
|
14
|
+
method: InjectionMethod;
|
|
15
|
+
tmuxSession?: string;
|
|
16
|
+
tmuxSocket?: string;
|
|
17
|
+
fifoPath?: string;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Input Injector Class
|
|
21
|
+
* Handles sending user input from Telegram to Claude Code
|
|
22
|
+
*/
|
|
23
|
+
export declare class InputInjector extends EventEmitter {
|
|
24
|
+
private config;
|
|
25
|
+
private method;
|
|
26
|
+
private tmuxSession;
|
|
27
|
+
private tmuxSocket;
|
|
28
|
+
constructor(config?: Partial<InjectorConfig>);
|
|
29
|
+
/**
|
|
30
|
+
* Detect available injection method
|
|
31
|
+
*/
|
|
32
|
+
detectMethod(): Promise<InjectionMethod>;
|
|
33
|
+
/**
|
|
34
|
+
* Initialize injector
|
|
35
|
+
*/
|
|
36
|
+
init(): Promise<boolean>;
|
|
37
|
+
/**
|
|
38
|
+
* Inject input text into Claude Code
|
|
39
|
+
*/
|
|
40
|
+
inject(text: string): Promise<boolean>;
|
|
41
|
+
/**
|
|
42
|
+
* Inject via tmux send-keys
|
|
43
|
+
*/
|
|
44
|
+
private injectViaTmux;
|
|
45
|
+
/**
|
|
46
|
+
* Inject via PTY (direct stdin)
|
|
47
|
+
*/
|
|
48
|
+
private injectViaPty;
|
|
49
|
+
/**
|
|
50
|
+
* Inject via FIFO pipe
|
|
51
|
+
*/
|
|
52
|
+
private injectViaFifo;
|
|
53
|
+
/**
|
|
54
|
+
* Check if tmux is available
|
|
55
|
+
*/
|
|
56
|
+
private isTmuxAvailable;
|
|
57
|
+
/**
|
|
58
|
+
* Detect current tmux session
|
|
59
|
+
*/
|
|
60
|
+
private detectTmuxSession;
|
|
61
|
+
/**
|
|
62
|
+
* Find a tmux session running Claude Code
|
|
63
|
+
*/
|
|
64
|
+
private findClaudeCodeSession;
|
|
65
|
+
/**
|
|
66
|
+
* Escape text for tmux send-keys with -l flag
|
|
67
|
+
* With -l (literal), tmux handles most characters, we only need to escape double quotes
|
|
68
|
+
* since we wrap the text in double quotes for the shell command
|
|
69
|
+
*/
|
|
70
|
+
private escapeTmuxText;
|
|
71
|
+
/**
|
|
72
|
+
* Send special key
|
|
73
|
+
*/
|
|
74
|
+
sendKey(key: 'Enter' | 'Escape' | 'Tab' | 'Ctrl-C'): Promise<boolean>;
|
|
75
|
+
/**
|
|
76
|
+
* Get current injection method
|
|
77
|
+
*/
|
|
78
|
+
getMethod(): InjectionMethod;
|
|
79
|
+
/**
|
|
80
|
+
* Get tmux session name
|
|
81
|
+
*/
|
|
82
|
+
getTmuxSession(): string | null;
|
|
83
|
+
/**
|
|
84
|
+
* Set tmux session explicitly (with optional socket path)
|
|
85
|
+
*/
|
|
86
|
+
setTmuxSession(session: string, socket?: string): void;
|
|
87
|
+
/**
|
|
88
|
+
* Get tmux socket path
|
|
89
|
+
*/
|
|
90
|
+
getTmuxSocket(): string | null;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Create and initialize an input injector
|
|
94
|
+
*/
|
|
95
|
+
export declare function createInjector(config?: Partial<InjectorConfig>): Promise<InputInjector | null>;
|
|
96
|
+
export default InputInjector;
|
|
97
|
+
//# sourceMappingURL=injector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"injector.d.ts","sourceRoot":"","sources":["../../src/bridge/injector.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAGtC;;GAEG;AACH,KAAK,eAAe,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;AAExD;;GAEG;AACH,UAAU,cAAc;IACtB,MAAM,EAAE,eAAe,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,qBAAa,aAAc,SAAQ,YAAY;IAC7C,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,MAAM,CAA2B;IACzC,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,UAAU,CAAuB;gBAE7B,MAAM,GAAE,OAAO,CAAC,cAAc,CAAM;IAShD;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,eAAe,CAAC;IAoB9C;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC;IAY9B;;OAEG;IACG,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAiB5C;;OAEG;IACH,OAAO,CAAC,aAAa;IAkDrB;;OAEG;IACH,OAAO,CAAC,YAAY;IAUpB;;OAEG;IACH,OAAO,CAAC,aAAa;IAiBrB;;OAEG;IACH,OAAO,CAAC,eAAe;IASvB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAkBzB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAmC7B;;;;OAIG;IACH,OAAO,CAAC,cAAc;IAQtB;;OAEG;IACG,OAAO,CAAC,GAAG,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,GAAG,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;IAuB3E;;OAEG;IACH,SAAS,IAAI,eAAe;IAI5B;;OAEG;IACH,cAAc,IAAI,MAAM,GAAG,IAAI;IAI/B;;OAEG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;IAQtD;;OAEG;IACH,aAAa,IAAI,MAAM,GAAG,IAAI;CAG/B;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAIpG;AAED,eAAe,aAAa,CAAC"}
|
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Input Injector
|
|
3
|
+
* Injects user input from Telegram into Claude Code CLI
|
|
4
|
+
*/
|
|
5
|
+
import { execSync } from 'child_process';
|
|
6
|
+
import { existsSync } from 'fs';
|
|
7
|
+
import { EventEmitter } from 'events';
|
|
8
|
+
import logger from '../utils/logger.js';
|
|
9
|
+
/**
|
|
10
|
+
* Input Injector Class
|
|
11
|
+
* Handles sending user input from Telegram to Claude Code
|
|
12
|
+
*/
|
|
13
|
+
export class InputInjector extends EventEmitter {
|
|
14
|
+
config;
|
|
15
|
+
method = 'none';
|
|
16
|
+
tmuxSession = null;
|
|
17
|
+
tmuxSocket = null; // Socket path for explicit targeting
|
|
18
|
+
constructor(config = {}) {
|
|
19
|
+
super();
|
|
20
|
+
this.config = {
|
|
21
|
+
method: config.method || 'tmux',
|
|
22
|
+
tmuxSession: config.tmuxSession,
|
|
23
|
+
fifoPath: config.fifoPath
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Detect available injection method
|
|
28
|
+
*/
|
|
29
|
+
async detectMethod() {
|
|
30
|
+
// Check for tmux
|
|
31
|
+
if (this.isTmuxAvailable()) {
|
|
32
|
+
const session = this.detectTmuxSession();
|
|
33
|
+
if (session) {
|
|
34
|
+
this.tmuxSession = session;
|
|
35
|
+
logger.info('Detected tmux session', { session });
|
|
36
|
+
return 'tmux';
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
// Check for PTY
|
|
40
|
+
if (process.stdout.isTTY && process.stdin.isTTY) {
|
|
41
|
+
return 'pty';
|
|
42
|
+
}
|
|
43
|
+
logger.warn('No injection method available');
|
|
44
|
+
return 'none';
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Initialize injector
|
|
48
|
+
*/
|
|
49
|
+
async init() {
|
|
50
|
+
this.method = await this.detectMethod();
|
|
51
|
+
if (this.method === 'none') {
|
|
52
|
+
logger.warn('Input injection not available');
|
|
53
|
+
return false;
|
|
54
|
+
}
|
|
55
|
+
logger.info('Input injector initialized', { method: this.method });
|
|
56
|
+
return true;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Inject input text into Claude Code
|
|
60
|
+
*/
|
|
61
|
+
async inject(text) {
|
|
62
|
+
switch (this.method) {
|
|
63
|
+
case 'tmux':
|
|
64
|
+
return this.injectViaTmux(text);
|
|
65
|
+
case 'pty':
|
|
66
|
+
return this.injectViaPty(text);
|
|
67
|
+
case 'fifo':
|
|
68
|
+
return this.injectViaFifo(text);
|
|
69
|
+
default:
|
|
70
|
+
logger.warn('No injection method configured');
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Inject via tmux send-keys
|
|
76
|
+
*/
|
|
77
|
+
injectViaTmux(text) {
|
|
78
|
+
if (!this.tmuxSession) {
|
|
79
|
+
logger.warn('No tmux session');
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
try {
|
|
83
|
+
// Escape special characters for tmux
|
|
84
|
+
const escapedText = this.escapeTmuxText(text);
|
|
85
|
+
// Build tmux command with explicit socket if available
|
|
86
|
+
// -S specifies the socket path, -t specifies the target session:window.pane
|
|
87
|
+
const socketFlag = this.tmuxSocket ? `-S "${this.tmuxSocket}"` : '';
|
|
88
|
+
const sendKeysCmd = `tmux ${socketFlag} send-keys -t "${this.tmuxSession}" -l "${escapedText}"`;
|
|
89
|
+
const enterCmd = `tmux ${socketFlag} send-keys -t "${this.tmuxSession}" Enter`;
|
|
90
|
+
logger.debug('Running tmux command', {
|
|
91
|
+
cmd: sendKeysCmd,
|
|
92
|
+
session: this.tmuxSession,
|
|
93
|
+
socket: this.tmuxSocket,
|
|
94
|
+
textLength: text.length
|
|
95
|
+
});
|
|
96
|
+
execSync(sendKeysCmd, {
|
|
97
|
+
stdio: 'pipe',
|
|
98
|
+
encoding: 'utf8'
|
|
99
|
+
});
|
|
100
|
+
// Send Enter key separately to submit
|
|
101
|
+
execSync(enterCmd, {
|
|
102
|
+
stdio: 'pipe',
|
|
103
|
+
encoding: 'utf8'
|
|
104
|
+
});
|
|
105
|
+
logger.debug('Injected via tmux', { session: this.tmuxSession, socket: this.tmuxSocket });
|
|
106
|
+
return true;
|
|
107
|
+
}
|
|
108
|
+
catch (error) {
|
|
109
|
+
const execError = error;
|
|
110
|
+
logger.error('Failed to inject via tmux', {
|
|
111
|
+
error,
|
|
112
|
+
stderr: execError.stderr,
|
|
113
|
+
message: execError.message,
|
|
114
|
+
session: this.tmuxSession,
|
|
115
|
+
socket: this.tmuxSocket,
|
|
116
|
+
textLength: text.length
|
|
117
|
+
});
|
|
118
|
+
return false;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Inject via PTY (direct stdin)
|
|
123
|
+
*/
|
|
124
|
+
injectViaPty(text) {
|
|
125
|
+
try {
|
|
126
|
+
process.stdin.push(text + '\n');
|
|
127
|
+
return true;
|
|
128
|
+
}
|
|
129
|
+
catch (error) {
|
|
130
|
+
logger.error('Failed to inject via PTY', { error });
|
|
131
|
+
return false;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Inject via FIFO pipe
|
|
136
|
+
*/
|
|
137
|
+
injectViaFifo(text) {
|
|
138
|
+
if (!this.config.fifoPath || !existsSync(this.config.fifoPath)) {
|
|
139
|
+
logger.warn('FIFO path not available');
|
|
140
|
+
return false;
|
|
141
|
+
}
|
|
142
|
+
try {
|
|
143
|
+
execSync(`echo "${text}" > "${this.config.fifoPath}"`, {
|
|
144
|
+
stdio: 'ignore'
|
|
145
|
+
});
|
|
146
|
+
return true;
|
|
147
|
+
}
|
|
148
|
+
catch (error) {
|
|
149
|
+
logger.error('Failed to inject via FIFO', { error });
|
|
150
|
+
return false;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Check if tmux is available
|
|
155
|
+
*/
|
|
156
|
+
isTmuxAvailable() {
|
|
157
|
+
try {
|
|
158
|
+
execSync('which tmux', { stdio: 'ignore' });
|
|
159
|
+
return true;
|
|
160
|
+
}
|
|
161
|
+
catch {
|
|
162
|
+
return false;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Detect current tmux session
|
|
167
|
+
*/
|
|
168
|
+
detectTmuxSession() {
|
|
169
|
+
// Check if we're inside tmux
|
|
170
|
+
if (!process.env.TMUX) {
|
|
171
|
+
// Look for Claude Code sessions
|
|
172
|
+
return this.findClaudeCodeSession();
|
|
173
|
+
}
|
|
174
|
+
try {
|
|
175
|
+
// Get current session name
|
|
176
|
+
const session = execSync('tmux display-message -p "#S"', {
|
|
177
|
+
encoding: 'utf8'
|
|
178
|
+
}).trim();
|
|
179
|
+
return session;
|
|
180
|
+
}
|
|
181
|
+
catch {
|
|
182
|
+
return null;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Find a tmux session running Claude Code
|
|
187
|
+
*/
|
|
188
|
+
findClaudeCodeSession() {
|
|
189
|
+
try {
|
|
190
|
+
// List all tmux sessions and panes
|
|
191
|
+
const output = execSync('tmux list-panes -a -F "#{session_name}:#{pane_current_command}" 2>/dev/null', { encoding: 'utf8' });
|
|
192
|
+
const lines = output.trim().split('\n');
|
|
193
|
+
for (const line of lines) {
|
|
194
|
+
const [session, command] = line.split(':');
|
|
195
|
+
// Look for node/claude processes
|
|
196
|
+
if (command && (command.includes('claude') || command.includes('node'))) {
|
|
197
|
+
return session;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
// Fallback: look for any session with "claude" in the name
|
|
201
|
+
const sessions = execSync('tmux list-sessions -F "#{session_name}" 2>/dev/null', {
|
|
202
|
+
encoding: 'utf8'
|
|
203
|
+
}).trim().split('\n');
|
|
204
|
+
for (const session of sessions) {
|
|
205
|
+
if (session.toLowerCase().includes('claude') || session.toLowerCase().includes('code')) {
|
|
206
|
+
return session;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
return null;
|
|
210
|
+
}
|
|
211
|
+
catch {
|
|
212
|
+
return null;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Escape text for tmux send-keys with -l flag
|
|
217
|
+
* With -l (literal), tmux handles most characters, we only need to escape double quotes
|
|
218
|
+
* since we wrap the text in double quotes for the shell command
|
|
219
|
+
*/
|
|
220
|
+
escapeTmuxText(text) {
|
|
221
|
+
// Only escape double quotes and backslashes for the shell
|
|
222
|
+
// Single quotes, $, ` are all fine with -l flag
|
|
223
|
+
return text
|
|
224
|
+
.replace(/\\/g, '\\\\')
|
|
225
|
+
.replace(/"/g, '\\"');
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Send special key
|
|
229
|
+
*/
|
|
230
|
+
async sendKey(key) {
|
|
231
|
+
if (this.method !== 'tmux' || !this.tmuxSession) {
|
|
232
|
+
return false;
|
|
233
|
+
}
|
|
234
|
+
try {
|
|
235
|
+
const keyMap = {
|
|
236
|
+
'Enter': 'Enter',
|
|
237
|
+
'Escape': 'Escape',
|
|
238
|
+
'Tab': 'Tab',
|
|
239
|
+
'Ctrl-C': 'C-c'
|
|
240
|
+
};
|
|
241
|
+
execSync(`tmux send-keys -t "${this.tmuxSession}" ${keyMap[key]}`, {
|
|
242
|
+
stdio: 'ignore'
|
|
243
|
+
});
|
|
244
|
+
return true;
|
|
245
|
+
}
|
|
246
|
+
catch (error) {
|
|
247
|
+
logger.error('Failed to send key', { key, error });
|
|
248
|
+
return false;
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Get current injection method
|
|
253
|
+
*/
|
|
254
|
+
getMethod() {
|
|
255
|
+
return this.method;
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Get tmux session name
|
|
259
|
+
*/
|
|
260
|
+
getTmuxSession() {
|
|
261
|
+
return this.tmuxSession;
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Set tmux session explicitly (with optional socket path)
|
|
265
|
+
*/
|
|
266
|
+
setTmuxSession(session, socket) {
|
|
267
|
+
this.tmuxSession = session;
|
|
268
|
+
this.tmuxSocket = socket || null;
|
|
269
|
+
if (session) {
|
|
270
|
+
this.method = 'tmux';
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* Get tmux socket path
|
|
275
|
+
*/
|
|
276
|
+
getTmuxSocket() {
|
|
277
|
+
return this.tmuxSocket;
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Create and initialize an input injector
|
|
282
|
+
*/
|
|
283
|
+
export async function createInjector(config) {
|
|
284
|
+
const injector = new InputInjector(config);
|
|
285
|
+
const success = await injector.init();
|
|
286
|
+
return success ? injector : null;
|
|
287
|
+
}
|
|
288
|
+
export default InputInjector;
|
|
289
|
+
//# sourceMappingURL=injector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"injector.js","sourceRoot":"","sources":["../../src/bridge/injector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session Management with SQLite
|
|
3
|
+
* Tracks CLI sessions and pending approvals
|
|
4
|
+
*/
|
|
5
|
+
import type { Session, PendingApproval } from './types.js';
|
|
6
|
+
/**
|
|
7
|
+
* Session Manager
|
|
8
|
+
* Handles session and approval lifecycle
|
|
9
|
+
*/
|
|
10
|
+
export declare class SessionManager {
|
|
11
|
+
private db;
|
|
12
|
+
private approvalTimeout;
|
|
13
|
+
constructor(dbPath?: string, approvalTimeoutMinutes?: number);
|
|
14
|
+
/**
|
|
15
|
+
* Initialize database schema
|
|
16
|
+
*/
|
|
17
|
+
private initSchema;
|
|
18
|
+
/**
|
|
19
|
+
* Migration: Add tmux columns to existing databases
|
|
20
|
+
*/
|
|
21
|
+
private migrateAddTmuxTarget;
|
|
22
|
+
/**
|
|
23
|
+
* Create a new session with optional specific ID (for using Claude's native session_id)
|
|
24
|
+
*/
|
|
25
|
+
createSession(chatId: number, projectDir?: string, threadId?: number, hostname?: string, sessionId?: string, tmuxTarget?: string, tmuxSocket?: string): string;
|
|
26
|
+
/**
|
|
27
|
+
* Update session thread ID
|
|
28
|
+
*/
|
|
29
|
+
setSessionThread(sessionId: string, threadId: number): void;
|
|
30
|
+
/**
|
|
31
|
+
* Get session thread ID
|
|
32
|
+
*/
|
|
33
|
+
getSessionThread(sessionId: string): number | null;
|
|
34
|
+
/**
|
|
35
|
+
* Set session tmux info (target and socket for input injection)
|
|
36
|
+
*/
|
|
37
|
+
setTmuxInfo(sessionId: string, tmuxTarget?: string, tmuxSocket?: string): void;
|
|
38
|
+
/**
|
|
39
|
+
* Get session tmux info (target and socket)
|
|
40
|
+
*/
|
|
41
|
+
getTmuxInfo(sessionId: string): {
|
|
42
|
+
target: string | null;
|
|
43
|
+
socket: string | null;
|
|
44
|
+
};
|
|
45
|
+
/**
|
|
46
|
+
* Get session by ID
|
|
47
|
+
*/
|
|
48
|
+
getSession(sessionId: string): Session | null;
|
|
49
|
+
/**
|
|
50
|
+
* Get session by chat ID (most recent active)
|
|
51
|
+
*/
|
|
52
|
+
getSessionByChatId(chatId: number): Session | null;
|
|
53
|
+
/**
|
|
54
|
+
* Get session by thread ID (for routing Telegram replies)
|
|
55
|
+
*/
|
|
56
|
+
getSessionByThreadId(threadId: number): Session | null;
|
|
57
|
+
/**
|
|
58
|
+
* Get all active sessions
|
|
59
|
+
*/
|
|
60
|
+
getActiveSessions(): Session[];
|
|
61
|
+
/**
|
|
62
|
+
* Update session activity
|
|
63
|
+
*/
|
|
64
|
+
updateActivity(sessionId: string): void;
|
|
65
|
+
/**
|
|
66
|
+
* End a session
|
|
67
|
+
*/
|
|
68
|
+
endSession(sessionId: string, status?: 'ended' | 'aborted'): void;
|
|
69
|
+
/**
|
|
70
|
+
* Create a pending approval
|
|
71
|
+
*/
|
|
72
|
+
createApproval(sessionId: string, prompt: string, messageId?: number): string;
|
|
73
|
+
/**
|
|
74
|
+
* Get approval by ID
|
|
75
|
+
*/
|
|
76
|
+
getApproval(approvalId: string): PendingApproval | null;
|
|
77
|
+
/**
|
|
78
|
+
* Get pending approvals for a session
|
|
79
|
+
*/
|
|
80
|
+
getPendingApprovals(sessionId: string): PendingApproval[];
|
|
81
|
+
/**
|
|
82
|
+
* Resolve an approval
|
|
83
|
+
*/
|
|
84
|
+
resolveApproval(approvalId: string, status: 'approved' | 'rejected'): boolean;
|
|
85
|
+
/**
|
|
86
|
+
* Expire old approvals
|
|
87
|
+
*/
|
|
88
|
+
expireOldApprovals(): number;
|
|
89
|
+
/**
|
|
90
|
+
* Clean up old sessions
|
|
91
|
+
*/
|
|
92
|
+
cleanupOldSessions(maxAgeDays?: number): number;
|
|
93
|
+
/**
|
|
94
|
+
* Get database stats
|
|
95
|
+
*/
|
|
96
|
+
getStats(): {
|
|
97
|
+
activeSessions: number;
|
|
98
|
+
pendingApprovals: number;
|
|
99
|
+
};
|
|
100
|
+
/**
|
|
101
|
+
* Close database connection
|
|
102
|
+
*/
|
|
103
|
+
close(): void;
|
|
104
|
+
private rowToSession;
|
|
105
|
+
private rowToApproval;
|
|
106
|
+
}
|
|
107
|
+
export default SessionManager;
|
|
108
|
+
//# sourceMappingURL=session.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/bridge/session.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAc3D;;;GAGG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,EAAE,CAAoB;IAC9B,OAAO,CAAC,eAAe,CAAS;gBAEpB,MAAM,GAAE,MAAgB,EAAE,sBAAsB,GAAE,MAAU;IAaxE;;OAEG;IACH,OAAO,CAAC,UAAU;IAwClB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAqB5B;;OAEG;IACH,aAAa,CACX,MAAM,EAAE,MAAM,EACd,UAAU,CAAC,EAAE,MAAM,EACnB,QAAQ,CAAC,EAAE,MAAM,EACjB,QAAQ,CAAC,EAAE,MAAM,EACjB,SAAS,CAAC,EAAE,MAAM,EAClB,UAAU,CAAC,EAAE,MAAM,EACnB,UAAU,CAAC,EAAE,MAAM,GAClB,MAAM;IA0BT;;OAEG;IACH,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAO3D;;OAEG;IACH,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAOlD;;OAEG;IACH,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI;IAiB9E;;OAEG;IACH,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG;QAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE;IAUhF;;OAEG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI;IAQ7C;;OAEG;IACH,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI;IAWlD;;OAEG;IACH,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI;IAUtD;;OAEG;IACH,iBAAiB,IAAI,OAAO,EAAE;IAS9B;;OAEG;IACH,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAMvC;;OAEG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,GAAE,OAAO,GAAG,SAAmB,GAAG,IAAI;IAiB1E;;OAEG;IACH,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM;IAsB7E;;OAEG;IACH,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI;IAQvD;;OAEG;IACH,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe,EAAE;IAUzD;;OAEG;IACH,eAAe,CACb,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,UAAU,GAAG,UAAU,GAC9B,OAAO;IAgBV;;OAEG;IACH,kBAAkB,IAAI,MAAM;IAiB5B;;OAEG;IACH,kBAAkB,CAAC,UAAU,GAAE,MAAU,GAAG,MAAM;IAwBlD;;OAEG;IACH,QAAQ,IAAI;QAAE,cAAc,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAA;KAAE;IAehE;;OAEG;IACH,KAAK,IAAI,IAAI;IAOb,OAAO,CAAC,YAAY;IAgBpB,OAAO,CAAC,aAAa;CAUtB;AA2BD,eAAe,cAAc,CAAC"}
|