@sjawhar/opencode-legion-envoy 6.8.0 → 6.9.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
@@ -13557,6 +13557,7 @@ function serviceSubjectLabel(subject) {
13557
13557
  }
13558
13558
  return subject;
13559
13559
  }
13560
+ var ISSUE_TITLE_MAX = 1000;
13560
13561
  var MAX_ISSUE_PAGE_LIMIT = 250;
13561
13562
  var DEFAULT_ISSUE_PAGE_LIMIT = 50;
13562
13563
  var ASK_TURNS = ["human", "agent"];
@@ -14017,7 +14018,7 @@ var dispatchToolSpecs = [
14017
14018
  description: "Create a native Dispatch issue for newly tracked work. Search first with dispatch search; if potentially duplicate issues exist, this returns 409 POSSIBLE_DUPLICATE unless --force is set after reading them. " + "A spec holding an ask block whose body breaks its content rule (one or more question paragraphs, then at most one bullet list of options, last) is refused with 400 INVALID_ASK_BLOCK. " + `Do not use it when an existing issue already covers the work; read or update that issue instead. ${ISSUE_REFERENCE}`,
14018
14019
  arguments: (z2) => ({
14019
14020
  project: z2.string().describe("Project key for the new issue."),
14020
- title: z2.string().describe("Concise issue title."),
14021
+ title: z2.string({ max: ISSUE_TITLE_MAX }).describe("Concise issue title, at most 1,000 characters."),
14021
14022
  parent: z2.string().describe("Optional parent issue.").optional(),
14022
14023
  external: z2.string().describe("Optional external issue reference.").optional(),
14023
14024
  force: z2.boolean().describe("Create even though POSSIBLE_DUPLICATE listed similar issues; pass it only after reading them.").optional(),
@@ -14040,7 +14041,7 @@ var dispatchToolSpecs = [
14040
14041
  issue: z2.string().describe(ISSUE_REFERENCE),
14041
14042
  status: z2.enum(ISSUE_STATUSES).describe("New lifecycle status.").optional(),
14042
14043
  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(),
14043
- title: z2.string({ min: 1 }).describe("Replacement title.").optional(),
14044
+ title: z2.string({ min: 1, max: ISSUE_TITLE_MAX }).describe("Replacement title, at most 1,000 characters.").optional(),
14044
14045
  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(),
14045
14046
  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."),
14046
14047
  external_links: z2.array(z2.string({ min: 1 })).describe("URLs to link; merged into the issue's existing external links by URL.").optional(),
@@ -13552,6 +13552,7 @@ function date4(params) {
13552
13552
  // ../../node_modules/.bun/zod@4.3.6/node_modules/zod/v4/classic/external.js
13553
13553
  config(en_default());
13554
13554
  // ../contracts/src/dispatch-api.ts
13555
+ var ISSUE_TITLE_MAX = 1000;
13555
13556
  var MAX_ISSUE_PAGE_LIMIT = 250;
13556
13557
  var DEFAULT_ISSUE_PAGE_LIMIT = 50;
13557
13558
  var ASK_TURNS = ["human", "agent"];
@@ -13874,7 +13875,7 @@ var dispatchToolSpecs = [
13874
13875
  description: "Create a native Dispatch issue for newly tracked work. Search first with dispatch search; if potentially duplicate issues exist, this returns 409 POSSIBLE_DUPLICATE unless --force is set after reading them. " + "A spec holding an ask block whose body breaks its content rule (one or more question paragraphs, then at most one bullet list of options, last) is refused with 400 INVALID_ASK_BLOCK. " + `Do not use it when an existing issue already covers the work; read or update that issue instead. ${ISSUE_REFERENCE}`,
13875
13876
  arguments: (z2) => ({
13876
13877
  project: z2.string().describe("Project key for the new issue."),
13877
- title: z2.string().describe("Concise issue title."),
13878
+ title: z2.string({ max: ISSUE_TITLE_MAX }).describe("Concise issue title, at most 1,000 characters."),
13878
13879
  parent: z2.string().describe("Optional parent issue.").optional(),
13879
13880
  external: z2.string().describe("Optional external issue reference.").optional(),
13880
13881
  force: z2.boolean().describe("Create even though POSSIBLE_DUPLICATE listed similar issues; pass it only after reading them.").optional(),
@@ -13897,7 +13898,7 @@ var dispatchToolSpecs = [
13897
13898
  issue: z2.string().describe(ISSUE_REFERENCE),
13898
13899
  status: z2.enum(ISSUE_STATUSES).describe("New lifecycle status.").optional(),
13899
13900
  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(),
13900
- title: z2.string({ min: 1 }).describe("Replacement title.").optional(),
13901
+ title: z2.string({ min: 1, max: ISSUE_TITLE_MAX }).describe("Replacement title, at most 1,000 characters.").optional(),
13901
13902
  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(),
13902
13903
  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."),
13903
13904
  external_links: z2.array(z2.string({ min: 1 })).describe("URLs to link; merged into the issue's existing external links by URL.").optional(),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sjawhar/opencode-legion-envoy",
3
- "version": "6.8.0",
3
+ "version": "6.9.1",
4
4
  "license": "Apache-2.0",
5
5
  "type": "module",
6
6
  "main": "dist/src/server.js",
@@ -156,16 +156,16 @@ before new work: anything unpushed is gone. That message stays in history; recon
156
156
  - **Before pushing, check ancestry:** `jj -R "$LEGION_WORKSPACE" log -r 'ancestors(@, 5)'`
157
157
  — verify only your issue's commits are in the chain, not unrelated work.
158
158
 
159
- **Shared operation safety:** Every Legion issue workspace is a `jj workspace` of one shared
160
- clone, so they all share one operation log: `jj undo`, `jj abandon`, and
161
- `jj op restore|revert|abandon|undo` rewrite it for every tree at once. The extension refuses them in every
162
- phase-worker pane before they run — a `bash` command in any position of a pipeline or `&&`
163
- chain, with or without `-R`, judged on the whole argument list (a supervised service's start
164
- included); `eval` code; and stdin written to a service (a `write` to `proc://<id>`) — from your
165
- own tool calls and from any `task` subagent you spawn (it runs in your pane, against the same
166
- log), and a `bash` command whose quoted text merely mentions `jj`
167
- with one of those words (a heredoc, an echo, a commit message) is refused too: write such text
168
- with the `write` tool or say "operation-log rollback" instead. `jj restore <paths>`,
159
+ **Shared operation safety:** Under tmux every issue workspace is a `jj workspace` of one shared
160
+ clone and operation log; under Kubernetes each issue pod has its own, shared by that issue's roles
161
+ alone. Either way `jj undo`, `jj abandon`, and `jj op restore|revert|abandon|undo` rewrite a log
162
+ other agents work in. The extension refuses them in every phase-worker pane before they run — a
163
+ `bash` command in any position of a pipeline or `&&` chain, with or without `-R`, judged on the
164
+ whole argument list (a supervised service's start included); `eval` code; and stdin written to a
165
+ service (a `write` to `proc://<id>`) — from your own tool calls and from any `task` subagent you
166
+ spawn (it runs in your pane, against the same log), and a `bash` command whose quoted text merely
167
+ mentions `jj` with one of those words (a heredoc, an echo, a commit message) is refused too: write
168
+ such text with the `write` tool or say "operation-log rollback" instead. `jj restore <paths>`,
169
169
  `jj op log`, and `jj op show` stay allowed. Recover forward only: a new commit
170
170
  (`jj -R "$LEGION_WORKSPACE" new`) or `jj -R "$LEGION_WORKSPACE" restore <paths>` of files.
171
171
  Anything else, stop and send the owning architect the `jj -R "$LEGION_WORKSPACE" log`
@@ -398,9 +398,9 @@ re-runs it at once. While the pull request conflicts with its base (GitHub shows
398
398
  a body edit re-judges nothing there either; a push cures both, but only once the pull request is
399
399
  mergeable, so the implementer forward-merges a conflicting one first (*Reintegrating the base* in
400
400
  `skill://legion-worker/references/conflicts-and-rewrites.md`). Its ancestry check refuses
401
- unless `@-` descends from `legion/<KEY>@origin` (or the branch is not on GitHub yet): every issue
402
- workspace shares one clone, so another role's push moves `legion/<KEY>@origin` here at once, and
403
- a push that did not descend from it would move the remote branch sideways onto your commit and
401
+ unless `@-` descends from `legion/<KEY>@origin` (or the branch is not on GitHub yet): your issue's
402
+ roles share one clone (under tmux every issue does), so another role's push moves the remote branch
403
+ here at once, and a push not descending from it would move it sideways onto your commit and
404
404
  drop theirs. A handoff commit never sits on an implementer's unpushed chain: when the issue moves
405
405
  back to planning, the implementer's unpushed commits stay off the bookmark until the implementer
406
406
  returns, and the planner writes its handoff on the remote tip.