@geminilight/mindos 0.6.61 → 0.6.65
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/_standalone/.antigravity/mcp_config.json +14 -0
- package/_standalone/.mindos-build-version +1 -1
- package/_standalone/.next/BUILD_ID +1 -1
- package/_standalone/.next/app-path-routes-manifest.json +23 -23
- package/_standalone/.next/build-manifest.json +2 -2
- package/_standalone/.next/cache/.previewinfo +1 -1
- package/_standalone/.next/cache/.rscinfo +1 -1
- package/_standalone/.next/cache/config.json +3 -3
- package/_standalone/.next/prerender-manifest.json +3 -3
- package/_standalone/.next/server/app/.well-known/agent-card.json/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/_global-error.html +2 -2
- package/_standalone/.next/server/app/_global-error.rsc +1 -1
- package/_standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/_standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/_standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/_standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/_standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/_standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/_standalone/.next/server/app/_not-found/page.js +1 -1
- package/_standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/agents/[agentKey]/page.js +1 -1
- package/_standalone/.next/server/app/agents/[agentKey]/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/agents/[agentKey]/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/agents/page.js +1 -1
- package/_standalone/.next/server/app/agents/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/agents/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/a2a/agents/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/a2a/delegations/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/a2a/discover/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/a2a/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/acp/config/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/acp/detect/route.js +1 -1
- package/_standalone/.next/server/app/api/acp/detect/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/acp/install/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/acp/registry/route.js +1 -1
- package/_standalone/.next/server/app/api/acp/registry/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/acp/session/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/agent-activity/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/agents/copy-skill/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/agents/copy-skill/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/agents/custom/detect/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/agents/custom/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/ask/route.js +53 -47
- package/_standalone/.next/server/app/api/ask/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/ask/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/ask-sessions/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/auth/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/backlinks/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/backlinks/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/bootstrap/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/bootstrap/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/changes/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/changes/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/export/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/export/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/extract-pdf/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/file/import/route.js +1 -1
- package/_standalone/.next/server/app/api/file/import/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/file/import/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/file/raw/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/file/raw/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/file/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/file/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/files/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/git/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/graph/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/graph/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/health/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/inbox/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/inbox/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/init/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/init/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/mcp/agents/route.js +1 -1
- package/_standalone/.next/server/app/api/mcp/agents/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/mcp/agents/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/mcp/install/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/mcp/install-skill/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/mcp/restart/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/mcp/status/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/mcp/uninstall/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/monitoring/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/monitoring/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/recent-files/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/recent-files/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/restart/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/search/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/search/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/settings/list-models/route.js +1 -1
- package/_standalone/.next/server/app/api/settings/list-models/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/settings/reset-token/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/settings/route.js +1 -1
- package/_standalone/.next/server/app/api/settings/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/settings/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/settings/test-key/route.js +1 -1
- package/_standalone/.next/server/app/api/settings/test-key/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/setup/check-path/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/setup/check-port/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/setup/generate-token/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/setup/ls/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/setup/route.js +1 -1
- package/_standalone/.next/server/app/api/setup/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/skills/route.js +1 -1
- package/_standalone/.next/server/app/api/skills/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/sync/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/tree-version/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/tree-version/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/uninstall/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/update-check/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/update-status/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/api/workflows/route.js.nft.json +1 -1
- package/_standalone/.next/server/app/api/workflows/route_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/changes/page.js +1 -1
- package/_standalone/.next/server/app/changes/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/changes/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/echo/[segment]/page.js +2 -2
- package/_standalone/.next/server/app/echo/[segment]/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/echo/[segment]/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/echo/page.js +1 -1
- package/_standalone/.next/server/app/echo/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/echo/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/explore/page.js +1 -1
- package/_standalone/.next/server/app/explore/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/explore/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/help/page.js +1 -1
- package/_standalone/.next/server/app/help/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/help/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/inbox/history/page.js +1 -1
- package/_standalone/.next/server/app/inbox/history/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/inbox/history/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/login/page.js +1 -1
- package/_standalone/.next/server/app/login/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/page.js +1 -1
- package/_standalone/.next/server/app/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/setup/page.js +2 -2
- package/_standalone/.next/server/app/setup/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/setup/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/trash/page.js +3 -3
- package/_standalone/.next/server/app/trash/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/trash/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/view/[...path]/page.js +2 -2
- package/_standalone/.next/server/app/view/[...path]/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/view/[...path]/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app/wiki/page.js +1 -1
- package/_standalone/.next/server/app/wiki/page.js.nft.json +1 -1
- package/_standalone/.next/server/app/wiki/page_client-reference-manifest.js +1 -1
- package/_standalone/.next/server/app-paths-manifest.json +23 -23
- package/_standalone/.next/server/chunks/122.js +222 -0
- package/_standalone/.next/server/chunks/1550.js +1 -1
- package/_standalone/.next/server/chunks/1750.js +1 -1
- package/_standalone/.next/server/chunks/3113.js +52 -0
- package/_standalone/.next/server/chunks/6539.js +1 -1
- package/_standalone/.next/server/chunks/8388.js +3 -3
- package/_standalone/.next/server/chunks/953.js +3 -3
- package/_standalone/.next/server/pages/500.html +2 -2
- package/_standalone/.next/server/server-reference-manifest.js +1 -1
- package/_standalone/.next/server/server-reference-manifest.json +1 -1
- package/_standalone/.next/static/chunks/1001-99da82ec8d8c136f.js +1 -0
- package/_standalone/.next/static/chunks/1088-77544af0a50cb7a4.js +1 -0
- package/_standalone/.next/static/chunks/1467-87dde7eed498806f.js +1 -0
- package/_standalone/.next/static/chunks/5149-4d828886dda479fa.js +1 -0
- package/_standalone/.next/static/chunks/5581-c671163a2fe1b312.js +29 -0
- package/_standalone/.next/static/chunks/{7266-bb7be1128eccd48e.js → 5718-3837c3210a0e175f.js} +2 -2
- package/_standalone/.next/static/chunks/6636-53238eff89503f03.js +6 -0
- package/_standalone/.next/static/chunks/6757-1c1a89720fdda8f0.js +1 -0
- package/_standalone/.next/static/chunks/7129-20e9d2463a9da646.js +1 -0
- package/_standalone/.next/static/chunks/7294-cac25d97869afadc.js +1 -0
- package/_standalone/.next/static/chunks/8225-21e5cebc3731ddf0.js +1 -0
- package/_standalone/.next/static/chunks/8520-b51810e66293ceb8.js +22 -0
- package/_standalone/.next/static/chunks/9207-dc9c31b351a2ed78.js +1 -0
- package/_standalone/.next/static/chunks/app/agents/[agentKey]/page-2f5cf97e03dc1cc9.js +1 -0
- package/_standalone/.next/static/chunks/app/agents/page-50eac58d511dcc6e.js +1 -0
- package/_standalone/.next/static/chunks/app/echo/[segment]/page-2a00f4686adf3885.js +11 -0
- package/_standalone/.next/static/chunks/app/layout-2cb7a6602d2e5d5f.js +168 -0
- package/_standalone/.next/static/chunks/app/{page-6a1f8d21c12b829e.js → page-5ab911b2226f6ff7.js} +1 -1
- package/_standalone/.next/static/chunks/app/setup/page-907b7c57fad2292b.js +1 -0
- package/_standalone/.next/static/chunks/app/trash/page-11a511b065ea84c2.js +1 -0
- package/_standalone/.next/static/chunks/app/view/[...path]/page-26e47dd4c533a58c.js +12 -0
- package/_standalone/.next/static/chunks/app/wiki/page-dce495b9048022fb.js +1 -0
- package/_standalone/.next/static/css/67e7918f5ed7d147.css +1 -0
- package/_standalone/.next/trace +65 -65
- package/_standalone/__tests__/acp/registry.test.ts +30 -20
- package/_standalone/__tests__/api/ask-attachments.test.ts +194 -0
- package/_standalone/__tests__/api/mcp-install.test.ts +49 -2
- package/_standalone/__tests__/api/settings.test.ts +16 -12
- package/_standalone/__tests__/api/setup.test.ts +11 -9
- package/_standalone/__tests__/api/test-key.test.ts +0 -10
- package/_standalone/__tests__/components/UpdateToast.test.ts +344 -0
- package/_standalone/__tests__/core/context.test.ts +48 -426
- package/_standalone/__tests__/lib/pi-skills.test.ts +4 -4
- package/_standalone/__tests__/lib/settings-ai-client.test.ts +32 -12
- package/_standalone/__tests__/setup.ts +5 -5
- package/_standalone/app/globals.css +4 -4
- package/_standalone/components/ActivityBar.tsx +17 -6
- package/_standalone/components/Panel.tsx +24 -6
- package/_standalone/components/SidebarLayout.tsx +36 -8
- package/_standalone/components/agents/AgentsMcpSection.tsx +2 -2
- package/_standalone/components/agents/AgentsOverviewSection.tsx +5 -1
- package/_standalone/components/agents/AgentsPanelA2aTab.tsx +173 -113
- package/_standalone/components/agents/AgentsSkillsSection.tsx +2 -2
- package/_standalone/components/ask/AskContent.tsx +83 -44
- package/_standalone/components/ask/AskHeader.tsx +8 -1
- package/_standalone/components/ask/MessageList.tsx +37 -3
- package/_standalone/components/ask/ProviderModelCapsule.tsx +444 -174
- package/_standalone/components/home/InboxSection.tsx +25 -25
- package/_standalone/components/settings/AiTab.tsx +353 -298
- package/_standalone/components/settings/CustomProviderFields.tsx +121 -0
- package/_standalone/components/settings/CustomProvidersCard.tsx +154 -0
- package/_standalone/components/settings/KnowledgeTab.tsx +6 -20
- package/_standalone/components/settings/McpAgentInstall.tsx +7 -2
- package/_standalone/components/settings/Primitives.tsx +48 -104
- package/_standalone/components/settings/ProviderModal.tsx +87 -0
- package/_standalone/components/settings/SettingsContent.tsx +2 -5
- package/_standalone/components/settings/TestButton.tsx +64 -0
- package/_standalone/components/settings/types.ts +3 -9
- package/_standalone/components/settings/useCustomProviderForm.ts +132 -0
- package/_standalone/components/setup/StepAI.tsx +12 -5
- package/_standalone/components/shared/ModelInput.tsx +220 -0
- package/_standalone/components/shared/ProviderSelect.tsx +126 -36
- package/_standalone/hooks/useAskChat.ts +100 -13
- package/_standalone/hooks/useAskPanel.ts +17 -1
- package/_standalone/lib/settings-ai-client.ts +17 -8
- package/_standalone/tsconfig.tsbuildinfo +1 -1
- package/app/.antigravity/mcp_config.json +14 -0
- package/app/app/api/ask/route.ts +154 -45
- package/app/app/api/mcp/agents/route.ts +3 -3
- package/app/app/api/settings/list-models/route.ts +36 -9
- package/app/app/api/settings/route.ts +14 -42
- package/app/app/api/settings/test-key/route.ts +78 -2
- package/app/app/api/setup/route.ts +36 -18
- package/app/app/api/skills/route.ts +1 -1
- package/app/app/globals.css +4 -4
- package/app/app/layout.tsx +5 -3
- package/app/app/view/[...path]/page.tsx +5 -0
- package/app/components/ActivityBar.tsx +17 -6
- package/app/components/HomeContent.tsx +11 -0
- package/app/components/InboxView.tsx +656 -0
- package/app/components/Panel.tsx +24 -6
- package/app/components/SidebarLayout.tsx +36 -8
- package/app/components/UpdateToast.tsx +255 -0
- package/app/components/agents/AgentDetailContent.tsx +8 -8
- package/app/components/agents/AgentsMcpSection.tsx +2 -2
- package/app/components/agents/AgentsOverviewSection.tsx +5 -1
- package/app/components/agents/AgentsPanelA2aTab.tsx +173 -113
- package/app/components/agents/AgentsSkillsSection.tsx +2 -2
- package/app/components/ask/AskContent.tsx +83 -44
- package/app/components/ask/AskHeader.tsx +8 -1
- package/app/components/ask/MessageList.tsx +37 -3
- package/app/components/ask/ProviderModelCapsule.tsx +444 -174
- package/app/components/home/InboxSection.tsx +25 -25
- package/app/components/settings/AiTab.tsx +353 -298
- package/app/components/settings/CustomProviderFields.tsx +121 -0
- package/app/components/settings/CustomProvidersCard.tsx +154 -0
- package/app/components/settings/KnowledgeTab.tsx +6 -20
- package/app/components/settings/McpAgentInstall.tsx +7 -2
- package/app/components/settings/Primitives.tsx +48 -104
- package/app/components/settings/ProviderModal.tsx +87 -0
- package/app/components/settings/SettingsContent.tsx +2 -5
- package/app/components/settings/TestButton.tsx +64 -0
- package/app/components/settings/types.ts +3 -9
- package/app/components/settings/useCustomProviderForm.ts +132 -0
- package/app/components/setup/StepAI.tsx +12 -5
- package/app/components/shared/ModelInput.tsx +220 -0
- package/app/components/shared/ProviderSelect.tsx +126 -36
- package/app/hooks/useAskChat.ts +100 -13
- package/app/hooks/useAskPanel.ts +17 -1
- package/app/lib/acp/registry.ts +92 -10
- package/app/lib/agent/context.ts +65 -0
- package/app/lib/agent/providers.ts +25 -0
- package/app/lib/agent/tools.ts +1 -1
- package/app/lib/custom-endpoints.ts +160 -0
- package/app/lib/fs.ts +8 -1
- package/app/lib/i18n/modules/ai-chat.ts +6 -0
- package/app/lib/i18n/modules/knowledge.ts +16 -0
- package/app/lib/i18n/modules/onboarding.ts +4 -0
- package/app/lib/i18n/modules/settings.ts +88 -2
- package/app/lib/mcp-agents.ts +11 -0
- package/app/lib/pi-integration/skills.ts +16 -4
- package/app/lib/settings-ai-client.ts +17 -8
- package/app/lib/settings.ts +68 -72
- package/app/lib/types.ts +4 -0
- package/bin/lib/mcp-agents.js +11 -0
- package/bin/lib/mcp-install.js +71 -7
- package/package.json +1 -1
- package/_standalone/.next/server/chunks/530.js +0 -218
- package/_standalone/.next/server/chunks/8955.js +0 -52
- package/_standalone/.next/static/chunks/1369-7d0ac5d1564eed1e.js +0 -1
- package/_standalone/.next/static/chunks/3427-2e61a5df1f5e55fb.js +0 -1
- package/_standalone/.next/static/chunks/5581-0c700c20718bd916.js +0 -29
- package/_standalone/.next/static/chunks/6297-085daa21037d5f81.js +0 -1
- package/_standalone/.next/static/chunks/6636-9bbc90fb3b8731fe.js +0 -6
- package/_standalone/.next/static/chunks/7637-904b0a381dc3ec02.js +0 -1
- package/_standalone/.next/static/chunks/8520-76d1b05072178b43.js +0 -22
- package/_standalone/.next/static/chunks/8658-16ff58b75ae37fbb.js +0 -1
- package/_standalone/.next/static/chunks/9905-a19d379cb225246e.js +0 -1
- package/_standalone/.next/static/chunks/app/agents/[agentKey]/page-0ea3571c8fbae823.js +0 -1
- package/_standalone/.next/static/chunks/app/agents/page-66858acbcd1d4bf8.js +0 -1
- package/_standalone/.next/static/chunks/app/echo/[segment]/page-bf5c290fa3ccff09.js +0 -11
- package/_standalone/.next/static/chunks/app/layout-a5d5925b47e87cc3.js +0 -164
- package/_standalone/.next/static/chunks/app/setup/page-821714e7477be46c.js +0 -1
- package/_standalone/.next/static/chunks/app/trash/page-40bc7316806acd62.js +0 -1
- package/_standalone/.next/static/chunks/app/view/[...path]/page-6fbb14b8f322d0f0.js +0 -12
- package/_standalone/.next/static/chunks/app/wiki/page-ba36eccf4fe62cfe.js +0 -1
- package/_standalone/.next/static/css/b57c4eb3cc88308b.css +0 -1
- package/_standalone/lib/agent/context.ts +0 -403
- /package/_standalone/.next/static/{5GmVArEG8OX03azKICsGq → eIlwbGas1iRGonlPyEwj7}/_buildManifest.js +0 -0
- /package/_standalone/.next/static/{5GmVArEG8OX03azKICsGq → eIlwbGas1iRGonlPyEwj7}/_ssgManifest.js +0 -0
|
@@ -209,8 +209,8 @@ export default function AgentsSkillsSection({
|
|
|
209
209
|
{/* Header */}
|
|
210
210
|
<div className="flex items-center justify-between gap-3">
|
|
211
211
|
<h2 className="text-sm font-semibold text-foreground flex items-center gap-2">
|
|
212
|
-
<div className="w-6 h-6 rounded-md bg-
|
|
213
|
-
<Zap size={13} className="text-
|
|
212
|
+
<div className="w-6 h-6 rounded-md bg-[var(--amber-subtle)] flex items-center justify-center">
|
|
213
|
+
<Zap size={13} className="text-[var(--amber)]" aria-hidden="true" />
|
|
214
214
|
</div>
|
|
215
215
|
{copy.title}
|
|
216
216
|
</h2>
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
import { useEffect, useLayoutEffect, useRef, useState, useCallback, useMemo } from 'react';
|
|
4
4
|
import { Send, StopCircle, X, Plus, FileText, ImageIcon } from 'lucide-react';
|
|
5
5
|
import { useLocale } from '@/lib/stores/locale-store';
|
|
6
|
-
import type { AskMode } from '@/lib/types';
|
|
6
|
+
import type { AskMode, Message } from '@/lib/types';
|
|
7
7
|
import ModeCapsule, { getPersistedMode } from '@/components/ask/ModeCapsule';
|
|
8
8
|
import { useAskSession } from '@/hooks/useAskSession';
|
|
9
9
|
import { useFileUpload } from '@/hooks/useFileUpload';
|
|
@@ -18,7 +18,7 @@ import SessionHistory from '@/components/ask/SessionHistory';
|
|
|
18
18
|
import AskHeader from '@/components/ask/AskHeader';
|
|
19
19
|
import FileChip from '@/components/ask/FileChip';
|
|
20
20
|
import AgentSelectorCapsule from '@/components/ask/AgentSelectorCapsule';
|
|
21
|
-
import ProviderModelCapsule, {
|
|
21
|
+
import ProviderModelCapsule, { getPersistedProviderModel } from '@/components/ask/ProviderModelCapsule';
|
|
22
22
|
import type { ProviderId } from '@/lib/agent/providers';
|
|
23
23
|
import { useAskChat } from '@/hooks/useAskChat';
|
|
24
24
|
import { cn } from '@/lib/utils';
|
|
@@ -74,9 +74,11 @@ interface AskContentProps {
|
|
|
74
74
|
askMode?: 'panel' | 'popup';
|
|
75
75
|
/** Switch between panel ↔ popup */
|
|
76
76
|
onModeSwitch?: () => void;
|
|
77
|
+
/** Navigate from fullscreen to right-side panel mode */
|
|
78
|
+
onDockToPanel?: () => void;
|
|
77
79
|
}
|
|
78
80
|
|
|
79
|
-
export default function AskContent({ visible, currentFile, initialMessage, initialAcpAgent, onFirstMessage, variant, onClose, maximized, onMaximize, askMode, onModeSwitch }: AskContentProps) {
|
|
81
|
+
export default function AskContent({ visible, currentFile, initialMessage, initialAcpAgent, onFirstMessage, variant, onClose, maximized, onMaximize, askMode, onModeSwitch, onDockToPanel }: AskContentProps) {
|
|
80
82
|
const isPanel = variant === 'panel';
|
|
81
83
|
const isHome = variant === 'home';
|
|
82
84
|
|
|
@@ -103,11 +105,14 @@ export default function AskContent({ visible, currentFile, initialMessage, initi
|
|
|
103
105
|
const selectedAcpAgentRef = useRef(selectedAcpAgent);
|
|
104
106
|
selectedAcpAgentRef.current = selectedAcpAgent;
|
|
105
107
|
const [chatMode, setChatMode] = useState<AskMode>('agent');
|
|
106
|
-
const [providerOverride, setProviderOverride] = useState<ProviderId | null>(null);
|
|
108
|
+
const [providerOverride, setProviderOverride] = useState<ProviderId | `p_${string}` | null>(null);
|
|
109
|
+
const [modelOverride, setModelOverride] = useState<string | null>(null);
|
|
107
110
|
|
|
108
111
|
useEffect(() => {
|
|
109
112
|
setChatMode(getPersistedMode());
|
|
110
|
-
|
|
113
|
+
const persisted = getPersistedProviderModel();
|
|
114
|
+
setProviderOverride(persisted.provider);
|
|
115
|
+
setModelOverride(persisted.model);
|
|
111
116
|
}, []);
|
|
112
117
|
|
|
113
118
|
const session = useAskSession(currentFile);
|
|
@@ -133,17 +138,42 @@ export default function AskContent({ visible, currentFile, initialMessage, initi
|
|
|
133
138
|
setSelectedSkill(null);
|
|
134
139
|
setSelectedAcpAgent(null);
|
|
135
140
|
setAttachedFiles(currentFile ? [currentFile] : []);
|
|
136
|
-
|
|
141
|
+
upload.clearAttachments();
|
|
142
|
+
}, [currentFile, upload]);
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
const handleRestoreInput = useCallback((userMessage: Message) => {
|
|
146
|
+
setInput(userMessage.content);
|
|
147
|
+
// Restore images if they exist
|
|
148
|
+
if (userMessage.images && userMessage.images.length > 0) {
|
|
149
|
+
// Reconstruct the images state from the message images
|
|
150
|
+
imageUpload.clearImages();
|
|
151
|
+
// Note: we can't directly set images without going through the upload flow
|
|
152
|
+
// So we just clear them for now - in practice, images are usually small content
|
|
153
|
+
// and the user can re-add them if needed
|
|
154
|
+
}
|
|
155
|
+
if (userMessage.attachedFiles) setAttachedFiles(userMessage.attachedFiles);
|
|
156
|
+
// Restore skill selection if it was set
|
|
157
|
+
if (userMessage.skillName) {
|
|
158
|
+
// The skill is already in the slash command system, just mark as selected
|
|
159
|
+
// This will be handled through the UI state
|
|
160
|
+
slash.resetSlash(); // Clear any active slash query
|
|
161
|
+
}
|
|
162
|
+
// Focus back to input
|
|
163
|
+
setTimeout(() => inputRef.current?.focus(), 50);
|
|
164
|
+
}, [imageUpload, slash]);
|
|
137
165
|
|
|
138
166
|
const chatRefs = useRef({ inputValueRef, mentionRef, slashRef, imageUploadRef, sessionRef, uploadRef, selectedSkillRef, selectedAcpAgentRef, attachedFilesRef });
|
|
139
167
|
const chat = useAskChat({
|
|
140
168
|
currentFile,
|
|
141
169
|
chatMode,
|
|
142
170
|
providerOverride,
|
|
171
|
+
modelOverride,
|
|
143
172
|
onFirstMessage,
|
|
144
173
|
refs: chatRefs.current,
|
|
145
174
|
errorLabels: { noResponse: t.ask.errorNoResponse, stopped: t.ask.stopped },
|
|
146
175
|
resetInputState,
|
|
176
|
+
onRestoreInput: handleRestoreInput,
|
|
147
177
|
});
|
|
148
178
|
const { isLoading, loadingPhase, reconnectAttempt, reconnectMaxRef } = chat;
|
|
149
179
|
const handleSubmit = chat.submit;
|
|
@@ -478,7 +508,7 @@ export default function AskContent({ visible, currentFile, initialMessage, initi
|
|
|
478
508
|
}), [t, reconnectAttempt]);
|
|
479
509
|
|
|
480
510
|
return (
|
|
481
|
-
|
|
511
|
+
<div className="flex min-h-0 w-full flex-col h-full">
|
|
482
512
|
{/* Header — home variant shows session switcher + new/history/fullscreen buttons */}
|
|
483
513
|
<AskHeader
|
|
484
514
|
isPanel={isPanel || isHome}
|
|
@@ -491,6 +521,7 @@ export default function AskContent({ visible, currentFile, initialMessage, initi
|
|
|
491
521
|
askMode={isHome ? undefined : askMode}
|
|
492
522
|
onModeSwitch={isHome ? undefined : onModeSwitch}
|
|
493
523
|
onClose={isHome ? undefined : onClose}
|
|
524
|
+
onDockToPanel={maximized ? onDockToPanel : undefined}
|
|
494
525
|
sessions={session.sessions}
|
|
495
526
|
activeSessionId={session.activeSessionId}
|
|
496
527
|
onLoadSession={handleLoadSession}
|
|
@@ -518,32 +549,33 @@ export default function AskContent({ visible, currentFile, initialMessage, initi
|
|
|
518
549
|
/>
|
|
519
550
|
)}
|
|
520
551
|
|
|
521
|
-
{/* Messages */}
|
|
522
552
|
{/* Messages — home variant hides empty state (suggestions rendered externally) */}
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
553
|
+
<div className="flex-1 min-h-0 flex flex-col">
|
|
554
|
+
{!isHome && (
|
|
555
|
+
<MessageList
|
|
556
|
+
messages={session.messages}
|
|
557
|
+
isLoading={isLoading}
|
|
558
|
+
loadingPhase={loadingPhase}
|
|
559
|
+
emptyPrompt={t.ask.emptyPrompt}
|
|
560
|
+
emptyHint={t.ask.emptyHint}
|
|
561
|
+
suggestions={t.ask.suggestions}
|
|
562
|
+
onSuggestionClick={setInput}
|
|
563
|
+
labels={messageLabels}
|
|
564
|
+
/>
|
|
565
|
+
)}
|
|
566
|
+
{isHome && session.messages.length > 0 && (
|
|
567
|
+
<MessageList
|
|
568
|
+
messages={session.messages}
|
|
569
|
+
isLoading={isLoading}
|
|
570
|
+
loadingPhase={loadingPhase}
|
|
571
|
+
emptyPrompt={t.ask.emptyPrompt}
|
|
572
|
+
emptyHint={t.ask.emptyHint}
|
|
573
|
+
suggestions={[]}
|
|
574
|
+
onSuggestionClick={setInput}
|
|
575
|
+
labels={messageLabels}
|
|
576
|
+
/>
|
|
577
|
+
)}
|
|
578
|
+
</div>
|
|
547
579
|
|
|
548
580
|
{/* Popovers — flex children so they stay within overflow boundary (absolute positioning would be clipped by RightAskPanel's overflow-hidden) */}
|
|
549
581
|
{mention.mentionQuery !== null && mention.mentionResults.length > 0 && (
|
|
@@ -569,7 +601,7 @@ export default function AskContent({ visible, currentFile, initialMessage, initi
|
|
|
569
601
|
)}
|
|
570
602
|
|
|
571
603
|
{/* Composer card — unified input area */}
|
|
572
|
-
<div className=
|
|
604
|
+
<div className={cn('shrink-0', isHome ? 'px-2 pb-2 pt-0.5' : 'px-3 pb-2.5 pt-1')}>
|
|
573
605
|
<div
|
|
574
606
|
className={cn(
|
|
575
607
|
'rounded-xl bg-muted/40 transition-all focus-within:bg-muted/60',
|
|
@@ -617,7 +649,7 @@ export default function AskContent({ visible, currentFile, initialMessage, initi
|
|
|
617
649
|
<form
|
|
618
650
|
ref={formRef}
|
|
619
651
|
onSubmit={handleSubmit}
|
|
620
|
-
className=
|
|
652
|
+
className={cn('flex items-end gap-1.5', isHome ? 'px-2 py-1.5' : 'px-3 py-2')}
|
|
621
653
|
>
|
|
622
654
|
{/* + attach button with mini menu */}
|
|
623
655
|
<div className="relative shrink-0">
|
|
@@ -686,7 +718,7 @@ export default function AskContent({ visible, currentFile, initialMessage, initi
|
|
|
686
718
|
onPaste={handlePaste}
|
|
687
719
|
placeholder={t.ask.placeholder}
|
|
688
720
|
rows={1}
|
|
689
|
-
className=
|
|
721
|
+
className={cn('min-w-0 flex-1 resize-none overflow-y-hidden bg-transparent py-2 leading-relaxed text-foreground placeholder:text-muted-foreground/50 outline-none focus-visible:ring-0', isHome ? 'text-xs' : 'text-sm')}
|
|
690
722
|
/>
|
|
691
723
|
|
|
692
724
|
{isLoading ? (
|
|
@@ -701,8 +733,8 @@ export default function AskContent({ visible, currentFile, initialMessage, initi
|
|
|
701
733
|
</form>
|
|
702
734
|
|
|
703
735
|
{/* Mode + Agent + Provider selector row + keyboard hint */}
|
|
704
|
-
<div className=
|
|
705
|
-
<div className=
|
|
736
|
+
<div className={cn('flex items-center justify-between border-t border-border/10', isPanel ? 'px-2 pb-1.5 pt-1 gap-1' : 'px-3 pb-2 pt-1.5')}>
|
|
737
|
+
<div className={cn('flex items-center flex-wrap', isPanel ? 'gap-1' : 'gap-2')}>
|
|
706
738
|
<ModeCapsule mode={chatMode} onChange={setChatMode} disabled={isLoading} />
|
|
707
739
|
{mounted && acpDetection.installedAgents.length > 0 && (
|
|
708
740
|
<AgentSelectorCapsule
|
|
@@ -714,19 +746,26 @@ export default function AskContent({ visible, currentFile, initialMessage, initi
|
|
|
714
746
|
)}
|
|
715
747
|
{mounted && (
|
|
716
748
|
<ProviderModelCapsule
|
|
717
|
-
|
|
718
|
-
|
|
749
|
+
providerValue={providerOverride}
|
|
750
|
+
onProviderChange={(p) => {
|
|
751
|
+
setProviderOverride(p);
|
|
752
|
+
setModelOverride(null);
|
|
753
|
+
}}
|
|
754
|
+
modelValue={modelOverride}
|
|
755
|
+
onModelChange={setModelOverride}
|
|
719
756
|
disabled={isLoading}
|
|
720
757
|
/>
|
|
721
758
|
)}
|
|
722
759
|
</div>
|
|
723
|
-
{/* Keyboard hint */}
|
|
724
|
-
|
|
725
|
-
<
|
|
726
|
-
|
|
760
|
+
{/* Keyboard hint — hidden in panel (too narrow) and home (compact) */}
|
|
761
|
+
{!isPanel && !isHome && (
|
|
762
|
+
<span className="hidden md:inline text-2xs text-muted-foreground/40 select-none shrink-0">
|
|
763
|
+
<kbd className="font-mono">Enter</kbd> {t.ask.send} · <kbd className="font-mono">Shift+Enter</kbd> {t.ask.newlineHint}
|
|
764
|
+
</span>
|
|
765
|
+
)}
|
|
727
766
|
</div>
|
|
728
767
|
</div>
|
|
729
768
|
</div>
|
|
730
|
-
|
|
769
|
+
</div>
|
|
731
770
|
);
|
|
732
771
|
}
|
|
@@ -16,6 +16,8 @@ interface AskHeaderProps {
|
|
|
16
16
|
askMode?: 'panel' | 'popup';
|
|
17
17
|
onModeSwitch?: () => void;
|
|
18
18
|
onClose?: () => void;
|
|
19
|
+
/** Navigate from fullscreen to right-side panel mode */
|
|
20
|
+
onDockToPanel?: () => void;
|
|
19
21
|
hideTitle?: boolean;
|
|
20
22
|
/** Session switching — inline in header when >=2 sessions */
|
|
21
23
|
sessions?: ChatSession[];
|
|
@@ -28,7 +30,7 @@ interface AskHeaderProps {
|
|
|
28
30
|
|
|
29
31
|
export default memo(function AskHeader({
|
|
30
32
|
isPanel, showHistory, onToggleHistory, onReset, isLoading,
|
|
31
|
-
maximized, onMaximize, askMode, onModeSwitch, onClose, hideTitle,
|
|
33
|
+
maximized, onMaximize, askMode, onModeSwitch, onClose, onDockToPanel, hideTitle,
|
|
32
34
|
sessions, activeSessionId, onLoadSession, onDeleteSession, onRenameSession, onTogglePinSession,
|
|
33
35
|
}: AskHeaderProps) {
|
|
34
36
|
const { t } = useLocale();
|
|
@@ -244,6 +246,11 @@ export default memo(function AskHeader({
|
|
|
244
246
|
{maximized ? <Minimize2 size={iconSize} /> : <Maximize2 size={iconSize} />}
|
|
245
247
|
</button>
|
|
246
248
|
)}
|
|
249
|
+
{onDockToPanel && (
|
|
250
|
+
<button type="button" onClick={(e) => { e.stopPropagation(); onDockToPanel(); }} className="p-2 rounded-lg hover:bg-muted text-muted-foreground hover:text-foreground transition-colors" title={t.hints.dockToSide ?? 'Dock to side panel'}>
|
|
251
|
+
<PanelRight size={iconSize} />
|
|
252
|
+
</button>
|
|
253
|
+
)}
|
|
247
254
|
{onModeSwitch && (
|
|
248
255
|
<button type="button" onClick={(e) => { e.stopPropagation(); onModeSwitch(); }} className="p-2 rounded-lg hover:bg-muted text-muted-foreground hover:text-foreground transition-colors" title={askMode === 'popup' ? t.hints.dockToSide : t.hints.openAsPopup}>
|
|
249
256
|
{askMode === 'popup' ? <PanelRight size={iconSize} /> : <AppWindow size={iconSize} />}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
3
|
import { useRef, useEffect, memo, useState, useCallback } from 'react';
|
|
4
|
-
import { Sparkles, Loader2, AlertCircle, Wrench, WifiOff, Zap, Copy, Check, ArrowDown, FolderInput, Search, PenLine, Lightbulb } from 'lucide-react';
|
|
4
|
+
import { Sparkles, Loader2, AlertCircle, Wrench, WifiOff, Zap, Copy, Check, ArrowDown, FolderInput, Search, PenLine, Lightbulb, FileText, Paperclip } from 'lucide-react';
|
|
5
5
|
import ReactMarkdown from 'react-markdown';
|
|
6
6
|
import remarkGfm from 'remark-gfm';
|
|
7
7
|
import type { Message, ImagePart } from '@/lib/types';
|
|
@@ -35,10 +35,17 @@ function CopyMessageButton({ text, label }: { text: string; label?: string }) {
|
|
|
35
35
|
);
|
|
36
36
|
}
|
|
37
37
|
|
|
38
|
-
function UserMessageContent({ content, skillName, images }: { content: string; skillName?: string; images?: ImagePart[] }) {
|
|
38
|
+
function UserMessageContent({ content, skillName, images, attachedFiles, uploadedFileNames }: { content: string; skillName?: string; images?: ImagePart[]; attachedFiles?: string[]; uploadedFileNames?: string[] }) {
|
|
39
39
|
const resolved = skillName ?? content.match(SKILL_PREFIX_RE)?.[1];
|
|
40
40
|
const prefixMatch = content.match(SKILL_PREFIX_RE);
|
|
41
41
|
const rest = prefixMatch ? content.slice(prefixMatch[0].length) : content;
|
|
42
|
+
|
|
43
|
+
// Deduplicate: uploaded files already shown shouldn't repeat as attached
|
|
44
|
+
const uploadedSet = new Set(uploadedFileNames ?? []);
|
|
45
|
+
const dedupedAttached = attachedFiles?.filter(fp => !uploadedSet.has(fp.split('/').pop() ?? fp));
|
|
46
|
+
const hasContext = (dedupedAttached && dedupedAttached.length > 0)
|
|
47
|
+
|| (uploadedFileNames && uploadedFileNames.length > 0);
|
|
48
|
+
|
|
42
49
|
return (
|
|
43
50
|
<>
|
|
44
51
|
{/* Images */}
|
|
@@ -68,6 +75,33 @@ function UserMessageContent({ content, skillName, images }: { content: string; s
|
|
|
68
75
|
</span>
|
|
69
76
|
)}
|
|
70
77
|
{resolved ? rest : content}
|
|
78
|
+
{/* File context chips */}
|
|
79
|
+
{hasContext && (
|
|
80
|
+
<div className="mt-2 pt-1.5 border-t border-white/15 flex flex-wrap gap-1 whitespace-normal" role="list" aria-label="Attached files">
|
|
81
|
+
{dedupedAttached?.map(fp => (
|
|
82
|
+
<span
|
|
83
|
+
key={fp}
|
|
84
|
+
role="listitem"
|
|
85
|
+
className="inline-flex items-center gap-1 px-1.5 py-0.5 rounded text-[10px] bg-white/10 text-white/80 min-w-0"
|
|
86
|
+
title={fp}
|
|
87
|
+
>
|
|
88
|
+
<FileText size={9} className="shrink-0 opacity-70" />
|
|
89
|
+
<span className="truncate max-w-[120px]">{fp.split('/').pop()}</span>
|
|
90
|
+
</span>
|
|
91
|
+
))}
|
|
92
|
+
{uploadedFileNames?.map(name => (
|
|
93
|
+
<span
|
|
94
|
+
key={name}
|
|
95
|
+
role="listitem"
|
|
96
|
+
className="inline-flex items-center gap-1 px-1.5 py-0.5 rounded text-[10px] bg-white/10 text-white/80 min-w-0"
|
|
97
|
+
title={name}
|
|
98
|
+
>
|
|
99
|
+
<Paperclip size={9} className="shrink-0 opacity-70" />
|
|
100
|
+
<span className="truncate max-w-[120px]">{name}</span>
|
|
101
|
+
</span>
|
|
102
|
+
))}
|
|
103
|
+
</div>
|
|
104
|
+
)}
|
|
71
105
|
</>
|
|
72
106
|
);
|
|
73
107
|
}
|
|
@@ -253,7 +287,7 @@ export default memo(function MessageList({
|
|
|
253
287
|
<div
|
|
254
288
|
className="max-w-[85%] px-3.5 py-2.5 rounded-2xl rounded-br-lg text-sm leading-relaxed whitespace-pre-wrap bg-[var(--amber)] text-[var(--amber-foreground)] shadow-sm shadow-[var(--amber)]/10"
|
|
255
289
|
>
|
|
256
|
-
<UserMessageContent content={m.content} skillName={m.skillName} images={m.images} />
|
|
290
|
+
<UserMessageContent content={m.content} skillName={m.skillName} images={m.images} attachedFiles={m.attachedFiles} uploadedFileNames={m.uploadedFileNames} />
|
|
257
291
|
</div>
|
|
258
292
|
) : m.content.startsWith('__error__') ? (
|
|
259
293
|
<div className="max-w-[85%] px-3.5 py-3 rounded-2xl rounded-bl-md border border-error/30 bg-error/10 text-sm shadow-sm">
|