# python-claude-code **Repository Path**: styx1001/python-claude-code ## Basic Information - **Project Name**: python-claude-code - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-09-20 - **Last Updated**: 2026-09-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Python Claude Code A Python implementation of Claude Code architecture using Pydantic for validation. ## Features - Pydantic input validation - Modular architecture - Async-first design - Extensible tool system - Permission control ## Installation and run ```bash pip install -e ".[dev]" # 查看帮助 python -m src.main --help # 启动交互式聊天(命令行模式) python -m src.main chat # 单次提问 python -m src.main ask "你的问题" # 运行桌面应用 python -m desktop_app # 或 python desktop_app/__main__.py ``` ## Usage ```bash # Set API key export ANTHROPIC_API_KEY="your-api-key" ``` ## Development ```bash # Run tests pytest tests/ -v # Run with coverage pytest tests/ --cov=src --cov-report=html ``` # 实际数据流( 流程处理) ``` QueryLoop(asyncio 线程) │ ├─ event_bus.emit("tool.scheduled", ...) ← 引擎层广播 │ │ │ ├─ 内存记录 │ ├─ 写 JSONL │ ├─ audit 日志 │ └─ 通知订阅者 │ │ │ └─ ChatWorker._forward_event(ev) ← 订阅者 │ │ │ └─ self.event_emitted.emit({...}) ← pyqtSignal 跨线程 │ │ │ │ Qt 事件队列 │ ▼ │ MainWindow._on_event(ev) ← UI 线程 │ │ │ └─ 更新工具卡片 │ └─ yield ToolMessage ← 另一条通道 │ └─ ChatWorker._run_async 捕获 │ └─ self.message_added.emit({...}) ← pyqtSignal 跨线程 │ ▼ MainWindow._on_message_added(msg) ``` # 全局持有关系 ``` QApplication └── MainWindow ← 顶层,持有所有 UI 和后端引用 ├── Config ← 配置 ├── SessionManager ← 会话持久化 ├── QueryEngine ← 引擎,持有 client 和 context │ ├── _client (AgnesClient) ← LLM 客户端 │ ├── ContextManager ← 消息历史 │ │ └── CompactService / LLMSummarizingCondenser │ └── ToolRegistry ← 工具注册表 │ ├── BashTool │ ├── ReadTool │ ├── EditTool │ └── WriteTool ├── QueryLoop ← 循环,持有 engine 和 permission │ ├── engine → QueryEngine ← 同一个实例,共享引用 │ ├── permission_engine → PermissionEngine │ ├── tool_registry → ToolRegistry ← 同一个实例 │ ├── event_bus → EventBus │ └── condenser → ContextCondenser(可选) ├── current_worker → ChatWorker ← 当前后台线程 ├── tool_cards: Dict[str, ToolCallCard] ├── UI 组件 │ ├── left_frame / conversation_list │ ├── center_widget / chat_area / flow_layout │ ├── input_edit (InputEdit) │ ├── workspace_selector (WorkspaceSelector) │ ├── top_toolbar (TopToolbar) │ ├── output_panel (OutputPanel) │ ├── trace_panel (TracePanel) │ ├── status_capsule (TurnStatusCapsule) │ └── perm_combo / provider_combo / model_combo └── _bash_loop (asyncio event loop) ``` # 系统提示词 # 上下文数据流 ``` 新建会话 │ ├─ init_default_memory(workdir) → 确保 MEMORY.md 存在 ├─ DailyLog(workdir) → 准备每日日志 │ ├─ 用户提问 │ │ │ ├─ 加载 MEMORY.md → 注入 System Prompt │ ├─ 会话记录写 .agent/sessions// │ └─ 调 LLM → 执行工具 → 产出结果 │ └─ 会话结束 │ ├─ SessionRecorder.close() ├─ SessionDigest.build(messages) → 提炼摘要 │ ├─ title: 第一条用户消息 │ ├─ requirement: 用户需求 │ ├─ implementation: 工具调用汇总 │ ├─ verification: 测试结果 │ └─ files: write/edit 的文件路径 │ └─ DailyLog.append_task(...) → 追加到 daily/YYYY-MM-DD.md ``` ## 和会话记录的分工 你之前设计的 SessionRecorder 和现在的 DailyLog 是两个不同粒度: 组件| 粒度| 内容 |用途 |:-- |:-- |:-- |:-- SessionRecorder| 单会话 |完整消息、压缩状态| 恢复会话、审计 DailyLog| 单天 |任务摘要(需求/实现/验证/文件) |快速回顾、注入记忆 ProjectMemory| 长期 |稳定事实 |注入 System Prompt 三者协作: - 会话进行中:SessionRecorder 记录每条消息。 - 会话结束:SessionDigest 从消息提炼摘要,DailyLog 追加。 - 稳定事实变化:ProjectMemory 更新 MEMORY.md。