@sjawhar/opencode-legion-envoy 8.23.1 → 8.24.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 +3 -3
- package/dist/src/server.js +2 -2
- package/package.json +1 -1
- package/skills/dispatch/references/asks.md +2 -2
- package/skills/legion-architect/SKILL.md +2 -1
- package/skills/legion-controller/SKILL.md +12 -7
- package/skills/legion-controller/references/slack-mentions.md +2 -1
package/dist/dispatch.js
CHANGED
|
@@ -14061,7 +14061,7 @@ var dispatchToolSpecs = [
|
|
|
14061
14061
|
spec: z2.string().describe(`Optional initial primary-document markdown. ${SPEC_WRITING_POINTER}`).optional(),
|
|
14062
14062
|
labels: z2.array(z2.string({ min: 1, max: 40 }), { max: 20 }).describe("Optional initial labels, at most 20 labels of up to 40 characters.").optional(),
|
|
14063
14063
|
priority: z2.number({ int: true, min: 0, max: 3 }).describe("Optional coarse priority, a number from 0 to 3: 0 is highest and 3 is lowest.").optional(),
|
|
14064
|
-
assignee: z2.string().describe("Email of the person who answers this issue's asks (someone who has signed in to Dispatch); defaults to your owner when you act for a person, else the parent's assignee, else unassigned.").optional(),
|
|
14064
|
+
assignee: z2.string().describe("Email of the person who answers this issue's asks (someone who has signed in to Dispatch); defaults to your owner when you act for a person, else the parent's assignee, else the project's default assignee when it still names a person who has signed in, else unassigned.").optional(),
|
|
14065
14065
|
components: componentsArgument(z2).optional(),
|
|
14066
14066
|
repo: z2.string().describe("The repository the issue targets, owner/name, mapped to the issue's project in Settings; a child inherits its parent's when unset, and an issue with none on its parent chain takes the project's default.").optional()
|
|
14067
14067
|
})
|
|
@@ -14439,7 +14439,7 @@ var dispatchToolSpecs = [
|
|
|
14439
14439
|
{
|
|
14440
14440
|
name: "dispatch_whoami",
|
|
14441
14441
|
example: {},
|
|
14442
|
-
description: "Who Dispatch takes this session for: {session, owner}. owner is the lowercase email of the person whose personal token you run under (the
|
|
14442
|
+
description: "Who Dispatch takes this session for: {session, owner}. owner is the lowercase email of the person whose personal token you run under (the first choice of assignee for issues you create), or null under the shared token, in which case a create with no assignee falls back to the parent's assignee and then to the project's default assignee.",
|
|
14443
14443
|
arguments: () => ({}),
|
|
14444
14444
|
strict: true
|
|
14445
14445
|
}
|
|
@@ -17685,7 +17685,7 @@ async function executeDispatchTool(input) {
|
|
|
17685
17685
|
const identity = await client2.whoami();
|
|
17686
17686
|
const owner2 = identity.kind === "agent" ? identity.owner : identity.login.toLowerCase();
|
|
17687
17687
|
const service = identity.kind === "agent" ? identity.service ?? null : null;
|
|
17688
|
-
const unowned = "no owner, so
|
|
17688
|
+
const unowned = "no owner, so an issue you create without an assignee takes its parent's assignee, else the project's default assignee, else nobody.";
|
|
17689
17689
|
return {
|
|
17690
17690
|
text: owner2 !== null ? `Session ${sessionId} acts for ${owner2}: issues you create without an assignee are assigned to ${owner2}.` : service !== null ? `Session ${sessionId} runs as service ${serviceSubjectLabel(service)}: ${unowned}` : `Session ${sessionId} runs under the shared token: ${unowned}`,
|
|
17691
17691
|
details: { session: sessionId, owner: owner2, service }
|
package/dist/src/server.js
CHANGED
|
@@ -13918,7 +13918,7 @@ var dispatchToolSpecs = [
|
|
|
13918
13918
|
spec: z2.string().describe(`Optional initial primary-document markdown. ${SPEC_WRITING_POINTER}`).optional(),
|
|
13919
13919
|
labels: z2.array(z2.string({ min: 1, max: 40 }), { max: 20 }).describe("Optional initial labels, at most 20 labels of up to 40 characters.").optional(),
|
|
13920
13920
|
priority: z2.number({ int: true, min: 0, max: 3 }).describe("Optional coarse priority, a number from 0 to 3: 0 is highest and 3 is lowest.").optional(),
|
|
13921
|
-
assignee: z2.string().describe("Email of the person who answers this issue's asks (someone who has signed in to Dispatch); defaults to your owner when you act for a person, else the parent's assignee, else unassigned.").optional(),
|
|
13921
|
+
assignee: z2.string().describe("Email of the person who answers this issue's asks (someone who has signed in to Dispatch); defaults to your owner when you act for a person, else the parent's assignee, else the project's default assignee when it still names a person who has signed in, else unassigned.").optional(),
|
|
13922
13922
|
components: componentsArgument(z2).optional(),
|
|
13923
13923
|
repo: z2.string().describe("The repository the issue targets, owner/name, mapped to the issue's project in Settings; a child inherits its parent's when unset, and an issue with none on its parent chain takes the project's default.").optional()
|
|
13924
13924
|
})
|
|
@@ -14296,7 +14296,7 @@ var dispatchToolSpecs = [
|
|
|
14296
14296
|
{
|
|
14297
14297
|
name: "dispatch_whoami",
|
|
14298
14298
|
example: {},
|
|
14299
|
-
description: "Who Dispatch takes this session for: {session, owner}. owner is the lowercase email of the person whose personal token you run under (the
|
|
14299
|
+
description: "Who Dispatch takes this session for: {session, owner}. owner is the lowercase email of the person whose personal token you run under (the first choice of assignee for issues you create), or null under the shared token, in which case a create with no assignee falls back to the parent's assignee and then to the project's default assignee.",
|
|
14300
14300
|
arguments: () => ({}),
|
|
14301
14301
|
strict: true
|
|
14302
14302
|
}
|
package/package.json
CHANGED
|
@@ -4,8 +4,8 @@ Read this once an ask is open. Whether to ask, and how to write it, is "Before y
|
|
|
4
4
|
|
|
5
5
|
## Who answers an ask
|
|
6
6
|
|
|
7
|
-
- An ask goes to the issue's assignee's Inbox. On an unassigned issue it is in nobody's default Inbox or `Needs you` count.
|
|
8
|
-
- `dispatch whoami` prints whom you act for: your token owner's email, or no owner (a service token shows as `<namespace>/<name>`, as your writes do). An issue you create goes to your owner, else inherits its parent's assignee, else stays unassigned.
|
|
7
|
+
- An ask goes to the issue's assignee's Inbox: the `Assignee:` that `dispatch read` prints decides whose, not the project's default. On an unassigned issue it is in nobody's default Inbox or `Needs you` count. A project's default assignee fills in only when an issue is created with nobody named and nothing earlier in the chain below names someone; an issue created with an explicit nobody, set to nobody later, or created before the default was set stays unassigned.
|
|
8
|
+
- `dispatch whoami` prints whom you act for: your token owner's email, or no owner (a service token shows as `<namespace>/<name>`, as your writes do). An issue you create goes to your owner, else inherits its parent's assignee, else goes to the project's default assignee when a person set one on the Settings page, else stays unassigned.
|
|
9
9
|
- On an unassigned issue where the answer matters, assign it to your owner, or name in the question who should answer. Assign with `PATCH /api/v1/issues/{key}` and `{"assignee": "<email>"}`. An email nobody signed in with gets `ASSIGNEE_NOT_ALLOWED`.
|
|
10
10
|
- Never reassign an issue a human holds to get a faster answer. That is the human's call.
|
|
11
11
|
|
|
@@ -77,7 +77,8 @@ exercise a criterion end to end, building that path is a child issue of this tre
|
|
|
77
77
|
relationship from `--parent`. Keep the returned issue keys in ordered waves; a child is
|
|
78
78
|
inert until released. Do not pass `--assignee`: the default keeps the tree's questions in one
|
|
79
79
|
Inbox — under the shared token a child inherits its parent's assignee (the human who
|
|
80
|
-
answers the tree's asks)
|
|
80
|
+
answers the tree's asks), and where no parent names one the project's default assignee, which
|
|
81
|
+
a person sets on the Settings page; under a personal token it goes to that token's owner, whom
|
|
81
82
|
`dispatch whoami` names. Set it only when a human told you a specific person owns that child.
|
|
82
83
|
|
|
83
84
|
A change across repositories gets one child per repository, each created with
|
|
@@ -282,8 +282,9 @@ and the person it names, are:
|
|
|
282
282
|
Each `curl` in this skill and its references reads `DISPATCH_URL` and `DISPATCH_TOKEN_FILE`, which
|
|
283
283
|
`legion controller start` sets only when `controller.yaml` names `dispatch_url`. A read that fails
|
|
284
284
|
or prints no JSON array admits nothing and acts on nothing, and an assignment that does not print
|
|
285
|
-
the issue with its new `assignee` leaves
|
|
286
|
-
nobody has signed in to Dispatch with). Name either,
|
|
285
|
+
the issue with its new `assignee` leaves the issue's assignee as the read showed it
|
|
286
|
+
(`400 ASSIGNEE_NOT_ALLOWED` names an email nobody has signed in to Dispatch with). Name either,
|
|
287
|
+
with its first line, in your summary.
|
|
287
288
|
|
|
288
289
|
## Daily report (Go daemon)
|
|
289
290
|
|
|
@@ -307,9 +308,11 @@ EOF
|
|
|
307
308
|
legion({ op: "set_status", issue: "<report KEY>", status: "icebox" })
|
|
308
309
|
```
|
|
309
310
|
|
|
310
|
-
With no person known, leave out `--assignee
|
|
311
|
-
|
|
312
|
-
|
|
311
|
+
With no person known, leave out `--assignee`: the issue then goes to your token's owner, or, under
|
|
312
|
+
the shared token, to the project's default assignee when a person set one on the Settings page, and
|
|
313
|
+
is otherwise unassigned. While the issue's `Assignee:` says `unassigned`, each report opens with
|
|
314
|
+
one sentence asking a person to take the issue from its header, since its asks reach only the
|
|
315
|
+
Inbox's `Unassigned` filter.
|
|
313
316
|
|
|
314
317
|
Each time you read it, keep it answerable. `Status: done` means someone closed it: Dispatch
|
|
315
318
|
refuses an ask or a message there (`409 ISSUE_CLOSED`) and hides its open asks, so reopen it with
|
|
@@ -442,8 +445,10 @@ themselves: an issue reaches Legion only when a person hands it over
|
|
|
442
445
|
is promised only when the `Design gate policy:` line of your system prompt, which
|
|
443
446
|
whoever launched you writes from the daemon's own configuration, says
|
|
444
447
|
`gates.design: root-issues`. Under `gates.design: off` nobody approves a design, so drop "and
|
|
445
|
-
its design approval" (and "or its design approval") from the sentence.
|
|
446
|
-
|
|
448
|
+
its design approval" (and "or its design approval") from the sentence. Take the line from the
|
|
449
|
+
read, never from how the issue was created: an issue filed with no assignee still lands on the
|
|
450
|
+
project's default assignee where a person set one. An unassigned root still runs; its
|
|
451
|
+
architect's asks reach no default Inbox list, only the `Unassigned` filter.
|
|
447
452
|
|
|
448
453
|
## Architect escalation
|
|
449
454
|
|
|
@@ -81,7 +81,8 @@ For a person's mention, take the first of these that fits.
|
|
|
81
81
|
Legion take…"); a request for someone to look at something, or one that does not say who, gets
|
|
82
82
|
no label and waits for a person to hand it over. Never label a request outside the scope the
|
|
83
83
|
deployment instructions state. Reply with the new issue's key, its title, the link and assignee
|
|
84
|
-
the `Created` line names (Dispatch assigns the issue to your token's owner
|
|
84
|
+
the `Created` line names (naming nobody, Dispatch assigns the issue to your token's owner, or,
|
|
85
|
+
under the shared token, to the project's default assignee when a person set one),
|
|
85
86
|
and whether Legion will take it: with the label, triage admits it in its next turn unless it
|
|
86
87
|
should wait.
|
|
87
88
|
- **Something an issue's architect owns.** A question about a tree's design, a change of direction,
|