@pellux/goodvibes-tui 1.27.1 → 2.0.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 +116 -2
- package/README.md +7 -9
- package/bin/goodvibes +2 -2
- package/bin/launcher-support.js +8 -4
- package/docs/README.md +11 -2
- package/docs/foundation-artifacts/operator-contract.json +6403 -2347
- package/package.json +14 -25
- package/scripts/postinstall.js +35 -35
- package/src/audio/spoken-turn-model-routing.ts +1 -1
- package/src/cli/bundle-command.ts +5 -5
- package/src/cli/completions/generate.ts +1 -1
- package/src/cli/doctor.ts +3 -3
- package/src/cli/entrypoint.ts +12 -7
- package/src/cli/help.ts +4 -5
- package/src/cli/hooks-command.ts +1 -1
- package/src/cli/index.ts +1 -4
- package/src/cli/launch-auto-update.ts +59 -7
- package/src/cli/management-commands.ts +6 -6
- package/src/cli/management-utils.ts +5 -5
- package/src/cli/management.ts +7 -7
- package/src/cli/network-posture.ts +1 -1
- package/src/cli/package-verification.ts +7 -6
- package/src/cli/plugin-bundles-command.ts +1 -1
- package/src/cli/plugin-command.ts +2 -2
- package/src/cli/service-command.ts +2 -2
- package/src/cli/service-posture.ts +4 -4
- package/src/cli/status.ts +9 -8
- package/src/cli/surface-command.ts +4 -4
- package/src/cli/tui-startup.ts +3 -3
- package/src/cli-flags.ts +3 -3
- package/src/config/goodvibes-home-audit.ts +0 -2
- package/src/config/secret-config.ts +37 -5
- package/src/config/tui-extension-settings.ts +1 -1
- package/src/core/approval-alert.ts +2 -2
- package/src/core/budget-breach-notifier.ts +3 -3
- package/src/core/conversation-compaction-render.ts +1 -1
- package/src/core/conversation-line-cache.ts +1 -1
- package/src/core/conversation-render-context.ts +1 -1
- package/src/core/conversation-rendering.ts +2 -2
- package/src/core/conversation.ts +10 -10
- package/src/core/long-task-notifier.ts +2 -2
- package/src/core/memory-diagnostics-gateway.ts +1 -1
- package/src/core/scriptable-statusline.ts +1 -1
- package/src/core/session-auto-titler.ts +1 -1
- package/src/core/session-resume-core.ts +2 -2
- package/src/core/stream-event-wiring.ts +24 -44
- package/src/core/terminal-notifier.ts +3 -3
- package/src/core/turn-cancellation.ts +1 -1
- package/src/core/turn-event-wiring.ts +5 -5
- package/src/input/command-registry.ts +6 -6
- package/src/input/commands/channel-pairing.ts +1 -1
- package/src/input/commands/cluster-runtime.ts +1 -1
- package/src/input/commands/codebase-runtime.ts +1 -1
- package/src/input/commands/devices-runtime.ts +1 -1
- package/src/input/commands/hosted-runtime.ts +330 -0
- package/src/input/commands/local-setup-review.ts +1 -1
- package/src/input/commands/local-setup-transfer.ts +2 -2
- package/src/input/commands/local-setup.ts +3 -3
- package/src/input/commands/managed-runtime.ts +2 -2
- package/src/input/commands/operator-rpc.ts +24 -110
- package/src/input/commands/payment-card-intake.ts +1 -1
- package/src/input/commands/permissions-provenance.ts +2 -2
- package/src/input/commands/plugin-runtime.ts +1 -1
- package/src/input/commands/provider.ts +1 -1
- package/src/input/commands/relay-runtime.ts +18 -9
- package/src/input/commands/rewind-runtime.ts +1 -1
- package/src/input/commands/runtime-services.ts +1 -1
- package/src/input/commands/services-runtime.ts +1 -1
- package/src/input/commands/session-workflow.ts +1 -1
- package/src/input/commands/settings-sync-runtime.ts +2 -2
- package/src/input/commands/share-runtime.ts +1 -1
- package/src/input/commands/tasks-runtime.ts +145 -55
- package/src/input/commands/update-runtime.ts +31 -28
- package/src/input/commands/work-plan-runtime.ts +2 -2
- package/src/input/commands/workstream-attempts.ts +1 -1
- package/src/input/commands/workstream-runtime.ts +2 -2
- package/src/input/commands.ts +2 -0
- package/src/input/feature-unit-layout.ts +1 -1
- package/src/input/feed-context-factory.ts +3 -3
- package/src/input/handler-content-actions.ts +2 -2
- package/src/input/handler-feed-routes.ts +1 -1
- package/src/input/handler-feed.ts +3 -3
- package/src/input/handler-modal-token-routes.ts +1 -1
- package/src/input/handler-onboarding-daemon-adopt.ts +3 -2
- package/src/input/handler-onboarding.ts +1 -1
- package/src/input/handler-types.ts +2 -2
- package/src/input/handler-ui-state.ts +1 -1
- package/src/input/handler.ts +4 -4
- package/src/input/input-history.ts +1 -1
- package/src/input/onboarding/onboarding-feature-units.ts +2 -2
- package/src/input/onboarding/onboarding-runtime-status.ts +15 -1
- package/src/input/onboarding/onboarding-wizard-apply.ts +17 -8
- package/src/input/onboarding/onboarding-wizard-cloudflare-step.ts +5 -3
- package/src/input/onboarding/onboarding-wizard-external-surfaces.ts +1 -1
- package/src/input/onboarding/onboarding-wizard-types.ts +1 -1
- package/src/input/payments-config.ts +6 -6
- package/src/input/search.ts +1 -1
- package/src/input/session-picker-modal.ts +46 -0
- package/src/input/settings-modal-activation.ts +1 -1
- package/src/input/settings-modal-behavior.ts +4 -4
- package/src/input/settings-modal-commit.ts +11 -0
- package/src/input/settings-modal-data.ts +13 -80
- package/src/input/settings-modal-mutations.ts +33 -0
- package/src/input/settings-modal-secrets.ts +34 -0
- package/src/input/settings-modal-subscriptions.ts +1 -1
- package/src/input/settings-modal-types.ts +15 -1
- package/src/input/settings-modal.ts +28 -3
- package/src/input/worktree-setup-config.ts +1 -1
- package/src/main.ts +11 -9
- package/src/panels/agent-inspector-shared.ts +2 -2
- package/src/panels/base-panel.ts +2 -2
- package/src/panels/builtin/operations.ts +6 -8
- package/src/panels/builtin/session.ts +17 -0
- package/src/panels/builtin/shared.ts +5 -5
- package/src/panels/builtin-modals.ts +3 -3
- package/src/panels/confirm-state.ts +1 -1
- package/src/panels/cost-tracker-panel.ts +4 -4
- package/src/panels/diff-panel.ts +2 -2
- package/src/panels/diff-review-panel.ts +2 -2
- package/src/panels/expandable-list-panel.ts +2 -2
- package/src/panels/fleet-acts.ts +1 -1
- package/src/panels/fleet-observed-render.ts +1 -1
- package/src/panels/fleet-panel-format.ts +1 -1
- package/src/panels/fleet-panel.ts +1 -1
- package/src/panels/fleet-spawn.ts +1 -1
- package/src/panels/fleet-steer.ts +1 -1
- package/src/panels/fleet-transcript.ts +1 -1
- package/src/panels/git-panel.ts +1 -1
- package/src/panels/hosted-session-feed.ts +352 -0
- package/src/panels/hosted-session-panel.ts +221 -0
- package/src/panels/local-auth-panel.ts +3 -3
- package/src/panels/modals/devices-modal.ts +1 -1
- package/src/panels/modals/local-auth-modal.ts +1 -1
- package/src/panels/modals/pairing-modal.ts +1 -1
- package/src/panels/modals/services-modal.ts +1 -1
- package/src/panels/modals/settings-sync-modal.ts +1 -1
- package/src/panels/modals/subscription-modal.ts +1 -1
- package/src/panels/modals/work-plan-modal.ts +1 -1
- package/src/panels/notifications-panel.ts +1 -1
- package/src/panels/panel-confirm-overlay.ts +1 -1
- package/src/panels/plugins-panel.ts +2 -2
- package/src/panels/polish-core.ts +2 -2
- package/src/panels/polish-tables.ts +1 -1
- package/src/panels/polish.ts +2 -2
- package/src/panels/scrollable-list-panel.ts +3 -3
- package/src/panels/skills-panel.ts +3 -3
- package/src/panels/token-budget-panel.ts +5 -5
- package/src/panels/types.ts +1 -2
- package/src/permissions/prompt.ts +1 -1
- package/src/renderer/autocomplete-overlay.ts +1 -1
- package/src/renderer/block-actions-overlay.ts +1 -1
- package/src/renderer/bookmark-modal.ts +1 -1
- package/src/renderer/buffer.ts +1 -1
- package/src/renderer/code-block.ts +1 -1
- package/src/renderer/composer-fragments.ts +1 -1
- package/src/renderer/compositor.ts +2 -2
- package/src/renderer/config-modal.ts +1 -1
- package/src/renderer/context-inspector.ts +1 -1
- package/src/renderer/conversation-layout.ts +2 -2
- package/src/renderer/conversation-overlays.ts +1 -1
- package/src/renderer/conversation-surface.ts +2 -2
- package/src/renderer/diff-view.ts +1 -1
- package/src/renderer/diff.ts +1 -1
- package/src/renderer/file-picker-overlay.ts +1 -1
- package/src/renderer/fleet-tab-strip.ts +1 -1
- package/src/renderer/fullscreen-primitives.ts +2 -2
- package/src/renderer/fullscreen-workspace.ts +1 -1
- package/src/renderer/header-line.ts +1 -1
- package/src/renderer/help-overlay.ts +1 -1
- package/src/renderer/history-search-overlay.ts +2 -2
- package/src/renderer/layout.ts +5 -8
- package/src/renderer/markdown-inline.ts +1 -1
- package/src/renderer/markdown-table.ts +1 -1
- package/src/renderer/markdown.ts +1 -1
- package/src/renderer/mcp-workspace.ts +1 -1
- package/src/renderer/modal-factory.ts +2 -2
- package/src/renderer/model-workspace.ts +2 -2
- package/src/renderer/onboarding/onboarding-wizard.ts +1 -1
- package/src/renderer/overlay-box.ts +1 -1
- package/src/renderer/panel-composite.ts +1 -1
- package/src/renderer/panel-workspace-bar.ts +1 -1
- package/src/renderer/process-indicator.ts +1 -1
- package/src/renderer/profile-picker-modal.ts +1 -1
- package/src/renderer/search-overlay.ts +2 -2
- package/src/renderer/selection-modal-overlay.ts +1 -1
- package/src/renderer/session-picker-modal.ts +124 -3
- package/src/renderer/settings-modal-helpers.ts +2 -0
- package/src/renderer/settings-modal.ts +2 -2
- package/src/renderer/shell-surface.ts +2 -2
- package/src/renderer/system-message.ts +1 -1
- package/src/renderer/tab-strip.ts +1 -1
- package/src/renderer/theme-mode-config.ts +1 -1
- package/src/renderer/theme.ts +11 -12
- package/src/renderer/thinking.ts +1 -1
- package/src/renderer/tool-call.ts +2 -2
- package/src/renderer/tool-result-expanded-lines.ts +1 -1
- package/src/renderer/turn-injection.ts +7 -8
- package/src/renderer/ui-factory.ts +3 -3
- package/src/runtime/bootstrap-command-context.ts +4 -4
- package/src/runtime/bootstrap-command-parts.ts +5 -5
- package/src/runtime/bootstrap-core.ts +30 -30
- package/src/runtime/bootstrap-shell.ts +4 -4
- package/src/runtime/bootstrap.ts +128 -157
- package/src/runtime/client/approval-updates.ts +82 -0
- package/src/runtime/client/build-floors.ts +167 -0
- package/src/runtime/client/daemon-attach-handshake.ts +115 -0
- package/src/runtime/client/fleet-union.ts +147 -0
- package/src/runtime/client/host-service-status.ts +71 -0
- package/src/runtime/client/hosted-exit.ts +86 -0
- package/src/runtime/client/hosted-roster.ts +110 -0
- package/src/runtime/client/hosted-session-stream.ts +178 -0
- package/src/runtime/client/hosted-sessions.ts +187 -0
- package/src/runtime/client/operator-endpoint.ts +213 -0
- package/src/runtime/client/spine-adoption.ts +99 -0
- package/src/runtime/cloudflare-control-plane.ts +1 -1
- package/src/runtime/context-accounting-source.ts +1 -1
- package/src/runtime/context.ts +2 -2
- package/src/runtime/conversation-rewind-port.ts +42 -14
- package/src/runtime/daemon-attach-notices.ts +55 -19
- package/src/runtime/diagnostics/panels/ops.ts +1 -1
- package/src/runtime/disposal-wiring.ts +4 -24
- package/src/runtime/index.ts +119 -105
- package/src/runtime/install-self-check-startup.ts +2 -2
- package/src/runtime/interaction-seams.ts +1 -1
- package/src/runtime/knowledge-services.ts +8 -2
- package/src/runtime/legacy-daemon-migration.ts +4 -3
- package/src/runtime/legacy-daemon-reconcile.ts +3 -2
- package/src/runtime/memory-spine-transport.ts +37 -267
- package/src/runtime/notification-dispatch.ts +2 -2
- package/src/runtime/onboarding/apply.ts +2 -2
- package/src/runtime/onboarding/derivation.ts +2 -2
- package/src/runtime/onboarding/markers.ts +2 -2
- package/src/runtime/onboarding/progress.ts +2 -2
- package/src/runtime/onboarding/snapshot.ts +1 -1
- package/src/runtime/onboarding/state.ts +2 -2
- package/src/runtime/onboarding/types.ts +2 -2
- package/src/runtime/orchestrator-core-services.ts +1 -1
- package/src/runtime/path-shadow-startup.ts +28 -221
- package/src/runtime/power-keepawake-remote.ts +3 -2
- package/src/runtime/process-lifecycle.ts +2 -2
- package/src/runtime/provider-fallback.ts +10 -66
- package/src/runtime/recovery-autosave.ts +1 -1
- package/src/runtime/recovery-offer-wiring.ts +39 -23
- package/src/runtime/recovery-prompt.ts +31 -17
- package/src/runtime/relay-reachability-bridge.ts +53 -42
- package/src/runtime/release-artifacts.ts +2 -1
- package/src/runtime/runtime-services-types.ts +82 -35
- package/src/runtime/services.ts +305 -300
- package/src/runtime/session-resume-liveness-confirm.ts +1 -1
- package/src/runtime/ui-services.ts +7 -6
- package/src/runtime/update-check.ts +23 -43
- package/src/runtime/workspace-checkpointing.ts +1 -1
- package/src/runtime/wrfc-persistence.ts +2 -2
- package/src/shell/ui-openers.ts +30 -7
- package/src/utils/clipboard.ts +1 -1
- package/src/verification/verification-ledger.ts +10 -8
- package/src/version.ts +1 -1
- package/bin/goodvibes-daemon +0 -90
- package/src/cli/config-overrides.ts +0 -267
- package/src/cli/endpoints.ts +0 -109
- package/src/cli/parser.ts +0 -395
- package/src/cli/redaction.ts +0 -170
- package/src/cli/types.ts +0 -84
- package/src/cluster/commands.ts +0 -382
- package/src/cluster/remote-daemon-target.ts +0 -225
- package/src/cluster/render.ts +0 -268
- package/src/config/atomic-write.ts +0 -70
- package/src/config/credential-availability.ts +0 -122
- package/src/config/goodvibes-home.ts +0 -149
- package/src/config/index.ts +0 -88
- package/src/config/provider-model.ts +0 -23
- package/src/config/read-versioned.ts +0 -228
- package/src/core/alert-gating.ts +0 -67
- package/src/core/consolidation-receipt.ts +0 -41
- package/src/core/focus-tracker.ts +0 -41
- package/src/core/history.ts +0 -45
- package/src/core/memory-status.ts +0 -118
- package/src/core/orchestrator.ts +0 -7
- package/src/core/pairing-devices.ts +0 -49
- package/src/core/pairing-handoff.ts +0 -101
- package/src/core/pairing-offers.ts +0 -83
- package/src/core/pairing-origin.ts +0 -78
- package/src/core/rewind-turn-anchors.ts +0 -311
- package/src/core/session-recovery.ts +0 -210
- package/src/core/stable-host.ts +0 -171
- package/src/core/transcript-journal.ts +0 -503
- package/src/daemon/cli.ts +0 -693
- package/src/daemon/fatal-boot-report.ts +0 -111
- package/src/daemon/handlers/context.ts +0 -29
- package/src/daemon/handlers/contracts.ts +0 -77
- package/src/daemon/handlers/credentials.ts +0 -139
- package/src/daemon/handlers/drafts/draft-store.ts +0 -427
- package/src/daemon/handlers/drafts/index.ts +0 -17
- package/src/daemon/handlers/drafts/register.ts +0 -331
- package/src/daemon/handlers/errors.ts +0 -18
- package/src/daemon/handlers/inbox/cursor-store.ts +0 -457
- package/src/daemon/handlers/inbox/index.ts +0 -284
- package/src/daemon/handlers/inbox/mapping.ts +0 -192
- package/src/daemon/handlers/inbox/poller.ts +0 -212
- package/src/daemon/handlers/inbox/provider-adapter.ts +0 -156
- package/src/daemon/handlers/inbox/providers/discord.ts +0 -252
- package/src/daemon/handlers/inbox/providers/email.ts +0 -152
- package/src/daemon/handlers/inbox/providers/imap-client.ts +0 -300
- package/src/daemon/handlers/inbox/providers/route-util.ts +0 -24
- package/src/daemon/handlers/inbox/providers/slack.ts +0 -263
- package/src/daemon/handlers/index.ts +0 -117
- package/src/daemon/handlers/register.ts +0 -168
- package/src/daemon/handlers/remote/backends/cloud-terminal.ts +0 -142
- package/src/daemon/handlers/remote/backends/docker.ts +0 -79
- package/src/daemon/handlers/remote/backends/index.ts +0 -40
- package/src/daemon/handlers/remote/backends/local-process.ts +0 -113
- package/src/daemon/handlers/remote/backends/process-runner.ts +0 -127
- package/src/daemon/handlers/remote/backends/ssh.ts +0 -125
- package/src/daemon/handlers/remote/backends/types.ts +0 -97
- package/src/daemon/handlers/remote/dispatcher.ts +0 -181
- package/src/daemon/handlers/remote/index.ts +0 -119
- package/src/daemon/handlers/remote/peer-registry.ts +0 -357
- package/src/daemon/handlers/remote/service.ts +0 -191
- package/src/daemon/handlers/routing/inbox-bridge.ts +0 -71
- package/src/daemon/handlers/routing/index.ts +0 -261
- package/src/daemon/handlers/routing/route-store.ts +0 -319
- package/src/daemon/handlers/routing/routing-resolver.ts +0 -75
- package/src/daemon/handlers/sqlite-store.ts +0 -278
- package/src/daemon/handlers/triage/index.ts +0 -57
- package/src/daemon/handlers/triage/integration.ts +0 -213
- package/src/daemon/handlers/triage/pipeline.ts +0 -274
- package/src/daemon/handlers/triage/scorer.ts +0 -287
- package/src/daemon/handlers/triage/tagger/discord.ts +0 -187
- package/src/daemon/handlers/triage/tagger/imap.ts +0 -384
- package/src/daemon/handlers/triage/tagger/index.ts +0 -184
- package/src/daemon/handlers/triage/tagger/shared.ts +0 -70
- package/src/daemon/handlers/triage/tagger/slack.ts +0 -69
- package/src/daemon/handlers/triage/types.ts +0 -50
- package/src/daemon/lifecycle.ts +0 -41
- package/src/daemon/provision-wake-model.ts +0 -81
- package/src/daemon/safe-serve.ts +0 -61
- package/src/daemon/send/channels.ts +0 -200
- package/src/daemon/send/command.ts +0 -332
- package/src/daemon/send/composition.ts +0 -99
- package/src/daemon/send/failure-text.ts +0 -93
- package/src/daemon/send/inert-text.ts +0 -225
- package/src/daemon/send/stdin.ts +0 -24
- package/src/daemon/service-commands.ts +0 -329
- package/src/export/cost-utils.ts +0 -319
- package/src/input/selection.ts +0 -135
- package/src/plugins/loader.ts +0 -15
- package/src/renderer/bottom-bar.ts +0 -58
- package/src/renderer/conversation-tree.ts +0 -228
- package/src/runtime/agent-graph-composition.ts +0 -78
- package/src/runtime/channel-composition.ts +0 -46
- package/src/runtime/cluster-composition.ts +0 -124
- package/src/runtime/cluster-group-composition.ts +0 -284
- package/src/runtime/code-index-services.ts +0 -167
- package/src/runtime/daemon-handler-composition.ts +0 -76
- package/src/runtime/device-posture-composition.ts +0 -110
- package/src/runtime/durability-housekeeping.ts +0 -183
- package/src/runtime/durability-services.ts +0 -155
- package/src/runtime/embedded-service-factories.ts +0 -74
- package/src/runtime/feature-settings.ts +0 -154
- package/src/runtime/fleet-needs-input-push.ts +0 -70
- package/src/runtime/fleet-services.ts +0 -41
- package/src/runtime/idle-power-services.ts +0 -85
- package/src/runtime/mail-composition.ts +0 -65
- package/src/runtime/memory-fold.ts +0 -55
- package/src/runtime/operator-token-cleanup.ts +0 -109
- package/src/runtime/path-shadow.ts +0 -418
- package/src/runtime/perf/panel-health-monitor.ts +0 -18
- package/src/runtime/provider-optimizer-wiring.ts +0 -55
- package/src/runtime/reachability-notice.ts +0 -100
- package/src/runtime/remote-execution-composition.ts +0 -62
- package/src/runtime/session-liveness-marker.ts +0 -257
- package/src/runtime/session-pointer-surface.ts +0 -22
- package/src/runtime/session-storage-services.ts +0 -41
- package/src/runtime/surface-feature-flags.ts +0 -96
- package/src/runtime/terminal-output-guard.ts +0 -235
- package/src/runtime/trust/workspace-registration.ts +0 -192
- package/src/runtime/trust/workspace-trust.ts +0 -229
- package/src/runtime/ui/index.ts +0 -39
- package/src/runtime/ui/model-picker/data-provider.ts +0 -182
- package/src/runtime/ui/model-picker/health-enrichment.ts +0 -231
- package/src/runtime/ui/model-picker/index.ts +0 -59
- package/src/runtime/ui/model-picker/types.ts +0 -153
- package/src/runtime/ui/provider-health/data-provider.ts +0 -244
- package/src/runtime/ui/provider-health/fallback-visualizer.ts +0 -71
- package/src/runtime/ui/provider-health/index.ts +0 -46
- package/src/runtime/ui/provider-health/types.ts +0 -146
- package/src/runtime/ui-events.ts +0 -1
- package/src/runtime/ui-read-model-helpers.ts +0 -1
- package/src/runtime/ui-read-models-observability-maintenance.ts +0 -1
- package/src/runtime/ui-read-models-observability-options.ts +0 -1
- package/src/runtime/ui-read-models-observability-remote.ts +0 -1
- package/src/runtime/ui-read-models-observability-security.ts +0 -1
- package/src/runtime/ui-read-models-observability-system.ts +0 -1
- package/src/runtime/ui-read-models-observability.ts +0 -1
- package/src/runtime/ui-service-queries.ts +0 -1
- package/src/runtime/voice-setup-services.ts +0 -98
- package/src/runtime/workstream-attempts-validation.ts +0 -77
- package/src/runtime/workstream-draft-edits.ts +0 -95
- package/src/runtime/workstream-draft-store.ts +0 -274
- package/src/runtime/workstream-draft-types.ts +0 -42
- package/src/runtime/workstream-services.ts +0 -373
- package/src/tools/index.ts +0 -1
- package/src/types/grid.ts +0 -48
- package/src/types/sql-js.d.ts +0 -15
- package/src/work-plans/work-plan-store.ts +0 -702
|
@@ -87,6 +87,7 @@ export const CATEGORY_INFO: Record<SettingsCategory, string> = {
|
|
|
87
87
|
automation: 'Scheduled and automated run settings, concurrency, timeout, catch-up, cooldown, and retention behavior.',
|
|
88
88
|
checkin: 'Proactive check-in: on a cadence, a briefing is judged and you are contacted only when something warrants it. Off by default; every run — scheduled or manual — leaves a receipt (see /checkin) recording whether it stayed quiet, delivered a message, or was skipped.',
|
|
89
89
|
occasions: 'Proactive occasions and plans: dated, usually-recurring things that need an action (birthdays, anniversaries) and dated ranges that need only to be known about (a vacation). On by default. Lead time before a date, active hours nudges are allowed to arrive in, the nudge channel (empty makes it pull-only through /occasions), cadence while a window is open and the daily final stretch before it closes, whether an away plan moves a nudge earlier, whether a confirmed occasion mirrors to the calendar and whether a mirrored one suppresses its own nudge, how many questions the gift interview asks, how many years of gift history it keeps, and how often the sweep pass runs. The nudge itself never names the date — only how soon.',
|
|
90
|
+
hostedSessions: 'Sessions whose conversation loop runs INSIDE the daemon instead of this terminal, so the work does not end when the window that started it closes. What happens when the last client leaves is the detach policy: the shipped default is `kill` — exactly what closing a client has always done — and `survive` is the opt-in that leaves the session idle and reattachable. A session created with /hosted new --survive or --kill overrides the setting for itself. The remaining rows bound the capability: how many hosted sessions may run at once, how many messages one keeps, and how long a terminated session\'s record (with the reason it ended) is retained before it is retired.',
|
|
90
91
|
watchers: 'File/process watcher heartbeat, polling, and recovery-window behavior, plus the trigger family (watchers.triggers.*, rendered as its own unit): stream watchers that regex-filter and batch a long-lived command\'s output, model-free condition checks running a probe/extract/rule pipeline with no LLM in the loop, and one-shot on-exit triggers that fire exactly one payload when a launched command terminates. The trigger family is off by default — a trigger supervises real processes with nobody watching — and its rows tune the backoff ladder, the strike breaker, retention bounds, batching, and process caps.',
|
|
91
92
|
runtime: 'Runtime guardrails such as companion chat limiter and event bus listener caps.',
|
|
92
93
|
telemetry: 'Telemetry payload policy.',
|
|
@@ -143,6 +144,7 @@ export const CATEGORY_LABELS: Record<(typeof SETTINGS_CATEGORIES)[number], strin
|
|
|
143
144
|
automation: 'Automation',
|
|
144
145
|
checkin: 'Check-in',
|
|
145
146
|
occasions: 'Occasions & Plans',
|
|
147
|
+
hostedSessions: 'Hosted Sessions',
|
|
146
148
|
watchers: 'Watchers',
|
|
147
149
|
runtime: 'Runtime',
|
|
148
150
|
telemetry: 'Telemetry',
|
|
@@ -5,10 +5,10 @@
|
|
|
5
5
|
* roomy workspace with contextual documentation, not a cramped modal list.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
import type { Line } from '
|
|
8
|
+
import type { Line } from '@pellux/goodvibes-sdk/platform/types';
|
|
9
9
|
import type { SettingsModal, SettingEntry, McpEntry, SubscriptionEntry, SettingsCategory } from '../input/settings-modal.ts';
|
|
10
10
|
import { SETTINGS_CATEGORIES, SETTINGS_CATEGORY_GROUPS } from '../input/settings-modal.ts';
|
|
11
|
-
import { FEATURE_SETTINGS_BY_ID, isFeatureValueEnabled } from '
|
|
11
|
+
import { FEATURE_SETTINGS_BY_ID, isFeatureValueEnabled } from '@pellux/goodvibes-terminal-shell';
|
|
12
12
|
import { getDisplayWidth, wrapText } from '../utils/terminal-width.ts';
|
|
13
13
|
import { CATEGORY_INFO, CATEGORY_LABELS, describeUiRouting, formatValue, getSettingLabel, inferSubscriptionRouteReason, valueColor } from './settings-modal-helpers.ts';
|
|
14
14
|
import { buildConnectionContext, renderConnectionRows } from './settings-modal-connections.ts';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Line } from '
|
|
1
|
+
import type { Line } from '@pellux/goodvibes-sdk/platform/types';
|
|
2
2
|
import { renderProcessIndicator, renderVoiceCaptureIndicator } from './process-indicator.ts';
|
|
3
3
|
import { UIFactory } from './ui-factory.ts';
|
|
4
4
|
import { voiceCaptureRowVisible, type VoiceCaptureIndicatorState } from '../core/voice-capture-status.ts';
|
|
@@ -78,7 +78,7 @@ export interface ShellFooterBuildOptions {
|
|
|
78
78
|
/**
|
|
79
79
|
* Cross-surface session-spine posture for the context-info segment.
|
|
80
80
|
* Set ONLY in adopted-daemon mode ('online'/'offline'); left undefined in
|
|
81
|
-
*
|
|
81
|
+
* local-only mode so no segment renders.
|
|
82
82
|
*/
|
|
83
83
|
readonly sessionSpineStatus?: 'online' | 'offline';
|
|
84
84
|
/** The web surface's reachable URL, when that surface is enabled; a persistent footer segment. */
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type Line } from '
|
|
1
|
+
import { type Line } from '@pellux/goodvibes-sdk/platform/types';
|
|
2
2
|
import { BORDERS } from './layout.ts';
|
|
3
3
|
import { renderConversationNotice } from './conversation-surface.ts';
|
|
4
4
|
import { activeUiTones } from './theme.ts';
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* DEFAULT_CONFIG, and adding an `appearance` section would require an SDK schema
|
|
9
9
|
* change (out of scope for this TUI-only work order). Storing under `display`
|
|
10
10
|
* reuses the same proven "TUI-local synthetic setting" pattern the codebase
|
|
11
|
-
* already uses for
|
|
11
|
+
* already uses for behavior.notifyAfterSeconds / storage.codeIndexEnabled:
|
|
12
12
|
* ConfigManager.setDynamic writes it to settings.json and get() reads it back,
|
|
13
13
|
* with zero SDK changes.
|
|
14
14
|
*
|
package/src/renderer/theme.ts
CHANGED
|
@@ -5,11 +5,11 @@
|
|
|
5
5
|
* conversation-rendering pipeline, resolved to concrete hex or ANSI-256 values
|
|
6
6
|
* per background mode.
|
|
7
7
|
*
|
|
8
|
-
* Dark mode values are the historically used colours.
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
8
|
+
* Dark mode values are the historically used colours. Light mode values are
|
|
9
|
+
* consumed when the terminal-background probe (terminal-bg-probe.ts) resolves a
|
|
10
|
+
* light background under `display.themeMode: auto`, or when the owner forces
|
|
11
|
+
* light. A caller with no mode of its own passes 'dark', the safe default for a
|
|
12
|
+
* terminal whose background is unknown.
|
|
13
13
|
*
|
|
14
14
|
* IMPORTANT: inline code has NO background token. The bg:#1a1a1a hardcode
|
|
15
15
|
* that previously existed caused a near-black box on light terminals.
|
|
@@ -20,14 +20,13 @@
|
|
|
20
20
|
* status colours). It composes the same ThemeMode dimension so that
|
|
21
21
|
* DEFAULT_PANEL_PALETTE, DEFAULT_STYLE, FULLSCREEN_PALETTE and
|
|
22
22
|
* DEFAULT_OVERLAY_PALETTE all read through ONE mode-resolved path instead of
|
|
23
|
-
* importing the static UI_TONES constant directly
|
|
24
|
-
*
|
|
25
|
-
* entry is type-complete, not a shipped light theme.
|
|
23
|
+
* importing the static UI_TONES constant directly, so one mode flip reaches
|
|
24
|
+
* every one of them.
|
|
26
25
|
*/
|
|
27
26
|
|
|
28
27
|
import { UI_TONES } from './ui-primitives.ts';
|
|
29
28
|
|
|
30
|
-
/** Background mode — dark is the safe default
|
|
29
|
+
/** Background mode — dark is the safe default for an unprobed terminal. */
|
|
31
30
|
export type ThemeMode = 'dark' | 'light';
|
|
32
31
|
|
|
33
32
|
/** Resolved semantic colour tokens (concrete hex strings or ANSI-256 indices). */
|
|
@@ -150,8 +149,8 @@ const LIGHT: ThemeTokens = {
|
|
|
150
149
|
/**
|
|
151
150
|
* resolveTheme — Return the semantic token set for the given background mode.
|
|
152
151
|
*
|
|
153
|
-
* Call with 'dark'
|
|
154
|
-
* The returned object is frozen
|
|
152
|
+
* Call with the session's resolved mode; 'dark' is the safe default for a
|
|
153
|
+
* caller that has none. The returned object is frozen — do not mutate it.
|
|
155
154
|
*/
|
|
156
155
|
export function resolveTheme(mode: ThemeMode): Readonly<ThemeTokens> {
|
|
157
156
|
return mode === 'light' ? LIGHT : DARK;
|
|
@@ -242,7 +241,7 @@ export function resolveUiTones(mode: ThemeMode): Readonly<UiToneTokens> {
|
|
|
242
241
|
}
|
|
243
242
|
|
|
244
243
|
// ===========================================================================
|
|
245
|
-
// Active-mode runtime
|
|
244
|
+
// Active-mode runtime.
|
|
246
245
|
//
|
|
247
246
|
// The mode is decided ONCE at startup — from appearance config (display.themeMode
|
|
248
247
|
// forced dark/light) or the terminal-background probe (auto) — and is then stable
|
package/src/renderer/thinking.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type Line } from '
|
|
1
|
+
import { type Line } from '@pellux/goodvibes-sdk/platform/types';
|
|
2
2
|
import { BORDERS } from './layout.ts';
|
|
3
3
|
import { renderConversationNotice } from './conversation-surface.ts';
|
|
4
4
|
import { activeUiTones } from './theme.ts';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type Line, createStyledCell, createEmptyLine } from '
|
|
1
|
+
import { type Line, createStyledCell, createEmptyLine } from '@pellux/goodvibes-sdk/platform/types';
|
|
2
2
|
import { LAYOUT, TOOL_STATUS } from './layout.ts';
|
|
3
3
|
import { getDisplayWidth, truncateDisplay } from '../utils/terminal-width.ts';
|
|
4
4
|
import type { ToolCall } from '@pellux/goodvibes-sdk/platform/types';
|
|
@@ -6,7 +6,7 @@ import { stripDangerousAnsi } from './ansi-sanitize.ts';
|
|
|
6
6
|
import { formatElapsed } from '../utils/format-elapsed.ts';
|
|
7
7
|
import { GLYPHS } from './ui-primitives.ts';
|
|
8
8
|
import { activeUiTones } from './theme.ts';
|
|
9
|
-
import { treeContentCol, treeTextCol, writeTreeStatusMarker } from '
|
|
9
|
+
import { treeContentCol, treeTextCol, writeTreeStatusMarker } from '@pellux/goodvibes-terminal-shell';
|
|
10
10
|
|
|
11
11
|
const TOOL_NAME_MIN_WIDTH = 8;
|
|
12
12
|
const TOOL_NAME_MAX_WIDTH = 20;
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
* each other and both can disagree with what Tab actually reveals.
|
|
12
12
|
*/
|
|
13
13
|
|
|
14
|
-
import type { Line } from '
|
|
14
|
+
import type { Line } from '@pellux/goodvibes-sdk/platform/types';
|
|
15
15
|
import { renderMarkdownTracked } from './markdown.ts';
|
|
16
16
|
import { renderDiffView } from './diff-view.ts';
|
|
17
17
|
|
|
@@ -7,11 +7,10 @@
|
|
|
7
7
|
* ring, default 20 entries) and appends the same record to the agent's
|
|
8
8
|
* session transcript as `{type:'knowledge_injection', turn, ...record}`.
|
|
9
9
|
*
|
|
10
|
-
* `TurnInjectionRecord`
|
|
11
|
-
* `
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
* name — this needs no SDK export change.
|
|
10
|
+
* `TurnInjectionRecord` was reachable only as the element type of
|
|
11
|
+
* `AgentRecord.turnInjections`, so the entry type here was derived positionally
|
|
12
|
+
* from that array rather than named. The `platform/agents` barrel exports the
|
|
13
|
+
* record type now, and this names it.
|
|
15
14
|
*
|
|
16
15
|
* Reality check (since updated): the TUI's main interactive
|
|
17
16
|
* session DOES route through this engine. The SDK `Orchestrator` runs per-turn
|
|
@@ -24,10 +23,10 @@
|
|
|
24
23
|
* record onto their own `AgentRecord.turnInjections`, rendered per-agent by
|
|
25
24
|
* `buildTurnInjectionsText` when an explicit agent id is given.
|
|
26
25
|
*/
|
|
27
|
-
import type {
|
|
26
|
+
import type { TurnInjectionRecord } from '@pellux/goodvibes-sdk/platform/agents';
|
|
28
27
|
|
|
29
|
-
/** One
|
|
30
|
-
export type TurnInjectionEntry =
|
|
28
|
+
/** One per-turn injection record, under the name this renderer already used. */
|
|
29
|
+
export type TurnInjectionEntry = TurnInjectionRecord;
|
|
31
30
|
|
|
32
31
|
function fmtN(n: number): string {
|
|
33
32
|
return n.toLocaleString();
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type Line, type Cell, createEmptyLine, createEmptyCell } from '
|
|
1
|
+
import { type Line, type Cell, createEmptyLine, createEmptyCell } from '@pellux/goodvibes-sdk/platform/types';
|
|
2
2
|
import { LAYOUT } from './layout.ts';
|
|
3
3
|
import { VERSION } from '../version.ts';
|
|
4
4
|
import { fitDisplay, getDisplayWidth, truncateDisplay, wrapText, interpolateColor, joinPrioritizedSegments, type PrioritizedSegment } from '../utils/terminal-width.ts';
|
|
@@ -13,7 +13,7 @@ import { computeContextUsage } from '../core/context-usage.ts';
|
|
|
13
13
|
import { permissionModeLabel, permissionModeTone } from '../core/permission-mode.ts';
|
|
14
14
|
import { SLEEP_DISABLED_CHIP } from '../core/power-status.ts';
|
|
15
15
|
import { renderQueuedMessageList, renderMemoryProvenanceChip, type MemoryProvenanceEntry } from './composer-fragments.ts';
|
|
16
|
-
import { calcSessionCost, isModelPriced } from '
|
|
16
|
+
import { calcSessionCost, isModelPriced } from '@pellux/goodvibes-sdk/platform/providers';
|
|
17
17
|
import { buildFooterTip, isAgentActive } from './footer-tips.ts';
|
|
18
18
|
import type { StreamMetrics } from '../core/stream-event-wiring.ts';
|
|
19
19
|
import { waitingPhrase, type WaitingState } from '@pellux/goodvibes-sdk/platform/presentation';
|
|
@@ -145,7 +145,7 @@ export class UIFactory {
|
|
|
145
145
|
composerPendingRisk?: 'none' | 'approval-wait' | 'shell' | 'command' | 'remote',
|
|
146
146
|
compact: boolean = false,
|
|
147
147
|
// Honest cross-surface spine posture. Defined ONLY in adopted-daemon
|
|
148
|
-
// mode (undefined in
|
|
148
|
+
// mode (undefined in local-only mode), so the segment is absent otherwise.
|
|
149
149
|
sessionSpineStatus?: 'online' | 'offline',
|
|
150
150
|
// Session permission mode (config value). Rendered as a leading pill in the
|
|
151
151
|
// posture block; undefined suppresses the pill (e.g. bare test callers).
|
|
@@ -19,8 +19,8 @@ import type { PolicyRuntimeState } from '@/runtime/index.ts';
|
|
|
19
19
|
import type { FileUndoManager } from '@pellux/goodvibes-sdk/platform/state';
|
|
20
20
|
import type { WorkspaceCheckpointManager } from '@pellux/goodvibes-sdk/platform/workspace';
|
|
21
21
|
import type { GatewayMethodCatalog } from '@pellux/goodvibes-sdk/platform/control-plane';
|
|
22
|
-
import type { WorkspaceTrustManager } from '
|
|
23
|
-
import type { WorkspaceRegistrationManager } from '
|
|
22
|
+
import type { WorkspaceTrustManager } from '@pellux/goodvibes-sdk/platform/runtime/operations';
|
|
23
|
+
import type { WorkspaceRegistrationManager } from '@pellux/goodvibes-sdk/platform/runtime/operations';
|
|
24
24
|
import type { McpRegistry } from '@pellux/goodvibes-sdk/platform/mcp';
|
|
25
25
|
import type { MemoryRegistry } from '@pellux/goodvibes-sdk/platform/state';
|
|
26
26
|
import type { IntegrationHelperService } from '@/runtime/index.ts';
|
|
@@ -91,7 +91,7 @@ export type CreateBootstrapCommandContextOptions = {
|
|
|
91
91
|
knowledgeService?: KnowledgeService;
|
|
92
92
|
projectPlanningService?: import('@pellux/goodvibes-sdk/platform/knowledge').ProjectPlanningService;
|
|
93
93
|
projectPlanningProjectId?: string;
|
|
94
|
-
workPlanStore?: import('
|
|
94
|
+
workPlanStore?: import('@pellux/goodvibes-sdk/platform/workflow').WorkPlanStore;
|
|
95
95
|
providerOptimizer?: import('@pellux/goodvibes-sdk/platform/providers').ProviderOptimizer;
|
|
96
96
|
pluginManager?: PluginManager;
|
|
97
97
|
hookWorkbench?: HookWorkbench;
|
|
@@ -134,7 +134,7 @@ export type CreateBootstrapCommandContextOptions = {
|
|
|
134
134
|
wrfcController?: import('@pellux/goodvibes-sdk/platform/agents').WrfcController;
|
|
135
135
|
componentHealthMonitor: import('@/runtime/index.ts').ComponentHealthMonitor;
|
|
136
136
|
hydrateSessionUsage?: () => void;
|
|
137
|
-
workstreamEngine?: import('
|
|
137
|
+
workstreamEngine?: import('@pellux/goodvibes-sdk/platform/orchestration').WorkstreamCommandService;
|
|
138
138
|
codeIndexStore?: import('@pellux/goodvibes-sdk/platform/state').CodeIndexStore;
|
|
139
139
|
codeIndexReindexScheduler?: import('@pellux/goodvibes-sdk/platform/state').CodeIndexReindexScheduler;
|
|
140
140
|
isPassiveCodeInjectionFlagEnabled?: () => boolean;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { getConfigSnapshot } from '
|
|
1
|
+
import { getConfigSnapshot } from '@pellux/goodvibes-sdk/platform/config';
|
|
2
2
|
import {
|
|
3
3
|
describeServingEffort,
|
|
4
4
|
publishActiveEffortOptions,
|
|
@@ -27,8 +27,8 @@ import type { PolicyRuntimeState } from '@/runtime/index.ts';
|
|
|
27
27
|
import type { CodeIndexStore, FileUndoManager } from '@pellux/goodvibes-sdk/platform/state';
|
|
28
28
|
import type { WorkspaceCheckpointManager } from '@pellux/goodvibes-sdk/platform/workspace';
|
|
29
29
|
import type { GatewayMethodCatalog } from '@pellux/goodvibes-sdk/platform/control-plane';
|
|
30
|
-
import type { WorkspaceTrustManager } from '
|
|
31
|
-
import type { WorkspaceRegistrationManager } from '
|
|
30
|
+
import type { WorkspaceTrustManager } from '@pellux/goodvibes-sdk/platform/runtime/operations';
|
|
31
|
+
import type { WorkspaceRegistrationManager } from '@pellux/goodvibes-sdk/platform/runtime/operations';
|
|
32
32
|
import type { McpRegistry } from '@pellux/goodvibes-sdk/platform/mcp';
|
|
33
33
|
import type { MemoryRegistry } from '@pellux/goodvibes-sdk/platform/state';
|
|
34
34
|
import type { IntegrationHelperService } from '@/runtime/index.ts';
|
|
@@ -113,7 +113,7 @@ export interface BootstrapCommandSectionOptions {
|
|
|
113
113
|
readonly knowledgeService?: KnowledgeService;
|
|
114
114
|
readonly projectPlanningService?: import('@pellux/goodvibes-sdk/platform/knowledge').ProjectPlanningService;
|
|
115
115
|
readonly projectPlanningProjectId?: string;
|
|
116
|
-
readonly workPlanStore?: import('
|
|
116
|
+
readonly workPlanStore?: import('@pellux/goodvibes-sdk/platform/workflow').WorkPlanStore;
|
|
117
117
|
readonly pluginManager?: PluginManager;
|
|
118
118
|
readonly hookWorkbench?: HookWorkbench;
|
|
119
119
|
readonly providerOptimizer?: import('@pellux/goodvibes-sdk/platform/providers').ProviderOptimizer;
|
|
@@ -134,7 +134,7 @@ export interface BootstrapCommandSectionOptions {
|
|
|
134
134
|
readonly wrfcController?: import('@pellux/goodvibes-sdk/platform/agents').WrfcController;
|
|
135
135
|
readonly changeTracker?: import('@pellux/goodvibes-sdk/platform/sessions').SessionChangeTracker;
|
|
136
136
|
readonly hydrateSessionUsage?: () => void;
|
|
137
|
-
readonly workstreamEngine?: import('
|
|
137
|
+
readonly workstreamEngine?: import('@pellux/goodvibes-sdk/platform/orchestration').WorkstreamCommandService;
|
|
138
138
|
readonly codeIndexStore?: CodeIndexStore;
|
|
139
139
|
readonly codeIndexReindexScheduler?: import('@pellux/goodvibes-sdk/platform/state').CodeIndexReindexScheduler;
|
|
140
140
|
readonly isPassiveCodeInjectionFlagEnabled?: () => boolean;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { ConversationManager } from '../core/conversation';
|
|
2
2
|
import { registerSessionConversation } from './conversation-rewind-port.ts';
|
|
3
|
-
import { SelectionManager } from '
|
|
3
|
+
import { SelectionManager } from '@pellux/goodvibes-terminal-shell';
|
|
4
4
|
import { logger } from '@pellux/goodvibes-sdk/platform/utils';
|
|
5
|
-
import { ConfigManager, getConfiguredSystemPrompt } from '
|
|
6
|
-
import { getProviderIdFromModel } from '
|
|
5
|
+
import { ConfigManager, getConfiguredSystemPrompt } from '@pellux/goodvibes-sdk/platform/config';
|
|
6
|
+
import { getProviderIdFromModel } from '@pellux/goodvibes-sdk/platform/providers';
|
|
7
7
|
import { ToolRegistry } from '@pellux/goodvibes-sdk/platform/tools';
|
|
8
8
|
import { registerAllTools } from '@pellux/goodvibes-sdk/platform/tools';
|
|
9
9
|
import { createSandboxContainmentNotice } from './daemon-attach-notices.ts';
|
|
@@ -13,7 +13,7 @@ import { Compositor } from '../renderer/compositor.ts';
|
|
|
13
13
|
import type { PermissionRequestHandler } from '@pellux/goodvibes-sdk/platform/permissions';
|
|
14
14
|
import type { SystemMessageRouter } from '../core/system-message-router.ts';
|
|
15
15
|
import type { ConversationFollowUpItem } from '@pellux/goodvibes-sdk/platform/core';
|
|
16
|
-
import type { OrchestratorUserInputOptions } from '
|
|
16
|
+
import type { OrchestratorUserInputOptions } from '@pellux/goodvibes-sdk/platform/core';
|
|
17
17
|
import type { ControlPlaneRecentEvent } from '@pellux/goodvibes-sdk/platform/control-plane';
|
|
18
18
|
import type { BootstrapOptions } from './context.ts';
|
|
19
19
|
import { createRuntimeStore, createDomainDispatch, type RuntimeStore } from './store/index.ts';
|
|
@@ -24,10 +24,11 @@ import {
|
|
|
24
24
|
} from '@/runtime/index.ts';
|
|
25
25
|
import { readExecEnvScrubAllowlist } from '../input/exec-env-scrub-config.ts';
|
|
26
26
|
import { createSandboxExecAsk, sandboxExecAskDepsFromRuntime } from '../permissions/sandbox-exec-gate.ts';
|
|
27
|
-
import { createRuntimeServices,
|
|
27
|
+
import { createRuntimeServices, type RuntimeServices } from './services.ts';
|
|
28
|
+
import { registerClientPhoneTool } from '@pellux/goodvibes-sdk/platform/runtime/client';
|
|
28
29
|
import { createHostPowerSeam } from '@pellux/goodvibes-sdk/platform/power';
|
|
29
|
-
import { runBootMemoryFold } from '
|
|
30
|
-
import { wireCostPricing } from '
|
|
30
|
+
import { runBootMemoryFold } from '@pellux/goodvibes-sdk/platform/runtime/operations';
|
|
31
|
+
import { wireCostPricing } from '@pellux/goodvibes-sdk/platform/providers';
|
|
31
32
|
import { createUiRuntimeServices, type UiRuntimeServices } from './ui-services.ts';
|
|
32
33
|
import { join } from 'node:path';
|
|
33
34
|
import { installWrfcAgentToolGuard } from '../tools/wrfc-agent-guard.ts';
|
|
@@ -35,7 +36,7 @@ import { createWrfcPersistence, type WrfcPersistence } from './wrfc-persistence.
|
|
|
35
36
|
import type { SystemMessagePriority } from '../core/system-message-router.ts';
|
|
36
37
|
import { SessionSpineClient, SessionUnionCache, TUI_SPINE_PARTICIPANT } from '@pellux/goodvibes-sdk/platform/runtime/session-spine';
|
|
37
38
|
import { SessionInboundInputPoller, createBootstrapInboundInputPoller } from './session-inbound-inputs.ts';
|
|
38
|
-
import { trustGatedAsk, type WorkspaceTrustLevel } from '
|
|
39
|
+
import { trustGatedAsk, type WorkspaceTrustLevel } from '@pellux/goodvibes-sdk/platform/runtime/operations';
|
|
39
40
|
import { syncNotifierQueueIntegrations } from './bootstrap-notifier-sync.ts';
|
|
40
41
|
|
|
41
42
|
// --- Pre-router buffer ---
|
|
@@ -117,11 +118,11 @@ export interface BootstrapCoreState {
|
|
|
117
118
|
readonly requestRender: () => void;
|
|
118
119
|
readonly setRenderRequest: (fn: () => void) => void;
|
|
119
120
|
readonly runtimeSessionIdRef: { value: string };
|
|
120
|
-
/** Cross-surface identity mirror;
|
|
121
|
+
/** Cross-surface identity mirror; dormant for local-only, and for the SDK's 'embedded' HostServiceMode, which no product-facing setting can select — this product only ever adopts an external daemon or runs local-only (see the ADOPT ONLY guard in bootstrap.ts) (docs/decisions/2026-07-06-session-spine-mode-branch-is-permanent.md). Activated by bootstrap.ts only for an adopted 'external' daemon. */
|
|
121
122
|
readonly sessionSpine: SessionSpineClient;
|
|
122
123
|
/** Inbound steer/follow-up delivery; dormant until bootstrap.ts activates it. */
|
|
123
124
|
readonly sessionInboundInputs: SessionInboundInputPoller;
|
|
124
|
-
/** Cache-backed read facade; bootstrap.ts drives its mode (
|
|
125
|
+
/** Cache-backed read facade; bootstrap.ts drives its mode (external/local-only in this product — 'embedded' is a HostServiceMode value with no product-facing setting to select it here) from the same HostServiceMode as the spine above. */
|
|
125
126
|
readonly sessionUnionCache: SessionUnionCache;
|
|
126
127
|
/**
|
|
127
128
|
* WRFC chain persistence — call `rehydrate()` once after the SystemMessageRouter
|
|
@@ -249,8 +250,8 @@ export async function initializeBootstrapCore(
|
|
|
249
250
|
runtimeStore: store,
|
|
250
251
|
getConversationTitle: () => getConversationTitle(),
|
|
251
252
|
workingDir, homeDirectory, ...(options.daemonHomeDirectory === undefined ? {} : { daemonHomeDirectory: options.daemonHomeDirectory }),
|
|
252
|
-
//
|
|
253
|
-
// default is non-spawning) and owns the wake-model boot retry
|
|
253
|
+
// This product only ever adopts an external daemon (or runs local-only), never embedding one,
|
|
254
|
+
// so it holds its own OS inhibitor (fork default is non-spawning) and owns the wake-model boot retry itself. See services.ts.
|
|
254
255
|
powerSeam: createHostPowerSeam(), provisionWakeModelsAtBoot: true,
|
|
255
256
|
});
|
|
256
257
|
await services.workspaceTrustManager.load(); // settle any already-persisted trust decision before any tool runs
|
|
@@ -295,10 +296,11 @@ export async function initializeBootstrapCore(
|
|
|
295
296
|
surfaceRegistry,
|
|
296
297
|
watcherRegistry,
|
|
297
298
|
} = services;
|
|
298
|
-
//
|
|
299
|
+
// Dormant for local-only, and for the SDK's 'embedded' HostServiceMode — no product-facing
|
|
300
|
+
// setting can select it (SDK-internal embedder/test machinery); bootstrap.ts activates this spine only for an adopted 'external' daemon.
|
|
299
301
|
const sessionSpine = new SessionSpineClient({ participant: TUI_SPINE_PARTICIPANT, recordKind: 'tui' });
|
|
300
|
-
// Cache-backed read facade over the local broker (passthrough until bootstrap.ts
|
|
301
|
-
//
|
|
302
|
+
// Cache-backed read facade over the local broker (passthrough until bootstrap.ts
|
|
303
|
+
// activates the adopted-daemon wire union for 'external').
|
|
302
304
|
// selfSessionIds keeps local authoritative for our own wire-mirrored session even when local/wire ids diverge (D-TUI-1).
|
|
303
305
|
const sessionUnionCache = new SessionUnionCache({ local: sharedSessionBroker, selfSessionIds: () => sessionSpine.mirroredSessionIds });
|
|
304
306
|
|
|
@@ -381,7 +383,7 @@ export async function initializeBootstrapCore(
|
|
|
381
383
|
contextAccountingHolder: services.contextAccountingHolder,
|
|
382
384
|
// First contained (sandboxed) command run announces "commands now run contained" once — recorded and surfaced now.
|
|
383
385
|
onSandboxedRun: createSandboxContainmentNotice({ configManager, notify: (text) => conversation.log(`[Sandbox] ${text}`, { fg: '135' }) }),
|
|
384
|
-
});
|
|
386
|
+
}); registerClientPhoneTool(toolRegistry, services.devices); // the `phone` tool follows the LOOP, so it is registered here; the posture runtime it used to call is the daemon's now and this tool reaches it over the devices.* verbs (see the SDK's client/phone-tool.ts)
|
|
385
387
|
// Note: installWrfcAgentToolGuard is called after routeOrBuffer is defined (further below) so the onTrace callback routes guard decisions through the pre-router buffer.
|
|
386
388
|
services.agentOrchestrator.setDependencies({
|
|
387
389
|
surfaceRoot: services.surface.surfaceRoot,
|
|
@@ -445,9 +447,9 @@ export async function initializeBootstrapCore(
|
|
|
445
447
|
} catch (err) {
|
|
446
448
|
logger.error('Render threw; next requestRender will reschedule', { error: String(err) });
|
|
447
449
|
}
|
|
448
|
-
// Debounced spine heartbeat on turn/render activity (no-op while dormant, i.e.
|
|
449
|
-
// embedded
|
|
450
|
-
// elapsed (at most one wire call per heartbeatMinIntervalMs) — safe on the hot path.
|
|
450
|
+
// Debounced spine heartbeat on turn/render activity (no-op while dormant, i.e. local-only, or
|
|
451
|
+
// the SDK's 'embedded' mode, for which no product-facing setting exists): a cheap synchronous
|
|
452
|
+
// no-op unless its own internal window has elapsed (at most one wire call per heartbeatMinIntervalMs) — safe on the hot path.
|
|
451
453
|
sessionSpine.heartbeat(runtimeSessionIdRef.value);
|
|
452
454
|
};
|
|
453
455
|
const requestRender = (): void => {
|
|
@@ -464,9 +466,9 @@ export async function initializeBootstrapCore(
|
|
|
464
466
|
}
|
|
465
467
|
});
|
|
466
468
|
};
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
};
|
|
469
|
+
// THE ref, not a second one: the composition already holds the prompt seam its
|
|
470
|
+
// client approval raiser calls, so the UI layer patching this patches that.
|
|
471
|
+
const permissionPromptRef = services.localPromptRef as { requestPermission: PermissionRequestHandler };
|
|
470
472
|
// Trust-at-consequence-time: raised by trustGatedAsk on the first non-read
|
|
471
473
|
// request in an undecided workspace; overridden once the UI layer exists — same ref-patching pattern as permissionPromptRef above.
|
|
472
474
|
const trustPromptRef = { requestTrustDecision: (async () => 'restricted') as () => Promise<WorkspaceTrustLevel> };
|
|
@@ -699,16 +701,12 @@ export async function initializeBootstrapCore(
|
|
|
699
701
|
await syncConfiguredServices(domainDispatch.syncIntegration, services.serviceRegistry);
|
|
700
702
|
|
|
701
703
|
const permissionManager = new PermissionManager(
|
|
702
|
-
// Composed ask layer: the workspace trust gate (outer) wraps the sandbox-aware exec gate (inner); see sandbox-exec-gate.ts. The catastrophic block is untouched.
|
|
704
|
+
// Composed ask layer: the workspace trust gate (outer) wraps the sandbox-aware exec gate (inner); see sandbox-exec-gate.ts. The catastrophic block is untouched. The innermost ask is the CLIENT raiser: it posts approvals.raise to the daemon and prompts here (see the SDK's platform/runtime/client/approval-raiser.ts).
|
|
703
705
|
trustGatedAsk(
|
|
704
706
|
services.workspaceTrustManager,
|
|
705
707
|
createSandboxExecAsk(
|
|
706
708
|
sandboxExecAskDepsFromRuntime(configManager, featureFlags),
|
|
707
|
-
(request) =>
|
|
708
|
-
request,
|
|
709
|
-
sessionId: runtimeSessionIdRef.value,
|
|
710
|
-
localPrompt: permissionPromptRef.requestPermission,
|
|
711
|
-
}),
|
|
709
|
+
(request) => services.requestApproval({ request }),
|
|
712
710
|
),
|
|
713
711
|
() => trustPromptRef.requestTrustDecision(), // indirection through the ref, not bound early — main.ts patches the real impl in later
|
|
714
712
|
),
|
|
@@ -729,8 +727,10 @@ export async function initializeBootstrapCore(
|
|
|
729
727
|
sessionId: userSessionId,
|
|
730
728
|
};
|
|
731
729
|
runtimeSessionIdRef.value = runtime.sessionId;
|
|
732
|
-
//
|
|
733
|
-
//
|
|
730
|
+
services.liveSessionIdRef.value = runtime.sessionId; // the session an ask raised on the daemon belongs to
|
|
731
|
+
// The live conversation, for this process's own /rewind AND for the daemon's
|
|
732
|
+
// questions about it — only the process holding the messages can count or
|
|
733
|
+
// drop them (conversation-rewind-port.ts, the SDK's client/conversation-rewind-host.ts).
|
|
734
734
|
registerSessionConversation(runtime.sessionId, conversation);
|
|
735
735
|
void sharedSessionBroker.createSession({
|
|
736
736
|
id: runtime.sessionId,
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { join } from 'node:path';
|
|
2
|
-
import { readBudgetAlertUsd, BUDGET_ALERT_USD_DEFAULT } from '
|
|
2
|
+
import { readBudgetAlertUsd, BUDGET_ALERT_USD_DEFAULT } from '@pellux/goodvibes-sdk/platform/providers';
|
|
3
3
|
import { refreshMemoryRecallSnapshot } from './orchestrator-core-services.ts';
|
|
4
4
|
import { sumConversationUsage, type ConversationManager } from '../core/conversation';
|
|
5
|
-
import type { Orchestrator } from '
|
|
5
|
+
import type { Orchestrator } from '@pellux/goodvibes-sdk/platform/core';
|
|
6
6
|
import type { ConfigManager } from '@pellux/goodvibes-sdk/platform/config';
|
|
7
7
|
import type { RuntimeEventBus } from '@/runtime/index.ts';
|
|
8
8
|
import type { MutableRuntimeState } from '@/runtime/index.ts';
|
|
@@ -17,9 +17,9 @@ import { GitStatusProvider } from '../renderer/git-status.ts';
|
|
|
17
17
|
import type { GitHeaderInfo } from '../renderer/git-status.ts';
|
|
18
18
|
import type { PermissionRequestHandler } from '@pellux/goodvibes-sdk/platform/permissions';
|
|
19
19
|
import { registerBuiltinPanels } from '../panels/builtin-panels.ts';
|
|
20
|
-
import { WorkspaceRegistrationManager } from '
|
|
20
|
+
import { WorkspaceRegistrationManager } from '@pellux/goodvibes-sdk/platform/runtime/operations';
|
|
21
21
|
import { createSystemMessageRouter, type SystemMessageRouter } from '../core/system-message-router.ts';
|
|
22
|
-
import { getConfigSnapshot } from '
|
|
22
|
+
import { getConfigSnapshot } from '@pellux/goodvibes-sdk/platform/config';
|
|
23
23
|
import { createBootstrapCommandContext } from './bootstrap-command-context.ts';
|
|
24
24
|
import { createResumeSessionHandler } from './bootstrap-hook-bridge.ts';
|
|
25
25
|
import { confirmLiveResume } from './session-resume-liveness-confirm.ts';
|