diff --git a/AGENTS.md b/AGENTS.md index d90305c..1e946e4 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -1,22 +1,3 @@ - -# OpenSpec Instructions - -These instructions are for AI assistants working in this project. - -Always open `@/openspec/AGENTS.md` when the request: -- Mentions planning or proposals (words like proposal, spec, change, plan) -- Introduces new capabilities, breaking changes, architecture shifts, or big performance/security work -- Sounds ambiguous and you need the authoritative spec before coding - -Use `@/openspec/AGENTS.md` to learn: -- How to create and apply change proposals -- Spec format and conventions -- Project structure and guidelines - -Keep this managed block so 'openspec update' can refresh the instructions. - - - # AGENTS.md - Obsidian OpenCode Plugin Guidelines for AI coding agents working on the obsidian-opencode plugin. @@ -31,19 +12,11 @@ Obsidian plugin that embeds the OpenCode AI assistant via an iframe. Spawns a lo ```bash bun install # Install dependencies -bun run dev # Development (watch mode) bun run build # Production (type-check + bundle) ``` Output: `main.js` (CommonJS bundle) -## Testing & Linting - -**Not configured.** If adding: -- Tests: Vitest, files in `src/__tests__/` or `*.test.ts` -- Linting: ESLint + `@typescript-eslint/parser` -- Scripts: `"test": "vitest run"`, `"lint": "eslint src"` - ## Project Structure ``` @@ -55,25 +28,7 @@ src/ └── SettingsTab.ts # Settings UI (PluginSettingTab) ``` -## Code Style - -### Imports -- ES modules with named imports -- Order: Obsidian API, Node.js builtins, local modules -- Use `type` for type-only imports -- Relative paths with `./` prefix - -```typescript -import { Plugin, WorkspaceLeaf, Notice } from "obsidian"; -import { spawn, ChildProcess } from "child_process"; -import type OpenCodePlugin from "./main"; -import { OpenCodeSettings, DEFAULT_SETTINGS } from "./types"; -``` - -### Exports -- `export default class` for main plugin -- Named exports for other classes/types/constants -- One class per file, filename matches class (PascalCase) +## Coding guidelines ### Naming Conventions @@ -98,23 +53,6 @@ getProcessState(): ProcessState { } ``` -### Error Handling -- try/catch for async operations -- `console.error()` for debugging -- `new Notice()` for user-facing errors -- Boolean returns for success/failure -- Silent catch for non-critical ops (health checks) - -```typescript -try { - await this.processManager.start(); -} catch (error) { - console.error("Failed to start:", error); - new Notice(`Failed to start OpenCode: ${error.message}`); - return false; -} -``` - ### Obsidian API Patterns - Extend `Plugin` with `onload()`/`onunload()` lifecycle - Extend `ItemView` for views: `getViewType()`, `onOpen()`, `onClose()` @@ -152,3 +90,22 @@ Uses Node.js APIs unavailable on mobile: - File system via vault adapter Check for desktop environment before adding mobile-incompatible features. + + +# OpenSpec Instructions + +These instructions are for AI assistants working in this project. + +Always open `@/openspec/AGENTS.md` when the request: +- Mentions planning or proposals (words like proposal, spec, change, plan) +- Introduces new capabilities, breaking changes, architecture shifts, or big performance/security work +- Sounds ambiguous and you need the authoritative spec before coding + +Use `@/openspec/AGENTS.md` to learn: +- How to create and apply change proposals +- Spec format and conventions +- Project structure and guidelines + +Keep this managed block so 'openspec update' can refresh the instructions. + + \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..69fcc51 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2025 Mateusz Tymek + +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. diff --git a/README.md b/README.md index 0d33b07..65cb4b7 100644 --- a/README.md +++ b/README.md @@ -1,17 +1,30 @@ -# Obsidian OpenCode +# OpenCode plugin for Obsidian -Embed [OpenCode](https://opencode.ai) AI assistant directly in Obsidian's sidebar. + +Give your notes AI capability by embedding Opencode [OpenCode](https://opencode.ai) AI assistant directly in Obsidian: + +OpenCode embeded in Obsidian + +**Use cases:** +- Summarize and distill long-form content +- Draft, edit, and refine your writing +- Query and explore your knowledge base +- Generate outlines and structured notes + +_Note: plugin author is not afiliated with OpenCode or Obsidian - this is a 3rd party software._ ## Requirements - Desktop only (uses Node.js child processes) -- [OpenCode CLI](https://opencode.ai) installed and in your PATH +- [OpenCode CLI](https://opencode.ai) installed +- [Bun](https://bun.sh) installed ## Installation -1. Clone to `.obsidian/plugins/obsidian-opencode` -2. `bun install && bun run build` +1. Clone to `.obsidian/plugins/obsidian-opencode` subdirectory under your vault's root +2. Run `bun install && bun run build` 3. Enable in Obsidian Settings > Community plugins +4. Add AGENTS.md to the workspace root, use it to explain the structure ## Usage @@ -29,20 +42,5 @@ Embed [OpenCode](https://opencode.ai) AI assistant directly in Obsidian's sideba ## Settings -| Setting | Default | Description | -|---------|---------|-------------| -| Port | 14096 | Server port | -| Hostname | 127.0.0.1 | Bind address | -| OpenCode path | opencode | Path to executable | -| Auto-start | off | Start server on Obsidian launch | +Available plugin settings -## Development - -```bash -bun run dev # Watch mode -bun run build # Production build -``` - -## License - -MIT diff --git a/assets/opencode_in_obsidian.png b/assets/opencode_in_obsidian.png new file mode 100644 index 0000000..c206d16 Binary files /dev/null and b/assets/opencode_in_obsidian.png differ diff --git a/assets/plugin_settings.png b/assets/plugin_settings.png new file mode 100644 index 0000000..561847c Binary files /dev/null and b/assets/plugin_settings.png differ diff --git a/package.json b/package.json index f07c547..78489a2 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "main": "main.js", "scripts": { "dev": "node esbuild.config.mjs", - "build": "npx tsc -noEmit -skipLibCheck && node esbuild.config.mjs production" + "build": "bun run tsc -noEmit -skipLibCheck && bun run esbuild.config.mjs production" }, "keywords": [ "obsidian",