specweave 0.17.7 → 0.17.9

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 (108) hide show
  1. package/CLAUDE.md +365 -9
  2. package/dist/locales/de/.gitkeep +0 -0
  3. package/dist/locales/de/cli.json +108 -0
  4. package/dist/locales/en/cli.json +287 -0
  5. package/dist/locales/en/errors.json +7 -0
  6. package/dist/locales/en/templates.json +6 -0
  7. package/dist/locales/es/.gitkeep +0 -0
  8. package/dist/locales/es/cli.json +41 -0
  9. package/dist/locales/fr/.gitkeep +0 -0
  10. package/dist/locales/fr/cli.json +108 -0
  11. package/dist/locales/ja/.gitkeep +0 -0
  12. package/dist/locales/ja/cli.json +108 -0
  13. package/dist/locales/ko/.gitkeep +0 -0
  14. package/dist/locales/ko/cli.json +108 -0
  15. package/dist/locales/pt/.gitkeep +0 -0
  16. package/dist/locales/pt/cli.json +108 -0
  17. package/dist/locales/ru/.gitkeep +0 -0
  18. package/dist/locales/ru/cli.json +269 -0
  19. package/dist/locales/zh/.gitkeep +0 -0
  20. package/dist/locales/zh/cli.json +108 -0
  21. package/dist/plugins/specweave/lib/hooks/sync-living-docs.d.ts +9 -4
  22. package/dist/plugins/specweave/lib/hooks/sync-living-docs.d.ts.map +1 -1
  23. package/dist/plugins/specweave/lib/hooks/sync-living-docs.js +82 -12
  24. package/dist/plugins/specweave/lib/hooks/sync-living-docs.js.map +1 -1
  25. package/dist/plugins/specweave-github/lib/github-spec-content-sync.d.ts +2 -2
  26. package/dist/plugins/specweave-github/lib/github-spec-content-sync.d.ts.map +1 -1
  27. package/dist/plugins/specweave-github/lib/github-spec-content-sync.js +69 -10
  28. package/dist/plugins/specweave-github/lib/github-spec-content-sync.js.map +1 -1
  29. package/dist/src/cli/commands/detect-project.d.ts +9 -0
  30. package/dist/src/cli/commands/detect-project.d.ts.map +1 -0
  31. package/dist/src/cli/commands/detect-project.js +85 -0
  32. package/dist/src/cli/commands/detect-project.js.map +1 -0
  33. package/dist/src/cli/commands/detect-specs.d.ts +9 -0
  34. package/dist/src/cli/commands/detect-specs.d.ts.map +1 -0
  35. package/dist/src/cli/commands/detect-specs.js +73 -0
  36. package/dist/src/cli/commands/detect-specs.js.map +1 -0
  37. package/dist/src/cli/commands/init.d.ts.map +1 -1
  38. package/dist/src/cli/commands/init.js +8 -15
  39. package/dist/src/cli/commands/init.js.map +1 -1
  40. package/dist/src/core/living-docs/content-classifier.d.ts +83 -0
  41. package/dist/src/core/living-docs/content-classifier.d.ts.map +1 -0
  42. package/dist/src/core/living-docs/content-classifier.js +393 -0
  43. package/dist/src/core/living-docs/content-classifier.js.map +1 -0
  44. package/dist/src/core/living-docs/content-distributor.d.ts +126 -0
  45. package/dist/src/core/living-docs/content-distributor.d.ts.map +1 -0
  46. package/dist/src/core/living-docs/content-distributor.js +339 -0
  47. package/dist/src/core/living-docs/content-distributor.js.map +1 -0
  48. package/dist/src/core/living-docs/content-parser.d.ts +140 -0
  49. package/dist/src/core/living-docs/content-parser.d.ts.map +1 -0
  50. package/dist/src/core/living-docs/content-parser.js +316 -0
  51. package/dist/src/core/living-docs/content-parser.js.map +1 -0
  52. package/dist/src/core/living-docs/cross-linker.d.ts +126 -0
  53. package/dist/src/core/living-docs/cross-linker.d.ts.map +1 -0
  54. package/dist/src/core/living-docs/cross-linker.js +374 -0
  55. package/dist/src/core/living-docs/cross-linker.js.map +1 -0
  56. package/dist/src/core/living-docs/index.d.ts +89 -0
  57. package/dist/src/core/living-docs/index.d.ts.map +1 -0
  58. package/dist/src/core/living-docs/index.js +169 -0
  59. package/dist/src/core/living-docs/index.js.map +1 -0
  60. package/dist/src/core/living-docs/project-detector.d.ts +103 -0
  61. package/dist/src/core/living-docs/project-detector.d.ts.map +1 -0
  62. package/dist/src/core/living-docs/project-detector.js +314 -0
  63. package/dist/src/core/living-docs/project-detector.js.map +1 -0
  64. package/dist/src/core/repo-structure/prompt-consolidator.d.ts +1 -1
  65. package/dist/src/core/repo-structure/prompt-consolidator.d.ts.map +1 -1
  66. package/dist/src/core/repo-structure/prompt-consolidator.js +51 -22
  67. package/dist/src/core/repo-structure/prompt-consolidator.js.map +1 -1
  68. package/dist/src/core/repo-structure/repo-structure-manager.d.ts +2 -0
  69. package/dist/src/core/repo-structure/repo-structure-manager.d.ts.map +1 -1
  70. package/dist/src/core/repo-structure/repo-structure-manager.js +126 -62
  71. package/dist/src/core/repo-structure/repo-structure-manager.js.map +1 -1
  72. package/dist/src/core/spec-content-sync.d.ts +6 -0
  73. package/dist/src/core/spec-content-sync.d.ts.map +1 -1
  74. package/dist/src/core/spec-content-sync.js +25 -7
  75. package/dist/src/core/spec-content-sync.js.map +1 -1
  76. package/dist/src/core/spec-detector.d.ts +54 -0
  77. package/dist/src/core/spec-detector.d.ts.map +1 -0
  78. package/dist/src/core/spec-detector.js +197 -0
  79. package/dist/src/core/spec-detector.js.map +1 -0
  80. package/dist/src/core/spec-identifier-detector.d.ts +49 -0
  81. package/dist/src/core/spec-identifier-detector.d.ts.map +1 -0
  82. package/dist/src/core/spec-identifier-detector.js +198 -0
  83. package/dist/src/core/spec-identifier-detector.js.map +1 -0
  84. package/dist/src/core/types/spec-identifier.d.ts +67 -0
  85. package/dist/src/core/types/spec-identifier.d.ts.map +1 -0
  86. package/dist/src/core/types/spec-identifier.js +23 -0
  87. package/dist/src/core/types/spec-identifier.js.map +1 -0
  88. package/dist/src/utils/docs-preview/config-generator.d.ts.map +1 -1
  89. package/dist/src/utils/docs-preview/config-generator.js +11 -0
  90. package/dist/src/utils/docs-preview/config-generator.js.map +1 -1
  91. package/package.json +1 -1
  92. package/plugins/specweave/.claude-plugin/plugin.json +1 -1
  93. package/plugins/specweave/lib/hooks/sync-living-docs.js +61 -5
  94. package/plugins/specweave/lib/hooks/sync-living-docs.ts +102 -13
  95. package/plugins/specweave-ado/.claude-plugin/plugin.json +1 -1
  96. package/plugins/specweave-docs-preview/commands/preview.md +11 -11
  97. package/plugins/specweave-github/.claude-plugin/plugin.json +1 -1
  98. package/plugins/specweave-github/hooks/post-task-completion.sh +59 -30
  99. package/plugins/specweave-github/lib/github-spec-content-sync.js +55 -6
  100. package/plugins/specweave-github/lib/github-spec-content-sync.ts +84 -12
  101. package/plugins/specweave-jira/.claude-plugin/plugin.json +1 -1
  102. package/plugins/specweave-mobile/.claude-plugin/plugin.json +1 -4
  103. package/plugins/specweave-release/.claude-plugin/plugin.json +3 -15
  104. package/src/templates/AGENTS.md.template +297 -0
  105. package/plugins/specweave/plugin.json +0 -22
  106. package/plugins/specweave-ado/plugin.json +0 -20
  107. package/plugins/specweave-github/plugin.json +0 -19
  108. package/plugins/specweave-jira/plugin.json +0 -20
@@ -0,0 +1,393 @@
1
+ /**
2
+ * Content Classifier for Intelligent Living Docs Sync
3
+ *
4
+ * Classifies spec sections into content categories using heuristic rules.
5
+ *
6
+ * @module living-docs/content-classifier
7
+ */
8
+ /**
9
+ * Content categories for classification
10
+ */
11
+ export var ContentCategory;
12
+ (function (ContentCategory) {
13
+ ContentCategory["UserStory"] = "user-story";
14
+ ContentCategory["NFR"] = "nfr";
15
+ ContentCategory["Architecture"] = "architecture";
16
+ ContentCategory["ADR"] = "adr";
17
+ ContentCategory["Operations"] = "operations";
18
+ ContentCategory["Delivery"] = "delivery";
19
+ ContentCategory["Strategy"] = "strategy";
20
+ ContentCategory["Governance"] = "governance";
21
+ ContentCategory["Overview"] = "overview";
22
+ ContentCategory["Unknown"] = "unknown";
23
+ })(ContentCategory || (ContentCategory = {}));
24
+ /**
25
+ * Content Classifier class
26
+ */
27
+ export class ContentClassifier {
28
+ constructor() {
29
+ this.rules = this.initializeRules();
30
+ }
31
+ /**
32
+ * Initialize classification rules
33
+ */
34
+ initializeRules() {
35
+ return [
36
+ // User Story Rules (High confidence patterns)
37
+ {
38
+ category: ContentCategory.UserStory,
39
+ weight: 0.9,
40
+ matcher: (section) => /^(US|User Story|Story)[-\s]*\d+/i.test(section.heading),
41
+ description: 'Heading starts with US-XXX or User Story XXX',
42
+ },
43
+ {
44
+ category: ContentCategory.UserStory,
45
+ weight: 0.8,
46
+ matcher: (section) => /as a|I want|so that/i.test(section.content),
47
+ description: 'Contains user story format (As a... I want... So that...)',
48
+ },
49
+ {
50
+ category: ContentCategory.UserStory,
51
+ weight: 0.7,
52
+ matcher: (section) => /acceptance criteria|ac-|given.*when.*then/i.test(section.content),
53
+ description: 'Contains acceptance criteria or Given/When/Then',
54
+ },
55
+ // NFR Rules
56
+ {
57
+ category: ContentCategory.NFR,
58
+ weight: 0.9,
59
+ matcher: (section) => /^(NFR|Non-Functional Requirement)[-\s]*\d+/i.test(section.heading),
60
+ description: 'Heading starts with NFR-XXX',
61
+ },
62
+ {
63
+ category: ContentCategory.NFR,
64
+ weight: 0.8,
65
+ matcher: (section) => /performance|latency|throughput|scalability|availability|reliability/i.test(section.content),
66
+ description: 'Contains NFR keywords (performance, scalability, etc.)',
67
+ },
68
+ {
69
+ category: ContentCategory.NFR,
70
+ weight: 0.7,
71
+ matcher: (section) => /<\d+\s*(ms|sec|min)|>\d+\s*(req\/s|users|concurrent)/i.test(section.content),
72
+ description: 'Contains quantitative metrics (<30s, >1000 req/s)',
73
+ },
74
+ // Architecture Rules
75
+ {
76
+ category: ContentCategory.Architecture,
77
+ weight: 0.9,
78
+ matcher: (section) => /^(Architecture|System Design|Component Design|Data Model|HLD|LLD)/i.test(section.heading),
79
+ description: 'Heading indicates architecture',
80
+ },
81
+ {
82
+ category: ContentCategory.Architecture,
83
+ weight: 0.8,
84
+ matcher: (section) => /component|service|module|class diagram|sequence diagram|entity relationship/i.test(section.content),
85
+ description: 'Contains architecture terms',
86
+ },
87
+ {
88
+ category: ContentCategory.Architecture,
89
+ weight: 0.7,
90
+ matcher: (section) => section.codeBlocks.some((block) => block.language === 'mermaid' || block.language === 'plantuml'),
91
+ description: 'Contains diagram code blocks',
92
+ },
93
+ // ADR Rules
94
+ {
95
+ category: ContentCategory.ADR,
96
+ weight: 0.95,
97
+ matcher: (section) => /^ADR[-\s]*\d+/i.test(section.heading),
98
+ description: 'Heading starts with ADR-XXX',
99
+ },
100
+ {
101
+ category: ContentCategory.ADR,
102
+ weight: 0.9,
103
+ matcher: (section) => /^(Decision|Technical Decision|Architecture Decision)/i.test(section.heading) &&
104
+ /context|decision|consequences|alternatives|status/i.test(section.content),
105
+ description: 'Contains ADR structure (context, decision, consequences)',
106
+ },
107
+ {
108
+ category: ContentCategory.ADR,
109
+ weight: 0.7,
110
+ matcher: (section) => /why we chose|alternatives considered|trade-?offs/i.test(section.content),
111
+ description: 'Contains decision rationale keywords',
112
+ },
113
+ // Operations Rules
114
+ {
115
+ category: ContentCategory.Operations,
116
+ weight: 0.9,
117
+ matcher: (section) => /^(Runbook|SLO|SLI|Monitoring|Alerting|Incident|Operations)/i.test(section.heading),
118
+ description: 'Heading indicates operations',
119
+ },
120
+ {
121
+ category: ContentCategory.Operations,
122
+ weight: 0.8,
123
+ matcher: (section) => /incident response|on-?call|escalation|monitoring|alerting|slo|sli/i.test(section.content),
124
+ description: 'Contains operations keywords',
125
+ },
126
+ {
127
+ category: ContentCategory.Operations,
128
+ weight: 0.7,
129
+ matcher: (section) => /step \d+|procedure|troubleshooting|diagnostic/i.test(section.content),
130
+ description: 'Contains runbook-style content',
131
+ },
132
+ // Delivery Rules
133
+ {
134
+ category: ContentCategory.Delivery,
135
+ weight: 0.9,
136
+ matcher: (section) => /^(Delivery|Release|Test Strategy|CI\/CD|Roadmap|Branch Strategy)/i.test(section.heading),
137
+ description: 'Heading indicates delivery process',
138
+ },
139
+ {
140
+ category: ContentCategory.Delivery,
141
+ weight: 0.8,
142
+ matcher: (section) => /test plan|test strategy|release plan|deployment|pipeline|continuous/i.test(section.content),
143
+ description: 'Contains delivery keywords',
144
+ },
145
+ {
146
+ category: ContentCategory.Delivery,
147
+ weight: 0.7,
148
+ matcher: (section) => /git flow|pull request|code review|merge strategy/i.test(section.content),
149
+ description: 'Contains development workflow terms',
150
+ },
151
+ // Strategy Rules
152
+ {
153
+ category: ContentCategory.Strategy,
154
+ weight: 0.9,
155
+ matcher: (section) => /^(Strategy|Vision|Business Case|PRD|Product Requirements|OKR)/i.test(section.heading),
156
+ description: 'Heading indicates strategy',
157
+ },
158
+ {
159
+ category: ContentCategory.Strategy,
160
+ weight: 0.8,
161
+ matcher: (section) => /business case|roi|market analysis|stakeholder|product vision/i.test(section.content),
162
+ description: 'Contains strategy keywords',
163
+ },
164
+ {
165
+ category: ContentCategory.Strategy,
166
+ weight: 0.7,
167
+ matcher: (section) => /objective|key result|okr|metric|success criteria/i.test(section.content),
168
+ description: 'Contains business metrics and objectives',
169
+ },
170
+ // Governance Rules
171
+ {
172
+ category: ContentCategory.Governance,
173
+ weight: 0.9,
174
+ matcher: (section) => /^(Security|Compliance|Coding Standards|Policy|Governance)/i.test(section.heading),
175
+ description: 'Heading indicates governance',
176
+ },
177
+ {
178
+ category: ContentCategory.Governance,
179
+ weight: 0.8,
180
+ matcher: (section) => /security policy|compliance|gdpr|hipaa|pci-?dss|soc 2/i.test(section.content),
181
+ description: 'Contains compliance keywords',
182
+ },
183
+ {
184
+ category: ContentCategory.Governance,
185
+ weight: 0.7,
186
+ matcher: (section) => /coding standard|style guide|convention|best practice/i.test(section.content),
187
+ description: 'Contains coding standards keywords',
188
+ },
189
+ // Overview Rules (Catch common overview sections)
190
+ {
191
+ category: ContentCategory.Overview,
192
+ weight: 0.8,
193
+ matcher: (section) => /^(Overview|Introduction|Summary|Executive Summary|Quick Overview)/i.test(section.heading),
194
+ description: 'Heading indicates overview/introduction',
195
+ },
196
+ {
197
+ category: ContentCategory.Overview,
198
+ weight: 0.6,
199
+ matcher: (section) => section.level === 2 && section.heading.toLowerCase().includes('overview'),
200
+ description: 'Top-level overview section',
201
+ },
202
+ ];
203
+ }
204
+ /**
205
+ * Classify a single section
206
+ */
207
+ classify(section) {
208
+ const scores = new Map();
209
+ const reasoning = [];
210
+ // Apply all rules and accumulate scores
211
+ for (const rule of this.rules) {
212
+ if (rule.matcher(section)) {
213
+ const currentScore = scores.get(rule.category) || 0;
214
+ scores.set(rule.category, currentScore + rule.weight);
215
+ reasoning.push(`[${rule.category}] ${rule.description}`);
216
+ }
217
+ }
218
+ // Find category with highest score
219
+ let maxScore = 0;
220
+ let bestCategory = ContentCategory.Unknown;
221
+ for (const [category, score] of scores.entries()) {
222
+ if (score > maxScore) {
223
+ maxScore = score;
224
+ bestCategory = category;
225
+ }
226
+ }
227
+ // Normalize confidence (cap at 1.0)
228
+ const confidence = Math.min(maxScore, 1.0);
229
+ // Generate suggested filename and path
230
+ const { filename, path } = this.suggestFileLocation(section, bestCategory);
231
+ return {
232
+ category: bestCategory,
233
+ confidence,
234
+ reasoning,
235
+ suggestedFilename: filename,
236
+ suggestedPath: path,
237
+ metadata: {
238
+ heading: section.heading,
239
+ level: section.level,
240
+ contentLength: section.content.length,
241
+ hasCodeBlocks: section.codeBlocks.length > 0,
242
+ hasLinks: section.links.length > 0,
243
+ },
244
+ };
245
+ }
246
+ /**
247
+ * Classify multiple sections
248
+ */
249
+ classifyAll(sections) {
250
+ return sections.map((section) => this.classify(section));
251
+ }
252
+ /**
253
+ * Suggest file location based on category
254
+ */
255
+ suggestFileLocation(section, category) {
256
+ const slug = this.slugify(section.heading);
257
+ switch (category) {
258
+ case ContentCategory.UserStory: {
259
+ // Extract US ID if present (e.g., "US-016-001" → "us-016-001")
260
+ const usMatch = section.heading.match(/US[-\s]*(\d+[-\s]*\d+)/i);
261
+ const filename = usMatch
262
+ ? `us-${usMatch[1].replace(/\s+/g, '-')}.md`
263
+ : `us-${slug}.md`;
264
+ return { filename, path: 'specs/{project}' };
265
+ }
266
+ case ContentCategory.NFR: {
267
+ const nfrMatch = section.heading.match(/NFR[-\s]*(\d+[-\s]*\d+)/i);
268
+ const filename = nfrMatch
269
+ ? `nfr-${nfrMatch[1].replace(/\s+/g, '-')}.md`
270
+ : `nfr-${slug}.md`;
271
+ return { filename, path: 'specs/{project}' };
272
+ }
273
+ case ContentCategory.Architecture: {
274
+ const isHLD = /high-?level|hld|system/i.test(section.heading);
275
+ const isLLD = /low-?level|lld|component/i.test(section.heading);
276
+ const prefix = isHLD ? 'hld' : isLLD ? 'lld' : 'design';
277
+ return {
278
+ filename: `${prefix}-${slug}.md`,
279
+ path: 'architecture',
280
+ };
281
+ }
282
+ case ContentCategory.ADR: {
283
+ const adrMatch = section.heading.match(/ADR[-\s]*(\d+)/i);
284
+ const filename = adrMatch
285
+ ? `${adrMatch[1].padStart(4, '0')}-${slug}.md`
286
+ : `adr-${slug}.md`;
287
+ return { filename, path: 'architecture/adr' };
288
+ }
289
+ case ContentCategory.Operations: {
290
+ const isRunbook = /runbook/i.test(section.heading);
291
+ const isSLO = /slo|sli/i.test(section.heading);
292
+ const prefix = isRunbook ? 'runbook' : isSLO ? 'slo' : 'ops';
293
+ return {
294
+ filename: `${prefix}-${slug}.md`,
295
+ path: 'operations',
296
+ };
297
+ }
298
+ case ContentCategory.Delivery: {
299
+ const isRoadmap = /roadmap/i.test(section.heading);
300
+ const isTestStrategy = /test.*strategy/i.test(section.heading);
301
+ const prefix = isRoadmap ? 'roadmap' : isTestStrategy ? 'test-strategy' : 'delivery';
302
+ return {
303
+ filename: `${prefix}-${slug}.md`,
304
+ path: 'delivery',
305
+ };
306
+ }
307
+ case ContentCategory.Strategy: {
308
+ const isPRD = /prd|product.*requirements/i.test(section.heading);
309
+ const prefix = isPRD ? 'prd' : 'strategy';
310
+ return {
311
+ filename: `${prefix}-${slug}.md`,
312
+ path: 'strategy',
313
+ };
314
+ }
315
+ case ContentCategory.Governance: {
316
+ const isSecurity = /security/i.test(section.heading);
317
+ const isCompliance = /compliance/i.test(section.heading);
318
+ const prefix = isSecurity
319
+ ? 'security'
320
+ : isCompliance
321
+ ? 'compliance'
322
+ : 'governance';
323
+ return {
324
+ filename: `${prefix}-${slug}.md`,
325
+ path: 'governance',
326
+ };
327
+ }
328
+ case ContentCategory.Overview: {
329
+ return {
330
+ filename: `overview-${slug}.md`,
331
+ path: 'specs/{project}',
332
+ };
333
+ }
334
+ default: {
335
+ return {
336
+ filename: `${slug}.md`,
337
+ path: 'specs/{project}',
338
+ };
339
+ }
340
+ }
341
+ }
342
+ /**
343
+ * Convert text to URL-safe slug
344
+ */
345
+ slugify(text) {
346
+ return text
347
+ .toLowerCase()
348
+ .replace(/[^\w\s-]/g, '')
349
+ .replace(/\s+/g, '-')
350
+ .replace(/--+/g, '-')
351
+ .trim();
352
+ }
353
+ /**
354
+ * Get sections by category
355
+ */
356
+ filterByCategory(results, category) {
357
+ return results.filter((r) => r.category === category);
358
+ }
359
+ /**
360
+ * Get sections by minimum confidence
361
+ */
362
+ filterByConfidence(results, minConfidence) {
363
+ return results.filter((r) => r.confidence >= minConfidence);
364
+ }
365
+ /**
366
+ * Get statistics about classifications
367
+ */
368
+ getStatistics(results) {
369
+ const stats = {
370
+ total: results.length,
371
+ byCategory: {},
372
+ averageConfidence: 0,
373
+ lowConfidence: 0,
374
+ };
375
+ // Count by category
376
+ for (const result of results) {
377
+ stats.byCategory[result.category] = (stats.byCategory[result.category] || 0) + 1;
378
+ }
379
+ // Calculate average confidence
380
+ const totalConfidence = results.reduce((sum, r) => sum + r.confidence, 0);
381
+ stats.averageConfidence = totalConfidence / results.length;
382
+ // Count low confidence (<0.6)
383
+ stats.lowConfidence = results.filter((r) => r.confidence < 0.6).length;
384
+ return stats;
385
+ }
386
+ }
387
+ /**
388
+ * Factory function to create classifier
389
+ */
390
+ export function createContentClassifier() {
391
+ return new ContentClassifier();
392
+ }
393
+ //# sourceMappingURL=content-classifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content-classifier.js","sourceRoot":"","sources":["../../../../src/core/living-docs/content-classifier.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,126 @@
1
+ /**
2
+ * Content Distributor for Intelligent Living Docs Sync
3
+ *
4
+ * Distributes classified spec sections to appropriate folders with proper formatting.
5
+ *
6
+ * @module living-docs/content-distributor
7
+ */
8
+ import { ParsedSpec } from './content-parser.js';
9
+ import { ClassificationResult, ContentCategory } from './content-classifier.js';
10
+ import { ProjectContext } from './project-detector.js';
11
+ /**
12
+ * Distribution result
13
+ */
14
+ export interface DistributionResult {
15
+ created: DistributedFile[];
16
+ updated: DistributedFile[];
17
+ skipped: DistributedFile[];
18
+ errors: DistributionError[];
19
+ summary: DistributionSummary;
20
+ }
21
+ /**
22
+ * Distributed file information
23
+ */
24
+ export interface DistributedFile {
25
+ path: string;
26
+ category: ContentCategory;
27
+ size: number;
28
+ sections: number;
29
+ }
30
+ /**
31
+ * Distribution error
32
+ */
33
+ export interface DistributionError {
34
+ section: string;
35
+ category: ContentCategory;
36
+ error: string;
37
+ path?: string;
38
+ }
39
+ /**
40
+ * Distribution summary statistics
41
+ */
42
+ export interface DistributionSummary {
43
+ totalSections: number;
44
+ filesCreated: number;
45
+ filesUpdated: number;
46
+ filesSkipped: number;
47
+ errors: number;
48
+ byCategory: Record<ContentCategory, number>;
49
+ }
50
+ /**
51
+ * Distributor options
52
+ */
53
+ export interface DistributorOptions {
54
+ basePath?: string;
55
+ generateFrontmatter?: boolean;
56
+ preserveOriginal?: boolean;
57
+ dryRun?: boolean;
58
+ }
59
+ /**
60
+ * Content Distributor class
61
+ */
62
+ export declare class ContentDistributor {
63
+ private options;
64
+ constructor(options?: DistributorOptions);
65
+ /**
66
+ * Distribute parsed spec to appropriate locations
67
+ */
68
+ distribute(incrementId: string, spec: ParsedSpec, classifications: ClassificationResult[], project: ProjectContext): Promise<DistributionResult>;
69
+ /**
70
+ * Flatten nested sections
71
+ */
72
+ private flattenSections;
73
+ /**
74
+ * Group sections by destination file
75
+ */
76
+ private groupByFile;
77
+ /**
78
+ * Resolve file path with project
79
+ */
80
+ private resolvePath;
81
+ /**
82
+ * Write a file with grouped sections
83
+ */
84
+ private writeFile;
85
+ /**
86
+ * Generate file content with frontmatter and sections
87
+ */
88
+ private generateFileContent;
89
+ /**
90
+ * Generate Docusaurus frontmatter
91
+ */
92
+ private generateFrontmatter;
93
+ /**
94
+ * Generate description from sections
95
+ */
96
+ private generateDescription;
97
+ /**
98
+ * Archive original spec for reference
99
+ */
100
+ private archiveOriginalSpec;
101
+ /**
102
+ * Generate index file for a category
103
+ */
104
+ generateIndex(category: ContentCategory, projectId: string, files: DistributedFile[]): Promise<void>;
105
+ /**
106
+ * Get category display title
107
+ */
108
+ private getCategoryTitle;
109
+ /**
110
+ * Get distribution statistics
111
+ */
112
+ getStatistics(result: DistributionResult): {
113
+ totalFiles: number;
114
+ totalSize: number;
115
+ averageSize: number;
116
+ byCategory: Record<ContentCategory, {
117
+ files: number;
118
+ size: number;
119
+ }>;
120
+ };
121
+ }
122
+ /**
123
+ * Factory function to create distributor
124
+ */
125
+ export declare function createContentDistributor(options?: DistributorOptions): ContentDistributor;
126
+ //# sourceMappingURL=content-distributor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content-distributor.d.ts","sourceRoot":"","sources":["../../../../src/core/living-docs/content-distributor.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,EAAiB,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAChF,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAC5B,OAAO,EAAE,mBAAmB,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,eAAe,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,eAAe,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;CAC7C;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAUD;;GAEG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,OAAO,CAA+B;gBAElC,OAAO,GAAE,kBAAuB;IAU5C;;OAEG;IACG,UAAU,CACd,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,UAAU,EAChB,eAAe,EAAE,oBAAoB,EAAE,EACvC,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,kBAAkB,CAAC;IAoE9B;;OAEG;IACH,OAAO,CAAC,eAAe;IAavB;;OAEG;IACH,OAAO,CAAC,WAAW;IAiCnB;;OAEG;IACH,OAAO,CAAC,WAAW;IAUnB;;OAEG;YACW,SAAS;IA8DvB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAqC3B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA+C3B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAO3B;;OAEG;YACW,mBAAmB;IAqBjC;;OAEG;IACG,aAAa,CACjB,QAAQ,EAAE,eAAe,EACzB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,eAAe,EAAE,GACvB,OAAO,CAAC,IAAI,CAAC;IA4BhB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAiBxB;;OAEG;IACH,aAAa,CAAC,MAAM,EAAE,kBAAkB,GAAG;QACzC,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,MAAM,CAAC,eAAe,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KACtE;CAqBF;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,CAAC,EAAE,kBAAkB,GAAG,kBAAkB,CAEzF"}