@sjawhar/opencode-legion-envoy 1.13.0 → 1.14.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.
@@ -13594,6 +13594,11 @@ var askEventPayloadFields = {
13594
13594
  question: string2().optional(),
13595
13595
  options: array(object({ label: string2().optional() })).nullish(),
13596
13596
  answer: object({ selected: array(string2()).nullish(), text: string2().nullish() }).nullish(),
13597
+ anchor: object({
13598
+ quote: string2().optional(),
13599
+ mark_id: string2().optional(),
13600
+ block_id: string2().nullable().optional()
13601
+ }).passthrough().nullish(),
13597
13602
  resolution: object({
13598
13603
  kind: _enum2(["retracted", "resolved"]).optional(),
13599
13604
  reason: string2().optional(),
@@ -13621,12 +13626,14 @@ var AskEditedEventPayloadSchema = object({
13621
13626
  var CommentEventPayloadSchema = object({
13622
13627
  id: string2().optional(),
13623
13628
  artifact_name: string2().optional(),
13629
+ project_key: string2().optional(),
13630
+ artifact_slug: string2().optional(),
13624
13631
  body: string2().optional(),
13625
13632
  reply_to: string2().nullish(),
13626
13633
  ask_id: string2().nullish(),
13627
13634
  ask_question: string2().optional(),
13628
13635
  ask_state: _enum2(["open", "answered", "resolved"]).optional(),
13629
- anchor: object({ quote: string2().optional() }).nullish(),
13636
+ anchor: object({ block_id: string2().nullable().optional(), quote: string2().optional() }).nullish(),
13630
13637
  suggestion: object({ replace_with: string2().optional() }).nullish(),
13631
13638
  author: object({ kind: string2(), id: string2() }).optional(),
13632
13639
  created_at: string2().optional()
@@ -13758,7 +13765,7 @@ var dispatchToolSpecs = [
13758
13765
  },
13759
13766
  {
13760
13767
  name: "dispatch_ask",
13761
- description: "Open a durable, answerable decision or human to-do on an issue or project document. Do not use it for a status update or discussion; " + "use dispatch_message instead. Use kind: action for a to-do a human must complete; it has fixed Done / Can't answers. " + "Anchor a document question, thread reply_to/reply_to_ask, or cite a dispatch:// " + `reference \u2014 it must be answerable from its own text and anchor alone, never "see above". Question is at most 800 ` + `characters and has at most 8 options. ${OWNER_REFERENCE}`,
13768
+ description: "Open a durable, answerable decision or human to-do on an issue or project document. Do not use it for a status update or discussion; " + "use dispatch_message instead. Use kind: action for a to-do a human must complete; it has fixed Done / Can't answers. " + "Anchor a document question, thread reply_to/reply_to_ask, or cite a dispatch:// " + 'reference \u2014 it must be answerable from its own text and anchor alone, never "see above". A quote anchor is pinned to its block. Question is at most 800 ' + `characters and has at most 8 options. ${OWNER_REFERENCE}`,
13762
13769
  arguments: (z) => ({
13763
13770
  issue: z.string().describe(ISSUE_REFERENCE).optional(),
13764
13771
  project: z.string().describe("Project key owning the document.").optional(),
@@ -13812,7 +13819,7 @@ var dispatchToolSpecs = [
13812
13819
  },
13813
13820
  {
13814
13821
  name: "dispatch_comment",
13815
- 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. Body is at most 2,000 characters. ${OWNER_REFERENCE}`,
13822
+ 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. ${OWNER_REFERENCE}`,
13816
13823
  arguments: (z) => ({
13817
13824
  issue: z.string().describe(ISSUE_REFERENCE).optional(),
13818
13825
  project: z.string().describe("Project key owning the document.").optional(),
@@ -13821,7 +13828,7 @@ var dispatchToolSpecs = [
13821
13828
  quote: z.string().describe("Optional exact quoted document text.").optional(),
13822
13829
  occurrence: z.number({ int: true, min: 0 }).describe("Optional zero-based occurrence of quote.").optional(),
13823
13830
  body: z.string({ max: 2000 }).describe("Review comment, at most 2,000 characters."),
13824
- reply_to: z.string().describe("Optional comment id to reply to.").optional(),
13831
+ reply_to: z.string().describe("Full id of a comment to reply to; replying to any comment in a thread continues that " + "thread (an ask's clarification thread included).").optional(),
13825
13832
  reply_to_ask: z.string().describe("Optional ask id to reply to, threading this comment under that question. Mutually " + "exclusive with reply_to.").optional()
13826
13833
  }),
13827
13834
  validation: documentOwnerValidation(true)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sjawhar/opencode-legion-envoy",
3
- "version": "1.13.0",
3
+ "version": "1.14.0",
4
4
  "type": "module",
5
5
  "main": "dist/src/server.js",
6
6
  "exports": {
@@ -127,8 +127,10 @@ recommendation and its reason last, in `question`. Never put file paths, line nu
127
127
  numbers, document versions, or role tokens in the question; if the human needs that detail, anchor
128
128
  the ask to the document passage instead. Apply the phone test from "Writing for the human" before
129
129
  posting. Anchor a document question with `anchor: { artifact, quote, occurrence? }`; `occurrence`
130
- is zero-based and selects a repeated quote, and an anchor whose quote later disappears becomes
131
- orphaned but stays readable against its original document version.
130
+ is zero-based and selects a repeated quote. A quote anchor is pinned to its lowest complete
131
+ containing block while retaining its quote as display text, so rewording the passage keeps it
132
+ attached; a quote spanning top-level blocks, and existing anchors without a block, stay readable
133
+ against their original document version if their quote disappears.
132
134
 
133
135
  An ask must be answerable from its own text and its anchor alone. Anchor a question about a document passage with `anchor`; thread one
134
136
  about a comment with `reply_to`; thread a follow-up on your own ask with `reply_to_ask`; cite anything else with a `dispatch://`
@@ -179,10 +181,11 @@ in its Conversation card and reply thread. Resolution is not an answer: it never
179
181
  resolved. A human may reply to an open or answered ask; so may you, e.g. after finding the answer — use `reply_to_ask` on
180
182
  `dispatch_comment` (mutually exclusive with `reply_to`).
181
183
 
182
- A human reply while your ask is still open (the delivered `comment.created` carries `ask_state: open`) is a request for
183
- clarification, not an answer: the human did not understand the question or needs more before choosing. The ask now waits on you
184
- in their Inbox. Answer in the same thread with `dispatch_comment({ reply_to_ask })`, or reword the question itself with
185
- `dispatch_edit_ask` when the wording was the problem; either puts the ask back in front of them. Do not open a second ask.
184
+ A human answers or asks back from the same field; a question-shaped free-text answer is offered as a clarification first. A human
185
+ reply while your ask is still open (the delivered `comment.created` carries `ask_state: open`) is a request for clarification, not
186
+ an answer: the human did not understand the question or needs more before choosing. The ask now waits on you in their Inbox. Answer
187
+ in the same thread with `dispatch_comment({ reply_to_ask })`, or reword the question itself with `dispatch_edit_ask` when the wording
188
+ was the problem; either puts the ask back in front of them. Do not open a second ask.
186
189
 
187
190
  ## Approval of a spec
188
191
 
@@ -289,9 +292,10 @@ dispatch_comment({ issue?, project?, artifact?, ref?, quote?, occurrence?, body,
289
292
 
290
293
  It returns issue or project-document owner details plus `comment` and, for writes, `topic`.
291
294
  `ref` names the owner (an issue or project-document reference) in place of `issue`/`project`.
292
- `quote` requires `artifact`; omit both for a floating issue comment. A reply (`reply_to`/`reply_to_ask`)
293
- takes no `quote`; it belongs to its parent's anchor. Use `reply_to` to continue a comment thread at
294
- its root; a reply to a resolved thread reopens it. Use `reply_to_ask` to reply directly under a
295
+ `quote` requires `artifact`; its anchor is pinned to the containing block while retaining the quote
296
+ for display. Omit both for a floating issue comment. A reply (`reply_to`/`reply_to_ask`) takes no
297
+ `quote`; it belongs to its parent's anchor. Reply to any comment in a thread; the server keeps
298
+ threads flat. A reply to a resolved thread reopens it. Use `reply_to_ask` to reply directly under a
295
299
  question asked with `dispatch_ask`. Comments are edited only by their author from the dashboard. A
296
300
  delivered `comment.created` event carries the comment `id`; reply to it with
297
301
  `dispatch_comment({ reply_to: <id> })`.