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
package/dist/cli.js
ADDED
|
@@ -0,0 +1,377 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
4
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
5
|
+
};
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
const node_process_1 = __importDefault(require("node:process"));
|
|
8
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
9
|
+
const commander_1 = require("commander");
|
|
10
|
+
const dockerode_1 = __importDefault(require("dockerode"));
|
|
11
|
+
const inquirer_1 = __importDefault(require("inquirer"));
|
|
12
|
+
const ora_1 = __importDefault(require("ora"));
|
|
13
|
+
const config_1 = require("./config");
|
|
14
|
+
const docker_config_1 = require("./docker-config");
|
|
15
|
+
const index_1 = require("./index");
|
|
16
|
+
const web_server_1 = require("./web-server");
|
|
17
|
+
// Initialize Docker with config - will be updated after loading config if needed
|
|
18
|
+
let dockerConfig = (0, docker_config_1.getDockerConfig)();
|
|
19
|
+
let docker = new dockerode_1.default(dockerConfig);
|
|
20
|
+
let containerRuntime = (0, docker_config_1.getContainerRuntimeCmd)();
|
|
21
|
+
const program = new commander_1.Command();
|
|
22
|
+
// Helper function to reinitialize Docker with custom socket path
|
|
23
|
+
function reinitializeDocker(socketPath) {
|
|
24
|
+
if (socketPath) {
|
|
25
|
+
dockerConfig = (0, docker_config_1.getDockerConfig)(socketPath);
|
|
26
|
+
docker = new dockerode_1.default(dockerConfig);
|
|
27
|
+
containerRuntime = (0, docker_config_1.getContainerRuntimeCmd)(socketPath);
|
|
28
|
+
// Log if using Podman
|
|
29
|
+
if ((0, docker_config_1.isPodman)(dockerConfig)) {
|
|
30
|
+
console.log(chalk_1.default.blue('Detected Podman socket'));
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
// Helper to ensure Docker is initialized with config
|
|
35
|
+
async function ensureDockerConfig() {
|
|
36
|
+
try {
|
|
37
|
+
const config = await (0, config_1.loadConfig)('./claude-run.config.json');
|
|
38
|
+
reinitializeDocker(config.dockerSocketPath);
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
// Config loading failed, continue with default Docker config
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
// Helper function to get Claude Runner containers
|
|
45
|
+
async function getClaudeSandboxContainers() {
|
|
46
|
+
const containers = await docker.listContainers({ all: true });
|
|
47
|
+
return containers.filter(c => c.Names.some(name => name.includes('claude-code-runner')));
|
|
48
|
+
}
|
|
49
|
+
// Helper function to select a container interactively
|
|
50
|
+
async function selectContainer(containers) {
|
|
51
|
+
if (containers.length === 0) {
|
|
52
|
+
console.log(chalk_1.default.yellow('No Claude Runner containers found.'));
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
55
|
+
const choices = containers.map(c => ({
|
|
56
|
+
name: `${c.Names[0].substring(1)} - ${c.State} (${c.Status})`,
|
|
57
|
+
value: c.Id,
|
|
58
|
+
short: c.Id.substring(0, 12),
|
|
59
|
+
}));
|
|
60
|
+
const { containerId } = await inquirer_1.default.prompt([
|
|
61
|
+
{
|
|
62
|
+
type: 'list',
|
|
63
|
+
name: 'containerId',
|
|
64
|
+
message: 'Select a container:',
|
|
65
|
+
choices,
|
|
66
|
+
},
|
|
67
|
+
]);
|
|
68
|
+
return containerId;
|
|
69
|
+
}
|
|
70
|
+
program
|
|
71
|
+
.name('claude-run')
|
|
72
|
+
.description('Run Claude Code in isolated Docker containers')
|
|
73
|
+
.version('0.1.0');
|
|
74
|
+
// Default command (always web UI)
|
|
75
|
+
program
|
|
76
|
+
.option('--shell <shell>', 'Start with \'claude\' or \'bash\' shell', /^(claude|bash)$/i)
|
|
77
|
+
.action(async (options) => {
|
|
78
|
+
console.log(chalk_1.default.blue('🚀 Starting Claude Runner...'));
|
|
79
|
+
const config = await (0, config_1.loadConfig)('./claude-run.config.json');
|
|
80
|
+
config.includeUntracked = false;
|
|
81
|
+
if (options.shell) {
|
|
82
|
+
config.defaultShell = options.shell.toLowerCase();
|
|
83
|
+
}
|
|
84
|
+
const sandbox = new index_1.ClaudeSandbox(config);
|
|
85
|
+
await sandbox.run();
|
|
86
|
+
});
|
|
87
|
+
// Start command - explicitly start a new container
|
|
88
|
+
program
|
|
89
|
+
.command('start')
|
|
90
|
+
.description('Start a new Claude Runner container')
|
|
91
|
+
.option('-c, --config <path>', 'Configuration file', './claude-run.config.json')
|
|
92
|
+
.option('-n, --name <name>', 'Container name prefix')
|
|
93
|
+
.option('--no-push', 'Disable automatic branch pushing')
|
|
94
|
+
.option('--no-create-pr', 'Disable automatic PR creation')
|
|
95
|
+
.option('--include-untracked', 'Include untracked files when copying to container')
|
|
96
|
+
.option('-b, --branch <branch>', 'Switch to specific branch on container start (creates if doesn\'t exist)')
|
|
97
|
+
.option('--remote-branch <branch>', 'Checkout a remote branch (e.g., origin/feature-branch)')
|
|
98
|
+
.option('--pr <number>', 'Checkout a specific PR by number')
|
|
99
|
+
.option('--shell <shell>', 'Start with \'claude\' or \'bash\' shell', /^(claude|bash)$/i)
|
|
100
|
+
.action(async (options) => {
|
|
101
|
+
console.log(chalk_1.default.blue('🚀 Starting new Claude Runner container...'));
|
|
102
|
+
const config = await (0, config_1.loadConfig)(options.config);
|
|
103
|
+
config.containerPrefix = options.name || config.containerPrefix;
|
|
104
|
+
config.autoPush = options.push !== false;
|
|
105
|
+
config.autoCreatePR = options.createPr !== false;
|
|
106
|
+
config.includeUntracked = options.includeUntracked || false;
|
|
107
|
+
config.targetBranch = options.branch;
|
|
108
|
+
config.remoteBranch = options.remoteBranch;
|
|
109
|
+
config.prNumber = options.pr;
|
|
110
|
+
if (options.shell) {
|
|
111
|
+
config.defaultShell = options.shell.toLowerCase();
|
|
112
|
+
}
|
|
113
|
+
const sandbox = new index_1.ClaudeSandbox(config);
|
|
114
|
+
await sandbox.run();
|
|
115
|
+
});
|
|
116
|
+
// Attach command - attach to existing container
|
|
117
|
+
program
|
|
118
|
+
.command('attach [container-id]')
|
|
119
|
+
.description('Attach to an existing Claude Runner container')
|
|
120
|
+
.action(async (containerId) => {
|
|
121
|
+
await ensureDockerConfig();
|
|
122
|
+
const spinner = (0, ora_1.default)('Looking for containers...').start();
|
|
123
|
+
try {
|
|
124
|
+
let targetContainerId = containerId;
|
|
125
|
+
// If no container ID provided, show selection UI
|
|
126
|
+
if (!targetContainerId) {
|
|
127
|
+
spinner.stop();
|
|
128
|
+
const containers = await getClaudeSandboxContainers();
|
|
129
|
+
targetContainerId = await selectContainer(containers);
|
|
130
|
+
if (!targetContainerId) {
|
|
131
|
+
console.log(chalk_1.default.red('No container selected.'));
|
|
132
|
+
node_process_1.default.exit(1);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
spinner.text = 'Launching web UI...';
|
|
136
|
+
// Always launch web UI
|
|
137
|
+
const webServer = new web_server_1.WebUIServer(docker, containerRuntime);
|
|
138
|
+
const url = await webServer.start();
|
|
139
|
+
const fullUrl = `${url}?container=${targetContainerId}`;
|
|
140
|
+
spinner.succeed(chalk_1.default.green(`Web UI available at: ${fullUrl}`));
|
|
141
|
+
await webServer.openInBrowser(fullUrl);
|
|
142
|
+
console.log(chalk_1.default.yellow('Keep this terminal open to maintain the session'));
|
|
143
|
+
// Keep process running
|
|
144
|
+
await new Promise(() => { });
|
|
145
|
+
}
|
|
146
|
+
catch (error) {
|
|
147
|
+
spinner.fail(chalk_1.default.red(`Failed: ${error.message}`));
|
|
148
|
+
node_process_1.default.exit(1);
|
|
149
|
+
}
|
|
150
|
+
});
|
|
151
|
+
// List command - list all Claude Runner containers
|
|
152
|
+
program
|
|
153
|
+
.command('list')
|
|
154
|
+
.alias('ls')
|
|
155
|
+
.description('List all Claude Runner containers')
|
|
156
|
+
.option('-a, --all', 'Show all containers (including stopped)')
|
|
157
|
+
.action(async (options) => {
|
|
158
|
+
await ensureDockerConfig();
|
|
159
|
+
const spinner = (0, ora_1.default)('Fetching containers...').start();
|
|
160
|
+
try {
|
|
161
|
+
const containers = await docker.listContainers({ all: options.all });
|
|
162
|
+
const claudeContainers = containers.filter(c => c.Names.some(name => name.includes('claude-code-runner')));
|
|
163
|
+
spinner.stop();
|
|
164
|
+
if (claudeContainers.length === 0) {
|
|
165
|
+
console.log(chalk_1.default.yellow('No Claude Runner containers found.'));
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
console.log(chalk_1.default.blue(`Found ${claudeContainers.length} Claude Runner container(s):\n`));
|
|
169
|
+
claudeContainers.forEach((c) => {
|
|
170
|
+
const name = c.Names[0].substring(1);
|
|
171
|
+
const id = c.Id.substring(0, 12);
|
|
172
|
+
const state = c.State === 'running' ? chalk_1.default.green(c.State) : chalk_1.default.gray(c.State);
|
|
173
|
+
const status = c.Status;
|
|
174
|
+
console.log(`${chalk_1.default.cyan(id)} - ${name} - ${state} - ${status}`);
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
catch (error) {
|
|
178
|
+
spinner.fail(chalk_1.default.red(`Failed: ${error.message}`));
|
|
179
|
+
node_process_1.default.exit(1);
|
|
180
|
+
}
|
|
181
|
+
});
|
|
182
|
+
// Stop command - stop Claude Runner containers
|
|
183
|
+
program
|
|
184
|
+
.command('stop [container-id]')
|
|
185
|
+
.description('Stop Claude Runner container(s)')
|
|
186
|
+
.option('-a, --all', 'Stop all Claude Runner containers')
|
|
187
|
+
.action(async (containerId, options) => {
|
|
188
|
+
await ensureDockerConfig();
|
|
189
|
+
const spinner = (0, ora_1.default)('Stopping containers...').start();
|
|
190
|
+
try {
|
|
191
|
+
if (options.all) {
|
|
192
|
+
// Stop all Claude Runner containers
|
|
193
|
+
const containers = await getClaudeSandboxContainers();
|
|
194
|
+
const runningContainers = containers.filter(c => c.State === 'running');
|
|
195
|
+
if (runningContainers.length === 0) {
|
|
196
|
+
spinner.info('No running Claude Runner containers found.');
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
for (const c of runningContainers) {
|
|
200
|
+
const container = docker.getContainer(c.Id);
|
|
201
|
+
await container.stop();
|
|
202
|
+
spinner.text = `Stopped ${c.Id.substring(0, 12)}`;
|
|
203
|
+
}
|
|
204
|
+
spinner.succeed(`Stopped ${runningContainers.length} container(s)`);
|
|
205
|
+
}
|
|
206
|
+
else {
|
|
207
|
+
// Stop specific container
|
|
208
|
+
let targetContainerId = containerId;
|
|
209
|
+
if (!targetContainerId) {
|
|
210
|
+
spinner.stop();
|
|
211
|
+
const containers = await getClaudeSandboxContainers();
|
|
212
|
+
const runningContainers = containers.filter(c => c.State === 'running');
|
|
213
|
+
targetContainerId = await selectContainer(runningContainers);
|
|
214
|
+
if (!targetContainerId) {
|
|
215
|
+
console.log(chalk_1.default.red('No container selected.'));
|
|
216
|
+
node_process_1.default.exit(1);
|
|
217
|
+
}
|
|
218
|
+
spinner.start();
|
|
219
|
+
}
|
|
220
|
+
const container = docker.getContainer(targetContainerId);
|
|
221
|
+
await container.stop();
|
|
222
|
+
spinner.succeed(`Stopped container ${targetContainerId.substring(0, 12)}`);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
catch (error) {
|
|
226
|
+
spinner.fail(chalk_1.default.red(`Failed: ${error.message}`));
|
|
227
|
+
node_process_1.default.exit(1);
|
|
228
|
+
}
|
|
229
|
+
});
|
|
230
|
+
// Logs command - view container logs
|
|
231
|
+
program
|
|
232
|
+
.command('logs [container-id]')
|
|
233
|
+
.description('View logs from a Claude Runner container')
|
|
234
|
+
.option('-f, --follow', 'Follow log output')
|
|
235
|
+
.option('-n, --tail <lines>', 'Number of lines to show from the end', '50')
|
|
236
|
+
.action(async (containerId, options) => {
|
|
237
|
+
try {
|
|
238
|
+
await ensureDockerConfig();
|
|
239
|
+
let targetContainerId = containerId;
|
|
240
|
+
if (!targetContainerId) {
|
|
241
|
+
const containers = await getClaudeSandboxContainers();
|
|
242
|
+
targetContainerId = await selectContainer(containers);
|
|
243
|
+
if (!targetContainerId) {
|
|
244
|
+
console.log(chalk_1.default.red('No container selected.'));
|
|
245
|
+
node_process_1.default.exit(1);
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
const container = docker.getContainer(targetContainerId);
|
|
249
|
+
const logStream = await container.logs({
|
|
250
|
+
stdout: true,
|
|
251
|
+
stderr: true,
|
|
252
|
+
follow: options.follow,
|
|
253
|
+
tail: Number.parseInt(options.tail),
|
|
254
|
+
});
|
|
255
|
+
// Docker logs come with headers, we need to parse them
|
|
256
|
+
container.modem.demuxStream(logStream, node_process_1.default.stdout, node_process_1.default.stderr);
|
|
257
|
+
if (options.follow) {
|
|
258
|
+
console.log(chalk_1.default.gray('Following logs... Press Ctrl+C to exit'));
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
catch (error) {
|
|
262
|
+
console.error(chalk_1.default.red(`Failed: ${error.message}`));
|
|
263
|
+
node_process_1.default.exit(1);
|
|
264
|
+
}
|
|
265
|
+
});
|
|
266
|
+
// Clean command - remove stopped containers
|
|
267
|
+
program
|
|
268
|
+
.command('clean')
|
|
269
|
+
.description('Remove all stopped Claude Runner containers')
|
|
270
|
+
.option('-f, --force', 'Remove all containers (including running)')
|
|
271
|
+
.action(async (options) => {
|
|
272
|
+
await ensureDockerConfig();
|
|
273
|
+
const spinner = (0, ora_1.default)('Cleaning up containers...').start();
|
|
274
|
+
try {
|
|
275
|
+
const containers = await getClaudeSandboxContainers();
|
|
276
|
+
const targetContainers = options.force
|
|
277
|
+
? containers
|
|
278
|
+
: containers.filter(c => c.State !== 'running');
|
|
279
|
+
if (targetContainers.length === 0) {
|
|
280
|
+
spinner.info('No containers to clean up.');
|
|
281
|
+
return;
|
|
282
|
+
}
|
|
283
|
+
for (const c of targetContainers) {
|
|
284
|
+
const container = docker.getContainer(c.Id);
|
|
285
|
+
if (c.State === 'running' && options.force) {
|
|
286
|
+
await container.stop();
|
|
287
|
+
}
|
|
288
|
+
await container.remove();
|
|
289
|
+
spinner.text = `Removed ${c.Id.substring(0, 12)}`;
|
|
290
|
+
}
|
|
291
|
+
spinner.succeed(`Cleaned up ${targetContainers.length} container(s)`);
|
|
292
|
+
}
|
|
293
|
+
catch (error) {
|
|
294
|
+
spinner.fail(chalk_1.default.red(`Failed: ${error.message}`));
|
|
295
|
+
node_process_1.default.exit(1);
|
|
296
|
+
}
|
|
297
|
+
});
|
|
298
|
+
// Purge command - stop and remove all containers
|
|
299
|
+
program
|
|
300
|
+
.command('purge')
|
|
301
|
+
.description('Stop and remove all Claude Runner containers')
|
|
302
|
+
.option('-y, --yes', 'Skip confirmation prompt')
|
|
303
|
+
.action(async (options) => {
|
|
304
|
+
try {
|
|
305
|
+
await ensureDockerConfig();
|
|
306
|
+
const containers = await getClaudeSandboxContainers();
|
|
307
|
+
if (containers.length === 0) {
|
|
308
|
+
console.log(chalk_1.default.yellow('No Claude Runner containers found.'));
|
|
309
|
+
return;
|
|
310
|
+
}
|
|
311
|
+
// Show what will be removed
|
|
312
|
+
console.log(chalk_1.default.yellow(`Found ${containers.length} Claude Runner container(s):`));
|
|
313
|
+
containers.forEach((c) => {
|
|
314
|
+
console.log(` ${c.Id.substring(0, 12)} - ${c.Names[0].replace('/', '')} - ${c.State}`);
|
|
315
|
+
});
|
|
316
|
+
// Confirm unless -y flag is used
|
|
317
|
+
if (!options.yes) {
|
|
318
|
+
const { confirm } = await inquirer_1.default.prompt([
|
|
319
|
+
{
|
|
320
|
+
type: 'confirm',
|
|
321
|
+
name: 'confirm',
|
|
322
|
+
message: 'Are you sure you want to stop and remove all containers?',
|
|
323
|
+
default: false,
|
|
324
|
+
},
|
|
325
|
+
]);
|
|
326
|
+
if (!confirm) {
|
|
327
|
+
console.log(chalk_1.default.gray('Purge cancelled.'));
|
|
328
|
+
return;
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
const spinner = (0, ora_1.default)('Purging containers...').start();
|
|
332
|
+
let removed = 0;
|
|
333
|
+
for (const c of containers) {
|
|
334
|
+
try {
|
|
335
|
+
const container = docker.getContainer(c.Id);
|
|
336
|
+
spinner.text = `Stopping ${c.Id.substring(0, 12)}...`;
|
|
337
|
+
if (c.State === 'running') {
|
|
338
|
+
await container.stop({ t: 5 }); // 5 second timeout
|
|
339
|
+
}
|
|
340
|
+
spinner.text = `Removing ${c.Id.substring(0, 12)}...`;
|
|
341
|
+
await container.remove();
|
|
342
|
+
removed++;
|
|
343
|
+
}
|
|
344
|
+
catch (error) {
|
|
345
|
+
spinner.warn(`Failed to remove ${c.Id.substring(0, 12)}: ${error.message}`);
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
if (removed === containers.length) {
|
|
349
|
+
spinner.succeed(chalk_1.default.green(`✓ Purged all ${removed} container(s)`));
|
|
350
|
+
}
|
|
351
|
+
else {
|
|
352
|
+
spinner.warn(chalk_1.default.yellow(`Purged ${removed} of ${containers.length} container(s)`));
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
catch (error) {
|
|
356
|
+
console.error(chalk_1.default.red(`Purge failed: ${error.message}`));
|
|
357
|
+
node_process_1.default.exit(1);
|
|
358
|
+
}
|
|
359
|
+
});
|
|
360
|
+
// Config command - show configuration
|
|
361
|
+
program
|
|
362
|
+
.command('config')
|
|
363
|
+
.description('Show current configuration')
|
|
364
|
+
.option('-p, --path <path>', 'Configuration file path', './claude-run.config.json')
|
|
365
|
+
.action(async (options) => {
|
|
366
|
+
try {
|
|
367
|
+
const config = await (0, config_1.loadConfig)(options.path);
|
|
368
|
+
console.log(chalk_1.default.blue('Current configuration:'));
|
|
369
|
+
console.log(JSON.stringify(config, null, 2));
|
|
370
|
+
}
|
|
371
|
+
catch (error) {
|
|
372
|
+
console.error(chalk_1.default.red(`Failed to load config: ${error.message}`));
|
|
373
|
+
node_process_1.default.exit(1);
|
|
374
|
+
}
|
|
375
|
+
});
|
|
376
|
+
program.parse();
|
|
377
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAoB7C,wBAAsB,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAuB3E;AAED,wBAAsB,UAAU,CAC/B,MAAM,EAAE,aAAa,EACrB,UAAU,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CAGf"}
|
package/dist/config.js
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.loadConfig = loadConfig;
|
|
7
|
+
exports.saveConfig = saveConfig;
|
|
8
|
+
const promises_1 = __importDefault(require("node:fs/promises"));
|
|
9
|
+
const node_os_1 = __importDefault(require("node:os"));
|
|
10
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
11
|
+
const DEFAULT_CONFIG = {
|
|
12
|
+
dockerImage: 'claude-code-runner:latest',
|
|
13
|
+
buildImage: true, // Build locally by default, set to false to pull from registry
|
|
14
|
+
autoPush: true,
|
|
15
|
+
autoCreatePR: true,
|
|
16
|
+
autoStartClaude: true,
|
|
17
|
+
defaultShell: 'claude', // Default to Claude mode for backward compatibility
|
|
18
|
+
claudeConfigPath: node_path_1.default.join(node_os_1.default.homedir(), '.claude.json'),
|
|
19
|
+
setupCommands: [], // Example: ["npm install", "pip install -r requirements.txt"]
|
|
20
|
+
allowedTools: ['*'], // All tools allowed in sandbox
|
|
21
|
+
includeUntracked: false, // Don't include untracked files by default
|
|
22
|
+
// maxThinkingTokens: 100000,
|
|
23
|
+
// bashTimeout: 600000, // 10 minutes
|
|
24
|
+
};
|
|
25
|
+
async function loadConfig(configPath) {
|
|
26
|
+
try {
|
|
27
|
+
const fullPath = node_path_1.default.resolve(configPath);
|
|
28
|
+
const configContent = await promises_1.default.readFile(fullPath, 'utf-8');
|
|
29
|
+
const userConfig = JSON.parse(configContent);
|
|
30
|
+
// Merge with defaults
|
|
31
|
+
const finalConfig = {
|
|
32
|
+
...DEFAULT_CONFIG,
|
|
33
|
+
...userConfig,
|
|
34
|
+
};
|
|
35
|
+
// If buildImage is false and dockerImage wasn't explicitly set, use official image
|
|
36
|
+
if (finalConfig.buildImage === false && userConfig.dockerImage === undefined) {
|
|
37
|
+
finalConfig.dockerImage = 'registry.gitlab.soraharu.com/xiaoxi/claude-code-runner:latest';
|
|
38
|
+
}
|
|
39
|
+
return finalConfig;
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
// Config file not found or invalid, use defaults
|
|
43
|
+
return DEFAULT_CONFIG;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
async function saveConfig(config, configPath) {
|
|
47
|
+
const fullPath = node_path_1.default.resolve(configPath);
|
|
48
|
+
await promises_1.default.writeFile(fullPath, JSON.stringify(config, null, 2));
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";;;;;AAoBA,gCAuBC;AAED,gCAMC;AAlDD,gEAAkC;AAClC,sDAAyB;AACzB,0DAA6B;AAE7B,MAAM,cAAc,GAAkB;IACrC,WAAW,EAAE,2BAA2B;IACxC,UAAU,EAAE,IAAI,EAAE,+DAA+D;IACjF,QAAQ,EAAE,IAAI;IACd,YAAY,EAAE,IAAI;IAClB,eAAe,EAAE,IAAI;IACrB,YAAY,EAAE,QAAQ,EAAE,oDAAoD;IAC5E,gBAAgB,EAAE,mBAAI,CAAC,IAAI,CAAC,iBAAE,CAAC,OAAO,EAAE,EAAE,cAAc,CAAC;IACzD,aAAa,EAAE,EAAE,EAAE,8DAA8D;IACjF,YAAY,EAAE,CAAC,GAAG,CAAC,EAAE,+BAA+B;IACpD,gBAAgB,EAAE,KAAK,EAAE,2CAA2C;IACpE,6BAA6B;IAC7B,qCAAqC;CACrC,CAAC;AAEK,KAAK,UAAU,UAAU,CAAC,UAAkB;IAClD,IAAI,CAAC;QACJ,MAAM,QAAQ,GAAG,mBAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAC1C,MAAM,aAAa,GAAG,MAAM,kBAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC3D,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAE7C,sBAAsB;QACtB,MAAM,WAAW,GAAG;YACnB,GAAG,cAAc;YACjB,GAAG,UAAU;SACb,CAAC;QAEF,mFAAmF;QACnF,IAAI,WAAW,CAAC,UAAU,KAAK,KAAK,IAAI,UAAU,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YAC9E,WAAW,CAAC,WAAW,GAAG,+DAA+D,CAAC;QAC3F,CAAC;QAED,OAAO,WAAW,CAAC;IACpB,CAAC;IACD,OAAO,KAAK,EAAE,CAAC;QACd,iDAAiD;QACjD,OAAO,cAAc,CAAC;IACvB,CAAC;AACF,CAAC;AAEM,KAAK,UAAU,UAAU,CAC/B,MAAqB,EACrB,UAAkB;IAElB,MAAM,QAAQ,GAAG,mBAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC1C,MAAM,kBAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC/D,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type Docker from 'dockerode';
|
|
2
|
+
import type { SandboxConfig } from './types';
|
|
3
|
+
export declare class ContainerManager {
|
|
4
|
+
private docker;
|
|
5
|
+
private config;
|
|
6
|
+
private containers;
|
|
7
|
+
constructor(docker: Docker, config: SandboxConfig);
|
|
8
|
+
start(containerConfig: any): Promise<string>;
|
|
9
|
+
private ensureImage;
|
|
10
|
+
private pullImage;
|
|
11
|
+
private buildDefaultImage;
|
|
12
|
+
private buildImage;
|
|
13
|
+
private createContainer;
|
|
14
|
+
private prepareEnvironment;
|
|
15
|
+
private prepareVolumes;
|
|
16
|
+
private _copyWorkingDirectory;
|
|
17
|
+
private _copyClaudeConfig;
|
|
18
|
+
private _copyGitConfig;
|
|
19
|
+
private setupGitAndStartupScript;
|
|
20
|
+
private runSetupCommands;
|
|
21
|
+
cleanup(): Promise<void>;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=container.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../src/container.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,EAAe,aAAa,EAAE,MAAM,SAAS,CAAC;AAU1D,qBAAa,gBAAgB;IAC5B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,UAAU,CAA4C;gBAElD,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa;IAK3C,KAAK,CAAC,eAAe,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC;YAmDpC,WAAW;YAiDX,SAAS;YAwBT,iBAAiB;YA0HjB,UAAU;YAkCV,eAAe;IAoC7B,OAAO,CAAC,kBAAkB;IA8I1B,OAAO,CAAC,cAAc;YAmFR,qBAAqB;YAwIrB,iBAAiB;YAqMjB,cAAc;YAgFd,wBAAwB;YA8HxB,gBAAgB;IAuExB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAY9B"}
|