@pi-unipi/unipi 2.19.1 → 2.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
@@ -6,6 +6,18 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [2.19.3] — 2026-09-16
10
+
11
+ ### Fixed
12
+
13
+ - `fusion`: **sidekick blocks get the standard tool highlight again.** Both fusion tools declared `renderShell: "self"`, which routes `renderCall`/`renderResult` into a bare `Container` and bypasses `ToolExecutionComponent`'s `toolPendingBg`/`toolSuccessBg`/`toolErrorBg` box. Once the `customMessageBg` frame was removed in 2.19.1, sidekick activity rendered as unhighlighted plain text — plainer than the lead's own tool calls. Dropping the self shell lets pi wrap the transcript in the same tinted block every other tool gets, with the normal pending → success/error repaint.
14
+
15
+ ## [2.19.2] — 2026-09-16
16
+
17
+ ### Fixed
18
+
19
+ - `footer`: **the update overlay no longer leaves the TUI dead after pressing `y`.** The Glance editor install (`installGlanceEditor`) detaches the default editor, but any overlay opened before the swap — the updater prompt opens at `session_start`, the swap lands ~3.5s later — keeps that component as its `preFocus` restore target. On `hideOverlay()` the TUI refocused the detached editor, so every keystroke (including Ctrl+C) was routed to an unmounted component and the session had to be killed. After the swap we now walk `overlayStack` and retarget any `preFocus` pointing at an unmounted non-overlay component to the newly installed editor; `preFocus` entries referencing a live overlay or a still-mounted component are left alone. Regression covered in `glance-focus.test.ts`.
20
+
9
21
  ## [2.19.1] — 2026-09-16
10
22
 
11
23
  ### Changed
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-unipi/unipi",
3
- "version": "2.19.1",
3
+ "version": "2.19.3",
4
4
  "description": "All-in-one extension suite for Pi coding agent",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -84,29 +84,29 @@
84
84
  "typebox": "^1.1.38"
85
85
  },
86
86
  "dependencies": {
87
- "@pi-unipi/ask-user": "2.19.1",
88
- "@pi-unipi/background-tasks": "2.19.1",
89
- "@pi-unipi/btw": "2.19.1",
90
- "@pi-unipi/command-enchantment": "2.19.1",
91
- "@pi-unipi/compactor": "2.19.1",
92
- "@pi-unipi/core": "2.19.1",
93
- "@pi-unipi/footer": "2.19.1",
94
- "@pi-unipi/image": "2.19.1",
95
- "@pi-unipi/fusion": "2.19.1",
96
- "@pi-unipi/info-screen": "2.19.1",
97
- "@pi-unipi/input-shortcuts": "2.19.1",
98
- "@pi-unipi/kanboard": "2.19.1",
99
- "@pi-unipi/mcp": "2.19.1",
100
- "@pi-unipi/memory": "2.19.1",
101
- "@pi-unipi/milestone": "2.19.1",
102
- "@pi-unipi/notify": "2.19.1",
103
- "@pi-unipi/ralph": "2.19.1",
104
- "@pi-unipi/subagents": "2.19.1",
105
- "@pi-unipi/trajectory": "2.19.1",
106
- "@pi-unipi/updater": "2.19.1",
107
- "@pi-unipi/utility": "2.19.1",
108
- "@pi-unipi/web-api": "2.19.1",
109
- "@pi-unipi/workflow": "2.19.1"
87
+ "@pi-unipi/ask-user": "2.19.3",
88
+ "@pi-unipi/background-tasks": "2.19.3",
89
+ "@pi-unipi/btw": "2.19.3",
90
+ "@pi-unipi/command-enchantment": "2.19.3",
91
+ "@pi-unipi/compactor": "2.19.3",
92
+ "@pi-unipi/core": "2.19.3",
93
+ "@pi-unipi/footer": "2.19.3",
94
+ "@pi-unipi/image": "2.19.3",
95
+ "@pi-unipi/fusion": "2.19.3",
96
+ "@pi-unipi/info-screen": "2.19.3",
97
+ "@pi-unipi/input-shortcuts": "2.19.3",
98
+ "@pi-unipi/kanboard": "2.19.3",
99
+ "@pi-unipi/mcp": "2.19.3",
100
+ "@pi-unipi/memory": "2.19.3",
101
+ "@pi-unipi/milestone": "2.19.3",
102
+ "@pi-unipi/notify": "2.19.3",
103
+ "@pi-unipi/ralph": "2.19.3",
104
+ "@pi-unipi/subagents": "2.19.3",
105
+ "@pi-unipi/trajectory": "2.19.3",
106
+ "@pi-unipi/updater": "2.19.3",
107
+ "@pi-unipi/utility": "2.19.3",
108
+ "@pi-unipi/web-api": "2.19.3",
109
+ "@pi-unipi/workflow": "2.19.3"
110
110
  },
111
111
  "devDependencies": {
112
112
  "@earendil-works/pi-agent-core": "^0.84.0",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-unipi/ask-user",
3
- "version": "2.19.1",
3
+ "version": "2.19.3",
4
4
  "description": "Structured user input tool for Pi coding agent — single-select, multi-select, freeform",
5
5
  "type": "module",
6
6
  "main": "index.ts",
@@ -40,7 +40,7 @@
40
40
  "access": "public"
41
41
  },
42
42
  "dependencies": {
43
- "@pi-unipi/core": "2.19.1"
43
+ "@pi-unipi/core": "2.19.3"
44
44
  },
45
45
  "peerDependencies": {
46
46
  "@earendil-works/pi-coding-agent": "^0.84.0",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-unipi/command-enchantment",
3
- "version": "2.19.1",
3
+ "version": "2.19.3",
4
4
  "description": "Enhanced TUI autocomplete for /unipi:* commands — colored, sorted, and grouped by package",
5
5
  "type": "module",
6
6
  "main": "src/index.ts",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-unipi/background-tasks",
3
- "version": "2.19.1",
3
+ "version": "2.19.3",
4
4
  "description": "Background tasks for UniPi — durable shell jobs and delegated background agents with a footer dock",
5
5
  "type": "module",
6
6
  "main": "src/index.ts",
@@ -10,7 +10,7 @@
10
10
  },
11
11
  "dependencies": {
12
12
  "@earendil-works/pi-ai": "^0.84.0",
13
- "@pi-unipi/core": "2.19.1",
13
+ "@pi-unipi/core": "2.19.3",
14
14
  "turndown": "^7.2.4"
15
15
  },
16
16
  "devDependencies": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-unipi/btw",
3
- "version": "2.19.1",
3
+ "version": "2.19.3",
4
4
  "description": "A pi extension for parallel side conversations with /unipi:btw — part of the Unipi suite",
5
5
  "type": "module",
6
6
  "main": "extensions/btw.ts",
@@ -37,7 +37,7 @@
37
37
  "@earendil-works/pi-tui": "^0.84.0"
38
38
  },
39
39
  "dependencies": {
40
- "@pi-unipi/core": "2.19.1"
40
+ "@pi-unipi/core": "2.19.3"
41
41
  },
42
42
  "pi": {
43
43
  "extensions": [
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-unipi/compactor",
3
- "version": "2.19.1",
3
+ "version": "2.19.3",
4
4
  "description": "Context engine for Pi — zero-LLM compaction, session continuity, sandbox execution, and tool display optimization",
5
5
  "type": "module",
6
6
  "main": "src/index.ts",
@@ -34,8 +34,8 @@
34
34
  "access": "public"
35
35
  },
36
36
  "dependencies": {
37
- "@pi-unipi/core": "2.19.1",
38
- "@pi-unipi/info-screen": "2.19.1",
37
+ "@pi-unipi/core": "2.19.3",
38
+ "@pi-unipi/info-screen": "2.19.3",
39
39
  "@earendil-works/pi-agent-core": "^0.84.0"
40
40
  },
41
41
  "peerDependencies": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-unipi/core",
3
- "version": "2.19.1",
3
+ "version": "2.19.3",
4
4
  "description": "Shared utilities, event types, and constants for Unipi extension suite",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-unipi/footer",
3
- "version": "2.19.1",
3
+ "version": "2.19.3",
4
4
  "description": "Persistent status bar for Unipi — subscribes to UNIPI_EVENTS and renders key stats from all unipi packages",
5
5
  "type": "module",
6
6
  "main": "index.ts",
@@ -32,8 +32,8 @@
32
32
  "access": "public"
33
33
  },
34
34
  "dependencies": {
35
- "@pi-unipi/core": "2.19.1",
36
- "@pi-unipi/background-tasks": "2.19.1"
35
+ "@pi-unipi/core": "2.19.3",
36
+ "@pi-unipi/background-tasks": "2.19.3"
37
37
  },
38
38
  "peerDependencies": {
39
39
  "@earendil-works/pi-coding-agent": "^0.84.0",
@@ -451,6 +451,28 @@ function installGlanceEditor(
451
451
  };
452
452
  }),
453
453
  );
454
+ // setCustomEditorComponent detaches the previous editor, but any open
455
+ // overlay captured it as its preFocus restore target — closing the overlay
456
+ // would refocus a dead component and swallow all input. Right after the
457
+ // swap, getFocusedComponent() is the new editor; retarget stale preFocus
458
+ // entries to it (skip preFocus that points at a live overlay).
459
+ const newEditor = typeof tui?.getFocusedComponent === "function" ? tui.getFocusedComponent() : null;
460
+ const internals = tui as ({
461
+ overlayStack?: Array<{ component?: unknown; preFocus?: unknown }>;
462
+ isComponentMounted?: (c: unknown) => boolean;
463
+ }) | null | undefined;
464
+ const overlayStack = internals?.overlayStack;
465
+ const isMounted = typeof internals?.isComponentMounted === "function"
466
+ ? internals.isComponentMounted.bind(tui)
467
+ : undefined;
468
+ if (newEditor && overlayStack && isMounted) {
469
+ const overlayComponents = new Set(overlayStack.map((entry) => entry.component));
470
+ for (const entry of overlayStack) {
471
+ if (entry.preFocus && entry.preFocus !== newEditor && !overlayComponents.has(entry.preFocus) && !isMounted(entry.preFocus)) {
472
+ entry.preFocus = newEditor;
473
+ }
474
+ }
475
+ }
454
476
  if (overlayOwner && tui) tui.setFocus(overlayOwner);
455
477
  st.glanceInstalled = true;
456
478
  } catch {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-unipi/fusion",
3
- "version": "2.19.1",
3
+ "version": "2.19.3",
4
4
  "description": "Devin-style model picker, fusion presets (lead + sidekick), and Local Fusion runtime for UniPi",
5
5
  "type": "module",
6
6
  "main": "src/index.ts",
@@ -32,8 +32,8 @@
32
32
  "access": "public"
33
33
  },
34
34
  "dependencies": {
35
- "@pi-unipi/core": "2.19.1",
36
- "@pi-unipi/subagents": "2.19.1"
35
+ "@pi-unipi/core": "2.19.3",
36
+ "@pi-unipi/subagents": "2.19.3"
37
37
  },
38
38
  "peerDependencies": {
39
39
  "@earendil-works/pi-ai": "^0.84.0",
@@ -178,7 +178,6 @@ export function registerFusionTools(pi: ExtensionAPI, deps: FusionToolDeps): voi
178
178
  label: "Sidekick",
179
179
  description: "Hand off work to your persistent sidekick subagent (one per session; context and shells persist across handoffs; runs on the same machine). block:true (default) waits and returns the report. block:false returns immediately and the report arrives later as a <subagent_completion_notification>. Calling again while a handoff is running injects the message as an interrupt rather than starting a second sidekick.",
180
180
  parameters: SidekickParams,
181
- renderShell: "self",
182
181
  renderCall: (args, theme) => new Text(`${theme.fg("toolTitle", theme.bold("◆ sidekick"))} ${theme.fg("dim", firstLine(String(args.message)).slice(0, 100))}`, 0, 0),
183
182
  renderResult: (result, options, theme) => renderToolTranscript(result, options, theme as unknown as ThemeLike, "sidekick"),
184
183
  async execute(_toolCallId, params, signal, onUpdate, ctx) {
@@ -214,7 +213,6 @@ export function registerFusionTools(pi: ExtensionAPI, deps: FusionToolDeps): voi
214
213
  label: "Read Sidekick",
215
214
  description: "Read a sidekick handoff report by agent_id (omit for the latest). block:true waits for completion (default timeout 2700s when omitted); block:false returns the current progress snapshot immediately.",
216
215
  parameters: ReadSubagentParams,
217
- renderShell: "self",
218
216
  renderCall: (args, theme) => new Text(`${theme.fg("toolTitle", theme.bold("◆ read_subagent"))} ${theme.fg("dim", args.block === false ? "· snapshot" : "· waiting")}`, 0, 0),
219
217
  renderResult: (result, options, theme) => renderToolTranscript(result, options, theme as unknown as ThemeLike, "read_subagent"),
220
218
  async execute(_toolCallId, params, signal, onUpdate, ctx) {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-unipi/image",
3
- "version": "2.19.1",
3
+ "version": "2.19.3",
4
4
  "description": "Image generation and image recognition tools for the Pi coding agent",
5
5
  "type": "module",
6
6
  "main": "src/index.ts",
@@ -34,7 +34,7 @@
34
34
  "access": "public"
35
35
  },
36
36
  "dependencies": {
37
- "@pi-unipi/core": "2.19.1"
37
+ "@pi-unipi/core": "2.19.3"
38
38
  },
39
39
  "peerDependencies": {
40
40
  "@earendil-works/pi-ai": "^0.84.0",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-unipi/info-screen",
3
- "version": "2.19.1",
3
+ "version": "2.19.3",
4
4
  "description": "Dashboard and module registry for Unipi — configurable info overlay with tabbed groups",
5
5
  "type": "module",
6
6
  "main": "index.ts",
@@ -33,7 +33,7 @@
33
33
  "access": "public"
34
34
  },
35
35
  "dependencies": {
36
- "@pi-unipi/core": "2.19.1"
36
+ "@pi-unipi/core": "2.19.3"
37
37
  },
38
38
  "peerDependencies": {
39
39
  "@earendil-works/pi-coding-agent": "^0.84.0",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-unipi/input-shortcuts",
3
- "version": "2.19.1",
3
+ "version": "2.19.3",
4
4
  "description": "Keyboard shortcuts for stash/restore, undo/redo, clipboard, and thinking toggle — chord-based overlay system",
5
5
  "type": "module",
6
6
  "main": "src/index.ts",
@@ -33,7 +33,7 @@
33
33
  "access": "public"
34
34
  },
35
35
  "dependencies": {
36
- "@pi-unipi/core": "2.19.1"
36
+ "@pi-unipi/core": "2.19.3"
37
37
  },
38
38
  "peerDependencies": {
39
39
  "@earendil-works/pi-coding-agent": "^0.84.0",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-unipi/kanboard",
3
- "version": "2.19.1",
3
+ "version": "2.19.3",
4
4
  "description": "Visualization layer for unipi workflow — HTTP server with htmx/Alpine.js UI, modular parsers, TUI overlay, and kanban board",
5
5
  "type": "module",
6
6
  "main": "index.ts",
@@ -39,7 +39,7 @@
39
39
  "access": "public"
40
40
  },
41
41
  "dependencies": {
42
- "@pi-unipi/core": "2.19.1"
42
+ "@pi-unipi/core": "2.19.3"
43
43
  },
44
44
  "peerDependencies": {
45
45
  "@earendil-works/pi-coding-agent": "^0.84.0",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-unipi/mcp",
3
- "version": "2.19.1",
3
+ "version": "2.19.3",
4
4
  "description": "MCP server management extension for Pi coding agent — browse, add, configure, and use MCP servers",
5
5
  "type": "module",
6
6
  "main": "src/index.ts",
@@ -30,7 +30,7 @@
30
30
  "test": "npx tsx --test tests/**/*.test.ts"
31
31
  },
32
32
  "dependencies": {
33
- "@pi-unipi/core": "2.19.1"
33
+ "@pi-unipi/core": "2.19.3"
34
34
  },
35
35
  "peerDependencies": {
36
36
  "@earendil-works/pi-coding-agent": "^0.84.0",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-unipi/memory",
3
- "version": "2.19.1",
3
+ "version": "2.19.3",
4
4
  "description": "Persistent cross-session memory with MemPalace backend (auto-installed) and SQLite fallback for Pi coding agent",
5
5
  "type": "module",
6
6
  "main": "index.ts",
@@ -39,8 +39,8 @@
39
39
  "README.md"
40
40
  ],
41
41
  "dependencies": {
42
- "@pi-unipi/core": "2.19.1",
43
- "@pi-unipi/info-screen": "2.19.1",
42
+ "@pi-unipi/core": "2.19.3",
43
+ "@pi-unipi/info-screen": "2.19.3",
44
44
  "js-yaml": "^4.1.0"
45
45
  },
46
46
  "peerDependencies": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-unipi/milestone",
3
- "version": "2.19.1",
3
+ "version": "2.19.3",
4
4
  "description": "Lifecycle layer for project-level goals — MILESTONES.md tracking, session hooks, auto-sync",
5
5
  "type": "module",
6
6
  "main": "index.ts",
@@ -32,7 +32,7 @@
32
32
  "access": "public"
33
33
  },
34
34
  "dependencies": {
35
- "@pi-unipi/core": "2.19.1"
35
+ "@pi-unipi/core": "2.19.3"
36
36
  },
37
37
  "peerDependencies": {
38
38
  "@earendil-works/pi-coding-agent": "^0.84.0",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-unipi/notify",
3
- "version": "2.19.1",
3
+ "version": "2.19.3",
4
4
  "description": "Cross-platform notification extension for Pi — native OS, Gotify, and Telegram notifications for agent lifecycle events",
5
5
  "type": "module",
6
6
  "main": "index.ts",
@@ -34,7 +34,7 @@
34
34
  "access": "public"
35
35
  },
36
36
  "dependencies": {
37
- "@pi-unipi/core": "2.19.1",
37
+ "@pi-unipi/core": "2.19.3",
38
38
  "node-notifier": "^10.0.1"
39
39
  },
40
40
  "peerDependencies": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-unipi/ralph",
3
- "version": "2.19.1",
3
+ "version": "2.19.3",
4
4
  "description": "Long-running iterative development loops for Pi coding agent",
5
5
  "type": "module",
6
6
  "main": "index.ts",
@@ -31,8 +31,8 @@
31
31
  "test": "npx tsx --test reminder.test.ts"
32
32
  },
33
33
  "dependencies": {
34
- "@pi-unipi/core": "2.19.1",
35
- "@pi-unipi/info-screen": "2.19.1"
34
+ "@pi-unipi/core": "2.19.3",
35
+ "@pi-unipi/info-screen": "2.19.3"
36
36
  },
37
37
  "peerDependencies": {
38
38
  "@earendil-works/pi-ai": "^0.84.0",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-unipi/subagents",
3
- "version": "2.19.1",
3
+ "version": "2.19.3",
4
4
  "description": "Subagents for UniPi — parallel execution, file locking, workflow integration",
5
5
  "type": "module",
6
6
  "main": "src/index.ts",
@@ -9,7 +9,7 @@
9
9
  "test": "npx tsx --test src/__tests__/*.test.ts"
10
10
  },
11
11
  "dependencies": {
12
- "@pi-unipi/core": "2.19.1",
12
+ "@pi-unipi/core": "2.19.3",
13
13
  "@earendil-works/pi-agent-core": "^0.84.0",
14
14
  "acorn": "8.18.0"
15
15
  },
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-unipi/trajectory",
3
- "version": "2.19.1",
3
+ "version": "2.19.3",
4
4
  "description": "Live UniPi trajectory inspector for Pi sessions",
5
5
  "type": "module",
6
6
  "main": "index.ts",
@@ -48424,6 +48424,18 @@ function installGlanceEditor(st, uiHost) {
48424
48424
  };
48425
48425
  })
48426
48426
  );
48427
+ const newEditor = typeof tui?.getFocusedComponent === "function" ? tui.getFocusedComponent() : null;
48428
+ const internals = tui;
48429
+ const overlayStack = internals?.overlayStack;
48430
+ const isMounted = typeof internals?.isComponentMounted === "function" ? internals.isComponentMounted.bind(tui) : void 0;
48431
+ if (newEditor && overlayStack && isMounted) {
48432
+ const overlayComponents = new Set(overlayStack.map((entry) => entry.component));
48433
+ for (const entry of overlayStack) {
48434
+ if (entry.preFocus && entry.preFocus !== newEditor && !overlayComponents.has(entry.preFocus) && !isMounted(entry.preFocus)) {
48435
+ entry.preFocus = newEditor;
48436
+ }
48437
+ }
48438
+ }
48427
48439
  if (overlayOwner && tui) tui.setFocus(overlayOwner);
48428
48440
  st.glanceInstalled = true;
48429
48441
  } catch {
@@ -53927,7 +53939,6 @@ function registerFusionTools(pi, deps) {
53927
53939
  label: "Sidekick",
53928
53940
  description: "Hand off work to your persistent sidekick subagent (one per session; context and shells persist across handoffs; runs on the same machine). block:true (default) waits and returns the report. block:false returns immediately and the report arrives later as a <subagent_completion_notification>. Calling again while a handoff is running injects the message as an interrupt rather than starting a second sidekick.",
53929
53941
  parameters: SidekickParams,
53930
- renderShell: "self",
53931
53942
  renderCall: (args, theme) => new Text12(`${theme.fg("toolTitle", theme.bold("\u25C6 sidekick"))} ${theme.fg("dim", firstLine3(String(args.message)).slice(0, 100))}`, 0, 0),
53932
53943
  renderResult: (result2, options, theme) => renderToolTranscript(result2, options, theme, "sidekick"),
53933
53944
  async execute(_toolCallId, params, signal, onUpdate, ctx) {
@@ -53965,7 +53976,6 @@ ${progressText(runtime, handoff.id)}`, { progress: runtime.progress(handoff.id),
53965
53976
  label: "Read Sidekick",
53966
53977
  description: "Read a sidekick handoff report by agent_id (omit for the latest). block:true waits for completion (default timeout 2700s when omitted); block:false returns the current progress snapshot immediately.",
53967
53978
  parameters: ReadSubagentParams,
53968
- renderShell: "self",
53969
53979
  renderCall: (args, theme) => new Text12(`${theme.fg("toolTitle", theme.bold("\u25C6 read_subagent"))} ${theme.fg("dim", args.block === false ? "\xB7 snapshot" : "\xB7 waiting")}`, 0, 0),
53970
53980
  renderResult: (result2, options, theme) => renderToolTranscript(result2, options, theme, "read_subagent"),
53971
53981
  async execute(_toolCallId, params, signal, onUpdate, ctx) {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-unipi/updater",
3
- "version": "2.19.1",
3
+ "version": "2.19.3",
4
4
  "description": "Auto-updater, changelog browser, and readme browser for Unipi — checks npm registry, renders CHANGELOG.md and README.md files in TUI overlays",
5
5
  "type": "module",
6
6
  "main": "index.ts",
@@ -34,7 +34,7 @@
34
34
  "access": "public"
35
35
  },
36
36
  "dependencies": {
37
- "@pi-unipi/core": "2.19.1"
37
+ "@pi-unipi/core": "2.19.3"
38
38
  },
39
39
  "peerDependencies": {
40
40
  "@earendil-works/pi-coding-agent": "^0.84.0",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-unipi/utility",
3
- "version": "2.19.1",
3
+ "version": "2.19.3",
4
4
  "description": "Utility commands and tools for Pi coding agent — lifecycle, diagnostics, cache, analytics, display, batch execution",
5
5
  "type": "module",
6
6
  "main": "src/index.ts",
@@ -36,7 +36,7 @@
36
36
  "access": "public"
37
37
  },
38
38
  "dependencies": {
39
- "@pi-unipi/core": "2.19.1"
39
+ "@pi-unipi/core": "2.19.3"
40
40
  },
41
41
  "devDependencies": {},
42
42
  "peerDependencies": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-unipi/web-api",
3
- "version": "2.19.1",
3
+ "version": "2.19.3",
4
4
  "description": "Web search, read, and summarize tools with provider-based backend selection for Pi coding agent",
5
5
  "type": "module",
6
6
  "main": "src/index.ts",
@@ -31,7 +31,7 @@
31
31
  "README.md"
32
32
  ],
33
33
  "dependencies": {
34
- "@pi-unipi/core": "2.19.1",
34
+ "@pi-unipi/core": "2.19.3",
35
35
  "defuddle": "^0.18.1",
36
36
  "linkedom": "^0.18.12",
37
37
  "wreq-js": "^2.3.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-unipi/workflow",
3
- "version": "2.19.1",
3
+ "version": "2.19.3",
4
4
  "description": "Structured development workflow commands for Pi coding agent",
5
5
  "type": "module",
6
6
  "main": "index.ts",
@@ -30,7 +30,7 @@
30
30
  "access": "public"
31
31
  },
32
32
  "dependencies": {
33
- "@pi-unipi/core": "2.19.1"
33
+ "@pi-unipi/core": "2.19.3"
34
34
  },
35
35
  "peerDependencies": {
36
36
  "@earendil-works/pi-ai": "^0.84.0",