Files
OpenCode 68a9071cf1 feat: reconcile local master with origin (exa/hot-platform hunters, leaks ledger, latest results)
Local branch had diverged from origin/master (sibling commits on the same base). Rewrote local history linearly on top of origin/master, folding in all local content: exa/hot-platform discovery hunters, leaks ledger, nightly sweep orchestrator, updated .gitignore and skill docs, plus the latest hunt output and vault state. Remote-only files (vault keys, channel scripts) were restored rather than dropped, so the resulting tree is a full union of both sides.
2026-08-07 12:53:47 +08:00

1 line
7.8 KiB
JSON
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{"repo": "ailiujiarui/chouxiang", "files": {"README.md": {"f9547d24977f7685c8a0d50d8955b2a5f10929d3": {"t": 1786068128.969567, "n": 4773, "h": "0e96f8f5f0b123cd", "c": "# Refactor Agent\n\n面向 Python 的本地代码审判与安全精简工具。当前支持:\n\n1. 粘贴 Python 代码,执行 AST 分析、多 Agent 对抗和人格化审查;\n2. 粘贴 Python 代码并提供 pytest,执行完整的本地验证精简;\n3. 只读克隆 allowlist 中的 GitHub 仓库,在本地完成分析与验证。\n\n项目不接收 GitHub Webhook,不创建分支、commit、push、Pull Request 或 Issue 评论。\n\n## 执行链\n\n统一分析流程为:\n\n```text\nInput Adapter\n -> AST Analyst\n -> Minimizer\n -> Defender\n -> Adversary\n -> Judge\n -> Persona Reporter\n```\n\n- LLM 生成的候选文件始终按不可信输入处理。\n- AST Guard 限制允许修改的区域,并拒绝危险调用、新增高风险 import、公开 API 破坏和越界修改。\n- API/Worker 使用无网络、非 root、只读根文件系统和资源受限的 Docker sandbox。\n- 用户测试、系统生成测试、对抗测试、变异测试和 Judge 共同形成可追溯证据。\n- 报告明确标记 `STATIC`、`GENERATED_TESTS`、`USER_TESTS` 或 `REPOSITORY_TESTS` 证据等级。\n- 人格只影响报告措辞,不参与技术裁决和安全判断。\n\n## 一键启动\n\n需要 Docker Desktop 和 Windows PowerShell:\n\n```powershell\n.\\scripts\\start.ps1 -Build\n```\n\n默认地址:\n\n- Dashboard:`http://127.0.0.1:8501`\n- API:`http://127.0.0.1:8000`\n\n默认是仅绑定 localhost 的本地单用户模式,不设置管理员令牌,Dashboard 可直接提交和管理本地任务。这个默认值不代表网络部署安全;不要把端口转发到不可信网络。\n\n默认配置为真实 DeepSeek LLM。缺少 `DEEPSEEK_API_KEY` 时 API 和 Dashboard 仍会启动,但 `/capabilities` 会报告 LLM 不可用,并禁用依赖 LLM 的任务入口;系统不会静默切换到 mock。仅在明确的离线演示或测试场景设置 `REFACTOR_AGENT_MOCK_LLM=true`。停止服务但保留本地数据:\n\n```powershell\n.\\scripts\\start.ps1 -Down\n```\n\nSQLite 默认使用统一的 5000ms `busy_timeout` 和 `auto` journal 策略;可通过 `REFACTOR_AGENT_SQLITE_JOURNAL_MODE=auto|wal|delete` 与 `REFACTOR_AGENT_SQLITE_BUSY_TIMEOUT_MS` 调整。WAL 只会在安全 SQLite 版本和本地文件系统上启用,备份与回退步骤见 [`docker/README.md`](docker/README.md#wal-备份与回退)。\n\n端口、基础镜像和 Python 包索引可以覆盖:\n\n```powershell\n.\\scripts\\start.ps1 -Build `\n -ApiPort 18000 `\n -DashboardPort 18501 `\n -PythonBaseImage \"your-registry.example.com/library/python:3.12-slim\" `\n -PipIndexUrl \"https://pypi.org/simple\"\n```\n\n### Nailong 桌面主动通知\n\n需要额外安装桌面依赖,并在启动服务时追加 `-Desktop`:\n\n```powershell\npython -m pip install -e \".[desktop]\"\n.\\scripts\\start.ps1 -Build -Desktop\n```\n\n桌面端通过现有分析事件流接收任务状态,按冷却、免打扰和终态优先级规则显示弹窗。默认数据目录为 `.runs`,其中包含 `nailong-agent.lock`、`nailong_privacy.sqlite` 和 `nailong_notifications.sqlite`;可通过 `NAILONG_DATA_DIR` 或启动脚本的 `-NailongDataDir` 修改。`NAILONG_ANALYSIS_URL` 和 `NAILONG_DEEPSEEK_MODEL` 可提供桌面端默认连接配置。桌宠数据库不会保存 API Key、源代码、原始窗口内容、截图、OCR、剪贴板或终端正文。完整的事件映射、接口和验证方式见 [`docs/designs/2026-07-24-nailong-proactive-notifications-update.md`](docs/designs/2026-07-24-nailong-proactive-notifications-update.md)。\n\n#### Nailong 活动监听\n\n活动监听默认由 `NAILONG_ACTIVITY_LISTENER_ENABLED=true` 创建;可设置为 `false`,或在本次启动使用 `--no-activity-listener` 关闭。该开关只控制是否创建监听器,已持久化的 `activity_listener_enabled`、手动暂停和应用白名单/黑名单仍在每次事件处理时生效。\n\n首次启动必须由用户明确授权活动采集。Windows 实现响应前台窗口变化,并每 15 秒采样系统空闲秒数:连续空闲达到 5 分钟时只发布一次 idle 事件,恢复活动后才允许下一次发布;同时读取进程可执行文件名和窗口是否覆盖当前显示器。为完成本地敏感/会议拦截和有限的 IDE 状态识别,窗口标题可能只在采集线程内短暂读取;原始标题会在隐私边界后丢弃,不会进入统一事件、EventBus、SQLite、日志或远程推理。编辑器/终端正文、代码、剪贴板、截图和 OCR 默认不会采集。会议应用和敏感应用会在入库前被隐私策略阻止。非 Windows 平台使用空实现,不采集任何活动。\n\n只允许通过隐私策略后的统一最小化事件写入 `nailong_privacy.sqlite`,其中只包含归一化应用类别、活动类型、置信度和固定格式摘要。空闲、全屏、会议等原始采集信号只在本地隐私边界内用于分类和拦截,不会写入统一事件。可在桌宠隐私控制中使用“删除本地活动记录”清除活动事件和聚合记录,首次授权选择不会被删除。\n\n## 可选认证\n\n本地单用户启动不需要管理员令牌。需要额外保护提交、取消、重试和 allowlist 管理操作时,可在启动前显式设置:\n\n```powershell\n$env:REFACTOR_AGENT_ADMIN_TOKEN=\"<strong-random-secret>\"\n.\\scripts\\start.ps1\n```\n\n此时 `/capabilities` 返回 `admin_token_required=true`,Dashboard 才显示管理员令牌输入框;未携带正确 Bearer Token 的控制请求会返回 `401`。令牌不会写入 SQLite 或运行产物。\n\n## DeepSeek\n\n使用真实模型:\n\n```powershell\n$env:DEEPSEEK_API_KEY=\"<set-in-environment>\"\n$env:REFACTOR_AGENT_MOCK_LLM=\"false\"\n.\\scripts\\start.ps1\n```\n\n离线演示(不会调用 DeepSeek):\n\n```powershell\n$env:REFACTOR_AGENT_MOCK_LLM=\"true\"\n.\\scripts\\start.ps1\n```\n\n可选变量为 `DEEPSEEK_BASE_URL` 和 `DEEPSEEK_MODEL`。API Key 不会写入 SQLite、日志或运行产物。\n\n## CLI\n\n安装开发依赖:\n\n```powershell\npython -m pip install -e .[dev]\n```\n\n审查文件或 stdin,`REVIEW` 不执行用户代码:\n\n```powershell\nrefactor-agent snippet --source snippet.py --mode review --persona tsundere\nGet-Content snippet.py | refactor-agent snippet --source - --mode review\n```\n\n提供 pytest 后执行验证精简:\n\n```powershell\nrefactor-agent snippet `\n --source snippet.py `\n --tests test_snippet.py `\n --mode verified-refactor `\n --sandbox-backend docker\n```\n\n只读 GitHub URL:\n\n```powershell\nrefactor-agent github-url `\n --repo-url https://github.com/owner/repository `\n --issue-text \"简化 calculate 函数\" `\n --target src/package/module.py `\n --tests tests\n```\n\n## 控制 API\n\n主要接口:\n\n- `/health`、`/capabilities`\n- `/analysis`、`/jobs/snippet`、`/jobs/url`\n- `/jobs`、任务详情、事件、取消和重试\n- `/runs`、trajectory、运行产物和 `/benchmarks`\n- `/admin/repository-allowlist`\n\n仓库 URL 仍必须通过 canonical URL 校验和持久化 allowlist。源码和测试会保存在本地任务数据中,不要提交密钥。\n\n## 验证\n\n```powershell\npytest -q\npython -m compileall -q src tests\ndocker compose config --quiet\ngit diff --check\n```\n\nDocker 细节见 `docker/README.md`,当前产品设计见 `docs/designs/2026-07-19-code-judge-product-redesign.md`。\n\n## 许可证\n\n本项目采用 [GNU Affero General Public License v3.0 或更高版本](LICENSE)。\n如果你向他人分发本项目或运行修改后的网络服务,必须遵守 AGPL-3.0-or-later,\n包括向交互用户提供对应源代码的义务。完整条款见 [`LICENSE`](LICENSE)。\n"}}}}