nexforge-cli 0.1.0__tar.gz → 0.1.1__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 (98) hide show
  1. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/.gitignore +1 -0
  2. nexforge_cli-0.1.1/INSTALL.md +82 -0
  3. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/PKG-INFO +1 -1
  4. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/pyproject.toml +1 -1
  5. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/src/nexforge/ui/widgets/messages.py +5 -5
  6. nexforge_cli-0.1.0/PyPI-Recovery-Codes-NexTech_2026-2026-07-11T08_45_53.599616.txt +0 -8
  7. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/= +0 -0
  8. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/README.md +0 -0
  9. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/assets/icons/agent.svg +0 -0
  10. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/assets/icons/cost.svg +0 -0
  11. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/assets/icons/edit.svg +0 -0
  12. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/assets/icons/err.svg +0 -0
  13. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/assets/icons/file.svg +0 -0
  14. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/assets/icons/model.svg +0 -0
  15. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/assets/icons/ok.svg +0 -0
  16. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/assets/icons/read.svg +0 -0
  17. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/assets/icons/running.svg +0 -0
  18. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/assets/icons/search.svg +0 -0
  19. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/assets/icons/shell.svg +0 -0
  20. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/assets/icons/thinking.svg +0 -0
  21. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/assets/icons/web.svg +0 -0
  22. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/assets/icons/write.svg +0 -0
  23. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/config.example.toml +0 -0
  24. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/devlog/2026-07-07.md +0 -0
  25. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/doc//344/274/232/350/257/235/347/256/241/347/220/206.md" +0 -0
  26. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/doc//345/221/275/344/273/244/344/270/216/345/277/253/346/215/267/351/224/256.md" +0 -0
  27. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/doc//345/256/211/350/243/205/344/270/216/351/205/215/347/275/256.md" +0 -0
  28. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/doc//345/267/245/345/205/267/345/217/202/350/200/203.md" +0 -0
  29. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/doc//346/200/273/350/247/210.md" +0 -0
  30. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/doc//346/235/203/351/231/220/347/263/273/347/273/237.md" +0 -0
  31. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/doc//350/256/241/345/210/222/346/250/241/345/274/217.md" +0 -0
  32. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/doc//351/253/230/347/272/247/345/212/237/350/203/275.md" +0 -0
  33. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/scripts/publish.sh +0 -0
  34. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/scripts/smoke_provider.py +0 -0
  35. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/scripts/smoke_tui.py +0 -0
  36. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/src/nexforge/__init__.py +0 -0
  37. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/src/nexforge/__main__.py +0 -0
  38. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/src/nexforge/app.py +0 -0
  39. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/src/nexforge/cli.py +0 -0
  40. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/src/nexforge/config.py +0 -0
  41. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/src/nexforge/core/__init__.py +0 -0
  42. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/src/nexforge/core/agent.py +0 -0
  43. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/src/nexforge/core/jobs.py +0 -0
  44. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/src/nexforge/core/permissions.py +0 -0
  45. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/src/nexforge/core/router.py +0 -0
  46. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/src/nexforge/core/session.py +0 -0
  47. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/src/nexforge/core/types.py +0 -0
  48. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/src/nexforge/icons.py +0 -0
  49. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/src/nexforge/mcp/__init__.py +0 -0
  50. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/src/nexforge/provider/__init__.py +0 -0
  51. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/src/nexforge/provider/balance.py +0 -0
  52. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/src/nexforge/provider/deepseek.py +0 -0
  53. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/src/nexforge/skills/loader.py +0 -0
  54. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/src/nexforge/store/__init__.py +0 -0
  55. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/src/nexforge/store/plan_store.py +0 -0
  56. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/src/nexforge/store/session_store.py +0 -0
  57. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/src/nexforge/theme.tcss +0 -0
  58. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/src/nexforge/tools/__init__.py +0 -0
  59. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/src/nexforge/tools/_paths.py +0 -0
  60. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/src/nexforge/tools/background.py +0 -0
  61. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/src/nexforge/tools/base.py +0 -0
  62. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/src/nexforge/tools/edit_file.py +0 -0
  63. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/src/nexforge/tools/fs_ops.py +0 -0
  64. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/src/nexforge/tools/git.py +0 -0
  65. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/src/nexforge/tools/list_dir.py +0 -0
  66. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/src/nexforge/tools/multi_edit.py +0 -0
  67. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/src/nexforge/tools/read_file.py +0 -0
  68. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/src/nexforge/tools/registry.py +0 -0
  69. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/src/nexforge/tools/search_content.py +0 -0
  70. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/src/nexforge/tools/search_files.py +0 -0
  71. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/src/nexforge/tools/shell.py +0 -0
  72. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/src/nexforge/tools/web.py +0 -0
  73. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/src/nexforge/tools/write_file.py +0 -0
  74. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/src/nexforge/ui/__init__.py +0 -0
  75. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/src/nexforge/ui/screens/__init__.py +0 -0
  76. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/src/nexforge/ui/screens/chat.py +0 -0
  77. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/src/nexforge/ui/widgets/__init__.py +0 -0
  78. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/src/nexforge/ui/widgets/apikey_modal.py +0 -0
  79. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/src/nexforge/ui/widgets/banner.py +0 -0
  80. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/src/nexforge/ui/widgets/confirm_modal.py +0 -0
  81. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/src/nexforge/ui/widgets/diff_modal.py +0 -0
  82. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/src/nexforge/ui/widgets/mode_warning.py +0 -0
  83. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/src/nexforge/ui/widgets/multiline_modal.py +0 -0
  84. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/src/nexforge/ui/widgets/multiline_prompt.py +0 -0
  85. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/src/nexforge/ui/widgets/plan_sidebar.py +0 -0
  86. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/src/nexforge/ui/widgets/sidebar.py +0 -0
  87. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/src/nexforge/ui/widgets/statusbar.py +0 -0
  88. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/src/nexforge/web/__init__.py +0 -0
  89. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/src/nexforge/web/server.py +0 -0
  90. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/src/nexforge/web/static/index.html +0 -0
  91. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/tests/test_approval.py +0 -0
  92. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/tests/test_config.py +0 -0
  93. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/tests/test_icons.py +0 -0
  94. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/tests/test_m2_tools.py +0 -0
  95. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/tests/test_sidebar.py +0 -0
  96. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/tests/test_sidebar_actions.py +0 -0
  97. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/tests/test_tools.py +0 -0
  98. {nexforge_cli-0.1.0 → nexforge_cli-0.1.1}/tests/test_tui.py +0 -0
@@ -27,3 +27,4 @@ assets/icons/*.png
27
27
  .idea/
28
28
  .vscode/
29
29
  .DS_Store
30
+ PyPI-*.txt
@@ -0,0 +1,82 @@
1
+ # NexForgeCLI 安装指南
2
+
3
+ ## 环境要求
4
+
5
+ - Python **3.11+**
6
+ - 终端:Windows Terminal / macOS Terminal / Linux 任意终端
7
+ - 网络:需能访问 `api.deepseek.com`
8
+ - 可选:Git(仅 git 安装方式需要)
9
+
10
+ ## 方式一:Pip 安装(推荐)
11
+
12
+ ```bash
13
+ pip install nexforge-cli
14
+ nexforge
15
+ ```
16
+
17
+ 安装后运行 `nexforge`(或简写 `nf`)。
18
+
19
+ ## 方式二:Pip 安装开发版
20
+
21
+ ```bash
22
+ pip install git+https://gitee.com/Lighthorn/nexforgecli.git
23
+ nexforge
24
+ ```
25
+
26
+ ## 方式三:源码安装
27
+
28
+ ```bash
29
+ git clone https://gitee.com/Lighthorn/nexforgecli.git
30
+ cd nexforgecli
31
+ pip install -e .
32
+ nexforge
33
+ ```
34
+
35
+ ## 配置 API Key
36
+
37
+ ### 首次启动自动配置
38
+
39
+ 运行 `nexforge` 后会弹出 API Key 输入面板,直接粘贴 `sk-…` 即可。
40
+
41
+ ### 手动配置
42
+
43
+ ```bash
44
+ # 环境变量(每次有效)
45
+ export DEEPSEEK_API_KEY="sk-你的密钥"
46
+
47
+ # 或启动后在输入框输入
48
+ /key sk-你的密钥
49
+ ```
50
+
51
+ API Key 获取:[platform.deepseek.com/api_keys](https://platform.deepseek.com/api_keys)
52
+
53
+ ## 验证安装
54
+
55
+ ```bash
56
+ nexforge --help
57
+ ```
58
+
59
+ 看到 NexForgeCLI 配置信息即为安装成功。
60
+
61
+ ## 升级
62
+
63
+ ```bash
64
+ pip install --upgrade nexforge-cli
65
+ ```
66
+
67
+ ## 卸载
68
+
69
+ ```bash
70
+ pip uninstall nexforge-cli -y
71
+ ```
72
+
73
+ 配置文件和数据保留在 `~/.nexforge/` 和项目 `.nexforge/` 目录下,需手动删除。
74
+
75
+ ## 常见问题
76
+
77
+ | 问题 | 解决 |
78
+ |------|------|
79
+ | `nexforge: command not found` | Python Scripts 目录不在 PATH 中,用 `python -m nexforge` 代替 |
80
+ | `No module named 'nexforge'` | pip 安装未成功,检查 Python 版本 ≥3.11 |
81
+ | `ProviderError: 未找到 API Key` | 未配置 API Key,用 `/key` 或环境变量设置 |
82
+ | Windows 终端乱码 | 使用 Windows Terminal 或 Git Bash,避免 PowerShell |
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: nexforge-cli
3
- Version: 0.1.0
3
+ Version: 0.1.1
4
4
  Summary: NexForgeCLI — 一个面向 DeepSeek V4 的终端智能体(TUI + CLI 双模式)
5
5
  Project-URL: Homepage, https://gitee.com/Lighthorn/nexforgecli
6
6
  Author: NexForge
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "nexforge-cli"
7
- version = "0.1.0"
7
+ version = "0.1.1"
8
8
  description = "NexForgeCLI — 一个面向 DeepSeek V4 的终端智能体(TUI + CLI 双模式)"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
@@ -17,14 +17,14 @@ class SystemNote(Static):
17
17
 
18
18
  sym = icon("err") if error else icon("running")
19
19
  color = "red" if error else "#22D3EE"
20
- super().__init__(f"[{color}]{sym}[/] {escape(text)}")
20
+ super().__init__(f"[{color}]{sym}[/] {escape(text).replace("]", r"]")}")
21
21
 
22
22
 
23
23
  class UserMessage(Static):
24
24
  def __init__(self, text: str) -> None:
25
25
  from nexforge.icons import icon
26
26
 
27
- super().__init__(f"[b #6D5EF5]{icon('user')}[/] {escape(text)}")
27
+ super().__init__(f"[b #6D5EF5]{icon('user')}[/] {escape(text).replace("]", r"]")}")
28
28
 
29
29
 
30
30
  class ToolCard(Static):
@@ -39,7 +39,7 @@ class ToolCard(Static):
39
39
  from nexforge.icons import icon
40
40
 
41
41
  ic = icon(self._icon)
42
- self.update(f"[#22D3EE]{ic}[/] {escape(self._preview)} [dim]执行中…[/]")
42
+ self.update(f"[#22D3EE]{ic}[/] {escape(self._preview).replace("]", r"]")} [dim]执行中…[/]")
43
43
 
44
44
  def set_result(self, ok: bool, summary: str) -> None:
45
45
  from nexforge.icons import icon
@@ -47,8 +47,8 @@ class ToolCard(Static):
47
47
  mark = icon("ok") if ok else icon("err")
48
48
  color = "green" if ok else "red"
49
49
  self.update(
50
- f"[{color}]{mark}[/] [#22D3EE]{escape(self._preview)}[/] "
51
- f"[dim]{escape(summary)}[/]"
50
+ f"[{color}]{mark}[/] [#22D3EE]{escape(self._preview).replace("]", r"]")}[/] "
51
+ f"[dim]{escape(summary).replace("]", r"]")}[/]"
52
52
  )
53
53
 
54
54
 
@@ -1,8 +0,0 @@
1
- 25970f29e0085983
2
- d721cf8503654f96
3
- 0f14bb30cf902fb2
4
- 13df6f4f93bba3fc
5
- e38d3b20202f60c7
6
- b80d68356adcd775
7
- d3c307a60b88db50
8
- 2aec528903ab6bbe
File without changes
File without changes