patchcord 0.5.90 → 0.5.92
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/bin/patchcord.mjs
CHANGED
|
@@ -2141,15 +2141,16 @@ if (!cmd || cmd === "install" || cmd === "agent" || cmd?.startsWith("--")) {
|
|
|
2141
2141
|
}
|
|
2142
2142
|
|
|
2143
2143
|
// Warn about gitignore for per-project configs with tokens
|
|
2144
|
-
if (!isWindsurf && !isGemini && !isZed && !isOpenClaw && !isAntigravity && !isCline
|
|
2144
|
+
if (!isWindsurf && !isGemini && !isZed && !isOpenClaw && !isAntigravity && !isCline) {
|
|
2145
2145
|
const gitignorePath = join(cwd, ".gitignore");
|
|
2146
|
-
const configFile = isCodex ? ".codex/config.toml" : isCursor ? ".cursor/mcp.json" : isVSCode ? ".vscode/mcp.json" : isOpenCode ? "opencode.json" : ".mcp.json";
|
|
2146
|
+
const configFile = isKimi ? ".kimi/mcp.json" : isCodex ? ".codex/config.toml" : isCursor ? ".cursor/mcp.json" : isVSCode ? ".vscode/mcp.json" : isOpenCode ? "opencode.json" : ".mcp.json";
|
|
2147
2147
|
let needsWarning = true;
|
|
2148
2148
|
if (existsSync(gitignorePath)) {
|
|
2149
2149
|
const gi = readFileSync(gitignorePath, "utf-8");
|
|
2150
2150
|
// Only check patterns relevant to this agent's config file
|
|
2151
2151
|
const patterns = [configFile];
|
|
2152
|
-
if (
|
|
2152
|
+
if (isKimi) patterns.push(".kimi/");
|
|
2153
|
+
else if (isCodex) patterns.push(".codex/");
|
|
2153
2154
|
else if (isCursor) patterns.push(".cursor/");
|
|
2154
2155
|
else if (isVSCode) patterns.push(".vscode/");
|
|
2155
2156
|
if (patterns.some(p => gi.includes(p))) needsWarning = false;
|
package/package.json
CHANGED
|
@@ -8,7 +8,7 @@ type: flow
|
|
|
8
8
|
|
|
9
9
|
```mermaid
|
|
10
10
|
flowchart TD
|
|
11
|
-
A([BEGIN]) --> B[Call the inbox MCP tool. Reading the response: the first header line shows YOUR own identity (the recipient). The actual sender of each message is shown on a 'From X' line — never confuse the header with the sender. For each pending message: do the work
|
|
11
|
+
A([BEGIN]) --> B[Call the inbox MCP tool. Reading the response: the first header line shows YOUR own identity (the recipient). The actual sender of each message is shown on a 'From X' line — never confuse the header with the sender. For each pending message, classify it: (1) ACK — short signals like 'thanks', 'noted', 'works', 'great', 'good', '👍', 'ok' with no task. Close silently with reply(message_id, resolve=true) and NO content. Never send a text reply to an ack — it creates infinite ack chains. (2) BLOCKED — you cannot do the work right now (busy, missing credentials, ambiguous target). Use reply(message_id, 'reason', defer=true) — the message stays in your inbox as a reminder. Never silently skip a message. (3) ACTIONABLE — do the work the message asks for first (edit the file, run the command, write the code), THEN call reply(message_id, 'concrete summary of what you did') with file paths and line numbers. Never reply 'will do' / 'understood' / 'ready' before doing the work.]
|
|
12
12
|
B --> C[Call the Shell tool with these exact parameters to re-arm the listener: command='patchcord subscribe --kimi 5', run_in_background=true, timeout=86400, description='Patchcord listener'.]
|
|
13
13
|
C --> D([END])
|
|
14
14
|
```
|
|
@@ -8,7 +8,7 @@ type: flow
|
|
|
8
8
|
|
|
9
9
|
```mermaid
|
|
10
10
|
flowchart TD
|
|
11
|
-
A([BEGIN]) --> B[First, call the inbox MCP tool. Reading the response: the first header line shows YOUR own identity (the recipient). The actual sender of each message is shown on a 'From X' line — never confuse the header with the sender.
|
|
11
|
+
A([BEGIN]) --> B[First, call the inbox MCP tool. Reading the response: the first header line shows YOUR own identity (the recipient). The actual sender of each message is shown on a 'From X' line — never confuse the header with the sender. Drain each pending message by classifying it: ACK ('thanks', 'noted', 'works', '👍', 'ok') → close silently with reply(message_id, resolve=true), no content; BLOCKED (you cannot do the work right now) → reply(message_id, 'reason', defer=true); ACTIONABLE → do the work first, then reply(message_id, 'concrete summary'). Do NOT skip the drain — the listener exits immediately if messages are already waiting.]
|
|
12
12
|
B --> C[Now call the Shell tool with these exact parameters: command='patchcord subscribe --kimi 5', run_in_background=true, timeout=86400, description='Patchcord listener'. Then tell the user in one sentence: Patchcord listener active.]
|
|
13
13
|
C --> D([END])
|
|
14
14
|
```
|
|
@@ -10,7 +10,7 @@ type: flow
|
|
|
10
10
|
flowchart TD
|
|
11
11
|
A([BEGIN]) --> B[Call the wait_for_message MCP tool to block until a message arrives or 5 minutes elapse.]
|
|
12
12
|
B --> C{Message arrived?}
|
|
13
|
-
C -->|Yes| D[
|
|
13
|
+
C -->|Yes| D[Classify the message: ACK ('thanks', 'noted', 'works', '👍', 'ok') → close silently with reply(message_id, resolve=true), no content; BLOCKED (cannot do work right now) → reply(message_id, 'reason', defer=true); ACTIONABLE → do the work first, then reply(message_id, 'concrete summary'). Never reply to an ack with text.]
|
|
14
14
|
C -->|No| E([END])
|
|
15
15
|
D --> F[Call the Shell tool with these exact parameters to re-arm the listener: command='patchcord subscribe --kimi 5', run_in_background=true, timeout=86400, description='Patchcord listener'.]
|
|
16
16
|
F --> E
|