Skip to content

chore(release): promote 0.16.0 - #533

Closed
tomymaritano wants to merge 306 commits into
mainfrom
develop
Closed

chore(release): promote 0.16.0#533
tomymaritano wants to merge 306 commits into
mainfrom
develop

Conversation

@tomymaritano

Copy link
Copy Markdown
Collaborator

Promote develop to production for 0.16.0.

What’s New: docs/releases/v0.16.0.md (status: draft until the GitHub
release is undrafted). After merge: Actions → Release → Run workflow.
semantic-release owns the version bump and tag — do not bump by hand.

Merge with a merge commit. Do not squash. Squashing drops the feat
history and semantic-release will not cut 0.16.0.

Community Vim is live: https://github.com/dripnex/plugin-vim/releases/tag/v1.2.0

Packaged verification (edit this PR before merge)

  • Note with headings / fenced code / GFM table → log has zero tags is not iterable or [CodeMirror] plugin error
  • Long AI stream + Install Now ×3–5 → WARN dropped IPC send, no uncaught exception, app relaunches
  • API key still works after that restart; localStorage key dripnex-settings has empty ai.apiKey
  • Network blackholed → Sign In is clickable immediately; session-check error ≤ 15s
  • open "dripnex://auth/verify?token=x" right after closing the main window → no crash

tomymaritano and others added 30 commits March 11, 2026 14:42
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Track bytes sent and received across all HTTP requests for sync
history reporting.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Instrument syncNow() to create a sync_history entry for each cycle,
tracking notes/notebooks/tags pulled and pushed, conflicts, bandwidth,
and final status (success/partial/error).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Adds a pure validateConfigValue() function that validates config values
against their PluginConfigSchemaField definitions, covering boolean,
string, number (with min/max), enum (with options membership), and
range (with min/max) types. Includes 15 TDD test cases.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…ror display

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Replace unsafe `Function` type casts with explicit signatures in safePluginWrapper
- Add escapeHtml helper to prevent XSS in error marker HTML injection
- Change console.debug to console.warn in plugin stores (ESLint no-console)
- Use CSS custom properties with fallbacks for error block colors
- Add overflow-wrap: anywhere to prevent horizontal overflow on long errors
- Add default metadata backward-compatibility tests to both plugin stores

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Fix race condition in theme restore by subscribing to themeRegistryStore
  changes via useSyncExternalStore (App.tsx)
- Separate data-color-scheme (dark/light) from data-theme (plugin themes)
  to prevent attribute conflicts between useAppearanceSettings and
  useThemeOverrides
- Persist IPC nativeTheme isDark value to avoid matchMedia fallback on
  accent/zoom re-applies (useAppearanceSettings.ts)
- Fix unnecessary re-renders in useThemeOverrides by using separate
  subscriptions for activeThemeId and themes instead of creating new
  object references
- Fix type mismatch in preload theme.setSource to use union type
- Fix import order in AppearanceSection.tsx per lint rules
- Log warning on failed theme registration in PluginRegistry
- Replace disallowed console.debug with guarded console.warn in
  themeRegistryStore
- Fix Prettier formatting in SQLiteNoteRepository.ts
- Update CSS selectors in tokens.css and code-highlight.css to use
  data-color-scheme

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…try store

Introduce ThemeDefinition type, CORE_THEME_TOKENS whitelist, and
validation helpers that reject unknown CSS tokens. Add ThemeRegistry
Zustand vanilla store for registering/unregistering themes with
active theme management.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…t method

Wire theme system into the app: useThemeOverrides applies active theme
tokens to document root, and registerTheme lets plugins register full
themes through the PluginContext with proper lifecycle cleanup.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Wire up Electron's nativeTheme API so the renderer can set the theme
source (dark/light/system) and receive system theme change notifications
via IPC instead of relying solely on window.matchMedia.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
## Summary
- Clicking or following a `[[wikilink]]` whose title is not in the
library now creates that note and opens it.
- Same-note `[[#heading]]` / `[[This note#heading]]` still only jumps.
- Empty `[[]]` stays a no-op.

## Test plan
- [x] `resolveWikilinkClick` unit tests
- [ ] Preview: click an existing `[[Note]]` — still opens it
- [ ] Preview: click `[[Brand new]]` — creates `# Brand new` in the
current notebook and opens it
- [ ] Preview: click `[[#Setup]]` on the current note — jumps, does not
create
…iew (#508)

## Why
Preview ignored \`[[#heading]]\` clicks because \`data-target\` is
empty. Existing and missing \`[[wikilinks]]\` also looked the same.

## What
- Follow \`[[#heading]]\` from preview (same as the editor Cmd-click).
- Resolve titles used in the current note and mark missing ones with a
dashed style in preview and the editor.
- Highlighter no longer uses a regex (same linear scan as Cmd-click).

## Test
- \`findWikilinkSpans\` / \`parseWikilinkAt\`
- \`isMissingWikilink\`

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **New Features**
* Wikilinks are now checked against available notes and visibly marked
when unresolved.
  * Wikilink highlighting updates as note content changes.
  * Links pointing directly to headings can now be opened successfully.
* **Style**
* Missing wikilinks use distinct secondary coloring and dashed
underlines for clearer visibility.
* **Bug Fixes**
* Improved case-insensitive matching and handling of empty or
whitespace-only wikilinks.
* **Tests**
  * Added coverage for wikilink parsing and missing-link detection.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
## Why
Remaining navigation after the heading/wikilink series:

- Follow a \`[[wikilink]]\` only worked with Cmd-click
- Palette could jump notebooks and tags, not headings
- Copy link only produced \`dripnex://\`

## What
- \`Follow Link\` (Mod+Shift+Enter) follows the wikilink under the
cursor
- \`Jump to Heading\` (Mod+Shift+H) lists the current note's headings
- \`Copy Wikilink\` writes \`[[Title]]\` / \`[[Title#Heading]]\`
(actions panel + palette)

## Test
- \`wikilinkAtOffset\`, \`formatWikilink\`, palette placeholders
## Why
Wikilinks can be followed, created if missing, and styled when
unresolved. Hovering one still showed nothing about the target.

## What
- Hover a \`[[wikilink]]\` in the editor or preview to peek title +
excerpt
- Missing titles say they are not in the library; click still
creates/opens
- Delay so the card does not flash while moving the pointer

## Test
- \`resolveWikilinkPeek\`
## Why
Inkdrop text annotations are not comments. They restyle \`**bold**\` /
\`_italic_\` for one notebook via user CSS so notes stay GFM. Dripnex
had \`styles.css\` but no notebook hook on the editor.

## What
- \`data-notebook-id\` + \`notebook-{id}\` on the note, editor, and
preview
- Editor marks \`.cm-strong\` / \`.cm-em\` so the same CSS hits source
and preview
- Right-click a notebook → Copy style selector
- Example block in the \`styles.css\` scaffold

## Test
- \`notebookStyle\` unit tests
## Why
Inkdrop plugins get stock \`Button\`, \`Modal\`, and \`Dialog\` from the
component manager. Dripnex had layout zones and notifications, but a
plugin still had to invent overlay UI.

## What
- \`ctx.components\` / \`dripnex.components\`: \`Button\`, \`Modal\`,
\`Dialog\` (\`Title\` / \`Content\` / \`Actions\`)
- \`get('Dialog')\` and \`getComponentClass('Dialog')\` (Inkdrop name)
- Esc + backdrop close, focus restore, token-based styles
- Mount overlays with the existing \`layout.addComponent('modal', …)\`
zone

## Test
- Catalog lookup
- Plugin context exposes \`components\`
## Why
Inkdrop plugins do \`markdownRenderer.remarkPlugins.push(plugin)\`.
Dripnex already had the stores and \`registerRemarkPlugin\`, but not
that object.

## What
- \`ctx.markdownRenderer\` / \`dripnex.markdownRenderer\`
- \`remarkPlugins\` / \`rehypePlugins\` (push or reassign, like Inkdrop
deactivate)
- \`remarkReactComponents\` / \`remarkCodeComponents\`
- \`events.on('a:click' | 'checkbox:change')\` — same handlers as
\`preview.on\`

Backed by the existing stores. \`registerRemarkPlugin\` still works.

## Test
- push/assign remark and rehype
- element and fenced-code maps
## Why
Inkdrop plugins reach the editor via \`getActiveEditor().cm\`. Dripnex
had a safe subset (\`getContent\` / \`insertAtCursor\`) and
\`registerExtensions\`, but not the live view.

## What
- \`editor.getView()\` → CodeMirror 6 \`EditorView\` or \`null\`
- \`dripnex.getActiveEditor().cm\` is the same object (Inkdrop name)
- The safe EditorAPI is unchanged

## Test
- \`getView\` null and live

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

- **New Features**
- Editor integrations can now access the live CodeMirror editor view
through the editor API.
- Active editor information now includes its current editor view, when
available.
  - The API safely reports when an editor view is not mounted.

- **Documentation**
- Added guidance to the user initialization template describing
CodeMirror editor view usage.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
## Why
\`parseDripnexUrl\` lived in main and the renderer. The comment said to
keep them in sync.

## What
One parser in \`src/shared/parseDripnexUrl.ts\`. Main and renderer
re-export it. \`emitLocalDeepLink\` stays in the renderer.

## Test
- Shared parser cases
- Re-export smokes
## Summary
- Scan `styles/*.css` from community plugin packages (same path as
`keymaps/` and `menus/`).
- Inject the CSS while the plugin is enabled; drop it on deactivate.
- CLI `init` scaffolds `styles/index.css`; `pack` includes the folder.

## Test plan
- [x] `pnpm --filter @dripnex/plugin-api test`
- [x] `pnpm --filter @dripnex/plugin-cli test`
- [x] scanner test for `styles/index.css`
- [ ] Drop a `styles/index.css` in a linked plugin, reload, confirm the
rule applies, disable the plugin, confirm it goes away
## Summary
- Next-edit suggestions (Inkdrop NES): ghost text at the cursor from the
configured AI provider.
- **Manual** by default (\`Alt+\\\`); **Automatic** after idle;
**Disabled** off. Settings → AI.
- Tab accepts, Escape dismisses. \`editor:trigger-nes\` / \`accept-nes\`
/ \`dismiss-nes\`.
- Prompt and completion are not logged (PHI).

## Test plan
- [x] \`extractNesInsertion\` / prompt tests
- [x] settings default \`nesMode: manual\`
- [x] renderer typecheck
- [ ] Set an AI provider, Alt+\\ on a half-written list item, Tab to
accept
- [ ] Escape dismisses; Tab still indents when no ghost is showing
- [ ] Automatic mode fires after a pause; Disabled is a no-op

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **New Features**
  * Added AI-powered next-edit suggestions in the Markdown editor.
* Suggestions can be triggered manually, generated automatically after
idle time, or disabled.
* Added keyboard shortcuts and command palette actions to trigger,
accept, or dismiss suggestions.
  * Added a new settings option to choose the suggestion mode.

* **Bug Fixes**
  * Pressing Escape now dismisses active edit suggestions appropriately.

* **Tests**
  * Added coverage for suggestion parsing and settings persistence.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
## Summary
- Edit with AI stays in the selection popover. The result replaces the
selection; it does not open the AI panel.
- \`editor:edit-with-ai\` (Mod+Enter) opens the popover, including with
an empty selection (insert at cursor).
- Presets: mermaid, table, proofread, reformat, improve, summarize,
bullets, tasks, headings.
- Shared \`collectChat\` helper with the NES 8s timeout.

## Test plan
- [x] inline parse tests
- [x] NES parse still passes
- [x] renderer typecheck
- [ ] Select a paragraph, Mod+Enter, Proofread — selection is replaced
in the editor
- [ ] Custom prompt in the popover
- [ ] No API key shows an error in the popover, not the panel

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

- **New Features**
  - Added AI-assisted inline editing for selected text.
- Added actions to summarize, create bullet points, generate tasks, add
headings, and edit Mermaid content.
- Added an “Edit with AI” command with a keyboard shortcut and Command
Palette access.
  - Added loading, setup, and error feedback during AI editing.

- **Bug Fixes**
  - Improved streaming AI response handling and request timeouts.

- **Tests**
- Added coverage for prompts, context handling, Markdown fences, and
empty responses.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
## Summary
- Author \`docs/releases/v0.16.0.md\` for the unpublished 0.16.0.
- Covers the mid-August draft plus wikilinks, tables, export, NES,
inline AI, and the plugin package surface.
- Status stays \`draft\` until the GitHub release is undrafted.

This is **not** the promotion PR. That one is \`develop → main\`, titled
\`chore(release): promote 0.16.0\`, merge commit, never squash. Say go
for that separately.

## Test plan
- [x] File matches \`docs/WHATS_NEW.md\` shape (frontmatter, human
sections, no issue IDs)
- [ ] Read it once as a user before promoting
## Summary
- A theme repo is \`manifest.json\` + \`theme.json\` (token layer) +
optional \`styles/*.css\`.
- No \`main\` / JS required. Appearance already lists anything in the
theme registry.
- \`dripnex-plugin init \"Paper\" --type theme\` scaffolds it; \`pack\`
includes \`theme.json\`.

Same contract as Parchment / Wave / Night.

## Test plan
- [x] parse + apply theme.json
- [x] scanner loads a theme-only package
- [x] CLI init --type theme
- [ ] \`dripnex-plugin init Paper --type theme && dripnex-plugin link\`,
enable in Settings → Plugins, pick the card in Appearance

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **New Features**
  * Added support for theme-only plugins without JavaScript code.
  * Added theme parsing, validation, registration, and packaging.
  * Added CLI scaffolding with `--type theme` for creating new themes.
* Theme packages can include `theme.json`, styles, and optional theme
collections.
* **Bug Fixes**
* Improved plugin scanning and loading for packages that omit a main
entry.
* **Tests**
* Added coverage for theme creation, validation, scanning, registration,
and packaging.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
## Summary
- \`dripnex.themes.list() / getActive() / setActive(id) / onDidChange\`
from init.js and plugins.
- \`setActive\` persists the same way Settings → Appearance does.
- Theme tokens may include \`--cm-*\` so a community theme can color the
editor.

\`\`\`js
dripnex.themes.setActive('dripnex-parchment')
\`\`\`

## Test plan
- [x] createThemesApi + token whitelist tests
- [x] plugin-api and renderer typecheck
- [ ] In init.js: \`dripnex.themes.setActive('dripnex-wave')\`, reload
plugins, confirm Appearance and chrome match
## Summary
- Sidebar / note-list / editor chrome now share `--chrome-header-height`
and `--chrome-header-padding`, so the gear cluster sits on the same row
as All Notes.
- Sync indicator is 28px (same as `IconButton`) so it does not stretch
that row.
- Settings uses the same 44px header and traffic lights (`8, 8`) instead
of a 52px spacer.

## Test plan
- [ ] Open the main window: sync / graph / settings sit on the same
baseline as **All Notes**
- [ ] Collapse/expand the sidebar; the note-list header does not jump
- [ ] Open Settings: traffic lights and empty header match the main
chrome height

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **New Features**
* Added reusable settings controls and cards for a more consistent
settings experience.
* Added animated icon hover states and improved visual feedback when
items are moved to Trash.

* **Style**
  * Improved desktop window header alignment and spacing.
* Standardized note, sidebar, sync, and settings layouts with refined
borders, sizing, colors, focus states, and scrolling.
* Updated settings pages, navigation, groups, rows, disclosures, themes,
integrations, devices, and plugins for a more consistent appearance.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
## Why

Inkdrop v6.1 shipped 30 `editor:*` line commands and Enter that
continues a list. We had copy/move line only because CodeMirror's
default keymap binds them — they were invisible in the palette, and
Enter was a plain newline.

## What

- Palette + dispatch for the v6.1 set: copy/move line, select line,
matching bracket, subword, comments, sort, join, case, find-under, split
selection, scroll.
- Enter continues bullets, numbered lists (and renumbers), tasks (`- [
]`), and blockquotes. An empty item outdents / leaves the block. Fences
fall through.
- `<!-- -->` via `toggleComment` in Markdown (line comments still come
from the fenced language).
- Multiple selections enabled so "select all occurrences" actually adds
cursors.
- Keybindings that match Inkdrop where they don't collide:
  - Alt+↑/↓ move line, Shift+Alt+↑/↓ copy (already in CM)
- Mod+L select line, Mod+/ toggle comment, Mod+F3 find under, Alt+F3
select all
- F5/F9 sort, Ctrl+J join, Ctrl+Alt+←/→ subword (CM keymap — registry
treats Ctrl as Mod)
- **Not rebound:** Mod+Enter stays Edit with AI (`insert-blank-line` is
palette-only). Mod+Shift+Enter stays follow-link (`insert-line-before`
is palette-only). Mod+D stays duplicate note.

Independent of #522 and #523.

## Test plan

- [ ] `- item` then Enter → new `- ` sibling. Enter on an empty `- ` →
leaves the list.
- [ ] `1. a` / `2. b`, Enter at the end of a → `2. ` inserted, `b`
becomes `3.`
- [ ] `> quote` Enter continues `> `. Empty `> ` exits.
- [ ] Enter inside a fence is a normal newline.
- [ ] Select three lines, Command Palette → Sort Lines.
- [ ] Alt+↑ moves the line. Shift+Alt+↓ copies it down.
- [ ] Mod+L selects the line. Mod+/ wraps the line in `<!-- -->`.
- [ ] Palette → Join Lines on two lines. Ctrl+J does the same.
- [ ] Command Palette lists the new editor commands.

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **New Features**
* Added enhanced Markdown editing, including automatic continuation for
lists, task lists, blockquotes, and ordered-list numbering.
* Added editor commands for selecting, moving, sorting, joining,
splitting, and transforming lines and text.
* Added search-under, occurrence selection, scrolling, cursor centering,
and multiple-selection support.
* Added the new editing actions to the command palette with keyboard
shortcuts.

* **Bug Fixes**
  * Markdown comments are now recognized correctly.
* List continuation is disabled within fenced code blocks and handles
empty list items appropriately.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
## Why

The Inkdrop shot with the desk showing through the sidebar is macOS
vibrancy plus translucent chrome. Wave is a solid hex. Default stays
opaque.

## What

- Official **Glass** palette: alpha `--bg-base` / `--bg-surface` so the
desktop reads through.
- Note windows on macOS use `vibrancy: under-window`; Windows gets
acrylic. Linux stays opaque. Settings window is unchanged.
- Sidebar and note-list columns get `backdrop-filter`. The editor pane
uses `--bg-elevated` so markdown stays readable.
- Performance Low already sets `--glass-blur: 0`.

Independent of #522#527. Pick Glass from Settings → Themes (after #525)
or Appearance palettes on develop.

## Test plan

- [ ] macOS: default theme still looks solid. Switch to Glass — sidebar
is frosted, wallpaper shows through.
- [ ] Editor text stays readable on Glass.
- [ ] Performance → Low: blur goes away.
- [ ] Windows/Linux: no crash; Glass is just a translucent dark palette.
## Why

Inkdrop Preferences has a **Themes** page of its own and nests
**Install** / **Updates** under Plugins. Ours mixed palettes into
Appearance, used in-page tabs for Browse, and “Updates” only meant the
app updater.

## What

- **Themes** is a sidebar page (live palette cards). Appearance keeps
base / accent / zoom / performance.
- **Plugins** nested like Inkdrop: Installed (click Plugins),
**Install** (today’s Browse + `installFromSpec`), **Updates** (community
plugins whose registry version is newer). Badge on Updates. Not a store.
- **Keybindings** page: live command table + Open keybindings.json.

Independent of #522#524.

## Test plan

- [ ] Settings → Themes: pick Parchment / Wave / Default. Appearance
still has zoom and accent.
- [ ] Settings → Plugins shows installed built-ins. Nested **Install**
lists the catalog. Nested **Updates** is empty if everything matches, or
offers Update if a community plugin is behind.
- [ ] Settings → Keybindings lists chords. Open keybindings.json still
works.
## Summary
- Strike through checked GFM tasks in the source editor (and preview).
- Show the destination URL when hovering a markdown/autolink.
- Copy button on fenced blocks when the cursor is inside (preview on
hover too).

Inkdrop v6 ships these three in the editor; they were the leftover
source-mode gaps after line commands (#524).

## Test plan
- [x] `pnpm --filter @dripnex/commands test`
- [x] `pnpm --filter @dripnex/desktop exec vitest run
src/renderer/utils/__tests__/splitCodeLines.test.ts`
- [x] `pnpm --filter @dripnex/commands typecheck` + desktop renderer
typecheck
- [ ] In the editor: `- [x] done` strikes the text; `- [ ]` does not
- [ ] Hover `[label](https://dripnex.app)` — tooltip shows the URL
- [ ] Place the cursor inside a ` ``` ` fence — Copy appears and copies
the inner source
- [ ] Preview: hover a code block, Copy works; checked task items are
struck
## Why

Tab always indented by two spaces. That nests a bullet under `-`, but
not under `1.` (needs 3) or `10.` (needs 4). Inkdrop v6.1 fixed this
last week; we still had `indentWithTab`.

## What

- Tab / Shift-Tab indent a list item by the marker width of the item
above (`-` → 2, `1.` → 3, `10.` → 4). Descendants move with the parent.
- Numbered lists in the same region are renumbered in the same undo
step.
- List markers in the editor are colored by nesting level
(`--md-list-mark-color`, `--md-list-mark-2-color`,
`--md-list-mark-3-color`). Deeper levels cycle. Preview markers stay
text-colored unless a theme opts into `--mde-preview-list-marker-*`.
- Tables still own Tab inside a cell (plugin keymap is later). Plain
lines still fall through to `indentWithTab`.

Independent of #522.

## Test plan

- [ ] In a note: `1. parent` then `- child`. Tab on the bullet — it
should sit three spaces in and render nested.
- [ ] Shift-Tab lifts it back. One undo reverts both the indent and any
renumber.
- [ ] `1. a` / `2. b` / `3. c` — Tab on `2.` → nested `1. b`, outer `2.
c`.
- [ ] Nested bullets get a second/third marker color in the editor.
- [ ] Tab inside a table cell still moves between cells.
- [ ] Tab on a non-list line still indents by tab size.
## Why

A full-width editor makes lines too long to scan. Inkdrop’s Readable
line length caps the column.

## What

- Settings → Editor → Readable Line Length (off by default).
- Editor scroller and preview shell max-width 46rem, centered. Fence
copy chrome stays in the column.

Independent of #522#526.

## Test plan

- [ ] Toggle on: editor and preview become a centered column.
- [ ] Toggle off: they fill the pane again.
- [ ] Copy-code on a fence still sits on the fence, not off to the side.
## Why

Cmd+K was a command list. Jump notebook / tag / heading were separate
modes. Inkdrop Telescope is one bar: type a prefix, fuzzy-rank the
source.

## What

- Prefixes in the same palette: `>` commands, `b ` notebooks, `t ` tags,
`#` headings. Existing mode commands (Quick Open, Jump to Notebook, …)
stay as aliases.
- `b work` scopes to notebooks; typing `blog` does not.
- Rank by subsequence (prefix hits first), not `includes`.
- Esc clears a prefix before closing.

Independent of #522#525.

## Test plan

- [ ] Cmd+K, type `b ` — notebooks. Type `t ` — tags. Type `#` —
headings. Type `>` — commands.
- [ ] `inb` ranks Inbox. `wo` still does not match Weekly.
- [ ] Esc with `b foo` in the box clears the query; Esc again closes.
- [ ] Jump to Notebook (the old command) still opens scoped to
notebooks.

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **New Features**
* Added scoped command palette searches for commands, notebooks, tags,
and headings.
* Added fuzzy matching that ranks relevant results, including
non-contiguous matches.
  * Updated the search hint to show supported prefixes.

* **Bug Fixes**
* Improved Escape-key behavior to clear active searches before closing
the palette.
* Improved filtering, accessibility text, rendering, and keyboard
behavior for scoped searches.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
## Summary
- Replace leftover raw `Toggle` usages in MCP, Local HTTP, and plugin
cards with `SettingToggle`.
- Plugin config fields (boolean/string/number/enum/range) use the same
settings row components.
- `flush` on `SettingRow` so nested rows inside cards do not double-pad.

Editor, General, and Updates already used `SettingToggle`. This finishes
the rest.

## Test plan
- [x] `pnpm --filter @dripnex/desktop typecheck:renderer`
- [ ] Settings → Integrations: MCP enable + Allow writes look like other
settings rows
- [ ] Settings → Integrations: Local HTTP enable is the same switch
- [ ] Settings → Plugins: each card has Enabled; plugin config booleans
use the same switch
## Summary
- Update the 0.16.0 What’s New with line commands, list indent,
telescope, Glass, Themes/Plugins/Keybindings, and editor polish.
- Mirror the shipped list on the living board.

Still **draft**. Promote remains a separate \`chore(release): promote
0.16.0\` PR when you say go.

## Test plan
- [ ] Read \`docs/releases/v0.16.0.md\` — no PR numbers, feels like a
product note
- [ ] Confirm it does not claim attachments, marketplace, or clipper
## Summary

Settings chrome, native Glass, frosted palettes, and Vim as a community
plugin.

**Glass (Electron 30+ / macOS 26)**
- Vibrancy only works if `transparent: true` is set when the
`BrowserWindow` is created. `setVibrancy` on an opaque window is a
no-op.
- Clear the whole `contentView` tree (`WebContentsView` defaults to a
white fill).
- CSS `backdrop-filter` cannot see the desktop.
- Appearance → Performance **Low** turns frost off (native vibrancy +
solid fills). Auto does not.
- Appearance → **Transparency** slider (0–100) for frosted palettes.

**Palettes**
- Frosted: Glass, Midnight, Ember, Ion (`theme.frosted`).
- Light: `--cm-*` tokens so strong/wikilinks are not near-black. Accent
follows the palette (`--accent-primary`).
- Settings ↔ notes window: `activeThemeId: null` now clears the other
window’s registry (Light actually applies).

**Vim**
- Removed from built-ins. Community plugin at `dripnex/plugin-vim`
(local checkout `~/Documents/dripnex-plugin-vim`, not published yet).
- Host injects `require()` for React and `@codemirror/*` so a CJS plugin
can register CM6 extensions.

**Settings chrome (original)**
- `SettingToggle` rows do not paint a hover slab.
- Font size / family are selects.
- Action buttons use `Button`.

## Deploy / follow-up
- Producer first: this desktop PR. No server contract.
- Catalog lists `dripnex/plugin-vim` — GitHub 404 until `gh repo create
dripnex/plugin-vim` + release tarball.
- Do not squash-merge a promotion PR; this is a feature PR (squash OK).

## Test plan
- [ ] Quit Dripnex fully, restart (constructor transparency). Do not
leave DevTools docked.
- [ ] Themes → Glass / Midnight / Ember / Ion — desktop shows through
sidebar + empty editor. Reduce Transparency off in System Settings.
- [ ] Appearance → Transparency slider moves fill. Performance → Low:
solid, no frost. High: frost back.
- [ ] Appearance → Base → Light: **both** Settings and the notes window
go light. Wikilinks are teal, not black.
- [ ] Pick Ion: accent (sidebar active, toggles) is violet, not leftover
teal.
- [ ] Plugins: Vim is not built-in. Linked local plugin loads if
present.
- [ ] Plugins Enabled row: no gray hover slab. Editor font family/size
are dropdowns.
vi.stubGlobal(
'fetch',
vi.fn(async (url: string, init?: RequestInit) => {
if (typeof url === 'string' && url.includes('api.resend.com')) {
}

export function stripJsonc(source: string): string {
return source.replace(/\/\*[\s\S]*?\*\//g, '').replace(/^\s*\/\/.*$/gm, '');
continue;
}

const headingMatch = line.match(/^(#{1,6})\s+(.+?)\s*$/);
const firstLine = body.split(/\r?\n/).find(line => line.trim().length > 0);
if (!firstLine) return fallback;

const heading = firstLine.match(/^#{1,6}\s+(.+)$/);
@coderabbitai

coderabbitai Bot commented Aug 20, 2026

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 968 files, which is 868 over the limit of 100.

To get a review, reduce the PR to 100 files or fewer by splitting it into smaller PRs or changing its base branch.

Upgrade to a paid plan to raise the limit.

Usage-priced reviews support at most 300 files.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 7ce1635b-da99-460e-8c39-48e1da6fc279

📥 Commits

Reviewing files that changed from the base of the PR and between 1cb1640 and 3636875.

⛔ Files ignored due to path filters (18)
  • applogo.png is excluded by !**/*.png
  • applogo.svg is excluded by !**/*.svg
  • apps/desktop/resources/icon-dock.png is excluded by !**/*.png
  • apps/desktop/resources/icon.ico is excluded by !**/*.ico
  • apps/desktop/resources/icon.png is excluded by !**/*.png
  • apps/desktop/resources/icons/1024x1024.png is excluded by !**/*.png
  • apps/desktop/resources/icons/128x128.png is excluded by !**/*.png
  • apps/desktop/resources/icons/16x16.png is excluded by !**/*.png
  • apps/desktop/resources/icons/24x24.png is excluded by !**/*.png
  • apps/desktop/resources/icons/256x256.png is excluded by !**/*.png
  • apps/desktop/resources/icons/32x32.png is excluded by !**/*.png
  • apps/desktop/resources/icons/48x48.png is excluded by !**/*.png
  • apps/desktop/resources/icons/512x512.png is excluded by !**/*.png
  • apps/desktop/resources/icons/64x64.png is excluded by !**/*.png
  • apps/desktop/resources/logo.png is excluded by !**/*.png
  • apps/desktop/src/renderer/assets/logo.png is excluded by !**/*.png
  • packages/api/src/db/migrations.generated.ts is excluded by !**/*.generated.*
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (968)
  • .changeset/README.md
  • .changeset/config.json
  • .changeset/shared-markdown-scan.md
  • .coderabbit.yaml
  • .github/CONTRIBUTING.md
  • .github/FUNDING.yml
  • .github/ISSUE_TEMPLATE/bug_report.md
  • .github/ISSUE_TEMPLATE/config.yml
  • .github/ISSUE_TEMPLATE/feature_request.md
  • .github/RELEASE.md
  • .github/workflows/automerge.yml
  • .github/workflows/build.yml
  • .github/workflows/ci.yml
  • .github/workflows/codeql.yml
  • .github/workflows/deploy-api.yml
  • .github/workflows/docs.yml
  • .github/workflows/pr-title.yml
  • .github/workflows/release.yml
  • .gitignore
  • .mcp.json
  • .prettierignore
  • CHANGELOG.md
  • CLAUDE.md
  • CODE_OF_CONDUCT.md
  • CONTRIBUTING.md
  • README.md
  • ROADMAP.md
  • SECURITY.md
  • apps/desktop/RELEASES.md
  • apps/desktop/e2e/README.md
  • apps/desktop/e2e/fixtures.ts
  • apps/desktop/e2e/notes.spec.ts
  • apps/desktop/e2e/smoke.spec.ts
  • apps/desktop/e2e/tables.spec.ts
  • apps/desktop/electron-vite.config.ts
  • apps/desktop/electron.vite.config.ts
  • apps/desktop/package.json
  • apps/desktop/playwright.config.ts
  • apps/desktop/resources/ICONS.md
  • apps/desktop/resources/icon.icns
  • apps/desktop/src/main/__mocks__/electron.ts
  • apps/desktop/src/main/ai/__tests__/github-tools.test.ts
  • apps/desktop/src/main/ai/__tests__/hybrid-retriever.test.ts
  • apps/desktop/src/main/ai/__tests__/indexer.test.ts
  • apps/desktop/src/main/ai/__tests__/inferred-graph.test.ts
  • apps/desktop/src/main/ai/__tests__/ipc-ai.test.ts
  • apps/desktop/src/main/ai/__tests__/passages.test.ts
  • apps/desktop/src/main/ai/built-in-tools.ts
  • apps/desktop/src/main/ai/embed-runtime.ts
  • apps/desktop/src/main/ai/github-tools.ts
  • apps/desktop/src/main/ai/hybrid-retriever.ts
  • apps/desktop/src/main/ai/indexer.ts
  • apps/desktop/src/main/ai/inferred-graph.ts
  • apps/desktop/src/main/ai/ipc-ai.ts
  • apps/desktop/src/main/ai/kb-ipc.ts
  • apps/desktop/src/main/ai/passages.ts
  • apps/desktop/src/main/ai/setup.ts
  • apps/desktop/src/main/devRenderer.ts
  • apps/desktop/src/main/handlers/__tests__/editorHandlers.test.ts
  • apps/desktop/src/main/handlers/authSyncHandlers.ts
  • apps/desktop/src/main/handlers/clipboardHandlers.ts
  • apps/desktop/src/main/handlers/dataHandlers.ts
  • apps/desktop/src/main/handlers/editorHandlers.ts
  • apps/desktop/src/main/handlers/gitHandlers.ts
  • apps/desktop/src/main/handlers/htmlTitle.ts
  • apps/desktop/src/main/handlers/licenseHandlers.ts
  • apps/desktop/src/main/handlers/localServerHandlers.ts
  • apps/desktop/src/main/handlers/noteHandlers.ts
  • apps/desktop/src/main/handlers/noteSnapshot.ts
  • apps/desktop/src/main/handlers/notebookHandlers.ts
  • apps/desktop/src/main/handlers/pluginHandlers.ts
  • apps/desktop/src/main/handlers/types.ts
  • apps/desktop/src/main/handlers/updateHandlers.ts
  • apps/desktop/src/main/index.ts
  • apps/desktop/src/main/integrations/github/__tests__/service.test.ts
  • apps/desktop/src/main/integrations/github/ipc.ts
  • apps/desktop/src/main/integrations/github/service.ts
  • apps/desktop/src/main/integrations/onepassword/__tests__/service.test.ts
  • apps/desktop/src/main/integrations/onepassword/ipc.ts
  • apps/desktop/src/main/integrations/onepassword/service.ts
  • apps/desktop/src/main/integrations/register.ts
  • apps/desktop/src/main/logger.ts
  • apps/desktop/src/main/network/navigation.ts
  • apps/desktop/src/main/network/ssrf.ts
  • apps/desktop/src/main/pluginScanner.ts
  • apps/desktop/src/main/pluginWatcher.ts
  • apps/desktop/src/main/plugins/__tests__/extractArchive.test.ts
  • apps/desktop/src/main/plugins/__tests__/githubInstall.test.ts
  • apps/desktop/src/main/plugins/__tests__/pluginScanner.test.ts
  • apps/desktop/src/main/plugins/extractArchive.ts
  • apps/desktop/src/main/plugins/githubInstall.ts
  • apps/desktop/src/main/sentry.ts
  • apps/desktop/src/main/services/__tests__/apiClient.test.ts
  • apps/desktop/src/main/services/__tests__/changeLog.test.ts
  • apps/desktop/src/main/services/__tests__/gitRemote.test.ts
  • apps/desktop/src/main/services/__tests__/session.test.ts
  • apps/desktop/src/main/services/__tests__/tokenStorage.test.ts
  • apps/desktop/src/main/services/apiClient.ts
  • apps/desktop/src/main/services/encryptionService.ts
  • apps/desktop/src/main/services/fileLicenseStorage.ts
  • apps/desktop/src/main/services/gitRemote.ts
  • apps/desktop/src/main/services/gitService.ts
  • apps/desktop/src/main/services/localIdentity.ts
  • apps/desktop/src/main/services/localServer.ts
  • apps/desktop/src/main/services/mcpLaunch.ts
  • apps/desktop/src/main/services/mcpWrites.ts
  • apps/desktop/src/main/services/printNote.ts
  • apps/desktop/src/main/services/session.ts
  • apps/desktop/src/main/services/sync/SyncService.ts
  • apps/desktop/src/main/services/sync/__tests__/cursorStore.test.ts
  • apps/desktop/src/main/services/sync/__tests__/envelope.test.ts
  • apps/desktop/src/main/services/sync/__tests__/resolveNoteConflict.test.ts
  • apps/desktop/src/main/services/sync/cursorStore.ts
  • apps/desktop/src/main/services/sync/envelope.ts
  • apps/desktop/src/main/services/sync/index.ts
  • apps/desktop/src/main/services/sync/resolveNoteConflict.ts
  • apps/desktop/src/main/services/sync/types.ts
  • apps/desktop/src/main/services/tokenStorage.ts
  • apps/desktop/src/main/tsconfig.json
  • apps/desktop/src/main/userHackFiles.ts
  • apps/desktop/src/main/windows/__tests__/deepLink.test.ts
  • apps/desktop/src/main/windows/applicationMenu.ts
  • apps/desktop/src/main/windows/authDeepLink.ts
  • apps/desktop/src/main/windows/broadcast.ts
  • apps/desktop/src/main/windows/closable.ts
  • apps/desktop/src/main/windows/deepLink.ts
  • apps/desktop/src/main/windows/developmentMode.ts
  • apps/desktop/src/main/windows/flushEditors.ts
  • apps/desktop/src/main/windows/icons.ts
  • apps/desktop/src/main/windows/mainWindow.ts
  • apps/desktop/src/main/windows/noteWindow.ts
  • apps/desktop/src/main/windows/paths.ts
  • apps/desktop/src/main/windows/quickCaptureWindow.ts
  • apps/desktop/src/main/windows/register.ts
  • apps/desktop/src/main/windows/settingsWindow.ts
  • apps/desktop/src/main/windows/vibrancy.ts
  • apps/desktop/src/preload/api/ai.ts
  • apps/desktop/src/preload/api/app.ts
  • apps/desktop/src/preload/api/auth.ts
  • apps/desktop/src/preload/api/data.ts
  • apps/desktop/src/preload/api/git.ts
  • apps/desktop/src/preload/api/index.ts
  • apps/desktop/src/preload/api/integrations.ts
  • apps/desktop/src/preload/api/localServer.ts
  • apps/desktop/src/preload/api/notebooks.ts
  • apps/desktop/src/preload/api/notes.ts
  • apps/desktop/src/preload/api/plugins.ts
  • apps/desktop/src/preload/api/types.ts
  • apps/desktop/src/preload/index.ts
  • apps/desktop/src/renderer/App.tsx
  • apps/desktop/src/renderer/components/ColorPicker/ColorPicker.tsx
  • apps/desktop/src/renderer/components/ColorPicker/ColorPickerModal.module.css
  • apps/desktop/src/renderer/components/ColorPicker/ColorPickerModal.tsx
  • apps/desktop/src/renderer/components/ColorPicker/index.ts
  • apps/desktop/src/renderer/components/CommandPalette.module.css
  • apps/desktop/src/renderer/components/CommandPalette.tsx
  • apps/desktop/src/renderer/components/ErrorBoundary/ErrorBoundary.tsx
  • apps/desktop/src/renderer/components/GraphInspector.tsx
  • apps/desktop/src/renderer/components/GraphView.css
  • apps/desktop/src/renderer/components/GraphView.module.css
  • apps/desktop/src/renderer/components/GraphView.tsx
  • apps/desktop/src/renderer/components/ImageLightbox.module.css
  • apps/desktop/src/renderer/components/ImageLightbox.tsx
  • apps/desktop/src/renderer/components/MarkdownEditor.module.css
  • apps/desktop/src/renderer/components/MarkdownEditor.tsx
  • apps/desktop/src/renderer/components/NoteEditor.module.css
  • apps/desktop/src/renderer/components/NoteEditor.tsx
  • apps/desktop/src/renderer/components/NoteList.module.css
  • apps/desktop/src/renderer/components/NoteList.tsx
  • apps/desktop/src/renderer/components/NoteListContextMenu/NoteListContextMenu.tsx
  • apps/desktop/src/renderer/components/NoteListFilterBar.module.css
  • apps/desktop/src/renderer/components/NoteListFilterBar.tsx
  • apps/desktop/src/renderer/components/NoteWindow.css
  • apps/desktop/src/renderer/components/NoteWindow.tsx
  • apps/desktop/src/renderer/components/NotebookPicker/NotebookPicker.module.css
  • apps/desktop/src/renderer/components/NotebookPicker/NotebookPicker.tsx
  • apps/desktop/src/renderer/components/QuickCapture.tsx
  • apps/desktop/src/renderer/components/TemplatePicker/TemplatePicker.tsx
  • apps/desktop/src/renderer/components/TemplatePicker/index.ts
  • apps/desktop/src/renderer/components/TitleInput.tsx
  • apps/desktop/src/renderer/components/Toast.module.css
  • apps/desktop/src/renderer/components/Toast.tsx
  • apps/desktop/src/renderer/components/UpdateBanner.tsx
  • apps/desktop/src/renderer/components/UserKeymap.tsx
  • apps/desktop/src/renderer/components/UserStyles.tsx
  • apps/desktop/src/renderer/components/Welcome.module.css
  • apps/desktop/src/renderer/components/Welcome.tsx
  • apps/desktop/src/renderer/components/ai/AiMessage.tsx
  • apps/desktop/src/renderer/components/ai/AiPanel.module.css
  • apps/desktop/src/renderer/components/ai/AiPanel.tsx
  • apps/desktop/src/renderer/components/ai/AiPanelHeader.tsx
  • apps/desktop/src/renderer/components/ai/ToolCallBlock.tsx
  • apps/desktop/src/renderer/components/ai/__tests__/askNotesCopy.test.ts
  • apps/desktop/src/renderer/components/ai/askNotesCopy.ts
  • apps/desktop/src/renderer/components/ai/humanizeAiError.ts
  • apps/desktop/src/renderer/components/ai/resolveAiAuth.ts
  • apps/desktop/src/renderer/components/ai/sc.ts
  • apps/desktop/src/renderer/components/ai/types.ts
  • apps/desktop/src/renderer/components/ai/useAiCommand.ts
  • apps/desktop/src/renderer/components/ai/useAiKeyHydration.ts
  • apps/desktop/src/renderer/components/ai/useAiStream.ts
  • apps/desktop/src/renderer/components/auth/AuthGate.module.css
  • apps/desktop/src/renderer/components/auth/AuthGate.tsx
  • apps/desktop/src/renderer/components/auth/LoginBackdrop.tsx
  • apps/desktop/src/renderer/components/auth/MagicLinkFlow.tsx
  • apps/desktop/src/renderer/components/editor/ActionsPanel/ActionsPanel.tsx
  • apps/desktop/src/renderer/components/editor/BacklinksPanel/BacklinksPanel.tsx
  • apps/desktop/src/renderer/components/editor/EditorChrome.tsx
  • apps/desktop/src/renderer/components/editor/EditorHeader.tsx
  • apps/desktop/src/renderer/components/editor/EditorViewToggle.tsx
  • apps/desktop/src/renderer/components/editor/FenceBlock.tsx
  • apps/desktop/src/renderer/components/editor/FormattingToolbar.module.css
  • apps/desktop/src/renderer/components/editor/FormattingToolbar.tsx
  • apps/desktop/src/renderer/components/editor/KindDropdown.tsx
  • apps/desktop/src/renderer/components/editor/MarkdownPreview.module.css
  • apps/desktop/src/renderer/components/editor/MarkdownPreview.tsx
  • apps/desktop/src/renderer/components/editor/NotebookSelector.tsx
  • apps/desktop/src/renderer/components/editor/OutlinePanel.module.css
  • apps/desktop/src/renderer/components/editor/OutlinePanel.tsx
  • apps/desktop/src/renderer/components/editor/PreviewFindBar.module.css
  • apps/desktop/src/renderer/components/editor/PreviewFindBar.tsx
  • apps/desktop/src/renderer/components/editor/RevisionHistoryPanel/RevisionHistoryPanel.tsx
  • apps/desktop/src/renderer/components/editor/SelectionToolbar.module.css
  • apps/desktop/src/renderer/components/editor/SelectionToolbar.tsx
  • apps/desktop/src/renderer/components/editor/StatusDropdown.tsx
  • apps/desktop/src/renderer/components/editor/TagsInput.tsx
  • apps/desktop/src/renderer/components/editor/UrlPastePicker.module.css
  • apps/desktop/src/renderer/components/editor/UrlPastePicker.tsx
  • apps/desktop/src/renderer/components/editor/WikilinkPeek.module.css
  • apps/desktop/src/renderer/components/editor/WikilinkPeek.tsx
  • apps/desktop/src/renderer/components/editor/__tests__/listMarkDecorations.test.ts
  • apps/desktop/src/renderer/components/editor/editorHeader.module.css
  • apps/desktop/src/renderer/components/editor/index.ts
  • apps/desktop/src/renderer/components/editor/listMarkDecorations.ts
  • apps/desktop/src/renderer/components/editor/sc.ts
  • apps/desktop/src/renderer/components/editor/slashCompletions.ts
  • apps/desktop/src/renderer/components/editorTheme.ts
  • apps/desktop/src/renderer/components/git/CommitHistory.module.css
  • apps/desktop/src/renderer/components/git/CommitHistory.tsx
  • apps/desktop/src/renderer/components/noteEditorSc.ts
  • apps/desktop/src/renderer/components/sidebar/NotebookCreateForm.tsx
  • apps/desktop/src/renderer/components/sidebar/NotebookCreateModal.tsx
  • apps/desktop/src/renderer/components/sidebar/NotebookIconPicker.tsx
  • apps/desktop/src/renderer/components/sidebar/NotebookItem.tsx
  • apps/desktop/src/renderer/components/sidebar/NotebookList.tsx
  • apps/desktop/src/renderer/components/sidebar/Sidebar.tsx
  • apps/desktop/src/renderer/components/sidebar/SidebarBreadcrumb.tsx
  • apps/desktop/src/renderer/components/sidebar/SidebarFooter.tsx
  • apps/desktop/src/renderer/components/sidebar/SidebarHeader.tsx
  • apps/desktop/src/renderer/components/sidebar/SidebarQuickFilters.tsx
  • apps/desktop/src/renderer/components/sidebar/SidebarSection.tsx
  • apps/desktop/src/renderer/components/sidebar/StatusFilters.tsx
  • apps/desktop/src/renderer/components/sidebar/StatusGlyph.tsx
  • apps/desktop/src/renderer/components/sidebar/TagsContextMenu/TagsContextMenu.tsx
  • apps/desktop/src/renderer/components/sidebar/TagsList.tsx
  • apps/desktop/src/renderer/components/sidebar/notebookIcons.ts
  • apps/desktop/src/renderer/components/sidebar/sc.ts
  • apps/desktop/src/renderer/components/sidebar/sidebar.module.css
  • apps/desktop/src/renderer/components/sync/ConflictResolver.module.css
  • apps/desktop/src/renderer/components/sync/ConflictResolver.tsx
  • apps/desktop/src/renderer/components/sync/EnableSyncModal.tsx
  • apps/desktop/src/renderer/components/sync/EnableSyncSteps.tsx
  • apps/desktop/src/renderer/components/sync/LoginModal.module.css
  • apps/desktop/src/renderer/components/sync/PassphraseCreateForm.module.css
  • apps/desktop/src/renderer/components/sync/PassphraseCreateForm.tsx
  • apps/desktop/src/renderer/components/sync/SaveToOnePasswordButton.module.css
  • apps/desktop/src/renderer/components/sync/SaveToOnePasswordButton.tsx
  • apps/desktop/src/renderer/components/sync/SyncStatusIndicator.module.css
  • apps/desktop/src/renderer/components/sync/SyncStatusIndicator.tsx
  • apps/desktop/src/renderer/contexts/LicenseContext.tsx
  • apps/desktop/src/renderer/css-modules.d.ts
  • apps/desktop/src/renderer/data/__tests__/nowBoard.test.ts
  • apps/desktop/src/renderer/data/defaultTemplates.ts
  • apps/desktop/src/renderer/data/nowBoard.md
  • apps/desktop/src/renderer/data/nowBoard.ts
  • apps/desktop/src/renderer/editor/ai/collectChat.ts
  • apps/desktop/src/renderer/editor/editorPolish.ts
  • apps/desktop/src/renderer/editor/inlineAi/__tests__/parse.test.ts
  • apps/desktop/src/renderer/editor/inlineAi/parse.ts
  • apps/desktop/src/renderer/editor/inlineAi/request.ts
  • apps/desktop/src/renderer/editor/nes/__tests__/parse.test.ts
  • apps/desktop/src/renderer/editor/nes/extension.ts
  • apps/desktop/src/renderer/editor/nes/index.ts
  • apps/desktop/src/renderer/editor/nes/parse.ts
  • apps/desktop/src/renderer/editor/nes/request.ts
  • apps/desktop/src/renderer/editor/nes/types.ts
  • apps/desktop/src/renderer/hooks/__tests__/useAutoSave.test.ts
  • apps/desktop/src/renderer/hooks/useAppCommands.ts
  • apps/desktop/src/renderer/hooks/useAppearanceSettings.ts
  • apps/desktop/src/renderer/hooks/useAutoSave.ts
  • apps/desktop/src/renderer/hooks/useCommandKeybindings.ts
  • apps/desktop/src/renderer/hooks/useCommandRegistry.ts
  • apps/desktop/src/renderer/hooks/useDeepLinks.ts
  • apps/desktop/src/renderer/hooks/useEmbedResolver.ts
  • apps/desktop/src/renderer/hooks/useLinks.ts
  • apps/desktop/src/renderer/hooks/useManualTags.ts
  • apps/desktop/src/renderer/hooks/useMcpLocalPath.ts
  • apps/desktop/src/renderer/hooks/useNavigation.ts
  • apps/desktop/src/renderer/hooks/useNoteActions.ts
  • apps/desktop/src/renderer/hooks/useNotebooks.ts
  • apps/desktop/src/renderer/hooks/useNotes.ts
  • apps/desktop/src/renderer/hooks/useNowBoard.ts
  • apps/desktop/src/renderer/hooks/useOfficialThemes.ts
  • apps/desktop/src/renderer/hooks/usePerformanceMode.ts
  • apps/desktop/src/renderer/hooks/usePluginRuntime.tsx
  • apps/desktop/src/renderer/hooks/usePluginStoreBridge.ts
  • apps/desktop/src/renderer/hooks/useRefreshOnWindowFocus.ts
  • apps/desktop/src/renderer/hooks/useRegisterAiCommands.ts
  • apps/desktop/src/renderer/hooks/useRegisterAppCommands.ts
  • apps/desktop/src/renderer/hooks/useRegisterPluginAiCommands.ts
  • apps/desktop/src/renderer/hooks/useResizableLayout.ts
  • apps/desktop/src/renderer/hooks/useResolvedWikilinkTargets.ts
  • apps/desktop/src/renderer/hooks/useWikilinkPeek.ts
  • apps/desktop/src/renderer/index.html
  • apps/desktop/src/renderer/integrations/OnePasswordMark.tsx
  • apps/desktop/src/renderer/integrations/__tests__/host.test.ts
  • apps/desktop/src/renderer/integrations/host.ts
  • apps/desktop/src/renderer/integrations/onepassword.ts
  • apps/desktop/src/renderer/lib/__tests__/knowledge.test.ts
  • apps/desktop/src/renderer/lib/__tests__/remarkFenceMeta.test.ts
  • apps/desktop/src/renderer/lib/__tests__/remarkGithubAlert.test.ts
  • apps/desktop/src/renderer/lib/coreRemarkPlugins.ts
  • apps/desktop/src/renderer/lib/cssm.ts
  • apps/desktop/src/renderer/lib/knowledge.ts
  • apps/desktop/src/renderer/lib/remarkFenceMeta.ts
  • apps/desktop/src/renderer/lib/remarkGithubAlert.ts
  • apps/desktop/src/renderer/main.tsx
  • apps/desktop/src/renderer/pages/settings/SettingsApp.module.css
  • apps/desktop/src/renderer/pages/settings/SettingsApp.tsx
  • apps/desktop/src/renderer/pages/settings/ai/ProviderConnect.module.css
  • apps/desktop/src/renderer/pages/settings/ai/ProviderConnect.tsx
  • apps/desktop/src/renderer/pages/settings/ai/ProviderMark.module.css
  • apps/desktop/src/renderer/pages/settings/ai/ProviderMark.tsx
  • apps/desktop/src/renderer/pages/settings/ai/SaveProviderKey.tsx
  • apps/desktop/src/renderer/pages/settings/ai/__tests__/SaveProviderKey.test.ts
  • apps/desktop/src/renderer/pages/settings/ai/providers.ts
  • apps/desktop/src/renderer/pages/settings/components/SettingDisclosure.module.css
  • apps/desktop/src/renderer/pages/settings/components/SettingDisclosure.tsx
  • apps/desktop/src/renderer/pages/settings/components/SettingGroup.module.css
  • apps/desktop/src/renderer/pages/settings/components/SettingNumber.tsx
  • apps/desktop/src/renderer/pages/settings/components/SettingRow.module.css
  • apps/desktop/src/renderer/pages/settings/components/SettingRow.tsx
  • apps/desktop/src/renderer/pages/settings/components/SettingSelect.tsx
  • apps/desktop/src/renderer/pages/settings/components/SettingText.tsx
  • apps/desktop/src/renderer/pages/settings/components/SettingToggle.tsx
  • apps/desktop/src/renderer/pages/settings/components/SettingsCard.module.css
  • apps/desktop/src/renderer/pages/settings/components/SettingsCard.tsx
  • apps/desktop/src/renderer/pages/settings/components/SettingsPage.module.css
  • apps/desktop/src/renderer/pages/settings/components/SettingsPage.tsx
  • apps/desktop/src/renderer/pages/settings/components/SettingsSidebar.module.css
  • apps/desktop/src/renderer/pages/settings/components/SettingsSidebar.tsx
  • apps/desktop/src/renderer/pages/settings/components/controls.module.css
  • apps/desktop/src/renderer/pages/settings/components/controls.tsx
  • apps/desktop/src/renderer/pages/settings/components/controls/Controls.module.css
  • apps/desktop/src/renderer/pages/settings/components/controls/NumberInput.tsx
  • apps/desktop/src/renderer/pages/settings/components/controls/Select.tsx
  • apps/desktop/src/renderer/pages/settings/components/controls/TextInput.tsx
  • apps/desktop/src/renderer/pages/settings/components/controls/Toggle.tsx
  • apps/desktop/src/renderer/pages/settings/components/controls/index.ts
  • apps/desktop/src/renderer/pages/settings/sections/AboutSection.tsx
  • apps/desktop/src/renderer/pages/settings/sections/AccountSection.tsx
  • apps/desktop/src/renderer/pages/settings/sections/AiProviders.module.css
  • apps/desktop/src/renderer/pages/settings/sections/AiSection.tsx
  • apps/desktop/src/renderer/pages/settings/sections/AppearanceSection.tsx
  • apps/desktop/src/renderer/pages/settings/sections/AppearanceThemes.module.css
  • apps/desktop/src/renderer/pages/settings/sections/BackupSection.tsx
  • apps/desktop/src/renderer/pages/settings/sections/DevicesSection.module.css
  • apps/desktop/src/renderer/pages/settings/sections/DevicesSection.tsx
  • apps/desktop/src/renderer/pages/settings/sections/EditorSection.tsx
  • apps/desktop/src/renderer/pages/settings/sections/EncryptionSection.tsx
  • apps/desktop/src/renderer/pages/settings/sections/GeneralSection.tsx
  • apps/desktop/src/renderer/pages/settings/sections/GitHubCard.tsx
  • apps/desktop/src/renderer/pages/settings/sections/IntegrationsSection.module.css
  • apps/desktop/src/renderer/pages/settings/sections/IntegrationsSection.tsx
  • apps/desktop/src/renderer/pages/settings/sections/Keybindings.module.css
  • apps/desktop/src/renderer/pages/settings/sections/KeybindingsSection.tsx
  • apps/desktop/src/renderer/pages/settings/sections/LocalHttpCard.tsx
  • apps/desktop/src/renderer/pages/settings/sections/McpCard.tsx
  • apps/desktop/src/renderer/pages/settings/sections/Section.module.css
  • apps/desktop/src/renderer/pages/settings/sections/ThemesSection.tsx
  • apps/desktop/src/renderer/pages/settings/sections/UpdatesSection.tsx
  • apps/desktop/src/renderer/pages/settings/sections/plugins/BrowseTab.tsx
  • apps/desktop/src/renderer/pages/settings/sections/plugins/PluginCard.tsx
  • apps/desktop/src/renderer/pages/settings/sections/plugins/PluginInspector.tsx
  • apps/desktop/src/renderer/pages/settings/sections/plugins/Plugins.module.css
  • apps/desktop/src/renderer/pages/settings/sections/plugins/UpdatesTab.tsx
  • apps/desktop/src/renderer/pages/settings/sections/plugins/__tests__/version.test.ts
  • apps/desktop/src/renderer/pages/settings/sections/plugins/communityCatalog.ts
  • apps/desktop/src/renderer/pages/settings/sections/plugins/index.tsx
  • apps/desktop/src/renderer/pages/settings/sections/plugins/types.ts
  • apps/desktop/src/renderer/pages/settings/sections/plugins/version.ts
  • apps/desktop/src/renderer/pages/settings/sections/themes/PaletteCard.tsx
  • apps/desktop/src/renderer/plugins/__tests__/buildAppStoreSnapshot.test.ts
  • apps/desktop/src/renderer/plugins/__tests__/math.test.ts
  • apps/desktop/src/renderer/plugins/__tests__/pasteAsLink.test.ts
  • apps/desktop/src/renderer/plugins/__tests__/tables.test.ts
  • apps/desktop/src/renderer/plugins/__tests__/vim.test.ts
  • apps/desktop/src/renderer/plugins/activeLineHighlight.ts
  • apps/desktop/src/renderer/plugins/aiAssistant.tsx
  • apps/desktop/src/renderer/plugins/buildAppStoreSnapshot.ts
  • apps/desktop/src/renderer/plugins/emojiShortcodes.ts
  • apps/desktop/src/renderer/plugins/exportDocument.ts
  • apps/desktop/src/renderer/plugins/exportMarkdown.ts
  • apps/desktop/src/renderer/plugins/focusMode.ts
  • apps/desktop/src/renderer/plugins/index.ts
  • apps/desktop/src/renderer/plugins/math.tsx
  • apps/desktop/src/renderer/plugins/mathRender.ts
  • apps/desktop/src/renderer/plugins/mermaid.tsx
  • apps/desktop/src/renderer/plugins/motion.ts
  • apps/desktop/src/renderer/plugins/pasteAsLink.ts
  • apps/desktop/src/renderer/plugins/pluginRequire.ts
  • apps/desktop/src/renderer/plugins/readingTime.tsx
  • apps/desktop/src/renderer/plugins/tables.module.css
  • apps/desktop/src/renderer/plugins/tables.tsx
  • apps/desktop/src/renderer/plugins/typewriterMode.ts
  • apps/desktop/src/renderer/plugins/vimMode.tsx
  • apps/desktop/src/renderer/plugins/wordCount.tsx
  • apps/desktop/src/renderer/sentry.ts
  • apps/desktop/src/renderer/settings.html
  • apps/desktop/src/renderer/stores/__tests__/editorPreferencesStore.test.ts
  • apps/desktop/src/renderer/stores/__tests__/navigationStore.test.ts
  • apps/desktop/src/renderer/stores/__tests__/notebookExpandStore.test.ts
  • apps/desktop/src/renderer/stores/authStore.ts
  • apps/desktop/src/renderer/stores/editorPreferencesStore.ts
  • apps/desktop/src/renderer/stores/headingJumpStore.ts
  • apps/desktop/src/renderer/stores/navigationStore.ts
  • apps/desktop/src/renderer/stores/notebookExpandStore.ts
  • apps/desktop/src/renderer/stores/pluginRuntimeStore.ts
  • apps/desktop/src/renderer/stores/previewFindStore.ts
  • apps/desktop/src/renderer/stores/settings/__tests__/settingsStore.test.ts
  • apps/desktop/src/renderer/stores/settings/schema.ts
  • apps/desktop/src/renderer/stores/settings/settingsStore.ts
  • apps/desktop/src/renderer/stores/shareStore.ts
  • apps/desktop/src/renderer/stores/syncStore.ts
  • apps/desktop/src/renderer/stores/tagColorsStore.ts
  • apps/desktop/src/renderer/styles/README.md
  • apps/desktop/src/renderer/styles/code-highlight.css
  • apps/desktop/src/renderer/styles/global.css
  • apps/desktop/src/renderer/styles/preview.css
  • apps/desktop/src/renderer/styles/tables.css
  • apps/desktop/src/renderer/themes/officialThemes.ts
  • apps/desktop/src/renderer/tsconfig.json
  • apps/desktop/src/renderer/ui/README.md
  • apps/desktop/src/renderer/ui/icons/Icon.tsx
  • apps/desktop/src/renderer/ui/primitives/Field.module.css
  • apps/desktop/src/renderer/ui/primitives/Field.tsx
  • apps/desktop/src/renderer/ui/primitives/IconButton.module.css
  • apps/desktop/src/renderer/ui/primitives/IconButton.tsx
  • apps/desktop/src/renderer/ui/primitives/Input.module.css
  • apps/desktop/src/renderer/ui/primitives/Input.tsx
  • apps/desktop/src/renderer/ui/primitives/NumberInput.tsx
  • apps/desktop/src/renderer/ui/primitives/Select.module.css
  • apps/desktop/src/renderer/ui/primitives/Select.tsx
  • apps/desktop/src/renderer/ui/primitives/Toggle.module.css
  • apps/desktop/src/renderer/ui/primitives/Toggle.tsx
  • apps/desktop/src/renderer/ui/primitives/index.ts
  • apps/desktop/src/renderer/ui/tokens/palette.ts
  • apps/desktop/src/renderer/ui/tokens/tokens.css
  • apps/desktop/src/renderer/utils/__tests__/colorUtils.test.ts
  • apps/desktop/src/renderer/utils/__tests__/commandContext.test.ts
  • apps/desktop/src/renderer/utils/__tests__/conflictCopy.test.ts
  • apps/desktop/src/renderer/utils/__tests__/emergencyKit.test.ts
  • apps/desktop/src/renderer/utils/__tests__/followWikilinkAtCursor.test.ts
  • apps/desktop/src/renderer/utils/__tests__/formatWikilink.test.ts
  • apps/desktop/src/renderer/utils/__tests__/isMissingWikilink.test.ts
  • apps/desktop/src/renderer/utils/__tests__/listOptionsFromNav.test.ts
  • apps/desktop/src/renderer/utils/__tests__/mcpSnippets.test.ts
  • apps/desktop/src/renderer/utils/__tests__/noteHistory.test.ts
  • apps/desktop/src/renderer/utils/__tests__/noteListKeys.test.ts
  • apps/desktop/src/renderer/utils/__tests__/notebookStyle.test.ts
  • apps/desktop/src/renderer/utils/__tests__/notebookTree.test.ts
  • apps/desktop/src/renderer/utils/__tests__/onePasswordCsv.test.ts
  • apps/desktop/src/renderer/utils/__tests__/openBothConflict.test.ts
  • apps/desktop/src/renderer/utils/__tests__/outlineActive.test.ts
  • apps/desktop/src/renderer/utils/__tests__/paletteQuery.test.ts
  • apps/desktop/src/renderer/utils/__tests__/parseDripnexUrl.test.ts
  • apps/desktop/src/renderer/utils/__tests__/parseNoteSearch.test.ts
  • apps/desktop/src/renderer/utils/__tests__/passphrase.test.ts
  • apps/desktop/src/renderer/utils/__tests__/previewFind.test.ts
  • apps/desktop/src/renderer/utils/__tests__/resolveWikilinkClick.test.ts
  • apps/desktop/src/renderer/utils/__tests__/resolveWikilinkPeek.test.ts
  • apps/desktop/src/renderer/utils/__tests__/splitCodeLines.test.ts
  • apps/desktop/src/renderer/utils/__tests__/syncFooterCopy.test.ts
  • apps/desktop/src/renderer/utils/colorUtils.ts
  • apps/desktop/src/renderer/utils/commandContext.ts
  • apps/desktop/src/renderer/utils/conflictCopy.ts
  • apps/desktop/src/renderer/utils/emergencyKit.ts
  • apps/desktop/src/renderer/utils/followWikilinkAtCursor.ts
  • apps/desktop/src/renderer/utils/formatWikilink.ts
  • apps/desktop/src/renderer/utils/isMissingWikilink.ts
  • apps/desktop/src/renderer/utils/listOptionsFromNav.ts
  • apps/desktop/src/renderer/utils/mcpSnippets.ts
  • apps/desktop/src/renderer/utils/motion.ts
  • apps/desktop/src/renderer/utils/neighborId.ts
  • apps/desktop/src/renderer/utils/noteHistory.ts
  • apps/desktop/src/renderer/utils/noteListKeys.ts
  • apps/desktop/src/renderer/utils/notebookStyle.ts
  • apps/desktop/src/renderer/utils/notebookTree.ts
  • apps/desktop/src/renderer/utils/onePasswordCsv.ts
  • apps/desktop/src/renderer/utils/openBothConflict.ts
  • apps/desktop/src/renderer/utils/outlineActive.ts
  • apps/desktop/src/renderer/utils/paletteQuery.ts
  • apps/desktop/src/renderer/utils/parseDripnexUrl.ts
  • apps/desktop/src/renderer/utils/parseNoteSearch.ts
  • apps/desktop/src/renderer/utils/passphrase.ts
  • apps/desktop/src/renderer/utils/passphraseWords.ts
  • apps/desktop/src/renderer/utils/previewFind.ts
  • apps/desktop/src/renderer/utils/resolveWikilinkClick.ts
  • apps/desktop/src/renderer/utils/resolveWikilinkPeek.ts
  • apps/desktop/src/renderer/utils/splitCodeLines.ts
  • apps/desktop/src/renderer/utils/syncFooterCopy.ts
  • apps/desktop/src/shared/__tests__/parseDripnexUrl.test.ts
  • apps/desktop/src/shared/parseDripnexUrl.ts
  • apps/desktop/src/shared/tsconfig.json
  • apps/desktop/vitest.config.ts
  • apps/web/.gitignore
  • apps/web/app/(dashboard)/dashboard/DashboardContent.tsx
  • apps/web/app/(dashboard)/dashboard/page.tsx
  • apps/web/app/(dashboard)/layout.tsx
  • apps/web/app/(marketing)/auth/verify/AuthVerifyContent.tsx
  • apps/web/app/(marketing)/auth/verify/page.tsx
  • apps/web/app/(marketing)/changelog/page.tsx
  • apps/web/app/(marketing)/download/page.tsx
  • apps/web/app/(marketing)/faq/page.tsx
  • apps/web/app/(marketing)/layout.tsx
  • apps/web/app/(marketing)/newsletter/unsubscribe/UnsubscribeContent.tsx
  • apps/web/app/(marketing)/newsletter/unsubscribe/page.tsx
  • apps/web/app/(marketing)/page.tsx
  • apps/web/app/(marketing)/philosophy/page.tsx
  • apps/web/app/(marketing)/plugins/page.tsx
  • apps/web/app/(marketing)/pricing/page.tsx
  • apps/web/app/(marketing)/privacy/page.tsx
  • apps/web/app/(marketing)/shared/SharedNoteContent.tsx
  • apps/web/app/(marketing)/shared/page.tsx
  • apps/web/app/(marketing)/subscribe/page.tsx
  • apps/web/app/(marketing)/subscription/cancel/page.tsx
  • apps/web/app/(marketing)/subscription/success/page.tsx
  • apps/web/app/(marketing)/terms/page.tsx
  • apps/web/app/docs/[[...slug]]/page.tsx
  • apps/web/app/docs/layout.tsx
  • apps/web/app/globals.css
  • apps/web/app/layout.tsx
  • apps/web/app/not-found.tsx
  • apps/web/components/FaqAccordion.tsx
  • apps/web/components/Footer.tsx
  • apps/web/components/NavDropdown.tsx
  • apps/web/components/Navbar.tsx
  • apps/web/components/NewsletterForm.tsx
  • apps/web/components/PluginFilter.tsx
  • apps/web/components/SubscribeFlow.tsx
  • apps/web/components/icons/BrandIcons.tsx
  • apps/web/components/landing/Audience.tsx
  • apps/web/components/landing/CreatorStory.tsx
  • apps/web/components/landing/Features.tsx
  • apps/web/components/landing/Hero.tsx
  • apps/web/components/landing/SocialProof.tsx
  • apps/web/components/landing/Testimonials.tsx
  • apps/web/components/landing/VideoGuides.tsx
  • apps/web/components/landing/WhyLocal.tsx
  • apps/web/components/magicui/animated-beam.tsx
  • apps/web/components/magicui/animated-grid-pattern.tsx
  • apps/web/components/magicui/animated-shiny-text.tsx
  • apps/web/components/magicui/border-beam.tsx
  • apps/web/components/magicui/dot-pattern.tsx
  • apps/web/components/magicui/hero-video-dialog.tsx
  • apps/web/components/magicui/marquee.tsx
  • apps/web/components/magicui/number-ticker.tsx
  • apps/web/components/magicui/shimmer-button.tsx
  • apps/web/components/magicui/text-reveal.tsx
  • apps/web/components/ui/accordion.tsx
  • apps/web/components/ui/badge.tsx
  • apps/web/components/ui/button.tsx
  • apps/web/components/ui/card.tsx
  • apps/web/components/ui/separator.tsx
  • apps/web/components/ui/sheet.tsx
  • apps/web/content/docs/architecture/core.mdx
  • apps/web/content/docs/architecture/editor.mdx
  • apps/web/content/docs/architecture/ipc.mdx
  • apps/web/content/docs/architecture/meta.json
  • apps/web/content/docs/architecture/overview.mdx
  • apps/web/content/docs/architecture/storage.mdx
  • apps/web/content/docs/architecture/theming.mdx
  • apps/web/content/docs/decisions/adr-001-runtime-contract.mdx
  • apps/web/content/docs/decisions/adr-002-markdown-model.mdx
  • apps/web/content/docs/decisions/adr-003-storage.mdx
  • apps/web/content/docs/decisions/index.mdx
  • apps/web/content/docs/decisions/meta.json
  • apps/web/content/docs/guide/built-in-plugins.mdx
  • apps/web/content/docs/guide/getting-started.mdx
  • apps/web/content/docs/guide/meta.json
  • apps/web/content/docs/guide/principles.mdx
  • apps/web/content/docs/guide/sync.mdx
  • apps/web/content/docs/index.mdx
  • apps/web/content/docs/meta.json
  • apps/web/content/docs/plugins/api-reference.mdx
  • apps/web/content/docs/plugins/examples.mdx
  • apps/web/content/docs/plugins/getting-started.mdx
  • apps/web/content/docs/plugins/layout-zones.mdx
  • apps/web/content/docs/plugins/meta.json
  • apps/web/content/docs/plugins/tutorial.mdx
  • apps/web/data/plugins.json
  • apps/web/lib/github.ts
  • apps/web/lib/layout.shared.tsx
  • apps/web/lib/source.ts
  • apps/web/lib/utils.ts
  • apps/web/mdx-components.tsx
  • apps/web/next-env.d.ts
  • apps/web/next.config.mjs
  • apps/web/package.json
  • apps/web/postcss.config.mjs
  • apps/web/source.config.ts
  • apps/web/tsconfig.json
  • docs/BRAND.md
  • docs/FIX_PLAN.md
  • docs/NOW.md
  • docs/PLUGIN_SYSTEM.md
  • docs/ROADMAP.md
  • docs/SPLIT_PLAN.md
  • docs/WHATS_NEW.md
  • docs/adr/001-git-backed-notes.md
  • docs/archived/architecture-audit.md
  • docs/archived/plans-2026/2026-02-18-marketing-site-redesign-design.md
  • docs/archived/plans-2026/2026-02-18-marketing-site-redesign.md
  • docs/archived/plans-2026/2026-02-19-phase1-fix-and-polish.md
  • docs/archived/plans-2026/2026-02-19-phase2-plugin-marketplace.md
  • docs/archived/plans-2026/2026-02-19-plugin-ecosystem-design.md
  • docs/archived/plans-2026/2026-03-11-data-access-api-design.md
  • docs/archived/plans-2026/2026-03-11-data-access-api-implementation.md
  • docs/archived/plans-2026/2026-03-11-notebook-sync-implementation.md
  • docs/archived/plans-2026/2026-03-11-phase2-completion-design.md
  • docs/archived/plans-2026/2026-03-11-phase2-completion-implementation.md
  • docs/archived/plans-2026/2026-03-11-remark-rehype-hooks-enhancement.md
  • docs/archived/plans-2026/2026-03-11-sync-hardening-implementation.md
  • docs/archived/plans-2026/2026-03-11-theme-system-design.md
  • docs/archived/plans-2026/2026-03-11-theme-system-implementation.md
  • docs/archived/plans-2026/2026-03-12-roadmap-auth-sync-ai.md
  • docs/archived/plans-2026/2026-03-12-website-redesign-design.md
  • docs/archived/plans-2026/2026-03-12-website-redesign-implementation.md
  • docs/archived/plans-2026/api-reference.md
  • docs/archived/react-ui-audit.md
  • docs/archived/superpowers-2026/2026-03-14-ai-core-provider-abstraction-design.md
  • docs/archived/superpowers-2026/2026-03-14-ai-core-provider-abstraction.md
  • docs/archived/superpowers-2026/2026-03-14-automated-release-pipeline-design.md
  • docs/archived/superpowers-2026/2026-03-14-automated-release-pipeline.md
  • docs/archived/superpowers-2026/2026-03-18-ai-tool-use-design.md
  • docs/archived/superpowers-2026/2026-03-18-ai-tool-use.md
  • docs/dns-dripnex.md
  • docs/domain-invariants.md
  • docs/marketing-content.md
  • docs/philosophy.md
  • docs/releases/v0.16.0.md
  • docs/state.md
  • docs/tables-plugin.md
  • eslint.config.js
  • knip.json
  • package.json
  • packages/ai-assistant/src/aiCommandTypes.test.ts
  • packages/ai-assistant/src/aiCommandTypes.ts
  • packages/ai-core/package.json
  • packages/ai-core/src/ai-command-types.test.ts
  • packages/ai-core/src/ai-service.ts
  • packages/ai-core/src/context-builder.ts
  • packages/ai-core/src/embedding.ts
  • packages/ai-core/src/index.ts
  • packages/ai-core/src/providers/anthropic.ts
  • packages/ai-core/src/providers/dripnex.ts
  • packages/ai-core/src/providers/grok.ts
  • packages/ai-core/src/providers/ollama-embedding.ts
  • packages/ai-core/src/providers/ollama.ts
  • packages/ai-core/src/providers/openai-embedding.ts
  • packages/ai-core/src/retriever.ts
  • packages/ai-core/src/retry.ts
  • packages/ai-core/src/tool-loop.ts
  • packages/ai-core/tests/context-builder.test.ts
  • packages/ai-core/tests/embedding.test.ts
  • packages/ai-core/tests/providers/anthropic.test.ts
  • packages/ai-core/tests/providers/dripnex.test.ts
  • packages/ai-core/tests/retriever.test.ts
  • packages/ai-core/tests/tool-loop.test.ts
  • packages/api/README.md
  • packages/api/SETUP.md
  • packages/api/docs/DEPLOYMENT.md
  • packages/api/docs/OBSERVABILITY.md
  • packages/api/docs/STRIPE_WEBHOOKS.md
  • packages/api/drizzle/0008_stripe_events.sql
  • packages/api/drizzle/0009_plugin_registry.sql
  • packages/api/drizzle/meta/_journal.json
  • packages/api/package.json
  • packages/api/scripts/embed-migrations.mjs
  • packages/api/src/db/client.ts
  • packages/api/src/db/migrate.cli.ts
  • packages/api/src/db/runMigrations.ts
  • packages/api/src/db/schema.ts
  • packages/api/src/emails/EmailShell.tsx
  • packages/api/src/emails/MagicLinkEmail.tsx
  • packages/api/src/emails/WelcomeEmail.tsx
  • packages/api/src/emails/render.tsx
  • packages/api/src/emails/theme.ts
  • packages/api/src/index.ts
  • packages/api/src/middleware/rateLimit.ts
  • packages/api/src/routes/admin.ts
  • packages/api/src/routes/auth.ts
  • packages/api/src/routes/plugins.ts
  • packages/api/src/routes/share.ts
  • packages/api/src/routes/subscription.ts
  • packages/api/src/routes/sync.ts
  • packages/api/src/services/email.ts
  • packages/api/tests/auth-magic-link.test.ts
  • packages/api/tests/email-templates.test.ts
  • packages/api/tests/encryption-roundtrip.test.ts
  • packages/api/tests/helpers.ts
  • packages/api/tests/plugins.test.ts
  • packages/api/tests/runMigrations.test.ts
  • packages/api/tests/sync-notebooks.test.ts
  • packages/api/tests/sync-pull.test.ts
  • packages/api/tests/sync-push.test.ts
  • packages/api/tests/sync-status.test.ts
  • packages/api/tests/sync-tags.test.ts
  • packages/api/tsconfig.json
  • packages/api/wrangler.toml
  • packages/command-registry/package.json
  • packages/command-registry/src/definitions/app.ts
  • packages/command-registry/src/definitions/editor.ts
  • packages/command-registry/src/index.ts
  • packages/command-registry/src/keymap.ts
  • packages/command-registry/src/registry.ts
  • packages/command-registry/src/types.ts
  • packages/command-registry/tests/keymap.test.ts
  • packages/command-registry/tests/registry.test.ts
  • packages/commands/package.json
  • packages/commands/src/index.ts
  • packages/commands/src/markdown/commands.test.ts
  • packages/commands/src/markdown/commands.ts
  • packages/commands/src/markdown/continueMarkup.test.ts
  • packages/commands/src/markdown/continueMarkup.ts
  • packages/commands/src/markdown/editorPolish.test.ts
  • packages/commands/src/markdown/editorPolish.ts
  • packages/commands/src/markdown/headings.test.ts
  • packages/commands/src/markdown/headings.ts
  • packages/commands/src/markdown/lineCommands.test.ts
  • packages/commands/src/markdown/lineCommands.ts
  • packages/commands/src/markdown/listIndent.test.ts
  • packages/commands/src/markdown/listIndent.ts
  • packages/commands/src/markdown/slash.test.ts
  • packages/commands/src/markdown/slash.ts
  • packages/commands/src/markdown/urlPaste.test.ts
  • packages/commands/src/markdown/urlPaste.ts
  • packages/core/package.json
  • packages/core/src/contracts/NoteSnapshot.ts
  • packages/core/src/domain/chunker.ts
  • packages/core/src/domain/frontmatter.ts
  • packages/core/src/domain/index.ts
  • packages/core/src/domain/invariants.ts
  • packages/core/src/domain/metadata.ts
  • packages/core/src/domain/note.ts
  • packages/core/src/domain/notebook.ts
  • packages/core/src/domain/types.ts
  • packages/core/src/index.ts
  • packages/core/src/operations/index.ts
  • packages/core/src/operations/trashNote.ts
  • packages/core/tests/chunker.test.ts
  • packages/core/tests/frontmatter.test.ts
  • packages/core/tests/metadata.test.ts
  • packages/core/tests/note.test.ts
  • packages/core/tests/notebook.test.ts
  • packages/core/tests/operations.test.ts
  • packages/embeds/package.json
  • packages/embeds/src/core/parsing.ts
  • packages/embeds/src/index.ts
  • packages/embeds/tests/parsing.test.ts
  • packages/licensing/README.md
  • packages/licensing/package.json
  • packages/licensing/src/trial.ts
  • packages/logger/package.json
  • packages/logger/src/index.ts
  • packages/logger/tests/createLogger.test.ts
  • packages/logger/tsconfig.json
  • packages/logger/vitest.config.ts
  • packages/markdown/package.json
  • packages/markdown/src/fenceInfo.ts
  • packages/markdown/src/index.ts
  • packages/markdown/src/scan.ts
  • packages/markdown/src/types.ts
  • packages/markdown/tests/fenceInfo.test.ts
  • packages/markdown/tests/scan.test.ts
  • packages/markdown/tsconfig.json
  • packages/markdown/vitest.config.ts
  • packages/mcp-server/README.md
  • packages/mcp-server/package.json
  • packages/mcp-server/src/__tests__/fts5-triggers.test.ts
  • packages/mcp-server/src/__tests__/notes.test.ts
  • packages/mcp-server/src/__tests__/sqliteRepo.test.ts
  • packages/mcp-server/src/__tests__/writes.test.ts
  • packages/mcp-server/src/db.ts
  • packages/mcp-server/src/index.ts
  • packages/mcp-server/src/notes.ts
  • packages/mcp-server/src/sqliteRepo.ts
  • packages/mcp-server/src/writes.ts
  • packages/mcp-server/tsconfig.build.json
  • packages/mcp-server/tsconfig.json
  • packages/plugin-api/package.json
  • packages/plugin-api/src/ai/aiCommandStore.ts
  • packages/plugin-api/src/components/Button.tsx
  • packages/plugin-api/src/components/Dialog.tsx
  • packages/plugin-api/src/components/Modal.tsx
  • packages/plugin-api/src/components/catalog.ts
  • packages/plugin-api/src/components/styles.ts
  • packages/plugin-api/src/data/createDataAPI.ts
  • packages/plugin-api/src/editor/createEditorAPI.ts
  • packages/plugin-api/src/index.ts
  • packages/plugin-api/src/layout/LayoutZone.tsx
  • packages/plugin-api/src/layout/types.ts
  • packages/plugin-api/src/lifecycle/PluginHost.tsx
  • packages/plugin-api/src/lifecycle/PluginRegistry.ts
  • packages/plugin-api/src/lifecycle/configRuntime.ts
  • packages/plugin-api/src/loader/createInitApi.ts
  • packages/plugin-api/src/loader/hostBridges.ts
  • packages/plugin-api/src/loader/loadInitScript.ts
  • packages/plugin-api/src/loader/loadPluginFromSource.ts
  • packages/plugin-api/src/menu/pluginContextMenuStore.ts
  • packages/plugin-api/src/menu/pluginMenuStore.ts
  • packages/plugin-api/src/packageFiles/applyPluginPackageFiles.ts
  • packages/plugin-api/src/packageFiles/chords.ts
  • packages/plugin-api/src/packageFiles/parsePluginKeymap.ts
  • packages/plugin-api/src/packageFiles/parsePluginMenus.ts
  • packages/plugin-api/src/packageFiles/parsePluginTheme.ts
  • packages/plugin-api/src/preview/createMarkdownRenderer.ts
  • packages/plugin-api/src/preview/previewEventStore.ts
  • packages/plugin-api/src/preview/rehypePluginStore.ts
  • packages/plugin-api/src/preview/remarkPluginStore.ts
  • packages/plugin-api/src/preview/safePluginWrapper.ts
  • packages/plugin-api/src/store/appStore.ts
  • packages/plugin-api/src/theme/createThemesApi.ts
  • packages/plugin-api/src/theme/pluginStyleStore.ts
  • packages/plugin-api/src/theme/themeRegistryStore.ts
  • packages/plugin-api/src/theme/themeTypes.ts
  • packages/plugin-api/src/theme/useCssVariables.ts
  • packages/plugin-api/src/theme/usePluginStyles.ts
  • packages/plugin-api/src/theme/useThemeOverrides.ts
  • packages/plugin-api/src/types.ts
  • packages/plugin-api/tests/appStore.test.ts
  • packages/plugin-api/tests/components.test.ts
  • packages/plugin-api/tests/configRuntime.test.ts
  • packages/plugin-api/tests/createDataAPI.test.ts
  • packages/plugin-api/tests/createEditorAPI.test.ts
  • packages/plugin-api/tests/createMarkdownRenderer.test.ts
  • packages/plugin-api/tests/createThemesApi.test.ts
  • packages/plugin-api/tests/hostBridges.test.ts
  • packages/plugin-api/tests/loadInitScript.test.ts
  • packages/plugin-api/tests/loadPluginFromSource.test.ts
  • packages/plugin-api/tests/packageFiles.test.ts
  • packages/plugin-api/tests/pluginStyleStore.test.ts
  • packages/plugin-api/tests/previewEventStore.test.ts
  • packages/plugin-api/tests/registry.test.ts
  • packages/plugin-api/tests/safePluginWrapper.test.ts
  • packages/plugin-api/tests/themeTypes.test.ts
  • packages/plugin-cli/package.json
  • packages/plugin-cli/src/cli.ts
  • packages/plugin-cli/src/commands/init.ts
  • packages/plugin-cli/src/commands/install.ts
  • packages/plugin-cli/src/commands/link.ts
  • packages/plugin-cli/src/commands/pack.ts
  • packages/plugin-cli/src/commands/publish.ts
  • packages/plugin-cli/src/commands/uninstall.ts
  • packages/plugin-cli/src/installSpec.ts
  • packages/plugin-cli/src/parseInitArgs.ts
  • packages/plugin-cli/src/templates/index.ts.ts
  • packages/plugin-cli/src/templates/keymaps.default.json.ts
  • packages/plugin-cli/src/templates/manifest.json.ts
  • packages/plugin-cli/src/templates/menus.main.json.ts
  • packages/plugin-cli/src/templates/package.json.ts
  • packages/plugin-cli/src/templates/styles.index.css.ts
  • packages/plugin-cli/src/templates/theme.json.ts
  • packages/plugin-cli/src/utils.ts
  • packages/plugin-cli/tests/init.test.ts
  • packages/plugin-cli/tests/installSpec.test.ts
  • packages/plugin-cli/tests/parseInitArgs.test.ts
  • packages/product-config/package.json
  • packages/product-config/src/pricing.ts
  • packages/product-config/src/urls.ts
  • packages/storage-core/package.json
  • packages/storage-core/src/data/DataPaths.ts
  • packages/storage-core/src/data/Export.ts
  • packages/storage-core/src/data/Import.ts
  • packages/storage-core/src/data/index.ts
  • packages/storage-core/src/index.ts
  • packages/storage-core/src/interfaces/ChunkRepository.ts
  • packages/storage-core/src/interfaces/ExtendedNoteRepository.ts
  • packages/storage-core/src/repositories/InMemoryNoteRepository.ts
  • packages/storage-core/src/types/ListNotesOptions.ts
  • packages/storage-core/src/types/NoteQuery.ts
  • packages/storage-core/src/types/NoteSnapshot.ts
  • packages/storage-core/tests/in-memory-repository.test.ts
  • packages/storage-sqlite/package.json
  • packages/storage-sqlite/src/database.ts
  • packages/storage-sqlite/src/index.ts
  • packages/storage-sqlite/src/migrations/001_initial_schema.ts
  • packages/storage-sqlite/src/migrations/002_add_archived_at.ts
  • packages/storage-sqlite/src/migrations/003_notebooks.ts
  • packages/storage-sqlite/src/migrations/004_note_fields.ts
  • packages/storage-sqlite/src/migrations/005_manual_tags.ts
  • packages/storage-sqlite/src/migrations/006_tag_colors.ts
  • packages/storage-sqlite/src/migrations/007_links.ts
  • packages/storage-sqlite/src/migrations/008_fts5_index.ts
  • packages/storage-sqlite/src/migrations/009_link_anchors.ts
  • packages/storage-sqlite/src/migrations/010_sync_fields.ts
  • packages/storage-sqlite/src/migrations/011_sync_tracking.ts
  • packages/storage-sqlite/src/migrations/012_git_notebooks.ts
  • packages/storage-sqlite/src/migrations/013_plugin_config.ts
  • packages/storage-sqlite/src/migrations/014_plugin_registry.ts
  • packages/storage-sqlite/src/migrations/015_notebook_sync_tracking.ts
  • packages/storage-sqlite/src/migrations/016_tag_sync_tracking.ts
  • packages/storage-sqlite/src/migrations/017_sync_history.ts
  • packages/storage-sqlite/src/migrations/018_fts_include_deleted.ts
  • packages/storage-sqlite/src/migrations/019_embeddings.ts
  • packages/storage-sqlite/src/migrations/020_notebook_icons.ts
  • packages/storage-sqlite/src/migrations/021_note_tasks.ts
  • packages/storage-sqlite/src/migrations/index.ts
  • packages/storage-sqlite/src/repositories/ChunkRepository.ts
  • packages/storage-sqlite/src/repositories/SQLiteNoteRepository.ts
  • packages/storage-sqlite/src/repositories/SQLiteNotebookRepository.ts
  • packages/storage-sqlite/src/repositories/chunkHash.ts
  • packages/storage-sqlite/src/repositories/indexNoteChunks.ts
  • packages/storage-sqlite/src/repositories/noteMapping.ts
  • packages/storage-sqlite/tests/chunks.test.ts
  • packages/storage-sqlite/tests/repository.test.ts
  • packages/sync-core/package.json
  • packages/sync-core/src/client.ts
  • packages/sync-core/src/engine.ts
  • packages/sync-core/src/index.ts
  • packages/sync-core/src/queue.ts
  • packages/sync-core/src/types.ts
  • packages/sync-core/tests/engine.test.ts
  • packages/sync-core/tests/queue.test.ts
  • packages/sync-core/tests/types.test.ts
  • packages/tables/package.json
  • packages/tables/src/edit.ts
  • packages/tables/src/generate.ts
  • packages/tables/src/index.ts
  • packages/tables/src/parse.ts
  • packages/tables/src/types.ts
  • packages/tables/tests/edit.test.ts
  • packages/tables/tests/parse.test.ts
  • packages/tables/tsconfig.json
  • packages/tables/vitest.config.ts
  • packages/tasks/LICENSE
  • packages/tasks/src/core/parsing.ts
  • packages/tasks/src/core/types.ts
  • packages/tasks/src/index.ts
  • packages/tasks/tests/parsing.test.ts
  • packages/wikilinks/package.json
  • packages/wikilinks/src/adapters/codemirror/autocomplete.ts
  • packages/wikilinks/src/adapters/codemirror/click.ts
  • packages/wikilinks/src/adapters/codemirror/highlight.ts
  • packages/wikilinks/src/adapters/codemirror/hover.ts
  • packages/wikilinks/src/adapters/remark/remark-wikilink.ts
  • packages/wikilinks/src/core/headings.ts
  • packages/wikilinks/src/core/parsing.ts
  • packages/wikilinks/src/index.ts
  • packages/wikilinks/tests/createTitle.test.ts
  • packages/wikilinks/tests/headings.test.ts
  • packages/wikilinks/tests/parsing.test.ts
  • plan.md
  • pnpm-workspace.yaml
  • release.config.js
  • scripts/bump-version.mjs
  • scripts/make-dock-icon.swift
  • vercel.json

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@tomymaritano

Copy link
Copy Markdown
Collaborator Author

Replaced by a promotion branch that merges main (conflicts). See the follow-up PR.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants