patchcord 0.6.22 → 0.6.23
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/.claude-plugin/plugin.json +1 -1
- package/bin/patchcord.mjs +1 -55
- package/package.json +1 -1
package/bin/patchcord.mjs
CHANGED
|
@@ -1900,29 +1900,6 @@ if (!cmd || cmd === "install" || cmd === "agent" || cmd?.startsWith("--")) {
|
|
|
1900
1900
|
} else if (allowlistChanged) {
|
|
1901
1901
|
globalChanges.push("Cursor MCP allowlist configured");
|
|
1902
1902
|
}
|
|
1903
|
-
|
|
1904
|
-
// cursor-agent v2026.07+ reads ~/.cursor/cli-config.json permissions.allow
|
|
1905
|
-
// for MCP — permissions.json mcpAllowlist alone leaves patchcord unloaded.
|
|
1906
|
-
const cliConfigPath = join(HOME, ".cursor", "cli-config.json");
|
|
1907
|
-
let cliAllowChanged = false;
|
|
1908
|
-
const cliOk = updateJsonConfig(cliConfigPath, (obj) => {
|
|
1909
|
-
obj.permissions = obj.permissions || {};
|
|
1910
|
-
if (!obj.permissions.allow) obj.permissions.allow = [];
|
|
1911
|
-
if (!Array.isArray(obj.permissions.allow)) {
|
|
1912
|
-
console.log(`\n ${yellow}⚠${r} Skipped Cursor CLI MCP allow — ${cliConfigPath} permissions.allow is not an array.`);
|
|
1913
|
-
return;
|
|
1914
|
-
}
|
|
1915
|
-
const pat = "Mcp(patchcord:*)";
|
|
1916
|
-
if (!obj.permissions.allow.includes(pat)) {
|
|
1917
|
-
obj.permissions.allow.push(pat);
|
|
1918
|
-
cliAllowChanged = true;
|
|
1919
|
-
}
|
|
1920
|
-
});
|
|
1921
|
-
if (!cliOk) {
|
|
1922
|
-
globalChanges.push("✗ Cursor CLI permissions error");
|
|
1923
|
-
} else if (cliAllowChanged) {
|
|
1924
|
-
globalChanges.push("Cursor CLI MCP allowlist configured");
|
|
1925
|
-
}
|
|
1926
1903
|
}
|
|
1927
1904
|
}
|
|
1928
1905
|
|
|
@@ -2360,12 +2337,6 @@ if (!cmd || cmd === "install" || cmd === "agent" || cmd?.startsWith("--")) {
|
|
|
2360
2337
|
}
|
|
2361
2338
|
toolSlug = toolFlag; // preserved as-is for the URL param
|
|
2362
2339
|
}
|
|
2363
|
-
// cursor-agent --yolo runs npx patchcord without --tool=cursor; auto-select
|
|
2364
|
-
// Cursor so provision writes .cursor/mcp.json for this harness.
|
|
2365
|
-
if (!choice && process.env.CURSOR_AGENT) {
|
|
2366
|
-
choice = CLIENT_TYPE_MAP.cursor;
|
|
2367
|
-
toolSlug = toolSlug || "cursor";
|
|
2368
|
-
}
|
|
2369
2340
|
|
|
2370
2341
|
// --token bypass for power users / CI / self-hosters
|
|
2371
2342
|
const tokenFlag = flags.find(f => f.startsWith("--token="))?.split("=")[1]
|
|
@@ -2416,14 +2387,12 @@ if (!cmd || cmd === "install" || cmd === "agent" || cmd?.startsWith("--")) {
|
|
|
2416
2387
|
let existingToken = "";
|
|
2417
2388
|
let existingConfigFile = "";
|
|
2418
2389
|
const mcpJsonPath = join(cwd, ".mcp.json");
|
|
2419
|
-
const cursorMcpPath = join(cwd, ".cursor", "mcp.json");
|
|
2420
2390
|
const codexTomlPath = join(cwd, ".codex", "config.toml");
|
|
2421
2391
|
const grokTomlPath = join(cwd, ".grok", "config.toml");
|
|
2422
2392
|
const kimiJsonPath = join(cwd, ".kimi", "mcp.json");
|
|
2423
2393
|
|
|
2424
|
-
const slugForCheck = toolSlug ? toolSlug.replace(/-/g, "_") :
|
|
2394
|
+
const slugForCheck = toolSlug ? toolSlug.replace(/-/g, "_") : "";
|
|
2425
2395
|
const checkMcpJson = !slugForCheck || slugForCheck === "claude_code";
|
|
2426
|
-
const checkCursorJson = !slugForCheck || slugForCheck === "cursor";
|
|
2427
2396
|
const checkCodexToml = !slugForCheck || slugForCheck === "codex";
|
|
2428
2397
|
const checkGrokToml = !slugForCheck || ["grok", "grok_cli", "grok_build"].includes(slugForCheck);
|
|
2429
2398
|
const checkKimiJson = !slugForCheck || slugForCheck === "kimi";
|
|
@@ -2438,16 +2407,6 @@ if (!cmd || cmd === "install" || cmd === "agent" || cmd?.startsWith("--")) {
|
|
|
2438
2407
|
}
|
|
2439
2408
|
} catch {}
|
|
2440
2409
|
}
|
|
2441
|
-
if (!existingToken && checkCursorJson && existsSync(cursorMcpPath)) {
|
|
2442
|
-
try {
|
|
2443
|
-
const existing = JSON.parse(readFileSync(cursorMcpPath, "utf-8"));
|
|
2444
|
-
const pt = existing?.mcpServers?.patchcord;
|
|
2445
|
-
if (pt?.headers?.Authorization) {
|
|
2446
|
-
existingToken = pt.headers.Authorization.replace(/^Bearer\s+/i, "");
|
|
2447
|
-
existingConfigFile = cursorMcpPath;
|
|
2448
|
-
}
|
|
2449
|
-
} catch {}
|
|
2450
|
-
}
|
|
2451
2410
|
if (!existingToken && checkCodexToml && existsSync(codexTomlPath)) {
|
|
2452
2411
|
try {
|
|
2453
2412
|
const content = readFileSync(codexTomlPath, "utf-8");
|
|
@@ -2770,17 +2729,6 @@ if (!cmd || cmd === "install" || cmd === "agent" || cmd?.startsWith("--")) {
|
|
|
2770
2729
|
console.log(`\n ${green}✓${r} Cursor configured: ${dim}${cursorPath}${r}`);
|
|
2771
2730
|
console.log(` ${dim}Per-project only — other projects won't see this agent.${r}`);
|
|
2772
2731
|
}
|
|
2773
|
-
const cursorCliPath = join(cursorDir, "cli.json");
|
|
2774
|
-
const cursorCliOk = updateJsonConfig(cursorCliPath, (obj) => {
|
|
2775
|
-
obj.permissions = obj.permissions || {};
|
|
2776
|
-
if (!obj.permissions.allow) obj.permissions.allow = [];
|
|
2777
|
-
if (!Array.isArray(obj.permissions.allow)) return;
|
|
2778
|
-
const pat = "Mcp(patchcord:*)";
|
|
2779
|
-
if (!obj.permissions.allow.includes(pat)) obj.permissions.allow.push(pat);
|
|
2780
|
-
});
|
|
2781
|
-
if (cursorCliOk) {
|
|
2782
|
-
console.log(` ${green}✓${r} Cursor CLI permissions: ${dim}${cursorCliPath}${r}`);
|
|
2783
|
-
}
|
|
2784
2732
|
} else if (isGrok) {
|
|
2785
2733
|
// Grok CLI: project-scoped .grok/config.toml. Grok loads this file from
|
|
2786
2734
|
// the current directory up through the git root, so the bearer remains
|
|
@@ -3433,8 +3381,6 @@ if (!cmd || cmd === "install" || cmd === "agent" || cmd?.startsWith("--")) {
|
|
|
3433
3381
|
|
|
3434
3382
|
if (isOpenClaw) {
|
|
3435
3383
|
console.log(`\n${dim}Run${r} ${bold}openclaw gateway restart${r}${dim}, then tools will be available in your channels.${r}`);
|
|
3436
|
-
} else if (isCursor && hasCursorAgent) {
|
|
3437
|
-
console.log(`\n ${green}→${r} ${bold}Exit and start a new ${cyan}cursor-agent${r}${bold} session${r} ${dim}(MCP loads at session start)${r}`);
|
|
3438
3384
|
} else if (isKimiCode) {
|
|
3439
3385
|
console.log(`\n ${green}→${r} ${bold}Restart ${cyan}kimi${r}${bold} in this project (or run ${cyan}/reload${r}${bold}), then say: ${cyan}${bold}check inbox${r}`);
|
|
3440
3386
|
} else if (isKimi) {
|
package/package.json
CHANGED