- ⚙️ SwarmCore 正在冲 M5 里程碑(v1 候选基线):Temporal 持久化编排 + PostgreSQL 单一事实源 + OPA/Vault 治理
- 💼 在面壁智能实习,参与 OpenBMB 的 Agent 产品(ChatDev / StaffDeck / PilotDeck)开发
- 🔧 给上游 Agent 框架修 bug、提特性:Strands Agents、Agno、deer-flow、Hugging Face smolagents、OpenHands、crewAI、CAMEL、LangGraph / DeepAgents、mem0、RAGAS、DeepEval、FastMCP、mcp-use、MCP Servers、OpenAI Agents SDK(Python / TS)、Mastra
- 🔍 审 Agent 框架的核心模块(provider 适配层、streaming 聚合、tool 调用)主动找缺陷:写无网络最小复现 → 按仓库模板报 issue → 允许直接 PR 的仓库当天带回归测试提修复,issue-first 的仓库等维护者确认后再修
- 📖 维护 nanoteam,把多智能体的最小可用形态写成一本能跑的教科书
一条完整的多智能体谱系:看得懂 → 用得上 → 跑得稳
🐜 nanoteam1000 行以内的 deep-research 多智能体团队,一天就能读完的"可运行教科书"。Leader–Worker 架构,可预测的 N+2 次模型调用,CI 强制行数上限。 |
面向本地工程的个人 AI 编程助手。跨会话项目记忆,Skill 自进化(人工审核后沉淀),长任务上下文压缩,本地权限沙箱。 |
|
基于 LangGraph 的医疗问答多智能体原型。Orchestrator–Worker 编排,确定性安全层由代码而非 LLM 兜底,技能白名单 + 隐私脱敏 API。 |
⚙️ SwarmCore企业级多租户、可持久化的智能体执行内核。Temporal 持久化编排,不可变执行计划,PostgreSQL 单一事实源,OPA/Vault 安全治理。 |
- openai/openai-agents-js ⭐4k — fix(agents-core): handle same-server MCP tool name collisions
2026-09-25getAllMcpTools只拦跨 server 的重名:toFunctionToolName把非字母数字全替成_,同一 server 里search-a与search_a归一后都叫search_a,两个工具一起返回,resolveModelVisibleToolNameCollisions丢掉其中一个、模型只剩一个可达——守卫只拿当前 server 的名字与之前 server 已占的比较,还先把当前批次收进Set,批内重复根本到不了比较;prefixed 路径按前缀后的 base name 计数,-与_都算安全字符、base 不同就不强制 hash 后缀,归一后才相撞。改为findDuplicateToolNames同时报批内重复与先前 server 的占用(非前缀路径抛既有UserError),前缀路径按归一后的名字计数预留、相撞时给同一确定性 hash 后缀,两个工具都保可达;补/扩回归测试,修前 2 败、修后 69 全过。
- bytedance/deer-flow ⭐83k — fix(tools): route bound task and batch tools' sync path through the bound runtime
2026-09-25bind_task_tool/_bind_batch_tool给副本重绑的只有coroutine,func仍是进程级单例的 sync 包装——包着未绑定的 coroutine,同步调用 bound 副本因此绕过显式 SDK submitter 与执行容量、落回进程全局回退(恰是bind_batch_toolsdocstring 明令禁止的「never fall through to another application's process-global submitter」),在单例从未被 sync 包装过的新进程里则直接NotImplementedError。改为把副本的func也重绑成make_sync_tool_wrapper(bound_coroutine, ...)(与_ensure_sync_invocable_tool同一 helper),两条调用路径都走 bound coroutine 及其 runtime 的 submitter 与容量;补三条回归测试,main 上红、本分支绿。
- bytedance/deer-flow ⭐83k — fix(sandbox): list the skills root when only category mounts exist
2026-09-25- 默认(非 policy-scoped)skills 投影下
ls /mnt/skills报 Directory not found:该布局只挂四个 category 子目录、没有/mnt/skills根自身的PathMapping,LocalSandbox.list_dir把根解析成字面宿主路径,宿主扫描的FileNotFoundError抢在虚拟子目录 overlay——专为让 agent 用ls /mnt/skills发现 category 而写的代码块——之前抛出。改为宿主扫描抛FileNotFoundError时,只要请求的容器路径内至少挂了一个映射,就按空宿主列表处理、让既有 overlay 浮出挂载的子目录,什么都没挂的路径照旧报错;补回归测试,main 上红、本分支绿。
- 默认(非 policy-scoped)skills 投影下
- agno-agi/agno ⭐42k — fix: store raw video bytes in GeminiTools.generate_video artifact
2026-09-25GeminiTools.generate_video把返回的Videoartifact 用 base64 文本构造(base64.b64encode(generated_video.video_bytes).decode("utf-8")),而agno.media.Video.content声明为原始视频bytes,Pydantic 把该字符串强转成 base64 文本的 UTF-8 字节——Video.get_content_bytes()的每个消费者(媒体卸载上传、artifact 落盘)拿到的都是 base64 文本而不是视频。改为直接传原始字节,对齐同工具箱的generate_image分支与其余六个视频工具箱(opencv/fal/minimax/replicate/wavespeed/lumalab),补回归测试。
- bytedance/deer-flow ⭐83k — fix(models): tolerate a null Codex account_id before it reaches the request header
2026-09-20- Codex 凭据加载:
account_id以data.get("account_id") or tokens.get("account_id", "")读取,""兜底只覆盖「键缺失」——键存在但值为 JSONnull时 falsy 落穿到下一环,表达式求值为None灌进CodexCliCredential(account_id=None),在model_post_init的account_id[:8]处抛裸TypeError,account 未知的凭据文件让所有CodexChatModel构造失败而非以未记账账号运行。改为任何非字符串值一律归一为字段文档的未知账号值"",补回归测试。
- Codex 凭据加载:
- bytedance/deer-flow ⭐83k — fix(models): skip Claude credentials sources with a non-numeric expiresAt
2026-09-20- Claude 凭据加载:
_extract_claude_code_credential把claudeAiOauth.expiresAt原样拷进ClaudeCodeCredential.expires_at,is_expired随即拿它和0比大小——字符串、null、list、object 一律抛TypeError且无人捕获,凭据查找循环停在坏文件上不再推进,$CLAUDE_CODE_CREDENTIALS_PATH里一个坏expiresAt就足以让~/.claude/.credentials.json永远读不到,还顺着ClaudeChatModel.model_post_init冒出去使该文件存在时所有模型构造失败而非降级。改为非数值expiresAt的候选源按 #5494 已立的契约跳过并记 debug 日志(缺失键仍回落默认0、不视为过期),补齐各形态回归测试。
- Claude 凭据加载:
- bytedance/deer-flow ⭐83k — fix(models): degrade a non-object Codex auth file to no credential
2026-09-19- Codex 凭据加载:
load_codex_cli_credential经_load_json_file读~/.codex/auth.json,而json.loads的产物不限于对象,加载器却直接对它调data.get("tokens", {})——顶层是数组/字符串/数字的 auth 文件因此抛AttributeError: 'list' object has no attribute 'get'。异常无人捕获,从CodexChatModel.model_post_init冒出去,在 provider 来得及抛它那句文档化的「Codex CLI credential not found」之前就中止了模型构造,与该模块「读不到就降级」的约定正好相反。嵌套的tokens早已有这道守卫,同文件的 Claude 加载器也在 #5494 补了等价的顶层守卫,Codex 的顶层是唯一漏掉的一处。
- Codex 凭据加载:
- bytedance/deer-flow ⭐83k — fix(mcp): insert bare-filename rewrites literally
2026-09-18- MCP 工具结果重写:
_rewrite_unique_bare_filenames把相关好的虚拟路径当成Pattern.subn的替换模板传入,而替换串来自真实文件的相对路径、反斜杠在 POSIX 文件名里是普通字符(模型给 stdio server 传了 Windows 风格路径就会产生名为screenshots\q3.png的文件)。模板在找匹配之前编译,于是\q这种未知转义直接抛re.error逃出_convert_call_tool_result、整个工具调用失败(文件其实已写好);能被re接受的转义则把该字节替换进返回文本(\r变成路径中间的真实回车)。改为用 callable 替换逐字插入,并补两半回归测试。文件来自 workspace 快照 diff,所以触发文件不必是本次调用写的。
- MCP 工具结果重写:
- bytedance/deer-flow ⭐83k — fix(models): pair Codex invalid tool calls with their tool results
2026-09-17- Codex Responses 序列化:模型发出
arguments不是合法 JSON 的function_call时,该调用被_parse_response收进invalid_tool_calls,中间件会用带同一call_id的占位ToolMessage就地兜住,但序列化器只回放msg.tool_calls,于是占位结果的call_id在请求里找不到对应的function_callitem,Responses 直接拒收——恰好是中间件要恢复的那种可恢复错误。改为把invalid_tool_calls一并回放;同时处理InvalidToolCall字段可空,缺 name/call_id 的调用直接跳过(中间件已为这类调用补了合成 id 与兜底名,跳过不会让占位结果变孤儿)。
- Codex Responses 序列化:模型发出
- agno-agi/agno ⭐42k — [fix] keep falsy tool results (0, False, []) on the sync tool execution path
2026-09-16- 同步工具执行路径把
0/False/[]这类有意义的假值结果当成空结果发给模型,异步路径arun_function_calls却照发str(result),同一个工具在run()与arun()下给模型的结果不一致,模型无法区分“零条”和“没有输出”,空串还会被持久化进会话。去掉真值判断让两条路径一致,并补无网络回归测试。
- 同步工具执行路径把
- PrefectHQ/fastmcp ⭐28k — fix(local-provider): apply transforms in get_tasks
2026-09-15- MCP 本地 Provider:
LocalProvider.get_tasks()直接返回原始组件键,绕过了 Provider 基类的 transform 管线,于是add_transform(Namespace(...))之后后台任务注册到的名字与工具/资源不一致,按命名空间调用会找不到任务。改为在get_tasks里同样应用 transforms,并补回归测试。
- MCP 本地 Provider:
- crewAIInc/crewAI ⭐59k — fix(azure): key streamed tool calls by wire index
2026-09-15- Azure 流式补全:tool call 的增量按数组位置归并,但后续 chunk 会重排顺序,导致首个 chunk 的
id配上最后一个 chunk 的name、参数被拼到错误的调用上。改为按 wire index 归并,并补回归测试。
- Azure 流式补全:tool call 的增量按数组位置归并,但后续 chunk 会重排顺序,导致首个 chunk 的
- bytedance/deer-flow ⭐83k — fix(mcp): treat a Human Input Card reply as the current user request
2026-09-14- HITL 澄清与 MCP 路由:Human Input Card 的回执被
is_real_user_message当成“非真实用户消息”跳过,用户只在澄清回答里提到的关键词不会触发延迟 MCP 工具提升。改用同包已有的is_genuine_user_message谓词(与 summarization / tool_receipt 中间件一致),并补回归测试。
- HITL 澄清与 MCP 路由:Human Input Card 的回执被
- bytedance/deer-flow ⭐83k — fix(mcp): keep ToolRuntime injection for sync-wrapped MCP tools
2026-09-04- MCP 工具调用:同步包装的 MCP 工具在 PEP 563 延迟注解下丢失
ToolRuntime注入,工具拿不到会话上下文。修复后注入在两种注解模式下都生效,按 maintainer review 补了契约说明和测试。
- MCP 工具调用:同步包装的 MCP 工具在 PEP 563 延迟注解下丢失
- strands-agents/harness-sdk ⭐8k — fix(openai): report max_tokens when a Responses function call is cut off
2026-09-03- OpenAI Responses 流式解析:function call 被
max_output_tokens截断时stop_reason仍报tool_use,Agent 会拿残缺参数直接执行工具。修正判定优先级,截断时如实报max_tokens,并补回归测试。
- OpenAI Responses 流式解析:function call 被
- agno-agi/agno ⭐42k — [fix] Resolve Gemini image MIME type instead of hard-coding image/jpeg
2026-09-02- Gemini 多模态输入:图片 MIME 类型被硬编码为
image/jpeg,PNG/WebP 等格式会被贴错标签导致 API 拒收或误解析。改为从图片数据实际解析类型后再传给模型。
- Gemini 多模态输入:图片 MIME 类型被硬编码为
自己审代码发现、带无网络最小复现报出的缺陷。维护者那边已有讨论的按 issue 报,能直接修的当天带回归测试提 PR;有些仓库不必先开 issue,缺陷的复现与根因就写在 PR 描述里,这类条目的「问题」列直接指向 PR。下表按发现时间倒序,合并后会自动进上一栏:
| 仓库 | 问题 | 状态 |
|---|---|---|
| mastra-ai/mastra ⭐28k | 数组结构化输出的逐 token 流式下,每个 object chunk 携带「到目前为止的数组」,chunk 尾部元素还是半成品、后续 chunk 在原位补全它(同 index、多字段)而非追加新元素——textStream 与 elementStream 都留着那条陈旧的半成品:流出的 [{"a":1},{"a":2,"b":4}] 缺了最终对象第一个元素的 "b":2,渲染或持久化流的消费者静默丢字段,与 Mastra 自己返回的最终校验对象不一致 2026-09-26 |
🟡 已提交,等待确认 |
| pydantic/pydantic-ai ⭐20k | FunctionSignature.render_type_definitions 按类型名消解冲突,产出行为可以与意图相悖的 Python 且全程无报错:参数与返回 schema 各自定义 User 的工具渲染出两份 class sync_user_User(TypedDict),拼进同一模块后第二份静默重绑名字,user 参数落到返回类型的形状上;RetWrap.user 又渲染成裸 User——没有任何一份产出定义提供它,不冲突但引用了冲突类型的字段同样渲染裸名、指向空处 2026-09-26 |
🟡 已提交,等待确认 |
| pydantic/pydantic-ai ⭐20k | FunctionToolset.__init__ 对 timeout 与 max_retries 不做任何校验,而兄弟构造器在构造期就拒(Agent(tool_timeout=0) 抛 UserError)——timeout=0 被当真用作 call_tool 的 anyio.fail_after(timeout),每个工具调用都以超时 ModelRetry 失败直到整轮 run 死掉,报错不指向坏值本身;负的 max_retries 盖到所有未自设重试数的工具上、充当 run 级重试预算 2026-09-26 |
🟡 已提交,等待确认 |
| mem0ai/mem0 ⭐66k | Langchain.list() 的每个 return 都挡在 hasattr(self.client, "_collection") 后面,非 Chroma 的 langchain VectorStore(FAISS/Qdrant/PGVector——LangchainConfig.client 本就接受任意实例)落到函数尾返回 None 而非 []——Memory.get_all() 迭代抛 TypeError: 'NoneType' object is not iterable,Memory.delete_all() 下标抛 not subscriptable;兄弟实现(faiss/cassandra/opensearch/mongodb)空库时也返回嵌套列表,唯独这里没有 2026-09-26 |
🟡 已提交,等待确认 |
| SWE-agent/SWE-agent ⭐20k | ReplayModel 只在回放动作恰为字符串 "submit" 时才调 _next_replay(),而 run-replay 自己的写入器 _create_actions_file 把每个动作都写成 dict({"message": ...},function-calling 配置再加 tool_calls)——精确字符串比较永远匹配不上自家工具产出的文件,_replay_idx 从不前进,条目回放完之后的查询全落进 IndexError 兜底自动提交,永远走不到下一个回放条目 2026-09-25 |
🟢 直接提 PR(未建 issue) |
| e2b-dev/E2B ⭐14k | git.push() / git.pull() 只在无凭证分支上做 auth/upstream 失败的映射:带 username/password 的分支在把失败映射成 GitAuthError/GitUpstreamError(Python 侧 GitAuthException/GitUpstreamException)的 try/catch 之前就提前 return——过期 token 的推拉把 git 的退出码与 stderr 当裸 CommandExitError 抛出,拿不到可操作的类型化错误,而 clone() 在含凭证的所有路径上都做同一映射 2026-09-25 |
🟢 直接提 PR(未建 issue) |
| Arize-ai/phoenix ⭐12k | executeSql 的 SQLite 后端重写已放行的时间戳字面量时把时刻转成 UTC:0001-01-01T00:00:00+00:30 通过准入(parse_timestamp_literal 只要解析出时刻就收),format_timestamp_for_sqlite 的 astimezone 算出 0000-12-31 23:30 这个 datetime 装不下的值,调用点抛裸 OverflowError——它不是 AnalyticsSqlError,绕过 executeSql 文档承诺的错误信封直达调用方;同一条语句在不重写字面量的 PostgreSQL 上正常返回行 2026-09-25 |
🟢 直接提 PR(未建 issue) |
| Arize-ai/phoenix ⭐12k | _ToolKwargsConversion.to_anthropic 在存档 prompt 的 tool_choice 为 "none" 时立即 return {},把此前已装好的 ans["tools"] 一并丢弃——带工具但禁用工具使用的捕获请求,回放时 tools 整个消失;服务端 playground 本就同时发 tools 与 tool_choice: none,同文件 _ToolChoiceConversion 的 to/from 两个方向都早已正确映射 "none",只有这条早退绕开了既有处理 2026-09-25 |
🟢 直接提 PR(未建 issue) |
| run-llama/llama_index ⭐52k | google-genai 集成的 merge_neighboring_same_role_messages() 用浅层 BaseModel.model_copy() 拷贝消息,merged_content/merged_kwargs 仍指向调用方的 blocks 列表与 additional_kwargs 字典,就地 extend()/update() 直接改写调用方原始消息——与函数自己的注释「operate on a copy … to avoid mutating the original」相反;chat memory 跨轮复用同一批 ChatMessage,每轮 chat() 都把之前轮次的内容重发一遍、随调用次数增长 2026-09-25 |
🟢 直接提 PR(未建 issue) |
| e2b-dev/E2B ⭐14k | WatchHandle.stop() 只触发请求控制器的清理,controller.abort() 掐断的 Connect 流以 Code.Canceled 的 ConnectError 冒出,被默认错误映射包成劝人调大 requestTimeoutMs 的 TimeoutError 传给 onExit——用户自己发起的每次正常 stop 都长得像请求超时,报错还指向一个不该动的参数;Python SDK 早已把 stop() 当干净的主动结束(on_exit 无错误触发) 2026-09-25 |
🟢 修复 #1896 已提交 |
| SWE-agent/SWE-agent ⭐20k | SetStatusAgentHook.on_setup_attempt 把上一轮尝试的花费折进 _previous_cost 却从不重置 self._cost(注释明说「Costs will be reset for the next attempt」),状态行显示的又是 _previous_cost + _cost——重试轮从首个状态行起就把上一轮花费重复计入,直到 on_step_done 用新尝试的花费覆盖才恢复:实际只花 $1.00 也显示 Attempt 2 Step 1 ($2.00) 2026-09-25 |
🟢 修复 #1568 已提交 |
| run-llama/llama_index ⭐52k | FunctionCallingProgram.acall 把格式化好的 prompt 消息直接交给 apredict_and_call,跳过 llm._extend_messages——配了 system_prompt 的 function-calling LLM 在异步结构化输出路径上静默丢掉系统提示;同步 __call__、stream_call/astream_call 与 LLMTextCompletionProgram 的全部路径都先 extend 再传,acall 是唯一漏掉的一条 2026-09-25 |
🟢 直接提 PR(未建 issue) |
| Arize-ai/phoenix ⭐12k | PostgreSQL 后端上 attributes ->> '$.llm.model_name' 静默返回 NULL / 0 行,同一条语句在 SQLite 返回值,无任何报错——而这个拼法恰是工具自己的拒绝文案推荐的(写 #>> 被劝「write json_extract(doc, '$.a.b') or attributes ->> '$.a'」),allowlist 又把 ->/->> 与 #>/#>> 并列放行;函数拼法 json_extract(...) 在两个后端都对(有专门改写成 jsonb_extract_path_text 的通路),唯独箭头操作符这条路径悄悄给出错误答案 2026-09-25 |
🟡 已提交,等待确认 |
| run-llama/llama_index ⭐52k | ReActAgent.finalize 只在最后一步推理是 ResponseReasoningStep 时才把推理落进 memory 并清空 ctx.store["current_reasoning"],handoff 之后最后一步是交接的 ObservationReasoningStep,落盘与清空整块被跳过——下一轮 workflow.run(ctx=ctx)(文档的多轮模式)把上一轮的 Thought: ... / Action: handoff 当本轮推理注入 prompt,该轮 finalize 又把上一轮的推理当成本轮答案落库,接手的 agent 也把前任的步骤继承成自己的 current_reasoning 2026-09-25 |
🟡 已提交,等待确认 |
| vibrantlabsai/ragas ⭐16k | stratified_batches 把批数计算的 ceil/floor 用反:drop_last_batch=True 时用 ceil、False 时用 floor,与文档语义(True 只留完整批 → floor)及非分层版 batch() 正相反——True 时 while len(all_batches) < num_batches 只在凑满 batch_size 才追加、要的完整批比数据能凑的多,永不终止;False(遗传优化器在用的模式)静默丢样本,20 条 batch_size=2 返回 19,batch_size 超过数据集大小时 floor 出 0 批、全部样本被丢;replace=True 还会对耗尽的类调 random.choices() 抛 IndexError 2026-09-25 |
🟢 直接提 PR(未建 issue) |
| pipecat-ai/pipecat ⭐16k | Anthropic 把每个工具调用作为独立 content block 流式发出(start/delta/stop,最后一条 message_delta 收尾),_process_context 却只保留单个 tool_use_block 和单个 json_accumulator、只在终态 message_delta 构造一次 FunctionCallFromLLM——并行工具调用时每个新块顶掉前一个的 id、清空已累积的参数,N 个请求的调用只有最后一个到达 run_function_calls(),其余连参数一起被丢 2026-09-25 |
🟢 直接提 PR(未建 issue) |
| agno-agi/agno ⭐42k | get_effective_filters 合并两级 knowledge_filters 时不处理类型混搭:agent 级 dict + run 级 list 走 [*effective_filters, *knowledge_filters],把 dict 解包成裸键名(["type", EQ("difficulty", "easy")]),过滤值全丢;agent 级 list + run 级 dict 则整体替换、不像 dict+dict 的 update() 与 list+list 的拼接那样合并——下游 _validate_filters 把每个 str 记一条 invalid 后丢弃,agent 的过滤器静默失效、检索在无过滤下运行 2026-09-25 |
🟢 直接提 PR(未建 issue) |
| confident-ai/deepeval ⭐18k | CrewAI 的 LLM 调用失败时改发 LLMCallFailedEvent 再重抛,事件监听器却没有对应 handler——on_llm_started 里 __enter__() 的 Observer 永不退出:LlmSpan 以 end_time=None 留在 active_spans,根 span 关闭后整条 trace 卡在 active_traces 不再 finalize/post,span_observers 的条目也从不移除、随失败次数累积;工具侧同样不对称,抛错发的是 ToolUsageErrorEvent,栈上的元数据没人 pop 2026-09-25 |
🟢 直接提 PR(未建 issue) |
| modelcontextprotocol/servers ⭐90k | GitPython 用 surrogateescape 解码命令输出,非 UTF-8 文件(如 Latin-1 编码)的 diff 回来是带孤立代理项的 str,三个 diff 工具把它原样塞进 TextContent——响应序列化即抛 PydanticSerializationError: surrogates not allowed;stdio 端到端验证:diff 调用无响应、server 进程直接死掉,会话后续所有工具调用全部失败,diff 工具在这类仓库上完全不可用 2026-09-25 |
🟢 直接提 PR(未建 issue) |
| dottxt-ai/outlines ⭐16k | get_schema 渲染 prompt 示例用的模型 schema 时无条件解析每个 $ref:引用回所属模型的字段(Optional["Node"])没有 base case,anyOf 分支解析字段的 $ref、$ref 分支重进同一定义,每过一层多压一帧直到裸 RecursionError、一个字段都渲染不出来;包在容器里的递归字段(Optional[list["Node"]])反而从不触发——walker 不下钻 items、按 <name> 占位渲染,直接引用与容器包裹的应一致 2026-09-25 |
🟢 直接提 PR(未建 issue) |
| camel-ai/camel ⭐18k | OpenAPIToolkit 对声明 type: apiKey, in: cookie 的 security scheme 从不注入 API key:分支比较的字面量拼错成 'coolie',永远匹配不上 spec 值 'cookie',请求不带任何凭证发出、API 返认证错误且无线索;同函数参数分支的 param['in'] == 'cookie' 早已正确,OpenAPI 3.x 本就允许 in: cookie,纯这一处 drift 2026-09-25 |
🟢 修复 #4375 已提交 |
| agno-agi/agno ⭐42k | OpenAIResponses 流式只保留最后一条 url citation:API 每条注解发一个 annotation.added 事件,_parse_provider_response_delta 每个事件新建 ModelResponse(Citations 只装当条注解),而流累加器用每个 delta 的 citations 整体替换已累积的(stream_data.response_citations = ...),助手消息又从累加器填充——最后一条事件通吃、之前的注解全丢;非流式解析把全部注解收进同一个 Citations,同一回复的 response() 与 response_stream() 互不一致 2026-09-25 |
🟢 修复 #10590 已提交 |
| agno-agi/agno ⭐42k | GeminiTools.generate_video 把返回的 Video artifact 用 base64 文本构造(base64.b64encode(...).decode()),而 Video.content 声明为原始视频 bytes,Pydantic 把该字符串强转成 base64 文本的 UTF-8 字节——每个 Video.get_content_bytes() 消费者(媒体卸载上传、artifact 落盘)拿到的都是 base64 文本而不是视频 2026-09-25 |
🟢 修复 #10554 已合并 |
| bytedance/deer-flow ⭐83k | bind_task_tool / _bind_batch_tool 给副本重绑的只有 coroutine,func 仍是进程级单例的 sync 包装——包着未绑定的 coroutine,同步调用 bound 副本因此绕过显式 SDK submitter 与执行容量、落回进程全局回退(恰是 bind_batch_tools docstring 明令禁止的「never fall through to another application's process-global submitter」),在单例从未被 sync 包装过的新进程里则直接 NotImplementedError 2026-09-25 |
🟢 直接提 PR(未建 issue),已合并 |
| bytedance/deer-flow ⭐83k | 默认(非 policy-scoped)skills 投影下 ls /mnt/skills 报 Directory not found:该布局只挂四个 category 子目录、没有 /mnt/skills 根自身的 PathMapping,LocalSandbox.list_dir 把根解析成字面宿主路径,宿主扫描的 FileNotFoundError 抢在虚拟子目录 overlay——专为让 agent 用 ls /mnt/skills 发现 category 而写的代码块——之前抛出 2026-09-25 |
🟢 直接提 PR(未建 issue),已合并 |
| bytedance/deer-flow ⭐83k | 同一轮两个 skill_manage 调用(同 user+skill)在 sync client 路径(TUI 用的 DeerFlowClient.stream())上永久死锁:_skill_locks 是跨调用的 WeakValueDictionary,两条调用拿到同一把 asyncio.Lock,而 sync 路径每次调用各自 asyncio.run 开新事件循环、还在线程池里并行——第二把锁在另一个循环上永不出让,整个 ToolNode 挂死 2026-09-25 |
🟡 已提交,等待确认 |
| crewAIInc/crewAI ⭐59k | LiteAgent 的 guardrail 拦截重试把 response_format 丢了:重试递归 self._execute_core(agent_info=agent_info) 不带该参数,重试的 LLM 调用以 response_model=None 运行、输出从不解析进请求的模型;response_format 声明为 agent 字段的形态不受影响,只有按 kickoff 传参的形态被丢 2026-09-25 |
🟢 直接提 PR(未建 issue) |
| crewAIInc/crewAI ⭐59k | MCPNativeTool._run 拿 asyncio.get_running_loop() 的 RuntimeError 当「无事件循环」信号,except RuntimeError 却罩住整个执行路径——工具在运行中的事件循环里调用本身以 RuntimeError 失败时(MCPClient.disconnect() 把非 MCPConnectionError 的清理失败都包成 RuntimeError),回退吞掉真实错误、又在运行中的循环里调 asyncio.run(),调用方只看到 asyncio.run() cannot be called from a running event loop,真实原因不可达 2026-09-25 |
🟢 直接提 PR(未建 issue) |
| PrefectHQ/fastmcp ⭐28k | TransformedTool.run 只认字面顶层 "type": "object" 判定 object schema:properties-only({"properties": ...})与根级 $ref 的 object schema 被误判为非 object,transform_fn 返回的 ToolResult 的 structured_content 被丢弃、is_error=True 被重建为成功,meta 同丢;Tool.from_tool 还不做任何输出 schema 校验(from_function 对同一输入会 ValueError 拒绝),留下运行时静默关掉结构化输出的工具 2026-09-25 |
🟢 修复 #5271 已提交 |
| PrefectHQ/fastmcp ⭐28k | functools.partial 造的工具全叫 partial、描述是 partial 类 docstring——ParsedFunction.from_function 经 fn.__class__.__name__ 兜底取名,partial 既无 __name__ 也无 __doc__;注册两个 partial 工具就在名字 partial 上相撞、后者顶掉前者(只给一条泛型 warning),multiply 直接消失 2026-09-25 |
🟢 修复 #5269 已提交 |
| vibrantlabsai/ragas ⭐16k | SingleMetricAnnotation.sample(n, stratify_key=...) 会返回多于 n 条:每类按 int(np.round(proportion * n)) 取数,平衡两类 + 奇数 n 时每类都进位(n=3 → 每类 2、合计 4),补差循环只补 shortfall 从不裁剪超出——sample(3) 返回 4 条、sample(19) 返回 20 条,违反文档「n samples」契约 2026-09-25 |
🟢 直接提 PR(未建 issue) |
| vibrantlabsai/ragas ⭐16k | griptape 集成的 ImportError 文案从 Opik tracer 整段抄来:griptape 未装时提示「Opik is not installed ... pip install opik」,用户照做装了无关包、错误原样复现,直到装上 griptape 本体才好 2026-09-25 |
🟢 修复 #3033 已提交 |
| guidance-ai/guidance ⭐22k | Tool.from_callable 把 inspect.signature 的原始注解直接喂 create_model():PEP 563(from __future__ import annotations)模块里注解是纯字符串,pydantic 在模型构建处的命名空间解析而非 callable 自己的模块——schema 期即抛 PydanticUserError: 'move_to' is not fully defined,凡启用 postponed annotations 的用户工具全部注册失败 2026-09-25 |
🟢 直接提 PR(未建 issue) |
| guidance-ai/guidance ⭐22k | LarkSerializer.normalize_name 只做 -→_ 与驼峰转下划线,空格、点、前导数字、非 ASCII、| 等一律原样进 Lark 规则名——gen(name="first name") 序列化出 start: first name 这样的非法文法,本地引擎一编译就抛 ValueError: Expected token ':',报错位置离真正成因(name= 参数)十万八千里;远程 API 模型从不编译 grammar,所以仓内测试全绿 2026-09-25 |
🟡 已提交,等待确认 |
| dottxt-ai/outlines ⭐16k | get_schema_from_signature 把 *args / **kwargs 也建成 schema 属性,它们没有默认值于是全进 required,而调用路径本来就拒绝按名绑定可变参数——fn(**{"a": 1, "args": "x"}) 抛 TypeError: got an unexpected keyword argument,违反 docstring 写明的「schema 合法对象必能 ** 传参」不变量 2026-09-25 |
🟢 直接提 PR(未建 issue) |
| strands-agents/harness-sdk ⭐7k | MCPClient 直接拿 MCP server 报来的 mime type 索引 MIME_TO_FORMAT,该表只收 jpeg/jpg/png/gif/webp 五种——image/svg+xml 等图片 mime 的成功工具结果抛 KeyError,被 call_tool_* 捕获后整次调用变成 error 结果,同一次调用的其余 content block 全部丢弃 2026-09-25 |
🟢 直接提 PR(未建 issue) |
| strands-agents/harness-sdk ⭐7k | MistralModel.stream 按 tool_call.id 聚合流式工具调用增量,而 Mistral 只在首个增量带 id/name、续增量只有 index,mistralai SDK 把缺省 id 填成默认 "null"——真 id 的块只带首个空 arguments(工具以 {} 参数执行),碎片全落进假 "null" 桶、被当不完整 tool use 丢弃,并行调用还会互相合并;改按 index 聚合,对齐 OpenAI/LiteLLM/SageMaker/Writer 四个 provider 2026-09-25 |
🟢 直接提 PR(未建 issue) |
| strands-agents/harness-sdk ⭐7k | Anthropic redacted thinking 的 base64 字符串经编译期 cast 直接塞进声明为 Uint8Array 的 ReasoningBlock.redactedContent——首轮侥幸原样通过,首次 Message.clone() 或 session 存取把它经 toJSON()/fromJSON() 再编码成 base64 文本的 ASCII 字节,下一请求的 redacted_thinking 块序列化成 {"0":69,"1":109,...} 被 Messages API 拒收,加密推理的多轮工具使用全断 2026-09-25 |
🟢 修复 #4593 已提交 |
| pipecat-ai/pipecat ⭐16k | GatedLLMContextAggregator.process_frame 里 StartFrame 分支是独立 if:push 并 _start() 之后落进 catch-all else 把同一帧再 push 一遍——下游每个处理器收到两个 StartFrame、重跑启动逻辑(FrameProcessor 重建 process task、BaseOutputTransport 再次 start());修好只需一个 token:并入 if/elif 链 2026-09-25 |
🟢 直接提 PR(未建 issue) |
| pipecat-ai/pipecat ⭐16k | Gemini 适配器用「恰好一个 text part」判定 regular message:create_image_message() 造的双 part(text+image)与纯图单 part 都不算,只含这类消息的 context 被当成纯函数消息 context,system instruction 在已随 system_instruction 参数发送之外又作为尾部 user message 注入一遍 2026-09-25 |
🟢 直接提 PR(未建 issue) |
| mastra-ai/mastra ⭐28k | convertMcpContentToolResultOutput 在 v5 tool-result 输出里发 spec-v3(AI SDK v6)形态的 image-data/file-data,而 LanguageModelV2ToolResultOutput 只收 text/media——spec-v2 provider 把图片条目变 undefined 静默丢掉,spec-v4 provider 报 unsupported tool content part type: image-data(Bedrock 直接抛错),MCP 自动探测工具的图片/音频结果到不了任何一侧的模型 2026-09-25 |
🟢 直接提 PR(未建 issue) |
| confident-ai/deepeval ⭐18k | OpenAI Agents SDK 的 function span input 非可解析 JSON 时 json.loads 裸抛:custom tool 与 apply_patch 走 with_tool_function_span(从不设 input,即 None)、无动作 computer call 是 ""——崩点在 Observer.__exit__(span 已进 trace_manager、还没 remove_span),ToolSpan 以占位 "NA" 名泄漏在 active_spans,SDK trace provider 吞掉异常,除坏掉的 trace 外无任何表象 2026-09-25 |
🟢 直接提 PR(未建 issue) |
| confident-ai/deepeval ⭐18k | 被 patch 的 langchain_core.tools.tool 在无活动 span 时直接崩:包装器无条件 current_span.metrics = ...,而 current_span_context.get() 在直接 tool.invoke(...) 或没挂 CallbackHandler 的运行里是 None,AttributeError 让工具调用本身失败;bare @tool() 还会把 on_tool_start 刚从 next_tool_span(...) 应用上的 metrics 用 None 覆盖掉——其余 tracing 层早就该用 skip-don't-clobber 语义 2026-09-25 |
🟢 直接提 PR(未建 issue) |
| huggingface/smolagents ⭐29k | Tool.to_dict() 的 forward_source_code.replace(self.name, "forward") 全量替换:@tool 装饰器存的 __source__ 本就以 def forward(...) 开头,替换只会改写 body 里出现的工具名子串(URL、f-string、docstring、同名内置调用),from_dict()/save()/push_to_hub() 往返后的工具行为被静默改变、无任何报错 2026-09-25 |
🟡 已提交,等待确认 |
| camel-ai/camel ⭐18k | 默认 AnthropicConfig 的每次调用都被 Anthropic API 400 拒:#3874 把 max_tokens 回退值从 4096 改成 None,而它是 Messages API 的必填参数,显式 None 被序列化成 "max_tokens": null 而非省略——默认 config 的 as_dict() 丢弃 None 值,回退恒生效,流式非流式全中 2026-09-24 |
🟢 修复 #4373 已提交 |
| camel-ai/camel ⭐18k | OpenAPI security scheme in: cookie 的 API key 永不注入:分支比较的字面量拼错成 'coolie',请求不带任何凭证发出、API 返认证错误且无线索;同循环的参数分支 param['in'] == 'cookie' 是对的,纯 drift 2026-09-24 |
🟡 已提交,等待确认 |
| livekit/agents ⭐14k | Agent.chat_ctx 返回的 _ReadOnlyChatContext 两条变更路径无守卫静默成功:_ImmutableList 覆盖了 append/extend/pop/remove/clear/sort/reverse 独漏 insert,chat_ctx.insert(item) 与走 list.insert() 的 add_message(created_at=...) / merge(...) 写进视图的 detached 副本后正常返回,消息从没进真实 chat context;items property setter 也未覆盖,chat_ctx.items = [...] 把不可变列表换成可变列表而 readonly 仍报 True 2026-09-24 |
🟢 直接提 PR(未建 issue) |
| livekit/agents ⭐14k | AWS Bedrock formatter 构造 Converse API toolResult 时硬编码 "status": "success"、无视 FunctionCallOutput.is_error——失败工具调用的错误文本被包在标记成功的块里发给模型,模型无从知道调用失败、可能把错误输出当有效结果;同目录 Google/Anthropic formatter 都转发该标志 2026-09-24 |
🟢 直接提 PR(未建 issue) |
| mcp-use/mcp-use ⭐11k | LangChain MCPAgent.streamEvents() 先把用户 query 推进 conversationHistory 再拍历史快照、又把同一 query 作为尾部 HumanMessage 拼进 inputs——当前这句话每轮都发两遍(turn 1 就是 [hello, hello]);同文件 run()/stream() 本就是先快照后落账,唯 streamEvents 反着来 2026-09-24 |
🟢 直接提 PR(未建 issue) |
| mem0ai/mem0 ⭐66k | Langchain.list() 的所有 return 都挡在 hasattr(self.client, "_collection") 后面:FAISS/Qdrant/PGVector 等非 Chroma 客户端(LangchainConfig.client 明确接受任何 VectorStore)直接落到函数尾返回 None——Memory.get_all() 迭代抛 TypeError: 'NoneType' object is not iterable,Memory.delete_all() 下标抛 not subscriptable 2026-09-24 |
🟡 已提交,等待确认 |
| openai/openai-agents-js ⭐3.9k | invalidateServerToolsCache 的 fallback 在 per-server 键注册表未命中时,删除 cachedMcpTools[serverName] 后还扫描删除所有以 ${serverName}: 开头的键——默认缓存键就是 server 自身名字,名为 db:readonly 的 server 恰好以 db: 开头,失效 db 会顺带删光 db:readonly 的缓存并留下悬空注册表项 2026-09-24 |
🟢 已被上游修复(maintainer PR #1977 已合并) |
| camel-ai/camel ⭐18k | 流式 ChatAgent 把函数名不在 _internal_tools 的 tool call 静默丢弃:_accumulate_tool_calls 只给内部工具标完成,幻觉工具名与 external_tools= 注册的工具(schema 已发给模型、docstring 说应返给调用方)都既不执行、不记忆、不进 external_tool_requests、yield 0 条响应,流式循环还把累积的调用清掉收场 2026-09-23 |
🟢 修复 #4369 已提交 |
| livekit/agents ⭐14k | pipeline 回合循环的 max_tool_steps 迟一轮生效:步数检查比较 num_steps >= max_tool_steps + 1 而计数在检查后才递增(生成 k 结束时检查看到的就是 k),逢结果必重发工具的模型要跑满 max_tool_steps + 1 轮连续工具调用才被强制 tool_choice="none"——比文档多一轮,「maximum number of function calls steps reached」警告也在额外那轮跑完后才响 2026-09-23 |
🟢 修复 #7439 已提交 |
| mcp-use/mcp-use ⭐11k | RemoteAgent.run 的守卫 result.status === "error" || result.error !== null 把所有缺 error 键的 200 成功响应全拒——undefined !== null 为真,{"result": "The answer"} 抛 Remote agent execution failed: [object Object],只有字面带 error: null 的响应算成功;报错插值还把对象错误值渲染成 [object Object] 2026-09-23 |
🟢 修复 #2651 已提交 |
| mem0ai/mem0 ⭐66k | AzureOpenAIStructuredLLM.__init__ 除现成 AzureOpenAIConfig 外全部崩:声明默认的 None、dict、普通 BaseLlmConfig 都在 super().__init__() 后立刻读 self.config.azure_kwargs 抛 AttributeError(带 azure_kwargs 键的 dict 在基类构造就 TypeError),兄弟类 AzureOpenAILLM 对同样输入先转 config 再 super() 2026-09-23 |
🟡 已提交,等待确认 |
| modelcontextprotocol/python-sdk ⭐24k | 注册 -> Iterator[...] / -> AsyncIterator[...](生成器函数的 PEP 484 拼法)工具时 func_metadata 抛裸 pydantic.errors.PydanticSchemaGenerationError——既不按默认回落非结构化工具(structured_output=None),也不抛 SDK 自己的 InvalidSignature(structured_output=True),正经标注类型的生成器工具完全注册不了 2026-09-23 |
🟡 已提交,等待确认 |
| modelcontextprotocol/python-sdk ⭐24k | -> bytes 的结构化工具输出在非 UTF-8 载荷上崩:func_metadata._convert_to_content 用 pydantic_core.to_json(result, fallback=str) 序列化非 str 结果,而 JSON 编码 bytes 时按 UTF-8 解码、fallback 只对未知类型生效,于是第一个非法字节就抛 PydanticSerializationError。文档与 schema 都承诺 bytes 是受支持类型({"type":"string","format":"binary"}),包内其它 bytes 路径(BlobResourceContents、Image/Audio)都走 base64,这里却把载荷吞进泛化错误 2026-09-21 |
🟡 已提交,等待确认 |
| guidance-ai/guidance ⭐22k | trace_node_to_html(node, prettify_roles=True) 在 role 内首个 text/token 输出上抛 UnboundLocalError,之后的输出又渲染成上一个 chunk 的文本:attr / latency / chunk_text 只在某个 guard 分支里赋值,prettify 路径读取时未初始化;同一函数在 prettify_roles=False 下渲染正常 2026-09-20 |
🟢 修复 #1523 已提交 |
| guidance-ai/guidance ⭐22k | load_template_class 只处理 chat template 的类与字符串两种形态,传 ChatTemplate 实例时两条分支都不匹配,被静默丢弃并回落到 ChatML——自定义 ChatTemplate 实例的 format 完全失效 2026-09-20 |
🟢 直接提 PR(未建 issue) |
| guidance-ai/guidance ⭐22k | 对 WeakRefList 做切片(如 TraceNode.children[0:2])抛 TypeError: 'list' object is not callable:__getitem__ 无条件把 list.__getitem__ 的结果当单个 weakref 解引用,切片返回 list 时调用它就崩;切片应返回已解引用的对象,与整数索引一致 2026-09-20 |
🟢 直接提 PR(未建 issue) |
| guidance-ai/guidance ⭐22k | trace_node_to_html 从不渲染 role 内追加的 ImageOutput(with user(): lm += image(...)),role 外出现图片时还会抛 UnicodeDecodeError:HTML trace 里图片输出整段丢失,应像文本一样在 role wrapper 内渲染 2026-09-20 |
🟢 直接提 PR(未建 issue) |
| PrefectHQ/fastmcp ⭐28k | OpenAISamplingHandler 丢弃混在列表里的工具结果:用户消息的 list content 同时带 ToolResultContent 与后续文本块(SamplingMessage.content 明确允许的形状)时走 elif content_parts: 分支,只把 user 消息追加进去,同一列表收集的 tool_messages 一条都不发——模型看不到工具输出;若请求里还带着上一条含 tool_calls 的 assistant 消息,OpenAI API 会直接拒收(每个 tool_call 都必须有对应 tool 消息) 2026-09-20 |
🟡 已提交,等待确认 |
| langchain-ai/deepagents ⭐30k | _build_task_tool 把调用方给的 task_description 字符串直接过 .format(available_agents=...):除文档占位符外的任何花括号都被当格式字段,{"description": ...} 变成名为 description 的字段抛 KeyError,括号不配对则抛 ValueError——应改用纯字符串替换 2026-09-20 |
⚪ 该仓库禁止程序化提交,issue 被自动关闭(与 #6312 同因) |
| mastra-ai/mastra ⭐28k | zod v4 的 nullable enum/literal 经 zodToJsonSchema 导出后拒绝 null:fixAnyOfNullable 检测到 anyOf:[{type:X},{type:"null"}] 时把分支并成 type:[X,"null"],却把仍带 enum / const 的 fixedOther 原样展开——enum 与 type 是合取关系,合并后的 schema 反而把 null 排除在外;zod v3 分支不走这条拓宽路径 2026-09-20 |
🟢 已被上游修复(maintainer PR #25086 已合并) |
| agentscope-ai/agentscope ⭐32k | Grep 的 offset / head_limit 分页静默丢匹配又重复:Grep._run_ripgrep 拼 rg 命令时不带任何排序 flag(_grep.py:289),ripgrep 并行遍历的输出顺序每次调用都可能不同,_apply_head_limit 却直接切这个不稳定列表——同一查询连续翻页会跳过一些匹配、又重复吐出另一些 2026-09-20 |
🟢 已被上游修复(maintainer PR #2726 已合并,采用 sort-by-path 方案) |
| microsoft/autogen ⭐61k | McpWorkbench.call_tool 把 await self._actor.call("call_tool", ...) 的结果直接 link_future 到取消令牌,而 McpSessionActor._run_actor 里 session.call_tool(...) 少写 await、把裸 coroutine set_result 进 future——call 标称返回 McpFuture 实际交出 coroutine,取消时 CancellationToken.link_future 拿它当 future 用抛 AttributeError,工具调用永远不会被取消 2026-09-20 |
🟡 已提交,等待确认 |
| UKGovernmentBEIS/inspect_ai ⭐2.8k | messages_from_google 转换 inline_data 图片 part 时把 Blob.data 按 UTF-8 解码而不是 base64 编码:content_from_google_parts() 对图片二进制直接 bytes.decode(),任何真实图片都会抛 UnicodeDecodeError,Google 多模态历史消息完全无法回放 2026-09-20 |
🟡 已提交,等待确认 |
| langchain-ai/langgraph ⭐42k | 向空 BinaryOperatorAggregate 通道的首次写入是 Overwrite 时,空通道分支把 values[0] 原样存入,通道值与 checkpoint 里留下的是 Overwrite 包装对象而非其载荷;后续读状态的消费者拿到包装对象后典型报 TypeError: 'Overwrite' object is not subscriptable。带 seed 的同型通道与 DeltaChannel 都已解包,只有这条空通道首写分支漏了检查 2026-09-20 |
🟡 已提交;修复 #9018 被 require-issue-link 机器人自动关闭(外部贡献者须先被指派到 issue),等待维护者指派 |
| langchain-ai/langgraph ⭐42k | update_state 对普通键写入 Overwrite 时,LastValue / LastValueAfterFinish / UntrackedValue 的 update 把 values[-1] 原样存入、不做 _get_overwrite 解包,状态里留下包装对象;同一写法在 BinaryOperatorAggregate 与 DeltaChannel 上都会正确解包,单值通道不一致 2026-09-20 |
🟡 已提交;修复 #9020 被 require-issue-link 机器人自动关闭(同上),等待维护者指派 |
| bytedance/deer-flow ⭐83k | load_codex_cli_credential 读 account_id 用 data.get("account_id") or tokens.get("account_id", ""),"" 兜底只覆盖「键缺失」——键存在但值为 JSON null 时 falsy 落穿到下一环,表达式求值为 None 灌进 CodexCliCredential(account_id=None),而同文件对缺失键早已断言 == ""。None 穿过加载器,在 model_post_init 的 account_id[:8] 处抛裸 TypeError: 'NoneType' object is not subscriptable,account 未知的凭据文件让所有 CodexChatModel 构造失败而非以未记账账号运行 2026-09-20 |
🟢 直接提 PR(未建 issue),已合并 |
| confident-ai/deepeval ⭐18k | DeepEvalAgent.__post_init__ 只调 patch_default_agent_runner_get_model()、从不调 super().__post_init__()——dataclass 的 __post_init__ 完全顶掉基类,基类的归一化整段不跑:非 GPT-5 模型也沿用 GPT-5 默认的 reasoning/verbosity 模型设置,dict 型 model_settings 永不被 _coerce_model_settings 归一 2026-09-20 |
🟢 直接提 PR(未建 issue) |
| confident-ai/deepeval ⭐18k | @observe 异步生成器分支的 __anext__ 把 yield 值直接还给调用方、从不落存,Observer.result 恒为 None;耗尽时 _finish() 触发的 __exit__ 只在 result 已设时才填 current_span.output——每个被完整消费的 async for 落库的 span/trace output 都是 None,而同步生成器分支(last_yielded_value 赋给 observer.result)早已正确,同一装饰器的两条分支相悖 2026-09-20 |
🟢 直接提 PR(未建 issue) |
| confident-ai/deepeval ⭐18k | update_trace_properties_from_span_data 对 ResponseSpanData 无条件解引用 span_data.response(读 .instructions / .output),而 Agents SDK 只在 trace_include_sensitive_data=True 时才填充该属性——RunConfig(trace_include_sensitive_data=False) 下每个 ResponseSpanData 都带着 response=None 进 trace processor,直接 AttributeError 2026-09-20 |
🟢 直接提 PR(未建 issue) |
| crewAIInc/crewAI ⭐59k | 外部 HTTPS URL 路径的 MCPToolWrapper._execute_tool 无条件返回响应文本、从不检查 MCP server 在成功 tools/call 响应上设置的 isError 标志——错误文本以裸 str 进框架,调用被记成成功:不触发 ToolFailureDetectedEvent、ToolOutput.has_tool_failures 恒 false;MCPNativeTool 对同一 server 回答早已返回 ToolFailure(reason=MCP_ERROR) 2026-09-20 |
🟢 直接提 PR(未建 issue) |
| run-llama/llama_index ⭐52k | ReActAgent.finalize 无条件剥掉最终响应里首个 'Answer:' 及之前的全部内容,默认该文本来自 ReActOutputParser 解析的 LLM 回合;但 return_direct 路径的最终响应由 aggregate_tool_results 直接取自工具输出——return_direct 工具的输出里含 'Answer:'(如 Sources:\n doc-1: pricing faq\nAnswer: 42 dollars per seat)就被静默截成残句才交给调用方 2026-09-20 |
🟢 直接提 PR(未建 issue) |
| vibrantlabsai/ragas ⭐16k | TextMessageChunkEvent 是 AG-UI「代替 start+content+end 三连」的续写简写:role 只在开 chunk 上有值、message_id 缺省表示续上已打开的消息,而 _handle_text_message_chunk 把每个 chunk 当完整自足的消息——getattr(event, "role", "assistant") 的默认值永不上场(字段存在、续写 chunk 上是 None),首个 chunk 之后的全部落进 unexpected-role 分支被丢弃,流式回答被截断成第一段 2026-09-20 |
🟢 直接提 PR(未建 issue) |
| bytedance/deer-flow ⭐83k | _extract_claude_code_credential 把 claudeAiOauth.expiresAt 原样拷进 ClaudeCodeCredential.expires_at 不做类型检查,is_expired 随即拿它和 0 比大小:字符串形式的 "1773430695128"、null、list、object 一律抛 TypeError: '<=' not supported between instances of 'str' and 'int'。异常无人捕获,凭据查找循环不会推进到下一个候选源——$CLAUDE_CODE_CREDENTIALS_PATH 里一个坏文件就足以让 ~/.claude/.credentials.json 永远读不到;它还顺着 ClaudeChatModel.model_post_init 冒出去,使该文件存在时所有模型构造都失败而非降级。而「缺 expiresAt」本会回落到默认 0 并被 is_expired 明确容忍,显式 null 同属「过期时间未知」却中止加载 2026-09-19 |
🟢 修复 #5591 已合并 |
| crewAIInc/crewAI ⭐59k | 工具参数 schema 用 inspect.Parameter.annotation 的原始值喂 pydantic.create_model,而 from __future__ import annotations(PEP 563)下它是纯字符串,pydantic 会拿调用方的命名空间去解析这个 ForwardRef(base_tool.py),调用方的名字在那里并不存在。这类模块里定义的工具能构造成功却永远调不动:首次调用抛 ValueError: Tool 'wallet' arguments validation failed: Wallet is not fully defined,把工具渲染进 prompt 也抛同义的 PydanticUserError。不限于用户自定义模型,Optional[str]、Literal["a","b"]、pathlib.Path 一样中招,main 上有六处 schema 构建点都读原始注解 2026-09-19 |
🟢 修复 #7626 已提交 |
| modelcontextprotocol/servers ⭐90k | memory server 的 KnowledgeGraphManager.saveGraph() 先写临时文件再 rename 覆盖 memory.jsonl,而 rename(2) 用临时文件的 inode 顶掉目标 inode,临时文件按进程 umask 建立,运维给记忆文件设的权限位就此丢失、下次变更后回到 0644。saveGraph 是所有变更(create_entities、add_observations、delete_*)的落盘路径,每一次写都会放松权限。这是 #4642 引入的回归(此前直接 writeFile 会保留已有文件的 mode);仓库里 src/filesystem/lib.ts 对同一套「临时文件 + rename」早已在 rename 后还原 origStats.mode & 0o777(#4115 已合并) 2026-09-19 |
🟢 修复 #4828 已提交 |
| confident-ai/deepeval ⭐18k | update_span_properties_from_generation_span_data 只在 if usage: 里绑定 input_tokens / output_tokens,却在守卫外无条件读它们。而 GenerationSpanData.usage 的契约类型是 dict | None = None,agents SDK 在模型调用失败(坏 API key、429、连接错误、超时)时正是以 usage=None 收尾,于是抛 UnboundLocalError;异常逃出 DeepEvalTracingProcessor.on_span_end 后被 SDK 吞掉,observer 永不退出:该 LlmSpan 一直留在 current_span_context 与 trace_manager.active_spans 里,进程后续所有 span 都挂到这个再也不会结束的陈旧 span 上。同文件的 update_span_properties_from_response_span_data 在同类守卫前已把可选局部量初始化为 None 2026-09-19 |
🟢 直接提 PR(未建 issue) |
| dottxt-ai/outlines ⭐16k | _ensure_json_quoted 用 String(f'"{term.value}"') 手工加引号,从不转义值本身,生成的正则只匹配未转义的文本。list[Literal['say "hi"']] 于是编出 \[("say\ "hi"")(,\ ("say\ "hi""))*\],而 json.dumps 产出的合法编码 ["say \"hi\""] 反而 re.fullmatch 不中——含 "、\ 或控制字符的字面量全部失效 2026-09-19 |
🟢 直接提 PR(未建 issue) |
| pipecat-ai/pipecat ⭐16k | PerplexityLLMAdapter 合并相邻同角色消息以满足 Perplexity 的严格交替要求,但合并时只把 content 搬过去就丢掉被吸收的消息,携带 tool_calls 的消息因此丢调用:[assistant(text), assistant(tool_calls: c1), tool(c1)] 变成 [assistant(text), tool(c1)],工具结果回答的是一个已经不在请求里的调用;[assistant(tool_calls: c1, c2), tool(c1), tool(c2)] 则把两个结果都落到 c1 上、c2 无人回答。而连续 tool 消息合并后,两个结果也只能挂到第一个调用的 id 上 2026-09-19 |
🟢 直接提 PR(未建 issue) |
| run-llama/llama_index ⭐52k | CodeActAgent.__init__ 就地修改调用方传进来的 tools 列表:tools = tools or [] 在列表非空时求值就是调用方那个对象([] 兜底只在 None/空列表时新建),紧接着的 tools.append(内部 execute 工具) 便写进了调用方的列表。两个 agent 共用一份工具列表时,每次构造都多出一个重复的 execute 工具,而调用方自己从没动过这个列表 2026-09-19 |
🟢 直接提 PR(未建 issue) |
| vibrantlabsai/ragas ⭐16k | AGUIEventCollector._handle_messages_snapshot 用 str(getattr(msg, "content", "")) 构造内容,把 ag_ui.core 文档化的两种内容形态都毁掉:AssistantMessage.content 是 Optional[str]、默认 None(工具调用轮的常见形态),str(None) 得到四个字符的 "None",这个值会经 build_sample → extract_response 进到 SingleTurnSample.response,指标拿字面量 None 当回答打分;UserMessage.content 是 Union[str, List[InputContentPart]],多模态时 str([TextInputContent(...)]) 得到的是 pydantic repr 而不是用户实际文本 2026-09-19 |
🟢 直接提 PR(未建 issue) |
| vibrantlabsai/ragas ⭐16k | llm_factory(..., mode=...) 文档把 mode 写成结构化输出的 instructor 模式(默认 Mode.JSON),_get_instructor_client() 也会把 None 归一成 Mode.JSON,但归一后的值只传给了部分分支:from_openai / from_litellm / _patch_client_for_provider 都带 mode=,而 anthropic 与 google 分支调 instructor.from_anthropic(client)、from_genai(client)、from_gemini(client) 时完全没有 mode 参数,perplexity 分支同样丢。两个 provider 都会走默认路径(auto_detect_adapter() 把 anthropic 与新 google.genai.Client 路由到 instructor 适配器),于是客户端停在 instructor 各自工厂的默认模式(from_anthropic/from_genai 是 Mode.TOOLS、from_gemini 是 Mode.MD_JSON)而非请求的、也是文档默认的 Mode.JSON 2026-09-19 |
🟢 修复 #3022 已提交 |
| crewAIInc/crewAI ⭐59k | Anthropic 扩展思考:开启 thinking 后,紧跟在 tool_result 前的 assistant 消息必须带上产生该 tool_use 的 thinking block,而 provider 只在纯文本返回路径上保存这些块——工具调用响应会提前 return,于是后续请求只回放裸 tool_use,缺了 API 要求的前置思考块(流式路径早在 get_final_message() 之后就捕获,同步路径是唯一的例外) 2026-09-18 |
🟢 直接提 PR(未建 issue) |
| SWE-agent/SWE-agent ⭐20k | DefaultAgent.forward_with_handling 把 requery 计数器同时当作循环卫兵,而循环体里包含首次模型查询:max_requeries=N 时最多只跑 N 次 forward(),即只给到 N-1 次重试;max_requeries=0 时循环体一次都不执行,self.forward() 从不被调用,run() 直接返回空轨迹的 exit_format。字段文档写的是“出错后重新查询的最大次数”,卫兵应无条件放行首次尝试 2026-09-18 |
🟢 直接提 PR(未建 issue) |
| e2b-dev/E2B ⭐14k | run_code(timeout=N) 实际在约 2*N 秒才超时:pyqwest 传输层把读写两个 deadline 相加当成一个整体 deadline 2026-09-17 |
🟢 修复 #1886 已提交 |
| SWE-agent/SWE-agent ⭐20k | BinaryTrajectoryComparisonConfig.comparison_temperature 文档说是覆盖项,实际从不生效,成对比较查询仍跑模型自己的 temperature 2026-09-17 |
🟢 修复 #1557 已提交 |
| dottxt-ai/outlines ⭐16k | LlamaCppTokenizer 丢掉所有 piece 超过 32 字节的 token:缓冲区不足时 llama.cpp 返回负的所需长度,而非大于缓冲区的值,n > size 的重试分支恒不可达 2026-09-17 |
🟢 修复 #2042 已提交 |
| mem0ai/mem0 ⭐66k | AWS Bedrock:非工具调用的 Amazon Nova 走 Converse API 发送,却用旧版 invoke_model 解析器解析,generate_response 恒返回 "Error parsing response" 2026-09-17 |
🟡 已提交,等待确认 |
| strands-agents/harness-sdk ⭐7k | 结构化输出:嵌套模型的最后一个字段是可选项时,该嵌套模型自身的 required 字段被整个丢掉 2026-09-17 |
🟢 修复 #4391 已提交 |
| livekit/agents ⭐14k | ChatContext.copy(tools=...) 只按 name 过滤 function item,而 FunctionCallOutput.name 可省略且默认为空串,成对的 function call + result 会从 provider 请求里静默消失 2026-09-17 |
🟢 已被上游修复(maintainer PR #7330 已合并,改为按 call_id 配对) |
| agno-agi/agno ⭐42k | BaseRunOutputEvent.from_dict 不重建 citations,往返后的 event 携带的是 dict,event.citations.urls 抛 AttributeError;它是 _HAND_SERIALIZED_FIELDS 里唯一被写却不被重建的字段 2026-09-17 |
🟢 修复 #10273 已提交 |
| modelcontextprotocol/servers ⭐90k | everything server 的 MCP_TINY_IMAGE 硬编码 PNG 里 iCCP 块带两个错校验和:块 CRC-32 写作 0x5321b951(实际 0x9004394b),块内 zlib 流的 Adler-32 尾写作 0x5d040ba2(实际 0x6f050bad),解压直接报 incorrect data check,按 PNG 规范校验的解码器会拒收整个文件。只改这 8 个字节,deflate 载荷与其余字节逐一不变 2026-09-17 |
🟢 直接提 PR(未建 issue) |
| confident-ai/deepeval ⭐18k | LLamaIndexHandler.prepare_to_drop_span 忽略 err 参数,抛异常结束的 span 被当作成功收尾:状态盖成 SUCCESS、没有错误信息、根 trace 也报 SUCCESS,而且从不调 remove_span,失败的 span 在进程生命周期内一直留在 active_spans 里。llama_index_instrumentation 只在 except BaseException 里调 span_drop(..., err=e),这条路径上的 span 全部是失败 span;同文件的 prepare_to_exit_span 与 LangChain 侧同名逻辑都已正确处理 2026-09-17 |
🟢 直接提 PR(未建 issue) |
| agno-agi/agno ⭐42k | _derive_entrypoint_schema 不看 param.kind,把 *args / **kwargs 当成普通属性、还因为没有默认值而标进 required,而调用路径本来就拒绝按名绑定这两个可变参数。已发布的 ClickUpTools.update_task(..., **kwargs) 因此对外声明 required: ["task_id", "kwargs"],模型照 schema 传 kwargs={"name": ...} 会让 PUT body 变成 {"kwargs": {...}},想改的字段根本没发出去;*args 则直接以 pydantic ValidationError 失败 2026-09-17 |
🟢 直接提 PR(未建 issue) |
| crewAIInc/crewAI ⭐59k | ToolUsage._format_result() 每 3 次(function_calling_llm 是大模型时 4 次)工具调用就往返回串里追加一次工具目录与格式提醒,而这个返回值同时是 executor 收到的结果和 agent.tools_results 里存的最终答案。工具标了 result_as_answer 时,agent 的答案变成「工具输出 + 一段写给模型看的提醒」,而提醒在此时已经没有收件人——工具结束了这一轮,之后没有任何东西会读它 2026-09-17 |
🟢 直接提 PR(未建 issue) |
| run-llama/llama_index ⭐52k | _generate_early_stopping_response 从 memory.aget() 取消息却没有先调 finalize。FunctionAgent / AgentWorkflow 的产出在 finalize 之前都留在 scratchpad 里,于是早停路径上的最后一次 LLM 调用只拿到原始用户消息加早停提示,模型被要求总结它从没见过的观测结果。这是唯一一处不 finalize 就读 memory 的地方(parse_agent_output 还专门写了注释说明必须反过来)。顺带丢掉最后一步携带 tool_calls 的 assistant 消息——早停触发时那些调用不会被执行,留着会让请求以「assistant tool_calls 之后没有对应 tool 消息」被 provider 拒收 2026-09-17 |
🟢 直接提 PR(未建 issue) |
| modelcontextprotocol/servers ⭐90k | sequentialthinking:branchId 撞上 Object.prototype 的键名(constructor、toString 等)时不去建分支,而是直接抛错 2026-09-16 |
🟢 修复 #4814 已提交 |
| camel-ai/camel ⭐18k | 非流式 ChatAgent:tool call 的 arguments 为空或被截断时抛原生 JSONDecodeError,整轮对话直接崩,而不是按解析失败降级 2026-09-16 |
⚪ 修复 #4339 被关闭(维护者认为暴露解析错误是预期行为,issue 同步标记 not planned) |
| confident-ai/deepeval ⭐18k | LangChain 回调类实现了 on_llm_error / on_tool_error / on_retriever_error,独漏 on_chain_error,chain 失败时 span 永不收尾 2026-09-16 |
🟢 修复 #3304 已提交 |
| vibrantlabsai/ragas ⭐16k | AgentGoalAccuracyWithoutReference 从不设置 output_type,metric.train() 的指令优化拿到空 schema 2026-09-16 |
🟢 修复 #3015 已提交 |
| mcp-use/mcp-use ⭐11k | Python 客户端 OAuth:initialize() 遇到过期 access token 直接丢弃,已落盘的 refresh token 从不使用 2026-09-16 |
⚪ 修复 #2561 被关闭(维护者当前只收 TypeScript 侧与亲身踩到的问题) |
| openai/openai-agents-python ⭐30k | function_schema 把首个 keyword-only 的 RunContextWrapper 参数当成 context,导致每次调用都按参数位置错位被拒 2026-09-16 |
⚪ 修复 #5056 已关闭(未合并) |
| crewAIInc/crewAI ⭐59k | Responses API 流式在 available_functions 为 None 时丢掉 tool call,只返回空字符串 2026-09-16 |
🟡 社区 PR #7502 修复中 |
| bytedance/deer-flow ⭐83k | ~/.claude/.credentials.json 的容器非空时,Claude 凭据加载器抛 AttributeError 2026-09-16 |
🟢 修复 #5494 已合并 |
| agno-agi/agno ⭐42k | BaseRunOutputEvent.from_dict 用 model_validate 重建 images/videos/audio,base64 媒体不会被解码 2026-09-16 |
🟡 已提交,等待确认 |
| run-llama/llama_index ⭐52k | CodeActAgent 在 codeact_agent.py:110 抛 UnboundLocalError,模板缺 code_act_system_prompt 时整个 agent 不可用 2026-09-16 |
🟡 社区 PR #23084 修复中 |
| Arize-ai/phoenix ⭐12k | Anthropic prompt adapter 忽略 str 型 system message 里的 {{ variables }},发给模型的是未渲染的模板 2026-09-16 |
🟢 已被上游修复(maintainer PR #16316 已合并) |
| modelcontextprotocol/servers ⭐90k | git_diff 拒收修订范围:git_diff(repo, "main..feature") 抛 BadName,而 git diff main..feature 本身是合法命令、工具也把 target 原样透传。根因是 CWE-88 防注入加固新加的 repo.rev_parse(target) 只解析单个对象名,main..feature / main...feature / HEAD~1..HEAD 被当成一个 ref 名直接否掉。改为按 .. / ... 拆开分别校验两端,范围可用,- 前缀检查与不可解析的端点仍被拒 2026-09-16 |
🟢 直接提 PR(未建 issue) |
| confident-ai/deepeval ⭐18k | AmazonBedrockModel(region_name=...) 被静默丢弃:别名表里 region 声明了 ["region_name"],normalize_kwargs_and_extract_aliases 会把 region_name 从 kwargs 里 pop 进 alias_values["region"],但 __init__ 只把 model 与 *_token_cost 拷回去,region 没有对应的拷回。于是要么回落到 AWS_BEDROCK_REGION、调用方传的值无声消失,要么该环境变量未设时抛「缺少必需参数」——后者正是 #2395 报的回归,当时的修复补了别名表却漏了这一步 2026-09-16 |
🟢 直接提 PR(未建 issue) |
| camel-ai/camel ⭐18k | 同步流式 ChatAgent 在流式工具调用超过 tool_execution_timeout 时抛未捕获的 TimeoutError 中止整个 step,而不是按契约降级 2026-09-15 |
🟢 修复 #4337 已提交 |
| crewAIInc/crewAI ⭐59k | CrewStructuredTool.ainvoke() 在 func 是异步工具的同步包装时返回未 await 的协程,异步 agent 把 <coroutine object ...> 当成工具结果喂给 LLM 2026-09-15 |
🟡 社区 PR #7475 / #7481 修复中 |
| crewAIInc/crewAI ⭐59k | Azure 流式补全把并行 tool call 的增量按数组位置归并,首个 chunk 的 id 会配到最后一个 chunk 的 name 上、参数拼错 2026-09-15 |
🟢 修复 #7487 已合并 |
| mcp-use/mcp-use ⭐11k | OpenAI Responses 流式按 call_id 索引工具调用缓冲,但事件携带 item_id,导致工具调用事件永不发出、stream() 零 step 2026-09-15 |
🟢 修复 #2551 已提交(同 issue 另有社区 PR #2556,已关闭) |
| langchain-ai/deepagents ⭐30k | compact_conversation 跳过 _offload_inline_media,摘要时内联图片从存档中丢失,而自动摘要路径会保留 2026-09-15 |
⚪ 该仓库禁止程序化提交,issue 被自动关闭(未重开) |
| PrefectHQ/fastmcp ⭐28k | LocalProvider.get_tasks() 跳过 provider 自身的 transform,add_transform(Namespace(...)) 会让后台任务注册失效 2026-09-15 |
🟢 修复 #5117 已合并 |
| langchain-ai/langgraph ⭐42k | ToolNode 拒绝合法的 list[Command] 返回:终止用的 ToolMessage 是 dict 形式或包在 list 形式的 Command.update 里时校验不通过 2026-09-15 |
🟡 已提交,等待确认(社区 PR #8946 已关闭未合并) |
| mastra-ai/mastra ⭐28k | 顶层数组结构化输出对基元数组恒返回 [],静默丢结果 2026-09-15 |
🟢 已被上游修复(PR #24055) |
| confident-ai/deepeval ⭐18k | KimiModel.__init__ 在所选模型没有登记定价时抛 TypeError: float(None),模型根本无法实例化 2026-09-15 |
🟢 修复 #3288 已提交 |
| mem0ai/mem0 ⭐66k | AWS Bedrock 旧版 Titan 响应恒解析为空字符串:_parse_response 读 Titan 从不返回的 completion 字段 2026-09-15 |
🟡 已提交,等待确认(社区 PR #7341 / #7343 均已关闭未合并,缺陷仍在) |
| openai/openai-agents-python ⭐30k | Chat Completions 流式中迟到的 reasoning item 复用 output_index 0,与 response.completed.output 的索引脱节 2026-09-15 |
⚪ 维护者未接受并关闭(合成流未证明受支持的 provider 会发出该顺序,需要真实 provider 的 wire 证据) |
| vibrantlabsai/ragas ⭐16k | AG-UI 的 MessagesSnapshot 转换丢掉每个 tool call 的 name 与 arguments,回读成 ToolCall(name='unknown_tool', args={}) 2026-09-15 |
🟢 修复 #3011 已提交 |
| huggingface/smolagents ⭐29k | Model.to_dict() 丢 custom_role_conversions(属性名少个 s,hasattr 恒假)与 client_kwargs 里的端点配置,保存的 agent 重新加载后连回默认端点 2026-09-15 |
🟡 已提交,等待确认 |
| langchain-ai/langchain ⭐147k | Runnable.as_tool() 重建 TypedDict schema 时把所有键标成必填,工具因此拒收 runnable 本身接受的输入 2026-09-15 |
⚪ 该仓库禁止程序化提交,issue 被自动关闭(未重开) |
| openai/openai-agents-js ⭐3.8k | getAllMcpTools 只拦截跨 server 的重名工具,同一 server 内归一化后同名的两个工具会一起返回 2026-09-15 |
🟢 修复 #1935 已获维护者 approve,等待合并 |
| modelcontextprotocol/servers ⭐90k | 两个会话使用同名文件时,后注册的资源会把前一个会话的资源驱逐 2026-09-15 |
🟡 社区 PR #4809 修复中 |
| modelcontextprotocol/servers ⭐90k | everything server 的异步 sampling / elicitation 演示工具,对在最后一次允许的轮询里已达终态的任务报超时:轮询循环最多执行 MAX_POLL_ATTEMPTS 次,所以它被允许发出的最后一次轮询完全可能观察到终态,而紧随其后的超时分支只看尝试计数,存在 off-by-one 2026-09-15 |
🟢 直接提 PR(未建 issue) |
| openai/openai-agents-python ⭐30k | 非流式 run 正常跑完后 RunResult.to_state() 不带 trace 信息,用该 state 恢复会新开一条 trace,一次逻辑运行被拆成两条:AgentRunner._run_impl 的多个 RunResult 构造点里,完成路径是唯一没有赋值 result._trace_state 的(其余三处都已拷贝),是 #2540 的剩余分支 2026-09-15 |
⚪ 维护者未接受并关闭(认为完成的 run 可以用 group_id 或显式 trace 关联,没有具体工作流需要复用该 trace 身份) |
| bytedance/deer-flow ⭐83k | Human Input Card 的回执被 MCP 路由自动提升忽略:is_real_user_message 对这类隐藏消息没有 carve-out,路由关键词只出现在用户澄清回答里时延迟 MCP 工具永不提升 2026-09-14 |
🟢 修复 #5426 已合并 |
| UKGovernmentBEIS/inspect_ai ⭐2.8k | 工具参数里的嵌套 @dataclass/TypedDict 字段带默认值时被从 None 强转:tool_param 按声明字段重建对象而非用收到的数据,模型省略 schema 已标为非必填的字段后,int 默认值抛 ToolParsingError、str 默认值被静默换成字面量 "None"、list 默认值抛 TypeError 终止样本 2026-09-04 |
🟡 已提交,等待确认(已有贡献者复核确认可复现) |
| strands-agents/harness-sdk ⭐7k | OpenAIModel(Responses,TypeScript)在 function call 被 max_output_tokens 截断时报 toolUse 而非 maxTokens,Python 侧同款缺陷的 TS 版 2026-09-04 |
🟡 修复 #4159 已获维护者 approve,仍卡首次贡献者 CI 审批门禁 |
| agno-agi/agno ⭐42k | 同步工具执行路径把 0 / False / [] 这类有意义的假值结果当成空结果发给模型,异步路径却会发 "0" 2026-09-04 |
🟢 修复 #9948 已合并 |
| bytedance/deer-flow ⭐83k | MindIE 工具模式下的异步流式丢 token usage 2026-09-04 |
🟢 修复 #5195 已合并 |
| agentscope-ai/agentscope ⭐32k | AnthropicChatModel 流式解析把一次响应里的多个 thinking block 合并成一个,只保留最后一个 signature 2026-09-03 |
🟢 社区 PR #2495 已合并,已用我的复现脚本验证 |
| pydantic/pydantic-ai ⭐20k | MistralModel 流式模式下注册了 output tool 时,模型回复纯文本会抛裸 ValueError 或丢文本 2026-09-03 |
🟡 维护者已认领修复 |
| strands-agents/harness-sdk ⭐7k | OpenAIResponsesModel 在 function call 被 max_output_tokens 截断时报 tool_use 而非 max_tokens,截断的工具调用被直接执行 2026-09-03 |
🟢 修复 #4139 已合并 |
| OpenBMB/StaffDeck(实习团队项目) | 报销额度查询对不存在的员工返回"成功"结果 2026-09-02 |
🟢 修复 #258 已提交 |
| OpenBMB/StaffDeck(实习团队项目) | parse_bid_award 把 TL 判定分数直接写进 bid.score,没有 parse_bid_scores 那道 0–10 夹取。越界的判定分(如 12.0、-3.0)因此进入持久化的 bid 记录,并流入 candidate_hp——HP 损失按 10 - score 计算,超过 10 的分数能把已被淘汰候选人的 HP 拉回零以上。同一个 bid.score 字段由两条解析路径写入,只有其中一条夹取 2026-09-02 |
🟢 直接提 PR(未建 issue) |
| huggingface/smolagents ⭐29k | provider 为 <end_plan> 返回结构化内容(内容块列表)时,_generate_planning_step 把整个 list 直接塞进 plan 的 f-string,而 plan 是字符串字段,于是计划文本变成 list 的 Python repr 而不是可读文本;生成计划与更新计划两条分支都受影响,而这段文本正是会被记日志、被下一次模型调用读回的内容 2026-09-02 |
🟢 直接提 PR(未建 issue) |



