@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 +3 -2
- package/dist/src/server.js +3 -2
- package/package.json +1 -1
- package/skills/legion-worker/SKILL.md +13 -13
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(),
|
package/dist/src/server.js
CHANGED
|
@@ -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
|
@@ -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:**
|
|
160
|
-
clone
|
|
161
|
-
`jj op restore|revert|abandon|undo` rewrite
|
|
162
|
-
|
|
163
|
-
chain, with or without `-R`, judged on the
|
|
164
|
-
included); `eval` code; and stdin written to a
|
|
165
|
-
own tool calls and from any `task` subagent you
|
|
166
|
-
log), and a `bash` command whose quoted text merely
|
|
167
|
-
with one of those words (a heredoc, an echo, a commit message) is refused too: write
|
|
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):
|
|
402
|
-
|
|
403
|
-
a push
|
|
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.
|