@pellux/goodvibes-tui 0.18.10 → 0.18.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +56 -0
- package/README.md +1 -1
- package/docs/foundation-artifacts/operator-contract.json +1 -1
- package/package.json +2 -2
- package/src/core/conversation-rendering.ts +2 -2
- package/src/core/conversation.ts +5 -5
- package/src/core/orchestrator.ts +13 -11
- package/src/daemon/facade-composition.ts +8 -8
- package/src/daemon/facade.ts +8 -8
- package/src/daemon/types.ts +3 -3
- package/src/input/command-registry.ts +3 -3
- package/src/input/commands/session-content.ts +2 -2
- package/src/input/commands/session-workflow.ts +1 -1
- package/src/input/handler-feed.ts +1 -1
- package/src/input/session-picker-modal.ts +1 -1
- package/src/panels/builtin/agent.ts +1 -0
- package/src/panels/builtin/operations.ts +1 -0
- package/src/panels/builtin/session.ts +1 -1
- package/src/panels/builtin/shared.ts +2 -2
- package/src/panels/context-visualizer-panel.ts +4 -1
- package/src/panels/provider-health-domains.ts +5 -1
- package/src/panels/provider-health-panel.ts +5 -1
- package/src/panels/session-browser-panel.ts +1 -1
- package/src/panels/token-budget-panel.ts +6 -2
- package/src/plugins/loader.ts +2 -2
- package/src/runtime/bootstrap-command-context.ts +3 -3
- package/src/runtime/bootstrap-command-parts.ts +3 -3
- package/src/runtime/bootstrap-core.ts +2 -2
- package/src/runtime/bootstrap-hook-bridge.ts +1 -1
- package/src/runtime/bootstrap-shell.ts +1 -1
- package/src/runtime/bootstrap.ts +5 -4
- package/src/runtime/services.ts +2 -2
- package/src/runtime/ui-read-models-observability-security.ts +2 -2
- package/src/runtime/ui-read-models-observability-system.ts +1 -1
- package/src/runtime/ui-service-queries.ts +1 -1
- package/src/tools/index.ts +1 -1
- package/src/version.ts +1 -1
- package/src/acp/connection.ts +0 -447
- package/src/acp/index.ts +0 -7
- package/src/acp/manager.ts +0 -1
- package/src/adapters/bluebubbles/index.ts +0 -127
- package/src/adapters/discord/index.ts +0 -297
- package/src/adapters/github/index.ts +0 -73
- package/src/adapters/google-chat/index.ts +0 -119
- package/src/adapters/imessage/index.ts +0 -92
- package/src/adapters/index.ts +0 -15
- package/src/adapters/matrix/index.ts +0 -116
- package/src/adapters/mattermost/index.ts +0 -151
- package/src/adapters/msteams/index.ts +0 -180
- package/src/adapters/ntfy/index.ts +0 -118
- package/src/adapters/signal/index.ts +0 -92
- package/src/adapters/slack/index.ts +0 -323
- package/src/adapters/telegram/index.ts +0 -160
- package/src/adapters/types.ts +0 -97
- package/src/adapters/webhook/index.ts +0 -178
- package/src/adapters/whatsapp/index.ts +0 -135
- package/src/agents/message-bus-core.ts +0 -312
- package/src/agents/message-bus.ts +0 -2
- package/src/agents/orchestrator-prompts.ts +0 -351
- package/src/agents/orchestrator-runner.ts +0 -668
- package/src/agents/orchestrator.ts +0 -438
- package/src/agents/session.ts +0 -108
- package/src/agents/worktree.ts +0 -153
- package/src/agents/wrfc-config.ts +0 -47
- package/src/agents/wrfc-controller.ts +0 -747
- package/src/agents/wrfc-gate-runtime.ts +0 -75
- package/src/agents/wrfc-reporting.ts +0 -284
- package/src/agents/wrfc-runtime-events.ts +0 -150
- package/src/agents/wrfc-types.ts +0 -67
- package/src/automation/delivery-manager.ts +0 -368
- package/src/automation/index.ts +0 -72
- package/src/automation/manager-runtime-delivery.ts +0 -139
- package/src/automation/manager-runtime-events.ts +0 -131
- package/src/automation/manager-runtime-execution.ts +0 -511
- package/src/automation/manager-runtime-helpers.ts +0 -433
- package/src/automation/manager-runtime-job-mutations.ts +0 -175
- package/src/automation/manager-runtime-reconcile.ts +0 -148
- package/src/automation/manager-runtime-scheduling.ts +0 -189
- package/src/automation/manager-runtime-sync.ts +0 -54
- package/src/automation/manager-runtime.ts +0 -721
- package/src/automation/manager.ts +0 -10
- package/src/automation/service.ts +0 -242
- package/src/channels/builtin/account-actions.ts +0 -490
- package/src/channels/builtin/accounts.ts +0 -433
- package/src/channels/builtin/contracts.ts +0 -405
- package/src/channels/builtin/plugins.ts +0 -308
- package/src/channels/builtin/rendering.ts +0 -174
- package/src/channels/builtin/setup-schema.ts +0 -504
- package/src/channels/builtin/shared.ts +0 -96
- package/src/channels/builtin/surfaces.ts +0 -57
- package/src/channels/builtin/targets.ts +0 -693
- package/src/channels/builtin-runtime.ts +0 -443
- package/src/channels/delivery/shared.ts +0 -199
- package/src/channels/delivery/strategies-bridge.ts +0 -246
- package/src/channels/delivery/strategies-core.ts +0 -299
- package/src/channels/delivery/strategies-enterprise.ts +0 -178
- package/src/channels/delivery/types.ts +0 -59
- package/src/channels/delivery-router.ts +0 -127
- package/src/channels/index.ts +0 -77
- package/src/channels/plugin-registry.ts +0 -551
- package/src/channels/provider-runtime.ts +0 -330
- package/src/channels/reply-pipeline.ts +0 -522
- package/src/channels/route-manager.ts +0 -340
- package/src/channels/surface-registry.ts +0 -186
- package/src/config/helper-model.ts +0 -1
- package/src/config/manager.ts +0 -8
- package/src/config/subscription-auth.ts +0 -31
- package/src/config/tool-llm.ts +0 -110
- package/src/control-plane/approval-broker.ts +0 -351
- package/src/control-plane/gateway.ts +0 -1
- package/src/control-plane/index.ts +0 -54
- package/src/control-plane/media-contract-schemas.ts +0 -1
- package/src/control-plane/method-catalog-admin.ts +0 -1
- package/src/control-plane/method-catalog-channels.ts +0 -1
- package/src/control-plane/method-catalog-control-automation.ts +0 -1
- package/src/control-plane/method-catalog-control-core.ts +0 -1
- package/src/control-plane/method-catalog-control.ts +0 -1
- package/src/control-plane/method-catalog-events.ts +0 -1
- package/src/control-plane/method-catalog-knowledge.ts +0 -1
- package/src/control-plane/method-catalog-media.ts +0 -1
- package/src/control-plane/method-catalog-runtime.ts +0 -1
- package/src/control-plane/method-catalog-shared.ts +0 -1
- package/src/control-plane/method-catalog.ts +0 -1
- package/src/control-plane/operator-contract-schemas-admin.ts +0 -1
- package/src/control-plane/operator-contract-schemas-channels.ts +0 -1
- package/src/control-plane/operator-contract-schemas-control.ts +0 -1
- package/src/control-plane/operator-contract-schemas-domains.ts +0 -1
- package/src/control-plane/operator-contract-schemas-knowledge.ts +0 -1
- package/src/control-plane/operator-contract-schemas-media.ts +0 -1
- package/src/control-plane/operator-contract-schemas-permissions.ts +0 -1
- package/src/control-plane/operator-contract-schemas-remote.ts +0 -1
- package/src/control-plane/operator-contract-schemas-runtime.ts +0 -1
- package/src/control-plane/operator-contract-schemas-shared.ts +0 -1
- package/src/control-plane/operator-contract-schemas-telemetry.ts +0 -1
- package/src/control-plane/operator-contract-schemas.ts +0 -1
- package/src/control-plane/operator-contract.ts +0 -165
- package/src/control-plane/session-broker.ts +0 -780
- package/src/core/compaction-sections.ts +0 -492
- package/src/core/compaction-types.ts +0 -147
- package/src/core/context-compaction.ts +0 -542
- package/src/core/conversation-compaction.ts +0 -68
- package/src/core/conversation-diff.ts +0 -55
- package/src/core/conversation-utils.ts +0 -72
- package/src/core/event-replay.ts +0 -287
- package/src/core/orchestrator-context-runtime.ts +0 -407
- package/src/core/orchestrator-follow-up-runtime.ts +0 -134
- package/src/core/orchestrator-runtime.ts +0 -132
- package/src/core/orchestrator-tool-runtime.ts +0 -468
- package/src/core/orchestrator-turn-helpers.ts +0 -355
- package/src/core/orchestrator-turn-loop.ts +0 -443
- package/src/core/plan-command-handler.ts +0 -169
- package/src/core/transcript-events/classify.ts +0 -95
- package/src/core/transcript-events/index.ts +0 -15
- package/src/daemon/control-plane.ts +0 -522
- package/src/daemon/helpers.ts +0 -74
- package/src/daemon/http/router-route-contexts.ts +0 -370
- package/src/daemon/http/router.ts +0 -531
- package/src/daemon/http-listener.ts +0 -301
- package/src/daemon/index.ts +0 -1
- package/src/daemon/server.ts +0 -1
- package/src/daemon/service-manager.ts +0 -413
- package/src/daemon/surface-actions.ts +0 -183
- package/src/daemon/surface-delivery.ts +0 -530
- package/src/daemon/transport-events.ts +0 -110
- package/src/export/markdown.ts +0 -213
- package/src/export/session-export.ts +0 -1
- package/src/git/index.ts +0 -1
- package/src/git/service.ts +0 -414
- package/src/hooks/chain-engine.ts +0 -414
- package/src/hooks/dispatcher.ts +0 -414
- package/src/hooks/hook-api.ts +0 -170
- package/src/hooks/index.ts +0 -48
- package/src/hooks/runners/agent.ts +0 -93
- package/src/hooks/runners/prompt.ts +0 -69
- package/src/hooks/workbench.ts +0 -360
- package/src/integrations/index.ts +0 -42
- package/src/integrations/notifier.ts +0 -206
- package/src/integrations/webhooks.ts +0 -1
- package/src/knowledge/consolidation.ts +0 -346
- package/src/knowledge/graphql.ts +0 -324
- package/src/knowledge/index.ts +0 -60
- package/src/knowledge/ingest-compile.ts +0 -386
- package/src/knowledge/ingest-context.ts +0 -18
- package/src/knowledge/ingest-inputs.ts +0 -387
- package/src/knowledge/ingest.ts +0 -1
- package/src/knowledge/internal.ts +0 -257
- package/src/knowledge/knowledge-api.ts +0 -432
- package/src/knowledge/lint.ts +0 -121
- package/src/knowledge/memory-sync.ts +0 -62
- package/src/knowledge/packet.ts +0 -370
- package/src/knowledge/scheduling.ts +0 -283
- package/src/knowledge/service.ts +0 -715
- package/src/mcp/client.ts +0 -383
- package/src/mcp/index.ts +0 -12
- package/src/mcp/mcp-api.ts +0 -90
- package/src/mcp/registry.ts +0 -1
- package/src/media/builtin-image-understanding.ts +0 -303
- package/src/media/builtin-providers.ts +0 -26
- package/src/media/index.ts +0 -18
- package/src/multimodal/index.ts +0 -13
- package/src/multimodal/service.ts +0 -492
- package/src/permissions/briefs/build.ts +0 -88
- package/src/permissions/manager.ts +0 -1
- package/src/plugins/api.ts +0 -383
- package/src/plugins/manager.ts +0 -481
- package/src/profiles/shape.ts +0 -58
- package/src/providers/amazon-bedrock-mantle.ts +0 -50
- package/src/providers/amazon-bedrock.ts +0 -61
- package/src/providers/anthropic-compat.ts +0 -373
- package/src/providers/anthropic-sdk-provider.ts +0 -230
- package/src/providers/anthropic-vertex.ts +0 -59
- package/src/providers/anthropic.ts +0 -469
- package/src/providers/auto-register.ts +0 -417
- package/src/providers/builtin-catalog.ts +0 -326
- package/src/providers/builtin-registry.ts +0 -575
- package/src/providers/cache-planner.ts +0 -258
- package/src/providers/capabilities.ts +0 -1
- package/src/providers/custom-loader.ts +0 -425
- package/src/providers/discovered-compat.ts +0 -7
- package/src/providers/discovered-factory.ts +0 -61
- package/src/providers/discovered-traits.ts +0 -138
- package/src/providers/gemini.ts +0 -462
- package/src/providers/github-copilot.ts +0 -254
- package/src/providers/index.ts +0 -1
- package/src/providers/interface.ts +0 -185
- package/src/providers/llama-cpp.ts +0 -402
- package/src/providers/lm-studio-helpers.ts +0 -367
- package/src/providers/lm-studio.ts +0 -484
- package/src/providers/model-catalog-cache.ts +0 -221
- package/src/providers/model-catalog-notifications.ts +0 -97
- package/src/providers/model-catalog-synthetic.ts +0 -202
- package/src/providers/model-catalog.ts +0 -211
- package/src/providers/model-limits.ts +0 -1
- package/src/providers/ollama.ts +0 -469
- package/src/providers/openai-codex.ts +0 -472
- package/src/providers/openai-compat.ts +0 -615
- package/src/providers/openai.ts +0 -231
- package/src/providers/optimizer.ts +0 -1
- package/src/providers/provider-api.ts +0 -1
- package/src/providers/registry-helpers.ts +0 -34
- package/src/providers/registry-models.ts +0 -77
- package/src/providers/registry-types.ts +0 -67
- package/src/providers/registry.ts +0 -1
- package/src/providers/runtime-metadata.ts +0 -149
- package/src/providers/runtime-snapshot.ts +0 -130
- package/src/providers/synthetic.ts +0 -561
- package/src/providers/tier-prompts.ts +0 -84
- package/src/providers/tool-formats.ts +0 -414
- package/src/runtime/auth/inspection.ts +0 -125
- package/src/runtime/bootstrap-background.ts +0 -157
- package/src/runtime/bootstrap-helpers.ts +0 -88
- package/src/runtime/bootstrap-runtime-events.ts +0 -254
- package/src/runtime/bootstrap-services.ts +0 -197
- package/src/runtime/compaction/index.ts +0 -1
- package/src/runtime/compaction/lifecycle.ts +0 -1
- package/src/runtime/compaction/manager.ts +0 -474
- package/src/runtime/compaction/quality-score.ts +0 -1
- package/src/runtime/compaction/resume-repair.ts +0 -1
- package/src/runtime/compaction/strategies/autocompact.ts +0 -1
- package/src/runtime/compaction/strategies/boundary-commit.ts +0 -1
- package/src/runtime/compaction/strategies/collapse.ts +0 -1
- package/src/runtime/compaction/strategies/index.ts +0 -1
- package/src/runtime/compaction/strategies/microcompact.ts +0 -1
- package/src/runtime/compaction/strategies/reactive.ts +0 -1
- package/src/runtime/compaction/types.ts +0 -1
- package/src/runtime/ecosystem/recommendations.ts +0 -117
- package/src/runtime/emitters/agents.ts +0 -96
- package/src/runtime/emitters/automation.ts +0 -112
- package/src/runtime/emitters/communication.ts +0 -53
- package/src/runtime/emitters/compaction.ts +0 -161
- package/src/runtime/emitters/control-plane.ts +0 -65
- package/src/runtime/emitters/deliveries.ts +0 -65
- package/src/runtime/emitters/forensics.ts +0 -17
- package/src/runtime/emitters/index.ts +0 -59
- package/src/runtime/emitters/knowledge.ts +0 -129
- package/src/runtime/emitters/mcp.ts +0 -95
- package/src/runtime/emitters/ops.ts +0 -163
- package/src/runtime/emitters/orchestration.ts +0 -87
- package/src/runtime/emitters/permissions.ts +0 -98
- package/src/runtime/emitters/planner.ts +0 -23
- package/src/runtime/emitters/plugins.ts +0 -78
- package/src/runtime/emitters/providers.ts +0 -30
- package/src/runtime/emitters/routes.ts +0 -57
- package/src/runtime/emitters/security.ts +0 -53
- package/src/runtime/emitters/session.ts +0 -93
- package/src/runtime/emitters/surfaces.ts +0 -57
- package/src/runtime/emitters/tasks.ts +0 -69
- package/src/runtime/emitters/tools.ts +0 -140
- package/src/runtime/emitters/transport.ts +0 -78
- package/src/runtime/emitters/turn.ts +0 -155
- package/src/runtime/emitters/ui.ts +0 -57
- package/src/runtime/emitters/watchers.ts +0 -57
- package/src/runtime/emitters/workflows.ts +0 -79
- package/src/runtime/eval/index.ts +0 -48
- package/src/runtime/eval/runner.ts +0 -163
- package/src/runtime/eval/suites.ts +0 -264
- package/src/runtime/events/domain-map.ts +0 -148
- package/src/runtime/events/index.ts +0 -1
- package/src/runtime/events/turn.ts +0 -1
- package/src/runtime/events/workflows.ts +0 -1
- package/src/runtime/forensics/collector.ts +0 -693
- package/src/runtime/forensics/index.ts +0 -23
- package/src/runtime/foundation-clients.ts +0 -78
- package/src/runtime/foundation-services.ts +0 -96
- package/src/runtime/guidance.ts +0 -183
- package/src/runtime/health/effect-handlers.ts +0 -189
- package/src/runtime/health/index.ts +0 -70
- package/src/runtime/health/wiring.ts +0 -115
- package/src/runtime/integration/helpers.ts +0 -640
- package/src/runtime/lifecycle.ts +0 -107
- package/src/runtime/mcp/index.ts +0 -68
- package/src/runtime/mcp/manager.ts +0 -513
- package/src/runtime/network/inbound.ts +0 -131
- package/src/runtime/network/index.ts +0 -30
- package/src/runtime/network/outbound.ts +0 -292
- package/src/runtime/network/shared.ts +0 -82
- package/src/runtime/operator-client.ts +0 -235
- package/src/runtime/ops/control-plane.ts +0 -363
- package/src/runtime/ops/index.ts +0 -122
- package/src/runtime/ops/playbooks/index.ts +0 -10
- package/src/runtime/ops/playbooks/session-unrecoverable.ts +0 -196
- package/src/runtime/ops/playbooks/stuck-turn.ts +0 -197
- package/src/runtime/ops/runtime-context.ts +0 -100
- package/src/runtime/ops-api.ts +0 -27
- package/src/runtime/orchestration/spawn-policy.ts +0 -83
- package/src/runtime/peer-client.ts +0 -404
- package/src/runtime/perf/index.ts +0 -57
- package/src/runtime/perf/slo-collector.ts +0 -375
- package/src/runtime/permissions/index.ts +0 -190
- package/src/runtime/permissions/policy-runtime.ts +0 -1
- package/src/runtime/permissions/preflight.ts +0 -101
- package/src/runtime/permissions/rule-suggestions.ts +0 -36
- package/src/runtime/plugins/hot-reload.ts +0 -221
- package/src/runtime/plugins/index.ts +0 -84
- package/src/runtime/plugins/lifecycle.ts +0 -95
- package/src/runtime/plugins/manager.ts +0 -474
- package/src/runtime/plugins/manifest.ts +0 -167
- package/src/runtime/plugins/quarantine.ts +0 -202
- package/src/runtime/plugins/trust.ts +0 -291
- package/src/runtime/plugins/types.ts +0 -205
- package/src/runtime/provider-accounts/registry.ts +0 -326
- package/src/runtime/remote/distributed-runtime-contract-schemas.ts +0 -386
- package/src/runtime/remote/index.ts +0 -488
- package/src/runtime/remote/runner-registry.ts +0 -438
- package/src/runtime/remote/supervisor.ts +0 -70
- package/src/runtime/runtime-hook-api.ts +0 -5
- package/src/runtime/runtime-knowledge-api.ts +0 -14
- package/src/runtime/runtime-mcp-api.ts +0 -5
- package/src/runtime/runtime-ops-api.ts +0 -86
- package/src/runtime/runtime-provider-api.ts +0 -18
- package/src/runtime/session-maintenance.ts +0 -188
- package/src/runtime/session-persistence.ts +0 -288
- package/src/runtime/session-return-context.ts +0 -195
- package/src/runtime/settings/control-plane-store.ts +0 -258
- package/src/runtime/settings/control-plane.ts +0 -599
- package/src/runtime/shell-command-extensions.ts +0 -54
- package/src/runtime/shell-command-ops.ts +0 -207
- package/src/runtime/shell-command-platform.ts +0 -47
- package/src/runtime/shell-command-services.ts +0 -143
- package/src/runtime/shell-command-workspace.ts +0 -31
- package/src/runtime/tasks/adapters/acp-adapter.ts +0 -211
- package/src/runtime/tasks/adapters/agent-adapter.ts +0 -208
- package/src/runtime/tasks/adapters/index.ts +0 -16
- package/src/runtime/tasks/adapters/process-adapter.ts +0 -214
- package/src/runtime/tasks/adapters/scheduler-adapter.ts +0 -193
- package/src/runtime/tasks/index.ts +0 -68
- package/src/runtime/tasks/manager.ts +0 -415
- package/src/runtime/telemetry/api-helpers.ts +0 -517
- package/src/runtime/telemetry/api.ts +0 -768
- package/src/runtime/telemetry/index.ts +0 -178
- package/src/runtime/telemetry/instrumentation/domain-bridge-agent-session.ts +0 -440
- package/src/runtime/telemetry/instrumentation/domain-bridge-plugin-mcp.ts +0 -200
- package/src/runtime/telemetry/instrumentation/domain-bridge-shared.ts +0 -18
- package/src/runtime/telemetry/instrumentation/domain-bridge-transport-task.ts +0 -204
- package/src/runtime/telemetry/instrumentation/domain-bridge.ts +0 -125
- package/src/runtime/telemetry/instrumentation/index.ts +0 -67
- package/src/runtime/tools/context.ts +0 -114
- package/src/runtime/tools/index.ts +0 -46
- package/src/runtime/tools/phased-executor.ts +0 -448
- package/src/runtime/tools/phases/budget.ts +0 -130
- package/src/runtime/tools/phases/execute.ts +0 -69
- package/src/runtime/tools/phases/index.ts +0 -13
- package/src/runtime/tools/phases/map-output.ts +0 -98
- package/src/runtime/tools/phases/permission.ts +0 -133
- package/src/runtime/tools/phases/posthook.ts +0 -57
- package/src/runtime/tools/phases/prehook.ts +0 -68
- package/src/runtime/tools/phases/validate.ts +0 -53
- package/src/runtime/transports/direct.ts +0 -73
- package/src/runtime/transports/http-helpers.ts +0 -218
- package/src/runtime/transports/http-types.ts +0 -364
- package/src/runtime/transports/http.ts +0 -629
- package/src/runtime/transports/realtime.ts +0 -50
- package/src/runtime/transports/remote-events.ts +0 -16
- package/src/runtime/transports/shared.ts +0 -39
- package/src/runtime/transports/ui-runtime-events.ts +0 -35
- package/src/runtime/ui-events.ts +0 -46
- package/src/runtime/worktree/registry.ts +0 -252
- package/src/sessions/manager.ts +0 -14
- package/src/state/file-watcher.ts +0 -294
- package/src/state/index.ts +0 -56
- package/src/state/knowledge-injection.ts +0 -214
- package/src/state/memory-embedding-http.ts +0 -642
- package/src/state/memory-embeddings.ts +0 -312
- package/src/state/memory-ingest.ts +0 -132
- package/src/state/memory-registry.ts +0 -111
- package/src/state/memory-store-helpers.ts +0 -160
- package/src/state/memory-store.ts +0 -728
- package/src/state/memory-vector-store.ts +0 -418
- package/src/templates/manager.ts +0 -187
- package/src/tools/agent/index.ts +0 -610
- package/src/tools/agent/manager.ts +0 -476
- package/src/tools/analyze/git-modes.ts +0 -380
- package/src/tools/analyze/index.ts +0 -128
- package/src/tools/channel/agent-tools.ts +0 -16
- package/src/tools/channel/index.ts +0 -268
- package/src/tools/control/index.ts +0 -90
- package/src/tools/edit/core.ts +0 -619
- package/src/tools/edit/index.ts +0 -4
- package/src/tools/edit/phased.ts +0 -33
- package/src/tools/fetch/index.ts +0 -3
- package/src/tools/fetch/phased.ts +0 -34
- package/src/tools/fetch/runtime.ts +0 -499
- package/src/tools/mcp/index.ts +0 -190
- package/src/tools/remote-trigger/index.ts +0 -130
- package/src/tools/shared/auto-heal.ts +0 -282
- package/src/tools/state/index.ts +0 -688
- package/src/tools/web-search/index.ts +0 -38
- package/src/tools/write/index.ts +0 -604
- package/src/tools/write/phased.ts +0 -41
- package/src/types/generated/foundation-client-types.ts +0 -22
- package/src/watchers/index.ts +0 -11
- package/src/watchers/registry.ts +0 -517
- package/src/web-search/index.ts +0 -26
- package/src/web-search/provider-registry.ts +0 -64
- package/src/web-search/providers/brave.ts +0 -100
- package/src/web-search/providers/duckduckgo.ts +0 -270
- package/src/web-search/providers/exa.ts +0 -77
- package/src/web-search/providers/firecrawl.ts +0 -90
- package/src/web-search/providers/perplexity.ts +0 -86
- package/src/web-search/providers/searxng.ts +0 -88
- package/src/web-search/providers/shared.ts +0 -249
- package/src/web-search/providers/tavily.ts +0 -90
- package/src/web-search/service.ts +0 -142
|
@@ -1,197 +0,0 @@
|
|
|
1
|
-
import type { HookDispatcher } from '@pellux/goodvibes-sdk/platform/hooks/dispatcher';
|
|
2
|
-
import type { RuntimeEventBus } from '@pellux/goodvibes-sdk/platform/runtime/events/index';
|
|
3
|
-
import type { RuntimeServices } from './services.ts';
|
|
4
|
-
import { DaemonServer } from '@pellux/goodvibes-sdk/platform/daemon/server';
|
|
5
|
-
import { HttpListener } from '@pellux/goodvibes-sdk/platform/daemon/http-listener';
|
|
6
|
-
import { logger } from '@pellux/goodvibes-sdk/platform/utils/logger';
|
|
7
|
-
import net from 'node:net';
|
|
8
|
-
import { summarizeError } from '@pellux/goodvibes-sdk/platform/utils/error-display';
|
|
9
|
-
|
|
10
|
-
interface DaemonService {
|
|
11
|
-
enable(config: { daemon: boolean }, token?: string): boolean;
|
|
12
|
-
start(): Promise<void>;
|
|
13
|
-
stop(): Promise<void>;
|
|
14
|
-
listRecentControlPlaneEvents(limit: number): readonly import('../control-plane/gateway.ts').ControlPlaneRecentEvent[];
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
interface HttpListenerService {
|
|
18
|
-
enable(config: { httpListener: boolean }, token?: string): boolean;
|
|
19
|
-
start(): Promise<void>;
|
|
20
|
-
stop(): Promise<void>;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
interface ServiceFactories {
|
|
24
|
-
createDaemonServer?: (
|
|
25
|
-
runtimeBus: RuntimeEventBus,
|
|
26
|
-
userAuth: RuntimeServices['localUserAuthManager'],
|
|
27
|
-
runtimeServices: RuntimeServices,
|
|
28
|
-
) => DaemonService;
|
|
29
|
-
createHttpListener?: (
|
|
30
|
-
hookDispatcher: HookDispatcher,
|
|
31
|
-
userAuth: RuntimeServices['localUserAuthManager'],
|
|
32
|
-
configManager: RuntimeServices['configManager'],
|
|
33
|
-
) => HttpListenerService;
|
|
34
|
-
startupTimeoutMs?: number;
|
|
35
|
-
probeDaemonPortInUse?: (host: string, port: number) => Promise<boolean>;
|
|
36
|
-
probeHttpListenerPortInUse?: (host: string, port: number) => Promise<boolean>;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
export interface ExternalServicesHandle {
|
|
40
|
-
readonly daemonServer: DaemonService | null;
|
|
41
|
-
readonly httpListener: HttpListenerService | null;
|
|
42
|
-
listRecentControlPlaneEvents(limit: number): readonly import('../control-plane/gateway.ts').ControlPlaneRecentEvent[];
|
|
43
|
-
stop(): Promise<void>;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
export interface ExternalServicesConfig {
|
|
47
|
-
get(
|
|
48
|
-
key:
|
|
49
|
-
| 'danger.daemon'
|
|
50
|
-
| 'danger.httpListener'
|
|
51
|
-
| 'controlPlane.host'
|
|
52
|
-
| 'controlPlane.port'
|
|
53
|
-
| 'httpListener.host'
|
|
54
|
-
| 'httpListener.port',
|
|
55
|
-
): boolean | string | number;
|
|
56
|
-
}
|
|
57
|
-
const DEFAULT_SERVICE_START_TIMEOUT_MS = 1500;
|
|
58
|
-
|
|
59
|
-
async function isTcpPortInUse(host: string, port: number, timeoutMs = 250): Promise<boolean> {
|
|
60
|
-
return await new Promise<boolean>((resolve) => {
|
|
61
|
-
const socket = new net.Socket();
|
|
62
|
-
let settled = false;
|
|
63
|
-
const finish = (result: boolean): void => {
|
|
64
|
-
if (settled) return;
|
|
65
|
-
settled = true;
|
|
66
|
-
socket.destroy();
|
|
67
|
-
resolve(result);
|
|
68
|
-
};
|
|
69
|
-
socket.setTimeout(timeoutMs);
|
|
70
|
-
socket.once('connect', () => finish(true));
|
|
71
|
-
socket.once('timeout', () => finish(false));
|
|
72
|
-
socket.once('error', () => finish(false));
|
|
73
|
-
socket.connect(port, host);
|
|
74
|
-
});
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
async function startWithTimeout(
|
|
78
|
-
label: string,
|
|
79
|
-
start: () => Promise<void>,
|
|
80
|
-
timeoutMs: number,
|
|
81
|
-
cleanup?: () => Promise<void>,
|
|
82
|
-
): Promise<'started' | 'timed_out'> {
|
|
83
|
-
let timer: ReturnType<typeof setTimeout> | null = null;
|
|
84
|
-
const startPromise = start().then(() => 'started' as const);
|
|
85
|
-
try {
|
|
86
|
-
const result = await Promise.race([
|
|
87
|
-
startPromise,
|
|
88
|
-
new Promise<'timed_out'>((resolve) => {
|
|
89
|
-
timer = setTimeout(() => resolve('timed_out'), timeoutMs);
|
|
90
|
-
}),
|
|
91
|
-
]);
|
|
92
|
-
if (result === 'timed_out') {
|
|
93
|
-
logger.warn(`${label} startup timed out; continuing without it in this TUI instance`, { timeoutMs });
|
|
94
|
-
if (cleanup) {
|
|
95
|
-
void cleanup().catch((error) => {
|
|
96
|
-
logger.warn(`${label} cleanup after startup timeout failed`, { error: summarizeError(error) });
|
|
97
|
-
});
|
|
98
|
-
void startPromise.then(() => cleanup()).catch(() => {});
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
return result;
|
|
102
|
-
} finally {
|
|
103
|
-
if (timer !== null) clearTimeout(timer);
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
export async function startExternalServices(
|
|
108
|
-
config: ExternalServicesConfig,
|
|
109
|
-
runtimeBus: RuntimeEventBus,
|
|
110
|
-
hookDispatcher: HookDispatcher,
|
|
111
|
-
factories: ServiceFactories = {},
|
|
112
|
-
runtimeServices: RuntimeServices,
|
|
113
|
-
): Promise<ExternalServicesHandle> {
|
|
114
|
-
const sharedUserAuth = runtimeServices.localUserAuthManager;
|
|
115
|
-
const createDaemonServer = factories.createDaemonServer ?? ((bus, userAuth, services): DaemonService =>
|
|
116
|
-
new DaemonServer({ runtimeBus: bus, userAuth, runtimeServices: services }));
|
|
117
|
-
const createHttpListener = factories.createHttpListener ?? ((dispatcher, userAuth, configManager): HttpListenerService =>
|
|
118
|
-
new HttpListener({ hookDispatcher: dispatcher, userAuth, configManager }));
|
|
119
|
-
const startupTimeoutMs = factories.startupTimeoutMs ?? DEFAULT_SERVICE_START_TIMEOUT_MS;
|
|
120
|
-
const daemonHost = String(config.get('controlPlane.host') ?? '127.0.0.1');
|
|
121
|
-
const daemonPort = Number(config.get('controlPlane.port') ?? 3421);
|
|
122
|
-
const httpListenerHost = String(config.get('httpListener.host') ?? '127.0.0.1');
|
|
123
|
-
const httpListenerPort = Number(config.get('httpListener.port') ?? 3422);
|
|
124
|
-
const probeDaemonPortInUse = factories.probeDaemonPortInUse ?? ((host: string, port: number) => isTcpPortInUse(host, port));
|
|
125
|
-
const probeHttpListenerPortInUse = factories.probeHttpListenerPortInUse ?? ((host: string, port: number) => isTcpPortInUse(host, port));
|
|
126
|
-
|
|
127
|
-
let daemonServer: DaemonService | null = null;
|
|
128
|
-
let httpListener: HttpListenerService | null = null;
|
|
129
|
-
|
|
130
|
-
if (config.get('danger.daemon') as boolean) {
|
|
131
|
-
if (await probeDaemonPortInUse(daemonHost, daemonPort)) {
|
|
132
|
-
logger.warn('Daemon server port already in use; continuing without local daemon in this TUI instance', {
|
|
133
|
-
host: daemonHost,
|
|
134
|
-
port: daemonPort,
|
|
135
|
-
});
|
|
136
|
-
} else {
|
|
137
|
-
daemonServer = createDaemonServer(runtimeBus, sharedUserAuth, runtimeServices);
|
|
138
|
-
daemonServer.enable({ daemon: true });
|
|
139
|
-
try {
|
|
140
|
-
const service = daemonServer;
|
|
141
|
-
const result = await startWithTimeout('Daemon server', () => service.start(), startupTimeoutMs, () => service.stop());
|
|
142
|
-
if (result === 'timed_out') {
|
|
143
|
-
daemonServer = null;
|
|
144
|
-
}
|
|
145
|
-
} catch (error) {
|
|
146
|
-
const message = summarizeError(error);
|
|
147
|
-
if (message.includes('EADDRINUSE') || message.includes('Address already in use')) {
|
|
148
|
-
logger.warn('Daemon server port already in use; continuing without local daemon in this TUI instance', { error: message });
|
|
149
|
-
daemonServer = null;
|
|
150
|
-
} else {
|
|
151
|
-
throw error;
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
if (config.get('danger.httpListener') as boolean) {
|
|
158
|
-
if (await probeHttpListenerPortInUse(httpListenerHost, httpListenerPort)) {
|
|
159
|
-
logger.warn('HTTP listener port already in use; continuing without local listener in this TUI instance', {
|
|
160
|
-
host: httpListenerHost,
|
|
161
|
-
port: httpListenerPort,
|
|
162
|
-
});
|
|
163
|
-
} else {
|
|
164
|
-
httpListener = createHttpListener(hookDispatcher, sharedUserAuth, runtimeServices.configManager);
|
|
165
|
-
httpListener.enable({ httpListener: true });
|
|
166
|
-
try {
|
|
167
|
-
const service = httpListener;
|
|
168
|
-
const result = await startWithTimeout('HTTP listener', () => service.start(), startupTimeoutMs, () => service.stop());
|
|
169
|
-
if (result === 'timed_out') {
|
|
170
|
-
httpListener = null;
|
|
171
|
-
}
|
|
172
|
-
} catch (error) {
|
|
173
|
-
const message = summarizeError(error);
|
|
174
|
-
if (message.includes('EADDRINUSE') || message.includes('Address already in use')) {
|
|
175
|
-
logger.warn('HTTP listener port already in use; continuing without local listener in this TUI instance', { error: message });
|
|
176
|
-
httpListener = null;
|
|
177
|
-
} else {
|
|
178
|
-
throw error;
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
return {
|
|
185
|
-
daemonServer,
|
|
186
|
-
httpListener,
|
|
187
|
-
listRecentControlPlaneEvents(limit: number): readonly import('../control-plane/gateway.ts').ControlPlaneRecentEvent[] {
|
|
188
|
-
return daemonServer?.listRecentControlPlaneEvents(limit) ?? [];
|
|
189
|
-
},
|
|
190
|
-
async stop(): Promise<void> {
|
|
191
|
-
await Promise.allSettled([
|
|
192
|
-
daemonServer?.stop(),
|
|
193
|
-
httpListener?.stop(),
|
|
194
|
-
]);
|
|
195
|
-
},
|
|
196
|
-
};
|
|
197
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from '@pellux/goodvibes-sdk/platform/runtime/compaction/index';
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from '@pellux/goodvibes-sdk/platform/runtime/compaction/lifecycle';
|
|
@@ -1,474 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* manager.ts
|
|
3
|
-
*
|
|
4
|
-
* CompactionManager — orchestrates the full compaction lifecycle state machine.
|
|
5
|
-
*
|
|
6
|
-
* Responsibilities:
|
|
7
|
-
* - Gate all compaction behind the `session-compaction` feature flag
|
|
8
|
-
* - Drive state transitions (idle → checking_threshold → strategy → boundary_commit → done/failed)
|
|
9
|
-
* - Select and execute the appropriate compaction strategy
|
|
10
|
-
* - Create boundary commits with lineage tracking
|
|
11
|
-
* - Emit CompactionEvents at each transition
|
|
12
|
-
* - Expose the resume repair pipeline
|
|
13
|
-
*/
|
|
14
|
-
|
|
15
|
-
import { logger } from '@pellux/goodvibes-sdk/platform/utils/logger';
|
|
16
|
-
import type { RuntimeEventBus } from '@pellux/goodvibes-sdk/platform/runtime/events/index';
|
|
17
|
-
import type { FeatureFlagManager } from '@pellux/goodvibes-sdk/platform/runtime/feature-flags/manager';
|
|
18
|
-
import type { EmitterContext } from '@pellux/goodvibes-sdk/platform/runtime/emitters/index';
|
|
19
|
-
import {
|
|
20
|
-
applyTransition,
|
|
21
|
-
selectStrategy,
|
|
22
|
-
strategyToState,
|
|
23
|
-
} from '@pellux/goodvibes-sdk/platform/runtime/compaction/lifecycle';
|
|
24
|
-
import {
|
|
25
|
-
runMicrocompact,
|
|
26
|
-
runCollapse,
|
|
27
|
-
runAutocompact,
|
|
28
|
-
runReactive,
|
|
29
|
-
createBoundaryCommit,
|
|
30
|
-
validateBoundaryCommit,
|
|
31
|
-
} from '@pellux/goodvibes-sdk/platform/runtime/compaction/strategies/index';
|
|
32
|
-
import { runResumeRepair } from '@pellux/goodvibes-sdk/platform/runtime/compaction/resume-repair';
|
|
33
|
-
import type {
|
|
34
|
-
BoundaryCommit,
|
|
35
|
-
CompactionLifecycleResult,
|
|
36
|
-
CompactionLifecycleState,
|
|
37
|
-
CompactionStrategy,
|
|
38
|
-
CompactionTrigger,
|
|
39
|
-
StrategyInput,
|
|
40
|
-
StrategyOutput,
|
|
41
|
-
} from '@pellux/goodvibes-sdk/platform/runtime/compaction/types';
|
|
42
|
-
import type { ResumeRepairResult } from '@pellux/goodvibes-sdk/platform/runtime/compaction/types';
|
|
43
|
-
import {
|
|
44
|
-
emitCompactionCheck,
|
|
45
|
-
emitCompactionDone,
|
|
46
|
-
emitCompactionFailed,
|
|
47
|
-
emitCompactionBoundaryCommit,
|
|
48
|
-
emitCompactionMicrocompact,
|
|
49
|
-
emitCompactionCollapse,
|
|
50
|
-
emitCompactionAutocompact,
|
|
51
|
-
emitCompactionReactive,
|
|
52
|
-
emitCompactionQualityScore,
|
|
53
|
-
emitCompactionStrategySwitch,
|
|
54
|
-
} from '@pellux/goodvibes-sdk/platform/runtime/emitters/compaction';
|
|
55
|
-
import { computeQualityScore, escalateStrategy, LOW_QUALITY_THRESHOLD } from '@pellux/goodvibes-sdk/platform/runtime/compaction/quality-score';
|
|
56
|
-
import type { CompactionQualityScore } from '@pellux/goodvibes-sdk/platform/runtime/compaction/quality-score';
|
|
57
|
-
import type { ProviderMessage } from '@pellux/goodvibes-sdk/platform/providers/interface';
|
|
58
|
-
import { summarizeError } from '@pellux/goodvibes-sdk/platform/utils/error-display';
|
|
59
|
-
|
|
60
|
-
// ---------------------------------------------------------------------------
|
|
61
|
-
// Manager options
|
|
62
|
-
// ---------------------------------------------------------------------------
|
|
63
|
-
|
|
64
|
-
/** Options for constructing a CompactionManager. */
|
|
65
|
-
export interface CompactionManagerOptions {
|
|
66
|
-
/** Session ID for event correlation. */
|
|
67
|
-
sessionId: string;
|
|
68
|
-
/** Runtime event bus for emitting CompactionEvents. */
|
|
69
|
-
bus: RuntimeEventBus;
|
|
70
|
-
/** Feature flag manager — used to gate on `session-compaction`. */
|
|
71
|
-
flags: FeatureFlagManager;
|
|
72
|
-
/** Model context window size (tokens). */
|
|
73
|
-
contextWindow: number;
|
|
74
|
-
/** Threshold fraction at which compaction is triggered (default: 0.75). */
|
|
75
|
-
thresholdFraction?: number;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
// ---------------------------------------------------------------------------
|
|
79
|
-
// Manager
|
|
80
|
-
// ---------------------------------------------------------------------------
|
|
81
|
-
|
|
82
|
-
/**
|
|
83
|
-
* CompactionManager — manages the full lifecycle of session context compaction.
|
|
84
|
-
*
|
|
85
|
-
* All compaction is gated behind the `session-compaction` feature flag.
|
|
86
|
-
* When the flag is disabled, `compact()` is a no-op and returns the original
|
|
87
|
-
* messages unchanged.
|
|
88
|
-
*
|
|
89
|
-
* Usage:
|
|
90
|
-
* ```ts
|
|
91
|
-
* const manager = createCompactionManager({ sessionId, bus, flags, contextWindow });
|
|
92
|
-
* const result = await manager.compact({ messages, tokenCount: 45000, trigger: 'auto' });
|
|
93
|
-
* ```
|
|
94
|
-
*/
|
|
95
|
-
export class CompactionManager {
|
|
96
|
-
private readonly _sessionId: string;
|
|
97
|
-
private readonly _bus: RuntimeEventBus;
|
|
98
|
-
private readonly _flags: FeatureFlagManager;
|
|
99
|
-
private readonly _contextWindow: number;
|
|
100
|
-
private readonly _thresholdFraction: number;
|
|
101
|
-
|
|
102
|
-
/** Current state machine state. */
|
|
103
|
-
private _state: CompactionLifecycleState = 'idle';
|
|
104
|
-
|
|
105
|
-
/** Most recent boundary commit (null until first successful compaction). */
|
|
106
|
-
private _lastCommit: BoundaryCommit | null = null;
|
|
107
|
-
|
|
108
|
-
/** Emitter context used for all event emissions. */
|
|
109
|
-
private readonly _ctx: EmitterContext;
|
|
110
|
-
|
|
111
|
-
constructor(opts: CompactionManagerOptions) {
|
|
112
|
-
this._sessionId = opts.sessionId;
|
|
113
|
-
this._bus = opts.bus;
|
|
114
|
-
this._flags = opts.flags;
|
|
115
|
-
this._contextWindow = opts.contextWindow;
|
|
116
|
-
this._thresholdFraction = opts.thresholdFraction ?? 0.75;
|
|
117
|
-
this._ctx = {
|
|
118
|
-
sessionId: opts.sessionId,
|
|
119
|
-
source: 'compaction-manager',
|
|
120
|
-
traceId: crypto.randomUUID(),
|
|
121
|
-
};
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
// ── Public API ─────────────────────────────────────────────────────────────
|
|
125
|
-
|
|
126
|
-
/** Returns the current lifecycle state. */
|
|
127
|
-
get state(): CompactionLifecycleState {
|
|
128
|
-
return this._state;
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
/** Returns the most recent boundary commit, or null. */
|
|
132
|
-
get lastCommit(): BoundaryCommit | null {
|
|
133
|
-
return this._lastCommit;
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
/**
|
|
137
|
-
* Options for a compaction run.
|
|
138
|
-
*/
|
|
139
|
-
|
|
140
|
-
/**
|
|
141
|
-
* Runs the compaction lifecycle for the given messages and trigger.
|
|
142
|
-
*
|
|
143
|
-
* If the `session-compaction` feature flag is disabled, returns the
|
|
144
|
-
* original messages unchanged with no events emitted.
|
|
145
|
-
*
|
|
146
|
-
* @param opts - Run options.
|
|
147
|
-
* @returns Lifecycle result, or null if gated/skipped.
|
|
148
|
-
*/
|
|
149
|
-
async compact(opts: {
|
|
150
|
-
messages: ProviderMessage[];
|
|
151
|
-
tokenCount: number;
|
|
152
|
-
trigger: CompactionTrigger;
|
|
153
|
-
isPromptTooLong?: boolean;
|
|
154
|
-
}): Promise<CompactionLifecycleResult | null> {
|
|
155
|
-
// ── Feature flag gate ────────────────────────────────────────────────────
|
|
156
|
-
if (!this._flags.isEnabled('session-compaction')) {
|
|
157
|
-
logger.debug('[CompactionManager] session-compaction flag disabled; skipping', {
|
|
158
|
-
sessionId: this._sessionId,
|
|
159
|
-
});
|
|
160
|
-
return null;
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
const runStart = Date.now();
|
|
164
|
-
const { messages, tokenCount, trigger, isPromptTooLong } = opts;
|
|
165
|
-
const threshold = Math.floor(this._contextWindow * this._thresholdFraction);
|
|
166
|
-
|
|
167
|
-
// ── Transition: idle → checking_threshold ────────────────────────────────
|
|
168
|
-
this._transition('checking_threshold');
|
|
169
|
-
|
|
170
|
-
emitCompactionCheck(this._bus, this._ctx, {
|
|
171
|
-
sessionId: this._sessionId,
|
|
172
|
-
tokenCount,
|
|
173
|
-
threshold,
|
|
174
|
-
});
|
|
175
|
-
|
|
176
|
-
// ── Check threshold ──────────────────────────────────────────────────────
|
|
177
|
-
if (trigger === 'auto' && !isPromptTooLong && tokenCount < threshold) {
|
|
178
|
-
// Below threshold — go straight to done without compacting
|
|
179
|
-
this._transition('done');
|
|
180
|
-
this._transition('idle');
|
|
181
|
-
logger.debug('[CompactionManager] below threshold; no compaction needed', {
|
|
182
|
-
sessionId: this._sessionId,
|
|
183
|
-
tokenCount,
|
|
184
|
-
threshold,
|
|
185
|
-
});
|
|
186
|
-
return null;
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
// ── Select strategy ──────────────────────────────────────────────────────
|
|
190
|
-
let strategy = selectStrategy({
|
|
191
|
-
trigger,
|
|
192
|
-
currentTokens: tokenCount,
|
|
193
|
-
contextWindow: this._contextWindow,
|
|
194
|
-
isPromptTooLong,
|
|
195
|
-
});
|
|
196
|
-
const strategyState = strategyToState(strategy);
|
|
197
|
-
|
|
198
|
-
// ── Transition: checking_threshold → <strategy state> ────────────────────
|
|
199
|
-
this._transition(strategyState);
|
|
200
|
-
|
|
201
|
-
// ── Execute strategy ─────────────────────────────────────────────────────
|
|
202
|
-
let strategyOutput: StrategyOutput;
|
|
203
|
-
let qualityScore: CompactionQualityScore | null = null;
|
|
204
|
-
let strategySwitchReason: string | null = null;
|
|
205
|
-
|
|
206
|
-
const strategyInput: StrategyInput = {
|
|
207
|
-
sessionId: this._sessionId,
|
|
208
|
-
messages,
|
|
209
|
-
tokensBefore: tokenCount,
|
|
210
|
-
contextWindow: this._contextWindow,
|
|
211
|
-
strategy,
|
|
212
|
-
meta: isPromptTooLong !== undefined ? { isPromptTooLong } : undefined,
|
|
213
|
-
};
|
|
214
|
-
|
|
215
|
-
try {
|
|
216
|
-
strategyOutput = await this._runStrategy(strategy, strategyInput);
|
|
217
|
-
} catch (err) {
|
|
218
|
-
const error = summarizeError(err);
|
|
219
|
-
this._transition('failed');
|
|
220
|
-
emitCompactionFailed(this._bus, this._ctx, {
|
|
221
|
-
sessionId: this._sessionId,
|
|
222
|
-
strategy,
|
|
223
|
-
error,
|
|
224
|
-
});
|
|
225
|
-
this._transition('idle');
|
|
226
|
-
logger.error('[CompactionManager] strategy execution failed', {
|
|
227
|
-
sessionId: this._sessionId,
|
|
228
|
-
strategy,
|
|
229
|
-
error,
|
|
230
|
-
});
|
|
231
|
-
return null;
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
// ── Score quality and auto-switch if low ─────────────────────────────────
|
|
235
|
-
qualityScore = computeQualityScore(strategyInput, strategyOutput);
|
|
236
|
-
|
|
237
|
-
emitCompactionQualityScore(this._bus, this._ctx, {
|
|
238
|
-
sessionId: this._sessionId,
|
|
239
|
-
strategy,
|
|
240
|
-
score: qualityScore.score,
|
|
241
|
-
grade: qualityScore.grade,
|
|
242
|
-
compressionRatio: qualityScore.compressionRatio,
|
|
243
|
-
retentionScore: qualityScore.retentionScore,
|
|
244
|
-
isLowQuality: qualityScore.isLowQuality,
|
|
245
|
-
description: qualityScore.description,
|
|
246
|
-
});
|
|
247
|
-
|
|
248
|
-
if (qualityScore.isLowQuality) {
|
|
249
|
-
const escalated = escalateStrategy(strategy);
|
|
250
|
-
if (escalated !== strategy) {
|
|
251
|
-
const reason = `Quality score ${qualityScore.score.toFixed(2)} below threshold ${LOW_QUALITY_THRESHOLD}; escalating from ${strategy} to ${escalated}`;
|
|
252
|
-
strategySwitchReason = reason;
|
|
253
|
-
|
|
254
|
-
logger.warn('[CompactionManager] low quality score — switching strategy', {
|
|
255
|
-
sessionId: this._sessionId,
|
|
256
|
-
fromStrategy: strategy,
|
|
257
|
-
toStrategy: escalated,
|
|
258
|
-
score: qualityScore.score,
|
|
259
|
-
grade: qualityScore.grade,
|
|
260
|
-
});
|
|
261
|
-
|
|
262
|
-
emitCompactionStrategySwitch(this._bus, this._ctx, {
|
|
263
|
-
sessionId: this._sessionId,
|
|
264
|
-
fromStrategy: strategy,
|
|
265
|
-
toStrategy: escalated,
|
|
266
|
-
reason,
|
|
267
|
-
score: qualityScore.score,
|
|
268
|
-
});
|
|
269
|
-
|
|
270
|
-
// Force state to the escalated strategy state, bypassing normal transition
|
|
271
|
-
// validation. This is intentional: quality-correction reruns are not modelled
|
|
272
|
-
// in the standard state machine, and forcing the state allows _runStrategy to
|
|
273
|
-
// emit the correct strategy event while keeping lifecycle state consistent.
|
|
274
|
-
this._state = strategyToState(escalated);
|
|
275
|
-
|
|
276
|
-
const escalatedInput: StrategyInput = { ...strategyInput, strategy: escalated };
|
|
277
|
-
try {
|
|
278
|
-
const escalatedOutput = await this._runStrategy(escalated, escalatedInput);
|
|
279
|
-
// Re-score the escalated result
|
|
280
|
-
qualityScore = computeQualityScore(escalatedInput, escalatedOutput);
|
|
281
|
-
strategyOutput = escalatedOutput;
|
|
282
|
-
strategy = escalated;
|
|
283
|
-
} catch (err) {
|
|
284
|
-
const error = summarizeError(err);
|
|
285
|
-
logger.warn('[CompactionManager] escalated strategy also failed; using original output', {
|
|
286
|
-
sessionId: this._sessionId,
|
|
287
|
-
strategy: escalated,
|
|
288
|
-
error,
|
|
289
|
-
});
|
|
290
|
-
// Fall back to the original output — restore to the original strategy state
|
|
291
|
-
this._state = strategyToState(strategy);
|
|
292
|
-
}
|
|
293
|
-
} else {
|
|
294
|
-
// Already at ceiling strategy (collapse or reactive) — log but continue
|
|
295
|
-
logger.debug('[CompactionManager] low quality at ceiling strategy; no escalation possible', {
|
|
296
|
-
sessionId: this._sessionId,
|
|
297
|
-
strategy,
|
|
298
|
-
score: qualityScore.score,
|
|
299
|
-
});
|
|
300
|
-
}
|
|
301
|
-
}
|
|
302
|
-
|
|
303
|
-
// ── Transition: <strategy> → boundary_commit ─────────────────────────────
|
|
304
|
-
this._transition('boundary_commit');
|
|
305
|
-
|
|
306
|
-
// ── Create boundary commit ───────────────────────────────────────────────
|
|
307
|
-
const commit = createBoundaryCommit({
|
|
308
|
-
sessionId: this._sessionId,
|
|
309
|
-
strategyOutput,
|
|
310
|
-
parent: this._lastCommit,
|
|
311
|
-
tokensBefore: tokenCount,
|
|
312
|
-
});
|
|
313
|
-
|
|
314
|
-
const commitErrors = validateBoundaryCommit(commit);
|
|
315
|
-
if (commitErrors.length > 0) {
|
|
316
|
-
const error = commitErrors.join('; ');
|
|
317
|
-
this._transition('failed');
|
|
318
|
-
emitCompactionFailed(this._bus, this._ctx, {
|
|
319
|
-
sessionId: this._sessionId,
|
|
320
|
-
strategy,
|
|
321
|
-
error,
|
|
322
|
-
});
|
|
323
|
-
this._transition('idle');
|
|
324
|
-
logger.error('[CompactionManager] boundary commit validation failed', {
|
|
325
|
-
sessionId: this._sessionId,
|
|
326
|
-
errors: commitErrors,
|
|
327
|
-
});
|
|
328
|
-
return null;
|
|
329
|
-
}
|
|
330
|
-
|
|
331
|
-
emitCompactionBoundaryCommit(this._bus, this._ctx, {
|
|
332
|
-
sessionId: this._sessionId,
|
|
333
|
-
checkpointId: commit.checkpointId,
|
|
334
|
-
});
|
|
335
|
-
|
|
336
|
-
this._lastCommit = commit;
|
|
337
|
-
|
|
338
|
-
// ── Transition: boundary_commit → done ───────────────────────────────────
|
|
339
|
-
this._transition('done');
|
|
340
|
-
const durationMs = Date.now() - runStart;
|
|
341
|
-
|
|
342
|
-
emitCompactionDone(this._bus, this._ctx, {
|
|
343
|
-
sessionId: this._sessionId,
|
|
344
|
-
strategy,
|
|
345
|
-
tokensBefore: tokenCount,
|
|
346
|
-
tokensAfter: strategyOutput.tokensAfter,
|
|
347
|
-
durationMs,
|
|
348
|
-
});
|
|
349
|
-
|
|
350
|
-
// ── Transition: done → idle ───────────────────────────────────────────────
|
|
351
|
-
this._transition('idle');
|
|
352
|
-
|
|
353
|
-
return {
|
|
354
|
-
sessionId: this._sessionId,
|
|
355
|
-
strategy,
|
|
356
|
-
tokensBefore: tokenCount,
|
|
357
|
-
tokensAfter: strategyOutput.tokensAfter,
|
|
358
|
-
durationMs,
|
|
359
|
-
commit,
|
|
360
|
-
messages: strategyOutput.messages,
|
|
361
|
-
warnings: strategyOutput.warnings,
|
|
362
|
-
qualityScore,
|
|
363
|
-
strategySwitchReason,
|
|
364
|
-
};
|
|
365
|
-
}
|
|
366
|
-
|
|
367
|
-
/**
|
|
368
|
-
* Runs the session resume repair pipeline on the last boundary commit.
|
|
369
|
-
*
|
|
370
|
-
* If no commit exists, returns a result with the original messages and
|
|
371
|
-
* a warning action.
|
|
372
|
-
*
|
|
373
|
-
* @param overrideCommit - Optional commit to repair (defaults to lastCommit).
|
|
374
|
-
* @returns ResumeRepairResult.
|
|
375
|
-
*/
|
|
376
|
-
repair(
|
|
377
|
-
overrideCommit?: BoundaryCommit,
|
|
378
|
-
): ResumeRepairResult {
|
|
379
|
-
const commit = overrideCommit ?? this._lastCommit;
|
|
380
|
-
if (!commit) {
|
|
381
|
-
return {
|
|
382
|
-
sessionId: this._sessionId,
|
|
383
|
-
repaired: false,
|
|
384
|
-
actions: [
|
|
385
|
-
{
|
|
386
|
-
kind: 'no_commit',
|
|
387
|
-
description: 'No boundary commit available; nothing to repair.',
|
|
388
|
-
severity: 'info',
|
|
389
|
-
},
|
|
390
|
-
],
|
|
391
|
-
messages: [],
|
|
392
|
-
safeToResume: false,
|
|
393
|
-
failReason: 'No boundary commit available for repair.',
|
|
394
|
-
};
|
|
395
|
-
}
|
|
396
|
-
return runResumeRepair({ commit });
|
|
397
|
-
}
|
|
398
|
-
|
|
399
|
-
// ── Private helpers ────────────────────────────────────────────────────────
|
|
400
|
-
|
|
401
|
-
/**
|
|
402
|
-
* Executes the selected strategy and emits the corresponding domain event.
|
|
403
|
-
*/
|
|
404
|
-
private async _runStrategy(
|
|
405
|
-
strategy: CompactionStrategy,
|
|
406
|
-
input: StrategyInput,
|
|
407
|
-
): Promise<StrategyOutput> {
|
|
408
|
-
switch (strategy) {
|
|
409
|
-
case 'microcompact': {
|
|
410
|
-
const output = runMicrocompact(input);
|
|
411
|
-
emitCompactionMicrocompact(this._bus, this._ctx, {
|
|
412
|
-
sessionId: this._sessionId,
|
|
413
|
-
turnCount: input.messages.length,
|
|
414
|
-
tokensBefore: input.tokensBefore,
|
|
415
|
-
tokensAfter: output.tokensAfter,
|
|
416
|
-
});
|
|
417
|
-
return output;
|
|
418
|
-
}
|
|
419
|
-
case 'collapse': {
|
|
420
|
-
const output = runCollapse(input);
|
|
421
|
-
emitCompactionCollapse(this._bus, this._ctx, {
|
|
422
|
-
sessionId: this._sessionId,
|
|
423
|
-
messageCount: input.messages.length,
|
|
424
|
-
tokensBefore: input.tokensBefore,
|
|
425
|
-
tokensAfter: output.tokensAfter,
|
|
426
|
-
});
|
|
427
|
-
return output;
|
|
428
|
-
}
|
|
429
|
-
case 'autocompact': {
|
|
430
|
-
const output = runAutocompact(input);
|
|
431
|
-
emitCompactionAutocompact(this._bus, this._ctx, {
|
|
432
|
-
sessionId: this._sessionId,
|
|
433
|
-
strategy: 'autocompact',
|
|
434
|
-
tokensBefore: input.tokensBefore,
|
|
435
|
-
tokensAfter: output.tokensAfter,
|
|
436
|
-
});
|
|
437
|
-
return output;
|
|
438
|
-
}
|
|
439
|
-
case 'reactive': {
|
|
440
|
-
const output = runReactive(input);
|
|
441
|
-
emitCompactionReactive(this._bus, this._ctx, {
|
|
442
|
-
sessionId: this._sessionId,
|
|
443
|
-
tokenCount: input.tokensBefore,
|
|
444
|
-
limit: this._contextWindow,
|
|
445
|
-
});
|
|
446
|
-
return output;
|
|
447
|
-
}
|
|
448
|
-
default: {
|
|
449
|
-
const _exhaustive: never = strategy;
|
|
450
|
-
throw new Error(`Unknown compaction strategy: ${_exhaustive}`);
|
|
451
|
-
}
|
|
452
|
-
}
|
|
453
|
-
}
|
|
454
|
-
|
|
455
|
-
/**
|
|
456
|
-
* Applies a state transition, throwing if invalid.
|
|
457
|
-
* Invalid transitions are logged and treated as internal errors.
|
|
458
|
-
*/
|
|
459
|
-
private _transition(target: CompactionLifecycleState): void {
|
|
460
|
-
const result = applyTransition(this._state, target);
|
|
461
|
-
if (!result.ok) {
|
|
462
|
-
logger.error('[CompactionManager] invalid state transition', {
|
|
463
|
-
from: this._state,
|
|
464
|
-
to: target,
|
|
465
|
-
reason: result.reason,
|
|
466
|
-
sessionId: this._sessionId,
|
|
467
|
-
});
|
|
468
|
-
// Force to failed to avoid being stuck in an inconsistent state
|
|
469
|
-
this._state = 'failed';
|
|
470
|
-
return;
|
|
471
|
-
}
|
|
472
|
-
this._state = result.state;
|
|
473
|
-
}
|
|
474
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from '@pellux/goodvibes-sdk/platform/runtime/compaction/quality-score';
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from '@pellux/goodvibes-sdk/platform/runtime/compaction/resume-repair';
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from '@pellux/goodvibes-sdk/platform/runtime/compaction/strategies/autocompact';
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from '@pellux/goodvibes-sdk/platform/runtime/compaction/strategies/boundary-commit';
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from '@pellux/goodvibes-sdk/platform/runtime/compaction/strategies/collapse';
|