speccore 8.3.181 → 8.3.188

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 (214) hide show
  1. package/.agents/skills/spec-analyze/SKILL.md +2 -169
  2. package/.agents/skills/spec-ask/SKILL.md +2 -177
  3. package/.agents/skills/spec-change/SKILL.md +2 -214
  4. package/.agents/skills/spec-dashboard/SKILL.md +1 -76
  5. package/.agents/skills/spec-deploy/SKILL.md +2 -298
  6. package/.agents/skills/spec-doc2spec/SKILL.md +2 -116
  7. package/.agents/skills/spec-done/SKILL.md +2 -203
  8. package/.agents/skills/spec-execute/SKILL.md +2 -178
  9. package/.agents/skills/spec-help/SKILL.md +1 -75
  10. package/.agents/skills/spec-iteration-create/SKILL.md +2 -123
  11. package/.agents/skills/spec-plan/SKILL.md +2 -117
  12. package/.agents/skills/spec-pr/SKILL.md +2 -203
  13. package/.agents/skills/spec-run/SKILL.md +16 -0
  14. package/.agents/skills/spec-spec2doc/SKILL.md +2 -121
  15. package/.agents/skills/spec-split/SKILL.md +2 -208
  16. package/.agents/skills/spec-task-create/SKILL.md +2 -151
  17. package/.agents/skills/spec-verify/SKILL.md +2 -214
  18. package/.agents/skills/spec-welcome/SKILL.md +1 -67
  19. package/.agents/skills/speccore-router/SKILL.md +14 -2
  20. package/README.en.md +9 -9
  21. package/README.md +2 -1
  22. package/dist/cli.js +24 -25
  23. package/dist/cli.js.map +1 -1
  24. package/dist/commands/about.js +1 -1
  25. package/dist/commands/about.js.map +1 -1
  26. package/dist/commands/analyze.d.ts +1 -0
  27. package/dist/commands/analyze.d.ts.map +1 -1
  28. package/dist/commands/analyze.js +94 -7
  29. package/dist/commands/analyze.js.map +1 -1
  30. package/dist/commands/ask.js +6 -6
  31. package/dist/commands/ask.js.map +1 -1
  32. package/dist/commands/dev.d.ts +2 -0
  33. package/dist/commands/dev.d.ts.map +1 -1
  34. package/dist/commands/dev.js +102 -1
  35. package/dist/commands/dev.js.map +1 -1
  36. package/dist/commands/doctor.js +28 -0
  37. package/dist/commands/doctor.js.map +1 -1
  38. package/dist/commands/execute.js +3 -3
  39. package/dist/commands/execute.js.map +1 -1
  40. package/dist/commands/init.d.ts.map +1 -1
  41. package/dist/commands/init.js +31 -52
  42. package/dist/commands/init.js.map +1 -1
  43. package/dist/commands/iteration/split.d.ts.map +1 -1
  44. package/dist/commands/iteration/split.js +12 -39
  45. package/dist/commands/iteration/split.js.map +1 -1
  46. package/dist/commands/knowledge.d.ts +0 -12
  47. package/dist/commands/knowledge.d.ts.map +1 -1
  48. package/dist/commands/knowledge.js +0 -80
  49. package/dist/commands/knowledge.js.map +1 -1
  50. package/dist/commands/refresh.d.ts.map +1 -1
  51. package/dist/commands/refresh.js +10 -0
  52. package/dist/commands/refresh.js.map +1 -1
  53. package/dist/commands/search.d.ts +1 -0
  54. package/dist/commands/search.d.ts.map +1 -1
  55. package/dist/commands/search.js +38 -0
  56. package/dist/commands/search.js.map +1 -1
  57. package/dist/commands/update.d.ts.map +1 -1
  58. package/dist/commands/update.js +13 -3
  59. package/dist/commands/update.js.map +1 -1
  60. package/dist/core/agent-adapter.d.ts +6 -0
  61. package/dist/core/agent-adapter.d.ts.map +1 -1
  62. package/dist/core/agent-adapter.js +56 -172
  63. package/dist/core/agent-adapter.js.map +1 -1
  64. package/dist/core/agents/defaults/code-generator.md +64 -0
  65. package/dist/core/agents/defaults/code-reviewer.md +5 -0
  66. package/dist/core/agents/defaults/compiler.md +7 -0
  67. package/dist/core/agents/defaults/compliance-checker.md +2 -0
  68. package/dist/core/agents/defaults/dependency-analyst.md +5 -0
  69. package/dist/core/agents/defaults/doc-sync-agent.md +5 -0
  70. package/dist/core/agents/defaults/effort-estimator.md +28 -0
  71. package/dist/core/agents/defaults/global-analyzer.md +66 -0
  72. package/dist/core/agents/defaults/impact-analyst.md +5 -0
  73. package/dist/core/agents/defaults/interaction-designer.md +5 -0
  74. package/dist/core/agents/defaults/performance-expert.md +2 -0
  75. package/dist/core/agents/defaults/product-analyst-backend.md +6 -0
  76. package/dist/core/agents/defaults/product-analyst-frontend.md +6 -0
  77. package/dist/core/agents/defaults/product-analyst.md +5 -0
  78. package/dist/core/agents/defaults/regression-tester.md +5 -0
  79. package/dist/core/agents/defaults/requirement-analyzer.md +72 -0
  80. package/dist/core/agents/defaults/risk-assessor.md +5 -0
  81. package/dist/core/agents/defaults/schedule-planner.md +5 -0
  82. package/dist/core/agents/defaults/security-reviewer-finance.md +6 -0
  83. package/dist/core/agents/defaults/security-reviewer.md +7 -0
  84. package/dist/core/agents/defaults/task-decomposer.md +5 -0
  85. package/dist/core/agents/defaults/test-engineer.md +2 -0
  86. package/dist/core/agents/defaults/test-reviewer.md +5 -0
  87. package/dist/core/agents/engine/agent-loader.d.ts.map +1 -1
  88. package/dist/core/agents/engine/agent-loader.js +76 -6
  89. package/dist/core/agents/engine/agent-loader.js.map +1 -1
  90. package/dist/core/agents/engine/types.d.ts +5 -0
  91. package/dist/core/agents/engine/types.d.ts.map +1 -1
  92. package/dist/core/analyze-engine.d.ts.map +1 -1
  93. package/dist/core/analyze-engine.js +73 -82
  94. package/dist/core/analyze-engine.js.map +1 -1
  95. package/dist/core/ask-engine.d.ts +0 -58
  96. package/dist/core/ask-engine.d.ts.map +1 -1
  97. package/dist/core/ask-engine.js +63 -361
  98. package/dist/core/ask-engine.js.map +1 -1
  99. package/dist/core/business-rules.d.ts +36 -0
  100. package/dist/core/business-rules.d.ts.map +1 -0
  101. package/dist/core/business-rules.js +109 -0
  102. package/dist/core/business-rules.js.map +1 -0
  103. package/dist/core/change-impact-global.d.ts.map +1 -1
  104. package/dist/core/change-impact-global.js +4 -3
  105. package/dist/core/change-impact-global.js.map +1 -1
  106. package/dist/core/code-scanner.d.ts +1 -0
  107. package/dist/core/code-scanner.d.ts.map +1 -1
  108. package/dist/core/code-scanner.js +32 -3
  109. package/dist/core/code-scanner.js.map +1 -1
  110. package/dist/core/content-delivery.d.ts +59 -0
  111. package/dist/core/content-delivery.d.ts.map +1 -0
  112. package/dist/core/content-delivery.js +219 -0
  113. package/dist/core/content-delivery.js.map +1 -0
  114. package/dist/core/global-artifacts.d.ts.map +1 -1
  115. package/dist/core/global-artifacts.js +262 -19
  116. package/dist/core/global-artifacts.js.map +1 -1
  117. package/dist/core/global-retrieval.d.ts +38 -0
  118. package/dist/core/global-retrieval.d.ts.map +1 -0
  119. package/dist/core/global-retrieval.js +100 -0
  120. package/dist/core/global-retrieval.js.map +1 -0
  121. package/dist/core/html-prototype.d.ts +22 -0
  122. package/dist/core/html-prototype.d.ts.map +1 -0
  123. package/dist/core/html-prototype.js +103 -0
  124. package/dist/core/html-prototype.js.map +1 -0
  125. package/dist/core/multi-lang-parser.d.ts +43 -0
  126. package/dist/core/multi-lang-parser.d.ts.map +1 -0
  127. package/dist/core/multi-lang-parser.js +317 -0
  128. package/dist/core/multi-lang-parser.js.map +1 -0
  129. package/dist/core/pipeline-engine.js +16 -16
  130. package/dist/core/pipeline-engine.js.map +1 -1
  131. package/dist/core/platform-inference.d.ts +35 -0
  132. package/dist/core/platform-inference.d.ts.map +1 -0
  133. package/dist/core/platform-inference.js +205 -0
  134. package/dist/core/platform-inference.js.map +1 -0
  135. package/dist/core/prompt-builder.d.ts +1 -1
  136. package/dist/core/prompt-builder.d.ts.map +1 -1
  137. package/dist/core/prompt-builder.js +101 -75
  138. package/dist/core/prompt-builder.js.map +1 -1
  139. package/dist/core/refresh-scheduler.d.ts +50 -0
  140. package/dist/core/refresh-scheduler.d.ts.map +1 -0
  141. package/dist/core/refresh-scheduler.js +139 -0
  142. package/dist/core/refresh-scheduler.js.map +1 -0
  143. package/dist/core/reverse-requirement.d.ts +54 -0
  144. package/dist/core/reverse-requirement.d.ts.map +1 -0
  145. package/dist/core/reverse-requirement.js +277 -0
  146. package/dist/core/reverse-requirement.js.map +1 -0
  147. package/dist/core/schemas/task.schema.d.ts +2 -2
  148. package/dist/core/spec-skeleton.d.ts.map +1 -1
  149. package/dist/core/spec-skeleton.js +123 -0
  150. package/dist/core/spec-skeleton.js.map +1 -1
  151. package/dist/core/unified-config.d.ts +14 -0
  152. package/dist/core/unified-config.d.ts.map +1 -1
  153. package/dist/core/unified-config.js +94 -10
  154. package/dist/core/unified-config.js.map +1 -1
  155. package/dist/core/unified-retrieval.d.ts.map +1 -1
  156. package/dist/core/unified-retrieval.js +34 -8
  157. package/dist/core/unified-retrieval.js.map +1 -1
  158. package/dist/utils/task-utils.d.ts +4 -0
  159. package/dist/utils/task-utils.d.ts.map +1 -1
  160. package/dist/utils/task-utils.js +18 -0
  161. package/dist/utils/task-utils.js.map +1 -1
  162. package/package.json +5 -3
  163. package/vendor/tree-sitter/tree-sitter-go.wasm +0 -0
  164. package/vendor/tree-sitter/tree-sitter-java.wasm +0 -0
  165. package/vendor/tree-sitter/tree-sitter-python.wasm +0 -0
  166. package/vendor/tree-sitter/tree-sitter-rust.wasm +0 -0
  167. package/.agents/agents/README.md +0 -79
  168. package/.agents/agents/spec-analyzer.md +0 -41
  169. package/.agents/agents/spec-architect.md +0 -57
  170. package/.agents/agents/spec-change-detector.md +0 -55
  171. package/.agents/agents/spec-clarifier.md +0 -83
  172. package/.agents/agents/spec-executor.md +0 -41
  173. package/.agents/agents/spec-gatekeeper.md +0 -84
  174. package/.agents/agents/spec-global-analyzer.md +0 -111
  175. package/.agents/agents/spec-knowledge-curator.md +0 -54
  176. package/.agents/agents/spec-reviewer.md +0 -46
  177. package/.agents/agents/spec-security-auditor.md +0 -56
  178. package/.agents/agents/spec-tester.md +0 -120
  179. package/.agents/skills/spec-analyze/references/analysis-report.md +0 -9
  180. package/.agents/skills/spec-execute/references/code-output.md +0 -13
  181. package/.agents/skills/spec-plan/references/plan-template.md +0 -29
  182. package/.agents/skills/spec-task-create/references/requirement-template.md +0 -23
  183. package/dist/commands/bugfix.d.ts +0 -17
  184. package/dist/commands/bugfix.d.ts.map +0 -1
  185. package/dist/commands/bugfix.js +0 -301
  186. package/dist/commands/bugfix.js.map +0 -1
  187. package/dist/commands/help-quick.d.ts +0 -3
  188. package/dist/commands/help-quick.d.ts.map +0 -1
  189. package/dist/commands/help-quick.js +0 -66
  190. package/dist/commands/help-quick.js.map +0 -1
  191. package/dist/commands/index-update.d.ts +0 -8
  192. package/dist/commands/index-update.d.ts.map +0 -1
  193. package/dist/commands/index-update.js +0 -180
  194. package/dist/commands/index-update.js.map +0 -1
  195. package/dist/commands/schedule.d.ts +0 -26
  196. package/dist/commands/schedule.d.ts.map +0 -1
  197. package/dist/commands/schedule.js +0 -182
  198. package/dist/commands/schedule.js.map +0 -1
  199. package/dist/commands/watch.d.ts +0 -11
  200. package/dist/commands/watch.d.ts.map +0 -1
  201. package/dist/commands/watch.js +0 -166
  202. package/dist/commands/watch.js.map +0 -1
  203. package/dist/core/ai-markdown.d.ts +0 -5
  204. package/dist/core/ai-markdown.d.ts.map +0 -1
  205. package/dist/core/ai-markdown.js +0 -29
  206. package/dist/core/ai-markdown.js.map +0 -1
  207. package/dist/core/schedule-engine.d.ts +0 -25
  208. package/dist/core/schedule-engine.d.ts.map +0 -1
  209. package/dist/core/schedule-engine.js +0 -281
  210. package/dist/core/schedule-engine.js.map +0 -1
  211. package/dist/core/schedule-store.d.ts +0 -119
  212. package/dist/core/schedule-store.d.ts.map +0 -1
  213. package/dist/core/schedule-store.js +0 -216
  214. package/dist/core/schedule-store.js.map +0 -1
@@ -0,0 +1,139 @@
1
+ "use strict";
2
+ /**
3
+ * refresh-scheduler.ts — 知识底座统一刷新调度
4
+ *
5
+ * 收拢三类刷新对象(RAG 索引 / 知识图谱 / 代码索引)到统一入口,
6
+ * 提供 stale 判定(过期才刷)+ force(强制全量)+ 按 scope 分文件。
7
+ *
8
+ * 刷新对象:
9
+ * RAG 索引 — task→rag-index.json / iteration→rag-index-{iter}.json / global→rag-index-global.json
10
+ * 知识图谱 — knowledge-graph.json(比较 generated 时间 vs 迭代文件 mtime)
11
+ * 代码索引 — .speccore/cache/code-structure.json(mtime 精确判断)
12
+ *
13
+ * 调用时机:分析/变更/检索关键命令前、sync 后;可独立作为 hook 入口。
14
+ *
15
+ * v8.3.184+
16
+ */
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.refreshKnowledgeBase = refreshKnowledgeBase;
19
+ const path_1 = require("path");
20
+ const fs_extra_1 = require("fs-extra");
21
+ const logger_1 = require("../utils/logger");
22
+ const rag_engine_1 = require("./rag-engine");
23
+ const knowledge_graph_1 = require("./knowledge-graph");
24
+ const code_scanner_1 = require("./code-scanner");
25
+ /**
26
+ * 统一刷新知识底座(RAG + 知识图谱 + 代码索引)
27
+ * 返回每类的刷新状态,供调用方决定后续动作。
28
+ */
29
+ async function refreshKnowledgeBase(options = {}) {
30
+ const cwd = options.cwd || process.cwd();
31
+ const targets = options.targets || { rag: true, graph: true, codeIndex: true };
32
+ const silent = options.silent === true;
33
+ const info = (msg) => { if (!silent)
34
+ logger_1.logger.info(msg); };
35
+ const report = {
36
+ rag: { refreshed: false, changes: 0 },
37
+ graph: { refreshed: false, wasStale: false },
38
+ codeIndex: { refreshed: false, files: 0 },
39
+ totalRefreshed: 0,
40
+ };
41
+ // ── 1. RAG 索引(按 scope 分文件)──
42
+ if (targets.rag) {
43
+ try {
44
+ const r = await refreshRagByScope(cwd, options);
45
+ report.rag = r;
46
+ if (r.refreshed)
47
+ report.totalRefreshed++;
48
+ }
49
+ catch (e) {
50
+ logger_1.logger.debug('RAG 索引刷新失败(非关键):', e);
51
+ }
52
+ }
53
+ // ── 2. 知识图谱 ──
54
+ if (targets.graph) {
55
+ try {
56
+ const stale = options.force ? true : await (0, knowledge_graph_1.isGraphStale)(cwd, options.iteration);
57
+ if (stale || options.force) {
58
+ info(' 🔄 刷新知识图谱...');
59
+ await (0, knowledge_graph_1.refreshKnowledgeGraph)(cwd, options.iteration);
60
+ report.graph = { refreshed: true, wasStale: stale };
61
+ report.totalRefreshed++;
62
+ info(' ✅ 知识图谱已刷新');
63
+ }
64
+ else {
65
+ report.graph = { refreshed: false, wasStale: false };
66
+ }
67
+ }
68
+ catch (e) {
69
+ logger_1.logger.debug('知识图谱刷新失败(非关键):', e);
70
+ }
71
+ }
72
+ // ── 3. 代码索引 ──
73
+ if (targets.codeIndex) {
74
+ try {
75
+ const codeIndexScope = await (0, code_scanner_1.resolveIterationScope)(options.iteration);
76
+ const stale = options.force ? true : await (0, code_scanner_1.isIndexStale)(codeIndexScope);
77
+ if (stale || options.force) {
78
+ info(' 🔄 刷新代码索引...');
79
+ const files = await (0, code_scanner_1.buildCodeIndex)(codeIndexScope, true);
80
+ report.codeIndex = { refreshed: true, files };
81
+ report.totalRefreshed++;
82
+ info(' ✅ 代码索引已刷新');
83
+ }
84
+ else {
85
+ report.codeIndex = { refreshed: false, files: 0 };
86
+ }
87
+ }
88
+ catch (e) {
89
+ logger_1.logger.debug('代码索引刷新失败(非关键):', e);
90
+ }
91
+ }
92
+ return report;
93
+ }
94
+ /** RAG 按 scope 分文件刷新(复用 runAnalysis 的既有策略) */
95
+ async function refreshRagByScope(cwd, options) {
96
+ const { iteration, scope, taskId } = options;
97
+ if (scope === 'task' && taskId && iteration) {
98
+ const taskDir = (0, path_1.join)(`Iteration-${iteration}`, '030-tasks', taskId);
99
+ if (await (0, fs_extra_1.pathExists)(taskDir)) {
100
+ const { staleFiles, newFiles } = await (0, rag_engine_1.checkRagIndexFreshness)(cwd);
101
+ await (0, rag_engine_1.refreshRagIndex)(cwd, taskDir, iteration);
102
+ return { refreshed: true, changes: staleFiles.length + newFiles.length };
103
+ }
104
+ }
105
+ else if (scope === 'iteration' && iteration) {
106
+ const specsDir = (0, path_1.join)(`Iteration-${iteration}`, '020-specs');
107
+ const reqDir = (0, path_1.join)(`Iteration-${iteration}`, '010-requirements');
108
+ const dirs = [];
109
+ if (await (0, fs_extra_1.pathExists)(specsDir))
110
+ dirs.push(specsDir);
111
+ if (await (0, fs_extra_1.pathExists)(reqDir))
112
+ dirs.push(reqDir);
113
+ if (dirs.length > 0) {
114
+ const ragScope = `${iteration}_iteration_all`;
115
+ const fileName = `rag-index-${iteration}.json`;
116
+ await (0, rag_engine_1.indexDirectoryDocuments)(cwd, dirs, ragScope, fileName);
117
+ return { refreshed: true, changes: dirs.length };
118
+ }
119
+ }
120
+ else if (scope === 'global') {
121
+ const globalDir = (0, path_1.join)(cwd, '.speccore', 'GLOBAL');
122
+ const fallbackDir = (0, path_1.join)(cwd, '.speccore');
123
+ const targetDir = await (0, fs_extra_1.pathExists)(globalDir) ? globalDir : fallbackDir;
124
+ const dirs = [targetDir];
125
+ const rulesDir = (0, path_1.join)(cwd, '.speccore', 'RULES');
126
+ const skillsDir = (0, path_1.join)(cwd, '.speccore', 'SKILLS');
127
+ const patternsDir = (0, path_1.join)(cwd, '.speccore', 'PATTERNS');
128
+ if (await (0, fs_extra_1.pathExists)(rulesDir))
129
+ dirs.push(rulesDir);
130
+ if (await (0, fs_extra_1.pathExists)(skillsDir))
131
+ dirs.push(skillsDir);
132
+ if (await (0, fs_extra_1.pathExists)(patternsDir))
133
+ dirs.push(patternsDir);
134
+ await (0, rag_engine_1.indexDirectoryDocuments)(cwd, dirs, 'GLOBAL_all_global_all', 'rag-index-global.json');
135
+ return { refreshed: true, changes: dirs.length };
136
+ }
137
+ return { refreshed: false, changes: 0 };
138
+ }
139
+ //# sourceMappingURL=refresh-scheduler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refresh-scheduler.js","sourceRoot":"","sources":["../../src/core/refresh-scheduler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * reverse-requirement.ts — 从源码反推需求(两跳 IR → UR 渐进抽象)
3
+ *
4
+ * 方法论对齐 UserTrace:源码不是直接跳到用户需求,而是分两跳——
5
+ * 第一跳(源码 → 中间需求 IR):按技术模块切分,每个模块产出一份「实现级」IR;
6
+ * 第二跳(IR → 用户需求 UR):合并所有 IR,抽象出「用户级」需求 + EARS 验收标准。
7
+ *
8
+ * 架构边界(SpecCore 哲学):
9
+ * - CLI 只做「确定性」分层:扫描分组、依赖排序、tree-sitter 摘要、骨架生成。
10
+ * - 宿主 AI 做「语义」抽象:IR 的业务语义填充、功能单元划分、EARS 验收标准撰写。
11
+ * - 所有产物标 status: candidate(候选),澄清后才成 Spec。
12
+ *
13
+ * 复用能力:
14
+ * - code-scanner 的 CodeIndex(modules 分组 + endpoints 端识别 + CodeFile 符号/API)
15
+ * - multi-lang-parser 的 tree-sitter 结构化摘要(summarizeCode / summarizeSources)
16
+ *
17
+ * v8.3.184+
18
+ */
19
+ export interface ReverseRequirementOptions {
20
+ /** 源码目录(可选,缺省用 code-index 的默认扫描范围) */
21
+ sources?: string[];
22
+ /** 分析深度 quick/normal/deep,影响读文件数与摘要粒度 */
23
+ depth?: string;
24
+ /** 输出根目录,默认 .speccore/GLOBAL/requirements */
25
+ outputDir?: string;
26
+ /** 只反推指定端(frontend/backend/mobile/cli/shared),缺省全端 */
27
+ platforms?: string[];
28
+ /** 最多反推的模块数(防止超大工程爆量),默认 30 */
29
+ maxModules?: number;
30
+ }
31
+ /** 一个技术模块的中间需求(IR)——第一跳产物 */
32
+ export interface IRModule {
33
+ /** 唯一 id:{endpoint}/{module} */
34
+ id: string;
35
+ endpoint: string;
36
+ module: string;
37
+ files: string[];
38
+ symbols: string[];
39
+ apis: string[];
40
+ imports: string[];
41
+ /** tree-sitter 结构化摘要 */
42
+ summary: string;
43
+ lines: number;
44
+ }
45
+ export interface ReverseResult {
46
+ outputDir: string;
47
+ irDir: string;
48
+ irCount: number;
49
+ modules: IRModule[];
50
+ /** 两跳执行 prompt 路径(宿主 AI 据此完成语义抽象) */
51
+ promptPath: string;
52
+ }
53
+ export declare function reverseRequirementsFromCode(options: ReverseRequirementOptions): Promise<ReverseResult>;
54
+ //# sourceMappingURL=reverse-requirement.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reverse-requirement.d.ts","sourceRoot":"","sources":["../../src/core/reverse-requirement.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAgBH,MAAM,WAAW,yBAAyB;IACxC,sCAAsC;IACtC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,yCAAyC;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6CAA6C;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sDAAsD;IACtD,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,+BAA+B;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,6BAA6B;AAC7B,MAAM,WAAW,QAAQ;IACvB,gCAAgC;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,wBAAwB;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,QAAQ,EAAE,CAAC;IACpB,qCAAqC;IACrC,UAAU,EAAE,MAAM,CAAC;CACpB;AAqOD,wBAAsB,2BAA2B,CAC/C,OAAO,EAAE,yBAAyB,GACjC,OAAO,CAAC,aAAa,CAAC,CAuCxB"}
@@ -0,0 +1,277 @@
1
+ "use strict";
2
+ /**
3
+ * reverse-requirement.ts — 从源码反推需求(两跳 IR → UR 渐进抽象)
4
+ *
5
+ * 方法论对齐 UserTrace:源码不是直接跳到用户需求,而是分两跳——
6
+ * 第一跳(源码 → 中间需求 IR):按技术模块切分,每个模块产出一份「实现级」IR;
7
+ * 第二跳(IR → 用户需求 UR):合并所有 IR,抽象出「用户级」需求 + EARS 验收标准。
8
+ *
9
+ * 架构边界(SpecCore 哲学):
10
+ * - CLI 只做「确定性」分层:扫描分组、依赖排序、tree-sitter 摘要、骨架生成。
11
+ * - 宿主 AI 做「语义」抽象:IR 的业务语义填充、功能单元划分、EARS 验收标准撰写。
12
+ * - 所有产物标 status: candidate(候选),澄清后才成 Spec。
13
+ *
14
+ * 复用能力:
15
+ * - code-scanner 的 CodeIndex(modules 分组 + endpoints 端识别 + CodeFile 符号/API)
16
+ * - multi-lang-parser 的 tree-sitter 结构化摘要(summarizeCode / summarizeSources)
17
+ *
18
+ * v8.3.184+
19
+ */
20
+ Object.defineProperty(exports, "__esModule", { value: true });
21
+ exports.reverseRequirementsFromCode = reverseRequirementsFromCode;
22
+ const path_1 = require("path");
23
+ const fs_extra_1 = require("fs-extra");
24
+ const code_scanner_1 = require("./code-scanner");
25
+ const multi_lang_parser_1 = require("./multi-lang-parser");
26
+ const logger_1 = require("../utils/logger");
27
+ // ── 阶段 1:扫描 + 分组(CLI 确定性,零 Token)──
28
+ async function scanAndGroup(options) {
29
+ // 确保索引最新(复用 code-scanner)
30
+ await (0, code_scanner_1.buildCodeIndex)(options.sources?.join(',') || undefined, true);
31
+ const index = await (0, code_scanner_1.loadFullIndex)();
32
+ if (!index || !index.modules || index.modules.length === 0) {
33
+ throw new Error('代码索引为空,无法反推需求。请确认源码目录存在且包含可解析的代码文件。');
34
+ }
35
+ const platformFilter = new Set(options.platforms?.filter(Boolean) || []);
36
+ const maxModules = options.maxModules || 30;
37
+ // 按「依赖深度」做分层排序(简单拓扑):被依赖多的模块先分析(底层优先)
38
+ const sortedModules = sortModulesByDependencies(index.modules);
39
+ const result = [];
40
+ for (const m of sortedModules) {
41
+ if (result.length >= maxModules)
42
+ break;
43
+ if (platformFilter.size > 0 && !platformFilter.has(m.endpoint))
44
+ continue;
45
+ // 该模块的所有代码文件
46
+ const files = index.files.filter(f => f.module === m.name && f.endpoint === m.endpoint);
47
+ // 模块无代码文件(可能只有配置)则跳过
48
+ if (files.length === 0)
49
+ continue;
50
+ const symbols = dedupe(files.flatMap(f => f.exports));
51
+ const apis = dedupe(files.flatMap(f => f.apiDetails || []));
52
+ const imports = dedupe(m.dependencies || []);
53
+ const lines = files.reduce((a, f) => a + f.lines, 0);
54
+ // 读文件内容,生成 tree-sitter 摘要
55
+ const contents = {};
56
+ for (const f of files.slice(0, 8)) {
57
+ try {
58
+ const fullPath = (0, path_1.join)(process.cwd(), f.path);
59
+ if (await (0, fs_extra_1.pathExists)(fullPath)) {
60
+ contents[f.path] = await (0, fs_extra_1.readFile)(fullPath, 'utf-8');
61
+ }
62
+ }
63
+ catch { /* 忽略不可读文件 */ }
64
+ }
65
+ let summary = '';
66
+ for (const f of files.slice(0, 8)) {
67
+ if (!contents[f.path])
68
+ continue;
69
+ const lang = f.language;
70
+ const s = (0, multi_lang_parser_1.isTreeSitterLang)(lang)
71
+ ? await (0, multi_lang_parser_1.summarizeCode)(contents[f.path], lang)
72
+ : null;
73
+ if (s)
74
+ summary += `\n${s}\n`;
75
+ }
76
+ result.push({
77
+ id: `${m.endpoint}/${m.name}`,
78
+ endpoint: m.endpoint,
79
+ module: m.name,
80
+ files: files.map(f => f.path),
81
+ symbols,
82
+ apis,
83
+ imports,
84
+ summary: summary.trim(),
85
+ lines,
86
+ });
87
+ }
88
+ return { index, modules: result };
89
+ }
90
+ /** 简单拓扑分层:按「被依赖次数」降序(底层模块先分析),无环时安全 */
91
+ function sortModulesByDependencies(modules) {
92
+ const depCount = new Map();
93
+ for (const m of modules) {
94
+ for (const d of m.dependencies || []) {
95
+ depCount.set(d, (depCount.get(d) || 0) + 1);
96
+ }
97
+ }
98
+ return [...modules].sort((a, b) => {
99
+ const da = depCount.get(a.name) || 0;
100
+ const db = depCount.get(b.name) || 0;
101
+ return db - da; // 被依赖多的排前面
102
+ });
103
+ }
104
+ function dedupe(arr) {
105
+ return [...new Set(arr)];
106
+ }
107
+ // ── 阶段 3:第一跳 —— 逐模块 IR 骨架 ──
108
+ function buildIRSkeleton(m) {
109
+ const lines = [];
110
+ lines.push(`# IR: ${m.module}(${m.endpoint})`);
111
+ lines.push('');
112
+ lines.push(`> 状态: candidate | 层级: 实现级中间需求 | 模块 id: \`${m.id}\``);
113
+ lines.push('');
114
+ lines.push(`## 代码事实(CLI 提取,确定)`);
115
+ lines.push('');
116
+ lines.push(`- 端: \`${m.endpoint}\``);
117
+ lines.push(`- 文件: ${m.files.length} 个(${m.lines} 行)`);
118
+ lines.push(`- 符号: ${m.symbols.length ? m.symbols.slice(0, 15).map(s => '`' + s + '`').join(', ') : '_无_'} `);
119
+ lines.push(`- API: ${m.apis.length ? m.apis.slice(0, 15).map(a => '`' + a + '`').join(', ') : '_无_'} `);
120
+ if (m.imports.length) {
121
+ lines.push(`- 依赖模块: ${m.imports.slice(0, 10).map(d => '`' + d + '`').join(', ')}`);
122
+ }
123
+ lines.push('');
124
+ lines.push(`## 源码结构摘要(tree-sitter 提取)`);
125
+ lines.push('');
126
+ if (m.summary) {
127
+ lines.push('```text');
128
+ lines.push(m.summary);
129
+ lines.push('```');
130
+ }
131
+ else {
132
+ lines.push('> _无可解析摘要(文件可能为空或非代码)_');
133
+ }
134
+ lines.push('');
135
+ lines.push(`## 业务语义(宿主 AI 填写)`);
136
+ lines.push('');
137
+ lines.push(`> ⚠️ 以下由宿主 AI 基于「代码事实 + 结构摘要」做语义抽象,勿编造代码中不存在的逻辑。`);
138
+ lines.push('');
139
+ lines.push(`### 模块职责`);
140
+ lines.push('');
141
+ lines.push(`_AI 填写:这个模块在业务上做什么?_`);
142
+ lines.push('');
143
+ lines.push(`### 关键业务规则`);
144
+ lines.push('');
145
+ lines.push(`- _AI 填写:从代码逻辑中抽象出的规则(如「密码错误 5 次锁定」)_`);
146
+ lines.push('');
147
+ lines.push(`### 输入 / 输出`);
148
+ lines.push('');
149
+ lines.push(`| 项 | 说明 |`);
150
+ lines.push(`| :--- | :--- |`);
151
+ lines.push(`| 输入 | _AI 填写_ |`);
152
+ lines.push(`| 输出 | _AI 填写_ |`);
153
+ lines.push('');
154
+ lines.push(`### 异常与边界`);
155
+ lines.push('');
156
+ lines.push(`- _AI 填写_`);
157
+ lines.push('');
158
+ lines.push(`## 文件清单`);
159
+ lines.push('');
160
+ m.files.forEach(f => lines.push(`- \`${f}\``));
161
+ lines.push('');
162
+ return lines.join('\n');
163
+ }
164
+ // ── 阶段 4:第二跳 —— 合成 UR 骨架 + EARS ──
165
+ function buildURSkeleton(modules) {
166
+ const lines = [];
167
+ lines.push(`# 用户需求(UR)—— 从源码反推`);
168
+ lines.push('');
169
+ lines.push(`> 状态: candidate | 层级: 用户级需求 | 反推时间: ${new Date().toISOString().split('T')[0]}`);
170
+ lines.push(`> 说明: 本文件由 CLI 从 ${modules.length} 个技术模块的 IR 合成骨架,功能单元划分与 EARS 验收标准由宿主 AI 完成。`);
171
+ lines.push('');
172
+ lines.push(`## 功能单元清单(宿主 AI 抽象)`);
173
+ lines.push('');
174
+ lines.push(`> 把下面 ${modules.length} 个技术模块按业务语义合并为「功能单元」(一个功能单元可对应多个技术模块,如「用户认证」对应 auth 后端模块 + login 前端模块)。`);
175
+ lines.push('');
176
+ lines.push(`| 功能单元 | 涉及技术模块 | 涉及端 |`);
177
+ lines.push(`| :--- | :--- | :--- |`);
178
+ lines.push(`| _AI 填写_ | _AI 填写_ | _AI 填写_ |`);
179
+ lines.push('');
180
+ lines.push(`## 端覆盖矩阵(CLI 确定)`);
181
+ lines.push('');
182
+ const endpoints = dedupe(modules.map(m => m.endpoint));
183
+ lines.push(`| 端 | 模块数 | 模块清单 |`);
184
+ lines.push(`| :--- | :--- | :--- |`);
185
+ for (const ep of endpoints) {
186
+ const ms = modules.filter(m => m.endpoint === ep);
187
+ lines.push(`| \`${ep}\` | ${ms.length} | ${ms.map(m => m.module).join(', ')} |`);
188
+ }
189
+ lines.push('');
190
+ lines.push(`## 验收标准(EARS 格式,宿主 AI 撰写)`);
191
+ lines.push('');
192
+ lines.push(`> 每个功能单元至少 3 条验收标准,采用 EARS 模板:`);
193
+ lines.push(`> 当 [触发条件] 时,系统应 [期望行为],以便 [用户价值]。`);
194
+ lines.push('');
195
+ lines.push(`### _功能单元名_`);
196
+ lines.push('');
197
+ lines.push(`- **AC-01**:当 _触发条件_ 时,系统应 _期望行为_,以便 _用户价值_。`);
198
+ lines.push(`- **AC-02**:当 _异常条件_ 时,系统应 _容错行为_,以便 _用户价值_。`);
199
+ lines.push('');
200
+ lines.push(`## 待确认项(人工确认)`);
201
+ lines.push('');
202
+ lines.push(`- [ ] 功能单元边界是否正确(有无遗漏/重复/需拆分合并)`);
203
+ lines.push(`- [ ] 端覆盖矩阵是否正确`);
204
+ lines.push(`- [ ] 验收标准是否与代码实现一致、可测试`);
205
+ lines.push(`- [ ] 是否有代码中未体现、但业务上存在的规则需补充`);
206
+ lines.push('');
207
+ return lines.join('\n');
208
+ }
209
+ // ── 阶段 5:两跳执行 prompt(宿主 AI 据此完成语义抽象)──
210
+ function buildReversePrompt(outputDir, irDir, modules) {
211
+ const lines = [];
212
+ lines.push(`# 源码反推需求 · 两跳执行指引`);
213
+ lines.push('');
214
+ lines.push(`> 目标:从源码恢复「候选需求」(status: candidate),澄清后才成为 Spec。`);
215
+ lines.push('');
216
+ lines.push(`## 第一跳:逐模块填充 IR`);
217
+ lines.push('');
218
+ lines.push(`目录:\`${irDir}\`(共 ${modules.length} 个 IR)`);
219
+ lines.push('');
220
+ lines.push(`对每个 IR 文件,只做「业务语义抽象」:`);
221
+ lines.push(`1. 读该 IR 的「代码事实 + 源码结构摘要」(CLI 已提取,勿重读源码);`);
222
+ lines.push(`2. 填写「模块职责 / 关键业务规则 / 输入输出 / 异常边界」;`);
223
+ lines.push(`3. 禁止编造代码中不存在的逻辑;不确定处标注 \`待确认\`。`);
224
+ lines.push('');
225
+ lines.push(`## 第二跳:合成 UR`);
226
+ lines.push('');
227
+ lines.push(`1. 读完所有 IR 后,按业务语义把技术模块合并为「功能单元」;`);
228
+ lines.push(`2. 在 \`${outputDir}/REQUIREMENT.md\` 填写功能单元清单 + EARS 验收标准;`);
229
+ lines.push(`3. 端覆盖矩阵已由 CLI 确定,勿改动。`);
230
+ lines.push('');
231
+ lines.push(`## 约束`);
232
+ lines.push('');
233
+ lines.push(`- 产出物一律标 \`status: candidate\`;`);
234
+ lines.push(`- 需求只从前端反推「用户能做什么」,后端只产出「技术约束」(接口/数据模型/规则);`);
235
+ lines.push(`- 验收标准必须 EARS 格式、无歧义、可测试。`);
236
+ lines.push('');
237
+ return lines.join('\n');
238
+ }
239
+ // ── 主函数 ──
240
+ async function reverseRequirementsFromCode(options) {
241
+ const outputDir = options.outputDir || (0, path_1.join)('.speccore', 'GLOBAL', 'requirements');
242
+ const irDir = (0, path_1.join)(outputDir, '_ir');
243
+ await (0, fs_extra_1.ensureDir)(irDir);
244
+ logger_1.logger.info(' 🔍 反推需求:扫描源码并分组...');
245
+ const { modules } = await scanAndGroup(options);
246
+ if (modules.length === 0) {
247
+ throw new Error('未找到可反推的代码模块。请确认源码目录或 --platforms 过滤条件。');
248
+ }
249
+ logger_1.logger.info(` 📦 识别到 ${modules.length} 个技术模块(按端分组 + 依赖排序)`);
250
+ // 第一跳:逐模块 IR 骨架
251
+ logger_1.logger.info(' 🧩 第一跳:生成逐模块 IR 骨架...');
252
+ for (const m of modules) {
253
+ const irPath = (0, path_1.join)(irDir, `${sanitize(m.id)}.md`);
254
+ await (0, fs_extra_1.writeFile)(irPath, buildIRSkeleton(m));
255
+ }
256
+ // 第二跳:合成 UR 骨架
257
+ logger_1.logger.info(' 🧬 第二跳:合成 UR 骨架 + EARS 模板...');
258
+ const urPath = (0, path_1.join)(outputDir, 'REQUIREMENT.md');
259
+ await (0, fs_extra_1.writeFile)(urPath, buildURSkeleton(modules));
260
+ // 两跳执行 prompt
261
+ const promptPath = (0, path_1.join)(outputDir, 'REVERSE_PROMPT.md');
262
+ await (0, fs_extra_1.writeFile)(promptPath, buildReversePrompt(outputDir, irDir, modules));
263
+ logger_1.logger.info(` ✅ IR: ${modules.length} 个 → ${irDir}`);
264
+ logger_1.logger.info(` ✅ UR 骨架: ${urPath}`);
265
+ logger_1.logger.info(` ✅ 两跳指引: ${promptPath}`);
266
+ return {
267
+ outputDir,
268
+ irDir,
269
+ irCount: modules.length,
270
+ modules,
271
+ promptPath,
272
+ };
273
+ }
274
+ function sanitize(id) {
275
+ return id.replace(/[^a-zA-Z0-9_-]/g, '-');
276
+ }
277
+ //# sourceMappingURL=reverse-requirement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reverse-requirement.js","sourceRoot":"","sources":["../../src/core/reverse-requirement.ts"],"names":[],"mappings":"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"}
@@ -20,8 +20,8 @@ export declare const TaskTypeSchema: z.ZodEnum<{
20
20
  }>;
21
21
  export declare const PlatformSchema: z.ZodEnum<{
22
22
  h5: "h5";
23
- miniapp: "miniapp";
24
23
  web: "web";
24
+ miniapp: "miniapp";
25
25
  tablet: "tablet";
26
26
  tv: "tv";
27
27
  }>;
@@ -76,8 +76,8 @@ export declare const TaskSchema: z.ZodObject<{
76
76
  dependencies: z.ZodDefault<z.ZodArray<z.ZodString>>;
77
77
  platforms: z.ZodDefault<z.ZodArray<z.ZodEnum<{
78
78
  h5: "h5";
79
- miniapp: "miniapp";
80
79
  web: "web";
80
+ miniapp: "miniapp";
81
81
  tablet: "tablet";
82
82
  tv: "tv";
83
83
  }>>>;
@@ -1 +1 @@
1
- {"version":3,"file":"spec-skeleton.d.ts","sourceRoot":"","sources":["../../src/core/spec-skeleton.ts"],"names":[],"mappings":"AAkBA,4BAA4B;AAC5B,eAAO,MAAM,eAAe,2BAA2B,CAAC;AAWxD,MAAM,WAAW,aAAa;IAC5B,iDAAiD;IACjD,OAAO,EAAE,MAAM,CAAC;IAChB,qCAAqC;IACrC,QAAQ,EAAE,UAAU,GAAG,UAAU,CAAC;IAClC,uBAAuB;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU;IACV,OAAO,EAAE,MAAM,CAAC;IAChB,kBAAkB;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,eAAe;IACf,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,iBAAiB;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,eAAe;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,WAAW;IACX,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,qBAAqB;IACrB,YAAY,EAAE,aAAa,GAAG,IAAI,CAAC;IACnC,WAAW;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS;IACT,UAAU,EAAE,MAAM,CAAC;CACpB;AAuZD,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE;IAAE,SAAS,EAAE,MAAM,EAAE,CAAC;IAAC,YAAY,EAAE,MAAM,EAAE,CAAA;CAAE,CA6N3F,CAAC;AAEF;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CA0B7E;AAED;;;GAGG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAsH7D;AAMD;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,MAAM,EAAE,EACnB,KAAK,CAAC,EAAE,GAAG,GAAG,GAAG,EACjB,SAAS,GAAE,MAAW,GACrB,aAAa,EAAE,CA+BjB;AAED;;;;;;;GAOG;AACH,wBAAgB,kCAAkC,CAChD,QAAQ,EAAE,MAAM,EAAE,EAClB,SAAS,EAAE,MAAM,EAAE,EACnB,KAAK,CAAC,EAAE,GAAG,GAAG,GAAG,EACjB,SAAS,GAAE,MAAW,GACrB,aAAa,EAAE,CA6CjB;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EAAE,GAClB,aAAa,EAAE,CAgBjB;AAMD;;;;;GAKG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,aAAa,EAAE,GACvB,OAAO,CAAC,cAAc,CAAC,CAsBzB;AAMD;;;;GAIG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,aAAa,EAAE,GACvB,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAqBnD;AAMD;;;GAGG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,aAAa,EAAE,GACvB,OAAO,CAAC,cAAc,CAAC,CAmBzB;AAMD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,aAAa,EAAE,EACxB,OAAO,EAAE,MAAM,GACd,MAAM,CAyFR"}
1
+ {"version":3,"file":"spec-skeleton.d.ts","sourceRoot":"","sources":["../../src/core/spec-skeleton.ts"],"names":[],"mappings":"AAkBA,4BAA4B;AAC5B,eAAO,MAAM,eAAe,2BAA2B,CAAC;AAWxD,MAAM,WAAW,aAAa;IAC5B,iDAAiD;IACjD,OAAO,EAAE,MAAM,CAAC;IAChB,qCAAqC;IACrC,QAAQ,EAAE,UAAU,GAAG,UAAU,CAAC;IAClC,uBAAuB;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU;IACV,OAAO,EAAE,MAAM,CAAC;IAChB,kBAAkB;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,eAAe;IACf,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,iBAAiB;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,eAAe;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,WAAW;IACX,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,qBAAqB;IACrB,YAAY,EAAE,aAAa,GAAG,IAAI,CAAC;IACnC,WAAW;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS;IACT,UAAU,EAAE,MAAM,CAAC;CACpB;AA6gBD,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE;IAAE,SAAS,EAAE,MAAM,EAAE,CAAC;IAAC,YAAY,EAAE,MAAM,EAAE,CAAA;CAAE,CA6N3F,CAAC;AAEF;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CA0B7E;AAED;;;GAGG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAsH7D;AAMD;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,MAAM,EAAE,EACnB,KAAK,CAAC,EAAE,GAAG,GAAG,GAAG,EACjB,SAAS,GAAE,MAAW,GACrB,aAAa,EAAE,CA+BjB;AAED;;;;;;;GAOG;AACH,wBAAgB,kCAAkC,CAChD,QAAQ,EAAE,MAAM,EAAE,EAClB,SAAS,EAAE,MAAM,EAAE,EACnB,KAAK,CAAC,EAAE,GAAG,GAAG,GAAG,EACjB,SAAS,GAAE,MAAW,GACrB,aAAa,EAAE,CAiDjB;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EAAE,GAClB,aAAa,EAAE,CAgBjB;AAMD;;;;;GAKG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,aAAa,EAAE,GACvB,OAAO,CAAC,cAAc,CAAC,CAsBzB;AAMD;;;;GAIG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,aAAa,EAAE,GACvB,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAqBnD;AAMD;;;GAGG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,aAAa,EAAE,GACvB,OAAO,CAAC,cAAc,CAAC,CAmBzB;AAMD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,aAAa,EAAE,EACxB,OAAO,EAAE,MAAM,GACd,MAAM,CAyFR"}