@zeroxyz/cli 0.0.28 → 0.0.29
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/index.js +53 -17
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -6,7 +6,7 @@ import { Command as Command12 } from "commander";
|
|
|
6
6
|
// package.json
|
|
7
7
|
var package_default = {
|
|
8
8
|
name: "@zeroxyz/cli",
|
|
9
|
-
version: "0.0.
|
|
9
|
+
version: "0.0.29",
|
|
10
10
|
type: "module",
|
|
11
11
|
bin: {
|
|
12
12
|
zero: "dist/index.js",
|
|
@@ -1616,6 +1616,7 @@ import {
|
|
|
1616
1616
|
readdirSync,
|
|
1617
1617
|
readFileSync as readFileSync3,
|
|
1618
1618
|
rmSync,
|
|
1619
|
+
statSync,
|
|
1619
1620
|
writeFileSync as writeFileSync2
|
|
1620
1621
|
} from "fs";
|
|
1621
1622
|
import { homedir as homedir2 } from "os";
|
|
@@ -1664,6 +1665,24 @@ var collectAllFiles = (dir) => {
|
|
|
1664
1665
|
}
|
|
1665
1666
|
return files;
|
|
1666
1667
|
};
|
|
1668
|
+
var copyDirRecursive = (src, dest) => {
|
|
1669
|
+
mkdirSync2(dest, { recursive: true });
|
|
1670
|
+
for (const entry of readdirSync(src, { withFileTypes: true })) {
|
|
1671
|
+
const srcPath = join2(src, entry.name);
|
|
1672
|
+
const destPath = join2(dest, entry.name);
|
|
1673
|
+
if (entry.isDirectory()) {
|
|
1674
|
+
copyDirRecursive(srcPath, destPath);
|
|
1675
|
+
} else {
|
|
1676
|
+
const data = readFileSync3(srcPath);
|
|
1677
|
+
writeFileSync2(destPath, data);
|
|
1678
|
+
try {
|
|
1679
|
+
const mode = statSync(srcPath).mode;
|
|
1680
|
+
chmodSync(destPath, mode);
|
|
1681
|
+
} catch {
|
|
1682
|
+
}
|
|
1683
|
+
}
|
|
1684
|
+
}
|
|
1685
|
+
};
|
|
1667
1686
|
var installHook = (home) => {
|
|
1668
1687
|
const claudeDir = join2(home, ".claude");
|
|
1669
1688
|
if (!existsSync2(claudeDir)) {
|
|
@@ -1800,30 +1819,38 @@ var installSkills = (home) => {
|
|
|
1800
1819
|
const skillsSourceDir = join2(getPackageRoot(), "skills");
|
|
1801
1820
|
const skillDirs = readdirSync(skillsSourceDir, { withFileTypes: true }).filter((d) => d.isDirectory()).map((d) => d.name);
|
|
1802
1821
|
const installed = [];
|
|
1822
|
+
const errors = [];
|
|
1803
1823
|
for (const tool of AGENT_TOOLS) {
|
|
1804
1824
|
const toolDetectPath = join2(home, tool.detectDir);
|
|
1805
1825
|
if (!existsSync2(toolDetectPath)) {
|
|
1806
1826
|
continue;
|
|
1807
1827
|
}
|
|
1808
|
-
|
|
1809
|
-
|
|
1810
|
-
|
|
1811
|
-
const
|
|
1812
|
-
|
|
1813
|
-
|
|
1814
|
-
|
|
1815
|
-
const
|
|
1816
|
-
|
|
1817
|
-
|
|
1818
|
-
|
|
1819
|
-
|
|
1820
|
-
|
|
1828
|
+
try {
|
|
1829
|
+
const toolSkillsPath = join2(home, tool.skillsDir);
|
|
1830
|
+
mkdirSync2(toolSkillsPath, { recursive: true });
|
|
1831
|
+
for (const skillDir of skillDirs) {
|
|
1832
|
+
const src = join2(skillsSourceDir, skillDir);
|
|
1833
|
+
const dest = join2(toolSkillsPath, skillDir);
|
|
1834
|
+
copyDirRecursive(src, dest);
|
|
1835
|
+
for (const srcFile of collectAllFiles(src)) {
|
|
1836
|
+
const relPath = relative(src, srcFile);
|
|
1837
|
+
const destFile = join2(dest, relPath);
|
|
1838
|
+
if (!verifyFileCopy(srcFile, destFile)) {
|
|
1839
|
+
throw new Error(
|
|
1840
|
+
`Integrity check failed: ${destFile} does not match source`
|
|
1841
|
+
);
|
|
1842
|
+
}
|
|
1821
1843
|
}
|
|
1844
|
+
installed.push(`${tool.name}: ${dest}`);
|
|
1822
1845
|
}
|
|
1823
|
-
|
|
1846
|
+
} catch (err) {
|
|
1847
|
+
errors.push({
|
|
1848
|
+
tool: tool.name,
|
|
1849
|
+
message: err instanceof Error ? err.message : String(err)
|
|
1850
|
+
});
|
|
1824
1851
|
}
|
|
1825
1852
|
}
|
|
1826
|
-
return installed;
|
|
1853
|
+
return { installed, errors };
|
|
1827
1854
|
};
|
|
1828
1855
|
var runInit = async (appContext, options = {}) => {
|
|
1829
1856
|
appContext.services.analyticsService.capture("init_started", {
|
|
@@ -1881,15 +1908,24 @@ var runInit = async (appContext, options = {}) => {
|
|
|
1881
1908
|
}
|
|
1882
1909
|
currentStep = "skills";
|
|
1883
1910
|
try {
|
|
1884
|
-
const installed = installSkills(home);
|
|
1911
|
+
const { installed, errors } = installSkills(home);
|
|
1885
1912
|
for (const entry of installed) {
|
|
1886
1913
|
const toolName = entry.split(":")[0];
|
|
1887
1914
|
if (toolName && !agentsWithSkills.includes(toolName)) {
|
|
1888
1915
|
agentsWithSkills.push(toolName);
|
|
1889
1916
|
}
|
|
1890
1917
|
}
|
|
1918
|
+
if (errors.length > 0) {
|
|
1919
|
+
skillsError = errors.map((e) => `${e.tool}: ${e.message}`).join("; ");
|
|
1920
|
+
for (const e of errors) {
|
|
1921
|
+
console.error(
|
|
1922
|
+
`Warning: failed to install skills for ${e.tool}: ${e.message}`
|
|
1923
|
+
);
|
|
1924
|
+
}
|
|
1925
|
+
}
|
|
1891
1926
|
} catch (err) {
|
|
1892
1927
|
skillsError = err instanceof Error ? err.message : "unknown skills error";
|
|
1928
|
+
console.error(`Warning: skills install failed: ${skillsError}`);
|
|
1893
1929
|
}
|
|
1894
1930
|
currentStep = "hook";
|
|
1895
1931
|
try {
|