@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 +10 -10
- package/dist/envoy.js +10 -10
- package/dist/skills/dispatch-first/SKILL.md +1 -1
- package/package.json +1 -1
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 =
|
|
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:
|
|
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
|
|
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(
|
|
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)",
|
|
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
|
|
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:
|
|
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
|
|
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(
|
|
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>)",
|
|
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 =
|
|
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:
|
|
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
|
|
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(
|
|
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)",
|
|
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
|
|
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:
|
|
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
|
|
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(
|
|
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>)",
|
|
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
|