feihong-code 0.2.3 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (180) 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 +392 -0
  11. package/CODE_OF_CONDUCT.md +56 -56
  12. package/CONTRIBUTING.md +68 -68
  13. package/LICENSE +22 -22
  14. package/README.md +586 -522
  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 +74 -18
  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 +319 -84
  23. package/dist/agent/experience.js.map +1 -1
  24. package/dist/agent/orchestrator.js +233 -71
  25. package/dist/agent/orchestrator.js.map +1 -1
  26. package/dist/agent/planner.js +30 -7
  27. package/dist/agent/planner.js.map +1 -1
  28. package/dist/agent/prompts.js +9 -0
  29. package/dist/agent/prompts.js.map +1 -1
  30. package/dist/agent/quality-gate.js +10 -4
  31. package/dist/agent/quality-gate.js.map +1 -1
  32. package/dist/agent/repo-context.js +181 -0
  33. package/dist/agent/repo-context.js.map +1 -0
  34. package/dist/agent/repo-reader.js +92 -99
  35. package/dist/agent/repo-reader.js.map +1 -1
  36. package/dist/agent/self-heal.js +80 -60
  37. package/dist/agent/self-heal.js.map +1 -1
  38. package/dist/agent/self-improver.js +65 -61
  39. package/dist/agent/self-improver.js.map +1 -1
  40. package/dist/agent/subagent-summary.js +31 -0
  41. package/dist/agent/subagent-summary.js.map +1 -0
  42. package/dist/agent/subagent.js +52 -2
  43. package/dist/agent/subagent.js.map +1 -1
  44. package/dist/agent/symbol-index.js +160 -0
  45. package/dist/agent/symbol-index.js.map +1 -0
  46. package/dist/agent/team.js +193 -0
  47. package/dist/agent/team.js.map +1 -0
  48. package/dist/cli/commands.js +124 -143
  49. package/dist/cli/commands.js.map +1 -1
  50. package/dist/cli/index.js +113 -106
  51. package/dist/cli/index.js.map +1 -1
  52. package/dist/cli/repl.js +82 -7
  53. package/dist/cli/repl.js.map +1 -1
  54. package/dist/cli/run.js +600 -95
  55. package/dist/cli/run.js.map +1 -1
  56. package/dist/cli/tui.js +145 -0
  57. package/dist/cli/tui.js.map +1 -0
  58. package/dist/cli/version.js +1 -1
  59. package/dist/enterprise/audit.js +145 -23
  60. package/dist/enterprise/audit.js.map +1 -1
  61. package/dist/enterprise/index.js +14 -11
  62. package/dist/enterprise/index.js.map +1 -1
  63. package/dist/enterprise/policy.js +22 -10
  64. package/dist/enterprise/policy.js.map +1 -1
  65. package/dist/harness/executor.js +127 -0
  66. package/dist/harness/executor.js.map +1 -0
  67. package/dist/harness/harness.js +87 -0
  68. package/dist/harness/harness.js.map +1 -0
  69. package/dist/harness/index.js +31 -0
  70. package/dist/harness/index.js.map +1 -0
  71. package/dist/harness/loader.js +138 -0
  72. package/dist/harness/loader.js.map +1 -0
  73. package/dist/harness/reporter.js +34 -0
  74. package/dist/harness/reporter.js.map +1 -0
  75. package/dist/harness/types.js +10 -0
  76. package/dist/harness/types.js.map +1 -0
  77. package/dist/harness/verifier.js +48 -0
  78. package/dist/harness/verifier.js.map +1 -0
  79. package/dist/hello.js +14 -0
  80. package/dist/hello.js.map +1 -0
  81. package/dist/memory/auto-summarize.js +208 -0
  82. package/dist/memory/auto-summarize.js.map +1 -0
  83. package/dist/memory/index.js +228 -0
  84. package/dist/memory/index.js.map +1 -0
  85. package/dist/models/model-router.js +100 -27
  86. package/dist/models/model-router.js.map +1 -1
  87. package/dist/models/model.dto.js +25 -3
  88. package/dist/models/model.dto.js.map +1 -1
  89. package/dist/models/providers/ollama.provider.js +12 -0
  90. package/dist/models/providers/ollama.provider.js.map +1 -1
  91. package/dist/models/providers/openai-compatible.provider.js +14 -1
  92. package/dist/models/providers/openai-compatible.provider.js.map +1 -1
  93. package/dist/plugins/plugin-loader.js +179 -0
  94. package/dist/plugins/plugin-loader.js.map +1 -0
  95. package/dist/runtime/event-log.js.map +1 -1
  96. package/dist/runtime/hooks.js +80 -0
  97. package/dist/runtime/hooks.js.map +1 -0
  98. package/dist/self-evolve/hook.js +60 -0
  99. package/dist/self-evolve/hook.js.map +1 -0
  100. package/dist/self-evolve/hook.ts +80 -0
  101. package/dist/self-evolve/manager.d.ts +8 -0
  102. package/dist/self-evolve/manager.js +401 -0
  103. package/dist/shared/config.js +35 -3
  104. package/dist/shared/config.js.map +1 -1
  105. package/dist/shared/errors.js +6 -2
  106. package/dist/shared/errors.js.map +1 -1
  107. package/dist/shared/i18n.js +535 -0
  108. package/dist/shared/i18n.js.map +1 -0
  109. package/dist/shared/secure-store.js +117 -0
  110. package/dist/shared/secure-store.js.map +1 -0
  111. package/dist/skills/grill.js +2 -1
  112. package/dist/skills/grill.js.map +1 -1
  113. package/dist/skills/self-heal.js +73 -0
  114. package/dist/skills/self-heal.js.map +1 -0
  115. package/dist/skills/skill-loader.js +131 -0
  116. package/dist/skills/skill-loader.js.map +1 -0
  117. package/dist/skills/skill-market.js +195 -0
  118. package/dist/skills/skill-market.js.map +1 -0
  119. package/dist/tools/analysis/code-analyzer.js +45 -18
  120. package/dist/tools/analysis/code-analyzer.js.map +1 -1
  121. package/dist/tools/index.js +5 -0
  122. package/dist/tools/index.js.map +1 -1
  123. package/dist/tools/mcp/index.js +84 -0
  124. package/dist/tools/mcp/index.js.map +1 -0
  125. package/dist/tools/mcp/mcp-client.js +194 -0
  126. package/dist/tools/mcp/mcp-client.js.map +1 -0
  127. package/dist/tools/sandbox.js +126 -0
  128. package/dist/tools/sandbox.js.map +1 -0
  129. package/dist/tools/shell/exec.js +72 -3
  130. package/dist/tools/shell/exec.js.map +1 -1
  131. package/dist/tools/shell/run-shell.tool.js +37 -7
  132. package/dist/tools/shell/run-shell.tool.js.map +1 -1
  133. package/dist/tools/skills/load-skill.tool.js +36 -0
  134. package/dist/tools/skills/load-skill.tool.js.map +1 -0
  135. package/dist/tools/tool.interface.js.map +1 -1
  136. package/dist/tools/tool.registry.js +69 -1
  137. package/dist/tools/tool.registry.js.map +1 -1
  138. package/dist/tools/web/web.tool.js +139 -0
  139. package/dist/tools/web/web.tool.js.map +1 -0
  140. package/dist/web/auth.js +178 -3
  141. package/dist/web/auth.js.map +1 -1
  142. package/dist/web/channels.js +171 -0
  143. package/dist/web/channels.js.map +1 -0
  144. package/dist/web/public/css/style.css +1546 -0
  145. package/dist/web/public/index.html +804 -37
  146. package/dist/web/public/js/api.js +309 -0
  147. package/dist/web/public/js/app.js +1472 -0
  148. package/dist/web/public/js/ui.js +832 -0
  149. package/dist/web/public/js/utils.js +170 -0
  150. package/dist/web/server.js +937 -11
  151. package/dist/web/server.js.map +1 -1
  152. package/dist/web/task-queue.js +470 -0
  153. package/dist/web/task-queue.js.map +1 -0
  154. package/dist/web/web-config.js +143 -0
  155. package/dist/web/web-config.js.map +1 -0
  156. package/docs/App/344/275/277/347/224/250/350/257/264/346/230/216/344/271/246.md +299 -0
  157. package/docs/App/346/212/200/346/234/257/350/257/264/346/230/216/344/271/246.md +554 -0
  158. package/docs/Deployment_Guide_EN.md +288 -0
  159. package/docs/SELF-EVOLVE-GUIDE.md +313 -0
  160. package/docs/Technical_Manual_EN.md +216 -0
  161. package/docs/User_Manual_EN.md +314 -0
  162. package/docs/error-codes.md +198 -0
  163. package/docs/screenshots/cli-demo.png +0 -0
  164. package/docs/screenshots/feature-comparison.png +0 -0
  165. package/docs/screenshots/web-console.png +0 -0
  166. package/docs/self-evolve-implementation.md +165 -0
  167. package/docs/self-evolve.md +166 -0
  168. package/docs//344/272/247/345/223/201/345/274/200/345/217/221/346/226/207/346/241/243.md +614 -614
  169. 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
  170. package/docs//344/275/277/347/224/250/350/257/264/346/230/216/344/271/246.md +318 -358
  171. 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
  172. package/docs//346/212/200/346/234/257/350/257/264/346/230/216/344/271/246.md +216 -303
  173. package/docs//346/236/266/346/236/204/344/270/216API.md +238 -238
  174. package/docs//347/224/250/346/210/267/346/211/213/345/206/214.md +196 -196
  175. package/docs//351/203/250/347/275/262/346/214/207/345/215/227.md +165 -165
  176. package/docs//351/203/250/347/275/262/350/257/264/346/230/216/344/271/246.md +288 -0
  177. package/docs//351/205/215/347/275/256/345/217/202/350/200/203.md +127 -127
  178. package/docs//351/241/265/351/235/242/345/212/237/350/203/275/345/244/215/347/233/230/344/270/216/345/206/222/347/203/237/346/265/213/350/257/225/346/212/245/345/221/212.html +117 -0
  179. package/package.json +108 -109
  180. package/tool-schema.json +117 -46
package/tool-schema.json CHANGED
@@ -1,92 +1,151 @@
1
- {
1
+ {
2
2
  "name": "feihong-code",
3
- "version": "0.2.1",
4
- "description": "Terminal AI Coding Agent 终端 AI 编程智能体",
3
+ "version": "0.6.0",
4
+ "description": "Terminal AI Coding Agent 鈥?缁堢 AI 缂栫▼鏅鸿兘浣?,
5
5
  "tools": [
6
6
  {
7
7
  "name": "write_file",
8
- "description": "写入或覆盖文件内容。如果文件不存在则创建,如果已存在则完全替换。",
8
+ "description": "鍐欏叆鎴栬鐩栨枃浠跺唴瀹广€傚鏋滄枃浠朵笉瀛樺湪鍒欏垱寤猴紝濡傛灉宸插瓨鍦ㄥ垯瀹屽叏鏇挎崲銆?,
9
9
  "parameters": {
10
10
  "type": "object",
11
11
  "properties": {
12
- "path": { "type": "string", "description": "文件相对路径(相对于工作区根目录)" },
13
- "content": { "type": "string", "description": "文件的完整内容" }
12
+ "path": {
13
+ "type": "string",
14
+ "description": "鏂囦欢鐩稿璺緞锛堢浉瀵逛簬宸ヤ綔鍖烘牴鐩綍锛?
15
+ },
16
+ "content": {
17
+ "type": "string",
18
+ "description": "鏂囦欢鐨勫畬鏁村唴瀹?
19
+ }
14
20
  },
15
- "required": ["path", "content"],
21
+ "required": [
22
+ "path",
23
+ "content"
24
+ ],
16
25
  "additionalProperties": false
17
26
  },
18
- "example": { "path": "src/main.ts", "content": "export function hello() { return 'world'; }" }
27
+ "example": {
28
+ "path": "src/main.ts",
29
+ "content": "export function hello() { return 'world'; }"
30
+ }
19
31
  },
20
32
  {
21
33
  "name": "edit_file",
22
- "description": "在文件中插入、删除或替换文本块。使用 oldText/newText 精确匹配。",
34
+ "description": "鍦ㄦ枃浠朵腑鎻掑叆銆佸垹闄ゆ垨鏇挎崲鏂囨湰鍧椼€備娇鐢?oldText/newText 绮剧‘鍖归厤銆?,
23
35
  "parameters": {
24
36
  "type": "object",
25
37
  "properties": {
26
- "path": { "type": "string", "description": "目标文件路径" },
27
- "oldText": { "type": "string", "description": "待替换的原文本(必须唯一存在于文件中)" },
28
- "newText": { "type": "string", "description": "替换后的新文本" }
38
+ "path": {
39
+ "type": "string",
40
+ "description": "鐩爣鏂囦欢璺緞"
41
+ },
42
+ "oldText": {
43
+ "type": "string",
44
+ "description": "寰呮浛鎹㈢殑鍘熸枃鏈紙蹇呴』鍞竴瀛樺湪浜庢枃浠朵腑锛?
45
+ },
46
+ "newText": {
47
+ "type": "string",
48
+ "description": "鏇挎崲鍚庣殑鏂版枃鏈?
49
+ }
29
50
  },
30
- "required": ["path", "oldText", "newText"],
51
+ "required": [
52
+ "path",
53
+ "oldText",
54
+ "newText"
55
+ ],
31
56
  "additionalProperties": false
32
57
  },
33
- "example": { "path": "src/calc.ts", "oldText": "return a - b;", "newText": "return a + b;" }
58
+ "example": {
59
+ "path": "src/calc.ts",
60
+ "oldText": "return a - b;",
61
+ "newText": "return a + b;"
62
+ }
34
63
  },
35
64
  {
36
65
  "name": "read_file",
37
- "description": "读取文件的全部内容。",
66
+ "description": "璇诲彇鏂囦欢鐨勫叏閮ㄥ唴瀹广€?,
38
67
  "parameters": {
39
68
  "type": "object",
40
69
  "properties": {
41
- "path": { "type": "string", "description": "文件相对路径" }
70
+ "path": {
71
+ "type": "string",
72
+ "description": "鏂囦欢鐩稿璺緞"
73
+ }
42
74
  },
43
- "required": ["path"],
75
+ "required": [
76
+ "path"
77
+ ],
44
78
  "additionalProperties": false
45
79
  },
46
- "example": { "path": "package.json" }
80
+ "example": {
81
+ "path": "package.json"
82
+ }
47
83
  },
48
84
  {
49
85
  "name": "list_files",
50
- "description": "列出目录下的文件和子目录。",
86
+ "description": "鍒楀嚭鐩綍涓嬬殑鏂囦欢鍜屽瓙鐩綍銆?,
51
87
  "parameters": {
52
88
  "type": "object",
53
89
  "properties": {
54
- "path": { "type": "string", "description": "目录路径,默认为 '.'(工作区根)" }
90
+ "path": {
91
+ "type": "string",
92
+ "description": "鐩綍璺緞锛岄粯璁や负 '.'锛堝伐浣滃尯鏍癸級"
93
+ }
55
94
  },
56
95
  "additionalProperties": false
57
96
  },
58
- "example": { "path": "src/" }
97
+ "example": {
98
+ "path": "src/"
99
+ }
59
100
  },
60
101
  {
61
102
  "name": "grep",
62
- "description": "使用正则表达式在项目中搜索文本。",
103
+ "description": "浣跨敤姝e垯琛ㄨ揪寮忓湪椤圭洰涓悳绱㈡枃鏈€?,
63
104
  "parameters": {
64
105
  "type": "object",
65
106
  "properties": {
66
- "pattern": { "type": "string", "description": "正则表达式模式" },
67
- "path": { "type": "string", "description": "搜索起始目录,默认为工作区根" }
107
+ "pattern": {
108
+ "type": "string",
109
+ "description": "姝e垯琛ㄨ揪寮忔ā寮?
110
+ },
111
+ "path": {
112
+ "type": "string",
113
+ "description": "鎼滅储璧峰鐩綍锛岄粯璁や负宸ヤ綔鍖烘牴"
114
+ }
68
115
  },
69
- "required": ["pattern"],
116
+ "required": [
117
+ "pattern"
118
+ ],
70
119
  "additionalProperties": false
71
120
  },
72
- "example": { "pattern": "class.*Error", "path": "src/" }
121
+ "example": {
122
+ "pattern": "class.*Error",
123
+ "path": "src/"
124
+ }
73
125
  },
74
126
  {
75
127
  "name": "run_shell",
76
- "description": "在工作区内执行 shell 命令。命令需通过白名单验证。",
128
+ "description": "鍦ㄥ伐浣滃尯鍐呮墽琛?shell 鍛戒护銆傚懡浠ら渶閫氳繃鐧藉悕鍗曢獙璇併€?,
77
129
  "parameters": {
78
130
  "type": "object",
79
131
  "properties": {
80
- "command": { "type": "string", "description": "要执行的完整命令(如 'npm test'、'node index.js')" }
132
+ "command": {
133
+ "type": "string",
134
+ "description": "瑕佹墽琛岀殑瀹屾暣鍛戒护锛堝 'npm test'銆?node index.js'锛?
135
+ }
81
136
  },
82
- "required": ["command"],
137
+ "required": [
138
+ "command"
139
+ ],
83
140
  "additionalProperties": false
84
141
  },
85
- "example": { "command": "npm run typecheck" }
142
+ "example": {
143
+ "command": "npm run typecheck"
144
+ }
86
145
  },
87
146
  {
88
147
  "name": "build_check",
89
- "description": "检查项目是否能成功编译(运行 tsc --noEmit)。",
148
+ "description": "妫€鏌ラ」鐩槸鍚﹁兘鎴愬姛缂栬瘧锛堣繍琛?tsc --noEmit锛夈€?,
90
149
  "parameters": {
91
150
  "type": "object",
92
151
  "properties": {},
@@ -96,7 +155,7 @@
96
155
  },
97
156
  {
98
157
  "name": "run_tests",
99
- "description": "运行测试套件并返回结果。",
158
+ "description": "杩愯娴嬭瘯濂椾欢骞惰繑鍥炵粨鏋溿€?,
100
159
  "parameters": {
101
160
  "type": "object",
102
161
  "properties": {},
@@ -106,22 +165,34 @@
106
165
  }
107
166
  ],
108
167
  "toolCategories": {
109
- "file": ["write_file", "edit_file", "read_file", "list_files"],
110
- "search": ["grep"],
111
- "shell": ["run_shell"],
112
- "verify": ["build_check", "run_tests"]
168
+ "file": [
169
+ "write_file",
170
+ "edit_file",
171
+ "read_file",
172
+ "list_files"
173
+ ],
174
+ "search": [
175
+ "grep"
176
+ ],
177
+ "shell": [
178
+ "run_shell"
179
+ ],
180
+ "verify": [
181
+ "build_check",
182
+ "run_tests"
183
+ ]
113
184
  },
114
185
  "security": {
115
- "sandbox": "所有文件操作限制在工作区目录内",
116
- "approval": "危险操作(shell 命令、写入敏感文件)可能需要人工审批",
117
- "audit": "所有工具调用记录到 JSONL 事件日志"
186
+ "sandbox": "鎵€鏈夋枃浠舵搷浣滈檺鍒跺湪宸ヤ綔鍖虹洰褰曞唴",
187
+ "approval": "鍗遍櫓鎿嶄綔锛坰hell 鍛戒护銆佸啓鍏ユ晱鎰熸枃浠讹級鍙兘闇€瑕佷汉宸ュ鎵?,
188
+ "audit": "鎵€鏈夊伐鍏疯皟鐢ㄨ褰曞埌 JSONL 浜嬩欢鏃ュ織"
118
189
  },
119
190
  "errorCodes": {
120
- "FH_4001": "配额超限 — 日预算已耗尽,等待次日重置或申请配额",
121
- "FH_4003": "权限拒绝 — 当前角色无权执行此操作,检查 RBAC 策略",
122
- "FH_5001": "模型调用失败 — 网络问题或 API Key 无效,检查 provider 配置",
123
- "FH_5002": "上下文压缩失败 — 对话过长,尝试使用 /plan 重新规划",
124
- "FH_6001": "文件路径越权 路径包含 '..' 或符号链接,检查沙箱规则"
191
+ "FH_4001": "閰嶉瓒呴檺 鈥?鏃ラ绠楀凡鑰楀敖锛岀瓑寰呮鏃ラ噸缃垨鐢宠閰嶉",
192
+ "FH_4003": "鏉冮檺鎷掔粷 鈥?褰撳墠瑙掕壊鏃犳潈鎵ц姝ゆ搷浣滐紝妫€鏌?RBAC 绛栫暐",
193
+ "FH_5001": "妯″瀷璋冪敤澶辫触 鈥?缃戠粶闂鎴?API Key 鏃犳晥锛屾鏌?provider 閰嶇疆",
194
+ "FH_5002": "涓婁笅鏂囧帇缂╁け璐?鈥?瀵硅瘽杩囬暱锛屽皾璇曚娇鐢?/plan 閲嶆柊瑙勫垝",
195
+ "FH_6001": "鏂囦欢璺緞瓒婃潈 鈥?璺緞鍖呭惈 '..' 鎴栫鍙烽摼鎺ワ紝妫€鏌ユ矙绠辫鍒?
125
196
  },
126
- "authoredBy": "晋江市飞虹智科技企业管理有限公司 · 飞扬企源研发中心 · 负责人:吴赐虹"
127
- }
197
+ "authoredBy": "鏅嬫睙甯傞铏规櫤绉戞妧浼佷笟绠$悊鏈夐檺鍏徃 椋炴壃浼佹簮鐮斿彂涓績 璐熻矗浜猴細鍚磋祼铏?
198
+ }