pi-squad 0.19.1 → 0.19.3

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.3] - 2026-07-19
11
+
12
+ ### Fixed
13
+
14
+ - Newly generated squad IDs now combine a path-safe readable goal slug with a full UUID, eliminating collisions while retaining recognizable names. Slugs also trim separators introduced at the 40-character boundary, preventing `PUBLISH_FAILED: unsafe squad id`. Existing persisted squad IDs and user-authored task IDs are unchanged.
15
+
16
+ ## [0.19.2] - 2026-07-18
17
+
18
+ ### Fixed
19
+
20
+ - 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.
21
+
10
22
  ## [0.19.1] - 2026-07-18
11
23
 
12
24
  ### Fixed
@@ -84,7 +96,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
84
96
 
85
97
  - Kept failed-review rework in the original squad, preserving task ownership and durable session continuity.
86
98
 
87
- [Unreleased]: https://github.com/picassio/pi-squad/compare/v0.19.1...HEAD
99
+ [Unreleased]: https://github.com/picassio/pi-squad/compare/v0.19.2...HEAD
100
+ [0.19.2]: https://github.com/picassio/pi-squad/compare/v0.19.1...v0.19.2
88
101
  [0.19.1]: https://github.com/picassio/pi-squad/compare/v0.19.0...v0.19.1
89
102
  [0.19.0]: https://github.com/picassio/pi-squad/compare/v0.18.0...v0.19.0
90
103
  [0.18.0]: https://github.com/picassio/pi-squad/compare/v0.17.2...v0.18.0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pi-squad",
3
- "version": "0.19.1",
3
+ "version": "0.19.3",
4
4
  "description": "Multi-agent collaboration extension for pi — task decomposition, dependency management, parallel execution, TUI panel",
5
5
  "type": "module",
6
6
  "scripts": {
package/src/store.ts CHANGED
@@ -701,7 +701,12 @@ export function makeTaskId(title: string): string {
701
701
  .toLowerCase()
702
702
  .replace(/[^a-z0-9]+/g, "-")
703
703
  .replace(/^-|-$/g, "")
704
- .slice(0, 40);
704
+ .slice(0, 40)
705
+ .replace(/-$/, "");
706
+ }
707
+
708
+ export function makeSquadId(goal: string): string {
709
+ return `${makeTaskId(goal) || "squad"}-${randomUUID()}`;
705
710
  }
706
711
 
707
712
  export function squadExists(squadId: string): boolean {
@@ -214,7 +214,7 @@ pi.registerTool({
214
214
  }
215
215
  effective = coerced.value;
216
216
  }
217
- const baseId = store.makeTaskId(effective.goal) || `squad-${prepared?.sha256.slice(0, 12)}`;
217
+ const baseId = store.makeSquadId(effective.goal);
218
218
  const squadId = store.squadExists(baseId) ? `${baseId}-${Date.now().toString(36)}` : baseId;
219
219
  return await startSquad(squadId, effective, ctx.cwd, squadSkillPaths, pi, sessionFile, prepared);
220
220
  },
@@ -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.`;