Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
9613292
feat(chat): support OpenAI-compatible endpoints via CHAT_BASE_URL
gdccyuen Jul 30, 2026
d699610
docs: expand AGENTS.md ramp-up guide
gdccyuen Jul 30, 2026
e6b689f
fix(chunks): skip Vercel Blob cache when unconfigured instead of 500ing
gdccyuen Jul 30, 2026
7c23f78
fix(fonts): use local geist package instead of next/font/google
gdccyuen Jul 30, 2026
dbc88f2
build: add standalone Docker image for standardized deployment
gdccyuen Jul 30, 2026
415b13d
docs: document Docker deployment, optional Vercel Blob, local fonts
gdccyuen Jul 30, 2026
c6b2c2a
chore: gitignore .env.docker for the Docker env-file flow
gdccyuen Jul 30, 2026
cb0e065
chore: gitignore vim swap files (*.swp)
gdccyuen Jul 30, 2026
a74e143
feat(chunks): default-expand tree root + 1 level with toggle on secti…
gdccyuen Jul 30, 2026
ce55e23
feat(chunks): move chunks pane to full-screen overlay with Close button
gdccyuen Jul 30, 2026
8ab8cf7
feat(layout): remove chunks panel, chat takes full width
gdccyuen Jul 30, 2026
208f67f
docs: update for 2-panel layout (sources | chat) with overlay chunks/…
gdccyuen Jul 30, 2026
3e50e0f
feat: remove demo/guest/official-library, add namespace dropdown + ea…
gdccyuen Jul 31, 2026
fed35ec
fix(chunks): render table HTML from assetUrl instead of duplicating s…
gdccyuen Jul 31, 2026
bbbe93e
fix(chunks): enrich table/image chunks with assetUrl via getChunk
gdccyuen Jul 31, 2026
0e9ec21
fix(chunks): fetch table HTML server-side to avoid CORS and DNS issues
gdccyuen Jul 31, 2026
0a0a1d7
docs: update for table chunk enrichment and Docker --add-host flag
gdccyuen Jul 31, 2026
30720d0
feat(chat): improve BM25 retrieval with reranking, multi-query, and r…
gdccyuen Jul 31, 2026
4c87f5b
docs: document BM25 reranking, multi-query guidance, and transient re…
gdccyuen Aug 1, 2026
2e2c1a5
feat(chat): foldable source sections, wand template menu from JSON, r…
gdccyuen Aug 1, 2026
9aafbab
fix(chat): label wand menu 'Prompts / Chart' and inline retrieval con…
gdccyuen Aug 1, 2026
ae514fe
feat(chat): show answer stats in the retrieval trace block
gdccyuen Aug 1, 2026
a240e6e
docs: add ADR 0011 checkpoint marker (single-user workable, pre-overh…
gdccyuen Aug 2, 2026
e6b0f6b
feat(workspaces): multi-domain workspace model with file-backed API keys
gdccyuen Aug 5, 2026
880bc56
feat(api): knowhere-keys and workspace activate/create routes
gdccyuen Aug 5, 2026
986a4d9
feat(workspaces): workspace switcher UI + Docker/docs for multi-domain
gdccyuen Aug 5, 2026
3080358
feat(auth): Notebook-owned auth core — users, account links, DB sessions
gdccyuen Aug 5, 2026
3604416
feat(auth): login page, logout, admin user CLI; drop Dashboard UI link
gdccyuen Aug 5, 2026
4e611b5
feat(auth): hard-cut Dashboard — Notebook-owned credentials and auth …
gdccyuen Aug 5, 2026
59cf868
feat(auth): login flow fixes + workspace switcher username label
gdccyuen Aug 5, 2026
adfca83
feat(auth): DB-backed encrypted API keys with settings UI (Phase 3)
gdccyuen Aug 5, 2026
702e875
docs: Phase 3 — DB-backed encrypted API keys (auth + key label conven…
gdccyuen Aug 5, 2026
105c774
feat(ux): combined workspace+namespace dropdown, user-scoped keys, em…
gdccyuen Aug 5, 2026
e9b0052
docs: AGENTS.md — user-scoped keys + workspace/namespace UX model
gdccyuen Aug 5, 2026
41f17db
fix(ux): refresh workspace dropdown after API key add/delete
gdccyuen Aug 5, 2026
974254e
fix(chat): reset chat state on workspace change; activate home worksp…
gdccyuen Aug 5, 2026
d7a2e32
feat(auth): OAuth/SSO login via Google and GitHub providers
gdccyuen Aug 5, 2026
b6dd98d
feat(workspaces): team sharing via workspace members
gdccyuen Aug 5, 2026
45744bc
docs: Phase 4 ADR (OAuth/SSO + team sharing) and AGENTS.md updates
gdccyuen Aug 5, 2026
cf0dd58
feat(auth): Dashboard SSO login via session handoff
gdccyuen Aug 5, 2026
7d162db
docs: Dashboard SSO (session handoff) + cacheComponents prerender pit…
gdccyuen Aug 5, 2026
1539ae6
docs: save session-until-knowhere-ui transcript to docs/session-notes
gdccyuen Aug 6, 2026
e23ccf9
fix(chunks/upload): chunk pane scroll, focused-only list, inline cita…
gdccyuen Aug 8, 2026
0b90c93
fix(sources): local poll fallback so self-hosted uploads resolve from…
gdccyuen Aug 8, 2026
a7af0f5
docs: handoff for page-snippet retrieval follow-ups (M1 null guard, M…
gdccyuen Aug 9, 2026
ff0dfc6
feat(chat): page-targeted retrieval (dataType 7), chunkId citations, …
gdccyuen Aug 9, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 28 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
node_modules
.next
.git
.gitignore
.env
.env.*
!.env.local.example
*.log
npm-debug.log*
.pnpm-debug.log*
coverage
playwright-report
test-results
.vscode
.idea
.DS_Store
README.md
CONTEXT.md
AGENTS.md
CLAUDE.md
docs
e2e
skills
drizzle
Dockerfile
.dockerignore
docker-compose*.yml
_repro*.js
76 changes: 45 additions & 31 deletions .env.local.example
Original file line number Diff line number Diff line change
Expand Up @@ -2,46 +2,60 @@
# Use staging when validating staging keys.
# KNOWHERE_BASE_URL=https://api-staging.knowhereto.ai

# Optional development override. When set, Notebook skips Dashboard session
# auth and Dashboard-issued JWT creation, then calls Knowhere directly with
# this key. Leave unset for production and Dashboard-authenticated staging.
# Optional development override. When set, Notebook skips session auth and
# uses the hardcoded development user, calling Knowhere directly with this
# key (or with keys from config/knowhere-keys.json). Leave unset to require
# a Notebook account.
# KNOWHERE_API_KEY=sk_your_development_key_here

# Optional path to a Knowhere API keys file (multi-domain support). When
# present, its [{ label, apiKey }] entries override the single env key.
# KNOWHERE_KEYS_FILE=./config/knowhere-keys.json

# --- Chat provider (server-side only) ---
# Vercel AI Gateway key; AI SDK picks it up automatically
# Two mutually exclusive chat backends. Chat is inert until one is configured.
#
# 1. Vercel AI Gateway (default): the AI SDK picks up this key automatically
# when the model is passed as a plain string.
AI_GATEWAY_API_KEY=vck_your_key_here

# Optional override — defaults to deepseek/deepseek-v4-flash
# CHAT_MODEL=deepseek/deepseek-v4-flash
# 2. Generic OpenAI-compatible API: point at any OpenAI-compatible endpoint
# (local LLM, self-hosted gateway, etc.) instead of the Vercel AI Gateway.
# CHAT_MODEL is MANDATORY in this mode. CHAT_API_KEY is the bearer key sent
# to that endpoint.
# CHAT_BASE_URL=http://localhost:11434/v1
# CHAT_API_KEY=sk_your_openai_compatible_key
# CHAT_MODEL=qwen-plus

# Optional override — defaults to google/gemini-3-flash
# CHAT_MODEL=google/gemini-3-flash

# --- Auth (server-side only) ---
#
# Notebook and Dashboard share a parent domain so a single session cookie
# issued by Dashboard is sent by the browser on every request to Notebook.
#
# Production: Dashboard = https://knowhereto.ai
# Notebook = https://notebook.knowhereto.ai
# Shared parent = .knowhereto.ai
#
# Local dev: Use /etc/hosts entries like
# 127.0.0.1 dashboard.local.knowhereto.ai
# 127.0.0.1 notebook.local.knowhereto.ai
# so the cookie shares the local parent too.

# Dashboard origin (scheme + host + port). Notebook hardcodes the API
# route paths since they are part of Dashboard's fixed API contract.
# prod: https://knowhereto.ai
# local: http://dashboard.local.knowhereto.ai:3000
DASHBOARD_ORIGIN=http://dashboard.local.knowhereto.ai:3000

# Public URL of this Notebook deployment (used as `callbackURL`).
# prod: https://notebook.knowhereto.ai
# local: http://notebook.local.knowhereto.ai:3001
NOTEBOOK_PUBLIC_URL=http://notebook.local.knowhereto.ai:3001
# Notebook owns its authentication: users are created by the admin CLI
# (scripts/create-user.ts), sessions are DB-backed, and the notebook-session
# cookie carries the session id.

# Optional OAuth/SSO login providers. A provider is only offered when both
# of its credentials are set. Callback URLs are derived from the request
# origin: /api/auth/<provider>/callback.
# OAUTH_GOOGLE_CLIENT_ID=...
# OAUTH_GOOGLE_CLIENT_SECRET=...
# OAUTH_GITHUB_CLIENT_ID=...
# OAUTH_GITHUB_CLIENT_SECRET=...

# Optional override of the session cookie names Dashboard sets. Defaults
# to Better Auth's standard cookie names.
# SESSION_COOKIE_NAMES=better-auth.session_token,__Secure-better-auth.session_token
# Optional Dashboard SSO: when set, the login page offers "SSO (Dashboard)".
# The browser's Dashboard session cookie (same host, any port; or a shared
# parent domain via the Dashboard's AUTH_COOKIE_DOMAIN) is forwarded to the
# Dashboard's public users.getCurrentUser endpoint to resolve the user.
# local: http://localhost:3000
# docker: http://host.docker.internal:3000
# DASHBOARD_ORIGIN=http://localhost:3000

# Public URL of this Notebook deployment (used for QStash webhook callbacks).
# prod: https://notebook.knowhereto.ai
# local: http://localhost:3001
NOTEBOOK_PUBLIC_URL=http://localhost:3001

# --- Product analytics (client-side) ---
# PostHog Project API key. When unset, Notebook skips analytics initialization.
Expand Down
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
# misc
.DS_Store
*.pem
*.swp

# debug
npm-debug.log*
Expand All @@ -36,6 +37,7 @@ yarn-error.log*
.env
.env.local
.env.*.local
.env.docker

# vercel
.vercel
Expand Down
Loading