@pellux/goodvibes-tui 2.0.20 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +70 -0
- package/README.md +16 -16
- package/docs/README.md +4 -4
- package/docs/foundation-artifacts/operator-contract.json +59 -4
- package/package.json +16 -6
- package/src/cli/management.ts +5 -2
- package/src/cli/tui-startup.ts +34 -39
- package/src/core/agent-view-render.ts +157 -0
- package/src/core/approval-alert.ts +49 -11
- package/src/core/bookmark-navigation.ts +7 -1
- package/src/core/budget-breach-notifier.ts +27 -8
- package/src/core/compaction-receipt.ts +1 -1
- package/src/core/context-usage.ts +1 -1
- package/src/core/conversation-compaction-render.ts +3 -3
- package/src/core/conversation-display-only.ts +86 -0
- package/src/core/conversation-event-navigation.ts +27 -0
- package/src/core/conversation-line-cache.ts +216 -447
- package/src/core/conversation-render-context.ts +20 -27
- package/src/core/conversation-rendering.ts +157 -575
- package/src/core/conversation-splash-state.ts +6 -1
- package/src/core/conversation-types.ts +35 -0
- package/src/core/conversation-usage.ts +12 -0
- package/src/core/conversation.ts +130 -131
- package/src/core/long-task-notifier.ts +100 -31
- package/src/core/notices.ts +75 -0
- package/src/core/pairing-tailscale-gateway.ts +1 -1
- package/src/core/process-output-log.ts +143 -0
- package/src/core/rewind-receipt.ts +1 -1
- package/src/core/session-focus.ts +190 -0
- package/src/core/session-resume-core.ts +23 -81
- package/src/core/stream-event-wiring.ts +31 -5
- package/src/core/system-message-noise.ts +2 -2
- package/src/core/system-message-router.ts +16 -18
- package/src/core/turn-event-wiring.ts +272 -33
- package/src/core/work-tree-focus.ts +290 -0
- package/src/core/work-tree-fold-store.ts +143 -0
- package/src/core/work-tree-model.ts +799 -0
- package/src/core/work-tree-render.ts +384 -0
- package/src/core/work-tree-sources.ts +184 -0
- package/src/core/work-tree-wiring.ts +176 -0
- package/src/core/workstream-notification.ts +36 -6
- package/src/core/wrfc-notice-titles.ts +37 -0
- package/src/input/agents-modal-text.ts +119 -0
- package/src/input/agents-modal.ts +699 -0
- package/src/input/bookmark-modal.ts +33 -9
- package/src/input/changes-git.ts +251 -0
- package/src/input/changes-modal.ts +629 -0
- package/src/input/changes-model.ts +125 -0
- package/src/input/command-palette-types.ts +41 -0
- package/src/input/command-palette.ts +272 -0
- package/src/input/command-registry.ts +77 -35
- package/src/input/commands/acp-runtime.ts +19 -9
- package/src/input/commands/channel-runtime.ts +2 -2
- package/src/input/commands/ci-runtime.ts +1 -1
- package/src/input/commands/codebase-runtime.ts +1 -1
- package/src/input/commands/config.ts +7 -1
- package/src/input/commands/context-window.ts +25 -19
- package/src/input/commands/control-room-runtime.ts +18 -18
- package/src/input/commands/conversation-runtime.ts +0 -1
- package/src/input/commands/cost-runtime.ts +29 -20
- package/src/input/commands/diff-runtime.ts +35 -181
- package/src/input/commands/eval.ts +1 -1
- package/src/input/commands/experience-runtime.ts +3 -7
- package/src/input/commands/fresh-conversation.ts +86 -0
- package/src/input/commands/git-runtime.ts +5 -22
- package/src/input/commands/graph-runtime.ts +1 -1
- package/src/input/commands/guidance-runtime.ts +1 -1
- package/src/input/commands/health-runtime.ts +8 -9
- package/src/input/commands/hooks-runtime.ts +2 -2
- package/src/input/commands/hosted-runtime.ts +3 -3
- package/src/input/commands/incident-runtime.ts +3 -3
- package/src/input/commands/intelligence-runtime.ts +6 -9
- package/src/input/commands/knowledge.ts +2 -2
- package/src/input/commands/legacy-panel-command.ts +57 -0
- package/src/input/commands/local-auth-runtime.ts +8 -9
- package/src/input/commands/local-provider-runtime.ts +7 -4
- package/src/input/commands/local-runtime.ts +12 -15
- package/src/input/commands/local-setup-review.ts +1 -1
- package/src/input/commands/local-setup.ts +13 -19
- package/src/input/commands/memory.ts +1 -1
- package/src/input/commands/notify-runtime.ts +9 -0
- package/src/input/commands/operator-runtime.ts +10 -12
- package/src/input/commands/permissions-provenance.ts +3 -3
- package/src/input/commands/planning-runtime.ts +7 -7
- package/src/input/commands/platform-sandbox-runtime.ts +2 -2
- package/src/input/commands/platform-services-runtime.ts +1 -1
- package/src/input/commands/policy-dispatch.ts +2 -2
- package/src/input/commands/policy.ts +3 -3
- package/src/input/commands/provider.ts +1 -1
- package/src/input/commands/remote-runtime.ts +1 -1
- package/src/input/commands/review-runtime.ts +39 -94
- package/src/input/commands/rewind-runtime.ts +81 -108
- package/src/input/commands/runtime-services.ts +15 -17
- package/src/input/commands/services-runtime.ts +2 -2
- package/src/input/commands/session-content.ts +21 -5
- package/src/input/commands/session-workflow.ts +13 -38
- package/src/input/commands/settings-sync-runtime.ts +2 -2
- package/src/input/commands/shell-core.ts +19 -4
- package/src/input/commands/skills-runtime.ts +2 -2
- package/src/input/commands/status-runtime.ts +13 -0
- package/src/input/commands/subscription-runtime.ts +1 -1
- package/src/input/commands/tasks-runtime.ts +2 -8
- package/src/input/commands/work-plan-runtime.ts +4 -4
- package/src/input/commands/workstream-attempts.ts +24 -47
- package/src/input/commands/workstream-runtime.ts +2 -2
- package/src/input/commands/worktree-runtime.ts +3 -3
- package/src/input/commands.ts +3 -1
- package/src/input/composer-editor.ts +44 -0
- package/src/input/concealed-input.ts +1 -1
- package/src/input/config-modal-types.ts +20 -8
- package/src/input/config-modal.ts +106 -105
- package/src/input/confirm-dialog-types.ts +28 -0
- package/src/input/confirm-dialog.ts +70 -0
- package/src/input/delete-key-policy.ts +3 -3
- package/src/input/feed-context-factory.ts +15 -16
- package/src/input/handler-command-route.ts +7 -42
- package/src/input/handler-content-actions.ts +16 -15
- package/src/input/handler-feed-routes.ts +26 -211
- package/src/input/handler-feed.ts +68 -95
- package/src/input/handler-interactions.ts +5 -3
- package/src/input/handler-modal-routes.ts +215 -216
- package/src/input/handler-modal-stack.ts +81 -11
- package/src/input/handler-modal-token-routes.ts +4 -0
- package/src/input/handler-onboarding.ts +0 -1
- package/src/input/handler-picker-routes.ts +65 -107
- package/src/input/handler-session-view-route.ts +149 -0
- package/src/input/handler-shortcuts.ts +16 -154
- package/src/input/handler-types.ts +4 -2
- package/src/input/handler-ui-state.ts +45 -15
- package/src/input/handler-work-tree-route.ts +123 -0
- package/src/input/handler.ts +25 -70
- package/src/input/keybindings.ts +16 -71
- package/src/input/masked-entry-modal.ts +117 -0
- package/src/input/mcp-workspace.ts +48 -17
- package/src/input/model-picker-filter.ts +8 -0
- package/src/input/model-picker-open.ts +99 -0
- package/src/input/model-picker-types.ts +1 -1
- package/src/input/model-picker.ts +92 -9
- package/src/input/notifications-modal.ts +123 -0
- package/src/input/overlay-filter.ts +26 -0
- package/src/input/profile-picker-modal.ts +37 -8
- package/src/input/search.ts +3 -3
- package/src/input/selection-modal-queue.ts +2 -0
- package/src/input/selection-modal.ts +28 -16
- package/src/input/session-picker-modal.ts +33 -8
- package/src/input/settings-modal-activation.ts +7 -2
- package/src/input/settings-modal-data.ts +11 -6
- package/src/input/settings-modal-types.ts +1 -1
- package/src/input/settings-modal.ts +20 -20
- package/src/input/submission-intent.ts +1 -1
- package/src/input/submission-router.ts +4 -9
- package/src/input/surface-modal-host.ts +110 -0
- package/src/input/theme-settings-actions.ts +82 -0
- package/src/input/usage-modal.ts +183 -0
- package/src/input/views.ts +97 -0
- package/src/main.ts +175 -165
- package/src/permissions/hunk-selection.ts +1 -1
- package/src/permissions/prompt-card.ts +511 -0
- package/src/permissions/prompt.ts +59 -622
- package/src/renderer/agents-modal.ts +310 -0
- package/src/renderer/autocomplete-overlay.ts +42 -220
- package/src/renderer/back-to-bottom.ts +80 -0
- package/src/renderer/block-actions-overlay.ts +30 -48
- package/src/renderer/bookmark-modal.ts +48 -79
- package/src/renderer/changes-modal.ts +325 -0
- package/src/renderer/code-block.ts +184 -106
- package/src/renderer/command-palette.ts +93 -0
- package/src/renderer/composer-fragments.ts +4 -4
- package/src/renderer/composer.ts +146 -0
- package/src/renderer/compositor.ts +26 -160
- package/src/renderer/config-modal.ts +185 -81
- package/src/renderer/confirm-dialog.ts +50 -0
- package/src/renderer/context-inspector.ts +116 -154
- package/src/renderer/context-status-hint.ts +4 -4
- package/src/renderer/conversation-layout.ts +20 -0
- package/src/renderer/conversation-overlays.ts +94 -84
- package/src/renderer/conversation-surface.ts +19 -38
- package/src/renderer/diff-tint.ts +98 -0
- package/src/renderer/file-picker-overlay.ts +63 -90
- package/src/renderer/footer-targets.ts +38 -0
- package/src/renderer/git-status.ts +3 -4
- package/src/renderer/header-line.ts +140 -117
- package/src/renderer/help-overlay.ts +133 -219
- package/src/renderer/history-search-overlay.ts +15 -12
- package/src/renderer/lane-graph/bead.ts +800 -0
- package/src/renderer/lane-graph/glyphs.ts +134 -0
- package/src/renderer/lane-graph/layout.ts +248 -0
- package/src/renderer/lane-graph/paint.ts +537 -0
- package/src/renderer/lane-graph/semantic-memo.ts +77 -0
- package/src/renderer/layout-engine.ts +2 -57
- package/src/renderer/layout.ts +7 -13
- package/src/renderer/markdown-inline.ts +2 -1
- package/src/renderer/markdown-table.ts +17 -12
- package/src/renderer/markdown.ts +92 -34
- package/src/renderer/masked-entry-modal.ts +78 -0
- package/src/renderer/mcp-workspace.ts +166 -203
- package/src/renderer/model-workspace.ts +381 -436
- package/src/renderer/notifications-modal.ts +116 -0
- package/src/renderer/onboarding/onboarding-wizard.ts +178 -588
- package/src/renderer/process-view.ts +192 -0
- package/src/renderer/profile-picker-modal.ts +58 -110
- package/src/renderer/search-overlay.ts +6 -3
- package/src/renderer/selection-modal-overlay.ts +87 -327
- package/src/renderer/semantic-diff.ts +2 -2
- package/src/renderer/session-chips.ts +102 -0
- package/src/renderer/session-picker-modal.ts +177 -297
- package/src/renderer/settings-modal-connections.ts +14 -23
- package/src/renderer/settings-modal-context.ts +367 -0
- package/src/renderer/settings-modal-helpers.ts +6 -11
- package/src/renderer/settings-modal.ts +322 -726
- package/src/renderer/shell-surface.ts +277 -175
- package/src/renderer/shortcuts-overlay.ts +217 -0
- package/src/renderer/status-line.ts +475 -0
- package/src/renderer/surface-compose.ts +174 -0
- package/src/renderer/surface-kit-extra.ts +303 -0
- package/src/renderer/surface-kit-list.ts +366 -0
- package/src/renderer/surface-kit-parts.ts +360 -0
- package/src/renderer/surface-kit.ts +568 -0
- package/src/renderer/syntax-highlighter.ts +280 -197
- package/src/renderer/syntax-theme.ts +51 -0
- package/src/renderer/system-message.ts +0 -1
- package/src/renderer/term-caps.ts +42 -1
- package/src/renderer/terminal-bg-probe.ts +116 -19
- package/src/renderer/terminal-palette-probe.ts +322 -0
- package/src/renderer/terminal-palette-reader.ts +183 -0
- package/src/renderer/terminal-palette.ts +58 -0
- package/src/renderer/theme-mode-config.ts +16 -1
- package/src/renderer/theme.ts +234 -207
- package/src/renderer/thinking.ts +0 -1
- package/src/renderer/throbber.ts +188 -0
- package/src/renderer/toast-center.ts +119 -0
- package/src/renderer/ui-factory.ts +39 -602
- package/src/renderer/ui-primitives.ts +8 -25
- package/src/renderer/usage-modal.ts +353 -0
- package/src/renderer/user-message.ts +58 -0
- package/src/renderer/voice-capture-chip.ts +53 -0
- package/src/runtime/bootstrap-command-context.ts +0 -5
- package/src/runtime/bootstrap-command-parts.ts +38 -89
- package/src/runtime/bootstrap-core.ts +13 -15
- package/src/runtime/bootstrap-hook-bridge.ts +12 -21
- package/src/runtime/bootstrap-notifier-sync.ts +17 -1
- package/src/runtime/bootstrap-shell.ts +16 -50
- package/src/runtime/bootstrap.ts +14 -14
- package/src/runtime/client/fleet-union.ts +5 -5
- package/src/runtime/client/hosted-exit.ts +2 -2
- package/src/runtime/client/hosted-sessions.ts +1 -1
- package/src/runtime/client/spine-adoption.ts +1 -1
- package/src/runtime/context-accounting-source.ts +5 -4
- package/src/runtime/index.ts +1 -0
- package/src/runtime/notification-dispatch.ts +102 -29
- package/src/runtime/recovery-offer-wiring.ts +4 -1
- package/src/runtime/recovery-prompt.ts +31 -15
- package/src/runtime/runtime-services-types.ts +10 -6
- package/src/runtime/services.ts +17 -12
- package/src/runtime/session-continuity-hints.ts +2 -5
- package/src/runtime/session-inbound-inputs.ts +1 -1
- package/src/runtime/session-resume-liveness-confirm.ts +14 -2
- package/src/runtime/startup-typeahead-gate.ts +103 -0
- package/src/runtime/store/domains/domain-read-matrix.ts +0 -1
- package/src/runtime/store/domains/index.ts +0 -8
- package/src/runtime/store/selectors/index.ts +0 -28
- package/src/runtime/store/state.ts +0 -8
- package/src/runtime/ui-services.ts +4 -6
- package/src/runtime/usage-tracker.ts +348 -0
- package/src/runtime/wrfc-persistence.ts +4 -4
- package/src/shell/blocking-input.ts +92 -2
- package/src/shell/recovery-input-helpers.ts +1 -1
- package/src/shell/session-views.ts +539 -0
- package/src/shell/status-report.ts +86 -0
- package/src/shell/transcript-scroll.ts +68 -0
- package/src/shell/ui-openers.ts +84 -172
- package/src/shell/view-openers.ts +205 -0
- package/src/tools/wrfc-agent-guard.ts +22 -2
- package/src/utils/format-duration.ts +4 -8
- package/src/utils/splash-lines.ts +9 -1
- package/src/utils/terminal-width.ts +56 -0
- package/src/verification/verification-ledger.ts +18 -16
- package/src/{panels → views}/agent-inspector-shared.ts +2 -2
- package/src/{panels → views}/builtin-modals.ts +22 -21
- package/src/views/builtin-views.ts +135 -0
- package/src/{panels → views}/confirm-state.ts +9 -9
- package/src/{panels → views}/diff-review-model.ts +10 -3
- package/src/{panels → views}/eval-registry.ts +1 -1
- package/src/{panels → views}/fleet-acts.ts +49 -85
- package/src/{panels/fleet-panel-format.ts → views/fleet-format.ts} +40 -40
- package/src/{panels → views}/fleet-gateway.ts +5 -5
- package/src/{panels → views}/fleet-observed-render.ts +16 -16
- package/src/{panels → views}/fleet-read-model.ts +9 -9
- package/src/{panels/fleet-tabs.ts → views/fleet-session-tabs.ts} +13 -13
- package/src/{panels → views}/fleet-spawn.ts +33 -49
- package/src/{panels → views}/fleet-steer.ts +12 -12
- package/src/{panels → views}/fleet-stop.ts +4 -4
- package/src/{panels → views}/fleet-transcript.ts +26 -27
- package/src/{panels/fleet-panel-worktree-detail.ts → views/fleet-worktree-detail.ts} +7 -7
- package/src/{panels → views}/hosted-session-feed.ts +6 -6
- package/src/views/modal-surface-registry.ts +41 -0
- package/src/{panels → views}/modals/devices-modal.ts +2 -2
- package/src/{panels → views}/modals/hooks-modal.ts +13 -13
- package/src/{panels → views}/modals/keybindings-modal.ts +19 -27
- package/src/{panels → views}/modals/knowledge-modal.ts +6 -5
- package/src/{panels → views}/modals/local-auth-modal.ts +22 -21
- package/src/{panels → views}/modals/marketplace-modal.ts +11 -11
- package/src/{panels → views}/modals/memory-modal.ts +8 -8
- package/src/{panels → views}/modals/modal-surface-helpers.ts +15 -5
- package/src/{panels → views}/modals/pairing-modal.ts +9 -9
- package/src/{panels → views}/modals/planning-modal.ts +15 -20
- package/src/{panels → views}/modals/plugins-modal.ts +6 -6
- package/src/{panels → views}/modals/policy-modal.ts +13 -5
- package/src/{panels → views}/modals/provider-health-modal.ts +4 -4
- package/src/{panels → views}/modals/remote-modal.ts +3 -3
- package/src/{panels → views}/modals/sandbox-modal.ts +4 -4
- package/src/{panels → views}/modals/security-modal.ts +22 -16
- package/src/{panels → views}/modals/services-modal.ts +3 -3
- package/src/{panels → views}/modals/settings-sync-modal.ts +4 -4
- package/src/{panels → views}/modals/skills-modal.ts +9 -9
- package/src/{panels → views}/modals/subscription-modal.ts +3 -3
- package/src/{panels → views}/modals/work-plan-modal.ts +10 -13
- package/src/views/notifications-feed.ts +314 -0
- package/src/{panels → views}/polish-core.ts +38 -36
- package/src/{panels → views}/polish-tables.ts +35 -26
- package/src/{panels → views}/polish.ts +101 -95
- package/src/{panels → views}/project-planning-answer-actions.ts +3 -3
- package/src/{panels → views}/provider-health-routes.ts +14 -14
- package/src/{panels → views}/search-focus.ts +8 -8
- package/src/{panels → views}/session-maintenance.ts +11 -11
- package/src/views/skills-discovery.ts +159 -0
- package/src/views/view-deps.ts +80 -0
- package/src/views/view-panel-adapter.ts +53 -0
- package/src/{panels → views}/workstream-graph-render.ts +1 -1
- package/src/core/conversation-fold.ts +0 -101
- package/src/core/conversation-turn-structure.ts +0 -464
- package/src/core/conversation-user-receipts.ts +0 -42
- package/src/input/commands/operator-panel-runtime.ts +0 -186
- package/src/input/panel-integration-actions.ts +0 -33
- package/src/input/panel-mouse-geometry.ts +0 -97
- package/src/input/panel-paste-flood-guard.ts +0 -86
- package/src/panels/base-panel.ts +0 -301
- package/src/panels/builtin/agent.ts +0 -27
- package/src/panels/builtin/development.ts +0 -92
- package/src/panels/builtin/knowledge.ts +0 -12
- package/src/panels/builtin/operations.ts +0 -177
- package/src/panels/builtin/session.ts +0 -81
- package/src/panels/builtin/shared.ts +0 -357
- package/src/panels/builtin-panels.ts +0 -28
- package/src/panels/cost-tracker-panel.ts +0 -746
- package/src/panels/diff-panel.ts +0 -797
- package/src/panels/diff-review-panel.ts +0 -395
- package/src/panels/expandable-list-panel.ts +0 -189
- package/src/panels/fleet-deep-link.ts +0 -31
- package/src/panels/fleet-panel.ts +0 -799
- package/src/panels/git-panel.ts +0 -800
- package/src/panels/hosted-session-panel.ts +0 -221
- package/src/panels/index.ts +0 -21
- package/src/panels/local-auth-panel.ts +0 -478
- package/src/panels/notifications-feed.ts +0 -127
- package/src/panels/notifications-panel.ts +0 -160
- package/src/panels/panel-confirm-overlay.ts +0 -72
- package/src/panels/panel-manager.ts +0 -791
- package/src/panels/plugins-panel.ts +0 -371
- package/src/panels/scrollable-list-panel.ts +0 -498
- package/src/panels/skills-panel.ts +0 -454
- package/src/panels/token-budget-panel.ts +0 -688
- package/src/panels/types.ts +0 -191
- package/src/panels/wrfc-panel-format.ts +0 -133
- package/src/renderer/diff-view.ts +0 -134
- package/src/renderer/fleet-tab-strip.ts +0 -56
- package/src/renderer/footer-tips.ts +0 -53
- package/src/renderer/fullscreen-primitives.ts +0 -146
- package/src/renderer/fullscreen-workspace.ts +0 -194
- package/src/renderer/hint-grammar.ts +0 -52
- package/src/renderer/modal-factory.ts +0 -480
- package/src/renderer/overlay-box.ts +0 -154
- package/src/renderer/overlay-viewport.ts +0 -104
- package/src/renderer/panel-composite.ts +0 -145
- package/src/renderer/panel-workspace-bar.ts +0 -54
- package/src/renderer/process-indicator.ts +0 -163
- package/src/renderer/tab-strip.ts +0 -222
- package/src/renderer/text-layout.ts +0 -31
- package/src/renderer/tool-call.ts +0 -276
- package/src/renderer/tool-result-expanded-lines.ts +0 -48
- package/src/renderer/tool-result-summary.ts +0 -219
- package/src/runtime/diagnostics/panels/index.ts +0 -21
- package/src/runtime/diagnostics/panels/ops.ts +0 -156
- package/src/runtime/perf/panel-contracts.ts +0 -32
- package/src/runtime/store/domains/panels.ts +0 -117
- /package/src/{panels → views}/memory-consolidation-gateway.ts +0 -0
- /package/src/{panels → views}/modals/modal-theme.ts +0 -0
- /package/src/{panels → views}/provider-health-domains.ts +0 -0
package/src/runtime/services.ts
CHANGED
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
*
|
|
20
20
|
* The SDK's own note on that shape applies here literally: it is a FLOOR, not a
|
|
21
21
|
* ceiling. Everything below the `createClientRuntimeServices` call is what THIS
|
|
22
|
-
* surface adds on top,
|
|
22
|
+
* surface adds on top, views, keybindings, the WRFC controller wired over the
|
|
23
23
|
* client's own `agentManager`, the workstream engine, the fleet read model, the
|
|
24
24
|
* voice stack with its local playback sink, the knowledge stack the recall
|
|
25
25
|
* surfaces read. None of those need daemon furniture; they are simply not
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
*
|
|
31
31
|
* `sessionBroker` and `approvalBroker` are still constructed. They are this
|
|
32
32
|
* surface's own record of the sessions it is running and the asks it raised,
|
|
33
|
-
* what the transcript, the session
|
|
33
|
+
* what the transcript, the session browser and the approval card read. They are
|
|
34
34
|
* NOT authoritative: session identity is mirrored to the daemon's spine
|
|
35
35
|
* (register/heartbeat/inputs) and an ask is raised on the daemon
|
|
36
36
|
* (`approvals.raise`) so every other surface can see and answer it. Where the
|
|
@@ -65,7 +65,7 @@ import { VoiceProviderRegistry, VoiceService, ensureBuiltinVoiceProviders } from
|
|
|
65
65
|
import { CacheRegistry, PauseController } from '@pellux/goodvibes-sdk/platform/runtime/memory';
|
|
66
66
|
import { wireMemoryGovernance } from './memory-governance-services.ts';
|
|
67
67
|
import { wireVoiceSetup } from '@pellux/goodvibes-sdk/platform/runtime/operations';
|
|
68
|
-
import {
|
|
68
|
+
import { createViewPanelAdapter } from '../views/view-panel-adapter.ts';
|
|
69
69
|
import { BookmarkManager } from '@pellux/goodvibes-sdk/platform/bookmarks';
|
|
70
70
|
import { ProfileManager } from '@pellux/goodvibes-sdk/platform/profiles';
|
|
71
71
|
import { SessionChangeTracker } from '@pellux/goodvibes-sdk/platform/sessions';
|
|
@@ -79,7 +79,7 @@ import { deriveFeatureStates, bindFeatureSettingsBridge } from '@pellux/goodvibe
|
|
|
79
79
|
import { createChannelComposition } from '@pellux/goodvibes-sdk/platform/runtime/operations';
|
|
80
80
|
import { applyProviderOptimizerConfigMode, bindProviderOptimizerFeatureFlag } from '@pellux/goodvibes-sdk/platform/runtime/operations';
|
|
81
81
|
import { createFleetServices } from '@pellux/goodvibes-terminal-shell';
|
|
82
|
-
import { createWorkstreamServices } from '@pellux/goodvibes-sdk/platform/orchestration';
|
|
82
|
+
import { createFixWorkstreamRunner, createWorkstreamServices } from '@pellux/goodvibes-sdk/platform/orchestration';
|
|
83
83
|
import { codeIndexDbPath, createCodeIndexServices, createStoreRerooter, isCodeInjectionSettingEnabled } from '@pellux/goodvibes-sdk/platform/runtime/operations';
|
|
84
84
|
import { WorkspaceTrustManager } from '@pellux/goodvibes-sdk/platform/runtime/operations';
|
|
85
85
|
import { ensureConfiguredModelIsRoutable } from '@pellux/goodvibes-sdk/platform/providers';
|
|
@@ -102,7 +102,7 @@ import { createFleetUnionReadModel } from './client/fleet-union.ts';
|
|
|
102
102
|
import { logger } from '@pellux/goodvibes-sdk/platform/utils';
|
|
103
103
|
import { VERSION } from '../version.ts';
|
|
104
104
|
import { createSessionConversationRewindPort, hasSessionConversation } from './conversation-rewind-port.ts';
|
|
105
|
-
import { createFleetReadModel } from '../
|
|
105
|
+
import { createFleetReadModel } from '../views/fleet-read-model.ts';
|
|
106
106
|
import type { PermissionPromptDecision, PermissionPromptRequest } from '@pellux/goodvibes-sdk/platform/permissions';
|
|
107
107
|
import type { RuntimeServicesOptions, RuntimeServices } from './runtime-services-types.ts';
|
|
108
108
|
export type { RuntimeServicesOptions, RuntimeServices } from './runtime-services-types.ts';
|
|
@@ -136,7 +136,7 @@ export function createRuntimeServices(options: RuntimeServicesOptions): RuntimeS
|
|
|
136
136
|
// nothing and keeps the ordering honest.
|
|
137
137
|
const shellPaths = createShellPathService({ workingDirectory, homeDirectory });
|
|
138
138
|
// The surface's own record of the asks it raised, what the approval card and
|
|
139
|
-
// the
|
|
139
|
+
// the modal read. The AUTHORITATIVE record is the daemon's; the raiser below
|
|
140
140
|
// keeps the two in step (see the SDK's client/approval-raiser.ts).
|
|
141
141
|
const approvalBroker = new ApprovalBroker({
|
|
142
142
|
storePath: shellPaths.resolveProjectPath('tui', 'control-plane', 'approvals.json'),
|
|
@@ -156,7 +156,7 @@ export function createRuntimeServices(options: RuntimeServicesOptions): RuntimeS
|
|
|
156
156
|
actor: 'tui',
|
|
157
157
|
sessionId: () => liveSessionIdRef.value,
|
|
158
158
|
// The "local prompt" is this surface's own broker plus the terminal ask:
|
|
159
|
-
// that is what puts the ask on the approval card and in the
|
|
159
|
+
// that is what puts the ask on the approval card and in the modal while the
|
|
160
160
|
// daemon holds the record every other surface reads.
|
|
161
161
|
localPrompt: () => (request) => approvalBroker.requestApproval({
|
|
162
162
|
request,
|
|
@@ -218,7 +218,8 @@ export function createRuntimeServices(options: RuntimeServicesOptions): RuntimeS
|
|
|
218
218
|
const admitExpensiveWork = (label: string): { allowed: boolean; reason?: string | undefined } =>
|
|
219
219
|
admitExpensiveWorkRef.current?.(label) ?? { allowed: true };
|
|
220
220
|
const isKnowledgeBackgroundPaused = (): boolean => pauseController.isPaused('knowledge-self-improvement');
|
|
221
|
-
|
|
221
|
+
// The operator API's panels.list / panels.open, answered by the modal views.
|
|
222
|
+
const viewPanelAdapter = createViewPanelAdapter();
|
|
222
223
|
const keybindingsManager = new KeybindingsManager({
|
|
223
224
|
configPath: shellPaths.resolveUserPath('tui', 'keybindings.json'),
|
|
224
225
|
});
|
|
@@ -265,6 +266,10 @@ export function createRuntimeServices(options: RuntimeServicesOptions): RuntimeS
|
|
|
265
266
|
agentManager,
|
|
266
267
|
configManager,
|
|
267
268
|
projectRoot: workingDirectory,
|
|
269
|
+
// A chain's fix phase: review findings become a dependency-graph
|
|
270
|
+
// workstream on the one orchestration engine, composed further down
|
|
271
|
+
// (createWorkstreamServices); the runner reads it when a fix cycle starts.
|
|
272
|
+
fixWorkstreamRunner: createFixWorkstreamRunner({ engine: () => orchestrationEngine }),
|
|
268
273
|
});
|
|
269
274
|
agentManager.setWrfcController(wrfcController);
|
|
270
275
|
const sessionBroker = new SharedSessionBroker({
|
|
@@ -463,10 +468,10 @@ export function createRuntimeServices(options: RuntimeServicesOptions): RuntimeS
|
|
|
463
468
|
runtimeBus: options.runtimeBus,
|
|
464
469
|
providerRegistry,
|
|
465
470
|
});
|
|
466
|
-
// What the
|
|
471
|
+
// What the Agents modal reads: this surface's own live registry UNION the
|
|
467
472
|
// adopted daemon's rows. The daemon runs work no registry here knows about
|
|
468
473
|
// (scheduled jobs, channel-driven runs, sessions other surfaces started, the
|
|
469
|
-
// external agents it observes), and a
|
|
474
|
+
// external agents it observes), and a modal showing only half the fleet is
|
|
470
475
|
// worse than one showing none, the half it shows looks complete.
|
|
471
476
|
const fleetReadModel = createFleetUnionReadModel({
|
|
472
477
|
local: createFleetReadModel(processRegistry, options.runtimeBus),
|
|
@@ -508,7 +513,7 @@ export function createRuntimeServices(options: RuntimeServicesOptions): RuntimeS
|
|
|
508
513
|
|
|
509
514
|
const integrationHelpers = new IntegrationHelperService({
|
|
510
515
|
surface, configManager, automationManager, approvalBroker, sessionBroker, distributedRuntime,
|
|
511
|
-
remoteRunnerRegistry, remoteSupervisor, panelManager, localUserAuthManager, providerRegistry,
|
|
516
|
+
remoteRunnerRegistry, remoteSupervisor, panelManager: viewPanelAdapter, localUserAuthManager, providerRegistry,
|
|
512
517
|
serviceRegistry, subscriptionManager, secretsManager,
|
|
513
518
|
runtimeStore: options.runtimeStore, runtimeBus: options.runtimeBus,
|
|
514
519
|
getConversationTitle: options.getConversationTitle,
|
|
@@ -568,7 +573,7 @@ export function createRuntimeServices(options: RuntimeServicesOptions): RuntimeS
|
|
|
568
573
|
runtimeBus: options.runtimeBus,
|
|
569
574
|
runtimeStore: options.runtimeStore,
|
|
570
575
|
runtimeDispatch,
|
|
571
|
-
panelManager,
|
|
576
|
+
panelManager: viewPanelAdapter,
|
|
572
577
|
keybindingsManager,
|
|
573
578
|
routeBindings,
|
|
574
579
|
surfaceRegistry,
|
|
@@ -4,11 +4,10 @@
|
|
|
4
4
|
* Extracted from main.ts (which sits at the architecture line cap) so the
|
|
5
5
|
* startup wiring there stays within budget. Builds the small counts/paths
|
|
6
6
|
* bundle written into the recovery file so a resumed session can describe what
|
|
7
|
-
* was in flight (pending approvals, active/blocked tasks, remotes, worktrees
|
|
8
|
-
*
|
|
7
|
+
* was in flight (pending approvals, active/blocked tasks, remotes, worktrees)
|
|
8
|
+
* without re-reading live state.
|
|
9
9
|
*/
|
|
10
10
|
import type { UiReadModels } from './ui-read-models.ts';
|
|
11
|
-
import type { PanelManager } from '../panels/panel-manager.ts';
|
|
12
11
|
|
|
13
12
|
/**
|
|
14
13
|
* The continuity summary written into the recovery file. A loose serializable
|
|
@@ -17,7 +16,6 @@ import type { PanelManager } from '../panels/panel-manager.ts';
|
|
|
17
16
|
*/
|
|
18
17
|
export function createSessionContinuityHintsBuilder(deps: {
|
|
19
18
|
readonly readModels: UiReadModels;
|
|
20
|
-
readonly panelManager: Pick<PanelManager, 'getAllOpen'>;
|
|
21
19
|
}): () => Record<string, unknown> {
|
|
22
20
|
return () => {
|
|
23
21
|
const sessionSnapshot = deps.readModels.session.getSnapshot();
|
|
@@ -32,7 +30,6 @@ export function createSessionContinuityHintsBuilder(deps: {
|
|
|
32
30
|
remoteRunners: remoteSnapshot.contracts.slice(0, 4).map((contract) => contract.runnerId),
|
|
33
31
|
worktreeCount: worktreeSnapshot.records.length,
|
|
34
32
|
worktreePaths: worktreeSnapshot.records.slice(0, 3).map((record) => record.path),
|
|
35
|
-
openPanels: deps.panelManager.getAllOpen().map((panel) => panel.id),
|
|
36
33
|
};
|
|
37
34
|
};
|
|
38
35
|
}
|
|
@@ -214,7 +214,7 @@ export class SessionInboundInputPoller {
|
|
|
214
214
|
}
|
|
215
215
|
|
|
216
216
|
/** Format the operator-facing narration for an inbound steer, e.g.
|
|
217
|
-
* "steer received from webui (Alice): resize the
|
|
217
|
+
* "steer received from webui (Alice): resize the sidebar". */
|
|
218
218
|
export function narrateInboundSteer(steer: InboundSteer): string {
|
|
219
219
|
const surface = steer.surfaceKind ?? steer.surfaceId ?? 'another surface';
|
|
220
220
|
const who = steer.displayName ? ` (${steer.displayName})` : '';
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* session-resume-liveness-confirm.ts, the "this session is open somewhere
|
|
3
|
-
* else" check for the session-browser
|
|
3
|
+
* else" check for the session-browser resume seam.
|
|
4
4
|
*
|
|
5
5
|
* `/session resume <id>` already refuses to resume a session whose liveness
|
|
6
6
|
* marker points at another running process, and tells the operator to re-run
|
|
7
|
-
* with `--force`. The
|
|
7
|
+
* with `--force`. The session-browser seam had no such check at all: picking a session
|
|
8
8
|
* from the browser forked another terminal's live state with no warning. That
|
|
9
9
|
* seam has no argv to carry a `--force`, so it asks the same question as a
|
|
10
10
|
* modal instead.
|
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
import { checkSessionLiveness } from '@pellux/goodvibes-sdk/platform/runtime/operations';
|
|
18
18
|
import type { SessionSurface } from '@/runtime/index.ts';
|
|
19
19
|
import type { SelectionItem, SelectionResult } from '../input/selection-modal.ts';
|
|
20
|
+
import type { ConfirmOptions } from '../input/confirm-dialog.ts';
|
|
20
21
|
|
|
21
22
|
export type LiveResumeSelectionOpener = (
|
|
22
23
|
title: string,
|
|
@@ -54,6 +55,8 @@ export interface ConfirmLiveResumeDeps {
|
|
|
54
55
|
readonly surface: SessionSurface;
|
|
55
56
|
/** Late-bound: the shell builds its selection opener after the resume handler exists. */
|
|
56
57
|
readonly openSelection: () => LiveResumeSelectionOpener | undefined;
|
|
58
|
+
/** Late-bound confirm dialog; preferred over the selection list when the shell has one. */
|
|
59
|
+
readonly confirm?: () => ((options: ConfirmOptions) => Promise<boolean>) | undefined;
|
|
57
60
|
/** Injectable for tests; defaults to this process's own pid. */
|
|
58
61
|
readonly selfPid?: number;
|
|
59
62
|
}
|
|
@@ -71,6 +74,15 @@ export async function confirmLiveResume(sessionId: string, deps: ConfirmLiveResu
|
|
|
71
74
|
const selfPid = deps.selfPid ?? process.pid;
|
|
72
75
|
const liveness = checkSessionLiveness(deps.surface, sessionId);
|
|
73
76
|
if (!liveness.live || liveness.pid === null || liveness.pid === selfPid) return true;
|
|
77
|
+
const confirm = deps.confirm?.();
|
|
78
|
+
if (confirm) {
|
|
79
|
+
return confirm({
|
|
80
|
+
title: `${LIVE_RESUME_CONFIRM_TITLE}?`,
|
|
81
|
+
body: `This session appears open in another terminal (pid ${liveness.pid}); resuming will fork its live state. Both terminals would hold their own copy of the conversation from this point on.`,
|
|
82
|
+
confirmLabel: 'Resume anyway',
|
|
83
|
+
tone: 'warning',
|
|
84
|
+
});
|
|
85
|
+
}
|
|
74
86
|
const open = deps.openSelection();
|
|
75
87
|
if (!open) return true;
|
|
76
88
|
return new Promise<boolean>((resolve) => {
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* startup-typeahead-gate.ts, keeps keys typed before a startup question
|
|
3
|
+
* appeared out of that question.
|
|
4
|
+
*
|
|
5
|
+
* The crash-recovery offer (recovery-prompt.ts) opens a modal at startup whose
|
|
6
|
+
* Enter resumes a snapshot. A user who started typing before that modal was
|
|
7
|
+
* on screen (during boot, or while the first frame was still on its way) is
|
|
8
|
+
* typing into the composer in their head; routing those keys to the modal
|
|
9
|
+
* would drop the text and let their Enter answer a question they never saw.
|
|
10
|
+
*
|
|
11
|
+
* The gate sits in the stdin path after the terminal-reply filters and before
|
|
12
|
+
* the input router. While a startup modal is armed it HOLDS keyboard input
|
|
13
|
+
* that is typeahead, and lets through input that is an answer:
|
|
14
|
+
* - anything that arrives before the modal's first frame was painted is
|
|
15
|
+
* typeahead by definition;
|
|
16
|
+
* - anything within settleMs of that paint is typeahead too (nobody reads a
|
|
17
|
+
* question and answers it that fast; it is a keystroke already in flight);
|
|
18
|
+
* - a key within burstGapMs of the previous held key continues the same
|
|
19
|
+
* burst of typing, and is held with it.
|
|
20
|
+
* The first key after a pause goes to the modal, and from then on the modal
|
|
21
|
+
* gets everything. When the modal flow ends, release() hands the held bytes
|
|
22
|
+
* back and the caller replays them into the normal input path: they land in
|
|
23
|
+
* the composer exactly as typed, nothing lost and nothing misrouted.
|
|
24
|
+
*
|
|
25
|
+
* Mouse reports and focus events are never held: they are not typing, and a
|
|
26
|
+
* click on the modal is an answer.
|
|
27
|
+
*/
|
|
28
|
+
|
|
29
|
+
/** Input this soon after the modal's first frame is typeahead. */
|
|
30
|
+
export const TYPEAHEAD_SETTLE_MS = 250;
|
|
31
|
+
/** A key this soon after the previous held key continues the same burst. */
|
|
32
|
+
export const TYPEAHEAD_BURST_GAP_MS = 500;
|
|
33
|
+
|
|
34
|
+
/** SGR mouse reports and focus in/out reports: never typing. */
|
|
35
|
+
const NON_TYPING = /\x1b\[<\d+;\d+;\d+[Mm]|\x1b\[[IO]/g;
|
|
36
|
+
|
|
37
|
+
export interface StartupTypeaheadGate {
|
|
38
|
+
/** A startup modal just opened. Holding starts; ignored when already armed. */
|
|
39
|
+
arm(): void;
|
|
40
|
+
/** The render loop painted a frame (only the first one after arm() counts). */
|
|
41
|
+
framePainted(): void;
|
|
42
|
+
/** Route one stdin chunk: returns the bytes to route now ('' when held). */
|
|
43
|
+
filter(chunk: string): string;
|
|
44
|
+
/** The modal flow ended: stop holding and return what was held. */
|
|
45
|
+
release(): string;
|
|
46
|
+
/** True while armed (holding or already passing input to the modal). */
|
|
47
|
+
readonly armed: boolean;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export interface StartupTypeaheadGateOptions {
|
|
51
|
+
readonly now?: () => number;
|
|
52
|
+
readonly settleMs?: number;
|
|
53
|
+
readonly burstGapMs?: number;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export function createStartupTypeaheadGate(options: StartupTypeaheadGateOptions = {}): StartupTypeaheadGate {
|
|
57
|
+
const now = options.now ?? Date.now;
|
|
58
|
+
const settleMs = options.settleMs ?? TYPEAHEAD_SETTLE_MS;
|
|
59
|
+
const burstGapMs = options.burstGapMs ?? TYPEAHEAD_BURST_GAP_MS;
|
|
60
|
+
let state: 'idle' | 'holding' | 'passing' = 'idle';
|
|
61
|
+
let paintedAt: number | null = null;
|
|
62
|
+
let lastHeldAt: number | null = null;
|
|
63
|
+
let held = '';
|
|
64
|
+
|
|
65
|
+
const isTyping = (chunk: string): boolean => chunk.replace(NON_TYPING, '').length > 0;
|
|
66
|
+
|
|
67
|
+
return {
|
|
68
|
+
get armed() {
|
|
69
|
+
return state !== 'idle';
|
|
70
|
+
},
|
|
71
|
+
arm() {
|
|
72
|
+
if (state !== 'idle') return;
|
|
73
|
+
state = 'holding';
|
|
74
|
+
paintedAt = null;
|
|
75
|
+
lastHeldAt = null;
|
|
76
|
+
},
|
|
77
|
+
framePainted() {
|
|
78
|
+
if (state === 'holding' && paintedAt === null) paintedAt = now();
|
|
79
|
+
},
|
|
80
|
+
filter(chunk) {
|
|
81
|
+
if (state !== 'holding' || !isTyping(chunk)) return chunk;
|
|
82
|
+
const t = now();
|
|
83
|
+
const typeahead = paintedAt === null
|
|
84
|
+
|| t - paintedAt <= settleMs
|
|
85
|
+
|| (lastHeldAt !== null && t - lastHeldAt <= burstGapMs);
|
|
86
|
+
if (typeahead) {
|
|
87
|
+
held += chunk;
|
|
88
|
+
lastHeldAt = t;
|
|
89
|
+
return '';
|
|
90
|
+
}
|
|
91
|
+
state = 'passing';
|
|
92
|
+
return chunk;
|
|
93
|
+
},
|
|
94
|
+
release() {
|
|
95
|
+
const out = held;
|
|
96
|
+
held = '';
|
|
97
|
+
state = 'idle';
|
|
98
|
+
paintedAt = null;
|
|
99
|
+
lastHeldAt = null;
|
|
100
|
+
return out;
|
|
101
|
+
},
|
|
102
|
+
};
|
|
103
|
+
}
|
|
@@ -36,14 +36,6 @@ export type {
|
|
|
36
36
|
} from '@/runtime/index.ts';
|
|
37
37
|
export { createInitialOverlaysState } from '@/runtime/index.ts';
|
|
38
38
|
|
|
39
|
-
export type {
|
|
40
|
-
PanelId,
|
|
41
|
-
PanelPosition,
|
|
42
|
-
PanelState,
|
|
43
|
-
PanelDomainState,
|
|
44
|
-
} from './panels.ts';
|
|
45
|
-
export { createInitialPanelsState } from './panels.ts';
|
|
46
|
-
|
|
47
39
|
export type {
|
|
48
40
|
PermissionMode,
|
|
49
41
|
PermissionDecisionMachineState,
|
|
@@ -13,7 +13,6 @@ import type { SessionDomainState } from '@/runtime/index.ts';
|
|
|
13
13
|
import type { ModelDomainState } from '@/runtime/index.ts';
|
|
14
14
|
import type { ConversationDomainState, TurnState } from '@/runtime/index.ts';
|
|
15
15
|
import type { OverlayDomainState, OverlayId } from '@/runtime/index.ts';
|
|
16
|
-
import type { PanelDomainState, PanelState } from '../domains/panels.ts';
|
|
17
16
|
import type { PermissionDomainState, PermissionMode } from '@/runtime/index.ts';
|
|
18
17
|
import type { TaskDomainState, RuntimeTask, TaskKind } from '@/runtime/index.ts';
|
|
19
18
|
import type { AgentDomainState, RuntimeAgent } from '@/runtime/index.ts';
|
|
@@ -53,11 +52,6 @@ export function selectOverlays(state: RuntimeState): OverlayDomainState {
|
|
|
53
52
|
return state.overlays;
|
|
54
53
|
}
|
|
55
54
|
|
|
56
|
-
/** Select the full panels domain slice. Casts from Record<string,unknown> to PanelDomainState. */
|
|
57
|
-
export function selectPanels(state: RuntimeState): PanelDomainState {
|
|
58
|
-
return state.panels as unknown as PanelDomainState;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
55
|
/** Select the full permissions domain slice. */
|
|
62
56
|
export function selectPermissions(state: RuntimeState): PermissionDomainState {
|
|
63
57
|
return state.permissions;
|
|
@@ -269,28 +263,6 @@ export function selectPermissionMode(state: RuntimeState): PermissionMode {
|
|
|
269
263
|
return state.permissions.mode;
|
|
270
264
|
}
|
|
271
265
|
|
|
272
|
-
/**
|
|
273
|
-
* Returns all panels that are currently open.
|
|
274
|
-
*/
|
|
275
|
-
export function selectActivePanels(state: RuntimeState): PanelState[] {
|
|
276
|
-
const result: PanelState[] = [];
|
|
277
|
-
const panelDomain = state.panels as unknown as PanelDomainState;
|
|
278
|
-
for (const panel of panelDomain.panels.values()) {
|
|
279
|
-
if (panel.open) {
|
|
280
|
-
result.push(panel);
|
|
281
|
-
}
|
|
282
|
-
}
|
|
283
|
-
return result;
|
|
284
|
-
}
|
|
285
|
-
|
|
286
|
-
/**
|
|
287
|
-
* Returns the panel currently holding focus.
|
|
288
|
-
*/
|
|
289
|
-
export function selectFocusedPanel(state: RuntimeState): PanelState | undefined {
|
|
290
|
-
const panelDomain = state.panels as unknown as PanelDomainState;
|
|
291
|
-
return panelDomain.panels.get(panelDomain.focusedPanelId);
|
|
292
|
-
}
|
|
293
|
-
|
|
294
266
|
/**
|
|
295
267
|
* Returns whether any overlay is currently visible.
|
|
296
268
|
*/
|
|
@@ -10,7 +10,6 @@ import type { SessionDomainState } from '@/runtime/index.ts';
|
|
|
10
10
|
import type { ModelDomainState } from '@/runtime/index.ts';
|
|
11
11
|
import type { ConversationDomainState } from '@/runtime/index.ts';
|
|
12
12
|
import type { OverlayDomainState } from '@/runtime/index.ts';
|
|
13
|
-
import type { PanelDomainState } from './domains/panels.ts';
|
|
14
13
|
import type { PermissionDomainState } from '@/runtime/index.ts';
|
|
15
14
|
import type { TaskDomainState } from '@/runtime/index.ts';
|
|
16
15
|
import type { AgentDomainState } from '@/runtime/index.ts';
|
|
@@ -41,7 +40,6 @@ import { createInitialSessionState } from '@/runtime/index.ts';
|
|
|
41
40
|
import { createInitialModelState } from '@/runtime/index.ts';
|
|
42
41
|
import { createInitialConversationState } from '@/runtime/index.ts';
|
|
43
42
|
import { createInitialOverlaysState } from '@/runtime/index.ts';
|
|
44
|
-
import { createInitialPanelsState } from './domains/panels.ts';
|
|
45
43
|
import { createInitialPermissionsState } from '@/runtime/index.ts';
|
|
46
44
|
import { createInitialTasksState } from '@/runtime/index.ts';
|
|
47
45
|
import { createInitialAgentsState } from '@/runtime/index.ts';
|
|
@@ -76,11 +74,6 @@ export interface RuntimeState {
|
|
|
76
74
|
model: ModelDomainState;
|
|
77
75
|
conversation: ConversationDomainState;
|
|
78
76
|
overlays: OverlayDomainState;
|
|
79
|
-
/**
|
|
80
|
-
* TUI panel state. Typed as Record<string,unknown> for SDK RuntimeState
|
|
81
|
-
* compatibility. Use selectPanels() which casts to PanelDomainState.
|
|
82
|
-
*/
|
|
83
|
-
panels: Record<string, unknown>;
|
|
84
77
|
permissions: PermissionDomainState;
|
|
85
78
|
tasks: TaskDomainState;
|
|
86
79
|
agents: AgentDomainState;
|
|
@@ -118,7 +111,6 @@ export function createInitialRuntimeState(): RuntimeState {
|
|
|
118
111
|
model: createInitialModelState(),
|
|
119
112
|
conversation: createInitialConversationState(),
|
|
120
113
|
overlays: createInitialOverlaysState(),
|
|
121
|
-
panels: createInitialPanelsState() as unknown as Record<string, unknown>,
|
|
122
114
|
permissions: createInitialPermissionsState(),
|
|
123
115
|
tasks: createInitialTasksState(),
|
|
124
116
|
agents: createInitialAgentsState(),
|
|
@@ -20,7 +20,6 @@ export interface UiEnvironmentServices {
|
|
|
20
20
|
|
|
21
21
|
export interface UiShellServices {
|
|
22
22
|
readonly keybindingsManager: RuntimeServices['keybindingsManager'];
|
|
23
|
-
readonly panelManager: RuntimeServices['panelManager'];
|
|
24
23
|
readonly processManager: RuntimeServices['processManager'];
|
|
25
24
|
readonly profileManager: RuntimeServices['profileManager'];
|
|
26
25
|
readonly bookmarkManager: RuntimeServices['bookmarkManager'];
|
|
@@ -41,7 +40,7 @@ export interface UiProviderServices {
|
|
|
41
40
|
export interface UiSessionServices {
|
|
42
41
|
readonly sessionManager: RuntimeServices['sessionManager'];
|
|
43
42
|
/**
|
|
44
|
-
* The
|
|
43
|
+
* The modal-facing session READ source is the cross-surface union
|
|
45
44
|
* facade, not the raw local broker, in adopted-daemon ('external') mode the
|
|
46
45
|
* local broker misses sessions hosted for other surfaces. Sync signature
|
|
47
46
|
* preserved; the facade's cache makes that honest (see session-union-cache.ts).
|
|
@@ -115,11 +114,11 @@ export interface UiRuntimeSharedServices {
|
|
|
115
114
|
readonly distributedRuntime: RuntimeServices['distributedRuntime'];
|
|
116
115
|
readonly remoteRunnerRegistry: RuntimeServices['remoteRunnerRegistry'] & RemoteRunnerRegistry;
|
|
117
116
|
readonly remoteSupervisor: RuntimeServices['remoteSupervisor'] & RemoteSupervisor;
|
|
118
|
-
/** the shared live process registry backing the
|
|
117
|
+
/** the shared live process registry backing the Agents modal. */
|
|
119
118
|
readonly processRegistry: RuntimeServices['processRegistry'];
|
|
120
|
-
/** The
|
|
119
|
+
/** The Agents modal's read model: local rows union the adopted daemon's. */
|
|
121
120
|
readonly fleetReadModel: RuntimeServices['fleetReadModel'];
|
|
122
|
-
/** The shared runtime event bus, the
|
|
121
|
+
/** The shared runtime event bus, the Agents modal subscribes to its 'communication' domain for the honest steer-consumed signal. */
|
|
123
122
|
readonly runtimeBus: RuntimeServices['runtimeBus'];
|
|
124
123
|
};
|
|
125
124
|
}
|
|
@@ -161,7 +160,6 @@ export function createUiRuntimeServices(
|
|
|
161
160
|
},
|
|
162
161
|
shell: {
|
|
163
162
|
keybindingsManager: runtimeServices.keybindingsManager,
|
|
164
|
-
panelManager: runtimeServices.panelManager,
|
|
165
163
|
processManager: runtimeServices.processManager,
|
|
166
164
|
profileManager: runtimeServices.profileManager,
|
|
167
165
|
bookmarkManager: runtimeServices.bookmarkManager,
|