@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,208 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* AgentTaskAdapter — bridges agent sessions (AgentOrchestrator / WRFC agents)
|
|
3
|
-
* into the unified RuntimeTask registry.
|
|
4
|
-
*
|
|
5
|
-
* Each running agent gets a corresponding RuntimeTask of kind 'agent'. The
|
|
6
|
-
* adapter maps agent lifecycle state strings to task lifecycle transitions.
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
import { randomUUID } from 'node:crypto';
|
|
10
|
-
import { createDomainDispatch } from '../../store/index.ts';
|
|
11
|
-
import type { RuntimeStore, DomainDispatch } from '../../store/index.ts';
|
|
12
|
-
import type { RuntimeTask } from '@pellux/goodvibes-sdk/platform/runtime/store/domains/tasks';
|
|
13
|
-
import type { AgentLifecycleState } from '@pellux/goodvibes-sdk/platform/runtime/store/domains/agents';
|
|
14
|
-
|
|
15
|
-
/** Owner context for an agent task. */
|
|
16
|
-
export interface AgentOwner {
|
|
17
|
-
/** Session ID that spawned this agent. */
|
|
18
|
-
sessionId: string;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
/** Terminal agent lifecycle states that map to terminal task states. */
|
|
22
|
-
const TERMINAL_STATES: ReadonlySet<AgentLifecycleState> = new Set([
|
|
23
|
-
'completed',
|
|
24
|
-
'failed',
|
|
25
|
-
'cancelled',
|
|
26
|
-
]);
|
|
27
|
-
|
|
28
|
-
/** Active (non-terminal, non-queued) agent states that map to 'running'. */
|
|
29
|
-
const RUNNING_STATES: ReadonlySet<AgentLifecycleState> = new Set([
|
|
30
|
-
'running',
|
|
31
|
-
'awaiting_message',
|
|
32
|
-
'awaiting_tool',
|
|
33
|
-
'finalizing',
|
|
34
|
-
]);
|
|
35
|
-
|
|
36
|
-
/**
|
|
37
|
-
* Maps an agent lifecycle state string to a RuntimeTask lifecycle state.
|
|
38
|
-
*
|
|
39
|
-
* @param state - Agent lifecycle state from AgentLifecycleState.
|
|
40
|
-
* @returns Corresponding task lifecycle state.
|
|
41
|
-
*/
|
|
42
|
-
function mapAgentStateToTask(
|
|
43
|
-
state: AgentLifecycleState,
|
|
44
|
-
): 'queued' | 'running' | 'completed' | 'failed' | 'cancelled' {
|
|
45
|
-
if (state === 'spawning') return 'queued';
|
|
46
|
-
if (RUNNING_STATES.has(state)) return 'running';
|
|
47
|
-
if (state === 'completed') return 'completed';
|
|
48
|
-
if (state === 'failed') return 'failed';
|
|
49
|
-
if (state === 'cancelled') return 'cancelled';
|
|
50
|
-
return 'running'; // fallback for unknown states
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
/**
|
|
54
|
-
* Bridges agent sessions into the RuntimeTask registry.
|
|
55
|
-
*
|
|
56
|
-
* @example
|
|
57
|
-
* ```ts
|
|
58
|
-
* const adapter = new AgentTaskAdapter(store);
|
|
59
|
-
* const taskId = adapter.wrapAgent('agent_1', 'Fix the linting errors', { sessionId: 'sess_1' });
|
|
60
|
-
* adapter.handleAgentStateChange('agent_1', 'running');
|
|
61
|
-
* adapter.handleAgentStateChange('agent_1', 'completed');
|
|
62
|
-
* ```
|
|
63
|
-
*/
|
|
64
|
-
export class AgentTaskAdapter {
|
|
65
|
-
/** Maps agent ID → task ID. */
|
|
66
|
-
private readonly _agentToTask = new Map<string, string>();
|
|
67
|
-
/** Maps task ID → agent ID. */
|
|
68
|
-
private readonly _taskToAgent = new Map<string, string>();
|
|
69
|
-
|
|
70
|
-
private readonly _dispatch: DomainDispatch;
|
|
71
|
-
|
|
72
|
-
constructor(private readonly _store: RuntimeStore) {
|
|
73
|
-
this._dispatch = createDomainDispatch(_store);
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
// ── Core API ────────────────────────────────────────────────────────────────
|
|
77
|
-
|
|
78
|
-
/**
|
|
79
|
-
* Wrap an agent session as a RuntimeTask.
|
|
80
|
-
*
|
|
81
|
-
* @param agentId - Unique agent ID from the agent system.
|
|
82
|
-
* @param task - Human-readable description of what the agent is doing.
|
|
83
|
-
* @param owner - Session that spawned this agent.
|
|
84
|
-
* @returns The new task ID.
|
|
85
|
-
*/
|
|
86
|
-
wrapAgent(agentId: string, task: string, owner: AgentOwner): string {
|
|
87
|
-
// Idempotent: return existing task ID if already wrapped
|
|
88
|
-
const existing = this._agentToTask.get(agentId);
|
|
89
|
-
if (existing !== undefined) return existing;
|
|
90
|
-
|
|
91
|
-
const taskId = randomUUID();
|
|
92
|
-
const now = Date.now();
|
|
93
|
-
|
|
94
|
-
const runtimeTask: RuntimeTask = {
|
|
95
|
-
id: taskId,
|
|
96
|
-
kind: 'agent',
|
|
97
|
-
title: task.length > 80 ? `${task.slice(0, 77)}...` : task,
|
|
98
|
-
description: task,
|
|
99
|
-
status: 'queued',
|
|
100
|
-
owner: agentId,
|
|
101
|
-
cancellable: true,
|
|
102
|
-
childTaskIds: [],
|
|
103
|
-
queuedAt: now,
|
|
104
|
-
correlationId: owner.sessionId,
|
|
105
|
-
};
|
|
106
|
-
|
|
107
|
-
this._agentToTask.set(agentId, taskId);
|
|
108
|
-
this._taskToAgent.set(taskId, agentId);
|
|
109
|
-
|
|
110
|
-
this._upsertTask(runtimeTask);
|
|
111
|
-
return taskId;
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
/**
|
|
115
|
-
* Handle an agent lifecycle state change and transition the task accordingly.
|
|
116
|
-
*
|
|
117
|
-
* @param agentId - The agent whose state changed.
|
|
118
|
-
* @param state - New agent lifecycle state (AgentLifecycleState string).
|
|
119
|
-
*/
|
|
120
|
-
handleAgentStateChange(agentId: string, state: AgentLifecycleState): void {
|
|
121
|
-
const taskId = this._agentToTask.get(agentId);
|
|
122
|
-
if (taskId === undefined) return;
|
|
123
|
-
|
|
124
|
-
const agentState = state;
|
|
125
|
-
const taskStatus = mapAgentStateToTask(agentState);
|
|
126
|
-
|
|
127
|
-
this._transitionTask(taskId, taskStatus, {
|
|
128
|
-
isTerminal: TERMINAL_STATES.has(agentState),
|
|
129
|
-
error: agentState === 'failed' ? `Agent ${agentId} failed` : undefined,
|
|
130
|
-
});
|
|
131
|
-
|
|
132
|
-
// Clean up mappings once terminal
|
|
133
|
-
if (TERMINAL_STATES.has(agentState)) {
|
|
134
|
-
this._agentToTask.delete(agentId);
|
|
135
|
-
this._taskToAgent.delete(taskId);
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
/**
|
|
140
|
-
* Cancel an agent task by task ID.
|
|
141
|
-
* Marks the task as cancelled in the store. The caller is responsible for
|
|
142
|
-
* actually stopping the agent session.
|
|
143
|
-
*
|
|
144
|
-
* @param taskId - The RuntimeTask ID to cancel.
|
|
145
|
-
*/
|
|
146
|
-
cancelAgent(taskId: string): void {
|
|
147
|
-
const agentId = this._taskToAgent.get(taskId);
|
|
148
|
-
if (agentId === undefined) return;
|
|
149
|
-
|
|
150
|
-
this._transitionTask(taskId, 'cancelled', { isTerminal: true });
|
|
151
|
-
this._agentToTask.delete(agentId);
|
|
152
|
-
this._taskToAgent.delete(taskId);
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
/**
|
|
156
|
-
* Reconcile adapter state with an external agent registry snapshot.
|
|
157
|
-
*
|
|
158
|
-
* @param activeAgents - Current snapshot of active agents: agentId → task description.
|
|
159
|
-
* @param owner - Default owner context for auto-wrapped agents.
|
|
160
|
-
*/
|
|
161
|
-
sync(activeAgents: ReadonlyMap<string, string>, owner: AgentOwner = { sessionId: 'system' }): void {
|
|
162
|
-
const liveIds = new Set(activeAgents.keys());
|
|
163
|
-
|
|
164
|
-
// Wrap newly discovered agents
|
|
165
|
-
for (const [agentId, task] of activeAgents.entries()) {
|
|
166
|
-
if (!this._agentToTask.has(agentId)) {
|
|
167
|
-
this.wrapAgent(agentId, task, owner);
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
// Mark stale tracked agents as cancelled
|
|
172
|
-
const staleAgentIds: string[] = [];
|
|
173
|
-
for (const [agentId] of this._agentToTask.entries()) {
|
|
174
|
-
if (!liveIds.has(agentId)) staleAgentIds.push(agentId);
|
|
175
|
-
}
|
|
176
|
-
for (const agentId of staleAgentIds) {
|
|
177
|
-
const taskId = this._agentToTask.get(agentId)!;
|
|
178
|
-
this._transitionTask(taskId, 'cancelled', { isTerminal: true });
|
|
179
|
-
this._agentToTask.delete(agentId);
|
|
180
|
-
this._taskToAgent.delete(taskId);
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
// ── Private helpers ─────────────────────────────────────────────────────────
|
|
185
|
-
|
|
186
|
-
private _upsertTask(task: RuntimeTask): void {
|
|
187
|
-
this._dispatch.syncRuntimeTask(task, 'agent-adapter');
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
private _transitionTask(
|
|
191
|
-
taskId: string,
|
|
192
|
-
status: 'queued' | 'running' | 'completed' | 'failed' | 'cancelled',
|
|
193
|
-
opts: { isTerminal?: boolean; error?: string },
|
|
194
|
-
): void {
|
|
195
|
-
const current = this._store.getState().tasks.tasks.get(taskId);
|
|
196
|
-
const timestamp = Date.now();
|
|
197
|
-
this._dispatch.transitionRuntimeTask(
|
|
198
|
-
taskId,
|
|
199
|
-
status,
|
|
200
|
-
{
|
|
201
|
-
startedAt: status === 'running' && current?.startedAt === undefined ? timestamp : current?.startedAt,
|
|
202
|
-
endedAt: opts.isTerminal ? timestamp : current?.endedAt,
|
|
203
|
-
error: opts.error,
|
|
204
|
-
},
|
|
205
|
-
'agent-adapter',
|
|
206
|
-
);
|
|
207
|
-
}
|
|
208
|
-
}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Task adapter barrel — re-exports all subsystem-to-RuntimeTask bridge adapters.
|
|
3
|
-
*
|
|
4
|
-
* Each adapter converts a subsystem-specific task representation into the
|
|
5
|
-
* unified RuntimeTask model and handles lifecycle transitions.
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
export { ProcessTaskAdapter } from '@pellux/goodvibes-sdk/platform/runtime/tasks/adapters/process-adapter';
|
|
9
|
-
export type { ProcessOwner } from '@pellux/goodvibes-sdk/platform/runtime/tasks/adapters/process-adapter';
|
|
10
|
-
|
|
11
|
-
export { AgentTaskAdapter } from '@pellux/goodvibes-sdk/platform/runtime/tasks/adapters/agent-adapter';
|
|
12
|
-
export type { AgentOwner } from '@pellux/goodvibes-sdk/platform/runtime/tasks/adapters/agent-adapter';
|
|
13
|
-
|
|
14
|
-
export { AcpTaskAdapter } from '@pellux/goodvibes-sdk/platform/runtime/tasks/adapters/acp-adapter';
|
|
15
|
-
|
|
16
|
-
export { SchedulerTaskAdapter } from '@pellux/goodvibes-sdk/platform/runtime/tasks/adapters/scheduler-adapter';
|
|
@@ -1,214 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* ProcessTaskAdapter — bridges ProcessManager background processes into the
|
|
3
|
-
* unified RuntimeTask registry.
|
|
4
|
-
*
|
|
5
|
-
* Each spawned background process gets a corresponding RuntimeTask of kind
|
|
6
|
-
* 'exec'. The adapter tracks the pid→taskId mapping and reconciles state
|
|
7
|
-
* on demand via sync().
|
|
8
|
-
*
|
|
9
|
-
* NOTE: This adapter writes directly to the Zustand store for performance,
|
|
10
|
-
* bypassing TaskManager. Lifecycle validation is the caller's responsibility.
|
|
11
|
-
* This is intentional — adapters are authoritative sources for their subsystem.
|
|
12
|
-
*/
|
|
13
|
-
|
|
14
|
-
import { randomUUID } from 'node:crypto';
|
|
15
|
-
import { createDomainDispatch } from '../../store/index.ts';
|
|
16
|
-
import type { RuntimeStore, DomainDispatch } from '../../store/index.ts';
|
|
17
|
-
import type { RuntimeTask } from '@pellux/goodvibes-sdk/platform/runtime/store/domains/tasks';
|
|
18
|
-
import { ProcessManager } from '@pellux/goodvibes-sdk/platform/tools/shared/process-manager';
|
|
19
|
-
|
|
20
|
-
/** Owner context supplied when wrapping a process. */
|
|
21
|
-
export interface ProcessOwner {
|
|
22
|
-
/** Session ID that spawned this process. */
|
|
23
|
-
sessionId: string;
|
|
24
|
-
/** Optional agent ID that owns this process. */
|
|
25
|
-
agentId?: string;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* Bridges ProcessManager background processes into the RuntimeTask registry.
|
|
30
|
-
*
|
|
31
|
-
* @example
|
|
32
|
-
* ```ts
|
|
33
|
-
* const adapter = new ProcessTaskAdapter(store);
|
|
34
|
-
* const taskId = adapter.wrapProcess(proc.pid, 'npm run build', { sessionId: 'sess_1' });
|
|
35
|
-
* // later...
|
|
36
|
-
* adapter.handleProcessExit(proc.pid, 0);
|
|
37
|
-
* ```
|
|
38
|
-
*/
|
|
39
|
-
export class ProcessTaskAdapter {
|
|
40
|
-
/** Maps process internal ID (bg_N_ts) → task ID. */
|
|
41
|
-
private readonly _idToTask = new Map<string, string>();
|
|
42
|
-
/** Maps task ID → process internal ID. */
|
|
43
|
-
private readonly _taskToId = new Map<string, string>();
|
|
44
|
-
/** Maps pid → process internal ID (for exit handling). */
|
|
45
|
-
private readonly _pidToId = new Map<number, string>();
|
|
46
|
-
|
|
47
|
-
private readonly _manager: ProcessManager;
|
|
48
|
-
private readonly _dispatch: DomainDispatch;
|
|
49
|
-
|
|
50
|
-
constructor(
|
|
51
|
-
private readonly _store: RuntimeStore,
|
|
52
|
-
manager: ProcessManager,
|
|
53
|
-
) {
|
|
54
|
-
this._manager = manager;
|
|
55
|
-
this._dispatch = createDomainDispatch(_store);
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
// ── Core API ────────────────────────────────────────────────────────────────
|
|
59
|
-
|
|
60
|
-
/**
|
|
61
|
-
* Wrap a spawned process as a RuntimeTask.
|
|
62
|
-
*
|
|
63
|
-
* @param processId - The ProcessManager internal ID (process_id from spawn result).
|
|
64
|
-
* @param pid - OS process ID.
|
|
65
|
-
* @param command - The shell command string for display.
|
|
66
|
-
* @param owner - Session/agent that owns this process.
|
|
67
|
-
* @returns The new task ID.
|
|
68
|
-
*/
|
|
69
|
-
wrapProcess(
|
|
70
|
-
processId: string,
|
|
71
|
-
pid: number,
|
|
72
|
-
command: string,
|
|
73
|
-
owner: ProcessOwner,
|
|
74
|
-
): string {
|
|
75
|
-
// Idempotent: if already wrapped, return existing task ID
|
|
76
|
-
const existing = this._idToTask.get(processId);
|
|
77
|
-
if (existing !== undefined) return existing;
|
|
78
|
-
|
|
79
|
-
const taskId = randomUUID();
|
|
80
|
-
const now = Date.now();
|
|
81
|
-
|
|
82
|
-
const task: RuntimeTask = {
|
|
83
|
-
id: taskId,
|
|
84
|
-
kind: 'exec',
|
|
85
|
-
title: command.length > 80 ? `${command.slice(0, 77)}...` : command,
|
|
86
|
-
description: command,
|
|
87
|
-
status: 'running',
|
|
88
|
-
owner: owner.agentId ?? owner.sessionId,
|
|
89
|
-
cancellable: true,
|
|
90
|
-
childTaskIds: [],
|
|
91
|
-
queuedAt: now,
|
|
92
|
-
startedAt: now,
|
|
93
|
-
correlationId: owner.sessionId,
|
|
94
|
-
turnId: owner.agentId,
|
|
95
|
-
};
|
|
96
|
-
|
|
97
|
-
this._idToTask.set(processId, taskId);
|
|
98
|
-
this._taskToId.set(taskId, processId);
|
|
99
|
-
this._pidToId.set(pid, processId);
|
|
100
|
-
|
|
101
|
-
this._upsertTask(task);
|
|
102
|
-
return taskId;
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
/**
|
|
106
|
-
* Update task status when a process exits.
|
|
107
|
-
*
|
|
108
|
-
* @param pid - OS process ID that exited.
|
|
109
|
-
* @param exitCode - Process exit code (0 = success).
|
|
110
|
-
*/
|
|
111
|
-
handleProcessExit(pid: number, exitCode: number): void {
|
|
112
|
-
const processId = this._pidToId.get(pid);
|
|
113
|
-
if (processId === undefined) return;
|
|
114
|
-
|
|
115
|
-
const taskId = this._idToTask.get(processId);
|
|
116
|
-
if (taskId === undefined) return;
|
|
117
|
-
|
|
118
|
-
this._pidToId.delete(pid);
|
|
119
|
-
|
|
120
|
-
this._transitionTask(taskId, exitCode === 0 ? 'completed' : 'failed', {
|
|
121
|
-
exitCode,
|
|
122
|
-
error: exitCode !== 0 ? `Process exited with code ${exitCode}` : undefined,
|
|
123
|
-
});
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
/**
|
|
127
|
-
* Cancel a process task by task ID.
|
|
128
|
-
* Stops the underlying process via ProcessManager and marks the task cancelled.
|
|
129
|
-
*
|
|
130
|
-
* @param taskId - The RuntimeTask ID to cancel.
|
|
131
|
-
*/
|
|
132
|
-
cancelProcess(taskId: string): void {
|
|
133
|
-
const processId = this._taskToId.get(taskId);
|
|
134
|
-
if (processId === undefined) return;
|
|
135
|
-
|
|
136
|
-
// Look up the pid before stopping so we can clean up _pidToId
|
|
137
|
-
const entry = this._manager.getStatus(processId);
|
|
138
|
-
this._manager.stop(processId);
|
|
139
|
-
if (entry !== undefined) {
|
|
140
|
-
this._pidToId.delete(entry.pid);
|
|
141
|
-
}
|
|
142
|
-
this._transitionTask(taskId, 'cancelled', {});
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
/**
|
|
146
|
-
* Reconcile adapter state with the RuntimeTask registry.
|
|
147
|
-
*
|
|
148
|
-
* Scans all ProcessManager processes:
|
|
149
|
-
* - Wraps any un-tracked processes as new tasks (with a fallback owner).
|
|
150
|
-
* - Marks completed (done) processes as completed or failed in the task store.
|
|
151
|
-
* - Removes task mappings for processes that have been cleaned up.
|
|
152
|
-
*
|
|
153
|
-
* @param defaultOwner - Owner context used when auto-wrapping unknown processes.
|
|
154
|
-
*/
|
|
155
|
-
sync(defaultOwner: ProcessOwner = { sessionId: 'system' }): void {
|
|
156
|
-
const liveProcesses = this._manager.list();
|
|
157
|
-
const liveIds = new Set(liveProcesses.map((p) => p.id));
|
|
158
|
-
|
|
159
|
-
// Handle processes not yet tracked
|
|
160
|
-
for (const proc of liveProcesses) {
|
|
161
|
-
if (!this._idToTask.has(proc.id)) {
|
|
162
|
-
// Use the real pid from list() for accurate _pidToId tracking
|
|
163
|
-
this.wrapProcess(proc.id, proc.pid, proc.cmd, defaultOwner);
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
// Check if the process has finished
|
|
167
|
-
const entry = this._manager.getStatus(proc.id);
|
|
168
|
-
if (entry?.done) {
|
|
169
|
-
const taskId = this._idToTask.get(proc.id);
|
|
170
|
-
if (taskId !== undefined) {
|
|
171
|
-
const exitCode = entry.exitCode ?? 1;
|
|
172
|
-
this._transitionTask(taskId, exitCode === 0 ? 'completed' : 'failed', {
|
|
173
|
-
exitCode,
|
|
174
|
-
error: exitCode !== 0 ? `Process exited with code ${exitCode}` : undefined,
|
|
175
|
-
});
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
// Clean up stale mappings for processes no longer tracked by the manager
|
|
181
|
-
const staleProcessIds: string[] = [];
|
|
182
|
-
for (const [processId] of this._idToTask.entries()) {
|
|
183
|
-
if (!liveIds.has(processId)) staleProcessIds.push(processId);
|
|
184
|
-
}
|
|
185
|
-
for (const processId of staleProcessIds) {
|
|
186
|
-
const taskId = this._idToTask.get(processId)!;
|
|
187
|
-
this._idToTask.delete(processId);
|
|
188
|
-
this._taskToId.delete(taskId);
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
// ── Private helpers ─────────────────────────────────────────────────────────
|
|
193
|
-
|
|
194
|
-
private _upsertTask(task: RuntimeTask): void {
|
|
195
|
-
this._dispatch.syncRuntimeTask(task, 'process-adapter');
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
private _transitionTask(
|
|
199
|
-
taskId: string,
|
|
200
|
-
status: 'completed' | 'failed' | 'cancelled',
|
|
201
|
-
extras: { exitCode?: number; error?: string },
|
|
202
|
-
): void {
|
|
203
|
-
this._dispatch.transitionRuntimeTask(
|
|
204
|
-
taskId,
|
|
205
|
-
status,
|
|
206
|
-
{
|
|
207
|
-
endedAt: Date.now(),
|
|
208
|
-
exitCode: extras.exitCode,
|
|
209
|
-
error: extras.error,
|
|
210
|
-
},
|
|
211
|
-
'process-adapter',
|
|
212
|
-
);
|
|
213
|
-
}
|
|
214
|
-
}
|
|
@@ -1,193 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* SchedulerTaskAdapter — bridges TaskScheduler scheduled job executions into
|
|
3
|
-
* the unified RuntimeTask registry.
|
|
4
|
-
*
|
|
5
|
-
* Each time a scheduled task fires (i.e. TaskRunRecord is created), a
|
|
6
|
-
* corresponding RuntimeTask of kind 'scheduler' is registered. The adapter
|
|
7
|
-
* tracks runRecord agentId → task ID and handles completion via state sync.
|
|
8
|
-
*
|
|
9
|
-
* NOTE: This adapter writes directly to the Zustand store for performance,
|
|
10
|
-
* bypassing TaskManager. Lifecycle validation is the caller's responsibility.
|
|
11
|
-
* This is intentional — adapters are authoritative sources for their subsystem.
|
|
12
|
-
*/
|
|
13
|
-
|
|
14
|
-
import { randomUUID } from 'node:crypto';
|
|
15
|
-
import { createDomainDispatch } from '../../store/index.ts';
|
|
16
|
-
import type { RuntimeStore, DomainDispatch } from '../../store/index.ts';
|
|
17
|
-
import type { RuntimeTask } from '@pellux/goodvibes-sdk/platform/runtime/store/domains/tasks';
|
|
18
|
-
import type { TaskScheduler, ScheduledTask, TaskRunRecord } from '@pellux/goodvibes-sdk/platform/scheduler/scheduler';
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* Bridges TaskScheduler job executions into the RuntimeTask registry.
|
|
22
|
-
*
|
|
23
|
-
* The scheduler runs jobs that spawn agent sessions. Each run is tracked as a
|
|
24
|
-
* RuntimeTask of kind 'scheduler'. The run's agentId is used as the correlation
|
|
25
|
-
* key between the scheduler's TaskRunRecord and the RuntimeTask.
|
|
26
|
-
*
|
|
27
|
-
* @example
|
|
28
|
-
* ```ts
|
|
29
|
-
* const adapter = new SchedulerTaskAdapter(store);
|
|
30
|
-
* // When a scheduled task fires:
|
|
31
|
-
* const taskId = adapter.wrapScheduledRun(record, scheduledTask);
|
|
32
|
-
* // When the run completes:
|
|
33
|
-
* adapter.handleRunComplete(record.agentId, 'completed');
|
|
34
|
-
* ```
|
|
35
|
-
*/
|
|
36
|
-
export class SchedulerTaskAdapter {
|
|
37
|
-
/** Maps run agentId → task ID. */
|
|
38
|
-
private readonly _runToTask = new Map<string, string>();
|
|
39
|
-
/** Maps task ID → run agentId. */
|
|
40
|
-
private readonly _taskToRun = new Map<string, string>();
|
|
41
|
-
|
|
42
|
-
private readonly _dispatch: DomainDispatch;
|
|
43
|
-
|
|
44
|
-
constructor(private readonly _store: RuntimeStore) {
|
|
45
|
-
this._dispatch = createDomainDispatch(_store);
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
// ── Core API ────────────────────────────────────────────────────────────────
|
|
49
|
-
|
|
50
|
-
/**
|
|
51
|
-
* Wrap a scheduled task run as a RuntimeTask.
|
|
52
|
-
*
|
|
53
|
-
* @param record - The TaskRunRecord from the scheduler.
|
|
54
|
-
* @param scheduledTask - The parent ScheduledTask definition.
|
|
55
|
-
* @returns The new task ID.
|
|
56
|
-
*/
|
|
57
|
-
wrapScheduledRun(record: TaskRunRecord, scheduledTask: ScheduledTask): string {
|
|
58
|
-
// Idempotent: return existing if already wrapped
|
|
59
|
-
const existing = this._runToTask.get(record.agentId);
|
|
60
|
-
if (existing !== undefined) return existing;
|
|
61
|
-
|
|
62
|
-
const taskId = randomUUID();
|
|
63
|
-
const now = record.startedAt;
|
|
64
|
-
|
|
65
|
-
const task: RuntimeTask = {
|
|
66
|
-
id: taskId,
|
|
67
|
-
kind: 'scheduler',
|
|
68
|
-
title: `Scheduled: ${scheduledTask.name}`,
|
|
69
|
-
description: scheduledTask.prompt.length > 200
|
|
70
|
-
? `${scheduledTask.prompt.slice(0, 197)}...`
|
|
71
|
-
: scheduledTask.prompt,
|
|
72
|
-
status: record.status === 'running' ? 'running' : 'completed',
|
|
73
|
-
owner: `scheduler:${scheduledTask.id}`,
|
|
74
|
-
cancellable: record.status === 'running',
|
|
75
|
-
childTaskIds: [],
|
|
76
|
-
queuedAt: now,
|
|
77
|
-
startedAt: now,
|
|
78
|
-
endedAt: record.status !== 'running' ? Date.now() : undefined,
|
|
79
|
-
correlationId: record.agentId,
|
|
80
|
-
turnId: record.taskId,
|
|
81
|
-
error: record.error,
|
|
82
|
-
};
|
|
83
|
-
|
|
84
|
-
this._runToTask.set(record.agentId, taskId);
|
|
85
|
-
this._taskToRun.set(taskId, record.agentId);
|
|
86
|
-
|
|
87
|
-
this._upsertTask(task);
|
|
88
|
-
return taskId;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
/**
|
|
92
|
-
* Handle a scheduled run completion or failure.
|
|
93
|
-
*
|
|
94
|
-
* @param runAgentId - The agentId from the TaskRunRecord.
|
|
95
|
-
* @param status - Terminal status: 'completed' or 'failed'.
|
|
96
|
-
* @param error - Optional error message if status is 'failed'.
|
|
97
|
-
*/
|
|
98
|
-
handleRunComplete(
|
|
99
|
-
runAgentId: string,
|
|
100
|
-
status: 'completed' | 'failed',
|
|
101
|
-
error?: string,
|
|
102
|
-
): void {
|
|
103
|
-
const taskId = this._runToTask.get(runAgentId);
|
|
104
|
-
if (taskId === undefined) return;
|
|
105
|
-
|
|
106
|
-
this._transitionTask(taskId, status, { error });
|
|
107
|
-
this._runToTask.delete(runAgentId);
|
|
108
|
-
this._taskToRun.delete(taskId);
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
/**
|
|
112
|
-
* Cancel a scheduled run task by task ID.
|
|
113
|
-
* Marks the task as cancelled. The caller is responsible for disabling the
|
|
114
|
-
* scheduled task via TaskScheduler.setEnabled().
|
|
115
|
-
*
|
|
116
|
-
* @param taskId - The RuntimeTask ID to cancel.
|
|
117
|
-
*/
|
|
118
|
-
cancelScheduled(taskId: string): void {
|
|
119
|
-
const runAgentId = this._taskToRun.get(taskId);
|
|
120
|
-
if (runAgentId === undefined) return;
|
|
121
|
-
|
|
122
|
-
this._transitionTask(taskId, 'cancelled', {});
|
|
123
|
-
this._runToTask.delete(runAgentId);
|
|
124
|
-
this._taskToRun.delete(taskId);
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
/**
|
|
128
|
-
* Reconcile adapter state with the current TaskScheduler snapshot.
|
|
129
|
-
*
|
|
130
|
-
* Scans all run history records from the scheduler:
|
|
131
|
-
* - Wraps any un-tracked running jobs as new tasks.
|
|
132
|
-
* - Marks completed/failed jobs that are still showing as running.
|
|
133
|
-
*
|
|
134
|
-
* @param scheduler - The TaskScheduler instance to sync from.
|
|
135
|
-
*/
|
|
136
|
-
sync(scheduler: TaskScheduler): void {
|
|
137
|
-
const scheduledTasks = scheduler.list();
|
|
138
|
-
const scheduledTaskMap = new Map<string, ScheduledTask>(
|
|
139
|
-
scheduledTasks.map((t) => [t.id, t]),
|
|
140
|
-
);
|
|
141
|
-
|
|
142
|
-
const allHistory = scheduler.getAllHistory();
|
|
143
|
-
const runningRuns = allHistory.filter((r) => r.status === 'running');
|
|
144
|
-
|
|
145
|
-
for (const record of runningRuns) {
|
|
146
|
-
const scheduledTask = scheduledTaskMap.get(record.taskId);
|
|
147
|
-
if (!scheduledTask) continue;
|
|
148
|
-
|
|
149
|
-
if (!this._runToTask.has(record.agentId)) {
|
|
150
|
-
this.wrapScheduledRun(record, scheduledTask);
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
// Reconcile tracked runs that are no longer running.
|
|
155
|
-
// Build a Map for O(1) history lookups — acceptable O(n) build at current scheduler scale.
|
|
156
|
-
const historyByAgentId = new Map<string, TaskRunRecord>(allHistory.map((r) => [r.agentId, r]));
|
|
157
|
-
const runningAgentIds = new Set(runningRuns.map((r) => r.agentId));
|
|
158
|
-
const staleRunIds: string[] = [];
|
|
159
|
-
for (const [runAgentId] of this._runToTask.entries()) {
|
|
160
|
-
if (!runningAgentIds.has(runAgentId)) staleRunIds.push(runAgentId);
|
|
161
|
-
}
|
|
162
|
-
for (const runAgentId of staleRunIds) {
|
|
163
|
-
const taskId = this._runToTask.get(runAgentId)!;
|
|
164
|
-
const record = historyByAgentId.get(runAgentId);
|
|
165
|
-
const terminalStatus = record?.status === 'failed' ? 'failed' : 'completed';
|
|
166
|
-
this._transitionTask(taskId, terminalStatus, { error: record?.error });
|
|
167
|
-
this._runToTask.delete(runAgentId);
|
|
168
|
-
this._taskToRun.delete(taskId);
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
// ── Private helpers ─────────────────────────────────────────────────────────
|
|
173
|
-
|
|
174
|
-
private _upsertTask(task: RuntimeTask): void {
|
|
175
|
-
this._dispatch.syncRuntimeTask(task, 'scheduler-adapter');
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
private _transitionTask(
|
|
179
|
-
taskId: string,
|
|
180
|
-
status: 'completed' | 'failed' | 'cancelled',
|
|
181
|
-
opts: { error?: string },
|
|
182
|
-
): void {
|
|
183
|
-
this._dispatch.transitionRuntimeTask(
|
|
184
|
-
taskId,
|
|
185
|
-
status,
|
|
186
|
-
{
|
|
187
|
-
endedAt: Date.now(),
|
|
188
|
-
error: opts.error,
|
|
189
|
-
},
|
|
190
|
-
'scheduler-adapter',
|
|
191
|
-
);
|
|
192
|
-
}
|
|
193
|
-
}
|