@remnic/core 9.3.637 → 9.3.639

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 (279) hide show
  1. package/dist/access-cli.js +29 -29
  2. package/dist/access-http.d.ts +56 -5
  3. package/dist/access-http.js +15 -13
  4. package/dist/access-mcp.d.ts +4 -4
  5. package/dist/access-mcp.js +14 -12
  6. package/dist/access-schema.d.ts +3 -0
  7. package/dist/access-schema.js +1 -1
  8. package/dist/{access-service-GVOE5U3C.d.ts → access-service-jyYute38.d.ts} +4 -2
  9. package/dist/access-service.d.ts +4 -4
  10. package/dist/access-service.js +12 -10
  11. package/dist/action-confidence.d.ts +1 -1
  12. package/dist/active-memory-bridge.d.ts +1 -1
  13. package/dist/active-recall.d.ts +1 -1
  14. package/dist/active-recall.js +1 -1
  15. package/dist/{auto-sync-RFADEHIQ.js → auto-sync-54QQHOG5.js} +4 -4
  16. package/dist/behavior-learner.d.ts +1 -1
  17. package/dist/behavior-signals.d.ts +1 -1
  18. package/dist/bootstrap.d.ts +3 -3
  19. package/dist/briefing.d.ts +1 -1
  20. package/dist/briefing.js +3 -3
  21. package/dist/buffer-surprise-report.d.ts +1 -1
  22. package/dist/buffer.d.ts +1 -1
  23. package/dist/calibration.d.ts +1 -1
  24. package/dist/calibration.js +1 -1
  25. package/dist/causal-behavior.d.ts +1 -1
  26. package/dist/causal-behavior.js +2 -2
  27. package/dist/causal-chain.js +2 -2
  28. package/dist/causal-consolidation.d.ts +1 -1
  29. package/dist/causal-consolidation.js +7 -7
  30. package/dist/causal-retrieval.js +2 -2
  31. package/dist/causal-trajectory-graph.js +1 -1
  32. package/dist/causal-trajectory.js +1 -1
  33. package/dist/{chunk-TFICNXXU.js → chunk-2BHNQRE5.js} +1153 -294
  34. package/dist/chunk-2BHNQRE5.js.map +1 -0
  35. package/dist/{chunk-3RDYU3JS.js → chunk-3AZDLWDW.js} +3 -3
  36. package/dist/{chunk-FPNQF475.js → chunk-3F7RMHC4.js} +1 -1
  37. package/dist/chunk-3F7RMHC4.js.map +1 -0
  38. package/dist/{chunk-3EJ5OOZ3.js → chunk-3SF7QNKF.js} +3 -3
  39. package/dist/{chunk-NFNQ7TWF.js → chunk-4VTVCWVB.js} +20 -12
  40. package/dist/chunk-4VTVCWVB.js.map +1 -0
  41. package/dist/{chunk-XM6M6DHG.js → chunk-52XI77OQ.js} +204 -13
  42. package/dist/chunk-52XI77OQ.js.map +1 -0
  43. package/dist/{chunk-6BDVBBBY.js → chunk-666A3MOW.js} +88 -30
  44. package/dist/chunk-666A3MOW.js.map +1 -0
  45. package/dist/{chunk-242XFZ36.js → chunk-7OH7KPF5.js} +2 -2
  46. package/dist/{chunk-HZVIYZYN.js → chunk-7R37SOT4.js} +6 -6
  47. package/dist/{chunk-7A2QKUUA.js → chunk-7XRSLMUD.js} +2 -2
  48. package/dist/{chunk-723OMPUI.js → chunk-A3BS64GV.js} +7 -1
  49. package/dist/chunk-A3BS64GV.js.map +1 -0
  50. package/dist/{chunk-JCLECECB.js → chunk-A3UPMOJZ.js} +2 -2
  51. package/dist/{chunk-YCX45GOQ.js → chunk-AFH2JXSF.js} +2 -2
  52. package/dist/{chunk-BK35NOJL.js → chunk-BB6FNMMB.js} +52 -6
  53. package/dist/chunk-BB6FNMMB.js.map +1 -0
  54. package/dist/{chunk-3XNMN242.js → chunk-BTY5XQG3.js} +7 -7
  55. package/dist/{chunk-QHXW3LZV.js → chunk-C3EJ3UIS.js} +3 -3
  56. package/dist/{chunk-A3HKTPPV.js → chunk-C63WC454.js} +12 -1
  57. package/dist/chunk-C63WC454.js.map +1 -0
  58. package/dist/{chunk-4S3N6HFG.js → chunk-C6XO6ONP.js} +2 -2
  59. package/dist/{chunk-WD2W4234.js → chunk-CDHRUNBX.js} +11 -2
  60. package/dist/chunk-CDHRUNBX.js.map +1 -0
  61. package/dist/{chunk-YQNADJCT.js → chunk-CMZLMIZI.js} +2 -2
  62. package/dist/{chunk-KVDUDYEN.js → chunk-DDRNDPX4.js} +2 -2
  63. package/dist/{chunk-PW6GURU3.js → chunk-EKIQBGAY.js} +2 -2
  64. package/dist/{chunk-QJGTSCJN.js → chunk-FGRV3X3Y.js} +19 -19
  65. package/dist/{chunk-2IT7WFYE.js → chunk-FWIROLS6.js} +2 -1
  66. package/dist/chunk-FWIROLS6.js.map +1 -0
  67. package/dist/{chunk-X7EJF46S.js → chunk-H4RWKZE2.js} +2 -2
  68. package/dist/{chunk-A6D7A2FW.js → chunk-IHG27THY.js} +4 -4
  69. package/dist/{chunk-PUEAEQSN.js → chunk-ISMZIMD3.js} +2 -2
  70. package/dist/{chunk-LEG7XWS2.js → chunk-IXSTQGYV.js} +2 -2
  71. package/dist/{chunk-CMN5AWAZ.js → chunk-J2KFC47S.js} +2 -2
  72. package/dist/{chunk-K47C6M2C.js → chunk-M75TBFKQ.js} +2 -2
  73. package/dist/{chunk-7V2SGZ3H.js → chunk-NE566K4E.js} +2 -2
  74. package/dist/{chunk-YROCXMCK.js → chunk-RJGPH2Q3.js} +2 -2
  75. package/dist/{chunk-UXFOGILU.js → chunk-SBHQBC37.js} +2 -2
  76. package/dist/{chunk-QYGIQ5NM.js → chunk-SHHT4JTC.js} +2 -2
  77. package/dist/{chunk-TQOU3VAT.js → chunk-SSOMTUCA.js} +1 -1
  78. package/dist/{chunk-NRST7W5Q.js → chunk-UI2UP7XX.js} +2 -2
  79. package/dist/{chunk-C4KKM62E.js → chunk-UU5LHD6J.js} +2 -2
  80. package/dist/{chunk-EWC6W6AB.js → chunk-UXA5L2DZ.js} +2 -2
  81. package/dist/{chunk-XL7FK7PJ.js → chunk-Y56J7CXW.js} +33 -16
  82. package/dist/{chunk-XL7FK7PJ.js.map → chunk-Y56J7CXW.js.map} +1 -1
  83. package/dist/{cli-B-fHk59D.d.ts → cli-A4AIhv9e.d.ts} +3 -3
  84. package/dist/cli.d.ts +5 -5
  85. package/dist/cli.js +28 -27
  86. package/dist/compounding/engine.d.ts +1 -1
  87. package/dist/compounding/engine.js +3 -3
  88. package/dist/compounding/preference-consolidator.d.ts +1 -1
  89. package/dist/compression-optimizer.d.ts +1 -1
  90. package/dist/config.d.ts +1 -1
  91. package/dist/config.js +1 -1
  92. package/dist/connectors/codex-materialize-runner.d.ts +1 -1
  93. package/dist/connectors/codex-materialize-runner.js +3 -3
  94. package/dist/connectors/codex-materialize.d.ts +1 -1
  95. package/dist/connectors/index.d.ts +1 -1
  96. package/dist/connectors/index.js +3 -3
  97. package/dist/consolidation-provenance-check.d.ts +1 -1
  98. package/dist/consolidation-undo.d.ts +1 -1
  99. package/dist/contradiction/index.d.ts +1 -1
  100. package/dist/conversation-index/backend.d.ts +1 -1
  101. package/dist/conversation-index/chunker.d.ts +1 -1
  102. package/dist/conversation-index/faiss-adapter.d.ts +1 -1
  103. package/dist/conversation-index/indexer.d.ts +1 -1
  104. package/dist/conversation-index/search.d.ts +1 -1
  105. package/dist/day-summary.d.ts +1 -1
  106. package/dist/delinearize.d.ts +1 -1
  107. package/dist/direct-answer-wiring.d.ts +1 -1
  108. package/dist/direct-answer.d.ts +1 -1
  109. package/dist/embedding-fallback.d.ts +1 -1
  110. package/dist/enrichment/index.d.ts +1 -1
  111. package/dist/entity-retrieval.d.ts +1 -1
  112. package/dist/entity-retrieval.js +3 -3
  113. package/dist/entity-schema.d.ts +1 -1
  114. package/dist/explicit-capture.d.ts +3 -3
  115. package/dist/extraction-judge-telemetry.d.ts +1 -1
  116. package/dist/extraction-judge-training.d.ts +1 -1
  117. package/dist/extraction-judge.d.ts +1 -1
  118. package/dist/extraction-judge.js +2 -2
  119. package/dist/extraction.d.ts +1 -1
  120. package/dist/extraction.js +2 -2
  121. package/dist/fallback-llm.d.ts +1 -1
  122. package/dist/fallback-llm.js +1 -1
  123. package/dist/{graph-edge-decay-5ZOK7ZNO.js → graph-edge-decay-PUFNHOBS.js} +2 -2
  124. package/dist/graph-snapshot.js +2 -2
  125. package/dist/graph.d.ts +3 -0
  126. package/dist/graph.js +1 -1
  127. package/dist/identity-continuity.d.ts +1 -1
  128. package/dist/importance.d.ts +1 -1
  129. package/dist/index.d.ts +9 -9
  130. package/dist/index.js +40 -40
  131. package/dist/intent.d.ts +1 -1
  132. package/dist/lcm/engine.d.ts +1 -1
  133. package/dist/lcm/index.d.ts +1 -1
  134. package/dist/lcm/tools.d.ts +1 -1
  135. package/dist/lifecycle.d.ts +1 -1
  136. package/dist/live-connectors-runner.d.ts +1 -1
  137. package/dist/local-llm.d.ts +1 -1
  138. package/dist/maintenance/memory-governance-cron.d.ts +8 -0
  139. package/dist/maintenance/memory-governance-cron.js +1 -1
  140. package/dist/maintenance/memory-governance.d.ts +1 -1
  141. package/dist/maintenance/memory-governance.js +3 -3
  142. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +3 -3
  143. package/dist/maintenance/rebuild-memory-projection.js +4 -4
  144. package/dist/mcp-memory-inspector-app.d.ts +4 -4
  145. package/dist/memory-action-policy.d.ts +1 -1
  146. package/dist/memory-cache.d.ts +1 -1
  147. package/dist/memory-lifecycle-ledger-utils.d.ts +1 -1
  148. package/dist/memory-projection-store.d.ts +1 -1
  149. package/dist/memory-provenance.d.ts +1 -1
  150. package/dist/memory-worth-outcomes.d.ts +1 -1
  151. package/dist/models-json.d.ts +1 -1
  152. package/dist/namespaces/migrate.d.ts +1 -1
  153. package/dist/namespaces/migrate.js +4 -4
  154. package/dist/namespaces/principal.d.ts +1 -1
  155. package/dist/namespaces/search.d.ts +1 -1
  156. package/dist/namespaces/storage.d.ts +1 -1
  157. package/dist/namespaces/storage.js +3 -3
  158. package/dist/native-knowledge.d.ts +1 -1
  159. package/dist/operator-toolkit.d.ts +1 -1
  160. package/dist/operator-toolkit.js +8 -8
  161. package/dist/{orchestrator-CoqytbK_.d.ts → orchestrator-BEDTiuEO.d.ts} +20 -5
  162. package/dist/orchestrator.d.ts +3 -3
  163. package/dist/orchestrator.js +24 -24
  164. package/dist/patterns-cli.d.ts +1 -1
  165. package/dist/policy-runtime.d.ts +1 -1
  166. package/dist/qmd-recall-cache.d.ts +1 -1
  167. package/dist/qmd.d.ts +1 -1
  168. package/dist/recall-disclosure-escalation.d.ts +1 -1
  169. package/dist/recall-explain-renderer.d.ts +1 -1
  170. package/dist/recall-explain-renderer.js +3 -3
  171. package/dist/recall-planner-llm.d.ts +1 -1
  172. package/dist/recall-planner-llm.js +1 -1
  173. package/dist/recall-state.d.ts +3 -1
  174. package/dist/recall-state.js +1 -1
  175. package/dist/recall-tag-filter.d.ts +1 -1
  176. package/dist/recall-xray-cli.d.ts +1 -1
  177. package/dist/recall-xray-cli.js +4 -4
  178. package/dist/recall-xray-renderer.d.ts +1 -1
  179. package/dist/recall-xray-renderer.js +3 -3
  180. package/dist/recall-xray.d.ts +1 -1
  181. package/dist/recall-xray.js +2 -2
  182. package/dist/resolve-auth-token.d.ts +1 -1
  183. package/dist/resume-bundles.js +4 -4
  184. package/dist/retrieval-agents.d.ts +1 -1
  185. package/dist/retrieval-tiers.d.ts +1 -1
  186. package/dist/routing/engine.d.ts +1 -1
  187. package/dist/routing/store.d.ts +1 -1
  188. package/dist/search/embed-helper.d.ts +1 -1
  189. package/dist/search/factory.d.ts +1 -1
  190. package/dist/search/index.d.ts +1 -1
  191. package/dist/search/lancedb-backend.d.ts +1 -1
  192. package/dist/search/meilisearch-backend.d.ts +1 -1
  193. package/dist/search/noop-backend.d.ts +1 -1
  194. package/dist/search/orama-backend.d.ts +1 -1
  195. package/dist/search/port.d.ts +1 -1
  196. package/dist/search/remote-backend.d.ts +1 -1
  197. package/dist/{semantic-consolidation-BPs6BURk.d.ts → semantic-consolidation-Byut1ufK.d.ts} +1 -1
  198. package/dist/semantic-consolidation.d.ts +2 -2
  199. package/dist/semantic-consolidation.js +4 -4
  200. package/dist/semantic-rule-promotion.js +3 -3
  201. package/dist/semantic-rule-verifier.d.ts +1 -1
  202. package/dist/semantic-rule-verifier.js +3 -3
  203. package/dist/session-observer-bands.d.ts +1 -1
  204. package/dist/session-observer-state.d.ts +1 -1
  205. package/dist/shared-context/manager.d.ts +1 -1
  206. package/dist/signal.d.ts +1 -1
  207. package/dist/storage.d.ts +1 -1
  208. package/dist/storage.js +2 -2
  209. package/dist/summarizer.d.ts +1 -1
  210. package/dist/summarizer.js +3 -3
  211. package/dist/summary-snapshot.d.ts +1 -1
  212. package/dist/temporal-supersession.d.ts +1 -1
  213. package/dist/temporal-validity.d.ts +1 -1
  214. package/dist/threading.d.ts +1 -1
  215. package/dist/tier-migration.d.ts +1 -1
  216. package/dist/tier-routing.d.ts +1 -1
  217. package/dist/topics.d.ts +1 -1
  218. package/dist/transcript.d.ts +1 -1
  219. package/dist/transcript.js +2 -2
  220. package/dist/{types-CpMPD8xl.d.ts → types-BzA1FKbg.d.ts} +4 -0
  221. package/dist/types.d.ts +1 -1
  222. package/dist/types.js +1 -1
  223. package/dist/utility-runtime.d.ts +1 -1
  224. package/dist/verified-recall.js +3 -3
  225. package/package.json +1 -1
  226. package/src/access-http.test.ts +110 -2
  227. package/src/access-http.ts +117 -1
  228. package/src/access-mcp.ts +15 -6
  229. package/src/access-schema.ts +14 -0
  230. package/src/access-service-namespace.test.ts +740 -0
  231. package/src/access-service.ts +226 -4
  232. package/src/config.ts +14 -0
  233. package/src/fallback-llm.ts +16 -0
  234. package/src/graph.ts +39 -17
  235. package/src/index.ts +9 -1
  236. package/src/maintenance/memory-governance-cron.ts +113 -30
  237. package/src/orchestrator.ts +1456 -336
  238. package/src/recall-state.ts +3 -0
  239. package/src/types.ts +4 -0
  240. package/dist/chunk-2IT7WFYE.js.map +0 -1
  241. package/dist/chunk-6BDVBBBY.js.map +0 -1
  242. package/dist/chunk-723OMPUI.js.map +0 -1
  243. package/dist/chunk-A3HKTPPV.js.map +0 -1
  244. package/dist/chunk-BK35NOJL.js.map +0 -1
  245. package/dist/chunk-FPNQF475.js.map +0 -1
  246. package/dist/chunk-NFNQ7TWF.js.map +0 -1
  247. package/dist/chunk-TFICNXXU.js.map +0 -1
  248. package/dist/chunk-WD2W4234.js.map +0 -1
  249. package/dist/chunk-XM6M6DHG.js.map +0 -1
  250. /package/dist/{auto-sync-RFADEHIQ.js.map → auto-sync-54QQHOG5.js.map} +0 -0
  251. /package/dist/{chunk-3RDYU3JS.js.map → chunk-3AZDLWDW.js.map} +0 -0
  252. /package/dist/{chunk-3EJ5OOZ3.js.map → chunk-3SF7QNKF.js.map} +0 -0
  253. /package/dist/{chunk-242XFZ36.js.map → chunk-7OH7KPF5.js.map} +0 -0
  254. /package/dist/{chunk-HZVIYZYN.js.map → chunk-7R37SOT4.js.map} +0 -0
  255. /package/dist/{chunk-7A2QKUUA.js.map → chunk-7XRSLMUD.js.map} +0 -0
  256. /package/dist/{chunk-JCLECECB.js.map → chunk-A3UPMOJZ.js.map} +0 -0
  257. /package/dist/{chunk-YCX45GOQ.js.map → chunk-AFH2JXSF.js.map} +0 -0
  258. /package/dist/{chunk-3XNMN242.js.map → chunk-BTY5XQG3.js.map} +0 -0
  259. /package/dist/{chunk-QHXW3LZV.js.map → chunk-C3EJ3UIS.js.map} +0 -0
  260. /package/dist/{chunk-4S3N6HFG.js.map → chunk-C6XO6ONP.js.map} +0 -0
  261. /package/dist/{chunk-YQNADJCT.js.map → chunk-CMZLMIZI.js.map} +0 -0
  262. /package/dist/{chunk-KVDUDYEN.js.map → chunk-DDRNDPX4.js.map} +0 -0
  263. /package/dist/{chunk-PW6GURU3.js.map → chunk-EKIQBGAY.js.map} +0 -0
  264. /package/dist/{chunk-QJGTSCJN.js.map → chunk-FGRV3X3Y.js.map} +0 -0
  265. /package/dist/{chunk-X7EJF46S.js.map → chunk-H4RWKZE2.js.map} +0 -0
  266. /package/dist/{chunk-A6D7A2FW.js.map → chunk-IHG27THY.js.map} +0 -0
  267. /package/dist/{chunk-PUEAEQSN.js.map → chunk-ISMZIMD3.js.map} +0 -0
  268. /package/dist/{chunk-LEG7XWS2.js.map → chunk-IXSTQGYV.js.map} +0 -0
  269. /package/dist/{chunk-CMN5AWAZ.js.map → chunk-J2KFC47S.js.map} +0 -0
  270. /package/dist/{chunk-K47C6M2C.js.map → chunk-M75TBFKQ.js.map} +0 -0
  271. /package/dist/{chunk-7V2SGZ3H.js.map → chunk-NE566K4E.js.map} +0 -0
  272. /package/dist/{chunk-YROCXMCK.js.map → chunk-RJGPH2Q3.js.map} +0 -0
  273. /package/dist/{chunk-UXFOGILU.js.map → chunk-SBHQBC37.js.map} +0 -0
  274. /package/dist/{chunk-QYGIQ5NM.js.map → chunk-SHHT4JTC.js.map} +0 -0
  275. /package/dist/{chunk-TQOU3VAT.js.map → chunk-SSOMTUCA.js.map} +0 -0
  276. /package/dist/{chunk-NRST7W5Q.js.map → chunk-UI2UP7XX.js.map} +0 -0
  277. /package/dist/{chunk-C4KKM62E.js.map → chunk-UU5LHD6J.js.map} +0 -0
  278. /package/dist/{chunk-EWC6W6AB.js.map → chunk-UXA5L2DZ.js.map} +0 -0
  279. /package/dist/{graph-edge-decay-5ZOK7ZNO.js.map → graph-edge-decay-PUFNHOBS.js.map} +0 -0
@@ -7,18 +7,18 @@ import {
7
7
  materializeAfterSemanticConsolidation,
8
8
  parseConsolidationResponse,
9
9
  parseOperatorAwareConsolidationResponse
10
- } from "./chunk-X7EJF46S.js";
11
- import "./chunk-7A2QKUUA.js";
10
+ } from "./chunk-H4RWKZE2.js";
11
+ import "./chunk-7XRSLMUD.js";
12
12
  import "./chunk-LN4YGHTM.js";
13
13
  import {
14
14
  resolveExtensionsRoot
15
15
  } from "./chunk-JLNBQWZ2.js";
16
16
  import "./chunk-3UXOZBHV.js";
17
- import "./chunk-QYGIQ5NM.js";
17
+ import "./chunk-SHHT4JTC.js";
18
18
  import "./chunk-M7XQSUBB.js";
19
19
  import "./chunk-5UZXUTVO.js";
20
20
  import "./chunk-J6A3CX5N.js";
21
- import "./chunk-FPNQF475.js";
21
+ import "./chunk-3F7RMHC4.js";
22
22
  import "./chunk-RULE4VG5.js";
23
23
  import "./chunk-SCU65EZI.js";
24
24
  import "./chunk-MB5RSUW6.js";
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  promoteSemanticRuleFromMemory,
3
3
  setSemanticRulePromotionTestHooks
4
- } from "./chunk-PUEAEQSN.js";
5
- import "./chunk-QYGIQ5NM.js";
4
+ } from "./chunk-ISMZIMD3.js";
5
+ import "./chunk-SHHT4JTC.js";
6
6
  import "./chunk-M7XQSUBB.js";
7
7
  import "./chunk-5UZXUTVO.js";
8
8
  import "./chunk-J6A3CX5N.js";
9
- import "./chunk-FPNQF475.js";
9
+ import "./chunk-3F7RMHC4.js";
10
10
  import "./chunk-RULE4VG5.js";
11
11
  import "./chunk-SCU65EZI.js";
12
12
  import "./chunk-MB5RSUW6.js";
@@ -1,4 +1,4 @@
1
- import { g as MemoryFile } from './types-CpMPD8xl.js';
1
+ import { g as MemoryFile } from './types-BzA1FKbg.js';
2
2
  import './types-BliCnURB.js';
3
3
  import './index-DJ9QWMw-.js';
4
4
 
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  searchVerifiedSemanticRules
3
- } from "./chunk-4S3N6HFG.js";
4
- import "./chunk-QYGIQ5NM.js";
3
+ } from "./chunk-C6XO6ONP.js";
4
+ import "./chunk-SHHT4JTC.js";
5
5
  import "./chunk-M7XQSUBB.js";
6
6
  import "./chunk-5UZXUTVO.js";
7
7
  import "./chunk-J6A3CX5N.js";
8
- import "./chunk-FPNQF475.js";
8
+ import "./chunk-3F7RMHC4.js";
9
9
  import "./chunk-RULE4VG5.js";
10
10
  import "./chunk-SCU65EZI.js";
11
11
  import "./chunk-MB5RSUW6.js";
@@ -1,4 +1,4 @@
1
- import { a1 as SessionObserverBandConfig } from './types-CpMPD8xl.js';
1
+ import { a1 as SessionObserverBandConfig } from './types-BzA1FKbg.js';
2
2
  import './types-BliCnURB.js';
3
3
  import './index-DJ9QWMw-.js';
4
4
 
@@ -1,4 +1,4 @@
1
- import { a1 as SessionObserverBandConfig } from './types-CpMPD8xl.js';
1
+ import { a1 as SessionObserverBandConfig } from './types-BzA1FKbg.js';
2
2
  import './types-BliCnURB.js';
3
3
  import './index-DJ9QWMw-.js';
4
4
 
@@ -1,5 +1,5 @@
1
1
  import { z } from 'zod';
2
- import { P as PluginConfig } from '../types-CpMPD8xl.js';
2
+ import { P as PluginConfig } from '../types-BzA1FKbg.js';
3
3
  import '../types-BliCnURB.js';
4
4
  import '../index-DJ9QWMw-.js';
5
5
 
package/dist/signal.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { ar as SignalScanResult } from './types-CpMPD8xl.js';
1
+ import { ar as SignalScanResult } from './types-BzA1FKbg.js';
2
2
  import './types-BliCnURB.js';
3
3
  import './index-DJ9QWMw-.js';
4
4
 
package/dist/storage.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { VersioningConfig } from './page-versioning.js';
2
2
  import { ConsolidationOperator } from './consolidation-operator.js';
3
- import { P as PluginConfig, h as MemoryStatus, M as MemoryCategory, I as ImportanceScore, i as MemoryLink, j as MemoryFrontmatter, g as MemoryFile, E as EntityStructuredSection, k as BufferState, l as MetaState, m as MemoryActionEvent, n as MemoryLifecycleEvent, o as BufferSurpriseEvent, B as BehaviorSignalEvent, C as CompressionGuidelineOptimizerState, p as ContinuityIncidentOpenInput, q as ContinuityIncidentRecord, r as ContinuityIncidentCloseInput, s as ContinuityImprovementLoop, t as ContinuityLoopUpsertInput, u as ContinuityLoopReviewInput, F as FileHygieneConfig, v as EntityRelationship, w as EntityActivityEntry, x as EntityFile, y as AccessTrackingEntry, z as MemoryProjectionCurrentState, D as MemorySummary, T as TopicScore } from './types-CpMPD8xl.js';
3
+ import { P as PluginConfig, h as MemoryStatus, M as MemoryCategory, I as ImportanceScore, i as MemoryLink, j as MemoryFrontmatter, g as MemoryFile, E as EntityStructuredSection, k as BufferState, l as MetaState, m as MemoryActionEvent, n as MemoryLifecycleEvent, o as BufferSurpriseEvent, B as BehaviorSignalEvent, C as CompressionGuidelineOptimizerState, p as ContinuityIncidentOpenInput, q as ContinuityIncidentRecord, r as ContinuityIncidentCloseInput, s as ContinuityImprovementLoop, t as ContinuityLoopUpsertInput, u as ContinuityLoopReviewInput, F as FileHygieneConfig, v as EntityRelationship, w as EntityActivityEntry, x as EntityFile, y as AccessTrackingEntry, z as MemoryProjectionCurrentState, D as MemorySummary, T as TopicScore } from './types-BzA1FKbg.js';
4
4
  import { ProjectedMemoryBrowseOptions, ProjectedMemoryBrowsePage, readProjectedGovernanceRecord } from './memory-projection-store.js';
5
5
  import './types-BliCnURB.js';
6
6
  import './index-DJ9QWMw-.js';
package/dist/storage.js CHANGED
@@ -9,11 +9,11 @@ import {
9
9
  parseEntityFile,
10
10
  serializeEntityFile,
11
11
  stripAttributesSuffix
12
- } from "./chunk-QYGIQ5NM.js";
12
+ } from "./chunk-SHHT4JTC.js";
13
13
  import "./chunk-M7XQSUBB.js";
14
14
  import "./chunk-5UZXUTVO.js";
15
15
  import "./chunk-J6A3CX5N.js";
16
- import "./chunk-FPNQF475.js";
16
+ import "./chunk-3F7RMHC4.js";
17
17
  import "./chunk-RULE4VG5.js";
18
18
  import "./chunk-SCU65EZI.js";
19
19
  import "./chunk-MB5RSUW6.js";
@@ -1,5 +1,5 @@
1
1
  import { ModelRegistry } from './model-registry.js';
2
- import { P as PluginConfig, G as GatewayConfig, _ as TranscriptEntry, a0 as HourlySummary } from './types-CpMPD8xl.js';
2
+ import { P as PluginConfig, G as GatewayConfig, _ as TranscriptEntry, a0 as HourlySummary } from './types-BzA1FKbg.js';
3
3
  import { TranscriptManager } from './transcript.js';
4
4
  import './types-BliCnURB.js';
5
5
  import './index-DJ9QWMw-.js';
@@ -1,15 +1,15 @@
1
1
  import {
2
2
  HourlySummarizer
3
- } from "./chunk-HZVIYZYN.js";
3
+ } from "./chunk-7R37SOT4.js";
4
4
  import "./chunk-XJNBEDFE.js";
5
5
  import "./chunk-XZ4WBBB5.js";
6
6
  import "./chunk-77NAFXUD.js";
7
- import "./chunk-FF4KLI5W.js";
8
- import "./chunk-723OMPUI.js";
7
+ import "./chunk-A3BS64GV.js";
9
8
  import "./chunk-B5XMS73R.js";
10
9
  import "./chunk-7SI52C65.js";
11
10
  import "./chunk-L2EXJQJP.js";
12
11
  import "./chunk-RK6F44Y6.js";
12
+ import "./chunk-FF4KLI5W.js";
13
13
  import "./chunk-NNVTUXEB.js";
14
14
  import "./chunk-RGMVMVMF.js";
15
15
  import "./chunk-EYIEWJNI.js";
@@ -1,4 +1,4 @@
1
- import { a0 as HourlySummary } from './types-CpMPD8xl.js';
1
+ import { a0 as HourlySummary } from './types-BzA1FKbg.js';
2
2
  import './types-BliCnURB.js';
3
3
  import './index-DJ9QWMw-.js';
4
4
 
@@ -1,4 +1,4 @@
1
- import { j as MemoryFrontmatter } from './types-CpMPD8xl.js';
1
+ import { j as MemoryFrontmatter } from './types-BzA1FKbg.js';
2
2
  import { StorageManager } from './storage.js';
3
3
  import './types-BliCnURB.js';
4
4
  import './index-DJ9QWMw-.js';
@@ -1,4 +1,4 @@
1
- import { j as MemoryFrontmatter } from './types-CpMPD8xl.js';
1
+ import { j as MemoryFrontmatter } from './types-BzA1FKbg.js';
2
2
  import './types-BliCnURB.js';
3
3
  import './index-DJ9QWMw-.js';
4
4
 
@@ -1,4 +1,4 @@
1
- import { Y as BufferTurn, as as ConversationThread } from './types-CpMPD8xl.js';
1
+ import { Y as BufferTurn, as as ConversationThread } from './types-BzA1FKbg.js';
2
2
  import './types-BliCnURB.js';
3
3
  import './index-DJ9QWMw-.js';
4
4
 
@@ -1,4 +1,4 @@
1
- import { g as MemoryFile } from './types-CpMPD8xl.js';
1
+ import { g as MemoryFile } from './types-BzA1FKbg.js';
2
2
  import { StorageManager } from './storage.js';
3
3
  import { MemoryTier } from './tier-routing.js';
4
4
  import { SearchBackend } from './search/port.js';
@@ -1,4 +1,4 @@
1
- import { g as MemoryFile } from './types-CpMPD8xl.js';
1
+ import { g as MemoryFile } from './types-BzA1FKbg.js';
2
2
  import { LifecycleSignals } from './lifecycle.js';
3
3
  import './types-BliCnURB.js';
4
4
  import './index-DJ9QWMw-.js';
package/dist/topics.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { g as MemoryFile, T as TopicScore } from './types-CpMPD8xl.js';
1
+ import { g as MemoryFile, T as TopicScore } from './types-BzA1FKbg.js';
2
2
  import './types-BliCnURB.js';
3
3
  import './index-DJ9QWMw-.js';
4
4
 
@@ -1,4 +1,4 @@
1
- import { P as PluginConfig, _ as TranscriptEntry, $ as Checkpoint } from './types-CpMPD8xl.js';
1
+ import { P as PluginConfig, _ as TranscriptEntry, $ as Checkpoint } from './types-BzA1FKbg.js';
2
2
  import { SessionIntegrityReport } from './session-integrity.js';
3
3
  import './types-BliCnURB.js';
4
4
  import './index-DJ9QWMw-.js';
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  TranscriptManager
3
- } from "./chunk-A6D7A2FW.js";
4
- import "./chunk-FF4KLI5W.js";
3
+ } from "./chunk-IHG27THY.js";
5
4
  import "./chunk-KFY3SGN7.js";
5
+ import "./chunk-FF4KLI5W.js";
6
6
  import "./chunk-2ODBA7MQ.js";
7
7
  import "./chunk-PZ5AY32C.js";
8
8
  export {
@@ -1222,6 +1222,8 @@ interface PluginConfig {
1222
1222
  judgeTrainingDir: string;
1223
1223
  hourlySummariesEnabled: boolean;
1224
1224
  daySummaryEnabled: boolean;
1225
+ /** Timezone override for the day summary cron (issue #1475). */
1226
+ daySummaryTimezone?: string;
1225
1227
  /** If true, Engram may attempt to auto-register an hourly summary cron job (default off). */
1226
1228
  hourlySummaryCronAutoRegister: boolean;
1227
1229
  /** If true, Engram may attempt to auto-register the nightly governance cron job (default off). */
@@ -1547,6 +1549,8 @@ interface PluginConfig {
1547
1549
  * consolidation. When set, this chain is resolved through gateway providers
1548
1550
  * instead of using gatewayAgentId or agents.defaults.model. All task paths
1549
1551
  * route through the shared `gatewayTaskChainOptions` helper.
1552
+ * LCM summarization is the one fast-tier exception: if `fastGatewayAgentId`
1553
+ * is configured, LCM uses that persona before falling back to this chain.
1550
1554
  *
1551
1555
  * Only takes effect when `modelSource: "gateway"`; ignored (with a startup
1552
1556
  * warning) under `modelSource: "plugin"`. See issue #1365 / PR #1370.
package/dist/types.d.ts CHANGED
@@ -1,3 +1,3 @@
1
1
  import './types-BliCnURB.js';
2
2
  import './index-DJ9QWMw-.js';
3
- export { y as AccessTrackingEntry, A as ActiveRecallChatType, d as ActiveRecallModelFallbackPolicy, b as ActiveRecallPromptStyle, a as ActiveRecallQueryMode, c as ActiveRecallThinking, a7 as AgentAccessAuthToken, b2 as AgentAccessHttpConfig, b3 as AgentDefaultsConfig, b4 as AgentPersona, f as AgentPersonaModelConfig, b5 as BehaviorLoopAdjustment, e as BehaviorLoopPolicyState, b6 as BehaviorSignalDirection, B as BehaviorSignalEvent, b7 as BehaviorSignalType, aH as BootstrapOptions, aI as BootstrapResult, V as BriefingActiveThread, b8 as BriefingCalendarSourceError, aO as BriefingConfig, Q as BriefingFocus, O as BriefingFollowup, aP as BriefingOpenCommitment, X as BriefingRecentEntity, W as BriefingResult, N as BriefingSections, aQ as BriefingWindow, b9 as BufferEntryState, k as BufferState, o as BufferSurpriseEvent, Y as BufferTurn, U as CalendarEvent, S as CalendarSource, ba as CaptureMode, $ as Checkpoint, bb as CodexCliReasoningEffort, bc as CodexCompactionFlushMode, aR as CodexCompatConfig, bd as CodexConnectorConfig, aG as CodingContext, aL as CodingModeConfig, be as CompressionGuidelineActivationState, a9 as CompressionGuidelineOptimizerActionSummary, a8 as CompressionGuidelineOptimizerEventCounts, aa as CompressionGuidelineOptimizerRuleUpdate, bf as CompressionGuidelineOptimizerSourceWindow, C as CompressionGuidelineOptimizerState, bg as ConfidenceTier, bh as ConsolidationAction, bi as ConsolidationItem, aJ as ConsolidationObservation, ag as ConsolidationResult, s as ContinuityImprovementLoop, r as ContinuityIncidentCloseInput, p as ContinuityIncidentOpenInput, q as ContinuityIncidentRecord, bj as ContinuityIncidentState, bk as ContinuityLoopCadence, u as ContinuityLoopReviewInput, bl as ContinuityLoopStatus, t as ContinuityLoopUpsertInput, bm as ContradictionScanConfig, as as ConversationThread, bn as CronConversationRecallMode, bo as CronRecallMode, aS as DEFAULT_RECALL_DISCLOSURE, ah as DaySummaryResult, bp as DreamingConfig, bq as DreamingNarrativePromptStyle, br as DreamsDeepSleepConfig, bs as DreamsLightSleepConfig, au as DreamsPhase, bt as DreamsPhaseStatus, bu as DreamsPhasesConfig, bv as DreamsRemConfig, av as DreamsRunResult, at as DreamsStatusResult, bw as EngramTraceEvent, w as EntityActivityEntry, x as EntityFile, ac as EntityMention, v as EntityRelationship, ad as EntitySchemaDefinition, ae as EntitySchemaSectionDefinition, E as EntityStructuredSection, aK as EntityTimelineEntry, aT as ExtractedFact, bx as ExtractedProcedureStep, by as ExtractedQuestion, bz as ExtractedReasoningTrace, bA as ExtractedReasoningTraceStep, bB as ExtractedRelationship, bC as ExtractionPassSource, af as ExtractionResult, F as FileHygieneConfig, G as GatewayConfig, bD as GitHubLiveConnectorConfig, bE as GmailLiveConnectorConfig, bF as GoogleDriveLiveConnectorConfig, bG as HeartbeatConfig, bH as HeartbeatDetectionMode, a0 as HourlySummary, J as IdentityInjectionMode, a5 as ImportanceLevel, I as ImportanceScore, a2 as LifecycleState, L as LiveConnectorsConfig, bI as LlmTraceCallback, bJ as LlmTraceEvent, ak as MemoryActionEligibilityContext, aU as MemoryActionEligibilitySource, m as MemoryActionEvent, bK as MemoryActionOutcome, bL as MemoryActionPolicyDecision, al as MemoryActionPolicyResult, bM as MemoryActionStatus, ab as MemoryActionType, M as MemoryCategory, g as MemoryFile, j as MemoryFrontmatter, ai as MemoryIntent, n as MemoryLifecycleEvent, am as MemoryLifecycleEventType, an as MemoryLifecycleStateSummary, i as MemoryLink, bN as MemoryLinkType, aV as MemoryObservation, bO as MemoryOsPresetName, z as MemoryProjectionCurrentState, aW as MemoryScope, h as MemoryStatus, D as MemorySummary, l as MetaState, bP as ModelApi, bQ as ModelDefinitionConfig, bR as ModelProviderAuthMode, ao as ModelProviderConfig, bS as NamespacePolicy, ap as NativeKnowledgeConfig, bT as NativeKnowledgeFolderRuleConfig, bU as NativeKnowledgeObsidianVaultConfig, bV as NativeKnowledgeOpenClawWorkspaceConfig, bW as NotionLiveConnectorConfig, P as PluginConfig, a4 as PolicyClass, bX as PrincipalFromSessionKeyMode, bY as PrincipalRule, bZ as ProceduralConfig, aj as QmdSearchExplain, Z as QmdSearchResult, b_ as QuestionEntry, aX as RECALL_DISCLOSURE_LEVELS, b$ as ReasoningEffort, K as RecallDisclosure, c0 as RecallPipelineConfig, H as RecallPlanMode, c1 as RecallSectionConfig, R as RecallTierExplain, c2 as RecallTraceEvent, c3 as RelevanceFeedback, aq as RetrievalTier, c4 as SPECULATIVE_TTL_DAYS, c5 as ScoredEntity, a6 as SecretRef, c6 as SemanticChunkingConfigShape, a1 as SessionObserverBandConfig, c7 as SignalLevel, ar as SignalScanResult, c8 as SlotBehaviorConfig, c9 as SlotMismatchMode, T as TopicScore, _ as TranscriptEntry, ca as TriggerMode, a3 as VerificationState, cb as confidenceTier, b1 as isRecallDisclosure } from './types-CpMPD8xl.js';
3
+ export { y as AccessTrackingEntry, A as ActiveRecallChatType, d as ActiveRecallModelFallbackPolicy, b as ActiveRecallPromptStyle, a as ActiveRecallQueryMode, c as ActiveRecallThinking, a7 as AgentAccessAuthToken, b2 as AgentAccessHttpConfig, b3 as AgentDefaultsConfig, b4 as AgentPersona, f as AgentPersonaModelConfig, b5 as BehaviorLoopAdjustment, e as BehaviorLoopPolicyState, b6 as BehaviorSignalDirection, B as BehaviorSignalEvent, b7 as BehaviorSignalType, aH as BootstrapOptions, aI as BootstrapResult, V as BriefingActiveThread, b8 as BriefingCalendarSourceError, aO as BriefingConfig, Q as BriefingFocus, O as BriefingFollowup, aP as BriefingOpenCommitment, X as BriefingRecentEntity, W as BriefingResult, N as BriefingSections, aQ as BriefingWindow, b9 as BufferEntryState, k as BufferState, o as BufferSurpriseEvent, Y as BufferTurn, U as CalendarEvent, S as CalendarSource, ba as CaptureMode, $ as Checkpoint, bb as CodexCliReasoningEffort, bc as CodexCompactionFlushMode, aR as CodexCompatConfig, bd as CodexConnectorConfig, aG as CodingContext, aL as CodingModeConfig, be as CompressionGuidelineActivationState, a9 as CompressionGuidelineOptimizerActionSummary, a8 as CompressionGuidelineOptimizerEventCounts, aa as CompressionGuidelineOptimizerRuleUpdate, bf as CompressionGuidelineOptimizerSourceWindow, C as CompressionGuidelineOptimizerState, bg as ConfidenceTier, bh as ConsolidationAction, bi as ConsolidationItem, aJ as ConsolidationObservation, ag as ConsolidationResult, s as ContinuityImprovementLoop, r as ContinuityIncidentCloseInput, p as ContinuityIncidentOpenInput, q as ContinuityIncidentRecord, bj as ContinuityIncidentState, bk as ContinuityLoopCadence, u as ContinuityLoopReviewInput, bl as ContinuityLoopStatus, t as ContinuityLoopUpsertInput, bm as ContradictionScanConfig, as as ConversationThread, bn as CronConversationRecallMode, bo as CronRecallMode, aS as DEFAULT_RECALL_DISCLOSURE, ah as DaySummaryResult, bp as DreamingConfig, bq as DreamingNarrativePromptStyle, br as DreamsDeepSleepConfig, bs as DreamsLightSleepConfig, au as DreamsPhase, bt as DreamsPhaseStatus, bu as DreamsPhasesConfig, bv as DreamsRemConfig, av as DreamsRunResult, at as DreamsStatusResult, bw as EngramTraceEvent, w as EntityActivityEntry, x as EntityFile, ac as EntityMention, v as EntityRelationship, ad as EntitySchemaDefinition, ae as EntitySchemaSectionDefinition, E as EntityStructuredSection, aK as EntityTimelineEntry, aT as ExtractedFact, bx as ExtractedProcedureStep, by as ExtractedQuestion, bz as ExtractedReasoningTrace, bA as ExtractedReasoningTraceStep, bB as ExtractedRelationship, bC as ExtractionPassSource, af as ExtractionResult, F as FileHygieneConfig, G as GatewayConfig, bD as GitHubLiveConnectorConfig, bE as GmailLiveConnectorConfig, bF as GoogleDriveLiveConnectorConfig, bG as HeartbeatConfig, bH as HeartbeatDetectionMode, a0 as HourlySummary, J as IdentityInjectionMode, a5 as ImportanceLevel, I as ImportanceScore, a2 as LifecycleState, L as LiveConnectorsConfig, bI as LlmTraceCallback, bJ as LlmTraceEvent, ak as MemoryActionEligibilityContext, aU as MemoryActionEligibilitySource, m as MemoryActionEvent, bK as MemoryActionOutcome, bL as MemoryActionPolicyDecision, al as MemoryActionPolicyResult, bM as MemoryActionStatus, ab as MemoryActionType, M as MemoryCategory, g as MemoryFile, j as MemoryFrontmatter, ai as MemoryIntent, n as MemoryLifecycleEvent, am as MemoryLifecycleEventType, an as MemoryLifecycleStateSummary, i as MemoryLink, bN as MemoryLinkType, aV as MemoryObservation, bO as MemoryOsPresetName, z as MemoryProjectionCurrentState, aW as MemoryScope, h as MemoryStatus, D as MemorySummary, l as MetaState, bP as ModelApi, bQ as ModelDefinitionConfig, bR as ModelProviderAuthMode, ao as ModelProviderConfig, bS as NamespacePolicy, ap as NativeKnowledgeConfig, bT as NativeKnowledgeFolderRuleConfig, bU as NativeKnowledgeObsidianVaultConfig, bV as NativeKnowledgeOpenClawWorkspaceConfig, bW as NotionLiveConnectorConfig, P as PluginConfig, a4 as PolicyClass, bX as PrincipalFromSessionKeyMode, bY as PrincipalRule, bZ as ProceduralConfig, aj as QmdSearchExplain, Z as QmdSearchResult, b_ as QuestionEntry, aX as RECALL_DISCLOSURE_LEVELS, b$ as ReasoningEffort, K as RecallDisclosure, c0 as RecallPipelineConfig, H as RecallPlanMode, c1 as RecallSectionConfig, R as RecallTierExplain, c2 as RecallTraceEvent, c3 as RelevanceFeedback, aq as RetrievalTier, c4 as SPECULATIVE_TTL_DAYS, c5 as ScoredEntity, a6 as SecretRef, c6 as SemanticChunkingConfigShape, a1 as SessionObserverBandConfig, c7 as SignalLevel, ar as SignalScanResult, c8 as SlotBehaviorConfig, c9 as SlotMismatchMode, T as TopicScore, _ as TranscriptEntry, ca as TriggerMode, a3 as VerificationState, cb as confidenceTier, b1 as isRecallDisclosure } from './types-BzA1FKbg.js';
package/dist/types.js CHANGED
@@ -4,7 +4,7 @@ import {
4
4
  SPECULATIVE_TTL_DAYS,
5
5
  confidenceTier,
6
6
  isRecallDisclosure
7
- } from "./chunk-FPNQF475.js";
7
+ } from "./chunk-3F7RMHC4.js";
8
8
  import "./chunk-PZ5AY32C.js";
9
9
  export {
10
10
  DEFAULT_RECALL_DISCLOSURE,
@@ -1,5 +1,5 @@
1
1
  import { TierRoutingPolicy } from './tier-routing.js';
2
- import './types-CpMPD8xl.js';
2
+ import './types-BzA1FKbg.js';
3
3
  import './types-BliCnURB.js';
4
4
  import './index-DJ9QWMw-.js';
5
5
  import './lifecycle.js';
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  searchVerifiedEpisodes
3
- } from "./chunk-YROCXMCK.js";
3
+ } from "./chunk-RJGPH2Q3.js";
4
4
  import "./chunk-HQ6NIBL6.js";
5
- import "./chunk-QYGIQ5NM.js";
5
+ import "./chunk-SHHT4JTC.js";
6
6
  import "./chunk-M7XQSUBB.js";
7
7
  import "./chunk-5UZXUTVO.js";
8
8
  import "./chunk-J6A3CX5N.js";
9
- import "./chunk-FPNQF475.js";
9
+ import "./chunk-3F7RMHC4.js";
10
10
  import "./chunk-RULE4VG5.js";
11
11
  import "./chunk-SCU65EZI.js";
12
12
  import "./chunk-MB5RSUW6.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@remnic/core",
3
- "version": "9.3.637",
3
+ "version": "9.3.639",
4
4
  "description": "Framework-agnostic Remnic memory engine — orchestrator, storage, extraction, search, trust zones",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -5,7 +5,7 @@ import path from "node:path";
5
5
  import test from "node:test";
6
6
  import { gzipSync } from "node:zlib";
7
7
 
8
- import { EngramAccessHttpServer } from "./access-http.js";
8
+ import { EngramAccessHttpServer, type RemnicAdminControls, type RemnicAdminDashboardStatus } from "./access-http.js";
9
9
  import { EngramAccessInputError, type EngramAccessService } from "./access-service.js";
10
10
  import { parseConfig } from "./config.js";
11
11
  import { readPair, writePair } from "./contradiction/contradiction-review.js";
@@ -117,7 +117,9 @@ test("HTTP admin console assets are public but API routes require bearer authent
117
117
  try {
118
118
  const shell = await fetch(`http://127.0.0.1:${status.port}/remnic/ui/`);
119
119
  assert.equal(shell.status, 200);
120
- assert.match(await shell.text(), /Remnic Admin Console/);
120
+ const shellText = await shell.text();
121
+ assert.match(shellText, /Remnic Admin Console/);
122
+ assert.doesNotMatch(shellText, /test-token/);
121
123
 
122
124
  const app = await fetch(`http://127.0.0.1:${status.port}/remnic/ui/app.js`);
123
125
  assert.equal(app.status, 200);
@@ -133,6 +135,112 @@ test("HTTP admin console assets are public but API routes require bearer authent
133
135
  }
134
136
  });
135
137
 
138
+ test("HTTP admin console can prefill the primary bearer token when explicitly enabled", async () => {
139
+ const service = {} as EngramAccessService;
140
+ const server = new EngramAccessHttpServer({
141
+ service,
142
+ port: 0,
143
+ authToken: "test-token",
144
+ adminConsolePrefillToken: true,
145
+ });
146
+
147
+ const status = await server.start();
148
+ try {
149
+ const unauthenticatedShell = await fetch(`http://127.0.0.1:${status.port}/engram/ui/`);
150
+ assert.equal(unauthenticatedShell.status, 200);
151
+ assert.doesNotMatch(await unauthenticatedShell.text(), /test-token/);
152
+
153
+ const shell = await fetch(`http://127.0.0.1:${status.port}/engram/ui/`, {
154
+ headers: { authorization: "Bearer test-token" },
155
+ });
156
+ assert.equal(shell.status, 200);
157
+ assert.equal(shell.headers.get("cache-control"), "private, no-store");
158
+ assert.equal(shell.headers.get("vary"), "authorization");
159
+ const shellText = await shell.text();
160
+ assert.match(
161
+ shellText,
162
+ /window\.__REMNIC_ADMIN_CONSOLE_PREFILL_TOKEN__="test-token"/,
163
+ );
164
+
165
+ const app = await fetch(`http://127.0.0.1:${status.port}/engram/ui/app.js`);
166
+ assert.equal(app.status, 200);
167
+ assert.doesNotMatch(await app.text(), /test-token/);
168
+ } finally {
169
+ await server.stop();
170
+ }
171
+ });
172
+
173
+ test("HTTP admin dashboard endpoints require bearer authentication and apply config patches", async () => {
174
+ const service = {} as EngramAccessService;
175
+ const patches: unknown[] = [];
176
+ const dashboard: RemnicAdminDashboardStatus = {
177
+ config: {
178
+ path: "/tmp/remnic/config.json",
179
+ exists: true,
180
+ writable: true,
181
+ restartRequired: false,
182
+ values: {
183
+ modelSource: "plugin",
184
+ model: "gpt-4.1-mini",
185
+ },
186
+ },
187
+ harnesses: [],
188
+ models: [],
189
+ features: [],
190
+ };
191
+ const adminControls: RemnicAdminControls = {
192
+ status: async () => dashboard,
193
+ update: async (patch) => {
194
+ patches.push(patch);
195
+ return {
196
+ ...dashboard,
197
+ config: {
198
+ ...dashboard.config,
199
+ restartRequired: true,
200
+ values: {
201
+ ...dashboard.config.values,
202
+ modelSource: "gateway",
203
+ gatewayAgentId: "sage-router",
204
+ },
205
+ },
206
+ };
207
+ },
208
+ };
209
+ const server = new EngramAccessHttpServer({
210
+ service,
211
+ port: 0,
212
+ authToken: "test-token",
213
+ adminControls,
214
+ });
215
+
216
+ const status = await server.start();
217
+ try {
218
+ const unauthorized = await fetch(`http://127.0.0.1:${status.port}/engram/v1/admin/dashboard`);
219
+ assert.equal(unauthorized.status, 401);
220
+
221
+ const dashboardResponse = await fetch(`http://127.0.0.1:${status.port}/engram/v1/admin/dashboard`, {
222
+ headers: { authorization: "Bearer test-token" },
223
+ });
224
+ assert.equal(dashboardResponse.status, 200);
225
+ assert.deepEqual(await dashboardResponse.json(), dashboard);
226
+
227
+ const patchResponse = await fetch(`http://127.0.0.1:${status.port}/remnic/v1/admin/config`, {
228
+ method: "PATCH",
229
+ headers: {
230
+ authorization: "Bearer test-token",
231
+ "content-type": "application/json",
232
+ },
233
+ body: JSON.stringify({ modelSource: "gateway", gatewayAgentId: "sage-router" }),
234
+ });
235
+ assert.equal(patchResponse.status, 200);
236
+ const body = await patchResponse.json() as RemnicAdminDashboardStatus;
237
+ assert.equal(body.config.restartRequired, true);
238
+ assert.deepEqual(patches, [{ modelSource: "gateway", gatewayAgentId: "sage-router" }]);
239
+ } finally {
240
+ await server.stop();
241
+ }
242
+ });
243
+
136
244
  test("HTTP coding-context endpoint accepts projectTag shorthand", async () => {
137
245
  const calls: unknown[] = [];
138
246
  const service = {
@@ -41,6 +41,8 @@ export interface EngramAccessHttpServerOptions {
41
41
  maxBodyBytes?: number;
42
42
  adminConsoleEnabled?: boolean;
43
43
  adminConsolePublicDir?: string;
44
+ /** Inject the primary auth token into the admin console shell for trusted launch surfaces. */
45
+ adminConsolePrefillToken?: boolean;
44
46
  trustPrincipalHeader?: boolean;
45
47
  /** Enable adapter-based identity resolution from request headers */
46
48
  enableAdapters?: boolean;
@@ -52,6 +54,8 @@ export interface EngramAccessHttpServerOptions {
52
54
  citationsAutoDetect?: boolean;
53
55
  /** Advertise legacy engram.* tool aliases on tools/list (issue #1427). Default true. */
54
56
  emitLegacyTools?: boolean;
57
+ /** Optional authenticated admin dashboard/config controls supplied by the host server. */
58
+ adminControls?: RemnicAdminControls;
55
59
  }
56
60
 
57
61
  export interface EngramAccessHttpServerStatus {
@@ -61,6 +65,57 @@ export interface EngramAccessHttpServerStatus {
61
65
  maxBodyBytes: number;
62
66
  }
63
67
 
68
+ export interface RemnicAdminHarnessStatus {
69
+ id: string;
70
+ label: string;
71
+ detected: boolean;
72
+ enabled: boolean;
73
+ source?: string;
74
+ detail?: string;
75
+ }
76
+
77
+ export interface RemnicAdminModelOption {
78
+ id: string;
79
+ label: string;
80
+ provider: string;
81
+ detected: boolean;
82
+ enabled: boolean;
83
+ default?: boolean;
84
+ source?: string;
85
+ endpoint?: string;
86
+ }
87
+
88
+ export interface RemnicAdminFeatureStatus {
89
+ key: string;
90
+ label: string;
91
+ enabled: boolean;
92
+ writable: boolean;
93
+ restartRequired?: boolean;
94
+ }
95
+
96
+ export interface RemnicAdminConfigStatus {
97
+ path: string;
98
+ exists: boolean;
99
+ writable: boolean;
100
+ restartRequired: boolean;
101
+ values: Record<string, string | number | boolean | null>;
102
+ }
103
+
104
+ export interface RemnicAdminDashboardStatus {
105
+ config: RemnicAdminConfigStatus;
106
+ harnesses: RemnicAdminHarnessStatus[];
107
+ providers?: RemnicAdminHarnessStatus[];
108
+ models: RemnicAdminModelOption[];
109
+ features: RemnicAdminFeatureStatus[];
110
+ }
111
+
112
+ export type RemnicAdminConfigPatch = Record<string, unknown>;
113
+
114
+ export interface RemnicAdminControls {
115
+ status: () => Promise<RemnicAdminDashboardStatus>;
116
+ update?: (patch: RemnicAdminConfigPatch) => Promise<RemnicAdminDashboardStatus>;
117
+ }
118
+
64
119
  function resolveDefaultAdminConsolePublicDir(): string {
65
120
  const thisDir = path.dirname(fileURLToPath(import.meta.url));
66
121
  const candidates = [
@@ -210,6 +265,8 @@ export class EngramAccessHttpServer {
210
265
  private readonly maxBodyBytes: number;
211
266
  private readonly adminConsoleEnabled: boolean;
212
267
  private readonly adminConsolePublicDir: string;
268
+ private readonly adminConsolePrefillToken?: string;
269
+ private readonly adminControls?: RemnicAdminControls;
213
270
  private readonly trustPrincipalHeader: boolean;
214
271
  private readonly adapterRegistry: AdapterRegistry | null;
215
272
  private readonly writeRequestTimestamps: number[] = [];
@@ -242,6 +299,8 @@ export class EngramAccessHttpServer {
242
299
  : 131072;
243
300
  this.adminConsoleEnabled = options.adminConsoleEnabled !== false;
244
301
  this.adminConsolePublicDir = options.adminConsolePublicDir ?? defaultAdminConsolePublicDir;
302
+ this.adminConsolePrefillToken = options.adminConsolePrefillToken === true ? this.authToken : undefined;
303
+ this.adminControls = options.adminControls;
245
304
  this.trustPrincipalHeader = options.trustPrincipalHeader === true;
246
305
  this.adapterRegistry = options.enableAdapters !== false
247
306
  ? (options.adapterRegistry ?? new AdapterRegistry())
@@ -492,6 +551,38 @@ export class EngramAccessHttpServer {
492
551
  return;
493
552
  }
494
553
 
554
+ if (
555
+ req.method === "GET" &&
556
+ (pathname === "/engram/v1/admin/dashboard" || pathname === "/remnic/v1/admin/dashboard")
557
+ ) {
558
+ if (!this.adminControls) {
559
+ this.respondJson(res, 404, { error: "admin_controls_unavailable", code: "admin_controls_unavailable" });
560
+ return;
561
+ }
562
+ this.respondJson(res, 200, await this.adminControls.status());
563
+ return;
564
+ }
565
+
566
+ if (
567
+ req.method === "PATCH" &&
568
+ (pathname === "/engram/v1/admin/config" || pathname === "/remnic/v1/admin/config")
569
+ ) {
570
+ if (!this.adminControls?.update) {
571
+ this.respondJson(res, 404, { error: "admin_controls_unavailable", code: "admin_controls_unavailable" });
572
+ return;
573
+ }
574
+ try {
575
+ this.respondJson(res, 200, await this.adminControls.update(await this.readJsonBody(req)));
576
+ } catch (error) {
577
+ throw new HttpError(
578
+ 400,
579
+ error instanceof Error ? error.message : "invalid_admin_config_patch",
580
+ "invalid_admin_config_patch",
581
+ );
582
+ }
583
+ return;
584
+ }
585
+
495
586
  if (req.method === "POST" && pathname === "/engram/v1/recall") {
496
587
  const body = await this.readValidatedBody(req, "recall");
497
588
  // Preserve the distinction between `codingContext: null` (explicit
@@ -2244,7 +2335,7 @@ export class EngramAccessHttpServer {
2244
2335
  return true;
2245
2336
  }
2246
2337
  if (pathname === "/remnic/ui/" || pathname === "/engram/ui/") {
2247
- await this.respondStatic(res, path.join(this.adminConsolePublicDir, "index.html"), "text/html; charset=utf-8");
2338
+ await this.respondAdminConsoleShell(req, res, pathname);
2248
2339
  return true;
2249
2340
  }
2250
2341
  if (pathname === "/remnic/ui/app.js" || pathname === "/engram/ui/app.js") {
@@ -2254,6 +2345,31 @@ export class EngramAccessHttpServer {
2254
2345
  return false;
2255
2346
  }
2256
2347
 
2348
+ private async respondAdminConsoleShell(
2349
+ req: IncomingMessage,
2350
+ res: ServerResponse,
2351
+ pathname: string,
2352
+ ): Promise<void> {
2353
+ try {
2354
+ let body = await readFile(path.join(this.adminConsolePublicDir, "index.html"), "utf-8");
2355
+ const canPrefillToken = this.adminConsolePrefillToken && this.isAuthorized(req, pathname);
2356
+ if (canPrefillToken) {
2357
+ const script = `<script>window.__REMNIC_ADMIN_CONSOLE_PREFILL_TOKEN__=${JSON.stringify(this.adminConsolePrefillToken)};</script>`;
2358
+ body = body.includes("</head>")
2359
+ ? body.replace("</head>", `${script}</head>`)
2360
+ : `${script}${body}`;
2361
+ res.setHeader("cache-control", "private, no-store");
2362
+ }
2363
+ res.setHeader("vary", "authorization");
2364
+ res.statusCode = 200;
2365
+ res.setHeader("content-type", "text/html; charset=utf-8");
2366
+ res.setHeader("content-length", String(Buffer.byteLength(body)));
2367
+ res.end(body);
2368
+ } catch {
2369
+ this.respondJson(res, 404, { error: "not_found" });
2370
+ }
2371
+ }
2372
+
2257
2373
  private async respondStatic(res: ServerResponse, filePath: string, contentType: string): Promise<void> {
2258
2374
  try {
2259
2375
  const body = await readFile(filePath, "utf-8");