# sjjsbsj558/obsidian-synovia architecture

> Architecture diagram of the GitHub repository sjjsbsj558/obsidian-synovia, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/sjjsbsj558/obsidian-synovia
- Repository: https://github.com/sjjsbsj558/obsidian-synovia
- Video tour (about a minute): https://gitdiagram.com/sjjsbsj558/obsidian-synovia/video

## Overview

Synovia is an Obsidian plugin for developing evidence-backed opinions from vault notes, with optional model assistance and reviewed output. The primary flow runs from the workbench through the plugin’s opinion workflow and local retrieval to a reviewable result; users can save generated material without replacing source notes. The README also describes source ingestion, knowledge extraction, comparisons, topic review, maintenance, and Zhihu compatibility workflows. Some of these subsystems are represented from documented capabilities and tree paths; their internal wiring is not shown in the sampled source.

Main entry points: [`src/main.ts`](https://github.com/sjjsbsj558/obsidian-synovia/blob/main/src/main.ts) (Plugin workflow), [`src/pipeline/autoInput.ts`](https://github.com/sjjsbsj558/obsidian-synovia/blob/main/src/pipeline/autoInput.ts) (Source intake), [`src/pipeline/retrievalPipeline.ts`](https://github.com/sjjsbsj558/obsidian-synovia/blob/main/src/pipeline/retrievalPipeline.ts) (Note retrieval), [`src/utils/vaultHelper.ts`](https://github.com/sjjsbsj558/obsidian-synovia/blob/main/src/utils/vaultHelper.ts) (Safe vault writes)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_workbench["Opinion workbench"]
  node_sidebar["Opinion workbench"]
  node_plugin["Plugin workflow<br/>[main.ts]"]
  node_retrieval["Note retrieval"]
  node_diff["Change review<br/>[DiffReviewModal.ts]"]
end

subgraph group_knowledge["Knowledge workflows"]
  node_claims["Claim extraction<br/>[claimExtractor.ts]"]
  node_knowledge["Knowledge graph<br/>[knowledgeGraph.ts]"]
  node_topic["Topic coverage review<br/>[topicReview.ts]"]
  node_comparison["Opinion comparison<br/>[comparator.ts]"]
  node_maintenance["Wiki maintenance<br/>[wikiMaintenance.ts]"]
end

subgraph group_sources["Source workflows"]
  node_sourceinput["Source intake<br/>[autoInput.ts]"]
  node_fetch["Web content fetch<br/>[contentFetcher.ts]"]
  node_zhihusearch["Zhihu search"]
  node_zhihucli["Zhihu CLI<br/>[zhihuCliClient.ts]"]
  node_zhihumcp["Zhihu MCP"]
  node_sourceformat["Source notes<br/>[sourceNote.ts]"]
end

subgraph group_runtime["Runtime services"]
  node_index["Vault search index<br/>[vaultIndex.ts]"]
  node_searchadapter["Lexical search"]
  node_model["Model client<br/>[modelClient.ts]"]
  node_settings["Plugin settings<br/>[settings.ts]"]
  node_vaulthelper["Safe vault writes<br/>[vaultHelper.ts]"]
  node_journal["Job and graph records<br/>[journal.ts]"]
end

node_user(("Obsidian user"))
node_vault[("Obsidian vault")]

node_user -->|"asks question"| node_sidebar
node_sidebar -->|"requests opinion"| node_plugin
node_plugin -->|"retrieves notes"| node_retrieval
node_retrieval -->|"gets index"| node_index
node_retrieval -->|"searches terms"| node_searchadapter
node_retrieval -.->|"ranks candidates"| node_model
node_plugin -.->|"analyzes notes"| node_model
node_plugin -->|"reads and writes"| node_vault
node_plugin -->|"uses configuration"| node_settings
node_plugin -->|"records workflow state"| node_journal
node_user -->|"selects material"| node_sourceinput
node_sourceinput -->|"fetches content"| node_fetch
node_sourceinput -.->|"searches Zhihu"| node_zhihusearch
node_sourceinput -.->|"uses installed CLI"| node_zhihucli
node_sourceinput -.->|"uses MCP search"| node_zhihumcp
node_sourceinput -->|"formats source notes"| node_sourceformat
node_plugin -->|"extracts claims"| node_claims
node_plugin -->|"builds graph"| node_knowledge
node_plugin -->|"reviews topic coverage"| node_topic
node_topic -->|"selects excerpts"| node_retrieval
node_plugin -->|"compares opinions"| node_comparison
node_plugin -->|"maintains wiki"| node_maintenance
node_plugin -->|"presents changes"| node_diff
node_diff -->|"applies approved edits"| node_vaulthelper
node_vaulthelper -->|"writes reviewed files"| node_vault
node_plugin -->|"saves generated notes"| node_vaulthelper

click node_sidebar "https://github.com/sjjsbsj558/obsidian-synovia/blob/main/src/ui/SynoviaSidebarView.ts"
click node_plugin "https://github.com/sjjsbsj558/obsidian-synovia/blob/main/src/main.ts"
click node_retrieval "https://github.com/sjjsbsj558/obsidian-synovia/blob/main/src/pipeline/retrievalPipeline.ts"
click node_index "https://github.com/sjjsbsj558/obsidian-synovia/blob/main/src/search/vaultIndex.ts"
click node_searchadapter "https://github.com/sjjsbsj558/obsidian-synovia/blob/main/src/search/miniSearchAdapter.ts"
click node_model "https://github.com/sjjsbsj558/obsidian-synovia/blob/main/src/agent/modelClient.ts"
click node_settings "https://github.com/sjjsbsj558/obsidian-synovia/blob/main/src/settings/settings.ts"
click node_sourceinput "https://github.com/sjjsbsj558/obsidian-synovia/blob/main/src/pipeline/autoInput.ts"
click node_fetch "https://github.com/sjjsbsj558/obsidian-synovia/blob/main/src/sources/contentFetcher.ts"
click node_zhihusearch "https://github.com/sjjsbsj558/obsidian-synovia/blob/main/src/sources/zhihuSearchApiClient.ts"
click node_zhihucli "https://github.com/sjjsbsj558/obsidian-synovia/blob/main/src/sources/zhihuCliClient.ts"
click node_zhihumcp "https://github.com/sjjsbsj558/obsidian-synovia/blob/main/src/sources/zhihuMcpSseClient.ts"
click node_sourceformat "https://github.com/sjjsbsj558/obsidian-synovia/blob/main/src/sources/sourceNote.ts"
click node_claims "https://github.com/sjjsbsj558/obsidian-synovia/blob/main/src/evolution/claimExtractor.ts"
click node_knowledge "https://github.com/sjjsbsj558/obsidian-synovia/blob/main/src/evolution/knowledgeGraph.ts"
click node_topic "https://github.com/sjjsbsj558/obsidian-synovia/blob/main/src/evolution/topicReview.ts"
click node_comparison "https://github.com/sjjsbsj558/obsidian-synovia/blob/main/src/evolution/comparator.ts"
click node_maintenance "https://github.com/sjjsbsj558/obsidian-synovia/blob/main/src/maintenance/wikiMaintenance.ts"
click node_diff "https://github.com/sjjsbsj558/obsidian-synovia/blob/main/src/ui/modals/DiffReviewModal.ts"
click node_vaulthelper "https://github.com/sjjsbsj558/obsidian-synovia/blob/main/src/utils/vaultHelper.ts"
click node_journal "https://github.com/sjjsbsj558/obsidian-synovia/blob/main/src/utils/journal.ts"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_sidebar,node_plugin,node_retrieval,node_diff,node_user toneBlue
class node_claims,node_knowledge,node_topic,node_comparison,node_maintenance,node_vault toneAmber
class node_sourceinput,node_fetch,node_zhihusearch,node_zhihucli,node_zhihumcp,node_sourceformat toneMint
class node_index,node_searchadapter,node_model,node_settings,node_vaulthelper,node_journal toneRose
```

## Components

### Opinion workbench

- [Opinion workbench](https://github.com/sjjsbsj558/obsidian-synovia/blob/main/src/ui/SynoviaSidebarView.ts): `src/ui/SynoviaSidebarView.ts`
- [Plugin workflow](https://github.com/sjjsbsj558/obsidian-synovia/blob/main/src/main.ts): `src/main.ts`
- [Note retrieval](https://github.com/sjjsbsj558/obsidian-synovia/blob/main/src/pipeline/retrievalPipeline.ts): `src/pipeline/retrievalPipeline.ts`
- [Change review](https://github.com/sjjsbsj558/obsidian-synovia/blob/main/src/ui/modals/DiffReviewModal.ts): `src/ui/modals/DiffReviewModal.ts`

### Knowledge workflows

- [Claim extraction](https://github.com/sjjsbsj558/obsidian-synovia/blob/main/src/evolution/claimExtractor.ts): `src/evolution/claimExtractor.ts`
- [Knowledge graph](https://github.com/sjjsbsj558/obsidian-synovia/blob/main/src/evolution/knowledgeGraph.ts): `src/evolution/knowledgeGraph.ts`
- [Topic coverage review](https://github.com/sjjsbsj558/obsidian-synovia/blob/main/src/evolution/topicReview.ts): `src/evolution/topicReview.ts`
- [Opinion comparison](https://github.com/sjjsbsj558/obsidian-synovia/blob/main/src/evolution/comparator.ts): `src/evolution/comparator.ts`
- [Wiki maintenance](https://github.com/sjjsbsj558/obsidian-synovia/blob/main/src/maintenance/wikiMaintenance.ts): `src/maintenance/wikiMaintenance.ts`

### Source workflows

- [Source intake](https://github.com/sjjsbsj558/obsidian-synovia/blob/main/src/pipeline/autoInput.ts): `src/pipeline/autoInput.ts`
- [Web content fetch](https://github.com/sjjsbsj558/obsidian-synovia/blob/main/src/sources/contentFetcher.ts): `src/sources/contentFetcher.ts`
- [Zhihu search](https://github.com/sjjsbsj558/obsidian-synovia/blob/main/src/sources/zhihuSearchApiClient.ts): `src/sources/zhihuSearchApiClient.ts`
- [Zhihu CLI](https://github.com/sjjsbsj558/obsidian-synovia/blob/main/src/sources/zhihuCliClient.ts): `src/sources/zhihuCliClient.ts`
- [Zhihu MCP](https://github.com/sjjsbsj558/obsidian-synovia/blob/main/src/sources/zhihuMcpSseClient.ts): `src/sources/zhihuMcpSseClient.ts`
- [Source notes](https://github.com/sjjsbsj558/obsidian-synovia/blob/main/src/sources/sourceNote.ts): `src/sources/sourceNote.ts`

### Runtime services

- [Vault search index](https://github.com/sjjsbsj558/obsidian-synovia/blob/main/src/search/vaultIndex.ts): `src/search/vaultIndex.ts`
- [Lexical search](https://github.com/sjjsbsj558/obsidian-synovia/blob/main/src/search/miniSearchAdapter.ts): `src/search/miniSearchAdapter.ts`
- [Model client](https://github.com/sjjsbsj558/obsidian-synovia/blob/main/src/agent/modelClient.ts): `src/agent/modelClient.ts`
- [Plugin settings](https://github.com/sjjsbsj558/obsidian-synovia/blob/main/src/settings/settings.ts): `src/settings/settings.ts`
- [Safe vault writes](https://github.com/sjjsbsj558/obsidian-synovia/blob/main/src/utils/vaultHelper.ts): `src/utils/vaultHelper.ts`
- [Job and graph records](https://github.com/sjjsbsj558/obsidian-synovia/blob/main/src/utils/journal.ts): `src/utils/journal.ts`

### Other components

- **Obsidian user**
- **Obsidian vault**

## Connections

- Obsidian user → Opinion workbench: asks question
- Opinion workbench → Plugin workflow: requests opinion
- Plugin workflow → Note retrieval: retrieves notes
- Note retrieval → Vault search index: gets index
- Note retrieval → Lexical search: searches terms
- Note retrieval → Model client: ranks candidates
- Plugin workflow → Model client: analyzes notes
- Plugin workflow → Obsidian vault: reads and writes
- Plugin workflow → Plugin settings: uses configuration
- Plugin workflow → Job and graph records: records workflow state
- Obsidian user → Source intake: selects material
- Source intake → Web content fetch: fetches content
- Source intake → Zhihu search: searches Zhihu
- Source intake → Zhihu CLI: uses installed CLI
- Source intake → Zhihu MCP: uses MCP search
- Source intake → Source notes: formats source notes
- Plugin workflow → Claim extraction: extracts claims
- Plugin workflow → Knowledge graph: builds graph
- Plugin workflow → Topic coverage review: reviews topic coverage
- Topic coverage review → Note retrieval: selects excerpts
- Plugin workflow → Opinion comparison: compares opinions
- Plugin workflow → Wiki maintenance: maintains wiki
- Plugin workflow → Change review: presents changes
- Change review → Safe vault writes: applies approved edits
- Safe vault writes → Obsidian vault: writes reviewed files
- Plugin workflow → Safe vault writes: saves generated notes
