@remnic/core 9.3.769 → 9.3.771

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.
Files changed (161) hide show
  1. package/dist/access-admin-ops-surface.js +34 -34
  2. package/dist/access-boundary.d.ts +2 -1
  3. package/dist/access-boundary.js +35 -35
  4. package/dist/access-cli.js +103 -100
  5. package/dist/access-cli.js.map +1 -1
  6. package/dist/access-errors.d.ts +5 -0
  7. package/dist/access-errors.js +8 -0
  8. package/dist/access-errors.js.map +1 -0
  9. package/dist/access-http.js +46 -43
  10. package/dist/access-identity-continuity-surface.js +34 -34
  11. package/dist/access-lcm-surface.js +34 -34
  12. package/dist/access-mcp-output-schemas.d.ts +20 -0
  13. package/dist/access-mcp-output-schemas.js +8 -0
  14. package/dist/access-mcp-output-schemas.js.map +1 -0
  15. package/dist/access-mcp.js +43 -40
  16. package/dist/access-observe-write-surface.js +34 -34
  17. package/dist/access-operations-batch.js +39 -37
  18. package/dist/access-operations.js +41 -39
  19. package/dist/access-recall-surface.js +34 -34
  20. package/dist/access-schema.js +3 -3
  21. package/dist/access-service.js +34 -34
  22. package/dist/access-surface-catalog.js +1 -0
  23. package/dist/access-surface-catalog.js.map +1 -1
  24. package/dist/active-recall.js +5 -5
  25. package/dist/adapters/index.js +4 -4
  26. package/dist/adapters/registry.js +2 -2
  27. package/dist/auto-sync-2SOUW4JW.js +1 -1
  28. package/dist/briefing.js +8 -8
  29. package/dist/causal-behavior.js +5 -5
  30. package/dist/causal-chain.js +3 -3
  31. package/dist/causal-consolidation.js +12 -12
  32. package/dist/causal-retrieval.js +3 -3
  33. package/dist/causal-trajectory.js +1 -1
  34. package/dist/{chunk-IGVKWKR2.js → chunk-27CQIO7T.js} +13 -13
  35. package/dist/{chunk-GLERZDM7.js → chunk-27TJRC2Y.js} +29 -7
  36. package/dist/chunk-27TJRC2Y.js.map +1 -0
  37. package/dist/{chunk-VKHZFF5P.js → chunk-44YXWE35.js} +2 -2
  38. package/dist/chunk-5RUE3GHQ.js +445 -0
  39. package/dist/chunk-5RUE3GHQ.js.map +1 -0
  40. package/dist/{chunk-R3K4CXPR.js → chunk-6QODJKOV.js} +2 -2
  41. package/dist/{chunk-ORAK3LNZ.js → chunk-6SHAUM5S.js} +5 -5
  42. package/dist/{chunk-2MR3MFQB.js → chunk-6Y4JTNX7.js} +2 -2
  43. package/dist/{chunk-CKNAVW34.js → chunk-7OSULYN2.js} +2 -2
  44. package/dist/{chunk-6T4LTI2F.js → chunk-7XH7VJN4.js} +4 -4
  45. package/dist/{chunk-JBPKEARU.js → chunk-AU7Q3LSC.js} +4 -4
  46. package/dist/{chunk-U5GFYMV7.js → chunk-BKTC7JCA.js} +3 -3
  47. package/dist/{chunk-AS2NRB45.js → chunk-BMANIB5B.js} +2 -2
  48. package/dist/{chunk-OAREUC7N.js → chunk-C2DDH5UN.js} +34 -34
  49. package/dist/{chunk-YDYC6PIS.js → chunk-CXBFYSQY.js} +2 -2
  50. package/dist/{chunk-DTTVX6EO.js → chunk-EGLUVV6B.js} +12 -12
  51. package/dist/{chunk-YNDLCWXS.js → chunk-EZ25VE3G.js} +4 -4
  52. package/dist/chunk-FTYDWKO6.js +101 -0
  53. package/dist/chunk-FTYDWKO6.js.map +1 -0
  54. package/dist/{chunk-SFNQDXXL.js → chunk-J2QYB2D5.js} +3 -3
  55. package/dist/{chunk-SQNED75R.js → chunk-KYC3RLYJ.js} +1 -1
  56. package/dist/{chunk-OX272PBW.js → chunk-L42FA4BU.js} +2 -2
  57. package/dist/{chunk-NDXJJKT2.js → chunk-LU7ATMRV.js} +2 -2
  58. package/dist/{chunk-V5RVMULT.js → chunk-LZ73Y56P.js} +10 -10
  59. package/dist/{chunk-IVFIYAIP.js → chunk-MJE4XV4A.js} +5 -5
  60. package/dist/{chunk-N4ZA2I7M.js → chunk-OTMAYEY5.js} +2 -2
  61. package/dist/{chunk-FLVL4L3L.js → chunk-OUXPVWTZ.js} +5 -5
  62. package/dist/{chunk-PA5ALD3S.js → chunk-OW4UXZNP.js} +129 -109
  63. package/dist/chunk-OW4UXZNP.js.map +1 -0
  64. package/dist/{chunk-4HYFKIGH.js → chunk-PSNMICC2.js} +4 -4
  65. package/dist/chunk-RANHFI3P.js +8 -0
  66. package/dist/chunk-RANHFI3P.js.map +1 -0
  67. package/dist/{chunk-CNXMWYLA.js → chunk-RFZW7NID.js} +165 -75
  68. package/dist/chunk-RFZW7NID.js.map +1 -0
  69. package/dist/{chunk-4JG55YV3.js → chunk-TECYUPFB.js} +4 -4
  70. package/dist/{chunk-EVXI2I6G.js → chunk-U3TRHUSJ.js} +64 -64
  71. package/dist/{chunk-SIPZ5UMK.js → chunk-U5HD7BB2.js} +27 -6
  72. package/dist/chunk-U5HD7BB2.js.map +1 -0
  73. package/dist/{chunk-X7HTU4HO.js → chunk-VFHDUFH5.js} +2 -2
  74. package/dist/{chunk-CVINPTKG.js → chunk-X5NUL5N4.js} +5 -5
  75. package/dist/{chunk-NFWTMM2M.js → chunk-XNWLD3RR.js} +2 -2
  76. package/dist/{chunk-QPTP6SKC.js → chunk-YOELDDBF.js} +2 -2
  77. package/dist/{chunk-2RLECZ6J.js → chunk-YRZMCPC5.js} +2 -2
  78. package/dist/{chunk-MSGPLITO.js → chunk-ZI3YYOOV.js} +2 -2
  79. package/dist/{chunk-MSGPLITO.js.map → chunk-ZI3YYOOV.js.map} +1 -1
  80. package/dist/cli.js +70 -67
  81. package/dist/compounding/engine.js +8 -8
  82. package/dist/config.js +2 -2
  83. package/dist/connectors/codex-materialize-runner.js +8 -8
  84. package/dist/connectors/index.js +8 -8
  85. package/dist/consolidation-provenance-check.js +2 -2
  86. package/dist/dashboard-runtime.js +2 -2
  87. package/dist/entity-retrieval.js +8 -8
  88. package/dist/extraction.js +1 -1
  89. package/dist/{forget-WYLR4ZFV.js → forget-OEE5OELK.js} +2 -2
  90. package/dist/index.js +175 -172
  91. package/dist/lcm/engine.js +4 -4
  92. package/dist/lcm/index.js +11 -11
  93. package/dist/maintenance/memory-governance.js +9 -9
  94. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +8 -8
  95. package/dist/maintenance/rebuild-memory-projection.js +10 -10
  96. package/dist/namespaces/migrate.js +13 -13
  97. package/dist/namespaces/search.js +4 -4
  98. package/dist/namespaces/storage.js +8 -8
  99. package/dist/operator-toolkit.js +19 -19
  100. package/dist/orchestration/maintenance.js +10 -10
  101. package/dist/orchestrator.js +103 -100
  102. package/dist/recall-timings.d.ts +26 -0
  103. package/dist/recall-timings.js +16 -0
  104. package/dist/recall-timings.js.map +1 -0
  105. package/dist/resume-bundles.js +3 -3
  106. package/dist/search/factory.js +3 -3
  107. package/dist/search/index.js +7 -7
  108. package/dist/semantic-consolidation.js +11 -11
  109. package/dist/semantic-rule-promotion.js +8 -8
  110. package/dist/semantic-rule-verifier.js +9 -9
  111. package/dist/storage.js +8 -8
  112. package/dist/transfer/autodetect.js +1 -1
  113. package/dist/transfer/backup.js +1 -1
  114. package/dist/transfer/capsule-export.js +2 -2
  115. package/dist/verified-recall.js +9 -9
  116. package/package.json +2 -2
  117. package/src/access-boundary.ts +2 -0
  118. package/src/access-errors.ts +2 -0
  119. package/src/access-http.ts +32 -1
  120. package/src/access-mcp-output-schemas.ts +472 -0
  121. package/src/access-mcp.ts +235 -143
  122. package/src/access-operations-batch.ts +19 -0
  123. package/src/access-surface-catalog.ts +1 -0
  124. package/src/orchestration/recall-internal.ts +21 -3
  125. package/src/recall-timings-access.test.ts +301 -0
  126. package/src/recall-timings.ts +141 -0
  127. package/dist/chunk-CNXMWYLA.js.map +0 -1
  128. package/dist/chunk-GLERZDM7.js.map +0 -1
  129. package/dist/chunk-PA5ALD3S.js.map +0 -1
  130. package/dist/chunk-SIPZ5UMK.js.map +0 -1
  131. /package/dist/{chunk-IGVKWKR2.js.map → chunk-27CQIO7T.js.map} +0 -0
  132. /package/dist/{chunk-VKHZFF5P.js.map → chunk-44YXWE35.js.map} +0 -0
  133. /package/dist/{chunk-R3K4CXPR.js.map → chunk-6QODJKOV.js.map} +0 -0
  134. /package/dist/{chunk-ORAK3LNZ.js.map → chunk-6SHAUM5S.js.map} +0 -0
  135. /package/dist/{chunk-2MR3MFQB.js.map → chunk-6Y4JTNX7.js.map} +0 -0
  136. /package/dist/{chunk-CKNAVW34.js.map → chunk-7OSULYN2.js.map} +0 -0
  137. /package/dist/{chunk-6T4LTI2F.js.map → chunk-7XH7VJN4.js.map} +0 -0
  138. /package/dist/{chunk-JBPKEARU.js.map → chunk-AU7Q3LSC.js.map} +0 -0
  139. /package/dist/{chunk-U5GFYMV7.js.map → chunk-BKTC7JCA.js.map} +0 -0
  140. /package/dist/{chunk-AS2NRB45.js.map → chunk-BMANIB5B.js.map} +0 -0
  141. /package/dist/{chunk-OAREUC7N.js.map → chunk-C2DDH5UN.js.map} +0 -0
  142. /package/dist/{chunk-YDYC6PIS.js.map → chunk-CXBFYSQY.js.map} +0 -0
  143. /package/dist/{chunk-DTTVX6EO.js.map → chunk-EGLUVV6B.js.map} +0 -0
  144. /package/dist/{chunk-YNDLCWXS.js.map → chunk-EZ25VE3G.js.map} +0 -0
  145. /package/dist/{chunk-SFNQDXXL.js.map → chunk-J2QYB2D5.js.map} +0 -0
  146. /package/dist/{chunk-SQNED75R.js.map → chunk-KYC3RLYJ.js.map} +0 -0
  147. /package/dist/{chunk-OX272PBW.js.map → chunk-L42FA4BU.js.map} +0 -0
  148. /package/dist/{chunk-NDXJJKT2.js.map → chunk-LU7ATMRV.js.map} +0 -0
  149. /package/dist/{chunk-V5RVMULT.js.map → chunk-LZ73Y56P.js.map} +0 -0
  150. /package/dist/{chunk-IVFIYAIP.js.map → chunk-MJE4XV4A.js.map} +0 -0
  151. /package/dist/{chunk-N4ZA2I7M.js.map → chunk-OTMAYEY5.js.map} +0 -0
  152. /package/dist/{chunk-FLVL4L3L.js.map → chunk-OUXPVWTZ.js.map} +0 -0
  153. /package/dist/{chunk-4HYFKIGH.js.map → chunk-PSNMICC2.js.map} +0 -0
  154. /package/dist/{chunk-4JG55YV3.js.map → chunk-TECYUPFB.js.map} +0 -0
  155. /package/dist/{chunk-EVXI2I6G.js.map → chunk-U3TRHUSJ.js.map} +0 -0
  156. /package/dist/{chunk-X7HTU4HO.js.map → chunk-VFHDUFH5.js.map} +0 -0
  157. /package/dist/{chunk-CVINPTKG.js.map → chunk-X5NUL5N4.js.map} +0 -0
  158. /package/dist/{chunk-NFWTMM2M.js.map → chunk-XNWLD3RR.js.map} +0 -0
  159. /package/dist/{chunk-QPTP6SKC.js.map → chunk-YOELDDBF.js.map} +0 -0
  160. /package/dist/{chunk-2RLECZ6J.js.map → chunk-YRZMCPC5.js.map} +0 -0
  161. /package/dist/{forget-WYLR4ZFV.js.map → forget-OEE5OELK.js.map} +0 -0
@@ -1,18 +1,18 @@
1
1
  import {
2
2
  compareVerifiedSemanticRuleResults,
3
3
  searchVerifiedSemanticRules
4
- } from "./chunk-VKHZFF5P.js";
5
- import "./chunk-DTTVX6EO.js";
6
- import "./chunk-M7XQSUBB.js";
4
+ } from "./chunk-44YXWE35.js";
5
+ import "./chunk-EGLUVV6B.js";
7
6
  import "./chunk-L2B3EE7B.js";
7
+ import "./chunk-M7XQSUBB.js";
8
8
  import "./chunk-5UZXUTVO.js";
9
9
  import "./chunk-5GPPACXK.js";
10
- import "./chunk-LTJAMRGI.js";
11
10
  import "./chunk-TKZ3AL5V.js";
12
11
  import "./chunk-6CIAGZ6X.js";
12
+ import "./chunk-SVOZFLIQ.js";
13
+ import "./chunk-LTJAMRGI.js";
13
14
  import "./chunk-J6A3CX5N.js";
14
15
  import "./chunk-DQC3ZZYM.js";
15
- import "./chunk-SVOZFLIQ.js";
16
16
  import "./chunk-JS2HKKOK.js";
17
17
  import "./chunk-AWJ2FHCF.js";
18
18
  import "./chunk-42JKGUFJ.js";
@@ -24,9 +24,9 @@ import "./chunk-DM2T26WE.js";
24
24
  import "./chunk-LDXUBPMO.js";
25
25
  import "./chunk-YTU7WKYN.js";
26
26
  import "./chunk-AAD2ZS6P.js";
27
+ import "./chunk-G7D6GZ5J.js";
27
28
  import "./chunk-VF4XKTX3.js";
28
29
  import "./chunk-W5H6ZRPT.js";
29
- import "./chunk-G7D6GZ5J.js";
30
30
  import "./chunk-VUA4S7P6.js";
31
31
  import "./chunk-IQVQJJL7.js";
32
32
  import "./chunk-L2EXJQJP.js";
@@ -39,14 +39,14 @@ import "./chunk-5GKPFL3S.js";
39
39
  import "./chunk-4DJQYKMN.js";
40
40
  import "./chunk-EYIEWJNI.js";
41
41
  import "./chunk-JUC24CTX.js";
42
- import "./chunk-6MKAMLQL.js";
43
- import "./chunk-JAKIDQB2.js";
44
- import "./chunk-ZBJMUXZH.js";
45
42
  import "./chunk-NU3CSQ4H.js";
46
43
  import "./chunk-J2HSAU72.js";
47
44
  import "./chunk-A6XUJE5D.js";
48
45
  import "./chunk-P7FMDTKL.js";
49
46
  import "./chunk-VS2IYZRU.js";
47
+ import "./chunk-6MKAMLQL.js";
48
+ import "./chunk-JAKIDQB2.js";
49
+ import "./chunk-ZBJMUXZH.js";
50
50
  import "./chunk-PZ5AY32C.js";
51
51
  export {
52
52
  compareVerifiedSemanticRuleResults,
package/dist/storage.js CHANGED
@@ -16,19 +16,19 @@ import {
16
16
  parseFrontmatter,
17
17
  parseFrontmatterStringValue,
18
18
  serializeEntityFile
19
- } from "./chunk-DTTVX6EO.js";
20
- import "./chunk-M7XQSUBB.js";
19
+ } from "./chunk-EGLUVV6B.js";
21
20
  import "./chunk-L2B3EE7B.js";
21
+ import "./chunk-M7XQSUBB.js";
22
22
  import "./chunk-5UZXUTVO.js";
23
23
  import "./chunk-5GPPACXK.js";
24
- import "./chunk-LTJAMRGI.js";
25
24
  import "./chunk-TKZ3AL5V.js";
26
25
  import "./chunk-6CIAGZ6X.js";
27
- import "./chunk-J6A3CX5N.js";
28
- import "./chunk-DQC3ZZYM.js";
29
26
  import {
30
27
  stripAttributesSuffix
31
28
  } from "./chunk-SVOZFLIQ.js";
29
+ import "./chunk-LTJAMRGI.js";
30
+ import "./chunk-J6A3CX5N.js";
31
+ import "./chunk-DQC3ZZYM.js";
32
32
  import "./chunk-JS2HKKOK.js";
33
33
  import "./chunk-AWJ2FHCF.js";
34
34
  import "./chunk-42JKGUFJ.js";
@@ -40,9 +40,9 @@ import "./chunk-DM2T26WE.js";
40
40
  import "./chunk-LDXUBPMO.js";
41
41
  import "./chunk-YTU7WKYN.js";
42
42
  import "./chunk-AAD2ZS6P.js";
43
+ import "./chunk-G7D6GZ5J.js";
43
44
  import "./chunk-VF4XKTX3.js";
44
45
  import "./chunk-W5H6ZRPT.js";
45
- import "./chunk-G7D6GZ5J.js";
46
46
  import "./chunk-VUA4S7P6.js";
47
47
  import "./chunk-IQVQJJL7.js";
48
48
  import "./chunk-L2EXJQJP.js";
@@ -55,13 +55,13 @@ import "./chunk-5GKPFL3S.js";
55
55
  import "./chunk-4DJQYKMN.js";
56
56
  import "./chunk-EYIEWJNI.js";
57
57
  import "./chunk-JUC24CTX.js";
58
- import "./chunk-6MKAMLQL.js";
59
- import "./chunk-JAKIDQB2.js";
60
58
  import "./chunk-NU3CSQ4H.js";
61
59
  import "./chunk-J2HSAU72.js";
62
60
  import "./chunk-A6XUJE5D.js";
63
61
  import "./chunk-P7FMDTKL.js";
64
62
  import "./chunk-VS2IYZRU.js";
63
+ import "./chunk-6MKAMLQL.js";
64
+ import "./chunk-JAKIDQB2.js";
65
65
  import "./chunk-PZ5AY32C.js";
66
66
  export {
67
67
  ContentHashIndex,
@@ -4,8 +4,8 @@ import {
4
4
  import "../chunk-2DL3OFLD.js";
5
5
  import "../chunk-G4IAEX6D.js";
6
6
  import "../chunk-765K3SAT.js";
7
- import "../chunk-WEHSQBFR.js";
8
7
  import "../chunk-J4EB7DNW.js";
8
+ import "../chunk-WEHSQBFR.js";
9
9
  import "../chunk-UI3NYK34.js";
10
10
  import "../chunk-GCGJW34D.js";
11
11
  import "../chunk-PZ5AY32C.js";
@@ -2,8 +2,8 @@ import {
2
2
  backupMemoryDir
3
3
  } from "../chunk-2BFLDH5F.js";
4
4
  import "../chunk-765K3SAT.js";
5
- import "../chunk-437S3G37.js";
6
5
  import "../chunk-J4EB7DNW.js";
6
+ import "../chunk-437S3G37.js";
7
7
  import "../chunk-GWTFLF2P.js";
8
8
  import "../chunk-UKJAGEXH.js";
9
9
  import "../chunk-FP2373TW.js";
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  exportCapsule,
3
3
  isValidCapsuleSince
4
- } from "../chunk-FLVL4L3L.js";
4
+ } from "../chunk-OUXPVWTZ.js";
5
+ import "../chunk-J4EB7DNW.js";
5
6
  import "../chunk-WEHSQBFR.js";
6
7
  import "../chunk-437S3G37.js";
7
- import "../chunk-J4EB7DNW.js";
8
8
  import "../chunk-GWTFLF2P.js";
9
9
  import "../chunk-UKJAGEXH.js";
10
10
  import "../chunk-FP2373TW.js";
@@ -1,19 +1,19 @@
1
1
  import {
2
2
  compareVerifiedEpisodeResults,
3
3
  searchVerifiedEpisodes
4
- } from "./chunk-N4ZA2I7M.js";
4
+ } from "./chunk-OTMAYEY5.js";
5
5
  import "./chunk-7FL4CNPV.js";
6
- import "./chunk-DTTVX6EO.js";
7
- import "./chunk-M7XQSUBB.js";
6
+ import "./chunk-EGLUVV6B.js";
8
7
  import "./chunk-L2B3EE7B.js";
8
+ import "./chunk-M7XQSUBB.js";
9
9
  import "./chunk-5UZXUTVO.js";
10
10
  import "./chunk-5GPPACXK.js";
11
- import "./chunk-LTJAMRGI.js";
12
11
  import "./chunk-TKZ3AL5V.js";
13
12
  import "./chunk-6CIAGZ6X.js";
13
+ import "./chunk-SVOZFLIQ.js";
14
+ import "./chunk-LTJAMRGI.js";
14
15
  import "./chunk-J6A3CX5N.js";
15
16
  import "./chunk-DQC3ZZYM.js";
16
- import "./chunk-SVOZFLIQ.js";
17
17
  import "./chunk-JS2HKKOK.js";
18
18
  import "./chunk-AWJ2FHCF.js";
19
19
  import "./chunk-42JKGUFJ.js";
@@ -25,9 +25,9 @@ import "./chunk-DM2T26WE.js";
25
25
  import "./chunk-LDXUBPMO.js";
26
26
  import "./chunk-YTU7WKYN.js";
27
27
  import "./chunk-AAD2ZS6P.js";
28
+ import "./chunk-G7D6GZ5J.js";
28
29
  import "./chunk-VF4XKTX3.js";
29
30
  import "./chunk-W5H6ZRPT.js";
30
- import "./chunk-G7D6GZ5J.js";
31
31
  import "./chunk-VUA4S7P6.js";
32
32
  import "./chunk-IQVQJJL7.js";
33
33
  import "./chunk-L2EXJQJP.js";
@@ -40,14 +40,14 @@ import "./chunk-5GKPFL3S.js";
40
40
  import "./chunk-4DJQYKMN.js";
41
41
  import "./chunk-EYIEWJNI.js";
42
42
  import "./chunk-JUC24CTX.js";
43
- import "./chunk-6MKAMLQL.js";
44
- import "./chunk-JAKIDQB2.js";
45
- import "./chunk-ZBJMUXZH.js";
46
43
  import "./chunk-NU3CSQ4H.js";
47
44
  import "./chunk-J2HSAU72.js";
48
45
  import "./chunk-A6XUJE5D.js";
49
46
  import "./chunk-P7FMDTKL.js";
50
47
  import "./chunk-VS2IYZRU.js";
48
+ import "./chunk-6MKAMLQL.js";
49
+ import "./chunk-JAKIDQB2.js";
50
+ import "./chunk-ZBJMUXZH.js";
51
51
  import "./chunk-PZ5AY32C.js";
52
52
  export {
53
53
  compareVerifiedEpisodeResults,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@remnic/core",
3
- "version": "9.3.769",
3
+ "version": "9.3.771",
4
4
  "description": "Framework-agnostic Remnic memory engine — orchestrator, storage, extraction, search, trust zones",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -3000,7 +3000,7 @@
3000
3000
  "core"
3001
3001
  ],
3002
3002
  "peerDependencies": {
3003
- "@remnic/coding-graph": "^9.3.769"
3003
+ "@remnic/coding-graph": "^9.3.771"
3004
3004
  },
3005
3005
  "peerDependenciesMeta": {
3006
3006
  "@remnic/coding-graph": {
@@ -147,6 +147,7 @@ export type OperationName =
147
147
  | "offline_sync_apply"
148
148
  | "lcm_status"
149
149
  | "memory_list"
150
+ | "recall_timings"
150
151
  | "entity_list"
151
152
  | "maintenance_status"
152
153
  | "quality_status"
@@ -178,6 +179,7 @@ export type OperationName =
178
179
  export interface OperationContext {
179
180
  readonly service: EngramAccessService;
180
181
  readonly authenticatedPrincipal?: string;
182
+ readonly operatorPrincipal?: string;
181
183
  readonly hooks?: OperationHooks;
182
184
  }
183
185
 
@@ -0,0 +1,2 @@
1
+ /** Authenticated caller lacks the required authorization (HTTP 403). */
2
+ export class EngramAccessForbiddenError extends Error {}
@@ -8,7 +8,13 @@ import { fileURLToPath, URL } from "node:url";
8
8
  import { gunzipSync } from "node:zlib";
9
9
  import { log } from "./logger.js";
10
10
  import { abortError, isAbortError } from "./abort-error.js";
11
- import { EngramAccessInputError, type EngramAccessService, type EngramAccessMemoryResponse, type EngramAccessWriteResponse } from "./access-service.js";
11
+ import { EngramAccessForbiddenError } from "./access-errors.js";
12
+ import {
13
+ EngramAccessInputError,
14
+ type EngramAccessService,
15
+ type EngramAccessMemoryResponse,
16
+ type EngramAccessWriteResponse,
17
+ } from "./access-service.js";
12
18
  import { CorrectionContractError } from "./correction/correction-contract.js";
13
19
  import { WearablesInputError } from "./wearables/errors.js";
14
20
  import { EngramMcpServer, MCP_SUPPORTED_PROTOCOL_VERSIONS } from "./access-mcp.js";
@@ -451,6 +457,10 @@ export class EngramAccessHttpServer {
451
457
  this.respondJson(res, 400, { error: err.message, code: "input_error" });
452
458
  return;
453
459
  }
460
+ if (err instanceof EngramAccessForbiddenError) {
461
+ this.respondJson(res, 403, { error: err.message, code: "forbidden" });
462
+ return;
463
+ }
454
464
  if (err instanceof CorrectionContractError) {
455
465
  this.respondJson(res, 400, { error: err.message, code: "correction_contract_error" });
456
466
  return;
@@ -1769,6 +1779,27 @@ export class EngramAccessHttpServer {
1769
1779
  return;
1770
1780
  }
1771
1781
 
1782
+ if (req.method === "GET" && pathname === "/engram/v1/recall/timings") {
1783
+ const op = getOperation("recall_timings"); // boundary dispatch (issue #1830)
1784
+ if (!op) {
1785
+ throw new Error("access-boundary: operation not registered: recall_timings");
1786
+ }
1787
+ // Live diagnostic route; no response (success or denial) is cacheable.
1788
+ // Set before dispatch so the 403 path carries the header too.
1789
+ res.setHeader("cache-control", "no-store");
1790
+ // Dispatch through the registered operation so the HTTP route and the
1791
+ // boundary registration share one gate. The server's own principal is
1792
+ // the transport-level operator fallback; a configured
1793
+ // agentAccessHttp.principal outranks it.
1794
+ const output = (await op.run({}, {
1795
+ service: this.service,
1796
+ authenticatedPrincipal: this.resolveRequestPrincipal(req),
1797
+ operatorPrincipal: this.authenticatedPrincipal,
1798
+ })) as { result: unknown };
1799
+ this.respondJson(res, 200, output.result);
1800
+ return;
1801
+ }
1802
+
1772
1803
  const memoryMatch = pathname.match(/^\/engram\/v1\/memories\/([^/]+)$/);
1773
1804
  if (req.method === "GET" && memoryMatch) {
1774
1805
  const memoryId = decodeURIComponent(memoryMatch[1] ?? "");