@sjawhar/pi-legion 10.8.0 → 10.8.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/legion.js CHANGED
@@ -16171,7 +16171,7 @@ function ompCapabilityHost() {
16171
16171
  // package.json
16172
16172
  var package_default = {
16173
16173
  name: "@sjawhar/pi-legion",
16174
- version: "10.8.0",
16174
+ version: "10.8.1",
16175
16175
  license: "Apache-2.0",
16176
16176
  type: "module",
16177
16177
  omp: {
@@ -17128,16 +17128,18 @@ function stepPhaseStall(state, input) {
17128
17128
  case "handoff-complete":
17129
17129
  return { state: "closed" };
17130
17130
  case "inbound-event":
17131
- return { state: state === "quiet" ? "open" : state };
17132
- case "settle":
17133
- if (state !== "open")
17131
+ return { state: state === "quiet" || state === "text-call" ? "open" : state };
17132
+ case "settle": {
17133
+ if (state !== "open" && state !== "text-call")
17134
17134
  return { state };
17135
17135
  if (WAITING_REPLY.test(input.lastAssistantText))
17136
17136
  return { state: "quiet" };
17137
- return {
17138
- state: "quiet",
17139
- followUp: TOOL_CALL_SHAPED.test(input.lastAssistantText) ? TEXT_TOOL_CALL + FOLLOW_UP : FOLLOW_UP
17140
- };
17137
+ const textCall = TOOL_CALL_SHAPED.test(input.lastAssistantText);
17138
+ if (state === "text-call") {
17139
+ return textCall ? { state: "quiet", followUp: TEXT_TOOL_CALL + FOLLOW_UP } : { state: "quiet" };
17140
+ }
17141
+ return textCall ? { state: "text-call", followUp: TEXT_TOOL_CALL + FOLLOW_UP } : { state: "quiet", followUp: FOLLOW_UP };
17142
+ }
17141
17143
  }
17142
17144
  }
17143
17145
  function inboundKind(message) {
@@ -17160,7 +17162,7 @@ function assistantText(message) {
17160
17162
  `);
17161
17163
  }
17162
17164
  function isPhaseStall(value) {
17163
- return value === "closed" || value === "open" || value === "quiet";
17165
+ return value === "closed" || value === "open" || value === "text-call" || value === "quiet";
17164
17166
  }
17165
17167
  function restorePhaseStall(branch) {
17166
17168
  for (let index = branch.length - 1;index >= 0; index -= 1) {
@@ -17298,7 +17300,7 @@ function createLegionTool(deps) {
17298
17300
  return {
17299
17301
  name: "legion",
17300
17302
  label: "legion",
17301
- description: "Perform the workflow operation the Legion daemon assigned this role. The daemon advances phases; this tool cannot spawn workers. " + "handoff_complete (phase workers and sub-architects; the daemon accepts a completion only from the role working the issue's current phase) " + "reports this phase complete: `summary` (two sentences for the architect, or the merger's READY packet), `verdict` pass|fail when your role's " + "instructions require one, `ready: true` for the merger's READY. A handoff is a committed file, `.legion/<issue>/<phase>.json`: the pushed commit " + "carrying it is found here, with the pane's jj, and reported, so write it, commit it and push the branch (`jj git push`) before calling; this call " + "refuses, posting nothing, a handoff still in the working copy, missing, not committed on this branch, carried by another pane's commit, or not yet " + "on `legion/<issue>@origin`, each naming the remedy. The daemon refuses HANDOFF_NOT_NEW (the commit is the one you reported for your previous " + "phase: write and commit this phase's handoff) and, for READY, each refusal the merger's role names; a refused completion changed " + "nothing, so fix what it names and complete again. An accepted READY whose `note` begins MANUAL_MERGE_REQUIRED: is one a person merges: arm nothing. " + "The controller's read_state returns the daemon's whole state and set_status moves an issue to todo, backlog or icebox. " + "What a later phase needs goes in your handoff; a question for another live role goes to its role topic with envoy_publish.",
17303
+ description: "Perform the workflow operation the Legion daemon assigned this role. The daemon advances phases; this tool cannot spawn workers. " + "handoff_complete (phase workers and sub-architects; the daemon accepts a completion only from the role working the issue's current phase) " + "reports this phase complete: `summary` (two sentences for the architect, or the merger's READY packet), `verdict` pass|fail from the tester alone " + "(the daemon refuses a verdict from any other role), `ready: true` for the merger's READY. A handoff is a committed file, `.legion/<issue>/<phase>.json`: the pushed commit " + "carrying it is found here, with the pane's jj, and reported, so write it, commit it and push the branch (`jj git push`) before calling; this call " + "refuses, posting nothing, a handoff still in the working copy, missing, not committed on this branch, carried by another pane's commit, or not yet " + "on `legion/<issue>@origin`, each naming the remedy. The daemon refuses HANDOFF_NOT_NEW (the commit is the one you reported for your previous " + "phase: write and commit this phase's handoff) and, for READY, each refusal the merger's role names; a refused completion changed " + "nothing, so fix what it names and complete again. An accepted READY whose `note` begins MANUAL_MERGE_REQUIRED: is one a person merges: arm nothing. " + "The controller's read_state returns the daemon's whole state and set_status moves an issue to todo, backlog or icebox. " + "What a later phase needs goes in your handoff; a question for another live role goes to its role topic with envoy_publish.",
17302
17304
  defaultInactive: true,
17303
17305
  parameters: toolSchema(pi),
17304
17306
  execute: async (_id, parameters, _signal, _onUpdate, context) => {
@@ -328,7 +328,7 @@ or `review`), with the ordinary `write` tool: a JSON object with `schemaVersion:
328
328
  phase's own fields exactly as your role prompt spells them — the planner's `requiredSkills`,
329
329
  `gapAnalysis`, `planReview` and `specDepartures` records; the implementer's `proof` array; the
330
330
  tester's `implementerProof`, `failures` and, whenever it reports no failure, its own `proof`; the
331
- reviewer's `verdict`, counts and `keyFindings`. Nothing stamps the first four for you. Each `proof`
331
+ reviewer's `decision`, counts and `keyFindings`. Nothing stamps the first four for you. Each `proof`
332
332
  entry, in either phase, is an object of six non-empty strings: `criterion` (the acceptance line it
333
333
  proves), `surface`, `command`, `observed`, `headSha` (the commit it ran at) and `negativeControl`.
334
334
  A handoff built from the one already on disk (a test handoff that accumulates review rounds) is
@@ -342,10 +342,10 @@ cd -- "$LEGION_WORKSPACE" && \
342
342
  ```
343
343
 
344
344
  Then push (below) and report completion: call the `legion` tool with `op: "handoff_complete"` and
345
- `summary` (two sentences for the architect; the tester adds `verdict: "pass"` or `"fail"`, the
346
- merger `ready: true`). **Push before you complete is a hard rule.** `handoff_complete` finds, with
347
- your pane's jj, the newest commit on the issue branch that carries `.legion/<KEY>/<phase>.json`
348
- and reports it to the daemon, and refuses — posting nothing — while:
345
+ `summary` (two sentences for the architect; the tester, and no other role, adds `verdict: "pass"`
346
+ or `"fail"`; the merger `ready: true`). **Push before you complete is a hard rule.**
347
+ `handoff_complete` finds, with your pane's jj, the newest commit on the issue branch that carries
348
+ `.legion/<KEY>/<phase>.json` and reports it to the daemon, and refuses — posting nothing — while:
349
349
 
350
350
  - the file has a change still in the working copy: commit it, then complete again;
351
351
  - the file is missing from the workspace: write it, then commit and push it;
@@ -429,8 +429,9 @@ Report completion to the architect: call the `legion` tool with `op: "handoff_co
429
429
  (`handoff_complete`; `read_record`, your issue's record, which is what "re-read your issue
430
430
  record" means; and `request_backward_move`), and nothing of yours runs `legion` from bash. The
431
431
  tool call is what the extension's phase stall records, and a turn that ends with the phase still
432
- open gets one reminder; do not complete again on that reminder when your first completion was
433
- accepted — it stands, and a second is refused because the issue has already left your phase.
432
+ open gets one reminder (two when the first is answered with the tool call written as text again);
433
+ do not complete again on a reminder when your first completion was accepted — it stands, and a
434
+ second is refused because the issue has already left your phase.
434
435
 
435
436
  This publishes your phase's completion to the architect's role and clears the daemon's
436
437
  record of this issue's active phase. Do not add pipeline labels, run a controller loop, or
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sjawhar/pi-legion",
3
- "version": "10.8.0",
3
+ "version": "10.8.1",
4
4
  "license": "Apache-2.0",
5
5
  "type": "module",
6
6
  "omp": {