@sjawhar/pi-envoy 10.16.1 → 10.17.1

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/dist/dispatch.js CHANGED
@@ -14000,7 +14000,7 @@ function imagesArgument(z2, owner, cap) {
14000
14000
  }
14001
14001
  var ASK_URGENCIES = ["low", "med", "high", "blocking"];
14002
14002
  var ASK_QUESTION_MAX = 800;
14003
- var DISPATCH_BODY_MAX = 2000;
14003
+ var DISPATCH_BODY_MAX = 32000;
14004
14004
  var SEARCH_QUERY_MAX = 1000;
14005
14005
  var SEARCH_QUERY_HINT = "search with a short phrase of a few words, not a passage";
14006
14006
  var SEARCH_KIND_DEPTH = 100;
@@ -14058,7 +14058,7 @@ var dispatchToolSpecs = [
14058
14058
  arguments: (z2) => ({
14059
14059
  issue: z2.string().describe(ISSUE_REFERENCE),
14060
14060
  status: z2.enum(ISSUE_STATUSES).describe("New lifecycle status.").optional(),
14061
- reason: z2.string({ max: 2000 }).describe("Required with status done, and only with it: why the issue is closing, at most 2,000 characters. Posted on the issue as a message before it closes.").optional(),
14061
+ reason: z2.string({ max: DISPATCH_BODY_MAX }).describe(`Required with status done, and only with it: why the issue is closing, at most ${DISPATCH_BODY_MAX} characters. Posted on the issue as a message before it closes.`).optional(),
14062
14062
  title: z2.string({ min: 1, max: ISSUE_TITLE_MAX }).describe("Replacement title, at most 1,000 characters.").optional(),
14063
14063
  labels: z2.array(z2.string({ min: 1, max: 40 }), { max: 20 }).describe("Replacement label set, at most 20 labels of up to 40 characters; replaces every existing label.").optional(),
14064
14064
  priority: z2.number({ int: true, min: 0, max: 3 }).nullable().optional().describe("Coarse priority: 0 is P0 (highest) through 3 is P3 (lowest); null clears it."),
@@ -14198,7 +14198,7 @@ var dispatchToolSpecs = [
14198
14198
  {
14199
14199
  name: "dispatch_comment",
14200
14200
  example: { issue: "DSP-1", body: "Looks good." },
14201
- description: "Add review feedback to an issue or project document quote, or reply to a question asked with dispatch ask. " + "Do not use it for an exact replacement; use " + `dispatch suggest instead. A quote anchor is pinned to its block. Body is at most 2,000 characters, the lines images appends included. ${OWNER_REFERENCE}`,
14201
+ description: "Add review feedback to an issue or project document quote, or reply to a question asked with dispatch ask. " + "Do not use it for an exact replacement; use " + `dispatch suggest instead. A quote anchor is pinned to its block. Body is at most ${DISPATCH_BODY_MAX} characters, the lines images appends included. ${OWNER_REFERENCE}`,
14202
14202
  arguments: (z2) => ({
14203
14203
  issue: z2.string().describe(ISSUE_REFERENCE).optional(),
14204
14204
  project: z2.string().describe("Project key owning the document.").optional(),
@@ -14206,11 +14206,11 @@ var dispatchToolSpecs = [
14206
14206
  ref: z2.string().describe("Optional dispatch:// issue or document reference.").optional(),
14207
14207
  quote: z2.string().describe("Optional exact quoted document text.").optional(),
14208
14208
  occurrence: z2.number({ int: true, min: 0 }).describe("Optional zero-based occurrence of quote.").optional(),
14209
- body: z2.string({ max: DISPATCH_BODY_MAX }).describe("Review comment, at most 2,000 characters."),
14209
+ body: z2.string({ max: DISPATCH_BODY_MAX }).describe(`Review comment, at most ${DISPATCH_BODY_MAX} characters.`),
14210
14210
  reply_to: z2.string().describe("A comment id (uuid); replying to any comment in a thread continues that thread (an " + "ask's clarification thread included). To reply to an ask, use reply_to_ask with the " + "ask id instead.").optional(),
14211
14211
  reply_to_ask: z2.string().describe("Optional ask id to reply to, threading this comment under that question. Mutually " + "exclusive with reply_to.").optional(),
14212
14212
  turn: z2.enum(["agent", "human"]).describe("Only with reply_to_ask: who holds the turn after this reply. agent: a progress note - " + "you keep the turn and the ask stays 'Waiting on agents' for the human; human (default): " + "you need the human to act - the ask returns to 'Waiting on you'.").optional(),
14213
- images: imagesArgument(z2, "the issue (or the project document's project)", "the 2,000-character body limit")
14213
+ images: imagesArgument(z2, "the issue (or the project document's project)", `the ${DISPATCH_BODY_MAX}-character body limit`)
14214
14214
  }),
14215
14215
  validation: commentValidation
14216
14216
  },
@@ -14222,7 +14222,7 @@ var dispatchToolSpecs = [
14222
14222
  quote: "old wording",
14223
14223
  replace_with: "new wording"
14224
14224
  },
14225
- description: "Propose an exact replacement for quoted document text. Do not use it for general feedback; use " + `dispatch comment instead. Optional explanation is at most 2,000 characters. ${OWNER_REFERENCE}`,
14225
+ description: "Propose an exact replacement for quoted document text. Do not use it for general feedback; use " + `dispatch comment instead. Optional explanation is at most ${DISPATCH_BODY_MAX} characters. ${OWNER_REFERENCE}`,
14226
14226
  arguments: (z2) => ({
14227
14227
  issue: z2.string().describe(ISSUE_REFERENCE).optional(),
14228
14228
  project: z2.string().describe("Project key owning the document.").optional(),
@@ -14230,7 +14230,7 @@ var dispatchToolSpecs = [
14230
14230
  ref: z2.string().describe("Optional dispatch:// issue or document reference.").optional(),
14231
14231
  quote: z2.string().describe("Exact document text to replace."),
14232
14232
  replace_with: z2.string().describe("Replacement text; a CR LF or a lone carriage return in it is written as a line feed."),
14233
- body: z2.string({ max: 2000 }).describe("Optional rationale, at most 2,000 characters.").optional(),
14233
+ body: z2.string({ max: DISPATCH_BODY_MAX }).describe(`Optional rationale, at most ${DISPATCH_BODY_MAX} characters.`).optional(),
14234
14234
  occurrence: z2.number({ int: true, min: 0 }).describe("Optional zero-based occurrence of quote.").optional()
14235
14235
  }),
14236
14236
  validation: documentOwnerValidation(true, true)
@@ -14238,12 +14238,12 @@ var dispatchToolSpecs = [
14238
14238
  {
14239
14239
  name: "dispatch_message",
14240
14240
  example: { issue: "DSP-1", body: "Implementation started." },
14241
- description: "Post a note humans must read now: a reply to a human's message or a deliverable that landed. A to-do only a human can " + "complete is an ask (dispatch ask), so it reaches their inbox. Never progress or status updates - Dispatch is a high-signal " + "record, not a log. Not a design decision (write it as a decision block in the document) or document feedback (dispatch comment). " + "To answer a human's direct message to this session - one sent from the Agents page, which names no issue - pass that message's bare id as " + "in_reply_to and no issue; the reply lands in that conversation. Another call with the same in_reply_to and new text posts a follow-up, " + "threaded under this session's first reply; the same text again posts nothing. dispatch read --message <id> reads " + "that conversation back. Every other message names its issue. " + `Body is at most 2,000 characters, the lines images appends included. ${ISSUE_REFERENCE}`,
14241
+ description: "Post a note humans must read now: a reply to a human's message or a deliverable that landed. A to-do only a human can " + "complete is an ask (dispatch ask), so it reaches their inbox. Never progress or status updates - Dispatch is a high-signal " + "record, not a log. Not a design decision (write it as a decision block in the document) or document feedback (dispatch comment). " + "To answer a human's direct message to this session - one sent from the Agents page, which names no issue - pass that message's bare id as " + "in_reply_to and no issue; the reply lands in that conversation. Another call with the same in_reply_to and new text posts a follow-up, " + "threaded under this session's first reply; the same text again posts nothing. dispatch read --message <id> reads " + "that conversation back. Every other message names its issue. " + `Body is at most ${DISPATCH_BODY_MAX} characters, the lines images appends included. ${ISSUE_REFERENCE}`,
14242
14242
  arguments: (z2) => ({
14243
14243
  issue: z2.string().describe(`${ISSUE_REFERENCE} Omit it only when in_reply_to answers a human's direct message to this session.`).optional(),
14244
- body: z2.string({ max: DISPATCH_BODY_MAX }).describe("Update text, at most 2,000 characters."),
14244
+ body: z2.string({ max: DISPATCH_BODY_MAX }).describe(`Update text, at most ${DISPATCH_BODY_MAX} characters.`),
14245
14245
  in_reply_to: z2.string().describe("Optional message id or dispatch://KEY/message/<id> reference to reply to, threading " + "this message under it so the reply stays with the original in the Conversation. " + "A bare id with no issue answers a human's direct message to this session; a " + "dispatch://KEY/message/<id> names the issue its message lives on, so that form is a " + "reply on that issue.").optional(),
14246
- images: imagesArgument(z2, "the issue (a reply to a direct message: your own conversation, dispatch://agent/<your session id>)", "the 2,000-character body limit")
14246
+ images: imagesArgument(z2, "the issue (a reply to a direct message: your own conversation, dispatch://agent/<your session id>)", `the ${DISPATCH_BODY_MAX}-character body limit`)
14247
14247
  }),
14248
14248
  validation: messageValidation
14249
14249
  },
package/dist/envoy.js CHANGED
@@ -29987,7 +29987,7 @@ function imagesArgument(z2, owner, cap) {
29987
29987
  }
29988
29988
  var ASK_URGENCIES = ["low", "med", "high", "blocking"];
29989
29989
  var ASK_QUESTION_MAX = 800;
29990
- var DISPATCH_BODY_MAX = 2000;
29990
+ var DISPATCH_BODY_MAX = 32000;
29991
29991
  var SEARCH_QUERY_MAX = 1000;
29992
29992
  var SEARCH_QUERY_HINT = "search with a short phrase of a few words, not a passage";
29993
29993
  var SEARCH_KIND_DEPTH = 100;
@@ -30045,7 +30045,7 @@ var dispatchToolSpecs = [
30045
30045
  arguments: (z2) => ({
30046
30046
  issue: z2.string().describe(ISSUE_REFERENCE),
30047
30047
  status: z2.enum(ISSUE_STATUSES).describe("New lifecycle status.").optional(),
30048
- reason: z2.string({ max: 2000 }).describe("Required with status done, and only with it: why the issue is closing, at most 2,000 characters. Posted on the issue as a message before it closes.").optional(),
30048
+ reason: z2.string({ max: DISPATCH_BODY_MAX }).describe(`Required with status done, and only with it: why the issue is closing, at most ${DISPATCH_BODY_MAX} characters. Posted on the issue as a message before it closes.`).optional(),
30049
30049
  title: z2.string({ min: 1, max: ISSUE_TITLE_MAX }).describe("Replacement title, at most 1,000 characters.").optional(),
30050
30050
  labels: z2.array(z2.string({ min: 1, max: 40 }), { max: 20 }).describe("Replacement label set, at most 20 labels of up to 40 characters; replaces every existing label.").optional(),
30051
30051
  priority: z2.number({ int: true, min: 0, max: 3 }).nullable().optional().describe("Coarse priority: 0 is P0 (highest) through 3 is P3 (lowest); null clears it."),
@@ -30185,7 +30185,7 @@ var dispatchToolSpecs = [
30185
30185
  {
30186
30186
  name: "dispatch_comment",
30187
30187
  example: { issue: "DSP-1", body: "Looks good." },
30188
- description: "Add review feedback to an issue or project document quote, or reply to a question asked with dispatch ask. " + "Do not use it for an exact replacement; use " + `dispatch suggest instead. A quote anchor is pinned to its block. Body is at most 2,000 characters, the lines images appends included. ${OWNER_REFERENCE}`,
30188
+ description: "Add review feedback to an issue or project document quote, or reply to a question asked with dispatch ask. " + "Do not use it for an exact replacement; use " + `dispatch suggest instead. A quote anchor is pinned to its block. Body is at most ${DISPATCH_BODY_MAX} characters, the lines images appends included. ${OWNER_REFERENCE}`,
30189
30189
  arguments: (z2) => ({
30190
30190
  issue: z2.string().describe(ISSUE_REFERENCE).optional(),
30191
30191
  project: z2.string().describe("Project key owning the document.").optional(),
@@ -30193,11 +30193,11 @@ var dispatchToolSpecs = [
30193
30193
  ref: z2.string().describe("Optional dispatch:// issue or document reference.").optional(),
30194
30194
  quote: z2.string().describe("Optional exact quoted document text.").optional(),
30195
30195
  occurrence: z2.number({ int: true, min: 0 }).describe("Optional zero-based occurrence of quote.").optional(),
30196
- body: z2.string({ max: DISPATCH_BODY_MAX }).describe("Review comment, at most 2,000 characters."),
30196
+ body: z2.string({ max: DISPATCH_BODY_MAX }).describe(`Review comment, at most ${DISPATCH_BODY_MAX} characters.`),
30197
30197
  reply_to: z2.string().describe("A comment id (uuid); replying to any comment in a thread continues that thread (an " + "ask's clarification thread included). To reply to an ask, use reply_to_ask with the " + "ask id instead.").optional(),
30198
30198
  reply_to_ask: z2.string().describe("Optional ask id to reply to, threading this comment under that question. Mutually " + "exclusive with reply_to.").optional(),
30199
30199
  turn: z2.enum(["agent", "human"]).describe("Only with reply_to_ask: who holds the turn after this reply. agent: a progress note - " + "you keep the turn and the ask stays 'Waiting on agents' for the human; human (default): " + "you need the human to act - the ask returns to 'Waiting on you'.").optional(),
30200
- images: imagesArgument(z2, "the issue (or the project document's project)", "the 2,000-character body limit")
30200
+ images: imagesArgument(z2, "the issue (or the project document's project)", `the ${DISPATCH_BODY_MAX}-character body limit`)
30201
30201
  }),
30202
30202
  validation: commentValidation
30203
30203
  },
@@ -30209,7 +30209,7 @@ var dispatchToolSpecs = [
30209
30209
  quote: "old wording",
30210
30210
  replace_with: "new wording"
30211
30211
  },
30212
- description: "Propose an exact replacement for quoted document text. Do not use it for general feedback; use " + `dispatch comment instead. Optional explanation is at most 2,000 characters. ${OWNER_REFERENCE}`,
30212
+ description: "Propose an exact replacement for quoted document text. Do not use it for general feedback; use " + `dispatch comment instead. Optional explanation is at most ${DISPATCH_BODY_MAX} characters. ${OWNER_REFERENCE}`,
30213
30213
  arguments: (z2) => ({
30214
30214
  issue: z2.string().describe(ISSUE_REFERENCE).optional(),
30215
30215
  project: z2.string().describe("Project key owning the document.").optional(),
@@ -30217,7 +30217,7 @@ var dispatchToolSpecs = [
30217
30217
  ref: z2.string().describe("Optional dispatch:// issue or document reference.").optional(),
30218
30218
  quote: z2.string().describe("Exact document text to replace."),
30219
30219
  replace_with: z2.string().describe("Replacement text; a CR LF or a lone carriage return in it is written as a line feed."),
30220
- body: z2.string({ max: 2000 }).describe("Optional rationale, at most 2,000 characters.").optional(),
30220
+ body: z2.string({ max: DISPATCH_BODY_MAX }).describe(`Optional rationale, at most ${DISPATCH_BODY_MAX} characters.`).optional(),
30221
30221
  occurrence: z2.number({ int: true, min: 0 }).describe("Optional zero-based occurrence of quote.").optional()
30222
30222
  }),
30223
30223
  validation: documentOwnerValidation(true, true)
@@ -30225,12 +30225,12 @@ var dispatchToolSpecs = [
30225
30225
  {
30226
30226
  name: "dispatch_message",
30227
30227
  example: { issue: "DSP-1", body: "Implementation started." },
30228
- description: "Post a note humans must read now: a reply to a human's message or a deliverable that landed. A to-do only a human can " + "complete is an ask (dispatch ask), so it reaches their inbox. Never progress or status updates - Dispatch is a high-signal " + "record, not a log. Not a design decision (write it as a decision block in the document) or document feedback (dispatch comment). " + "To answer a human's direct message to this session - one sent from the Agents page, which names no issue - pass that message's bare id as " + "in_reply_to and no issue; the reply lands in that conversation. Another call with the same in_reply_to and new text posts a follow-up, " + "threaded under this session's first reply; the same text again posts nothing. dispatch read --message <id> reads " + "that conversation back. Every other message names its issue. " + `Body is at most 2,000 characters, the lines images appends included. ${ISSUE_REFERENCE}`,
30228
+ description: "Post a note humans must read now: a reply to a human's message or a deliverable that landed. A to-do only a human can " + "complete is an ask (dispatch ask), so it reaches their inbox. Never progress or status updates - Dispatch is a high-signal " + "record, not a log. Not a design decision (write it as a decision block in the document) or document feedback (dispatch comment). " + "To answer a human's direct message to this session - one sent from the Agents page, which names no issue - pass that message's bare id as " + "in_reply_to and no issue; the reply lands in that conversation. Another call with the same in_reply_to and new text posts a follow-up, " + "threaded under this session's first reply; the same text again posts nothing. dispatch read --message <id> reads " + "that conversation back. Every other message names its issue. " + `Body is at most ${DISPATCH_BODY_MAX} characters, the lines images appends included. ${ISSUE_REFERENCE}`,
30229
30229
  arguments: (z2) => ({
30230
30230
  issue: z2.string().describe(`${ISSUE_REFERENCE} Omit it only when in_reply_to answers a human's direct message to this session.`).optional(),
30231
- body: z2.string({ max: DISPATCH_BODY_MAX }).describe("Update text, at most 2,000 characters."),
30231
+ body: z2.string({ max: DISPATCH_BODY_MAX }).describe(`Update text, at most ${DISPATCH_BODY_MAX} characters.`),
30232
30232
  in_reply_to: z2.string().describe("Optional message id or dispatch://KEY/message/<id> reference to reply to, threading " + "this message under it so the reply stays with the original in the Conversation. " + "A bare id with no issue answers a human's direct message to this session; a " + "dispatch://KEY/message/<id> names the issue its message lives on, so that form is a " + "reply on that issue.").optional(),
30233
- images: imagesArgument(z2, "the issue (a reply to a direct message: your own conversation, dispatch://agent/<your session id>)", "the 2,000-character body limit")
30233
+ images: imagesArgument(z2, "the issue (a reply to a direct message: your own conversation, dispatch://agent/<your session id>)", `the ${DISPATCH_BODY_MAX}-character body limit`)
30234
30234
  }),
30235
30235
  validation: messageValidation
30236
30236
  },
@@ -32,7 +32,7 @@ dispatch search --query 'reviewer threads OR review comments'
32
32
  ## Design in the spec
33
33
 
34
34
  - A design conversation with a person, or the plan that follows it, uses `skill://dispatch-brainstorming`. Read it before your first design question, the spec, or the plan. It replaces superpowers' `brainstorming` and `writing-plans` here, also when the user names one of them.
35
- - Before a spec's first version and each approval request, get a fresh read-only subagent to check it. On Oh My Pi, use `task(agent="scout")`. Elsewhere, use the host's read-only agent. It checks the spec against the code, the human's words and the command output that its claims rest on. Resolve what it flags.
35
+ - Before a spec's first version and each approval request, get a fresh read-only subagent to check it. On Oh My Pi, use `task(agent="scout")`. Elsewhere, use the host's read-only agent. It checks the spec against the code, the human's words and the command output that its claims rest on. Scout has no shell: save that Dispatch, gh and git output to files first and give it their paths. Resolve what it flags.
36
36
  - A Legion architect's own issue spec follows `skill://legion-architect`. Its fresh reader in that Legion session is the Legion plugin's `plan-gap-analyst` agent.
37
37
 
38
38
  ## Load the full skill before you write
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sjawhar/pi-envoy",
3
- "version": "10.16.1",
3
+ "version": "10.17.1",
4
4
  "license": "Apache-2.0",
5
5
  "type": "module",
6
6
  "omp": {