@pellux/goodvibes-agent 0.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/.goodvibes/GOODVIBES.md +35 -0
- package/.goodvibes/agents/reviewer.md +48 -0
- package/.goodvibes/skills/add-provider/SKILL.md +199 -0
- package/CHANGELOG.md +25 -0
- package/README.md +74 -0
- package/bin/goodvibes-agent.ts +2 -0
- package/docs/README.md +23 -0
- package/docs/deployment-and-services.md +57 -0
- package/docs/getting-started.md +53 -0
- package/docs/release-and-publishing.md +46 -0
- package/package.json +134 -0
- package/scripts/check-bun.sh +20 -0
- package/src/audio/player.ts +156 -0
- package/src/audio/spoken-turn-controller.ts +203 -0
- package/src/audio/spoken-turn-model-routing.ts +117 -0
- package/src/audio/spoken-turn-wiring.ts +44 -0
- package/src/audio/text-chunker.ts +110 -0
- package/src/cli/bundle-command.ts +227 -0
- package/src/cli/completion.ts +90 -0
- package/src/cli/config-overrides.ts +159 -0
- package/src/cli/endpoints.ts +63 -0
- package/src/cli/entrypoint.ts +172 -0
- package/src/cli/help.ts +299 -0
- package/src/cli/index.ts +11 -0
- package/src/cli/management-commands.ts +426 -0
- package/src/cli/management.ts +744 -0
- package/src/cli/network-posture.ts +46 -0
- package/src/cli/package-verification.ts +123 -0
- package/src/cli/parser.ts +369 -0
- package/src/cli/provider-auth-routes.ts +22 -0
- package/src/cli/provider-classification.ts +107 -0
- package/src/cli/redaction.ts +105 -0
- package/src/cli/service-command.ts +26 -0
- package/src/cli/service-posture.ts +482 -0
- package/src/cli/status.ts +383 -0
- package/src/cli/surface-command.ts +247 -0
- package/src/cli/tui-startup.ts +32 -0
- package/src/cli/types.ts +69 -0
- package/src/cli-flags.ts +21 -0
- package/src/config/goodvibes-home-audit.ts +465 -0
- package/src/config/index.ts +57 -0
- package/src/config/provider-model.ts +23 -0
- package/src/config/secret-config.ts +119 -0
- package/src/config/secrets.ts +71 -0
- package/src/config/surface.ts +1 -0
- package/src/core/composer-state.ts +61 -0
- package/src/core/conversation-rendering.ts +359 -0
- package/src/core/conversation.ts +551 -0
- package/src/core/history.ts +45 -0
- package/src/core/orchestrator.ts +7 -0
- package/src/core/system-message-router.ts +171 -0
- package/src/daemon/cli.ts +55 -0
- package/src/daemon/safe-serve.ts +61 -0
- package/src/input/agent-workspace.ts +428 -0
- package/src/input/autocomplete.ts +96 -0
- package/src/input/bookmark-modal.ts +115 -0
- package/src/input/command-args-hint.ts +36 -0
- package/src/input/command-registry.ts +329 -0
- package/src/input/commands/agent-externalized-tui.ts +73 -0
- package/src/input/commands/agent-workspace-runtime.ts +17 -0
- package/src/input/commands/branch-runtime.ts +72 -0
- package/src/input/commands/cloudflare-runtime.ts +370 -0
- package/src/input/commands/config.ts +18 -0
- package/src/input/commands/control-room-runtime.ts +255 -0
- package/src/input/commands/conversation-runtime.ts +207 -0
- package/src/input/commands/discovery-runtime.ts +52 -0
- package/src/input/commands/eval.ts +204 -0
- package/src/input/commands/experience-runtime.ts +278 -0
- package/src/input/commands/guidance-runtime.ts +106 -0
- package/src/input/commands/health-runtime.ts +434 -0
- package/src/input/commands/hooks-runtime.ts +148 -0
- package/src/input/commands/incident-runtime.ts +95 -0
- package/src/input/commands/integration-runtime.ts +394 -0
- package/src/input/commands/intelligence-runtime.ts +223 -0
- package/src/input/commands/knowledge.ts +531 -0
- package/src/input/commands/local-auth-runtime.ts +105 -0
- package/src/input/commands/local-provider-runtime.ts +170 -0
- package/src/input/commands/local-runtime.ts +392 -0
- package/src/input/commands/local-setup-review.ts +199 -0
- package/src/input/commands/local-setup-transfer.ts +135 -0
- package/src/input/commands/local-setup.ts +282 -0
- package/src/input/commands/managed-runtime.ts +209 -0
- package/src/input/commands/marketplace-runtime.ts +290 -0
- package/src/input/commands/mcp-runtime.ts +432 -0
- package/src/input/commands/memory-product-runtime.ts +111 -0
- package/src/input/commands/memory.ts +151 -0
- package/src/input/commands/notify-runtime.ts +83 -0
- package/src/input/commands/onboarding-runtime.ts +14 -0
- package/src/input/commands/operator-panel-runtime.ts +146 -0
- package/src/input/commands/operator-runtime.ts +392 -0
- package/src/input/commands/planning-runtime.ts +205 -0
- package/src/input/commands/platform-access-runtime.ts +422 -0
- package/src/input/commands/platform-services-runtime.ts +246 -0
- package/src/input/commands/policy-dispatch.ts +339 -0
- package/src/input/commands/policy.ts +17 -0
- package/src/input/commands/product-runtime.ts +351 -0
- package/src/input/commands/profile-sync-runtime.ts +99 -0
- package/src/input/commands/provider-accounts-runtime.ts +113 -0
- package/src/input/commands/provider.ts +363 -0
- package/src/input/commands/qrcode-runtime.ts +20 -0
- package/src/input/commands/quit-shared.ts +162 -0
- package/src/input/commands/recall-bundle.ts +132 -0
- package/src/input/commands/recall-capture.ts +152 -0
- package/src/input/commands/recall-query.ts +229 -0
- package/src/input/commands/recall-review.ts +98 -0
- package/src/input/commands/recall-shared.ts +22 -0
- package/src/input/commands/remote-runtime-pool.ts +106 -0
- package/src/input/commands/remote-runtime-setup.ts +199 -0
- package/src/input/commands/remote-runtime.ts +431 -0
- package/src/input/commands/replay-runtime.ts +18 -0
- package/src/input/commands/runtime-services.ts +291 -0
- package/src/input/commands/schedule-runtime.ts +91 -0
- package/src/input/commands/services-runtime.ts +209 -0
- package/src/input/commands/session-content.ts +408 -0
- package/src/input/commands/session-workflow.ts +464 -0
- package/src/input/commands/session.ts +375 -0
- package/src/input/commands/settings-sync-runtime.ts +174 -0
- package/src/input/commands/share-runtime.ts +119 -0
- package/src/input/commands/shell-core.ts +307 -0
- package/src/input/commands/skills-runtime.ts +221 -0
- package/src/input/commands/subscription-runtime.ts +434 -0
- package/src/input/commands/tasks-runtime.ts +230 -0
- package/src/input/commands/teamwork-runtime.ts +339 -0
- package/src/input/commands/teleport-runtime.ts +57 -0
- package/src/input/commands/tts-runtime.ts +29 -0
- package/src/input/commands/work-plan-runtime.ts +169 -0
- package/src/input/commands.ts +131 -0
- package/src/input/feed-context-factory.ts +254 -0
- package/src/input/file-picker.ts +192 -0
- package/src/input/handler-command-route.ts +180 -0
- package/src/input/handler-content-actions.ts +497 -0
- package/src/input/handler-feed-routes.ts +648 -0
- package/src/input/handler-feed.ts +452 -0
- package/src/input/handler-interactions.ts +281 -0
- package/src/input/handler-modal-routes.ts +418 -0
- package/src/input/handler-modal-stack.ts +263 -0
- package/src/input/handler-modal-token-routes.ts +329 -0
- package/src/input/handler-onboarding-cloudflare.ts +391 -0
- package/src/input/handler-onboarding.ts +620 -0
- package/src/input/handler-picker-routes.ts +472 -0
- package/src/input/handler-prompt-buffer.ts +320 -0
- package/src/input/handler-shortcuts.ts +213 -0
- package/src/input/handler-ui-state.ts +372 -0
- package/src/input/handler.ts +729 -0
- package/src/input/input-history.ts +297 -0
- package/src/input/keybindings.ts +292 -0
- package/src/input/mcp-workspace.ts +554 -0
- package/src/input/model-picker-provider-filter.ts +28 -0
- package/src/input/model-picker-types.ts +137 -0
- package/src/input/model-picker.ts +797 -0
- package/src/input/onboarding/handler-onboarding-routes.ts +125 -0
- package/src/input/onboarding/onboarding-runtime-status.ts +87 -0
- package/src/input/onboarding/onboarding-wizard-apply.ts +277 -0
- package/src/input/onboarding/onboarding-wizard-cloudflare-step.ts +494 -0
- package/src/input/onboarding/onboarding-wizard-cloudflare.ts +204 -0
- package/src/input/onboarding/onboarding-wizard-constants.ts +158 -0
- package/src/input/onboarding/onboarding-wizard-external-surface-extra-specs.ts +130 -0
- package/src/input/onboarding/onboarding-wizard-external-surfaces.ts +762 -0
- package/src/input/onboarding/onboarding-wizard-helpers.ts +167 -0
- package/src/input/onboarding/onboarding-wizard-rules.ts +256 -0
- package/src/input/onboarding/onboarding-wizard-state.ts +365 -0
- package/src/input/onboarding/onboarding-wizard-steps.ts +798 -0
- package/src/input/onboarding/onboarding-wizard-types.ts +195 -0
- package/src/input/onboarding/onboarding-wizard.ts +711 -0
- package/src/input/panel-integration-actions.ts +78 -0
- package/src/input/profile-picker-modal.ts +222 -0
- package/src/input/search.ts +100 -0
- package/src/input/selection-modal.ts +163 -0
- package/src/input/selection.ts +135 -0
- package/src/input/session-picker-modal.ts +136 -0
- package/src/input/settings-modal-behavior.ts +37 -0
- package/src/input/settings-modal-secrets.ts +41 -0
- package/src/input/settings-modal-subscriptions.ts +95 -0
- package/src/input/settings-modal-types.ts +91 -0
- package/src/input/settings-modal.ts +793 -0
- package/src/input/submission-intent.ts +17 -0
- package/src/input/submission-router.ts +59 -0
- package/src/input/tts-settings-actions.ts +100 -0
- package/src/main.ts +792 -0
- package/src/mcp/runtime-reload.ts +81 -0
- package/src/panels/agent-inspector-panel.ts +521 -0
- package/src/panels/agent-inspector-shared.ts +94 -0
- package/src/panels/agent-logs-panel.ts +559 -0
- package/src/panels/agent-logs-shared.ts +129 -0
- package/src/panels/approval-panel.ts +150 -0
- package/src/panels/automation-control-panel.ts +212 -0
- package/src/panels/base-panel.ts +254 -0
- package/src/panels/builtin/agent.ts +117 -0
- package/src/panels/builtin/development.ts +31 -0
- package/src/panels/builtin/knowledge.ts +26 -0
- package/src/panels/builtin/operations.ts +349 -0
- package/src/panels/builtin/session.ts +129 -0
- package/src/panels/builtin/shared.ts +274 -0
- package/src/panels/builtin-panels.ts +23 -0
- package/src/panels/cockpit-panel.ts +183 -0
- package/src/panels/communication-panel.ts +153 -0
- package/src/panels/confirm-state.ts +61 -0
- package/src/panels/context-visualizer-panel.ts +204 -0
- package/src/panels/control-plane-panel.ts +211 -0
- package/src/panels/cost-tracker-panel.ts +444 -0
- package/src/panels/debug-panel.ts +432 -0
- package/src/panels/diff-panel.ts +520 -0
- package/src/panels/docs-panel.ts +283 -0
- package/src/panels/eval-panel.ts +399 -0
- package/src/panels/file-explorer-panel.ts +584 -0
- package/src/panels/file-preview-panel.ts +434 -0
- package/src/panels/forensics-panel.ts +364 -0
- package/src/panels/git-panel.ts +638 -0
- package/src/panels/hooks-panel.ts +239 -0
- package/src/panels/incident-review-panel.ts +197 -0
- package/src/panels/index.ts +46 -0
- package/src/panels/intelligence-panel.ts +176 -0
- package/src/panels/knowledge-panel.ts +345 -0
- package/src/panels/local-auth-panel.ts +130 -0
- package/src/panels/marketplace-panel.ts +212 -0
- package/src/panels/memory-panel.ts +225 -0
- package/src/panels/ops-control-panel.ts +150 -0
- package/src/panels/ops-strategy-panel.ts +235 -0
- package/src/panels/orchestration-panel.ts +273 -0
- package/src/panels/panel-list-panel.ts +509 -0
- package/src/panels/panel-manager.ts +570 -0
- package/src/panels/panel-picker.ts +106 -0
- package/src/panels/plan-dashboard-panel.ts +274 -0
- package/src/panels/plugins-panel.ts +178 -0
- package/src/panels/policy-panel.ts +308 -0
- package/src/panels/polish.ts +717 -0
- package/src/panels/project-planning-panel.ts +711 -0
- package/src/panels/provider-account-snapshot.ts +259 -0
- package/src/panels/provider-accounts-panel.ts +218 -0
- package/src/panels/provider-health-domains.ts +215 -0
- package/src/panels/provider-health-panel.ts +727 -0
- package/src/panels/provider-health-tracker.ts +115 -0
- package/src/panels/provider-stats-panel.ts +366 -0
- package/src/panels/qr-panel.ts +182 -0
- package/src/panels/remote-panel.ts +449 -0
- package/src/panels/routes-panel.ts +178 -0
- package/src/panels/sandbox-panel.ts +283 -0
- package/src/panels/schedule-panel.ts +329 -0
- package/src/panels/scrollable-list-panel.ts +491 -0
- package/src/panels/search-focus.ts +32 -0
- package/src/panels/security-panel.ts +295 -0
- package/src/panels/services-panel.ts +231 -0
- package/src/panels/session-browser-panel.ts +400 -0
- package/src/panels/session-maintenance.ts +125 -0
- package/src/panels/settings-sync-panel.ts +120 -0
- package/src/panels/skills-panel.ts +431 -0
- package/src/panels/subscription-panel.ts +263 -0
- package/src/panels/symbol-outline-panel.ts +486 -0
- package/src/panels/system-messages-panel.ts +230 -0
- package/src/panels/tasks-panel.ts +399 -0
- package/src/panels/thinking-panel.ts +304 -0
- package/src/panels/token-budget-panel.ts +475 -0
- package/src/panels/tool-inspector-panel.ts +429 -0
- package/src/panels/types.ts +54 -0
- package/src/panels/watchers-panel.ts +193 -0
- package/src/panels/work-plan-panel.ts +175 -0
- package/src/panels/worktree-panel.ts +182 -0
- package/src/panels/wrfc-panel.ts +609 -0
- package/src/permissions/prompt.ts +165 -0
- package/src/planning/project-planning-coordinator.ts +543 -0
- package/src/plugins/loader.ts +15 -0
- package/src/renderer/agent-detail-modal.ts +331 -0
- package/src/renderer/agent-workspace.ts +238 -0
- package/src/renderer/ansi-sanitize.ts +76 -0
- package/src/renderer/autocomplete-overlay.ts +154 -0
- package/src/renderer/block-actions.ts +76 -0
- package/src/renderer/bookmark-modal.ts +101 -0
- package/src/renderer/bottom-bar.ts +58 -0
- package/src/renderer/buffer.ts +113 -0
- package/src/renderer/code-block.ts +373 -0
- package/src/renderer/compositor.ts +283 -0
- package/src/renderer/context-inspector.ts +219 -0
- package/src/renderer/conversation-layout.ts +67 -0
- package/src/renderer/conversation-overlays.ts +140 -0
- package/src/renderer/conversation-surface.ts +260 -0
- package/src/renderer/diff-view.ts +132 -0
- package/src/renderer/diff.ts +130 -0
- package/src/renderer/file-picker-overlay.ts +101 -0
- package/src/renderer/file-tree.ts +153 -0
- package/src/renderer/fullscreen-primitives.ts +130 -0
- package/src/renderer/fullscreen-workspace.ts +199 -0
- package/src/renderer/git-status.ts +89 -0
- package/src/renderer/help-overlay.ts +267 -0
- package/src/renderer/history-search-overlay.ts +73 -0
- package/src/renderer/layout-engine.ts +97 -0
- package/src/renderer/layout.ts +32 -0
- package/src/renderer/live-tail-modal.ts +156 -0
- package/src/renderer/markdown.ts +635 -0
- package/src/renderer/mcp-workspace.ts +237 -0
- package/src/renderer/modal-factory.ts +467 -0
- package/src/renderer/modal-utils.ts +24 -0
- package/src/renderer/model-picker-overlay.ts +473 -0
- package/src/renderer/model-workspace.ts +488 -0
- package/src/renderer/onboarding/onboarding-wizard.ts +615 -0
- package/src/renderer/overlay-box.ts +146 -0
- package/src/renderer/overlay-viewport.ts +104 -0
- package/src/renderer/panel-composite.ts +158 -0
- package/src/renderer/panel-picker-overlay.ts +202 -0
- package/src/renderer/panel-tab-bar.ts +69 -0
- package/src/renderer/panel-workspace-bar.ts +42 -0
- package/src/renderer/process-indicator.ts +96 -0
- package/src/renderer/process-modal.ts +656 -0
- package/src/renderer/process-summary.ts +67 -0
- package/src/renderer/profile-picker-modal.ts +129 -0
- package/src/renderer/progress.ts +98 -0
- package/src/renderer/qr-renderer.ts +120 -0
- package/src/renderer/search-overlay.ts +54 -0
- package/src/renderer/selection-modal-overlay.ts +214 -0
- package/src/renderer/semantic-diff.ts +369 -0
- package/src/renderer/session-picker-modal.ts +127 -0
- package/src/renderer/settings-modal-helpers.ts +193 -0
- package/src/renderer/settings-modal.ts +537 -0
- package/src/renderer/shell-surface.ts +88 -0
- package/src/renderer/status-glyphs.ts +21 -0
- package/src/renderer/status-token.ts +67 -0
- package/src/renderer/surface-layout.ts +101 -0
- package/src/renderer/syntax-highlighter.ts +542 -0
- package/src/renderer/system-message.ts +83 -0
- package/src/renderer/tab-strip.ts +108 -0
- package/src/renderer/text-layout.ts +31 -0
- package/src/renderer/thinking.ts +17 -0
- package/src/renderer/tool-call.ts +234 -0
- package/src/renderer/ui-factory.ts +524 -0
- package/src/renderer/ui-primitives.ts +96 -0
- package/src/runtime/bootstrap-command-context.ts +278 -0
- package/src/runtime/bootstrap-command-parts.ts +386 -0
- package/src/runtime/bootstrap-core.ts +540 -0
- package/src/runtime/bootstrap-hook-bridge.ts +112 -0
- package/src/runtime/bootstrap-shell.ts +283 -0
- package/src/runtime/bootstrap.ts +575 -0
- package/src/runtime/cloudflare-control-plane.ts +349 -0
- package/src/runtime/context.ts +142 -0
- package/src/runtime/diagnostics/panels/index.ts +24 -0
- package/src/runtime/diagnostics/panels/ops.ts +156 -0
- package/src/runtime/diagnostics/panels/panel-resources.ts +118 -0
- package/src/runtime/diagnostics/panels/policy.ts +177 -0
- package/src/runtime/index.ts +662 -0
- package/src/runtime/onboarding/apply.ts +642 -0
- package/src/runtime/onboarding/derivation.ts +534 -0
- package/src/runtime/onboarding/index.ts +7 -0
- package/src/runtime/onboarding/markers.ts +148 -0
- package/src/runtime/onboarding/snapshot.ts +406 -0
- package/src/runtime/onboarding/state.ts +141 -0
- package/src/runtime/onboarding/types.ts +404 -0
- package/src/runtime/onboarding/verify.ts +171 -0
- package/src/runtime/operator-token-cleanup.ts +27 -0
- package/src/runtime/perf/panel-contracts.ts +32 -0
- package/src/runtime/perf/panel-health-monitor.ts +18 -0
- package/src/runtime/sandbox-public-gaps.ts +358 -0
- package/src/runtime/services.ts +670 -0
- package/src/runtime/store/domains/domain-read-matrix.ts +15 -0
- package/src/runtime/store/domains/index.ts +222 -0
- package/src/runtime/store/domains/panels.ts +117 -0
- package/src/runtime/store/domains/ui-perf.ts +103 -0
- package/src/runtime/store/index.ts +305 -0
- package/src/runtime/store/selectors/index.ts +359 -0
- package/src/runtime/store/state.ts +145 -0
- package/src/runtime/surface-feature-flags.ts +65 -0
- package/src/runtime/terminal-output-guard.ts +228 -0
- package/src/runtime/ui/index.ts +39 -0
- package/src/runtime/ui/model-picker/data-provider.ts +182 -0
- package/src/runtime/ui/model-picker/health-enrichment.ts +228 -0
- package/src/runtime/ui/model-picker/index.ts +59 -0
- package/src/runtime/ui/model-picker/types.ts +149 -0
- package/src/runtime/ui/provider-health/data-provider.ts +244 -0
- package/src/runtime/ui/provider-health/fallback-visualizer.ts +71 -0
- package/src/runtime/ui/provider-health/index.ts +46 -0
- package/src/runtime/ui/provider-health/types.ts +146 -0
- package/src/runtime/ui-events.ts +1 -0
- package/src/runtime/ui-read-model-helpers.ts +1 -0
- package/src/runtime/ui-read-models-observability-maintenance.ts +1 -0
- package/src/runtime/ui-read-models-observability-options.ts +1 -0
- package/src/runtime/ui-read-models-observability-remote.ts +1 -0
- package/src/runtime/ui-read-models-observability-security.ts +1 -0
- package/src/runtime/ui-read-models-observability-system.ts +1 -0
- package/src/runtime/ui-read-models-observability.ts +1 -0
- package/src/runtime/ui-read-models.ts +61 -0
- package/src/runtime/ui-service-queries.ts +1 -0
- package/src/runtime/ui-services.ts +190 -0
- package/src/scripts/process-messages.ts +42 -0
- package/src/shell/blocking-input.ts +98 -0
- package/src/shell/service-settings-sync.ts +273 -0
- package/src/shell/ui-openers.ts +352 -0
- package/src/tools/index.ts +1 -0
- package/src/tools/wrfc-agent-guard.ts +49 -0
- package/src/types/grid.ts +48 -0
- package/src/types/sql-js.d.ts +15 -0
- package/src/utils/clipboard.ts +22 -0
- package/src/utils/splash-lines.ts +46 -0
- package/src/utils/terminal-width.ts +185 -0
- package/src/verification/live-verifier.ts +430 -0
- package/src/verification/verification-ledger.ts +242 -0
- package/src/version.ts +17 -0
- package/src/widget/index.ts +2 -0
- package/src/widget/types.ts +9 -0
- package/src/widget/widget.ts +8 -0
- package/src/work-plans/work-plan-store.ts +374 -0
- package/tsconfig.json +18 -0
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import type { PanelManager } from '../panel-manager.ts';
|
|
2
|
+
import { AgentLogsPanel } from '../agent-logs-panel.ts';
|
|
3
|
+
import { ContextVisualizerPanel } from '../context-visualizer-panel.ts';
|
|
4
|
+
import { ThinkingPanel } from '../thinking-panel.ts';
|
|
5
|
+
import { ToolInspectorPanel } from '../tool-inspector-panel.ts';
|
|
6
|
+
import { WrfcPanel } from '../wrfc-panel.ts';
|
|
7
|
+
import { SchedulePanel } from '../schedule-panel.ts';
|
|
8
|
+
import { ProjectPlanningPanel } from '../project-planning-panel.ts';
|
|
9
|
+
import { WorkPlanPanel } from '../work-plan-panel.ts';
|
|
10
|
+
import type { ResolvedBuiltinPanelDeps } from './shared.ts';
|
|
11
|
+
import { requireAutomationManager, requireUiServices } from './shared.ts';
|
|
12
|
+
|
|
13
|
+
export function registerAgentPanels(manager: PanelManager, deps: ResolvedBuiltinPanelDeps): void {
|
|
14
|
+
manager.registerType({
|
|
15
|
+
id: 'thinking',
|
|
16
|
+
name: 'Thinking',
|
|
17
|
+
icon: 'T',
|
|
18
|
+
category: 'ai',
|
|
19
|
+
description: 'Stream model reasoning tokens in real-time with collapsible blocks per turn',
|
|
20
|
+
preload: true,
|
|
21
|
+
factory: () => new ThinkingPanel(requireUiServices(deps).events.turns),
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
manager.registerType({
|
|
25
|
+
id: 'tools',
|
|
26
|
+
name: 'Tools',
|
|
27
|
+
icon: 'X',
|
|
28
|
+
category: 'ai',
|
|
29
|
+
description: 'Chronological tool call inspector with expandable args/results and filtering',
|
|
30
|
+
preload: true,
|
|
31
|
+
factory: () => {
|
|
32
|
+
const ui = requireUiServices(deps);
|
|
33
|
+
return new ToolInspectorPanel(ui.events.tools, ui.events.turns);
|
|
34
|
+
},
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
manager.registerType({
|
|
38
|
+
id: 'context',
|
|
39
|
+
name: 'Context',
|
|
40
|
+
icon: 'C',
|
|
41
|
+
category: 'ai',
|
|
42
|
+
description: 'Context window visualizer: stacked bar showing token usage per section',
|
|
43
|
+
preload: true,
|
|
44
|
+
factory: () => new ContextVisualizerPanel(
|
|
45
|
+
requireUiServices(deps).events.turns,
|
|
46
|
+
deps.sessionMemoryStore,
|
|
47
|
+
deps.configManager,
|
|
48
|
+
deps.getOrchestratorUsage,
|
|
49
|
+
deps.contextWindow,
|
|
50
|
+
requireUiServices(deps).readModels.session,
|
|
51
|
+
),
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
manager.registerType({
|
|
55
|
+
id: 'agent-logs',
|
|
56
|
+
name: 'Agents',
|
|
57
|
+
icon: 'A',
|
|
58
|
+
category: 'agent',
|
|
59
|
+
description: 'View-only stream for explicit delegated build/review session records',
|
|
60
|
+
preload: true,
|
|
61
|
+
factory: () => {
|
|
62
|
+
const ui = requireUiServices(deps);
|
|
63
|
+
return new AgentLogsPanel(ui.events.agents, {
|
|
64
|
+
agentManager: ui.agents.agentManager,
|
|
65
|
+
workingDirectory: ui.environment.workingDirectory,
|
|
66
|
+
});
|
|
67
|
+
},
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
manager.registerType({
|
|
71
|
+
id: 'wrfc',
|
|
72
|
+
name: 'WRFC',
|
|
73
|
+
icon: 'W',
|
|
74
|
+
category: 'agent',
|
|
75
|
+
description: 'WRFC chain view: write, review, fix, and confirm cycle status',
|
|
76
|
+
preload: true,
|
|
77
|
+
factory: () => {
|
|
78
|
+
const ui = requireUiServices(deps);
|
|
79
|
+
return new WrfcPanel(ui.events.workflows, { controller: ui.agents.wrfcController });
|
|
80
|
+
},
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
manager.registerType({
|
|
84
|
+
id: 'work-plan',
|
|
85
|
+
name: 'Work Plan',
|
|
86
|
+
icon: 'L',
|
|
87
|
+
category: 'agent',
|
|
88
|
+
description: 'Persistent workspace checklist for multi-step work and cross-session task tracking',
|
|
89
|
+
preload: true,
|
|
90
|
+
factory: () => new WorkPlanPanel(deps.workPlanStore),
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
manager.registerType({
|
|
94
|
+
id: 'project-planning',
|
|
95
|
+
name: 'Planning',
|
|
96
|
+
icon: 'P',
|
|
97
|
+
category: 'agent',
|
|
98
|
+
description: 'Passive project planning artifacts: readiness, questions, decisions, language, task graph, and agent handoff metadata',
|
|
99
|
+
preload: true,
|
|
100
|
+
factory: () => new ProjectPlanningPanel({
|
|
101
|
+
service: deps.projectPlanningService,
|
|
102
|
+
projectId: deps.projectPlanningProjectId,
|
|
103
|
+
requestRender: deps.requestRender,
|
|
104
|
+
submitAnswer: deps.submitPlanningAnswer,
|
|
105
|
+
dismissPlanning: deps.dismissPlanning,
|
|
106
|
+
}),
|
|
107
|
+
});
|
|
108
|
+
|
|
109
|
+
manager.registerType({
|
|
110
|
+
id: 'schedule',
|
|
111
|
+
name: 'Schedule',
|
|
112
|
+
icon: 'Z',
|
|
113
|
+
category: 'agent',
|
|
114
|
+
description: 'Read-only schedule posture from the external daemon; local Agent schedule mutation is blocked',
|
|
115
|
+
factory: () => new SchedulePanel(requireAutomationManager(deps)),
|
|
116
|
+
});
|
|
117
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { PanelManager } from '../panel-manager.ts';
|
|
2
|
+
import { PlanDashboardPanel } from '../plan-dashboard-panel.ts';
|
|
3
|
+
import { CostTrackerPanel } from '../cost-tracker-panel.ts';
|
|
4
|
+
import type { ResolvedBuiltinPanelDeps } from './shared.ts';
|
|
5
|
+
import { requireUiServices } from './shared.ts';
|
|
6
|
+
|
|
7
|
+
export function registerDevelopmentPanels(manager: PanelManager, deps: ResolvedBuiltinPanelDeps): void {
|
|
8
|
+
manager.registerType({
|
|
9
|
+
id: 'plan',
|
|
10
|
+
name: 'Plan',
|
|
11
|
+
icon: 'P',
|
|
12
|
+
category: 'agent',
|
|
13
|
+
description: 'Active execution plan with phase progress and item status',
|
|
14
|
+
factory: () => new PlanDashboardPanel(deps.planManager),
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
if (deps.getOrchestratorUsage) {
|
|
18
|
+
const { getOrchestratorUsage, budgetThreshold } = deps;
|
|
19
|
+
manager.registerType({
|
|
20
|
+
id: 'cost',
|
|
21
|
+
name: 'Cost',
|
|
22
|
+
icon: '$',
|
|
23
|
+
category: 'monitoring',
|
|
24
|
+
description: 'Estimated costs per session, agent, and plan with budget alerts',
|
|
25
|
+
factory: () => {
|
|
26
|
+
const ui = requireUiServices(deps);
|
|
27
|
+
return new CostTrackerPanel(ui.events.turns, ui.events.agents, getOrchestratorUsage, { budgetThreshold });
|
|
28
|
+
},
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { PanelManager } from '../panel-manager.ts';
|
|
2
|
+
import { MemoryPanel } from '../memory-panel.ts';
|
|
3
|
+
import { KnowledgePanel } from '../knowledge-panel.ts';
|
|
4
|
+
import type { ResolvedBuiltinPanelDeps } from './shared.ts';
|
|
5
|
+
|
|
6
|
+
export function registerKnowledgePanels(manager: PanelManager, deps: ResolvedBuiltinPanelDeps): void {
|
|
7
|
+
if (!deps.memoryRegistry) return;
|
|
8
|
+
|
|
9
|
+
const { memoryRegistry } = deps;
|
|
10
|
+
manager.registerType({
|
|
11
|
+
id: 'knowledge',
|
|
12
|
+
name: 'Knowledge',
|
|
13
|
+
icon: 'K',
|
|
14
|
+
category: 'agent',
|
|
15
|
+
description: 'Structured project knowledge: risks, runbooks, architecture notes, incidents, and durable facts',
|
|
16
|
+
factory: () => new KnowledgePanel(memoryRegistry),
|
|
17
|
+
});
|
|
18
|
+
manager.registerType({
|
|
19
|
+
id: 'memory',
|
|
20
|
+
name: 'Memory',
|
|
21
|
+
icon: 'M',
|
|
22
|
+
category: 'agent',
|
|
23
|
+
description: 'Project memory: decisions, constraints, incidents, and patterns with provenance links',
|
|
24
|
+
factory: () => new MemoryPanel(memoryRegistry),
|
|
25
|
+
});
|
|
26
|
+
}
|
|
@@ -0,0 +1,349 @@
|
|
|
1
|
+
import type { PanelManager } from '../panel-manager.ts';
|
|
2
|
+
import { CockpitPanel } from '../cockpit-panel.ts';
|
|
3
|
+
import { ApprovalPanel } from '../approval-panel.ts';
|
|
4
|
+
import { PluginsPanel } from '../plugins-panel.ts';
|
|
5
|
+
import { SkillsPanel } from '../skills-panel.ts';
|
|
6
|
+
import { ServicesPanel } from '../services-panel.ts';
|
|
7
|
+
import { AutomationControlPanel } from '../automation-control-panel.ts';
|
|
8
|
+
import { RoutesPanel } from '../routes-panel.ts';
|
|
9
|
+
import { WatchersPanel } from '../watchers-panel.ts';
|
|
10
|
+
import { ControlPlanePanel } from '../control-plane-panel.ts';
|
|
11
|
+
import { SubscriptionPanel } from '../subscription-panel.ts';
|
|
12
|
+
import { LocalAuthPanel } from '../local-auth-panel.ts';
|
|
13
|
+
import { ProviderAccountsPanel } from '../provider-accounts-panel.ts';
|
|
14
|
+
import { SettingsSyncPanel } from '../settings-sync-panel.ts';
|
|
15
|
+
import { HooksPanel } from '../hooks-panel.ts';
|
|
16
|
+
import { SecurityPanel } from '../security-panel.ts';
|
|
17
|
+
import { MarketplacePanel } from '../marketplace-panel.ts';
|
|
18
|
+
import { TasksPanel } from '../tasks-panel.ts';
|
|
19
|
+
import { OrchestrationPanel } from '../orchestration-panel.ts';
|
|
20
|
+
import { OpsStrategyPanel } from '../ops-strategy-panel.ts';
|
|
21
|
+
import { CommunicationPanel } from '../communication-panel.ts';
|
|
22
|
+
import { RemotePanel } from '../remote-panel.ts';
|
|
23
|
+
import { ProviderStatsPanel } from '../provider-stats-panel.ts';
|
|
24
|
+
import { ProviderHealthPanel } from '../provider-health-panel.ts';
|
|
25
|
+
import { GOODVIBES_AGENT_SURFACE_ROOT } from '../../config/surface.ts';
|
|
26
|
+
import { DebugPanel } from '../debug-panel.ts';
|
|
27
|
+
import { IncidentReviewPanel } from '../incident-review-panel.ts';
|
|
28
|
+
import { ForensicsPanel } from '../forensics-panel.ts';
|
|
29
|
+
import { PolicyPanel } from '../policy-panel.ts';
|
|
30
|
+
import { EvalPanel } from '../eval-panel.ts';
|
|
31
|
+
import { createProviderAccountSnapshotQuery } from '../provider-account-snapshot.ts';
|
|
32
|
+
import {
|
|
33
|
+
createEnvironmentVariableQuery,
|
|
34
|
+
createProviderRuntimeInspectionQuery,
|
|
35
|
+
} from '../../runtime/ui-service-queries.ts';
|
|
36
|
+
import { createRuntimeProviderApi } from '@/runtime/index.ts';
|
|
37
|
+
import type { ResolvedBuiltinPanelDeps } from './shared.ts';
|
|
38
|
+
import { requireAutomationManager, requireControlPlanePanelDeps, requireHookPanelDeps, requirePluginManager, requireUiServices } from './shared.ts';
|
|
39
|
+
|
|
40
|
+
export function registerOperationsPanels(manager: PanelManager, deps: ResolvedBuiltinPanelDeps): void {
|
|
41
|
+
const ui = requireUiServices(deps);
|
|
42
|
+
const providerRuntime = createProviderRuntimeInspectionQuery(createRuntimeProviderApi({
|
|
43
|
+
benchmarkStore: ui.providers.benchmarkStore,
|
|
44
|
+
favoritesStore: ui.providers.favoritesStore,
|
|
45
|
+
providerRegistry: ui.providers.providerRegistry,
|
|
46
|
+
}));
|
|
47
|
+
const providerAccounts = createProviderAccountSnapshotQuery({
|
|
48
|
+
providerModels: deps.providerRegistry,
|
|
49
|
+
services: deps.serviceRegistry,
|
|
50
|
+
subscriptions: deps.subscriptionManager,
|
|
51
|
+
environment: createEnvironmentVariableQuery(process.env),
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
manager.registerType({
|
|
55
|
+
id: 'cockpit',
|
|
56
|
+
name: 'Cockpit',
|
|
57
|
+
icon: 'O',
|
|
58
|
+
category: 'monitoring',
|
|
59
|
+
description: 'Unified operator summary for orchestration, permissions, communication, MCP, plugins, and integrations',
|
|
60
|
+
factory: () => new CockpitPanel(ui.readModels.cockpit),
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
manager.registerType({
|
|
64
|
+
id: 'approval',
|
|
65
|
+
name: 'Approval',
|
|
66
|
+
icon: 'A',
|
|
67
|
+
category: 'monitoring',
|
|
68
|
+
description: 'Action-specific approval workspace for why-prompted, why-denied, and what-if review',
|
|
69
|
+
factory: () => new ApprovalPanel(deps.policyRuntimeState),
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
manager.registerType({
|
|
73
|
+
id: 'plugins',
|
|
74
|
+
name: 'Plugins',
|
|
75
|
+
icon: 'P',
|
|
76
|
+
category: 'monitoring',
|
|
77
|
+
description: 'Plugin trust, quarantine, capability, and activation status',
|
|
78
|
+
factory: () => new PluginsPanel(requirePluginManager(deps)),
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
manager.registerType({
|
|
82
|
+
id: 'skills',
|
|
83
|
+
name: 'Skills',
|
|
84
|
+
icon: 'K',
|
|
85
|
+
category: 'monitoring',
|
|
86
|
+
description: 'Project-local and global skill discovery with origin and dependency details',
|
|
87
|
+
factory: () => new SkillsPanel({
|
|
88
|
+
componentHealthMonitor: deps.componentHealthMonitor,
|
|
89
|
+
shellPaths: ui.environment.shellPaths,
|
|
90
|
+
}),
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
manager.registerType({
|
|
94
|
+
id: 'services',
|
|
95
|
+
name: 'Services',
|
|
96
|
+
icon: 'V',
|
|
97
|
+
category: 'monitoring',
|
|
98
|
+
description: 'Configured external services, credential presence, and connection health tests',
|
|
99
|
+
factory: () => new ServicesPanel(deps.serviceRegistry, deps.subscriptionManager),
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
manager.registerType({
|
|
103
|
+
id: 'automation',
|
|
104
|
+
name: 'Automation',
|
|
105
|
+
icon: 'M',
|
|
106
|
+
category: 'monitoring',
|
|
107
|
+
description: 'Automation jobs, runs, deliveries, and failure posture across the control plane',
|
|
108
|
+
factory: () => new AutomationControlPanel(ui.readModels.automation),
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
manager.registerType({
|
|
112
|
+
id: 'routes',
|
|
113
|
+
name: 'Routes',
|
|
114
|
+
icon: 'R',
|
|
115
|
+
category: 'monitoring',
|
|
116
|
+
description: 'Cross-surface route bindings and shared session attachment state',
|
|
117
|
+
factory: () => new RoutesPanel(ui.readModels.routes),
|
|
118
|
+
});
|
|
119
|
+
|
|
120
|
+
manager.registerType({
|
|
121
|
+
id: 'watchers',
|
|
122
|
+
name: 'Watchers',
|
|
123
|
+
icon: 'W',
|
|
124
|
+
category: 'monitoring',
|
|
125
|
+
description: 'Watcher health, lag, and degraded source state for automation inputs',
|
|
126
|
+
factory: () => new WatchersPanel(ui.readModels.watchers),
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
manager.registerType({
|
|
130
|
+
id: 'control-plane',
|
|
131
|
+
name: 'Control Plane',
|
|
132
|
+
icon: 'C',
|
|
133
|
+
category: 'monitoring',
|
|
134
|
+
description: 'Daemon control-plane state, clients, approvals, and recent operator activity',
|
|
135
|
+
factory: () => {
|
|
136
|
+
requireControlPlanePanelDeps(deps);
|
|
137
|
+
return new ControlPlanePanel(ui.readModels.controlPlane);
|
|
138
|
+
},
|
|
139
|
+
});
|
|
140
|
+
|
|
141
|
+
manager.registerType({
|
|
142
|
+
id: 'subscription',
|
|
143
|
+
name: 'Subscriptions',
|
|
144
|
+
icon: 'B',
|
|
145
|
+
category: 'monitoring',
|
|
146
|
+
description: 'OAuth-backed provider subscriptions and supported provider override posture',
|
|
147
|
+
factory: () => new SubscriptionPanel(deps.serviceRegistry, deps.subscriptionManager),
|
|
148
|
+
});
|
|
149
|
+
|
|
150
|
+
manager.registerType({
|
|
151
|
+
id: 'local-auth',
|
|
152
|
+
name: 'Local Auth',
|
|
153
|
+
icon: 'U',
|
|
154
|
+
category: 'monitoring',
|
|
155
|
+
description: 'Local daemon/listener auth users, bootstrap posture, and active sessions',
|
|
156
|
+
factory: () => new LocalAuthPanel(deps.localUserAuthManager),
|
|
157
|
+
});
|
|
158
|
+
|
|
159
|
+
manager.registerType({
|
|
160
|
+
id: 'accounts',
|
|
161
|
+
name: 'Accounts',
|
|
162
|
+
icon: 'Q',
|
|
163
|
+
category: 'monitoring',
|
|
164
|
+
description: 'Provider auth routes, subscription quota-window hints, and billing-path safety notes',
|
|
165
|
+
factory: () => new ProviderAccountsPanel({ providerAccounts }),
|
|
166
|
+
});
|
|
167
|
+
|
|
168
|
+
manager.registerType({
|
|
169
|
+
id: 'settings-sync',
|
|
170
|
+
name: 'Settings Sync',
|
|
171
|
+
icon: 'Y',
|
|
172
|
+
category: 'monitoring',
|
|
173
|
+
description: 'Local, synced, and managed settings posture with recent sync events and active locks',
|
|
174
|
+
factory: () => new SettingsSyncPanel(deps.configManager),
|
|
175
|
+
});
|
|
176
|
+
|
|
177
|
+
manager.registerType({
|
|
178
|
+
id: 'hooks',
|
|
179
|
+
name: 'Hooks',
|
|
180
|
+
icon: 'H',
|
|
181
|
+
category: 'monitoring',
|
|
182
|
+
description: 'Registered hooks, chains, contracts, and execution policy details',
|
|
183
|
+
factory: () => {
|
|
184
|
+
const hookDeps = requireHookPanelDeps(deps);
|
|
185
|
+
return new HooksPanel(hookDeps.hookDispatcher, hookDeps.hookWorkbench, hookDeps.hookActivityTracker);
|
|
186
|
+
},
|
|
187
|
+
});
|
|
188
|
+
|
|
189
|
+
manager.registerType({
|
|
190
|
+
id: 'security',
|
|
191
|
+
name: 'Security',
|
|
192
|
+
icon: 'U',
|
|
193
|
+
category: 'monitoring',
|
|
194
|
+
description: 'Security review workspace for token audit, policy posture, MCP quarantine, and incident pressure',
|
|
195
|
+
factory: () => new SecurityPanel(ui.readModels.security),
|
|
196
|
+
});
|
|
197
|
+
|
|
198
|
+
manager.registerType({
|
|
199
|
+
id: 'marketplace',
|
|
200
|
+
name: 'Marketplace',
|
|
201
|
+
icon: 'M',
|
|
202
|
+
category: 'monitoring',
|
|
203
|
+
description: 'Curated plugin and skill marketplace with provenance, compatibility, and install posture',
|
|
204
|
+
factory: () => {
|
|
205
|
+
return new MarketplacePanel(ui.readModels.marketplace, {
|
|
206
|
+
cwd: ui.environment.shellPaths.workingDirectory,
|
|
207
|
+
homeDir: ui.environment.shellPaths.homeDirectory,
|
|
208
|
+
projectCatalogRoot: ui.environment.shellPaths.resolveProjectPath(GOODVIBES_AGENT_SURFACE_ROOT, 'ecosystem'),
|
|
209
|
+
userCatalogRoot: ui.environment.shellPaths.resolveUserPath(GOODVIBES_AGENT_SURFACE_ROOT, 'ecosystem'),
|
|
210
|
+
});
|
|
211
|
+
},
|
|
212
|
+
});
|
|
213
|
+
|
|
214
|
+
manager.registerType({
|
|
215
|
+
id: 'tasks',
|
|
216
|
+
name: 'Tasks',
|
|
217
|
+
icon: 'J',
|
|
218
|
+
category: 'monitoring',
|
|
219
|
+
description: 'Queued, running, blocked, failed, and completed task summaries from the runtime store',
|
|
220
|
+
factory: () => new TasksPanel(ui.readModels.tasks, ui.readModels.worktrees),
|
|
221
|
+
});
|
|
222
|
+
|
|
223
|
+
manager.registerType({
|
|
224
|
+
id: 'orchestration',
|
|
225
|
+
name: 'Orchestration',
|
|
226
|
+
icon: 'Q',
|
|
227
|
+
category: 'monitoring',
|
|
228
|
+
description: 'Task-graph status, node roles, and bounded recursion guard activity',
|
|
229
|
+
factory: () => new OrchestrationPanel(ui.readModels.orchestration),
|
|
230
|
+
});
|
|
231
|
+
|
|
232
|
+
manager.registerType({
|
|
233
|
+
id: 'ops',
|
|
234
|
+
name: 'Ops',
|
|
235
|
+
icon: 'O',
|
|
236
|
+
category: 'monitoring',
|
|
237
|
+
description: 'Adaptive planner strategy timeline, override posture, and recent execution-mode decisions',
|
|
238
|
+
factory: () => new OpsStrategyPanel(ui.events.planner, deps.adaptivePlanner),
|
|
239
|
+
});
|
|
240
|
+
|
|
241
|
+
manager.registerType({
|
|
242
|
+
id: 'communication',
|
|
243
|
+
name: 'Communication',
|
|
244
|
+
icon: 'Y',
|
|
245
|
+
category: 'monitoring',
|
|
246
|
+
description: 'Structured agent communication, blocked routes, and delivery status',
|
|
247
|
+
preload: true,
|
|
248
|
+
factory: () => new CommunicationPanel(ui.readModels.communication),
|
|
249
|
+
});
|
|
250
|
+
|
|
251
|
+
manager.registerType({
|
|
252
|
+
id: 'remote',
|
|
253
|
+
name: 'Remote',
|
|
254
|
+
icon: 'R',
|
|
255
|
+
category: 'monitoring',
|
|
256
|
+
description: 'Self-hosted daemon and ACP transport state with active remote connections',
|
|
257
|
+
factory: () => new RemotePanel(ui.readModels.remote),
|
|
258
|
+
});
|
|
259
|
+
|
|
260
|
+
manager.registerType({
|
|
261
|
+
id: 'providers',
|
|
262
|
+
name: 'Providers',
|
|
263
|
+
icon: 'R',
|
|
264
|
+
category: 'monitoring',
|
|
265
|
+
description: 'Per-provider performance metrics: latency, error rate, request count, sparkline trends',
|
|
266
|
+
factory: () => new ProviderStatsPanel(ui.events.turns, ui.events.providers, deps.requestRender, ui.readModels.providers),
|
|
267
|
+
});
|
|
268
|
+
|
|
269
|
+
manager.registerType({
|
|
270
|
+
id: 'provider-health',
|
|
271
|
+
name: 'Health',
|
|
272
|
+
icon: 'N',
|
|
273
|
+
category: 'monitoring',
|
|
274
|
+
description: 'Provider health dashboard: real-time status, latency, errors, and rate-limit cooldowns',
|
|
275
|
+
preload: true,
|
|
276
|
+
factory: () => new ProviderHealthPanel(
|
|
277
|
+
providerRuntime,
|
|
278
|
+
{
|
|
279
|
+
configManager: deps.configManager,
|
|
280
|
+
turnEvents: ui.events.turns,
|
|
281
|
+
providerEvents: ui.events.providers,
|
|
282
|
+
providers: ui.readModels.providers,
|
|
283
|
+
session: ui.readModels.session,
|
|
284
|
+
security: ui.readModels.security,
|
|
285
|
+
localAuth: ui.readModels.localAuth,
|
|
286
|
+
settings: ui.readModels.settings,
|
|
287
|
+
remote: ui.readModels.remote,
|
|
288
|
+
intelligence: ui.readModels.intelligence,
|
|
289
|
+
continuity: ui.readModels.continuity,
|
|
290
|
+
worktrees: ui.readModels.worktrees,
|
|
291
|
+
},
|
|
292
|
+
deps.requestRender,
|
|
293
|
+
),
|
|
294
|
+
});
|
|
295
|
+
|
|
296
|
+
manager.registerType({
|
|
297
|
+
id: 'debug',
|
|
298
|
+
name: 'Debug',
|
|
299
|
+
icon: 'B',
|
|
300
|
+
category: 'monitoring',
|
|
301
|
+
description: 'API debug panel: per-call log with model, provider, tokens, latency, status, and error history',
|
|
302
|
+
factory: () => {
|
|
303
|
+
const panel = new DebugPanel(ui.events.turns, deps.requestRender);
|
|
304
|
+
if (deps.orchestrator) panel.wireOrchestrator(deps.orchestrator);
|
|
305
|
+
return panel;
|
|
306
|
+
},
|
|
307
|
+
});
|
|
308
|
+
|
|
309
|
+
if (deps.forensicsRegistry) {
|
|
310
|
+
const { forensicsRegistry } = deps;
|
|
311
|
+
manager.registerType({
|
|
312
|
+
id: 'incident',
|
|
313
|
+
name: 'Incident',
|
|
314
|
+
icon: 'N',
|
|
315
|
+
category: 'monitoring',
|
|
316
|
+
description: 'Incident workspace with root cause, permission, budget, and replay evidence',
|
|
317
|
+
factory: () => new IncidentReviewPanel(forensicsRegistry),
|
|
318
|
+
});
|
|
319
|
+
manager.registerType({
|
|
320
|
+
id: 'forensics',
|
|
321
|
+
name: 'Forensics',
|
|
322
|
+
icon: 'F',
|
|
323
|
+
category: 'monitoring',
|
|
324
|
+
description: 'Failure Forensics: auto-classified failure reports with causal chains, phase timings, and jump links',
|
|
325
|
+
factory: () => new ForensicsPanel(forensicsRegistry),
|
|
326
|
+
});
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
manager.registerType({
|
|
330
|
+
id: 'policy',
|
|
331
|
+
name: 'Policy',
|
|
332
|
+
icon: 'U',
|
|
333
|
+
category: 'monitoring',
|
|
334
|
+
description: 'Policy governance: active/candidate bundles, divergence gate, rollout history, and simulation evidence',
|
|
335
|
+
factory: () => new PolicyPanel(deps.policyRuntimeState),
|
|
336
|
+
});
|
|
337
|
+
|
|
338
|
+
if (deps.evalRegistry) {
|
|
339
|
+
const { evalRegistry } = deps;
|
|
340
|
+
manager.registerType({
|
|
341
|
+
id: 'eval',
|
|
342
|
+
name: 'Eval',
|
|
343
|
+
icon: 'Y',
|
|
344
|
+
category: 'monitoring',
|
|
345
|
+
description: 'Evaluation harness: benchmark suite results, scorecards, and regression gates',
|
|
346
|
+
factory: () => new EvalPanel(evalRegistry),
|
|
347
|
+
});
|
|
348
|
+
}
|
|
349
|
+
}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { networkInterfaces } from 'node:os';
|
|
2
|
+
import { readFileSync } from 'node:fs';
|
|
3
|
+
import type { PanelManager } from '../panel-manager.ts';
|
|
4
|
+
import { SessionBrowserPanel } from '../session-browser-panel.ts';
|
|
5
|
+
import { QrPanel } from '../qr-panel.ts';
|
|
6
|
+
import { DocsPanel } from '../docs-panel.ts';
|
|
7
|
+
import { PanelListPanel } from '../panel-list-panel.ts';
|
|
8
|
+
import { TokenBudgetPanel } from '../token-budget-panel.ts';
|
|
9
|
+
import type { ResolvedBuiltinPanelDeps } from './shared.ts';
|
|
10
|
+
import { requireUiServices } from './shared.ts';
|
|
11
|
+
import {
|
|
12
|
+
getOrCreateCompanionToken,
|
|
13
|
+
regenerateCompanionToken,
|
|
14
|
+
buildCompanionConnectionInfo,
|
|
15
|
+
} from '@pellux/goodvibes-sdk/platform/pairing';
|
|
16
|
+
import { copyToClipboard } from '../../utils/clipboard.ts';
|
|
17
|
+
|
|
18
|
+
function getLocalNetworkIp(): string {
|
|
19
|
+
const nets = networkInterfaces();
|
|
20
|
+
for (const name of Object.keys(nets)) {
|
|
21
|
+
for (const net of nets[name] ?? []) {
|
|
22
|
+
if (net.family === 'IPv4' && !net.internal) {
|
|
23
|
+
return net.address;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return 'localhost';
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
function readBootstrapPassword(credentialPath: string): string | undefined {
|
|
31
|
+
try {
|
|
32
|
+
const content = readFileSync(credentialPath, 'utf-8');
|
|
33
|
+
for (const line of content.split('\n')) {
|
|
34
|
+
if (line.startsWith('password=')) {
|
|
35
|
+
return line.slice('password='.length).trim();
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
} catch {
|
|
39
|
+
// credential file may not exist yet
|
|
40
|
+
}
|
|
41
|
+
return undefined;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export function registerSessionPanels(manager: PanelManager, deps: ResolvedBuiltinPanelDeps): void {
|
|
45
|
+
manager.registerType({
|
|
46
|
+
id: 'qr-code',
|
|
47
|
+
name: 'QR Code',
|
|
48
|
+
icon: 'Q',
|
|
49
|
+
category: 'session',
|
|
50
|
+
description: 'QR code for companion app pairing — scan to connect a mobile or desktop companion',
|
|
51
|
+
factory: () => {
|
|
52
|
+
if (!deps.daemonHomeDir) throw new Error('daemonHomeDir must be provided to the session panel factory via BuiltinPanelDeps');
|
|
53
|
+
const daemonHomeDir = deps.daemonHomeDir;
|
|
54
|
+
const tokenRecord = getOrCreateCompanionToken('tui', { daemonHomeDir });
|
|
55
|
+
const daemonPort = deps.configManager.get('controlPlane.port');
|
|
56
|
+
const daemonHost = String(process.env['GOODVIBES_DAEMON_HOST'] ?? getLocalNetworkIp());
|
|
57
|
+
const daemonUrl = `http://${daemonHost}:${daemonPort}`;
|
|
58
|
+
const bootstrapPassword = readBootstrapPassword(deps.localUserAuthManager.getBootstrapCredentialPath());
|
|
59
|
+
const connectionInfo = buildCompanionConnectionInfo({
|
|
60
|
+
daemonUrl,
|
|
61
|
+
token: tokenRecord.token,
|
|
62
|
+
password: bootstrapPassword,
|
|
63
|
+
surface: 'tui',
|
|
64
|
+
});
|
|
65
|
+
const regenerate = (): typeof connectionInfo => {
|
|
66
|
+
const newRecord = regenerateCompanionToken({ daemonHomeDir });
|
|
67
|
+
return buildCompanionConnectionInfo({
|
|
68
|
+
daemonUrl,
|
|
69
|
+
token: newRecord.token,
|
|
70
|
+
password: bootstrapPassword,
|
|
71
|
+
surface: 'tui',
|
|
72
|
+
});
|
|
73
|
+
};
|
|
74
|
+
return new QrPanel(connectionInfo, regenerate, copyToClipboard);
|
|
75
|
+
},
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
manager.registerType({
|
|
79
|
+
id: 'sessions',
|
|
80
|
+
name: 'Sessions',
|
|
81
|
+
icon: 'H',
|
|
82
|
+
category: 'session',
|
|
83
|
+
description: 'Browse, search, and resume past conversation sessions',
|
|
84
|
+
factory: () => new SessionBrowserPanel(deps.sessionManager, deps.resumeSession),
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
manager.registerType({
|
|
88
|
+
id: 'docs',
|
|
89
|
+
name: 'Docs',
|
|
90
|
+
icon: '?',
|
|
91
|
+
category: 'session',
|
|
92
|
+
description: 'Tool list, model capabilities, and keyboard shortcut reference',
|
|
93
|
+
factory: () => new DocsPanel(deps.toolRegistry, deps.providerRegistry),
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
manager.registerType({
|
|
97
|
+
id: 'panel-list',
|
|
98
|
+
name: 'Panel List',
|
|
99
|
+
icon: 'L',
|
|
100
|
+
category: 'session',
|
|
101
|
+
description: 'Browse all registered panels grouped by category, with open/closed status and Enter-to-open',
|
|
102
|
+
factory: () => new PanelListPanel(manager, deps.componentHealthMonitor),
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
manager.registerType({
|
|
106
|
+
id: 'system-messages',
|
|
107
|
+
name: 'System Messages',
|
|
108
|
+
icon: 'J',
|
|
109
|
+
category: 'monitoring',
|
|
110
|
+
description: 'Operational system messages routed away from the main conversation (scans, discovery, plugin events, tool status)',
|
|
111
|
+
preload: true,
|
|
112
|
+
factory: () => deps.systemMessagesPanel,
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
manager.registerType({
|
|
116
|
+
id: 'tokens',
|
|
117
|
+
name: 'Tokens',
|
|
118
|
+
icon: 'K',
|
|
119
|
+
category: 'monitoring',
|
|
120
|
+
description: 'Token budget tracker: per-turn and cumulative usage with context window gauge',
|
|
121
|
+
factory: () => {
|
|
122
|
+
const panel = new TokenBudgetPanel(deps.sessionMemoryStore, deps.configManager);
|
|
123
|
+
if (deps.orchestrator && deps.getCtxWindow) {
|
|
124
|
+
panel.wire(deps.orchestrator, deps.getCtxWindow, requireUiServices(deps).readModels.session);
|
|
125
|
+
}
|
|
126
|
+
return panel;
|
|
127
|
+
},
|
|
128
|
+
});
|
|
129
|
+
}
|