feihong-code 0.2.2 → 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (152) hide show
  1. package/.github/FUNDING.yml +4 -0
  2. package/.github/ISSUE_TEMPLATE/bug_report.md +37 -37
  3. package/.github/ISSUE_TEMPLATE/config.yml +14 -14
  4. package/.github/ISSUE_TEMPLATE/feature_request.md +28 -28
  5. package/.github/PULL_REQUEST_TEMPLATE.md +46 -46
  6. package/.github/SECURITY.md +67 -67
  7. package/.github/dependabot.yml +16 -0
  8. package/.github/workflows/ci.yml +1 -1
  9. package/AGENT-GUIDE.md +382 -237
  10. package/CHANGELOG.md +405 -73
  11. package/CODE_OF_CONDUCT.md +56 -56
  12. package/CONTRIBUTING.md +68 -68
  13. package/LICENSE +22 -22
  14. package/README.md +31 -25
  15. package/README.self-evolve.md +274 -0
  16. package/dist/agent/code-review.js +2 -0
  17. package/dist/agent/code-review.js.map +1 -1
  18. package/dist/agent/code-writer.js +70 -17
  19. package/dist/agent/code-writer.js.map +1 -1
  20. package/dist/agent/context-compactor.js +13 -4
  21. package/dist/agent/context-compactor.js.map +1 -1
  22. package/dist/agent/experience.js +262 -62
  23. package/dist/agent/experience.js.map +1 -1
  24. package/dist/agent/orchestrator.js +148 -68
  25. package/dist/agent/orchestrator.js.map +1 -1
  26. package/dist/agent/quality-gate.js +10 -4
  27. package/dist/agent/quality-gate.js.map +1 -1
  28. package/dist/agent/repo-context.js +181 -0
  29. package/dist/agent/repo-context.js.map +1 -0
  30. package/dist/agent/repo-reader.js +92 -99
  31. package/dist/agent/repo-reader.js.map +1 -1
  32. package/dist/agent/self-heal.js +38 -48
  33. package/dist/agent/self-heal.js.map +1 -1
  34. package/dist/agent/self-improver.js +65 -61
  35. package/dist/agent/self-improver.js.map +1 -1
  36. package/dist/agent/subagent-summary.js +31 -0
  37. package/dist/agent/subagent-summary.js.map +1 -0
  38. package/dist/agent/subagent.js +52 -2
  39. package/dist/agent/subagent.js.map +1 -1
  40. package/dist/agent/symbol-index.js +160 -0
  41. package/dist/agent/symbol-index.js.map +1 -0
  42. package/dist/agent/team.js +193 -0
  43. package/dist/agent/team.js.map +1 -0
  44. package/dist/cli/commands.js +124 -143
  45. package/dist/cli/commands.js.map +1 -1
  46. package/dist/cli/index.js +113 -106
  47. package/dist/cli/index.js.map +1 -1
  48. package/dist/cli/repl.js +82 -7
  49. package/dist/cli/repl.js.map +1 -1
  50. package/dist/cli/run.js +601 -95
  51. package/dist/cli/run.js.map +1 -1
  52. package/dist/cli/tui.js +145 -0
  53. package/dist/cli/tui.js.map +1 -0
  54. package/dist/cli/version.js +1 -1
  55. package/dist/enterprise/audit.js +75 -12
  56. package/dist/enterprise/audit.js.map +1 -1
  57. package/dist/enterprise/index.js +14 -11
  58. package/dist/enterprise/index.js.map +1 -1
  59. package/dist/enterprise/policy.js +22 -10
  60. package/dist/enterprise/policy.js.map +1 -1
  61. package/dist/harness/executor.js +127 -0
  62. package/dist/harness/executor.js.map +1 -0
  63. package/dist/harness/harness.js +87 -0
  64. package/dist/harness/harness.js.map +1 -0
  65. package/dist/harness/index.js +31 -0
  66. package/dist/harness/index.js.map +1 -0
  67. package/dist/harness/loader.js +138 -0
  68. package/dist/harness/loader.js.map +1 -0
  69. package/dist/harness/reporter.js +34 -0
  70. package/dist/harness/reporter.js.map +1 -0
  71. package/dist/harness/types.js +10 -0
  72. package/dist/harness/types.js.map +1 -0
  73. package/dist/harness/verifier.js +48 -0
  74. package/dist/harness/verifier.js.map +1 -0
  75. package/dist/hello.js +14 -0
  76. package/dist/hello.js.map +1 -0
  77. package/dist/memory/auto-summarize.js +208 -0
  78. package/dist/memory/auto-summarize.js.map +1 -0
  79. package/dist/memory/index.js +228 -0
  80. package/dist/memory/index.js.map +1 -0
  81. package/dist/models/model-router.js +23 -10
  82. package/dist/models/model-router.js.map +1 -1
  83. package/dist/plugins/plugin-loader.js +179 -0
  84. package/dist/plugins/plugin-loader.js.map +1 -0
  85. package/dist/runtime/event-log.js.map +1 -1
  86. package/dist/runtime/hooks.js +80 -0
  87. package/dist/runtime/hooks.js.map +1 -0
  88. package/dist/self-evolve/hook.js +60 -0
  89. package/dist/self-evolve/hook.js.map +1 -0
  90. package/dist/shared/config.js +35 -3
  91. package/dist/shared/config.js.map +1 -1
  92. package/dist/shared/i18n.js +535 -0
  93. package/dist/shared/i18n.js.map +1 -0
  94. package/dist/skills/grill.js +2 -1
  95. package/dist/skills/grill.js.map +1 -1
  96. package/dist/skills/self-heal.js +73 -0
  97. package/dist/skills/self-heal.js.map +1 -0
  98. package/dist/skills/skill-loader.js +131 -0
  99. package/dist/skills/skill-loader.js.map +1 -0
  100. package/dist/skills/skill-market.js +195 -0
  101. package/dist/skills/skill-market.js.map +1 -0
  102. package/dist/tools/analysis/code-analyzer.js +45 -18
  103. package/dist/tools/analysis/code-analyzer.js.map +1 -1
  104. package/dist/tools/index.js +5 -0
  105. package/dist/tools/index.js.map +1 -1
  106. package/dist/tools/mcp/index.js +84 -0
  107. package/dist/tools/mcp/index.js.map +1 -0
  108. package/dist/tools/mcp/mcp-client.js +172 -0
  109. package/dist/tools/mcp/mcp-client.js.map +1 -0
  110. package/dist/tools/sandbox.js +126 -0
  111. package/dist/tools/sandbox.js.map +1 -0
  112. package/dist/tools/shell/exec.js +25 -0
  113. package/dist/tools/shell/exec.js.map +1 -1
  114. package/dist/tools/shell/run-shell.tool.js +4 -1
  115. package/dist/tools/shell/run-shell.tool.js.map +1 -1
  116. package/dist/tools/skills/load-skill.tool.js +36 -0
  117. package/dist/tools/skills/load-skill.tool.js.map +1 -0
  118. package/dist/tools/tool.interface.js.map +1 -1
  119. package/dist/tools/tool.registry.js +37 -1
  120. package/dist/tools/tool.registry.js.map +1 -1
  121. package/dist/tools/web/web.tool.js +139 -0
  122. package/dist/tools/web/web.tool.js.map +1 -0
  123. package/dist/web/auth.js +42 -3
  124. package/dist/web/auth.js.map +1 -1
  125. package/dist/web/channels.js +171 -0
  126. package/dist/web/channels.js.map +1 -0
  127. package/dist/web/public/index.html +3253 -39
  128. package/dist/web/public/index.html.tmp +3117 -0
  129. package/dist/web/public/index_new.html +3196 -0
  130. package/dist/web/server.js +790 -11
  131. package/dist/web/server.js.map +1 -1
  132. package/dist/web/task-queue.js +352 -0
  133. package/dist/web/task-queue.js.map +1 -0
  134. package/dist/web/web-config.js +143 -0
  135. package/dist/web/web-config.js.map +1 -0
  136. package/docs/Deployment_Guide_EN.md +288 -0
  137. package/docs/Technical_Manual_EN.md +216 -0
  138. package/docs/User_Manual_EN.md +314 -0
  139. package/docs/self-evolve-implementation.md +165 -0
  140. package/docs/self-evolve.md +166 -0
  141. package/docs//344/272/247/345/223/201/345/274/200/345/217/221/346/226/207/346/241/243.md +614 -614
  142. package/docs//344/274/201/344/270/232/351/203/250/347/275/262/344/270/216/345/220/210/350/247/204.md +267 -267
  143. package/docs//344/275/277/347/224/250/350/257/264/346/230/216/344/271/246.md +318 -358
  144. package/docs//345/270/270/350/247/201/351/227/256/351/242/230/344/270/216/346/225/205/351/232/234/346/216/222/346/237/245.md +130 -130
  145. package/docs//346/212/200/346/234/257/350/257/264/346/230/216/344/271/246.md +216 -303
  146. package/docs//346/236/266/346/236/204/344/270/216API.md +238 -238
  147. package/docs//347/224/250/346/210/267/346/211/213/345/206/214.md +196 -196
  148. package/docs//351/203/250/347/275/262/346/214/207/345/215/227.md +165 -165
  149. package/docs//351/203/250/347/275/262/350/257/264/346/230/216/344/271/246.md +288 -0
  150. package/docs//351/205/215/347/275/256/345/217/202/350/200/203.md +127 -127
  151. package/package.json +114 -109
  152. package/tool-schema.json +127 -127
@@ -0,0 +1,535 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.normalizeLang = normalizeLang;
4
+ exports.detectLang = detectLang;
5
+ exports.getLang = getLang;
6
+ exports.setLang = setLang;
7
+ exports.t = t;
8
+ exports.brandTag = brandTag;
9
+ /** 归一化任意语言写法为 'zh' | 'en' | null(无法识别返回 null) */
10
+ function normalizeLang(raw) {
11
+ if (!raw)
12
+ return null;
13
+ const v = raw.trim().toLowerCase();
14
+ if (v === 'zh' || v === 'zh-cn' || v === 'zh-tw' || v === 'chinese' || v === '中文')
15
+ return 'zh';
16
+ if (v === 'en' || v === 'en-us' || v === 'en-gb' || v === 'english')
17
+ return 'en';
18
+ if (v.startsWith('zh'))
19
+ return 'zh';
20
+ if (v.startsWith('en'))
21
+ return 'en';
22
+ return null;
23
+ }
24
+ /** 自动检测当前语言:FHCODE_LANG 优先,其次系统 locale,未识别默认中文 */
25
+ function detectLang() {
26
+ const env = normalizeLang(process.env.FHCODE_LANG);
27
+ if (env)
28
+ return env;
29
+ const locale = (process.env.LANG ||
30
+ process.env.LC_ALL ||
31
+ process.env.LANGUAGE ||
32
+ '').toLowerCase();
33
+ if (locale.includes('zh') || locale.includes('cn'))
34
+ return 'zh';
35
+ if (locale.includes('en'))
36
+ return 'en';
37
+ return 'zh';
38
+ }
39
+ let currentLang = detectLang();
40
+ function getLang() {
41
+ return currentLang;
42
+ }
43
+ /** 设置当前语言;仅接受 'zh' / 'en',其它忽略(保持现状) */
44
+ function setLang(lang) {
45
+ const norm = normalizeLang(lang);
46
+ if (norm)
47
+ currentLang = norm;
48
+ }
49
+ /* ============================ 中文词条 ============================ */
50
+ const ZH = {
51
+ 'app.product': '飞虹 Code',
52
+ 'app.tagline': '终端 AI 编程智能体(Muse Code 参照复刻)',
53
+ 'app.signature': '晋江市飞虹智科技企业管理有限公司 · 飞扬企源研发中心 · 负责人:吴赐虹',
54
+ 'cli.brand': '[飞虹 Code]',
55
+ 'cli.help': `飞虹 Code (fhcode) v{version}
56
+
57
+ 用法:
58
+ fhcode 进入交互 REPL
59
+ fhcode "<需求>" 单命令模式执行一条需求
60
+ fhcode --parallel "<需求>" 多子代理并行(M2:git worktree 隔离)
61
+ fhcode /plan "<目标>" 生成实现计划(只读)
62
+ fhcode /grill [路径] 红队式代码审查(只读)
63
+ fhcode /goal "<目标>" 分解并保存高层目标
64
+ fhcode sessions 列出历史会话(M3 恢复与审计)
65
+ fhcode resume <id> 从检查点恢复中断的会话(M3)
66
+ fhcode diff [<id>] 展示会话/工作区变更(M3)
67
+ fhcode rollback <id> [--yes] 回滚会话改动(M3,危险操作需 --yes)
68
+
69
+ 企业能力 (M4):
70
+ fhcode whoami 当前租户 / 用户 / 角色 / 隔离目录 / 配额
71
+ fhcode policy 查看生效的 RBAC 策略与角色矩阵
72
+ fhcode audit [--limit N] 查看审计记录(默认最近 20 条)
73
+ fhcode audit verify 校验审计哈希链是否被篡改
74
+ fhcode tenants 列出全部租户与用量汇总
75
+ fhcode doctor 环境自检(版本/git/provider/路径/网络)
76
+
77
+ 自我进化 (M6):
78
+ fhcode model-stats 查看各模型性能统计
79
+ fhcode experiences [路径] 列出经验库
80
+
81
+ Web 控制台 (M5):
82
+ fhcode serve [--port 8080] 启动 Web 管理控制台(默认 http://localhost:8080)
83
+ 令牌由 FH_WEB_TOKEN 或自动生成(控制台仅观测,不执行)
84
+
85
+ 自主编程 (M8):
86
+ fhcode code-write "<目标>" 自主编写代码(规划→编写→测试→审查→修复)
87
+ fhcode quality-gate [路径] 质量门禁审查(安全+质量+测试覆盖)
88
+ fhcode self-improve 自我改进统计与历史
89
+
90
+ 全自动软件工程 Agent (M9):
91
+ fhcode swe "<目标>" 读取仓库→拆解规划→实现+验证+自愈→报告
92
+ --repo <路径> 指定仓库(默认当前目录)
93
+ --plan-only 仅规划不执行
94
+ --verify-only 仅跑验证不实现
95
+ --max-tasks N 限制子任务数(默认8)
96
+ --max-retries N 单任务自愈重试(默认2)
97
+
98
+ fhcode --version 显示版本 (-v)
99
+ fhcode --help 显示帮助 (-h)
100
+ fhcode --lang <zh|en> 设置界面语言(中文/英文)
101
+
102
+ 说明: 未配置 FH_PROVIDERS 时自动进入离线模式(脚本化 Mock 驱动闭环验证)。
103
+ 配置 FH_PROVIDERS(OpenAI 兼容 / Ollama)后,将调用真实大模型执行任务。
104
+ 企业模式默认开启(租户隔离 + RBAC + 审计链 + 配额),可用 FH_ENTERPRISE=false 关闭。
105
+ 署名: {signature}`,
106
+ 'repl.welcome': '飞虹 Code REPL(输入需求回车执行,exit 退出)',
107
+ 'repl.hint': '提示:未配置 FH_PROVIDERS 时自动离线模式运行;支持 /plan /grill /goal 技能。\n',
108
+ 'repl.prompt': '飞虹> ',
109
+ 'repl.errorPrefix': '执行出错: ',
110
+ 'repl.unknownSkill': '未知技能: /{cmd}(支持 /plan /grill /goal)',
111
+ 'repl.bye': '\n再见。',
112
+ 'repl.stateReady': '就绪',
113
+ 'repl.stateRunning': '运行中',
114
+ 'stream.toolCalling': '调用工具: {tools}',
115
+ 'stream.toolOk': '成功',
116
+ 'stream.toolFail': '失败',
117
+ 'stream.selfHeal': '自愈重试: {category}',
118
+ 'stream.compact': '上下文压缩: {from} → {to} 条消息',
119
+ 'stream.done': '任务结束 · 迭代 {iter} 次 · 成本 {cost}',
120
+ 'run.identity': '身份 tenant={tenant} user={user} role={role}',
121
+ 'run.start': '开始任务 (runId={id}{mode})',
122
+ 'run.resultTitle': '===== 执行结果 =====',
123
+ 'run.summary': '迭代 {iter} 次 · 成本 {cost} · 日志 {log}',
124
+ 'run.checkpoint': '会话检查点: {path}(可用 fhcode sessions / resume / diff 管理)',
125
+ 'run.offlineFileYes': '(离线模式演示文件已写入: {file})',
126
+ 'run.offlineFileNo': '(离线模式未产生演示文件,工作区: {cwd};如为策略拒绝可用 fhcode audit 查看原因)',
127
+ 'run.offlineFragment': ', 离线模式',
128
+ 'run.modeOffline': '离线',
129
+ 'run.modeLive': '真实',
130
+ 'run.parallelMode': '[飞虹 Code] 并行模式:{offline}',
131
+ 'run.parallelResult': '===== 并行执行结果 =====',
132
+ 'run.parallelRepo': '仓库根: {root} · 工作树已清理: {trees}',
133
+ 'run.noSessions': '(无历史会话)',
134
+ 'run.sessionList': '历史会话({mode}模式,目录 {home}):',
135
+ 'run.sessionItem': '- {id} | {status} | 迭代{iter} | 成本{cost} | 文件{files} | {time}',
136
+ 'run.sessionGoal': ' 目标: {goal}',
137
+ 'run.resumeDone': '会话 {id} 已完成,无需恢复。',
138
+ 'run.resumeStart': '[飞虹 Code] 恢复会话 {id} (状态: {status}, 已迭代 {iter} 次)',
139
+ 'run.diffSession': '[飞虹 Code] 会话 {id} 的变更 (cwd={cwd}):',
140
+ 'run.diffCwd': '[飞虹 Code] 当前目录 ({cwd}) 工作区变更:',
141
+ 'run.rollbackStart': '[飞虹 Code] 回滚会话 {id} 的 {n} 个文件 (cwd={cwd})',
142
+ 'run.rollbackReverted': '已还原(已跟踪): {files}',
143
+ 'run.rollbackRemoved': '已删除(未跟踪): {files}',
144
+ 'run.rollbackNote': '注意: {errors}',
145
+ 'err.enterpriseDisabled': '企业模式已关闭(FH_ENTERPRISE=false),该命令不可用。',
146
+ 'err.runFailed': '[飞虹 Code] 运行失败 ({code}): {message}',
147
+ 'err.unexpected': '运行出错: ',
148
+ 'err.hint': '(详细日志见结构化 JSON 输出;配置类错误请检查 FH_PROVIDERS / .env)',
149
+ 'mode.offline': '离线',
150
+ 'mode.live': '真实',
151
+ 'audit.empty': '(租户 {tenant} 暂无审计记录,目录 {dir})',
152
+ 'audit.header': '审计记录 {rows}/{all} 条(租户 {tenant}):',
153
+ 'audit.row': '#{seq} {ts} [{decision}] {action} by {user}({role}) run={run}',
154
+ 'audit.resource': ' 资源: {resource}',
155
+ 'audit.reason': ' 理由: {reason}',
156
+ 'audit.chainTail': '链尾哈希: {hash}…',
157
+ 'audit.verifyOk': '✅ 审计链完整:{total} 条记录,哈希链自洽未被篡改。',
158
+ 'audit.verifyFail': '❌ 审计链校验失败:共 {total} 条,断点在第 {brokenAt} 条',
159
+ 'tenants.empty': '(暂无租户数据,执行一次任务后自动创建)',
160
+ 'tenants.header': '租户用量汇总:',
161
+ 'tenants.tableHeader': ' 租户ID 会话数 累计成本 审计条数 最近活跃',
162
+ 'tenants.row': ' {id} {sessions} {cost} {audit} {last}',
163
+ 'modelStats.empty': '(暂无模型性能数据,执行任务后自动生成)',
164
+ 'modelStats.noRecords': '(无模型统计记录)',
165
+ 'modelStats.title': '模型性能统计(M6):',
166
+ 'modelStats.tableHeader': ' 提供者ID 模型 总调用 成功 失败 成功率 平均延迟 总成本',
167
+ 'exp.empty': '(暂无经验记录,完成任务后自动积累)',
168
+ 'exp.header': '经验库 ({n} 条,来源: {dir}):',
169
+ 'exp.tableHeader': ' ID 类型 标题 成功率 使用次数',
170
+ 'exp.more': ' ... 共 {n} 条,显示前 10 条',
171
+ 'doctor.title': '===== fhcode doctor 环境自检 =====',
172
+ 'doctor.node': 'Node 版本',
173
+ 'doctor.git': 'git 可用性',
174
+ 'doctor.gitMissing': 'git 不可用(diff/rollback/并行模式将受限)',
175
+ 'doctor.config': '模型配置',
176
+ 'doctor.configEmpty': '未配置 provider(将自动进入离线模式)',
177
+ 'doctor.provider': '供应商',
178
+ 'doctor.network': '网络连通',
179
+ 'doctor.networkOffline': '离线模式,跳过网络探测',
180
+ 'doctor.home': '主目录可写',
181
+ 'doctor.sandbox': '沙箱模式',
182
+ 'doctor.sandboxUnavailable': '(配置不可用)',
183
+ 'doctor.allOk': '✅ 环境就绪,无异常项',
184
+ 'doctor.issues': '⚠️ 发现 {n} 项异常,请根据提示处理',
185
+ 'plugin.installUsage': '用法: fhcode plugin install <本地目录|git URL>',
186
+ 'plugin.installed': '✅ 插件已安装: {name}({dir})',
187
+ 'plugin.installFailed': '❌ 插件安装失败: ',
188
+ 'plugin.empty': '(未安装任何插件)',
189
+ 'plugin.listTitle': '已安装插件:',
190
+ 'skillMarket.localEmpty': '(本地无已安装技能)',
191
+ 'skillMarket.localTitle': '本地已安装技能({n} 个):',
192
+ 'skillMarket.fetchFailed': '❌ 拉取市场索引失败({base}): ',
193
+ 'skillMarket.schemaWarn': '⚠️ 市场索引 schema 未识别({schema}),按 0.1.0 兼容处理',
194
+ 'skillMarket.searchEmpty': '(市场无匹配 "{q}" 的技能)',
195
+ 'skillMarket.searchTitle': '市场「{q}」搜索结果({n} 个,来源 {base}):',
196
+ 'skillMarket.installHint': '安装: fhcode skill-market install <技能名> [--repo <市场源>]',
197
+ 'skillMarket.installUsage': '用法: fhcode skill-market install <技能名> [--repo <市场源>]',
198
+ 'skillMarket.notFound': '❌ 市场中未找到技能: {name}',
199
+ 'skillMarket.installed': '✅ 技能已安装: {name}({dir}),任务中自动发现',
200
+ 'skillMarket.installFailed': '❌ 技能安装失败: ',
201
+ 'team.start': 'Agent Team 启动({mode}): 共享任务清单 + 消息总线协作',
202
+ 'team.reportTitle': '===== Agent Team 协作报告 =====',
203
+ 'serve.url': '[飞虹 Code] Web 控制台: {url}',
204
+ 'serve.token': '[飞虹 Code] 访问令牌 (FH_WEB_TOKEN): {token}',
205
+ 'serve.stop': '[飞虹 Code] 按 Ctrl+C 停止',
206
+ 'serve.tokenAuto': '[飞虹 Code] Web 控制台令牌已自动生成(FH_WEB_TOKEN): {token}',
207
+ 'serve.started': '[飞虹 Code] Web 控制台已启动: http://localhost:{port}',
208
+ 'codewrite.resultTitle': '===== M8 自主编写结果 =====',
209
+ 'codewrite.files': '生成文件: {files}',
210
+ 'quality.failed': '⚠️ {n} 个文件未通过门禁,请修复后再提交',
211
+ 'selfimp.title': '===== M6/M8 自我迭代系统状态 =====',
212
+ 'selfimp.reflections': '反思次数: {n}',
213
+ 'selfimp.successRate': '成功率: {p}%',
214
+ 'selfimp.avgDuration': '平均耗时: {ms}ms',
215
+ 'selfimp.expLib': '经验库: {n} 条独特经验, 累计验证权重 {w}',
216
+ 'selfimp.topExp': 'Top 经验(按被复用次数):',
217
+ 'selfimp.expItem': ' [{count}×] {type} | {title}',
218
+ 'selfimp.recent': '最近改进记录:',
219
+ 'selfimp.record': ' {ts} | {ok} | 模式: {n} 条',
220
+ 'selfimp.improvement': ' → {imp}',
221
+ 'selfimp.noRecords': '(暂无改进记录,完成任务后自动生成)',
222
+ 'selfimp.learnPreview': '----- 学习提示预览(目标: {goal})-----',
223
+ 'selfimp.noLearned': '(暂无可注入经验)',
224
+ 'swe.noProvider': '[飞虹 Code] 未配置真实模型供应商,无法进入真实模式。请通过以下任一方式接入:\n' +
225
+ ' 1) 环境变量: FH_MODEL_NAME=<模型> FH_MODEL_TYPE=ollama|openai-compatible FH_MODEL_BASE_URL=<地址> [FH_MODEL_API_KEY=<令牌>]\n' +
226
+ ' 2) 配置文件: ./fhcode.config.json 的 models.providers 数组\n' +
227
+ ' 3) FH_PROVIDERS 环境变量(JSON 数组)\n' +
228
+ '本地 Ollama 示例: FH_MODEL_NAME=qwen2.5-coder:1.5b FH_MODEL_TYPE=ollama fhcode swe "..."',
229
+ 'swe.start': '[飞虹 Code] 启动全自动软件工程 Agent({offline},仓库={cwd})',
230
+ 'swe.reportTitle': '===== 全自动软件工程 Agent 报告 =====',
231
+ 'harness.start': '[飞虹 Code] 启动评测 harness({mode} 模式 · split={split} · limit={limit})',
232
+ 'harness.noProvider': '[飞虹 Code] 未配置真实模型供应商(请设置 FH_PROVIDERS 或 FH_MODEL_NAME 后使用 --mode real)',
233
+ 'harness.reportWritten': '报告已写入: {path}',
234
+ 'harness.summary': '汇总: {completed}/{total} 通过(通过率 {rate}%)',
235
+ 'approve.prompt': '[审批] 是否允许执行: {action}\n 输入 y/yes 允许,其他拒绝: ',
236
+ 'enterprise.whoamiTitle': '当前身份(企业模式)',
237
+ 'enterprise.tenantId': '租户 ID',
238
+ 'enterprise.userId': '用户 ID',
239
+ 'enterprise.role': '角色',
240
+ 'enterprise.sessionDir': '隔离目录',
241
+ 'enterprise.quota': '配额',
242
+ 'enterprise.quotaUsed': '已用',
243
+ 'enterprise.quotaLimit': '上限',
244
+ 'enterprise.policyTitle': '生效策略与角色矩阵',
245
+ 'enterprise.roleColumn': '角色',
246
+ 'enterprise.permissionsColumn': '权限',
247
+ 'enterprise.unlimited': '无限',
248
+ 'enterprise.unknown': '未知',
249
+ 'enterprise.on': '开启',
250
+ 'enterprise.off': '关闭 (FH_ENTERPRISE=false)',
251
+ 'enterprise.none': '(无)',
252
+ 'enterprise.whoami.tenant': '租户 (tenant): {v}',
253
+ 'enterprise.whoami.user': '用户 (user) : {v}',
254
+ 'enterprise.whoami.role': '角色 (role) : {v}',
255
+ 'enterprise.whoami.isoDir': '隔离目录 : {v}',
256
+ 'enterprise.whoami.session': ' 会话 : {v}',
257
+ 'enterprise.whoami.audit': ' 审计 : {v}',
258
+ 'enterprise.whoami.goal': ' 目标 : {v}',
259
+ 'enterprise.whoami.taskCap': '单任务上限 : {v}',
260
+ 'enterprise.whoami.used': '今日已用 : {v}',
261
+ 'enterprise.whoami.auditCount': '审计记录数 : {v}',
262
+ 'enterprise.whoami.mode': '企业模式 : {v}',
263
+ 'policy.version': '策略版本: v{v}',
264
+ 'policy.role': '当前角色: {v}',
265
+ 'policy.allow': ' 直接允许: {v}',
266
+ 'policy.approval': ' 需审批 : {v}',
267
+ 'policy.taskCap': '单任务成本上限: {v}',
268
+ 'policy.tenantCap': '租户日成本上限: {v}',
269
+ 'policy.denyShell': '危险命令黑名单({n}): {v}',
270
+ 'policy.denyPaths': '敏感路径黑名单({n}): {v}',
271
+ 'policy.matrixTitle': '全角色矩阵:',
272
+ 'policy.matrixRow': ' {role} allow=[{allow}] approval=[{approval}] max=${max}',
273
+ 'quality.reportTitle': '===== 质量门禁报告 =====',
274
+ 'quality.fileResult': '{file}: {status}',
275
+ 'quality.pass': '✅ 通过',
276
+ 'quality.fail': '❌ 未通过',
277
+ 'quality.check': ' {mark} {name}: {value} {req}',
278
+ 'quality.req': '(要求: {threshold})',
279
+ 'quality.total': '总计: {passed}/{total} 通过',
280
+ };
281
+ /* ============================ 英文词条 ============================ */
282
+ const EN = {
283
+ 'app.product': 'fhcode',
284
+ 'app.tagline': 'Terminal AI coding agent (a Muse Code reimplementation)',
285
+ 'app.signature': 'Jinjiang Feihongzhi Tech Enterprise Management Co., Ltd. · Feiyang Qiyuan R&D Center · Lead: Wu Cihong',
286
+ 'cli.brand': '[fhcode]',
287
+ 'cli.help': `fhcode (Feihong Code) v{version}
288
+
289
+ Usage:
290
+ fhcode Enter interactive REPL
291
+ fhcode "<request>" Run a single request
292
+ fhcode --parallel "<request>" Multi-subagent parallel mode (M2: git worktree isolation)
293
+ fhcode /plan "<goal>" Generate an implementation plan (read-only)
294
+ fhcode /grill [path] Red-team code review (read-only)
295
+ fhcode /goal "<goal>" Decompose and save a high-level goal
296
+ fhcode sessions List historical sessions (M3 resume & audit)
297
+ fhcode resume <id> Resume an interrupted session from checkpoint (M3)
298
+ fhcode diff [<id>] Show session/workspace diff (M3)
299
+ fhcode rollback <id> [--yes] Roll back session changes (M3, destructive, needs --yes)
300
+
301
+ Enterprise (M4):
302
+ fhcode whoami Current tenant / user / role / isolated dir / quota
303
+ fhcode policy Show active RBAC policy & role matrix
304
+ fhcode audit [--limit N] View audit records (last 20 by default)
305
+ fhcode audit verify Verify audit hash-chain integrity
306
+ fhcode tenants List all tenants & usage summary
307
+ fhcode doctor Environment self-check (version/git/providers/paths/network)
308
+
309
+ Self-evolution (M6):
310
+ fhcode model-stats View per-model performance stats
311
+ fhcode experiences [path] List the experience library
312
+
313
+ Web console (M5):
314
+ fhcode serve [--port 8080] Start the Web console (default http://localhost:8080)
315
+ Token from FH_WEB_TOKEN or auto-generated (observe-only)
316
+
317
+ Autonomous coding (M8):
318
+ fhcode code-write "<goal>" Autonomous code writing (plan→write→test→review→fix)
319
+ fhcode quality-gate [path] Quality-gate review (security+quality+test coverage)
320
+ fhcode self-improve Self-improvement stats & history
321
+
322
+ Autonomous SWE Agent (M9):
323
+ fhcode swe "<goal>" Read repo→plan→implement+verify+self-heal→report
324
+ --repo <path> target repo (default cwd)
325
+ --plan-only plan only, no execution
326
+ --verify-only verification only, no implementation
327
+ --max-tasks N max subtasks (default 8)
328
+ --max-retries N self-heal retries per task (default 2)
329
+
330
+ fhcode --version Show version (-v)
331
+ fhcode --help Show help (-h)
332
+ fhcode --lang <zh|en> Set UI language (Chinese / English)
333
+
334
+ Notes: offline mode is used automatically when FH_PROVIDERS is unset (scripted Mock drives the loop).
335
+ With FH_PROVIDERS (OpenAI-compatible / Ollama) configured, real LLMs run the tasks.
336
+ Enterprise mode is on by default (tenant isolation + RBAC + audit chain + quota); disable with FH_ENTERPRISE=false.
337
+ Signature: {signature}`,
338
+ 'repl.welcome': 'fhcode REPL (type a request and press Enter to run; type exit to quit)',
339
+ 'repl.hint': 'Hint: offline mode is used automatically when FH_PROVIDERS is not configured; /plan /grill /goal skills supported.\n',
340
+ 'repl.prompt': 'fhcode> ',
341
+ 'repl.errorPrefix': 'Error: ',
342
+ 'repl.unknownSkill': 'Unknown skill: /{cmd} (supported: /plan /grill /goal)',
343
+ 'repl.bye': '\nGoodbye.',
344
+ 'repl.stateReady': 'ready',
345
+ 'repl.stateRunning': 'running',
346
+ 'stream.toolCalling': 'Calling tools: {tools}',
347
+ 'stream.toolOk': 'ok',
348
+ 'stream.toolFail': 'failed',
349
+ 'stream.selfHeal': 'Self-heal retry: {category}',
350
+ 'stream.compact': 'Context compacted: {from} → {to} messages',
351
+ 'stream.done': 'Done · {iter} iterations · cost {cost}',
352
+ 'run.identity': 'Identity tenant={tenant} user={user} role={role}',
353
+ 'run.start': 'Task started (runId={id}{mode})',
354
+ 'run.resultTitle': '===== Result =====',
355
+ 'run.summary': 'Iterations: {iter} · Cost: {cost} · Log: {log}',
356
+ 'run.checkpoint': 'Session checkpoint: {path} (manage with fhcode sessions / resume / diff)',
357
+ 'run.offlineFileYes': '(Offline demo file written: {file})',
358
+ 'run.offlineFileNo': '(No offline demo file produced; workspace: {cwd}. If blocked by policy, see fhcode audit for the reason)',
359
+ 'run.offlineFragment': ', offline mode',
360
+ 'run.modeOffline': 'offline',
361
+ 'run.modeLive': 'live',
362
+ 'run.parallelMode': '[fhcode] parallel mode: {offline}',
363
+ 'run.parallelResult': '===== Parallel Result =====',
364
+ 'run.parallelRepo': 'Repo root: {root} · Worktrees cleaned: {trees}',
365
+ 'run.noSessions': '(No historical sessions)',
366
+ 'run.sessionList': 'Sessions ({mode} mode, dir {home}):',
367
+ 'run.sessionItem': '- {id} | {status} | iter {iter} | cost {cost} | files {files} | {time}',
368
+ 'run.sessionGoal': ' goal: {goal}',
369
+ 'run.resumeDone': 'Session {id} already completed, no need to resume.',
370
+ 'run.resumeStart': '[fhcode] resuming session {id} (status: {status}, iterations: {iter})',
371
+ 'run.diffSession': '[fhcode] changes of session {id} (cwd={cwd}):',
372
+ 'run.diffCwd': '[fhcode] workspace changes in {cwd}:',
373
+ 'run.rollbackStart': '[fhcode] rolling back {n} files of session {id} (cwd={cwd})',
374
+ 'run.rollbackReverted': 'Reverted (tracked): {files}',
375
+ 'run.rollbackRemoved': 'Removed (untracked): {files}',
376
+ 'run.rollbackNote': 'Note: {errors}',
377
+ 'err.enterpriseDisabled': 'Enterprise mode is disabled (FH_ENTERPRISE=false); this command is unavailable.',
378
+ 'err.runFailed': '[fhcode] run failed ({code}): {message}',
379
+ 'err.unexpected': 'Unexpected error: ',
380
+ 'err.hint': '(Detailed logs are in structured JSON output; for config errors check FH_PROVIDERS / .env)',
381
+ 'mode.offline': 'offline',
382
+ 'mode.live': 'live',
383
+ 'audit.empty': '(No audit records for tenant {tenant}; dir {dir})',
384
+ 'audit.header': 'Audit records {rows}/{all} (tenant {tenant}):',
385
+ 'audit.row': '#{seq} {ts} [{decision}] {action} by {user}({role}) run={run}',
386
+ 'audit.resource': ' resource: {resource}',
387
+ 'audit.reason': ' reason: {reason}',
388
+ 'audit.chainTail': 'Chain tail hash: {hash}…',
389
+ 'audit.verifyOk': '✅ Audit chain intact: {total} records, hash chain self-consistent and unaltered.',
390
+ 'audit.verifyFail': '❌ Audit chain verification failed: {total} records, broken at record #{brokenAt}',
391
+ 'tenants.empty': '(No tenant data yet; created automatically after one task)',
392
+ 'tenants.header': 'Tenant usage summary:',
393
+ 'tenants.tableHeader': ' TenantID Sessions TotalCost Audits LastActive',
394
+ 'tenants.row': ' {id} {sessions} {cost} {audit} {last}',
395
+ 'modelStats.empty': '(No model performance data yet; generated automatically after tasks)',
396
+ 'modelStats.noRecords': '(No model stats recorded)',
397
+ 'modelStats.title': 'Model performance stats (M6):',
398
+ 'modelStats.tableHeader': ' ProviderID Model Calls OK Fail Rate AvgLat TotalCost',
399
+ 'exp.empty': '(No experiences yet; accumulated automatically after tasks)',
400
+ 'exp.header': 'Experience library ({n} entries, source: {dir}):',
401
+ 'exp.tableHeader': ' ID Type Title Rate Uses',
402
+ 'exp.more': ' ... {n} entries total, showing first 10',
403
+ 'doctor.title': '===== fhcode doctor environment check =====',
404
+ 'doctor.node': 'Node version',
405
+ 'doctor.git': 'git availability',
406
+ 'doctor.gitMissing': 'git unavailable (diff/rollback/parallel mode will be limited)',
407
+ 'doctor.config': 'Model config',
408
+ 'doctor.configEmpty': 'No provider configured (offline mode will be used automatically)',
409
+ 'doctor.provider': 'Provider',
410
+ 'doctor.network': 'Network reachability',
411
+ 'doctor.networkOffline': 'Offline mode, skipping network probe',
412
+ 'doctor.home': 'Home dir writable',
413
+ 'doctor.sandbox': 'Sandbox mode',
414
+ 'doctor.sandboxUnavailable': '(config unavailable)',
415
+ 'doctor.allOk': '✅ Environment ready, no issues',
416
+ 'doctor.issues': '⚠️ {n} issue(s) found, please fix them as suggested',
417
+ 'plugin.installUsage': 'Usage: fhcode plugin install <local-dir|git-url>',
418
+ 'plugin.installed': '✅ Plugin installed: {name} ({dir})',
419
+ 'plugin.installFailed': '❌ Plugin install failed: ',
420
+ 'plugin.empty': '(No plugins installed)',
421
+ 'plugin.listTitle': 'Installed plugins:',
422
+ 'skillMarket.localEmpty': '(No local skills installed)',
423
+ 'skillMarket.localTitle': 'Local skills ({n}):',
424
+ 'skillMarket.fetchFailed': '❌ Failed to fetch market index ({base}): ',
425
+ 'skillMarket.schemaWarn': '⚠️ Unrecognized market index schema ({schema}), treating as 0.1.0',
426
+ 'skillMarket.searchEmpty': '(No skills match "{q}" in the market)',
427
+ 'skillMarket.searchTitle': 'Market results for "{q}" ({n} found, source {base}):',
428
+ 'skillMarket.installHint': 'Install: fhcode skill-market install <skill-name> [--repo <market-url>]',
429
+ 'skillMarket.installUsage': 'Usage: fhcode skill-market install <skill-name> [--repo <market-url>]',
430
+ 'skillMarket.notFound': '❌ Skill not found in market: {name}',
431
+ 'skillMarket.installed': '✅ Skill installed: {name} ({dir}), auto-discovered in tasks',
432
+ 'skillMarket.installFailed': '❌ Skill install failed: ',
433
+ 'team.start': 'Agent Team started ({mode}): shared task board + message bus',
434
+ 'team.reportTitle': '===== Agent Team Report =====',
435
+ 'serve.url': '[fhcode] Web console: {url}',
436
+ 'serve.token': '[fhcode] access token (FH_WEB_TOKEN): {token}',
437
+ 'serve.stop': '[fhcode] press Ctrl+C to stop',
438
+ 'serve.tokenAuto': '[fhcode] Web console token auto-generated (FH_WEB_TOKEN): {token}',
439
+ 'serve.started': '[fhcode] Web console started: http://localhost:{port}',
440
+ 'codewrite.resultTitle': '===== M8 Autonomous Write Result =====',
441
+ 'codewrite.files': 'Generated files: {files}',
442
+ 'quality.failed': '⚠️ {n} file(s) failed the quality gate, fix them before committing',
443
+ 'selfimp.title': '===== M6/M8 Self-Improvement System Status =====',
444
+ 'selfimp.reflections': 'Reflections: {n}',
445
+ 'selfimp.successRate': 'Success rate: {p}%',
446
+ 'selfimp.avgDuration': 'Avg duration: {ms}ms',
447
+ 'selfimp.expLib': 'Experience library: {n} unique experiences, cumulative weight {w}',
448
+ 'selfimp.topExp': 'Top experiences (by reuse count):',
449
+ 'selfimp.expItem': ' [{count}×] {type} | {title}',
450
+ 'selfimp.recent': 'Recent improvements:',
451
+ 'selfimp.record': ' {ts} | {ok} | patterns: {n}',
452
+ 'selfimp.improvement': ' → {imp}',
453
+ 'selfimp.noRecords': '(No improvement records yet; generated automatically after tasks)',
454
+ 'selfimp.learnPreview': '----- Learned-prompt preview (goal: {goal}) -----',
455
+ 'selfimp.noLearned': '(No experience available to inject)',
456
+ 'swe.noProvider': '[fhcode] No real model provider configured; cannot enter live mode. Connect via one of:\n' +
457
+ ' 1) Env vars: FH_MODEL_NAME=<model> FH_MODEL_TYPE=ollama|openai-compatible FH_MODEL_BASE_URL=<url> [FH_MODEL_API_KEY=<token>]\n' +
458
+ ' 2) Config file: models.providers array in ./fhcode.config.json\n' +
459
+ ' 3) FH_PROVIDERS env var (JSON array)\n' +
460
+ 'Local Ollama example: FH_MODEL_NAME=qwen2.5-coder:1.5b FH_MODEL_TYPE=ollama fhcode swe "..."',
461
+ 'swe.start': '[fhcode] launching autonomous SWE agent ({offline}, repo={cwd})',
462
+ 'swe.reportTitle': '===== Autonomous SWE Agent Report =====',
463
+ 'harness.start': '[fhcode] starting evaluation harness ({mode} mode · split={split} · limit={limit})',
464
+ 'harness.noProvider': '[fhcode] No real model provider configured (set FH_PROVIDERS or FH_MODEL_NAME, then use --mode real)',
465
+ 'harness.reportWritten': 'Report written to: {path}',
466
+ 'harness.summary': 'Summary: {completed}/{total} passed ({rate}%)',
467
+ 'approve.prompt': '[approve] allow execution: {action}\n type y/yes to allow, anything else to deny: ',
468
+ 'enterprise.whoamiTitle': 'Current identity (enterprise mode)',
469
+ 'enterprise.tenantId': 'Tenant ID',
470
+ 'enterprise.userId': 'User ID',
471
+ 'enterprise.role': 'Role',
472
+ 'enterprise.sessionDir': 'Isolated dir',
473
+ 'enterprise.quota': 'Quota',
474
+ 'enterprise.quotaUsed': 'used',
475
+ 'enterprise.quotaLimit': 'limit',
476
+ 'enterprise.policyTitle': 'Active policy & role matrix',
477
+ 'enterprise.roleColumn': 'Role',
478
+ 'enterprise.permissionsColumn': 'Permissions',
479
+ 'enterprise.unlimited': 'unlimited',
480
+ 'enterprise.unknown': 'unknown',
481
+ 'enterprise.on': 'on',
482
+ 'enterprise.off': 'off (FH_ENTERPRISE=false)',
483
+ 'enterprise.none': 'none',
484
+ 'enterprise.whoami.tenant': 'Tenant: {v}',
485
+ 'enterprise.whoami.user': 'User : {v}',
486
+ 'enterprise.whoami.role': 'Role : {v}',
487
+ 'enterprise.whoami.isoDir': 'Isolated dir : {v}',
488
+ 'enterprise.whoami.session': ' session : {v}',
489
+ 'enterprise.whoami.audit': ' audit : {v}',
490
+ 'enterprise.whoami.goal': ' goal : {v}',
491
+ 'enterprise.whoami.taskCap': 'Per-task cap : {v}',
492
+ 'enterprise.whoami.used': 'Used today : {v}',
493
+ 'enterprise.whoami.auditCount': 'Audit count : {v}',
494
+ 'enterprise.whoami.mode': 'Enterprise : {v}',
495
+ 'policy.version': 'Policy version: v{v}',
496
+ 'policy.role': 'Current role: {v}',
497
+ 'policy.allow': ' allow: {v}',
498
+ 'policy.approval': ' approval: {v}',
499
+ 'policy.taskCap': 'Per-task cost cap: {v}',
500
+ 'policy.tenantCap': 'Tenant daily cap: {v}',
501
+ 'policy.denyShell': 'Dangerous shell blacklist ({n}): {v}',
502
+ 'policy.denyPaths': 'Sensitive path blacklist ({n}): {v}',
503
+ 'policy.matrixTitle': 'Full role matrix:',
504
+ 'policy.matrixRow': ' {role} allow=[{allow}] approval=[{approval}] max=${max}',
505
+ 'quality.reportTitle': '===== Quality Gate Report =====',
506
+ 'quality.fileResult': '{file}: {status}',
507
+ 'quality.pass': '✅ passed',
508
+ 'quality.fail': '❌ failed',
509
+ 'quality.check': ' {mark} {name}: {value} {req}',
510
+ 'quality.req': '(required: {threshold})',
511
+ 'quality.total': 'Total: {passed}/{total} passed',
512
+ };
513
+ /**
514
+ * 取当前语言字符串并做 {name} 插值。
515
+ * 缺失 key 时回退中文,再回退 key 本身,保证永不崩溃。
516
+ */
517
+ function t(key, params) {
518
+ const table = currentLang === 'en' ? EN : ZH;
519
+ let s = table[key];
520
+ if (s == null)
521
+ s = ZH[key];
522
+ if (s == null)
523
+ return key;
524
+ if (params) {
525
+ for (const k of Object.keys(params)) {
526
+ s = s.replace(new RegExp(`\\{${k}\\}`, 'g'), String(params[k]));
527
+ }
528
+ }
529
+ return s;
530
+ }
531
+ /** 便捷:返回当前语言下的品牌标签(如 [飞虹 Code] / [fhcode]) */
532
+ function brandTag() {
533
+ return t('cli.brand');
534
+ }
535
+ //# sourceMappingURL=i18n.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i18n.js","sourceRoot":"","sources":["../../src/shared/i18n.ts"],"names":[],"mappings":"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"}
@@ -44,7 +44,8 @@ const RULES = [
44
44
  ];
45
45
  function runGrill(rootDir, target = '.') {
46
46
  const base = (0, path_1.join)(rootDir, target);
47
- const files = collectFiles(base);
47
+ // 支持单文件目标(M1.1a IDE 内联评审):文件路径直接分析,否则按目录递归收集
48
+ const files = (0, fs_1.existsSync)(base) && (0, fs_1.statSync)(base).isFile() ? [base] : collectFiles(base);
48
49
  const findings = [];
49
50
  for (const file of files) {
50
51
  if (!/\.(ts|js|tsx|jsx|json|md|py|go|java)$/.test(file))
@@ -1 +1 @@
1
- {"version":3,"file":"grill.js","sourceRoot":"","sources":["../../src/skills/grill.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"grill.js","sourceRoot":"","sources":["../../src/skills/grill.ts"],"names":[],"mappings":";;AAgEA,4BA2DC;AA3HD;;;;;;GAMG;AACH,2BAAqE;AACrE,+BAAsC;AAkBtC,MAAM,KAAK,GAKN;IACH;QACE,EAAE,EAAE,aAAa;QACjB,QAAQ,EAAE,UAAU;QACpB,OAAO,EAAE,6EAA6E;QACtF,MAAM,EAAE,2BAA2B;KACpC;IACD;QACE,EAAE,EAAE,gBAAgB;QACpB,QAAQ,EAAE,UAAU;QACpB,OAAO,EAAE,2DAA2D;QACpE,MAAM,EAAE,yBAAyB;KAClC;IACD;QACE,EAAE,EAAE,gBAAgB;QACpB,QAAQ,EAAE,MAAM;QAChB,OAAO,EAAE,QAAQ;QACjB,MAAM,EAAE,6BAA6B;KACtC;IACD;QACE,EAAE,EAAE,qBAAqB;QACzB,QAAQ,EAAE,QAAQ;QAClB,OAAO,EAAE,uCAAuC;QAChD,MAAM,EAAE,sCAAsC;KAC/C;IACD;QACE,EAAE,EAAE,YAAY;QAChB,QAAQ,EAAE,KAAK;QACf,OAAO,EAAE,sBAAsB;QAC/B,MAAM,EAAE,mBAAmB;KAC5B;CACF,CAAC;AAEF,SAAgB,QAAQ,CAAC,OAAe,EAAE,MAAM,GAAG,GAAG;IACpD,MAAM,IAAI,GAAG,IAAA,WAAI,EAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACnC,6CAA6C;IAC7C,MAAM,KAAK,GAAG,IAAA,eAAU,EAAC,IAAI,CAAC,IAAI,IAAA,aAAQ,EAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IACxF,MAAM,QAAQ,GAAc,EAAE,CAAC;IAE/B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,uCAAuC,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,SAAS;QAClE,MAAM,MAAM,GAAG,+BAA+B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1D,IAAI,OAAe,CAAC;QACpB,IAAI,CAAC;YACH,OAAO,GAAG,IAAA,iBAAY,EAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACvC,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QACD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAClC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;YAC1B,iDAAiD;YACjD,IAAI,sCAAsC,CAAC,IAAI,CAAC,IAAI,CAAC;gBAAE,OAAO;YAC9D,MAAM,SAAS,GAAG,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,qDAAqD;gBACrD,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,gBAAgB,IAAI,IAAI,CAAC,EAAE,KAAK,qBAAqB,CAAC,IAAI,CAAC,MAAM;oBAAE,SAAS;gBAC7F,kDAAkD;gBAClD,IAAI,IAAI,CAAC,EAAE,KAAK,gBAAgB,IAAI,2CAA2C,CAAC,IAAI,CAAC,IAAI,CAAC;oBAAE,SAAS;gBACrG,0BAA0B;gBAC1B,IAAI,IAAI,CAAC,EAAE,KAAK,gBAAgB,IAAI,SAAS;oBAAE,SAAS;gBACxD,0DAA0D;gBAC1D,IAAI,IAAI,CAAC,EAAE,KAAK,qBAAqB,EAAE,CAAC;oBACtC,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACrE,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAC3E,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC;wBAAE,SAAS;gBACxE,CAAC;gBACD,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC5B,QAAQ,CAAC,IAAI,CAAC;wBACZ,IAAI,EAAE,IAAA,eAAQ,EAAC,OAAO,EAAE,IAAI,CAAC;wBAC7B,IAAI,EAAE,GAAG,GAAG,CAAC;wBACb,QAAQ,EAAE,IAAI,CAAC,QAAQ;wBACvB,IAAI,EAAE,IAAI,CAAC,EAAE;wBACb,MAAM,EAAE,IAAI,CAAC,MAAM;qBACpB,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAC5B,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;QACT,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACrB,OAAO,GAAG,CAAC;IACb,CAAC,EACD,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAC5C,CAAC;IAEF,MAAM,OAAO,GACX,MAAM,KAAK,CAAC,MAAM,WAAW,QAAQ,CAAC,MAAM,OAAO;QACnD,MAAM,MAAM,CAAC,QAAQ,SAAS,MAAM,CAAC,IAAI,QAAQ,MAAM,CAAC,MAAM,QAAQ,MAAM,CAAC,GAAG,EAAE,CAAC;IAErF,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,eAAQ,EAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;AAChF,CAAC;AAED,SAAS,YAAY,CAAC,GAAW;IAC/B,IAAI,CAAC,IAAA,eAAU,EAAC,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IAChC,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,MAAM,IAAI,GAAG,CAAC,CAAS,EAAE,EAAE;QACzB,IAAI,OAAiB,CAAC;QACtB,IAAI,CAAC;YACH,OAAO,GAAG,IAAA,gBAAW,EAAC,CAAC,CAAC,CAAC;QAC3B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO;QACT,CAAC;QACD,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,IAAI,CAAC,KAAK,cAAc,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,MAAM;gBAAE,SAAS;YACnE,MAAM,IAAI,GAAG,IAAA,WAAI,EAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACxB,MAAM,EAAE,GAAG,IAAA,aAAQ,EAAC,IAAI,CAAC,CAAC;YAC1B,IAAI,EAAE,CAAC,WAAW,EAAE;gBAAE,IAAI,CAAC,IAAI,CAAC,CAAC;;gBAC5B,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;IACH,CAAC,CAAC;IACF,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,GAAG,CAAC;AACb,CAAC"}