Initial Obsidian plugin release repository

This commit is contained in:
张宗平
2026-04-27 12:18:37 +08:00
commit 96ec7adc5b
7 changed files with 385 additions and 0 deletions
+18
View File
@@ -0,0 +1,18 @@
# LLM-Wiki Obsidian Community Publishing Staging
This directory is a staging export for an Obsidian community-plugin repository root.
Required next steps:
1. push this directory into a dedicated repository
2. tag a release matching `0.0.1`
3. attach release assets:
- `main.js`
- `manifest.json`
- `styles.css`
4. keep `versions.json` at repository root
5. submit the repository to `obsidianmd/obsidian-releases`
Runtime note:
This plugin still requires a separate external LLM-Wiki runtime root. The published Obsidian plugin bundle does not embed the full runtime.
+21
View File
@@ -0,0 +1,21 @@
MIT License
Copyright (c) 2026 LLM-Wiki contributors
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
+100
View File
@@ -0,0 +1,100 @@
# LLM-Wiki Obsidian Plugin
Desktop-only Obsidian community plugin for Phase 2 of LLM-Wiki.
## What it does
- right-sidebar chat panel for discussing the active wiki page with Claude Code
- Save Insight action that persists assistant output through `scripts/lw2-save-insight`
- Fast Research tab that runs an isolated read-only Claude research turn and can promote useful output through Save Insight
- Deep Research workbench that uses Claude sessions to iteratively refine a draft before registering it with `scripts/lw2-deep-research`
- source trust badges in edit/preview modes with mutation routed through `scripts/lw2-source-trust`
- batch source-trust updates for all page sources from the current note
- command-palette entries for `Run LLM-Wiki compile preflight` and `Run LLM-Wiki lint deterministic pass`
- confidence-tag styling for inline markers such as `*EXTRACTED 0.95*`
## Current compile/lint scope
The Obsidian plugin currently exposes:
- `Run LLM-Wiki compile preflight`
- `Run LLM-Wiki lint deterministic pass`
These are deterministic script entrypoints, not the full prompt-owned Claude compile workflow. That means:
- compile currently runs the conservative `scripts/lw2-compile` preflight and reports the manifest state
- lint currently runs `scripts/lw2-lint`
- the full semantic wiki-compilation workflow is still centered on the Claude Code `lw2:compile` skill
## Development
```bash
cd apps/obsidian-lw2
npm install
npm test
npm run build
npm run release:bundle
npm run release:community-staging -- --license /path/to/LICENSE
```
Repo-level regression:
```bash
cd /home/charles/workspaces/notes/my-llm-wiki
npm run test:obsidian
```
Release bundle output:
- directory: `apps/obsidian-lw2/release/lw2-obsidian-<version>/`
- zip: `apps/obsidian-lw2/release/lw2-obsidian-<version>.zip` when `zip` is available
The release bundle contains:
- `main.js`
- `manifest.json`
- `styles.css`
- `versions.json`
- `README.md`
- `INSTALL.md`
Community-repo staging:
- command: `npm run release:community-staging -- --license /path/to/LICENSE`
- output: `apps/obsidian-lw2/release/community-repo/`
This exports a directory shaped like an Obsidian community-plugin repository root. It intentionally fails unless you provide a real `LICENSE` file path.
## Local loading in Obsidian
1. Build the package: `npm run build`
2. Copy or symlink `apps/obsidian-lw2/` into your vault at `.obsidian/plugins/lw2-obsidian/`
3. Enable **LLM-Wiki Obsidian** in Community Plugins
4. Open plugin settings and set:
- runtime root: absolute path to the LLM-Wiki runtime repo
- Claude command: usually `claude`
- Claude plugin dir: `plugins/lw2`
- the opened Obsidian vault remains the content root; it does not need to contain `scripts/` or `plugins/lw2/`
5. Run the manual checklist in [`../../tests/live/obsidian-plugin-checklist.md`](../../tests/live/obsidian-plugin-checklist.md)
## Third-Party Manual Install
1. Build the release bundle with `npm run release:bundle`
2. Copy `main.js`, `manifest.json`, and `styles.css` from `release/lw2-obsidian-<version>/` into:
- `.obsidian/plugins/lw2-obsidian/`
3. Enable **LLM-Wiki Obsidian**
4. Point `runtime root` at an external LLM-Wiki runtime checkout
This plugin does not embed the full LLM-Wiki runtime. Third-party installs still need a separate runtime root.
## Official Community Plugin Path
The recommended publication model is:
1. build the plugin here
2. export `release/community-repo/`
3. push that directory into a dedicated release repository
4. publish GitHub releases from that repository
5. submit that repository to Obsidian's community plugin index
This monorepo is the development source of truth, not the ideal official marketplace repository root.
+15
View File
File diff suppressed because one or more lines are too long
+9
View File
@@ -0,0 +1,9 @@
{
"id": "lw2-obsidian",
"name": "LLM-Wiki Obsidian",
"version": "0.0.1",
"minAppVersion": "1.7.2",
"description": "Desktop-only Obsidian shell for the LLM-Wiki Claude workflow.",
"author": "LLM-Wiki",
"isDesktopOnly": true
}
+219
View File
@@ -0,0 +1,219 @@
.lw2-obsidian-status {
color: var(--text-muted);
font-size: var(--font-ui-smaller);
}
.lw2-obsidian-settings-note {
color: var(--text-muted);
margin-top: 0.75rem;
}
.lw2-chat-view {
display: flex;
flex-direction: column;
gap: 0.75rem;
height: 100%;
padding: 0.75rem;
}
.lw2-chat-header {
display: flex;
flex-direction: column;
gap: 0.35rem;
}
.lw2-chat-header-top {
display: flex;
align-items: center;
justify-content: space-between;
gap: 0.5rem;
}
.lw2-chat-header h2 {
margin: 0;
font-size: 1rem;
}
.lw2-chat-close-button {
flex: 0 0 auto;
}
.lw2-chat-context,
.lw2-modal-context,
.lw2-chat-message-context {
color: var(--text-muted);
font-size: var(--font-ui-smaller);
}
.lw2-chat-transcript {
flex: 1;
overflow-y: auto;
display: flex;
flex-direction: column;
gap: 0.75rem;
user-select: text;
-webkit-user-select: text;
}
.lw2-chat-empty {
color: var(--text-muted);
margin: 0;
}
.lw2-chat-message {
display: flex;
flex-direction: column;
gap: 0.35rem;
border: 1px solid var(--background-modifier-border);
border-radius: 8px;
padding: 0.65rem;
}
.lw2-chat-message-user {
background: color-mix(in srgb, var(--interactive-accent) 10%, var(--background-primary));
}
.lw2-chat-message-assistant {
background: var(--background-secondary);
}
.lw2-chat-message-role {
color: var(--text-muted);
font-size: var(--font-ui-smaller);
text-transform: uppercase;
}
.lw2-chat-message-body {
margin: 0;
white-space: pre-wrap;
word-break: break-word;
font: inherit;
user-select: text;
-webkit-user-select: text;
}
.lw2-chat-message-actions,
.lw2-chat-actions,
.lw2-modal-actions {
display: flex;
gap: 0.5rem;
flex-wrap: wrap;
}
.lw2-chat-composer {
display: flex;
flex-direction: column;
gap: 0.5rem;
}
.lw2-chat-input,
.lw2-modal-textarea textarea,
.lw2-modal-textarea {
width: 100%;
min-height: 8rem;
resize: vertical;
border-radius: 8px;
}
.lw2-research-controls {
display: flex;
flex-direction: column;
gap: 0.5rem;
}
.lw2-research-input {
width: 100%;
}
.lw2-deep-research-scroll {
flex: 1;
min-height: 0;
overflow-y: auto;
display: flex;
flex-direction: column;
gap: 0.75rem;
}
.lw2-deep-research-transcript {
flex: 0 0 auto;
overflow: visible;
}
.lw2-deep-research-footer {
flex: 0 0 auto;
display: flex;
flex-direction: column;
gap: 0.75rem;
padding-top: 0.75rem;
border-top: 1px solid var(--background-modifier-border);
background: var(--background-primary);
}
.lw2-source-badge-row {
display: inline-flex;
gap: 0.4rem;
flex-wrap: wrap;
width: 100%;
box-sizing: border-box;
vertical-align: top;
margin: 0 0 0.75rem;
}
.lw2-source-badge {
border: 1px solid var(--background-modifier-border);
border-radius: 999px;
padding: 0.15rem 0.55rem;
font-size: var(--font-ui-smaller);
background: var(--background-primary-alt);
}
.lw2-source-badge-active {
color: var(--text-normal);
}
.lw2-source-badge-flagged {
color: var(--color-orange);
border-color: color-mix(in srgb, var(--color-orange) 55%, var(--background-modifier-border));
}
.lw2-source-badge-obsolete {
color: var(--color-red);
border-color: color-mix(in srgb, var(--color-red) 55%, var(--background-modifier-border));
}
.lw2-source-badge-excluded {
color: var(--text-faint);
border-color: var(--background-modifier-border-hover);
}
.lw2-source-badge-batch {
color: var(--text-muted);
background: var(--background-secondary);
}
.lw2-confidence-pill {
display: inline-block;
border-radius: 999px;
padding: 0 0.45rem;
border: 1px solid var(--background-modifier-border);
}
.lw2-confidence-extracted {
color: var(--color-green);
}
.lw2-confidence-inferred {
color: var(--color-blue);
}
.lw2-confidence-ambiguous {
color: var(--color-orange);
}
.lw2-confidence-high {
font-weight: 600;
}
.lw2-confidence-low {
opacity: 0.82;
}
+3
View File
@@ -0,0 +1,3 @@
{
"0.0.1": "1.7.2"
}