nexforge-cli 0.2.4__tar.gz → 0.2.5__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.2.4 → nexforge_cli-0.2.5}/PKG-INFO +1 -1
  2. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/pyproject.toml +1 -1
  3. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/src/nexforge/core/session.py +9 -0
  4. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/.gitignore +0 -0
  5. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/= +0 -0
  6. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/INSTALL.md +0 -0
  7. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/README.md +0 -0
  8. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/assets/icons/agent.svg +0 -0
  9. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/assets/icons/cost.svg +0 -0
  10. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/assets/icons/edit.svg +0 -0
  11. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/assets/icons/err.svg +0 -0
  12. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/assets/icons/file.svg +0 -0
  13. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/assets/icons/model.svg +0 -0
  14. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/assets/icons/ok.svg +0 -0
  15. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/assets/icons/read.svg +0 -0
  16. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/assets/icons/running.svg +0 -0
  17. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/assets/icons/search.svg +0 -0
  18. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/assets/icons/shell.svg +0 -0
  19. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/assets/icons/thinking.svg +0 -0
  20. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/assets/icons/web.svg +0 -0
  21. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/assets/icons/write.svg +0 -0
  22. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/config.example.toml +0 -0
  23. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/devlog/2026-07-07.md +0 -0
  24. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/doc//344/274/232/350/257/235/347/256/241/347/220/206.md" +0 -0
  25. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/doc//345/221/275/344/273/244/344/270/216/345/277/253/346/215/267/351/224/256.md" +0 -0
  26. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/doc//345/256/211/350/243/205/344/270/216/351/205/215/347/275/256.md" +0 -0
  27. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/doc//345/257/271/346/257/224/345/210/206/346/236/220.md" +0 -0
  28. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/doc//345/267/245/345/205/267/345/217/202/350/200/203.md" +0 -0
  29. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/doc//346/200/273/350/247/210.md" +0 -0
  30. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/doc//346/235/203/351/231/220/347/263/273/347/273/237.md" +0 -0
  31. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/doc//350/256/241/345/210/222/346/250/241/345/274/217.md" +0 -0
  32. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/doc//351/253/230/347/272/247/345/212/237/350/203/275.md" +0 -0
  33. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/scripts/publish.sh +0 -0
  34. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/scripts/smoke_provider.py +0 -0
  35. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/scripts/smoke_tui.py +0 -0
  36. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/src/nexforge/__init__.py +0 -0
  37. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/src/nexforge/__main__.py +0 -0
  38. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/src/nexforge/app.py +0 -0
  39. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/src/nexforge/cli.py +0 -0
  40. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/src/nexforge/config.py +0 -0
  41. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/src/nexforge/core/__init__.py +0 -0
  42. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/src/nexforge/core/agent.py +0 -0
  43. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/src/nexforge/core/jobs.py +0 -0
  44. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/src/nexforge/core/permissions.py +0 -0
  45. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/src/nexforge/core/router.py +0 -0
  46. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/src/nexforge/core/types.py +0 -0
  47. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/src/nexforge/icons.py +0 -0
  48. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/src/nexforge/mcp/__init__.py +0 -0
  49. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/src/nexforge/provider/__init__.py +0 -0
  50. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/src/nexforge/provider/balance.py +0 -0
  51. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/src/nexforge/provider/deepseek.py +0 -0
  52. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/src/nexforge/skills/loader.py +0 -0
  53. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/src/nexforge/store/__init__.py +0 -0
  54. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/src/nexforge/store/plan_store.py +0 -0
  55. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/src/nexforge/store/session_store.py +0 -0
  56. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/src/nexforge/theme.tcss +0 -0
  57. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/src/nexforge/tools/__init__.py +0 -0
  58. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/src/nexforge/tools/_paths.py +0 -0
  59. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/src/nexforge/tools/background.py +0 -0
  60. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/src/nexforge/tools/base.py +0 -0
  61. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/src/nexforge/tools/edit_file.py +0 -0
  62. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/src/nexforge/tools/fs_ops.py +0 -0
  63. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/src/nexforge/tools/git.py +0 -0
  64. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/src/nexforge/tools/list_dir.py +0 -0
  65. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/src/nexforge/tools/multi_edit.py +0 -0
  66. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/src/nexforge/tools/read_file.py +0 -0
  67. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/src/nexforge/tools/registry.py +0 -0
  68. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/src/nexforge/tools/search_content.py +0 -0
  69. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/src/nexforge/tools/search_files.py +0 -0
  70. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/src/nexforge/tools/shell.py +0 -0
  71. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/src/nexforge/tools/web.py +0 -0
  72. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/src/nexforge/tools/write_file.py +0 -0
  73. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/src/nexforge/ui/__init__.py +0 -0
  74. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/src/nexforge/ui/screens/__init__.py +0 -0
  75. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/src/nexforge/ui/screens/chat.py +0 -0
  76. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/src/nexforge/ui/widgets/__init__.py +0 -0
  77. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/src/nexforge/ui/widgets/apikey_modal.py +0 -0
  78. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/src/nexforge/ui/widgets/banner.py +0 -0
  79. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/src/nexforge/ui/widgets/confirm_modal.py +0 -0
  80. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/src/nexforge/ui/widgets/diff_modal.py +0 -0
  81. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/src/nexforge/ui/widgets/messages.py +0 -0
  82. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/src/nexforge/ui/widgets/mode_warning.py +0 -0
  83. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/src/nexforge/ui/widgets/multiline_modal.py +0 -0
  84. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/src/nexforge/ui/widgets/multiline_prompt.py +0 -0
  85. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/src/nexforge/ui/widgets/plan_sidebar.py +0 -0
  86. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/src/nexforge/ui/widgets/sidebar.py +0 -0
  87. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/src/nexforge/ui/widgets/statusbar.py +0 -0
  88. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/src/nexforge/web/__init__.py +0 -0
  89. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/src/nexforge/web/server.py +0 -0
  90. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/src/nexforge/web/static/index.html +0 -0
  91. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/tests/test_approval.py +0 -0
  92. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/tests/test_config.py +0 -0
  93. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/tests/test_icons.py +0 -0
  94. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/tests/test_m2_tools.py +0 -0
  95. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/tests/test_sidebar.py +0 -0
  96. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/tests/test_sidebar_actions.py +0 -0
  97. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/tests/test_tools.py +0 -0
  98. {nexforge_cli-0.2.4 → nexforge_cli-0.2.5}/tests/test_tui.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: nexforge-cli
3
- Version: 0.2.4
3
+ Version: 0.2.5
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.2.4"
7
+ version = "0.2.5"
8
8
  description = "NexForgeCLI — 一个面向 DeepSeek V4 的终端智能体(TUI + CLI 双模式)"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
@@ -31,6 +31,15 @@ class Session:
31
31
  self.messages.append({"role": "system", "content": self.system_prompt})
32
32
 
33
33
  def add_user(self, text: str) -> None:
34
+ # 中断恢复:若上一条 assistant 有未完成 tool_calls,补 tool 错误
35
+ if self.messages and self.messages[-1].get("role") == "assistant":
36
+ pending = self.messages[-1].get("tool_calls", [])
37
+ for tc in pending:
38
+ self.messages.append({
39
+ "role": "tool",
40
+ "tool_call_id": tc.get("id", ""),
41
+ "content": "已取消(用户中断)。",
42
+ })
34
43
  self.messages.append({"role": "user", "content": text})
35
44
 
36
45
  def add_assistant(self, msg: AssistantMessage) -> None:
File without changes
File without changes
File without changes
File without changes