@pellux/goodvibes-tui 0.18.11 → 0.18.13
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 +72 -0
- package/README.md +1 -1
- package/docs/foundation-artifacts/operator-contract.json +1 -1
- package/package.json +2 -2
- package/src/config/index.ts +1 -138
- package/src/config/subscription-providers.ts +1 -127
- package/src/core/conversation-rendering.ts +5 -5
- package/src/core/conversation.ts +177 -424
- package/src/core/history.ts +45 -0
- package/src/core/orchestrator.ts +3 -733
- package/src/core/system-message-router.ts +19 -58
- package/src/input/command-registry.ts +3 -3
- package/src/input/commands/session-content.ts +2 -2
- package/src/input/commands/session-workflow.ts +1 -1
- package/src/input/handler-content-actions.ts +2 -2
- package/src/input/handler-feed.ts +2 -2
- package/src/input/handler-modal-token-routes.ts +1 -1
- package/src/input/handler-ui-state.ts +1 -1
- package/src/input/handler.ts +1 -1
- package/src/input/search.ts +1 -1
- package/src/input/selection.ts +2 -2
- package/src/input/session-picker-modal.ts +1 -1
- package/src/main.ts +1 -1
- package/src/panels/agent-inspector-panel.ts +3 -3
- package/src/panels/agent-logs-panel.ts +3 -3
- package/src/panels/approval-panel.ts +2 -2
- package/src/panels/automation-control-panel.ts +3 -3
- package/src/panels/base-panel.ts +14 -14
- package/src/panels/builtin/agent.ts +1 -0
- package/src/panels/builtin/operations.ts +2 -1
- package/src/panels/builtin/session.ts +2 -2
- package/src/panels/builtin/shared.ts +5 -5
- package/src/panels/cockpit-panel.ts +2 -2
- package/src/panels/communication-panel.ts +3 -3
- package/src/panels/context-visualizer-panel.ts +6 -3
- package/src/panels/control-plane-panel.ts +3 -3
- package/src/panels/cost-tracker-panel.ts +3 -3
- package/src/panels/debug-panel.ts +2 -2
- package/src/panels/diff-panel.ts +2 -2
- package/src/panels/docs-panel.ts +1 -1
- package/src/panels/eval-panel.ts +2 -2
- package/src/panels/file-explorer-panel.ts +3 -3
- package/src/panels/file-preview-panel.ts +3 -3
- package/src/panels/forensics-panel.ts +2 -2
- package/src/panels/git-panel.ts +1 -1
- package/src/panels/hooks-panel.ts +3 -3
- package/src/panels/incident-review-panel.ts +1 -1
- package/src/panels/intelligence-panel.ts +2 -2
- package/src/panels/knowledge-panel.ts +1 -1
- package/src/panels/local-auth-panel.ts +2 -2
- package/src/panels/marketplace-panel.ts +1 -1
- package/src/panels/mcp-panel.ts +3 -3
- package/src/panels/memory-panel.ts +1 -1
- package/src/panels/ops-control-panel.ts +3 -3
- package/src/panels/ops-strategy-panel.ts +2 -2
- package/src/panels/orchestration-panel.ts +2 -2
- package/src/panels/panel-list-panel.ts +6 -6
- package/src/panels/plan-dashboard-panel.ts +1 -1
- package/src/panels/plugins-panel.ts +2 -2
- package/src/panels/policy-panel.ts +2 -2
- package/src/panels/polish.ts +3 -3
- package/src/panels/provider-accounts-panel.ts +2 -2
- package/src/panels/provider-health-domains.ts +5 -1
- package/src/panels/provider-health-panel.ts +7 -3
- package/src/panels/provider-stats-panel.ts +3 -3
- package/src/panels/remote-panel.ts +3 -3
- package/src/panels/routes-panel.ts +3 -3
- package/src/panels/sandbox-panel.ts +2 -2
- package/src/panels/schedule-panel.ts +1 -1
- package/src/panels/security-panel.ts +2 -2
- package/src/panels/services-panel.ts +2 -2
- package/src/panels/session-browser-panel.ts +3 -3
- package/src/panels/settings-sync-panel.ts +2 -2
- package/src/panels/skills-panel.ts +6 -6
- package/src/panels/subscription-panel.ts +2 -2
- package/src/panels/symbol-outline-panel.ts +3 -3
- package/src/panels/system-messages-panel.ts +4 -4
- package/src/panels/tasks-panel.ts +2 -2
- package/src/panels/thinking-panel.ts +3 -3
- package/src/panels/token-budget-panel.ts +7 -3
- package/src/panels/tool-inspector-panel.ts +3 -3
- package/src/panels/types.ts +5 -5
- package/src/panels/watchers-panel.ts +3 -3
- package/src/panels/welcome-panel.ts +1 -1
- package/src/panels/worktree-panel.ts +2 -2
- package/src/panels/wrfc-panel.ts +3 -3
- package/src/permissions/prompt.ts +3 -22
- package/src/plugins/loader.ts +15 -304
- package/src/renderer/agent-detail-modal.ts +1 -1
- package/src/renderer/autocomplete-overlay.ts +2 -2
- package/src/renderer/bookmark-modal.ts +1 -1
- package/src/renderer/bottom-bar.ts +2 -2
- package/src/renderer/buffer.ts +1 -1
- package/src/renderer/code-block.ts +2 -2
- package/src/renderer/compositor.ts +2 -2
- package/src/renderer/context-inspector.ts +1 -1
- package/src/renderer/conversation-layout.ts +2 -2
- package/src/renderer/conversation-overlays.ts +1 -1
- package/src/renderer/conversation-surface.ts +2 -2
- package/src/renderer/diff-view.ts +2 -2
- package/src/renderer/diff.ts +1 -1
- package/src/renderer/file-picker-overlay.ts +2 -2
- package/src/renderer/file-tree.ts +2 -2
- package/src/renderer/help-overlay.ts +1 -1
- package/src/renderer/history-search-overlay.ts +2 -2
- package/src/renderer/live-tail-modal.ts +1 -1
- package/src/renderer/markdown.ts +2 -2
- package/src/renderer/modal-factory.ts +3 -3
- package/src/renderer/model-picker-overlay.ts +2 -2
- package/src/renderer/overlay-box.ts +2 -2
- package/src/renderer/panel-composite.ts +1 -1
- package/src/renderer/panel-picker-overlay.ts +2 -2
- package/src/renderer/panel-tab-bar.ts +1 -1
- package/src/renderer/panel-workspace-bar.ts +1 -1
- package/src/renderer/process-indicator.ts +2 -2
- package/src/renderer/process-modal.ts +1 -1
- package/src/renderer/profile-picker-modal.ts +2 -2
- package/src/renderer/progress.ts +2 -2
- package/src/renderer/search-overlay.ts +2 -2
- package/src/renderer/selection-modal-overlay.ts +2 -2
- package/src/renderer/session-picker-modal.ts +2 -2
- package/src/renderer/settings-modal.ts +2 -2
- package/src/renderer/shell-surface.ts +1 -1
- package/src/renderer/system-message.ts +1 -1
- package/src/renderer/tab-strip.ts +2 -2
- package/src/renderer/text-layout.ts +1 -1
- package/src/renderer/thinking.ts +1 -1
- package/src/renderer/tool-call.ts +2 -2
- package/src/renderer/ui-factory.ts +2 -2
- package/src/runtime/bootstrap-command-context.ts +7 -8
- package/src/runtime/bootstrap-command-parts.ts +4 -6
- package/src/runtime/bootstrap-core.ts +5 -4
- package/src/runtime/bootstrap-hook-bridge.ts +16 -175
- package/src/runtime/bootstrap-shell.ts +5 -5
- package/src/runtime/bootstrap.ts +6 -5
- package/src/runtime/context.ts +4 -20
- package/src/runtime/diagnostics/panels/index.ts +1 -1
- package/src/runtime/diagnostics/panels/ops.ts +1 -1
- package/src/runtime/diagnostics/panels/panel-resources.ts +118 -0
- package/src/runtime/perf/panel-contracts.ts +32 -0
- package/src/runtime/perf/panel-health-monitor.ts +18 -0
- package/src/runtime/services.ts +6 -6
- package/src/runtime/store/domains/conversation.ts +1 -181
- package/src/runtime/store/domains/permissions.ts +1 -143
- package/src/runtime/store/helpers/reducers/conversation.ts +1 -228
- package/src/runtime/store/helpers/reducers/lifecycle.ts +1 -440
- package/src/runtime/store/selectors/index.ts +11 -6
- package/src/runtime/store/state.ts +12 -4
- package/src/runtime/ui-read-models-observability-security.ts +2 -2
- package/src/runtime/ui-read-models-observability-system.ts +1 -1
- package/src/runtime/ui-service-queries.ts +1 -1
- package/src/runtime/ui-services.ts +1 -1
- package/src/shell/ui-openers.ts +1 -1
- package/src/tools/index.ts +1 -186
- package/src/types/grid.ts +48 -0
- package/src/utils/clipboard.ts +21 -0
- package/src/utils/splash-lines.ts +1 -1
- package/src/utils/terminal-width.ts +185 -0
- package/src/version.ts +1 -1
- package/src/acp/connection.ts +0 -447
- package/src/acp/index.ts +0 -7
- package/src/acp/manager.ts +0 -1
- package/src/adapters/bluebubbles/index.ts +0 -127
- package/src/adapters/discord/index.ts +0 -297
- package/src/adapters/github/index.ts +0 -73
- package/src/adapters/google-chat/index.ts +0 -119
- package/src/adapters/imessage/index.ts +0 -92
- package/src/adapters/index.ts +0 -15
- package/src/adapters/matrix/index.ts +0 -116
- package/src/adapters/mattermost/index.ts +0 -151
- package/src/adapters/msteams/index.ts +0 -180
- package/src/adapters/ntfy/index.ts +0 -118
- package/src/adapters/signal/index.ts +0 -92
- package/src/adapters/slack/index.ts +0 -323
- package/src/adapters/telegram/index.ts +0 -160
- package/src/adapters/types.ts +0 -97
- package/src/adapters/webhook/index.ts +0 -178
- package/src/adapters/whatsapp/index.ts +0 -135
- package/src/agents/message-bus-core.ts +0 -312
- package/src/agents/message-bus.ts +0 -2
- package/src/agents/orchestrator-prompts.ts +0 -351
- package/src/agents/orchestrator-runner.ts +0 -668
- package/src/agents/orchestrator.ts +0 -438
- package/src/agents/session.ts +0 -108
- package/src/agents/worktree.ts +0 -153
- package/src/agents/wrfc-config.ts +0 -47
- package/src/agents/wrfc-controller.ts +0 -747
- package/src/agents/wrfc-gate-runtime.ts +0 -75
- package/src/agents/wrfc-reporting.ts +0 -284
- package/src/agents/wrfc-runtime-events.ts +0 -150
- package/src/agents/wrfc-types.ts +0 -67
- package/src/automation/delivery-manager.ts +0 -368
- package/src/automation/index.ts +0 -72
- package/src/automation/manager-runtime-delivery.ts +0 -139
- package/src/automation/manager-runtime-events.ts +0 -131
- package/src/automation/manager-runtime-execution.ts +0 -511
- package/src/automation/manager-runtime-helpers.ts +0 -433
- package/src/automation/manager-runtime-job-mutations.ts +0 -175
- package/src/automation/manager-runtime-reconcile.ts +0 -148
- package/src/automation/manager-runtime-scheduling.ts +0 -189
- package/src/automation/manager-runtime-sync.ts +0 -54
- package/src/automation/manager-runtime.ts +0 -721
- package/src/automation/manager.ts +0 -10
- package/src/automation/service.ts +0 -242
- package/src/channels/builtin/account-actions.ts +0 -490
- package/src/channels/builtin/accounts.ts +0 -433
- package/src/channels/builtin/contracts.ts +0 -405
- package/src/channels/builtin/plugins.ts +0 -308
- package/src/channels/builtin/rendering.ts +0 -174
- package/src/channels/builtin/setup-schema.ts +0 -504
- package/src/channels/builtin/shared.ts +0 -96
- package/src/channels/builtin/surfaces.ts +0 -57
- package/src/channels/builtin/targets.ts +0 -693
- package/src/channels/builtin-runtime.ts +0 -443
- package/src/channels/delivery/shared.ts +0 -199
- package/src/channels/delivery/strategies-bridge.ts +0 -246
- package/src/channels/delivery/strategies-core.ts +0 -299
- package/src/channels/delivery/strategies-enterprise.ts +0 -178
- package/src/channels/delivery/types.ts +0 -59
- package/src/channels/delivery-router.ts +0 -127
- package/src/channels/index.ts +0 -77
- package/src/channels/plugin-registry.ts +0 -551
- package/src/channels/provider-runtime.ts +0 -330
- package/src/channels/reply-pipeline.ts +0 -522
- package/src/channels/route-manager.ts +0 -340
- package/src/channels/surface-registry.ts +0 -186
- package/src/config/helper-model.ts +0 -1
- package/src/config/manager.ts +0 -8
- package/src/config/subscription-auth.ts +0 -31
- package/src/config/tool-llm.ts +0 -110
- package/src/control-plane/approval-broker.ts +0 -351
- package/src/control-plane/gateway.ts +0 -1
- package/src/control-plane/index.ts +0 -54
- package/src/control-plane/media-contract-schemas.ts +0 -1
- package/src/control-plane/method-catalog-admin.ts +0 -1
- package/src/control-plane/method-catalog-channels.ts +0 -1
- package/src/control-plane/method-catalog-control-automation.ts +0 -1
- package/src/control-plane/method-catalog-control-core.ts +0 -1
- package/src/control-plane/method-catalog-control.ts +0 -1
- package/src/control-plane/method-catalog-events.ts +0 -1
- package/src/control-plane/method-catalog-knowledge.ts +0 -1
- package/src/control-plane/method-catalog-media.ts +0 -1
- package/src/control-plane/method-catalog-runtime.ts +0 -1
- package/src/control-plane/method-catalog-shared.ts +0 -1
- package/src/control-plane/method-catalog.ts +0 -1
- package/src/control-plane/operator-contract-schemas-admin.ts +0 -1
- package/src/control-plane/operator-contract-schemas-channels.ts +0 -1
- package/src/control-plane/operator-contract-schemas-control.ts +0 -1
- package/src/control-plane/operator-contract-schemas-domains.ts +0 -1
- package/src/control-plane/operator-contract-schemas-knowledge.ts +0 -1
- package/src/control-plane/operator-contract-schemas-media.ts +0 -1
- package/src/control-plane/operator-contract-schemas-permissions.ts +0 -1
- package/src/control-plane/operator-contract-schemas-remote.ts +0 -1
- package/src/control-plane/operator-contract-schemas-runtime.ts +0 -1
- package/src/control-plane/operator-contract-schemas-shared.ts +0 -1
- package/src/control-plane/operator-contract-schemas-telemetry.ts +0 -1
- package/src/control-plane/operator-contract-schemas.ts +0 -1
- package/src/control-plane/operator-contract.ts +0 -165
- package/src/control-plane/session-broker.ts +0 -780
- package/src/core/compaction-sections.ts +0 -492
- package/src/core/compaction-types.ts +0 -147
- package/src/core/context-compaction.ts +0 -542
- package/src/core/conversation-compaction.ts +0 -68
- package/src/core/conversation-diff.ts +0 -55
- package/src/core/conversation-utils.ts +0 -72
- package/src/core/event-replay.ts +0 -287
- package/src/core/orchestrator-context-runtime.ts +0 -407
- package/src/core/orchestrator-follow-up-runtime.ts +0 -134
- package/src/core/orchestrator-runtime.ts +0 -132
- package/src/core/orchestrator-tool-runtime.ts +0 -468
- package/src/core/orchestrator-turn-helpers.ts +0 -355
- package/src/core/orchestrator-turn-loop.ts +0 -443
- package/src/core/plan-command-handler.ts +0 -169
- package/src/core/transcript-events/classify.ts +0 -95
- package/src/core/transcript-events/index.ts +0 -15
- package/src/daemon/control-plane.ts +0 -522
- package/src/daemon/facade-composition.ts +0 -398
- package/src/daemon/facade.ts +0 -638
- package/src/daemon/helpers.ts +0 -74
- package/src/daemon/http/router-route-contexts.ts +0 -370
- package/src/daemon/http/router.ts +0 -531
- package/src/daemon/http-listener.ts +0 -301
- package/src/daemon/index.ts +0 -1
- package/src/daemon/server.ts +0 -1
- package/src/daemon/service-manager.ts +0 -413
- package/src/daemon/surface-actions.ts +0 -183
- package/src/daemon/surface-delivery.ts +0 -530
- package/src/daemon/surface-policy.ts +0 -60
- package/src/daemon/transport-events.ts +0 -110
- package/src/daemon/types.ts +0 -191
- package/src/export/markdown.ts +0 -213
- package/src/export/session-export.ts +0 -1
- package/src/git/index.ts +0 -1
- package/src/git/service.ts +0 -414
- package/src/hooks/chain-engine.ts +0 -414
- package/src/hooks/dispatcher.ts +0 -414
- package/src/hooks/hook-api.ts +0 -170
- package/src/hooks/index.ts +0 -48
- package/src/hooks/runners/agent.ts +0 -93
- package/src/hooks/runners/prompt.ts +0 -69
- package/src/hooks/workbench.ts +0 -360
- package/src/integrations/index.ts +0 -42
- package/src/integrations/notifier.ts +0 -206
- package/src/integrations/webhooks.ts +0 -1
- package/src/knowledge/consolidation.ts +0 -346
- package/src/knowledge/graphql.ts +0 -324
- package/src/knowledge/index.ts +0 -60
- package/src/knowledge/ingest-compile.ts +0 -386
- package/src/knowledge/ingest-context.ts +0 -18
- package/src/knowledge/ingest-inputs.ts +0 -387
- package/src/knowledge/ingest.ts +0 -1
- package/src/knowledge/internal.ts +0 -257
- package/src/knowledge/knowledge-api.ts +0 -432
- package/src/knowledge/lint.ts +0 -121
- package/src/knowledge/memory-sync.ts +0 -62
- package/src/knowledge/packet.ts +0 -370
- package/src/knowledge/scheduling.ts +0 -283
- package/src/knowledge/service.ts +0 -715
- package/src/mcp/client.ts +0 -383
- package/src/mcp/index.ts +0 -12
- package/src/mcp/mcp-api.ts +0 -90
- package/src/mcp/registry.ts +0 -1
- package/src/media/builtin-image-understanding.ts +0 -303
- package/src/media/builtin-providers.ts +0 -26
- package/src/media/index.ts +0 -18
- package/src/multimodal/index.ts +0 -13
- package/src/multimodal/service.ts +0 -492
- package/src/permissions/briefs/build.ts +0 -88
- package/src/permissions/manager.ts +0 -1
- package/src/plugins/api.ts +0 -383
- package/src/plugins/manager.ts +0 -481
- package/src/profiles/shape.ts +0 -58
- package/src/providers/amazon-bedrock-mantle.ts +0 -50
- package/src/providers/amazon-bedrock.ts +0 -61
- package/src/providers/anthropic-compat.ts +0 -373
- package/src/providers/anthropic-sdk-provider.ts +0 -230
- package/src/providers/anthropic-vertex.ts +0 -59
- package/src/providers/anthropic.ts +0 -469
- package/src/providers/auto-register.ts +0 -417
- package/src/providers/builtin-catalog.ts +0 -326
- package/src/providers/builtin-registry.ts +0 -575
- package/src/providers/cache-planner.ts +0 -258
- package/src/providers/capabilities.ts +0 -1
- package/src/providers/custom-loader.ts +0 -425
- package/src/providers/discovered-compat.ts +0 -7
- package/src/providers/discovered-factory.ts +0 -61
- package/src/providers/discovered-traits.ts +0 -138
- package/src/providers/gemini.ts +0 -462
- package/src/providers/github-copilot.ts +0 -254
- package/src/providers/index.ts +0 -1
- package/src/providers/interface.ts +0 -185
- package/src/providers/llama-cpp.ts +0 -402
- package/src/providers/lm-studio-helpers.ts +0 -367
- package/src/providers/lm-studio.ts +0 -484
- package/src/providers/model-catalog-cache.ts +0 -221
- package/src/providers/model-catalog-notifications.ts +0 -97
- package/src/providers/model-catalog-synthetic.ts +0 -202
- package/src/providers/model-catalog.ts +0 -211
- package/src/providers/model-limits.ts +0 -1
- package/src/providers/ollama.ts +0 -469
- package/src/providers/openai-codex.ts +0 -472
- package/src/providers/openai-compat.ts +0 -615
- package/src/providers/openai.ts +0 -231
- package/src/providers/optimizer.ts +0 -1
- package/src/providers/provider-api.ts +0 -1
- package/src/providers/registry-helpers.ts +0 -34
- package/src/providers/registry-models.ts +0 -77
- package/src/providers/registry-types.ts +0 -67
- package/src/providers/registry.ts +0 -1
- package/src/providers/runtime-metadata.ts +0 -149
- package/src/providers/runtime-snapshot.ts +0 -130
- package/src/providers/synthetic.ts +0 -561
- package/src/providers/tier-prompts.ts +0 -84
- package/src/providers/tool-formats.ts +0 -414
- package/src/runtime/auth/inspection.ts +0 -125
- package/src/runtime/bootstrap-background.ts +0 -157
- package/src/runtime/bootstrap-helpers.ts +0 -88
- package/src/runtime/bootstrap-runtime-events.ts +0 -254
- package/src/runtime/bootstrap-services.ts +0 -197
- package/src/runtime/compaction/index.ts +0 -1
- package/src/runtime/compaction/lifecycle.ts +0 -1
- package/src/runtime/compaction/manager.ts +0 -474
- package/src/runtime/compaction/quality-score.ts +0 -1
- package/src/runtime/compaction/resume-repair.ts +0 -1
- package/src/runtime/compaction/strategies/autocompact.ts +0 -1
- package/src/runtime/compaction/strategies/boundary-commit.ts +0 -1
- package/src/runtime/compaction/strategies/collapse.ts +0 -1
- package/src/runtime/compaction/strategies/index.ts +0 -1
- package/src/runtime/compaction/strategies/microcompact.ts +0 -1
- package/src/runtime/compaction/strategies/reactive.ts +0 -1
- package/src/runtime/compaction/types.ts +0 -1
- package/src/runtime/ecosystem/recommendations.ts +0 -117
- package/src/runtime/emitters/agents.ts +0 -96
- package/src/runtime/emitters/automation.ts +0 -112
- package/src/runtime/emitters/communication.ts +0 -53
- package/src/runtime/emitters/compaction.ts +0 -161
- package/src/runtime/emitters/control-plane.ts +0 -65
- package/src/runtime/emitters/deliveries.ts +0 -65
- package/src/runtime/emitters/forensics.ts +0 -17
- package/src/runtime/emitters/index.ts +0 -59
- package/src/runtime/emitters/knowledge.ts +0 -129
- package/src/runtime/emitters/mcp.ts +0 -95
- package/src/runtime/emitters/ops.ts +0 -163
- package/src/runtime/emitters/orchestration.ts +0 -87
- package/src/runtime/emitters/permissions.ts +0 -98
- package/src/runtime/emitters/planner.ts +0 -23
- package/src/runtime/emitters/plugins.ts +0 -78
- package/src/runtime/emitters/providers.ts +0 -30
- package/src/runtime/emitters/routes.ts +0 -57
- package/src/runtime/emitters/security.ts +0 -53
- package/src/runtime/emitters/session.ts +0 -93
- package/src/runtime/emitters/surfaces.ts +0 -57
- package/src/runtime/emitters/tasks.ts +0 -69
- package/src/runtime/emitters/tools.ts +0 -140
- package/src/runtime/emitters/transport.ts +0 -78
- package/src/runtime/emitters/turn.ts +0 -155
- package/src/runtime/emitters/ui.ts +0 -57
- package/src/runtime/emitters/watchers.ts +0 -57
- package/src/runtime/emitters/workflows.ts +0 -79
- package/src/runtime/eval/index.ts +0 -48
- package/src/runtime/eval/runner.ts +0 -163
- package/src/runtime/eval/suites.ts +0 -264
- package/src/runtime/events/domain-map.ts +0 -148
- package/src/runtime/events/index.ts +0 -1
- package/src/runtime/events/turn.ts +0 -1
- package/src/runtime/events/workflows.ts +0 -1
- package/src/runtime/forensics/collector.ts +0 -693
- package/src/runtime/forensics/index.ts +0 -23
- package/src/runtime/foundation-clients.ts +0 -78
- package/src/runtime/foundation-services.ts +0 -96
- package/src/runtime/guidance.ts +0 -183
- package/src/runtime/health/effect-handlers.ts +0 -189
- package/src/runtime/health/index.ts +0 -70
- package/src/runtime/health/wiring.ts +0 -115
- package/src/runtime/integration/helpers.ts +0 -640
- package/src/runtime/lifecycle.ts +0 -107
- package/src/runtime/mcp/index.ts +0 -68
- package/src/runtime/mcp/manager.ts +0 -513
- package/src/runtime/network/inbound.ts +0 -131
- package/src/runtime/network/index.ts +0 -30
- package/src/runtime/network/outbound.ts +0 -292
- package/src/runtime/network/shared.ts +0 -82
- package/src/runtime/operator-client.ts +0 -235
- package/src/runtime/ops/control-plane.ts +0 -363
- package/src/runtime/ops/index.ts +0 -122
- package/src/runtime/ops/playbooks/index.ts +0 -10
- package/src/runtime/ops/playbooks/session-unrecoverable.ts +0 -196
- package/src/runtime/ops/playbooks/stuck-turn.ts +0 -197
- package/src/runtime/ops/runtime-context.ts +0 -100
- package/src/runtime/ops-api.ts +0 -27
- package/src/runtime/orchestration/spawn-policy.ts +0 -83
- package/src/runtime/peer-client.ts +0 -404
- package/src/runtime/perf/index.ts +0 -57
- package/src/runtime/perf/slo-collector.ts +0 -375
- package/src/runtime/permissions/index.ts +0 -190
- package/src/runtime/permissions/policy-runtime.ts +0 -1
- package/src/runtime/permissions/preflight.ts +0 -101
- package/src/runtime/permissions/rule-suggestions.ts +0 -36
- package/src/runtime/plugins/hot-reload.ts +0 -221
- package/src/runtime/plugins/index.ts +0 -84
- package/src/runtime/plugins/lifecycle.ts +0 -95
- package/src/runtime/plugins/manager.ts +0 -474
- package/src/runtime/plugins/manifest.ts +0 -167
- package/src/runtime/plugins/quarantine.ts +0 -202
- package/src/runtime/plugins/trust.ts +0 -291
- package/src/runtime/plugins/types.ts +0 -205
- package/src/runtime/provider-accounts/registry.ts +0 -326
- package/src/runtime/remote/distributed-runtime-contract-schemas.ts +0 -386
- package/src/runtime/remote/index.ts +0 -488
- package/src/runtime/remote/runner-registry.ts +0 -438
- package/src/runtime/remote/supervisor.ts +0 -70
- package/src/runtime/runtime-hook-api.ts +0 -5
- package/src/runtime/runtime-knowledge-api.ts +0 -14
- package/src/runtime/runtime-mcp-api.ts +0 -5
- package/src/runtime/runtime-ops-api.ts +0 -86
- package/src/runtime/runtime-provider-api.ts +0 -18
- package/src/runtime/session-maintenance.ts +0 -188
- package/src/runtime/session-persistence.ts +0 -288
- package/src/runtime/session-return-context.ts +0 -195
- package/src/runtime/settings/control-plane-store.ts +0 -258
- package/src/runtime/settings/control-plane.ts +0 -599
- package/src/runtime/shell-command-extensions.ts +0 -54
- package/src/runtime/shell-command-ops.ts +0 -207
- package/src/runtime/shell-command-platform.ts +0 -47
- package/src/runtime/shell-command-services.ts +0 -143
- package/src/runtime/shell-command-workspace.ts +0 -31
- package/src/runtime/tasks/adapters/acp-adapter.ts +0 -211
- package/src/runtime/tasks/adapters/agent-adapter.ts +0 -208
- package/src/runtime/tasks/adapters/index.ts +0 -16
- package/src/runtime/tasks/adapters/process-adapter.ts +0 -214
- package/src/runtime/tasks/adapters/scheduler-adapter.ts +0 -193
- package/src/runtime/tasks/index.ts +0 -68
- package/src/runtime/tasks/manager.ts +0 -415
- package/src/runtime/telemetry/api-helpers.ts +0 -517
- package/src/runtime/telemetry/api.ts +0 -768
- package/src/runtime/telemetry/index.ts +0 -178
- package/src/runtime/telemetry/instrumentation/domain-bridge-agent-session.ts +0 -440
- package/src/runtime/telemetry/instrumentation/domain-bridge-plugin-mcp.ts +0 -200
- package/src/runtime/telemetry/instrumentation/domain-bridge-shared.ts +0 -18
- package/src/runtime/telemetry/instrumentation/domain-bridge-transport-task.ts +0 -204
- package/src/runtime/telemetry/instrumentation/domain-bridge.ts +0 -125
- package/src/runtime/telemetry/instrumentation/index.ts +0 -67
- package/src/runtime/tools/context.ts +0 -114
- package/src/runtime/tools/index.ts +0 -46
- package/src/runtime/tools/phased-executor.ts +0 -448
- package/src/runtime/tools/phases/budget.ts +0 -130
- package/src/runtime/tools/phases/execute.ts +0 -69
- package/src/runtime/tools/phases/index.ts +0 -13
- package/src/runtime/tools/phases/map-output.ts +0 -98
- package/src/runtime/tools/phases/permission.ts +0 -133
- package/src/runtime/tools/phases/posthook.ts +0 -57
- package/src/runtime/tools/phases/prehook.ts +0 -68
- package/src/runtime/tools/phases/validate.ts +0 -53
- package/src/runtime/transports/direct.ts +0 -73
- package/src/runtime/transports/http-helpers.ts +0 -218
- package/src/runtime/transports/http-types.ts +0 -364
- package/src/runtime/transports/http.ts +0 -629
- package/src/runtime/transports/realtime.ts +0 -50
- package/src/runtime/transports/remote-events.ts +0 -16
- package/src/runtime/transports/shared.ts +0 -39
- package/src/runtime/transports/ui-runtime-events.ts +0 -35
- package/src/runtime/ui-read-models-core.ts +0 -95
- package/src/runtime/ui-read-models-operations.ts +0 -203
- package/src/runtime/worktree/registry.ts +0 -252
- package/src/sessions/manager.ts +0 -14
- package/src/state/file-watcher.ts +0 -294
- package/src/state/index.ts +0 -56
- package/src/state/knowledge-injection.ts +0 -214
- package/src/state/memory-embedding-http.ts +0 -642
- package/src/state/memory-embeddings.ts +0 -312
- package/src/state/memory-ingest.ts +0 -132
- package/src/state/memory-registry.ts +0 -111
- package/src/state/memory-store-helpers.ts +0 -160
- package/src/state/memory-store.ts +0 -728
- package/src/state/memory-vector-store.ts +0 -418
- package/src/templates/manager.ts +0 -187
- package/src/tools/agent/index.ts +0 -610
- package/src/tools/agent/manager.ts +0 -476
- package/src/tools/analyze/git-modes.ts +0 -380
- package/src/tools/analyze/index.ts +0 -128
- package/src/tools/channel/agent-tools.ts +0 -16
- package/src/tools/channel/index.ts +0 -268
- package/src/tools/control/index.ts +0 -90
- package/src/tools/edit/core.ts +0 -619
- package/src/tools/edit/index.ts +0 -4
- package/src/tools/edit/phased.ts +0 -33
- package/src/tools/fetch/index.ts +0 -3
- package/src/tools/fetch/phased.ts +0 -34
- package/src/tools/fetch/runtime.ts +0 -499
- package/src/tools/mcp/index.ts +0 -190
- package/src/tools/remote-trigger/index.ts +0 -130
- package/src/tools/shared/auto-heal.ts +0 -282
- package/src/tools/state/index.ts +0 -688
- package/src/tools/web-search/index.ts +0 -38
- package/src/tools/write/index.ts +0 -604
- package/src/tools/write/phased.ts +0 -41
- package/src/types/generated/foundation-client-types.ts +0 -22
- package/src/watchers/index.ts +0 -11
- package/src/watchers/registry.ts +0 -517
- package/src/web-search/index.ts +0 -26
- package/src/web-search/provider-registry.ts +0 -64
- package/src/web-search/providers/brave.ts +0 -100
- package/src/web-search/providers/duckduckgo.ts +0 -270
- package/src/web-search/providers/exa.ts +0 -77
- package/src/web-search/providers/firecrawl.ts +0 -90
- package/src/web-search/providers/perplexity.ts +0 -86
- package/src/web-search/providers/searxng.ts +0 -88
- package/src/web-search/providers/shared.ts +0 -249
- package/src/web-search/providers/tavily.ts +0 -90
- package/src/web-search/service.ts +0 -142
|
@@ -1,235 +0,0 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
ControlPlaneRecentEvent,
|
|
3
|
-
SharedApprovalRecord,
|
|
4
|
-
SharedSessionInputRecord,
|
|
5
|
-
SharedSessionMessage,
|
|
6
|
-
SharedSessionRecord,
|
|
7
|
-
SharedSessionSubmission,
|
|
8
|
-
SteerSharedSessionMessageInput,
|
|
9
|
-
SubmitSharedSessionMessageInput,
|
|
10
|
-
} from '@pellux/goodvibes-sdk/platform/control-plane/index';
|
|
11
|
-
import type { RequestSharedApprovalInput } from '@pellux/goodvibes-sdk/platform/control-plane/index';
|
|
12
|
-
import type { PermissionPromptDecision } from '@pellux/goodvibes-sdk/platform/permissions/prompt';
|
|
13
|
-
import { buildAuthInspectionSnapshot, type AuthInspectionSnapshot } from '@pellux/goodvibes-sdk/platform/runtime/auth/inspection';
|
|
14
|
-
import { buildProviderAccountSnapshot, type ProviderAccountSnapshot } from '@pellux/goodvibes-sdk/platform/runtime/provider-accounts/registry';
|
|
15
|
-
import type { ProviderRuntimeSnapshot, ProviderUsageSnapshot } from '@pellux/goodvibes-sdk/platform/providers/runtime-snapshot';
|
|
16
|
-
import { getProviderRuntimeSnapshot, getProviderUsageSnapshot, listProviderRuntimeSnapshots } from '@pellux/goodvibes-sdk/platform/providers/runtime-snapshot';
|
|
17
|
-
import type { OperatorClientServices } from '@pellux/goodvibes-sdk/platform/runtime/foundation-services';
|
|
18
|
-
import type { RuntimeTask } from '@pellux/goodvibes-sdk/platform/runtime/store/domains/tasks';
|
|
19
|
-
import type { UiControlPlaneSnapshot, UiSessionSnapshot, UiTasksSnapshot } from './ui-read-models.ts';
|
|
20
|
-
import type { UiRuntimeEvents } from '@pellux/goodvibes-sdk/platform/runtime/ui-events';
|
|
21
|
-
import type { ShellPathService } from '@pellux/goodvibes-sdk/platform/runtime/shell-paths';
|
|
22
|
-
|
|
23
|
-
export interface OperatorControlPlaneSnapshot extends UiControlPlaneSnapshot {}
|
|
24
|
-
|
|
25
|
-
export interface OperatorProvidersSnapshot {
|
|
26
|
-
readonly providerIds: readonly string[];
|
|
27
|
-
readonly runtimeSnapshots: readonly ProviderRuntimeSnapshot[];
|
|
28
|
-
readonly accountSnapshot: ProviderAccountSnapshot;
|
|
29
|
-
readonly authInspection: AuthInspectionSnapshot;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
export interface OperatorSessionsClient {
|
|
33
|
-
current(): UiSessionSnapshot;
|
|
34
|
-
list(limit?: number): readonly SharedSessionRecord[];
|
|
35
|
-
get(sessionId: string): SharedSessionRecord | null;
|
|
36
|
-
messages(sessionId: string, limit?: number): readonly SharedSessionMessage[];
|
|
37
|
-
inputs(sessionId: string, limit?: number): readonly SharedSessionInputRecord[];
|
|
38
|
-
ensureSession(input?: OperatorSessionEnsureInput): Promise<SharedSessionRecord>;
|
|
39
|
-
close(sessionId: string): Promise<SharedSessionRecord | null>;
|
|
40
|
-
reopen(sessionId: string): Promise<SharedSessionRecord | null>;
|
|
41
|
-
bindAgent(sessionId: string, agentId: string): Promise<SharedSessionRecord | null>;
|
|
42
|
-
submitMessage(input: SubmitSharedSessionMessageInput): Promise<SharedSessionSubmission>;
|
|
43
|
-
steerMessage(input: SteerSharedSessionMessageInput): Promise<SharedSessionSubmission>;
|
|
44
|
-
followUpMessage(input: SubmitSharedSessionMessageInput): Promise<SharedSessionSubmission>;
|
|
45
|
-
cancelInput(sessionId: string, inputId: string): Promise<SharedSessionInputRecord | null>;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
export interface OperatorTasksClient {
|
|
49
|
-
snapshot(): UiTasksSnapshot;
|
|
50
|
-
list(limit?: number): readonly RuntimeTask[];
|
|
51
|
-
get(taskId: string): RuntimeTask | null;
|
|
52
|
-
running(): readonly RuntimeTask[];
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
export interface OperatorApprovalsClient {
|
|
56
|
-
list(limit?: number): readonly SharedApprovalRecord[];
|
|
57
|
-
get(approvalId: string): SharedApprovalRecord | null;
|
|
58
|
-
request(input: RequestSharedApprovalInput): Promise<PermissionPromptDecision>;
|
|
59
|
-
claim(approvalId: string, actor: string, actorSurface?: string, note?: string): Promise<SharedApprovalRecord | null>;
|
|
60
|
-
resolve(
|
|
61
|
-
approvalId: string,
|
|
62
|
-
input: {
|
|
63
|
-
readonly approved: boolean;
|
|
64
|
-
readonly remember?: boolean;
|
|
65
|
-
readonly actor: string;
|
|
66
|
-
readonly actorSurface?: string;
|
|
67
|
-
readonly note?: string;
|
|
68
|
-
},
|
|
69
|
-
): Promise<SharedApprovalRecord | null>;
|
|
70
|
-
approve(approvalId: string, actor: string, actorSurface?: string, note?: string): Promise<SharedApprovalRecord | null>;
|
|
71
|
-
deny(approvalId: string, actor: string, actorSurface?: string, note?: string): Promise<SharedApprovalRecord | null>;
|
|
72
|
-
cancel(approvalId: string, actor: string, actorSurface?: string, note?: string): Promise<SharedApprovalRecord | null>;
|
|
73
|
-
update(
|
|
74
|
-
approvalId: string,
|
|
75
|
-
input: {
|
|
76
|
-
readonly actor: string;
|
|
77
|
-
readonly actorSurface?: string;
|
|
78
|
-
readonly note?: string;
|
|
79
|
-
readonly metadata?: Record<string, unknown>;
|
|
80
|
-
},
|
|
81
|
-
): Promise<SharedApprovalRecord | null>;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
export type OperatorSessionEnsureInput = NonNullable<Parameters<OperatorClientServices['sessionBroker']['ensureSession']>[0]>;
|
|
85
|
-
|
|
86
|
-
export interface OperatorProvidersClient {
|
|
87
|
-
listIds(): readonly string[];
|
|
88
|
-
runtimeSnapshots(): Promise<readonly ProviderRuntimeSnapshot[]>;
|
|
89
|
-
runtimeSnapshot(providerId: string): Promise<ProviderRuntimeSnapshot | null>;
|
|
90
|
-
usageSnapshot(providerId: string): Promise<ProviderUsageSnapshot | null>;
|
|
91
|
-
snapshot(): Promise<OperatorProvidersSnapshot>;
|
|
92
|
-
accountSnapshot(): Promise<ProviderAccountSnapshot>;
|
|
93
|
-
authInspection(): Promise<AuthInspectionSnapshot>;
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
export interface OperatorControlPlaneClient {
|
|
97
|
-
snapshot(): OperatorControlPlaneSnapshot;
|
|
98
|
-
recentEvents(limit?: number): readonly ControlPlaneRecentEvent[];
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
export interface OperatorClient {
|
|
102
|
-
readonly sessions: OperatorSessionsClient;
|
|
103
|
-
readonly tasks: OperatorTasksClient;
|
|
104
|
-
readonly approvals: OperatorApprovalsClient;
|
|
105
|
-
readonly providers: OperatorProvidersClient;
|
|
106
|
-
readonly controlPlane: OperatorControlPlaneClient;
|
|
107
|
-
readonly events: UiRuntimeEvents;
|
|
108
|
-
readonly shellPaths: ShellPathService;
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
function normalizeLimit(limit: number): number {
|
|
112
|
-
if (!Number.isFinite(limit)) return 1;
|
|
113
|
-
return Math.max(1, Math.floor(limit));
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
function listTasksSnapshot(snapshot: UiTasksSnapshot, limit = 100): readonly RuntimeTask[] {
|
|
117
|
-
return snapshot.tasks.slice(0, normalizeLimit(limit));
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
function getTaskSnapshot(snapshot: UiTasksSnapshot, taskId: string): RuntimeTask | null {
|
|
121
|
-
return snapshot.tasks.find((task) => task.id === taskId) ?? null;
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
export function createOperatorClient(services: OperatorClientServices): OperatorClient {
|
|
125
|
-
const sessions = {
|
|
126
|
-
current: (): UiSessionSnapshot => services.readModels.session.getSnapshot(),
|
|
127
|
-
list: (limit = 100): readonly SharedSessionRecord[] => services.sessionBroker.listSessions(normalizeLimit(limit)),
|
|
128
|
-
get: (sessionId: string): SharedSessionRecord | null => services.sessionBroker.getSession(sessionId),
|
|
129
|
-
messages: (sessionId: string, limit = 100): readonly SharedSessionMessage[] => services.sessionBroker.getMessages(sessionId, normalizeLimit(limit)),
|
|
130
|
-
inputs: (sessionId: string, limit = 100): readonly SharedSessionInputRecord[] => services.sessionBroker.getInputs(sessionId, normalizeLimit(limit)),
|
|
131
|
-
ensureSession: (input: Parameters<OperatorClientServices['sessionBroker']['ensureSession']>[0] = {}): Promise<SharedSessionRecord> => services.sessionBroker.ensureSession(input),
|
|
132
|
-
close: (sessionId: string): Promise<SharedSessionRecord | null> => services.sessionBroker.closeSession(sessionId),
|
|
133
|
-
reopen: (sessionId: string): Promise<SharedSessionRecord | null> => services.sessionBroker.reopenSession(sessionId),
|
|
134
|
-
bindAgent: (sessionId: string, agentId: string): Promise<SharedSessionRecord | null> => services.sessionBroker.bindAgent(sessionId, agentId),
|
|
135
|
-
submitMessage: (input: SubmitSharedSessionMessageInput): Promise<SharedSessionSubmission> => services.sessionBroker.submitMessage(input),
|
|
136
|
-
steerMessage: (input: SteerSharedSessionMessageInput): Promise<SharedSessionSubmission> => services.sessionBroker.steerMessage(input),
|
|
137
|
-
followUpMessage: (input: SubmitSharedSessionMessageInput): Promise<SharedSessionSubmission> => services.sessionBroker.followUpMessage(input),
|
|
138
|
-
cancelInput: (sessionId: string, inputId: string): Promise<SharedSessionInputRecord | null> => services.sessionBroker.cancelInput(sessionId, inputId),
|
|
139
|
-
} satisfies OperatorSessionsClient;
|
|
140
|
-
|
|
141
|
-
const tasks = {
|
|
142
|
-
snapshot: (): UiTasksSnapshot => services.readModels.tasks.getSnapshot(),
|
|
143
|
-
list: (limit = 100): readonly RuntimeTask[] => listTasksSnapshot(services.readModels.tasks.getSnapshot(), limit),
|
|
144
|
-
get: (taskId: string): RuntimeTask | null => getTaskSnapshot(services.readModels.tasks.getSnapshot(), taskId),
|
|
145
|
-
running: (): readonly RuntimeTask[] => services.readModels.tasks.getSnapshot().tasks.filter((task) => task.status === 'running'),
|
|
146
|
-
} satisfies OperatorTasksClient;
|
|
147
|
-
|
|
148
|
-
const approvals = {
|
|
149
|
-
list: (limit = 100): readonly SharedApprovalRecord[] => services.approvalBroker.listApprovals(normalizeLimit(limit)),
|
|
150
|
-
get: (approvalId: string): SharedApprovalRecord | null => services.approvalBroker.getApproval(approvalId),
|
|
151
|
-
request: (input: RequestSharedApprovalInput): Promise<PermissionPromptDecision> => services.approvalBroker.requestApproval(input),
|
|
152
|
-
claim: (approvalId: string, actor: string, actorSurface = 'operator', note?: string): Promise<SharedApprovalRecord | null> => services.approvalBroker.claimApproval(approvalId, actor, actorSurface, note),
|
|
153
|
-
resolve: (approvalId: string, input: {
|
|
154
|
-
readonly approved: boolean;
|
|
155
|
-
readonly remember?: boolean;
|
|
156
|
-
readonly actor: string;
|
|
157
|
-
readonly actorSurface?: string;
|
|
158
|
-
readonly note?: string;
|
|
159
|
-
}): Promise<SharedApprovalRecord | null> => services.approvalBroker.resolveApproval(approvalId, input),
|
|
160
|
-
approve: (approvalId: string, actor: string, actorSurface = 'operator', note?: string): Promise<SharedApprovalRecord | null> => services.approvalBroker.resolveApproval(approvalId, {
|
|
161
|
-
approved: true,
|
|
162
|
-
actor,
|
|
163
|
-
actorSurface,
|
|
164
|
-
note,
|
|
165
|
-
}),
|
|
166
|
-
deny: (approvalId: string, actor: string, actorSurface = 'operator', note?: string): Promise<SharedApprovalRecord | null> => services.approvalBroker.resolveApproval(approvalId, {
|
|
167
|
-
approved: false,
|
|
168
|
-
actor,
|
|
169
|
-
actorSurface,
|
|
170
|
-
note,
|
|
171
|
-
}),
|
|
172
|
-
cancel: (approvalId: string, actor: string, actorSurface = 'operator', note?: string): Promise<SharedApprovalRecord | null> => services.approvalBroker.cancelApproval(approvalId, actor, actorSurface, note),
|
|
173
|
-
update: (approvalId: string, input: {
|
|
174
|
-
readonly actor: string;
|
|
175
|
-
readonly actorSurface?: string;
|
|
176
|
-
readonly note?: string;
|
|
177
|
-
readonly metadata?: Record<string, unknown>;
|
|
178
|
-
}): Promise<SharedApprovalRecord | null> => services.approvalBroker.recordRemoteUpdate(approvalId, input),
|
|
179
|
-
} satisfies OperatorApprovalsClient;
|
|
180
|
-
|
|
181
|
-
const providers = {
|
|
182
|
-
listIds: (): readonly string[] => services.readModels.providers.getSnapshot().providerIds,
|
|
183
|
-
runtimeSnapshots: (): Promise<readonly ProviderRuntimeSnapshot[]> => listProviderRuntimeSnapshots(services.providerRegistry),
|
|
184
|
-
runtimeSnapshot: (providerId: string): Promise<ProviderRuntimeSnapshot | null> => getProviderRuntimeSnapshot(services.providerRegistry, providerId),
|
|
185
|
-
usageSnapshot: (providerId: string): Promise<ProviderUsageSnapshot | null> => getProviderUsageSnapshot(services.providerRegistry, providerId),
|
|
186
|
-
accountSnapshot: (): Promise<ProviderAccountSnapshot> => buildProviderAccountSnapshot({
|
|
187
|
-
providerRegistry: services.providerRegistry,
|
|
188
|
-
serviceRegistry: services.serviceRegistry,
|
|
189
|
-
subscriptionManager: services.subscriptionManager,
|
|
190
|
-
secretsManager: services.secretsManager,
|
|
191
|
-
}),
|
|
192
|
-
authInspection: (): Promise<AuthInspectionSnapshot> => buildAuthInspectionSnapshot({
|
|
193
|
-
serviceRegistry: services.serviceRegistry,
|
|
194
|
-
subscriptionManager: services.subscriptionManager,
|
|
195
|
-
secretsManager: services.secretsManager,
|
|
196
|
-
}),
|
|
197
|
-
snapshot: async (): Promise<OperatorProvidersSnapshot> => {
|
|
198
|
-
const [runtimeSnapshots, accountSnapshot, authInspection] = await Promise.all([
|
|
199
|
-
listProviderRuntimeSnapshots(services.providerRegistry),
|
|
200
|
-
buildProviderAccountSnapshot({
|
|
201
|
-
providerRegistry: services.providerRegistry,
|
|
202
|
-
serviceRegistry: services.serviceRegistry,
|
|
203
|
-
subscriptionManager: services.subscriptionManager,
|
|
204
|
-
secretsManager: services.secretsManager,
|
|
205
|
-
}),
|
|
206
|
-
buildAuthInspectionSnapshot({
|
|
207
|
-
serviceRegistry: services.serviceRegistry,
|
|
208
|
-
subscriptionManager: services.subscriptionManager,
|
|
209
|
-
secretsManager: services.secretsManager,
|
|
210
|
-
}),
|
|
211
|
-
]);
|
|
212
|
-
return {
|
|
213
|
-
providerIds: services.readModels.providers.getSnapshot().providerIds,
|
|
214
|
-
runtimeSnapshots,
|
|
215
|
-
accountSnapshot,
|
|
216
|
-
authInspection,
|
|
217
|
-
};
|
|
218
|
-
},
|
|
219
|
-
} satisfies OperatorProvidersClient;
|
|
220
|
-
|
|
221
|
-
const controlPlane = {
|
|
222
|
-
snapshot: (): OperatorControlPlaneSnapshot => services.readModels.controlPlane.getSnapshot(),
|
|
223
|
-
recentEvents: (limit = 6): readonly ControlPlaneRecentEvent[] => services.readModels.controlPlane.getSnapshot().recentEvents.slice(0, normalizeLimit(limit)),
|
|
224
|
-
} satisfies OperatorControlPlaneClient;
|
|
225
|
-
|
|
226
|
-
return Object.freeze({
|
|
227
|
-
sessions,
|
|
228
|
-
tasks,
|
|
229
|
-
approvals,
|
|
230
|
-
providers,
|
|
231
|
-
controlPlane,
|
|
232
|
-
events: services.events,
|
|
233
|
-
shellPaths: services.shellPaths,
|
|
234
|
-
});
|
|
235
|
-
}
|
|
@@ -1,363 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* OpsControlPlane — central dispatch point for all operator interventions.
|
|
3
|
-
*
|
|
4
|
-
* All task and agent control actions flow through this class. It:
|
|
5
|
-
* - Validates that the requested action is legal given the current state
|
|
6
|
-
* - Dispatches through the TaskManager (for task ops) or store (for agent ops)
|
|
7
|
-
* - Emits typed audit events via the RuntimeEventBus for every intervention
|
|
8
|
-
*
|
|
9
|
-
* This is the single integration point for the /ops commands and Ctrl+O panel.
|
|
10
|
-
*/
|
|
11
|
-
import { randomUUID } from 'node:crypto';
|
|
12
|
-
import type { TaskManager } from '@pellux/goodvibes-sdk/platform/runtime/tasks/types';
|
|
13
|
-
import type { RuntimeEventBus } from '@pellux/goodvibes-sdk/platform/runtime/events/index';
|
|
14
|
-
import { createDomainDispatch } from '../store/index.ts';
|
|
15
|
-
import type { RuntimeStore, DomainDispatch } from '../store/index.ts';
|
|
16
|
-
import type { TaskLifecycleState } from '@pellux/goodvibes-sdk/platform/runtime/store/domains/tasks';
|
|
17
|
-
import type { AgentLifecycleState } from '@pellux/goodvibes-sdk/platform/runtime/store/domains/agents';
|
|
18
|
-
import { canTransition } from '@pellux/goodvibes-sdk/platform/runtime/tasks/lifecycle';
|
|
19
|
-
import {
|
|
20
|
-
emitOpsTaskCancelled,
|
|
21
|
-
emitOpsTaskPaused,
|
|
22
|
-
emitOpsTaskResumed,
|
|
23
|
-
emitOpsTaskRetried,
|
|
24
|
-
emitOpsAgentCancelled,
|
|
25
|
-
} from '@pellux/goodvibes-sdk/platform/runtime/emitters/ops';
|
|
26
|
-
import type { OpsInterventionReason } from '@pellux/goodvibes-sdk/platform/runtime/events/ops';
|
|
27
|
-
|
|
28
|
-
// ---------------------------------------------------------------------------
|
|
29
|
-
// Error types
|
|
30
|
-
// ---------------------------------------------------------------------------
|
|
31
|
-
|
|
32
|
-
/** Thrown when an ops action is rejected because the state machine disallows it. */
|
|
33
|
-
export class OpsIllegalActionError extends Error {
|
|
34
|
-
public readonly targetId: string;
|
|
35
|
-
public readonly action: string;
|
|
36
|
-
public readonly currentState: string;
|
|
37
|
-
|
|
38
|
-
public constructor(targetId: string, action: string, currentState: string) {
|
|
39
|
-
super(
|
|
40
|
-
`[OpsControlPlane] Action '${action}' is illegal for ${targetId} in state '${currentState}'`
|
|
41
|
-
);
|
|
42
|
-
this.name = 'OpsIllegalActionError';
|
|
43
|
-
this.targetId = targetId;
|
|
44
|
-
this.action = action;
|
|
45
|
-
this.currentState = currentState;
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
/** Thrown when the target task or agent is not found. */
|
|
50
|
-
export class OpsTargetNotFoundError extends Error {
|
|
51
|
-
public readonly targetId: string;
|
|
52
|
-
public readonly targetKind: 'task' | 'agent';
|
|
53
|
-
|
|
54
|
-
public constructor(targetId: string, targetKind: 'task' | 'agent') {
|
|
55
|
-
super(`[OpsControlPlane] ${targetKind} not found: ${targetId}`);
|
|
56
|
-
this.name = 'OpsTargetNotFoundError';
|
|
57
|
-
this.targetId = targetId;
|
|
58
|
-
this.targetKind = targetKind;
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
// ---------------------------------------------------------------------------
|
|
63
|
-
// OpsControlPlane
|
|
64
|
-
// ---------------------------------------------------------------------------
|
|
65
|
-
|
|
66
|
-
/**
|
|
67
|
-
* Task states from which a retry is permitted.
|
|
68
|
-
*/
|
|
69
|
-
const RETRYABLE_STATES: ReadonlySet<TaskLifecycleState> = new Set(['failed', 'cancelled']);
|
|
70
|
-
|
|
71
|
-
/**
|
|
72
|
-
* Terminal agent lifecycle states — agents in these states cannot be cancelled.
|
|
73
|
-
*/
|
|
74
|
-
const TERMINAL_AGENT_STATES: ReadonlySet<AgentLifecycleState> = new Set([
|
|
75
|
-
'completed',
|
|
76
|
-
'failed',
|
|
77
|
-
'cancelled',
|
|
78
|
-
]);
|
|
79
|
-
|
|
80
|
-
/**
|
|
81
|
-
* Agent states from which cancellation is permitted.
|
|
82
|
-
*/
|
|
83
|
-
const CANCELLABLE_AGENT_STATES: ReadonlySet<AgentLifecycleState> = new Set([
|
|
84
|
-
'spawning',
|
|
85
|
-
'running',
|
|
86
|
-
'awaiting_message',
|
|
87
|
-
'awaiting_tool',
|
|
88
|
-
'finalizing',
|
|
89
|
-
]);
|
|
90
|
-
|
|
91
|
-
export class OpsControlPlane {
|
|
92
|
-
private readonly _taskManager: TaskManager;
|
|
93
|
-
private readonly _bus: RuntimeEventBus;
|
|
94
|
-
private readonly _store: RuntimeStore;
|
|
95
|
-
private readonly _dispatch: DomainDispatch;
|
|
96
|
-
private readonly _sessionId: string;
|
|
97
|
-
|
|
98
|
-
public constructor(
|
|
99
|
-
taskManager: TaskManager,
|
|
100
|
-
bus: RuntimeEventBus,
|
|
101
|
-
store: RuntimeStore,
|
|
102
|
-
sessionId: string
|
|
103
|
-
) {
|
|
104
|
-
this._taskManager = taskManager;
|
|
105
|
-
this._bus = bus;
|
|
106
|
-
this._store = store;
|
|
107
|
-
this._dispatch = createDomainDispatch(store);
|
|
108
|
-
this._sessionId = sessionId;
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
// ── Task actions ──────────────────────────────────────────────────────────
|
|
112
|
-
|
|
113
|
-
/**
|
|
114
|
-
* Cancel a task. Only legal from states that allow → cancelled transition.
|
|
115
|
-
*
|
|
116
|
-
* @param taskId - Target task ID.
|
|
117
|
-
* @param note - Optional operator note for the audit log.
|
|
118
|
-
* @throws {OpsTargetNotFoundError} if the task doesn't exist.
|
|
119
|
-
* @throws {OpsIllegalActionError} if the task is in a terminal state.
|
|
120
|
-
*/
|
|
121
|
-
public cancelTask(taskId: string, note?: string): void {
|
|
122
|
-
const task = this._taskManager.getTask(taskId);
|
|
123
|
-
if (!task) {
|
|
124
|
-
throw new OpsTargetNotFoundError(taskId, 'task');
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
if (!task.cancellable || !canTransition(task.status, 'cancelled')) {
|
|
128
|
-
const err = new OpsIllegalActionError(taskId, 'cancel', task.status);
|
|
129
|
-
emitOpsTaskCancelled(this._bus, this._makeCtx(taskId), {
|
|
130
|
-
taskId,
|
|
131
|
-
reason: 'ops_cancel',
|
|
132
|
-
note,
|
|
133
|
-
outcome: 'rejected',
|
|
134
|
-
errorMessage: err.message,
|
|
135
|
-
});
|
|
136
|
-
throw err;
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
this._taskManager.cancelTask(taskId, { reason: note ?? 'operator-cancel' });
|
|
140
|
-
|
|
141
|
-
emitOpsTaskCancelled(this._bus, this._makeCtx(taskId), {
|
|
142
|
-
taskId,
|
|
143
|
-
reason: 'ops_cancel',
|
|
144
|
-
note,
|
|
145
|
-
outcome: 'success',
|
|
146
|
-
});
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
/**
|
|
150
|
-
* Pause a running task (transitions running → blocked).
|
|
151
|
-
*
|
|
152
|
-
* Only legal from the 'running' state.
|
|
153
|
-
*
|
|
154
|
-
* @param taskId - Target task ID.
|
|
155
|
-
* @param note - Optional operator note for the audit log.
|
|
156
|
-
* @throws {OpsTargetNotFoundError} if the task doesn't exist.
|
|
157
|
-
* @throws {OpsIllegalActionError} if the task is not running.
|
|
158
|
-
*/
|
|
159
|
-
public pauseTask(taskId: string, note?: string): void {
|
|
160
|
-
const task = this._taskManager.getTask(taskId);
|
|
161
|
-
if (!task) {
|
|
162
|
-
throw new OpsTargetNotFoundError(taskId, 'task');
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
if (!canTransition(task.status, 'blocked')) {
|
|
166
|
-
const err = new OpsIllegalActionError(taskId, 'pause', task.status);
|
|
167
|
-
emitOpsTaskPaused(this._bus, this._makeCtx(taskId), {
|
|
168
|
-
taskId,
|
|
169
|
-
reason: 'ops_pause',
|
|
170
|
-
note,
|
|
171
|
-
outcome: 'rejected',
|
|
172
|
-
errorMessage: err.message,
|
|
173
|
-
});
|
|
174
|
-
throw err;
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
this._taskManager.blockTask(taskId, note ?? 'operator-pause');
|
|
178
|
-
|
|
179
|
-
emitOpsTaskPaused(this._bus, this._makeCtx(taskId), {
|
|
180
|
-
taskId,
|
|
181
|
-
reason: 'ops_pause',
|
|
182
|
-
note,
|
|
183
|
-
outcome: 'success',
|
|
184
|
-
});
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
/**
|
|
188
|
-
* Resume a blocked task (transitions blocked → running).
|
|
189
|
-
*
|
|
190
|
-
* Only legal from the 'blocked' state.
|
|
191
|
-
*
|
|
192
|
-
* @param taskId - Target task ID.
|
|
193
|
-
* @param note - Optional operator note for the audit log.
|
|
194
|
-
* @throws {OpsTargetNotFoundError} if the task doesn't exist.
|
|
195
|
-
* @throws {OpsIllegalActionError} if the task is not blocked.
|
|
196
|
-
*/
|
|
197
|
-
public resumeTask(taskId: string, note?: string): void {
|
|
198
|
-
const task = this._taskManager.getTask(taskId);
|
|
199
|
-
if (!task) {
|
|
200
|
-
throw new OpsTargetNotFoundError(taskId, 'task');
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
if (!canTransition(task.status, 'running')) {
|
|
204
|
-
const err = new OpsIllegalActionError(taskId, 'resume', task.status);
|
|
205
|
-
emitOpsTaskResumed(this._bus, this._makeCtx(taskId), {
|
|
206
|
-
taskId,
|
|
207
|
-
reason: 'ops_resume',
|
|
208
|
-
note,
|
|
209
|
-
outcome: 'rejected',
|
|
210
|
-
errorMessage: err.message,
|
|
211
|
-
});
|
|
212
|
-
throw err;
|
|
213
|
-
}
|
|
214
|
-
|
|
215
|
-
this._taskManager.startTask(taskId);
|
|
216
|
-
|
|
217
|
-
emitOpsTaskResumed(this._bus, this._makeCtx(taskId), {
|
|
218
|
-
taskId,
|
|
219
|
-
reason: 'ops_resume',
|
|
220
|
-
note,
|
|
221
|
-
outcome: 'success',
|
|
222
|
-
});
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
/**
|
|
226
|
-
* Retry a failed task (transitions failed → queued by re-creating as queued).
|
|
227
|
-
*
|
|
228
|
-
* Re-queues the task via TaskManager, which clears terminal-state fields
|
|
229
|
-
* and transitions it back to 'queued'.
|
|
230
|
-
* This is only permitted from 'failed' or 'cancelled' states.
|
|
231
|
-
*
|
|
232
|
-
* @param taskId - Target task ID.
|
|
233
|
-
* @param note - Optional operator note for the audit log.
|
|
234
|
-
* @throws {OpsTargetNotFoundError} if the task doesn't exist.
|
|
235
|
-
* @throws {OpsIllegalActionError} if the task is not in a retryable state.
|
|
236
|
-
*/
|
|
237
|
-
public retryTask(taskId: string, note?: string): void {
|
|
238
|
-
const task = this._taskManager.getTask(taskId);
|
|
239
|
-
if (!task) {
|
|
240
|
-
throw new OpsTargetNotFoundError(taskId, 'task');
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
if (!RETRYABLE_STATES.has(task.status)) {
|
|
244
|
-
const err = new OpsIllegalActionError(taskId, 'retry', task.status);
|
|
245
|
-
emitOpsTaskRetried(this._bus, this._makeCtx(taskId), {
|
|
246
|
-
taskId,
|
|
247
|
-
reason: 'ops_retry',
|
|
248
|
-
note,
|
|
249
|
-
outcome: 'rejected',
|
|
250
|
-
errorMessage: err.message,
|
|
251
|
-
});
|
|
252
|
-
throw err;
|
|
253
|
-
}
|
|
254
|
-
|
|
255
|
-
// Route retry through TaskManager for consistent state management and event emission.
|
|
256
|
-
this._taskManager.retryTask(taskId);
|
|
257
|
-
|
|
258
|
-
emitOpsTaskRetried(this._bus, this._makeCtx(taskId), {
|
|
259
|
-
taskId,
|
|
260
|
-
reason: 'ops_retry',
|
|
261
|
-
note,
|
|
262
|
-
outcome: 'success',
|
|
263
|
-
});
|
|
264
|
-
}
|
|
265
|
-
|
|
266
|
-
// ── Agent actions ─────────────────────────────────────────────────────────
|
|
267
|
-
|
|
268
|
-
/**
|
|
269
|
-
* Cancel a running agent.
|
|
270
|
-
*
|
|
271
|
-
* Only legal for agents in non-terminal states (spawning, running,
|
|
272
|
-
* awaiting_message, awaiting_tool, finalizing).
|
|
273
|
-
*
|
|
274
|
-
* The agent state update is dispatched directly to the store since there is
|
|
275
|
-
* no AgentManager interface with lifecycle methods (agents are managed
|
|
276
|
-
* by their hosting subsystem). The store update signals the UI; the
|
|
277
|
-
* underlying subsystem must observe the store and act accordingly.
|
|
278
|
-
*
|
|
279
|
-
* @param agentId - Target agent ID.
|
|
280
|
-
* @param note - Optional operator note for the audit log.
|
|
281
|
-
* @throws {OpsTargetNotFoundError} if the agent doesn't exist.
|
|
282
|
-
* @throws {OpsIllegalActionError} if the agent is already in a terminal state.
|
|
283
|
-
*/
|
|
284
|
-
public cancelAgent(agentId: string, note?: string): void {
|
|
285
|
-
const state = this._store.getState();
|
|
286
|
-
const agent = state.agents.agents.get(agentId);
|
|
287
|
-
|
|
288
|
-
if (!agent) {
|
|
289
|
-
throw new OpsTargetNotFoundError(agentId, 'agent');
|
|
290
|
-
}
|
|
291
|
-
|
|
292
|
-
if (!CANCELLABLE_AGENT_STATES.has(agent.status)) {
|
|
293
|
-
const err = new OpsIllegalActionError(agentId, 'cancel', agent.status);
|
|
294
|
-
emitOpsAgentCancelled(this._bus, this._makeCtx(undefined, agentId), {
|
|
295
|
-
agentId,
|
|
296
|
-
reason: 'ops_agent_cancel',
|
|
297
|
-
note,
|
|
298
|
-
outcome: 'rejected',
|
|
299
|
-
errorMessage: err.message,
|
|
300
|
-
});
|
|
301
|
-
throw err;
|
|
302
|
-
}
|
|
303
|
-
|
|
304
|
-
this._dispatch.transitionRuntimeAgent(
|
|
305
|
-
agentId,
|
|
306
|
-
'cancelled',
|
|
307
|
-
{ endedAt: Date.now() },
|
|
308
|
-
'ops-control-plane',
|
|
309
|
-
);
|
|
310
|
-
|
|
311
|
-
emitOpsAgentCancelled(this._bus, this._makeCtx(undefined, agentId), {
|
|
312
|
-
agentId,
|
|
313
|
-
reason: 'ops_agent_cancel',
|
|
314
|
-
note,
|
|
315
|
-
outcome: 'success',
|
|
316
|
-
});
|
|
317
|
-
}
|
|
318
|
-
|
|
319
|
-
// ── Query helpers ─────────────────────────────────────────────────────────
|
|
320
|
-
|
|
321
|
-
/**
|
|
322
|
-
* Returns whether a task action is currently legal given its state.
|
|
323
|
-
* Used by the UI to conditionally render action controls.
|
|
324
|
-
*/
|
|
325
|
-
public canCancelTask(taskId: string): boolean {
|
|
326
|
-
const task = this._taskManager.getTask(taskId);
|
|
327
|
-
return task != null && task.cancellable && canTransition(task.status, 'cancelled');
|
|
328
|
-
}
|
|
329
|
-
|
|
330
|
-
public canPauseTask(taskId: string): boolean {
|
|
331
|
-
const task = this._taskManager.getTask(taskId);
|
|
332
|
-
return task != null && canTransition(task.status, 'blocked');
|
|
333
|
-
}
|
|
334
|
-
|
|
335
|
-
public canResumeTask(taskId: string): boolean {
|
|
336
|
-
const task = this._taskManager.getTask(taskId);
|
|
337
|
-
return task != null && canTransition(task.status, 'running');
|
|
338
|
-
}
|
|
339
|
-
|
|
340
|
-
public canRetryTask(taskId: string): boolean {
|
|
341
|
-
const task = this._taskManager.getTask(taskId);
|
|
342
|
-
if (!task) return false;
|
|
343
|
-
return task.status === 'failed' || task.status === 'cancelled';
|
|
344
|
-
}
|
|
345
|
-
|
|
346
|
-
public canCancelAgent(agentId: string): boolean {
|
|
347
|
-
const state = this._store.getState();
|
|
348
|
-
const agent = state.agents.agents.get(agentId);
|
|
349
|
-
return agent != null && CANCELLABLE_AGENT_STATES.has(agent.status);
|
|
350
|
-
}
|
|
351
|
-
|
|
352
|
-
// ── Private helpers ───────────────────────────────────────────────────────
|
|
353
|
-
|
|
354
|
-
private _makeCtx(taskId?: string, agentId?: string) {
|
|
355
|
-
return {
|
|
356
|
-
sessionId: this._sessionId,
|
|
357
|
-
source: 'ops-control-plane',
|
|
358
|
-
traceId: randomUUID(),
|
|
359
|
-
...(taskId !== undefined ? { taskId } : {}),
|
|
360
|
-
...(agentId !== undefined ? { agentId } : {}),
|
|
361
|
-
};
|
|
362
|
-
}
|
|
363
|
-
}
|