Initial Obsidian plugin release repository
This commit is contained in:
@@ -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.
|
||||||
@@ -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.
|
||||||
@@ -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.
|
||||||
@@ -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
@@ -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;
|
||||||
|
}
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"0.0.1": "1.7.2"
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user