@hongmaple0820/scale-engine 0.17.0 → 0.18.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.
@@ -0,0 +1,576 @@
1
+ import { existsSync, mkdirSync, readFileSync, readdirSync, statSync, writeFileSync } from 'node:fs';
2
+ import { basename, dirname, isAbsolute, join, relative, resolve } from 'node:path';
3
+ import { HTMLDocumentRenderer } from './HTMLDocumentRenderer.js';
4
+ export const HTML_ARTIFACT_TYPES = [
5
+ 'plan-comparison',
6
+ 'implementation-plan',
7
+ 'code-review',
8
+ 'status-report',
9
+ 'incident-report',
10
+ 'release-report',
11
+ ];
12
+ const DEFAULT_TEMPLATE_SOURCES = {
13
+ 'plan-comparison': {
14
+ label: 'Plan Comparison',
15
+ sources: ['mini-prd.md', 'explore.md', 'plan.md'],
16
+ description: 'Compare candidate approaches, tradeoffs, open questions, and decision criteria.',
17
+ },
18
+ 'implementation-plan': {
19
+ label: 'Implementation Plan',
20
+ sources: ['plan.md', 'verification.md'],
21
+ description: 'Convert the implementation plan and verification strategy into a scannable delivery surface.',
22
+ },
23
+ 'code-review': {
24
+ label: 'Code Review',
25
+ sources: ['review.md', 'security-review.md', 'standards-impact.md'],
26
+ description: 'Summarize review findings, severity, evidence, and residual risks.',
27
+ },
28
+ 'status-report': {
29
+ label: 'Status Report',
30
+ sources: ['summary.md', 'verification.md', 'resource-impact.md', 'standards-impact.md'],
31
+ description: 'Show current task status, proof, blockers, resource state, and follow-ups.',
32
+ },
33
+ 'incident-report': {
34
+ label: 'Incident Report',
35
+ sources: ['explore.md', 'plan.md', 'verification.md', 'review.md'],
36
+ description: 'Explain incident context, diagnosis, fix, validation, and prevention work.',
37
+ },
38
+ 'release-report': {
39
+ label: 'Release Report',
40
+ sources: ['summary.md', 'verification.md', 'review.md', 'resource-impact.md', 'standards-impact.md'],
41
+ description: 'Package final release evidence, risk state, unverified items, and sign-off readiness.',
42
+ },
43
+ };
44
+ export function outputPolicyPath(projectDir = process.cwd(), scaleDir = '.scale') {
45
+ return join(projectDir, scaleDir, 'output-policy.json');
46
+ }
47
+ export function outputPolicyTemplate() {
48
+ return JSON.stringify(defaultHtmlArtifactPolicy(), null, 2) + '\n';
49
+ }
50
+ export function defaultHtmlArtifactPolicy() {
51
+ return {
52
+ version: 1,
53
+ sourceFormat: 'markdown',
54
+ artifactDirectory: 'artifacts',
55
+ manifestFile: 'artifact-manifest.json',
56
+ defaultTheme: 'auto',
57
+ defaultGitPolicy: 'review',
58
+ safety: {
59
+ allowRemoteScripts: false,
60
+ allowRemoteStyles: false,
61
+ detectSecrets: true,
62
+ },
63
+ templates: DEFAULT_TEMPLATE_SOURCES,
64
+ };
65
+ }
66
+ export function loadHtmlArtifactPolicy(projectDir = process.cwd(), scaleDir = '.scale') {
67
+ const defaults = defaultHtmlArtifactPolicy();
68
+ const path = outputPolicyPath(projectDir, scaleDir);
69
+ if (!existsSync(path))
70
+ return defaults;
71
+ try {
72
+ const parsed = JSON.parse(readFileSync(path, 'utf-8'));
73
+ return {
74
+ ...defaults,
75
+ ...parsed,
76
+ safety: {
77
+ ...defaults.safety,
78
+ ...(parsed.safety ?? {}),
79
+ },
80
+ templates: {
81
+ ...defaults.templates,
82
+ ...(parsed.templates ?? {}),
83
+ },
84
+ };
85
+ }
86
+ catch {
87
+ return defaults;
88
+ }
89
+ }
90
+ export function renderHtmlArtifact(options = {}) {
91
+ const projectDir = resolve(options.projectDir ?? process.cwd());
92
+ const scaleDir = options.scaleDir ?? '.scale';
93
+ const policy = loadHtmlArtifactPolicy(projectDir, scaleDir);
94
+ const type = normalizeHtmlArtifactType(options.type ?? 'release-report');
95
+ const taskDir = resolveTaskDir(projectDir, options.taskId, options.artifactDir);
96
+ const template = policy.templates[type] ?? DEFAULT_TEMPLATE_SOURCES[type];
97
+ const sourcePaths = normalizeSourcePaths(options.sourcePaths?.length ? options.sourcePaths : template.sources);
98
+ const sourceSections = readSourceSections(taskDir, sourcePaths);
99
+ const title = options.title ?? `${template.label} - ${options.taskId ?? basename(taskDir)}`;
100
+ const outputDir = join(taskDir, policy.artifactDirectory);
101
+ if (!existsSync(outputDir))
102
+ mkdirSync(outputDir, { recursive: true });
103
+ const outputPath = join(outputDir, `${type}.html`);
104
+ const renderer = new HTMLDocumentRenderer({
105
+ title,
106
+ theme: options.theme ?? policy.defaultTheme,
107
+ lang: options.lang ?? 'zh',
108
+ interactive: true,
109
+ printFriendly: true,
110
+ });
111
+ const sections = [
112
+ {
113
+ heading: 'Purpose',
114
+ content: renderPurposeSection(template, sourceSections),
115
+ },
116
+ ...sourceSections.present.map(section => ({
117
+ heading: section.heading,
118
+ content: markdownToHtml(section.content),
119
+ })),
120
+ ];
121
+ const html = renderer.renderReport({
122
+ type,
123
+ title,
124
+ timestamp: new Date().toISOString(),
125
+ metrics: {
126
+ sources: sourceSections.present.length,
127
+ missing: sourceSections.missing.length,
128
+ policy: policy.defaultGitPolicy,
129
+ },
130
+ sections,
131
+ });
132
+ writeFileSync(outputPath, html, 'utf-8');
133
+ const manifestPath = join(taskDir, policy.manifestFile);
134
+ const manifest = upsertManifestEntry({
135
+ manifestPath,
136
+ taskId: options.taskId,
137
+ artifactDirectory: policy.artifactDirectory,
138
+ entry: {
139
+ type,
140
+ title,
141
+ path: normalizePath(relative(projectDir, outputPath)),
142
+ sourcePaths: sourceSections.present.map(section => section.relativePath),
143
+ missingSources: sourceSections.missing,
144
+ gitPolicy: policy.defaultGitPolicy,
145
+ generatedAt: new Date().toISOString(),
146
+ renderer: 'scale-engine',
147
+ },
148
+ });
149
+ const indexPath = writeArtifactIndex(projectDir, taskDir, policy, manifest);
150
+ return {
151
+ ok: true,
152
+ type,
153
+ taskDir,
154
+ outputPath,
155
+ indexPath,
156
+ manifestPath,
157
+ sourcePaths: sourceSections.present.map(section => section.relativePath),
158
+ missingSources: sourceSections.missing,
159
+ };
160
+ }
161
+ export function doctorHtmlArtifacts(options = {}) {
162
+ const projectDir = resolve(options.projectDir ?? process.cwd());
163
+ const policy = loadHtmlArtifactPolicy(projectDir, options.scaleDir ?? '.scale');
164
+ const taskDir = resolveTaskDir(projectDir, options.taskId, options.artifactDir);
165
+ const manifestPath = join(taskDir, policy.manifestFile);
166
+ const findings = [];
167
+ const manifest = readManifest(manifestPath);
168
+ if (!manifest) {
169
+ findings.push({
170
+ severity: 'fail',
171
+ code: 'missing-manifest',
172
+ path: normalizePath(relative(projectDir, manifestPath)),
173
+ message: 'HTML artifact manifest is missing.',
174
+ fix: 'Run scale artifact render --task-id <task> --type release-report.',
175
+ });
176
+ return {
177
+ ok: false,
178
+ projectDir,
179
+ taskDir,
180
+ manifestPath,
181
+ findings,
182
+ artifacts: [],
183
+ };
184
+ }
185
+ const selectedType = options.type ? normalizeHtmlArtifactType(options.type) : undefined;
186
+ const artifacts = selectedType
187
+ ? manifest.artifacts.filter(artifact => artifact.type === selectedType)
188
+ : manifest.artifacts;
189
+ if (artifacts.length === 0) {
190
+ findings.push({
191
+ severity: 'fail',
192
+ code: 'missing-artifact-entry',
193
+ message: selectedType
194
+ ? `Manifest has no entry for ${selectedType}.`
195
+ : 'Manifest has no artifact entries.',
196
+ fix: 'Render the required HTML artifact before review or release.',
197
+ });
198
+ }
199
+ for (const artifact of artifacts) {
200
+ const absoluteArtifactPath = resolve(projectDir, artifact.path);
201
+ if (!existsSync(absoluteArtifactPath)) {
202
+ findings.push({
203
+ severity: 'fail',
204
+ code: 'missing-html-artifact',
205
+ path: artifact.path,
206
+ message: 'Manifest points to an HTML artifact that does not exist.',
207
+ fix: `Re-render ${artifact.type} or remove the stale manifest entry.`,
208
+ });
209
+ continue;
210
+ }
211
+ const html = readFileSync(absoluteArtifactPath, 'utf-8');
212
+ findings.push(...checkHtmlSafety(html, artifact.path, policy));
213
+ findings.push(...checkSourceFreshness(projectDir, absoluteArtifactPath, artifact));
214
+ }
215
+ return {
216
+ ok: !findings.some(finding => finding.severity === 'fail'),
217
+ projectDir,
218
+ taskDir,
219
+ manifestPath,
220
+ findings,
221
+ artifacts,
222
+ };
223
+ }
224
+ export function settleHtmlArtifacts(options = {}) {
225
+ const projectDir = resolve(options.projectDir ?? process.cwd());
226
+ const doctor = doctorHtmlArtifacts(options);
227
+ const taskDir = resolveTaskDir(projectDir, options.taskId, options.artifactDir);
228
+ if (!existsSync(taskDir))
229
+ mkdirSync(taskDir, { recursive: true });
230
+ const htmlImpactPath = join(taskDir, 'html-artifacts.md');
231
+ writeFileSync(htmlImpactPath, htmlArtifactSettlementMarkdown(options.taskId, doctor), 'utf-8');
232
+ return {
233
+ ok: doctor.ok,
234
+ taskId: options.taskId,
235
+ htmlImpactPath,
236
+ doctor,
237
+ };
238
+ }
239
+ export function resolveHtmlArtifactForOpen(options = {}) {
240
+ const projectDir = resolve(options.projectDir ?? process.cwd());
241
+ const policy = loadHtmlArtifactPolicy(projectDir, options.scaleDir ?? '.scale');
242
+ const taskDir = resolveTaskDir(projectDir, options.taskId, options.artifactDir);
243
+ const manifest = readManifest(join(taskDir, policy.manifestFile));
244
+ const selectedType = options.type ? normalizeHtmlArtifactType(options.type) : undefined;
245
+ const artifact = selectedType
246
+ ? manifest?.artifacts.find(item => item.type === selectedType)
247
+ : manifest?.artifacts[manifest.artifacts.length - 1];
248
+ if (artifact)
249
+ return resolve(projectDir, artifact.path);
250
+ const fallbackType = selectedType ?? 'release-report';
251
+ return join(taskDir, policy.artifactDirectory, `${fallbackType}.html`);
252
+ }
253
+ export function normalizeHtmlArtifactType(value) {
254
+ const normalized = value.trim().toLowerCase();
255
+ if (HTML_ARTIFACT_TYPES.includes(normalized))
256
+ return normalized;
257
+ if (normalized === 'plan')
258
+ return 'implementation-plan';
259
+ if (normalized === 'review')
260
+ return 'code-review';
261
+ if (normalized === 'status')
262
+ return 'status-report';
263
+ if (normalized === 'incident')
264
+ return 'incident-report';
265
+ if (normalized === 'release')
266
+ return 'release-report';
267
+ throw new Error(`Unknown HTML artifact type "${value}". Supported types: ${HTML_ARTIFACT_TYPES.join(', ')}`);
268
+ }
269
+ function resolveTaskDir(projectDir, taskId, artifactDir) {
270
+ if (artifactDir?.trim()) {
271
+ return isAbsolute(artifactDir)
272
+ ? artifactDir
273
+ : resolve(projectDir, artifactDir);
274
+ }
275
+ if (taskId?.trim()) {
276
+ return join(projectDir, 'docs', 'worklog', 'tasks', taskId.trim());
277
+ }
278
+ return projectDir;
279
+ }
280
+ function normalizeSourcePaths(sourcePaths) {
281
+ return sourcePaths
282
+ .map(item => normalizePath(item.trim()))
283
+ .filter(Boolean);
284
+ }
285
+ function readSourceSections(taskDir, sourcePaths) {
286
+ const present = [];
287
+ const missing = [];
288
+ for (const sourcePath of sourcePaths) {
289
+ const absolutePath = resolve(taskDir, sourcePath);
290
+ if (!absolutePath.startsWith(resolve(taskDir))) {
291
+ missing.push(sourcePath);
292
+ continue;
293
+ }
294
+ if (!existsSync(absolutePath)) {
295
+ missing.push(sourcePath);
296
+ continue;
297
+ }
298
+ present.push({
299
+ heading: sourceHeading(sourcePath),
300
+ relativePath: sourcePath,
301
+ content: readFileSync(absolutePath, 'utf-8'),
302
+ });
303
+ }
304
+ return { present, missing };
305
+ }
306
+ function renderPurposeSection(template, sections) {
307
+ const present = sections.present.length
308
+ ? `<ul>${sections.present.map(section => `<li><code>${escapeHtml(section.relativePath)}</code></li>`).join('')}</ul>`
309
+ : '<p>No source artifacts were found.</p>';
310
+ const missing = sections.missing.length
311
+ ? `<p class="doc-warning">Missing source artifacts: ${sections.missing.map(item => `<code>${escapeHtml(item)}</code>`).join(', ')}</p>`
312
+ : '<p>All configured source artifacts were found.</p>';
313
+ return `
314
+ <p>${escapeHtml(template.description)}</p>
315
+ <h3>Source Artifacts</h3>
316
+ ${present}
317
+ ${missing}
318
+ `;
319
+ }
320
+ function markdownToHtml(markdown) {
321
+ const lines = markdown.replace(/\r\n/g, '\n').split('\n');
322
+ const html = [];
323
+ let inCode = false;
324
+ let inList = false;
325
+ const closeList = () => {
326
+ if (inList) {
327
+ html.push('</ul>');
328
+ inList = false;
329
+ }
330
+ };
331
+ for (const rawLine of lines) {
332
+ const line = rawLine.replace(/\s+$/g, '');
333
+ if (/^```/.test(line.trim())) {
334
+ if (inCode) {
335
+ html.push('</code></pre>');
336
+ inCode = false;
337
+ }
338
+ else {
339
+ closeList();
340
+ html.push('<pre><code>');
341
+ inCode = true;
342
+ }
343
+ continue;
344
+ }
345
+ if (inCode) {
346
+ html.push(escapeHtml(rawLine) + '\n');
347
+ continue;
348
+ }
349
+ if (!line.trim()) {
350
+ closeList();
351
+ continue;
352
+ }
353
+ const heading = line.match(/^(#{1,6})\s+(.+)$/);
354
+ if (heading) {
355
+ closeList();
356
+ const level = Math.min(6, heading[1].length + 2);
357
+ html.push(`<h${level}>${inlineMarkdown(heading[2])}</h${level}>`);
358
+ continue;
359
+ }
360
+ const listItem = line.match(/^\s*[-*]\s+(.+)$/);
361
+ if (listItem) {
362
+ if (!inList) {
363
+ html.push('<ul>');
364
+ inList = true;
365
+ }
366
+ html.push(`<li>${inlineMarkdown(listItem[1])}</li>`);
367
+ continue;
368
+ }
369
+ closeList();
370
+ html.push(`<p>${inlineMarkdown(line)}</p>`);
371
+ }
372
+ closeList();
373
+ if (inCode)
374
+ html.push('</code></pre>');
375
+ return html.join('\n');
376
+ }
377
+ function inlineMarkdown(value) {
378
+ return escapeHtml(value)
379
+ .replace(/`([^`]+)`/g, '<code>$1</code>')
380
+ .replace(/\*\*([^*]+)\*\*/g, '<strong>$1</strong>');
381
+ }
382
+ function upsertManifestEntry(options) {
383
+ const existing = readManifest(options.manifestPath);
384
+ const artifacts = existing?.artifacts.filter(artifact => artifact.type !== options.entry.type) ?? [];
385
+ artifacts.push(options.entry);
386
+ const manifest = {
387
+ version: 1,
388
+ taskId: options.taskId ?? existing?.taskId,
389
+ generatedAt: new Date().toISOString(),
390
+ artifactDirectory: options.artifactDirectory,
391
+ artifacts,
392
+ };
393
+ const dir = dirname(options.manifestPath);
394
+ if (!existsSync(dir))
395
+ mkdirSync(dir, { recursive: true });
396
+ writeFileSync(options.manifestPath, JSON.stringify(manifest, null, 2) + '\n', 'utf-8');
397
+ return manifest;
398
+ }
399
+ function readManifest(path) {
400
+ if (!existsSync(path))
401
+ return undefined;
402
+ try {
403
+ const parsed = JSON.parse(readFileSync(path, 'utf-8'));
404
+ return {
405
+ version: parsed.version ?? 1,
406
+ taskId: parsed.taskId,
407
+ generatedAt: parsed.generatedAt ?? new Date(0).toISOString(),
408
+ artifactDirectory: parsed.artifactDirectory ?? 'artifacts',
409
+ artifacts: Array.isArray(parsed.artifacts) ? parsed.artifacts : [],
410
+ };
411
+ }
412
+ catch {
413
+ return undefined;
414
+ }
415
+ }
416
+ function writeArtifactIndex(projectDir, taskDir, policy, manifest) {
417
+ const outputDir = join(taskDir, policy.artifactDirectory);
418
+ if (!existsSync(outputDir))
419
+ mkdirSync(outputDir, { recursive: true });
420
+ const indexPath = join(outputDir, 'index.html');
421
+ const renderer = new HTMLDocumentRenderer({
422
+ title: `HTML Artifacts - ${manifest.taskId ?? basename(taskDir)}`,
423
+ theme: policy.defaultTheme,
424
+ lang: 'zh',
425
+ interactive: false,
426
+ printFriendly: true,
427
+ });
428
+ const rows = manifest.artifacts.map(artifact => {
429
+ const href = basename(artifact.path);
430
+ return `<tr>
431
+ <td><a href="${escapeAttribute(href)}">${escapeHtml(artifact.type)}</a></td>
432
+ <td>${escapeHtml(artifact.title)}</td>
433
+ <td>${escapeHtml(artifact.gitPolicy)}</td>
434
+ <td>${escapeHtml(artifact.generatedAt)}</td>
435
+ <td>${artifact.missingSources.length ? artifact.missingSources.map(item => `<code>${escapeHtml(item)}</code>`).join(', ') : 'none'}</td>
436
+ </tr>`;
437
+ }).join('\n');
438
+ const html = renderer.renderReport({
439
+ type: 'html-artifacts',
440
+ title: `HTML Artifacts - ${manifest.taskId ?? basename(taskDir)}`,
441
+ timestamp: new Date().toISOString(),
442
+ metrics: {
443
+ artifacts: manifest.artifacts.length,
444
+ policy: policy.defaultGitPolicy,
445
+ },
446
+ sections: [{
447
+ heading: 'Artifact Index',
448
+ content: `<table>
449
+ <thead><tr><th>Type</th><th>Title</th><th>Git Policy</th><th>Generated</th><th>Missing Sources</th></tr></thead>
450
+ <tbody>${rows}</tbody>
451
+ </table>`,
452
+ }],
453
+ });
454
+ writeFileSync(indexPath, html, 'utf-8');
455
+ return indexPath;
456
+ }
457
+ function checkHtmlSafety(html, path, policy) {
458
+ const findings = [];
459
+ if (!policy.safety.allowRemoteScripts && /<script\b[^>]*\bsrc=["']https?:/i.test(html)) {
460
+ findings.push({
461
+ severity: 'fail',
462
+ code: 'remote-script',
463
+ path,
464
+ message: 'HTML artifact references a remote script.',
465
+ fix: 'Use self-contained HTML or a reviewed local asset.',
466
+ });
467
+ }
468
+ if (!policy.safety.allowRemoteStyles && (/<link\b[^>]*\bhref=["']https?:/i.test(html) || /@import\s+url\(["']?https?:/i.test(html))) {
469
+ findings.push({
470
+ severity: 'fail',
471
+ code: 'remote-style',
472
+ path,
473
+ message: 'HTML artifact references a remote stylesheet.',
474
+ fix: 'Inline safe CSS or use a reviewed local asset.',
475
+ });
476
+ }
477
+ if (policy.safety.detectSecrets && containsSecretLikeValue(html)) {
478
+ findings.push({
479
+ severity: 'fail',
480
+ code: 'secret-like-content',
481
+ path,
482
+ message: 'HTML artifact appears to contain a credential-like value.',
483
+ fix: 'Regenerate after redacting tokens, cookies, credentials, and API keys from the source artifacts.',
484
+ });
485
+ }
486
+ return findings;
487
+ }
488
+ function checkSourceFreshness(projectDir, htmlPath, artifact) {
489
+ const findings = [];
490
+ const htmlMtime = statSync(htmlPath).mtime.getTime();
491
+ const taskDir = dirname(dirname(htmlPath));
492
+ for (const sourcePath of artifact.sourcePaths) {
493
+ const absoluteSourcePath = resolve(taskDir, sourcePath);
494
+ if (!absoluteSourcePath.startsWith(taskDir) || !existsSync(absoluteSourcePath)) {
495
+ findings.push({
496
+ severity: 'warn',
497
+ code: 'missing-source',
498
+ path: sourcePath,
499
+ message: `Source artifact for ${artifact.type} is missing.`,
500
+ fix: 'Restore the source Markdown artifact or re-render with an explicit --source list.',
501
+ });
502
+ continue;
503
+ }
504
+ if (statSync(absoluteSourcePath).mtime.getTime() > htmlMtime) {
505
+ findings.push({
506
+ severity: 'warn',
507
+ code: 'stale-html-artifact',
508
+ path: normalizePath(relative(projectDir, htmlPath)),
509
+ message: `${artifact.type} is older than source ${sourcePath}.`,
510
+ fix: `Run scale artifact render --type ${artifact.type} for this task.`,
511
+ });
512
+ }
513
+ }
514
+ return findings;
515
+ }
516
+ function htmlArtifactSettlementMarkdown(taskId, doctor) {
517
+ const findings = doctor.findings.length
518
+ ? doctor.findings.map(finding => `| ${finding.severity.toUpperCase()} | ${finding.code} | ${escapeCell(finding.path ?? '')} | ${escapeCell(finding.message)} |`).join('\n')
519
+ : '| OK | no-findings | | No HTML artifact findings. |';
520
+ const artifacts = doctor.artifacts.length
521
+ ? doctor.artifacts.map(artifact => `| ${artifact.type} | ${escapeCell(artifact.path)} | ${artifact.sourcePaths.length} | ${artifact.missingSources.length} | ${artifact.gitPolicy} |`).join('\n')
522
+ : '| none | | 0 | 0 | |';
523
+ return `# HTML Artifacts
524
+
525
+ Task: ${taskId ?? 'unspecified'}
526
+ Status: ${doctor.ok ? 'passed' : 'blocked'}
527
+ Generated: ${new Date().toISOString()}
528
+
529
+ ## Artifacts
530
+
531
+ | Type | Path | Sources | Missing | Git policy |
532
+ | --- | --- | ---: | ---: | --- |
533
+ ${artifacts}
534
+
535
+ ## Findings
536
+
537
+ | Severity | Code | Path | Message |
538
+ | --- | --- | --- | --- |
539
+ ${findings}
540
+ `;
541
+ }
542
+ function sourceHeading(path) {
543
+ return path.replace(/[/\\]/g, ' / ').replace(/\.md$/i, '');
544
+ }
545
+ function containsSecretLikeValue(text) {
546
+ return /(authorization\s*:\s*bearer\s+)[A-Za-z0-9._-]{16,}/i.test(text)
547
+ || /\b(password|passwd|pwd|token|secret|credential|api[_-]?key|private[_-]?key)\s*[:=]\s*["']?[A-Za-z0-9._/-]{16,}/i.test(text);
548
+ }
549
+ function escapeCell(value) {
550
+ return value.replace(/\|/g, '\\|').replace(/\r?\n/g, ' ');
551
+ }
552
+ function escapeAttribute(value) {
553
+ return escapeHtml(value).replace(/'/g, '&#39;');
554
+ }
555
+ function escapeHtml(value) {
556
+ return value
557
+ .replace(/&/g, '&amp;')
558
+ .replace(/</g, '&lt;')
559
+ .replace(/>/g, '&gt;')
560
+ .replace(/"/g, '&quot;');
561
+ }
562
+ function normalizePath(path) {
563
+ return path.split(/[/\\]+/).filter(Boolean).join('/');
564
+ }
565
+ export function listExistingHtmlArtifacts(options = {}) {
566
+ const projectDir = resolve(options.projectDir ?? process.cwd());
567
+ const policy = loadHtmlArtifactPolicy(projectDir, options.scaleDir ?? '.scale');
568
+ const taskDir = resolveTaskDir(projectDir, options.taskId, options.artifactDir);
569
+ const outputDir = join(taskDir, policy.artifactDirectory);
570
+ if (!existsSync(outputDir))
571
+ return [];
572
+ return readdirSync(outputDir)
573
+ .filter(file => file.endsWith('.html'))
574
+ .map(file => normalizePath(relative(projectDir, join(outputDir, file))));
575
+ }
576
+ //# sourceMappingURL=HTMLArtifactLayer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HTMLArtifactLayer.js","sourceRoot":"","sources":["../../src/output/HTMLArtifactLayer.ts"],"names":[],"mappings":"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"}
@@ -4,3 +4,5 @@ export { BrandThemeLoader } from './BrandThemeLoader.js';
4
4
  export type { BrandTheme, BrandColors, BrandTypography, BrandSpacing, BrandShadows, } from './BrandThemeLoader.js';
5
5
  export { UIPrototypeRenderer } from './UIPrototypeRenderer.js';
6
6
  export type { PageSpec, ComponentSpec, NavItem, DashboardLayout, DashboardWidget, UIPrototypeOptions, } from './UIPrototypeRenderer.js';
7
+ export { HTML_ARTIFACT_TYPES, defaultHtmlArtifactPolicy, doctorHtmlArtifacts, listExistingHtmlArtifacts, loadHtmlArtifactPolicy, normalizeHtmlArtifactType, outputPolicyPath, outputPolicyTemplate, renderHtmlArtifact, resolveHtmlArtifactForOpen, settleHtmlArtifacts, } from './HTMLArtifactLayer.js';
8
+ export type { HtmlArtifactDoctorReport, HtmlArtifactFinding, HtmlArtifactManifest, HtmlArtifactManifestEntry, HtmlArtifactPolicy, HtmlArtifactPolicyTemplate, HtmlArtifactType, RenderHtmlArtifactOptions, RenderHtmlArtifactResult, SettleHtmlArtifactsOptions, SettleHtmlArtifactsReport, } from './HTMLArtifactLayer.js';
@@ -3,4 +3,5 @@
3
3
  export { HTMLDocumentRenderer } from './HTMLDocumentRenderer.js';
4
4
  export { BrandThemeLoader } from './BrandThemeLoader.js';
5
5
  export { UIPrototypeRenderer } from './UIPrototypeRenderer.js';
6
+ export { HTML_ARTIFACT_TYPES, defaultHtmlArtifactPolicy, doctorHtmlArtifacts, listExistingHtmlArtifacts, loadHtmlArtifactPolicy, normalizeHtmlArtifactType, outputPolicyPath, outputPolicyTemplate, renderHtmlArtifact, resolveHtmlArtifactForOpen, settleHtmlArtifacts, } from './HTMLArtifactLayer.js';
6
7
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/output/index.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,sEAAsE;AAEtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAA;AAYhE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AASxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/output/index.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,sEAAsE;AAEtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAA;AAYhE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AASxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAU9D,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EACzB,mBAAmB,EACnB,yBAAyB,EACzB,sBAAsB,EACtB,yBAAyB,EACzB,gBAAgB,EAChB,oBAAoB,EACpB,kBAAkB,EAClB,0BAA0B,EAC1B,mBAAmB,GACpB,MAAM,wBAAwB,CAAA"}