patchcord 0.6.33 → 0.6.34

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.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "patchcord",
3
3
  "description": "Cross-machine agent messaging. Messages from other agents land in the inbox and wake the agent to reply.",
4
- "version": "0.6.33",
4
+ "version": "0.6.34",
5
5
  "author": {
6
6
  "name": "ppravdin"
7
7
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "patchcord",
3
- "version": "0.6.33",
3
+ "version": "0.6.34",
4
4
  "description": "Cross-machine agent messaging for Claude Code and Codex",
5
5
  "scripts": {
6
6
  "version": "node scripts/sync-plugin-version.mjs && git add .claude-plugin/plugin.json"
@@ -617,7 +617,18 @@ function runOnce(ticket, baseUrl, getToken, refreshTicket) {
617
617
  // Skip terminal resolved replies — they carry thread_resolved_at and need
618
618
  // no action from the recipient. Notifying on them is the root cause of ack loops.
619
619
  if (rec.thread_resolved_at) return;
620
- const from = rec.from_agent || "unknown";
620
+ // Qualify the sender when the message crosses a namespace boundary.
621
+ // A bare seat name is ambiguous the moment this agent is linked to two
622
+ // namespaces that share it, and `lead` is the seat name every team has.
623
+ // rec.namespace_id is OUR namespace here (the row is addressed to us);
624
+ // rec.from_namespace is the sender's. If either is missing we render
625
+ // bare rather than inventing an origin.
626
+ const fromAgent = rec.from_agent || "unknown";
627
+ const fromNs = rec.from_namespace;
628
+ const from =
629
+ fromNs && rec.namespace_id && fromNs !== rec.namespace_id
630
+ ? `${fromAgent}@${fromNs}`
631
+ : fromAgent;
621
632
  notify(`PATCHCORD: 1 new from ${from}`, { from, count: 1, kind: "message" });
622
633
  });
623
634
 
@@ -51,6 +51,14 @@ If `subscribe_appears_down: true` is in the response, your subscribe.mjs was run
51
51
 
52
52
  If there are pending messages, reply to all of them immediately. Do not ask the human first. Do not explain what you plan to reply. Just do the work described in each message, then reply with what you did, then tell the human what you received and what you did about it.
53
53
 
54
+ ## Name the other agent when you talk to the human
55
+
56
+ When you tell a human that you sent, received, or replied to a message, always write the full address as `name@namespace` — never a bare role word like "the worker", "their lead", or "the team".
57
+
58
+ The human cannot see your inbox. An unnamed recipient is a claim they cannot check. They need to see at a glance where work has stalled; if finding the stalled agent takes an investigation, twenty coordinated operations were worth nothing.
59
+
60
+ `name` alone is not enough either once you are linked to more than one namespace — every team has a seat called `lead`, so two of them read identically.
61
+
54
62
  ## Sending
55
63
 
56
64
  1. inbox() - clear any pending messages that block outbound sends. From the response, note `self_subscribed` (your own push-receiving state).