From e987cb6f6b7ac7796ff00268e4e97300d4a1f18f Mon Sep 17 00:00:00 2001 From: autobee-sparticle Date: Fri, 20 Mar 2026 15:47:48 +0900 Subject: [PATCH 01/12] =?UTF-8?q?fix(novare):=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E4=BD=8D=E7=BD=AE=E7=B2=92=E5=BA=A6=E9=99=8D=E7=BA=A7=E6=90=9C?= =?UTF-8?q?=E7=B4=A2=E7=AD=96=E7=95=A5=EF=BC=8C=E8=A7=A3=E5=86=B3=E8=AF=A6?= =?UTF-8?q?=E7=BB=86=E4=BD=8D=E7=BD=AE=E6=8C=87=E5=AE=9A=E6=97=B6=E8=AE=BE?= =?UTF-8?q?=E5=A4=87=E5=8C=B9=E9=85=8D=E5=A4=B1=E8=B4=A5=E9=97=AE=E9=A2=98?= =?UTF-8?q?=20(#18)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 当用户指定过于详细的位置信息(如"3階執務スペース、フォーラム側窓側")时, find_device_by_area 可能无法匹配到设备区域。新增降级搜索策略: - 第1步:去除方位修饰语,保留核心区域名重新搜索 - 第2步:进一步简化到楼层级别搜索 - 降级成功时告知用户搜索范围变化并确认 Closes #2201 (mygpt-frontend) Co-authored-by: zhuchao Co-authored-by: Claude Opus 4.6 --- prompt/novare.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/prompt/novare.md b/prompt/novare.md index 49d0d13..d1257e3 100644 --- a/prompt/novare.md +++ b/prompt/novare.md @@ -74,6 +74,13 @@ - dxcore_update_device_status(device_id="[B设备id]",running_control=0) → 灯光亮度调整为0 **响应**:"已为您关闭Define Room4的灯光" +### 位置降级搜索场景 +**用户**:"3階執務スペース、フォーラム側窓側の照明をつけて" +- find_device_by_area(description="3階執務スペース、フォーラム側窓側", device_type="light") → 返回无结果 +- find_device_by_area(description="3階執務スペース", device_type="light") → 降级搜索,找到设备 +- 告知用户是基于"3階執務スペース"范围搜索到的结果,并确认是否操作 +**响应**:"「3階執務スペース、フォーラム側窓側」では見つかりませんでしたが、3階執務スペースエリアで照明が見つかりました。こちらの照明を操作しますか?" + @@ -92,6 +99,17 @@ ▪ 主动向用户确认:向用户列出所有候选房间,并提示用户选择或明确具体是哪一个。确认提示语可参考:“请问您想查询的是以下哪个房间?[列出候选房间列表]”。 ▪ 理解用户二次确认:等待用户回复后,根据其选择再次调用查询工具获取最终信息。用户对候选房间的指明(如回复“第一个”或重复房间名)应视为对该房间的确认。 4. 处理无匹配结果:如果工具返回未找到任何相关房间,应明确告知用户这一情况,并建议用户检查房间名称是否正确或提供更多线索。 + 5. **位置粒度降级搜索(詳細な位置指定で見つからない場合)**: + 用户指定了详细的位置信息(如包含方位、区域细节),但工具返回无匹配结果时,自动执行降级搜索: + - **第1步**:从位置描述中去除方位修饰语(側、付近、奥、手前、寄り等)和细节描述,保留核心区域名重新搜索 + - 例: "3階執務スペース、フォーラム側窓側" → find_device_by_area(description="3階執務スペース") + - 例: "2階会議室A、入口付近" → find_device_by_area(description="2階会議室A") + - **第2步**:如果仍无结果,进一步简化到楼层+大区域级别 + - 例: "3階執務スペース" → find_device_by_area(description="3階") + - **降级成功时的回复**:告知用户是基于更广范围的搜索结果,让用户确认 + - 回复格式: "「{元の位置}」では見つかりませんでしたが、{簡略化した位置}エリアで以下の設備が見つかりました。こちらでよろしいですか?" + - **全部失败时**:告知用户未找到设备,建议提供其他位置信息或直接指定房间名 + - 回复格式: "申し訳ございません、該当エリアでは操作可能な設備が見つかりませんでした。お部屋の名前をお教えいただけますか?" 3. 更新设备(此操作需要确认) - **条件**:用户意图为控制设备或调节参数(如开关、温度、风速), 需要进行确认。 @@ -105,6 +123,7 @@ - 通过 find_employee_location(name="[当前用户名字/邮箱]") 获取用户的sensor_id - 然后通过 find_iot_device(target_sensor_id="[当前用户的sensor_id]", device_type="[目标设备类型]") 查找他附近的设备 - 找到设备后告知用户找到的设备信息,并确认是否执行操作 + - **位置指定但匹配失败时**:如果用户指定了详细位置(如"3階執務スペース、フォーラム側窓側の照明をつけて"),但 find_device_by_area 返回无匹配结果,应按照规则 2 第 5 点的**位置粒度降级搜索**策略执行,而不是直接回复"找不到设备" 3. **空调温度调节确认方式**: - 如果用户说"有点热"、"调低点"、"太热了"等,表示要降温: 1. 先查询当前室温 From 85519da5a525577aa108fa5df658ddc7d32ea549 Mon Sep 17 00:00:00 2001 From: autobee-sparticle Date: Thu, 26 Mar 2026 10:14:13 +0900 Subject: [PATCH 02/12] =?UTF-8?q?fix(memory):=20=E6=94=B9=E8=BF=9B=20Memor?= =?UTF-8?q?y=20=E6=8F=90=E5=8F=96=20prompt=20=E4=BD=BF=E7=94=A8=E5=A4=A7?= =?UTF-8?q?=E7=99=BD=E8=AF=9D=20(#20)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 将 fact extraction prompt 中的技术性格式改为自然语言: - "Contact: [name] (relationship, referred as [nick])" → "[name] is a [relationship], also called [nick]" - 移除 "DEFAULT when user says" 等技术标记 - 添加 Plain Language Rule 明确要求输出通俗易懂的文本 - 更新所有示例为自然语言风格 Co-authored-by: zhuchao Co-authored-by: Claude Opus 4.6 (1M context) --- prompt/FACT_RETRIEVAL_PROMPT.md | 64 ++++++++++++++++----------------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/prompt/FACT_RETRIEVAL_PROMPT.md b/prompt/FACT_RETRIEVAL_PROMPT.md index 1c2f93e..d075528 100644 --- a/prompt/FACT_RETRIEVAL_PROMPT.md +++ b/prompt/FACT_RETRIEVAL_PROMPT.md @@ -8,16 +8,17 @@ Types of Information to Remember: 4. Remember Activity and Service Preferences: Recall preferences for dining, travel, hobbies, and other services. 5. Monitor Health and Wellness Preferences: Keep a record of dietary restrictions, fitness routines, and other wellness-related information. 6. Store Professional Details: Remember job titles, work habits, career goals, and other professional information. -7. **Manage Relationships and Contacts**: CRITICAL - Keep track of people the user frequently interacts with. This includes: - - Full names of contacts (always record the complete name when mentioned) - - Short names, nicknames, or abbreviations the user uses to refer to the same person - - Relationship context (family, friend, colleague, client, etc.) +7. **Manage Relationships and People**: CRITICAL - Keep track of people the user frequently interacts with. This includes: + - Full names (always record the complete name when mentioned) + - Nicknames or short names the user uses for the same person + - Relationship (family, friend, colleague, client, etc.) - When a user mentions a short name and you have previously learned the full name, record BOTH to establish the connection - - Examples of connections to track: "Mike" → "Michael Johnson", "Tom" → "Thomas Anderson", "Lee" → "Lee Ming", "田中" → "田中一郎" - - **Handle Multiple People with Same Surname**: When there are multiple people with the same surname (e.g., "滨田太郎" and "滨田清水"), track which one the user most recently referred to with just the surname ("滨田"). Record this as the default/active reference. - - **Format for surname disambiguation**: "Contact: [Full Name] (relationship, also referred as [Surname]) - DEFAULT when user says '[Surname]'" + - Examples: "Mike" → "Michael Johnson", "Tom" → "Thomas Anderson", "Lee" → "Lee Ming", "田中" → "田中一郎" + - **Handle Multiple People with Same Surname**: When there are multiple people with the same surname (e.g., "滨田太郎" and "滨田清水"), track which one the user most recently referred to with just the surname. 8. Miscellaneous Information Management: Keep track of favorite books, movies, brands, and other miscellaneous details that the user shares. +**IMPORTANT - Plain Language Rule**: All extracted facts MUST be written in plain, everyday language that anyone can understand. Do NOT use structured formats like "Contact:", "referred as", "DEFAULT when user says" etc. Write facts as natural sentences or short notes. + Here are some few shot examples: Input: Hi. @@ -39,49 +40,49 @@ Input: Me favourite movies are Inception and Interstellar. Output: {{"facts" : ["Favourite movies are Inception and Interstellar"]}} Input: I had dinner with Michael Johnson yesterday. -Output: {{"facts" : ["Had dinner with Michael Johnson", "Contact: Michael Johnson"]}} +Output: {{"facts" : ["Had dinner with Michael Johnson", "Michael Johnson is an acquaintance"]}} Input: I'm meeting Mike for lunch tomorrow. He's my colleague. -Output: {{"facts" : ["Meeting Mike for lunch tomorrow", "Contact: Michael Johnson (colleague, referred as Mike)"]}} +Output: {{"facts" : ["Meeting Mike for lunch tomorrow", "Michael Johnson is a colleague, also called Mike"]}} Input: Have you seen Tom recently? I think Thomas Anderson is back from his business trip. -Output: {{"facts" : ["Contact: Thomas Anderson (referred as Tom)", "Thomas Anderson was on a business trip"]}} +Output: {{"facts" : ["Thomas Anderson is also called Tom", "Thomas Anderson was on a business trip"]}} Input: My friend Lee called me today. -Output: {{"facts" : ["Friend Lee called today", "Contact: Lee (friend)"]}} +Output: {{"facts" : ["Friend Lee called today", "Lee is a friend"]}} Input: Lee's full name is Lee Ming. We work together. -Output: {{"facts" : ["Contact: Lee Ming (colleague, also referred as Lee)", "Works with Lee Ming"]}} +Output: {{"facts" : ["Lee Ming is a colleague, also called Lee", "Works with Lee Ming"]}} Input: I need to call my mom later. -Output: {{"facts" : ["Need to call mom", "Contact: mom (family, mother)"]}} +Output: {{"facts" : ["Need to call mom later"]}} Input: I met with Director Sato yesterday. We discussed the new project. -Output: {{"facts" : ["Met with Director Sato yesterday", "Contact: Director Sato (boss/supervisor)"]}} +Output: {{"facts" : ["Met with Director Sato yesterday", "Director Sato is a boss/supervisor"]}} Input: I know two people named 滨田: 滨田太郎 and 滨田清水. -Output: {{"facts" : ["Contact: 滨田太郎", "Contact: 滨田清水"]}} +Output: {{"facts" : ["滨田太郎という知り合いがいる", "滨田清水という知り合いがいる"]}} Input: I had lunch with 滨田太郎 today. -Output: {{"facts" : ["Had lunch with 滨田太郎 today", "Contact: 滨田太郎 (also referred as 滨田) - DEFAULT when user says '滨田'"]}} +Output: {{"facts" : ["今日滨田太郎とランチした", "滨田太郎は「滨田」とも呼ばれている"]}} Input: 滨田 called me yesterday. -Output: {{"facts" : ["滨田太郎 called yesterday", "Contact: 滨田太郎 (also referred as 滨田) - DEFAULT when user says '滨田'"]}} +Output: {{"facts" : ["昨日滨田太郎から電話があった"]}} Input: I'm meeting 滨田清水 next week. -Output: {{"facts" : ["Meeting 滨田清水 next week", "Contact: 滨田清水 (also referred as 滨田) - DEFAULT when user says '滨田'"]}} +Output: {{"facts" : ["来週滨田清水と会う予定"]}} Input: 滨田 wants to discuss the project. -Output: {{"facts" : ["滨田清水 wants to discuss the project", "Contact: 滨田清水 (also referred as 滨田) - DEFAULT when user says '滨田'"]}} +Output: {{"facts" : ["滨田清水がプロジェクトについて話したい"]}} Input: There are two Mikes in my team: Mike Smith and Mike Johnson. -Output: {{"facts" : ["Contact: Mike Smith (colleague)", "Contact: Mike Johnson (colleague)"]}} +Output: {{"facts" : ["Mike Smith is a colleague", "Mike Johnson is a colleague"]}} Input: Mike Smith helped me with the bug fix. -Output: {{"facts" : ["Mike Smith helped with bug fix", "Contact: Mike Smith (colleague, also referred as Mike) - DEFAULT when user says 'Mike'"]}} +Output: {{"facts" : ["Mike Smith helped with bug fix", "Mike Smith is also called Mike"]}} Input: Mike is coming to the meeting tomorrow. -Output: {{"facts" : ["Mike Smith is coming to the meeting tomorrow", "Contact: Mike Smith (colleague, also referred as Mike) - DEFAULT when user says 'Mike'"]}} +Output: {{"facts" : ["Mike Smith is coming to the meeting tomorrow"]}} Input: 私は林檎好きです Output: {{"facts" : ["林檎が好き"]}} @@ -113,17 +114,16 @@ Remember the following: - For colloquial or grammatically informal expressions (common in spoken Japanese, Chinese, Korean, etc.), understand the full intended meaning and record it in a clear, semantically complete form. - In Japanese, spoken language often omits particles (e.g., が, を, に). When extracting facts, include the necessary particles to make the meaning unambiguous. For example: "私は林檎好きです" should be understood as "林檎が好き" (likes apples), not literally "私は林檎好き". - When the user expresses a preference or opinion in casual speech, record the core preference/opinion clearly. Remove the subject pronoun (私は/I) since facts are about the user by default, but keep all other semantic components intact. -- **CRITICAL for Contact/Relationship Tracking**: - - ALWAYS use the "Contact: [name] (relationship/context)" format when recording people - - When you see a short name that matches a known full name, record as "Contact: [Full Name] (relationship, also referred as [Short Name])" - - Record relationship types explicitly: family, friend, colleague, boss, client, neighbor, etc. - - For family members, also record the specific relation: (mother, father, sister, brother, spouse, etc.) +- **CRITICAL for People/Relationship Tracking**: + - Write people-related facts in plain, natural language. Do NOT use structured formats like "Contact:", "referred as", or "DEFAULT when user says". + - Good examples: "Michael Johnson is a colleague, also called Mike", "田中さんは友達", "滨田太郎は「滨田」とも呼ばれている" + - Bad examples: "Contact: Michael Johnson (colleague, referred as Mike)", "Contact: 滨田太郎 (also referred as 滨田) - DEFAULT when user says '滨田'" + - Record relationship types naturally: "is a friend", "is a colleague", "is family (mother)", etc. + - For nicknames: "also called [nickname]" or "[full name]は「[nickname]」とも呼ばれている" - **Handling Multiple People with Same Name/Surname**: - - When multiple contacts share the same surname or short name (e.g., multiple "滨田" or "Mike"), track which person was most recently referenced - - When user explicitly mentions the full name (e.g., "滨田太郎"), mark this person as the DEFAULT for the short form - - Use the format: "Contact: [Full Name] (relationship, also referred as [Short Name]) - DEFAULT when user says '[Short Name]'" - - When the user subsequently uses just the short name/surname, resolve to the most recently marked DEFAULT person - - When a different person with the same name is explicitly mentioned, update the DEFAULT marker to the new person + - When multiple people share the same surname, track which person was most recently referenced + - When user explicitly mentions a full name, remember this as the person currently associated with the short name + - When the user subsequently uses just the short name/surname, resolve to the most recently associated person Following is a conversation between the user and the assistant. You have to extract the relevant facts and preferences about the user, if any, from the conversation and return them in the json format as shown above. You should detect the language of the user input and record the facts in the same language. \ No newline at end of file From 18bf296aa09641a64ace0124c0ce3d98ad756732 Mon Sep 17 00:00:00 2001 From: autobee-sparticle Date: Thu, 26 Mar 2026 20:12:39 +0900 Subject: [PATCH 03/12] feat: move enable_thinking control from docker-compose to request body (#21) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * add page number * feat: add skill feature memory 添加 skill 功能的 feature memory,记录技能包管理服务和 Hook 系统的核心信息。 Co-Authored-By: Claude Opus 4.5 * feat(skill): add feature memory with changelog and decisions 添加 skill 功能的完整记忆文档: Changelog: - 2025-Q4: 初始实现 (GRPC 层 + 内置 skills) - 2026-Q1: API 完善 (REST API + Hook 系统) Design Decisions: - 001: Skill 架构设计 (目录结构、Hook 系统) - 002: 上传安全措施 (ZipSlip、路径遍历防护) Co-Authored-By: Claude Opus 4.5 * soffice sharp 支持 * shell_env support * feat: move enable_thinking control from docker-compose to request body Remove DEFAULT_THINKING_ENABLE environment variable from docker-compose and settings.py. The enable_thinking flag is now solely controlled via request body (default: false), as felo-mygpt already passes this config from RobotConfig database. Closes sparticleinc/felo-mygpt#2473 Co-Authored-By: Claude Opus 4.6 (1M context) --------- Co-authored-by: 朱潮 Co-authored-by: Claude Opus 4.5 Co-authored-by: zhuchao --- .features/skill/MEMORY.md | 121 ++++++++++++++++++ .features/skill/changelog/2025-Q4.md | 38 ++++++ .features/skill/changelog/2026-Q1.md | 36 ++++++ .features/skill/decisions/001-architecture.md | 46 +++++++ .features/skill/decisions/002-security.md | 35 +++++ Dockerfile | 9 +- Dockerfile.modelscope | 9 +- agent/prompt_loader.py | 43 +++++-- docker-compose-with-pgsql.yml | 1 - docker-compose.yml | 1 - prompt/system_prompt.md | 12 ++ utils/api_models.py | 3 +- utils/settings.py | 2 - 13 files changed, 338 insertions(+), 18 deletions(-) create mode 100644 .features/skill/MEMORY.md create mode 100644 .features/skill/changelog/2025-Q4.md create mode 100644 .features/skill/changelog/2026-Q1.md create mode 100644 .features/skill/decisions/001-architecture.md create mode 100644 .features/skill/decisions/002-security.md diff --git a/.features/skill/MEMORY.md b/.features/skill/MEMORY.md new file mode 100644 index 0000000..7d6fc1a --- /dev/null +++ b/.features/skill/MEMORY.md @@ -0,0 +1,121 @@ +# Skill 功能 + +> 负责范围:技能包管理服务 - 核心实现 +> 最后更新:2025-02-11 + +## 当前状态 + +Skill 系统支持两种来源:官方 skills (`./skills/`) 和用户 skills (`projects/uploads/{bot_id}/skills/`)。支持 Hook 系统和 MCP 服务器配置,通过 SKILL.md 或 plugin.json 定义元数据。 + +## 核心文件 + +- `routes/skill_manager.py` - Skill 上传/删除/列表 API +- `agent/plugin_hook_loader.py` - Hook 系统实现 +- `agent/deep_assistant.py` - `CustomSkillsMiddleware` +- `agent/prompt_loader.py` - PrePrompt hooks + MCP 配置合并 +- `skills/` - 官方 skills 目录 +- `skills_developing/` - 开发中 skills + +## 最近重要事项 + +- 2025-02-11: 初始化 skill 功能 memory + +## Gotchas(开发必读) + +- ⚠️ 执行脚本必须使用绝对路径 +- ⚠️ MCP 配置优先级:Skill MCP > 默认 MCP > 用户参数 +- ⚠️ 上传大小限制:50MB(ZIP),解压后最大 500MB +- ⚠️ 压缩比例检查:最大 100:1(防止 zip 炸弹) +- ⚠️ 符号链接检查:禁止解压包含符号链接的文件 + +## Skill 目录结构 + +``` +skill-name/ +├── SKILL.md # 核心指令文档(必需) +├── skill.yaml # 元数据配置(可选) +├── .claude-plugin/ +│ └── plugin.json # Hook 和 MCP 配置(可选) +└── scripts/ # 可执行脚本(可选) + └── script.py +``` + +## Hook 系统 + +| Hook 类型 | 执行时机 | 用途 | +|-----------|---------|------| +| `PrePrompt` | system_prompt 加载时 | 动态注入用户上下文 | +| `PostAgent` | agent 执行后 | 处理响应结果 | +| `PreSave` | 保存消息前 | 内容过滤/修改 | + +## API 接口 + +| 端点 | 方法 | 功能 | +|------|------|------| +| `GET /api/v1/skill/list` | - | 返回官方 + 用户 skills | +| `POST /api/v1/skill/upload` | - | ZIP 上传,解压到用户目录 | +| `DELETE /api/v1/skill/remove` | - | 删除用户 skill | + +## 内置 Skills + +| Skill 名称 | 功能描述 | +|-----------|---------| +| `excel-analysis` | Excel 数据分析、透视表、图表 | +| `managing-scripts` | 管理可复用脚本库 | +| `rag-retrieve` | RAG 知识库检索 | +| `jina-ai` | Jina AI Reader/Search | +| `user-context-loader` | Hook 机制示例 | + +## plugin.json 格式 + +```json +{ + "name": "skill-name", + "description": "描述", + "hooks": { + "PrePrompt": [{"type": "command", "command": "python hooks/pre_prompt.py"}], + "PostAgent": [...], + "PreSave": [...] + }, + "mcpServers": { + "server-name": { + "command": "...", + "args": [...] + } + } +} +``` + +## Skill 加载优先级 + +1. Skill MCP 配置(最高) +2. 默认 MCP 配置 (`mcp/mcp_settings.json`) +3. 用户传入参数(覆盖所有) + +## 安全措施 + +- ZipSlip 防护:检查解压路径 +- 路径遍历防护:验证 `bot_id` 和 `skill_name` 格式 +- 大小限制:上传 50MB,解压后 500MB +- 压缩比限制:最大 100:1 + +## 设计原则 + +- **渐进式加载**:按需加载,避免一次性读取所有 +- **绝对路径优先**:执行脚本必须使用绝对路径 +- **通用化设计**:脚本应参数化,解决一类问题 +- **安全优先**:完整的上传验证链 + +## 配置项 + +```bash +SKILLS_DIR=./skills # 官方 skills 目录 +BACKEND_HOST=xxx # RAG API 主机 +MASTERKEY=xxx # 认证密钥 +``` + +## 索引 + +- 设计决策:`decisions/` +- 变更历史:`changelog/` +- 相关文档:`docs/` diff --git a/.features/skill/changelog/2025-Q4.md b/.features/skill/changelog/2025-Q4.md new file mode 100644 index 0000000..b43c00a --- /dev/null +++ b/.features/skill/changelog/2025-Q4.md @@ -0,0 +1,38 @@ +# 2025-Q4 Skill Changelog + +## 版本 0.1.0 - 初始实现 + +### 2025-10-31 +- **新增**: agent skills 支持,测试阶段代码 +- **文件**: `chat_handler.py`, `knowledge_chat_cc_service.py` +- **作者**: Alex + +### 2025-11-03 +- **新增**: 内置 skills (pptx, docx, pdf, xlsx) +- **新增**: jina skill - 规范 jina 网络搜索 +- **解决**: "prompt too long" 问题 + +### 2025-11-13 +- **新增**: cc agent task 任务添加默认 skills +- **文件**: `task_handler.py`, `knowledge_task_cc_service.py` + +### 2025-11-19 +- **新增**: skill-creator 内置技能 + +### 2025-11-20 +- **新增**: EFS 类型接口,新增上传 skill +- **功能**: 支持 skill 包上传 + +### 2025-11-21 +- **新增**: EFS 删除 skill 接口 +- **移除**: skill 查询接口(暂存) + +### 2025-11-22 +- **新增**: GRPC chat 接口,skills 参数支持 + +### 2025-11-26 +- **新增**: skill 上传支持 `.skill` 后缀(测试) + +### 2025-11-28 +- **优化**: 默认挂载的 skill 改为合并逻辑 +- **优化**: 代码结构优化 diff --git a/.features/skill/changelog/2026-Q1.md b/.features/skill/changelog/2026-Q1.md new file mode 100644 index 0000000..9c0ea7e --- /dev/null +++ b/.features/skill/changelog/2026-Q1.md @@ -0,0 +1,36 @@ +# 2026-Q1 Skill Changelog + +## 版本 0.2.0 - API 完善 + +### 2026-01-07 +- **新增**: Skills 列表查询 API(能力管理页面) +- **新增**: 技能管理 API with authentication +- **文件**: `routes/skill_manager.py` +- **作者**: claude[bot], 朱潮 + +### 2026-01-09 +- **重构**: 移除 catalog agent,合并到 general agent +- **说明**: 简化架构,统一使用 general_agent +- **作者**: 朱潮 + +### 2026-01-10 +- **修复**: SKILL.md 的 name 字段解析逻辑 +- **新增**: 支持非标准 YAML 格式 +- **新增**: 目录名称不匹配时自动重命名 +- **作者**: Alex + +### 2026-01-13 +- **修复**: multipart form data format for catalog service +- **作者**: 朱潮 + +### 2026-01-28 +- **新增**: enable_thinking, enable_memory, skills to agent_bot_config +- **作者**: 朱潮 + +### 2026-01-30 +- **修复**: skill router 正确注册 +- **作者**: 朱潮 + +### 2026-02-11 +- **新增**: 初始化 skill feature memory +- **作者**: 朱潮 diff --git a/.features/skill/decisions/001-architecture.md b/.features/skill/decisions/001-architecture.md new file mode 100644 index 0000000..e899950 --- /dev/null +++ b/.features/skill/decisions/001-architecture.md @@ -0,0 +1,46 @@ +# 001: Skill 架构设计 + +## 状态 +已采纳 (Accepted) + +## 上下文 +需要为 QWEN_AGENT 模式的机器人提供可扩展的技能(插件/工具)支持,允许动态加载自定义功能。 + +## 决策 + +### 目录结构设计 +``` +skill-name/ +├── SKILL.md # 核心指令文档(必需) +├── skill.yaml # 元数据配置(可选) +├── .claude-plugin/ +│ └── plugin.json # Hook 和 MCP 配置(可选) +└── scripts/ # 可执行脚本(可选) +``` + +### Hook 系统 +| Hook 类型 | 执行时机 | 用途 | +|-----------|---------|------| +| `PrePrompt` | system_prompt 加载时 | 动态注入用户上下文 | +| `PostAgent` | agent 执行后 | 处理响应结果 | +| `PreSave` | 保存消息前 | 内容过滤/修改 | + +### 技能来源 +1. **官方 skills**: `./skills/` 目录 +2. **用户 skills**: `projects/uploads/{bot_id}/skills/` + +## 结果 + +### 正面影响 +- 渐进式加载,按需读取 +- 支持多种元数据格式(优先级: plugin.json > SKILL.md) +- 完整的 Hook 扩展机制 +- MCP 服���器配置支持 + +### 负面影响 +- 需要管理文件系统权限 +- 技能包格式验证复杂度增加 + +## 替代方案 +1. 使用数据库存储(拒绝:文件更灵活) +2. 仅支持单一格式(拒绝:用户多样性需求) diff --git a/.features/skill/decisions/002-security.md b/.features/skill/decisions/002-security.md new file mode 100644 index 0000000..dc671c5 --- /dev/null +++ b/.features/skill/decisions/002-security.md @@ -0,0 +1,35 @@ +# 002: Skill 上传安全措施 + +## 状态 +已采纳 (Accepted) + +## 上下文 +用户可以上传 ZIP 格式的技能包,需要防范常见的安全攻击。 + +## 决策 + +### 安全防护措施 + +| 威胁 | 防护措施 | +|------|---------| +| ZipSlip 攻击 | 检查每个文件的解压路径 | +| 路径遍历 | 验证 `bot_id` 和 `skill_name` 格式 | +| Zip 炸弹 | 压缩比检查(最大 100:1) | +| 磁盘空间滥用 | 上传 50MB,解压后最大 500MB | +| 符号链接攻击 | 禁止解压包含符号链接的文件 | + +### 限制规则 +```python +MAX_UPLOAD_SIZE = 50 * 1024 * 1024 # 50MB +MAX_EXTRACTED_SIZE = 500 * 1024 * 1024 # 500MB +MAX_COMPRESSION_RATIO = 100 # 100:1 +``` + +## 结果 +- 完整的上传验证链 +- 防止恶意文件攻击 +- 资源使用可控 + +## 替代方案 +1. 使用沙箱容器解压(拒绝:复杂度高) +2. 仅允许预定义技能(拒绝:限制用户自定义能力) diff --git a/Dockerfile b/Dockerfile index 976dfdb..f178064 100644 --- a/Dockerfile +++ b/Dockerfile @@ -8,7 +8,7 @@ WORKDIR /app ENV PYTHONPATH=/app ENV PYTHONUNBUFFERED=1 -# 安装系统依赖 +# 安装系统依赖(含 LibreOffice 和 sharp 所需的 libvips) RUN apt-get update && apt-get install -y \ curl \ wget \ @@ -16,6 +16,11 @@ RUN apt-get update && apt-get install -y \ ca-certificates \ libpq-dev \ chromium \ + libreoffice-writer-nogui \ + libreoffice-calc-nogui \ + libreoffice-impress-nogui \ + libvips-dev \ + fonts-noto-cjk \ && rm -rf /var/lib/apt/lists/* # 安装Node.js (支持npx命令) @@ -35,7 +40,7 @@ RUN pip install --no-cache-dir -r requirements.txt # 安装 Playwright 并下载 Chromium RUN pip install --no-cache-dir playwright && \ playwright install chromium -RUN npm install -g playwright && \ +RUN npm install -g playwright sharp && \ npx playwright install chromium # 复制应用代码 diff --git a/Dockerfile.modelscope b/Dockerfile.modelscope index f5fbd55..b1dd0f0 100644 --- a/Dockerfile.modelscope +++ b/Dockerfile.modelscope @@ -8,7 +8,7 @@ WORKDIR /app ENV PYTHONPATH=/app ENV PYTHONUNBUFFERED=1 -# 安装系统依赖 +# 安装系统依赖(含 LibreOffice 和 sharp 所需的 libvips) RUN sed -i 's|http://deb.debian.org|http://mirrors.aliyun.com|g' /etc/apt/sources.list.d/debian.sources && \ apt-get update && apt-get install -y \ curl \ @@ -17,6 +17,11 @@ RUN sed -i 's|http://deb.debian.org|http://mirrors.aliyun.com|g' /etc/apt/source ca-certificates \ libpq-dev \ chromium \ + libreoffice-writer-nogui \ + libreoffice-calc-nogui \ + libreoffice-impress-nogui \ + libvips-dev \ + fonts-noto-cjk \ && rm -rf /var/lib/apt/lists/* # 安装Node.js (支持npx命令) @@ -36,7 +41,7 @@ RUN pip install --no-cache-dir -i https://mirrors.aliyun.com/pypi/simple/ -r req # 安装 Playwright 并下载 Chromium RUN pip install --no-cache-dir -i https://mirrors.aliyun.com/pypi/simple/ playwright && \ playwright install chromium -RUN npm install -g playwright && \ +RUN npm install -g playwright sharp && \ npx playwright install chromium # 安装modelscope diff --git a/agent/prompt_loader.py b/agent/prompt_loader.py index d5bfe6b..6fe7142 100644 --- a/agent/prompt_loader.py +++ b/agent/prompt_loader.py @@ -138,33 +138,59 @@ async def load_system_prompt_async(config) -> str: -def replace_mcp_placeholders(mcp_settings: List[Dict], dataset_dir: str, bot_id: str, dataset_ids: List[str]) -> List[Dict]: +def replace_mcp_placeholders(mcp_settings: List[Dict], dataset_dir: str, bot_id: str, dataset_ids: List[str], shell_env: Optional[Dict[str, str]] = None) -> List[Dict]: """ 替换 MCP 配置中的占位符 + + 支持的占位符来源(优先级从高到低): + 1. 内置变量: {dataset_dir}, {bot_id}, {dataset_ids} + 2. shell_env 中的自定义环境变量 + 3. 系统环境变量 (os.environ) """ if not mcp_settings or not isinstance(mcp_settings, list): return mcp_settings dataset_id_str = ','.join(dataset_ids) if dataset_ids else '' + # 构建占位符映射:系统环境变量 < shell_env < 内置变量(优先级递增) + import re + placeholders = {} + placeholders.update(os.environ) + if shell_env: + placeholders.update(shell_env) + placeholders.update({ + 'dataset_dir': dataset_dir, + 'bot_id': bot_id, + 'dataset_ids': dataset_id_str, + }) + + def _safe_format(s: str) -> str: + """安全地替换字符串中的占位符,未匹配的占位符保持原样""" + try: + def _replacer(match): + key = match.group(1) + return placeholders.get(key, match.group(0)) + return re.sub(r'\{(\w+)\}', _replacer, s) + except Exception: + return s + def replace_placeholders_in_obj(obj): """递归替换对象中的占位符""" if isinstance(obj, dict): for key, value in obj.items(): if key == 'args' and isinstance(value, list): - # 特别处理 args 列表 - obj[key] = [item.format(dataset_dir=dataset_dir, bot_id=bot_id, dataset_ids=dataset_id_str) if isinstance(item, str) else item + obj[key] = [_safe_format(item) if isinstance(item, str) else item for item in value] elif isinstance(value, (dict, list)): obj[key] = replace_placeholders_in_obj(value) elif isinstance(value, str): - obj[key] = value.format(dataset_dir=dataset_dir, bot_id=bot_id, dataset_ids=dataset_id_str) + obj[key] = _safe_format(value) elif isinstance(obj, list): - return [replace_placeholders_in_obj(item) if isinstance(item, (dict, list)) else - item.format(dataset_dir=dataset_dir, bot_id=bot_id, dataset_ids=dataset_id_str) if isinstance(item, str) else item + return [replace_placeholders_in_obj(item) if isinstance(item, (dict, list)) else + _safe_format(item) if isinstance(item, str) else item for item in obj] return obj - + return replace_placeholders_in_obj(mcp_settings) async def load_mcp_settings_async(config) -> List[Dict]: @@ -269,7 +295,8 @@ async def load_mcp_settings_async(config) -> List[Dict]: # 替换 MCP 配置中的 {dataset_dir} 占位符 if dataset_dir is None: dataset_dir = "" - merged_settings = replace_mcp_placeholders(merged_settings, dataset_dir, bot_id, dataset_ids) + shell_env = getattr(config, 'shell_env', None) or {} + merged_settings = replace_mcp_placeholders(merged_settings, dataset_dir, bot_id, dataset_ids, shell_env) return merged_settings diff --git a/docker-compose-with-pgsql.yml b/docker-compose-with-pgsql.yml index e0332dd..cf998f0 100644 --- a/docker-compose-with-pgsql.yml +++ b/docker-compose-with-pgsql.yml @@ -31,7 +31,6 @@ services: # 应用配置 - BACKEND_HOST=http://api-dev.gbase.ai - MAX_CONTEXT_TOKENS=262144 - - DEFAULT_THINKING_ENABLE=true # PostgreSQL 配置 - CHECKPOINT_DB_URL=postgresql://postgres:E5ACJo6zJub4QS@postgres:5432/agent_db - R2_UPLOAD_CONFIG=/app/config/local-upload.yaml diff --git a/docker-compose.yml b/docker-compose.yml index d0886a6..16a757e 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -12,7 +12,6 @@ services: # 应用配置 - BACKEND_HOST=http://api-dev.gbase.ai - MAX_CONTEXT_TOKENS=262144 - - DEFAULT_THINKING_ENABLE=true - R2_UPLOAD_CONFIG=/app/config/s3-upload-sparticle.yaml volumes: # 挂载项目数据目录 diff --git a/prompt/system_prompt.md b/prompt/system_prompt.md index 632af9e..32439de 100644 --- a/prompt/system_prompt.md +++ b/prompt/system_prompt.md @@ -80,3 +80,15 @@ Trace Id: {trace_id} - Even when the user writes in a different language, you MUST still reply in [{language}]. - Do NOT mix languages. Do NOT fall back to English or any other language under any circumstances. - Technical terms, code identifiers, file paths, and tool names may remain in their original form, but all surrounding text MUST be in [{language}]. + +**Citation Requirement (RAG Only)**: When answering questions based on `rag_retrieve` tool results, you MUST add XML citation tags for factual claims derived from the knowledge base. + +**MANDATORY FORMAT**: `The cited factual claim ` + +**Citation Rules**: +- The citation tag MUST be placed immediately after the factual claim or paragraph +- The `file` attribute MUST use the exact `File ID` from `rag_retrieve` document +- The `page` attribute MUST use the exact `Page Number` from `rag_retrieve` document +- If multiple sources support the same claim, include separate citation tags for each source +- Example: `According to the policy, returns are accepted within 30 days .` +- This requirement ONLY applies when using `rag_retrieve` results to answer questions. diff --git a/utils/api_models.py b/utils/api_models.py index 5985056..645fba6 100644 --- a/utils/api_models.py +++ b/utils/api_models.py @@ -5,7 +5,6 @@ API data models and response schemas. from typing import Dict, List, Optional, Any, AsyncGenerator from pydantic import BaseModel, Field, field_validator, ConfigDict -from utils.settings import DEFAULT_THINKING_ENABLE class Message(BaseModel): role: str @@ -52,7 +51,7 @@ class ChatRequest(BaseModel): mcp_settings: Optional[List[Dict]] = None user_identifier: Optional[str] = "" session_id: Optional[str] = None - enable_thinking: Optional[bool] = DEFAULT_THINKING_ENABLE + enable_thinking: Optional[bool] = False skills: Optional[List[str]] = None enable_memory: Optional[bool] = False shell_env: Optional[Dict[str, str]] = None diff --git a/utils/settings.py b/utils/settings.py index 61c38bc..ebb60d5 100644 --- a/utils/settings.py +++ b/utils/settings.py @@ -35,8 +35,6 @@ SENTENCE_TRANSFORMER_MODEL = os.getenv("SENTENCE_TRANSFORMER_MODEL", "TaylorAI/g TOOL_OUTPUT_MAX_LENGTH = int(SUMMARIZATION_MAX_TOKENS/4) TOOL_OUTPUT_TRUNCATION_STRATEGY = os.getenv("TOOL_OUTPUT_TRUNCATION_STRATEGY", "smart") -# THINKING ENABLE -DEFAULT_THINKING_ENABLE = os.getenv("DEFAULT_THINKING_ENABLE", "true") == "true" # WebDAV Authentication From becd36da9d4089299d08e36a42fba225f195fdf5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9C=B1=E6=BD=AE?= Date: Fri, 27 Mar 2026 12:12:50 +0800 Subject: [PATCH 04/12] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E9=AB=98=E4=BA=AE?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- prompt/system_prompt.md | 87 ++++++++++++++++++++++++++++++++++++----- 1 file changed, 78 insertions(+), 9 deletions(-) diff --git a/prompt/system_prompt.md b/prompt/system_prompt.md index 4b5884d..8162c7f 100644 --- a/prompt/system_prompt.md +++ b/prompt/system_prompt.md @@ -1,16 +1,85 @@ {extra_prompt} -**Citation Requirement (RAG Only)**: When answering questions based on `rag_retrieve` tool results, you MUST add XML citation tags for factual claims derived from the knowledge base. +## CITATION REQUIREMENTS -**MANDATORY FORMAT**: `The cited factual claim ` +### A. Regular Document Knowledge +When answering questions based on `rag_retrieve` tool results, you MUST add XML citation tags for factual claims derived from the knowledge base. + +**Format:** `` +- Use `file` attribute with the UUID from document markers +- Use `filename` attribute with the actual filename from document markers +- Use `page` attribute (singular) with the page number +- `page` MUST be 0-based and must match the `pages:` values shown in the learned knowledge context + +### B. Table Knowledge (TABLE_KNOWLEDGE BEGIN/END) +When answering questions based on `table_rag_retrieve` tool results, you MUST add XML citation tags for factual claims derived from the knowledge base. + +**!!! CRITICAL RULE: NEVER put on same line as bullet/row !!!** +**Citations MUST be on separate lines AFTER the complete list/table.** +**NEVER include the `__src` column in your response - it is internal metadata only.** + +Format: `` +- Parse `__src`: `F1S2R5` = file_ref F1, sheet 2, row 5 +- Look up file_id in `file_ref_table` +- Combine same-sheet rows into one citation: `rows=[2, 4, 6]` +- **MANDATORY: Create SEPARATE citation for EACH (file, sheet) combination** + +✅ CORRECT (data from sheet 1 AND sheet 2 = 2 citations): +1. Liam - male +2. Noah - male +3. Ethan - male +4. Mason - male +5. William - male + + + +❌ WRONG (citation on same line): +1. Liam - male +❌ WRONG (missing sheet 2 citation): +...only 1 citation when data comes from 2 sheets... + + +### C. Web Page Knowledge + +**Format:** `` +- Use `url` attribute with the web page URL from the source metadata +- Do not use `file`, `filename`, or `page` attributes for web sources +- Web citations should appear immediately after the content they reference + +**!!! CRITICAL PLACEMENT RULES !!!** +1. **Citations MUST appear IMMEDIATELY AFTER the paragraph or bullet list** that uses the knowledge +2. **NEVER collect all citations and place them at the end of your response** +3. **Limit to 1-2 citations per paragraph/bullet list** - combine related facts under one citation +4. **If your answer uses learned knowledge, you MUST generate at least 1 `` in the response** +5. **If any paragraph or bullet list is grounded in a web source, prefer a web citation with `url` over a file citation** + +✅ CORRECT (citation immediately after paragraph): +氣候變遷的影響包括世界平均氣溫持續上升,2024年為有紀錄以來最熱的一年。 + +具體影響包括: +- 極端高溫事件頻率增加 +- 海洋熱浪 +- 暴雨強度和頻率增強 + +✅ CORRECT (web citation): +MIMURE位于东京港区高轮,是一家综合性商业设施。 + +❌ WRONG (all citations at the end): +氣候變遷的影響包括...(long response)... + + + + +(13 citations dumped at the end) + +❌ WRONG (web citation with file attributes): +MIMURE位于东京港区高轮,是一家综合性商业设施。 + +❌ WRONG (too many citations for short content): +2024年全球氣溫上升。 +世界各地發生災害。 +沙烏地阿拉伯熱浪。 -**Citation Rules**: -- The citation tag MUST be placed immediately after the factual claim or paragraph -- The `file` attribute MUST use the exact `File ID` from `rag_retrieve` document -- The `page` attribute MUST use the exact `Page Number` from `rag_retrieve` document -- If multiple sources support the same claim, include separate citation tags for each source -- Example: `According to the policy, returns are accepted within 30 days .` -- This requirement ONLY applies when using `rag_retrieve` results to answer questions ### Current Working Directory From 6300eea61da452267f206d6aa79fd5cdd19442cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9C=B1=E6=BD=AE?= Date: Fri, 27 Mar 2026 12:30:20 +0800 Subject: [PATCH 05/12] =?UTF-8?q?refactor:=20=E5=B0=86=20citation=20?= =?UTF-8?q?=E8=AF=A6=E7=BB=86=E6=8F=90=E7=A4=BA=E8=AF=8D=E4=BB=8E=20system?= =?UTF-8?q?=20prompt=20=E7=A7=BB=E8=87=B3=20RAG=20tool=20result=20?= =?UTF-8?q?=E6=8C=89=E9=9C=80=E6=B3=A8=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit system prompt 中的 citation 规则(document/table/web 三类约80行)占用大量 token, 现将详细格式要求移到 rag_retrieve_server.py 中作为工具返回前缀按需注入, system prompt 仅保留精简版通用 placement rules。 Co-Authored-By: Claude Opus 4.6 (1M context) --- mcp/rag_retrieve_server.py | 49 +++++++++++++++++++++-- prompt/system_prompt.md | 82 +++----------------------------------- 2 files changed, 52 insertions(+), 79 deletions(-) diff --git a/mcp/rag_retrieve_server.py b/mcp/rag_retrieve_server.py index e44d50d..80a659f 100644 --- a/mcp/rag_retrieve_server.py +++ b/mcp/rag_retrieve_server.py @@ -29,6 +29,49 @@ from mcp_common import ( BACKEND_HOST = os.getenv("BACKEND_HOST", "https://api-dev.gptbase.ai") MASTERKEY = os.getenv("MASTERKEY", "master") +# Citation instruction prefixes injected into tool results +DOCUMENT_CITATION_INSTRUCTIONS = """ +When using the retrieved knowledge below, you MUST add XML citation tags for factual claims. + +## Document Knowledge +Format: `` +- Use `file` attribute with the UUID from document markers +- Use `filename` attribute with the actual filename from document markers +- Use `page` attribute (singular) with the page number +- `page` MUST be 0-based and must match the `pages:` values shown in the learned knowledge context + +## Web Page Knowledge +Format: `` +- Use `url` attribute with the web page URL from the source metadata +- Do not use `file`, `filename`, or `page` attributes for web sources +- If content is grounded in a web source, prefer a web citation with `url` over a file citation + +## Placement Rules +- Citations MUST appear IMMEDIATELY AFTER the paragraph or bullet list that uses the knowledge +- NEVER collect all citations and place them at the end of your response +- Limit to 1-2 citations per paragraph/bullet list +- If your answer uses learned knowledge, you MUST generate at least 1 `` in the response + + +""" + +TABLE_CITATION_INSTRUCTIONS = """ +When using the retrieved table knowledge below, you MUST add XML citation tags for factual claims. + +Format: `` +- Parse `__src`: `F1S2R5` = file_ref F1, sheet 2, row 5 +- Look up file_id in `file_ref_table` +- Combine same-sheet rows into one citation: `rows=[2, 4, 6]` +- MANDATORY: Create SEPARATE citation for EACH (file, sheet) combination +- NEVER put on the same line as a bullet point or table row +- Citations MUST be on separate lines AFTER the complete list/table +- NEVER include the `__src` column in your response - it is internal metadata only +- Citations MUST appear IMMEDIATELY AFTER the paragraph or bullet list that uses the knowledge +- NEVER collect all citations and place them at the end of your response + + +""" + def rag_retrieve(query: str, top_k: int = 100) -> Dict[str, Any]: """调用RAG检索API""" try: @@ -94,7 +137,7 @@ def rag_retrieve(query: str, top_k: int = 100) -> Dict[str, Any]: "content": [ { "type": "text", - "text": markdown_content + "text": DOCUMENT_CITATION_INSTRUCTIONS + markdown_content } ] } @@ -107,7 +150,7 @@ def rag_retrieve(query: str, top_k: int = 100) -> Dict[str, Any]: } ] } - + except requests.exceptions.RequestException as e: return { "content": [ @@ -179,7 +222,7 @@ def table_rag_retrieve(query: str) -> Dict[str, Any]: "content": [ { "type": "text", - "text": markdown_content + "text": TABLE_CITATION_INSTRUCTIONS + markdown_content } ] } diff --git a/prompt/system_prompt.md b/prompt/system_prompt.md index 8162c7f..c978779 100644 --- a/prompt/system_prompt.md +++ b/prompt/system_prompt.md @@ -2,83 +2,13 @@ ## CITATION REQUIREMENTS -### A. Regular Document Knowledge -When answering questions based on `rag_retrieve` tool results, you MUST add XML citation tags for factual claims derived from the knowledge base. +When your answer uses learned knowledge, you MUST generate `` tags. Follow the specific citation format instructions returned by each tool (`rag_retrieve`, `table_rag_retrieve`). -**Format:** `` -- Use `file` attribute with the UUID from document markers -- Use `filename` attribute with the actual filename from document markers -- Use `page` attribute (singular) with the page number -- `page` MUST be 0-based and must match the `pages:` values shown in the learned knowledge context - -### B. Table Knowledge (TABLE_KNOWLEDGE BEGIN/END) -When answering questions based on `table_rag_retrieve` tool results, you MUST add XML citation tags for factual claims derived from the knowledge base. - -**!!! CRITICAL RULE: NEVER put on same line as bullet/row !!!** -**Citations MUST be on separate lines AFTER the complete list/table.** -**NEVER include the `__src` column in your response - it is internal metadata only.** - -Format: `` -- Parse `__src`: `F1S2R5` = file_ref F1, sheet 2, row 5 -- Look up file_id in `file_ref_table` -- Combine same-sheet rows into one citation: `rows=[2, 4, 6]` -- **MANDATORY: Create SEPARATE citation for EACH (file, sheet) combination** - -✅ CORRECT (data from sheet 1 AND sheet 2 = 2 citations): -1. Liam - male -2. Noah - male -3. Ethan - male -4. Mason - male -5. William - male - - - -❌ WRONG (citation on same line): -1. Liam - male -❌ WRONG (missing sheet 2 citation): -...only 1 citation when data comes from 2 sheets... - - -### C. Web Page Knowledge - -**Format:** `` -- Use `url` attribute with the web page URL from the source metadata -- Do not use `file`, `filename`, or `page` attributes for web sources -- Web citations should appear immediately after the content they reference - -**!!! CRITICAL PLACEMENT RULES !!!** -1. **Citations MUST appear IMMEDIATELY AFTER the paragraph or bullet list** that uses the knowledge -2. **NEVER collect all citations and place them at the end of your response** -3. **Limit to 1-2 citations per paragraph/bullet list** - combine related facts under one citation -4. **If your answer uses learned knowledge, you MUST generate at least 1 `` in the response** -5. **If any paragraph or bullet list is grounded in a web source, prefer a web citation with `url` over a file citation** - -✅ CORRECT (citation immediately after paragraph): -氣候變遷的影響包括世界平均氣溫持續上升,2024年為有紀錄以來最熱的一年。 - -具體影響包括: -- 極端高溫事件頻率增加 -- 海洋熱浪 -- 暴雨強度和頻率增強 - -✅ CORRECT (web citation): -MIMURE位于东京港区高轮,是一家综合性商业设施。 - -❌ WRONG (all citations at the end): -氣候變遷的影響包括...(long response)... - - - - -(13 citations dumped at the end) - -❌ WRONG (web citation with file attributes): -MIMURE位于东京港区高轮,是一家综合性商业设施。 - -❌ WRONG (too many citations for short content): -2024年全球氣溫上升。 -世界各地發生災害。 -沙烏地阿拉伯熱浪。 +### General Placement Rules +1. Citations MUST appear IMMEDIATELY AFTER the paragraph or bullet list that uses the knowledge +2. NEVER collect all citations and place them at the end of your response +3. Limit to 1-2 citations per paragraph/bullet list - combine related facts under one citation +4. If your answer uses learned knowledge, you MUST generate at least 1 `` in the response ### Current Working Directory From 0c9c36cc54e6d4e1458ce1c2f1413a726b0aa994 Mon Sep 17 00:00:00 2001 From: autobee-sparticle Date: Fri, 27 Mar 2026 18:34:12 +0900 Subject: [PATCH 06/12] =?UTF-8?q?fix:=20=E7=A6=81=E6=AD=A2=20NOVARE=20?= =?UTF-8?q?=E8=AE=BE=E5=A4=87=E6=8E=A7=E5=88=B6=E4=BA=8C=E6=AC=A1=E7=A1=AE?= =?UTF-8?q?=E8=AE=A4=E5=BE=AA=E7=8E=AF=20(#22)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * add page number * feat: add skill feature memory 添加 skill 功能的 feature memory,记录技能包管理服务和 Hook 系统的核心信息。 Co-Authored-By: Claude Opus 4.5 * feat(skill): add feature memory with changelog and decisions 添加 skill 功能的完整记忆文档: Changelog: - 2025-Q4: 初始实现 (GRPC 层 + 内置 skills) - 2026-Q1: API 完善 (REST API + Hook 系统) Design Decisions: - 001: Skill 架构设计 (目录结构、Hook 系统) - 002: 上传安全措施 (ZipSlip、路径遍历防护) Co-Authored-By: Claude Opus 4.5 * soffice sharp 支持 * shell_env support * fix: 禁止 NOVARE 设备控制二次确认循环 - 添加"禁止二次确认"最高优先级规则,明确用户确认后必须立即执行工具调用 - 扩展确认关键词列表,增加更多日语确认表达(お願いします、はい、うん等) - 添加正确/错误流程示例,防止模型循环询问确认 - 强化规则指南中的确认执行逻辑 Fixes: sparticleinc/mygpt-frontend#2303 Co-Authored-By: Claude Opus 4.6 (1M context) --------- Co-authored-by: 朱潮 Co-authored-by: Claude Opus 4.5 Co-authored-by: zhuchao --- prompt/novare.md | 42 +++++++++++++++++++++++++++++++++++------- 1 file changed, 35 insertions(+), 7 deletions(-) diff --git a/prompt/novare.md b/prompt/novare.md index d1257e3..709646a 100644 --- a/prompt/novare.md +++ b/prompt/novare.md @@ -161,8 +161,8 @@ - 如果用户指定了具体档位(如"调到强"),直接使用指定档位 - **边界情况**:如果已达到最高档(强)或最低档(弱)无法继续调整,告知用户并主动建议调整温度 - 回复格式:"風量は既に『強/弱』になっていますので、これ以上調整できません。代わりに温度を調整しますか?" - 6. **若用户已明确确认**:直接调用【设备控制】工具执行操作。 - 7. **若用户未确认且为新请求**:向用户发送确认提示:"即将为您 [操作内容] [设备名称] [具体参数],是否确认?",待用户确认后再执行。 + 6. **若用户已明确确认**:**立即**调用【设备控制】工具执行操作,不做任何额外确认或复述。确认后的唯一动作就是调用工具。 + 7. **若用户未确认且为新请求**:向用户发送确认提示:"即将为您 [操作内容] [设备名称] [具体参数],是否确认?",待用户确认后再执行。每个操作只确认一次。 4. 查询人员信息/wowtalk账号/人员位置 - **条件**:用户意图为查找某人、员工、同事或房间位置。 @@ -209,15 +209,43 @@ - 影响范围大的操作:影响整个房间或楼层的设备控制 ### 用户确认意图推理 -- 用户明确确认:如回复“确认”、“好的”、“是的”、“拜托了”、“よろしく”、“请”、“please”等肯定性语气的内容。 -- 用户意图重申:用户完整或核心重复当前待执行的操作指令。(例如,提示“room302の照明1台を明るさ50%に調整してもよろしいですか?”,用户回复“room302の照明を明るさ50%に変更”) +- 用户明确确认:如回复”确认”、”好的”、”是的”、”拜托了”、”よろしく”、”请”、”please”、”お願いします”、”お願い”、”はい”、”うん”、”ええ”、”了解”、”OK”、”分かりました”、”そうしてください”、”それでお願い”等肯定性语气的内容。 +- 用户意图重申:用户完整或核心重复当前待执行的操作指令。(例如,提示”room302の照明1台を明るさ50%に調整してもよろしいですか?”,用户回复”room302の照明を明るさ50%に変更”) - 同一设备免重复确认:如果用户在当前会话中已经对某个设备的操作进行过确认,后续针对**同一设备**的操作可直接执行,无需再次确认。判定标准为: - 1. **同一设备的不同操作**:用户已确认过对某设备的控制操作后,后续对该设备的其他操作无需再次确认(如已确认关闭Define Room4的灯光,之后用户说"把灯打开",可直接执行) - 2. **同一轮对话意图**:用户在一轮连续交互中围绕同一目标发出的多步操作(如用户确认"关闭Define Room4的灯光"后,系统依次关闭该房间内多个灯光设备,无需逐个确认) + 1. **同一设备的不同操作**:用户已确认过对某设备的控制操作后,后续对该设备的其他操作无需再次确认(如已确认关闭Define Room4的灯光,之后用户说”把灯打开”,可直接执行) + 2. **同一轮对话意图**:用户在一轮连续交互中围绕同一目标发出的多步操作(如用户确认”关闭Define Room4的灯光”后,系统依次关闭该房间内多个灯光设备,无需逐个确认) 3. **同一指令的延续执行**:用户确认某操作后,该操作因技术原因需要分步执行的后续步骤(如批量控制多个设备时,确认一次即可全部执行) - 4. **上下文明确的追加操作**:用户在已确认的操作基础上追加相同类型的操作,且目标明确无歧义(如已确认打开A房间空调后,用户说"B房间也一样",可直接执行) + 4. **上下文明确的追加操作**:用户在已确认的操作基础上追加相同类型的操作,且目标明确无歧义(如已确认打开A房间空调后,用户说”B房间也一样”,可直接执行) - 不同事项仍需确认:当操作涉及**未曾确认过的新设备**,或操作类型发生本质变化时(如从设备控制切换到消息通知),仍需重新确认 +### ⚠️ 禁止二次确认(最高优先级规则) +**对于同一个操作请求,最多只能向用户确认一次。用户确认后,必须立即调用工具执行,绝对禁止再次询问确认。** + +核心规则: +1. **一次确认,立即执行**:当你向用户发出确认提示后,用户回复确认,你的下一步动作**必须且只能是**调用对应的工具(如 dxcore_update_device_status)执行操作。不允许生成任何额外的确认、复述或再次询问。 +2. **禁止循环确认**:如果聊天记录中已经存在你发出的确认提示和用户的确认回复,则该操作已被确认,不得以任何理由再次要求确认。 +3. **确认后禁止的行为**: + - ❌ 再次询问”もう一度確認いただけますか?” + - ❌ 再次复述操作内容并要求确认 + - ❌ 以不同措辞重新询问同一操作的确认 + - ❌ 生成过渡性文字后再次要求确认 + +**正确流程示例**: +``` +用户: “Dr3の照明を30%にして” +AI: “ディファインルーム3の照明を30%に調整してもよろしいですか?” +用户: “お願いします” +AI: [立即调用 dxcore_update_device_status 执行] → “照明を30%に調整しました。” +``` + +**错误流程(绝对禁止)**: +``` +用户: “Dr3の照明を30%にして” +AI: “ディファインルーム3の照明を30%に調整してもよろしいですか?” +用户: “お願いします” +AI: “もう一度確認いただければ実行いたします” ← ❌ 禁止! +``` + ## 上下文推理示例 ### 设备控制场景 From 2bc071645f5e0878ce7ce6663040f7d1297e9646 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9C=B1=E6=BD=AE?= Date: Mon, 30 Mar 2026 21:22:19 +0800 Subject: [PATCH 07/12] merge from onprem --- prompt/system_prompt.md | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/prompt/system_prompt.md b/prompt/system_prompt.md index c1d4812..c978779 100644 --- a/prompt/system_prompt.md +++ b/prompt/system_prompt.md @@ -91,15 +91,3 @@ Trace Id: {trace_id} - Even when the user writes in a different language, you MUST still reply in [{language}]. - Do NOT mix languages. Do NOT fall back to English or any other language under any circumstances. - Technical terms, code identifiers, file paths, and tool names may remain in their original form, but all surrounding text MUST be in [{language}]. - -**Citation Requirement (RAG Only)**: When answering questions based on `rag_retrieve` tool results, you MUST add XML citation tags for factual claims derived from the knowledge base. - -**MANDATORY FORMAT**: `The cited factual claim ` - -**Citation Rules**: -- The citation tag MUST be placed immediately after the factual claim or paragraph -- The `file` attribute MUST use the exact `File ID` from `rag_retrieve` document -- The `page` attribute MUST use the exact `Page Number` from `rag_retrieve` document -- If multiple sources support the same claim, include separate citation tags for each source -- Example: `According to the policy, returns are accepted within 30 days .` -- This requirement ONLY applies when using `rag_retrieve` results to answer questions. From 213e541697a5d735726ae75a4c46258892bb0da1 Mon Sep 17 00:00:00 2001 From: autobee-sparticle Date: Wed, 1 Apr 2026 22:04:31 +0900 Subject: [PATCH 08/12] fix: resolve PrePrompt Hook env var crash and increase Mem0 pool size (#24) 1. Fix "all environment values must be bytes or str" error in hook execution by ensuring all env values are converted to str (getattr may return None when attribute exists but is None). Also sanitize shell_env values. 2. Increase MEM0_POOL_SIZE default from 20 to 50 to address "connection pool exhausted" errors under high concurrency. Fixes: sparticleinc/felo-mygpt#2519 Co-authored-by: zhuchao Co-authored-by: Claude Opus 4.6 (1M context) --- agent/plugin_hook_loader.py | 21 ++++++++++++--------- utils/settings.py | 2 +- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/agent/plugin_hook_loader.py b/agent/plugin_hook_loader.py index 7be815c..9ad8a10 100644 --- a/agent/plugin_hook_loader.py +++ b/agent/plugin_hook_loader.py @@ -165,27 +165,30 @@ async def _execute_command(skill_path: str, command: str, hook_type: str, config """ try: # 设置环境变量,传递给子进程 + # 注意:subprocess 要求所有 env 值必须是 str 类型, + # getattr 可能返回 None(属性存在但值为 None),需要确保转换为 str env = os.environ.copy() - env['ASSISTANT_ID'] = getattr(config, 'bot_id', '') - env['USER_IDENTIFIER'] = getattr(config, 'user_identifier', '') - env['TRACE_ID'] = getattr(config, 'trace_id', '') - env['SESSION_ID'] = getattr(config, 'session_id', '') - env['LANGUAGE'] = getattr(config, 'language', '') + env['ASSISTANT_ID'] = str(getattr(config, 'bot_id', '') or '') + env['USER_IDENTIFIER'] = str(getattr(config, 'user_identifier', '') or '') + env['TRACE_ID'] = str(getattr(config, 'trace_id', '') or '') + env['SESSION_ID'] = str(getattr(config, 'session_id', '') or '') + env['LANGUAGE'] = str(getattr(config, 'language', '') or '') env['HOOK_TYPE'] = hook_type # 合并 config 中的自定义 shell 环境变量 shell_env = getattr(config, 'shell_env', None) if shell_env: - env.update(shell_env) + # 确保所有自定义环境变量值也是字符串 + env.update({k: str(v) if v is not None else '' for k, v in shell_env.items()}) # 对于 PreSave,传递 content if hook_type == 'PreSave': - env['CONTENT'] = kwargs.get('content', '') - env['ROLE'] = kwargs.get('role', '') + env['CONTENT'] = str(kwargs.get('content', '') or '') + env['ROLE'] = str(kwargs.get('role', '') or '') # 对于 PostAgent,传递 response if hook_type == 'PostAgent': - env['RESPONSE'] = kwargs.get('response', '') + env['RESPONSE'] = str(kwargs.get('response', '') or '') metadata = kwargs.get('metadata', {}) env['METADATA'] = json.dumps(metadata) if metadata else '' diff --git a/utils/settings.py b/utils/settings.py index 915cc5a..16af267 100644 --- a/utils/settings.py +++ b/utils/settings.py @@ -57,7 +57,7 @@ CHECKPOINT_DB_URL = os.getenv("CHECKPOINT_DB_URL", "postgresql://moshui:@localho # 连接池大小 # 同时可以持有的最大连接数 CHECKPOINT_POOL_SIZE = int(os.getenv("CHECKPOINT_POOL_SIZE", "20")) -MEM0_POOL_SIZE = int(os.getenv("MEM0_POOL_SIZE", "20")) +MEM0_POOL_SIZE = int(os.getenv("MEM0_POOL_SIZE", "50")) # Checkpoint 自动清理配置 # 是否启用自动清理旧 session From 513dda8bbb7640d7e8c974fc99e810bb803149e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9C=B1=E6=BD=AE?= Date: Thu, 9 Apr 2026 15:02:28 +0800 Subject: [PATCH 09/12] =?UTF-8?q?=F0=9F=90=9B=20fix:=20=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=20GuidelineMiddleware=20=E5=AF=BC=E8=87=B4=20assistant=20messa?= =?UTF-8?q?ge=20prefill=20=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit enable_thinking 开启时,thinking 中间件将 AIMessage 追加到 messages 末尾, 导致不支持 assistant prefill 的模型返回 400 错误。 修复方式:在 AIMessage 后追加多语言 HumanMessage,确保消息以 user 结尾。 Co-Authored-By: Claude Opus 4.6 (1M context) --- agent/guideline_middleware.py | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/agent/guideline_middleware.py b/agent/guideline_middleware.py index 9ddfb17..a9b2911 100644 --- a/agent/guideline_middleware.py +++ b/agent/guideline_middleware.py @@ -6,7 +6,7 @@ from utils.fastapi_utils import (extract_block_from_system_prompt, format_messag from langchain.chat_models import BaseChatModel from langgraph.runtime import Runtime -from langchain_core.messages import SystemMessage +from langchain_core.messages import SystemMessage, HumanMessage from typing import Any, Callable from langchain_core.callbacks import BaseCallbackHandler from langchain_core.outputs import LLMResult @@ -124,10 +124,11 @@ Action: Provide concise, friendly, and personified natural responses. response.additional_kwargs["message_tag"] = "THINK" response.content = f"{response.content}" - # 将响应添加到原始消息列表 - state['messages'] = state['messages'] + [response] + # 将响应添加到原始消息列表,并追加 HumanMessage 确保消息以 user 结尾 + # 某些模型不支持 assistant message prefill,要求最后一条消息必须是 user + state['messages'] = state['messages'] + [response, HumanMessage(content=self._get_follow_up_prompt())] return state - + async def abefore_agent(self, state: AgentState, runtime: Runtime) -> dict[str, Any] | None: if not self.guidelines: return None @@ -148,10 +149,23 @@ Action: Provide concise, friendly, and personified natural responses. response.additional_kwargs["message_tag"] = "THINK" response.content = f"{response.content}" - # 将响应添加到原始消息列表 - state['messages'] = state['messages'] + [response] + # 将响应添加到原始消息列表,并追加 HumanMessage 确保消息以 user 结尾 + # 某些模型不支持 assistant message prefill,要求最后一条消息必须是 user + state['messages'] = state['messages'] + [response, HumanMessage(content=self._get_follow_up_prompt())] return state + def _get_follow_up_prompt(self) -> str: + """根据语言返回引导主 agent 回复的提示""" + prompts = { + "ja": "以上の分析に基づいて、ユーザーに返信してください。", + "jp": "以上の分析に基づいて、ユーザーに返信してください。", + "zh": "请根据以上分析,回复用户。", + "zh-TW": "請根據以上分析,回覆用戶。", + "ko": "위 분석을 바탕으로 사용자에게 답변해 주세요.", + "en": "Based on the above analysis, please respond to the user.", + } + return prompts.get(self.language, prompts["en"]) + def wrap_model_call( self, request: ModelRequest, From 788bb0089f112cf3503e50edd9925b44e94a8659 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9C=B1=E6=BD=AE?= Date: Sat, 11 Apr 2026 11:40:43 +0800 Subject: [PATCH 10/12] upgrade to deepagents-0_5_2 --- agent/custom_filesystem_middleware.py | 166 ++- agent/deep_assistant.py | 7 +- agent/guideline_middleware.py | 1 - poetry.lock | 1653 +++++++++++++------------ pyproject.toml | 6 +- requirements.txt | 397 +++--- 6 files changed, 1122 insertions(+), 1108 deletions(-) diff --git a/agent/custom_filesystem_middleware.py b/agent/custom_filesystem_middleware.py index 34b0b95..ba25958 100644 --- a/agent/custom_filesystem_middleware.py +++ b/agent/custom_filesystem_middleware.py @@ -4,7 +4,9 @@ """ from pathlib import Path -from typing import Annotated, Literal, cast +from typing import Annotated, cast +import mimetypes +import warnings from langchain.tools import ToolRuntime from langchain_core.messages import ToolMessage @@ -15,19 +17,24 @@ from deepagents.backends import StateBackend from deepagents.backends.composite import CompositeBackend from deepagents.backends.protocol import ( BACKEND_TYPES, + ReadResult, ) +from deepagents.backends.utils import _get_file_type, validate_path +from langchain_core.messages.content import ContentBlock from deepagents.middleware.filesystem import ( DEFAULT_READ_OFFSET, DEFAULT_READ_LIMIT, - IMAGE_EXTENSIONS, - IMAGE_MEDIA_TYPES, FilesystemMiddleware, FilesystemState, + READ_FILE_TOOL_DESCRIPTION, + READ_FILE_TRUNCATION_MSG, + NUM_CHARS_PER_TOKEN, + ReadFileSchema, + check_empty_content, + format_content_with_line_numbers, ) from langgraph.types import Command -import base64 -from langchain_core.messages.content import create_image_block # SKILL.md 文件的行数限制(设置为较大的值以完整读取) @@ -44,10 +51,62 @@ class CustomFilesystemMiddleware(FilesystemMiddleware): @override def _create_read_file_tool(self) -> BaseTool: """创建自定义的 read_file 工具,支持 SKILL.md 完整读取。""" - # 从父类获取工具描述 - tool_description = self._custom_tool_descriptions.get("read_file") or self._get_read_file_description() + tool_description = self._custom_tool_descriptions.get("read_file") or READ_FILE_TOOL_DESCRIPTION token_limit = self._tool_token_limit_before_evict + def _truncate(content: str, file_path: str, limit: int) -> str: + lines = content.splitlines(keepends=True) + if len(lines) > limit: + lines = lines[:limit] + content = "".join(lines) + + if token_limit and len(content) >= NUM_CHARS_PER_TOKEN * token_limit: + truncation_msg = READ_FILE_TRUNCATION_MSG.format(file_path=file_path) + max_content_length = NUM_CHARS_PER_TOKEN * token_limit - len(truncation_msg) + content = content[:max_content_length] + truncation_msg + + return content + + def _handle_read_result( + read_result: ReadResult | str, + validated_path: str, + tool_call_id: str | None, + offset: int, + limit: int, + ) -> ToolMessage | str: + if isinstance(read_result, str): + warnings.warn( + "Returning a plain `str` from `backend.read()` is deprecated. ", + DeprecationWarning, + stacklevel=2, + ) + return _truncate(read_result, validated_path, limit) + + if read_result.error: + return f"Error: {read_result.error}" + + if read_result.file_data is None: + return f"Error: no data returned for '{validated_path}'" + + file_type = _get_file_type(validated_path) + content = read_result.file_data["content"] + + if file_type != "text": + mime_type = mimetypes.guess_type("file" + Path(validated_path).suffix)[0] or "application/octet-stream" + return ToolMessage( + content_blocks=cast("list[ContentBlock]", [{"type": file_type, "base64": content, "mime_type": mime_type}]), + name="read_file", + tool_call_id=tool_call_id, + additional_kwargs={"read_file_path": validated_path, "read_file_media_type": mime_type}, + ) + + empty_msg = check_empty_content(content) + if empty_msg: + return empty_msg + + content = format_content_with_line_numbers(content, start_line=offset + 1) + return _truncate(content, validated_path, limit) + def sync_read_file( file_path: Annotated[str, "Absolute path to the file to read. Must be absolute, not relative."], runtime: ToolRuntime[None, FilesystemState], @@ -55,57 +114,18 @@ class CustomFilesystemMiddleware(FilesystemMiddleware): limit: Annotated[int, "Maximum number of lines to read. Use for pagination of large files."] = DEFAULT_READ_LIMIT, ) -> ToolMessage | str: """Synchronous wrapper for read_file tool with SKILL.md special handling.""" - from deepagents.backends.utils import validate_path - from deepagents.middleware.filesystem import READ_FILE_TRUNCATION_MSG, NUM_CHARS_PER_TOKEN - resolved_backend = self._get_backend(runtime) try: validated_path = validate_path(file_path) except ValueError as e: return f"Error: {e}" - ext = Path(validated_path).suffix.lower() - # 处理图片文件 - if ext in IMAGE_EXTENSIONS: - responses = resolved_backend.download_files([validated_path]) - if responses and responses[0].content is not None: - media_type = IMAGE_MEDIA_TYPES.get(ext, "image/png") - image_b64 = base64.standard_b64encode(responses[0].content).decode("utf-8") - return ToolMessage( - content_blocks=[create_image_block(base64=image_b64, mime_type=media_type)], - name="read_file", - tool_call_id=runtime.tool_call_id, - additional_kwargs={ - "read_file_path": validated_path, - "read_file_media_type": media_type, - }, - ) - if responses and responses[0].error: - return f"Error reading image: {responses[0].error}" - return "Error reading image: unknown error" - # 如果是 SKILL.md 文件,使用大限制读取完整内容 if validated_path.endswith("SKILL.md") or validated_path.endswith("/SKILL.md"): - actual_limit = SKILL_MD_READ_LIMIT - else: - actual_limit = limit + limit = SKILL_MD_READ_LIMIT - result = resolved_backend.read(validated_path, offset=offset, limit=actual_limit) - - lines = result.splitlines(keepends=True) - if len(lines) > actual_limit: - lines = lines[:actual_limit] - result = "".join(lines) - - # Check if result exceeds token threshold and truncate if necessary - if token_limit and len(result) >= NUM_CHARS_PER_TOKEN * token_limit: - # Calculate truncation message length to ensure final result stays under threshold - truncation_msg = READ_FILE_TRUNCATION_MSG.format(file_path=validated_path) - max_content_length = NUM_CHARS_PER_TOKEN * token_limit - len(truncation_msg) - result = result[:max_content_length] - result += truncation_msg - - return result + read_result = resolved_backend.read(validated_path, offset=offset, limit=limit) + return _handle_read_result(read_result, validated_path, runtime.tool_call_id, offset, limit) async def async_read_file( file_path: Annotated[str, "Absolute path to the file to read. Must be absolute, not relative."], @@ -114,66 +134,28 @@ class CustomFilesystemMiddleware(FilesystemMiddleware): limit: Annotated[int, "Maximum number of lines to read. Use for pagination of large files."] = DEFAULT_READ_LIMIT, ) -> ToolMessage | str: """Asynchronous wrapper for read_file tool with SKILL.md special handling.""" - from deepagents.backends.utils import validate_path - from deepagents.middleware.filesystem import READ_FILE_TRUNCATION_MSG, NUM_CHARS_PER_TOKEN - resolved_backend = self._get_backend(runtime) try: validated_path = validate_path(file_path) except ValueError as e: return f"Error: {e}" - ext = Path(validated_path).suffix.lower() - # 处理图片文件 - if ext in IMAGE_EXTENSIONS: - responses = await resolved_backend.adownload_files([validated_path]) - if responses and responses[0].content is not None: - media_type = IMAGE_MEDIA_TYPES.get(ext, "image/png") - image_b64 = base64.standard_b64encode(responses[0].content).decode("utf-8") - return ToolMessage( - content_blocks=[create_image_block(base64=image_b64, mime_type=media_type)], - name="read_file", - tool_call_id=runtime.tool_call_id, - additional_kwargs={ - "read_file_path": validated_path, - "read_file_media_type": media_type, - }, - ) - if responses and responses[0].error: - return f"Error reading image: {responses[0].error}" - return "Error reading image: unknown error" - # 如果是 SKILL.md 文件,使用大限制读取完整内容 if validated_path.endswith("SKILL.md") or validated_path.endswith("/SKILL.md"): - actual_limit = SKILL_MD_READ_LIMIT - else: - actual_limit = limit + limit = SKILL_MD_READ_LIMIT - result = await resolved_backend.aread(validated_path, offset=offset, limit=actual_limit) - - lines = result.splitlines(keepends=True) - if len(lines) > actual_limit: - lines = lines[:actual_limit] - result = "".join(lines) - - # Check if result exceeds token threshold and truncate if necessary - if token_limit and len(result) >= NUM_CHARS_PER_TOKEN * token_limit: - # Calculate truncation message length to ensure final result stays under threshold - truncation_msg = READ_FILE_TRUNCATION_MSG.format(file_path=validated_path) - max_content_length = NUM_CHARS_PER_TOKEN * token_limit - len(truncation_msg) - result = result[:max_content_length] - result += truncation_msg - - return result + read_result = await resolved_backend.aread(validated_path, offset=offset, limit=limit) + return _handle_read_result(read_result, validated_path, runtime.tool_call_id, offset, limit) return StructuredTool.from_function( name="read_file", description=tool_description, func=sync_read_file, coroutine=async_read_file, + infer_schema=False, + args_schema=ReadFileSchema, ) def _get_read_file_description(self) -> str: """获取 read_file 工具的描述,添加 SKILL.md 完整读取的说明。""" - from deepagents.middleware.filesystem import READ_FILE_TOOL_DESCRIPTION return READ_FILE_TOOL_DESCRIPTION diff --git a/agent/deep_assistant.py b/agent/deep_assistant.py index 7dfb662..0db824e 100644 --- a/agent/deep_assistant.py +++ b/agent/deep_assistant.py @@ -405,19 +405,22 @@ def create_custom_cli_agent( # Use LocalShellBackend for filesystem + shell execution backend = LocalShellBackend( root_dir=workspace_root, + virtual_mode=False, inherit_env=True, env=final_shell_env, ) else: # No shell access - use plain FilesystemBackend - backend = FilesystemBackend(root_dir=workspace_root) + backend = FilesystemBackend(root_dir=workspace_root, virtual_mode=True) # Set up composite backend with routing (参考新版本实现) large_results_backend = FilesystemBackend( root_dir=tempfile.mkdtemp(prefix="deepagents_large_results_"), + virtual_mode=True, ) conversation_history_backend = FilesystemBackend( root_dir=tempfile.mkdtemp(prefix="deepagents_conversation_history_"), + virtual_mode=True, ) composite_backend = CompositeBackend( default=backend, @@ -433,7 +436,7 @@ def create_custom_cli_agent( agent_middleware.append( CustomSkillsMiddleware( - backend=FilesystemBackend(root_dir=workspace_root), + backend=FilesystemBackend(root_dir=workspace_root, virtual_mode=True), sources=skills_sources, ) ) diff --git a/agent/guideline_middleware.py b/agent/guideline_middleware.py index a9b2911..4597783 100644 --- a/agent/guideline_middleware.py +++ b/agent/guideline_middleware.py @@ -1,4 +1,3 @@ -from ast import Str from langchain.agents.middleware import AgentState, AgentMiddleware, ModelRequest, ModelResponse from langchain_core.messages import convert_to_openai_messages from agent.prompt_loader import load_guideline_prompt diff --git a/poetry.lock b/poetry.lock index 64027d2..f3f6ce0 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,5 +1,23 @@ # This file is automatically @generated by Poetry 2.2.1 and should not be changed by hand. +[[package]] +name = "agent-client-protocol" +version = "0.9.0" +description = "A Python implement of Agent Client Protocol (ACP, by Zed Industries)" +optional = false +python-versions = "<3.15,>=3.10" +groups = ["main"] +files = [ + {file = "agent_client_protocol-0.9.0-py3-none-any.whl", hash = "sha256:06911500b51d8cb69112544e2be01fc5e7db39ef88fecbc3848c5c6f194798ee"}, + {file = "agent_client_protocol-0.9.0.tar.gz", hash = "sha256:f744c48ab9af0f0b4452e5ab5498d61bcab97c26dbe7d6feec5fd36de49be30b"}, +] + +[package.dependencies] +pydantic = ">=2.7" + +[package.extras] +logfire = ["logfire (>=0.14)", "opentelemetry-sdk (>=1.28.0)"] + [[package]] name = "aiofiles" version = "24.1.0" @@ -166,21 +184,6 @@ yarl = ">=1.17.0,<2.0" [package.extras] speedups = ["Brotli ; platform_python_implementation == \"CPython\"", "aiodns (>=3.3.0)", "backports.zstd ; platform_python_implementation == \"CPython\" and python_version < \"3.14\"", "brotlicffi ; platform_python_implementation != \"CPython\""] -[[package]] -name = "aiohttp-retry" -version = "2.9.1" -description = "Simple retry client for aiohttp" -optional = false -python-versions = ">=3.7" -groups = ["main"] -files = [ - {file = "aiohttp_retry-2.9.1-py3-none-any.whl", hash = "sha256:66d2759d1921838256a05a3f80ad7e724936f083e35be5abb5e16eed6be6dc54"}, - {file = "aiohttp_retry-2.9.1.tar.gz", hash = "sha256:8eb75e904ed4ee5c2ec242fefe85bf04240f685391c4879d8f541d6028ff01f1"}, -] - -[package.dependencies] -aiohttp = "*" - [[package]] name = "aiosignal" version = "1.4.0" @@ -227,14 +230,14 @@ files = [ [[package]] name = "anthropic" -version = "0.84.0" +version = "0.94.0" description = "The official Python library for the anthropic API" optional = false python-versions = ">=3.9" groups = ["main"] files = [ - {file = "anthropic-0.84.0-py3-none-any.whl", hash = "sha256:861c4c50f91ca45f942e091d83b60530ad6d4f98733bfe648065364da05d29e7"}, - {file = "anthropic-0.84.0.tar.gz", hash = "sha256:72f5f90e5aebe62dca316cb013629cfa24996b0f5a4593b8c3d712bc03c43c37"}, + {file = "anthropic-0.94.0-py3-none-any.whl", hash = "sha256:42550b401eed8fcd7f6654234560f99c428306301bca726d32bca4bfb6feb748"}, + {file = "anthropic-0.94.0.tar.gz", hash = "sha256:dde8c57de73538c5136c1bca9b16da92e75446b53a73562cc911574e4934435c"}, ] [package.dependencies] @@ -245,10 +248,11 @@ httpx = ">=0.25.0,<1" jiter = ">=0.4.0,<1" pydantic = ">=1.9.0,<3" sniffio = "*" -typing-extensions = ">=4.10,<5" +typing-extensions = ">=4.14,<5" [package.extras] aiohttp = ["aiohttp", "httpx-aiohttp (>=0.1.9)"] +aws = ["boto3 (>=1.28.57)", "botocore (>=1.31.57)"] bedrock = ["boto3 (>=1.28.57)", "botocore (>=1.31.57)"] mcp = ["mcp (>=1.0) ; python_version >= \"3.10\""] vertex = ["google-auth[requests] (>=2,<3)"] @@ -320,6 +324,21 @@ charset-normalizer = ["charset-normalizer"] html5lib = ["html5lib"] lxml = ["lxml"] +[[package]] +name = "blockbuster" +version = "1.5.26" +description = "Utility to detect blocking calls in the async event loop" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "blockbuster-1.5.26-py3-none-any.whl", hash = "sha256:f8e53fb2dd4b6c6ec2f04907ddbd063ca7cd1ef587d24448ef4e50e81e3a79bb"}, + {file = "blockbuster-1.5.26.tar.gz", hash = "sha256:cc3ce8c70fa852a97ee3411155f31e4ad2665cd1c6c7d2f8bb1851dab61dc629"}, +] + +[package.dependencies] +forbiddenfruit = {version = ">=0.1.4", markers = "implementation_name == \"cpython\""} + [[package]] name = "bracex" version = "2.6" @@ -344,66 +363,6 @@ files = [ {file = "cachetools-6.2.4.tar.gz", hash = "sha256:82c5c05585e70b6ba2d3ae09ea60b79548872185d2f24ae1f2709d37299fd607"}, ] -[[package]] -name = "cbor2" -version = "5.7.1" -description = "CBOR (de)serializer with extensive tag support" -optional = false -python-versions = ">=3.9" -groups = ["main"] -files = [ - {file = "cbor2-5.7.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a0fc6cc50e0aa04e54792e7824e65bf66c691ae2948d7c012153df2bab1ee314"}, - {file = "cbor2-5.7.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c2fe69c1473d18d102f1e20982edab5bfa543fa1cda9888bdecc49f8b2f3d720"}, - {file = "cbor2-5.7.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:34cbbe4fcf82080412a641984a0be43dfe66eac50a8f45596da63fde36189450"}, - {file = "cbor2-5.7.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4fc3d3f00aed397a1e4634b8e1780f347aad191a2e1e7768a233baadd4f87561"}, - {file = "cbor2-5.7.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:99e1666887a868e619096e9b5953734efd034f577e078f4efc5abd23dc1bcd32"}, - {file = "cbor2-5.7.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:59b78c90a5e682e7d004586fb662be6e451ec06f32fc3a738bbfb9576c72ecc9"}, - {file = "cbor2-5.7.1-cp310-cp310-win_amd64.whl", hash = "sha256:6300e0322e52f831892054f1ccf25e67fa8040664963d358db090f29d8976ae4"}, - {file = "cbor2-5.7.1-cp310-cp310-win_arm64.whl", hash = "sha256:7badbde0d89eb7c8b9f7ef8e4f2395c02cfb24b514815656fef8e23276a7cd36"}, - {file = "cbor2-5.7.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2b1efbe6e82721be44b9faf47d0fd97b0150213eb6a4ba554f4947442bc4e13f"}, - {file = "cbor2-5.7.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fb94bab27e00283bdd8f160e125e17dbabec4c9e6ffc8da91c36547ec1eb707f"}, - {file = "cbor2-5.7.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:29f22266b5e08e0e4152e87ba185e04d3a84a4fd545b99ae3ebe42c658c66a53"}, - {file = "cbor2-5.7.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:25d4c7554d6627da781c9bd1d0dd0709456eecb71f605829f98961bb98487dda"}, - {file = "cbor2-5.7.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:f1e15c3a08008cf13ce1dfc64d17c960df5d66d935788d28ec7df54bf0ffb0ef"}, - {file = "cbor2-5.7.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9f6cdf7eb604ea0e7ef34e3f0b5447da0029ecd3ab7b2dc70e43fa5f7bcfca89"}, - {file = "cbor2-5.7.1-cp311-cp311-win_amd64.whl", hash = "sha256:dd25cbef8e8e6dbf69f0de95311aecaca7217230cda83ae99fdc37cd20d99250"}, - {file = "cbor2-5.7.1-cp311-cp311-win_arm64.whl", hash = "sha256:40cc9c67242a7abac5a4e062bc4d1d2376979878c0565a4b2f08fd9ed9212945"}, - {file = "cbor2-5.7.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:bd5ca44891c06f6b85d440836c967187dc1d30b15f86f315d55c675d3a841078"}, - {file = "cbor2-5.7.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:537d73ef930ccc1a7b6a2e8d2cbf81407d270deb18e40cda5eb511bd70f71078"}, - {file = "cbor2-5.7.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:edbf814dd7763b6eda27a5770199f6ccd55bd78be8f4367092460261bfbf19d0"}, - {file = "cbor2-5.7.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9fc81da8c0e09beb42923e455e477b36ff14a03b9ca18a8a2e9b462de9a953e8"}, - {file = "cbor2-5.7.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e4a7d660d428911a3aadb7105e94438d7671ab977356fdf647a91aab751033bd"}, - {file = "cbor2-5.7.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:228e0af9c0a9ddf6375b6ae010eaa1942a1901d403f134ac9ee6a76a322483f9"}, - {file = "cbor2-5.7.1-cp312-cp312-win_amd64.whl", hash = "sha256:2d08a6c0d9ed778448e185508d870f4160ba74f59bb17a966abd0d14d0ff4dd3"}, - {file = "cbor2-5.7.1-cp312-cp312-win_arm64.whl", hash = "sha256:752506cfe72da0f4014b468b30191470ee8919a64a0772bd3b36a4fccf5fcefc"}, - {file = "cbor2-5.7.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:59d5da59fffe89692d5bd1530eef4d26e4eb7aa794aaa1f4e192614786409009"}, - {file = "cbor2-5.7.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:533117918d518e01348f8cd0331271c207e7224b9a1ed492a0ff00847f28edc8"}, - {file = "cbor2-5.7.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8d6d9436ff3c3323ea5863ecf7ae1139590991685b44b9eb6b7bb1734a594af6"}, - {file = "cbor2-5.7.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:661b871ca754a619fcd98c13a38b4696b2b57dab8b24235c00b0ba322c040d24"}, - {file = "cbor2-5.7.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d8065aa90d715fd9bb28727b2d774ee16e695a0e1627ae76e54bf19f9d99d63f"}, - {file = "cbor2-5.7.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:cb1b7047d73590cfe8e373e2c804fa99be47e55b1b6186602d0f86f384cecec1"}, - {file = "cbor2-5.7.1-cp313-cp313-win_amd64.whl", hash = "sha256:31d511df7ebd6624fdb4cecdafb4ffb9a205f9ff8c8d98edd1bef0d27f944d74"}, - {file = "cbor2-5.7.1-cp313-cp313-win_arm64.whl", hash = "sha256:f5d37f7b0f84394d2995bd8722cb01c86a885c4821a864a34b7b4d9950c5e26e"}, - {file = "cbor2-5.7.1-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:e5826e4fa4c33661960073f99cf67c82783895524fb66f3ebdd635c19b5a7d68"}, - {file = "cbor2-5.7.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:f19a00d6ac9a77cb611073250b06bf4494b41ba78a1716704f7008e0927d9366"}, - {file = "cbor2-5.7.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d2113aea044cd172f199da3520bc4401af69eae96c5180ca7eb660941928cb89"}, - {file = "cbor2-5.7.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6f17eacea2d28fecf28ac413c1d7927cde0a11957487d2630655d6b5c9c46a0b"}, - {file = "cbor2-5.7.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:d65deea39cae533a629561e7da672402c46731122b6129ed7c8eaa1efe04efce"}, - {file = "cbor2-5.7.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:57d8cc29ec1fd20500748e0e767ff88c13afcee839081ba4478c41fcda6ee18b"}, - {file = "cbor2-5.7.1-cp314-cp314-win_amd64.whl", hash = "sha256:94fb939d0946f80c49ba45105ca3a3e13e598fc9abd63efc6661b02d4b4d2c50"}, - {file = "cbor2-5.7.1-cp314-cp314-win_arm64.whl", hash = "sha256:4fd7225ac820bbb9f03bd16bc1a7efb6c4d1c451f22c0a153ff4ec46495c59c5"}, - {file = "cbor2-5.7.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:0a94c265d92ecc25b11072f5f41685a881c8d95fa64d6691db79cea6eac8c94a"}, - {file = "cbor2-5.7.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3a56a92bd6070c98513eacdd3e0efbe07c373a5a1637acef94b18f141e71079e"}, - {file = "cbor2-5.7.1-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4682973d385020786ff0c8c6d9694e2428f1bb4cd82a8a0f172eaa9cd674c814"}, - {file = "cbor2-5.7.1-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e2f2e226066b801d1015c632a8309e3b322e5f1488a4472ffc8310bbf1386d84"}, - {file = "cbor2-5.7.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:f6f342a3a745f8aecc0a6253ea45952dbaf9ffdfeb641490298b3b92074365c7"}, - {file = "cbor2-5.7.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:45e6a01c028b3588028995b4016009d6525b82981ab095ffaaef78798be35583"}, - {file = "cbor2-5.7.1-cp39-cp39-win_amd64.whl", hash = "sha256:bd044d65dc026f710104515359350014101eb5be86925314328ebe6221312a1c"}, - {file = "cbor2-5.7.1-cp39-cp39-win_arm64.whl", hash = "sha256:d7e2d2a116108d7e4e9cda46385beed4102f8dca599a84e78bffdc5b07ebed89"}, - {file = "cbor2-5.7.1-py3-none-any.whl", hash = "sha256:68834e4eff2f56629ce6422b0634bc3f74c5a4269de5363f5265fe452c706ba7"}, - {file = "cbor2-5.7.1.tar.gz", hash = "sha256:7a405a1d7c8230ee9acf240aad48ae947ef584e8af05f169f3c1bde8f01f8b71"}, -] - [[package]] name = "certifi" version = "2025.10.5" @@ -664,6 +623,18 @@ files = [ [package.dependencies] colorama = {version = "*", markers = "platform_system == \"Windows\""} +[[package]] +name = "cloudpickle" +version = "3.1.2" +description = "Pickler class to extend the standard pickle.Pickler functionality" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "cloudpickle-3.1.2-py3-none-any.whl", hash = "sha256:9acb47f6afd73f60dc1df93bb801b472f05ff42fa6c84167d25cb206be1fbf4a"}, + {file = "cloudpickle-3.1.2.tar.gz", hash = "sha256:7fda9eb655c9c230dab534f1983763de5835249750e85fbcef43aaa30a9a2414"}, +] + [[package]] name = "colorama" version = "0.4.6" @@ -765,150 +736,72 @@ ssh = ["bcrypt (>=3.1.5)"] test = ["certifi (>=2024)", "cryptography-vectors (==46.0.5)", "pretend (>=0.7)", "pytest (>=7.4.0)", "pytest-benchmark (>=4.0)", "pytest-cov (>=2.10.1)", "pytest-xdist (>=3.5.0)"] test-randomorder = ["pytest-randomly"] -[[package]] -name = "daytona" -version = "0.127.0" -description = "Python SDK for Daytona" -optional = false -python-versions = "<4.0,>=3.9" -groups = ["main"] -files = [ - {file = "daytona-0.127.0-py3-none-any.whl", hash = "sha256:00351adcdc53f47558d19da5b0a521b124b490d60fc0afdcdeaa4c6aba3af45c"}, - {file = "daytona-0.127.0.tar.gz", hash = "sha256:8c95709d84cf74faddc19262a63479129d641f4b191c5b11991d745f8f216f21"}, -] - -[package.dependencies] -aiofiles = ">=24.1.0,<24.2.0" -daytona-api-client = "0.127.0" -daytona-api-client-async = "0.127.0" -daytona-toolbox-api-client = "0.127.0" -daytona-toolbox-api-client-async = "0.127.0" -Deprecated = ">=1.2.18,<2.0.0" -environs = ">=10.0.0,<15.0.0" -httpx = ">=0.28.0,<0.29.0" -multipart = ">=1.0.0,<2.0.0" -obstore = ">=0.7.0,<0.8.0" -pydantic = ">=2.4.2,<3.0.0" -toml = ">=0.10.0,<0.11.0" -websockets = ">=15.0.0,<16.0.0" - -[[package]] -name = "daytona-api-client" -version = "0.127.0" -description = "Daytona" -optional = false -python-versions = "<4.0,>=3.8" -groups = ["main"] -files = [ - {file = "daytona_api_client-0.127.0-py3-none-any.whl", hash = "sha256:8eafe94310ad50824e4a5b774988fa874a3fa762905b021a8968641c8391d543"}, - {file = "daytona_api_client-0.127.0.tar.gz", hash = "sha256:d91b58657f04604fea89ebf45186a8ce5cede4421f656ea3c0c7487ec24abe19"}, -] - -[package.dependencies] -pydantic = ">=2" -python-dateutil = ">=2.8.2" -typing-extensions = ">=4.7.1" -urllib3 = ">=2.1.0,<3.0.0" - -[[package]] -name = "daytona-api-client-async" -version = "0.127.0" -description = "Daytona" -optional = false -python-versions = "<4.0,>=3.8" -groups = ["main"] -files = [ - {file = "daytona_api_client_async-0.127.0-py3-none-any.whl", hash = "sha256:f25d3417569fc9bb129272a8c1dd14e16a52942e043fa53b3579ec06b18f9b96"}, - {file = "daytona_api_client_async-0.127.0.tar.gz", hash = "sha256:285b6b5cb85cebd9b5a1dd523f994b66caaf216e15f484ca7b079fd3f7e2a209"}, -] - -[package.dependencies] -aiohttp = ">=3.8.4" -aiohttp-retry = ">=2.8.3" -pydantic = ">=2" -python-dateutil = ">=2.8.2" -typing-extensions = ">=4.7.1" -urllib3 = ">=2.1.0,<3.0.0" - -[[package]] -name = "daytona-toolbox-api-client" -version = "0.127.0" -description = "Daytona Daemon API" -optional = false -python-versions = "<4.0,>=3.8" -groups = ["main"] -files = [ - {file = "daytona_toolbox_api_client-0.127.0-py3-none-any.whl", hash = "sha256:64ea69995bc23f8cc6ed4ae3e877dcc0ec47129903be8ec087a51cc96dd8b18d"}, - {file = "daytona_toolbox_api_client-0.127.0.tar.gz", hash = "sha256:65f5bd1f03f4fd077eae06e97904a4e43d528820b9d18730add181e7a596e605"}, -] - -[package.dependencies] -pydantic = ">=2" -python-dateutil = ">=2.8.2" -typing-extensions = ">=4.7.1" -urllib3 = ">=2.1.0,<3.0.0" - -[[package]] -name = "daytona-toolbox-api-client-async" -version = "0.127.0" -description = "Daytona Daemon API" -optional = false -python-versions = "<4.0,>=3.8" -groups = ["main"] -files = [ - {file = "daytona_toolbox_api_client_async-0.127.0-py3-none-any.whl", hash = "sha256:0bd379e791b8ca33a8293c17936dd4b6bc96879b19cae9276edfcd318edd1c36"}, - {file = "daytona_toolbox_api_client_async-0.127.0.tar.gz", hash = "sha256:3d7d4d2f5bc9fb7b58c2fec84065be191a22dba9db32e6a4a42a966c2c825daf"}, -] - -[package.dependencies] -aiohttp = ">=3.8.4" -aiohttp-retry = ">=2.8.3" -pydantic = ">=2" -python-dateutil = ">=2.8.2" -typing-extensions = ">=4.7.1" -urllib3 = ">=2.1.0,<3.0.0" - [[package]] name = "deepagents" -version = "0.4.3" +version = "0.5.2" description = "General purpose 'deep agent' with sub-agent spawning, todo list capabilities, and mock file system. Built on LangGraph." optional = false python-versions = "<4.0,>=3.11" groups = ["main"] files = [ - {file = "deepagents-0.4.3-py3-none-any.whl", hash = "sha256:298d19c5c0b4c6fc6a74b68049a7bfea0ba481aece7201ab21e7172b71ee61b9"}, - {file = "deepagents-0.4.3.tar.gz", hash = "sha256:88033c616c5ea481f2620dbb2d05533bc8fdcd48f376d713f9dba49a8157b6f8"}, + {file = "deepagents-0.5.2-py3-none-any.whl", hash = "sha256:48da8e85bac79c2d4ddf859c6a3aea75d0e642ac55f9efe07492338c8b8d3d94"}, + {file = "deepagents-0.5.2.tar.gz", hash = "sha256:7e942017b5d6a923deb111bc0ff097d07c0b20b64fd96818561d00a8259525d0"}, ] [package.dependencies] -langchain = ">=1.2.10,<2.0.0" -langchain-anthropic = ">=1.3.3,<2.0.0" -langchain-core = ">=1.2.10,<2.0.0" -langchain-google-genai = ">=4.2.0,<5.0.0" +langchain = ">=1.2.15,<2.0.0" +langchain-anthropic = ">=1.4.0,<2.0.0" +langchain-core = ">=1.2.27,<2.0.0" +langchain-google-genai = ">=4.2.1,<5.0.0" +langsmith = ">=0.3.0" wcmatch = "*" +[[package]] +name = "deepagents-acp" +version = "0.0.5" +description = "Agent Client Protocol integration for Deep Agents" +optional = false +python-versions = ">=3.11" +groups = ["main"] +files = [ + {file = "deepagents_acp-0.0.5-py3-none-any.whl", hash = "sha256:4d4a8a2786e50c4307fd9138d876336c75a296f76df21fe9ea51e4a50760b9c4"}, + {file = "deepagents_acp-0.0.5.tar.gz", hash = "sha256:74e3dedada0961798175c668322fc6fedce2a0d8828ffe221df8b26e68d7292a"}, +] + +[package.dependencies] +agent-client-protocol = ">=0.8.0" +deepagents = "*" +python-dotenv = ">=1.2.1" + [[package]] name = "deepagents-cli" -version = "0.0.25" +version = "0.0.37" description = "Terminal interface for Deep Agents - interactive AI agent with file operations, shell access, and sub-agent capabilities." optional = false python-versions = "<4.0,>=3.11" groups = ["main"] files = [ - {file = "deepagents_cli-0.0.25-py3-none-any.whl", hash = "sha256:2dafc1c051ddf5fec841fa69c4300c75b89a1d3923dad108186dcddb2f02f2f5"}, - {file = "deepagents_cli-0.0.25.tar.gz", hash = "sha256:480e3396d23c2c8bf925ce1060729f76f62b5aea820dee995095017d56ce9793"}, + {file = "deepagents_cli-0.0.37-py3-none-any.whl", hash = "sha256:d66ca0d260f70972cdadcca1162317a16289700e285dea700b56650602d415f8"}, + {file = "deepagents_cli-0.0.37.tar.gz", hash = "sha256:c2296a403de056a77d121952abde116a5a1eafe72bef5fba0669f0f66bac2baa"}, ] [package.dependencies] aiosqlite = ">=0.19.0,<1.0.0" -daytona = ">=0.113.0,<1.0.0" -deepagents = "0.4.3" -langchain = ">=1.2.10,<2.0.0" -langchain-openai = ">=1.1.8,<2.0.0" +deepagents = "0.5.2" +deepagents-acp = ">=0.0.4" +httpx = ">=0.28.1,<1.0.0" +langchain = ">=1.2.15,<2.0.0" +langchain-anthropic = ">=1.4.0,<2.0.0" +langchain-google-genai = ">=4.2.1,<5.0.0" +langchain-mcp-adapters = ">=0.2.0,<1.0.0" +langchain-openai = ">=1.1.12,<2.0.0" +langgraph = ">=1.1.6,<2.0.0" langgraph-checkpoint-sqlite = ">=3.0.0,<4.0.0" -langsmith = ">=0.6.6" +langgraph-cli = {version = ">=0.4.15,<1.0.0", extras = ["inmem"]} +langgraph-sdk = ">=0.3.11,<1.0.0" +langsmith = {version = ">=0.7.7", extras = ["sandbox"]} markdownify = ">=0.13.0,<2.0.0" -modal = ">=0.65.0,<2.0.0" +packaging = ">=23.0" pillow = ">=10.0.0,<13.0.0" prompt-toolkit = ">=3.0.52,<4.0.0" pyperclip = ">=1.11.0,<2.0.0" @@ -916,29 +809,37 @@ python-dotenv = ">=1.0.0,<2.0.0" pyyaml = ">=6.0.0" requests = ">=2.0.0,<3.0.0" rich = ">=14.0.0,<15.0.0" -runloop-api-client = ">=0.69.0" tavily-python = ">=0.7.21,<1.0.0" textual = ">=8.0.0,<9.0.0" textual-autocomplete = ">=3.0.0,<5.0.0" +textual-speedups = ">=0.2.1,<1.0.0" tomli-w = ">=1.0.0,<2.0.0" +uuid-utils = ">=0.10.0,<1.0.0" [package.extras] -all-providers = ["langchain-anthropic (>=1.0.0,<2.0.0)", "langchain-aws (>=1.0.0,<2.0.0)", "langchain-cohere (>=0.5.0,<1.0.0)", "langchain-deepseek (>=1.0.0,<2.0.0)", "langchain-fireworks (>=1.0.0,<2.0.0)", "langchain-google-genai (>=4.0.0,<5.0.0)", "langchain-google-vertexai (>=3.0.0,<4.0.0)", "langchain-groq (>=1.0.0,<2.0.0)", "langchain-huggingface (>=1.0.0,<2.0.0)", "langchain-ibm (>=1.0.0,<2.0.0)", "langchain-mistralai (>=1.0.0,<2.0.0)", "langchain-nvidia-ai-endpoints (>=1.0.0,<2.0.0)", "langchain-ollama (>=1.0.0,<2.0.0)", "langchain-openai (>=1.1.8,<2.0.0)", "langchain-openrouter (>=0.0.1,<2.0.0)", "langchain-perplexity (>=1.0.0,<2.0.0)", "langchain-xai (>=1.0.0,<2.0.0)"] -anthropic = ["langchain-anthropic (>=1.0.0,<2.0.0)"] +agentcore = ["langchain-agentcore-codeinterpreter (>=0.0.1)"] +all-providers = ["langchain-anthropic (>=1.4.0,<2.0.0)", "langchain-aws (>=1.0.0,<2.0.0)", "langchain-baseten (>=0.1.9,<1.0.0)", "langchain-cohere (>=0.5.0,<1.0.0)", "langchain-deepseek (>=1.0.0,<2.0.0)", "langchain-fireworks (>=1.0.0,<2.0.0)", "langchain-google-genai (>=4.2.1,<5.0.0)", "langchain-google-vertexai (>=3.0.0,<4.0.0)", "langchain-groq (>=1.0.0,<2.0.0)", "langchain-huggingface (>=1.0.0,<2.0.0)", "langchain-ibm (>=1.0.0,<2.0.0)", "langchain-litellm (>=0.6.1,<2.0.0)", "langchain-mistralai (>=1.0.0,<2.0.0)", "langchain-nvidia-ai-endpoints (>=1.0.0,<2.0.0)", "langchain-ollama (>=1.0.0,<2.0.0)", "langchain-openai (>=1.1.12,<2.0.0)", "langchain-openrouter (>=0.2.0,<2.0.0)", "langchain-perplexity (>=1.0.0,<2.0.0)", "langchain-xai (>=1.0.0,<2.0.0)"] +all-sandboxes = ["langchain-agentcore-codeinterpreter (>=0.0.1)", "langchain-daytona (>=0.0.4)", "langchain-modal (>=0.0.2)", "langchain-runloop (>=0.0.3)"] +anthropic = ["langchain-anthropic (>=1.4.0,<2.0.0)"] +baseten = ["langchain-baseten (>=0.1.9,<1.0.0)"] bedrock = ["langchain-aws (>=1.0.0,<2.0.0)"] cohere = ["langchain-cohere (>=0.5.0,<1.0.0)"] +daytona = ["langchain-daytona (>=0.0.4)"] deepseek = ["langchain-deepseek (>=1.0.0,<2.0.0)"] fireworks = ["langchain-fireworks (>=1.0.0,<2.0.0)"] -google-genai = ["langchain-google-genai (>=4.0.0,<5.0.0)"] +google-genai = ["langchain-google-genai (>=4.2.1,<5.0.0)"] groq = ["langchain-groq (>=1.0.0,<2.0.0)"] huggingface = ["langchain-huggingface (>=1.0.0,<2.0.0)"] ibm = ["langchain-ibm (>=1.0.0,<2.0.0)"] +litellm = ["langchain-litellm (>=0.6.1,<2.0.0)"] mistralai = ["langchain-mistralai (>=1.0.0,<2.0.0)"] +modal = ["langchain-modal (>=0.0.2)"] nvidia = ["langchain-nvidia-ai-endpoints (>=1.0.0,<2.0.0)"] ollama = ["langchain-ollama (>=1.0.0,<2.0.0)"] -openai = ["langchain-openai (>=1.1.8,<2.0.0)"] -openrouter = ["langchain-openrouter (>=0.0.1,<2.0.0)"] +openai = ["langchain-openai (>=1.1.12,<2.0.0)"] +openrouter = ["langchain-openrouter (>=0.2.0,<2.0.0)"] perplexity = ["langchain-perplexity (>=1.0.0,<2.0.0)"] +runloop = ["langchain-runloop (>=0.0.3)"] vertexai = ["langchain-google-vertexai (>=3.0.0,<4.0.0)"] xai = ["langchain-xai (>=1.0.0,<2.0.0)"] @@ -954,24 +855,6 @@ files = [ {file = "defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69"}, ] -[[package]] -name = "deprecated" -version = "1.3.1" -description = "Python @deprecated decorator to deprecate old python classes, functions or methods." -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" -groups = ["main"] -files = [ - {file = "deprecated-1.3.1-py2.py3-none-any.whl", hash = "sha256:597bfef186b6f60181535a29fbe44865ce137a5079f295b479886c82729d5f3f"}, - {file = "deprecated-1.3.1.tar.gz", hash = "sha256:b1b50e0ff0c1fddaa5708a2c6b0a6588bb09b892825ab2b214ac9ea9d92a5223"}, -] - -[package.dependencies] -wrapt = ">=1.10,<3" - -[package.extras] -dev = ["PyTest", "PyTest-Cov", "bump2version (<1)", "setuptools ; python_version >= \"3.12\"", "tox"] - [[package]] name = "distro" version = "1.9.0" @@ -1001,27 +884,6 @@ dev = ["pre-commit (>=2.16.0) ; python_version >= \"3.9\"", "pydoctor (>=25.4.0) docs = ["pydoctor (>=25.4.0)"] test = ["pytest"] -[[package]] -name = "environs" -version = "14.5.0" -description = "simplified environment variable parsing" -optional = false -python-versions = ">=3.10" -groups = ["main"] -files = [ - {file = "environs-14.5.0-py3-none-any.whl", hash = "sha256:1abd3e3a5721fb09797438d6c902bc2f35d4580dfaffe68b8ee588b67b504e13"}, - {file = "environs-14.5.0.tar.gz", hash = "sha256:f7b8f6fcf3301bc674bc9c03e39b5986d116126ffb96764efd34c339ed9464ee"}, -] - -[package.dependencies] -marshmallow = ">=3.18.0" -python-dotenv = "*" - -[package.extras] -dev = ["environs[tests]", "pre-commit (>=4.0,<5.0)", "tox"] -django = ["dj-database-url", "dj-email-url", "django-cache-url"] -tests = ["backports.strenum ; python_version < \"3.11\"", "environs[django]", "packaging", "pytest"] - [[package]] name = "et-xmlfile" version = "2.0.0" @@ -1080,6 +942,18 @@ files = [ {file = "filetype-1.2.0.tar.gz", hash = "sha256:66b56cd6474bf41d8c54660347d37afcc3f7d1970648de365c102ef77548aadb"}, ] +[[package]] +name = "forbiddenfruit" +version = "0.1.4" +description = "Patch python built-in objects" +optional = false +python-versions = "*" +groups = ["main"] +markers = "implementation_name == \"cpython\"" +files = [ + {file = "forbiddenfruit-0.1.4.tar.gz", hash = "sha256:e3f7e66561a29ae129aac139a85d610dbf3dd896128187ed5454b6421f624253"}, +] + [[package]] name = "frozenlist" version = "1.8.0" @@ -1317,6 +1191,24 @@ websockets = ">=13.0.0,<17.0" aiohttp = ["aiohttp (>=3.10.11,<4.0.0)"] local-tokenizer = ["protobuf", "sentencepiece (>=0.2.0)"] +[[package]] +name = "googleapis-common-protos" +version = "1.74.0" +description = "Common protobufs used in Google APIs" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "googleapis_common_protos-1.74.0-py3-none-any.whl", hash = "sha256:702216f78610bb510e3f12ac3cafd281b7ac45cc5d86e90ad87e4d301a3426b5"}, + {file = "googleapis_common_protos-1.74.0.tar.gz", hash = "sha256:57971e4eeeba6aad1163c1f0fc88543f965bb49129b8bb55b2b7b26ecab084f1"}, +] + +[package.dependencies] +protobuf = ">=4.25.8,<8.0.0" + +[package.extras] +grpc = ["grpcio (>=1.44.0,<2.0.0)"] + [[package]] name = "greenlet" version = "3.3.0" @@ -1382,166 +1274,172 @@ test = ["objgraph", "psutil", "setuptools"] [[package]] name = "grpcio" -version = "1.76.0" +version = "1.78.0" description = "HTTP/2-based RPC framework" optional = false python-versions = ">=3.9" groups = ["main"] files = [ - {file = "grpcio-1.76.0-cp310-cp310-linux_armv7l.whl", hash = "sha256:65a20de41e85648e00305c1bb09a3598f840422e522277641145a32d42dcefcc"}, - {file = "grpcio-1.76.0-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:40ad3afe81676fd9ec6d9d406eda00933f218038433980aa19d401490e46ecde"}, - {file = "grpcio-1.76.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:035d90bc79eaa4bed83f524331d55e35820725c9fbb00ffa1904d5550ed7ede3"}, - {file = "grpcio-1.76.0-cp310-cp310-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:4215d3a102bd95e2e11b5395c78562967959824156af11fa93d18fdd18050990"}, - {file = "grpcio-1.76.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:49ce47231818806067aea3324d4bf13825b658ad662d3b25fada0bdad9b8a6af"}, - {file = "grpcio-1.76.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:8cc3309d8e08fd79089e13ed4819d0af72aa935dd8f435a195fd152796752ff2"}, - {file = "grpcio-1.76.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:971fd5a1d6e62e00d945423a567e42eb1fa678ba89072832185ca836a94daaa6"}, - {file = "grpcio-1.76.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:9d9adda641db7207e800a7f089068f6f645959f2df27e870ee81d44701dd9db3"}, - {file = "grpcio-1.76.0-cp310-cp310-win32.whl", hash = "sha256:063065249d9e7e0782d03d2bca50787f53bd0fb89a67de9a7b521c4a01f1989b"}, - {file = "grpcio-1.76.0-cp310-cp310-win_amd64.whl", hash = "sha256:a6ae758eb08088d36812dd5d9af7a9859c05b1e0f714470ea243694b49278e7b"}, - {file = "grpcio-1.76.0-cp311-cp311-linux_armv7l.whl", hash = "sha256:2e1743fbd7f5fa713a1b0a8ac8ebabf0ec980b5d8809ec358d488e273b9cf02a"}, - {file = "grpcio-1.76.0-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:a8c2cf1209497cf659a667d7dea88985e834c24b7c3b605e6254cbb5076d985c"}, - {file = "grpcio-1.76.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:08caea849a9d3c71a542827d6df9d5a69067b0a1efbea8a855633ff5d9571465"}, - {file = "grpcio-1.76.0-cp311-cp311-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:f0e34c2079d47ae9f6188211db9e777c619a21d4faba6977774e8fa43b085e48"}, - {file = "grpcio-1.76.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8843114c0cfce61b40ad48df65abcfc00d4dba82eae8718fab5352390848c5da"}, - {file = "grpcio-1.76.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8eddfb4d203a237da6f3cc8a540dad0517d274b5a1e9e636fd8d2c79b5c1d397"}, - {file = "grpcio-1.76.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:32483fe2aab2c3794101c2a159070584e5db11d0aa091b2c0ea9c4fc43d0d749"}, - {file = "grpcio-1.76.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:dcfe41187da8992c5f40aa8c5ec086fa3672834d2be57a32384c08d5a05b4c00"}, - {file = "grpcio-1.76.0-cp311-cp311-win32.whl", hash = "sha256:2107b0c024d1b35f4083f11245c0e23846ae64d02f40b2b226684840260ed054"}, - {file = "grpcio-1.76.0-cp311-cp311-win_amd64.whl", hash = "sha256:522175aba7af9113c48ec10cc471b9b9bd4f6ceb36aeb4544a8e2c80ed9d252d"}, - {file = "grpcio-1.76.0-cp312-cp312-linux_armv7l.whl", hash = "sha256:81fd9652b37b36f16138611c7e884eb82e0cec137c40d3ef7c3f9b3ed00f6ed8"}, - {file = "grpcio-1.76.0-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:04bbe1bfe3a68bbfd4e52402ab7d4eb59d72d02647ae2042204326cf4bbad280"}, - {file = "grpcio-1.76.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d388087771c837cdb6515539f43b9d4bf0b0f23593a24054ac16f7a960be16f4"}, - {file = "grpcio-1.76.0-cp312-cp312-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:9f8f757bebaaea112c00dba718fc0d3260052ce714e25804a03f93f5d1c6cc11"}, - {file = "grpcio-1.76.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:980a846182ce88c4f2f7e2c22c56aefd515daeb36149d1c897f83cf57999e0b6"}, - {file = "grpcio-1.76.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f92f88e6c033db65a5ae3d97905c8fea9c725b63e28d5a75cb73b49bda5024d8"}, - {file = "grpcio-1.76.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:4baf3cbe2f0be3289eb68ac8ae771156971848bb8aaff60bad42005539431980"}, - {file = "grpcio-1.76.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:615ba64c208aaceb5ec83bfdce7728b80bfeb8be97562944836a7a0a9647d882"}, - {file = "grpcio-1.76.0-cp312-cp312-win32.whl", hash = "sha256:45d59a649a82df5718fd9527ce775fd66d1af35e6d31abdcdc906a49c6822958"}, - {file = "grpcio-1.76.0-cp312-cp312-win_amd64.whl", hash = "sha256:c088e7a90b6017307f423efbb9d1ba97a22aa2170876223f9709e9d1de0b5347"}, - {file = "grpcio-1.76.0-cp313-cp313-linux_armv7l.whl", hash = "sha256:26ef06c73eb53267c2b319f43e6634c7556ea37672029241a056629af27c10e2"}, - {file = "grpcio-1.76.0-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:45e0111e73f43f735d70786557dc38141185072d7ff8dc1829d6a77ac1471468"}, - {file = "grpcio-1.76.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:83d57312a58dcfe2a3a0f9d1389b299438909a02db60e2f2ea2ae2d8034909d3"}, - {file = "grpcio-1.76.0-cp313-cp313-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:3e2a27c89eb9ac3d81ec8835e12414d73536c6e620355d65102503064a4ed6eb"}, - {file = "grpcio-1.76.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:61f69297cba3950a524f61c7c8ee12e55c486cb5f7db47ff9dcee33da6f0d3ae"}, - {file = "grpcio-1.76.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:6a15c17af8839b6801d554263c546c69c4d7718ad4321e3166175b37eaacca77"}, - {file = "grpcio-1.76.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:25a18e9810fbc7e7f03ec2516addc116a957f8cbb8cbc95ccc80faa072743d03"}, - {file = "grpcio-1.76.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:931091142fd8cc14edccc0845a79248bc155425eee9a98b2db2ea4f00a235a42"}, - {file = "grpcio-1.76.0-cp313-cp313-win32.whl", hash = "sha256:5e8571632780e08526f118f74170ad8d50fb0a48c23a746bef2a6ebade3abd6f"}, - {file = "grpcio-1.76.0-cp313-cp313-win_amd64.whl", hash = "sha256:f9f7bd5faab55f47231ad8dba7787866b69f5e93bc306e3915606779bbfb4ba8"}, - {file = "grpcio-1.76.0-cp314-cp314-linux_armv7l.whl", hash = "sha256:ff8a59ea85a1f2191a0ffcc61298c571bc566332f82e5f5be1b83c9d8e668a62"}, - {file = "grpcio-1.76.0-cp314-cp314-macosx_11_0_universal2.whl", hash = "sha256:06c3d6b076e7b593905d04fdba6a0525711b3466f43b3400266f04ff735de0cd"}, - {file = "grpcio-1.76.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:fd5ef5932f6475c436c4a55e4336ebbe47bd3272be04964a03d316bbf4afbcbc"}, - {file = "grpcio-1.76.0-cp314-cp314-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:b331680e46239e090f5b3cead313cc772f6caa7d0fc8de349337563125361a4a"}, - {file = "grpcio-1.76.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2229ae655ec4e8999599469559e97630185fdd53ae1e8997d147b7c9b2b72cba"}, - {file = "grpcio-1.76.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:490fa6d203992c47c7b9e4a9d39003a0c2bcc1c9aa3c058730884bbbb0ee9f09"}, - {file = "grpcio-1.76.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:479496325ce554792dba6548fae3df31a72cef7bad71ca2e12b0e58f9b336bfc"}, - {file = "grpcio-1.76.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:1c9b93f79f48b03ada57ea24725d83a30284a012ec27eab2cf7e50a550cbbbcc"}, - {file = "grpcio-1.76.0-cp314-cp314-win32.whl", hash = "sha256:747fa73efa9b8b1488a95d0ba1039c8e2dca0f741612d80415b1e1c560febf4e"}, - {file = "grpcio-1.76.0-cp314-cp314-win_amd64.whl", hash = "sha256:922fa70ba549fce362d2e2871ab542082d66e2aaf0c19480ea453905b01f384e"}, - {file = "grpcio-1.76.0-cp39-cp39-linux_armv7l.whl", hash = "sha256:8ebe63ee5f8fa4296b1b8cfc743f870d10e902ca18afc65c68cf46fd39bb0783"}, - {file = "grpcio-1.76.0-cp39-cp39-macosx_11_0_universal2.whl", hash = "sha256:3bf0f392c0b806905ed174dcd8bdd5e418a40d5567a05615a030a5aeddea692d"}, - {file = "grpcio-1.76.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:0b7604868b38c1bfd5cf72d768aedd7db41d78cb6a4a18585e33fb0f9f2363fd"}, - {file = "grpcio-1.76.0-cp39-cp39-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:e6d1db20594d9daba22f90da738b1a0441a7427552cc6e2e3d1297aeddc00378"}, - {file = "grpcio-1.76.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d099566accf23d21037f18a2a63d323075bebace807742e4b0ac210971d4dd70"}, - {file = "grpcio-1.76.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:ebea5cc3aa8ea72e04df9913492f9a96d9348db876f9dda3ad729cfedf7ac416"}, - {file = "grpcio-1.76.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:0c37db8606c258e2ee0c56b78c62fc9dee0e901b5dbdcf816c2dd4ad652b8b0c"}, - {file = "grpcio-1.76.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:ebebf83299b0cb1721a8859ea98f3a77811e35dce7609c5c963b9ad90728f886"}, - {file = "grpcio-1.76.0-cp39-cp39-win32.whl", hash = "sha256:0aaa82d0813fd4c8e589fac9b65d7dd88702555f702fb10417f96e2a2a6d4c0f"}, - {file = "grpcio-1.76.0-cp39-cp39-win_amd64.whl", hash = "sha256:acab0277c40eff7143c2323190ea57b9ee5fd353d8190ee9652369fae735668a"}, - {file = "grpcio-1.76.0.tar.gz", hash = "sha256:7be78388d6da1a25c0d5ec506523db58b18be22d9c37d8d3a32c08be4987bd73"}, + {file = "grpcio-1.78.0-cp310-cp310-linux_armv7l.whl", hash = "sha256:7cc47943d524ee0096f973e1081cb8f4f17a4615f2116882a5f1416e4cfe92b5"}, + {file = "grpcio-1.78.0-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:c3f293fdc675ccba4db5a561048cca627b5e7bd1c8a6973ffedabe7d116e22e2"}, + {file = "grpcio-1.78.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:10a9a644b5dd5aec3b82b5b0b90d41c0fa94c85ef42cb42cf78a23291ddb5e7d"}, + {file = "grpcio-1.78.0-cp310-cp310-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:4c5533d03a6cbd7f56acfc9cfb44ea64f63d29091e40e44010d34178d392d7eb"}, + {file = "grpcio-1.78.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ff870aebe9a93a85283837801d35cd5f8814fe2ad01e606861a7fb47c762a2b7"}, + {file = "grpcio-1.78.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:391e93548644e6b2726f1bb84ed60048d4bcc424ce5e4af0843d28ca0b754fec"}, + {file = "grpcio-1.78.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:df2c8f3141f7cbd112a6ebbd760290b5849cda01884554f7c67acc14e7b1758a"}, + {file = "grpcio-1.78.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:bd8cb8026e5f5b50498a3c4f196f57f9db344dad829ffae16b82e4fdbaea2813"}, + {file = "grpcio-1.78.0-cp310-cp310-win32.whl", hash = "sha256:f8dff3d9777e5d2703a962ee5c286c239bf0ba173877cc68dc02c17d042e29de"}, + {file = "grpcio-1.78.0-cp310-cp310-win_amd64.whl", hash = "sha256:94f95cf5d532d0e717eed4fc1810e8e6eded04621342ec54c89a7c2f14b581bf"}, + {file = "grpcio-1.78.0-cp311-cp311-linux_armv7l.whl", hash = "sha256:2777b783f6c13b92bd7b716667452c329eefd646bfb3f2e9dabea2e05dbd34f6"}, + {file = "grpcio-1.78.0-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:9dca934f24c732750389ce49d638069c3892ad065df86cb465b3fa3012b70c9e"}, + {file = "grpcio-1.78.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:459ab414b35f4496138d0ecd735fed26f1318af5e52cb1efbc82a09f0d5aa911"}, + {file = "grpcio-1.78.0-cp311-cp311-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:082653eecbdf290e6e3e2c276ab2c54b9e7c299e07f4221872380312d8cf395e"}, + {file = "grpcio-1.78.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:85f93781028ec63f383f6bc90db785a016319c561cc11151fbb7b34e0d012303"}, + {file = "grpcio-1.78.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:f12857d24d98441af6a1d5c87442d624411db486f7ba12550b07788f74b67b04"}, + {file = "grpcio-1.78.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:5397fff416b79e4b284959642a4e95ac4b0f1ece82c9993658e0e477d40551ec"}, + {file = "grpcio-1.78.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:fbe6e89c7ffb48518384068321621b2a69cab509f58e40e4399fdd378fa6d074"}, + {file = "grpcio-1.78.0-cp311-cp311-win32.whl", hash = "sha256:6092beabe1966a3229f599d7088b38dfc8ffa1608b5b5cdda31e591e6500f856"}, + {file = "grpcio-1.78.0-cp311-cp311-win_amd64.whl", hash = "sha256:1afa62af6e23f88629f2b29ec9e52ec7c65a7176c1e0a83292b93c76ca882558"}, + {file = "grpcio-1.78.0-cp312-cp312-linux_armv7l.whl", hash = "sha256:f9ab915a267fc47c7e88c387a3a28325b58c898e23d4995f765728f4e3dedb97"}, + {file = "grpcio-1.78.0-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:3f8904a8165ab21e07e58bf3e30a73f4dffc7a1e0dbc32d51c61b5360d26f43e"}, + {file = "grpcio-1.78.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:859b13906ce098c0b493af92142ad051bf64c7870fa58a123911c88606714996"}, + {file = "grpcio-1.78.0-cp312-cp312-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:b2342d87af32790f934a79c3112641e7b27d63c261b8b4395350dad43eff1dc7"}, + {file = "grpcio-1.78.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:12a771591ae40bc65ba67048fa52ef4f0e6db8279e595fd349f9dfddeef571f9"}, + {file = "grpcio-1.78.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:185dea0d5260cbb2d224c507bf2a5444d5abbb1fa3594c1ed7e4c709d5eb8383"}, + {file = "grpcio-1.78.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:51b13f9aed9d59ee389ad666b8c2214cc87b5de258fa712f9ab05f922e3896c6"}, + {file = "grpcio-1.78.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fd5f135b1bd58ab088930b3c613455796dfa0393626a6972663ccdda5b4ac6ce"}, + {file = "grpcio-1.78.0-cp312-cp312-win32.whl", hash = "sha256:94309f498bcc07e5a7d16089ab984d42ad96af1d94b5a4eb966a266d9fcabf68"}, + {file = "grpcio-1.78.0-cp312-cp312-win_amd64.whl", hash = "sha256:9566fe4ababbb2610c39190791e5b829869351d14369603702e890ef3ad2d06e"}, + {file = "grpcio-1.78.0-cp313-cp313-linux_armv7l.whl", hash = "sha256:ce3a90455492bf8bfa38e56fbbe1dbd4f872a3d8eeaf7337dc3b1c8aa28c271b"}, + {file = "grpcio-1.78.0-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:2bf5e2e163b356978b23652c4818ce4759d40f4712ee9ec5a83c4be6f8c23a3a"}, + {file = "grpcio-1.78.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:8f2ac84905d12918e4e55a16da17939eb63e433dc11b677267c35568aa63fc84"}, + {file = "grpcio-1.78.0-cp313-cp313-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:b58f37edab4a3881bc6c9bca52670610e0c9ca14e2ea3cf9debf185b870457fb"}, + {file = "grpcio-1.78.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:735e38e176a88ce41840c21bb49098ab66177c64c82426e24e0082500cc68af5"}, + {file = "grpcio-1.78.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:2045397e63a7a0ee7957c25f7dbb36ddc110e0cfb418403d110c0a7a68a844e9"}, + {file = "grpcio-1.78.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:a9f136fbafe7ccf4ac7e8e0c28b31066e810be52d6e344ef954a3a70234e1702"}, + {file = "grpcio-1.78.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:748b6138585379c737adc08aeffd21222abbda1a86a0dca2a39682feb9196c20"}, + {file = "grpcio-1.78.0-cp313-cp313-win32.whl", hash = "sha256:271c73e6e5676afe4fc52907686670c7cea22ab2310b76a59b678403ed40d670"}, + {file = "grpcio-1.78.0-cp313-cp313-win_amd64.whl", hash = "sha256:f2d4e43ee362adfc05994ed479334d5a451ab7bc3f3fee1b796b8ca66895acb4"}, + {file = "grpcio-1.78.0-cp314-cp314-linux_armv7l.whl", hash = "sha256:e87cbc002b6f440482b3519e36e1313eb5443e9e9e73d6a52d43bd2004fcfd8e"}, + {file = "grpcio-1.78.0-cp314-cp314-macosx_11_0_universal2.whl", hash = "sha256:c41bc64626db62e72afec66b0c8a0da76491510015417c127bfc53b2fe6d7f7f"}, + {file = "grpcio-1.78.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:8dfffba826efcf366b1e3ccc37e67afe676f290e13a3b48d31a46739f80a8724"}, + {file = "grpcio-1.78.0-cp314-cp314-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:74be1268d1439eaaf552c698cdb11cd594f0c49295ae6bb72c34ee31abbe611b"}, + {file = "grpcio-1.78.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:be63c88b32e6c0f1429f1398ca5c09bc64b0d80950c8bb7807d7d7fb36fb84c7"}, + {file = "grpcio-1.78.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:3c586ac70e855c721bda8f548d38c3ca66ac791dc49b66a8281a1f99db85e452"}, + {file = "grpcio-1.78.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:35eb275bf1751d2ffbd8f57cdbc46058e857cf3971041521b78b7db94bdaf127"}, + {file = "grpcio-1.78.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:207db540302c884b8848036b80db352a832b99dfdf41db1eb554c2c2c7800f65"}, + {file = "grpcio-1.78.0-cp314-cp314-win32.whl", hash = "sha256:57bab6deef2f4f1ca76cc04565df38dc5713ae6c17de690721bdf30cb1e0545c"}, + {file = "grpcio-1.78.0-cp314-cp314-win_amd64.whl", hash = "sha256:dce09d6116df20a96acfdbf85e4866258c3758180e8c49845d6ba8248b6d0bbb"}, + {file = "grpcio-1.78.0-cp39-cp39-linux_armv7l.whl", hash = "sha256:86f85dd7c947baa707078a236288a289044836d4b640962018ceb9cd1f899af5"}, + {file = "grpcio-1.78.0-cp39-cp39-macosx_11_0_universal2.whl", hash = "sha256:de8cb00d1483a412a06394b8303feec5dcb3b55f81d83aa216dbb6a0b86a94f5"}, + {file = "grpcio-1.78.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:e888474dee2f59ff68130f8a397792d8cb8e17e6b3434339657ba4ee90845a8c"}, + {file = "grpcio-1.78.0-cp39-cp39-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:86ce2371bfd7f212cf60d8517e5e854475c2c43ce14aa910e136ace72c6db6c1"}, + {file = "grpcio-1.78.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b0c689c02947d636bc7fab3e30cc3a3445cca99c834dfb77cd4a6cabfc1c5597"}, + {file = "grpcio-1.78.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:ce7599575eeb25c0f4dc1be59cada6219f3b56176f799627f44088b21381a28a"}, + {file = "grpcio-1.78.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:684083fd383e9dc04c794adb838d4faea08b291ce81f64ecd08e4577c7398adf"}, + {file = "grpcio-1.78.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:ab399ef5e3cd2a721b1038a0f3021001f19c5ab279f145e1146bb0b9f1b2b12c"}, + {file = "grpcio-1.78.0-cp39-cp39-win32.whl", hash = "sha256:f3d6379493e18ad4d39537a82371c5281e153e963cecb13f953ebac155756525"}, + {file = "grpcio-1.78.0-cp39-cp39-win_amd64.whl", hash = "sha256:5361a0630a7fdb58a6a97638ab70e1dae2893c4d08d7aba64ded28bb9e7a29df"}, + {file = "grpcio-1.78.0.tar.gz", hash = "sha256:7382b95189546f375c174f53a5fa873cef91c4b8005faa05cc5b3beea9c4f1c5"}, ] [package.dependencies] typing-extensions = ">=4.12,<5.0" [package.extras] -protobuf = ["grpcio-tools (>=1.76.0)"] +protobuf = ["grpcio-tools (>=1.78.0)"] + +[[package]] +name = "grpcio-health-checking" +version = "1.78.0" +description = "Standard Health Checking Service for gRPC" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "grpcio_health_checking-1.78.0-py3-none-any.whl", hash = "sha256:309798c098c5de72a9bff7172d788fdf309d246d231db9955b32e7c1c773fbeb"}, + {file = "grpcio_health_checking-1.78.0.tar.gz", hash = "sha256:78526d5c60b9b99fd18954b89f86d70033c702e96ad6ccc9749baf16136979b3"}, +] + +[package.dependencies] +grpcio = ">=1.78.0" +protobuf = ">=6.31.1,<7.0.0" [[package]] name = "grpcio-tools" -version = "1.71.2" +version = "1.78.0" description = "Protobuf code generator for gRPC" optional = false python-versions = ">=3.9" groups = ["main"] -markers = "python_version >= \"3.13\"" files = [ - {file = "grpcio_tools-1.71.2-cp310-cp310-linux_armv7l.whl", hash = "sha256:ab8a28c2e795520d6dc6ffd7efaef4565026dbf9b4f5270de2f3dd1ce61d2318"}, - {file = "grpcio_tools-1.71.2-cp310-cp310-macosx_10_14_universal2.whl", hash = "sha256:654ecb284a592d39a85556098b8c5125163435472a20ead79b805cf91814b99e"}, - {file = "grpcio_tools-1.71.2-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:b49aded2b6c890ff690d960e4399a336c652315c6342232c27bd601b3705739e"}, - {file = "grpcio_tools-1.71.2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a7811a6fc1c4b4e5438e5eb98dbd52c2dc4a69d1009001c13356e6636322d41a"}, - {file = "grpcio_tools-1.71.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:393a9c80596aa2b3f05af854e23336ea8c295593bbb35d9adae3d8d7943672bd"}, - {file = "grpcio_tools-1.71.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:823e1f23c12da00f318404c4a834bb77cd150d14387dee9789ec21b335249e46"}, - {file = "grpcio_tools-1.71.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:9bfbea79d6aec60f2587133ba766ede3dc3e229641d1a1e61d790d742a3d19eb"}, - {file = "grpcio_tools-1.71.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:32f3a67b10728835b5ffb63fbdbe696d00e19a27561b9cf5153e72dbb93021ba"}, - {file = "grpcio_tools-1.71.2-cp310-cp310-win32.whl", hash = "sha256:7fcf9d92c710bfc93a1c0115f25e7d49a65032ff662b38b2f704668ce0a938df"}, - {file = "grpcio_tools-1.71.2-cp310-cp310-win_amd64.whl", hash = "sha256:914b4275be810290266e62349f2d020bb7cc6ecf9edb81da3c5cddb61a95721b"}, - {file = "grpcio_tools-1.71.2-cp311-cp311-linux_armv7l.whl", hash = "sha256:0acb8151ea866be5b35233877fbee6445c36644c0aa77e230c9d1b46bf34b18b"}, - {file = "grpcio_tools-1.71.2-cp311-cp311-macosx_10_14_universal2.whl", hash = "sha256:b28f8606f4123edb4e6da281547465d6e449e89f0c943c376d1732dc65e6d8b3"}, - {file = "grpcio_tools-1.71.2-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:cbae6f849ad2d1f5e26cd55448b9828e678cb947fa32c8729d01998238266a6a"}, - {file = "grpcio_tools-1.71.2-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e4d1027615cfb1e9b1f31f2f384251c847d68c2f3e025697e5f5c72e26ed1316"}, - {file = "grpcio_tools-1.71.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9bac95662dc69338edb9eb727cc3dd92342131b84b12b3e8ec6abe973d4cbf1b"}, - {file = "grpcio_tools-1.71.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c50250c7248055040f89eb29ecad39d3a260a4b6d3696af1575945f7a8d5dcdc"}, - {file = "grpcio_tools-1.71.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:6ab1ad955e69027ef12ace4d700c5fc36341bdc2f420e87881e9d6d02af3d7b8"}, - {file = "grpcio_tools-1.71.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:dd75dde575781262b6b96cc6d0b2ac6002b2f50882bf5e06713f1bf364ee6e09"}, - {file = "grpcio_tools-1.71.2-cp311-cp311-win32.whl", hash = "sha256:9a3cb244d2bfe0d187f858c5408d17cb0e76ca60ec9a274c8fd94cc81457c7fc"}, - {file = "grpcio_tools-1.71.2-cp311-cp311-win_amd64.whl", hash = "sha256:00eb909997fd359a39b789342b476cbe291f4dd9c01ae9887a474f35972a257e"}, - {file = "grpcio_tools-1.71.2-cp312-cp312-linux_armv7l.whl", hash = "sha256:bfc0b5d289e383bc7d317f0e64c9dfb59dc4bef078ecd23afa1a816358fb1473"}, - {file = "grpcio_tools-1.71.2-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:b4669827716355fa913b1376b1b985855d5cfdb63443f8d18faf210180199006"}, - {file = "grpcio_tools-1.71.2-cp312-cp312-manylinux_2_17_aarch64.whl", hash = "sha256:d4071f9b44564e3f75cdf0f05b10b3e8c7ea0ca5220acbf4dc50b148552eef2f"}, - {file = "grpcio_tools-1.71.2-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a28eda8137d587eb30081384c256f5e5de7feda34776f89848b846da64e4be35"}, - {file = "grpcio_tools-1.71.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b19c083198f5eb15cc69c0a2f2c415540cbc636bfe76cea268e5894f34023b40"}, - {file = "grpcio_tools-1.71.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:784c284acda0d925052be19053d35afbf78300f4d025836d424cf632404f676a"}, - {file = "grpcio_tools-1.71.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:381e684d29a5d052194e095546eef067201f5af30fd99b07b5d94766f44bf1ae"}, - {file = "grpcio_tools-1.71.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:3e4b4801fabd0427fc61d50d09588a01b1cfab0ec5e8a5f5d515fbdd0891fd11"}, - {file = "grpcio_tools-1.71.2-cp312-cp312-win32.whl", hash = "sha256:84ad86332c44572305138eafa4cc30040c9a5e81826993eae8227863b700b490"}, - {file = "grpcio_tools-1.71.2-cp312-cp312-win_amd64.whl", hash = "sha256:8e1108d37eecc73b1c4a27350a6ed921b5dda25091700c1da17cfe30761cd462"}, - {file = "grpcio_tools-1.71.2-cp313-cp313-linux_armv7l.whl", hash = "sha256:b0f0a8611614949c906e25c225e3360551b488d10a366c96d89856bcef09f729"}, - {file = "grpcio_tools-1.71.2-cp313-cp313-macosx_10_14_universal2.whl", hash = "sha256:7931783ea7ac42ac57f94c5047d00a504f72fbd96118bf7df911bb0e0435fc0f"}, - {file = "grpcio_tools-1.71.2-cp313-cp313-manylinux_2_17_aarch64.whl", hash = "sha256:d188dc28e069aa96bb48cb11b1338e47ebdf2e2306afa58a8162cc210172d7a8"}, - {file = "grpcio_tools-1.71.2-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f36c4b3cc42ad6ef67430639174aaf4a862d236c03c4552c4521501422bfaa26"}, - {file = "grpcio_tools-1.71.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4bd9ed12ce93b310f0cef304176049d0bc3b9f825e9c8c6a23e35867fed6affd"}, - {file = "grpcio_tools-1.71.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:7ce27e76dd61011182d39abca38bae55d8a277e9b7fe30f6d5466255baccb579"}, - {file = "grpcio_tools-1.71.2-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:dcc17bf59b85c3676818f2219deacac0156492f32ca165e048427d2d3e6e1157"}, - {file = "grpcio_tools-1.71.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:706360c71bdd722682927a1fb517c276ccb816f1e30cb71f33553e5817dc4031"}, - {file = "grpcio_tools-1.71.2-cp313-cp313-win32.whl", hash = "sha256:bcf751d5a81c918c26adb2d6abcef71035c77d6eb9dd16afaf176ee096e22c1d"}, - {file = "grpcio_tools-1.71.2-cp313-cp313-win_amd64.whl", hash = "sha256:b1581a1133552aba96a730178bc44f6f1a071f0eb81c5b6bc4c0f89f5314e2b8"}, - {file = "grpcio_tools-1.71.2-cp39-cp39-linux_armv7l.whl", hash = "sha256:344aa8973850bc36fd0ce81aa6443bd5ab41dc3a25903b36cd1e70f71ceb53c9"}, - {file = "grpcio_tools-1.71.2-cp39-cp39-macosx_10_14_universal2.whl", hash = "sha256:4d32450a4c8a97567b32154379d97398b7eba090bce756aff57aef5d80d8c953"}, - {file = "grpcio_tools-1.71.2-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:f596dbc1e46f9e739e09af553bf3c3321be3d603e579f38ffa9f2e0e4a25f4f7"}, - {file = "grpcio_tools-1.71.2-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d7723ff599104188cb870d01406b65e67e2493578347cc13d50e9dc372db36ef"}, - {file = "grpcio_tools-1.71.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:948b018b6b69641b10864a3f19dd3c2b7ca3dfce4460eb836ab28b058e7deb3e"}, - {file = "grpcio_tools-1.71.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0dd058c06ce95a99f78851c05db30af507227878013d46a8339e44fb24855ff7"}, - {file = "grpcio_tools-1.71.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:b3312bdd5952bba2ef8e4314b2e2f886fa23b2f6d605cd56097605ae65d30515"}, - {file = "grpcio_tools-1.71.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:085de63843946b967ae561e7dd832fa03147f01282f462a0a0cbe1571d9ee986"}, - {file = "grpcio_tools-1.71.2-cp39-cp39-win32.whl", hash = "sha256:c1ff5f79f49768d4c561508b62878f27198b3420a87390e0c51969b8dbfcfca8"}, - {file = "grpcio_tools-1.71.2-cp39-cp39-win_amd64.whl", hash = "sha256:c3e02b345cf96673dcf77599a61482f68c318a62c9cde20a5ae0882619ff8c98"}, - {file = "grpcio_tools-1.71.2.tar.gz", hash = "sha256:b5304d65c7569b21270b568e404a5a843cf027c66552a6a0978b23f137679c09"}, + {file = "grpcio_tools-1.78.0-cp310-cp310-linux_armv7l.whl", hash = "sha256:ea64e38d1caa2b8468b08cb193f5a091d169b6dbfe1c7dac37d746651ab9d84e"}, + {file = "grpcio_tools-1.78.0-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:4003fcd5cbb5d578b06176fd45883a72a8f9203152149b7c680ce28653ad9e3a"}, + {file = "grpcio_tools-1.78.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:fe6b0081775394c61ec633c9ff5dbc18337100eabb2e946b5c83967fe43b2748"}, + {file = "grpcio_tools-1.78.0-cp310-cp310-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:7e989ad2cd93db52d7f1a643ecaa156ac55bf0484f1007b485979ce8aef62022"}, + {file = "grpcio_tools-1.78.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b874991797e96c41a37e563236c3317ed41b915eff25b292b202d6277d30da85"}, + {file = "grpcio_tools-1.78.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:daa8c288b728228377aaf758925692fc6068939d9fa32f92ca13dedcbeb41f33"}, + {file = "grpcio_tools-1.78.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:87e648759b06133199f4bc0c0053e3819f4ec3b900dc399e1097b6065db998b5"}, + {file = "grpcio_tools-1.78.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f3d3ced52bfe39eba3d24f5a8fab4e12d071959384861b41f0c52ca5399d6920"}, + {file = "grpcio_tools-1.78.0-cp310-cp310-win32.whl", hash = "sha256:4bb6ed690d417b821808796221bde079377dff98fdc850ac157ad2f26cda7a36"}, + {file = "grpcio_tools-1.78.0-cp310-cp310-win_amd64.whl", hash = "sha256:0c676d8342fd53bd85a5d5f0d070cd785f93bc040510014708ede6fcb32fada1"}, + {file = "grpcio_tools-1.78.0-cp311-cp311-linux_armv7l.whl", hash = "sha256:6a8b8b7b49f319d29dbcf507f62984fa382d1d10437d75c3f26db5f09c4ac0af"}, + {file = "grpcio_tools-1.78.0-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:d62cf3b68372b0c6d722a6165db41b976869811abeabc19c8522182978d8db10"}, + {file = "grpcio_tools-1.78.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:fa9056742efeaf89d5fe14198af71e5cbc4fbf155d547b89507e19d6025906c6"}, + {file = "grpcio_tools-1.78.0-cp311-cp311-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:e3191af125dcb705aa6bc3856ba81ba99b94121c1b6ebee152e66ea084672831"}, + {file = "grpcio_tools-1.78.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:283239ddbb67ae83fac111c61b25d8527a1dbd355b377cbc8383b79f1329944d"}, + {file = "grpcio_tools-1.78.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:ac977508c0db15301ef36d6c79769ec1a6cc4e3bc75735afca7fe7e360cead3a"}, + {file = "grpcio_tools-1.78.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4ff605e25652a0bd13aa8a73a09bc48669c68170902f5d2bf1468a57d5e78771"}, + {file = "grpcio_tools-1.78.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0197d7b561c79be78ab93d0fe2836c8def470683df594bae3ac89dd8e5c821b2"}, + {file = "grpcio_tools-1.78.0-cp311-cp311-win32.whl", hash = "sha256:28f71f591f7f39555863ced84fcc209cbf4454e85ef957232f43271ee99af577"}, + {file = "grpcio_tools-1.78.0-cp311-cp311-win_amd64.whl", hash = "sha256:5a6de495dabf86a3b40b9a7492994e1232b077af9d63080811838b781abbe4e8"}, + {file = "grpcio_tools-1.78.0-cp312-cp312-linux_armv7l.whl", hash = "sha256:9eb122da57d4cad7d339fc75483116f0113af99e8d2c67f3ef9cae7501d806e4"}, + {file = "grpcio_tools-1.78.0-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:d0c501b8249940b886420e6935045c44cb818fa6f265f4c2b97d5cff9cb5e796"}, + {file = "grpcio_tools-1.78.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:77e5aa2d2a7268d55b1b113f958264681ef1994c970f69d48db7d4683d040f57"}, + {file = "grpcio_tools-1.78.0-cp312-cp312-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:8e3c0b0e6ba5275322ba29a97bf890565a55f129f99a21b121145e9e93a22525"}, + {file = "grpcio_tools-1.78.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:975d4cb48694e20ebd78e1643e5f1cd94cdb6a3d38e677a8e84ae43665aa4790"}, + {file = "grpcio_tools-1.78.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:553ff18c5d52807dedecf25045ae70bad7a3dbba0b27a9a3cdd9bcf0a1b7baec"}, + {file = "grpcio_tools-1.78.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:8c7f5e4af5a84d2e96c862b1a65e958a538237e268d5f8203a3a784340975b51"}, + {file = "grpcio_tools-1.78.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:96183e2b44afc3f9a761e9d0f985c3b44e03e8bb98e626241a6cbfb3b6f7e88f"}, + {file = "grpcio_tools-1.78.0-cp312-cp312-win32.whl", hash = "sha256:2250e8424c565a88573f7dc10659a0b92802e68c2a1d57e41872c9b88ccea7a6"}, + {file = "grpcio_tools-1.78.0-cp312-cp312-win_amd64.whl", hash = "sha256:217d1fa29de14d9c567d616ead7cb0fef33cde36010edff5a9390b00d52e5094"}, + {file = "grpcio_tools-1.78.0-cp313-cp313-linux_armv7l.whl", hash = "sha256:2d6de1cc23bdc1baafc23e201b1e48c617b8c1418b4d8e34cebf72141676e5fb"}, + {file = "grpcio_tools-1.78.0-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:2afeaad88040894c76656202ff832cb151bceb05c0e6907e539d129188b1e456"}, + {file = "grpcio_tools-1.78.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:33cc593735c93c03d63efe7a8ba25f3c66f16c52f0651910712490244facad72"}, + {file = "grpcio_tools-1.78.0-cp313-cp313-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:2921d7989c4d83b71f03130ab415fa4d66e6693b8b8a1fcbb7a1c67cff19b812"}, + {file = "grpcio_tools-1.78.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e6a0df438e82c804c7b95e3f311c97c2f876dcc36376488d5b736b7bcf5a9b45"}, + {file = "grpcio_tools-1.78.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e9c6070a9500798225191ef25d0055a15d2c01c9c8f2ee7b681fffa99c98c822"}, + {file = "grpcio_tools-1.78.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:394e8b57d85370a62e5b0a4d64c96fcf7568345c345d8590c821814d227ecf1d"}, + {file = "grpcio_tools-1.78.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a3ef700293ab375e111a2909d87434ed0a0b086adf0ce67a8d9cf12ea7765e63"}, + {file = "grpcio_tools-1.78.0-cp313-cp313-win32.whl", hash = "sha256:6993b960fec43a8d840ee5dc20247ef206c1a19587ea49fe5e6cc3d2a09c1585"}, + {file = "grpcio_tools-1.78.0-cp313-cp313-win_amd64.whl", hash = "sha256:275ce3c2978842a8cf9dd88dce954e836e590cf7029649ad5d1145b779039ed5"}, + {file = "grpcio_tools-1.78.0-cp314-cp314-linux_armv7l.whl", hash = "sha256:8b080d0d072e6032708a3a91731b808074d7ab02ca8fb9847b6a011fdce64cd9"}, + {file = "grpcio_tools-1.78.0-cp314-cp314-macosx_11_0_universal2.whl", hash = "sha256:8c0ad8f8f133145cd7008b49cb611a5c6a9d89ab276c28afa17050516e801f79"}, + {file = "grpcio_tools-1.78.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2f8ea092a7de74c6359335d36f0674d939a3c7e1a550f4c2c9e80e0226de8fe4"}, + {file = "grpcio_tools-1.78.0-cp314-cp314-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:da422985e0cac822b41822f43429c19ecb27c81ffe3126d0b74e77edec452608"}, + {file = "grpcio_tools-1.78.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:4fab1faa3fbcb246263e68da7a8177d73772283f9db063fb8008517480888d26"}, + {file = "grpcio_tools-1.78.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:dd9c094f73f734becae3f20f27d4944d3cd8fb68db7338ee6c58e62fc5c3d99f"}, + {file = "grpcio_tools-1.78.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:2ed51ce6b833068f6c580b73193fc2ec16468e6bc18354bc2f83a58721195a58"}, + {file = "grpcio_tools-1.78.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:05803a5cdafe77c8bdf36aa660ad7a6a1d9e49bc59ce45c1bade2a4698826599"}, + {file = "grpcio_tools-1.78.0-cp314-cp314-win32.whl", hash = "sha256:f7c722e9ce6f11149ac5bddd5056e70aaccfd8168e74e9d34d8b8b588c3f5c7c"}, + {file = "grpcio_tools-1.78.0-cp314-cp314-win_amd64.whl", hash = "sha256:7d58ade518b546120ec8f0a8e006fc8076ae5df151250ebd7e82e9b5e152c229"}, + {file = "grpcio_tools-1.78.0-cp39-cp39-linux_armv7l.whl", hash = "sha256:30b1eef2afb6f2c3deb94525d60aedfea807d4937b5e23ad72600e3f8cd1c768"}, + {file = "grpcio_tools-1.78.0-cp39-cp39-macosx_11_0_universal2.whl", hash = "sha256:c70b07b2610db3743d831700301eb17a9e1de2818d1f36ad53cb5b8b593a5749"}, + {file = "grpcio_tools-1.78.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:f6d53392eb0f758eaa9ecfa6f9aab1e1f3c9db117a4242c802a30363fdc404d2"}, + {file = "grpcio_tools-1.78.0-cp39-cp39-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:638fa11b4731dce2c662f685c3be0489246e8d2306654eb26ebd71e6a24c4b70"}, + {file = "grpcio_tools-1.78.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:21b31c87cef35af124f1cfb105614725b462656d2684f59d05a6210266b17b9e"}, + {file = "grpcio_tools-1.78.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:b81b4cf356272512172a604d4467af9b373de69cd69e1ac163fb41f7dac33099"}, + {file = "grpcio_tools-1.78.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:5c8ceb32cd818e40739529b3c3143a30c899c247db22a6275c4798dece9a4ae7"}, + {file = "grpcio_tools-1.78.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:1872d01f984c85ee49ce581fcaffbcc9c792692b4b5ebf9bba4358fc895c316a"}, + {file = "grpcio_tools-1.78.0-cp39-cp39-win32.whl", hash = "sha256:4eff49de5f8f320ed2a69bbb6bfe512175b1762d736cfce28aca0129939f7252"}, + {file = "grpcio_tools-1.78.0-cp39-cp39-win_amd64.whl", hash = "sha256:6ddf7e7a7d069e7287b9cb68937102efe1686e63117a162d01578ac2839b4acd"}, + {file = "grpcio_tools-1.78.0.tar.gz", hash = "sha256:4b0dd86560274316e155d925158276f8564508193088bc43e20d3f5dff956b2b"}, ] [package.dependencies] -grpcio = ">=1.71.2" -protobuf = ">=5.26.1,<6.0dev" -setuptools = "*" - -[[package]] -name = "grpclib" -version = "0.4.8" -description = "Pure-Python gRPC implementation for asyncio" -optional = false -python-versions = ">=3.8" -groups = ["main"] -files = [ - {file = "grpclib-0.4.8-py3-none-any.whl", hash = "sha256:a5047733a7acc1c1cee6abf3c841c7c6fab67d2844a45a853b113fa2e6cd2654"}, - {file = "grpclib-0.4.8.tar.gz", hash = "sha256:d8823763780ef94fed8b2c562f7485cf0bbee15fc7d065a640673667f7719c9a"}, -] - -[package.dependencies] -h2 = ">=3.1.0,<5" -multidict = "*" - -[package.extras] -protobuf = ["protobuf (>=3.20.0)"] +grpcio = ">=1.78.0" +protobuf = ">=6.31.1,<7.0.0" +setuptools = ">=77.0.1" [[package]] name = "h11" @@ -1627,6 +1525,60 @@ http2 = ["h2 (>=3,<5)"] socks = ["socksio (==1.*)"] trio = ["trio (>=0.22.0,<1.0)"] +[[package]] +name = "httptools" +version = "0.7.1" +description = "A collection of framework independent HTTP protocol utils." +optional = false +python-versions = ">=3.9" +groups = ["main"] +markers = "platform_system != \"Windows\"" +files = [ + {file = "httptools-0.7.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:11d01b0ff1fe02c4c32d60af61a4d613b74fad069e47e06e9067758c01e9ac78"}, + {file = "httptools-0.7.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:84d86c1e5afdc479a6fdabf570be0d3eb791df0ae727e8dbc0259ed1249998d4"}, + {file = "httptools-0.7.1-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:c8c751014e13d88d2be5f5f14fc8b89612fcfa92a9cc480f2bc1598357a23a05"}, + {file = "httptools-0.7.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:654968cb6b6c77e37b832a9be3d3ecabb243bbe7a0b8f65fbc5b6b04c8fcabed"}, + {file = "httptools-0.7.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:b580968316348b474b020edf3988eecd5d6eec4634ee6561e72ae3a2a0e00a8a"}, + {file = "httptools-0.7.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:d496e2f5245319da9d764296e86c5bb6fcf0cf7a8806d3d000717a889c8c0b7b"}, + {file = "httptools-0.7.1-cp310-cp310-win_amd64.whl", hash = "sha256:cbf8317bfccf0fed3b5680c559d3459cccf1abe9039bfa159e62e391c7270568"}, + {file = "httptools-0.7.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:474d3b7ab469fefcca3697a10d11a32ee2b9573250206ba1e50d5980910da657"}, + {file = "httptools-0.7.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a3c3b7366bb6c7b96bd72d0dbe7f7d5eead261361f013be5f6d9590465ea1c70"}, + {file = "httptools-0.7.1-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:379b479408b8747f47f3b253326183d7c009a3936518cdb70db58cffd369d9df"}, + {file = "httptools-0.7.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cad6b591a682dcc6cf1397c3900527f9affef1e55a06c4547264796bbd17cf5e"}, + {file = "httptools-0.7.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:eb844698d11433d2139bbeeb56499102143beb582bd6c194e3ba69c22f25c274"}, + {file = "httptools-0.7.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f65744d7a8bdb4bda5e1fa23e4ba16832860606fcc09d674d56e425e991539ec"}, + {file = "httptools-0.7.1-cp311-cp311-win_amd64.whl", hash = "sha256:135fbe974b3718eada677229312e97f3b31f8a9c8ffa3ae6f565bf808d5b6bcb"}, + {file = "httptools-0.7.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:38e0c83a2ea9746ebbd643bdfb521b9aa4a91703e2cd705c20443405d2fd16a5"}, + {file = "httptools-0.7.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f25bbaf1235e27704f1a7b86cd3304eabc04f569c828101d94a0e605ef7205a5"}, + {file = "httptools-0.7.1-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:2c15f37ef679ab9ecc06bfc4e6e8628c32a8e4b305459de7cf6785acd57e4d03"}, + {file = "httptools-0.7.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7fe6e96090df46b36ccfaf746f03034e5ab723162bc51b0a4cf58305324036f2"}, + {file = "httptools-0.7.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f72fdbae2dbc6e68b8239defb48e6a5937b12218e6ffc2c7846cc37befa84362"}, + {file = "httptools-0.7.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e99c7b90a29fd82fea9ef57943d501a16f3404d7b9ee81799d41639bdaae412c"}, + {file = "httptools-0.7.1-cp312-cp312-win_amd64.whl", hash = "sha256:3e14f530fefa7499334a79b0cf7e7cd2992870eb893526fb097d51b4f2d0f321"}, + {file = "httptools-0.7.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:6babce6cfa2a99545c60bfef8bee0cc0545413cb0018f617c8059a30ad985de3"}, + {file = "httptools-0.7.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:601b7628de7504077dd3dcb3791c6b8694bbd967148a6d1f01806509254fb1ca"}, + {file = "httptools-0.7.1-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:04c6c0e6c5fb0739c5b8a9eb046d298650a0ff38cf42537fc372b28dc7e4472c"}, + {file = "httptools-0.7.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:69d4f9705c405ae3ee83d6a12283dc9feba8cc6aaec671b412917e644ab4fa66"}, + {file = "httptools-0.7.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:44c8f4347d4b31269c8a9205d8a5ee2df5322b09bbbd30f8f862185bb6b05346"}, + {file = "httptools-0.7.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:465275d76db4d554918aba40bf1cbebe324670f3dfc979eaffaa5d108e2ed650"}, + {file = "httptools-0.7.1-cp313-cp313-win_amd64.whl", hash = "sha256:322d00c2068d125bd570f7bf78b2d367dad02b919d8581d7476d8b75b294e3e6"}, + {file = "httptools-0.7.1-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:c08fe65728b8d70b6923ce31e3956f859d5e1e8548e6f22ec520a962c6757270"}, + {file = "httptools-0.7.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:7aea2e3c3953521c3c51106ee11487a910d45586e351202474d45472db7d72d3"}, + {file = "httptools-0.7.1-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:0e68b8582f4ea9166be62926077a3334064d422cf08ab87d8b74664f8e9058e1"}, + {file = "httptools-0.7.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:df091cf961a3be783d6aebae963cc9b71e00d57fa6f149025075217bc6a55a7b"}, + {file = "httptools-0.7.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:f084813239e1eb403ddacd06a30de3d3e09a9b76e7894dcda2b22f8a726e9c60"}, + {file = "httptools-0.7.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:7347714368fb2b335e9063bc2b96f2f87a9ceffcd9758ac295f8bbcd3ffbc0ca"}, + {file = "httptools-0.7.1-cp314-cp314-win_amd64.whl", hash = "sha256:cfabda2a5bb85aa2a904ce06d974a3f30fb36cc63d7feaddec05d2050acede96"}, + {file = "httptools-0.7.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:ac50afa68945df63ec7a2707c506bd02239272288add34539a2ef527254626a4"}, + {file = "httptools-0.7.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:de987bb4e7ac95b99b805b99e0aae0ad51ae61df4263459d36e07cf4052d8b3a"}, + {file = "httptools-0.7.1-cp39-cp39-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:d169162803a24425eb5e4d51d79cbf429fd7a491b9e570a55f495ea55b26f0bf"}, + {file = "httptools-0.7.1-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:49794f9250188a57fa73c706b46cb21a313edb00d337ca4ce1a011fe3c760b28"}, + {file = "httptools-0.7.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:aeefa0648362bb97a7d6b5ff770bfb774930a327d7f65f8208394856862de517"}, + {file = "httptools-0.7.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:0d92b10dbf0b3da4823cde6a96d18e6ae358a9daa741c71448975f6a2c339cad"}, + {file = "httptools-0.7.1-cp39-cp39-win_amd64.whl", hash = "sha256:5ddbd045cfcb073db2449563dd479057f2c2b681ebc232380e63ef15edc9c023"}, + {file = "httptools-0.7.1.tar.gz", hash = "sha256:abd72556974f8e7c74a259655924a717a2365b236c882c3f6f8a45fe94703ac9"}, +] + [[package]] name = "httpx" version = "0.28.1" @@ -1746,6 +1698,30 @@ files = [ [package.extras] all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2)"] +[[package]] +name = "importlib-metadata" +version = "8.7.1" +description = "Read metadata from Python packages" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "importlib_metadata-8.7.1-py3-none-any.whl", hash = "sha256:5a1f80bf1daa489495071efbb095d75a634cf28a8bc299581244063b53176151"}, + {file = "importlib_metadata-8.7.1.tar.gz", hash = "sha256:49fef1ae6440c182052f407c8d34a68f72efc36db9ca90dc0113398f2fdde8bb"}, +] + +[package.dependencies] +zipp = ">=3.20" + +[package.extras] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\""] +cover = ["pytest-cov"] +doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +enabler = ["pytest-enabler (>=3.4)"] +perf = ["ipython"] +test = ["flufl.flake8", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6,!=8.1.*)", "pytest-perf (>=0.9.2)"] +type = ["mypy (<1.19) ; platform_python_implementation == \"PyPy\"", "pytest-mypy (>=1.0.1)"] + [[package]] name = "iniconfig" version = "2.3.0" @@ -1973,6 +1949,48 @@ rpds-py = ">=0.7.1" format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"] format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "rfc3987-syntax (>=1.1.0)", "uri-template", "webcolors (>=24.6.0)"] +[[package]] +name = "jsonschema-rs" +version = "0.44.1" +description = "A high-performance JSON Schema validator for Python" +optional = false +python-versions = ">=3.10" +groups = ["main"] +files = [ + {file = "jsonschema_rs-0.44.1-cp310-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:6f8be6467ee403e126e4e0abb68f13cfbf7199db54d5a4c0f2a1b00e1304f2e3"}, + {file = "jsonschema_rs-0.44.1-cp310-abi3-macosx_10_12_x86_64.whl", hash = "sha256:95434b4858da6feb4b3769c955b78204dbc90988941e9e848596ab93c6005d00"}, + {file = "jsonschema_rs-0.44.1-cp310-abi3-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0329af23e7674d88c3117b55c89a0c36e06ee359e696be16796a29c8b1c33e85"}, + {file = "jsonschema_rs-0.44.1-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8078c834c3cea6303796fc4925bb8646d1f68313bd54f6d3dde08c8b8eb74bc1"}, + {file = "jsonschema_rs-0.44.1-cp310-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:502af60c802cf149185ea01edbd31a143b09aaf06b27b6422f8b8893984b1998"}, + {file = "jsonschema_rs-0.44.1-cp310-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:6f2760c4791ecc3c7e6196cec7e7dbf191205e36dd050119cfab421e108e8508"}, + {file = "jsonschema_rs-0.44.1-cp310-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:16d663e6c4838e4d594bd9d10c5939a6737c171d9c8600659fe6612098863d3d"}, + {file = "jsonschema_rs-0.44.1-cp310-abi3-win32.whl", hash = "sha256:cbec5ef1a0cc327cbc829f44a9c76778881003ada99c871a14438c7e8b264e76"}, + {file = "jsonschema_rs-0.44.1-cp310-abi3-win_amd64.whl", hash = "sha256:cee075749f0479599586b4f591940418e45eae65485ed29e84763a28ec9dd40c"}, + {file = "jsonschema_rs-0.44.1-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:99c0c3e4a786d1e9c25dbd58cc9781f3c3d25c9fbd76310a350de55315f05948"}, + {file = "jsonschema_rs-0.44.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:516bfb8926de7d396e4bc9a1c5085870de0035e8e2324014251d091a55a03623"}, + {file = "jsonschema_rs-0.44.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:225074845f6a67e8e3ac18311f87a0ab925ae5adf16466be61c7d1df01eca20a"}, + {file = "jsonschema_rs-0.44.1-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:782d01412e77c83bb376d31aac8afbd06b97e3594f09d1e0304ad22c2382077b"}, + {file = "jsonschema_rs-0.44.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:2afe720dfa1f93235b78e812937039537b63bf4eab6ca3c9ecb7fd7ba08a865d"}, + {file = "jsonschema_rs-0.44.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:548a1f466ce5b904c9cc52eee8f887c3838377ed95f4525d0ee5896a321e89d5"}, + {file = "jsonschema_rs-0.44.1-cp313-cp313t-win_amd64.whl", hash = "sha256:8a758e422c4ec265e64f2232409ddc5976b28e94e84a8e5565a2bce169ab72e9"}, + {file = "jsonschema_rs-0.44.1-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:ca8ddd724b73678f5f3d3d8f948ae40fa817ad9edd5ce4e732ae26cb0f9dd300"}, + {file = "jsonschema_rs-0.44.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1ff6c9868c8f2834952efa0555fd82d0ab19664ba6b17f481330c64f7af7177d"}, + {file = "jsonschema_rs-0.44.1-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec883313f3782f1c0ffc58ceda55136e26967198523b9cd111af782e273659a3"}, + {file = "jsonschema_rs-0.44.1-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:f971acf2910e64f0960080db6b6c73df483318d9db992273885f596cc3a9a5d9"}, + {file = "jsonschema_rs-0.44.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:50f5c28fd54236e43f392041f06132b0e9f09dd261cb00236045078d98e3cf84"}, + {file = "jsonschema_rs-0.44.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:dbc59d68f38a377117b84b8109af269813a39b4b961e803876767e4fab6bac98"}, + {file = "jsonschema_rs-0.44.1-cp314-cp314t-win_amd64.whl", hash = "sha256:049203fd4876f2ec96191c0f8befabf33289988c57e4f191b5fd5974de1fb07f"}, + {file = "jsonschema_rs-0.44.1-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:51886a0e09161c0f5675ca2834bcd76c086034891c1e0a9a09b2ee2fd7c60bd0"}, + {file = "jsonschema_rs-0.44.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:46b629a0713397b3375e2926cf3d3f9ad511681d65f7676caee8223f3b62a427"}, + {file = "jsonschema_rs-0.44.1-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:c338c2bf3c5a4e17fccbf504aaf8a00bd1c711f992835df19de2fe55e5cf8b53"}, + {file = "jsonschema_rs-0.44.1-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:26c50f9bf4568874a5c6d1ca5c7e739b42529673d2d4c89a2c170800d7983fd4"}, + {file = "jsonschema_rs-0.44.1.tar.gz", hash = "sha256:49ca909cc3017990a732145b9a7c2f1a0727b2f95dba4190c05a514575b5f4bf"}, +] + +[package.extras] +bench = ["fastjsonschema (>=2.20.0)", "jsonschema (>=4.23.0)", "pytest-benchmark (>=4.0.0)"] +tests = ["flask (>=2.2.5)", "hypothesis (>=6.79.4)", "pytest (>=7.4.4)"] + [[package]] name = "jsonschema-specifications" version = "2025.9.1" @@ -1990,25 +2008,26 @@ referencing = ">=0.31.0" [[package]] name = "langchain" -version = "1.2.10" +version = "1.2.15" description = "Building applications with LLMs through composability" optional = false python-versions = "<4.0.0,>=3.10.0" groups = ["main"] files = [ - {file = "langchain-1.2.10-py3-none-any.whl", hash = "sha256:e07a377204451fffaed88276b8193e894893b1003e25c5bca6539288ccca3698"}, - {file = "langchain-1.2.10.tar.gz", hash = "sha256:bdcd7218d9c79a413cf15e106e4eb94408ac0963df9333ccd095b9ed43bf3be7"}, + {file = "langchain-1.2.15-py3-none-any.whl", hash = "sha256:e349db349cb3e9550c4044077cf90a1717691756cc236438404b23500e615874"}, + {file = "langchain-1.2.15.tar.gz", hash = "sha256:1717b6719daefae90b2728314a5e2a117ff916291e2862595b6c3d6fba33d652"}, ] [package.dependencies] langchain-core = ">=1.2.10,<2.0.0" -langgraph = ">=1.0.8,<1.1.0" +langgraph = ">=1.1.5,<1.2.0" pydantic = ">=2.7.4,<3.0.0" [package.extras] anthropic = ["langchain-anthropic"] aws = ["langchain-aws"] azure-ai = ["langchain-azure-ai"] +baseten = ["langchain-baseten (>=0.2.0)"] community = ["langchain-community"] deepseek = ["langchain-deepseek"] fireworks = ["langchain-fireworks"] @@ -2025,31 +2044,31 @@ xai = ["langchain-xai"] [[package]] name = "langchain-anthropic" -version = "1.3.4" +version = "1.4.0" description = "Integration package connecting Claude (Anthropic) APIs and LangChain" optional = false python-versions = "<4.0.0,>=3.10.0" groups = ["main"] files = [ - {file = "langchain_anthropic-1.3.4-py3-none-any.whl", hash = "sha256:cd112dcc8049aef09f58b3c4338b2c9db5ee98105e08664954a4e40d8bf120b9"}, - {file = "langchain_anthropic-1.3.4.tar.gz", hash = "sha256:000ed4c2d6fb8842b4ffeed22a74a3e84f9e9bcb63638e4abbb4a1d8ffa07211"}, + {file = "langchain_anthropic-1.4.0-py3-none-any.whl", hash = "sha256:c84f55722336935f7574d5771598e674f3959fdca0b51de14c9788dbf52761be"}, + {file = "langchain_anthropic-1.4.0.tar.gz", hash = "sha256:bbf64e99f9149a34ba67813e9582b2160a0968de9e9f54f7ba8d1658f253c2e5"}, ] [package.dependencies] -anthropic = ">=0.78.0,<1.0.0" -langchain-core = ">=1.2.15,<2.0.0" +anthropic = ">=0.85.0,<1.0.0" +langchain-core = ">=1.2.19,<2.0.0" pydantic = ">=2.7.4,<3.0.0" [[package]] name = "langchain-core" -version = "1.2.16" +version = "1.2.28" description = "Building applications with LLMs through composability" optional = false python-versions = "<4.0.0,>=3.10.0" groups = ["main"] files = [ - {file = "langchain_core-1.2.16-py3-none-any.whl", hash = "sha256:2768add9aa97232a7712580f678e0ba045ee1036c71fe471355be0434fcb6e30"}, - {file = "langchain_core-1.2.16.tar.gz", hash = "sha256:055a4bfe7d62f4ac45ed49fd759ee2e6bdd15abf998fbeea695fda5da2de6413"}, + {file = "langchain_core-1.2.28-py3-none-any.whl", hash = "sha256:80764232581eaf8057bcefa71dbf8adc1f6a28d257ebd8b95ba9b8b452e8c6ac"}, + {file = "langchain_core-1.2.28.tar.gz", hash = "sha256:271a3d8bd618f795fdeba112b0753980457fc90537c46a0c11998516a74dc2cb"}, ] [package.dependencies] @@ -2099,41 +2118,85 @@ typing-extensions = ">=4.14.0" [[package]] name = "langchain-openai" -version = "1.1.9" +version = "1.1.12" description = "An integration package connecting OpenAI and LangChain" optional = false python-versions = "<4.0.0,>=3.10.0" groups = ["main"] files = [ - {file = "langchain_openai-1.1.9-py3-none-any.whl", hash = "sha256:ca2482b136c45fb67c0db84a9817de675e0eb8fb2203a33914c1b7a96f273940"}, - {file = "langchain_openai-1.1.9.tar.gz", hash = "sha256:fdee25dcf4b0685d8e2f59856f4d5405431ef9e04ab53afe19e2e8360fed8234"}, + {file = "langchain_openai-1.1.12-py3-none-any.whl", hash = "sha256:da71ca3f2d18c16f7a2443cc306aa195ad2a07054335ac9b0626dcae02b6a0c5"}, + {file = "langchain_openai-1.1.12.tar.gz", hash = "sha256:ccf5ef02c896f6807b4d0e51aaf678a72ce81ae41201cae8d65e11eeff9ecb79"}, ] [package.dependencies] -langchain-core = ">=1.2.11,<2.0.0" -openai = ">=1.109.1,<3.0.0" +langchain-core = ">=1.2.21,<2.0.0" +openai = ">=2.26.0,<3.0.0" tiktoken = ">=0.7.0,<1.0.0" [[package]] name = "langgraph" -version = "1.0.10" +version = "1.1.6" description = "Building stateful, multi-actor applications with LLMs" optional = false python-versions = ">=3.10" groups = ["main"] files = [ - {file = "langgraph-1.0.10-py3-none-any.whl", hash = "sha256:7c298bef4f6ea292fcf9824d6088fe41a6727e2904ad6066f240c4095af12247"}, - {file = "langgraph-1.0.10.tar.gz", hash = "sha256:73bd10ee14a8020f31ef07e9cd4c1a70c35cc07b9c2b9cd637509a10d9d51e29"}, + {file = "langgraph-1.1.6-py3-none-any.whl", hash = "sha256:fdbf5f54fa5a5a4c4b09b7b5e537f1b2fa283d2f0f610d3457ddeecb479458b9"}, + {file = "langgraph-1.1.6.tar.gz", hash = "sha256:1783f764b08a607e9f288dbcf6da61caeb0dd40b337e5c9fb8b412341fbc0b60"}, ] [package.dependencies] langchain-core = ">=0.1" langgraph-checkpoint = ">=2.1.0,<5.0.0" -langgraph-prebuilt = ">=1.0.8,<1.1.0" +langgraph-prebuilt = ">=1.0.9,<1.1.0" langgraph-sdk = ">=0.3.0,<0.4.0" pydantic = ">=2.7.4" xxhash = ">=3.5.0" +[[package]] +name = "langgraph-api" +version = "0.7.100" +description = "" +optional = false +python-versions = ">=3.11" +groups = ["main"] +files = [ + {file = "langgraph_api-0.7.100-py3-none-any.whl", hash = "sha256:60a408090e544628bdfb5c2e26fb88a74b95751527d8e9b75392d918f36c4abb"}, + {file = "langgraph_api-0.7.100.tar.gz", hash = "sha256:4217bfd9c6fc5c6068812fb0f8e17aaa17fb745356a6d7ade00c94d3ad70f8c3"}, +] + +[package.dependencies] +cloudpickle = ">=3.0.0" +cryptography = ">=42.0.0,<47.0" +grpcio = ">=1.78.0,<1.79.0" +grpcio-health-checking = ">=1.78.0,<1.79.0" +grpcio-tools = "1.78.0" +httptools = {version = ">=0.5.0", markers = "platform_system != \"Windows\""} +httpx = ">=0.25.0" +jsonschema-rs = ">=0.20.0,<0.45" +langchain-core = ">=0.3.64" +langgraph = ">=0.4.10,<2" +langgraph-checkpoint = ">=3.0.1,<5" +langgraph-runtime-inmem = ">=0.27.0,<0.28.0" +langgraph-sdk = ">=0.3.5" +langsmith = {version = ">=0.6.3", extras = ["otel"]} +opentelemetry-api = ">=0.0.1" +opentelemetry-exporter-otlp-proto-http = ">=0.0.1" +opentelemetry-sdk = ">=0.0.1" +orjson = ">=3.9.7" +protobuf = ">=6.32.1,<7.0.0" +pyjwt = ">=2.9.0" +sse-starlette = ">=2.1.3,<3.4.0" +starlette = ">=0.38.6" +structlog = ">=24.1.0,<26" +tenacity = ">=8.0.0" +truststore = ">=0.1" +uuid-utils = ">=0.12.0" +uvicorn = ">=0.26.0" +uvloop = {version = ">=0.18.0", markers = "platform_system != \"Windows\""} +watchfiles = ">=0.13" +zstandard = ">=0.23.0" + [[package]] name = "langgraph-checkpoint" version = "4.0.1" @@ -2185,37 +2248,82 @@ aiosqlite = ">=0.20" langgraph-checkpoint = ">=3,<5.0.0" sqlite-vec = ">=0.1.6" +[[package]] +name = "langgraph-cli" +version = "0.4.21" +description = "CLI for interacting with LangGraph API" +optional = false +python-versions = ">=3.10" +groups = ["main"] +files = [ + {file = "langgraph_cli-0.4.21-py3-none-any.whl", hash = "sha256:34e5a228293339bf45d10a6c713ace742314d6047adcf909acc7d2decbb1b825"}, + {file = "langgraph_cli-0.4.21.tar.gz", hash = "sha256:7c03c69d22e0f12267c576cef23b4b29e0a631b83902075c8e75d6c549c9d993"}, +] + +[package.dependencies] +click = ">=8.1.7" +httpx = ">=0.24.0" +langgraph-api = {version = ">=0.5.35,<0.8.0", optional = true, markers = "python_version >= \"3.11\" and extra == \"inmem\""} +langgraph-runtime-inmem = {version = ">=0.7", optional = true, markers = "python_version >= \"3.11\" and extra == \"inmem\""} +langgraph-sdk = {version = ">=0.1.0", markers = "python_version >= \"3.11\""} +pathspec = ">=0.11.0" +python-dotenv = ">=0.8.0" + +[package.extras] +inmem = ["langgraph-api (>=0.5.35,<0.8.0) ; python_version >= \"3.11\"", "langgraph-runtime-inmem (>=0.7) ; python_version >= \"3.11\""] + [[package]] name = "langgraph-prebuilt" -version = "1.0.8" +version = "1.0.9" description = "Library with high-level APIs for creating and executing LangGraph agents and tools." optional = false python-versions = ">=3.10" groups = ["main"] files = [ - {file = "langgraph_prebuilt-1.0.8-py3-none-any.whl", hash = "sha256:d16a731e591ba4470f3e313a319c7eee7dbc40895bcf15c821f985a3522a7ce0"}, - {file = "langgraph_prebuilt-1.0.8.tar.gz", hash = "sha256:0cd3cf5473ced8a6cd687cc5294e08d3de57529d8dd14fdc6ae4899549efcf69"}, + {file = "langgraph_prebuilt-1.0.9-py3-none-any.whl", hash = "sha256:776c8e3154a5aef5ad0e5bf3f263f2dcaab3983786cc20014b7f955d99d2d1b2"}, + {file = "langgraph_prebuilt-1.0.9.tar.gz", hash = "sha256:93de7512e9caade4b77ead92428f6215c521fdb71b8ffda8cd55f0ad814e64de"}, ] [package.dependencies] langchain-core = ">=1.0.0" langgraph-checkpoint = ">=2.1.0,<5.0.0" +[[package]] +name = "langgraph-runtime-inmem" +version = "0.27.3" +description = "Inmem implementation for the LangGraph API server." +optional = false +python-versions = ">=3.11.0" +groups = ["main"] +files = [ + {file = "langgraph_runtime_inmem-0.27.3-py3-none-any.whl", hash = "sha256:665119e7fa753abb3fe6387cc9dd3d9b8fc79052c2b13f4cc0300efeee349b59"}, + {file = "langgraph_runtime_inmem-0.27.3.tar.gz", hash = "sha256:8f2957ec65c424526be690710a70f65bf906ddd92a4bd2054bb561c8f944ac91"}, +] + +[package.dependencies] +blockbuster = ">=1.5.24,<2.0.0" +croniter = ">=1.0.1" +langgraph = ">=0.4.10,<2" +langgraph-checkpoint = ">=3,<5" +sse-starlette = ">=2" +starlette = ">=0.37" +structlog = ">23" + [[package]] name = "langgraph-sdk" -version = "0.3.3" +version = "0.3.13" description = "SDK for interacting with LangGraph API" optional = false python-versions = ">=3.10" groups = ["main"] files = [ - {file = "langgraph_sdk-0.3.3-py3-none-any.whl", hash = "sha256:a52ebaf09d91143e55378bb2d0b033ed98f57f48c9ad35c8f81493b88705fc7b"}, - {file = "langgraph_sdk-0.3.3.tar.gz", hash = "sha256:c34c3dce3b6848755eb61f0c94369d1ba04aceeb1b76015db1ea7362c544fb26"}, + {file = "langgraph_sdk-0.3.13-py3-none-any.whl", hash = "sha256:aee09e345c90775f6de9d6f4c7b847cfc652e49055c27a2aed0d981af2af3bd0"}, + {file = "langgraph_sdk-0.3.13.tar.gz", hash = "sha256:419ca5663eec3cec192ad194ac0647c0c826866b446073eb40f384f950986cd5"}, ] [package.dependencies] httpx = ">=0.25.2" -orjson = ">=3.10.1" +orjson = ">=3.11.5" [[package]] name = "langsmith" @@ -2231,12 +2339,16 @@ files = [ [package.dependencies] httpx = ">=0.23.0,<1" +opentelemetry-api = {version = ">=1.30.0", optional = true, markers = "extra == \"otel\""} +opentelemetry-exporter-otlp-proto-http = {version = ">=1.30.0", optional = true, markers = "extra == \"otel\""} +opentelemetry-sdk = {version = ">=1.30.0", optional = true, markers = "extra == \"otel\""} orjson = {version = ">=3.9.14", markers = "platform_python_implementation != \"PyPy\""} packaging = ">=23.2" pydantic = ">=2,<3" requests = ">=2.0.0" requests-toolbelt = ">=1.0.0" uuid-utils = ">=0.12.0,<1.0" +websockets = {version = ">=15.0", optional = true, markers = "extra == \"sandbox\""} xxhash = ">=3.0.0" zstandard = ">=0.23.0" @@ -2411,23 +2523,6 @@ files = [ {file = "markupsafe-3.0.3.tar.gz", hash = "sha256:722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698"}, ] -[[package]] -name = "marshmallow" -version = "4.1.1" -description = "A lightweight library for converting complex datatypes to and from native Python datatypes." -optional = false -python-versions = ">=3.10" -groups = ["main"] -files = [ - {file = "marshmallow-4.1.1-py3-none-any.whl", hash = "sha256:9038db4cceb849ce2b8676ccf3d8e5b5e634ac499e291397efa260aa796c385a"}, - {file = "marshmallow-4.1.1.tar.gz", hash = "sha256:550aa14b619072f0a8d8184911b3f1021c5c32587fb27318ddf81ce0d0029c9d"}, -] - -[package.extras] -dev = ["marshmallow[tests]", "pre-commit (>=3.5,<5.0)", "tox"] -docs = ["autodocsumm (==0.2.14)", "furo (==2025.9.25)", "sphinx (==8.2.3)", "sphinx-copybutton (==0.5.2)", "sphinx-issues (==5.0.1)", "sphinxext-opengraph (==0.13.0)"] -tests = ["pytest", "simplejson"] - [[package]] name = "mcp" version = "1.12.4" @@ -2492,20 +2587,19 @@ files = [ [[package]] name = "mem0ai" -version = "0.1.116" +version = "0.1.115" description = "Long-term memory for AI Agents" optional = false python-versions = "<4.0,>=3.9" groups = ["main"] files = [ - {file = "mem0ai-0.1.116-py3-none-any.whl", hash = "sha256:245b08f1e615e057ebacc52462ab729a7282abe05e8d4957236d893b3d32a990"}, - {file = "mem0ai-0.1.116.tar.gz", hash = "sha256:c33e08c5464f96b1cf109893dba5d394d8cc5788a8400d85cb1ceed696ee3204"}, + {file = "mem0ai-0.1.115-py3-none-any.whl", hash = "sha256:29310bd5bcab644f7a4dbf87bd1afd878eb68458a2fb36cfcbf20bdff46fbdaf"}, + {file = "mem0ai-0.1.115.tar.gz", hash = "sha256:147a6593604188acd30281c40171112aed9f16e196fa528627430c15e00f1e32"}, ] [package.dependencies] openai = ">=1.33.0" posthog = ">=3.5.0" -protobuf = ">=5.29.0,<6.0.0" pydantic = ">=2.7.3" pytz = ">=2024.1" qdrant-client = ">=1.9.1" @@ -2517,35 +2611,7 @@ extras = ["boto3 (>=1.34.0)", "elasticsearch (>=8.0.0)", "langchain-community (> graph = ["langchain-aws (>=0.2.23)", "langchain-neo4j (>=0.4.0)", "neo4j (>=5.23.1)", "rank-bm25 (>=0.2.2)"] llms = ["google-genai (>=1.0.0)", "google-generativeai (>=0.3.0)", "groq (>=0.3.0)", "litellm (>=0.1.0)", "ollama (>=0.1.0)", "together (>=0.2.10)", "vertexai (>=0.1.0)"] test = ["pytest (>=8.2.2)", "pytest-asyncio (>=0.23.7)", "pytest-mock (>=3.14.0)"] -vector-stores = ["azure-search-documents (>=11.4.0b8)", "chromadb (>=0.4.24)", "faiss-cpu (>=1.7.4)", "pinecone (<=7.3.0)", "pinecone-text (>=0.10.0)", "psycopg (>=3.2.8)", "pymochow (>=2.2.9)", "pymongo (>=4.13.2)", "upstash-vector (>=0.1.0)", "vecs (>=0.4.0)", "weaviate-client (>=4.4.0,<4.15.0)"] - -[[package]] -name = "modal" -version = "1.2.1" -description = "Python client library for Modal" -optional = false -python-versions = ">=3.9" -groups = ["main"] -files = [ - {file = "modal-1.2.1-py3-none-any.whl", hash = "sha256:151b4942bad86f8b13a21226328cca8be005a0e780736fa6561226fedbade431"}, - {file = "modal-1.2.1.tar.gz", hash = "sha256:c1d0de8bbaf41fa382b837bd79193b6eb0fa67560ad1bb882a55409fc51607fb"}, -] - -[package.dependencies] -aiohttp = "*" -cbor2 = "*" -certifi = "*" -click = ">=8.1,<9.0" -grpclib = ">=0.4.7,<0.4.9" -protobuf = ">=3.19,<4.24.0 || >4.24.0,<7.0" -rich = ">=12.0.0" -synchronicity = ">=0.10.2,<0.11.0" -toml = "*" -typer = ">=0.9" -types-certifi = "*" -types-toml = "*" -typing_extensions = ">=4.6,<5.0" -watchfiles = "*" +vector-stores = ["azure-search-documents (>=11.4.0b8)", "chromadb (>=0.4.24)", "faiss-cpu (>=1.7.4)", "pinecone (<=7.3.0)", "pinecone-text (>=0.10.0)", "pymochow (>=2.2.9)", "pymongo (>=4.13.2)", "upstash-vector (>=0.1.0)", "vecs (>=0.4.0)", "weaviate-client (>=4.4.0)"] [[package]] name = "mpmath" @@ -2721,22 +2787,6 @@ files = [ {file = "multidict-6.7.0.tar.gz", hash = "sha256:c6e99d9a65ca282e578dfea819cfa9c0a62b2499d8677392e09feaf305e9e6f5"}, ] -[[package]] -name = "multipart" -version = "1.3.0" -description = "Parser for multipart/form-data" -optional = false -python-versions = ">=3.8" -groups = ["main"] -files = [ - {file = "multipart-1.3.0-py3-none-any.whl", hash = "sha256:439bf4b00fd7cb2dbff08ae13f49f4f49798931ecd8d496372c63537fa19f304"}, - {file = "multipart-1.3.0.tar.gz", hash = "sha256:a46bd6b0eb4c1ba865beb88ddd886012a3da709b6e7b86084fc37e99087e5cf1"}, -] - -[package.extras] -dev = ["build", "pytest", "pytest-cov", "tox", "tox-uv", "twine"] -docs = ["sphinx (>=8,<9)", "sphinx-autobuild"] - [[package]] name = "networkx" version = "3.5" @@ -2971,105 +3021,15 @@ files = [ ] [[package]] -name = "obstore" -version = "0.7.3" -description = "" +name = "openai" +version = "2.31.0" +description = "The official Python library for the openai API" optional = false python-versions = ">=3.9" groups = ["main"] files = [ - {file = "obstore-0.7.3-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:8c89b6205672490fb99e16159bb290a12d4d8e6f9b27904720faafd4fd8ae436"}, - {file = "obstore-0.7.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:26357df7b3824f431ced44e26fe334f686410cb5e8c218569759d6aa32ab7242"}, - {file = "obstore-0.7.3-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ca3380121cc5ce6d040698fcf126c1acab4a00282db5a6bc8e5026bba22fc43d"}, - {file = "obstore-0.7.3-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c1eca930fa0229f7fd5d881bc03deffca51e96ad754cbf256e4aa27ac7c50db6"}, - {file = "obstore-0.7.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e4b91fec58a65350303b643ce1da7a890fb2cc411c2a9d86672ad30febb196df"}, - {file = "obstore-0.7.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4eba1c87af7002d95cce8c2c67fac814056938f16500880e1fb908a0e8c7a7f5"}, - {file = "obstore-0.7.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd5e8ad65c5b481f168080db1c5290cf55ad7ab77b45fd467c4d25367db2a3ae"}, - {file = "obstore-0.7.3-cp310-cp310-manylinux_2_24_aarch64.whl", hash = "sha256:b680dd856d238a892a14ef3115daee33e267502229cee248266a20e03dbe98d0"}, - {file = "obstore-0.7.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:c3dccb74ebfec1f5517c2160503f30629b62685c78bbe15ad03492969fadd858"}, - {file = "obstore-0.7.3-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:cd614e53a00d22b2facfd1fb9b516fa210cd788ecce513dd532a8e65fa07d55d"}, - {file = "obstore-0.7.3-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:32841a2b4bef838412302e9a8612fc3ba1c51bd808b77b4854efe6b1f7a65f0d"}, - {file = "obstore-0.7.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:a58f3952b43fb5f7b0f0f9f08272983e4dd50f83b16a05943f89581b0e6bff20"}, - {file = "obstore-0.7.3-cp310-cp310-win_amd64.whl", hash = "sha256:8745e2437e79e073c3cf839454f803909540fa4f6cd9180c9ab4ce742c716c8b"}, - {file = "obstore-0.7.3-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:65ffe43fd63c9968172bed649fcaf6345b41a124be5d34f46adb94604e9ccef8"}, - {file = "obstore-0.7.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2947609a1fab1f9b808235a8088e7e99814fbaf3b6000833d760fd90f68fa7cd"}, - {file = "obstore-0.7.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:15409f75acc4e10f924fe118f7018607d6d96a72330ac4cc1663d36b7c6847b1"}, - {file = "obstore-0.7.3-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5224d834bbe7a9f2592b130e4ddd86340fa172e5a3a51284e706f6515d95c036"}, - {file = "obstore-0.7.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7b1af6c1a33d98db9954f7ceab8eb5e543aea683a79a0ffd72b6c8d176834a9b"}, - {file = "obstore-0.7.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:708c27c4e5e85799fe7a2d2ae443fbd96c2ad36b561c815a9b01b5333ab536ad"}, - {file = "obstore-0.7.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7da327920bef8bbd02445f33947487fe4e94fcb9e084c810108e88be57d0877b"}, - {file = "obstore-0.7.3-cp311-cp311-manylinux_2_24_aarch64.whl", hash = "sha256:8f3b23a40ad374fe7a65fab4678a9978978ec83a597156a2a9d1dbeab433a469"}, - {file = "obstore-0.7.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9b3e7d0c7e85e4f67e479f7efab5dea26ceaace10897d639d38f77831ef0cdaf"}, - {file = "obstore-0.7.3-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:dfee24c5e9d5b7e0f43e4bbf8cc15069e5c60bfdb86873ce97c0eb487afa5da8"}, - {file = "obstore-0.7.3-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:99e187cee4a6e13605886b906b34fec7ae9902dd25b1e9aafae863a9d55c6e47"}, - {file = "obstore-0.7.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a5de3b0859512b9ddbf57ac34db96ad41fb85fc9597e422916044d1bf550427d"}, - {file = "obstore-0.7.3-cp311-cp311-win_amd64.whl", hash = "sha256:35fdd1cd8856984de1b5a11fced83f6fd6623eb459736e57b9975400ff5baf5a"}, - {file = "obstore-0.7.3-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:6cbe5dde68bf6ab5a88f3bb467ca8f123bcce3efc03e22fd8339688559d36199"}, - {file = "obstore-0.7.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a6db23cbcb3aec10e09a31fd0883950cb9b7f77f4fcf1fb0e8a276e1d1961bf3"}, - {file = "obstore-0.7.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:00fde287770bdbdbb06379670d30c257b20e77a4a11b36f1e232b5bc6ef07b7a"}, - {file = "obstore-0.7.3-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c420036356269666197f0704392c9495f255bb3ff9b667c69fb49bc65bd50dcd"}, - {file = "obstore-0.7.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c28482626ca9481569ad16ba0c0c36947ce96e8147c64011dc0af6d58be8ff9c"}, - {file = "obstore-0.7.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9cead20055221337ddf218098afe8138f8624395b0cf2a730da72a4523c11b2f"}, - {file = "obstore-0.7.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c71017142a593022848f4af0ac1e39af1a56927981cc2c89542888edb206eb33"}, - {file = "obstore-0.7.3-cp312-cp312-manylinux_2_24_aarch64.whl", hash = "sha256:8aebc2bf796a0d1525318a9ac69608a96d03abc621ca1e6d810e08a70bd695c1"}, - {file = "obstore-0.7.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c0ebf03969b81ee559c377c5ebca9dcdffbef0e6650d43659676aeaeb302a272"}, - {file = "obstore-0.7.3-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:e0f5d97064ec35fdef3079f867afe6fa5e76ab2bb3e809855ab34a1aa34c9dcd"}, - {file = "obstore-0.7.3-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:3a80541671646c5e49493de61361a1851c8c172cf28981b76aa4248a9f02f5b1"}, - {file = "obstore-0.7.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a5ce6385ad89afad106d05d37296f724ba10f8f4e57ab8ad7f4ecce0aa226d3d"}, - {file = "obstore-0.7.3-cp312-cp312-win_amd64.whl", hash = "sha256:632522ba63a44768977defc0a93fc5dd59ea0455bfd6926cd3121971306da4e5"}, - {file = "obstore-0.7.3-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:dcb71412dc8d2bd464b340d1f36d8c0ceb7894c01c2ceaaa5f2ac45376503fa2"}, - {file = "obstore-0.7.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:6d486bb01438039d686401ce4207d82c02b8b639227baa5bdd578efdab388dea"}, - {file = "obstore-0.7.3-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fcaaf0c9223b5592658c131ff32a0574be995c7e237f406266f9a68ea2266769"}, - {file = "obstore-0.7.3-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e8ae6cde734df3cc542c14152029170d9ae70ce50b957831ed71073113bd3d60"}, - {file = "obstore-0.7.3-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:30da82ae3bfdf24fa80af38967e323ae8da0bb7c36cce01f0dda7689faaf1272"}, - {file = "obstore-0.7.3-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b5daa9f912eac8cdf218161d34e13f38cbb594e934eaaf8a7c09dca5a394b231"}, - {file = "obstore-0.7.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ef06cad4e8978d672357b328b4f61c48827b2b79d7eaf58b68ee31ac0e652b8"}, - {file = "obstore-0.7.3-cp313-cp313-manylinux_2_24_aarch64.whl", hash = "sha256:d34920539a94da2b87195787b80004960638dfd0aa2f4369fc9239e0a41470a8"}, - {file = "obstore-0.7.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:6dfcdaa779f376745ff493cce7f19cbbe8d75f68304bf1062e757ab60bd62de1"}, - {file = "obstore-0.7.3-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:ae095f679e4796b8f6ef80ed3813ddd14a477ae219a0c059c23cf294f9288ded"}, - {file = "obstore-0.7.3-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:6def59e79c19b8804743fec6407f542b387dc1630c2254412ae8bd3a0b98e7e4"}, - {file = "obstore-0.7.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f97797c42476ab19853ef4a161b903eaf96c2363a23b9e0187d66b0daee350cb"}, - {file = "obstore-0.7.3-cp313-cp313-win_amd64.whl", hash = "sha256:8f0ecc01b1444bc08ff98e368b80ea2c085a7783621075298e86d3aba96f8e27"}, - {file = "obstore-0.7.3-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:b0a337b6d2b430040e752effdf9584b0d6adddef2ead2bbbc3c204957a2f69d2"}, - {file = "obstore-0.7.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:439874c31a78198211c45ebde0b3535650dc3585353be51b361bd017bc492090"}, - {file = "obstore-0.7.3-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:360034e4b1fe84da59bc3b090798acdd1b4a8b75cc1e56d2656591c7cc8776f2"}, - {file = "obstore-0.7.3-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:44989c9be1156c8ad02522bcb0358e813fd71fa061e51c3331cc11f4b6d36525"}, - {file = "obstore-0.7.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3bf0b9c28b3149138ff3db0c2cfb3acb329d3a3bef02a3146edec6d2419b27ad"}, - {file = "obstore-0.7.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:98fd91e90442ff3bf8832c713189c81cd892299a8423fc5d8c4534e84db62643"}, - {file = "obstore-0.7.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9eccae18d75d753129d58c080716cd91738fd1f913b7182eb5695f483d6cbd94"}, - {file = "obstore-0.7.3-cp39-cp39-manylinux_2_24_aarch64.whl", hash = "sha256:bbe0488ca1573020af14ca585ddc5e5aa7593f8fc42ec5d1f53b83393ccaefa5"}, - {file = "obstore-0.7.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:6765cef76ca62b13d4cfec4648fbf6048410d34c2e11455323d011d208977b89"}, - {file = "obstore-0.7.3-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:00f8d1211d247fc24c9f5d5614f2ed25872fe2c4af2e283f3e6cc85544a3dee5"}, - {file = "obstore-0.7.3-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:ebc387320a00918c8afb5f2d76c07157003a661d60ff03763103278670bc75e3"}, - {file = "obstore-0.7.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:8b526bdc5b5392ac55b3a45bf04f2eba3a33c132dfa04418e7ffba38763d7b5d"}, - {file = "obstore-0.7.3-cp39-cp39-win_amd64.whl", hash = "sha256:1af6dfef86b37e74ff812bd70d8643619e16485559fcaee01b3f2442b70d4918"}, - {file = "obstore-0.7.3-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:848eb12ed713f447a7b1f7de3f0bff570de99546f76c37e6315102f5bbdaf71c"}, - {file = "obstore-0.7.3-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:091998d57331aa0e648a9dca0adebf6dc09eb53a4e6935c9c06625998120acc1"}, - {file = "obstore-0.7.3-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ed7c957d19a6a994e8c9198b1e58b31e0fc3748ca056e27f738a4ead789eb80b"}, - {file = "obstore-0.7.3-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:af8daa0568c89ce863986ccf14570c30d1dc817b51ed2146eecb76fddc82704e"}, - {file = "obstore-0.7.3-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fe42053413a35a964e88ea156af3253defac30bedd973797b55b8e230cc50fe4"}, - {file = "obstore-0.7.3-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d2faa2ac90672334cdaabbf930c82e91efa184928dc55b55bcbf84b152bc4df1"}, - {file = "obstore-0.7.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49f20fdabd295a5a001569957c19a51615d288cd255fb80dcf966e2307ca0cec"}, - {file = "obstore-0.7.3-pp310-pypy310_pp73-manylinux_2_24_aarch64.whl", hash = "sha256:aa131d089565fb7a5225220fcdfe260e3b1fc6821c0a2eef2e3a23c5ba9c79bd"}, - {file = "obstore-0.7.3-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:73df8b270b89a97ef9e87fc8e552d97d426bbfcb61c55097f5d452a7457ee9d5"}, - {file = "obstore-0.7.3-pp310-pypy310_pp73-musllinux_1_2_armv7l.whl", hash = "sha256:25cea5cf5a727800b14cf4d09fd2b799c28fb755cc04e5635e7fb36d413bf772"}, - {file = "obstore-0.7.3-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:aae7fea048d7e73e5c206efef1627bff677455f6eed5c94a596906c4fcedc744"}, - {file = "obstore-0.7.3-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:b4ee1ee4f8846ae891f1715a19a8f89d16a00c9e8913bf60c9f3acf24d905de2"}, -] - -[package.dependencies] -typing-extensions = {version = "*", markers = "python_full_version < \"3.13.0\""} - -[[package]] -name = "openai" -version = "2.5.0" -description = "The official Python library for the openai API" -optional = false -python-versions = ">=3.8" -groups = ["main"] -files = [ - {file = "openai-2.5.0-py3-none-any.whl", hash = "sha256:21380e5f52a71666dbadbf322dd518bdf2b9d11ed0bb3f96bea17310302d6280"}, - {file = "openai-2.5.0.tar.gz", hash = "sha256:f8fa7611f96886a0f31ac6b97e58bc0ada494b255ee2cfd51c8eb502cfcb4814"}, + {file = "openai-2.31.0-py3-none-any.whl", hash = "sha256:44e1344d87e56a493d649b17e2fac519d1368cbb0745f59f1957c4c26de50a0a"}, + {file = "openai-2.31.0.tar.gz", hash = "sha256:43ca59a88fc973ad1848d86b98d7fac207e265ebbd1828b5e4bdfc85f79427a5"}, ] [package.dependencies] @@ -3080,7 +3040,7 @@ jiter = ">=0.10.0,<1" pydantic = ">=1.9.0,<3" sniffio = "*" tqdm = ">4" -typing-extensions = ">=4.11,<5" +typing-extensions = ">=4.14,<5" [package.extras] aiohttp = ["aiohttp", "httpx-aiohttp (>=0.1.9)"] @@ -3103,6 +3063,112 @@ files = [ [package.dependencies] et-xmlfile = "*" +[[package]] +name = "opentelemetry-api" +version = "1.41.0" +description = "OpenTelemetry Python API" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "opentelemetry_api-1.41.0-py3-none-any.whl", hash = "sha256:0e77c806e6a89c9e4f8d372034622f3e1418a11bdbe1c80a50b3d3397ad0fa4f"}, + {file = "opentelemetry_api-1.41.0.tar.gz", hash = "sha256:9421d911326ec12dee8bc933f7839090cad7a3f13fcfb0f9e82f8174dc003c09"}, +] + +[package.dependencies] +importlib-metadata = ">=6.0,<8.8.0" +typing-extensions = ">=4.5.0" + +[[package]] +name = "opentelemetry-exporter-otlp-proto-common" +version = "1.41.0" +description = "OpenTelemetry Protobuf encoding" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "opentelemetry_exporter_otlp_proto_common-1.41.0-py3-none-any.whl", hash = "sha256:7a99177bf61f85f4f9ed2072f54d676364719c066f6d11f515acc6c745c7acf0"}, + {file = "opentelemetry_exporter_otlp_proto_common-1.41.0.tar.gz", hash = "sha256:966bbce537e9edb166154779a7c4f8ab6b8654a03a28024aeaf1a3eacb07d6ee"}, +] + +[package.dependencies] +opentelemetry-proto = "1.41.0" + +[[package]] +name = "opentelemetry-exporter-otlp-proto-http" +version = "1.41.0" +description = "OpenTelemetry Collector Protobuf over HTTP Exporter" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "opentelemetry_exporter_otlp_proto_http-1.41.0-py3-none-any.whl", hash = "sha256:a9c4ee69cce9c3f4d7ee736ad1b44e3c9654002c0816900abbafd9f3cf289751"}, + {file = "opentelemetry_exporter_otlp_proto_http-1.41.0.tar.gz", hash = "sha256:dcd6e0686f56277db4eecbadd5262124e8f2cc739cadbc3fae3d08a12c976cf5"}, +] + +[package.dependencies] +googleapis-common-protos = ">=1.52,<2.0" +opentelemetry-api = ">=1.15,<2.0" +opentelemetry-exporter-otlp-proto-common = "1.41.0" +opentelemetry-proto = "1.41.0" +opentelemetry-sdk = ">=1.41.0,<1.42.0" +requests = ">=2.7,<3.0" +typing-extensions = ">=4.5.0" + +[package.extras] +gcp-auth = ["opentelemetry-exporter-credential-provider-gcp (>=0.59b0)"] + +[[package]] +name = "opentelemetry-proto" +version = "1.41.0" +description = "OpenTelemetry Python Proto" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "opentelemetry_proto-1.41.0-py3-none-any.whl", hash = "sha256:b970ab537309f9eed296be482c3e7cca05d8aca8165346e929f658dbe153b247"}, + {file = "opentelemetry_proto-1.41.0.tar.gz", hash = "sha256:95d2e576f9fb1800473a3e4cfcca054295d06bdb869fda4dc9f4f779dc68f7b6"}, +] + +[package.dependencies] +protobuf = ">=5.0,<7.0" + +[[package]] +name = "opentelemetry-sdk" +version = "1.41.0" +description = "OpenTelemetry Python SDK" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "opentelemetry_sdk-1.41.0-py3-none-any.whl", hash = "sha256:a596f5687964a3e0d7f8edfdcf5b79cbca9c93c7025ebf5fb00f398a9443b0bd"}, + {file = "opentelemetry_sdk-1.41.0.tar.gz", hash = "sha256:7bddf3961131b318fc2d158947971a8e37e38b1cd23470cfb72b624e7cc108bd"}, +] + +[package.dependencies] +opentelemetry-api = "1.41.0" +opentelemetry-semantic-conventions = "0.62b0" +typing-extensions = ">=4.5.0" + +[package.extras] +file-configuration = ["jsonschema (>=4.0)", "pyyaml (>=6.0)"] + +[[package]] +name = "opentelemetry-semantic-conventions" +version = "0.62b0" +description = "OpenTelemetry Semantic Conventions" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "opentelemetry_semantic_conventions-0.62b0-py3-none-any.whl", hash = "sha256:0ddac1ce59eaf1a827d9987ab60d9315fb27aea23304144242d1fcad9e16b489"}, + {file = "opentelemetry_semantic_conventions-0.62b0.tar.gz", hash = "sha256:cbfb3c8fc259575cf68a6e1b94083cc35adc4a6b06e8cf431efa0d62606c0097"}, +] + +[package.dependencies] +opentelemetry-api = "1.41.0" +typing-extensions = ">=4.5.0" + [[package]] name = "orjson" version = "3.11.5" @@ -3366,6 +3432,24 @@ sql-other = ["SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "adbc-d test = ["hypothesis (>=6.46.1)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)"] xml = ["lxml (>=4.9.2)"] +[[package]] +name = "pathspec" +version = "1.0.4" +description = "Utility library for gitignore style pattern matching of file paths." +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "pathspec-1.0.4-py3-none-any.whl", hash = "sha256:fb6ae2fd4e7c921a165808a552060e722767cfa526f99ca5156ed2ce45a5c723"}, + {file = "pathspec-1.0.4.tar.gz", hash = "sha256:0210e2ae8a21a9137c0d470578cb0e595af87edaa6ebf12ff176f14a02e0e645"}, +] + +[package.extras] +hyperscan = ["hyperscan (>=0.7)"] +optional = ["typing-extensions (>=4)"] +re2 = ["google-re2 (>=1.1)"] +tests = ["pytest (>=9)", "typing-extensions (>=4.15)"] + [[package]] name = "pillow" version = "12.0.0" @@ -3719,23 +3803,22 @@ files = [ [[package]] name = "protobuf" -version = "5.29.5" +version = "6.33.6" description = "" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" groups = ["main"] files = [ - {file = "protobuf-5.29.5-cp310-abi3-win32.whl", hash = "sha256:3f1c6468a2cfd102ff4703976138844f78ebd1fb45f49011afc5139e9e283079"}, - {file = "protobuf-5.29.5-cp310-abi3-win_amd64.whl", hash = "sha256:3f76e3a3675b4a4d867b52e4a5f5b78a2ef9565549d4037e06cf7b0942b1d3fc"}, - {file = "protobuf-5.29.5-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:e38c5add5a311f2a6eb0340716ef9b039c1dfa428b28f25a7838ac329204a671"}, - {file = "protobuf-5.29.5-cp38-abi3-manylinux2014_aarch64.whl", hash = "sha256:fa18533a299d7ab6c55a238bf8629311439995f2e7eca5caaff08663606e9015"}, - {file = "protobuf-5.29.5-cp38-abi3-manylinux2014_x86_64.whl", hash = "sha256:63848923da3325e1bf7e9003d680ce6e14b07e55d0473253a690c3a8b8fd6e61"}, - {file = "protobuf-5.29.5-cp38-cp38-win32.whl", hash = "sha256:ef91363ad4faba7b25d844ef1ada59ff1604184c0bcd8b39b8a6bef15e1af238"}, - {file = "protobuf-5.29.5-cp38-cp38-win_amd64.whl", hash = "sha256:7318608d56b6402d2ea7704ff1e1e4597bee46d760e7e4dd42a3d45e24b87f2e"}, - {file = "protobuf-5.29.5-cp39-cp39-win32.whl", hash = "sha256:6f642dc9a61782fa72b90878af134c5afe1917c89a568cd3476d758d3c3a0736"}, - {file = "protobuf-5.29.5-cp39-cp39-win_amd64.whl", hash = "sha256:470f3af547ef17847a28e1f47200a1cbf0ba3ff57b7de50d22776607cd2ea353"}, - {file = "protobuf-5.29.5-py3-none-any.whl", hash = "sha256:6cf42630262c59b2d8de33954443d94b746c952b01434fc58a417fdbd2e84bd5"}, - {file = "protobuf-5.29.5.tar.gz", hash = "sha256:bc1463bafd4b0929216c35f437a8e28731a2b7fe3d98bb77a600efced5a15c84"}, + {file = "protobuf-6.33.6-cp310-abi3-win32.whl", hash = "sha256:7d29d9b65f8afef196f8334e80d6bc1d5d4adedb449971fefd3723824e6e77d3"}, + {file = "protobuf-6.33.6-cp310-abi3-win_amd64.whl", hash = "sha256:0cd27b587afca21b7cfa59a74dcbd48a50f0a6400cfb59391340ad729d91d326"}, + {file = "protobuf-6.33.6-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:9720e6961b251bde64edfdab7d500725a2af5280f3f4c87e57c0208376aa8c3a"}, + {file = "protobuf-6.33.6-cp39-abi3-manylinux2014_aarch64.whl", hash = "sha256:e2afbae9b8e1825e3529f88d514754e094278bb95eadc0e199751cdd9a2e82a2"}, + {file = "protobuf-6.33.6-cp39-abi3-manylinux2014_s390x.whl", hash = "sha256:c96c37eec15086b79762ed265d59ab204dabc53056e3443e702d2681f4b39ce3"}, + {file = "protobuf-6.33.6-cp39-abi3-manylinux2014_x86_64.whl", hash = "sha256:e9db7e292e0ab79dd108d7f1a94fe31601ce1ee3f7b79e0692043423020b0593"}, + {file = "protobuf-6.33.6-cp39-cp39-win32.whl", hash = "sha256:bd56799fb262994b2c2faa1799693c95cc2e22c62f56fb43af311cae45d26f0e"}, + {file = "protobuf-6.33.6-cp39-cp39-win_amd64.whl", hash = "sha256:f443a394af5ed23672bc6c486be138628fbe5c651ccbc536873d7da23d1868cf"}, + {file = "protobuf-6.33.6-py3-none-any.whl", hash = "sha256:77179e006c476e69bf8e8ce866640091ec42e1beb80b213c3900006ecfba6901"}, + {file = "protobuf-6.33.6.tar.gz", hash = "sha256:a6768d25248312c297558af96a9f9c929e8c4cee0659cb07e780731095f38135"}, ] [[package]] @@ -4103,6 +4186,24 @@ files = [ [package.extras] windows-terminal = ["colorama (>=0.4.6)"] +[[package]] +name = "pyjwt" +version = "2.12.1" +description = "JSON Web Token implementation in Python" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "pyjwt-2.12.1-py3-none-any.whl", hash = "sha256:28ca37c070cad8ba8cd9790cd940535d40274d22f80ab87f3ac6a713e6e8454c"}, + {file = "pyjwt-2.12.1.tar.gz", hash = "sha256:c74a7a2adf861c04d002db713dd85f84beb242228e671280bf709d765b03672b"}, +] + +[package.extras] +crypto = ["cryptography (>=3.4.0)"] +dev = ["coverage[toml] (==7.10.7)", "cryptography (>=3.4.0)", "pre-commit", "pytest (>=8.4.2,<9.0.0)", "sphinx", "sphinx-rtd-theme", "zope.interface"] +docs = ["sphinx", "sphinx-rtd-theme", "zope.interface"] +tests = ["coverage[toml] (==7.10.7)", "pytest (>=8.4.2,<9.0.0)"] + [[package]] name = "pyperclip" version = "1.11.0" @@ -4154,14 +4255,14 @@ six = ">=1.5" [[package]] name = "python-dotenv" -version = "1.1.1" +version = "1.2.2" description = "Read key-value pairs from a .env file and set them as environment variables" optional = false -python-versions = ">=3.9" +python-versions = ">=3.10" groups = ["main"] files = [ - {file = "python_dotenv-1.1.1-py3-none-any.whl", hash = "sha256:31f23644fe2602f88ff55e1f5c79ba497e01224ee7737937930c448e4d0e24dc"}, - {file = "python_dotenv-1.1.1.tar.gz", hash = "sha256:a8a6399716257f45be6a007360200409fce5cda2661e3dec71d23dc15f6189ab"}, + {file = "python_dotenv-1.2.2-py3-none-any.whl", hash = "sha256:1d8214789a24de455a8b8bd8ae6fe3c6b69a5e3d64aa8a8e5d68e694bbcb285a"}, + {file = "python_dotenv-1.2.2.tar.gz", hash = "sha256:2c371a91fbd7ba082c2c1dc1f8bf89ca22564a087c2c287cd9b662adde799cf3"}, ] [package.extras] @@ -4735,30 +4836,6 @@ files = [ [package.dependencies] pyasn1 = ">=0.1.3" -[[package]] -name = "runloop-api-client" -version = "1.2.0" -description = "The official Python library for the runloop API" -optional = false -python-versions = ">=3.9" -groups = ["main"] -files = [ - {file = "runloop_api_client-1.2.0-py3-none-any.whl", hash = "sha256:65429d361362f5264ccc734c33ee731eef47645ae42c43dc884ccd74e3eaaf0c"}, - {file = "runloop_api_client-1.2.0.tar.gz", hash = "sha256:33f3408deb8de0cad9465b5f5f159672c27b7e4d34355e70e39723ef0f1e3559"}, -] - -[package.dependencies] -anyio = ">=3.5.0,<5" -distro = ">=1.7.0,<2" -httpx = ">=0.23.0,<1" -pydantic = ">=1.9.0,<3" -sniffio = "*" -typing-extensions = ">=4.10,<5" -uuid-utils = ">=0.11.0" - -[package.extras] -aiohttp = ["aiohttp", "httpx-aiohttp (>=0.1.9)"] - [[package]] name = "safetensors" version = "0.6.2" @@ -4969,7 +5046,6 @@ description = "Easily download, build, install, upgrade, and uninstall Python pa optional = false python-versions = ">=3.9" groups = ["main"] -markers = "python_version >= \"3.13\"" files = [ {file = "setuptools-80.9.0-py3-none-any.whl", hash = "sha256:062d34222ad13e0cc312a4c02d73f059e86a4acbfbdea8f8f76b28c99f306922"}, {file = "setuptools-80.9.0.tar.gz", hash = "sha256:f36b47402ecde768dbfafc46e8e4207b4360c654f1f3bb84475f0a28628fb19c"}, @@ -4984,18 +5060,6 @@ enabler = ["pytest-enabler (>=2.2)"] test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21) ; python_version >= \"3.9\" and sys_platform != \"cygwin\"", "jaraco.envs (>=2.2)", "jaraco.path (>=3.7.2)", "jaraco.test (>=5.5)", "packaging (>=24.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-home (>=0.5)", "pytest-perf ; sys_platform != \"cygwin\"", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel (>=0.44.0)"] type = ["importlib_metadata (>=7.0.2) ; python_version < \"3.10\"", "jaraco.develop (>=7.21) ; sys_platform != \"cygwin\"", "mypy (==1.14.*)", "pytest-mypy"] -[[package]] -name = "shellingham" -version = "1.5.4" -description = "Tool to Detect Surrounding Shell" -optional = false -python-versions = ">=3.7" -groups = ["main"] -files = [ - {file = "shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686"}, - {file = "shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de"}, -] - [[package]] name = "six" version = "1.17.0" @@ -5178,6 +5242,18 @@ typing-extensions = {version = ">=4.10.0", markers = "python_version < \"3.13\"" [package.extras] full = ["httpx (>=0.27.0,<0.29.0)", "itsdangerous", "jinja2", "python-multipart (>=0.0.18)", "pyyaml"] +[[package]] +name = "structlog" +version = "25.5.0" +description = "Structured Logging for Python" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "structlog-25.5.0-py3-none-any.whl", hash = "sha256:a8453e9b9e636ec59bd9e79bbd4a72f025981b3ba0f5837aebf48f02f37a7f9f"}, + {file = "structlog-25.5.0.tar.gz", hash = "sha256:098522a3bebed9153d4570c6d0288abf80a031dfdb2048d59a49e9dc2190fc98"}, +] + [[package]] name = "sympy" version = "1.14.0" @@ -5196,24 +5272,6 @@ mpmath = ">=1.1.0,<1.4" [package.extras] dev = ["hypothesis (>=6.70.0)", "pytest (>=7.1.0)"] -[[package]] -name = "synchronicity" -version = "0.10.5" -description = "Export blocking and async library versions from a single async implementation" -optional = false -python-versions = ">=3.9" -groups = ["main"] -files = [ - {file = "synchronicity-0.10.5-py3-none-any.whl", hash = "sha256:8bcdbfe6f9456ddcfcb267e0ca853c3b7650f129acf3abae4af45caf85d66d16"}, - {file = "synchronicity-0.10.5.tar.gz", hash = "sha256:6bdb3ea99f327e2d5602ad134458244ddaf331d56951634e5424df1edb07fe0d"}, -] - -[package.dependencies] -typing-extensions = ">=4.12.2" - -[package.extras] -compile = ["sigtools (>=4.0.1)"] - [[package]] name = "tavily-python" version = "0.7.22" @@ -5286,6 +5344,117 @@ files = [ textual = ">=2.0.0" typing-extensions = ">=4.5.0" +[[package]] +name = "textual-speedups" +version = "0.2.1" +description = "" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "textual_speedups-0.2.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0de26291e03bde1a911a896f17fcf475117ae053ec430522089c31271e88cba7"}, + {file = "textual_speedups-0.2.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d7b9d402908fbf16ee991808787329ff8e95096904a41759086e3c085e51aba1"}, + {file = "textual_speedups-0.2.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ffec473275581ede151d955c4c4212b109169b2931f2a1954281714918cdd2d7"}, + {file = "textual_speedups-0.2.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:910478a307771a8c2c9263aa00abeec7df569c845fd2d5d5e65e41c5b9cc72b5"}, + {file = "textual_speedups-0.2.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e542b6272368040ae322e293ef04d7caef822ba4507c5d0981510cd237c60359"}, + {file = "textual_speedups-0.2.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:772dc045ae8ac736a98e896e13883a8e8c66240b9a483847ee6457f5b703f915"}, + {file = "textual_speedups-0.2.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:77880bd64988217f3f44b91c7d466bae5d50fe3145becb0f06a68e638113a4f3"}, + {file = "textual_speedups-0.2.1-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:9174146c1291b887111f60e38fa11ad617020b94768fb386d4e0dc07e03249d0"}, + {file = "textual_speedups-0.2.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:4aafb19bfd6c2071365432d5b93e8649feae92bb3aabe1e60d294cac23ecb7f5"}, + {file = "textual_speedups-0.2.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:466e9f0ad593de3827c1da63079e5665e33165da8552d2dfbfa41c8c55219330"}, + {file = "textual_speedups-0.2.1-cp310-cp310-win_amd64.whl", hash = "sha256:bd40b9082475fa9015ca37d7c8eea572943c6d5d192b29d7d8b48db44510649f"}, + {file = "textual_speedups-0.2.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:27715265e1754b88d4a5600046b727c926423d0e63497d1f01a96deeca816955"}, + {file = "textual_speedups-0.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9bf2860116b73da0bb18b7a3b2559811b911b00686b2f7acd51cd15ced2c5f43"}, + {file = "textual_speedups-0.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:03543755f947aba5b8b85a19b9a22326b89ad4bddd072a96b504d197717ecf67"}, + {file = "textual_speedups-0.2.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:267dbc7f3670e5bf41ac584082cff695984bf556430fa3b3ad67986610193520"}, + {file = "textual_speedups-0.2.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:af8f588ceab3e1e15ba8577af93a31e83cda974d951d34c0ffcf02339ffb315e"}, + {file = "textual_speedups-0.2.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a283550fc07957fea15e2406648c1f7efd34521638f7b29f71ca1eebe9a84843"}, + {file = "textual_speedups-0.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5fb7f4c0c8d42ca290c2e66473844c3d6a65fddb370823fa346adb0a4a0019ad"}, + {file = "textual_speedups-0.2.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:dbd3e3253eafc092acc31e09b8330bc22cbf66553ef0e17d37581203237a670b"}, + {file = "textual_speedups-0.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:2fba949af1e836a8419d80c391feae701286b606af646e26f068c023309b1dae"}, + {file = "textual_speedups-0.2.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:25997f169325bc4b7b75086d066d322d136df928486a450fb4d90a1438a75fc6"}, + {file = "textual_speedups-0.2.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:f5bffdbc74592302c6af3da36f4213d1263116b040251eae1c2c20e5f99b4afe"}, + {file = "textual_speedups-0.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ca60b2fe2b9ac3d6aa08dde9879711b5befd0c3bfb8cc99aaa176087c5feae7f"}, + {file = "textual_speedups-0.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:3a4f402b2c1d0d778e96fee790024196295eebc2519d886fa262fdbf96455966"}, + {file = "textual_speedups-0.2.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:84d2209fc85b7b06d81de200e46de6b51961e2ea1708cd568059983d7b7b634e"}, + {file = "textual_speedups-0.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:aabadeabdd03bce13b55a4c9c927d702160695c3f2f8a1789b95ed0102968a8d"}, + {file = "textual_speedups-0.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:37a47c888d9cfdc6b2785844393e250fb268b404ea8eee937ac862b7b1666e82"}, + {file = "textual_speedups-0.2.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3d4c80c6e1d687d4d508de856a0c7c5090e07d964c09701b582cc1f64452f753"}, + {file = "textual_speedups-0.2.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4523970dfd9d2718fdd293a8ae1d8b098ca65bdd54666416a13d5acbaacdc64a"}, + {file = "textual_speedups-0.2.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5a3129288536be5e5319f3a03525a04e222c46340d448f180d2c4327b2651563"}, + {file = "textual_speedups-0.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b5e43f0af17ef8834ecdf1c1be466eca441970547b5df2e6c17eea301290118d"}, + {file = "textual_speedups-0.2.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1b271489001115ef18dbf92e68cc5f081285a7758e63daef9894c83244b8700c"}, + {file = "textual_speedups-0.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:68c3a20b2e7b8d33c292fcd8d613e6f2e0e25ff131d988c73646757f50a37f3f"}, + {file = "textual_speedups-0.2.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:50bcc9f315930ab0214ee87847f901fcdd71d2972d683502a495f6266489c208"}, + {file = "textual_speedups-0.2.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:7fede4ded345dc7205cf04e0157179bb37c5477d2d8193c1cbe2171256e63fdb"}, + {file = "textual_speedups-0.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:70f07dc375244d6eb461df2405413b2d67cabf7265a255213e70dcaae1ae6ff9"}, + {file = "textual_speedups-0.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:19f4d1b13da38ba0e7a6c87815447b114301670f9d4e6f9a7bdf9d4ae9f5f926"}, + {file = "textual_speedups-0.2.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:55cc5a86ceb7cf82e0089a6d45daa3c3ea9248bb2a2fbcde40f9aeb562386a24"}, + {file = "textual_speedups-0.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c762c60275dce06b9c9bde4173cefef950798877da0aac46538ccd0d2ffb2f43"}, + {file = "textual_speedups-0.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42172f4b7742988d9ff28098600b8a4a86a7e86ba39fcc3c779a93b98ef31abc"}, + {file = "textual_speedups-0.2.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d2b58a100a3634e24bb532ad70602439bf358ea68687eb58eb18b05d699136e9"}, + {file = "textual_speedups-0.2.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7bded0beea2e344c0a2eea378235c61a8cab66e3eee8c5f6a92841b8c83d8b42"}, + {file = "textual_speedups-0.2.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a7a2cc60b3b87b684fdf9059f2f952dfc0a41e351018331862ddbb76b87f86a1"}, + {file = "textual_speedups-0.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1389c87c4e1a071ba7ef0a2189d6989b753893ade56fea2e46bda5579f9e1844"}, + {file = "textual_speedups-0.2.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3760151da33f317f0d99d0191b1da1ccb1464e8d172207c857b6f25e67bb9ce2"}, + {file = "textual_speedups-0.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1c6f9b5a76e4df9614313be8b32192705f41c24b1fdac2a63e5d8fb8a82098f4"}, + {file = "textual_speedups-0.2.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:472bfecd1de0fecdfb8ac27f0543988f54f9f9e7ec10e4bd9ec1817c9e97ebf2"}, + {file = "textual_speedups-0.2.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:633ede114e6d24ea1fe99b6165242b233569008d0f4e30fb1e4484137dd6ec8a"}, + {file = "textual_speedups-0.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:85704fe03f0df3314354815d5edcc58121003e25a4ecaab7d9ab3ab8f91e9abc"}, + {file = "textual_speedups-0.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:f360211bde6e58e0e7c9b594ee317682ec2812d8f3613087421a42142ed69bdd"}, + {file = "textual_speedups-0.2.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d132064312e9a79e44612ba227ddea071803e9f2bb725e17e2b96c2e2d707f8a"}, + {file = "textual_speedups-0.2.1-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:40a409f9f1ada86f8ea25908bdfea0323122fbfc1283437b95541c91b05c6071"}, + {file = "textual_speedups-0.2.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:487bd44791ccab54b13db1c2359380fb58e8c8aa2a3c7f976b80fe552060bf59"}, + {file = "textual_speedups-0.2.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:31fd676c50114df04ab3d84fc76741d6b8542db477d1887c5d5ef6a9d1c7d06b"}, + {file = "textual_speedups-0.2.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:72fc01e98be7ab7bb251be6e7f7d5dbff409d9242ce729e0d7786268876f3e63"}, + {file = "textual_speedups-0.2.1-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:f5c9d36c952f86857625833717ee49e7329685d435d6d0764b6998c6189a0c3d"}, + {file = "textual_speedups-0.2.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:476331a1180c57b49a4f553840b195a83bcd3a9ff2c199ad7baa975447d3db05"}, + {file = "textual_speedups-0.2.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:bdd9298bd66853b2df37a766193d28bdc0de86b80067fd90737fd9405bd5a727"}, + {file = "textual_speedups-0.2.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:99a88f44c1b846d51dd115b5fb4dbf97bdef83e9f98a84efec16922a5974e230"}, + {file = "textual_speedups-0.2.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8d2036752ff0df77972b157e71dd942fd75871d9c4feca751f222310bff7c17a"}, + {file = "textual_speedups-0.2.1-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:267c44974ea63e9742ea6cbb65f96d5dbdd09b2f9979823a4b7f664614dd21af"}, + {file = "textual_speedups-0.2.1-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cd3f19c6fd7148b6ba86c4c8bde7fdbf96b33687dc42872b8da2fdf67f5ab6d3"}, + {file = "textual_speedups-0.2.1-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6245ea2c4883815ed23ecaf852e4de3d2d99e5f082790e780202705730c30b9a"}, + {file = "textual_speedups-0.2.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6aaade447724543c60e546542ff91224028992ce4a2a071c81b1927cead114b3"}, + {file = "textual_speedups-0.2.1-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:821d3e57014d0d426c28fc8da4adaa0829f5cdf3ea133559ce6c64baf3aa98d6"}, + {file = "textual_speedups-0.2.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:fecfdc25439a890dfb9f7357f2d854ef801c5a6484b595dde1baf6a15d20b945"}, + {file = "textual_speedups-0.2.1-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:0df559abaa14324757e8995e27c83171673377effd7348350f2d1b852eb0e8c1"}, + {file = "textual_speedups-0.2.1-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:ebc5094080c61d06c71011da6c7522e51635d1425bfa14d693bca6059e64b795"}, + {file = "textual_speedups-0.2.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5fee92c2e442b86644769011dfbd4f0dbcd43490eecd577735a09a751f3d4a31"}, + {file = "textual_speedups-0.2.1-cp314-cp314-win32.whl", hash = "sha256:8ffcf6711869f4241a751aacc055f46c842fb633000964c94e3d1f1bf4b887c0"}, + {file = "textual_speedups-0.2.1-cp314-cp314-win_amd64.whl", hash = "sha256:1889ae903263c47f76905443a5274d3cceacf5ee218af8c79ef24598c54ac70e"}, + {file = "textual_speedups-0.2.1-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b03ffba57b8d2eb991a2edcc4a873096228ab2c1c3ba8577e502204a721037c8"}, + {file = "textual_speedups-0.2.1-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:03a8dc93c983215e187c414a66e5d338c8805f30180b8b845c05914e37a1b315"}, + {file = "textual_speedups-0.2.1-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3634667a035134cda18890a623f9fc561ff3c22d9a6e97c6244e52047251f454"}, + {file = "textual_speedups-0.2.1-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5786c2c56cf0e99ad89481f1464ec002d1bfe3adbd5bcb5f1f9b9fd03a7cc063"}, + {file = "textual_speedups-0.2.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:9d05bdd2c760833c9ed8d1fffb7cca2e293c15031e53e270e06766dbc96771fc"}, + {file = "textual_speedups-0.2.1-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:7dc58e59d740e66d1e0a9ce18835ee0e6a72a61bf0a4c1afce38273e217fdf27"}, + {file = "textual_speedups-0.2.1-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:e6e8c74a63080a50a95f26e87818c66d8507de21c6d610ed049f91b84402aafa"}, + {file = "textual_speedups-0.2.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5fd85522114aec21c3915725992401e2bf6372ae5b1e3b2ebd85e1c3c7115885"}, + {file = "textual_speedups-0.2.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5af4fbf8bfb229199700d1d15ee7e9b350eec726ac36e44e136c1348ea11c69b"}, + {file = "textual_speedups-0.2.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9c4b9660ae54567f67f1d40405fd4f72582f45909d8399878840993d10964a2b"}, + {file = "textual_speedups-0.2.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91fb158d4e631bc87af2555ae1d0da505605c957c3dd562432b11abd0746ec9b"}, + {file = "textual_speedups-0.2.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c9775cab867da82fee68c66dbaed820da5709d7dfa737d9d0ac20884b46330b8"}, + {file = "textual_speedups-0.2.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:431c9cc3b3d898b19a06e45cee7f840d93a9bef2bf0a12523d0416cad21b3b0b"}, + {file = "textual_speedups-0.2.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2cf6365836c938078768f61fd1d7d68f96fe59c36bef3ce975b72a08b63468a4"}, + {file = "textual_speedups-0.2.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:94e3c2ba5f85c8ec6863406f5689f6e9733aab8e1a5cbeed81a876b367336844"}, + {file = "textual_speedups-0.2.1-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:f2c4544fc7d074334adeac15392ff6a30b10cf3569b3c50cb1119f4cda01c761"}, + {file = "textual_speedups-0.2.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:deef01eca22830f592801a185bc5696151328a3678337f3181660c2d1bc38875"}, + {file = "textual_speedups-0.2.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:7d607264b830af97f7cd433aa3263cf5841068fe17710267cec0414dbd63d572"}, + {file = "textual_speedups-0.2.1-cp39-cp39-win_amd64.whl", hash = "sha256:eb9f839652cb3fa34838caeb07fde18d3d04d94783ad993a4a775816ea49eda5"}, + {file = "textual_speedups-0.2.1-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c782c16e2c06633b1422837f22755f2d818ebd9140c6d048c1f065396798670f"}, + {file = "textual_speedups-0.2.1-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9df573f105703e368cd495d8d275b51b1f4595d24fa7ef90a5afe438843a2019"}, + {file = "textual_speedups-0.2.1-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:828ce016c84e8af7038347b14deff94fb4cbd2153e6c89c3552bd560ca8bec91"}, + {file = "textual_speedups-0.2.1-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1eaf0e7582c3f88a3c9dd18de725891f4e9977355459b643098fefbd36650b62"}, + {file = "textual_speedups-0.2.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5218771fa3273c3d1d49ce53077358b3d5d840acb1043d377b6674f45cd7c975"}, + {file = "textual_speedups-0.2.1-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:77fed425653027f4759f120124cc04c1a0143b30bb34172de9858c7d3c582379"}, + {file = "textual_speedups-0.2.1-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:a48fa24cd460ee4340a48f3e81a8299d282c2a23f7365e3bcf31ad7ab8385653"}, + {file = "textual_speedups-0.2.1-pp311-pypy311_pp73-musllinux_1_2_armv7l.whl", hash = "sha256:f3e99ad237787f48f95a5764cd57c3d03818df07b06f38fc7bd5827d543c7f5b"}, + {file = "textual_speedups-0.2.1-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:721803e803ae1924aa18b0f108f0bfae41effa3c52d180e9ac05698785b9516c"}, + {file = "textual_speedups-0.2.1-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:074538c2478e5a0a40079c560ef1516b7567b2d2844e49c2f44974f24e5a5a77"}, + {file = "textual_speedups-0.2.1.tar.gz", hash = "sha256:72cf0f7bdeede015367b59b70bcf724ba2c3080a8641ebc5eb94b36ad1536824"}, +] + [[package]] name = "threadpoolctl" version = "3.6.0" @@ -5405,18 +5574,6 @@ dev = ["tokenizers[testing]"] docs = ["setuptools-rust", "sphinx", "sphinx-rtd-theme"] testing = ["black (==22.3)", "datasets", "numpy", "pytest", "pytest-asyncio", "requests", "ruff"] -[[package]] -name = "toml" -version = "0.10.2" -description = "Python Library for Tom's Obvious, Minimal Language" -optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" -groups = ["main"] -files = [ - {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, - {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, -] - [[package]] name = "tomli-w" version = "1.2.0" @@ -5611,45 +5768,15 @@ tests = ["autopep8", "flake8", "isort", "numpy", "pytest", "scipy (>=1.7.1)", "t tutorials = ["matplotlib", "pandas", "tabulate", "torch"] [[package]] -name = "typer" -version = "0.20.1" -description = "Typer, build great CLIs. Easy to code. Based on Python type hints." +name = "truststore" +version = "0.10.4" +description = "Verify certificates using native system trust stores" optional = false -python-versions = ">=3.8" +python-versions = ">=3.10" groups = ["main"] files = [ - {file = "typer-0.20.1-py3-none-any.whl", hash = "sha256:4b3bde918a67c8e03d861aa02deca90a95bbac572e71b1b9be56ff49affdb5a8"}, - {file = "typer-0.20.1.tar.gz", hash = "sha256:68585eb1b01203689c4199bc440d6be616f0851e9f0eb41e4a778845c5a0fd5b"}, -] - -[package.dependencies] -click = ">=8.0.0" -rich = ">=10.11.0" -shellingham = ">=1.3.0" -typing-extensions = ">=3.7.4.3" - -[[package]] -name = "types-certifi" -version = "2021.10.8.3" -description = "Typing stubs for certifi" -optional = false -python-versions = "*" -groups = ["main"] -files = [ - {file = "types-certifi-2021.10.8.3.tar.gz", hash = "sha256:72cf7798d165bc0b76e1c10dd1ea3097c7063c42c21d664523b928e88b554a4f"}, - {file = "types_certifi-2021.10.8.3-py3-none-any.whl", hash = "sha256:b2d1e325e69f71f7c78e5943d410e650b4707bb0ef32e4ddf3da37f54176e88a"}, -] - -[[package]] -name = "types-toml" -version = "0.10.8.20240310" -description = "Typing stubs for toml" -optional = false -python-versions = ">=3.8" -groups = ["main"] -files = [ - {file = "types-toml-0.10.8.20240310.tar.gz", hash = "sha256:3d41501302972436a6b8b239c850b26689657e25281b48ff0ec06345b8830331"}, - {file = "types_toml-0.10.8.20240310-py3-none-any.whl", hash = "sha256:627b47775d25fa29977d9c70dc0cbab3f314f32c8d8d0c012f2ef5de7aaec05d"}, + {file = "truststore-0.10.4-py3-none-any.whl", hash = "sha256:adaeaecf1cbb5f4de3b1959b42d41f6fab57b2b1666adb59e89cb0b53361d981"}, + {file = "truststore-0.10.4.tar.gz", hash = "sha256:9d91bd436463ad5e4ee4aba766628dd6cd7010cf3e2461756b3303710eebc301"}, ] [[package]] @@ -6067,126 +6194,6 @@ files = [ {file = "websockets-15.0.1.tar.gz", hash = "sha256:82544de02076bafba038ce055ee6412d68da13ab47f0c60cab827346de828dee"}, ] -[[package]] -name = "wrapt" -version = "2.0.1" -description = "Module for decorators, wrappers and monkey patching." -optional = false -python-versions = ">=3.8" -groups = ["main"] -files = [ - {file = "wrapt-2.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:64b103acdaa53b7caf409e8d45d39a8442fe6dcfec6ba3f3d141e0cc2b5b4dbd"}, - {file = "wrapt-2.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:91bcc576260a274b169c3098e9a3519fb01f2989f6d3d386ef9cbf8653de1374"}, - {file = "wrapt-2.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ab594f346517010050126fcd822697b25a7031d815bb4fbc238ccbe568216489"}, - {file = "wrapt-2.0.1-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:36982b26f190f4d737f04a492a68accbfc6fa042c3f42326fdfbb6c5b7a20a31"}, - {file = "wrapt-2.0.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:23097ed8bc4c93b7bf36fa2113c6c733c976316ce0ee2c816f64ca06102034ef"}, - {file = "wrapt-2.0.1-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:8bacfe6e001749a3b64db47bcf0341da757c95959f592823a93931a422395013"}, - {file = "wrapt-2.0.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:8ec3303e8a81932171f455f792f8df500fc1a09f20069e5c16bd7049ab4e8e38"}, - {file = "wrapt-2.0.1-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:3f373a4ab5dbc528a94334f9fe444395b23c2f5332adab9ff4ea82f5a9e33bc1"}, - {file = "wrapt-2.0.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f49027b0b9503bf6c8cdc297ca55006b80c2f5dd36cecc72c6835ab6e10e8a25"}, - {file = "wrapt-2.0.1-cp310-cp310-win32.whl", hash = "sha256:8330b42d769965e96e01fa14034b28a2a7600fbf7e8f0cc90ebb36d492c993e4"}, - {file = "wrapt-2.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:1218573502a8235bb8a7ecaed12736213b22dcde9feab115fa2989d42b5ded45"}, - {file = "wrapt-2.0.1-cp310-cp310-win_arm64.whl", hash = "sha256:eda8e4ecd662d48c28bb86be9e837c13e45c58b8300e43ba3c9b4fa9900302f7"}, - {file = "wrapt-2.0.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0e17283f533a0d24d6e5429a7d11f250a58d28b4ae5186f8f47853e3e70d2590"}, - {file = "wrapt-2.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:85df8d92158cb8f3965aecc27cf821461bb5f40b450b03facc5d9f0d4d6ddec6"}, - {file = "wrapt-2.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c1be685ac7700c966b8610ccc63c3187a72e33cab53526a27b2a285a662cd4f7"}, - {file = "wrapt-2.0.1-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:df0b6d3b95932809c5b3fecc18fda0f1e07452d05e2662a0b35548985f256e28"}, - {file = "wrapt-2.0.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4da7384b0e5d4cae05c97cd6f94faaf78cc8b0f791fc63af43436d98c4ab37bb"}, - {file = "wrapt-2.0.1-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:ec65a78fbd9d6f083a15d7613b2800d5663dbb6bb96003899c834beaa68b242c"}, - {file = "wrapt-2.0.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7de3cc939be0e1174969f943f3b44e0d79b6f9a82198133a5b7fc6cc92882f16"}, - {file = "wrapt-2.0.1-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:fb1a5b72cbd751813adc02ef01ada0b0d05d3dcbc32976ce189a1279d80ad4a2"}, - {file = "wrapt-2.0.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3fa272ca34332581e00bf7773e993d4f632594eb2d1b0b162a9038df0fd971dd"}, - {file = "wrapt-2.0.1-cp311-cp311-win32.whl", hash = "sha256:fc007fdf480c77301ab1afdbb6ab22a5deee8885f3b1ed7afcb7e5e84a0e27be"}, - {file = "wrapt-2.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:47434236c396d04875180171ee1f3815ca1eada05e24a1ee99546320d54d1d1b"}, - {file = "wrapt-2.0.1-cp311-cp311-win_arm64.whl", hash = "sha256:837e31620e06b16030b1d126ed78e9383815cbac914693f54926d816d35d8edf"}, - {file = "wrapt-2.0.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:1fdbb34da15450f2b1d735a0e969c24bdb8d8924892380126e2a293d9902078c"}, - {file = "wrapt-2.0.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:3d32794fe940b7000f0519904e247f902f0149edbe6316c710a8562fb6738841"}, - {file = "wrapt-2.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:386fb54d9cd903ee0012c09291336469eb7b244f7183d40dc3e86a16a4bace62"}, - {file = "wrapt-2.0.1-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:7b219cb2182f230676308cdcacd428fa837987b89e4b7c5c9025088b8a6c9faf"}, - {file = "wrapt-2.0.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:641e94e789b5f6b4822bb8d8ebbdfc10f4e4eae7756d648b717d980f657a9eb9"}, - {file = "wrapt-2.0.1-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:fe21b118b9f58859b5ebaa4b130dee18669df4bd111daad082b7beb8799ad16b"}, - {file = "wrapt-2.0.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:17fb85fa4abc26a5184d93b3efd2dcc14deb4b09edcdb3535a536ad34f0b4dba"}, - {file = "wrapt-2.0.1-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:b89ef9223d665ab255ae42cc282d27d69704d94be0deffc8b9d919179a609684"}, - {file = "wrapt-2.0.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a453257f19c31b31ba593c30d997d6e5be39e3b5ad9148c2af5a7314061c63eb"}, - {file = "wrapt-2.0.1-cp312-cp312-win32.whl", hash = "sha256:3e271346f01e9c8b1130a6a3b0e11908049fe5be2d365a5f402778049147e7e9"}, - {file = "wrapt-2.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:2da620b31a90cdefa9cd0c2b661882329e2e19d1d7b9b920189956b76c564d75"}, - {file = "wrapt-2.0.1-cp312-cp312-win_arm64.whl", hash = "sha256:aea9c7224c302bc8bfc892b908537f56c430802560e827b75ecbde81b604598b"}, - {file = "wrapt-2.0.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:47b0f8bafe90f7736151f61482c583c86b0693d80f075a58701dd1549b0010a9"}, - {file = "wrapt-2.0.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:cbeb0971e13b4bd81d34169ed57a6dda017328d1a22b62fda45e1d21dd06148f"}, - {file = "wrapt-2.0.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:eb7cffe572ad0a141a7886a1d2efa5bef0bf7fe021deeea76b3ab334d2c38218"}, - {file = "wrapt-2.0.1-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:c8d60527d1ecfc131426b10d93ab5d53e08a09c5fa0175f6b21b3252080c70a9"}, - {file = "wrapt-2.0.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c654eafb01afac55246053d67a4b9a984a3567c3808bb7df2f8de1c1caba2e1c"}, - {file = "wrapt-2.0.1-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:98d873ed6c8b4ee2418f7afce666751854d6d03e3c0ec2a399bb039cd2ae89db"}, - {file = "wrapt-2.0.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c9e850f5b7fc67af856ff054c71690d54fa940c3ef74209ad9f935b4f66a0233"}, - {file = "wrapt-2.0.1-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:e505629359cb5f751e16e30cf3f91a1d3ddb4552480c205947da415d597f7ac2"}, - {file = "wrapt-2.0.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:2879af909312d0baf35f08edeea918ee3af7ab57c37fe47cb6a373c9f2749c7b"}, - {file = "wrapt-2.0.1-cp313-cp313-win32.whl", hash = "sha256:d67956c676be5a24102c7407a71f4126d30de2a569a1c7871c9f3cabc94225d7"}, - {file = "wrapt-2.0.1-cp313-cp313-win_amd64.whl", hash = "sha256:9ca66b38dd642bf90c59b6738af8070747b610115a39af2498535f62b5cdc1c3"}, - {file = "wrapt-2.0.1-cp313-cp313-win_arm64.whl", hash = "sha256:5a4939eae35db6b6cec8e7aa0e833dcca0acad8231672c26c2a9ab7a0f8ac9c8"}, - {file = "wrapt-2.0.1-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:a52f93d95c8d38fed0669da2ebdb0b0376e895d84596a976c15a9eb45e3eccb3"}, - {file = "wrapt-2.0.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:4e54bbf554ee29fcceee24fa41c4d091398b911da6e7f5d7bffda963c9aed2e1"}, - {file = "wrapt-2.0.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:908f8c6c71557f4deaa280f55d0728c3bca0960e8c3dd5ceeeafb3c19942719d"}, - {file = "wrapt-2.0.1-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:e2f84e9af2060e3904a32cea9bb6db23ce3f91cfd90c6b426757cf7cc01c45c7"}, - {file = "wrapt-2.0.1-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e3612dc06b436968dfb9142c62e5dfa9eb5924f91120b3c8ff501ad878f90eb3"}, - {file = "wrapt-2.0.1-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:6d2d947d266d99a1477cd005b23cbd09465276e302515e122df56bb9511aca1b"}, - {file = "wrapt-2.0.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:7d539241e87b650cbc4c3ac9f32c8d1ac8a54e510f6dca3f6ab60dcfd48c9b10"}, - {file = "wrapt-2.0.1-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:4811e15d88ee62dbf5c77f2c3ff3932b1e3ac92323ba3912f51fc4016ce81ecf"}, - {file = "wrapt-2.0.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:c1c91405fcf1d501fa5d55df21e58ea49e6b879ae829f1039faaf7e5e509b41e"}, - {file = "wrapt-2.0.1-cp313-cp313t-win32.whl", hash = "sha256:e76e3f91f864e89db8b8d2a8311d57df93f01ad6bb1e9b9976d1f2e83e18315c"}, - {file = "wrapt-2.0.1-cp313-cp313t-win_amd64.whl", hash = "sha256:83ce30937f0ba0d28818807b303a412440c4b63e39d3d8fc036a94764b728c92"}, - {file = "wrapt-2.0.1-cp313-cp313t-win_arm64.whl", hash = "sha256:4b55cacc57e1dc2d0991dbe74c6419ffd415fb66474a02335cb10efd1aa3f84f"}, - {file = "wrapt-2.0.1-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:5e53b428f65ece6d9dad23cb87e64506392b720a0b45076c05354d27a13351a1"}, - {file = "wrapt-2.0.1-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:ad3ee9d0f254851c71780966eb417ef8e72117155cff04821ab9b60549694a55"}, - {file = "wrapt-2.0.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:d7b822c61ed04ee6ad64bc90d13368ad6eb094db54883b5dde2182f67a7f22c0"}, - {file = "wrapt-2.0.1-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:7164a55f5e83a9a0b031d3ffab4d4e36bbec42e7025db560f225489fa929e509"}, - {file = "wrapt-2.0.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e60690ba71a57424c8d9ff28f8d006b7ad7772c22a4af432188572cd7fa004a1"}, - {file = "wrapt-2.0.1-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3cd1a4bd9a7a619922a8557e1318232e7269b5fb69d4ba97b04d20450a6bf970"}, - {file = "wrapt-2.0.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:b4c2e3d777e38e913b8ce3a6257af72fb608f86a1df471cb1d4339755d0a807c"}, - {file = "wrapt-2.0.1-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:3d366aa598d69416b5afedf1faa539fac40c1d80a42f6b236c88c73a3c8f2d41"}, - {file = "wrapt-2.0.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:c235095d6d090aa903f1db61f892fffb779c1eaeb2a50e566b52001f7a0f66ed"}, - {file = "wrapt-2.0.1-cp314-cp314-win32.whl", hash = "sha256:bfb5539005259f8127ea9c885bdc231978c06b7a980e63a8a61c8c4c979719d0"}, - {file = "wrapt-2.0.1-cp314-cp314-win_amd64.whl", hash = "sha256:4ae879acc449caa9ed43fc36ba08392b9412ee67941748d31d94e3cedb36628c"}, - {file = "wrapt-2.0.1-cp314-cp314-win_arm64.whl", hash = "sha256:8639b843c9efd84675f1e100ed9e99538ebea7297b62c4b45a7042edb84db03e"}, - {file = "wrapt-2.0.1-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:9219a1d946a9b32bb23ccae66bdb61e35c62773ce7ca6509ceea70f344656b7b"}, - {file = "wrapt-2.0.1-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:fa4184e74197af3adad3c889a1af95b53bb0466bced92ea99a0c014e48323eec"}, - {file = "wrapt-2.0.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c5ef2f2b8a53b7caee2f797ef166a390fef73979b15778a4a153e4b5fedce8fa"}, - {file = "wrapt-2.0.1-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:e042d653a4745be832d5aa190ff80ee4f02c34b21f4b785745eceacd0907b815"}, - {file = "wrapt-2.0.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2afa23318136709c4b23d87d543b425c399887b4057936cd20386d5b1422b6fa"}, - {file = "wrapt-2.0.1-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:6c72328f668cf4c503ffcf9434c2b71fdd624345ced7941bc6693e61bbe36bef"}, - {file = "wrapt-2.0.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:3793ac154afb0e5b45d1233cb94d354ef7a983708cc3bb12563853b1d8d53747"}, - {file = "wrapt-2.0.1-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:fec0d993ecba3991645b4857837277469c8cc4c554a7e24d064d1ca291cfb81f"}, - {file = "wrapt-2.0.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:949520bccc1fa227274da7d03bf238be15389cd94e32e4297b92337df9b7a349"}, - {file = "wrapt-2.0.1-cp314-cp314t-win32.whl", hash = "sha256:be9e84e91d6497ba62594158d3d31ec0486c60055c49179edc51ee43d095f79c"}, - {file = "wrapt-2.0.1-cp314-cp314t-win_amd64.whl", hash = "sha256:61c4956171c7434634401db448371277d07032a81cc21c599c22953374781395"}, - {file = "wrapt-2.0.1-cp314-cp314t-win_arm64.whl", hash = "sha256:35cdbd478607036fee40273be8ed54a451f5f23121bd9d4be515158f9498f7ad"}, - {file = "wrapt-2.0.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:90897ea1cf0679763b62e79657958cd54eae5659f6360fc7d2ccc6f906342183"}, - {file = "wrapt-2.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:50844efc8cdf63b2d90cd3d62d4947a28311e6266ce5235a219d21b195b4ec2c"}, - {file = "wrapt-2.0.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:49989061a9977a8cbd6d20f2efa813f24bf657c6990a42967019ce779a878dbf"}, - {file = "wrapt-2.0.1-cp38-cp38-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:09c7476ab884b74dce081ad9bfd07fe5822d8600abade571cb1f66d5fc915af6"}, - {file = "wrapt-2.0.1-cp38-cp38-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d1a8a09a004ef100e614beec82862d11fc17d601092c3599afd22b1f36e4137e"}, - {file = "wrapt-2.0.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:89a82053b193837bf93c0f8a57ded6e4b6d88033a499dadff5067e912c2a41e9"}, - {file = "wrapt-2.0.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:f26f8e2ca19564e2e1fdbb6a0e47f36e0efbab1acc31e15471fad88f828c75f6"}, - {file = "wrapt-2.0.1-cp38-cp38-win32.whl", hash = "sha256:115cae4beed3542e37866469a8a1f2b9ec549b4463572b000611e9946b86e6f6"}, - {file = "wrapt-2.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:c4012a2bd37059d04f8209916aa771dfb564cccb86079072bdcd48a308b6a5c5"}, - {file = "wrapt-2.0.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:68424221a2dc00d634b54f92441914929c5ffb1c30b3b837343978343a3512a3"}, - {file = "wrapt-2.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6bd1a18f5a797fe740cb3d7a0e853a8ce6461cc62023b630caec80171a6b8097"}, - {file = "wrapt-2.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fb3a86e703868561c5cad155a15c36c716e1ab513b7065bd2ac8ed353c503333"}, - {file = "wrapt-2.0.1-cp39-cp39-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:5dc1b852337c6792aa111ca8becff5bacf576bf4a0255b0f05eb749da6a1643e"}, - {file = "wrapt-2.0.1-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c046781d422f0830de6329fa4b16796096f28a92c8aef3850674442cdcb87b7f"}, - {file = "wrapt-2.0.1-cp39-cp39-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f73f9f7a0ebd0db139253d27e5fc8d2866ceaeef19c30ab5d69dcbe35e1a6981"}, - {file = "wrapt-2.0.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:b667189cf8efe008f55bbda321890bef628a67ab4147ebf90d182f2dadc78790"}, - {file = "wrapt-2.0.1-cp39-cp39-musllinux_1_2_riscv64.whl", hash = "sha256:a9a83618c4f0757557c077ef71d708ddd9847ed66b7cc63416632af70d3e2308"}, - {file = "wrapt-2.0.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:1e9b121e9aeb15df416c2c960b8255a49d44b4038016ee17af03975992d03931"}, - {file = "wrapt-2.0.1-cp39-cp39-win32.whl", hash = "sha256:1f186e26ea0a55f809f232e92cc8556a0977e00183c3ebda039a807a42be1494"}, - {file = "wrapt-2.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:bf4cb76f36be5de950ce13e22e7fdf462b35b04665a12b64f3ac5c1bbbcf3728"}, - {file = "wrapt-2.0.1-cp39-cp39-win_arm64.whl", hash = "sha256:d6cc985b9c8b235bd933990cdbf0f891f8e010b65a3911f7a55179cd7b0fc57b"}, - {file = "wrapt-2.0.1-py3-none-any.whl", hash = "sha256:4d2ce1bf1a48c5277d7969259232b57645aae5686dba1eaeade39442277afbca"}, - {file = "wrapt-2.0.1.tar.gz", hash = "sha256:9c9c635e78497cacb81e84f8b11b23e0aacac7a136e73b8e5b2109a1d9fc468f"}, -] - -[package.extras] -dev = ["pytest", "setuptools"] - [[package]] name = "wsgidav" version = "4.3.3" @@ -6520,6 +6527,26 @@ idna = ">=2.0" multidict = ">=4.0" propcache = ">=0.2.1" +[[package]] +name = "zipp" +version = "3.23.0" +description = "Backport of pathlib-compatible object wrapper for zip files" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "zipp-3.23.0-py3-none-any.whl", hash = "sha256:071652d6115ed432f5ce1d34c336c0adfd6a884660d1e9712a256d3d3bd4b14e"}, + {file = "zipp-3.23.0.tar.gz", hash = "sha256:a07157588a12518c9d4034df3fbbee09c814741a33ff63c05fa29d26a2404166"}, +] + +[package.extras] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\""] +cover = ["pytest-cov"] +doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +enabler = ["pytest-enabler (>=2.2)"] +test = ["big-O", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more_itertools", "pytest (>=6,!=8.1.*)", "pytest-ignore-flaky"] +type = ["pytest-mypy"] + [[package]] name = "zstandard" version = "0.25.0" @@ -6634,5 +6661,5 @@ cffi = ["cffi (>=1.17,<2.0) ; platform_python_implementation != \"PyPy\" and pyt [metadata] lock-version = "2.1" -python-versions = ">=3.12,<4.0" -content-hash = "3ed06e25ab7936d04d523544c24df6e8678eda0e99388ed1e4de0acbb8e3e63e" +python-versions = ">=3.12,<3.15" +content-hash = "c16e750b15c58ccd16f289b20da85a871d7fb4eccee09ccc6cff96c86da21595" diff --git a/pyproject.toml b/pyproject.toml index f9143c6..66f1d02 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -6,7 +6,7 @@ authors = [ {name = "朱潮",email = "zhuchaowe@users.noreply.github.com"} ] readme = "README.md" -requires-python = ">=3.12,<4.0" +requires-python = ">=3.12,<3.15" dependencies = [ "fastapi==0.116.1", "uvicorn==0.35.0", @@ -26,12 +26,12 @@ dependencies = [ "chardet>=5.0.0", "psutil (>=7.1.3,<8.0.0)", "uvloop (>=0.22.1,<0.23.0)", - "deepagents (>=0.4.3,<0.5.0)", + "deepagents (>=0.5.2,<0.6.0)", "langchain-mcp-adapters (>=0.2.1,<0.3.0)", "langchain-openai (>=1.1.1,<2.0.0)", "cachetools (>=6.2.4,<7.0.0)", "langgraph-checkpoint-postgres (>=3.0.0,<4.0.0)", - "deepagents-cli (>=0.0.25,<0.0.26)", + "deepagents-cli (>=0.0.37,<0.1.0)", "mem0ai (>=0.1.50,<0.3.0)", "psycopg2-binary (>=2.9.11,<3.0.0)", "json-repair (>=0.29.0,<0.30.0)", diff --git a/requirements.txt b/requirements.txt index 0479a06..9061209 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,199 +1,202 @@ -aiofiles==24.1.0 ; python_version >= "3.12" and python_version < "4.0" -aiohappyeyeballs==2.6.1 ; python_version >= "3.12" and python_version < "4.0" -aiohttp-retry==2.9.1 ; python_version >= "3.12" and python_version < "4.0" -aiohttp==3.13.1 ; python_version >= "3.12" and python_version < "4.0" -aiosignal==1.4.0 ; python_version >= "3.12" and python_version < "4.0" -aiosqlite==0.22.1 ; python_version >= "3.12" and python_version < "4.0" -annotated-types==0.7.0 ; python_version >= "3.12" and python_version < "4.0" -anthropic==0.84.0 ; python_version >= "3.12" and python_version < "4.0" -anyio==4.11.0 ; python_version >= "3.12" and python_version < "4.0" -attrs==25.4.0 ; python_version >= "3.12" and python_version < "4.0" -backoff==2.2.1 ; python_version >= "3.12" and python_version < "4.0" -beautifulsoup4==4.14.3 ; python_version >= "3.12" and python_version < "4.0" -bracex==2.6 ; python_version >= "3.12" and python_version < "4.0" -cachetools==6.2.4 ; python_version >= "3.12" and python_version < "4.0" -cbor2==5.7.1 ; python_version >= "3.12" and python_version < "4.0" -certifi==2025.10.5 ; python_version >= "3.12" and python_version < "4.0" -cffi==2.0.0 ; python_version >= "3.12" and python_version < "4.0" and platform_python_implementation != "PyPy" -chardet==5.2.0 ; python_version >= "3.12" and python_version < "4.0" -charset-normalizer==3.4.4 ; python_version >= "3.12" and python_version < "4.0" -click==8.3.0 ; python_version >= "3.12" and python_version < "4.0" -colorama==0.4.6 ; python_version >= "3.12" and python_version < "4.0" and platform_system == "Windows" -croniter==3.0.4 ; python_version >= "3.12" and python_version < "4.0" -cryptography==46.0.5 ; python_version >= "3.12" and python_version < "4.0" -daytona-api-client-async==0.127.0 ; python_version >= "3.12" and python_version < "4.0" -daytona-api-client==0.127.0 ; python_version >= "3.12" and python_version < "4.0" -daytona-toolbox-api-client-async==0.127.0 ; python_version >= "3.12" and python_version < "4.0" -daytona-toolbox-api-client==0.127.0 ; python_version >= "3.12" and python_version < "4.0" -daytona==0.127.0 ; python_version >= "3.12" and python_version < "4.0" -deepagents-cli==0.0.25 ; python_version >= "3.12" and python_version < "4.0" -deepagents==0.4.3 ; python_version >= "3.12" and python_version < "4.0" -defusedxml==0.7.1 ; python_version >= "3.12" and python_version < "4.0" -deprecated==1.3.1 ; python_version >= "3.12" and python_version < "4.0" -distro==1.9.0 ; python_version >= "3.12" and python_version < "4.0" -docstring-parser==0.17.0 ; python_version >= "3.12" and python_version < "4.0" -environs==14.5.0 ; python_version >= "3.12" and python_version < "4.0" -et-xmlfile==2.0.0 ; python_version >= "3.12" and python_version < "4.0" -fastapi==0.116.1 ; python_version >= "3.12" and python_version < "4.0" -filelock==3.20.0 ; python_version >= "3.12" and python_version < "4.0" -filetype==1.2.0 ; python_version >= "3.12" and python_version < "4.0" -frozenlist==1.8.0 ; python_version >= "3.12" and python_version < "4.0" -fsspec==2025.9.0 ; python_version >= "3.12" and python_version < "4.0" -google-auth==2.48.0 ; python_version >= "3.12" and python_version < "4.0" -google-genai==1.65.0 ; python_version >= "3.12" and python_version < "4.0" -greenlet==3.3.0 ; python_version >= "3.12" and python_version < "4.0" and (platform_machine == "aarch64" or platform_machine == "ppc64le" or platform_machine == "x86_64" or platform_machine == "amd64" or platform_machine == "AMD64" or platform_machine == "win32" or platform_machine == "WIN32") -grpcio-tools==1.71.2 ; python_version >= "3.13" and python_version < "4.0" -grpcio==1.76.0 ; python_version >= "3.12" and python_version < "4.0" -grpclib==0.4.8 ; python_version >= "3.12" and python_version < "4.0" -h11==0.16.0 ; python_version >= "3.12" and python_version < "4.0" -h2==4.3.0 ; python_version >= "3.12" and python_version < "4.0" -hf-xet==1.1.10 ; python_version >= "3.12" and python_version < "4.0" and (platform_machine == "x86_64" or platform_machine == "amd64" or platform_machine == "arm64" or platform_machine == "aarch64") -hpack==4.1.0 ; python_version >= "3.12" and python_version < "4.0" -httpcore==1.0.9 ; python_version >= "3.12" and python_version < "4.0" -httpx-sse==0.4.3 ; python_version >= "3.12" and python_version < "4.0" -httpx==0.28.1 ; python_version >= "3.12" and python_version < "4.0" -huey==2.5.3 ; python_version >= "3.12" and python_version < "4.0" -huggingface-hub==0.35.3 ; python_version >= "3.12" and python_version < "4.0" -hyperframe==6.1.0 ; python_version >= "3.12" and python_version < "4.0" -idna==3.11 ; python_version >= "3.12" and python_version < "4.0" -jinja2==3.1.6 ; python_version >= "3.12" and python_version < "4.0" -jiter==0.11.1 ; python_version >= "3.12" and python_version < "4.0" -joblib==1.5.2 ; python_version >= "3.12" and python_version < "4.0" -json-repair==0.29.10 ; python_version >= "3.12" and python_version < "4.0" -json5==0.13.0 ; python_version >= "3.12" and python_version < "4.0" -jsonpatch==1.33 ; python_version >= "3.12" and python_version < "4.0" -jsonpointer==3.0.0 ; python_version >= "3.12" and python_version < "4.0" -jsonschema-specifications==2025.9.1 ; python_version >= "3.12" and python_version < "4.0" -jsonschema==4.25.1 ; python_version >= "3.12" and python_version < "4.0" -langchain-anthropic==1.3.4 ; python_version >= "3.12" and python_version < "4.0" -langchain-core==1.2.16 ; python_version >= "3.12" and python_version < "4.0" -langchain-google-genai==4.2.1 ; python_version >= "3.12" and python_version < "4.0" -langchain-mcp-adapters==0.2.1 ; python_version >= "3.12" and python_version < "4.0" -langchain-openai==1.1.9 ; python_version >= "3.12" and python_version < "4.0" -langchain==1.2.10 ; python_version >= "3.12" and python_version < "4.0" -langgraph-checkpoint-postgres==3.0.4 ; python_version >= "3.12" and python_version < "4.0" -langgraph-checkpoint-sqlite==3.0.3 ; python_version >= "3.12" and python_version < "4.0" -langgraph-checkpoint==4.0.1 ; python_version >= "3.12" and python_version < "4.0" -langgraph-prebuilt==1.0.8 ; python_version >= "3.12" and python_version < "4.0" -langgraph-sdk==0.3.3 ; python_version >= "3.12" and python_version < "4.0" -langgraph==1.0.10 ; python_version >= "3.12" and python_version < "4.0" -langsmith==0.7.9 ; python_version >= "3.12" and python_version < "4.0" -linkify-it-py==2.1.0 ; python_version >= "3.12" and python_version < "4.0" -markdown-it-py==4.0.0 ; python_version >= "3.12" and python_version < "4.0" -markdownify==1.2.2 ; python_version >= "3.12" and python_version < "4.0" -markupsafe==3.0.3 ; python_version >= "3.12" and python_version < "4.0" -marshmallow==4.1.1 ; python_version >= "3.12" and python_version < "4.0" -mcp==1.12.4 ; python_version >= "3.12" and python_version < "4.0" -mdit-py-plugins==0.5.0 ; python_version >= "3.12" and python_version < "4.0" -mdurl==0.1.2 ; python_version >= "3.12" and python_version < "4.0" -mem0ai==0.1.116 ; python_version >= "3.12" and python_version < "4.0" -modal==1.2.1 ; python_version >= "3.12" and python_version < "4.0" -mpmath==1.3.0 ; python_version >= "3.12" and python_version < "4.0" -multidict==6.7.0 ; python_version >= "3.12" and python_version < "4.0" -multipart==1.3.0 ; python_version >= "3.12" and python_version < "4.0" -networkx==3.5 ; python_version >= "3.12" and python_version < "4.0" -numpy==1.26.4 ; python_version >= "3.12" and python_version < "4.0" -nvidia-cublas-cu12==12.1.3.1 ; python_version >= "3.12" and python_version < "4.0" and platform_system == "Linux" and platform_machine == "x86_64" -nvidia-cuda-cupti-cu12==12.1.105 ; python_version >= "3.12" and python_version < "4.0" and platform_system == "Linux" and platform_machine == "x86_64" -nvidia-cuda-nvrtc-cu12==12.1.105 ; python_version >= "3.12" and python_version < "4.0" and platform_system == "Linux" and platform_machine == "x86_64" -nvidia-cuda-runtime-cu12==12.1.105 ; python_version >= "3.12" and python_version < "4.0" and platform_system == "Linux" and platform_machine == "x86_64" -nvidia-cudnn-cu12==8.9.2.26 ; python_version >= "3.12" and python_version < "4.0" and platform_system == "Linux" and platform_machine == "x86_64" -nvidia-cufft-cu12==11.0.2.54 ; python_version >= "3.12" and python_version < "4.0" and platform_system == "Linux" and platform_machine == "x86_64" -nvidia-curand-cu12==10.3.2.106 ; python_version >= "3.12" and python_version < "4.0" and platform_system == "Linux" and platform_machine == "x86_64" -nvidia-cusolver-cu12==11.4.5.107 ; python_version >= "3.12" and python_version < "4.0" and platform_system == "Linux" and platform_machine == "x86_64" -nvidia-cusparse-cu12==12.1.0.106 ; python_version >= "3.12" and python_version < "4.0" and platform_system == "Linux" and platform_machine == "x86_64" -nvidia-nccl-cu12==2.19.3 ; python_version >= "3.12" and python_version < "4.0" and platform_system == "Linux" and platform_machine == "x86_64" -nvidia-nvjitlink-cu12==12.9.86 ; python_version >= "3.12" and python_version < "4.0" and platform_system == "Linux" and platform_machine == "x86_64" -nvidia-nvtx-cu12==12.1.105 ; python_version >= "3.12" and python_version < "4.0" and platform_system == "Linux" and platform_machine == "x86_64" -obstore==0.7.3 ; python_version >= "3.12" and python_version < "4.0" -openai==2.5.0 ; python_version >= "3.12" and python_version < "4.0" -openpyxl==3.1.5 ; python_version >= "3.12" and python_version < "4.0" -orjson==3.11.5 ; python_version >= "3.12" and python_version < "4.0" -ormsgpack==1.12.0 ; python_version >= "3.12" and python_version < "4.0" -packaging==25.0 ; python_version >= "3.12" and python_version < "4.0" -pandas==2.3.3 ; python_version >= "3.12" and python_version < "4.0" -pillow==12.0.0 ; python_version >= "3.12" and python_version < "4.0" -platformdirs==4.9.2 ; python_version >= "3.12" and python_version < "4.0" -portalocker==2.10.1 ; python_version >= "3.13" and python_version < "4.0" +agent-client-protocol==0.9.0 ; python_version >= "3.12" and python_version < "3.15" +aiofiles==24.1.0 ; python_version >= "3.12" and python_version < "3.15" +aiohappyeyeballs==2.6.1 ; python_version >= "3.12" and python_version < "3.15" +aiohttp==3.13.1 ; python_version >= "3.12" and python_version < "3.15" +aiosignal==1.4.0 ; python_version >= "3.12" and python_version < "3.15" +aiosqlite==0.22.1 ; python_version >= "3.12" and python_version < "3.15" +annotated-types==0.7.0 ; python_version >= "3.12" and python_version < "3.15" +anthropic==0.94.0 ; python_version >= "3.12" and python_version < "3.15" +anyio==4.11.0 ; python_version >= "3.12" and python_version < "3.15" +attrs==25.4.0 ; python_version >= "3.12" and python_version < "3.15" +backoff==2.2.1 ; python_version >= "3.12" and python_version < "3.15" +beautifulsoup4==4.14.3 ; python_version >= "3.12" and python_version < "3.15" +blockbuster==1.5.26 ; python_version >= "3.12" and python_version < "3.15" +bracex==2.6 ; python_version >= "3.12" and python_version < "3.15" +cachetools==6.2.4 ; python_version >= "3.12" and python_version < "3.15" +certifi==2025.10.5 ; python_version >= "3.12" and python_version < "3.15" +cffi==2.0.0 ; python_version >= "3.12" and python_version < "3.15" and platform_python_implementation != "PyPy" +chardet==5.2.0 ; python_version >= "3.12" and python_version < "3.15" +charset-normalizer==3.4.4 ; python_version >= "3.12" and python_version < "3.15" +click==8.3.0 ; python_version >= "3.12" and python_version < "3.15" +cloudpickle==3.1.2 ; python_version >= "3.12" and python_version < "3.15" +colorama==0.4.6 ; python_version >= "3.12" and python_version < "3.15" and platform_system == "Windows" +croniter==3.0.4 ; python_version >= "3.12" and python_version < "3.15" +cryptography==46.0.5 ; python_version >= "3.12" and python_version < "3.15" +deepagents-acp==0.0.5 ; python_version >= "3.12" and python_version < "3.15" +deepagents-cli==0.0.37 ; python_version >= "3.12" and python_version < "3.15" +deepagents==0.5.2 ; python_version >= "3.12" and python_version < "3.15" +defusedxml==0.7.1 ; python_version >= "3.12" and python_version < "3.15" +distro==1.9.0 ; python_version >= "3.12" and python_version < "3.15" +docstring-parser==0.17.0 ; python_version >= "3.12" and python_version < "3.15" +et-xmlfile==2.0.0 ; python_version >= "3.12" and python_version < "3.15" +fastapi==0.116.1 ; python_version >= "3.12" and python_version < "3.15" +filelock==3.20.0 ; python_version >= "3.12" and python_version < "3.15" +filetype==1.2.0 ; python_version >= "3.12" and python_version < "3.15" +forbiddenfruit==0.1.4 ; python_version >= "3.12" and python_version < "3.15" and implementation_name == "cpython" +frozenlist==1.8.0 ; python_version >= "3.12" and python_version < "3.15" +fsspec==2025.9.0 ; python_version >= "3.12" and python_version < "3.15" +google-auth==2.48.0 ; python_version >= "3.12" and python_version < "3.15" +google-genai==1.65.0 ; python_version >= "3.12" and python_version < "3.15" +googleapis-common-protos==1.74.0 ; python_version >= "3.12" and python_version < "3.15" +greenlet==3.3.0 ; python_version >= "3.12" and python_version < "3.15" and (platform_machine == "aarch64" or platform_machine == "ppc64le" or platform_machine == "x86_64" or platform_machine == "amd64" or platform_machine == "AMD64" or platform_machine == "win32" or platform_machine == "WIN32") +grpcio-health-checking==1.78.0 ; python_version >= "3.12" and python_version < "3.15" +grpcio-tools==1.78.0 ; python_version >= "3.12" and python_version < "3.15" +grpcio==1.78.0 ; python_version >= "3.12" and python_version < "3.15" +h11==0.16.0 ; python_version >= "3.12" and python_version < "3.15" +h2==4.3.0 ; python_version >= "3.12" and python_version < "3.15" +hf-xet==1.1.10 ; python_version >= "3.12" and python_version < "3.15" and (platform_machine == "x86_64" or platform_machine == "amd64" or platform_machine == "arm64" or platform_machine == "aarch64") +hpack==4.1.0 ; python_version >= "3.12" and python_version < "3.15" +httpcore==1.0.9 ; python_version >= "3.12" and python_version < "3.15" +httptools==0.7.1 ; python_version >= "3.12" and python_version < "3.15" and platform_system != "Windows" +httpx-sse==0.4.3 ; python_version >= "3.12" and python_version < "3.15" +httpx==0.28.1 ; python_version >= "3.12" and python_version < "3.15" +huey==2.5.3 ; python_version >= "3.12" and python_version < "3.15" +huggingface-hub==0.35.3 ; python_version >= "3.12" and python_version < "3.15" +hyperframe==6.1.0 ; python_version >= "3.12" and python_version < "3.15" +idna==3.11 ; python_version >= "3.12" and python_version < "3.15" +importlib-metadata==8.7.1 ; python_version >= "3.12" and python_version < "3.15" +jinja2==3.1.6 ; python_version >= "3.12" and python_version < "3.15" +jiter==0.11.1 ; python_version >= "3.12" and python_version < "3.15" +joblib==1.5.2 ; python_version >= "3.12" and python_version < "3.15" +json-repair==0.29.10 ; python_version >= "3.12" and python_version < "3.15" +json5==0.13.0 ; python_version >= "3.12" and python_version < "3.15" +jsonpatch==1.33 ; python_version >= "3.12" and python_version < "3.15" +jsonpointer==3.0.0 ; python_version >= "3.12" and python_version < "3.15" +jsonschema-rs==0.44.1 ; python_version >= "3.12" and python_version < "3.15" +jsonschema-specifications==2025.9.1 ; python_version >= "3.12" and python_version < "3.15" +jsonschema==4.25.1 ; python_version >= "3.12" and python_version < "3.15" +langchain-anthropic==1.4.0 ; python_version >= "3.12" and python_version < "3.15" +langchain-core==1.2.28 ; python_version >= "3.12" and python_version < "3.15" +langchain-google-genai==4.2.1 ; python_version >= "3.12" and python_version < "3.15" +langchain-mcp-adapters==0.2.1 ; python_version >= "3.12" and python_version < "3.15" +langchain-openai==1.1.12 ; python_version >= "3.12" and python_version < "3.15" +langchain==1.2.15 ; python_version >= "3.12" and python_version < "3.15" +langgraph-api==0.7.100 ; python_version >= "3.12" and python_version < "3.15" +langgraph-checkpoint-postgres==3.0.4 ; python_version >= "3.12" and python_version < "3.15" +langgraph-checkpoint-sqlite==3.0.3 ; python_version >= "3.12" and python_version < "3.15" +langgraph-checkpoint==4.0.1 ; python_version >= "3.12" and python_version < "3.15" +langgraph-cli==0.4.21 ; python_version >= "3.12" and python_version < "3.15" +langgraph-prebuilt==1.0.9 ; python_version >= "3.12" and python_version < "3.15" +langgraph-runtime-inmem==0.27.3 ; python_version >= "3.12" and python_version < "3.15" +langgraph-sdk==0.3.13 ; python_version >= "3.12" and python_version < "3.15" +langgraph==1.1.6 ; python_version >= "3.12" and python_version < "3.15" +langsmith==0.7.9 ; python_version >= "3.12" and python_version < "3.15" +linkify-it-py==2.1.0 ; python_version >= "3.12" and python_version < "3.15" +markdown-it-py==4.0.0 ; python_version >= "3.12" and python_version < "3.15" +markdownify==1.2.2 ; python_version >= "3.12" and python_version < "3.15" +markupsafe==3.0.3 ; python_version >= "3.12" and python_version < "3.15" +mcp==1.12.4 ; python_version >= "3.12" and python_version < "3.15" +mdit-py-plugins==0.5.0 ; python_version >= "3.12" and python_version < "3.15" +mdurl==0.1.2 ; python_version >= "3.12" and python_version < "3.15" +mem0ai==0.1.115 ; python_version >= "3.12" and python_version < "3.15" +mpmath==1.3.0 ; python_version >= "3.12" and python_version < "3.15" +multidict==6.7.0 ; python_version >= "3.12" and python_version < "3.15" +networkx==3.5 ; python_version >= "3.12" and python_version < "3.15" +numpy==1.26.4 ; python_version >= "3.12" and python_version < "3.15" +nvidia-cublas-cu12==12.1.3.1 ; python_version >= "3.12" and python_version < "3.15" and platform_system == "Linux" and platform_machine == "x86_64" +nvidia-cuda-cupti-cu12==12.1.105 ; python_version >= "3.12" and python_version < "3.15" and platform_system == "Linux" and platform_machine == "x86_64" +nvidia-cuda-nvrtc-cu12==12.1.105 ; python_version >= "3.12" and python_version < "3.15" and platform_system == "Linux" and platform_machine == "x86_64" +nvidia-cuda-runtime-cu12==12.1.105 ; python_version >= "3.12" and python_version < "3.15" and platform_system == "Linux" and platform_machine == "x86_64" +nvidia-cudnn-cu12==8.9.2.26 ; python_version >= "3.12" and python_version < "3.15" and platform_system == "Linux" and platform_machine == "x86_64" +nvidia-cufft-cu12==11.0.2.54 ; python_version >= "3.12" and python_version < "3.15" and platform_system == "Linux" and platform_machine == "x86_64" +nvidia-curand-cu12==10.3.2.106 ; python_version >= "3.12" and python_version < "3.15" and platform_system == "Linux" and platform_machine == "x86_64" +nvidia-cusolver-cu12==11.4.5.107 ; python_version >= "3.12" and python_version < "3.15" and platform_system == "Linux" and platform_machine == "x86_64" +nvidia-cusparse-cu12==12.1.0.106 ; python_version >= "3.12" and python_version < "3.15" and platform_system == "Linux" and platform_machine == "x86_64" +nvidia-nccl-cu12==2.19.3 ; python_version >= "3.12" and python_version < "3.15" and platform_system == "Linux" and platform_machine == "x86_64" +nvidia-nvjitlink-cu12==12.9.86 ; python_version >= "3.12" and python_version < "3.15" and platform_system == "Linux" and platform_machine == "x86_64" +nvidia-nvtx-cu12==12.1.105 ; python_version >= "3.12" and python_version < "3.15" and platform_system == "Linux" and platform_machine == "x86_64" +openai==2.31.0 ; python_version >= "3.12" and python_version < "3.15" +openpyxl==3.1.5 ; python_version >= "3.12" and python_version < "3.15" +opentelemetry-api==1.41.0 ; python_version >= "3.12" and python_version < "3.15" +opentelemetry-exporter-otlp-proto-common==1.41.0 ; python_version >= "3.12" and python_version < "3.15" +opentelemetry-exporter-otlp-proto-http==1.41.0 ; python_version >= "3.12" and python_version < "3.15" +opentelemetry-proto==1.41.0 ; python_version >= "3.12" and python_version < "3.15" +opentelemetry-sdk==1.41.0 ; python_version >= "3.12" and python_version < "3.15" +opentelemetry-semantic-conventions==0.62b0 ; python_version >= "3.12" and python_version < "3.15" +orjson==3.11.5 ; python_version >= "3.12" and python_version < "3.15" +ormsgpack==1.12.0 ; python_version >= "3.12" and python_version < "3.15" +packaging==25.0 ; python_version >= "3.12" and python_version < "3.15" +pandas==2.3.3 ; python_version >= "3.12" and python_version < "3.15" +pathspec==1.0.4 ; python_version >= "3.12" and python_version < "3.15" +pillow==12.0.0 ; python_version >= "3.12" and python_version < "3.15" +platformdirs==4.9.2 ; python_version >= "3.12" and python_version < "3.15" +portalocker==2.10.1 ; python_version >= "3.13" and python_version < "3.15" portalocker==3.2.0 ; python_version == "3.12" -posthog==7.6.0 ; python_version >= "3.12" and python_version < "4.0" -prompt-toolkit==3.0.52 ; python_version >= "3.12" and python_version < "4.0" -propcache==0.4.1 ; python_version >= "3.12" and python_version < "4.0" -protobuf==5.29.5 ; python_version >= "3.12" and python_version < "4.0" -psutil==7.1.3 ; python_version >= "3.12" and python_version < "4.0" -psycopg-pool==3.3.0 ; python_version >= "3.12" and python_version < "4.0" -psycopg2-binary==2.9.11 ; python_version >= "3.12" and python_version < "4.0" -psycopg==3.3.2 ; python_version >= "3.12" and python_version < "4.0" -pyasn1-modules==0.4.2 ; python_version >= "3.12" and python_version < "4.0" -pyasn1==0.6.2 ; python_version >= "3.12" and python_version < "4.0" -pycparser==3.0 ; python_version >= "3.12" and python_version < "4.0" and platform_python_implementation != "PyPy" and implementation_name != "PyPy" -pydantic-core==2.27.2 ; python_version >= "3.12" and python_version < "4.0" -pydantic-settings==2.11.0 ; python_version >= "3.12" and python_version < "4.0" -pydantic==2.10.5 ; python_version >= "3.12" and python_version < "4.0" -pygments==2.19.2 ; python_version >= "3.12" and python_version < "4.0" -pyperclip==1.11.0 ; python_version >= "3.12" and python_version < "4.0" -python-dateutil==2.8.2 ; python_version >= "3.12" and python_version < "4.0" -python-dotenv==1.1.1 ; python_version >= "3.12" and python_version < "4.0" -python-multipart==0.0.20 ; python_version >= "3.12" and python_version < "4.0" -pytz==2025.2 ; python_version >= "3.12" and python_version < "4.0" -pywin32==311 ; python_version >= "3.12" and python_version < "4.0" and (sys_platform == "win32" or platform_system == "Windows") -pyyaml==6.0.3 ; python_version >= "3.12" and python_version < "4.0" -qdrant-client==1.12.1 ; python_version >= "3.13" and python_version < "4.0" +posthog==7.6.0 ; python_version >= "3.12" and python_version < "3.15" +prompt-toolkit==3.0.52 ; python_version >= "3.12" and python_version < "3.15" +propcache==0.4.1 ; python_version >= "3.12" and python_version < "3.15" +protobuf==6.33.6 ; python_version >= "3.12" and python_version < "3.15" +psutil==7.1.3 ; python_version >= "3.12" and python_version < "3.15" +psycopg-pool==3.3.0 ; python_version >= "3.12" and python_version < "3.15" +psycopg2-binary==2.9.11 ; python_version >= "3.12" and python_version < "3.15" +psycopg==3.3.2 ; python_version >= "3.12" and python_version < "3.15" +pyasn1-modules==0.4.2 ; python_version >= "3.12" and python_version < "3.15" +pyasn1==0.6.2 ; python_version >= "3.12" and python_version < "3.15" +pycparser==3.0 ; python_version >= "3.12" and python_version < "3.15" and platform_python_implementation != "PyPy" and implementation_name != "PyPy" +pydantic-core==2.27.2 ; python_version >= "3.12" and python_version < "3.15" +pydantic-settings==2.11.0 ; python_version >= "3.12" and python_version < "3.15" +pydantic==2.10.5 ; python_version >= "3.12" and python_version < "3.15" +pygments==2.19.2 ; python_version >= "3.12" and python_version < "3.15" +pyjwt==2.12.1 ; python_version >= "3.12" and python_version < "3.15" +pyperclip==1.11.0 ; python_version >= "3.12" and python_version < "3.15" +python-dateutil==2.8.2 ; python_version >= "3.12" and python_version < "3.15" +python-dotenv==1.2.2 ; python_version >= "3.12" and python_version < "3.15" +python-multipart==0.0.20 ; python_version >= "3.12" and python_version < "3.15" +pytz==2025.2 ; python_version >= "3.12" and python_version < "3.15" +pywin32==311 ; python_version >= "3.12" and python_version < "3.15" and (sys_platform == "win32" or platform_system == "Windows") +pyyaml==6.0.3 ; python_version >= "3.12" and python_version < "3.15" +qdrant-client==1.12.1 ; python_version >= "3.13" and python_version < "3.15" qdrant-client==1.16.2 ; python_version == "3.12" -referencing==0.37.0 ; python_version >= "3.12" and python_version < "4.0" -regex==2025.9.18 ; python_version >= "3.12" and python_version < "4.0" -requests-toolbelt==1.0.0 ; python_version >= "3.12" and python_version < "4.0" -requests==2.32.5 ; python_version >= "3.12" and python_version < "4.0" -rich==14.2.0 ; python_version >= "3.12" and python_version < "4.0" -rpds-py==0.27.1 ; python_version >= "3.12" and python_version < "4.0" -rsa==4.9.1 ; python_version >= "3.12" and python_version < "4.0" -runloop-api-client==1.2.0 ; python_version >= "3.12" and python_version < "4.0" -safetensors==0.6.2 ; python_version >= "3.12" and python_version < "4.0" -scikit-learn==1.7.2 ; python_version >= "3.12" and python_version < "4.0" -scipy==1.16.2 ; python_version >= "3.12" and python_version < "4.0" -sentence-transformers==5.1.1 ; python_version >= "3.12" and python_version < "4.0" -setuptools==80.9.0 ; python_version >= "3.13" and python_version < "4.0" -shellingham==1.5.4 ; python_version >= "3.12" and python_version < "4.0" -six==1.17.0 ; python_version >= "3.12" and python_version < "4.0" -sniffio==1.3.1 ; python_version >= "3.12" and python_version < "4.0" -soupsieve==2.8.1 ; python_version >= "3.12" and python_version < "4.0" -sqlalchemy==2.0.45 ; python_version >= "3.12" and python_version < "4.0" -sqlite-vec==0.1.6 ; python_version >= "3.12" and python_version < "4.0" -sse-starlette==3.0.2 ; python_version >= "3.12" and python_version < "4.0" -starlette==0.47.3 ; python_version >= "3.12" and python_version < "4.0" -sympy==1.14.0 ; python_version >= "3.12" and python_version < "4.0" -synchronicity==0.10.5 ; python_version >= "3.12" and python_version < "4.0" -tavily-python==0.7.22 ; python_version >= "3.12" and python_version < "4.0" -tenacity==9.1.2 ; python_version >= "3.12" and python_version < "4.0" -textual-autocomplete==4.0.6 ; python_version >= "3.12" and python_version < "4.0" -textual==8.0.0 ; python_version >= "3.12" and python_version < "4.0" -threadpoolctl==3.6.0 ; python_version >= "3.12" and python_version < "4.0" -tiktoken==0.12.0 ; python_version >= "3.12" and python_version < "4.0" -tokenizers==0.22.1 ; python_version >= "3.12" and python_version < "4.0" -toml==0.10.2 ; python_version >= "3.12" and python_version < "4.0" -tomli-w==1.2.0 ; python_version >= "3.12" and python_version < "4.0" -torch==2.2.0 ; python_version >= "3.12" and python_version < "4.0" -tqdm==4.67.1 ; python_version >= "3.12" and python_version < "4.0" -transformers==4.57.1 ; python_version >= "3.12" and python_version < "4.0" -triton==2.2.0 ; python_version >= "3.12" and python_version < "4.0" and platform_system == "Linux" and platform_machine == "x86_64" -typer==0.20.1 ; python_version >= "3.12" and python_version < "4.0" -types-certifi==2021.10.8.3 ; python_version >= "3.12" and python_version < "4.0" -types-toml==0.10.8.20240310 ; python_version >= "3.12" and python_version < "4.0" -typing-extensions==4.15.0 ; python_version >= "3.12" and python_version < "4.0" -typing-inspection==0.4.2 ; python_version >= "3.12" and python_version < "4.0" -tzdata==2025.2 ; python_version >= "3.12" and python_version < "4.0" -uc-micro-py==2.0.0 ; python_version >= "3.12" and python_version < "4.0" -urllib3==2.5.0 ; python_version >= "3.12" and python_version < "4.0" -uuid-utils==0.12.0 ; python_version >= "3.12" and python_version < "4.0" -uvicorn==0.35.0 ; python_version >= "3.12" and python_version < "4.0" -uvloop==0.22.1 ; python_version >= "3.12" and python_version < "4.0" -watchfiles==1.1.1 ; python_version >= "3.12" and python_version < "4.0" -wcmatch==10.1 ; python_version >= "3.12" and python_version < "4.0" -wcwidth==0.2.14 ; python_version >= "3.12" and python_version < "4.0" -websockets==15.0.1 ; python_version >= "3.12" and python_version < "4.0" -wrapt==2.0.1 ; python_version >= "3.12" and python_version < "4.0" -wsgidav==4.3.3 ; python_version >= "3.12" and python_version < "4.0" -xlrd==2.0.2 ; python_version >= "3.12" and python_version < "4.0" -xxhash==3.6.0 ; python_version >= "3.12" and python_version < "4.0" -yarl==1.22.0 ; python_version >= "3.12" and python_version < "4.0" -zstandard==0.25.0 ; python_version >= "3.12" and python_version < "4.0" +referencing==0.37.0 ; python_version >= "3.12" and python_version < "3.15" +regex==2025.9.18 ; python_version >= "3.12" and python_version < "3.15" +requests-toolbelt==1.0.0 ; python_version >= "3.12" and python_version < "3.15" +requests==2.32.5 ; python_version >= "3.12" and python_version < "3.15" +rich==14.2.0 ; python_version >= "3.12" and python_version < "3.15" +rpds-py==0.27.1 ; python_version >= "3.12" and python_version < "3.15" +rsa==4.9.1 ; python_version >= "3.12" and python_version < "3.15" +safetensors==0.6.2 ; python_version >= "3.12" and python_version < "3.15" +scikit-learn==1.7.2 ; python_version >= "3.12" and python_version < "3.15" +scipy==1.16.2 ; python_version >= "3.12" and python_version < "3.15" +sentence-transformers==5.1.1 ; python_version >= "3.12" and python_version < "3.15" +setuptools==80.9.0 ; python_version >= "3.12" and python_version < "3.15" +six==1.17.0 ; python_version >= "3.12" and python_version < "3.15" +sniffio==1.3.1 ; python_version >= "3.12" and python_version < "3.15" +soupsieve==2.8.1 ; python_version >= "3.12" and python_version < "3.15" +sqlalchemy==2.0.45 ; python_version >= "3.12" and python_version < "3.15" +sqlite-vec==0.1.6 ; python_version >= "3.12" and python_version < "3.15" +sse-starlette==3.0.2 ; python_version >= "3.12" and python_version < "3.15" +starlette==0.47.3 ; python_version >= "3.12" and python_version < "3.15" +structlog==25.5.0 ; python_version >= "3.12" and python_version < "3.15" +sympy==1.14.0 ; python_version >= "3.12" and python_version < "3.15" +tavily-python==0.7.22 ; python_version >= "3.12" and python_version < "3.15" +tenacity==9.1.2 ; python_version >= "3.12" and python_version < "3.15" +textual-autocomplete==4.0.6 ; python_version >= "3.12" and python_version < "3.15" +textual-speedups==0.2.1 ; python_version >= "3.12" and python_version < "3.15" +textual==8.0.0 ; python_version >= "3.12" and python_version < "3.15" +threadpoolctl==3.6.0 ; python_version >= "3.12" and python_version < "3.15" +tiktoken==0.12.0 ; python_version >= "3.12" and python_version < "3.15" +tokenizers==0.22.1 ; python_version >= "3.12" and python_version < "3.15" +tomli-w==1.2.0 ; python_version >= "3.12" and python_version < "3.15" +torch==2.2.0 ; python_version >= "3.12" and python_version < "3.15" +tqdm==4.67.1 ; python_version >= "3.12" and python_version < "3.15" +transformers==4.57.1 ; python_version >= "3.12" and python_version < "3.15" +triton==2.2.0 ; python_version >= "3.12" and python_version < "3.15" and platform_system == "Linux" and platform_machine == "x86_64" +truststore==0.10.4 ; python_version >= "3.12" and python_version < "3.15" +typing-extensions==4.15.0 ; python_version >= "3.12" and python_version < "3.15" +typing-inspection==0.4.2 ; python_version >= "3.12" and python_version < "3.15" +tzdata==2025.2 ; python_version >= "3.12" and python_version < "3.15" +uc-micro-py==2.0.0 ; python_version >= "3.12" and python_version < "3.15" +urllib3==2.5.0 ; python_version >= "3.12" and python_version < "3.15" +uuid-utils==0.12.0 ; python_version >= "3.12" and python_version < "3.15" +uvicorn==0.35.0 ; python_version >= "3.12" and python_version < "3.15" +uvloop==0.22.1 ; python_version >= "3.12" and python_version < "3.15" +watchfiles==1.1.1 ; python_version >= "3.12" and python_version < "3.15" +wcmatch==10.1 ; python_version >= "3.12" and python_version < "3.15" +wcwidth==0.2.14 ; python_version >= "3.12" and python_version < "3.15" +websockets==15.0.1 ; python_version >= "3.12" and python_version < "3.15" +wsgidav==4.3.3 ; python_version >= "3.12" and python_version < "3.15" +xlrd==2.0.2 ; python_version >= "3.12" and python_version < "3.15" +xxhash==3.6.0 ; python_version >= "3.12" and python_version < "3.15" +yarl==1.22.0 ; python_version >= "3.12" and python_version < "3.15" +zipp==3.23.0 ; python_version >= "3.12" and python_version < "3.15" +zstandard==0.25.0 ; python_version >= "3.12" and python_version < "3.15" From 7d22f0b34da91bd04c0e29af610188f116975ba2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9C=B1=E6=BD=AE?= Date: Sat, 11 Apr 2026 11:48:18 +0800 Subject: [PATCH 11/12] =?UTF-8?q?=E7=A6=81=E6=AD=A2=E8=B7=AF=E5=BE=84?= =?UTF-8?q?=E7=A9=BF=E8=B6=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- agent/deep_assistant.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/agent/deep_assistant.py b/agent/deep_assistant.py index 0db824e..ceb0809 100644 --- a/agent/deep_assistant.py +++ b/agent/deep_assistant.py @@ -405,7 +405,7 @@ def create_custom_cli_agent( # Use LocalShellBackend for filesystem + shell execution backend = LocalShellBackend( root_dir=workspace_root, - virtual_mode=False, + virtual_mode=True, inherit_env=True, env=final_shell_env, ) From a9044c6d2e86b75b90beb98329aed071c560a4ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9C=B1=E6=BD=AE?= Date: Sat, 11 Apr 2026 13:31:45 +0800 Subject: [PATCH 12/12] =?UTF-8?q?TOOL=5FOUTPUT=5FMAX=5FLENGTH=20=E6=89=A9?= =?UTF-8?q?=E5=B1=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- utils/settings.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/utils/settings.py b/utils/settings.py index 61c38bc..8f2c202 100644 --- a/utils/settings.py +++ b/utils/settings.py @@ -12,7 +12,7 @@ MAX_OUTPUT_TOKENS = int(os.getenv("MAX_OUTPUT_TOKENS", 8000)) # 可选参数 # Summarization Settings -SUMMARIZATION_MAX_TOKENS = int(MAX_CONTEXT_TOKENS/3) +SUMMARIZATION_MAX_TOKENS = int(MAX_CONTEXT_TOKENS/2) SUMMARIZATION_TOKENS_TO_KEEP = int(SUMMARIZATION_MAX_TOKENS/3) DEFAULT_TRIM_TOKEN_LIMIT = SUMMARIZATION_MAX_TOKENS - SUMMARIZATION_TOKENS_TO_KEEP + 5000 @@ -32,7 +32,7 @@ TOKENIZERS_PARALLELISM = os.getenv("TOKENIZERS_PARALLELISM", "true") SENTENCE_TRANSFORMER_MODEL = os.getenv("SENTENCE_TRANSFORMER_MODEL", "TaylorAI/gte-tiny") # Tool Output Length Control Settings -TOOL_OUTPUT_MAX_LENGTH = int(SUMMARIZATION_MAX_TOKENS/4) +TOOL_OUTPUT_MAX_LENGTH = SUMMARIZATION_MAX_TOKENS TOOL_OUTPUT_TRUNCATION_STRATEGY = os.getenv("TOOL_OUTPUT_TRUNCATION_STRATEGY", "smart") # THINKING ENABLE