claw-zero 0.1.0 → 0.1.1
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/dist/container.d.ts.map +1 -1
- package/dist/container.js +26 -11
- package/dist/container.js.map +1 -1
- package/dist/docker.d.ts +6 -2
- package/dist/docker.d.ts.map +1 -1
- package/dist/docker.js +18 -4
- package/dist/docker.js.map +1 -1
- package/dist/index.js +57 -4
- package/dist/index.js.map +1 -1
- package/dist/logger.d.ts +7 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +29 -0
- package/dist/logger.js.map +1 -0
- package/dist/network.d.ts +15 -0
- package/dist/network.d.ts.map +1 -0
- package/dist/network.js +89 -0
- package/dist/network.js.map +1 -0
- package/package.json +1 -1
package/dist/container.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../src/container.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAMrD,yEAAyE;AACzE,wBAAsB,kBAAkB,IAAI,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../src/container.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAMrD,yEAAyE;AACzE,wBAAsB,kBAAkB,IAAI,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAqBpE;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,kBAAkB,GAC9B,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAwB3B"}
|
package/dist/container.js
CHANGED
|
@@ -6,7 +6,14 @@ const IMAGE = 'ghcr.io/openclaw/openclaw:latest';
|
|
|
6
6
|
const PORT = 3845;
|
|
7
7
|
/** Pulls the OpenClaw container image; returns the pulled image size. */
|
|
8
8
|
export async function pullContainerImage() {
|
|
9
|
-
|
|
9
|
+
try {
|
|
10
|
+
await execa('docker', ['pull', IMAGE], { stdio: 'pipe', timeout: 600_000 });
|
|
11
|
+
}
|
|
12
|
+
catch (err) {
|
|
13
|
+
const stderr = err.stderr ?? '';
|
|
14
|
+
const lastLine = stderr.trim().split('\n').pop() ?? 'docker pull failed';
|
|
15
|
+
throw new Error(lastLine);
|
|
16
|
+
}
|
|
10
17
|
// Get image size after pull
|
|
11
18
|
const { stdout } = await execa('docker', [
|
|
12
19
|
'image',
|
|
@@ -26,16 +33,24 @@ export async function pullContainerImage() {
|
|
|
26
33
|
* - Passes the API key as ANTHROPIC_API_KEY env var
|
|
27
34
|
*/
|
|
28
35
|
export async function launchContainer(apiKey, _profileKey) {
|
|
29
|
-
|
|
30
|
-
'
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
36
|
+
try {
|
|
37
|
+
await execa('docker', [
|
|
38
|
+
'run',
|
|
39
|
+
'--detach',
|
|
40
|
+
'--rm',
|
|
41
|
+
'--name', 'openclaw_sandbox',
|
|
42
|
+
'--publish', `${PORT}:${PORT}`,
|
|
43
|
+
'--volume', `${WORKSPACE_PATH}:/workspace`,
|
|
44
|
+
'--env', `ANTHROPIC_API_KEY=${apiKey}`,
|
|
45
|
+
IMAGE,
|
|
46
|
+
], { stdio: 'ignore', timeout: 30_000 });
|
|
47
|
+
}
|
|
48
|
+
catch (err) {
|
|
49
|
+
if (err.timedOut) {
|
|
50
|
+
throw new Error('docker run timed out after 30s — check your internet connection');
|
|
51
|
+
}
|
|
52
|
+
throw err;
|
|
53
|
+
}
|
|
39
54
|
return { port: PORT };
|
|
40
55
|
}
|
|
41
56
|
//# sourceMappingURL=container.js.map
|
package/dist/container.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"container.js","sourceRoot":"","sources":["../src/container.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAC9B,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,oBAAoB,CAAC,CAAC;AACxE,MAAM,KAAK,GAAG,kCAAkC,CAAC;AACjD,MAAM,IAAI,GAAG,IAAI,CAAC;AAElB,yEAAyE;AACzE,MAAM,CAAC,KAAK,UAAU,kBAAkB;IACtC,MAAM,KAAK,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"container.js","sourceRoot":"","sources":["../src/container.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAC9B,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,oBAAoB,CAAC,CAAC;AACxE,MAAM,KAAK,GAAG,kCAAkC,CAAC;AACjD,MAAM,IAAI,GAAG,IAAI,CAAC;AAElB,yEAAyE;AACzE,MAAM,CAAC,KAAK,UAAU,kBAAkB;IACtC,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;IAC9E,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,MAAM,GAAI,GAA2B,CAAC,MAAM,IAAI,EAAE,CAAC;QACzD,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,IAAI,oBAAoB,CAAC;QACzE,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC5B,CAAC;IAED,4BAA4B;IAC5B,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,QAAQ,EAAE;QACvC,OAAO;QACP,SAAS;QACT,KAAK;QACL,UAAU;QACV,WAAW;KACZ,CAAC,CAAC;IACH,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;IAC1C,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,GAAG,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;IAEnF,OAAO,EAAE,IAAI,EAAE,CAAC;AAClB,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,MAAc,EACd,WAA+B;IAE/B,IAAI,CAAC;QACH,MAAM,KAAK,CACT,QAAQ,EACR;YACE,KAAK;YACL,UAAU;YACV,MAAM;YACN,QAAQ,EAAE,kBAAkB;YAC5B,WAAW,EAAE,GAAG,IAAI,IAAI,IAAI,EAAE;YAC9B,UAAU,EAAE,GAAG,cAAc,aAAa;YAC1C,OAAO,EAAE,qBAAqB,MAAM,EAAE;YACtC,KAAK;SACN,EACD,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,CACrC,CAAC;IACJ,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,IAAK,GAA8B,CAAC,QAAQ,EAAE,CAAC;YAC7C,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;QACrF,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACxB,CAAC"}
|
package/dist/docker.d.ts
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
|
-
/**
|
|
1
|
+
/**
|
|
2
|
+
* Returns true if Docker Desktop is installed OR the docker CLI responds.
|
|
3
|
+
* Checks /Applications/Docker.app first (covers the installed-but-not-launched case)
|
|
4
|
+
* before falling back to `docker --version`.
|
|
5
|
+
*/
|
|
2
6
|
export declare function checkDocker(): Promise<boolean>;
|
|
3
|
-
/** Install Docker Desktop via Homebrew Cask. */
|
|
7
|
+
/** Install Docker Desktop via Homebrew Cask. Captures output — does not bleed into Listr spinner. */
|
|
4
8
|
export declare function installDocker(): Promise<void>;
|
|
5
9
|
/** Open Docker.app and poll `docker info` until daemon is ready (max 60s). */
|
|
6
10
|
export declare function startDockerDaemon(): Promise<void>;
|
package/dist/docker.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docker.d.ts","sourceRoot":"","sources":["../src/docker.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"docker.d.ts","sourceRoot":"","sources":["../src/docker.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CAQpD;AAED,qGAAqG;AACrG,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAQnD;AAED,8EAA8E;AAC9E,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CA0BvD"}
|
package/dist/docker.js
CHANGED
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
import { execa } from 'execa';
|
|
2
|
-
|
|
2
|
+
import { existsSync } from 'node:fs';
|
|
3
|
+
/**
|
|
4
|
+
* Returns true if Docker Desktop is installed OR the docker CLI responds.
|
|
5
|
+
* Checks /Applications/Docker.app first (covers the installed-but-not-launched case)
|
|
6
|
+
* before falling back to `docker --version`.
|
|
7
|
+
*/
|
|
3
8
|
export async function checkDocker() {
|
|
9
|
+
if (existsSync('/Applications/Docker.app'))
|
|
10
|
+
return true;
|
|
4
11
|
try {
|
|
5
12
|
await execa('docker', ['--version']);
|
|
6
13
|
return true;
|
|
@@ -9,9 +16,16 @@ export async function checkDocker() {
|
|
|
9
16
|
return false;
|
|
10
17
|
}
|
|
11
18
|
}
|
|
12
|
-
/** Install Docker Desktop via Homebrew Cask. */
|
|
19
|
+
/** Install Docker Desktop via Homebrew Cask. Captures output — does not bleed into Listr spinner. */
|
|
13
20
|
export async function installDocker() {
|
|
14
|
-
|
|
21
|
+
try {
|
|
22
|
+
await execa('brew', ['install', '--cask', 'docker'], { stdio: 'pipe', timeout: 600_000 });
|
|
23
|
+
}
|
|
24
|
+
catch (err) {
|
|
25
|
+
const stderr = err.stderr ?? '';
|
|
26
|
+
const lastLine = stderr.trim().split('\n').pop() ?? 'brew install failed';
|
|
27
|
+
throw new Error(lastLine);
|
|
28
|
+
}
|
|
15
29
|
}
|
|
16
30
|
/** Open Docker.app and poll `docker info` until daemon is ready (max 60s). */
|
|
17
31
|
export async function startDockerDaemon() {
|
|
@@ -37,6 +51,6 @@ export async function startDockerDaemon() {
|
|
|
37
51
|
// Still starting — keep polling
|
|
38
52
|
}
|
|
39
53
|
}
|
|
40
|
-
throw new Error('Docker
|
|
54
|
+
throw new Error('open -a Docker timed out after 60s — check your internet connection');
|
|
41
55
|
}
|
|
42
56
|
//# sourceMappingURL=docker.js.map
|
package/dist/docker.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docker.js","sourceRoot":"","sources":["../src/docker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"docker.js","sourceRoot":"","sources":["../src/docker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAC9B,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErC;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,IAAI,UAAU,CAAC,0BAA0B,CAAC;QAAE,OAAO,IAAI,CAAC;IACxD,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;QACrC,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,qGAAqG;AACrG,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;IAC5F,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,MAAM,GAAI,GAA2B,CAAC,MAAM,IAAI,EAAE,CAAC;QACzD,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,IAAI,qBAAqB,CAAC;QAC1E,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC5B,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACrC,qCAAqC;IACrC,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QACrD,OAAO,CAAC,kBAAkB;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,0BAA0B;IAC5B,CAAC;IAED,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;IAEtC,MAAM,gBAAgB,GAAG,IAAI,CAAC;IAC9B,MAAM,WAAW,GAAG,MAAM,CAAC;IAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAEzB,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,WAAW,EAAE,CAAC;QACxC,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC,CAAC;QACtE,IAAI,CAAC;YACH,MAAM,KAAK,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;YACrD,OAAO,CAAC,eAAe;QACzB,CAAC;QAAC,MAAM,CAAC;YACP,gCAAgC;QAClC,CAAC;IACH,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC,CAAC;AACzF,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -8,6 +8,8 @@ import { execa } from 'execa';
|
|
|
8
8
|
import { checkDocker, installDocker, startDockerDaemon } from './docker.js';
|
|
9
9
|
import { createWorkspace } from './workspace.js';
|
|
10
10
|
import { pullContainerImage, launchContainer } from './container.js';
|
|
11
|
+
import { checkInternetSpeed, buildDownloadManifest, formatManifestTable } from './network.js';
|
|
12
|
+
import { initLog, log, getLogPath } from './logger.js';
|
|
11
13
|
/** Formats API key for inline confirmation: first 7 + last 4 chars. */
|
|
12
14
|
function maskApiKey(key) {
|
|
13
15
|
if (key.length <= 11)
|
|
@@ -71,6 +73,38 @@ async function main() {
|
|
|
71
73
|
console.log(`\n${pc.dim('◇')} ${pc.dim('Generating clawdbot.json')}`);
|
|
72
74
|
console.log(highlightJson(selectedProfile.config));
|
|
73
75
|
console.log();
|
|
76
|
+
// ── 8.5 Pre-flight gate ──────────────────────────────────────────────────────
|
|
77
|
+
const dockerInstalled = await checkDocker();
|
|
78
|
+
let speedMbps = 0;
|
|
79
|
+
try {
|
|
80
|
+
process.stdout.write(pc.dim(' Measuring download speed...'));
|
|
81
|
+
const speedResult = await checkInternetSpeed();
|
|
82
|
+
speedMbps = speedResult.mbps;
|
|
83
|
+
process.stdout.write(`\r${' '.repeat(40)}\r`); // clear the line
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
process.stdout.write(`\r${' '.repeat(40)}\r`);
|
|
87
|
+
// Non-fatal — proceed without estimate
|
|
88
|
+
}
|
|
89
|
+
const manifest = buildDownloadManifest(dockerInstalled);
|
|
90
|
+
if (manifest.length > 0) {
|
|
91
|
+
const table = formatManifestTable(manifest, speedMbps);
|
|
92
|
+
console.log(`\n${pc.dim('◇')} ${pc.bold('Download plan')}`);
|
|
93
|
+
console.log(pc.dim(table));
|
|
94
|
+
console.log();
|
|
95
|
+
if (speedMbps > 0 && speedMbps < 10) {
|
|
96
|
+
console.log(pc.yellow(` ⚠ Slow connection detected (${speedMbps.toFixed(1)} MB/s). Downloads may take a while.`));
|
|
97
|
+
console.log();
|
|
98
|
+
}
|
|
99
|
+
const proceed = await p.confirm({ message: 'Proceed with download?' });
|
|
100
|
+
if (p.isCancel(proceed) || !proceed) {
|
|
101
|
+
p.cancel('Setup cancelled.');
|
|
102
|
+
process.exit(0);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
// Initialise session log (workspace may not exist yet — logger handles mkdir)
|
|
106
|
+
const logFilePath = initLog();
|
|
107
|
+
log('INFO', `Profile selected: ${profileKey}`);
|
|
74
108
|
// ── 3.6 Sequential install checklist (listr2) ───────────────────────────────
|
|
75
109
|
let dockerVersion = 'Docker';
|
|
76
110
|
let imageSize = '1.2 GB';
|
|
@@ -79,10 +113,12 @@ async function main() {
|
|
|
79
113
|
{
|
|
80
114
|
title: 'Checking Docker daemon...',
|
|
81
115
|
task: async (_, task) => {
|
|
82
|
-
|
|
83
|
-
if (!
|
|
116
|
+
log('INFO', 'Task 1 start: Docker check');
|
|
117
|
+
if (!dockerInstalled) {
|
|
84
118
|
task.title = 'Installing Docker via Homebrew...';
|
|
119
|
+
log('INFO', 'Docker not found — starting Homebrew install');
|
|
85
120
|
await installDocker();
|
|
121
|
+
log('INFO', 'Docker installed via Homebrew');
|
|
86
122
|
}
|
|
87
123
|
await startDockerDaemon();
|
|
88
124
|
try {
|
|
@@ -92,36 +128,45 @@ async function main() {
|
|
|
92
128
|
catch {
|
|
93
129
|
// version string is cosmetic — don't block
|
|
94
130
|
}
|
|
131
|
+
log('INFO', `Task 1 done: ${dockerVersion} running`);
|
|
95
132
|
task.title = pc.dim(`✔ ${dockerVersion} is running`);
|
|
96
133
|
},
|
|
97
134
|
},
|
|
98
135
|
{
|
|
99
136
|
title: 'Creating workspace directory...',
|
|
100
137
|
task: async (_, task) => {
|
|
138
|
+
log('INFO', 'Task 2 start: create workspace');
|
|
101
139
|
await createWorkspace();
|
|
140
|
+
log('INFO', `Task 2 done: workspace at ${WORKSPACE_PATH}`);
|
|
102
141
|
task.title = pc.dim(`✔ Workspace ready at ${WORKSPACE_PATH}`);
|
|
103
142
|
},
|
|
104
143
|
},
|
|
105
144
|
{
|
|
106
145
|
title: 'Writing clawdbot.json...',
|
|
107
146
|
task: async (_, task) => {
|
|
147
|
+
log('INFO', 'Task 3 start: write clawdbot.json');
|
|
108
148
|
await generateConfig(profileKey, apiKey);
|
|
149
|
+
log('INFO', 'Task 3 done: clawdbot.json written');
|
|
109
150
|
task.title = pc.dim('✔ clawdbot.json written');
|
|
110
151
|
},
|
|
111
152
|
},
|
|
112
153
|
{
|
|
113
154
|
title: 'Pulling OpenClaw container image...',
|
|
114
155
|
task: async (_, task) => {
|
|
156
|
+
log('INFO', 'Task 4 start: docker pull');
|
|
115
157
|
const result = await pullContainerImage();
|
|
116
158
|
imageSize = result.size;
|
|
159
|
+
log('INFO', `Task 4 done: image pulled (${imageSize})`);
|
|
117
160
|
task.title = pc.dim(`✔ Image pulled (${imageSize})`);
|
|
118
161
|
},
|
|
119
162
|
},
|
|
120
163
|
{
|
|
121
164
|
title: 'Booting container...',
|
|
122
165
|
task: async (_, task) => {
|
|
166
|
+
log('INFO', 'Task 5 start: docker run');
|
|
123
167
|
const result = await launchContainer(apiKey, profileKey);
|
|
124
168
|
containerPort = result.port;
|
|
169
|
+
log('INFO', `Task 5 done: container live on port ${containerPort}`);
|
|
125
170
|
task.title = pc.dim(`✔ Container live on port ${containerPort}`);
|
|
126
171
|
},
|
|
127
172
|
},
|
|
@@ -132,7 +177,11 @@ async function main() {
|
|
|
132
177
|
await tasks.run();
|
|
133
178
|
}
|
|
134
179
|
catch (err) {
|
|
135
|
-
|
|
180
|
+
const message = err.message;
|
|
181
|
+
log('ERROR', `Setup failed: ${message}`);
|
|
182
|
+
const lp = getLogPath();
|
|
183
|
+
const logHint = lp ? `\n Log: ${lp}` : '';
|
|
184
|
+
p.cancel(`Setup failed: ${message}${logHint}`);
|
|
136
185
|
process.exit(1);
|
|
137
186
|
}
|
|
138
187
|
// ── 3.7 Outro ───────────────────────────────────────────────────────────────
|
|
@@ -148,7 +197,11 @@ async function main() {
|
|
|
148
197
|
p.outro(`${pc.green('✔')} Sandbox successfully booted!\n\n${box}`);
|
|
149
198
|
}
|
|
150
199
|
main().catch((err) => {
|
|
151
|
-
|
|
200
|
+
const message = err.message;
|
|
201
|
+
log('ERROR', `Unexpected error: ${message}`);
|
|
202
|
+
const lp = getLogPath();
|
|
203
|
+
const logHint = lp ? `\n Log: ${lp}` : '';
|
|
204
|
+
p.cancel(`Unexpected error: ${message}${logHint}`);
|
|
152
205
|
process.exit(1);
|
|
153
206
|
});
|
|
154
207
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AACpC,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAE/B,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAC9B,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/logger.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/** Creates the log file at ~/Desktop/OpenClaw_Workspace/claw_zero_YYYY-MM-DD_HHMMSS.log */
|
|
2
|
+
export declare function initLog(): string;
|
|
3
|
+
/** Appends a timestamped line to the session log. No-op if initLog() hasn't been called. */
|
|
4
|
+
export declare function log(level: 'INFO' | 'WARN' | 'ERROR', message: string): void;
|
|
5
|
+
/** Returns the current log file path, or null if not initialised. */
|
|
6
|
+
export declare function getLogPath(): string | null;
|
|
7
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAQA,2FAA2F;AAC3F,wBAAgB,OAAO,IAAI,MAAM,CAYhC;AAED,4FAA4F;AAC5F,wBAAgB,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAI3E;AAED,qEAAqE;AACrE,wBAAgB,UAAU,IAAI,MAAM,GAAG,IAAI,CAE1C"}
|
package/dist/logger.js
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { appendFileSync, mkdirSync } from 'node:fs';
|
|
2
|
+
import { homedir } from 'node:os';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
const WORKSPACE_PATH = join(homedir(), 'Desktop', 'OpenClaw_Workspace');
|
|
5
|
+
let logPath = null;
|
|
6
|
+
/** Creates the log file at ~/Desktop/OpenClaw_Workspace/claw_zero_YYYY-MM-DD_HHMMSS.log */
|
|
7
|
+
export function initLog() {
|
|
8
|
+
const now = new Date();
|
|
9
|
+
const datePart = now.toISOString().slice(0, 10); // YYYY-MM-DD
|
|
10
|
+
const timePart = now.toTimeString().slice(0, 8).replace(/:/g, ''); // HHMMSS
|
|
11
|
+
const filename = `claw_zero_${datePart}_${timePart}.log`;
|
|
12
|
+
// Workspace may not exist yet — create it if needed
|
|
13
|
+
mkdirSync(WORKSPACE_PATH, { recursive: true });
|
|
14
|
+
logPath = join(WORKSPACE_PATH, filename);
|
|
15
|
+
log('INFO', 'claw_zero session started');
|
|
16
|
+
return logPath;
|
|
17
|
+
}
|
|
18
|
+
/** Appends a timestamped line to the session log. No-op if initLog() hasn't been called. */
|
|
19
|
+
export function log(level, message) {
|
|
20
|
+
if (!logPath)
|
|
21
|
+
return;
|
|
22
|
+
const time = new Date().toTimeString().slice(0, 8); // HH:MM:SS
|
|
23
|
+
appendFileSync(logPath, `[${time}] [${level}] ${message}\n`);
|
|
24
|
+
}
|
|
25
|
+
/** Returns the current log file path, or null if not initialised. */
|
|
26
|
+
export function getLogPath() {
|
|
27
|
+
return logPath;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,oBAAoB,CAAC,CAAC;AAExE,IAAI,OAAO,GAAkB,IAAI,CAAC;AAElC,2FAA2F;AAC3F,MAAM,UAAU,OAAO;IACrB,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa;IAC9D,MAAM,QAAQ,GAAG,GAAG,CAAC,YAAY,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS;IAC5E,MAAM,QAAQ,GAAG,aAAa,QAAQ,IAAI,QAAQ,MAAM,CAAC;IAEzD,oDAAoD;IACpD,SAAS,CAAC,cAAc,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE/C,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;IACzC,GAAG,CAAC,MAAM,EAAE,2BAA2B,CAAC,CAAC;IACzC,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,4FAA4F;AAC5F,MAAM,UAAU,GAAG,CAAC,KAAgC,EAAE,OAAe;IACnE,IAAI,CAAC,OAAO;QAAE,OAAO;IACrB,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC,YAAY,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW;IAC/D,cAAc,CAAC,OAAO,EAAE,IAAI,IAAI,MAAM,KAAK,KAAK,OAAO,IAAI,CAAC,CAAC;AAC/D,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,UAAU;IACxB,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export interface SpeedResult {
|
|
2
|
+
mbps: number;
|
|
3
|
+
}
|
|
4
|
+
/** Downloads 10 MB from Cloudflare and returns measured throughput in MB/s. */
|
|
5
|
+
export declare function checkInternetSpeed(): Promise<SpeedResult>;
|
|
6
|
+
export interface DownloadItem {
|
|
7
|
+
name: string;
|
|
8
|
+
source: string;
|
|
9
|
+
sizeMB: number;
|
|
10
|
+
}
|
|
11
|
+
/** Returns the list of things that need to be downloaded. */
|
|
12
|
+
export declare function buildDownloadManifest(dockerInstalled: boolean): DownloadItem[];
|
|
13
|
+
/** Formats a manifest table with per-item and total time estimates. */
|
|
14
|
+
export declare function formatManifestTable(items: DownloadItem[], speedMbps: number): string;
|
|
15
|
+
//# sourceMappingURL=network.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../src/network.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,+EAA+E;AAC/E,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,WAAW,CAAC,CAwC/D;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,6DAA6D;AAC7D,wBAAgB,qBAAqB,CAAC,eAAe,EAAE,OAAO,GAAG,YAAY,EAAE,CAkB9E;AAED,uEAAuE;AACvE,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAmCpF"}
|
package/dist/network.js
ADDED
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import https from 'node:https';
|
|
2
|
+
const SPEED_TEST_URL = 'https://speed.cloudflare.com/__down?bytes=10000000';
|
|
3
|
+
const SPEED_TEST_SIZE_MB = 10;
|
|
4
|
+
const SPEED_TEST_TIMEOUT_MS = 15_000;
|
|
5
|
+
/** Downloads 10 MB from Cloudflare and returns measured throughput in MB/s. */
|
|
6
|
+
export async function checkInternetSpeed() {
|
|
7
|
+
return new Promise((resolve, reject) => {
|
|
8
|
+
const controller = new AbortController();
|
|
9
|
+
const timer = setTimeout(() => {
|
|
10
|
+
controller.abort();
|
|
11
|
+
reject(new Error('Internet speed check timed out after 15s'));
|
|
12
|
+
}, SPEED_TEST_TIMEOUT_MS);
|
|
13
|
+
const start = Date.now();
|
|
14
|
+
let received = 0;
|
|
15
|
+
const req = https.get(SPEED_TEST_URL, (res) => {
|
|
16
|
+
res.on('data', (chunk) => {
|
|
17
|
+
received += chunk.length;
|
|
18
|
+
});
|
|
19
|
+
res.on('end', () => {
|
|
20
|
+
clearTimeout(timer);
|
|
21
|
+
const elapsedSec = (Date.now() - start) / 1000;
|
|
22
|
+
const mbps = SPEED_TEST_SIZE_MB / elapsedSec;
|
|
23
|
+
resolve({ mbps });
|
|
24
|
+
});
|
|
25
|
+
res.on('error', (err) => {
|
|
26
|
+
clearTimeout(timer);
|
|
27
|
+
reject(err);
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
req.on('error', (err) => {
|
|
31
|
+
clearTimeout(timer);
|
|
32
|
+
if (controller.signal.aborted) {
|
|
33
|
+
reject(new Error('Internet speed check timed out after 15s'));
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
reject(err);
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
controller.signal.addEventListener('abort', () => {
|
|
40
|
+
req.destroy();
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
/** Returns the list of things that need to be downloaded. */
|
|
45
|
+
export function buildDownloadManifest(dockerInstalled) {
|
|
46
|
+
const items = [];
|
|
47
|
+
if (!dockerInstalled) {
|
|
48
|
+
items.push({
|
|
49
|
+
name: 'Docker Desktop',
|
|
50
|
+
source: 'brew --cask',
|
|
51
|
+
sizeMB: 1200,
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
items.push({
|
|
55
|
+
name: 'OpenClaw image',
|
|
56
|
+
source: 'ghcr.io/openclaw/openclaw:latest',
|
|
57
|
+
sizeMB: 800,
|
|
58
|
+
});
|
|
59
|
+
return items;
|
|
60
|
+
}
|
|
61
|
+
/** Formats a manifest table with per-item and total time estimates. */
|
|
62
|
+
export function formatManifestTable(items, speedMbps) {
|
|
63
|
+
if (items.length === 0)
|
|
64
|
+
return '';
|
|
65
|
+
const COL = { name: 24, source: 42, size: 10, time: 16 };
|
|
66
|
+
const pad = (s, n) => s.slice(0, n).padEnd(n);
|
|
67
|
+
const header = pad('Component', COL.name) +
|
|
68
|
+
pad('Source', COL.source) +
|
|
69
|
+
pad('Size', COL.size) +
|
|
70
|
+
pad('Est. Time', COL.time);
|
|
71
|
+
const divider = '─'.repeat(COL.name + COL.source + COL.size + COL.time);
|
|
72
|
+
const rows = items.map((item) => {
|
|
73
|
+
const estSec = speedMbps > 0 ? item.sizeMB / speedMbps : 0;
|
|
74
|
+
const estTime = estSec < 60 ? `~${Math.ceil(estSec)}s` : `~${Math.ceil(estSec / 60)}m`;
|
|
75
|
+
return (pad(item.name, COL.name) +
|
|
76
|
+
pad(item.source, COL.source) +
|
|
77
|
+
pad(`${item.sizeMB} MB`, COL.size) +
|
|
78
|
+
pad(estTime, COL.time));
|
|
79
|
+
});
|
|
80
|
+
const totalMB = items.reduce((sum, i) => sum + i.sizeMB, 0);
|
|
81
|
+
const totalSec = speedMbps > 0 ? totalMB / speedMbps : 0;
|
|
82
|
+
const totalTime = totalSec < 60 ? `~${Math.ceil(totalSec)}s` : `~${Math.ceil(totalSec / 60)}m`;
|
|
83
|
+
const totalRow = pad('TOTAL', COL.name) +
|
|
84
|
+
pad('', COL.source) +
|
|
85
|
+
pad(`${totalMB} MB`, COL.size) +
|
|
86
|
+
pad(totalTime, COL.time);
|
|
87
|
+
return [header, divider, ...rows, divider, totalRow].join('\n');
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=network.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"network.js","sourceRoot":"","sources":["../src/network.ts"],"names":[],"mappings":"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"}
|