jarvis-ai-assistant 0.4.2__py3-none-any.whl → 0.5.1__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.
Files changed (30) hide show
  1. jarvis/__init__.py +1 -1
  2. jarvis/jarvis_agent/__init__.py +117 -6
  3. jarvis/jarvis_agent/jarvis.py +6 -0
  4. jarvis/jarvis_agent/share_manager.py +8 -1
  5. jarvis/jarvis_agent/task_planner.py +218 -0
  6. jarvis/jarvis_code_agent/code_agent.py +99 -3
  7. jarvis/jarvis_code_analysis/code_review.py +483 -568
  8. jarvis/jarvis_data/config_schema.json +8 -3
  9. jarvis/jarvis_sec/README.md +180 -0
  10. jarvis/jarvis_sec/__init__.py +674 -0
  11. jarvis/jarvis_sec/checkers/__init__.py +33 -0
  12. jarvis/jarvis_sec/checkers/c_checker.py +1269 -0
  13. jarvis/jarvis_sec/checkers/rust_checker.py +367 -0
  14. jarvis/jarvis_sec/cli.py +110 -0
  15. jarvis/jarvis_sec/prompts.py +324 -0
  16. jarvis/jarvis_sec/report.py +260 -0
  17. jarvis/jarvis_sec/types.py +20 -0
  18. jarvis/jarvis_sec/workflow.py +513 -0
  19. jarvis/jarvis_tools/registry.py +20 -14
  20. jarvis/jarvis_tools/sub_agent.py +4 -3
  21. jarvis/jarvis_tools/sub_code_agent.py +3 -3
  22. jarvis/jarvis_utils/config.py +14 -2
  23. jarvis/jarvis_utils/methodology.py +25 -19
  24. jarvis/jarvis_utils/utils.py +193 -2
  25. {jarvis_ai_assistant-0.4.2.dist-info → jarvis_ai_assistant-0.5.1.dist-info}/METADATA +1 -1
  26. {jarvis_ai_assistant-0.4.2.dist-info → jarvis_ai_assistant-0.5.1.dist-info}/RECORD +30 -19
  27. {jarvis_ai_assistant-0.4.2.dist-info → jarvis_ai_assistant-0.5.1.dist-info}/entry_points.txt +2 -0
  28. {jarvis_ai_assistant-0.4.2.dist-info → jarvis_ai_assistant-0.5.1.dist-info}/WHEEL +0 -0
  29. {jarvis_ai_assistant-0.4.2.dist-info → jarvis_ai_assistant-0.5.1.dist-info}/licenses/LICENSE +0 -0
  30. {jarvis_ai_assistant-0.4.2.dist-info → jarvis_ai_assistant-0.5.1.dist-info}/top_level.txt +0 -0
@@ -188,6 +188,11 @@
188
188
  "description": "AI工具筛选阈值:当可用工具数量超过此值时触发AI筛选",
189
189
  "default": 30
190
190
  },
191
+ "JARVIS_PLAN_MAX_DEPTH": {
192
+ "type": "number",
193
+ "description": "任务规划的最大层数。用于限制 plan 模式的递归拆分深度。仅在启用规划时生效(通过 CLI --plan/--no-plan 控制),默认 3。",
194
+ "default": 2
195
+ },
191
196
  "JARVIS_SCRIPT_EXECUTION_TIMEOUT": {
192
197
  "type": "number",
193
198
  "description": "脚本执行的超时时间(秒),仅在非交互模式下生效。",
@@ -196,7 +201,7 @@
196
201
  "JARVIS_AUTO_SUMMARY_ROUNDS": {
197
202
  "type": "number",
198
203
  "description": "基于对话轮次的自动总结阈值(达到该轮次后自动总结并清理历史)",
199
- "default": 20
204
+ "default": 50
200
205
  },
201
206
  "JARVIS_CONFIRM_BEFORE_APPLY_PATCH": {
202
207
  "type": "boolean",
@@ -279,12 +284,12 @@
279
284
  },
280
285
  "JARVIS_CENTRAL_METHODOLOGY_REPO": {
281
286
  "type": "string",
282
- "description": "中心方法论Git仓库地址,该仓库会自动添加到方法论加载路径中",
287
+ "description": "中心方法论仓库路径或Git仓库地址。支持本地目录(含git子路径):若为本地目录将直接加入方法论加载路径;若为Git URL则会克隆到数据目录后加载。",
283
288
  "default": ""
284
289
  },
285
290
  "JARVIS_CENTRAL_TOOL_REPO": {
286
291
  "type": "string",
287
- "description": "中心工具库Git仓库地址,该仓库会自动克隆到数据目录并加载其中的工具",
292
+ "description": "中心工具仓库路径或Git仓库地址。支持本地目录(含git子路径):若为本地目录将直接加载其中的工具;若为Git URL则会克隆到数据目录并加载。",
288
293
  "default": ""
289
294
  },
290
295
  "JARVIS_PRINT_PROMPT": {
@@ -0,0 +1,180 @@
1
+ OpenHarmony 安全演进套件(jarvis_sec)
2
+ ================================
3
+
4
+ 概览
5
+ - 模式:单 Agent 逐条子任务分析(先直扫拆分候选,再由 Agent 精核)
6
+ - 目标:在不破坏现有功能的前提下,增强稳定性与可追溯性,减少“全部解析失败”的概率
7
+ - 关键特性:
8
+ - 禁用方法论与分析(use_methodology=False, use_analysis=False),降低不确定性
9
+ - 按次指定模型组(--llm-group / llm_group 参数),不修改全局配置
10
+ - 启用摘要 need_summary=True,通过 <REPORT>…</REPORT> 输出结构化结果
11
+ - 进度与过程日志输出(Progress / parse-fail / no-issue / issues-found)
12
+ - 增量写入 JSONL 报告,长任务中可实时查看
13
+ - 只读约束:禁止任何写文件或破坏性命令(rm/mv/cp/echo >/sed -i/git/patch/chmod/chown 等)
14
+
15
+ CLI 使用
16
+ - 入口:python -m jarvis.jarvis_sec.cli agent --path ./target_project
17
+ - 可选参数:
18
+ - --languages/-l:逗号分隔的扩展名列表,例如 "c,cpp,h,hpp,rs"
19
+ - --llm-group/-g:本次运行使用的模型组(仅透传,不改全局)
20
+ - --report-file/-r:JSONL 报告输出路径(默认写入 path/.jarvis/sec/agent_issues.jsonl)
21
+
22
+ 示例
23
+ - 最简运行:
24
+ python -m jarvis.jarvis_sec.cli agent -p ./path/to/project
25
+
26
+ - 指定语言与临时模型组:
27
+ python -m jarvis.jarvis_sec.cli agent -p ./proj -l c,cpp,h,hpp,rs -g my_llm_group
28
+
29
+ - 指定增量报告文件:
30
+ python -m jarvis.jarvis_sec.cli agent -p ./proj -r ./out/agent_issues.jsonl
31
+
32
+ 工作流要点
33
+ 1) 直扫(direct_scan)
34
+ - 使用正则/命令行辅助在本地生成候选问题(issues)与统计信息(summary)
35
+ - 可在无外部服务时复现与回退,保障可用性
36
+
37
+ 2) 子任务拆分与单 Agent 精核
38
+ - 将每个候选压缩为精简上下文(language、category、pattern、file、line、evidence 等)
39
+ - 单 Agent 周期内:
40
+ - need_summary=True
41
+ - summary_prompt 为 _build_summary_prompt(...) 返回的提示,要求在 <REPORT>…</REPORT> 内输出 JSON 或 YAML
42
+ - 系统提示包含只读约束与“一次仅执行一个工具”规则
43
+ - 推荐工具:read_code(读取目标文件附近源码)、execute_script(只读检索,如 rg/find)
44
+
45
+ 3) 解析策略
46
+ - 优先解析摘要(agent.generate_summary())中的 <REPORT>…</REPORT>:
47
+ - _try_parse_summary_report 支持 JSON 优先,失败回退 YAML(safe_load)
48
+ - 摘要不可解析时,直接判定 parse-fail(不会回退解析主输出)
49
+
50
+ 4) 增量写入 JSONL
51
+ - 每个子任务如检测到 issues,立即将记录 append 到 JSONL(默认 path/.jarvis/sec/agent_issues.jsonl)
52
+ - 支持通过 --report-file/-r 指定其他路径
53
+ - 失败不会影响主流程
54
+
55
+ JSONL 记录结构
56
+ - 每行一个 JSON 对象,格式如下:
57
+ {
58
+ "task_id": "JARVIS-SEC-Analyzer-3",
59
+ "candidate": {
60
+ "language": "c/cpp",
61
+ "category": "unsafe_api",
62
+ "pattern": "strcpy",
63
+ "file": "src/foo.c",
64
+ "line": 120,
65
+ "evidence": "strcpy(dst, src);",
66
+ "confidence": 0.9,
67
+ "severity": "high"
68
+ },
69
+ "issues": [
70
+ {
71
+ "language": "c/cpp",
72
+ "category": "unsafe_api",
73
+ "pattern": "strcpy",
74
+ "file": "src/foo.c",
75
+ "line": 120,
76
+ "evidence": "strcpy(dst, src);",
77
+ "description": "使用不安全/高风险字符串API,可能导致缓冲区溢出或格式化风险。",
78
+ "suggestion": "替换为带边界的安全API(如 snprintf/strlcpy 等)或加入显式长度检查。",
79
+ "confidence": 0.9,
80
+ "severity": "high"
81
+ }
82
+ ],
83
+ "meta": {
84
+ "entry_path": "/abs/path/to/project",
85
+ "languages": ["c","cpp","h","hpp","rs"],
86
+ "source": "summary"
87
+ "timestamp": "2025-10-19T03:00:00Z"
88
+ }
89
+ }
90
+
91
+ 摘要 <REPORT> 结构
92
+ - Agent 在摘要中必须只输出以下内容(推荐 JSON,支持 YAML):
93
+ <REPORT>
94
+ {
95
+ "issues": [
96
+ {
97
+ "language": "c/cpp|rust",
98
+ "category": "unsafe_api|buffer_overflow|memory_mgmt|error_handling|unsafe_usage|concurrency|ffi",
99
+ "pattern": "命中的模式/关键字",
100
+ "file": "相对或绝对路径",
101
+ "line": 0,
102
+ "evidence": "证据代码片段(单行简化)",
103
+ "description": "问题说明",
104
+ "suggestion": "修复建议",
105
+ "confidence": 0.0,
106
+ "severity": "high|medium|low"
107
+ }
108
+ ],
109
+ "meta": {
110
+ "task_id": "JARVIS-SEC-Analyzer-1",
111
+ "entry_path": "/abs/path",
112
+ "languages": ["c","cpp","h","hpp","rs"],
113
+ "candidate": { "...": "子任务精简信息" }
114
+ }
115
+ }
116
+ </REPORT>
117
+
118
+ - 要求:
119
+ - 仅在 <REPORT> 与 </REPORT> 中输出报告,不得出现其他文本
120
+ - 若确认误报,返回空数组 issues: []
121
+ - 字段值需与实际分析一致
122
+
123
+ 只读约束(强制)
124
+ - Agent 被要求仅做只读分析:禁止修改任何文件或执行写操作命令
125
+ - 禁止命令包含但不限于:rm/mv/cp/echo >、sed -i、git、patch、chmod、chown 等
126
+ - 推荐工具:
127
+ - read_code:按文件路径与行号范围读取源码(建议围绕候选行上下 50 行)
128
+ - execute_script:只读检索(如 rg/find/grep),避免任何写操作
129
+
130
+ 日志与可观测性
131
+ - 进度日志:
132
+ - [JARVIS-SEC] Progress i/N: file:line (lang)
133
+ - [JARVIS-SEC] no-issue i/N: ...
134
+ - [JARVIS-SEC] issues-found i/N: count=k -> append report (summary)
135
+ - [JARVIS-SEC] parse-fail i/N: ...
136
+ - JSONL 写入:
137
+ - [JARVIS-SEC] write K issue(s) to <path>
138
+
139
+ 模型组(llm_group)
140
+ - 通过 CLI 的 --llm-group 或 API 的 llm_group 参数传入,仅对本次调用链生效
141
+ - 不会覆盖全局配置(不调用 set_config)
142
+
143
+ 常见问题排查
144
+ - 解析失败(parse-fail):
145
+ - 确认模型已在摘要中输出 <REPORT>…</REPORT>
146
+ - 优先使用 JSON;YAML 解析依赖 PyYAML(safe_load),若环境无此库将忽略 YAML 回退
147
+ - 注意:不会回退解析主输出;若摘要缺失或格式不合规,将直接跳过该候选
148
+ - JSONL 未写入:
149
+ - 仅当 issues 非空时追加写入
150
+ - 确认 --report-file 或默认目录 path/.jarvis/sec/ 可写
151
+ - Agent 输出为空:
152
+ - CLI 会回退到直扫基线(run_security_analysis_fast),仍可得到 JSON+Markdown 报告
153
+
154
+ API 概览
155
+ - run_with_multi_agent(entry_path, languages=None, llm_group=None, report_file=None) -> str
156
+ - 透传到 run_security_analysis(...),实现“直扫 + 单 Agent 逐条验证 + 聚合”
157
+ - run_security_analysis_fast(entry_path, languages=None, exclude_dirs=None) -> str
158
+ - 纯直扫基线,返回 JSON + Markdown
159
+ - direct_scan(entry_path, languages=None, exclude_dirs=None) -> Dict
160
+ - 返回结构化 issues 与 summary
161
+ - run_with_multi_agent(entry_path, languages=None, llm_group=None, report_file=None) -> str
162
+ - 透传到 run_security_analysis(...),实现“直扫 + 单 Agent 逐条验证 + 聚合”
163
+ - run_security_analysis_fast(entry_path, languages=None, exclude_dirs=None) -> str
164
+ - 纯直扫基线,返回 JSON + Markdown
165
+ - direct_scan(entry_path, languages=None, exclude_dirs=None) -> Dict
166
+ - 返回结构化 issues 与 summary
167
+
168
+ 建议测试(可选)
169
+ - 摘要解析:
170
+ - _try_parse_summary_report 对 JSON/YAML/无 REPORT 的输入解析正确
171
+ - CLI 参数链路:
172
+ - --llm-group 仅透传,不改全局
173
+ - --report-file 写入指定路径
174
+ - 只读约束:
175
+ - 模拟 Agent 工具调用,确保拒绝写操作命令(可在提示词层面校验)
176
+
177
+ 版本兼容与注意事项
178
+ - 本模块不修改全局模型组配置
179
+ - 摘要使用 JSON 优先,YAML 为回退路径(需 PyYAML)
180
+ - 直扫基线可在无外部服务时独立运行,便于复现与回退