speccore 6.82.0 → 6.89.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (104) hide show
  1. package/dist/commands/analyze.d.ts.map +1 -1
  2. package/dist/commands/analyze.js +178 -34
  3. package/dist/commands/analyze.js.map +1 -1
  4. package/dist/commands/change.d.ts.map +1 -1
  5. package/dist/commands/change.js +39 -1
  6. package/dist/commands/change.js.map +1 -1
  7. package/dist/commands/init.d.ts.map +1 -1
  8. package/dist/commands/init.js +118 -0
  9. package/dist/commands/init.js.map +1 -1
  10. package/dist/commands/pr.d.ts.map +1 -1
  11. package/dist/commands/pr.js +75 -38
  12. package/dist/commands/pr.js.map +1 -1
  13. package/dist/core/agents/defaults/_INDEX.md +68 -0
  14. package/dist/core/agents/defaults/_TEMPLATE.md +34 -0
  15. package/dist/core/agents/defaults/code-reviewer.md +49 -0
  16. package/dist/core/agents/defaults/compiler.md +25 -0
  17. package/dist/core/agents/defaults/compliance-checker.md +38 -0
  18. package/dist/core/agents/defaults/dependency-analyst.md +42 -0
  19. package/dist/core/agents/defaults/doc-sync-agent.md +25 -0
  20. package/dist/core/agents/defaults/impact-analyst.md +37 -0
  21. package/dist/core/agents/defaults/interaction-designer.md +73 -0
  22. package/dist/core/agents/defaults/performance-expert.md +35 -0
  23. package/dist/core/agents/defaults/product-analyst-backend.md +68 -0
  24. package/dist/core/agents/defaults/product-analyst-frontend.md +72 -0
  25. package/dist/core/agents/defaults/product-analyst.md +48 -0
  26. package/dist/core/agents/defaults/regression-tester.md +36 -0
  27. package/dist/core/agents/defaults/risk-assessor.md +38 -0
  28. package/dist/core/agents/defaults/schedule-planner.md +37 -0
  29. package/dist/core/agents/defaults/security-reviewer-finance.md +67 -0
  30. package/dist/core/agents/defaults/security-reviewer.md +43 -0
  31. package/dist/core/agents/defaults/task-decomposer.md +33 -0
  32. package/dist/core/agents/defaults/test-engineer.md +25 -0
  33. package/dist/core/agents/defaults/test-reviewer.md +48 -0
  34. package/dist/core/agents/engine/agent-executor.d.ts +50 -0
  35. package/dist/core/agents/engine/agent-executor.d.ts.map +1 -0
  36. package/dist/core/agents/engine/agent-executor.js +225 -0
  37. package/dist/core/agents/engine/agent-executor.js.map +1 -0
  38. package/dist/core/agents/engine/agent-loader.d.ts +58 -0
  39. package/dist/core/agents/engine/agent-loader.d.ts.map +1 -0
  40. package/dist/core/agents/engine/agent-loader.js +377 -0
  41. package/dist/core/agents/engine/agent-loader.js.map +1 -0
  42. package/dist/core/agents/engine/types.d.ts +71 -0
  43. package/dist/core/agents/engine/types.d.ts.map +1 -0
  44. package/dist/core/agents/engine/types.js +8 -0
  45. package/dist/core/agents/engine/types.js.map +1 -0
  46. package/dist/core/agents/index.d.ts +12 -0
  47. package/dist/core/agents/index.d.ts.map +1 -0
  48. package/dist/core/agents/index.js +31 -0
  49. package/dist/core/agents/index.js.map +1 -0
  50. package/dist/core/agents/product-analyst.d.ts +17 -0
  51. package/dist/core/agents/product-analyst.d.ts.map +1 -0
  52. package/dist/core/agents/product-analyst.js +188 -0
  53. package/dist/core/agents/product-analyst.js.map +1 -0
  54. package/dist/core/command-loader.d.ts +31 -0
  55. package/dist/core/command-loader.d.ts.map +1 -0
  56. package/dist/core/command-loader.js +76 -0
  57. package/dist/core/command-loader.js.map +1 -0
  58. package/dist/core/commands/defaults/change-impact.md +40 -0
  59. package/dist/core/commands/defaults/pr-review.md +42 -0
  60. package/dist/core/commands/defaults/refactor.md +37 -0
  61. package/dist/core/context-injector.d.ts +56 -0
  62. package/dist/core/context-injector.d.ts.map +1 -0
  63. package/dist/core/context-injector.js +122 -0
  64. package/dist/core/context-injector.js.map +1 -0
  65. package/dist/core/hook-runner.d.ts +36 -0
  66. package/dist/core/hook-runner.d.ts.map +1 -0
  67. package/dist/core/hook-runner.js +93 -0
  68. package/dist/core/hook-runner.js.map +1 -0
  69. package/dist/core/hooks/defaults/post-execute.md +22 -0
  70. package/dist/core/hooks/defaults/pre-execute.md +18 -0
  71. package/dist/core/prompt-builder.d.ts +1 -0
  72. package/dist/core/prompt-builder.d.ts.map +1 -1
  73. package/dist/core/prompt-builder.js +60 -1
  74. package/dist/core/prompt-builder.js.map +1 -1
  75. package/dist/core/requirement-clarifier.d.ts +2 -1
  76. package/dist/core/requirement-clarifier.d.ts.map +1 -1
  77. package/dist/core/requirement-clarifier.js +78 -1
  78. package/dist/core/requirement-clarifier.js.map +1 -1
  79. package/dist/core/rule-loader.d.ts +38 -0
  80. package/dist/core/rule-loader.d.ts.map +1 -0
  81. package/dist/core/rule-loader.js +156 -0
  82. package/dist/core/rule-loader.js.map +1 -0
  83. package/dist/core/rules/defaults/_INDEX.md +16 -0
  84. package/dist/core/rules/defaults/api-design.md +44 -0
  85. package/dist/core/rules/defaults/database.md +37 -0
  86. package/dist/core/rules/defaults/frontend-common.md +38 -0
  87. package/dist/core/rules/defaults/nodejs.md +38 -0
  88. package/dist/core/rules/defaults/react.md +34 -0
  89. package/dist/core/rules/defaults/security.md +31 -0
  90. package/dist/core/rules/defaults/testing.md +35 -0
  91. package/dist/core/rules/defaults/typescript.md +36 -0
  92. package/dist/core/skill-loader.d.ts +28 -0
  93. package/dist/core/skill-loader.d.ts.map +1 -0
  94. package/dist/core/skill-loader.js +102 -0
  95. package/dist/core/skill-loader.js.map +1 -0
  96. package/dist/core/skills/defaults/caching.md +33 -0
  97. package/dist/core/skills/defaults/db-migration.md +46 -0
  98. package/dist/core/skills/defaults/deployment.md +50 -0
  99. package/dist/core/skills/defaults/logging.md +38 -0
  100. package/dist/core/verify-engine.d.ts +7 -0
  101. package/dist/core/verify-engine.d.ts.map +1 -1
  102. package/dist/core/verify-engine.js +27 -1
  103. package/dist/core/verify-engine.js.map +1 -1
  104. package/package.json +2 -2
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Context Injector — 统一注入框架
3
+ *
4
+ * v6.89.0+: 将 RULES / AGENTS / COMMANDS / SKILLS / HOOKS 的注入逻辑
5
+ * 统一到一个入口,避免各命令文件重复实现。
6
+ *
7
+ * 使用方式:
8
+ * ```ts
9
+ * const injected = await injectAll(basePrompt, {
10
+ * projectRoot,
11
+ * command: 'execute',
12
+ * phase: 'code-gen',
13
+ * techStack: { language: 'typescript', framework: 'react' },
14
+ * agentContext: { iteration: 'Iteration-001' },
15
+ * });
16
+ * ```
17
+ */
18
+ import type { AgentContext } from './agents';
19
+ import { type HookContext } from './hook-runner';
20
+ export interface InjectOptions {
21
+ projectRoot: string;
22
+ command?: string;
23
+ phase?: string;
24
+ agentContext?: AgentContext;
25
+ techStack?: {
26
+ language?: string;
27
+ framework?: string;
28
+ database?: string;
29
+ cache?: string;
30
+ frontend?: string;
31
+ };
32
+ platform?: string;
33
+ taskKeywords?: string[];
34
+ commandTemplate?: {
35
+ name: string;
36
+ vars: Record<string, string>;
37
+ };
38
+ hooks?: {
39
+ trigger: 'pre' | 'post';
40
+ hookContext: HookContext;
41
+ };
42
+ }
43
+ /**
44
+ * 统一注入入口:按需注入 RULES / AGENTS / COMMANDS / SKILLS / HOOKS
45
+ */
46
+ export declare function injectAll(prompt: string, options: InjectOptions): Promise<string>;
47
+ /**
48
+ * 简化版:只注入 AGENTS
49
+ */
50
+ export declare function injectAgents(prompt: string, command: string, phase: string, agentContext: AgentContext, projectRoot: string): Promise<string>;
51
+ /**
52
+ * 简化版:只注入 RULES
53
+ */
54
+ export declare function injectRules(prompt: string, techStack: NonNullable<InjectOptions['techStack']>, projectRoot: string, platform?: string): Promise<string>;
55
+ export { runHooks, type HookContext, type HookResult } from './hook-runner';
56
+ //# sourceMappingURL=context-injector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-injector.d.ts","sourceRoot":"","sources":["../../src/core/context-injector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAG7C,OAAO,EAAY,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAE3D,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,SAAS,CAAC,EAAE;QACV,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,eAAe,CAAC,EAAE;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAC9B,CAAC;IACF,KAAK,CAAC,EAAE;QACN,OAAO,EAAE,KAAK,GAAG,MAAM,CAAC;QACxB,WAAW,EAAE,WAAW,CAAC;KAC1B,CAAC;CACH;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAyEvF;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,YAAY,EAC1B,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,CAAC,CAEjB;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,WAAW,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,EAClD,WAAW,EAAE,MAAM,EACnB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,CAAC,CAEjB;AAED,OAAO,EAAE,QAAQ,EAAE,KAAK,WAAW,EAAE,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,122 @@
1
+ "use strict";
2
+ /**
3
+ * Context Injector — 统一注入框架
4
+ *
5
+ * v6.89.0+: 将 RULES / AGENTS / COMMANDS / SKILLS / HOOKS 的注入逻辑
6
+ * 统一到一个入口,避免各命令文件重复实现。
7
+ *
8
+ * 使用方式:
9
+ * ```ts
10
+ * const injected = await injectAll(basePrompt, {
11
+ * projectRoot,
12
+ * command: 'execute',
13
+ * phase: 'code-gen',
14
+ * techStack: { language: 'typescript', framework: 'react' },
15
+ * agentContext: { iteration: 'Iteration-001' },
16
+ * });
17
+ * ```
18
+ */
19
+ Object.defineProperty(exports, "__esModule", { value: true });
20
+ exports.runHooks = void 0;
21
+ exports.injectAll = injectAll;
22
+ exports.injectAgents = injectAgents;
23
+ exports.injectRules = injectRules;
24
+ const rule_loader_1 = require("./rule-loader");
25
+ const agents_1 = require("./agents");
26
+ const command_loader_1 = require("./command-loader");
27
+ const skill_loader_1 = require("./skill-loader");
28
+ /**
29
+ * 统一注入入口:按需注入 RULES / AGENTS / COMMANDS / SKILLS / HOOKS
30
+ */
31
+ async function injectAll(prompt, options) {
32
+ let result = prompt;
33
+ // 1. RULES 编码规范注入
34
+ if (options.techStack) {
35
+ const identifiers = [];
36
+ if (options.techStack.language)
37
+ identifiers.push(options.techStack.language.toLowerCase());
38
+ if (options.techStack.framework)
39
+ identifiers.push(options.techStack.framework.toLowerCase());
40
+ if (options.techStack.database)
41
+ identifiers.push(options.techStack.database.toLowerCase());
42
+ if (options.techStack.frontend)
43
+ identifiers.push(options.techStack.frontend.toLowerCase());
44
+ if (options.techStack.cache)
45
+ identifiers.push(options.techStack.cache.toLowerCase());
46
+ if (options.platform)
47
+ identifiers.push(options.platform.toLowerCase());
48
+ if (identifiers.length > 0) {
49
+ try {
50
+ const rules = await (0, rule_loader_1.resolveRulesForTechStack)(identifiers, options.projectRoot);
51
+ if (rules.length > 0) {
52
+ result += '\n\n';
53
+ result += (0, rule_loader_1.formatRulesPrompt)(rules);
54
+ }
55
+ }
56
+ catch {
57
+ // 静默跳过
58
+ }
59
+ }
60
+ }
61
+ // 2. AGENTS 角色注入
62
+ if (options.command && options.phase && options.agentContext) {
63
+ try {
64
+ const agents = await (0, agents_1.resolveAgentsForPhase)(options.command, options.phase, options.agentContext, options.projectRoot);
65
+ if (agents.length > 0) {
66
+ result += '\n\n## 专业角色指引\n\n';
67
+ for (const ra of agents) {
68
+ result += ra.definition.rolePrompt;
69
+ result += '\n\n';
70
+ }
71
+ }
72
+ }
73
+ catch {
74
+ // 静默跳过
75
+ }
76
+ }
77
+ // 3. COMMANDS 命令模板注入
78
+ if (options.commandTemplate) {
79
+ try {
80
+ const template = await (0, command_loader_1.loadCommandTemplate)(options.commandTemplate.name, options.projectRoot);
81
+ if (template) {
82
+ result += '\n\n';
83
+ result += (0, command_loader_1.renderTemplate)(template.content, options.commandTemplate.vars);
84
+ }
85
+ }
86
+ catch {
87
+ // 静默跳过
88
+ }
89
+ }
90
+ // 4. SKILLS 技能注入
91
+ if (options.taskKeywords && options.taskKeywords.length > 0) {
92
+ try {
93
+ const skills = await (0, skill_loader_1.resolveSkillsForTask)(options.taskKeywords, options.projectRoot);
94
+ if (skills.length > 0) {
95
+ result += '\n\n';
96
+ result += (0, skill_loader_1.formatSkillsPrompt)(skills);
97
+ }
98
+ }
99
+ catch {
100
+ // 静默跳过
101
+ }
102
+ }
103
+ // 5. HOOKS 钩子执行(返回结果由调用方处理)
104
+ // HOOKS 不修改 prompt,而是返回执行结果,所以不在此处处理
105
+ // 调用方需要单独调用 runHooks
106
+ return result;
107
+ }
108
+ /**
109
+ * 简化版:只注入 AGENTS
110
+ */
111
+ async function injectAgents(prompt, command, phase, agentContext, projectRoot) {
112
+ return injectAll(prompt, { projectRoot, command, phase, agentContext });
113
+ }
114
+ /**
115
+ * 简化版:只注入 RULES
116
+ */
117
+ async function injectRules(prompt, techStack, projectRoot, platform) {
118
+ return injectAll(prompt, { projectRoot, techStack, platform });
119
+ }
120
+ var hook_runner_1 = require("./hook-runner");
121
+ Object.defineProperty(exports, "runHooks", { enumerable: true, get: function () { return hook_runner_1.runHooks; } });
122
+ //# sourceMappingURL=context-injector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-injector.js","sourceRoot":"","sources":["../../src/core/context-injector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * HOOKS 生命周期钩子执行器
3
+ *
4
+ * 负责:
5
+ * 1. 扫描 .speccore/HOOKS/ 目录下的钩子定义
6
+ * 2. 在命令执行前后触发对应钩子
7
+ * 3. 支持 pre-{command} 和 post-{command} 两种钩子
8
+ *
9
+ * v6.88.0+
10
+ */
11
+ export interface HookDefinition {
12
+ name: string;
13
+ content: string;
14
+ trigger: 'pre' | 'post';
15
+ command: string;
16
+ }
17
+ export interface HookContext {
18
+ command: string;
19
+ iteration?: string;
20
+ task?: string;
21
+ [key: string]: unknown;
22
+ }
23
+ export interface HookResult {
24
+ blocked: boolean;
25
+ reason?: string;
26
+ messages: string[];
27
+ }
28
+ /**
29
+ * 执行指定命令的钩子
30
+ */
31
+ export declare function runHooks(trigger: 'pre' | 'post', command: string, context: HookContext, projectRoot: string): Promise<HookResult>;
32
+ export declare function getBuiltinHookContents(): Promise<{
33
+ name: string;
34
+ content: string;
35
+ }[]>;
36
+ //# sourceMappingURL=hook-runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hook-runner.d.ts","sourceRoot":"","sources":["../../src/core/hook-runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAQH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,KAAK,GAAG,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;CACjB;AAqDD,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAC5B,OAAO,EAAE,KAAK,GAAG,MAAM,EACvB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,WAAW,EACpB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,UAAU,CAAC,CAuBrB;AAED,wBAAsB,sBAAsB,IAAI,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAAE,CAAC,CAE3F"}
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+ /**
3
+ * HOOKS 生命周期钩子执行器
4
+ *
5
+ * 负责:
6
+ * 1. 扫描 .speccore/HOOKS/ 目录下的钩子定义
7
+ * 2. 在命令执行前后触发对应钩子
8
+ * 3. 支持 pre-{command} 和 post-{command} 两种钩子
9
+ *
10
+ * v6.88.0+
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.runHooks = runHooks;
14
+ exports.getBuiltinHookContents = getBuiltinHookContents;
15
+ const path_1 = require("path");
16
+ const fs_extra_1 = require("fs-extra");
17
+ const logger_1 = require("../utils/logger");
18
+ const BUILTIN_HOOKS_DIR = (0, path_1.join)(__dirname, 'hooks', 'defaults');
19
+ async function scanHookFiles(dir) {
20
+ if (!(await (0, fs_extra_1.pathExists)(dir)))
21
+ return [];
22
+ const entries = await (0, fs_extra_1.readdir)(dir, { withFileTypes: true });
23
+ const hooks = [];
24
+ for (const e of entries) {
25
+ if (!e.isFile() || !e.name.endsWith('.md'))
26
+ continue;
27
+ if (e.name.startsWith('_'))
28
+ continue;
29
+ const content = await (0, fs_extra_1.readFile)((0, path_1.join)(dir, e.name), 'utf-8');
30
+ hooks.push({
31
+ name: e.name.replace(/\.md$/, ''),
32
+ content,
33
+ });
34
+ }
35
+ return hooks;
36
+ }
37
+ function parseHookMeta(name) {
38
+ // 文件名格式:pre-execute.md 或 post-execute.md
39
+ const match = name.match(/^(pre|post)-(.+)$/);
40
+ if (match) {
41
+ return { trigger: match[1], command: match[2] };
42
+ }
43
+ return { trigger: 'pre', command: name };
44
+ }
45
+ async function loadAllHooks(projectRoot) {
46
+ const userHooksDir = (0, path_1.join)(projectRoot, '.speccore', 'HOOKS');
47
+ const hooks = [];
48
+ const builtinFiles = await scanHookFiles(BUILTIN_HOOKS_DIR);
49
+ for (const f of builtinFiles) {
50
+ const meta = parseHookMeta(f.name);
51
+ hooks.push({ name: f.name, content: f.content, trigger: meta.trigger, command: meta.command });
52
+ }
53
+ const userFiles = await scanHookFiles(userHooksDir);
54
+ for (const f of userFiles) {
55
+ const meta = parseHookMeta(f.name);
56
+ // 用户自定义覆盖内置
57
+ const idx = hooks.findIndex(h => h.trigger === meta.trigger && h.command === meta.command);
58
+ if (idx >= 0)
59
+ hooks[idx] = { name: f.name, content: f.content, trigger: meta.trigger, command: meta.command };
60
+ else
61
+ hooks.push({ name: f.name, content: f.content, trigger: meta.trigger, command: meta.command });
62
+ }
63
+ return hooks;
64
+ }
65
+ /**
66
+ * 执行指定命令的钩子
67
+ */
68
+ async function runHooks(trigger, command, context, projectRoot) {
69
+ const allHooks = await loadAllHooks(projectRoot);
70
+ const matched = allHooks.filter(h => h.trigger === trigger && h.command === command);
71
+ const result = { blocked: false, messages: [] };
72
+ for (const hook of matched) {
73
+ try {
74
+ // 钩子执行:目前将钩子内容作为 prompt 输出给 AI
75
+ // 未来可扩展为执行实际脚本
76
+ result.messages.push(`[${trigger}-${command}] ${hook.name}`);
77
+ // 简单解析:如果钩子内容中有 "BLOCK:" 标记,则拦截
78
+ if (hook.content.includes('BLOCK:')) {
79
+ const reasonMatch = hook.content.match(/BLOCK:\s*(.+)/);
80
+ result.blocked = true;
81
+ result.reason = reasonMatch ? reasonMatch[1] : 'Hook blocked';
82
+ }
83
+ }
84
+ catch (e) {
85
+ logger_1.logger.warn(`钩子 ${hook.name} 执行失败: ${e}`);
86
+ }
87
+ }
88
+ return result;
89
+ }
90
+ async function getBuiltinHookContents() {
91
+ return scanHookFiles(BUILTIN_HOOKS_DIR);
92
+ }
93
+ //# sourceMappingURL=hook-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hook-runner.js","sourceRoot":"","sources":["../../src/core/hook-runner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ # post-execute 钩子
2
+
3
+ > 在 `speccore execute` 执行后触发
4
+
5
+ ## 检查项
6
+
7
+ - [ ] 代码编译是否通过
8
+ - [ ] 测试是否全部通过
9
+ - [ ] 质量门禁是否达标
10
+ - [ ] 文档是否同步更新
11
+
12
+ ## 自动操作
13
+
14
+ ```
15
+ if (compileFailed) {
16
+ BLOCK: 代码编译失败,请修复后重新执行
17
+ }
18
+
19
+ if (testFailed) {
20
+ WARN: 测试未全部通过,请检查测试用例
21
+ }
22
+ ```
@@ -0,0 +1,18 @@
1
+ # pre-execute 钩子
2
+
3
+ > 在 `speccore execute` 执行前触发
4
+
5
+ ## 检查项
6
+
7
+ - [ ] 当前分支是否为任务分支(feature/Task-XXX)
8
+ - [ ] 代码基线是否与迭代最新状态一致
9
+ - [ ] 相邻任务的接口契约是否已确认
10
+ - [ ] 是否有未提交的本地变更
11
+
12
+ ## 自动操作
13
+
14
+ ```
15
+ if (branch !== 'feature/{taskId}') {
16
+ BLOCK: 当前分支不是任务分支,请先切换到正确的任务分支
17
+ }
18
+ ```
@@ -77,6 +77,7 @@ export interface SpecCorePrompt {
77
77
  globalContext?: GlobalContext;
78
78
  taskContext?: string;
79
79
  projectPaths?: string;
80
+ rulesContent?: string;
80
81
  instruction: string;
81
82
  outputHint: string;
82
83
  }
@@ -1 +1 @@
1
- {"version":3,"file":"prompt-builder.d.ts","sourceRoot":"","sources":["../../src/core/prompt-builder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prompt-builder.d.ts","sourceRoot":"","sources":["../../src/core/prompt-builder.ts"],"names":[],"mappings":"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"}
@@ -22,6 +22,10 @@ const knowledge_graph_1 = require("./knowledge-graph");
22
22
  const context_builder_1 = require("./context-builder");
23
23
  const spec_paths_1 = require("./spec-paths");
24
24
  const unified_retrieval_1 = require("./unified-retrieval");
25
+ // v6.85.0+: RULES 规范库注入
26
+ const rule_loader_1 = require("./rule-loader");
27
+ // v6.86.0+: AGENTS 全阶段扩展
28
+ const agents_1 = require("./agents");
25
29
  const techStackCache = new Map();
26
30
  const constitutionCache = new Map();
27
31
  const reqContentCache = new Map();
@@ -1185,6 +1189,55 @@ async function buildPrompt(command, options) {
1185
1189
  projectPathsInfo = lines.join('\n');
1186
1190
  }
1187
1191
  }
1192
+ // v6.85.0+: 根据技术栈加载编码规范
1193
+ let rulesContent;
1194
+ if (command === 'execute') {
1195
+ const identifiers = [];
1196
+ if (techStack.language)
1197
+ identifiers.push(techStack.language.toLowerCase());
1198
+ if (techStack.framework)
1199
+ identifiers.push(techStack.framework.toLowerCase());
1200
+ if (techStack.database)
1201
+ identifiers.push(techStack.database.toLowerCase());
1202
+ if (techStack.frontend)
1203
+ identifiers.push(techStack.frontend.toLowerCase());
1204
+ if (techStack.cache)
1205
+ identifiers.push(techStack.cache.toLowerCase());
1206
+ if (options.platform)
1207
+ identifiers.push(options.platform.toLowerCase());
1208
+ if (identifiers.length > 0) {
1209
+ try {
1210
+ const rules = await (0, rule_loader_1.resolveRulesForTechStack)(identifiers, cwd);
1211
+ if (rules.length > 0) {
1212
+ rulesContent = (0, rule_loader_1.formatRulesPrompt)(rules);
1213
+ }
1214
+ }
1215
+ catch {
1216
+ // RULES 加载失败静默跳过,不影响主流程
1217
+ }
1218
+ }
1219
+ }
1220
+ // v6.86.0+: 为 split/plan 命令注入 AGENTS
1221
+ let instruction = getInstruction(command, context);
1222
+ if (command === 'split' || command === 'plan') {
1223
+ const phase = 'default';
1224
+ const agentContext = {
1225
+ iteration: options.iteration || '',
1226
+ };
1227
+ try {
1228
+ const agents = await (0, agents_1.resolveAgentsForPhase)(command, phase, agentContext, cwd);
1229
+ if (agents.length > 0) {
1230
+ instruction += '\n\n## 专业角色指引\n\n';
1231
+ for (const ra of agents) {
1232
+ instruction += ra.definition.rolePrompt;
1233
+ instruction += '\n\n';
1234
+ }
1235
+ }
1236
+ }
1237
+ catch {
1238
+ // AGENTS 加载失败静默跳过
1239
+ }
1240
+ }
1188
1241
  return {
1189
1242
  marker: '[SPECCORE_PROMPT]',
1190
1243
  version: '1.0',
@@ -1200,7 +1253,8 @@ async function buildPrompt(command, options) {
1200
1253
  globalContext: (globalContext.indexSummary || globalContext.toc.length > 0) ? globalContext : undefined,
1201
1254
  taskContext: taskContextStr,
1202
1255
  projectPaths: projectPathsInfo,
1203
- instruction: getInstruction(command, context),
1256
+ rulesContent,
1257
+ instruction,
1204
1258
  outputHint: command === 'execute'
1205
1259
  ? '请返回格式: {"files": [{"path": "工程标识/相对路径", "content": "代码内容"}]}'
1206
1260
  : command === 'split'
@@ -1298,6 +1352,11 @@ function buildPromptText(prompt) {
1298
1352
  lines.push(`- 前端: ${prompt.techStack.frontend}`);
1299
1353
  lines.push('');
1300
1354
  }
1355
+ // v6.85.0+: 编码规范注入
1356
+ if (prompt.rulesContent) {
1357
+ lines.push(prompt.rulesContent);
1358
+ lines.push('');
1359
+ }
1301
1360
  // API 定义
1302
1361
  if (prompt.apiSpecs.length > 0) {
1303
1362
  lines.push('## API 接口定义');