@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.
Files changed (2) hide show
  1. package/dist/index.js +65 -25
  2. 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.27",
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", configDir: ".claude" },
1628
- { name: "Codex", configDir: ".codex" },
1629
- { name: "OpenCode", configDir: ".config/opencode" },
1630
- { name: "Cursor", configDir: ".cursor" }
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.configDir, "skills");
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 toolConfigPath = join2(home, tool.configDir);
1801
- if (!existsSync2(toolConfigPath)) {
1824
+ const toolDetectPath = join2(home, tool.detectDir);
1825
+ if (!existsSync2(toolDetectPath)) {
1802
1826
  continue;
1803
1827
  }
1804
- const toolSkillsPath = join2(toolConfigPath, "skills");
1805
- mkdirSync2(toolSkillsPath, { recursive: true });
1806
- for (const skillDir of skillDirs) {
1807
- const src = join2(skillsSourceDir, skillDir);
1808
- const dest = join2(toolSkillsPath, skillDir);
1809
- cpSync(src, dest, { recursive: true });
1810
- for (const srcFile of collectAllFiles(src)) {
1811
- const relPath = relative(src, srcFile);
1812
- const destFile = join2(dest, relPath);
1813
- if (!verifyFileCopy(srcFile, destFile)) {
1814
- throw new Error(
1815
- `Integrity check failed: ${destFile} does not match source`
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
- installed.push(`${tool.name}: ${dest}`);
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.configDir))) {
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 {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zeroxyz/cli",
3
- "version": "0.0.27",
3
+ "version": "0.0.29",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "zero": "dist/index.js",