@pellux/goodvibes-tui 2.0.13 → 2.0.15
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/.goodvibes/GOODVIBES.md +1 -1
- package/.goodvibes/agents/reviewer.md +8 -8
- package/.goodvibes/skills/add-provider/SKILL.md +22 -22
- package/CHANGELOG.md +61 -0
- package/README.md +40 -29
- package/docs/README.md +1 -1
- package/docs/foundation-artifacts/README.md +5 -5
- package/docs/foundation-artifacts/operator-contract.json +123 -123
- package/package.json +12 -10
- package/scripts/postinstall.js +3 -3
- package/src/audio/activation-sound.ts +7 -7
- package/src/audio/capture.ts +7 -7
- package/src/audio/onnxruntime-assets.d.ts +1 -1
- package/src/audio/player.ts +4 -4
- package/src/audio/spoken-turn-wiring.ts +4 -4
- package/src/audio/voice-capture-wiring.ts +5 -5
- package/src/audio/voice-input-session.ts +3 -3
- package/src/audio/wake-inference.ts +13 -8
- package/src/audio/wake-runtime.ts +10 -10
- package/src/cli/completions/generate.ts +2 -2
- package/src/cli/doctor.ts +13 -13
- package/src/cli/ensure-goodvibes-gitignore.ts +3 -3
- package/src/cli/entrypoint.ts +3 -3
- package/src/cli/help.ts +6 -6
- package/src/cli/hooks-command.ts +4 -4
- package/src/cli/hooks-report.ts +4 -4
- package/src/cli/launch-auto-update.ts +17 -17
- package/src/cli/management-commands.ts +8 -8
- package/src/cli/management-utils.ts +3 -3
- package/src/cli/management.ts +1 -1
- package/src/cli/plugin-bundles-command.ts +10 -10
- package/src/cli/plugin-command.ts +9 -9
- package/src/cli/service-posture.ts +1 -1
- package/src/cli/status.ts +10 -10
- package/src/cli/surface-command.ts +4 -4
- package/src/cli/tui-startup.ts +23 -23
- package/src/config/run-daemon-config-migration.ts +3 -3
- package/src/config/secret-config.ts +10 -10
- package/src/config/surface.ts +1 -1
- package/src/config/tui-extension-settings.ts +8 -8
- package/src/core/active-model-identity.ts +7 -7
- package/src/core/approval-alert.ts +5 -5
- package/src/core/bookmark-navigation.ts +3 -3
- package/src/core/budget-breach-notifier.ts +6 -6
- package/src/core/compaction-receipt.ts +8 -8
- package/src/core/composer-state.ts +2 -2
- package/src/core/context-usage.ts +1 -1
- package/src/core/conversation-compaction-render.ts +3 -3
- package/src/core/conversation-event-navigation.ts +2 -2
- package/src/core/conversation-fold.ts +9 -9
- package/src/core/conversation-line-cache.ts +14 -14
- package/src/core/conversation-render-context.ts +6 -6
- package/src/core/conversation-rendering.ts +27 -30
- package/src/core/conversation-search-expansion.ts +6 -6
- package/src/core/conversation-splash-state.ts +3 -3
- package/src/core/conversation-turn-structure.ts +13 -13
- package/src/core/conversation-types.ts +3 -3
- package/src/core/conversation-user-receipts.ts +5 -5
- package/src/core/conversation.ts +17 -17
- package/src/core/format-user-error.ts +5 -5
- package/src/core/long-task-notifier.ts +9 -9
- package/src/core/memory-diagnostics-gateway.ts +8 -8
- package/src/core/memory-provenance.ts +5 -5
- package/src/core/model-routing-chip.ts +3 -3
- package/src/core/pairing-tailscale-gateway.ts +3 -3
- package/src/core/permission-mode.ts +5 -5
- package/src/core/power-chip-source.ts +3 -3
- package/src/core/power-status.ts +8 -8
- package/src/core/rewind-receipt.ts +6 -6
- package/src/core/session-resume-core.ts +8 -8
- package/src/core/stream-event-wiring.ts +36 -36
- package/src/core/stream-stall-watchdog.ts +4 -4
- package/src/core/system-message-noise.ts +7 -7
- package/src/core/system-message-router.ts +10 -10
- package/src/core/terminal-notifier.ts +5 -5
- package/src/core/turn-budget-outcome.ts +5 -5
- package/src/core/turn-cancellation.ts +3 -3
- package/src/core/turn-event-wiring.ts +16 -16
- package/src/core/voice-capture-status.ts +2 -2
- package/src/core/voice-provision-gateway.ts +12 -12
- package/src/core/voice-provision-status.ts +19 -19
- package/src/core/voice-stt-gateway.ts +6 -6
- package/src/core/wake-provision-runner.ts +7 -7
- package/src/core/wake-provision-status.ts +17 -17
- package/src/core/workstream-notification.ts +8 -8
- package/src/export/gist-uploader.ts +7 -7
- package/src/input/autocomplete.ts +3 -3
- package/src/input/bookmark-modal.ts +1 -1
- package/src/input/command-args-hint.ts +2 -2
- package/src/input/command-reference.ts +9 -9
- package/src/input/command-registry.ts +32 -32
- package/src/input/commands/acp-runtime.ts +6 -6
- package/src/input/commands/calendar-runtime.ts +9 -9
- package/src/input/commands/channel-pairing.ts +11 -11
- package/src/input/commands/channel-runtime.ts +1 -1
- package/src/input/commands/checkin-runtime.ts +4 -4
- package/src/input/commands/checkpoint-runtime.ts +4 -4
- package/src/input/commands/ci-runtime.ts +4 -4
- package/src/input/commands/cluster-runtime.ts +3 -3
- package/src/input/commands/codebase-runtime.ts +16 -16
- package/src/input/commands/config.ts +6 -6
- package/src/input/commands/connection-status.ts +12 -12
- package/src/input/commands/context-window.ts +2 -2
- package/src/input/commands/cost-attribution-format.ts +4 -4
- package/src/input/commands/cost-runtime.ts +2 -2
- package/src/input/commands/devices-runtime.ts +7 -7
- package/src/input/commands/diff-runtime.ts +2 -2
- package/src/input/commands/editor-runtime.ts +1 -1
- package/src/input/commands/eval.ts +4 -4
- package/src/input/commands/experience-runtime.ts +1 -1
- package/src/input/commands/git-runtime.ts +3 -3
- package/src/input/commands/graph-runtime.ts +3 -3
- package/src/input/commands/guidance-runtime.ts +1 -1
- package/src/input/commands/health-metrics-format.ts +2 -2
- package/src/input/commands/health-runtime.ts +8 -8
- package/src/input/commands/hosted-runtime.ts +13 -13
- package/src/input/commands/image-runtime.ts +6 -6
- package/src/input/commands/intelligence-runtime.ts +2 -2
- package/src/input/commands/local-auth-runtime.ts +3 -3
- package/src/input/commands/local-provider-runtime.ts +3 -3
- package/src/input/commands/local-runtime.ts +7 -7
- package/src/input/commands/mail-runtime.ts +9 -9
- package/src/input/commands/mcp-runtime.ts +1 -1
- package/src/input/commands/memory.ts +13 -13
- package/src/input/commands/notify-runtime.ts +1 -1
- package/src/input/commands/operator-panel-runtime.ts +8 -8
- package/src/input/commands/operator-rpc.ts +3 -3
- package/src/input/commands/operator-runtime.ts +3 -3
- package/src/input/commands/palette-runtime.ts +1 -1
- package/src/input/commands/payment-card-intake.ts +17 -17
- package/src/input/commands/permissions-provenance.ts +7 -7
- package/src/input/commands/permissions-runtime.ts +1 -1
- package/src/input/commands/planning-runtime.ts +9 -9
- package/src/input/commands/platform-services-runtime.ts +2 -2
- package/src/input/commands/policy-dispatch.ts +6 -6
- package/src/input/commands/power-runtime.ts +6 -6
- package/src/input/commands/principals-runtime.ts +3 -3
- package/src/input/commands/product-runtime.ts +3 -3
- package/src/input/commands/profile-render.ts +13 -13
- package/src/input/commands/profile-runtime.ts +13 -13
- package/src/input/commands/profile-types.ts +13 -13
- package/src/input/commands/provider-accounts-runtime.ts +5 -5
- package/src/input/commands/provider.ts +10 -10
- package/src/input/commands/qrcode-runtime.ts +3 -3
- package/src/input/commands/queue-runtime.ts +6 -6
- package/src/input/commands/recall-files-config.ts +4 -4
- package/src/input/commands/recall-files-git.ts +3 -3
- package/src/input/commands/recall-files.ts +12 -12
- package/src/input/commands/recall-query.ts +3 -3
- package/src/input/commands/recall-review.ts +3 -3
- package/src/input/commands/recall-shared.ts +1 -1
- package/src/input/commands/relay-runtime.ts +5 -5
- package/src/input/commands/remote-runtime.ts +3 -3
- package/src/input/commands/review-runtime.ts +8 -8
- package/src/input/commands/rewind-runtime.ts +21 -21
- package/src/input/commands/runtime-services.ts +1 -2
- package/src/input/commands/schedule-nl.ts +2 -2
- package/src/input/commands/schedule-runtime.ts +2 -2
- package/src/input/commands/secret-runtime.ts +3 -3
- package/src/input/commands/session-content.ts +7 -7
- package/src/input/commands/session-picker-filter.ts +3 -3
- package/src/input/commands/session-workflow.ts +10 -10
- package/src/input/commands/session.ts +15 -15
- package/src/input/commands/settings-sync-runtime.ts +2 -2
- package/src/input/commands/share-runtime.ts +4 -4
- package/src/input/commands/shell-core.ts +11 -11
- package/src/input/commands/tasks-runtime.ts +4 -4
- package/src/input/commands/test-runtime.ts +6 -6
- package/src/input/commands/tts-runtime.ts +4 -4
- package/src/input/commands/update-runtime.ts +27 -27
- package/src/input/commands/websearch-runtime.ts +2 -2
- package/src/input/commands/work-plan-runtime.ts +2 -2
- package/src/input/commands/workstream-attempt-dependents.ts +4 -4
- package/src/input/commands/workstream-attempts.ts +16 -16
- package/src/input/commands/workstream-runtime.ts +36 -36
- package/src/input/commands/worktree-runtime.ts +6 -6
- package/src/input/composer-capture.ts +5 -5
- package/src/input/concealed-input.ts +2 -2
- package/src/input/config-modal-types.ts +16 -16
- package/src/input/config-modal.ts +30 -30
- package/src/input/daemon-owned-settings-descriptions.ts +4 -4
- package/src/input/delete-key-policy.ts +1 -1
- package/src/input/exec-env-scrub-config.ts +7 -7
- package/src/input/feature-unit-layout.ts +5 -5
- package/src/input/feed-context-factory.ts +38 -38
- package/src/input/file-picker.ts +1 -1
- package/src/input/handler-command-route.ts +2 -2
- package/src/input/handler-content-actions.ts +8 -8
- package/src/input/handler-feed-routes.ts +13 -13
- package/src/input/handler-feed.ts +31 -31
- package/src/input/handler-interactions.ts +2 -2
- package/src/input/handler-modal-routes.ts +13 -13
- package/src/input/handler-modal-stack.ts +1 -1
- package/src/input/handler-modal-token-routes.ts +1 -1
- package/src/input/handler-onboarding-daemon-adopt.ts +6 -6
- package/src/input/handler-picker-routes.ts +7 -7
- package/src/input/handler-prompt-buffer.ts +1 -1
- package/src/input/handler-shortcuts.ts +12 -12
- package/src/input/handler-types.ts +3 -3
- package/src/input/handler-ui-state.ts +1 -1
- package/src/input/handler.ts +9 -9
- package/src/input/input-history.ts +1 -1
- package/src/input/keybindings.ts +13 -13
- package/src/input/kill-ring.ts +7 -11
- package/src/input/model-picker-filter.ts +3 -3
- package/src/input/model-picker-items.ts +5 -5
- package/src/input/model-picker-types.ts +2 -2
- package/src/input/model-picker.ts +18 -18
- package/src/input/onboarding/onboarding-feature-units.ts +9 -13
- package/src/input/onboarding/onboarding-provider-key-fields.ts +3 -3
- package/src/input/onboarding/onboarding-runtime-status.ts +3 -3
- package/src/input/onboarding/onboarding-wizard-apply.ts +6 -6
- package/src/input/onboarding/onboarding-wizard-cloudflare-step.ts +1 -1
- package/src/input/onboarding/onboarding-wizard-constants.ts +1 -1
- package/src/input/onboarding/onboarding-wizard-external-surfaces.ts +4 -4
- package/src/input/onboarding/onboarding-wizard-network-adopt.ts +6 -6
- package/src/input/onboarding/onboarding-wizard-steps.ts +2 -2
- package/src/input/panel-integration-actions.ts +3 -3
- package/src/input/panel-mouse-geometry.ts +1 -1
- package/src/input/panel-paste-flood-guard.ts +9 -9
- package/src/input/payments-config.ts +15 -15
- package/src/input/profile-picker-modal.ts +1 -1
- package/src/input/provider-key-intake.ts +9 -9
- package/src/input/relay-settings-descriptions.ts +3 -3
- package/src/input/sandbox-exec-config.ts +9 -9
- package/src/input/search.ts +18 -18
- package/src/input/selection-modal-queue.ts +10 -10
- package/src/input/selection-modal.ts +2 -2
- package/src/input/session-picker-modal.ts +7 -7
- package/src/input/settings-modal-activation.ts +1 -1
- package/src/input/settings-modal-adjustment.ts +2 -2
- package/src/input/settings-modal-commit.ts +6 -6
- package/src/input/settings-modal-connections.ts +2 -2
- package/src/input/settings-modal-data.ts +29 -29
- package/src/input/settings-modal-mutations.ts +7 -7
- package/src/input/settings-modal-reset.ts +3 -3
- package/src/input/settings-modal-search.ts +6 -6
- package/src/input/settings-modal-secrets.ts +3 -3
- package/src/input/settings-modal-types.ts +16 -16
- package/src/input/settings-modal.ts +4 -4
- package/src/input/voice-local-settings.ts +3 -3
- package/src/input/worktree-setup-config.ts +8 -8
- package/src/main.ts +15 -15
- package/src/panels/agent-inspector-shared.ts +5 -5
- package/src/panels/base-panel.ts +3 -3
- package/src/panels/builtin/agent.ts +3 -3
- package/src/panels/builtin/development.ts +4 -4
- package/src/panels/builtin/knowledge.ts +1 -1
- package/src/panels/builtin/operations.ts +12 -12
- package/src/panels/builtin/session.ts +8 -8
- package/src/panels/builtin/shared.ts +6 -6
- package/src/panels/builtin-modals.ts +8 -8
- package/src/panels/confirm-state.ts +5 -5
- package/src/panels/cost-tracker-panel.ts +22 -22
- package/src/panels/diff-panel.ts +20 -20
- package/src/panels/diff-review-model.ts +5 -5
- package/src/panels/diff-review-panel.ts +5 -5
- package/src/panels/eval-registry.ts +2 -2
- package/src/panels/expandable-list-panel.ts +5 -5
- package/src/panels/fleet-acts.ts +20 -20
- package/src/panels/fleet-deep-link.ts +5 -5
- package/src/panels/fleet-gateway.ts +12 -12
- package/src/panels/fleet-observed-render.ts +11 -11
- package/src/panels/fleet-panel-format.ts +14 -14
- package/src/panels/fleet-panel-worktree-detail.ts +8 -8
- package/src/panels/fleet-panel.ts +34 -34
- package/src/panels/fleet-read-model.ts +49 -49
- package/src/panels/fleet-spawn.ts +15 -15
- package/src/panels/fleet-steer.ts +7 -7
- package/src/panels/fleet-stop.ts +5 -5
- package/src/panels/fleet-tabs.ts +14 -14
- package/src/panels/fleet-transcript.ts +26 -26
- package/src/panels/git-panel.ts +8 -8
- package/src/panels/hosted-session-feed.ts +13 -13
- package/src/panels/hosted-session-panel.ts +7 -7
- package/src/panels/index.ts +1 -1
- package/src/panels/local-auth-panel.ts +15 -15
- package/src/panels/memory-consolidation-gateway.ts +8 -8
- package/src/panels/modals/devices-modal.ts +8 -8
- package/src/panels/modals/hooks-modal.ts +1 -1
- package/src/panels/modals/keybindings-modal.ts +5 -5
- package/src/panels/modals/knowledge-modal.ts +2 -2
- package/src/panels/modals/local-auth-modal.ts +4 -4
- package/src/panels/modals/marketplace-modal.ts +3 -3
- package/src/panels/modals/memory-modal.ts +19 -19
- package/src/panels/modals/modal-surface-helpers.ts +1 -1
- package/src/panels/modals/modal-theme.ts +3 -3
- package/src/panels/modals/pairing-modal.ts +19 -19
- package/src/panels/modals/planning-modal.ts +4 -4
- package/src/panels/modals/plugins-modal.ts +1 -1
- package/src/panels/modals/policy-modal.ts +4 -4
- package/src/panels/modals/provider-health-modal.ts +1 -1
- package/src/panels/modals/remote-modal.ts +1 -1
- package/src/panels/modals/sandbox-modal.ts +2 -2
- package/src/panels/modals/security-modal.ts +4 -4
- package/src/panels/modals/services-modal.ts +1 -1
- package/src/panels/modals/work-plan-modal.ts +4 -4
- package/src/panels/notifications-feed.ts +6 -6
- package/src/panels/notifications-panel.ts +6 -6
- package/src/panels/panel-confirm-overlay.ts +4 -4
- package/src/panels/panel-manager.ts +13 -13
- package/src/panels/plugins-panel.ts +6 -6
- package/src/panels/polish-core.ts +2 -2
- package/src/panels/polish-tables.ts +2 -2
- package/src/panels/polish.ts +1 -1
- package/src/panels/project-planning-answer-actions.ts +3 -3
- package/src/panels/scrollable-list-panel.ts +15 -15
- package/src/panels/search-focus.ts +1 -1
- package/src/panels/session-maintenance.ts +1 -1
- package/src/panels/skills-panel.ts +3 -3
- package/src/panels/token-budget-panel.ts +11 -11
- package/src/panels/types.ts +14 -14
- package/src/panels/workstream-graph-render.ts +5 -5
- package/src/panels/wrfc-panel-format.ts +1 -1
- package/src/permissions/broker-approval-card.ts +13 -13
- package/src/permissions/hunk-selection.ts +13 -13
- package/src/permissions/prompt.ts +22 -22
- package/src/permissions/sandbox-exec-gate.ts +5 -5
- package/src/providers/provider-classification.ts +1 -1
- package/src/providers/reasoning-effort-surface.ts +12 -12
- package/src/renderer/ansi-sanitize.ts +5 -6
- package/src/renderer/autocomplete-overlay.ts +5 -5
- package/src/renderer/block-actions-overlay.ts +1 -1
- package/src/renderer/bookmark-modal.ts +1 -1
- package/src/renderer/code-block.ts +2 -2
- package/src/renderer/compaction-history-modal.ts +4 -4
- package/src/renderer/compaction-preview.ts +5 -5
- package/src/renderer/compaction-quality.ts +5 -5
- package/src/renderer/composer-fragments.ts +6 -6
- package/src/renderer/compositor.ts +9 -9
- package/src/renderer/config-modal.ts +3 -3
- package/src/renderer/context-inspector.ts +1 -1
- package/src/renderer/context-status-hint.ts +10 -10
- package/src/renderer/conversation-layout.ts +2 -2
- package/src/renderer/conversation-overlays.ts +2 -2
- package/src/renderer/conversation-surface.ts +6 -6
- package/src/renderer/diff.ts +4 -4
- package/src/renderer/fleet-tab-strip.ts +2 -2
- package/src/renderer/footer-tips.ts +4 -4
- package/src/renderer/fullscreen-primitives.ts +1 -1
- package/src/renderer/git-status.ts +5 -5
- package/src/renderer/header-line.ts +5 -5
- package/src/renderer/help-overlay.ts +5 -5
- package/src/renderer/hint-grammar.ts +2 -2
- package/src/renderer/layout.ts +1 -1
- package/src/renderer/markdown-inline.ts +3 -3
- package/src/renderer/markdown-table.ts +7 -7
- package/src/renderer/modal-factory.ts +3 -3
- package/src/renderer/model-picker-overlay.ts +2 -2
- package/src/renderer/model-workspace.ts +7 -7
- package/src/renderer/onboarding/onboarding-wizard.ts +1 -1
- package/src/renderer/overlay-box.ts +1 -1
- package/src/renderer/panel-composite.ts +5 -5
- package/src/renderer/panel-workspace-bar.ts +1 -1
- package/src/renderer/process-indicator.ts +8 -8
- package/src/renderer/profile-picker-modal.ts +3 -3
- package/src/renderer/prompt-content-width.ts +1 -1
- package/src/renderer/search-overlay.ts +3 -3
- package/src/renderer/selection-modal-overlay.ts +6 -6
- package/src/renderer/semantic-diff.ts +6 -7
- package/src/renderer/session-picker-modal.ts +24 -24
- package/src/renderer/settings-modal-connections.ts +3 -3
- package/src/renderer/settings-modal-helpers.ts +16 -16
- package/src/renderer/settings-modal.ts +10 -10
- package/src/renderer/shell-surface.ts +8 -8
- package/src/renderer/status-glyphs.ts +6 -6
- package/src/renderer/syntax-highlighter.ts +2 -3
- package/src/renderer/system-message.ts +3 -3
- package/src/renderer/tab-strip.ts +2 -2
- package/src/renderer/term-caps.ts +12 -12
- package/src/renderer/terminal-bg-probe.ts +10 -10
- package/src/renderer/terminal-escapes.ts +1 -1
- package/src/renderer/theme-mode-config.ts +3 -3
- package/src/renderer/theme.ts +34 -34
- package/src/renderer/thinking.ts +1 -1
- package/src/renderer/tool-call.ts +5 -5
- package/src/renderer/tool-result-expanded-lines.ts +3 -3
- package/src/renderer/tool-result-summary.ts +6 -6
- package/src/renderer/turn-injection.ts +9 -9
- package/src/renderer/ui-factory.ts +33 -33
- package/src/renderer/ui-primitives.ts +4 -4
- package/src/runtime/bootstrap-command-parts.ts +3 -3
- package/src/runtime/bootstrap-core.ts +21 -21
- package/src/runtime/bootstrap-hook-bridge.ts +8 -8
- package/src/runtime/bootstrap-shell.ts +9 -9
- package/src/runtime/bootstrap.ts +16 -16
- package/src/runtime/client/approval-updates.ts +3 -3
- package/src/runtime/client/build-floors.ts +7 -7
- package/src/runtime/client/daemon-attach-handshake.ts +5 -5
- package/src/runtime/client/fleet-union.ts +7 -7
- package/src/runtime/client/host-service-status.ts +2 -2
- package/src/runtime/client/hosted-exit.ts +4 -4
- package/src/runtime/client/hosted-roster.ts +4 -4
- package/src/runtime/client/hosted-session-stream.ts +5 -5
- package/src/runtime/client/hosted-sessions.ts +8 -8
- package/src/runtime/client/operator-endpoint.ts +14 -14
- package/src/runtime/client/spine-adoption.ts +8 -8
- package/src/runtime/context-accounting-source.ts +4 -4
- package/src/runtime/context.ts +2 -2
- package/src/runtime/conversation-rewind-port.ts +6 -6
- package/src/runtime/credential-composition.ts +2 -2
- package/src/runtime/daemon-attach-notices.ts +6 -6
- package/src/runtime/diagnostics/panels/index.ts +1 -1
- package/src/runtime/diagnostics/panels/ops.ts +2 -2
- package/src/runtime/disposal-wiring.ts +6 -6
- package/src/runtime/index.ts +11 -11
- package/src/runtime/install-self-check-startup.ts +4 -4
- package/src/runtime/install-self-check.ts +6 -6
- package/src/runtime/interaction-seams.ts +4 -4
- package/src/runtime/knowledge-services.ts +2 -2
- package/src/runtime/legacy-daemon-migration.ts +37 -37
- package/src/runtime/legacy-daemon-reconcile.ts +30 -30
- package/src/runtime/memory-governance-services.ts +3 -3
- package/src/runtime/memory-spine-transport.ts +3 -3
- package/src/runtime/notification-dispatch.ts +4 -4
- package/src/runtime/onboarding/apply.ts +1 -1
- package/src/runtime/onboarding/derivation.ts +1 -1
- package/src/runtime/onboarding/fast-path.ts +7 -7
- package/src/runtime/onboarding/progress.ts +2 -2
- package/src/runtime/onboarding/provider-key-capture.ts +4 -4
- package/src/runtime/onboarding/snapshot.ts +2 -2
- package/src/runtime/onboarding/state.ts +4 -4
- package/src/runtime/onboarding/types.ts +4 -4
- package/src/runtime/orchestrator-core-services.ts +5 -5
- package/src/runtime/path-shadow-startup.ts +3 -3
- package/src/runtime/perf/panel-contracts.ts +1 -1
- package/src/runtime/power-keepawake-remote.ts +6 -6
- package/src/runtime/process-lifecycle.ts +14 -14
- package/src/runtime/provider-fallback.ts +3 -3
- package/src/runtime/recovery-autosave.ts +3 -3
- package/src/runtime/recovery-decisions.ts +19 -19
- package/src/runtime/recovery-offer-wiring.ts +4 -4
- package/src/runtime/recovery-prompt.ts +20 -20
- package/src/runtime/relay-reachability-bridge.ts +3 -3
- package/src/runtime/release-artifacts.ts +1 -1
- package/src/runtime/resume-notice.ts +20 -20
- package/src/runtime/runtime-services-types.ts +20 -20
- package/src/runtime/services.ts +20 -20
- package/src/runtime/session-continuity-hints.ts +1 -1
- package/src/runtime/session-inbound-inputs.ts +12 -12
- package/src/runtime/session-resume-liveness-confirm.ts +4 -4
- package/src/runtime/session-spine-transport.ts +3 -3
- package/src/runtime/store/domains/panels.ts +2 -2
- package/src/runtime/store/domains/ui-perf.ts +2 -2
- package/src/runtime/store/index.ts +1 -1
- package/src/runtime/store/selectors/index.ts +1 -1
- package/src/runtime/store/state.ts +2 -2
- package/src/runtime/ui-services.ts +3 -3
- package/src/runtime/workspace-checkpointing.ts +3 -3
- package/src/runtime/wrfc-persistence.ts +15 -15
- package/src/scripts/process-messages.ts +1 -1
- package/src/shell/blocking-input.ts +9 -9
- package/src/shell/recovery-input-helpers.ts +2 -2
- package/src/shell/retry-affordance.ts +9 -9
- package/src/shell/ui-openers.ts +14 -14
- package/src/shell/voice-capture-shell.ts +3 -3
- package/src/tools/wrfc-agent-guard.ts +4 -4
- package/src/utils/browser.ts +2 -2
- package/src/utils/format-duration.ts +3 -3
- package/src/utils/format-number.ts +2 -2
- package/src/utils/splash-lines.ts +4 -4
- package/src/utils/terminal-width.ts +6 -6
- package/src/verification/verification-ledger.ts +25 -25
- package/src/version.ts +3 -3
package/.goodvibes/GOODVIBES.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
## MANDATORY
|
|
2
2
|
|
|
3
3
|
PRIMARY GOAL: Fully complete and functional code that meets or exceeds the minimum review score
|
|
4
|
-
SECONDARY GOAL: Minimize token usage
|
|
4
|
+
SECONDARY GOAL: Minimize token usage. Use the minimum data necessary to complete each task
|
|
5
5
|
|
|
6
6
|
GENERAL DIRECTIVES:
|
|
7
7
|
- Every plan must have a multi-agent execution strategy.
|
|
@@ -6,7 +6,7 @@ tools: [read, find, analyze]
|
|
|
6
6
|
|
|
7
7
|
You are a code reviewer for the WRFC (Work-Review-Fix-Complete) chain. Your job is to assess agent work against a rigorous 10-dimension rubric. You verify claims by reading actual files. You never trust self-reported results blindly.
|
|
8
8
|
|
|
9
|
-
## 10-
|
|
9
|
+
## 10-dimension scoring rubric
|
|
10
10
|
|
|
11
11
|
Each dimension is scored 0.0 to 1.0. Maximum total score is 10.0.
|
|
12
12
|
|
|
@@ -23,7 +23,7 @@ Each dimension is scored 0.0 to 1.0. Maximum total score is 10.0.
|
|
|
23
23
|
| Completeness | 1.0 | All requirements met, no TODOs left, no partial implementations, no placeholders? |
|
|
24
24
|
| Integration | 1.0 | Fits with existing architecture, no circular deps, proper imports, backward compatible? |
|
|
25
25
|
|
|
26
|
-
## Scoring
|
|
26
|
+
## Scoring rules
|
|
27
27
|
|
|
28
28
|
- Each dimension scored 0.0 to 1.0 in 0.05 increments
|
|
29
29
|
- Every deduction MUST cite a specific issue with file path, line number (if applicable), and severity
|
|
@@ -36,16 +36,16 @@ Each dimension is scored 0.0 to 1.0. Maximum total score is 10.0.
|
|
|
36
36
|
- Goal is always 10.0. The threshold is the MINIMUM acceptable score.
|
|
37
37
|
- Only score dimensions relevant to the task scope. If a phase explicitly excludes testing (e.g., type-only changes), score Testing as 1.0 with a note that it's N/A for this scope.
|
|
38
38
|
|
|
39
|
-
## Review
|
|
39
|
+
## Review process
|
|
40
40
|
|
|
41
41
|
1. Read the agent's completion report (provided in the task)
|
|
42
|
-
2. Read EVERY file mentioned in the report
|
|
42
|
+
2. Read EVERY file mentioned in the report. Verify claims against actual code
|
|
43
43
|
3. Check for files that should have been changed but weren't
|
|
44
44
|
4. Score each dimension independently
|
|
45
45
|
5. List all issues with severity, description, file, line, and point value
|
|
46
46
|
6. Produce a ReviewerReport JSON block
|
|
47
47
|
|
|
48
|
-
## Output
|
|
48
|
+
## Output format
|
|
49
49
|
|
|
50
50
|
You MUST end your response with a structured ReviewerReport JSON block. You MUST wrap the ReviewerReport in triple-backtick json fences (```json ... ```) for reliable parsing.
|
|
51
51
|
|
|
@@ -75,15 +75,15 @@ You MUST end your response with a structured ReviewerReport JSON block. You MUST
|
|
|
75
75
|
}
|
|
76
76
|
```
|
|
77
77
|
|
|
78
|
-
## Anti-
|
|
78
|
+
## Anti-patterns to avoid
|
|
79
79
|
|
|
80
80
|
- Never give a perfect 10.0 unless the code is genuinely flawless
|
|
81
81
|
- Never pass code that has placeholder implementations ("TODO", "not implemented")
|
|
82
82
|
- Never trust file lists in the report without verifying they exist and contain what's claimed
|
|
83
83
|
- If you can't read a file (permission error, doesn't exist), that's an automatic deduction
|
|
84
84
|
|
|
85
|
-
## What
|
|
85
|
+
## What you will NOT do
|
|
86
86
|
|
|
87
87
|
- You do NOT run tests (quality gates handle that separately)
|
|
88
88
|
- You do NOT modify any code
|
|
89
|
-
- You do NOT write implementation code or provide code fixes
|
|
89
|
+
- You do NOT write implementation code or provide code fixes. Only identify issues. Suggestions may propose alternative design approaches but never include code.
|
|
@@ -13,13 +13,13 @@ triggers:
|
|
|
13
13
|
author: goodvibes
|
|
14
14
|
---
|
|
15
15
|
|
|
16
|
-
# Add
|
|
16
|
+
# Add custom provider
|
|
17
17
|
|
|
18
18
|
Interactively collect provider and model details from the user, then write a JSON config to `~/.goodvibes/tui/providers/{name}.json`.
|
|
19
19
|
|
|
20
20
|
## Workflow
|
|
21
21
|
|
|
22
|
-
### Step 1: Check for
|
|
22
|
+
### Step 1: Check for existing provider
|
|
23
23
|
|
|
24
24
|
Before collecting info, check if `~/.goodvibes/tui/providers/` already has JSON files. If the user names a provider that already exists, ask:
|
|
25
25
|
- **Add models** to the existing provider, or
|
|
@@ -27,22 +27,22 @@ Before collecting info, check if `~/.goodvibes/tui/providers/` already has JSON
|
|
|
27
27
|
|
|
28
28
|
If adding models, read the existing JSON, append new models, and write back.
|
|
29
29
|
|
|
30
|
-
### Step 2: Collect
|
|
30
|
+
### Step 2: Collect provider details
|
|
31
31
|
|
|
32
32
|
Ask the user for each field. Apply smart defaults when the provider name matches a known service.
|
|
33
33
|
|
|
34
|
-
#### Required
|
|
34
|
+
#### Required fields
|
|
35
35
|
|
|
36
36
|
| Field | Description | Validation |
|
|
37
37
|
|-------|-------------|------------|
|
|
38
38
|
| `name` | Internal ID | Lowercase alphanumeric + hyphens only, 1-64 chars |
|
|
39
39
|
| `displayName` | Human-readable name | Non-empty string |
|
|
40
|
-
| `type` | API compatibility | `openai-compat` (recommended) or `anthropic-compat` (not yet supported
|
|
40
|
+
| `type` | API compatibility | `openai-compat` (recommended) or `anthropic-compat` (not yet supported, use `openai-compat`) |
|
|
41
41
|
| `baseURL` | API endpoint | Must start with `http://` or `https://` |
|
|
42
42
|
|
|
43
|
-
> **Note:** `anthropic-compat` is accepted in the JSON schema for forward compatibility but is not yet functional at runtime. The loader will skip configs with this type and emit a warning. Use `openai-compat` for now
|
|
43
|
+
> **Note:** `anthropic-compat` is accepted in the JSON schema for forward compatibility but is not yet functional at runtime. The loader will skip configs with this type and emit a warning. Use `openai-compat` for now. Most Anthropic-compatible proxies (e.g., via LiteLLM) expose an OpenAI-compatible endpoint.
|
|
44
44
|
|
|
45
|
-
#### Optional
|
|
45
|
+
#### Optional fields
|
|
46
46
|
|
|
47
47
|
| Field | Description | Default |
|
|
48
48
|
|-------|-------------|---------|
|
|
@@ -50,7 +50,7 @@ Ask the user for each field. Apply smart defaults when the provider name matches
|
|
|
50
50
|
| `apiKey` | Explicit API key (not recommended) | None |
|
|
51
51
|
| `defaultHeaders` | Custom HTTP headers sent with every API request (e.g., for proxy authentication or routing) | None |
|
|
52
52
|
|
|
53
|
-
### Smart
|
|
53
|
+
### Smart defaults
|
|
54
54
|
|
|
55
55
|
When the user mentions a known provider, pre-fill these values and confirm:
|
|
56
56
|
|
|
@@ -100,7 +100,7 @@ vllm:
|
|
|
100
100
|
|
|
101
101
|
If the name does not match a known provider, ask for all fields individually.
|
|
102
102
|
|
|
103
|
-
### Step 3: Collect
|
|
103
|
+
### Step 3: Collect model details
|
|
104
104
|
|
|
105
105
|
Collect at least one model. For each model:
|
|
106
106
|
|
|
@@ -118,7 +118,7 @@ Collect at least one model. For each model:
|
|
|
118
118
|
|
|
119
119
|
After each model, ask: "Add another model?" Loop until done.
|
|
120
120
|
|
|
121
|
-
### Step 4: Preview and
|
|
121
|
+
### Step 4: Preview and confirm
|
|
122
122
|
|
|
123
123
|
Show the complete JSON to the user and ask for confirmation before writing.
|
|
124
124
|
|
|
@@ -148,13 +148,13 @@ Example output:
|
|
|
148
148
|
}
|
|
149
149
|
```
|
|
150
150
|
|
|
151
|
-
### Step 5: Write the
|
|
151
|
+
### Step 5: Write the file
|
|
152
152
|
|
|
153
153
|
Write to `~/.goodvibes/tui/providers/{name}.json`. Create the directory if it does not exist.
|
|
154
154
|
|
|
155
155
|
Use `precision_write` with `mode: "fail_if_exists"` for new providers. Use `mode: "overwrite"` when the user chose to overwrite an existing provider or when merging models into an existing file.
|
|
156
156
|
|
|
157
|
-
If the `apiKeyEnv` field is set, include it in the JSON. If the user provided an explicit `apiKey`, include it but warn that storing keys in plain text is not recommended
|
|
157
|
+
If the `apiKeyEnv` field is set, include it in the JSON. If the user provided an explicit `apiKey`, include it but warn that storing keys in plain text is not recommended. Suggest using an environment variable instead.
|
|
158
158
|
|
|
159
159
|
If `defaultHeaders` were provided, include them.
|
|
160
160
|
|
|
@@ -165,7 +165,7 @@ Tell the user:
|
|
|
165
165
|
- The provider should be available immediately if goodvibes-tui is currently running (it hot-reloads custom provider configs); if not running, changes take effect on next startup
|
|
166
166
|
- If an API key is needed, remind them to set the environment variable
|
|
167
167
|
|
|
168
|
-
## Validation
|
|
168
|
+
## Validation rules
|
|
169
169
|
|
|
170
170
|
Before writing, verify:
|
|
171
171
|
1. `name` matches `/^[a-z0-9]([a-z0-9-]*[a-z0-9])?$/` and is 1-64 characters (no trailing hyphens)
|
|
@@ -176,24 +176,24 @@ Before writing, verify:
|
|
|
176
176
|
|
|
177
177
|
If validation fails, tell the user which field is invalid and ask for correction.
|
|
178
178
|
|
|
179
|
-
## JSON
|
|
179
|
+
## JSON schema reference
|
|
180
180
|
|
|
181
181
|
The provider JSON maps to the codebase types:
|
|
182
182
|
|
|
183
|
-
- Provider registration uses `OpenAICompatProvider` for `openai-compat` type. The `anthropic-compat` type is parsed and accepted in the JSON but is **not yet supported at runtime
|
|
183
|
+
- Provider registration uses `OpenAICompatProvider` for `openai-compat` type. The `anthropic-compat` type is parsed and accepted in the JSON but is **not yet supported at runtime**. The loader skips it with a warning. Recommend `openai-compat` for all custom providers.
|
|
184
184
|
- `OpenAICompatOptions`: `{ name, baseURL, apiKey, defaultModel, models }`
|
|
185
185
|
- Model entries map to `ModelDefinition`: `{ id, provider, displayName, description, contextWindow, capabilities, reasoningEffort?, selectable }`
|
|
186
|
-
- `reasoningEffort?: string[]`
|
|
186
|
+
- `reasoningEffort?: string[]` is an optional array of supported effort levels, e.g., `["low", "medium", "high"]`
|
|
187
187
|
- The `selectable` field defaults to `true` for custom models
|
|
188
188
|
- The `provider` field in `ModelDefinition` is auto-set to the provider `name`
|
|
189
189
|
|
|
190
|
-
## Conversational
|
|
190
|
+
## Conversational style
|
|
191
191
|
|
|
192
192
|
Be natural and helpful. Guide users step-by-step but do not be overly verbose. If the user provides multiple details at once (e.g., "add ollama with llama3.3-70b"), extract what you can and only ask for missing fields.
|
|
193
193
|
|
|
194
|
-
## Edge
|
|
194
|
+
## Edge cases
|
|
195
195
|
|
|
196
|
-
- **Unknown context window
|
|
197
|
-
- **No API key needed
|
|
198
|
-
- **User provides a full JSON blob
|
|
199
|
-
- **Multiple providers in one session
|
|
196
|
+
- **Unknown context window.** Suggest 4096 as a safe default, and note the user can update later.
|
|
197
|
+
- **No API key needed.** Omit `apiKeyEnv` and `apiKey` from the JSON entirely.
|
|
198
|
+
- **User provides a full JSON blob.** Validate it against the schema and write directly.
|
|
199
|
+
- **Multiple providers in one session.** After completing one, ask if they want to add another.
|
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,67 @@ All notable changes to GoodVibes TUI.
|
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
+
## [2.0.15] - 2026-08-21
|
|
8
|
+
|
|
9
|
+
### Changes
|
|
10
|
+
|
|
11
|
+
- **Wake-word WASM assets are written by the SDK's own atomic writer**
|
|
12
|
+
(platform runtime 2.0.19): `atomicWriteFileSync` now accepts raw bytes,
|
|
13
|
+
not just strings, so the onnxruntime glue and WASM files this terminal
|
|
14
|
+
extracts to disk go through the same temp-file-then-rename-and-fsync path
|
|
15
|
+
as every other file this client writes, instead of a hand-rolled copy
|
|
16
|
+
inlined in the wake module. Same content check, same target names, same
|
|
17
|
+
crash-safety guarantee, one less code path to keep correct.
|
|
18
|
+
- **Release publishing is gated before a tag exists, not after.** The
|
|
19
|
+
sdk-pin check now runs in CI on every push instead of only after a
|
|
20
|
+
GitHub Release was already cut, the GitHub Packages mirror publish is
|
|
21
|
+
ordered behind the npmjs publish and carries the same kill switch, and
|
|
22
|
+
the release workflow verifies the git tag matches the package version as
|
|
23
|
+
its first job. CI now builds through the real toolchain and runs the
|
|
24
|
+
compiled binary's smoke test on pull requests too, not just a bare
|
|
25
|
+
compile. The four sdk reusable-workflow references are pinned to a
|
|
26
|
+
commit sha instead of floating on the sdk's default branch, so a commit
|
|
27
|
+
to the sdk repository can no longer change what runs against this
|
|
28
|
+
repository's publish credentials without a deliberate pin bump here.
|
|
29
|
+
- Comment and documentation prose across the source tree had its em dashes
|
|
30
|
+
removed and its narration comments trimmed; a handful of command
|
|
31
|
+
descriptions changed wording to match, so the regenerated command
|
|
32
|
+
reference and eighteen golden UI frames moved with them. No command
|
|
33
|
+
behavior changed.
|
|
34
|
+
- Bundled platform runtime moves to 2.0.19, the checkout-seam/wake-fix
|
|
35
|
+
cycle. Execution plans this terminal writes round-trip through their own
|
|
36
|
+
markdown again now that the emitter and parser agree on a separator.
|
|
37
|
+
- Bundled daemon moves to 1.28.21, which serves the repaired
|
|
38
|
+
`voice.wake.model.get` verb. That fix reaches this surface directly: the
|
|
39
|
+
wake feature fetches its models from that same verb, and the request
|
|
40
|
+
failed against every daemon build before this pin.
|
|
41
|
+
|
|
42
|
+
## [2.0.14] - 2026-08-15
|
|
43
|
+
|
|
44
|
+
### Changes
|
|
45
|
+
|
|
46
|
+
- **A subscription sign-in from this terminal now reaches the whole platform**
|
|
47
|
+
(platform runtime 2.0.17): ChatGPT/Codex sessions move to the shared tier,
|
|
48
|
+
so the daemon that runs the turns uses the login you just completed instead
|
|
49
|
+
of whatever stale session its own store held.
|
|
50
|
+
- **Conversations through strict OpenAI-compatible gateways work again**
|
|
51
|
+
(platform runtime 2.0.17): the edit tool's schema declared a union with
|
|
52
|
+
`oneOf`, which gateways like abacus RouteLLM now reject wholesale — every
|
|
53
|
+
turn through such a provider failed with "Extra inputs are not permitted"
|
|
54
|
+
regardless of the prompt. The union is `anyOf` now, verified live through
|
|
55
|
+
this terminal against the gateway that surfaced it, and pinned by a
|
|
56
|
+
wire-compatibility test across every tool schema the platform ships.
|
|
57
|
+
- **Typing can no longer summon a system authentication prompt over the
|
|
58
|
+
screen** (platform runtime 2.0.17): on hosts whose polkit rules require
|
|
59
|
+
authentication for the keep-awake sleep inhibitor — typical for tmux/SSH
|
|
60
|
+
sessions the login manager does not count as an active seat — systemd's
|
|
61
|
+
interactive auth agent was registered on the controlling terminal and
|
|
62
|
+
painted "authentication is required to inhibit system sleep" over the UI
|
|
63
|
+
on every submitted message. The inhibitor is now requested with
|
|
64
|
+
`--no-ask-password`; refusal is silent and the platform runs without it.
|
|
65
|
+
`power.inhibitWhileWorking: false` remains the full opt-out.
|
|
66
|
+
- Bundled daemon floor moves to 1.28.19, which carries both fixes.
|
|
67
|
+
|
|
7
68
|
## [2.0.13] - 2026-08-08
|
|
8
69
|
|
|
9
70
|
### Changes
|
package/README.md
CHANGED
|
@@ -2,9 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
[](https://github.com/mgd34msu/goodvibes-tui/actions/workflows/ci.yml)
|
|
4
4
|
[](https://opensource.org/licenses/MIT)
|
|
5
|
-
[](https://github.com/mgd34msu/goodvibes-tui)
|
|
6
6
|
|
|
7
|
-
GoodVibes is a terminal console for coding and operations work with an AI model. You run `goodvibes` in a project directory and get a full-screen terminal app where you talk to a model that can read and edit your files, run shell commands, search the web, and hand work off to background agents
|
|
7
|
+
GoodVibes is a terminal console for coding and operations work with an AI model. You run `goodvibes` in a project directory and get a full-screen terminal app where you talk to a model that can read and edit your files, run shell commands, search the web, and hand work off to background agents, asking your permission before anything that writes or executes.
|
|
8
|
+
|
|
9
|
+
It talks to many model providers (OpenAI, Anthropic, Gemini, Bedrock, Copilot, OpenRouter and other OpenAI-compatible gateways, plus local servers like Ollama and LM Studio that it finds on startup), keeps its settings, sessions, and secrets on your own machine, and shows you the token count and running cost of every turn. Alongside the conversation, panels turn background work into live control rooms: running agents, git state, diffs, tokens, cost.
|
|
8
10
|
|
|
9
11
|
<img src="docs/assets/splash.png" alt="GoodVibes starting up in a terminal: a glitch-art GOODVIBES wordmark in cyan-to-magenta gradient, the version and tagline beneath it, the active model and tool count, the working directory, a line offering to resume the last session, and a hint line reading Ctrl+P panels / ? help / F2 fleet. A status footer shows mode, token usage, context usage, and the daemon and web listener addresses." width="900">
|
|
10
12
|
|
|
@@ -27,17 +29,17 @@ bun pm trust -g @pellux/goodvibes-tui goodvibes-daemon
|
|
|
27
29
|
goodvibes
|
|
28
30
|
```
|
|
29
31
|
|
|
30
|
-
Bun blocks lifecycle scripts for untrusted global packages, so the second line lets both postinstalls run: `@pellux/goodvibes-tui`'s own, which places the TUI binary, and `goodvibes-daemon`'s
|
|
32
|
+
Bun blocks lifecycle scripts for untrusted global packages, so the second line lets both postinstalls run: `@pellux/goodvibes-tui`'s own, which places the TUI binary, and `goodvibes-daemon`'s, which places the daemon binary. `goodvibes-daemon` is a real dependency of this package, so one install brings both commands. No other dependency needs trusting. If you skip that step, the `goodvibes` launcher still self-heals on first run by fetching and checksum-verifying its own binary. `npm install -g @pellux/goodvibes-tui` also works when `bun` is already on `PATH`.
|
|
31
33
|
|
|
32
|
-
Then point it at a model
|
|
34
|
+
Then point it at a model. An environment variable is the fastest path:
|
|
33
35
|
|
|
34
36
|
```sh
|
|
35
37
|
export OPENAI_API_KEY=...
|
|
36
38
|
```
|
|
37
39
|
|
|
38
|
-
On Windows, run it inside a WSL2 distribution, where it is an ordinary Linux install. Native Windows is beta
|
|
40
|
+
On Windows, run it inside a WSL2 distribution, where it is an ordinary Linux install. Native Windows is beta. See [docs/windows.md](docs/windows.md).
|
|
39
41
|
|
|
40
|
-
Deeper install notes
|
|
42
|
+
Deeper install notes are in [docs/getting-started.md](docs/getting-started.md): the installer's environment variables, uninstall, daemon service registration, encrypted and vault-backed secrets, and running from source.
|
|
41
43
|
|
|
42
44
|
---
|
|
43
45
|
|
|
@@ -47,7 +49,7 @@ Deeper install notes — the installer's environment variables, uninstall, daemo
|
|
|
47
49
|
|
|
48
50
|
<img src="docs/assets/conversation.png" alt="Two conversation turns in the terminal. The tail of an earlier answer describes the project as a minimal ISS pass tracker whose calculation is still a stub. Below it the user asks the model to grep for nextPass and list every file that references it; an assistant block shows one find tool call with a green checkmark, and its result is expanded as syntax-highlighted JSON with line numbers listing the two matching file paths and a count of 2. The final answer names src/passes.ts and src/index.ts as a bulleted list. The footer reads Token Usage: Input em dash, Output 264, Cache Read 0, Cache Write 0, Total 264, approximately 0.0040 dollars, above a green context usage bar at 4 percent." width="900">
|
|
49
51
|
|
|
50
|
-
Tool calls stream inline as the model makes them, then their results fold into a collapsible group so a long working session stays readable
|
|
52
|
+
Tool calls stream inline as the model makes them, then their results fold into a collapsible group so a long working session stays readable. Expand any group to see what actually came back. Assistant messages render markdown, syntax-highlighted code, and inline diffs, and any block can be collapsed, bookmarked, copied, or saved to a file.
|
|
51
53
|
|
|
52
54
|
The footer keeps an honest running total: fresh input tokens separated from cache reads, output tokens, the estimated cost so far, and how much of the context window is used. When a model's price is not in the catalog, the cost is reported as unavailable rather than guessed.
|
|
53
55
|
|
|
@@ -59,7 +61,16 @@ The first time you open a directory, GoodVibes asks how much it is allowed to do
|
|
|
59
61
|
|
|
60
62
|
<img src="docs/assets/permission-prompt.png" alt="An execution approval prompt. A header reads EXECUTE, Shell Execution Approval, one more waiting. Fields list the requesting session, the tool exec, the full command mkdir -p build, the working directory, a Risk line reading HIGH write in red, the surface and radius, a summary, the decision class, the effects: process execution, filesystem mutation, possible network access, a reviewer checklist, and the raw tool arguments. Below, four numbered remember options scope an approval to this exact command, to every mkdir command, to every exec call in this project, or to the rest of the session in memory only. The action line reads: Y Allow once, 1-4 Allow and remember, N Deny, or type a reason to deny." width="900">
|
|
61
63
|
|
|
62
|
-
After that, the default permission mode is `prompt`: writes, edits, shell commands, network fetches, agent spawns, and MCP calls each stop and ask. The prompt shows what will run, in which directory, its assessed risk, and what it can affect. You can allow it once, deny it (optionally typing a reason the model sees), or remember the decision at whichever scope fits
|
|
64
|
+
After that, the default permission mode is `prompt`: writes, edits, shell commands, network fetches, agent spawns, and MCP calls each stop and ask. The prompt shows what will run, in which directory, its assessed risk, and what it can affect. You can allow it once, deny it (optionally typing a reason the model sees), or remember the decision at whichever scope fits: this exact command, this command shape, this tool for the whole project, or just for the rest of the session.
|
|
65
|
+
|
|
66
|
+
Four other modes are available when prompting is not what you want:
|
|
67
|
+
|
|
68
|
+
- `accept-edits` auto-approves file writes and edits while exec and the other risky classes still ask
|
|
69
|
+
- `plan` allows read-only tools and refuses every mutating or exec call
|
|
70
|
+
- `allow-all` approves everything
|
|
71
|
+
- `custom` takes per-tool `allow` / `prompt` / `deny` overrides
|
|
72
|
+
|
|
73
|
+
`Shift+Tab` cycles the four session postures: normal, accept-edits, plan, and auto. `/plan` toggles plan mode directly.
|
|
63
74
|
|
|
64
75
|
### Models and providers
|
|
65
76
|
|
|
@@ -67,13 +78,13 @@ After that, the default permission mode is `prompt`: writes, edits, shell comman
|
|
|
67
78
|
|
|
68
79
|
Models come from a live catalog, so the picker lists far more than a hardcoded set, filterable by search, price, capability, and availability. Separate roles route independently: your main chat model, a cheaper helper model for grunt work, a tool model, a TTS model, and an embeddings model can each point somewhere different.
|
|
69
80
|
|
|
70
|
-
The `synthetic` provider groups the same model across every backend that serves it into one entry. Pick it and requests route to whichever backend is healthy, failing over on rate limits and transient errors without changing the model you chose
|
|
81
|
+
The `synthetic` provider groups the same model across every backend that serves it into one entry. Pick it and requests route to whichever backend is healthy, failing over on rate limits and transient errors without changing the model you chose, and without ever crossing the free, paid, and subscription boundaries. Any OpenAI-compatible API can be added as a custom provider by dropping a JSON file in `~/.goodvibes/tui/providers/`. It is hot-reloaded. See [docs/providers-and-routing.md](docs/providers-and-routing.md).
|
|
71
82
|
|
|
72
83
|
### The Fleet control room
|
|
73
84
|
|
|
74
|
-
<img src="docs/assets/fleet-panel.png" alt="The Fleet panel open beside the conversation. It lists background work as rows with a kind, a name, elapsed time, token count, and cost
|
|
85
|
+
<img src="docs/assets/fleet-panel.png" alt="The Fleet panel open beside the conversation. It lists background work as rows with a kind, a name, elapsed time, token count, and cost: a CI watch poller and a runtime heartbeat watcher at 4 minutes 23 seconds each, and an idle code indexer. The detail region below shows the selected watcher's id, state idle, elapsed time, model, tokens, cost, a headline reading CI watch poller, healthy, an activity phase, and an approvals line. The action hints read j/k navigate, Enter attach, K kill, A archive finished, v archived, n host agent." width="900">
|
|
75
86
|
|
|
76
|
-
Work that is not conversation goes into panels instead of scrolling past in the transcript. Fleet
|
|
87
|
+
Work that is not conversation goes into panels instead of scrolling past in the transcript. Fleet, reached with `F2`, is the live control room for agents, workstreams, watchers, and scheduled jobs: what is running, for how long, at what token cost, and what it is waiting on. You can attach to a running agent to watch or steer it, detach again without killing it, pause and resume, and archive finished work. Git, diff, cost, token, and local-auth panels sit alongside it. Heavier operator surfaces open as review modals.
|
|
77
88
|
|
|
78
89
|
### Everything else is a command
|
|
79
90
|
|
|
@@ -87,16 +98,16 @@ Press `?` for a searchable, categorized list of every slash command with its arg
|
|
|
87
98
|
| --- | --- |
|
|
88
99
|
| `Enter` / `Shift+Enter` | Send the message / insert a newline |
|
|
89
100
|
| `?` | Help and command picker (on an empty prompt) |
|
|
90
|
-
| `@` | File picker
|
|
101
|
+
| `@` | File picker: insert a path into the prompt |
|
|
91
102
|
| `Tab` | Toggle collapse on the nearest block, or complete a path |
|
|
92
103
|
| `Ctrl+F` | Search the conversation |
|
|
93
104
|
| `Ctrl+Y` / `Ctrl+S` | Copy / save the nearest block |
|
|
94
105
|
| `Ctrl+P` | Toggle the panel sidebar |
|
|
95
|
-
| `F2` | Toggle Fleet
|
|
96
|
-
| `Ctrl+K` | Command palette
|
|
106
|
+
| `F2` | Toggle Fleet: open and focus it, bring it to front, or close it |
|
|
107
|
+
| `Ctrl+K` | Command palette: search and run any command |
|
|
97
108
|
| `Shift+Tab` | Cycle the session permission mode |
|
|
98
|
-
| `Esc` | Leave the current mode
|
|
99
|
-
| `Ctrl+C` | Clear input, cancel a running turn
|
|
109
|
+
| `Esc` | Leave the current mode: search, command, or modal |
|
|
110
|
+
| `Ctrl+C` | Clear input, cancel a running turn. Press twice to quit |
|
|
100
111
|
|
|
101
112
|
Most bindings are customizable in `~/.goodvibes/tui/keybindings.json`, and `/keybindings` shows what is currently bound. Five keys are fixed and stay out of that file: `F2`, `Shift+Tab`, `Esc`, `?`, and `@`. The full reference is in [docs/tools-and-commands.md](docs/tools-and-commands.md).
|
|
102
113
|
|
|
@@ -137,8 +148,8 @@ Full index: [docs/README.md](docs/README.md).
|
|
|
137
148
|
Settings are layered. Later layers win:
|
|
138
149
|
|
|
139
150
|
1. built-in defaults
|
|
140
|
-
2. global settings
|
|
141
|
-
3. project overrides
|
|
151
|
+
2. global settings: `~/.goodvibes/tui/settings.json`
|
|
152
|
+
3. project overrides: `.goodvibes/tui/settings.json`
|
|
142
153
|
4. CLI and runtime overrides
|
|
143
154
|
|
|
144
155
|
Edit them live with `/settings` or the fullscreen `/config` workspace rather than by hand. A few of the most-reached-for keys:
|
|
@@ -177,7 +188,7 @@ This includes but is not limited to when a provider moves a model from free to p
|
|
|
177
188
|
|
|
178
189
|
Refreshes happen automatically when a new session is started or resumed after the 24-hour catalog TTL expires. For long-running sessions, please ensure that the models are refreshed daily.
|
|
179
190
|
|
|
180
|
-
Paid and subscription models never auto-switch to a different model
|
|
191
|
+
Paid and subscription models never auto-switch to a different model. That choice stays yours. When one is exhausted, GoodVibes says so and offers to wait out the cooldown, change model, or move to a free synthetic model. Full failover behavior: [docs/providers-and-routing.md](docs/providers-and-routing.md).
|
|
181
192
|
|
|
182
193
|
---
|
|
183
194
|
|
|
@@ -196,22 +207,22 @@ bun run dev
|
|
|
196
207
|
| `bun test` | Run the suite through the parallel per-file runner |
|
|
197
208
|
| `bun run build` | Compile `src/main.ts` into `dist/goodvibes` |
|
|
198
209
|
|
|
199
|
-
The compiled binary is the TUI entrypoint
|
|
210
|
+
The compiled binary is the TUI entrypoint. It adopts a running standalone GoodVibes daemon, or starts one already installed as a stopped service, and hosts the HTTP listener when `danger.httpListener` is enabled. It never spawns a new daemon process itself (`daemon.enabled`, on by default, loopback-bound).
|
|
200
211
|
|
|
201
212
|
Tests live under `src/test/`, mirroring the source tree, and cover contract, security, release-gate, runtime, renderer, panel, integration, and anti-regression cases. Several gates run alongside them in CI: byte-exact golden renderer frames, performance budgets for startup and frame composition and line production (`scripts/perf-baseline.json`), and architecture rules for import cycles, layer boundaries, source-file size, and unused renderer exports (`scripts/check-architecture.ts`).
|
|
202
213
|
|
|
203
214
|
Some decisions worth knowing before you read the source:
|
|
204
215
|
|
|
205
|
-
- **Bun runtime
|
|
206
|
-
- **Raw ANSI renderer
|
|
207
|
-
- **In-process agents
|
|
208
|
-
- **Typed runtime store
|
|
209
|
-
- **Tree-sitter and bundled language servers
|
|
210
|
-
- **Backend-first external surface
|
|
211
|
-
- **Crash recovery
|
|
212
|
-
- **Render coalescing and a per-message line cache
|
|
216
|
+
- **Bun runtime.** Native TypeScript execution, fast startup, built-in test runner.
|
|
217
|
+
- **Raw ANSI renderer.** It writes the UI straight to the alternate screen buffer, giving direct control over every byte sent to the terminal. Conversation, panels, modals, overlays, and the footer all share that one renderer.
|
|
218
|
+
- **In-process agents.** Agents run in the same process rather than over IPC, staying isolated through scoped tool registries and namespaced state.
|
|
219
|
+
- **Typed runtime store.** A plain `zustand/vanilla` store with typed selectors and dispatch paths, reachable from agents, tools, renderer, hooks, channels, and daemon surfaces alike.
|
|
220
|
+
- **Tree-sitter and bundled language servers.** Grammars for structural analysis, outlines, and AST-level edits, several embedded as WASM for instant startup. TypeScript, Python, Bash, CSS, HTML, and JSON language servers ship as dependencies, while `rust-analyzer` and `gopls` are fetched on first use with checksum verification.
|
|
221
|
+
- **Backend-first external surface.** The daemon product exposes typed HTTP and gateway methods, so other clients do not reimplement runtime logic.
|
|
222
|
+
- **Crash recovery.** Periodic snapshots plus an fsync-per-record append-only transcript journal, replayed at every resume seam.
|
|
223
|
+
- **Render coalescing and a per-message line cache.** Same-tick render requests collapse into one composite frame, and transcript growth re-renders only the appended message instead of rebuilding the whole conversation.
|
|
213
224
|
|
|
214
|
-
The TUI consumes the published `@pellux/goodvibes-sdk` platform layer
|
|
225
|
+
The TUI consumes the published `@pellux/goodvibes-sdk` platform layer for shared contracts, daemon routes, and transports, and keeps the terminal UI, host wiring, and product composition here. The dependency is pinned in `package.json`. Reference consumers of those surfaces live under [`examples/`](examples/reference-operator-client/README.md).
|
|
215
226
|
|
|
216
227
|
Source layout, in brief:
|
|
217
228
|
|
package/docs/README.md
CHANGED
|
@@ -47,7 +47,7 @@ This directory contains the current product documentation for `goodvibes-tui`.
|
|
|
47
47
|
Global flags reference: session lifecycle (`--continue`, `--resume`, `--fork`), confirmation bypass (`-y`/`--non-interactive`), output format consolidation, `--host` alias, and all other startup and command-specific flags.
|
|
48
48
|
|
|
49
49
|
- [Commands reference](commands-reference.md)
|
|
50
|
-
The generated, categorized list of every slash command, its arguments, and its description
|
|
50
|
+
The generated, categorized list of every slash command, its arguments, and its description. It is the same list `?` renders in the product.
|
|
51
51
|
|
|
52
52
|
- [Windows support](windows.md)
|
|
53
53
|
WSL2 as the supported path today, what the native Windows beta binary can and cannot do yet, and the POSIX-assumption blockers ahead of promotion.
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
## Foundation
|
|
1
|
+
## Foundation artifacts
|
|
2
2
|
|
|
3
3
|
These files are the checked-in canonical artifacts for the current GoodVibes foundation surfaces.
|
|
4
4
|
|
|
5
|
-
- `operator-contract.json
|
|
6
|
-
- `peer-contract.json
|
|
7
|
-
- `knowledge-graphql.graphql
|
|
8
|
-
- `knowledge-store.sql
|
|
5
|
+
- `operator-contract.json`: typed operator/client contract manifest
|
|
6
|
+
- `peer-contract.json`: node-host and peer contract manifest
|
|
7
|
+
- `knowledge-graphql.graphql`: canonical knowledge GraphQL schema text
|
|
8
|
+
- `knowledge-store.sql`: canonical knowledge SQL schema
|
|
9
9
|
|
|
10
10
|
Regenerate them with:
|
|
11
11
|
|