stashes 0.1.18 → 0.1.20
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/cli.js +165 -30
- package/dist/commands/setup.d.ts +13 -0
- package/dist/commands/setup.d.ts.map +1 -1
- package/dist/commands/setup.js +3 -3
- package/dist/commands/setup.js.map +1 -1
- package/dist/commands/update.d.ts +2 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +115 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/index.js.map +1 -1
- package/dist/mcp.js +125 -27
- package/dist/web/assets/{index-rlo24tzl.js → index-CMBT005S.js} +1 -1
- package/dist/web/index.html +1 -1
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -19,9 +19,9 @@ var __toESM = (mod, isNodeMode, target) => {
|
|
|
19
19
|
var __require = import.meta.require;
|
|
20
20
|
|
|
21
21
|
// src/index.ts
|
|
22
|
-
import { readFileSync as
|
|
23
|
-
import { join as
|
|
24
|
-
import { fileURLToPath as
|
|
22
|
+
import { readFileSync as readFileSync9 } from "fs";
|
|
23
|
+
import { join as join12, dirname as dirname5 } from "path";
|
|
24
|
+
import { fileURLToPath as fileURLToPath3 } from "url";
|
|
25
25
|
import { Command } from "commander";
|
|
26
26
|
|
|
27
27
|
// src/commands/start.ts
|
|
@@ -656,6 +656,7 @@ function killAiProcess(id) {
|
|
|
656
656
|
}
|
|
657
657
|
return false;
|
|
658
658
|
}
|
|
659
|
+
var toolNameMap = new Map;
|
|
659
660
|
async function* parseClaudeStream(proc) {
|
|
660
661
|
const stdout = proc.stdout;
|
|
661
662
|
if (!stdout || typeof stdout === "number") {
|
|
@@ -692,15 +693,58 @@ async function* parseClaudeStream(proc) {
|
|
|
692
693
|
} else if (block.type === "thinking" && block.thinking) {
|
|
693
694
|
yield { type: "thinking", content: block.thinking };
|
|
694
695
|
} else if (block.type === "tool_use") {
|
|
695
|
-
|
|
696
|
-
|
|
696
|
+
const toolId = block.id;
|
|
697
|
+
const toolName = block.name;
|
|
698
|
+
toolNameMap.set(toolId, toolName);
|
|
699
|
+
logger.debug("claude", `tool_use: ${toolName}`);
|
|
700
|
+
yield {
|
|
701
|
+
type: "tool_use",
|
|
702
|
+
content: JSON.stringify({ tool: toolName, input: block.input }),
|
|
703
|
+
toolName,
|
|
704
|
+
toolInput: block.input,
|
|
705
|
+
toolUseId: toolId
|
|
706
|
+
};
|
|
697
707
|
}
|
|
698
708
|
}
|
|
699
709
|
}
|
|
710
|
+
if (parsed.type === "user" && parsed.message) {
|
|
711
|
+
const message = parsed.message;
|
|
712
|
+
for (const block of message.content || []) {
|
|
713
|
+
if (block.type === "tool_result") {
|
|
714
|
+
const toolUseId = block.tool_use_id;
|
|
715
|
+
const isError = block.is_error || false;
|
|
716
|
+
const toolName = toolNameMap.get(toolUseId) || "unknown";
|
|
717
|
+
let resultContent;
|
|
718
|
+
if (typeof block.content === "string") {
|
|
719
|
+
resultContent = block.content;
|
|
720
|
+
} else if (Array.isArray(block.content)) {
|
|
721
|
+
resultContent = block.content.filter((c) => c.type === "text").map((c) => c.text).join(`
|
|
722
|
+
`);
|
|
723
|
+
} else {
|
|
724
|
+
resultContent = "";
|
|
725
|
+
}
|
|
726
|
+
yield {
|
|
727
|
+
type: "tool_result",
|
|
728
|
+
content: resultContent.substring(0, 500),
|
|
729
|
+
toolName,
|
|
730
|
+
toolUseId,
|
|
731
|
+
isError
|
|
732
|
+
};
|
|
733
|
+
}
|
|
734
|
+
}
|
|
735
|
+
}
|
|
736
|
+
if (parsed.type === "result") {
|
|
737
|
+
yield {
|
|
738
|
+
type: "result",
|
|
739
|
+
content: "",
|
|
740
|
+
resultSubtype: parsed.subtype
|
|
741
|
+
};
|
|
742
|
+
}
|
|
700
743
|
}
|
|
701
744
|
}
|
|
702
745
|
} finally {
|
|
703
746
|
logger.debug("claude", `stream ended`, { totalChunks: chunkCount });
|
|
747
|
+
toolNameMap.clear();
|
|
704
748
|
reader.releaseLock();
|
|
705
749
|
}
|
|
706
750
|
}
|
|
@@ -1352,9 +1396,12 @@ ${refs.join(`
|
|
|
1352
1396
|
}
|
|
1353
1397
|
const chatPrompt = [
|
|
1354
1398
|
"You are helping the user explore UI design variations for their project.",
|
|
1355
|
-
"You have access to stashes MCP tools to generate, list, browse, vary, and apply stashes.",
|
|
1399
|
+
"You have access to stashes MCP tools to generate, list, show, browse, vary, and apply stashes.",
|
|
1356
1400
|
"If the user asks you to generate, create, or make variations, use the stashes_generate tool.",
|
|
1357
1401
|
"If the user asks to vary an existing stash, use the stashes_vary tool.",
|
|
1402
|
+
"If the user asks about what a stash changed, its diff, or its contents, use stashes_show to inspect it.",
|
|
1403
|
+
'IMPORTANT: NEVER call stashes_apply unless the user explicitly asks to "apply" or "merge" a stash.',
|
|
1404
|
+
'IMPORTANT: NEVER call stashes_remove unless the user explicitly asks to "delete" or "remove" a stash.',
|
|
1358
1405
|
"Otherwise, respond conversationally about their project and stashes.",
|
|
1359
1406
|
"",
|
|
1360
1407
|
component ? `Component: ${component.name}` : "",
|
|
@@ -1389,40 +1436,24 @@ ${sourceCode.substring(0, 3000)}
|
|
|
1389
1436
|
source: "chat"
|
|
1390
1437
|
});
|
|
1391
1438
|
} else if (chunk.type === "tool_use") {
|
|
1392
|
-
let toolName = "unknown";
|
|
1393
|
-
let toolParams = {};
|
|
1394
|
-
try {
|
|
1395
|
-
const parsed = JSON.parse(chunk.content);
|
|
1396
|
-
toolName = parsed.tool || parsed.name || "unknown";
|
|
1397
|
-
toolParams = parsed.input || parsed.params || {};
|
|
1398
|
-
} catch {}
|
|
1399
1439
|
this.broadcast({
|
|
1400
1440
|
type: "ai_stream",
|
|
1401
1441
|
content: chunk.content,
|
|
1402
1442
|
streamType: "tool_start",
|
|
1403
1443
|
source: "chat",
|
|
1404
|
-
toolName,
|
|
1405
|
-
toolParams,
|
|
1444
|
+
toolName: chunk.toolName ?? "unknown",
|
|
1445
|
+
toolParams: chunk.toolInput ?? {},
|
|
1406
1446
|
toolStatus: "running"
|
|
1407
1447
|
});
|
|
1408
1448
|
} else if (chunk.type === "tool_result") {
|
|
1409
|
-
let toolName = "unknown";
|
|
1410
|
-
let toolResult = "";
|
|
1411
|
-
try {
|
|
1412
|
-
const parsed = JSON.parse(chunk.content);
|
|
1413
|
-
toolName = parsed.tool || parsed.name || "unknown";
|
|
1414
|
-
toolResult = typeof parsed.result === "string" ? parsed.result.substring(0, 200) : JSON.stringify(parsed.result).substring(0, 200);
|
|
1415
|
-
} catch {
|
|
1416
|
-
toolResult = chunk.content.substring(0, 200);
|
|
1417
|
-
}
|
|
1418
1449
|
this.broadcast({
|
|
1419
1450
|
type: "ai_stream",
|
|
1420
1451
|
content: chunk.content,
|
|
1421
1452
|
streamType: "tool_end",
|
|
1422
1453
|
source: "chat",
|
|
1423
|
-
toolName,
|
|
1424
|
-
toolStatus: "completed",
|
|
1425
|
-
toolResult
|
|
1454
|
+
toolName: chunk.toolName ?? "unknown",
|
|
1455
|
+
toolStatus: chunk.isError ? "error" : "completed",
|
|
1456
|
+
toolResult: chunk.content.substring(0, 300)
|
|
1426
1457
|
});
|
|
1427
1458
|
}
|
|
1428
1459
|
}
|
|
@@ -2444,10 +2475,113 @@ async function setupCommand(options) {
|
|
|
2444
2475
|
}
|
|
2445
2476
|
}
|
|
2446
2477
|
|
|
2478
|
+
// src/commands/update.ts
|
|
2479
|
+
import { spawn as spawn5, execSync } from "child_process";
|
|
2480
|
+
import { writeFileSync as writeFileSync3, chmodSync, readFileSync as readFileSync8 } from "fs";
|
|
2481
|
+
import { tmpdir } from "os";
|
|
2482
|
+
import { join as join11, dirname as dirname4 } from "path";
|
|
2483
|
+
import { fileURLToPath as fileURLToPath2 } from "url";
|
|
2484
|
+
import * as p2 from "@clack/prompts";
|
|
2485
|
+
import pc2 from "picocolors";
|
|
2486
|
+
function getCurrentVersion() {
|
|
2487
|
+
const selfDir = dirname4(fileURLToPath2(import.meta.url));
|
|
2488
|
+
const pkgPath = join11(selfDir, "..", "package.json");
|
|
2489
|
+
return JSON.parse(readFileSync8(pkgPath, "utf-8")).version;
|
|
2490
|
+
}
|
|
2491
|
+
function fetchLatestVersion() {
|
|
2492
|
+
try {
|
|
2493
|
+
return execSync("npm view stashes version", {
|
|
2494
|
+
encoding: "utf-8",
|
|
2495
|
+
stdio: ["pipe", "pipe", "pipe"]
|
|
2496
|
+
}).trim();
|
|
2497
|
+
} catch {
|
|
2498
|
+
return null;
|
|
2499
|
+
}
|
|
2500
|
+
}
|
|
2501
|
+
function buildUpdateScript(scriptPath) {
|
|
2502
|
+
return [
|
|
2503
|
+
"#!/bin/bash",
|
|
2504
|
+
"set -e",
|
|
2505
|
+
"",
|
|
2506
|
+
'echo ""',
|
|
2507
|
+
'echo "Uninstalling current version..."',
|
|
2508
|
+
"npm uninstall -g stashes 2>/dev/null || true",
|
|
2509
|
+
"",
|
|
2510
|
+
'echo "Installing stashes@latest..."',
|
|
2511
|
+
"npm install -g stashes@latest",
|
|
2512
|
+
"",
|
|
2513
|
+
'echo ""',
|
|
2514
|
+
'echo "Re-registering with AI tools..."',
|
|
2515
|
+
"stashes setup",
|
|
2516
|
+
"",
|
|
2517
|
+
"NEW_VERSION=$(stashes --version)",
|
|
2518
|
+
'echo ""',
|
|
2519
|
+
'echo "\u2713 Updated to stashes v${NEW_VERSION}"',
|
|
2520
|
+
"",
|
|
2521
|
+
"# Self-cleanup",
|
|
2522
|
+
`rm -f "${scriptPath}"`
|
|
2523
|
+
].join(`
|
|
2524
|
+
`);
|
|
2525
|
+
}
|
|
2526
|
+
async function updateCommand() {
|
|
2527
|
+
p2.intro(pc2.bgMagenta(pc2.black(" stashes update ")));
|
|
2528
|
+
const currentVersion = getCurrentVersion();
|
|
2529
|
+
const s = p2.spinner();
|
|
2530
|
+
s.start("Checking for updates...");
|
|
2531
|
+
const latestVersion = fetchLatestVersion();
|
|
2532
|
+
if (!latestVersion) {
|
|
2533
|
+
s.stop("Failed to check for updates");
|
|
2534
|
+
p2.log.error("Could not reach the npm registry. Check your internet connection.");
|
|
2535
|
+
p2.outro("Update aborted.");
|
|
2536
|
+
return;
|
|
2537
|
+
}
|
|
2538
|
+
s.stop(`Latest version: ${pc2.green(latestVersion)}`);
|
|
2539
|
+
if (currentVersion === latestVersion) {
|
|
2540
|
+
p2.log.success(`Already on the latest version ${pc2.bold(currentVersion)}`);
|
|
2541
|
+
p2.outro("Nothing to update.");
|
|
2542
|
+
return;
|
|
2543
|
+
}
|
|
2544
|
+
p2.log.info(`${pc2.yellow(currentVersion)} \u2192 ${pc2.green(latestVersion)}`);
|
|
2545
|
+
const shouldProceed = await p2.confirm({
|
|
2546
|
+
message: "Proceed with update?"
|
|
2547
|
+
});
|
|
2548
|
+
if (p2.isCancel(shouldProceed) || !shouldProceed) {
|
|
2549
|
+
p2.cancel("Update cancelled.");
|
|
2550
|
+
return;
|
|
2551
|
+
}
|
|
2552
|
+
const tools = buildToolDefinitions();
|
|
2553
|
+
const configuredTools = tools.filter((t) => {
|
|
2554
|
+
try {
|
|
2555
|
+
return t.detect() && isConfigured(t);
|
|
2556
|
+
} catch {
|
|
2557
|
+
return false;
|
|
2558
|
+
}
|
|
2559
|
+
});
|
|
2560
|
+
if (configuredTools.length > 0) {
|
|
2561
|
+
s.start("Removing MCP registrations...");
|
|
2562
|
+
for (const tool of configuredTools) {
|
|
2563
|
+
try {
|
|
2564
|
+
removeMcp(tool);
|
|
2565
|
+
} catch {}
|
|
2566
|
+
}
|
|
2567
|
+
s.stop(`Removed from ${configuredTools.length} tool${configuredTools.length === 1 ? "" : "s"}`);
|
|
2568
|
+
}
|
|
2569
|
+
const scriptPath = join11(tmpdir(), `stashes-update-${Date.now()}.sh`);
|
|
2570
|
+
writeFileSync3(scriptPath, buildUpdateScript(scriptPath), "utf-8");
|
|
2571
|
+
chmodSync(scriptPath, 493);
|
|
2572
|
+
p2.outro("Handing off to updater...");
|
|
2573
|
+
const child = spawn5("bash", [scriptPath], {
|
|
2574
|
+
detached: true,
|
|
2575
|
+
stdio: "inherit"
|
|
2576
|
+
});
|
|
2577
|
+
child.unref();
|
|
2578
|
+
process.exit(0);
|
|
2579
|
+
}
|
|
2580
|
+
|
|
2447
2581
|
// src/index.ts
|
|
2448
|
-
var selfDir =
|
|
2449
|
-
var pkgPath =
|
|
2450
|
-
var version = JSON.parse(
|
|
2582
|
+
var selfDir = dirname5(fileURLToPath3(import.meta.url));
|
|
2583
|
+
var pkgPath = join12(selfDir, "..", "package.json");
|
|
2584
|
+
var version = JSON.parse(readFileSync9(pkgPath, "utf-8")).version;
|
|
2451
2585
|
var program = new Command;
|
|
2452
2586
|
program.name("stashes").description("Generate AI-powered UI design explorations in your project").version(version, "-v, --version");
|
|
2453
2587
|
program.command("browse", { isDefault: true }).description("Start the Stashes server and open the web UI").argument("[path]", "Project directory", ".").option("-p, --port <port>", "Stashes server port", "4000").option("-d, --dev-port <port>", "Your app dev server port (auto-detected)").option("-n, --stashes <count>", "Default stash count", "3").option("--no-open", "Do not open the browser").action(startCommand);
|
|
@@ -2458,4 +2592,5 @@ program.command("vary").description("Create a variation of an existing stash").a
|
|
|
2458
2592
|
program.command("remove").description("Delete a stash and its git branch").argument("<stashId>", "Stash ID to remove").action(removeCommand);
|
|
2459
2593
|
program.command("cleanup").description("Remove all worktrees and stash branches").action(cleanupCommand);
|
|
2460
2594
|
program.command("setup").description("Detect AI tools and register the Stashes MCP server").option("--status", "Show which tools are detected and configured").option("--remove", "Remove Stashes MCP from all tools").action(setupCommand);
|
|
2595
|
+
program.command("update").description("Update stashes to the latest version").action(updateCommand);
|
|
2461
2596
|
program.parse();
|
package/dist/commands/setup.d.ts
CHANGED
|
@@ -1,3 +1,16 @@
|
|
|
1
|
+
export interface ToolDefinition {
|
|
2
|
+
readonly id: string;
|
|
3
|
+
readonly name: string;
|
|
4
|
+
readonly configPath: string;
|
|
5
|
+
/** JSON key that holds the MCP servers object */
|
|
6
|
+
readonly serversKey: string;
|
|
7
|
+
/** Zed uses a nested command/settings structure instead of flat command/args */
|
|
8
|
+
readonly format: 'standard' | 'zed';
|
|
9
|
+
detect(): boolean;
|
|
10
|
+
}
|
|
11
|
+
export declare function buildToolDefinitions(): readonly ToolDefinition[];
|
|
12
|
+
export declare function isConfigured(tool: ToolDefinition): boolean;
|
|
13
|
+
export declare function removeMcp(tool: ToolDefinition): void;
|
|
1
14
|
interface SetupOptions {
|
|
2
15
|
status?: boolean;
|
|
3
16
|
remove?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,iDAAiD;IACjD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,gFAAgF;IAChF,QAAQ,CAAC,MAAM,EAAE,UAAU,GAAG,KAAK,CAAC;IACpC,MAAM,IAAI,OAAO,CAAC;CACnB;AAsBD,wBAAgB,oBAAoB,IAAI,SAAS,cAAc,EAAE,CA0DhE;AAsBD,wBAAgB,YAAY,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAI1D;AAaD,wBAAgB,SAAS,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI,CAYpD;AA0ID,UAAU,YAAY;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAUvE"}
|
package/dist/commands/setup.js
CHANGED
|
@@ -18,7 +18,7 @@ const MCP_ENTRY_ZED = {
|
|
|
18
18
|
settings: {},
|
|
19
19
|
};
|
|
20
20
|
// ── Tool definitions ────────────────────────────────────────────────────────────
|
|
21
|
-
function buildToolDefinitions() {
|
|
21
|
+
export function buildToolDefinitions() {
|
|
22
22
|
const home = homedir();
|
|
23
23
|
const appSupport = join(home, 'Library', 'Application Support');
|
|
24
24
|
return [
|
|
@@ -93,7 +93,7 @@ function writeJsonFile(path, data) {
|
|
|
93
93
|
writeFileSync(path, JSON.stringify(data, null, 2) + '\n');
|
|
94
94
|
}
|
|
95
95
|
// ── Config operations ───────────────────────────────────────────────────────────
|
|
96
|
-
function isConfigured(tool) {
|
|
96
|
+
export function isConfigured(tool) {
|
|
97
97
|
const config = readJsonFile(tool.configPath);
|
|
98
98
|
const servers = config[tool.serversKey];
|
|
99
99
|
return !!servers?.[MCP_SERVER_NAME];
|
|
@@ -106,7 +106,7 @@ function installMcp(tool) {
|
|
|
106
106
|
config[tool.serversKey] = servers;
|
|
107
107
|
writeJsonFile(tool.configPath, config);
|
|
108
108
|
}
|
|
109
|
-
function removeMcp(tool) {
|
|
109
|
+
export function removeMcp(tool) {
|
|
110
110
|
const config = readJsonFile(tool.configPath);
|
|
111
111
|
const servers = config[tool.serversKey];
|
|
112
112
|
if (!servers)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AACpC,OAAO,EAAE,MAAM,YAAY,CAAC;AAe5B,mFAAmF;AAEnF,MAAM,eAAe,GAAG,SAAS,CAAC;AAElC,MAAM,kBAAkB,GAAG;IACzB,OAAO,EAAE,KAAK;IACd,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,gBAAgB,EAAE,aAAa,CAAC;IACnD,WAAW,EAAE,4CAA4C;CAC1D,CAAC;AAEF,MAAM,aAAa,GAAG;IACpB,OAAO,EAAE;QACP,IAAI,EAAE,KAAK;QACX,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,gBAAgB,EAAE,aAAa,CAAC;KACpD;IACD,QAAQ,EAAE,EAAE;CACb,CAAC;AAEF,mFAAmF;AAEnF,
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAuDA,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CA6EnD"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { spawn, execSync } from 'node:child_process';
|
|
2
|
+
import { writeFileSync, chmodSync, readFileSync } from 'node:fs';
|
|
3
|
+
import { tmpdir } from 'node:os';
|
|
4
|
+
import { join, dirname } from 'node:path';
|
|
5
|
+
import { fileURLToPath } from 'node:url';
|
|
6
|
+
import * as p from '@clack/prompts';
|
|
7
|
+
import pc from 'picocolors';
|
|
8
|
+
import { buildToolDefinitions, removeMcp, isConfigured } from './setup.js';
|
|
9
|
+
// ── Helpers ─────────────────────────────────────────────────────────────────────
|
|
10
|
+
function getCurrentVersion() {
|
|
11
|
+
const selfDir = dirname(fileURLToPath(import.meta.url));
|
|
12
|
+
const pkgPath = join(selfDir, '..', 'package.json');
|
|
13
|
+
return JSON.parse(readFileSync(pkgPath, 'utf-8')).version;
|
|
14
|
+
}
|
|
15
|
+
function fetchLatestVersion() {
|
|
16
|
+
try {
|
|
17
|
+
return execSync('npm view stashes version', {
|
|
18
|
+
encoding: 'utf-8',
|
|
19
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
20
|
+
}).trim();
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
function buildUpdateScript(scriptPath) {
|
|
27
|
+
return [
|
|
28
|
+
'#!/bin/bash',
|
|
29
|
+
'set -e',
|
|
30
|
+
'',
|
|
31
|
+
'echo ""',
|
|
32
|
+
'echo "Uninstalling current version..."',
|
|
33
|
+
'npm uninstall -g stashes 2>/dev/null || true',
|
|
34
|
+
'',
|
|
35
|
+
'echo "Installing stashes@latest..."',
|
|
36
|
+
'npm install -g stashes@latest',
|
|
37
|
+
'',
|
|
38
|
+
'echo ""',
|
|
39
|
+
'echo "Re-registering with AI tools..."',
|
|
40
|
+
'stashes setup',
|
|
41
|
+
'',
|
|
42
|
+
'NEW_VERSION=$(stashes --version)',
|
|
43
|
+
'echo ""',
|
|
44
|
+
'echo "✓ Updated to stashes v${NEW_VERSION}"',
|
|
45
|
+
'',
|
|
46
|
+
'# Self-cleanup',
|
|
47
|
+
`rm -f "${scriptPath}"`,
|
|
48
|
+
].join('\n');
|
|
49
|
+
}
|
|
50
|
+
// ── Command ─────────────────────────────────────────────────────────────────────
|
|
51
|
+
export async function updateCommand() {
|
|
52
|
+
p.intro(pc.bgMagenta(pc.black(' stashes update ')));
|
|
53
|
+
const currentVersion = getCurrentVersion();
|
|
54
|
+
// Check latest version from npm registry
|
|
55
|
+
const s = p.spinner();
|
|
56
|
+
s.start('Checking for updates...');
|
|
57
|
+
const latestVersion = fetchLatestVersion();
|
|
58
|
+
if (!latestVersion) {
|
|
59
|
+
s.stop('Failed to check for updates');
|
|
60
|
+
p.log.error('Could not reach the npm registry. Check your internet connection.');
|
|
61
|
+
p.outro('Update aborted.');
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
s.stop(`Latest version: ${pc.green(latestVersion)}`);
|
|
65
|
+
if (currentVersion === latestVersion) {
|
|
66
|
+
p.log.success(`Already on the latest version ${pc.bold(currentVersion)}`);
|
|
67
|
+
p.outro('Nothing to update.');
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
p.log.info(`${pc.yellow(currentVersion)} → ${pc.green(latestVersion)}`);
|
|
71
|
+
// Confirm with user
|
|
72
|
+
const shouldProceed = await p.confirm({
|
|
73
|
+
message: 'Proceed with update?',
|
|
74
|
+
});
|
|
75
|
+
if (p.isCancel(shouldProceed) || !shouldProceed) {
|
|
76
|
+
p.cancel('Update cancelled.');
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
// Remove MCP from all configured tools (in-process, while binary still exists)
|
|
80
|
+
const tools = buildToolDefinitions();
|
|
81
|
+
const configuredTools = tools.filter((t) => {
|
|
82
|
+
try {
|
|
83
|
+
return t.detect() && isConfigured(t);
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
return false;
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
if (configuredTools.length > 0) {
|
|
90
|
+
s.start('Removing MCP registrations...');
|
|
91
|
+
for (const tool of configuredTools) {
|
|
92
|
+
try {
|
|
93
|
+
removeMcp(tool);
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
// Best effort — continue with remaining tools
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
s.stop(`Removed from ${configuredTools.length} tool${configuredTools.length === 1 ? '' : 's'}`);
|
|
100
|
+
}
|
|
101
|
+
// Write a detached shell script to handle uninstall → install → setup.
|
|
102
|
+
// This avoids the self-destruct problem: the current Node process exits
|
|
103
|
+
// cleanly before npm removes the binary from disk.
|
|
104
|
+
const scriptPath = join(tmpdir(), `stashes-update-${Date.now()}.sh`);
|
|
105
|
+
writeFileSync(scriptPath, buildUpdateScript(scriptPath), 'utf-8');
|
|
106
|
+
chmodSync(scriptPath, 0o755);
|
|
107
|
+
p.outro('Handing off to updater...');
|
|
108
|
+
const child = spawn('bash', [scriptPath], {
|
|
109
|
+
detached: true,
|
|
110
|
+
stdio: 'inherit',
|
|
111
|
+
});
|
|
112
|
+
child.unref();
|
|
113
|
+
process.exit(0);
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=update.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|