Files
hack/tools/scripts/llm-key-hunter/results/_cache/content/20070316lbw-netizen_ai-c.json
T

1 line
44 KiB
JSON
Raw 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": "20070316lbw-netizen/ai-c", "files": {"README.md": {"b66685d3d913695a0450e591f2b8fee74b475771": {"t": 1785746437.1702538, "n": 8245, "h": "0dd35c9ea82c35c5", "c": "# aic — AI Coding Assistant\n\n> 个人使用的命令行 AI 编程助手,直连主流 LLM API,无服务器依赖,无 Electron,无代理问题。\n> 内部使用,不开源。2026\n\n---\n\n## 项目定位\n\naic 的本质是一个**轻量化、私有、具备长程记忆**的 AI 编程辅助器,目标是复刻并优化类似 Claude Code 的工程实践,同时保持极简依赖(核心只有 `httpx` + `rich` + 标准库)。\n\n---\n\n## 架构分层\n\n| 层级 | 模块 | 职责 |\n|------|------|------|\n| L0 入口层 | `main.py` | argparse,参数解析,调起 repl |\n| L1 会话层 | `repl.py` / `session.py` / `config.py` / `tui.py` | 对话循环、slash 命令、消息管理、分栏渲染 |\n| L2 Provider 层 | `providers/base.py` + `claude.py` + `openai_compat.py` | 抽象流式接口,多 provider 路由 |\n| L3 Memory 层 | `memory/store.py` + `extractor.py` + `types.py` | SQLite 存储,每轮提取,记忆分类 |\n| L4 Dream 层 | `dream/scheduler.py` + `lock.py` + `consolidator.py` + `agent.py` | 三道门控,4 阶段整理,受限子代理 |\n| L5 MCP 层 | `mcp/loader.py` + `runner.py` + `registry.py` | 工具调用沙箱 |\n| L6 持久化 | `~/.aic/memory.db` + `.dream-lock` + `config.toml` | SQLite 记忆库,PID 锁,全局配置 |\n| L7 Search 层 | `search/brave.py` + `search/ddg.py` + `search/tool.py` | 内置 Web 检索,Brave 优先降级 DDG |\n| L8 Distill 层 | `distill/db.py` + `distill/pipeline.py` + `distill/primer.py` | 离线蒸馏,用户画像,Context Priming |\n| L9 Event Bus 层 | `eventbus/server.py` + `eventbus/handlers/` | 系统事件感知,shell hook,Clash 监控 |\n\n---\n\n## TUI 分栏设计\n\n```\n┌─────────────────────────┬──────────────────────────┐\n│ 💬 对话 │ 📄 文件变更 │\n│ │ │\n│ > /add main.py │ main.py │\n│ aic: 已加载 main.py │ @@ -12,4 +12,6 @@ │\n│ │ def run(): │\n│ > 帮我加初始化逻辑 │ + init_memory() │\n│ aic: 建议在 run() 里 │ + load_config() │\n│ 加这两行... │ start_repl() │\n│ │ │\n│ │ ✓ 2 additions │\n└─────────────────────────┴──────────────────────────┘\n [provider: deepseek] [model: deepseek-chat] [tokens: 1,204]\n```\n\n- 终端宽度 ≥ 120 列:左右各 50% 分栏\n- 终端宽度 < 120 列:自动退化为单列\n- 无文件加载时:全宽显示对话\n- 代码块未闭合前右栏显示占位符,闭合后触发 diff 渲染\n\n---\n\n## Provider 支持\n\n| Provider | 接口类型 | 备注 |\n|----------|----------|------|\n| Claude | Anthropic 原生 API | `x-api-key` header |\n| DeepSeek | OpenAI 兼容 | 主力便宜模型,决策层 |\n| Gemini | OpenAI 兼容 | Jules 使用 |\n| Grok | OpenAI 兼容 | xAI API,coding/推理专项 |\n| Step(阶跃星辰) | OpenAI 兼容 | 便宜,规划中作主理人模型 |\n| 任意兼容 provider | OpenAI 兼容 | config.toml 配 base_url 即可 |\n\n所有 provider 统一继承 `BaseProvider`,实现 `stream()` 接口,含 usage sentinel、status_code 检查和网络异常捕获。\n\n---\n\n## 配置\n\n```toml\n# ~/.config/aic/config.toml\nprovider = \"deepseek\"\n\n[claude]\napi_key = \"sk-ant-...\"\nmodel = \"claude-sonnet-4-20250514\"\nbase_url = \"https://api.anthropic.com\"\n\n[deepseek]\napi_key = \"sk-...\"\nmodel = \"deepseek-chat\"\nbase_url = \"https://api.deepseek.com\"\n\n[gemini]\napi_key = \"...\"\nmodel = \"gemini-2.5-pro\"\nbase_url = \"https://generativelanguage.googleapis.com/v1beta/openai\"\n\n[grok]\napi_key = \"xai-...\"\nmodel = \"grok-3-fast\"\nbase_url = \"https://api.x.ai/v1\"\n\n[dream]\nmin_unprocessed = 20\nmin_interval_h = 24\nmin_sessions = 5\nlock_timeout_h = 1\nmodel = \"deepseek-chat\"\n\n[search]\nauto_search = false\nbrave_api_key = \"\"\nmax_results = 5\n\n[pricing]\n\"claude-sonnet\" = [3.00, 15.00]\n\"claude-opus\" = [15.00, 75.00]\n\"deepseek-chat\" = [0.27, 1.10]\n\"grok-3-fast\" = [0.20, 0.40]\n\n[distill]\ngate2_hours = 24\ngate3_min_conversations = 10\n```\n\n环境变量优先级:`ENV > config.toml > 默认值`\n\n---\n\n## 上下文注入(双层)\n\n- **全局级**:`~/.aic/GLOBAL_CONTEXT.md` — 编程习惯、偏好,所有项目生效\n- **项目级**:`.aic/CONTEXT.md` — 当前项目特定指令,覆盖全局\n\n注入顺序:全局在前,项目在后。\n\n---\n\n## Memory 层\n\n### 记忆类型\n\n| 类型 | 示例 |\n|------|------|\n| `user` | 偏好中文交流;用 uv 管理环境 |\n| `feedback` | 不要生成测试桩;必须加 type hints |\n| `project` | 合并冻结从3月开始;认证是合规需求 |\n| `reference` | DeepSeek 文档地址;Linear 项目 ID |\n\n### SQLite 表结构(sql1)\n\n```sql\nCREATE TABLE memories (\n id TEXT PRIMARY KEY,\n type TEXT NOT NULL,\n content TEXT NOT NULL,\n weight REAL DEFAULT 1.0,\n created_at REAL NOT NULL,\n updated_at REAL NOT NULL,\n source TEXT,\n is_archived INTEGER DEFAULT 0,\n superseded_by TEXT\n);\n```\n\n### Poor Mode\n\n`/poor` 命令切换,token 紧张时使用:\n- 跳过 extractor,不提取记忆\n- 跳过 dream 自动触发\n- 跳过 distill pipeline(归档仍执行)\n- 连续 3 次响应 output tokens > 2000 自动触发(TokenGuard)\n\n---\n\n## Dream 层\n\n### 三道门控\n\n| 门 | 条件 |\n|----|------|\n| 门1 数量门 | 未整理记忆条数 ≥ 20 |\n| 门2 时间门 | 距上次 dream ≥ 24h 且历史会话数 ≥ 5 |\n| 门3 锁门 | PID 锁不存在 / 持有者已死 / mtime 超过 1 小时 |\n\n### 4 阶段整理\n\n| 阶段 | 名称 | 操作 |\n|------|------|------|\n| Phase 1 | Orient 定位 | 查看现有条目,了解全貌 |\n| Phase 2 | Gather 采集 | 过时记忆 → 新增条目 → 隐含信息 |\n| Phase 3 | Merge 合并 | 合并新信号,软删除被推翻事实 |\n| Phase 4 | Prune 修剪 | 低权重+高龄条目归档,每类控制数量 |\n\n断点续传:`.dream-lock` 存储当前 Phase,崩溃重启后从断点继续。\n\n---\n\n## Distill 层(sql2)\n\n离线蒸馏数据库 `~/.aic/distill.db`,与实时记忆库(sql1)完全分离。\n\n### 核心功能\n\n- **对话归档**:每次退出自动保存当前 session\n- **质量筛选**:DeepSeek 对历史对话打分,高质量进 dataset pool\n- **用户画像**:提取语言风格、决策模式、行为习惯\n- **Skill 文档**:生成 `~/.aic/skills/*.md`,人工审阅后 `/skill confirm` 入库\n- **Context Priming**:`/prime <query>` 检索历史经验注入当前上下文\n\n### 三道门控\n\n| 门 | 条件 |\n|----|------|\n| 门1 | 未分析 session 窗口 ≥ 5 |\n| 门2 | 距上次 distill ≥ 24 小时 |\n| 门3 | 未分析对话总数 ≥ 10 |\n\n### 知识老化机制\n\n- `tech_stack` 字段记录技术栈,迁移时批量标记旧对话为 deprecated\n- 新 masterpiece 出现时,同标签旧对话 `quality_score × 0.5`\n- `/supersede <old_id> <new_id>` 手动建立替代关系\n\n---\n\n## 安全边界\n\n| 限制 | 数值 | 位置 |\n|------|------|------|\n| 单文件最大注入 | 500 KB | `session.py` |\n| 总上下文最大 | 400 KB | `session.py` |\n| 目录注入最大文件数 | 20 个 | `repl.py` |\n| TUI 渲染最大行数 | 1000 行 | `tui.py` |\n| TokenGuard 阈值 | 2000 output tokens | `session.py` |\n| Auto Poor Mode | 连续 3 次超限 | `session.py` |\n\n---\n\n## Slash 命令\n\n| 命令 | 功能 | 阶段 |\n|------|------|------|\n| `/add <file\\|dir>` | 注入文件或目录(最多 20 文件 / 400KB) | 一 |\n| `/files` | 查看已加载文件 | 一 |\n| `/clear` | 清空对话历史 | 一 |\n| `/reset` | 清空历史 + 上下文文件 | 一 |\n| `/model [name]` | 显示或热切换 provider/model(历史保留) | 一/五 |\n| `/status` | provider、model、session_id、poor_mode、token_guard、cost | 一/五 |\n| `/tree` | 显示当前目录树 | 一 |\n| `/poor` | 开关 Poor Mode | 二 |\n| `/memory [type]` | 查看/搜索记忆 | 二 |\n| `/forget <id>` | 软删除记忆条目 | 二 |\n| `/log` | 查看今日 KAIROS 日志 | 二 |\n| `/dream` | 手动触发 Dream 整理 | 三 |\n| `/mcp` | 查看已注册 MCP server 和工具列表 | 四 |\n| `/cost` | token 用量和费用估算 | 五 |\n| `/search <query>` | 手动触发 Web Search,结果注入上下文 | 五 |\n| `/index <dir>` | 索引目录建立代码检索器 | 五 |\n| `/find <query>` | 检索相关代码片段注入上下文 | 五 |\n| `/diag` | 诊断:线程数、内存、上下文大小、未处理记忆数 | 五 |\n| `/skill` | 查看/确认/拒绝 skill 文档 | 六 |\n| `/distill` | 手动触发 distill pipeline / 查看门控状态 | 六 |\n| `/prime [query]` | 检索历史经验注入当前上下文 | 六 |\n| `/supersede <old> <new>` | 手动标记旧对话被新对话替代 | 六 |\n| `/help` | 显示帮助 | 一 |\n| `/exit` | 退出 | 一 |\n\n---\n\n## 开发路线图\n\n### 阶段一 ✅ 已完成\n\n- [x] 目录骨架\n- [x] config.py\n- [x] BaseProvider + OpenAICompatProvider + ClaudeProvider\n- [x] session.py(含双层 CONTEXT 注入)\n- [x] tui.py(左对话右 diff 分栏)\n- [x] repl.py 主循环 + slash 基础命令\n\n### 阶段二 ✅ 已完成\n\n- [x] `memory/types.py` + `memory/store.py`\n- [x] `memory/extractor.py` — 每轮提取,Poor Mode 跳过\n- [x] KAIROS 日志 + `/poor` `/memory` `/forget` `/log`\n\n### 阶段三 ✅ 已完成\n\n- [x] Dream 三道门控 + PID 锁 + 断点续传\n- [x] Consolidator 4 阶段 + 受限子代理\n- [x] `/dream` 命令\n\n### 阶段四 ✅ 已完成\n\n- [x] MCP loader / runner / registry\n- [x] 沙箱临时会话,最多 10 轮工具调用\n- [x] `/mcp` 命令\n\n### 阶段五 ✅ 已完成\n\n- [x] Web Search 内置(Brave API + DuckDuckGo 降级)\n- [x] `/cost` token 统计 + 定价模糊匹配\n- [x] TokenGuard 自动 Poor Mode\n- [x] `/model` 热切换(历史保留)\n- [x] `/index` + `/find` 本地代码检索\n- [x] `/diag` 诊断命令\n- [x] 安全边界(文件大小限制、TUI 截断、HTTP 400 不重试)\n- [x] 统一错误格式(errors.py)\n\n### 阶段六(规划中)\n\n- [ ] Distill 层(sql2):对话归档、用户画像、Skill 文档、Context Priming\n- [ ] Event Bus:shell hook + Clash 监控 + inotify 文件监听\n- [ ] 多模型 `@` 调用语法\n- [ ] 子 Session 架构(DeepSeek 整理层)\n- [ ] Discord 集成\n\n### 阶段七(远期)\n\n- 自举模式:修改 aic 自身时自动加载源码\n- Langfuse 监控:token 消耗和任务链路追踪\n- Step 模型深度集成:主理人角色\n\n---\n\n## 快速开始\n\n```bash\ngit clone git@github.com:20070316lbw-netizen/AI-C.git\ncd AI-C\nuv venv .venv\nsource .venv/bin/activate\nuv pip install -e .\n\n# 配置\ncp config.example.toml ~/.config/aic/config.toml\n# 编辑填入 API key\n\n# 启动\naic\n\n# 在项目目录下启动(自动加载项目上下文)\ncd ~/your-project\naic\n```\n\n---\n\n## 依赖约定\n\n- `httpx` — HTTP 客户端,流式支持\n- `rich` — TUI 渲染\n- `sqlite3` — 标准库,memory 层\n- Python 3.12+\n- **严禁**引入 `openai` 或 `anthropic` SDK\n\n---\n\n## 开发约定\n\n- providers 层:mock `httpx` 的 stream 响应做单元测试\n- memory 层:用 `:memory:` SQLite 跑单元测试\n- dream 层:mock lock 文件和子代理调用\n- 测试统一用标准库 `unittest`,不引入 pytest\n- 所有 LLM 调用通过 `llm.complete()` 或 `provider.stream()`,不直接调 SDK\n\n---\n\n*— 内部使用,不开源 —*\n"}, "68530b3348bee5054ba60600a362a41ea85b7c3c": {"t": 1785764208.7028842, "n": 8245, "h": "0dd35c9ea82c35c5", "c": "# aic — AI Coding Assistant\n\n> 个人使用的命令行 AI 编程助手,直连主流 LLM API,无服务器依赖,无 Electron,无代理问题。\n> 内部使用,不开源。2026\n\n---\n\n## 项目定位\n\naic 的本质是一个**轻量化、私有、具备长程记忆**的 AI 编程辅助器,目标是复刻并优化类似 Claude Code 的工程实践,同时保持极简依赖(核心只有 `httpx` + `rich` + 标准库)。\n\n---\n\n## 架构分层\n\n| 层级 | 模块 | 职责 |\n|------|------|------|\n| L0 入口层 | `main.py` | argparse,参数解析,调起 repl |\n| L1 会话层 | `repl.py` / `session.py` / `config.py` / `tui.py` | 对话循环、slash 命令、消息管理、分栏渲染 |\n| L2 Provider 层 | `providers/base.py` + `claude.py` + `openai_compat.py` | 抽象流式接口,多 provider 路由 |\n| L3 Memory 层 | `memory/store.py` + `extractor.py` + `types.py` | SQLite 存储,每轮提取,记忆分类 |\n| L4 Dream 层 | `dream/scheduler.py` + `lock.py` + `consolidator.py` + `agent.py` | 三道门控,4 阶段整理,受限子代理 |\n| L5 MCP 层 | `mcp/loader.py` + `runner.py` + `registry.py` | 工具调用沙箱 |\n| L6 持久化 | `~/.aic/memory.db` + `.dream-lock` + `config.toml` | SQLite 记忆库,PID 锁,全局配置 |\n| L7 Search 层 | `search/brave.py` + `search/ddg.py` + `search/tool.py` | 内置 Web 检索,Brave 优先降级 DDG |\n| L8 Distill 层 | `distill/db.py` + `distill/pipeline.py` + `distill/primer.py` | 离线蒸馏,用户画像,Context Priming |\n| L9 Event Bus 层 | `eventbus/server.py` + `eventbus/handlers/` | 系统事件感知,shell hook,Clash 监控 |\n\n---\n\n## TUI 分栏设计\n\n```\n┌─────────────────────────┬──────────────────────────┐\n│ 💬 对话 │ 📄 文件变更 │\n│ │ │\n│ > /add main.py │ main.py │\n│ aic: 已加载 main.py │ @@ -12,4 +12,6 @@ │\n│ │ def run(): │\n│ > 帮我加初始化逻辑 │ + init_memory() │\n│ aic: 建议在 run() 里 │ + load_config() │\n│ 加这两行... │ start_repl() │\n│ │ │\n│ │ ✓ 2 additions │\n└─────────────────────────┴──────────────────────────┘\n [provider: deepseek] [model: deepseek-chat] [tokens: 1,204]\n```\n\n- 终端宽度 ≥ 120 列:左右各 50% 分栏\n- 终端宽度 < 120 列:自动退化为单列\n- 无文件加载时:全宽显示对话\n- 代码块未闭合前右栏显示占位符,闭合后触发 diff 渲染\n\n---\n\n## Provider 支持\n\n| Provider | 接口类型 | 备注 |\n|----------|----------|------|\n| Claude | Anthropic 原生 API | `x-api-key` header |\n| DeepSeek | OpenAI 兼容 | 主力便宜模型,决策层 |\n| Gemini | OpenAI 兼容 | Jules 使用 |\n| Grok | OpenAI 兼容 | xAI API,coding/推理专项 |\n| Step(阶跃星辰) | OpenAI 兼容 | 便宜,规划中作主理人模型 |\n| 任意兼容 provider | OpenAI 兼容 | config.toml 配 base_url 即可 |\n\n所有 provider 统一继承 `BaseProvider`,实现 `stream()` 接口,含 usage sentinel、status_code 检查和网络异常捕获。\n\n---\n\n## 配置\n\n```toml\n# ~/.config/aic/config.toml\nprovider = \"deepseek\"\n\n[claude]\napi_key = \"sk-ant-...\"\nmodel = \"claude-sonnet-4-20250514\"\nbase_url = \"https://api.anthropic.com\"\n\n[deepseek]\napi_key = \"sk-...\"\nmodel = \"deepseek-chat\"\nbase_url = \"https://api.deepseek.com\"\n\n[gemini]\napi_key = \"...\"\nmodel = \"gemini-2.5-pro\"\nbase_url = \"https://generativelanguage.googleapis.com/v1beta/openai\"\n\n[grok]\napi_key = \"xai-...\"\nmodel = \"grok-3-fast\"\nbase_url = \"https://api.x.ai/v1\"\n\n[dream]\nmin_unprocessed = 20\nmin_interval_h = 24\nmin_sessions = 5\nlock_timeout_h = 1\nmodel = \"deepseek-chat\"\n\n[search]\nauto_search = false\nbrave_api_key = \"\"\nmax_results = 5\n\n[pricing]\n\"claude-sonnet\" = [3.00, 15.00]\n\"claude-opus\" = [15.00, 75.00]\n\"deepseek-chat\" = [0.27, 1.10]\n\"grok-3-fast\" = [0.20, 0.40]\n\n[distill]\ngate2_hours = 24\ngate3_min_conversations = 10\n```\n\n环境变量优先级:`ENV > config.toml > 默认值`\n\n---\n\n## 上下文注入(双层)\n\n- **全局级**:`~/.aic/GLOBAL_CONTEXT.md` — 编程习惯、偏好,所有项目生效\n- **项目级**:`.aic/CONTEXT.md` — 当前项目特定指令,覆盖全局\n\n注入顺序:全局在前,项目在后。\n\n---\n\n## Memory 层\n\n### 记忆类型\n\n| 类型 | 示例 |\n|------|------|\n| `user` | 偏好中文交流;用 uv 管理环境 |\n| `feedback` | 不要生成测试桩;必须加 type hints |\n| `project` | 合并冻结从3月开始;认证是合规需求 |\n| `reference` | DeepSeek 文档地址;Linear 项目 ID |\n\n### SQLite 表结构(sql1)\n\n```sql\nCREATE TABLE memories (\n id TEXT PRIMARY KEY,\n type TEXT NOT NULL,\n content TEXT NOT NULL,\n weight REAL DEFAULT 1.0,\n created_at REAL NOT NULL,\n updated_at REAL NOT NULL,\n source TEXT,\n is_archived INTEGER DEFAULT 0,\n superseded_by TEXT\n);\n```\n\n### Poor Mode\n\n`/poor` 命令切换,token 紧张时使用:\n- 跳过 extractor,不提取记忆\n- 跳过 dream 自动触发\n- 跳过 distill pipeline(归档仍执行)\n- 连续 3 次响应 output tokens > 2000 自动触发(TokenGuard)\n\n---\n\n## Dream 层\n\n### 三道门控\n\n| 门 | 条件 |\n|----|------|\n| 门1 数量门 | 未整理记忆条数 ≥ 20 |\n| 门2 时间门 | 距上次 dream ≥ 24h 且历史会话数 ≥ 5 |\n| 门3 锁门 | PID 锁不存在 / 持有者已死 / mtime 超过 1 小时 |\n\n### 4 阶段整理\n\n| 阶段 | 名称 | 操作 |\n|------|------|------|\n| Phase 1 | Orient 定位 | 查看现有条目,了解全貌 |\n| Phase 2 | Gather 采集 | 过时记忆 → 新增条目 → 隐含信息 |\n| Phase 3 | Merge 合并 | 合并新信号,软删除被推翻事实 |\n| Phase 4 | Prune 修剪 | 低权重+高龄条目归档,每类控制数量 |\n\n断点续传:`.dream-lock` 存储当前 Phase,崩溃重启后从断点继续。\n\n---\n\n## Distill 层(sql2)\n\n离线蒸馏数据库 `~/.aic/distill.db`,与实时记忆库(sql1)完全分离。\n\n### 核心功能\n\n- **对话归档**:每次退出自动保存当前 session\n- **质量筛选**:DeepSeek 对历史对话打分,高质量进 dataset pool\n- **用户画像**:提取语言风格、决策模式、行为习惯\n- **Skill 文档**:生成 `~/.aic/skills/*.md`,人工审阅后 `/skill confirm` 入库\n- **Context Priming**:`/prime <query>` 检索历史经验注入当前上下文\n\n### 三道门控\n\n| 门 | 条件 |\n|----|------|\n| 门1 | 未分析 session 窗口 ≥ 5 |\n| 门2 | 距上次 distill ≥ 24 小时 |\n| 门3 | 未分析对话总数 ≥ 10 |\n\n### 知识老化机制\n\n- `tech_stack` 字段记录技术栈,迁移时批量标记旧对话为 deprecated\n- 新 masterpiece 出现时,同标签旧对话 `quality_score × 0.5`\n- `/supersede <old_id> <new_id>` 手动建立替代关系\n\n---\n\n## 安全边界\n\n| 限制 | 数值 | 位置 |\n|------|------|------|\n| 单文件最大注入 | 500 KB | `session.py` |\n| 总上下文最大 | 400 KB | `session.py` |\n| 目录注入最大文件数 | 20 个 | `repl.py` |\n| TUI 渲染最大行数 | 1000 行 | `tui.py` |\n| TokenGuard 阈值 | 2000 output tokens | `session.py` |\n| Auto Poor Mode | 连续 3 次超限 | `session.py` |\n\n---\n\n## Slash 命令\n\n| 命令 | 功能 | 阶段 |\n|------|------|------|\n| `/add <file\\|dir>` | 注入文件或目录(最多 20 文件 / 400KB) | 一 |\n| `/files` | 查看已加载文件 | 一 |\n| `/clear` | 清空对话历史 | 一 |\n| `/reset` | 清空历史 + 上下文文件 | 一 |\n| `/model [name]` | 显示或热切换 provider/model(历史保留) | 一/五 |\n| `/status` | provider、model、session_id、poor_mode、token_guard、cost | 一/五 |\n| `/tree` | 显示当前目录树 | 一 |\n| `/poor` | 开关 Poor Mode | 二 |\n| `/memory [type]` | 查看/搜索记忆 | 二 |\n| `/forget <id>` | 软删除记忆条目 | 二 |\n| `/log` | 查看今日 KAIROS 日志 | 二 |\n| `/dream` | 手动触发 Dream 整理 | 三 |\n| `/mcp` | 查看已注册 MCP server 和工具列表 | 四 |\n| `/cost` | token 用量和费用估算 | 五 |\n| `/search <query>` | 手动触发 Web Search,结果注入上下文 | 五 |\n| `/index <dir>` | 索引目录建立代码检索器 | 五 |\n| `/find <query>` | 检索相关代码片段注入上下文 | 五 |\n| `/diag` | 诊断:线程数、内存、上下文大小、未处理记忆数 | 五 |\n| `/skill` | 查看/确认/拒绝 skill 文档 | 六 |\n| `/distill` | 手动触发 distill pipeline / 查看门控状态 | 六 |\n| `/prime [query]` | 检索历史经验注入当前上下文 | 六 |\n| `/supersede <old> <new>` | 手动标记旧对话被新对话替代 | 六 |\n| `/help` | 显示帮助 | 一 |\n| `/exit` | 退出 | 一 |\n\n---\n\n## 开发路线图\n\n### 阶段一 ✅ 已完成\n\n- [x] 目录骨架\n- [x] config.py\n- [x] BaseProvider + OpenAICompatProvider + ClaudeProvider\n- [x] session.py(含双层 CONTEXT 注入)\n- [x] tui.py(左对话右 diff 分栏)\n- [x] repl.py 主循环 + slash 基础命令\n\n### 阶段二 ✅ 已完成\n\n- [x] `memory/types.py` + `memory/store.py`\n- [x] `memory/extractor.py` — 每轮提取,Poor Mode 跳过\n- [x] KAIROS 日志 + `/poor` `/memory` `/forget` `/log`\n\n### 阶段三 ✅ 已完成\n\n- [x] Dream 三道门控 + PID 锁 + 断点续传\n- [x] Consolidator 4 阶段 + 受限子代理\n- [x] `/dream` 命令\n\n### 阶段四 ✅ 已完成\n\n- [x] MCP loader / runner / registry\n- [x] 沙箱临时会话,最多 10 轮工具调用\n- [x] `/mcp` 命令\n\n### 阶段五 ✅ 已完成\n\n- [x] Web Search 内置(Brave API + DuckDuckGo 降级)\n- [x] `/cost` token 统计 + 定价模糊匹配\n- [x] TokenGuard 自动 Poor Mode\n- [x] `/model` 热切换(历史保留)\n- [x] `/index` + `/find` 本地代码检索\n- [x] `/diag` 诊断命令\n- [x] 安全边界(文件大小限制、TUI 截断、HTTP 400 不重试)\n- [x] 统一错误格式(errors.py)\n\n### 阶段六(规划中)\n\n- [ ] Distill 层(sql2):对话归档、用户画像、Skill 文档、Context Priming\n- [ ] Event Bus:shell hook + Clash 监控 + inotify 文件监听\n- [ ] 多模型 `@` 调用语法\n- [ ] 子 Session 架构(DeepSeek 整理层)\n- [ ] Discord 集成\n\n### 阶段七(远期)\n\n- 自举模式:修改 aic 自身时自动加载源码\n- Langfuse 监控:token 消耗和任务链路追踪\n- Step 模型深度集成:主理人角色\n\n---\n\n## 快速开始\n\n```bash\ngit clone git@github.com:20070316lbw-netizen/AI-C.git\ncd AI-C\nuv venv .venv\nsource .venv/bin/activate\nuv pip install -e .\n\n# 配置\ncp config.example.toml ~/.config/aic/config.toml\n# 编辑填入 API key\n\n# 启动\naic\n\n# 在项目目录下启动(自动加载项目上下文)\ncd ~/your-project\naic\n```\n\n---\n\n## 依赖约定\n\n- `httpx` — HTTP 客户端,流式支持\n- `rich` — TUI 渲染\n- `sqlite3` — 标准库,memory 层\n- Python 3.12+\n- **严禁**引入 `openai` 或 `anthropic` SDK\n\n---\n\n## 开发约定\n\n- providers 层:mock `httpx` 的 stream 响应做单元测试\n- memory 层:用 `:memory:` SQLite 跑单元测试\n- dream 层:mock lock 文件和子代理调用\n- 测试统一用标准库 `unittest`,不引入 pytest\n- 所有 LLM 调用通过 `llm.complete()` 或 `provider.stream()`,不直接调 SDK\n\n---\n\n*— 内部使用,不开源 —*\n"}, "05579874e5cf429814054eecd08574ffd3a0ffbe": {"t": 1785764216.3679357, "n": 6031, "h": "1a4f99b9d931bfd8", "c": "# aic — AI Coding Assistant\n\n> 个人使用的命令行 AI 编程助手,直连主流 LLM API,无服务器依赖,无 Electron,无代理问题。\n> 内部使用,不开源。2026\n\n---\n\n## 项目定位\n\naic 的本质是一个**轻量化、私有、具备长程记忆**的 AI 编程辅助器,目标是复刻并优化类似 Claude Code 的工程实践,同时保持极简依赖(核心只有 `httpx` + `rich` + 标准库)。\n\n---\n\n## 架构分层\n\n| 层级 | 模块 | 职责 |\n|------|------|------|\n| L0 入口层 | `main.py` | argparse,参数解析,调起 repl |\n| L1 会话层 | `repl.py` / `session.py` / `config.py` / `tui.py` | 对话循环、slash 命令、消息管理、分栏渲染 |\n| L2 Provider 层 | `providers/base.py` + `claude.py` + `openai_compat.py` | 抽象流式接口,多 provider 路由 |\n| L3 Memory 层 | `memory/store.py` + `extractor.py` + `types.py` | SQLite 存储,每轮提取,记忆分类 |\n| L4 Dream 层 | `dream/scheduler.py` + `lock.py` + `consolidator.py` + `agent.py` | 三道门控,4 阶段整理,受限子代理 |\n| L5 MCP 层 | `mcp/loader.py` + `runner.py` + `registry.py` | 工具调用(后期) |\n| L6 持久化 | `~/.aic/memory.db` + `.dream-lock` + `config.toml` | SQLite 记忆库,PID 锁,全局配置 |\n\n---\n\n## TUI 分栏设计\n\n```\n┌─────────────────────────┬──────────────────────────┐\n│ 💬 对话 │ 📄 文件变更 │\n│ │ │\n│ > /add main.py │ main.py │\n│ aic: 已加载 main.py │ @@ -12,4 +12,6 @@ │\n│ │ def run(): │\n│ > 帮我加初始化逻辑 │ + init_memory() │\n│ aic: 建议在 run() 里 │ + load_config() │\n│ 加这两行... │ start_repl() │\n│ │ │\n│ │ ✓ 2 additions │\n└─────────────────────────┴──────────────────────────┘\n [provider: deepseek] [model: deepseek-chat] [tokens: 1,204]\n```\n\n- 终端宽度 ≥ 120 列:左右各 50% 分栏\n- 终端宽度 < 120 列:自动退化为单列\n- 无文件加载时:全宽显示对话\n- 代码块未闭合前右栏显示占位符,闭合后触发 diff 渲染\n\n---\n\n## Provider 支持\n\n| Provider | 接口类型 | 备注 |\n|----------|----------|------|\n| Claude | Anthropic 原生 API | `x-api-key` header |\n| DeepSeek | OpenAI 兼容 | 主力便宜模型 |\n| Gemini | OpenAI 兼容 | Jules 使用 |\n| GPT / o 系列 | OpenAI 兼容 | 按需使用 |\n| Step(阶跃星辰) | OpenAI 兼容 | 便宜,agent 微调,后续考虑 |\n| 任意兼容 provider | OpenAI 兼容 | config.toml 配 base_url 即可 |\n\n所有 provider 统一继承 `BaseProvider`,实现 `stream()` 接口,含 status_code 检查和网络异常捕获。\n\n---\n\n## 配置\n\n```toml\n# ~/.config/aic/config.toml\nprovider = \"deepseek\"\n\n[claude]\napi_key = \"sk-ant-...\"\nmodel = \"claude-sonnet-4-20250514\"\nbase_url = \"https://api.anthropic.com\"\n\n[deepseek]\napi_key = \"sk-...\"\nmodel = \"deepseek-chat\"\nbase_url = \"https://api.deepseek.com\"\n\n[gemini]\napi_key = \"...\"\nmodel = \"gemini-2.5-pro\"\nbase_url = \"https://generativelanguage.googleapis.com/v1beta/openai\"\n\n[dream]\nmin_unprocessed = 20\nmin_interval_h = 24\nmin_sessions = 5\nlock_timeout_h = 1\nmodel = \"deepseek-chat\"\n```\n\n环境变量优先级:`ENV > config.toml > 默认值`\n\n---\n\n## 上下文注入(双层)\n\n- **全局级**:`~/.aic/GLOBAL_CONTEXT.md` — 编程习惯、偏好,所有项目生效\n- **项目级**:`.aic/CONTEXT.md` — 当前项目特定指令,覆盖全局\n\n注入顺序:全局在前,项目在后。\n\n---\n\n## Memory 层\n\n### 记忆类型\n\n| 类型 | 示例 |\n|------|------|\n| `user` | 偏好中文交流;用 uv 管理环境 |\n| `feedback` | 不要生成测试桩;必须加 type hints |\n| `project` | 合并冻结从3月开始;认证是合规需求 |\n| `reference` | DeepSeek 文档地址;Linear 项目 ID |\n\n### SQLite 表结构\n\n```sql\nCREATE TABLE memories (\n id TEXT PRIMARY KEY,\n type TEXT NOT NULL,\n content TEXT NOT NULL,\n weight REAL DEFAULT 1.0,\n created_at REAL NOT NULL,\n updated_at REAL NOT NULL,\n source TEXT,\n is_archived INTEGER DEFAULT 0, -- 软删除,不硬删\n superseded_by TEXT -- 指向替代条目的 id\n);\n```\n\n### Poor Mode\n\n`/poor` 命令切换,token 紧张时使用:\n- 跳过 extractor,不提取记忆\n- 跳过 dream 自动触发\n- Web Search 不受影响\n\n---\n\n## Dream 层\n\n### 三道门控\n\n| 门 | 条件 |\n|----|------|\n| 门1 数量门 | 未整理记忆条数 ≥ 20 |\n| 门2 时间门 | 距上次 dream ≥ 24h 且历史会话数 ≥ 5 |\n| 门3 锁门 | PID 锁不存在 / 持有者已死 / mtime 超过1小时 |\n\n### 4 阶段整理\n\n| 阶段 | 名称 | 操作 |\n|------|------|------|\n| Phase 1 | Orient 定位 | 查看现有条目,了解全貌 |\n| Phase 2 | Gather 采集 | 过时记忆 → 新增条目 → 隐含信息 |\n| Phase 3 | Merge 合并 | 合并新信号,相对日期转绝对,软删除被推翻事实 |\n| Phase 4 | Prune 修剪 | 低权重+高龄条目归档,每类控制数量 |\n\n### 断点续传\n\n`.dream-lock` 存储 JSON 格式任务状态,记录当前执行到 Phase 几,崩溃重启后从断点继续,不重复消耗 token。\n\n---\n\n## Slash 命令\n\n| 命令 | 功能 | 阶段 |\n|------|------|------|\n| `/add <file>` | 注入文件到上下文(自动检测二进制拒绝加载) | 一 |\n| `/files` | 查看已加载文件 | 一 |\n| `/clear` | 清空对话历史 | 一 |\n| `/reset` | 清空历史 + 上下文文件 | 一 |\n| `/model` | 切换 provider/model | 一 |\n| `/status` | 当前 provider、model、session_id | 一 |\n| `/tree` | 显示当前目录树 | 一 |\n| `/poor` | 开关 Poor Mode | 二 |\n| `/memory [type]` | 查看/搜索记忆 | 二 |\n| `/forget <id>` | 软删除记忆条目 | 二 |\n| `/log` | 查看今日 KAIROS 日志 | 二 |\n| `/dream` | 手动触发 Dream 整理 | 三 |\n| `/cost` | token 用量和费用估算 | 五 |\n| `/help` | 显示帮助 | 一 |\n| `/exit` | 退出 | 一 |\n\n---\n\n## 开发路线图\n\n### 阶段一 ✅ 已完成\n\n- [x] 目录骨架\n- [x] config.py\n- [x] BaseProvider + OpenAICompatProvider\n- [x] ClaudeProvider\n- [x] session.py(含双层 CONTEXT 注入)\n- [x] tui.py(左对话右 diff 分栏)\n- [x] repl.py 主循环 + slash 基础命令\n- [x] 集成测试 + .gitignore(#8 进行中)\n\n### 阶段二 ✅ 已完成\n\n并行三个 issue:\n- [x] **#9** `memory/types.py` + `memory/store.py` — SQLite 建表,软删除字段\n- [x] **#10** `memory/extractor.py` — 每轮提取,Poor Mode 跳过\n- [x] **#11** KAIROS 日志 + `/poor` `/memory` `/forget` `/log` 命令\n\n### 阶段三 ✅ 已完成,正在验收\n\n- [x] Dream 三道门控 + PID 锁 + 断点续传\n- [x] Consolidator 4 阶段 + 受限子代理\n- [x] `/dream` 命令\n\n### 阶段四\n\n- MCP loader/runner/registry\n- `.aic/mcp.json` 配置格式\n\n### 阶段五\n\n- Web Search 内置工具(Brave API 优先,降级 DuckDuckGo)\n- `/cost` token 统计\n- 体验打磨\n\n### 阶段六(远期)\n\n- **多 Agent 协作**:参考 OpenClaw 架构,针对安全性做调整,开源社区已有多个参考实现\n- **Discord 集成**:为 agent 创建 Discord 账号,通过 Discord 服务器传递信号,实现远程任务触发和结果推送\n- **Step 模型深度集成**:阶跃星辰 agent 微调版本,适合后台 Dream 子代理(价格优势 + agent 能力)\n- **Langfuse 监控**:agent 可观测性,追踪 token 消耗和任务链路\n- **自举模式**:对 aic 自身进行修改时,自动加载源码作为上下文\n\n---\n\n## 快速开始\n\n```bash\ngit clone https://github.com/你的用户名/AI-C.git aic\ncd aic\nuv venv\nuv pip install -e .\n\n# 配置\ncp config.example.toml ~/.config/aic/config.toml\n# 编辑填入 API key\n\n# 启动\naic\n# 或\npython -m aic\n```\n\n---\n\n## 依赖约定\n\n- `httpx` — HTTP 客户端,流式支持\n- `rich` — TUI 渲染\n- `sqlite3` — 标准库,memory 层\n- Python 3.12+\n- **严禁**引入 `openai` 或 `anthropic` SDK\n\n---\n\n## 开发约定\n\n- providers 层:mock `httpx` 的 stream 响应做单元测试\n- memory 层:用 `:memory:` SQLite 跑单元测试\n- dream 层:mock lock 文件和子代理调用\n- 测试统一用标准库 `unittest`,不引入 pytest\n\n---\n\n*— 内部使用,不开源 —*\n"}, "fa9a0bdb5c692d6b4216dc751d316272317c32cc": {"t": 1785764218.4300752, "n": 6004, "h": "3cd914229baa9165", "c": "# aic — AI Coding Assistant\n\n> 个人使用的命令行 AI 编程助手,直连主流 LLM API,无服务器依赖,无 Electron,无代理问题。\n> 内部使用,不开源。2026\n\n---\n\n## 项目定位\n\naic 的本质是一个**轻量化、私有、具备长程记忆**的 AI 编程辅助器,目标是复刻并优化类似 Claude Code 的工程实践,同时保持极简依赖(核心只有 `httpx` + `rich` + 标准库)。\n\n---\n\n## 架构分层\n\n| 层级 | 模块 | 职责 |\n|------|------|------|\n| L0 入口层 | `main.py` | argparse,参数解析,调起 repl |\n| L1 会话层 | `repl.py` / `session.py` / `config.py` / `tui.py` | 对话循环、slash 命令、消息管理、分栏渲染 |\n| L2 Provider 层 | `providers/base.py` + `claude.py` + `openai_compat.py` | 抽象流式接口,多 provider 路由 |\n| L3 Memory 层 | `memory/store.py` + `extractor.py` + `types.py` | SQLite 存储,每轮提取,记忆分类 |\n| L4 Dream 层 | `dream/scheduler.py` + `lock.py` + `consolidator.py` + `agent.py` | 三道门控,4 阶段整理,受限子代理 |\n| L5 MCP 层 | `mcp/loader.py` + `runner.py` + `registry.py` | 工具调用(后期) |\n| L6 持久化 | `~/.aic/memory.db` + `.dream-lock` + `config.toml` | SQLite 记忆库,PID 锁,全局配置 |\n\n---\n\n## TUI 分栏设计\n\n```\n┌─────────────────────────┬──────────────────────────┐\n│ 💬 对话 │ 📄 文件变更 │\n│ │ │\n│ > /add main.py │ main.py │\n│ aic: 已加载 main.py │ @@ -12,4 +12,6 @@ │\n│ │ def run(): │\n│ > 帮我加初始化逻辑 │ + init_memory() │\n│ aic: 建议在 run() 里 │ + load_config() │\n│ 加这两行... │ start_repl() │\n│ │ │\n│ │ ✓ 2 additions │\n└─────────────────────────┴──────────────────────────┘\n [provider: deepseek] [model: deepseek-chat] [tokens: 1,204]\n```\n\n- 终端宽度 ≥ 120 列:左右各 50% 分栏\n- 终端宽度 < 120 列:自动退化为单列\n- 无文件加载时:全宽显示对话\n- 代码块未闭合前右栏显示占位符,闭合后触发 diff 渲染\n\n---\n\n## Provider 支持\n\n| Provider | 接口类型 | 备注 |\n|----------|----------|------|\n| Claude | Anthropic 原生 API | `x-api-key` header |\n| DeepSeek | OpenAI 兼容 | 主力便宜模型 |\n| Gemini | OpenAI 兼容 | Jules 使用 |\n| GPT / o 系列 | OpenAI 兼容 | 按需使用 |\n| Step(阶跃星辰) | OpenAI 兼容 | 便宜,agent 微调,后续考虑 |\n| 任意兼容 provider | OpenAI 兼容 | config.toml 配 base_url 即可 |\n\n所有 provider 统一继承 `BaseProvider`,实现 `stream()` 接口,含 status_code 检查和网络异常捕获。\n\n---\n\n## 配置\n\n```toml\n# ~/.config/aic/config.toml\nprovider = \"deepseek\"\n\n[claude]\napi_key = \"sk-ant-...\"\nmodel = \"claude-sonnet-4-20250514\"\nbase_url = \"https://api.anthropic.com\"\n\n[deepseek]\napi_key = \"sk-...\"\nmodel = \"deepseek-chat\"\nbase_url = \"https://api.deepseek.com\"\n\n[gemini]\napi_key = \"...\"\nmodel = \"gemini-2.5-pro\"\nbase_url = \"https://generativelanguage.googleapis.com/v1beta/openai\"\n\n[dream]\nmin_unprocessed = 20\nmin_interval_h = 24\nmin_sessions = 5\nlock_timeout_h = 1\nmodel = \"deepseek-chat\"\n```\n\n环境变量优先级:`ENV > config.toml > 默认值`\n\n---\n\n## 上下文注入(双层)\n\n- **全局级**:`~/.aic/GLOBAL_CONTEXT.md` — 编程习惯、偏好,所有项目生效\n- **项目级**:`.aic/CONTEXT.md` — 当前项目特定指令,覆盖全局\n\n注入顺序:全局在前,项目在后。\n\n---\n\n## Memory 层\n\n### 记忆类型\n\n| 类型 | 示例 |\n|------|------|\n| `user` | 偏好中文交流;用 uv 管理环境 |\n| `feedback` | 不要生成测试桩;必须加 type hints |\n| `project` | 合并冻结从3月开始;认证是合规需求 |\n| `reference` | DeepSeek 文档地址;Linear 项目 ID |\n\n### SQLite 表结构\n\n```sql\nCREATE TABLE memories (\n id TEXT PRIMARY KEY,\n type TEXT NOT NULL,\n content TEXT NOT NULL,\n weight REAL DEFAULT 1.0,\n created_at REAL NOT NULL,\n updated_at REAL NOT NULL,\n source TEXT,\n is_archived INTEGER DEFAULT 0, -- 软删除,不硬删\n superseded_by TEXT -- 指向替代条目的 id\n);\n```\n\n### Poor Mode\n\n`/poor` 命令切换,token 紧张时使用:\n- 跳过 extractor,不提取记忆\n- 跳过 dream 自动触发\n- Web Search 不受影响\n\n---\n\n## Dream 层\n\n### 三道门控\n\n| 门 | 条件 |\n|----|------|\n| 门1 数量门 | 未整理记忆条数 ≥ 20 |\n| 门2 时间门 | 距上次 dream ≥ 24h 且历史会话数 ≥ 5 |\n| 门3 锁门 | PID 锁不存在 / 持有者已死 / mtime 超过1小时 |\n\n### 4 阶段整理\n\n| 阶段 | 名称 | 操作 |\n|------|------|------|\n| Phase 1 | Orient 定位 | 查看现有条目,了解全貌 |\n| Phase 2 | Gather 采集 | 过时记忆 → 新增条目 → 隐含信息 |\n| Phase 3 | Merge 合并 | 合并新信号,相对日期转绝对,软删除被推翻事实 |\n| Phase 4 | Prune 修剪 | 低权重+高龄条目归档,每类控制数量 |\n\n### 断点续传\n\n`.dream-lock` 存储 JSON 格式任务状态,记录当前执行到 Phase 几,崩溃重启后从断点继续,不重复消耗 token。\n\n---\n\n## Slash 命令\n\n| 命令 | 功能 | 阶段 |\n|------|------|------|\n| `/add <file>` | 注入文件到上下文(自动检测二进制拒绝加载) | 一 |\n| `/files` | 查看已加载文件 | 一 |\n| `/clear` | 清空对话历史 | 一 |\n| `/reset` | 清空历史 + 上下文文件 | 一 |\n| `/model` | 切换 provider/model | 一 |\n| `/status` | 当前 provider、model、session_id | 一 |\n| `/tree` | 显示当前目录树 | 一 |\n| `/poor` | 开关 Poor Mode | 二 |\n| `/memory [type]` | 查看/搜索记忆 | 二 |\n| `/forget <id>` | 软删除记忆条目 | 二 |\n| `/log` | 查看今日 KAIROS 日志 | 二 |\n| `/dream` | 手动触发 Dream 整理 | 三 |\n| `/cost` | token 用量和费用估算 | 五 |\n| `/help` | 显示帮助 | 一 |\n| `/exit` | 退出 | 一 |\n\n---\n\n## 开发路线图\n\n### 阶段一(当前)✅ 接近完成\n\n- [x] 目录骨架\n- [x] config.py\n- [x] BaseProvider + OpenAICompatProvider\n- [x] ClaudeProvider\n- [x] session.py(含双层 CONTEXT 注入)\n- [x] tui.py(左对话右 diff 分栏)\n- [x] repl.py 主循环 + slash 基础命令\n- [ ] 集成测试 + .gitignore(#8 进行中)\n\n### 阶段二(#8 合并后开始)\n\n并行三个 issue:\n- **#9** `memory/types.py` + `memory/store.py` — SQLite 建表,软删除字段\n- **#10** `memory/extractor.py` — 每轮提取,Poor Mode 跳过\n- **#11** KAIROS 日志 + `/poor` `/memory` `/forget` `/log` 命令\n\n### 阶段三\n\n- Dream 三道门控 + PID 锁 + 断点续传\n- Consolidator 4 阶段 + 受限子代理\n- `/dream` 命令\n\n### 阶段四\n\n- MCP loader/runner/registry\n- `.aic/mcp.json` 配置格式\n\n### 阶段五\n\n- Web Search 内置工具(Brave API 优先,降级 DuckDuckGo)\n- `/cost` token 统计\n- 体验打磨\n\n### 阶段六(远期)\n\n- **多 Agent 协作**:参考 OpenClaw 架构,针对安全性做调整,开源社区已有多个参考实现\n- **Discord 集成**:为 agent 创建 Discord 账号,通过 Discord 服务器传递信号,实现远程任务触发和结果推送\n- **Step 模型深度集成**:阶跃星辰 agent 微调版本,适合后台 Dream 子代理(价格优势 + agent 能力)\n- **Langfuse 监控**:agent 可观测性,追踪 token 消耗和任务链路\n- **自举模式**:对 aic 自身进行修改时,自动加载源码作为上下文\n\n---\n\n## 快速开始\n\n```bash\ngit clone https://github.com/你的用户名/AI-C.git aic\ncd aic\nuv venv\nuv pip install -e .\n\n# 配置\ncp config.example.toml ~/.config/aic/config.toml\n# 编辑填入 API key\n\n# 启动\naic\n# 或\npython -m aic\n```\n\n---\n\n## 依赖约定\n\n- `httpx` — HTTP 客户端,流式支持\n- `rich` — TUI 渲染\n- `sqlite3` — 标准库,memory 层\n- Python 3.12+\n- **严禁**引入 `openai` 或 `anthropic` SDK\n\n---\n\n## 开发约定\n\n- providers 层:mock `httpx` 的 stream 响应做单元测试\n- memory 层:用 `:memory:` SQLite 跑单元测试\n- dream 层:mock lock 文件和子代理调用\n- 测试统一用标准库 `unittest`,不引入 pytest\n\n---\n\n*— 内部使用,不开源 —*\n"}, "4f33ecb1899012a6a7abd2e684cc0100b2caae39": {"t": 1785764219.9136262, "n": 1196, "h": "ff63db19b90a68a6", "c": "# aic — AI Coding Assistant\n\n> 个人使用的命令行 AI 编程助手,直连主流 LLM API,无服务器依赖,无 Electron。\n\n---\n\n## 特性\n\n- 直连 API(Claude / DeepSeek / Gemini / GPT),不依赖任何第三方 CLI 框架\n- 分栏 TUI:左侧对话,右侧文件变更 diff(`rich` 实现)\n- Memory 体系:SQLite 持久化,四类记忆分类\n- Dream 整理:三道门控自动触发,4 阶段 prompt 整理记忆\n- Agent prompt 文件驱动,存放于 `.aic/agents/`,不硬编码\n- Poor Mode:token 紧张时关闭记忆提取\n\n## 项目状态\n\n🚧 **阶段一开发中** — Provider 抽象 + 基础 REPL\n\n## 架构层级\n\n```\nL0 main.py argparse 入口\nL1 repl / session 对话循环、slash 命令、消息管理\nL2 providers 流式接口抽象,多 provider 路由\nL3 memory SQLite 存储,记忆提取与分类\nL4 dream 三道门控,4 阶段自动整理\nL5 mcp 工具调用(后期)\nL6 持久化 ~/.aic/memory.db + config.toml\n```\n\n## 快速开始\n\n```bash\n# 安装(uv 推荐)\nuv pip install -e .\n\n# 配置\ncp config.example.toml ~/.config/aic/config.toml\n# 编辑填入 API key\n\n# 启动\naic\n```\n\n## 配置示例\n\n见 `config.example.toml`\n\n## 开发路线图\n\n| 阶段 | 内容 | 状态 |\n|------|------|------|\n| 阶段一 | Provider 抽象 + REPL + TUI 分栏 | 🚧 进行中 |\n| 阶段二 | Memory 全套 + KAIROS 日志 + Poor Mode | ⏳ 待开始 |\n| 阶段三 | Dream 三道门 + 受限子代理 | ⏳ 待开始 |\n| 阶段四 | MCP loader/runner | ⏳ 待开始 |\n| 阶段五 | Web Search + /cost 统计 | ⏳ 待开始 |\n\n## 依赖\n\n- `httpx` — HTTP 客户端(流式支持)\n- `rich` — TUI 渲染\n- `sqlite3` — 标准库,memory 层\n- Python 3.12+\n\n---\n\n*内部使用,不开源。*\n"}, "75fa99bf08bf86e4b9c5c44d024d6430e74916cd": {"t": 1785764221.5402136, "n": 6, "h": "733f95fb52cbabc0", "c": "# AI-C"}}}}