@pellux/goodvibes-tui 0.18.8 → 0.18.9
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 +36 -0
- package/README.md +1 -1
- package/docs/foundation-artifacts/operator-contract.json +1 -1
- package/package.json +2 -2
- package/src/acp/connection.ts +5 -5
- package/src/acp/index.ts +1 -1
- package/src/acp/manager.ts +1 -133
- package/src/adapters/bluebubbles/index.ts +1 -1
- package/src/adapters/discord/index.ts +2 -2
- package/src/adapters/github/index.ts +1 -1
- package/src/adapters/google-chat/index.ts +1 -1
- package/src/adapters/imessage/index.ts +1 -1
- package/src/adapters/index.ts +15 -15
- package/src/adapters/matrix/index.ts +1 -1
- package/src/adapters/mattermost/index.ts +1 -1
- package/src/adapters/msteams/index.ts +2 -2
- package/src/adapters/ntfy/index.ts +1 -1
- package/src/adapters/signal/index.ts +1 -1
- package/src/adapters/slack/index.ts +2 -2
- package/src/adapters/telegram/index.ts +1 -1
- package/src/adapters/types.ts +4 -4
- package/src/adapters/webhook/index.ts +1 -1
- package/src/adapters/whatsapp/index.ts +1 -1
- package/src/agents/message-bus-core.ts +2 -2
- package/src/agents/message-bus.ts +2 -2
- package/src/agents/orchestrator-prompts.ts +4 -4
- package/src/agents/orchestrator-runner.ts +11 -11
- package/src/agents/orchestrator.ts +14 -13
- package/src/agents/session.ts +1 -1
- package/src/agents/worktree.ts +1 -1
- package/src/agents/wrfc-config.ts +2 -2
- package/src/agents/wrfc-controller.ts +12 -12
- package/src/agents/wrfc-gate-runtime.ts +5 -5
- package/src/agents/wrfc-reporting.ts +1 -1
- package/src/agents/wrfc-runtime-events.ts +3 -3
- package/src/agents/wrfc-types.ts +1 -1
- package/src/automation/delivery-manager.ts +4 -4
- package/src/automation/index.ts +4 -4
- package/src/automation/manager-runtime-delivery.ts +1 -1
- package/src/automation/manager-runtime-events.ts +3 -3
- package/src/automation/manager-runtime-execution.ts +5 -5
- package/src/automation/manager-runtime-helpers.ts +2 -2
- package/src/automation/manager-runtime-job-mutations.ts +3 -3
- package/src/automation/manager-runtime-reconcile.ts +4 -4
- package/src/automation/manager-runtime-scheduling.ts +2 -2
- package/src/automation/manager-runtime.ts +18 -18
- package/src/automation/manager.ts +2 -2
- package/src/automation/service.ts +2 -2
- package/src/channels/builtin/account-actions.ts +5 -5
- package/src/channels/builtin/accounts.ts +2 -2
- package/src/channels/builtin/contracts.ts +3 -3
- package/src/channels/builtin/plugins.ts +5 -5
- package/src/channels/builtin/rendering.ts +4 -4
- package/src/channels/builtin/setup-schema.ts +1 -1
- package/src/channels/builtin/shared.ts +7 -7
- package/src/channels/builtin/surfaces.ts +2 -2
- package/src/channels/builtin/targets.ts +3 -3
- package/src/channels/builtin-runtime.ts +11 -11
- package/src/channels/delivery/shared.ts +2 -2
- package/src/channels/delivery/strategies-bridge.ts +3 -3
- package/src/channels/delivery/strategies-core.ts +5 -5
- package/src/channels/delivery/strategies-enterprise.ts +3 -3
- package/src/channels/delivery/types.ts +2 -2
- package/src/channels/delivery-router.ts +9 -9
- package/src/channels/index.ts +12 -12
- package/src/channels/plugin-registry.ts +1 -1
- package/src/channels/provider-runtime.ts +3 -3
- package/src/channels/reply-pipeline.ts +3 -3
- package/src/channels/route-manager.ts +2 -2
- package/src/channels/surface-registry.ts +2 -2
- package/src/config/helper-model.ts +1 -233
- package/src/config/index.ts +3 -3
- package/src/config/manager.ts +8 -404
- package/src/config/secrets.ts +21 -542
- package/src/config/service-registry.ts +1 -329
- package/src/config/tool-llm.ts +3 -3
- package/src/control-plane/approval-broker.ts +1 -1
- package/src/control-plane/gateway.ts +1 -713
- package/src/control-plane/index.ts +7 -7
- package/src/control-plane/media-contract-schemas.ts +1 -208
- package/src/control-plane/method-catalog-admin.ts +1 -136
- package/src/control-plane/method-catalog-channels.ts +1 -591
- package/src/control-plane/method-catalog-control-automation.ts +1 -475
- package/src/control-plane/method-catalog-control-core.ts +1 -594
- package/src/control-plane/method-catalog-control.ts +1 -8
- package/src/control-plane/method-catalog-events.ts +1 -74
- package/src/control-plane/method-catalog-knowledge.ts +1 -531
- package/src/control-plane/method-catalog-media.ts +1 -279
- package/src/control-plane/method-catalog-runtime.ts +1 -304
- package/src/control-plane/method-catalog-shared.ts +1 -223
- package/src/control-plane/method-catalog.ts +1 -242
- package/src/control-plane/operator-contract-schemas-admin.ts +1 -639
- package/src/control-plane/operator-contract-schemas-channels.ts +1 -375
- package/src/control-plane/operator-contract-schemas-control.ts +1 -226
- package/src/control-plane/operator-contract-schemas-domains.ts +1 -4
- package/src/control-plane/operator-contract-schemas-knowledge.ts +1 -582
- package/src/control-plane/operator-contract-schemas-media.ts +1 -297
- package/src/control-plane/operator-contract-schemas-permissions.ts +1 -100
- package/src/control-plane/operator-contract-schemas-remote.ts +1 -38
- package/src/control-plane/operator-contract-schemas-runtime.ts +1 -563
- package/src/control-plane/operator-contract-schemas-shared.ts +1 -85
- package/src/control-plane/operator-contract-schemas-telemetry.ts +1 -349
- package/src/control-plane/operator-contract-schemas.ts +1 -6
- package/src/control-plane/operator-contract.ts +5 -3
- package/src/control-plane/session-broker.ts +1 -1
- package/src/core/compaction-sections.ts +5 -5
- package/src/core/compaction-types.ts +3 -3
- package/src/core/composer-state.ts +1 -1
- package/src/core/context-compaction.ts +7 -7
- package/src/core/conversation-compaction.ts +4 -4
- package/src/core/conversation-diff.ts +1 -1
- package/src/core/conversation-rendering.ts +5 -5
- package/src/core/conversation-utils.ts +2 -2
- package/src/core/conversation.ts +10 -10
- package/src/core/event-replay.ts +1 -1
- package/src/core/orchestrator-context-runtime.ts +8 -8
- package/src/core/orchestrator-follow-up-runtime.ts +2 -2
- package/src/core/orchestrator-runtime.ts +4 -4
- package/src/core/orchestrator-tool-runtime.ts +7 -7
- package/src/core/orchestrator-turn-helpers.ts +7 -7
- package/src/core/orchestrator-turn-loop.ts +10 -10
- package/src/core/orchestrator.ts +17 -17
- package/src/core/plan-command-handler.ts +2 -2
- package/src/core/system-message-router.ts +2 -2
- package/src/core/transcript-events/classify.ts +1 -1
- package/src/core/transcript-events/index.ts +3 -3
- package/src/daemon/cli.ts +6 -6
- package/src/daemon/control-plane.ts +7 -7
- package/src/daemon/facade-composition.ts +16 -15
- package/src/daemon/facade.ts +17 -17
- package/src/daemon/helpers.ts +2 -2
- package/src/daemon/http/router-route-contexts.ts +11 -11
- package/src/daemon/http/router.ts +25 -25
- package/src/daemon/http-listener.ts +3 -3
- package/src/daemon/index.ts +1 -3
- package/src/daemon/service-manager.ts +1 -1
- package/src/daemon/surface-actions.ts +8 -8
- package/src/daemon/surface-delivery.ts +7 -7
- package/src/daemon/surface-policy.ts +1 -1
- package/src/daemon/transport-events.ts +4 -4
- package/src/daemon/types.ts +24 -24
- package/src/export/markdown.ts +1 -1
- package/src/export/session-export.ts +1 -633
- package/src/git/index.ts +1 -1
- package/src/git/service.ts +1 -1
- package/src/hooks/chain-engine.ts +1 -1
- package/src/hooks/dispatcher.ts +4 -4
- package/src/hooks/hook-api.ts +1 -1
- package/src/hooks/index.ts +8 -8
- package/src/hooks/runners/agent.ts +1 -1
- package/src/hooks/runners/prompt.ts +1 -1
- package/src/hooks/workbench.ts +2 -2
- package/src/input/command-registry.ts +24 -17
- package/src/input/commands/config.ts +1 -1
- package/src/input/commands/control-room-runtime.ts +2 -2
- package/src/input/commands/conversation-runtime.ts +1 -1
- package/src/input/commands/eval.ts +2 -2
- package/src/input/commands/git-runtime.ts +1 -1
- package/src/input/commands/guidance-runtime.ts +3 -3
- package/src/input/commands/health-runtime.ts +7 -7
- package/src/input/commands/incident-runtime.ts +1 -1
- package/src/input/commands/integration-runtime.ts +3 -3
- package/src/input/commands/local-provider-runtime.ts +1 -1
- package/src/input/commands/local-runtime.ts +1 -1
- package/src/input/commands/local-setup-review.ts +1 -1
- package/src/input/commands/local-setup.ts +1 -1
- package/src/input/commands/managed-runtime.ts +2 -2
- package/src/input/commands/marketplace-runtime.ts +1 -1
- package/src/input/commands/platform-access-runtime.ts +1 -1
- package/src/input/commands/policy-dispatch.ts +2 -2
- package/src/input/commands/product-runtime.ts +2 -2
- package/src/input/commands/profile-sync-runtime.ts +1 -1
- package/src/input/commands/provider-accounts-runtime.ts +1 -1
- package/src/input/commands/provider.ts +3 -3
- package/src/input/commands/quit-shared.ts +1 -1
- package/src/input/commands/recall-bundle.ts +1 -1
- package/src/input/commands/recall-capture.ts +2 -2
- package/src/input/commands/recall-query.ts +2 -2
- package/src/input/commands/recall-shared.ts +1 -1
- package/src/input/commands/remote-runtime-setup.ts +1 -1
- package/src/input/commands/remote-runtime.ts +1 -1
- package/src/input/commands/runtime-services.ts +13 -11
- package/src/input/commands/schedule-runtime.ts +2 -2
- package/src/input/commands/session-content.ts +1 -1
- package/src/input/commands/session-workflow.ts +4 -4
- package/src/input/commands/settings-sync-runtime.ts +1 -1
- package/src/input/commands/share-runtime.ts +9 -4
- package/src/input/commands/shell-core.ts +1 -1
- package/src/input/commands/skills-runtime.ts +1 -1
- package/src/input/commands/subscription-runtime.ts +1 -1
- package/src/input/commands/tasks-runtime.ts +1 -1
- package/src/input/commands/teamwork-runtime.ts +1 -1
- package/src/input/commands/worktree-runtime.ts +1 -1
- package/src/input/handler-command-route.ts +1 -1
- package/src/input/handler-content-actions.ts +3 -3
- package/src/input/handler-feed-routes.ts +2 -2
- package/src/input/handler-feed.ts +1 -1
- package/src/input/handler-shortcuts.ts +1 -1
- package/src/input/handler.ts +1 -1
- package/src/input/keybindings.ts +5 -0
- package/src/input/model-picker.ts +2 -2
- package/src/input/profile-picker-modal.ts +1 -1
- package/src/input/session-picker-modal.ts +1 -1
- package/src/input/settings-modal.ts +4 -4
- package/src/integrations/index.ts +1 -1
- package/src/integrations/notifier.ts +1 -1
- package/src/integrations/webhooks.ts +1 -177
- package/src/knowledge/consolidation.ts +2 -2
- package/src/knowledge/graphql.ts +1 -1
- package/src/knowledge/index.ts +5 -5
- package/src/knowledge/ingest-compile.ts +3 -3
- package/src/knowledge/ingest-context.ts +1 -1
- package/src/knowledge/ingest-inputs.ts +4 -4
- package/src/knowledge/ingest.ts +1 -20
- package/src/knowledge/internal.ts +1 -1
- package/src/knowledge/knowledge-api.ts +7 -7
- package/src/knowledge/lint.ts +3 -3
- package/src/knowledge/memory-sync.ts +2 -2
- package/src/knowledge/packet.ts +3 -3
- package/src/knowledge/scheduling.ts +2 -2
- package/src/knowledge/service.ts +10 -10
- package/src/main.ts +11 -10
- package/src/mcp/index.ts +4 -4
- package/src/mcp/mcp-api.ts +1 -1
- package/src/mcp/registry.ts +1 -506
- package/src/media/builtin-image-understanding.ts +2 -2
- package/src/media/builtin-providers.ts +2 -2
- package/src/media/index.ts +1 -1
- package/src/multimodal/index.ts +1 -1
- package/src/multimodal/service.ts +2 -2
- package/src/panels/agent-inspector-panel.ts +2 -2
- package/src/panels/agent-logs-panel.ts +3 -3
- package/src/panels/approval-panel.ts +2 -2
- package/src/panels/builtin/operations.ts +3 -1
- package/src/panels/builtin/shared.ts +13 -13
- package/src/panels/context-visualizer-panel.ts +2 -2
- package/src/panels/cost-tracker-panel.ts +2 -2
- package/src/panels/debug-panel.ts +3 -3
- package/src/panels/git-panel.ts +1 -1
- package/src/panels/hooks-panel.ts +4 -4
- package/src/panels/knowledge-panel.ts +1 -1
- package/src/panels/marketplace-panel.ts +1 -1
- package/src/panels/mcp-panel.ts +1 -1
- package/src/panels/memory-panel.ts +2 -2
- package/src/panels/ops-control-panel.ts +2 -2
- package/src/panels/ops-strategy-panel.ts +2 -2
- package/src/panels/plugins-panel.ts +1 -1
- package/src/panels/policy-panel.ts +1 -1
- package/src/panels/provider-health-panel.ts +3 -3
- package/src/panels/provider-stats-panel.ts +2 -2
- package/src/panels/sandbox-panel.ts +1 -1
- package/src/panels/schedule-panel.ts +1 -1
- package/src/panels/settings-sync-panel.ts +1 -1
- package/src/panels/system-messages-panel.ts +1 -1
- package/src/panels/tasks-panel.ts +1 -1
- package/src/panels/thinking-panel.ts +2 -2
- package/src/panels/token-budget-panel.ts +1 -1
- package/src/panels/tool-inspector-panel.ts +2 -2
- package/src/panels/worktree-panel.ts +1 -1
- package/src/panels/wrfc-panel.ts +4 -4
- package/src/permissions/briefs/build.ts +1 -1
- package/src/permissions/manager.ts +1 -356
- package/src/permissions/prompt.ts +1 -1
- package/src/plugins/api.ts +9 -9
- package/src/plugins/loader.ts +8 -8
- package/src/plugins/manager.ts +5 -5
- package/src/providers/amazon-bedrock-mantle.ts +1 -1
- package/src/providers/amazon-bedrock.ts +1 -1
- package/src/providers/anthropic-compat.ts +4 -4
- package/src/providers/anthropic-sdk-provider.ts +5 -5
- package/src/providers/anthropic-vertex.ts +1 -1
- package/src/providers/anthropic.ts +4 -4
- package/src/providers/auto-register.ts +6 -6
- package/src/providers/builtin-catalog.ts +2 -2
- package/src/providers/builtin-registry.ts +15 -15
- package/src/providers/cache-planner.ts +2 -2
- package/src/providers/capabilities.ts +1 -601
- package/src/providers/custom-loader.ts +6 -6
- package/src/providers/discovered-compat.ts +7 -18
- package/src/providers/discovered-factory.ts +7 -7
- package/src/providers/discovered-traits.ts +1 -1
- package/src/providers/gemini.ts +4 -4
- package/src/providers/github-copilot.ts +4 -4
- package/src/providers/index.ts +1 -47
- package/src/providers/interface.ts +1 -1
- package/src/providers/llama-cpp.ts +4 -4
- package/src/providers/lm-studio-helpers.ts +1 -1
- package/src/providers/lm-studio.ts +4 -4
- package/src/providers/model-catalog-cache.ts +1 -1
- package/src/providers/model-catalog-notifications.ts +1 -1
- package/src/providers/model-catalog-synthetic.ts +2 -2
- package/src/providers/model-catalog.ts +7 -7
- package/src/providers/model-limits.ts +1 -280
- package/src/providers/ollama.ts +4 -4
- package/src/providers/openai-codex.ts +2 -2
- package/src/providers/openai-compat.ts +4 -4
- package/src/providers/openai.ts +3 -3
- package/src/providers/optimizer.ts +1 -381
- package/src/providers/provider-api.ts +1 -553
- package/src/providers/registry-helpers.ts +1 -1
- package/src/providers/registry-models.ts +2 -2
- package/src/providers/registry-types.ts +5 -5
- package/src/providers/registry.ts +1 -729
- package/src/providers/runtime-metadata.ts +1 -1
- package/src/providers/runtime-snapshot.ts +3 -3
- package/src/providers/synthetic.ts +3 -3
- package/src/providers/tier-prompts.ts +1 -1
- package/src/providers/tool-formats.ts +1 -1
- package/src/renderer/agent-detail-modal.ts +2 -2
- package/src/renderer/block-actions.ts +1 -1
- package/src/renderer/context-inspector.ts +1 -1
- package/src/renderer/conversation-layout.ts +1 -1
- package/src/renderer/conversation-overlays.ts +1 -1
- package/src/renderer/git-status.ts +1 -1
- package/src/renderer/live-tail-modal.ts +1 -1
- package/src/renderer/process-modal.ts +2 -2
- package/src/runtime/bootstrap-background.ts +4 -4
- package/src/runtime/bootstrap-command-context.ts +23 -23
- package/src/runtime/bootstrap-command-parts.ts +23 -23
- package/src/runtime/bootstrap-core.ts +12 -10
- package/src/runtime/bootstrap-helpers.ts +2 -2
- package/src/runtime/bootstrap-hook-bridge.ts +9 -9
- package/src/runtime/bootstrap-runtime-events.ts +4 -4
- package/src/runtime/bootstrap-services.ts +4 -4
- package/src/runtime/bootstrap-shell.ts +11 -11
- package/src/runtime/bootstrap.ts +28 -10
- package/src/runtime/compaction/index.ts +1 -90
- package/src/runtime/compaction/lifecycle.ts +1 -167
- package/src/runtime/compaction/manager.ts +11 -11
- package/src/runtime/compaction/quality-score.ts +1 -279
- package/src/runtime/compaction/resume-repair.ts +1 -183
- package/src/runtime/compaction/strategies/autocompact.ts +1 -65
- package/src/runtime/compaction/strategies/boundary-commit.ts +1 -106
- package/src/runtime/compaction/strategies/collapse.ts +1 -90
- package/src/runtime/compaction/strategies/index.ts +1 -23
- package/src/runtime/compaction/strategies/microcompact.ts +1 -74
- package/src/runtime/compaction/strategies/reactive.ts +1 -89
- package/src/runtime/compaction/types.ts +1 -221
- package/src/runtime/context.ts +9 -9
- package/src/runtime/diagnostics/actions.ts +1 -1
- package/src/runtime/diagnostics/index.ts +5 -5
- package/src/runtime/diagnostics/panels/agents.ts +2 -2
- package/src/runtime/diagnostics/panels/events.ts +2 -2
- package/src/runtime/diagnostics/panels/health.ts +2 -2
- package/src/runtime/diagnostics/panels/ops.ts +2 -2
- package/src/runtime/diagnostics/panels/policy.ts +2 -2
- package/src/runtime/diagnostics/panels/tasks.ts +2 -2
- package/src/runtime/diagnostics/panels/tool-calls.ts +2 -2
- package/src/runtime/diagnostics/provider.ts +1 -1
- package/src/runtime/ecosystem/recommendations.ts +1 -1
- package/src/runtime/emitters/agents.ts +2 -2
- package/src/runtime/emitters/automation.ts +2 -2
- package/src/runtime/emitters/communication.ts +2 -2
- package/src/runtime/emitters/compaction.ts +2 -2
- package/src/runtime/emitters/control-plane.ts +2 -2
- package/src/runtime/emitters/deliveries.ts +2 -2
- package/src/runtime/emitters/forensics.ts +2 -2
- package/src/runtime/emitters/index.ts +27 -27
- package/src/runtime/emitters/knowledge.ts +2 -2
- package/src/runtime/emitters/mcp.ts +2 -2
- package/src/runtime/emitters/ops.ts +2 -2
- package/src/runtime/emitters/orchestration.ts +2 -2
- package/src/runtime/emitters/permissions.ts +2 -2
- package/src/runtime/emitters/planner.ts +2 -2
- package/src/runtime/emitters/plugins.ts +2 -2
- package/src/runtime/emitters/providers.ts +2 -2
- package/src/runtime/emitters/routes.ts +2 -2
- package/src/runtime/emitters/security.ts +2 -2
- package/src/runtime/emitters/session.ts +2 -2
- package/src/runtime/emitters/surfaces.ts +2 -2
- package/src/runtime/emitters/tasks.ts +2 -2
- package/src/runtime/emitters/tools.ts +2 -2
- package/src/runtime/emitters/transport.ts +2 -2
- package/src/runtime/emitters/turn.ts +3 -3
- package/src/runtime/emitters/ui.ts +2 -2
- package/src/runtime/emitters/watchers.ts +2 -2
- package/src/runtime/emitters/workflows.ts +3 -3
- package/src/runtime/eval/index.ts +3 -3
- package/src/runtime/eval/runner.ts +1 -1
- package/src/runtime/eval/suites.ts +1 -1
- package/src/runtime/events/domain-map.ts +2 -2
- package/src/runtime/events/index.ts +1 -194
- package/src/runtime/events/turn.ts +1 -60
- package/src/runtime/events/workflows.ts +1 -17
- package/src/runtime/forensics/collector.ts +4 -4
- package/src/runtime/forensics/index.ts +1 -1
- package/src/runtime/foundation-clients.ts +14 -14
- package/src/runtime/foundation-services.ts +8 -8
- package/src/runtime/guidance.ts +3 -3
- package/src/runtime/health/effect-handlers.ts +3 -3
- package/src/runtime/health/index.ts +4 -4
- package/src/runtime/health/wiring.ts +2 -2
- package/src/runtime/index.ts +29 -29
- package/src/runtime/integration/helpers.ts +12 -12
- package/src/runtime/lifecycle.ts +4 -4
- package/src/runtime/mcp/index.ts +3 -3
- package/src/runtime/mcp/manager.ts +1 -1
- package/src/runtime/network/inbound.ts +2 -2
- package/src/runtime/network/index.ts +5 -5
- package/src/runtime/network/outbound.ts +2 -2
- package/src/runtime/network/shared.ts +1 -1
- package/src/runtime/operator-client.ts +9 -9
- package/src/runtime/ops/control-plane.ts +2 -2
- package/src/runtime/ops/index.ts +3 -3
- package/src/runtime/ops/playbooks/index.ts +2 -2
- package/src/runtime/ops/playbooks/session-unrecoverable.ts +2 -2
- package/src/runtime/ops/playbooks/stuck-turn.ts +1 -1
- package/src/runtime/ops/runtime-context.ts +1 -1
- package/src/runtime/orchestration/spawn-policy.ts +1 -1
- package/src/runtime/peer-client.ts +3 -3
- package/src/runtime/perf/index.ts +1 -1
- package/src/runtime/perf/slo-collector.ts +1 -1
- package/src/runtime/permissions/index.ts +5 -5
- package/src/runtime/permissions/policy-runtime.ts +1 -175
- package/src/runtime/permissions/rule-suggestions.ts +1 -1
- package/src/runtime/plugins/hot-reload.ts +4 -4
- package/src/runtime/plugins/index.ts +13 -13
- package/src/runtime/plugins/lifecycle.ts +1 -1
- package/src/runtime/plugins/manager.ts +10 -10
- package/src/runtime/plugins/manifest.ts +2 -2
- package/src/runtime/plugins/quarantine.ts +2 -2
- package/src/runtime/plugins/trust.ts +2 -2
- package/src/runtime/plugins/types.ts +1 -1
- package/src/runtime/provider-accounts/registry.ts +2 -2
- package/src/runtime/remote/distributed-runtime-contract-schemas.ts +3 -3
- package/src/runtime/remote/index.ts +3 -3
- package/src/runtime/remote/runner-registry.ts +2 -2
- package/src/runtime/remote/supervisor.ts +1 -1
- package/src/runtime/runtime-hook-api.ts +1 -1
- package/src/runtime/runtime-knowledge-api.ts +1 -1
- package/src/runtime/runtime-mcp-api.ts +1 -1
- package/src/runtime/runtime-ops-api.ts +2 -2
- package/src/runtime/runtime-provider-api.ts +1 -1
- package/src/runtime/services.ts +35 -32
- package/src/runtime/session-maintenance.ts +1 -1
- package/src/runtime/session-persistence.ts +2 -2
- package/src/runtime/session-return-context.ts +3 -3
- package/src/runtime/settings/control-plane-store.ts +1 -1
- package/src/runtime/settings/control-plane.ts +2 -2
- package/src/runtime/shell-command-extensions.ts +7 -7
- package/src/runtime/shell-command-ops.ts +6 -6
- package/src/runtime/shell-command-platform.ts +1 -1
- package/src/runtime/shell-command-services.ts +17 -17
- package/src/runtime/shell-command-workspace.ts +1 -1
- package/src/runtime/store/domains/conversation.ts +1 -1
- package/src/runtime/store/domains/index.ts +4 -4
- package/src/runtime/store/domains/permissions.ts +1 -1
- package/src/runtime/store/helpers/reducers/conversation.ts +3 -3
- package/src/runtime/store/helpers/reducers/lifecycle.ts +3 -3
- package/src/runtime/store/helpers/reducers/shared.ts +2 -2
- package/src/runtime/store/helpers/reducers/sync.ts +1 -1
- package/src/runtime/store/helpers/reducers.ts +4 -4
- package/src/runtime/store/index.ts +4 -4
- package/src/runtime/store/selectors/index.ts +2 -2
- package/src/runtime/store/state.ts +4 -4
- package/src/runtime/tasks/adapters/acp-adapter.ts +1 -1
- package/src/runtime/tasks/adapters/index.ts +6 -6
- package/src/runtime/tasks/index.ts +3 -3
- package/src/runtime/tasks/manager.ts +3 -3
- package/src/runtime/telemetry/api-helpers.ts +2 -2
- package/src/runtime/telemetry/api.ts +2 -2
- package/src/runtime/telemetry/index.ts +5 -5
- package/src/runtime/telemetry/instrumentation/domain-bridge-agent-session.ts +1 -1
- package/src/runtime/telemetry/instrumentation/domain-bridge-plugin-mcp.ts +1 -1
- package/src/runtime/telemetry/instrumentation/domain-bridge-shared.ts +1 -1
- package/src/runtime/telemetry/instrumentation/domain-bridge-transport-task.ts +1 -1
- package/src/runtime/telemetry/instrumentation/domain-bridge.ts +5 -5
- package/src/runtime/telemetry/instrumentation/index.ts +3 -3
- package/src/runtime/tools/context.ts +3 -3
- package/src/runtime/tools/index.ts +4 -4
- package/src/runtime/tools/phased-executor.ts +3 -3
- package/src/runtime/tools/phases/budget.ts +1 -1
- package/src/runtime/tools/phases/execute.ts +1 -1
- package/src/runtime/tools/phases/index.ts +7 -7
- package/src/runtime/tools/phases/map-output.ts +1 -1
- package/src/runtime/tools/phases/permission.ts +2 -2
- package/src/runtime/tools/phases/posthook.ts +1 -1
- package/src/runtime/tools/phases/prehook.ts +1 -1
- package/src/runtime/tools/phases/validate.ts +1 -1
- package/src/runtime/transports/direct.ts +4 -4
- package/src/runtime/transports/http-helpers.ts +3 -3
- package/src/runtime/transports/http-types.ts +6 -6
- package/src/runtime/transports/http.ts +8 -8
- package/src/runtime/transports/realtime.ts +4 -4
- package/src/runtime/transports/remote-events.ts +1 -1
- package/src/runtime/transports/shared.ts +2 -2
- package/src/runtime/transports/ui-runtime-events.ts +2 -2
- package/src/runtime/ui/index.ts +7 -7
- package/src/runtime/ui/model-picker/data-provider.ts +4 -4
- package/src/runtime/ui/model-picker/health-enrichment.ts +3 -3
- package/src/runtime/ui/model-picker/index.ts +8 -8
- package/src/runtime/ui/provider-health/data-provider.ts +2 -2
- package/src/runtime/ui/provider-health/fallback-visualizer.ts +1 -1
- package/src/runtime/ui/provider-health/index.ts +5 -5
- package/src/runtime/ui-events.ts +1 -1
- package/src/runtime/ui-read-models-core.ts +2 -2
- package/src/runtime/ui-read-models-observability-maintenance.ts +4 -4
- package/src/runtime/ui-read-models-observability-options.ts +1 -1
- package/src/runtime/ui-read-models-observability-remote.ts +2 -2
- package/src/runtime/ui-read-models-observability-security.ts +3 -3
- package/src/runtime/ui-read-models-observability-system.ts +6 -6
- package/src/runtime/ui-read-models-observability.ts +10 -10
- package/src/runtime/ui-read-models-operations.ts +2 -2
- package/src/runtime/ui-read-models.ts +7 -7
- package/src/runtime/ui-service-queries.ts +2 -2
- package/src/runtime/ui-services.ts +7 -7
- package/src/runtime/worktree/registry.ts +1 -1
- package/src/scripts/process-messages.ts +1 -1
- package/src/sessions/manager.ts +9 -383
- package/src/shell/blocking-input.ts +3 -3
- package/src/shell/ui-openers.ts +3 -3
- package/src/state/file-watcher.ts +1 -1
- package/src/state/index.ts +10 -10
- package/src/state/knowledge-injection.ts +2 -2
- package/src/state/memory-embedding-http.ts +2 -2
- package/src/state/memory-embeddings.ts +1 -1
- package/src/state/memory-ingest.ts +3 -3
- package/src/state/memory-registry.ts +3 -3
- package/src/state/memory-store-helpers.ts +1 -1
- package/src/state/memory-store.ts +4 -4
- package/src/state/memory-vector-store.ts +3 -3
- package/src/tools/agent/index.ts +7 -7
- package/src/tools/agent/manager.ts +8 -8
- package/src/tools/analyze/git-modes.ts +2 -2
- package/src/tools/analyze/index.ts +2 -2
- package/src/tools/channel/agent-tools.ts +1 -1
- package/src/tools/channel/index.ts +2 -2
- package/src/tools/edit/core.ts +3 -3
- package/src/tools/edit/index.ts +2 -2
- package/src/tools/edit/phased.ts +2 -2
- package/src/tools/fetch/index.ts +2 -2
- package/src/tools/fetch/phased.ts +1 -1
- package/src/tools/index.ts +21 -21
- package/src/tools/mcp/index.ts +1 -1
- package/src/tools/remote-trigger/index.ts +1 -1
- package/src/tools/shared/auto-heal.ts +2 -2
- package/src/tools/state/index.ts +1 -1
- package/src/tools/web-search/index.ts +1 -1
- package/src/tools/write/index.ts +3 -3
- package/src/tools/write/phased.ts +1 -1
- package/src/version.ts +1 -1
- package/src/watchers/index.ts +2 -2
- package/src/watchers/registry.ts +2 -2
- package/src/web-search/index.ts +10 -10
- package/src/web-search/provider-registry.ts +8 -8
- package/src/web-search/providers/brave.ts +1 -1
- package/src/web-search/providers/duckduckgo.ts +1 -1
- package/src/web-search/providers/exa.ts +1 -1
- package/src/web-search/providers/firecrawl.ts +1 -1
- package/src/web-search/providers/perplexity.ts +1 -1
- package/src/web-search/providers/searxng.ts +1 -1
- package/src/web-search/providers/shared.ts +1 -1
- package/src/web-search/providers/tavily.ts +1 -1
- package/src/web-search/service.ts +2 -2
- package/src/runtime/ecosystem/catalog.ts +0 -606
package/src/sessions/manager.ts
CHANGED
|
@@ -1,388 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
import type { SessionReturnContextSummary } from '../runtime/session-return-context.ts';
|
|
6
|
-
import type { ConversationTitleSource } from '../core/conversation.ts';
|
|
7
|
-
import { summarizeError } from '@pellux/goodvibes-sdk/platform/utils/error-display';
|
|
1
|
+
export type {
|
|
2
|
+
SessionInfo,
|
|
3
|
+
SessionMeta,
|
|
4
|
+
} from '@pellux/goodvibes-sdk/platform/sessions/manager';
|
|
8
5
|
|
|
9
|
-
|
|
10
|
-
* Metadata for a saved session (the first JSONL line).
|
|
11
|
-
*/
|
|
12
|
-
export interface SessionMeta {
|
|
13
|
-
title: string;
|
|
14
|
-
model: string;
|
|
15
|
-
provider: string;
|
|
16
|
-
timestamp: number;
|
|
17
|
-
titleSource?: ConversationTitleSource;
|
|
18
|
-
returnContext?: SessionReturnContextSummary;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* Summary info for listing saved sessions.
|
|
23
|
-
*/
|
|
24
|
-
export interface SessionInfo {
|
|
25
|
-
name: string;
|
|
26
|
-
title: string;
|
|
27
|
-
model: string;
|
|
28
|
-
provider: string;
|
|
29
|
-
timestamp: number;
|
|
30
|
-
messageCount: number;
|
|
31
|
-
filePath: string;
|
|
32
|
-
titleSource?: ConversationTitleSource;
|
|
33
|
-
returnContext?: SessionReturnContextSummary;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
/**
|
|
37
|
-
* SessionManager - Handles saving and loading named conversation sessions
|
|
38
|
-
* as JSONL files under .goodvibes/tui/sessions/.
|
|
39
|
-
*
|
|
40
|
-
* Format: each line is a JSON object.
|
|
41
|
-
* Line 0: { type: 'meta', ...SessionMeta }
|
|
42
|
-
* Line N: { type: 'message', ...message fields }
|
|
43
|
-
*/
|
|
44
|
-
export class SessionManager {
|
|
45
|
-
private sessionsDir: string;
|
|
6
|
+
import { SessionManager as SdkSessionManager } from '@pellux/goodvibes-sdk/platform/sessions/manager';
|
|
46
7
|
|
|
8
|
+
export class SessionManager extends SdkSessionManager {
|
|
47
9
|
constructor(baseDir: string) {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
* Save conversation messages to a JSONL session file.
|
|
53
|
-
* Overwrites if file already exists.
|
|
54
|
-
* Returns the sanitized filename used (may differ from input name).
|
|
55
|
-
*/
|
|
56
|
-
save(
|
|
57
|
-
name: string,
|
|
58
|
-
messages: object[],
|
|
59
|
-
meta: SessionMeta,
|
|
60
|
-
agentRecords?: AgentRecord[],
|
|
61
|
-
): { filePath: string; sanitizedName: string } {
|
|
62
|
-
if (!name || !name.trim()) throw new Error('Session name cannot be empty');
|
|
63
|
-
mkdirSync(this.sessionsDir, { recursive: true });
|
|
64
|
-
const sanitizedName = this.sanitizeName(name);
|
|
65
|
-
const filePath = join(this.sessionsDir, `${sanitizedName}.jsonl`);
|
|
66
|
-
|
|
67
|
-
const lines: string[] = [];
|
|
68
|
-
|
|
69
|
-
// First line: meta record
|
|
70
|
-
const metaRecord = {
|
|
71
|
-
type: 'meta' as const,
|
|
72
|
-
timestamp: meta.timestamp,
|
|
73
|
-
title: meta.title,
|
|
74
|
-
model: meta.model,
|
|
75
|
-
provider: meta.provider,
|
|
76
|
-
titleSource: meta.titleSource ?? 'system',
|
|
77
|
-
returnContext: meta.returnContext,
|
|
78
|
-
};
|
|
79
|
-
lines.push(JSON.stringify(metaRecord));
|
|
80
|
-
|
|
81
|
-
// Subsequent lines: one message per line
|
|
82
|
-
for (const msg of messages) {
|
|
83
|
-
const { type: _ignored, ...safeMsg } = msg as Record<string, unknown>;
|
|
84
|
-
const record = { ...safeMsg, type: 'message' as const };
|
|
85
|
-
lines.push(JSON.stringify(record));
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
// Agent records: one per line, after messages
|
|
89
|
-
if (agentRecords && agentRecords.length > 0) {
|
|
90
|
-
for (const agent of agentRecords) {
|
|
91
|
-
const record = { ...agent, type: 'agent_record' as const };
|
|
92
|
-
lines.push(JSON.stringify(record));
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
writeFileSync(filePath, lines.join('\n') + '\n', 'utf-8');
|
|
97
|
-
return { filePath, sanitizedName };
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
/**
|
|
101
|
-
* Load a session from JSONL. Returns meta and messages (excluding removed ones).
|
|
102
|
-
* Throws if the file does not exist or cannot be parsed.
|
|
103
|
-
*/
|
|
104
|
-
load(name: string): { meta: SessionMeta; messages: object[]; agentRecords: AgentRecord[] } {
|
|
105
|
-
if (!name || !name.trim()) throw new Error('Session name cannot be empty');
|
|
106
|
-
const filename = this.sanitizeName(name);
|
|
107
|
-
const filePath = join(this.sessionsDir, `${filename}.jsonl`);
|
|
108
|
-
|
|
109
|
-
if (!existsSync(filePath)) {
|
|
110
|
-
throw new Error(`Session not found: ${name}`);
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
const raw = readFileSync(filePath, 'utf-8');
|
|
114
|
-
const lines = raw.split('\n').filter(l => l.trim().length > 0);
|
|
115
|
-
|
|
116
|
-
let meta: SessionMeta = { title: '', model: '', provider: '', timestamp: 0, titleSource: 'system' };
|
|
117
|
-
const messages: object[] = [];
|
|
118
|
-
const agentRecords: AgentRecord[] = [];
|
|
119
|
-
|
|
120
|
-
let skipped = 0;
|
|
121
|
-
for (const line of lines) {
|
|
122
|
-
let record: Record<string, unknown>;
|
|
123
|
-
try {
|
|
124
|
-
record = JSON.parse(line) as Record<string, unknown>;
|
|
125
|
-
} catch {
|
|
126
|
-
// Non-fatal: malformed JSON line — skip and count it
|
|
127
|
-
skipped++;
|
|
128
|
-
continue;
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
if (record.type === 'meta') {
|
|
132
|
-
meta = {
|
|
133
|
-
title: String(record.title ?? ''),
|
|
134
|
-
model: String(record.model ?? ''),
|
|
135
|
-
provider: String(record.provider ?? ''),
|
|
136
|
-
timestamp: Number(record.timestamp ?? 0),
|
|
137
|
-
titleSource: record.titleSource === 'user' ? 'user' : 'system',
|
|
138
|
-
returnContext: (record.returnContext && typeof record.returnContext === 'object')
|
|
139
|
-
? (record.returnContext as SessionReturnContextSummary)
|
|
140
|
-
: undefined,
|
|
141
|
-
};
|
|
142
|
-
} else if (record.type === 'message') {
|
|
143
|
-
// Skip messages marked as removed (F2 future feature)
|
|
144
|
-
if (record.removed === true) continue;
|
|
145
|
-
// Strip the 'type' wrapper before returning raw message
|
|
146
|
-
const { type: _type, ...msgFields } = record;
|
|
147
|
-
messages.push(msgFields);
|
|
148
|
-
} else if (record.type === 'agent_record') {
|
|
149
|
-
const { type: _type, ...agentFields } = record;
|
|
150
|
-
if (typeof agentFields.id === 'string' && typeof agentFields.status === 'string' && typeof agentFields.task === 'string') {
|
|
151
|
-
agentRecords.push(agentFields as unknown as AgentRecord);
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
if (skipped > 0) logger.debug('Skipped malformed lines', { name, skipped });
|
|
157
|
-
return { meta, messages, agentRecords };
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
/**
|
|
161
|
-
* List all saved sessions with metadata, sorted by most recent first.
|
|
162
|
-
*/
|
|
163
|
-
list(): SessionInfo[] {
|
|
164
|
-
if (!existsSync(this.sessionsDir)) return [];
|
|
165
|
-
|
|
166
|
-
let files: string[];
|
|
167
|
-
try {
|
|
168
|
-
files = readdirSync(this.sessionsDir).filter(f => f.endsWith('.jsonl'));
|
|
169
|
-
} catch {
|
|
170
|
-
// Non-fatal: sessions directory unreadable (permissions, doesn't exist yet)
|
|
171
|
-
logger.debug('SessionManager: could not read sessions directory', { dir: this.sessionsDir });
|
|
172
|
-
return [];
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
const sessions: SessionInfo[] = [];
|
|
176
|
-
|
|
177
|
-
for (const file of files) {
|
|
178
|
-
const name = file.replace(/\.jsonl$/, '');
|
|
179
|
-
const filePath = join(this.sessionsDir, file);
|
|
180
|
-
|
|
181
|
-
let meta: SessionMeta = { title: '', model: '', provider: '', timestamp: 0, titleSource: 'system' };
|
|
182
|
-
let messageCount = 0;
|
|
183
|
-
|
|
184
|
-
try {
|
|
185
|
-
const raw = readFileSync(filePath, 'utf-8');
|
|
186
|
-
const lines = raw.split('\n').filter(l => l.trim().length > 0);
|
|
187
|
-
|
|
188
|
-
// Parse only the first line for meta; count remaining non-removed message lines
|
|
189
|
-
if (lines.length > 0) {
|
|
190
|
-
try {
|
|
191
|
-
const first = JSON.parse(lines[0]) as Record<string, unknown>;
|
|
192
|
-
if (first.type === 'meta') {
|
|
193
|
-
meta = {
|
|
194
|
-
title: String(first.title ?? ''),
|
|
195
|
-
model: String(first.model ?? ''),
|
|
196
|
-
provider: String(first.provider ?? ''),
|
|
197
|
-
timestamp: Number(first.timestamp ?? 0),
|
|
198
|
-
titleSource: first.titleSource === 'user' ? 'user' : 'system',
|
|
199
|
-
returnContext: (first.returnContext && typeof first.returnContext === 'object')
|
|
200
|
-
? (first.returnContext as SessionReturnContextSummary)
|
|
201
|
-
: undefined,
|
|
202
|
-
};
|
|
203
|
-
}
|
|
204
|
-
} catch {
|
|
205
|
-
// Non-fatal: malformed meta line — session listed with default title/model
|
|
206
|
-
logger.debug('SessionManager: malformed meta line', { name });
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
// Count message lines: parse each line's type/removed fields only (no full content parse)
|
|
211
|
-
// Using startsWith anchor to avoid false positives from message content containing these strings
|
|
212
|
-
for (const l of lines.slice(1)) {
|
|
213
|
-
const trimmed = l.trim();
|
|
214
|
-
if (trimmed.startsWith('{"') && trimmed.includes('"type":"message"')) {
|
|
215
|
-
// Quick check: is "removed":true near the start of the line (before content)?
|
|
216
|
-
// Content is always the longest field, so type/removed appear in the first ~50 chars
|
|
217
|
-
const prefix = trimmed.slice(0, 60);
|
|
218
|
-
if (!prefix.includes('"removed":true')) {
|
|
219
|
-
messageCount++;
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
} catch {
|
|
224
|
-
// Non-fatal: session file unreadable — skip it from the listing
|
|
225
|
-
logger.debug('SessionManager: unreadable session file', { name });
|
|
226
|
-
continue;
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
sessions.push({
|
|
230
|
-
name,
|
|
231
|
-
title: meta.title,
|
|
232
|
-
model: meta.model,
|
|
233
|
-
provider: meta.provider,
|
|
234
|
-
timestamp: meta.timestamp,
|
|
235
|
-
messageCount,
|
|
236
|
-
filePath,
|
|
237
|
-
titleSource: meta.titleSource,
|
|
238
|
-
returnContext: meta.returnContext,
|
|
239
|
-
});
|
|
240
|
-
}
|
|
241
|
-
|
|
242
|
-
// Sort by most recent first
|
|
243
|
-
sessions.sort((a, b) => b.timestamp - a.timestamp);
|
|
244
|
-
return sessions;
|
|
245
|
-
}
|
|
246
|
-
|
|
247
|
-
/**
|
|
248
|
-
* Get just the metadata for a session without loading all messages.
|
|
249
|
-
* Returns null if the session does not exist or meta cannot be parsed.
|
|
250
|
-
*/
|
|
251
|
-
getMeta(name: string): SessionMeta | null {
|
|
252
|
-
if (!name || !name.trim()) return null;
|
|
253
|
-
const filename = this.sanitizeName(name);
|
|
254
|
-
const filePath = join(this.sessionsDir, `${filename}.jsonl`);
|
|
255
|
-
if (!existsSync(filePath)) return null;
|
|
256
|
-
try {
|
|
257
|
-
const raw = readFileSync(filePath, 'utf-8');
|
|
258
|
-
const firstLine = raw.split('\n')[0];
|
|
259
|
-
if (!firstLine?.trim()) return null;
|
|
260
|
-
const record = JSON.parse(firstLine) as Record<string, unknown>;
|
|
261
|
-
if (record.type !== 'meta') return null;
|
|
262
|
-
return {
|
|
263
|
-
title: String(record.title ?? ''),
|
|
264
|
-
model: String(record.model ?? ''),
|
|
265
|
-
provider: String(record.provider ?? ''),
|
|
266
|
-
timestamp: Number(record.timestamp ?? 0),
|
|
267
|
-
titleSource: record.titleSource === 'user' ? 'user' : 'system',
|
|
268
|
-
returnContext: (record.returnContext && typeof record.returnContext === 'object')
|
|
269
|
-
? (record.returnContext as SessionReturnContextSummary)
|
|
270
|
-
: undefined,
|
|
271
|
-
};
|
|
272
|
-
} catch {
|
|
273
|
-
// Non-fatal: session file unreadable or missing meta — return null to caller
|
|
274
|
-
logger.debug('SessionManager: could not read session meta', { name: filePath });
|
|
275
|
-
return null;
|
|
276
|
-
}
|
|
277
|
-
}
|
|
278
|
-
|
|
279
|
-
/**
|
|
280
|
-
* Rename a session by rewriting its meta line with a new title.
|
|
281
|
-
* The file is stored under the sanitized name — rename updates the title
|
|
282
|
-
* field inside the file but does NOT rename the file itself.
|
|
283
|
-
* Throws if the session does not exist.
|
|
284
|
-
*/
|
|
285
|
-
rename(name: string, newTitle: string): void {
|
|
286
|
-
if (!name || !name.trim()) throw new Error('Session name cannot be empty');
|
|
287
|
-
const filename = this.sanitizeName(name);
|
|
288
|
-
const filePath = join(this.sessionsDir, `${filename}.jsonl`);
|
|
289
|
-
if (!existsSync(filePath)) throw new Error(`Session not found: ${name}`);
|
|
290
|
-
|
|
291
|
-
const raw = readFileSync(filePath, 'utf-8');
|
|
292
|
-
const lines = raw.split('\n');
|
|
293
|
-
if (lines.length === 0) throw new Error('Session file is empty');
|
|
294
|
-
|
|
295
|
-
try {
|
|
296
|
-
const record = JSON.parse(lines[0]) as Record<string, unknown>;
|
|
297
|
-
record.title = newTitle;
|
|
298
|
-
lines[0] = JSON.stringify(record);
|
|
299
|
-
writeFileSync(filePath, lines.join('\n'), 'utf-8');
|
|
300
|
-
} catch {
|
|
301
|
-
throw new Error(`Failed to update session title: ${name}`);
|
|
302
|
-
}
|
|
303
|
-
}
|
|
304
|
-
|
|
305
|
-
/**
|
|
306
|
-
* Delete a session file.
|
|
307
|
-
* Throws if the session does not exist.
|
|
308
|
-
*/
|
|
309
|
-
delete(name: string): void {
|
|
310
|
-
if (!name || !name.trim()) throw new Error('Session name cannot be empty');
|
|
311
|
-
const filename = this.sanitizeName(name);
|
|
312
|
-
const filePath = join(this.sessionsDir, `${filename}.jsonl`);
|
|
313
|
-
if (!existsSync(filePath)) throw new Error(`Session not found: ${name}`);
|
|
314
|
-
try {
|
|
315
|
-
unlinkSync(filePath);
|
|
316
|
-
} catch (e) {
|
|
317
|
-
throw new Error(`Failed to delete session: ${summarizeError(e)}`);
|
|
318
|
-
}
|
|
319
|
-
}
|
|
320
|
-
|
|
321
|
-
/**
|
|
322
|
-
* Search all sessions for messages containing the query string (case-insensitive).
|
|
323
|
-
* Returns sessions with match count and up to 3 context snippets per session.
|
|
324
|
-
*/
|
|
325
|
-
search(query: string): Array<{ session: SessionInfo; matchCount: number; snippets: string[] }> {
|
|
326
|
-
if (!query || !query.trim()) return [];
|
|
327
|
-
const q = query.toLowerCase();
|
|
328
|
-
const sessions = this.list();
|
|
329
|
-
const results: Array<{ session: SessionInfo; matchCount: number; snippets: string[] }> = [];
|
|
330
|
-
|
|
331
|
-
for (const session of sessions) {
|
|
332
|
-
try {
|
|
333
|
-
const raw = readFileSync(session.filePath, 'utf-8');
|
|
334
|
-
const lines = raw.split('\n').filter(l => l.trim().length > 0);
|
|
335
|
-
let matchCount = 0;
|
|
336
|
-
const snippets: string[] = [];
|
|
337
|
-
|
|
338
|
-
for (const line of lines.slice(1)) { // skip meta line
|
|
339
|
-
try {
|
|
340
|
-
const record = JSON.parse(line) as Record<string, unknown>;
|
|
341
|
-
if (record.type !== 'message') continue;
|
|
342
|
-
const content = String(record.content ?? '');
|
|
343
|
-
const lower = content.toLowerCase();
|
|
344
|
-
const idx = lower.indexOf(q);
|
|
345
|
-
if (idx !== -1) {
|
|
346
|
-
matchCount++;
|
|
347
|
-
if (snippets.length < 3) {
|
|
348
|
-
const start = Math.max(0, idx - 40);
|
|
349
|
-
const end = Math.min(content.length, idx + q.length + 60);
|
|
350
|
-
const snippet = (start > 0 ? '...' : '') + content.slice(start, end).replace(/\n/g, ' ') + (end < content.length ? '...' : '');
|
|
351
|
-
snippets.push(snippet);
|
|
352
|
-
}
|
|
353
|
-
}
|
|
354
|
-
} catch {
|
|
355
|
-
// Non-fatal: malformed line in session during search — skip it
|
|
356
|
-
logger.debug('SessionManager: malformed line during search', { name });
|
|
357
|
-
}
|
|
358
|
-
}
|
|
359
|
-
|
|
360
|
-
if (matchCount > 0) {
|
|
361
|
-
results.push({ session, matchCount, snippets });
|
|
362
|
-
}
|
|
363
|
-
} catch {
|
|
364
|
-
// Non-fatal: session unreadable during search — skip it
|
|
365
|
-
logger.debug('SessionManager: unreadable session during search', { name });
|
|
366
|
-
}
|
|
367
|
-
}
|
|
368
|
-
|
|
369
|
-
// Sort by match count descending
|
|
370
|
-
results.sort((a, b) => b.matchCount - a.matchCount);
|
|
371
|
-
return results;
|
|
372
|
-
}
|
|
373
|
-
|
|
374
|
-
/**
|
|
375
|
-
* Sanitize a session name into a safe filename.
|
|
376
|
-
* Replaces spaces with hyphens, strips non-alphanumeric/hyphen/underscore chars,
|
|
377
|
-
* collapses multiple hyphens, trims leading/trailing hyphens.
|
|
378
|
-
*/
|
|
379
|
-
sanitizeName(name: string): string {
|
|
380
|
-
return name
|
|
381
|
-
.toLowerCase()
|
|
382
|
-
.replace(/\s+/g, '-')
|
|
383
|
-
.replace(/[^a-z0-9_-]/g, '')
|
|
384
|
-
.replace(/-+/g, '-')
|
|
385
|
-
.replace(/^-+|-+$/g, '')
|
|
386
|
-
|| 'session';
|
|
10
|
+
super(baseDir, {
|
|
11
|
+
surfaceRoot: 'tui',
|
|
12
|
+
});
|
|
387
13
|
}
|
|
388
14
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type { ConversationManager } from '../core/conversation
|
|
2
|
-
import type { PermissionRequest } from '
|
|
3
|
-
import type { SessionSnapshot } from '
|
|
1
|
+
import type { ConversationManager } from '../core/conversation';
|
|
2
|
+
import type { PermissionRequest } from '@pellux/goodvibes-sdk/platform/permissions/prompt';
|
|
3
|
+
import type { SessionSnapshot } from '@pellux/goodvibes-sdk/platform/runtime/session-persistence';
|
|
4
4
|
import type { SystemMessageRouter } from '../core/system-message-router.ts';
|
|
5
5
|
|
|
6
6
|
export type PendingPermissionState = PermissionRequest & {
|
package/src/shell/ui-openers.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import type { ConfigManager } from '../config/index.ts';
|
|
2
|
-
import type { ConversationManager } from '../core/conversation
|
|
2
|
+
import type { ConversationManager } from '../core/conversation';
|
|
3
3
|
import type { CommandContext } from '../input/command-registry.ts';
|
|
4
4
|
import type { InputHandler } from '../input/handler.ts';
|
|
5
5
|
import type { PanelManager } from '../panels/panel-manager.ts';
|
|
6
|
-
import type { ProviderRegistry } from '
|
|
6
|
+
import type { ProviderRegistry } from '@pellux/goodvibes-sdk/platform/providers/registry';
|
|
7
7
|
import type { MutableRuntimeState } from '../runtime/context.ts';
|
|
8
8
|
import type { FeatureFlagManager } from '@pellux/goodvibes-sdk/platform/runtime/feature-flags/index';
|
|
9
|
-
import type { McpRegistry } from '
|
|
9
|
+
import type { McpRegistry } from '@pellux/goodvibes-sdk/platform/mcp/registry';
|
|
10
10
|
import type { SubscriptionManager } from '@pellux/goodvibes-sdk/platform/config/subscriptions';
|
|
11
11
|
import type { ServiceInspectionQuery } from '../runtime/ui-service-queries.ts';
|
|
12
12
|
|
|
@@ -4,7 +4,7 @@ import { join, resolve } from 'path';
|
|
|
4
4
|
import { logger } from '@pellux/goodvibes-sdk/platform/utils/logger';
|
|
5
5
|
import type { FileStateCache } from '@pellux/goodvibes-sdk/platform/state/file-cache';
|
|
6
6
|
import type { ProjectIndex } from '@pellux/goodvibes-sdk/platform/state/project-index';
|
|
7
|
-
import type { HookDispatcher } from '
|
|
7
|
+
import type { HookDispatcher } from '@pellux/goodvibes-sdk/platform/hooks/dispatcher';
|
|
8
8
|
import type { HookEvent } from '@pellux/goodvibes-sdk/platform/hooks/types';
|
|
9
9
|
import { summarizeError } from '@pellux/goodvibes-sdk/platform/utils/error-display';
|
|
10
10
|
|
package/src/state/index.ts
CHANGED
|
@@ -8,14 +8,14 @@ export { ModeManager } from '@pellux/goodvibes-sdk/platform/state/mode-manager';
|
|
|
8
8
|
export type { ModeDefinition } from '@pellux/goodvibes-sdk/platform/state/mode-manager';
|
|
9
9
|
export type { HITLMode, HITLModeDefinition } from '@pellux/goodvibes-sdk/platform/state/mode-manager';
|
|
10
10
|
export { HITL_QUIET, HITL_BALANCED, HITL_OPERATOR } from '@pellux/goodvibes-sdk/platform/state/mode-manager';
|
|
11
|
-
export { FileWatcher } from '
|
|
11
|
+
export { FileWatcher } from '@pellux/goodvibes-sdk/platform/state/file-watcher';
|
|
12
12
|
export { SQLiteStore } from '@pellux/goodvibes-sdk/platform/state/sqlite-store';
|
|
13
13
|
export { TelemetryDB } from '@pellux/goodvibes-sdk/platform/state/telemetry';
|
|
14
14
|
export type { ToolCallRecord, TelemetryFilter, TelemetrySummary } from '@pellux/goodvibes-sdk/platform/state/telemetry';
|
|
15
15
|
export { FileUndoManager } from '@pellux/goodvibes-sdk/platform/state/file-undo';
|
|
16
16
|
export type { FileOperation } from '@pellux/goodvibes-sdk/platform/state/file-undo';
|
|
17
|
-
export { MemoryStore } from '
|
|
18
|
-
export { MemoryRegistry } from '
|
|
17
|
+
export { MemoryStore } from '@pellux/goodvibes-sdk/platform/state/memory-store';
|
|
18
|
+
export { MemoryRegistry } from '@pellux/goodvibes-sdk/platform/state/memory-registry';
|
|
19
19
|
export type {
|
|
20
20
|
MemoryClass,
|
|
21
21
|
MemoryRecord,
|
|
@@ -29,20 +29,20 @@ export type {
|
|
|
29
29
|
MemoryReviewState,
|
|
30
30
|
ProvenanceLink,
|
|
31
31
|
ProvenanceLinkKind,
|
|
32
|
-
} from '
|
|
32
|
+
} from '@pellux/goodvibes-sdk/platform/state/memory-store';
|
|
33
33
|
export {
|
|
34
34
|
MEMORY_VECTOR_DIMS,
|
|
35
35
|
embedMemoryText,
|
|
36
36
|
resolveMemoryVectorDbPath,
|
|
37
37
|
SqliteVecMemoryIndex,
|
|
38
|
-
} from '
|
|
39
|
-
export type { MemoryVectorCandidate, MemoryVectorStats } from '
|
|
38
|
+
} from '@pellux/goodvibes-sdk/platform/state/memory-vector-store';
|
|
39
|
+
export type { MemoryVectorCandidate, MemoryVectorStats } from '@pellux/goodvibes-sdk/platform/state/memory-vector-store';
|
|
40
40
|
export {
|
|
41
41
|
DEFAULT_MEMORY_EMBEDDING_DIMS,
|
|
42
42
|
HASHED_MEMORY_EMBEDDING_PROVIDER,
|
|
43
43
|
MemoryEmbeddingProviderRegistry,
|
|
44
44
|
normalizeMemoryEmbeddingVector,
|
|
45
|
-
} from '
|
|
45
|
+
} from '@pellux/goodvibes-sdk/platform/state/memory-embeddings';
|
|
46
46
|
export type {
|
|
47
47
|
MemoryEmbeddingDoctorReport,
|
|
48
48
|
MemoryEmbeddingProvider,
|
|
@@ -51,6 +51,6 @@ export type {
|
|
|
51
51
|
MemoryEmbeddingRequest,
|
|
52
52
|
MemoryEmbeddingResult,
|
|
53
53
|
MemoryEmbeddingUsage,
|
|
54
|
-
} from '
|
|
55
|
-
export type { KnowledgeInjection } from '
|
|
56
|
-
export { selectKnowledgeForTask, buildKnowledgeInjectionPrompt } from '
|
|
54
|
+
} from '@pellux/goodvibes-sdk/platform/state/memory-embeddings';
|
|
55
|
+
export type { KnowledgeInjection } from '@pellux/goodvibes-sdk/platform/state/knowledge-injection';
|
|
56
|
+
export { selectKnowledgeForTask, buildKnowledgeInjectionPrompt } from '@pellux/goodvibes-sdk/platform/state/knowledge-injection';
|
|
@@ -6,12 +6,12 @@ import {
|
|
|
6
6
|
type KnowledgeInjectionRetention,
|
|
7
7
|
type KnowledgeInjectionTrustTier,
|
|
8
8
|
type KnowledgeInjectionUseAs,
|
|
9
|
-
} from '
|
|
9
|
+
} from '@pellux/goodvibes-sdk/platform/knowledge/internal';
|
|
10
10
|
import type {
|
|
11
11
|
MemoryRecord,
|
|
12
12
|
MemoryRegistry,
|
|
13
13
|
MemorySemanticSearchResult,
|
|
14
|
-
} from '
|
|
14
|
+
} from '@pellux/goodvibes-sdk/platform/state/memory-store';
|
|
15
15
|
|
|
16
16
|
export interface KnowledgeInjection {
|
|
17
17
|
readonly id: string;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { DEFAULT_MEMORY_EMBEDDING_DIMS } from '
|
|
1
|
+
import { DEFAULT_MEMORY_EMBEDDING_DIMS } from '@pellux/goodvibes-sdk/platform/state/memory-embeddings';
|
|
2
2
|
import { summarizeError } from '@pellux/goodvibes-sdk/platform/utils/error-display';
|
|
3
3
|
import type {
|
|
4
4
|
MemoryEmbeddingProvider,
|
|
@@ -6,7 +6,7 @@ import type {
|
|
|
6
6
|
MemoryEmbeddingProviderStatus,
|
|
7
7
|
MemoryEmbeddingRequest,
|
|
8
8
|
MemoryEmbeddingResult,
|
|
9
|
-
} from '
|
|
9
|
+
} from '@pellux/goodvibes-sdk/platform/state/memory-embeddings';
|
|
10
10
|
|
|
11
11
|
type EnvMap = Record<string, string | undefined>;
|
|
12
12
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ConfigManager, getConfiguredEmbeddingProviderId } from '../config/index.ts';
|
|
2
2
|
import { logger } from '@pellux/goodvibes-sdk/platform/utils/logger';
|
|
3
|
-
import { createBuiltinMemoryEmbeddingProviders } from '
|
|
3
|
+
import { createBuiltinMemoryEmbeddingProviders } from '@pellux/goodvibes-sdk/platform/state/memory-embedding-http';
|
|
4
4
|
import { summarizeError } from '@pellux/goodvibes-sdk/platform/utils/error-display';
|
|
5
5
|
|
|
6
6
|
export const DEFAULT_MEMORY_EMBEDDING_DIMS = 384;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type { MemoryAddOptions, ProvenanceLink } from '
|
|
1
|
+
import type { MemoryAddOptions, ProvenanceLink } from '@pellux/goodvibes-sdk/platform/state/memory-store';
|
|
2
2
|
import type { ForensicsBundle } from '@pellux/goodvibes-sdk/platform/runtime/forensics/types';
|
|
3
|
-
import type { PolicyPreflightReview } from '
|
|
4
|
-
import type { PluginStatus } from '
|
|
3
|
+
import type { PolicyPreflightReview } from '@pellux/goodvibes-sdk/platform/runtime/permissions/preflight';
|
|
4
|
+
import type { PluginStatus } from '@pellux/goodvibes-sdk/platform/plugins/manager';
|
|
5
5
|
|
|
6
6
|
export interface McpSecurityCapture {
|
|
7
7
|
readonly name: string;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type { MemoryAddOptions, MemoryBundle, MemoryDoctorReport, MemoryLink, MemoryRecord, MemoryReviewPatch, MemoryScope, MemorySearchFilter, MemorySemanticSearchResult, MemoryStore } from '
|
|
2
|
-
import type { MemoryVectorStats } from '
|
|
3
|
-
import type { MemoryImportResult } from '
|
|
1
|
+
import type { MemoryAddOptions, MemoryBundle, MemoryDoctorReport, MemoryLink, MemoryRecord, MemoryReviewPatch, MemoryScope, MemorySearchFilter, MemorySemanticSearchResult, MemoryStore } from '@pellux/goodvibes-sdk/platform/state/memory-store';
|
|
2
|
+
import type { MemoryVectorStats } from '@pellux/goodvibes-sdk/platform/state/memory-vector-store';
|
|
3
|
+
import type { MemoryImportResult } from '@pellux/goodvibes-sdk/platform/state/memory-store';
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* MemoryRegistry — thin observable wrapper around the MemoryStore.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { MemoryDoctorReport, MemoryLink, MemoryRecord, MemoryReviewState, MemoryScope, MemorySearchFilter } from '
|
|
1
|
+
import type { MemoryDoctorReport, MemoryLink, MemoryRecord, MemoryReviewState, MemoryScope, MemorySearchFilter } from '@pellux/goodvibes-sdk/platform/state/memory-store';
|
|
2
2
|
|
|
3
3
|
export function createSchema(db: { run(sql: string): void; exec(sql: string, params?: (string | number)[]): Array<{ columns: string[]; values: unknown[][] }> }): void {
|
|
4
4
|
db.run('PRAGMA foreign_keys = ON');
|
|
@@ -14,12 +14,12 @@ import {
|
|
|
14
14
|
SqliteVecMemoryIndex,
|
|
15
15
|
type MemoryVectorStats,
|
|
16
16
|
resolveMemoryVectorDbPath,
|
|
17
|
-
} from '
|
|
17
|
+
} from '@pellux/goodvibes-sdk/platform/state/memory-vector-store';
|
|
18
18
|
import {
|
|
19
19
|
HASHED_MEMORY_EMBEDDING_PROVIDER,
|
|
20
20
|
MemoryEmbeddingProviderRegistry,
|
|
21
21
|
type MemoryEmbeddingDoctorReport,
|
|
22
|
-
} from '
|
|
22
|
+
} from '@pellux/goodvibes-sdk/platform/state/memory-embeddings';
|
|
23
23
|
import { logger } from '@pellux/goodvibes-sdk/platform/utils/logger';
|
|
24
24
|
import { summarizeError } from '@pellux/goodvibes-sdk/platform/utils/error-display';
|
|
25
25
|
import {
|
|
@@ -34,7 +34,7 @@ import {
|
|
|
34
34
|
rowToRecord,
|
|
35
35
|
safeParseJson,
|
|
36
36
|
scoreRecord,
|
|
37
|
-
} from '
|
|
37
|
+
} from '@pellux/goodvibes-sdk/platform/state/memory-store-helpers';
|
|
38
38
|
|
|
39
39
|
// ── Types ─────────────────────────────────────────────────────────────────────
|
|
40
40
|
|
|
@@ -184,7 +184,7 @@ export interface MemoryDoctorReport {
|
|
|
184
184
|
readonly checkedAt: number;
|
|
185
185
|
}
|
|
186
186
|
|
|
187
|
-
export { MemoryRegistry } from '
|
|
187
|
+
export { MemoryRegistry } from '@pellux/goodvibes-sdk/platform/state/memory-registry';
|
|
188
188
|
|
|
189
189
|
// ── MemoryStore ───────────────────────────────────────────────────────────────
|
|
190
190
|
|
|
@@ -3,12 +3,12 @@ import { dirname } from 'node:path';
|
|
|
3
3
|
import { mkdirSync } from 'node:fs';
|
|
4
4
|
import { Database, type SQLQueryBindings } from 'bun:sqlite';
|
|
5
5
|
import { load as loadSqliteVec } from 'sqlite-vec';
|
|
6
|
-
import type { MemoryClass, MemoryRecord, MemoryReviewState, MemoryScope } from '
|
|
6
|
+
import type { MemoryClass, MemoryRecord, MemoryReviewState, MemoryScope } from '@pellux/goodvibes-sdk/platform/state/memory-store';
|
|
7
7
|
import {
|
|
8
8
|
MemoryEmbeddingProviderRegistry,
|
|
9
9
|
embedMemoryText,
|
|
10
10
|
normalizeMemoryEmbeddingVector,
|
|
11
|
-
} from '
|
|
11
|
+
} from '@pellux/goodvibes-sdk/platform/state/memory-embeddings';
|
|
12
12
|
import { logger } from '@pellux/goodvibes-sdk/platform/utils/logger';
|
|
13
13
|
import { summarizeError } from '@pellux/goodvibes-sdk/platform/utils/error-display';
|
|
14
14
|
|
|
@@ -16,7 +16,7 @@ import { summarizeError } from '@pellux/goodvibes-sdk/platform/utils/error-displ
|
|
|
16
16
|
// Duplicating the literal here avoids an initialization cycle when state/index.ts
|
|
17
17
|
// re-exports both modules during targeted test imports.
|
|
18
18
|
export const MEMORY_VECTOR_DIMS = 384;
|
|
19
|
-
export { embedMemoryText } from '
|
|
19
|
+
export { embedMemoryText } from '@pellux/goodvibes-sdk/platform/state/memory-embeddings';
|
|
20
20
|
|
|
21
21
|
export interface MemoryVectorSearchFilter {
|
|
22
22
|
scope?: MemoryScope;
|
package/src/tools/agent/index.ts
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import type { Tool } from '@pellux/goodvibes-sdk/platform/types/tools';
|
|
2
|
-
import type { ConfigManager } from '
|
|
2
|
+
import type { ConfigManager } from '@pellux/goodvibes-sdk/platform/config/manager';
|
|
3
3
|
import { AGENT_TOOL_SCHEMA } from '@pellux/goodvibes-sdk/platform/tools/agent/schema';
|
|
4
4
|
import type { AgentInput } from '@pellux/goodvibes-sdk/platform/tools/agent/schema';
|
|
5
5
|
import { ArchetypeLoader } from '@pellux/goodvibes-sdk/platform/agents/archetypes';
|
|
6
|
-
import { AgentMessageBus } from '
|
|
7
|
-
import type { WrfcController } from '
|
|
8
|
-
import { AGENT_TEMPLATES, AgentManager } from '
|
|
9
|
-
import { evaluateOrchestrationSpawn } from '
|
|
6
|
+
import { AgentMessageBus } from '@pellux/goodvibes-sdk/platform/agents/message-bus';
|
|
7
|
+
import type { WrfcController } from '@pellux/goodvibes-sdk/platform/agents/wrfc-controller';
|
|
8
|
+
import { AGENT_TEMPLATES, AgentManager } from '@pellux/goodvibes-sdk/platform/tools/agent/manager';
|
|
9
|
+
import { evaluateOrchestrationSpawn } from '@pellux/goodvibes-sdk/platform/runtime/orchestration/spawn-policy';
|
|
10
10
|
import { summarizeError } from '@pellux/goodvibes-sdk/platform/utils/error-display';
|
|
11
|
-
export type { AgentRecord } from '
|
|
12
|
-
export { AGENT_TEMPLATES, AgentManager } from '
|
|
11
|
+
export type { AgentRecord } from '@pellux/goodvibes-sdk/platform/tools/agent/manager';
|
|
12
|
+
export { AGENT_TEMPLATES, AgentManager } from '@pellux/goodvibes-sdk/platform/tools/agent/manager';
|
|
13
13
|
|
|
14
14
|
// ---------------------------------------------------------------------------
|
|
15
15
|
// Tool implementation
|