soloforge 1.3.1 → 1.3.3

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 (158) hide show
  1. package/README.md +11 -3
  2. package/dist/adapters/claude_code/claude_md.d.ts.map +1 -1
  3. package/dist/adapters/claude_code/claude_md.js +4 -0
  4. package/dist/adapters/claude_code/claude_md.js.map +1 -1
  5. package/dist/adapters/claude_code/tools.d.ts +10 -10
  6. package/dist/adapters/claude_code/tools.d.ts.map +1 -1
  7. package/dist/adapters/claude_code/tools.js +603 -18
  8. package/dist/adapters/claude_code/tools.js.map +1 -1
  9. package/dist/adapters/shared/workflow_template.d.ts +26 -0
  10. package/dist/adapters/shared/workflow_template.d.ts.map +1 -1
  11. package/dist/adapters/shared/workflow_template.js +140 -46
  12. package/dist/adapters/shared/workflow_template.js.map +1 -1
  13. package/dist/bin/soloforge.d.ts.map +1 -1
  14. package/dist/bin/soloforge.js +316 -54
  15. package/dist/bin/soloforge.js.map +1 -1
  16. package/dist/engine/asset_manifest.d.ts +7 -1
  17. package/dist/engine/asset_manifest.d.ts.map +1 -1
  18. package/dist/engine/asset_manifest.js +41 -18
  19. package/dist/engine/asset_manifest.js.map +1 -1
  20. package/dist/engine/backend_implementation_contract.d.ts +51 -0
  21. package/dist/engine/backend_implementation_contract.d.ts.map +1 -0
  22. package/dist/engine/backend_implementation_contract.js +142 -0
  23. package/dist/engine/backend_implementation_contract.js.map +1 -0
  24. package/dist/engine/consumable_asset_registry.d.ts.map +1 -1
  25. package/dist/engine/consumable_asset_registry.js +159 -0
  26. package/dist/engine/consumable_asset_registry.js.map +1 -1
  27. package/dist/engine/consumption_trace_store.d.ts +8 -8
  28. package/dist/engine/consumption_trace_store.d.ts.map +1 -1
  29. package/dist/engine/consumption_trace_store.js +11 -7
  30. package/dist/engine/consumption_trace_store.js.map +1 -1
  31. package/dist/engine/decision_workshop.d.ts +160 -0
  32. package/dist/engine/decision_workshop.d.ts.map +1 -0
  33. package/dist/engine/decision_workshop.js +279 -0
  34. package/dist/engine/decision_workshop.js.map +1 -0
  35. package/dist/engine/dual_layer_mechanism_registry.d.ts.map +1 -1
  36. package/dist/engine/dual_layer_mechanism_registry.js +300 -2
  37. package/dist/engine/dual_layer_mechanism_registry.js.map +1 -1
  38. package/dist/engine/explicit_asset_registry.d.ts +30 -0
  39. package/dist/engine/explicit_asset_registry.d.ts.map +1 -0
  40. package/dist/engine/explicit_asset_registry.js +3712 -0
  41. package/dist/engine/explicit_asset_registry.js.map +1 -0
  42. package/dist/engine/implementation_roadmap_registry.d.ts +2 -2
  43. package/dist/engine/implementation_roadmap_registry.d.ts.map +1 -1
  44. package/dist/engine/implementation_roadmap_registry.js +110 -16
  45. package/dist/engine/implementation_roadmap_registry.js.map +1 -1
  46. package/dist/engine/intent_expander.d.ts.map +1 -1
  47. package/dist/engine/intent_expander.js +46 -2
  48. package/dist/engine/intent_expander.js.map +1 -1
  49. package/dist/engine/intent_router.d.ts +1 -1
  50. package/dist/engine/intent_router.d.ts.map +1 -1
  51. package/dist/engine/intent_router.js +2 -1
  52. package/dist/engine/intent_router.js.map +1 -1
  53. package/dist/engine/knowledge_injection_boundary.d.ts +3 -0
  54. package/dist/engine/knowledge_injection_boundary.d.ts.map +1 -1
  55. package/dist/engine/knowledge_injection_boundary.js +48 -5
  56. package/dist/engine/knowledge_injection_boundary.js.map +1 -1
  57. package/dist/engine/mechanism_contract_registry.d.ts +1 -1
  58. package/dist/engine/mechanism_contract_registry.d.ts.map +1 -1
  59. package/dist/engine/mechanism_contract_registry.js +142 -2
  60. package/dist/engine/mechanism_contract_registry.js.map +1 -1
  61. package/dist/engine/next_action_planner.d.ts +19 -0
  62. package/dist/engine/next_action_planner.d.ts.map +1 -0
  63. package/dist/engine/next_action_planner.js +453 -0
  64. package/dist/engine/next_action_planner.js.map +1 -0
  65. package/dist/engine/observed_consumption.d.ts +54 -0
  66. package/dist/engine/observed_consumption.d.ts.map +1 -0
  67. package/dist/engine/observed_consumption.js +377 -0
  68. package/dist/engine/observed_consumption.js.map +1 -0
  69. package/dist/engine/ood_solid_contract.d.ts +51 -0
  70. package/dist/engine/ood_solid_contract.d.ts.map +1 -0
  71. package/dist/engine/ood_solid_contract.js +115 -0
  72. package/dist/engine/ood_solid_contract.js.map +1 -0
  73. package/dist/engine/project_stage_detector.d.ts +17 -0
  74. package/dist/engine/project_stage_detector.d.ts.map +1 -0
  75. package/dist/engine/project_stage_detector.js +185 -0
  76. package/dist/engine/project_stage_detector.js.map +1 -0
  77. package/dist/engine/release_issue_scenario_registry.d.ts +64 -0
  78. package/dist/engine/release_issue_scenario_registry.d.ts.map +1 -0
  79. package/dist/engine/release_issue_scenario_registry.js +1362 -0
  80. package/dist/engine/release_issue_scenario_registry.js.map +1 -0
  81. package/dist/engine/release_readiness_gate.d.ts +1 -1
  82. package/dist/engine/release_readiness_gate.d.ts.map +1 -1
  83. package/dist/engine/release_readiness_gate.js +721 -47
  84. package/dist/engine/release_readiness_gate.js.map +1 -1
  85. package/dist/engine/release_tool_harness.d.ts +71 -0
  86. package/dist/engine/release_tool_harness.d.ts.map +1 -0
  87. package/dist/engine/release_tool_harness.js +161 -0
  88. package/dist/engine/release_tool_harness.js.map +1 -0
  89. package/dist/engine/scaffolder.d.ts.map +1 -1
  90. package/dist/engine/scaffolder.js +144 -7
  91. package/dist/engine/scaffolder.js.map +1 -1
  92. package/dist/engine/stale_current_task_detector.d.ts +30 -0
  93. package/dist/engine/stale_current_task_detector.d.ts.map +1 -0
  94. package/dist/engine/stale_current_task_detector.js +168 -0
  95. package/dist/engine/stale_current_task_detector.js.map +1 -0
  96. package/dist/engine/standard_asset_contract.d.ts +75 -0
  97. package/dist/engine/standard_asset_contract.d.ts.map +1 -0
  98. package/dist/engine/standard_asset_contract.js +388 -0
  99. package/dist/engine/standard_asset_contract.js.map +1 -0
  100. package/dist/engine/standard_asset_coverage.d.ts +45 -0
  101. package/dist/engine/standard_asset_coverage.d.ts.map +1 -0
  102. package/dist/engine/standard_asset_coverage.js +220 -0
  103. package/dist/engine/standard_asset_coverage.js.map +1 -0
  104. package/dist/engine/task_stage_detector.d.ts +19 -0
  105. package/dist/engine/task_stage_detector.d.ts.map +1 -0
  106. package/dist/engine/task_stage_detector.js +201 -0
  107. package/dist/engine/task_stage_detector.js.map +1 -0
  108. package/dist/engine/template_asset_contract_registry.d.ts +162 -0
  109. package/dist/engine/template_asset_contract_registry.d.ts.map +1 -0
  110. package/dist/engine/template_asset_contract_registry.js +598 -0
  111. package/dist/engine/template_asset_contract_registry.js.map +1 -0
  112. package/dist/engine/template_asset_visibility.d.ts +109 -0
  113. package/dist/engine/template_asset_visibility.d.ts.map +1 -0
  114. package/dist/engine/template_asset_visibility.js +321 -0
  115. package/dist/engine/template_asset_visibility.js.map +1 -0
  116. package/dist/engine/template_init_sync.d.ts +68 -0
  117. package/dist/engine/template_init_sync.d.ts.map +1 -0
  118. package/dist/engine/template_init_sync.js +218 -0
  119. package/dist/engine/template_init_sync.js.map +1 -0
  120. package/dist/engine/template_manifest_io.d.ts +10 -0
  121. package/dist/engine/template_manifest_io.d.ts.map +1 -1
  122. package/dist/engine/template_manifest_io.js +63 -30
  123. package/dist/engine/template_manifest_io.js.map +1 -1
  124. package/dist/engine/template_mechanism_auditor.d.ts +3 -1
  125. package/dist/engine/template_mechanism_auditor.d.ts.map +1 -1
  126. package/dist/engine/template_mechanism_auditor.js +27 -24
  127. package/dist/engine/template_mechanism_auditor.js.map +1 -1
  128. package/dist/engine/tool_invocation_contract_registry.d.ts.map +1 -1
  129. package/dist/engine/tool_invocation_contract_registry.js +21 -1
  130. package/dist/engine/tool_invocation_contract_registry.js.map +1 -1
  131. package/dist/engine/workflow_navigation_contract.d.ts +115 -0
  132. package/dist/engine/workflow_navigation_contract.d.ts.map +1 -0
  133. package/dist/engine/workflow_navigation_contract.js +39 -0
  134. package/dist/engine/workflow_navigation_contract.js.map +1 -0
  135. package/dist/knowledge/index_manager.d.ts +20 -0
  136. package/dist/knowledge/index_manager.d.ts.map +1 -1
  137. package/dist/knowledge/index_manager.js +234 -3
  138. package/dist/knowledge/index_manager.js.map +1 -1
  139. package/dist/types.d.ts +44 -1
  140. package/dist/types.d.ts.map +1 -1
  141. package/package.json +2 -2
  142. package/templates/knowledge/acceptance_templates/OOD/350/256/276/350/256/241/346/221/230/350/246/201/346/250/241/347/211/210.md +60 -0
  143. package/templates/knowledge/acceptance_templates//345/220/216/347/253/257/345/256/236/347/216/260/351/252/214/346/224/266/346/270/205/345/215/225.md +46 -0
  144. package/templates/knowledge/procedures/OOD/350/256/276/350/256/241/345/267/245/344/275/234/346/265/201.md +50 -0
  145. package/templates/knowledge/procedures//345/205/250/347/224/237/345/221/275/345/221/250/346/234/237/345/267/245/344/275/234/346/265/201/345/257/274/350/210/252.md +100 -0
  146. package/templates/knowledge/procedures//345/220/216/347/253/257/346/216/245/345/217/243/345/256/236/347/216/260/345/267/245/344/275/234/346/265/201.md +50 -0
  147. package/templates/knowledge/review_rules/SOLID/344/273/243/347/240/201/345/256/241/346/237/245/350/247/204/345/210/231.md +40 -0
  148. package/templates/knowledge/review_rules//345/220/216/347/253/257/345/256/236/347/216/260/345/267/245/347/250/213/345/256/241/346/237/245/350/247/204/345/210/231.md +38 -0
  149. package/templates/knowledge/rules/OOD/344/270/216SOLID/350/256/276/350/256/241/350/247/204/345/210/231.md +62 -0
  150. package/templates/knowledge/rules//345/220/216/347/253/257/345/256/236/347/216/260/345/267/245/347/250/213/345/245/221/347/272/246/350/247/204/345/210/231.md +55 -0
  151. package/templates/knowledge/rules//345/267/245/344/275/234/346/265/201/345/257/274/350/210/252/345/245/221/347/272/246/350/247/204/345/210/231.md +113 -0
  152. package/templates/knowledge/rules//346/240/207/345/207/206/350/265/204/344/272/247/350/246/206/347/233/226/350/247/204/345/210/231.md +72 -0
  153. package/templates/knowledge/rules//346/250/241/346/235/277/350/265/204/344/272/247/345/217/257/350/247/201/346/200/247/350/247/204/345/210/231.md +71 -0
  154. package/templates/knowledge/rules//347/224/250/346/210/267/345/217/215/351/246/210/345/245/221/347/272/246/350/247/204/345/210/231.md +62 -1
  155. package/templates/knowledge/rules//351/200/232/347/224/250/345/206/263/347/255/226/347/240/224/350/256/250/350/247/204/345/210/231.md +77 -0
  156. package/templates/knowledge/rules//351/252/214/346/224/266/346/250/241/346/235/277/350/276/223/345/207/272/345/245/221/347/272/246/350/247/204/345/210/231.md +96 -0
  157. package/templates/patterns/SOLID/350/256/276/350/256/241/350/247/204/350/214/203.md +39 -0
  158. package/templates/patterns//345/220/216/347/253/257/345/256/236/347/216/260/345/267/245/347/250/213/350/247/204/350/214/203.md +39 -0
@@ -0,0 +1,185 @@
1
+ /**
2
+ * 项目阶段检测器 — 问题六十五。
3
+ *
4
+ * 综合项目状态(配置、知识、设计产物、任务)判断当前项目生命周期阶段。
5
+ * 不只看一个字段,综合 config、knowledge、design、task 多维信号。
6
+ */
7
+ import fs from "node:fs";
8
+ import path from "node:path";
9
+ import { resolveProjectConfig, getProjectKnowledgeDir } from "../knowledge/loader.js";
10
+ import { debug } from "./logger.js";
11
+ /**
12
+ * 检测项目当前所处阶段。
13
+ * 综合判断: config 存在性/确认状态、knowledge 可用性、设计产物状态、任务执行状态。
14
+ */
15
+ export async function detectProjectStage(projectPath) {
16
+ debug("项目阶段检测", "开始检测", projectPath);
17
+ const soloforgeDir = path.join(projectPath, ".soloforge");
18
+ const configPath = path.join(soloforgeDir, "config.yaml");
19
+ // 1. 未初始化
20
+ if (!fs.existsSync(soloforgeDir)) {
21
+ return "uninitialized";
22
+ }
23
+ // 2. 已初始化但未持久化配置,不能重复建议 init
24
+ if (!fs.existsSync(configPath)) {
25
+ return "configuration_pending";
26
+ }
27
+ // 3. 配置未确认
28
+ const evidencePath = path.join(soloforgeDir, "config.evidence.json");
29
+ if (!fs.existsSync(evidencePath)) {
30
+ return "configuration_pending";
31
+ }
32
+ try {
33
+ const evidenceRaw = JSON.parse(fs.readFileSync(evidencePath, "utf-8"));
34
+ const confirmedFields = Object.values(evidenceRaw.fields ?? {});
35
+ const allConfirmed = confirmedFields.length > 0
36
+ && confirmedFields.every((f) => f.confidence === "high"
37
+ && (f.confidence_source === "confirmed" || f.confidence_source === "detected"));
38
+ if (!allConfirmed) {
39
+ return "configuration_pending";
40
+ }
41
+ }
42
+ catch {
43
+ return "configuration_pending";
44
+ }
45
+ // 3. 知识就绪检查
46
+ let config;
47
+ try {
48
+ const resolved = await resolveProjectConfig(projectPath);
49
+ config = resolved.config;
50
+ }
51
+ catch {
52
+ return "configuration_pending";
53
+ }
54
+ const knowledgeDir = getProjectKnowledgeDir(config);
55
+ const hasKnowledge = fs.existsSync(knowledgeDir);
56
+ if (!hasKnowledge) {
57
+ return "knowledge_ready";
58
+ }
59
+ // 4-6. 检查任务状态和设计产物
60
+ const stateDir = path.join(soloforgeDir, "state");
61
+ let hasDesignInProgress = false;
62
+ let hasDesignReady = false;
63
+ let hasExecutingTask = false;
64
+ let hasVerifiedDeliveryReady = false;
65
+ let hasDelivered = false;
66
+ if (fs.existsSync(stateDir)) {
67
+ const taskFiles = fs.readdirSync(stateDir).filter((f) => f.startsWith("task-") && f.endsWith(".json"));
68
+ for (const tf of taskFiles) {
69
+ try {
70
+ const task = JSON.parse(fs.readFileSync(path.join(stateDir, tf), "utf-8"));
71
+ // 设计产物检查
72
+ const designPack = task.design_artifact_pack;
73
+ if (designPack) {
74
+ if (designPack.status === "implementation_ready" || designPack.status === "confirmed") {
75
+ hasDesignReady = true;
76
+ }
77
+ else if (designPack.status && designPack.status !== "superseded") {
78
+ hasDesignInProgress = true;
79
+ }
80
+ }
81
+ // 任务执行状态
82
+ const status = task.status;
83
+ if (["executing", "verifying", "learning"].includes(status)) {
84
+ hasExecutingTask = true;
85
+ }
86
+ // 交付就绪
87
+ if (status === "done" && task.verification?.status === "passed") {
88
+ if (task.delivery?.delivery_executed) {
89
+ hasDelivered = true;
90
+ }
91
+ else {
92
+ hasVerifiedDeliveryReady = true;
93
+ }
94
+ }
95
+ }
96
+ catch {
97
+ // 忽略损坏的任务文件
98
+ }
99
+ }
100
+ }
101
+ // 8. 已发布
102
+ if (hasDelivered) {
103
+ return "released";
104
+ }
105
+ // 7. 交付就绪
106
+ if (hasVerifiedDeliveryReady) {
107
+ return "delivery_ready";
108
+ }
109
+ // 6. 开发中
110
+ if (hasExecutingTask) {
111
+ return "development_in_progress";
112
+ }
113
+ // 5. 实现就绪(设计通过审计)
114
+ if (hasDesignReady) {
115
+ return "implementation_ready";
116
+ }
117
+ // 4. 设计进行中
118
+ if (hasDesignInProgress) {
119
+ return "design_in_progress";
120
+ }
121
+ // 3. 知识就绪(默认)
122
+ return "knowledge_ready";
123
+ }
124
+ /** 项目阶段中文标签映射 */
125
+ const PROJECT_STAGE_LABELS = {
126
+ uninitialized: "未初始化",
127
+ configuration_pending: "配置待确认",
128
+ knowledge_ready: "知识就绪",
129
+ design_in_progress: "设计进行中",
130
+ implementation_ready: "实现就绪",
131
+ development_in_progress: "开发进行中",
132
+ delivery_ready: "交付就绪",
133
+ released: "已发布",
134
+ post_release_observation: "发布后观察",
135
+ };
136
+ /** 项目阶段中文描述 */
137
+ const PROJECT_STAGE_DESCRIPTIONS = {
138
+ uninitialized: "项目尚未运行 soloforge init,缺少 .soloforge/ 目录或配置文件",
139
+ configuration_pending: "配置文件存在但字段尚未确认,建议运行 soloforge config confirm 确认关键字段",
140
+ knowledge_ready: "配置已确认、知识库已就绪,可以开始接收开发任务",
141
+ design_in_progress: "架构/数据库/API 设计产物正在进行中,尚未通过审计",
142
+ implementation_ready: "设计产物已通过审计复验,可以开始编码实现",
143
+ development_in_progress: "已有任务在编码/验证阶段",
144
+ delivery_ready: "任务已通过验证,准备交付",
145
+ released: "已发布上线",
146
+ post_release_observation: "发布后观察期,建议验证、监控、收集反馈",
147
+ };
148
+ /** 项目阶段必要证据 */
149
+ const PROJECT_STAGE_EVIDENCE = {
150
+ uninitialized: [],
151
+ configuration_pending: [".soloforge/config.yaml 存在"],
152
+ knowledge_ready: ["config 已确认", "knowledge 目录存在"],
153
+ design_in_progress: ["design_artifact_pack 状态非 implementation_ready"],
154
+ implementation_ready: ["design_artifact_pack.status === implementation_ready"],
155
+ development_in_progress: ["存在 executing/verifying/learning 状态任务"],
156
+ delivery_ready: ["任务验证通过", "delivery readiness 评估通过"],
157
+ released: ["delivery 已执行"],
158
+ post_release_observation: ["已发布"],
159
+ };
160
+ /** 项目阶段可能的下一阶段 */
161
+ const PROJECT_STAGE_NEXT = {
162
+ uninitialized: ["configuration_pending"],
163
+ configuration_pending: ["knowledge_ready", "uninitialized"],
164
+ knowledge_ready: ["design_in_progress", "development_in_progress"],
165
+ design_in_progress: ["implementation_ready"],
166
+ implementation_ready: ["development_in_progress"],
167
+ development_in_progress: ["delivery_ready"],
168
+ delivery_ready: ["released"],
169
+ released: ["post_release_observation"],
170
+ post_release_observation: [],
171
+ };
172
+ /**
173
+ * 获取项目阶段的中文解释。
174
+ */
175
+ export function explainProjectStage(stage) {
176
+ return {
177
+ stage,
178
+ level: "project",
179
+ label_zh: PROJECT_STAGE_LABELS[stage],
180
+ description_zh: PROJECT_STAGE_DESCRIPTIONS[stage],
181
+ required_evidence: PROJECT_STAGE_EVIDENCE[stage],
182
+ next_possible_stages: PROJECT_STAGE_NEXT[stage],
183
+ };
184
+ }
185
+ //# sourceMappingURL=project_stage_detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project_stage_detector.js","sourceRoot":"","sources":["../../src/engine/project_stage_detector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * 发布问题场景注册表 — 结构化场景定义 + 真实生产入口执行证据。
3
+ *
4
+ * R11: 所有 MCP 工具链场景使用 ToolInvocationObservation 记录。
5
+ * 确认通过 sf_expand 的 decision_workshop / architecture_decision_workshop 输入,
6
+ * 不再直接修改 TaskContext 确认研讨域。
7
+ */
8
+ export interface ScenarioExecutionResult {
9
+ scenario_id: string;
10
+ status: "pass" | "fail";
11
+ evidence?: string;
12
+ error?: string;
13
+ duration_ms?: number;
14
+ /** 真实入口 trace: 由 ToolInvocationObservation 生成 */
15
+ production_trace?: {
16
+ tool_entrypoint: string;
17
+ diagnostic_codes: string[];
18
+ gates_consumed: string[];
19
+ };
20
+ behavioral_proof?: {
21
+ task_id: string;
22
+ blocked_task_id?: string;
23
+ delivered_task_id?: string;
24
+ contract_blocked?: boolean;
25
+ repair_directive_cleared?: boolean;
26
+ artifact_status?: string;
27
+ acceptance_confirmation_ref?: string;
28
+ delivery_succeeded?: boolean;
29
+ };
30
+ }
31
+ export interface ScenarioEntry {
32
+ scenario_id: string;
33
+ covering_problem: string;
34
+ test_files: string[];
35
+ /** 真实生产入口标识 */
36
+ production_entrypoint: string;
37
+ /** 明确的预期结果描述 */
38
+ expected_outcome: string;
39
+ /** 执行函数: 运行真实生产逻辑产生执行证据 */
40
+ runner: () => Promise<ScenarioExecutionResult>;
41
+ }
42
+ /** 获取全量场景定义 */
43
+ export declare function getReleaseIssueScenarios(): ScenarioEntry[];
44
+ /**
45
+ * 验证 发布问题场景覆盖:
46
+ * - 所有场景必须有 runner + production_entrypoint + expected_outcome
47
+ * - 所有引用测试文件的场景: 测试文件必须存在
48
+ * - 返回结构化验证结果
49
+ */
50
+ export declare function validateReleaseIssueScenarios(rootDir: string): {
51
+ valid: boolean;
52
+ missing_tests: string[];
53
+ missing_runners: string[];
54
+ missing_entrypoints: string[];
55
+ tautology_suspects: string[];
56
+ scenario_count: number;
57
+ covered_problems: string[];
58
+ };
59
+ /**
60
+ * 运行所有场景,收集执行证据。
61
+ * 每个场景必须有 runner,无 runner 视为 fail。
62
+ */
63
+ export declare function executeReleaseIssueScenarios(): Promise<ScenarioExecutionResult[]>;
64
+ //# sourceMappingURL=release_issue_scenario_registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"release_issue_scenario_registry.d.ts","sourceRoot":"","sources":["../../src/engine/release_issue_scenario_registry.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,MAAM,WAAW,uBAAuB;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iDAAiD;IACjD,gBAAgB,CAAC,EAAE;QACjB,eAAe,EAAE,MAAM,CAAC;QACxB,gBAAgB,EAAE,MAAM,EAAE,CAAC;QAC3B,cAAc,EAAE,MAAM,EAAE,CAAC;KAC1B,CAAC;IACF,gBAAgB,CAAC,EAAE;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,gBAAgB,CAAC,EAAE,OAAO,CAAC;QAC3B,wBAAwB,CAAC,EAAE,OAAO,CAAC;QACnC,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,2BAA2B,CAAC,EAAE,MAAM,CAAC;QACrC,kBAAkB,CAAC,EAAE,OAAO,CAAC;KAC9B,CAAC;CACH;AAED,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,eAAe;IACf,qBAAqB,EAAE,MAAM,CAAC;IAC9B,gBAAgB;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,2BAA2B;IAC3B,MAAM,EAAE,MAAM,OAAO,CAAC,uBAAuB,CAAC,CAAC;CAChD;AAs0CD,eAAe;AACf,wBAAgB,wBAAwB,IAAI,aAAa,EAAE,CAE1D;AAED;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,MAAM,GACd;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,aAAa,EAAE,MAAM,EAAE,CAAC;IAAC,eAAe,EAAE,MAAM,EAAE,CAAC;IAAC,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAAC,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAAC,cAAc,EAAE,MAAM,CAAC;IAAC,gBAAgB,EAAE,MAAM,EAAE,CAAA;CAAE,CAqCzL;AAED;;;GAGG;AACH,wBAAsB,4BAA4B,IAAI,OAAO,CAAC,uBAAuB,EAAE,CAAC,CAavF"}