claude-autopm 3.23.0 → 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.
Files changed (45) hide show
  1. package/.github/workflows/deploy-docs.yml +2 -2
  2. package/.github/workflows/npm-publish.yml +2 -2
  3. package/.github/workflows/plugin-publish.yml +2 -2
  4. package/README.md +3 -1
  5. package/autopm/.claude/commands/pm:epic-decompose.md +51 -33
  6. package/autopm/.claude/commands/pm:prd-new.md +41 -9
  7. package/autopm/.claude/docs/xml-prompts/README.md +3 -3
  8. package/autopm/.claude/docs/xml-prompts/creating-templates.md +2 -2
  9. package/autopm/.claude/docs/xml-prompts/templates-guide.md +1 -1
  10. package/autopm/.claude/rules/issue-structure.xml +12 -3
  11. package/autopm/.claude/scripts/pm/dashboard-serve.js +38 -3
  12. package/autopm/.claude/templates/issue.xml +33 -0
  13. package/install/install.js +22 -3
  14. package/install/post-install-check.js +29 -0
  15. package/package.json +6 -6
  16. package/packages/plugin-obsidian/LICENSE +21 -0
  17. package/packages/plugin-obsidian/README.md +129 -0
  18. package/packages/plugin-obsidian/claude-md/obsidian-section.md +30 -0
  19. package/packages/plugin-obsidian/commands/obsidian:doctor.md +63 -0
  20. package/packages/plugin-obsidian/commands/obsidian:setup.md +69 -0
  21. package/packages/plugin-obsidian/commands/obsidian:sync.md +105 -0
  22. package/packages/plugin-obsidian/package.json +51 -0
  23. package/packages/plugin-obsidian/plugin.json +73 -0
  24. package/packages/plugin-obsidian/scripts/obsidian/doctor.js +455 -0
  25. package/packages/plugin-obsidian/scripts/obsidian/setup.js +449 -0
  26. package/packages/plugin-obsidian/scripts/obsidian/sync-to-obsidian.js +584 -0
  27. package/packages/plugin-obsidian/scripts/obsidian/sync-to-obsidian.sh +533 -0
  28. package/packages/plugin-obsidian/templates/DASHBOARD.md.tmpl +63 -0
  29. package/packages/plugin-obsidian/templates/FRONTMATTER_SCHEMA.md +40 -0
  30. package/packages/plugin-obsidian/templates/MOC.md.tmpl +61 -0
  31. package/packages/plugin-obsidian/templates/_templates/epic.md +30 -0
  32. package/packages/plugin-obsidian/templates/_templates/issue.md +28 -0
  33. package/packages/plugin-obsidian/templates/_templates/prd.md +29 -0
  34. package/packages/plugin-obsidian/templates/diagrams/01-architecture.md +38 -0
  35. package/packages/plugin-obsidian/templates/diagrams/pizarra.excalidraw.md +29 -0
  36. package/packages/plugin-obsidian/tests/docs.test.js +97 -0
  37. package/packages/plugin-obsidian/tests/doctor.test.js +432 -0
  38. package/packages/plugin-obsidian/tests/installer-wiring.test.js +60 -0
  39. package/packages/plugin-obsidian/tests/setup.test.js +536 -0
  40. package/packages/plugin-obsidian/tests/sync-to-obsidian-node.test.js +458 -0
  41. package/packages/plugin-obsidian/tests/sync-to-obsidian.bats +266 -0
  42. package/packages/plugin-obsidian/tests/templates.test.js +125 -0
  43. package/packages/plugin-obsidian/tests/test-sync-basic.sh +121 -0
  44. package/packages/plugin-pm/plugin.json +9 -0
  45. package/packages/plugin-pm/rules/issue-structure.xml +56 -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@v4
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@v4
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@v4
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@v4
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@v4
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@v4
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
- ### 13 Official Plugins
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
@@ -321,66 +321,84 @@ Creating task 002 (Database schema):
321
321
  ✓ Created
322
322
  ```
323
323
 
324
- ### 4. Task File Format with Frontmatter
324
+ ### 4. MANDATORY: Read Issue Template Before Creating Tasks
325
+
326
+ **CRITICAL**: Before creating ANY task, read the issue template:
327
+ ```
328
+ Read .claude/templates/issue.xml
329
+ Read .claude/rules/issue-structure.xml
330
+ ```
331
+
332
+ Every task file MUST include ALL required sections from `issue.xml`. Missing sections = auto-reject.
333
+
334
+ ### 5. Task File Format with Frontmatter
325
335
  For each task, create a file with this exact structure:
326
336
 
327
337
  ```markdown
328
338
  ---
329
339
  name: [Task Title]
330
340
  status: open
341
+ priority: [critical/high/medium/low]
342
+ effort: [S/M/L/XL]
331
343
  created: [Current ISO date/time]
332
344
  updated: [Current ISO date/time]
333
- assigned_agent: .claude/agents/{category}/{agent-name}.md # Specialized agent for this task
334
- agent_context: # Optional: Agent-specific configuration
345
+ assigned_agent: .claude/agents/{category}/{agent-name}.md
346
+ agent_context:
335
347
  framework: [framework_name]
336
348
  language: [language_name]
337
- approach: [implementation_approach]
338
349
  github: [Will be updated when synced to GitHub]
339
- depends_on: [] # List of task numbers this depends on, e.g., [001, 002]
340
- parallel: true # Can this run in parallel with other tasks?
341
- conflicts_with: [] # Tasks that modify same files, e.g., [003, 004]
350
+ depends_on: []
351
+ parallel: true
352
+ conflicts_with: []
342
353
  ---
343
354
 
344
355
  # Task: [Task Title]
345
356
 
346
- ## Description
347
- Clear, concise description of what needs to be done
348
-
349
- ## ⚠️ TDD Requirements
350
- **This project uses Test-Driven Development. You MUST:**
351
- 1. 🔴 RED: Write failing test first
352
- 2. 🟢 GREEN: Write minimal code to make test pass
353
- 3. 🔵 REFACTOR: Clean up code while keeping tests green
357
+ ## Goal
358
+ [One sentence: WHAT this task delivers and WHY it matters]
354
359
 
355
- See `.claude/rules/tdd.enforcement.md` for complete requirements.
360
+ ## Context
361
+ [WHY this task exists — what triggered it, what currently works/doesn't,
362
+ what must be in place first. Include specific file paths, URLs, services.]
356
363
 
357
364
  ## Acceptance Criteria
358
- - [ ] Specific criterion 1
359
- - [ ] Specific criterion 2
360
- - [ ] Specific criterion 3
365
+ - [ ] Specific, measurable criterion 1
366
+ - [ ] Specific, measurable criterion 2
367
+ - [ ] Specific, measurable criterion 3
361
368
 
362
- ## Technical Details
363
- - Implementation approach
364
- - Key considerations
365
- - Code locations/files affected
369
+ ## Affected Files
370
+ - `path/to/file.ts` — [what changes]
371
+ - `path/to/test.ts` — [new test file]
366
372
 
367
- ## Dependencies
368
- - [ ] Task/Issue dependencies
369
- - [ ] External dependencies
373
+ ## Related Issues
374
+ - depends on #NNN — [why]
375
+ - blocks #NNN [why]
376
+ - (or "None" if standalone)
370
377
 
371
- ## Effort Estimate
372
- - Size: XS/S/M/L/XL
373
- - Hours: estimated hours
374
- - Parallel: true/false (can run in parallel with other tasks)
378
+ ## Verification Steps
379
+ [Concrete commands to verify this task is done:]
380
+ - `npm test -- --filter=feature` → all pass
381
+ - `curl http://localhost:3000/api/endpoint` 200
382
+ - `kubectl get pods -n app` → Running
375
383
 
376
384
  ## Definition of Done
377
385
  - [ ] Tests written FIRST (RED phase)
378
386
  - [ ] Code implemented (GREEN phase)
379
387
  - [ ] Code refactored (REFACTOR phase)
380
388
  - [ ] All tests passing
381
- - [ ] Documentation updated
382
- - [ ] Code reviewed
383
- - [ ] Deployed to staging
389
+ - [ ] Verification steps confirmed
390
+ - [ ] PR approved and merged
391
+
392
+ ## ⚠️ TDD Requirements
393
+ 1. 🔴 RED: Write failing test first
394
+ 2. 🟢 GREEN: Write minimal code to make test pass
395
+ 3. 🔵 REFACTOR: Clean up code while keeping tests green
396
+
397
+ ## Technical Constraints
398
+ [Stack, patterns, prohibitions — optional but recommended]
399
+
400
+ ## Out of Scope
401
+ [What NOT to touch — prevents AI from "improving" neighbors]
384
402
  ```
385
403
 
386
404
  ### 3. Task Naming Convention
@@ -356,18 +356,50 @@ Parse the arguments to detect the mode:
356
356
  - [Internal systems or components]
357
357
  - [Third-party libraries or tools]
358
358
 
359
- ## Implementation Plan
360
- ### Phase 1: Foundation
361
- - [ ] [Initial tasks]
359
+ ## Architecture Design
360
+ ### Component Tree
361
+ [Map out the key new files/modules/components that will be created:]
362
+ ```
363
+ src/
364
+ ├── feature/
365
+ │ ├── Component.tsx
366
+ │ ├── hooks/useFeature.ts
367
+ │ └── utils/helpers.ts
368
+ ```
362
369
 
363
- ### Phase 2: Core Features
364
- - [ ] [Main development]
370
+ ### Data Flow
371
+ [How data moves through the system for this feature:]
372
+ - User action → API endpoint → Service → Database → Response
365
373
 
366
- ### Phase 3: Enhancement
367
- - [ ] [Additional features]
374
+ ### State Management
375
+ [New state needed — stores, context, caching strategy]
368
376
 
369
- ### Phase 4: Release
370
- - [ ] [Final testing and deployment]
377
+ ## Implementation Plan
378
+ ### Phase 1: Analyze (before writing code)
379
+ - [ ] Read existing codebase patterns
380
+ - [ ] Identify integration points
381
+ - [ ] Confirm architecture with stakeholder
382
+
383
+ ### Phase 2: Foundation
384
+ - [ ] Database migrations / models
385
+ - [ ] Core API endpoints (backend)
386
+ - [ ] Base component scaffolding (frontend)
387
+
388
+ ### Phase 3: Core Features
389
+ - [ ] [Main feature implementation]
390
+ - [ ] [Integration with existing systems]
391
+
392
+ ### Phase 4: Polish & Release
393
+ - [ ] [Testing — unit, integration, e2e]
394
+ - [ ] [Documentation]
395
+ - [ ] [Deployment]
396
+
397
+ ### Quick Win Path
398
+ [Minimum viable subset that works end-to-end in 1-3 days:]
399
+ - Day 1: [smallest vertical slice]
400
+ - Day 2: [connect to real data]
401
+ - Day 3: [basic UI showing results]
402
+ [This path gives a working demo before full implementation]
371
403
 
372
404
  ## Risks and Mitigation
373
405
  ### Technical Risks
@@ -435,7 +435,7 @@ Create templates tailored to your project:
435
435
  --stage 2
436
436
 
437
437
  # Edit template
438
- vim autopm/.claude/templates/xml-prompts/dev/microservice.xml
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
- - `autopm/.claude/lib/xml-prompt-builder.js`
526
- - `autopm/.claude/lib/xml-validator.js`
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 autopm/.claude/templates/xml-prompts/dev/my-template.xml
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 autopm/.claude/templates/xml-prompts/dev/my-template.xml
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 autopm/.claude/templates/xml-prompts/dev/microservice.xml
465
+ vim .claude/templates/xml-prompts/dev/microservice.xml
466
466
 
467
467
  # Add your patterns:
468
468
  # - Service structure requirements
@@ -6,13 +6,18 @@
6
6
 
7
7
  <template>
8
8
  <section name="goal" required="true">One sentence: WHAT and WHY</section>
9
- <section name="context" required="true">Architecture location, files, dependencies</section>
9
+ <section name="context" required="true">
10
+ WHY this issue exists — problem background, current state, dependencies, environment.
11
+ Must answer: what triggered this, what works/doesn't, what must exist first.
12
+ </section>
10
13
  <section name="acceptance-criteria" required="true">Measurable checkboxes, not prose</section>
11
- <section name="technical-constraints" required="false">Stack, patterns, prohibitions</section>
12
14
  <section name="affected-files" required="true">Exact file paths with change description</section>
15
+ <section name="related-issues" required="true">depends on / blocks / related to #NNN, or "None"</section>
16
+ <section name="verification" required="true">Concrete commands to verify (curl, kubectl, npm test, etc.)</section>
17
+ <section name="definition-of-done" required="true">Quality gate checkboxes — tests, deploy, PR merged</section>
18
+ <section name="constraints" required="false">Stack, patterns, prohibitions</section>
13
19
  <section name="out-of-scope" required="false">What NOT to touch</section>
14
20
  <section name="suggested-approach" required="false">Brief implementation strategy</section>
15
- <section name="definition-of-done" required="false">Quality gates (tests, lint, coverage)</section>
16
21
  </template>
17
22
 
18
23
  <title-convention>
@@ -40,8 +45,12 @@
40
45
  </key-principles>
41
46
 
42
47
  <violations enforcement="auto-reject">
48
+ <violation>Creating issues without Context section (why it exists, current state)</violation>
43
49
  <violation>Creating issues without Acceptance Criteria</violation>
44
50
  <violation>Creating issues without Affected Files section</violation>
51
+ <violation>Creating issues without Verification Steps</violation>
52
+ <violation>Creating issues without Definition of Done</violation>
45
53
  <violation>Vague goal without concrete deliverable</violation>
54
+ <violation>Missing Related Issues (must list links or "None")</violation>
46
55
  </violations>
47
56
  </rule>
@@ -400,7 +400,7 @@ function renderHTML() {
400
400
  border: 1px solid #30363d; border-radius: 8px; overflow: hidden;
401
401
  }
402
402
  .diagram-split .code-pane {
403
- flex: 1; display: flex; flex-direction: column; border-right: 1px solid #30363d; min-width: 0;
403
+ width: 30%; display: flex; flex-direction: column; min-width: 150px; flex-shrink: 0;
404
404
  }
405
405
  .diagram-split .code-pane .pane-header {
406
406
  background: #161b22; padding: 6px 12px; font-size: 11px; color: #8b949e;
@@ -411,8 +411,13 @@ function renderHTML() {
411
411
  font-family: 'SF Mono', 'Fira Code', 'Cascadia Code', monospace; font-size: 13px;
412
412
  line-height: 1.5; resize: none; outline: none; tab-size: 2;
413
413
  }
414
+ .diagram-split .split-handle {
415
+ width: 5px; cursor: col-resize; background: #30363d; flex-shrink: 0;
416
+ transition: background 0.15s;
417
+ }
418
+ .diagram-split .split-handle:hover, .diagram-split .split-handle.dragging { background: #58a6ff; }
414
419
  .diagram-split .preview-pane {
415
- flex: 1; display: flex; flex-direction: column; background: #161b22; min-width: 0;
420
+ flex: 1; display: flex; flex-direction: column; background: #161b22; min-width: 200px;
416
421
  }
417
422
  .diagram-split .preview-pane .pane-header {
418
423
  background: #161b22; padding: 6px 12px; font-size: 11px; color: #8b949e;
@@ -618,10 +623,11 @@ function renderHTML() {
618
623
  </div>
619
624
  </div>
620
625
  <div class="diagram-split" id="diagram-split">
621
- <div class="code-pane">
626
+ <div class="code-pane" id="code-pane">
622
627
  <div class="pane-header"><span>Mermaid Source</span></div>
623
628
  <textarea id="diagram-code" spellcheck="false"></textarea>
624
629
  </div>
630
+ <div class="split-handle" id="split-handle"></div>
625
631
  <div class="preview-pane">
626
632
  <div class="pane-header">
627
633
  <span>Preview</span>
@@ -863,6 +869,35 @@ function resetPanZoom() {
863
869
  }
864
870
  }
865
871
 
872
+ // Resizable split handle
873
+ (function() {
874
+ const handle = document.getElementById('split-handle');
875
+ const codePane = document.getElementById('code-pane');
876
+ const split = document.getElementById('diagram-split');
877
+ if (!handle || !codePane || !split) return;
878
+ let dragging = false;
879
+ handle.addEventListener('mousedown', function(e) {
880
+ e.preventDefault();
881
+ dragging = true;
882
+ handle.classList.add('dragging');
883
+ document.body.style.cursor = 'col-resize';
884
+ document.body.style.userSelect = 'none';
885
+ });
886
+ document.addEventListener('mousemove', function(e) {
887
+ if (!dragging) return;
888
+ const rect = split.getBoundingClientRect();
889
+ const pct = Math.min(70, Math.max(10, ((e.clientX - rect.left) / rect.width) * 100));
890
+ codePane.style.width = pct + '%';
891
+ });
892
+ document.addEventListener('mouseup', function() {
893
+ if (!dragging) return;
894
+ dragging = false;
895
+ handle.classList.remove('dragging');
896
+ document.body.style.cursor = '';
897
+ document.body.style.userSelect = '';
898
+ });
899
+ })();
900
+
866
901
  // Live preview on code change
867
902
  document.addEventListener('DOMContentLoaded', function() {
868
903
  const codeEl = document.getElementById('diagram-code');
@@ -7,14 +7,42 @@
7
7
  <field name="assignee" type="string" default=""/>
8
8
  <field name="created" type="datetime" auto="true"/>
9
9
  <field name="updated" type="datetime" auto="true"/>
10
+ <field name="priority" type="enum" values="critical,high,medium,low" default="medium"/>
11
+ <field name="effort" type="enum" values="S,M,L,XL" default="M"/>
10
12
  <field name="started" type="datetime"/>
11
13
  <field name="completed" type="datetime"/>
12
14
  </frontmatter>
13
15
 
14
16
  <sections>
15
17
  <section name="goal" heading="Goal" required="true">One sentence: WHAT and WHY</section>
18
+ <section name="context" heading="Context" required="true">
19
+ Why this issue exists. Include:
20
+ - Problem background — what triggered this (bug report, user request, architectural gap)
21
+ - Current state — what works now, what doesn't, relevant infrastructure/config
22
+ - Dependencies — what must exist first (images, services, DNS, other issues)
23
+ - Access/environment — how to reproduce, where to verify (cluster, URL, CI)
24
+ </section>
16
25
  <section name="acceptance-criteria" heading="Acceptance Criteria" required="true">Measurable checkboxes</section>
17
26
  <section name="affected-files" heading="Affected Files" required="true">Exact file paths with change description</section>
27
+ <section name="related-issues" heading="Related Issues" required="true">
28
+ Links to blocking/blocked/related issues:
29
+ - depends on #NNN — must be done first
30
+ - blocks #NNN — this unblocks other work
31
+ - related to #NNN — shares context
32
+ - Write "None" if truly standalone
33
+ </section>
34
+ <section name="verification" heading="Verification Steps" required="true">
35
+ Concrete commands to verify the work is done. Examples:
36
+ - curl https://app.example.com → 200
37
+ - kubectl get pods -n app → Running
38
+ - npm test -- --filter=feature → pass
39
+ </section>
40
+ <section name="definition-of-done" heading="Definition of Done" required="true">
41
+ Checklist of quality gates that MUST pass before closing:
42
+ - [ ] Tests pass (unit, integration)
43
+ - [ ] Deployed to staging/verified
44
+ - [ ] PR approved and merged
45
+ </section>
18
46
  <section name="constraints" heading="Technical Constraints" required="false">Stack, patterns, prohibitions</section>
19
47
  <section name="out-of-scope" heading="Out of Scope" required="false">What NOT to touch</section>
20
48
  <section name="approach" heading="Suggested Approach" required="false">Brief implementation strategy</section>
@@ -22,6 +50,11 @@
22
50
 
23
51
  <validation>
24
52
  <rule>goal must be non-empty</rule>
53
+ <rule>context must be non-empty</rule>
54
+ <rule>acceptance-criteria must be non-empty</rule>
55
+ <rule>related-issues must be non-empty</rule>
56
+ <rule>verification must be non-empty</rule>
57
+ <rule>definition-of-done must be non-empty</rule>
25
58
  <rule>at least 1 acceptance criterion checkbox (- [ ])</rule>
26
59
  </validation>
27
60
  </template>
@@ -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-6) [${defaultChoice}]: ${this.colors.NC}`, (answer) => {
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-6.${this.colors.NC}`);
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.0",
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.67.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": "^12.9.6",
138
+ "inquirer": "^13.3.2",
139
139
  "js-yaml": "^4.1.0",
140
140
  "markdown-it": "^14.1.0",
141
- "marked": "^16.4.0",
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": "^10.1.3",
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.68",
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.