pi-condense 2.10.5 → 2.10.6

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,12 @@ Published to npm as [`pi-condense`](https://www.npmjs.com/package/pi-condense) (
7
7
  Pushing a `vX.Y.Z` tag triggers `.github/workflows/release.yml`, which runs the tests and
8
8
  publishes via OIDC trusted publishing. See `.agents/skills/release/SKILL.md`.
9
9
 
10
+ ## [2.10.6] - 2026-09-19
11
+
12
+ ### Fixed
13
+
14
+ - `showPruneStatusLine: false` now also suppresses the transient `pruner loaded` startup widget on new and restored sessions.
15
+
10
16
  ## [2.10.5] - 2026-09-15
11
17
 
12
18
  ### Fixed
package/index.ts CHANGED
@@ -827,20 +827,22 @@ export default function (pi: ExtensionAPI) {
827
827
  // Update footer status
828
828
  setPruneStatusWidget(ctx, currentConfig.value, statsAccum.getLiveReclaim(), diagnostics.counts());
829
829
 
830
- ctx.ui.setWidget(
831
- "pruner-boot",
832
- [
833
- `pruner loaded — pruning ${currentConfig.value.enabled ? "ON" : "OFF"} | model: ${currentConfig.value.summarizerModel}`,
834
- ],
835
- { placement: "belowEditor" },
836
- );
837
- setTimeout(() => {
838
- try {
839
- ctx.ui.setWidget("pruner-boot", undefined);
840
- } catch {
841
- // UI owner may be gone after session replacement.
842
- }
843
- }, 10000).unref?.();
830
+ if (currentConfig.value.showPruneStatusLine) {
831
+ ctx.ui.setWidget(
832
+ "pruner-boot",
833
+ [
834
+ `pruner loaded — pruning ${currentConfig.value.enabled ? "ON" : "OFF"} | model: ${currentConfig.value.summarizerModel}`,
835
+ ],
836
+ { placement: "belowEditor" },
837
+ );
838
+ setTimeout(() => {
839
+ try {
840
+ ctx.ui.setWidget("pruner-boot", undefined);
841
+ } catch {
842
+ // UI owner may be gone after session replacement.
843
+ }
844
+ }, 10000).unref?.();
845
+ }
844
846
  });
845
847
 
846
848
  // Rebuild index and stats after tree navigation too (branch may have different history)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pi-condense",
3
- "version": "2.10.5",
3
+ "version": "2.10.6",
4
4
  "description": "Pi coding-agent extension that summarizes completed tool-call batches, replaces raw outputs with short stubs, compresses closed tool-call chains, and recovers any original on demand via context_tree_query.",
5
5
  "author": "Jacek Juraszek",
6
6
  "license": "MIT",
@@ -218,6 +218,7 @@ function bootExtension(
218
218
  autoBudgetThreshold?: number | null;
219
219
  budgetTurnDelta?: number | null;
220
220
  frontierGapThresholdTokens?: number | null;
221
+ showPruneStatusLine?: boolean;
221
222
  } = {},
222
223
  ) {
223
224
  const agentDir = mkdtempSync(join(tmpdir(), "pi-condense-rearm-"));
@@ -229,7 +230,7 @@ function bootExtension(
229
230
  autoBudgetThreshold: options.autoBudgetThreshold === undefined ? 0.5 : options.autoBudgetThreshold,
230
231
  summarizerModel: "default",
231
232
  minBatchChars: 1,
232
- showPruneStatusLine: true,
233
+ showPruneStatusLine: options.showPruneStatusLine ?? true,
233
234
  protectedTools: options.protectedTools ?? [],
234
235
  chainCompression: {
235
236
  enabled: options.chainCompressionEnabled ?? false,
@@ -258,6 +259,7 @@ function bootExtension(
258
259
  const handlers = new Map<string, (event: any, ctx: any) => any>();
259
260
  const commands = new Map<string, (args: string, ctx: any) => Promise<void>>();
260
261
  const notifications: string[] = [];
262
+ const widgets: Array<{ id: string; content: unknown }> = [];
261
263
 
262
264
  const pushPi = (type: string, data?: unknown) => {
263
265
  piAppended.push({ type, data });
@@ -307,7 +309,9 @@ function bootExtension(
307
309
  },
308
310
  ui: {
309
311
  setStatus() {},
310
- setWidget() {},
312
+ setWidget(id: string, content: unknown) {
313
+ widgets.push({ id, content });
314
+ },
311
315
  notify(message: string) {
312
316
  notifications.push(message);
313
317
  },
@@ -315,7 +319,7 @@ function bootExtension(
315
319
  },
316
320
  };
317
321
 
318
- return { handlers, commands, notifications, ctx, pi, piAppended, sessionAppended, appended, branch };
322
+ return { handlers, commands, notifications, widgets, ctx, pi, piAppended, sessionAppended, appended, branch };
319
323
  }
320
324
 
321
325
  async function boot(options?: Parameters<typeof bootExtension>[0]) {
@@ -326,6 +330,14 @@ async function boot(options?: Parameters<typeof bootExtension>[0]) {
326
330
  }
327
331
 
328
332
  describe("reload rearm (issue #6)", () => {
333
+ it("hides the startup widget when the prune status line is disabled", async () => {
334
+ const { handlers, ctx, widgets } = await boot({ showPruneStatusLine: false });
335
+
336
+ await handlers.get("session_start")!({}, ctx);
337
+
338
+ expect(widgets.some(({ id }) => id === "pruner-boot")).toBe(false);
339
+ });
340
+
329
341
  it("falls back to the run-local index at capture when getBranch throws, and the flush-time rescan re-derives the session-wide index", async () => {
330
342
  const { handlers, ctx, notifications, appended } = await boot();
331
343