nexforge-cli 0.2.7__tar.gz → 0.2.11__tar.gz

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 (187) hide show
  1. {nexforge_cli-0.2.7 → nexforge_cli-0.2.11}/PKG-INFO +20 -17
  2. nexforge_cli-0.2.11/README.md +109 -0
  3. nexforge_cli-0.2.11/_tmp_whl_check.py +19 -0
  4. nexforge_cli-0.2.11/doc//344/273/243/347/240/201/344/274/230/345/214/226/350/256/241/345/210/222.md +142 -0
  5. nexforge_cli-0.2.11/doc//347/211/271/346/200/247/346/250/241/345/235/227/346/263/250/345/206/214/345/210/266-/345/256/236/346/226/275/350/256/241/345/210/222.md +37 -0
  6. nexforge_cli-0.2.11/doc//351/241/271/347/233/256/346/200/273/347/233/221/345/276/252/347/216/257-/345/274/200/345/217/221/350/256/241/345/210/222.md +172 -0
  7. nexforge_cli-0.2.11/docs/submission/README-/346/212/225/347/250/277/350/257/264/346/230/216.md +67 -0
  8. nexforge_cli-0.2.11/docs/submission/nexforge.md +97 -0
  9. nexforge_cli-0.2.11/docs/submission/nexforge.zh-CN.md +97 -0
  10. nexforge_cli-0.2.11/manual/01-/345/256/211/350/243/205/344/270/216/351/205/215/347/275/256.md +83 -0
  11. nexforge_cli-0.2.11/manual/02-/347/225/214/351/235/242/344/270/216/345/277/253/346/215/267/351/224/256.md +114 -0
  12. nexforge_cli-0.2.11/manual/03-/346/250/241/345/236/213/351/205/215/347/275/256.md +131 -0
  13. nexforge_cli-0.2.11/manual/04-/345/267/245/345/205/267/345/217/202/350/200/203.md +98 -0
  14. nexforge_cli-0.2.11/manual/05-/346/225/260/346/215/256/344/270/216/346/220/234/347/264/242.md +64 -0
  15. nexforge_cli-0.2.11/manual/06-/346/235/203/351/231/220/344/270/216/346/250/241/345/274/217.md +71 -0
  16. nexforge_cli-0.2.11/manual/07-/344/274/232/350/257/235/344/270/216/350/256/260/345/277/206.md +63 -0
  17. nexforge_cli-0.2.11/manual/08-/350/207/252/345/256/232/344/271/211/351/205/215/347/275/256.md +126 -0
  18. nexforge_cli-0.2.11/manual/09-/345/270/270/350/247/201/351/227/256/351/242/230.md +87 -0
  19. nexforge_cli-0.2.11/manual/10-/346/217/222/344/273/266/345/274/200/345/217/221.md +78 -0
  20. nexforge_cli-0.2.11/manual/README.md +35 -0
  21. nexforge_cli-0.2.11/manual//351/231/204/345/275/225-/345/257/271/346/257/224/345/210/206/346/236/220.md +28 -0
  22. {nexforge_cli-0.2.7 → nexforge_cli-0.2.11}/pyproject.toml +60 -58
  23. nexforge_cli-0.2.11/src/nexforge/__init__.py +7 -0
  24. nexforge_cli-0.2.11/src/nexforge/app.py +59 -0
  25. {nexforge_cli-0.2.7 → nexforge_cli-0.2.11}/src/nexforge/cli.py +171 -159
  26. nexforge_cli-0.2.11/src/nexforge/config.py +507 -0
  27. {nexforge_cli-0.2.7 → nexforge_cli-0.2.11}/src/nexforge/core/agent.py +276 -244
  28. nexforge_cli-0.2.11/src/nexforge/core/context.py +26 -0
  29. nexforge_cli-0.2.11/src/nexforge/core/federation.py +202 -0
  30. nexforge_cli-0.2.11/src/nexforge/core/goal_manager.py +152 -0
  31. {nexforge_cli-0.2.7 → nexforge_cli-0.2.11}/src/nexforge/core/jobs.py +120 -97
  32. nexforge_cli-0.2.11/src/nexforge/core/knowledge_base.py +224 -0
  33. nexforge_cli-0.2.11/src/nexforge/core/memory_engine.py +121 -0
  34. nexforge_cli-0.2.11/src/nexforge/core/plugin.py +263 -0
  35. nexforge_cli-0.2.11/src/nexforge/core/project_mapper.py +539 -0
  36. nexforge_cli-0.2.11/src/nexforge/core/provider.py +73 -0
  37. nexforge_cli-0.2.11/src/nexforge/core/session.py +157 -0
  38. nexforge_cli-0.2.11/src/nexforge/core/summarizer.py +125 -0
  39. nexforge_cli-0.2.11/src/nexforge/core/tool_manifest.py +165 -0
  40. {nexforge_cli-0.2.7 → nexforge_cli-0.2.11}/src/nexforge/core/types.py +104 -103
  41. nexforge_cli-0.2.11/src/nexforge/features/auto_skills.py +133 -0
  42. nexforge_cli-0.2.11/src/nexforge/features/base.py +38 -0
  43. nexforge_cli-0.2.11/src/nexforge/features/federation_feature.py +47 -0
  44. nexforge_cli-0.2.11/src/nexforge/features/kb_feature.py +44 -0
  45. nexforge_cli-0.2.11/src/nexforge/features/map_feature.py +54 -0
  46. nexforge_cli-0.2.11/src/nexforge/features/memory_feature.py +43 -0
  47. nexforge_cli-0.2.11/src/nexforge/features/mode_features.py +395 -0
  48. nexforge_cli-0.2.11/src/nexforge/features/plan_feature.py +81 -0
  49. nexforge_cli-0.2.11/src/nexforge/features/registry.py +44 -0
  50. nexforge_cli-0.2.11/src/nexforge/features/session_feature.py +239 -0
  51. nexforge_cli-0.2.11/src/nexforge/features/slash_feature.py +27 -0
  52. nexforge_cli-0.2.11/src/nexforge/features/stats_feature.py +24 -0
  53. nexforge_cli-0.2.11/src/nexforge/features/tool_manifest_feature.py +35 -0
  54. nexforge_cli-0.2.11/src/nexforge/i18n.py +361 -0
  55. nexforge_cli-0.2.11/src/nexforge/provider/__init__.py +102 -0
  56. nexforge_cli-0.2.11/src/nexforge/provider/_retry.py +46 -0
  57. nexforge_cli-0.2.11/src/nexforge/provider/anthropic.py +256 -0
  58. {nexforge_cli-0.2.7 → nexforge_cli-0.2.11}/src/nexforge/provider/balance.py +58 -37
  59. {nexforge_cli-0.2.7 → nexforge_cli-0.2.11}/src/nexforge/provider/deepseek.py +42 -26
  60. nexforge_cli-0.2.11/src/nexforge/provider/openai.py +284 -0
  61. nexforge_cli-0.2.11/src/nexforge/provider/qianwen.py +295 -0
  62. {nexforge_cli-0.2.7 → nexforge_cli-0.2.11}/src/nexforge/skills/loader.py +103 -102
  63. {nexforge_cli-0.2.7 → nexforge_cli-0.2.11}/src/nexforge/stats/heartbeat.py +62 -58
  64. {nexforge_cli-0.2.7 → nexforge_cli-0.2.11}/src/nexforge/store/plan_store.py +120 -112
  65. nexforge_cli-0.2.11/src/nexforge/store/session_store.py +468 -0
  66. {nexforge_cli-0.2.7 → nexforge_cli-0.2.11}/src/nexforge/theme.tcss +18 -2
  67. nexforge_cli-0.2.11/src/nexforge/tools/_paths.py +50 -0
  68. {nexforge_cli-0.2.7 → nexforge_cli-0.2.11}/src/nexforge/tools/base.py +57 -56
  69. nexforge_cli-0.2.11/src/nexforge/tools/data_tools.py +253 -0
  70. nexforge_cli-0.2.11/src/nexforge/tools/federation.py +86 -0
  71. nexforge_cli-0.2.11/src/nexforge/tools/image_tools.py +173 -0
  72. nexforge_cli-0.2.11/src/nexforge/tools/kb_tools.py +88 -0
  73. nexforge_cli-0.2.11/src/nexforge/tools/ops_tools.py +849 -0
  74. {nexforge_cli-0.2.7 → nexforge_cli-0.2.11}/src/nexforge/tools/registry.py +120 -94
  75. nexforge_cli-0.2.11/src/nexforge/tools/search.py +210 -0
  76. nexforge_cli-0.2.11/src/nexforge/tools/shell.py +109 -0
  77. nexforge_cli-0.2.11/src/nexforge/tools/web.py +93 -0
  78. nexforge_cli-0.2.11/src/nexforge/ui/clipboard_image.py +33 -0
  79. nexforge_cli-0.2.11/src/nexforge/ui/screen_api.py +93 -0
  80. nexforge_cli-0.2.11/src/nexforge/ui/screens/chat.py +978 -0
  81. nexforge_cli-0.2.11/src/nexforge/ui/screens/chat_actions.py +311 -0
  82. nexforge_cli-0.2.11/src/nexforge/ui/screens/splash.py +59 -0
  83. nexforge_cli-0.2.11/src/nexforge/ui/slash_handler.py +731 -0
  84. {nexforge_cli-0.2.7 → nexforge_cli-0.2.11}/src/nexforge/ui/widgets/apikey_modal.py +87 -84
  85. {nexforge_cli-0.2.7 → nexforge_cli-0.2.11}/src/nexforge/ui/widgets/banner.py +27 -29
  86. {nexforge_cli-0.2.7 → nexforge_cli-0.2.11}/src/nexforge/ui/widgets/confirm_modal.py +60 -58
  87. {nexforge_cli-0.2.7 → nexforge_cli-0.2.11}/src/nexforge/ui/widgets/diff_modal.py +78 -67
  88. nexforge_cli-0.2.11/src/nexforge/ui/widgets/image_sidebar.py +98 -0
  89. {nexforge_cli-0.2.7 → nexforge_cli-0.2.11}/src/nexforge/ui/widgets/messages.py +71 -12
  90. {nexforge_cli-0.2.7 → nexforge_cli-0.2.11}/src/nexforge/ui/widgets/mode_warning.py +102 -120
  91. nexforge_cli-0.2.11/src/nexforge/ui/widgets/model_sidebar.py +244 -0
  92. {nexforge_cli-0.2.7 → nexforge_cli-0.2.11}/src/nexforge/ui/widgets/multiline_modal.py +5 -3
  93. nexforge_cli-0.2.11/src/nexforge/ui/widgets/multiline_prompt.py +78 -0
  94. nexforge_cli-0.2.11/src/nexforge/ui/widgets/plan_sidebar.py +96 -0
  95. {nexforge_cli-0.2.7 → nexforge_cli-0.2.11}/src/nexforge/ui/widgets/sidebar.py +106 -99
  96. nexforge_cli-0.2.11/src/nexforge/ui/widgets/statusbar.py +87 -0
  97. nexforge_cli-0.2.11/src/nexforge/utils/logging.py +23 -0
  98. nexforge_cli-0.2.11/src/nexforge/web/__init__.py +0 -0
  99. {nexforge_cli-0.2.7 → nexforge_cli-0.2.11}/src/nexforge/web/server.py +267 -177
  100. {nexforge_cli-0.2.7 → nexforge_cli-0.2.11}/src/nexforge/web/static/index.html +128 -123
  101. nexforge_cli-0.2.11/tests/conftest.py +16 -0
  102. {nexforge_cli-0.2.7 → nexforge_cli-0.2.11}/tests/test_approval.py +4 -4
  103. {nexforge_cli-0.2.7 → nexforge_cli-0.2.11}/tests/test_config.py +34 -1
  104. nexforge_cli-0.2.11/tests/test_goal_confirm.py +154 -0
  105. nexforge_cli-0.2.11/tests/test_i18n.py +87 -0
  106. nexforge_cli-0.2.11/tests/test_lang_cmd.py +155 -0
  107. nexforge_cli-0.2.11/tests/test_manual_consistency.py +212 -0
  108. nexforge_cli-0.2.11/tests/test_plugin.py +270 -0
  109. nexforge_cli-0.2.11/tests/test_sanitize.py +63 -0
  110. nexforge_cli-0.2.11/tests/test_session_repair.py +141 -0
  111. nexforge_cli-0.2.11/tests/test_session_store.py +189 -0
  112. {nexforge_cli-0.2.7 → nexforge_cli-0.2.11}/tests/test_sidebar.py +2 -2
  113. {nexforge_cli-0.2.7 → nexforge_cli-0.2.11}/tests/test_sidebar_actions.py +3 -3
  114. nexforge_cli-0.2.11/tests/test_splash_modal.py +60 -0
  115. nexforge_cli-0.2.7/README.md +0 -109
  116. nexforge_cli-0.2.7/doc//344/274/232/350/257/235/347/256/241/347/220/206.md +0 -56
  117. nexforge_cli-0.2.7/doc//345/221/275/344/273/244/344/270/216/345/277/253/346/215/267/351/224/256.md +0 -57
  118. nexforge_cli-0.2.7/doc//345/256/211/350/243/205/344/270/216/351/205/215/347/275/256.md +0 -108
  119. nexforge_cli-0.2.7/doc//345/257/271/346/257/224/345/210/206/346/236/220.md +0 -76
  120. nexforge_cli-0.2.7/doc//345/267/245/345/205/267/345/217/202/350/200/203.md +0 -64
  121. nexforge_cli-0.2.7/doc//346/200/273/350/247/210.md +0 -42
  122. nexforge_cli-0.2.7/doc//346/235/203/351/231/220/347/263/273/347/273/237.md +0 -44
  123. nexforge_cli-0.2.7/doc//350/256/241/345/210/222/346/250/241/345/274/217.md +0 -47
  124. nexforge_cli-0.2.7/doc//351/253/230/347/272/247/345/212/237/350/203/275.md +0 -101
  125. nexforge_cli-0.2.7/src/nexforge/__init__.py +0 -7
  126. nexforge_cli-0.2.7/src/nexforge/app.py +0 -38
  127. nexforge_cli-0.2.7/src/nexforge/config.py +0 -194
  128. nexforge_cli-0.2.7/src/nexforge/core/session.py +0 -74
  129. nexforge_cli-0.2.7/src/nexforge/provider/__init__.py +0 -1
  130. nexforge_cli-0.2.7/src/nexforge/store/session_store.py +0 -239
  131. nexforge_cli-0.2.7/src/nexforge/tools/_paths.py +0 -22
  132. nexforge_cli-0.2.7/src/nexforge/tools/shell.py +0 -66
  133. nexforge_cli-0.2.7/src/nexforge/tools/web.py +0 -40
  134. nexforge_cli-0.2.7/src/nexforge/ui/screens/chat.py +0 -949
  135. nexforge_cli-0.2.7/src/nexforge/ui/widgets/multiline_prompt.py +0 -27
  136. nexforge_cli-0.2.7/src/nexforge/ui/widgets/plan_sidebar.py +0 -89
  137. nexforge_cli-0.2.7/src/nexforge/ui/widgets/statusbar.py +0 -80
  138. {nexforge_cli-0.2.7 → nexforge_cli-0.2.11}/.gitignore +0 -0
  139. {nexforge_cli-0.2.7 → nexforge_cli-0.2.11}/INSTALL.md +0 -0
  140. {nexforge_cli-0.2.7 → nexforge_cli-0.2.11}/STATS_API.md +0 -0
  141. {nexforge_cli-0.2.7 → nexforge_cli-0.2.11}/assets/icons/agent.svg +0 -0
  142. {nexforge_cli-0.2.7 → nexforge_cli-0.2.11}/assets/icons/cost.svg +0 -0
  143. {nexforge_cli-0.2.7 → nexforge_cli-0.2.11}/assets/icons/edit.svg +0 -0
  144. {nexforge_cli-0.2.7 → nexforge_cli-0.2.11}/assets/icons/err.svg +0 -0
  145. {nexforge_cli-0.2.7 → nexforge_cli-0.2.11}/assets/icons/file.svg +0 -0
  146. {nexforge_cli-0.2.7 → nexforge_cli-0.2.11}/assets/icons/model.svg +0 -0
  147. {nexforge_cli-0.2.7 → nexforge_cli-0.2.11}/assets/icons/ok.svg +0 -0
  148. {nexforge_cli-0.2.7 → nexforge_cli-0.2.11}/assets/icons/read.svg +0 -0
  149. {nexforge_cli-0.2.7 → nexforge_cli-0.2.11}/assets/icons/running.svg +0 -0
  150. {nexforge_cli-0.2.7 → nexforge_cli-0.2.11}/assets/icons/search.svg +0 -0
  151. {nexforge_cli-0.2.7 → nexforge_cli-0.2.11}/assets/icons/shell.svg +0 -0
  152. {nexforge_cli-0.2.7 → nexforge_cli-0.2.11}/assets/icons/thinking.svg +0 -0
  153. {nexforge_cli-0.2.7 → nexforge_cli-0.2.11}/assets/icons/web.svg +0 -0
  154. {nexforge_cli-0.2.7 → nexforge_cli-0.2.11}/assets/icons/write.svg +0 -0
  155. {nexforge_cli-0.2.7 → nexforge_cli-0.2.11}/config.example.toml +0 -0
  156. {nexforge_cli-0.2.7 → nexforge_cli-0.2.11}/devlog/2026-07-07.md +0 -0
  157. {nexforge_cli-0.2.7 → nexforge_cli-0.2.11}/scripts/publish.sh +0 -0
  158. {nexforge_cli-0.2.7 → nexforge_cli-0.2.11}/scripts/smoke_provider.py +0 -0
  159. {nexforge_cli-0.2.7 → nexforge_cli-0.2.11}/scripts/smoke_tui.py +0 -0
  160. {nexforge_cli-0.2.7 → nexforge_cli-0.2.11}/src/nexforge/__main__.py +0 -0
  161. {nexforge_cli-0.2.7 → nexforge_cli-0.2.11}/src/nexforge/core/__init__.py +0 -0
  162. {nexforge_cli-0.2.7 → nexforge_cli-0.2.11}/src/nexforge/core/permissions.py +0 -0
  163. {nexforge_cli-0.2.7 → nexforge_cli-0.2.11}/src/nexforge/core/router.py +0 -0
  164. {nexforge_cli-0.2.7/src/nexforge/stats → nexforge_cli-0.2.11/src/nexforge/features}/__init__.py +0 -0
  165. {nexforge_cli-0.2.7 → nexforge_cli-0.2.11}/src/nexforge/icons.py +0 -0
  166. {nexforge_cli-0.2.7 → nexforge_cli-0.2.11}/src/nexforge/mcp/__init__.py +0 -0
  167. {nexforge_cli-0.2.7/src/nexforge/web → nexforge_cli-0.2.11/src/nexforge/stats}/__init__.py +0 -0
  168. {nexforge_cli-0.2.7 → nexforge_cli-0.2.11}/src/nexforge/store/__init__.py +0 -0
  169. {nexforge_cli-0.2.7 → nexforge_cli-0.2.11}/src/nexforge/tools/__init__.py +0 -0
  170. {nexforge_cli-0.2.7 → nexforge_cli-0.2.11}/src/nexforge/tools/background.py +0 -0
  171. {nexforge_cli-0.2.7 → nexforge_cli-0.2.11}/src/nexforge/tools/edit_file.py +0 -0
  172. {nexforge_cli-0.2.7 → nexforge_cli-0.2.11}/src/nexforge/tools/fs_ops.py +0 -0
  173. {nexforge_cli-0.2.7 → nexforge_cli-0.2.11}/src/nexforge/tools/git.py +0 -0
  174. {nexforge_cli-0.2.7 → nexforge_cli-0.2.11}/src/nexforge/tools/list_dir.py +0 -0
  175. {nexforge_cli-0.2.7 → nexforge_cli-0.2.11}/src/nexforge/tools/multi_edit.py +0 -0
  176. {nexforge_cli-0.2.7 → nexforge_cli-0.2.11}/src/nexforge/tools/read_file.py +0 -0
  177. {nexforge_cli-0.2.7 → nexforge_cli-0.2.11}/src/nexforge/tools/search_content.py +0 -0
  178. {nexforge_cli-0.2.7 → nexforge_cli-0.2.11}/src/nexforge/tools/search_files.py +0 -0
  179. {nexforge_cli-0.2.7 → nexforge_cli-0.2.11}/src/nexforge/tools/write_file.py +0 -0
  180. {nexforge_cli-0.2.7 → nexforge_cli-0.2.11}/src/nexforge/ui/__init__.py +0 -0
  181. {nexforge_cli-0.2.7 → nexforge_cli-0.2.11}/src/nexforge/ui/screens/__init__.py +0 -0
  182. {nexforge_cli-0.2.7 → nexforge_cli-0.2.11}/src/nexforge/ui/widgets/__init__.py +0 -0
  183. /nexforge_cli-0.2.7/= → /nexforge_cli-0.2.11/src/nexforge/utils/__init__.py +0 -0
  184. {nexforge_cli-0.2.7 → nexforge_cli-0.2.11}/tests/test_icons.py +0 -0
  185. {nexforge_cli-0.2.7 → nexforge_cli-0.2.11}/tests/test_m2_tools.py +0 -0
  186. {nexforge_cli-0.2.7 → nexforge_cli-0.2.11}/tests/test_tools.py +0 -0
  187. {nexforge_cli-0.2.7 → nexforge_cli-0.2.11}/tests/test_tui.py +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.4
1
+ Metadata-Version: 2.5
2
2
  Name: nexforge-cli
3
- Version: 0.2.7
3
+ Version: 0.2.11
4
4
  Summary: NexForgeCLI — 一个面向 DeepSeek V4 的终端智能体(TUI + CLI 双模式)
5
5
  Project-URL: Homepage, https://gitee.com/Lighthorn/nexforgecli
6
6
  Author: NexForge
@@ -21,10 +21,13 @@ Classifier: Topic :: Terminals
21
21
  Requires-Python: >=3.11
22
22
  Requires-Dist: httpx>=0.27
23
23
  Requires-Dist: openai>=1.40
24
+ Requires-Dist: pillow>=10.0
24
25
  Requires-Dist: pydantic>=2.6
25
26
  Requires-Dist: pyperclip>=1.8
26
27
  Requires-Dist: rich>=13.7
27
28
  Requires-Dist: textual>=0.60
29
+ Provides-Extra: anthropic
30
+ Requires-Dist: anthropic>=0.50; extra == 'anthropic'
28
31
  Provides-Extra: dev
29
32
  Requires-Dist: build>=1.2; extra == 'dev'
30
33
  Requires-Dist: pytest-asyncio>=0.23; extra == 'dev'
@@ -46,9 +49,9 @@ Description-Content-Type: text/markdown
46
49
 
47
50
  </div>
48
51
 
49
- NexForgeCLI 是一个运行在终端里的智能体助手,专为 **DeepSeek V4** 打造。既能作为全屏 TUI 交互式对话/编码,也能作为 one-shot 命令行工具嵌进脚本和管道。
52
+ NexForgeCLI 是一个运行在终端里的智能体助手,既支持 DeepSeek/千问等多模型,也是**插件宿主**(plugins 目录即插即用)。既能作为全屏 TUI 交互式对话/编码,也能作为 one-shot 命令行工具嵌进脚本和管道。
50
53
 
51
- > 当前版本:**v0.2.5** · PyPI: `pip install nexforge-cli`
54
+ > 当前版本:**v0.2.11** · PyPI: `pip install nexforge-cli`
52
55
 
53
56
  ---
54
57
 
@@ -78,14 +81,16 @@ API Key 获取: https://platform.deepseek.com/api_keys
78
81
 
79
82
  ## ✨ 特性
80
83
 
81
- - **DeepSeek V4 深度优化** —— thinking 模式、KV Cache、streaming、采样参数、JSON Mode、tool_choice 全适配
82
- - **TUI 全屏交互** —— Textual 驱动,流式 Markdown、可折叠思考面板、工具卡片、状态栏
83
- - **安全分级** —— safe/supervised/auto 三级权限,审批弹窗
84
+ - **多模型底座** —— DeepSeek(内置) / 千问专用底座 / 通用 OpenAI 兼容 / Anthropic,`/provider` 即切
85
+ - **插件宿主** —— `plugins/` 目录即插即用(工具/UI特性/技能),无需改主程序
86
+ - **三级知识库** —— 全局+项目+项目地图,kb_search 检索、kb_write 沉淀
87
+ - **DeepSeek 深度优化** —— thinking 模式、KV Cache、streaming、采样参数、JSON Mode、tool_choice 全适配
88
+ - **TUI 全屏交互** —— Textual 驱动,流式 Markdown、可折叠思考面板、工具卡片、状态栏
89
+ - **安全分级** —— safe/supervised/auto 三级权限,审批弹窗
84
90
  - **会话管理** —— 自动保存/恢复、多会话切换、重命名/删除
85
- - **计划模式** —— 只读讨论,AI 生成计划后执行
91
+ - **计划模式** —— 只读讨论,AI 生成计划后执行
86
92
  - **多行输入** —— F2 弹窗面板、F3 系统编辑器
87
93
  - **一键安装** —— `pip install nexforge-cli`
88
- - **性能优化** —— O(n²)→O(n) 流式渲染、DOM 查询缓存、I/O 异步化
89
94
 
90
95
  ---
91
96
 
@@ -122,14 +127,12 @@ nexforge -p "这个项目是做什么的?"
122
127
 
123
128
  | 文档 | 内容 |
124
129
  |------|------|
125
- | [总览](doc/总览.md) | 项目介绍 |
126
- | [安装与配置](doc/安装与配置.md) | 安装/配置/FAQ |
127
- | [命令与快捷键](doc/命令与快捷键.md) | 全部命令和快捷键 |
128
- | [工具参考](doc/工具参考.md) | AI 可调用工具说明 |
129
- | [会话管理](doc/会话管理.md) | 会话保存/恢复/切换 |
130
- | [计划模式](doc/计划模式.md) | 只读讨论模式 |
131
- | [权限系统](doc/权限系统.md) | 三级权限 |
132
- | [高级功能](doc/高级功能.md) | DeepSeek 集成/Web/技能 |
130
+ | [01-安装与配置](manual/01-安装与配置.md) | 安装/配置/API Key |
131
+ | [02-界面与快捷键](manual/02-界面与快捷键.md) | 全部命令和快捷键 |
132
+ | [03-模型配置](manual/03-模型配置.md) | DeepSeek/千问/多模型接入 |
133
+ | [04-工具参考](manual/04-工具参考.md) | AI 可调用工具说明 |
134
+ | [08-自定义配置](manual/08-自定义配置.md) | config.toml/models.toml 全字段 |
135
+ | [10-插件开发](manual/10-插件开发.md) | 插件宿主开发指南 |
133
136
 
134
137
  ---
135
138
 
@@ -0,0 +1,109 @@
1
+ <div align="center">
2
+
3
+ # ◆ NexForgeCLI
4
+
5
+ **面向 DeepSeek V4 的终端智能体 · TUI + CLI 双模式**
6
+
7
+ </div>
8
+
9
+ NexForgeCLI 是一个运行在终端里的智能体助手,既支持 DeepSeek/千问等多模型,也是**插件宿主**(plugins 目录即插即用)。既能作为全屏 TUI 交互式对话/编码,也能作为 one-shot 命令行工具嵌进脚本和管道。
10
+
11
+ > 当前版本:**v0.2.11** · PyPI: `pip install nexforge-cli`
12
+
13
+ ---
14
+
15
+ ## 📦 安装
16
+
17
+ ```bash
18
+ # pipx 安装(推荐,自动管理 PATH)
19
+ pipx install nexforge-cli
20
+
21
+ # pip 安装
22
+ pip install nexforge-cli
23
+
24
+ # 开发版
25
+ pip install git+https://gitee.com/Lighthorn/nexforgecli.git
26
+ ```
27
+
28
+ 设置 API Key:
29
+
30
+ ```bash
31
+ export DEEPSEEK_API_KEY="sk-..."
32
+ # 或启动后在输入框输入: /key sk-...
33
+ ```
34
+
35
+ API Key 获取: https://platform.deepseek.com/api_keys
36
+
37
+ ---
38
+
39
+ ## ✨ 特性
40
+
41
+ - **多模型底座** —— DeepSeek(内置) / 千问专用底座 / 通用 OpenAI 兼容 / Anthropic,`/provider` 即切
42
+ - **插件宿主** —— `plugins/` 目录即插即用(工具/UI特性/技能),无需改主程序
43
+ - **三级知识库** —— 全局+项目+项目地图,kb_search 检索、kb_write 沉淀
44
+ - **DeepSeek 深度优化** —— thinking 模式、KV Cache、streaming、采样参数、JSON Mode、tool_choice 全适配
45
+ - **TUI 全屏交互** —— Textual 驱动,流式 Markdown、可折叠思考面板、工具卡片、状态栏
46
+ - **安全分级** —— safe/supervised/auto 三级权限,审批弹窗
47
+ - **会话管理** —— 自动保存/恢复、多会话切换、重命名/删除
48
+ - **计划模式** —— 只读讨论,AI 生成计划后执行
49
+ - **多行输入** —— F2 弹窗面板、F3 系统编辑器
50
+ - **一键安装** —— `pip install nexforge-cli`
51
+
52
+ ---
53
+
54
+ ## 🚀 使用
55
+
56
+ ```bash
57
+ # 全屏 TUI(默认)
58
+ nexforge
59
+
60
+ # 或简写
61
+ nf
62
+
63
+ # one-shot 模式
64
+ nexforge -p "这个项目是做什么的?"
65
+ ```
66
+
67
+ ### 快捷键
68
+
69
+ | 快捷键 | 功能 |
70
+ |--------|------|
71
+ | `Enter` | 发送消息 |
72
+ | `F1` | 帮助 |
73
+ | `F2` | 多行输入弹窗 |
74
+ | `F3` | 外部编辑器 |
75
+ | `Ctrl+S` | 会话面板 |
76
+ | `Ctrl+B` | 计划面板 |
77
+ | `Ctrl+L` | 清屏 |
78
+ | `Ctrl+Shift+C` | 复制 AI 回复 |
79
+ | `Esc` | 停止/退出 |
80
+
81
+ ---
82
+
83
+ ## 📁 文档
84
+
85
+ | 文档 | 内容 |
86
+ |------|------|
87
+ | [01-安装与配置](manual/01-安装与配置.md) | 安装/配置/API Key |
88
+ | [02-界面与快捷键](manual/02-界面与快捷键.md) | 全部命令和快捷键 |
89
+ | [03-模型配置](manual/03-模型配置.md) | DeepSeek/千问/多模型接入 |
90
+ | [04-工具参考](manual/04-工具参考.md) | AI 可调用工具说明 |
91
+ | [08-自定义配置](manual/08-自定义配置.md) | config.toml/models.toml 全字段 |
92
+ | [10-插件开发](manual/10-插件开发.md) | 插件宿主开发指南 |
93
+
94
+ ---
95
+
96
+ ## 🧪 开发
97
+
98
+ ```bash
99
+ git clone https://gitee.com/Lighthorn/nexforgecli.git
100
+ cd nexforgecli
101
+ pip install -e ".[dev]"
102
+ python -m pytest -q
103
+ ```
104
+
105
+ ---
106
+
107
+ ## 📄 License
108
+
109
+ MIT
@@ -0,0 +1,19 @@
1
+ # -*- coding: utf-8 -*-
2
+ """临时: 验证 wheel 内容完整性, 验证后删除"""
3
+ import glob
4
+ import sys
5
+ import zipfile
6
+
7
+ sys.stdout.reconfigure(encoding="utf-8", errors="replace")
8
+
9
+ whl = glob.glob("dist/*.whl")[0]
10
+ names = zipfile.ZipFile(whl).namelist()
11
+ check = [
12
+ "plugin.py", "knowledge_base.py", "context.py", "qianwen.py",
13
+ "kb_tools.py", "summarizer.py", "goal_manager.py", "speech",
14
+ ]
15
+ missing = [c for c in check if not any(n.endswith("/" + c) for n in names)]
16
+ print("wheel:", whl)
17
+ print("总文件数:", len(names))
18
+ print("缺失:", missing or "无 ✓")
19
+ assert not missing
@@ -0,0 +1,142 @@
1
+ # NexForgeCLI 代码优化计划
2
+
3
+ > 审计日期: 2026-07-16 · 当前版本: v0.2.x · 目标: 稳定、可扩展
4
+
5
+ ---
6
+
7
+ ## 审计发现总结
8
+
9
+ | 严重度 | 数量 | 说明 |
10
+ |--------|------|------|
11
+ | 🔴 致命 | 1 | `chat.py` 949行 God Screen,包含20+ slash命令/会话管理/审批/滚动等全部逻辑 |
12
+ | 🟡 重要 | 4 | 死代码(12行)、重复方法体(8行)、未使用import、test gap 60% |
13
+ | 🟢 优化 | 8 | 硬编码常量、静默异常吞噬、模块内聚性差 |
14
+
15
+ ---
16
+
17
+ ## 优化计划 (分3阶段)
18
+
19
+ ### 阶段1: 清理 (P0, 立即执行, ~30 min)
20
+
21
+ **目标**: 消除死代码和安全隐患,不改变任何功能
22
+
23
+ | # | 文件 | 操作 | 收益 |
24
+ |---|------|------|------|
25
+ | 1.1 | `chat.py` L298-311 | 删除 `/perm` 后不可达的12行死代码 | 减少混淆 |
26
+ | 1.2 | `chat.py` L455-462 | 删除 `_set_follow` 重复方法体 | 修复潜在 bug |
27
+ | 1.3 | `chat.py` L6 | 删除未使用的 `from pathlib import Path` | 清理导入 |
28
+ | 1.4 | `chat.py` L19 | `import asyncio` 移到 stdlib 块顶部 | PEP 8 |
29
+ | 1.5 | `stats/heartbeat.py` L53 | `except Exception: pass` → 至少日志记录 | 可观测性 |
30
+ | 1.6 | `chat.py` `_refresh_status` | `query_one("#status")` 加 try/except | 防崩溃 |
31
+
32
+ ---
33
+
34
+ ### 阶段2: 拆分 (P1, 核心重构, ~2 hr)
35
+
36
+ **目标**: 将 God Screen `chat.py` 拆分为5个独立模块
37
+
38
+ #### 2.1 拆分 `SlashCommandHandler`
39
+
40
+ ```
41
+ src/nexforge/ui/slash_handler.py (新建, ~200 lines)
42
+ ```
43
+
44
+ **迁移内容**:
45
+ - `_handle_slash` 全部逻辑(159-370行)
46
+ - `HELP` 字符串(建议改为 `slash_handler.HELP`)
47
+ - 每个命令的处理函数独立为 `_cmd_xxx()` 方法
48
+
49
+ **接口**: `SlashCommandHandler(screen)` — 依赖注入 screen
50
+
51
+ #### 2.2 拆分 `SessionManager`
52
+
53
+ ```
54
+ src/nexforge/ui/session_manager.py (新建, ~130 lines)
55
+ ```
56
+
57
+ **迁移内容**:
58
+ - `_do_new_session`, `_do_delete_session`, `_do_switch_session`
59
+ - `_auto_save`, `_auto_resume`, `_save_as`
60
+ - 与 `store/session_store.py` 直接通信
61
+
62
+ #### 2.3 拆分 `ApprovalManager`
63
+
64
+ ```
65
+ src/nexforge/ui/approval_manager.py (新建, ~70 lines)
66
+ ```
67
+
68
+ **迁移内容**:
69
+ - `_ask_approve`, `_make_diff`, `_unified`
70
+ - 依赖于 `confirm_modal`, `diff_modal`
71
+
72
+ #### 2.4 拆分 `ScrollController` (Mixin)
73
+
74
+ ```
75
+ src/nexforge/ui/scroll_controller.py (新建, ~60 lines)
76
+ ```
77
+
78
+ **迁移内容**:
79
+ - `_scroll`, `_set_follow`, `_scroll_to_bottom`, `_reset_scroll_safety`
80
+
81
+ #### 2.5 精简后的 `ChatScreen`
82
+
83
+ ```
84
+ src/nexforge/ui/screens/chat.py (~250 lines)
85
+ ```
86
+
87
+ **保留内容**:
88
+ - compose, on_mount
89
+ - _run_agent (Agent 事件流)
90
+ - 组合上述4个组件
91
+ - _init_provider, _refresh_status
92
+
93
+ ---
94
+
95
+ ### 阶段3: 加固 (P2, 质量提升, ~1 hr)
96
+
97
+ | # | 操作 | 收益 |
98
+ |---|------|------|
99
+ | 3.1 | 7个硬编码常量提取到 `config.py`(`MAX_WIDGETS`, `MAX_HITS`, 等) | 可配置 |
100
+ | 3.2 | 8处静默 `except: pass` 改 `except Exception: log.warning(...)` | 可调试 |
101
+ | 3.3 | `tools/*.py` 加 `PluginBase` 抽象基类 | 可扩展 |
102
+ | 3.4 | 添加 `src/nexforge/utils/logging.py` 统一日志模块 | 统一 |
103
+ | 3.5 | `HELP` 字符串改为 `resources/help.md` 外部文件 | 可维护 |
104
+ | 3.6 | `DEFAULT_SYSTEM` prompt 改为 `resources/system_prompt.md` | 可调整 |
105
+
106
+ ---
107
+
108
+ ## 涉及文件清单
109
+
110
+ | 文件 | 阶段 | 改动类型 |
111
+ |------|------|---------|
112
+ | `src/nexforge/ui/screens/chat.py` | 1+2 | 删死代码 + 拆出200行 → 最终 ~250行 |
113
+ | `src/nexforge/ui/slash_handler.py` | 2 | **新建** (~200行) |
114
+ | `src/nexforge/ui/session_manager.py` | 2 | **新建** (~130行) |
115
+ | `src/nexforge/ui/approval_manager.py` | 2 | **新建** (~70行) |
116
+ | `src/nexforge/ui/scroll_controller.py` | 2 | **新建** (~60行) |
117
+ | `src/nexforge/stats/heartbeat.py` | 1 | 静默异常 → 日志 |
118
+ | `src/nexforge/config.py` | 3 | 加可配置常量 |
119
+ | `src/nexforge/utils/logging.py` | 3 | **新建** |
120
+ | `resources/help.md` | 3 | **新建** |
121
+ | `resources/system_prompt.md` | 3 | **新建** |
122
+
123
+ ---
124
+
125
+ ## 风险控制
126
+
127
+ - **阶段1 零风险**:纯删除/移动代码,不改变功能
128
+ - **阶段2 低风险**:拆分后立即运行全量测试(47个),任一失败回滚
129
+ - **阶段3 可分批**:常量提取和日志模块单独 commit,便于回退
130
+
131
+ ---
132
+
133
+ ## 预期效果
134
+
135
+ | 指标 | 当前 | 目标 |
136
+ |------|------|------|
137
+ | `chat.py` 行数 | 949 | ~250 |
138
+ | 单文件最大行数 | 949 | ~270 |
139
+ | 死代码行数 | 20+ | 0 |
140
+ | 静默异常 | 12处 | 0处(全部日志) |
141
+ | 可配置常量 | 0 | 7个 |
142
+ | 模块间依赖 | 全耦合在 Screen | 依赖注入 |
@@ -0,0 +1,37 @@
1
+ # 特性模块注册制 实施计划
2
+
3
+ ## 目标
4
+
5
+ 将 ChatScreen 所有特性解耦为可插拔模块,后续新增功能无需改 ChatScreen。
6
+
7
+ ## 架构
8
+
9
+ ```
10
+ ChatScreen (控制器, <200 行)
11
+ └── FeatureRegistry
12
+ ├── SlashFeature → /commands
13
+ ├── GoalModeFeature → 目标模式
14
+ ├── OpsModeFeature → 运维模式
15
+ ├── StatsFeature → 心跳
16
+ └── SessionFeature → 会话管理
17
+ ```
18
+
19
+ ## 需要做的事情
20
+
21
+ 1. **创建 Feature 基类** (`src/nexforge/features/base.py`)
22
+ 2. **创建 FeatureRegistry** (`src/nexforge/features/registry.py`)
23
+ 3. **提取现有特性为 Feature**
24
+ - SlashFeature (已有 SlashCommandHandler)
25
+ - GoalModeFeature (目标循环)
26
+ - OpsModeFeature (运维模式)
27
+ - StatsFeature (心跳)
28
+ - SessionFeature (会话管理)
29
+ 4. **精简 ChatScreen** (只保留 compose/on_mount/_run_agent/_refresh_status)
30
+ 5. **ChatScreen.on_mount 注册所有 Feature**
31
+
32
+ 每个 Feature 只暴露 3 个钩子:
33
+ - `register(screen)` → 注入引用
34
+ - `on_mount()` → 启动时初始化
35
+ - `bindings()` → 返回需要的快捷键
36
+
37
+ 新增功能: 只需写一个 Feature 类 + 注册,不改 ChatScreen。
@@ -0,0 +1,172 @@
1
+ # 项目总监循环 开发计划
2
+
3
+ > 版本: v1.0 · 创建: 2026-07-16 · 状态: 设计完成,待实现
4
+
5
+ ---
6
+
7
+ ## 概述
8
+
9
+ 在目标模式(`/goal`)下,引入"项目总监 + 开发者"双角色架构。项目总监负责制定计划、审核进展、分发任务;开发者负责具体执行。目标是让 AI 能够自主完成复杂的多轮开发任务,同时保证质量和可追溯性。
10
+
11
+ ---
12
+
13
+ ## 角色定义
14
+
15
+ ### 项目总监 (Director)
16
+
17
+ - **职责**:审核开发者报告 → 判断进展 → 发布下一条指令
18
+ - **审核维度**:代码质量、性能瓶颈、稳定性、用户体验、逻辑流程
19
+ - **防僵局策略**:当开发者反复说"任务完成"时,从以下方向主动寻找新工作:
20
+ - 边界情况覆盖
21
+ - 测试补充
22
+ - 性能优化
23
+ - 文档/代码注释
24
+ - 代码重构整理
25
+ - 是否真正满足核心需求
26
+ - **停止判断**:若目标已达成,回复 `GOAL_ACHIEVED` 关键词
27
+
28
+ ### 开发者 (Developer)
29
+
30
+ - **职责**:执行项目总监的指令 → 完成后提交总结报告
31
+ - **行为约束**:专注执行指令,不做多余的事
32
+
33
+ ---
34
+
35
+ ## 启动流程 (二步确认)
36
+
37
+ ```
38
+ 用户输入 /goal
39
+ → Step 1: 弹出风险警告弹窗(GoalModeModal)
40
+ → Step 2: 弹出多行输入框,用户输入目标描述
41
+ → Step 3: 显示目标预览,提示"回复确认开始"
42
+ → Step 4: 用户回复"确认"/"开始"/"ok"/"yes"
43
+ → Step 5: 正式启动
44
+ ```
45
+
46
+ ### 启动时操作
47
+ 1. `self.config.ui.goal_mode = True`
48
+ 2. `self.config.ui.mode = "auto"` (强制全自动)
49
+ 3. 保存到项目级 `config.toml`
50
+ 4. 创建 `.nexforge/goal/nfgoal.md` (记录最终目标)
51
+ 5. 发送首轮指令给 AI:"[项目总监] 制定开发计划并发布第一条指令"
52
+
53
+ ---
54
+
55
+ ## 循环流程
56
+
57
+ ```
58
+ 每个 AI 回合结束 (TURN_DONE)
59
+ → 如果 goal_mode == True:
60
+ → 调用 _goal_cycle_continue(last_response)
61
+ → 检查停止条件
62
+ → 显示项目总监金色消息
63
+ → 构造总监 prompt(包含目标+计划+开发者报告)
64
+ → 启动下一轮 AI
65
+ ```
66
+
67
+ ### 停止条件 (任一满足即停止)
68
+
69
+ | 条件 | 检测方式 | 操作 |
70
+ |------|---------|------|
71
+ | 余额耗尽 | `_balance == "0.00"` | 显示"账户余额耗尽",退出目标模式 |
72
+ | 总监判断达成 | `last_response` 含 `GOAL_ACHIEVED` | 显示"项目总监判断目标达成" |
73
+ | 达到最大轮数 | `current >= max_rounds` (默认 100,可通过 `/max N` 设置) | 显示"达到最大轮数" |
74
+
75
+ ---
76
+
77
+ ## UI 显示
78
+
79
+ ### 项目总监消息 (金色)
80
+ ```python
81
+ class DirectorNote(Static):
82
+ """👔 项目总监: 消息内容 (金色 #FFD700 加粗)"""
83
+ ```
84
+
85
+ - 每轮开始前在聊天区显示金色提示条
86
+ - 格式:`第 N/M 轮:项目总监审核`
87
+
88
+ ### 状态栏
89
+ - 目标模式开启时显示 `🎯 目标`
90
+ - 运维模式开启时显示 `🔧 运维`
91
+
92
+ ---
93
+
94
+ ## 快捷键
95
+
96
+ | 快捷键 | 功能 |
97
+ |--------|------|
98
+ | F7 | 切换运维模式 |
99
+ | F8 | 切换目标模式(开启时强制全自动) |
100
+ | Esc | 目标模式三级停止:停总监 → 停开发者 → 退出 |
101
+
102
+ ### Esc 三级停止逻辑
103
+ ```
104
+ Esc 第1次:停止项目总监(goal_mode=False,开发者继续当前工作)
105
+ Esc 第2次:取消开发者 worker
106
+ Esc 第3次:弹出退出确认
107
+ ```
108
+
109
+ ---
110
+
111
+ ## 文件体系 (项目隔离,仅目标模式)
112
+
113
+ ```
114
+ <项目>/.nexforge/goal/
115
+ ├── nfgoal.md ← 最终目标
116
+ ├── plan.md ← 项目总监编写的计划
117
+ └── rounds/
118
+ ├── 001.md ← 第1轮:开发者报告 + 总监审核
119
+ ├── 002.md ← 第2轮
120
+ └── ...
121
+ ```
122
+
123
+ - 非目标模式不创建此目录
124
+ - 离开目标模式后不自动清理(保留历史)
125
+
126
+ ---
127
+
128
+ ## 配置项
129
+
130
+ | 配置 | 默认 | 说明 |
131
+ |------|------|------|
132
+ | `ui.goal_mode` | `false` | 是否处于目标模式 |
133
+ | `ui.ops_mode` | `false` | 是否处于运维模式 |
134
+ | `ui.max_rounds` | `100` | 目标模式最大轮数,通过 `/max N` 修改 |
135
+ | `ui.mode` | `review` | 审批模式(review/auto) |
136
+
137
+ ---
138
+
139
+ ## 涉及文件
140
+
141
+ | 文件 | 改动 |
142
+ |------|------|
143
+ | `src/nexforge/core/goal_manager.py` | **已创建** — GoalManager 类 |
144
+ | `src/nexforge/ui/screens/chat.py` | 加 `_start_goal_mode`、`_confirm_goal_start`、`_goal_cycle_continue` |
145
+ | `src/nexforge/ui/widgets/messages.py` | **已创建** — DirectorNote 金色组件 |
146
+ | `src/nexforge/ui/widgets/mode_warning.py` | 已有 GoalModeModal、OpsModeModal |
147
+ | `src/nexforge/config.py` | goal_mode/ops_mode/max_rounds 字段 |
148
+ | `src/nexforge/store/session_store.py` | 会话保存过滤系统消息(已实现) |
149
+
150
+ ---
151
+
152
+ ## 实现注意事项
153
+
154
+ 1. **不要用 heredoc/多行字符串替换编辑 chat.py**——该文件已因反复编辑损坏多次
155
+ 2. **使用 `edit_file` 工具逐个精准替换**,每次编辑后编译验证
156
+ 3. **`_goal_cycle_continue` 必须独立为类方法**,不能嵌入其他方法中
157
+ 4. **字符串拼接用 `+` 而非 f-string 跨行**,避免语法错误
158
+ 5. **`save_config` 按项目保存**(`<cwd>/.nexforge/config.toml`),不污染全局
159
+ 6. **系统消息不保存到会话文件**(已在 session_store.py 实现)
160
+
161
+ ---
162
+
163
+ ## 测试验证
164
+
165
+ - [ ] `/goal` → 弹窗 → 输入目标 → "确认" → 项目总监启动
166
+ - [ ] F8 一键切换目标模式
167
+ - [ ] F7 一键切换运维模式
168
+ - [ ] Esc 三级停止(目标模式)
169
+ - [ ] `GOAL_ACHIEVED` 自动停止
170
+ - [ ] `/max 50` 修改轮数上限
171
+ - [ ] 不同项目独立模式状态
172
+ - [ ] 余额耗尽自动停止
@@ -0,0 +1,67 @@
1
+ # 投稿 NexForgeCLI 到 awesome-deepseek-agent
2
+
3
+ ## 已准备好的文件
4
+
5
+ ```
6
+ docs/submission/
7
+ nexforge.md ← 英文指南(可直接用)
8
+ nexforge.zh-CN.md ← 简体中文指南(可直接用)
9
+ ```
10
+
11
+ ## 需要你手动做的 4 步(需要 GitHub 账号)
12
+
13
+ ### 第 1 步: Fork 仓库
14
+
15
+ 1. 打开 https://github.com/deepseek-ai/awesome-deepseek-agent
16
+ 2. 点右上角 **Fork** 到你的账号
17
+
18
+ ### 第 2 步: 上传两个指南文件
19
+
20
+ 在你的 fork 里进入 `docs/` 目录 → **Add file → Upload files**:
21
+
22
+ ```
23
+ docs/nexforge.md ← 内容取自 docs/submission/nexforge.md
24
+ docs/nexforge.zh-CN.md ← 内容取自 docs/submission/nexforge.zh-CN.md
25
+ ```
26
+
27
+ ### 第 3 步: 修改两个 README(插入表格条目)
28
+
29
+ **README.md**(英文版): 在 `| **nanobot** |` 行之后、`| **Oh My Pi** |` 行之前插入:
30
+
31
+ ```markdown
32
+ | **NexForgeCLI** | Open-source terminal AI coding assistant with 35 built-in tools, native DeepSeek-V4 support (1M context), data analysis, web search, and a director-loop goal mode. | [Guide](./docs/nexforge.md) |
33
+ ```
34
+
35
+ **README.zh-CN.md**(中文版): 同样位置(在 nanobot 之后、Oh My Pi 之前)插入:
36
+
37
+ ```markdown
38
+ | **NexForgeCLI** | 开源终端 AI 编程助手,内置 35 个工具,原生支持 DeepSeek-V4(100 万上下文)、数据分析、网络搜索与总监循环目标模式。 | [指南](./docs/nexforge.zh-CN.md) |
39
+ ```
40
+
41
+ > 注意: 按字母序插入(Ne 在 na 和 Oh 之间), 不要追加到表格末尾, 否则合并冲突概率高。
42
+
43
+ ### 第 4 步: 提交 PR
44
+
45
+ 1. 在 fork 仓库页面点 **Contribute → Open Pull Request**
46
+ 2. Base: `deepseek-ai/awesome-deepseek-agent:main` ← Compare: `你的fork:main`
47
+ 3. PR 标题建议: `Add NexForgeCLI integration guide (EN + zh-CN)`
48
+ 4. 描述里注明: 双语指南在一个 PR 内、README 表格按字母序插入
49
+
50
+ ## 已满足的 CONTRIBUTING.md 硬性要求
51
+
52
+ | 要求 | 状态 |
53
+ |------|------|
54
+ | 双语(英文 + 简体中文, 单 PR) | ✓ 两个文件同 PR |
55
+ | README 表格按字母序插入 | ✓ nanobot 与 Oh My Pi 之间 |
56
+ | 模型命名用新名 deepseek-v4-pro/flash | ✓ 全文无 v3 旧名 |
57
+ | 1M 上下文提及/配置 | ✓ context_window = 1000000 |
58
+ | max 思考档兼容 | ✓ auto 路由自动升级到 max |
59
+ | 不写降级 workaround | ✓ 无 |
60
+ | 配置字段真实存在 | ✓ 全部核实过代码 |
61
+ | 截图 | 未涉及 |
62
+
63
+ ## 注意事项
64
+
65
+ - 仓库托管在 **gitee**(https://gitee.com/Lighthorn/nexforgecli), PR 描述里说明即可, 不影响收录(README 表格中其他项目也有非 GitHub 托管的情况, 但多数为 GitHub; 若被要求 GitHub 镜像可再考虑)
66
+ - 若 PR 被要求修改, 在 fork 里改对应文件, PR 会自动更新
67
+ - 提交后把 PR 链接发我, 我可以帮你复核 diff