@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,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* strategies/collapse.ts
|
|
3
|
+
*
|
|
4
|
+
* Collapse strategy — full context collapse into a single compacted summary
|
|
5
|
+
* message. This is the most aggressive strategy, used when token pressure
|
|
6
|
+
* exceeds 85% or when manually triggered.
|
|
7
|
+
*
|
|
8
|
+
* All messages are reduced to a structured handoff that preserves:
|
|
9
|
+
* - The original task context (if known)
|
|
10
|
+
* - Key decisions and outcomes
|
|
11
|
+
* - The most recent user/assistant exchange
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
import type { ProviderMessage } from '../../../providers/interface.ts';
|
|
15
|
+
import { estimateTokens } from '../../../core/compaction-types.ts';
|
|
16
|
+
import type { StrategyInput, StrategyOutput } from '../types.ts';
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Applies the collapse strategy: reduces all messages to a single structured
|
|
20
|
+
* handoff message that preserves the essential session context.
|
|
21
|
+
*
|
|
22
|
+
* @param input - Strategy input containing messages and context.
|
|
23
|
+
* @returns Strategy output with a single collapsed message.
|
|
24
|
+
*/
|
|
25
|
+
export function runCollapse(input: StrategyInput): StrategyOutput {
|
|
26
|
+
const startMs = Date.now();
|
|
27
|
+
const { messages, tokensBefore, sessionId, strategy } = input;
|
|
28
|
+
const warnings: string[] = [];
|
|
29
|
+
|
|
30
|
+
// Extract the last user/assistant exchange to preserve conversational context
|
|
31
|
+
const lastUserMsg = messages.findLast((m) => m.role === 'user');
|
|
32
|
+
const lastAssistantMsg = messages.findLast((m) => m.role === 'assistant');
|
|
33
|
+
|
|
34
|
+
const recentExchange: string[] = [];
|
|
35
|
+
if (lastUserMsg) {
|
|
36
|
+
const text = extractText(lastUserMsg);
|
|
37
|
+
if (text) recentExchange.push(`User: ${text.slice(0, 500)}`);
|
|
38
|
+
}
|
|
39
|
+
if (lastAssistantMsg) {
|
|
40
|
+
const text = extractText(lastAssistantMsg);
|
|
41
|
+
if (text) recentExchange.push(`Assistant: ${text.slice(0, 500)}`);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
const handoffLines: string[] = [
|
|
45
|
+
`[Session Collapse — ${new Date().toISOString()}]`,
|
|
46
|
+
`Session: ${sessionId}`,
|
|
47
|
+
`${messages.length} message(s) collapsed to reduce context from ~${tokensBefore} tokens.`,
|
|
48
|
+
'',
|
|
49
|
+
'## Most Recent Exchange',
|
|
50
|
+
recentExchange.length > 0
|
|
51
|
+
? recentExchange.join('\n')
|
|
52
|
+
: '(no user/assistant exchange found)',
|
|
53
|
+
'',
|
|
54
|
+
'## Context Note',
|
|
55
|
+
'The full conversation history has been collapsed. Please resume from the above context.',
|
|
56
|
+
];
|
|
57
|
+
|
|
58
|
+
const handoff: ProviderMessage = {
|
|
59
|
+
role: 'user',
|
|
60
|
+
content: [{ type: 'text', text: handoffLines.join('\n') }],
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
const compacted: ProviderMessage[] = [handoff];
|
|
64
|
+
const tokensAfter = estimateTokens(JSON.stringify(compacted));
|
|
65
|
+
|
|
66
|
+
if (tokensAfter >= tokensBefore) {
|
|
67
|
+
warnings.push('collapse: compacted output is not smaller than input; possible data issue');
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
return {
|
|
71
|
+
messages: compacted,
|
|
72
|
+
tokensAfter,
|
|
73
|
+
summary: `Collapse: ${messages.length} messages → 1 handoff message (~${tokensAfter} tokens).`,
|
|
74
|
+
strategy,
|
|
75
|
+
durationMs: Date.now() - startMs,
|
|
76
|
+
warnings,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/** Extracts plain text from a ProviderMessage. */
|
|
81
|
+
function extractText(msg: ProviderMessage): string {
|
|
82
|
+
if (typeof msg.content === 'string') return msg.content;
|
|
83
|
+
if (Array.isArray(msg.content)) {
|
|
84
|
+
return msg.content
|
|
85
|
+
.filter((b): b is { type: 'text'; text: string } => b.type === 'text')
|
|
86
|
+
.map((b) => b.text)
|
|
87
|
+
.join(' ');
|
|
88
|
+
}
|
|
89
|
+
return '';
|
|
90
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* strategies/index.ts
|
|
3
|
+
*
|
|
4
|
+
* Barrel re-export for all compaction strategy modules.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
export { runMicrocompact } from './microcompact.ts';
|
|
8
|
+
export { runCollapse } from './collapse.ts';
|
|
9
|
+
export { runAutocompact } from './autocompact.ts';
|
|
10
|
+
export { runReactive } from './reactive.ts';
|
|
11
|
+
export { createBoundaryCommit, validateBoundaryCommit } from './boundary-commit.ts';
|
|
12
|
+
export type { BoundaryCommitOptions } from './boundary-commit.ts';
|
|
13
|
+
export {
|
|
14
|
+
computeQualityScore,
|
|
15
|
+
describeScore,
|
|
16
|
+
escalateStrategy,
|
|
17
|
+
LOW_QUALITY_THRESHOLD,
|
|
18
|
+
} from '../quality-score.ts';
|
|
19
|
+
export type {
|
|
20
|
+
CompactionQualityScore,
|
|
21
|
+
CompactionQualityGrade,
|
|
22
|
+
SemanticRetentionSignals,
|
|
23
|
+
} from '../quality-score.ts';
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* strategies/microcompact.ts
|
|
3
|
+
*
|
|
4
|
+
* Micro-compaction strategy — lightweight token reduction by summarising only
|
|
5
|
+
* the oldest turns in the conversation, preserving recent messages intact.
|
|
6
|
+
*
|
|
7
|
+
* This is the lowest-latency strategy: no LLM call, purely structural.
|
|
8
|
+
* It drops assistant/tool messages beyond a configurable "keep recent" window
|
|
9
|
+
* and prepends a short handoff note summarising what was dropped.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import type { ProviderMessage } from '../../../providers/interface.ts';
|
|
13
|
+
import { estimateTokens } from '../../../core/compaction-types.ts';
|
|
14
|
+
import type { StrategyInput, StrategyOutput } from '../types.ts';
|
|
15
|
+
|
|
16
|
+
/** Number of recent messages preserved without modification. */
|
|
17
|
+
const DEFAULT_KEEP_RECENT = 20;
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Applies micro-compaction: keep the last N messages, drop earlier ones,
|
|
21
|
+
* and prepend a brief handoff note.
|
|
22
|
+
*
|
|
23
|
+
* @param input - Strategy input containing messages and context.
|
|
24
|
+
* @returns Strategy output with compacted messages and token estimates.
|
|
25
|
+
*/
|
|
26
|
+
export function runMicrocompact(input: StrategyInput): StrategyOutput {
|
|
27
|
+
const startMs = Date.now();
|
|
28
|
+
const { messages, tokensBefore, strategy } = input;
|
|
29
|
+
|
|
30
|
+
const keepRecent = DEFAULT_KEEP_RECENT;
|
|
31
|
+
const warnings: string[] = [];
|
|
32
|
+
|
|
33
|
+
if (messages.length <= keepRecent) {
|
|
34
|
+
// Nothing to compact — return messages unchanged
|
|
35
|
+
warnings.push('microcompact: message count within keep window; no reduction applied');
|
|
36
|
+
return {
|
|
37
|
+
messages: [...messages] as ProviderMessage[],
|
|
38
|
+
tokensAfter: tokensBefore,
|
|
39
|
+
summary: 'No compaction applied — message count within keep window.',
|
|
40
|
+
strategy,
|
|
41
|
+
durationMs: Date.now() - startMs,
|
|
42
|
+
warnings,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
const kept = messages.slice(-keepRecent) as ProviderMessage[];
|
|
47
|
+
const droppedCount = messages.length - keepRecent;
|
|
48
|
+
|
|
49
|
+
const handoff: ProviderMessage = {
|
|
50
|
+
role: 'user',
|
|
51
|
+
content: [
|
|
52
|
+
{
|
|
53
|
+
type: 'text',
|
|
54
|
+
text: [
|
|
55
|
+
`[Session Micro-Compaction]`,
|
|
56
|
+
`${droppedCount} earlier message(s) were summarised to reduce context size.`,
|
|
57
|
+
`The conversation continues from the most recent ${keepRecent} messages.`,
|
|
58
|
+
].join('\n'),
|
|
59
|
+
},
|
|
60
|
+
],
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
const compacted: ProviderMessage[] = [handoff, ...kept];
|
|
64
|
+
const tokensAfter = estimateTokens(JSON.stringify(compacted));
|
|
65
|
+
|
|
66
|
+
return {
|
|
67
|
+
messages: compacted,
|
|
68
|
+
tokensAfter,
|
|
69
|
+
summary: `Micro-compaction: dropped ${droppedCount} messages, kept ${keepRecent} recent.`,
|
|
70
|
+
strategy,
|
|
71
|
+
durationMs: Date.now() - startMs,
|
|
72
|
+
warnings,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* strategies/reactive.ts
|
|
3
|
+
*
|
|
4
|
+
* Reactive compaction strategy — emergency compaction triggered when the
|
|
5
|
+
* provider returns a prompt-too-long error.
|
|
6
|
+
*
|
|
7
|
+
* This strategy must shrink the context aggressively and immediately, with
|
|
8
|
+
* minimal latency. It uses a fixed-percentage drop that guarantees the
|
|
9
|
+
* compacted context fits within a conservative safety margin (50% of the
|
|
10
|
+
* context window).
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import type { ProviderMessage } from '../../../providers/interface.ts';
|
|
14
|
+
import { estimateTokens } from '../../../core/compaction-types.ts';
|
|
15
|
+
import type { StrategyInput, StrategyOutput } from '../types.ts';
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Target fraction of context window to fill after reactive compaction.
|
|
19
|
+
* Keeping below 50% provides a comfortable buffer for the next turn.
|
|
20
|
+
*/
|
|
21
|
+
const REACTIVE_TARGET_FRACTION = 0.45;
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Applies reactive compaction to handle a prompt-too-long error.
|
|
25
|
+
*
|
|
26
|
+
* Drops messages from the oldest end until the estimated token count
|
|
27
|
+
* falls below `contextWindow * REACTIVE_TARGET_FRACTION`, then prepends
|
|
28
|
+
* a reactive handoff note.
|
|
29
|
+
*
|
|
30
|
+
* @param input - Strategy input. `input.meta.limit` may carry the provider's
|
|
31
|
+
* reported token limit for logging purposes.
|
|
32
|
+
* @returns Strategy output with a drastically reduced message list.
|
|
33
|
+
*/
|
|
34
|
+
export function runReactive(input: StrategyInput): StrategyOutput {
|
|
35
|
+
const startMs = Date.now();
|
|
36
|
+
const { messages, tokensBefore, contextWindow, strategy, meta } = input;
|
|
37
|
+
const warnings: string[] = [];
|
|
38
|
+
|
|
39
|
+
const targetTokens = Math.floor(contextWindow * REACTIVE_TARGET_FRACTION);
|
|
40
|
+
const providerLimit = typeof meta?.['limit'] === 'number' ? meta['limit'] : null;
|
|
41
|
+
|
|
42
|
+
// Pre-compute per-message token estimates, then use a running sum (O(n) not O(n²))
|
|
43
|
+
const perMessageTokens = (messages as ProviderMessage[]).map((m) =>
|
|
44
|
+
estimateTokens(JSON.stringify(m)),
|
|
45
|
+
);
|
|
46
|
+
let totalTokens = perMessageTokens.reduce((a, b) => a + b, 0);
|
|
47
|
+
let cutIndex = 0;
|
|
48
|
+
while (cutIndex < messages.length - 1 && totalTokens > targetTokens) {
|
|
49
|
+
totalTokens -= perMessageTokens[cutIndex];
|
|
50
|
+
cutIndex++;
|
|
51
|
+
}
|
|
52
|
+
const remaining: ProviderMessage[] = (messages as ProviderMessage[]).slice(cutIndex);
|
|
53
|
+
|
|
54
|
+
const droppedCount = messages.length - remaining.length;
|
|
55
|
+
|
|
56
|
+
if (droppedCount === 0) {
|
|
57
|
+
warnings.push('reactive: could not reduce context below target; context may still exceed limit');
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
const handoffLines: string[] = [
|
|
61
|
+
'[Reactive Compaction — Context Overflow Recovery]',
|
|
62
|
+
`Provider returned prompt-too-long${providerLimit !== null ? ` (limit: ${providerLimit} tokens)` : ''}.`,
|
|
63
|
+
`${droppedCount} message(s) dropped to recover from overflow.`,
|
|
64
|
+
`Estimated tokens before: ${tokensBefore}, target: ≤${targetTokens}.`,
|
|
65
|
+
];
|
|
66
|
+
|
|
67
|
+
const handoff: ProviderMessage = {
|
|
68
|
+
role: 'user',
|
|
69
|
+
content: [{ type: 'text', text: handoffLines.join('\n') }],
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
const compacted: ProviderMessage[] = [handoff, ...remaining];
|
|
73
|
+
const tokensAfter = estimateTokens(JSON.stringify(compacted));
|
|
74
|
+
|
|
75
|
+
if (tokensAfter > targetTokens) {
|
|
76
|
+
warnings.push(
|
|
77
|
+
`reactive: final token estimate (${tokensAfter}) still exceeds target (${targetTokens})`,
|
|
78
|
+
);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
return {
|
|
82
|
+
messages: compacted,
|
|
83
|
+
tokensAfter,
|
|
84
|
+
summary: `Reactive compaction: dropped ${droppedCount} messages to recover from overflow (~${tokensAfter} tokens remaining).`,
|
|
85
|
+
strategy,
|
|
86
|
+
durationMs: Date.now() - startMs,
|
|
87
|
+
warnings,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* types.ts
|
|
3
|
+
*
|
|
4
|
+
* Core types for the session compaction lifecycle engine.
|
|
5
|
+
*
|
|
6
|
+
* These are distinct from `src/core/compaction-types.ts` (the prompt compaction
|
|
7
|
+
* section types). This module defines the *lifecycle* layer: state machine
|
|
8
|
+
* states, strategies, boundary commits, and repair records.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import type { ProviderMessage } from '../../providers/interface.ts';
|
|
12
|
+
import type { CompactionQualityScore } from './quality-score.ts';
|
|
13
|
+
|
|
14
|
+
export type { CompactionQualityScore };
|
|
15
|
+
|
|
16
|
+
// ---------------------------------------------------------------------------
|
|
17
|
+
// Compaction lifecycle states
|
|
18
|
+
// ---------------------------------------------------------------------------
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* All states of the compaction lifecycle state machine.
|
|
22
|
+
*
|
|
23
|
+
* Transition map:
|
|
24
|
+
* idle → checking_threshold
|
|
25
|
+
* checking_threshold → microcompact | collapse | autocompact | reactive_compact | done
|
|
26
|
+
* microcompact → boundary_commit | failed
|
|
27
|
+
* collapse → boundary_commit | failed
|
|
28
|
+
* autocompact → boundary_commit | failed
|
|
29
|
+
* reactive_compact → boundary_commit | failed
|
|
30
|
+
* boundary_commit → done | failed
|
|
31
|
+
* done → idle
|
|
32
|
+
* failed → idle
|
|
33
|
+
*/
|
|
34
|
+
export type CompactionLifecycleState =
|
|
35
|
+
| 'idle'
|
|
36
|
+
| 'checking_threshold'
|
|
37
|
+
| 'microcompact'
|
|
38
|
+
| 'collapse'
|
|
39
|
+
| 'autocompact'
|
|
40
|
+
| 'reactive_compact'
|
|
41
|
+
| 'boundary_commit'
|
|
42
|
+
| 'done'
|
|
43
|
+
| 'failed';
|
|
44
|
+
|
|
45
|
+
// ---------------------------------------------------------------------------
|
|
46
|
+
// Strategy types
|
|
47
|
+
// ---------------------------------------------------------------------------
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Discriminated union identifying which compaction strategy to apply.
|
|
51
|
+
*
|
|
52
|
+
* - `microcompact` — lightweight summary of recent turns; lowest latency
|
|
53
|
+
* - `collapse` — full context collapse into a single summary message
|
|
54
|
+
* - `autocompact` — threshold-based automatic compaction
|
|
55
|
+
* - `reactive` — emergency compaction triggered by prompt-too-long errors
|
|
56
|
+
*/
|
|
57
|
+
export type CompactionStrategy =
|
|
58
|
+
| 'microcompact'
|
|
59
|
+
| 'collapse'
|
|
60
|
+
| 'autocompact'
|
|
61
|
+
| 'reactive';
|
|
62
|
+
|
|
63
|
+
// ---------------------------------------------------------------------------
|
|
64
|
+
// Strategy input/output
|
|
65
|
+
// ---------------------------------------------------------------------------
|
|
66
|
+
|
|
67
|
+
/** Input passed to every compaction strategy. */
|
|
68
|
+
export interface StrategyInput {
|
|
69
|
+
/** Session ID for event correlation. */
|
|
70
|
+
sessionId: string;
|
|
71
|
+
/** Messages at the time compaction is triggered. */
|
|
72
|
+
messages: readonly ProviderMessage[];
|
|
73
|
+
/** Estimated token count before compaction. */
|
|
74
|
+
tokensBefore: number;
|
|
75
|
+
/** Context window size for the current model. */
|
|
76
|
+
contextWindow: number;
|
|
77
|
+
/** Which strategy is being applied (for self-identification in results). */
|
|
78
|
+
strategy: CompactionStrategy;
|
|
79
|
+
/** Optional additional metadata from the trigger. */
|
|
80
|
+
meta?: Record<string, unknown>;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/** Output produced by every compaction strategy. */
|
|
84
|
+
export interface StrategyOutput {
|
|
85
|
+
/** Compacted message list to replace the current conversation. */
|
|
86
|
+
messages: ProviderMessage[];
|
|
87
|
+
/** Estimated token count after compaction. */
|
|
88
|
+
tokensAfter: number;
|
|
89
|
+
/** Human-readable summary of what was compacted. */
|
|
90
|
+
summary: string;
|
|
91
|
+
/** Strategy that produced this output. */
|
|
92
|
+
strategy: CompactionStrategy;
|
|
93
|
+
/** Wall-clock duration for this strategy's execution. */
|
|
94
|
+
durationMs: number;
|
|
95
|
+
/** Any warnings or non-fatal issues encountered. */
|
|
96
|
+
warnings: string[];
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// ---------------------------------------------------------------------------
|
|
100
|
+
// Boundary commit
|
|
101
|
+
// ---------------------------------------------------------------------------
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* A boundary commit persists a compacted snapshot for replay-safe resumption.
|
|
105
|
+
*
|
|
106
|
+
* Each boundary commit stores:
|
|
107
|
+
* - A unique checkpoint ID
|
|
108
|
+
* - The compacted message slice (replay-safe: can be sliced from any prior state)
|
|
109
|
+
* - A lineage reference to its parent (or null for the root commit)
|
|
110
|
+
* - The strategy that produced this checkpoint
|
|
111
|
+
*/
|
|
112
|
+
export interface BoundaryCommit {
|
|
113
|
+
/** Unique monotonic checkpoint identifier (e.g. `cpt_<ulid>`). */
|
|
114
|
+
checkpointId: string;
|
|
115
|
+
/** Session ID this commit belongs to. */
|
|
116
|
+
sessionId: string;
|
|
117
|
+
/** Unix timestamp (ms) when this commit was created. */
|
|
118
|
+
createdAt: number;
|
|
119
|
+
/** Strategy that produced the compacted snapshot. */
|
|
120
|
+
strategy: CompactionStrategy;
|
|
121
|
+
/**
|
|
122
|
+
* Parent checkpoint ID in the lineage chain.
|
|
123
|
+
* `null` for the root commit (no prior compaction).
|
|
124
|
+
*/
|
|
125
|
+
parentCheckpointId: string | null;
|
|
126
|
+
/**
|
|
127
|
+
* Ordered lineage of all prior checkpoint IDs from root to this commit.
|
|
128
|
+
* Used for replay-safe slicing — always append-only.
|
|
129
|
+
*/
|
|
130
|
+
lineage: readonly string[];
|
|
131
|
+
/** The compacted messages at this boundary. */
|
|
132
|
+
messages: readonly ProviderMessage[];
|
|
133
|
+
/** Token count of the compacted messages. */
|
|
134
|
+
tokenCount: number;
|
|
135
|
+
/** Estimated token count before compaction (for audit). */
|
|
136
|
+
tokensBefore: number;
|
|
137
|
+
/** Human-readable summary stored with this checkpoint. */
|
|
138
|
+
summary: string;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
// ---------------------------------------------------------------------------
|
|
142
|
+
// Lifecycle result
|
|
143
|
+
// ---------------------------------------------------------------------------
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* Result produced at the end of a complete compaction lifecycle run.
|
|
147
|
+
*
|
|
148
|
+
* Populated after transitioning through boundary_commit → done.
|
|
149
|
+
*/
|
|
150
|
+
export interface CompactionLifecycleResult {
|
|
151
|
+
/** Session ID this run was executed for. */
|
|
152
|
+
sessionId: string;
|
|
153
|
+
/** Strategy that was selected and executed. */
|
|
154
|
+
strategy: CompactionStrategy;
|
|
155
|
+
/** Tokens before compaction. */
|
|
156
|
+
tokensBefore: number;
|
|
157
|
+
/** Tokens after compaction. */
|
|
158
|
+
tokensAfter: number;
|
|
159
|
+
/** Total wall-clock duration from trigger to done. */
|
|
160
|
+
durationMs: number;
|
|
161
|
+
/** Boundary commit produced during this run (null if boundary_commit was skipped). */
|
|
162
|
+
commit: BoundaryCommit | null;
|
|
163
|
+
/** Compacted message list. */
|
|
164
|
+
messages: ProviderMessage[];
|
|
165
|
+
/** Strategy output warnings. */
|
|
166
|
+
warnings: string[];
|
|
167
|
+
/** Quality score for the strategy run (null when scoring was skipped). */
|
|
168
|
+
qualityScore: CompactionQualityScore | null;
|
|
169
|
+
/** Strategy switch reason if auto-escalation occurred (null otherwise). */
|
|
170
|
+
strategySwitchReason: string | null;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
// ---------------------------------------------------------------------------
|
|
174
|
+
// Trigger
|
|
175
|
+
// ---------------------------------------------------------------------------
|
|
176
|
+
|
|
177
|
+
/**
|
|
178
|
+
* What initiated the compaction lifecycle run.
|
|
179
|
+
*
|
|
180
|
+
* - `auto` — threshold check determined compaction is needed
|
|
181
|
+
* - `manual` — user or orchestrator explicitly requested compaction
|
|
182
|
+
* - `prompt_too_long` — reactive trigger from a provider prompt-too-long error
|
|
183
|
+
*/
|
|
184
|
+
export type CompactionTrigger = 'auto' | 'manual' | 'prompt_too_long';
|
|
185
|
+
|
|
186
|
+
// ---------------------------------------------------------------------------
|
|
187
|
+
// Resume repair
|
|
188
|
+
// ---------------------------------------------------------------------------
|
|
189
|
+
|
|
190
|
+
/**
|
|
191
|
+
* Severity of a repair action applied during session resume.
|
|
192
|
+
*/
|
|
193
|
+
export type RepairSeverity = 'info' | 'warn' | 'error';
|
|
194
|
+
|
|
195
|
+
/** A single repair action applied during session resume. */
|
|
196
|
+
export interface RepairAction {
|
|
197
|
+
/** Short identifier for this repair type (e.g. `'truncate_overflow'`). */
|
|
198
|
+
kind: string;
|
|
199
|
+
/** Human-readable description of what was repaired. */
|
|
200
|
+
description: string;
|
|
201
|
+
/** Severity classification. */
|
|
202
|
+
severity: RepairSeverity;
|
|
203
|
+
/** Optional metadata about what was changed. */
|
|
204
|
+
meta?: Record<string, unknown>;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
/** Result of the session resume repair pipeline. */
|
|
208
|
+
export interface ResumeRepairResult {
|
|
209
|
+
/** Session ID that was repaired. */
|
|
210
|
+
sessionId: string;
|
|
211
|
+
/** Whether any repairs were applied. */
|
|
212
|
+
repaired: boolean;
|
|
213
|
+
/** List of repair actions applied (empty if no repairs were needed). */
|
|
214
|
+
actions: RepairAction[];
|
|
215
|
+
/** Messages after repair (may be unchanged if no repairs were needed). */
|
|
216
|
+
messages: ProviderMessage[];
|
|
217
|
+
/** Whether the session is safe to resume after repair. */
|
|
218
|
+
safeToResume: boolean;
|
|
219
|
+
/** Human-readable reason if not safe to resume. */
|
|
220
|
+
failReason?: string;
|
|
221
|
+
}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RuntimeContext — the composition root object returned by bootstrapRuntime().
|
|
3
|
+
*
|
|
4
|
+
* main.ts receives this and uses it to drive the render loop, input handling,
|
|
5
|
+
* and terminal lifecycle. The bootstrap owns initialization; main.ts owns
|
|
6
|
+
* the runtime loop.
|
|
7
|
+
*/
|
|
8
|
+
import type { ConversationManager } from '../core/conversation.ts';
|
|
9
|
+
import type { Orchestrator } from '../core/orchestrator.ts';
|
|
10
|
+
import type { ToolRegistry } from '@pellux/goodvibes-sdk/platform/tools/registry';
|
|
11
|
+
import type { PermissionManager } from '../permissions/manager.ts';
|
|
12
|
+
import type { HookDispatcher } from '../hooks/dispatcher.ts';
|
|
13
|
+
import type { FileStateCache } from '@pellux/goodvibes-sdk/platform/state/file-cache';
|
|
14
|
+
import type { ProjectIndex } from '@pellux/goodvibes-sdk/platform/state/project-index';
|
|
15
|
+
import type { ProviderRegistry } from '../providers/registry.ts';
|
|
16
|
+
import type { RuntimeStore } from './store/index.ts';
|
|
17
|
+
import type { RuntimeEventBus } from './events/index.ts';
|
|
18
|
+
import type { FeatureFlagManager } from '@pellux/goodvibes-sdk/platform/runtime/feature-flags/index';
|
|
19
|
+
import type { SessionSnapshot } from './session-persistence.ts';
|
|
20
|
+
import type { RuntimeServices } from './services.ts';
|
|
21
|
+
import type { PanelHealthMonitor } from '@pellux/goodvibes-sdk/platform/runtime/perf/panel-health-monitor';
|
|
22
|
+
import type { WorktreeRegistry } from './worktree/registry.ts';
|
|
23
|
+
import type { SandboxSessionRegistry } from './sandbox/session-registry.ts';
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Mutable runtime state that may be changed by slash commands or model-picker events.
|
|
27
|
+
* Kept as a plain object so event handlers can close over it by reference.
|
|
28
|
+
*
|
|
29
|
+
* Named `MutableRuntimeState` to avoid a name collision with `RuntimeState` in
|
|
30
|
+
* `src/runtime/store/state.ts`.
|
|
31
|
+
*/
|
|
32
|
+
export interface MutableRuntimeState {
|
|
33
|
+
model: string;
|
|
34
|
+
provider: string;
|
|
35
|
+
debugMode: boolean;
|
|
36
|
+
systemPrompt: string;
|
|
37
|
+
/** Empty string if not configured. */
|
|
38
|
+
reasoningEffort: string;
|
|
39
|
+
sessionId: string;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Options accepted by bootstrapRuntime().
|
|
44
|
+
*/
|
|
45
|
+
export interface BootstrapOptions {
|
|
46
|
+
/** App-owned working directory for this runtime instance. */
|
|
47
|
+
workingDir: string;
|
|
48
|
+
/** App-owned home directory for this runtime instance. */
|
|
49
|
+
homeDirectory: string;
|
|
50
|
+
/** Explicit app-owned config manager for this runtime instance. */
|
|
51
|
+
configManager: import('../config/manager.ts').ConfigManager;
|
|
52
|
+
/**
|
|
53
|
+
* Callback invoked when the app should exit.
|
|
54
|
+
* If provided, commandContext.exit is wired during bootstrap.
|
|
55
|
+
* Otherwise main.ts binds the shell-owned exit bridge immediately after bootstrap returns.
|
|
56
|
+
*/
|
|
57
|
+
exit?: () => void;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* The fully-initialized runtime context produced by bootstrapRuntime().
|
|
62
|
+
*
|
|
63
|
+
* main.ts destructures this to obtain what it needs for the render loop
|
|
64
|
+
* and input handling.
|
|
65
|
+
*/
|
|
66
|
+
export interface RuntimeContext {
|
|
67
|
+
// ── Core subsystems ─────────────────────────────────────────────────
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Typed domain event bus for new runtime subsystems.
|
|
71
|
+
*/
|
|
72
|
+
runtimeBus: RuntimeEventBus;
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Zustand vanilla store for domain state slices.
|
|
76
|
+
*/
|
|
77
|
+
store: RuntimeStore;
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* App-scoped runtime services graph shared across adapters and shells.
|
|
81
|
+
*/
|
|
82
|
+
services: RuntimeServices;
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Feature flag and kill-switch manager.
|
|
86
|
+
* Gates runtime subsystems and release controls.
|
|
87
|
+
*/
|
|
88
|
+
featureFlags: FeatureFlagManager;
|
|
89
|
+
|
|
90
|
+
// ── Managers ────────────────────────────────────────────────────────
|
|
91
|
+
|
|
92
|
+
/** Manages conversation history and message rendering. */
|
|
93
|
+
conversation: ConversationManager;
|
|
94
|
+
|
|
95
|
+
/** Controls tool execution approval flow. */
|
|
96
|
+
permissions: PermissionManager;
|
|
97
|
+
|
|
98
|
+
/** Registry of all registered tool implementations. */
|
|
99
|
+
toolRegistry: ToolRegistry;
|
|
100
|
+
|
|
101
|
+
// ── Provider ────────────────────────────────────────────────────────
|
|
102
|
+
|
|
103
|
+
/** Shared provider registry owned by the runtime services graph. */
|
|
104
|
+
providerRegistry: ProviderRegistry;
|
|
105
|
+
|
|
106
|
+
/** Shared panel-health monitor owned by the runtime services graph. */
|
|
107
|
+
panelHealthMonitor: PanelHealthMonitor;
|
|
108
|
+
|
|
109
|
+
/** Shared worktree registry owned by the runtime services graph. */
|
|
110
|
+
worktreeRegistry: WorktreeRegistry;
|
|
111
|
+
|
|
112
|
+
/** Shared sandbox session registry owned by the runtime services graph. */
|
|
113
|
+
sandboxSessionRegistry: SandboxSessionRegistry;
|
|
114
|
+
|
|
115
|
+
// ── Infrastructure ──────────────────────────────────────────────────
|
|
116
|
+
|
|
117
|
+
/** Fires lifecycle hooks registered by the user or plugins. */
|
|
118
|
+
hookDispatcher: HookDispatcher;
|
|
119
|
+
|
|
120
|
+
// ── State ───────────────────────────────────────────────────────────
|
|
121
|
+
|
|
122
|
+
/** File read/write cache shared across read/write/edit tools in a session. */
|
|
123
|
+
fileCache: FileStateCache;
|
|
124
|
+
|
|
125
|
+
/** Project-level file index shared across tools. */
|
|
126
|
+
projectIndex: ProjectIndex;
|
|
127
|
+
|
|
128
|
+
// ── Session ─────────────────────────────────────────────────────────
|
|
129
|
+
|
|
130
|
+
/** Unique identifier for this user session (hex, prefixed "user-"). */
|
|
131
|
+
sessionId: string;
|
|
132
|
+
|
|
133
|
+
/** True if a previous session was resumed at startup. */
|
|
134
|
+
isResumed: boolean;
|
|
135
|
+
|
|
136
|
+
// ── Mutable runtime state ───────────────────────────────────────────
|
|
137
|
+
|
|
138
|
+
/** Mutable model/provider/prompt state closed over by event handlers. */
|
|
139
|
+
runtime: MutableRuntimeState;
|
|
140
|
+
|
|
141
|
+
// ── Orchestrator ─────────────────────────────────────────────────────
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* Main LLM orchestrator. Drives the conversation loop, tool execution,
|
|
145
|
+
* streaming, and context compaction.
|
|
146
|
+
*/
|
|
147
|
+
orchestrator: Orchestrator;
|
|
148
|
+
|
|
149
|
+
// ── Lifecycle ────────────────────────────────────────────────────────
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* Logical shutdown: save session, fire hooks, stop background managers.
|
|
153
|
+
* Does NOT touch the terminal — main.ts owns terminal teardown.
|
|
154
|
+
*
|
|
155
|
+
* @param sessionData - Latest conversation data to persist.
|
|
156
|
+
*/
|
|
157
|
+
shutdown: (sessionData: SessionSnapshot) => Promise<void>;
|
|
158
|
+
}
|