xtrm-tools 0.5.34 → 0.5.35
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/cli/dist/index.cjs
CHANGED
|
@@ -40968,7 +40968,7 @@ async function runPiInstall(dryRun = false) {
|
|
|
40968
40968
|
return;
|
|
40969
40969
|
}
|
|
40970
40970
|
} else {
|
|
40971
|
-
console.log(kleur_default.
|
|
40971
|
+
console.log(kleur_default.dim(" [DRY RUN] npm install -g oh-pi"));
|
|
40972
40972
|
}
|
|
40973
40973
|
console.log(t.success(" \u2713 pi installed"));
|
|
40974
40974
|
} else {
|
|
@@ -41002,7 +41002,7 @@ async function runPiInstall(dryRun = false) {
|
|
|
41002
41002
|
} else {
|
|
41003
41003
|
for (const pkg of preCheck.packages.needed) {
|
|
41004
41004
|
if (dryRun) {
|
|
41005
|
-
console.log(kleur_default.
|
|
41005
|
+
console.log(kleur_default.dim(` [DRY RUN] pi install ${pkg}`));
|
|
41006
41006
|
continue;
|
|
41007
41007
|
}
|
|
41008
41008
|
const r = (0, import_node_child_process2.spawnSync)("pi", ["install", pkg], { stdio: "pipe", encoding: "utf8" });
|
|
@@ -41025,8 +41025,8 @@ function renderPlanTable(allChanges) {
|
|
|
41025
41025
|
const table = new Table({
|
|
41026
41026
|
head: [
|
|
41027
41027
|
t.header("Target"),
|
|
41028
|
-
t.header(
|
|
41029
|
-
t.header(
|
|
41028
|
+
t.header("+ New"),
|
|
41029
|
+
t.header("\u2191 Update"),
|
|
41030
41030
|
t.header("Total")
|
|
41031
41031
|
],
|
|
41032
41032
|
style: { head: [], border: [] }
|
|
@@ -41035,54 +41035,53 @@ function renderPlanTable(allChanges) {
|
|
|
41035
41035
|
const missing = Object.values(changeSet).reduce((s, c) => s + c.missing.length, 0);
|
|
41036
41036
|
const outdated = Object.values(changeSet).reduce((s, c) => s + c.outdated.length, 0);
|
|
41037
41037
|
table.push([
|
|
41038
|
-
|
|
41039
|
-
missing > 0 ?
|
|
41040
|
-
outdated > 0 ?
|
|
41041
|
-
kleur_default.bold(
|
|
41038
|
+
formatTargetLabel(target),
|
|
41039
|
+
missing > 0 ? String(missing) : t.label("\u2014"),
|
|
41040
|
+
outdated > 0 ? String(outdated) : t.label("\u2014"),
|
|
41041
|
+
kleur_default.bold(String(totalChanges))
|
|
41042
41042
|
]);
|
|
41043
41043
|
}
|
|
41044
41044
|
console.log("\n" + table.toString() + "\n");
|
|
41045
41045
|
}
|
|
41046
41046
|
function printNextSteps() {
|
|
41047
|
-
const c = (s) => kleur_default.cyan(s);
|
|
41048
41047
|
const d = (s) => kleur_default.dim(s);
|
|
41049
41048
|
const b = (s) => kleur_default.bold(s);
|
|
41050
41049
|
console.log(b(" Next steps\n"));
|
|
41051
41050
|
console.log(d(" In your project:"));
|
|
41052
|
-
console.log(`
|
|
41053
|
-
console.log(`
|
|
41054
|
-
console.log(`
|
|
41055
|
-
console.log(`
|
|
41056
|
-
console.log(`
|
|
41051
|
+
console.log(` xtrm init ${d("initialize beads + gitnexus for this repo")}`);
|
|
41052
|
+
console.log(` bd prime ${d("load session context and available work")}`);
|
|
41053
|
+
console.log(` bd ready ${d("find unblocked issues to work on")}`);
|
|
41054
|
+
console.log(` bd update <id> --claim ${d("claim an issue before editing any file")}`);
|
|
41055
|
+
console.log(` bd close <id> ${d("close when done \u2014 auto-commits")}`);
|
|
41057
41056
|
console.log("");
|
|
41058
41057
|
console.log(d(" Worktree workflow:"));
|
|
41059
|
-
console.log(`
|
|
41060
|
-
console.log(`
|
|
41061
|
-
console.log(`
|
|
41058
|
+
console.log(` xt claude ${d("launch Claude Code in a sandboxed worktree")}`);
|
|
41059
|
+
console.log(` xt end --dry-run ${d("preview PR title, body, and linked issues")}`);
|
|
41060
|
+
console.log(` xt end ${d("push branch, open PR, clean up worktree")}`);
|
|
41062
41061
|
console.log("");
|
|
41063
41062
|
console.log(d(" Reference:"));
|
|
41064
|
-
console.log(`
|
|
41065
|
-
console.log(`
|
|
41063
|
+
console.log(` xtrm status ${d("check installed vs repo")}`);
|
|
41064
|
+
console.log(` xtrm docs show ${d("browse all documentation")}`);
|
|
41066
41065
|
console.log("");
|
|
41067
41066
|
}
|
|
41068
41067
|
async function renderSummaryCard(allChanges, totalCount, allSkipped, isDryRun) {
|
|
41069
41068
|
const boxen2 = (await Promise.resolve().then(() => (init_boxen(), boxen_exports))).default;
|
|
41070
41069
|
const hasDrift = allSkipped.length > 0;
|
|
41071
41070
|
const lines = [
|
|
41072
|
-
|
|
41071
|
+
kleur_default.bold(" \u2713 Install complete") + (hasDrift ? kleur_default.dim(" (with skipped drift)") : ""),
|
|
41073
41072
|
"",
|
|
41074
41073
|
` ${t.label("Targets")} ${allChanges.length} environment${allChanges.length !== 1 ? "s" : ""}`,
|
|
41075
41074
|
` ${t.label("Installed")} ${totalCount} item${totalCount !== 1 ? "s" : ""}`,
|
|
41076
41075
|
...hasDrift ? [
|
|
41077
|
-
` ${t.label("Skipped")} ${
|
|
41078
|
-
` ${t.label("Hint")} run
|
|
41076
|
+
` ${t.label("Skipped")} ${allSkipped.length} drifted (local changes preserved)`,
|
|
41077
|
+
` ${t.label("Hint")} run xtrm install --backport to push them back`
|
|
41079
41078
|
] : [],
|
|
41080
|
-
...isDryRun ? ["",
|
|
41079
|
+
...isDryRun ? ["", kleur_default.dim(" Dry run \u2014 no changes written")] : []
|
|
41081
41080
|
];
|
|
41082
41081
|
console.log("\n" + boxen2(lines.join("\n"), {
|
|
41083
41082
|
padding: { top: 1, bottom: 1, left: 1, right: 3 },
|
|
41084
41083
|
borderStyle: "round",
|
|
41085
|
-
borderColor:
|
|
41084
|
+
borderColor: "gray"
|
|
41086
41085
|
}) + "\n");
|
|
41087
41086
|
}
|
|
41088
41087
|
function formatTargetLabel(target) {
|
|
@@ -41147,7 +41146,7 @@ var OFFICIAL_CLAUDE_PLUGINS = [
|
|
|
41147
41146
|
async function installOfficialClaudePlugins(dryRun) {
|
|
41148
41147
|
console.log(t.bold("\n \u2699 official Claude plugins (serena/context7/github/ralph-loop)"));
|
|
41149
41148
|
if (dryRun) {
|
|
41150
|
-
console.log(
|
|
41149
|
+
console.log(kleur_default.dim(" [DRY RUN] Would register claude-plugins-official marketplace and install official plugins\n"));
|
|
41151
41150
|
return;
|
|
41152
41151
|
}
|
|
41153
41152
|
(0, import_child_process3.spawnSync)("claude", ["plugin", "marketplace", "add", OFFICIAL_CLAUDE_MARKETPLACE, "--scope", "user"], { stdio: "pipe" });
|
|
@@ -41183,7 +41182,7 @@ async function cleanStalePrePluginFiles(repoRoot, dryRun) {
|
|
|
41183
41182
|
const staleFile = import_path12.default.join(staleHooksDir, name);
|
|
41184
41183
|
if (await import_fs_extra12.default.pathExists(staleFile)) {
|
|
41185
41184
|
if (dryRun) {
|
|
41186
|
-
console.log(
|
|
41185
|
+
console.log(kleur_default.dim(` [DRY RUN] Would remove stale hook: ~/.claude/hooks/${name}`));
|
|
41187
41186
|
} else {
|
|
41188
41187
|
await import_fs_extra12.default.remove(staleFile);
|
|
41189
41188
|
console.log(t.muted(` \u2717 Removed stale hook: ~/.claude/hooks/${name}`));
|
|
@@ -41199,7 +41198,7 @@ async function cleanStalePrePluginFiles(repoRoot, dryRun) {
|
|
|
41199
41198
|
const staleDir = import_path12.default.join(staleSkillsDir, name);
|
|
41200
41199
|
if (await import_fs_extra12.default.pathExists(staleDir)) {
|
|
41201
41200
|
if (dryRun) {
|
|
41202
|
-
console.log(
|
|
41201
|
+
console.log(kleur_default.dim(` [DRY RUN] Would remove stale skill: ~/.claude/skills/${name}`));
|
|
41203
41202
|
} else {
|
|
41204
41203
|
await import_fs_extra12.default.remove(staleDir);
|
|
41205
41204
|
console.log(t.muted(` \u2717 Removed stale skill: ~/.claude/skills/${name}`));
|
|
@@ -41229,7 +41228,7 @@ async function cleanStalePrePluginFiles(repoRoot, dryRun) {
|
|
|
41229
41228
|
for (const h of staleHooks) {
|
|
41230
41229
|
const msg = `settings.json [${event}] hook: ${h.command}`;
|
|
41231
41230
|
if (dryRun) {
|
|
41232
|
-
console.log(
|
|
41231
|
+
console.log(kleur_default.dim(` [DRY RUN] Would remove stale ${msg}`));
|
|
41233
41232
|
} else {
|
|
41234
41233
|
console.log(t.muted(` \u2717 Removed stale ${msg}`));
|
|
41235
41234
|
}
|
|
@@ -41285,7 +41284,7 @@ async function installPlugin(repoRoot, dryRun) {
|
|
|
41285
41284
|
console.log(t.bold("\n \u2699 xtrm-tools (Claude Code plugin)"));
|
|
41286
41285
|
warnIfOutdated();
|
|
41287
41286
|
if (dryRun) {
|
|
41288
|
-
console.log(
|
|
41287
|
+
console.log(kleur_default.dim(" [DRY RUN] Would register xtrm-tools marketplace and install plugin\n"));
|
|
41289
41288
|
await cleanStalePrePluginFiles(repoRoot, true);
|
|
41290
41289
|
await installOfficialClaudePlugins(true);
|
|
41291
41290
|
return;
|
|
@@ -41310,7 +41309,7 @@ function installUserStatusLine(dryRun) {
|
|
|
41310
41309
|
const settingsPath = import_path12.default.join(import_os5.default.homedir(), ".claude", "settings.json");
|
|
41311
41310
|
const settings = import_fs_extra12.default.existsSync(settingsPath) ? JSON.parse(import_fs_extra12.default.readFileSync(settingsPath, "utf8")) : {};
|
|
41312
41311
|
if (dryRun) {
|
|
41313
|
-
console.log(
|
|
41312
|
+
console.log(kleur_default.dim(` [DRY RUN] Would write statusLine \u2192 ${scriptPath}`));
|
|
41314
41313
|
return;
|
|
41315
41314
|
}
|
|
41316
41315
|
settings.statusLine = { type: "command", command: `node ${scriptPath}`, padding: 1 };
|
|
@@ -41456,12 +41455,12 @@ function createInstallCommand() {
|
|
|
41456
41455
|
await syncMcpForTargets(repoRoot, otherTargets, dryRun);
|
|
41457
41456
|
}
|
|
41458
41457
|
if (allChanges.length === 0) {
|
|
41459
|
-
console.log("\n" +
|
|
41458
|
+
console.log("\n" + kleur_default.bold("\u2713 Files are up-to-date") + "\n");
|
|
41460
41459
|
return;
|
|
41461
41460
|
}
|
|
41462
41461
|
renderPlanTable(allChanges);
|
|
41463
41462
|
if (dryRun) {
|
|
41464
|
-
console.log(
|
|
41463
|
+
console.log(kleur_default.dim(" Dry run \u2014 no changes written\n"));
|
|
41465
41464
|
return;
|
|
41466
41465
|
}
|
|
41467
41466
|
if (!effectiveYes) {
|