speccore 8.3.21 → 8.3.26
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/README.md +7 -4
- package/dist/cli.js +19 -3
- package/dist/cli.js.map +1 -1
- package/dist/commands/analyze.d.ts.map +1 -1
- package/dist/commands/analyze.js +24 -8
- package/dist/commands/analyze.js.map +1 -1
- package/dist/commands/config.d.ts +3 -1
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +206 -90
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/context-output.d.ts.map +1 -1
- package/dist/commands/context-output.js +0 -10
- package/dist/commands/context-output.js.map +1 -1
- package/dist/commands/dev.js +6 -7
- package/dist/commands/dev.js.map +1 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +140 -0
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/done.js +51 -20
- package/dist/commands/done.js.map +1 -1
- package/dist/commands/execute.d.ts.map +1 -1
- package/dist/commands/execute.js +147 -45
- package/dist/commands/execute.js.map +1 -1
- package/dist/commands/help.js +5 -0
- package/dist/commands/help.js.map +1 -1
- package/dist/commands/init.d.ts +0 -2
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +9 -51
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/iteration/split.js +29 -17
- package/dist/commands/iteration/split.js.map +1 -1
- package/dist/commands/status-panel.d.ts.map +1 -1
- package/dist/commands/status-panel.js +13 -48
- package/dist/commands/status-panel.js.map +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +32 -0
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +206 -8
- package/dist/commands/update.js.map +1 -1
- package/dist/commands/verdict.d.ts +16 -0
- package/dist/commands/verdict.d.ts.map +1 -0
- package/dist/commands/verdict.js +189 -0
- package/dist/commands/verdict.js.map +1 -0
- package/dist/commands/verify.d.ts.map +1 -1
- package/dist/commands/verify.js +3 -2
- package/dist/commands/verify.js.map +1 -1
- package/dist/core/analyze-engine.d.ts.map +1 -1
- package/dist/core/analyze-engine.js +3 -4
- package/dist/core/analyze-engine.js.map +1 -1
- package/dist/core/arbitration/arbitration-engine.d.ts +36 -0
- package/dist/core/arbitration/arbitration-engine.d.ts.map +1 -0
- package/dist/core/arbitration/arbitration-engine.js +142 -0
- package/dist/core/arbitration/arbitration-engine.js.map +1 -0
- package/dist/core/arbitration/conflict-detector.d.ts +15 -0
- package/dist/core/arbitration/conflict-detector.d.ts.map +1 -0
- package/dist/core/arbitration/conflict-detector.js +78 -0
- package/dist/core/arbitration/conflict-detector.js.map +1 -0
- package/dist/core/arbitration/conflict-types.d.ts +34 -0
- package/dist/core/arbitration/conflict-types.d.ts.map +1 -0
- package/dist/core/arbitration/conflict-types.js +8 -0
- package/dist/core/arbitration/conflict-types.js.map +1 -0
- package/dist/core/arbitration/contract-registry.d.ts +15 -0
- package/dist/core/arbitration/contract-registry.d.ts.map +1 -0
- package/dist/core/arbitration/contract-registry.js +185 -0
- package/dist/core/arbitration/contract-registry.js.map +1 -0
- package/dist/core/arbitration/contract-types.d.ts +33 -0
- package/dist/core/arbitration/contract-types.d.ts.map +1 -0
- package/dist/core/arbitration/contract-types.js +8 -0
- package/dist/core/arbitration/contract-types.js.map +1 -0
- package/dist/core/arbitration/index.d.ts +16 -0
- package/dist/core/arbitration/index.d.ts.map +1 -0
- package/dist/core/arbitration/index.js +32 -0
- package/dist/core/arbitration/index.js.map +1 -0
- package/dist/core/arbitration/l1-auto-arbiter.d.ts +19 -0
- package/dist/core/arbitration/l1-auto-arbiter.d.ts.map +1 -0
- package/dist/core/arbitration/l1-auto-arbiter.js +41 -0
- package/dist/core/arbitration/l1-auto-arbiter.js.map +1 -0
- package/dist/core/arbitration/l2-ai-arbiter.d.ts +19 -0
- package/dist/core/arbitration/l2-ai-arbiter.d.ts.map +1 -0
- package/dist/core/arbitration/l2-ai-arbiter.js +57 -0
- package/dist/core/arbitration/l2-ai-arbiter.js.map +1 -0
- package/dist/core/arbitration/l3-human-arbiter.d.ts +24 -0
- package/dist/core/arbitration/l3-human-arbiter.d.ts.map +1 -0
- package/dist/core/arbitration/l3-human-arbiter.js +65 -0
- package/dist/core/arbitration/l3-human-arbiter.js.map +1 -0
- package/dist/core/arbitration/verdict-generator.d.ts +16 -0
- package/dist/core/arbitration/verdict-generator.d.ts.map +1 -0
- package/dist/core/arbitration/verdict-generator.js +166 -0
- package/dist/core/arbitration/verdict-generator.js.map +1 -0
- package/dist/core/arbitration/verdict-types.d.ts +49 -0
- package/dist/core/arbitration/verdict-types.d.ts.map +1 -0
- package/dist/core/arbitration/verdict-types.js +8 -0
- package/dist/core/arbitration/verdict-types.js.map +1 -0
- package/dist/core/ask-config.d.ts +4 -3
- package/dist/core/ask-config.d.ts.map +1 -1
- package/dist/core/ask-config.js +79 -1
- package/dist/core/ask-config.js.map +1 -1
- package/dist/core/ask-engine.d.ts.map +1 -1
- package/dist/core/ask-engine.js +7 -0
- package/dist/core/ask-engine.js.map +1 -1
- package/dist/core/intent-recognition.d.ts +1 -1
- package/dist/core/intent-recognition.d.ts.map +1 -1
- package/dist/core/intent-recognition.js +10 -0
- package/dist/core/intent-recognition.js.map +1 -1
- package/dist/core/pattern-detector.d.ts +24 -0
- package/dist/core/pattern-detector.d.ts.map +1 -1
- package/dist/core/pattern-detector.js +172 -3
- package/dist/core/pattern-detector.js.map +1 -1
- package/dist/core/quality-audit.d.ts.map +1 -1
- package/dist/core/quality-audit.js +23 -15
- package/dist/core/quality-audit.js.map +1 -1
- package/dist/core/spec-skeleton.d.ts.map +1 -1
- package/dist/core/spec-skeleton.js +35 -12
- package/dist/core/spec-skeleton.js.map +1 -1
- package/dist/core/unified-config.d.ts +161 -27
- package/dist/core/unified-config.d.ts.map +1 -1
- package/dist/core/unified-config.js +856 -82
- package/dist/core/unified-config.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAiBA,MAAM,WAAW,aAAa;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,IAAI,CAUnC;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CA+DzE"}
|
package/dist/commands/config.js
CHANGED
|
@@ -2,9 +2,13 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.installHooks = installHooks;
|
|
4
4
|
exports.configCommand = configCommand;
|
|
5
|
+
/**
|
|
6
|
+
* config — 配置管理命令
|
|
7
|
+
* v8.3.25+: 统一使用 .speccore.yml,支持 --list / --upgrade
|
|
8
|
+
*/
|
|
5
9
|
const fs_extra_1 = require("fs-extra");
|
|
6
10
|
const logger_1 = require("../utils/logger");
|
|
7
|
-
const
|
|
11
|
+
const unified_config_1 = require("../core/unified-config");
|
|
8
12
|
/**
|
|
9
13
|
* Install Git hooks (pre-commit + pre-push)
|
|
10
14
|
*/
|
|
@@ -26,119 +30,238 @@ async function configCommand(options) {
|
|
|
26
30
|
const spinner = new logger_1.Spinner('Processing configuration');
|
|
27
31
|
spinner.start();
|
|
28
32
|
try {
|
|
29
|
-
//
|
|
30
|
-
if (options.
|
|
33
|
+
// --upgrade: 升级配置结构
|
|
34
|
+
if (options.upgrade) {
|
|
31
35
|
spinner.stop();
|
|
32
|
-
|
|
36
|
+
if (options.project) {
|
|
37
|
+
await (0, unified_config_1.upgradeProjectConfig)();
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
await (0, unified_config_1.upgradeConfig)();
|
|
41
|
+
}
|
|
33
42
|
return;
|
|
34
43
|
}
|
|
35
|
-
//
|
|
36
|
-
if (options.
|
|
44
|
+
// --list: 列出所有配置
|
|
45
|
+
if (options.list) {
|
|
37
46
|
spinner.stop();
|
|
38
|
-
|
|
47
|
+
if (options.project) {
|
|
48
|
+
await printProjectConfigList();
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
await printConfigList();
|
|
52
|
+
}
|
|
39
53
|
return;
|
|
40
54
|
}
|
|
55
|
+
// --get: 读取配置项
|
|
41
56
|
if (options.get) {
|
|
42
|
-
const
|
|
43
|
-
|
|
57
|
+
const config = await (0, unified_config_1.loadConfig)();
|
|
58
|
+
const value = getValueByPath(config, options.get);
|
|
59
|
+
spinner.stop(value !== undefined ? `${options.get} = ${JSON.stringify(value)}` : `${options.get}: Not set`);
|
|
44
60
|
return;
|
|
45
61
|
}
|
|
62
|
+
// --set: 设置配置项
|
|
46
63
|
if (options.set) {
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
spinner.stop(
|
|
64
|
+
spinner.stop();
|
|
65
|
+
await handleSet(options.set);
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
// CONSTITUTION.md spec-rule 配置(保留旧功能)
|
|
69
|
+
if (options.rule && options.set) {
|
|
70
|
+
spinner.stop();
|
|
71
|
+
await setSpecRule(options.rule, options.set);
|
|
54
72
|
return;
|
|
55
73
|
}
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
spinner.stop(
|
|
74
|
+
// TECH_STACK.md 技术栈配置(保留旧功能)
|
|
75
|
+
if (options.tech && options.set) {
|
|
76
|
+
spinner.stop();
|
|
77
|
+
await setTechStack(options.tech, options.set);
|
|
59
78
|
return;
|
|
60
79
|
}
|
|
61
|
-
//
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
console.log(config);
|
|
80
|
+
// 无参数:显示帮助
|
|
81
|
+
spinner.stop();
|
|
82
|
+
printHelp();
|
|
65
83
|
}
|
|
66
84
|
catch (error) {
|
|
67
85
|
spinner.fail(`Config operation failed: ${error}`);
|
|
68
86
|
throw error;
|
|
69
87
|
}
|
|
70
88
|
}
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
const
|
|
76
|
-
|
|
77
|
-
//
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
89
|
+
// ─────────────────────────────────────────
|
|
90
|
+
// --list: 列出所有配置项
|
|
91
|
+
// ─────────────────────────────────────────
|
|
92
|
+
async function printConfigList() {
|
|
93
|
+
const { config, warnings } = await (0, unified_config_1.loadConfigWithMeta)();
|
|
94
|
+
logger_1.logger.info('\n⚙️ .speccore.yml 系统配置列表\n');
|
|
95
|
+
// schema_version
|
|
96
|
+
logger_1.logger.info(`schema_version: ${config.schema_version}`);
|
|
97
|
+
// quality_gates
|
|
98
|
+
logger_1.logger.info('quality_gates:');
|
|
99
|
+
logger_1.logger.info(` enforce_testing: ${config.quality_gates.enforce_testing}`);
|
|
100
|
+
logger_1.logger.info(` enforce_review: ${config.quality_gates.enforce_review}`);
|
|
101
|
+
logger_1.logger.info(` require_pr: ${config.quality_gates.require_pr}`);
|
|
102
|
+
// arbitration
|
|
103
|
+
logger_1.logger.info('arbitration:');
|
|
104
|
+
logger_1.logger.info(` enabled: ${config.arbitration.enabled}`);
|
|
105
|
+
logger_1.logger.info(` mode: ${config.arbitration.mode}`);
|
|
106
|
+
// settings
|
|
107
|
+
logger_1.logger.info('settings:');
|
|
108
|
+
logger_1.logger.info(` assignee.enabled: ${config.settings.assignee.enabled}`);
|
|
109
|
+
logger_1.logger.info(` assignee.mode: ${config.settings.assignee.mode}`);
|
|
110
|
+
logger_1.logger.info(` trace.enabled: ${config.settings.trace.enabled}`);
|
|
111
|
+
logger_1.logger.info(` patterns.auto_save: ${config.settings.patterns.auto_save}`);
|
|
112
|
+
logger_1.logger.info(` plan.parallel_suggest: ${config.settings.plan.parallel_suggest}`);
|
|
113
|
+
logger_1.logger.info(` sync.auto_check: ${config.settings.sync.auto_check}`);
|
|
114
|
+
logger_1.logger.info(` validation.strict_mode: ${config.settings.validation.strict_mode}`);
|
|
115
|
+
logger_1.logger.info(` archive.auto_cleanup: ${config.settings.archive.auto_cleanup}`);
|
|
116
|
+
logger_1.logger.info(` review.check_assignee: ${config.settings.review.check_assignee}`);
|
|
117
|
+
// ask
|
|
118
|
+
logger_1.logger.info('ask.routing.mode: ' + config.ask.routing.mode);
|
|
119
|
+
logger_1.logger.info(`ask.llm_providers: ${config.ask.llm_providers.length} 个`);
|
|
120
|
+
if (warnings.length > 0) {
|
|
121
|
+
logger_1.logger.info('\n⚠️ 配置警告:');
|
|
122
|
+
for (const w of warnings)
|
|
123
|
+
logger_1.logger.info(` ${w}`);
|
|
86
124
|
}
|
|
87
|
-
|
|
125
|
+
logger_1.logger.info('\n💡 使用 speccore config --get <path> 查看具体值');
|
|
126
|
+
logger_1.logger.info('💡 使用 speccore config --upgrade 升级系统配置');
|
|
127
|
+
logger_1.logger.info('💡 使用 speccore config --list --project 查看项目配置');
|
|
128
|
+
logger_1.logger.info('💡 完整配置参考见 docs/config-reference.md\n');
|
|
88
129
|
}
|
|
89
|
-
function
|
|
90
|
-
|
|
130
|
+
async function printProjectConfigList() {
|
|
131
|
+
const { config, warnings } = await (0, unified_config_1.loadProjectConfigWithMeta)();
|
|
132
|
+
logger_1.logger.info('\n📁 .speccore/PROJECT.yaml 项目配置列表\n');
|
|
133
|
+
// schema_version
|
|
134
|
+
logger_1.logger.info(`schema_version: ${config.schema_version}`);
|
|
135
|
+
// project
|
|
136
|
+
logger_1.logger.info(`project.name: ${config.project.name}`);
|
|
137
|
+
if (config.project.description) {
|
|
138
|
+
logger_1.logger.info(`project.description: ${config.project.description}`);
|
|
139
|
+
}
|
|
140
|
+
if (config.project.version) {
|
|
141
|
+
logger_1.logger.info(`project.version: ${config.project.version}`);
|
|
142
|
+
}
|
|
143
|
+
// platforms
|
|
144
|
+
if (config.platforms.length > 0) {
|
|
145
|
+
logger_1.logger.info(`platforms: ${config.platforms.map(p => p.name).join(', ')}`);
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
logger_1.logger.info('platforms: (空)');
|
|
149
|
+
}
|
|
150
|
+
// git
|
|
151
|
+
logger_1.logger.info('git:');
|
|
152
|
+
logger_1.logger.info(` default_base: ${config.git.default_base}`);
|
|
153
|
+
logger_1.logger.info(` branch_prefix: ${config.git.branch_prefix}`);
|
|
154
|
+
logger_1.logger.info(` protected_branches: [${config.git.protected_branches.join(', ')}]`);
|
|
155
|
+
// code_scope
|
|
156
|
+
logger_1.logger.info(`code_scope: [${config.code_scope.join(', ')}]`);
|
|
157
|
+
if (warnings.length > 0) {
|
|
158
|
+
logger_1.logger.info('\n⚠️ 配置警告:');
|
|
159
|
+
for (const w of warnings)
|
|
160
|
+
logger_1.logger.info(` ${w}`);
|
|
161
|
+
}
|
|
162
|
+
logger_1.logger.info('\n💡 使用 speccore config --upgrade --project 升级项目配置');
|
|
163
|
+
logger_1.logger.info('💡 完整配置参考见 docs/config-reference.md\n');
|
|
164
|
+
}
|
|
165
|
+
// ─────────────────────────────────────────
|
|
166
|
+
// --set: 设置配置项
|
|
167
|
+
// ─────────────────────────────────────────
|
|
168
|
+
async function handleSet(setExpr) {
|
|
169
|
+
// 支持两种格式: --set key=value 或 --set key value(由 CLI parser 处理)
|
|
170
|
+
const eqIndex = setExpr.indexOf('=');
|
|
171
|
+
if (eqIndex === -1) {
|
|
172
|
+
logger_1.logger.error('格式错误。使用: speccore config --set key=value');
|
|
173
|
+
logger_1.logger.info(' 示例: speccore config --set arbitration.mode=l1-only');
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
const key = setExpr.slice(0, eqIndex).trim();
|
|
177
|
+
const rawValue = setExpr.slice(eqIndex + 1).trim();
|
|
178
|
+
const config = await (0, unified_config_1.loadConfig)();
|
|
179
|
+
const value = parseSetValue(rawValue);
|
|
180
|
+
if (!setValueByPath(config, key, value)) {
|
|
181
|
+
logger_1.logger.error(`未知配置项: ${key}`);
|
|
182
|
+
logger_1.logger.info(' 使用 speccore config --list 查看所有配置项');
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
await (0, unified_config_1.saveConfig)(config);
|
|
186
|
+
logger_1.logger.success(`已设置: ${key} = ${JSON.stringify(value)}`);
|
|
187
|
+
}
|
|
188
|
+
function parseSetValue(raw) {
|
|
189
|
+
if (raw === 'true')
|
|
91
190
|
return true;
|
|
92
|
-
if (
|
|
191
|
+
if (raw === 'false')
|
|
93
192
|
return false;
|
|
94
|
-
|
|
95
|
-
|
|
193
|
+
if (raw === 'null')
|
|
194
|
+
return null;
|
|
195
|
+
const num = Number(raw);
|
|
196
|
+
if (!isNaN(num) && raw !== '')
|
|
96
197
|
return num;
|
|
97
|
-
return
|
|
98
|
-
}
|
|
99
|
-
async function getConfig(key) {
|
|
100
|
-
const config = await loadConfig();
|
|
101
|
-
return String(config[key] ?? 'Not set');
|
|
198
|
+
return raw;
|
|
102
199
|
}
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
200
|
+
// ─────────────────────────────────────────
|
|
201
|
+
// 路径操作(点号路径)
|
|
202
|
+
// ─────────────────────────────────────────
|
|
203
|
+
function getValueByPath(obj, path) {
|
|
204
|
+
const parts = path.split('.');
|
|
205
|
+
let current = obj;
|
|
206
|
+
for (const part of parts) {
|
|
207
|
+
if (current === null || current === undefined)
|
|
208
|
+
return undefined;
|
|
209
|
+
if (typeof current !== 'object')
|
|
210
|
+
return undefined;
|
|
211
|
+
current = current[part];
|
|
107
212
|
}
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
}
|
|
213
|
+
return current;
|
|
214
|
+
}
|
|
215
|
+
function setValueByPath(obj, path, value) {
|
|
216
|
+
const parts = path.split('.');
|
|
217
|
+
let current = obj;
|
|
218
|
+
for (let i = 0; i < parts.length - 1; i++) {
|
|
219
|
+
const part = parts[i];
|
|
220
|
+
if (current === null || current === undefined)
|
|
221
|
+
return false;
|
|
222
|
+
if (typeof current !== 'object')
|
|
223
|
+
return false;
|
|
224
|
+
current = current[part];
|
|
121
225
|
}
|
|
122
|
-
|
|
123
|
-
|
|
226
|
+
const lastPart = parts[parts.length - 1];
|
|
227
|
+
if (current === null || current === undefined)
|
|
228
|
+
return false;
|
|
229
|
+
if (typeof current !== 'object')
|
|
230
|
+
return false;
|
|
231
|
+
// 检查字段是否存在于 DEFAULT_CONFIG 中(防止写入任意字段)
|
|
232
|
+
const defaultValue = getValueByPath(unified_config_1.DEFAULT_CONFIG, path);
|
|
233
|
+
if (defaultValue === undefined && !isValidDynamicPath(path)) {
|
|
234
|
+
return false;
|
|
124
235
|
}
|
|
125
|
-
|
|
126
|
-
|
|
236
|
+
current[lastPart] = value;
|
|
237
|
+
return true;
|
|
238
|
+
}
|
|
239
|
+
function isValidDynamicPath(path) {
|
|
240
|
+
// 允许动态路径,如 platforms[0].name
|
|
241
|
+
return path.startsWith('platforms') || path.startsWith('git');
|
|
127
242
|
}
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
243
|
+
// ─────────────────────────────────────────
|
|
244
|
+
// 帮助信息
|
|
245
|
+
// ─────────────────────────────────────────
|
|
246
|
+
function printHelp() {
|
|
247
|
+
logger_1.logger.info('\n⚙️ speccore config — 配置管理\n');
|
|
248
|
+
logger_1.logger.info('用法:');
|
|
249
|
+
logger_1.logger.info(' speccore config --list 列出系统配置(.speccore.yml)');
|
|
250
|
+
logger_1.logger.info(' speccore config --list --project 列出项目配置(.speccore/PROJECT.yaml)');
|
|
251
|
+
logger_1.logger.info(' speccore config --get <path> 读取配置项');
|
|
252
|
+
logger_1.logger.info(' speccore config --set <path>=<value> 设置配置项');
|
|
253
|
+
logger_1.logger.info(' speccore config --upgrade 升级系统配置结构');
|
|
254
|
+
logger_1.logger.info(' speccore config --upgrade --project 升级项目配置结构');
|
|
255
|
+
logger_1.logger.info('');
|
|
256
|
+
logger_1.logger.info('示例:');
|
|
257
|
+
logger_1.logger.info(' speccore config --get arbitration.mode');
|
|
258
|
+
logger_1.logger.info(' speccore config --set arbitration.mode=l1-only');
|
|
259
|
+
logger_1.logger.info(' speccore config --set settings.patterns.auto_save=off');
|
|
260
|
+
logger_1.logger.info('');
|
|
261
|
+
logger_1.logger.info('完整配置参考: docs/config-reference.md\n');
|
|
139
262
|
}
|
|
140
263
|
// ============================================================
|
|
141
|
-
// CONSTITUTION.md spec-rule
|
|
264
|
+
// CONSTITUTION.md spec-rule 写入(保留旧功能)
|
|
142
265
|
// ============================================================
|
|
143
266
|
const CONSTITUTION_PATH = '.speccore/CONSTITUTION.md';
|
|
144
267
|
async function setSpecRule(ruleName, value) {
|
|
@@ -147,22 +270,18 @@ async function setSpecRule(ruleName, value) {
|
|
|
147
270
|
return;
|
|
148
271
|
}
|
|
149
272
|
let content = await (0, fs_extra_1.readFile)(CONSTITUTION_PATH, 'utf-8');
|
|
150
|
-
// 标准化口语描述
|
|
151
273
|
const normalized = normalizeRuleValue(ruleName, value);
|
|
152
274
|
const ruleBlock = `<!-- spec-rule: ${ruleName} -->\n- ${normalized}\n<!-- /spec-rule -->`;
|
|
153
|
-
// 查找已有 spec-rule 区块并更新
|
|
154
275
|
const ruleRegex = new RegExp(`<!--\\s*spec-rule:\\s*${ruleName}\\s*-->[\\s\\S]*?<!--\\s*/spec-rule\\s*-->`, 'i');
|
|
155
276
|
if (ruleRegex.test(content)) {
|
|
156
277
|
content = content.replace(ruleRegex, ruleBlock);
|
|
157
278
|
logger_1.logger.info(`已更新 spec-rule: ${ruleName}`);
|
|
158
279
|
}
|
|
159
280
|
else {
|
|
160
|
-
// 找到 ## 代码规范 章节并追加
|
|
161
281
|
if (content.includes('## 代码规范')) {
|
|
162
282
|
content = content.replace(/(## 代码规范[^\n]*\n)/, `$1${ruleBlock}\n`);
|
|
163
283
|
}
|
|
164
284
|
else {
|
|
165
|
-
// 追加到文件末尾
|
|
166
285
|
content += `\n\n## 代码规范\n\n${ruleBlock}\n`;
|
|
167
286
|
}
|
|
168
287
|
logger_1.logger.info(`已新增 spec-rule: ${ruleName}`);
|
|
@@ -172,7 +291,6 @@ async function setSpecRule(ruleName, value) {
|
|
|
172
291
|
logger_1.logger.info(' 💡 下次 speccore execute 将自动应用此规则');
|
|
173
292
|
}
|
|
174
293
|
function normalizeRuleValue(ruleName, value) {
|
|
175
|
-
// 去掉语气词 + 口语前缀
|
|
176
294
|
let v = value.replace(/[了啦啊呢嗯哈哦]$/, '').trim();
|
|
177
295
|
v = v.replace(/^(改成|换成?|用|用的是|统一用|使用)\s*/i, '').trim();
|
|
178
296
|
switch (ruleName) {
|
|
@@ -191,9 +309,8 @@ function normalizeRuleValue(ruleName, value) {
|
|
|
191
309
|
}
|
|
192
310
|
}
|
|
193
311
|
// ============================================================
|
|
194
|
-
// TECH_STACK.md
|
|
312
|
+
// TECH_STACK.md 技术栈写入(保留旧功能)
|
|
195
313
|
// ============================================================
|
|
196
|
-
// v7.2.0+: 全局技术文档统一放在 overview/ 子目录下
|
|
197
314
|
const TECH_STACK_PATH_NEW = '.speccore/GLOBAL/overview/TECH_STACK.md';
|
|
198
315
|
const TECH_STACK_PATH_LEGACY = '.speccore/GLOBAL/TECH_STACK.md';
|
|
199
316
|
async function resolveTechStackPath() {
|
|
@@ -220,7 +337,6 @@ async function setTechStack(target, value) {
|
|
|
220
337
|
else {
|
|
221
338
|
logger_1.logger.warn(`未找到 tech-stack: ${target} 区块,请在 TECH_STACK.md 中手动添加`);
|
|
222
339
|
}
|
|
223
|
-
// 始终写入新路径
|
|
224
340
|
await (0, fs_extra_1.writeFile)(TECH_STACK_PATH_NEW, content);
|
|
225
341
|
logger_1.logger.info(` ${target}: ${value}`);
|
|
226
342
|
logger_1.logger.info(' 💡 下次 speccore execute 将显示此技术栈');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-output.d.ts","sourceRoot":"","sources":["../../src/commands/context-output.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"context-output.d.ts","sourceRoot":"","sources":["../../src/commands/context-output.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;IAC7B,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,wBAAsB,cAAc,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CA8F3E"}
|
|
@@ -7,7 +7,6 @@ exports.contextCommand = contextCommand;
|
|
|
7
7
|
const fs_extra_1 = require("fs-extra");
|
|
8
8
|
const path_1 = require("path");
|
|
9
9
|
const logger_1 = require("../utils/logger");
|
|
10
|
-
const unified_config_1 = require("../core/unified-config");
|
|
11
10
|
const context_1 = require("../core/context");
|
|
12
11
|
async function contextCommand(options) {
|
|
13
12
|
// ── 切换迭代模式 ──
|
|
@@ -54,7 +53,6 @@ async function contextCommand(options) {
|
|
|
54
53
|
const specsDir = (0, path_1.join)(taskBase, '00-specs');
|
|
55
54
|
const backendDir = (await (0, fs_extra_1.pathExists)((0, path_1.join)(specsDir, 'REQ.md'))) ? specsDir : (0, path_1.join)(taskBase, 'backend');
|
|
56
55
|
const sharedDir = (0, path_1.join)(taskBase, '_shared');
|
|
57
|
-
const config = await (0, unified_config_1.loadConfig)();
|
|
58
56
|
// Collect context
|
|
59
57
|
const context = [];
|
|
60
58
|
// CONSTITUTION
|
|
@@ -93,14 +91,6 @@ async function contextCommand(options) {
|
|
|
93
91
|
const test = await (0, fs_extra_1.readFile)(testPath, 'utf-8');
|
|
94
92
|
context.push(test.slice(0, 1000));
|
|
95
93
|
}
|
|
96
|
-
// Tech stack
|
|
97
|
-
if (config.tech_stack) {
|
|
98
|
-
context.push('\n## 技术栈\n');
|
|
99
|
-
for (const [k, v] of Object.entries(config.tech_stack)) {
|
|
100
|
-
if (v)
|
|
101
|
-
context.push(`- ${k}: ${v}`);
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
94
|
const output = context.join('\n');
|
|
105
95
|
logger_1.logger.info(`\n📋 ${taskEntry.name} 上下文 (${output.length} 字符):\n`);
|
|
106
96
|
logger_1.logger.info(output);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-output.js","sourceRoot":"","sources":["../../src/commands/context-output.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"context-output.js","sourceRoot":"","sources":["../../src/commands/context-output.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/dev.js
CHANGED
|
@@ -44,7 +44,6 @@ const child_process_1 = require("child_process");
|
|
|
44
44
|
const logger_1 = require("../utils/logger");
|
|
45
45
|
const ask_host_ai_1 = require("../core/ask-host-ai");
|
|
46
46
|
const context_1 = require("../core/context");
|
|
47
|
-
const spec_paths_1 = require("../core/spec-paths");
|
|
48
47
|
const ask_host_ai_2 = require("../core/ask-host-ai");
|
|
49
48
|
const pipeline_engine_1 = require("../core/pipeline-engine");
|
|
50
49
|
const questions_1 = require("../core/questions");
|
|
@@ -124,7 +123,7 @@ async function devCommand(options) {
|
|
|
124
123
|
}
|
|
125
124
|
const iterDir = `Iteration-${iteration}`;
|
|
126
125
|
const legacyReq = (0, path_1.join)(iterDir, '010-requirements', 'REQUIREMENT.md');
|
|
127
|
-
const analysis =
|
|
126
|
+
const analysis = (0, path_1.join)(iterDir, '020-specs', 'overview', 'ANALYSIS.md');
|
|
128
127
|
if (!(await (0, fs_extra_1.pathExists)(legacyReq))) {
|
|
129
128
|
showPhase('导入需求', ['speccore doc2spec -f PRD.docx -i ' + iteration]);
|
|
130
129
|
}
|
|
@@ -249,8 +248,8 @@ async function autoPipeline(options) {
|
|
|
249
248
|
break;
|
|
250
249
|
}
|
|
251
250
|
case 'analyze': {
|
|
252
|
-
const analysis =
|
|
253
|
-
const techSpec = (0, path_1.join)(iterDir, '020-specs', 'ANALYSIS.md');
|
|
251
|
+
const analysis = (0, path_1.join)(iterDir, '020-specs', 'overview', 'ANALYSIS.md');
|
|
252
|
+
const techSpec = (0, path_1.join)(iterDir, '020-specs', 'overview', 'ANALYSIS.md');
|
|
254
253
|
let needsAnalysis = !(await (0, fs_extra_1.pathExists)(analysis));
|
|
255
254
|
let needsSpecs = false;
|
|
256
255
|
if (!needsAnalysis) {
|
|
@@ -453,8 +452,8 @@ async function renderDevHtml(options) {
|
|
|
453
452
|
const isInit = await (0, fs_extra_1.pathExists)('.speccore');
|
|
454
453
|
const phases = [
|
|
455
454
|
{ name: lang === 'en' ? I18N.en.stepInit : I18N.zh.stepInit, key: 'init', done: !!isInit, icon: '🏗️', cmd: 'init', description: '初始化 SpecCore 项目结构', args: '',
|
|
456
|
-
detail: '创建 .speccore/ 目录及配置文件(CONSTITUTION.md
|
|
457
|
-
prerequisites: ['空目录或已有代码仓库'], outputs: ['.speccore/CONSTITUTION.md', '.speccore
|
|
455
|
+
detail: '创建 .speccore/ 目录及配置文件(CONSTITUTION.md、.speccore.yml 等),奠定项目规范基础。',
|
|
456
|
+
prerequisites: ['空目录或已有代码仓库'], outputs: ['.speccore/CONSTITUTION.md', '.speccore.yml', '.speccore/local/context.json'],
|
|
458
457
|
tips: '如果已有项目,init 会扫描现有工程结构自动填写技术栈。', examples: ['speccore init'] },
|
|
459
458
|
{ name: lang === 'en' ? I18N.en.stepDoc : I18N.zh.stepDoc, key: 'doc', done: false, icon: '📝', cmd: 'doc2spec', description: '导入 PRD 文档,AI 转换需求规格', args: '-f PRD.docx' + (iterName ? ' --iteration ' + iterName : ''),
|
|
460
459
|
detail: '将产品需求文档(Word / PDF / Markdown)导入迭代,AI 自动提取并转换为标准需求规格。也支持自然语言直接描述需求。',
|
|
@@ -484,7 +483,7 @@ async function renderDevHtml(options) {
|
|
|
484
483
|
if (iterDir) {
|
|
485
484
|
const reqDoc = (0, path_1.join)(iterDir, '010-requirements', 'REQUIREMENT.md');
|
|
486
485
|
const hasReqFeature = await hasFeatureDirs(iterDir); // 新结构: 010-requirements/{feature}/
|
|
487
|
-
const analysis =
|
|
486
|
+
const analysis = (0, path_1.join)(iterDir, '020-specs', 'overview', 'ANALYSIS.md');
|
|
488
487
|
if ((await (0, fs_extra_1.pathExists)(reqDoc)) || hasReqFeature)
|
|
489
488
|
phases[1].done = true;
|
|
490
489
|
if (await (0, fs_extra_1.pathExists)(analysis))
|