@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,75 +0,0 @@
|
|
|
1
|
-
import type { ConfigManager } from '@pellux/goodvibes-sdk/platform/config/manager';
|
|
2
|
-
import type { RuntimeEventBus } from '@pellux/goodvibes-sdk/platform/runtime/events/index';
|
|
3
|
-
import { logger } from '@pellux/goodvibes-sdk/platform/utils/logger';
|
|
4
|
-
import type { QualityGateResult } from '@pellux/goodvibes-sdk/platform/agents/wrfc-types';
|
|
5
|
-
import {
|
|
6
|
-
executeGateCommand,
|
|
7
|
-
getSkippedGateReason,
|
|
8
|
-
loadPackageScripts,
|
|
9
|
-
} from '@pellux/goodvibes-sdk/platform/agents/wrfc-gates';
|
|
10
|
-
import { getEnabledWrfcGates } from '@pellux/goodvibes-sdk/platform/agents/wrfc-config';
|
|
11
|
-
import { emitWrfcGateResult } from '@pellux/goodvibes-sdk/platform/agents/wrfc-runtime-events';
|
|
12
|
-
|
|
13
|
-
export async function runWrfcGateChecks(options: {
|
|
14
|
-
readonly configManager: Pick<ConfigManager, 'get' | 'getCategory'>;
|
|
15
|
-
readonly projectRoot: string;
|
|
16
|
-
readonly runtimeBus: RuntimeEventBus;
|
|
17
|
-
readonly sessionId: string;
|
|
18
|
-
readonly chainId: string;
|
|
19
|
-
readonly onResult?: (results: readonly QualityGateResult[], result: QualityGateResult) => void;
|
|
20
|
-
}): Promise<QualityGateResult[]> {
|
|
21
|
-
const gates = getEnabledWrfcGates(options.configManager);
|
|
22
|
-
if (gates.length === 0) {
|
|
23
|
-
logger.debug('Wrfc gate runner: no gates configured', { chainId: options.chainId });
|
|
24
|
-
return [];
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
logger.debug('Wrfc gate runner: executing gates', {
|
|
28
|
-
chainId: options.chainId,
|
|
29
|
-
gateCount: gates.length,
|
|
30
|
-
});
|
|
31
|
-
|
|
32
|
-
const pkgScripts = await loadPackageScripts(options.projectRoot);
|
|
33
|
-
const results: QualityGateResult[] = [];
|
|
34
|
-
|
|
35
|
-
for (const gate of gates) {
|
|
36
|
-
const skipReason = getSkippedGateReason(gate.name, options.projectRoot, pkgScripts);
|
|
37
|
-
if (skipReason !== null) {
|
|
38
|
-
const result: QualityGateResult = {
|
|
39
|
-
gate: gate.name,
|
|
40
|
-
passed: true,
|
|
41
|
-
output: skipReason,
|
|
42
|
-
durationMs: 0,
|
|
43
|
-
};
|
|
44
|
-
results.push(result);
|
|
45
|
-
emitWrfcGateResult(options.runtimeBus, options.sessionId, options.chainId, gate.name, true);
|
|
46
|
-
options.onResult?.(results.slice(), result);
|
|
47
|
-
logger.debug('Wrfc gate runner: gate skipped', {
|
|
48
|
-
chainId: options.chainId,
|
|
49
|
-
gate: gate.name,
|
|
50
|
-
reason: skipReason,
|
|
51
|
-
});
|
|
52
|
-
continue;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
const startedAt = Date.now();
|
|
56
|
-
const { passed, output } = await executeGateCommand(gate.command);
|
|
57
|
-
const result: QualityGateResult = {
|
|
58
|
-
gate: gate.name,
|
|
59
|
-
passed,
|
|
60
|
-
output,
|
|
61
|
-
durationMs: Date.now() - startedAt,
|
|
62
|
-
};
|
|
63
|
-
results.push(result);
|
|
64
|
-
emitWrfcGateResult(options.runtimeBus, options.sessionId, options.chainId, gate.name, passed);
|
|
65
|
-
options.onResult?.(results.slice(), result);
|
|
66
|
-
logger.debug('Wrfc gate runner: gate result', {
|
|
67
|
-
chainId: options.chainId,
|
|
68
|
-
gate: gate.name,
|
|
69
|
-
passed,
|
|
70
|
-
durationMs: result.durationMs,
|
|
71
|
-
});
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
return results;
|
|
75
|
-
}
|
|
@@ -1,284 +0,0 @@
|
|
|
1
|
-
import type { CompletionReport, EngineerReport, ReviewerReport } from '@pellux/goodvibes-sdk/platform/agents/completion-report';
|
|
2
|
-
import { parseCompletionReport } from '@pellux/goodvibes-sdk/platform/agents/completion-report';
|
|
3
|
-
import type { QualityGateResult } from '@pellux/goodvibes-sdk/platform/agents/wrfc-types';
|
|
4
|
-
import { logger } from '@pellux/goodvibes-sdk/platform/utils/logger';
|
|
5
|
-
|
|
6
|
-
const REVIEW_BRIEF_ITEM_LIMIT = 6;
|
|
7
|
-
const REVIEW_BRIEF_FILE_LIMIT = 8;
|
|
8
|
-
const REVIEW_BRIEF_TEXT_LIMIT = 220;
|
|
9
|
-
|
|
10
|
-
export function extractScoreFromText(text: string): number | null {
|
|
11
|
-
const scorePattern = /\*{0,2}(?:overall\s+)?score\s*:?\s*\*{0,2}\s*(\d+(?:\.\d+)?)\s*\/\s*10/i;
|
|
12
|
-
const matchScore = text.match(scorePattern);
|
|
13
|
-
if (matchScore) {
|
|
14
|
-
const value = parseFloat(matchScore[1]);
|
|
15
|
-
if (value <= 10) return value;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
const slashPattern = /(\d+(?:\.\d+)?)\s*\/\s*10/;
|
|
19
|
-
const matchSlash = text.match(slashPattern);
|
|
20
|
-
if (matchSlash) {
|
|
21
|
-
const value = parseFloat(matchSlash[1]);
|
|
22
|
-
if (value <= 10) return value;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
const ratedPattern = /\b(?:rated|scored|rating)\s*:?\s*(\d+(?:\.\d+)?)/i;
|
|
26
|
-
const matchRated = text.match(ratedPattern);
|
|
27
|
-
if (matchRated) {
|
|
28
|
-
const value = parseFloat(matchRated[1]);
|
|
29
|
-
if (value <= 10) return value;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
return null;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
export function extractPassedFromText(text: string, score: number, threshold: number): boolean {
|
|
36
|
-
if (score >= threshold) return true;
|
|
37
|
-
if (/\bpass(ed|es|ing)?\b/i.test(text) && !/\bfail/i.test(text)) return true;
|
|
38
|
-
if (/\bapproved?\b/i.test(text)) return true;
|
|
39
|
-
return false;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
export function extractIssuesFromText(text: string): ReviewerReport['issues'] {
|
|
43
|
-
const issues: ReviewerReport['issues'] = [];
|
|
44
|
-
const issuePattern = /(?:^|\n)\s*(?:\d+\.\s*|-\s*|\*\s*)?(?:\*{1,2})?\[?\(?(critical|major|minor|suggestion)\)?\]?(?:\*{1,2})?[\s:*]*(.+)/gi;
|
|
45
|
-
let match: RegExpExecArray | null;
|
|
46
|
-
while ((match = issuePattern.exec(text)) !== null) {
|
|
47
|
-
const severity = match[1].toLowerCase() as 'critical' | 'major' | 'minor' | 'suggestion';
|
|
48
|
-
issues.push({
|
|
49
|
-
severity,
|
|
50
|
-
description: match[2].trim(),
|
|
51
|
-
pointValue: severity === 'critical' ? 3 : severity === 'major' ? 2 : 1,
|
|
52
|
-
});
|
|
53
|
-
}
|
|
54
|
-
return issues;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
export function parseEngineerCompletionReport(rawOutput: string, _template?: string): CompletionReport {
|
|
58
|
-
const report = parseCompletionReport(rawOutput);
|
|
59
|
-
if (report) return report;
|
|
60
|
-
return {
|
|
61
|
-
version: 1,
|
|
62
|
-
archetype: 'engineer',
|
|
63
|
-
summary: rawOutput.slice(0, 500) || '(no output)',
|
|
64
|
-
gatheredContext: [],
|
|
65
|
-
plannedActions: [],
|
|
66
|
-
appliedChanges: [],
|
|
67
|
-
filesCreated: [],
|
|
68
|
-
filesModified: [],
|
|
69
|
-
filesDeleted: [],
|
|
70
|
-
decisions: [],
|
|
71
|
-
issues: [],
|
|
72
|
-
uncertainties: [],
|
|
73
|
-
} as EngineerReport;
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
export function parseReviewerCompletionReport(
|
|
77
|
-
chainId: string,
|
|
78
|
-
rawOutput: string,
|
|
79
|
-
threshold: number,
|
|
80
|
-
): ReviewerReport {
|
|
81
|
-
const reviewerReport = parseCompletionReport(rawOutput);
|
|
82
|
-
if (reviewerReport && reviewerReport.archetype === 'reviewer') {
|
|
83
|
-
return reviewerReport as ReviewerReport;
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
const extractedScore = extractScoreFromText(rawOutput);
|
|
87
|
-
const extractedPassed = extractedScore !== null
|
|
88
|
-
? extractPassedFromText(rawOutput, extractedScore, threshold)
|
|
89
|
-
: false;
|
|
90
|
-
const extractedIssues = extractIssuesFromText(rawOutput);
|
|
91
|
-
|
|
92
|
-
logger.warn('WrfcController: no structured ReviewerReport found, extracting from text', {
|
|
93
|
-
chainId,
|
|
94
|
-
extractedScore,
|
|
95
|
-
});
|
|
96
|
-
if (extractedScore === null) {
|
|
97
|
-
logger.warn('WrfcController: score extraction returned null, defaulting to 0', { chainId });
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
return {
|
|
101
|
-
version: 1,
|
|
102
|
-
archetype: 'reviewer',
|
|
103
|
-
summary: rawOutput.slice(0, 500) || '(no reviewer output)',
|
|
104
|
-
score: extractedScore ?? 0,
|
|
105
|
-
passed: extractedPassed,
|
|
106
|
-
dimensions: [],
|
|
107
|
-
issues: extractedIssues,
|
|
108
|
-
};
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
export function buildReviewTask(
|
|
112
|
-
chainId: string,
|
|
113
|
-
report: CompletionReport,
|
|
114
|
-
threshold: number,
|
|
115
|
-
): string {
|
|
116
|
-
const lines = buildReviewBrief(report);
|
|
117
|
-
return [
|
|
118
|
-
`WRFC Review Request`,
|
|
119
|
-
`Chain ID: ${chainId}`,
|
|
120
|
-
``,
|
|
121
|
-
`Engineer report digest:`,
|
|
122
|
-
...lines,
|
|
123
|
-
``,
|
|
124
|
-
`Instructions:`,
|
|
125
|
-
`1. Read the referenced files directly before scoring. Do not rely on this digest alone.`,
|
|
126
|
-
`2. Inspect the engineer's gatheredContext, plannedActions, appliedChanges, and decisions for discipline and coherence.`,
|
|
127
|
-
`3. Verify the implementation meets all stated requirements.`,
|
|
128
|
-
`4. Score the implementation using the 10-dimension review rubric.`,
|
|
129
|
-
`5. The passing score threshold is ${threshold}/10.`,
|
|
130
|
-
`6. Return a structured ReviewerReport JSON block in your final response.`,
|
|
131
|
-
``,
|
|
132
|
-
`The ReviewerReport must include:`,
|
|
133
|
-
`- version: 1`,
|
|
134
|
-
`- archetype: "reviewer"`,
|
|
135
|
-
`- score: <number 0-10>`,
|
|
136
|
-
`- passed: <boolean>`,
|
|
137
|
-
`- dimensions: array of { name, score, maxScore, issues[] }`,
|
|
138
|
-
`- issues: array of { severity, description, file?, line?, pointValue }`,
|
|
139
|
-
].join('\n');
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
function truncateReviewText(text: string, max = REVIEW_BRIEF_TEXT_LIMIT): string {
|
|
143
|
-
const normalized = text.replace(/\s+/g, ' ').trim();
|
|
144
|
-
if (normalized.length <= max) return normalized;
|
|
145
|
-
return `${normalized.slice(0, max - 3)}...`;
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
function formatInlineList(items: readonly string[], limit: number): string {
|
|
149
|
-
if (items.length === 0) return 'none';
|
|
150
|
-
const visible = items.slice(0, limit).map((item) => truncateReviewText(item, 120));
|
|
151
|
-
if (items.length <= limit) return visible.join(', ');
|
|
152
|
-
return `${visible.join(', ')} (+${items.length - limit} more)`;
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
function appendListSection(
|
|
156
|
-
lines: string[],
|
|
157
|
-
title: string,
|
|
158
|
-
items: readonly string[],
|
|
159
|
-
limit = REVIEW_BRIEF_ITEM_LIMIT,
|
|
160
|
-
): void {
|
|
161
|
-
if (items.length === 0) return;
|
|
162
|
-
lines.push(`${title}:`);
|
|
163
|
-
for (const item of items.slice(0, limit)) {
|
|
164
|
-
lines.push(`- ${truncateReviewText(item)}`);
|
|
165
|
-
}
|
|
166
|
-
if (items.length > limit) {
|
|
167
|
-
lines.push(`- (+${items.length - limit} more)`);
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
function appendDecisionSection(
|
|
172
|
-
lines: string[],
|
|
173
|
-
decisions: EngineerReport['decisions'],
|
|
174
|
-
limit = 4,
|
|
175
|
-
): void {
|
|
176
|
-
if (decisions.length === 0) return;
|
|
177
|
-
lines.push('Decisions:');
|
|
178
|
-
for (const decision of decisions.slice(0, limit)) {
|
|
179
|
-
lines.push(`- ${truncateReviewText(decision.what, 120)} | why: ${truncateReviewText(decision.why, 120)}`);
|
|
180
|
-
}
|
|
181
|
-
if (decisions.length > limit) {
|
|
182
|
-
lines.push(`- (+${decisions.length - limit} more)`);
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
function normalizeEngineerReport(report: CompletionReport): EngineerReport {
|
|
187
|
-
const candidate = report as Partial<EngineerReport>;
|
|
188
|
-
return {
|
|
189
|
-
version: 1,
|
|
190
|
-
archetype: 'engineer',
|
|
191
|
-
summary: typeof candidate.summary === 'string' ? candidate.summary : '(no summary)',
|
|
192
|
-
...(typeof candidate.wrfcId === 'string' ? { wrfcId: candidate.wrfcId } : {}),
|
|
193
|
-
gatheredContext: Array.isArray(candidate.gatheredContext) ? candidate.gatheredContext.filter((item): item is string => typeof item === 'string') : [],
|
|
194
|
-
plannedActions: Array.isArray(candidate.plannedActions) ? candidate.plannedActions.filter((item): item is string => typeof item === 'string') : [],
|
|
195
|
-
appliedChanges: Array.isArray(candidate.appliedChanges) ? candidate.appliedChanges.filter((item): item is string => typeof item === 'string') : [],
|
|
196
|
-
filesCreated: Array.isArray(candidate.filesCreated) ? candidate.filesCreated.filter((item): item is string => typeof item === 'string') : [],
|
|
197
|
-
filesModified: Array.isArray(candidate.filesModified) ? candidate.filesModified.filter((item): item is string => typeof item === 'string') : [],
|
|
198
|
-
filesDeleted: Array.isArray(candidate.filesDeleted) ? candidate.filesDeleted.filter((item): item is string => typeof item === 'string') : [],
|
|
199
|
-
decisions: Array.isArray(candidate.decisions)
|
|
200
|
-
? candidate.decisions.filter((decision): decision is { what: string; why: string } =>
|
|
201
|
-
Boolean(decision) &&
|
|
202
|
-
typeof decision === 'object' &&
|
|
203
|
-
typeof decision.what === 'string' &&
|
|
204
|
-
typeof decision.why === 'string')
|
|
205
|
-
: [],
|
|
206
|
-
issues: Array.isArray(candidate.issues) ? candidate.issues.filter((item): item is string => typeof item === 'string') : [],
|
|
207
|
-
uncertainties: Array.isArray(candidate.uncertainties) ? candidate.uncertainties.filter((item): item is string => typeof item === 'string') : [],
|
|
208
|
-
};
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
function buildReviewBrief(report: CompletionReport): string[] {
|
|
212
|
-
const engineer = normalizeEngineerReport(report);
|
|
213
|
-
const lines = [
|
|
214
|
-
`- Summary: ${truncateReviewText(engineer.summary)}`,
|
|
215
|
-
`- Files created (${engineer.filesCreated.length}): ${formatInlineList(engineer.filesCreated, REVIEW_BRIEF_FILE_LIMIT)}`,
|
|
216
|
-
`- Files modified (${engineer.filesModified.length}): ${formatInlineList(engineer.filesModified, REVIEW_BRIEF_FILE_LIMIT)}`,
|
|
217
|
-
`- Files deleted (${engineer.filesDeleted.length}): ${formatInlineList(engineer.filesDeleted, REVIEW_BRIEF_FILE_LIMIT)}`,
|
|
218
|
-
];
|
|
219
|
-
|
|
220
|
-
appendListSection(lines, 'Gathered context', engineer.gatheredContext);
|
|
221
|
-
appendListSection(lines, 'Planned actions', engineer.plannedActions);
|
|
222
|
-
appendListSection(lines, 'Applied changes', engineer.appliedChanges);
|
|
223
|
-
appendDecisionSection(lines, engineer.decisions);
|
|
224
|
-
appendListSection(lines, 'Known issues', engineer.issues, 4);
|
|
225
|
-
appendListSection(lines, 'Uncertainties', engineer.uncertainties, 4);
|
|
226
|
-
|
|
227
|
-
return lines;
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
export function buildFixTask(
|
|
231
|
-
chainId: string,
|
|
232
|
-
review: ReviewerReport,
|
|
233
|
-
threshold: number,
|
|
234
|
-
fixAttempts: number,
|
|
235
|
-
): string {
|
|
236
|
-
const issueList = review.issues
|
|
237
|
-
.map((issue) => {
|
|
238
|
-
const location = issue.file ? ` (${issue.file}${issue.line ? `:${issue.line}` : ''})` : '';
|
|
239
|
-
return `- [${issue.severity.toUpperCase()}] ${issue.description}${location} (-${issue.pointValue} pts)`;
|
|
240
|
-
})
|
|
241
|
-
.join('\n');
|
|
242
|
-
return [
|
|
243
|
-
`WRFC Fix Request`,
|
|
244
|
-
`Chain ID: ${chainId}`,
|
|
245
|
-
``,
|
|
246
|
-
`Review score: ${review.score}/10 (threshold: ${threshold}/10)`,
|
|
247
|
-
`Fix attempt: ${fixAttempts}`,
|
|
248
|
-
``,
|
|
249
|
-
`Issues to address:`,
|
|
250
|
-
issueList || '(no structured issues — see review summary)',
|
|
251
|
-
``,
|
|
252
|
-
`Review summary: ${review.summary}`,
|
|
253
|
-
``,
|
|
254
|
-
`Instructions:`,
|
|
255
|
-
`1. Address ALL issues listed above, prioritizing critical and major items.`,
|
|
256
|
-
`2. Fix each issue completely — partial fixes will reduce your score.`,
|
|
257
|
-
`3. Re-run Gather, Plan, Apply explicitly before writing your final answer.`,
|
|
258
|
-
`4. Return a structured EngineerReport JSON block including gatheredContext, plannedActions, and appliedChanges in your final response.`,
|
|
259
|
-
].join('\n');
|
|
260
|
-
}
|
|
261
|
-
|
|
262
|
-
export function buildGateFailureTask(
|
|
263
|
-
chainId: string,
|
|
264
|
-
task: string,
|
|
265
|
-
failedGates: readonly QualityGateResult[],
|
|
266
|
-
): string {
|
|
267
|
-
const gateFailureSummary = failedGates
|
|
268
|
-
.map((result) => `- ${result.gate}: ${result.output.slice(0, 300)}`)
|
|
269
|
-
.join('\n');
|
|
270
|
-
return [
|
|
271
|
-
`WRFC Gate Failure Fix`,
|
|
272
|
-
`Parent Chain ID: ${chainId}`,
|
|
273
|
-
``,
|
|
274
|
-
`The following quality gates failed after review passed:`,
|
|
275
|
-
gateFailureSummary,
|
|
276
|
-
``,
|
|
277
|
-
`Original task: ${task}`,
|
|
278
|
-
``,
|
|
279
|
-
`Instructions:`,
|
|
280
|
-
`1. Fix all gate failures listed above.`,
|
|
281
|
-
`2. Ensure typecheck, lint, and test gates pass.`,
|
|
282
|
-
`3. Return a structured EngineerReport in your final response.`,
|
|
283
|
-
].join('\n');
|
|
284
|
-
}
|
|
@@ -1,150 +0,0 @@
|
|
|
1
|
-
import type { RuntimeEventBus } from '@pellux/goodvibes-sdk/platform/runtime/events/index';
|
|
2
|
-
import type { WrfcState } from '@pellux/goodvibes-sdk/platform/agents/wrfc-types';
|
|
3
|
-
import {
|
|
4
|
-
emitOrchestrationGraphCreated,
|
|
5
|
-
emitOrchestrationNodeAdded,
|
|
6
|
-
emitOrchestrationNodeCompleted,
|
|
7
|
-
emitOrchestrationNodeFailed,
|
|
8
|
-
emitOrchestrationNodeStarted,
|
|
9
|
-
emitWorkflowAutoCommitted,
|
|
10
|
-
emitWorkflowCascadeAborted,
|
|
11
|
-
emitWorkflowChainCreated,
|
|
12
|
-
emitWorkflowChainPassed,
|
|
13
|
-
emitWorkflowGateResult,
|
|
14
|
-
emitWorkflowStateChanged,
|
|
15
|
-
} from '@pellux/goodvibes-sdk/platform/runtime/emitters/index';
|
|
16
|
-
|
|
17
|
-
export type WorkflowContext = { sessionId: string; traceId: string; source: string };
|
|
18
|
-
export type WrfcNodeRole = 'engineer' | 'reviewer' | 'fixer' | 'verifier';
|
|
19
|
-
|
|
20
|
-
export function createWrfcWorkflowContext(sessionId: string, chainId: string): WorkflowContext {
|
|
21
|
-
return {
|
|
22
|
-
sessionId,
|
|
23
|
-
traceId: `${sessionId}:workflow:${chainId}`,
|
|
24
|
-
source: 'wrfc-controller',
|
|
25
|
-
};
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
export function createWrfcOrchestrationGraphId(chainId: string): string {
|
|
29
|
-
return `wrfc:${chainId}`;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
export function emitWrfcStateChanged(
|
|
33
|
-
runtimeBus: RuntimeEventBus,
|
|
34
|
-
sessionId: string,
|
|
35
|
-
chainId: string,
|
|
36
|
-
from: WrfcState,
|
|
37
|
-
to: WrfcState,
|
|
38
|
-
): void {
|
|
39
|
-
emitWorkflowStateChanged(runtimeBus, createWrfcWorkflowContext(sessionId, chainId), { chainId, from, to });
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
export function emitWrfcChainCreated(runtimeBus: RuntimeEventBus, sessionId: string, chainId: string, task: string): void {
|
|
43
|
-
emitWorkflowChainCreated(runtimeBus, createWrfcWorkflowContext(sessionId, chainId), { chainId, task });
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
export function emitWrfcGateResult(runtimeBus: RuntimeEventBus, sessionId: string, chainId: string, gate: string, passed: boolean): void {
|
|
47
|
-
emitWorkflowGateResult(runtimeBus, createWrfcWorkflowContext(sessionId, chainId), { chainId, gate, passed });
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
export function emitWrfcChainPassed(runtimeBus: RuntimeEventBus, sessionId: string, chainId: string): void {
|
|
51
|
-
emitWorkflowChainPassed(runtimeBus, createWrfcWorkflowContext(sessionId, chainId), { chainId });
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
export function emitWrfcAutoCommitted(
|
|
55
|
-
runtimeBus: RuntimeEventBus,
|
|
56
|
-
sessionId: string,
|
|
57
|
-
chainId: string,
|
|
58
|
-
commitHash?: string,
|
|
59
|
-
): void {
|
|
60
|
-
emitWorkflowAutoCommitted(runtimeBus, createWrfcWorkflowContext(sessionId, chainId), { chainId, commitHash });
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
export function emitWrfcCascadeAbort(
|
|
64
|
-
runtimeBus: RuntimeEventBus,
|
|
65
|
-
sessionId: string,
|
|
66
|
-
chainId: string,
|
|
67
|
-
reason: string,
|
|
68
|
-
): void {
|
|
69
|
-
emitWorkflowCascadeAborted(runtimeBus, createWrfcWorkflowContext(sessionId, chainId), { chainId, reason });
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
export function emitWrfcGraphCreated(
|
|
73
|
-
runtimeBus: RuntimeEventBus,
|
|
74
|
-
sessionId: string,
|
|
75
|
-
chainId: string,
|
|
76
|
-
title: string,
|
|
77
|
-
): void {
|
|
78
|
-
emitOrchestrationGraphCreated(runtimeBus, createWrfcWorkflowContext(sessionId, chainId), {
|
|
79
|
-
graphId: createWrfcOrchestrationGraphId(chainId),
|
|
80
|
-
title,
|
|
81
|
-
mode: 'review-loop',
|
|
82
|
-
});
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
export function startWrfcOrchestrationNode(
|
|
86
|
-
runtimeBus: RuntimeEventBus,
|
|
87
|
-
sessionId: string,
|
|
88
|
-
chainId: string,
|
|
89
|
-
suffix: string,
|
|
90
|
-
role: WrfcNodeRole,
|
|
91
|
-
title: string,
|
|
92
|
-
agentId?: string,
|
|
93
|
-
): string {
|
|
94
|
-
const nodeId = `${chainId}:${suffix}`;
|
|
95
|
-
const context = {
|
|
96
|
-
sessionId,
|
|
97
|
-
traceId: `${sessionId}:orchestration:${chainId}:${suffix}`,
|
|
98
|
-
source: 'wrfc-controller',
|
|
99
|
-
...(agentId !== undefined ? { agentId } : {}),
|
|
100
|
-
};
|
|
101
|
-
emitOrchestrationNodeAdded(runtimeBus, context, {
|
|
102
|
-
graphId: createWrfcOrchestrationGraphId(chainId),
|
|
103
|
-
nodeId,
|
|
104
|
-
title,
|
|
105
|
-
role,
|
|
106
|
-
...(agentId !== undefined ? { agentId } : {}),
|
|
107
|
-
});
|
|
108
|
-
emitOrchestrationNodeStarted(runtimeBus, context, {
|
|
109
|
-
graphId: createWrfcOrchestrationGraphId(chainId),
|
|
110
|
-
nodeId,
|
|
111
|
-
...(agentId !== undefined ? { agentId } : {}),
|
|
112
|
-
});
|
|
113
|
-
return nodeId;
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
export function completeWrfcOrchestrationNode(
|
|
117
|
-
runtimeBus: RuntimeEventBus,
|
|
118
|
-
sessionId: string,
|
|
119
|
-
chainId: string,
|
|
120
|
-
nodeId: string,
|
|
121
|
-
summary?: string,
|
|
122
|
-
): void {
|
|
123
|
-
emitOrchestrationNodeCompleted(runtimeBus, {
|
|
124
|
-
sessionId,
|
|
125
|
-
traceId: `${sessionId}:orchestration:${nodeId}:complete`,
|
|
126
|
-
source: 'wrfc-controller',
|
|
127
|
-
}, {
|
|
128
|
-
graphId: createWrfcOrchestrationGraphId(chainId),
|
|
129
|
-
nodeId,
|
|
130
|
-
...(summary !== undefined ? { summary } : {}),
|
|
131
|
-
});
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
export function failWrfcOrchestrationNode(
|
|
135
|
-
runtimeBus: RuntimeEventBus,
|
|
136
|
-
sessionId: string,
|
|
137
|
-
chainId: string,
|
|
138
|
-
nodeId: string,
|
|
139
|
-
error: string,
|
|
140
|
-
): void {
|
|
141
|
-
emitOrchestrationNodeFailed(runtimeBus, {
|
|
142
|
-
sessionId,
|
|
143
|
-
traceId: `${sessionId}:orchestration:${nodeId}:fail`,
|
|
144
|
-
source: 'wrfc-controller',
|
|
145
|
-
}, {
|
|
146
|
-
graphId: createWrfcOrchestrationGraphId(chainId),
|
|
147
|
-
nodeId,
|
|
148
|
-
error,
|
|
149
|
-
});
|
|
150
|
-
}
|
package/src/agents/wrfc-types.ts
DELETED
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
import type { CompletionReport, ReviewerReport } from '@pellux/goodvibes-sdk/platform/agents/completion-report';
|
|
2
|
-
import type { AgentRecord } from '@pellux/goodvibes-sdk/platform/tools/agent/index';
|
|
3
|
-
|
|
4
|
-
/** Queued chain waiting to start. */
|
|
5
|
-
export interface QueuedChain {
|
|
6
|
-
record: AgentRecord;
|
|
7
|
-
queuedAt: number;
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
/** WRFC chain lifecycle states. */
|
|
11
|
-
export type WrfcState =
|
|
12
|
-
| 'pending'
|
|
13
|
-
| 'engineering'
|
|
14
|
-
| 'reviewing'
|
|
15
|
-
| 'fixing'
|
|
16
|
-
| 'awaiting_gates'
|
|
17
|
-
| 'gating'
|
|
18
|
-
| 'passed'
|
|
19
|
-
| 'failed'
|
|
20
|
-
| 'committing';
|
|
21
|
-
|
|
22
|
-
/** A single WRFC chain instance. */
|
|
23
|
-
export interface WrfcChain {
|
|
24
|
-
id: string;
|
|
25
|
-
state: WrfcState;
|
|
26
|
-
task: string;
|
|
27
|
-
currentNodeId?: string;
|
|
28
|
-
engineerAgentId?: string;
|
|
29
|
-
reviewerAgentId?: string;
|
|
30
|
-
fixerAgentId?: string;
|
|
31
|
-
/** All agent IDs involved in this chain (for worktree cleanup). */
|
|
32
|
-
allAgentIds: string[];
|
|
33
|
-
engineerReport?: CompletionReport;
|
|
34
|
-
reviewerReport?: ReviewerReport;
|
|
35
|
-
fixAttempts: number;
|
|
36
|
-
reviewCycles: number;
|
|
37
|
-
gateResults?: QualityGateResult[];
|
|
38
|
-
createdAt: number;
|
|
39
|
-
completedAt?: number;
|
|
40
|
-
parentChainId?: string;
|
|
41
|
-
/** Whether quality gates passed. Only meaningful when state is 'passed'. */
|
|
42
|
-
gatesPassed?: boolean;
|
|
43
|
-
/** Fingerprint of gate failures: used for same-error detection across chained chains. */
|
|
44
|
-
gateFailureFingerprint?: string;
|
|
45
|
-
/** How many gate-failure retry cycles deep this chain is. 0 = original chain. */
|
|
46
|
-
gateRetryDepth: number;
|
|
47
|
-
/** Review scores history — used to detect regression (2 consecutive below initial). */
|
|
48
|
-
reviewScores: number[];
|
|
49
|
-
error?: string;
|
|
50
|
-
/** Buffered agent completion — set when agent finishes while chain is still queued/pending. */
|
|
51
|
-
bufferedCompletion?: { agentId: string; fullOutput?: string };
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
/** Quality gate definition. */
|
|
55
|
-
export interface QualityGate {
|
|
56
|
-
name: string;
|
|
57
|
-
command: string;
|
|
58
|
-
enabled: boolean;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
/** Result of running a quality gate. */
|
|
62
|
-
export interface QualityGateResult {
|
|
63
|
-
gate: QualityGate['name'];
|
|
64
|
-
passed: boolean;
|
|
65
|
-
output: string;
|
|
66
|
-
durationMs: number;
|
|
67
|
-
}
|