@sentropic/h2a 0.85.25 → 0.86.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/plugin.json +1 -1
- package/.codex-plugin/plugin.json +1 -1
- package/dist/bin.js +51 -2
- package/dist/bin.js.map +1 -1
- package/dist/cli-command-map.d.ts +119 -0
- package/dist/cli-command-map.d.ts.map +1 -0
- package/dist/cli-command-map.js +396 -0
- package/dist/cli-command-map.js.map +1 -0
- package/dist/cli-contract.d.ts.map +1 -1
- package/dist/cli-contract.js +38 -0
- package/dist/cli-contract.js.map +1 -1
- package/dist/cli.d.ts +25 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +356 -7
- package/dist/cli.js.map +1 -1
- package/dist/identity.d.ts +37 -3
- package/dist/identity.d.ts.map +1 -1
- package/dist/identity.js +0 -0
- package/dist/identity.js.map +1 -1
- package/dist/index.d.ts +7 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -2
- package/dist/index.js.map +1 -1
- package/dist/runtime/enrollment/ceremony.d.ts +542 -0
- package/dist/runtime/enrollment/ceremony.d.ts.map +1 -0
- package/dist/runtime/enrollment/ceremony.js +777 -0
- package/dist/runtime/enrollment/ceremony.js.map +1 -0
- package/dist/runtime/enrollment/index.d.ts +16 -0
- package/dist/runtime/enrollment/index.d.ts.map +1 -0
- package/dist/runtime/enrollment/index.js +16 -0
- package/dist/runtime/enrollment/index.js.map +1 -0
- package/dist/runtime/feed/descriptors.d.ts +261 -0
- package/dist/runtime/feed/descriptors.d.ts.map +1 -0
- package/dist/runtime/feed/descriptors.js +425 -0
- package/dist/runtime/feed/descriptors.js.map +1 -0
- package/dist/runtime/feed/index.d.ts +12 -0
- package/dist/runtime/feed/index.d.ts.map +1 -0
- package/dist/runtime/feed/index.js +12 -0
- package/dist/runtime/feed/index.js.map +1 -0
- package/dist/runtime/identity/index.d.ts +3 -3
- package/dist/runtime/identity/index.d.ts.map +1 -1
- package/dist/runtime/identity/index.js +2 -2
- package/dist/runtime/identity/index.js.map +1 -1
- package/dist/runtime/identity/live.d.ts +68 -0
- package/dist/runtime/identity/live.d.ts.map +1 -1
- package/dist/runtime/identity/live.js +78 -2
- package/dist/runtime/identity/live.js.map +1 -1
- package/dist/runtime/identity/readers.d.ts +89 -5
- package/dist/runtime/identity/readers.d.ts.map +1 -1
- package/dist/runtime/identity/readers.js +242 -33
- package/dist/runtime/identity/readers.js.map +1 -1
- package/dist/runtime/local-files/presence.d.ts +16 -1
- package/dist/runtime/local-files/presence.d.ts.map +1 -1
- package/dist/runtime/local-files/presence.js +32 -20
- package/dist/runtime/local-files/presence.js.map +1 -1
- package/dist/runtime/loop/index.d.ts +5 -0
- package/dist/runtime/loop/index.d.ts.map +1 -1
- package/dist/runtime/loop/index.js +48 -5
- package/dist/runtime/loop/index.js.map +1 -1
- package/dist/runtime/mcp/agent-launch.d.ts +15 -1
- package/dist/runtime/mcp/agent-launch.d.ts.map +1 -1
- package/dist/runtime/mcp/agent-launch.js +45 -4
- package/dist/runtime/mcp/agent-launch.js.map +1 -1
- package/dist/runtime/mcp/index.d.ts +1 -1
- package/dist/runtime/mcp/index.d.ts.map +1 -1
- package/dist/runtime/mcp/index.js +1 -1
- package/dist/runtime/mcp/index.js.map +1 -1
- package/dist/runtime/mcp/server.d.ts +3 -1
- package/dist/runtime/mcp/server.d.ts.map +1 -1
- package/dist/runtime/mcp/server.js +7 -2
- package/dist/runtime/mcp/server.js.map +1 -1
- package/dist/runtime/mcp/sessions.d.ts +19 -0
- package/dist/runtime/mcp/sessions.d.ts.map +1 -1
- package/dist/runtime/mcp/sessions.js +44 -2
- package/dist/runtime/mcp/sessions.js.map +1 -1
- package/dist/runtime/mcp/stdio.d.ts +8 -0
- package/dist/runtime/mcp/stdio.d.ts.map +1 -1
- package/dist/runtime/mcp/stdio.js +42 -0
- package/dist/runtime/mcp/stdio.js.map +1 -1
- package/dist/runtime/mcp-registry/broker.d.ts +175 -0
- package/dist/runtime/mcp-registry/broker.d.ts.map +1 -0
- package/dist/runtime/mcp-registry/broker.js +203 -0
- package/dist/runtime/mcp-registry/broker.js.map +1 -0
- package/dist/runtime/mcp-registry/broker.typecheck.d.ts +2 -0
- package/dist/runtime/mcp-registry/broker.typecheck.d.ts.map +1 -0
- package/dist/runtime/mcp-registry/broker.typecheck.js +48 -0
- package/dist/runtime/mcp-registry/broker.typecheck.js.map +1 -0
- package/dist/runtime/mirror/accept.d.ts +43 -5
- package/dist/runtime/mirror/accept.d.ts.map +1 -1
- package/dist/runtime/mirror/accept.js +55 -7
- package/dist/runtime/mirror/accept.js.map +1 -1
- package/dist/runtime/mirror/build.d.ts +23 -4
- package/dist/runtime/mirror/build.d.ts.map +1 -1
- package/dist/runtime/mirror/build.js +34 -4
- package/dist/runtime/mirror/build.js.map +1 -1
- package/dist/runtime/mirror/index.d.ts +3 -0
- package/dist/runtime/mirror/index.d.ts.map +1 -1
- package/dist/runtime/mirror/index.js +3 -0
- package/dist/runtime/mirror/index.js.map +1 -1
- package/dist/runtime/mirror/ingest.d.ts +109 -0
- package/dist/runtime/mirror/ingest.d.ts.map +1 -0
- package/dist/runtime/mirror/ingest.js +117 -0
- package/dist/runtime/mirror/ingest.js.map +1 -0
- package/dist/runtime/mirror/push-daemon.d.ts +376 -0
- package/dist/runtime/mirror/push-daemon.d.ts.map +1 -0
- package/dist/runtime/mirror/push-daemon.js +644 -0
- package/dist/runtime/mirror/push-daemon.js.map +1 -0
- package/dist/runtime/mirror/sanitize.d.ts +477 -0
- package/dist/runtime/mirror/sanitize.d.ts.map +1 -0
- package/dist/runtime/mirror/sanitize.js +625 -0
- package/dist/runtime/mirror/sanitize.js.map +1 -0
- package/dist/runtime/mirror/serve.d.ts.map +1 -1
- package/dist/runtime/mirror/serve.js +104 -24
- package/dist/runtime/mirror/serve.js.map +1 -1
- package/dist/runtime/reporting/report-ai.d.ts.map +1 -1
- package/dist/runtime/reporting/report-ai.js +1 -0
- package/dist/runtime/reporting/report-ai.js.map +1 -1
- package/dist/runtime/reporting/stdin.d.ts +2 -0
- package/dist/runtime/reporting/stdin.d.ts.map +1 -0
- package/dist/runtime/reporting/stdin.js +8 -0
- package/dist/runtime/reporting/stdin.js.map +1 -0
- package/dist/status-surface.d.ts +167 -0
- package/dist/status-surface.d.ts.map +1 -0
- package/dist/status-surface.js +670 -0
- package/dist/status-surface.js.map +1 -0
- package/dist/types.d.ts +17 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -1
- package/focus-app/client/_app/immutable/assets/{0.BdzHFb9q.css → 0.CgEVz9YW.css} +1 -1
- package/focus-app/client/_app/immutable/assets/0.CgEVz9YW.css.br +0 -0
- package/focus-app/client/_app/immutable/assets/0.CgEVz9YW.css.gz +0 -0
- package/focus-app/client/_app/immutable/assets/2.DaTmt6o7.css +1 -0
- package/focus-app/client/_app/immutable/assets/2.DaTmt6o7.css.br +0 -0
- package/focus-app/client/_app/immutable/assets/2.DaTmt6o7.css.gz +0 -0
- package/focus-app/client/_app/immutable/assets/3.vWQUAHjz.css +1 -0
- package/focus-app/client/_app/immutable/assets/3.vWQUAHjz.css.br +0 -0
- package/focus-app/client/_app/immutable/assets/3.vWQUAHjz.css.gz +0 -0
- package/focus-app/client/_app/immutable/assets/AppShell.CDPwj3zU.css +1 -0
- package/focus-app/client/_app/immutable/assets/AppShell.CDPwj3zU.css.br +0 -0
- package/focus-app/client/_app/immutable/assets/AppShell.CDPwj3zU.css.gz +0 -0
- package/focus-app/client/_app/immutable/chunks/{Cj6wo28J.js → 1NK_OeRJ.js} +1 -1
- package/focus-app/client/_app/immutable/chunks/1NK_OeRJ.js.br +0 -0
- package/focus-app/client/_app/immutable/chunks/1NK_OeRJ.js.gz +0 -0
- package/focus-app/client/_app/immutable/chunks/{Bs3f1UbD.js → B1veta3r.js} +2 -2
- package/focus-app/client/_app/immutable/chunks/B1veta3r.js.br +0 -0
- package/focus-app/client/_app/immutable/chunks/B1veta3r.js.gz +0 -0
- package/focus-app/client/_app/immutable/chunks/{DEmooz0s.js → BZ4lcC0v.js} +1 -1
- package/focus-app/client/_app/immutable/chunks/BZ4lcC0v.js.br +0 -0
- package/focus-app/client/_app/immutable/chunks/BZ4lcC0v.js.gz +0 -0
- package/focus-app/client/_app/immutable/chunks/Bu7F9NOv.js +2 -0
- package/focus-app/client/_app/immutable/chunks/Bu7F9NOv.js.br +0 -0
- package/focus-app/client/_app/immutable/chunks/Bu7F9NOv.js.gz +0 -0
- package/focus-app/client/_app/immutable/chunks/C6KhNEX3.js +1 -0
- package/focus-app/client/_app/immutable/chunks/C6KhNEX3.js.br +0 -0
- package/focus-app/client/_app/immutable/chunks/C6KhNEX3.js.gz +0 -0
- package/focus-app/client/_app/immutable/chunks/DIljKPJN.js +1 -0
- package/focus-app/client/_app/immutable/chunks/DIljKPJN.js.br +0 -0
- package/focus-app/client/_app/immutable/chunks/DIljKPJN.js.gz +0 -0
- package/focus-app/client/_app/immutable/chunks/iXQate3J.js +2 -0
- package/focus-app/client/_app/immutable/chunks/iXQate3J.js.br +0 -0
- package/focus-app/client/_app/immutable/chunks/iXQate3J.js.gz +0 -0
- package/focus-app/client/_app/immutable/chunks/{ZxFklh9T.js → kCE9wz0g.js} +1 -1
- package/focus-app/client/_app/immutable/chunks/kCE9wz0g.js.br +0 -0
- package/focus-app/client/_app/immutable/chunks/kCE9wz0g.js.gz +0 -0
- package/focus-app/client/_app/immutable/chunks/x-hq5fDG.js +1 -0
- package/focus-app/client/_app/immutable/chunks/x-hq5fDG.js.br +0 -0
- package/focus-app/client/_app/immutable/chunks/x-hq5fDG.js.gz +0 -0
- package/focus-app/client/_app/immutable/entry/app.C1sDdCg5.js +2 -0
- package/focus-app/client/_app/immutable/entry/app.C1sDdCg5.js.br +0 -0
- package/focus-app/client/_app/immutable/entry/app.C1sDdCg5.js.gz +0 -0
- package/focus-app/client/_app/immutable/entry/start.X3j_A5RN.js +1 -0
- package/focus-app/client/_app/immutable/entry/start.X3j_A5RN.js.br +2 -0
- package/focus-app/client/_app/immutable/entry/start.X3j_A5RN.js.gz +0 -0
- package/focus-app/client/_app/immutable/nodes/0.gLl44WzG.js +5 -0
- package/focus-app/client/_app/immutable/nodes/0.gLl44WzG.js.br +0 -0
- package/focus-app/client/_app/immutable/nodes/0.gLl44WzG.js.gz +0 -0
- package/focus-app/client/_app/immutable/nodes/1.DUrghq2x.js +1 -0
- package/focus-app/client/_app/immutable/nodes/1.DUrghq2x.js.br +0 -0
- package/focus-app/client/_app/immutable/nodes/1.DUrghq2x.js.gz +0 -0
- package/focus-app/client/_app/immutable/nodes/2.Bp7JE7Pz.js +1 -0
- package/focus-app/client/_app/immutable/nodes/2.Bp7JE7Pz.js.br +0 -0
- package/focus-app/client/_app/immutable/nodes/2.Bp7JE7Pz.js.gz +0 -0
- package/focus-app/client/_app/immutable/nodes/3.Cml8enOG.js +12 -0
- package/focus-app/client/_app/immutable/nodes/3.Cml8enOG.js.br +0 -0
- package/focus-app/client/_app/immutable/nodes/3.Cml8enOG.js.gz +0 -0
- package/focus-app/client/_app/version.json +1 -1
- package/focus-app/client/_app/version.json.br +0 -0
- package/focus-app/client/_app/version.json.gz +0 -0
- package/focus-app/h2a-focus.json +108 -80
- package/focus-app/handler.js +7 -7
- package/focus-app/index.js +7 -7
- package/focus-app/server/chunks/chunks/AppShell.js-6Pi87dO0.js +1353 -0
- package/focus-app/server/chunks/chunks/AppShell.js-6Pi87dO0.js.map +1 -0
- package/focus-app/server/chunks/chunks/agent-memory-dossier.js-nmFG_rgx.js +1036 -0
- package/focus-app/server/chunks/chunks/agent-memory-dossier.js-nmFG_rgx.js.map +1 -0
- package/focus-app/server/chunks/chunks/{exports.js-DUTkELZq.js → exports.js-CdqPbjm1.js} +3 -3
- package/focus-app/server/chunks/chunks/{exports.js-DUTkELZq.js.map → exports.js-CdqPbjm1.js.map} +1 -1
- package/focus-app/server/chunks/chunks/h2a-bus.js-bLEJ_Adi.js +233 -0
- package/focus-app/server/chunks/chunks/h2a-bus.js-bLEJ_Adi.js.map +1 -0
- package/focus-app/server/chunks/chunks/{index.js-Di21TltP.js → index.js-laGHLarB.js} +5 -2
- package/focus-app/server/chunks/chunks/index.js-laGHLarB.js.map +1 -0
- package/focus-app/server/chunks/chunks/{internal.js-33vbd70h.js → internal.js-C6T8nHkl.js} +4 -4
- package/focus-app/server/chunks/chunks/{internal.js-33vbd70h.js.map → internal.js-C6T8nHkl.js.map} +1 -1
- package/focus-app/server/chunks/chunks/{root.js-DO1m-gJA.js → root.js-CtVQOgDw.js} +2 -2
- package/focus-app/server/chunks/chunks/{root.js-DO1m-gJA.js.map → root.js-CtVQOgDw.js.map} +1 -1
- package/focus-app/server/chunks/entries/endpoints/api/decisions/inject/{_server.ts.js-j0NNcOSZ.js → _server.ts.js-hrbMnsV0.js} +13 -42
- package/focus-app/server/chunks/entries/endpoints/api/decisions/inject/_server.ts.js-hrbMnsV0.js.map +1 -0
- package/focus-app/server/chunks/entries/endpoints/api/dossiers/agent-memory/include/_server.ts.js-Dw4odGdV.js +138 -0
- package/focus-app/server/chunks/entries/endpoints/api/dossiers/agent-memory/include/_server.ts.js-Dw4odGdV.js.map +1 -0
- package/focus-app/server/chunks/entries/endpoints/api/h2a/targets/_server.ts.js-BLjYv7vg.js +41 -0
- package/focus-app/server/chunks/entries/endpoints/api/h2a/targets/_server.ts.js-BLjYv7vg.js.map +1 -0
- package/focus-app/server/chunks/entries/fallbacks/{error.svelte.js-Dj3sETSX.js → error.svelte.js-RbeaNF5a.js} +4 -4
- package/focus-app/server/chunks/entries/fallbacks/{error.svelte.js-Dj3sETSX.js.map → error.svelte.js-RbeaNF5a.js.map} +1 -1
- package/focus-app/server/chunks/entries/pages/{_layout.svelte.js-BoLsbuC2.js → _layout.svelte.js-e1E_I04z.js} +2 -2
- package/focus-app/server/chunks/entries/pages/{_layout.svelte.js-BoLsbuC2.js.map → _layout.svelte.js-e1E_I04z.js.map} +1 -1
- package/focus-app/server/chunks/entries/pages/{_page.svelte.js-QDldMYhk.js → _page.svelte.js-DbaEG23x.js} +31 -1373
- package/focus-app/server/chunks/entries/pages/_page.svelte.js-DbaEG23x.js.map +1 -0
- package/focus-app/server/chunks/entries/pages/dossier/agent-memory/_page.server.ts.js-CFC-wn6U.js +88 -0
- package/focus-app/server/chunks/entries/pages/dossier/agent-memory/_page.server.ts.js-CFC-wn6U.js.map +1 -0
- package/focus-app/server/chunks/entries/pages/dossier/agent-memory/_page.svelte.js-BpR26NMa.js +1574 -0
- package/focus-app/server/chunks/entries/pages/dossier/agent-memory/_page.svelte.js-BpR26NMa.js.map +1 -0
- package/focus-app/server/chunks/{handler-Cp_5hLyY.js → handler-Be3dyNi0.js} +3 -3
- package/focus-app/server/chunks/{handler-Cp_5hLyY.js.map → handler-Be3dyNi0.js.map} +1 -1
- package/focus-app/server/chunks/{index.js-CBh7Wjqp.js → index.js-siUxMMnK.js} +3 -3
- package/focus-app/server/chunks/{index.js-CBh7Wjqp.js.map → index.js-siUxMMnK.js.map} +1 -1
- package/focus-app/server/chunks/manifest.js-CXJqSHHn.js +78 -0
- package/focus-app/server/chunks/manifest.js-CXJqSHHn.js.map +1 -0
- package/focus-app/server/chunks/nodes/0.js-leU6sfRR.js +9 -0
- package/focus-app/server/chunks/nodes/{0.js-4wlmdsk8.js.map → 0.js-leU6sfRR.js.map} +1 -1
- package/focus-app/server/chunks/nodes/1.js-os6QXm6B.js +9 -0
- package/focus-app/server/chunks/nodes/{1.js-B-LpY-lC.js.map → 1.js-os6QXm6B.js.map} +1 -1
- package/focus-app/server/chunks/nodes/2.js-DAaLjh93.js +19 -0
- package/focus-app/server/chunks/nodes/2.js-DAaLjh93.js.map +1 -0
- package/focus-app/server/chunks/nodes/3.js-Cmgi6Uy0.js +18 -0
- package/focus-app/server/chunks/nodes/3.js-Cmgi6Uy0.js.map +1 -0
- package/package.json +2 -2
- package/skills/h2a-run/SKILL.md +100 -0
- package/focus-app/client/_app/immutable/assets/0.BdzHFb9q.css.br +0 -2
- package/focus-app/client/_app/immutable/assets/0.BdzHFb9q.css.gz +0 -0
- package/focus-app/client/_app/immutable/assets/2.Ddxq02y4.css +0 -1
- package/focus-app/client/_app/immutable/assets/2.Ddxq02y4.css.br +0 -0
- package/focus-app/client/_app/immutable/assets/2.Ddxq02y4.css.gz +0 -0
- package/focus-app/client/_app/immutable/chunks/Bs3f1UbD.js.br +0 -0
- package/focus-app/client/_app/immutable/chunks/Bs3f1UbD.js.gz +0 -0
- package/focus-app/client/_app/immutable/chunks/Bv8OL8ib.js +0 -1
- package/focus-app/client/_app/immutable/chunks/Bv8OL8ib.js.br +0 -0
- package/focus-app/client/_app/immutable/chunks/Bv8OL8ib.js.gz +0 -0
- package/focus-app/client/_app/immutable/chunks/CVq_IFFr.js +0 -2
- package/focus-app/client/_app/immutable/chunks/CVq_IFFr.js.br +0 -0
- package/focus-app/client/_app/immutable/chunks/CVq_IFFr.js.gz +0 -0
- package/focus-app/client/_app/immutable/chunks/Cj6wo28J.js.br +0 -0
- package/focus-app/client/_app/immutable/chunks/Cj6wo28J.js.gz +0 -0
- package/focus-app/client/_app/immutable/chunks/DEmooz0s.js.br +0 -0
- package/focus-app/client/_app/immutable/chunks/DEmooz0s.js.gz +0 -0
- package/focus-app/client/_app/immutable/chunks/DQIRXgdC.js +0 -2
- package/focus-app/client/_app/immutable/chunks/DQIRXgdC.js.br +0 -0
- package/focus-app/client/_app/immutable/chunks/DQIRXgdC.js.gz +0 -0
- package/focus-app/client/_app/immutable/chunks/ZxFklh9T.js.br +0 -0
- package/focus-app/client/_app/immutable/chunks/ZxFklh9T.js.gz +0 -0
- package/focus-app/client/_app/immutable/chunks/_wRuVGPs.js +0 -1
- package/focus-app/client/_app/immutable/chunks/_wRuVGPs.js.br +0 -0
- package/focus-app/client/_app/immutable/chunks/_wRuVGPs.js.gz +0 -0
- package/focus-app/client/_app/immutable/entry/app.6DKouWRt.js +0 -2
- package/focus-app/client/_app/immutable/entry/app.6DKouWRt.js.br +0 -0
- package/focus-app/client/_app/immutable/entry/app.6DKouWRt.js.gz +0 -0
- package/focus-app/client/_app/immutable/entry/start.DlLmkUb7.js +0 -1
- package/focus-app/client/_app/immutable/entry/start.DlLmkUb7.js.br +0 -2
- package/focus-app/client/_app/immutable/entry/start.DlLmkUb7.js.gz +0 -0
- package/focus-app/client/_app/immutable/nodes/0.CuSOF0Of.js +0 -5
- package/focus-app/client/_app/immutable/nodes/0.CuSOF0Of.js.br +0 -0
- package/focus-app/client/_app/immutable/nodes/0.CuSOF0Of.js.gz +0 -0
- package/focus-app/client/_app/immutable/nodes/1.D39jdnqm.js +0 -1
- package/focus-app/client/_app/immutable/nodes/1.D39jdnqm.js.br +0 -0
- package/focus-app/client/_app/immutable/nodes/1.D39jdnqm.js.gz +0 -0
- package/focus-app/client/_app/immutable/nodes/2.CnU8ifRl.js +0 -1
- package/focus-app/client/_app/immutable/nodes/2.CnU8ifRl.js.br +0 -0
- package/focus-app/client/_app/immutable/nodes/2.CnU8ifRl.js.gz +0 -0
- package/focus-app/server/chunks/chunks/index.js-Di21TltP.js.map +0 -1
- package/focus-app/server/chunks/entries/endpoints/api/decisions/inject/_server.ts.js-j0NNcOSZ.js.map +0 -1
- package/focus-app/server/chunks/entries/pages/_page.svelte.js-QDldMYhk.js.map +0 -1
- package/focus-app/server/chunks/manifest.js-Cm6cC7mC.js +0 -56
- package/focus-app/server/chunks/manifest.js-Cm6cC7mC.js.map +0 -1
- package/focus-app/server/chunks/nodes/0.js-4wlmdsk8.js +0 -9
- package/focus-app/server/chunks/nodes/1.js-B-LpY-lC.js +0 -9
- package/focus-app/server/chunks/nodes/2.js-F6jp5eD9.js +0 -19
- package/focus-app/server/chunks/nodes/2.js-F6jp5eD9.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-memory-dossier.js-nmFG_rgx.js","sources":["../../../../.svelte-kit/output/server/chunks/agent-memory-dossier.js"],"sourcesContent":["const agentMemoryDossier = {\n revision: \"agent-memory-2026-07-25\",\n previousRevision: \"agent-memory-2026-07-24\",\n title: \"Dossier de décisions — mémoire de l’agent persistant (révision 2)\",\n context: \"Un agent persistant est ici repensé comme une MÉMOIRE durable — le substrat qui reste — consommée par une ou plusieurs sessions éphémères, partagée entre plusieurs CLI (claude, codex, gemini, hermes…), multi-session, local-first sous contrainte RAM/OOM. Cette révision 2 fait deux choses que la révision 1 ne faisait pas. D’abord elle descend au niveau des MÉCANISMES : comment Hermes écrit réellement, ce que fait le chemin d’écriture bi-temporel de Graphiti, ce que graphify sait déjà faire et ce qui lui manque, ce qu’un hook de compaction permet et interdit — chaque fait est posé sur la carte qui en a besoin, jamais en annexe, et ce que la recherche n’a pas pu établir est marqué NON VÉRIFIÉ plutôt que présenté comme acquis. Ensuite elle transforme vos réponses du premier passage en nouvelles décisions : vos réponses désignaient des COMPOSITIONS qui ne figuraient dans aucune liste d’options, et c’est là qu’est la vraie question de conception. Le dossier reste neutre : aucune option n’est recommandée, et le champ « critère » de chaque carte nomme ce qu’il faut peser, jamais un choix.\",\n carryOver: {\n from: \"agent-memory-2026-07-24\",\n carried: [\"D1\", \"D2\", \"D3\", \"D4\", \"D5\", \"D6\", \"D7\"],\n added: [\"D8\", \"D9\", \"D10\", \"D11\", \"D12\", \"D13\"],\n statement: \"Les sept décisions de la révision 1 sont conservées à l’identique — mêmes clés, mêmes clés d’options — et leur texte a été enrichi de faits de mécanisme, pas remplacé. Le jeu de réponses du 25/07/2026 se rejoue donc INTÉGRALEMENT sur cette révision : aucune de vos réponses n’est orpheline. Les six cartes ajoutées (D8 à D13) n’ont, elles, aucune réponse enregistrée — c’est ce que le rapport de rejeu vous dira, décision par décision.\"\n },\n corrections: [\n {\n subject: \"Hermes — les plafonds\",\n wasStated: \"MEMORY.md ~800 tokens, USER.md ~500 tokens.\",\n actually: \"Les plafonds sont en CARACTÈRES, pas en tokens : memory_char_limit = 2200, user_char_limit = 1375, surchargeables dans config.yaml. Les chiffres en tokens sont dérivés, jamais appliqués.\",\n source: \"recherche §1 — tools/memory_tool.py:167\"\n },\n {\n subject: \"Hermes — la consolidation\",\n wasStated: \"Les plafonds forcent la consolidation et la déduplication.\",\n actually: \"Il n’y a AUCUNE passe de consolidation LLM. Une écriture au-delà du budget est rejetée dans l’appel même, avec l’usage, les entrées courantes et la consigne de replace/remove puis de réessayer DANS LE MÊME TOUR. Le plafonnement est une erreur dure synchrone, pas un résumeur ; au bout de 3 échecs dans le tour, l’outil rend un done terminal pour ne jamais bloquer la réponse.\",\n source: \"recherche §1 — memory_tool.py:426-449, 495-520, 652-671\"\n },\n {\n subject: \"Hermes — la licence\",\n wasStated: \"Licence non vérifiée.\",\n actually: \"MIT (fichier LICENSE décodé).\",\n source: \"recherche §1\"\n },\n {\n subject: \"Letta/MemGPT — la concurrence\",\n wasStated: \"Blocs partagés par identifiant, dernier-écrivain-gagnant.\",\n actually: \"Ce n’est PAS du dernier-écrivain-gagnant : la table des blocs porte un verrouillage optimiste SQLAlchemy (version_id_col) — une écriture périmée lève — plus une vraie table BlockHistory avec sequence_number et undo/redo. C’est l’histoire de concurrence la plus solide du corpus, à l’opposé de ce qu’annonçait la révision 1.\",\n source: \"recherche §2 / §9 — orm/block.py\"\n },\n {\n subject: \"ctx (ActiveMemory) — « convergent »\",\n wasStated: \"Hypothèse d’un mécanisme de fusion, peut-être de type CRDT.\",\n actually: \"C’est une affirmation ÉPISTÉMIQUE, pas un mécanisme : « à travers les 17 systèmes analysés, six patrons de conception ont été découverts indépendamment » (thèse §5.3), donc ces patrons portent un poids de validation supplémentaire. La résolution de conflit, elle, est du git ordinaire sur du Markdown ordinaire. Aucun CRDT, aucun pilote de fusion nulle part dans le code.\",\n source: \"recherche §10\"\n },\n {\n subject: \"ctx (ActiveMemory) — la surface\",\n wasStated: \"CLI seule, pas de MCP.\",\n actually: \"MCP étendu, au contraire : ctx mcp en stdio, ctx setup génère les configs par outil, ctx steering sync pousse les règles dans Claude Code/Cursor/Kiro/Cline, un plugin enregistre des hooks PreToolUse/PostToolUse/UserPromptSubmit et des .claude/skills/, ctx loop génère un script de boucle autonome, ctx watch applique les balises <context-update>.\",\n source: \"recherche §10\"\n },\n {\n subject: \"graphify — « build puis query »\",\n wasStated: \"Archétype corpus-de-référence, pas un écrivain de mémoire vivante.\",\n actually: \"Plusieurs manques supposés sont déjà comblés : un adaptateur d’ingestion de conversations Claude/Codex/Cursor/Gemini qui parse des événements typés session_start, session_end, turn, user_prompt, tool_call, skill_invoke et COMPACTION ; un puits de mémoire autorisée .graphify/memory/ ; une temporalité uni-temporelle t/t_end avec un rappel ponctuel graphify recall --as-of ; un serveur MCP graphify serve à 18 outils dont 2 en écriture ; un journal de décisions d’ontologie append-only ; et un pilote de fusion git pour graph.json. D’autres manques, eux, apparaissent — ils sont sur les cartes D8 à D12.\",\n source: \"recherche §0.1 / §4 — src/conversations.ts, src/ingest.ts:345, src/temporal-recall.ts, src/serve.ts\"\n }\n ],\n decisions: [\n {\n key: \"D1\",\n question: \"Quelle est la nature de la mémoire : corpus de référence curé, capture de conversation vivante, ou hybride des deux ?\",\n whyNow: \"Le repositionnement récent (mémoire = la brique durable, sessions = éphémères) rend ce choix fondateur : il détermine si la mémoire est un corpus qu’on construit une fois puis qu’on interroge (à la graphify) ou un flux qu’on alimente à chaque tour (à la mem0/Letta) — les deux impliquent une architecture de fond différente.\",\n options: [\n {\n key: \"corpus-de-reference\",\n title: \"Corpus de référence curé (documents/code)\",\n behavior: \"Un pipeline batch transforme un corpus documentaire en graphe ontologique typé et dédupliqué. graphify : JSON local avec citations au niveau du localisateur, cycle de vie de revue à 9 états (inferred, proposed, guessed, candidate, validated, reference, attached, needs_review, rejected, superseded), déclencheurs d’écriture attachés à git. cognee : Extract-Cognify-Load, embarqué par défaut (SQLite + LanceDB + Kuzu/Ladybug), l’ontologie appliquée APRÈS extraction par appariement flou.\",\n consequence: \"Structure typée et auditable pour le savoir stable, avec une provenance vérifiable fait par fait. Mais l’écriture est batch et déclenchée par git, pas par un tour de conversation ; et le plancher mesuré d’une écriture sur ce poste est d’environ 620 ms pour 373 Mo de RSS, parce que le modèle d’écriture réécrit le graphe entier.\"\n },\n {\n key: \"conversation-vivante\",\n title: \"Capture de conversation vivante\",\n behavior: \"Chaque tour ou fait est extrait automatiquement et écrit au fil de l’eau — mem0 (routeur ADD/UPDATE/DELETE/NOOP), Letta/MemGPT (blocs auto-édités rendus en XML avec leur propre compteur de budget, plus une archive), Zep/Graphiti (add_episode bi-temporel), Hermes (un seul outil memory add/replace/remove, sans action de lecture), A-MEM (une note Zettelkasten par fait, puis une décision LLM d’évolution), MemoryOS (paliers avec une formule de chaleur explicite).\",\n consequence: \"Capture fidèle du vécu de session et de son évolution. Mais chaque système paie cette fidélité quelque part : Graphiti par un coût d’environ 2 + 3E + N appels LLM par épisode, linéaire en nombre d’arêtes ; A-MEM en RÉÉCRIVANT sur place les tags et le contexte de chaque voisin retrouvé ; MemoryOS en remettant à zéro les compteurs de visite d’une page promue ; Hermes en refusant l’écriture au plafond au lieu de résumer.\"\n },\n {\n key: \"hybride\",\n title: \"Hybride : corpus curé et capture vivante en couches distinctes\",\n behavior: \"Le corpus documentaire reste construit et réconcilié séparément pendant qu’une couche de capture alimente une mémoire complémentaire consommée par les sessions éphémères. C’est déjà la forme du couple graphify + adaptateur de conversations : l’adaptateur SAIT lire les tours et les compactions, mais c’est un scanner de lecture, à la demande — rien ne le déclenche en fin de tour.\",\n consequence: \"Couvre les deux besoins, mais double le nombre de substrats à opérer et exige une frontière explicite entre « ce que sait le corpus » et « ce que retient la session ». C’est cette frontière que votre réponse du premier passage déplace : vous voulez graphify des deux côtés — voir la carte D8, qui n’existait pas en révision 1.\"\n }\n ],\n mechanisms: [\n {\n system: \"Hermes\",\n fact: \"La mémoire est injectée comme un INSTANTANÉ GELÉ au démarrage de session : load_from_disk() ne s’exécute qu’une fois et capture un instantané ; format_for_system_prompt() ne rend que cet instantané. La docstring le dit : « ce n’est PAS l’état vivant, les écritures en cours de session n’affectent pas ceci ». Raison assumée : « cela préserve le cache de préfixe du LLM ». Conséquence directe : une écriture en cours de session est bien persistée sur disque (fichier temporaire puis os.replace) et visible dans la réponse d’outil, mais elle N’ENTRE PAS dans le prompt avant la session suivante.\",\n source: \"recherche §1 — memory_tool.py, format_for_system_prompt()\"\n },\n {\n system: \"Hermes\",\n fact: 'Le stockage est une liste plate d’entrées en texte brut, sans front-matter ni titres, séparées par le délimiteur littéral \"\\\\n§\\\\n\" ; les doublons sont écartés au chargement. Le modèle voit son propre budget grâce à un compteur affiché dans le prompt système (par exemple « MEMORY … [67% — 1,474/2,200 chars] »). Il n’y a AUCUNE action de lecture ou de liste : le modèle ne voit sa mémoire que par l’injection gelée, et les charges d’erreur contiennent les entrées courantes.',\n source: \"recherche §1 — memory_tool.py:16,69,776-783\"\n },\n {\n system: \"Hermes\",\n fact: \"L’historique de session est un magasin SÉPARÉ, jamais injecté : state.db avec trois index FTS5 externes en parallèle (unicode61, trigramme hors role=tool, et une extension CJK bigrammes chargeable en C), synchronisés par des triggers. L’outil session_search classe par bm25(), déduplique par lignée de session, DÉCLASSE les lignes venant de cron sous les lignes interactives, rend des fenêtres encadrées de ±5 messages — et retourne un message role: tool ordinaire, PAS une injection dans le prompt système. Aucun appel LLM.\",\n source: \"recherche §1\"\n },\n {\n system: \"Hermes\",\n fact: \"Les modes de défaillance ne sont pas des plantages, c’est de la DÉGRADATION SILENCIEUSE — et c’est l’avertissement le plus transposable de tout le corpus pour l’archétype « fichier curé borné ». Issues vivantes : #56464 (P2) où replace/add ont tronqué MEMORY.md de 28 entrées (~2100 caractères) à 5 (~468) EN RAPPORTANT UN SUCCÈS, 3 fois dans une seule session ; #49200 (P2) où un fournisseur externe en échec retombe silencieusement sur le builtin de 2200 caractères, sans aucun log, non détecté pendant 6 jours et récurrent à chaque reconstruction de conteneur ; #66654 « pollution de mémoire et accumulation périmée… aucun mécanisme de nettoyage », sans horodatage. La proposition #22612 de découper MEMORY.md en index + sous-documents n’est PAS fusionnée : le fichier plat et gelé est bien la conception livrée.\",\n source: \"recherche §1 / §15.6\"\n },\n {\n system: \"ctx (ActiveMemory)\",\n fact: \"ctx agent --budget N est une ALLOCATION SCORÉE, pas une troncature : la constitution passe toujours en entier, les tâches sont plafonnées à 40 % du budget, les conventions à 20 %, et les décisions et apprentissages sont scorés par récence plus pertinence vis-à-vis des tâches actives — corps complet si le score est haut, sinon titre seul dans un débordement « Also Noted ». Les décisions supersédées sont exclues. C’est de la dégradation gracieuse, là où Hermes fait une erreur dure.\",\n source: \"recherche §10\"\n },\n {\n system: \"A-MEM / MemoryOS\",\n fact: \"Les deux mécanismes d’évolution que le corpus offre sont destructifs de façons différentes. A-MEM : après avoir trouvé 5 mémoires voisines, une décision LLM peut renvoyer update_neighbor, qui ÉCRASE SUR PLACE les tags et le contexte de chaque voisin retrouvé (le contenu et les mots-clés, eux, ne sont jamais touchés). MemoryOS : chaleur = 1,0 × visites + 1,0 × interactions + 1 × exp(-Δheures/24), soit une demi-vie d’environ 16,6 h ; à chaleur ≥ 5,0 la page passe en long terme, l’analyse de profil est un REMPLACEMENT complet (merge=False), et les compteurs de visite et d’interaction sont remis à zéro. L’éviction en moyen terme est en LFU, pas sur la chaleur — une asymétrie documentée.\",\n source: \"recherche §11\"\n }\n ],\n unknowns: [\n \"Sur les 8 fournisseurs de mémoire externes livrés par Hermes, un seul (Honcho) a été lu de bout en bout. Les 7 autres (byterover, hindsight, holographic, mem0, openviking, retaindb, supermemory) sont NON VÉRIFIÉS au-delà de leur déclaration.\",\n \"Le corpus ne dit pas si le rappel de graphify est déjà branché sur ce qu’une revue accepte : aucun consommateur ne rejoue le journal de décisions de réconciliation à la reconstruction (voir D12). Si c’est confirmé, « écritures soumises à revue » et « graphe régénéré depuis le corpus » ne sont pas connectés — ce qui change la lecture de cette carte.\"\n ],\n recommendation: \"Trancher d’abord si l’agent doit avant tout SAVOIR (corpus stable interrogeable) ou SE SOUVENIR (ce qui s’est dit et fait en session) — et, au vu des mécanismes ci-dessus, peser un point que la révision 1 masquait : les deux archétypes ne diffèrent pas seulement par ce qu’ils stockent, mais par le moment où l’écriture devient visible (instantané gelé jusqu’à la session suivante chez Hermes, immédiat chez Letta, à la reconstruction chez graphify).\",\n nextWork: \"Lister les sources déjà disponibles (corpus documentaire graphify, historiques de session existants, adaptateur de conversations) et vérifier lesquelles sont réellement exploitables avant de choisir une couche.\"\n },\n {\n key: \"D2\",\n question: \"Quelle structure adopter pour le substrat de mémoire ?\",\n whyNow: \"Une fois la nature de la mémoire choisie (D1), sa structure fixe ce qu’elle peut représenter : relations dans le temps, entités canoniques, similarité sémantique ou simple texte curé. C’est le choix qui verrouille le plus l’outillage en aval (requêtes, MCP, format d’écriture).\",\n options: [\n {\n key: \"graphe-temporel\",\n title: \"Graphe typé et bi-temporel\",\n behavior: \"Entités et relations extraites par LLM dans un graphe avec résolution d’entités et validité bi-temporelle. Chez Graphiti, add_episode enchaîne : validation des types, résolution du group_id, récupération de l’épisode précédent, extraction des nœuds (1 appel LLM), résolution des nœuds extraits (recherche par embedding, puis nom exact, puis MinHash/Jaccard ≥ 0,9, puis repli LLM par lots), extraction des arêtes (1 appel LLM), résolution des arêtes, attributs et résumés, puis UNE seule écriture en masse.\",\n consequence: \"Réconciliation la plus fidèle du corpus. Le coût réel, dérivé de la lecture du code et documenté NULLE PART ailleurs — pas même dans l’article : environ 2 + 3E + N + 2 appels LLM par épisode, donc LINÉAIRE EN NOMBRE D’ARÊTES, pas en O(1). Il faut aussi un serveur de graphe, et le budget de types est plafonné à 10 types d’entités et 10 types d’arêtes, ≤ 10 champs chacun.\"\n },\n {\n key: \"graphe-ontologique-corpus\",\n title: \"Graphe ontologique de corpus\",\n behavior: \"Un pipeline batch transforme un corpus en graphe typé dédupliqué avec entités canoniques. graphify : JSON graphology avec citations, evidence_refs, confidence_handle, provenance_handle et un cycle de vie de revue à 9 états ; déjà uni-temporel (t, t_end, t_iso, t_src) avec recall --as-of. cognee : l’ontologie n’est PAS une contrainte de prompt mais un ancrage POST-extraction — l’extraction tourne d’abord sans contrainte, le LLM ne voit jamais les classes de l’ontologie dans le chemin par défaut, puis un résolveur apparie par chaîne floue (difflib, cutoff 0,8) et renomme vers le nom canonique.\",\n consequence: \"Structure la plus auditable et token-efficiente pour un savoir stable. Mais elle est pensée pour un corpus construit par lots, et sa temporalité est à UN seul axe : elle sait « quand le fait valait », pas « quand nous l’avons appris ». Ajouter le second axe est la question de la carte D9.\"\n },\n {\n key: \"vecteurs-auto-extraits\",\n title: \"Vecteurs sémantiques auto-extraits\",\n behavior: \"Un LLM extrait des faits, les embed et les indexe pour un rappel par similarité — mem0 (Qdrant/pgvector/Chroma/LanceDB pluggables), LangMem (Postgres+pgvector), LanceDB embarqué. À noter côté LangGraph : le SummarizationNode n’écrit explicitement PAS dans le magasin long terme ; le vrai chemin d’écriture de LangMem est ReflectionExecutor, une tâche de fond débouncée après une pause de conversation.\",\n consequence: \"Écosystème large et léger à héberger, mais le rappel peut manquer sa cible (similarité ≠ pertinence) et la structure relationnelle entre faits est perdue.\"\n },\n {\n key: \"fichiers-cures-sans-embeddings\",\n title: \"Fichiers curés, sans embeddings\",\n behavior: \"La mémoire vit en fichiers texte explicitement écrits, sans vecteurs ni index. ctx lit .context/ dans un ordre de priorité fixe (CONSTITUTION.md, TASKS.md, CONVENTIONS.md, ARCHITECTURE.md, DECISIONS.md, LEARNINGS.md, GLOSSARY.md, AGENT_PLAYBOOK.md) et sert un paquet de contexte par allocation scorée sous budget. L’outil memory d’Anthropic expose un dossier virtuel /memories dont VOUS possédez les octets.\",\n consequence: \"Portabilité et transparence maximales, RAM minimale, aucun rappel sémantique. Le risque n’est pas technique mais humain : c’est l’archétype où la dégradation est la plus silencieuse (voir les issues de troncature et d’accumulation périmée de Hermes, carte D1).\"\n },\n {\n key: \"memoire-hierarchique-auto-editee\",\n title: \"Mémoire hiérarchique auto-éditée\",\n behavior: \"Un petit bloc toujours en contexte que l’agent édite lui-même, avec débordement vers un stockage archivé. Letta rend ses blocs en XML en exposant au modèle son propre budget (chars_current / chars_limit), et offre une famille d’outils d’édition de plus en plus précise : core_memory_append/replace historiques, puis memory_replace (appariement unique, refuse les chaînes préfixées d’un numéro de ligne), memory_insert, memory_rethink, jusqu’à memory_apply_patch, un diff unifié à la Codex appliqué côté serveur.\",\n consequence: \"L’état saillant est toujours disponible. Mais chez Letta le champ limit semble PUREMENT INDICATIF — aucune application n’a été trouvée dans le chemin d’écriture : update_block_value() ne vérifie que le type, et la docstring de la mise à jour en masse PRÉTEND lever au-delà de la limite alors que l’implémentation est une simple affectation. C’est l’exact inverse de Hermes, qui échoue en fermeture.\"\n }\n ],\n mechanisms: [\n {\n system: \"Graphiti\",\n fact: \"Les quatre horodatages, conformes mot pour mot à l’article §2.2.3 : created_at (temps de transaction, posé à la construction) ; valid_at (temps d’événement, produit surtout par le LLM d’extraction, avec pour repli un appel à un petit modèle dédié qui ne se déclenche que si valid_at ET invalid_at sont nuls) ; invalid_at (temps d’événement, mêmes chemins, ET posé par la résolution de contradiction à la valid_at du fait contredisant) ; expired_at (temps de transaction, utc_now() au moment où le système a APPRIS que c’était faux — il peut retarder arbitrairement sur invalid_at).\",\n source: \"recherche §3 — graphiti.py:980-1230, resolve_edge_contradictions():569\"\n },\n {\n system: \"Graphiti\",\n fact: \"Le fichier prompts/invalidate_edges.py N’EXISTE PLUS : déduplication et contradiction sont fusionnées dans un seul prompt, resolve_edge, qui renvoie duplicate_facts et contradicted_facts — un même fait peut figurer dans les deux listes.\",\n source: \"recherche §3 — prompts/dedupe_edges.py\"\n },\n {\n system: \"Graphiti\",\n fact: \"L’ontologie et la bi-temporalité COEXISTENT réellement ici, et c’est le seul endroit du corpus où c’est le cas : entity_types, edge_types et edge_type_map sont injectés dans le prompt d’extraction et validés par modèle Pydantic, sur la MÊME EntityEdge qui porte les quatre horodatages.\",\n source: \"recherche §3 / §13\"\n },\n {\n system: \"graphify\",\n fact: \"La sémantique d’intervalle se contredit DÉJÀ aujourd’hui, sur un seul axe : la spécification écrit un intervalle fermé [t, t_end] alors que le rendeur de scène le traite en demi-ouvert [t, t_end) — soit une erreur d’un cran systématique aux bornes de bucket. Un second axe temporel multiplierait cette incohérence par quatre.\",\n source: \"recherche §13 — SPEC_AGENTSTATS_TIMEORIENTED.md:42 vs src/studio-scene.ts:32-34\"\n },\n {\n system: \"Letta\",\n fact: \"Le champ limit des blocs semble PUREMENT INDICATIF : aucune application n’a été trouvée dans le chemin d’écriture — update_block_value() ne vérifie que le type, le validateur Pydantic ne retire que les octets nuls, et la docstring de bulk_update_block_values_async PRÉTEND lever au-delà de la limite alors que l’implémentation est une simple affectation. À prendre avec la réserve qui va avec : c’est une conclusion de LECTURE DE CODE, non documentée, donc non vérifiée en source primaire — mais si elle tient, c’est l’exact inverse de Hermes, qui échoue en fermeture.\",\n source: \"recherche §2 — schemas/block.py, Memory.update_block_value()\",\n status: \"unverified\"\n },\n {\n system: \"cognee\",\n fact: \"La temporalité est native mais NON bi-temporelle : Timestamp, Interval(starts_at, ends_at) et Event forment des intervalles d’événement sur une seule ligne de temps — pas de temps de transaction, pas d’invalidation pilotée par contradiction. Le trio de stockage est SQLite + LanceDB + Ladybug, et Ladybug vient tout juste d’atterrir : le mainteneur écrit lui-même qu’il est « plus simple pour l’instant d’utiliser Kuzu en expérimentation locale » — à épingler en version.\",\n source: \"recherche §12 — issue #2098\"\n }\n ],\n unknowns: [\n \"La latence d’ingestion par épisode de Graphiti est GÉNUINEMENT non documentée, partout. La latence publiée (article, table 2 : 3,20 s contre 31,3 s en contexte complet) concerne la RÉCUPÉRATION, pas l’écriture.\",\n \"Aucun exemple de documentation ne montre une arête typée personnalisée ET ses valid_at/invalid_at ensemble : la coexistence est établie par lecture du code, pas par un échantillon officiel. NON VÉRIFIÉ.\",\n \"La syntaxe littérale d’une requête ponctuelle chez Graphiti est NON VÉRIFIÉE : la forme WHERE e.valid_at <= $t AND (e.invalid_at IS NULL OR e.invalid_at > $t) est déduite du schéma, pas citée.\"\n ],\n recommendation: \"Peser le besoin de structure relationnelle et de temporalité contre le coût d’opération, en tenant compte d’un chiffre que la révision 1 n’avait pas : la structure la plus fidèle coûte un nombre d’appels LLM linéaire en nombre d’arêtes par épisode, et ce coût n’est écrit nulle part dans sa documentation.\",\n nextWork: \"Prototyper un rappel sur un échantillon réel de requêtes de l’agent pour chaque structure candidate et comparer précision, latence et RAM — et, avant tout arbitrage temporel, lever l’incohérence d’intervalle fermé/demi-ouvert déjà présente dans graphify.\"\n },\n {\n key: \"D3\",\n question: \"Qui décide qu’un fait entre en mémoire : une extraction automatique ou une écriture curée et revue ?\",\n whyNow: \"Multi-session, multi-CLI signifie que plusieurs agents écriront dans la même mémoire sans supervision continue de l’opérateur — il faut décider avant tout déploiement si chaque écriture doit être explicite ou relue, ou si un extracteur automatique peut agir seul. Deux publications récentes rendent la question plus dure qu’elle n’en avait l’air : voir les mécanismes.\",\n options: [\n {\n key: \"auto-extraction\",\n title: \"Extraction automatique par le LLM\",\n behavior: \"Un extracteur LLM décide seul quoi retenir et écrit à chaque tour ou épisode — mem0 (routeur ADD/UPDATE/DELETE/NOOP), Graphiti (add_episode), Letta (auto plus auto-édition). Chez Letta le déclencheur du travail de fond est un compteur de tours persisté modulo N : on incrémente, puis on tire quand le reste est nul.\",\n consequence: \"Couverture large sans effort opérateur, mais chaque écriture dépend du jugement du modèle. Deux résultats de 2026 chiffrent ce risque, et le second porte précisément sur une boucle autonome — voir les mécanismes de cette carte.\"\n },\n {\n key: \"ecriture-gatee\",\n title: \"Extraction automatique avec porte d’approbation\",\n behavior: \"Le LLM propose une écriture, une validation peut la bloquer avant qu’elle n’entre dans le substrat. Chez Hermes, memory.write_approval est à false PAR DÉFAUT ; activée, elle approuve en ligne au premier plan mais MET EN ATTENTE tout le reste — messagerie, cron, scripts, relecteur de fond — dans pending/memory/<id>.json, géré par /memory pending | approve | reject. Les skills mettent TOUJOURS en attente. Les écritures automatiques sont étiquetées [auto].\",\n consequence: \"Conserve la couverture automatique tout en ouvrant un point de contrôle. Deux propriétés de la seule implémentation vraiment livrée méritent d’être vues avant de s’en inspirer : il n’existe AUCUN état « refuser d’emblée » — la porte ne fait que RETARDER ; et elle est désactivée par défaut.\"\n },\n {\n key: \"curee-revue\",\n title: \"Écriture explicite et curée\",\n behavior: \"Seules des commandes explicites déposent un fait, avec revue humaine possible. graphify offre la surface de revue la plus solide du corpus : file de candidats, validate_ontology_patch puis apply_ontology_patch, dry-run par défaut, journal de décisions autoritaire plus un audit JSONL, cycle de vie à 9 états, chemin mis en prison, et une exposition MCP derrière un drapeau d’écriture explicite. La file est estampillée graph_hash, profile_hash et generated_at pour que la péremption soit détectable.\",\n consequence: \"Précision et auditabilité maximales, aucune dérive silencieuse, mais couverture partielle. Et une propriété de conception à connaître : ce cycle de vie a été bâti pour des candidats par LOTS ; la capture continue inverse le rapport — c’est l’objet de la carte D11.\"\n }\n ],\n mechanisms: [\n {\n system: \"GovMem (arXiv:2607.02579)\",\n fact: \"Des observations répétées à travers plusieurs agents peuvent refléter une SOURCE COMMUNE — même prompt, même information périmée — et non des preuves indépendantes. GovMem estime un support tenant compte de cette dépendance et va chercher des contre-preuves, pour promouvoir, rejeter ou SIGNALER POUR REVUE ; la fausse promotion synthétique tombe de 0,597 à 0,040. Mais sur une évaluation externe de traces réelles d’agents de code, la conclusion est frontale : « aucune n’est sûre pour une promotion automatique » — chaque cas positif à la vérification était un artefact ou non réutilisable. Leur propre conclusion est que le signalement pour revue domine, et qu’un chemin de promotion entièrement automatique n’est pas fiable aujourd’hui.\",\n source: \"recherche §7\"\n },\n {\n system: \"MissClaw (arXiv:2603.23064)\",\n fact: \"Un chemin Exposition → Mémoire → Comportement par lequel du contenu non fiable rencontré pendant une exécution EN ARRIÈRE-PLAN entre silencieusement en mémoire longue et façonne le comportement ultérieur face à l’utilisateur, SANS AUCUNE injection de prompt. Les signaux de crédibilité sociale poussent l’influence jusqu’à 61 %, et la sauvegarde de mémoire ROUTINIÈRE promeut la pollution en mémoire permanente à des taux allant jusqu’à 91 %, persistants d’une session à l’autre. Cela porte directement sur une boucle h2a autonome.\",\n source: \"recherche §7\"\n },\n {\n system: \"Le corpus entier\",\n fact: \"Toutes les portes réellement implémentées sont BINAIRES (en attente contre approuvée). Celle de Zep est graduée mais laisse la combinaison à l’application. AUCUN système étudié n’implémente un poids de confiance continu qui DÉPRÉCIERAIT au lieu d’EXCLURE une mémoire non approuvée à la lecture : « l’agent lit les faits en attente à un poids moindre » n’a aucun précédent livré.\",\n source: \"recherche §7 / §14.5\"\n },\n {\n system: \"ChatGPT / Copilot\",\n fact: \"Deux surfaces souvent citées comme des portes n’en sont pas : « Manage memories » de ChatGPT est une curation RÉTROSPECTIVE, pas une porte avant écriture ; et Copilot valide par LLM à la LECTURE, avec citations, pas par approbation humaine à l’écriture. Chez mem0, cognee, LangMem et l’outil memory d’Anthropic, aucune porte n’a été trouvée — celle d’Anthropic étant côté client, un développeur POURRAIT en poser une.\",\n source: \"recherche §7\"\n },\n {\n system: \"SCICERO\",\n fact: \"La réponse de la littérature à un arriéré de revue n’est pas de relire plus vite, c’est de RÉDUIRE LA SURFACE à relire : l’extension de validation de graphe de connaissances rapporte jusqu’à 80 % de précision et 82 % de F1 gagnés « avec un effort manuel minimal », en n’invoquant la revue humaine QUE sur désaccord entre validateurs automatiques.\",\n source: \"recherche §7\"\n }\n ],\n unknowns: [\n \"La boucle propose-puis-approuve de Cursor Memories n’est NON VÉRIFIÉE en source primaire : elle vient d’un forum et de sources secondaires.\",\n \"La surface de revue de mem0 est NON VÉRIFIÉE : aucune porte trouvée, ce qui est une absence de preuve et non une preuve d’absence.\"\n ],\n recommendation: \"Arbitrer entre couverture et précision en intégrant un fait nouveau : la seule évaluation sur traces réelles d’agents de code du corpus conclut qu’aucun cas n’était sûr en promotion automatique, et le seul travail portant sur l’exécution en arrière-plan mesure jusqu’à 91 % de pollution promue par une sauvegarde de mémoire routinière. Si un compromis « gated » est retenu, définir qui tient la porte — et se souvenir que la seule porte livrée du corpus ne fait que retarder, jamais refuser.\",\n nextWork: \"Définir, pour l’option retenue, le format exact d’une écriture (fait, provenance, horodatage, base d’assertion) et qui peut la produire.\"\n },\n {\n key: \"D4\",\n question: \"Comment le substrat doit-il réconcilier des faits contradictoires ou redondants ?\",\n whyNow: \"Une mémoire partagée entre plusieurs sessions et outils va inévitablement recevoir des faits contradictoires. Sans règle de réconciliation choisie à l’avance, ces conflits s’accumulent silencieusement dès le premier déploiement multi-session.\",\n options: [\n {\n key: \"bi-temporelle\",\n title: \"Réconciliation bi-temporelle\",\n behavior: \"Chaque fait porte une validité temporelle et une contradiction invalide l’ancien sans le supprimer. Le mécanisme exact, chez Graphiti : on vérifie D’ABORD le recouvrement temporel — si les fenêtres ne se recouvrent pas, on passe — puis on MUTE L’ARÊTE EXISTANTE SUR PLACE, invalid_at = valid_at du nouveau fait et expired_at = utc_now(). L’ancienne arête n’est JAMAIS supprimée. Un garde-fou symétrique traite l’ingestion désordonnée : si un candidat plus ancien a une valid_at PLUS RÉCENTE, c’est la NOUVELLE arête qui est immédiatement expirée.\",\n consequence: \"Permet de répondre « que savait-on à la date T » et de tracer les changements d’avis, au prix d’un coût d’appels LLM linéaire en nombre d’arêtes par épisode et d’un graphe à opérer. Et l’hallucination d’attributs est réelle : des garde-fous ont été livrés APRÈS que jusqu’à 9 Ko de méta-raisonnement de LLM ont atterri dans des champs d’attributs d’entité.\"\n },\n {\n key: \"derniere-valeur-dedup\",\n title: \"Dernière valeur + déduplication\",\n behavior: \"Un routeur ou l’agent décide ADD/UPDATE/DELETE/NOOP par similarité ; la valeur la plus récente remplace l’ancienne sans historique temporel — mem0 (routeur explicite, expiration par mémoire), Letta (auto-édition et consolidation en temps de sommeil, sans temporalité). Il faut corriger ici la révision 1 : Letta ne perd PAS l’historique — il tient une table BlockHistory avec numéros de séquence et undo/redo.\",\n consequence: \"Résout le doublon et le désaccord le plus courant à faible coût, mais perd la trace de ce qui a changé et quand, sauf là où un historique explicite existe.\"\n },\n {\n key: \"aucune\",\n title: \"Aucune réconciliation\",\n behavior: \"Chaque écriture s’ajoute sans fusion ni détection de conflit — RAG vectoriel brut (pgvector/Chroma/LanceDB/txtai), fichiers curés tant que l’humain ne les édite pas. À signaler comme astuce transposable : cognee obtient une convergence sans coordination par des identifiants DÉTERMINISTES (id_for() sur des identity_fields), donc une écriture répétée fusionne par identité au lieu de dupliquer.\",\n consequence: \"Substrat le plus simple à opérer, mais les faits contradictoires coexistent silencieusement et la précision du rappel se dégrade avec le volume.\"\n }\n ],\n mechanisms: [\n {\n system: \"graphify\",\n fact: \"Le point décisif pour votre réponse « on repose au maximum sur graphify pour cela » : graphify fait de la réconciliation d’IDENTITÉ (deux nœuds désignent-ils la même entité ?), pas de la réconciliation d’ASSERTION (ce fait contredit-il celui-là ?). Ce sont deux algorithmes différents. graphify a le vocabulaire (superseded, previous_status) et un point d’accroche naturel (une opération de patch de type supersede_relation), mais le DÉTECTEUR est un travail neuf — et c’est justement la partie chère de Graphiti.\",\n source: \"recherche §13\"\n },\n {\n system: \"Graphiti\",\n fact: \"La concurrence n’est pas résolue : SEMAPHORE_LIMIT = 20 borne le parallélisme À L’INTÉRIEUR d’un appel, et la docstring avertit que « chaque épisode est ajouté séquentiellement et attendu ». Le bug ouvert #1331 est plus grave : deux add_episode concurrents sur des group_id DIFFÉRENTS depuis une même instance courent sur self.driver = self.driver.clone(database=group_id) — le dernier écrivain gagne et les écritures de l’autre tâche atterrissent DANS LE MAUVAIS GRAPHE. Contamination inter-locataires, non corrigé.\",\n source: \"recherche §3 — issue #1331\"\n },\n {\n system: \"Graphiti\",\n fact: \"Les petits modèles ou modèles locaux « émettent fréquemment du JSON qui ne correspond pas au schéma », et l’issue #1171 signale des entités désignées par pronom manquées d’un message à l’autre. Le dimensionnement des modèles est explicite dans le code (ModelSize.small pour la déduplication, les attributs et les horodatages).\",\n source: \"recherche §3\"\n }\n ],\n unknowns: [\n \"Il n’existe aucun adaptateur cognee ↔ Graphiti maintenu : le POC de blog enveloppe des nœuds Graphiti dans un objet Pydantic lié à un commit précis et à un notebook, présenté comme une démonstration d’extensibilité. C’est une absence de preuve, marquée NON VÉRIFIÉE.\"\n ],\n recommendation: \"Décider si répondre à « que savait l’agent à la date T, et pourquoi a-t-il changé d’avis » a de la valeur ici — et, si la réponse est oui et que le substrat retenu est graphify, mesurer que ce qui manque n’est pas le champ temporel (il est presque gratuit) mais le DÉTECTEUR de contradiction, qui est un algorithme différent de celui que graphify possède.\",\n nextWork: \"Construire 3 à 5 scénarios de contradiction réels (changement de préférence, correction d’un fait) et vérifier comment chaque stratégie les traite, en distinguant explicitement réconciliation d’identité et réconciliation d’assertion.\"\n },\n {\n key: \"D5\",\n question: \"Où héberger la mémoire sous la contrainte RAM/OOM : embarqué local, serveur+base de données, ou SaaS ?\",\n whyNow: \"La contrainte RAM/OOM est déjà vécue ailleurs dans ce projet. Aucun système du benchmark ne publie de chiffres RAM : le budget disponible doit être fixé et mesuré avant, pas après, avoir committé une architecture serveur+DB. Cette révision apporte enfin UNE mesure, prise localement — voir les mécanismes.\",\n options: [\n {\n key: \"embarque-local\",\n title: \"Embarqué, local-first\",\n behavior: \"Bibliothèque intégrée au process de l’agent, sans serveur séparé — cognee en mode par défaut, LanceDB (fichier disque, gère des jeux plus grands que la RAM), mem0 en mode librairie, ctx (fichiers), graphify (JSON local), txtai.\",\n consequence: \"Empreinte la plus faible et déploiement le plus simple. Mais la mesure prise sur ce poste donne le plancher réel du modèle actuel de graphify : lecture 95 ms, parsing 161 ms, sérialisation 246 ms, écriture 118 ms, soit environ 620 ms à 267 Mo de tas et 373 Mo de RSS pour UN aller-retour de graphe complet, AVANT toute extraction. Au vu de l’historique d’OOM de cet espace de travail, une écriture par tour est une décision de gouvernance des ressources, pas un détail.\"\n },\n {\n key: \"serveur-plus-bd\",\n title: \"Serveur applicatif + base de données\",\n behavior: \"Un serveur dédié porte la mémoire, les sessions s’y connectent en client — Letta (serveur + Postgres/pgvector), Zep/Graphiti (Neo4j ou FalkorDB), mem0 en mode serveur. Côté graphify, le port GraphStore expose déjà quatre implémentations : file, neo4j, spanner, postgres.\",\n consequence: \"State partagé nativement entre process et sessions. Mais la disparité de capacités entre backends n’est pas cosmétique : queryWindow — le chemin de LECTURE de recall --as-of, donc de tout ce qui est temporel — n’existe QUE sur postgres. Choisir neo4j pour le web, c’est perdre la lecture temporelle à la couche de stockage.\"\n },\n {\n key: \"saas\",\n title: \"SaaS géré par le fournisseur\",\n behavior: \"Le fournisseur héberge et gère la mémoire, l’agent n’opère aucune infrastructure — mémoire ChatGPT d’OpenAI, Devin Knowledge/DeepWiki.\",\n consequence: \"Zéro opération, mais exclu par l’exigence local-first/self-hostable de ce projet — non portable, lié à un compte ou un vendeur ; cité ici seulement comme référence de contraste.\"\n }\n ],\n mechanisms: [\n {\n system: \"graphify — le port GraphStore\",\n fact: \"Le point qui compte pour votre réponse (« graphify embarque un backend db et pourrait être configuré pour l’usage d’une tierce db, surtout lorsque h2a devient intégré à sentropic, version web ») : il n’y a AUCUN insert, update ou delete par élément sur le port. La seule écriture est pushGraph d’une instance graphology COMPLÈTE, avec un mode replace ou merge — et replace est le défaut de la CLI. Le magasin est donc un MIROIR AVAL, pas un backend co-égal : le fichier reste la source de vérité. Si une interface web sentropic doit ÉCRIRE — un relecteur qui approuve — cette écriture n’a nulle part où atterrir dans le port actuel. Ajouter un upsert est le vrai poste de travail, et c’est LE MÊME que celui de la carte D8.\",\n source: \"recherche §8 — src/storage/types.ts:203-260\"\n },\n {\n system: \"graphify — les agrégats\",\n fact: \"aggregate et window sont « scopés au dernier instantané REPLACE ». En capture vivante, cela signifie soit re-pousser le graphe à chaque capture pour re-dériver les agrégats, soit accepter un retard — détectable via readSnapshotMeta() et topology_signature, mais structurel.\",\n source: \"recherche §8\"\n },\n {\n system: \"graphify — l’échelle actuelle\",\n fact: \"Mesuré localement en v0.17.2 : 8 919 nœuds, 81 260 liens, 54 039 561 octets — et .graphify/graph.json EST suivi par git (le .gitignore le dé-ignore explicitement). En revanche .graphify/memory/, l’unique puits de mémoire autorisée actuel, EST ignoré par git : il ne voyage pas, ne fusionne pas, et reste invisible au pilote de fusion.\",\n source: \"recherche §4 — .gitignore:22-25 et :35\"\n }\n ],\n recommendation: \"Fixer le budget RAM réellement tolérable avant de choisir — et intégrer deux faits de mécanisme que la révision 1 n’avait pas : le plancher d’écriture actuel est d’environ 620 ms et 373 Mo de RSS par aller-retour de graphe complet, et le port de stockage n’offre aucune écriture par élément, donc « configurer une tierce base » donne un miroir en lecture, pas une mémoire dans laquelle une interface web pourrait écrire.\",\n nextWork: \"Mesurer la RAM au repos et sous charge d’au moins un candidat embarqué et un candidat serveur sur le poste cible, et décider si le port GraphStore doit gagner une écriture par élément avant, et non après, l’intégration web.\"\n },\n {\n key: \"D6\",\n question: \"Comment gérer les écritures concurrentes entre plusieurs sessions CLI (claude/codex/gemini/hermes) sur la même mémoire ?\",\n whyNow: \"La mémoire doit être « une, partagée » entre claude/codex/gemini/hermes. Si deux sessions écrivent le même fait au même moment sans règle choisie, le comportement par défaut de la plupart des systèmes peut effacer silencieusement une écriture légitime. Cette révision a lu le pilote de fusion de graphify de près, et ce qu’il fait n’est pas ce que « git gère la concurrence » laisse croire.\",\n options: [\n {\n key: \"crdt-append-log\",\n title: \"Écritures concurrentes sûres (CRDT / append-log)\",\n behavior: \"Le substrat garantit qu’écrire depuis plusieurs CLI en parallèle converge sans perte, via un journal append-only ou une structure CRDT.\",\n consequence: \"Seule option qui protège nativement contre un dernier-écrivain-gagnant silencieux. Correction à la révision 1 : ce n’est pas « personne ne le fait » — ctx a été vérifié et n’utilise PAS de CRDT (git ordinaire sur du Markdown ordinaire), tandis que Letta livre bien un verrouillage optimiste avec historique. La façon dont on migrerait vers là est devenue une carte à part : D12.\"\n },\n {\n key: \"namespace-single-writer\",\n title: \"Espace de noms + un seul écrivain actif, lecture multiple\",\n behavior: \"Chaque session écrit sous son propre identifiant (group_id, user_id, run_id) et les autres lisent ; la coordination d’écriture reste implicite — mem0 par identifiant, Zep/Graphiti par group_id, Letta par block_id.\",\n consequence: \"Mode réellement supporté aujourd’hui par la quasi-totalité des systèmes. Mais l’isolation par espace de noms n’est pas une garantie : chez Graphiti, deux add_episode concurrents sur des group_id différents depuis une même instance font atterrir les écritures d’une tâche DANS LE GRAPHE DE L’AUTRE (bug ouvert #1331).\"\n },\n {\n key: \"arbitre-unique\",\n title: \"Un arbitre d’écriture unique, les autres sessions proposent\",\n behavior: \"Une seule session ou un service désigné détient le droit d’écrire ; les autres envoient leurs propositions à cet arbitre plutôt que d’écrire directement.\",\n consequence: \"Supprime la collision par construction, mais introduit un point de contention et de panne unique, et une latence d’aller-retour à chaque écriture émise par une session non-arbitre.\"\n }\n ],\n mechanisms: [\n {\n system: \"graphify — le pilote de fusion\",\n fact: \"C’est une UNION 2-VOIES À CROISSANCE SEULE, pas une fusion 3-voies : l’ancêtre est bien lu, mais uniquement dans un garde-fou — la fusion porte sur [courant, autre]. Conséquence structurelle : LES SUPPRESSIONS NE SE PROPAGENT PAS. Un nœud supprimé sur une branche est RESSUSCITÉ par l’autre (le cas d’école du G-Set, ou d’un 2P-Set sans pierres tombales). Donc « git gère la concurrence » est vrai pour les ajouts et FAUX pour les retraits : une mémoire corrigée ou oubliée sur une branche revient par l’autre.\",\n source: \"recherche §5 — src/merge-driver.ts\"\n },\n {\n system: \"graphify — le pilote de fusion\",\n fact: \"Deux politiques de conflit COHABITENT dans le même fichier : les attributs scalaires de nœuds sont en dernier-écrivain-gagnant avec « theirs » qui gagne (l’ordre de boucle est [courant, autre] et le mergeNode de graphology est un LWW peu profond), tandis que les ARÊTES sont en premier-écrivain-gagnant (« garder la première arête compatible »). Aucune des deux n’est ce qu’on veut pour une correction de mémoire. Les citations sont l’exception délibérée : unionées par identité avec citation_count = max(existant, entrant, taille de l’union).\",\n source: \"recherche §5\"\n },\n {\n system: \"graphify — les plafonds\",\n fact: \"MERGE_MAX_GRAPH_BYTES vaut 52 428 800 octets (50 Mio) et la limite de nœuds 100 000 — or le graph.json suivi par git de ce dépôt pèse 54 039 561 octets. LE PILOTE DE FUSION LÈVERAIT DONC AUJOURD’HUI SUR LE GRAPHE COMMITTÉ DE GRAPHIFY LUI-MÊME. La capture vivante ne peut que le faire grossir.\",\n source: \"recherche §5 / §15.1\"\n },\n {\n system: \"Le corpus\",\n fact: \"Ce que chacun fait vraiment : Hermes = verrou de fichier OS, écriture atomique et détection de dérive (_detect_external_drift() refuse l’écriture et sauvegarde un .bak si le contenu sur disque ne fait pas l’aller-retour du parseur §) — et #56464 a QUAND MÊME perdu des données, dans une seule session, donc pas par concurrence. Letta = verrouillage optimiste plus BlockHistory, le plus solide. Graphiti = pas de verrou, guidage séquentiel, course inter-locataires ouverte. cognee = identifiants déterministes, donc fusion idempotente par identité. ctx = git ordinaire, sans CRDT ni pilote de fusion.\",\n source: \"recherche §9\"\n }\n ],\n recommendation: \"Évaluer combien de sessions écriront réellement en parallèle sur le même fait — mais l’arbitrage n’est plus seulement une question de fréquence : la sémantique de fusion actuelle est déjà PLUS FAIBLE qu’un CRDT (aveugle aux suppressions, deux politiques de conflit), donc y aller plus tard voudra dire défaire, pas ajouter. Et le plafond du pilote est déjà dépassé par le graphe committé.\",\n nextWork: \"Recenser les CLI qui écriront simultanément, estimer la fréquence de collision réelle, et trancher séparément le sort du plafond de 50 Mio du pilote de fusion, déjà franchi aujourd’hui.\"\n },\n {\n key: \"D7\",\n question: \"Quel projet exact recouvre le nom « ctx » cité comme référence ?\",\n whyNow: \"Au moins six projets partagent ce nom avec des mécanismes voisins et des surfaces différentes. Cette révision a cloné et interrogé le candidat retenu, ce qui corrige deux affirmations de la révision 1 et ajoute des chiffres de maturité.\",\n options: [\n {\n key: \"activememory-ctx\",\n title: \"ActiveMemory/ctx (Go)\",\n behavior: \"Binaire Go unique, local-first, fichiers dans .context/ à côté de .git/, sans embeddings, écritures explicites ; l’agent tire un paquet de contexte par allocation SCORÉE sous budget (ctx agent --budget N) et non par troncature. Correction à la révision 1 : il expose un MCP étendu — ctx mcp en stdio, ctx setup qui génère les configs par outil, ctx steering sync qui pousse les règles dans Claude Code/Cursor/Kiro/Cline, un plugin avec hooks PreToolUse/PostToolUse/UserPromptSubmit et .claude/skills/, ctx loop qui génère un script de boucle autonome, ctx watch qui applique les balises <context-update>. Apache-2.0 et CC-BY-4.0, DCO.\",\n consequence: \"Le plus proche d’un outil git-natif, léger et versionné, et il est bien intégrable en MCP — la révision 1 disait le contraire. La réserve est ailleurs : créé le 20/01/2026, dernier push le 23/07/2026, 1 408 commits, 71 étoiles, 14 forks, 8 issues ouvertes, 11 contributeurs mais TRÈS majoritairement une seule identité — facteur de bus ≈ 1. Étiquettes v0.1.0 à v0.8.0, mais dernière version étiquetée le 24/03/2026 alors que main continue d’avancer sans étiquette : « installer une release » n’est pas « installer main ».\"\n },\n {\n key: \"context-llemur\",\n title: \"context-llemur (Python, aussi nommé « ctx »)\",\n behavior: \"Un dossier ctx est lui-même un dépôt git, sans embeddings, expose un serveur MCP et une CLI (ctx save/load/explore/integrate/switch) pensés pour partager le contexte entre plateformes LLM. MIT.\",\n consequence: \"S’intègre nativement en MCP à plusieurs CLI, mais projet plus jeune et plus petit, à valider en profondeur avant d’en dépendre — et la présence d’un MCP n’est plus un facteur différenciant, puisque le candidat Go en a un aussi.\"\n },\n {\n key: \"autre-projet-nomme-ctx\",\n title: \"Un autre projet nommé « ctx » (à confirmer)\",\n behavior: \"D’autres projets partagent ce nom sans forcément correspondre au besoin — ctxrs/ctx (Rust, indexe des logs d’agents existants vers SQLite, rappel en lecture seule, 953 étoiles), context-hub/generator (PHP, générateur de doc de code plus MCP).\",\n consequence: \"L’ambiguïté est réelle (6 projets recensés) — il faut faire confirmer lequel était visé avant d’investir. Le même piège existe pour graphify : une recherche web publique sur « graphify » fait remonter Graphify-Labs/graphify, qui n’est PAS ce dépôt.\"\n }\n ],\n mechanisms: [\n {\n system: \"ctx (ActiveMemory)\",\n fact: \"La thèse de ctx est celle qui donne le plus de poids à votre instinct sur D3 : « l’humain dans la boucle pour la mémoire » figure parmi les six patrons que 17 systèmes indépendants ont, selon elle, découverts séparément. C’est un argument épistémique, pas un mécanisme — mais il situe une porte de revue comme courante, pas idiosyncrasique.\",\n source: \"recherche §7 / §10\"\n }\n ],\n recommendation: \"Confirmer lequel des projets nommés « ctx » était visé, en pesant maintenant la maturité plutôt que la surface : les deux candidats exposent un MCP, et l’écart réel est un facteur de bus proche de 1 et une dernière version étiquetée en mars 2026 alors que main avance encore.\",\n nextWork: \"Faire confirmer le projet visé, puis décider si l’on dépend d’une étiquette de version ou de main, au vu du facteur de bus.\"\n },\n {\n key: \"D8\",\n addedInRevision: \"agent-memory-2026-07-25\",\n parent: [\"D1\", \"D4\"],\n fromAnswer: \"Zep/Graphiti ressemble a ce qu’on fait avec graphify. on pourrait donc utiliser a la fois graphify pour la mémoire d’archive et la capture vivante. (D1) — on repose a maxima sur graphify pour cela (évolution bi temporelle a co-design). (D4)\",\n question: \"Jusqu’où graphify porte-t-il À LA FOIS la mémoire d’archive et la capture vivante — et qu’est-ce que cela exige concrètement ?\",\n whyNow: \"Votre réponse ne choisit pas un archétype de la liste : elle demande une COMPOSITION que le benchmark ne contient pas. Elle est défendable — graphify est effectivement plus proche de la cible que la révision 1 ne le disait. Mais cinq mécanismes précis manquent aujourd’hui, et aucun n’est un détail d’effort : ce sont des propriétés absentes, y compris du port de stockage. Les nommer maintenant est moins coûteux que de les découvrir en implémentant.\",\n options: [\n {\n key: \"graphify-substrat-unique\",\n title: \"Un seul substrat : graphify devient aussi le puits vivant\",\n behavior: \"graphify reçoit ce qui lui manque pour être écrit au fil de l’eau : une écriture par élément (aujourd’hui inexistante), un déclencheur au niveau du tour, une politique d’éviction ou de saillance, une classe d’exception documentée pour une assertion sans localisateur de corpus, et un verrou d’écriture.\",\n consequence: \"Un seul magasin, une seule surface de requête, un seul cycle de vie de revue, une seule chose à sauvegarder. En contrepartie, les cinq mécanismes ci-dessus sont à construire, et l’un d’eux touche l’invariant qui rend graphify digne de confiance : une assertion conversationnelle n’a pas de source_file:page, donc l’invariant de citation devrait gagner une exception explicite — ou les tours devraient devenir des documents de corpus citables.\"\n },\n {\n key: \"deux-couches-un-graphe\",\n title: \"Deux couches, une promotion sur revue\",\n behavior: \"graphify reste l’archive (batch, adossée aux citations, déclenchée par git) ; une couche de capture distincte tient les assertions conversationnelles et n’est projetée dans graphify qu’à la promotion, après revue.\",\n consequence: \"Préserve l’invariant de citation intact et garde l’aller-retour de graphe complet — environ 620 ms et 373 Mo de RSS — hors du chemin par tour. Mais cela fait deux magasins à opérer et une frontière de promotion à définir : exactement la « frontière claire » que l’option hybride de D1 réclamait déjà, sauf qu’ici elle devient un mécanisme, pas une intention.\"\n },\n {\n key: \"capture-hors-graphify\",\n title: \"La capture vivante hors de graphify\",\n behavior: \"La capture vit dans un système de mémoire vivante déjà outillé pour ça (routeur mem0, blocs Letta, fichier borné à la Hermes) et graphify n’est jamais un puits vivant.\",\n consequence: \"On obtient gratuitement un chemin d’écriture éprouvé, une éviction et une écriture par fait. Mais on abandonne l’objectif du substrat unique et, pour la mémoire vivante, le cycle de vie citations plus revue — et on ajoute un second modèle de réconciliation à opérer.\"\n }\n ],\n mechanisms: [\n {\n system: \"graphify — l’écriture\",\n fact: \"IL N’EXISTE AUCUN UPSERT PAR ÉLÉMENT, nulle part : ni dans le chemin fichier, ni sur le port GraphStore, dont la seule écriture est pushGraph d’un graphe complet. Tout ce qui écrit aujourd’hui réécrit le graphe entier, à environ 620 ms et 373 Mo de RSS à la taille actuelle.\",\n source: \"recherche §4(1) / §8 — src/storage/types.ts:203-260\"\n },\n {\n system: \"graphify — le déclencheur\",\n fact: \"Les déclencheurs d’écriture sont de forme GIT, pas de forme TOUR : post-commit, post-checkout, post-merge et post-rewrite écrivent .graphify/needs_update, exportent GRAPHIFY_CHANGED et lancent hook-rebuild en détaché. AUCUN hook PreCompact, SessionEnd ou Stop n’existe où que ce soit dans graphify. L’adaptateur de conversations SAIT parser turn et compaction, mais c’est un scanner de LECTURE à la demande : rien ne le déclenche en fin de tour. À noter aussi : l’intégration Codex est un hook-check volontairement inerte, et l’intégration Claude est une CONSIGNE dans AGENTS.md — donc de la conformité de modèle, pas une garantie de harnais.\",\n source: \"recherche §4(2) — src/hooks.ts\"\n },\n {\n system: \"graphify — l’invariant de citation\",\n fact: \"C’est le point le plus structurel, et il n’est pas un problème d’effort : une assertion conversationnelle comme « l’utilisateur préfère la documentation en français » N’A PAS DE LOCALISATEUR DE CORPUS — pas de source_file:page:section:paragraph_id. L’invariant de citation de graphify n’a donc AUCUNE réponse pour elle. Deux issues seulement : une classe d’exception documentée avec sa propre base d’assertion et son propre statut, ou faire des tours des documents de corpus citables. Relâcher l’invariant en silence éroderait précisément la propriété qui rend graphify fiable comme archive.\",\n source: \"recherche §4(3) / §15.4\"\n },\n {\n system: \"graphify — l’éviction\",\n fact: \"IL N’Y EN A AUCUNE : pas de décroissance, pas d’oubli, pas de consolidation forcée par un plafond — seulement GRAPH_JSON_MAX_BYTES à 512 Mio et un semantic-cleanup. Or TOUS les systèmes du corpus qui ont survécu à une capture continue en ont une. L’issue Hermes #66654 (« pollution de mémoire et accumulation périmée… aucun mécanisme de nettoyage ») est exactement ce à quoi ressemble son absence.\",\n source: \"recherche §4(5)\"\n },\n {\n system: \"graphify — les écrivains concurrents\",\n fact: \"Aucun fichier de verrou n’a été trouvé dans le chemin d’écriture. Combiné au pilote de fusion aveugle aux suppressions de la carte D6, cela signifie qu’une capture vivante multi-CLI n’a aujourd’hui ni exclusion à l’écriture, ni propagation des retraits.\",\n source: \"recherche §4(4) / §5\"\n },\n {\n system: \"graphify — l’observabilité\",\n fact: \"Leçon généralisée du corpus, et elle vise cette carte : pour un substrat de mémoire, ÉCHOUER FORT à l’écriture et rendre l’état du fournisseur observable comptent plus que le modèle de stockage. needs_update, topology_signature et dirtyWorktree sont les bons instincts — mais RIEN aujourd’hui ne rend BRUYANTE une écriture de mémoire échouée ou sautée.\",\n source: \"recherche §15.6\"\n }\n ],\n unknowns: [\n \"Nous n’avons PAS pu établir qu’un consommateur rejoue le journal de décisions de réconciliation lors d’une reconstruction (extract.ts, pipeline.ts et ontology-reconciliation.ts ont été passés au grep ; seule la surface d’API le lit). Si c’est bien le cas, les décisions acceptées sont enregistrées et affichées mais PAS ré-appliquées — et « écritures soumises à revue » et « graphe régénéré depuis le corpus » ne sont pas connectés. C’est l’inconnue la plus conséquente de tout ce dossier, elle est marquée NON VÉRIFIÉE-CRITIQUE, et elle est tranchable en environ une heure par qui possède ce code.\"\n ],\n recommendation: \"Peser lequel des deux invariants coûte le plus cher à perdre : le localisateur de citation sur chaque fait du graphe, ou le substrat unique. C’est le seul arbitrage de cette carte qui ne se règle pas par de l’effort d’implémentation — les quatre autres manques (upsert, déclencheur, éviction, verrou) sont du travail nommable, celui-là est un choix de propriété.\",\n nextWork: \"Trancher en premier l’inconnue non vérifiée-critique ci-dessus (le journal de décisions est-il rejoué à la reconstruction ?), puis décider du sort d’une assertion sans localisateur — les deux conditionnent D9, D11 et D12.\"\n },\n {\n key: \"D9\",\n addedInRevision: \"agent-memory-2026-07-25\",\n parent: [\"D2\", \"D4\"],\n fromAnswer: \"J’aimerais une approche hybride de graphe entre ontology et bi-temporel.\",\n question: \"Un même graphe à la fois typé par une ontologie ET bi-temporel : que faut-il vraiment ajouter, et où est la dépense réelle ?\",\n whyNow: \"Cette composition n’était pas une option de D2 : les options étaient des archétypes, et vous demandez d’en combiner deux. Un seul système du corpus livre les deux sur le même objet, et la partie chère n’est pas celle qu’on croit — ce n’est pas le champ temporel, c’est ce qui le remplit.\",\n options: [\n {\n key: \"tx-additif-sans-detecteur\",\n title: \"Ajouter le temps de transaction, sans détecteur de contradiction\",\n behavior: \"On ajoute une paire tx/tx_end à côté du t/t_end existant, en miroir de observed_at et ttl déjà présents dans la provenance d’extraction, plus deux colonnes indexées côté postgres.\",\n consequence: \"C’est ADDITIF ET PEU CHER côté écriture, précisément parce que graphify est déjà uni-temporel (t, t_end, t_iso, t_src, recall --as-of, spécification marquée IMPLÉMENTATION PARTIELLE). Mais sans détecteur, rien ne pose jamais invalid_at : les paires restent des MÉTADONNÉES D’AUDIT et non un mécanisme de gestion de mémoire — et « la bi-temporalité comme gestion de mémoire longue » ne se réalise pas.\"\n },\n {\n key: \"detecteur-assertions\",\n title: \"Construire la réconciliation d’assertion\",\n behavior: \"On ajoute un détecteur de contradiction qui pose invalid_at — par exemple une opération de patch supersede_relation — en réutilisant le vocabulaire existant (superseded, previous_status).\",\n consequence: \"C’est le seul chemin où la bi-temporalité gère réellement la mémoire. Mais c’est un ALGORITHME DIFFÉRENT de celui que graphify possède : graphify réconcilie des IDENTITÉS, pas des ASSERTIONS. Et c’est exactement la partie chère de Graphiti, dont le coût mesuré par lecture de code est d’environ 2 + 3E + N appels LLM par épisode, linéaire en nombre d’arêtes.\"\n },\n {\n key: \"graphiti-couche-vivante\",\n title: \"Adopter le seul système qui livre les deux, pour la couche vivante\",\n behavior: \"Graphiti tient la couche vivante : entity_types, edge_types et edge_type_map injectés dans le prompt d’extraction et validés par Pydantic, sur la MÊME EntityEdge qui porte created_at, valid_at, invalid_at et expired_at.\",\n consequence: \"Implémentation fusionnée et éprouvée, sans rien à inventer. Mais il faut un serveur de graphe, un coût LLM linéaire en arêtes, un budget de types plafonné à 10 entités et 10 arêtes (≤ 10 champs, noms d’attributs réservés), et il reste la course inter-locataires ouverte #1331 sur des add_episode concurrents à group_id différents.\"\n }\n ],\n mechanisms: [\n {\n system: \"Qui livre vraiment les deux\",\n fact: \"Graphiti est le seul du corpus : bi-temporel (4 horodatages, vérifié) ET typé par ontologie (Pydantic), sur la même EntityEdge. XTDB v2 est bi-temporel (_valid_from/_to plus _system_from/_to, SQL:2011 FOR VALID_TIME AS OF, opérateurs d’Allen, embarquable, MPL-2.0) mais sans ontologie (sans schéma ; « schéma graduel » en chantier). TerminusDB est typé par ontologie (JSON-LD à saveur OWL/SHACL, monde clos, appliqué à l’écriture) mais n’offre qu’un voyage dans le temps par commit. Datomic est uni-temporel en temps de transaction, le temps de validité étant à modéliser à la main. cognee a une ontologie (appariement flou post-extraction) et des intervalles d’événements, pas de temps de transaction.\",\n source: \"recherche §13\"\n },\n {\n system: \"Graphiti — l’état de la preuve\",\n fact: \"La coexistence a été établie en LISANT LE CODE, pas sur un échantillon officiel : aucun exemple de documentation ne montre une arête typée personnalisée ET ses valid_at/invalid_at ENSEMBLE. C’est le seul précédent de la composition que vous demandez, et sa démonstration documentaire manque — à savoir avant de s’appuyer dessus comme sur un modèle éprouvé.\",\n source: \"recherche §3 / §13\",\n status: \"unverified\"\n },\n {\n system: \"graphify\",\n fact: \"La partie chère, dite franchement : la bi-temporalité n’est utile QUE lorsque quelque chose pose invalid_at. graphify a le vocabulaire et un point d’accroche naturel, mais le détecteur est un travail neuf, et sa nature diffère de la réconciliation d’identité existante.\",\n source: \"recherche §13 / §14.3\"\n },\n {\n system: \"graphify — friction immédiate\",\n fact: \"Deux frictions précèdent le second axe. D’abord une incohérence d’intervalle DÉJÀ présente : la spécification écrit [t, t_end] fermé, le rendeur de scène traite [t, t_end) demi-ouvert — une erreur d’un cran aux bornes de bucket, qu’un second axe multiplierait par quatre. Ensuite queryWindow, le chemin de lecture temporel, n’existe QUE sur le backend postgres.\",\n source: \"recherche §13 / §8 — SPEC_AGENTSTATS_TIMEORIENTED.md:42, src/studio-scene.ts:32-34\"\n },\n {\n system: \"Voie RDF, si elle est envisagée\",\n fact: \"Aucun magasin de triplets courant n’a de sémantique bi-temporelle intégrée. Inflation de triplets du pire au meilleur : la RÉIFICATION (la plus verbeuse, et elle N’ENTRAÎNE PAS le triplet d’origine — donc elle casse le raisonnement sans axiomes supplémentaires), puis la propriété singleton (environ 40 % de triplets en moins qu’en réification, mais inefficace en requête), puis les graphes nommés ou quads (standard), puis RDF-star / RDF 1.2 avec triplets imbriqués (environ 70 % de moins qu’en réification, mais PAS une recommandation finale). OWL-Time fournit un vocabulaire, pas un mécanisme d’attachement. La recherche active sur le sujet s’ouvre elle-même en constatant que les stratégies pratiques « n’ont pas encore été étudiées systématiquement ».\",\n source: \"recherche §13 — doi 10.3390/informatics13040061\"\n }\n ],\n unknowns: [\n \"Aucun échantillon de documentation ne montre, chez Graphiti, une arête typée personnalisée ET ses valid_at/invalid_at ensemble : la coexistence est établie en lisant le code. NON VÉRIFIÉ.\",\n \"La syntaxe littérale d’une requête ponctuelle chez Graphiti est NON VÉRIFIÉE (forme déduite du schéma).\"\n ],\n recommendation: \"Décider si la réconciliation d’ASSERTION entre dans le périmètre AVANT de payer un second axe temporel : sans détecteur qui pose invalid_at, les paires bi-temporelles sont de l’audit, pas de la gestion de mémoire — et c’est cette question, pas le coût des champs, qui décide si la composition demandée délivre ce qu’on en attend.\",\n nextWork: \"Lever d’abord l’incohérence d’intervalle existante, puis prototyper un détecteur de contradiction sur les 3 à 5 scénarios réels de D4 pour mesurer son coût avant de s’engager sur le second axe.\"\n },\n {\n key: \"D10\",\n addedInRevision: \"agent-memory-2026-07-25\",\n parent: [\"D2\"],\n fromAnswer: \"la bi-temporalité pourrait être une forme de gestion de mémoire longue au dela de la journée ou simplement du dépassement de contexte (avec des prehook de compaction, l’idéal ?)\",\n question: \"Qu’est-ce qui DÉCLENCHE une écriture en mémoire longue, sachant qu’« écrire à la compaction » n’existe pas comme primitive ?\",\n whyNow: \"Votre question portait un point d’interrogation — « avec des prehook de compaction, l’idéal ? » — et il faut y répondre par un fait, pas par une intuition : le hook de pré-compaction PEUT bloquer mais ne peut RIEN injecter. La frontière de compaction est un point de VETO, pas un point d’écriture. Le choix du déclencheur reste donc entier, et les candidats réels ne mesurent pas le même signal.\",\n options: [\n {\n key: \"veto-precompact\",\n title: \"Bloquer dans PreCompact, consolider, puis laisser compacter\",\n behavior: \"Le hook PreCompact reçoit session_id, transcript_path, cwd, hook_event_name, trigger et custom_instructions, et peut bloquer (code 2 ou decision: block). On s’en sert pour retarder la compaction le temps d’écrire.\",\n consequence: \"C’est le seul point qui peut RETARDER la perte, et il se déclenche exactement sous la pression de contexte. Mais il ne peut rien réinjecter, il place le travail SYNCHRONEMENT sur le chemin critique de l’humain (au moins environ 620 ms d’aller-retour JSON avant le premier appel LLM), et il consolide ce qui a SURVÉCU au seuil, pas ce qui importait.\"\n },\n {\n key: \"compte-de-tours\",\n title: \"Compte de tours, ou silence débouncé\",\n behavior: \"On écrit tous les N tours (compteur persisté modulo N de Letta) ou après une pause de conversation (ReflectionExecutor de LangMem, une tâche de fond débouncée), ou sur inactivité horloge (temps de sommeil de Letta).\",\n consequence: \"Le plus prévisible du corpus, et hors du chemin critique — aucune dépendance à un hook de fournisseur. Mais ce signal n’est pas aligné sur la pression de contexte : un tour très long peut perdre de la matière avant que le compteur ne tombe.\"\n },\n {\n key: \"commit-git\",\n title: \"Le commit git — le déclencheur actuel de graphify\",\n behavior: \"post-commit, post-checkout, post-merge et post-rewrite écrivent needs_update, exportent GRAPHIFY_CHANGED et lancent une reconstruction détachée. C’est déjà câblé et éprouvé.\",\n consequence: \"C’est le SEUL déclencheur du corpus qui coïncide avec une unité d’intention DÉCLARÉE PAR UN HUMAIN — un commit dit « voilà un tout cohérent ». Mais une session peut brûler tout son contexte sans un seul commit : ce déclencheur peut ne jamais se produire quand il faudrait.\"\n },\n {\n key: \"frontiere-de-phase\",\n title: \"La frontière de phase (compaction intentionnelle fréquente)\",\n behavior: \"On compacte PROACTIVEMENT à 40–60 % d’utilisation, aux frontières de phase (après recherche, après plan, après implémentation), en écrivant des artefacts durables du type research.md, plan.md, progress.md.\",\n consequence: \"C’est de l’art antérieur nommé, avec un argument précis : les frontières de phase sont « les signaux de compaction les plus forts parce qu’elles représentent des points naturels de consolidation de l’information ». Mais cela demande à l’agent de DÉCLARER ses phases : c’est une discipline de harnais, pas un mécanisme que le substrat peut imposer.\"\n }\n ],\n mechanisms: [\n {\n system: \"Claude Code — les hooks\",\n fact: 'Vérifié : PreCompact (matcher manual|auto) PEUT bloquer mais NE PEUT PAS injecter de contexte et ne peut pas modifier le résumé. PostCompact ne peut NI bloquer NI injecter. En revanche SessionStart porte source: \"compact\" et PEUT injecter (hookSpecificOutput.additionalContext ou initialUserMessage). Les raisons de SessionEnd n’incluent PAS la compaction. Conclusion : la frontière de compaction est un point de VETO, pas un point d’injection de contenu — et le retour se fait au démarrage de la session suivante, pas à la compaction.',\n source: \"recherche §6\"\n },\n {\n system: \"API Anthropic\",\n fact: 'clear_tool_uses_20250919 est appliqué CÔTÉ SERVEUR : le développeur ne fait qu’INSPECTER context_management.applied_edits[] après coup. Aucun callback, aucun webhook. Mais il existe une incitation EN BANDE, adressée au MODÈLE : « Claude reçoit un avertissement automatique de préserver l’information importante », plus la consigne de l’outil memory (« PRÉSUMEZ L’INTERRUPTION… vous risquez de perdre tout progrès non enregistré dans votre répertoire de mémoire »). Autrement dit, écrire-avant-d’effacer a été conçu comme un PATRON DE PROMPT, pas comme un hook de développeur. Le compact_20260112 côté serveur émet un bloc de contenu compaction et un stop_reason \"compaction\", mais seulement avec pause_after_compaction: true.',\n source: \"recherche §6\"\n },\n {\n system: \"Les autres harnais\",\n fact: \"AUCUN autre harnais ne documente un hook de persistance pré-compaction adressable par le développeur — Codex CLI, Cline, Gemini CLI et opencode ont tous été vérifiés. Le SummarizationNode de LangGraph n’écrit explicitement PAS dans le magasin long terme. Le seul hook de compaction de premier ordre trouvé dans tout le corpus est on_pre_compress(messages) -> str, sur l’ABC de fournisseur de Hermes.\",\n source: \"recherche §6 / §1 — agent/memory_provider.py\"\n },\n {\n system: \"La critique la plus tranchante\",\n fact: \"« Résumer puis jeter… est techniquement de l’éviction, mais c’est une COMPACTION AVEC PERTE plutôt qu’une CONSOLIDATION. » Déclencher la consolidation à la frontière d’éviction consolide CE QUI A SURVÉCU, pas ce qui importait : ce qui n’a jamais été consolidé est simplement perdu, et a peut-être déjà été élagué. S’y ajoutent une perte cumulative sur compactions répétées et un effet de « lexique fantôme » (le vocabulaire que le modèle avait construit disparaît). Le risque miroir est la double écriture d’un cycle à l’autre, ce qui EXIGE des écritures idempotentes clés par le contenu — graphify a déjà la clé d’identité de citation source_file|page|section|paragraph_id, cognee son id_for().\",\n source: \"recherche §6\"\n },\n {\n system: \"Les déclencheurs disponibles\",\n fact: \"Ils sont tous réels et mesurent tous un signal DIFFÉRENT : pression de tokens (hooks de compaction), silence (débounce LangMem), inactivité horloge (temps de sommeil Letta), COMPTE DE TOURS (modulo N de Letta — le plus prévisible), capacité (plafond dur de Hermes, FIFO de MemoryOS), et COMMIT GIT (graphify aujourd’hui — le seul qui coïncide avec une unité d’intention déclarée par un humain).\",\n source: \"recherche §6 / §14.2\"\n }\n ],\n unknowns: [\n \"La table de hooks élargie (environ 29 événements) provient d’une seule récupération non littérale : seuls PreCompact, PostCompact, SessionStart et SessionEnd ont été re-vérifiés mot pour mot. Le reste de la table est NON VÉRIFIÉ.\",\n \"La valeur par défaut numérique de la fréquence du travail de fond de Letta est NON VÉRIFIÉE (la recherche suggère 5, sans confirmation en code).\"\n ],\n recommendation: \"Trancher si le déclencheur doit suivre la PRESSION DE CONTEXTE — et alors payer le chemin critique, en sachant qu’on consolidera ce qui a survécu au seuil — ou une UNITÉ D’INTENTION DÉCLARÉE, et alors accepter qu’il puisse ne jamais se déclencher. Le fait qui rend l’arbitrage nécessaire est simple : « écrire la mémoire à la compaction » n’existe pas comme primitive, seul le veto existe, et le retour d’information ne peut se faire qu’au démarrage de la session suivante.\",\n nextWork: \"Mesurer, sur des sessions réelles de cet espace de travail, à quelle fréquence un commit git tombe par rapport à une compaction : c’est ce rapport qui dit si le déclencheur d’intention déclarée suffit ou s’il faut lui adjoindre un compteur de tours.\"\n },\n {\n key: \"D11\",\n addedInRevision: \"agent-memory-2026-07-25\",\n parent: [\"D3\"],\n fromAnswer: \"j’imagine des sessions via h2a focus pour la révision de mémoires.\",\n question: \"Quel est le statut d’une mémoire capturée mais pas encore revue — et que se passe-t-il quand la revue prend du retard sur la capture ?\",\n whyNow: \"Vous avez nommé une SURFACE de revue (des sessions Focus via h2a), ce qui est cohérent avec la porte choisie en D3. Mais la surface ne dit pas la sémantique, et c’est là qu’un mécanisme précis se retourne : la file de candidats est estampillée par empreinte de graphe, si bien qu’une reconstruction survenue entre la capture et la revue INVALIDE les candidats en attente. Un mécanisme conçu pour protéger la correction se met alors à affamer la revue.\",\n options: [\n {\n key: \"file-binaire-invisible\",\n title: \"En attente = invisible pour l’agent jusqu’à approbation\",\n behavior: \"La forme de toutes les portes réellement livrées : mise en attente puis approbation, binaire. Chez Hermes tout ce qui n’est pas interactif est mis en attente dans pending/memory/<id>.json ; les skills mettent toujours en attente ; les écritures automatiques sont étiquetées [auto].\",\n consequence: \"La seule forme qui ait un précédent livré, et la réponse prudente au vu des 91 % de pollution promue en exécution d’arrière-plan. Mais tout ce qui n’est pas revu est indisponible : la latence de revue devient directement la latence de la mémoire — et sous capture continue, l’estampille d’empreinte peut invalider des candidats avant qu’un humain les ait vus.\"\n },\n {\n key: \"lecture-ponderee\",\n title: \"L’agent lit les faits en attente, à un poids de confiance moindre\",\n behavior: \"Le substrat rend les faits non approuvés au rappel, mais dépréciés — la confiance devient continue au lieu d’être binaire.\",\n consequence: \"Le retard de revue cesse de bloquer le rappel. Mais AUCUN système étudié ne livre cela : c’est de la conception de mécanisme neuve, sans art antérieur. Et c’est exactement le chemin de lecture qu’exploite la voie de pollution mesurée par MissClaw.\"\n },\n {\n key: \"reduire-la-surface\",\n title: \"Garder la porte binaire, mais réduire ce qui atteint l’humain\",\n behavior: \"Des validateurs automatiques s’accordent → promotion automatique ; ils divergent → signalement pour revue humaine. C’est la réponse de SCICERO à l’arriéré.\",\n consequence: \"C’est la réponse de la littérature elle-même (jusqu’à 80 % de précision et 82 % de F1 gagnés « avec un effort manuel minimal ») et elle garde la file à taille humaine. Mais elle exige au moins deux validateurs indépendants, et le résultat de GovMem sur traces réelles était qu’AUCUN chemin de promotion automatique n’était sûr : le bras « promotion automatique » est donc la moitié risquée.\"\n }\n ],\n mechanisms: [\n {\n system: \"graphify — l’arithmétique de la file\",\n fact: \"Le cycle de vie de revue a été conçu pour des candidats par LOTS. La capture vivante INVERSE le rapport : capture continue d’un côté, revue humaine par à-coups de l’autre. Comme la file est estampillée graph_hash, profile_hash et generated_at, une reconstruction entre capture et revue rend les candidats en attente périmés — donc un relecteur lent peut faire face à une file DÉFINITIVEMENT périmée. C’est le mécanisme même qui protège la correction qui se met à affamer la revue. dirtyWorktree est déjà suivi dans le contexte du patch.\",\n source: \"recherche §7 / §15.5\"\n },\n {\n system: \"Le corpus entier\",\n fact: \"Toutes les portes réelles sont BINAIRES. Celle de Zep est graduée (confiance par métadonnées d’ingestion, verified=true/false) mais laisse à l’APPLICATION le soin de choisir la logique ET/OU. Aucun système n’implémente un poids de confiance continu qui DÉPRÉCIE au lieu d’EXCLURE à la lecture : la confiance graduée n’a pas d’art antérieur livré.\",\n source: \"recherche §7\"\n },\n {\n system: \"MissClaw / GovMem\",\n fact: \"Pourquoi le choix a des conséquences matérielles POUR UNE BOUCLE AUTONOME précisément : la sauvegarde de mémoire routinière en exécution d’arrière-plan promeut la pollution en mémoire permanente jusqu’à 91 %, sans injection de prompt, et cela persiste d’une session à l’autre ; et sur traces réelles d’agents de code, « aucune n’est sûre pour une promotion automatique ». Le choix entre « l’agent ne peut pas voir la mémoire non revue » et « l’agent la voit dépréciée » est donc un choix de sûreté, pas de confort.\",\n source: \"recherche §7 / §14.5\"\n },\n {\n system: \"Hermes — la forme de la porte\",\n fact: \"Détail de conception utile pour dimensionner une session de revue : il n’existe AUCUN état « refuser d’emblée » dans la porte de Hermes — elle ne fait que RETARDER. Et elle est à false par défaut, donc la version livrée par défaut est l’écriture automatique.\",\n source: \"recherche §1 / §7 — tools/write_approval.py:58-67\"\n }\n ],\n unknowns: [\n \"Le corpus ne dit pas si la file en attente devrait elle aussi DÉCROÎTRE : sous capture soumise à revue la question se dédouble, et personne ne l’a résolue. Si l’arriéré ne décroît pas, il persiste contre un graphe déjà reconstruit sous lui — et l’estampille d’empreinte dit qu’il sera invalidé.\",\n \"Nous n’avons pas pu établir de précédent pour une confiance graduée : l’option correspondante est une conception neuve, à assumer comme telle.\"\n ],\n recommendation: \"Peser ce qui est le plus coûteux ici : qu’une mémoire vraie reste inaccessible parce que la revue est en retard, ou qu’une mémoire fausse soit lisible parce qu’elle est seulement dépréciée. Et intégrer que la réponse de la littérature à l’arriéré n’est pas de relire plus vite mais de réduire la surface à relire — ce qui déplace la question vers « combien de validateurs automatiques indépendants a-t-on ? ».\",\n nextWork: \"Décider si les candidats en attente doivent survivre à une reconstruction (les ré-ancrer) ou être invalidés, avant de dimensionner une session de revue Focus : c’est ce choix qui détermine si une session de revue hebdomadaire est viable ou structurellement en retard.\"\n },\n {\n key: \"D12\",\n addedInRevision: \"agent-memory-2026-07-25\",\n parent: [\"D6\"],\n fromAnswer: \"j hesite entre 1 et 2. peut être 2 avec opt in 1 dans un deuxieme temps\",\n question: \"Si l’on part en mono-écrivain pour aller vers des écritures concurrentes sûres ensuite, quelle est la migration — et laquelle des trois cibles est la moins chère ?\",\n whyNow: \"Votre sélection disait CRDT/append-log et votre note disait l’inverse : peut-être mono-écrivain d’abord, avec l’autre en option ensuite. La note est la position la plus réfléchie, donc D6 doit être traitée comme OUVERTE — et la vraie question n’est pas laquelle des deux, mais ce que « ensuite » coûte. Trois faits chiffrés changent la réponse, et l’un d’eux est une inconnue que nous n’avons pas pu lever.\",\n options: [\n {\n key: \"mono-ecrivain-puis-optin\",\n title: \"Mono-écrivain maintenant, écritures sûres en option ensuite\",\n behavior: \"Espace de noms plus un seul écrivain actif aujourd’hui, la convergence sans perte étant ajoutée plus tard, en opt-in — exactement votre seconde intention.\",\n consequence: \"C’est ce que la quasi-totalité des systèmes du corpus supportent réellement aujourd’hui, et cela diffère la dépense. Mais « ensuite » n’est pas neutre : la sémantique de fusion actuelle vous engage DÉJÀ sur quelque chose de PLUS FAIBLE qu’un CRDT (union 2-voies aveugle aux suppressions, scalaires de nœuds en LWW-« theirs », arêtes en premier-écrivain-gagnant), donc y aller plus tard consistera à DÉFAIRE, pas à ajouter. Et le pilote lèverait aujourd’hui sur le graphe committé de ce dépôt (54 039 561 octets contre un plafond de 52 428 800).\"\n },\n {\n key: \"journal-plus-fold\",\n title: \"Le journal fait foi, le graphe est une projection\",\n behavior: \"Le journal append-only devient la source de vérité et le graphe une projection déterministe, rejouable, forkable à n’importe quel événement. Art antérieur nommé : « The Log is the Agent », journal append-only comme source de vérité, graphe comme projection déterministe, fork bon marché.\",\n consequence: \"C’est la cible dont graphify est DÉJÀ LE PLUS PROCHE : trois journaux append-only existent (.graphify/memory/*.md, les patches appliqués et rejetés en JSONL, et le journal de décisions autoritaire), graph.json est déjà un artefact dérivé avec topology_signature, needs_update, built_from_commit et un tri déterministe, et une primitive d’idempotence existe déjà (la clé d’identité de citation). Quatre pièces manquent, toutes nommables : un FOLD qui rejoue le journal de décisions au build, des événements de pierre tombale ou de supersession pour que les suppressions survivent à une union, un mécanisme d’instantané pour borner le rejeu, et une règle pour les opérations non commutatives.\"\n },\n {\n key: \"crdt-sur-le-document\",\n title: \"Un CRDT JSON greffé sur le document de graphe\",\n behavior: \"On adopte Automerge ou Yjs sur le document, ou un CRDT nativement graphe comme GUN.\",\n consequence: \"Convergence sans coordination. Mais Automerge et Yjs sont des CRDT JSON SANS primitive de graphe, donc SANS intégrité référentielle automatique des arêtes ; la sémantique de suppression est un choix formel (Isolate-Delete, où les arêtes pendantes subsistent isolées, contre Detach-Delete, en cascade, qui exige une livraison causale), et un retrait d’arête concurrent d’un retrait de nœud peut RESSUSCITER les arêtes sortantes d’un nœud supprimé sous une règle naïve. Surtout, c’est la TAILLE DE L’HISTORIQUE D’OPÉRATIONS, pas celle des données, qui tue.\"\n }\n ],\n mechanisms: [\n {\n system: \"Automerge — les chiffres\",\n fact: \"Automerge 2.0 dépliait l’historique d’opérations non compressé au chargement : sur un gros document réel (Moby Dick avec tout son historique) cela a pris 17 HEURES et a quand même échoué. La 3.0 garde l’encodage colonnaire compressé vivant : 9 secondes, mémoire de pointe 700 Mo ramenée à 1,3 Mo, soit environ 500×. Le colonnaire coûte environ 1,1 octet par opération contre environ 55 en naïf, soit environ 50×. IMPLICATION DIRECTE POUR GRAPHIFY : un flux de travail qui RÉGÉNÈRE de façon répétée un gros graphe dérivé gonflerait l’historique d’opérations exactement de la manière pathologique — chaque reconstruction devient de la métadonnée CRDT permanente, sauf si une compaction est conçue exprès.\",\n source: \"recherche §9\"\n },\n {\n system: \"La sémantique de suppression\",\n fact: \"Le choix est formalisé, pas affaire de goût : Isolate-Delete (l’ajout gagne, les arêtes pendantes subsistent isolées) contre Detach-Delete (cascade, nécessite une livraison causale) — et l’article signale qu’un retrait d’arête concurrent d’un retrait de nœud peut ressusciter les arêtes sortantes d’un nœud retiré sous une mise à jour naïve « update-wins ».\",\n source: \"recherche §9 — arXiv:2605.31569\"\n },\n {\n system: \"Le piège du build non déterministe\",\n fact: \"Un mode de défaillance pour lequel AUCUN art antérieur n’a été trouvé : « résoudre les conflits dans la source, régénérer le fichier dérivé » suppose un BUILD DÉTERMINISTE. Avec un LLM dans l’extraction, la description ou l’étiquetage, la même source produit un graphe DIFFÉRENT d’une régénération à l’autre, ce qui sape la propriété de sûreté centrale du patron « pilote de fusion sur artefact dérivé ». graphify y échappe en partie — son chemin AST est déterministe et sans LLM — mais une couche de mémoire à capture vivante se situe du côté NON déterministe.\",\n source: \"recherche §9\"\n },\n {\n system: \"graphify — ce qui existe déjà\",\n fact: \"La réconciliation est DÉJÀ un journal append-only qui NE MUTE PAS le graphe : applyOntologyPatch() ajoute au journal de décisions autoritaire en JSONL plus les patches appliqués et rejetés, et écrit needs_update. Dry-run par défaut, chemin de décisions mis en prison, file estampillée pour que la péremption soit détectable. Autrement dit, la moitié « journal » du patron est déjà là ; c’est la moitié « fold » qui manque.\",\n source: \"recherche §4 — src/ontology-patch.ts:578-620\"\n }\n ],\n unknowns: [\n \"L’INCONNUE LA PLUS CONSÉQUENTE DE CE DOSSIER, et nous ne l’avons pas levée : AUCUN consommateur ne rejoue le journal de décisions de réconciliation pendant une reconstruction (extract.ts, pipeline.ts et ontology-reconciliation.ts ont été passés au grep ; seule la surface d’API lit ce journal). Si cela se confirme, les décisions acceptées sont enregistrées et affichées mais PAS ré-appliquées, la conception journal→fold a un chaînon manquant, et les options 1 et 2 de cette carte ne sont PAS à la même distance. Marquée NON VÉRIFIÉE-CRITIQUE ; tranchable en environ une heure par qui possède ce code ; elle change D8, D11 et cette carte.\",\n \"Les chiffres de croissance de journal et de latence de rejeu de l’art antérieur « The Log is the Agent » sont NON VÉRIFIÉS : seul le résumé a été lu, pas de mesure reproduite.\"\n ],\n recommendation: \"Avant de choisir entre différer et construire, faire trancher l’inconnue ci-dessus : si le journal de décisions n’est PAS rejoué à la reconstruction, alors « journal plus fold » n’est pas une cible lointaine mais la réparation d’un chaînon déjà manquant, et « mono-écrivain d’abord » ne diffère pas une dépense, il laisse une incohérence en place. C’est le seul élément qui réordonne réellement les options de cette carte.\",\n nextWork: \"Poser la question au propriétaire du code de reconstruction de graphify (une heure), puis, selon la réponse, spécifier soit le fold manquant, soit les événements de pierre tombale et l’instantané qui rendraient le journal autoritaire.\"\n },\n {\n key: \"D13\",\n addedInRevision: \"agent-memory-2026-07-25\",\n question: \"Ce dossier SUPERSÈDE-t-il, ou ÉTEND-il, la conception locale antérieure qui traite déjà exactement cette question ?\",\n whyNow: \"Personne n’a soulevé cette carte, et c’est peut-être la plus importante. Il existe une conception locale substantielle sur ce sujet précis, datée du 23/06/2026, dans /home/antoinefa/src/graphify/.graphify/scratch/ — répertoire IGNORÉ PAR GIT, donc invisible, ce qui explique que la révision 1 ne l’ait jamais citée. Elle contient un germe d’étude consensuelle avec six forks F1 à F6, une conception de recodage natif, trois investigations Hermes à trois bras, et un INVARIANT DE CONFIANCE À TROIS NIVEAUX. Or vos réponses D1, D4 et D5 sont proches de RE-DÉCIDER F1, F5 et F4 — sans les parties qui possédaient ces appels. Trancher ce statut avant d’aller plus loin évite de reprendre à zéro un consensus déjà obtenu, ou au contraire de rester lié par un document que personne ne peut lire.\",\n options: [\n {\n key: \"superseder\",\n title: \"Ce dossier supersède le germe\",\n behavior: \"Le dossier devient l’autorité ; le germe et sa conception compagnon passent en arrière-plan historique.\",\n consequence: \"Une seule surface de décision, aucun travail de réconciliation. Mais cela écarte un consensus à trois bras, une table d’OWNERSHIP par composant et un invariant de confiance obtenus avec l’architecte et le pair h2a dans la boucle — et cela re-décide F1, F4 et F5 sans les parties qui en possédaient l’appel. Le germe attribue explicitement F2 et F3 au pair h2a, dont le consentement y est noté comme requis.\"\n },\n {\n key: \"etendre\",\n title: \"Le germe reste liant, ce dossier en est la ronde 2\",\n behavior: \"Les forks du germe et son invariant de confiance restent en vigueur ; les réponses de ce dossier doivent être réconciliées contre F1, F4 et F5, et contre sa note de périmètre.\",\n consequence: \"On garde l’invariant de confiance et la table d’ownership, et la bonne nouvelle est que vos réponses ATTERRISSENT largement sur les positions déjà posées : D5 rejoint F4 (« le port de backend GraphStore EST le port de mémoire externe »), D3 rejoint F5, D1 rejoint F1 (étendre le schéma en place). Mais on hérite aussi de ses points ouverts — F6 bloque le périmètre final — et de sa frontière de périmètre, qui est le vrai obstacle : la spécification de graphify enregistre que la mémoire autorisée et la sémantique de persona/connaissance h2a « restent non approuvées et hors périmètre », ce que la réponse D1 franchirait.\"\n },\n {\n key: \"fusionner-en-un-document\",\n title: \"Fusionner les deux en un seul document, et le sortir du scratch\",\n behavior: \"On fond le germe, la conception native et ce dossier en une étude committée, déplacée hors d’un répertoire ignoré par git.\",\n consequence: \"Rend la conception antérieure visible et relisible — aujourd’hui elle ne voyage avec personne, et c’est précisément pour cela que ce dossier l’a ignorée pendant une révision entière. Mais c’est un vrai travail éditorial, et cela force à trancher immédiatement qui gagne partout où les deux documents divergent.\"\n }\n ],\n mechanisms: [\n {\n system: \"Le germe — les forks\",\n fact: \"H2A_MEMORY_STUDY_SEED.md (23/06/2026, statut « germe DRAFT, le principal a validé le lancement de l’étude ») pose six forks avec, pour chacun, une inclinaison et un PROPRIÉTAIRE DE L’APPEL. F1 schéma de mémoire : étendre project-graph/v1 en place, en ajoutant des types de nœuds MemoryNote, UserModel, Persona et Skill, contre un schéma frère agent-memory/v1 — inclinaison : étendre en place, appel à graphify, signé par l’architecte. F2 placement de la persona : liée au BINDING instance × rôle × slot, contre l’instance pérenne, contre un artefact Persona autonome — inclinaison : le BINDING, appel au pair h2a. F3 rôles de code comme rôles h2a de premier ordre (ce qui étendrait le vocabulaire FIGÉ, risque load-bearing) contre des rôles locaux au harnais liés sur AGENTS — inclinaison : locaux au harnais, appel conjoint pair h2a et harnais. F4 port de mémoire externe : le port de backend GraphStore EST le port, sans nouvelle abstraction, plus le choix d’un fournisseur d’embeddings FR (fork E5 ouvert : Cohere, Ollama ou pgvector natif) — appel à graphify. F5 porte de mémoire autorisée : graphify remember en écriture automatique contre approbation humaine ou par rôle — inclinaison : GATÉE pour UserModel, automatique avec supersession pour MemoryNote, appel conjoint graphify et principal. F6 : le « stp » listé par le principal est-il un 5e composant sentropic ou « s’il te plaît » ? OUVERT, bloque le périmètre final.\",\n source: \"lu à la source — /home/antoinefa/src/graphify/.graphify/scratch/H2A_MEMORY_STUDY_SEED.md §2\"\n },\n {\n system: \"Le germe — l’invariant de confiance\",\n fact: \"L’invariant que toutes les parties s’engagent à tenir, cité mot pour mot : la mémoire agent-stats est GAGNÉE (vérité de terrain), les MemoryNotes sont ASSERTÉES (gatées), l’identité et la persona h2a sont SIGNÉES (Ed25519). « Un substrat, trois niveaux de confiance — ne pas les confondre. » C’est plus strict que tout ce que ce dossier a proposé jusqu’ici, et c’est directement en tension avec la composition à substrat unique de D8 : la seule réponse qui pourrait CONFONDRE les trois niveaux est celle-là.\",\n source: \"lu à la source — H2A_MEMORY_STUDY_SEED.md §3\"\n },\n {\n system: \"Le germe — le périmètre et l’ownership\",\n fact: \"Deux bornes que ce dossier doit regarder en face. D’abord la table d’ownership : graphify possède le SUBSTRAT (et les appels F1, F4, F5), agent-stats le RELAIS transcript→graphe, h2a les RÔLES ET LA PERSONA (F2, F3 — noté load-bearing, « le pair h2a doit consentir »), le harnais les RÔLES DE CODE stables. Ensuite le premier incrément déjà arrêté : Increment 0 = écriture de MemoryNote plus rappel scopé par rôle, en étendant project-graph/v1 en place, SANS persona, pour que F2 et F3 ne le bloquent pas. Le germe précise aussi, en toutes lettres, que l’on n’installe, ne dépend et n’intègre PAS Nous Hermes : « Hermes est une RÉFÉRENCE SEULEMENT » — et il OUTREPASSE explicitement la recommandation des trois investigations d’ingérer Hermes comme 4e hôte agent-stats.\",\n source: \"lu à la source — H2A_MEMORY_STUDY_SEED.md §1, §3, §4 et NATIVE_AGENT_MEMORY_DESIGN.md\"\n },\n {\n system: \"La frontière de périmètre que D1 franchirait\",\n fact: \"Vérifié mot pour mot dans la spécification de graphify, dont l’état est « IMPLÉMENTATION PARTIELLE » : « T7 projette dans le graphe agent-stats des preuves de coordination h2a strictement locales ; la mémoire autorisée et la sémantique de persona/connaissance h2a restent NON APPROUVÉES ET HORS PÉRIMÈTRE. » Or D1 et D8 portent précisément sur de la mémoire autorisée. Le statut de cette borne n’est pas une formalité : soit elle est levée explicitement, soit la composition demandée est hors périmètre du document qui la régit.\",\n source: \"lu à la source — /home/antoinefa/src/graphify/spec/SPEC_AGENTSTATS_TIMEORIENTED.md:12-14\"\n },\n {\n system: \"La conception compagnon\",\n fact: \"NATIVE_AGENT_MEMORY_DESIGN.md détaille six capacités avec un effort chiffré : mémoire autorisée persistante (effort M — « graphify a la mémoire en LECTURE (transcripts) mais aucun chemin d’écriture autorisée par l’agent »), rappel inter-sessions (S, largement déjà bâti), lignée de session avec un discriminant reason valant compaction, subagent ou resume (S–M), persona/SOUL (L, la plus grosse surface neuve et le fork bloquant), mémoire procédurale et skills (M), port de mémoire externe (S, « le port existe déjà »). Elle fixe aussi le schéma du substrat : graphify.agent-stats.project-graph/v1.\",\n source: \"lu à la source — /home/antoinefa/src/graphify/.graphify/scratch/NATIVE_AGENT_MEMORY_DESIGN.md §1\"\n }\n ],\n unknowns: [\n \"Nous ne savons pas si le germe a jamais été ENVOYÉ : il décrit une procédure d’envoi h2a et précise « ce germe n’envoie PAS ». Son statut réel — proposition jamais transmise, ou étude effectivement ouverte avec l’architecte et le pair h2a — n’a pas pu être établi depuis ce dépôt, et il change qui doit être consulté.\",\n \"F6 (« stp » : 5e composant ou « s’il te plaît » ?) est resté OUVERT depuis le 23/06/2026 et le germe le déclare bloquant pour le périmètre final. Nous ne pouvons pas le lever à votre place.\"\n ],\n recommendation: \"Le critère est un invariant, pas une préférence : peser si l’invariant à trois niveaux du germe — « un substrat, trois niveaux de confiance, ne pas les confondre » — survit aux réponses de ce dossier. La composition à substrat unique de D8 est la seule qui pourrait les confondre ; si l’invariant doit tenir, il contraint D8 et D11 avant qu’elles ne soient tranchées. Et deux appels de ce germe (F2, F3) ne sont pas les vôtres seuls : le pair h2a y est noté comme devant consentir.\",\n nextWork: \"Établir le statut réel du germe (envoyé ou non, étude ouverte ou non), puis trancher explicitement la borne de périmètre de la spécification — mémoire autorisée non approuvée et hors périmètre — avant d’engager D8, car c’est elle qui la franchit.\"\n }\n ]\n};\nconst agentMemoryMatrix = {\n caption: \"État de l’art — matrice de comparaison des substrats mémoire (corrigée en révision 2)\",\n legend: \"Légende — Stockage : FILE/VEC/KG/HYB. Récupération : sem(antique)/graph/temporal/kw(mot-clé)/nav(igation)/hybrid. Réconciliation : fusion d’entités + conflit/temporalité. Écriture : AUTO (extraction automatique) / SELF (auto-édition par l’agent) / EXPL (explicite/curée) / BUILD (batch, opérateur). RAM : L = léger/embarqué, M = moyen, H = lourd (serveur+BD). Adéquation = vis-à-vis de la cible (agent persistant, multi-CLI, local-first). Les cellules corrigées en révision 2 sont celles de Hermes (plafonds en caractères, licence MIT), Letta (verrouillage optimiste, pas dernier-écrivain-gagnant), ctx (MCP étendu, git ordinaire sans CRDT), graphify (ingestion de conversations et rappel ponctuel déjà livrés), cognee (intervalles d’événements, non bi-temporel) et Zep/Graphiti (coût LLM linéaire en arêtes).\",\n columns: [\n { key: \"approche\", label: \"Approche\" },\n { key: \"stockage\", label: \"Stockage\" },\n { key: \"recuperation\", label: \"Récupération\" },\n { key: \"reconciliation\", label: \"Réconciliation / temporalité\" },\n { key: \"ecriture\", label: \"Écriture\" },\n { key: \"partage\", label: \"Partage multi-CLI\" },\n { key: \"hebergement\", label: \"Auto-hébergement / RAM\" },\n { key: \"licence\", label: \"Licence\" },\n { key: \"adequation\", label: \"Adéquation\" }\n ],\n rows: [\n {\n approche: \"ctx (ActiveMemory)\",\n stockage: \"FILE+git\",\n recuperation: \"allocation scorée sous budget, sans vecteurs\",\n reconciliation: \"git ordinaire, AUCUN CRDT ni pilote de fusion ; pas de fusion d’entités\",\n ecriture: \"EXPL\",\n partage: \"MCP étendu (ctx mcp, steering sync, hooks, skills) + tout lecteur de fichiers\",\n hebergement: \"Oui / L (Go)\",\n licence: \"Apache-2.0 + CC-BY-4.0\",\n adequation: \"Élevée — mais facteur de bus ≈ 1\"\n },\n {\n approche: \"ctx (context-llemur)\",\n stockage: \"FILE+git\",\n recuperation: \"structurelle, sans vecteurs\",\n reconciliation: \"aucune (curée)\",\n ecriture: \"EXPL\",\n partage: \"MCP + CLI, multi-plateforme\",\n hebergement: \"Oui / L (Python)\",\n licence: \"MIT\",\n adequation: \"Élevée\"\n },\n {\n approche: \"Hermes (hermes-agent)\",\n stockage: \"FILE(MD) plat, délimité par § + SQLite/FTS5 séparé\",\n recuperation: \"injection GELÉE au démarrage (cache de préfixe) + bm25 en outil, jamais injecté\",\n reconciliation: \"plafonds en CARACTÈRES (2200/1375) ; erreur dure synchrone, AUCUNE passe LLM ; dédup au chargement\",\n ecriture: \"AUTO (porte à false par défaut ; hors interactif = mise en attente)\",\n partage: \"un runtime ; 1 fournisseur externe au plus\",\n hebergement: \"Oui / L\",\n licence: \"MIT (LICENSE décodée)\",\n adequation: \"Moyenne — dégradation silencieuse documentée\"\n },\n {\n approche: \"Letta/MemGPT\",\n stockage: \"HYB blocs+pgvector\",\n recuperation: \"toujours-en-contexte (XML avec budget affiché) + sémantique\",\n reconciliation: \"auto-édition jusqu’à memory_apply_patch ; travail de fond modulo N ; limit INDICATIF, non appliqué\",\n ecriture: \"SELF+API\",\n partage: \"blocs partagés par id ; verrouillage OPTIMISTE + BlockHistory (undo/redo)\",\n hebergement: \"Oui / H (serveur+PG)\",\n licence: \"Apache-2.0\",\n adequation: \"Moyenne — meilleure histoire de concurrence du corpus\"\n },\n {\n approche: \"mem0\",\n stockage: \"HYB VEC(+graphe)+SQLite\",\n recuperation: \"sémantique (+BM25/entité)\",\n reconciliation: \"ADD/UPDATE/DELETE/NOOP + expiration\",\n ecriture: \"AUTO\",\n partage: \"IDs + OpenMemory MCP\",\n hebergement: \"Oui / L (librairie)\",\n licence: \"Apache-2.0\",\n adequation: \"Élevée\"\n },\n {\n approche: \"Zep/Graphiti\",\n stockage: \"KG (Neo4j/FalkorDB)\",\n recuperation: \"hybride sémantique+mot-clé+graphe\",\n reconciliation: \"la plus forte : 4 horodatages, contradiction = mutation sur place, jamais de suppression\",\n ecriture: \"AUTO — ≈ 2+3E+N appels LLM par épisode, LINÉAIRE en arêtes (non documenté)\",\n partage: \"group_id + MCP — course inter-locataires ouverte (#1331)\",\n hebergement: \"Oui / M–H (pas d’embarqué maintenu)\",\n licence: \"Apache-2.0\",\n adequation: \"Moyenne–Élevée — seul à livrer ontologie ET bi-temporel\"\n },\n {\n approche: \"cognee\",\n stockage: \"HYB SQLite+LanceDB+Kuzu/Ladybug (Ladybug récent, à épingler)\",\n recuperation: \"hybride, routage automatique\",\n reconciliation: \"dédup + forget ; id_for() déterministe = fusion idempotente ; intervalles d’événements, NON bi-temporel\",\n ecriture: \"AUTO + ontologie appliquée APRÈS extraction (appariement flou, cutoff 0,8)\",\n partage: \"User→Dataset + MCP + clients TS/Rust\",\n hebergement: \"Oui / L (embarqué)\",\n licence: \"Apache-2.0\",\n adequation: \"Élevée\"\n },\n {\n approche: \"LangMem/LangGraph\",\n stockage: \"KV+VEC (Postgres)\",\n recuperation: \"sémantique ou par filtre\",\n reconciliation: \"consolidation/mise à jour ; SummarizationNode n’écrit PAS en long terme\",\n ecriture: \"SELF ou AUTO — vrai chemin = ReflectionExecutor débouncé après une pause\",\n partage: \"espaces de noms (pas de MCP)\",\n hebergement: \"Oui / L–M (PG)\",\n licence: \"MIT\",\n adequation: \"Moyenne\"\n },\n {\n approche: \"graphify (existant)\",\n stockage: \"KG JSON (+ port GraphStore : file/neo4j/spanner/postgres)\",\n recuperation: \"requête/chemin/explain + recall --as-of (uni-temporel) ; queryWindow POSTGRES SEULEMENT\",\n reconciliation: \"réconciliation d’IDENTITÉ + revue 9 états + citations ; pas de réconciliation d’assertion\",\n ecriture: \"BUILD déclenché par GIT ; ingère déjà les transcripts (dont compaction) ; AUCUN upsert par élément\",\n partage: \"pilote de fusion git — union 2-voies, AVEUGLE AUX SUPPRESSIONS ; plafond 50 Mio déjà dépassé\",\n hebergement: \"Oui / L (JSON) — ≈ 620 ms et 373 Mo RSS par écriture complète\",\n licence: \"MIT\",\n adequation: \"Élevée (corpus de référence) — manques nommés en D8\"\n },\n {\n approche: \"Devin/DeepWiki\",\n stockage: \"index de code propriétaire\",\n recuperation: \"questions/réponses conversationnelles\",\n reconciliation: \"sans objet (re-dérivé)\",\n ecriture: \"AUTO\",\n partage: \"hébergé ; DeepWiki MCP (public)\",\n hebergement: \"Non / SaaS\",\n licence: \"propriétaire\",\n adequation: \"Faible\"\n },\n {\n approche: \"Outil memory Anthropic\",\n stockage: \"FILE (/memories, vôtre)\",\n recuperation: \"navigation de fichiers par le modèle, sans vecteurs\",\n reconciliation: \"aucune (édition par le modèle)\",\n ecriture: \"SELF — écrire-avant-effacer est un PATRON DE PROMPT, pas un hook\",\n partage: \"protocole Claude uniquement ; stockage à votre charge\",\n hebergement: \"Oui / L\",\n licence: \"protocole propriétaire\",\n adequation: \"Moyenne\"\n },\n {\n approche: \"Mémoire ChatGPT (OpenAI)\",\n stockage: \"SaaS opaque\",\n recuperation: \"injection implicite\",\n reconciliation: \"opaque\",\n ecriture: \"AUTO + utilisateur — « Manage memories » est RÉTROSPECTIF, pas une porte\",\n partage: \"aucun (lié au compte)\",\n hebergement: \"Non / SaaS\",\n licence: \"propriétaire\",\n adequation: \"Faible\"\n },\n {\n approche: \"pgvector\",\n stockage: \"VEC (Postgres)\",\n recuperation: \"sémantique/ANN\",\n reconciliation: \"aucune\",\n ecriture: \"EXPL\",\n partage: \"serveur → multi-session\",\n hebergement: \"Oui / M (PG)\",\n licence: \"PostgreSQL\",\n adequation: \"Moyenne\"\n },\n {\n approche: \"Chroma\",\n stockage: \"VEC\",\n recuperation: \"sémantique/hybride\",\n reconciliation: \"aucune\",\n ecriture: \"EXPL\",\n partage: \"embarqué ou serveur\",\n hebergement: \"Oui / L–M (en mémoire, risque OOM)\",\n licence: \"Apache-2.0\",\n adequation: \"Moyenne\"\n },\n {\n approche: \"LanceDB\",\n stockage: \"VEC (disque)\",\n recuperation: \"sémantique\",\n reconciliation: \"aucune\",\n ecriture: \"EXPL\",\n partage: \"embarqué (fichier partagé)\",\n hebergement: \"Oui / L (au-delà de la RAM ok)\",\n licence: \"Apache-2.0\",\n adequation: \"Moyenne–Élevée (substrat)\"\n },\n {\n approche: \"A-MEM\",\n stockage: \"notes+VEC+liens (ChromaDB, all-MiniLM-L6-v2)\",\n recuperation: \"sémantique + liens\",\n reconciliation: \"évolution LLM — update_neighbor ÉCRASE SUR PLACE tags et contexte des voisins\",\n ecriture: \"AUTO\",\n partage: \"en process (pas de serveur)\",\n hebergement: \"Oui / L\",\n licence: \"MIT\",\n adequation: \"Moyenne\"\n },\n {\n approche: \"MemoryOS\",\n stockage: \"paliers+VEC (court terme = deque de 10, FIFO)\",\n recuperation: \"hybride par palier\",\n reconciliation: \"chaleur = visites + interactions + exp(-Δh/24) ; promotion à ≥ 5,0 ; éviction moyen terme en LFU\",\n ecriture: \"AUTO + MCP\",\n partage: \"user_id + MCP\",\n hebergement: \"Oui / L–M\",\n licence: \"Apache-2.0\",\n adequation: \"Moyenne–Élevée\"\n },\n {\n approche: \"Memary\",\n stockage: \"KG\",\n recuperation: \"graphe multi-sauts\",\n reconciliation: \"dédup par nom + récence\",\n ecriture: \"AUTO\",\n partage: \"espace de noms graphe\",\n hebergement: \"Oui / M–H\",\n licence: \"MIT\",\n adequation: \"Faible (figé depuis 2024-10)\"\n },\n {\n approche: \"txtai\",\n stockage: \"HYB VEC+graphe+SQLite+mot-clé\",\n recuperation: \"hybride\",\n reconciliation: \"aucune (substrat)\",\n ecriture: \"EXPL\",\n partage: \"embarqué ou Web+MCP\",\n hebergement: \"Oui / L\",\n licence: \"Apache-2.0\",\n adequation: \"Moyenne–Élevée (substrat)\"\n }\n ]\n};\nfunction loadAgentMemoryDossier() {\n return agentMemoryDossier;\n}\nfunction findAgentMemoryDecision(key) {\n return agentMemoryDossier.decisions.find((decision) => decision.key === key);\n}\nfunction findAgentMemoryOption(decision, key) {\n return decision.options.find((option) => option.key === key);\n}\nfunction loadAgentMemoryMatrix() {\n return agentMemoryMatrix;\n}\nexport {\n agentMemoryDossier as a,\n findAgentMemoryOption as b,\n loadAgentMemoryDossier as c,\n findAgentMemoryDecision as f,\n loadAgentMemoryMatrix as l\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Q as noop } from './index.js-
|
|
2
|
-
import { s as safe_not_equal } from './root.js-
|
|
1
|
+
import { Q as noop } from './index.js-laGHLarB.js';
|
|
2
|
+
import { s as safe_not_equal } from './root.js-CtVQOgDw.js';
|
|
3
3
|
|
|
4
4
|
const subscriber_queue = [];
|
|
5
5
|
function readable(value, start) {
|
|
@@ -214,4 +214,4 @@ const validate_layout_server_exports = validator(valid_layout_server_exports);
|
|
|
214
214
|
const validate_page_server_exports = validator(valid_page_server_exports);
|
|
215
215
|
|
|
216
216
|
export { disable_search as a, decode_params as b, validate_layout_exports as c, decode_pathname as d, validate_page_server_exports as e, validate_page_exports as f, readable as g, make_trackable as m, normalize_path as n, resolve as r, validate_layout_server_exports as v, writable as w };
|
|
217
|
-
//# sourceMappingURL=exports.js-
|
|
217
|
+
//# sourceMappingURL=exports.js-CdqPbjm1.js.map
|
package/focus-app/server/chunks/chunks/{exports.js-DUTkELZq.js.map → exports.js-CdqPbjm1.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exports.js-DUTkELZq.js","sources":["../../../../.svelte-kit/output/server/chunks/exports.js"],"sourcesContent":["import { n as noop } from \"./index.js\";\nimport { s as safe_not_equal } from \"./root.js\";\nconst subscriber_queue = [];\nfunction readable(value, start) {\n return {\n subscribe: writable(value, start).subscribe\n };\n}\nfunction writable(value, start = noop) {\n let stop = null;\n const subscribers = /* @__PURE__ */ new Set();\n function set(new_value) {\n if (safe_not_equal(value, new_value)) {\n value = new_value;\n if (stop) {\n const run_queue = !subscriber_queue.length;\n for (const subscriber of subscribers) {\n subscriber[1]();\n subscriber_queue.push(subscriber, value);\n }\n if (run_queue) {\n for (let i = 0; i < subscriber_queue.length; i += 2) {\n subscriber_queue[i][0](subscriber_queue[i + 1]);\n }\n subscriber_queue.length = 0;\n }\n }\n }\n }\n function update(fn) {\n set(fn(\n /** @type {T} */\n value\n ));\n }\n function subscribe(run, invalidate = noop) {\n const subscriber = [run, invalidate];\n subscribers.add(subscriber);\n if (subscribers.size === 1) {\n stop = start(set, update) || noop;\n }\n run(\n /** @type {T} */\n value\n );\n return () => {\n subscribers.delete(subscriber);\n if (subscribers.size === 0 && stop) {\n stop();\n stop = null;\n }\n };\n }\n return { set, update, subscribe };\n}\nconst SCHEME = /^[a-z][a-z\\d+\\-.]+:/i;\nconst internal = new URL(\"sveltekit-internal://\");\nfunction resolve(base, path) {\n if (path[0] === \"/\" && path[1] === \"/\") return path;\n let url = new URL(base, internal);\n url = new URL(path, url);\n return url.protocol === internal.protocol ? url.pathname + url.search + url.hash : url.href;\n}\nfunction normalize_path(path, trailing_slash) {\n if (path === \"/\" || trailing_slash === \"ignore\") return path;\n if (trailing_slash === \"never\") {\n return path.endsWith(\"/\") ? path.slice(0, -1) : path;\n } else if (trailing_slash === \"always\" && !path.endsWith(\"/\")) {\n return path + \"/\";\n }\n return path;\n}\nfunction decode_pathname(pathname) {\n return pathname.split(\"%25\").map(decodeURI).join(\"%25\");\n}\nfunction decode_params(params) {\n for (const key in params) {\n params[key] = decodeURIComponent(params[key]);\n }\n return params;\n}\nfunction make_trackable(url, callback, search_params_callback, allow_hash = false) {\n const tracked = new URL(url);\n Object.defineProperty(tracked, \"searchParams\", {\n value: new Proxy(tracked.searchParams, {\n get(obj, key) {\n if (key === \"get\" || key === \"getAll\" || key === \"has\") {\n return (param, ...rest) => {\n search_params_callback(param);\n return obj[key](param, ...rest);\n };\n }\n callback();\n const value = Reflect.get(obj, key);\n return typeof value === \"function\" ? value.bind(obj) : value;\n }\n }),\n enumerable: true,\n configurable: true\n });\n const tracked_url_properties = [\"href\", \"pathname\", \"search\", \"toString\", \"toJSON\"];\n if (allow_hash) tracked_url_properties.push(\"hash\");\n for (const property of tracked_url_properties) {\n Object.defineProperty(tracked, property, {\n get() {\n callback();\n return url[property];\n },\n enumerable: true,\n configurable: true\n });\n }\n {\n tracked[/* @__PURE__ */ Symbol.for(\"nodejs.util.inspect.custom\")] = (_depth, opts, inspect) => {\n return inspect(url, opts);\n };\n tracked.searchParams[/* @__PURE__ */ Symbol.for(\"nodejs.util.inspect.custom\")] = (_depth, opts, inspect) => {\n return inspect(url.searchParams, opts);\n };\n }\n if (!allow_hash) {\n disable_hash(tracked);\n }\n return tracked;\n}\nfunction disable_hash(url) {\n allow_nodejs_console_log(url);\n Object.defineProperty(url, \"hash\", {\n get() {\n throw new Error(\n \"Cannot access event.url.hash. Consider using `page.url.hash` inside a component instead\"\n );\n }\n });\n}\nfunction disable_search(url) {\n allow_nodejs_console_log(url);\n for (const property of [\"search\", \"searchParams\"]) {\n Object.defineProperty(url, property, {\n get() {\n throw new Error(`Cannot access url.${property} on a page with prerendering enabled`);\n }\n });\n }\n}\nfunction allow_nodejs_console_log(url) {\n {\n url[/* @__PURE__ */ Symbol.for(\"nodejs.util.inspect.custom\")] = (_depth, opts, inspect) => {\n return inspect(new URL(url), opts);\n };\n }\n}\nfunction validator(expected) {\n function validate(module, file) {\n if (!module) return;\n for (const key in module) {\n if (key[0] === \"_\" || expected.has(key)) continue;\n const values = [...expected.values()];\n const hint = hint_for_supported_files(key, file?.slice(file.lastIndexOf(\".\"))) ?? `valid exports are ${values.join(\", \")}, or anything with a '_' prefix`;\n throw new Error(`Invalid export '${key}'${file ? ` in ${file}` : \"\"} (${hint})`);\n }\n }\n return validate;\n}\nfunction hint_for_supported_files(key, ext = \".js\") {\n const supported_files = [];\n if (valid_layout_exports.has(key)) {\n supported_files.push(`+layout${ext}`);\n }\n if (valid_page_exports.has(key)) {\n supported_files.push(`+page${ext}`);\n }\n if (valid_layout_server_exports.has(key)) {\n supported_files.push(`+layout.server${ext}`);\n }\n if (valid_page_server_exports.has(key)) {\n supported_files.push(`+page.server${ext}`);\n }\n if (valid_server_exports.has(key)) {\n supported_files.push(`+server${ext}`);\n }\n if (supported_files.length > 0) {\n return `'${key}' is a valid export in ${supported_files.slice(0, -1).join(\", \")}${supported_files.length > 1 ? \" or \" : \"\"}${supported_files.at(-1)}`;\n }\n}\nconst valid_layout_exports = /* @__PURE__ */ new Set([\n \"load\",\n \"prerender\",\n \"csr\",\n \"ssr\",\n \"trailingSlash\",\n \"config\"\n]);\nconst valid_page_exports = /* @__PURE__ */ new Set([...valid_layout_exports, \"entries\"]);\nconst valid_layout_server_exports = /* @__PURE__ */ new Set([...valid_layout_exports]);\nconst valid_page_server_exports = /* @__PURE__ */ new Set([...valid_layout_server_exports, \"actions\", \"entries\"]);\nconst valid_server_exports = /* @__PURE__ */ new Set([\n \"GET\",\n \"POST\",\n \"PATCH\",\n \"PUT\",\n \"DELETE\",\n \"OPTIONS\",\n \"HEAD\",\n \"fallback\",\n \"prerender\",\n \"trailingSlash\",\n \"config\",\n \"entries\"\n]);\nconst validate_layout_exports = validator(valid_layout_exports);\nconst validate_page_exports = validator(valid_page_exports);\nconst validate_layout_server_exports = validator(valid_layout_server_exports);\nconst validate_page_server_exports = validator(valid_page_server_exports);\nconst validate_server_exports = validator(valid_server_exports);\nexport {\n SCHEME as S,\n disable_search as a,\n validate_layout_exports as b,\n validate_page_server_exports as c,\n decode_params as d,\n validate_page_exports as e,\n resolve as f,\n decode_pathname as g,\n validate_server_exports as h,\n make_trackable as m,\n normalize_path as n,\n readable as r,\n validate_layout_server_exports as v,\n writable as w\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"exports.js-CdqPbjm1.js","sources":["../../../../.svelte-kit/output/server/chunks/exports.js"],"sourcesContent":["import { n as noop } from \"./index.js\";\nimport { s as safe_not_equal } from \"./root.js\";\nconst subscriber_queue = [];\nfunction readable(value, start) {\n return {\n subscribe: writable(value, start).subscribe\n };\n}\nfunction writable(value, start = noop) {\n let stop = null;\n const subscribers = /* @__PURE__ */ new Set();\n function set(new_value) {\n if (safe_not_equal(value, new_value)) {\n value = new_value;\n if (stop) {\n const run_queue = !subscriber_queue.length;\n for (const subscriber of subscribers) {\n subscriber[1]();\n subscriber_queue.push(subscriber, value);\n }\n if (run_queue) {\n for (let i = 0; i < subscriber_queue.length; i += 2) {\n subscriber_queue[i][0](subscriber_queue[i + 1]);\n }\n subscriber_queue.length = 0;\n }\n }\n }\n }\n function update(fn) {\n set(fn(\n /** @type {T} */\n value\n ));\n }\n function subscribe(run, invalidate = noop) {\n const subscriber = [run, invalidate];\n subscribers.add(subscriber);\n if (subscribers.size === 1) {\n stop = start(set, update) || noop;\n }\n run(\n /** @type {T} */\n value\n );\n return () => {\n subscribers.delete(subscriber);\n if (subscribers.size === 0 && stop) {\n stop();\n stop = null;\n }\n };\n }\n return { set, update, subscribe };\n}\nconst SCHEME = /^[a-z][a-z\\d+\\-.]+:/i;\nconst internal = new URL(\"sveltekit-internal://\");\nfunction resolve(base, path) {\n if (path[0] === \"/\" && path[1] === \"/\") return path;\n let url = new URL(base, internal);\n url = new URL(path, url);\n return url.protocol === internal.protocol ? url.pathname + url.search + url.hash : url.href;\n}\nfunction normalize_path(path, trailing_slash) {\n if (path === \"/\" || trailing_slash === \"ignore\") return path;\n if (trailing_slash === \"never\") {\n return path.endsWith(\"/\") ? path.slice(0, -1) : path;\n } else if (trailing_slash === \"always\" && !path.endsWith(\"/\")) {\n return path + \"/\";\n }\n return path;\n}\nfunction decode_pathname(pathname) {\n return pathname.split(\"%25\").map(decodeURI).join(\"%25\");\n}\nfunction decode_params(params) {\n for (const key in params) {\n params[key] = decodeURIComponent(params[key]);\n }\n return params;\n}\nfunction make_trackable(url, callback, search_params_callback, allow_hash = false) {\n const tracked = new URL(url);\n Object.defineProperty(tracked, \"searchParams\", {\n value: new Proxy(tracked.searchParams, {\n get(obj, key) {\n if (key === \"get\" || key === \"getAll\" || key === \"has\") {\n return (param, ...rest) => {\n search_params_callback(param);\n return obj[key](param, ...rest);\n };\n }\n callback();\n const value = Reflect.get(obj, key);\n return typeof value === \"function\" ? value.bind(obj) : value;\n }\n }),\n enumerable: true,\n configurable: true\n });\n const tracked_url_properties = [\"href\", \"pathname\", \"search\", \"toString\", \"toJSON\"];\n if (allow_hash) tracked_url_properties.push(\"hash\");\n for (const property of tracked_url_properties) {\n Object.defineProperty(tracked, property, {\n get() {\n callback();\n return url[property];\n },\n enumerable: true,\n configurable: true\n });\n }\n {\n tracked[/* @__PURE__ */ Symbol.for(\"nodejs.util.inspect.custom\")] = (_depth, opts, inspect) => {\n return inspect(url, opts);\n };\n tracked.searchParams[/* @__PURE__ */ Symbol.for(\"nodejs.util.inspect.custom\")] = (_depth, opts, inspect) => {\n return inspect(url.searchParams, opts);\n };\n }\n if (!allow_hash) {\n disable_hash(tracked);\n }\n return tracked;\n}\nfunction disable_hash(url) {\n allow_nodejs_console_log(url);\n Object.defineProperty(url, \"hash\", {\n get() {\n throw new Error(\n \"Cannot access event.url.hash. Consider using `page.url.hash` inside a component instead\"\n );\n }\n });\n}\nfunction disable_search(url) {\n allow_nodejs_console_log(url);\n for (const property of [\"search\", \"searchParams\"]) {\n Object.defineProperty(url, property, {\n get() {\n throw new Error(`Cannot access url.${property} on a page with prerendering enabled`);\n }\n });\n }\n}\nfunction allow_nodejs_console_log(url) {\n {\n url[/* @__PURE__ */ Symbol.for(\"nodejs.util.inspect.custom\")] = (_depth, opts, inspect) => {\n return inspect(new URL(url), opts);\n };\n }\n}\nfunction validator(expected) {\n function validate(module, file) {\n if (!module) return;\n for (const key in module) {\n if (key[0] === \"_\" || expected.has(key)) continue;\n const values = [...expected.values()];\n const hint = hint_for_supported_files(key, file?.slice(file.lastIndexOf(\".\"))) ?? `valid exports are ${values.join(\", \")}, or anything with a '_' prefix`;\n throw new Error(`Invalid export '${key}'${file ? ` in ${file}` : \"\"} (${hint})`);\n }\n }\n return validate;\n}\nfunction hint_for_supported_files(key, ext = \".js\") {\n const supported_files = [];\n if (valid_layout_exports.has(key)) {\n supported_files.push(`+layout${ext}`);\n }\n if (valid_page_exports.has(key)) {\n supported_files.push(`+page${ext}`);\n }\n if (valid_layout_server_exports.has(key)) {\n supported_files.push(`+layout.server${ext}`);\n }\n if (valid_page_server_exports.has(key)) {\n supported_files.push(`+page.server${ext}`);\n }\n if (valid_server_exports.has(key)) {\n supported_files.push(`+server${ext}`);\n }\n if (supported_files.length > 0) {\n return `'${key}' is a valid export in ${supported_files.slice(0, -1).join(\", \")}${supported_files.length > 1 ? \" or \" : \"\"}${supported_files.at(-1)}`;\n }\n}\nconst valid_layout_exports = /* @__PURE__ */ new Set([\n \"load\",\n \"prerender\",\n \"csr\",\n \"ssr\",\n \"trailingSlash\",\n \"config\"\n]);\nconst valid_page_exports = /* @__PURE__ */ new Set([...valid_layout_exports, \"entries\"]);\nconst valid_layout_server_exports = /* @__PURE__ */ new Set([...valid_layout_exports]);\nconst valid_page_server_exports = /* @__PURE__ */ new Set([...valid_layout_server_exports, \"actions\", \"entries\"]);\nconst valid_server_exports = /* @__PURE__ */ new Set([\n \"GET\",\n \"POST\",\n \"PATCH\",\n \"PUT\",\n \"DELETE\",\n \"OPTIONS\",\n \"HEAD\",\n \"fallback\",\n \"prerender\",\n \"trailingSlash\",\n \"config\",\n \"entries\"\n]);\nconst validate_layout_exports = validator(valid_layout_exports);\nconst validate_page_exports = validator(valid_page_exports);\nconst validate_layout_server_exports = validator(valid_layout_server_exports);\nconst validate_page_server_exports = validator(valid_page_server_exports);\nconst validate_server_exports = validator(valid_server_exports);\nexport {\n SCHEME as S,\n disable_search as a,\n validate_layout_exports as b,\n validate_page_server_exports as c,\n decode_params as d,\n validate_page_exports as e,\n resolve as f,\n decode_pathname as g,\n validate_server_exports as h,\n make_trackable as m,\n normalize_path as n,\n readable as r,\n validate_layout_server_exports as v,\n writable as w\n};\n"],"names":[],"mappings":"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"}
|