@pellux/goodvibes-tui 0.19.4 → 0.19.7

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
@@ -4,6 +4,48 @@ All notable changes to GoodVibes TUI.
4
4
 
5
5
  ---
6
6
 
7
+ ## [0.19.7] - 2026-04-18
8
+
9
+ ### Changed
10
+ - Bumped `@pellux/goodvibes-sdk` from 0.21.10 to 0.21.12.
11
+
12
+ ### Investigation: No TUI-side changes required
13
+
14
+ SDK 0.21.12 ships three additive changes to the daemon:
15
+
16
+ 1. **`kind: 'message'` at `POST /api/sessions/:id/messages`** now calls `sessionBroker.submitMessage()` (previously called `appendCompanionMessage` + `publishConversationFollowup` only). A real turn is started and the full agent event chain (TURN_STARTED, STREAM_DELTA, TURN_COMPLETED) streams back.
17
+
18
+ 2. **`kind: 'followup'`** — new kind value that always spawns an agent. Full agent event chain streams to companion SSE.
19
+
20
+ 3. **`GET /api/sessions/:id/events`** — new session-scoped SSE endpoint for companion consumption.
21
+
22
+ 4. **`'turn'` added to `DEFAULT_DOMAINS`** in the control-plane gateway — turn events are now auto-delivered to all SSE subscribers.
23
+
24
+ Investigation of the TUI's `COMPANION_MESSAGE_RECEIVED` subscription in `src/runtime/bootstrap-core.ts` found **no double-render risk**: SDK 0.21.12 emits `COMPANION_MESSAGE_RECEIVED` _before_ calling `submitMessage`, so the user message is shown once (via the existing subscription), and the AI response streams in via the existing `uiServices.events.turns` path. These are distinct content on distinct code paths. No deduplication needed.
25
+
26
+ The `'turn'` addition to `DEFAULT_DOMAINS` affects external SSE subscribers (companion app). The TUI consumes turn events in-process via the runtime bus — unaffected.
27
+
28
+ Updated `docs/foundation-artifacts/operator-contract.json` SDK version field to `0.21.12`.
29
+
30
+ ---
31
+
32
+ ## [0.19.6] - 2026-04-18
33
+
34
+ ### Fixed
35
+ - Bumped `@pellux/goodvibes-sdk` to 0.21.10 (up from 0.21.8 which was pinned by mistake in 0.19.5). 0.19.5 subscribed to the `COMPANION_MESSAGE_RECEIVED` runtime event but remained on an SDK version that didn't emit it, so the "companion main-chat messages render in TUI" fix from 0.19.5 didn't actually work. 0.19.6 corrects the dep so the subscription is live against an SDK that emits the event. Removed the `as Parameters<typeof runtimeBus.on>[0]` type cast that was hiding the version gap.
36
+
37
+ ---
38
+
39
+ ## [0.19.5] - 2026-04-18
40
+
41
+ ### Fixed
42
+ - Companion-app messages sent via POST `/api/sessions/:id/messages` (kind `message`) are now rendered in the TUI conversation view immediately upon receipt. Previously the 202 was acknowledged and the message was persisted (SDK 0.21.9), but the TUI conversation never displayed it. The fix subscribes to the new `COMPANION_MESSAGE_RECEIVED` runtime bus event (emitted by the daemon's HTTP router after persistence, added in SDK 0.21.10) and calls `conversation.addUserMessage()` to surface the message inline.
43
+
44
+ ### Changed
45
+ - SDK dependency remains `@pellux/goodvibes-sdk@0.21.8` (published); the `COMPANION_MESSAGE_RECEIVED` event type is cast at the call-site until SDK 0.21.10 is available on npm.
46
+
47
+ ---
48
+
7
49
  ## [0.19.4] - 2026-04-18
8
50
 
9
51
  ### Changed
package/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  [![CI](https://github.com/mgd34msu/goodvibes-tui/actions/workflows/ci.yml/badge.svg)](https://github.com/mgd34msu/goodvibes-tui/actions/workflows/ci.yml)
4
4
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
5
- [![Version](https://img.shields.io/badge/version-0.19.4-blue.svg)](https://github.com/mgd34msu/goodvibes-tui)
5
+ [![Version](https://img.shields.io/badge/version-0.19.7-blue.svg)](https://github.com/mgd34msu/goodvibes-tui)
6
6
 
7
7
  A terminal-native AI coding, operations, automation, knowledge, and integration console with a typed runtime, omnichannel surfaces, structured memory/knowledge, and a raw ANSI renderer.
8
8
 
@@ -3,7 +3,7 @@
3
3
  "product": {
4
4
  "id": "goodvibes",
5
5
  "surface": "operator",
6
- "version": "0.21.8"
6
+ "version": "0.21.12"
7
7
  },
8
8
  "auth": {
9
9
  "modes": [
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pellux/goodvibes-tui",
3
- "version": "0.19.4",
3
+ "version": "0.19.7",
4
4
  "description": "Terminal-native GoodVibes product for coding, operations, automation, knowledge, channels, and daemon-backed control-plane workflows.",
5
5
  "type": "module",
6
6
  "main": "src/main.ts",
@@ -89,7 +89,7 @@
89
89
  "@anthropic-ai/vertex-sdk": "^0.16.0",
90
90
  "@ast-grep/napi": "^0.42.0",
91
91
  "@aws/bedrock-token-generator": "^1.1.0",
92
- "@pellux/goodvibes-sdk": "0.21.8",
92
+ "@pellux/goodvibes-sdk": "0.21.12",
93
93
  "bash-language-server": "^5.6.0",
94
94
  "fuse.js": "^7.1.0",
95
95
  "graphql": "^16.13.2",
@@ -16,6 +16,7 @@ import type { MutableRuntimeState } from '@pellux/goodvibes-sdk/platform/runtime
16
16
  import type { BootstrapOptions } from './context.ts';
17
17
  import { createFeatureFlagManager } from '@pellux/goodvibes-sdk/platform/runtime/feature-flags/index';
18
18
  import { RuntimeEventBus } from '@pellux/goodvibes-sdk/platform/runtime/events/index';
19
+ import type { SessionEvent } from '@pellux/goodvibes-sdk/platform/runtime/events/index';
19
20
  import { createRuntimeStore, createDomainDispatch, type RuntimeStore } from './store/index.ts';
20
21
  import { ForensicsCollector, ForensicsRegistry } from '@pellux/goodvibes-sdk/platform/runtime/forensics/index';
21
22
  import {
@@ -285,6 +286,23 @@ export async function initializeBootstrapCore(
285
286
  wrfcController: services.wrfcController,
286
287
  });
287
288
 
289
+ // Subscribe to companion follow-up messages received from the daemon's HTTP layer.
290
+ // The daemon emits COMPANION_MESSAGE_RECEIVED on the runtime bus (SDK 0.21.10+).
291
+ // In SDK 0.21.12, kind='message' at POST /api/sessions/:id/messages now also calls
292
+ // sessionBroker.submitMessage(), starting a real turn. COMPANION_MESSAGE_RECEIVED
293
+ // still fires BEFORE submitMessage so the user message appears immediately in the
294
+ // conversation view, and the AI response streams in via the normal turn path.
295
+ // No double-render: COMPANION_MESSAGE_RECEIVED adds the user message once; the turn
296
+ // path adds the AI response. Both paths are correctly wired with no changes required.
297
+ // after persisting the message, so the TUI conversation view can render it immediately.
298
+ runtimeUnsubs.push(runtimeBus.on<Extract<SessionEvent, { type: 'COMPANION_MESSAGE_RECEIVED' }>>(
299
+ 'COMPANION_MESSAGE_RECEIVED',
300
+ ({ payload }) => {
301
+ conversation.addUserMessage(payload.body);
302
+ requestRender();
303
+ },
304
+ ));
305
+
288
306
  providerRegistry.startWatching(runtimeBus);
289
307
 
290
308
  const webhookUrls = (configManager.getCategory('notifications') as { webhookUrls?: string[] }).webhookUrls ?? [];
package/src/version.ts CHANGED
@@ -6,7 +6,7 @@ import { join } from 'node:path';
6
6
  // The prebuild script updates the fallback value before compilation.
7
7
  // Uses import.meta.dir (Bun) to locate package.json relative to this file,
8
8
  // which is correct regardless of the process working directory.
9
- let _version = '0.19.4';
9
+ let _version = '0.19.7';
10
10
  try {
11
11
  const pkg = JSON.parse(readFileSync(join(import.meta.dir, '..', 'package.json'), 'utf-8'));
12
12
  _version = pkg.version ?? _version;