@pellux/goodvibes-tui 0.18.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.goodvibes/GOODVIBES.md +35 -0
- package/.goodvibes/agents/reviewer.md +89 -0
- package/.goodvibes/skills/add-provider/SKILL.md +199 -0
- package/CHANGELOG.md +1681 -0
- package/README.md +1607 -0
- package/bin/goodvibes +66 -0
- package/docs/README.md +32 -0
- package/docs/foundation-artifacts/README.md +16 -0
- package/docs/foundation-artifacts/knowledge-graphql.graphql +397 -0
- package/docs/foundation-artifacts/knowledge-store.sql +183 -0
- package/docs/foundation-artifacts/operator-contract.json +55157 -0
- package/docs/foundation-artifacts/peer-contract.json +2384 -0
- package/package.json +114 -0
- package/scripts/postinstall.mjs +203 -0
- package/src/acp/connection.ts +447 -0
- package/src/acp/index.ts +7 -0
- package/src/acp/manager.ts +133 -0
- package/src/adapters/bluebubbles/index.ts +127 -0
- package/src/adapters/discord/index.ts +297 -0
- package/src/adapters/github/index.ts +73 -0
- package/src/adapters/google-chat/index.ts +119 -0
- package/src/adapters/imessage/index.ts +92 -0
- package/src/adapters/index.ts +15 -0
- package/src/adapters/matrix/index.ts +116 -0
- package/src/adapters/mattermost/index.ts +151 -0
- package/src/adapters/msteams/index.ts +180 -0
- package/src/adapters/ntfy/index.ts +118 -0
- package/src/adapters/signal/index.ts +92 -0
- package/src/adapters/slack/index.ts +323 -0
- package/src/adapters/telegram/index.ts +160 -0
- package/src/adapters/types.ts +97 -0
- package/src/adapters/webhook/index.ts +178 -0
- package/src/adapters/whatsapp/index.ts +135 -0
- package/src/agents/message-bus-core.ts +312 -0
- package/src/agents/message-bus.ts +2 -0
- package/src/agents/orchestrator-prompts.ts +351 -0
- package/src/agents/orchestrator-runner.ts +668 -0
- package/src/agents/orchestrator.ts +437 -0
- package/src/agents/session.ts +108 -0
- package/src/agents/worktree.ts +153 -0
- package/src/agents/wrfc-config.ts +47 -0
- package/src/agents/wrfc-controller.ts +747 -0
- package/src/agents/wrfc-gate-runtime.ts +75 -0
- package/src/agents/wrfc-reporting.ts +284 -0
- package/src/agents/wrfc-runtime-events.ts +150 -0
- package/src/agents/wrfc-types.ts +67 -0
- package/src/automation/delivery-manager.ts +368 -0
- package/src/automation/index.ts +72 -0
- package/src/automation/manager-runtime-delivery.ts +139 -0
- package/src/automation/manager-runtime-events.ts +131 -0
- package/src/automation/manager-runtime-execution.ts +511 -0
- package/src/automation/manager-runtime-helpers.ts +433 -0
- package/src/automation/manager-runtime-job-mutations.ts +175 -0
- package/src/automation/manager-runtime-reconcile.ts +148 -0
- package/src/automation/manager-runtime-scheduling.ts +189 -0
- package/src/automation/manager-runtime-sync.ts +54 -0
- package/src/automation/manager-runtime.ts +721 -0
- package/src/automation/manager.ts +10 -0
- package/src/automation/service.ts +242 -0
- package/src/channels/builtin/account-actions.ts +490 -0
- package/src/channels/builtin/accounts.ts +433 -0
- package/src/channels/builtin/contracts.ts +405 -0
- package/src/channels/builtin/plugins.ts +308 -0
- package/src/channels/builtin/rendering.ts +174 -0
- package/src/channels/builtin/setup-schema.ts +504 -0
- package/src/channels/builtin/shared.ts +96 -0
- package/src/channels/builtin/surfaces.ts +57 -0
- package/src/channels/builtin/targets.ts +693 -0
- package/src/channels/builtin-runtime.ts +443 -0
- package/src/channels/delivery/shared.ts +199 -0
- package/src/channels/delivery/strategies-bridge.ts +246 -0
- package/src/channels/delivery/strategies-core.ts +299 -0
- package/src/channels/delivery/strategies-enterprise.ts +178 -0
- package/src/channels/delivery/types.ts +59 -0
- package/src/channels/delivery-router.ts +127 -0
- package/src/channels/index.ts +77 -0
- package/src/channels/plugin-registry.ts +551 -0
- package/src/channels/provider-runtime.ts +330 -0
- package/src/channels/reply-pipeline.ts +522 -0
- package/src/channels/route-manager.ts +340 -0
- package/src/channels/surface-registry.ts +186 -0
- package/src/config/helper-model.ts +233 -0
- package/src/config/index.ts +193 -0
- package/src/config/manager.ts +404 -0
- package/src/config/secrets.ts +547 -0
- package/src/config/service-registry.ts +329 -0
- package/src/config/subscription-auth.ts +31 -0
- package/src/config/subscription-providers.ts +127 -0
- package/src/config/tool-llm.ts +110 -0
- package/src/control-plane/approval-broker.ts +351 -0
- package/src/control-plane/gateway.ts +713 -0
- package/src/control-plane/index.ts +54 -0
- package/src/control-plane/media-contract-schemas.ts +208 -0
- package/src/control-plane/method-catalog-admin.ts +136 -0
- package/src/control-plane/method-catalog-channels.ts +591 -0
- package/src/control-plane/method-catalog-control-automation.ts +475 -0
- package/src/control-plane/method-catalog-control-core.ts +594 -0
- package/src/control-plane/method-catalog-control.ts +8 -0
- package/src/control-plane/method-catalog-events.ts +74 -0
- package/src/control-plane/method-catalog-knowledge.ts +531 -0
- package/src/control-plane/method-catalog-media.ts +279 -0
- package/src/control-plane/method-catalog-runtime.ts +304 -0
- package/src/control-plane/method-catalog-shared.ts +223 -0
- package/src/control-plane/method-catalog.ts +242 -0
- package/src/control-plane/operator-contract-schemas-admin.ts +639 -0
- package/src/control-plane/operator-contract-schemas-channels.ts +375 -0
- package/src/control-plane/operator-contract-schemas-control.ts +226 -0
- package/src/control-plane/operator-contract-schemas-domains.ts +4 -0
- package/src/control-plane/operator-contract-schemas-knowledge.ts +582 -0
- package/src/control-plane/operator-contract-schemas-media.ts +297 -0
- package/src/control-plane/operator-contract-schemas-permissions.ts +100 -0
- package/src/control-plane/operator-contract-schemas-remote.ts +38 -0
- package/src/control-plane/operator-contract-schemas-runtime.ts +563 -0
- package/src/control-plane/operator-contract-schemas-shared.ts +85 -0
- package/src/control-plane/operator-contract-schemas-telemetry.ts +349 -0
- package/src/control-plane/operator-contract-schemas.ts +6 -0
- package/src/control-plane/operator-contract.ts +163 -0
- package/src/control-plane/session-broker.ts +780 -0
- package/src/core/compaction-sections.ts +492 -0
- package/src/core/compaction-types.ts +147 -0
- package/src/core/composer-state.ts +59 -0
- package/src/core/context-compaction.ts +542 -0
- package/src/core/conversation-compaction.ts +68 -0
- package/src/core/conversation-diff.ts +55 -0
- package/src/core/conversation-rendering.ts +343 -0
- package/src/core/conversation-utils.ts +72 -0
- package/src/core/conversation.ts +775 -0
- package/src/core/event-replay.ts +287 -0
- package/src/core/orchestrator-context-runtime.ts +407 -0
- package/src/core/orchestrator-follow-up-runtime.ts +134 -0
- package/src/core/orchestrator-runtime.ts +132 -0
- package/src/core/orchestrator-tool-runtime.ts +468 -0
- package/src/core/orchestrator-turn-helpers.ts +355 -0
- package/src/core/orchestrator-turn-loop.ts +443 -0
- package/src/core/orchestrator.ts +733 -0
- package/src/core/plan-command-handler.ts +169 -0
- package/src/core/system-message-router.ts +210 -0
- package/src/core/transcript-events/classify.ts +95 -0
- package/src/core/transcript-events/index.ts +15 -0
- package/src/daemon/cli.ts +88 -0
- package/src/daemon/control-plane.ts +522 -0
- package/src/daemon/facade-composition.ts +397 -0
- package/src/daemon/facade.ts +638 -0
- package/src/daemon/helpers.ts +74 -0
- package/src/daemon/http/router-route-contexts.ts +370 -0
- package/src/daemon/http/router.ts +531 -0
- package/src/daemon/http-listener.ts +301 -0
- package/src/daemon/index.ts +3 -0
- package/src/daemon/server.ts +1 -0
- package/src/daemon/service-manager.ts +413 -0
- package/src/daemon/surface-actions.ts +183 -0
- package/src/daemon/surface-delivery.ts +530 -0
- package/src/daemon/surface-policy.ts +60 -0
- package/src/daemon/transport-events.ts +110 -0
- package/src/daemon/types.ts +191 -0
- package/src/export/markdown.ts +213 -0
- package/src/export/session-export.ts +633 -0
- package/src/git/index.ts +1 -0
- package/src/git/service.ts +414 -0
- package/src/hooks/chain-engine.ts +414 -0
- package/src/hooks/dispatcher.ts +414 -0
- package/src/hooks/hook-api.ts +170 -0
- package/src/hooks/index.ts +48 -0
- package/src/hooks/runners/agent.ts +93 -0
- package/src/hooks/runners/prompt.ts +69 -0
- package/src/hooks/workbench.ts +360 -0
- package/src/input/autocomplete.ts +96 -0
- package/src/input/bookmark-modal.ts +115 -0
- package/src/input/command-registry.ts +300 -0
- package/src/input/commands/branch-runtime.ts +72 -0
- package/src/input/commands/config.ts +515 -0
- package/src/input/commands/control-room-runtime.ts +255 -0
- package/src/input/commands/conversation-runtime.ts +207 -0
- package/src/input/commands/diff-runtime.ts +161 -0
- package/src/input/commands/discovery-runtime.ts +45 -0
- package/src/input/commands/eval.ts +204 -0
- package/src/input/commands/experience-runtime.ts +278 -0
- package/src/input/commands/git-runtime.ts +81 -0
- package/src/input/commands/guidance-runtime.ts +101 -0
- package/src/input/commands/health-runtime.ts +434 -0
- package/src/input/commands/hooks-runtime.ts +148 -0
- package/src/input/commands/incident-runtime.ts +95 -0
- package/src/input/commands/integration-runtime.ts +394 -0
- package/src/input/commands/intelligence-runtime.ts +223 -0
- package/src/input/commands/knowledge.ts +368 -0
- package/src/input/commands/local-auth-runtime.ts +105 -0
- package/src/input/commands/local-provider-runtime.ts +170 -0
- package/src/input/commands/local-runtime.ts +458 -0
- package/src/input/commands/local-setup-review.ts +192 -0
- package/src/input/commands/local-setup-transfer.ts +134 -0
- package/src/input/commands/local-setup.ts +292 -0
- package/src/input/commands/managed-runtime.ts +208 -0
- package/src/input/commands/marketplace-runtime.ts +290 -0
- package/src/input/commands/mcp-runtime.ts +202 -0
- package/src/input/commands/memory-product-runtime.ts +111 -0
- package/src/input/commands/memory.ts +151 -0
- package/src/input/commands/notify-runtime.ts +83 -0
- package/src/input/commands/operator-panel-runtime.ts +141 -0
- package/src/input/commands/operator-runtime.ts +392 -0
- package/src/input/commands/permissions-runtime.ts +104 -0
- package/src/input/commands/planning-runtime.ts +97 -0
- package/src/input/commands/platform-access-runtime.ts +422 -0
- package/src/input/commands/platform-runtime.ts +6 -0
- package/src/input/commands/platform-sandbox-qemu.ts +137 -0
- package/src/input/commands/platform-sandbox-runtime.ts +406 -0
- package/src/input/commands/platform-sandbox-session.ts +128 -0
- package/src/input/commands/platform-services-runtime.ts +246 -0
- package/src/input/commands/policy-dispatch.ts +339 -0
- package/src/input/commands/policy.ts +17 -0
- package/src/input/commands/product-runtime.ts +351 -0
- package/src/input/commands/profile-sync-runtime.ts +99 -0
- package/src/input/commands/provider-accounts-runtime.ts +113 -0
- package/src/input/commands/provider.ts +363 -0
- package/src/input/commands/quit-shared.ts +162 -0
- package/src/input/commands/recall-bundle.ts +132 -0
- package/src/input/commands/recall-capture.ts +152 -0
- package/src/input/commands/recall-query.ts +229 -0
- package/src/input/commands/recall-review.ts +98 -0
- package/src/input/commands/recall-shared.ts +22 -0
- package/src/input/commands/remote-runtime-pool.ts +106 -0
- package/src/input/commands/remote-runtime-setup.ts +199 -0
- package/src/input/commands/remote-runtime.ts +531 -0
- package/src/input/commands/replay-runtime.ts +18 -0
- package/src/input/commands/runtime-services.ts +279 -0
- package/src/input/commands/schedule-runtime.ts +332 -0
- package/src/input/commands/services-runtime.ts +207 -0
- package/src/input/commands/session-content.ts +408 -0
- package/src/input/commands/session-workflow.ts +464 -0
- package/src/input/commands/session.ts +376 -0
- package/src/input/commands/settings-sync-runtime.ts +173 -0
- package/src/input/commands/share-runtime.ts +114 -0
- package/src/input/commands/shell-core.ts +320 -0
- package/src/input/commands/skills-runtime.ts +221 -0
- package/src/input/commands/subscription-runtime.ts +434 -0
- package/src/input/commands/tasks-runtime.ts +230 -0
- package/src/input/commands/teamwork-runtime.ts +374 -0
- package/src/input/commands/teleport-runtime.ts +57 -0
- package/src/input/commands/worktree-runtime.ts +137 -0
- package/src/input/commands.ts +127 -0
- package/src/input/file-picker.ts +192 -0
- package/src/input/handler-command-route.ts +106 -0
- package/src/input/handler-content-actions.ts +465 -0
- package/src/input/handler-feed-routes.ts +541 -0
- package/src/input/handler-feed.ts +361 -0
- package/src/input/handler-modal-routes.ts +335 -0
- package/src/input/handler-modal-stack.ts +237 -0
- package/src/input/handler-modal-token-routes.ts +272 -0
- package/src/input/handler-picker-routes.ts +416 -0
- package/src/input/handler-prompt-buffer.ts +320 -0
- package/src/input/handler-shortcuts.ts +195 -0
- package/src/input/handler-ui-state.ts +294 -0
- package/src/input/handler.ts +798 -0
- package/src/input/input-history.ts +267 -0
- package/src/input/keybindings.ts +256 -0
- package/src/input/model-picker.ts +730 -0
- package/src/input/panel-integration-actions.ts +77 -0
- package/src/input/profile-picker-modal.ts +222 -0
- package/src/input/search.ts +100 -0
- package/src/input/selection-modal.ts +163 -0
- package/src/input/selection.ts +135 -0
- package/src/input/session-picker-modal.ts +136 -0
- package/src/input/settings-modal.ts +718 -0
- package/src/input/submission-intent.ts +18 -0
- package/src/input/submission-router.ts +64 -0
- package/src/integrations/index.ts +42 -0
- package/src/integrations/notifier.ts +206 -0
- package/src/integrations/webhooks.ts +177 -0
- package/src/knowledge/consolidation.ts +346 -0
- package/src/knowledge/graphql.ts +324 -0
- package/src/knowledge/index.ts +60 -0
- package/src/knowledge/ingest-compile.ts +386 -0
- package/src/knowledge/ingest-context.ts +18 -0
- package/src/knowledge/ingest-inputs.ts +387 -0
- package/src/knowledge/ingest.ts +20 -0
- package/src/knowledge/internal.ts +257 -0
- package/src/knowledge/knowledge-api.ts +432 -0
- package/src/knowledge/lint.ts +121 -0
- package/src/knowledge/memory-sync.ts +62 -0
- package/src/knowledge/packet.ts +370 -0
- package/src/knowledge/scheduling.ts +283 -0
- package/src/knowledge/service.ts +715 -0
- package/src/main.ts +798 -0
- package/src/mcp/client.ts +383 -0
- package/src/mcp/index.ts +12 -0
- package/src/mcp/mcp-api.ts +90 -0
- package/src/mcp/registry.ts +508 -0
- package/src/media/builtin-image-understanding.ts +303 -0
- package/src/media/builtin-providers.ts +26 -0
- package/src/media/index.ts +18 -0
- package/src/multimodal/index.ts +13 -0
- package/src/multimodal/service.ts +492 -0
- package/src/panels/agent-inspector-panel.ts +515 -0
- package/src/panels/agent-inspector-shared.ts +94 -0
- package/src/panels/agent-logs-panel.ts +539 -0
- package/src/panels/agent-logs-shared.ts +129 -0
- package/src/panels/approval-panel.ts +169 -0
- package/src/panels/automation-control-panel.ts +253 -0
- package/src/panels/base-panel.ts +72 -0
- package/src/panels/builtin/agent.ts +88 -0
- package/src/panels/builtin/development.ts +111 -0
- package/src/panels/builtin/knowledge.ts +26 -0
- package/src/panels/builtin/operations.ts +385 -0
- package/src/panels/builtin/session.ts +61 -0
- package/src/panels/builtin/shared.ts +240 -0
- package/src/panels/builtin-panels.ts +23 -0
- package/src/panels/cockpit-panel.ts +183 -0
- package/src/panels/communication-panel.ts +191 -0
- package/src/panels/context-visualizer-panel.ts +199 -0
- package/src/panels/control-plane-panel.ts +266 -0
- package/src/panels/cost-tracker-panel.ts +444 -0
- package/src/panels/debug-panel.ts +432 -0
- package/src/panels/diff-panel.ts +518 -0
- package/src/panels/docs-panel.ts +283 -0
- package/src/panels/eval-panel.ts +399 -0
- package/src/panels/file-explorer-panel.ts +556 -0
- package/src/panels/file-preview-panel.ts +412 -0
- package/src/panels/forensics-panel.ts +364 -0
- package/src/panels/git-panel.ts +630 -0
- package/src/panels/hooks-panel.ts +274 -0
- package/src/panels/incident-review-panel.ts +247 -0
- package/src/panels/index.ts +48 -0
- package/src/panels/intelligence-panel.ts +176 -0
- package/src/panels/knowledge-panel.ts +328 -0
- package/src/panels/local-auth-panel.ts +146 -0
- package/src/panels/marketplace-panel.ts +223 -0
- package/src/panels/mcp-panel.ts +260 -0
- package/src/panels/memory-panel.ts +293 -0
- package/src/panels/ops-control-panel.ts +184 -0
- package/src/panels/ops-strategy-panel.ts +235 -0
- package/src/panels/orchestration-panel.ts +254 -0
- package/src/panels/panel-list-panel.ts +508 -0
- package/src/panels/panel-manager.ts +538 -0
- package/src/panels/panel-picker.ts +106 -0
- package/src/panels/plan-dashboard-panel.ts +272 -0
- package/src/panels/plugins-panel.ts +201 -0
- package/src/panels/policy-panel.ts +308 -0
- package/src/panels/polish.ts +668 -0
- package/src/panels/provider-account-snapshot.ts +259 -0
- package/src/panels/provider-accounts-panel.ts +221 -0
- package/src/panels/provider-health-domains.ts +211 -0
- package/src/panels/provider-health-panel.ts +725 -0
- package/src/panels/provider-health-tracker.ts +115 -0
- package/src/panels/provider-stats-panel.ts +366 -0
- package/src/panels/remote-panel.ts +449 -0
- package/src/panels/routes-panel.ts +228 -0
- package/src/panels/sandbox-panel.ts +289 -0
- package/src/panels/schedule-panel.ts +344 -0
- package/src/panels/search-focus.ts +32 -0
- package/src/panels/security-panel.ts +329 -0
- package/src/panels/services-panel.ts +271 -0
- package/src/panels/session-browser-panel.ts +399 -0
- package/src/panels/session-maintenance.ts +125 -0
- package/src/panels/settings-sync-panel.ts +164 -0
- package/src/panels/skills-panel.ts +475 -0
- package/src/panels/subscription-panel.ts +273 -0
- package/src/panels/symbol-outline-panel.ts +486 -0
- package/src/panels/system-messages-panel.ts +224 -0
- package/src/panels/tasks-panel.ts +448 -0
- package/src/panels/thinking-panel.ts +304 -0
- package/src/panels/token-budget-panel.ts +469 -0
- package/src/panels/tool-inspector-panel.ts +434 -0
- package/src/panels/types.ts +44 -0
- package/src/panels/watchers-panel.ts +241 -0
- package/src/panels/welcome-panel.ts +64 -0
- package/src/panels/worktree-panel.ts +180 -0
- package/src/panels/wrfc-panel.ts +480 -0
- package/src/permissions/briefs/build.ts +88 -0
- package/src/permissions/manager.ts +356 -0
- package/src/permissions/prompt.ts +184 -0
- package/src/plugins/api.ts +383 -0
- package/src/plugins/loader.ts +304 -0
- package/src/plugins/manager.ts +481 -0
- package/src/profiles/shape.ts +58 -0
- package/src/providers/amazon-bedrock-mantle.ts +50 -0
- package/src/providers/amazon-bedrock.ts +61 -0
- package/src/providers/anthropic-compat.ts +373 -0
- package/src/providers/anthropic-sdk-provider.ts +230 -0
- package/src/providers/anthropic-vertex.ts +59 -0
- package/src/providers/anthropic.ts +469 -0
- package/src/providers/auto-register.ts +417 -0
- package/src/providers/builtin-catalog.ts +326 -0
- package/src/providers/builtin-registry.ts +575 -0
- package/src/providers/cache-planner.ts +258 -0
- package/src/providers/capabilities.ts +601 -0
- package/src/providers/custom-loader.ts +425 -0
- package/src/providers/discovered-compat.ts +18 -0
- package/src/providers/discovered-factory.ts +61 -0
- package/src/providers/discovered-traits.ts +138 -0
- package/src/providers/gemini.ts +462 -0
- package/src/providers/github-copilot.ts +254 -0
- package/src/providers/index.ts +47 -0
- package/src/providers/interface.ts +185 -0
- package/src/providers/llama-cpp.ts +402 -0
- package/src/providers/lm-studio-helpers.ts +367 -0
- package/src/providers/lm-studio.ts +484 -0
- package/src/providers/model-catalog-cache.ts +221 -0
- package/src/providers/model-catalog-notifications.ts +97 -0
- package/src/providers/model-catalog-synthetic.ts +202 -0
- package/src/providers/model-catalog.ts +211 -0
- package/src/providers/model-limits.ts +280 -0
- package/src/providers/ollama.ts +469 -0
- package/src/providers/openai-codex.ts +472 -0
- package/src/providers/openai-compat.ts +615 -0
- package/src/providers/openai.ts +231 -0
- package/src/providers/optimizer.ts +381 -0
- package/src/providers/provider-api.ts +553 -0
- package/src/providers/registry-helpers.ts +34 -0
- package/src/providers/registry-models.ts +77 -0
- package/src/providers/registry-types.ts +67 -0
- package/src/providers/registry.ts +729 -0
- package/src/providers/runtime-metadata.ts +149 -0
- package/src/providers/runtime-snapshot.ts +130 -0
- package/src/providers/synthetic.ts +561 -0
- package/src/providers/tier-prompts.ts +84 -0
- package/src/providers/tool-formats.ts +414 -0
- package/src/renderer/agent-detail-modal.ts +285 -0
- package/src/renderer/autocomplete-overlay.ts +154 -0
- package/src/renderer/block-actions.ts +76 -0
- package/src/renderer/bookmark-modal.ts +101 -0
- package/src/renderer/bottom-bar.ts +58 -0
- package/src/renderer/buffer.ts +34 -0
- package/src/renderer/code-block.ts +373 -0
- package/src/renderer/compositor.ts +261 -0
- package/src/renderer/context-inspector.ts +219 -0
- package/src/renderer/conversation-layout.ts +67 -0
- package/src/renderer/conversation-overlays.ts +123 -0
- package/src/renderer/conversation-surface.ts +260 -0
- package/src/renderer/diff-view.ts +132 -0
- package/src/renderer/diff.ts +122 -0
- package/src/renderer/file-picker-overlay.ts +101 -0
- package/src/renderer/file-tree.ts +153 -0
- package/src/renderer/git-status.ts +89 -0
- package/src/renderer/help-overlay.ts +247 -0
- package/src/renderer/history-search-overlay.ts +73 -0
- package/src/renderer/layout-engine.ts +97 -0
- package/src/renderer/layout.ts +32 -0
- package/src/renderer/live-tail-modal.ts +156 -0
- package/src/renderer/markdown.ts +777 -0
- package/src/renderer/modal-factory.ts +467 -0
- package/src/renderer/modal-utils.ts +24 -0
- package/src/renderer/model-picker-overlay.ts +396 -0
- package/src/renderer/overlay-box.ts +165 -0
- package/src/renderer/overlay-viewport.ts +104 -0
- package/src/renderer/panel-composite.ts +80 -0
- package/src/renderer/panel-picker-overlay.ts +202 -0
- package/src/renderer/panel-tab-bar.ts +69 -0
- package/src/renderer/panel-workspace-bar.ts +38 -0
- package/src/renderer/process-indicator.ts +96 -0
- package/src/renderer/process-modal.ts +295 -0
- package/src/renderer/profile-picker-modal.ts +129 -0
- package/src/renderer/progress.ts +98 -0
- package/src/renderer/search-overlay.ts +54 -0
- package/src/renderer/selection-modal-overlay.ts +214 -0
- package/src/renderer/semantic-diff.ts +369 -0
- package/src/renderer/session-picker-modal.ts +127 -0
- package/src/renderer/settings-modal.ts +701 -0
- package/src/renderer/shell-surface.ts +88 -0
- package/src/renderer/surface-layout.ts +101 -0
- package/src/renderer/syntax-highlighter.ts +542 -0
- package/src/renderer/system-message.ts +83 -0
- package/src/renderer/tab-strip.ts +108 -0
- package/src/renderer/text-layout.ts +31 -0
- package/src/renderer/thinking.ts +17 -0
- package/src/renderer/tool-call.ts +233 -0
- package/src/renderer/ui-factory.ts +524 -0
- package/src/renderer/ui-primitives.ts +96 -0
- package/src/runtime/auth/inspection.ts +125 -0
- package/src/runtime/bootstrap-background.ts +147 -0
- package/src/runtime/bootstrap-command-context.ts +265 -0
- package/src/runtime/bootstrap-command-parts.ts +357 -0
- package/src/runtime/bootstrap-core.ts +375 -0
- package/src/runtime/bootstrap-helpers.ts +88 -0
- package/src/runtime/bootstrap-hook-bridge.ts +271 -0
- package/src/runtime/bootstrap-runtime-events.ts +254 -0
- package/src/runtime/bootstrap-services.ts +197 -0
- package/src/runtime/bootstrap-shell.ts +262 -0
- package/src/runtime/bootstrap.ts +488 -0
- package/src/runtime/compaction/index.ts +90 -0
- package/src/runtime/compaction/lifecycle.ts +167 -0
- package/src/runtime/compaction/manager.ts +474 -0
- package/src/runtime/compaction/quality-score.ts +279 -0
- package/src/runtime/compaction/resume-repair.ts +183 -0
- package/src/runtime/compaction/strategies/autocompact.ts +65 -0
- package/src/runtime/compaction/strategies/boundary-commit.ts +106 -0
- package/src/runtime/compaction/strategies/collapse.ts +90 -0
- package/src/runtime/compaction/strategies/index.ts +23 -0
- package/src/runtime/compaction/strategies/microcompact.ts +74 -0
- package/src/runtime/compaction/strategies/reactive.ts +89 -0
- package/src/runtime/compaction/types.ts +221 -0
- package/src/runtime/context.ts +158 -0
- package/src/runtime/diagnostics/actions.ts +776 -0
- package/src/runtime/diagnostics/index.ts +99 -0
- package/src/runtime/diagnostics/panels/agents.ts +252 -0
- package/src/runtime/diagnostics/panels/events.ts +188 -0
- package/src/runtime/diagnostics/panels/health.ts +242 -0
- package/src/runtime/diagnostics/panels/index.ts +24 -0
- package/src/runtime/diagnostics/panels/ops.ts +156 -0
- package/src/runtime/diagnostics/panels/policy.ts +176 -0
- package/src/runtime/diagnostics/panels/tasks.ts +251 -0
- package/src/runtime/diagnostics/panels/tool-calls.ts +267 -0
- package/src/runtime/diagnostics/provider.ts +262 -0
- package/src/runtime/ecosystem/catalog.ts +606 -0
- package/src/runtime/ecosystem/recommendations.ts +117 -0
- package/src/runtime/emitters/agents.ts +96 -0
- package/src/runtime/emitters/automation.ts +112 -0
- package/src/runtime/emitters/communication.ts +53 -0
- package/src/runtime/emitters/compaction.ts +161 -0
- package/src/runtime/emitters/control-plane.ts +65 -0
- package/src/runtime/emitters/deliveries.ts +65 -0
- package/src/runtime/emitters/forensics.ts +17 -0
- package/src/runtime/emitters/index.ts +59 -0
- package/src/runtime/emitters/knowledge.ts +129 -0
- package/src/runtime/emitters/mcp.ts +95 -0
- package/src/runtime/emitters/ops.ts +163 -0
- package/src/runtime/emitters/orchestration.ts +87 -0
- package/src/runtime/emitters/permissions.ts +98 -0
- package/src/runtime/emitters/planner.ts +23 -0
- package/src/runtime/emitters/plugins.ts +78 -0
- package/src/runtime/emitters/providers.ts +30 -0
- package/src/runtime/emitters/routes.ts +57 -0
- package/src/runtime/emitters/security.ts +53 -0
- package/src/runtime/emitters/session.ts +93 -0
- package/src/runtime/emitters/surfaces.ts +57 -0
- package/src/runtime/emitters/tasks.ts +69 -0
- package/src/runtime/emitters/tools.ts +140 -0
- package/src/runtime/emitters/transport.ts +78 -0
- package/src/runtime/emitters/turn.ts +155 -0
- package/src/runtime/emitters/ui.ts +57 -0
- package/src/runtime/emitters/watchers.ts +57 -0
- package/src/runtime/emitters/workflows.ts +79 -0
- package/src/runtime/eval/index.ts +48 -0
- package/src/runtime/eval/runner.ts +163 -0
- package/src/runtime/eval/suites.ts +264 -0
- package/src/runtime/events/domain-map.ts +148 -0
- package/src/runtime/events/index.ts +194 -0
- package/src/runtime/events/turn.ts +60 -0
- package/src/runtime/events/workflows.ts +17 -0
- package/src/runtime/forensics/collector.ts +693 -0
- package/src/runtime/forensics/index.ts +23 -0
- package/src/runtime/foundation-clients.ts +78 -0
- package/src/runtime/foundation-services.ts +96 -0
- package/src/runtime/guidance.ts +183 -0
- package/src/runtime/health/effect-handlers.ts +189 -0
- package/src/runtime/health/index.ts +70 -0
- package/src/runtime/health/wiring.ts +115 -0
- package/src/runtime/index.ts +174 -0
- package/src/runtime/integration/helpers.ts +640 -0
- package/src/runtime/lifecycle.ts +107 -0
- package/src/runtime/mcp/index.ts +68 -0
- package/src/runtime/mcp/manager.ts +513 -0
- package/src/runtime/network/inbound.ts +131 -0
- package/src/runtime/network/index.ts +30 -0
- package/src/runtime/network/outbound.ts +292 -0
- package/src/runtime/network/shared.ts +82 -0
- package/src/runtime/operator-client.ts +235 -0
- package/src/runtime/ops/control-plane.ts +363 -0
- package/src/runtime/ops/index.ts +122 -0
- package/src/runtime/ops/playbooks/index.ts +10 -0
- package/src/runtime/ops/playbooks/session-unrecoverable.ts +196 -0
- package/src/runtime/ops/playbooks/stuck-turn.ts +197 -0
- package/src/runtime/ops/runtime-context.ts +100 -0
- package/src/runtime/ops-api.ts +27 -0
- package/src/runtime/orchestration/spawn-policy.ts +83 -0
- package/src/runtime/peer-client.ts +404 -0
- package/src/runtime/perf/index.ts +57 -0
- package/src/runtime/perf/slo-collector.ts +375 -0
- package/src/runtime/permissions/index.ts +190 -0
- package/src/runtime/permissions/policy-runtime.ts +175 -0
- package/src/runtime/permissions/preflight.ts +101 -0
- package/src/runtime/permissions/rule-suggestions.ts +36 -0
- package/src/runtime/plugins/hot-reload.ts +221 -0
- package/src/runtime/plugins/index.ts +84 -0
- package/src/runtime/plugins/lifecycle.ts +95 -0
- package/src/runtime/plugins/manager.ts +474 -0
- package/src/runtime/plugins/manifest.ts +167 -0
- package/src/runtime/plugins/quarantine.ts +202 -0
- package/src/runtime/plugins/trust.ts +291 -0
- package/src/runtime/plugins/types.ts +205 -0
- package/src/runtime/provider-accounts/registry.ts +326 -0
- package/src/runtime/remote/distributed-runtime-contract-schemas.ts +386 -0
- package/src/runtime/remote/index.ts +488 -0
- package/src/runtime/remote/runner-registry.ts +438 -0
- package/src/runtime/remote/supervisor.ts +70 -0
- package/src/runtime/runtime-hook-api.ts +5 -0
- package/src/runtime/runtime-knowledge-api.ts +14 -0
- package/src/runtime/runtime-mcp-api.ts +5 -0
- package/src/runtime/runtime-ops-api.ts +86 -0
- package/src/runtime/runtime-provider-api.ts +18 -0
- package/src/runtime/sandbox/backend.ts +291 -0
- package/src/runtime/sandbox/manager.ts +364 -0
- package/src/runtime/sandbox/provisioning.ts +422 -0
- package/src/runtime/sandbox/session-registry.ts +289 -0
- package/src/runtime/services.ts +541 -0
- package/src/runtime/session-maintenance.ts +188 -0
- package/src/runtime/session-persistence.ts +288 -0
- package/src/runtime/session-return-context.ts +195 -0
- package/src/runtime/settings/control-plane-store.ts +258 -0
- package/src/runtime/settings/control-plane.ts +599 -0
- package/src/runtime/shell-command-extensions.ts +54 -0
- package/src/runtime/shell-command-ops.ts +207 -0
- package/src/runtime/shell-command-platform.ts +47 -0
- package/src/runtime/shell-command-services.ts +143 -0
- package/src/runtime/shell-command-workspace.ts +31 -0
- package/src/runtime/store/domains/conversation.ts +181 -0
- package/src/runtime/store/domains/domain-read-matrix.ts +17 -0
- package/src/runtime/store/domains/index.ts +222 -0
- package/src/runtime/store/domains/panels.ts +117 -0
- package/src/runtime/store/domains/permissions.ts +143 -0
- package/src/runtime/store/domains/ui-perf.ts +103 -0
- package/src/runtime/store/helpers/reducers/conversation.ts +228 -0
- package/src/runtime/store/helpers/reducers/lifecycle.ts +440 -0
- package/src/runtime/store/helpers/reducers/shared.ts +60 -0
- package/src/runtime/store/helpers/reducers/sync.ts +555 -0
- package/src/runtime/store/helpers/reducers.ts +30 -0
- package/src/runtime/store/index.ts +304 -0
- package/src/runtime/store/selectors/index.ts +354 -0
- package/src/runtime/store/state.ts +137 -0
- package/src/runtime/tasks/adapters/acp-adapter.ts +211 -0
- package/src/runtime/tasks/adapters/agent-adapter.ts +208 -0
- package/src/runtime/tasks/adapters/index.ts +16 -0
- package/src/runtime/tasks/adapters/process-adapter.ts +214 -0
- package/src/runtime/tasks/adapters/scheduler-adapter.ts +193 -0
- package/src/runtime/tasks/index.ts +68 -0
- package/src/runtime/tasks/manager.ts +415 -0
- package/src/runtime/telemetry/api-helpers.ts +517 -0
- package/src/runtime/telemetry/api.ts +768 -0
- package/src/runtime/telemetry/index.ts +178 -0
- package/src/runtime/telemetry/instrumentation/domain-bridge-agent-session.ts +440 -0
- package/src/runtime/telemetry/instrumentation/domain-bridge-plugin-mcp.ts +200 -0
- package/src/runtime/telemetry/instrumentation/domain-bridge-shared.ts +18 -0
- package/src/runtime/telemetry/instrumentation/domain-bridge-transport-task.ts +204 -0
- package/src/runtime/telemetry/instrumentation/domain-bridge.ts +125 -0
- package/src/runtime/telemetry/instrumentation/index.ts +67 -0
- package/src/runtime/tools/context.ts +114 -0
- package/src/runtime/tools/index.ts +46 -0
- package/src/runtime/tools/phased-executor.ts +448 -0
- package/src/runtime/tools/phases/budget.ts +130 -0
- package/src/runtime/tools/phases/execute.ts +69 -0
- package/src/runtime/tools/phases/index.ts +13 -0
- package/src/runtime/tools/phases/map-output.ts +98 -0
- package/src/runtime/tools/phases/permission.ts +133 -0
- package/src/runtime/tools/phases/posthook.ts +57 -0
- package/src/runtime/tools/phases/prehook.ts +68 -0
- package/src/runtime/tools/phases/validate.ts +53 -0
- package/src/runtime/transports/direct.ts +73 -0
- package/src/runtime/transports/http-helpers.ts +218 -0
- package/src/runtime/transports/http-types.ts +364 -0
- package/src/runtime/transports/http.ts +629 -0
- package/src/runtime/transports/realtime.ts +50 -0
- package/src/runtime/transports/remote-events.ts +16 -0
- package/src/runtime/transports/shared.ts +39 -0
- package/src/runtime/transports/ui-runtime-events.ts +35 -0
- package/src/runtime/ui/index.ts +39 -0
- package/src/runtime/ui/model-picker/data-provider.ts +182 -0
- package/src/runtime/ui/model-picker/health-enrichment.ts +228 -0
- package/src/runtime/ui/model-picker/index.ts +59 -0
- package/src/runtime/ui/model-picker/types.ts +149 -0
- package/src/runtime/ui/provider-health/data-provider.ts +244 -0
- package/src/runtime/ui/provider-health/fallback-visualizer.ts +69 -0
- package/src/runtime/ui/provider-health/index.ts +46 -0
- package/src/runtime/ui/provider-health/types.ts +146 -0
- package/src/runtime/ui-events.ts +46 -0
- package/src/runtime/ui-read-model-helpers.ts +32 -0
- package/src/runtime/ui-read-models-core.ts +95 -0
- package/src/runtime/ui-read-models-observability-maintenance.ts +81 -0
- package/src/runtime/ui-read-models-observability-options.ts +5 -0
- package/src/runtime/ui-read-models-observability-remote.ts +73 -0
- package/src/runtime/ui-read-models-observability-security.ts +172 -0
- package/src/runtime/ui-read-models-observability-system.ts +217 -0
- package/src/runtime/ui-read-models-observability.ts +59 -0
- package/src/runtime/ui-read-models-operations.ts +203 -0
- package/src/runtime/ui-read-models.ts +61 -0
- package/src/runtime/ui-service-queries.ts +114 -0
- package/src/runtime/ui-services.ts +163 -0
- package/src/runtime/worktree/registry.ts +252 -0
- package/src/scripts/process-messages.ts +42 -0
- package/src/sessions/manager.ts +388 -0
- package/src/shell/blocking-input.ts +89 -0
- package/src/shell/ui-openers.ts +163 -0
- package/src/state/file-watcher.ts +294 -0
- package/src/state/index.ts +56 -0
- package/src/state/knowledge-injection.ts +214 -0
- package/src/state/memory-embedding-http.ts +642 -0
- package/src/state/memory-embeddings.ts +312 -0
- package/src/state/memory-ingest.ts +132 -0
- package/src/state/memory-registry.ts +111 -0
- package/src/state/memory-store-helpers.ts +160 -0
- package/src/state/memory-store.ts +728 -0
- package/src/state/memory-vector-store.ts +418 -0
- package/src/templates/manager.ts +187 -0
- package/src/tools/agent/index.ts +610 -0
- package/src/tools/agent/manager.ts +476 -0
- package/src/tools/analyze/git-modes.ts +380 -0
- package/src/tools/analyze/index.ts +128 -0
- package/src/tools/channel/agent-tools.ts +16 -0
- package/src/tools/channel/index.ts +268 -0
- package/src/tools/control/index.ts +90 -0
- package/src/tools/edit/core.ts +619 -0
- package/src/tools/edit/index.ts +4 -0
- package/src/tools/edit/phased.ts +33 -0
- package/src/tools/fetch/index.ts +3 -0
- package/src/tools/fetch/phased.ts +34 -0
- package/src/tools/fetch/runtime.ts +499 -0
- package/src/tools/index.ts +186 -0
- package/src/tools/mcp/index.ts +190 -0
- package/src/tools/remote-trigger/index.ts +130 -0
- package/src/tools/repl/index.ts +318 -0
- package/src/tools/shared/auto-heal.ts +282 -0
- package/src/tools/state/index.ts +688 -0
- package/src/tools/web-search/index.ts +38 -0
- package/src/tools/write/index.ts +604 -0
- package/src/tools/write/phased.ts +41 -0
- package/src/types/generated/foundation-client-types.ts +22 -0
- package/src/types/sql-js.d.ts +15 -0
- package/src/utils/splash-lines.ts +46 -0
- package/src/version.ts +17 -0
- package/src/watchers/index.ts +11 -0
- package/src/watchers/registry.ts +517 -0
- package/src/web-search/index.ts +26 -0
- package/src/web-search/provider-registry.ts +64 -0
- package/src/web-search/providers/brave.ts +100 -0
- package/src/web-search/providers/duckduckgo.ts +270 -0
- package/src/web-search/providers/exa.ts +77 -0
- package/src/web-search/providers/firecrawl.ts +90 -0
- package/src/web-search/providers/perplexity.ts +86 -0
- package/src/web-search/providers/searxng.ts +88 -0
- package/src/web-search/providers/shared.ts +249 -0
- package/src/web-search/providers/tavily.ts +90 -0
- package/src/web-search/service.ts +142 -0
- package/src/widget/index.ts +2 -0
- package/src/widget/types.ts +9 -0
- package/src/widget/widget.ts +8 -0
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Evaluation Harness — built-in benchmark suites.
|
|
3
|
+
*
|
|
4
|
+
* These suites are the stable benchmark set checked in CI.
|
|
5
|
+
* Scenarios exercise production runtime paths and report real measurements.
|
|
6
|
+
*
|
|
7
|
+
* Each scenario's id must be stable across runs — it is used as the
|
|
8
|
+
* baseline key for regression detection.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import type { EvalScenario, EvalRawResult } from '@pellux/goodvibes-sdk/platform/runtime/eval/types';
|
|
12
|
+
import { createPerfMonitor } from '../perf/index.ts';
|
|
13
|
+
import { createInitialSurfacePerfState } from '@pellux/goodvibes-sdk/platform/runtime/store/domains/surface-perf';
|
|
14
|
+
|
|
15
|
+
// ── Helpers ───────────────────────────────────────────────────────────────────
|
|
16
|
+
|
|
17
|
+
/** Simulate a synthetic render cycle burst and return timing samples. */
|
|
18
|
+
function syntheticRenderCycles(count: number, targetMs: number): number[] {
|
|
19
|
+
const durations: number[] = [];
|
|
20
|
+
for (let i = 0; i < count; i++) {
|
|
21
|
+
// Simulate deterministic render work proportional to target
|
|
22
|
+
const durationMs = targetMs * (0.5 + (i / count) * 0.5);
|
|
23
|
+
durations.push(durationMs);
|
|
24
|
+
}
|
|
25
|
+
return durations;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
// ── Core Performance Suite ────────────────────────────────────────────────────
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Scenarios that validate the PerfMonitor + budget evaluation path.
|
|
32
|
+
* These use production PerfMonitor instances with real budget definitions.
|
|
33
|
+
*/
|
|
34
|
+
const corePerformanceScenarios: EvalScenario[] = [
|
|
35
|
+
{
|
|
36
|
+
id: 'core-perf:render-p95-under-budget',
|
|
37
|
+
name: 'Frame Render p95 Under Budget',
|
|
38
|
+
suite: 'core-performance',
|
|
39
|
+
description:
|
|
40
|
+
'Verifies that PerfMonitor correctly passes when render p95 stays under the 16ms budget.',
|
|
41
|
+
tags: ['latency', 'render', 'budget'],
|
|
42
|
+
async run(): Promise<EvalRawResult> {
|
|
43
|
+
const t0 = Date.now();
|
|
44
|
+
const monitor = createPerfMonitor();
|
|
45
|
+
const surfacePerf = createInitialSurfacePerfState();
|
|
46
|
+
|
|
47
|
+
// Inject fast render cycles (well under budget)
|
|
48
|
+
const durations = syntheticRenderCycles(60, 8); // 8ms average
|
|
49
|
+
const cycles = durations.map((durationMs, i) => ({
|
|
50
|
+
cycleId: i,
|
|
51
|
+
requestedAt: t0 + i * 16,
|
|
52
|
+
completedAt: t0 + i * 16 + durationMs,
|
|
53
|
+
durationMs,
|
|
54
|
+
overBudget: durationMs > 16,
|
|
55
|
+
}));
|
|
56
|
+
surfacePerf.recentCycles = cycles;
|
|
57
|
+
surfacePerf.heapUsedBytes = 50 * 1024 * 1024; // 50 MiB stable
|
|
58
|
+
|
|
59
|
+
const perfReport = monitor.evaluate({
|
|
60
|
+
surfacePerf,
|
|
61
|
+
extraMetrics: {
|
|
62
|
+
'event.queue.depth': 10,
|
|
63
|
+
'tool.executor.overhead.p95': 2,
|
|
64
|
+
'compaction.latency.p95': 100,
|
|
65
|
+
'slo.turn_start.p95': 800,
|
|
66
|
+
'slo.cancel.p95': 150,
|
|
67
|
+
'slo.reconnect_recovery.p95': 3000,
|
|
68
|
+
'slo.permission_decision.p95': 40,
|
|
69
|
+
},
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
return {
|
|
73
|
+
completed: true,
|
|
74
|
+
durationMs: Date.now() - t0,
|
|
75
|
+
perfReport,
|
|
76
|
+
safetyViolations: 0,
|
|
77
|
+
};
|
|
78
|
+
},
|
|
79
|
+
},
|
|
80
|
+
|
|
81
|
+
{
|
|
82
|
+
id: 'core-perf:slo-turn-start-latency',
|
|
83
|
+
name: 'SLO Turn Start Latency Under Budget',
|
|
84
|
+
suite: 'core-performance',
|
|
85
|
+
description:
|
|
86
|
+
'Verifies SLO gate for turn_start.p95 stays under the 2000ms budget.',
|
|
87
|
+
tags: ['latency', 'slo', 'turn'],
|
|
88
|
+
async run(): Promise<EvalRawResult> {
|
|
89
|
+
const t0 = Date.now();
|
|
90
|
+
const monitor = createPerfMonitor();
|
|
91
|
+
const surfacePerf = createInitialSurfacePerfState();
|
|
92
|
+
surfacePerf.heapUsedBytes = 60 * 1024 * 1024;
|
|
93
|
+
|
|
94
|
+
const perfReport = monitor.evaluate({
|
|
95
|
+
surfacePerf,
|
|
96
|
+
extraMetrics: {
|
|
97
|
+
'event.queue.depth': 50,
|
|
98
|
+
'tool.executor.overhead.p95': 3,
|
|
99
|
+
'compaction.latency.p95': 200,
|
|
100
|
+
'slo.turn_start.p95': 1200,
|
|
101
|
+
'slo.cancel.p95': 200,
|
|
102
|
+
'slo.reconnect_recovery.p95': 4000,
|
|
103
|
+
'slo.permission_decision.p95': 60,
|
|
104
|
+
},
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
return {
|
|
108
|
+
completed: true,
|
|
109
|
+
durationMs: Date.now() - t0,
|
|
110
|
+
perfReport,
|
|
111
|
+
safetyViolations: 0,
|
|
112
|
+
};
|
|
113
|
+
},
|
|
114
|
+
},
|
|
115
|
+
|
|
116
|
+
{
|
|
117
|
+
id: 'core-perf:memory-growth-stable',
|
|
118
|
+
name: 'Memory Growth Rate Stable',
|
|
119
|
+
suite: 'core-performance',
|
|
120
|
+
description:
|
|
121
|
+
'Verifies the memory growth budget passes when heap is stable.',
|
|
122
|
+
tags: ['memory', 'budget'],
|
|
123
|
+
async run(): Promise<EvalRawResult> {
|
|
124
|
+
const t0 = Date.now();
|
|
125
|
+
const monitor = createPerfMonitor();
|
|
126
|
+
const surfacePerf = createInitialSurfacePerfState();
|
|
127
|
+
|
|
128
|
+
// Simulate two consecutive evaluations with negligible heap growth
|
|
129
|
+
surfacePerf.heapUsedBytes = 80 * 1024 * 1024;
|
|
130
|
+
surfacePerf.lastMemorySampleAt = t0 - 60_000; // 1 minute ago
|
|
131
|
+
monitor.evaluate({ surfacePerf, extraMetrics: {} }); // prime the monitor
|
|
132
|
+
|
|
133
|
+
surfacePerf.heapUsedBytes = 80 * 1024 * 1024 + 512 * 1024; // +512 KiB over 1 min
|
|
134
|
+
surfacePerf.lastMemorySampleAt = t0;
|
|
135
|
+
|
|
136
|
+
const perfReport = monitor.evaluate({ surfacePerf, extraMetrics: {} });
|
|
137
|
+
|
|
138
|
+
return {
|
|
139
|
+
completed: true,
|
|
140
|
+
durationMs: Date.now() - t0,
|
|
141
|
+
perfReport,
|
|
142
|
+
safetyViolations: 0,
|
|
143
|
+
};
|
|
144
|
+
},
|
|
145
|
+
},
|
|
146
|
+
];
|
|
147
|
+
|
|
148
|
+
// ── Safety Baseline Suite ─────────────────────────────────────────────────────
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* Scenarios that validate safety evaluation paths.
|
|
152
|
+
* These check that the safety scorer correctly grades clean runs.
|
|
153
|
+
*/
|
|
154
|
+
const safetyBaselineScenarios: EvalScenario[] = [
|
|
155
|
+
{
|
|
156
|
+
id: 'safety:clean-run-no-violations',
|
|
157
|
+
name: 'Clean Run — No Safety Violations',
|
|
158
|
+
suite: 'safety-baseline',
|
|
159
|
+
description: 'Verifies a clean scenario run scores 100 on the safety dimension.',
|
|
160
|
+
tags: ['safety'],
|
|
161
|
+
async run(): Promise<EvalRawResult> {
|
|
162
|
+
const t0 = Date.now();
|
|
163
|
+
return {
|
|
164
|
+
completed: true,
|
|
165
|
+
durationMs: Date.now() - t0,
|
|
166
|
+
safetyViolations: 0,
|
|
167
|
+
};
|
|
168
|
+
},
|
|
169
|
+
},
|
|
170
|
+
|
|
171
|
+
{
|
|
172
|
+
id: 'safety:recovery-success',
|
|
173
|
+
name: 'Recovery Path — Succeeded',
|
|
174
|
+
suite: 'safety-baseline',
|
|
175
|
+
description: 'Validates that a successfully recovered scenario scores correctly on recovery dimension.',
|
|
176
|
+
tags: ['safety', 'recovery'],
|
|
177
|
+
async run(): Promise<EvalRawResult> {
|
|
178
|
+
const t0 = Date.now();
|
|
179
|
+
return {
|
|
180
|
+
completed: true,
|
|
181
|
+
durationMs: Date.now() - t0,
|
|
182
|
+
safetyViolations: 0,
|
|
183
|
+
recoverySucceeded: true,
|
|
184
|
+
};
|
|
185
|
+
},
|
|
186
|
+
},
|
|
187
|
+
|
|
188
|
+
{
|
|
189
|
+
id: 'safety:recovery-failure-score',
|
|
190
|
+
name: 'Recovery Path — Failed (Score Validation)',
|
|
191
|
+
suite: 'safety-baseline',
|
|
192
|
+
description:
|
|
193
|
+
'Validates that a failed recovery scenario scores below the recovery floor, ' +
|
|
194
|
+
'and that the gate correctly flags it.',
|
|
195
|
+
tags: ['safety', 'recovery'],
|
|
196
|
+
async run(): Promise<EvalRawResult> {
|
|
197
|
+
const t0 = Date.now();
|
|
198
|
+
// Intentionally reports a failed recovery to exercise the scorer path.
|
|
199
|
+
// The scenario itself completes; the low recovery score is expected.
|
|
200
|
+
return {
|
|
201
|
+
completed: true,
|
|
202
|
+
durationMs: Date.now() - t0,
|
|
203
|
+
safetyViolations: 0,
|
|
204
|
+
recoveryFailed: true,
|
|
205
|
+
};
|
|
206
|
+
},
|
|
207
|
+
},
|
|
208
|
+
];
|
|
209
|
+
|
|
210
|
+
// ── Cost & Token Suite ────────────────────────────────────────────────────────
|
|
211
|
+
|
|
212
|
+
const costTokenScenarios: EvalScenario[] = [
|
|
213
|
+
{
|
|
214
|
+
id: 'cost:no-token-usage',
|
|
215
|
+
name: 'No Token Usage (Score = 100)',
|
|
216
|
+
suite: 'cost-tokens',
|
|
217
|
+
description:
|
|
218
|
+
'Verifies that scenarios without token usage receive full cost score.',
|
|
219
|
+
tags: ['cost'],
|
|
220
|
+
async run(): Promise<EvalRawResult> {
|
|
221
|
+
const t0 = Date.now();
|
|
222
|
+
return {
|
|
223
|
+
completed: true,
|
|
224
|
+
durationMs: Date.now() - t0,
|
|
225
|
+
safetyViolations: 0,
|
|
226
|
+
};
|
|
227
|
+
},
|
|
228
|
+
},
|
|
229
|
+
|
|
230
|
+
{
|
|
231
|
+
id: 'cost:low-token-usage',
|
|
232
|
+
name: 'Low Token Usage — Under Target',
|
|
233
|
+
suite: 'cost-tokens',
|
|
234
|
+
description:
|
|
235
|
+
'Validates that minimal token usage stays within the cost budget.',
|
|
236
|
+
tags: ['cost', 'tokens'],
|
|
237
|
+
async run(): Promise<EvalRawResult> {
|
|
238
|
+
const t0 = Date.now();
|
|
239
|
+
return {
|
|
240
|
+
completed: true,
|
|
241
|
+
durationMs: Date.now() - t0,
|
|
242
|
+
tokens: { input: 500, output: 100 },
|
|
243
|
+
costUsd: 0.0005, // under $0.001 target
|
|
244
|
+
safetyViolations: 0,
|
|
245
|
+
};
|
|
246
|
+
},
|
|
247
|
+
},
|
|
248
|
+
];
|
|
249
|
+
|
|
250
|
+
// ── Registry ──────────────────────────────────────────────────────────────────
|
|
251
|
+
|
|
252
|
+
/**
|
|
253
|
+
* All built-in benchmark suites.
|
|
254
|
+
*
|
|
255
|
+
* Suite names are stable — used as keys in baselines.
|
|
256
|
+
*/
|
|
257
|
+
export const BUILTIN_SUITES: Record<string, EvalScenario[]> = {
|
|
258
|
+
'core-performance': corePerformanceScenarios,
|
|
259
|
+
'safety-baseline': safetyBaselineScenarios,
|
|
260
|
+
'cost-tokens': costTokenScenarios,
|
|
261
|
+
};
|
|
262
|
+
|
|
263
|
+
/** Flat list of all built-in scenarios (across all suites). */
|
|
264
|
+
export const ALL_SCENARIOS: EvalScenario[] = Object.values(BUILTIN_SUITES).flat();
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RuntimeEventMap — master mapping of all typed runtime event types to their payloads.
|
|
3
|
+
*
|
|
4
|
+
* Used by RuntimeEventBus for type-safe subscriptions. Combine all domain
|
|
5
|
+
* discriminated union members into a single flat map keyed by the type string.
|
|
6
|
+
*/
|
|
7
|
+
import type { SessionEvent } from '@pellux/goodvibes-sdk/platform/runtime/events/session';
|
|
8
|
+
import type { TurnEvent } from './turn.ts';
|
|
9
|
+
import type { ProviderEvent } from '@pellux/goodvibes-sdk/platform/runtime/events/providers';
|
|
10
|
+
import type { ToolEvent } from '@pellux/goodvibes-sdk/platform/runtime/events/tools';
|
|
11
|
+
import type { TaskEvent } from '@pellux/goodvibes-sdk/platform/runtime/events/tasks';
|
|
12
|
+
import type { AgentEvent } from '@pellux/goodvibes-sdk/platform/runtime/events/agents';
|
|
13
|
+
import type { WorkflowEvent } from './workflows.ts';
|
|
14
|
+
import type { OrchestrationEvent } from '@pellux/goodvibes-sdk/platform/runtime/events/orchestration';
|
|
15
|
+
import type { CommunicationEvent } from '@pellux/goodvibes-sdk/platform/runtime/events/communication';
|
|
16
|
+
import type { PlannerEvent } from '@pellux/goodvibes-sdk/platform/runtime/events/planner';
|
|
17
|
+
import type { PermissionEvent } from '@pellux/goodvibes-sdk/platform/runtime/events/permissions';
|
|
18
|
+
import type { PluginEvent } from '@pellux/goodvibes-sdk/platform/runtime/events/plugins';
|
|
19
|
+
import type { McpEvent } from '@pellux/goodvibes-sdk/platform/runtime/events/mcp';
|
|
20
|
+
import type { TransportEvent } from '@pellux/goodvibes-sdk/platform/runtime/events/transport';
|
|
21
|
+
import type { CompactionEvent } from '@pellux/goodvibes-sdk/platform/runtime/events/compaction';
|
|
22
|
+
import type { UIEvent } from '@pellux/goodvibes-sdk/platform/runtime/events/ui';
|
|
23
|
+
import type { OpsEvent } from '@pellux/goodvibes-sdk/platform/runtime/events/ops';
|
|
24
|
+
import type { ForensicsEvent } from '@pellux/goodvibes-sdk/platform/runtime/events/forensics';
|
|
25
|
+
import type { SecurityEvent } from '@pellux/goodvibes-sdk/platform/runtime/events/security';
|
|
26
|
+
import type { AutomationEvent } from '@pellux/goodvibes-sdk/platform/runtime/events/automation';
|
|
27
|
+
import type { RouteEvent } from '@pellux/goodvibes-sdk/platform/runtime/events/routes';
|
|
28
|
+
import type { ControlPlaneEvent } from '@pellux/goodvibes-sdk/platform/runtime/events/control-plane';
|
|
29
|
+
import type { DeliveryEvent } from '@pellux/goodvibes-sdk/platform/runtime/events/deliveries';
|
|
30
|
+
import type { WatcherEvent } from '@pellux/goodvibes-sdk/platform/runtime/events/watchers';
|
|
31
|
+
import type { SurfaceEvent } from '@pellux/goodvibes-sdk/platform/runtime/events/surfaces';
|
|
32
|
+
import type { KnowledgeEvent } from '@pellux/goodvibes-sdk/platform/runtime/events/knowledge';
|
|
33
|
+
|
|
34
|
+
/** Union of all runtime domain events. */
|
|
35
|
+
export type AnyRuntimeEvent =
|
|
36
|
+
| SessionEvent
|
|
37
|
+
| TurnEvent
|
|
38
|
+
| ProviderEvent
|
|
39
|
+
| ToolEvent
|
|
40
|
+
| TaskEvent
|
|
41
|
+
| AgentEvent
|
|
42
|
+
| WorkflowEvent
|
|
43
|
+
| OrchestrationEvent
|
|
44
|
+
| CommunicationEvent
|
|
45
|
+
| PlannerEvent
|
|
46
|
+
| PermissionEvent
|
|
47
|
+
| PluginEvent
|
|
48
|
+
| McpEvent
|
|
49
|
+
| TransportEvent
|
|
50
|
+
| CompactionEvent
|
|
51
|
+
| UIEvent
|
|
52
|
+
| OpsEvent
|
|
53
|
+
| ForensicsEvent
|
|
54
|
+
| SecurityEvent
|
|
55
|
+
| AutomationEvent
|
|
56
|
+
| RouteEvent
|
|
57
|
+
| ControlPlaneEvent
|
|
58
|
+
| DeliveryEvent
|
|
59
|
+
| WatcherEvent
|
|
60
|
+
| SurfaceEvent
|
|
61
|
+
| KnowledgeEvent;
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Utility type that maps an event type discriminant to its full event shape.
|
|
65
|
+
*
|
|
66
|
+
* Example:
|
|
67
|
+
* ```ts
|
|
68
|
+
* type Payload = RuntimeEventPayload<'TURN_SUBMITTED'>;
|
|
69
|
+
* // => { type: 'TURN_SUBMITTED'; turnId: string; prompt: string }
|
|
70
|
+
* ```
|
|
71
|
+
*/
|
|
72
|
+
export type RuntimeEventPayload<T extends AnyRuntimeEvent['type']> = Extract<
|
|
73
|
+
AnyRuntimeEvent,
|
|
74
|
+
{ type: T }
|
|
75
|
+
>;
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Domain labels for use with domain-scoped subscriptions.
|
|
79
|
+
*
|
|
80
|
+
* This is the source-of-truth vocabulary for runtime transport/event surfaces.
|
|
81
|
+
*/
|
|
82
|
+
export const RUNTIME_EVENT_DOMAINS = [
|
|
83
|
+
'session',
|
|
84
|
+
'turn',
|
|
85
|
+
'providers',
|
|
86
|
+
'tools',
|
|
87
|
+
'tasks',
|
|
88
|
+
'agents',
|
|
89
|
+
'workflows',
|
|
90
|
+
'orchestration',
|
|
91
|
+
'communication',
|
|
92
|
+
'planner',
|
|
93
|
+
'permissions',
|
|
94
|
+
'plugins',
|
|
95
|
+
'mcp',
|
|
96
|
+
'transport',
|
|
97
|
+
'compaction',
|
|
98
|
+
'ui',
|
|
99
|
+
'ops',
|
|
100
|
+
'forensics',
|
|
101
|
+
'security',
|
|
102
|
+
'automation',
|
|
103
|
+
'routes',
|
|
104
|
+
'control-plane',
|
|
105
|
+
'deliveries',
|
|
106
|
+
'watchers',
|
|
107
|
+
'surfaces',
|
|
108
|
+
'knowledge',
|
|
109
|
+
] as const;
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Domain label type for use with domain-scoped subscriptions.
|
|
113
|
+
*/
|
|
114
|
+
export type RuntimeEventDomain = typeof RUNTIME_EVENT_DOMAINS[number];
|
|
115
|
+
|
|
116
|
+
export function isRuntimeEventDomain(value: string): value is RuntimeEventDomain {
|
|
117
|
+
return (RUNTIME_EVENT_DOMAINS as readonly string[]).includes(value);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/** Map from domain label to its event union type. */
|
|
121
|
+
export type DomainEventMap = {
|
|
122
|
+
session: SessionEvent;
|
|
123
|
+
turn: TurnEvent;
|
|
124
|
+
providers: ProviderEvent;
|
|
125
|
+
tools: ToolEvent;
|
|
126
|
+
tasks: TaskEvent;
|
|
127
|
+
agents: AgentEvent;
|
|
128
|
+
workflows: WorkflowEvent;
|
|
129
|
+
orchestration: OrchestrationEvent;
|
|
130
|
+
communication: CommunicationEvent;
|
|
131
|
+
planner: PlannerEvent;
|
|
132
|
+
permissions: PermissionEvent;
|
|
133
|
+
plugins: PluginEvent;
|
|
134
|
+
mcp: McpEvent;
|
|
135
|
+
transport: TransportEvent;
|
|
136
|
+
compaction: CompactionEvent;
|
|
137
|
+
ui: UIEvent;
|
|
138
|
+
ops: OpsEvent;
|
|
139
|
+
forensics: ForensicsEvent;
|
|
140
|
+
security: SecurityEvent;
|
|
141
|
+
automation: AutomationEvent;
|
|
142
|
+
routes: RouteEvent;
|
|
143
|
+
'control-plane': ControlPlaneEvent;
|
|
144
|
+
deliveries: DeliveryEvent;
|
|
145
|
+
watchers: WatcherEvent;
|
|
146
|
+
surfaces: SurfaceEvent;
|
|
147
|
+
knowledge: KnowledgeEvent;
|
|
148
|
+
};
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runtime Events — barrel re-exports and RuntimeEventBus.
|
|
3
|
+
*
|
|
4
|
+
* Import from this module to access the typed event system:
|
|
5
|
+
* ```ts
|
|
6
|
+
* import { RuntimeEventBus, createEventEnvelope } from '../runtime/events/index.ts';
|
|
7
|
+
* ```
|
|
8
|
+
*/
|
|
9
|
+
import { logger } from '@pellux/goodvibes-sdk/platform/utils/logger';
|
|
10
|
+
import type { RuntimeEventEnvelope } from '@pellux/goodvibes-sdk/platform/runtime/events/envelope';
|
|
11
|
+
import type { AnyRuntimeEvent, RuntimeEventDomain, DomainEventMap } from './domain-map.ts';
|
|
12
|
+
import { summarizeError } from '@pellux/goodvibes-sdk/platform/utils/error-display';
|
|
13
|
+
|
|
14
|
+
export type { RuntimeEventEnvelope, EnvelopeContext } from '@pellux/goodvibes-sdk/platform/runtime/events/envelope';
|
|
15
|
+
export { createEventEnvelope } from '@pellux/goodvibes-sdk/platform/runtime/events/envelope';
|
|
16
|
+
export type { SessionEvent, SessionEventType } from '@pellux/goodvibes-sdk/platform/runtime/events/session';
|
|
17
|
+
export type { TurnEvent, TurnEventType } from './turn.ts';
|
|
18
|
+
export type { ProviderEvent, ProviderEventType } from '@pellux/goodvibes-sdk/platform/runtime/events/providers';
|
|
19
|
+
export type { ToolEvent, ToolEventType } from '@pellux/goodvibes-sdk/platform/runtime/events/tools';
|
|
20
|
+
export type { TaskEvent, TaskEventType } from '@pellux/goodvibes-sdk/platform/runtime/events/tasks';
|
|
21
|
+
export type { AgentEvent, AgentEventType } from '@pellux/goodvibes-sdk/platform/runtime/events/agents';
|
|
22
|
+
export type { WorkflowEvent, WorkflowEventType } from './workflows.ts';
|
|
23
|
+
export type { OrchestrationEvent, OrchestrationEventType, OrchestrationTaskContract } from '@pellux/goodvibes-sdk/platform/runtime/events/orchestration';
|
|
24
|
+
export type { CommunicationEvent, CommunicationEventType, CommunicationKind, CommunicationScope } from '@pellux/goodvibes-sdk/platform/runtime/events/communication';
|
|
25
|
+
export type { PlannerEvent, PlannerEventType } from '@pellux/goodvibes-sdk/platform/runtime/events/planner';
|
|
26
|
+
export type { PermissionEvent, PermissionEventType } from '@pellux/goodvibes-sdk/platform/runtime/events/permissions';
|
|
27
|
+
export type { PluginEvent, PluginEventType } from '@pellux/goodvibes-sdk/platform/runtime/events/plugins';
|
|
28
|
+
export type { McpEvent, McpEventType } from '@pellux/goodvibes-sdk/platform/runtime/events/mcp';
|
|
29
|
+
export type { TransportEvent, TransportEventType } from '@pellux/goodvibes-sdk/platform/runtime/events/transport';
|
|
30
|
+
export type { CompactionEvent, CompactionEventType } from '@pellux/goodvibes-sdk/platform/runtime/events/compaction';
|
|
31
|
+
export type { UIEvent, UIEventType } from '@pellux/goodvibes-sdk/platform/runtime/events/ui';
|
|
32
|
+
export type { OpsEvent, OpsEventType } from '@pellux/goodvibes-sdk/platform/runtime/events/ops';
|
|
33
|
+
export { RUNTIME_EVENT_DOMAINS, isRuntimeEventDomain } from './domain-map.ts';
|
|
34
|
+
export type { AnyRuntimeEvent, RuntimeEventPayload, RuntimeEventDomain, DomainEventMap } from './domain-map.ts';
|
|
35
|
+
export type { AutomationEvent, AutomationEventType, AutomationScheduleKind, AutomationExecutionMode, AutomationRunOutcome } from '@pellux/goodvibes-sdk/platform/runtime/events/automation';
|
|
36
|
+
export { AUTOMATION_SCHEDULE_KINDS, AUTOMATION_RUN_OUTCOMES } from '@pellux/goodvibes-sdk/platform/runtime/events/automation';
|
|
37
|
+
export type { RouteEvent, RouteEventType, RouteSurfaceKind, RouteTargetKind } from '@pellux/goodvibes-sdk/platform/runtime/events/routes';
|
|
38
|
+
export { ROUTE_SURFACE_KINDS, ROUTE_TARGET_KINDS } from '@pellux/goodvibes-sdk/platform/runtime/events/routes';
|
|
39
|
+
export type { ControlPlaneEvent, ControlPlaneEventType, ControlPlaneClientKind, ControlPlaneTransportKind, ControlPlanePrincipalKind } from '@pellux/goodvibes-sdk/platform/runtime/events/control-plane';
|
|
40
|
+
export { CONTROL_PLANE_CLIENT_KINDS, CONTROL_PLANE_TRANSPORT_KINDS, CONTROL_PLANE_PRINCIPAL_KINDS } from '@pellux/goodvibes-sdk/platform/runtime/events/control-plane';
|
|
41
|
+
export type { DeliveryEvent, DeliveryEventType, DeliveryKind } from '@pellux/goodvibes-sdk/platform/runtime/events/deliveries';
|
|
42
|
+
export { DELIVERY_KINDS } from '@pellux/goodvibes-sdk/platform/runtime/events/deliveries';
|
|
43
|
+
export type { WatcherEvent, WatcherEventType, WatcherSourceKind } from '@pellux/goodvibes-sdk/platform/runtime/events/watchers';
|
|
44
|
+
export { WATCHER_SOURCE_KINDS } from '@pellux/goodvibes-sdk/platform/runtime/events/watchers';
|
|
45
|
+
export type { SurfaceEvent, SurfaceEventType, SurfaceKind } from '@pellux/goodvibes-sdk/platform/runtime/events/surfaces';
|
|
46
|
+
export { SURFACE_KINDS } from '@pellux/goodvibes-sdk/platform/runtime/events/surfaces';
|
|
47
|
+
export type { KnowledgeEvent, KnowledgeEventType } from '@pellux/goodvibes-sdk/platform/runtime/events/knowledge';
|
|
48
|
+
|
|
49
|
+
/** Listener callback receiving a fully-formed envelope. */
|
|
50
|
+
export type EnvelopeListener<T extends AnyRuntimeEvent = AnyRuntimeEvent> = (
|
|
51
|
+
envelope: RuntimeEventEnvelope<T['type'], T>
|
|
52
|
+
) => void;
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Maximum listeners per channel before a potential memory leak warning is emitted.
|
|
56
|
+
*
|
|
57
|
+
* 100 is a generous threshold for a single event type or domain; normal usage
|
|
58
|
+
* rarely exceeds single-digit listeners. Exceeding this strongly suggests a
|
|
59
|
+
* subscriber is being registered without a corresponding unsubscribe.
|
|
60
|
+
*/
|
|
61
|
+
const MAX_LISTENERS = 100;
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* RuntimeEventBus — typed event bus for domain-structured runtime events.
|
|
65
|
+
*
|
|
66
|
+
* Supports two subscription modes:
|
|
67
|
+
* - `on(eventType, callback)` — subscribe to a specific event type
|
|
68
|
+
* - `onDomain(domain, callback)` — subscribe to all events in a domain
|
|
69
|
+
*
|
|
70
|
+
* All events are wrapped in a RuntimeEventEnvelope providing traceId,
|
|
71
|
+
* sessionId, timestamps, and source context.
|
|
72
|
+
*
|
|
73
|
+
* This is the authoritative event transport for runtime domain signaling.
|
|
74
|
+
*/
|
|
75
|
+
export class RuntimeEventBus {
|
|
76
|
+
/** Per-event-type listener sets. Keyed by the exact event type string. */
|
|
77
|
+
private readonly _listeners = new Map<AnyRuntimeEvent['type'], Set<EnvelopeListener>>();
|
|
78
|
+
/** Per-domain listener sets. Keyed by RuntimeEventDomain. */
|
|
79
|
+
private readonly _domainListeners = new Map<RuntimeEventDomain, Set<EnvelopeListener>>();
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Subscribe to a specific event type.
|
|
83
|
+
*
|
|
84
|
+
* @param eventType - The exact event type string to listen for.
|
|
85
|
+
* @param callback - Called with the full envelope on each emission.
|
|
86
|
+
* @returns An unsubscribe function.
|
|
87
|
+
*/
|
|
88
|
+
public on<T extends AnyRuntimeEvent>(
|
|
89
|
+
eventType: T['type'],
|
|
90
|
+
callback: EnvelopeListener<T>
|
|
91
|
+
): () => void {
|
|
92
|
+
if (!this._listeners.has(eventType)) {
|
|
93
|
+
this._listeners.set(eventType, new Set());
|
|
94
|
+
}
|
|
95
|
+
const set = this._listeners.get(eventType)!;
|
|
96
|
+
set.add(callback as EnvelopeListener);
|
|
97
|
+
if (set.size > MAX_LISTENERS) {
|
|
98
|
+
logger.warn('[RuntimeEventBus] possible listener leak detected', {
|
|
99
|
+
eventType,
|
|
100
|
+
count: set.size,
|
|
101
|
+
max: MAX_LISTENERS,
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
return () => this._off(eventType, callback as EnvelopeListener);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Subscribe to all events in a named domain.
|
|
109
|
+
*
|
|
110
|
+
* @param domain - Domain name (e.g. 'turn', 'tools', 'session').
|
|
111
|
+
* @param callback - Called with the full envelope for each domain event.
|
|
112
|
+
* @returns An unsubscribe function.
|
|
113
|
+
*/
|
|
114
|
+
public onDomain<D extends RuntimeEventDomain>(
|
|
115
|
+
domain: D,
|
|
116
|
+
callback: EnvelopeListener<DomainEventMap[D]>
|
|
117
|
+
): () => void {
|
|
118
|
+
if (!this._domainListeners.has(domain)) {
|
|
119
|
+
this._domainListeners.set(domain, new Set());
|
|
120
|
+
}
|
|
121
|
+
const set = this._domainListeners.get(domain)!;
|
|
122
|
+
set.add(callback as EnvelopeListener);
|
|
123
|
+
if (set.size > MAX_LISTENERS) {
|
|
124
|
+
logger.warn('[RuntimeEventBus] possible domain listener leak detected', {
|
|
125
|
+
domain,
|
|
126
|
+
count: set.size,
|
|
127
|
+
max: MAX_LISTENERS,
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
return () => this._offDomain(domain, callback as EnvelopeListener);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* Emit a runtime event envelope to all matching per-type and per-domain subscribers.
|
|
135
|
+
*
|
|
136
|
+
* @internal Callers MUST use the typed emitter wrapper functions from
|
|
137
|
+
* `src/runtime/emitters/` rather than calling this method directly.
|
|
138
|
+
* Direct usage bypasses domain-event type enforcement: TypeScript cannot
|
|
139
|
+
* statically link the `domain` argument to the `envelope` payload type due
|
|
140
|
+
* to union complexity limitations (TS2590), meaning mismatched pairs compile
|
|
141
|
+
* without error.
|
|
142
|
+
*
|
|
143
|
+
* @see emitTurnSubmitted, emitToolReceived, etc. in `src/runtime/emitters/`
|
|
144
|
+
*
|
|
145
|
+
* @param domain - Domain this event belongs to.
|
|
146
|
+
* @param envelope - The fully-formed envelope to dispatch.
|
|
147
|
+
*/
|
|
148
|
+
public emit(
|
|
149
|
+
domain: RuntimeEventDomain,
|
|
150
|
+
envelope: RuntimeEventEnvelope<AnyRuntimeEvent['type'], AnyRuntimeEvent>
|
|
151
|
+
): void {
|
|
152
|
+
// Dispatch to per-type listeners
|
|
153
|
+
const typeSet = this._listeners.get(envelope.type);
|
|
154
|
+
if (typeSet) {
|
|
155
|
+
for (const handler of typeSet) {
|
|
156
|
+
try {
|
|
157
|
+
handler(envelope as RuntimeEventEnvelope<AnyRuntimeEvent['type'], AnyRuntimeEvent>);
|
|
158
|
+
} catch (err) {
|
|
159
|
+
logger.error('[RuntimeEventBus] listener error', {
|
|
160
|
+
eventType: envelope.type,
|
|
161
|
+
error: summarizeError(err),
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
// Dispatch to per-domain listeners
|
|
167
|
+
const domainSet = this._domainListeners.get(domain);
|
|
168
|
+
if (domainSet) {
|
|
169
|
+
for (const handler of domainSet) {
|
|
170
|
+
try {
|
|
171
|
+
handler(envelope as RuntimeEventEnvelope<AnyRuntimeEvent['type'], AnyRuntimeEvent>);
|
|
172
|
+
} catch (err) {
|
|
173
|
+
logger.error('[RuntimeEventBus] domain listener error', {
|
|
174
|
+
domain,
|
|
175
|
+
eventType: envelope.type,
|
|
176
|
+
error: summarizeError(err),
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
private _off(eventType: AnyRuntimeEvent['type'], callback: EnvelopeListener): void {
|
|
184
|
+
const set = this._listeners.get(eventType);
|
|
185
|
+
set?.delete(callback);
|
|
186
|
+
if (set?.size === 0) this._listeners.delete(eventType);
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
private _offDomain(domain: RuntimeEventDomain, callback: EnvelopeListener): void {
|
|
190
|
+
const set = this._domainListeners.get(domain);
|
|
191
|
+
set?.delete(callback);
|
|
192
|
+
if (set?.size === 0) this._domainListeners.delete(domain);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TurnEvent — discriminated union covering all conversation turn lifecycle events.
|
|
3
|
+
*
|
|
4
|
+
* Maps to the typed runtime event contract for the domain.
|
|
5
|
+
*/
|
|
6
|
+
import type { PartialToolCall } from '../../providers/interface.ts';
|
|
7
|
+
|
|
8
|
+
export type TurnStopReason =
|
|
9
|
+
| 'completed'
|
|
10
|
+
| 'empty_response'
|
|
11
|
+
| 'preflight_failed'
|
|
12
|
+
| 'context_overflow'
|
|
13
|
+
| 'provider_exhausted'
|
|
14
|
+
| 'provider_error'
|
|
15
|
+
| 'hook_denied'
|
|
16
|
+
| 'tool_loop_circuit_breaker'
|
|
17
|
+
| 'cancelled'
|
|
18
|
+
| 'unexpected_error';
|
|
19
|
+
|
|
20
|
+
export type TurnEvent =
|
|
21
|
+
/** User prompt has been submitted for processing. */
|
|
22
|
+
| { type: 'TURN_SUBMITTED'; turnId: string; prompt: string }
|
|
23
|
+
/** Preflight checks (context, rate limits, etc.) passed. */
|
|
24
|
+
| { type: 'PREFLIGHT_OK'; turnId: string }
|
|
25
|
+
/** Preflight checks failed; turn will not proceed. */
|
|
26
|
+
| { type: 'PREFLIGHT_FAIL'; turnId: string; reason: string; stopReason: Extract<TurnStopReason, 'preflight_failed' | 'context_overflow'> }
|
|
27
|
+
/** Streaming response has begun. */
|
|
28
|
+
| { type: 'STREAM_START'; turnId: string }
|
|
29
|
+
/** An incremental content chunk arrived from the provider. */
|
|
30
|
+
| { type: 'STREAM_DELTA'; turnId: string; content: string; accumulated: string; reasoning?: string; toolCalls?: PartialToolCall[] }
|
|
31
|
+
/** Streaming has ended. */
|
|
32
|
+
| { type: 'STREAM_END'; turnId: string }
|
|
33
|
+
/** A provider chat call completed within the current turn iteration. */
|
|
34
|
+
| {
|
|
35
|
+
type: 'LLM_RESPONSE_RECEIVED';
|
|
36
|
+
turnId: string;
|
|
37
|
+
provider: string;
|
|
38
|
+
model: string;
|
|
39
|
+
content: string;
|
|
40
|
+
toolCallCount: number;
|
|
41
|
+
inputTokens: number;
|
|
42
|
+
outputTokens: number;
|
|
43
|
+
cacheReadTokens?: number;
|
|
44
|
+
cacheWriteTokens?: number;
|
|
45
|
+
}
|
|
46
|
+
/** A batch of tool calls is ready for execution. */
|
|
47
|
+
| { type: 'TOOL_BATCH_READY'; turnId: string; toolCalls: string[] }
|
|
48
|
+
/** All tool calls in the current batch have completed. */
|
|
49
|
+
| { type: 'TOOLS_DONE'; turnId: string }
|
|
50
|
+
/** Post-processing hooks (WRFC, formatters, etc.) have completed. */
|
|
51
|
+
| { type: 'POST_HOOKS_DONE'; turnId: string }
|
|
52
|
+
/** Turn completed successfully with a final response. */
|
|
53
|
+
| { type: 'TURN_COMPLETED'; turnId: string; response: string; stopReason: Extract<TurnStopReason, 'completed' | 'empty_response'> }
|
|
54
|
+
/** Turn failed with an error. */
|
|
55
|
+
| { type: 'TURN_ERROR'; turnId: string; error: string; stopReason: Exclude<TurnStopReason, 'completed' | 'empty_response' | 'cancelled'> }
|
|
56
|
+
/** Turn was cancelled by the user or system. */
|
|
57
|
+
| { type: 'TURN_CANCEL'; turnId: string; reason?: string; stopReason: Extract<TurnStopReason, 'cancelled'> };
|
|
58
|
+
|
|
59
|
+
/** All turn event type literals as a union. */
|
|
60
|
+
export type TurnEventType = TurnEvent['type'];
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WorkflowEvent — discriminated union for WRFC workflow lifecycle events.
|
|
3
|
+
*/
|
|
4
|
+
import type { WrfcState } from '../../agents/wrfc-types.ts';
|
|
5
|
+
|
|
6
|
+
export type WorkflowEvent =
|
|
7
|
+
| { type: 'WORKFLOW_CHAIN_CREATED'; chainId: string; task: string }
|
|
8
|
+
| { type: 'WORKFLOW_STATE_CHANGED'; chainId: string; from: WrfcState; to: WrfcState }
|
|
9
|
+
| { type: 'WORKFLOW_REVIEW_COMPLETED'; chainId: string; score: number; passed: boolean }
|
|
10
|
+
| { type: 'WORKFLOW_FIX_ATTEMPTED'; chainId: string; attempt: number; maxAttempts: number }
|
|
11
|
+
| { type: 'WORKFLOW_GATE_RESULT'; chainId: string; gate: string; passed: boolean }
|
|
12
|
+
| { type: 'WORKFLOW_CHAIN_PASSED'; chainId: string }
|
|
13
|
+
| { type: 'WORKFLOW_CHAIN_FAILED'; chainId: string; reason: string }
|
|
14
|
+
| { type: 'WORKFLOW_AUTO_COMMITTED'; chainId: string; commitHash?: string }
|
|
15
|
+
| { type: 'WORKFLOW_CASCADE_ABORTED'; chainId: string; reason: string };
|
|
16
|
+
|
|
17
|
+
export type WorkflowEventType = WorkflowEvent['type'];
|