fr-cli 2.2.2__tar.gz → 2.2.4__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 (84) hide show
  1. {fr_cli-2.2.2/fr_cli.egg-info → fr_cli-2.2.4}/PKG-INFO +3 -3
  2. {fr_cli-2.2.2 → fr_cli-2.2.4}/fr_cli/__init__.py +1 -1
  3. {fr_cli-2.2.2 → fr_cli-2.2.4}/fr_cli/core/llm.py +2 -1
  4. {fr_cli-2.2.2 → fr_cli-2.2.4}/fr_cli/main.py +2 -0
  5. {fr_cli-2.2.2 → fr_cli-2.2.4}/fr_cli/repl/commands.py +141 -5
  6. {fr_cli-2.2.2 → fr_cli-2.2.4/fr_cli.egg-info}/PKG-INFO +3 -3
  7. {fr_cli-2.2.2 → fr_cli-2.2.4}/fr_cli.egg-info/requires.txt +2 -2
  8. {fr_cli-2.2.2 → fr_cli-2.2.4}/pyproject.toml +3 -3
  9. {fr_cli-2.2.2 → fr_cli-2.2.4}/LICENSE +0 -0
  10. {fr_cli-2.2.2 → fr_cli-2.2.4}/MANIFEST.in +0 -0
  11. {fr_cli-2.2.2 → fr_cli-2.2.4}/README.md +0 -0
  12. {fr_cli-2.2.2 → fr_cli-2.2.4}/fr_cli/README.md +0 -0
  13. {fr_cli-2.2.2 → fr_cli-2.2.4}/fr_cli/WEAPON.MD +0 -0
  14. {fr_cli-2.2.2 → fr_cli-2.2.4}/fr_cli/addon/plugin.py +0 -0
  15. {fr_cli-2.2.2 → fr_cli-2.2.4}/fr_cli/agent/__init__.py +0 -0
  16. {fr_cli-2.2.2 → fr_cli-2.2.4}/fr_cli/agent/builtins/__init__.py +0 -0
  17. {fr_cli-2.2.2 → fr_cli-2.2.4}/fr_cli/agent/builtins/_utils.py +0 -0
  18. {fr_cli-2.2.2 → fr_cli-2.2.4}/fr_cli/agent/builtins/db.py +0 -0
  19. {fr_cli-2.2.2 → fr_cli-2.2.4}/fr_cli/agent/builtins/local.py +0 -0
  20. {fr_cli-2.2.2 → fr_cli-2.2.4}/fr_cli/agent/builtins/rag.py +0 -0
  21. {fr_cli-2.2.2 → fr_cli-2.2.4}/fr_cli/agent/builtins/rag_watcher_daemon.py +0 -0
  22. {fr_cli-2.2.2 → fr_cli-2.2.4}/fr_cli/agent/builtins/remote.py +0 -0
  23. {fr_cli-2.2.2 → fr_cli-2.2.4}/fr_cli/agent/builtins/spider.py +0 -0
  24. {fr_cli-2.2.2 → fr_cli-2.2.4}/fr_cli/agent/client.py +0 -0
  25. {fr_cli-2.2.2 → fr_cli-2.2.4}/fr_cli/agent/executor.py +0 -0
  26. {fr_cli-2.2.2 → fr_cli-2.2.4}/fr_cli/agent/generator.py +0 -0
  27. {fr_cli-2.2.2 → fr_cli-2.2.4}/fr_cli/agent/manager.py +0 -0
  28. {fr_cli-2.2.2 → fr_cli-2.2.4}/fr_cli/agent/master.py +0 -0
  29. {fr_cli-2.2.2 → fr_cli-2.2.4}/fr_cli/agent/master_prompt.py +0 -0
  30. {fr_cli-2.2.2 → fr_cli-2.2.4}/fr_cli/agent/remote.py +0 -0
  31. {fr_cli-2.2.2 → fr_cli-2.2.4}/fr_cli/agent/server.py +0 -0
  32. {fr_cli-2.2.2 → fr_cli-2.2.4}/fr_cli/agent/workflow.py +0 -0
  33. {fr_cli-2.2.2 → fr_cli-2.2.4}/fr_cli/breakthrough/update.py +0 -0
  34. {fr_cli-2.2.2 → fr_cli-2.2.4}/fr_cli/command/__init__.py +0 -0
  35. {fr_cli-2.2.2 → fr_cli-2.2.4}/fr_cli/command/executor.py +0 -0
  36. {fr_cli-2.2.2 → fr_cli-2.2.4}/fr_cli/command/registry.py +0 -0
  37. {fr_cli-2.2.2 → fr_cli-2.2.4}/fr_cli/command/security.py +0 -0
  38. {fr_cli-2.2.2 → fr_cli-2.2.4}/fr_cli/conf/config.py +0 -0
  39. {fr_cli-2.2.2 → fr_cli-2.2.4}/fr_cli/conf/wizard.py +0 -0
  40. {fr_cli-2.2.2 → fr_cli-2.2.4}/fr_cli/core/chat.py +0 -0
  41. {fr_cli-2.2.2 → fr_cli-2.2.4}/fr_cli/core/core.py +0 -0
  42. {fr_cli-2.2.2 → fr_cli-2.2.4}/fr_cli/core/intent.py +0 -0
  43. {fr_cli-2.2.2 → fr_cli-2.2.4}/fr_cli/core/recommender.py +0 -0
  44. {fr_cli-2.2.2 → fr_cli-2.2.4}/fr_cli/core/stream.py +0 -0
  45. {fr_cli-2.2.2 → fr_cli-2.2.4}/fr_cli/core/sysmon.py +0 -0
  46. {fr_cli-2.2.2 → fr_cli-2.2.4}/fr_cli/core/thinking.py +0 -0
  47. {fr_cli-2.2.2 → fr_cli-2.2.4}/fr_cli/gatekeeper/__init__.py +0 -0
  48. {fr_cli-2.2.2 → fr_cli-2.2.4}/fr_cli/gatekeeper/daemon.py +0 -0
  49. {fr_cli-2.2.2 → fr_cli-2.2.4}/fr_cli/gatekeeper/manager.py +0 -0
  50. {fr_cli-2.2.2 → fr_cli-2.2.4}/fr_cli/lang/i18n.py +0 -0
  51. {fr_cli-2.2.2 → fr_cli-2.2.4}/fr_cli/memory/context.py +0 -0
  52. {fr_cli-2.2.2 → fr_cli-2.2.4}/fr_cli/memory/history.py +0 -0
  53. {fr_cli-2.2.2 → fr_cli-2.2.4}/fr_cli/memory/session.py +0 -0
  54. {fr_cli-2.2.2 → fr_cli-2.2.4}/fr_cli/repl/__init__.py +0 -0
  55. {fr_cli-2.2.2 → fr_cli-2.2.4}/fr_cli/security/security.py +0 -0
  56. {fr_cli-2.2.2 → fr_cli-2.2.4}/fr_cli/ui/ui.py +0 -0
  57. {fr_cli-2.2.2 → fr_cli-2.2.4}/fr_cli/weapon/cron.py +0 -0
  58. {fr_cli-2.2.2 → fr_cli-2.2.4}/fr_cli/weapon/dataframe.py +0 -0
  59. {fr_cli-2.2.2 → fr_cli-2.2.4}/fr_cli/weapon/disk.py +0 -0
  60. {fr_cli-2.2.2 → fr_cli-2.2.4}/fr_cli/weapon/fs.py +0 -0
  61. {fr_cli-2.2.2 → fr_cli-2.2.4}/fr_cli/weapon/launcher.py +0 -0
  62. {fr_cli-2.2.2 → fr_cli-2.2.4}/fr_cli/weapon/loader.py +0 -0
  63. {fr_cli-2.2.2 → fr_cli-2.2.4}/fr_cli/weapon/mail.py +0 -0
  64. {fr_cli-2.2.2 → fr_cli-2.2.4}/fr_cli/weapon/mcp.py +0 -0
  65. {fr_cli-2.2.2 → fr_cli-2.2.4}/fr_cli/weapon/vision.py +0 -0
  66. {fr_cli-2.2.2 → fr_cli-2.2.4}/fr_cli/weapon/web.py +0 -0
  67. {fr_cli-2.2.2 → fr_cli-2.2.4}/fr_cli.egg-info/SOURCES.txt +0 -0
  68. {fr_cli-2.2.2 → fr_cli-2.2.4}/fr_cli.egg-info/dependency_links.txt +0 -0
  69. {fr_cli-2.2.2 → fr_cli-2.2.4}/fr_cli.egg-info/entry_points.txt +0 -0
  70. {fr_cli-2.2.2 → fr_cli-2.2.4}/fr_cli.egg-info/top_level.txt +0 -0
  71. {fr_cli-2.2.2 → fr_cli-2.2.4}/setup.cfg +0 -0
  72. {fr_cli-2.2.2 → fr_cli-2.2.4}/tests/test_agent_client.py +0 -0
  73. {fr_cli-2.2.2 → fr_cli-2.2.4}/tests/test_agent_server.py +0 -0
  74. {fr_cli-2.2.2 → fr_cli-2.2.4}/tests/test_ai_save_file_with_verify.py +0 -0
  75. {fr_cli-2.2.2 → fr_cli-2.2.4}/tests/test_all.py +0 -0
  76. {fr_cli-2.2.2 → fr_cli-2.2.4}/tests/test_auto_session.py +0 -0
  77. {fr_cli-2.2.2 → fr_cli-2.2.4}/tests/test_builtins.py +0 -0
  78. {fr_cli-2.2.2 → fr_cli-2.2.4}/tests/test_dataframe.py +0 -0
  79. {fr_cli-2.2.2 → fr_cli-2.2.4}/tests/test_gatekeeper.py +0 -0
  80. {fr_cli-2.2.2 → fr_cli-2.2.4}/tests/test_integration.py +0 -0
  81. {fr_cli-2.2.2 → fr_cli-2.2.4}/tests/test_intent_classification.py +0 -0
  82. {fr_cli-2.2.2 → fr_cli-2.2.4}/tests/test_launcher.py +0 -0
  83. {fr_cli-2.2.2 → fr_cli-2.2.4}/tests/test_master_agent.py +0 -0
  84. {fr_cli-2.2.2 → fr_cli-2.2.4}/tests/test_structured_tools.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fr-cli
3
- Version: 2.2.2
3
+ Version: 2.2.4
4
4
  Summary: 凡人打字机 - 支持多模型(Zhipu/DeepSeek/Kimi/Qwen/StepFun/MiniMax/Spark)的终极全能终端工具
5
5
  Author: FANREN CLI Author
6
6
  License-Expression: MIT
@@ -37,7 +37,7 @@ Requires-Dist: pyodbc>=4.0.0; extra == "db"
37
37
  Requires-Dist: oracledb>=1.3.0; extra == "db"
38
38
  Provides-Extra: rag
39
39
  Requires-Dist: chromadb>=0.4.0; extra == "rag"
40
- Requires-Dist: sentence-transformers>=2.2.2; extra == "rag"
40
+ Requires-Dist: sentence-transformers>=2.2.4; extra == "rag"
41
41
  Provides-Extra: remote
42
42
  Requires-Dist: paramiko>=3.0.0; extra == "remote"
43
43
  Provides-Extra: spider
@@ -56,7 +56,7 @@ Requires-Dist: psycopg2-binary>=2.9.0; extra == "all"
56
56
  Requires-Dist: pyodbc>=4.0.0; extra == "all"
57
57
  Requires-Dist: oracledb>=1.3.0; extra == "all"
58
58
  Requires-Dist: chromadb>=0.4.0; extra == "all"
59
- Requires-Dist: sentence-transformers>=2.2.2; extra == "all"
59
+ Requires-Dist: sentence-transformers>=2.2.4; extra == "all"
60
60
  Requires-Dist: paramiko>=3.0.0; extra == "all"
61
61
  Requires-Dist: selenium>=4.10.0; extra == "all"
62
62
  Requires-Dist: bypy; extra == "all"
@@ -1,4 +1,4 @@
1
1
  """
2
2
  凡人打字机 - 基于智谱AI的终极全能终端工具
3
3
  """
4
- __version__ = "2.2.2"
4
+ __version__ = "2.2.4"
@@ -146,7 +146,8 @@ def create_llm_client(cfg: dict):
146
146
 
147
147
  info = _PROVIDERS.get(provider, _PROVIDERS["zhipu"])
148
148
  client_class = info["client_class"]
149
- base_url = info.get("base_url")
149
+ # 优先使用用户自定义的 base_url,其次使用内置默认
150
+ base_url = pcfg.get("base_url") or info.get("base_url")
150
151
 
151
152
  kwargs = {"api_key": api_key}
152
153
  if base_url:
@@ -89,6 +89,7 @@ from fr_cli.repl.commands import (
89
89
  _cmd_read_excel,
90
90
  _cmd_read_csv,
91
91
  _cmd_master,
92
+ _cmd_providers,
92
93
  _cmd_mcp_list,
93
94
  _cmd_mcp_add,
94
95
  _cmd_mcp_del,
@@ -147,6 +148,7 @@ _COMMAND_ROUTES = {
147
148
  "/read_excel": _cmd_read_excel,
148
149
  "/read_csv": _cmd_read_csv,
149
150
  "/master": _cmd_master,
151
+ "/providers": _cmd_providers,
150
152
  "/mcp_list": _cmd_mcp_list,
151
153
  "/mcp_add": _cmd_mcp_add,
152
154
  "/mcp_del": _cmd_mcp_del,
@@ -121,13 +121,19 @@ def _cmd_model(state, parts):
121
121
  else:
122
122
  print(f"{RED}❌ 无效的提供商或模型: {arg1}{RESET}")
123
123
  else:
124
- # 显示当前道统与可用模型
125
- from fr_cli.core.llm import list_providers, get_provider_info
124
+ # 显示当前道统与可用模型及 key 配置状态
125
+ from fr_cli.core.llm import list_providers
126
126
  print(f"{CYAN}🧠 当前道统: [{state.provider}] {state.model_name}{RESET}")
127
127
  print(f"\n{DIM}可用道统与默认模型:{RESET}")
128
+ providers_cfg = state.cfg.get("providers", {})
128
129
  for p in list_providers():
129
130
  marker = " 👈 当前" if p["id"] == state.provider else ""
130
- print(f" {CYAN}{p['id']}{RESET} {p['name']}{DIM} (默认: {p['default_model']}){RESET}{marker}")
131
+ pcfg = providers_cfg.get(p["id"], {})
132
+ has_key = bool(pcfg.get("key"))
133
+ if not has_key and p["id"] == "zhipu":
134
+ has_key = bool(state.cfg.get("key", ""))
135
+ key_status = f"{GREEN}✅ 已配置{RESET}" if has_key else f"{RED}❌ 未配置{RESET}"
136
+ print(f" {CYAN}{p['id']}{RESET} — {p['name']}{DIM} (默认: {p['default_model']}){RESET} {key_status}{marker}")
131
137
  print(f"\n{DIM}用法:{RESET}")
132
138
  print(f" /model <模型名> — 切换当前道统下的模型")
133
139
  print(f" /model <道统>:<模型名> — 同时切换道统和模型")
@@ -136,12 +142,142 @@ def _cmd_model(state, parts):
136
142
 
137
143
 
138
144
  def _cmd_key(state, parts):
145
+ """
146
+ 设置 API Key
147
+ 用法:
148
+ /key <key> — 为当前道统设置 key
149
+ /key <道统> <key> — 为指定道统设置 key
150
+ """
139
151
  arg1 = parts[1] if len(parts) > 1 else ""
140
- if arg1:
152
+ arg2 = parts[2] if len(parts) > 2 else ""
153
+ if arg1 and arg2:
154
+ # /key <provider> <key>
155
+ target_provider = arg1
156
+ from fr_cli.core.llm import get_provider_info
157
+ if not get_provider_info(target_provider):
158
+ print(f"{RED}❌ 无效道统: {target_provider}{RESET}")
159
+ return False
160
+ # 临时切到目标道统设置 key,再切回来
161
+ original_provider = state.provider
162
+ state.update_provider(target_provider)
163
+ state.update_key(arg2)
164
+ # 如果原来不是目标道统,切回去
165
+ if original_provider != target_provider:
166
+ state.update_provider(original_provider)
167
+ print(f"{GREEN}✅ [{target_provider}] API Key 已更新{RESET}")
168
+ elif arg1:
169
+ # /key <key>
141
170
  state.update_key(arg1)
142
171
  print(f"{GREEN}✅ [{state.provider}] API Key 已更新{RESET}")
143
172
  else:
144
- print(f"{YELLOW}⚠️ 用法: /key <API密钥> (为当前道统 [{state.provider}] 设置密钥){RESET}")
173
+ print(f"{YELLOW}⚠️ 用法:{RESET}")
174
+ print(f" /key <API密钥> — 为当前道统 [{state.provider}] 设置密钥")
175
+ print(f" /key <道统> <API密钥> — 为指定道统设置密钥")
176
+ return False
177
+
178
+
179
+ def _cmd_providers(state, parts):
180
+ """
181
+ 多模型道统配置管理
182
+ 用法:
183
+ /providers — 查看所有道统配置
184
+ /providers add <道统> <key> [模型] — 添加/更新道统配置
185
+ /providers del <道统> — 删除道统配置
186
+ /providers use <道统> — 切换到指定道统
187
+ """
188
+ sub = parts[1] if len(parts) > 1 else ""
189
+ arg1 = parts[2] if len(parts) > 2 else ""
190
+ arg2 = parts[3] if len(parts) > 3 else ""
191
+
192
+ providers_cfg = state.cfg.setdefault("providers", {})
193
+
194
+ if not sub or sub == "list":
195
+ from fr_cli.core.llm import list_providers, get_provider_info
196
+ print(f"{CYAN}📜 道统配置总览{RESET}")
197
+ for p in list_providers():
198
+ pcfg = providers_cfg.get(p["id"], {})
199
+ has_key = bool(pcfg.get("key"))
200
+ if not has_key and p["id"] == "zhipu":
201
+ has_key = bool(state.cfg.get("key", ""))
202
+ key_status = f"{GREEN}✅{RESET}" if has_key else f"{RED}❌{RESET}"
203
+ model = pcfg.get("model", p["default_model"])
204
+ info = get_provider_info(p["id"])
205
+ base_url = pcfg.get("base_url") or info.get("base_url", "默认")
206
+ active = f" {YELLOW}👈 当前使用{RESET}" if p["id"] == state.provider else ""
207
+ print(f"\n {key_status} {CYAN}{p['id']}{RESET} — {p['name']}{active}")
208
+ print(f" 模型: {DIM}{model}{RESET}")
209
+ print(f" 接口: {DIM}{base_url}{RESET}")
210
+ if has_key:
211
+ raw_key = pcfg.get("key", state.cfg.get("key", ""))
212
+ key_display = raw_key[:8] + "****" if len(raw_key) > 8 else raw_key
213
+ print(f" Key: {DIM}{key_display}{RESET}")
214
+ print(f"\n{DIM}用法:{RESET}")
215
+ print(f" /providers add <道统> <key> [模型] — 添加/更新道统配置")
216
+ print(f" /providers del <道统> — 删除道统配置")
217
+ print(f" /providers use <道统> — 切换到指定道统")
218
+ return False
219
+
220
+ if sub == "add":
221
+ if not arg1 or not arg2:
222
+ print(f"{RED}❌ 用法: /providers add <道统> <key> [模型]{RESET}")
223
+ return False
224
+ provider_id = arg1
225
+ from fr_cli.core.llm import get_provider_info
226
+ info = get_provider_info(provider_id)
227
+ if not info:
228
+ print(f"{RED}❌ 无效道统: {provider_id}{RESET}")
229
+ return False
230
+ pcfg = providers_cfg.setdefault(provider_id, {})
231
+ pcfg["key"] = arg2
232
+ model = parts[4] if len(parts) > 4 else info["default_model"]
233
+ pcfg["model"] = model
234
+ # 支持自定义 base_url: /providers add <provider> <key> [model] --base-url <url>
235
+ for i, token in enumerate(parts):
236
+ if token in ("--base-url", "--base_url") and i + 1 < len(parts):
237
+ pcfg["base_url"] = parts[i + 1]
238
+ break
239
+ state.cfg["providers"] = providers_cfg
240
+ state.save_cfg()
241
+ extra = f" 自定义接口={pcfg.get('base_url')}" if pcfg.get("base_url") else ""
242
+ print(f"{GREEN}✅ [{provider_id}] 配置已更新: 模型={model}{extra}{RESET}")
243
+ return False
244
+
245
+ if sub == "del":
246
+ if not arg1:
247
+ print(f"{RED}❌ 用法: /providers del <道统>{RESET}")
248
+ return False
249
+ if arg1 in providers_cfg:
250
+ del providers_cfg[arg1]
251
+ state.cfg["providers"] = providers_cfg
252
+ state.save_cfg()
253
+ print(f"{GREEN}✅ [{arg1}] 配置已删除{RESET}")
254
+ else:
255
+ print(f"{YELLOW}⚠️ [{arg1}] 无配置可删除{RESET}")
256
+ return False
257
+
258
+ if sub == "use":
259
+ if not arg1:
260
+ print(f"{RED}❌ 用法: /providers use <道统>{RESET}")
261
+ return False
262
+ ok = state.update_provider(arg1)
263
+ if ok:
264
+ print(f"{GREEN}✅ 已切换到: [{state.provider}] {state.model_name}{RESET}")
265
+ # 检查新道统是否已配置 API Key
266
+ pcfg = providers_cfg.get(state.provider, {})
267
+ has_key = bool(pcfg.get("key"))
268
+ if not has_key and state.provider == "zhipu":
269
+ has_key = bool(state.cfg.get("key", ""))
270
+ if not has_key:
271
+ print(f"{YELLOW}⚠️ [{state.provider}] 尚未配置 API Key{RESET}")
272
+ k = input(f"👉 请输入 [{state.provider}] 的 API Key: ").strip()
273
+ if k:
274
+ state.update_key(k)
275
+ print(f"{GREEN}✅ [{state.provider}] API Key 已保存{RESET}")
276
+ else:
277
+ print(f"{RED}❌ 无效道统: {arg1}{RESET}")
278
+ return False
279
+
280
+ print(f"{RED}❌ 未知子命令: {sub}{RESET}")
145
281
  return False
146
282
 
147
283
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fr-cli
3
- Version: 2.2.2
3
+ Version: 2.2.4
4
4
  Summary: 凡人打字机 - 支持多模型(Zhipu/DeepSeek/Kimi/Qwen/StepFun/MiniMax/Spark)的终极全能终端工具
5
5
  Author: FANREN CLI Author
6
6
  License-Expression: MIT
@@ -37,7 +37,7 @@ Requires-Dist: pyodbc>=4.0.0; extra == "db"
37
37
  Requires-Dist: oracledb>=1.3.0; extra == "db"
38
38
  Provides-Extra: rag
39
39
  Requires-Dist: chromadb>=0.4.0; extra == "rag"
40
- Requires-Dist: sentence-transformers>=2.2.2; extra == "rag"
40
+ Requires-Dist: sentence-transformers>=2.2.4; extra == "rag"
41
41
  Provides-Extra: remote
42
42
  Requires-Dist: paramiko>=3.0.0; extra == "remote"
43
43
  Provides-Extra: spider
@@ -56,7 +56,7 @@ Requires-Dist: psycopg2-binary>=2.9.0; extra == "all"
56
56
  Requires-Dist: pyodbc>=4.0.0; extra == "all"
57
57
  Requires-Dist: oracledb>=1.3.0; extra == "all"
58
58
  Requires-Dist: chromadb>=0.4.0; extra == "all"
59
- Requires-Dist: sentence-transformers>=2.2.2; extra == "all"
59
+ Requires-Dist: sentence-transformers>=2.2.4; extra == "all"
60
60
  Requires-Dist: paramiko>=3.0.0; extra == "all"
61
61
  Requires-Dist: selenium>=4.10.0; extra == "all"
62
62
  Requires-Dist: bypy; extra == "all"
@@ -11,7 +11,7 @@ psycopg2-binary>=2.9.0
11
11
  pyodbc>=4.0.0
12
12
  oracledb>=1.3.0
13
13
  chromadb>=0.4.0
14
- sentence-transformers>=2.2.2
14
+ sentence-transformers>=2.2.4
15
15
  paramiko>=3.0.0
16
16
  selenium>=4.10.0
17
17
  bypy
@@ -44,7 +44,7 @@ watchdog>=3.0.0
44
44
 
45
45
  [rag]
46
46
  chromadb>=0.4.0
47
- sentence-transformers>=2.2.2
47
+ sentence-transformers>=2.2.4
48
48
 
49
49
  [remote]
50
50
  paramiko>=3.0.0
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "fr-cli"
7
- version = "2.2.2"
7
+ version = "2.2.4"
8
8
  description = "凡人打字机 - 支持多模型(Zhipu/DeepSeek/Kimi/Qwen/StepFun/MiniMax/Spark)的终极全能终端工具"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.8"
@@ -38,7 +38,7 @@ dependencies = [
38
38
  [project.optional-dependencies]
39
39
  data = ["pandas>=1.5.0", "openpyxl>=3.0.0"]
40
40
  db = ["pymysql>=1.0.0", "psycopg2-binary>=2.9.0", "pyodbc>=4.0.0", "oracledb>=1.3.0"]
41
- rag = ["chromadb>=0.4.0", "sentence-transformers>=2.2.2"]
41
+ rag = ["chromadb>=0.4.0", "sentence-transformers>=2.2.4"]
42
42
  remote = ["paramiko>=3.0.0"]
43
43
  spider = ["selenium>=4.10.0"]
44
44
  cloud = ["bypy", "aligo", "msal"]
@@ -46,7 +46,7 @@ monitor = ["watchdog>=3.0.0"]
46
46
  all = [
47
47
  "pandas>=1.5.0", "openpyxl>=3.0.0",
48
48
  "pymysql>=1.0.0", "psycopg2-binary>=2.9.0", "pyodbc>=4.0.0", "oracledb>=1.3.0",
49
- "chromadb>=0.4.0", "sentence-transformers>=2.2.2",
49
+ "chromadb>=0.4.0", "sentence-transformers>=2.2.4",
50
50
  "paramiko>=3.0.0",
51
51
  "selenium>=4.10.0",
52
52
  "bypy", "aligo", "msal",
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes