@clawplays/ospec-cli 0.1.1

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 (191) hide show
  1. package/.ospec/templates/hooks/post-merge +8 -0
  2. package/.ospec/templates/hooks/pre-commit +8 -0
  3. package/LICENSE +21 -0
  4. package/README.md +549 -0
  5. package/README.zh-CN.md +549 -0
  6. package/assets/for-ai/en-US/ai-guide.md +98 -0
  7. package/assets/for-ai/en-US/execution-protocol.md +64 -0
  8. package/assets/for-ai/zh-CN/ai-guide.md +102 -0
  9. package/assets/for-ai/zh-CN/execution-protocol.md +68 -0
  10. package/assets/git-hooks/post-merge +12 -0
  11. package/assets/git-hooks/pre-commit +12 -0
  12. package/assets/global-skills/claude/ospec-change/SKILL.md +116 -0
  13. package/assets/global-skills/codex/ospec-change/SKILL.md +117 -0
  14. package/assets/global-skills/codex/ospec-change/agents/openai.yaml +7 -0
  15. package/assets/global-skills/codex/ospec-change/skill.yaml +19 -0
  16. package/assets/project-conventions/en-US/development-guide.md +32 -0
  17. package/assets/project-conventions/en-US/naming-conventions.md +51 -0
  18. package/assets/project-conventions/en-US/skill-conventions.md +40 -0
  19. package/assets/project-conventions/en-US/workflow-conventions.md +70 -0
  20. package/assets/project-conventions/zh-CN/development-guide.md +32 -0
  21. package/assets/project-conventions/zh-CN/naming-conventions.md +51 -0
  22. package/assets/project-conventions/zh-CN/skill-conventions.md +40 -0
  23. package/assets/project-conventions/zh-CN/workflow-conventions.md +74 -0
  24. package/dist/adapters/codex-stitch-adapter.js +420 -0
  25. package/dist/adapters/gemini-stitch-adapter.js +408 -0
  26. package/dist/adapters/playwright-checkpoint-adapter.js +2260 -0
  27. package/dist/advanced/BatchOperations.d.ts +36 -0
  28. package/dist/advanced/BatchOperations.js +159 -0
  29. package/dist/advanced/CachingLayer.d.ts +66 -0
  30. package/dist/advanced/CachingLayer.js +136 -0
  31. package/dist/advanced/FeatureUpdater.d.ts +46 -0
  32. package/dist/advanced/FeatureUpdater.js +151 -0
  33. package/dist/advanced/PerformanceMonitor.d.ts +52 -0
  34. package/dist/advanced/PerformanceMonitor.js +129 -0
  35. package/dist/advanced/StatePersistence.d.ts +61 -0
  36. package/dist/advanced/StatePersistence.js +168 -0
  37. package/dist/advanced/index.d.ts +14 -0
  38. package/dist/advanced/index.js +22 -0
  39. package/dist/cli/commands/config.d.ts +5 -0
  40. package/dist/cli/commands/config.js +6 -0
  41. package/dist/cli/commands/feature.d.ts +5 -0
  42. package/dist/cli/commands/feature.js +6 -0
  43. package/dist/cli/commands/index.d.ts +5 -0
  44. package/dist/cli/commands/index.js +6 -0
  45. package/dist/cli/commands/project.d.ts +5 -0
  46. package/dist/cli/commands/project.js +6 -0
  47. package/dist/cli/commands/validate.d.ts +5 -0
  48. package/dist/cli/commands/validate.js +6 -0
  49. package/dist/cli/index.d.ts +5 -0
  50. package/dist/cli/index.js +6 -0
  51. package/dist/cli.d.ts +3 -0
  52. package/dist/cli.js +1007 -0
  53. package/dist/commands/ArchiveCommand.d.ts +14 -0
  54. package/dist/commands/ArchiveCommand.js +241 -0
  55. package/dist/commands/BaseCommand.d.ts +33 -0
  56. package/dist/commands/BaseCommand.js +46 -0
  57. package/dist/commands/BatchCommand.d.ts +5 -0
  58. package/dist/commands/BatchCommand.js +42 -0
  59. package/dist/commands/ChangesCommand.d.ts +3 -0
  60. package/dist/commands/ChangesCommand.js +71 -0
  61. package/dist/commands/DocsCommand.d.ts +5 -0
  62. package/dist/commands/DocsCommand.js +118 -0
  63. package/dist/commands/FinalizeCommand.d.ts +3 -0
  64. package/dist/commands/FinalizeCommand.js +24 -0
  65. package/dist/commands/IndexCommand.d.ts +5 -0
  66. package/dist/commands/IndexCommand.js +57 -0
  67. package/dist/commands/InitCommand.d.ts +5 -0
  68. package/dist/commands/InitCommand.js +65 -0
  69. package/dist/commands/NewCommand.d.ts +11 -0
  70. package/dist/commands/NewCommand.js +262 -0
  71. package/dist/commands/PluginsCommand.d.ts +58 -0
  72. package/dist/commands/PluginsCommand.js +2491 -0
  73. package/dist/commands/ProgressCommand.d.ts +5 -0
  74. package/dist/commands/ProgressCommand.js +103 -0
  75. package/dist/commands/QueueCommand.d.ts +10 -0
  76. package/dist/commands/QueueCommand.js +147 -0
  77. package/dist/commands/RunCommand.d.ts +13 -0
  78. package/dist/commands/RunCommand.js +200 -0
  79. package/dist/commands/SkillCommand.d.ts +31 -0
  80. package/dist/commands/SkillCommand.js +1216 -0
  81. package/dist/commands/SkillsCommand.d.ts +5 -0
  82. package/dist/commands/SkillsCommand.js +68 -0
  83. package/dist/commands/StatusCommand.d.ts +6 -0
  84. package/dist/commands/StatusCommand.js +140 -0
  85. package/dist/commands/UpdateCommand.d.ts +8 -0
  86. package/dist/commands/UpdateCommand.js +251 -0
  87. package/dist/commands/VerifyCommand.d.ts +5 -0
  88. package/dist/commands/VerifyCommand.js +278 -0
  89. package/dist/commands/WorkflowCommand.d.ts +12 -0
  90. package/dist/commands/WorkflowCommand.js +150 -0
  91. package/dist/commands/index.d.ts +43 -0
  92. package/dist/commands/index.js +85 -0
  93. package/dist/core/constants.d.ts +41 -0
  94. package/dist/core/constants.js +73 -0
  95. package/dist/core/errors.d.ts +36 -0
  96. package/dist/core/errors.js +72 -0
  97. package/dist/core/index.d.ts +7 -0
  98. package/dist/core/index.js +23 -0
  99. package/dist/core/types.d.ts +369 -0
  100. package/dist/core/types.js +3 -0
  101. package/dist/index.d.ts +11 -0
  102. package/dist/index.js +27 -0
  103. package/dist/presets/ProjectPresets.d.ts +41 -0
  104. package/dist/presets/ProjectPresets.js +190 -0
  105. package/dist/scaffolds/ProjectScaffoldPresets.d.ts +20 -0
  106. package/dist/scaffolds/ProjectScaffoldPresets.js +151 -0
  107. package/dist/services/ConfigManager.d.ts +14 -0
  108. package/dist/services/ConfigManager.js +386 -0
  109. package/dist/services/FeatureManager.d.ts +5 -0
  110. package/dist/services/FeatureManager.js +6 -0
  111. package/dist/services/FileService.d.ts +21 -0
  112. package/dist/services/FileService.js +152 -0
  113. package/dist/services/IndexBuilder.d.ts +12 -0
  114. package/dist/services/IndexBuilder.js +130 -0
  115. package/dist/services/Logger.d.ts +20 -0
  116. package/dist/services/Logger.js +48 -0
  117. package/dist/services/ProjectAssetRegistry.d.ts +12 -0
  118. package/dist/services/ProjectAssetRegistry.js +96 -0
  119. package/dist/services/ProjectAssetService.d.ts +49 -0
  120. package/dist/services/ProjectAssetService.js +223 -0
  121. package/dist/services/ProjectScaffoldCommandService.d.ts +73 -0
  122. package/dist/services/ProjectScaffoldCommandService.js +159 -0
  123. package/dist/services/ProjectScaffoldService.d.ts +44 -0
  124. package/dist/services/ProjectScaffoldService.js +507 -0
  125. package/dist/services/ProjectService.d.ts +209 -0
  126. package/dist/services/ProjectService.js +13239 -0
  127. package/dist/services/QueueService.d.ts +17 -0
  128. package/dist/services/QueueService.js +142 -0
  129. package/dist/services/RunService.d.ts +40 -0
  130. package/dist/services/RunService.js +420 -0
  131. package/dist/services/SkillParser.d.ts +30 -0
  132. package/dist/services/SkillParser.js +88 -0
  133. package/dist/services/StateManager.d.ts +16 -0
  134. package/dist/services/StateManager.js +127 -0
  135. package/dist/services/TemplateEngine.d.ts +43 -0
  136. package/dist/services/TemplateEngine.js +119 -0
  137. package/dist/services/TemplateGenerator.d.ts +40 -0
  138. package/dist/services/TemplateGenerator.js +273 -0
  139. package/dist/services/ValidationService.d.ts +19 -0
  140. package/dist/services/ValidationService.js +44 -0
  141. package/dist/services/Validator.d.ts +5 -0
  142. package/dist/services/Validator.js +6 -0
  143. package/dist/services/index.d.ts +52 -0
  144. package/dist/services/index.js +91 -0
  145. package/dist/services/templates/ExecutionTemplateBuilder.d.ts +12 -0
  146. package/dist/services/templates/ExecutionTemplateBuilder.js +300 -0
  147. package/dist/services/templates/ProjectTemplateBuilder.d.ts +38 -0
  148. package/dist/services/templates/ProjectTemplateBuilder.js +1897 -0
  149. package/dist/services/templates/TemplateBuilderBase.d.ts +19 -0
  150. package/dist/services/templates/TemplateBuilderBase.js +60 -0
  151. package/dist/services/templates/TemplateInputFactory.d.ts +16 -0
  152. package/dist/services/templates/TemplateInputFactory.js +298 -0
  153. package/dist/services/templates/templateTypes.d.ts +90 -0
  154. package/dist/services/templates/templateTypes.js +3 -0
  155. package/dist/tools/build-index.js +632 -0
  156. package/dist/utils/DateUtils.d.ts +18 -0
  157. package/dist/utils/DateUtils.js +40 -0
  158. package/dist/utils/PathUtils.d.ts +9 -0
  159. package/dist/utils/PathUtils.js +66 -0
  160. package/dist/utils/StringUtils.d.ts +26 -0
  161. package/dist/utils/StringUtils.js +47 -0
  162. package/dist/utils/helpers.d.ts +5 -0
  163. package/dist/utils/helpers.js +6 -0
  164. package/dist/utils/index.d.ts +7 -0
  165. package/dist/utils/index.js +23 -0
  166. package/dist/utils/logger.d.ts +5 -0
  167. package/dist/utils/logger.js +6 -0
  168. package/dist/utils/path.d.ts +5 -0
  169. package/dist/utils/path.js +6 -0
  170. package/dist/utils/subcommandHelp.d.ts +11 -0
  171. package/dist/utils/subcommandHelp.js +119 -0
  172. package/dist/workflow/ArchiveGate.d.ts +30 -0
  173. package/dist/workflow/ArchiveGate.js +93 -0
  174. package/dist/workflow/ConfigurableWorkflow.d.ts +89 -0
  175. package/dist/workflow/ConfigurableWorkflow.js +186 -0
  176. package/dist/workflow/HookSystem.d.ts +38 -0
  177. package/dist/workflow/HookSystem.js +66 -0
  178. package/dist/workflow/IndexRegenerator.d.ts +49 -0
  179. package/dist/workflow/IndexRegenerator.js +147 -0
  180. package/dist/workflow/PluginWorkflowComposer.d.ts +138 -0
  181. package/dist/workflow/PluginWorkflowComposer.js +239 -0
  182. package/dist/workflow/SkillUpdateEngine.d.ts +26 -0
  183. package/dist/workflow/SkillUpdateEngine.js +113 -0
  184. package/dist/workflow/VerificationSystem.d.ts +24 -0
  185. package/dist/workflow/VerificationSystem.js +116 -0
  186. package/dist/workflow/WorkflowEngine.d.ts +15 -0
  187. package/dist/workflow/WorkflowEngine.js +57 -0
  188. package/dist/workflow/index.d.ts +19 -0
  189. package/dist/workflow/index.js +32 -0
  190. package/package.json +78 -0
  191. package/scripts/postinstall.js +43 -0
@@ -0,0 +1,273 @@
1
+ "use strict";
2
+ /**
3
+ * 模板生成服务
4
+ * 负责生成 proposal.md、tasks.md、verification.md 等模板文件
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.TemplateGenerator = void 0;
8
+ const FileService_1 = require("./FileService");
9
+ const SkillParser_1 = require("./SkillParser");
10
+ const constants_1 = require("../core/constants");
11
+ class TemplateGenerator {
12
+ /**
13
+ * 生成 proposal.md 模板
14
+ */
15
+ static generateProposalTemplate(featureName, affects = []) {
16
+ const now = new Date().toISOString().split('T')[0];
17
+ return `---
18
+ name: ${featureName}
19
+ status: active
20
+ created: ${now}
21
+ affects: [${affects.map((a) => `"${a}"`).join(', ')}]
22
+ flags: []
23
+ ---
24
+
25
+ ## 背景
26
+
27
+ 为什么要做这个 feature?当前存在哪些问题?
28
+
29
+ ## 目标
30
+
31
+ 做完之后能解决什么问题?用户或开发者能得到什么?
32
+
33
+ ## 范围
34
+
35
+ **涉及:**
36
+ - 列出涉及的模块或文件
37
+
38
+ **不涉及:**
39
+ - 列出明确不在本次范围内的内容,避免范围蔓延
40
+
41
+ ## 验收标准
42
+
43
+ - [ ] 条件一
44
+ - [ ] 条件二
45
+ `;
46
+ }
47
+ /**
48
+ * 生成 tasks.md 模板
49
+ */
50
+ static generateTasksTemplate(featureName, coreRequiredSteps = [], optionalSteps = []) {
51
+ const now = new Date().toISOString().split('T')[0];
52
+ let content = `---
53
+ feature: ${featureName}
54
+ created: ${now}
55
+ optional_steps: [${optionalSteps.map((s) => `"${s}"`).join(', ')}]
56
+ ---
57
+
58
+ ## 任务清单
59
+
60
+ ### 核心任务
61
+
62
+ `;
63
+ // 添加核心任务
64
+ if (coreRequiredSteps.length > 0) {
65
+ coreRequiredSteps.forEach((step, index) => {
66
+ content += `- [ ] ${index + 1}. ${step}\n`;
67
+ });
68
+ }
69
+ else {
70
+ content += `- [ ] 1. 实现功能\n`;
71
+ content += `- [ ] 2. 更新文档\n`;
72
+ content += `- [ ] 3. 更新索引\n`;
73
+ content += `- [ ] 4. 运行测试\n`;
74
+ }
75
+ // 添加可选任务
76
+ if (optionalSteps.length > 0) {
77
+ content += `\n### 可选任务\n\n`;
78
+ optionalSteps.forEach((step, index) => {
79
+ content += `- [ ] ${index + 1}. ${step}\n`;
80
+ });
81
+ }
82
+ return content;
83
+ }
84
+ /**
85
+ * 生成 verification.md 模板
86
+ */
87
+ static generateVerificationTemplate(featureName, optionalSteps = []) {
88
+ const now = new Date().toISOString().split('T')[0];
89
+ let content = `---
90
+ feature: ${featureName}
91
+ created: ${now}
92
+ optional_steps: [${optionalSteps.map((s) => `"${s}"`).join(', ')}]
93
+ ---
94
+
95
+ ## 验证清单
96
+
97
+ ### 自动验证
98
+
99
+ - [ ] 编译成功
100
+ - [ ] 代码检查通过
101
+ - [ ] 测试通过
102
+
103
+ ### 需求验收
104
+
105
+ - [ ] 功能实现完整
106
+ - [ ] 符合验收标准
107
+
108
+ ### 文档更新
109
+
110
+ - [ ] 相关模块 SKILL.md 已更新
111
+ - [ ] SKILL.index.json 已重建
112
+
113
+ `;
114
+ if (optionalSteps.length > 0) {
115
+ content += `### 可选步骤验证\n\n`;
116
+ optionalSteps.forEach((step) => {
117
+ content += `- [ ] ${step} 已完成\n`;
118
+ });
119
+ content += `\n### 通过的可选步骤\n\npassed_optional_steps: []\n`;
120
+ }
121
+ content += `\n### 通过条件\n\n所有验证项都通过后,可以进入归档阶段。\n`;
122
+ return content;
123
+ }
124
+ /**
125
+ * 生成 state.json 内容
126
+ */
127
+ static generateStateJson(featureName, affects = [], mode = 'standard') {
128
+ return {
129
+ version: '1.0',
130
+ feature: featureName,
131
+ mode,
132
+ status: 'draft',
133
+ current_step: 'write_proposal',
134
+ affects,
135
+ completed: [],
136
+ pending: [
137
+ 'proposal_complete',
138
+ 'tasks_complete',
139
+ 'implementation_complete',
140
+ 'skill_updated',
141
+ 'index_regenerated',
142
+ 'tests_passed',
143
+ 'verification_passed',
144
+ 'archived',
145
+ ],
146
+ blocked_by: [],
147
+ last_updated: new Date().toISOString(),
148
+ };
149
+ }
150
+ /**
151
+ * 创建 feature 目录和文件
152
+ */
153
+ static async createFeatureDirectory(projectRoot, featureName, affects = [], coreRequiredSteps = [], optionalSteps = []) {
154
+ const featurePath = FileService_1.FileService.joinPath(projectRoot, 'changes', 'active', featureName);
155
+ // 创建目录
156
+ await FileService_1.FileService.createDirectory(featurePath);
157
+ // 生成 proposal.md
158
+ const proposalContent = this.generateProposalTemplate(featureName, affects);
159
+ await FileService_1.FileService.writeFile(FileService_1.FileService.joinPath(featurePath, constants_1.FILE_NAMES.PROPOSAL), proposalContent);
160
+ // 生成 tasks.md
161
+ const tasksContent = this.generateTasksTemplate(featureName, coreRequiredSteps, optionalSteps);
162
+ await FileService_1.FileService.writeFile(FileService_1.FileService.joinPath(featurePath, constants_1.FILE_NAMES.TASKS), tasksContent);
163
+ // 生成 verification.md
164
+ const verificationContent = this.generateVerificationTemplate(featureName, optionalSteps);
165
+ await FileService_1.FileService.writeFile(FileService_1.FileService.joinPath(featurePath, constants_1.FILE_NAMES.VERIFICATION), verificationContent);
166
+ // 生成 state.json
167
+ const stateJson = this.generateStateJson(featureName, affects);
168
+ await FileService_1.FileService.writeJSON(FileService_1.FileService.joinPath(featurePath, constants_1.FILE_NAMES.STATE), stateJson);
169
+ }
170
+ /**
171
+ * 生成项目初始化文件
172
+ */
173
+ static async initializeProject(projectRoot, mode = 'lite') {
174
+ // 创建必要的目录
175
+ await FileService_1.FileService.createDirectory(FileService_1.FileService.joinPath(projectRoot, 'changes', 'active'));
176
+ await FileService_1.FileService.createDirectory(FileService_1.FileService.joinPath(projectRoot, 'changes', 'archived'));
177
+ await FileService_1.FileService.createDirectory(FileService_1.FileService.joinPath(projectRoot, 'for-ai'));
178
+ await FileService_1.FileService.createDirectory(FileService_1.FileService.joinPath(projectRoot, 'docs'));
179
+ // 生成 SKILL.md
180
+ const skillContent = SkillParser_1.SkillParser.createDefaultSkill('project', ['project', 'root'], 'Project Root');
181
+ await FileService_1.FileService.writeFile(FileService_1.FileService.joinPath(projectRoot, constants_1.FILE_NAMES.SKILL_MD), skillContent);
182
+ // 生成 ai-guide.md
183
+ const aiGuideContent = this.generateAiGuide();
184
+ await FileService_1.FileService.writeFile(FileService_1.FileService.joinPath(projectRoot, 'for-ai', 'ai-guide.md'), aiGuideContent);
185
+ // 生成 execution-protocol.md
186
+ const executionProtocolContent = this.generateExecutionProtocol();
187
+ await FileService_1.FileService.writeFile(FileService_1.FileService.joinPath(projectRoot, 'for-ai', 'execution-protocol.md'), executionProtocolContent);
188
+ }
189
+ /**
190
+ * 生成 AI 指南
191
+ */
192
+ static generateAiGuide() {
193
+ return `# AI 指南
194
+
195
+ > OSpec 规范 v3.0
196
+
197
+ ## 项目概览
198
+
199
+ 本项目使用 ospec 规范管理需求和工作流。
200
+
201
+ ## 关键文件
202
+
203
+ - \`.skillrc\` - 项目配置
204
+ - \`SKILL.md\` - 项目文档
205
+ - \`changes/active/\` - 活跃的 feature
206
+ - \`changes/archived/\` - 已归档的 feature
207
+
208
+ ## 开发流程
209
+
210
+ 1. 创建 feature(proposal.md)
211
+ 2. 启动 feature(生成 tasks.md)
212
+ 3. 实现功能
213
+ 4. 若涉及 Stitch 安装、provider 切换、MCP 或认证配置,优先读取仓库内 Stitch 规范;若缺失规范文档,则使用内建基线:Gemini 用 \`%USERPROFILE%/.gemini/settings.json\` 的 \`mcpServers.stitch.httpUrl\` 与 \`headers.X-Goog-Api-Key\`,Codex 用 \`%USERPROFILE%/.codex/config.toml\` 的 \`[mcp_servers.stitch]\`、\`type = "http"\`、\`url = "https://stitch.googleapis.com/mcp"\` 与 \`X-Goog-Api-Key\`
214
+ 5. 若内建 Codex provider 只读调用正常但 Stitch 写操作卡住,优先检查是否真正走了 \`codex exec --dangerously-bypass-approvals-and-sandbox\`
215
+ 6. 更新文档和索引
216
+ 7. 验证
217
+ 8. 归档
218
+
219
+ ## 常见命令
220
+
221
+ \`\`\`bash
222
+ # 创建 feature
223
+ ospec feature create my-feature
224
+
225
+ # 启动 feature
226
+ ospec feature start my-feature
227
+
228
+ # 查看状态
229
+ ospec feature status my-feature
230
+
231
+ # 归档 feature
232
+ ospec feature archive my-feature
233
+ \`\`\`
234
+ `;
235
+ }
236
+ /**
237
+ * 生成执行协议
238
+ */
239
+ static generateExecutionProtocol() {
240
+ return `# AI 执行协议
241
+
242
+ > OSpec 规范 v3.0
243
+
244
+ ## 每次进入项目时必须先读
245
+
246
+ 1. \`.skillrc\`
247
+ 2. \`SKILL.index.json\`
248
+ 3. 当前 feature 的 \`proposal.md\`
249
+ 4. 当前 feature 的 \`tasks.md\`
250
+ 5. 当前 feature 的 \`state.json\`
251
+ 6. 当前 feature 的 \`verification.md\`
252
+
253
+ ## 强制规则
254
+
255
+ - 没有 \`proposal.md\` 不得开始实现
256
+ - 没有 \`tasks.md\` 不得开始实现
257
+ - 没有 \`verification.md\` 不得 archive
258
+ - \`verification.md\` 未通过不得 archive
259
+ - 若涉及 Stitch provider、MCP 或认证配置,优先读取仓库内 Stitch 规范;若缺失规范文档,则使用内建基线:Gemini 用 \`%USERPROFILE%/.gemini/settings.json\` 的 \`mcpServers.stitch.httpUrl\` 与 \`headers.X-Goog-Api-Key\`,Codex 用 \`%USERPROFILE%/.codex/config.toml\` 的 \`[mcp_servers.stitch]\`、\`type = "http"\`、\`url = "https://stitch.googleapis.com/mcp"\` 与 \`X-Goog-Api-Key\`
260
+ - 若内建 Codex provider 只读调用正常但 Stitch 写操作卡住,优先检查是否真正走了 \`codex exec --dangerously-bypass-approvals-and-sandbox\`
261
+
262
+ ## 会话恢复规则
263
+
264
+ 每次新会话恢复时:
265
+
266
+ 1. 优先读取 \`state.json\`
267
+ 2. 以 \`state.json.status\` 为当前执行依据
268
+ 3. 不依赖对话记忆判断"已经做到哪一步"
269
+ `;
270
+ }
271
+ }
272
+ exports.TemplateGenerator = TemplateGenerator;
273
+ //# sourceMappingURL=TemplateGenerator.js.map
@@ -0,0 +1,19 @@
1
+ /**
2
+ * 验证服务
3
+ */
4
+ export declare class ValidationService {
5
+ /**
6
+ * 验证变更名称格式
7
+ */
8
+ validateFeatureName(name: string): boolean;
9
+ /**
10
+ * 验证JSON格式
11
+ */
12
+ validateJSON(content: string): boolean;
13
+ /**
14
+ * 验证必填字段
15
+ */
16
+ validateRequiredFields(data: Record<string, any>, fields: string[]): boolean;
17
+ }
18
+ export declare const validationService: ValidationService;
19
+ //# sourceMappingURL=ValidationService.d.ts.map
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ /**
3
+ * 验证服务
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.validationService = exports.ValidationService = void 0;
7
+ const errors_1 = require("../core/errors");
8
+ class ValidationService {
9
+ /**
10
+ * 验证变更名称格式
11
+ */
12
+ validateFeatureName(name) {
13
+ const regex = /^[a-z0-9]+(-[a-z0-9]+)*$/;
14
+ if (!regex.test(name)) {
15
+ throw new errors_1.ValidationError(`Invalid change name: ${name}`);
16
+ }
17
+ return true;
18
+ }
19
+ /**
20
+ * 验证JSON格式
21
+ */
22
+ validateJSON(content) {
23
+ try {
24
+ JSON.parse(content);
25
+ return true;
26
+ }
27
+ catch (error) {
28
+ throw new errors_1.ValidationError('Invalid JSON format');
29
+ }
30
+ }
31
+ /**
32
+ * 验证必填字段
33
+ */
34
+ validateRequiredFields(data, fields) {
35
+ const missing = fields.filter(field => !data[field]);
36
+ if (missing.length > 0) {
37
+ throw new errors_1.ValidationError(`Missing required fields: ${missing.join(', ')}`);
38
+ }
39
+ return true;
40
+ }
41
+ }
42
+ exports.ValidationService = ValidationService;
43
+ exports.validationService = new ValidationService();
44
+ //# sourceMappingURL=ValidationService.js.map
@@ -0,0 +1,5 @@
1
+ /**
2
+ * 验证服务
3
+ * TODO: 实现规范校验
4
+ */
5
+ //# sourceMappingURL=Validator.d.ts.map
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ /**
3
+ * 验证服务
4
+ * TODO: 实现规范校验
5
+ */
6
+ //# sourceMappingURL=Validator.js.map
@@ -0,0 +1,52 @@
1
+ /**
2
+ * 服务层导出
3
+ */
4
+ export { FileService, fileService } from './FileService';
5
+ export { ConfigManager, createConfigManager } from './ConfigManager';
6
+ export { StateManager, createStateManager } from './StateManager';
7
+ export { SkillParser, skillParser } from './SkillParser';
8
+ export { TemplateEngine, templateEngine } from './TemplateEngine';
9
+ export { ValidationService, validationService } from './ValidationService';
10
+ export { Logger, LogLevel, logger } from './Logger';
11
+ export { IndexBuilder, createIndexBuilder } from './IndexBuilder';
12
+ export { ProjectAssetService, createProjectAssetService } from './ProjectAssetService';
13
+ export { ProjectScaffoldService, createProjectScaffoldService } from './ProjectScaffoldService';
14
+ export { ProjectScaffoldCommandService, createProjectScaffoldCommandService, } from './ProjectScaffoldCommandService';
15
+ export { ProjectService, createProjectService } from './ProjectService';
16
+ export { QueueService, createQueueService } from './QueueService';
17
+ export { RunService, createRunService } from './RunService';
18
+ import { FileService } from './FileService';
19
+ import { ConfigManager } from './ConfigManager';
20
+ import { StateManager } from './StateManager';
21
+ import { SkillParser } from './SkillParser';
22
+ import { TemplateEngine } from './TemplateEngine';
23
+ import { ValidationService } from './ValidationService';
24
+ import { Logger } from './Logger';
25
+ import { IndexBuilder } from './IndexBuilder';
26
+ import { ProjectAssetService } from './ProjectAssetService';
27
+ import { ProjectScaffoldService } from './ProjectScaffoldService';
28
+ import { ProjectScaffoldCommandService } from './ProjectScaffoldCommandService';
29
+ import { ProjectService } from './ProjectService';
30
+ import { QueueService } from './QueueService';
31
+ import { RunService } from './RunService';
32
+ export declare class ServiceContainer {
33
+ private static instance;
34
+ readonly fileService: FileService;
35
+ readonly configManager: ConfigManager;
36
+ readonly stateManager: StateManager;
37
+ readonly skillParser: SkillParser;
38
+ readonly templateEngine: TemplateEngine;
39
+ readonly validationService: ValidationService;
40
+ readonly logger: Logger;
41
+ readonly indexBuilder: IndexBuilder;
42
+ readonly projectAssetService: ProjectAssetService;
43
+ readonly projectScaffoldService: ProjectScaffoldService;
44
+ readonly projectScaffoldCommandService: ProjectScaffoldCommandService;
45
+ readonly projectService: ProjectService;
46
+ readonly queueService: QueueService;
47
+ readonly runService: RunService;
48
+ private constructor();
49
+ static getInstance(): ServiceContainer;
50
+ }
51
+ export declare const services: ServiceContainer;
52
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+ /**
3
+ * 服务层导出
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.services = exports.ServiceContainer = exports.createRunService = exports.RunService = exports.createQueueService = exports.QueueService = exports.createProjectService = exports.ProjectService = exports.createProjectScaffoldCommandService = exports.ProjectScaffoldCommandService = exports.createProjectScaffoldService = exports.ProjectScaffoldService = exports.createProjectAssetService = exports.ProjectAssetService = exports.createIndexBuilder = exports.IndexBuilder = exports.logger = exports.LogLevel = exports.Logger = exports.validationService = exports.ValidationService = exports.templateEngine = exports.TemplateEngine = exports.skillParser = exports.SkillParser = exports.createStateManager = exports.StateManager = exports.createConfigManager = exports.ConfigManager = exports.fileService = exports.FileService = void 0;
7
+ var FileService_1 = require("./FileService");
8
+ Object.defineProperty(exports, "FileService", { enumerable: true, get: function () { return FileService_1.FileService; } });
9
+ Object.defineProperty(exports, "fileService", { enumerable: true, get: function () { return FileService_1.fileService; } });
10
+ var ConfigManager_1 = require("./ConfigManager");
11
+ Object.defineProperty(exports, "ConfigManager", { enumerable: true, get: function () { return ConfigManager_1.ConfigManager; } });
12
+ Object.defineProperty(exports, "createConfigManager", { enumerable: true, get: function () { return ConfigManager_1.createConfigManager; } });
13
+ var StateManager_1 = require("./StateManager");
14
+ Object.defineProperty(exports, "StateManager", { enumerable: true, get: function () { return StateManager_1.StateManager; } });
15
+ Object.defineProperty(exports, "createStateManager", { enumerable: true, get: function () { return StateManager_1.createStateManager; } });
16
+ var SkillParser_1 = require("./SkillParser");
17
+ Object.defineProperty(exports, "SkillParser", { enumerable: true, get: function () { return SkillParser_1.SkillParser; } });
18
+ Object.defineProperty(exports, "skillParser", { enumerable: true, get: function () { return SkillParser_1.skillParser; } });
19
+ var TemplateEngine_1 = require("./TemplateEngine");
20
+ Object.defineProperty(exports, "TemplateEngine", { enumerable: true, get: function () { return TemplateEngine_1.TemplateEngine; } });
21
+ Object.defineProperty(exports, "templateEngine", { enumerable: true, get: function () { return TemplateEngine_1.templateEngine; } });
22
+ var ValidationService_1 = require("./ValidationService");
23
+ Object.defineProperty(exports, "ValidationService", { enumerable: true, get: function () { return ValidationService_1.ValidationService; } });
24
+ Object.defineProperty(exports, "validationService", { enumerable: true, get: function () { return ValidationService_1.validationService; } });
25
+ var Logger_1 = require("./Logger");
26
+ Object.defineProperty(exports, "Logger", { enumerable: true, get: function () { return Logger_1.Logger; } });
27
+ Object.defineProperty(exports, "LogLevel", { enumerable: true, get: function () { return Logger_1.LogLevel; } });
28
+ Object.defineProperty(exports, "logger", { enumerable: true, get: function () { return Logger_1.logger; } });
29
+ var IndexBuilder_1 = require("./IndexBuilder");
30
+ Object.defineProperty(exports, "IndexBuilder", { enumerable: true, get: function () { return IndexBuilder_1.IndexBuilder; } });
31
+ Object.defineProperty(exports, "createIndexBuilder", { enumerable: true, get: function () { return IndexBuilder_1.createIndexBuilder; } });
32
+ var ProjectAssetService_1 = require("./ProjectAssetService");
33
+ Object.defineProperty(exports, "ProjectAssetService", { enumerable: true, get: function () { return ProjectAssetService_1.ProjectAssetService; } });
34
+ Object.defineProperty(exports, "createProjectAssetService", { enumerable: true, get: function () { return ProjectAssetService_1.createProjectAssetService; } });
35
+ var ProjectScaffoldService_1 = require("./ProjectScaffoldService");
36
+ Object.defineProperty(exports, "ProjectScaffoldService", { enumerable: true, get: function () { return ProjectScaffoldService_1.ProjectScaffoldService; } });
37
+ Object.defineProperty(exports, "createProjectScaffoldService", { enumerable: true, get: function () { return ProjectScaffoldService_1.createProjectScaffoldService; } });
38
+ var ProjectScaffoldCommandService_1 = require("./ProjectScaffoldCommandService");
39
+ Object.defineProperty(exports, "ProjectScaffoldCommandService", { enumerable: true, get: function () { return ProjectScaffoldCommandService_1.ProjectScaffoldCommandService; } });
40
+ Object.defineProperty(exports, "createProjectScaffoldCommandService", { enumerable: true, get: function () { return ProjectScaffoldCommandService_1.createProjectScaffoldCommandService; } });
41
+ var ProjectService_1 = require("./ProjectService");
42
+ Object.defineProperty(exports, "ProjectService", { enumerable: true, get: function () { return ProjectService_1.ProjectService; } });
43
+ Object.defineProperty(exports, "createProjectService", { enumerable: true, get: function () { return ProjectService_1.createProjectService; } });
44
+ var QueueService_1 = require("./QueueService");
45
+ Object.defineProperty(exports, "QueueService", { enumerable: true, get: function () { return QueueService_1.QueueService; } });
46
+ Object.defineProperty(exports, "createQueueService", { enumerable: true, get: function () { return QueueService_1.createQueueService; } });
47
+ var RunService_1 = require("./RunService");
48
+ Object.defineProperty(exports, "RunService", { enumerable: true, get: function () { return RunService_1.RunService; } });
49
+ Object.defineProperty(exports, "createRunService", { enumerable: true, get: function () { return RunService_1.createRunService; } });
50
+ // 服务容器
51
+ const FileService_2 = require("./FileService");
52
+ const ConfigManager_2 = require("./ConfigManager");
53
+ const StateManager_2 = require("./StateManager");
54
+ const SkillParser_2 = require("./SkillParser");
55
+ const TemplateEngine_2 = require("./TemplateEngine");
56
+ const ValidationService_2 = require("./ValidationService");
57
+ const Logger_2 = require("./Logger");
58
+ const IndexBuilder_2 = require("./IndexBuilder");
59
+ const ProjectAssetService_2 = require("./ProjectAssetService");
60
+ const ProjectScaffoldService_2 = require("./ProjectScaffoldService");
61
+ const ProjectScaffoldCommandService_2 = require("./ProjectScaffoldCommandService");
62
+ const ProjectService_2 = require("./ProjectService");
63
+ const QueueService_2 = require("./QueueService");
64
+ const RunService_2 = require("./RunService");
65
+ class ServiceContainer {
66
+ constructor() {
67
+ this.fileService = FileService_2.fileService;
68
+ this.configManager = (0, ConfigManager_2.createConfigManager)(FileService_2.fileService);
69
+ this.stateManager = (0, StateManager_2.createStateManager)(FileService_2.fileService);
70
+ this.skillParser = SkillParser_2.skillParser;
71
+ this.templateEngine = TemplateEngine_2.templateEngine;
72
+ this.validationService = ValidationService_2.validationService;
73
+ this.logger = Logger_2.logger;
74
+ this.indexBuilder = (0, IndexBuilder_2.createIndexBuilder)(SkillParser_2.skillParser);
75
+ this.projectAssetService = (0, ProjectAssetService_2.createProjectAssetService)(FileService_2.fileService);
76
+ this.projectScaffoldService = (0, ProjectScaffoldService_2.createProjectScaffoldService)(FileService_2.fileService);
77
+ this.projectScaffoldCommandService = (0, ProjectScaffoldCommandService_2.createProjectScaffoldCommandService)(FileService_2.fileService, Logger_2.logger);
78
+ this.projectService = (0, ProjectService_2.createProjectService)(FileService_2.fileService, this.configManager, TemplateEngine_2.templateEngine, this.indexBuilder, this.skillParser, this.projectAssetService, this.projectScaffoldService, this.projectScaffoldCommandService);
79
+ this.queueService = (0, QueueService_2.createQueueService)(FileService_2.fileService, this.projectService);
80
+ this.runService = (0, RunService_2.createRunService)(FileService_2.fileService, this.projectService, this.queueService);
81
+ }
82
+ static getInstance() {
83
+ if (!ServiceContainer.instance) {
84
+ ServiceContainer.instance = new ServiceContainer();
85
+ }
86
+ return ServiceContainer.instance;
87
+ }
88
+ }
89
+ exports.ServiceContainer = ServiceContainer;
90
+ exports.services = ServiceContainer.getInstance();
91
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,12 @@
1
+ import { TemplateBuilderBase } from './TemplateBuilderBase';
2
+ import { TemplateInputFactory } from './TemplateInputFactory';
3
+ import { FeatureTemplateInput } from './templateTypes';
4
+ export declare class ExecutionTemplateBuilder extends TemplateBuilderBase {
5
+ private readonly inputs;
6
+ constructor(inputs: TemplateInputFactory);
7
+ generateProposalTemplate(input: string | FeatureTemplateInput): string;
8
+ generateTasksTemplate(input: string | FeatureTemplateInput): string;
9
+ generateVerificationTemplate(input: string | FeatureTemplateInput): string;
10
+ generateReviewTemplate(input: string | FeatureTemplateInput): string;
11
+ }
12
+ //# sourceMappingURL=ExecutionTemplateBuilder.d.ts.map