mirror of
https://gitcode.com/JianFeeeee/HomeAgent.git
synced 2026-10-04 00:03:59 +00:00
fix(webui): 运行态面板不再闪、通道分配带归属(含驻留子)、改图形化
三个用户可见问题,逐个说明根因与改法。 1) 首页「一闪一闪」——运行态每 3s 轮询一次,renderRuntime 无条件重建 #rt-panel 的 innerHTML:数据没变也把整块 DOM(含各级条的 transition) 推倒重来。改法:缓存数据签名(**不含 uptime**——它每秒都变,带上等于没缓存), 签名相同直接 return,一个字节都不动。另:renderOverview 会整块重建 #rt-panel(面板本身是空的),所以那里必须让签名失效,否则空面板填不上。 2) 通道分配只显示内核/根 agent,看不见驻留子——根因是状态面只暴露了设备能力 (KernelStatus.Channels,来自 iom.ListChannels),而「这条输入归谁」是 ChannelRegistry 的属性(InputChannel.Owner/Capacity/Output),从未出过内核。 而登记表本来就是根 agent 与驻留子**共用同一份**,所以数据一直都在,只是没画。 改法:KernelStatus 新增 InputChannels(+ sdk.InputChannelInfo), /api/v1/runtime 带出 input_channels;前端把它按 owner 分进「归属容器」, 驻留子即使一条 inputch 都没划到也照样出现在图里(否则"子存在但看不见" 与"子不存在"无法区分),并显示其 allowed_outputs / 轮次 / 上下文满标记。 3) 「这些信息明明可以图形化」——四级中断的登记/抢占由纯文本改成并排迷你条; 通道分配用归属容器 + 容量滑块(轨道/填充/把手/读数),并把回程通道、 注册插件做成胶囊标签。设备能力拓扑(原有)保留。 验证:go build/vet 干净;go test ./internal/agent/... ./internal/plugin/... ./internal/sdk/... ./cmd/... 全绿;node --check dashboard.js 语法通过。 TestRuntimeEndpoint 扩展为同时钉住 input_channels 的归属与「驻留子划走的那条」。
This commit is contained in:
@ -25,6 +25,13 @@ type KernelStatus struct {
|
||||
Plugins []PluginInfo `json:"plugins"`
|
||||
Tools []ToolDef `json:"tools"`
|
||||
Channels []ChannelInfo `json:"channels"`
|
||||
// InputChannels 是 inputch 的**登记与归属**视图(谁注册、划给了哪个 agent、
|
||||
// 容量、默认回程输出)。
|
||||
//
|
||||
// 为何单列:Channels 只描述设备侧能力,回答不了「这条输入归谁」。驻留子 agent
|
||||
// 出现之后,归属才是运行态里最该看见的东西——只画设备能力,等于把
|
||||
// 「输入路由发生在进内核之前」这条设计事实藏了起来。
|
||||
InputChannels []InputChannelInfo `json:"input_channels"`
|
||||
|
||||
Memory MemoryStatus `json:"memory"`
|
||||
Knowledge KnowledgeStatus `json:"knowledge"`
|
||||
@ -156,6 +163,22 @@ type ChannelInfo struct {
|
||||
CapsText string `json:"caps_text,omitempty"`
|
||||
}
|
||||
|
||||
// InputChannelInfo 是一条 inputch 的登记与归属视图。
|
||||
//
|
||||
// 字段取自 agent/io 的 ChannelRegistry(根 agent 与驻留子**共用同一份**登记表),
|
||||
// 因此它天然覆盖驻留子的通道分配。
|
||||
type InputChannelInfo struct {
|
||||
Name string `json:"name"`
|
||||
// Plugin 是注册它的插件名(归属可追溯)。
|
||||
Plugin string `json:"plugin,omitempty"`
|
||||
// Owner 是被划给的 agent id;"" = 未分配,归根 agent / 内核默认。
|
||||
Owner string `json:"owner,omitempty"`
|
||||
// Capacity 是该 inputch 的队列容量;0 = 用内核默认值。
|
||||
Capacity int `json:"capacity,omitempty"`
|
||||
// Output 是该 inputch 的默认回程输出通道;"" = 由来源决定。
|
||||
Output string `json:"output,omitempty"`
|
||||
}
|
||||
|
||||
type MemoryStatus struct {
|
||||
Available bool `json:"available"`
|
||||
EntityCount int `json:"entity_count"`
|
||||
|
||||
Reference in New Issue
Block a user