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.
Files changed (51) hide show
  1. package/README.md +559 -0
  2. package/README.zh-Hans.md +559 -0
  3. package/dist/cli.d.ts +3 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +377 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/config.d.ts +4 -0
  8. package/dist/config.d.ts.map +1 -0
  9. package/dist/config.js +50 -0
  10. package/dist/config.js.map +1 -0
  11. package/dist/container.d.ts +23 -0
  12. package/dist/container.d.ts.map +1 -0
  13. package/dist/container.js +971 -0
  14. package/dist/container.js.map +1 -0
  15. package/dist/credentials.d.ts +8 -0
  16. package/dist/credentials.d.ts.map +1 -0
  17. package/dist/credentials.js +145 -0
  18. package/dist/credentials.js.map +1 -0
  19. package/dist/docker-config.d.ts +19 -0
  20. package/dist/docker-config.d.ts.map +1 -0
  21. package/dist/docker-config.js +101 -0
  22. package/dist/docker-config.js.map +1 -0
  23. package/dist/git/shadow-repository.d.ts +30 -0
  24. package/dist/git/shadow-repository.d.ts.map +1 -0
  25. package/dist/git/shadow-repository.js +645 -0
  26. package/dist/git/shadow-repository.js.map +1 -0
  27. package/dist/git-monitor.d.ts +15 -0
  28. package/dist/git-monitor.d.ts.map +1 -0
  29. package/dist/git-monitor.js +94 -0
  30. package/dist/git-monitor.js.map +1 -0
  31. package/dist/index.d.ts +22 -0
  32. package/dist/index.d.ts.map +1 -0
  33. package/dist/index.js +221 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/types.d.ts +49 -0
  36. package/dist/types.d.ts.map +1 -0
  37. package/dist/types.js +3 -0
  38. package/dist/types.js.map +1 -0
  39. package/dist/ui.d.ts +12 -0
  40. package/dist/ui.d.ts.map +1 -0
  41. package/dist/ui.js +82 -0
  42. package/dist/ui.js.map +1 -0
  43. package/dist/web-server-attach.d.ts +16 -0
  44. package/dist/web-server-attach.d.ts.map +1 -0
  45. package/dist/web-server-attach.js +249 -0
  46. package/dist/web-server-attach.js.map +1 -0
  47. package/dist/web-server.d.ts +27 -0
  48. package/dist/web-server.d.ts.map +1 -0
  49. package/dist/web-server.js +812 -0
  50. package/dist/web-server.js.map +1 -0
  51. 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"}