@pellux/goodvibes-tui 0.18.11 → 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 +22 -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
|
@@ -70,12 +70,12 @@ export type CreateBootstrapCommandContextOptions = {
|
|
|
70
70
|
integrationHelpers?: IntegrationHelperService;
|
|
71
71
|
automationManager?: ShellAutomationManagerRuntimeService;
|
|
72
72
|
knowledgeService?: KnowledgeService;
|
|
73
|
-
providerOptimizer?: import('
|
|
73
|
+
providerOptimizer?: import('@pellux/goodvibes-sdk/platform/providers/optimizer').ProviderOptimizer;
|
|
74
74
|
pluginManager?: PluginManager;
|
|
75
75
|
hookWorkbench?: HookWorkbench;
|
|
76
76
|
agentManager?: ShellAgentManagerService;
|
|
77
77
|
modeManager?: ShellModeManagerService;
|
|
78
|
-
sessionManager?: import('
|
|
78
|
+
sessionManager?: import('@pellux/goodvibes-sdk/platform/sessions/manager').SessionManager;
|
|
79
79
|
profileManager?: import('@pellux/goodvibes-sdk/platform/profiles/manager').ProfileManager;
|
|
80
80
|
bookmarkManager?: import('@pellux/goodvibes-sdk/platform/bookmarks/manager').BookmarkManager;
|
|
81
81
|
favoritesStore?: import('@pellux/goodvibes-sdk/platform/providers/favorites').FavoritesStore;
|
|
@@ -87,7 +87,7 @@ export type CreateBootstrapCommandContextOptions = {
|
|
|
87
87
|
localUserAuthManager?: import('@pellux/goodvibes-sdk/platform/security/user-auth').UserAuthManager;
|
|
88
88
|
tokenAuditor?: import('@pellux/goodvibes-sdk/platform/security/token-audit').ApiTokenAuditor;
|
|
89
89
|
replayEngine?: import('@pellux/goodvibes-sdk/platform/core/deterministic-replay').DeterministicReplayEngine;
|
|
90
|
-
webhookNotifier?: import('
|
|
90
|
+
webhookNotifier?: import('@pellux/goodvibes-sdk/platform/integrations/webhooks').WebhookNotifier;
|
|
91
91
|
sessionMemoryStore?: import('@pellux/goodvibes-sdk/platform/core/session-memory').SessionMemoryStore;
|
|
92
92
|
changeTracker?: import('@pellux/goodvibes-sdk/platform/sessions/change-tracker').SessionChangeTracker;
|
|
93
93
|
planManager?: ShellPlanManagerService;
|
|
@@ -85,8 +85,8 @@ export interface BootstrapCommandSectionOptions {
|
|
|
85
85
|
readonly knowledgeService?: KnowledgeService;
|
|
86
86
|
readonly pluginManager?: PluginManager;
|
|
87
87
|
readonly hookWorkbench?: HookWorkbench;
|
|
88
|
-
readonly providerOptimizer?: import('
|
|
89
|
-
readonly sessionManager?: import('
|
|
88
|
+
readonly providerOptimizer?: import('@pellux/goodvibes-sdk/platform/providers/optimizer').ProviderOptimizer;
|
|
89
|
+
readonly sessionManager?: import('@pellux/goodvibes-sdk/platform/sessions/manager').SessionManager;
|
|
90
90
|
readonly profileManager?: import('@pellux/goodvibes-sdk/platform/profiles/manager').ProfileManager;
|
|
91
91
|
readonly bookmarkManager?: import('@pellux/goodvibes-sdk/platform/bookmarks/manager').BookmarkManager;
|
|
92
92
|
readonly favoritesStore?: import('@pellux/goodvibes-sdk/platform/providers/favorites').FavoritesStore;
|
|
@@ -97,7 +97,7 @@ export interface BootstrapCommandSectionOptions {
|
|
|
97
97
|
readonly localUserAuthManager?: import('@pellux/goodvibes-sdk/platform/security/user-auth').UserAuthManager;
|
|
98
98
|
readonly tokenAuditor?: import('@pellux/goodvibes-sdk/platform/security/token-audit').ApiTokenAuditor;
|
|
99
99
|
readonly replayEngine?: import('@pellux/goodvibes-sdk/platform/core/deterministic-replay').DeterministicReplayEngine;
|
|
100
|
-
readonly webhookNotifier?: import('
|
|
100
|
+
readonly webhookNotifier?: import('@pellux/goodvibes-sdk/platform/integrations/webhooks').WebhookNotifier;
|
|
101
101
|
readonly sessionMemoryStore?: import('@pellux/goodvibes-sdk/platform/core/session-memory').SessionMemoryStore;
|
|
102
102
|
readonly sessionLineageTracker?: import('@pellux/goodvibes-sdk/platform/core/session-lineage').SessionLineageTracker;
|
|
103
103
|
readonly changeTracker?: import('@pellux/goodvibes-sdk/platform/sessions/change-tracker').SessionChangeTracker;
|
|
@@ -19,9 +19,9 @@ import { ForensicsCollector, ForensicsRegistry } from '@pellux/goodvibes-sdk/pla
|
|
|
19
19
|
import {
|
|
20
20
|
generateUserSessionId,
|
|
21
21
|
} from '@pellux/goodvibes-sdk/platform/runtime/session-persistence';
|
|
22
|
-
import { loadBootstrapSystemPrompt, syncConfiguredServices } from '
|
|
22
|
+
import { loadBootstrapSystemPrompt, syncConfiguredServices } from '@pellux/goodvibes-sdk/platform/runtime/bootstrap-helpers';
|
|
23
23
|
import { registerBootstrapHookBridge } from './bootstrap-hook-bridge.ts';
|
|
24
|
-
import { registerBootstrapRuntimeEvents } from '
|
|
24
|
+
import { registerBootstrapRuntimeEvents } from '@pellux/goodvibes-sdk/platform/runtime/bootstrap-runtime-events';
|
|
25
25
|
import { createRuntimeServices, type RuntimeServices } from './services.ts';
|
|
26
26
|
import { createUiRuntimeServices, type UiRuntimeServices } from './ui-services.ts';
|
|
27
27
|
|
|
@@ -9,7 +9,7 @@ import { HelperModel } from '@pellux/goodvibes-sdk/platform/config/helper-model'
|
|
|
9
9
|
import type { ConfigManager } from '@pellux/goodvibes-sdk/platform/config/manager';
|
|
10
10
|
import { formatReturnContextForDisplay, getReturnContextMode, maybeAssistReturnContextSummary } from '@pellux/goodvibes-sdk/platform/runtime/session-return-context';
|
|
11
11
|
import type { SharedSessionBroker } from '@pellux/goodvibes-sdk/platform/control-plane/index';
|
|
12
|
-
import type { SessionManager } from '
|
|
12
|
+
import type { SessionManager } from '@pellux/goodvibes-sdk/platform/sessions/manager';
|
|
13
13
|
import type { PanelManager } from '../panels/panel-manager.ts';
|
|
14
14
|
import type { ProviderRegistry } from '@pellux/goodvibes-sdk/platform/providers/registry';
|
|
15
15
|
import { summarizeError } from '@pellux/goodvibes-sdk/platform/utils/error-display';
|
|
@@ -20,7 +20,7 @@ import { getConfigSnapshot } from '../config/index.ts';
|
|
|
20
20
|
import { createBootstrapCommandContext } from './bootstrap-command-context.ts';
|
|
21
21
|
import { createResumeSessionHandler } from './bootstrap-hook-bridge.ts';
|
|
22
22
|
import { logger } from '@pellux/goodvibes-sdk/platform/utils/logger';
|
|
23
|
-
import { loadBootstrapSystemPrompt } from '
|
|
23
|
+
import { loadBootstrapSystemPrompt } from '@pellux/goodvibes-sdk/platform/runtime/bootstrap-helpers';
|
|
24
24
|
import { createShellPlanRuntime, createShellRemoteCommandService } from '@pellux/goodvibes-sdk/platform/runtime/shell-command-services';
|
|
25
25
|
import { createRuntimeFoundationClients } from '@pellux/goodvibes-sdk/platform/runtime/foundation-clients';
|
|
26
26
|
import type { ControlPlaneRecentEvent } from '@pellux/goodvibes-sdk/platform/control-plane/gateway';
|
package/src/runtime/bootstrap.ts
CHANGED
|
@@ -32,9 +32,9 @@ import {
|
|
|
32
32
|
loadLastConversation,
|
|
33
33
|
writeLastSessionPointer,
|
|
34
34
|
} from '@pellux/goodvibes-sdk/platform/runtime/session-persistence';
|
|
35
|
-
import { startBackgroundProviderRegistration } from '
|
|
36
|
-
import { restoreSavedModel } from '
|
|
37
|
-
import { startExternalServices, type ExternalServicesHandle } from '
|
|
35
|
+
import { startBackgroundProviderRegistration } from '@pellux/goodvibes-sdk/platform/runtime/bootstrap-background';
|
|
36
|
+
import { restoreSavedModel } from '@pellux/goodvibes-sdk/platform/runtime/bootstrap-helpers';
|
|
37
|
+
import { startExternalServices, type ExternalServicesHandle } from '@pellux/goodvibes-sdk/platform/runtime/bootstrap-services';
|
|
38
38
|
import type { UiRuntimeServices } from './ui-services.ts';
|
|
39
39
|
import { createDeferredStartupCoordinator } from '@pellux/goodvibes-sdk/platform/runtime/deferred-startup';
|
|
40
40
|
import { initializeBootstrapCore } from './bootstrap-core.ts';
|
|
@@ -128,7 +128,7 @@ export async function bootstrapRuntime(
|
|
|
128
128
|
const workingDir = options.workingDir;
|
|
129
129
|
const configManager = options.configManager;
|
|
130
130
|
const controlPlaneRecentEventsRef: {
|
|
131
|
-
value: (limit: number) => readonly import('
|
|
131
|
+
value: (limit: number) => readonly import('@pellux/goodvibes-sdk/platform/control-plane/gateway').ControlPlaneRecentEvent[];
|
|
132
132
|
} = {
|
|
133
133
|
value: (_limit) => [],
|
|
134
134
|
};
|
|
@@ -358,6 +358,7 @@ export async function bootstrapRuntime(
|
|
|
358
358
|
restoreSavedModel,
|
|
359
359
|
systemMessageRouter,
|
|
360
360
|
shellPaths: services.shellPaths,
|
|
361
|
+
surfaceRoot: 'tui',
|
|
361
362
|
});
|
|
362
363
|
if (configManager.get('automation.enabled')) {
|
|
363
364
|
deferredStartup.schedule({
|
package/src/runtime/services.ts
CHANGED
|
@@ -37,7 +37,7 @@ import { HookDispatcher, createHookWorkbench, type HookWorkbench } from '@pellux
|
|
|
37
37
|
import { PluginManager } from '@pellux/goodvibes-sdk/platform/plugins/manager';
|
|
38
38
|
import { BookmarkManager } from '@pellux/goodvibes-sdk/platform/bookmarks/manager';
|
|
39
39
|
import { ProfileManager } from '@pellux/goodvibes-sdk/platform/profiles/manager';
|
|
40
|
-
import { SessionManager } from '
|
|
40
|
+
import { SessionManager } from '@pellux/goodvibes-sdk/platform/sessions/manager';
|
|
41
41
|
import { CrossSessionTaskRegistry } from '@pellux/goodvibes-sdk/platform/sessions/orchestration/index';
|
|
42
42
|
import { ApiTokenAuditor } from '@pellux/goodvibes-sdk/platform/security/token-audit';
|
|
43
43
|
import { UserAuthManager } from '@pellux/goodvibes-sdk/platform/security/user-auth';
|
|
@@ -234,7 +234,7 @@ export function createRuntimeServices(options: RuntimeServicesOptions): RuntimeS
|
|
|
234
234
|
});
|
|
235
235
|
const profileManager = new ProfileManager(shellPaths.resolveUserPath('tui', 'profiles'));
|
|
236
236
|
const bookmarkManager = new BookmarkManager(shellPaths.resolveUserPath('tui', 'bookmarks'));
|
|
237
|
-
const sessionManager = new SessionManager(workingDirectory);
|
|
237
|
+
const sessionManager = new SessionManager(workingDirectory, { surfaceRoot: 'tui' });
|
|
238
238
|
const sessionOrchestration = new CrossSessionTaskRegistry(
|
|
239
239
|
shellPaths.resolveProjectPath('tui', 'sessions', 'task-graph.json'),
|
|
240
240
|
);
|
|
@@ -26,8 +26,8 @@ export interface UiSecuritySnapshot {
|
|
|
26
26
|
readonly lintFindingCount: number;
|
|
27
27
|
};
|
|
28
28
|
readonly deniedPermissions: number;
|
|
29
|
-
readonly incidents: ReturnType<import('
|
|
30
|
-
readonly latestIncident: ReturnType<import('
|
|
29
|
+
readonly incidents: ReturnType<import('@pellux/goodvibes-sdk/platform/runtime/forensics/index').ForensicsRegistry['getAll']>;
|
|
30
|
+
readonly latestIncident: ReturnType<import('@pellux/goodvibes-sdk/platform/runtime/forensics/index').ForensicsRegistry['latest']>;
|
|
31
31
|
readonly mcpServers: readonly McpSecuritySnapshot[];
|
|
32
32
|
readonly recentMcpDecisions: readonly McpDecisionRecord[];
|
|
33
33
|
readonly attackPathReview: ReturnType<typeof buildMcpAttackPathReview>;
|
|
@@ -49,7 +49,7 @@ export interface UiCockpitSnapshot {
|
|
|
49
49
|
readonly tokenScopeViolationCount: number;
|
|
50
50
|
readonly tokenRotationWarningCount: number;
|
|
51
51
|
readonly incidentCount: number;
|
|
52
|
-
readonly latestIncident: ReturnType<import('
|
|
52
|
+
readonly latestIncident: ReturnType<import('@pellux/goodvibes-sdk/platform/runtime/forensics/index').ForensicsRegistry['latest']>;
|
|
53
53
|
readonly elevatedMcp: number;
|
|
54
54
|
readonly unhealthyMcp: number;
|
|
55
55
|
readonly erroredPlugins: number;
|
|
@@ -8,7 +8,7 @@ import type {
|
|
|
8
8
|
ProviderSubscription,
|
|
9
9
|
} from '@pellux/goodvibes-sdk/platform/config/subscriptions';
|
|
10
10
|
import type { LocalAuthSnapshot } from '@pellux/goodvibes-sdk/platform/security/user-auth';
|
|
11
|
-
import type { SessionInfo } from '
|
|
11
|
+
import type { SessionInfo } from '@pellux/goodvibes-sdk/platform/sessions/manager';
|
|
12
12
|
import type { Tool } from '@pellux/goodvibes-sdk/platform/types/tools';
|
|
13
13
|
import type { ModelDefinition } from '@pellux/goodvibes-sdk/platform/providers/registry';
|
|
14
14
|
import type {
|
package/src/tools/index.ts
CHANGED
|
@@ -67,7 +67,7 @@ export function registerAllTools(
|
|
|
67
67
|
channelRegistry?: ChannelPluginRegistry | null;
|
|
68
68
|
remoteRunnerRegistry?: RemoteRunnerRegistry;
|
|
69
69
|
workflowServices: ReturnType<typeof createWorkflowServices>;
|
|
70
|
-
mcpRegistry?: import('
|
|
70
|
+
mcpRegistry?: import('@pellux/goodvibes-sdk/platform/mcp/registry').McpRegistry;
|
|
71
71
|
sessionOrchestration?: CrossSessionTaskRegistry;
|
|
72
72
|
sandboxSessionRegistry?: SandboxSessionRegistry;
|
|
73
73
|
workingDirectory: string;
|
package/src/version.ts
CHANGED
|
@@ -6,7 +6,7 @@ import { join } from 'node:path';
|
|
|
6
6
|
// The prebuild script updates the fallback value before compilation.
|
|
7
7
|
// Uses import.meta.dir (Bun) to locate package.json relative to this file,
|
|
8
8
|
// which is correct regardless of the process working directory.
|
|
9
|
-
let _version = '0.18.
|
|
9
|
+
let _version = '0.18.12';
|
|
10
10
|
try {
|
|
11
11
|
const pkg = JSON.parse(readFileSync(join(import.meta.dir, '..', 'package.json'), 'utf-8'));
|
|
12
12
|
_version = pkg.version ?? _version;
|
package/src/acp/connection.ts
DELETED
|
@@ -1,447 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* AcpConnection — Per-subagent ACP connection.
|
|
3
|
-
*
|
|
4
|
-
* Spawns a child process via Bun.spawn and connects to it via ClientSideConnection
|
|
5
|
-
* using ndJsonStream over stdio. Implements the ACP Client interface so the
|
|
6
|
-
* subagent can request permissions and send session updates.
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
import { ClientSideConnection, ndJsonStream } from '@agentclientprotocol/sdk';
|
|
10
|
-
import type {
|
|
11
|
-
Client,
|
|
12
|
-
Agent,
|
|
13
|
-
SessionNotification,
|
|
14
|
-
RequestPermissionRequest,
|
|
15
|
-
RequestPermissionResponse,
|
|
16
|
-
} from '@pellux/goodvibes-sdk/platform/acp/protocol';
|
|
17
|
-
import type { SubagentInfo, SubagentResult, SubagentTask } from '@pellux/goodvibes-sdk/platform/acp/protocol';
|
|
18
|
-
import type { PermissionCategory } from '@pellux/goodvibes-sdk/platform/permissions/manager';
|
|
19
|
-
import type { PermissionRequestHandler } from '@pellux/goodvibes-sdk/platform/permissions/prompt';
|
|
20
|
-
import { logger } from '@pellux/goodvibes-sdk/platform/utils/logger';
|
|
21
|
-
import { analyzePermissionRequest } from '@pellux/goodvibes-sdk/platform/permissions/analysis';
|
|
22
|
-
import { AcpError } from '@pellux/goodvibes-sdk/platform/types/errors';
|
|
23
|
-
import { VERSION } from '../version.ts';
|
|
24
|
-
import type { RuntimeEventBus } from '@pellux/goodvibes-sdk/platform/runtime/events/index';
|
|
25
|
-
import {
|
|
26
|
-
emitAgentCancelled,
|
|
27
|
-
emitAgentCompleted,
|
|
28
|
-
emitAgentFailed,
|
|
29
|
-
emitAgentStreamDelta,
|
|
30
|
-
emitTransportAuthenticating,
|
|
31
|
-
emitTransportConnected,
|
|
32
|
-
emitTransportDisconnected,
|
|
33
|
-
emitTransportInitializing,
|
|
34
|
-
emitTransportSyncing,
|
|
35
|
-
emitTransportTerminalFailure,
|
|
36
|
-
} from '@pellux/goodvibes-sdk/platform/runtime/emitters/index';
|
|
37
|
-
import type { HookDispatcher } from '@pellux/goodvibes-sdk/platform/hooks/index';
|
|
38
|
-
import type { HookCategory, HookEventPath, HookPhase } from '@pellux/goodvibes-sdk/platform/hooks/types';
|
|
39
|
-
import { summarizeError } from '@pellux/goodvibes-sdk/platform/utils/error-display';
|
|
40
|
-
|
|
41
|
-
/** Shape of an agent_message_chunk session update that carries text content. */
|
|
42
|
-
interface MessageChunkUpdate {
|
|
43
|
-
sessionUpdate: 'agent_message_chunk';
|
|
44
|
-
content?: Array<{ type: string; text?: string }>;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
/** Runtime type guard for agent_message_chunk updates. */
|
|
48
|
-
function isMessageChunk(update: { sessionUpdate?: unknown }): update is MessageChunkUpdate {
|
|
49
|
-
return (
|
|
50
|
-
update.sessionUpdate === 'agent_message_chunk' &&
|
|
51
|
-
('content' in update)
|
|
52
|
-
);
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
/**
|
|
56
|
-
* AcpConnection manages the lifecycle of a single subagent child process.
|
|
57
|
-
*
|
|
58
|
-
* Lifecycle:
|
|
59
|
-
* 1. Construct with spawn params
|
|
60
|
-
* 2. Call run() — spawns child, performs ACP handshake, starts a session
|
|
61
|
-
* 3. Resolves with SubagentResult when the subagent completes or is cancelled
|
|
62
|
-
* 4. Call cancel() to abort
|
|
63
|
-
*/
|
|
64
|
-
export class AcpConnection {
|
|
65
|
-
public readonly id: string;
|
|
66
|
-
private info: SubagentInfo;
|
|
67
|
-
private spawnCmd: string[];
|
|
68
|
-
private requestPermission: PermissionRequestHandler;
|
|
69
|
-
private runtimeBus: RuntimeEventBus | null;
|
|
70
|
-
private conn: ClientSideConnection | null = null;
|
|
71
|
-
private sessionId: string | null = null;
|
|
72
|
-
private childProcess: ReturnType<typeof Bun.spawn> | null = null;
|
|
73
|
-
private toolCallsMade = 0;
|
|
74
|
-
private lastProgressText = '';
|
|
75
|
-
private transportClosed = false;
|
|
76
|
-
private readonly hookDispatcher: Pick<HookDispatcher, 'fire'> | null;
|
|
77
|
-
|
|
78
|
-
constructor(
|
|
79
|
-
id: string,
|
|
80
|
-
private task: SubagentTask,
|
|
81
|
-
spawnCmd: string[],
|
|
82
|
-
requestPermission: PermissionRequestHandler = async () => ({ approved: false, remember: false }),
|
|
83
|
-
runtimeBus: RuntimeEventBus | null = null,
|
|
84
|
-
hookDispatcher: Pick<HookDispatcher, 'fire'> | null = null,
|
|
85
|
-
) {
|
|
86
|
-
this.id = id;
|
|
87
|
-
this.spawnCmd = spawnCmd;
|
|
88
|
-
this.requestPermission = requestPermission;
|
|
89
|
-
this.runtimeBus = runtimeBus;
|
|
90
|
-
this.hookDispatcher = hookDispatcher;
|
|
91
|
-
this.info = {
|
|
92
|
-
id,
|
|
93
|
-
task: task.description,
|
|
94
|
-
status: 'running',
|
|
95
|
-
startedAt: Date.now(),
|
|
96
|
-
};
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
/** Current info snapshot. */
|
|
100
|
-
getInfo(): SubagentInfo {
|
|
101
|
-
return { ...this.info };
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
/**
|
|
105
|
-
* Spawn the child process, perform the ACP handshake, and run the prompt.
|
|
106
|
-
* Resolves with SubagentResult when the subagent completes or errors.
|
|
107
|
-
*/
|
|
108
|
-
async run(): Promise<SubagentResult> {
|
|
109
|
-
const startedAt = this.info.startedAt;
|
|
110
|
-
|
|
111
|
-
try {
|
|
112
|
-
this.transportClosed = false;
|
|
113
|
-
this.emitTransportInitializing();
|
|
114
|
-
|
|
115
|
-
// 1. Spawn child process with piped stdio
|
|
116
|
-
this.childProcess = Bun.spawn(this.spawnCmd, {
|
|
117
|
-
stdin: 'pipe',
|
|
118
|
-
stdout: 'pipe',
|
|
119
|
-
stderr: 'pipe',
|
|
120
|
-
});
|
|
121
|
-
|
|
122
|
-
// 2. Build ndJsonStream from child stdio.
|
|
123
|
-
//
|
|
124
|
-
// In Bun, childProcess.stdin is a FileSink (not a Web WritableStream).
|
|
125
|
-
// ndJsonStream requires a Web WritableStream<Uint8Array> so it can call
|
|
126
|
-
// .getWriter() internally. Wrap the FileSink in a WritableStream adapter.
|
|
127
|
-
if (!this.childProcess.stdin) {
|
|
128
|
-
throw new AcpError('ACP subprocess stdin not available — was it spawned with stdin: "pipe"?');
|
|
129
|
-
}
|
|
130
|
-
const bunStdin = this.childProcess.stdin as import('bun').FileSink;
|
|
131
|
-
const stdinStream = new WritableStream<Uint8Array>({
|
|
132
|
-
write(chunk) {
|
|
133
|
-
bunStdin.write(chunk);
|
|
134
|
-
},
|
|
135
|
-
close() {
|
|
136
|
-
bunStdin.end();
|
|
137
|
-
},
|
|
138
|
-
abort() {
|
|
139
|
-
bunStdin.end();
|
|
140
|
-
},
|
|
141
|
-
});
|
|
142
|
-
|
|
143
|
-
const stream = ndJsonStream(
|
|
144
|
-
stdinStream,
|
|
145
|
-
// Bun's piped stdout is ReadableStream-compatible at runtime — getReader() works
|
|
146
|
-
// correctly. The double-cast is safe here because Bun's ReadStream implements the
|
|
147
|
-
// same interface, unlike stdin (FileSink) which lacks getWriter().
|
|
148
|
-
this.childProcess.stdout as unknown as ReadableStream<Uint8Array>,
|
|
149
|
-
);
|
|
150
|
-
|
|
151
|
-
// 3. Build the Client implementation that handles agent callbacks
|
|
152
|
-
const clientImpl: Client = this.buildClientImpl();
|
|
153
|
-
|
|
154
|
-
// 4. Create the ClientSideConnection (TUI = ACP client, child = ACP agent)
|
|
155
|
-
this.conn = new ClientSideConnection((_agent: Agent) => clientImpl, stream);
|
|
156
|
-
|
|
157
|
-
// 5. ACP handshake: initialize (protocolVersion is a number)
|
|
158
|
-
this.emitTransportAuthenticating();
|
|
159
|
-
await this.conn.initialize({
|
|
160
|
-
protocolVersion: 1,
|
|
161
|
-
clientInfo: { name: 'goodvibes-tui', version: VERSION },
|
|
162
|
-
clientCapabilities: {},
|
|
163
|
-
});
|
|
164
|
-
|
|
165
|
-
// 6. Create a session (cwd is required, mcpServers is required)
|
|
166
|
-
const sessionResp = await this.conn.newSession({
|
|
167
|
-
cwd: this.task.workingDirectory,
|
|
168
|
-
mcpServers: [],
|
|
169
|
-
});
|
|
170
|
-
this.sessionId = sessionResp.sessionId;
|
|
171
|
-
this.emitTransportConnected();
|
|
172
|
-
this.emitTransportSyncing();
|
|
173
|
-
|
|
174
|
-
// 7. Send the prompt (uses 'prompt' field with ContentBlock array)
|
|
175
|
-
const promptResp = await this.conn.prompt({
|
|
176
|
-
sessionId: this.sessionId,
|
|
177
|
-
prompt: [
|
|
178
|
-
{
|
|
179
|
-
type: 'text' as const,
|
|
180
|
-
text: this.buildPromptText(),
|
|
181
|
-
},
|
|
182
|
-
],
|
|
183
|
-
});
|
|
184
|
-
|
|
185
|
-
const output = this.lastProgressText || `Completed with stop reason: ${promptResp.stopReason}`;
|
|
186
|
-
const result: SubagentResult = {
|
|
187
|
-
id: this.id,
|
|
188
|
-
success: promptResp.stopReason !== 'cancelled',
|
|
189
|
-
output,
|
|
190
|
-
toolCallsMade: this.toolCallsMade,
|
|
191
|
-
duration: Date.now() - startedAt,
|
|
192
|
-
};
|
|
193
|
-
|
|
194
|
-
this.info.status = result.success ? 'complete' : 'error';
|
|
195
|
-
if (this.runtimeBus) {
|
|
196
|
-
emitAgentCompleted(this.runtimeBus, this.emitterContext(), {
|
|
197
|
-
agentId: this.id,
|
|
198
|
-
durationMs: result.duration,
|
|
199
|
-
output: result.output,
|
|
200
|
-
toolCallsMade: result.toolCallsMade,
|
|
201
|
-
});
|
|
202
|
-
}
|
|
203
|
-
this.emitTransportDisconnected('ACP session completed', false);
|
|
204
|
-
return result;
|
|
205
|
-
} catch (err) {
|
|
206
|
-
const error = err instanceof Error ? err : new Error(summarizeError(err));
|
|
207
|
-
this.info.status = 'error';
|
|
208
|
-
if (this.runtimeBus) {
|
|
209
|
-
emitAgentFailed(this.runtimeBus, this.emitterContext(), {
|
|
210
|
-
agentId: this.id,
|
|
211
|
-
error: error.message,
|
|
212
|
-
durationMs: Date.now() - startedAt,
|
|
213
|
-
});
|
|
214
|
-
}
|
|
215
|
-
this.emitTransportTerminalFailure(error.message);
|
|
216
|
-
return {
|
|
217
|
-
id: this.id,
|
|
218
|
-
success: false,
|
|
219
|
-
output: error.message,
|
|
220
|
-
toolCallsMade: this.toolCallsMade,
|
|
221
|
-
duration: Date.now() - startedAt,
|
|
222
|
-
};
|
|
223
|
-
} finally {
|
|
224
|
-
this.cleanup();
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
|
|
228
|
-
/** Cancel the running subagent. */
|
|
229
|
-
async cancel(): Promise<void> {
|
|
230
|
-
if (this.conn && this.sessionId) {
|
|
231
|
-
try {
|
|
232
|
-
await this.conn.cancel({ sessionId: this.sessionId });
|
|
233
|
-
} catch (err) {
|
|
234
|
-
// Best-effort — kill the child if cancel fails
|
|
235
|
-
logger.error('AcpConnection.cancel: failed to send cancel to subagent', { id: this.id, err: summarizeError(err) });
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
this.info.status = 'cancelled';
|
|
239
|
-
if (this.runtimeBus) {
|
|
240
|
-
emitAgentCancelled(this.runtimeBus, this.emitterContext(), {
|
|
241
|
-
agentId: this.id,
|
|
242
|
-
reason: 'ACP session cancelled',
|
|
243
|
-
});
|
|
244
|
-
}
|
|
245
|
-
this.emitTransportDisconnected('ACP session cancelled', false);
|
|
246
|
-
this.cleanup();
|
|
247
|
-
}
|
|
248
|
-
|
|
249
|
-
private emitterContext(): import('../runtime/emitters/index.ts').EmitterContext {
|
|
250
|
-
return {
|
|
251
|
-
sessionId: 'acp-connection',
|
|
252
|
-
traceId: `acp-connection:${this.id}`,
|
|
253
|
-
source: 'acp-connection',
|
|
254
|
-
};
|
|
255
|
-
}
|
|
256
|
-
|
|
257
|
-
private transportId(): string {
|
|
258
|
-
return `acp:${this.id}`;
|
|
259
|
-
}
|
|
260
|
-
|
|
261
|
-
private transportEndpoint(): string {
|
|
262
|
-
return `stdio://subagent/${this.id}`;
|
|
263
|
-
}
|
|
264
|
-
|
|
265
|
-
private emitTransportInitializing(): void {
|
|
266
|
-
if (!this.runtimeBus) return;
|
|
267
|
-
emitTransportInitializing(this.runtimeBus, this.emitterContext(), {
|
|
268
|
-
transportId: this.transportId(),
|
|
269
|
-
protocol: 'acp-stdio',
|
|
270
|
-
});
|
|
271
|
-
void this.fireTransportHook('initializing', {
|
|
272
|
-
transportId: this.transportId(),
|
|
273
|
-
protocol: 'acp-stdio',
|
|
274
|
-
});
|
|
275
|
-
}
|
|
276
|
-
|
|
277
|
-
private emitTransportAuthenticating(): void {
|
|
278
|
-
if (!this.runtimeBus) return;
|
|
279
|
-
emitTransportAuthenticating(this.runtimeBus, this.emitterContext(), {
|
|
280
|
-
transportId: this.transportId(),
|
|
281
|
-
});
|
|
282
|
-
void this.fireTransportHook('authenticating', {
|
|
283
|
-
transportId: this.transportId(),
|
|
284
|
-
});
|
|
285
|
-
}
|
|
286
|
-
|
|
287
|
-
private emitTransportConnected(): void {
|
|
288
|
-
if (!this.runtimeBus) return;
|
|
289
|
-
emitTransportConnected(this.runtimeBus, this.emitterContext(), {
|
|
290
|
-
transportId: this.transportId(),
|
|
291
|
-
endpoint: this.transportEndpoint(),
|
|
292
|
-
});
|
|
293
|
-
void this.fireTransportHook('connected', {
|
|
294
|
-
transportId: this.transportId(),
|
|
295
|
-
endpoint: this.transportEndpoint(),
|
|
296
|
-
});
|
|
297
|
-
}
|
|
298
|
-
|
|
299
|
-
private emitTransportSyncing(): void {
|
|
300
|
-
if (!this.runtimeBus) return;
|
|
301
|
-
emitTransportSyncing(this.runtimeBus, this.emitterContext(), {
|
|
302
|
-
transportId: this.transportId(),
|
|
303
|
-
});
|
|
304
|
-
void this.fireTransportHook('syncing', {
|
|
305
|
-
transportId: this.transportId(),
|
|
306
|
-
});
|
|
307
|
-
}
|
|
308
|
-
|
|
309
|
-
private emitTransportDisconnected(reason: string, willRetry: boolean): void {
|
|
310
|
-
if (!this.runtimeBus || this.transportClosed) return;
|
|
311
|
-
this.transportClosed = true;
|
|
312
|
-
emitTransportDisconnected(this.runtimeBus, this.emitterContext(), {
|
|
313
|
-
transportId: this.transportId(),
|
|
314
|
-
reason,
|
|
315
|
-
willRetry,
|
|
316
|
-
});
|
|
317
|
-
void this.fireTransportHook('disconnected', {
|
|
318
|
-
transportId: this.transportId(),
|
|
319
|
-
reason,
|
|
320
|
-
willRetry,
|
|
321
|
-
});
|
|
322
|
-
}
|
|
323
|
-
|
|
324
|
-
private emitTransportTerminalFailure(error: string): void {
|
|
325
|
-
if (!this.runtimeBus || this.transportClosed) return;
|
|
326
|
-
this.transportClosed = true;
|
|
327
|
-
emitTransportTerminalFailure(this.runtimeBus, this.emitterContext(), {
|
|
328
|
-
transportId: this.transportId(),
|
|
329
|
-
error,
|
|
330
|
-
});
|
|
331
|
-
void this.fireTransportHook('failed', {
|
|
332
|
-
transportId: this.transportId(),
|
|
333
|
-
error,
|
|
334
|
-
});
|
|
335
|
-
}
|
|
336
|
-
|
|
337
|
-
private async fireTransportHook(specific: string, payload: Record<string, unknown>): Promise<void> {
|
|
338
|
-
if (!this.hookDispatcher) return;
|
|
339
|
-
try {
|
|
340
|
-
await this.hookDispatcher.fire({
|
|
341
|
-
path: `Lifecycle:transport:${specific}` as HookEventPath,
|
|
342
|
-
phase: 'Lifecycle' as HookPhase,
|
|
343
|
-
category: 'transport' as HookCategory,
|
|
344
|
-
specific,
|
|
345
|
-
sessionId: 'acp-connection',
|
|
346
|
-
timestamp: Date.now(),
|
|
347
|
-
payload,
|
|
348
|
-
});
|
|
349
|
-
} catch {
|
|
350
|
-
// Transport hooks are best-effort and must not break ACP transport.
|
|
351
|
-
}
|
|
352
|
-
}
|
|
353
|
-
|
|
354
|
-
private cleanup(): void {
|
|
355
|
-
try {
|
|
356
|
-
this.childProcess?.kill();
|
|
357
|
-
} catch (err) {
|
|
358
|
-
logger.error('AcpConnection.cleanup: failed to kill child process', { id: this.id, err: summarizeError(err) });
|
|
359
|
-
}
|
|
360
|
-
this.childProcess = null;
|
|
361
|
-
this.conn = null;
|
|
362
|
-
this.sessionId = null;
|
|
363
|
-
}
|
|
364
|
-
|
|
365
|
-
private buildClientImpl(): Client {
|
|
366
|
-
return {
|
|
367
|
-
/** Forward permission requests through the shell-owned permission controller. */
|
|
368
|
-
requestPermission: (params: RequestPermissionRequest): Promise<RequestPermissionResponse> => {
|
|
369
|
-
const category: PermissionCategory = 'delegate';
|
|
370
|
-
const callId = `acp-${this.id}-${Date.now()}`;
|
|
371
|
-
const toolTitle = params.toolCall?.title ?? 'unknown';
|
|
372
|
-
const approveOptionId = params.options[0]?.optionId ?? 'allow';
|
|
373
|
-
|
|
374
|
-
return this.requestPermission({
|
|
375
|
-
callId,
|
|
376
|
-
tool: toolTitle,
|
|
377
|
-
args: (params.toolCall?.rawInput as Record<string, unknown>) ?? {},
|
|
378
|
-
category,
|
|
379
|
-
analysis: analyzePermissionRequest(
|
|
380
|
-
toolTitle,
|
|
381
|
-
(params.toolCall?.rawInput as Record<string, unknown>) ?? {},
|
|
382
|
-
category,
|
|
383
|
-
),
|
|
384
|
-
}).then(({ approved }) => {
|
|
385
|
-
if (approved) {
|
|
386
|
-
return {
|
|
387
|
-
outcome: {
|
|
388
|
-
outcome: 'selected',
|
|
389
|
-
optionId: approveOptionId,
|
|
390
|
-
},
|
|
391
|
-
} as RequestPermissionResponse;
|
|
392
|
-
}
|
|
393
|
-
return {
|
|
394
|
-
outcome: { outcome: 'cancelled' },
|
|
395
|
-
} as RequestPermissionResponse;
|
|
396
|
-
});
|
|
397
|
-
},
|
|
398
|
-
|
|
399
|
-
/** Handle session update notifications from the subagent. */
|
|
400
|
-
sessionUpdate: async (params: SessionNotification): Promise<void> => {
|
|
401
|
-
const update = params.update;
|
|
402
|
-
|
|
403
|
-
// Count tool calls
|
|
404
|
-
if (update.sessionUpdate === 'tool_call') {
|
|
405
|
-
this.toolCallsMade++;
|
|
406
|
-
}
|
|
407
|
-
|
|
408
|
-
// Collect streamed text chunks as progress
|
|
409
|
-
if (isMessageChunk(update)) {
|
|
410
|
-
const text = update.content
|
|
411
|
-
?.filter((c) => c.type === 'text')
|
|
412
|
-
.map((c) => c.text ?? '')
|
|
413
|
-
.join('') ?? '';
|
|
414
|
-
if (text) {
|
|
415
|
-
this.lastProgressText = (this.lastProgressText + text).slice(-1000);
|
|
416
|
-
this.info.progress = this.lastProgressText.slice(-200);
|
|
417
|
-
if (this.runtimeBus) {
|
|
418
|
-
emitAgentStreamDelta(this.runtimeBus, this.emitterContext(), {
|
|
419
|
-
agentId: this.id,
|
|
420
|
-
content: text,
|
|
421
|
-
accumulated: this.lastProgressText,
|
|
422
|
-
});
|
|
423
|
-
}
|
|
424
|
-
}
|
|
425
|
-
}
|
|
426
|
-
},
|
|
427
|
-
};
|
|
428
|
-
}
|
|
429
|
-
|
|
430
|
-
private buildPromptText(): string {
|
|
431
|
-
const parts: string[] = [`Task: ${this.task.description}`];
|
|
432
|
-
|
|
433
|
-
if (this.task.context) {
|
|
434
|
-
parts.push(`Context:\n${this.task.context}`);
|
|
435
|
-
}
|
|
436
|
-
|
|
437
|
-
if (this.task.tools.length > 0) {
|
|
438
|
-
parts.push(`Available tools: ${this.task.tools.join(', ')}`);
|
|
439
|
-
}
|
|
440
|
-
|
|
441
|
-
if (this.task.model) {
|
|
442
|
-
parts.push(`Use model: ${this.task.model}`);
|
|
443
|
-
}
|
|
444
|
-
|
|
445
|
-
return parts.join('\n\n');
|
|
446
|
-
}
|
|
447
|
-
}
|
package/src/acp/index.ts
DELETED
package/src/acp/manager.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from '@pellux/goodvibes-sdk/platform/acp/manager';
|