@pellux/goodvibes-tui 1.27.0 → 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 +125 -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 +12 -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 +15 -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 -641
- 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 -58
- 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
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
// ---------------------------------------------------------------------------
|
|
2
|
-
// idle-power-services.ts — the idle-time / sleep-ownership / live-turn slice of
|
|
3
|
-
// the runtime composition, extracted from services.ts (file-size hygiene).
|
|
4
|
-
//
|
|
5
|
-
// Mirrors the SDK's own createRuntimeServices wiring: idle-time memory
|
|
6
|
-
// consolidation (learning.consolidation.*), host sleep ownership (power.*), and
|
|
7
|
-
// the per-session live-turn control holder that backs the
|
|
8
|
-
// sessions.toolCalls.cancel / sessions.queuedMessages.* wire verbs. Consolidation
|
|
9
|
-
// receipts ride the SAME attach-time queue every other receipt uses — a run that
|
|
10
|
-
// changed something records a one-line notice into the file-backed
|
|
11
|
-
// feature-announcement store, drained on the next surface attach; a quiet run
|
|
12
|
-
// records nothing.
|
|
13
|
-
// ---------------------------------------------------------------------------
|
|
14
|
-
|
|
15
|
-
import type { ConfigManager } from '@pellux/goodvibes-sdk/platform/config';
|
|
16
|
-
import type { MemoryRegistry } from '@pellux/goodvibes-sdk/platform/state';
|
|
17
|
-
import { MemoryConsolidationScheduler } from '@pellux/goodvibes-sdk/platform/state';
|
|
18
|
-
import { SessionLiveTurnControlsHolder } from '@pellux/goodvibes-sdk/platform/control-plane';
|
|
19
|
-
import { PowerManager, wireRuntimePower, createUnavailablePowerSeam } from '@pellux/goodvibes-sdk/platform/power';
|
|
20
|
-
import { FeatureAnnouncementStore, featureAnnouncementsPath } from '@pellux/goodvibes-sdk/platform/runtime/feature-announcements';
|
|
21
|
-
import type { RuntimeEventBus } from '@pellux/goodvibes-sdk/platform/runtime/state';
|
|
22
|
-
import { formatConsolidationReceipt } from '../core/consolidation-receipt.ts';
|
|
23
|
-
|
|
24
|
-
export interface IdlePowerServicesDeps {
|
|
25
|
-
readonly configManager: ConfigManager;
|
|
26
|
-
readonly memoryRegistry: MemoryRegistry;
|
|
27
|
-
readonly runtimeBus: RuntimeEventBus;
|
|
28
|
-
/** True when no session is busy — the consolidation scheduler's idle gate. */
|
|
29
|
-
readonly isIdle: () => boolean;
|
|
30
|
-
/** Sleep-edge checkpoint + a wake catch-up tick (store snapshots). */
|
|
31
|
-
readonly snapshotTick: () => void;
|
|
32
|
-
/** Wake catch-up: fire the automation heartbeat. */
|
|
33
|
-
readonly heartbeat: () => Promise<void>;
|
|
34
|
-
/**
|
|
35
|
-
* Host power seam. SDK 1.9.0 makes wireRuntimePower default an absent seam to
|
|
36
|
-
* the REAL host seam (createHostPowerSeam — which spawns systemd-inhibit and a
|
|
37
|
-
* dbus-monitor sleep-edge watcher). That spawn is a host-level side effect, so
|
|
38
|
-
* this fork mirrors the SDK's own createRuntimeServices: when no seam is passed
|
|
39
|
-
* we default to the NON-spawning unavailable seam, keeping test-constructed
|
|
40
|
-
* runtimes deterministic. Only the real long-lived compositions (the standalone
|
|
41
|
-
* daemon and the embedded interactive runtime, which itself IS the daemon) pass
|
|
42
|
-
* createHostPowerSeam() to opt into live OS keep-awake/idle-inhibit.
|
|
43
|
-
*/
|
|
44
|
-
readonly powerSeam?: Parameters<typeof wireRuntimePower>[0]['seam'];
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
export interface IdlePowerServices {
|
|
48
|
-
readonly memoryConsolidationScheduler: MemoryConsolidationScheduler;
|
|
49
|
-
readonly powerManager: PowerManager;
|
|
50
|
-
readonly sessionLiveTurnControls: SessionLiveTurnControlsHolder;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
/** Construct (and start) the idle-consolidation scheduler, power manager, and live-turn holder. */
|
|
54
|
-
export function wireIdlePowerAndLiveTurn(deps: IdlePowerServicesDeps): IdlePowerServices {
|
|
55
|
-
const consolidationReceiptStore = new FeatureAnnouncementStore(featureAnnouncementsPath(deps.configManager));
|
|
56
|
-
const memoryConsolidationScheduler = new MemoryConsolidationScheduler({
|
|
57
|
-
memoryRegistry: deps.memoryRegistry,
|
|
58
|
-
configSource: deps.configManager,
|
|
59
|
-
isIdle: deps.isIdle,
|
|
60
|
-
onReceipt: (receipt) => {
|
|
61
|
-
const text = formatConsolidationReceipt(receipt);
|
|
62
|
-
if (text) consolidationReceiptStore.record(receipt.runId, text);
|
|
63
|
-
},
|
|
64
|
-
});
|
|
65
|
-
memoryConsolidationScheduler.start();
|
|
66
|
-
const sessionLiveTurnControls = new SessionLiveTurnControlsHolder();
|
|
67
|
-
const powerManager = wireRuntimePower({
|
|
68
|
-
readConfig: (key) => deps.configManager.get(key as Parameters<typeof deps.configManager.get>[0]),
|
|
69
|
-
writeConfig: (key, value) => deps.configManager.setDynamic(key as Parameters<typeof deps.configManager.setDynamic>[0], value),
|
|
70
|
-
// Live config subscription: an external edit to power.keepAwake (a settings-
|
|
71
|
-
// modal toggle, a hand-edited settings file) applies LIVE to the in-process
|
|
72
|
-
// manager — acquires/releases the inhibitor and lights the chip with no
|
|
73
|
-
// restart. This is the config-apply path for the EMBEDDED topology + the
|
|
74
|
-
// local chip; the external daemon is reached separately over the verb.
|
|
75
|
-
subscribeConfig: (key, cb) => (deps.configManager.subscribe as unknown as (k: string, c: (v: unknown) => void) => () => void)(key, (newValue) => cb(newValue)),
|
|
76
|
-
runtimeBus: deps.runtimeBus,
|
|
77
|
-
sleepCheckpoint: deps.snapshotTick,
|
|
78
|
-
wakeCatchUp: [() => memoryConsolidationScheduler.tick(), deps.snapshotTick, deps.heartbeat],
|
|
79
|
-
// Non-spawning default (see powerSeam doc above): without an explicit opt-in
|
|
80
|
-
// the seam is the honest unavailable one, NOT the spawning host seam that
|
|
81
|
-
// wireRuntimePower would otherwise pick for an undefined seam.
|
|
82
|
-
seam: deps.powerSeam ?? createUnavailablePowerSeam('runtime services constructed without a host power seam'),
|
|
83
|
-
});
|
|
84
|
-
return { memoryConsolidationScheduler, powerManager, sessionLiveTurnControls };
|
|
85
|
-
}
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* mail-composition.ts
|
|
3
|
-
*
|
|
4
|
-
* The deps that let the platform register this daemon's `email.*` verbs.
|
|
5
|
-
*
|
|
6
|
-
* `calendar.*` and `email.*` are served by the platform now, not by handlers in
|
|
7
|
-
* this repository — those were deleted when the platform gained an
|
|
8
|
-
* implementation the daemon could call. What is left for a product to supply is
|
|
9
|
-
* the wiring, and it is not optional: without `homeDirectory` the calendar
|
|
10
|
-
* composition returns null, without these deps the mail one does, and either way
|
|
11
|
-
* the verbs stay cataloged-but-unhandled while every surface reports the daemon
|
|
12
|
-
* unreachable on a daemon that is working perfectly.
|
|
13
|
-
*
|
|
14
|
-
* Extracted from services.ts rather than living there, because that file sits at
|
|
15
|
-
* the 800-line architecture cap and a composition step is exactly the kind of
|
|
16
|
-
* thing the cap exists to push into a module of its own.
|
|
17
|
-
*/
|
|
18
|
-
|
|
19
|
-
import {
|
|
20
|
-
withSurfaceEmailConfig,
|
|
21
|
-
describeSurfaceEmailConfigProblem,
|
|
22
|
-
describeSenderClaimNeutrally,
|
|
23
|
-
type EmailServiceDeps,
|
|
24
|
-
type SurfaceEmailConfigProblem,
|
|
25
|
-
} from '@pellux/goodvibes-sdk/platform/email';
|
|
26
|
-
import { nodeEmailTransport } from '@pellux/goodvibes-sdk/platform/email/node';
|
|
27
|
-
|
|
28
|
-
/** The narrow slices this composition needs; the real managers satisfy them. */
|
|
29
|
-
interface MailCompositionInput {
|
|
30
|
-
readonly configManager: { get(key: never): unknown };
|
|
31
|
-
readonly secretsManager: { get(key: string): Promise<string | null> };
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
/**
|
|
35
|
-
* Build the mail deps and the not-configured describer that go to
|
|
36
|
-
* `registerGatewayVerbGroups`.
|
|
37
|
-
*
|
|
38
|
-
* The settings come from the daemon's own `surfaces.email.*` keys through
|
|
39
|
-
* `withSurfaceEmailConfig`, so the keys an operator has already set — and that
|
|
40
|
-
* the settings modal now shows — keep working unchanged, and a not-configured
|
|
41
|
-
* answer names the keys THIS operator actually has rather than the ones the
|
|
42
|
-
* service validates internally.
|
|
43
|
-
*/
|
|
44
|
-
export function composeMailDeps(input: MailCompositionInput): {
|
|
45
|
-
readonly emailServiceDeps: EmailServiceDeps;
|
|
46
|
-
readonly describeEmailConfigProblem: () => Promise<SurfaceEmailConfigProblem | null>;
|
|
47
|
-
} {
|
|
48
|
-
const getConfig = (key: string): unknown => input.configManager.get(key as never);
|
|
49
|
-
const emailServiceDeps = withSurfaceEmailConfig({
|
|
50
|
-
getConfig,
|
|
51
|
-
secretsManager: input.secretsManager,
|
|
52
|
-
transport: nodeEmailTransport,
|
|
53
|
-
// The daemon has no wording of its own for a sender line, so it takes the
|
|
54
|
-
// platform's rather than growing a second implementation of a rule that is
|
|
55
|
-
// security-relevant: a From: header is a claim, sender authentication
|
|
56
|
-
// raises display confidence only, and commandAuthority is the literal
|
|
57
|
-
// 'none'.
|
|
58
|
-
describeSenderClaim: describeSenderClaimNeutrally,
|
|
59
|
-
} as never);
|
|
60
|
-
return {
|
|
61
|
-
emailServiceDeps,
|
|
62
|
-
describeEmailConfigProblem: () =>
|
|
63
|
-
describeSurfaceEmailConfigProblem(getConfig, input.secretsManager),
|
|
64
|
-
};
|
|
65
|
-
}
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import { join } from 'node:path';
|
|
2
|
-
import {
|
|
3
|
-
foldMemoryStores,
|
|
4
|
-
formatMemoryFoldReport,
|
|
5
|
-
type LegacyMemorySource,
|
|
6
|
-
type MemoryEmbeddingProviderRegistry,
|
|
7
|
-
type MemoryFoldReport,
|
|
8
|
-
type MemoryStore,
|
|
9
|
-
} from '@pellux/goodvibes-sdk/platform/state';
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* Fold the TUI's legacy per-project memory store into the canonical
|
|
13
|
-
* cross-surface store. Called once at boot AFTER `memoryStore.init()` so records written
|
|
14
|
-
* before unification survive. Id-keyed and idempotent — a re-run imports nothing new and
|
|
15
|
-
* never deletes the legacy file. Returns the report so boot can log what moved.
|
|
16
|
-
*/
|
|
17
|
-
export async function foldTuiLegacyMemory(
|
|
18
|
-
memoryStore: MemoryStore,
|
|
19
|
-
memoryEmbeddingRegistry: MemoryEmbeddingProviderRegistry,
|
|
20
|
-
workingDirectory: string,
|
|
21
|
-
): Promise<MemoryFoldReport> {
|
|
22
|
-
const legacyTuiProject = join(workingDirectory, '.goodvibes', 'tui', 'memory.sqlite');
|
|
23
|
-
const sources: LegacyMemorySource[] = [
|
|
24
|
-
{ label: `tui:${workingDirectory} (legacy per-project store)`, dbPath: legacyTuiProject },
|
|
25
|
-
];
|
|
26
|
-
return foldMemoryStores(memoryStore, sources, { embeddingRegistry: memoryEmbeddingRegistry });
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
/** A minimal boot logger seam (matches the SDK logger's info/warn shape). */
|
|
30
|
-
export interface BootFoldLogger {
|
|
31
|
-
info(message: string, meta?: unknown): void;
|
|
32
|
-
warn(message: string, meta?: unknown): void;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
/**
|
|
36
|
-
* Run the legacy TUI memory fold at boot and surface the report. Never blocks or
|
|
37
|
-
* fails boot: a fold error degrades to a warn and the canonical store serves on.
|
|
38
|
-
* Only logs the report when something actually moved (or a source failed), so a
|
|
39
|
-
* clean boot stays quiet.
|
|
40
|
-
*/
|
|
41
|
-
export async function runBootMemoryFold(
|
|
42
|
-
memoryStore: MemoryStore,
|
|
43
|
-
memoryEmbeddingRegistry: MemoryEmbeddingProviderRegistry,
|
|
44
|
-
workingDirectory: string,
|
|
45
|
-
log: BootFoldLogger,
|
|
46
|
-
): Promise<void> {
|
|
47
|
-
try {
|
|
48
|
-
const report = await foldTuiLegacyMemory(memoryStore, memoryEmbeddingRegistry, workingDirectory);
|
|
49
|
-
if (report.totalImported > 0 || report.failedSources.length > 0) {
|
|
50
|
-
log.info(`[bootstrap] memory fold: ${formatMemoryFoldReport(report)}`);
|
|
51
|
-
}
|
|
52
|
-
} catch (err) {
|
|
53
|
-
log.warn('memory fold at bootstrap failed (non-fatal; canonical store unaffected)', { err });
|
|
54
|
-
}
|
|
55
|
-
}
|
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* operator-token-cleanup.ts
|
|
3
|
-
*
|
|
4
|
-
* Shared helper that enumerates the legacy workspace-scoped `operator-tokens.json`
|
|
5
|
-
* locations the TUI has written at various pre-0.21.28 versions. Used by both the
|
|
6
|
-
* in-process bootstrap path (`src/runtime/bootstrap.ts`) and the standalone daemon
|
|
7
|
-
* CLI (`src/daemon/cli.ts`) so stale-token pruning has a single source of
|
|
8
|
-
* truth for where to look.
|
|
9
|
-
*
|
|
10
|
-
* Adding a new legacy location: append to `workspaceOperatorTokenCandidates` and
|
|
11
|
-
* the new path will be inspected on the next daemon boot.
|
|
12
|
-
*/
|
|
13
|
-
|
|
14
|
-
import { chmodSync, existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
15
|
-
import { randomBytes } from 'node:crypto';
|
|
16
|
-
import { dirname, join } from 'node:path';
|
|
17
|
-
import { getOrCreateCompanionToken } from '@pellux/goodvibes-sdk/platform/pairing';
|
|
18
|
-
import type { CompanionPairingResult } from '@pellux/goodvibes-sdk/platform/pairing';
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* Return the list of absolute operator-tokens.json paths the TUI may have written
|
|
22
|
-
* at legacy (pre-0.21.28) workspace-scoped locations under `workingDirectory`.
|
|
23
|
-
*
|
|
24
|
-
* The canonical, current-SDK location is `<daemonHomeDir>/operator-tokens.json`;
|
|
25
|
-
* this helper is strictly for legacy-cleanup candidates.
|
|
26
|
-
*/
|
|
27
|
-
export function workspaceOperatorTokenCandidates(workingDirectory: string): readonly string[] {
|
|
28
|
-
return [
|
|
29
|
-
join(workingDirectory, '.goodvibes', 'operator-tokens.json'),
|
|
30
|
-
join(workingDirectory, '.goodvibes', 'tui', 'operator-tokens.json'),
|
|
31
|
-
];
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
/**
|
|
35
|
-
* External-daemon adoption: resolve the operator/companion
|
|
36
|
-
* token this TUI process uses to authenticate with its daemon, honoring
|
|
37
|
-
* `GOODVIBES_DAEMON_TOKEN` as a non-interactive override.
|
|
38
|
-
*
|
|
39
|
-
* Without this override, the only way to make a TUI instance adopt an
|
|
40
|
-
* already-running external daemon that used an out-of-band or explicit token
|
|
41
|
-
* (rather than one derived from `getOrCreateCompanionToken` under a *shared*
|
|
42
|
-
* home directory) was to hand-write `<daemonHomeDir>/operator-tokens.json`
|
|
43
|
-
* before startup — there was no env var or CLI flag equivalent.
|
|
44
|
-
*
|
|
45
|
-
* `GOODVIBES_DAEMON_TOKEN` is already the documented env var `bin/goodvibes-daemon`
|
|
46
|
-
* honors for its own bearer token (see `src/daemon/cli.ts`'s `readDaemonCliTokens`)
|
|
47
|
-
* and the one `src/verification/live-verifier.ts`'s `readDaemonToken` already falls
|
|
48
|
-
* back to when probing a daemon's HTTP surface from the outside. Reusing the same
|
|
49
|
-
* name here means one env var configures both sides of an adopted-daemon setup —
|
|
50
|
-
* start the daemon with `GOODVIBES_DAEMON_TOKEN=<token>` and point the TUI at it
|
|
51
|
-
* with the same `GOODVIBES_DAEMON_TOKEN=<token>` plus
|
|
52
|
-
* `--config controlPlane.host=<host> --config controlPlane.port=<port>` — instead
|
|
53
|
-
* of introducing a second, TUI-only flag.
|
|
54
|
-
*
|
|
55
|
-
* When the override is set and does not already match the on-disk record, the
|
|
56
|
-
* file is rewritten so the override becomes durable for this home directory
|
|
57
|
-
* (an existing peerId is kept when present, so companion-pairing identity does
|
|
58
|
-
* not needlessly churn). Falls back to the existing `getOrCreateCompanionToken`
|
|
59
|
-
* behavior — read the existing file, or mint a fresh random token — when the
|
|
60
|
-
* override is unset.
|
|
61
|
-
*
|
|
62
|
-
* @param explicitToken - Takes precedence over `GOODVIBES_DAEMON_TOKEN` when
|
|
63
|
-
* provided. Used by the onboarding wizard's "connect to an existing daemon"
|
|
64
|
-
* action (a pasted token) so it shares this exact persistence logic with the
|
|
65
|
-
* env-var path instead of duplicating it.
|
|
66
|
-
*/
|
|
67
|
-
export function resolveDaemonCompanionToken(daemonHomeDir: string, explicitToken?: string): CompanionPairingResult {
|
|
68
|
-
const override = explicitToken?.trim() || process.env.GOODVIBES_DAEMON_TOKEN?.trim();
|
|
69
|
-
if (!override) return getOrCreateCompanionToken('tui', { daemonHomeDir });
|
|
70
|
-
|
|
71
|
-
const tokenPath = join(daemonHomeDir, 'operator-tokens.json');
|
|
72
|
-
let existingPeerId: string | undefined;
|
|
73
|
-
let existingCreatedAt: number | undefined;
|
|
74
|
-
if (existsSync(tokenPath)) {
|
|
75
|
-
try {
|
|
76
|
-
const record = JSON.parse(readFileSync(tokenPath, 'utf-8')) as {
|
|
77
|
-
token?: unknown;
|
|
78
|
-
peerId?: unknown;
|
|
79
|
-
createdAt?: unknown;
|
|
80
|
-
};
|
|
81
|
-
if (typeof record.token === 'string' && record.token === override) {
|
|
82
|
-
return {
|
|
83
|
-
token: override,
|
|
84
|
-
peerId: typeof record.peerId === 'string' ? record.peerId : randomBytes(12).toString('hex'),
|
|
85
|
-
createdAt: typeof record.createdAt === 'number' ? record.createdAt : Date.now(),
|
|
86
|
-
};
|
|
87
|
-
}
|
|
88
|
-
if (typeof record.peerId === 'string') existingPeerId = record.peerId;
|
|
89
|
-
if (typeof record.createdAt === 'number') existingCreatedAt = record.createdAt;
|
|
90
|
-
} catch {
|
|
91
|
-
// Malformed on-disk record — fall through and rewrite it with the override.
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
const record: CompanionPairingResult = {
|
|
96
|
-
token: override,
|
|
97
|
-
peerId: existingPeerId ?? randomBytes(12).toString('hex'),
|
|
98
|
-
createdAt: existingCreatedAt ?? Date.now(),
|
|
99
|
-
};
|
|
100
|
-
try {
|
|
101
|
-
mkdirSync(dirname(tokenPath), { recursive: true });
|
|
102
|
-
writeFileSync(tokenPath, JSON.stringify(record, null, 2), { encoding: 'utf-8', mode: 0o600 });
|
|
103
|
-
chmodSync(tokenPath, 0o600);
|
|
104
|
-
} catch {
|
|
105
|
-
// Best-effort persistence — the override still applies for this process
|
|
106
|
-
// even if the file could not be written (e.g. a read-only home directory).
|
|
107
|
-
}
|
|
108
|
-
return record;
|
|
109
|
-
}
|