@chongyan/autospec 1.0.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 (243) hide show
  1. package/LICENSE +21 -0
  2. package/README.en.md +472 -0
  3. package/README.md +476 -0
  4. package/bin/autospec.js +3 -0
  5. package/knowledge/README.md +144 -0
  6. package/knowledge/checklists/code.md +182 -0
  7. package/knowledge/checklists/design.md +196 -0
  8. package/knowledge/checklists/release.md +70 -0
  9. package/knowledge/checklists/requirement.md +169 -0
  10. package/knowledge/checklists/test.md +46 -0
  11. package/knowledge/config/README.en.md +44 -0
  12. package/knowledge/config/README.md +44 -0
  13. package/knowledge/config/role-composition.yaml +98 -0
  14. package/knowledge/config/role-extensions.yaml +140 -0
  15. package/knowledge/config/skill-compositions.yaml +142 -0
  16. package/knowledge/config/team-stage.yaml +95 -0
  17. package/knowledge/config/team-tasks.yaml +139 -0
  18. package/knowledge/config/team-triggers.yaml +198 -0
  19. package/knowledge/config/validation-patterns.yaml +137 -0
  20. package/knowledge/domain/README.md +115 -0
  21. package/knowledge/domain/flows/README.md +194 -0
  22. package/knowledge/domain/glossary.md +143 -0
  23. package/knowledge/domain/rules.md +138 -0
  24. package/knowledge/environment/README.en.md +36 -0
  25. package/knowledge/environment/README.md +87 -0
  26. package/knowledge/environment/component-knowledge.md +316 -0
  27. package/knowledge/environment/detection-patterns.yaml +502 -0
  28. package/knowledge/environment/middleware-knowledge.md +237 -0
  29. package/knowledge/environment/template-registry.md +321 -0
  30. package/knowledge/guides/domain-driven-design.md +345 -0
  31. package/knowledge/guides/knowledge-management.md +369 -0
  32. package/knowledge/guides/requirement-engineering.md +329 -0
  33. package/knowledge/guides/stages/ai-effect-evaluator.md +93 -0
  34. package/knowledge/guides/stages/code-implementer.md +205 -0
  35. package/knowledge/guides/stages/code-reviewer.md +111 -0
  36. package/knowledge/guides/stages/consistency-checker.md +177 -0
  37. package/knowledge/guides/stages/design-planner.md +401 -0
  38. package/knowledge/guides/stages/design-reviewer.md +83 -0
  39. package/knowledge/guides/stages/integration-test-runner.md +105 -0
  40. package/knowledge/guides/stages/release-checker.md +205 -0
  41. package/knowledge/guides/stages/requirement-analyzer.md +195 -0
  42. package/knowledge/guides/stages/requirement-reviewer.md +83 -0
  43. package/knowledge/guides/stages/security-reviewer.md +89 -0
  44. package/knowledge/guides/stages/test-context-analyzer.md +250 -0
  45. package/knowledge/guides/stages/test-generator.md +241 -0
  46. package/knowledge/guides/stages/test-planner.md +183 -0
  47. package/knowledge/guides/stages/test-reviewer.md +76 -0
  48. package/knowledge/guides/stages/unit-test-runner.md +83 -0
  49. package/knowledge/guides/support/ai-agent-analyzer.md +362 -0
  50. package/knowledge/guides/support/ai-anomaly-analyzer.md +213 -0
  51. package/knowledge/guides/support/ai-artifact-evaluator.md +192 -0
  52. package/knowledge/guides/support/ai-capability-analyzer.md +193 -0
  53. package/knowledge/guides/support/ai-component-analyzer.md +169 -0
  54. package/knowledge/guides/support/ai-data-validator.md +276 -0
  55. package/knowledge/guides/support/ai-evaluation-planner.md +374 -0
  56. package/knowledge/guides/support/ai-path-evaluator.md +274 -0
  57. package/knowledge/guides/support/ai-pipeline-evaluator.md +219 -0
  58. package/knowledge/guides/support/ai-rag-analyzer.md +339 -0
  59. package/knowledge/guides/support/ai-task-assessor.md +418 -0
  60. package/knowledge/guides/support/ai-test-diagnostics.md +133 -0
  61. package/knowledge/guides/support/complexity-assessor.md +268 -0
  62. package/knowledge/guides/support/component-discovery.md +183 -0
  63. package/knowledge/guides/support/environment-scanner.md +207 -0
  64. package/knowledge/guides/support/environment-validator.md +207 -0
  65. package/knowledge/guides/support/knowledge-generator.md +234 -0
  66. package/knowledge/guides/support/methodology-extractor.md +55 -0
  67. package/knowledge/guides/support/pipeline-protocol.md +438 -0
  68. package/knowledge/guides/support/practice-logger.md +359 -0
  69. package/knowledge/guides/support/scope-inference.md +174 -0
  70. package/knowledge/guides/support/skill-distiller.md +91 -0
  71. package/knowledge/guides/support/skill-updater.md +45 -0
  72. package/knowledge/guides/support/skill-validator.md +72 -0
  73. package/knowledge/guides/support/team-orchestrator.md +323 -0
  74. package/knowledge/guides/support/tech-stack-analyzer.md +139 -0
  75. package/knowledge/guides/support/test-runner.md +254 -0
  76. package/knowledge/guides/system-design.md +352 -0
  77. package/knowledge/organization/ai-native-team.md +318 -0
  78. package/knowledge/organization/team-metrics.md +228 -0
  79. package/knowledge/principles/constitution.md +134 -0
  80. package/knowledge/principles/core-principles.md +368 -0
  81. package/knowledge/principles/design-philosophy.md +877 -0
  82. package/knowledge/principles/evolution.md +553 -0
  83. package/knowledge/process/01-requirement.md +113 -0
  84. package/knowledge/process/02-design.md +123 -0
  85. package/knowledge/process/03-implementation.md +90 -0
  86. package/knowledge/process/04-review.md +80 -0
  87. package/knowledge/process/05-testing.md +90 -0
  88. package/knowledge/process/06-delivery.md +88 -0
  89. package/knowledge/process/README.en.md +38 -0
  90. package/knowledge/process/README.md +48 -0
  91. package/knowledge/process/ai-sdlc.md +475 -0
  92. package/knowledge/process/overview.md +319 -0
  93. package/knowledge/standards/code-review.md +876 -0
  94. package/knowledge/standards/coding-style.md +940 -0
  95. package/knowledge/standards/data-consistency.md +1085 -0
  96. package/knowledge/standards/document-versioning.md +210 -0
  97. package/knowledge/standards/risk-detection.md +186 -0
  98. package/knowledge/templates/ai-evaluation.md +150 -0
  99. package/knowledge/templates/api-design.md +117 -0
  100. package/knowledge/templates/database-design.md +132 -0
  101. package/knowledge/templates/domain-driven-design.md +321 -0
  102. package/knowledge/templates/product-proposal.md +201 -0
  103. package/knowledge/templates/system-design.md +227 -0
  104. package/knowledge/templates/task-breakdown.md +107 -0
  105. package/knowledge/templates/test-case.md +170 -0
  106. package/package.json +53 -0
  107. package/plugins/.claude-plugin/plugin.json +134 -0
  108. package/plugins/agents/roles/ai-engineer.md +129 -0
  109. package/plugins/agents/roles/backend-engineer.md +165 -0
  110. package/plugins/agents/roles/ceo.md +94 -0
  111. package/plugins/agents/roles/data-engineer.md +135 -0
  112. package/plugins/agents/roles/devops-engineer.md +181 -0
  113. package/plugins/agents/roles/frontend-engineer.md +129 -0
  114. package/plugins/agents/roles/product-owner.md +98 -0
  115. package/plugins/agents/roles/quality-engineer.md +129 -0
  116. package/plugins/agents/roles/security-engineer.md +180 -0
  117. package/plugins/agents/roles/tech-lead.md +97 -0
  118. package/plugins/agents/support/blind-comparator.md +88 -0
  119. package/plugins/agents/support/consistency-checker.md +103 -0
  120. package/plugins/agents/support/failure-diagnostician.md +141 -0
  121. package/plugins/agents/support/independent-reviewer.md +80 -0
  122. package/plugins/agents/support/safety-auditor.md +121 -0
  123. package/plugins/agents/support/skill-benchmarker.md +86 -0
  124. package/plugins/agents/support/skill-forger.md +105 -0
  125. package/plugins/agents/support/stage-gate-evaluator.md +121 -0
  126. package/plugins/agents/support/test-coverage-reviewer.md +73 -0
  127. package/plugins/benchmarks/templates/README.md +44 -0
  128. package/plugins/benchmarks/templates/commands/explore-template.yaml +48 -0
  129. package/plugins/benchmarks/templates/pipeline/agile-template.yaml +84 -0
  130. package/plugins/benchmarks/templates/pipeline/waterfall-template.yaml +106 -0
  131. package/plugins/benchmarks/templates/skills/requirement-analyzer-template.yaml +48 -0
  132. package/plugins/commands/README.en.md +96 -0
  133. package/plugins/commands/README.md +96 -0
  134. package/plugins/commands/apply.md +191 -0
  135. package/plugins/commands/archive.md +76 -0
  136. package/plugins/commands/env-export.md +79 -0
  137. package/plugins/commands/env-sync.md +640 -0
  138. package/plugins/commands/env-template.md +223 -0
  139. package/plugins/commands/env-update.md +264 -0
  140. package/plugins/commands/env-validate.md +176 -0
  141. package/plugins/commands/env.md +79 -0
  142. package/plugins/commands/explore.md +76 -0
  143. package/plugins/commands/field-evolve.md +536 -0
  144. package/plugins/commands/memory.md +249 -0
  145. package/plugins/commands/project-evolve.md +821 -0
  146. package/plugins/commands/propose.md +93 -0
  147. package/plugins/commands/review.md +140 -0
  148. package/plugins/commands/run.md +224 -0
  149. package/plugins/commands/status.md +62 -0
  150. package/plugins/commands/validate.md +108 -0
  151. package/plugins/hooks/README.en.md +56 -0
  152. package/plugins/hooks/README.md +56 -0
  153. package/plugins/hooks/ai-project-guard.js +329 -0
  154. package/plugins/hooks/artifact-evaluation-hook.js +237 -0
  155. package/plugins/hooks/constitution-guard.js +211 -0
  156. package/plugins/hooks/environment-autocommit.js +264 -0
  157. package/plugins/hooks/environment-manager.js +778 -0
  158. package/plugins/hooks/execution-tracker.js +354 -0
  159. package/plugins/hooks/frozen-zone-guard.js +140 -0
  160. package/plugins/hooks/layer1-validator.js +423 -0
  161. package/plugins/hooks/lib/artifact-evaluator.js +414 -0
  162. package/plugins/hooks/lib/benchmarks/change-detector.js +390 -0
  163. package/plugins/hooks/lib/benchmarks/evaluator.js +605 -0
  164. package/plugins/hooks/lib/benchmarks/integration-example.js +169 -0
  165. package/plugins/hooks/lib/data-and-ai-detector.js +275 -0
  166. package/plugins/hooks/lib/detection-pattern-loader.js +865 -0
  167. package/plugins/hooks/lib/directory-discovery.js +395 -0
  168. package/plugins/hooks/lib/environment-config-loader.js +341 -0
  169. package/plugins/hooks/lib/environment-detector.js +553 -0
  170. package/plugins/hooks/lib/environment-evolver.js +564 -0
  171. package/plugins/hooks/lib/environment-registry.js +813 -0
  172. package/plugins/hooks/lib/execution-path.js +427 -0
  173. package/plugins/hooks/lib/hook-error-recorder.js +245 -0
  174. package/plugins/hooks/lib/hook-logger.js +538 -0
  175. package/plugins/hooks/lib/hook-runner.js +97 -0
  176. package/plugins/hooks/lib/hook-runner.sh +44 -0
  177. package/plugins/hooks/lib/hook-state-manager.js +480 -0
  178. package/plugins/hooks/lib/memory-extractor.js +377 -0
  179. package/plugins/hooks/lib/memory-manager.js +673 -0
  180. package/plugins/hooks/lib/metrics-analyzer.js +489 -0
  181. package/plugins/hooks/lib/project-evolution/auto-fixer.js +511 -0
  182. package/plugins/hooks/lib/project-evolution/memory-manager.js +346 -0
  183. package/plugins/hooks/lib/project-evolution/pattern-detector.js +476 -0
  184. package/plugins/hooks/lib/project-evolution/semantic-indexer.js +480 -0
  185. package/plugins/hooks/lib/project-structure-detector.js +326 -0
  186. package/plugins/hooks/lib/rollback-tracker.js +346 -0
  187. package/plugins/hooks/lib/source-code-scanner.js +596 -0
  188. package/plugins/hooks/lib/technology-stack-detector.js +374 -0
  189. package/plugins/hooks/lib/test-failure-analyzer.js +375 -0
  190. package/plugins/hooks/lib/test-failure-fixer.js +268 -0
  191. package/plugins/hooks/lib/trace-context.js +277 -0
  192. package/plugins/hooks/lib/validation-patterns.js +415 -0
  193. package/plugins/hooks/memory-sync.js +171 -0
  194. package/plugins/hooks/pipeline-observer.js +413 -0
  195. package/plugins/hooks/scope-sentinel.js +204 -0
  196. package/plugins/hooks/trace-initialization.js +169 -0
  197. package/plugins/memory/templates/code-quality.yaml +149 -0
  198. package/plugins/memory/templates/multi-system.yaml +155 -0
  199. package/plugins/memory/templates/team-habits.yaml +119 -0
  200. package/plugins/memory/templates/testing.yaml +121 -0
  201. package/plugins/skills/README.en.md +47 -0
  202. package/plugins/skills/README.md +104 -0
  203. package/plugins/skills/benchmark-executor/README.md +93 -0
  204. package/plugins/skills/benchmark-executor/SKILL.md +647 -0
  205. package/plugins/skills/benchmark-generator/SKILL.md +349 -0
  206. package/plugins/skills/delivery-stage/SKILL.md +203 -0
  207. package/plugins/skills/design-stage/SKILL.md +216 -0
  208. package/plugins/skills/evolution-process/SKILL.md +291 -0
  209. package/plugins/skills/exploration-phase/SKILL.md +133 -0
  210. package/plugins/skills/implementation-stage/SKILL.md +179 -0
  211. package/plugins/skills/layer1-validation/SKILL.md +79 -0
  212. package/plugins/skills/pending-dashboard/SKILL.md +109 -0
  213. package/plugins/skills/project-evolution/SKILL.md +847 -0
  214. package/plugins/skills/requirement-stage/SKILL.md +183 -0
  215. package/plugins/skills/skill-forge/SKILL.md +223 -0
  216. package/plugins/skills/skill-forge/references/description-guide.md +92 -0
  217. package/plugins/skills/skill-forge/references/quality-rubric.md +104 -0
  218. package/plugins/skills/skill-forge/references/skill-template.md +106 -0
  219. package/plugins/skills/startup-guard/SKILL.md +38 -0
  220. package/plugins/skills/testing-stage/SKILL.md +195 -0
  221. package/scripts/cli/global-init.js +288 -0
  222. package/scripts/cli/global.js +324 -0
  223. package/scripts/cli/index.js +55 -0
  224. package/scripts/cli/init.js +382 -0
  225. package/scripts/cli/list.js +69 -0
  226. package/scripts/cli/org.js +340 -0
  227. package/scripts/cli/update.js +44 -0
  228. package/scripts/config/commands.config.js +145 -0
  229. package/scripts/config/hooks.config.js +197 -0
  230. package/scripts/evolution/evolution-router.js +273 -0
  231. package/scripts/evolution/evolution-signal-collector.js +307 -0
  232. package/scripts/evolution/knowledge-loader.js +346 -0
  233. package/scripts/evolution/marketplace.js +317 -0
  234. package/scripts/evolution/version-manager.js +371 -0
  235. package/scripts/install/agents.js +106 -0
  236. package/scripts/install/commands.js +133 -0
  237. package/scripts/install/constants.js +424 -0
  238. package/scripts/install/hook-logger.js +536 -0
  239. package/scripts/install/hooks.js +110 -0
  240. package/scripts/install/index.js +39 -0
  241. package/scripts/install/skills.js +95 -0
  242. package/scripts/postinstall.js +25 -0
  243. package/scripts/state.js +376 -0
@@ -0,0 +1,340 @@
1
+ /**
2
+ * AutoSpec org command
3
+ *
4
+ * 实现 autospec org 子命令
5
+ * 支持 init/list/members 操作
6
+ */
7
+
8
+ import fs from 'fs';
9
+ import path from 'path';
10
+ import os from 'os';
11
+ import chalk from 'chalk';
12
+ import {
13
+ ORG_AUTOSPEC_DIR,
14
+ ORG_AUTOSPEC_SUBDIRS
15
+ } from '../install/constants.js';
16
+
17
+ /**
18
+ * 获取组织知识库根目录
19
+ */
20
+ function getOrgDir(orgName) {
21
+ return path.join(os.homedir(), ORG_AUTOSPEC_DIR, orgName);
22
+ }
23
+
24
+ /**
25
+ * 获取组织列表文件路径
26
+ */
27
+ function getOrgListPath() {
28
+ return path.join(os.homedir(), ORG_AUTOSPEC_DIR, 'orgs.json');
29
+ }
30
+
31
+ /**
32
+ * 创建目录
33
+ */
34
+ function ensureDir(dir) {
35
+ if (!fs.existsSync(dir)) {
36
+ fs.mkdirSync(dir, { recursive: true });
37
+ }
38
+ }
39
+
40
+ /**
41
+ * 安全读取 JSON
42
+ */
43
+ function safeReadJson(filePath, defaultValue = null) {
44
+ try {
45
+ if (!fs.existsSync(filePath)) {
46
+ return defaultValue;
47
+ }
48
+ return JSON.parse(fs.readFileSync(filePath, 'utf-8'));
49
+ } catch (e) {
50
+ return defaultValue;
51
+ }
52
+ }
53
+
54
+ /**
55
+ * 安全写入 JSON
56
+ */
57
+ function safeWriteJson(filePath, data) {
58
+ try {
59
+ const dir = path.dirname(filePath);
60
+ ensureDir(dir);
61
+ fs.writeFileSync(filePath, JSON.stringify(data, null, 2));
62
+ return true;
63
+ } catch (e) {
64
+ return false;
65
+ }
66
+ }
67
+
68
+ /**
69
+ * 初始化组织知识库
70
+ */
71
+ export function initOrg(orgName, options = {}) {
72
+ const orgDir = getOrgDir(orgName);
73
+ const results = {
74
+ orgCreated: false,
75
+ directoriesCreated: false,
76
+ errors: []
77
+ };
78
+
79
+ console.log(chalk.bold('\n AutoSpec Org Init\n'));
80
+ console.log(` Organization: ${orgName}`);
81
+ console.log(` Target: ${orgDir}`);
82
+ console.log();
83
+
84
+ try {
85
+ // 创建组织目录结构
86
+ const subdirs = Object.values(ORG_AUTOSPEC_SUBDIRS);
87
+ for (const subdir of subdirs) {
88
+ const fullPath = path.join(orgDir, subdir);
89
+ ensureDir(fullPath);
90
+ }
91
+ results.directoriesCreated = true;
92
+
93
+ // 注册组织
94
+ const orgListPath = getOrgListPath();
95
+ const orgList = safeReadJson(orgListPath, { orgs: [] });
96
+
97
+ // 检查是否已存在
98
+ if (orgList.orgs.find(o => o.name === orgName)) {
99
+ console.log(chalk.yellow(` ⚠ 组织 ${orgName} 已存在`));
100
+ return results;
101
+ }
102
+
103
+ // 添加组织
104
+ orgList.orgs.push({
105
+ name: orgName,
106
+ createdAt: new Date().toISOString(),
107
+ ...options
108
+ });
109
+ safeWriteJson(orgListPath, orgList);
110
+
111
+ results.orgCreated = true;
112
+
113
+ console.log(chalk.green(' ✓') + ` 组织 ${orgName} 已创建`);
114
+ console.log(chalk.green(' ✓') + ' 目录结构已创建');
115
+
116
+ console.log(chalk.bold('\n 快速开始\n'));
117
+ console.log(' 组织知识库已初始化,您可以通过以下命令使用:');
118
+ console.log('');
119
+ console.log(chalk.cyan(' 发布技能到组织'));
120
+ console.log(` autospec org publish ${orgName} <skill-name>`);
121
+ console.log('');
122
+ console.log(chalk.cyan(' 查看组织列表'));
123
+ console.log(' autospec org list');
124
+ console.log('');
125
+
126
+ return results;
127
+ } catch (e) {
128
+ results.errors.push(e.message);
129
+ console.log(chalk.red(` ✗ 初始化失败: ${e.message}`));
130
+ return results;
131
+ }
132
+ }
133
+
134
+ /**
135
+ * 列出所有组织
136
+ */
137
+ export function listOrgs(options = {}) {
138
+ const orgListPath = getOrgListPath();
139
+ const orgList = safeReadJson(orgListPath, { orgs: [] });
140
+
141
+ console.log(chalk.bold('\n AutoSpec Org List\n'));
142
+
143
+ if (orgList.orgs.length === 0) {
144
+ console.log(chalk.yellow(' 暂无组织'));
145
+ console.log(chalk.cyan(' 运行 autospec org init <org-name> 创建组织'));
146
+ return { orgs: [] };
147
+ }
148
+
149
+ console.log(` 共 ${orgList.orgs.length} 个组织:\n`);
150
+
151
+ for (const org of orgList.orgs) {
152
+ const orgDir = getOrgDir(org.name);
153
+ const skillsDir = path.join(orgDir, ORG_AUTOSPEC_SUBDIRS.SKILLS);
154
+
155
+ let skillCount = 0;
156
+ if (fs.existsSync(skillsDir)) {
157
+ skillCount = fs.readdirSync(skillsDir).filter(f =>
158
+ fs.statSync(path.join(skillsDir, f)).isDirectory()
159
+ ).length;
160
+ }
161
+
162
+ console.log(` ${chalk.cyan(org.name)}`);
163
+ console.log(` 创建于: ${org.createdAt}`);
164
+ console.log(` Skills: ${skillCount}`);
165
+ console.log('');
166
+ }
167
+
168
+ return { orgs: orgList.orgs };
169
+ }
170
+
171
+ /**
172
+ * 获取组织成员
173
+ */
174
+ export function listOrgMembers(orgName, options = {}) {
175
+ const orgDir = getOrgDir(orgName);
176
+ const membersFile = path.join(orgDir, 'members.json');
177
+ const members = safeReadJson(membersFile, { members: [] });
178
+
179
+ console.log(chalk.bold(`\n AutoSpec Org Members: ${orgName}\n`));
180
+
181
+ if (members.members.length === 0) {
182
+ console.log(chalk.yellow(' 暂无成员'));
183
+ return { members: [] };
184
+ }
185
+
186
+ for (const member of members.members) {
187
+ console.log(` ${chalk.cyan(member.name)} - ${member.role || 'member'}`);
188
+ }
189
+ console.log('');
190
+
191
+ return { members: members.members };
192
+ }
193
+
194
+ /**
195
+ * 添加组织成员
196
+ */
197
+ export function addOrgMember(orgName, memberName, options = {}) {
198
+ const { role = 'member' } = options;
199
+ const orgDir = getOrgDir(orgName);
200
+ const membersFile = path.join(orgDir, 'members.json');
201
+
202
+ const members = safeReadJson(membersFile, { members: [] });
203
+
204
+ // 检查是否已存在
205
+ if (members.members.find(m => m.name === memberName)) {
206
+ console.log(chalk.yellow(` ⚠ 成员 ${memberName} 已存在`));
207
+ return { success: false, error: 'Member already exists' };
208
+ }
209
+
210
+ members.members.push({
211
+ name: memberName,
212
+ role,
213
+ addedAt: new Date().toISOString()
214
+ });
215
+
216
+ safeWriteJson(membersFile, members);
217
+
218
+ console.log(chalk.green(' ✓') + ` 成员 ${memberName} 已添加到组织 ${orgName}`);
219
+ return { success: true, memberName, role };
220
+ }
221
+
222
+ /**
223
+ * 发布技能到组织
224
+ */
225
+ export function publishToOrg(orgName, skillName, options = {}) {
226
+ const { version = '1.0.0', message = '' } = options;
227
+ const orgDir = getOrgDir(orgName);
228
+ const skillsDir = path.join(orgDir, ORG_AUTOSPEC_SUBDIRS.SKILLS);
229
+
230
+ console.log(chalk.bold('\n AutoSpec Org Publish\n'));
231
+ console.log(` Organization: ${orgName}`);
232
+ console.log(` Skill: ${skillName}`);
233
+ console.log(` Version: ${version}`);
234
+ console.log();
235
+
236
+ try {
237
+ // 从项目或源码获取技能
238
+ const projectSkillsDir = path.join(process.cwd(), 'plugins', 'skills', skillName);
239
+ const projectSkillFile = path.join(projectSkillsDir, 'SKILL.md');
240
+ const sourceSkillsDir = path.join(process.cwd(), 'plugins', 'skills');
241
+ const sourceSkillFile = path.join(sourceSkillsDir, skillName, 'SKILL.md');
242
+
243
+ let skillContent = null;
244
+ let sourcePath = null;
245
+
246
+ if (fs.existsSync(projectSkillFile)) {
247
+ skillContent = fs.readFileSync(projectSkillFile, 'utf-8');
248
+ sourcePath = projectSkillsDir;
249
+ } else if (fs.existsSync(sourceSkillFile)) {
250
+ skillContent = fs.readFileSync(sourceSkillFile, 'utf-8');
251
+ sourcePath = path.join(sourceSkillsDir, skillName);
252
+ }
253
+
254
+ if (!skillContent) {
255
+ console.log(chalk.red(` ✗ 技能 ${skillName} 不存在`));
256
+ return { success: false, error: 'Skill not found' };
257
+ }
258
+
259
+ // 创建技能目录
260
+ const targetSkillDir = path.join(skillsDir, skillName, `v${version}`);
261
+ ensureDir(targetSkillDir);
262
+
263
+ // 写入技能文件
264
+ const targetSkillFile = path.join(targetSkillDir, 'SKILL.md');
265
+ fs.writeFileSync(targetSkillFile, skillContent);
266
+
267
+ // 复制 references 目录(如果存在)
268
+ const sourceRefsDir = path.join(sourcePath, 'references');
269
+ if (fs.existsSync(sourceRefsDir)) {
270
+ const targetRefsDir = path.join(targetSkillDir, 'references');
271
+ const { copyDirSync } = require('../install/index.js');
272
+ copyDirSync(sourceRefsDir, targetRefsDir);
273
+ }
274
+
275
+ console.log(chalk.green(' ✓') + ` 技能 ${skillName} v${version} 已发布到组织 ${orgName}`);
276
+ console.log(` Path: ${targetSkillFile}`);
277
+ console.log('');
278
+
279
+ return { success: true, orgName, skillName, version, path: targetSkillFile };
280
+ } catch (e) {
281
+ console.log(chalk.red(` ✗ 发布失败: ${e.message}`));
282
+ return { success: false, error: e.message };
283
+ }
284
+ }
285
+
286
+ /**
287
+ * org 命令入口
288
+ */
289
+ export function orgCommand(action, params, options = {}) {
290
+ switch (action) {
291
+ case 'init':
292
+ if (!params[0]) {
293
+ console.log(chalk.red(' ✗ 请指定组织名称'));
294
+ console.log(' 用法: autospec org init <org-name>');
295
+ return { success: false, error: 'Org name required' };
296
+ }
297
+ return initOrg(params[0], options);
298
+
299
+ case 'list':
300
+ return listOrgs(options);
301
+
302
+ case 'members':
303
+ if (!params[0]) {
304
+ console.log(chalk.red(' ✗ 请指定组织名称'));
305
+ console.log(' 用法: autospec org members <org-name>');
306
+ return { success: false, error: 'Org name required' };
307
+ }
308
+ return listOrgMembers(params[0], options);
309
+
310
+ case 'add-member':
311
+ if (!params[0] || !params[1]) {
312
+ console.log(chalk.red(' ✗ 参数不完整'));
313
+ console.log(' 用法: autospec org add-member <org-name> <member-name>');
314
+ return { success: false, error: 'Missing parameters' };
315
+ }
316
+ return addOrgMember(params[0], params[1], options);
317
+
318
+ case 'publish':
319
+ if (!params[0] || !params[1]) {
320
+ console.log(chalk.red(' ✗ 参数不完整'));
321
+ console.log(' 用法: autospec org publish <org-name> <skill-name>');
322
+ return { success: false, error: 'Missing parameters' };
323
+ }
324
+ return publishToOrg(params[0], params[1], options);
325
+
326
+ default:
327
+ console.log(chalk.red(` ✗ 未知操作: ${action}`));
328
+ console.log(' 可用操作: init, list, members, add-member, publish');
329
+ return { success: false, error: 'Unknown action' };
330
+ }
331
+ }
332
+
333
+ export default {
334
+ initOrg,
335
+ listOrgs,
336
+ listOrgMembers,
337
+ addOrgMember,
338
+ publishToOrg,
339
+ orgCommand
340
+ };
@@ -0,0 +1,44 @@
1
+ /**
2
+ * autospec update command
3
+ */
4
+
5
+ import chalk from 'chalk';
6
+ import path from 'path';
7
+ import fs from 'fs';
8
+ import { initProject } from './init.js';
9
+
10
+ export function updateCommand() {
11
+ const targetDir = process.cwd();
12
+ const autospecDir = path.join(targetDir, '.autospec');
13
+
14
+ if (!fs.existsSync(autospecDir)) {
15
+ console.log(chalk.red('\nAutoSpec not initialized in this project.'));
16
+ console.log('Run: autospec init\n');
17
+ return;
18
+ }
19
+
20
+ console.log(chalk.bold('\n🔄 AutoSpec Update\n'));
21
+
22
+ // Load existing config
23
+ const configPath = path.join(autospecDir, 'config.json');
24
+ let options = {};
25
+ if (fs.existsSync(configPath)) {
26
+ options = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
27
+ }
28
+
29
+ const result = initProject(targetDir, options);
30
+
31
+ if (result.frameworkCopied) {
32
+ console.log(chalk.green('✓') + ' Knowledge files updated');
33
+ }
34
+ if (result.commandsGenerated) {
35
+ console.log(chalk.green('✓') + ' Claude Code commands regenerated');
36
+ }
37
+
38
+ if (result.errors.length > 0) {
39
+ result.errors.forEach(e => console.log(chalk.red(' ✗ ' + e)));
40
+ }
41
+
42
+ console.log(chalk.dim('\nState file preserved.'));
43
+ console.log('');
44
+ }
@@ -0,0 +1,145 @@
1
+ /**
2
+ * AutoSpec 命令生成配置
3
+ *
4
+ * 声明式配置命令结构和模板,支持变量替换。
5
+ */
6
+
7
+ // 用户输入块模板 — 注入到每个命令
8
+ export const USER_INPUT_BLOCK = `## 用户输入
9
+
10
+ \`\`\`
11
+ $ARGUMENTS
12
+ \`\`\`
13
+
14
+ 如果上方有用户输入内容,将其作为**本命令的补充上下文**:
15
+ - 作为本阶段的任务描述、意图说明或额外约束
16
+ - 如果包含特殊指示(如"用TypeScript"、"关注性能"、"跳过CEO探索"),在本阶段执行中遵循
17
+ - 如果为空,按正常流程执行`;
18
+
19
+ /**
20
+ * 命令定义配置
21
+ */
22
+ export const COMMAND_DEFINITIONS = {
23
+ // ============================================================
24
+ // 核心流程命令
25
+ // ============================================================
26
+ run: {
27
+ description: '启动或恢复AutoSpec自主研发流程。统一控制瀑布迭代/敏捷迭代/实验模式/热修复四种模式,无人值守执行。',
28
+ templateFile: 'run.md'
29
+ },
30
+ explore: {
31
+ description: '"我先想想…" — 需求探索阶段。包含CEO想法对齐 + 需求分析。',
32
+ templateFile: 'explore.md'
33
+ },
34
+ propose: {
35
+ description: '"就这么干,方案写下来" — 方案设计阶段。包含技术方案设计。',
36
+ templateFile: 'propose.md'
37
+ },
38
+ apply: {
39
+ description: '"开工,按单子做" — 实施阶段。包含编码实现 + 代码审查 + QA测试。',
40
+ templateFile: 'apply.md'
41
+ },
42
+ archive: {
43
+ description: '"做完了,收工归档" — 交付归档阶段。包含交付部署 + 自进化归档。',
44
+ templateFile: 'archive.md'
45
+ },
46
+
47
+ // ============================================================
48
+ // 状态与验证命令
49
+ // ============================================================
50
+ status: {
51
+ description: '查看当前AutoSpec流程状态,AI提供下一步建议',
52
+ templateFile: 'status.md'
53
+ },
54
+ review: {
55
+ description: '审查各阶段交付物(需求/设计/代码/测试),评估产出质量',
56
+ templateFile: 'review.md'
57
+ },
58
+ validate: {
59
+ description: '运行Layer1确定性验证,AI分析结果并提供修复建议',
60
+ templateFile: 'validate.md'
61
+ },
62
+
63
+ // ============================================================
64
+ // 环境管理命令
65
+ // ============================================================
66
+ env: {
67
+ description: '查看当前环境配置状态',
68
+ templateFile: 'env.md'
69
+ },
70
+ 'env-validate': {
71
+ description: '验证环境知识配置的完整性和有效性',
72
+ templateFile: 'env-validate.md'
73
+ },
74
+ 'env-sync': {
75
+ description: '同步环境知识 - 本地扫描或从 Git/在线文档/npm 导入',
76
+ templateFile: 'env-sync.md'
77
+ },
78
+ 'env-export': {
79
+ description: '导出当前项目的知识库',
80
+ templateFile: 'env-export.md'
81
+ },
82
+ 'env-template': {
83
+ description: '查看和管理环境知识模板',
84
+ templateFile: 'env-template.md'
85
+ },
86
+ 'env-update': {
87
+ description: '将本地环境知识变更提交到知识源(Git/在线文档/本地文件)',
88
+ templateFile: 'env-update.md'
89
+ },
90
+
91
+ // ============================================================
92
+ // 记忆管理命令
93
+ // ============================================================
94
+ memory: {
95
+ description: '管理项目记忆系统 - 查看状态、搜索记忆、手动添加记忆、导出导入',
96
+ templateFile: 'memory.md'
97
+ },
98
+
99
+ // ============================================================
100
+ // 自进化命令
101
+ // ============================================================
102
+ 'project-evolve': {
103
+ description: 'AI Native 项目自我进化:智能感知、自动评测、自适应修复',
104
+ templateFile: 'project-evolve.md'
105
+ },
106
+ 'field-evolve': {
107
+ description: '实战项目自进化:执行 benchmarks、评估分析、自动修复和技能蒸馏',
108
+ templateFile: 'field-evolve.md'
109
+ }
110
+
111
+ };
112
+
113
+ /**
114
+ * 获取命令定义
115
+ */
116
+ export function getCommandDefinition(name) {
117
+ return COMMAND_DEFINITIONS[name];
118
+ }
119
+
120
+ /**
121
+ * 获取所有命令名称
122
+ */
123
+ export function getAllCommandNames() {
124
+ return Object.keys(COMMAND_DEFINITIONS);
125
+ }
126
+
127
+ /**
128
+ * 变量替换函数
129
+ */
130
+ export function replaceVariables(template, variables) {
131
+ let result = template;
132
+ for (const [key, value] of Object.entries(variables)) {
133
+ const regex = new RegExp(`\\$\\{${key}\\}`, 'g');
134
+ result = result.replace(regex, value);
135
+ }
136
+ return result;
137
+ }
138
+
139
+ export default {
140
+ USER_INPUT_BLOCK,
141
+ COMMAND_DEFINITIONS,
142
+ getCommandDefinition,
143
+ getAllCommandNames,
144
+ replaceVariables
145
+ };