@pellux/goodvibes-tui 2.0.21 → 2.1.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 +65 -1
- package/README.md +30 -29
- package/docs/README.md +8 -5
- package/docs/foundation-artifacts/operator-contract.json +1 -1
- package/package.json +28 -19
- 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-reference.ts +2 -2
- 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/live-verifier.ts +0 -10
- package/src/version.ts +1 -1
- 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/verification/verification-ledger.ts +0 -707
- /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
|
@@ -2,6 +2,15 @@ import type { CommandRegistry } from '../command-registry.ts';
|
|
|
2
2
|
import { requireWebhookNotifier } from './runtime-services.ts';
|
|
3
3
|
|
|
4
4
|
export function registerNotifyRuntimeCommands(registry: CommandRegistry): void {
|
|
5
|
+
registry.register({
|
|
6
|
+
name: 'notifications',
|
|
7
|
+
aliases: [],
|
|
8
|
+
description: 'Open the notification history: everything collected, newest first; Enter goes to its subject',
|
|
9
|
+
handler(_args, ctx) {
|
|
10
|
+
if (ctx.openNotifications) ctx.openNotifications();
|
|
11
|
+
else ctx.print('The Notifications view is not available in this session.');
|
|
12
|
+
},
|
|
13
|
+
});
|
|
5
14
|
registry.register({
|
|
6
15
|
name: 'notify',
|
|
7
16
|
aliases: [],
|
|
@@ -2,14 +2,14 @@ import type { CommandRegistry } from '../command-registry.ts';
|
|
|
2
2
|
import { ToolContractVerifier } from '@/runtime/index.ts';
|
|
3
3
|
import type { ReplaySnapshotInput } from '@/runtime/index.ts';
|
|
4
4
|
import { logger } from '@pellux/goodvibes-sdk/platform/utils';
|
|
5
|
-
import {
|
|
5
|
+
import { registerLegacyPanelCommand } from './legacy-panel-command.ts';
|
|
6
6
|
import { requireOpsApi, requireProfileManager, requireReplayEngine } from './runtime-services.ts';
|
|
7
7
|
import { summarizeError } from '@pellux/goodvibes-sdk/platform/utils';
|
|
8
8
|
import { estimateConversationTokens } from '@pellux/goodvibes-sdk/platform/core';
|
|
9
9
|
import { handleContextWindowSubcommand } from './context-window.ts';
|
|
10
10
|
|
|
11
11
|
export function registerOperatorRuntimeCommands(registry: CommandRegistry): void {
|
|
12
|
-
|
|
12
|
+
registerLegacyPanelCommand(registry);
|
|
13
13
|
|
|
14
14
|
registry.register({
|
|
15
15
|
name: 'settings',
|
|
@@ -187,12 +187,10 @@ export function registerOperatorRuntimeCommands(registry: CommandRegistry): void
|
|
|
187
187
|
const sub = args[0];
|
|
188
188
|
|
|
189
189
|
if (sub === 'view' || sub === undefined) {
|
|
190
|
-
//
|
|
191
|
-
//
|
|
192
|
-
|
|
193
|
-
if (ctx.
|
|
194
|
-
else if (ctx.showPanel) ctx.showPanel('ops-control');
|
|
195
|
-
else ctx.print('Operator Control Plane panel is not available in this shell.');
|
|
190
|
+
// The flag-wired opener when the control plane is on, else the
|
|
191
|
+
// Agents view, which holds the live operations content either way.
|
|
192
|
+
if (ctx.openOpsView) ctx.openOpsView();
|
|
193
|
+
else if (!ctx.openView?.('ops-control')) ctx.print('The Agents view is not available in this shell.');
|
|
196
194
|
return;
|
|
197
195
|
}
|
|
198
196
|
|
|
@@ -242,7 +240,7 @@ export function registerOperatorRuntimeCommands(registry: CommandRegistry): void
|
|
|
242
240
|
|
|
243
241
|
ctx.print(
|
|
244
242
|
'Usage: /ops <subcommand>\n'
|
|
245
|
-
+ ' /ops view — open
|
|
243
|
+
+ ' /ops view — open Agents (F2 or Ctrl+O)\n'
|
|
246
244
|
+ ' /ops task cancel <id> [note] — cancel a task\n'
|
|
247
245
|
+ ' /ops task pause <id> [note] — pause a task\n'
|
|
248
246
|
+ ' /ops task resume <id> [note] — resume a blocked task\n'
|
|
@@ -310,8 +308,8 @@ export function registerOperatorRuntimeCommands(registry: CommandRegistry): void
|
|
|
310
308
|
handler(args, ctx) {
|
|
311
309
|
const sub = args[0];
|
|
312
310
|
if (sub === undefined || sub === 'view') {
|
|
313
|
-
if (ctx.
|
|
314
|
-
else ctx.print('
|
|
311
|
+
if (ctx.openForensicsView) ctx.openForensicsView();
|
|
312
|
+
else ctx.print('The Agents view is not available.');
|
|
315
313
|
return;
|
|
316
314
|
}
|
|
317
315
|
if (sub === 'latest') {
|
|
@@ -391,7 +389,7 @@ export function registerOperatorRuntimeCommands(registry: CommandRegistry): void
|
|
|
391
389
|
}
|
|
392
390
|
ctx.print(
|
|
393
391
|
'Usage: /forensics <subcommand>\n'
|
|
394
|
-
+ ' /forensics — open
|
|
392
|
+
+ ' /forensics — open Agents on forensics\n'
|
|
395
393
|
+ ' /forensics latest — print the most recent failure report summary\n'
|
|
396
394
|
+ ' /forensics show <id> — show full JSON for a specific report\n'
|
|
397
395
|
+ ' /forensics export <id> — export incident bundle JSON to the conversation'
|
|
@@ -4,7 +4,7 @@ import { CONFIG_SCHEMA } from '@pellux/goodvibes-sdk/platform/config';
|
|
|
4
4
|
import { SHIPPED_CREDENTIAL_READ_RULES } from '@pellux/goodvibes-sdk/platform/permissions';
|
|
5
5
|
|
|
6
6
|
// ---------------------------------------------------------------------------
|
|
7
|
-
// /permissions provenance
|
|
7
|
+
// /permissions provenance report.
|
|
8
8
|
//
|
|
9
9
|
// Shows every permission-relevant setting in effect AND where each value came
|
|
10
10
|
// from. Provenance is taken from the platform's own ConfigManager.
|
|
@@ -58,7 +58,7 @@ export interface PermissionProvenance {
|
|
|
58
58
|
readonly shippedRules: readonly ShippedPolicyRuleRow[];
|
|
59
59
|
}
|
|
60
60
|
|
|
61
|
-
/** The permission-relevant settings, in the order the
|
|
61
|
+
/** The permission-relevant settings, in the order the report lists them. */
|
|
62
62
|
const PERMISSION_KEYS: readonly { readonly key: string; readonly label: string; readonly note?: string }[] = [
|
|
63
63
|
{ key: 'permissions.mode', label: 'Permission mode', note: 'also the current session mode' },
|
|
64
64
|
{ key: 'permissions.backgroundAgents', label: 'Background-agent mode' },
|
|
@@ -218,7 +218,7 @@ function displayValue(value: unknown): string {
|
|
|
218
218
|
return JSON.stringify(value);
|
|
219
219
|
}
|
|
220
220
|
|
|
221
|
-
/** Render the provenance
|
|
221
|
+
/** Render the provenance report as plain lines for the command surface. */
|
|
222
222
|
export function renderPermissionProvenance(provenance: PermissionProvenance): string {
|
|
223
223
|
const lines: string[] = [
|
|
224
224
|
'Permissions: settings in effect and where each came from',
|
|
@@ -80,7 +80,7 @@ export function registerPlanningRuntimeCommands(registry: CommandRegistry): void
|
|
|
80
80
|
|
|
81
81
|
const projectPlanningService = ctx.workspace.projectPlanningService;
|
|
82
82
|
const projectId = ctx.workspace.projectPlanningProjectId;
|
|
83
|
-
const
|
|
83
|
+
const openProjectPlanningModal = () => openModalCommand(ctx, 'planning-modal');
|
|
84
84
|
|
|
85
85
|
if (args.length === 0) {
|
|
86
86
|
if (projectPlanningService && projectId) {
|
|
@@ -95,7 +95,7 @@ export function registerPlanningRuntimeCommands(registry: CommandRegistry): void
|
|
|
95
95
|
const { evaluation } = stateResult.state
|
|
96
96
|
? await persistEvaluatedNextQuestion(projectPlanningService, projectId, stateResult.state, initialEvaluation)
|
|
97
97
|
: { evaluation: initialEvaluation };
|
|
98
|
-
|
|
98
|
+
openProjectPlanningModal();
|
|
99
99
|
ctx.print(
|
|
100
100
|
`Project planning: ${evaluation.readiness}\n` +
|
|
101
101
|
`Project: ${status.projectId}\n` +
|
|
@@ -116,8 +116,8 @@ export function registerPlanningRuntimeCommands(registry: CommandRegistry): void
|
|
|
116
116
|
}
|
|
117
117
|
|
|
118
118
|
if (args[0] === 'panel') {
|
|
119
|
-
|
|
120
|
-
ctx.print('Opened project planning
|
|
119
|
+
openProjectPlanningModal();
|
|
120
|
+
ctx.print('Opened project planning.');
|
|
121
121
|
return;
|
|
122
122
|
}
|
|
123
123
|
|
|
@@ -144,7 +144,7 @@ export function registerPlanningRuntimeCommands(registry: CommandRegistry): void
|
|
|
144
144
|
},
|
|
145
145
|
});
|
|
146
146
|
const evaluation = await projectPlanningService.evaluate({ projectId });
|
|
147
|
-
|
|
147
|
+
openProjectPlanningModal();
|
|
148
148
|
ctx.print(`Project planning approved. Readiness: ${evaluation.readiness}. State: ${result.state?.id ?? 'current'}.`);
|
|
149
149
|
return;
|
|
150
150
|
}
|
|
@@ -255,7 +255,7 @@ export function registerPlanningRuntimeCommands(registry: CommandRegistry): void
|
|
|
255
255
|
}
|
|
256
256
|
return;
|
|
257
257
|
}
|
|
258
|
-
|
|
258
|
+
openProjectPlanningModal();
|
|
259
259
|
ctx.print(
|
|
260
260
|
`Recorded answer to: ${answerResult.question?.prompt ?? 'question'}\n` +
|
|
261
261
|
`Readiness: ${answerResult.evaluation.readiness}\n` +
|
|
@@ -307,7 +307,7 @@ export function registerPlanningRuntimeCommands(registry: CommandRegistry): void
|
|
|
307
307
|
? await persistEvaluatedNextQuestion(projectPlanningService, projectId, result.state, initialEvaluation)
|
|
308
308
|
: { state: result.state, evaluation: initialEvaluation };
|
|
309
309
|
sessionLineageTracker.setOriginalTask(taskDescription.slice(0, 200));
|
|
310
|
-
|
|
310
|
+
openProjectPlanningModal();
|
|
311
311
|
|
|
312
312
|
ctx.print(
|
|
313
313
|
`Project planning seeded: "${state?.goal ?? taskDescription}"\n` +
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { mkdirSync, readFileSync, rmSync, writeFileSync } from 'node:fs';
|
|
2
2
|
import { dirname, resolve } from 'node:path';
|
|
3
3
|
import type { CommandRegistry } from '../command-registry.ts';
|
|
4
|
-
import {
|
|
4
|
+
import { requireShellPaths } from './runtime-services.ts';
|
|
5
5
|
import {
|
|
6
6
|
getSandboxPreset,
|
|
7
7
|
inspectSandboxBundle,
|
|
@@ -98,7 +98,7 @@ export function registerPlatformSandboxRuntimeCommands(registry: CommandRegistry
|
|
|
98
98
|
const shellPaths = requireShellPaths(ctx);
|
|
99
99
|
const sub = args[0] ?? 'open';
|
|
100
100
|
if (sub === 'open' || sub === 'panel') {
|
|
101
|
-
ctx.openModal?.('sandbox-modal'); // sandbox
|
|
101
|
+
ctx.openModal?.('sandbox-modal'); // sandbox view -> config modal
|
|
102
102
|
return;
|
|
103
103
|
}
|
|
104
104
|
if (sub === 'review') {
|
|
@@ -147,7 +147,7 @@ export function registerPlatformServicesRuntimeCommands(registry: CommandRegistr
|
|
|
147
147
|
` tasks: ${review.tasks}`,
|
|
148
148
|
` pending approvals: ${review.pendingApprovals}`,
|
|
149
149
|
` remote contracts: ${review.remoteContracts}`,
|
|
150
|
-
` registered
|
|
150
|
+
` registered views: ${review.panels}`,
|
|
151
151
|
' api families:',
|
|
152
152
|
...review.apiFamilies.map((family) => ` - ${family}`),
|
|
153
153
|
' routes:',
|
|
@@ -289,7 +289,7 @@ async function handleStatus(_args: string[], context: CommandContext): Promise<v
|
|
|
289
289
|
export function renderPolicyUsage(): string {
|
|
290
290
|
return [
|
|
291
291
|
'Usage: /policy <subcommand>',
|
|
292
|
-
' /policy — open the policy/governance
|
|
292
|
+
' /policy — open the policy/governance modal',
|
|
293
293
|
' load <bundle-id> [rule-count] — Load a candidate bundle',
|
|
294
294
|
' simulate [mode] — Run simulation (silent|warn|enforce)',
|
|
295
295
|
' diff — Show rule diff (current vs candidate)',
|
|
@@ -302,7 +302,7 @@ export function renderPolicyUsage(): string {
|
|
|
302
302
|
}
|
|
303
303
|
|
|
304
304
|
// W6 command-path parity: the policy modal dropped its 'r' (record a
|
|
305
|
-
// divergence-dashboard trend sample) action because the
|
|
305
|
+
// divergence-dashboard trend sample) action because the old view called
|
|
306
306
|
// this._state.recordTrendEntry() directly and /policy had no equivalent verb.
|
|
307
307
|
// This exposes it as a thin wrapper: recordTrendEntry() forwards to the attached
|
|
308
308
|
// DivergencePanel, so it only captures a sample while a simulation dashboard is
|
|
@@ -4,12 +4,12 @@ import { dispatchPolicyCommand } from './policy-dispatch.ts';
|
|
|
4
4
|
export const policyCommand: SlashCommand = {
|
|
5
5
|
name: 'policy',
|
|
6
6
|
aliases: ['pol'],
|
|
7
|
-
description: 'Open the policy
|
|
7
|
+
description: 'Open the policy modal or manage versioned policy bundles (load, simulate, diff, promote, rollback)',
|
|
8
8
|
usage: '<subcommand> [args]',
|
|
9
9
|
argsHint: 'load|simulate|diff|lint|preflight|promote|rollback|status',
|
|
10
10
|
handler: async (args: string[], context: CommandContext): Promise<void> => {
|
|
11
|
-
if (args.length === 0 && context.
|
|
12
|
-
context.
|
|
11
|
+
if (args.length === 0 && context.openPolicyView) {
|
|
12
|
+
context.openPolicyView();
|
|
13
13
|
return;
|
|
14
14
|
}
|
|
15
15
|
await dispatchPolicyCommand(args, context);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* /provider command handler.
|
|
3
3
|
*
|
|
4
|
-
* Implements the Provider Optimizer
|
|
4
|
+
* Implements the Provider Optimizer commands:
|
|
5
5
|
*
|
|
6
6
|
* /provider optimizer on|off , Enable or disable the provider optimizer
|
|
7
7
|
* /provider route auto|manual , Set optimizer routing mode
|
|
@@ -48,7 +48,7 @@ export function registerRemoteRuntimeCommands(registry: CommandRegistry): void {
|
|
|
48
48
|
async handler(args, ctx) {
|
|
49
49
|
if (args.length === 0) {
|
|
50
50
|
if (ctx.openModal) {
|
|
51
|
-
ctx.openModal('remote-modal'); // remote
|
|
51
|
+
ctx.openModal('remote-modal'); // remote view -> config modal
|
|
52
52
|
return;
|
|
53
53
|
}
|
|
54
54
|
ctx.print('Remote surface is not available in this runtime.');
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
import type { CommandContext, CommandRegistry } from '../command-registry.ts';
|
|
2
|
-
import type {
|
|
3
|
-
import
|
|
4
|
-
import { hunkPatchText, buildHunkRevertReceiptBlock } from '../../panels/diff-review-model.ts';
|
|
5
|
-
import { requirePanelManager } from './runtime-services.ts';
|
|
2
|
+
import type { ReviewHunk } from '../../views/diff-review-model.ts';
|
|
3
|
+
import { hunkPatchText, buildHunkRevertReceiptBlock } from '../../views/diff-review-model.ts';
|
|
6
4
|
|
|
7
5
|
/** checkpoints.revertHunkPreview result, the read-only clean-or-conflict check plus a confirm token. */
|
|
8
6
|
interface RevertHunkPreview {
|
|
@@ -50,17 +48,17 @@ function errorText(err: unknown): string {
|
|
|
50
48
|
}
|
|
51
49
|
|
|
52
50
|
/**
|
|
53
|
-
*
|
|
54
|
-
*
|
|
55
|
-
*
|
|
56
|
-
*
|
|
57
|
-
*
|
|
51
|
+
* Revert one hunk in the working tree: checkpoints.revertHunkPreview (a
|
|
52
|
+
* read-only clean check that returns a token), a confirm dialog naming exactly
|
|
53
|
+
* what reverts, then checkpoints.revertHunk with that token. A hunk that no
|
|
54
|
+
* longer applies is an honest "changed since captured", never a partial write;
|
|
55
|
+
* a success adds the [Revert] receipt to the transcript. Resolves to the line
|
|
56
|
+
* the Changes modal shows.
|
|
58
57
|
*/
|
|
59
|
-
async function
|
|
58
|
+
export async function revertReviewHunk(ctx: CommandContext, hunk: ReviewHunk): Promise<string> {
|
|
60
59
|
const gateway = ctx.workspace.gatewayMethods;
|
|
61
60
|
if (!gateway || !ctx.workspace.workspaceCheckpointManager) {
|
|
62
|
-
|
|
63
|
-
return;
|
|
61
|
+
return 'Hunk revert unavailable: the checkpoint/gateway surface is not wired in this session.';
|
|
64
62
|
}
|
|
65
63
|
const path = hunk.filePath;
|
|
66
64
|
const hunkText = hunkPatchText(hunk);
|
|
@@ -70,103 +68,50 @@ async function revertHunkFlow(ctx: CommandContext, panel: DiffReviewPanel, hunk:
|
|
|
70
68
|
try {
|
|
71
69
|
preview = (await gateway.invoke('checkpoints.revertHunkPreview', { ...INVOKE_CONTEXT, body: { path, hunk: hunkText } })) as RevertHunkPreview;
|
|
72
70
|
} catch (err) {
|
|
73
|
-
|
|
74
|
-
return;
|
|
71
|
+
return `Could not check this hunk: ${errorText(err)}`;
|
|
75
72
|
}
|
|
76
|
-
|
|
77
73
|
if (!preview.applies || !preview.token) {
|
|
78
|
-
|
|
79
|
-
await panel.refresh();
|
|
80
|
-
return;
|
|
74
|
+
return `Cannot revert: ${preview.conflict ?? 'this hunk no longer applies'}. The file changed since this diff was captured; the view has been reloaded. Nothing was changed.`;
|
|
81
75
|
}
|
|
82
76
|
|
|
83
|
-
const {
|
|
84
|
-
const
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
}
|
|
89
|
-
pm.activateById('diff');
|
|
90
|
-
if (!pm.isVisible()) pm.show();
|
|
91
|
-
ctx.focusPanels?.();
|
|
92
|
-
const diffPanel = diff as InstanceType<typeof DiffPanel>;
|
|
93
|
-
diffPanel.showDiff(path, hunkText);
|
|
77
|
+
const summary = `Restores ${preview.removedLinesRestored} deleted and drops ${preview.addedLinesRemoved} added line(s) in ${path} (${hunk.header}).`;
|
|
78
|
+
const confirmed = ctx.confirm
|
|
79
|
+
? await ctx.confirm({ title: 'Revert this hunk?', body: `${summary}\nThe receipt in the transcript says how to undo it.`, confirmLabel: 'Revert', tone: 'danger' })
|
|
80
|
+
: false;
|
|
81
|
+
if (!confirmed) return 'Revert cancelled: nothing changed.';
|
|
94
82
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
if (isConflict(err)) {
|
|
108
|
-
panel.note(`Not reverted: ${errorText(err)}. The file changed since captured; nothing was written. Reloading /review…`);
|
|
109
|
-
await panel.refresh();
|
|
110
|
-
} else {
|
|
111
|
-
panel.note(`Revert failed: ${errorText(err)}`);
|
|
112
|
-
}
|
|
113
|
-
return;
|
|
114
|
-
}
|
|
115
|
-
pm.close('diff');
|
|
116
|
-
ctx.focusPanels?.();
|
|
117
|
-
const receipt = result.receipt;
|
|
118
|
-
if (!receipt) {
|
|
119
|
-
panel.note(`Revert not applied: ${result.refusal?.reason ?? 'confirmation was refused.'}`);
|
|
120
|
-
return;
|
|
121
|
-
}
|
|
122
|
-
ctx.session.conversationManager.addTypedSystemMessage(buildHunkRevertReceiptBlock(receipt), 'operational');
|
|
123
|
-
await panel.refresh();
|
|
124
|
-
},
|
|
125
|
-
onCancel: () => {
|
|
126
|
-
pm.close('diff');
|
|
127
|
-
ctx.focusPanels?.();
|
|
128
|
-
panel.note('Revert cancelled: nothing changed.');
|
|
129
|
-
},
|
|
130
|
-
});
|
|
131
|
-
ctx.renderRequest();
|
|
83
|
+
let result: RevertHunkResult;
|
|
84
|
+
try {
|
|
85
|
+
result = (await gateway.invoke('checkpoints.revertHunk', { ...INVOKE_CONTEXT, body: { path, hunk: hunkText, confirmToken: preview.token, sessionId } })) as RevertHunkResult;
|
|
86
|
+
} catch (err) {
|
|
87
|
+
return isConflict(err)
|
|
88
|
+
? `Not reverted: ${errorText(err)}. The file changed since captured; nothing was written.`
|
|
89
|
+
: `Revert failed: ${errorText(err)}`;
|
|
90
|
+
}
|
|
91
|
+
const receipt = result.receipt;
|
|
92
|
+
if (!receipt) return `Revert not applied: ${result.refusal?.reason ?? 'confirmation was refused.'}`;
|
|
93
|
+
ctx.session.conversationManager.addTypedSystemMessage(buildHunkRevertReceiptBlock(receipt), 'operational');
|
|
94
|
+
return `Reverted the hunk in ${receipt.path}; the receipt is in the transcript.`;
|
|
132
95
|
}
|
|
133
96
|
|
|
134
97
|
/**
|
|
135
|
-
* `/review`,
|
|
136
|
-
* changes (the files the SDK SessionChangeTracker recorded) as a
|
|
137
|
-
* tree diff, hunk
|
|
138
|
-
*
|
|
139
|
-
*
|
|
140
|
-
* rejected: `r` reverse-applies exactly that one hunk via checkpoints.revertHunk
|
|
141
|
-
* (preview + confirm), a working-tree change recorded as a [Revert] receipt.
|
|
98
|
+
* `/review`, the comment-on-hunk review loop, in the Changes modal: this
|
|
99
|
+
* session's file changes (the files the SDK SessionChangeTracker recorded) as a
|
|
100
|
+
* working-tree diff, hunk by hunk. c attaches a comment to a hunk and Enter
|
|
101
|
+
* sends the attached comments to the model as one steering message with each
|
|
102
|
+
* hunk's file, line range and patch excerpt; x reverts a hunk (asks first).
|
|
142
103
|
*/
|
|
143
104
|
export function registerReviewRuntimeCommands(registry: CommandRegistry): void {
|
|
144
105
|
registry.register({
|
|
145
106
|
name: 'review',
|
|
146
107
|
aliases: [],
|
|
147
108
|
description: 'Review this session\'s diff hunk-by-hunk, steer comments, or revert a hunk',
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
try {
|
|
153
|
-
panel = pm.open('review');
|
|
154
|
-
} catch {
|
|
155
|
-
ctx.print('Could not open the review panel.');
|
|
156
|
-
return;
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
pm.activateById('review');
|
|
160
|
-
if (!pm.isVisible()) pm.show();
|
|
161
|
-
|
|
162
|
-
const reviewPanel = panel as DiffReviewPanel;
|
|
163
|
-
if (ctx.submitInput) {
|
|
164
|
-
reviewPanel.setSubmit((text) => ctx.submitInput!(text));
|
|
109
|
+
handler(_args, ctx) {
|
|
110
|
+
if (!ctx.openChanges) {
|
|
111
|
+
ctx.print('The Changes view is not available in this session.');
|
|
112
|
+
return;
|
|
165
113
|
}
|
|
166
|
-
|
|
167
|
-
await reviewPanel.loadSessionReview();
|
|
168
|
-
ctx.focusPanels?.();
|
|
169
|
-
ctx.renderRequest();
|
|
114
|
+
ctx.openChanges({ source: 'session' });
|
|
170
115
|
},
|
|
171
116
|
});
|
|
172
117
|
}
|