specweave 1.0.31 → 1.0.33

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 (123) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/CLAUDE.md +205 -148
  3. package/README.md +0 -2
  4. package/bin/specweave.js +11 -0
  5. package/dist/src/cli/commands/init.js +1 -1
  6. package/dist/src/cli/commands/init.js.map +1 -1
  7. package/dist/src/cli/commands/update-instructions.d.ts +16 -0
  8. package/dist/src/cli/commands/update-instructions.d.ts.map +1 -0
  9. package/dist/src/cli/commands/update-instructions.js +134 -0
  10. package/dist/src/cli/commands/update-instructions.js.map +1 -0
  11. package/dist/src/cli/helpers/init/directory-structure.d.ts +28 -1
  12. package/dist/src/cli/helpers/init/directory-structure.d.ts.map +1 -1
  13. package/dist/src/cli/helpers/init/directory-structure.js +163 -33
  14. package/dist/src/cli/helpers/init/directory-structure.js.map +1 -1
  15. package/dist/src/cli/helpers/init/index.d.ts +2 -1
  16. package/dist/src/cli/helpers/init/index.d.ts.map +1 -1
  17. package/dist/src/cli/helpers/init/index.js +3 -1
  18. package/dist/src/cli/helpers/init/index.js.map +1 -1
  19. package/dist/src/cli/helpers/init/instruction-file-merger.d.ts +23 -0
  20. package/dist/src/cli/helpers/init/instruction-file-merger.d.ts.map +1 -0
  21. package/dist/src/cli/helpers/init/instruction-file-merger.js +243 -0
  22. package/dist/src/cli/helpers/init/instruction-file-merger.js.map +1 -0
  23. package/dist/src/cli/helpers/init/plugin-installer.js +49 -0
  24. package/dist/src/cli/helpers/init/plugin-installer.js.map +1 -1
  25. package/dist/src/config/types.d.ts +2 -2
  26. package/dist/src/core/living-docs/external-sync-orchestrator.d.ts +26 -0
  27. package/dist/src/core/living-docs/external-sync-orchestrator.d.ts.map +1 -1
  28. package/dist/src/core/living-docs/external-sync-orchestrator.js +61 -0
  29. package/dist/src/core/living-docs/external-sync-orchestrator.js.map +1 -1
  30. package/dist/src/core/living-docs/scaffolding/index.d.ts +12 -0
  31. package/dist/src/core/living-docs/scaffolding/index.d.ts.map +1 -0
  32. package/dist/src/core/living-docs/scaffolding/index.js +15 -0
  33. package/dist/src/core/living-docs/scaffolding/index.js.map +1 -0
  34. package/dist/src/core/living-docs/scaffolding/merger.d.ts +183 -0
  35. package/dist/src/core/living-docs/scaffolding/merger.d.ts.map +1 -0
  36. package/dist/src/core/living-docs/scaffolding/merger.js +523 -0
  37. package/dist/src/core/living-docs/scaffolding/merger.js.map +1 -0
  38. package/dist/src/core/living-docs/scaffolding/scaffold.d.ts +102 -0
  39. package/dist/src/core/living-docs/scaffolding/scaffold.d.ts.map +1 -0
  40. package/dist/src/core/living-docs/scaffolding/scaffold.js +346 -0
  41. package/dist/src/core/living-docs/scaffolding/scaffold.js.map +1 -0
  42. package/dist/src/core/living-docs/scaffolding/template-engine.d.ts +108 -0
  43. package/dist/src/core/living-docs/scaffolding/template-engine.d.ts.map +1 -0
  44. package/dist/src/core/living-docs/scaffolding/template-engine.js +204 -0
  45. package/dist/src/core/living-docs/scaffolding/template-engine.js.map +1 -0
  46. package/dist/src/core/living-docs/sync-helpers/generators.d.ts +38 -2
  47. package/dist/src/core/living-docs/sync-helpers/generators.d.ts.map +1 -1
  48. package/dist/src/core/living-docs/sync-helpers/generators.js +65 -10
  49. package/dist/src/core/living-docs/sync-helpers/generators.js.map +1 -1
  50. package/dist/src/core/living-docs/sync-helpers/index.d.ts +1 -1
  51. package/dist/src/core/living-docs/sync-helpers/index.d.ts.map +1 -1
  52. package/dist/src/core/living-docs/sync-helpers/index.js.map +1 -1
  53. package/dist/src/core/tools/index.d.ts +11 -0
  54. package/dist/src/core/tools/index.d.ts.map +1 -0
  55. package/dist/src/core/tools/index.js +10 -0
  56. package/dist/src/core/tools/index.js.map +1 -0
  57. package/dist/src/core/tools/tool-event-bus.d.ts +33 -0
  58. package/dist/src/core/tools/tool-event-bus.d.ts.map +1 -0
  59. package/dist/src/core/tools/tool-event-bus.js +84 -0
  60. package/dist/src/core/tools/tool-event-bus.js.map +1 -0
  61. package/dist/src/core/tools/tool-index-builder.d.ts +27 -0
  62. package/dist/src/core/tools/tool-index-builder.d.ts.map +1 -0
  63. package/dist/src/core/tools/tool-index-builder.js +289 -0
  64. package/dist/src/core/tools/tool-index-builder.js.map +1 -0
  65. package/dist/src/core/tools/tool-registry.d.ts +51 -0
  66. package/dist/src/core/tools/tool-registry.d.ts.map +1 -0
  67. package/dist/src/core/tools/tool-registry.js +224 -0
  68. package/dist/src/core/tools/tool-registry.js.map +1 -0
  69. package/dist/src/core/tools/tool-search-engine.d.ts +22 -0
  70. package/dist/src/core/tools/tool-search-engine.d.ts.map +1 -0
  71. package/dist/src/core/tools/tool-search-engine.js +174 -0
  72. package/dist/src/core/tools/tool-search-engine.js.map +1 -0
  73. package/dist/src/core/tools/types/tool-registry-types.d.ts +112 -0
  74. package/dist/src/core/tools/types/tool-registry-types.d.ts.map +1 -0
  75. package/dist/src/core/tools/types/tool-registry-types.js +7 -0
  76. package/dist/src/core/tools/types/tool-registry-types.js.map +1 -0
  77. package/dist/src/init/compliance/types.d.ts +1 -1
  78. package/package.json +1 -1
  79. package/plugins/specweave/hooks/hooks.json +3 -13
  80. package/plugins/specweave/hooks/lib/common-setup.sh +47 -321
  81. package/plugins/specweave/hooks/lib/migrate-increment-work.sh +5 -5
  82. package/plugins/specweave/hooks/lib/sync-spec-content.sh +5 -5
  83. package/plugins/specweave/hooks/universal/dispatcher.mjs +4 -5
  84. package/plugins/specweave/hooks/universal/fail-fast-wrapper.sh +43 -296
  85. package/plugins/specweave/hooks/universal/hook-wrapper.sh +3 -1
  86. package/plugins/specweave/hooks/user-prompt-submit.sh +1 -1
  87. package/plugins/specweave/hooks/v2/dispatchers/post-tool-use.sh +2 -2
  88. package/plugins/specweave/hooks/v2/dispatchers/session-start.sh +1 -10
  89. package/plugins/specweave/hooks/v2/guards/completion-guard.sh +12 -29
  90. package/plugins/specweave/hooks/v2/guards/increment-duplicate-guard.sh +27 -29
  91. package/plugins/specweave/hooks/v2/guards/metadata-json-guard.sh +10 -4
  92. package/plugins/specweave/hooks/v2/guards/spec-validation-guard.sh +139 -0
  93. package/plugins/specweave/hooks/v2/guards/task-ac-sync-guard.sh +4 -2
  94. package/plugins/specweave/hooks/v2/session-end.sh +3 -1
  95. package/plugins/specweave/hooks/v2/session-start.sh +3 -1
  96. package/plugins/specweave/skills/increment-planner/templates/plan.md +14 -0
  97. package/plugins/specweave/skills/update-instructions/SKILL.md +80 -0
  98. package/plugins/specweave-ado/hooks/post-living-docs-update.sh +1 -1
  99. package/plugins/specweave-mobile/README.md +55 -35
  100. package/plugins/specweave-mobile/agents/mobile-architect/AGENT.md +805 -329
  101. package/plugins/specweave-mobile/skills/expo-workflow/SKILL.md +226 -9
  102. package/plugins/specweave-mobile/skills/native-modules/SKILL.md +221 -20
  103. package/plugins/specweave-mobile/skills/performance-optimization/SKILL.md +186 -14
  104. package/plugins/specweave-mobile/skills/react-native-setup/SKILL.md +151 -54
  105. package/plugins/specweave-release/commands/npm.md +61 -17
  106. package/plugins/specweave-release/hooks/post-task-completion.sh +2 -3
  107. package/src/templates/AGENTS.md.template +34 -0
  108. package/src/templates/CLAUDE.md.template +121 -155
  109. package/plugins/specweave/hooks/config-env-separator.sh +0 -99
  110. package/plugins/specweave/hooks/github-metadata-guard.sh +0 -73
  111. package/plugins/specweave/hooks/lib/circuit-breaker.sh +0 -381
  112. package/plugins/specweave/hooks/lib/crash-prevention.sh +0 -336
  113. package/plugins/specweave/hooks/lib/logging.sh +0 -231
  114. package/plugins/specweave/hooks/lib/metrics.sh +0 -347
  115. package/plugins/specweave/hooks/lib/semaphore.sh +0 -216
  116. package/plugins/specweave/hooks/project-folder-guard.sh +0 -274
  117. package/plugins/specweave/hooks/spec-project-validator.sh +0 -210
  118. package/plugins/specweave/hooks/v2/guards/bash-file-guard.sh +0 -212
  119. package/plugins/specweave/hooks/v2/guards/bash-file-guard.test.sh +0 -163
  120. package/plugins/specweave/hooks/v2/guards/features-folder-guard.sh +0 -51
  121. package/plugins/specweave/hooks/v2/guards/increment-root-guard.sh +0 -63
  122. package/plugins/specweave/hooks/v2/guards/per-us-project-validator.sh +0 -335
  123. package/plugins/specweave/hooks/v2/guards/per-us-project-validator.test.sh +0 -406
@@ -0,0 +1,183 @@
1
+ /**
2
+ * Living Docs Merger - Intelligently merges existing documentation
3
+ *
4
+ * This module scans for existing documentation in a user project and
5
+ * offers to merge/import it into the living docs structure.
6
+ *
7
+ * Smart features:
8
+ * - Detects documentation type (README, API docs, guides, etc.)
9
+ * - Suggests appropriate target folders
10
+ * - Detects similar/duplicate content
11
+ * - Preserves original files (copies, doesn't move)
12
+ *
13
+ * @module core/living-docs/scaffolding/merger
14
+ */
15
+ import { Logger } from '../../../utils/logger.js';
16
+ /**
17
+ * Detected documentation file
18
+ */
19
+ export interface DetectedDoc {
20
+ /** Original file path (relative to project root) */
21
+ sourcePath: string;
22
+ /** Absolute path */
23
+ absolutePath: string;
24
+ /** File name */
25
+ fileName: string;
26
+ /** Detected document type */
27
+ type: DocType;
28
+ /** Confidence score (0-1) */
29
+ confidence: number;
30
+ /** Suggested target folder in living docs */
31
+ suggestedTarget: string;
32
+ /** File size in bytes */
33
+ size: number;
34
+ /** First 500 chars of content (for preview) */
35
+ preview: string;
36
+ /** Detected keywords/themes */
37
+ themes: string[];
38
+ }
39
+ /**
40
+ * Document types
41
+ */
42
+ export type DocType = 'readme' | 'api' | 'guide' | 'architecture' | 'adr' | 'runbook' | 'contributing' | 'changelog' | 'spec' | 'other';
43
+ /**
44
+ * Merge options
45
+ */
46
+ export interface MergeOptions {
47
+ /** Project root path */
48
+ projectPath: string;
49
+ /** Additional folders to scan (besides common locations) */
50
+ additionalFolders?: string[];
51
+ /** Whether to scan recursively */
52
+ recursive?: boolean;
53
+ /** Maximum depth for recursive scan */
54
+ maxDepth?: number;
55
+ /** Minimum confidence to include in results */
56
+ minConfidence?: number;
57
+ /** Logger instance */
58
+ logger?: Logger;
59
+ }
60
+ /**
61
+ * Merge result
62
+ */
63
+ export interface MergeResult {
64
+ /** Detected documentation files */
65
+ detected: DetectedDoc[];
66
+ /** Files that were merged */
67
+ merged: string[];
68
+ /** Files that were skipped */
69
+ skipped: string[];
70
+ /** Any errors */
71
+ errors: string[];
72
+ /** Suggested merges (grouped by target folder) */
73
+ suggestions: Map<string, DetectedDoc[]>;
74
+ }
75
+ /**
76
+ * Similarity result
77
+ */
78
+ export interface SimilarityResult {
79
+ /** Whether files are similar */
80
+ isSimilar: boolean;
81
+ /** Similarity score (0-1) */
82
+ score: number;
83
+ /** Reason for similarity */
84
+ reason?: string;
85
+ }
86
+ /**
87
+ * Living Docs Merger class
88
+ */
89
+ export declare class LivingDocsMerger {
90
+ private projectPath;
91
+ private logger;
92
+ private recursive;
93
+ private maxDepth;
94
+ private minConfidence;
95
+ private additionalFolders;
96
+ constructor(options: MergeOptions);
97
+ /**
98
+ * Scan for existing documentation
99
+ */
100
+ scan(): Promise<DetectedDoc[]>;
101
+ /**
102
+ * Scan a directory for markdown files
103
+ */
104
+ private scanDirectory;
105
+ /**
106
+ * Check if directory should be skipped
107
+ */
108
+ private shouldSkipDir;
109
+ /**
110
+ * Check if file is a documentation file
111
+ */
112
+ private isDocFile;
113
+ /**
114
+ * Analyze a documentation file
115
+ */
116
+ private analyzeFile;
117
+ /**
118
+ * Detect document type from filename and content
119
+ */
120
+ private detectType;
121
+ /**
122
+ * Extract themes/keywords from content
123
+ */
124
+ private extractThemes;
125
+ /**
126
+ * Check similarity between two files using TF-IDF weighted cosine similarity
127
+ *
128
+ * TF-IDF (Term Frequency-Inverse Document Frequency) weights terms by:
129
+ * - How often they appear in a document (TF - more = more important)
130
+ * - How rare they are across all documents (IDF - rarer = more distinctive)
131
+ */
132
+ checkSimilarity(doc1: DetectedDoc, doc2: DetectedDoc): SimilarityResult;
133
+ /**
134
+ * Compute TF-IDF weighted cosine similarity between two texts
135
+ *
136
+ * This is a simplified but effective TF-IDF implementation:
137
+ * - TF: term frequency in document (normalized)
138
+ * - IDF: inverse document frequency (approximated using both documents as corpus)
139
+ */
140
+ private computeTfIdfSimilarity;
141
+ /**
142
+ * Tokenize text into meaningful terms
143
+ * Filters out common stop words and short tokens
144
+ */
145
+ private tokenize;
146
+ /**
147
+ * Compute normalized term frequency
148
+ */
149
+ private computeTermFrequency;
150
+ /**
151
+ * Compute cosine similarity between two TF-IDF vectors
152
+ */
153
+ private cosineSimilarity;
154
+ /**
155
+ * Compute filename similarity using normalized Levenshtein distance
156
+ */
157
+ private computeFilenameSimilarity;
158
+ /**
159
+ * Compute Levenshtein edit distance between two strings
160
+ */
161
+ private levenshteinDistance;
162
+ /**
163
+ * Generate merge suggestions grouped by target folder
164
+ */
165
+ generateSuggestions(detected: DetectedDoc[]): Map<string, DetectedDoc[]>;
166
+ /**
167
+ * Merge a detected document into living docs
168
+ */
169
+ mergeDoc(doc: DetectedDoc, targetFolder?: string): Promise<{
170
+ success: boolean;
171
+ targetPath: string;
172
+ error?: string;
173
+ }>;
174
+ }
175
+ /**
176
+ * Scan for existing documentation (convenience function)
177
+ */
178
+ export declare function scanExistingDocs(options: MergeOptions): Promise<DetectedDoc[]>;
179
+ /**
180
+ * Find similar documentation folders
181
+ */
182
+ export declare function findSimilarFolders(projectPath: string, existingDocs: DetectedDoc[]): Map<string, string[]>;
183
+ //# sourceMappingURL=merger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merger.d.ts","sourceRoot":"","sources":["../../../../../src/core/living-docs/scaffolding/merger.ts"],"names":[],"mappings":"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"}