diff --git a/.github/workflows/vercel-auto-deploy.yml b/.github/workflows/vercel-auto-deploy.yml new file mode 100644 index 00000000..7d0e6cee --- /dev/null +++ b/.github/workflows/vercel-auto-deploy.yml @@ -0,0 +1,22 @@ +name: Vercel Auto Deploy + +on: + push: + branches: + - dev # 自动预览部署的分支 + # 如需对 master/main 做生产部署,可在后续扩展 + +jobs: + deploy: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Deploy to Vercel (preview) + uses: amondnet/vercel-action@v20 + with: + vercel-token: ${{ secrets.VERCEL_TOKEN }} # Vercel 访问令牌 + vercel-org-id: ${{ secrets.VERCEL_ORG_ID }} # Vercel 组织 ID + vercel-project-id: ${{ secrets.VERCEL_PROJECT_ID }}# Vercel 项目 ID + vercel-args: '--previews' # dev 分支走预览部署 diff --git a/web/src/components/research/SearchBox.tsx b/web/src/components/research/SearchBox.tsx index cefb24c9..0b973072 100644 --- a/web/src/components/research/SearchBox.tsx +++ b/web/src/components/research/SearchBox.tsx @@ -4,6 +4,7 @@ import { KeyboardEvent, useRef, useState } from "react" import { Brain, CalendarRange, Check, Loader2, Search } from "lucide-react" import { cn } from "@/lib/utils" +import { showTrackMemoryButton } from "@/config/features" import { Button } from "@/components/ui/button" import { Textarea } from "@/components/ui/textarea" import { Popover, PopoverContent, PopoverAnchor } from "@/components/ui/popover" @@ -247,16 +248,18 @@ export function SearchBox({ {/* Right side - Memory, Track selector and Search button */}
- + {onOpenMemory && showTrackMemoryButton() && ( + + )} onSelectTrack(track.id)} + onClick={() => { + if (track.id !== activeTrackId) onSelectTrack(track.id) + }} disabled={disabled} > {(() => { diff --git a/web/src/components/research/TrackSelector.tsx b/web/src/components/research/TrackSelector.tsx index 7ac90d75..8dc20efc 100644 --- a/web/src/components/research/TrackSelector.tsx +++ b/web/src/components/research/TrackSelector.tsx @@ -60,7 +60,11 @@ export function TrackSelector({ tracks.map((track) => ( onSelectTrack(track.id)} + onClick={() => { + if (!activeTrack || track.id !== activeTrack.id) { + onSelectTrack(track.id) + } + }} className="flex items-center justify-between" > {track.name} diff --git a/web/src/config/features.ts b/web/src/config/features.ts index 739cfdb9..baa2a229 100644 --- a/web/src/config/features.ts +++ b/web/src/config/features.ts @@ -18,3 +18,20 @@ export function showDiscoveryLink(): boolean { return parseBool(process.env.NEXT_PUBLIC_SHOW_DISCOVERY) } + + +// Whether to show the Track Memory button (brain icon) in Research search box. +// Default: false. Can be overridden by: +// - runtime localStorage key: paperbot.showTrackMemory ("1"/"true") +// - build-time env: NEXT_PUBLIC_SHOW_TRACK_MEMORY ("1"/"true") +export function showTrackMemoryButton(): boolean { + if (typeof window !== "undefined") { + const v = window.localStorage.getItem("paperbot.showTrackMemory") + if (v != null) return parseBool(v) + } + // Fallback: allow sharing the same env flag as discovery if desired + return ( + parseBool(process.env.NEXT_PUBLIC_SHOW_TRACK_MEMORY) || + parseBool(process.env.NEXT_PUBLIC_SHOW_DISCOVERY) + ) +}