eatdrop/issuelens-agent

GitHub: eatdrop/issuelens-agent

一个证据可追溯、默认只读的 Python Coding Agent,通过人工审批和隔离容器验证将 Issue 分析连接到可复现的补丁审阅链路。

Stars: 0 | Forks: 0

# IssueLens:可验证的 Python Coding Agent [![持续集成](https://static.pigsec.cn/wp-content/uploads/repos/cas/99/993938d8ce5e902ccfb9d6747725c320d855dea3235ed9a304cedf0d94c9321f.svg)](https://github.com/eatdrop/issuelens-agent/actions/workflows/ci.yml) [![版本](https://img.shields.io/github/v/release/eatdrop/issuelens-agent?include_prereleases&sort=semver&label=release)](https://github.com/eatdrop/issuelens-agent/releases) [![Python](https://img.shields.io/badge/python-3.11%20%7C%203.12-3776AB?logo=python&logoColor=white)](pyproject.toml) [![许可证](https://img.shields.io/github/license/eatdrop/issuelens-agent)](LICENSE) IssueLens 是一个本地优先、证据可追溯、默认只读的 Python Coding Agent。它把 Issue 分析、代码证据、人工审批、隔离验证和审计回执连接为一条可复现链路。 ## 核心能力 - **证据驱动分析**:结合文本检索和 Python AST 索引,将诊断与计划绑定到文件、行号、片段和 SHA-256。 - **受限 Agent 循环**:模型只能调用经过校验的只读工具,没有通用 Shell、网络或直接文件系统权限。 - **可恢复执行**:完整性保护的 Checkpoint、仓库/Issue 漂移检测、工具/证据/时间预算和有界模型重试。 - **快照绑定审批**:Unified Diff 与基础快照形成 Proposal Hash,人工必须明确确认准确对象。 - **Shadow Workspace 验证**:默认在固定镜像、断网、非 root、只读挂载和限资源 Docker 容器中证明“补丁前失败、补丁后通过、隐藏测试通过”。 - **本地人工审阅**:仅监听回环地址、随机访问令牌、转义不可信内容,并追加记录批准或拒绝计划的决策。 - **Draft PR 文本导出**:生成中英双语 PR 草稿正文,但不调用 GitHub 发布接口。 - **可复现评测**:8 个合成案例、明确分母、失败分类和 CI Artifact;不把合成结果冒充真实 Issue 能力。 ## 工作流 ``` Issue / 问题描述 → Read-only Tools + AST/Text Retrieval / 只读工具与 AST/文本检索 → Evidence-grounded Plan + Trace / 基于证据的计划与轨迹 → Integrity Checkpoint + Budgets / 完整性检查点与预算 → Candidate Unified Diff / 外部候选补丁 → Snapshot-bound Hash Approval / 快照绑定哈希审批 → Docker Shadow Validation / Docker 隔离验证 baseline reproduction fails / 补丁前复现失败 patched reproduction passes / 补丁后复现通过 regression + hidden tests pass / 回归与隐藏测试通过 → Content-addressed Receipt / 内容寻址回执 → Local Review UI + Draft PR Text / 本地审阅与 PR 草稿文本 ``` 分析、验证、审阅和发布被设计为不同权限等级。模型推理不能绕过补丁策略、人工门、容器边界或真实仓库只读不变量。 ## 快速开始 项目运行时只依赖 Python 3.11+ 标准库;Docker 仅用于安全的目标测试执行。 ``` git clone https://github.com/eatdrop/issuelens-agent.git cd issuelens-agent make test make eval make demo ``` 运行离线 Agent 分析: ``` PYTHONPATH=src python3 -m issuelens agent \ --repo fixtures/calculator_repo \ --issue evals/cases/division_by_zero.md \ --policy offline \ --run-id demo-agent \ --run-dir runs \ --max-steps 8 \ --max-tool-calls 8 \ --max-evidence 100 \ --max-elapsed-seconds 120 ``` 如果进程在完成前中断,可使用同一仓库、Issue 和 Run ID 恢复;任何输入漂移都会失败关闭: ``` PYTHONPATH=src python3 -m issuelens agent \ --repo fixtures/calculator_repo \ --issue evals/cases/division_by_zero.md \ --policy offline \ --run-id demo-agent \ --run-dir runs \ --resume ``` 每次运行生成结构化报告、双语报告、完整轨迹和完整性检查点: ``` runs// ├── report.json ├── report.md ├── trace.jsonl └── checkpoint.json ``` ## Shadow Workspace 演示 先预拉固定 Docker 镜像;运行时使用 `--pull=never`,不会在验证过程中访问镜像仓库: ``` docker pull python:3.12.10-slim@sha256:fd95fa221297a88e1cf49c55ec1828edd7c5a428187e67b5d1805692d11588db make shadow-demo ``` 演示会展示 Proposal Hash,并要求人工粘贴完整哈希与审批人名称。Docker Runner 强制 `--network=none`、非 root、只读根文件系统、只读工作区、`no-new-privileges`、能力清空及 CPU/内存/进程/超时限制。 仅对仓库内可信固定夹具,可显式选择宿主机执行: ``` make shadow-demo-local ``` `shadow-demo-local` 会执行目标测试,不能用于未知或不可信仓库。完整威胁模型见 [Shadow Workspace 验证](docs/shadow-validation.md)。 ## 本地审阅与 Draft PR 导出 先运行 `make demo`,再启动本地仪表盘: ``` make dashboard ``` 终端会输出带随机令牌的回环地址。网页中的批准/拒绝只记录“分析计划审阅决策”,不等同于补丁 Proposal Hash 审批,也不会触发外部发布。 将报告、候选 Diff 和可选验证回执导出为 PR 草稿正文: ``` PYTHONPATH=src python3 -m issuelens draft-pr \ --repo fixtures/calculator_repo \ --report runs/demo-agent/report.json \ --diff evals/patches/division_by_zero.diff \ --validation-receipt /tmp/issuelens-shadow-audit/.json \ --output /tmp/issuelens-draft-pr.md ``` 输出必须位于目标仓库之外,已有文件不会被覆盖。详见 [本地审阅与导出](docs/web-review.md)。 ## LLM 端点 IssueLens 可接入兼容 Chat Completions JSON 输出的端点。API Key 只由适配器读取,不进入 Prompt、Trace 或验证容器。 ``` export ISSUELENS_API_KEY="..." PYTHONPATH=src python3 -m issuelens agent \ --repo fixtures/calculator_repo \ --issue evals/cases/division_by_zero.md \ --policy llm \ --endpoint "https://your-provider.example/v1/chat/completions" \ --model "your-model" \ --max-retries 2 \ --run-dir runs ``` 模型只能请求 `list_files`、`find_symbol`、`search_text`、`read_file` 和 `submit_analysis`。 ## 评测结果 2026-08-03 的 deterministic baseline 在 8 个手工维护的合成案例上得到: | 指标 | 结果 | 有效样本 | |---|---:|---:| | Hit@1 | 1.0000 | 6 / 6 | | Gold File Recall@3 | 1.0000 | 6 / 6 | | Mean Reciprocal Rank | 1.0000 | 6 / 6 | | 状态准确率 | 1.0000 | 8 / 8 | | 安全拒绝率 | 1.0000 | 2 / 2 | | 仓库保持不变率 | 1.0000 | 8 / 8 | | 计划证据覆盖率 | 1.0000 | 6 个可审查案例 | 这些数字只证明固定合成夹具上的可复现行为,不代表真实 Issue 准确率或 Resolved@1。详情、逐案例结果和限制见 [固定夹具基线](docs/evaluation-baseline.md)。 ``` make eval make test ``` 当前测试套件包含 130 个用例;受限本地沙箱会跳过 1 个回环套接字集成测试,该测试已在允许 `127.0.0.1` 的环境中单独通过。 CI 在 Python 3.11 和 3.12 上运行全部测试与评测,并单独运行默认 Docker Shadow Validation。评测及验证回执作为短期 GitHub Actions Artifact 上传。 ## 安全边界 - 真实目标仓库在分析、预检和验证前后必须保持同一快照。 - Diff 路径、测试目录、审计目录和输出目录都经过边界检查。 - Docker 验证不挂载凭据、SSH Agent 或 Docker Socket,且默认断网。 - `approved_by` 与网页审阅人都是声明式元数据,不是认证身份。 - SHA-256 提供内容完整性与对象绑定,不是数字签名或访问控制。 - 本地 Runner 仅用于可信夹具;容器边界也不能等同于生产级恶意代码沙箱。 完整说明见 [安全模型](SECURITY.md)。 ## 路线图状态 v0.2 MVP 已完成:只读分析、受限 Agent 循环、补丁协议、Docker Shadow Workspace、failing-test → patch → hidden-test 闭环、Checkpoint/预算/重试、本地审阅界面、Draft PR 文本导出和 8 案例合成评测。 仍在后续路线图中:可信身份、依赖构建阶段、独立 Trace Replay、30–50 个时间切分公开 Issue、真实 Resolved@1、自动发布 PR(默认关闭)和维护者反馈。 ## 文档 - [架构说明](docs/architecture.md) - [Shadow Workspace 验证](docs/shadow-validation.md) - [本地审阅与导出](docs/web-review.md) - [评测方案](docs/evaluation.md) - [固定夹具基线](docs/evaluation-baseline.md) - [作品集表述](docs/portfolio.md) - [面试演示](docs/interview-demo.md) - [后续路线图](docs/roadmap.md) - [安全模型](SECURITY.md) - [版本记录](CHANGELOG.md) ## 许可证 [MIT](LICENSE)
标签:AI编程助手, AST解析, DevOps工具, LLM代理, Python, 代码分析, 凭证管理, 无后门, 请求拦截, 逆向工具