diff --git a/.gitignore b/.gitignore index 90b4265a..46b50325 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,7 @@ node_modules/ .local/ coverage/ .playwright-cli/ +.scratch/ .worktrees/ output/playwright/ context-packs/ diff --git a/AGENTS.md b/AGENTS.md index 9c32c763..894c96e9 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -2,7 +2,7 @@ ## Mission -Develop Open Agent Fabric into the complete local-first, model-neutral tool for inspectable agents. Optimize for correctness, evidence, portability, and safe evolution, not feature count or autonomous behavior. +Develop Memory Recall into the local-first, model-neutral repository memory and context tool for coding agents. Optimize for correctness, evidence, portability, and safe evolution, not feature count or autonomous behavior. ## Read order before changing code @@ -67,7 +67,7 @@ npm run ci ### Issue tracker -Issues are tracked in GitHub Issues for `rebel0789/open-agent-fabric`; local markdown under `.scratch/` may be used for offline or scratch drafts. External PRs are a triage surface. See `docs/agents/issue-tracker.md`. +Issues are tracked in GitHub Issues for `rebel0789/Memory-Recall`; local markdown under `.scratch/` may be used for offline or scratch drafts. External PRs are a triage surface. See `docs/agents/issue-tracker.md`. ### Triage labels @@ -81,7 +81,7 @@ This repo uses a single-context layout: root `CONTEXT.md` when present, plus arc 1. **Canonical events:** state-changing operations emit append-only events. 2. **Context manifests:** every model call records selected and excluded context with reason codes. -3. **Own the tool boundary:** OAF ships the default runtime, context, memory, source-graph, tool, hook, UI, and CLI experience. Integrations may accelerate inputs or scale a backend, but they never own canonical state or authority. +3. **Own the tool boundary:** Memory Recall ships the default runtime, context, memory, source-graph, tool, hook, UI, and CLI experience. Integrations may accelerate inputs or scale a backend, but they never own canonical state or authority. 4. **Deterministic authority:** permissions, budgets, approvals, retries, and transitions are code—not model decisions. 5. **No silent memory overwrite:** use lifecycle states and `supersedes` links. 6. **Observations are not interpretations:** keep collected data separate from model analysis. diff --git a/ASSIGN_TO_AGENT.md b/ASSIGN_TO_AGENT.md index 147ff696..7bca3463 100644 --- a/ASSIGN_TO_AGENT.md +++ b/ASSIGN_TO_AGENT.md @@ -1,10 +1,10 @@ # Assignment Brief for the Development Agent -You are receiving an agent-ready development kit for **Open Agent Fabric 0.2.0-dev**. Evolve it through small verified changes. Do not rebuild the architecture from scratch and never claim that specified components already exist. +You are working on **Memory Recall 1.1.0**, currently an unreleased release candidate. Evolve it through small verified changes. Do not rebuild the architecture from scratch and never claim that specified capabilities already exist. ## Mission -Build the complete local-first reliability and context tool for agents whose state, actions, evidence, memory, source understanding, workflows, permissions, and improvements are portable and inspectable. +Build the local-first repository memory and context tool that gives coding agents reviewed facts, source-backed context, changed-file impact, and inspectable handoffs without making a hosted service the system of record. ## First session @@ -40,7 +40,7 @@ or external adapters unless the active task explicitly requires it. ## Product differentiator -Open Agent Fabric does not win by bundling repositories or outsourcing its core product behavior. It owns: +Memory Recall does not win by bundling repositories or outsourcing its core product behavior. It owns: - intentional context selection and context manifests; - source graph, retrieval, compaction, and code intelligence for the default local experience; @@ -83,4 +83,4 @@ Safest next task: ## Product success -A contributor can run one useful local workflow, inspect exactly what context and evidence it used, replay it without side effects, replace a model or backend without losing portable state, and understand every consequential action before it occurs. +A contributor can install Memory Recall in another repository, produce a useful read-only map and handoff, inspect exactly which context and evidence it selected, and review every memory proposal before it becomes active. diff --git a/CHANGELOG.md b/CHANGELOG.md index 0df756b7..a01a0c83 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # Changelog -## [1.1.0] — 2026-07-11 +## [Unreleased] — 1.1.0 release candidate No breaking CLI migration is required. Local-only defaults, proposal-gated memory, and read-only MCP remain unchanged. @@ -13,6 +13,7 @@ No breaking CLI migration is required. Local-only defaults, proposal-gated memor ### Changed +- Canonical repository guidance, citation metadata, support links, project status, and generated manifest now use Memory Recall; legacy `oaf` commands, URIs, task IDs, and internal package scopes remain compatibility identifiers. - Replaced the fifteen-item dashboard navigation with a five-destination workbench, separated local workspace setup from Overview, and made Overview choose one deterministic scan, review, or handoff action from current local state. - Overview now hydrates bounded multi-file impact from current read-only git detection, preserves omitted-change evidence, reports degraded detection without claiming a clean tree, surfaces blocked handoffs, and exposes repository search with stable Map history and explicit failure states. - The repository bar now documents the one-repository-per-server boundary, and tablet navigation collapses to a semantic 72 px icon rail with accessible labels. @@ -29,7 +30,27 @@ No breaking CLI migration is required. Local-only defaults, proposal-gated memor ### Internal -- Release gates cover 655 Node tests, 182 protocol fixtures, 144 evaluation assertions, installed-package smoke, browser smoke, package-content verification, and release-evidence drift checks. +- Release gates cover 659 Node tests, 182 protocol fixtures, 144 evaluation assertions, installed-package smoke, browser smoke, package-content verification, and release-evidence drift checks. + +## [1.0.5] — 2026-07-09 + +### Added + +- Bounded source-graph commands, previews, protocol examples, measurements, and focused validation coverage. + +### Changed + +- GitHub release metadata now points to the exact commit recorded by the published `memory-recall@1.0.5` package. + +## [1.0.4] — 2026-07-08 + +### Added + +- Model-free LoCoMo-shaped retrieval benchmark with a small checked-in smoke fixture. + +### Changed + +- Public benchmark copy distinguishes retrieval coverage from official generative QA scoring. ## [1.0.0] — 2026-07-08 diff --git a/CITATION.cff b/CITATION.cff index 8f8e2f10..5e28f2c1 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -1,10 +1,8 @@ cff-version: 1.2.0 -message: "If you use Open Agent Fabric, cite the project and release." -title: "Open Agent Fabric" -version: "0.2.0-dev" -date-released: 2026-06-19 +message: "If you use Memory Recall, cite the project." +title: "Memory Recall" license: Apache-2.0 -repository-code: "https://github.com/rebel0789/open-agent-fabric" +repository-code: "https://github.com/rebel0789/Memory-Recall" authors: - family-names: "Contributors" - given-names: "Open Agent Fabric" + given-names: "Memory Recall" diff --git a/CONTEXT.md b/CONTEXT.md index 2b628e32..77ff4a3f 100644 --- a/CONTEXT.md +++ b/CONTEXT.md @@ -1,6 +1,6 @@ -# Open Agent Fabric +# Memory Recall -Open Agent Fabric is a local-first context and reliability system for coding agents. This glossary defines the product language agents should use when planning, implementing, or reviewing work in this repository. +Memory Recall is a local-first repository memory and context system for coding agents. This glossary defines the product language agents should use when planning, implementing, or reviewing work in this repository. Legacy `oaf` commands, URIs, package scopes, and task IDs remain compatibility or internal identifiers. ## Language @@ -9,27 +9,27 @@ A local control layer that gives coding agents selected context, memory proposal _Avoid_: Agent dashboard, hosted memory SaaS, universal automation platform, codebase-memory clone **Context Quality Ranking**: -The product priority order for context work: correct and safe context first, token efficiency second, speed third, and harness breadth fourth. OAF should only claim optimization when required evidence and safety are preserved. +The product priority order for context work: correct and safe context first, token efficiency second, speed third, and harness breadth fourth. Memory Recall should only claim optimization when required evidence and safety are preserved. _Avoid_: Token savings at any cost, fastest response wins, broad harness support as proof of quality **Safe Context Layer**: -The first public beta promise: OAF runs locally and gives coding agents safe, token-efficient repository and memory context through context packs, read-only MCP resources, and proposal-gated memory writes. +The first public beta promise: Memory Recall runs locally and gives coding agents safe, token-efficient repository and memory context through context packs, read-only MCP resources, and proposal-gated memory writes. _Avoid_: Hidden transcript upload, automatic cloud memory, invisible context injection, write-enabled MCP by default **Delivery Budget**: -The estimated token and byte cost of the locator-only handoff that OAF actually gives another agent. It is tracked separately from the source budget, which estimates the full underlying context records that were scanned and selected. +The estimated token and byte cost of the locator-only handoff that Memory Recall actually gives another agent. It is tracked separately from the source budget, which estimates the full underlying context records that were scanned and selected. _Avoid_: Treating raw source-body token counts as the cost of a sanitized handoff, claiming token savings without a delivered-context measurement **Proposal-Gated Memory Import**: -The rule that imported harness context or transcript-derived learnings can become memory proposals, but cannot become active memory until the user reviews and accepts them. Users choose which Codex, Claude Code, Cursor, or other harness sources OAF may inspect. +The rule that imported harness context or transcript-derived learnings can become memory proposals, but cannot become active memory until the user reviews and accepts them. Users choose which Codex, Claude Code, Cursor, or other harness sources Memory Recall may inspect. _Avoid_: Automatic active memory, silent transcript capture, default import from hidden app state **Read-Only MCP Surface**: -The first MCP exposure for OAF: resources that let harnesses inspect status, context packs, manifests, source graph results, memory proposals, accepted-memory summaries, benchmark reports, and handoff bundles without mutating OAF state. +The first MCP exposure for Memory Recall: resources that let harnesses inspect status, context packs, manifests, source graph results, memory proposals, accepted-memory summaries, benchmark reports, and handoff bundles without mutating Memory Recall state. _Avoid_: Write-enabled MCP by default, memory write tools before exact grants, MCP resources with hidden side effects **Native Source Graph**: -A local derived index over normalized OAF source records, symbols, imports, calls, routes, tests, configuration, evidence, memory proposals, context manifests, and benchmark cases. It should support graph search, structural filters, call/data-flow traces, architecture summaries, diff impact, and bounded context selection while remaining an index, not canonical state. +A local derived index over normalized repository records, symbols, imports, calls, routes, tests, configuration, evidence, memory proposals, context manifests, and benchmark cases. It should support graph search, structural filters, call/data-flow traces, architecture summaries, diff impact, and bounded context selection while remaining an index, not canonical state. Current implementation exposes a read-only JS/TS graph preview for search, call trace, and diff impact through CLI/API. It is not a persisted graph database and does not create memory. Context packs also include compact source graph hints as locators and fingerprints only; they do not embed raw code slices. -_Avoid_: Source graph as canonical memory, graph database requirement, silent adapter enablement, mutating graph tools by default, token-saving claims without OAF benchmarks +_Avoid_: Source graph as canonical memory, graph database requirement, silent adapter enablement, mutating graph tools by default, token-saving claims without Memory Recall benchmarks diff --git a/GOVERNANCE.md b/GOVERNANCE.md index 7cfc9949..03512d76 100644 --- a/GOVERNANCE.md +++ b/GOVERNANCE.md @@ -1,6 +1,6 @@ # Governance -Open Agent Fabric begins with maintainer-led governance and must evolve toward neutral stewardship before 1.0. +Memory Recall uses maintainer-led governance and should evolve toward neutral stewardship as the contributor base grows. - Major protocol and architecture changes use public RFCs and ADRs. - Maintainers merge by evidence, compatibility, security, and user value. diff --git a/MAINTAINERS.md b/MAINTAINERS.md index 9f3b5ab8..adf40c53 100644 --- a/MAINTAINERS.md +++ b/MAINTAINERS.md @@ -1,14 +1,14 @@ # Maintainers -Open Agent Fabric is currently maintainer-led by the repository owner: +Memory Recall is currently maintainer-led by the repository owner: - GitHub owner: `@rebel0789` -- Repository: +- Repository: ## Security and Conduct Use private GitHub Security Advisories for suspected vulnerabilities: - + Use GitHub Discussions and Issues for community support and conduct escalation. Do not publish private security or conduct reports in public issues. diff --git a/NOTICE b/NOTICE index da602a68..19456f83 100644 --- a/NOTICE +++ b/NOTICE @@ -1,4 +1,4 @@ -Open Agent Fabric -Copyright 2026 Open Agent Fabric contributors +Memory Recall +Copyright 2026 Memory Recall contributors This product includes no vendored source from the optional upstream projects listed in THIRD_PARTY.md. diff --git a/PROJECT_STATUS.json b/PROJECT_STATUS.json index 9ec21ae0..3084e7cc 100644 --- a/PROJECT_STATUS.json +++ b/PROJECT_STATUS.json @@ -1,6 +1,6 @@ { "schemaVersion": "1.0.0", - "project": "open-agent-fabric", + "project": "memory-recall", "release": "1.1.0", "phase": "1.1-release-candidate-readiness", "nextTask": null, @@ -1026,7 +1026,7 @@ } ], "qualitySnapshot": { - "asOf": "2026-07-11", + "asOf": "2026-07-15", "commands": [ "npm ci --ignore-scripts --no-audit --no-fund", "npm run local:run", @@ -1048,7 +1048,7 @@ "npm run consumer:smoke", "npm run consumer:browser-smoke" ], - "testsExpected": 655, + "testsExpected": 659, "protocolFixturesExpected": 182, "evaluationsExpected": 144, "note": "Counts are a dated snapshot; command results and HANDOFF_VERIFICATION.json are authoritative." diff --git a/REPOSITORY_MANIFEST.json b/REPOSITORY_MANIFEST.json index ae780c76..a0d1509e 100644 --- a/REPOSITORY_MANIFEST.json +++ b/REPOSITORY_MANIFEST.json @@ -1,9 +1,9 @@ { "schemaVersion": "1.0.0", - "project": "open-agent-fabric", - "generatedAt": "2026-07-08T15:33:32.215Z", - "fileCount": 871, - "totalBytes": 5763375, + "project": "memory-recall", + "generatedAt": "2026-07-15T10:17:11.564Z", + "fileCount": 922, + "totalBytes": 6425642, "exclusions": [ ".git/**", ".local/**", @@ -42,8 +42,18 @@ }, { "path": ".gitignore", - "bytes": 153, - "sha256": "38f9b7d68fcbf339c24a1d93172156460609a5e3741b56f8c69dbf3867c0ae44" + "bytes": 175, + "sha256": "0a5120dae86ed88de867c2bcf9c26e0b34be620659610964ad60fcc643b581c3" + }, + { + "path": ".hallmark/log.json", + "bytes": 225, + "sha256": "d50510cfdc0c4de5739b54e3f3b384056867a32b95e0f49c7964d83966e0ce71" + }, + { + "path": ".hallmark/preflight.json", + "bytes": 332, + "sha256": "2f702544e3ac5d0ecb0188f85d9545832c688d242344244a22723448a4731429" }, { "path": ".npmignore", @@ -327,8 +337,8 @@ }, { "path": "AGENTS.md", - "bytes": 7571, - "sha256": "32f4ec3957bd7e7da66fe2864534290df39dd8d0ff2997e085e3c2e5e048d1ff" + "bytes": 7589, + "sha256": "b76296853d5c8044cb3c273c1b5a5601efe17adae8256a8a4497a989c8e02290" }, { "path": "agents/backend-builder/AGENT.md", @@ -437,13 +447,13 @@ }, { "path": "apps/cli/AGENTS.md", - "bytes": 180, - "sha256": "e5521c534a3b1b6e5c2eceb7bd9ea8390da520e64dea7f00e74d019a6ae6d3bc" + "bytes": 566, + "sha256": "b4dd09cbbf368a7138af69fa727cff125161dede497c728783d15a3587659c17" }, { "path": "apps/cli/oaf.mjs", - "bytes": 409795, - "sha256": "f4d7050b4767426c742435ba88dd79a9e02ca153512154e0375987920e28ab00" + "bytes": 484685, + "sha256": "8927c21f14affef6c6d12e701e234db4201b5292c00ef49632644489de02b2ad" }, { "path": "apps/web/AGENTS.md", @@ -452,33 +462,43 @@ }, { "path": "apps/web/app.js", - "bytes": 238086, - "sha256": "28f9a88a3c20d4c5b72797b6754acecaebcc4f081794f8a2a2cc7280adf3e5c4" + "bytes": 260078, + "sha256": "fff751153ac96b67bc6d2df262fe262764283a533c29c65ce1f90131893c7819" }, { "path": "apps/web/favicon.svg", - "bytes": 499, - "sha256": "281ab0e2deceffb2e4fbb7306e802fa91aaace7b9daf18db08f000ed5de158f9" + "bytes": 495, + "sha256": "b1774942e350f0c007b10e9e82077e2442f1484e88eb79d1e90efc1e38afa1c5" }, { "path": "apps/web/index.html", - "bytes": 2182, - "sha256": "b372789e93fc2bd96f01a2b30243574a74860ccb734d4da8eba00acf2c852533" + "bytes": 2807, + "sha256": "f0ce53a83c84bb79e23acc12855c6dc322dade75d98c8c3f6a01799d695255f5" + }, + { + "path": "apps/web/shell-model.js", + "bytes": 2049, + "sha256": "723e987aa0296a8df2707ca6779fc1d734e6958a73f4b62b6051dc96651aee5d" }, { "path": "apps/web/styles.css", - "bytes": 32977, - "sha256": "d9770597bb6e7962ef1a3fa5075893da57fa3c5f3042dbe15e70b8f49b4abd46" + "bytes": 44685, + "sha256": "dd95e6ebaca5e659f47776cc6fd6cc7d6d9fa565ac3e9281753a9329740598a3" }, { "path": "apps/web/tokens.css", - "bytes": 757, - "sha256": "db1570038b7d61fe040b115db3e2f44a1bc0029c7752e5d2865bc5970719a3d0" + "bytes": 2351, + "sha256": "18b19c1168909f956be55ccca78adbb12ce5db74041f17eefc445a747a11a54e" }, { "path": "assets/brand/logo.svg", - "bytes": 499, - "sha256": "281ab0e2deceffb2e4fbb7306e802fa91aaace7b9daf18db08f000ed5de158f9" + "bytes": 503, + "sha256": "1ab16e98e018ac59c3e294a40d398b4ff2abfc3193f67951f8c3f4439933d6e7" + }, + { + "path": "assets/brand/readme-card.svg", + "bytes": 4853, + "sha256": "62ecb211f4acf30a5294ac1b91a9eb78399013530d9d58306d470a8867ee69b2" }, { "path": "assets/brand/README.md", @@ -487,13 +507,13 @@ }, { "path": "assets/brand/wordmark.svg", - "bytes": 722, - "sha256": "d7d0357ccc598f58722d688f76c77a226771b4c017050a42a75f48a42d95b2fb" + "bytes": 688, + "sha256": "69cee4d6ac3719873b67539d403318fb8073445df99fed5664073bb1cd2f10a1" }, { "path": "ASSIGN_TO_AGENT.md", - "bytes": 3325, - "sha256": "15e773165b2d55b3ed9b22e1c9af55f265bfe49a1a8de82eb05c63b83812fb98" + "bytes": 3313, + "sha256": "d200fc428f0f6b53ee9fd5a22e248564da09217e43e3662349504c7bd55ca578" }, { "path": "BOOTSTRAP_REPORT.md", @@ -502,18 +522,18 @@ }, { "path": "BRAND.md", - "bytes": 2615, - "sha256": "2e18034f57541d62b3aeef2b520f3e43ab43c2611f41c5f02a08a037b534450c" + "bytes": 2725, + "sha256": "5b59241413c1fa6f87348995ae4c0e986ae705713c2de3a7268ef1f98fd1cc76" }, { "path": "CHANGELOG.md", - "bytes": 20284, - "sha256": "53d4a495af44d557f545f661bd5909d174669544b53c3f91de938cea05314d59" + "bytes": 24010, + "sha256": "0f0377bf2901ab2cc29d38fb80f858f4928c207f94b1d80941690be294fae1d6" }, { "path": "CITATION.cff", - "bytes": 329, - "sha256": "cb465b95e7ab95d8f8b88efb53680466c28685b70505fc4e6c0ae70981c1207a" + "bytes": 254, + "sha256": "93e975b60b8e6056dcc43b1e47270d234f5fa864f87a436f328800b031b1255c" }, { "path": "CLAUDE.md", @@ -537,8 +557,8 @@ }, { "path": "CONTEXT.md", - "bytes": 3363, - "sha256": "f16dd8377d89a0a1bc2ccf909bb77e55d38cb23cc1a545fe6f045fc207c55992" + "bytes": 3535, + "sha256": "6d01ff17a967bc4767f8479f6b47756eca8f3dce4d8e18a223662f7ef43991f3" }, { "path": "CONTRIBUTING.md", @@ -582,8 +602,8 @@ }, { "path": "DESIGN.md", - "bytes": 3624, - "sha256": "fd1050227a67cc3595fd65ce65934e9f9964cd1b98bf3f1e65bf7d48284efef7" + "bytes": 4800, + "sha256": "be5c21fb3ac78de26d0bffa7cf0e955d421de0d42d5c1aa8e5aa6aa24243ad57" }, { "path": "Dockerfile", @@ -647,8 +667,8 @@ }, { "path": "docs/adr/0012-build-the-whole-tool-own-the-boundaries.md", - "bytes": 4483, - "sha256": "98ab9a73a56ce47aa779cbb0d7d4234dba378cb0b2682ef588451e54de46b945" + "bytes": 4481, + "sha256": "4cbcd829b063fb2514003158189eec175925ea9533e43f5914724a055e34ca27" }, { "path": "docs/adr/0013-native-baselines.md", @@ -657,23 +677,23 @@ }, { "path": "docs/adr/0014-portable-agent-packs.md", - "bytes": 1136, - "sha256": "98b5894eae808973be4b2cffb82cc67addd411d5eada98fb793e85797e5059b5" + "bytes": 1132, + "sha256": "a9ac175ebaa8a753a892b76478b43b6517a3fe386866d9f888207538fce60210" }, { "path": "docs/adr/0015-flight-recorder-shadow-learning.md", - "bytes": 1210, - "sha256": "4c8c5211dc80b93cadf4f0c69f272a77f37879022eac80003a8ec16e93ddddfc" + "bytes": 1206, + "sha256": "5025f21fbd8433be874859d92312b5790dd75caddaf404e70defd05484f14eff" }, { "path": "docs/adr/0016-contextual-policy-source-of-truth.md", - "bytes": 2706, - "sha256": "9abd37f352732703f09f21c9d95a381e092b12cef5cb756469fc5865b6666847" + "bytes": 2702, + "sha256": "7844319a6a4417d0673865bf7f465e3dd0695e38154a5b20e7994b2d43cb343c" }, { "path": "docs/adr/0017-native-sqlite-durable-workflows.md", - "bytes": 1899, - "sha256": "1457678c22dde81519f0703cf52225fa2eb763ba24113dc316b0810027ca74d3" + "bytes": 1895, + "sha256": "5de5e3a8e6fb0bfa045217cd88b6a2b7dffe4ac5f6fb8530b97db978e90a8126" }, { "path": "docs/adr/0018-native-bounded-tool-execution.md", @@ -695,6 +715,11 @@ "bytes": 1187, "sha256": "9d3d93227646388096d99321fa87261bde800c5e5072183d1eb880d9f2586a9a" }, + { + "path": "docs/adr/0022-explicit-semantic-network-executor.md", + "bytes": 1763, + "sha256": "1306750b623880637b64b1729b79fbcd1a24f2d7b42f8b2b3e758cba95981e25" + }, { "path": "docs/AGENTS.md", "bytes": 380, @@ -707,8 +732,8 @@ }, { "path": "docs/agents/issue-tracker.md", - "bytes": 3327, - "sha256": "f30dfc5b45d961ca52f1db7ae1f06b4bb0c997dba1dd21c458acd307d97281f1" + "bytes": 3323, + "sha256": "a2dbef16312a35edf1a6a421d059f7f370053a5c628fd6cce5f4a8e6b89b3fa3" }, { "path": "docs/agents/triage-labels.md", @@ -717,8 +742,8 @@ }, { "path": "docs/api/openapi.yaml", - "bytes": 56737, - "sha256": "5ecb4c8719766f6af1ddfd01cb9313c1d47eb8592f4d7149d701f875662bd9ee" + "bytes": 60235, + "sha256": "c7f95a629fc72f146614c92db1d2a58147a675b441a893ae531f771b23a1b4d3" }, { "path": "docs/api/README.md", @@ -732,13 +757,13 @@ }, { "path": "docs/architecture/agent-packs.md", - "bytes": 1671, - "sha256": "fc442f92b670444edf25a0f7e868d63f3bbde6d9e3cf8acf491db655c13190af" + "bytes": 1674, + "sha256": "0d282f4a977570ad8d973e048413a8d437e911caaf73b914a38cc5eb2fd86bb9" }, { "path": "docs/architecture/context-compiler.md", - "bytes": 10770, - "sha256": "83f4627af6f329b5b8a0809f70ea3d911f4254c3b9854f310208e4f65c67c06e" + "bytes": 13707, + "sha256": "835decb79b3ac979098959bc02ae5123d9efde6f6a5fcacb75322651ba03e5eb" }, { "path": "docs/architecture/domain-model.md", @@ -762,23 +787,23 @@ }, { "path": "docs/architecture/model-gateway.md", - "bytes": 2102, - "sha256": "f113a584c9173494ccfa673ee1e56fc01a862a6d0e825ce9d9ddac8e7a1902a0" + "bytes": 2543, + "sha256": "b396c813b269dba45f654352060618e3b472fbe29bf1fb8e72a9519b16c129ea" }, { "path": "docs/architecture/native-providers.md", - "bytes": 14372, - "sha256": "02567269dda9611991d95617d41cf37b09a17b9011519ac05a42346bd508ab60" + "bytes": 14390, + "sha256": "e8ff700fc10c909222e85d6f9bfc51726d6ba3197c0a9dc9f77711ddce3fdc6a" }, { "path": "docs/architecture/overview.md", - "bytes": 5583, - "sha256": "6c9dac0705ee4fe31960df686556d3c83ae8eff4b3931cf4a2a9ba671a578552" + "bytes": 5637, + "sha256": "0a59ac7f08ce0cdf2a53bc12a2a95f178be0492c6973ba8ad4fe552ef4b24142" }, { "path": "docs/architecture/protocol-bridges.md", - "bytes": 9068, - "sha256": "6ac3cbff5589bce5e4f23fe1499654f1c70010ed19cf99c27b8889ca0f88b0b9" + "bytes": 9116, + "sha256": "7c192869b1598612eb962a262ae7ea715ba296b9c9b54dee301a43a68dce8825" }, { "path": "docs/architecture/sequence-flows.md", @@ -805,6 +830,11 @@ "bytes": 133939, "sha256": "7d5f7e1f7750a549c8a8d496c0c3139806564c67b75217cfc547f0b6a302b8d5" }, + { + "path": "docs/benchmarks.md", + "bytes": 8317, + "sha256": "0bbc131af4531e534aa028b0a88391af1c07f913349271885ebc3d9cbfe00e0e" + }, { "path": "docs/implementation/AGENT_EXECUTION_PLAYBOOK.md", "bytes": 2325, @@ -877,8 +907,8 @@ }, { "path": "docs/implementation/OAF-022-production-web-shell-note.md", - "bytes": 2092, - "sha256": "c577b731468b8540218ea6435c347134f678447df6bdc74708284592c4586678" + "bytes": 4117, + "sha256": "41a5aa77ea9f00c1cc811e67f05fe0e2e0eddabacda13f2ae89b237b2da017d8" }, { "path": "docs/implementation/OAF-023-run-context-inspector-note.md", @@ -917,8 +947,8 @@ }, { "path": "docs/implementation/OAF-031-context-intake-preview-note.md", - "bytes": 21172, - "sha256": "72c71dbb97d3c6f72c6f13e4dd9655e585128da9a99f37e033487ac17d236d7f" + "bytes": 21232, + "sha256": "1544d985babf5ffc6101cec46886a10cda8e3f5b23df0198d5cb0cf7963e9ca1" }, { "path": "docs/implementation/PARALLELIZATION.md", @@ -937,14 +967,19 @@ }, { "path": "docs/open-source/fork-policy.md", - "bytes": 727, - "sha256": "e5e16d073dbcea41368630543c09e40869c0fb42df360d0d3b895fcc3f221ffe" + "bytes": 723, + "sha256": "52a4392e7a1acdd124719d90f900a42c63b53ae61c3919eaf8b7b3ccbe117d8f" }, { "path": "docs/open-source/github-setup.md", "bytes": 655, "sha256": "ba9a9ad7a173cff71bf36e9f07290b3177f10bbdf1b78526c7d9851a54dc7408" }, + { + "path": "docs/open-source/launch-plan.md", + "bytes": 1669, + "sha256": "1684b67479cb0e790e8d9b83e598d0424fa7fbe9813c21be1c1d64d869b7d0bd" + }, { "path": "docs/open-source/licensing.md", "bytes": 650, @@ -952,8 +987,8 @@ }, { "path": "docs/open-source/release-engineering.md", - "bytes": 962, - "sha256": "04d51caaf8940e1e224e19d5f078f813553ff473ef58b68d8a3bb736005de9d3" + "bytes": 2073, + "sha256": "e87aeca2fe36c341ec8649be417c5faa06bd91d29262b7dbedaaf82236220d70" }, { "path": "docs/operations/backup-restore.md", @@ -997,13 +1032,18 @@ }, { "path": "docs/product/loop-workbench-build-plan.md", - "bytes": 16773, - "sha256": "3d8fbe66ebbcc19f7ca6d4d2b552d4ab9a13821af7222da3a991bb7be41519f3" + "bytes": 16772, + "sha256": "72fa8c73669a000409e21c774578ab7c012aee12d99d7af8548306c4d4c2abb1" }, { "path": "docs/product/loop-workbench.md", - "bytes": 6652, - "sha256": "0a33f3876552dcfc4b633b86273c940807ed965aace69f4d68c8e65995bfa898" + "bytes": 6651, + "sha256": "2dd20baf60bdb97d363b5e72ce5b285cfbe7965958f0730bba419c8c1c4f0080" + }, + { + "path": "docs/product/memory-recall-developer-first.md", + "bytes": 2055, + "sha256": "0ba4cd0631230ee575cd09cba47470619e4eea1ccbb9b61ea489369b1f75e81e" }, { "path": "docs/product/oaf-rust-supertool-spec.md", @@ -1032,8 +1072,13 @@ }, { "path": "docs/release/1.0-COMPATIBILITY-MATRIX.md", - "bytes": 5321, - "sha256": "15e3179d48cc283c4df44c61c0b6cea5d527af01f27910b4571f5e92e5eda218" + "bytes": 5427, + "sha256": "5b5b502956a17a26abe69785faf0c11cc36f1d1d13f218fc1eaf9d67b79b69df" + }, + { + "path": "docs/release/1.0-MARKETPLACE-MANIFEST.json", + "bytes": 911, + "sha256": "b24c59297530d79be9ae7b1c5b81f48c654fd72156c688a56bbd02191ef788a1" }, { "path": "docs/release/1.0-NORTH-STAR-GAP-AUDIT.md", @@ -1042,28 +1087,28 @@ }, { "path": "docs/release/1.0-PROVENANCE.json", - "bytes": 1849, - "sha256": "5dc927c8ec52851f272aa14596aac4ccec0a3fb77c837e3efd91065097c99e50" + "bytes": 2414, + "sha256": "b784ca3507a140e11fa2d72e4b7f83ac98997ccbdfcb8c96b7888079b6645393" }, { "path": "docs/release/1.0-READINESS-REPORT.md", - "bytes": 2432, - "sha256": "abc0884a0da767223d88bfc7bfb9dae36ca9580ab5e8a5f871066dfb30ae3c8b" + "bytes": 3391, + "sha256": "e4d95f4d9edc743526107b519a63db07955dc225c8e0d3f325261bc8e3919b9c" }, { "path": "docs/release/1.0-RELEASE-CHECKLIST.md", - "bytes": 1573, - "sha256": "93ca848e14e273fee589b75d9a37a6e1831ee6caf76ea099de6822eb3243868b" + "bytes": 2164, + "sha256": "084cd0bda0bef4fbcaabc93afc6dd94df0a13aa459597f3b0a4233c1327a1ca9" }, { "path": "docs/release/1.0-REPRODUCIBILITY.md", - "bytes": 1112, - "sha256": "3924016024c120d01f16845d39ac1143df765572d8f5ad6308461af32e65c306" + "bytes": 1723, + "sha256": "488b7a0c79b1554135d42f9805f58d1af8915985b88af9a28e9774e14796b758" }, { "path": "docs/release/1.0-SBOM.json", - "bytes": 16673, - "sha256": "d57ddc291232d41eacf3666b8ccd5cea3b62b709d87e282bccffe7bc938222fb" + "bytes": 17159, + "sha256": "59e9ba25e87acc81c2b6cc02b6d803fee49bc5a7f7644a8590c8dd6562926e76" }, { "path": "docs/release/1.0-SECURITY-REVIEW.md", @@ -1122,8 +1167,8 @@ }, { "path": "docs/testing/evaluation-strategy.md", - "bytes": 6082, - "sha256": "33ae0150ecd2561aed3e22b7c81aca1e1c8703e4c0930327597964045b57c5ec" + "bytes": 6085, + "sha256": "38fc6eb9c3298b393854a94eec80550d492d28778b4cac8e9d43e49461ac41b8" }, { "path": "docs/testing/golden-path.md", @@ -1140,10 +1185,85 @@ "bytes": 2064, "sha256": "a47cd55621d909939386754b7de2b7d38691f50a92fd63a44ec6c346828cd638" }, + { + "path": "docs/usage/claude-code-setup.md", + "bytes": 1588, + "sha256": "8252eac4790ca9704f36e15e20b5bf6d0bf1dc35d104da35e3791a18c94ec3f6" + }, + { + "path": "docs/usage/codex-setup.md", + "bytes": 1084, + "sha256": "f7f41aced4c8d66d1473e11b6d1c2d03086b5951d7b65c98e418c2284d7f4cbd" + }, + { + "path": "docs/usage/cursor-setup.md", + "bytes": 1336, + "sha256": "859d9daae548fc7957bbd54ff398ab9ed9707f69a887dd6982edf0218e08e9ff" + }, { "path": "docs/usage/local-agent-handoff.md", - "bytes": 16002, - "sha256": "50d175ae1427a6ab44fea6a0ab063ee7b08318335f98eb60856e46759fe9c947" + "bytes": 17390, + "sha256": "61d97e5cb58115dd5e596da2d7a9c7a08a16ae205744dffbe5c25529bce0ea0d" + }, + { + "path": "docs/usage/mcp-server-reference.md", + "bytes": 2616, + "sha256": "be31b255e4d79565fb713ef9a75ffc56ef42e438f874b36957b99c92bc6265f1" + }, + { + "path": "docs/usage/memory-lifecycle.md", + "bytes": 1677, + "sha256": "b26e571132659205b8a237789c375e61b507d3ec70c70117a33c569906abacf0" + }, + { + "path": "docs/usage/oaf-compatibility.md", + "bytes": 843, + "sha256": "4078e06c5361bd59314edd589c7ac7205cbcdd044c7a217086f8c3dabeba212c" + }, + { + "path": "docs/usage/README.md", + "bytes": 2244, + "sha256": "b15d038476e96aa28abf270aafbf254fbea32d358b5f79afd67dcf88ccf8f84a" + }, + { + "path": "docs/usage/recall-map.md", + "bytes": 2866, + "sha256": "abeaf7d2a788d9301fea56ea207103cffb418ca32ab3d5a2f91b06bd1b6e5f1f" + }, + { + "path": "docs/usage/rust-acceleration.md", + "bytes": 1762, + "sha256": "76cfd88a85d1d353b5f24a719570b423358a6441bdcdc1d76a081b9186cce8d5" + }, + { + "path": "docs/usage/security-model.md", + "bytes": 1499, + "sha256": "9674797fa1ea1b6293d60e08f42b44d708e11fe821e1764970464a9035ce801f" + }, + { + "path": "docs/usage/semantic-setup.md", + "bytes": 4998, + "sha256": "d3b2ca6350d538d90d303f23c9dd639afb9a282a637f76894b112e7d4bbeedee" + }, + { + "path": "docs/usage/support-matrix.md", + "bytes": 4490, + "sha256": "dd4108828b742e8d06112e6abdfa4119f90a8b034b417b9e7e41f6924dcf26a6" + }, + { + "path": "docs/usage/token-savings.md", + "bytes": 3138, + "sha256": "49caa5e970ac5a6125e42d5d5e521e4903971375cb32fcb6d2d112dfb7af1d6c" + }, + { + "path": "docs/usage/troubleshooting.md", + "bytes": 2446, + "sha256": "317f19dfec8cc3656981460e2bd914a77c193915935d3f36a51683f7719970ec" + }, + { + "path": "docs/usage/uninstall.md", + "bytes": 3349, + "sha256": "b2e6b05ca2429fe0b2cb74f5e61cbf75649eb708293ca6ff9431b9a6217cf79a" }, { "path": "docs/ux/accessibility.md", @@ -1230,6 +1350,11 @@ "bytes": 1310, "sha256": "ef48e686a84269b4010da9d0ac101fadb5f74a3db626d9a05732901ab24cb47f" }, + { + "path": "evals/locomo/smoke.v1.json", + "bytes": 2827, + "sha256": "0facc7a929048fa02f324c07976984edd8d5ba62926855ca51dd4d4b34eca489" + }, { "path": "evals/memory/cases.json", "bytes": 1055, @@ -1242,8 +1367,13 @@ }, { "path": "evals/README.md", - "bytes": 3746, - "sha256": "4b5703e683dfe130d176de7aaf521f925ecfce2d71734cb47af1f3ace27da36f" + "bytes": 4329, + "sha256": "f98c9b361ed781666049a35f128c77adbb4934f1c93c5baca0765c88535ba4a6" + }, + { + "path": "evals/recall-map/architecture-ranking.v1.json", + "bytes": 953, + "sha256": "b5dc1628ab7c6e849052010c97f9263907ebf8c7168b3d7f4f1987beccc5cdff" }, { "path": "evals/sufficiency/gold.v1.json", @@ -1542,8 +1672,8 @@ }, { "path": "examples/protocol/compatibility/fixtures.json", - "bytes": 41780, - "sha256": "2f3aeae4d50d71ba9d6d2c014b1e5c8badc7214efd48028ccab22c11a46a56ec" + "bytes": 45596, + "sha256": "9a80ea8a22eff4c6d3b3d37218b3c0f68c9903a7a3438fe07f190f2d07fb04f5" }, { "path": "examples/protocol/compatibility/invalid-harness-context-source.json", @@ -1715,11 +1845,51 @@ "bytes": 319, "sha256": "ff40e741d7cf0d8db0dbf0c11a5d41091d9c6272b5e6d301550cfe6214c9305c" }, + { + "path": "examples/protocol/compatibility/invalid/recall-map-active-fact-proposal.json", + "bytes": 1820, + "sha256": "53ec9b6a64af20fa1a453bf0c7b5ecc3a7c63e3c2bda62a063cebc9570ed074c" + }, + { + "path": "examples/protocol/compatibility/invalid/recall-map-canonical-state-mutation.json", + "bytes": 1530, + "sha256": "71e1ed830582f133980b57f0c7f00046dbd0f394babab12a58c061c960639771" + }, + { + "path": "examples/protocol/compatibility/invalid/recall-map-model-call.json", + "bytes": 1531, + "sha256": "68d38631bf6da409316e83cd87cecaf5b2681a5dcc82caf11872e85acd0394d5" + }, + { + "path": "examples/protocol/compatibility/invalid/recall-map-network-call.json", + "bytes": 1531, + "sha256": "3899b0a22e77db1a85d23a598d20e2fce947590de33b6c42d7e2a39ffc9f4a2a" + }, + { + "path": "examples/protocol/compatibility/invalid/recall-map-raw-label.json", + "bytes": 1870, + "sha256": "f724d364c048495b5b2e5303d244827aa06015f48dc74e7f14c1ff733afcc0b9" + }, + { + "path": "examples/protocol/compatibility/invalid/recall-map-raw-source-body.json", + "bytes": 1717, + "sha256": "1953c797f2274d2744a32f9fdfa7534a01558ff39c8026be29e56bf7ab5293a9" + }, + { + "path": "examples/protocol/compatibility/invalid/source-graph-double-encoded-locator.json", + "bytes": 933, + "sha256": "c058207f0e43e42599e1b27d0d9a09a872bdae2773ce97f33b924304fab47093" + }, { "path": "examples/protocol/compatibility/invalid/source-graph-local-path.json", "bytes": 914, "sha256": "d477221f96e7c4253afa9938e07f0ca75e867bb1c0cee979bb820c18bb4a5a9d" }, + { + "path": "examples/protocol/compatibility/invalid/source-graph-preview-double-encoded-locator.json", + "bytes": 2409, + "sha256": "af69e5f70ce5e2bbf368194dac5f11991bb769c111bee1129a546a16c85687ae" + }, { "path": "examples/protocol/compatibility/invalid/source-graph-preview-local-path.json", "bytes": 2036, @@ -1730,11 +1900,36 @@ "bytes": 2056, "sha256": "c08d1c18dfa3d3d36505a3128aa507114557f4178aaf00e5442ea993b2241218" }, + { + "path": "examples/protocol/compatibility/invalid/source-graph-preview-raw-label.json", + "bytes": 2393, + "sha256": "4392eebf9de95ab5b50266532f42fa2abbbc3190f4377002271f215ef953f8dc" + }, + { + "path": "examples/protocol/compatibility/invalid/source-graph-preview-uri-locator.json", + "bytes": 2402, + "sha256": "4797bddc5cbe685f40a5e093063972a4a93103c430144e3d9922f1120cef1c5a" + }, { "path": "examples/protocol/compatibility/invalid/source-graph-raw-body.json", "bytes": 968, "sha256": "58e5375b5639a61f18572c7eaf638bf0d99931a6341b9097da57c6cf48f00da3" }, + { + "path": "examples/protocol/compatibility/invalid/source-graph-raw-label.json", + "bytes": 927, + "sha256": "5ff6e34b7e446af5063904c8618720c26837f057b17b5fe88ec1c1ccd8b8747d" + }, + { + "path": "examples/protocol/compatibility/invalid/source-graph-unsafe-metadata.json", + "bytes": 632, + "sha256": "4c28a8429f4e98a7e5715b0073a148a5a971f094abc3103b48e0ad7aefac10b0" + }, + { + "path": "examples/protocol/compatibility/invalid/source-graph-uri-locator.json", + "bytes": 922, + "sha256": "cc2ae4ab3fa1d9d595559818e8e125c56e506c90f96d571e8594bbfb0c4d89bf" + }, { "path": "examples/protocol/compatibility/invalid/source-symbol-index-raw-body.json", "bytes": 460, @@ -1987,8 +2182,8 @@ }, { "path": "examples/protocol/memory-profile-report.json", - "bytes": 1193, - "sha256": "26c9ace911cb8c1d9ea323e87fb1356aab65a0cc5754055ff5102a007dc87aa3" + "bytes": 1185, + "sha256": "71b4fb8e72a9eeb81cb37d8e714c5d137f69c96b9a11c4e098497b160ad14c10" }, { "path": "examples/protocol/memory-proposal-queue-record.json", @@ -2090,6 +2285,11 @@ "bytes": 106, "sha256": "219a78b253c0f5ee2b114893dcaaaae186dc1b629816802ee8e0bd575d8e4bfc" }, + { + "path": "examples/protocol/recall-map.json", + "bytes": 2852, + "sha256": "cdaafe7b410e15c349fa149b67fc6b624cca3cc1e3851a41d366762a5904b7f4" + }, { "path": "examples/protocol/research-ingestion-result.json", "bytes": 2472, @@ -2100,6 +2300,11 @@ "bytes": 69, "sha256": "a57eb5d1761f65e158752b850c2f68baaa373dcd10f11b926401562eeabf4609" }, + { + "path": "examples/protocol/semantic-setup-report.json", + "bytes": 1154, + "sha256": "6eef0c0c735b1305d477f1831973f3f03f3b7e48ba01bfc89f284d143ed5fe5d" + }, { "path": "examples/protocol/skill-catalog-report.json", "bytes": 3387, @@ -2117,13 +2322,13 @@ }, { "path": "examples/protocol/source-graph-preview.json", - "bytes": 3767, - "sha256": "b775cc73de8ab6562e3c77097422aa596a7df6cc73260f8eef381ff7a3f2ddf9" + "bytes": 4991, + "sha256": "e7a0d65f5fdc5082b1f90044b901b60451d11058986929a03a03402843d4a0d5" }, { "path": "examples/protocol/source-graph.json", - "bytes": 5503, - "sha256": "8c5ab96d995f341b57448c153ca163236c4d2a08c77a824168e071b903f530ac" + "bytes": 6272, + "sha256": "08fd3be564e1869bc5e92f24d1afd206b1ba3e68adf47c4dc550e5f2e843d257" }, { "path": "examples/protocol/source-snapshot.json", @@ -2157,8 +2362,8 @@ }, { "path": "GOVERNANCE.md", - "bytes": 598, - "sha256": "ef85f7b2d9ec6271150741d5f4c69d42e1fa4809e630314297f348b2a4fd2e3e" + "bytes": 608, + "sha256": "479e1fe15e56b58bd33b41cab67244de87b6f62b491bea0761337a5b87cd7e52" }, { "path": "HANDOFF_VERIFICATION.json", @@ -2177,28 +2382,28 @@ }, { "path": "MAINTAINERS.md", - "bytes": 876, - "sha256": "dcd776f1fb42c3eaafff158229dc61ff7ea1fd1c7c14fee4c55d79748dafd0bb" + "bytes": 864, + "sha256": "03c2df558aad8774beeab1f0c4d5fe87524d183b097d0a659905dbed5770b77c" }, { "path": "Makefile", - "bytes": 561, - "sha256": "693dd70d413f6a83734a0924002eb07bcc5a75858eb8f6eb2a9256797a842988" + "bytes": 498, + "sha256": "9284cecc7e960c19025c219450a1fbd4033b32ce0cd285a92385b4468d4ae2ee" }, { "path": "NOTICE", - "bytes": 168, - "sha256": "d612f62888341d794bee5275fc430f0b8900fadf714a2cc417bf159f80be6442" + "bytes": 160, + "sha256": "0a2a9a1fcbf59728f3af934a07f2c6fb16412f2a7e56eab5c372fd76b9dd9113" }, { "path": "package-lock.json", - "bytes": 10631, - "sha256": "15af2e29fa1b1fec125c550839d9ae8fc9c0b2adc72881b1db22493352d0851e" + "bytes": 11169, + "sha256": "66bac759b6c28f95c29eca52c0b42e9bb24237a4a926fb67a42093f9ee425ed7" }, { "path": "package.json", - "bytes": 3699, - "sha256": "6f8fba5c18348e402b949918f3621b24a5dfd4e12812c2a86629a3c646056748" + "bytes": 4490, + "sha256": "7571776a443d6c4e5d91a824c8056b23c20d6378b8b194a316bd206a4b208359" }, { "path": "packages/adapter-contracts/package.json", @@ -2282,8 +2487,8 @@ }, { "path": "packages/harness-context/src/index.mjs", - "bytes": 219751, - "sha256": "1fc3ddab3b834e27b94c1510dc2b90a3fad3982a5e8ed40bc55fc082b5be9be4" + "bytes": 219824, + "sha256": "b046445715ddada47138c119cf30ee67d015ae5616c8f7ebcacf7f320fde357a" }, { "path": "packages/memory-core/package.json", @@ -2292,8 +2497,8 @@ }, { "path": "packages/memory-core/src/filesystem-ux.mjs", - "bytes": 21255, - "sha256": "195fb4f612f69d99c7668a4a7871aaa8682beedc7dbbf1eb53f59e352701df2d" + "bytes": 21247, + "sha256": "8a744e7bc16b572c81589e7dc4baa23dc03dccce185e3532b01e98834cea32d1" }, { "path": "packages/memory-core/src/index.mjs", @@ -2367,8 +2572,8 @@ }, { "path": "packages/protocol/README.md", - "bytes": 10250, - "sha256": "a753479ac9b5d4c1d008aa79a08dc8629c5d2d89c4f69a509f703b820a4ef22f" + "bytes": 12048, + "sha256": "f0ec98afb85ee4fbeb501932354def0557b8507b9a7ad951b36549d8686fe45c" }, { "path": "packages/protocol/schemas/adapter-conformance-fixture.schema.json", @@ -2387,8 +2592,8 @@ }, { "path": "packages/protocol/schemas/agent-pack.schema.json", - "bytes": 4068, - "sha256": "dfa2de552685c9e71c4e64451240d876306d71cb52d68437fcefd38befd8a31b" + "bytes": 4064, + "sha256": "64fb116d4303dfdbe25ecf3cf7b834b7077ad8fa033c2831fbe878ae9c8237a6" }, { "path": "packages/protocol/schemas/api-auth-bootstrap-status-response.schema.json", @@ -2517,8 +2722,8 @@ }, { "path": "packages/protocol/schemas/ast-code-chunk.schema.json", - "bytes": 4385, - "sha256": "cbb23dc86f3ebcf4a127be2b3c26db4c25e6adde9e1eecb0f92a91e53d4f12c6" + "bytes": 4837, + "sha256": "8e17742fac21ad05d13f12e3bca7386e28bf26665db255346c2961ddd0b4800a" }, { "path": "packages/protocol/schemas/backlog.schema.json", @@ -2637,8 +2842,8 @@ }, { "path": "packages/protocol/schemas/context-pack-measurement-report.schema.json", - "bytes": 26983, - "sha256": "e5b7d5dc1760bfe119f2fc95fed1af6efe258695109c2ee721fe965921e71ec1" + "bytes": 26929, + "sha256": "a929a7f22ea35ffabf413f6ff0c918956e90fc296809f6d4615b3ecdc05cac2b" }, { "path": "packages/protocol/schemas/context-pack-receive-report.schema.json", @@ -2657,8 +2862,8 @@ }, { "path": "packages/protocol/schemas/context-pack.schema.json", - "bytes": 26396, - "sha256": "71eb0086556151c4e0f07fa3bdb18d901cf0d58ac6cb291195f1add059fe5262" + "bytes": 26410, + "sha256": "e3dacafdf7ec229bd4617aaab97ee5a61cd4cc1d3f2050da1fcd8d0726e7cccd" }, { "path": "packages/protocol/schemas/context-request.schema.json", @@ -2940,6 +3145,11 @@ "bytes": 1453, "sha256": "003404f77fd47261c469e1951438727e0e953ec85d9d17e2f213d1ca5fc80453" }, + { + "path": "packages/protocol/schemas/recall-map.schema.json", + "bytes": 13170, + "sha256": "6626b9c93a3b446c1db8b24a5344967f9876d60a8087054b9d532e2dff78928f" + }, { "path": "packages/protocol/schemas/replay-request.schema.json", "bytes": 886, @@ -2960,6 +3170,11 @@ "bytes": 4291, "sha256": "fa0f85cdfac431a527944c5419e03dc27f36f19b8eae711e237b3e6c5e022ea6" }, + { + "path": "packages/protocol/schemas/semantic-setup-report.schema.json", + "bytes": 5031, + "sha256": "a704feb1b6f74145661ed890a94db27c7b0bb22653732a557d1106ad505be90f" + }, { "path": "packages/protocol/schemas/skill-catalog-report.schema.json", "bytes": 7618, @@ -2977,13 +3192,13 @@ }, { "path": "packages/protocol/schemas/source-graph-preview.schema.json", - "bytes": 12666, - "sha256": "8d1eb47dc10e4696847bb9e7a437b44647c94a6abf9008ed57ba2cbd51b69116" + "bytes": 19619, + "sha256": "469a3247a99319f6e13f10ae797cc42700cd2c6f2de5abc94540f8c2bb27ce19" }, { "path": "packages/protocol/schemas/source-graph.schema.json", - "bytes": 5693, - "sha256": "dd2bf8dc2df72dffb92f5a6d868ce82b205a40cb5c42a12ef5e96538d91bc262" + "bytes": 9998, + "sha256": "4624b7fe439c8fb6c41a9c1b6f074f8a319db242df1f158f2a26c5795a71161b" }, { "path": "packages/protocol/schemas/source-snapshot.schema.json", @@ -3067,19 +3282,34 @@ }, { "path": "packages/protocol/src/index.mjs", - "bytes": 2440, - "sha256": "7207b7e8b17ae376f6a4fdc339fef4ab4ac59657ab00373970877f4a2affbef8" + "bytes": 2710, + "sha256": "5e92e31561443d946a5d0750ed06bf5c2042aa1a853d7d257136170df53d459f" }, { "path": "packages/protocol/src/schema-validator.mjs", - "bytes": 7841, - "sha256": "92d8cf9ceb1000ae5201f3cdfbb409a415322be7ecc72231e4ceca1b625cf1ff" + "bytes": 8355, + "sha256": "8c56821b30cddb0f6a82aa231d5c869ebb5c530a6d7b6f049bb6def2ecd2cb56" + }, + { + "path": "packages/protocol/src/source-graph-locator.mjs", + "bytes": 3909, + "sha256": "0be7b97d58aa5d871418eb2ecb49ae6235edb35efc9272844fac71815430452b" }, { "path": "packages/README.md", "bytes": 244, "sha256": "aa87e9ed43ed797318707a018ec169328a23d6ff1150860cce6ab58a8d2fd0ff" }, + { + "path": "packages/recall-map/package.json", + "bytes": 130, + "sha256": "2c261a2e4213dc0bf04f607b4cce4b46bf81b502e322b4b703b0d52893143ae1" + }, + { + "path": "packages/recall-map/src/index.mjs", + "bytes": 19093, + "sha256": "6005d3e3262ae27868ba6ae6684ad3536e4c609d004779b99fb27bbe3ad9cf1a" + }, { "path": "packages/release-readiness/package.json", "bytes": 141, @@ -3087,8 +3317,8 @@ }, { "path": "packages/release-readiness/src/index.mjs", - "bytes": 24542, - "sha256": "a6fe386af8ec21402a0cf844750202fed76c6ae8082cb26f8fbc6f0d380b636c" + "bytes": 28635, + "sha256": "17f8b9faf40ba24f59b2649bf0464d5f7135df29e0e7e0f8d32a7a4ef0453c9f" }, { "path": "packages/replay/AGENTS.md", @@ -3105,6 +3335,21 @@ "bytes": 5374, "sha256": "1f88a169112e6a7a5550397e8f202367cb25c9734c6f9d1b7227990184d55d40" }, + { + "path": "packages/semantic-setup/package.json", + "bytes": 166, + "sha256": "cfed3f1341e02ff5c832ed85138691df1463e469106e6bd1241b9ecb4332d862" + }, + { + "path": "packages/semantic-setup/schemas/semantic-result.schema.json", + "bytes": 1595, + "sha256": "0bf68957e1c8edfbd7f76490b87b5d46e2d1f30d34af9c75560229de2300c894" + }, + { + "path": "packages/semantic-setup/src/index.mjs", + "bytes": 30710, + "sha256": "c8223e418f2e4ad775eb071bead28b5681816edacffb32e25d6185237aacdb7c" + }, { "path": "packages/source-graph/package.json", "bytes": 172, @@ -3112,8 +3357,8 @@ }, { "path": "packages/source-graph/src/index.mjs", - "bytes": 10923, - "sha256": "bb64312258fba75a6199c6edf866bb1ee857742de395893888fa9f065e20bf3b" + "bytes": 13169, + "sha256": "69c20de2bab3f0fcc4bf32141457c0a89284bb60a36c57d67cfe7902a270c3b8" }, { "path": "packages/storage/package.json", @@ -3162,8 +3407,8 @@ }, { "path": "packages/ui/tokens.json", - "bytes": 441, - "sha256": "ecb8402f32594cb8ad1d3b1b3fbba7a74f9cfe263fc510d79156f280a0676864" + "bytes": 1847, + "sha256": "a62bc9b393cd468d071cdb1a032492195d018281e2e115c0ebef17f5e0bcac86" }, { "path": "packages/workflow-runtime/AGENTS.md", @@ -3192,13 +3437,13 @@ }, { "path": "PRODUCT.md", - "bytes": 5233, - "sha256": "c7d2c29d18999b8acc9b94c07a0ca6fca24a42461e6c239400d061050a917927" + "bytes": 5262, + "sha256": "c7830c119f2c546f7f9e5ed8365bcfafd5f12fb30ddcd4584504a77d4f5451c1" }, { "path": "PROJECT_STATUS.json", - "bytes": 55618, - "sha256": "2aab1986fb6d946d37a1ef224b6e4f57282827f4b07cc5f29b6eb77f43a7d360" + "bytes": 60779, + "sha256": "2da0461472309a658fac2798db0faba3e0895ce84e499d41022fe44b39b29318" }, { "path": "providers/AGENTS.md", @@ -3237,8 +3482,8 @@ }, { "path": "providers/native/context-candidate-ast-code/src/index.mjs", - "bytes": 65428, - "sha256": "c562e0c03cf5e9d278a5b773c650ce6d9f21d64c41cdd82af449833a76dd2134" + "bytes": 145608, + "sha256": "0124c48325443dd0ef8bb03159531a0793ea80acd2da6f2cfdb84c5daf889753" }, { "path": "providers/native/context-candidate-exact/package.json", @@ -3317,8 +3562,8 @@ }, { "path": "providers/native/memory-sqlite/src/index.mjs", - "bytes": 74918, - "sha256": "64fc7b90b75c4e04795fab5faa1e26fe4ac7aa4934c8a38df2eeb8a4efe9e5bd" + "bytes": 77690, + "sha256": "6b4c14a5921682bb7bb14a8d64f35b5b9746d4894d04dfa52b1fe273d69b1ccd" }, { "path": "providers/native/model-deterministic/package.json", @@ -3412,8 +3657,8 @@ }, { "path": "README.md", - "bytes": 21092, - "sha256": "01f9ce70109c50393417ebd1a2d8807a980d1516b9d49304fe199274aa01fe43" + "bytes": 14006, + "sha256": "aea69b08f5576a4586e7dd7b3713a5744ec2b299bbda93b8928b81188cd1910b" }, { "path": "REPOSITORY_MAP.md", @@ -3422,8 +3667,8 @@ }, { "path": "rfcs/0001-protocol-contracts.md", - "bytes": 2099, - "sha256": "a9cc75bcb93c4a992e85127ab751b0666ef090bb722cdd2d753cce9adebf4abd" + "bytes": 4999, + "sha256": "f7967d8858a7e492f3b6a116005cc87c6817bd78ae66218cc9f21071ef041821" }, { "path": "ROADMAP.md", @@ -3462,8 +3707,8 @@ }, { "path": "rust/oaf-store/src/lib.rs", - "bytes": 171861, - "sha256": "ef0395669457c7a2cd3672ec4acd410d4902cc330ab44a5a3373ac382f87be58" + "bytes": 175853, + "sha256": "2032a02d9a870025548569f236c2ba422fd427a6fad72ff760c3ed104330d3f6" }, { "path": "rust/oaf-store/tests/m1_governance.rs", @@ -3477,13 +3722,13 @@ }, { "path": "rust/oaf/src/main.rs", - "bytes": 179042, - "sha256": "7b8d81cedaee312aa62e365c51027a98f5c0986f1c5c09173c834c35d08f7b29" + "bytes": 179738, + "sha256": "0857b482770209875102cfb78510eb23af0540db020cab384ad591f6e6fb7379" }, { "path": "rust/README.md", - "bytes": 2467, - "sha256": "8eec0fe271cf27297687bc01ad14f64996530926db1b3583a091156a37ffa18c" + "bytes": 2463, + "sha256": "8ef17af4e18403740e0afb841eb5879cf5ad7d6168d3bc16553c813e2c2055ad" }, { "path": "scripts/auth-bootstrap.mjs", @@ -3492,8 +3737,8 @@ }, { "path": "scripts/bootstrap.mjs", - "bytes": 2139, - "sha256": "41fdb35433566e73d06a0728a32d2ab77b399258606e651e320c365bf404dd0f" + "bytes": 1923, + "sha256": "df014d2af9ddb820b33d7e7a8727e2e25fed49d046e17228f89b541f8646f514" }, { "path": "scripts/build-rust-semantic-table.mjs", @@ -3502,18 +3747,18 @@ }, { "path": "scripts/check.mjs", - "bytes": 11575, - "sha256": "292ba6dfde396c6d4b78657402c160d987f868fd8cb9af2fce51b38455b3cc40" + "bytes": 12305, + "sha256": "a5cec9490a619d954189f4da3e46bf3d9816a05b96c59b73a0a4cf559bc6972f" }, { "path": "scripts/consumer-browser-smoke.mjs", - "bytes": 8717, - "sha256": "708b1a93eeb07a4b21e0e1d2c2bf2ddf00aab9d9f13cf17e714e96edd7948a7b" + "bytes": 23703, + "sha256": "27c6584db7a5234a170387769b8aa7c6d8742e87836ba4c40c911cb9b96ff4d6" }, { "path": "scripts/consumer-smoke.mjs", - "bytes": 7246, - "sha256": "fafbec1fc98d9045492a801a4f36bab009db26fcff77056b2e497341b2c90ca1" + "bytes": 8884, + "sha256": "49c8f2d2df28b45dad7133e1f3f3d01cc819c57f2be037bc91c6fa926f2ad447" }, { "path": "scripts/context-recall-eval.mjs", @@ -3537,8 +3782,8 @@ }, { "path": "scripts/generate-manifest.mjs", - "bytes": 2544, - "sha256": "8cf96ea212ecb96e784817b691b8da50b984a0a0ddb9d3c514004b1c6ec6a0b0" + "bytes": 2540, + "sha256": "d9404c7ad8de320a796781027355bc30765b883f047623c2b6447b77de547a7d" }, { "path": "scripts/native-smoke.mjs", @@ -3555,15 +3800,20 @@ "bytes": 6211, "sha256": "d8fbed1f8c423334c2d500a3165c13c74d38aec38abae63eb85f4ff09e0206a5" }, + { + "path": "scripts/public-copy-audit.mjs", + "bytes": 1361, + "sha256": "896ea686696d04fc2e7c61d49dfd1474b35491b2753545799c1ad2b35aeb1c39" + }, { "path": "scripts/release-readiness-check.mjs", - "bytes": 646, - "sha256": "7019ba7e7c92fa3fe262bfd7fc99ac1544634ebf88dcf52d53ae341d1a09dd3a" + "bytes": 774, + "sha256": "646bb32ac59f47f13aa82f3ddb97f9ee002285639d0f70f385c6cd3b39c93749" }, { "path": "scripts/release-readiness.mjs", - "bytes": 560, - "sha256": "42261c56b190da96bf9129f020df74a0993f861514fa6fcbc547bc33f3c33008" + "bytes": 686, + "sha256": "199a56cecda7fbd4a667fae8c11dd4a6c09b66c84c2990991193ebf1207300b3" }, { "path": "scripts/run-evals.mjs", @@ -3590,11 +3840,6 @@ "bytes": 6083, "sha256": "8ca4cb39499f32648972a07f8d39c6a0cad1b015f935aeecf037735e3416ced2" }, - { - "path": "scripts/rust-current-truth-conflicts-quality.mjs", - "bytes": 4123, - "sha256": "b8787314e57e919cbb9997d36499f9d7ccba38742dcdd926454101a93155a168" - }, { "path": "scripts/rust-distribution-quality.mjs", "bytes": 13764, @@ -3635,11 +3880,6 @@ "bytes": 35987, "sha256": "328ae65564a165e5723b3e6e9c08cfbfbbd5a396016c299ce6fc8d5a43725f5b" }, - { - "path": "scripts/rust-inspectable-session-demo.mjs", - "bytes": 6424, - "sha256": "de7e6d7a65b16f6aa7dd8790680cfec447f80ade7328731d6c3904931504cbf2" - }, { "path": "scripts/rust-intelligence-quality.mjs", "bytes": 16802, @@ -3665,11 +3905,6 @@ "bytes": 16284, "sha256": "3cce2bd2c63588bd086496f3bd93267e949a130db934ab5669dcfc21ec39e8a5" }, - { - "path": "scripts/rust-routes-imports-quality.mjs", - "bytes": 7723, - "sha256": "641c869ffadf5250dbdc73024fb6c8135f3d0ec448609131a4f330a5d08093f9" - }, { "path": "scripts/rust-semantic-quality.mjs", "bytes": 5412, @@ -3680,11 +3915,6 @@ "bytes": 5553, "sha256": "e114be2f2544b1e66c56cc87431cab0608e6786a460d0a04eec6b3a29e39d67c" }, - { - "path": "scripts/rust-taint-policy-quality.mjs", - "bytes": 4569, - "sha256": "00e8dd33f7fa386e8cb82152f4157c7134bcf1e8315dc915b3d60acc62c55d90" - }, { "path": "scripts/rust-typed-calls-quality.mjs", "bytes": 10539, @@ -3697,8 +3927,8 @@ }, { "path": "scripts/status.mjs", - "bytes": 2923, - "sha256": "57f5f4730e8e23b8fac0eabdda42f285f6aee2bffb0ad3426de010fa3c46407c" + "bytes": 2995, + "sha256": "feccb4287a101e970487496a143e141f3a9df446222d4491cb3e7fc9d9cca351" }, { "path": "scripts/task.mjs", @@ -3742,8 +3972,8 @@ }, { "path": "SECURITY.md", - "bytes": 602, - "sha256": "a5d5b9d1e786d26bedaca01aa84c34699a4e258f07838193a0d0e8d752b2fc12" + "bytes": 656, + "sha256": "af8c910a7f2092f3adc8a9be30f79618d040101c6eda0fda705fdd8f9327b472" }, { "path": "services/control-api/AGENTS.md", @@ -3757,13 +3987,13 @@ }, { "path": "services/control-api/src/route-contracts.mjs", - "bytes": 82829, - "sha256": "14190859ef646a62337948c04a2406b6b6ed302ba9081a67f109693157401805" + "bytes": 85191, + "sha256": "d56878cde8db320aa8b8d1000a2ae3be9024964f4d59e70c12ccc4a8a2c57341" }, { "path": "services/control-api/src/server.mjs", - "bytes": 75854, - "sha256": "0f5719820ba8fbd361c991d9ce189959706e59580e3952e5a9ffbac548d0558a" + "bytes": 77454, + "sha256": "1a4a8efae64d68668e26295234c6db413f32bc1841da24f4237a5b37ef0c4806" }, { "path": "services/README.md", @@ -3847,18 +4077,18 @@ }, { "path": "skills/oaf-memory/manifest.json", - "bytes": 628, - "sha256": "000da4b55b96c179012b1850af0256d9021322fc824fa769f3eb21c7f0151337" + "bytes": 651, + "sha256": "62ccf6d19b64d646cfa06672f64783dc5eedef93f93d1b7b70b0dda057366eb5" }, { "path": "skills/oaf-memory/README.md", - "bytes": 1243, - "sha256": "e6a3f0ab10e2d6f4a4cda90973e63bb2fc3f59519f46386199afe79289d7f355" + "bytes": 1030, + "sha256": "b0b3779482c60c68709ed326543a5485bf72ea6a5e3cfadce8a594e1de29b589" }, { "path": "skills/oaf-memory/SKILL.md", - "bytes": 10909, - "sha256": "41a0b0a39ba7783c2c9366b895af4faca080629bbf5596b76671b9338ac0eb08" + "bytes": 5198, + "sha256": "a24fa592d3c76d903bb13fd930ef9e755c745259b5ff079f6a6ef670c57093ae" }, { "path": "skills/release-readiness/manifest.json", @@ -3917,8 +4147,8 @@ }, { "path": "SUPPORT.md", - "bytes": 413, - "sha256": "f035dcfef70fa8d403ac34c2402e12b892f8e39954ccac31916977fbe3f6d6a1" + "bytes": 429, + "sha256": "9f930d8aea4b866d9009e58abd9497309b5292784b52f1bf66b6a6728120e7c4" }, { "path": "TASKS.md", @@ -3942,8 +4172,8 @@ }, { "path": "tests/ast-code-candidate-source.test.mjs", - "bytes": 25881, - "sha256": "781f80d4e1d25332fcd8a184874667796ab85ce5f6de9671ac4033569ee76b54" + "bytes": 34196, + "sha256": "bf6744a69b4f22d20efd59c1de73771c8d16191f7ab1cc08bef80db1f99dbcce" }, { "path": "tests/benchmark-truth-floor.test.mjs", @@ -3952,13 +4182,13 @@ }, { "path": "tests/cli-measure-context-pack.test.mjs", - "bytes": 13579, - "sha256": "eeec3b32a4f1bf151dc924a2ff57c8f34b8feeef9b54ad09ba80275b18cd6940" + "bytes": 13781, + "sha256": "fb679543a73e9e212a31791a7a14e18642f3aec581a0c03dd05fbac53f42e34d" }, { "path": "tests/cli.test.mjs", - "bytes": 266882, - "sha256": "8e234628f917b61a3a4aa3fceb81baf2417ea62235ba62f2ad4f42573c0215e7" + "bytes": 307264, + "sha256": "22a45353019af82c88a2d721e831ed360f5a1c6570aad556fb9de914da2af8f5" }, { "path": "tests/content-intelligence.test.mjs", @@ -4007,18 +4237,23 @@ }, { "path": "tests/control-api-auth.test.mjs", - "bytes": 15870, - "sha256": "3644931db5a8b35e420c9fbca1c1193a103aa7406e399823336b04827d4b0244" + "bytes": 18842, + "sha256": "fd5c3698818693c1f19ba85ebc944332e606c56faeb715467b6d2ca67b1a22e3" }, { "path": "tests/control-api-boundary.test.mjs", - "bytes": 71414, - "sha256": "c280f4619d6b9f5d8be55fec35d9408fd8566703f8bd546a35a46f3f8774327a" + "bytes": 74195, + "sha256": "77376826e22d0565f5feff2ae4586ae85501d46cc9444e23482c9d90be7b879b" }, { "path": "tests/control-api.test.mjs", - "bytes": 18050, - "sha256": "5cc2d4302bbd70de278c5bd553296ef0b42f4323fb5a7573fa89c4c17300a91b" + "bytes": 23693, + "sha256": "e12a3d726c79be95d543f0945e4873ef664f3de59052be33be35403b08b5e086" + }, + { + "path": "tests/docs.test.mjs", + "bytes": 3871, + "sha256": "4271ec3da3eefffa7620616bb9a5f362cc1de0fd2be9c703472e4a1b5c6caaf7" }, { "path": "tests/ecc-adapter.test.mjs", @@ -4100,6 +4335,11 @@ "bytes": 12392, "sha256": "9d7082a74917bf3922716321e91f23e1ec13f25800eddd48a8bddcc8a3d589a2" }, + { + "path": "tests/memory-recall-integrity.test.mjs", + "bytes": 16547, + "sha256": "6252f6eebac43c5cef90178dd6735d7096bac9c10a55d2c3e464ac211eedb1a4" + }, { "path": "tests/model-gateway-local-integration.test.mjs", "bytes": 3917, @@ -4142,8 +4382,8 @@ }, { "path": "tests/native-memory-sqlite.test.mjs", - "bytes": 18127, - "sha256": "9f2f401a3b3a21502b6eb1e7f59f36cac93fdf397be5ce08e298aac5afc0cef1" + "bytes": 20541, + "sha256": "47ae8afbd2b6d41eda8e1a38a13ae31252b00c47bd2924a0201532f69be37d33" }, { "path": "tests/native-model-ollama.test.mjs", @@ -4167,8 +4407,8 @@ }, { "path": "tests/planning.test.mjs", - "bytes": 4821, - "sha256": "34c0e605352596be79942a3db8ef3be9c0896dbab9e4da9c78f6c91c616ee644" + "bytes": 4904, + "sha256": "11046e405c9013217983d4359400e3a87c0af8d05eb004471453c9796668f1e5" }, { "path": "tests/policy-contextual.test.mjs", @@ -4205,10 +4445,20 @@ "bytes": 2514, "sha256": "b8691b69e21208e3d9fb49d7a2e70d4091beaa46373c459a16921ca2672b00e5" }, + { + "path": "tests/recall-map-ranking.test.mjs", + "bytes": 27311, + "sha256": "0412de5c334debd2e859220f14ae10bba8afd48197d093e1d3dc5ecc0f9afa92" + }, + { + "path": "tests/recall-map.test.mjs", + "bytes": 17197, + "sha256": "fe1e3a731bdea70805ebfb77193816d6d16475813362b30d64c0b30eafd69999" + }, { "path": "tests/release-readiness.test.mjs", - "bytes": 16353, - "sha256": "51fb7a5364188d653d091090f002800aeb9b736344832805a6e59063d49b52f0" + "bytes": 20683, + "sha256": "156a29dd7ad2a8a13288dcd312072492b5b68e9ac2eb1a87111a64e751f7acd5" }, { "path": "tests/replay.test.mjs", @@ -4225,15 +4475,20 @@ "bytes": 1198, "sha256": "bcb7b1004d63521227dd0c7ef13f83cff0fc3637c8e5db3f671b5b290d6bab49" }, + { + "path": "tests/semantic-setup.test.mjs", + "bytes": 22181, + "sha256": "3d678563ca102c8f07a1759b2326c8ef68d44de1d178218df1dc90baa41ff008" + }, { "path": "tests/skill-catalog.test.mjs", - "bytes": 29929, - "sha256": "a6b94ce03b517a56763f8f9ec93ff0bece19b4ba742c0827cd0a40b259240c3f" + "bytes": 30945, + "sha256": "6ea779227d1dce5c84c55812cc0834df8c5ce8a969aaf736d6313387ae9eae03" }, { "path": "tests/source-graph-preview.test.mjs", - "bytes": 8359, - "sha256": "866f4cf65c6e0d8811ebc89b1b0aed1de5a67f836e501ac77c9f663cf997e202" + "bytes": 82027, + "sha256": "b7469c2e3ae26345950968c678e5e4484ee4fe9443765e288028dd85bc89b92d" }, { "path": "tests/tool-durable-integration.test.mjs", @@ -4267,13 +4522,13 @@ }, { "path": "tests/usage-docs.test.mjs", - "bytes": 7889, - "sha256": "78ebf5d883ccd3e5dfe13d1ace7810461ddf38c4c3b2cb5df9cc4819ba3c3722" + "bytes": 16402, + "sha256": "ce39f08fdfeafcc92dab38e137fda17936a0fcbcaf96a179d96a4ab5f205ae07" }, { "path": "tests/web-shell.test.mjs", - "bytes": 78957, - "sha256": "344754aa5d52976d02af89c941597d97059ef7f00b9ff4842d66fbbdef274c6d" + "bytes": 99856, + "sha256": "3749602b34492de746d712ae0fe56fe88da56c4ff8a088cc8ebe45d111e46fd5" }, { "path": "tests/workflow-durable-crash.test.mjs", diff --git a/SECURITY.md b/SECURITY.md index 5ee1390e..3fc4f0b5 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -1,6 +1,6 @@ # Security Policy -Do not open a public issue for a suspected vulnerability. Use the repository's private security advisory feature: . +Memory Recall accepts suspected vulnerability reports through the repository's private security advisory feature: . Do not open a public issue for a suspected vulnerability. Supported security boundaries are documented in `docs/security/`. External adapters are disabled by default. No production security guarantee is made for the development bootstrap. diff --git a/SUPPORT.md b/SUPPORT.md index 464abb3e..4f14375e 100644 --- a/SUPPORT.md +++ b/SUPPORT.md @@ -1,10 +1,10 @@ # Support -This is a development kit. Use GitHub Discussions for design questions and -GitHub Issues for reproducible defects in -. Use private GitHub Security +Memory Recall is local-first open-source software. Use GitHub Discussions for +design questions and GitHub Issues for reproducible defects in +. Use private GitHub Security Advisories for vulnerabilities: -. +. Community support is best effort. No service-level guarantee is promised for the community edition. diff --git a/apps/cli/oaf.mjs b/apps/cli/oaf.mjs index 8d577af0..10c77445 100755 --- a/apps/cli/oaf.mjs +++ b/apps/cli/oaf.mjs @@ -306,7 +306,7 @@ async function runMemoryLoopDemo({ provider, workspaceId, root, generatedAt, inc scope: 'workspace', sourceLocator: 'workspace://docs/product/loop-workbench-build-plan.md', observedAt: generatedAt, - text: 'project:oaf memory_loop connected.' + text: 'project:memory-recall memory_loop connected.' }); const claimed = await provider.claimProposal({ workspaceId, @@ -452,7 +452,7 @@ async function seedContradictingMemoryLoopFact({ provider, workspaceId, generate workspaceId, sourceLocator: 'workspace://docs/product/loop-workbench-build-plan.md', sourceHash: 'sha256:dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd', - payload: { kind: 'fact', scope: 'workspace', subject: 'project:oaf', predicate: 'memory_loop', object: 'disconnected', text: 'project:oaf memory_loop disconnected', observedAt: previousAt } + payload: { kind: 'fact', scope: 'workspace', subject: 'project:memory-recall', predicate: 'memory_loop', object: 'disconnected', text: 'project:memory-recall memory_loop disconnected', observedAt: previousAt } }); await provider.claimProposal({ workspaceId, @@ -470,10 +470,10 @@ async function seedContradictingMemoryLoopFact({ provider, workspaceId, generate id: 'memfact_demo_memory_loop_previous', workspaceId, scope: 'workspace', - subject: 'project:oaf', + subject: 'project:memory-recall', predicate: 'memory_loop', object: 'disconnected', - text: 'project:oaf memory_loop disconnected', + text: 'project:memory-recall memory_loop disconnected', source: 'workspace://docs/product/loop-workbench-build-plan.md', proposalQueueId: proposal.id, validFrom: previousAt, @@ -534,7 +534,7 @@ function buildProfileSavingsSummary({ profile, command, workspaceId, generatedAt basis: 'accepted history records before compressed profile selection' }, compressed: { - label: 'OAF compressed profile delivery estimate', + label: 'Memory Recall compressed profile delivery estimate', deliveryTokens: afterDeliveryTokens, profileTokens: Math.max(0, Math.trunc(Number(profile.contextBudget.profileTokens ?? 0))), retrievedContextTokens: Math.max(0, Math.trunc(Number(profile.contextBudget.retrievedContextTokens ?? 0))), @@ -4627,7 +4627,7 @@ function normalizeTemporalCase(item, index) { if (!item || typeof item !== 'object' || Array.isArray(item)) throw new Error('bench temporal case must be an object'); const id = String(item.id ?? `case_${index + 1}`); const question = String(item.question ?? '').trim(); - const subject = String(item.subject ?? 'project:oaf').trim(); + const subject = String(item.subject ?? 'project:memory-recall').trim(); const predicate = String(item.predicate ?? '').trim(); const timeline = Array.isArray(item.timeline) ? item.timeline.map((point) => ({ at: String(point.at ?? '').trim(), @@ -10731,7 +10731,6 @@ function renderHelpText(text) { const command = helpCommandName(); if (command === 'oaf') return text; return text - .replaceAll('Open Agent Fabric CLI', 'Memory Recall CLI') .replace( /\boaf (?=(status|setup|verify|doctor|connect|disconnect|task|demo|serve|check|eval|manifest|map|semantic|handoff|token-saver|context|loop|skill|measure|benchmark|bench|memory|mcp|harness|hook|version)\b)/g, `${command} ` @@ -10745,7 +10744,7 @@ function help(topic, subtopic) { return; } - console.log(renderHelpText(`Open Agent Fabric CLI + console.log(renderHelpText(`Memory Recall CLI Usage: oaf status @@ -10823,11 +10822,11 @@ Usage: oaf memory proposals --records memory-export.json --root . --dry-run --format json oaf memory proposals --from memoryPaths --config oaf.memory.json --root . --dry-run --format json oaf memory sgrep "context manifest" --records memory-export.json --workspace ws_local --dry-run --format json - oaf memory fact add --sqlite .local/memory.sqlite --workspace ws_local --scope workspace --subject project:oaf --predicate release_status --object release-candidate --text "OAF release status is release-candidate." --source workspace://memory/status.md --proposal mpq_status --episode-id mep_status --episode-source workspace://memory/status.md --episode-summary "Reviewed status note." --format json - oaf memory fact get --sqlite .local/memory.sqlite --workspace ws_local --scope workspace --subject project:oaf --predicate release_status --at 2026-06-26T00:00:00.000Z --format json - oaf memory fact history --sqlite .local/memory.sqlite --workspace ws_local --scope workspace --subject project:oaf --predicate release_status --format json + oaf memory fact add --sqlite .local/memory.sqlite --workspace ws_local --scope workspace --subject project:memory-recall --predicate release_status --object release-candidate --text "Memory Recall release status is release-candidate." --source workspace://memory/status.md --proposal mpq_status --episode-id mep_status --episode-source workspace://memory/status.md --episode-summary "Reviewed status note." --format json + oaf memory fact get --sqlite .local/memory.sqlite --workspace ws_local --scope workspace --subject project:memory-recall --predicate release_status --at 2026-06-26T00:00:00.000Z --format json + oaf memory fact history --sqlite .local/memory.sqlite --workspace ws_local --scope workspace --subject project:memory-recall --predicate release_status --format json oaf memory search "release" --sqlite .local/memory.sqlite --workspace ws_local --scope workspace --format json - oaf memory path --root . --sqlite .local/memory.sqlite --workspace ws_local --scope workspace --from project:oaf --to temporal-memory --max-hops 6 --format json + oaf memory path --root . --sqlite .local/memory.sqlite --workspace ws_local --scope workspace --from project:memory-recall --to temporal-memory --max-hops 6 --format json oaf memory explain --root . --sqlite .local/memory.sqlite --workspace ws_local --scope workspace --entity auth --depth 1 --format json oaf mcp inspect --read-only --root . --format json oaf mcp resources --read-only --workspace ws_local --format json @@ -10859,7 +10858,7 @@ The default bootstrap is local-only and enables no external writes.`)); function helpTopic(topic, subtopic) { const key = [topic, subtopic].filter(Boolean).join(' '); const topics = new Map([ - ['setup', `Open Agent Fabric CLI: setup + ['setup', `Memory Recall CLI: setup Usage: oaf setup @@ -10874,7 +10873,7 @@ Run the explicit first read-only map next: Use harness setup for client wiring previews: oaf harness setup status --client codex --dry-run --format json oaf harness setup plan --client codex --server oaf --dry-run --format json`], - ['map', `Open Agent Fabric CLI: map + ['map', `Memory Recall CLI: map Usage: oaf map --root . --sqlite .local/memory.sqlite --format summary @@ -10893,7 +10892,7 @@ Builds a bounded local repository map from the implemented JS/TS static graph and the governed local SQLite memory store. It does not write files, call models, use network access, enable external adapters, or expose raw source bodies.`], - ['semantic', `Open Agent Fabric CLI: semantic + ['semantic', `Memory Recall CLI: semantic Usage: oaf semantic plan --harness codex --root . --dry-run @@ -10906,7 +10905,7 @@ Plan emits a body-free JSON report and task emits only the bounded raw harness task. Import reads one workspace-relative JSON result. Run performs exactly one explicitly consented model request. Import and run normalize untrusted results into pending SQLite proposals only; neither command creates active memory.`], - ['connect', `Open Agent Fabric CLI: connect + ['connect', `Memory Recall CLI: connect Usage: oaf connect codex --dry-run --format json @@ -10917,7 +10916,7 @@ Previews or applies local harness client configuration through the governed connection wrapper. It is dry-run by default. --yes writes only the local harness client config for the selected agent; it does not enable external writes, grant authority, activate memory, or call models.`], - ['disconnect', `Open Agent Fabric CLI: disconnect + ['disconnect', `Memory Recall CLI: disconnect Usage: oaf disconnect codex --dry-run --format json @@ -10927,7 +10926,7 @@ Previews or applies removal of local OAF harness client configuration through the governed connection wrapper. It is dry-run by default. --yes removes only matching local harness config entries; it does not touch project state, memory, models, or external services.`], - ['harness setup', `Open Agent Fabric CLI: harness setup + ['harness setup', `Memory Recall CLI: harness setup Usage: oaf harness setup status --client codex --dry-run --format json @@ -10937,7 +10936,7 @@ Usage: Builds dry-run reports for local harness client wiring. This command is preview only: it requires --dry-run, does not mutate home config, does not write local files, does not grant authority, and does not enable external writes.`], - ['context', `Open Agent Fabric CLI: context + ['context', `Memory Recall CLI: context Usage: oaf handoff @@ -10956,7 +10955,7 @@ Context commands select local handoff context, preview harness inputs, and read pinned context-pack state. Graph preview is dry-run only. Read-only commands do not write files, call models, use network access, or expose raw source bodies. Retrieve summary verifies locator/hash metadata without printing file content.`], - ['graph', `Open Agent Fabric CLI: graph + ['graph', `Memory Recall CLI: graph Usage: oaf graph stats --root . --format summary @@ -10969,7 +10968,7 @@ Graph commands build a bounded local JS/TS source graph and return locator-only stats, search, trace, or changed-file impact reports. They are read-only by default: no files are written, no model calls are made, no network calls are made, and raw source bodies are not included.`], - ['context handoff', `Open Agent Fabric CLI: context handoff + ['context handoff', `Memory Recall CLI: context handoff Usage: oaf handoff @@ -10989,7 +10988,7 @@ Builds a read-only local agent handoff with context-pack proof, MCP readback, harness setup dry-run status, and zero-tool MCP proof. It requires --read-only and does not write files, import harness history, call models, use network access, or expose raw source bodies.`], - ['handoff', `Open Agent Fabric CLI: handoff + ['handoff', `Memory Recall CLI: handoff Usage: oaf handoff @@ -11000,7 +10999,7 @@ Runs the read-only context handoff flow. With no flags it defaults to a compact Codex summary for the current repository and local git changes. It does not write files, import harness history, call models, use network access, enable external adapters, create active memory, or expose raw source bodies.`], - ['token-saver', `Open Agent Fabric CLI: token-saver + ['token-saver', `Memory Recall CLI: token-saver Usage: oaf token-saver @@ -11012,7 +11011,7 @@ Runs the read-only context-pack measurement flow. With no flags it measures the current repository and local git changes. It does not write files, call models, use network access, enable external adapters, include raw source bodies, or claim provider billing-token savings.`], - ['context receive', `Open Agent Fabric CLI: context receive + ['context receive', `Memory Recall CLI: context receive Usage: oaf context receive --read-only --root . --target codex --format json @@ -11023,7 +11022,7 @@ without rebuilding or writing files. JSON returns the versioned receiver packet; summary prints state, recipient proof, packet parts, required reads, and report fingerprint. It rejects task text, write flags, MCP stdio mode, raw Markdown bodies, source bodies, credentials, provider URLs, and absolute local paths.`], - ['context registry', `Open Agent Fabric CLI: context registry + ['context registry', `Memory Recall CLI: context registry Usage: oaf context registry status --read-only --format json @@ -11032,7 +11031,7 @@ Reads the pinned local context-pack registry and verifies the current pointer, artifact hashes, and source hashes. It requires --read-only and does not rebuild packs, write artifacts, call models, use network access, or expose raw source bodies.`], - ['skill', `Open Agent Fabric CLI: skill + ['skill', `Memory Recall CLI: skill Usage: oaf skill catalog --read-only --root . --format json @@ -11042,7 +11041,7 @@ Usage: Skill commands inspect local OAF skill manifests. They do not grant tool authority or load raw skill text into the report.`], - ['skill catalog', `Open Agent Fabric CLI: skill catalog + ['skill catalog', `Memory Recall CLI: skill catalog Usage: oaf skill catalog --read-only --root . --format json @@ -11053,7 +11052,7 @@ catalog/report fingerprints for workspace skills. It requires --read-only and does not include raw skill text, expose absolute filesystem paths, grant tool authority, start MCP stdio, call models, use network access, or write local files.`], - ['skill load-plan', `Open Agent Fabric CLI: skill load-plan + ['skill load-plan', `Memory Recall CLI: skill load-plan Usage: oaf skill load-plan --read-only --root . --id skill:oaf-memory --format json @@ -11063,7 +11062,7 @@ Returns the ordered local reads for one skill: manifest, SKILL.md, and declared references. It requires --read-only and does not include raw skill text, grant tool authority, start MCP stdio, call models, use network access, or write local files.`], - ['measure', `Open Agent Fabric CLI: measure + ['measure', `Memory Recall CLI: measure Usage: oaf measure savings --read-only --root . --objective "Ship safely" --step "measure savings" --format json @@ -11072,7 +11071,7 @@ Usage: Measure commands emit local evidence about context delivery. They do not claim provider billing savings, call models, use network access, or perform external writes.`], - ['measure context-pack', `Open Agent Fabric CLI: measure context-pack + ['measure context-pack', `Memory Recall CLI: measure context-pack Usage: oaf measure context-pack --read-only --root . --from codex --objective "Ship safely" --step "impact brief" --target codex --changed src/auth.ts --format json @@ -11082,7 +11081,7 @@ Measures the same read-only context-pack path used for handoff: selected and delivered token estimates, changed-file coverage, MCP readback, timings, and safeguards. It requires --read-only and does not include raw source bodies, call models, use network access, or write local files.`], - ['mcp', `Open Agent Fabric CLI: mcp + ['mcp', `Memory Recall CLI: mcp Usage: oaf mcp inspect --read-only --root . --format json @@ -11102,7 +11101,7 @@ preview install plans, or report delivery stats. Resource summaries require --uri and do not dump full resource bodies. Resource/server paths require --read-only; install remains dry-run unless explicitly confirmed by the install flow.`], - ['memory refine', `Open Agent Fabric CLI: memory refine + ['memory refine', `Memory Recall CLI: memory refine Usage: oaf memory refine --read-only --root . --sqlite .local/memory.sqlite --format json diff --git a/apps/web/app.js b/apps/web/app.js index 4e141ab4..d70b77a9 100644 --- a/apps/web/app.js +++ b/apps/web/app.js @@ -1574,7 +1574,7 @@ function loopStopReasonCopy(reason) { function renderFabricMap() { const handoff=currentHandoffStatus(); const model=buildFabricMapModel({dashboard,shellState,activeNodeId:activeFabricNode,handoffStatus:handoff}); - return `

Local map

Local agent fabric

Process flow, context assembly, policy gates, and disabled external boundaries rendered from the current workspace state.

Runs
${model.summary.runs}
Context
${model.summary.selectedRecords}/${model.summary.excludedRecords}
Handoff
${esc(model.handoff.statusLabel)}
Approvals
${model.summary.pendingApprovals}
Adapters
${model.summary.externalAdaptersEnabled}
${renderHandoffStatusPanel(model.handoff,'fabric')}

Node conversation

${model.links.filter((link)=>link.active).length} links with data
${fabricNodeGrid(model)}${fabricLinkList(model.links)}
${fabricContextFlow(model.contextFlow)}
`; + return `

Local map

Local agent fabric

Process flow, context assembly, policy gates, and disabled external boundaries rendered from the current workspace state.

Runs
${model.summary.runs}
Context
${model.summary.selectedRecords}/${model.summary.excludedRecords}
Handoff
${esc(model.handoff.statusLabel)}
Approvals
${model.summary.pendingApprovals}
Adapters
${model.summary.externalAdaptersEnabled}
${renderHandoffStatusPanel(model.handoff,'fabric')}

Node conversation

${model.links.filter((link)=>link.active).length} links with data
${fabricNodeGrid(model)}${fabricLinkList(model.links)}
${fabricContextFlow(model.contextFlow)}
`; } function fabricNodeGrid(model) { @@ -2270,7 +2270,7 @@ const CONTEXT_PACK_SOURCE_FAMILIES=[ ['cursor','Cursor'] ]; -const DEFAULT_CONTEXT_PACK_OBJECTIVE='Prepare the next coding agent to continue Open Agent Fabric safely'; +const DEFAULT_CONTEXT_PACK_OBJECTIVE='Prepare the next coding agent to continue Memory Recall safely'; const DEFAULT_CONTEXT_PACK_STEP='select useful local handoff context'; function contextPackTargetOptions(selectedTarget='codex') { @@ -2345,7 +2345,7 @@ function contextPackLaunchPath(model,readiness,memoryPreflight=null) { ? '

Setup preview already passed for this browser session.

' : ``; const preflightCommands=[preflight,preflightSummary].filter(Boolean); - return `

Practical handoff

Use this in another local agent session.

Copy the locator pack first, keep optional memory proposal files explicit, then pin the reviewed artifacts when another local agent should receive them later.

Target
${esc(model.targetHarness)}
Status
${readiness.ready?'ready':'review required'}
Writes
explicit local pin only
  1. 1Give the agent context

    Paste the markdown or launch prompt into the next local harness session.

  2. 2Add memory only by choice${memoryControls}
  3. 3Pin durable artifacts

    Write the reviewed pack to fixed local context-pack files and verify the registry immediately.

  4. 4Connect MCP manually

    Preview the config snippet when the target harness should read OAF resources.

    ${setupAction}${preflightCommands.length?contextPackCommandList(preflightCommands):''}
`; + return `

Practical handoff

Use this in another local agent session.

Copy the locator pack first, keep optional memory proposal files explicit, then pin the reviewed artifacts when another local agent should receive them later.

Target
${esc(model.targetHarness)}
Status
${readiness.ready?'ready':'review required'}
Writes
explicit local pin only
  1. 1Give the agent context

    Paste the markdown or launch prompt into the next local harness session.

  2. 2Add memory only by choice${memoryControls}
  3. 3Pin durable artifacts

    Write the reviewed pack to fixed local context-pack files and verify the registry immediately.

  4. 4Connect MCP manually

    Preview the config snippet when the target harness should read Memory Recall resources.

    ${setupAction}${preflightCommands.length?contextPackCommandList(preflightCommands):''}
`; } function contextPackOperatorBrief(model,readiness={ready:false}) { @@ -2678,12 +2678,12 @@ function memoryGraphLegend(nodes=[]) { export function renderMemoryIntakePanel(result=null,error=null,draft={sourceLocator:'memory/inbox.md',text:''}) { const rows=Array.isArray(result?.proposalFacts) && result.proposalFacts.length ? `
    ${result.proposalFacts.map((item)=>`
  1. ${esc(item.subject)} ${esc(item.predicate)}${esc(item.object)}${esc(item.id)} · ${esc(item.status)} · ${esc(item.sourceLocator)}
  2. `).join('')}
` - : '

No proposal facts extracted yet. Try: Fact: project:oaf release_status release-candidate.

'; + : '

No proposal facts extracted yet. Try: Fact: project:memory-recall release_status release-candidate.

'; const resultPanel=result ? `

${esc(result.command)}

${Number(result.summary?.proposalCount ?? 0)} proposal${Number(result.summary?.proposalCount ?? 0)===1?'':'s'} · ${Number(result.summary?.activeMemoryCreated ?? 0)} active memory created

${rows}
` : ''; const errorPanel=error?renderApiErrorPanel('Memory intake failed',error):''; - return `

New proposal

Add memory

Creates proposals only
${errorPanel}${resultPanel}
`; + return `

New proposal

Add memory

Creates proposals only
${errorPanel}${resultPanel}
`; } function renderMemoryProposalList(items=[],approve=false) { @@ -2705,7 +2705,7 @@ export function renderMemoryCockpit(cockpit = null) { const toolStats=model.mcpStats.byTool.length ? `
    ${model.mcpStats.byTool.map((item)=>`
  1. ${esc(item.toolName)} · ${item.callCount}${item.deliveredTokens} delivered · ${item.tokensSaved} saved
  2. `).join('')}
` : '

No MCP delivery calls recorded for this workspace yet.

'; - return `

Governed repository memory

Memory

Review proposed facts, inspect current truth, and add explicit source-backed memory.

Pending
${model.summary.pendingProposalCount}
Active
${model.summary.activeFactCount}
Delivery
${deliveryChangeLabel(model.savings.percent)}

Review queue

${model.summary.pendingProposalCount} pending
${queue}

Active memory

${model.facts.length} facts
${facts}
Delivery details · ${deliveryChangeLabel(model.savings.percent)}
Active facts
${model.summary.activeFactCount}
Pending proposals
${model.summary.pendingProposalCount}
Naive baseline
${model.savings.beforeDeliveryTokens}
OAF compressed
${model.savings.afterDeliveryTokens}
Delivery tokens saved
${model.savings.tokensSaved}
MCP calls
${model.mcpStats.callCount}
MCP delivered
${model.mcpStats.deliveredTokens}
MCP saved
${model.mcpStats.tokensSaved}
Provider billing
${model.savings.providerBillingClaimed||model.mcpStats.providerBillingClaimed?'claimed':'not claimed'}
Provider
${esc(model.provider)}
${toolStats}${history}

Delivery values are local estimates, not provider billing claims. No model, network, or raw source body is used on this route.

`; + return `

Governed repository memory

Memory

Review proposed facts, inspect current truth, and add explicit source-backed memory.

Pending
${model.summary.pendingProposalCount}
Active
${model.summary.activeFactCount}
Delivery
${deliveryChangeLabel(model.savings.percent)}

Review queue

${model.summary.pendingProposalCount} pending
${queue}

Active memory

${model.facts.length} facts
${facts}
Delivery details · ${deliveryChangeLabel(model.savings.percent)}
Active facts
${model.summary.activeFactCount}
Pending proposals
${model.summary.pendingProposalCount}
Naive baseline
${model.savings.beforeDeliveryTokens}
Memory Recall delivery
${model.savings.afterDeliveryTokens}
Delivery tokens saved
${model.savings.tokensSaved}
MCP calls
${model.mcpStats.callCount}
MCP delivered
${model.mcpStats.deliveredTokens}
MCP saved
${model.mcpStats.tokensSaved}
Provider billing
${model.savings.providerBillingClaimed||model.mcpStats.providerBillingClaimed?'claimed':'not claimed'}
Provider
${esc(model.provider)}
${toolStats}${history}

Delivery values are local estimates, not provider billing claims. No model, network, or raw source body is used on this route.

`; } function renderEvidence() { @@ -2729,7 +2729,7 @@ function renderAgentsTools() { const errorPanel=harnessSetupError?renderApiErrorPanel('Harness setup preview failed',harnessSetupError):''; const selectedClient=harnessSetupResult?.client ?? 'codex'; const handoff=currentHandoffStatus(); - return `

Native baselines

Conformance anchors
${[['Model gateway','reference','deterministic default'],['Workflow runtime','reference','embedded + durable SQLite'],['Tool broker','reference','one-use local grants'],['External adapters','disabled','12 contracts, 0 enabled']].map(row=>``).join('')}
SurfaceStatusBoundary
${row[0]}${row[1]}${row[2]}
${renderHandoffStatusPanel(handoff,'agents')}

Harness setup preview

Dry run only
No home config writes. OAF server only.
${errorPanel}${harnessSetupResult?renderHarnessSetupResult(harnessSetupResult):statePanel('empty','No setup preview yet','Choose a local harness client to see the redacted MCP setup plan.')}`; + return `

Native baselines

Conformance anchors
${[['Model gateway','reference','deterministic default'],['Workflow runtime','reference','embedded + durable SQLite'],['Tool broker','reference','one-use local grants'],['External adapters','disabled','12 contracts, 0 enabled']].map(row=>``).join('')}
SurfaceStatusBoundary
${row[0]}${row[1]}${row[2]}
${renderHandoffStatusPanel(handoff,'agents')}

Harness setup preview

Dry run only
No home config writes. Compatibility server key: oaf.
${errorPanel}${harnessSetupResult?renderHarnessSetupResult(harnessSetupResult):statePanel('empty','No setup preview yet','Choose a local harness client to see the redacted MCP setup plan.')}`; } function renderHarnessSetupResult(report) { @@ -2739,7 +2739,7 @@ function renderHarnessSetupResult(report) { {label:'Read-only bridge',command:model.bridgeCommand} ]; const snippet=model.manualConfigSnippet ? `

Manual config

${esc(model.manualConfigSnippet.format)}

${esc(model.manualConfigSnippet.warning)}

Config ref
${esc(model.manualConfigSnippet.configRef)}
Apply mode
${esc(model.manualConfigSnippet.applyMode)}
${esc(model.manualConfigSnippet.content)}
` : ''; - return `

${esc(model.client)} setup plan

${esc(shortFingerprint(model.fingerprint))}
Config
${esc(model.configRef)}
Config status
${esc(model.configStatus)}
OAF server
${esc(model.serverStatus)}
Operation
${esc(model.operation)}
${contextPackCommandList(commands)}${snippet}
`; + return `

${esc(model.client)} setup plan

${esc(shortFingerprint(model.fingerprint))}
Config
${esc(model.configRef)}
Config status
${esc(model.configStatus)}
Server key
${esc(model.serverStatus)}
Operation
${esc(model.operation)}
${contextPackCommandList(commands)}${snippet}
`; } function renderSettings() { diff --git a/apps/web/favicon.svg b/apps/web/favicon.svg index c99fa380..29e731c4 100644 --- a/apps/web/favicon.svg +++ b/apps/web/favicon.svg @@ -1,5 +1,5 @@ - Open Agent Fabric markAn open woven lattice of connected nodes. + Memory Recall markAn open woven lattice of connected nodes. diff --git a/docs/adr/0012-build-the-whole-tool-own-the-boundaries.md b/docs/adr/0012-build-the-whole-tool-own-the-boundaries.md index 599532fa..4af41485 100644 --- a/docs/adr/0012-build-the-whole-tool-own-the-boundaries.md +++ b/docs/adr/0012-build-the-whole-tool-own-the-boundaries.md @@ -2,17 +2,17 @@ - Status: Accepted - Date: 2026-06-19 -- Decision owners: Open Agent Fabric maintainers +- Decision owners: Memory Recall maintainers ## Context The agent ecosystem already contains useful memory systems, research collectors, graph builders, collaboration tools, design studios, publishers, model panels, and workflow frameworks. Copying all of them into one repository would create incompatible dependencies, duplicated state, licensing risk, and a maintenance burden that would prevent the platform from evolving. -At the same time, making Open Agent Fabric only a collection of wrappers would leave it without a durable product advantage. OAF is the tool users run: the local runtime, context system, memory lifecycle, code/repository intelligence, tool boundary, evidence trail, hooks, UI, CLI, and release surface. Optional integrations may help, but they do not define the product. +At the same time, making Memory Recall only a collection of wrappers would leave it without a durable product advantage. Memory Recall is the tool users run: the local runtime, context system, memory lifecycle, code/repository intelligence, tool boundary, evidence trail, hooks, UI, CLI, and release surface. Optional integrations may help, but they do not define the product. ## Decision -Open Agent Fabric will use four implementation strategies. +Memory Recall will use four implementation strategies. 1. **Build natively** when a capability defines the product, runtime quality, context quality, or reliability boundary. 2. **Use hooks as accelerators** when a client can steer discovery, compact noisy tool output, or route retrieval earlier without granting authority. diff --git a/docs/adr/0014-portable-agent-packs.md b/docs/adr/0014-portable-agent-packs.md index d5ea78ab..3cda4237 100644 --- a/docs/adr/0014-portable-agent-packs.md +++ b/docs/adr/0014-portable-agent-packs.md @@ -9,7 +9,7 @@ Agent behavior is usually scattered across prompts, framework code, environment ## Decision -Open Agent Fabric defines a provider-neutral **Agent Pack** that versions the reproducible contract for an agent or agent team. +Memory Recall defines a provider-neutral **Agent Pack** that versions the reproducible contract for an agent or agent team. An Agent Pack declares: diff --git a/docs/adr/0015-flight-recorder-shadow-learning.md b/docs/adr/0015-flight-recorder-shadow-learning.md index 0f398087..133c14ad 100644 --- a/docs/adr/0015-flight-recorder-shadow-learning.md +++ b/docs/adr/0015-flight-recorder-shadow-learning.md @@ -9,7 +9,7 @@ Agents fail in ways that are difficult to reproduce. Systems also commonly let a ## Decision -Open Agent Fabric treats every run as a flight record composed of versioned events, context manifests, tool decisions, model metadata, artifacts, approvals, evaluations, and outcomes. +Memory Recall treats every run as a flight record composed of versioned events, context manifests, tool decisions, model metadata, artifacts, approvals, evaluations, and outcomes. The platform supports: diff --git a/docs/adr/0016-contextual-policy-source-of-truth.md b/docs/adr/0016-contextual-policy-source-of-truth.md index 85bf8fd2..ce8ed375 100644 --- a/docs/adr/0016-contextual-policy-source-of-truth.md +++ b/docs/adr/0016-contextual-policy-source-of-truth.md @@ -2,7 +2,7 @@ - Status: Accepted - Date: 2026-06-19 -- Decision owners: Open Agent Fabric maintainers +- Decision owners: Memory Recall maintainers ## Context diff --git a/docs/adr/0017-native-sqlite-durable-workflows.md b/docs/adr/0017-native-sqlite-durable-workflows.md index f501e5eb..5c663b31 100644 --- a/docs/adr/0017-native-sqlite-durable-workflows.md +++ b/docs/adr/0017-native-sqlite-durable-workflows.md @@ -5,7 +5,7 @@ ## Context -Open Agent Fabric needs long workflow state to survive local process death +Memory Recall needs long workflow state to survive local process death without requiring a hosted service, third-party workflow server, network, or runtime dependency. The embedded workflow runtime is useful for fast tests and demo compatibility, but JavaScript closures, pending promises, and captured diff --git a/docs/api/openapi.yaml b/docs/api/openapi.yaml index 11b17b4e..6e39cd6b 100644 --- a/docs/api/openapi.yaml +++ b/docs/api/openapi.yaml @@ -1,6 +1,6 @@ openapi: 3.1.0 info: - title: Open Agent Fabric Bootstrap API + title: Memory Recall Bootstrap API version: 0.2.0-dev description: >- Implemented dependency-free local bootstrap API. OAF-007 adds strict diff --git a/docs/architecture/overview.md b/docs/architecture/overview.md index eb0c9f8e..933b3fa3 100644 --- a/docs/architecture/overview.md +++ b/docs/architecture/overview.md @@ -1,14 +1,14 @@ # Architecture Overview ## Product boundary -![Open Agent Fabric architecture](../assets/open-agent-fabric-architecture.png) +![Memory Recall architecture](../assets/open-agent-fabric-architecture.png) _Conceptual target architecture. Boxes are responsibilities, not a requirement to deploy each as a separate service._ -Open Agent Fabric is the local-first tool for building, running, inspecting, and improving agents. It owns portable domain state and the default runtime surface: workspaces, runs, workflows, events, context manifests, source graph, retrieval, compaction views, memories, evidence, approvals, policies, artifacts, hooks, evaluations, and integration metadata. +Memory Recall is the local-first repository memory and context tool for coding agents. Its current product path is Recall Map, governed memory, read-only MCP, and inspectable handoffs. The wider reference bootstrap also contains workspaces, runs, workflows, events, context manifests, evidence, approvals, policies, artifacts, hooks, evaluations, and integration metadata. -It does not own foundation models, third-party agent framework internals, social platforms, or upstream hosted products. Those can enter through replaceable integrations, but they do not own OAF's canonical state, authority, or user workflow. +It does not own foundation models, third-party agent framework internals, social platforms, or upstream hosted products. Those can enter through replaceable integrations, but they do not own Memory Recall's canonical state, authority, or user workflow. ## Logical architecture @@ -103,7 +103,7 @@ Each step has typed input and output, context policy, allowed tools, side-effect ## Native reliability layer -The core always has a local baseline. `providers/native/` implements the default local experience first. Optional integrations can implement the same ports later for compatibility or scale, but workflows and UI code still depend on OAF contracts. +The core always has a local baseline. `providers/native/` implements the default local experience first. Optional integrations can implement the same ports later for compatibility or scale, but workflows and UI code still depend on internal contracts rather than provider details. The local baseline includes SQLite/FTS5 memory, content-addressed filesystem artifacts, an embedded workflow runtime, deterministic generation behind the local model gateway, and an explicit loopback-only Ollama option. Read `native-providers.md` and `model-gateway.md` for limitations. diff --git a/docs/open-source/fork-policy.md b/docs/open-source/fork-policy.md index dc97e4e7..ed49a0a5 100644 --- a/docs/open-source/fork-policy.md +++ b/docs/open-source/fork-policy.md @@ -1,6 +1,6 @@ # Fork Policy -Open Agent Fabric prefers upstream contribution, then adapters, then a small reviewed patch layer. A maintained fork is the last option. +Memory Recall prefers upstream contribution, then adapters, then a small reviewed patch layer. A maintained fork is the last option. ## Required RFC evidence diff --git a/docs/product/loop-workbench-build-plan.md b/docs/product/loop-workbench-build-plan.md index 879ac7d8..d10bdaed 100644 --- a/docs/product/loop-workbench-build-plan.md +++ b/docs/product/loop-workbench-build-plan.md @@ -137,7 +137,7 @@ Definition of Done · Hard boundaries · Attach prompt.** no command outside the plan's `validationCommands`. - **Attach prompt:** ```text - You are working in Open Agent Fabric. Obey the Unattended Run Rules in + You are working in Memory Recall. Obey the Unattended Run Rules in docs/product/loop-workbench-build-plan.md. Base on the merged Slice-1 branch; create a worktree codex/loop-workbench-slice-2. @@ -177,7 +177,7 @@ Definition of Done · Hard boundaries · Attach prompt.** the plan's `maxIterations`), no external writes, no network in replay. - **Attach prompt:** ```text - You are working in Open Agent Fabric. Obey the Unattended Run Rules in + You are working in Memory Recall. Obey the Unattended Run Rules in docs/product/loop-workbench-build-plan.md. Base on merged Slice-2; worktree codex/loop-workbench-slice-3. @@ -213,7 +213,7 @@ Definition of Done · Hard boundaries · Attach prompt.** approval, no silent cloud fallback, scheduling is opt-in. - **Attach prompt:** ```text - You are working in Open Agent Fabric. Obey the Unattended Run Rules in + You are working in Memory Recall. Obey the Unattended Run Rules in docs/product/loop-workbench-build-plan.md. Base on merged Slice-3; worktree codex/loop-workbench-slice-4. @@ -244,7 +244,7 @@ Definition of Done · Hard boundaries · Attach prompt.** per the bootstrap profile; no write actions beyond existing approved paths. - **Attach prompt:** ```text - You are working in Open Agent Fabric. Obey the Unattended Run Rules in + You are working in Memory Recall. Obey the Unattended Run Rules in docs/product/loop-workbench-build-plan.md. Base on merged Slice-4; worktree codex/loop-workbench-slice-5. diff --git a/docs/product/loop-workbench.md b/docs/product/loop-workbench.md index a4c2b5d3..4fd0bb17 100644 --- a/docs/product/loop-workbench.md +++ b/docs/product/loop-workbench.md @@ -1,6 +1,6 @@ # Loop Workbench -Loop Workbench is Open Agent Fabric's native **loop-engineering** surface. It is +Loop Workbench is Memory Recall's native **loop-engineering** surface. It is how a developer designs, runs, observes, and improves the feedback loops that let a coding agent do real work — safely, cheaply, and with proof of what happened. diff --git a/docs/release/1.0-PROVENANCE.json b/docs/release/1.0-PROVENANCE.json index 4dc60c76..ebf4e9ec 100644 --- a/docs/release/1.0-PROVENANCE.json +++ b/docs/release/1.0-PROVENANCE.json @@ -23,14 +23,14 @@ "sourceHashes": { "package.json": "sha256:7571776a443d6c4e5d91a824c8056b23c20d6378b8b194a316bd206a4b208359", "package-lock.json": "sha256:66bac759b6c28f95c29eca52c0b42e9bb24237a4a926fb67a42093f9ee425ed7", - "PROJECT_STATUS.json": "sha256:3a354fc27287d46bacf51c21b1e8a8e6a8bcaf40246cfb6070b0807c5cf9436c", + "PROJECT_STATUS.json": "sha256:2da0461472309a658fac2798db0faba3e0895ce84e499d41022fe44b39b29318", "planning/backlog.json": "sha256:a404e5704ba3bf3be635a655d2d73d84eff7eba3ce43ab511b83967cceab6a5f", "adapters/catalog.json": "sha256:11c22a150f847a560be3e64c8280c7757368d813b5f70304938ab7915694c283", "docs/usage/support-matrix.md": "sha256:dd4108828b742e8d06112e6abdfa4119f90a8b034b417b9e7e41f6924dcf26a6", "docs/benchmarks.md": "sha256:0bbc131af4531e534aa028b0a88391af1c07f913349271885ebc3d9cbfe00e0e", "THIRD_PARTY.md": "sha256:adbbffba498346ac25ff8f064db76ae93543d3c1990d37f1137d9122f0742dd7", - "SECURITY.md": "sha256:a5d5b9d1e786d26bedaca01aa84c34699a4e258f07838193a0d0e8d752b2fc12", - "GOVERNANCE.md": "sha256:ef85f7b2d9ec6271150741d5f4c69d42e1fa4809e630314297f348b2a4fd2e3e" + "SECURITY.md": "sha256:af8c910a7f2092f3adc8a9be30f79618d040101c6eda0fda705fdd8f9327b472", + "GOVERNANCE.md": "sha256:479e1fe15e56b58bd33b41cab67244de87b6f62b491bea0761337a5b87cd7e52" }, "publicEvidence": [ { diff --git a/docs/release/1.0-READINESS-REPORT.md b/docs/release/1.0-READINESS-REPORT.md index 8b1af186..a66e64ac 100644 --- a/docs/release/1.0-READINESS-REPORT.md +++ b/docs/release/1.0-READINESS-REPORT.md @@ -23,8 +23,8 @@ Publication state: npm-published. This evidence is prepared for a maintainer mer | Network default | deny | | External writes | false | | Model mode | deterministic | -| Quality snapshot date | 2026-07-11 | -| Recorded tests | 655 | +| Quality snapshot date | 2026-07-15 | +| Recorded tests | 659 | | Recorded protocol fixtures | 182 | | Recorded evaluation assertions | 144 | | Quality snapshot note | Counts are a dated snapshot; command results and HANDOFF_VERIFICATION.json are authoritative. | diff --git a/docs/release/1.0-REPRODUCIBILITY.md b/docs/release/1.0-REPRODUCIBILITY.md index b733cd28..ae0e6159 100644 --- a/docs/release/1.0-REPRODUCIBILITY.md +++ b/docs/release/1.0-REPRODUCIBILITY.md @@ -24,7 +24,7 @@ Counts are a dated snapshot; command results and HANDOFF_VERIFICATION.json are a | Gate | Expected Count | | --- | --- | -| Tests | 655 | +| Tests | 659 | | Protocol fixtures | 182 | | Evaluation assertions | 144 | diff --git a/examples/protocol/memory-profile-report.json b/examples/protocol/memory-profile-report.json index ef9926d1..55cd6477 100644 --- a/examples/protocol/memory-profile-report.json +++ b/examples/protocol/memory-profile-report.json @@ -15,7 +15,7 @@ "recordIds": ["mem_profile_active"], "contentHash": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" }, - "markdown": "# OAF Memory Profile\n\nGenerated from accepted Open Agent Fabric memory records only.\nEditing this file does not create, update, activate, or delete canonical memory.\n\nWorkspace: ws_local\nGenerated: 2026-06-23T00:00:00.000Z\n\n## decision\n\n- Every model call must reference a persisted context manifest.\n - id: mem_profile_active\n - source: evidence:ev_context\n - evidence: ev_context\n", + "markdown": "# Memory Recall Profile\n\nGenerated from accepted Memory Recall records only.\nEditing this file does not create, update, activate, or delete canonical memory.\n\nWorkspace: ws_local\nGenerated: 2026-06-23T00:00:00.000Z\n\n## decision\n\n- Every model call must reference a persisted context manifest.\n - id: mem_profile_active\n - source: evidence:ev_context\n - evidence: ev_context\n", "safeguards": { "networkCalls": 0, "modelCalls": 0, diff --git a/packages/harness-context/src/index.mjs b/packages/harness-context/src/index.mjs index b2b19469..824525dc 100644 --- a/packages/harness-context/src/index.mjs +++ b/packages/harness-context/src/index.mjs @@ -63,7 +63,7 @@ export const OAF_MCP_TOKEN_SAVER_BINARY_ARGS = Object.freeze(['mcp', 'server', ' const OAF_HOOK_CONTEXT_COMMAND = 'oaf hook context --read-only --format text'; const OAF_CHECKOUT_COMMAND_PREFIX = 'npm --silent run oaf --'; const OAF_CHECKOUT_ARG_PREFIX = Object.freeze(['--silent', 'run', 'oaf', '--']); -export const REALISTIC_SAVINGS_OBJECTIVE = 'Prove MCP memory token savings on Open Agent Fabric coding-agent work'; +export const REALISTIC_SAVINGS_OBJECTIVE = 'Prove MCP memory token savings on Memory Recall coding-agent work'; export const REALISTIC_SAVINGS_STEP = 'Compare context.profile delivery with naive candidate file and git history body resend'; const DEFAULT_MAX_BYTES = 65_536; diff --git a/packages/memory-core/src/filesystem-ux.mjs b/packages/memory-core/src/filesystem-ux.mjs index 3e55a0a6..aab84b7f 100644 --- a/packages/memory-core/src/filesystem-ux.mjs +++ b/packages/memory-core/src/filesystem-ux.mjs @@ -200,9 +200,9 @@ function pendingProposalRecord(record) { function profileMarkdown(records, { workspaceId, generatedAt }) { const lines = [ - '# OAF Memory Profile', + '# Memory Recall Profile', '', - 'Generated from accepted Open Agent Fabric memory records only.', + 'Generated from accepted Memory Recall records only.', 'Editing this file does not create, update, activate, or delete canonical memory.', '', `Workspace: ${workspaceId}`, diff --git a/packages/protocol/schemas/agent-pack.schema.json b/packages/protocol/schemas/agent-pack.schema.json index f79c1061..009054f9 100644 --- a/packages/protocol/schemas/agent-pack.schema.json +++ b/packages/protocol/schemas/agent-pack.schema.json @@ -1,7 +1,7 @@ { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://openagentfabric.dev/schemas/agent-pack.schema.json", - "title": "Open Agent Fabric Agent Pack", + "title": "Memory Recall Agent Pack", "type": "object", "additionalProperties": false, "required": [ diff --git a/rust/README.md b/rust/README.md index dc99db7a..590ee1f8 100644 --- a/rust/README.md +++ b/rust/README.md @@ -1,4 +1,4 @@ -# Open Agent Fabric Rust Runtime +# Memory Recall Rust Runtime This workspace builds the local-first OAF Rust runtime: diff --git a/scripts/consumer-browser-smoke.mjs b/scripts/consumer-browser-smoke.mjs index 974aa661..fcccfe3d 100644 --- a/scripts/consumer-browser-smoke.mjs +++ b/scripts/consumer-browser-smoke.mjs @@ -28,10 +28,10 @@ try { await writeFile(path.join(workspace, 'src', 'app.js'), 'export function launchSmoke(){ return "ready"; }\n'); await writeFile(path.join(workspace, 'src', 'huge.js'), Array.from({ length: 500 }, (_, index) => `export function helper${index}(){ return "local proof ${index}"; }`).join('\n')); await mkdir(path.join(workspace, 'memory'), { recursive: true }); - await writeFile(path.join(workspace, 'memory', 'status.md'), 'Decision: project:oaf release_status ready supersedes draft.'); + await writeFile(path.join(workspace, 'memory', 'status.md'), 'Decision: project:memory-recall release_status ready supersedes draft.'); await writeFile(path.join(workspace, '.gitignore'), '.local/\n'); - runJson(process.execPath, ['apps/cli/oaf.mjs', 'memory', 'remember', '--root', workspace, '--sqlite', '.local/memory.sqlite', '--subject', 'project:oaf', '--predicate', 'release_status', '--object', 'draft', '--source', 'workspace://memory/status.md', '--format', 'json']); - runJson(process.execPath, ['apps/cli/oaf.mjs', 'memory', 'remember', '--root', workspace, '--sqlite', '.local/memory.sqlite', '--subject', 'project:oaf', '--predicate', 'release_status', '--object', 'ready', '--supersedes-subject', 'project:oaf', '--supersedes-predicate', 'release_status', '--source', 'workspace://memory/status.md', '--format', 'json']); + runJson(process.execPath, ['apps/cli/oaf.mjs', 'memory', 'remember', '--root', workspace, '--sqlite', '.local/memory.sqlite', '--subject', 'project:memory-recall', '--predicate', 'release_status', '--object', 'draft', '--source', 'workspace://memory/status.md', '--format', 'json']); + runJson(process.execPath, ['apps/cli/oaf.mjs', 'memory', 'remember', '--root', workspace, '--sqlite', '.local/memory.sqlite', '--subject', 'project:memory-recall', '--predicate', 'release_status', '--object', 'ready', '--supersedes-subject', 'project:memory-recall', '--supersedes-predicate', 'release_status', '--source', 'workspace://memory/status.md', '--format', 'json']); run('git', ['init'], workspace); run('git', ['config', 'user.email', 'browser-smoke@example.invalid'], workspace); run('git', ['config', 'user.name', 'Browser Smoke'], workspace); @@ -266,7 +266,7 @@ try { await waitForText(page, 'Review queue'); await waitForText(page, 'Add memory'); await page.screenshot({ path: path.join(screenshots, 'memory-desktop-1440.png'), fullPage: true }); - await page.fill('#memory-intake-form textarea[name="text"]', 'Fact: project:oaf consumer_browser_smoke rendered.'); + await page.fill('#memory-intake-form textarea[name="text"]', 'Fact: project:memory-recall consumer_browser_smoke rendered.'); await page.locator('#memory-intake-form button[value="preview"]').click(); await waitForText(page, '1 proposal'); await waitForText(page, '0 active memory created'); @@ -274,10 +274,10 @@ try { await page.goto(`${base}/memory-graph`, { waitUntil: 'domcontentloaded' }); await waitForText(page, 'Governed knowledge graph'); await waitForText(page, 'Current facts'); - await waitForText(page, 'project:oaf release_status ready'); + await waitForText(page, 'project:memory-recall release_status ready'); await page.locator('#memory-graph-history').check(); await waitForText(page, 'Superseded'); - await waitForText(page, 'project:oaf release_status draft'); + await waitForText(page, 'project:memory-recall release_status draft'); await waitForText(page, 'Provenance workspace://memory/status.md'); await page.locator('a[href="/map"][data-route="source-graph"]').first().click(); diff --git a/scripts/generate-manifest.mjs b/scripts/generate-manifest.mjs index 6436f7d5..25abe8f5 100644 --- a/scripts/generate-manifest.mjs +++ b/scripts/generate-manifest.mjs @@ -63,7 +63,7 @@ for (const file of files) { const manifest = { schemaVersion: '1.0.0', - project: 'open-agent-fabric', + project: 'memory-recall', generatedAt: new Date().toISOString(), fileCount: records.length, totalBytes: records.reduce((sum, item) => sum + item.bytes, 0), diff --git a/services/control-api/src/server.mjs b/services/control-api/src/server.mjs index 077e1b20..0e40a4c1 100644 --- a/services/control-api/src/server.mjs +++ b/services/control-api/src/server.mjs @@ -1779,7 +1779,7 @@ async function main() { mcpStatsPath: path.join(dataDir, 'mcp-stats.jsonl') }); api.server.listen(port, host, () => { - console.log(`Open Agent Fabric local bootstrap: http://${host}:${port}`); + console.log(`Memory Recall local workspace: http://${host}:${port}`); console.log('No external writes are enabled. Press Ctrl+C to stop.'); }); for (const signal of ['SIGINT', 'SIGTERM']) { diff --git a/tests/cli.test.mjs b/tests/cli.test.mjs index 348d2263..a6a3c2ea 100644 --- a/tests/cli.test.mjs +++ b/tests/cli.test.mjs @@ -2,27 +2,28 @@ import test from 'node:test';import assert from 'node:assert/strict';import { cr import semanticSetupReportSchema from '../packages/protocol/schemas/semantic-setup-report.schema.json' with { type: 'json' }; import { createServer } from 'node:http'; const CLI_PATH=path.resolve('apps/cli/oaf.mjs'); +test('CLI compatibility entrypoint identifies the product as Memory Recall',()=>{const result=spawnSync(process.execPath,['apps/cli/oaf.mjs','help'],{encoding:'utf8'});assert.equal(result.status,0);assert.match(result.stdout,/Memory Recall CLI/);assert.match(result.stdout,/project:memory-recall/);assert.match(result.stdout,/Memory Recall release status/);assert.doesNotMatch(result.stdout,/Open Agent Fabric CLI|project:oaf|OAF release status/);}); test('CLI help documents MCP token-saver server',()=>{const result=spawnSync(process.execPath,['apps/cli/oaf.mjs','help'],{encoding:'utf8'});assert.equal(result.status,0);assert.match(result.stdout,/oaf mcp server --read-only --root \. --stdio/)}); test('CLI help documents MCP token-saver install',()=>{const result=spawnSync(process.execPath,['apps/cli/oaf.mjs','help'],{encoding:'utf8'});assert.equal(result.status,0);assert.match(result.stdout,/oaf mcp install --client claude-code --dry-run --format json/)}); test('CLI help is local and documents core commands',()=>{const result=spawnSync(process.execPath,['apps/cli/oaf.mjs','help'],{encoding:'utf8'});assert.equal(result.status,0);assert.match(result.stdout,/Usage:\n oaf status\n oaf setup/);assert.match(result.stdout,/oaf task /);assert.match(result.stdout,/Start with oaf status; if it says Next task: none, run the First safe handoff command it prints/);assert.match(result.stdout,/Run oaf task only when npm run status names a next task/);assert.match(result.stdout,/oaf setup creates only local state in the current repository/);assert.match(result.stdout,/Use oaf map for the first explicit read-only scan/);assert.match(result.stdout,/oaf demo memory-loop --root \. --format json/);assert.match(result.stdout,/oaf map --root \. --sqlite \.local\/memory\.sqlite --format summary/);assert.match(result.stdout,/oaf handoff/);assert.match(result.stdout,/oaf token-saver/);assert.match(result.stdout,/oaf context scan --from codex --root \. --dry-run/);assert.match(result.stdout,/oaf context preview --from codex --root \. --objective/);assert.match(result.stdout,/oaf context pack .*--changed src\/auth\.ts .*--changed-from-git/);assert.match(result.stdout,/oaf context handoff --read-only --from codex --root \./);assert.match(result.stdout,/--memory-config oaf\.memory\.json/);assert.match(result.stdout,/oaf context receive --read-only --root \. --target codex --format json/);assert.match(result.stdout,/oaf context receive --read-only --root \. --target codex --format summary/);assert.match(result.stdout,/oaf context registry status --read-only --format json/);assert.match(result.stdout,/oaf context graph preview --root \. --query/);assert.match(result.stdout,/oaf graph stats --root \./);assert.match(result.stdout,/oaf graph search --root \. --query/);assert.match(result.stdout,/oaf graph trace --root \. --symbol/);assert.match(result.stdout,/oaf graph impact --root \. --changed/);assert.match(result.stdout,/oaf loop plan --read-only --root \./);assert.match(result.stdout,/oaf loop observe --root \. --plan .*--execute-commands/);assert.match(result.stdout,/oaf loop verify --root \. --plan .*--execute-commands/);assert.match(result.stdout,/oaf measure savings --read-only --root \./);assert.match(result.stdout,/oaf measure context-pack --read-only --root \./);assert.match(result.stdout,/impact brief/);assert.match(result.stdout,/--format summary/);assert.match(result.stdout,/oaf benchmark truth-floor --suite benchmark-truth-floor --dataset evals\/benchmark-truth-floor\/cases.v1.json --format json/);assert.match(result.stdout,/oaf bench sufficiency --read-only --root \. --format json/);assert.match(result.stdout,/oaf bench temporal --read-only --root \. --format json/);assert.match(result.stdout,/oaf bench session --read-only --root \. --format json/);assert.match(result.stdout,/oaf bench realqa --read-only --root \. --format json/);assert.match(result.stdout,/oaf bench locomo --read-only --root \. --dataset evals\/locomo\/smoke\.v1\.json --format json/);assert.match(result.stdout,/oaf memory ingest --root \. --sqlite \.local\/memory\.sqlite/);assert.match(result.stdout,/oaf memory review approve --root \. --sqlite \.local\/memory\.sqlite --proposal mpq_status/);assert.match(result.stdout,/oaf memory sgrep "context manifest"/);assert.match(result.stdout,/oaf memory fact add --sqlite \.local\/memory\.sqlite/);assert.match(result.stdout,/oaf memory fact get --sqlite \.local\/memory\.sqlite/);assert.match(result.stdout,/oaf memory fact history --sqlite \.local\/memory\.sqlite/);assert.match(result.stdout,/oaf skill load-plan --read-only --root \. --id skill:oaf-memory --format json/);assert.match(result.stdout,/oaf mcp inspect --read-only --root \. --format json/);assert.match(result.stdout,/oaf mcp resources --read-only/);assert.match(result.stdout,/oaf:\/\/workspace\/ws_local\/skills\/catalog/);assert.match(result.stdout,/oaf mcp smoke context-pack/);assert.match(result.stdout,/oaf harness setup status --client codex --dry-run --format json/);assert.match(result.stdout,/oaf harness setup plan --client cursor --server oaf --dry-run --format json/);assert.match(result.stdout,/oaf harness setup uninstall --client cursor --server oaf --dry-run --format json/);assert.match(result.stdout,/no external writes/i)}); test('CLI help documents memory governance commands',()=>{const result=spawnSync(process.execPath,['apps/cli/oaf.mjs','help'],{encoding:'utf8'});assert.equal(result.status,0);assert.match(result.stdout,/oaf memory remember --batch facts\.json/);assert.match(result.stdout,/oaf memory approve mpq_status/);assert.match(result.stdout,/oaf memory approve --all-from workspace:\/\/PROJECT_STATUS\.json/);assert.match(result.stdout,/oaf memory approve --all/);assert.match(result.stdout,/oaf memory reject mpq_status/);assert.match(result.stdout,/oaf memory refine --read-only --root \. --sqlite \.local\/memory\.sqlite --target-active-facts 200/)}); test('CLI topic help treats valid help requests as read-only success',()=>{for(const [args,patterns] of [ - [['help','context'],[/Open Agent Fabric CLI: context/,/oaf handoff/,/--include-file notes\/handoff\.md/,/oaf context handoff --read-only/,/oaf context graph preview --root \. --query/,/Graph preview is dry-run only/]], - [['help','graph'],[/Open Agent Fabric CLI: graph/,/oaf graph stats --root \./,/oaf graph search --root \. --query/,/oaf graph trace --root \. --symbol/,/oaf graph impact --root \. --changed/,/raw source bodies are not included/]], - [['handoff','--help'],[/Open Agent Fabric CLI: handoff/,/With no flags it defaults to a compact/,/does not\s+write files/]], - [['token-saver','--help'],[/Open Agent Fabric CLI: token-saver/,/With no flags it measures/,/provider billing-token savings/]], - [['context','handoff','--help'],[/Open Agent Fabric CLI: context handoff/,/zero-tool MCP proof/,/does not write files/]], - [['context','receive','--help'],[/Open Agent Fabric CLI: context receive/,/versioned receiver packet/,/rejects task text/]], - [['context','registry','status','--help'],[/Open Agent Fabric CLI: context registry/,/verifies the current pointer/,/does not rebuild/]], - [['setup','--help'],[/Open Agent Fabric CLI: setup/,/Creates only local Recall state/,/does not\s+scan\s+source files/,/oaf map --root \. --sqlite \.local\/memory\.sqlite --format summary/]], - [['connect','--help'],[/Open Agent Fabric CLI: connect/,/dry-run by default/,/writes only the local\s+harness client config/]], - [['disconnect','--help'],[/Open Agent Fabric CLI: disconnect/,/dry-run by default/,/removes only\s+matching local harness config entries/]], - [['harness','setup','--help'],[/Open Agent Fabric CLI: harness setup/,/preview\s+only/,/does not mutate home config/]], - [['memory','refine','--help'],[/Open Agent Fabric CLI: memory refine/,/lineage\s+residue/,/--target-active-facts 200/,/does\s+not create active memory/,/state: "unavailable"/]], - [['skill','catalog','--help'],[/Open Agent Fabric CLI: skill catalog/,/does not include raw skill text/,/grant tool\s+authority/]], - [['skill','load-plan','--help'],[/Open Agent Fabric CLI: skill load-plan/,/ordered local reads/,/does not include raw skill text/]], - [['measure','context-pack','--help'],[/Open Agent Fabric CLI: measure context-pack/,/changed-file coverage/,/does not include raw source bodies/]], - [['mcp','--help'],[/Open Agent Fabric CLI: mcp/,/oaf mcp inspect --read-only --root \. --format json/,/oaf:\/\/workspace\/ws_local\/skills\/catalog/,/oaf mcp server --read-only --root \. --stdio/,/Resource\/server paths require/]] + [['help','context'],[/Memory Recall CLI: context/,/oaf handoff/,/--include-file notes\/handoff\.md/,/oaf context handoff --read-only/,/oaf context graph preview --root \. --query/,/Graph preview is dry-run only/]], + [['help','graph'],[/Memory Recall CLI: graph/,/oaf graph stats --root \./,/oaf graph search --root \. --query/,/oaf graph trace --root \. --symbol/,/oaf graph impact --root \. --changed/,/raw source bodies are not included/]], + [['handoff','--help'],[/Memory Recall CLI: handoff/,/With no flags it defaults to a compact/,/does not\s+write files/]], + [['token-saver','--help'],[/Memory Recall CLI: token-saver/,/With no flags it measures/,/provider billing-token savings/]], + [['context','handoff','--help'],[/Memory Recall CLI: context handoff/,/zero-tool MCP proof/,/does not write files/]], + [['context','receive','--help'],[/Memory Recall CLI: context receive/,/versioned receiver packet/,/rejects task text/]], + [['context','registry','status','--help'],[/Memory Recall CLI: context registry/,/verifies the current pointer/,/does not rebuild/]], + [['setup','--help'],[/Memory Recall CLI: setup/,/Creates only local Recall state/,/does not\s+scan\s+source files/,/oaf map --root \. --sqlite \.local\/memory\.sqlite --format summary/]], + [['connect','--help'],[/Memory Recall CLI: connect/,/dry-run by default/,/writes only the local\s+harness client config/]], + [['disconnect','--help'],[/Memory Recall CLI: disconnect/,/dry-run by default/,/removes only\s+matching local harness config entries/]], + [['harness','setup','--help'],[/Memory Recall CLI: harness setup/,/preview\s+only/,/does not mutate home config/]], + [['memory','refine','--help'],[/Memory Recall CLI: memory refine/,/lineage\s+residue/,/--target-active-facts 200/,/does\s+not create active memory/,/state: "unavailable"/]], + [['skill','catalog','--help'],[/Memory Recall CLI: skill catalog/,/does not include raw skill text/,/grant tool\s+authority/]], + [['skill','load-plan','--help'],[/Memory Recall CLI: skill load-plan/,/ordered local reads/,/does not include raw skill text/]], + [['measure','context-pack','--help'],[/Memory Recall CLI: measure context-pack/,/changed-file coverage/,/does not include raw source bodies/]], + [['mcp','--help'],[/Memory Recall CLI: mcp/,/oaf mcp inspect --read-only --root \. --format json/,/oaf:\/\/workspace\/ws_local\/skills\/catalog/,/oaf mcp server --read-only --root \. --stdio/,/Resource\/server paths require/]] ]){const result=spawnSync(process.execPath,['apps/cli/oaf.mjs',...args],{encoding:'utf8'});assert.equal(result.status,0,`${args.join(' ')}\n${result.stderr}`);assert.equal(result.stderr,'');for(const pattern of patterns)assert.match(result.stdout,pattern);}}); test('handoff command gives a new project a read-only summary without setup flags',()=>{const root=mkdtempSync(path.join(os.tmpdir(),'oaf-cli-handoff-default-'));writeFileSync(path.join(root,'package.json'),JSON.stringify({name:'new-developer-project'},null,2));writeFileSync(path.join(root,'AGENTS.md'),'Run the focused tests before handoff. Keep this local and read-only.');const result=spawnSync(process.execPath,[CLI_PATH,'handoff'],{cwd:root,encoding:'utf8'});assert.equal(result.status,0,result.stderr);assert.match(result.stdout,/State: ready/);assert.match(result.stdout,/Target: codex/);assert.match(result.stdout,/MCP readback: ok/);assert.match(result.stdout,/External writes: disabled/);assert.doesNotMatch(result.stdout,/Run the focused tests/);assert.doesNotMatch(result.stdout,new RegExp(root.replace(/[.*+?^${}()|[\]\\]/gu,'\\$&'),'u'));assert.match(result.stderr,/local git changed-file detection unavailable: not_git_repository/);}); test('token-saver command gives a new project read-only measurement without setup flags',()=>{const root=mkdtempSync(path.join(os.tmpdir(),'oaf-cli-token-saver-default-'));writeFileSync(path.join(root,'package.json'),JSON.stringify({name:'new-developer-project'},null,2));writeFileSync(path.join(root,'AGENTS.md'),'Measure local handoff context without raw source output.');const result=spawnSync(process.execPath,[CLI_PATH,'token-saver'],{cwd:root,encoding:'utf8'});assert.equal(result.status,0,result.stderr);assert.match(result.stdout,/# Context Pack Measurement/);assert.match(result.stdout,/Target harness: codex/);assert.match(result.stdout,/## Token Saver/);assert.match(result.stdout,/Practical baseline units:/);assert.match(result.stdout,/Saved units:/);assert.match(result.stdout,/Provider billing claimed: no/);assert.match(result.stdout,/MCP Readback/);assert.match(result.stdout,/Read-only: pass/);assert.match(result.stdout,/Production benchmark claimed: no/);assert.doesNotMatch(result.stdout,/Measure local handoff context/);assert.doesNotMatch(result.stdout,new RegExp(root.replace(/[.*+?^${}()|[\]\\]/gu,'\\$&'),'u'));assert.match(result.stderr,/local git changed-file detection unavailable: not_git_repository/);}); @@ -365,8 +366,8 @@ test('memory recall current-truth deltas rebuild a broad labeled auth map',()=>{ } assert(deltaTotal{const env={...process.env,OAF_FIXED_NOW:'2026-06-26T10:00:00.000Z'};const result=spawnSync(process.execPath,['apps/cli/oaf.mjs','demo','memory-loop','--root','.','--format','json'],{encoding:'utf8',env});assert.equal(result.status,0,result.stderr);const report=JSON.parse(result.stdout);assert.equal(report.command,'demo memory-loop');assert(report.compressedProfile.contextBudget.estimatedDeliveryTokens>0);assert.equal(report.loopPlan.contextBudget.estimatedDeliveryTokens,report.compressedProfile.contextBudget.estimatedDeliveryTokens);assert.equal(report.savings.beforeDeliveryTokens,report.compressedProfile.contextBudget.historyTokensAvailable);assert.equal(report.savings.afterDeliveryTokens,report.compressedProfile.contextBudget.estimatedDeliveryTokens);assert(report.savings.percent>0);assert.equal(report.savings.savings.providerBillingClaimed,false);assert.equal(report.observation.status,'passed');assert.equal(report.extractionProposal.status,'applied');assert.equal(report.memoryFact.id,'memfact_demo_memory_loop');assert.equal(report.memoryFact.validity.validFrom,'2026-06-26T10:00:00.000Z');assert.deepEqual(report.remembered,['project:oaf memory_loop connected']);assert.deepEqual(report.superseded,[]);assert.equal(report.safeguards.localOnly,true);assert.equal(report.safeguards.networkCalls,0);assert.equal(report.safeguards.modelCalls,0)}); -test('demo memory-loop npm script prints token saving remembered and superseded facts',()=>{const env={...process.env,OAF_FIXED_NOW:'2026-06-26T10:00:00.000Z'};const result=spawnSync('npm',['run','demo:memory-loop'],{encoding:'utf8',env});assert.equal(result.status,0,result.stderr);assert.match(result.stdout,/Memory loop token saving: \d+%/);assert.match(result.stdout,/Before\/after delivery tokens: \d+ -> \d+/);assert.match(result.stdout,/Remembered: project:oaf memory_loop connected/);assert.match(result.stdout,/Superseded: memfact_demo_memory_loop_previous -> memfact_demo_memory_loop/);assert.match(result.stdout,/Observation: passed/);assert.equal(result.stdout.includes('network'),false)}); +test('demo memory-loop runs native profile plan observe proposal and fact flow',()=>{const env={...process.env,OAF_FIXED_NOW:'2026-06-26T10:00:00.000Z'};const result=spawnSync(process.execPath,['apps/cli/oaf.mjs','demo','memory-loop','--root','.','--format','json'],{encoding:'utf8',env});assert.equal(result.status,0,result.stderr);const report=JSON.parse(result.stdout);assert.equal(report.command,'demo memory-loop');assert(report.compressedProfile.contextBudget.estimatedDeliveryTokens>0);assert.equal(report.loopPlan.contextBudget.estimatedDeliveryTokens,report.compressedProfile.contextBudget.estimatedDeliveryTokens);assert.equal(report.savings.beforeDeliveryTokens,report.compressedProfile.contextBudget.historyTokensAvailable);assert.equal(report.savings.afterDeliveryTokens,report.compressedProfile.contextBudget.estimatedDeliveryTokens);assert(report.savings.percent>0);assert.equal(report.savings.savings.providerBillingClaimed,false);assert.equal(report.observation.status,'passed');assert.equal(report.extractionProposal.status,'applied');assert.equal(report.memoryFact.id,'memfact_demo_memory_loop');assert.equal(report.memoryFact.validity.validFrom,'2026-06-26T10:00:00.000Z');assert.deepEqual(report.remembered,['project:memory-recall memory_loop connected']);assert.deepEqual(report.superseded,[]);assert.equal(report.safeguards.localOnly,true);assert.equal(report.safeguards.networkCalls,0);assert.equal(report.safeguards.modelCalls,0)}); +test('demo memory-loop npm script prints token saving remembered and superseded facts',()=>{const env={...process.env,OAF_FIXED_NOW:'2026-06-26T10:00:00.000Z'};const result=spawnSync('npm',['run','demo:memory-loop'],{encoding:'utf8',env});assert.equal(result.status,0,result.stderr);assert.match(result.stdout,/Memory loop token saving: \d+%/);assert.match(result.stdout,/Before\/after delivery tokens: \d+ -> \d+/);assert.match(result.stdout,/Remembered: project:memory-recall memory_loop connected/);assert.match(result.stdout,/Superseded: memfact_demo_memory_loop_previous -> memfact_demo_memory_loop/);assert.match(result.stdout,/Observation: passed/);assert.equal(result.stdout.includes('network'),false)}); test('measure savings reports real SQLite before and after delivery tokens without writes', async () => { const root = mkdtempSync(path.join(os.tmpdir(), 'oaf-cli-measure-savings-')); mkdirSync(path.join(root, '.local'), { recursive: true }); diff --git a/tests/control-api-boundary.test.mjs b/tests/control-api-boundary.test.mjs index dc9e108b..6bfaead4 100644 --- a/tests/control-api-boundary.test.mjs +++ b/tests/control-api-boundary.test.mjs @@ -106,7 +106,8 @@ test('cli serve inspects the repository it is launched from', async (t) => { } catch {} await new Promise((resolve) => setTimeout(resolve, 50)); } - assert.match(output, /Open Agent Fabric local bootstrap/); + assert.match(output, /Memory Recall local workspace/); + assert.doesNotMatch(output, /Open Agent Fabric/); const bootstrap = await fetch(`${base}/api/auth/bootstrap`, { method: 'POST', headers: { 'content-type': 'application/json', origin: base }, diff --git a/tests/docs.test.mjs b/tests/docs.test.mjs index a0f1ff1f..ab0a6c1b 100644 --- a/tests/docs.test.mjs +++ b/tests/docs.test.mjs @@ -40,3 +40,55 @@ test('README describes bench realqa as checkout-derived structured-ingest suffic assert.match(readme, /checkout-derived structured-ingest sufficiency/); assert.doesNotMatch(readme, /real repo question answering/i); }); + +test('canonical repository guidance uses Memory Recall as the product name', async () => { + const guidanceFiles = [ + 'AGENTS.md', + 'ASSIGN_TO_AGENT.md', + 'CITATION.cff', + 'CONTEXT.md', + 'GOVERNANCE.md', + 'MAINTAINERS.md', + 'NOTICE', + 'PRODUCT.md', + 'SECURITY.md', + 'SUPPORT.md', + 'docs/architecture/overview.md' + ]; + + for (const file of guidanceFiles) { + const document = await readFile(file, 'utf8'); + assert.match(document, /Memory Recall/, `${file} must name the canonical product`); + assert.doesNotMatch(document, /Open Agent Fabric/, `${file} must not present the retired product name`); + assert.doesNotMatch(document, /rebel0789\/open-agent-fabric/iu, `${file} must use the current repository`); + } + + const projectStatus = JSON.parse(await readFile('PROJECT_STATUS.json', 'utf8')); + const repositoryManifest = JSON.parse(await readFile('REPOSITORY_MANIFEST.json', 'utf8')); + assert.equal(projectStatus.project, 'memory-recall'); + assert.equal(repositoryManifest.project, 'memory-recall'); +}); + +test('repository-local scratch artifacts stay out of Git status', async () => { + const gitignore = await readFile('.gitignore', 'utf8'); + assert.match(gitignore, /^\.scratch\/$/mu); +}); + +test('current product surfaces do not revive the retired product name', async () => { + const productSurfaces = [ + 'apps/web/favicon.svg', + 'docs/api/openapi.yaml', + 'docs/open-source/fork-policy.md', + 'docs/product/loop-workbench.md', + 'packages/harness-context/src/index.mjs', + 'packages/memory-core/src/filesystem-ux.mjs', + 'packages/protocol/schemas/agent-pack.schema.json', + 'rust/README.md' + ]; + + for (const file of productSurfaces) { + const document = await readFile(file, 'utf8'); + assert.match(document, /Memory Recall/, `${file} must name the canonical product`); + assert.doesNotMatch(document, /Open Agent Fabric/, `${file} must not present the retired product name`); + } +}); diff --git a/tests/web-shell.test.mjs b/tests/web-shell.test.mjs index 71da0278..ee7f8960 100644 --- a/tests/web-shell.test.mjs +++ b/tests/web-shell.test.mjs @@ -261,6 +261,10 @@ test('product shell omits prohibited marketing and removed dashboard patterns', for (const phrase of ['developer-first', 'nervous system', 'unlock this workspace', 'supercharge', 'AI-powered', 'next-generation']) { assert.doesNotMatch(shell, new RegExp(phrase, 'i')); } + for (const retiredCopy of ['Open Agent Fabric', 'project:oaf', 'OAF compressed', 'read OAF resources', 'OAF server only']) { + assert.doesNotMatch(shell, new RegExp(retiredCopy, 'i')); + } + assert.match(shell, /Memory Recall/); for (const selector of ['page-eyebrow', 'recall-map-signals', 'nav-code']) { assert.doesNotMatch(shell, new RegExp(selector)); } @@ -585,9 +589,9 @@ test('memory route renders real temporal fact fields and computed token number', summary: { proposalCount: 0, activeMemoryCreated: 0 }, proposalFacts: [] }); - assert.match(emptyIntakeHtml, /Try: Fact: project:oaf release_status release-candidate/); + assert.match(emptyIntakeHtml, /Try: Fact: project:memory-recall release_status release-candidate/); assert.match(html, new RegExp(`
Naive baseline
${profile.contextBudget.historyTokensAvailable}
`)); - assert.match(html, new RegExp(`
OAF compressed
${profile.contextBudget.estimatedDeliveryTokens}
`)); + assert.match(html, new RegExp(`
Memory Recall delivery
${profile.contextBudget.estimatedDeliveryTokens}
`)); assert.match(html, /
Provider billing<\/dt>
not claimed<\/dd>/); assert.match(html, /
MCP calls<\/dt>
2<\/dd>/); assert.match(html, /
MCP delivered<\/dt>
320<\/dd>/);