@sjawhar/opencode-legion-envoy 8.19.1 → 8.20.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.
- package/dist/dispatch.js +10 -10
- package/dist/src/server.js +10 -10
- package/package.json +1 -1
- package/skills/legion-controller/SKILL.md +2 -2
- package/skills/legion-retro/SKILL.md +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/src/server.js
CHANGED
|
@@ -13857,7 +13857,7 @@ function imagesArgument(z2, owner, cap) {
|
|
|
13857
13857
|
}
|
|
13858
13858
|
var ASK_URGENCIES = ["low", "med", "high", "blocking"];
|
|
13859
13859
|
var ASK_QUESTION_MAX = 800;
|
|
13860
|
-
var DISPATCH_BODY_MAX =
|
|
13860
|
+
var DISPATCH_BODY_MAX = 32000;
|
|
13861
13861
|
var SEARCH_QUERY_MAX = 1000;
|
|
13862
13862
|
var SEARCH_QUERY_HINT = "search with a short phrase of a few words, not a passage";
|
|
13863
13863
|
var SEARCH_KIND_DEPTH = 100;
|
|
@@ -13915,7 +13915,7 @@ var dispatchToolSpecs = [
|
|
|
13915
13915
|
arguments: (z2) => ({
|
|
13916
13916
|
issue: z2.string().describe(ISSUE_REFERENCE),
|
|
13917
13917
|
status: z2.enum(ISSUE_STATUSES).describe("New lifecycle status.").optional(),
|
|
13918
|
-
reason: z2.string({ max:
|
|
13918
|
+
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(),
|
|
13919
13919
|
title: z2.string({ min: 1, max: ISSUE_TITLE_MAX }).describe("Replacement title, at most 1,000 characters.").optional(),
|
|
13920
13920
|
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(),
|
|
13921
13921
|
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."),
|
|
@@ -14055,7 +14055,7 @@ var dispatchToolSpecs = [
|
|
|
14055
14055
|
{
|
|
14056
14056
|
name: "dispatch_comment",
|
|
14057
14057
|
example: { issue: "DSP-1", body: "Looks good." },
|
|
14058
|
-
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
|
|
14058
|
+
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}`,
|
|
14059
14059
|
arguments: (z2) => ({
|
|
14060
14060
|
issue: z2.string().describe(ISSUE_REFERENCE).optional(),
|
|
14061
14061
|
project: z2.string().describe("Project key owning the document.").optional(),
|
|
@@ -14063,11 +14063,11 @@ var dispatchToolSpecs = [
|
|
|
14063
14063
|
ref: z2.string().describe("Optional dispatch:// issue or document reference.").optional(),
|
|
14064
14064
|
quote: z2.string().describe("Optional exact quoted document text.").optional(),
|
|
14065
14065
|
occurrence: z2.number({ int: true, min: 0 }).describe("Optional zero-based occurrence of quote.").optional(),
|
|
14066
|
-
body: z2.string({ max: DISPATCH_BODY_MAX }).describe(
|
|
14066
|
+
body: z2.string({ max: DISPATCH_BODY_MAX }).describe(`Review comment, at most ${DISPATCH_BODY_MAX} characters.`),
|
|
14067
14067
|
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(),
|
|
14068
14068
|
reply_to_ask: z2.string().describe("Optional ask id to reply to, threading this comment under that question. Mutually " + "exclusive with reply_to.").optional(),
|
|
14069
14069
|
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(),
|
|
14070
|
-
images: imagesArgument(z2, "the issue (or the project document's project)",
|
|
14070
|
+
images: imagesArgument(z2, "the issue (or the project document's project)", `the ${DISPATCH_BODY_MAX}-character body limit`)
|
|
14071
14071
|
}),
|
|
14072
14072
|
validation: commentValidation
|
|
14073
14073
|
},
|
|
@@ -14079,7 +14079,7 @@ var dispatchToolSpecs = [
|
|
|
14079
14079
|
quote: "old wording",
|
|
14080
14080
|
replace_with: "new wording"
|
|
14081
14081
|
},
|
|
14082
|
-
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
|
|
14082
|
+
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}`,
|
|
14083
14083
|
arguments: (z2) => ({
|
|
14084
14084
|
issue: z2.string().describe(ISSUE_REFERENCE).optional(),
|
|
14085
14085
|
project: z2.string().describe("Project key owning the document.").optional(),
|
|
@@ -14087,7 +14087,7 @@ var dispatchToolSpecs = [
|
|
|
14087
14087
|
ref: z2.string().describe("Optional dispatch:// issue or document reference.").optional(),
|
|
14088
14088
|
quote: z2.string().describe("Exact document text to replace."),
|
|
14089
14089
|
replace_with: z2.string().describe("Replacement text; a CR LF or a lone carriage return in it is written as a line feed."),
|
|
14090
|
-
body: z2.string({ max:
|
|
14090
|
+
body: z2.string({ max: DISPATCH_BODY_MAX }).describe(`Optional rationale, at most ${DISPATCH_BODY_MAX} characters.`).optional(),
|
|
14091
14091
|
occurrence: z2.number({ int: true, min: 0 }).describe("Optional zero-based occurrence of quote.").optional()
|
|
14092
14092
|
}),
|
|
14093
14093
|
validation: documentOwnerValidation(true, true)
|
|
@@ -14095,12 +14095,12 @@ var dispatchToolSpecs = [
|
|
|
14095
14095
|
{
|
|
14096
14096
|
name: "dispatch_message",
|
|
14097
14097
|
example: { issue: "DSP-1", body: "Implementation started." },
|
|
14098
|
-
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
|
|
14098
|
+
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}`,
|
|
14099
14099
|
arguments: (z2) => ({
|
|
14100
14100
|
issue: z2.string().describe(`${ISSUE_REFERENCE} Omit it only when in_reply_to answers a human's direct message to this session.`).optional(),
|
|
14101
|
-
body: z2.string({ max: DISPATCH_BODY_MAX }).describe(
|
|
14101
|
+
body: z2.string({ max: DISPATCH_BODY_MAX }).describe(`Update text, at most ${DISPATCH_BODY_MAX} characters.`),
|
|
14102
14102
|
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(),
|
|
14103
|
-
images: imagesArgument(z2, "the issue (a reply to a direct message: your own conversation, dispatch://agent/<your session id>)",
|
|
14103
|
+
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`)
|
|
14104
14104
|
}),
|
|
14105
14105
|
validation: messageValidation
|
|
14106
14106
|
},
|
package/package.json
CHANGED
|
@@ -340,8 +340,8 @@ While you are registered, the daemon's `tick` gives you a turn at least every
|
|
|
340
340
|
`dispatch read`, and post when its `Events:` show no `message.created` from today.
|
|
341
341
|
|
|
342
342
|
**What.** One `dispatch message --issue <report KEY> --body-file -` of at most 2,000 characters,
|
|
343
|
-
written as `skill://dispatch`'s "Writing for
|
|
344
|
-
every pull request by its URL.
|
|
343
|
+
since it is a report rather than a log of the day, written as `skill://dispatch`'s "Writing for
|
|
344
|
+
the human" says: every issue by its key and title, every pull request by its URL.
|
|
345
345
|
|
|
346
346
|
- **Finished.** `dispatch issues --project <PROJECT> --status done --updated-since <the
|
|
347
347
|
previous report's time, or 24 hours ago> --limit 250`, read every page, and keep the issues
|
|
@@ -178,7 +178,7 @@ the issue — `--issue` is your `LEGION_ISSUE`; Legion issues live on Dispatch,
|
|
|
178
178
|
issue, so no `gh issue` write and no GitHub-issue comment — naming the documents, the
|
|
179
179
|
one-to-three most useful takeaways, the two proofs you read, and the production check that
|
|
180
180
|
follows the merge's close of the issue. The message must carry this revived implementer's structured
|
|
181
|
-
attribution footer with `phase` set to `retro`; the body is capped at
|
|
181
|
+
attribution footer with `phase` set to `retro`; the body is capped at 32,000 characters:
|
|
182
182
|
|
|
183
183
|
```bash
|
|
184
184
|
dispatch message --issue <KEY> --body-file - <<'EOF'
|