Skip to content

Commit 24a865e

Browse files
committed
feat(agent-workspace): add managed memory operators
1 parent 5b6ab3a commit 24a865e

16 files changed

Lines changed: 950 additions & 24 deletions

docs/diataxis/en/explanation/agent-conversation-focus-mode-plan.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,14 +26,18 @@ Implemented now:
2626
- the graph layout now reserves width for the docked workspace so the graph surface and agent surface can coexist.
2727
- graph-focus fullscreen now promotes the real graph workspace while keeping a restorable control card in front of it.
2828
- the new shell strings and runtime empty/fullscreen labels now have bilingual coverage, existing knowledge-card actions / localized system messages re-render on language switch, and conversation card rerender now flows through a centralized card-kind renderer registry in `workspace_panes` to reduce drift risk.
29-
- conversation knowledge points now carry an execution-capable typed descriptor surface: `focus` and `learning path` are joined by tutor-side `generate_quiz` / `recap` / `generate_transfer` / `generate_counterexample` / `follow_up`, query-side `compare_query_backends` / `inspect_query_backend_diagnostics` / `inspect_query_backend_comparison_history` / `inspect_query_backend_comparison_trend`, tutor diagnostics `inspect_tutor_adapter_telemetry` / `inspect_tutor_trace_diagnostics`, quality/session diagnostics (`inspect_learning_quality_trend` / `inspect_learning_quality_history` / `inspect_session_plan_quality_trend` / `inspect_session_plan_quality_history`), and session-side `inspect_session_history` / `build_study_session`, while descriptors include execution, failure, and UI-hint metadata.
29+
- conversation knowledge points now carry an execution-capable typed descriptor surface: `focus` and `learning path` are joined by tutor-side `generate_quiz` / `recap` / `generate_transfer` / `generate_counterexample` / `follow_up`, query-side `compare_query_backends` / `inspect_query_backend_diagnostics` / `inspect_query_backend_comparison_history` / `inspect_query_backend_comparison_trend`, tutor diagnostics `inspect_tutor_adapter_telemetry` / `inspect_tutor_trace_diagnostics`, quality/session diagnostics (`inspect_learning_quality_trend` / `inspect_learning_quality_history` / `inspect_session_plan_quality_trend` / `inspect_session_plan_quality_history`), session-side `inspect_session_history` / `build_study_session`, and managed-memory operators (`inspect_memory_snapshot` / `inspect_unit_memory_snapshot` / `inspect_memory_retrain_plan` / `inspect_memory_read` / `write_memory_note` / `record_memory_correction` / `evict_memory_note`), while descriptors include execution, failure, and UI-hint metadata.
3030
- browser smoke now exercises real `conversation/path/query-compare/query-compare-history/query-compare-trend/quality-trend/quality-history/session-plan-quality-trend/session-plan-quality-history/session-plan` backend flows, real graph runtime, and real path runtime with screenshot/console/network-summary evidence artifacts.
3131

3232
Still open:
3333

3434
- strict Tauri lifecycle/window evidence is now closed on this branch (`verify:agent-workspace:tauri:rust:strict`, `verify:agent-workspace:tauri:window-evidence:strict`, `verify:agent-workspace:tauri:evidence:index:strict`, and `verify:agent-workspace:tauri:evidence:manifest:strict` all pass). The remaining concern is operational readiness on fresh hosts, not implementation drift: preinstall `javascriptcoregtk-4.1`, `libsoup-3.0`, and `webkit2gtk-4.1`.
3535
- long-lived dynamic conversation cards beyond the current `study_session_card` / `tutor_action_card` / `session_history_card` / `query_backend_comparison_card` / `query_backend_diagnostics_card` / `query_backend_comparison_history_card` / `query_backend_comparison_trend_card` / `tutor_adapter_telemetry_card` / `tutor_trace_diagnostics_card` / `learning_quality_trend_card` / `learning_quality_history_card` / `session_plan_quality_trend_card` / `session_plan_quality_history_card` paths now share registry-driven rerender wiring, and a source-level guard test now enforces append-kind/registry parity (`src/agent_workspace.frontend.test.ts`); follow-up work is to keep each new card kind wired through that gate by default.
3636
- the execution-capable contract is now present and no longer limited to quiz/recap, but it still has room to absorb broader tutor/query/session operations beyond the currently shipped action band.
37+
- managed memory mutation is now present in the conversation lane, but it remains intentionally scoped:
38+
- writes are limited to session-layer managed notes/corrections,
39+
- eviction only removes the deterministic managed keys for the selected atom,
40+
- this is a product-side memory operator surface, not a claim of full memory-admin tooling.
3741

3842
## Product Target
3943

docs/diataxis/en/explanation/development-progress-dashboard.md

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -306,6 +306,28 @@ Execution anchor:
306306
- failing references: `24405317254`, `24404975285`,
307307
- recovered run: `24502592419` (`Migration Gates` all green, including runtime/browser/tauri agent-workspace suites).
308308

309+
## Latest Mainline Increment (2026-04-21 M6.13 Managed Memory Operator Capability Lane)
310+
311+
- Expanded the typed conversation memory action band on mainline with:
312+
- `write_memory_note`,
313+
- `record_memory_correction`,
314+
- `evict_memory_note`.
315+
- Moved the capability lane from readonly-only inspection to scoped managed memory operations without introducing a second memory system:
316+
- session-layer writes use deterministic keys (`conversation_note:{atomId}`, `conversation_correction:{atomId}`),
317+
- eviction is limited to those managed keys instead of pretending to delete arbitrary memory state.
318+
- Kept contract/runtime behavior aligned for mutating memory execution:
319+
- planner now accepts `write` / `evict`,
320+
- prompted write hydration collects note text at execution time,
321+
- targeted eviction forwards explicit `matchKeys`.
322+
- Extended backend response semantics so the UI reports real mutation outcomes instead of overloading snapshot wording:
323+
- `mutatedCount` for writes,
324+
- `removedKeys` for targeted eviction.
325+
- Expanded regression coverage for:
326+
- conversation output wiring of note/correction/eviction capabilities,
327+
- frontend payload-builder prompt-template + eviction-key shaping,
328+
- runtime prompt/payload/message assertions for managed memory write and eviction,
329+
- learning-platform targeted eviction behavior.
330+
309331
## Latest Mainline Increment (2026-04-20 M8.9 Foundation Signal-Semantics Evidence)
310332

311333
- Strengthened foundation-readiness evidence without changing the readiness verdict:

docs/diataxis/zh/explanation/agent-conversation-focus-mode-plan.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,18 @@
2424
- 图谱布局已经为 docked workspace 预留宽度,graph surface 与 agent surface 可以并存。
2525
- graph focus 的 fullscreen 已可提升真实 graph workspace,同时保留一个可恢复的控制卡;
2626
- 新壳层静态文案与运行时按钮/空态标签已具备双语覆盖,且已有知识卡片动作按钮与本地化系统消息会在语言切换时重渲;conversation card 的重渲链路也已收敛为 `workspace_panes` 中的 card-kind 注册表驱动,降低后续漂移风险。
27-
- conversation knowledge point 现在已经具备可执行 typed descriptor:除 `focus` / `learning path` 外,已接入 tutor 侧 `generate_quiz` / `recap` / `generate_transfer` / `generate_counterexample` / `follow_up`、query 侧 `compare_query_backends` / `inspect_query_backend_diagnostics` / `inspect_query_backend_comparison_history` / `inspect_query_backend_comparison_trend`、导师诊断侧 `inspect_tutor_adapter_telemetry` / `inspect_tutor_trace_diagnostics`、质量/会话诊断侧 `inspect_learning_quality_trend` / `inspect_learning_quality_history` / `inspect_session_plan_quality_trend` / `inspect_session_plan_quality_history`,并接入 session 侧 `inspect_session_history` / `build_study_session`,同时补齐 execution / failure / UI hint 元数据。
27+
- conversation knowledge point 现在已经具备可执行 typed descriptor:除 `focus` / `learning path` 外,已接入 tutor 侧 `generate_quiz` / `recap` / `generate_transfer` / `generate_counterexample` / `follow_up`、query 侧 `compare_query_backends` / `inspect_query_backend_diagnostics` / `inspect_query_backend_comparison_history` / `inspect_query_backend_comparison_trend`、导师诊断侧 `inspect_tutor_adapter_telemetry` / `inspect_tutor_trace_diagnostics`、质量/会话诊断侧 `inspect_learning_quality_trend` / `inspect_learning_quality_history` / `inspect_session_plan_quality_trend` / `inspect_session_plan_quality_history`session 侧 `inspect_session_history` / `build_study_session`,以及托管记忆操作(`inspect_memory_snapshot` / `inspect_unit_memory_snapshot` / `inspect_memory_retrain_plan` / `inspect_memory_read` / `write_memory_note` / `record_memory_correction` / `evict_memory_note`,同时补齐 execution / failure / UI hint 元数据。
2828
- browser smoke 已覆盖真实 `conversation/path/query-compare/query-compare-history/query-compare-trend/quality-trend/quality-history/session-plan-quality-trend/session-plan-quality-history/session-plan` 后端链路、真实 graph runtime、真实 path runtime,并会输出 screenshot / console / network-summary 证据产物。
2929

3030
仍未完成:
3131

3232
- Tauri strict 生命周期与窗口证据链已在当前分支闭环(`verify:agent-workspace:tauri:rust:strict``verify:agent-workspace:tauri:window-evidence:strict``verify:agent-workspace:tauri:evidence:index:strict``verify:agent-workspace:tauri:evidence:manifest:strict` 均通过);后续工作转为“新环境预置依赖”这一运维前提,而非实现缺口(依赖:`javascriptcoregtk-4.1``libsoup-3.0``webkit2gtk-4.1`)。
3333
- 当前 `study_session_card` / `tutor_action_card` / `session_history_card` / `query_backend_comparison_card` / `query_backend_diagnostics_card` / `query_backend_comparison_history_card` / `query_backend_comparison_trend_card` / `tutor_adapter_telemetry_card` / `tutor_trace_diagnostics_card` / `learning_quality_trend_card` / `learning_quality_history_card` / `session_plan_quality_trend_card` / `session_plan_quality_history_card` 已支持语言切换后重渲,且已统一走注册表驱动;同时已新增源码级门禁测试校验 append-kind 与注册表键集合一致(`src/agent_workspace.frontend.test.ts`)。后续新增 card kind 时,需要默认通过该门禁。
3434
- 可执行 contract 已具备,且不再只停留在 quiz/recap,但仍需继续吸收更广的 tutor/query/session 动作。
35+
- 对话 lane 现在已具备受控记忆写入/修正/清理动作,但范围被刻意收窄:
36+
- 写入仅落在 session 层托管 note/correction,
37+
- 清理仅移除当前 atom 对应的确定性托管 key,
38+
- 这是产品侧 memory operator surface,不是“完整记忆管理后台已完成”的宣称。
3539

3640
## 产品目标
3741

docs/diataxis/zh/explanation/development-progress-dashboard.md

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -306,6 +306,28 @@
306306
- 历史失败参考:`24405317254``24404975285`
307307
- 修复后运行:`24502592419``Migration Gates` 全绿,含 runtime/browser/tauri 三个 agent-workspace 套件)。
308308

309+
## 主线最新增量(2026-04-21 M6.13 托管记忆操作能力链路)
310+
311+
- 主线 typed conversation memory action band 新增:
312+
- `write_memory_note`
313+
- `record_memory_correction`
314+
- `evict_memory_note`
315+
- capability lane 已从“只读记忆检查”扩展到“受控托管记忆操作”,但没有引入第二套 memory system:
316+
- session 层写入采用确定性 key(`conversation_note:{atomId}``conversation_correction:{atomId}`),
317+
- 清理动作只命中这些托管 key,不再把“任意记忆删除”伪装成已交付能力。
318+
- contract/runtime 规划保持一致:
319+
- planner 现在接受 `write` / `evict`
320+
- 写入路径会在执行时弹出 prompt 收集记忆文本,
321+
- 清理路径会显式透传 `matchKeys`
322+
- backend 返回语义同步补强,避免 UI 继续复用 snapshot 文案误导用户:
323+
- 写入返回 `mutatedCount`
324+
- 定向清理返回 `removedKeys`
325+
- 回归覆盖同步扩展:
326+
- conversation 输出中的 note/correction/eviction capability 连线断言,
327+
- 前端 payload-builder 的 prompt-template / eviction-key 断言,
328+
- runtime 写入/清理路径的 prompt、payload、消息断言,
329+
- learning-platform 的定向清理行为断言。
330+
309331
## 主线最新增量(2026-04-20 M8.9 Foundation 信号语义证据)
310332

311333
- 在不改变 readiness 结论的前提下,补强了 foundation-readiness 证据面:

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@
8787
"ops:fixrisk:close": "node scripts/run-fixrisk-ops-closure.js",
8888
"ops:fixrisk:close:dry": "node scripts/run-fixrisk-ops-closure.js --dry-run",
8989
"test:mobile:contracts": "jest src/mobile.pipeline.test.ts src/runtime.capabilities.test.ts src/source_manager.loadflow.test.ts src/capacitor.runtime.contract.test.ts src/android.pathmode.contract.test.ts src/android.pathmode.smoke.contract.test.ts src/graph.accessibility.contract.test.ts src/detox.pipeline.contract.test.ts src/privacy.manifest.contract.test.ts --runInBand && npm run verify:detox:pipeline && npm run verify:privacy:manifest",
90-
"test:migration": "jest src/core/Graph.test.ts src/core/PathEngine.test.ts src/core/TreeLayout.test.ts src/backend/algorithms/CycleDetection.test.ts src/backend/algorithms/TopologicalSort.test.ts src/backend/algorithms/WasmParityHistory.test.ts src/utils/RuntimePaths.test.ts src/server.migration.test.ts src/pkg.sidecar.contract.test.ts src/pkg.snapshot.safety.contract.test.ts src/godot.sidecar.bootstrap.contract.test.ts src/release.godot.mirror.contract.test.ts src/sidecar.replacement.boundary.contract.test.ts src/sidecar.supply.readiness.contract.test.ts src/foundation.readiness.contract.test.ts src/backend.baseline.sufficiency.contract.test.ts src/learning/queryBackend.test.ts src/lfs.asset.policy.contract.test.ts src/tauri.frontend.build.contract.test.ts src/mobile.pipeline.test.ts src/capacitor.device.utils.contract.test.ts src/capacitor.evidence.contract.test.ts src/runtime.capabilities.test.ts src/runtime.heap.policy.contract.test.ts src/runtime.spool.policy.contract.test.ts src/runtime.transport.adapter.contract.test.ts src/storage.provider.contract.test.ts src/storage.provider.capacitor.content.contract.test.ts src/storage.provider.capacitor.worker.contract.test.ts src/wasm.parity.runtime.contract.test.ts src/wasm.parity.runtime.functional.test.ts src/wasm.parity.output.equivalence.contract.test.ts src/wasm.parity.benchmark.contract.test.ts src/wasm.parity.benchmark.guards.contract.test.ts src/wasm.parity.history.gate.contract.test.ts src/wasm.parity.artifact.probe.contract.test.ts src/wasm.parity.artifact.provisioning.contract.test.ts src/source_manager.loadflow.test.ts src/capacitor.runtime.contract.test.ts src/welcome.loadflow.test.ts src/pathmode.history.contract.test.ts src/android.pathmode.contract.test.ts src/android.pathmode.smoke.contract.test.ts src/pathbridge.handshake.contract.test.ts src/pathbridge.strict.policy.contract.test.ts src/graph.accessibility.contract.test.ts src/detox.pipeline.contract.test.ts src/privacy.manifest.contract.test.ts src/server.port.fallback.contract.test.ts src/sidecar.signature.contract.test.ts src/sbom.policy.contract.test.ts src/sbom.attestation.policy.contract.test.ts src/sidecar.relaunch.contract.test.ts src/tauri.test.runner.contract.test.ts --runInBand",
90+
"test:migration": "node scripts/run-migration-tests.js src/core/Graph.test.ts src/core/PathEngine.test.ts src/core/TreeLayout.test.ts src/backend/algorithms/CycleDetection.test.ts src/backend/algorithms/TopologicalSort.test.ts src/backend/algorithms/WasmParityHistory.test.ts src/utils/RuntimePaths.test.ts src/server.migration.test.ts src/pkg.sidecar.contract.test.ts src/pkg.snapshot.safety.contract.test.ts src/godot.sidecar.bootstrap.contract.test.ts src/release.godot.mirror.contract.test.ts src/sidecar.replacement.boundary.contract.test.ts src/sidecar.supply.readiness.contract.test.ts src/foundation.readiness.contract.test.ts src/backend.baseline.sufficiency.contract.test.ts src/learning/queryBackend.test.ts src/lfs.asset.policy.contract.test.ts src/tauri.frontend.build.contract.test.ts src/mobile.pipeline.test.ts src/capacitor.device.utils.contract.test.ts src/capacitor.evidence.contract.test.ts src/runtime.capabilities.test.ts src/runtime.heap.policy.contract.test.ts src/runtime.spool.policy.contract.test.ts src/runtime.transport.adapter.contract.test.ts src/storage.provider.contract.test.ts src/storage.provider.capacitor.content.contract.test.ts src/storage.provider.capacitor.worker.contract.test.ts src/wasm.parity.runtime.contract.test.ts src/wasm.parity.runtime.functional.test.ts src/wasm.parity.output.equivalence.contract.test.ts src/wasm.parity.benchmark.contract.test.ts src/wasm.parity.benchmark.guards.contract.test.ts src/wasm.parity.history.gate.contract.test.ts src/wasm.parity.artifact.probe.contract.test.ts src/wasm.parity.artifact.provisioning.contract.test.ts src/source_manager.loadflow.test.ts src/capacitor.runtime.contract.test.ts src/welcome.loadflow.test.ts src/pathmode.history.contract.test.ts src/android.pathmode.contract.test.ts src/android.pathmode.smoke.contract.test.ts src/pathbridge.handshake.contract.test.ts src/pathbridge.strict.policy.contract.test.ts src/graph.accessibility.contract.test.ts src/detox.pipeline.contract.test.ts src/privacy.manifest.contract.test.ts src/server.port.fallback.contract.test.ts src/sidecar.signature.contract.test.ts src/sbom.policy.contract.test.ts src/sbom.attestation.policy.contract.test.ts src/sidecar.relaunch.contract.test.ts src/tauri.test.runner.contract.test.ts --runInBand",
9191
"test:tauri": "node scripts/run-tauri-tests.js",
9292
"test:agent-workspace:contracts": "jest src/agent_workspace.contract.parity.test.ts src/agent_workspace.frontend.test.ts src/agent_workspace.runtime.integration.test.ts src/agent_workspace.runtime.behavior.test.ts src/agent_workspace.verification.contract.test.ts src/knowledge.api.contract.test.ts --runInBand",
9393
"test:license:contract": "jest src/license.policy.contract.test.ts --runInBand",

0 commit comments

Comments
 (0)