@cereworker/cli 26.328.12 → 26.329.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/images.d.ts.map +1 -1
- package/dist/images.js +6 -4
- package/dist/images.js.map +1 -1
- package/dist/upgrade.js +3 -3
- package/dist/upgrade.js.map +1 -1
- package/package.json +10 -10
- package/scripts/postinstall.mjs +24 -7
package/dist/images.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"images.d.ts","sourceRoot":"","sources":["../src/images.ts"],"names":[],"mappings":"AAGA,wBAAsB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"images.d.ts","sourceRoot":"","sources":["../src/images.ts"],"names":[],"mappings":"AAGA,wBAAsB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CA8E/C"}
|
package/dist/images.js
CHANGED
|
@@ -3,6 +3,8 @@ import { loadConfig } from '@cereworker/config';
|
|
|
3
3
|
export async function runImages() {
|
|
4
4
|
const config = loadConfig();
|
|
5
5
|
const image = config.cerebellum.docker.image;
|
|
6
|
+
// Strip tag for docker images query (e.g. "cereworker/cerebellum:gpu" → "cereworker/cerebellum")
|
|
7
|
+
const repo = image.includes(':') ? image.slice(0, image.lastIndexOf(':')) : image;
|
|
6
8
|
// Detect docker
|
|
7
9
|
let dockerCmd = 'docker';
|
|
8
10
|
try {
|
|
@@ -20,7 +22,7 @@ export async function runImages() {
|
|
|
20
22
|
}
|
|
21
23
|
// List local images
|
|
22
24
|
try {
|
|
23
|
-
const output = execSync(`${dockerCmd} images
|
|
25
|
+
const output = execSync(`${dockerCmd} images ${repo} --format "table {{.Repository}}:{{.Tag}}\t{{.ID}}\t{{.Size}}\t{{.CreatedSince}}"`, { stdio: 'pipe' }).toString().trim();
|
|
24
26
|
if (!output || output.split('\n').length <= 1) {
|
|
25
27
|
console.log('No Cerebellum images found locally.');
|
|
26
28
|
console.log(`Run "cereworker images upgrade" to pull ${image}.`);
|
|
@@ -50,11 +52,11 @@ export async function runImages() {
|
|
|
50
52
|
}
|
|
51
53
|
// Check remote digest vs local
|
|
52
54
|
try {
|
|
53
|
-
const localDigest = execSync(`${dockerCmd} images
|
|
55
|
+
const localDigest = execSync(`${dockerCmd} images ${image} --format "{{.Digest}}"`, { stdio: 'pipe' }).toString().trim();
|
|
54
56
|
if (localDigest && localDigest !== '<none>') {
|
|
55
|
-
const remoteDigest = execSync(`${dockerCmd} manifest inspect
|
|
57
|
+
const remoteDigest = execSync(`${dockerCmd} manifest inspect ${image} 2>/dev/null | grep -o '"digest": "sha256:[a-f0-9]*"' | head -1`, { stdio: 'pipe', timeout: 15_000 }).toString().trim();
|
|
56
58
|
if (remoteDigest && !remoteDigest.includes(localDigest.replace('sha256:', ''))) {
|
|
57
|
-
console.log(
|
|
59
|
+
console.log(`\nA newer image may be available. Run "cereworker images upgrade" to update.`);
|
|
58
60
|
}
|
|
59
61
|
}
|
|
60
62
|
}
|
package/dist/images.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"images.js","sourceRoot":"","sources":["../src/images.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,MAAM,CAAC,KAAK,UAAU,SAAS;IAC7B,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"images.js","sourceRoot":"","sources":["../src/images.ts"],"names":[],"mappings":"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"}
|
package/dist/upgrade.js
CHANGED
|
@@ -40,7 +40,7 @@ export async function runUpgrade() {
|
|
|
40
40
|
// Pull latest image
|
|
41
41
|
console.log(`Pulling ${image}...`);
|
|
42
42
|
try {
|
|
43
|
-
execSync(`${prefix}
|
|
43
|
+
execSync(`${prefix}${dockerBin} pull ${image}`, { stdio: 'inherit', timeout: 3_600_000 });
|
|
44
44
|
}
|
|
45
45
|
catch {
|
|
46
46
|
console.error(`Failed to pull ${image}`);
|
|
@@ -48,10 +48,10 @@ export async function runUpgrade() {
|
|
|
48
48
|
}
|
|
49
49
|
// Recreate container if it exists
|
|
50
50
|
try {
|
|
51
|
-
const existing = execSync(`${prefix}
|
|
51
|
+
const existing = execSync(`${prefix}${dockerBin} ps -aq -f name=cereworker-cerebellum`, { stdio: 'pipe' }).toString().trim();
|
|
52
52
|
if (existing) {
|
|
53
53
|
console.log('Stopping old container...');
|
|
54
|
-
execSync(`${prefix}
|
|
54
|
+
execSync(`${prefix}${dockerBin} rm -f cereworker-cerebellum`, { stdio: 'pipe' });
|
|
55
55
|
console.log('Old container removed. It will be recreated on next start.');
|
|
56
56
|
}
|
|
57
57
|
}
|
package/dist/upgrade.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../src/upgrade.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC;IAE7C,uBAAuB;IACvB,IAAI,SAAS,GAAG,EAAE,CAAC;IACnB,IAAI,CAAC;QACH,SAAS,GAAG,QAAQ,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC;IAC5E,CAAC;IAAC,MAAM,CAAC;QACP,KAAK,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE,uBAAuB,EAAE,kBAAkB,CAAC,EAAE,CAAC;YACjF,IAAI,CAAC;gBACH,QAAQ,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;gBAC5C,SAAS,GAAG,CAAC,CAAC;gBACd,MAAM;YACR,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;QACZ,CAAC;IACH,CAAC;IAED,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC1C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,0BAA0B;IAC1B,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,CAAC;QACH,QAAQ,CAAC,GAAG,SAAS,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;IACpE,CAAC;IAAC,MAAM,CAAC;QACP,IAAI,CAAC;YACH,QAAQ,CAAC,WAAW,SAAS,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;YAC1E,MAAM,GAAG,OAAO,CAAC;QACnB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,KAAK,CAAC,+EAA+E,CAAC,CAAC;YAC/F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,oBAAoB;IACpB,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,KAAK,CAAC,CAAC;IACnC,IAAI,CAAC;QACH,QAAQ,CAAC,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../src/upgrade.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC;IAE7C,uBAAuB;IACvB,IAAI,SAAS,GAAG,EAAE,CAAC;IACnB,IAAI,CAAC;QACH,SAAS,GAAG,QAAQ,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC;IAC5E,CAAC;IAAC,MAAM,CAAC;QACP,KAAK,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE,uBAAuB,EAAE,kBAAkB,CAAC,EAAE,CAAC;YACjF,IAAI,CAAC;gBACH,QAAQ,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;gBAC5C,SAAS,GAAG,CAAC,CAAC;gBACd,MAAM;YACR,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;QACZ,CAAC;IACH,CAAC;IAED,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC1C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,0BAA0B;IAC1B,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,CAAC;QACH,QAAQ,CAAC,GAAG,SAAS,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;IACpE,CAAC;IAAC,MAAM,CAAC;QACP,IAAI,CAAC;YACH,QAAQ,CAAC,WAAW,SAAS,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;YAC1E,MAAM,GAAG,OAAO,CAAC;QACnB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,KAAK,CAAC,+EAA+E,CAAC,CAAC;YAC/F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,oBAAoB;IACpB,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,KAAK,CAAC,CAAC;IACnC,IAAI,CAAC;QACH,QAAQ,CAAC,GAAG,MAAM,GAAG,SAAS,SAAS,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;IAC5F,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,KAAK,CAAC,kBAAkB,KAAK,EAAE,CAAC,CAAC;QACzC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,kCAAkC;IAClC,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,QAAQ,CACvB,GAAG,MAAM,GAAG,SAAS,uCAAuC,EAC5D,EAAE,KAAK,EAAE,MAAM,EAAE,CAClB,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC;QAEpB,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;YACzC,QAAQ,CAAC,GAAG,MAAM,GAAG,SAAS,8BAA8B,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;YACjF,OAAO,CAAC,GAAG,CAAC,4DAA4D,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,uCAAuC;IACzC,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;AACnC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cereworker/cli",
|
|
3
|
-
"version": "26.
|
|
3
|
+
"version": "26.329.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"bin": {
|
|
6
6
|
"cereworker": "dist/index.js"
|
|
@@ -22,15 +22,15 @@
|
|
|
22
22
|
"ink": "^5.1.0",
|
|
23
23
|
"@inkjs/ui": "^2.0.0",
|
|
24
24
|
"react": "^18.3.1",
|
|
25
|
-
"@cereworker/core": "26.
|
|
26
|
-
"@cereworker/
|
|
27
|
-
"@cereworker/
|
|
28
|
-
"@cereworker/
|
|
29
|
-
"@cereworker/
|
|
30
|
-
"@cereworker/
|
|
31
|
-
"@cereworker/hippocampus": "26.
|
|
32
|
-
"@cereworker/
|
|
33
|
-
"@cereworker/
|
|
25
|
+
"@cereworker/core": "26.329.1",
|
|
26
|
+
"@cereworker/config": "26.329.1",
|
|
27
|
+
"@cereworker/skills": "26.329.1",
|
|
28
|
+
"@cereworker/cerebellum-client": "26.329.1",
|
|
29
|
+
"@cereworker/cerebrum": "26.329.1",
|
|
30
|
+
"@cereworker/channels": "26.329.1",
|
|
31
|
+
"@cereworker/hippocampus": "26.329.1",
|
|
32
|
+
"@cereworker/gateway": "26.329.1",
|
|
33
|
+
"@cereworker/browser": "26.329.1"
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {
|
|
36
36
|
"@types/react": "^18.3.0",
|
package/scripts/postinstall.mjs
CHANGED
|
@@ -28,24 +28,41 @@ try {
|
|
|
28
28
|
|
|
29
29
|
// --- 2. Pull latest Cerebellum Docker image ---
|
|
30
30
|
|
|
31
|
-
|
|
31
|
+
// npm postinstall may have a restricted PATH — check common locations
|
|
32
|
+
let dockerBin = 'docker';
|
|
33
|
+
try {
|
|
34
|
+
execSync('docker --version', { stdio: 'pipe', timeout: 5_000 });
|
|
35
|
+
} catch {
|
|
36
|
+
const candidates = ['/usr/bin/docker', '/usr/local/bin/docker', '/snap/bin/docker'];
|
|
37
|
+
dockerBin = '';
|
|
38
|
+
for (const c of candidates) {
|
|
39
|
+
if (existsSync(c)) { dockerBin = c; break; }
|
|
40
|
+
}
|
|
41
|
+
if (!dockerBin) {
|
|
42
|
+
console.log('CereWorker: Docker not found — skipping Cerebellum image pull.');
|
|
43
|
+
console.log(' Install Docker and run "cereworker images upgrade" to pull the image later.');
|
|
44
|
+
process.exit(0);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
let dockerCmd = dockerBin;
|
|
32
49
|
|
|
33
50
|
try {
|
|
34
|
-
execSync(
|
|
51
|
+
execSync(`${dockerBin} info`, { stdio: 'pipe', timeout: 10_000 });
|
|
35
52
|
} catch {
|
|
36
53
|
// Docker not available directly — try with sudo
|
|
37
54
|
try {
|
|
38
|
-
execSync(
|
|
39
|
-
dockerCmd =
|
|
55
|
+
execSync(`sudo -n ${dockerBin} info`, { stdio: 'pipe', timeout: 10_000 });
|
|
56
|
+
dockerCmd = `sudo ${dockerBin}`;
|
|
40
57
|
} catch {
|
|
41
|
-
console.log('CereWorker: Docker
|
|
42
|
-
console.log('
|
|
58
|
+
console.log('CereWorker: Docker permission denied — skipping Cerebellum image pull.');
|
|
59
|
+
console.log(' Run "cereworker images upgrade" (with sudo or after adding user to docker group).');
|
|
43
60
|
process.exit(0);
|
|
44
61
|
}
|
|
45
62
|
}
|
|
46
63
|
|
|
47
64
|
const image = 'cereworker/cerebellum:latest';
|
|
48
|
-
console.log(`CereWorker: Pulling ${image}...`);
|
|
65
|
+
console.log(`CereWorker: Pulling ${image} (via ${dockerCmd})...`);
|
|
49
66
|
try {
|
|
50
67
|
execSync(`${dockerCmd} pull ${image}`, { stdio: 'inherit', timeout: 3_600_000 });
|
|
51
68
|
console.log(`CereWorker: Cerebellum image updated.`);
|