@pellux/goodvibes-tui 1.13.0 → 1.13.1

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,11 @@ All notable changes to GoodVibes TUI.
4
4
 
5
5
  ---
6
6
 
7
+ ## [1.13.1] — 2026-07-09
8
+
9
+ ### Changes
10
+ - 9dbd88e4 fix(daemon): attach handlers for every ws-only gateway verb — fleet.*, checkpoints.*, sessions.search, push.* were 501 on every vendored daemon build
11
+
7
12
  ## [1.13.0] — 2026-07-09
8
13
 
9
14
  ### Changes
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-1.13.0-blue.svg)](https://github.com/mgd34msu/goodvibes-tui)
5
+ [![Version](https://img.shields.io/badge/version-1.13.1-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
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pellux/goodvibes-tui",
3
- "version": "1.13.0",
3
+ "version": "1.13.1",
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",
@@ -0,0 +1,47 @@
1
+ /**
2
+ * gateway-verbs.ts — attach handlers for every ws-only gateway verb group.
3
+ *
4
+ * The GatewayMethodCatalog's builtin DESCRIPTORS make fleet.* (including the
5
+ * archive verbs), checkpoints.*, sessions.search, and push.* appear in the
6
+ * contract, but a descriptor without an attached handler answers
7
+ * 501 "Gateway method is not invokable" over both websocket and HTTP invoke.
8
+ * createRuntimeServices never called the SDK's registration entry point, so
9
+ * every daemon build this package ever vendored shipped exactly that 501 for
10
+ * the whole ws-only family (found by the companion app against the 1.13.0
11
+ * daemon). This module is the named home for the attachment — mirroring the
12
+ * SDK runtime's own composition root (goodvibes-sdk
13
+ * platform/runtime/services.ts) — and
14
+ * src/test/daemon/gateway-ws-only-invokable.test.ts gates that every ws-only
15
+ * verb stays descriptor-present AND handler-attached, with live invokes of
16
+ * fleet.snapshot / fleet.archived.list.
17
+ */
18
+ import {
19
+ registerGatewayVerbGroups,
20
+ type GatewayMethodCatalog,
21
+ type GatewayVerbGroupDeps,
22
+ } from '@pellux/goodvibes-sdk/platform/control-plane';
23
+ import {
24
+ createProcessRegistry,
25
+ withFleetArchive,
26
+ type ArchivableProcessRegistry,
27
+ type ProcessRegistryDeps,
28
+ } from '@pellux/goodvibes-sdk/platform/runtime/fleet';
29
+
30
+ export function attachWsOnlyGatewayVerbHandlers(
31
+ gatewayMethods: GatewayMethodCatalog,
32
+ deps: GatewayVerbGroupDeps,
33
+ ): void {
34
+ registerGatewayVerbGroups(gatewayMethods, deps);
35
+ }
36
+
37
+ /**
38
+ * One shared process registry aggregating the runtime's managers — the Fleet
39
+ * panel (panels/fleet-read-model.ts) is its first consumer. Constructed once
40
+ * (not per-consumer) so the coalesced tick and the agent-activity side-table
41
+ * are shared, not duplicated. Archive-aware: finished agent/swarm subtrees
42
+ * can be moved out of the live fleet view into a session-scoped archive (see
43
+ * the SDK's fleet/archive.ts).
44
+ */
45
+ export function createArchivableFleetRegistry(deps: ProcessRegistryDeps): ArchivableProcessRegistry {
46
+ return withFleetArchive(createProcessRegistry(deps));
47
+ }
@@ -5,6 +5,7 @@ import { SecretsManager } from '../config/secrets.ts';
5
5
  import { AutomationDeliveryManager, AutomationManager, AutomationRouteStore } from '@pellux/goodvibes-sdk/platform/automation';
6
6
  import { ChannelDeliveryRouter, ChannelPluginRegistry, ChannelPolicyManager, RouteBindingManager, SurfaceRegistry } from '@pellux/goodvibes-sdk/platform/channels';
7
7
  import { ApprovalBroker, GatewayMethodCatalog, SharedSessionBroker } from '@pellux/goodvibes-sdk/platform/control-plane';
8
+ import { attachWsOnlyGatewayVerbHandlers, createArchivableFleetRegistry } from './gateway-verbs.ts';
8
9
  import { WatcherRegistry } from '@pellux/goodvibes-sdk/platform/watchers';
9
10
  import { ArtifactStore } from '@pellux/goodvibes-sdk/platform/artifacts';
10
11
  import {
@@ -56,7 +57,7 @@ import { isFeatureFlagEnabled } from './surface-feature-flags.ts';
56
57
  import type { FeatureFlagManager } from '@/runtime/index.ts';
57
58
  import { createFeatureFlagManager } from '@/runtime/index.ts';
58
59
  import { PolicyRuntimeState } from '@/runtime/index.ts';
59
- import { createProcessRegistry, withFleetArchive, type ArchivableProcessRegistry } from '@pellux/goodvibes-sdk/platform/runtime/fleet';
60
+ import { type ArchivableProcessRegistry } from '@pellux/goodvibes-sdk/platform/runtime/fleet';
60
61
  import { calcSessionCost, isModelPriced } from '../export/cost-utils.ts';
61
62
  import { createWorkstreamServices, type OrchestrationEngine, type WorkstreamCommandService } from './workstream-services.ts';
62
63
  import { codeIndexDbPath, createCodeIndexServices, isCodeInjectionSettingEnabled } from './code-index-services.ts';
@@ -605,11 +606,8 @@ export function createRuntimeServices(options: RuntimeServicesOptions): RuntimeS
605
606
  // code-index-services.ts's header doc.
606
607
  const { codeIndexStore, codeIndexReindexScheduler } = createCodeIndexServices({ workingDirectory, configManager, memoryEmbeddingRegistry });
607
608
  const codeInjectionOrchestratorDeps = { codeIndex: codeIndexStore, isCodeInjectionSettingEnabled: () => isCodeInjectionSettingEnabled(configManager), codeIndexReindexScheduler }; // Code-injection seam (agent here; main via orchestrator-core-services.ts)
608
- // W2.1/W2.2: one shared process registry aggregating the managers above
609
- // the Fleet panel (panels/fleet-read-model.ts) is its first consumer.
610
- // Constructed once here (not per-consumer) so the coalesced tick and the
611
- // agent-activity side-table are shared, not duplicated.
612
- const processRegistry = withFleetArchive(createProcessRegistry({
609
+ // Shared, archive-aware fleet registry see gateway-verbs.ts's factory doc.
610
+ const processRegistry = createArchivableFleetRegistry({
613
611
  agentManager,
614
612
  wrfcController,
615
613
  orchestrationEngine, // Folds workstream/phase/work-item nodes into the fleet
@@ -628,7 +626,7 @@ export function createRuntimeServices(options: RuntimeServicesOptions): RuntimeS
628
626
  if (!isModelPriced(modelId)) return null;
629
627
  return calcSessionCost(usage.inputTokens, usage.outputTokens, usage.cacheReadTokens, usage.cacheWriteTokens, modelId);
630
628
  },
631
- }));
629
+ });
632
630
  const modeManager = new ModeManager();
633
631
  const fileUndoManager = new FileUndoManager();
634
632
  const workspaceCheckpointManager = new WorkspaceCheckpointManager({
@@ -645,6 +643,9 @@ export function createRuntimeServices(options: RuntimeServicesOptions): RuntimeS
645
643
  // commands (checkpoint-runtime.ts) are what actually catch and report the
646
644
  // failure to the user, on first use.
647
645
  void workspaceCheckpointManager.init().catch(() => {});
646
+
647
+ // ws-only verbs (fleet/checkpoints/search/push) 501 without this — see gateway-verbs.ts.
648
+ attachWsOnlyGatewayVerbHandlers(gatewayMethods, { processRegistry, workspaceCheckpointManager, sessionBroker, secretsManager, approvalBroker, shellPaths });
648
649
  const integrationHelpers = new IntegrationHelperService({
649
650
  workingDirectory,
650
651
  homeDirectory,
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 = '1.13.0';
9
+ let _version = '1.13.1';
10
10
  try {
11
11
  const pkg = JSON.parse(readFileSync(join(import.meta.dir, '..', 'package.json'), 'utf-8'));
12
12
  _version = pkg.version ?? _version;