v0.6: MCP foundation - agent-first docs, memory, and tasks#6
Merged
Conversation
Move the scanner, git layer, workspace resolution, write layer, and error model into docsreader-core so the GUI and the MCP server share one implementation without the MCP binary compiling tauri. Tauri commands live in tauri_api; agents/ adds the MCP client registry (Claude Code, Cursor, Windsurf, VS Code, Codex) with non-destructive JSON/TOML config merges.
MCP spec 2025-11-25 server over stdio: doc/memory/task tools with recovery-bearing errors, every doc exposed as a resource, a self-describing onboarding resource, start-task and record-decision prompts, workspace auto-detection via CLAUDE_PROJECT_DIR with walk-up, and an elicitation picker for unknown slugs. The sidecar overlay config stages the binary for bundle.externalBin and owns createUpdaterArtifacts so plain local builds never need the staged binary or the signing key.
Settings gains an AI agents section that detects installed MCP clients and registers the bundled server per client. Long config paths truncate with the full path on hover; the dialog panes carry min-w-0 so intrinsic-width content cannot push past the dialog bounds.
…tour Managed workspaces replace the .docs.yaml curated-manifest system: a .docsreader.yaml marker carries slug/name/homepage, plain folders get a convert prompt, agent writes reload open docs silently, and existing manifests migrate on first scan. Adds quick raw-markdown editing on the open doc, a backlinks pane fed by scan-time link extraction, and a rewritten welcome tour with an agent setup page. The webview write permission is scoped per command to markdown files only; reads keep their previous scope (the fs plugin unions global and command scopes, so the global scope block is replaced by per-command scopes).
Diagram fences never rendered: the sanitize allowlist matched camelCase hast properties while the plugins set kebab-case, and the shiki rehype handler replaces pre-code nodes wholesale, dropping the detection flag either way. Diagram fences now emit pre-div carriers that shiki skips by structure, with the flag names defined once in diagramFence.ts. Svgbob output additionally runs through DOMPurify before injection, and empty fences render nothing. Regression tests cover the production schema and the react-markdown prop contract.
Sidebar rows drop to 13px type with tighter padding and indent. The row class recipe, selection state, and the cmd-click/middle-click open handlers move to sidebarRow.ts, deduplicating four copies across the tree and lens lists; FileTree splits into FileEntry/DirEntry.
Vitest with testing-library and jsdom, wired through vite.config with a setup file stubbing ResizeObserver and scrollIntoView. Also carries the dompurify runtime dependency and the build:sidecar script hook.
New ci.yml runs typecheck, frontend tests, build, rustfmt, clippy, the full cargo test suite, and a guard asserting the MCP binary stays free of tauri in its dependency graph. The release pipeline stages and verifies the docsreader-mcp sidecar on all three platforms; cut-release bumps the mcp crate version alongside the app; the tap update gains the server binary.
README leads with the MCP server: how the store works (status-as-folder docs, memory, tasks), per-client registration commands validated against each vendor's docs, and the AGENTS template for repos. Screenshots recaptured against the new UI. Roadmap gains the v0.6 unreleased section and records the curated-manifest removal; markdownlint config added.
CI runs a newer clippy that flags comparator-based sorts with a plain key projection; sort_by_key is equivalent and simpler at both sites.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
DocsReader becomes the human window into an agent-managed markdown corpus. A bundled stdio MCP server (docsreader-mcp) lets AI agents write docs, memory, and tasks as plain markdown; the app reads the same files live.