zor-ai 0.8.13 → 0.8.17
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/install.js +87 -19
- package/package.json +1 -1
package/install.js
CHANGED
|
@@ -22,26 +22,37 @@ const PLATFORM_MAP = {
|
|
|
22
22
|
archivePlatform: "linux-x86_64",
|
|
23
23
|
checksumPlatform: "linux-x86_64",
|
|
24
24
|
requiredBinaries: ["zorai", "zorai-daemon", "zorai-tui", "zorai-gateway", "zorai-mcp", "zorai-desktop"],
|
|
25
|
+
requiredAssets: [],
|
|
25
26
|
},
|
|
26
27
|
"linux-arm64": {
|
|
27
28
|
archivePlatform: "linux-aarch64",
|
|
28
29
|
checksumPlatform: "linux-aarch64",
|
|
29
|
-
requiredBinaries: ["zorai", "zorai-daemon", "zorai-tui", "zorai-gateway", "zorai-mcp"],
|
|
30
|
+
requiredBinaries: ["zorai", "zorai-daemon", "zorai-tui", "zorai-gateway", "zorai-mcp", "zorai-desktop"],
|
|
31
|
+
requiredAssets: [],
|
|
30
32
|
},
|
|
31
33
|
"darwin-arm64": {
|
|
32
34
|
archivePlatform: "darwin-arm64",
|
|
33
35
|
checksumPlatform: "darwin-arm64",
|
|
34
|
-
requiredBinaries: ["zorai", "zorai-daemon", "zorai-tui", "zorai-gateway", "zorai-mcp"],
|
|
36
|
+
requiredBinaries: ["zorai", "zorai-daemon", "zorai-tui", "zorai-gateway", "zorai-mcp", "zorai-desktop"],
|
|
37
|
+
requiredAssets: ["zorai-desktop.app.zip"],
|
|
35
38
|
},
|
|
36
39
|
"darwin-x64": {
|
|
37
40
|
archivePlatform: "darwin-x86_64",
|
|
38
41
|
checksumPlatform: "darwin-x86_64",
|
|
39
|
-
requiredBinaries: ["zorai", "zorai-daemon", "zorai-tui", "zorai-gateway", "zorai-mcp"],
|
|
42
|
+
requiredBinaries: ["zorai", "zorai-daemon", "zorai-tui", "zorai-gateway", "zorai-mcp", "zorai-desktop"],
|
|
43
|
+
requiredAssets: ["zorai-desktop.app.zip"],
|
|
40
44
|
},
|
|
41
45
|
"win32-x64": {
|
|
42
46
|
archivePlatform: "windows-x64",
|
|
43
47
|
checksumPlatform: "windows-x64",
|
|
44
48
|
requiredBinaries: ["zorai.exe", "zorai-daemon.exe", "zorai-tui.exe", "zorai-gateway.exe", "zorai-mcp.exe", "zorai-desktop.exe"],
|
|
49
|
+
requiredAssets: [],
|
|
50
|
+
},
|
|
51
|
+
"win32-arm64": {
|
|
52
|
+
archivePlatform: "windows-arm64",
|
|
53
|
+
checksumPlatform: "windows-arm64",
|
|
54
|
+
requiredBinaries: ["zorai.exe", "zorai-daemon.exe", "zorai-tui.exe", "zorai-gateway.exe", "zorai-mcp.exe", "zorai-desktop.exe"],
|
|
55
|
+
requiredAssets: [],
|
|
45
56
|
},
|
|
46
57
|
};
|
|
47
58
|
|
|
@@ -260,6 +271,7 @@ function getReleaseAssetInfo(platform, arch, version) {
|
|
|
260
271
|
checksumName: "SHA256SUMS-" + target.checksumPlatform + ".txt",
|
|
261
272
|
bundleChecksumName: "SHA256SUMS.txt",
|
|
262
273
|
requiredBinaries: target.requiredBinaries.slice(),
|
|
274
|
+
requiredAssets: target.requiredAssets.slice(),
|
|
263
275
|
skillsArchiveRoot: "skills",
|
|
264
276
|
guidelinesArchiveRoot: "guidelines",
|
|
265
277
|
};
|
|
@@ -458,23 +470,31 @@ async function maybeRefreshDaemonAfterInstall(options, installWork, deps) {
|
|
|
458
470
|
}
|
|
459
471
|
|
|
460
472
|
function extractRequiredBinaries(archiveData, releaseInfo) {
|
|
473
|
+
extractRequiredFiles(archiveData, releaseInfo.requiredBinaries, "binary");
|
|
474
|
+
}
|
|
475
|
+
|
|
476
|
+
function extractRequiredAssets(archiveData, releaseInfo) {
|
|
477
|
+
extractRequiredFiles(archiveData, releaseInfo.requiredAssets || [], "asset");
|
|
478
|
+
}
|
|
479
|
+
|
|
480
|
+
function extractRequiredFiles(archiveData, requiredFiles, kind) {
|
|
461
481
|
var AdmZip = require("adm-zip");
|
|
462
482
|
var archive = new AdmZip(archiveData);
|
|
463
483
|
var entries = archive.getEntries();
|
|
464
484
|
|
|
465
|
-
for (var i = 0; i <
|
|
466
|
-
var
|
|
485
|
+
for (var i = 0; i < requiredFiles.length; i++) {
|
|
486
|
+
var fileName = requiredFiles[i];
|
|
467
487
|
var entry = entries.find(function (item) {
|
|
468
|
-
return item.entryName ===
|
|
488
|
+
return item.entryName === fileName;
|
|
469
489
|
});
|
|
470
490
|
|
|
471
491
|
if (!entry) {
|
|
472
492
|
throw new Error(
|
|
473
|
-
"Release bundle is missing required
|
|
493
|
+
"Release bundle is missing required " + kind + " " + fileName
|
|
474
494
|
);
|
|
475
495
|
}
|
|
476
496
|
|
|
477
|
-
fs.writeFileSync(path.join(BIN_DIR,
|
|
497
|
+
fs.writeFileSync(path.join(BIN_DIR, fileName), entry.getData());
|
|
478
498
|
}
|
|
479
499
|
}
|
|
480
500
|
|
|
@@ -515,24 +535,58 @@ function extractBundledGuidelines(archiveData, releaseInfo, guidelinesDir) {
|
|
|
515
535
|
extractBundledTree(archiveData, releaseInfo.guidelinesArchiveRoot, guidelinesDir, true);
|
|
516
536
|
}
|
|
517
537
|
|
|
538
|
+
function installMacosDesktopApp(platform, binDir, deps) {
|
|
539
|
+
if (platform !== "darwin") {
|
|
540
|
+
return;
|
|
541
|
+
}
|
|
542
|
+
|
|
543
|
+
var helpers = deps || {};
|
|
544
|
+
var spawnSync = helpers.spawnSync || childProcess.spawnSync;
|
|
545
|
+
var appZip = path.join(binDir, "zorai-desktop.app.zip");
|
|
546
|
+
var appDir = path.join(binDir, "zorai-desktop.app");
|
|
547
|
+
if (!fs.existsSync(appZip)) {
|
|
548
|
+
throw new Error("Installed macOS desktop app archive is missing: " + appZip);
|
|
549
|
+
}
|
|
550
|
+
|
|
551
|
+
fs.rmSync(appDir, { recursive: true, force: true });
|
|
552
|
+
var result = spawnSync("ditto", ["-x", "-k", appZip, binDir], {
|
|
553
|
+
stdio: "inherit",
|
|
554
|
+
});
|
|
555
|
+
if (!result || result.error || result.status !== 0) {
|
|
556
|
+
result = spawnSync("unzip", ["-oq", appZip, "-d", binDir], {
|
|
557
|
+
stdio: "inherit",
|
|
558
|
+
});
|
|
559
|
+
}
|
|
560
|
+
|
|
561
|
+
if (!result || result.error || result.status !== 0) {
|
|
562
|
+
throw new Error("Failed to extract macOS desktop app archive: " + appZip);
|
|
563
|
+
}
|
|
564
|
+
|
|
565
|
+
var appBinary = path.join(appDir, "Contents", "MacOS", "zorai");
|
|
566
|
+
if (!fs.existsSync(appBinary)) {
|
|
567
|
+
throw new Error("Installed macOS desktop app is missing executable: " + appBinary);
|
|
568
|
+
}
|
|
569
|
+
}
|
|
570
|
+
|
|
518
571
|
async function verifyExtractedBinaries(checksumsData, releaseInfo) {
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
var
|
|
572
|
+
var requiredFiles = releaseInfo.requiredBinaries.concat(releaseInfo.requiredAssets || []);
|
|
573
|
+
for (var i = 0; i < requiredFiles.length; i++) {
|
|
574
|
+
var fileName = requiredFiles[i];
|
|
575
|
+
var expectedHash = parseChecksumFile(checksumsData, fileName);
|
|
522
576
|
if (!expectedHash) {
|
|
523
577
|
throw new Error(
|
|
524
|
-
"Could not find checksum for required
|
|
578
|
+
"Could not find checksum for required file " + fileName
|
|
525
579
|
);
|
|
526
580
|
}
|
|
527
581
|
|
|
528
|
-
var
|
|
529
|
-
if (!fs.existsSync(
|
|
530
|
-
throw new Error("Required
|
|
582
|
+
var filePath = path.join(BIN_DIR, fileName);
|
|
583
|
+
if (!fs.existsSync(filePath)) {
|
|
584
|
+
throw new Error("Required file was not extracted: " + fileName);
|
|
531
585
|
}
|
|
532
586
|
|
|
533
|
-
var valid = await verifyChecksum(
|
|
587
|
+
var valid = await verifyChecksum(filePath, expectedHash);
|
|
534
588
|
if (!valid) {
|
|
535
|
-
throw new Error("SHA256 checksum mismatch for " +
|
|
589
|
+
throw new Error("SHA256 checksum mismatch for " + fileName);
|
|
536
590
|
}
|
|
537
591
|
}
|
|
538
592
|
}
|
|
@@ -542,9 +596,20 @@ function cleanupExtractedBinaries(releaseInfo) {
|
|
|
542
596
|
return;
|
|
543
597
|
}
|
|
544
598
|
|
|
545
|
-
|
|
599
|
+
var requiredFiles = releaseInfo.requiredBinaries.concat(releaseInfo.requiredAssets || []);
|
|
600
|
+
for (var i = 0; i < requiredFiles.length; i++) {
|
|
546
601
|
try {
|
|
547
|
-
fs.unlinkSync(path.join(BIN_DIR,
|
|
602
|
+
fs.unlinkSync(path.join(BIN_DIR, requiredFiles[i]));
|
|
603
|
+
} catch (_e) {
|
|
604
|
+
/* ignore cleanup errors */
|
|
605
|
+
}
|
|
606
|
+
}
|
|
607
|
+
if ((releaseInfo.requiredAssets || []).includes("zorai-desktop.app.zip")) {
|
|
608
|
+
try {
|
|
609
|
+
fs.rmSync(path.join(BIN_DIR, "zorai-desktop.app"), {
|
|
610
|
+
recursive: true,
|
|
611
|
+
force: true,
|
|
612
|
+
});
|
|
548
613
|
} catch (_e) {
|
|
549
614
|
/* ignore cleanup errors */
|
|
550
615
|
}
|
|
@@ -619,6 +684,8 @@ async function main() {
|
|
|
619
684
|
async function () {
|
|
620
685
|
console.log("zorai: extracting binaries, skills, and guidelines...");
|
|
621
686
|
extractRequiredBinaries(archiveData, releaseInfo);
|
|
687
|
+
extractRequiredAssets(archiveData, releaseInfo);
|
|
688
|
+
installMacosDesktopApp(os.platform(), BIN_DIR);
|
|
622
689
|
extractBundledSkills(archiveData, releaseInfo, runtimeSkillsDir);
|
|
623
690
|
extractBundledGuidelines(archiveData, releaseInfo, runtimeGuidelinesDir);
|
|
624
691
|
console.log(
|
|
@@ -668,6 +735,7 @@ module.exports.getRuntimeZoraiRoot = getRuntimeZoraiRoot;
|
|
|
668
735
|
module.exports.ensureCustomAuthTemplate = ensureCustomAuthTemplate;
|
|
669
736
|
module.exports.extractBundledGuidelines = extractBundledGuidelines;
|
|
670
737
|
module.exports.getLegacyTamuxRoot = getLegacyTamuxRoot;
|
|
738
|
+
module.exports.installMacosDesktopApp = installMacosDesktopApp;
|
|
671
739
|
module.exports.migrateLegacyTamuxRoot = migrateLegacyTamuxRoot;
|
|
672
740
|
module.exports.isManagedProcessRunning = isManagedProcessRunning;
|
|
673
741
|
module.exports.maybeRefreshDaemonAfterInstall = maybeRefreshDaemonAfterInstall;
|