Skip to content

feat: Obsidian deep integration with auto-discover, graph viz, and server enhancements#142

Merged
paulbreuler merged 35 commits intomainfrom
feat/obsidian-deep-integration
Feb 17, 2026
Merged

feat: Obsidian deep integration with auto-discover, graph viz, and server enhancements#142
paulbreuler merged 35 commits intomainfrom
feat/obsidian-deep-integration

Conversation

@paulbreuler
Copy link
Copy Markdown
Owner

Summary

  • Obsidian plugin (packages/limps-obsidian-plugin): Full plugin with health dashboard, force-directed graph visualization (2D/3D), persistent MCP client with reconnect, editor diagnostics, context menus, protocol handlers, workflow scheduler, and vault event handling
  • Server enhancements (packages/limps): Multi-path document scanning, document analysis with PageRank/concept extraction, ping tool, session renewal, config exclusion merging
  • Auto-discover + auto-start: Plugin discovers .limps/config.json from vault root, auto-starts daemon if not running, derives MCP endpoint from config's server port/host

Key changes (203 files, ~19.7K lines)

Obsidian Plugin (new package)

  • Health view sidebar with daemon status, graph stats, MCP session info
  • Directed graph view with force-directed physics (d3-force), 2D/3D modes
  • Persistent MCP client manager with keepalive and auto-reconnect
  • CLI wrapper for invoking limps commands from Obsidian
  • Config auto-discovery: walks up from vault root to find .limps/config.json
  • Daemon auto-start: starts daemon on plugin load if not running
  • Editor link diagnostics, protocol handlers (obsidian://limps?target=...)
  • Context menu integration, surface audit, graph sync

Server Enhancements

  • Multi-path streaming scanner with presence-aware indexing
  • Document analysis: structure parsing, concept extraction, relationship discovery
  • Link analysis with PageRank scoring
  • Ping tool for session keepalive
  • Config exclusions merged into watcher ignore patterns

Plan Maintenance

  • Clean up completed plans, create 0050-obsidian-deep-integration plan
  • Checkpoint plan and agent status updates

Test plan

  • Build all packages: npm run build
  • Run all tests: npm test
  • Deploy plugin to Obsidian vault, verify health view connects
  • Verify auto-discover finds .limps/config.json from vault root
  • Verify daemon auto-starts when not running
  • Verify graph view renders plan entities and relationships
  • Verify MCP persistent connection with keepalive

🤖 Generated with Claude Code

paulbreuler and others added 30 commits February 13, 2026 12:48
…integration

Move 0039 and 0049 to Completed/, supersede 0028 with 0050,
create plan structure and 15 agent stubs for the Obsidian deep
integration initiative.

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

Lightweight keepalive via `ping` MCP tool, POST `/mcp/renew` for
explicit session extension, and `session://info` resource exposing
session metadata. Enables persistent client connections with
proactive session management.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…g multi-path scanner

Add dual-mode indexing: 'full' for FTS + frontmatter parsing, 'presence'
for lightweight file existence tracking (path/size/mtime) at 60GB+ scale.
Smart exclusions default to node_modules, .git, vendor, build, binaries.
File watcher excludes presence-only paths. AsyncGenerator scanner provides
constant memory for 100k+ files with per-path config (extensions,
exclusions, maxDepth, priority).

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

Add DocumentAnalyzer for extracting references (markdown links, wikilinks,
code imports, file mentions) with cross-repo awareness. LinkAnalyzer with
iterative PageRank for document importance scoring. Concept extraction from
headings, code blocks, and technical terms. Jaccard similarity-based
relationship discovery. New REFERENCES relation type, concept_conflict and
duplicate_content conflict types. CLI: graph suggest hub-documents,
graph trace --mode pagerank, graph check concept-conflict.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…, and autonomous workflows

Add McpClientManager with auto-reconnect, keepalive, and CLI fallback.
Type-safe LimpsToolWrapper for all 22+ MCP tools (dual-mode). Document
management commands (create/update/delete with context menus). Task
management UI with next-task modal and status picker. Search docs modal
and proposals UI with apply/skip. Scheduled health checks with vault
event automation. Auto-proposal application with whitelist and
notification system. Health Hub shows MCP session status, notifications.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…lti-path config

Update plugin README with full command reference, settings table, and
MCP session docs. Update root README Obsidian section. Add architecture
doc covering MCP lifecycle, presence-aware indexing, smart exclusions,
vault automation, and file watcher behavior.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
paulbreuler and others added 2 commits February 14, 2026 15:54
The watcher and indexer were using hardcoded ignore patterns that didn't
include directories from the exclusions config. Now merges
exclusions.directories into the watcher's ignorePatterns so gitignored
directories like tmp/, target/, BaseState/ are properly excluded.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add discoverConfig() to walk up from vault root looking for .limps/config.json
- Add startDaemon() to start daemon via CLI if not running
- Add readLimpsConfig() to parse config and derive MCP endpoint from server.port/host
- Plugin onload() auto-discovers config when settings.configPath is empty
- Plugin onload() auto-starts daemon if not running
- Settings default configPath to empty (auto-discover mode)
- Settings UI shows resolved config path as read-only helper text
- All internal references use resolvedConfigPath instead of raw settings

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings February 14, 2026 22:45
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR introduces a comprehensive Obsidian plugin for limps with persistent MCP integration, auto-discovery of configuration, daemon auto-start, and enhanced server capabilities including multi-path document scanning, document analysis with PageRank, and session management features.

Changes:

  • New Obsidian plugin package with health dashboard, force-directed graph visualization, persistent MCP client, editor diagnostics, and workflow automation
  • Server enhancements including multi-path document scanning with presence-aware indexing, document analysis with PageRank/concept extraction, ping tool, and session renewal endpoint
  • Auto-discover and auto-start capabilities for seamless daemon integration from Obsidian vault

Reviewed changes

Copilot reviewed 102 out of 203 changed files in this pull request and generated 6 comments.

Show a summary per file
File Description
plans/0033-limps-self-updating/agents/000_phase1_staleness.agent.md Added LIMPS graph links section
plans/0033-limps-self-updating/0033-limps-self-updating-plan.md Added LIMPS graph links section
plans/0028-limps-obsidian-plugin/0028-limps-obsidian-plugin-plan.md Marked as superseded by 0050-obsidian-deep-integration
packages/limps/tests/tools/ping.test.ts Added tests for ping MCP tool
packages/limps/tests/server-http-renew.test.ts Added tests for session renewal endpoint
packages/limps/tests/integration/session-robustness.test.ts Added integration tests for session features
packages/limps/tests/integration/presence-indexing.test.ts Added tests for presence-aware indexing
packages/limps/tests/cli/dependency-paths.test.ts Added tests for dependency path conversion
packages/limps/tests/cli/completion.test.ts Added deps-to-paths command to completion suggestions
packages/limps/tests/analysis/link-analysis.test.ts Added tests for PageRank and hub document detection
packages/limps/tests/analysis/document-structure.test.ts Added tests for markdown reference extraction
packages/limps/tests/agent-parser.test.ts Added test for file-path dependency normalization
packages/limps/src/utils/pathfilter.ts Added exclusion filtering utilities
packages/limps/src/utils/dependency-ref.ts Added dependency reference parsing utility
packages/limps/src/tools/ping.ts Implemented ping tool for keepalive
packages/limps/src/tools/index.ts Registered ping tool
packages/limps/src/tools/graph.ts Extended graph tool with new subtypes and PageRank mode
packages/limps/src/server-shared.ts Added multi-path support and presence-only indexing
packages/limps/src/server-http.ts Added session renewal endpoint and session info resource
packages/limps/src/scanner.ts Implemented streaming file scanner
packages/limps/src/graph/types.ts Added REFERENCES relation type
packages/limps/src/graph/storage.ts Added methods to get all entities and relationships
packages/limps/src/graph/extractor.ts Integrated document analyzer for reference extraction
packages/limps/src/graph/conflict-detector.ts Added concept conflict and duplicate content detection
packages/limps/src/core/completion.ts Added deps-to-paths command to CLI completion
packages/limps/src/config.ts Added multi-path configuration and exclusions support
packages/limps/src/commands/plan/index.tsx Added deps-to-paths command to plan help
packages/limps/src/commands/plan/deps-to-paths.tsx Implemented dependency path conversion command
packages/limps/src/commands/graph/trace.tsx Added PageRank mode to graph trace
packages/limps/src/commands/graph/suggest.tsx Added hub-documents and relationships suggestion types
packages/limps/src/cli/graph-trace.ts Implemented PageRank scoring in trace results
packages/limps/src/cli/graph-suggest.ts Added hub document and relationship discovery
packages/limps/src/cli/graph-check.ts Added concept conflict and duplicate content checks
packages/limps/src/cli/dependency-paths.ts Implemented dependency path conversion logic
packages/limps/src/analysis/relationship-discoverer.ts Implemented relationship discovery using Jaccard similarity
packages/limps/src/analysis/link-analysis.ts Implemented PageRank algorithm and hub document detection
packages/limps/src/analysis/document-structure.ts Implemented document reference extraction
packages/limps/src/analysis/concept-extractor.ts Implemented concept extraction from documents
packages/limps/src/agent-parser.ts Updated to use parseDependencyRef utility
packages/limps-obsidian-plugin/* New plugin package with comprehensive Obsidian integration

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

paulbreuler and others added 3 commits February 16, 2026 22:32
…ing feedback

- styles.css: Enable scrolling in health view with overflow-y: auto
- healthView.ts: Preserve existing intelligence data during fast refresh
  to prevent UI flickering/wiping
- main.ts: Display reindex command stdout in success notice for better
  feedback on zero-plan scenarios
- build-plugin.mjs: Exclude electron and @codemirror/* from bundle to
  prevent runtime conflicts
- wrapper.ts: Add robust error handling for graph reindex output
Convert the health sidebar from innerHTML string templating to React components,
fixing agent count display (was always "0 agents") and section collapse on
re-render. Plan status uses plain text badges and agent summaries for reliable
rendering in Obsidian's CSS environment.

- Fix buildPlanId to use number-only format for reliable plan directory matching
- Add parseAgentDetail/parseAgentList to extract per-agent data from CLI
- 11 new React components under src/views/health/
- Simple text-based plan status (no progress bars) to avoid Obsidian CSS conflicts
- Dev harness HTML for browser-based CSS iteration
- esbuild target updated to es2022
- 115/115 plugin tests pass

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Fix obsidian plugin test script for Node 20 (glob patterns unsupported)
- Add concurrency guard to WorkflowScheduler.runNow()
- Avoid redundant extractTextFromMcpResult call in tool-wrapper
- Refine SCREAMING_SNAKE_CASE regex to reject trailing underscores
- Add explanatory comment for async generator in scanner
- Remove excess blank lines in plan files

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@paulbreuler paulbreuler merged commit b17c530 into main Feb 17, 2026
4 checks passed
@paulbreuler paulbreuler deleted the feat/obsidian-deep-integration branch February 17, 2026 17:16
@github-actions github-actions bot mentioned this pull request Feb 17, 2026
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