specweave 0.17.7 → 0.17.8

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 (89) hide show
  1. package/CLAUDE.md +365 -9
  2. package/dist/plugins/specweave/lib/hooks/sync-living-docs.d.ts +9 -4
  3. package/dist/plugins/specweave/lib/hooks/sync-living-docs.d.ts.map +1 -1
  4. package/dist/plugins/specweave/lib/hooks/sync-living-docs.js +82 -12
  5. package/dist/plugins/specweave/lib/hooks/sync-living-docs.js.map +1 -1
  6. package/dist/plugins/specweave-github/lib/github-spec-content-sync.d.ts +2 -2
  7. package/dist/plugins/specweave-github/lib/github-spec-content-sync.d.ts.map +1 -1
  8. package/dist/plugins/specweave-github/lib/github-spec-content-sync.js +69 -10
  9. package/dist/plugins/specweave-github/lib/github-spec-content-sync.js.map +1 -1
  10. package/dist/src/cli/commands/detect-project.d.ts +9 -0
  11. package/dist/src/cli/commands/detect-project.d.ts.map +1 -0
  12. package/dist/src/cli/commands/detect-project.js +85 -0
  13. package/dist/src/cli/commands/detect-project.js.map +1 -0
  14. package/dist/src/cli/commands/detect-specs.d.ts +9 -0
  15. package/dist/src/cli/commands/detect-specs.d.ts.map +1 -0
  16. package/dist/src/cli/commands/detect-specs.js +73 -0
  17. package/dist/src/cli/commands/detect-specs.js.map +1 -0
  18. package/dist/src/cli/commands/init.d.ts.map +1 -1
  19. package/dist/src/cli/commands/init.js +8 -15
  20. package/dist/src/cli/commands/init.js.map +1 -1
  21. package/dist/src/core/living-docs/content-classifier.d.ts +83 -0
  22. package/dist/src/core/living-docs/content-classifier.d.ts.map +1 -0
  23. package/dist/src/core/living-docs/content-classifier.js +393 -0
  24. package/dist/src/core/living-docs/content-classifier.js.map +1 -0
  25. package/dist/src/core/living-docs/content-distributor.d.ts +126 -0
  26. package/dist/src/core/living-docs/content-distributor.d.ts.map +1 -0
  27. package/dist/src/core/living-docs/content-distributor.js +339 -0
  28. package/dist/src/core/living-docs/content-distributor.js.map +1 -0
  29. package/dist/src/core/living-docs/content-parser.d.ts +140 -0
  30. package/dist/src/core/living-docs/content-parser.d.ts.map +1 -0
  31. package/dist/src/core/living-docs/content-parser.js +316 -0
  32. package/dist/src/core/living-docs/content-parser.js.map +1 -0
  33. package/dist/src/core/living-docs/cross-linker.d.ts +126 -0
  34. package/dist/src/core/living-docs/cross-linker.d.ts.map +1 -0
  35. package/dist/src/core/living-docs/cross-linker.js +374 -0
  36. package/dist/src/core/living-docs/cross-linker.js.map +1 -0
  37. package/dist/src/core/living-docs/index.d.ts +89 -0
  38. package/dist/src/core/living-docs/index.d.ts.map +1 -0
  39. package/dist/src/core/living-docs/index.js +169 -0
  40. package/dist/src/core/living-docs/index.js.map +1 -0
  41. package/dist/src/core/living-docs/project-detector.d.ts +103 -0
  42. package/dist/src/core/living-docs/project-detector.d.ts.map +1 -0
  43. package/dist/src/core/living-docs/project-detector.js +314 -0
  44. package/dist/src/core/living-docs/project-detector.js.map +1 -0
  45. package/dist/src/core/repo-structure/prompt-consolidator.d.ts +1 -1
  46. package/dist/src/core/repo-structure/prompt-consolidator.d.ts.map +1 -1
  47. package/dist/src/core/repo-structure/prompt-consolidator.js +51 -22
  48. package/dist/src/core/repo-structure/prompt-consolidator.js.map +1 -1
  49. package/dist/src/core/repo-structure/repo-structure-manager.d.ts +2 -0
  50. package/dist/src/core/repo-structure/repo-structure-manager.d.ts.map +1 -1
  51. package/dist/src/core/repo-structure/repo-structure-manager.js +126 -62
  52. package/dist/src/core/repo-structure/repo-structure-manager.js.map +1 -1
  53. package/dist/src/core/spec-content-sync.d.ts +6 -0
  54. package/dist/src/core/spec-content-sync.d.ts.map +1 -1
  55. package/dist/src/core/spec-content-sync.js +25 -7
  56. package/dist/src/core/spec-content-sync.js.map +1 -1
  57. package/dist/src/core/spec-detector.d.ts +54 -0
  58. package/dist/src/core/spec-detector.d.ts.map +1 -0
  59. package/dist/src/core/spec-detector.js +197 -0
  60. package/dist/src/core/spec-detector.js.map +1 -0
  61. package/dist/src/core/spec-identifier-detector.d.ts +49 -0
  62. package/dist/src/core/spec-identifier-detector.d.ts.map +1 -0
  63. package/dist/src/core/spec-identifier-detector.js +198 -0
  64. package/dist/src/core/spec-identifier-detector.js.map +1 -0
  65. package/dist/src/core/types/spec-identifier.d.ts +67 -0
  66. package/dist/src/core/types/spec-identifier.d.ts.map +1 -0
  67. package/dist/src/core/types/spec-identifier.js +23 -0
  68. package/dist/src/core/types/spec-identifier.js.map +1 -0
  69. package/dist/src/utils/docs-preview/config-generator.d.ts.map +1 -1
  70. package/dist/src/utils/docs-preview/config-generator.js +11 -0
  71. package/dist/src/utils/docs-preview/config-generator.js.map +1 -1
  72. package/package.json +1 -1
  73. package/plugins/specweave/.claude-plugin/plugin.json +1 -1
  74. package/plugins/specweave/lib/hooks/sync-living-docs.js +61 -5
  75. package/plugins/specweave/lib/hooks/sync-living-docs.ts +102 -13
  76. package/plugins/specweave-ado/.claude-plugin/plugin.json +1 -1
  77. package/plugins/specweave-docs-preview/commands/preview.md +11 -11
  78. package/plugins/specweave-github/.claude-plugin/plugin.json +1 -1
  79. package/plugins/specweave-github/hooks/post-task-completion.sh +59 -30
  80. package/plugins/specweave-github/lib/github-spec-content-sync.js +55 -6
  81. package/plugins/specweave-github/lib/github-spec-content-sync.ts +84 -12
  82. package/plugins/specweave-jira/.claude-plugin/plugin.json +1 -1
  83. package/plugins/specweave-mobile/.claude-plugin/plugin.json +1 -4
  84. package/plugins/specweave-release/.claude-plugin/plugin.json +3 -15
  85. package/src/templates/AGENTS.md.template +297 -0
  86. package/plugins/specweave/plugin.json +0 -22
  87. package/plugins/specweave-ado/plugin.json +0 -20
  88. package/plugins/specweave-github/plugin.json +0 -19
  89. package/plugins/specweave-jira/plugin.json +0 -20
package/CLAUDE.md CHANGED
@@ -736,6 +736,26 @@ my-project/
736
736
 
737
737
  **Solution**: Create a **parent folder** with ONE root-level `.specweave/`
738
738
 
739
+ SpecWeave supports **THREE approaches** for multi-repo projects:
740
+
741
+ **Option 2: Parent Repo on GitHub** (✅ Recommended for teams)
742
+ - Parent folder is a GitHub repository
743
+ - Team can clone and collaborate on specs/docs
744
+ - Full version control for .specweave/
745
+ - Works with CI/CD pipelines
746
+
747
+ **Option 3: Local Parent Folder** (✅ Recommended for solo developers)
748
+ - Parent folder stays on your machine (NOT pushed to GitHub)
749
+ - .specweave/ is gitignored (local only)
750
+ - Implementation repos still on GitHub
751
+ - Lighter setup, less overhead
752
+
753
+ **Option 4: Each Repo Has .specweave/** (❌ NOT RECOMMENDED)
754
+ - Each repo maintains its own .specweave/ folder
755
+ - Leads to fragmentation and duplication
756
+ - Difficult to manage cross-cutting features
757
+ - Only use if you absolutely must
758
+
739
759
  The pattern is the same whether you have:
740
760
  - Multiple git repos (polyrepo architecture)
741
761
  - Microservices (separate service directories)
@@ -777,20 +797,34 @@ microservices-project/ ← Create parent folder
777
797
  **How to Set Up**:
778
798
 
779
799
  ```bash
780
- # Option 1: Multiple repos (clone as subdirectories)
800
+ # APPROACH 1: Parent Repo on GitHub (Option 2)
801
+ # Step 1: Run specweave init and select "Option 2: Multiple repos WITH parent repo (GitHub)"
781
802
  mkdir microservices-project && cd microservices-project
782
803
  npx specweave init .
804
+ # → Select: "2ī¸âƒŖ Multiple repos WITH parent repo (GitHub)"
805
+ # → Creates .specweave/ and pushes to GitHub
806
+
807
+ # Step 2: Clone implementation repos
783
808
  git clone https://github.com/myorg/user-service.git services/user-service
784
809
  git clone https://github.com/myorg/order-service.git services/order-service
785
810
 
786
- # Option 2: Git submodules (advanced)
787
- mkdir microservices-project && cd microservices-project
788
- git init && npx specweave init .
789
- git submodule add https://github.com/myorg/user-service.git services/user-service
811
+ # APPROACH 2: Local Parent Folder (Option 3) - NEW!
812
+ # Step 1: Run specweave init and select "Option 3: Local parent folder"
813
+ mkdir my-parent-folder && cd my-parent-folder
814
+ npx specweave init .
815
+ # → Select: "3ī¸âƒŖ Multiple repos WITH parent folder (LOCAL only)"
816
+ # → Creates .specweave/ (gitignored, local only)
817
+
818
+ # Step 2: Clone implementation repos
819
+ git clone https://github.com/myorg/frontend.git frontend
820
+ git clone https://github.com/myorg/backend.git backend
821
+
822
+ # .specweave/ stays on your machine, NOT synced to GitHub!
790
823
 
791
- # Option 3: Monorepo (services in same repo)
824
+ # APPROACH 3: Monorepo (services in same repo)
792
825
  mkdir microservices-project && cd microservices-project
793
826
  git init && npx specweave init .
827
+ # → Select: "1ī¸âƒŖ Single repository" OR "5ī¸âƒŖ Monorepo"
794
828
  mkdir -p services/{user,order,payment}
795
829
 
796
830
  # Work normally - SpecWeave sees all services
@@ -800,12 +834,26 @@ mkdir -p services/{user,order,payment}
800
834
  ```
801
835
 
802
836
  **Benefits**:
837
+
838
+ **All approaches**:
803
839
  - ✅ One `.specweave/` for entire system (no duplication)
804
840
  - ✅ Each repo maintains its own git history (if using polyrepo)
805
841
  - ✅ Cross-service increments are natural (e.g., checkout flow)
806
842
  - ✅ System-wide architecture docs in one place
807
843
  - ✅ Living docs cover all services
808
844
 
845
+ **Option 2 (GitHub Parent) specific**:
846
+ - ✅ Team can collaborate on specs/docs
847
+ - ✅ Full version control history for .specweave/
848
+ - ✅ Works with CI/CD pipelines
849
+ - ✅ Can enforce code reviews for specs
850
+
851
+ **Option 3 (Local Parent) specific**:
852
+ - ✅ Lighter setup (no GitHub repo for parent)
853
+ - ✅ No extra repository to manage
854
+ - ✅ Perfect for solo developers
855
+ - ✅ .specweave/ stays private on your machine
856
+
809
857
  ### Enforcement
810
858
 
811
859
  **Validation in `init.ts`**:
@@ -1922,7 +1970,7 @@ npm run build && npm test
1922
1970
  ```
1923
1971
  plugins/specweave/
1924
1972
  ├── .claude-plugin/
1925
- │ └── plugin.json ← "hooks": "hooks/hooks.json"
1973
+ │ └── plugin.json ← "hooks": "./hooks/hooks.json"
1926
1974
  ├── hooks/
1927
1975
  │ ├── hooks.json ← Hook configuration (references .sh files)
1928
1976
  │ ├── post-task-completion.sh ← Stays here (NOT copied!)
@@ -1946,7 +1994,7 @@ plugins/specweave/
1946
1994
  2. Claude Code startup:
1947
1995
  Reads: plugins/specweave/.claude-plugin/plugin.json
1948
1996
  ↓
1949
- Discovers: "hooks": "hooks/hooks.json"
1997
+ Discovers: "hooks": "./hooks/hooks.json"
1950
1998
  ↓
1951
1999
  Loads: plugins/specweave/hooks/hooks.json
1952
2000
  ↓
@@ -2144,6 +2192,180 @@ ls -1 .specweave/increments/ | grep -E '^[0-9]{4}' | wc -l
2144
2192
  - ✅ **Compliance & auditing**: Complete audit trail of all product decisions
2145
2193
  - ✅ **Living documentation**: Specs stay up-to-date without manual intervention
2146
2194
 
2195
+ **🧠 INTELLIGENT LIVING DOCS SYNC (v0.18.0+)**
2196
+
2197
+ **Two Sync Modes**:
2198
+
2199
+ 1. **Simple Mode** (Legacy):
2200
+ - Copies entire `spec.md` to living docs as single file
2201
+ - Location: `.specweave/docs/internal/specs/spec-{id}.md`
2202
+ - Use when: Single project, simple workflow
2203
+
2204
+ 2. **Intelligent Mode** (NEW in v0.18.0+):
2205
+ - Parses spec.md into sections
2206
+ - Classifies content (user stories, architecture, ADRs, operations, etc.)
2207
+ - Detects project (backend/frontend/mobile)
2208
+ - Distributes to appropriate folders
2209
+ - Generates cross-links
2210
+ - Adds Docusaurus frontmatter
2211
+
2212
+ **Enable Intelligent Mode** (`.specweave/config.json`):
2213
+ ```json
2214
+ {
2215
+ "hooks": {
2216
+ "post_task_completion": {
2217
+ "sync_living_docs": true
2218
+ }
2219
+ },
2220
+ "livingDocs": {
2221
+ "intelligent": {
2222
+ "enabled": true,
2223
+ "splitByCategory": true,
2224
+ "generateCrossLinks": true,
2225
+ "preserveOriginal": true,
2226
+ "classificationConfidenceThreshold": 0.6,
2227
+ "fallbackProject": "default"
2228
+ }
2229
+ }
2230
+ }
2231
+ ```
2232
+
2233
+ **Result** (Intelligent Mode):
2234
+ ```
2235
+ ✅ BEFORE (Simple Mode):
2236
+ .specweave/docs/internal/specs/spec-0016-authentication.md (5,000 lines, mixed content)
2237
+
2238
+ ✅ AFTER (Intelligent Mode):
2239
+ .specweave/docs/internal/
2240
+ ├── specs/backend/
2241
+ │ ├── us-001-backend-api-auth.md (User Story + Docusaurus frontmatter)
2242
+ │ ├── us-002-session-management.md (User Story + Cross-links)
2243
+ │ ├── _archive/spec-0016-authentication.md (Original preserved)
2244
+ │ └── README.md (Auto-generated project index)
2245
+ ├── architecture/
2246
+ │ ├── authentication-flow.md (HLD)
2247
+ │ └── adr/0001-oauth-vs-jwt.md (ADR)
2248
+ ├── operations/
2249
+ │ ├── runbook-auth-service.md (Runbook)
2250
+ │ └── slo-auth-availability.md (SLO)
2251
+ ├── delivery/
2252
+ │ └── test-strategy-authentication.md (Test Strategy)
2253
+ └── strategy/
2254
+ └── auth-business-requirements.md (Business Requirements)
2255
+ ```
2256
+
2257
+ **Classification System** (9 Categories):
2258
+
2259
+ | Category | Detects | Goes To |
2260
+ |----------|---------|---------|
2261
+ | **User Story** | US-XXX pattern, "As a" format, AC | `specs/{project}/` |
2262
+ | **NFR** | NFR-XXX pattern, metrics, SLAs | `specs/{project}/nfr/` |
2263
+ | **Architecture** | HLD, LLD, diagrams | `architecture/` |
2264
+ | **ADR** | ADR-XXX pattern, decision structure | `architecture/adr/` |
2265
+ | **Operations** | Runbooks, SLOs | `operations/` |
2266
+ | **Delivery** | Test strategy, release plans | `delivery/` |
2267
+ | **Strategy** | Business requirements, PRDs | `strategy/` |
2268
+ | **Governance** | Security, compliance | `governance/` |
2269
+ | **Overview** | Summaries | `specs/{project}/` |
2270
+
2271
+ **Project Detection** (Multi-Project Support):
2272
+
2273
+ Intelligent sync detects which project (backend/frontend/mobile) via:
2274
+ - Increment name contains project ID (e.g., `0016-backend-auth`) → +10 points
2275
+ - Frontmatter `project:` field → +20 points (highest)
2276
+ - Team name match → +5 points
2277
+ - Keyword match → +3 points each
2278
+ - Tech stack match → +2 points each
2279
+
2280
+ **Example**:
2281
+ ```yaml
2282
+ ---
2283
+ title: User Authentication
2284
+ project: backend # ← Explicit project (100% confidence)
2285
+ ---
2286
+
2287
+ # User Authentication
2288
+
2289
+ Quick overview: Implement OAuth for **backend services** using Node.js...
2290
+ # Keywords: backend, service, Node.js → detected!
2291
+ ```
2292
+
2293
+ **Multi-Project Setup** (`.specweave/config.json`):
2294
+ ```json
2295
+ {
2296
+ "multiProject": {
2297
+ "projects": {
2298
+ "backend": {
2299
+ "name": "Backend Services",
2300
+ "keywords": ["api", "backend", "service"],
2301
+ "techStack": ["Node.js", "PostgreSQL"]
2302
+ },
2303
+ "frontend": {
2304
+ "name": "Frontend App",
2305
+ "keywords": ["ui", "frontend", "react"],
2306
+ "techStack": ["React", "Next.js"]
2307
+ }
2308
+ }
2309
+ }
2310
+ }
2311
+ ```
2312
+
2313
+ **Result**: Content distributed to `specs/backend/` and `specs/frontend/` automatically!
2314
+
2315
+ **Docusaurus Frontmatter** (Auto-Generated):
2316
+
2317
+ Every distributed file gets rich frontmatter for LLM context:
2318
+
2319
+ ```yaml
2320
+ ---
2321
+ id: us-001-user-login
2322
+ title: "US-001: User Login"
2323
+ sidebar_label: "User Login"
2324
+ description: "User can log in with email and password"
2325
+ tags: ["user-story", "backend", "authentication"]
2326
+ increment: "0016-authentication"
2327
+ project: "backend" # ← LLM knows which project
2328
+ category: "user-story" # ← LLM knows document type
2329
+ last_updated: "2025-11-10"
2330
+ status: "planning"
2331
+ priority: "P1"
2332
+ ---
2333
+ ```
2334
+
2335
+ **Cross-Linking** (Bidirectional):
2336
+
2337
+ Intelligent sync generates "Related Documents" sections:
2338
+
2339
+ ```markdown
2340
+ ## Related Documents
2341
+
2342
+ ### Implements
2343
+ - [Authentication Architecture](../../architecture/auth-flow.md)
2344
+
2345
+ ### References
2346
+ - [ADR-001: OAuth vs JWT](../../architecture/adr/0001-oauth-vs-jwt.md)
2347
+
2348
+ ### Defined In
2349
+ - [Business Requirements](../../strategy/auth-requirements.md)
2350
+ ```
2351
+
2352
+ **Benefits of Intelligent Mode**:
2353
+ - ✅ **Better organization**: Content organized by type and project
2354
+ - ✅ **Easier navigation**: Find docs quickly (specs vs architecture vs operations)
2355
+ - ✅ **LLM-friendly**: Rich context (project, category, tags) for AI assistants
2356
+ - ✅ **Cross-linked**: Related documents automatically connected
2357
+ - ✅ **Docusaurus-ready**: Frontmatter works out-of-the-box
2358
+ - ✅ **Multi-project**: Separate docs for backend/frontend/mobile
2359
+ - ✅ **Traceability**: Footer shows source increment and last updated
2360
+
2361
+ **Performance**:
2362
+ - Fast: ~10-50ms to parse, classify, and distribute
2363
+ - Async: Runs in background (non-blocking)
2364
+ - Fallback: Falls back to simple mode on error
2365
+
2366
+ **User Guide**: `.specweave/docs/public/guides/intelligent-living-docs-sync.md`
2367
+ **Architecture**: `.specweave/docs/internal/architecture/adr/0030-intelligent-living-docs-sync.md`
2368
+
2147
2369
  ---
2148
2370
 
2149
2371
  **🔧 HOOKS ARCHITECTURE CHANGES (v0.13.0)**
@@ -2623,6 +2845,135 @@ plugins/specweave-{name}/
2623
2845
 
2624
2846
  **Result**: Core plugin stayed at ~12K tokens (75% smaller than v0.3.7!)
2625
2847
 
2848
+ ### Plugin Manifest Validation Rules
2849
+
2850
+ **CRITICAL**: Claude Code enforces strict validation on plugin.json manifests. Follow these rules to avoid loading errors:
2851
+
2852
+ #### Required Format
2853
+
2854
+ ```json
2855
+ {
2856
+ "name": "specweave-plugin-name",
2857
+ "description": "What it does and when to use it",
2858
+ "version": "1.0.0",
2859
+ "author": {
2860
+ "name": "Author Name",
2861
+ "url": "https://example.com"
2862
+ },
2863
+ "repository": "https://github.com/owner/repo",
2864
+ "homepage": "https://example.com",
2865
+ "license": "MIT",
2866
+ "keywords": ["keyword1", "keyword2"],
2867
+ "hooks": "./hooks/hooks.json"
2868
+ }
2869
+ ```
2870
+
2871
+ #### Validation Rules
2872
+
2873
+ | Field | Type | Rules | Example |
2874
+ |-------|------|-------|---------|
2875
+ | **name** | string | Required, lowercase, hyphens only | `"specweave-github"` |
2876
+ | **description** | string | Required, max 1024 chars | `"GitHub integration..."` |
2877
+ | **version** | string | Required, semver format | `"1.0.0"` |
2878
+ | **author** | object | Required, with name field | `{"name": "Team"}` |
2879
+ | **repository** | string | Must be string, NOT object | `"https://github.com/..."` ✅ |
2880
+ | **hooks** | string | Must start with "./" | `"./hooks/hooks.json"` ✅ |
2881
+ | **keywords** | array | Optional, array of strings | `["github", "sync"]` |
2882
+ | **homepage** | string | Optional, URL | `"https://spec-weave.com"` |
2883
+ | **license** | string | Optional, SPDX identifier | `"MIT"` |
2884
+
2885
+ #### Common Validation Errors
2886
+
2887
+ **❌ hooks: Invalid input: must start with "./"**
2888
+ ```json
2889
+ // WRONG
2890
+ "hooks": "hooks/hooks.json"
2891
+
2892
+ // CORRECT
2893
+ "hooks": "./hooks/hooks.json"
2894
+ ```
2895
+
2896
+ **❌ repository: Expected string, received object**
2897
+ ```json
2898
+ // WRONG
2899
+ "repository": {
2900
+ "type": "git",
2901
+ "url": "https://github.com/..."
2902
+ }
2903
+
2904
+ // CORRECT
2905
+ "repository": "https://github.com/..."
2906
+ ```
2907
+
2908
+ **❌ Unrecognized key(s): 'engines', 'dependencies'**
2909
+ ```json
2910
+ // WRONG - These are NPM fields, not Claude plugin fields
2911
+ "engines": {"node": ">=18.0.0"},
2912
+ "dependencies": {"specweave": ">=0.14.0"}
2913
+
2914
+ // CORRECT - Omit these fields entirely
2915
+ // Claude plugins don't support dependency declaration
2916
+ ```
2917
+
2918
+ **❌ skills/agents/commands: Invalid input**
2919
+ ```json
2920
+ // WRONG - Directory references not supported in plugin.json
2921
+ "skills": "skills",
2922
+ "agents": "agents",
2923
+ "commands": "commands"
2924
+
2925
+ // CORRECT - Omit these fields entirely
2926
+ // Claude Code auto-discovers skills/, agents/, commands/ by convention
2927
+ ```
2928
+
2929
+ #### Auto-Discovery vs Explicit Declaration
2930
+
2931
+ **Claude Code auto-discovers components by directory convention**:
2932
+ - `skills/` directory → auto-discovered (no plugin.json field needed)
2933
+ - `agents/` directory → auto-discovered (no plugin.json field needed)
2934
+ - `commands/` directory → auto-discovered (no plugin.json field needed)
2935
+ - `hooks/hooks.json` → MUST be declared in plugin.json with "./hooks/hooks.json"
2936
+
2937
+ **Example: Working plugin.json**
2938
+ ```json
2939
+ {
2940
+ "name": "specweave-github",
2941
+ "description": "GitHub integration",
2942
+ "version": "1.0.0",
2943
+ "author": {"name": "SpecWeave Team"},
2944
+ "repository": "https://github.com/anton-abyzov/specweave",
2945
+ "license": "MIT",
2946
+ "keywords": ["github", "sync"],
2947
+ "hooks": "./hooks/hooks.json"
2948
+ }
2949
+ ```
2950
+
2951
+ **Directory structure** (auto-discovered):
2952
+ ```
2953
+ plugins/specweave-github/
2954
+ ├── .claude-plugin/
2955
+ │ └── plugin.json ← Declares hooks only
2956
+ ├── skills/ ← Auto-discovered
2957
+ │ └── github-sync/
2958
+ ├── agents/ ← Auto-discovered
2959
+ │ └── github-manager/
2960
+ ├── commands/ ← Auto-discovered
2961
+ │ └── github-sync.md
2962
+ └── hooks/
2963
+ ├── hooks.json ← Referenced in plugin.json
2964
+ └── post-task-completion.sh
2965
+ ```
2966
+
2967
+ #### Quick Validation Checklist
2968
+
2969
+ Before committing a new plugin:
2970
+ - [ ] All paths start with "./" (hooks, any explicit file references)
2971
+ - [ ] repository is a string, not an object
2972
+ - [ ] No NPM-specific fields (engines, dependencies)
2973
+ - [ ] No directory references in plugin.json (skills, agents, commands)
2974
+ - [ ] Valid JSON syntax (use `jq . < plugin.json` to validate)
2975
+ - [ ] Test with: `/plugin marketplace add ./.claude-plugin && /plugin install plugin-name`
2976
+
2626
2977
  ### Adding a New Plugin (Contributors)
2627
2978
 
2628
2979
  **Create New Plugin**:
@@ -2636,7 +2987,12 @@ cat > plugins/specweave-myplugin/.claude-plugin/plugin.json << 'EOF'
2636
2987
  "name": "specweave-myplugin",
2637
2988
  "description": "What it does and when to use it",
2638
2989
  "version": "1.0.0",
2639
- "author": {"name": "Your Name"}
2990
+ "author": {"name": "Your Name"},
2991
+ "repository": "https://github.com/anton-abyzov/specweave",
2992
+ "homepage": "https://spec-weave.com",
2993
+ "license": "MIT",
2994
+ "keywords": ["specweave", "plugin"],
2995
+ "hooks": "./hooks/hooks.json"
2640
2996
  }
2641
2997
  EOF
2642
2998
 
@@ -4,6 +4,10 @@
4
4
  *
5
5
  * Automatically syncs living documentation after task completion.
6
6
  *
7
+ * Supports two modes:
8
+ * 1. Simple mode: Copy spec.md to living docs (legacy)
9
+ * 2. Intelligent mode: Parse, classify, and distribute content (v0.18.0+)
10
+ *
7
11
  * Usage:
8
12
  * node dist/hooks/lib/sync-living-docs.js <incrementId>
9
13
  *
@@ -12,12 +16,13 @@
12
16
  *
13
17
  * What it does:
14
18
  * 1. Checks if sync_living_docs enabled in config
15
- * 2. Detects changed docs via git diff
16
- * 3. Invokes /sync-docs update command (future implementation)
17
- * 4. Logs sync actions
19
+ * 2. Detects sync mode (simple or intelligent)
20
+ * 3. Runs appropriate sync strategy
21
+ * 4. Syncs to external tools (GitHub/Jira/ADO)
22
+ * 5. Logs sync actions
18
23
  *
19
24
  * @author SpecWeave Team
20
- * @version 1.0.0
25
+ * @version 2.0.0
21
26
  */
22
27
  /**
23
28
  * Main function - sync living docs for given increment
@@ -1 +1 @@
1
- {"version":3,"file":"sync-living-docs.d.ts","sourceRoot":"","sources":["../../../../../plugins/specweave/lib/hooks/sync-living-docs.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;;;;;;;GAmBG;AAcH;;GAEG;AACH,iBAAe,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA8ChE;AAmJD,OAAO,EAAE,cAAc,EAAE,CAAC"}
1
+ {"version":3,"file":"sync-living-docs.d.ts","sourceRoot":"","sources":["../../../../../plugins/specweave/lib/hooks/sync-living-docs.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAwBH;;GAEG;AACH,iBAAe,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA0DhE;AAiND,OAAO,EAAE,cAAc,EAAE,CAAC"}
@@ -4,6 +4,10 @@
4
4
  *
5
5
  * Automatically syncs living documentation after task completion.
6
6
  *
7
+ * Supports two modes:
8
+ * 1. Simple mode: Copy spec.md to living docs (legacy)
9
+ * 2. Intelligent mode: Parse, classify, and distribute content (v0.18.0+)
10
+ *
7
11
  * Usage:
8
12
  * node dist/hooks/lib/sync-living-docs.js <incrementId>
9
13
  *
@@ -12,12 +16,13 @@
12
16
  *
13
17
  * What it does:
14
18
  * 1. Checks if sync_living_docs enabled in config
15
- * 2. Detects changed docs via git diff
16
- * 3. Invokes /sync-docs update command (future implementation)
17
- * 4. Logs sync actions
19
+ * 2. Detects sync mode (simple or intelligent)
20
+ * 3. Runs appropriate sync strategy
21
+ * 4. Syncs to external tools (GitHub/Jira/ADO)
22
+ * 5. Logs sync actions
18
23
  *
19
24
  * @author SpecWeave Team
20
- * @version 1.0.0
25
+ * @version 2.0.0
21
26
  */
22
27
  import fs from 'fs-extra';
23
28
  import path from 'path';
@@ -42,16 +47,28 @@ async function syncLivingDocs(incrementId) {
42
47
  return;
43
48
  }
44
49
  console.log('✅ Living docs sync enabled');
45
- // 3. Copy increment spec to living docs
46
- const specCopied = await copyIncrementSpecToLivingDocs(incrementId);
47
- // 4. Detect changed docs via git diff
48
- const changedDocs = detectChangedDocs();
50
+ // 3. Determine sync mode (simple or intelligent)
51
+ const intelligentEnabled = config.livingDocs?.intelligent?.enabled ?? false;
52
+ let specCopied = false;
53
+ let changedDocs = [];
54
+ if (intelligentEnabled) {
55
+ // Intelligent mode: Parse, classify, and distribute
56
+ console.log('🧠 Using intelligent sync mode (v0.18.0+)');
57
+ const result = await intelligentSyncLivingDocs(incrementId, config);
58
+ specCopied = result.success;
59
+ changedDocs = result.changedFiles;
60
+ }
61
+ else {
62
+ // Simple mode: Copy spec to living docs (legacy)
63
+ console.log('📋 Using simple sync mode (legacy)');
64
+ specCopied = await copyIncrementSpecToLivingDocs(incrementId);
65
+ changedDocs = detectChangedDocs();
66
+ }
49
67
  if (changedDocs.length === 0 && !specCopied) {
50
- console.log('â„šī¸ No living docs changed (no git diff in .specweave/docs/)');
68
+ console.log('â„šī¸ No living docs changed');
51
69
  return;
52
70
  }
53
- console.log(`📄 Detected ${changedDocs.length} changed doc(s):`);
54
- changedDocs.forEach((doc) => console.log(` - ${doc}`));
71
+ console.log(`📄 Changed/created ${changedDocs.length} file(s)`);
55
72
  // 4. Sync to GitHub if configured
56
73
  await syncToGitHub(incrementId, changedDocs);
57
74
  console.log('✅ Living docs sync complete\n');
@@ -62,7 +79,60 @@ async function syncLivingDocs(incrementId) {
62
79
  }
63
80
  }
64
81
  /**
65
- * Copy increment spec to living docs
82
+ * Intelligent sync using the new architecture (v0.18.0+)
83
+ */
84
+ async function intelligentSyncLivingDocs(incrementId, config) {
85
+ try {
86
+ // Dynamic import to avoid circular dependencies
87
+ const { syncIncrement } = await import('../../../../src/core/living-docs/index.js');
88
+ console.log(' 📖 Parsing and classifying spec sections...');
89
+ const result = await syncIncrement(incrementId, {
90
+ verbose: false, // We'll log our own summary
91
+ dryRun: false,
92
+ parser: {
93
+ preserveCodeBlocks: true,
94
+ preserveLinks: true,
95
+ preserveImages: true,
96
+ },
97
+ distributor: {
98
+ generateFrontmatter: true,
99
+ preserveOriginal: config.livingDocs?.intelligent?.preserveOriginal ?? true,
100
+ },
101
+ linker: {
102
+ generateBacklinks: config.livingDocs?.intelligent?.generateCrossLinks ?? true,
103
+ updateExisting: true,
104
+ },
105
+ });
106
+ // Log summary
107
+ console.log(` ✅ Intelligent sync complete:`);
108
+ console.log(` Project: ${result.project.name} (${(result.project.confidence * 100).toFixed(0)}% confidence)`);
109
+ console.log(` Files created: ${result.distribution.summary.filesCreated}`);
110
+ console.log(` Files updated: ${result.distribution.summary.filesUpdated}`);
111
+ console.log(` Cross-links: ${result.links.length}`);
112
+ console.log(` Duration: ${result.duration}ms`);
113
+ // Collect changed file paths
114
+ const changedFiles = [
115
+ ...result.distribution.created.map((f) => f.path),
116
+ ...result.distribution.updated.map((f) => f.path),
117
+ ];
118
+ return {
119
+ success: result.success,
120
+ changedFiles,
121
+ };
122
+ }
123
+ catch (error) {
124
+ console.error(` ❌ Intelligent sync failed: ${error}`);
125
+ console.error(' Falling back to simple sync mode...');
126
+ // Fallback to simple mode
127
+ const copied = await copyIncrementSpecToLivingDocs(incrementId);
128
+ return {
129
+ success: copied,
130
+ changedFiles: copied ? [path.join(process.cwd(), '.specweave', 'docs', 'internal', 'specs', `spec-${incrementId}.md`)] : [],
131
+ };
132
+ }
133
+ }
134
+ /**
135
+ * Copy increment spec to living docs (legacy/simple mode)
66
136
  * Returns true if spec was copied, false if skipped
67
137
  */
68
138
  async function copyIncrementSpecToLivingDocs(incrementId) {
@@ -1 +1 @@
1
- {"version":3,"file":"sync-living-docs.js","sourceRoot":"","sources":["../../../../../plugins/specweave/lib/hooks/sync-living-docs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sync-living-docs.js","sourceRoot":"","sources":["../../../../../plugins/specweave/lib/hooks/sync-living-docs.ts"],"names":[],"mappings":"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"}
@@ -11,8 +11,8 @@
11
11
  import { ContentSyncResult } from '../../../src/core/spec-content-sync.js';
12
12
  export interface GitHubContentSyncOptions {
13
13
  specPath: string;
14
- owner: string;
15
- repo: string;
14
+ owner?: string;
15
+ repo?: string;
16
16
  dryRun?: boolean;
17
17
  verbose?: boolean;
18
18
  }
@@ -1 +1 @@
1
- {"version":3,"file":"github-spec-content-sync.d.ts","sourceRoot":"","sources":["../../../../plugins/specweave-github/lib/github-spec-content-sync.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAQL,iBAAiB,EAClB,MAAM,wCAAwC,CAAC;AAIhD,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;GAGG;AACH,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,wBAAwB,GAChC,OAAO,CAAC,iBAAiB,CAAC,CAuC5B;AAoKD;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAShF"}
1
+ {"version":3,"file":"github-spec-content-sync.d.ts","sourceRoot":"","sources":["../../../../plugins/specweave-github/lib/github-spec-content-sync.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAQL,iBAAiB,EAClB,MAAM,wCAAwC,CAAC;AAIhD,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AA4CD;;;GAGG;AACH,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,wBAAwB,GAChC,OAAO,CAAC,iBAAiB,CAAC,CA4D5B;AA6KD;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAShF"}