claude-code-runner 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 +559 -0
- package/README.zh-Hans.md +559 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +377 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +4 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +50 -0
- package/dist/config.js.map +1 -0
- package/dist/container.d.ts +23 -0
- package/dist/container.d.ts.map +1 -0
- package/dist/container.js +971 -0
- package/dist/container.js.map +1 -0
- package/dist/credentials.d.ts +8 -0
- package/dist/credentials.d.ts.map +1 -0
- package/dist/credentials.js +145 -0
- package/dist/credentials.js.map +1 -0
- package/dist/docker-config.d.ts +19 -0
- package/dist/docker-config.d.ts.map +1 -0
- package/dist/docker-config.js +101 -0
- package/dist/docker-config.js.map +1 -0
- package/dist/git/shadow-repository.d.ts +30 -0
- package/dist/git/shadow-repository.d.ts.map +1 -0
- package/dist/git/shadow-repository.js +645 -0
- package/dist/git/shadow-repository.js.map +1 -0
- package/dist/git-monitor.d.ts +15 -0
- package/dist/git-monitor.d.ts.map +1 -0
- package/dist/git-monitor.js +94 -0
- package/dist/git-monitor.js.map +1 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +221 -0
- package/dist/index.js.map +1 -0
- package/dist/types.d.ts +49 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/ui.d.ts +12 -0
- package/dist/ui.d.ts.map +1 -0
- package/dist/ui.js +82 -0
- package/dist/ui.js.map +1 -0
- package/dist/web-server-attach.d.ts +16 -0
- package/dist/web-server-attach.d.ts.map +1 -0
- package/dist/web-server-attach.js +249 -0
- package/dist/web-server-attach.js.map +1 -0
- package/dist/web-server.d.ts +27 -0
- package/dist/web-server.d.ts.map +1 -0
- package/dist/web-server.js +812 -0
- package/dist/web-server.js.map +1 -0
- package/package.json +77 -0
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.WebUIServer = void 0;
|
|
40
|
+
const node_http_1 = require("node:http");
|
|
41
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
42
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
43
|
+
const express_1 = __importDefault(require("express"));
|
|
44
|
+
const socket_io_1 = require("socket.io");
|
|
45
|
+
class WebUIServer {
|
|
46
|
+
app;
|
|
47
|
+
httpServer;
|
|
48
|
+
io;
|
|
49
|
+
docker;
|
|
50
|
+
sessions = new Map();
|
|
51
|
+
port = 3456;
|
|
52
|
+
constructor(docker) {
|
|
53
|
+
this.docker = docker;
|
|
54
|
+
this.app = (0, express_1.default)();
|
|
55
|
+
this.httpServer = (0, node_http_1.createServer)(this.app);
|
|
56
|
+
this.io = new socket_io_1.Server(this.httpServer, {
|
|
57
|
+
cors: {
|
|
58
|
+
origin: '*',
|
|
59
|
+
methods: ['GET', 'POST'],
|
|
60
|
+
},
|
|
61
|
+
});
|
|
62
|
+
this.setupRoutes();
|
|
63
|
+
this.setupSocketHandlers();
|
|
64
|
+
}
|
|
65
|
+
setupRoutes() {
|
|
66
|
+
// Serve static files
|
|
67
|
+
this.app.use(express_1.default.static(node_path_1.default.join(__dirname, '../public')));
|
|
68
|
+
// Health check endpoint
|
|
69
|
+
this.app.get('/api/health', (_req, res) => {
|
|
70
|
+
res.json({ status: 'ok' });
|
|
71
|
+
});
|
|
72
|
+
// Container info endpoint
|
|
73
|
+
this.app.get('/api/containers', async (_req, res) => {
|
|
74
|
+
try {
|
|
75
|
+
const containers = await this.docker.listContainers();
|
|
76
|
+
const claudeContainers = containers.filter(c => c.Names.some(name => name.includes('claude-code-runner')));
|
|
77
|
+
res.json(claudeContainers);
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
res.status(500).json({ error: 'Failed to list containers' });
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
setupSocketHandlers() {
|
|
85
|
+
this.io.on('connection', (socket) => {
|
|
86
|
+
console.log(chalk_1.default.blue('✓ Client connected to web UI'));
|
|
87
|
+
socket.on('attach', async (data) => {
|
|
88
|
+
const { containerId } = data;
|
|
89
|
+
try {
|
|
90
|
+
const container = this.docker.getContainer(containerId);
|
|
91
|
+
// Check if we already have a session for this container
|
|
92
|
+
let session = this.sessions.get(containerId);
|
|
93
|
+
if (!session || !session.stream) {
|
|
94
|
+
// Attach to the container's main process
|
|
95
|
+
console.log(chalk_1.default.blue('Attaching to container...'));
|
|
96
|
+
const stream = await container.attach({
|
|
97
|
+
stream: true,
|
|
98
|
+
stdin: true,
|
|
99
|
+
stdout: true,
|
|
100
|
+
stderr: true,
|
|
101
|
+
hijack: true,
|
|
102
|
+
});
|
|
103
|
+
session = {
|
|
104
|
+
containerId,
|
|
105
|
+
stream,
|
|
106
|
+
connectedSockets: new Set([socket.id]),
|
|
107
|
+
};
|
|
108
|
+
this.sessions.set(containerId, session);
|
|
109
|
+
// Set up stream handlers
|
|
110
|
+
stream.on('data', (chunk) => {
|
|
111
|
+
// Docker attach streams don't have the same header format as exec
|
|
112
|
+
// Just forward the data as-is
|
|
113
|
+
if (chunk.length > 0) {
|
|
114
|
+
for (const socketId of session.connectedSockets) {
|
|
115
|
+
const connectedSocket = this.io.sockets.sockets.get(socketId);
|
|
116
|
+
if (connectedSocket) {
|
|
117
|
+
connectedSocket.emit('output', new Uint8Array(chunk));
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
stream.on('error', (err) => {
|
|
123
|
+
console.error(chalk_1.default.red('Stream error:'), err);
|
|
124
|
+
for (const socketId of session.connectedSockets) {
|
|
125
|
+
const connectedSocket = this.io.sockets.sockets.get(socketId);
|
|
126
|
+
if (connectedSocket) {
|
|
127
|
+
connectedSocket.emit('error', { message: err.message });
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
});
|
|
131
|
+
stream.on('end', () => {
|
|
132
|
+
for (const socketId of session.connectedSockets) {
|
|
133
|
+
const connectedSocket = this.io.sockets.sockets.get(socketId);
|
|
134
|
+
if (connectedSocket) {
|
|
135
|
+
connectedSocket.emit('container-disconnected');
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
this.sessions.delete(containerId);
|
|
139
|
+
});
|
|
140
|
+
console.log(chalk_1.default.green('Attached to container'));
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
// Add this socket to the existing session
|
|
144
|
+
console.log(chalk_1.default.blue('Reconnecting to existing session'));
|
|
145
|
+
session.connectedSockets.add(socket.id);
|
|
146
|
+
}
|
|
147
|
+
// Confirm attachment
|
|
148
|
+
socket.emit('attached', { containerId });
|
|
149
|
+
// Container attach doesn't support resize like exec does
|
|
150
|
+
// But we can try to send a resize sequence through stdin
|
|
151
|
+
if (data.cols && data.rows) {
|
|
152
|
+
setTimeout(() => {
|
|
153
|
+
// Send terminal resize escape sequence
|
|
154
|
+
const resizeSeq = `\x1B[8;${data.rows};${data.cols}t`;
|
|
155
|
+
if (session && session.stream) {
|
|
156
|
+
session.stream.write(resizeSeq);
|
|
157
|
+
}
|
|
158
|
+
}, 100);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
catch (error) {
|
|
162
|
+
console.error(chalk_1.default.red('Failed to attach to container:'), error);
|
|
163
|
+
socket.emit('error', { message: error.message });
|
|
164
|
+
}
|
|
165
|
+
});
|
|
166
|
+
socket.on('resize', async (data) => {
|
|
167
|
+
const { cols, rows } = data;
|
|
168
|
+
// Find which session this socket belongs to
|
|
169
|
+
for (const [, session] of this.sessions) {
|
|
170
|
+
if (session.connectedSockets.has(socket.id) && session.stream) {
|
|
171
|
+
// Send resize escape sequence
|
|
172
|
+
const resizeSeq = `\x1B[8;${rows};${cols}t`;
|
|
173
|
+
session.stream.write(resizeSeq);
|
|
174
|
+
break;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
});
|
|
178
|
+
socket.on('input', (data) => {
|
|
179
|
+
// Find which session this socket belongs to
|
|
180
|
+
for (const [, session] of this.sessions) {
|
|
181
|
+
if (session.connectedSockets.has(socket.id) && session.stream) {
|
|
182
|
+
session.stream.write(data);
|
|
183
|
+
break;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
});
|
|
187
|
+
socket.on('disconnect', () => {
|
|
188
|
+
console.log(chalk_1.default.yellow('Client disconnected from web UI'));
|
|
189
|
+
// Remove socket from all sessions but don't close the stream
|
|
190
|
+
for (const [, session] of this.sessions) {
|
|
191
|
+
session.connectedSockets.delete(socket.id);
|
|
192
|
+
}
|
|
193
|
+
});
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
async start() {
|
|
197
|
+
return new Promise((resolve, reject) => {
|
|
198
|
+
this.httpServer.listen(this.port, () => {
|
|
199
|
+
const url = `http://localhost:${this.port}`;
|
|
200
|
+
console.log(chalk_1.default.green(`✓ Web UI server started at ${url}`));
|
|
201
|
+
resolve(url);
|
|
202
|
+
});
|
|
203
|
+
this.httpServer.on('error', (err) => {
|
|
204
|
+
if (err.code === 'EADDRINUSE') {
|
|
205
|
+
this.port++;
|
|
206
|
+
this.httpServer.listen(this.port, () => {
|
|
207
|
+
const url = `http://localhost:${this.port}`;
|
|
208
|
+
console.log(chalk_1.default.green(`✓ Web UI server started at ${url}`));
|
|
209
|
+
resolve(url);
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
else {
|
|
213
|
+
reject(err);
|
|
214
|
+
}
|
|
215
|
+
});
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
async stop() {
|
|
219
|
+
// Clean up all sessions
|
|
220
|
+
for (const [, session] of this.sessions) {
|
|
221
|
+
if (session.stream) {
|
|
222
|
+
session.stream.end();
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
this.sessions.clear();
|
|
226
|
+
// Close socket.io connections
|
|
227
|
+
this.io.close();
|
|
228
|
+
// Close HTTP server
|
|
229
|
+
return new Promise((resolve) => {
|
|
230
|
+
this.httpServer.close(() => {
|
|
231
|
+
console.log(chalk_1.default.yellow('Web UI server stopped'));
|
|
232
|
+
resolve();
|
|
233
|
+
});
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
async openInBrowser(url) {
|
|
237
|
+
try {
|
|
238
|
+
const open = (await Promise.resolve().then(() => __importStar(require('open')))).default;
|
|
239
|
+
await open(url);
|
|
240
|
+
console.log(chalk_1.default.blue('✓ Opened browser'));
|
|
241
|
+
}
|
|
242
|
+
catch (error) {
|
|
243
|
+
console.log(chalk_1.default.yellow('Could not open browser automatically'));
|
|
244
|
+
console.log(chalk_1.default.yellow(`Please open ${url} in your browser`));
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
exports.WebUIServer = WebUIServer;
|
|
249
|
+
//# sourceMappingURL=web-server-attach.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web-server-attach.js","sourceRoot":"","sources":["../src/web-server-attach.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type Docker from 'dockerode';
|
|
2
|
+
export declare class WebUIServer {
|
|
3
|
+
private app;
|
|
4
|
+
private httpServer;
|
|
5
|
+
private io;
|
|
6
|
+
private docker;
|
|
7
|
+
private sessions;
|
|
8
|
+
private port;
|
|
9
|
+
private shadowRepos;
|
|
10
|
+
private syncInProgress;
|
|
11
|
+
private originalRepo;
|
|
12
|
+
private currentBranch;
|
|
13
|
+
private fileWatchers;
|
|
14
|
+
private containerCmd;
|
|
15
|
+
constructor(docker: Docker, containerRuntime?: string);
|
|
16
|
+
private setupRoutes;
|
|
17
|
+
private setupSocketHandlers;
|
|
18
|
+
private performSync;
|
|
19
|
+
private startContinuousMonitoring;
|
|
20
|
+
private stopContinuousMonitoring;
|
|
21
|
+
private calculateDiffStats;
|
|
22
|
+
start(): Promise<string>;
|
|
23
|
+
setRepoInfo(originalRepo: string, branch: string): void;
|
|
24
|
+
stop(): Promise<void>;
|
|
25
|
+
openInBrowser(url: string): Promise<void>;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=web-server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web-server.d.ts","sourceRoot":"","sources":["../src/web-server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,WAAW,CAAC;AAwBpC,qBAAa,WAAW;IACvB,OAAO,CAAC,GAAG,CAAsB;IACjC,OAAO,CAAC,UAAU,CAAM;IACxB,OAAO,CAAC,EAAE,CAAS;IACnB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAuC;IACvD,OAAO,CAAC,IAAI,CAAgB;IAC5B,OAAO,CAAC,WAAW,CAA4C;IAC/D,OAAO,CAAC,cAAc,CAA0B;IAChD,OAAO,CAAC,YAAY,CAAc;IAClC,OAAO,CAAC,aAAa,CAAkB;IACvC,OAAO,CAAC,YAAY,CAA+B;IACnD,OAAO,CAAC,YAAY,CAAS;gBAEjB,MAAM,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,MAAM;IAgBrD,OAAO,CAAC,WAAW;IA4InB,OAAO,CAAC,mBAAmB;YAyTb,WAAW;YA2KX,yBAAyB;IAmIvC,OAAO,CAAC,wBAAwB;IAoBhC,OAAO,CAAC,kBAAkB;IAgCpB,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;IAyB9B,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAKjD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IA0BrB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAiC/C"}
|