All notable changes to DevNote will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- 🐛 Markdown in chat answers now actually renders —
marked.min.jswas being blocked with HTTP 403 by the webview sandbox in v0.5.0 because it wasn't loaded viawebview.asWebviewUri(...). Citations are clickable pills again, bold/italic/lists/code render correctly. (See AI engineering decisions log #26.)
- 💬 Chat now lives in a dedicated tab (🏠 Home / 💬 Chat) instead of stacked inputs. Reverses v0.5.0 D16 after dogfooding showed the stacked pattern felt cramped. Full-height chat with sticky bottom input, ChatGPT/Claude muscle memory. Switch between Home and Chat via the tab bar — chat history is preserved across tab switches within a session.
- Removed the left-border accent on assistant bubbles (cleaner look).
- Chat empty state is intentionally minimal — just the header and the input pinned at the bottom. The "Ask your memory…" placeholder is enough onboarding; no extra copy or buttons.
- ■ Stop button — replaces the send button while answers are streaming. Click stop → bubble freezes at current text (partial answer preserved). Send button restores when streaming finishes or user stops.
- 3-stage loading state — "Searching your notes…" → "Found N notes…" → "Generating answer…" — replaces the silent wait window between send and first token.
- Stop is currently TS-side only (worker keeps streaming, output is discarded). Python-side stream cancellation deferred to v0.6+.
- This is the first post-launch polish release in the Phase 2 arc — demonstrates the ship-then-iterate loop. D16 was reasonable at planning but real-use data overruled it.
- 💬 Chat with your memory — ask natural-language questions about your past notes, get grounded answers with citations
- New 💬 chat input in the sidebar (stacked below the existing 🔍 search input)
- Inline clickable citation pills (
[Note 1]) in chat answers — click to open the source note in the existing preview view - Light multi-turn conversations: follow-up questions resolve pronouns from the last 4 turns ("when was that?")
- Streaming token-by-token responses for snappy UX (~500ms time-to-first-token)
- "New chat" button to clear the in-session conversation
- Refusal path: when the answer isn't in your notes, DevNote replies "I don't find that in your notes" instead of guessing
- Closes the Phase 2 AI-memory arc — DevNote now captures, searches, recalls, AND converses
- Sidebar layout: search input + chat input now stack above the morphing list region (Recent Notes / Search Results / Chat)
- Description in package.json updated to reflect chat capability
- Chat uses
gemini-2.5-flash(primary) with automatic fallback togemini-2.5-flash-liteon overload/quota — same cascade pattern proven in v0.2.0 note generation - Conversations are NOT persisted across VS Code restarts — each session starts with a fresh chat. Persistent history is on the backlog for a future release.
- Retrieval reuses v0.4.0's k=5 + threshold=0.70 — single source of truth across search and chat
- Markdown renders only when the stream completes (typewriter effect during streaming, polished render at end)
- Search threshold re-calibrated for
gemini-embedding-001: raisedSEARCH_THRESHOLDfrom0.35to0.70. The higher-dimensional (3072) embeddings produce a different similarity distribution where random/unrelated queries score 0.55–0.65 — the old 0.35 floor (calibrated for 768-dim text-embedding-004) let that noise through. With 0.70, only topically-relevant matches (typically 0.75–0.95) appear in results.
- Python detection on Windows: stdout race condition in
checkPythonVersionwas causing false "Python 3.10+ not found" errors even when 3.12+ was installed. Switched from'exit'to'close'event (guarantees stdio buffers drain before parsing) and made the version regex BOM-safe. Added console logs under[PythonSetup]prefix so users can diagnose detection issues via VS Code Developer Tools if needed.
- 🔍 Semantic search over all past notes — type a natural-language query, get results ranked by meaning (not keywords)
- Search input above Recent Notes in the sidebar; morphing header shows mode
- Similarity score badge on each result (e.g.
87% · 2h) - One-time Python environment setup flow on first search (venv + pip install)
- One-time backfill indexing for existing notes (uses Gemini batch embedding API)
- "Reset Python environment" button in Settings (power-user recovery)
- "Re-index all notes" button in Settings (after embedding model changes)
- TypeScript + Python hybrid architecture — Python worker runs as a child process, JSON-RPC over stdin/stdout
- Note sync now also embeds the note locally (best-effort — failures toast a gentle warning and defer indexing to the next search)
- Sidebar idle state: Recent Notes section gains a 🔍 search input above it
- Description updated in package.json to reflect semantic search capability
- Python 3.10+ installed on your machine (DevNote will prompt on first search if missing)
- Embeddings use
gemini-embedding-001(Google AI Studio, 3072-dim, L2-normalized) via thegoogle-genai>=0.8.0SDK - Older SDK (
google-generativeai==0.8.3) used v1beta endpoint which no longer servesembedContentfor AI Studio keys; migration required for first release
- Recent Notes — your past notes now appear in the sidebar below Generate Doc, stored locally and viewable instantly without leaving VS Code
- Local SQLite storage (sql.js) — every synced note is saved to devnote.db on your machine, forming the foundation for future search and memory features
- Click any past note to preview it inline from local storage (no network needed)
- "Open in Notion" link in the preview for sharing and mobile access
- "Clear all memory" button in Settings with confirmation popup and optional backup export
- Empty state for new users: "Your notes will appear here once you generate your first one."
- Idle state now shows the Recent Notes list below the Generate Doc button
- Preview state now supports historical notes (read-only, no Save/Discard)
- Settings panel has a new "Clear all memory" section at the bottom
- NotionService.push() now returns page ID and URL for local storage
- Republish to force Open VSX to re-extract the README. v0.2.0 hit an Open VSX CDN propagation issue where
readme.mdreturned a 403 on the extension page. No code changes.
- Persistent sidebar panel — DevNote now lives in the activity bar with a dedicated brain icon
- First-time setup wizard inside the sidebar — no more separate command palette flow
- Real-time progress indicators for generation and Notion sync
- Draft recovery — unsynced notes persist across VS Code restarts and show as a banner
- Inline duplicate handling (Append / Replace / Cancel) directly in the sidebar
- Back navigation in the form, preview, and setup screens that preserves user input
- Gear icon for accessing settings any time after initial setup
- Automatic Gemini model fallback (
gemini-2.5-flash→gemini-2.5-flash-lite) when the primary model is overloaded or rate-limited
- All user interaction now happens in the sidebar instead of via input boxes and webview tabs
Ctrl+Alt+Dnow opens the sidebar and auto-triggers note generation- "Save Note" no longer makes a second Gemini call to restructure the markdown — the local serializer feeds Notion directly, halving API usage and avoiding a redundant failure point
- Sync success state now stays visible until you click "Back to Generate Doc" instead of auto-dismissing after a few seconds
- Error states now surface the underlying Gemini/Notion error message so quota, network, and auth issues are diagnosable at a glance, with friendly summaries for the common 503 overload and 429 quota cases
Ctrl+Alt+Mkeybinding (sync is automatic on Save Note)DevNote: Sync to Notioncommand (replaced by sidebar Save Note button)DevNote: Set Gemini API Keycommand (replaced by sidebar settings)DevNote: Set Notion Tokencommand (replaced by sidebar settings)- Local
custom_memory_note.mdsafety file (drafts now persist in extension state) - Separate webview preview tab (preview is in the sidebar)
- Existing users with a leftover
custom_memory_note.mdfrom v0.1.x will see it auto-converted to a draft on first sidebar open
- "Save Note" in the preview panel now auto-syncs to Notion — no need to run the sync command separately in the happy path
- Duplicate title detection: if a Notion page with the same title already exists, a popup asks you to Append, Replace, or Cancel
- New brand icon — a neural-circuit brain representing "AI memory for developers"
Ctrl+Alt+Mis now primarily a retry/manual sync command for cases when auto-sync fails or you cancel the duplicate popup- All Notion sync error messages now explicitly tell you to retry with
Ctrl+Alt+M
- Two-command flow:
Ctrl+Alt+Dto create notes,Ctrl+Alt+Mto sync to Notion - Git branch diff capture (primary) with uncommitted changes fallback
- Auto-detect base branch (main or master)
- Gemini AI note generation via
@google/generative-aiSDK - Local note storage as
custom_memory_note.md(gitignored) - Notion API integration for structured note sync
- Webview preview panel before save
- API key management via VS Code SecretStorage (Gemini + Notion)
- Error handling — never delete local file unless Notion sync succeeds
- Four commands:
DevNote: Create Dev Note,DevNote: Sync to Notion,DevNote: Set Gemini API Key,DevNote: Set Notion Token - Configuration setting:
devnote.notionDatabaseId