@zeroxyz/cli 0.0.27 → 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 +65 -25
- 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";
|
|
@@ -1624,10 +1625,14 @@ import { fileURLToPath } from "url";
|
|
|
1624
1625
|
import { Command as Command5 } from "commander";
|
|
1625
1626
|
import { generatePrivateKey, privateKeyToAccount } from "viem/accounts";
|
|
1626
1627
|
var AGENT_TOOLS = [
|
|
1627
|
-
{ name: "Claude Code",
|
|
1628
|
-
{ name: "Codex",
|
|
1629
|
-
{
|
|
1630
|
-
|
|
1628
|
+
{ name: "Claude Code", detectDir: ".claude", skillsDir: ".claude/skills" },
|
|
1629
|
+
{ name: "Codex", detectDir: ".codex", skillsDir: ".agents/skills" },
|
|
1630
|
+
{
|
|
1631
|
+
name: "OpenCode",
|
|
1632
|
+
detectDir: ".config/opencode",
|
|
1633
|
+
skillsDir: ".config/opencode/skills"
|
|
1634
|
+
},
|
|
1635
|
+
{ name: "Cursor", detectDir: ".cursor", skillsDir: ".cursor/skills" }
|
|
1631
1636
|
];
|
|
1632
1637
|
var getPackageRoot = () => {
|
|
1633
1638
|
let dir;
|
|
@@ -1660,6 +1665,24 @@ var collectAllFiles = (dir) => {
|
|
|
1660
1665
|
}
|
|
1661
1666
|
return files;
|
|
1662
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
|
+
};
|
|
1663
1686
|
var installHook = (home) => {
|
|
1664
1687
|
const claudeDir = join2(home, ".claude");
|
|
1665
1688
|
if (!existsSync2(claudeDir)) {
|
|
@@ -1766,7 +1789,7 @@ var CONFLICTING_SKILL_PATTERNS = ["zam", "tempo"];
|
|
|
1766
1789
|
var findConflictingSkills = (home) => {
|
|
1767
1790
|
const found = [];
|
|
1768
1791
|
for (const tool of AGENT_TOOLS) {
|
|
1769
|
-
const toolSkillsPath = join2(home, tool.
|
|
1792
|
+
const toolSkillsPath = join2(home, tool.skillsDir);
|
|
1770
1793
|
if (!existsSync2(toolSkillsPath)) continue;
|
|
1771
1794
|
const entries = readdirSync(toolSkillsPath, { withFileTypes: true });
|
|
1772
1795
|
for (const entry of entries) {
|
|
@@ -1796,30 +1819,38 @@ var installSkills = (home) => {
|
|
|
1796
1819
|
const skillsSourceDir = join2(getPackageRoot(), "skills");
|
|
1797
1820
|
const skillDirs = readdirSync(skillsSourceDir, { withFileTypes: true }).filter((d) => d.isDirectory()).map((d) => d.name);
|
|
1798
1821
|
const installed = [];
|
|
1822
|
+
const errors = [];
|
|
1799
1823
|
for (const tool of AGENT_TOOLS) {
|
|
1800
|
-
const
|
|
1801
|
-
if (!existsSync2(
|
|
1824
|
+
const toolDetectPath = join2(home, tool.detectDir);
|
|
1825
|
+
if (!existsSync2(toolDetectPath)) {
|
|
1802
1826
|
continue;
|
|
1803
1827
|
}
|
|
1804
|
-
|
|
1805
|
-
|
|
1806
|
-
|
|
1807
|
-
const
|
|
1808
|
-
|
|
1809
|
-
|
|
1810
|
-
|
|
1811
|
-
const
|
|
1812
|
-
|
|
1813
|
-
|
|
1814
|
-
|
|
1815
|
-
|
|
1816
|
-
|
|
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
|
+
}
|
|
1817
1843
|
}
|
|
1844
|
+
installed.push(`${tool.name}: ${dest}`);
|
|
1818
1845
|
}
|
|
1819
|
-
|
|
1846
|
+
} catch (err) {
|
|
1847
|
+
errors.push({
|
|
1848
|
+
tool: tool.name,
|
|
1849
|
+
message: err instanceof Error ? err.message : String(err)
|
|
1850
|
+
});
|
|
1820
1851
|
}
|
|
1821
1852
|
}
|
|
1822
|
-
return installed;
|
|
1853
|
+
return { installed, errors };
|
|
1823
1854
|
};
|
|
1824
1855
|
var runInit = async (appContext, options = {}) => {
|
|
1825
1856
|
appContext.services.analyticsService.capture("init_started", {
|
|
@@ -1871,21 +1902,30 @@ var runInit = async (appContext, options = {}) => {
|
|
|
1871
1902
|
let hookInstalled = false;
|
|
1872
1903
|
let hookError = null;
|
|
1873
1904
|
for (const tool of AGENT_TOOLS) {
|
|
1874
|
-
if (existsSync2(join2(home, tool.
|
|
1905
|
+
if (existsSync2(join2(home, tool.detectDir))) {
|
|
1875
1906
|
agentsDetected.push(tool.name);
|
|
1876
1907
|
}
|
|
1877
1908
|
}
|
|
1878
1909
|
currentStep = "skills";
|
|
1879
1910
|
try {
|
|
1880
|
-
const installed = installSkills(home);
|
|
1911
|
+
const { installed, errors } = installSkills(home);
|
|
1881
1912
|
for (const entry of installed) {
|
|
1882
1913
|
const toolName = entry.split(":")[0];
|
|
1883
1914
|
if (toolName && !agentsWithSkills.includes(toolName)) {
|
|
1884
1915
|
agentsWithSkills.push(toolName);
|
|
1885
1916
|
}
|
|
1886
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
|
+
}
|
|
1887
1926
|
} catch (err) {
|
|
1888
1927
|
skillsError = err instanceof Error ? err.message : "unknown skills error";
|
|
1928
|
+
console.error(`Warning: skills install failed: ${skillsError}`);
|
|
1889
1929
|
}
|
|
1890
1930
|
currentStep = "hook";
|
|
1891
1931
|
try {
|