@ngockhoale/ukit 2.2.10 → 2.2.11

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
@@ -2,6 +2,28 @@
2
2
 
3
3
  All notable changes to UKit are documented here.
4
4
 
5
+ ## 2.2.11 - 2026-08-29
6
+
7
+ Same-day follow-up to 2.2.10. The two premises that release shipped as unverified were checked
8
+ against omp's own installed TypeScript source (`@oh-my-pi/pi-coding-agent` v18.0.10, not a live
9
+ session — omp still was not run) and both hold:
10
+
11
+ - **`steer` after a compaction is accepted, not dropped.** `session-maintenance.ts` fires
12
+ `session_compact` only after `agent.replaceMessages()`/`rebaseAfterCompaction()` already ran, so
13
+ the session is idle at that point, and `agent-session.ts`'s `sendCustomMessage()` non-streaming
14
+ branch appends the message to the live context regardless of `deliverAs`.
15
+ - **`display: true` does trigger a visible re-render.** `extension-ui-controller.ts`'s
16
+ `applyCustomMessageDisplay()` calls `rebuildChatFromMessages()` for the non-streaming case (the
17
+ streaming case renders via the `message_end` event instead).
18
+
19
+ `templates/.omp/hooks/pre/ukit-bridge.js`'s two `TODO(verify)` comments (PLAN.md §3 D3, D4) are
20
+ updated to record this — from "unverified, additive, worst-case-unchanged" to "source-confirmed,
21
+ one rung below a live repro." No runtime behaviour changes; both delivery paths (`steer` +
22
+ `nextTurn`, and the `finalNotice` fallback) stay in place as defense in depth either way. A stale
23
+ local `.omp/hooks/pre/ukit-bridge.js` install artifact in this repo — untracked, regenerated by
24
+ `ukit install`, and out of sync with `templates/.omp/` since before 2.2.10 shipped — was also found
25
+ and resynced; that file is never part of the published package.
26
+
5
27
  ## 2.2.10 - 2026-08-29
6
28
 
7
29
  User report: long omp (Oh My Pi) sessions go idle roughly 15 minutes into a task — no output, no
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ngockhoale/ukit",
3
- "version": "2.2.10",
3
+ "version": "2.2.11",
4
4
  "description": "Install/update an index-first AI workspace for Claude Code, OpenAI Codex, OpenCode, and omp (Oh My Pi).",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -470,8 +470,12 @@ export async function runSessionCompact(pi, event, { projectRoot, context: exten
470
470
  const metadata = runtimeMetadata(event, extensionContext);
471
471
  const payload = buildHookPayload('SessionStart', { ...metadata, source: 'compact' });
472
472
  const result = await runScriptChain(pi, HOOK_EVENT_MAP.session_start, payload, { projectRoot });
473
- // TODO(verify) PLAN.md §3 D3: whether omp still accepts a 'steer' message after a compaction
474
- // is unverified. If it drops steer, the 'nextTurn' copy below preserves prior behavior.
473
+ // VERIFIED (2026-08-29, source read of omp v18.0.10 pi-coding-agent/src) PLAN.md §3 D3:
474
+ // session_compact fires only after agent.replaceMessages()/rebaseAfterCompaction() already
475
+ // ran (session-maintenance.ts), i.e. the session is idle here, and agent-session.ts's
476
+ // sendCustomMessage() non-streaming branch appends the message to the live context
477
+ // regardless of deliverAs — so 'steer' is accepted right after a compaction. Not a live
478
+ // repro, so the 'nextTurn' copy below stays as defense in depth.
475
479
  sendContext(pi, result.context, 'steer');
476
480
  sendContext(pi, result.context, 'nextTurn');
477
481
  return undefined;
@@ -499,9 +503,12 @@ export async function runSessionStop(
499
503
  `[UKit] Stopping with unfinished work: ${evaluation.missingEvidence.join(', ')}.`,
500
504
  evaluation.reason,
501
505
  ].filter(Boolean).join(' ');
502
- // TODO(verify) PLAN.md §3 D4: whether omp honours display:true on a sendMessage payload
503
- // is unverified (omp is not installed). If display is ignored, the finalNotice
504
- // continuation below (the model's own message) is the channel guaranteed to render.
506
+ // VERIFIED (2026-08-29, source read of omp v18.0.10 pi-coding-agent/src) PLAN.md §3 D4:
507
+ // display:true on a non-streaming sendMessage payload triggers
508
+ // extension-ui-controller.ts's applyCustomMessageDisplay() -> rebuildChatFromMessages(),
509
+ // a real immediate TUI re-render (the streaming case renders via the message_end event
510
+ // instead). Not a live repro, so the finalNotice continuation below (the model's own
511
+ // message) stays as a second guaranteed channel.
505
512
  sendContext(pi, [notice], 'nextTurn', { display: true });
506
513
  }
507
514
  return undefined;