jarvis-ai-assistant 0.3.2__py3-none-any.whl → 0.3.3__py3-none-any.whl

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.
@@ -255,6 +255,15 @@ class BasePlatform(ABC):
255
255
  """Get env default values"""
256
256
  return {}
257
257
 
258
+ @classmethod
259
+ def get_env_config_guide(cls) -> Dict[str, str]:
260
+ """Get environment variable configuration guide
261
+
262
+ Returns:
263
+ Dict[str, str]: A dictionary mapping env key names to their configuration instructions
264
+ """
265
+ return {}
266
+
258
267
  def set_suppress_output(self, suppress: bool):
259
268
  """Set whether to suppress output"""
260
269
  self.suppress_output = suppress
@@ -405,3 +405,23 @@ class KimiModel(BasePlatform):
405
405
  List[str]: 环境变量键的列表
406
406
  """
407
407
  return ["KIMI_API_KEY"]
408
+
409
+ @classmethod
410
+ def get_env_config_guide(cls) -> Dict[str, str]:
411
+ """
412
+ 获取环境变量配置指导
413
+
414
+ 返回:
415
+ Dict[str, str]: 环境变量名到配置指导的映射
416
+ """
417
+ return {
418
+ "KIMI_API_KEY": (
419
+ "1. 登录 Kimi 网页版: https://kimi.moonshot.cn/\n"
420
+ "2. 打开浏览器开发者工具 (F12)\n"
421
+ '3. 切换到"网络"(Network)标签页\n'
422
+ "4. 在 Kimi 中发送一条消息\n"
423
+ "5. 找到 stream 请求\n"
424
+ '6. 在"请求标头"中找到 authorization 字段\n'
425
+ "7. 复制 Bearer 后面的 API Key 部分"
426
+ )
427
+ }
@@ -222,6 +222,33 @@ class OpenAIModel(BasePlatform):
222
222
  """
223
223
  return ["OPENAI_API_KEY", "OPENAI_API_BASE"]
224
224
 
225
+ @classmethod
226
+ def get_env_config_guide(cls) -> Dict[str, str]:
227
+ """
228
+ 获取环境变量配置指导
229
+
230
+ 返回:
231
+ Dict[str, str]: 环境变量名到配置指导的映射
232
+ """
233
+ return {
234
+ "OPENAI_API_KEY": (
235
+ "请输入您的 OpenAI API Key:\n"
236
+ "获取方式一(官方):\n"
237
+ "1. 登录 OpenAI 平台: https://platform.openai.com/\n"
238
+ "2. 进入 API Keys 页面\n"
239
+ "3. 创建新的 API Key 或使用现有的\n"
240
+ "4. 复制 API Key (以 sk- 开头)\n"
241
+ "\n获取方式二(第三方代理):\n"
242
+ "如果使用第三方代理服务,请从代理服务商处获取 API Key"
243
+ ),
244
+ "OPENAI_API_BASE": (
245
+ "请输入 API Base URL:\n"
246
+ "- 官方 API: https://api.openai.com/v1\n"
247
+ "- 如使用代理或第三方服务,请输入对应的 Base URL\n"
248
+ "- 例如: https://your-proxy.com/v1"
249
+ ),
250
+ }
251
+
225
252
  @classmethod
226
253
  def get_env_defaults(cls) -> Dict[str, str]:
227
254
  """
@@ -567,3 +567,22 @@ class TongyiPlatform(BasePlatform):
567
567
  List[str]: 环境变量键的列表
568
568
  """
569
569
  return ["TONGYI_COOKIES"]
570
+
571
+ @classmethod
572
+ def get_env_config_guide(cls) -> Dict[str, str]:
573
+ """
574
+ 获取环境变量配置指导
575
+
576
+ 返回:
577
+ Dict[str, str]: 环境变量名到配置指导的映射
578
+ """
579
+ return {
580
+ "TONGYI_COOKIES": (
581
+ "1. 登录通义千问网页版: https://tongyi.aliyun.com/\n"
582
+ "2. 打开浏览器开发者工具 (F12)\n"
583
+ '3. 切换到"网络"(Network)标签页\n'
584
+ "4. 刷新页面或发送一条消息\n"
585
+ "5. 找到 conversation 请求或任意发往 api.tongyi.com 的请求\n"
586
+ '6. 在"请求标头"中复制完整的 Cookie 值'
587
+ )
588
+ }
@@ -633,3 +633,21 @@ class YuanbaoPlatform(BasePlatform):
633
633
  List[str]: 环境变量键的列表
634
634
  """
635
635
  return ["YUANBAO_COOKIES"]
636
+
637
+ @classmethod
638
+ def get_env_config_guide(cls) -> Dict[str, str]:
639
+ """
640
+ 获取环境变量配置指导
641
+
642
+ 返回:
643
+ Dict[str, str]: 环境变量名到配置指导的映射
644
+ """
645
+ return {
646
+ "YUANBAO_COOKIES": (
647
+ "1. 登录腾讯元宝网页版: https://yuanbao.tencent.com/\n"
648
+ "2. 打开浏览器开发者工具 (F12)\n"
649
+ '3. 切换到"网络"(Network)标签页\n'
650
+ "4. 刷新页面,找到任意一个发往 yuanbao.tencent.com 的请求\n"
651
+ '5. 在"请求标头"中复制完整的 Cookie 值'
652
+ )
653
+ }
@@ -119,8 +119,14 @@ def chat_with_model(
119
119
  PrettyOutput.print("检测到空输入,退出聊天", OutputType.INFO)
120
120
  break
121
121
 
122
+ # Parse command and arguments
123
+ stripped_input = user_input.strip()
124
+ parts = stripped_input.split(None, 1)
125
+ command = parts[0] if parts else ""
126
+ args = parts[1] if len(parts) > 1 else ""
127
+
122
128
  # Check if it is a clear session command
123
- if user_input.strip() == "/clear":
129
+ if command == "/clear":
124
130
  try:
125
131
  platform.reset() # type: ignore[no-untyped-call] # type: ignore[no-untyped-call] # type: ignore[no-untyped-call]
126
132
  platform.set_model_name(model_name) # Reinitialize session
@@ -131,9 +137,9 @@ def chat_with_model(
131
137
  continue
132
138
 
133
139
  # Check if it is an upload command
134
- if user_input.strip().startswith("/upload"):
140
+ if command == "/upload":
135
141
  try:
136
- file_path = user_input.strip()[8:].strip()
142
+ file_path = args
137
143
  if not file_path:
138
144
  PrettyOutput.print(
139
145
  '请指定要上传的文件路径,例如: /upload /path/to/file 或 /upload "/path/with spaces/file"',
@@ -161,9 +167,9 @@ def chat_with_model(
161
167
  continue
162
168
 
163
169
  # Check if it is a save command
164
- if user_input.strip().startswith("/save"):
170
+ if command == "/save":
165
171
  try:
166
- file_path = user_input.strip()[5:].strip()
172
+ file_path = args
167
173
  if not file_path:
168
174
  PrettyOutput.print(
169
175
  "请指定保存文件名,例如: /save last_message.txt",
@@ -192,9 +198,9 @@ def chat_with_model(
192
198
  continue
193
199
 
194
200
  # Check if it is a saveall command
195
- if user_input.strip().startswith("/saveall"):
201
+ if command == "/saveall":
196
202
  try:
197
- file_path = user_input.strip()[8:].strip()
203
+ file_path = args
198
204
  if not file_path:
199
205
  PrettyOutput.print(
200
206
  "请指定保存文件名,例如: /saveall all_conversations.txt",
@@ -223,9 +229,9 @@ def chat_with_model(
223
229
  continue
224
230
 
225
231
  # Check if it is a save_session command
226
- if user_input.strip().startswith("/save_session"):
232
+ if command == "/save_session":
227
233
  try:
228
- file_path = user_input.strip()[14:].strip()
234
+ file_path = args
229
235
  if not file_path:
230
236
  PrettyOutput.print(
231
237
  "请指定保存会话的文件名,例如: /save_session session.json",
@@ -250,9 +256,9 @@ def chat_with_model(
250
256
  continue
251
257
 
252
258
  # Check if it is a load_session command
253
- if user_input.strip().startswith("/load_session"):
259
+ if command == "/load_session":
254
260
  try:
255
- file_path = user_input.strip()[14:].strip()
261
+ file_path = args
256
262
  if not file_path:
257
263
  PrettyOutput.print(
258
264
  "请指定加载会话的文件名,例如: /load_session session.json",
@@ -278,18 +284,18 @@ def chat_with_model(
278
284
  continue
279
285
 
280
286
  # Check if it is a shell command
281
- if user_input.strip().startswith("/shell"):
287
+ if command == "/shell":
282
288
  try:
283
- command = user_input.strip()[6:].strip()
284
- if not command:
289
+ shell_command = args
290
+ if not shell_command:
285
291
  PrettyOutput.print(
286
292
  "请指定要执行的shell命令,例如: /shell ls -l",
287
293
  OutputType.WARNING,
288
294
  )
289
295
  continue
290
296
 
291
- PrettyOutput.print(f"执行命令: {command}", OutputType.INFO)
292
- return_code = os.system(command)
297
+ PrettyOutput.print(f"执行命令: {shell_command}", OutputType.INFO)
298
+ return_code = os.system(shell_command)
293
299
  if return_code == 0:
294
300
  PrettyOutput.print("命令执行完成", OutputType.SUCCESS)
295
301
  else:
@@ -236,20 +236,26 @@ def get_short_term_memories(tags: Optional[List[str]] = None) -> List[Dict[str,
236
236
  tags: 用于过滤的标签列表(可选)
237
237
 
238
238
  返回:
239
- List[Dict[str, Any]]: 符合条件的短期记忆列表
239
+ List[Dict[str, Any]]: 符合条件的短期记忆列表,按创建时间降序排列
240
240
  """
241
241
  global short_term_memories
242
- if not tags:
243
- return short_term_memories.copy()
244
242
 
245
- # 按标签过滤
246
- filtered_memories = []
247
- for memory in short_term_memories:
248
- memory_tags = memory.get("tags", [])
249
- if any(tag in memory_tags for tag in tags):
250
- filtered_memories.append(memory)
243
+ # 获取记忆副本
244
+ memories_copy = short_term_memories.copy()
245
+
246
+ # 按标签过滤(如果提供了标签)
247
+ if tags:
248
+ filtered_memories = []
249
+ for memory in memories_copy:
250
+ memory_tags = memory.get("tags", [])
251
+ if any(tag in memory_tags for tag in tags):
252
+ filtered_memories.append(memory)
253
+ memories_copy = filtered_memories
254
+
255
+ # 按创建时间排序(最新的在前)
256
+ memories_copy.sort(key=lambda x: x.get("created_at", ""), reverse=True)
251
257
 
252
- return filtered_memories
258
+ return memories_copy
253
259
 
254
260
 
255
261
  def clear_short_term_memories() -> None:
@@ -26,6 +26,7 @@ from jarvis.jarvis_utils.config import (
26
26
  )
27
27
  from jarvis.jarvis_utils.embedding import get_context_token_count
28
28
  from jarvis.jarvis_utils.globals import get_in_chat, get_interrupt, set_interrupt
29
+ from jarvis.jarvis_utils.input import user_confirm
29
30
  from jarvis.jarvis_utils.output import OutputType, PrettyOutput
30
31
 
31
32
  g_config_file = None
@@ -57,6 +58,8 @@ COMMAND_MAPPING = {
57
58
  "jrg": "jarvis-rag",
58
59
  # 统计
59
60
  "jst": "jarvis-stats",
61
+ # 记忆整理
62
+ "jmo": "jarvis-memory-organizer",
60
63
  }
61
64
 
62
65
 
@@ -189,20 +192,12 @@ def _show_usage_stats() -> None:
189
192
 
190
193
  # 计算采纳率并添加到统计中
191
194
  commit_stats = categorized_stats["commit"]["metrics"]
192
- # 尝试多种可能的指标名称
193
- generated_commits = commit_stats.get(
194
- "commits_generated", commit_stats.get("commit_generated", 0)
195
- )
196
- accepted_commits = commit_stats.get(
197
- "commits_accepted",
198
- commit_stats.get("commit_accepted", commit_stats.get("commit_adopted", 0)),
199
- )
200
- rejected_commits = commit_stats.get(
201
- "commits_rejected", commit_stats.get("commit_rejected", 0)
202
- )
195
+ # 使用精确的指标名称
196
+ generated_commits = commit_stats.get("commits_generated", 0)
197
+ accepted_commits = commit_stats.get("commits_accepted", 0)
203
198
 
204
- # 如果有 generated 和 accepted,则使用这两个计算采纳率
205
- if generated_commits > 0 and accepted_commits > 0:
199
+ # 如果有 generated,则计算采纳率
200
+ if generated_commits > 0:
206
201
  adoption_rate = (accepted_commits / generated_commits) * 100
207
202
  categorized_stats["adoption"]["metrics"][
208
203
  "adoption_rate"
@@ -210,17 +205,6 @@ def _show_usage_stats() -> None:
210
205
  categorized_stats["adoption"]["metrics"][
211
206
  "commits_status"
212
207
  ] = f"{accepted_commits}/{generated_commits}"
213
- elif accepted_commits > 0 or rejected_commits > 0:
214
- # 否则使用 accepted 和 rejected 计算
215
- total_commits = accepted_commits + rejected_commits
216
- if total_commits > 0:
217
- adoption_rate = (accepted_commits / total_commits) * 100
218
- categorized_stats["adoption"]["metrics"][
219
- "adoption_rate"
220
- ] = f"{adoption_rate:.1f}%"
221
- categorized_stats["adoption"]["metrics"][
222
- "commits_status"
223
- ] = f"{accepted_commits}/{total_commits}"
224
208
 
225
209
  # 构建输出
226
210
  has_data = False
@@ -518,11 +502,22 @@ def _interactive_config_setup(config_file_path: Path):
518
502
  env_vars = {}
519
503
  required_keys = platform_class.get_required_env_keys()
520
504
  defaults = platform_class.get_env_defaults()
505
+ config_guide = platform_class.get_env_config_guide()
521
506
  if required_keys:
522
507
  PrettyOutput.print(
523
508
  f"请输入 {platform_name} 平台所需的配置信息:", OutputType.INFO
524
509
  )
510
+
511
+ # 如果有配置指导,先显示总体说明
512
+ if config_guide:
513
+ PrettyOutput.print(f"\n配置获取方法:", OutputType.INFO)
514
+
525
515
  for key in required_keys:
516
+ # 显示该环境变量的配置指导
517
+ if key in config_guide and config_guide[key]:
518
+ PrettyOutput.print(f"\n{key} 获取方法:", OutputType.INFO)
519
+ PrettyOutput.print(config_guide[key], OutputType.INFO)
520
+
526
521
  default_value = defaults.get(key, "")
527
522
  prompt_text = f" - {key}"
528
523
  if default_value:
@@ -998,11 +993,36 @@ def _pull_git_repo(repo_path: Path, repo_type: str):
998
993
  timeout=10,
999
994
  )
1000
995
  if status_result.stdout:
1001
- PrettyOutput.print(
1002
- f"检测到 '{repo_path.name}' 存在未提交的更改,跳过自动更新。",
1003
- OutputType.WARNING,
1004
- )
1005
- return
996
+ if user_confirm(
997
+ f"检测到 '{repo_path.name}' 存在未提交的更改,是否放弃这些更改并更新?"
998
+ ):
999
+ try:
1000
+ subprocess.run(
1001
+ ["git", "checkout", "."],
1002
+ cwd=repo_path,
1003
+ capture_output=True,
1004
+ text=True,
1005
+ encoding="utf-8",
1006
+ errors="replace",
1007
+ check=True,
1008
+ timeout=10,
1009
+ )
1010
+ except (
1011
+ subprocess.CalledProcessError,
1012
+ subprocess.TimeoutExpired,
1013
+ FileNotFoundError,
1014
+ ) as e:
1015
+ PrettyOutput.print(
1016
+ f"放弃 '{repo_path.name}' 的更改失败: {str(e)}",
1017
+ OutputType.ERROR,
1018
+ )
1019
+ return
1020
+ else:
1021
+ PrettyOutput.print(
1022
+ f"跳过更新 '{repo_path.name}' 以保留未提交的更改。",
1023
+ OutputType.INFO,
1024
+ )
1025
+ return
1006
1026
 
1007
1027
  # 获取更新前的commit hash
1008
1028
  before_hash_result = subprocess.run(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: jarvis-ai-assistant
3
- Version: 0.3.2
3
+ Version: 0.3.3
4
4
  Summary: Jarvis: An AI assistant that uses tools to interact with the system
5
5
  Home-page: https://github.com/skyfireitdiy/Jarvis
6
6
  Author: skyfire
@@ -202,27 +202,66 @@ iex ((New-Object System.Net.WebClient).DownloadString('https://raw.githubusercon
202
202
 
203
203
  #### 手动安装
204
204
  ```bash
205
+ # 1. 克隆仓库
205
206
  git clone https://github.com/skyfireitdiy/Jarvis
207
+
208
+ # 2. 进入项目目录
206
209
  cd Jarvis
210
+
211
+ # 3. 安装项目为可编辑模式
207
212
  pip3 install -e .
208
213
  ```
214
+ > **提示**: 使用 `-e .` (可编辑模式) 安装后,您对源码的任何修改都会立刻生效,非常适合开发者。
215
+
209
216
  或者从PyPI安装 (可能不是最新版):
210
217
  ```bash
211
218
  pip3 install jarvis-ai-assistant
212
219
  ```
213
220
 
221
+ **通过 uv 安装 (推荐)**
222
+ ```bash
223
+ # 1. 安装 uv (如果未安装)
224
+ curl -LsSf https://astral.sh/uv/install.sh | sh
225
+
226
+ # 2. 克隆仓库
227
+ git clone https://github.com/skyfireitdiy/Jarvis
228
+
229
+ # 3. 进入项目目录
230
+ cd Jarvis
231
+
232
+ # 4. 创建虚拟环境并安装
233
+ uv venv
234
+
235
+ # 安装基础功能
236
+ uv pip install .
237
+
238
+ # 可选: 安装RAG功能(包含PyTorch等较重的依赖)
239
+ # uv pip install .[rag]
240
+ ```
241
+
242
+ > **提示**: 安装完成后,建议将虚拟环境激活命令添加到您的 shell 配置文件中:
243
+ > - Bash/Zsh: 在 ~/.bashrc 或 ~/.zshrc 中添加 `source /path/to/Jarvis/.venv/bin/activate`
244
+ > - Fish: 在 ~/.config/fish/config.fish 中添加 `source /path/to/Jarvis/.venv/bin/activate.fish`
245
+
214
246
  ### 基本使用
215
247
  Jarvis 包含一系列专注于不同任务的工具。以下是主要命令及其快捷方式:
216
248
 
217
249
  | 命令 | 快捷方式 | 功能描述 |
218
250
  |------|----------|----------|
219
251
  | `jarvis` | `jvs` | 通用AI代理,适用于多种任务 |
252
+ | `jarvis-agent` | `ja` | AI代理基础功能,处理会话和任务 |
220
253
  | `jarvis-code-agent` | `jca` | 专注于代码分析、修改和生成的代码代理 |
254
+ | `jarvis-code-review` | `jcr` | 智能代码审查工具 |
221
255
  | `jarvis-git-commit` | `jgc` | 自动化分析代码变更并生成规范的Git提交信息 |
256
+ | `jarvis-git-squash` | `jgs` | Git提交历史整理工具 |
222
257
  | `jarvis-platform-manager` | `jpm` | 管理和测试不同的大语言模型平台 |
258
+ | `jarvis-multi-agent` | `jma` | 多智能体协作系统 |
259
+ | `jarvis-tool` | `jt` | 工具管理与调用系统 |
260
+ | `jarvis-methodology` | `jm` | 方法论知识库管理 |
223
261
  | `jarvis-rag` | `jrg` | 构建和查询本地化的RAG知识库 |
224
262
  | `jarvis-smart-shell` | `jss` | 实验性的智能Shell功能 |
225
263
  | `jarvis-stats` | `jst` | 通用统计模块,支持记录和可视化任意指标数据 |
264
+ | `jarvis-memory-organizer` | `jmo` | 记忆管理工具,支持整理、合并、导入导出记忆 |
226
265
 
227
266
  更多详细用法和参数,请查阅我们的 [**使用指南**](docs/jarvis_book/4.使用指南.md)。
228
267
 
@@ -1,5 +1,5 @@
1
- jarvis/__init__.py,sha256=lEwB7boP3teN71H_7lteEF13tfqihaQwtXiRqbFAWro,73
2
- jarvis/jarvis_agent/__init__.py,sha256=2zScM4N6GN4Vv5y_jDmJjTirea8ZGtRMiPf-UaGl0XE,25789
1
+ jarvis/__init__.py,sha256=YS9mc1FFiR5ItacXMnKzPOUqU0eHtJlbnQDoJzb3GiU,73
2
+ jarvis/jarvis_agent/__init__.py,sha256=zntEzvw0aHDhDO_EmyaHcVosvdfORBSz3_f31yPiURQ,25644
3
3
  jarvis/jarvis_agent/agent_manager.py,sha256=YzpMiF0H2-eyk2kn2o24Bkj3bXsQx7Pv2vfD4gWepo0,2893
4
4
  jarvis/jarvis_agent/builtin_input_handler.py,sha256=Qs4LAr4xdKLBJpQE81YP4CkucAop86ms0iVoKa1nnso,2468
5
5
  jarvis/jarvis_agent/config_editor.py,sha256=Ctk82sO6w2cNW0-_5L7Bomj-hgM4U7WwMc52fwhAJyg,1809
@@ -14,16 +14,16 @@ jarvis/jarvis_agent/prompt_builder.py,sha256=PH1fPDVa8z_RXkoXHJFNDf8PQjUoLNLYwkh
14
14
  jarvis/jarvis_agent/prompts.py,sha256=X6cXa-n0xqBQ8LDTgLsD0kqziAh1s0cNp89i4mxcvHg,9444
15
15
  jarvis/jarvis_agent/protocols.py,sha256=JWnJDikFEuwvFUv7uzXu0ggJ4O9K2FkMnfVCwIJ5REw,873
16
16
  jarvis/jarvis_agent/session_manager.py,sha256=DnvI9rWkVmkyO1XfKZyo9lTn4ajg4ccwzEkoRHFPOJM,2925
17
- jarvis/jarvis_agent/share_manager.py,sha256=7w25cX2zupnBDdn_HDusMyOAXbHQMWKYVZYq9i4EJs0,7619
17
+ jarvis/jarvis_agent/share_manager.py,sha256=h3H6PXSTVUBLablFys_h16mdI7a48RVALQhADL17rSs,8696
18
18
  jarvis/jarvis_agent/shell_input_handler.py,sha256=1IboqdxcJuoIqRpmDU10GugR9fWXUHyCEbVF4nIWbyo,1328
19
19
  jarvis/jarvis_agent/task_analyzer.py,sha256=-fQ9YBYFcc-Z1FSoDIPzRfAgkREFoIOXtU2TdBkB-e0,4656
20
20
  jarvis/jarvis_agent/task_manager.py,sha256=HJm4_SMpsFbQMUUsAZeHm7cZuhNbz28YW-DRLYgoarc,4422
21
21
  jarvis/jarvis_agent/tool_executor.py,sha256=nIq-sPNgrtimtM-IHpN09cWmId8jDzWRdCFoRzXnnoo,1721
22
22
  jarvis/jarvis_agent/tool_share_manager.py,sha256=R5ONIQlDXX9pFq3clwHFhEW8BAJ3ECaR2DqWCEC9tzM,5205
23
23
  jarvis/jarvis_code_agent/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
24
- jarvis/jarvis_code_agent/code_agent.py,sha256=mFcvj3F2ZJS550Cbv8TrVyY1evQVow8SI6B-LCdRfxI,29317
24
+ jarvis/jarvis_code_agent/code_agent.py,sha256=G2TfCS98EugonvQ-UJw2nDip_VIHXFKtnRFp1d9wDpY,29390
25
25
  jarvis/jarvis_code_agent/lint.py,sha256=LZPsfyZPMo7Wm7LN4osZocuNJwZx1ojacO3MlF870x8,4009
26
- jarvis/jarvis_code_analysis/code_review.py,sha256=TMov1pqDe1bg0vM1ndnYeW9ejHrRN_jMroo3T4L9yag,32368
26
+ jarvis/jarvis_code_analysis/code_review.py,sha256=GHNzJKLRxNIINGxM2dnDg7JV9bxG88bY2ZDh4qgqTV0,36023
27
27
  jarvis/jarvis_code_analysis/checklists/__init__.py,sha256=LIXAYa1sW3l7foP6kohLWnE98I_EQ0T7z5bYKHq6rJA,78
28
28
  jarvis/jarvis_code_analysis/checklists/c_cpp.py,sha256=9t62bMqs6qTkFSio4SKkj88qyb5ZubWrw3MxJBQ4X1A,1317
29
29
  jarvis/jarvis_code_analysis/checklists/csharp.py,sha256=ShPXrl2_UPAnGaCHAG2wLl90COG3HK2XCSr1UK2dxN4,2420
@@ -48,25 +48,27 @@ jarvis/jarvis_data/config_schema.json,sha256=xri_qfCrs2AJ-fPwvnV4oU7VJpIrUxddffQ
48
48
  jarvis/jarvis_data/tiktoken/9b5ad71b2ce5302211f9c61530b329a4922fc6a4,sha256=Ijkht27pm96ZW3_3OFE-7xAPtR0YyTWXoRO8_-hlsqc,1681126
49
49
  jarvis/jarvis_git_squash/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
50
50
  jarvis/jarvis_git_squash/main.py,sha256=6PECdAbTbrsJBRLK1pXBh4hdJ_LADh-XXSic1xJi97E,2255
51
- jarvis/jarvis_git_utils/git_commiter.py,sha256=M6SnhF_GJktO0mIT8_Y4J4Zin7-w3V_MJADndfQ9_QU,13550
51
+ jarvis/jarvis_git_utils/git_commiter.py,sha256=6mdYbC6bMMQt4q5Is65ylL2S-Mho7ZdAB_NgoNq-CKA,15894
52
52
  jarvis/jarvis_mcp/__init__.py,sha256=OPMtjD-uq9xAaKCRIDyKIosaFfBe1GBPu1az-mQ0rVM,2048
53
53
  jarvis/jarvis_mcp/sse_mcp_client.py,sha256=neKrgFxwLDPWjVrl9uDt1ricNwbLZbv1ZEFh0IkmqZk,22656
54
54
  jarvis/jarvis_mcp/stdio_mcp_client.py,sha256=APYUksYKlMx7AVNODKOLrTkKZPnp4kqTQIYIuNDDKko,11286
55
55
  jarvis/jarvis_mcp/streamable_mcp_client.py,sha256=sP0KEsxVcXGht0eA7a_m-ECtZAk39s4PL9OUdm35x2Y,14467
56
+ jarvis/jarvis_memory_organizer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
57
+ jarvis/jarvis_memory_organizer/memory_organizer.py,sha256=TP-h3CCoQh9E3kdCDbrKORKneRZYnoaWm-JOZqDY1B0,25178
56
58
  jarvis/jarvis_methodology/main.py,sha256=6QF8hH3vB6rfxim0fPR34uVPf41zVpb4ZLqrFN2qONg,10983
57
59
  jarvis/jarvis_multi_agent/__init__.py,sha256=kCgtAX7VvliyEOQxIj2DvNjRAuh6bpNaOtDn60nzph4,6089
58
60
  jarvis/jarvis_multi_agent/main.py,sha256=Wbarez48QxXexlKEOcRsoMbcQEOP5rv_DzGkNk0SfpY,1779
59
61
  jarvis/jarvis_platform/__init__.py,sha256=WLQHSiE87PPket2M50_hHzjdMIgPIBx2VF8JfB_NNRk,105
60
62
  jarvis/jarvis_platform/ai8.py,sha256=W3947AGMpk3RRBfsfZmf222sEP0VIGoSU0vPkgiVnl0,11683
61
- jarvis/jarvis_platform/base.py,sha256=nCX3W9LYIINUYn0tIS5ZmZo4UgyQVnQLZWfbHWQkAjo,9905
63
+ jarvis/jarvis_platform/base.py,sha256=XfazAKRE9HnLCqoYaRG38HlEkCWHRWGcAftHsaMN-Tc,10179
62
64
  jarvis/jarvis_platform/human.py,sha256=jWjW8prEag79e6ddqTPV4nz_Gz6zFBfO4a1EbvP8QWA,4908
63
- jarvis/jarvis_platform/kimi.py,sha256=qEqlCIT8gceR-hkYiv2m3nWaq1rgcMt7z44L77Rjpc4,14465
64
- jarvis/jarvis_platform/openai.py,sha256=MFDAVdJf9qK86B--cywseXcBBLcxi6DQW7B_KMpozeI,6960
65
+ jarvis/jarvis_platform/kimi.py,sha256=imbH575fazyDai5pxB6zbHmzwzS4Ig0RP7WVpni-ooI,15175
66
+ jarvis/jarvis_platform/openai.py,sha256=0YSeDGHRSPQP2haEzFARx_aZH_d_UZ-HSCsJLh2hW5k,8037
65
67
  jarvis/jarvis_platform/registry.py,sha256=1bMy0YZUa8NLzuZlKfC4CBtpa0iniypTxUZk0Hv6g9Y,8415
66
- jarvis/jarvis_platform/tongyi.py,sha256=uZP5ceCbHPApimKBqKthP5QynG52C3tMBglIyoBHwaY,22186
67
- jarvis/jarvis_platform/yuanbao.py,sha256=mS4aywK9CzgFU6FHh6GUxyY1Ly-NoBtGkBi74Jo_0XM,22921
68
+ jarvis/jarvis_platform/tongyi.py,sha256=KXEMfylTU91kHisXSaiz8dxzNXK_d7XD9vjuw4yXuVs,22891
69
+ jarvis/jarvis_platform/yuanbao.py,sha256=32hjk1Ju1tqrMpF47JsSuaxej5K-gUPxjsDu9g0briY,23575
68
70
  jarvis/jarvis_platform_manager/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
69
- jarvis/jarvis_platform_manager/main.py,sha256=fRZbtCH6zrG7NXTMlplf0Oq4gRYkhebvPm3RrQtN_WU,20988
71
+ jarvis/jarvis_platform_manager/main.py,sha256=kN5X6Y6p9g0ZHvMY-uBYd0QxCaJ9uhyPRzo1SUk2kxM,20966
70
72
  jarvis/jarvis_platform_manager/service.py,sha256=myJYGSUclCEiRTf3JKs4JndwhXJeQj7MQQy4i13jMt0,13767
71
73
  jarvis/jarvis_rag/__init__.py,sha256=HRTXgnQxDuaE9x-e3r6SYqhJ5d4DSI_rrIxy2IGY6qk,320
72
74
  jarvis/jarvis_rag/cache.py,sha256=Tqx_Oe-AhuWlMXHGHUaIuG6OEHoHBVZq7mL3kldtFFU,2723
@@ -110,16 +112,16 @@ jarvis/jarvis_utils/config.py,sha256=RSmKvpfB9-cq5PVZPNSirc0qiNtNKw8AUpuz5RKK2vs
110
112
  jarvis/jarvis_utils/embedding.py,sha256=oEOEM2qf16DMYwPsQe6srET9BknyjOdY2ef0jsp3Or8,2714
111
113
  jarvis/jarvis_utils/file_processors.py,sha256=XiM248SHS7lLgQDCbORVFWqinbVDUawYxWDOsLXDxP8,3043
112
114
  jarvis/jarvis_utils/git_utils.py,sha256=FxvmKkGlHWP0bTxzL1KR9fwr_ZYuBhtWX3Tt3JuMYKI,21865
113
- jarvis/jarvis_utils/globals.py,sha256=amABkrk0qGC8nJiE6AF9BzRVv7gNY-TnMVsvsIoe1_4,8638
115
+ jarvis/jarvis_utils/globals.py,sha256=aTrOHcCgPAeZFLFIWMAMiJCYlmr4XhdFZf5gZ745hnE,8900
114
116
  jarvis/jarvis_utils/http.py,sha256=eRhV3-GYuWmQ0ogq9di9WMlQkFcVb1zGCrySnOgT1x0,4392
115
117
  jarvis/jarvis_utils/input.py,sha256=pl8SanShzaEJZybvNHTjnFdKC2VxDPS1IwONtbwe-7U,12765
116
118
  jarvis/jarvis_utils/methodology.py,sha256=i8-chZtggN3GbhaDzeLV4eBl0DP3I5zctZ-I5Hj5X-4,11972
117
119
  jarvis/jarvis_utils/output.py,sha256=QRLlKObQKT0KuRSeZRqYb7NlTQvsd1oZXZ41WxeWEuU,10894
118
120
  jarvis/jarvis_utils/tag.py,sha256=f211opbbbTcSyzCDwuIK_oCnKhXPNK-RknYyGzY1yD0,431
119
- jarvis/jarvis_utils/utils.py,sha256=RwhyPfBGx_x9OKawWUVw6bAbZeI4IlvxBhhYQ_RHpWQ,40847
120
- jarvis_ai_assistant-0.3.2.dist-info/licenses/LICENSE,sha256=AGgVgQmTqFvaztRtCAXsAMryUymB18gZif7_l2e1XOg,1063
121
- jarvis_ai_assistant-0.3.2.dist-info/METADATA,sha256=DL481NElSBIOwMBr1GXz6tfFmzR1vE86Z0keZubnZ_E,16807
122
- jarvis_ai_assistant-0.3.2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
123
- jarvis_ai_assistant-0.3.2.dist-info/entry_points.txt,sha256=8cwi1VxZGU5UeSZMFiH-jG6NK95Asjukj5SBLBrGiGo,1257
124
- jarvis_ai_assistant-0.3.2.dist-info/top_level.txt,sha256=1BOxyWfzOP_ZXj8rVTDnNCJ92bBGB0rwq8N1PCpoMIs,7
125
- jarvis_ai_assistant-0.3.2.dist-info/RECORD,,
121
+ jarvis/jarvis_utils/utils.py,sha256=ujC9ciErUwAZDGmyHP7RU84hwHWT9X-MTcxcAKO2B2s,41475
122
+ jarvis_ai_assistant-0.3.3.dist-info/licenses/LICENSE,sha256=AGgVgQmTqFvaztRtCAXsAMryUymB18gZif7_l2e1XOg,1063
123
+ jarvis_ai_assistant-0.3.3.dist-info/METADATA,sha256=a291W6zXcSzgV6dA2M4X2V8Gdaqq3Q3RLK5cm4hvIYc,18184
124
+ jarvis_ai_assistant-0.3.3.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
125
+ jarvis_ai_assistant-0.3.3.dist-info/entry_points.txt,sha256=4GcWKFxRJD-QU14gw_3ZaW4KuEVxOcZK9i270rwPdjA,1395
126
+ jarvis_ai_assistant-0.3.3.dist-info/top_level.txt,sha256=1BOxyWfzOP_ZXj8rVTDnNCJ92bBGB0rwq8N1PCpoMIs,7
127
+ jarvis_ai_assistant-0.3.3.dist-info/RECORD,,
@@ -6,6 +6,7 @@ jarvis-code-agent = jarvis.jarvis_code_agent.code_agent:main
6
6
  jarvis-code-review = jarvis.jarvis_code_analysis.code_review:main
7
7
  jarvis-git-commit = jarvis.jarvis_git_utils.git_commiter:main
8
8
  jarvis-git-squash = jarvis.jarvis_git_squash.main:main
9
+ jarvis-memory-organizer = jarvis.jarvis_memory_organizer.memory_organizer:main
9
10
  jarvis-methodology = jarvis.jarvis_methodology.main:main
10
11
  jarvis-multi-agent = jarvis.jarvis_multi_agent.main:main
11
12
  jarvis-platform-manager = jarvis.jarvis_platform_manager.main:main
@@ -19,6 +20,7 @@ jgc = jarvis.jarvis_git_utils.git_commiter:main
19
20
  jgs = jarvis.jarvis_git_squash.main:main
20
21
  jm = jarvis.jarvis_methodology.main:main
21
22
  jma = jarvis.jarvis_multi_agent.main:main
23
+ jmo = jarvis.jarvis_memory_organizer.memory_organizer:main
22
24
  jpm = jarvis.jarvis_platform_manager.main:main
23
25
  jrg = jarvis.jarvis_rag.cli:main
24
26
  jss = jarvis.jarvis_smart_shell.main:main