@planu/cli 0.35.1 → 0.36.0

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 (48) hide show
  1. package/dist/config/license-plans.json +2 -1
  2. package/dist/engine/docs-site-generator/dashboard-renderer.d.ts +3 -0
  3. package/dist/engine/docs-site-generator/dashboard-renderer.d.ts.map +1 -0
  4. package/dist/engine/docs-site-generator/dashboard-renderer.js +84 -0
  5. package/dist/engine/docs-site-generator/dashboard-renderer.js.map +1 -0
  6. package/dist/engine/docs-site-generator/data-collector.d.ts +5 -0
  7. package/dist/engine/docs-site-generator/data-collector.d.ts.map +1 -0
  8. package/dist/engine/docs-site-generator/data-collector.js +300 -0
  9. package/dist/engine/docs-site-generator/data-collector.js.map +1 -0
  10. package/dist/engine/docs-site-generator/diagrams-renderer.d.ts +2 -0
  11. package/dist/engine/docs-site-generator/diagrams-renderer.d.ts.map +1 -0
  12. package/dist/engine/docs-site-generator/diagrams-renderer.js +40 -0
  13. package/dist/engine/docs-site-generator/diagrams-renderer.js.map +1 -0
  14. package/dist/engine/docs-site-generator/html-templates.d.ts +12 -0
  15. package/dist/engine/docs-site-generator/html-templates.d.ts.map +1 -0
  16. package/dist/engine/docs-site-generator/html-templates.js +359 -0
  17. package/dist/engine/docs-site-generator/html-templates.js.map +1 -0
  18. package/dist/engine/docs-site-generator/index.d.ts +3 -0
  19. package/dist/engine/docs-site-generator/index.d.ts.map +1 -0
  20. package/dist/engine/docs-site-generator/index.js +74 -0
  21. package/dist/engine/docs-site-generator/index.js.map +1 -0
  22. package/dist/engine/docs-site-generator/markdown-renderer.d.ts +6 -0
  23. package/dist/engine/docs-site-generator/markdown-renderer.d.ts.map +1 -0
  24. package/dist/engine/docs-site-generator/markdown-renderer.js +168 -0
  25. package/dist/engine/docs-site-generator/markdown-renderer.js.map +1 -0
  26. package/dist/engine/docs-site-generator/spec-renderer.d.ts +4 -0
  27. package/dist/engine/docs-site-generator/spec-renderer.d.ts.map +1 -0
  28. package/dist/engine/docs-site-generator/spec-renderer.js +81 -0
  29. package/dist/engine/docs-site-generator/spec-renderer.js.map +1 -0
  30. package/dist/engine/docs-site-generator/tools-renderer.d.ts +3 -0
  31. package/dist/engine/docs-site-generator/tools-renderer.d.ts.map +1 -0
  32. package/dist/engine/docs-site-generator/tools-renderer.js +55 -0
  33. package/dist/engine/docs-site-generator/tools-renderer.js.map +1 -0
  34. package/dist/resources/process.js +2 -2
  35. package/dist/resources/process.js.map +1 -1
  36. package/dist/tools/create-spec/spec-builder.js +20 -3
  37. package/dist/tools/create-spec/spec-builder.js.map +1 -1
  38. package/dist/tools/generate-docs-site.d.ts +3 -0
  39. package/dist/tools/generate-docs-site.d.ts.map +1 -0
  40. package/dist/tools/generate-docs-site.js +25 -0
  41. package/dist/tools/generate-docs-site.js.map +1 -0
  42. package/dist/tools/register-workspace-tools.d.ts.map +1 -1
  43. package/dist/tools/register-workspace-tools.js +15 -0
  44. package/dist/tools/register-workspace-tools.js.map +1 -1
  45. package/dist/types/docs.d.ts +51 -0
  46. package/dist/types/docs.d.ts.map +1 -1
  47. package/package.json +1 -1
  48. package/src/config/license-plans.json +2 -1
@@ -122,7 +122,8 @@
122
122
  "create_release",
123
123
  "generate_changelog",
124
124
  "validate_team_results",
125
- "audit_claude_config"
125
+ "audit_claude_config",
126
+ "generate_docs_site"
126
127
  ],
127
128
  "alwaysAllowed": [
128
129
  "activate_license",
@@ -0,0 +1,3 @@
1
+ import type { DocSpecSummary, ProjectMetrics } from '../../types/index.js';
2
+ export declare function renderDashboard(specs: DocSpecSummary[], metrics: ProjectMetrics): string;
3
+ //# sourceMappingURL=dashboard-renderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard-renderer.d.ts","sourceRoot":"","sources":["../../../src/engine/docs-site-generator/dashboard-renderer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAqF3E,wBAAgB,eAAe,CAAC,KAAK,EAAE,cAAc,EAAE,EAAE,OAAO,EAAE,cAAc,GAAG,MAAM,CAOxF"}
@@ -0,0 +1,84 @@
1
+ import { renderProgressBar, renderStatusBadge } from './html-templates.js';
2
+ function renderSummaryCards(specs, metrics) {
3
+ const done = specs.filter((s) => s.status === 'done').length;
4
+ const inProgress = specs.filter((s) => s.status === 'implementing').length;
5
+ const draft = specs.filter((s) => s.status === 'draft').length;
6
+ return `<div class="summary-cards">
7
+ <div class="card card-total"><h3>Total Specs</h3><p>${String(metrics.totalSpecs)}</p></div>
8
+ <div class="card card-done"><h3>Done</h3><p>${String(done)}</p></div>
9
+ <div class="card card-progress"><h3>In Progress</h3><p>${String(inProgress)}</p></div>
10
+ <div class="card card-draft"><h3>Draft</h3><p>${String(draft)}</p></div>
11
+ <div class="card card-tools"><h3>Total Tools</h3><p>${String(metrics.totalTools)}</p></div>
12
+ </div>`;
13
+ }
14
+ function renderSpecsTable(specs) {
15
+ if (specs.length === 0) {
16
+ return '<p class="empty">No specs found.</p>';
17
+ }
18
+ const rows = specs
19
+ .map((spec) => {
20
+ const searchable = `${spec.id} ${spec.title}`.toLowerCase();
21
+ return ` <tr data-searchable="${searchable}">
22
+ <td>${spec.id}</td>
23
+ <td><a href="specs/${spec.slug}.html">${spec.title}</a></td>
24
+ <td>${renderStatusBadge(spec.status)}</td>
25
+ <td>${spec.category}</td>
26
+ <td>${renderProgressBar(spec.criteriaDone, spec.criteriaTotal)}</td>
27
+ <td>${spec.type}</td>
28
+ </tr>`;
29
+ })
30
+ .join('\n');
31
+ return `<table class="specs-table">
32
+ <thead>
33
+ <tr>
34
+ <th>ID</th><th>Title</th><th>Status</th><th>Category</th><th>Progress</th><th>Type</th>
35
+ </tr>
36
+ </thead>
37
+ <tbody>
38
+ ${rows}
39
+ </tbody>
40
+ </table>`;
41
+ }
42
+ function renderMetricsSection(metrics) {
43
+ const locBars = Object.entries(metrics.locByLayer)
44
+ .map(([layer, loc]) => {
45
+ return ` <div class="bar-row">
46
+ <span class="bar-label">${layer}</span>
47
+ <div class="bar" style="width:${String(loc)}px"></div>
48
+ <span class="bar-value">${String(loc)}</span>
49
+ </div>`;
50
+ })
51
+ .join('\n');
52
+ const specTypes = Object.entries(metrics.specsByStatus)
53
+ .map(([status, count]) => `${status}: ${String(count)}`)
54
+ .join(', ');
55
+ return `<div class="metrics-section">
56
+ <h2>Metrics</h2>
57
+ <div class="loc-chart">
58
+ <h3>Lines of Code by Layer</h3>
59
+ ${locBars}
60
+ </div>
61
+ <div class="test-count">
62
+ <h3>Tests</h3>
63
+ <p>${String(metrics.testCount)}</p>
64
+ </div>
65
+ <div class="specs-by-type">
66
+ <h3>Specs by Status</h3>
67
+ <div class="mermaid">pie title Specs by Status
68
+ ${Object.entries(metrics.specsByStatus)
69
+ .map(([s, c]) => ` "${s}" : ${String(c)}`)
70
+ .join('\n')}
71
+ </div>
72
+ <noscript><p>${specTypes}</p></noscript>
73
+ </div>
74
+ </div>`;
75
+ }
76
+ export function renderDashboard(specs, metrics) {
77
+ return `<div class="dashboard">
78
+ ${renderSummaryCards(specs, metrics)}
79
+ <h2>Specifications</h2>
80
+ ${renderSpecsTable(specs)}
81
+ ${renderMetricsSection(metrics)}
82
+ </div>`;
83
+ }
84
+ //# sourceMappingURL=dashboard-renderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard-renderer.js","sourceRoot":"","sources":["../../../src/engine/docs-site-generator/dashboard-renderer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { DocSpecSummary, ToolEntry, ProjectMetrics } from '../../types/docs.js';
2
+ export declare function collectSpecs(projectPath: string): Promise<DocSpecSummary[]>;
3
+ export declare function collectTools(projectPath: string): ToolEntry[];
4
+ export declare function collectMetrics(projectPath: string): Promise<ProjectMetrics>;
5
+ //# sourceMappingURL=data-collector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-collector.d.ts","sourceRoot":"","sources":["../../../src/engine/docs-site-generator/data-collector.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAqHrF,wBAAsB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CA+FjF;AAED,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,EAAE,CA4B7D;AAuDD,wBAAsB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CA+BjF"}
@@ -0,0 +1,300 @@
1
+ // SPEC-093: Data collector for docs site generator
2
+ import { readFileSync } from 'node:fs';
3
+ import { readdir, readFile, stat } from 'node:fs/promises';
4
+ import { join, basename } from 'node:path';
5
+ const SDD_PHASES = {
6
+ Initialize: ['init_project', 'init_constitution', 'set_locale'],
7
+ Analyze: [
8
+ 'suggest_stack',
9
+ 'check_versions',
10
+ 'suggest_tooling',
11
+ 'detect_deprecations',
12
+ 'security_check',
13
+ 'audit_stack',
14
+ 'paradigm_report',
15
+ 'discover_mcps',
16
+ 'suggest_mcps',
17
+ 'detect_agent',
18
+ 'check_config_health',
19
+ ],
20
+ 'Create Spec': [
21
+ 'clarify_requirements',
22
+ 'create_spec',
23
+ 'define_ui_contract',
24
+ 'design_schema',
25
+ 'event_contracts',
26
+ 'challenge_spec',
27
+ 'detect_contradictions',
28
+ 'apply_template',
29
+ 'list_templates',
30
+ ],
31
+ 'Filter & Enrich': [
32
+ 'estimate',
33
+ 'check_readiness',
34
+ 'manage_scope',
35
+ 'reality_check',
36
+ 'estimate_ai_cost',
37
+ 'recommend_model',
38
+ 'plan_team_distribution',
39
+ ],
40
+ Review: [
41
+ 'validate',
42
+ 'detect_drift',
43
+ 'check_spec_accuracy',
44
+ 'validate_workflow',
45
+ 'spec_coverage',
46
+ 'review_pr',
47
+ ],
48
+ Implement: [
49
+ 'generate_execution_plan',
50
+ 'generate_tests',
51
+ 'generate_rules',
52
+ 'generate_skill',
53
+ 'generate_sub_agent',
54
+ 'generate_teammate_prompt',
55
+ 'package_handoff',
56
+ 'manage_git',
57
+ 'generate_orchestration_script',
58
+ 'orchestrate',
59
+ 'orchestrate_agents',
60
+ 'transform_code',
61
+ 'generate_ci',
62
+ 'generate_planu_ci',
63
+ 'generate_ide_config',
64
+ 'scaffold_plugin',
65
+ 'configure_workers',
66
+ 'orchestrate_runtime',
67
+ 'configure_llm_providers',
68
+ 'create_pr_from_spec',
69
+ ],
70
+ Validate: ['audit', 'reconcile_spec', 'validate_team_results', 'audit_claude_config'],
71
+ 'Document & Ship': [
72
+ 'generate_docs',
73
+ 'summarize_spec',
74
+ 'generate_adr',
75
+ 'generate_checklist',
76
+ 'generate_changelog',
77
+ 'create_release',
78
+ ],
79
+ };
80
+ function findPhaseForTool(toolName) {
81
+ for (const [phase, tools] of Object.entries(SDD_PHASES)) {
82
+ if (tools.includes(toolName)) {
83
+ return phase;
84
+ }
85
+ }
86
+ return 'Other';
87
+ }
88
+ function parseSpecId(dirName) {
89
+ const match = /^(SPEC-\d+)/.exec(dirName);
90
+ return match?.[1] ?? dirName;
91
+ }
92
+ function slugify(name) {
93
+ return name
94
+ .toLowerCase()
95
+ .replace(/[^a-z0-9]+/g, '-')
96
+ .replace(/^-|-$/g, '');
97
+ }
98
+ function parseSpecType(title) {
99
+ const lower = title.toLowerCase();
100
+ if (lower.includes('refactor')) {
101
+ return 'refactor';
102
+ }
103
+ if (lower.includes('fix') || lower.includes('bug')) {
104
+ return 'fix';
105
+ }
106
+ if (lower.includes('test')) {
107
+ return 'test';
108
+ }
109
+ if (lower.includes('doc')) {
110
+ return 'docs';
111
+ }
112
+ return 'feature';
113
+ }
114
+ // eslint-disable-next-line complexity, max-lines-per-function -- spec parsing requires many field extractions
115
+ export async function collectSpecs(projectPath) {
116
+ const specsDir = join(projectPath, 'planu', 'specs');
117
+ const results = [];
118
+ let categories;
119
+ try {
120
+ categories = await readdir(specsDir);
121
+ }
122
+ catch {
123
+ return [];
124
+ }
125
+ for (const category of categories) {
126
+ const categoryPath = join(specsDir, category);
127
+ const categoryStat = await stat(categoryPath).catch(() => null);
128
+ if (!categoryStat?.isDirectory()) {
129
+ continue;
130
+ }
131
+ const specDirs = await readdir(categoryPath).catch(() => []);
132
+ for (const specDir of specDirs) {
133
+ const specPath = join(categoryPath, specDir);
134
+ const dirStat = await stat(specPath).catch(() => null);
135
+ if (!dirStat?.isDirectory()) {
136
+ continue;
137
+ }
138
+ const specFilePath = join(specPath, 'spec.md');
139
+ let content;
140
+ try {
141
+ content = await readFile(specFilePath, 'utf-8');
142
+ }
143
+ catch {
144
+ continue;
145
+ }
146
+ const lines = content.split('\n');
147
+ const titleLine = lines.find((l) => l.startsWith('# '));
148
+ const titleMatch = titleLine ? /^#\s+(?:SPEC-\d+:\s*)?(.+)/.exec(titleLine) : null;
149
+ const title = titleMatch?.[1]?.trim() ?? specDir;
150
+ const statusLine = lines.find((l) => l.includes('**Status:**'));
151
+ const statusMatch = statusLine ? /\*\*Status:\*\*\s*(\w[\w-]*)/.exec(statusLine) : null;
152
+ const status = statusMatch?.[1] ?? 'draft';
153
+ let criteriaDone = 0;
154
+ let criteriaTotal = 0;
155
+ for (const line of lines) {
156
+ if (/^\s*-\s*\[x\]/i.test(line)) {
157
+ criteriaDone++;
158
+ criteriaTotal++;
159
+ }
160
+ else if (/^\s*-\s*\[\s\]/.test(line)) {
161
+ criteriaTotal++;
162
+ }
163
+ }
164
+ const tags = [];
165
+ const tagsIndex = lines.findIndex((l) => /^##\s+Tags/.test(l));
166
+ if (tagsIndex >= 0) {
167
+ for (let i = tagsIndex + 1; i < lines.length; i++) {
168
+ const tagLine = lines[i];
169
+ if (tagLine === undefined) {
170
+ break;
171
+ }
172
+ if (tagLine.startsWith('##')) {
173
+ break;
174
+ }
175
+ const tagMatch = /^\s*-\s*(.+)/.exec(tagLine);
176
+ if (tagMatch?.[1]) {
177
+ tags.push(tagMatch[1].trim());
178
+ }
179
+ }
180
+ }
181
+ results.push({
182
+ id: parseSpecId(specDir),
183
+ title,
184
+ slug: slugify(specDir),
185
+ status,
186
+ category: basename(category),
187
+ type: parseSpecType(title),
188
+ criteriaTotal,
189
+ criteriaDone,
190
+ tags,
191
+ specPath: specFilePath,
192
+ });
193
+ }
194
+ }
195
+ results.sort((a, b) => {
196
+ const numA = parseInt(/\d+/.exec(a.id)?.[0] ?? '0', 10);
197
+ const numB = parseInt(/\d+/.exec(b.id)?.[0] ?? '0', 10);
198
+ return numA - numB;
199
+ });
200
+ return results;
201
+ }
202
+ export function collectTools(projectPath) {
203
+ const plansPath = join(projectPath, 'src', 'config', 'license-plans.json');
204
+ const plans = JSON.parse(readFileSync(plansPath, 'utf-8'));
205
+ const entries = [];
206
+ for (const tool of plans.freeTools) {
207
+ entries.push({
208
+ name: tool,
209
+ description: tool.replace(/_/g, ' '),
210
+ phase: findPhaseForTool(tool),
211
+ tier: 'free',
212
+ });
213
+ }
214
+ for (const tool of plans.proTools) {
215
+ entries.push({
216
+ name: tool,
217
+ description: tool.replace(/_/g, ' '),
218
+ phase: findPhaseForTool(tool),
219
+ tier: 'pro',
220
+ });
221
+ }
222
+ return entries;
223
+ }
224
+ async function countLinesInDir(dirPath) {
225
+ let total = 0;
226
+ let entries;
227
+ try {
228
+ entries = await readdir(dirPath);
229
+ }
230
+ catch {
231
+ return 0;
232
+ }
233
+ for (const entry of entries) {
234
+ const fullPath = join(dirPath, entry);
235
+ const entryStat = await stat(fullPath).catch(() => null);
236
+ if (!entryStat) {
237
+ continue;
238
+ }
239
+ if (entryStat.isDirectory()) {
240
+ total += await countLinesInDir(fullPath);
241
+ }
242
+ else if (entry.endsWith('.ts')) {
243
+ const content = await readFile(fullPath, 'utf-8').catch(() => '');
244
+ total += content.split('\n').length;
245
+ }
246
+ }
247
+ return total;
248
+ }
249
+ async function countTestFiles(testsDir) {
250
+ let count = 0;
251
+ let entries;
252
+ try {
253
+ entries = await readdir(testsDir);
254
+ }
255
+ catch {
256
+ return 0;
257
+ }
258
+ for (const entry of entries) {
259
+ const fullPath = join(testsDir, entry);
260
+ const entryStat = await stat(fullPath).catch(() => null);
261
+ if (!entryStat) {
262
+ continue;
263
+ }
264
+ if (entryStat.isDirectory()) {
265
+ count += await countTestFiles(fullPath);
266
+ }
267
+ else if (entry.endsWith('.test.ts')) {
268
+ count++;
269
+ }
270
+ }
271
+ return count;
272
+ }
273
+ export async function collectMetrics(projectPath) {
274
+ const specs = await collectSpecs(projectPath);
275
+ const tools = collectTools(projectPath);
276
+ const specsByStatus = {};
277
+ for (const spec of specs) {
278
+ specsByStatus[spec.status] = (specsByStatus[spec.status] ?? 0) + 1;
279
+ }
280
+ const toolsByPhase = {};
281
+ for (const tool of tools) {
282
+ toolsByPhase[tool.phase] = (toolsByPhase[tool.phase] ?? 0) + 1;
283
+ }
284
+ const srcDir = join(projectPath, 'src');
285
+ const layers = ['tools', 'engine', 'types', 'storage'];
286
+ const locByLayer = {};
287
+ for (const layer of layers) {
288
+ locByLayer[layer] = await countLinesInDir(join(srcDir, layer));
289
+ }
290
+ const testCount = await countTestFiles(join(projectPath, 'tests'));
291
+ return {
292
+ totalSpecs: specs.length,
293
+ specsByStatus,
294
+ totalTools: tools.length,
295
+ toolsByPhase,
296
+ locByLayer,
297
+ testCount,
298
+ };
299
+ }
300
+ //# sourceMappingURL=data-collector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-collector.js","sourceRoot":"","sources":["../../../src/engine/docs-site-generator/data-collector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function renderDiagramsPage(): string;
2
+ //# sourceMappingURL=diagrams-renderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagrams-renderer.d.ts","sourceRoot":"","sources":["../../../src/engine/docs-site-generator/diagrams-renderer.ts"],"names":[],"mappings":"AAmCA,wBAAgB,kBAAkB,IAAI,MAAM,CAO3C"}
@@ -0,0 +1,40 @@
1
+ const ARCHITECTURE_DIAGRAM = `graph TD
2
+ Transport["MCP Transport (index.ts)"] --> Tools["Tools (src/tools/)"]
3
+ Transport --> Resources["Resources (src/resources/)"]
4
+ Tools --> Engine["Engine (src/engine/)"]
5
+ Resources --> Engine
6
+ Engine --> Types["Types (src/types/)"]
7
+ Tools --> Storage["Storage (src/storage/)"]
8
+ Engine -.-> Storage
9
+ Storage --> Types`;
10
+ const SDD_FLOW_DIAGRAM = `graph LR
11
+ Init["1. Initialize"] --> Analyze["2. Analyze"]
12
+ Analyze --> Spec["3. Create Spec"]
13
+ Spec --> Filter["4. Filter"]
14
+ Filter --> Review["5. Review"]
15
+ Review --> Impl["6. Implement"]
16
+ Impl --> Valid["7. Validate"]
17
+ Valid --> Doc["8. Document"]`;
18
+ const SPEC_LIFECYCLE_DIAGRAM = `stateDiagram-v2
19
+ [*] --> draft
20
+ draft --> review
21
+ review --> approved
22
+ review --> draft: feedback
23
+ approved --> implementing
24
+ implementing --> done
25
+ done --> [*]`;
26
+ function wrapMermaid(title, content) {
27
+ return `<div class="diagram-section">
28
+ <h2>${title}</h2>
29
+ <div class="mermaid">${content}</div>
30
+ </div>`;
31
+ }
32
+ export function renderDiagramsPage() {
33
+ return `<div class="diagrams-page">
34
+ <h1>Architecture Diagrams</h1>
35
+ ${wrapMermaid('Clean Architecture', ARCHITECTURE_DIAGRAM)}
36
+ ${wrapMermaid('SDD Flow', SDD_FLOW_DIAGRAM)}
37
+ ${wrapMermaid('Spec Lifecycle', SPEC_LIFECYCLE_DIAGRAM)}
38
+ </div>`;
39
+ }
40
+ //# sourceMappingURL=diagrams-renderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagrams-renderer.js","sourceRoot":"","sources":["../../../src/engine/docs-site-generator/diagrams-renderer.ts"],"names":[],"mappings":"AAAA,MAAM,oBAAoB,GAAG;;;;;;;;oBAQT,CAAC;AAErB,MAAM,gBAAgB,GAAG;;;;;;;+BAOM,CAAC;AAEhC,MAAM,sBAAsB,GAAG;;;;;;;eAOhB,CAAC;AAEhB,SAAS,WAAW,CAAC,KAAa,EAAE,OAAe;IACjD,OAAO;QACD,KAAK;yBACY,OAAO;OACzB,CAAC;AACR,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,OAAO;;EAEP,WAAW,CAAC,oBAAoB,EAAE,oBAAoB,CAAC;EACvD,WAAW,CAAC,UAAU,EAAE,gBAAgB,CAAC;EACzC,WAAW,CAAC,gBAAgB,EAAE,sBAAsB,CAAC;OAChD,CAAC;AACR,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * HTML templates for the static docs site generator.
3
+ * Provides layout, CSS, navigation, and shared HTML utilities.
4
+ */
5
+ import type { NavItem } from '../../types/index.js';
6
+ export declare function getStyles(): string;
7
+ export declare function renderNav(items: NavItem[], activePath?: string): string;
8
+ export declare function wrapPage(title: string, content: string, navItems: NavItem[]): string;
9
+ export declare function renderProgressBar(done: number, total: number): string;
10
+ export declare function renderStatusBadge(status: string): string;
11
+ export declare function renderSearchScript(): string;
12
+ //# sourceMappingURL=html-templates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"html-templates.d.ts","sourceRoot":"","sources":["../../../src/engine/docs-site-generator/html-templates.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAGpD,wBAAgB,SAAS,IAAI,MAAM,CA2PlC;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAyBvE;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM,CA0BpF;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAWrE;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAWxD;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAa3C"}