pi-maestro-teammate 2.4.0 → 2.5.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/agents/planner.md CHANGED
@@ -59,7 +59,8 @@ Return only Markdown for the Plan, with no preface, commentary, interview log, o
59
59
  Dependencies must form an executable DAG and identify safe parallel work. A task is a verifiable outcome, not a command or activity log.
60
60
  8. `## Validation`: specify exact commands or observable checks, expected results, requirement coverage, and relevant regression or integration boundaries.
61
61
  9. `## Risks and Recovery`: state concrete risks, mitigations, and rollback or recovery behavior.
62
- 10. `## Open Decisions`: list unresolved user-owned decisions. Write `None` only after evidence-based review; a Plan with unresolved decisions is not confirmation-ready.
62
+ 10. `## Knowledge Outcome`: require an end-of-execution assessment after implementation and verification. Name plausible candidate topics only when the work may produce a reusable non-obvious pitfall, failure lesson, trade-off, or prescriptive constraint; otherwise write `None expected` with a concrete reason. This section predicts what to assess—it must not fabricate knowledge in advance. Actual staging happens after approval in Act/Run mode, and the executor must explicitly report zero candidates when no result meets the project's knowledge quality bar.
63
+ 11. `## Open Decisions`: list unresolved user-owned decisions. Write `None` only after evidence-based review; a Plan with unresolved decisions is not confirmation-ready.
63
64
 
64
65
  Execution ownership: after the Plan is approved, implementation defaults to the project's `general-executor` agent (fallback: `general` when that role is not discovered). State this default in the Plan's Execution Plan section when it helps, and shape each task so a generic executor can consume it without rediscovery — concrete outcome, bounded scope, named files, acceptance criteria, and verification commands. Do not assume a workflow-task pipeline (`.task/TASK-*.json`) exists; the Plan must be executable by `general-executor` from the Plan text alone.
65
66
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pi-maestro-teammate",
3
- "version": "2.4.0",
3
+ "version": "2.5.0",
4
4
  "description": "Pi extension — teammate agent dispatch with DAG task graphs, RPC messaging, and compact TUI",
5
5
  "type": "module",
6
6
  "engines": {
@@ -381,7 +381,7 @@ interface ChildCompactionStateEvent {
381
381
  type: "teammate_compaction_state";
382
382
  recoveryId: string;
383
383
  generation: number;
384
- phase: "pending" | "continuation" | "completed" | "failed";
384
+ phase: "pending" | "continuation" | "completed" | "failed" | "cancelled";
385
385
  reason?: string;
386
386
  }
387
387
 
@@ -392,7 +392,8 @@ function childCompactionStateEvent(message: Record<string, unknown>): ChildCompa
392
392
  || (message.phase !== "pending"
393
393
  && message.phase !== "continuation"
394
394
  && message.phase !== "completed"
395
- && message.phase !== "failed")) return undefined;
395
+ && message.phase !== "failed"
396
+ && message.phase !== "cancelled")) return undefined;
396
397
  return {
397
398
  type: "teammate_compaction_state",
398
399
  recoveryId: message.recoveryId,
@@ -1364,6 +1365,17 @@ export async function runSingleAttempt(
1364
1365
  const eventKey = compactionRecoveryKey(event);
1365
1366
  if (closedCompactionRecoveries.has(eventKey)) return;
1366
1367
  const active = state.compactionRecovery;
1368
+ if (event.phase === "cancelled") {
1369
+ if (active && (active.generation !== event.generation || active.recoveryId !== event.recoveryId)) return;
1370
+ closedCompactionRecoveries.add(eventKey);
1371
+ state.compactionRecovery = undefined;
1372
+ compactionSettlementSwallowed = false;
1373
+ if (timers.compactionRecovery) {
1374
+ clearTimeout(timers.compactionRecovery);
1375
+ timers.compactionRecovery = undefined;
1376
+ }
1377
+ return;
1378
+ }
1367
1379
  const phaseRank = { pending: 0, completed: 1, continuation: 2 } as const;
1368
1380
  let phaseAdvanced = false;
1369
1381
  if (active) {