scene-capability-engine 3.0.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.
- package/CHANGELOG.md +2513 -0
- package/LICENSE +21 -0
- package/README.md +765 -0
- package/README.zh.md +630 -0
- package/bin/kiro-spec-engine.js +796 -0
- package/bin/kse.js +3 -0
- package/bin/sce.js +3 -0
- package/bin/sco.js +3 -0
- package/docs/331-poc-adaptation-roadmap.md +156 -0
- package/docs/331-poc-dual-track-integration-guide.md +120 -0
- package/docs/331-poc-weekly-delivery-checklist.md +52 -0
- package/docs/OFFLINE_INSTALL.md +96 -0
- package/docs/README.md +279 -0
- package/docs/adopt-migration-guide.md +599 -0
- package/docs/adoption-guide.md +616 -0
- package/docs/agent-hooks-analysis.md +815 -0
- package/docs/architecture.md +733 -0
- package/docs/articles/ai-driven-development-philosophy-and-practice-review.md +208 -0
- package/docs/articles/ai-driven-development-philosophy-and-practice.en.md +459 -0
- package/docs/articles/ai-driven-development-philosophy-and-practice.md +492 -0
- package/docs/autonomous-control-guide.md +851 -0
- package/docs/command-reference.md +1368 -0
- package/docs/community.md +115 -0
- package/docs/cross-tool-guide.md +555 -0
- package/docs/developer-guide.md +619 -0
- package/docs/document-governance.md +865 -0
- package/docs/environment-management-guide.md +526 -0
- package/docs/examples/add-export-command/design.md +194 -0
- package/docs/examples/add-export-command/requirements.md +110 -0
- package/docs/examples/add-export-command/tasks.md +88 -0
- package/docs/examples/add-rest-api/design.md +855 -0
- package/docs/examples/add-rest-api/requirements.md +323 -0
- package/docs/examples/add-rest-api/tasks.md +355 -0
- package/docs/examples/add-user-dashboard/design.md +192 -0
- package/docs/examples/add-user-dashboard/requirements.md +143 -0
- package/docs/examples/add-user-dashboard/tasks.md +91 -0
- package/docs/faq.md +697 -0
- package/docs/handoffs/evidence/ontology/moqui-template-baseline-2026-02-17-232922.json +156 -0
- package/docs/handoffs/evidence/ontology/moqui-template-baseline-2026-02-17-232922.md +24 -0
- package/docs/images/wechat-qr.png +0 -0
- package/docs/integration-modes.md +529 -0
- package/docs/integration-philosophy.md +313 -0
- package/docs/knowledge-management-guide.md +263 -0
- package/docs/manual-workflows-guide.md +418 -0
- package/docs/moqui-capability-matrix.md +73 -0
- package/docs/moqui-template-core-library-playbook.md +109 -0
- package/docs/multi-agent-coordination-guide.md +553 -0
- package/docs/multi-repo-management-guide.md +1344 -0
- package/docs/quick-start-with-ai-tools.md +375 -0
- package/docs/quick-start.md +146 -0
- package/docs/release-checklist.md +121 -0
- package/docs/releases/README.md +13 -0
- package/docs/releases/v1.46.2-validation.md +45 -0
- package/docs/releases/v1.46.2.md +50 -0
- package/docs/scene-runtime-guide.md +347 -0
- package/docs/spec-collaboration-guide.md +369 -0
- package/docs/spec-locking-guide.md +225 -0
- package/docs/spec-numbering-guide.md +348 -0
- package/docs/spec-workflow.md +519 -0
- package/docs/steering-strategy-guide.md +196 -0
- package/docs/team-collaboration-guide.md +465 -0
- package/docs/testing-strategy.md +272 -0
- package/docs/tools/claude-guide.md +654 -0
- package/docs/tools/cursor-guide.md +706 -0
- package/docs/tools/generic-guide.md +446 -0
- package/docs/tools/kiro-guide.md +308 -0
- package/docs/tools/vscode-guide.md +445 -0
- package/docs/tools/windsurf-guide.md +391 -0
- package/docs/troubleshooting.md +1135 -0
- package/docs/upgrade-guide.md +639 -0
- package/docs/value-observability-guide.md +127 -0
- package/docs/zh/README.md +341 -0
- package/docs/zh/quick-start.md +764 -0
- package/docs/zh/release-checklist.md +121 -0
- package/docs/zh/releases/README.md +13 -0
- package/docs/zh/releases/v1.46.2-validation.md +45 -0
- package/docs/zh/releases/v1.46.2.md +50 -0
- package/docs/zh/spec-numbering-guide.md +348 -0
- package/docs/zh/tools/claude-guide.md +349 -0
- package/docs/zh/tools/cursor-guide.md +281 -0
- package/docs/zh/tools/generic-guide.md +499 -0
- package/docs/zh/tools/kiro-guide.md +342 -0
- package/docs/zh/tools/vscode-guide.md +449 -0
- package/docs/zh/tools/windsurf-guide.md +378 -0
- package/docs/zh/value-observability-guide.md +127 -0
- package/docs//344/272/244/344/273/230/346/270/205/345/215/225.md +75 -0
- package/lib/adoption/adoption-logger.js +487 -0
- package/lib/adoption/adoption-strategy.js +538 -0
- package/lib/adoption/backup-manager.js +420 -0
- package/lib/adoption/conflict-resolver.js +410 -0
- package/lib/adoption/detection-engine.js +275 -0
- package/lib/adoption/diff-viewer.js +226 -0
- package/lib/adoption/error-formatter.js +509 -0
- package/lib/adoption/file-classifier.js +385 -0
- package/lib/adoption/progress-reporter.js +534 -0
- package/lib/adoption/smart-orchestrator.js +470 -0
- package/lib/adoption/strategy-selector.js +218 -0
- package/lib/adoption/summary-generator.js +493 -0
- package/lib/adoption/template-sync.js +605 -0
- package/lib/auto/autonomous-engine.js +485 -0
- package/lib/auto/checkpoint-manager.js +300 -0
- package/lib/auto/close-loop-runner.js +2476 -0
- package/lib/auto/config-schema.js +176 -0
- package/lib/auto/decision-engine.js +344 -0
- package/lib/auto/error-recovery-manager.js +580 -0
- package/lib/auto/goal-decomposer.js +278 -0
- package/lib/auto/progress-tracker.js +502 -0
- package/lib/auto/safety-manager.js +186 -0
- package/lib/auto/semantic-decomposer.js +137 -0
- package/lib/auto/state-manager.js +126 -0
- package/lib/auto/task-queue-manager.js +340 -0
- package/lib/backup/backup-system.js +372 -0
- package/lib/backup/selective-backup.js +207 -0
- package/lib/collab/agent-registry.js +240 -0
- package/lib/collab/collab-manager.js +285 -0
- package/lib/collab/contract-manager.js +320 -0
- package/lib/collab/coordinator.js +370 -0
- package/lib/collab/dependency-manager.js +280 -0
- package/lib/collab/index.js +20 -0
- package/lib/collab/integration-manager.js +202 -0
- package/lib/collab/merge-coordinator.js +252 -0
- package/lib/collab/metadata-manager.js +233 -0
- package/lib/collab/multi-agent-config.js +120 -0
- package/lib/collab/spec-lifecycle-manager.js +304 -0
- package/lib/collab/sync-barrier.js +88 -0
- package/lib/collab/visualizer.js +208 -0
- package/lib/commands/adopt.js +749 -0
- package/lib/commands/auto.js +19559 -0
- package/lib/commands/collab.js +275 -0
- package/lib/commands/context.js +99 -0
- package/lib/commands/docs.js +808 -0
- package/lib/commands/doctor.js +273 -0
- package/lib/commands/env.js +420 -0
- package/lib/commands/knowledge.js +309 -0
- package/lib/commands/lock.js +235 -0
- package/lib/commands/ops.js +409 -0
- package/lib/commands/orchestrate.js +446 -0
- package/lib/commands/prompt.js +105 -0
- package/lib/commands/repo.js +118 -0
- package/lib/commands/rollback.js +219 -0
- package/lib/commands/scene.js +15549 -0
- package/lib/commands/spec-bootstrap.js +147 -0
- package/lib/commands/spec-gate.js +157 -0
- package/lib/commands/spec-pipeline.js +205 -0
- package/lib/commands/status.js +321 -0
- package/lib/commands/task.js +199 -0
- package/lib/commands/templates.js +654 -0
- package/lib/commands/upgrade.js +231 -0
- package/lib/commands/value.js +569 -0
- package/lib/commands/watch.js +684 -0
- package/lib/commands/workflows.js +240 -0
- package/lib/commands/workspace-multi.js +325 -0
- package/lib/commands/workspace.js +189 -0
- package/lib/context/context-exporter.js +378 -0
- package/lib/context/prompt-generator.js +482 -0
- package/lib/data/moqui-capability-lexicon.json +45 -0
- package/lib/environment/backup-system.js +189 -0
- package/lib/environment/environment-manager.js +379 -0
- package/lib/environment/environment-registry.js +168 -0
- package/lib/gitignore/gitignore-backup.js +229 -0
- package/lib/gitignore/gitignore-detector.js +239 -0
- package/lib/gitignore/gitignore-integration.js +267 -0
- package/lib/gitignore/gitignore-transformer.js +193 -0
- package/lib/gitignore/layered-rules-template.js +42 -0
- package/lib/governance/archive-tool.js +284 -0
- package/lib/governance/cleanup-tool.js +237 -0
- package/lib/governance/config-manager.js +186 -0
- package/lib/governance/diagnostic-engine.js +271 -0
- package/lib/governance/doc-reference-checker.js +200 -0
- package/lib/governance/execution-logger.js +243 -0
- package/lib/governance/file-scanner.js +285 -0
- package/lib/governance/hooks-manager.js +333 -0
- package/lib/governance/reporter.js +337 -0
- package/lib/governance/validation-engine.js +181 -0
- package/lib/i18n.js +79 -0
- package/lib/knowledge/entry-manager.js +208 -0
- package/lib/knowledge/index-manager.js +261 -0
- package/lib/knowledge/knowledge-manager.js +273 -0
- package/lib/knowledge/template-manager.js +191 -0
- package/lib/lock/index.js +21 -0
- package/lib/lock/lock-file.js +192 -0
- package/lib/lock/lock-manager.js +321 -0
- package/lib/lock/machine-identifier.js +135 -0
- package/lib/lock/steering-file-lock.js +207 -0
- package/lib/lock/task-lock-manager.js +345 -0
- package/lib/operations/audit-logger.js +293 -0
- package/lib/operations/feedback-manager.js +1147 -0
- package/lib/operations/index.js +23 -0
- package/lib/operations/models/index.js +170 -0
- package/lib/operations/operations-manager.js +151 -0
- package/lib/operations/operations-validator.js +280 -0
- package/lib/operations/permission-manager.js +354 -0
- package/lib/operations/template-loader.js +143 -0
- package/lib/orchestrator/agent-spawner.js +629 -0
- package/lib/orchestrator/bootstrap-prompt-builder.js +236 -0
- package/lib/orchestrator/index.js +19 -0
- package/lib/orchestrator/orchestration-engine.js +1270 -0
- package/lib/orchestrator/orchestrator-config.js +173 -0
- package/lib/orchestrator/status-monitor.js +591 -0
- package/lib/python-checker.js +209 -0
- package/lib/repo/config-manager.js +580 -0
- package/lib/repo/errors/config-error.js +13 -0
- package/lib/repo/errors/git-error.js +15 -0
- package/lib/repo/errors/repo-error.js +14 -0
- package/lib/repo/git-operations.js +181 -0
- package/lib/repo/handlers/.gitkeep +1 -0
- package/lib/repo/handlers/exec-handler.js +155 -0
- package/lib/repo/handlers/health-handler.js +169 -0
- package/lib/repo/handlers/init-handler.js +197 -0
- package/lib/repo/handlers/status-handler.js +176 -0
- package/lib/repo/output-formatter.js +184 -0
- package/lib/repo/path-resolver.js +178 -0
- package/lib/repo/repo-manager.js +514 -0
- package/lib/scene-runtime/audit-emitter.js +59 -0
- package/lib/scene-runtime/binding-plugin-loader.js +351 -0
- package/lib/scene-runtime/binding-registry.js +349 -0
- package/lib/scene-runtime/eval-bridge.js +44 -0
- package/lib/scene-runtime/index.js +19 -0
- package/lib/scene-runtime/moqui-adapter.js +620 -0
- package/lib/scene-runtime/moqui-client.js +606 -0
- package/lib/scene-runtime/moqui-extractor.js +2029 -0
- package/lib/scene-runtime/plan-compiler.js +208 -0
- package/lib/scene-runtime/policy-gate.js +58 -0
- package/lib/scene-runtime/runtime-executor.js +358 -0
- package/lib/scene-runtime/scene-loader.js +96 -0
- package/lib/scene-runtime/scene-ontology.js +959 -0
- package/lib/scene-runtime/scene-template-linter.js +852 -0
- package/lib/scene-runtime/templates/scene-template-erp-query-v0.1.yaml +28 -0
- package/lib/scene-runtime/templates/scene-template-hybrid-shadow-v0.1.yaml +34 -0
- package/lib/spec/bootstrap/context-collector.js +48 -0
- package/lib/spec/bootstrap/draft-generator.js +158 -0
- package/lib/spec/bootstrap/questionnaire-engine.js +70 -0
- package/lib/spec/bootstrap/trace-emitter.js +59 -0
- package/lib/spec/multi-spec-orchestrate.js +93 -0
- package/lib/spec/pipeline/constants.js +6 -0
- package/lib/spec/pipeline/stage-adapters.js +118 -0
- package/lib/spec/pipeline/stage-runner.js +146 -0
- package/lib/spec/pipeline/state-store.js +119 -0
- package/lib/spec-gate/engine/gate-engine.js +165 -0
- package/lib/spec-gate/policy/default-policy.js +22 -0
- package/lib/spec-gate/policy/policy-loader.js +103 -0
- package/lib/spec-gate/result-emitter.js +81 -0
- package/lib/spec-gate/rules/default-rules.js +156 -0
- package/lib/spec-gate/rules/rule-registry.js +51 -0
- package/lib/steering/adoption-config.js +164 -0
- package/lib/steering/compliance-auto-fixer.js +204 -0
- package/lib/steering/compliance-cache.js +99 -0
- package/lib/steering/compliance-error-reporter.js +70 -0
- package/lib/steering/context-sync-manager.js +273 -0
- package/lib/steering/index.js +92 -0
- package/lib/steering/spec-steering.js +230 -0
- package/lib/steering/steering-compliance-checker.js +73 -0
- package/lib/steering/steering-loader.js +144 -0
- package/lib/steering/steering-manager.js +289 -0
- package/lib/task/index.js +12 -0
- package/lib/task/task-claimer.js +489 -0
- package/lib/task/task-status-store.js +418 -0
- package/lib/templates/cache-manager.js +440 -0
- package/lib/templates/content-generalizer.js +247 -0
- package/lib/templates/frontmatter-generator.js +128 -0
- package/lib/templates/git-handler.js +471 -0
- package/lib/templates/metadata-collector.js +328 -0
- package/lib/templates/path-utils.js +144 -0
- package/lib/templates/registry-parser.js +505 -0
- package/lib/templates/spec-reader.js +216 -0
- package/lib/templates/template-applicator.js +249 -0
- package/lib/templates/template-creator.js +256 -0
- package/lib/templates/template-error.js +143 -0
- package/lib/templates/template-exporter.js +502 -0
- package/lib/templates/template-manager.js +782 -0
- package/lib/templates/template-validator.js +361 -0
- package/lib/upgrade/migration-engine.js +382 -0
- package/lib/upgrade/migrations/.gitkeep +52 -0
- package/lib/upgrade/migrations/1.0.0-to-1.1.0.js +78 -0
- package/lib/utils/file-diff.js +177 -0
- package/lib/utils/fs-utils.js +274 -0
- package/lib/utils/tool-detector.js +383 -0
- package/lib/utils/validation.js +324 -0
- package/lib/value/gate-summary-emitter.js +99 -0
- package/lib/value/metric-contract-loader.js +210 -0
- package/lib/value/risk-evaluator.js +117 -0
- package/lib/value/weekly-snapshot-builder.js +61 -0
- package/lib/version/version-checker.js +156 -0
- package/lib/version/version-manager.js +327 -0
- package/lib/watch/action-executor.js +458 -0
- package/lib/watch/event-debouncer.js +323 -0
- package/lib/watch/execution-logger.js +550 -0
- package/lib/watch/file-watcher.js +499 -0
- package/lib/watch/presets.js +266 -0
- package/lib/watch/watch-manager.js +533 -0
- package/lib/workspace/multi/global-config.js +150 -0
- package/lib/workspace/multi/index.js +22 -0
- package/lib/workspace/multi/path-utils.js +173 -0
- package/lib/workspace/multi/workspace-context-resolver.js +244 -0
- package/lib/workspace/multi/workspace-registry.js +196 -0
- package/lib/workspace/multi/workspace-state-manager.js +537 -0
- package/lib/workspace/multi/workspace.js +90 -0
- package/lib/workspace/workspace-manager.js +370 -0
- package/lib/workspace/workspace-sync.js +356 -0
- package/locales/en.json +114 -0
- package/locales/zh.json +114 -0
- package/package.json +102 -0
- package/template/.kiro/README.md +247 -0
- package/template/.kiro/hooks/check-spec-on-create.kiro.hook +17 -0
- package/template/.kiro/hooks/run-tests-on-save.kiro.hook +13 -0
- package/template/.kiro/hooks/sync-tasks-on-edit.kiro.hook +16 -0
- package/template/.kiro/specs/SPEC_WORKFLOW_GUIDE.md +134 -0
- package/template/.kiro/steering/CORE_PRINCIPLES.md +133 -0
- package/template/.kiro/steering/CURRENT_CONTEXT.md +30 -0
- package/template/.kiro/steering/ENVIRONMENT.md +35 -0
- package/template/.kiro/steering/RULES_GUIDE.md +46 -0
- package/template/.kiro/templates/operations/default/change-impact.md +112 -0
- package/template/.kiro/templates/operations/default/deployment.md +91 -0
- package/template/.kiro/templates/operations/default/feedback-response.md +269 -0
- package/template/.kiro/templates/operations/default/migration-plan.md +172 -0
- package/template/.kiro/templates/operations/default/monitoring.md +135 -0
- package/template/.kiro/templates/operations/default/operations.md +135 -0
- package/template/.kiro/templates/operations/default/rollback.md +143 -0
- package/template/.kiro/templates/operations/default/tools.yaml +364 -0
- package/template/.kiro/templates/operations/default/troubleshooting.md +123 -0
- package/template/.kiro/tools/backup_manager.py +295 -0
- package/template/.kiro/tools/configuration_manager.py +218 -0
- package/template/.kiro/tools/document_evaluator.py +550 -0
- package/template/.kiro/tools/enhancement_logger.py +168 -0
- package/template/.kiro/tools/error_handler.py +335 -0
- package/template/.kiro/tools/improvement_identifier.py +444 -0
- package/template/.kiro/tools/modification_applicator.py +737 -0
- package/template/.kiro/tools/quality_gate_enforcer.py +207 -0
- package/template/.kiro/tools/quality_scorer.py +305 -0
- package/template/.kiro/tools/report_generator.py +154 -0
- package/template/.kiro/tools/ultrawork_enhancer.py +676 -0
- package/template/.kiro/tools/ultrawork_enhancer_refactored.py +0 -0
- package/template/.kiro/tools/ultrawork_enhancer_v2.py +463 -0
- package/template/.kiro/tools/ultrawork_enhancer_v3.py +606 -0
- package/template/.kiro/tools/workflow_quality_gate.py +100 -0
- package/template/README.md +111 -0
|
@@ -0,0 +1,502 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TemplateExporter - Exports template package to directory
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
const fs = require('fs').promises;
|
|
6
|
+
const path = require('path');
|
|
7
|
+
|
|
8
|
+
class TemplateExporter {
|
|
9
|
+
constructor() {
|
|
10
|
+
this.defaultOutputDir = '.kiro/templates/exports';
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Exports template package
|
|
15
|
+
* @param {Object} templateData - Template data
|
|
16
|
+
* @param {string} outputDir - Output directory
|
|
17
|
+
* @returns {Promise<Object>} Export result
|
|
18
|
+
*/
|
|
19
|
+
async exportTemplate(templateData, outputDir) {
|
|
20
|
+
const { metadata, files, validationResult } = templateData;
|
|
21
|
+
const templateDir = outputDir || path.join(this.defaultOutputDir, metadata.name);
|
|
22
|
+
|
|
23
|
+
try {
|
|
24
|
+
// Create output directory
|
|
25
|
+
await this.createOutputDirectory(templateDir);
|
|
26
|
+
|
|
27
|
+
// Write template files
|
|
28
|
+
const writtenFiles = await this.writeTemplateFiles(files, templateDir);
|
|
29
|
+
|
|
30
|
+
// Generate registry entry
|
|
31
|
+
const registryEntry = this.generateRegistryEntry(metadata);
|
|
32
|
+
await fs.writeFile(
|
|
33
|
+
path.join(templateDir, 'template-registry.json'),
|
|
34
|
+
JSON.stringify(registryEntry, null, 2),
|
|
35
|
+
'utf-8'
|
|
36
|
+
);
|
|
37
|
+
writtenFiles.push('template-registry.json');
|
|
38
|
+
|
|
39
|
+
// Generate documentation files
|
|
40
|
+
const submissionGuide = this.generateSubmissionGuide(metadata);
|
|
41
|
+
await fs.writeFile(
|
|
42
|
+
path.join(templateDir, 'SUBMISSION_GUIDE.md'),
|
|
43
|
+
submissionGuide,
|
|
44
|
+
'utf-8'
|
|
45
|
+
);
|
|
46
|
+
writtenFiles.push('SUBMISSION_GUIDE.md');
|
|
47
|
+
|
|
48
|
+
const prDescription = this.generatePRDescription(metadata);
|
|
49
|
+
await fs.writeFile(
|
|
50
|
+
path.join(templateDir, 'PR_DESCRIPTION.md'),
|
|
51
|
+
prDescription,
|
|
52
|
+
'utf-8'
|
|
53
|
+
);
|
|
54
|
+
writtenFiles.push('PR_DESCRIPTION.md');
|
|
55
|
+
|
|
56
|
+
const reviewChecklist = this.generateReviewChecklist(validationResult);
|
|
57
|
+
await fs.writeFile(
|
|
58
|
+
path.join(templateDir, 'REVIEW_CHECKLIST.md'),
|
|
59
|
+
reviewChecklist,
|
|
60
|
+
'utf-8'
|
|
61
|
+
);
|
|
62
|
+
writtenFiles.push('REVIEW_CHECKLIST.md');
|
|
63
|
+
|
|
64
|
+
const usageExample = this.generateUsageExample(metadata);
|
|
65
|
+
await fs.writeFile(
|
|
66
|
+
path.join(templateDir, 'USAGE_EXAMPLE.md'),
|
|
67
|
+
usageExample,
|
|
68
|
+
'utf-8'
|
|
69
|
+
);
|
|
70
|
+
writtenFiles.push('USAGE_EXAMPLE.md');
|
|
71
|
+
|
|
72
|
+
// Log creation
|
|
73
|
+
await this.logCreation(templateDir, templateData);
|
|
74
|
+
writtenFiles.push('creation.log');
|
|
75
|
+
|
|
76
|
+
return {
|
|
77
|
+
success: true,
|
|
78
|
+
outputDir: templateDir,
|
|
79
|
+
filesCreated: writtenFiles,
|
|
80
|
+
validation: validationResult,
|
|
81
|
+
metadata
|
|
82
|
+
};
|
|
83
|
+
} catch (error) {
|
|
84
|
+
// Cleanup on failure
|
|
85
|
+
try {
|
|
86
|
+
await fs.rm(templateDir, { recursive: true, force: true });
|
|
87
|
+
} catch {
|
|
88
|
+
// Ignore cleanup errors
|
|
89
|
+
}
|
|
90
|
+
throw new Error(`Export failed: ${error.message}`);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Creates output directory structure
|
|
96
|
+
* @param {string} outputDir - Output directory
|
|
97
|
+
* @returns {Promise<void>}
|
|
98
|
+
*/
|
|
99
|
+
async createOutputDirectory(outputDir) {
|
|
100
|
+
try {
|
|
101
|
+
await fs.access(outputDir);
|
|
102
|
+
// Directory exists, ask user (for now, just overwrite)
|
|
103
|
+
await fs.rm(outputDir, { recursive: true, force: true });
|
|
104
|
+
} catch {
|
|
105
|
+
// Directory doesn't exist, that's fine
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
await fs.mkdir(outputDir, { recursive: true });
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Writes template files
|
|
113
|
+
* @param {Object} fileContents - File contents
|
|
114
|
+
* @param {string} outputDir - Output directory
|
|
115
|
+
* @returns {Promise<Array>} Written files
|
|
116
|
+
*/
|
|
117
|
+
async writeTemplateFiles(fileContents, outputDir) {
|
|
118
|
+
const writtenFiles = [];
|
|
119
|
+
|
|
120
|
+
for (const [filename, content] of Object.entries(fileContents)) {
|
|
121
|
+
if (content) {
|
|
122
|
+
const filePath = path.join(outputDir, filename);
|
|
123
|
+
await fs.writeFile(filePath, content, 'utf-8');
|
|
124
|
+
writtenFiles.push(filename);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
return writtenFiles;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* Generates registry entry
|
|
133
|
+
* @param {Object} metadata - Template metadata
|
|
134
|
+
* @returns {Object} Registry entry
|
|
135
|
+
*/
|
|
136
|
+
generateRegistryEntry(metadata) {
|
|
137
|
+
return {
|
|
138
|
+
name: metadata.name,
|
|
139
|
+
category: metadata.category,
|
|
140
|
+
description: metadata.description,
|
|
141
|
+
tags: metadata.tags || [],
|
|
142
|
+
author: metadata.author,
|
|
143
|
+
version: metadata.version,
|
|
144
|
+
kse_version: metadata.kse_version,
|
|
145
|
+
created_at: metadata.created_at,
|
|
146
|
+
updated_at: metadata.updated_at,
|
|
147
|
+
path: `${metadata.category}/${metadata.name}`
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* Generates submission guide
|
|
153
|
+
* @param {Object} metadata - Template metadata
|
|
154
|
+
* @returns {string} Submission guide content
|
|
155
|
+
*/
|
|
156
|
+
generateSubmissionGuide(metadata) {
|
|
157
|
+
return `# Template Submission Guide
|
|
158
|
+
|
|
159
|
+
## Template: ${metadata.name}
|
|
160
|
+
|
|
161
|
+
Congratulations! Your template has been generated successfully. Follow these steps to submit it to the scene-capability-engine-templates repository.
|
|
162
|
+
|
|
163
|
+
## Next Steps
|
|
164
|
+
|
|
165
|
+
### 1. Review the Template
|
|
166
|
+
|
|
167
|
+
- Check \`requirements.md\`, \`design.md\`, and \`tasks.md\` for accuracy
|
|
168
|
+
- Verify that all project-specific content has been replaced with template variables
|
|
169
|
+
- Review \`REVIEW_CHECKLIST.md\` for a complete list of items to verify
|
|
170
|
+
|
|
171
|
+
### 2. Test the Template
|
|
172
|
+
|
|
173
|
+
Test your template locally before submitting:
|
|
174
|
+
|
|
175
|
+
\`\`\`bash
|
|
176
|
+
# Apply the template to create a new Spec
|
|
177
|
+
kse spec create test-spec --template ${metadata.name}
|
|
178
|
+
|
|
179
|
+
# Verify the generated Spec is correct
|
|
180
|
+
cd .kiro/specs/test-spec
|
|
181
|
+
# Check that variables were replaced correctly
|
|
182
|
+
\`\`\`
|
|
183
|
+
|
|
184
|
+
### 3. Submit to Repository
|
|
185
|
+
|
|
186
|
+
**Option A: Fork + Pull Request (Recommended)**
|
|
187
|
+
|
|
188
|
+
\`\`\`bash
|
|
189
|
+
# 1. Fork the scene-capability-engine-templates repository on GitHub
|
|
190
|
+
# 2. Clone your fork
|
|
191
|
+
git clone https://github.com/YOUR_USERNAME/scene-capability-engine-templates.git
|
|
192
|
+
cd scene-capability-engine-templates
|
|
193
|
+
|
|
194
|
+
# 3. Create a branch
|
|
195
|
+
git checkout -b add-${metadata.name}
|
|
196
|
+
|
|
197
|
+
# 4. Copy your template to the appropriate category directory
|
|
198
|
+
mkdir -p ${metadata.category}/${metadata.name}
|
|
199
|
+
cp /path/to/this/template/* ${metadata.category}/${metadata.name}/
|
|
200
|
+
|
|
201
|
+
# 5. Update template-registry.json
|
|
202
|
+
# Add the entry from template-registry.json in this directory
|
|
203
|
+
|
|
204
|
+
# 6. Commit and push
|
|
205
|
+
git add .
|
|
206
|
+
git commit -m "feat: add ${metadata.name} template"
|
|
207
|
+
git push origin add-${metadata.name}
|
|
208
|
+
|
|
209
|
+
# 7. Create Pull Request on GitHub
|
|
210
|
+
# Use the content from PR_DESCRIPTION.md
|
|
211
|
+
\`\`\`
|
|
212
|
+
|
|
213
|
+
**Option B: Issue Submission (Simple)**
|
|
214
|
+
|
|
215
|
+
If you're not familiar with Git:
|
|
216
|
+
|
|
217
|
+
1. Go to https://github.com/heguangyong/scene-capability-engine-templates/issues
|
|
218
|
+
2. Create a new issue with title: \`[Template Submission] ${metadata.name}\`
|
|
219
|
+
3. Attach the template files or paste their contents
|
|
220
|
+
4. A maintainer will review and add your template
|
|
221
|
+
|
|
222
|
+
## Files in This Package
|
|
223
|
+
|
|
224
|
+
- \`requirements.md\` - Template requirements document
|
|
225
|
+
- \`design.md\` - Template design document
|
|
226
|
+
- \`tasks.md\` - Template tasks document
|
|
227
|
+
- \`template-registry.json\` - Registry entry for your template
|
|
228
|
+
- \`SUBMISSION_GUIDE.md\` - This file
|
|
229
|
+
- \`PR_DESCRIPTION.md\` - Draft PR description
|
|
230
|
+
- \`REVIEW_CHECKLIST.md\` - Items to verify before submission
|
|
231
|
+
- \`USAGE_EXAMPLE.md\` - How to use your template
|
|
232
|
+
- \`creation.log\` - Creation log for debugging
|
|
233
|
+
|
|
234
|
+
## Questions?
|
|
235
|
+
|
|
236
|
+
If you have questions about the submission process, please:
|
|
237
|
+
- Check the scene-capability-engine-templates repository README
|
|
238
|
+
- Open an issue in the repository
|
|
239
|
+
- Contact the maintainers
|
|
240
|
+
|
|
241
|
+
Thank you for contributing to the kse template library!
|
|
242
|
+
`;
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
/**
|
|
246
|
+
* Generates PR description
|
|
247
|
+
* @param {Object} metadata - Template metadata
|
|
248
|
+
* @returns {string} PR description
|
|
249
|
+
*/
|
|
250
|
+
generatePRDescription(metadata) {
|
|
251
|
+
return `# Add ${metadata.name} Template
|
|
252
|
+
|
|
253
|
+
## Description
|
|
254
|
+
|
|
255
|
+
${metadata.description}
|
|
256
|
+
|
|
257
|
+
## Template Details
|
|
258
|
+
|
|
259
|
+
- **Name**: ${metadata.name}
|
|
260
|
+
- **Category**: ${metadata.category}
|
|
261
|
+
- **Tags**: ${metadata.tags.join(', ')}
|
|
262
|
+
- **Author**: ${metadata.author}
|
|
263
|
+
- **Version**: ${metadata.version}
|
|
264
|
+
- **Minimum KSE Version**: ${metadata.kse_version}
|
|
265
|
+
|
|
266
|
+
## Files Included
|
|
267
|
+
|
|
268
|
+
- \`requirements.md\` - Requirements document with YAML frontmatter
|
|
269
|
+
- \`design.md\` - Design document with YAML frontmatter
|
|
270
|
+
- \`tasks.md\` - Tasks document with YAML frontmatter
|
|
271
|
+
|
|
272
|
+
## Checklist
|
|
273
|
+
|
|
274
|
+
- [ ] Template files include valid YAML frontmatter
|
|
275
|
+
- [ ] All project-specific content replaced with template variables
|
|
276
|
+
- [ ] Template tested locally with \`kse spec create\`
|
|
277
|
+
- [ ] Template follows naming conventions (kebab-case)
|
|
278
|
+
- [ ] Description is clear and concise
|
|
279
|
+
- [ ] Tags are relevant and searchable
|
|
280
|
+
- [ ] Registry entry added to \`template-registry.json\`
|
|
281
|
+
|
|
282
|
+
## Testing
|
|
283
|
+
|
|
284
|
+
Tested locally by applying the template:
|
|
285
|
+
|
|
286
|
+
\`\`\`bash
|
|
287
|
+
kse spec create test-spec --template ${metadata.name}
|
|
288
|
+
\`\`\`
|
|
289
|
+
|
|
290
|
+
## Additional Notes
|
|
291
|
+
|
|
292
|
+
(Add any additional context or notes here)
|
|
293
|
+
`;
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
/**
|
|
297
|
+
* Generates review checklist
|
|
298
|
+
* @param {Object} validationResult - Validation result
|
|
299
|
+
* @returns {string} Review checklist
|
|
300
|
+
*/
|
|
301
|
+
generateReviewChecklist(validationResult) {
|
|
302
|
+
const score = validationResult?.score || 0;
|
|
303
|
+
const errors = validationResult?.errors || [];
|
|
304
|
+
const warnings = validationResult?.warnings || [];
|
|
305
|
+
|
|
306
|
+
return `# Template Review Checklist
|
|
307
|
+
|
|
308
|
+
## Validation Results
|
|
309
|
+
|
|
310
|
+
- **Quality Score**: ${score}/100
|
|
311
|
+
- **Errors**: ${errors.length}
|
|
312
|
+
- **Warnings**: ${warnings.length}
|
|
313
|
+
|
|
314
|
+
${errors.length > 0 ? `\n### Errors\n\n${errors.map(e => `- ❌ ${e}`).join('\n')}\n` : ''}
|
|
315
|
+
${warnings.length > 0 ? `\n### Warnings\n\n${warnings.map(w => `- ⚠️ ${w}`).join('\n')}\n` : ''}
|
|
316
|
+
|
|
317
|
+
## Manual Review Items
|
|
318
|
+
|
|
319
|
+
### Content Quality
|
|
320
|
+
|
|
321
|
+
- [ ] All project-specific names replaced with \`{{SPEC_NAME}}\`
|
|
322
|
+
- [ ] All dates replaced with \`{{DATE}}\`
|
|
323
|
+
- [ ] All author names replaced with \`{{AUTHOR}}\`
|
|
324
|
+
- [ ] All version numbers replaced with \`{{VERSION}}\` (where appropriate)
|
|
325
|
+
- [ ] No hardcoded paths or URLs (except examples)
|
|
326
|
+
- [ ] EARS patterns preserved correctly
|
|
327
|
+
- [ ] Requirement numbering is consistent
|
|
328
|
+
|
|
329
|
+
### Metadata Quality
|
|
330
|
+
|
|
331
|
+
- [ ] Template name is in kebab-case
|
|
332
|
+
- [ ] Description is clear and concise (1-2 sentences)
|
|
333
|
+
- [ ] Category is appropriate
|
|
334
|
+
- [ ] Tags are relevant and searchable
|
|
335
|
+
- [ ] Version follows semver format
|
|
336
|
+
- [ ] Author information is correct
|
|
337
|
+
|
|
338
|
+
### Structure Quality
|
|
339
|
+
|
|
340
|
+
- [ ] All three files present (requirements.md, design.md, tasks.md)
|
|
341
|
+
- [ ] YAML frontmatter is valid in all files
|
|
342
|
+
- [ ] Frontmatter includes all required fields
|
|
343
|
+
- [ ] Document structure is preserved
|
|
344
|
+
- [ ] Internal references are not broken
|
|
345
|
+
|
|
346
|
+
### Testing
|
|
347
|
+
|
|
348
|
+
- [ ] Template applied successfully with \`kse spec create\`
|
|
349
|
+
- [ ] Variables replaced correctly in generated Spec
|
|
350
|
+
- [ ] Generated Spec is usable and makes sense
|
|
351
|
+
- [ ] No errors during template application
|
|
352
|
+
|
|
353
|
+
### Documentation
|
|
354
|
+
|
|
355
|
+
- [ ] USAGE_EXAMPLE.md is clear and helpful
|
|
356
|
+
- [ ] All template variables are documented
|
|
357
|
+
- [ ] Prerequisites are listed (if any)
|
|
358
|
+
- [ ] Examples are provided
|
|
359
|
+
|
|
360
|
+
## Recommendations
|
|
361
|
+
|
|
362
|
+
${score >= 90 ? '✅ Template quality is excellent! Ready for submission.' : ''}
|
|
363
|
+
${score >= 70 && score < 90 ? '⚠️ Template quality is good, but consider addressing warnings before submission.' : ''}
|
|
364
|
+
${score < 70 ? '❌ Template quality needs improvement. Please address errors and warnings before submission.' : ''}
|
|
365
|
+
|
|
366
|
+
## Next Steps
|
|
367
|
+
|
|
368
|
+
1. Review and address any errors or warnings above
|
|
369
|
+
2. Complete the manual review checklist
|
|
370
|
+
3. Test the template locally
|
|
371
|
+
4. Follow the submission guide in SUBMISSION_GUIDE.md
|
|
372
|
+
`;
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
/**
|
|
376
|
+
* Generates usage example
|
|
377
|
+
* @param {Object} metadata - Template metadata
|
|
378
|
+
* @returns {string} Usage example
|
|
379
|
+
*/
|
|
380
|
+
generateUsageExample(metadata) {
|
|
381
|
+
return `# Template Usage Example
|
|
382
|
+
|
|
383
|
+
## Template: ${metadata.name}
|
|
384
|
+
|
|
385
|
+
${metadata.description}
|
|
386
|
+
|
|
387
|
+
## How to Use This Template
|
|
388
|
+
|
|
389
|
+
### 1. List Available Templates
|
|
390
|
+
|
|
391
|
+
\`\`\`bash
|
|
392
|
+
kse templates list
|
|
393
|
+
\`\`\`
|
|
394
|
+
|
|
395
|
+
### 2. View Template Details
|
|
396
|
+
|
|
397
|
+
\`\`\`bash
|
|
398
|
+
kse templates show ${metadata.category}/${metadata.name}
|
|
399
|
+
\`\`\`
|
|
400
|
+
|
|
401
|
+
### 3. Create a New Spec from This Template
|
|
402
|
+
|
|
403
|
+
\`\`\`bash
|
|
404
|
+
kse spec create my-new-feature --template ${metadata.category}/${metadata.name}
|
|
405
|
+
\`\`\`
|
|
406
|
+
|
|
407
|
+
This will create a new Spec at \`.kiro/specs/XX-00-my-new-feature/\` with:
|
|
408
|
+
- \`requirements.md\` - Requirements document
|
|
409
|
+
- \`design.md\` - Design document
|
|
410
|
+
- \`tasks.md\` - Implementation tasks
|
|
411
|
+
|
|
412
|
+
### 4. Customize the Generated Spec
|
|
413
|
+
|
|
414
|
+
The template uses the following variables that will be replaced:
|
|
415
|
+
|
|
416
|
+
- \`{{SPEC_NAME}}\` - Your Spec name in kebab-case (e.g., \`my-new-feature\`)
|
|
417
|
+
- \`{{SPEC_NAME_TITLE}}\` - Your Spec name in Title Case (e.g., \`My New Feature\`)
|
|
418
|
+
- \`{{DATE}}\` - Current date in ISO format (e.g., \`2025-01-31\`)
|
|
419
|
+
- \`{{AUTHOR}}\` - Your name from git config
|
|
420
|
+
- \`{{VERSION}}\` - Version number (default: \`1.0.0\`)
|
|
421
|
+
|
|
422
|
+
## What This Template Provides
|
|
423
|
+
|
|
424
|
+
This template helps you create a Spec for:
|
|
425
|
+
|
|
426
|
+
${metadata.description}
|
|
427
|
+
|
|
428
|
+
## Prerequisites
|
|
429
|
+
|
|
430
|
+
- kse version ${metadata.kse_version} or higher
|
|
431
|
+
- Basic understanding of Spec-driven development
|
|
432
|
+
|
|
433
|
+
## Tags
|
|
434
|
+
|
|
435
|
+
${metadata.tags.map(tag => `- ${tag}`).join('\n')}
|
|
436
|
+
|
|
437
|
+
## Example Output
|
|
438
|
+
|
|
439
|
+
After applying this template, you'll have a complete Spec structure ready to customize for your specific needs.
|
|
440
|
+
|
|
441
|
+
## Questions?
|
|
442
|
+
|
|
443
|
+
If you have questions about using this template:
|
|
444
|
+
- Check the kse documentation
|
|
445
|
+
- Review the generated Spec files
|
|
446
|
+
- Open an issue in the scene-capability-engine-templates repository
|
|
447
|
+
`;
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
/**
|
|
451
|
+
* Logs creation details
|
|
452
|
+
* @param {string} outputDir - Output directory
|
|
453
|
+
* @param {Object} templateData - Template data
|
|
454
|
+
* @returns {Promise<void>}
|
|
455
|
+
*/
|
|
456
|
+
async logCreation(outputDir, templateData) {
|
|
457
|
+
const { metadata, validationResult, generalizationResult } = templateData;
|
|
458
|
+
const timestamp = new Date().toISOString();
|
|
459
|
+
|
|
460
|
+
const log = `# Template Creation Log
|
|
461
|
+
|
|
462
|
+
**Timestamp**: ${timestamp}
|
|
463
|
+
**Template Name**: ${metadata.name}
|
|
464
|
+
**Category**: ${metadata.category}
|
|
465
|
+
**Version**: ${metadata.version}
|
|
466
|
+
|
|
467
|
+
## Generalization Summary
|
|
468
|
+
|
|
469
|
+
- Total Replacements: ${generalizationResult?.summary?.totalReplacements || 0}
|
|
470
|
+
- Total Flags: ${generalizationResult?.summary?.totalFlags || 0}
|
|
471
|
+
|
|
472
|
+
## Validation Summary
|
|
473
|
+
|
|
474
|
+
- Quality Score: ${validationResult?.score || 0}/100
|
|
475
|
+
- Errors: ${validationResult?.errors?.length || 0}
|
|
476
|
+
- Warnings: ${validationResult?.warnings?.length || 0}
|
|
477
|
+
|
|
478
|
+
## Files Generated
|
|
479
|
+
|
|
480
|
+
- requirements.md
|
|
481
|
+
- design.md
|
|
482
|
+
- tasks.md
|
|
483
|
+
- template-registry.json
|
|
484
|
+
- SUBMISSION_GUIDE.md
|
|
485
|
+
- PR_DESCRIPTION.md
|
|
486
|
+
- REVIEW_CHECKLIST.md
|
|
487
|
+
- USAGE_EXAMPLE.md
|
|
488
|
+
- creation.log
|
|
489
|
+
|
|
490
|
+
## Status
|
|
491
|
+
|
|
492
|
+
${validationResult?.valid ? '✅ Template validation passed' : '❌ Template validation failed'}
|
|
493
|
+
|
|
494
|
+
---
|
|
495
|
+
Generated by kse templates create-from-spec
|
|
496
|
+
`;
|
|
497
|
+
|
|
498
|
+
await fs.writeFile(path.join(outputDir, 'creation.log'), log, 'utf-8');
|
|
499
|
+
}
|
|
500
|
+
}
|
|
501
|
+
|
|
502
|
+
module.exports = TemplateExporter;
|