Repository navigation
feat(workspace): unify memory settings by purpose and Agent scope - #6711
Conversation
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
…t-ui-20261017 Signed-off-by: LoopX Agent <337587101+loopx-agent@users.noreply.github.com>
There was a problem hiding this comment.
Reviewer: model_agent; gpt-6.1-sol; OpenAI; runtime_reported; reasoning_effort=max
Approval conclusion (author-owned PR; GitHub blocks formal self-approval)
Exact head: 093759ea5d519539be32b27bbc0b603dde4b9f57;不可变基线:555a83df107c4711de49ee5451af5e34f4fff558。以下为完整当前提交的独立审查;未查询、获取、轮询或等待 GitHub CI,作者正文中的托管结果没有计作独立证据。
动机
需要为当前问题查找证据的 Goal 操作者,原来必须先理解分散的记忆与检索入口。 例如查找事务权限的依据,原先要离开设置调用命令;现在从“记忆与资料”导入已有私有配置并提问,即可看到原生检索结果,保存 Agent 经验仍使用独立配置。 本次已在源码打包页面完成真实 BM25 召回、错误范围恢复、取消和清除,并通过原生事务关闭 writer 后读回同一 Agent。 本次不证明 OpenViking 线上效果、自动 hook 采用、安装版本更新或长期学习收益。 持续运行、真实语义后端和经验自动读写的实际接入仍由原能力验收边界负责;现有模块预算失败也保留。
改动思路
沿用既有 activation、召回和原生配置事务,前端只维护临时输入与局部导航,不新增记忆总开关或平行权限源。 当前 PR 交付可操作的源码打包证据召回与 Agent 配置读回;线上语义后端、安装和持续学习资格仍在原能力边界。 临时查资料、持久经验学习、只读表达素材是三种用户目的;OpenViking 和 BM25 只是检索实现,明确偏好仍读取完整当前版本。最短合法旅程是在既有能力中心选择 Goal,导入已有授权配置,提问并点击召回;Goal、Agent、scope 从已有上下文复用,不增加意图确认轮次。私有配置不是此 PR 新设的批准门槛,它决定允许哪个检索器读取哪些材料。只改标签或提供复制命令仍无法在页面得到证据;新增总开关则会制造重复权限源。这里用下表解释源代码分支,表格是说明,执行依据在后文验证中。
| 触发 | 决策 owner | 可见结果 |
|---|---|---|
| 导入 profile | 原生 activation;不访问 provider | 检查通过、停用或不匹配 |
| 明确点击召回 | 同一有界原生 recall/provider | 私有参考结果,或可恢复状态 |
| 切换用途/Goal | 页面取消与实例隔离 | 完成结果在用途间保留;进行中取消;Goal 切换清空 |
| 保存 Agent 配置 | 既有 preview/apply 事务 | 只改变所选绑定,独立读回 |
具体改动
关键代码讲解
DecisionContextWorkbench保存页面私有副本。导入只检查 activation,问题编辑递增 generation,取消旧请求;用途失活取消进行中请求,Goal key 重建和清除移除副本及结果,迟到响应不能回填。decision_context_api.py是本机有界 POST 适配器,限制动作、字段、正文和查询,并经 registered Goal/当前 workspace 过滤。foreign Origin、URL query、生命周期专用 registry 均拒绝;配置错误不回显私有路径。Python 延续既有 provider/传输归属,没有复制 TypeScript 配置决策。recall_profile_decision_context保留原文件入口的 freshness/digest 检查,再复用 activated recall;inline 入口复用同一 normalizer、边界和 advisory receipt。不会写 profile、游标、结算或自动 capture。MemorySettingsHeader只聚合原生已注册能力,三种用途保留各自 owner。既有 Goal 编辑器记住所选 Agent,刷新和 apply 从真实快照重建草稿,配置路径和旧预览仍重置;共享绑定有明确单独选项。共享 help JSX 一并提取,避免两套说明。
共 25 个路径、+921/-37,包含真实 HTTP 测试、双语说明和六张合成截图。规范映射基于修改前的 Decision Context advisory contract、同一基线的 design.md 与 frontend-delivery.md:原生语义:implemented,五类输入完整对象相等;可用旅程:implemented,真实打包 UI 可提问、看结果、失败恢复和取消;配置隔离:implemented,真实原生事务关闭 writer 后重新读取仍选中 writer;数据边界:implemented,有界私有 POST/public-safe 嵌套 receipt 和负例覆盖;线上语义与持续采用:out_of_scope,没有用本次源码旅程关闭更广验收。
对主干的风险
独立运行 11 个完整 Python 模块:422 passed、1 failed、0 skipped。唯一失败是 test_top_level_module_count_stays_at_the_pinned_budget:顶层模块 146/145,offender 为 workflow_skill_install.py。相同单模块命令在不可变 base/head 都是 1 failed、5 passed,检查文件与 offender blob 完全相同,146 个模块成员相同;本次只改已有顶层文件,没有增加顶层模块。按 pre_existing_unrelated 归因,保留当前红检查与原验证 owner,没有提高预算或宣布所有检查绿色。
独立 native premerge 的 6 个直接检查+19 个选中命令通过,无 manual hold;额外模块预算失败不被这份通过结果覆盖。打包 build、source verify、Ruff、双语和先 diff advisory 后完整语义检查通过。对原文件入口使用同一私有 corpus/profile、固定时间和问题,启用、停用、Agent 不匹配、Goal 不匹配、错误 scope 的完整返回 JSON 无需任何归一化即相等。HTTP 测试包含配置缺失、provider 恢复、越界参数、跨 Origin、未注册/生命周期 registry 和禁止 provider construction 的负例。
页面验证只使用自己的合成 Goal;导航数据为 fixture,召回 HTTP/BM25 和配置 File/SQLite 事务均是真实生产 owner。实际观察 scope 错误清空旧结果、恢复后命中;阻塞一次原生请求再切用途,释放后无迟到结果;重试、清除、Goal 切换均有效。缺私有配置的启用被拒绝;关闭 writer 后共享配置保持不变,apply/reload 保留 writer。键盘方向键同时移动选择和焦点。中文/英文桌面与 390px 窄屏检查没有横向溢出,窄屏在有限内容面板内滚动;截图是源码构建合成演示,不证明安装或生产新鲜度。线上 OpenViking、自动 hook、所有 CI 平台和长期质量不在本次独立证据内。
语义与 CI 对齐
本地 purposes as const 是导航闭集;activation、provider status、配置事务沿用既有类型化 owner,没有 substring 黑名单或新 actor 生命周期。UI 的“临时/持久实验/只读”与实际效应一致,机器限制没有写成可选 guidance。检索原文明确为不可信参考,配置状态不冒充实际自动召回/写回采用。没有 skill 或自动加载 prompt 变更;Lark 和现有 CLI 无新增入口,CLI 原路径已做 parity。
我的整体评价
未发现本次提交引入的阻塞问题。
APPROVE,交付判断为 justified_increment。 long_horizon=preserved:原生默认停用、原文件接口与持久绑定保持,重试/取消不引入后台副作用或重复结算;user_experience=improved:同一既有入口能真正回答证据问题,并能纠错、取消、清除和读回所选 Agent,无额外批准轮次。沿用既有 activation、召回和原生配置事务,前端只维护临时输入与局部导航,不新增记忆总开关或平行权限源。 当前 PR 交付可操作的源码打包证据召回与 Agent 配置读回;线上语义后端、安装和持续学习资格仍在原能力边界。 未来重构检查已在当前 PR 复用 activation/recall helper 与 help renderer;进一步拆框架没有当前调用价值。现有预算红检查、真实语义后端、安装、持续资格和维护者合并授权分别保留;未执行 bypass 或合并。
English verdict: APPROVE — 093759ea5d519539be32b27bbc0b603dde4b9f57. Independent packaged UI/native HTTP/BM25 and scoped File/SQLite configuration readback, full five-case base/head JSON equality and 422 passing tests support this bounded source journey. The same pre-existing 146/145 module-budget failure remains explicit; live semantic backend, installed/sustained adoption and merge authority remain separate.
Problem and result
Memory-related capabilities appeared as unrelated catalog entries, while provider names, temporary lookup and saved Agent bindings were easy to confuse. The Goal Capability Center now has one Memory & sources / 记忆与资料 entry with three purposes:
Only purposes present in the native capability catalog are rendered. Each retains its existing configuration, activation, privacy and execution owner; there is no new memory master switch or automatic sharing between Agents.
中文:按“要找资料、要复用经验、要找表达素材”组织既有入口,明确临时查询与持久设置。修复保存/读回后界面跳回共享绑定的问题;实际写入仍由原生配置事务预览、应用及版本校验负责。
Ownership and scope
The existing Decision Context profile and ContextProvider path own activation and recall. The local HTTP adapter shares that native path without temporary profile files and uses ordinary registry admission, refusing lifecycle-only source sessions before provider construction. The TypeScript UI adds no ranking, activation or binding authority.
Saved experience settings use the existing Goal configuration preview/apply and Agent-isolation owner. A selected Agent is a presentation choice; config paths and stale previews still reset from a fresh readback. Automatic recall/writeback settings are labelled as settings, not proof of execution or task benefit. Explicit preferences remain a complete current view, separate from ranked advisory retrieval.
Related simplification: reuse one configuration-help renderer and retain completed recall across purpose tabs; cancel pending recall so a late native response cannot repaint another view. No new provider package, storage namespace or hook was introduced.
Frontend: Goal Capability Center, English/Chinese, keyboard purpose navigation and narrow layouts. CLI semantics and Lark entrypoints are unchanged. No installed-App rollout or merge is requested.
Validation
Tested composed head:
093759ea5d519539be32b27bbc0b603dde4b9f57, based on555a83df107c4711de49ee5451af5e34f4fff558.typed-actions: passed on the composed head, including one grouped entry, registered purpose tabs, keyboard navigation and Agent selection retained after fresh native-shape readback.goal-showcase: passed on the composed head (desktop/narrow overview).workflow_skill_install.py); 5 other tests in that module pass. No root module is added here, and the limit is not waived. The previous broad Python run was interrupted; it is not a passing full-suite result. Exact-scope quality retains the required failure and no merge readiness is claimed.No authority-store implementation changed; PostgreSQL store qualification is not claimed. Screenshots and configuration mutation fixtures use synthetic data. OpenViking qualification is an authorized isolated read, not a public dataset or utility benchmark. Windows/Linux installed-App adoption and automatic hooks remain untested.
Visual evidence
The same ordinary task is shorter: find one memory entry, choose a purpose, and either ask for evidence or select an Agent. Before, the caller had to distinguish several independent capability names. The existing Goal header/navigation remain; provider/scope controls collapse, and failures replace stale results. No decorative overview cards or duplicate setting owners were added.
Working owner-local packaged preview: http://127.0.0.1:64432/chat/ . Open Capability Center → One Goal → Memory ui demo → Memory & sources. It is an isolated synthetic Goal, not an installed production workspace or remotely hosted preview.
First viewport, rebuilt and inspected at the composed head. Images were captured from the same memory-pane implementation before the unrelated main synchronization; the composed readback confirms unchanged presentation.
Before, Agent scope, English, narrow and recovery views
Author declaration
Agent-authored (OpenAI Codex, GPT-6 family), submitted as
loopx-agent. Reviewed AGENTS, CONTRIBUTING, CODEOWNERS, the Decision Context/provider contract and frontend delivery/design rules. The six branch-only commits, including main synchronization, carry DCO sign-offs. No paired RFC changed. Public/private scans exclude credentials, local paths, raw traces and private source material. Existing required failures remain visible; independent review and maintainer merge authorization are separate.