Repository navigation
feat: TUI 输入栏全链 + 供应商选择器 + 配置体系修复(TASK056-058) - #439
Merged
Merged
Conversation
liuqihonggit
enabled auto-merge (squash)
October 20, 2026 22:23
… 字段并暴露 RefreshSessionInfo 重发 session_info(applyModel 委托组合 ApplyModel+刷新),而非让 ModelPickerEngine 依赖宿主刷新逻辑;测试用真实 FastModeService 验证 FIFO 确定性(SetPrimaryModelCmd 先于查询命令入队)
…策: SessionInfo 末尾可选参数零破坏旧调用,Vendor 空退化无前缀(旧引擎兼容)
…决策: 交互结构照抄 ModelPicker/权限对话框模态先例(ReplShell 第四交互态优先级居搜索之后),可导航判定用 ICursorNavigable 空标记接口(banner/spinner/对话框排除),高亮走 ScrollBox 渲染后整块背景覆写 MessageActionsBackground(前景保留,对齐基准消息选中语义),分组展开落 Coordinator.IsExpanded(展开全量渲染突破 min(10,n) 窗口+窗口归零,对齐基准 Enter 展开 grouped_tool_use→verbose 拆条语义);测试 24 个全绿+全量 775 通过
…ubagentEntry 不可变 record 追加字段(RecentActivities+HiddenActivityCount,Coordinator RecordToolUse 环形追加丢最旧),渲染展开态每条活动独立行复用 RenderSubagentActivityRow(零活动 Initializing/Done 兜底单行),容量3对齐基准单代理折叠尾部窗口语义;全量 778 通过
…erEngine 泛化为 command/noun 参数化的 CommandPickerEngine(Attach 递归传播内层同族绑定),vendor 复用 Coordinator/Dialog/模态路由零新增状态机;切换链对齐 GUI SetVendorAsync(ProviderConfig.Vendor/ModelId 原地改保 DI 单例引用不变)+ ModelPickerAssembly.CurrentProvider 改读 WorkflowConfig 单例使 /model 清单跟随供应商
…ovider 回退 AddConsole,Error 日志直写 stderr 与 inline 渲染交错破坏相对光标追踪,旧帧输入框线对/footer 被错位固化多条残影;TUI 注入自研 SilentLoggerProvider 全静默(错误反馈已有 Error 事件链 ● 回合执行失败,不依赖引擎日志),跨 modules 包版本统一下 NullLoggerProvider 解析不可靠故自研;另 Tavily SearchDepth 外部协议值撞 ApiLoggingLevel 枚举名系分析器预存误报(增量编译未暴露),SuppressMessage 豁免
…| 决策: McpInitModule.ConfigureAsync 不再阻塞等八插件 WhenAll 墙钟(实测 mcpInit 插件 MCP stdio 握手 1.6s 为关键路径),后台化经 McpPluginBootstrapHandle DI 单例绑定宿主 Dispose(退出竞态防护——先取消加速断链再无超时等待,对齐资源规范禁超时),钩子前取消短路防 LoadXxxSafeAsync 吞取消致 WhenAll 误判全成功后碰已释放 IServiceProvider,八个重复 SafeAsync 收敛为泛型 LoadPluginSafeAsync(取消静默+失败记日志);实测 CreateAsync 2435ms→1221ms 省 50%(热稳态总启动 ~2.5s→~1.6s);测试 11/11 绿 + host.tests 1362 + NativeTui.Tests 782 + Host.Tests 52 全绿;AGENTS.md 增补临时日志归置(.xxx/)+本地 Debug 不做 AOT 两条规矩
…记 disposed 再释放 Handle 单例,插件 InitializeAsync 在窗口内服务解析撞 ObjectDisposedException;修法落 AsyncHostWrapper.DisposeAsync(engine 库内收口,CLI/GUI/TUI-Host 三宿主统一),容器存活期内取消+无超时等待后台链完成;同步 Dispose 保持纯透传(analyzer 禁 fire-and-forget、容器自身释放单例兜底,主路径 await using);实测 selftest stderr 零 fail 零 ObjectDisposed 退出码 0;wrapper 4 新测试 + host.tests 全量 1366 绿
…走 StartupErrorPrinter 结构化面板(两级 profile 覆盖链真实探测 + auth key 状态 + 环境变量 + 三条修复路径,退出码 2 区分配置错误),Probe 纯函数注入 JSON 文本测试友好 + ProbeLive 真实读取;交互内层 catch 放行 ConfigurationException 冒泡(raw mode 先由 using 恢复再打印,终端状态干净)
…annel 打通 QueryEngine 主代理路径(发射侧零新代码——AgentStreamExecutionMiddleware 等三点已在 Emit),根因三断点=作用域(AsyncLocal 无 EnterScope)+IEventConsumer 协议(无子代理回调)+引擎侧 BridgeEvent DTO(无三事件);四层改造按 ADR 0143 先本体后投影次序(L3协议→L1通道→L2传播→L4投影)五批次渐进实施;方案B轮询否决(延迟/非增量/双实现三违)
…) | 决策: 根因是 SettingsJsonModelWriter 走拆分前旧路径把合并模型整体写回 settings.json 内联 vendor 块(29KB+ 55 模型),与 TASK054 P6 拆分布局(VendorModelsFile DTO 已存在)分裂成两套写入;改造 WriteAsync 逐供应商写 models.json 子文件 + baseDir 构造注入(测试不碰真盘),settings.json 零触碰(current 指针与模型解耦),ModelFetchStartupService 签名跟随 + 重试日志措辞更新
…) | 决策: 协议本体先行(ADR 0143 先本体后投影铁律——L3 批次),IEventConsumer 增 OnSubagentStarted/OnSubagentToolUse/OnSubagentFinished 三方法走 DIM 默认空实现(既有 8+ 实现方零改动,默认实现须经接口类型调用的既有坑已规避);ProcessEvent 对 IsSubAgentActivity(AgentId 非 null)前置分流 RouteSubagentEvent——AgentStarted→身份三元组、AgentFinished→成败(AgentSuccess 成功语义取反为 isError)、带 AgentId 工具事件→OnSubagentToolUse(tokenGain 恒 0 兜底,批2 通道接通后填真实值);普通事件零回归(AgentId null 走既有 Switch 路径);5 新测试 + host.tests 1371 + abs.tests 694 全绿 + engine/cli/Host 三链编译绿
liuqihonggit
added a commit
that referenced
this pull request
Oct 20, 2026
…委托 guard 公共链 SettingsLoader.LoadUserSettingsFromDirAsync(指针+providers_llm 子文件单点合并),对齐 TUI 同源消费;红测试复现 NRE 后修复,GUI 全量 253 绿 + 真机 exe 验证目录恢复 6 groups
liuqihonggit
added a commit
that referenced
this pull request
Oct 21, 2026
## Summary - 修复 #439 纯指针形状引发的 GUI 启动期模型目录 NRE:删除 GUI 侧第二套 settings.json 手写解析,委托 guard 公共链 SettingsLoader.LoadUserSettingsFromDirAsync(指针 + providers_llm 子文件单点合并),对齐 TUI 同源消费 - ADR 0145:GUI 从 modules/apps/gui 迁至顶层 native_gui/(与 native_tui 平级同构): - NativeGui.Core(纯 net10.0):web_host 协议层 19 类 + hosting 契约 + persistence + webview 协议 + theming 数据面;App.LogDiag 抽 GuiDiag(39 处批量替换);GuiPalette 渲染面拆 GuiPaletteRenderer - NativeGui.Host(windows TFM):WebView2 四件套 + Avalonia 表现层 + JccChatSession 引擎装配 - 测试整体迁 native_gui/tests(层级 props 承接 Test.Sdk/FluentAssertions 注入) - Gui.slnx 三段登记 / module.slnx 删 gui / CI 三 workflow 路径更新(yaml 校验过) - 验证:编译 0 警告 0 错误 + 253/253 单测绿 + exe 真机全链路(listening / 目录 6 组 / 引擎 attach / 前端 RPC 交互)
liuqihonggit
added a commit
that referenced
this pull request
Oct 21, 2026
…数(IGhCacheService.EvictApiAsync 通道,绕 detail TTL——PR state 缓存误导/CI 状态冻结根因)②watch 轮询每轮强制 evict(tracker.CacheDisabled 依赖 AsyncLocal,直调场景由此兜底)③watch 完成判定恒真 bug(Contains("进行中") 改精确子串 ", 0 进行中,",fail-fast 同修——原判定永不提前返回)④CLI 单次命令等插件后台链 Completion(八插件后台化后 registry 同步仅 15 工具、gh_pr_* 全缺失——旧 exe 为 #439 前编译故未暴露,本次部署后现形)⑤CLI fake 加 CallLog 诊断设施。mcp.tests 1038 + Host.Tests 1371 绿;真机验证 --refresh 可用 + mcp_list 528 + PR 442 重试 27/27 绿已合入
liuqihonggit
added a commit
that referenced
this pull request
Oct 21, 2026
…数(IGhCacheService.EvictApiAsync 通道,绕 detail TTL——PR state 缓存误导/CI 状态冻结根因)②watch 轮询每轮强制 evict(tracker.CacheDisabled 依赖 AsyncLocal,直调场景由此兜底)③watch 完成判定恒真 bug(Contains("进行中") 改精确子串 ", 0 进行中,",fail-fast 同修——原判定永不提前返回)④CLI 单次命令等插件后台链 Completion(八插件后台化后 registry 同步仅 15 工具、gh_pr_* 全缺失——旧 exe 为 #439 前编译故未暴露,本次部署后现形)⑤CLI fake 加 CallLog 诊断设施。mcp.tests 1038 + Host.Tests 1371 绿;真机验证 --refresh 可用 + mcp_list 528 + PR 442 重试 27/27 绿已合入
liuqihonggit
added a commit
that referenced
this pull request
Oct 21, 2026
## Summary
- gh_pr_checks / gh_pr_view 加 --refresh:IGhCacheService.EvictApiAsync
通道绕 detail 10min TTL(根因:PR state 缓存误导——已合并仍显示 open;CI 状态冻结——run 已
cancelled 仍 pending)
- watch 轮询每轮强制 evict(双保险:tracker.CacheDisabled 依赖 AsyncLocal
存在,直调场景由此兜底)
- watch 完成判定恒真 bug:Contains("进行中") 在汇总行 "0 进行中" 下恒真 → 永不提前返回、fail-fast
恒触发;改精确子串 ", 0 进行中," / ", 0 失败,"
- CLI 单次命令(gh/mcp_call/mcp_list)等插件后台链 Completion:八插件后台化后 registry 同步仅
15 工具、gh_pr_* 全缺失(旧部署 exe 为 #439 前编译故未暴露,重部署后现形——mcp_list 15→528)
- 验证:mcp.tests 1038 + Host.Tests 1371 绿 + 4 个 refresh 守卫测试;真机 --refresh
可用、PR #442 重试 27/27 绿已合入 main
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary