@paigy/mcp 0.40.34 → 0.40.36

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.
@@ -3220,58 +3220,6 @@ var NoteSchema = z12.object({
3220
3220
  lastRideAt: z12.string().nullable().default(null),
3221
3221
  createdAt: z12.string()
3222
3222
  });
3223
- var TriageItemSchema = z12.object({
3224
- noteId: z12.string(),
3225
- /** The note's headline at run time. */
3226
- title: z12.string(),
3227
- /** WHY, in one short human line, evidence first — this is read on a phone underneath
3228
- * the note's title: "no movement in 34 days", "worked 3 notes in this repo this week".
3229
- * Never a model's reasoning transcript, never an id. */
3230
- why: z12.string()
3231
- });
3232
- var TriageAssignmentSchema = z12.object({
3233
- /** The agent's token id — what `dispatchNote` resolves and what a request is addressed to. */
3234
- agent: z12.string(),
3235
- /** Its display name at run time (the name on the hatchling's card). Denormalized for the
3236
- * same reason as `title`: the card must render from the proposal alone. */
3237
- agentName: z12.string(),
3238
- notes: z12.array(TriageItemSchema)
3239
- });
3240
- var TriageStatusSchema = z12.enum(["open", "superseded", "dismissed"]);
3241
- var SubmitTriageSchema = z12.object({
3242
- /** Which runtime judged: "ollama" (inference never left the machine) or a harness the
3243
- * user already runs under their own credentials ("claude" / "codex" / "agy"). Recorded
3244
- * so the phone can say where the content went — an unattributed privacy claim is worth
3245
- * nothing, and #1106's promise is precisely "Paigy's servers never see this". */
3246
- provider: z12.string().min(1).max(60),
3247
- /** The concrete model when the provider names one (an ollama tag); null otherwise. */
3248
- model: z12.string().max(200).nullable().optional(),
3249
- /** How many open notes the run actually looked at — the denominator on the phone
3250
- * ("6 of 50"), and the honest answer to "did it read the whole queue?". */
3251
- reviewed: z12.number().int().min(0).max(1e4).default(0),
3252
- close: z12.array(TriageItemSchema).max(200).default([]),
3253
- stale: z12.array(TriageItemSchema).max(200).default([]),
3254
- assign: z12.array(TriageAssignmentSchema).max(50).default([])
3255
- });
3256
- var TriageProposalSchema = SubmitTriageSchema.extend({
3257
- id: z12.string(),
3258
- runAt: z12.string(),
3259
- status: TriageStatusSchema,
3260
- model: z12.string().nullable().default(null)
3261
- });
3262
- var AcceptTriageSchema = z12.discriminatedUnion("group", [
3263
- z12.object({ group: z12.literal("close"), noteIds: z12.array(z12.string()).max(200).optional() }),
3264
- z12.object({ group: z12.literal("stale"), noteIds: z12.array(z12.string()).max(200).optional() }),
3265
- z12.object({
3266
- group: z12.literal("assign"),
3267
- agent: z12.string().min(1),
3268
- noteIds: z12.array(z12.string()).max(200).optional()
3269
- })
3270
- ]);
3271
- var AcceptTriageResultSchema = z12.object({
3272
- accepted: z12.array(z12.string()),
3273
- failed: z12.array(z12.object({ noteId: z12.string(), reason: z12.string() }))
3274
- });
3275
3223
  var DeliveryModeSchema = z12.enum(["poll", "self_hosted"]);
3276
3224
  var WAKE_EVENT = "wake";
3277
3225
  var wakeChannel = (tokenId) => `wake:${tokenId}`;
@@ -3834,39 +3782,6 @@ async function listConnections(opts = {}) {
3834
3782
  if (!res.ok) throw new Error(`list_connections failed: ${res.status} ${await res.text()}`);
3835
3783
  return await res.json();
3836
3784
  }
3837
- async function submitTriage(run, opts = {}) {
3838
- const res = await ensureAuthed(await reach(`${BACKEND_URL}/api/triage`, {
3839
- method: "POST",
3840
- headers: { "content-type": "application/json", authorization: `Bearer ${authToken(opts.token)}` },
3841
- body: JSON.stringify(run)
3842
- }));
3843
- if (!res.ok) throw new Error(`submit_triage failed: ${res.status} ${await res.text()}`);
3844
- return await res.json();
3845
- }
3846
- async function getTriage(opts = {}) {
3847
- const res = await ensureAuthed(await reach(`${BACKEND_URL}/api/triage`, {
3848
- headers: { authorization: `Bearer ${authToken(opts.token)}` }
3849
- }));
3850
- if (!res.ok) throw new Error(`get_triage failed: ${res.status} ${await res.text()}`);
3851
- return await res.json();
3852
- }
3853
- async function acceptTriage(proposalId, body, opts = {}) {
3854
- const res = await ensureAuthed(await reach(`${BACKEND_URL}/api/triage/${encodeURIComponent(proposalId)}/accept`, {
3855
- method: "POST",
3856
- headers: { "content-type": "application/json", authorization: `Bearer ${authToken(opts.token)}` },
3857
- body: JSON.stringify(body)
3858
- }));
3859
- if (!res.ok) throw new Error(`accept_triage failed: ${res.status} ${await res.text()}`);
3860
- return await res.json();
3861
- }
3862
- async function dismissTriage(proposalId, opts = {}) {
3863
- const res = await ensureAuthed(await reach(`${BACKEND_URL}/api/triage/${encodeURIComponent(proposalId)}/dismiss`, {
3864
- method: "POST",
3865
- headers: { authorization: `Bearer ${authToken(opts.token)}` }
3866
- }));
3867
- if (!res.ok) throw new Error(`dismiss_triage failed: ${res.status} ${await res.text()}`);
3868
- return await res.json();
3869
- }
3870
3785
  async function searchRecords(input, opts = {}) {
3871
3786
  const res = await ensureAuthed(await (opts.reach ?? reach)(`${BACKEND_URL}/api/records/search`, {
3872
3787
  method: "POST",
@@ -4084,6 +3999,7 @@ function conversation(e) {
4084
3999
  from: who(entry.authorParticipant),
4085
4000
  at: at(entry.createdAt),
4086
4001
  said: sealed ? "[encrypted]" : entryWords(entry).trim(),
4002
+ caveat: entry.callOngoing ? "Call ongoing; what the person decides may change." : void 0,
4087
4003
  units: askUnits(entry, e.entries ?? []).map((u) => `${u.title}: ${u.body}`),
4088
4004
  re: re ? handle(re) : void 0,
4089
4005
  options,
@@ -4621,10 +4537,6 @@ export {
4621
4537
  registerDelivery,
4622
4538
  listNotes,
4623
4539
  listConnections,
4624
- submitTriage,
4625
- getTriage,
4626
- acceptTriage,
4627
- dismissTriage,
4628
4540
  searchRecords,
4629
4541
  checkActivity,
4630
4542
  readDelivery,
@@ -4,12 +4,12 @@ import {
4
4
  serverInstructions,
5
5
  sessionStartHook,
6
6
  withSessionStartHook
7
- } from "./chunk-YIMNBJEF.js";
7
+ } from "./chunk-R3QKEB2X.js";
8
8
  import {
9
9
  CODEX_ENV,
10
10
  agentName,
11
11
  withCodexEnv
12
- } from "./chunk-5YTQF6KQ.js";
12
+ } from "./chunk-EDC5PD65.js";
13
13
 
14
14
  // src/toolset.ts
15
15
  var CONFIGURE_DESCRIPTION = "Set this agent up with Paigy \u2014 call it FIRST, before contact, and any time you're unsure who you are. One call does whatever the situation needs: NOT SET UP \u2192 if this machine holds a device credential (the user ran the Paigy desktop app or harness) it hatches an identity INSTANTLY, no code and no approval; otherwise it starts the code ceremony. ALREADY SET UP \u2192 returns your current identity and the two things left to decide, renaming it or logging out. TOKEN NO LONGER VALID \u2192 says so, then re-pairs. Pass { name, voice } to choose who you are when hatching, or to RENAME yourself when already set up (pick your own; voices: rachel, george, jessica, brian, lily). Safe to call any time: idempotent, and it never writes settings \u2014 the tool-allowlist state it reports is read-only.\n\nTHE CODE CEREMONY does not open a browser; the user enters the code in the Paigy app (or scans `qr`). A result with { user_code, device_code, qr, user_message } has already started polling for approval in the background: you MUST immediately print the `user_message` (the bare code) to the user, AND in that same turn call configure again with that `device_code` to collect the result. It returns the moment the user approves; on { status:'pending' } call again to keep waiting; on { status:'awaiting_confirmation' } (E2EE) show the bare `user_message` verify code and call again to finish. The leading text block of every result states the code plainly, so it shows even if you emit no prose.\n\nOn { status:'paired' }, or whenever it returns `enable_command`, ALWAYS follow the `enable_prompt`: PRINT that command for the user to run, so Paigy's tools stop prompting each time. You cannot apply it yourself (it writes your own permission allowlist, which hosts block as privilege escalation), so print it, don't wait for it, and carry on.\n\nLOG OUT with { logOut: true }: it logs out THIS agent only \u2014 its token is revoked server-side and its local entry removed. Other agents and this device's credential are untouched, and a later configure re-hatches instantly while the device credential exists. Disconnecting the device itself is not an agent tool.";
@@ -1707,58 +1707,6 @@ var NoteSchema = z12.object({
1707
1707
  lastRideAt: z12.string().nullable().default(null),
1708
1708
  createdAt: z12.string()
1709
1709
  });
1710
- var TriageItemSchema = z12.object({
1711
- noteId: z12.string(),
1712
- /** The note's headline at run time. */
1713
- title: z12.string(),
1714
- /** WHY, in one short human line, evidence first — this is read on a phone underneath
1715
- * the note's title: "no movement in 34 days", "worked 3 notes in this repo this week".
1716
- * Never a model's reasoning transcript, never an id. */
1717
- why: z12.string()
1718
- });
1719
- var TriageAssignmentSchema = z12.object({
1720
- /** The agent's token id — what `dispatchNote` resolves and what a request is addressed to. */
1721
- agent: z12.string(),
1722
- /** Its display name at run time (the name on the hatchling's card). Denormalized for the
1723
- * same reason as `title`: the card must render from the proposal alone. */
1724
- agentName: z12.string(),
1725
- notes: z12.array(TriageItemSchema)
1726
- });
1727
- var TriageStatusSchema = z12.enum(["open", "superseded", "dismissed"]);
1728
- var SubmitTriageSchema = z12.object({
1729
- /** Which runtime judged: "ollama" (inference never left the machine) or a harness the
1730
- * user already runs under their own credentials ("claude" / "codex" / "agy"). Recorded
1731
- * so the phone can say where the content went — an unattributed privacy claim is worth
1732
- * nothing, and #1106's promise is precisely "Paigy's servers never see this". */
1733
- provider: z12.string().min(1).max(60),
1734
- /** The concrete model when the provider names one (an ollama tag); null otherwise. */
1735
- model: z12.string().max(200).nullable().optional(),
1736
- /** How many open notes the run actually looked at — the denominator on the phone
1737
- * ("6 of 50"), and the honest answer to "did it read the whole queue?". */
1738
- reviewed: z12.number().int().min(0).max(1e4).default(0),
1739
- close: z12.array(TriageItemSchema).max(200).default([]),
1740
- stale: z12.array(TriageItemSchema).max(200).default([]),
1741
- assign: z12.array(TriageAssignmentSchema).max(50).default([])
1742
- });
1743
- var TriageProposalSchema = SubmitTriageSchema.extend({
1744
- id: z12.string(),
1745
- runAt: z12.string(),
1746
- status: TriageStatusSchema,
1747
- model: z12.string().nullable().default(null)
1748
- });
1749
- var AcceptTriageSchema = z12.discriminatedUnion("group", [
1750
- z12.object({ group: z12.literal("close"), noteIds: z12.array(z12.string()).max(200).optional() }),
1751
- z12.object({ group: z12.literal("stale"), noteIds: z12.array(z12.string()).max(200).optional() }),
1752
- z12.object({
1753
- group: z12.literal("assign"),
1754
- agent: z12.string().min(1),
1755
- noteIds: z12.array(z12.string()).max(200).optional()
1756
- })
1757
- ]);
1758
- var AcceptTriageResultSchema = z12.object({
1759
- accepted: z12.array(z12.string()),
1760
- failed: z12.array(z12.object({ noteId: z12.string(), reason: z12.string() }))
1761
- });
1762
1710
  var DeliveryModeSchema = z12.enum(["poll", "self_hosted"]);
1763
1711
  var RegisterDeliverySchema = z12.object({ mode: DeliveryModeSchema });
1764
1712
  var OAuthStartSchema = z12.object({
@@ -6,7 +6,7 @@ import {
6
6
  saveToken,
7
7
  setIdentity,
8
8
  sleep
9
- } from "./chunk-5YTQF6KQ.js";
9
+ } from "./chunk-EDC5PD65.js";
10
10
 
11
11
  // src/identity.ts
12
12
  var CLIENT_LABELS = {
@@ -13,7 +13,6 @@ import {
13
13
  RevokedError,
14
14
  TOKEN_PATH,
15
15
  UnpairedError,
16
- acceptTriage,
17
16
  acknowledge,
18
17
  agentName,
19
18
  authToken,
@@ -23,10 +22,8 @@ import {
23
22
  contact,
24
23
  currentRepo,
25
24
  deleteToken,
26
- dismissTriage,
27
25
  finishSessionEnd,
28
26
  getGoals,
29
- getTriage,
30
27
  hatch,
31
28
  heartbeat,
32
29
  isNetworkError,
@@ -61,12 +58,11 @@ import {
61
58
  sleep,
62
59
  slotIdentity,
63
60
  slotName,
64
- submitTriage,
65
61
  subscribeWake,
66
62
  updateSlot,
67
63
  whoAmI,
68
64
  withCodexEnv
69
- } from "./chunk-5YTQF6KQ.js";
65
+ } from "./chunk-EDC5PD65.js";
70
66
  export {
71
67
  AGENT_TOOLS,
72
68
  AGENT_TOOL_NAMES,
@@ -82,7 +78,6 @@ export {
82
78
  RevokedError,
83
79
  TOKEN_PATH,
84
80
  UnpairedError,
85
- acceptTriage,
86
81
  acknowledge,
87
82
  agentName,
88
83
  authToken,
@@ -92,10 +87,8 @@ export {
92
87
  contact,
93
88
  currentRepo,
94
89
  deleteToken,
95
- dismissTriage,
96
90
  finishSessionEnd,
97
91
  getGoals,
98
- getTriage,
99
92
  hatch,
100
93
  heartbeat,
101
94
  isNetworkError,
@@ -130,7 +123,6 @@ export {
130
123
  sleep,
131
124
  slotIdentity,
132
125
  slotName,
133
- submitTriage,
134
126
  subscribeWake,
135
127
  updateSlot,
136
128
  whoAmI,
package/dist/enable.js CHANGED
@@ -3,9 +3,9 @@ import {
3
3
  PAIGY_TOOL_IDS,
4
4
  enablePaigyTools,
5
5
  installSessionListening
6
- } from "./chunk-VVQ4OQOB.js";
7
- import "./chunk-YIMNBJEF.js";
8
- import "./chunk-5YTQF6KQ.js";
6
+ } from "./chunk-LO27ONPJ.js";
7
+ import "./chunk-R3QKEB2X.js";
8
+ import "./chunk-EDC5PD65.js";
9
9
 
10
10
  // src/enable.ts
11
11
  function main() {
package/dist/index.js CHANGED
@@ -9,7 +9,7 @@ import {
9
9
  resolvePairing,
10
10
  startPairing,
11
11
  suggestedAgentName
12
- } from "./chunk-7ZM5RGW4.js";
12
+ } from "./chunk-XTMBFUIL.js";
13
13
  import {
14
14
  ConfigureSchema,
15
15
  ENABLE_COMMAND,
@@ -17,14 +17,14 @@ import {
17
17
  SERVER_INSTRUCTIONS,
18
18
  TOOLS,
19
19
  paigyToolsAllowlisted
20
- } from "./chunk-VVQ4OQOB.js";
20
+ } from "./chunk-LO27ONPJ.js";
21
21
  import {
22
22
  decideListen,
23
23
  existingListener,
24
24
  harnessDriven,
25
25
  listenerKey,
26
26
  wakeStatusPath
27
- } from "./chunk-YIMNBJEF.js";
27
+ } from "./chunk-R3QKEB2X.js";
28
28
  import {
29
29
  clearSurface,
30
30
  writeSurface
@@ -45,7 +45,7 @@ import {
45
45
  setClient,
46
46
  slotName,
47
47
  whoAmI
48
- } from "./chunk-5YTQF6KQ.js";
48
+ } from "./chunk-EDC5PD65.js";
49
49
 
50
50
  // src/index.ts
51
51
  import { Server } from "@modelcontextprotocol/sdk/server/index.js";
package/dist/listen.js CHANGED
@@ -11,7 +11,7 @@ import {
11
11
  removeListenMark,
12
12
  wakeStatusPath,
13
13
  writeListenMark
14
- } from "./chunk-YIMNBJEF.js";
14
+ } from "./chunk-R3QKEB2X.js";
15
15
  import {
16
16
  agentName,
17
17
  getGoals,
@@ -20,7 +20,7 @@ import {
20
20
  receive,
21
21
  slotName,
22
22
  subscribeWake
23
- } from "./chunk-5YTQF6KQ.js";
23
+ } from "./chunk-EDC5PD65.js";
24
24
 
25
25
  // src/listen.ts
26
26
  import { createHash } from "crypto";
package/dist/onboard.js CHANGED
@@ -3,13 +3,13 @@ import {
3
3
  resolvePairing,
4
4
  startPairing,
5
5
  suggestedAgentName
6
- } from "./chunk-7ZM5RGW4.js";
6
+ } from "./chunk-XTMBFUIL.js";
7
7
  import {
8
8
  autoConfigureClients,
9
9
  claudeInstallHint,
10
10
  openBrowser
11
- } from "./chunk-VVQ4OQOB.js";
12
- import "./chunk-YIMNBJEF.js";
11
+ } from "./chunk-LO27ONPJ.js";
12
+ import "./chunk-R3QKEB2X.js";
13
13
  import {
14
14
  TOKEN_PATH,
15
15
  agentName,
@@ -20,7 +20,7 @@ import {
20
20
  saveToken,
21
21
  setIdentity,
22
22
  whoAmI
23
- } from "./chunk-5YTQF6KQ.js";
23
+ } from "./chunk-EDC5PD65.js";
24
24
 
25
25
  // src/onboard.ts
26
26
  function reportRegistered() {
package/dist/slot.js CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  agentName
4
- } from "./chunk-5YTQF6KQ.js";
4
+ } from "./chunk-EDC5PD65.js";
5
5
 
6
6
  // src/slot.ts
7
7
  process.stdout.write(agentName());
package/dist/stalled.js CHANGED
@@ -29,7 +29,7 @@ async function main() {
29
29
  const dir = join(homedir(), ".paigy", "stalled-reminded");
30
30
  const mark = join(dir, `${session || "session"}-${day}`);
31
31
  if (existsSync(mark)) return;
32
- const { receive } = await import("./dist-HRRH3KO4.js");
32
+ const { receive } = await import("./dist-MKJUX54U.js");
33
33
  const reply = stopReply((await receive()).stalled ?? [], input.hook_event_name ?? "Stop");
34
34
  if (!reply) return;
35
35
  mkdirSync(dir, { recursive: true });
@@ -7,7 +7,7 @@ import {
7
7
  readToken,
8
8
  sessionSlot,
9
9
  slotName
10
- } from "./chunk-5YTQF6KQ.js";
10
+ } from "./chunk-EDC5PD65.js";
11
11
 
12
12
  // src/statusline.ts
13
13
  import { realpathSync } from "fs";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@paigy/mcp",
3
- "version": "0.40.34",
3
+ "version": "0.40.36",
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",