TreeMap
A free, open-source disk-space visualizer. Squarified treemap, duplicate hunting, disk-full forecasting, and cleanup that only ever moves files to the Trash.
翻譯準備中
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證Multi agent AI deep researcher
翻譯準備中
取自儲存庫 README
正在載入完整 README。 以下為已儲存的摘錄。
Lumen turns a hard question into a cited research report in a few minutes. Four cooperating agents, orchestrated as a
LangGraph state machine and powered by any LLM on OpenRouter, break the question down, search the web, news, arXiv and
Wikipedia in parallel, rank evidence with BM25, cross-check sources for contradictions and credibility, loop back
for targeted follow-up searches when they find important gaps, form calibrated hypotheses, and write a structured
report with inline citations. Every step streams live to a Linear-style workspace, so you can watch the agents work.檢視完整 README ↗Lumen turns a hard question into a cited research report in a few minutes. Four cooperating agents, orchestrated as a LangGraph state machine and powered by any LLM on OpenRouter, break the question down, search the web, news, arXiv and Wikipedia in parallel, rank evidence with BM25, cross-check sources for contradictions and credibility, loop back for targeted follow-up searches when they find important gaps, form calibrated hypotheses, and write a structured report with inline citations. Every step streams live to a Linear-style workspace, so you can watch the agents work.
Live demo: add your Vercel URL here · Demo video: add link here
flowchart TD
START([Query]) --> R[Contextual Retriever]
R -->|sources + BM25 evidence| A[Critical Analysis]
A -->|important gaps and first pass| R
A -->|otherwise| I[Insight Generation]
I --> B[Report Builder]
B --> END([Cited report])
subgraph Tools["Retriever tools (run in parallel)"]
W[OpenRouter web search]
N[OpenRouter web search — news]
X[arXiv API]
K[Wikipedia API]
end
R -.-> Tools
lib/graph/graph.ts builds a StateGraph over a typed Annotation.Root state (lib/graph/state.ts).
Reducers append retrieval results across passes, replace analysis outputs, and sum token usage.lib/graph/routing.ts — a pure conditional edge after Critical Analysis. It routes back to the
Retriever only when there are high-importance gaps and the follow-up pass has not been used (max two retrieval passes).lib/events/types.ts) through LangGraph's custom stream
(streamMode: "custom"); app/api/research/route.ts forwards them to the browser as Server-Sent Events.withStructuredOutput(schema, { method: "jsonSchema" }) (structured outputs via OpenRouter response_format, with provider.require_parameters so requests only go to providers that support it).| Agent | File | What it does |
|---|---|---|
| Contextual Retriever | lib/agents/retriever.ts | Splits the query into 3–5 sub-questions; runs OpenRouter web search (the openrouter:web_search server tool), a news-focused search, arXiv and Wikipedia in parallel; dedupes, caps sources (~12–15) with a balanced mix, chunks text and ranks chunks per sub-question with LangChain's BM25Retriever. On the follow-up pass it turns gaps into targeted questions. |
| Critical Analysis | lib/agents/analyst.ts | Summarises evidence per sub-question, labels claims Corroborated / Single-source / Disputed, flags contradictions (both claims and source ids), scores credibility (type, domain, recency, model judgement, corroboration) and lists gaps by importance. |
| Insight Generation | lib/agents/insight.ts | Reasons step by step to produce 3–5 hypotheses with High/Medium/Low confidence, the reasoning chain and evidence ids. |
| Report Builder | lib/agents/reporter.ts | Writes Summary, Key Findings, Contradictions & Open Questions, Insights & Hypotheses with [n] citations; Methodology (including failed sources) and References are generated deterministically. |
git clone https://github.com/skachru/AI-Deep-Researcher.git && cd AI-Deep-Researcher
npm install
cp .env.example .env.local # then add your OPENROUTER_API_KEY
npm run dev # http://localhost:3000
Other scripts:
| Command | Purpose |
|---|---|
npm run research -- "question" [--standard] | Run the graph from the terminal and print every event |
npm run record [-- "question"] | Record full runs to public/demo/<slug>.json (all three examples by default) |
npm test | Vitest: routing logic, tool parsers (mocked network), reducer, report helpers, end-to-end graph with mocked LLM |
npm run lint · npm run typecheck · npm run format | Code quality |
| Variable | Required | Description |
|---|---|---|
OPENROUTER_API_KEY | Yes | The only key needed (openrouter.ai/keys). arXiv and Wikipedia are free; web search runs through OpenRouter's web search tool (billed per result by OpenRouter). |
OPENROUTER_MODEL | No | Any OpenRouter model id with structured outputs + tools. Defaults to qwen/qwen3.8-flash (low cost). /setup shows its price and capabilities. |
NEXT_PUBLIC_DEMO_MODE | No | true makes the example chips replay recorded runs instantly. |
DATABASE_URL | For history | Postgres (Neon). Enables per-user history, the admin dashboard and rate limits. Tables are created automatically on first use. |
AUTH_SECRET | For sign-in | 32+ random characters for signing sessions (openssl rand -base64 48). |
GOOGLE_CLIENT_ID GOOGLE_CLIENT_SECRET | For Google sign-in | OAuth client ("Web application") from Google Cloud. Redirect URI: https://<domain>/api/auth/google/callback. |
OPENROUTER_REASONING | No | auto (default) switches "thinking" off on reasoning models (or keeps it low where mandatory) so runs stay inside the time limit. Set low/medium/high for more depth on a fast model. |
APP_URL | No | Pins the public URL used for the Google redirect (otherwise taken from the request). |
SETUP_LOCKED | No | true makes /setup admin-only permanently (recommended once set up, and needed without a database). |
ADMIN_EMAILS | No | Comma-separated admin emails. Defaults to [email protected]. |
SMTP_HOST SMTP_PORT SMTP_USER SMTP_PASS EMAIL_FROM | For email | Any SMTP provider. Gmail: smtp.gmail.com, port 465, your address and a Google app password. |
Variables are validated with Zod on first use (lib/env.ts), so a missing key produces a clear error instead of a crash.
lib/graph/run.ts streams a short preliminary answer token by token alongside the
LangGraph run (not as a node, so it can never delay the agents). When the report is ready it is replaced by the
source-verified ## Summary./history works without sign-up. Signing in with
Google (OAuth code flow with PKCE; ID token verified against Google's keys) or an emailed one-time link attaches
that history to the account and syncs it across devices./api/og, or the site icon).POST /api/export; the PDF is
rendered server-side with pdfmake). The HTML (lib/report/interactive.ts) is a self-contained page with key takeaways,
an evidence ring, claim filters, citation previews that jump to the source, source filters, dark mode and print; all
report text is sanitised because it derives from web content. Print prints that designed report, not the app.POST /api/email, max 5 recipients, rate-limited), the system share sheet
where the browser can share files, and Email app, which saves an unsent .eml draft with both files for Outlook,
Apple Mail or Thunderbird. WhatsApp, Telegram, Gmail and Outlook web compose links only carry text, so for those the
files are downloaded to attach by hand. Links shared by earlier versions (/share/<id>) still open./admin (only for ADMIN_EMAILS) shows searches, success rate, users, average run time, tokens, emails sent,
searches per day, top questions and recent searches.Each feature switches on when its environment variables are set; without them the app still runs research.
Safety and cost controls. Research, email, export, sign-in and preview-image requests are rate-limited per visitor,
per IP and (for paid operations) site-wide. Limits use an atomic Postgres counter (rate_limits table) and fall back to
an in-memory counter (per server instance) when no database is configured or it is unreachable — they are never switched off. Rules are checked narrowest first and a denied request gives back what it was charged, so one visitor can't use up the site-wide allowance. Report claims
are re-labelled from the validated evidence ("Corroborated" needs two different sites), citations to non-existent
sources are removed, post-sign-in redirects only allow same-site paths, and the preview-image fetcher pins every
connection to an address it has verified is public (no private-network access, including via DNS rebinding).
Setup check: open /setup on your deployment (open until an admin signs in or SETUP_LOCKED=true; if that can't be verified, access is denied). Its speed test times one structured call and one web search with your model, so you can tell at once whether a model is fast enough. It tests the OpenRouter key (and remaining credit), the chosen model's capabilities, the Google OAuth client ID/secret and
redirect URI (against Google itself), the database and SMTP login, and says exactly what to fix. No secrets are shown;
once someone has signed in, the page is admin-only.
npm run record with your API key set. It runs the three example queries and saves the event streams to
public/demo/. Commit those files.NEXT_PUBLIC_DEMO_MODE=true to make the example chips replay recordings with realistic, compressed timing.OPENROUTER_API_KEY (and optionally NEXT_PUBLIC_DEMO_MODE=true) under Settings → Environment Variables.
For history and admin, add a database under Storage → Create Database → Neon (it sets DATABASE_URL), then add
AUTH_SECRET, ADMIN_EMAILS and the SMTP_* variables.maxDuration = 300 seconds, the maximum on the Hobby plan with Fluid compute
(enabled by default). On Pro you can raise it to 800 in app/api/research/route.ts.Quick depth is designed to finish well inside 300 seconds: tools run in parallel with per-call timeouts and retries, sources are capped, every agent has a token cap and a low effort setting, and the server aborts cleanly 15 seconds before the platform limit.
Add screenshots of the home page, live workspace and report here.
RUNS_PER_HOUR RUNS_PER_IP_HOUR RUNS_PER_DAY | No | Research limits: per visitor per hour (10), per IP per hour (20), whole site per day (300). Admins are exempt. |
EMAILS_PER_DAY EMAILS_PER_IP_DAY EMAILS_GLOBAL_DAY | No | Email limits: per visitor (10), per IP (20), whole site (200) per day. |