ruflo 3.10.46 → 3.11.0
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/README.md +412 -412
- package/bin/ruflo.js +77 -77
- package/package.json +113 -113
- package/src/chat-ui/Dockerfile +25 -25
- package/src/chat-ui/patch-mcp-url-safety.sh +28 -28
- package/src/config/config.example.json +76 -76
- package/src/mcp-bridge/Dockerfile +45 -45
- package/src/mcp-bridge/index.js +1692 -1692
- package/src/mcp-bridge/mcp-stdio-kernel.js +159 -159
- package/src/mcp-bridge/package.json +17 -17
- package/src/mcp-bridge/test-harness.js +470 -470
- package/src/nginx/Dockerfile +10 -10
- package/src/nginx/nginx.conf +67 -67
- package/src/nginx/static/favicon-dark.svg +4 -4
- package/src/nginx/static/favicon.svg +4 -4
- package/src/nginx/static/icon.svg +5 -5
- package/src/nginx/static/logo.svg +9 -9
- package/src/nginx/static/manifest.json +22 -22
- package/src/nginx/static/welcome.js +184 -184
- package/src/ruvocal/.claude/skills/add-model-descriptions/SKILL.md +73 -73
- package/src/ruvocal/.claude-flow/daemon-state.json +135 -0
- package/src/ruvocal/.claude-flow/data/pending-insights.jsonl +0 -0
- package/src/ruvocal/.claude-flow/data/ranked-context.json +5 -0
- package/src/ruvocal/.claude-flow/logs/daemon.log +31 -0
- package/src/ruvocal/.claude-flow/logs/headless/audit_1777949411822_juxau0_prompt.log +989 -0
- package/src/ruvocal/.claude-flow/logs/headless/audit_1777949411822_juxau0_result.log +67 -0
- package/src/ruvocal/.claude-flow/logs/headless/audit_1777950042278_jvj5xq_prompt.log +989 -0
- package/src/ruvocal/.claude-flow/logs/headless/audit_1777950042278_jvj5xq_result.log +93 -0
- package/src/ruvocal/.claude-flow/logs/headless/optimize_1777949531823_yt5yc2_prompt.log +1498 -0
- package/src/ruvocal/.claude-flow/logs/headless/optimize_1777949531823_yt5yc2_result.log +93 -0
- package/src/ruvocal/.claude-flow/logs/headless/testgaps_1777949771821_elw1j4_prompt.log +1498 -0
- package/src/ruvocal/.claude-flow/logs/headless/testgaps_1777949771821_elw1j4_result.log +100 -0
- package/src/ruvocal/.claude-flow/metrics/codebase-map.json +11 -0
- package/src/ruvocal/.claude-flow/metrics/consolidation.json +6 -0
- package/src/ruvocal/.claude-flow/neural/stats.json +6 -0
- package/src/ruvocal/.claude-flow/sessions/current.json +13 -0
- package/src/ruvocal/.devcontainer/Dockerfile +9 -9
- package/src/ruvocal/.devcontainer/devcontainer.json +36 -36
- package/src/ruvocal/.dockerignore +16 -16
- package/src/ruvocal/.eslintignore +13 -13
- package/src/ruvocal/.eslintrc.cjs +45 -45
- package/src/ruvocal/.gcloudignore +18 -18
- package/src/ruvocal/.github/ISSUE_TEMPLATE/bug-report--chat-ui-.md +43 -43
- package/src/ruvocal/.github/ISSUE_TEMPLATE/config-support.md +9 -9
- package/src/ruvocal/.github/ISSUE_TEMPLATE/feature-request--chat-ui-.md +17 -17
- package/src/ruvocal/.github/ISSUE_TEMPLATE/huggingchat.md +11 -11
- package/src/ruvocal/.github/release.yml +16 -16
- package/src/ruvocal/.github/workflows/build-docs.yml +18 -18
- package/src/ruvocal/.github/workflows/build-image.yml +142 -142
- package/src/ruvocal/.github/workflows/build-pr-docs.yml +20 -20
- package/src/ruvocal/.github/workflows/deploy-dev.yml +63 -63
- package/src/ruvocal/.github/workflows/deploy-prod.yml +78 -78
- package/src/ruvocal/.github/workflows/lint-and-test.yml +84 -84
- package/src/ruvocal/.github/workflows/slugify.yaml +72 -72
- package/src/ruvocal/.github/workflows/trufflehog.yml +17 -17
- package/src/ruvocal/.github/workflows/upload-pr-documentation.yml +16 -16
- package/src/ruvocal/.husky/lint-stage-config.js +4 -4
- package/src/ruvocal/.husky/pre-commit +2 -2
- package/src/ruvocal/.prettierignore +14 -14
- package/src/ruvocal/.prettierrc +7 -7
- package/src/ruvocal/.swarm/attestation.db +0 -0
- package/src/ruvocal/.swarm/hnsw.index +0 -0
- package/src/ruvocal/.swarm/hnsw.metadata.json +1 -0
- package/src/ruvocal/.swarm/memory.db +0 -0
- package/src/ruvocal/.swarm/schema.sql +305 -0
- package/src/ruvocal/CLAUDE.md +126 -126
- package/src/ruvocal/Dockerfile +96 -96
- package/src/ruvocal/LICENSE +202 -202
- package/src/ruvocal/PRIVACY.md +41 -41
- package/src/ruvocal/README.md +164 -164
- package/src/ruvocal/chart/Chart.yaml +5 -5
- package/src/ruvocal/chart/env/dev.yaml +260 -260
- package/src/ruvocal/chart/env/prod.yaml +273 -273
- package/src/ruvocal/chart/templates/_helpers.tpl +22 -22
- package/src/ruvocal/chart/templates/config.yaml +10 -10
- package/src/ruvocal/chart/templates/deployment.yaml +81 -81
- package/src/ruvocal/chart/templates/hpa.yaml +45 -45
- package/src/ruvocal/chart/templates/infisical.yaml +24 -24
- package/src/ruvocal/chart/templates/ingress-internal.yaml +32 -32
- package/src/ruvocal/chart/templates/ingress.yaml +32 -32
- package/src/ruvocal/chart/templates/network-policy.yaml +36 -36
- package/src/ruvocal/chart/templates/service-account.yaml +13 -13
- package/src/ruvocal/chart/templates/service-monitor.yaml +17 -17
- package/src/ruvocal/chart/templates/service.yaml +21 -21
- package/src/ruvocal/chart/values.yaml +73 -73
- package/src/ruvocal/cloudbuild.yaml +68 -68
- package/src/ruvocal/config/branding.env.example +19 -19
- package/src/ruvocal/docker-compose.yml +21 -21
- package/src/ruvocal/docs/adr/ADR-029-HUGGINGFACE-CHAT-UI-CLOUD-RUN.md +1236 -1236
- package/src/ruvocal/docs/adr/ADR-033-RUVECTOR-RUFLO-MCP-INTEGRATION.md +111 -111
- package/src/ruvocal/docs/adr/ADR-034-OPTIONAL-MCP-BACKENDS.md +117 -117
- package/src/ruvocal/docs/adr/ADR-035-MCP-TOOL-GROUPS.md +186 -186
- package/src/ruvocal/docs/adr/ADR-037-AUTOPILOT-CHAT-MODE.md +1500 -1500
- package/src/ruvocal/docs/adr/ADR-038-RUVOCAL-FORK.md +286 -286
- package/src/ruvocal/docs/source/_toctree.yml +30 -30
- package/src/ruvocal/docs/source/configuration/common-issues.md +38 -38
- package/src/ruvocal/docs/source/configuration/llm-router.md +105 -105
- package/src/ruvocal/docs/source/configuration/mcp-tools.md +84 -84
- package/src/ruvocal/docs/source/configuration/metrics.md +9 -9
- package/src/ruvocal/docs/source/configuration/open-id.md +57 -57
- package/src/ruvocal/docs/source/configuration/overview.md +89 -89
- package/src/ruvocal/docs/source/configuration/theming.md +20 -20
- package/src/ruvocal/docs/source/developing/architecture.md +48 -48
- package/src/ruvocal/docs/source/index.md +53 -53
- package/src/ruvocal/docs/source/installation/docker.md +43 -43
- package/src/ruvocal/docs/source/installation/helm.md +43 -43
- package/src/ruvocal/docs/source/installation/local.md +62 -62
- package/src/ruvocal/entrypoint.sh +18 -18
- package/src/ruvocal/mcp-bridge/Dockerfile +45 -45
- package/src/ruvocal/mcp-bridge/cloudbuild.yaml +49 -49
- package/src/ruvocal/mcp-bridge/index.js +1902 -1902
- package/src/ruvocal/mcp-bridge/mcp-stdio-kernel.js +159 -159
- package/src/ruvocal/mcp-bridge/package-lock.json +762 -762
- package/src/ruvocal/mcp-bridge/package.json +17 -17
- package/src/ruvocal/mcp-bridge/test-harness.js +470 -470
- package/src/ruvocal/package-lock.json +11741 -11741
- package/src/ruvocal/package.json +121 -121
- package/src/ruvocal/postcss.config.js +6 -6
- package/src/ruvocal/rvf.manifest.json +204 -204
- package/src/ruvocal/scripts/config.ts +64 -64
- package/src/ruvocal/scripts/generate-welcome.mjs +181 -181
- package/src/ruvocal/scripts/populate.ts +288 -288
- package/src/ruvocal/scripts/samples.txt +194 -194
- package/src/ruvocal/scripts/setups/vitest-setup-server.ts +44 -44
- package/src/ruvocal/scripts/updateLocalEnv.ts +48 -48
- package/src/ruvocal/src/ambient.d.ts +7 -7
- package/src/ruvocal/src/app.d.ts +29 -29
- package/src/ruvocal/src/app.html +53 -53
- package/src/ruvocal/src/hooks.server.ts +32 -32
- package/src/ruvocal/src/hooks.ts +6 -6
- package/src/ruvocal/src/lib/APIClient.ts +148 -148
- package/src/ruvocal/src/lib/actions/clickOutside.ts +18 -18
- package/src/ruvocal/src/lib/actions/snapScrollToBottom.ts +346 -346
- package/src/ruvocal/src/lib/buildPrompt.ts +33 -33
- package/src/ruvocal/src/lib/components/AnnouncementBanner.svelte +20 -20
- package/src/ruvocal/src/lib/components/BackgroundGenerationPoller.svelte +168 -168
- package/src/ruvocal/src/lib/components/CodeBlock.svelte +73 -73
- package/src/ruvocal/src/lib/components/CopyToClipBoardBtn.svelte +92 -92
- package/src/ruvocal/src/lib/components/DeleteConversationModal.svelte +75 -75
- package/src/ruvocal/src/lib/components/EditConversationModal.svelte +100 -100
- package/src/ruvocal/src/lib/components/ExpandNavigation.svelte +22 -22
- package/src/ruvocal/src/lib/components/FoundationBackground.svelte +242 -242
- package/src/ruvocal/src/lib/components/HoverTooltip.svelte +44 -44
- package/src/ruvocal/src/lib/components/HtmlPreviewModal.svelte +143 -143
- package/src/ruvocal/src/lib/components/InfiniteScroll.svelte +50 -50
- package/src/ruvocal/src/lib/components/MobileNav.svelte +300 -300
- package/src/ruvocal/src/lib/components/Modal.svelte +115 -115
- package/src/ruvocal/src/lib/components/ModelCardMetadata.svelte +71 -71
- package/src/ruvocal/src/lib/components/NavConversationItem.svelte +151 -151
- package/src/ruvocal/src/lib/components/NavMenu.svelte +313 -313
- package/src/ruvocal/src/lib/components/Pagination.svelte +97 -97
- package/src/ruvocal/src/lib/components/PaginationArrow.svelte +27 -27
- package/src/ruvocal/src/lib/components/Portal.svelte +24 -24
- package/src/ruvocal/src/lib/components/RetryBtn.svelte +18 -18
- package/src/ruvocal/src/lib/components/RuFloUniverse.svelte +185 -185
- package/src/ruvocal/src/lib/components/RufloHelpModal.svelte +411 -411
- package/src/ruvocal/src/lib/components/ScrollToBottomBtn.svelte +47 -47
- package/src/ruvocal/src/lib/components/ScrollToPreviousBtn.svelte +77 -77
- package/src/ruvocal/src/lib/components/ShareConversationModal.svelte +182 -182
- package/src/ruvocal/src/lib/components/StopGeneratingBtn.svelte +69 -69
- package/src/ruvocal/src/lib/components/SubscribeModal.svelte +87 -87
- package/src/ruvocal/src/lib/components/Switch.svelte +36 -36
- package/src/ruvocal/src/lib/components/SystemPromptModal.svelte +44 -44
- package/src/ruvocal/src/lib/components/Toast.svelte +27 -27
- package/src/ruvocal/src/lib/components/Tooltip.svelte +30 -30
- package/src/ruvocal/src/lib/components/WelcomeModal.svelte +46 -46
- package/src/ruvocal/src/lib/components/chat/Alternatives.svelte +77 -77
- package/src/ruvocal/src/lib/components/chat/BlockWrapper.svelte +72 -72
- package/src/ruvocal/src/lib/components/chat/ChatInput.svelte +490 -490
- package/src/ruvocal/src/lib/components/chat/ChatIntroduction.svelte +123 -123
- package/src/ruvocal/src/lib/components/chat/ChatMessage.svelte +548 -548
- package/src/ruvocal/src/lib/components/chat/ChatWindow.svelte +1057 -1057
- package/src/ruvocal/src/lib/components/chat/FileDropzone.svelte +92 -92
- package/src/ruvocal/src/lib/components/chat/ImageLightbox.svelte +66 -66
- package/src/ruvocal/src/lib/components/chat/MarkdownBlock.svelte +23 -23
- package/src/ruvocal/src/lib/components/chat/MarkdownRenderer.svelte +69 -69
- package/src/ruvocal/src/lib/components/chat/MarkdownRenderer.svelte.test.ts +58 -58
- package/src/ruvocal/src/lib/components/chat/MessageAvatar.svelte +103 -103
- package/src/ruvocal/src/lib/components/chat/ModelSwitch.svelte +64 -64
- package/src/ruvocal/src/lib/components/chat/OpenReasoningResults.svelte +81 -81
- package/src/ruvocal/src/lib/components/chat/TaskGroup.svelte +88 -88
- package/src/ruvocal/src/lib/components/chat/ToolUpdate.svelte +273 -273
- package/src/ruvocal/src/lib/components/chat/UploadedFile.svelte +253 -253
- package/src/ruvocal/src/lib/components/chat/UrlFetchModal.svelte +203 -203
- package/src/ruvocal/src/lib/components/chat/VoiceRecorder.svelte +214 -214
- package/src/ruvocal/src/lib/components/icons/IconBurger.svelte +20 -20
- package/src/ruvocal/src/lib/components/icons/IconCheap.svelte +20 -20
- package/src/ruvocal/src/lib/components/icons/IconChevron.svelte +24 -24
- package/src/ruvocal/src/lib/components/icons/IconDazzled.svelte +40 -40
- package/src/ruvocal/src/lib/components/icons/IconFast.svelte +20 -20
- package/src/ruvocal/src/lib/components/icons/IconLoading.svelte +22 -22
- package/src/ruvocal/src/lib/components/icons/IconMCP.svelte +28 -28
- package/src/ruvocal/src/lib/components/icons/IconMoon.svelte +21 -21
- package/src/ruvocal/src/lib/components/icons/IconNew.svelte +20 -20
- package/src/ruvocal/src/lib/components/icons/IconOmni.svelte +90 -90
- package/src/ruvocal/src/lib/components/icons/IconPaperclip.svelte +24 -24
- package/src/ruvocal/src/lib/components/icons/IconPro.svelte +37 -37
- package/src/ruvocal/src/lib/components/icons/IconShare.svelte +21 -21
- package/src/ruvocal/src/lib/components/icons/IconSun.svelte +93 -93
- package/src/ruvocal/src/lib/components/icons/Logo.svelte +68 -68
- package/src/ruvocal/src/lib/components/icons/LogoHuggingFaceBorderless.svelte +54 -54
- package/src/ruvocal/src/lib/components/mcp/AddServerForm.svelte +250 -250
- package/src/ruvocal/src/lib/components/mcp/MCPServerManager.svelte +185 -185
- package/src/ruvocal/src/lib/components/mcp/ServerCard.svelte +203 -203
- package/src/ruvocal/src/lib/components/players/AudioPlayer.svelte +82 -82
- package/src/ruvocal/src/lib/components/voice/AudioWaveform.svelte +96 -96
- package/src/ruvocal/src/lib/components/wasm/GalleryPanel.svelte +357 -357
- package/src/ruvocal/src/lib/constants/mcpExamples.ts +114 -114
- package/src/ruvocal/src/lib/constants/mime.ts +11 -11
- package/src/ruvocal/src/lib/constants/pagination.ts +1 -1
- package/src/ruvocal/src/lib/constants/publicSepToken.ts +1 -1
- package/src/ruvocal/src/lib/constants/routerExamples.ts +133 -133
- package/src/ruvocal/src/lib/constants/rvagentPresets.ts +206 -206
- package/src/ruvocal/src/lib/createShareLink.ts +27 -27
- package/src/ruvocal/src/lib/jobs/refresh-conversation-stats.ts +297 -297
- package/src/ruvocal/src/lib/migrations/lock.ts +56 -56
- package/src/ruvocal/src/lib/migrations/migrations.spec.ts +74 -74
- package/src/ruvocal/src/lib/migrations/migrations.ts +109 -109
- package/src/ruvocal/src/lib/migrations/routines/01-update-search-assistants.ts +50 -50
- package/src/ruvocal/src/lib/migrations/routines/02-update-assistants-models.ts +48 -48
- package/src/ruvocal/src/lib/migrations/routines/04-update-message-updates.ts +151 -151
- package/src/ruvocal/src/lib/migrations/routines/05-update-message-files.ts +56 -56
- package/src/ruvocal/src/lib/migrations/routines/06-trim-message-updates.ts +56 -56
- package/src/ruvocal/src/lib/migrations/routines/08-update-featured-to-review.ts +32 -32
- package/src/ruvocal/src/lib/migrations/routines/09-delete-empty-conversations.spec.ts +214 -214
- package/src/ruvocal/src/lib/migrations/routines/09-delete-empty-conversations.ts +88 -88
- package/src/ruvocal/src/lib/migrations/routines/10-update-reports-assistantid.ts +29 -29
- package/src/ruvocal/src/lib/migrations/routines/index.ts +15 -15
- package/src/ruvocal/src/lib/server/__tests__/conversation-stop-generating.spec.ts +103 -103
- package/src/ruvocal/src/lib/server/abortRegistry.ts +57 -57
- package/src/ruvocal/src/lib/server/abortedGenerations.ts +43 -43
- package/src/ruvocal/src/lib/server/adminToken.ts +62 -62
- package/src/ruvocal/src/lib/server/api/__tests__/conversations-id.spec.ts +296 -296
- package/src/ruvocal/src/lib/server/api/__tests__/conversations-message.spec.ts +216 -216
- package/src/ruvocal/src/lib/server/api/__tests__/conversations.spec.ts +235 -235
- package/src/ruvocal/src/lib/server/api/__tests__/misc.spec.ts +72 -72
- package/src/ruvocal/src/lib/server/api/__tests__/testHelpers.ts +86 -86
- package/src/ruvocal/src/lib/server/api/__tests__/user-reports.spec.ts +78 -78
- package/src/ruvocal/src/lib/server/api/__tests__/user.spec.ts +239 -239
- package/src/ruvocal/src/lib/server/api/types.ts +37 -37
- package/src/ruvocal/src/lib/server/api/utils/requireAuth.ts +22 -22
- package/src/ruvocal/src/lib/server/api/utils/resolveConversation.ts +69 -69
- package/src/ruvocal/src/lib/server/api/utils/resolveModel.ts +27 -27
- package/src/ruvocal/src/lib/server/api/utils/superjsonResponse.ts +15 -15
- package/src/ruvocal/src/lib/server/apiToken.ts +11 -11
- package/src/ruvocal/src/lib/server/auth.ts +554 -554
- package/src/ruvocal/src/lib/server/config.ts +187 -187
- package/src/ruvocal/src/lib/server/conversation.ts +83 -83
- package/src/ruvocal/src/lib/server/database/__tests__/rvf.spec.ts +709 -709
- package/src/ruvocal/src/lib/server/database/postgres.ts +700 -700
- package/src/ruvocal/src/lib/server/database/rvf.ts +1078 -1078
- package/src/ruvocal/src/lib/server/database.ts +145 -145
- package/src/ruvocal/src/lib/server/endpoints/document.ts +68 -68
- package/src/ruvocal/src/lib/server/endpoints/endpoints.ts +43 -43
- package/src/ruvocal/src/lib/server/endpoints/images.ts +211 -211
- package/src/ruvocal/src/lib/server/endpoints/openai/endpointOai.ts +266 -266
- package/src/ruvocal/src/lib/server/endpoints/openai/openAIChatToTextGenerationStream.ts +212 -212
- package/src/ruvocal/src/lib/server/endpoints/openai/openAICompletionToTextGenerationStream.ts +32 -32
- package/src/ruvocal/src/lib/server/endpoints/preprocessMessages.ts +61 -61
- package/src/ruvocal/src/lib/server/exitHandler.ts +59 -59
- package/src/ruvocal/src/lib/server/files/downloadFile.ts +34 -34
- package/src/ruvocal/src/lib/server/files/uploadFile.ts +29 -29
- package/src/ruvocal/src/lib/server/findRepoRoot.ts +13 -13
- package/src/ruvocal/src/lib/server/generateFromDefaultEndpoint.ts +46 -46
- package/src/ruvocal/src/lib/server/hooks/error.ts +37 -37
- package/src/ruvocal/src/lib/server/hooks/fetch.ts +22 -22
- package/src/ruvocal/src/lib/server/hooks/handle.ts +250 -250
- package/src/ruvocal/src/lib/server/hooks/init.ts +51 -51
- package/src/ruvocal/src/lib/server/isURLLocal.spec.ts +31 -31
- package/src/ruvocal/src/lib/server/isURLLocal.ts +74 -74
- package/src/ruvocal/src/lib/server/logger.ts +42 -42
- package/src/ruvocal/src/lib/server/mcp/clientPool.spec.ts +175 -175
- package/src/ruvocal/src/lib/server/mcp/hf.ts +32 -32
- package/src/ruvocal/src/lib/server/mcp/httpClient.ts +122 -122
- package/src/ruvocal/src/lib/server/mcp/registry.ts +76 -76
- package/src/ruvocal/src/lib/server/mcp/tools.ts +196 -196
- package/src/ruvocal/src/lib/server/metrics.ts +255 -255
- package/src/ruvocal/src/lib/server/models.ts +518 -518
- package/src/ruvocal/src/lib/server/requestContext.ts +55 -55
- package/src/ruvocal/src/lib/server/router/arch.ts +230 -230
- package/src/ruvocal/src/lib/server/router/endpoint.ts +316 -316
- package/src/ruvocal/src/lib/server/router/multimodal.ts +28 -28
- package/src/ruvocal/src/lib/server/router/policy.ts +49 -49
- package/src/ruvocal/src/lib/server/router/toolsRoute.ts +51 -51
- package/src/ruvocal/src/lib/server/router/types.ts +21 -21
- package/src/ruvocal/src/lib/server/sendSlack.ts +23 -23
- package/src/ruvocal/src/lib/server/textGeneration/generate.ts +258 -258
- package/src/ruvocal/src/lib/server/textGeneration/index.ts +96 -96
- package/src/ruvocal/src/lib/server/textGeneration/mcp/fileRefs.ts +155 -155
- package/src/ruvocal/src/lib/server/textGeneration/mcp/routerResolution.ts +108 -108
- package/src/ruvocal/src/lib/server/textGeneration/mcp/runMcpFlow.ts +831 -831
- package/src/ruvocal/src/lib/server/textGeneration/mcp/toolInvocation.ts +349 -349
- package/src/ruvocal/src/lib/server/textGeneration/mcp/wasmTools.test.ts +633 -633
- package/src/ruvocal/src/lib/server/textGeneration/reasoning.ts +23 -23
- package/src/ruvocal/src/lib/server/textGeneration/title.ts +83 -83
- package/src/ruvocal/src/lib/server/textGeneration/types.ts +28 -28
- package/src/ruvocal/src/lib/server/textGeneration/utils/prepareFiles.ts +88 -88
- package/src/ruvocal/src/lib/server/textGeneration/utils/routing.ts +21 -21
- package/src/ruvocal/src/lib/server/textGeneration/utils/toolPrompt.ts +49 -49
- package/src/ruvocal/src/lib/server/urlSafety.ts +77 -77
- package/src/ruvocal/src/lib/server/usageLimits.ts +30 -30
- package/src/ruvocal/src/lib/stores/autopilotStore.svelte.ts +175 -175
- package/src/ruvocal/src/lib/stores/backgroundGenerations.svelte.ts +32 -32
- package/src/ruvocal/src/lib/stores/backgroundGenerations.ts +1 -1
- package/src/ruvocal/src/lib/stores/errors.ts +9 -9
- package/src/ruvocal/src/lib/stores/isAborted.ts +3 -3
- package/src/ruvocal/src/lib/stores/isPro.ts +4 -4
- package/src/ruvocal/src/lib/stores/loading.ts +3 -3
- package/src/ruvocal/src/lib/stores/mcpServers.ts +534 -534
- package/src/ruvocal/src/lib/stores/pendingChatInput.ts +3 -3
- package/src/ruvocal/src/lib/stores/pendingMessage.ts +9 -9
- package/src/ruvocal/src/lib/stores/settings.ts +182 -182
- package/src/ruvocal/src/lib/stores/shareModal.ts +13 -13
- package/src/ruvocal/src/lib/stores/titleUpdate.ts +8 -8
- package/src/ruvocal/src/lib/stores/wasmMcp.ts +472 -472
- package/src/ruvocal/src/lib/switchTheme.ts +124 -124
- package/src/ruvocal/src/lib/types/AbortedGeneration.ts +8 -8
- package/src/ruvocal/src/lib/types/Assistant.ts +31 -31
- package/src/ruvocal/src/lib/types/AssistantStats.ts +11 -11
- package/src/ruvocal/src/lib/types/ConfigKey.ts +4 -4
- package/src/ruvocal/src/lib/types/ConvSidebar.ts +9 -9
- package/src/ruvocal/src/lib/types/Conversation.ts +27 -27
- package/src/ruvocal/src/lib/types/ConversationStats.ts +13 -13
- package/src/ruvocal/src/lib/types/Message.ts +41 -41
- package/src/ruvocal/src/lib/types/MessageEvent.ts +10 -10
- package/src/ruvocal/src/lib/types/MessageUpdate.ts +139 -139
- package/src/ruvocal/src/lib/types/MigrationResult.ts +7 -7
- package/src/ruvocal/src/lib/types/Model.ts +23 -23
- package/src/ruvocal/src/lib/types/Report.ts +12 -12
- package/src/ruvocal/src/lib/types/Review.ts +6 -6
- package/src/ruvocal/src/lib/types/Semaphore.ts +19 -19
- package/src/ruvocal/src/lib/types/Session.ts +22 -22
- package/src/ruvocal/src/lib/types/Settings.ts +93 -93
- package/src/ruvocal/src/lib/types/SharedConversation.ts +9 -9
- package/src/ruvocal/src/lib/types/Template.ts +6 -6
- package/src/ruvocal/src/lib/types/Timestamps.ts +4 -4
- package/src/ruvocal/src/lib/types/TokenCache.ts +6 -6
- package/src/ruvocal/src/lib/types/Tool.ts +77 -77
- package/src/ruvocal/src/lib/types/UrlDependency.ts +5 -5
- package/src/ruvocal/src/lib/types/User.ts +14 -14
- package/src/ruvocal/src/lib/utils/PublicConfig.svelte.ts +75 -75
- package/src/ruvocal/src/lib/utils/auth.ts +17 -17
- package/src/ruvocal/src/lib/utils/chunk.ts +33 -33
- package/src/ruvocal/src/lib/utils/cookiesAreEnabled.ts +13 -13
- package/src/ruvocal/src/lib/utils/debounce.ts +17 -17
- package/src/ruvocal/src/lib/utils/deepestChild.ts +6 -6
- package/src/ruvocal/src/lib/utils/favicon.ts +21 -21
- package/src/ruvocal/src/lib/utils/fetchJSON.ts +23 -23
- package/src/ruvocal/src/lib/utils/file2base64.ts +14 -14
- package/src/ruvocal/src/lib/utils/formatUserCount.ts +37 -37
- package/src/ruvocal/src/lib/utils/generationState.spec.ts +75 -75
- package/src/ruvocal/src/lib/utils/generationState.ts +26 -26
- package/src/ruvocal/src/lib/utils/getHref.ts +41 -41
- package/src/ruvocal/src/lib/utils/getReturnFromGenerator.ts +7 -7
- package/src/ruvocal/src/lib/utils/haptics.ts +64 -64
- package/src/ruvocal/src/lib/utils/hashConv.ts +12 -12
- package/src/ruvocal/src/lib/utils/hf.ts +17 -17
- package/src/ruvocal/src/lib/utils/isDesktop.ts +7 -7
- package/src/ruvocal/src/lib/utils/isUrl.ts +8 -8
- package/src/ruvocal/src/lib/utils/isVirtualKeyboard.ts +16 -16
- package/src/ruvocal/src/lib/utils/loadAttachmentsFromUrls.ts +115 -115
- package/src/ruvocal/src/lib/utils/marked.spec.ts +96 -96
- package/src/ruvocal/src/lib/utils/marked.ts +531 -531
- package/src/ruvocal/src/lib/utils/mcpValidation.ts +147 -147
- package/src/ruvocal/src/lib/utils/mergeAsyncGenerators.ts +38 -38
- package/src/ruvocal/src/lib/utils/messageUpdates.spec.ts +262 -262
- package/src/ruvocal/src/lib/utils/messageUpdates.ts +324 -324
- package/src/ruvocal/src/lib/utils/mime.ts +56 -56
- package/src/ruvocal/src/lib/utils/models.ts +14 -14
- package/src/ruvocal/src/lib/utils/parseBlocks.ts +120 -120
- package/src/ruvocal/src/lib/utils/parseIncompleteMarkdown.ts +644 -644
- package/src/ruvocal/src/lib/utils/parseStringToList.ts +10 -10
- package/src/ruvocal/src/lib/utils/randomUuid.ts +14 -14
- package/src/ruvocal/src/lib/utils/searchTokens.ts +33 -33
- package/src/ruvocal/src/lib/utils/sha256.ts +7 -7
- package/src/ruvocal/src/lib/utils/stringifyError.ts +12 -12
- package/src/ruvocal/src/lib/utils/sum.ts +3 -3
- package/src/ruvocal/src/lib/utils/template.spec.ts +59 -59
- package/src/ruvocal/src/lib/utils/template.ts +53 -53
- package/src/ruvocal/src/lib/utils/timeout.ts +9 -9
- package/src/ruvocal/src/lib/utils/toolProgress.spec.ts +46 -46
- package/src/ruvocal/src/lib/utils/toolProgress.ts +11 -11
- package/src/ruvocal/src/lib/utils/tree/addChildren.spec.ts +102 -102
- package/src/ruvocal/src/lib/utils/tree/addChildren.ts +48 -48
- package/src/ruvocal/src/lib/utils/tree/addSibling.spec.ts +81 -81
- package/src/ruvocal/src/lib/utils/tree/addSibling.ts +41 -41
- package/src/ruvocal/src/lib/utils/tree/buildSubtree.spec.ts +110 -110
- package/src/ruvocal/src/lib/utils/tree/buildSubtree.ts +24 -24
- package/src/ruvocal/src/lib/utils/tree/convertLegacyConversation.spec.ts +31 -31
- package/src/ruvocal/src/lib/utils/tree/convertLegacyConversation.ts +36 -36
- package/src/ruvocal/src/lib/utils/tree/isMessageId.spec.ts +15 -15
- package/src/ruvocal/src/lib/utils/tree/isMessageId.ts +5 -5
- package/src/ruvocal/src/lib/utils/tree/tree.d.ts +14 -14
- package/src/ruvocal/src/lib/utils/tree/treeHelpers.spec.ts +167 -167
- package/src/ruvocal/src/lib/utils/updates.ts +39 -39
- package/src/ruvocal/src/lib/utils/urlParams.ts +13 -13
- package/src/ruvocal/src/lib/wasm/idb.ts +438 -438
- package/src/ruvocal/src/lib/wasm/index.ts +1213 -1213
- package/src/ruvocal/src/lib/wasm/tests/wasm-capabilities.test.ts +565 -565
- package/src/ruvocal/src/lib/wasm/wasm.worker.ts +332 -332
- package/src/ruvocal/src/lib/wasm/workerClient.ts +166 -166
- package/src/ruvocal/src/lib/workers/autopilotWorker.ts +221 -221
- package/src/ruvocal/src/lib/workers/detailFetchWorker.ts +100 -100
- package/src/ruvocal/src/lib/workers/markdownWorker.ts +61 -61
- package/src/ruvocal/src/routes/+error.svelte +20 -20
- package/src/ruvocal/src/routes/+layout.svelte +324 -324
- package/src/ruvocal/src/routes/+layout.ts +91 -91
- package/src/ruvocal/src/routes/+page.svelte +168 -168
- package/src/ruvocal/src/routes/.well-known/oauth-cimd/+server.ts +37 -37
- package/src/ruvocal/src/routes/__debug/openai/+server.ts +21 -21
- package/src/ruvocal/src/routes/admin/export/+server.ts +159 -159
- package/src/ruvocal/src/routes/admin/stats/compute/+server.ts +16 -16
- package/src/ruvocal/src/routes/api/conversation/[id]/+server.ts +40 -40
- package/src/ruvocal/src/routes/api/conversation/[id]/message/[messageId]/+server.ts +42 -42
- package/src/ruvocal/src/routes/api/conversations/+server.ts +48 -48
- package/src/ruvocal/src/routes/api/fetch-url/+server.ts +147 -147
- package/src/ruvocal/src/routes/api/mcp/health/+server.ts +292 -292
- package/src/ruvocal/src/routes/api/mcp/servers/+server.ts +32 -32
- package/src/ruvocal/src/routes/api/models/+server.ts +25 -25
- package/src/ruvocal/src/routes/api/transcribe/+server.ts +104 -104
- package/src/ruvocal/src/routes/api/user/+server.ts +15 -15
- package/src/ruvocal/src/routes/api/user/validate-token/+server.ts +20 -20
- package/src/ruvocal/src/routes/api/v2/conversations/+server.ts +48 -48
- package/src/ruvocal/src/routes/api/v2/conversations/[id]/+server.ts +94 -94
- package/src/ruvocal/src/routes/api/v2/conversations/[id]/message/[messageId]/+server.ts +43 -43
- package/src/ruvocal/src/routes/api/v2/conversations/import-share/+server.ts +23 -23
- package/src/ruvocal/src/routes/api/v2/debug/config/+server.ts +16 -16
- package/src/ruvocal/src/routes/api/v2/debug/refresh/+server.ts +30 -30
- package/src/ruvocal/src/routes/api/v2/export/+server.ts +196 -196
- package/src/ruvocal/src/routes/api/v2/feature-flags/+server.ts +14 -14
- package/src/ruvocal/src/routes/api/v2/models/+server.ts +38 -38
- package/src/ruvocal/src/routes/api/v2/models/[namespace]/+server.ts +8 -8
- package/src/ruvocal/src/routes/api/v2/models/[namespace]/[model]/+server.ts +8 -8
- package/src/ruvocal/src/routes/api/v2/models/[namespace]/[model]/subscribe/+server.ts +28 -28
- package/src/ruvocal/src/routes/api/v2/models/[namespace]/subscribe/+server.ts +28 -28
- package/src/ruvocal/src/routes/api/v2/models/old/+server.ts +7 -7
- package/src/ruvocal/src/routes/api/v2/models/refresh/+server.ts +33 -33
- package/src/ruvocal/src/routes/api/v2/public-config/+server.ts +7 -7
- package/src/ruvocal/src/routes/api/v2/user/+server.ts +17 -17
- package/src/ruvocal/src/routes/api/v2/user/billing-orgs/+server.ts +73 -73
- package/src/ruvocal/src/routes/api/v2/user/reports/+server.ts +17 -17
- package/src/ruvocal/src/routes/api/v2/user/settings/+server.ts +110 -110
- package/src/ruvocal/src/routes/conversation/+server.ts +115 -115
- package/src/ruvocal/src/routes/conversation/[id]/+page.svelte +586 -586
- package/src/ruvocal/src/routes/conversation/[id]/+page.ts +60 -60
- package/src/ruvocal/src/routes/conversation/[id]/+server.ts +740 -740
- package/src/ruvocal/src/routes/conversation/[id]/message/[messageId]/prompt/+server.ts +66 -66
- package/src/ruvocal/src/routes/conversation/[id]/share/+server.ts +69 -69
- package/src/ruvocal/src/routes/conversation/[id]/stop-generating/+server.ts +35 -35
- package/src/ruvocal/src/routes/healthcheck/+server.ts +3 -3
- package/src/ruvocal/src/routes/login/+server.ts +5 -5
- package/src/ruvocal/src/routes/login/callback/+server.ts +103 -103
- package/src/ruvocal/src/routes/login/callback/updateUser.spec.ts +157 -157
- package/src/ruvocal/src/routes/login/callback/updateUser.ts +215 -215
- package/src/ruvocal/src/routes/logout/+server.ts +18 -18
- package/src/ruvocal/src/routes/metrics/+server.ts +18 -18
- package/src/ruvocal/src/routes/models/+page.svelte +233 -233
- package/src/ruvocal/src/routes/models/[...model]/+page.svelte +161 -161
- package/src/ruvocal/src/routes/models/[...model]/+page.ts +14 -14
- package/src/ruvocal/src/routes/models/[...model]/thumbnail.png/+server.ts +64 -64
- package/src/ruvocal/src/routes/models/[...model]/thumbnail.png/ModelThumbnail.svelte +28 -28
- package/src/ruvocal/src/routes/privacy/+page.svelte +11 -11
- package/src/ruvocal/src/routes/r/[id]/+page.ts +34 -34
- package/src/ruvocal/src/routes/settings/(nav)/+layout.svelte +282 -282
- package/src/ruvocal/src/routes/settings/(nav)/+layout.ts +1 -1
- package/src/ruvocal/src/routes/settings/(nav)/+server.ts +59 -59
- package/src/ruvocal/src/routes/settings/(nav)/[...model]/+page.svelte +464 -464
- package/src/ruvocal/src/routes/settings/(nav)/[...model]/+page.ts +14 -14
- package/src/ruvocal/src/routes/settings/(nav)/application/+page.svelte +362 -362
- package/src/ruvocal/src/routes/settings/+layout.svelte +40 -40
- package/src/ruvocal/src/styles/highlight-js.css +195 -195
- package/src/ruvocal/src/styles/main.css +144 -144
- package/src/ruvocal/static/chatui/favicon-dark.svg +3 -3
- package/src/ruvocal/static/chatui/favicon-dev.svg +3 -3
- package/src/ruvocal/static/chatui/favicon.svg +3 -3
- package/src/ruvocal/static/chatui/icon.svg +3 -3
- package/src/ruvocal/static/chatui/logo.svg +7 -7
- package/src/ruvocal/static/chatui/manifest.json +54 -54
- package/src/ruvocal/static/chatui/welcome.js +184 -184
- package/src/ruvocal/static/huggingchat/favicon-dark.svg +4 -4
- package/src/ruvocal/static/huggingchat/favicon-dev.svg +4 -4
- package/src/ruvocal/static/huggingchat/favicon.svg +4 -4
- package/src/ruvocal/static/huggingchat/fulltext-logo.svg +1 -1
- package/src/ruvocal/static/huggingchat/icon.svg +4 -4
- package/src/ruvocal/static/huggingchat/logo.svg +4 -4
- package/src/ruvocal/static/huggingchat/manifest.json +54 -54
- package/src/ruvocal/static/huggingchat/routes.chat.json +226 -226
- package/src/ruvocal/static/robots.txt +10 -10
- package/src/ruvocal/static/wasm/rvagent_wasm.js +1539 -1539
- package/src/ruvocal/stub/@reflink/reflink/package.json +5 -5
- package/src/ruvocal/svelte.config.js +53 -53
- package/src/ruvocal/tailwind.config.cjs +30 -30
- package/src/ruvocal/tsconfig.json +19 -19
- package/src/ruvocal/vite.config.ts +87 -87
- package/src/scripts/deploy.sh +116 -116
- package/src/scripts/generate-config.js +245 -245
- package/src/scripts/generate-welcome.js +187 -187
- package/src/scripts/package-rvf.sh +116 -116
|
@@ -1,186 +1,186 @@
|
|
|
1
|
-
# ADR-035: MCP Tool Groups — Modular Tool Organization
|
|
2
|
-
|
|
3
|
-
**Status:** Accepted
|
|
4
|
-
**Date:** 2026-03-05
|
|
5
|
-
**Supersedes:** ADR-033, ADR-034
|
|
6
|
-
|
|
7
|
-
## Context
|
|
8
|
-
|
|
9
|
-
The MCP bridge grew to 331+ tools from multiple backends (ruvector, ruflo, agentic-flow, Claude Code, Gemini, Codex). Exposing all tools simultaneously caused:
|
|
10
|
-
|
|
11
|
-
1. **Context flooding** — AI models struggle to select the right tool from 300+ options
|
|
12
|
-
2. **Startup overhead** — loading all backends when only a subset is needed
|
|
13
|
-
3. **No discoverability** — the AI had no structured way to learn about available capabilities
|
|
14
|
-
|
|
15
|
-
## Decision
|
|
16
|
-
|
|
17
|
-
Reorganize all tools into **12 logical groups** that can be independently enabled/disabled via `MCP_GROUP_*` environment variables. Add a built-in `guidance` tool that provides structured instructions to the AI about available capabilities.
|
|
18
|
-
|
|
19
|
-
### Tool Groups
|
|
20
|
-
|
|
21
|
-
| Group | Source | Tools | Default | Env Var |
|
|
22
|
-
|-------|--------|-------|---------|---------|
|
|
23
|
-
| **core** | built-in | search, web_research, guidance | always on | — |
|
|
24
|
-
| **intelligence** | ruvector | ~10 | enabled | `MCP_GROUP_INTELLIGENCE` |
|
|
25
|
-
| **agents** | ruflo | ~50 | enabled | `MCP_GROUP_AGENTS` |
|
|
26
|
-
| **memory** | ruflo | ~25 | enabled | `MCP_GROUP_MEMORY` |
|
|
27
|
-
| **devtools** | ruflo | ~60 | enabled | `MCP_GROUP_DEVTOOLS` |
|
|
28
|
-
| **security** | ruflo | ~25 | disabled | `MCP_GROUP_SECURITY` |
|
|
29
|
-
| **browser** | ruflo | ~23 | disabled | `MCP_GROUP_BROWSER` |
|
|
30
|
-
| **neural** | ruflo | ~20 | disabled | `MCP_GROUP_NEURAL` |
|
|
31
|
-
| **agentic-flow** | agentic-flow@alpha | 15 | disabled | `MCP_GROUP_AGENTIC_FLOW` |
|
|
32
|
-
| **claude-code** | claude mcp serve | varies | disabled | `MCP_GROUP_CLAUDE_CODE` |
|
|
33
|
-
| **gemini** | gemini-mcp-server | varies | disabled | `MCP_GROUP_GEMINI` |
|
|
34
|
-
| **codex** | @openai/codex | varies | disabled | `MCP_GROUP_CODEX` |
|
|
35
|
-
|
|
36
|
-
### Architecture
|
|
37
|
-
|
|
38
|
-
```
|
|
39
|
-
┌─────────────────────────────────────────────────────────┐
|
|
40
|
-
│ HF Chat UI → /mcp │
|
|
41
|
-
└─────────────┬───────────────────────────────────────────┘
|
|
42
|
-
▼
|
|
43
|
-
┌─────────────────────────────────────────────────────────┐
|
|
44
|
-
│ MCP Bridge v2.0.0 │
|
|
45
|
-
│ │
|
|
46
|
-
│ ┌─────────────────────────────────────────────────┐ │
|
|
47
|
-
│ │ TOOL GROUP FILTER │ │
|
|
48
|
-
│ │ MCP_GROUP_INTELLIGENCE=true → include │ │
|
|
49
|
-
│ │ MCP_GROUP_AGENTS=true → include │ │
|
|
50
|
-
│ │ MCP_GROUP_BROWSER=false → exclude │ │
|
|
51
|
-
│ │ MCP_GROUP_NEURAL=false → exclude │ │
|
|
52
|
-
│ └─────────────────────────────────────────────────┘ │
|
|
53
|
-
│ ▼ ▼ ▼ │
|
|
54
|
-
│ ┌──────────┐ ┌──────────────┐ ┌─────────────────┐ │
|
|
55
|
-
│ │ ruvector │ │ ruflo │ │ agentic-flow │ │
|
|
56
|
-
│ │ (stdio) │ │ (stdio) │ │ (stdio) │ │
|
|
57
|
-
│ └──────────┘ └──────────────┘ └─────────────────┘ │
|
|
58
|
-
│ │
|
|
59
|
-
│ Optional (disabled by default): │
|
|
60
|
-
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
|
|
61
|
-
│ │ Claude │ │ Gemini │ │ Codex │ │
|
|
62
|
-
│ └──────────┘ └──────────┘ └──────────┘ │
|
|
63
|
-
└─────────────────────────────────────────────────────────┘
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
### Group Filtering
|
|
67
|
-
|
|
68
|
-
Tools from external backends are filtered by matching their original tool name against group prefix patterns:
|
|
69
|
-
|
|
70
|
-
```javascript
|
|
71
|
-
// Group definition
|
|
72
|
-
agents: {
|
|
73
|
-
source: "ruflo",
|
|
74
|
-
prefixes: ["agent_", "swarm_", "task_", "session_", "hive-mind_", "workflow_", "coordination_"],
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
// ruflo tool "agent_spawn" → matches "agent_" prefix → included if agents group enabled
|
|
78
|
-
// ruflo tool "browser_open" → matches "browser_" prefix → only if browser group enabled
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
A backend is only started if at least one of its groups is enabled. This means disabling all ruflo groups prevents the ruflo process from spawning entirely.
|
|
82
|
-
|
|
83
|
-
### Guidance Tool
|
|
84
|
-
|
|
85
|
-
The `guidance` tool replaces the old `system_guide`. It provides structured, AI-optimized instructions:
|
|
86
|
-
|
|
87
|
-
```
|
|
88
|
-
guidance(topic="overview") → capabilities summary + decision guide
|
|
89
|
-
guidance(topic="groups") → table of all groups with status
|
|
90
|
-
guidance(topic="agents") → detailed usage for the agents group
|
|
91
|
-
guidance(topic="tool", tool_name="ruflo__memory_search") → specific tool docs
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
The system prompt instructs the AI to call `guidance` when:
|
|
95
|
-
- Unsure which tool to use
|
|
96
|
-
- User asks "what can you do?"
|
|
97
|
-
- Needs to learn a specific tool group before using it
|
|
98
|
-
|
|
99
|
-
### Agentic-Flow Integration
|
|
100
|
-
|
|
101
|
-
`agentic-flow@alpha` (npm package) provides 15 tools:
|
|
102
|
-
|
|
103
|
-
| Tool | Description |
|
|
104
|
-
|------|-------------|
|
|
105
|
-
| `agentic_flow_agent` | Execute any of 66+ specialized agents |
|
|
106
|
-
| `agentic_flow_list_agents` | List available agent types |
|
|
107
|
-
| `agentic_flow_create_agent` | Create custom agents |
|
|
108
|
-
| `agentic_flow_list_all_agents` | List with sources |
|
|
109
|
-
| `agentic_flow_agent_info` | Get agent details |
|
|
110
|
-
| `agentic_flow_check_conflicts` | Agent conflict detection |
|
|
111
|
-
| `agentic_flow_optimize_model` | Auto-select best model |
|
|
112
|
-
| `agent_booster_edit_file` | 352x faster code editing |
|
|
113
|
-
| `agent_booster_batch_edit` | Multi-file refactoring |
|
|
114
|
-
| `agent_booster_parse_markdown` | LLM output parsing |
|
|
115
|
-
| `agentdb_stats` | Database statistics |
|
|
116
|
-
| `agentdb_pattern_store` | Store reasoning patterns |
|
|
117
|
-
| `agentdb_pattern_search` | Search similar patterns |
|
|
118
|
-
| `agentdb_pattern_stats` | Pattern analytics |
|
|
119
|
-
| `agentdb_clear_cache` | Clear query cache |
|
|
120
|
-
|
|
121
|
-
## Configuration Examples
|
|
122
|
-
|
|
123
|
-
### Minimal (research assistant)
|
|
124
|
-
```env
|
|
125
|
-
MCP_GROUP_INTELLIGENCE=false
|
|
126
|
-
MCP_GROUP_AGENTS=false
|
|
127
|
-
MCP_GROUP_MEMORY=false
|
|
128
|
-
MCP_GROUP_DEVTOOLS=false
|
|
129
|
-
# Only core tools: search, web_research, guidance
|
|
130
|
-
```
|
|
131
|
-
|
|
132
|
-
### Developer workstation
|
|
133
|
-
```env
|
|
134
|
-
MCP_GROUP_INTELLIGENCE=true
|
|
135
|
-
MCP_GROUP_AGENTS=true
|
|
136
|
-
MCP_GROUP_MEMORY=true
|
|
137
|
-
MCP_GROUP_DEVTOOLS=true
|
|
138
|
-
MCP_GROUP_AGENTIC_FLOW=true # agent execution + boosted editing
|
|
139
|
-
```
|
|
140
|
-
|
|
141
|
-
### Full capabilities
|
|
142
|
-
```env
|
|
143
|
-
MCP_GROUP_INTELLIGENCE=true
|
|
144
|
-
MCP_GROUP_AGENTS=true
|
|
145
|
-
MCP_GROUP_MEMORY=true
|
|
146
|
-
MCP_GROUP_DEVTOOLS=true
|
|
147
|
-
MCP_GROUP_SECURITY=true
|
|
148
|
-
MCP_GROUP_BROWSER=true
|
|
149
|
-
MCP_GROUP_NEURAL=true
|
|
150
|
-
MCP_GROUP_AGENTIC_FLOW=true
|
|
151
|
-
MCP_GROUP_CLAUDE_CODE=true
|
|
152
|
-
MCP_GROUP_GEMINI=true
|
|
153
|
-
MCP_GROUP_CODEX=true
|
|
154
|
-
ANTHROPIC_API_KEY=sk-ant-...
|
|
155
|
-
```
|
|
156
|
-
|
|
157
|
-
## API Endpoints
|
|
158
|
-
|
|
159
|
-
| Endpoint | Method | Description |
|
|
160
|
-
|----------|--------|-------------|
|
|
161
|
-
| `/health` | GET | System health with group status |
|
|
162
|
-
| `/groups` | GET | Detailed group info with tool counts |
|
|
163
|
-
| `/models` | GET | Available LLM models |
|
|
164
|
-
| `/mcp` | POST | MCP JSON-RPC (tools/list, tools/call) |
|
|
165
|
-
|
|
166
|
-
## Consequences
|
|
167
|
-
|
|
168
|
-
### Positive
|
|
169
|
-
- AI sees only relevant tools (20-50 instead of 300+), improving tool selection accuracy
|
|
170
|
-
- Unused backends don't start, saving memory and CPU
|
|
171
|
-
- `guidance` tool provides structured discoverability
|
|
172
|
-
- Groups can be mixed and matched per deployment
|
|
173
|
-
- New backends/groups can be added without touching existing code
|
|
174
|
-
|
|
175
|
-
### Negative
|
|
176
|
-
- Some tools appear in multiple potential groups (e.g., ruflo `hooks_*` in both intelligence and devtools) — resolved by prefix matching
|
|
177
|
-
- Group boundaries are somewhat arbitrary for the ruflo "Uncategorized" tools
|
|
178
|
-
|
|
179
|
-
### Mitigations
|
|
180
|
-
- `guidance` tool helps AI navigate regardless of how tools are grouped
|
|
181
|
-
- `/groups` endpoint lets operators inspect what's actually active
|
|
182
|
-
|
|
183
|
-
## Related
|
|
184
|
-
|
|
185
|
-
- [ADR-029: HuggingFace Chat UI Cloud Run](ADR-029-HUGGINGFACE-CHAT-UI-CLOUD-RUN.md)
|
|
186
|
-
- [ADR-032: RVF Private MCP Tunnel](ADR-032-RVF-PRIVATE-MCP-TUNNEL.md)
|
|
1
|
+
# ADR-035: MCP Tool Groups — Modular Tool Organization
|
|
2
|
+
|
|
3
|
+
**Status:** Accepted
|
|
4
|
+
**Date:** 2026-03-05
|
|
5
|
+
**Supersedes:** ADR-033, ADR-034
|
|
6
|
+
|
|
7
|
+
## Context
|
|
8
|
+
|
|
9
|
+
The MCP bridge grew to 331+ tools from multiple backends (ruvector, ruflo, agentic-flow, Claude Code, Gemini, Codex). Exposing all tools simultaneously caused:
|
|
10
|
+
|
|
11
|
+
1. **Context flooding** — AI models struggle to select the right tool from 300+ options
|
|
12
|
+
2. **Startup overhead** — loading all backends when only a subset is needed
|
|
13
|
+
3. **No discoverability** — the AI had no structured way to learn about available capabilities
|
|
14
|
+
|
|
15
|
+
## Decision
|
|
16
|
+
|
|
17
|
+
Reorganize all tools into **12 logical groups** that can be independently enabled/disabled via `MCP_GROUP_*` environment variables. Add a built-in `guidance` tool that provides structured instructions to the AI about available capabilities.
|
|
18
|
+
|
|
19
|
+
### Tool Groups
|
|
20
|
+
|
|
21
|
+
| Group | Source | Tools | Default | Env Var |
|
|
22
|
+
|-------|--------|-------|---------|---------|
|
|
23
|
+
| **core** | built-in | search, web_research, guidance | always on | — |
|
|
24
|
+
| **intelligence** | ruvector | ~10 | enabled | `MCP_GROUP_INTELLIGENCE` |
|
|
25
|
+
| **agents** | ruflo | ~50 | enabled | `MCP_GROUP_AGENTS` |
|
|
26
|
+
| **memory** | ruflo | ~25 | enabled | `MCP_GROUP_MEMORY` |
|
|
27
|
+
| **devtools** | ruflo | ~60 | enabled | `MCP_GROUP_DEVTOOLS` |
|
|
28
|
+
| **security** | ruflo | ~25 | disabled | `MCP_GROUP_SECURITY` |
|
|
29
|
+
| **browser** | ruflo | ~23 | disabled | `MCP_GROUP_BROWSER` |
|
|
30
|
+
| **neural** | ruflo | ~20 | disabled | `MCP_GROUP_NEURAL` |
|
|
31
|
+
| **agentic-flow** | agentic-flow@alpha | 15 | disabled | `MCP_GROUP_AGENTIC_FLOW` |
|
|
32
|
+
| **claude-code** | claude mcp serve | varies | disabled | `MCP_GROUP_CLAUDE_CODE` |
|
|
33
|
+
| **gemini** | gemini-mcp-server | varies | disabled | `MCP_GROUP_GEMINI` |
|
|
34
|
+
| **codex** | @openai/codex | varies | disabled | `MCP_GROUP_CODEX` |
|
|
35
|
+
|
|
36
|
+
### Architecture
|
|
37
|
+
|
|
38
|
+
```
|
|
39
|
+
┌─────────────────────────────────────────────────────────┐
|
|
40
|
+
│ HF Chat UI → /mcp │
|
|
41
|
+
└─────────────┬───────────────────────────────────────────┘
|
|
42
|
+
▼
|
|
43
|
+
┌─────────────────────────────────────────────────────────┐
|
|
44
|
+
│ MCP Bridge v2.0.0 │
|
|
45
|
+
│ │
|
|
46
|
+
│ ┌─────────────────────────────────────────────────┐ │
|
|
47
|
+
│ │ TOOL GROUP FILTER │ │
|
|
48
|
+
│ │ MCP_GROUP_INTELLIGENCE=true → include │ │
|
|
49
|
+
│ │ MCP_GROUP_AGENTS=true → include │ │
|
|
50
|
+
│ │ MCP_GROUP_BROWSER=false → exclude │ │
|
|
51
|
+
│ │ MCP_GROUP_NEURAL=false → exclude │ │
|
|
52
|
+
│ └─────────────────────────────────────────────────┘ │
|
|
53
|
+
│ ▼ ▼ ▼ │
|
|
54
|
+
│ ┌──────────┐ ┌──────────────┐ ┌─────────────────┐ │
|
|
55
|
+
│ │ ruvector │ │ ruflo │ │ agentic-flow │ │
|
|
56
|
+
│ │ (stdio) │ │ (stdio) │ │ (stdio) │ │
|
|
57
|
+
│ └──────────┘ └──────────────┘ └─────────────────┘ │
|
|
58
|
+
│ │
|
|
59
|
+
│ Optional (disabled by default): │
|
|
60
|
+
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
|
|
61
|
+
│ │ Claude │ │ Gemini │ │ Codex │ │
|
|
62
|
+
│ └──────────┘ └──────────┘ └──────────┘ │
|
|
63
|
+
└─────────────────────────────────────────────────────────┘
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### Group Filtering
|
|
67
|
+
|
|
68
|
+
Tools from external backends are filtered by matching their original tool name against group prefix patterns:
|
|
69
|
+
|
|
70
|
+
```javascript
|
|
71
|
+
// Group definition
|
|
72
|
+
agents: {
|
|
73
|
+
source: "ruflo",
|
|
74
|
+
prefixes: ["agent_", "swarm_", "task_", "session_", "hive-mind_", "workflow_", "coordination_"],
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
// ruflo tool "agent_spawn" → matches "agent_" prefix → included if agents group enabled
|
|
78
|
+
// ruflo tool "browser_open" → matches "browser_" prefix → only if browser group enabled
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
A backend is only started if at least one of its groups is enabled. This means disabling all ruflo groups prevents the ruflo process from spawning entirely.
|
|
82
|
+
|
|
83
|
+
### Guidance Tool
|
|
84
|
+
|
|
85
|
+
The `guidance` tool replaces the old `system_guide`. It provides structured, AI-optimized instructions:
|
|
86
|
+
|
|
87
|
+
```
|
|
88
|
+
guidance(topic="overview") → capabilities summary + decision guide
|
|
89
|
+
guidance(topic="groups") → table of all groups with status
|
|
90
|
+
guidance(topic="agents") → detailed usage for the agents group
|
|
91
|
+
guidance(topic="tool", tool_name="ruflo__memory_search") → specific tool docs
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
The system prompt instructs the AI to call `guidance` when:
|
|
95
|
+
- Unsure which tool to use
|
|
96
|
+
- User asks "what can you do?"
|
|
97
|
+
- Needs to learn a specific tool group before using it
|
|
98
|
+
|
|
99
|
+
### Agentic-Flow Integration
|
|
100
|
+
|
|
101
|
+
`agentic-flow@alpha` (npm package) provides 15 tools:
|
|
102
|
+
|
|
103
|
+
| Tool | Description |
|
|
104
|
+
|------|-------------|
|
|
105
|
+
| `agentic_flow_agent` | Execute any of 66+ specialized agents |
|
|
106
|
+
| `agentic_flow_list_agents` | List available agent types |
|
|
107
|
+
| `agentic_flow_create_agent` | Create custom agents |
|
|
108
|
+
| `agentic_flow_list_all_agents` | List with sources |
|
|
109
|
+
| `agentic_flow_agent_info` | Get agent details |
|
|
110
|
+
| `agentic_flow_check_conflicts` | Agent conflict detection |
|
|
111
|
+
| `agentic_flow_optimize_model` | Auto-select best model |
|
|
112
|
+
| `agent_booster_edit_file` | 352x faster code editing |
|
|
113
|
+
| `agent_booster_batch_edit` | Multi-file refactoring |
|
|
114
|
+
| `agent_booster_parse_markdown` | LLM output parsing |
|
|
115
|
+
| `agentdb_stats` | Database statistics |
|
|
116
|
+
| `agentdb_pattern_store` | Store reasoning patterns |
|
|
117
|
+
| `agentdb_pattern_search` | Search similar patterns |
|
|
118
|
+
| `agentdb_pattern_stats` | Pattern analytics |
|
|
119
|
+
| `agentdb_clear_cache` | Clear query cache |
|
|
120
|
+
|
|
121
|
+
## Configuration Examples
|
|
122
|
+
|
|
123
|
+
### Minimal (research assistant)
|
|
124
|
+
```env
|
|
125
|
+
MCP_GROUP_INTELLIGENCE=false
|
|
126
|
+
MCP_GROUP_AGENTS=false
|
|
127
|
+
MCP_GROUP_MEMORY=false
|
|
128
|
+
MCP_GROUP_DEVTOOLS=false
|
|
129
|
+
# Only core tools: search, web_research, guidance
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
### Developer workstation
|
|
133
|
+
```env
|
|
134
|
+
MCP_GROUP_INTELLIGENCE=true
|
|
135
|
+
MCP_GROUP_AGENTS=true
|
|
136
|
+
MCP_GROUP_MEMORY=true
|
|
137
|
+
MCP_GROUP_DEVTOOLS=true
|
|
138
|
+
MCP_GROUP_AGENTIC_FLOW=true # agent execution + boosted editing
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
### Full capabilities
|
|
142
|
+
```env
|
|
143
|
+
MCP_GROUP_INTELLIGENCE=true
|
|
144
|
+
MCP_GROUP_AGENTS=true
|
|
145
|
+
MCP_GROUP_MEMORY=true
|
|
146
|
+
MCP_GROUP_DEVTOOLS=true
|
|
147
|
+
MCP_GROUP_SECURITY=true
|
|
148
|
+
MCP_GROUP_BROWSER=true
|
|
149
|
+
MCP_GROUP_NEURAL=true
|
|
150
|
+
MCP_GROUP_AGENTIC_FLOW=true
|
|
151
|
+
MCP_GROUP_CLAUDE_CODE=true
|
|
152
|
+
MCP_GROUP_GEMINI=true
|
|
153
|
+
MCP_GROUP_CODEX=true
|
|
154
|
+
ANTHROPIC_API_KEY=sk-ant-...
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
## API Endpoints
|
|
158
|
+
|
|
159
|
+
| Endpoint | Method | Description |
|
|
160
|
+
|----------|--------|-------------|
|
|
161
|
+
| `/health` | GET | System health with group status |
|
|
162
|
+
| `/groups` | GET | Detailed group info with tool counts |
|
|
163
|
+
| `/models` | GET | Available LLM models |
|
|
164
|
+
| `/mcp` | POST | MCP JSON-RPC (tools/list, tools/call) |
|
|
165
|
+
|
|
166
|
+
## Consequences
|
|
167
|
+
|
|
168
|
+
### Positive
|
|
169
|
+
- AI sees only relevant tools (20-50 instead of 300+), improving tool selection accuracy
|
|
170
|
+
- Unused backends don't start, saving memory and CPU
|
|
171
|
+
- `guidance` tool provides structured discoverability
|
|
172
|
+
- Groups can be mixed and matched per deployment
|
|
173
|
+
- New backends/groups can be added without touching existing code
|
|
174
|
+
|
|
175
|
+
### Negative
|
|
176
|
+
- Some tools appear in multiple potential groups (e.g., ruflo `hooks_*` in both intelligence and devtools) — resolved by prefix matching
|
|
177
|
+
- Group boundaries are somewhat arbitrary for the ruflo "Uncategorized" tools
|
|
178
|
+
|
|
179
|
+
### Mitigations
|
|
180
|
+
- `guidance` tool helps AI navigate regardless of how tools are grouped
|
|
181
|
+
- `/groups` endpoint lets operators inspect what's actually active
|
|
182
|
+
|
|
183
|
+
## Related
|
|
184
|
+
|
|
185
|
+
- [ADR-029: HuggingFace Chat UI Cloud Run](ADR-029-HUGGINGFACE-CHAT-UI-CLOUD-RUN.md)
|
|
186
|
+
- [ADR-032: RVF Private MCP Tunnel](ADR-032-RVF-PRIVATE-MCP-TUNNEL.md)
|