@pellux/goodvibes-tui 0.20.3 → 0.21.0

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.
Files changed (118) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/README.md +23 -2
  3. package/docs/foundation-artifacts/operator-contract.json +78 -1
  4. package/package.json +3 -2
  5. package/src/audio/spoken-turn-controller.ts +31 -1
  6. package/src/audio/spoken-turn-wiring.ts +26 -4
  7. package/src/cli/bundle-command.ts +1 -1
  8. package/src/cli/completions/generate.ts +662 -0
  9. package/src/cli/config-overrides.ts +68 -0
  10. package/src/cli/help.ts +4 -2
  11. package/src/cli/management-commands.ts +1 -1
  12. package/src/cli/management.ts +1 -8
  13. package/src/cli/parser.ts +14 -18
  14. package/src/cli/service-command.ts +1 -1
  15. package/src/cli/surface-command.ts +1 -1
  16. package/src/cli/tui-startup.ts +72 -10
  17. package/src/cli/types.ts +12 -3
  18. package/src/cli-flags.ts +1 -0
  19. package/src/config/atomic-write.ts +70 -0
  20. package/src/config/read-versioned.ts +115 -0
  21. package/src/core/conversation-rendering.ts +49 -15
  22. package/src/core/conversation.ts +101 -16
  23. package/src/core/format-user-error.ts +192 -0
  24. package/src/core/stream-event-wiring.ts +144 -0
  25. package/src/core/stream-stall-watchdog.ts +103 -0
  26. package/src/core/system-message-router.ts +5 -1
  27. package/src/export/cost-utils.ts +71 -0
  28. package/src/export/gist-uploader.ts +136 -0
  29. package/src/input/command-registry.ts +31 -1
  30. package/src/input/commands/control-room-runtime.ts +5 -5
  31. package/src/input/commands/experience-runtime.ts +5 -4
  32. package/src/input/commands/knowledge.ts +1 -1
  33. package/src/input/commands/local-auth-runtime.ts +27 -5
  34. package/src/input/commands/local-setup.ts +4 -6
  35. package/src/input/commands/memory-product-runtime.ts +8 -6
  36. package/src/input/commands/operator-panel-runtime.ts +1 -1
  37. package/src/input/commands/operator-runtime.ts +3 -10
  38. package/src/input/commands/{integration-runtime.ts → plugin-runtime.ts} +1 -1
  39. package/src/input/commands/recall-review.ts +26 -2
  40. package/src/input/commands/services-runtime.ts +2 -2
  41. package/src/input/commands/session-workflow.ts +3 -3
  42. package/src/input/commands/share-runtime.ts +99 -12
  43. package/src/input/commands/tts-runtime.ts +30 -4
  44. package/src/input/commands.ts +2 -2
  45. package/src/input/delete-key-policy.ts +46 -0
  46. package/src/input/feed-context-factory.ts +2 -0
  47. package/src/input/handler-feed.ts +3 -0
  48. package/src/input/handler-interactions.ts +2 -15
  49. package/src/input/handler-modal-routes.ts +91 -12
  50. package/src/input/handler-modal-token-routes.ts +3 -0
  51. package/src/input/handler-onboarding-cloudflare.ts +1 -1
  52. package/src/input/handler-onboarding.ts +55 -69
  53. package/src/input/handler-types.ts +163 -0
  54. package/src/input/handler.ts +5 -2
  55. package/src/input/input-history.ts +76 -6
  56. package/src/input/model-picker-filter.ts +265 -0
  57. package/src/input/model-picker-items.ts +208 -0
  58. package/src/input/model-picker.ts +92 -325
  59. package/src/input/onboarding/handler-onboarding-routes.ts +7 -2
  60. package/src/input/onboarding/onboarding-verification-helpers.ts +76 -0
  61. package/src/input/onboarding/onboarding-wizard-apply.ts +4 -4
  62. package/src/input/onboarding/onboarding-wizard-cloudflare-step.ts +2 -2
  63. package/src/input/onboarding/onboarding-wizard-cloudflare.ts +8 -8
  64. package/src/input/onboarding/onboarding-wizard-external-surface-extra-specs.ts +1 -1
  65. package/src/input/onboarding/onboarding-wizard-external-surfaces.ts +2 -29
  66. package/src/input/onboarding/onboarding-wizard-rules.ts +28 -28
  67. package/src/input/onboarding/onboarding-wizard-state.ts +20 -20
  68. package/src/input/onboarding/onboarding-wizard-steps.ts +18 -25
  69. package/src/input/onboarding/onboarding-wizard-types.ts +145 -3
  70. package/src/input/onboarding/onboarding-wizard.ts +3 -3
  71. package/src/input/settings-modal-data.ts +304 -0
  72. package/src/input/settings-modal-mutations.ts +154 -0
  73. package/src/input/settings-modal.ts +182 -220
  74. package/src/main.ts +57 -57
  75. package/src/panels/builtin/agent.ts +4 -1
  76. package/src/panels/builtin/development.ts +4 -1
  77. package/src/panels/confirm-state.ts +27 -12
  78. package/src/panels/cost-tracker-panel.ts +23 -67
  79. package/src/panels/eval-panel.ts +10 -9
  80. package/src/panels/knowledge-panel.ts +3 -5
  81. package/src/panels/local-auth-panel.ts +124 -4
  82. package/src/panels/project-planning-panel.ts +42 -4
  83. package/src/panels/search-focus.ts +11 -5
  84. package/src/panels/subscription-panel.ts +33 -25
  85. package/src/panels/types.ts +28 -1
  86. package/src/panels/wrfc-panel.ts +224 -41
  87. package/src/renderer/agent-detail-modal.ts +11 -10
  88. package/src/renderer/code-block.ts +10 -2
  89. package/src/renderer/compositor.ts +18 -4
  90. package/src/renderer/context-inspector.ts +1 -5
  91. package/src/renderer/diff.ts +94 -21
  92. package/src/renderer/markdown.ts +29 -13
  93. package/src/renderer/settings-modal-helpers.ts +1 -1
  94. package/src/renderer/settings-modal.ts +77 -8
  95. package/src/renderer/syntax-highlighter.ts +10 -3
  96. package/src/renderer/term-caps.ts +318 -0
  97. package/src/renderer/theme.ts +158 -0
  98. package/src/renderer/tool-call.ts +12 -2
  99. package/src/renderer/ui-factory.ts +50 -6
  100. package/src/runtime/bootstrap-command-context.ts +1 -0
  101. package/src/runtime/bootstrap-command-parts.ts +14 -0
  102. package/src/runtime/bootstrap-core.ts +121 -13
  103. package/src/runtime/bootstrap.ts +2 -0
  104. package/src/runtime/onboarding/apply.ts +4 -6
  105. package/src/runtime/onboarding/index.ts +1 -0
  106. package/src/runtime/onboarding/markers.ts +42 -49
  107. package/src/runtime/onboarding/progress.ts +148 -0
  108. package/src/runtime/onboarding/state.ts +133 -55
  109. package/src/runtime/onboarding/types.ts +20 -0
  110. package/src/runtime/services.ts +21 -0
  111. package/src/runtime/wrfc-persistence.ts +237 -0
  112. package/src/shell/blocking-input.ts +20 -5
  113. package/src/tools/wrfc-agent-guard.ts +64 -3
  114. package/src/utils/format-elapsed.ts +30 -0
  115. package/src/utils/terminal-width.ts +45 -0
  116. package/src/version.ts +1 -1
  117. package/src/work-plans/work-plan-store.ts +4 -6
  118. package/src/planning/project-planning-coordinator.ts +0 -543
package/CHANGELOG.md CHANGED
@@ -4,6 +4,33 @@ All notable changes to GoodVibes TUI.
4
4
 
5
5
  ---
6
6
 
7
+ ## [0.21.0] — 2026-06-12
8
+
9
+ First release of the best-in-class program: a full UX-first review of the codebase followed by WRFC-gated remediation (every change passed independent review at 10/10 before commit).
10
+
11
+ ### Features
12
+ - Added masked password entry for local auth: argv-less `/auth local add-user` and `rotate-password` open a bullet-masked prompt (Esc aborts, secrets never echo); input history scrubs cleartext secrets on add, recall, and load.
13
+ - Added ranked fuzzy search to the settings modal (`/` searches keys, labels, and descriptions across categories) with a search header, result-derived context pane, and two-stage Escape.
14
+ - Added a unified confirm/cancel contract across all panels (Enter/y confirms, Esc/n cancels) and a delete-key policy: destructive clears confirm first, end-anchored filters treat Delete as a no-op.
15
+ - Added wizard progress persistence with resume-on-startup; masked fields are stripped before any write, and the onboarding marker is now written on apply success instead of wizard open.
16
+ - Added user-facing turn errors (classified plain-language transcript lines with typed navigation), a stream-stall watchdog, live tool-call rows, TTFT, and honest token-speed in the status line.
17
+ - Added a theme token layer (frozen dark/light palettes replacing hardcoded hex), terminal capability gating with color downsampling, and DEC 2026 synced output.
18
+ - Added WRFC chain snapshots with schema-gated reads, a pre-router message buffer, agent guard traces, and panel controls (cancel, resume, stalled badge).
19
+ - Added a gist upload target for `/share` (`--upload/--copy/--open`) and a shell-completions generator.
20
+
21
+ ### Fixes
22
+ - Fixed the context meter: one SDK token estimator everywhere (three bespoke walkers removed), compact threshold drawn on the meter with color switching, and a percent-to-fraction config conversion that previously kept the marker off-screen.
23
+ - Fixed agent cost and token reporting: real per-agent usage replaces the fabricated tool-call estimate, with a single canonical model-pricing table shared by the cost tracker and share/export.
24
+ - Fixed onboarding state durability: atomic writes with fsync, an advisory lockfile around acknowledgement writes, and version-gated reads that quarantine corrupt or unrecognized files.
25
+ - Fixed session/team memory queue front-doors to be genuinely scope-filtered with honest descriptions.
26
+ - Fixed the always-speak toggle: `/voice` and `/tts on|off` are one switch, labeled correctly, with the no-player notice firing once per session.
27
+ - Fixed dead panel keys (arrows/Enter/Escape), the crash-recovery footgun, command-registry duplicate shadowing, and the Backspace/Delete distinction under Ink.
28
+ - Removed the project/plan auto-detection coordinator: plain text like "plan me a feature" reaches the model untouched; `/plan` and work plans are unchanged.
29
+
30
+ ### Internal
31
+ - Coverage gate enforced in CI (functions >= 71%, lines >= 75%) with an empirical guard against the bun bunfig coverage override; eval gate fails closed in CI with a committed baseline; release script runs the full gate suite.
32
+ - Concurrency-safe test temp dirs; 14 import cycles eliminated; main.ts and handler god-files split under the 800-line architecture limit; program docs (review, plan, roadmap, 14 subsystem dives) committed.
33
+
7
34
  ## [0.20.3] — 2026-05-13
8
35
 
9
36
  ### Fixes
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.20.3-blue.svg)](https://github.com/mgd34msu/goodvibes-tui)
5
+ [![Version](https://img.shields.io/badge/version-0.21.0-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
 
@@ -99,6 +99,12 @@ Inbound TLS can run in `off`, `proxy`, or `direct` mode. Direct mode defaults to
99
99
  - [Knowledge, artifacts, and multimodal](docs/knowledge-artifacts-and-multimodal.md)
100
100
  - [Channels, remote runtime, and API](docs/channels-remote-and-api.md)
101
101
  - [Tools and commands](docs/tools-and-commands.md)
102
+ - [Voice and live TTS](docs/voice-and-live-tts.md)
103
+ - [Cloudflare batch and control plane](docs/cloudflare-batch.md)
104
+ - [Home Assistant surface](docs/homeassistant-surface.md)
105
+ - [Project planning](docs/project-planning.md)
106
+ - [QEMU sandbox bootstrapping](docs/qemu-sandbox.md)
107
+ - [Local verification](docs/verification/local-verification.md)
102
108
  - [Release and publishing](docs/release-and-publishing.md)
103
109
  - [Foundation artifacts](docs/foundation-artifacts/README.md)
104
110
 
@@ -540,6 +546,15 @@ Related storage paths:
540
546
  | `ui.systemMessages` | `panel` | Route general system messages to `panel`, `conversation`, or `both` |
541
547
  | `ui.operationalMessages` | `panel` | Route operational runtime notices to `panel`, `conversation`, or `both` |
542
548
  | `ui.wrfcMessages` | `both` | Route WRFC/orchestration updates to `panel`, `conversation`, or `both` |
549
+ | `service.enabled` | `false` | Enable OS-backed background service mode |
550
+ | `service.autostart` | `false` | Install/enable or disable/remove the OS autostart service |
551
+ | `service.restartOnFailure` | `true` | Restart managed daemon services after failure |
552
+ | `controlPlane.hostMode` | `local` | Control-plane bind mode: `local`, `network`, or `custom` |
553
+ | `controlPlane.port` | `3421` | Control-plane daemon/API port |
554
+ | `httpListener.port` | `3422` | Webhook/event listener port |
555
+ | `web.enabled` | `false` | Enable browser operator surface |
556
+ | `web.hostMode` | `local` | Web surface bind mode: `local`, `network`, or `custom` |
557
+ | `web.port` | `3423` | Web/browser surface port |
543
558
  | `danger.agentRecursion` | `false` | Allow agents to spawn subagents |
544
559
  | `danger.maxGlobalAgents` | `8` | Max simultaneous agents |
545
560
  | `danger.daemon` | `false` | Enable daemon mode (POST /task) |
@@ -561,6 +576,8 @@ Related storage paths:
561
576
 
562
577
  Per-tool values: `allow`, `prompt`, `deny`.
563
578
 
579
+ Changing `service.autostart` or `service.enabled` from `/config` reconciles the OS service where supported. On Linux this installs/enables, disables, or rewrites the user `systemd` service so the daemon state matches the setting instead of only changing JSON.
580
+
564
581
  ---
565
582
 
566
583
  ## Control Rooms, Routing, And Operator Surfaces
@@ -626,7 +643,7 @@ The QEMU path includes:
626
643
 
627
644
  - setup bundle generation under the user GoodVibes data directory by default
628
645
  - first-run bootstrap scaffolding
629
- - Debian cloud-image download, mutable qcow2 clone, resize, and NoCloud ISO creation through the generated `create-image.sh`
646
+ - Debian cloud-image download, mutable qcow2 clone, resize, and NoCloud ISO creation handled by the bootstrap workflow
630
647
  - host-side wrapper generation
631
648
  - guest cloud-init seed generation for the `goodvibes` sudo user, SSH key auth, `/workspace`, and `ens3` DHCP
632
649
  - guest-test and wrapper-test validation
@@ -660,6 +677,8 @@ Typical first-run path:
660
677
  /sandbox guest-test eval-py
661
678
  ```
662
679
 
680
+ Bootstrap runs as a background TUI process: the prompt clears, progress is visible in the background-process surface, and the TUI stays responsive. If QEMU exits before SSH is reachable, the wrapper fails fast and includes a tail of the QEMU log so port conflicts or startup failures are visible.
681
+
663
682
  By default, QEMU setup files, the mutable qcow2 image, SSH keys, logs, and runtime state live in `~/.goodvibes/tui/sandbox`, not in the current project. Pass an explicit directory only when you intentionally want a non-default bundle location. Use `/sandbox qemu setup` or `/sandbox qemu bootstrap --scaffold-only` if you want to generate/review the bundle without building the image or provisioning guest runtimes.
664
683
 
665
684
  See [QEMU sandbox bootstrapping](docs/qemu-sandbox.md) for host prerequisites, generated files, first-boot behavior, guest runtime packages, and troubleshooting logs.
@@ -829,6 +848,7 @@ GoodVibes includes an automation layer with:
829
848
  - cron-like scheduled agent tasks with timezone-aware schedules, missed-run tracking, run history, and manual trigger support
830
849
  - TUI-owned project planning with readiness gaps, one-question-at-a-time clarification, project language, decision records, task/dependency/verification metadata, and explicit execution approval
831
850
  - planning commands with project-planning inspection, active-plan review, and mode/explain/override/status controls
851
+ - persistent work-plan tracking for concrete task checklists via `/workplan`
832
852
 
833
853
  Key commands:
834
854
 
@@ -1261,6 +1281,7 @@ Those pieces cover conversation-noise routing, panel-health/performance budgets,
1261
1281
  | `/git [action]` | `/g` | Git commands: status, log, diff. Opens git panel if no action given |
1262
1282
  | `/scan` | — | Scan for local LLM servers |
1263
1283
  | `/plan [goal]` | — | Inspect or seed TUI-owned project planning state; `panel`, `approve`, `list`, and `show <id>` are supported |
1284
+ | `/workplan [action]` | `/wp`, `/todo` | Open or update the persistent workspace work-plan checklist |
1264
1285
  | `/panel [action]` | `/panels` | Panel management: open, close, list, toggle, move, focus, split, width, height |
1265
1286
  | `/plugin [action]` | — | Manage plugins (enable/disable/reload/list) |
1266
1287
  | `/marketplace [action]` | — | Browse curated plugin, skill, hook-pack, and policy-pack surfaces |