@usevalt/cli 0.6.1 → 0.7.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/index.js +70 -32
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1705,11 +1705,12 @@ var hookCommand = new Command13("hook").description("Claude Code hook handlers f
|
|
|
1705
1705
|
|
|
1706
1706
|
// src/commands/setup.ts
|
|
1707
1707
|
import { Command as Command14 } from "commander";
|
|
1708
|
-
import { readFileSync as readFileSync4, writeFileSync as writeFileSync4, mkdirSync as mkdirSync2, existsSync as existsSync4 } from "fs";
|
|
1708
|
+
import { readFileSync as readFileSync4, writeFileSync as writeFileSync4, mkdirSync as mkdirSync2, existsSync as existsSync4, unlinkSync as unlinkSync3 } from "fs";
|
|
1709
1709
|
import { join as join2 } from "path";
|
|
1710
1710
|
import os3 from "os";
|
|
1711
1711
|
var CLAUDE_DIR = join2(os3.homedir(), ".claude");
|
|
1712
|
-
var
|
|
1712
|
+
var SETTINGS_FILE = join2(CLAUDE_DIR, "settings.json");
|
|
1713
|
+
var LEGACY_HOOKS_FILE = join2(CLAUDE_DIR, "hooks.json");
|
|
1713
1714
|
var HOOK_PREFIX = "npx --yes @usevalt/cli";
|
|
1714
1715
|
function getValtHooks() {
|
|
1715
1716
|
return {
|
|
@@ -1814,17 +1815,17 @@ var setupCommand = new Command14("setup").description("Configure Claude Code hoo
|
|
|
1814
1815
|
removeHooks();
|
|
1815
1816
|
return;
|
|
1816
1817
|
}
|
|
1817
|
-
let config = {
|
|
1818
|
-
if (existsSync4(
|
|
1818
|
+
let config = {};
|
|
1819
|
+
if (existsSync4(SETTINGS_FILE)) {
|
|
1819
1820
|
try {
|
|
1820
|
-
const raw = readFileSync4(
|
|
1821
|
+
const raw = readFileSync4(SETTINGS_FILE, "utf-8");
|
|
1821
1822
|
config = JSON.parse(raw);
|
|
1822
|
-
if (!config.hooks) config.hooks = {};
|
|
1823
1823
|
} catch {
|
|
1824
|
-
warn("Could not parse existing
|
|
1825
|
-
config = {
|
|
1824
|
+
warn("Could not parse existing settings.json. Will merge hooks into it.");
|
|
1825
|
+
config = {};
|
|
1826
1826
|
}
|
|
1827
1827
|
}
|
|
1828
|
+
if (!config.hooks) config.hooks = {};
|
|
1828
1829
|
const valtHooks = getValtHooks();
|
|
1829
1830
|
for (const [event, hooks] of Object.entries(valtHooks)) {
|
|
1830
1831
|
const existing = config.hooks[event];
|
|
@@ -1840,12 +1841,19 @@ var setupCommand = new Command14("setup").description("Configure Claude Code hoo
|
|
|
1840
1841
|
config.hooks[event] = hooks;
|
|
1841
1842
|
}
|
|
1842
1843
|
}
|
|
1843
|
-
writeFileSync4(
|
|
1844
|
+
writeFileSync4(SETTINGS_FILE, JSON.stringify(config, null, 2) + "\n", "utf-8");
|
|
1845
|
+
if (existsSync4(LEGACY_HOOKS_FILE)) {
|
|
1846
|
+
try {
|
|
1847
|
+
removeLegacyHooks();
|
|
1848
|
+
info(`Migrated hooks from legacy hooks.json to settings.json.`);
|
|
1849
|
+
} catch {
|
|
1850
|
+
}
|
|
1851
|
+
}
|
|
1844
1852
|
success("Claude Code hooks configured.");
|
|
1845
1853
|
info("");
|
|
1846
1854
|
info("Every Claude Code session will now be tracked by Valt.");
|
|
1847
1855
|
info(`Projects are auto-detected from git repo name or folder name.`);
|
|
1848
|
-
info(`Hooks written to: ${dim(
|
|
1856
|
+
info(`Hooks written to: ${dim(SETTINGS_FILE)}`);
|
|
1849
1857
|
info("");
|
|
1850
1858
|
info("To remove: valt setup --remove");
|
|
1851
1859
|
} catch (err) {
|
|
@@ -1853,34 +1861,64 @@ var setupCommand = new Command14("setup").description("Configure Claude Code hoo
|
|
|
1853
1861
|
process.exit(1);
|
|
1854
1862
|
}
|
|
1855
1863
|
});
|
|
1856
|
-
function
|
|
1857
|
-
if (!
|
|
1858
|
-
|
|
1859
|
-
|
|
1864
|
+
function removeValtHooksFromConfig(config) {
|
|
1865
|
+
if (!config.hooks) return;
|
|
1866
|
+
for (const event of Object.keys(config.hooks)) {
|
|
1867
|
+
const entries = config.hooks[event];
|
|
1868
|
+
if (!Array.isArray(entries)) continue;
|
|
1869
|
+
config.hooks[event] = entries.filter((h) => {
|
|
1870
|
+
const entry = h;
|
|
1871
|
+
return !entry.hooks?.some((hk) => hk.command?.includes("valt") && hk.command?.includes("hook"));
|
|
1872
|
+
});
|
|
1873
|
+
if (config.hooks[event].length === 0) {
|
|
1874
|
+
delete config.hooks[event];
|
|
1875
|
+
}
|
|
1876
|
+
}
|
|
1877
|
+
if (Object.keys(config.hooks).length === 0) {
|
|
1878
|
+
delete config.hooks;
|
|
1860
1879
|
}
|
|
1880
|
+
}
|
|
1881
|
+
function removeLegacyHooks() {
|
|
1882
|
+
if (!existsSync4(LEGACY_HOOKS_FILE)) return;
|
|
1861
1883
|
try {
|
|
1862
|
-
const raw = readFileSync4(
|
|
1884
|
+
const raw = readFileSync4(LEGACY_HOOKS_FILE, "utf-8");
|
|
1863
1885
|
const config = JSON.parse(raw);
|
|
1864
|
-
|
|
1865
|
-
|
|
1866
|
-
|
|
1867
|
-
|
|
1868
|
-
|
|
1869
|
-
|
|
1870
|
-
|
|
1871
|
-
config.hooks[event] = entries.filter((h) => {
|
|
1872
|
-
const entry = h;
|
|
1873
|
-
return !entry.hooks?.some((hk) => hk.command?.includes("valt") && hk.command?.includes("hook"));
|
|
1874
|
-
});
|
|
1875
|
-
if (config.hooks[event].length === 0) {
|
|
1876
|
-
delete config.hooks[event];
|
|
1886
|
+
removeValtHooksFromConfig(config);
|
|
1887
|
+
if (!config.hooks || Object.keys(config.hooks).length === 0) {
|
|
1888
|
+
const remaining = Object.keys(config).filter((k) => k !== "hooks");
|
|
1889
|
+
if (remaining.length === 0) {
|
|
1890
|
+
unlinkSync3(LEGACY_HOOKS_FILE);
|
|
1891
|
+
} else {
|
|
1892
|
+
writeFileSync4(LEGACY_HOOKS_FILE, JSON.stringify(config, null, 2) + "\n", "utf-8");
|
|
1877
1893
|
}
|
|
1894
|
+
} else {
|
|
1895
|
+
writeFileSync4(LEGACY_HOOKS_FILE, JSON.stringify(config, null, 2) + "\n", "utf-8");
|
|
1878
1896
|
}
|
|
1879
|
-
writeFileSync4(HOOKS_FILE, JSON.stringify(config, null, 2) + "\n", "utf-8");
|
|
1880
|
-
success("Valt hooks removed from Claude Code.");
|
|
1881
1897
|
} catch {
|
|
1882
|
-
|
|
1883
|
-
|
|
1898
|
+
}
|
|
1899
|
+
}
|
|
1900
|
+
function removeHooks() {
|
|
1901
|
+
if (existsSync4(SETTINGS_FILE)) {
|
|
1902
|
+
try {
|
|
1903
|
+
const raw = readFileSync4(SETTINGS_FILE, "utf-8");
|
|
1904
|
+
const config = JSON.parse(raw);
|
|
1905
|
+
removeValtHooksFromConfig(config);
|
|
1906
|
+
writeFileSync4(SETTINGS_FILE, JSON.stringify(config, null, 2) + "\n", "utf-8");
|
|
1907
|
+
success("Valt hooks removed from Claude Code settings.");
|
|
1908
|
+
} catch {
|
|
1909
|
+
error("Could not parse settings.json.");
|
|
1910
|
+
process.exit(1);
|
|
1911
|
+
}
|
|
1912
|
+
}
|
|
1913
|
+
if (existsSync4(LEGACY_HOOKS_FILE)) {
|
|
1914
|
+
try {
|
|
1915
|
+
removeLegacyHooks();
|
|
1916
|
+
info("Legacy hooks.json cleaned up.");
|
|
1917
|
+
} catch {
|
|
1918
|
+
}
|
|
1919
|
+
}
|
|
1920
|
+
if (!existsSync4(SETTINGS_FILE) && !existsSync4(LEGACY_HOOKS_FILE)) {
|
|
1921
|
+
info("No hooks configured. Nothing to remove.");
|
|
1884
1922
|
}
|
|
1885
1923
|
}
|
|
1886
1924
|
|