@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 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
  },
@@ -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 = 2000;
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: 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(),
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 2,000 characters, the lines images appends included. ${OWNER_REFERENCE}`,
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("Review comment, at most 2,000 characters."),
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)", "the 2,000-character body limit")
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 2,000 characters. ${OWNER_REFERENCE}`,
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: 2000 }).describe("Optional rationale, at most 2,000 characters.").optional(),
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 2,000 characters, the lines images appends included. ${ISSUE_REFERENCE}`,
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("Update text, at most 2,000 characters."),
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>)", "the 2,000-character body limit")
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sjawhar/opencode-legion-envoy",
3
- "version": "8.19.1",
3
+ "version": "8.20.0",
4
4
  "license": "Apache-2.0",
5
5
  "type": "module",
6
6
  "main": "dist/src/server.js",
@@ -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 the human" says: every issue by its key and title,
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 2,000 characters:
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'