Repository navigation
feat(manager-context): expose bound host surfaces and route execution identity - #7929
Conversation
… identity Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
loopx-agent
left a comment
There was a problem hiding this comment.
Reviewer: model_agent | model=gpt-6.1-sol | provider=OpenAI | runtime_reported | reasoning_effort=max
Request changes conclusion (author-owned PR; GitHub blocks formal self-review)
[P2] 在公开宿主标签前过滤私有值。 已接受的绑定包含路径形状的 host_surface,受限受众通过 view=agents 或公开 goal-portfolio agents 导出目录。 绑定 normalizer 只限制长度和空白,不证明 public-safe;新 host_surfaces 未过滤便进入目录、搜索和记录,路径形状的私有值被公开投影,基线没有该泄漏。 在构建搜索与输出集合前复用既有 public-safe 校验,屏蔽不安全宿主值并保留未知/不可公开的真实状态;不能把 compact token 当作公开安全证明。
动机 / Motivation
需要按宿主类型找到既有 Agent,并了解其最近执行模型的管理会话用户。 过去目录不能按绑定宿主搜索,已结束的 Codex Turn 也不提供执行身份;本 PR 从现有绑定与 rollout 元数据派生这些只读信息。 正常宿主搜索和已完成 Turn 的历史身份可读,严格活跃调用仍拒绝已完成 Turn;但新宿主集合会输出路径形状的私有绑定值。 本次不证明 Agent 在线、可执行、已采用指令或获得发送、启动、安装和合并权限。
改动思路 / Approach
绑定、provider IO 和 TS 元数据投影分工可保留;应在既有公开投影处复用安全校验,无需新增权限或目录服务。 当前 PR 的有用边界是受众内宿主发现与所选路由的历史执行证据。 目录复用 summarize_agent_binding_routes;身份仍由 readCodexExecutionIdentity 投影,Python 只发现 store。严格当前会话与跨 home 历史观察保留不同 scope,不能互相替代。 选择现有 owner 的显式变体可保持回滚与调用方可读性;此次不要求整个长期监督或管理协作 roadmap 一并完成。小补丁也要把真正使用者从入口到结果的路径接通,不能只凭字段存在或 suite 通过判断交付。
具体改动 / Changes
完整审查 9a1ad2d881bc7f9a6c0e8c7234ee2a5bbb75764c 相对实际共同基线 58a85d0aae8d35fdcbb75f5c93a25d38d5f5a8e9,7文件 +135/-21。 spec_ref=loopx/capabilities/manager_context/README.md,spec_revision=58a85d0aae8d35fdcbb75f5c93a25d38d5f5a8e9;修改前规范的 Manager-directed Core inspection 是独立验收依据。原受众和 locator_only 边界保留,但不公开私有宿主信息的要求 not_met。
agent_page从完整受众注册目录读取绑定,在分页前建立 host_surfaces 和搜索索引;这里将“紧凑字符串”误当成公开安全字段。原_normalized_host_surface只校验长度和空白;已有 public-safe validator 会拒绝独立反例输出。readCodexExecutionIdentity只读选中 home 内匹配 thread 的有界 rollout 元数据;显式历史选项给已结束 Turn 返回 active_turn_verified=false,不读取 SQLite 的可变模型偏好。resolve_peer_host_route先观察,再复查 registry 与 exact binding;独立撤销/替换反例返回 ambiguous,未附执行身份或获得发送权。
对主干的风险 / Risks
独立运行五个完整 owning Python 模块 240 PASS、两个 TS 文件 18 PASS,TS typecheck、修改 Python 的 Ruff 和标准 premerge 6 direct /18 selected 通过。额外用同一合成 registry 做不可变 base/head 对照:42个注册项中正常宿主查询能找到最后一项;受限 ManagerInspection 与真实 goal-portfolio CLI 在 head 都输出路径形状的宿主值,base 均未暴露,现有 public-safe validator 对 head 输出拒绝。原宿主地址和跨 Goal 数据仍未输出,因此 finding 定位于新宿主标签集合,不能用其他字段安全掩盖它。
另用真实 SQLite/JSONL 与生产 TS reader 验证已完成 DeepSeek 身份 active=false、strict caller no_active_turn、可变模型偏好不参与身份;源 registry/store/rollout 字节保持。观察后替换合成 registry 的竞态被既有复查拒绝。该竞态只在隔离回调后注入变更,没有 live host、投递或模型调用;尚未把所有未来受众、跨 home 重复 thread 和安装后 UI 行为都证明。
没有查询、轮询或等待 GitHub CI。独立探针是合成隔离验证;尚无修复后 head,不能称 blocker 已解除。
我的整体评价 / Verdict
REQUEST_CHANGES。 在构建搜索与输出集合前复用既有 public-safe 校验,屏蔽不安全宿主值并保留未知/不可公开的真实状态;不能把 compact token 当作公开安全证明。 绑定、provider IO 和 TS 元数据投影分工可保留;应在既有公开投影处复用安全校验,无需新增权限或目录服务。 本次改动是既有 Agent 目录数据与路由证据投影,没有布局、样式或独立设置页面改动。 已安装宿主和模型消费未验证;未观察独立页面的布局变化。 维持原权限、停止条件和长期开放任务;不从本次审查推断模型采用或净收益。同账号按 COMMENTED 承载请求修改;不是正式 self-approval 或合并授权。
English verdict: REQUEST_CHANGES — exact head 9a1ad2d881bc7f9a6c0e8c7234ee2a5bbb75764c; the new host_surfaces projection publishes private-shaped binding values through both manager discovery and CLI export. Reuse public-safe filtering before search/publication and rerun the affected public paths.
| host_surfaces = sorted( | ||
| { | ||
| c["host_surface"] | ||
| for c in bindings["candidates"] | ||
| if isinstance(c.get("host_surface"), str) and c["host_surface"] |
There was a problem hiding this comment.
[P2] 在公开宿主标签前过滤私有值。 已接受的绑定包含路径形状的 host_surface,受限受众通过 view=agents 或公开 goal-portfolio agents 导出目录。 绑定 normalizer 只限制长度和空白,不证明 public-safe;新 host_surfaces 未过滤便进入目录、搜索和记录,路径形状的私有值被公开投影,基线没有该泄漏。 在构建搜索与输出集合前复用既有 public-safe 校验,屏蔽不安全宿主值并保留未知/不可公开的真实状态;不能把 compact token 当作公开安全证明。
Summary
host_surfaces(without host thread addresses) on each row ofview=agents(loopx/capabilities/manager_context/discovery.py), and includehost_surfacesinquerymatching so the Steward can discover agents by bound host surface (e.g.agy,codex-app,deepseek-harness-native) without reading host stores.readCodexExecutionIdentity(loopx/control_plane/runtime/execution_identity.ts) with opt-inallow_completed_turn: true(reportingactive_turn_verified: falsewhen the latest recorded Turn has finished) and public provider recognition fordeepseek(DeepSeek), while keeping active-turn callers (pr-review) strict and never reading mutable SQLite preferences as execution evidence.observe_codex_thread_execution_identity(loopx/codex_app_thread_activity.py) and attachexecution_identityon resolved Codex peer routes inresolve_peer_host_route(loopx/control_plane/collaboration/peer_host_route.py,view=agent_route/resolve-peer-route) after post-observation registry verification.Verification
node --test tests/control_plane_ts/execution_identity.test.ts tests/control_plane_ts/effect_runtime_handler_loading.test.ts(18 passed)uv run --extra test python -m pytest -q tests/test_manager_agent_discovery.py tests/control_plane/test_peer_host_route.py tests/test_host_thread_activity.py tests/test_chat_manager_inspection.py tests/test_manager_ssh_evidence.py(240 passed)