pi-squad 0.19.0 → 0.19.2

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/CHANGELOG.md CHANGED
@@ -7,6 +7,18 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.19.2] - 2026-07-18
11
+
12
+ ### Fixed
13
+
14
+ - The compact widget now auto-dismisses when a squad is accepted as done through `squad_review`. Review-pending, review-failed, and failed squads keep the widget because they require attention, and explicitly selecting a done squad still displays it.
15
+
16
+ ## [0.19.1] - 2026-07-18
17
+
18
+ ### Fixed
19
+
20
+ - `squad-plan` validator now works from an installed package: Node refuses TypeScript type stripping under `node_modules`, so `validate-spec.mjs` stages the real validator sources in a temp directory before importing them. Validation output is byte-identical.
21
+
10
22
  ## [0.19.0] - 2026-07-18
11
23
 
12
24
  ### Added
@@ -78,7 +90,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
78
90
 
79
91
  - Kept failed-review rework in the original squad, preserving task ownership and durable session continuity.
80
92
 
81
- [Unreleased]: https://github.com/picassio/pi-squad/compare/v0.19.0...HEAD
93
+ [Unreleased]: https://github.com/picassio/pi-squad/compare/v0.19.2...HEAD
94
+ [0.19.2]: https://github.com/picassio/pi-squad/compare/v0.19.1...v0.19.2
95
+ [0.19.1]: https://github.com/picassio/pi-squad/compare/v0.19.0...v0.19.1
82
96
  [0.19.0]: https://github.com/picassio/pi-squad/compare/v0.18.0...v0.19.0
83
97
  [0.18.0]: https://github.com/picassio/pi-squad/compare/v0.17.2...v0.18.0
84
98
  [0.17.2]: https://github.com/picassio/pi-squad/compare/v0.17.1...v0.17.2
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pi-squad",
3
- "version": "0.19.0",
3
+ "version": "0.19.2",
4
4
  "description": "Multi-agent collaboration extension for pi — task decomposition, dependency management, parallel execution, TUI panel",
5
5
  "type": "module",
6
6
  "scripts": {
@@ -10,8 +10,10 @@
10
10
  */
11
11
  import { registerHooks } from "node:module";
12
12
  import { createHash } from "node:crypto";
13
- import { readFileSync } from "node:fs";
14
- import { resolve } from "node:path";
13
+ import { copyFileSync, mkdtempSync, readFileSync, rmSync } from "node:fs";
14
+ import { tmpdir } from "node:os";
15
+ import { join, resolve } from "node:path";
16
+ import { fileURLToPath, pathToFileURL } from "node:url";
15
17
 
16
18
  if (!process.features.typescript) {
17
19
  console.error(
@@ -43,7 +45,20 @@ if (!specArg) {
43
45
  }
44
46
  const specPath = resolve(process.cwd(), specArg);
45
47
 
46
- const { prepareSpec } = await import(new URL("../../file-spec.ts", import.meta.url).href);
48
+ // Node refuses type stripping for files under node_modules, which is exactly
49
+ // where an installed pi-squad lives. Import the real validator from a temp
50
+ // copy outside node_modules; its only runtime deps are node builtins.
51
+ const sourceDir = fileURLToPath(new URL("../..", import.meta.url));
52
+ const stageDir = mkdtempSync(join(tmpdir(), "pi-squad-validate-"));
53
+ for (const file of ["file-spec.ts", "types.ts"]) {
54
+ copyFileSync(join(sourceDir, file), join(stageDir, file));
55
+ }
56
+ let prepareSpec;
57
+ try {
58
+ ({ prepareSpec } = await import(pathToFileURL(join(stageDir, "file-spec.ts")).href));
59
+ } finally {
60
+ rmSync(stageDir, { recursive: true, force: true });
61
+ }
47
62
 
48
63
  try {
49
64
  const raw = readFileSync(specPath);
@@ -356,6 +356,10 @@ pi.registerTool({
356
356
  store.saveSquad(squad);
357
357
  forceWidgetUpdate();
358
358
  const accepted = squad.status === "done";
359
+ // An accepted squad needs no further attention: auto-dismiss its widget.
360
+ // Review-pending, review-failed, and failed squads stay visible, and the
361
+ // user can still reselect a done squad explicitly with /squad select.
362
+ if (accepted && runtime.activeSquadId === id) focusSquad(null);
359
363
  const text = accepted
360
364
  ? `Independent orchestrator review recorded for '${id}' (${params.verdict}). The squad is now accepted as done.`
361
365
  : `Independent review FAILED for '${id}'. The squad remains review-required. Fix every issue, rerun verification/E2E, then submit a fresh squad_review.`;