claude-autopm 3.23.1 → 3.23.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/deploy-docs.yml +2 -2
- package/.github/workflows/npm-publish.yml +2 -2
- package/.github/workflows/plugin-publish.yml +2 -2
- package/README.md +3 -1
- package/autopm/.claude/docs/xml-prompts/README.md +3 -3
- package/autopm/.claude/docs/xml-prompts/creating-templates.md +2 -2
- package/autopm/.claude/docs/xml-prompts/templates-guide.md +1 -1
- package/install/install.js +22 -3
- package/install/post-install-check.js +29 -0
- package/package.json +6 -6
- package/packages/plugin-obsidian/LICENSE +21 -0
- package/packages/plugin-obsidian/README.md +129 -0
- package/packages/plugin-obsidian/claude-md/obsidian-section.md +30 -0
- package/packages/plugin-obsidian/commands/obsidian:doctor.md +63 -0
- package/packages/plugin-obsidian/commands/obsidian:setup.md +69 -0
- package/packages/plugin-obsidian/commands/obsidian:sync.md +105 -0
- package/packages/plugin-obsidian/package.json +51 -0
- package/packages/plugin-obsidian/plugin.json +73 -0
- package/packages/plugin-obsidian/scripts/obsidian/doctor.js +455 -0
- package/packages/plugin-obsidian/scripts/obsidian/setup.js +449 -0
- package/packages/plugin-obsidian/scripts/obsidian/sync-to-obsidian.js +584 -0
- package/packages/plugin-obsidian/scripts/obsidian/sync-to-obsidian.sh +533 -0
- package/packages/plugin-obsidian/templates/DASHBOARD.md.tmpl +63 -0
- package/packages/plugin-obsidian/templates/FRONTMATTER_SCHEMA.md +40 -0
- package/packages/plugin-obsidian/templates/MOC.md.tmpl +61 -0
- package/packages/plugin-obsidian/templates/_templates/epic.md +30 -0
- package/packages/plugin-obsidian/templates/_templates/issue.md +28 -0
- package/packages/plugin-obsidian/templates/_templates/prd.md +29 -0
- package/packages/plugin-obsidian/templates/diagrams/01-architecture.md +38 -0
- package/packages/plugin-obsidian/templates/diagrams/pizarra.excalidraw.md +29 -0
- package/packages/plugin-obsidian/tests/docs.test.js +97 -0
- package/packages/plugin-obsidian/tests/doctor.test.js +432 -0
- package/packages/plugin-obsidian/tests/installer-wiring.test.js +60 -0
- package/packages/plugin-obsidian/tests/setup.test.js +536 -0
- package/packages/plugin-obsidian/tests/sync-to-obsidian-node.test.js +458 -0
- package/packages/plugin-obsidian/tests/sync-to-obsidian.bats +266 -0
- package/packages/plugin-obsidian/tests/templates.test.js +125 -0
- package/packages/plugin-obsidian/tests/test-sync-basic.sh +121 -0
|
@@ -35,7 +35,7 @@ jobs:
|
|
|
35
35
|
cache-dependency-path: docs-site/package-lock.json
|
|
36
36
|
|
|
37
37
|
- name: Setup Pages
|
|
38
|
-
uses: actions/configure-pages@
|
|
38
|
+
uses: actions/configure-pages@v6
|
|
39
39
|
|
|
40
40
|
- name: Install dependencies
|
|
41
41
|
run: npm ci
|
|
@@ -59,4 +59,4 @@ jobs:
|
|
|
59
59
|
steps:
|
|
60
60
|
- name: Deploy to GitHub Pages
|
|
61
61
|
id: deployment
|
|
62
|
-
uses: actions/deploy-pages@
|
|
62
|
+
uses: actions/deploy-pages@v5
|
|
@@ -11,7 +11,7 @@ jobs:
|
|
|
11
11
|
runs-on: ubuntu-latest
|
|
12
12
|
steps:
|
|
13
13
|
- uses: actions/checkout@v4
|
|
14
|
-
- uses: actions/setup-node@
|
|
14
|
+
- uses: actions/setup-node@v6
|
|
15
15
|
with:
|
|
16
16
|
node-version: '20'
|
|
17
17
|
- run: npm ci --legacy-peer-deps
|
|
@@ -24,7 +24,7 @@ jobs:
|
|
|
24
24
|
contents: read
|
|
25
25
|
steps:
|
|
26
26
|
- uses: actions/checkout@v4
|
|
27
|
-
- uses: actions/setup-node@
|
|
27
|
+
- uses: actions/setup-node@v6
|
|
28
28
|
with:
|
|
29
29
|
node-version: '20'
|
|
30
30
|
registry-url: 'https://registry.npmjs.org'
|
|
@@ -34,7 +34,7 @@ jobs:
|
|
|
34
34
|
- plugin-testing
|
|
35
35
|
steps:
|
|
36
36
|
- uses: actions/checkout@v4
|
|
37
|
-
- uses: actions/setup-node@
|
|
37
|
+
- uses: actions/setup-node@v6
|
|
38
38
|
with:
|
|
39
39
|
node-version: '20'
|
|
40
40
|
registry-url: 'https://registry.npmjs.org'
|
|
@@ -52,7 +52,7 @@ jobs:
|
|
|
52
52
|
id-token: write
|
|
53
53
|
steps:
|
|
54
54
|
- uses: actions/checkout@v4
|
|
55
|
-
- uses: actions/setup-node@
|
|
55
|
+
- uses: actions/setup-node@v6
|
|
56
56
|
with:
|
|
57
57
|
node-version: '20'
|
|
58
58
|
registry-url: 'https://registry.npmjs.org'
|
package/README.md
CHANGED
|
@@ -27,6 +27,7 @@ Choose your scenario during installation:
|
|
|
27
27
|
| **GitHub** | 12 | Core + languages for GitHub projects |
|
|
28
28
|
| **Azure** | 14 | Core + languages + Azure DevOps |
|
|
29
29
|
| **Docker** | 16 | Core + DevOps + containers |
|
|
30
|
+
| **Obsidian** | 12 | PM + Obsidian vault integration |
|
|
30
31
|
| **Full** | 44+ | All plugins, all agents |
|
|
31
32
|
| **Performance** | 44+ | Full + max parallelization |
|
|
32
33
|
|
|
@@ -134,10 +135,11 @@ All commands run inside Claude Code (not terminal):
|
|
|
134
135
|
|
|
135
136
|
## Features
|
|
136
137
|
|
|
137
|
-
###
|
|
138
|
+
### 14 Official Plugins
|
|
138
139
|
|
|
139
140
|
- **Core** — Context management, testing, configuration, MCP
|
|
140
141
|
- **PM System** — PRD, epics, issues, decomposition, git workflow
|
|
142
|
+
- **Obsidian** — Read-only vault sync, Dataview frontmatter, diagnostics
|
|
141
143
|
- **Azure DevOps** — Work items, boards, pipelines, sprints
|
|
142
144
|
- **GitHub** — Workflows, issues, PRs, automation
|
|
143
145
|
- **Languages** — Python, JavaScript, Node.js, Bash
|
|
@@ -435,7 +435,7 @@ Create templates tailored to your project:
|
|
|
435
435
|
--stage 2
|
|
436
436
|
|
|
437
437
|
# Edit template
|
|
438
|
-
vim
|
|
438
|
+
vim .claude/templates/xml-prompts/dev/microservice.xml
|
|
439
439
|
|
|
440
440
|
# Use custom template
|
|
441
441
|
/prompt:xml microservice \
|
|
@@ -522,5 +522,5 @@ Solution: Provide missing flag
|
|
|
522
522
|
- `.claude/commands/xml/prompt-xml.md`
|
|
523
523
|
- `.claude/commands/xml/template.md`
|
|
524
524
|
- **Utilities:**
|
|
525
|
-
-
|
|
526
|
-
-
|
|
525
|
+
- `.claude/lib/xml-prompt-builder.js`
|
|
526
|
+
- `.claude/lib/xml-validator.js`
|
|
@@ -111,7 +111,7 @@ This will prompt you for:
|
|
|
111
111
|
|
|
112
112
|
```bash
|
|
113
113
|
# Create file in appropriate category
|
|
114
|
-
vim
|
|
114
|
+
vim .claude/templates/xml-prompts/dev/my-template.xml
|
|
115
115
|
```
|
|
116
116
|
|
|
117
117
|
### Step 3: Define Template Content
|
|
@@ -558,7 +558,7 @@ cat test.xml | grep -q "<thinking>" && echo "✅ Has thinking" || echo "❌ Miss
|
|
|
558
558
|
Track template changes:
|
|
559
559
|
|
|
560
560
|
```bash
|
|
561
|
-
git add
|
|
561
|
+
git add .claude/templates/xml-prompts/dev/my-template.xml
|
|
562
562
|
git commit -m "Update microservice template with health check requirements"
|
|
563
563
|
```
|
|
564
564
|
|
|
@@ -462,7 +462,7 @@ done
|
|
|
462
462
|
/xml:template create microservice --category dev --stage 2
|
|
463
463
|
|
|
464
464
|
# Edit to add project-specific constraints
|
|
465
|
-
vim
|
|
465
|
+
vim .claude/templates/xml-prompts/dev/microservice.xml
|
|
466
466
|
|
|
467
467
|
# Add your patterns:
|
|
468
468
|
# - Service structure requirements
|
package/install/install.js
CHANGED
|
@@ -556,6 +556,14 @@ ${this.colors.BOLD}Select installation scenario:${this.colors.NC}
|
|
|
556
556
|
• Advanced users only
|
|
557
557
|
`);
|
|
558
558
|
|
|
559
|
+
// Option 7: Obsidian (always available)
|
|
560
|
+
console.log(`${this.colors.CYAN}7. Obsidian${this.colors.NC} - PM + Obsidian vault integration (rsync, Dataview, templates)
|
|
561
|
+
• Core + PM + Obsidian vault sync
|
|
562
|
+
• Unidirectional project → vault mirroring
|
|
563
|
+
• Best for: Knowledge management, documentation-heavy projects
|
|
564
|
+
${this.colors.DIM}• Plugins: core, pm, obsidian (3 plugins)${this.colors.NC}
|
|
565
|
+
`);
|
|
566
|
+
|
|
559
567
|
if (process.env.AUTOPM_TEST_MODE === '1') {
|
|
560
568
|
this.printMsg('CYAN', 'Auto-selecting option 0 (lite) for test mode');
|
|
561
569
|
return 'lite';
|
|
@@ -571,7 +579,7 @@ ${this.colors.BOLD}Select installation scenario:${this.colors.NC}
|
|
|
571
579
|
|
|
572
580
|
return new Promise((resolve) => {
|
|
573
581
|
const askQuestion = () => {
|
|
574
|
-
rl.question(`${this.colors.CYAN}Enter your choice (0-
|
|
582
|
+
rl.question(`${this.colors.CYAN}Enter your choice (0-7) [${defaultChoice}]: ${this.colors.NC}`, (answer) => {
|
|
575
583
|
const choice = answer.trim() || defaultChoice;
|
|
576
584
|
const scenarios = {
|
|
577
585
|
'0': 'lite',
|
|
@@ -580,7 +588,8 @@ ${this.colors.BOLD}Select installation scenario:${this.colors.NC}
|
|
|
580
588
|
'3': 'docker',
|
|
581
589
|
'4': 'full',
|
|
582
590
|
'5': 'performance',
|
|
583
|
-
'6': 'custom'
|
|
591
|
+
'6': 'custom',
|
|
592
|
+
'7': 'obsidian'
|
|
584
593
|
};
|
|
585
594
|
|
|
586
595
|
const selectedScenario = scenarios[choice];
|
|
@@ -608,7 +617,7 @@ ${this.colors.BOLD}Select installation scenario:${this.colors.NC}
|
|
|
608
617
|
}
|
|
609
618
|
|
|
610
619
|
if (!selectedScenario) {
|
|
611
|
-
console.log(`${this.colors.RED}✗ Invalid choice. Please select 0-
|
|
620
|
+
console.log(`${this.colors.RED}✗ Invalid choice. Please select 0-7.${this.colors.NC}`);
|
|
612
621
|
askQuestion();
|
|
613
622
|
return;
|
|
614
623
|
}
|
|
@@ -703,6 +712,16 @@ ${this.colors.BOLD}Select installation scenario:${this.colors.NC}
|
|
|
703
712
|
kubernetes: { enabled: true }
|
|
704
713
|
},
|
|
705
714
|
plugins: ['plugin-core', 'plugin-languages', 'plugin-frameworks', 'plugin-testing', 'plugin-devops', 'plugin-cloud', 'plugin-databases', 'plugin-data', 'plugin-pm', 'plugin-pm-github', 'plugin-ai', 'plugin-ml']
|
|
715
|
+
},
|
|
716
|
+
obsidian: {
|
|
717
|
+
version: version,
|
|
718
|
+
installed: new Date().toISOString(),
|
|
719
|
+
execution_strategy: 'sequential',
|
|
720
|
+
tools: {
|
|
721
|
+
docker: { enabled: false },
|
|
722
|
+
kubernetes: { enabled: false }
|
|
723
|
+
},
|
|
724
|
+
plugins: ['plugin-core', 'plugin-pm', 'plugin-obsidian']
|
|
706
725
|
}
|
|
707
726
|
};
|
|
708
727
|
|
|
@@ -37,6 +37,7 @@ class PostInstallChecker {
|
|
|
37
37
|
this.checkMCPConfiguration();
|
|
38
38
|
this.checkGitHooks();
|
|
39
39
|
this.checkNodeVersion();
|
|
40
|
+
this.checkObsidianVault();
|
|
40
41
|
|
|
41
42
|
// Display results
|
|
42
43
|
this.displayResults();
|
|
@@ -336,6 +337,34 @@ class PostInstallChecker {
|
|
|
336
337
|
}
|
|
337
338
|
}
|
|
338
339
|
|
|
340
|
+
/**
|
|
341
|
+
* Check Obsidian vault configuration
|
|
342
|
+
*/
|
|
343
|
+
checkObsidianVault() {
|
|
344
|
+
const configPath = path.join(this.projectRoot, '.claude', 'config.json');
|
|
345
|
+
let configured = false;
|
|
346
|
+
let message = 'Not configured — run: obsidian:setup';
|
|
347
|
+
|
|
348
|
+
if (fs.existsSync(configPath)) {
|
|
349
|
+
try {
|
|
350
|
+
const config = JSON.parse(fs.readFileSync(configPath, 'utf8'));
|
|
351
|
+
const vaultPath = config.obsidian?.vault_path;
|
|
352
|
+
if (vaultPath) {
|
|
353
|
+
configured = true;
|
|
354
|
+
message = `Vault: ${vaultPath}`;
|
|
355
|
+
}
|
|
356
|
+
} catch (error) {
|
|
357
|
+
// config unreadable, leave as not configured
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
this.results.optional.push({
|
|
362
|
+
name: 'Obsidian vault',
|
|
363
|
+
status: configured,
|
|
364
|
+
message: message
|
|
365
|
+
});
|
|
366
|
+
}
|
|
367
|
+
|
|
339
368
|
/**
|
|
340
369
|
* Display check results
|
|
341
370
|
*/
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "claude-autopm",
|
|
3
|
-
"version": "3.23.
|
|
3
|
+
"version": "3.23.2",
|
|
4
4
|
"description": "Autonomous Project Management Framework for Claude Code - Advanced AI-powered development automation",
|
|
5
5
|
"main": "bin/autopm.js",
|
|
6
6
|
"workspaces": [
|
|
@@ -125,7 +125,7 @@
|
|
|
125
125
|
"README.md"
|
|
126
126
|
],
|
|
127
127
|
"dependencies": {
|
|
128
|
-
"@anthropic-ai/sdk": "^0.
|
|
128
|
+
"@anthropic-ai/sdk": "^0.82.0",
|
|
129
129
|
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
130
130
|
"@octokit/rest": "^22.0.0",
|
|
131
131
|
"azure-devops-node-api": "^15.1.1",
|
|
@@ -135,10 +135,10 @@
|
|
|
135
135
|
"fast-glob": "^3.3.2",
|
|
136
136
|
"fs-extra": "^11.3.2",
|
|
137
137
|
"glob": "^11.0.3",
|
|
138
|
-
"inquirer": "^
|
|
138
|
+
"inquirer": "^13.3.2",
|
|
139
139
|
"js-yaml": "^4.1.0",
|
|
140
140
|
"markdown-it": "^14.1.0",
|
|
141
|
-
"marked": "^
|
|
141
|
+
"marked": "^17.0.6",
|
|
142
142
|
"moment": "^2.29.4",
|
|
143
143
|
"ora": "~5.4.1",
|
|
144
144
|
"simple-git": "^3.20.0",
|
|
@@ -151,7 +151,7 @@
|
|
|
151
151
|
"@jest/globals": "^30.1.2",
|
|
152
152
|
"@types/jest": "^30.0.0",
|
|
153
153
|
"axios": "^1.12.2",
|
|
154
|
-
"c8": "^
|
|
154
|
+
"c8": "^11.0.0",
|
|
155
155
|
"chai": "^6.0.1",
|
|
156
156
|
"jest": "^30.1.3",
|
|
157
157
|
"jest-diff": "^30.1.2",
|
|
@@ -166,7 +166,7 @@
|
|
|
166
166
|
"sinon": "^21.0.0"
|
|
167
167
|
},
|
|
168
168
|
"optionalDependencies": {
|
|
169
|
-
"@playwright/mcp": "^0.0.
|
|
169
|
+
"@playwright/mcp": "^0.0.70",
|
|
170
170
|
"@upstash/context7-mcp": "^2.1.6"
|
|
171
171
|
},
|
|
172
172
|
"publishConfig": {
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Rafal Lagowski
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
# @claudeautopm/plugin-obsidian
|
|
2
|
+
|
|
3
|
+
> **Obsidian Vault Integration Plugin for ClaudeAutoPM Framework**
|
|
4
|
+
|
|
5
|
+
[](https://opensource.org/licenses/MIT)
|
|
6
|
+
|
|
7
|
+
## Overview
|
|
8
|
+
|
|
9
|
+
`@claudeautopm/plugin-obsidian` creates a read-only Obsidian vault mirror of your ClaudeAutoPM project. It syncs project markdown (agents, commands, rules, epics, PRDs, issues) to an Obsidian vault where Dataview, Mermaid, Excalidraw, and canonical frontmatter work out of the box.
|
|
10
|
+
|
|
11
|
+
Sync is **unidirectional**: project to vault. Never edit files in the Obsidian vault directly.
|
|
12
|
+
|
|
13
|
+
### Package Information
|
|
14
|
+
|
|
15
|
+
- **Package Name:** `@claudeautopm/plugin-obsidian`
|
|
16
|
+
- **Category:** Integration
|
|
17
|
+
- **Schema Version:** 2.0
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## Features
|
|
22
|
+
|
|
23
|
+
- **Vault Sync** -- Unidirectional project-to-vault sync via rsync (one-shot, watch, dry-run, safe-mode)
|
|
24
|
+
- **Setup Wizard** -- Interactive configuration for vault path, prefix, watch mode, and environment detection (WSL2, macOS, Linux)
|
|
25
|
+
- **Doctor** -- Five-check diagnostic for common integration issues (missing tools, unreachable vault, dotfolder visibility, Dataview prefix, broken symlinks)
|
|
26
|
+
- **Templates** -- MOC, Dashboard, Dataview queries, Mermaid diagrams, and Excalidraw canvas
|
|
27
|
+
- **Canonical Frontmatter** -- Schema for Dataview + Breadcrumbs compatibility across all synced files
|
|
28
|
+
- **Cross-Platform** -- Supports WSL2, macOS, and Linux-native environments
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## Installation
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
# Install via scenario
|
|
36
|
+
autopm install --scenario=obsidian
|
|
37
|
+
|
|
38
|
+
# Or add to existing installation (scenario 7)
|
|
39
|
+
autopm install
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### Prerequisites
|
|
43
|
+
|
|
44
|
+
- `rsync` (required)
|
|
45
|
+
- `inotify-tools` (Linux/WSL, optional for `--watch` mode)
|
|
46
|
+
- `fswatch` (macOS, optional for `--watch` mode)
|
|
47
|
+
- Obsidian desktop app
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## Commands
|
|
52
|
+
|
|
53
|
+
### `obsidian:setup`
|
|
54
|
+
|
|
55
|
+
Interactive vault configuration wizard. Run once after install.
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
/obsidian:setup --vault-path /path/to/vault --prefix my-project
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### `obsidian:sync`
|
|
62
|
+
|
|
63
|
+
Sync project files to the Obsidian vault.
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
/obsidian:sync # One-shot sync
|
|
67
|
+
/obsidian:sync --watch # Continuous sync on file changes
|
|
68
|
+
/obsidian:sync --check # Dry-run (show what would sync)
|
|
69
|
+
/obsidian:sync --safe-mode # Don't delete vault files
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### `obsidian:doctor`
|
|
73
|
+
|
|
74
|
+
Diagnose common integration problems:
|
|
75
|
+
|
|
76
|
+
1. Missing rsync / inotify-tools / fswatch
|
|
77
|
+
2. Unreachable or non-writable vault path
|
|
78
|
+
3. Issues under `.claude/issues/` (invisible to Dataview)
|
|
79
|
+
4. Wrong Dataview FROM prefix
|
|
80
|
+
5. Broken symlink between `.claude/issues` and `issues/`
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## Configuration
|
|
85
|
+
|
|
86
|
+
Settings are stored in `.claude/config.json`:
|
|
87
|
+
|
|
88
|
+
```json
|
|
89
|
+
{
|
|
90
|
+
"obsidian": {
|
|
91
|
+
"vault_path": "/path/to/vault",
|
|
92
|
+
"vault_prefix": "my-project",
|
|
93
|
+
"watch": false,
|
|
94
|
+
"environment": "wsl"
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
---
|
|
100
|
+
|
|
101
|
+
## Sync Mapping
|
|
102
|
+
|
|
103
|
+
| Project Path | Vault Path |
|
|
104
|
+
|--------------|------------|
|
|
105
|
+
| `.claude/agents/` | `{vault}/{prefix}/agents/` |
|
|
106
|
+
| `.claude/commands/` | `{vault}/{prefix}/commands/` |
|
|
107
|
+
| `.claude/rules/` | `{vault}/{prefix}/rules/` |
|
|
108
|
+
| `.claude/epics/` | `{vault}/{prefix}/epics/` |
|
|
109
|
+
| `.claude/prds/` | `{vault}/{prefix}/prds/` |
|
|
110
|
+
| `issues/` | `{vault}/{prefix}/issues/` |
|
|
111
|
+
| `*.md` (root) | `{vault}/{prefix}/` |
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
## Documentation
|
|
116
|
+
|
|
117
|
+
Full user guide: [docs/plugins/obsidian.md](../../docs/plugins/obsidian.md)
|
|
118
|
+
|
|
119
|
+
---
|
|
120
|
+
|
|
121
|
+
## Peer Dependencies
|
|
122
|
+
|
|
123
|
+
- **@claudeautopm/plugin-core** (^2.0.0) -- Core framework plugin (REQUIRED)
|
|
124
|
+
|
|
125
|
+
---
|
|
126
|
+
|
|
127
|
+
## License
|
|
128
|
+
|
|
129
|
+
MIT
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
## Obsidian Vault Integration
|
|
2
|
+
|
|
3
|
+
This project uses Obsidian as a visual layer for project documentation.
|
|
4
|
+
|
|
5
|
+
### Vault Sync
|
|
6
|
+
|
|
7
|
+
- **Sync is unidirectional**: Project → Vault (never edit in Obsidian)
|
|
8
|
+
- Run `/obsidian:sync` for one-shot sync
|
|
9
|
+
- Run `/obsidian:sync --watch` for continuous sync
|
|
10
|
+
- Run `/obsidian:doctor` to diagnose issues
|
|
11
|
+
|
|
12
|
+
### Frontmatter Convention
|
|
13
|
+
|
|
14
|
+
All markdown files should include canonical frontmatter for Dataview:
|
|
15
|
+
|
|
16
|
+
```yaml
|
|
17
|
+
---
|
|
18
|
+
type: issue|prd|epic|agent|rule
|
|
19
|
+
status: open|in-progress|closed
|
|
20
|
+
created: "YYYY-MM-DDTHH:mm:ssZ"
|
|
21
|
+
updated: "YYYY-MM-DDTHH:mm:ssZ"
|
|
22
|
+
tags: [relevant, tags]
|
|
23
|
+
---
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
### Important Rules
|
|
27
|
+
|
|
28
|
+
- **Never edit files in the Obsidian vault directly** — changes will be overwritten on next sync
|
|
29
|
+
- Dotfolders (`.claude/`) are invisible to Dataview — the sync script maps them to visible paths
|
|
30
|
+
- If using shared vaults, set `obsidian.vault_prefix` in `.claude/config.json`
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
---
|
|
2
|
+
allowed-tools: Bash, Read
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Obsidian Doctor
|
|
6
|
+
|
|
7
|
+
Run diagnostics on the Obsidian integration and suggest fixes for common problems.
|
|
8
|
+
|
|
9
|
+
## Usage
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
/obsidian:doctor
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## Instructions
|
|
16
|
+
|
|
17
|
+
### 1. Locate Script
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
SCRIPT_JS="packages/plugin-obsidian/scripts/obsidian/doctor.js"
|
|
21
|
+
|
|
22
|
+
if [ ! -f "$SCRIPT_JS" ]; then
|
|
23
|
+
SCRIPT_JS=".claude/scripts/doctor.js"
|
|
24
|
+
fi
|
|
25
|
+
|
|
26
|
+
if [ ! -f "$SCRIPT_JS" ]; then
|
|
27
|
+
echo "❌ Doctor script not found. Reinstall plugin-obsidian or run: /obsidian:setup"
|
|
28
|
+
exit 1
|
|
29
|
+
fi
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### 2. Run Diagnostics
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
node "$SCRIPT_JS"
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### 3. Output
|
|
39
|
+
|
|
40
|
+
On success (all checks pass or only warnings):
|
|
41
|
+
|
|
42
|
+
```
|
|
43
|
+
Obsidian Doctor
|
|
44
|
+
════════════════════════════════════════════════════════════
|
|
45
|
+
|
|
46
|
+
✅ rsync installed /usr/bin/rsync
|
|
47
|
+
⚠️ inotify-tools missing Install: sudo apt install inotify-tools
|
|
48
|
+
✅ Vault path ok /path/to/vault
|
|
49
|
+
✅ Issues location ok issues/
|
|
50
|
+
✅ Dataview prefix correct my-project
|
|
51
|
+
✅ Symlink ok .claude/issues -> issues
|
|
52
|
+
|
|
53
|
+
════════════════════════════════════════════════════════════
|
|
54
|
+
Result: 5 passed, 1 warning
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
On failure (any check has an error):
|
|
58
|
+
|
|
59
|
+
```
|
|
60
|
+
Result: 3 passed, 1 warning, 2 errors
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Exit code 0 means all checks passed (warnings are OK). Exit code 1 means at least one check failed.
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
---
|
|
2
|
+
allowed-tools: Bash, Read, Write
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Obsidian Setup Wizard
|
|
6
|
+
|
|
7
|
+
Configure an Obsidian vault for use with ClaudeAutoPM. Run this once after `autopm install --scenario=obsidian`.
|
|
8
|
+
|
|
9
|
+
## Usage
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
/obsidian:setup --vault-path /path/to/vault [--prefix my-project] [--watch] [--no-watch]
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Options:
|
|
16
|
+
- `--vault-path PATH` — Absolute path to your Obsidian vault (required)
|
|
17
|
+
- `--prefix NAME` — Subfolder name inside the vault (default: project directory name)
|
|
18
|
+
- `--watch` — Enable continuous sync in config
|
|
19
|
+
- `--no-watch` — Disable continuous sync in config (default)
|
|
20
|
+
|
|
21
|
+
## Instructions
|
|
22
|
+
|
|
23
|
+
### 1. Gather Arguments
|
|
24
|
+
|
|
25
|
+
Ask the user for `--vault-path` if not provided. The vault must already exist as a directory.
|
|
26
|
+
|
|
27
|
+
On WSL, vault paths typically look like: `/mnt/c/Users/<name>/Documents/Obsidian/Vault`
|
|
28
|
+
|
|
29
|
+
### 2. Run Setup Script
|
|
30
|
+
|
|
31
|
+
Execute the backend script with the user's arguments:
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
node packages/plugin-obsidian/scripts/obsidian/setup.js \
|
|
35
|
+
--vault-path "$VAULT_PATH" \
|
|
36
|
+
--prefix "$PREFIX" \
|
|
37
|
+
--project-root "$(pwd)"
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Add `--watch` or `--no-watch` if the user specified either.
|
|
41
|
+
|
|
42
|
+
### 3. What the Script Does
|
|
43
|
+
|
|
44
|
+
The setup script performs these steps in order:
|
|
45
|
+
|
|
46
|
+
1. **Detects environment** — WSL, macOS, or Linux
|
|
47
|
+
2. **Validates vault path** — Checks existence and write permissions
|
|
48
|
+
3. **Merges config** — Adds `obsidian` section to `.claude/config.json` (preserves all existing keys)
|
|
49
|
+
4. **Generates templates** — Writes MOC, Dashboard, Obsidian templates, and diagram stubs into the vault
|
|
50
|
+
5. **Applies canonical frontmatter** — Adds missing fields (`type`, `status`, `created`, `updated`, `tags`) to existing issues and PRDs without overwriting existing values
|
|
51
|
+
6. **Migrates issues** — If `issues/` doesn't exist but `.claude/issues/` does, moves it and creates a symlink
|
|
52
|
+
7. **Copies sync script** — Places `sync-to-obsidian.sh` into `.claude/scripts/`
|
|
53
|
+
8. **Runs first sync** — Executes the sync script once to populate the vault
|
|
54
|
+
|
|
55
|
+
### 4. Output
|
|
56
|
+
|
|
57
|
+
On success, the script prints a summary showing the vault path, prefix, environment, generated files, and recommended next steps (plugin installation links).
|
|
58
|
+
|
|
59
|
+
### 5. Troubleshooting
|
|
60
|
+
|
|
61
|
+
If the script fails:
|
|
62
|
+
|
|
63
|
+
- **Vault path does not exist** — Create the directory first or check the path
|
|
64
|
+
- **Vault path is not writable** — Fix permissions: `chmod u+w /path/to/vault`
|
|
65
|
+
- **Sync script not found** — Re-run `autopm install --scenario=obsidian`
|
|
66
|
+
|
|
67
|
+
## Related Commands
|
|
68
|
+
|
|
69
|
+
- `/obsidian:sync` — Run a one-off or continuous sync after setup
|