From de3b9c1c121f8307f2e4e10dd5396a1268b28396 Mon Sep 17 00:00:00 2001 From: Santhosh Janardhanan Date: Sat, 11 Apr 2026 16:58:46 -0400 Subject: [PATCH] updates to install procedures --- INSTALL.md | 79 +++++++----- .../2026-04-10-obsidian-rag-plugin-design.md | 4 +- openclaw.plugin.json | 119 ++++++++++++++++++ 3 files changed, 166 insertions(+), 36 deletions(-) diff --git a/INSTALL.md b/INSTALL.md index 2af7d71..f587dad 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -331,45 +331,38 @@ obsidian-rag index ## 8. Register the Plugin with OpenClaw -OpenClaw auto-discovers plugins by reading the `openclaw.plugin.json` manifest in the project root and loading `dist/index.js`. +OpenClaw discovers plugins from these locations: +- `~/.openclaw/extensions/` (global, recommended for most users) +- `/.openclaw/extensions/` (workspace-specific) +- Bundled plugins in OpenClaw's install directory -### 8.1 Register via OpenClaw's Plugin Manager +### 8.1 Link Plugin to Global Extensions (Recommended) ```bash -# OpenClaw CLI — register the local plugin -openclaw plugin add "$DESTINATION" -# or, if OpenClaw has a specific register command: -openclaw plugins register --path "$DESTINATION/dist/index.js" --name obsidian-rag +mkdir -p ~/.openclaw/extensions +ln -s "$DESTINATION" ~/.openclaw/extensions/obsidian-rag ``` -> **Note:** The exact command depends on your OpenClaw version. Check `openclaw --help` or `openclaw plugin --help` for the correct syntax. The plugin manifest (`openclaw.plugin.json`) in this project already declares all four tools. - -### 8.2 Alternative — Register by Path in OpenClaw Config - -If your OpenClaw installation uses a config file (e.g., `~/.openclaw/config.json` or `~/.openclaw/plugins.json`), add this project's built bundle: - -```json -{ - "plugins": [ - { - "name": "obsidian-rag", - "path": "/full/path/to/obsidian-rag/dist/index.js" - } - ] -} -``` - -### 8.3 Confirm the Plugin Loaded +### 8.2 Link Plugin to Workspace Extensions (Alternative) ```bash -openclaw plugins list -# → obsidian-rag 0.1.0 (loaded) +# From your OpenClaw workspace root +mkdir -p ./.openclaw/extensions +ln -s "$DESTINATION" ./.openclaw/extensions/obsidian-rag ``` -Or, if OpenClaw has a status command: +### 8.3 Using openclaw plugins install --link + ```bash -openclaw status -# → Plugin: obsidian-rag ✓ loaded +openclaw plugins install --link "$DESTINATION" +``` + +### 8.4 Confirm the Plugin Loaded + +```bash +openclaw plugins list | grep obsidian-rag +# or +openclaw plugins list --verbose | grep obsidian-rag ``` --- @@ -589,10 +582,27 @@ Use an absolute path with proper escaping: ### Plugin not appearing in `openclaw plugins list` -1. Confirm `dist/index.js` exists (`ls -la dist/`) -2. Check that `openclaw.plugin.json` is valid JSON -3. Try re-registering: `openclaw plugin add "$DESTINATION"` -4. Check OpenClaw's plugin discovery path — it may need to be in a specific directory like `~/.openclaw/plugins/` +1. Confirm `dist/index.js` exists: + ```bash + ls -la ~/.openclaw/extensions/obsidian-rag/dist/ + ``` +2. Confirm `openclaw.plugin.json` exists: + ```bash + ls ~/.openclaw/extensions/obsidian-rag/openclaw.plugin.json + ``` +3. Check that the symlink is valid (not broken): + ```bash + ls -la ~/.openclaw/extensions/obsidian-rag + # Should point to your DESTINATION, not show as "red" (broken) + ``` +4. Verify the manifest has `configSchema` (required since v0.1.1): + ```bash + grep configSchema ~/.openclaw/extensions/obsidian-rag/openclaw.plugin.json + ``` +5. Try bypassing discovery cache: + ```bash + OPENCLAW_DISABLE_PLUGIN_DISCOVERY_CACHE=1 openclaw plugins list + ``` --- @@ -623,7 +633,8 @@ npm run build obsidian-rag index # 7. Register with OpenClaw -openclaw plugin add ~/dev/obsidian-rag +mkdir -p ~/.openclaw/extensions +ln -s ~/dev/obsidian-rag ~/.openclaw/extensions/obsidian-rag # 8. Verify obsidian-rag status diff --git a/docs/superpowers/specs/2026-04-10-obsidian-rag-plugin-design.md b/docs/superpowers/specs/2026-04-10-obsidian-rag-plugin-design.md index 5dcc23b..ec8ec40 100644 --- a/docs/superpowers/specs/2026-04-10-obsidian-rag-plugin-design.md +++ b/docs/superpowers/specs/2026-04-10-obsidian-rag-plugin-design.md @@ -66,7 +66,7 @@ The system is structured in four protocol layers, each with its own contract: The plugin follows OpenClaw's standard plugin lifecycle: -1. **INSTALL** — `openclaw plugins install clawhub:obsidian-rag` downloads the plugin and reads `openclaw.plugin.json` +1. **INSTALL** — Link plugin to `~/.openclaw/extensions/obsidian-rag` or `/.openclaw/extensions/obsidian-rag`. OpenClaw reads `openclaw.plugin.json` on discovery. 2. **REGISTER** — Plugin registers 4 tools with OpenClaw's Tool Registry: `obsidian_rag_search`, `obsidian_rag_index`, `obsidian_rag_status`, `obsidian_rag_memory_store`. Each tool declares: name, description, parameterSchema, requiredPermissions. 3. **SERVE** — OpenClaw agent calls tools based on user intent. 4. **HEALTH CHECK** — `Plugin.onLoad()` probes Ollama, LanceDB, and the vault, then reports `healthy | degraded | unavailable`. @@ -562,7 +562,7 @@ clawhub skill publish ./skill --slug obsidian-rag --version 1.0.0 clawhub package publish santhosh/obsidian-rag ``` -Install: `openclaw plugins install clawhub:obsidian-rag` +Install: Link plugin to `~/.openclaw/extensions/obsidian-rag` or use `openclaw plugins install --link /path/to/obsidian-rag` ## Windows Development Notes diff --git a/openclaw.plugin.json b/openclaw.plugin.json index 7f40393..68712d9 100644 --- a/openclaw.plugin.json +++ b/openclaw.plugin.json @@ -7,6 +7,125 @@ "author": "Santhosh Janardhanan", "openclaw": "^2026.4.9", "main": "dist/index.js", + "configSchema": { + "type": "object", + "additionalProperties": false, + "properties": { + "vault_path": { + "type": "string", + "description": "Path to Obsidian vault" + }, + "embedding": { + "type": "object", + "additionalProperties": false, + "properties": { + "provider": { + "type": "string", + "enum": ["ollama"] + }, + "model": { + "type": "string" + }, + "base_url": { + "type": "string", + "format": "uri" + }, + "dimensions": { + "type": "integer", + "minimum": 1 + }, + "batch_size": { + "type": "integer", + "minimum": 1 + } + } + }, + "vector_store": { + "type": "object", + "additionalProperties": false, + "properties": { + "type": { + "type": "string", + "enum": ["lancedb"] + }, + "path": { + "type": "string" + } + } + }, + "indexing": { + "type": "object", + "additionalProperties": false, + "properties": { + "chunk_size": { + "type": "integer", + "minimum": 1 + }, + "chunk_overlap": { + "type": "integer", + "minimum": 0 + }, + "file_patterns": { + "type": "array", + "items": { + "type": "string" + } + }, + "deny_dirs": { + "type": "array", + "items": { + "type": "string" + } + }, + "allow_dirs": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "security": { + "type": "object", + "additionalProperties": false, + "properties": { + "require_confirmation_for": { + "type": "array", + "items": { + "type": "string" + } + }, + "sensitive_sections": { + "type": "array", + "items": { + "type": "string" + } + }, + "local_only": { + "type": "boolean" + } + } + }, + "memory": { + "type": "object", + "additionalProperties": false, + "properties": { + "auto_suggest": { + "type": "boolean" + }, + "patterns": { + "type": "object", + "additionalProperties": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + } + }, "tools": [ { "name": "obsidian_rag_search",