@paigy/mcp 0.33.0 → 0.34.0

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.
@@ -362,6 +362,12 @@ var PendingRepliesSchema = z.object({
362
362
  pending: z.array(
363
363
  z.object({ parentId: z.string(), notificationId: z.string(), createdAt: z.string() })
364
364
  ),
365
+ /** WHO YOU ARE on this account (field report 2026-08-28): the name and device the user
366
+ * sees for this session's identity. From inside a session there was no way to find out —
367
+ * `pair` with no arguments can HATCH a fresh identity, so it is not a safe probe — and an
368
+ * agent that cannot tell which agent it is cannot tell whether work addressed to
369
+ * "Reta" was addressed to it. Absent only for a token with no pairing behind it. */
370
+ you: z.object({ name: z.string(), device: z.string().nullable(), tokenId: z.string() }).optional(),
365
371
  /** User-initiated requests addressed to this agent; act on them and reply via
366
372
  * contact on the same parentId. Keeps reappearing until you call
367
373
  * set_task_state on its notificationId. */
@@ -373,7 +379,13 @@ var PendingRepliesSchema = z.object({
373
379
  createdAt: z.string(),
374
380
  /** The user seeded this request with a past conversation — call get_thread on it
375
381
  * FIRST and treat the transcript as prior context (#57/#251). */
376
- contextParentId: z.string().optional()
382
+ contextParentId: z.string().optional(),
383
+ /** STRANDED (field report 2026-08-28): this request was addressed to ANOTHER agent on
384
+ * the account — the name here — which has not been seen since it landed, so nobody
385
+ * came for it. Handed to you because you are the session that is here. Take it like
386
+ * any request (set_task_state claims it, reply with contact on its parentId), and say
387
+ * whose it was, because the user chose that agent on purpose. */
388
+ stranded: z.string().optional()
377
389
  })
378
390
  ),
379
391
  /** Callbacks you owe the user that are now DUE (you said you'd follow up when done,
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  AGENT_NAME
3
- } from "./chunk-E3OWSUGJ.js";
3
+ } from "./chunk-X42EUXML.js";
4
4
 
5
5
  // src/clients.ts
6
6
  import { execFile } from "child_process";
@@ -2756,6 +2756,12 @@ var PendingRepliesSchema = z.object({
2756
2756
  pending: z.array(
2757
2757
  z.object({ parentId: z.string(), notificationId: z.string(), createdAt: z.string() })
2758
2758
  ),
2759
+ /** WHO YOU ARE on this account (field report 2026-08-28): the name and device the user
2760
+ * sees for this session's identity. From inside a session there was no way to find out —
2761
+ * `pair` with no arguments can HATCH a fresh identity, so it is not a safe probe — and an
2762
+ * agent that cannot tell which agent it is cannot tell whether work addressed to
2763
+ * "Reta" was addressed to it. Absent only for a token with no pairing behind it. */
2764
+ you: z.object({ name: z.string(), device: z.string().nullable(), tokenId: z.string() }).optional(),
2759
2765
  /** User-initiated requests addressed to this agent; act on them and reply via
2760
2766
  * contact on the same parentId. Keeps reappearing until you call
2761
2767
  * set_task_state on its notificationId. */
@@ -2767,7 +2773,13 @@ var PendingRepliesSchema = z.object({
2767
2773
  createdAt: z.string(),
2768
2774
  /** The user seeded this request with a past conversation — call get_thread on it
2769
2775
  * FIRST and treat the transcript as prior context (#57/#251). */
2770
- contextParentId: z.string().optional()
2776
+ contextParentId: z.string().optional(),
2777
+ /** STRANDED (field report 2026-08-28): this request was addressed to ANOTHER agent on
2778
+ * the account — the name here — which has not been seen since it landed, so nobody
2779
+ * came for it. Handed to you because you are the session that is here. Take it like
2780
+ * any request (set_task_state claims it, reply with contact on its parentId), and say
2781
+ * whose it was, because the user chose that agent on purpose. */
2782
+ stranded: z.string().optional()
2771
2783
  })
2772
2784
  ),
2773
2785
  /** Callbacks you owe the user that are now DUE (you said you'd follow up when done,
package/dist/enable.js CHANGED
@@ -2,8 +2,8 @@
2
2
  import {
3
3
  PAIGY_TOOL_IDS,
4
4
  enablePaigyTools
5
- } from "./chunk-SASREQWV.js";
6
- import "./chunk-E3OWSUGJ.js";
5
+ } from "./chunk-G2WR7FCJ.js";
6
+ import "./chunk-X42EUXML.js";
7
7
 
8
8
  // src/enable.ts
9
9
  function main() {
package/dist/index.js CHANGED
@@ -2,14 +2,14 @@
2
2
  import {
3
3
  HandoffSchema,
4
4
  MISSED_CALL_PLAN
5
- } from "./chunk-JT7I3EGY.js";
5
+ } from "./chunk-45CIZLCJ.js";
6
6
  import {
7
7
  ENABLE_COMMAND,
8
8
  PAIGY_TOOL_IDS,
9
9
  autoConfigureClients,
10
10
  claudeInstallHint,
11
11
  paigyToolsAllowlisted
12
- } from "./chunk-SASREQWV.js";
12
+ } from "./chunk-G2WR7FCJ.js";
13
13
  import {
14
14
  clearSurface,
15
15
  writeSurface
@@ -51,7 +51,7 @@ import {
51
51
  startE2ee,
52
52
  submitNotification,
53
53
  whoAmI
54
- } from "./chunk-E3OWSUGJ.js";
54
+ } from "./chunk-X42EUXML.js";
55
55
 
56
56
  // src/index.ts
57
57
  import { Server } from "@modelcontextprotocol/sdk/server/index.js";
@@ -468,7 +468,7 @@ server.setRequestHandler(ListToolsRequestSchema, async () => {
468
468
  },
469
469
  {
470
470
  name: "check_replies",
471
- description: "The catch-up sweep for everything outstanding \u2014 a PURE read, takes no arguments, safe to call as often as you like: nothing here is consumed by reading it. Returns `replies` (answers to notifications you sent), your still-pending notifications, and `requests` \u2014 requests the user started toward you (each { notificationId, parentId, text }). Each keeps reappearing on every call until you actually engage with it: call set_task_state on its notificationId, which is what claims/acknowledges it \u2014 a human-initiated reply or request must never be silently dropped just because you read the list without acting. Also returns `threads` \u2014 the SAME replies + requests grouped by conversation, oldest thread first, each with a `busy` flag and its `items` in arrival order. WORK ONE THREAD AT A TIME: take the oldest thread whose `busy` is false, handle ALL of its items together in a single turn (one set_task_state), then go to the next \u2014 don't interleave threads item-by-item. A `busy` thread already has a turn in progress; leave it and let its new items ride the next turn. Use check_replies when booting up / starting a session, or when you've been waiting a long time on something else. To wait on an answer to a contact call you just made, use await_reply instead. Also returns owedCallbacks: callbacks now due that you promised \u2014 fulfill each with contact on its parentId. EVERY Paigy reply \u2014 this one, await_reply's, and contact's \u2014 may carry `also`: work assigned to you that no wake could reach, handed to you because you happened to be here. It is NOT what you asked about and it is never urgent: FINISH what you came for first, then take it up. Each entry has a `noteId` and the owner's own words; report on its `parentId` thread when it has one, and call set_task_state on that thread as you would for any assigned work. Ignoring it costs nothing \u2014 it rides your next reply too. Also returns `stalled`: work (either direction) you reported in_progress via set_task_state a while ago and never reported completed \u2014 likely left half-done by this session or a prior one that crashed or went idle. For each, either continue the work and report a real state, or investigate why it stalled. Replies may carry `intents`/`transcript`/`covered` (call-mapped answers) \u2014 handle intents exactly as await_reply's description says (defer \u2192 schedule_callback now; delegate \u2192 decide and say so; channel \u2192 honor next contact), and treat a `covered` list missing one of your declared points as that part still unanswered.",
471
+ description: "The catch-up sweep for everything outstanding \u2014 a PURE read, takes no arguments, safe to call as often as you like: nothing here is consumed by reading it. Returns `replies` (answers to notifications you sent), your still-pending notifications, and `requests` \u2014 requests the user started toward you (each { notificationId, parentId, text }). Each keeps reappearing on every call until you actually engage with it: call set_task_state on its notificationId, which is what claims/acknowledges it \u2014 a human-initiated reply or request must never be silently dropped just because you read the list without acting. Also returns `threads` \u2014 the SAME replies + requests grouped by conversation, oldest thread first, each with a `busy` flag and its `items` in arrival order. WORK ONE THREAD AT A TIME: take the oldest thread whose `busy` is false, handle ALL of its items together in a single turn (one set_task_state), then go to the next \u2014 don't interleave threads item-by-item. A `busy` thread already has a turn in progress; leave it and let its new items ride the next turn. Use check_replies when booting up / starting a session, or when you've been waiting a long time on something else. To wait on an answer to a contact call you just made, use await_reply instead. Also returns owedCallbacks: callbacks now due that you promised \u2014 fulfill each with contact on its parentId. EVERY Paigy reply \u2014 this one, await_reply's, and contact's \u2014 may carry `also`: work assigned to you that no wake could reach, handed to you because you happened to be here. It is NOT what you asked about and it is never urgent: FINISH what you came for first, then take it up. Each entry has a `noteId` and the owner's own words; report on its `parentId` thread when it has one, and call set_task_state on that thread as you would for any assigned work. Ignoring it costs nothing \u2014 it rides your next reply too. Also returns `stalled`: work (either direction) you reported in_progress via set_task_state a while ago and never reported completed \u2014 likely left half-done by this session or a prior one that crashed or went idle. For each, either continue the work and report a real state, or investigate why it stalled. Also returns `you` \u2014 WHICH IDENTITY you are speaking as ({ name, device, tokenId }), the same name and device the user sees on their Agents screen. This is the only safe way to find out (calling `pair` can MINT a new identity instead of telling you about the current one). Use it when the user asks who you are, and to tell whether work addressed to a name is addressed to you. A request may also carry `stranded`: it was addressed to ANOTHER agent on this account (that name) which has not been seen since it landed, so nobody came for it and it is handed to you because you are the session that is here. Take it exactly like your own \u2014 set_task_state claims it, reply with contact on its parentId \u2014 and say whose it was, because the user picked that agent on purpose. Replies may carry `intents`/`transcript`/`covered` (call-mapped answers) \u2014 handle intents exactly as await_reply's description says (defer \u2192 schedule_callback now; delegate \u2192 decide and say so; channel \u2192 honor next contact), and treat a `covered` list missing one of your declared points as that part still unanswered.",
472
472
  inputSchema: json(z.object({}))
473
473
  },
474
474
  {
package/dist/listen.js CHANGED
@@ -2,11 +2,11 @@
2
2
  import {
3
3
  WAKE_EVENT,
4
4
  wakeChannel
5
- } from "./chunk-JT7I3EGY.js";
5
+ } from "./chunk-45CIZLCJ.js";
6
6
  import {
7
7
  checkReplies,
8
8
  registerDelivery
9
- } from "./chunk-E3OWSUGJ.js";
9
+ } from "./chunk-X42EUXML.js";
10
10
 
11
11
  // src/listen.ts
12
12
  import { createClient } from "@supabase/supabase-js";
package/dist/onboard.js CHANGED
@@ -3,7 +3,7 @@ import {
3
3
  autoConfigureClients,
4
4
  claudeInstallHint,
5
5
  openBrowser
6
- } from "./chunk-SASREQWV.js";
6
+ } from "./chunk-G2WR7FCJ.js";
7
7
  import {
8
8
  AGENT_NAME,
9
9
  TOKEN_PATH,
@@ -17,7 +17,7 @@ import {
17
17
  setIdentity,
18
18
  sleep,
19
19
  whoAmI
20
- } from "./chunk-E3OWSUGJ.js";
20
+ } from "./chunk-X42EUXML.js";
21
21
 
22
22
  // src/onboard.ts
23
23
  async function main() {
@@ -6,7 +6,7 @@ import {
6
6
  BACKEND_URL,
7
7
  reach,
8
8
  readToken
9
- } from "./chunk-E3OWSUGJ.js";
9
+ } from "./chunk-X42EUXML.js";
10
10
 
11
11
  // src/statusline.ts
12
12
  import { mkdirSync, readFileSync, realpathSync, writeFileSync } from "fs";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@paigy/mcp",
3
- "version": "0.33.0",
3
+ "version": "0.34.0",
4
4
  "description": "Paigy MCP server — the AI agent harness that calls you. Lets an agent notify a user and await their reply.",
5
5
  "license": "MIT",
6
6
  "type": "module",