@sjawhar/claude-envoy 1.14.0 → 1.14.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/.omp-plugin/plugin.json
CHANGED
package/dist/envoy-channel.js
CHANGED
|
@@ -52131,7 +52131,7 @@ var legionPendingStatusWrite = object({
|
|
|
52131
52131
|
var legionStrandedClaim = object({
|
|
52132
52132
|
issue: issueKey,
|
|
52133
52133
|
role: _enum2(LEGION_ROLES),
|
|
52134
|
-
state: _enum2(["suspended", "failed"])
|
|
52134
|
+
state: _enum2(["suspended", "failed", "retired"])
|
|
52135
52135
|
});
|
|
52136
52136
|
var legionHeldOutboxRow = object({
|
|
52137
52137
|
id: number2().int().positive(),
|
|
@@ -52365,7 +52365,10 @@ var legionDeliveryView = object({
|
|
|
52365
52365
|
queuedAt: timestamp,
|
|
52366
52366
|
deliveredAt: timestamp.optional(),
|
|
52367
52367
|
confirmedAt: timestamp.optional(),
|
|
52368
|
-
interrupted: literal(true).optional()
|
|
52368
|
+
interrupted: literal(true).optional(),
|
|
52369
|
+
sendFailures: number2().int().nonnegative().optional(),
|
|
52370
|
+
lastSendFailureAt: timestamp.optional(),
|
|
52371
|
+
lastSendError: nonEmptyString.optional()
|
|
52369
52372
|
});
|
|
52370
52373
|
var LegionOperatorClaimResponse = object({
|
|
52371
52374
|
token: nonEmptyString,
|
|
@@ -55176,9 +55179,9 @@ var import_nats2 = __toESM(require_mod4(), 1);
|
|
|
55176
55179
|
|
|
55177
55180
|
// package.json
|
|
55178
55181
|
var name = "@sjawhar/claude-envoy";
|
|
55179
|
-
var version2 = "1.14.
|
|
55182
|
+
var version2 = "1.14.1";
|
|
55180
55183
|
var legion = {
|
|
55181
|
-
daemonApiVersion:
|
|
55184
|
+
daemonApiVersion: 56
|
|
55182
55185
|
};
|
|
55183
55186
|
|
|
55184
55187
|
// src/channel-forwarder.ts
|
|
@@ -204,7 +204,10 @@ child that never started is handed over too, carrying no run, whatever held it a
|
|
|
204
204
|
waits in the line for a slot and for any unfinished blocker, and its architect starts as a fresh
|
|
205
205
|
root and registers its own spec. Only a child that finished, was parked or was never released
|
|
206
206
|
stays. The child stays its own tree; reopening the old root does not take it back. Park a child
|
|
207
|
-
with `park_child` before then when its work should stop with the root.
|
|
207
|
+
with `park_child` before then when its work should stop with the root. A root that is parked
|
|
208
|
+
rather than closed hands over only a child at `awaiting_merge` whose pull request is still open,
|
|
209
|
+
since the daemon re-admits no parked root and only that child's own new READY arms the merge the
|
|
210
|
+
park disarmed; park that child too when its merge should wait with the root.
|
|
208
211
|
|
|
209
212
|
If you are that child's architect:
|
|
210
213
|
|
|
@@ -19,7 +19,7 @@ You work one phase of one issue in a jj workspace every role of the issue shares
|
|
|
19
19
|
|
|
20
20
|
## Stop rules
|
|
21
21
|
|
|
22
|
-
- **A refused completion is information, not a retry loop.** Quote the answer verbatim to the architect, so "my work is lost" and "my work belongs to an ended run" read differently. `HANDOFF_STALE_GENERATION` (the issue is on a newer run) or `HANDOFF_NO_RUN` (your claim holds no task): push nothing further, end the turn without completing, and tell the architect; if the task then arrives and its work and handoff are already done, call `handoff_complete` again in that task's turn, and never redo the work or write a second handoff. `HANDOFF_STALE_ASSIGNMENT` (the issue left your phase and came back while your turn ran, so your work belongs to the assignment before the one the phase hands you now): end the turn without completing and tell the architect, and report that work and that verdict no further. The phase was entered again, so the task it hands you now is work of its own — a testing assignment after a red is for the head the fix pushed, which your verdict on the head before it does not answer for: do that work at the head the task names, write a handoff of its own for it, and complete in its turn. `HANDOFF_NOT_CURRENT_PHASE`: the issue left your phase; report, never complete again. `HANDOFF_NO_PULL_REQUEST` (the implementer's completion found no open pull request on `legion/<KEY>`, and none recorded merged): open it and complete again at the same commit; when the answer names a closed pull request, the architect decides the phase: tell it, and open or reopen nothing until it answers. `HANDOFF_ALREADY_RECORDED`: the first answer stands; if you did not see it, tell the architect. `HANDOFF_SESSION_MISMATCH` names a record another session wrote: read it, record it again from your session with `dispatch handoff-write`, and complete. A reminder is not a task: after an accepted completion, a second call is refused.
|
|
22
|
+
- **A refused completion is information, not a retry loop.** Quote the answer verbatim to the architect, so "my work is lost" and "my work belongs to an ended run" read differently. `HANDOFF_STALE_GENERATION` (the issue is on a newer run) or `HANDOFF_NO_RUN` (the daemon can attribute your completion to no run: your claim holds no task of this issue's current run and phase — no task at all, or one of another run, of another phase, or of no phase — and the answer says which of those it holds): push nothing further, end the turn without completing, and tell the architect; if the task then arrives and its work and handoff are already done, call `handoff_complete` again in that task's turn, and never redo the work or write a second handoff. `HANDOFF_STALE_ASSIGNMENT` (the issue left your phase and came back while your turn ran, so your work belongs to the assignment before the one the phase hands you now): end the turn without completing and tell the architect, and report that work and that verdict no further. The phase was entered again, so the task it hands you now is work of its own — a testing assignment after a red is for the head the fix pushed, which your verdict on the head before it does not answer for: do that work at the head the task names, write a handoff of its own for it, and complete in its turn. `HANDOFF_NOT_CURRENT_PHASE`: the issue left your phase; report, never complete again. `HANDOFF_NO_PULL_REQUEST` (the implementer's completion found no open pull request on `legion/<KEY>`, and none recorded merged): open it and complete again at the same commit; when the answer names a closed pull request, the architect decides the phase: tell it, and open or reopen nothing until it answers. `HANDOFF_ALREADY_RECORDED`: the first answer stands; if you did not see it, tell the architect. `HANDOFF_SESSION_MISMATCH` names a record another session wrote: read it, record it again from your session with `dispatch handoff-write`, and complete. A reminder is not a task: after an accepted completion, a second call is refused.
|
|
23
23
|
- **A turn that ends with your phase open is reminded**, at the end of every turn for as long as the phase stays open. Answer by completing, or with a WAITING line naming what you wait on, which buys a quiet wait; a turn that ends while background work of your own is still running buys the same quiet with no line at all, since that work wakes you when it finishes. A run of reminders that change nothing tells your architect. Under `runtime: kubernetes` that quiet wait also lets the daemon release your issue's pod, while background work of yours keeps the pod, because your session reports that work to the daemon.
|
|
24
24
|
- **A released pod is not a stop.** Under `runtime: kubernetes` the daemon releases your issue's pod once no role of it has a turn in progress or a turn due for ten minutes. Your session, your phase, your place in it and the task you hold are all kept, and your unpushed commits and working-copy change are restored into the next pod, so a release costs a pod start and nothing else. A wait that raises no event of its own wakes you at the backstop alone, 60 minutes after the release, so name the wait in your WAITING line and expect that hour. A release keeps nothing else of the disk — `$TMPDIR`, every ignored file, each role's home, a test database and the CodeGraph index all go with the pod — so put work you must keep on the branch, in a tracked file or in Dispatch. The backstop runs only while your phase is open.
|
|
25
25
|
- **The workspace is read-only for you from the moment your phase ends**, whether you ended it by completing or a CI red took it back while your turn ran: no commit, no `jj new`, no edit to a tracked file, in the turn still running when the message reaches you and in every turn after it, until a new task names your phase. Nothing stops that turn for you, so stopping is yours to do: drop the work in hand and leave whatever you have uncommitted. The active phase owns the workspace, and your session is kept, until your issue leaves the workflow, to answer questions and to take your next assignment.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sjawhar/claude-envoy",
|
|
3
|
-
"version": "1.14.
|
|
3
|
+
"version": "1.14.1",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"description": "Claude Code channel plugin for Legion's Envoy bus",
|
|
6
6
|
"type": "module",
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"AGENTS.md"
|
|
20
20
|
],
|
|
21
21
|
"legion": {
|
|
22
|
-
"daemonApiVersion":
|
|
22
|
+
"daemonApiVersion": 56
|
|
23
23
|
},
|
|
24
24
|
"repository": {
|
|
25
25
|
"type": "git",
|