@remnic/core 9.3.629 → 9.3.631

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 (221) hide show
  1. package/dist/access-cli.js +15 -13
  2. package/dist/access-cli.js.map +1 -1
  3. package/dist/access-http.d.ts +5 -4
  4. package/dist/access-http.js +7 -6
  5. package/dist/access-mcp.d.ts +5 -4
  6. package/dist/access-mcp.js +6 -5
  7. package/dist/{access-service-BdThkfIE.d.ts → access-service-C9_EpVHd.d.ts} +2 -2
  8. package/dist/access-service.d.ts +5 -4
  9. package/dist/access-service.js +5 -4
  10. package/dist/action-confidence.d.ts +1 -1
  11. package/dist/active-memory-bridge.d.ts +1 -1
  12. package/dist/active-recall.d.ts +1 -1
  13. package/dist/active-recall.js +1 -1
  14. package/dist/auto-sync-RFADEHIQ.js +75 -0
  15. package/dist/auto-sync-RFADEHIQ.js.map +1 -0
  16. package/dist/behavior-learner.d.ts +1 -1
  17. package/dist/behavior-signals.d.ts +1 -1
  18. package/dist/bootstrap.d.ts +4 -3
  19. package/dist/briefing.d.ts +1 -1
  20. package/dist/briefing.js +3 -2
  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/causal-behavior.d.ts +1 -1
  25. package/dist/causal-consolidation.d.ts +1 -1
  26. package/dist/causal-consolidation.js +4 -3
  27. package/dist/causal-consolidation.js.map +1 -1
  28. package/dist/{chunk-532VCWYW.js → chunk-242XFZ36.js} +2 -2
  29. package/dist/{chunk-XXO5TI3B.js → chunk-32U3N7H5.js} +3 -3
  30. package/dist/{chunk-KB4MFBF5.js → chunk-3RDYU3JS.js} +3 -3
  31. package/dist/{chunk-57QXN2CS.js → chunk-4S3N6HFG.js} +2 -2
  32. package/dist/{chunk-OLNNOHBC.js → chunk-5PT5I6JQ.js} +20 -14
  33. package/dist/{chunk-OLNNOHBC.js.map → chunk-5PT5I6JQ.js.map} +1 -1
  34. package/dist/{chunk-GE7Q7KXP.js → chunk-7A2QKUUA.js} +2 -2
  35. package/dist/{chunk-KKTXCFD7.js → chunk-7H5WCPBS.js} +95 -11
  36. package/dist/{chunk-KKTXCFD7.js.map → chunk-7H5WCPBS.js.map} +1 -1
  37. package/dist/{chunk-3MNBW7R7.js → chunk-C4KKM62E.js} +2 -2
  38. package/dist/{chunk-NKCW223V.js → chunk-CMN5AWAZ.js} +2 -2
  39. package/dist/{chunk-JXHMAQYT.js → chunk-DOBJH4I6.js} +4 -4
  40. package/dist/{chunk-TZDSNIRO.js → chunk-IFVFQRZ2.js} +5 -5
  41. package/dist/{chunk-LQYTQCXM.js → chunk-JCLECECB.js} +2 -2
  42. package/dist/chunk-KVDUDYEN.js +1164 -0
  43. package/dist/chunk-KVDUDYEN.js.map +1 -0
  44. package/dist/{chunk-QDV6VAD4.js → chunk-LEG7XWS2.js} +2 -2
  45. package/dist/chunk-M7XQSUBB.js +280 -0
  46. package/dist/chunk-M7XQSUBB.js.map +1 -0
  47. package/dist/{chunk-N5RGXWLQ.js → chunk-PUEAEQSN.js} +2 -2
  48. package/dist/{chunk-UGHUNQ74.js → chunk-QYGIQ5NM.js} +212 -417
  49. package/dist/chunk-QYGIQ5NM.js.map +1 -0
  50. package/dist/{chunk-JKCDQBDW.js → chunk-UXFOGILU.js} +2 -2
  51. package/dist/{chunk-MVQN73GT.js → chunk-VTR3MNYF.js} +2 -2
  52. package/dist/{chunk-KVFYTRMV.js → chunk-W25I7G6U.js} +2 -2
  53. package/dist/{chunk-3GLCUPXP.js → chunk-WLZBVYC6.js} +192 -889
  54. package/dist/chunk-WLZBVYC6.js.map +1 -0
  55. package/dist/{chunk-3R2UZV3U.js → chunk-X7EJF46S.js} +2 -2
  56. package/dist/{chunk-54KDA6UK.js → chunk-XG4NAWAV.js} +3 -3
  57. package/dist/{chunk-P2D2MM47.js → chunk-YROCXMCK.js} +2 -2
  58. package/dist/{cli-DAsHklrf.d.ts → cli-CuVEQWKr.d.ts} +3 -3
  59. package/dist/cli.d.ts +6 -5
  60. package/dist/cli.js +18 -17
  61. package/dist/compounding/engine.d.ts +1 -1
  62. package/dist/compounding/engine.js +3 -2
  63. package/dist/compounding/preference-consolidator.d.ts +1 -1
  64. package/dist/compression-optimizer.d.ts +1 -1
  65. package/dist/config.d.ts +1 -1
  66. package/dist/config.js +1 -1
  67. package/dist/connectors/codex-materialize-runner.d.ts +1 -1
  68. package/dist/connectors/codex-materialize-runner.js +3 -2
  69. package/dist/connectors/codex-materialize.d.ts +1 -1
  70. package/dist/connectors/index.d.ts +1 -1
  71. package/dist/connectors/index.js +3 -2
  72. package/dist/consolidation-provenance-check.d.ts +1 -1
  73. package/dist/consolidation-undo.d.ts +1 -1
  74. package/dist/contradiction/index.d.ts +1 -1
  75. package/dist/contradiction/index.js +4 -4
  76. package/dist/conversation-index/backend.d.ts +1 -1
  77. package/dist/conversation-index/chunker.d.ts +1 -1
  78. package/dist/conversation-index/faiss-adapter.d.ts +1 -1
  79. package/dist/conversation-index/indexer.d.ts +1 -1
  80. package/dist/conversation-index/search.d.ts +1 -1
  81. package/dist/day-summary.d.ts +1 -1
  82. package/dist/delinearize.d.ts +1 -1
  83. package/dist/direct-answer-wiring.d.ts +1 -1
  84. package/dist/direct-answer.d.ts +1 -1
  85. package/dist/embedding-fallback.d.ts +1 -1
  86. package/dist/enrichment/index.d.ts +1 -1
  87. package/dist/entity-retrieval.d.ts +1 -1
  88. package/dist/entity-retrieval.js +3 -2
  89. package/dist/entity-schema.d.ts +1 -1
  90. package/dist/explicit-capture.d.ts +4 -3
  91. package/dist/extraction-judge-telemetry.d.ts +1 -1
  92. package/dist/extraction-judge-training.d.ts +1 -1
  93. package/dist/extraction-judge.d.ts +1 -1
  94. package/dist/extraction.d.ts +1 -1
  95. package/dist/fallback-llm.d.ts +1 -1
  96. package/dist/identity-continuity.d.ts +1 -1
  97. package/dist/importance.d.ts +1 -1
  98. package/dist/index.d.ts +8 -8
  99. package/dist/index.js +49 -45
  100. package/dist/index.js.map +1 -1
  101. package/dist/intent.d.ts +1 -1
  102. package/dist/lcm/engine.d.ts +1 -1
  103. package/dist/lcm/index.d.ts +1 -1
  104. package/dist/lcm/tools.d.ts +1 -1
  105. package/dist/lifecycle.d.ts +1 -1
  106. package/dist/live-connectors-runner.d.ts +1 -1
  107. package/dist/local-llm.d.ts +1 -1
  108. package/dist/maintenance/memory-governance.d.ts +1 -1
  109. package/dist/maintenance/memory-governance.js +3 -2
  110. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +3 -2
  111. package/dist/maintenance/rebuild-memory-projection.js +4 -3
  112. package/dist/mcp-memory-inspector-app.d.ts +5 -4
  113. package/dist/memory-action-policy.d.ts +1 -1
  114. package/dist/memory-cache.d.ts +1 -1
  115. package/dist/memory-lifecycle-ledger-utils.d.ts +1 -1
  116. package/dist/memory-projection-store.d.ts +1 -1
  117. package/dist/memory-provenance.d.ts +1 -1
  118. package/dist/memory-worth-outcomes.d.ts +1 -1
  119. package/dist/models-json.d.ts +1 -1
  120. package/dist/namespaces/migrate.d.ts +1 -1
  121. package/dist/namespaces/migrate.js +4 -3
  122. package/dist/namespaces/principal.d.ts +1 -1
  123. package/dist/namespaces/search.d.ts +1 -1
  124. package/dist/namespaces/storage.d.ts +1 -1
  125. package/dist/namespaces/storage.js +3 -2
  126. package/dist/native-knowledge.d.ts +1 -1
  127. package/dist/operator-toolkit.d.ts +1 -1
  128. package/dist/operator-toolkit.js +7 -6
  129. package/dist/{orchestrator-BexeSJ2j.d.ts → orchestrator-CoqytbK_.d.ts} +102 -10
  130. package/dist/orchestrator.d.ts +4 -3
  131. package/dist/orchestrator.js +12 -10
  132. package/dist/patterns-cli.d.ts +1 -1
  133. package/dist/policy-runtime.d.ts +1 -1
  134. package/dist/qmd-recall-cache.d.ts +1 -1
  135. package/dist/qmd.d.ts +1 -1
  136. package/dist/recall-disclosure-escalation.d.ts +1 -1
  137. package/dist/recall-explain-renderer.d.ts +1 -1
  138. package/dist/recall-planner-llm.d.ts +1 -1
  139. package/dist/recall-state.d.ts +1 -1
  140. package/dist/recall-tag-filter.d.ts +1 -1
  141. package/dist/recall-xray-cli.d.ts +1 -1
  142. package/dist/recall-xray-renderer.d.ts +1 -1
  143. package/dist/recall-xray.d.ts +1 -1
  144. package/dist/resolve-auth-token.d.ts +1 -1
  145. package/dist/resume-bundles.js +2 -2
  146. package/dist/retrieval-agents.d.ts +1 -1
  147. package/dist/retrieval-tiers.d.ts +1 -1
  148. package/dist/routing/engine.d.ts +1 -1
  149. package/dist/routing/store.d.ts +1 -1
  150. package/dist/search/embed-helper.d.ts +1 -1
  151. package/dist/search/factory.d.ts +1 -1
  152. package/dist/search/index.d.ts +1 -1
  153. package/dist/search/lancedb-backend.d.ts +1 -1
  154. package/dist/search/meilisearch-backend.d.ts +1 -1
  155. package/dist/search/noop-backend.d.ts +1 -1
  156. package/dist/search/orama-backend.d.ts +1 -1
  157. package/dist/search/port.d.ts +1 -1
  158. package/dist/search/remote-backend.d.ts +1 -1
  159. package/dist/{semantic-consolidation-PwkzNfdK.d.ts → semantic-consolidation-BPs6BURk.d.ts} +1 -1
  160. package/dist/semantic-consolidation.d.ts +2 -2
  161. package/dist/semantic-consolidation.js +4 -3
  162. package/dist/semantic-rule-promotion.js +3 -2
  163. package/dist/semantic-rule-verifier.d.ts +1 -1
  164. package/dist/semantic-rule-verifier.js +3 -2
  165. package/dist/session-observer-bands.d.ts +1 -1
  166. package/dist/session-observer-state.d.ts +1 -1
  167. package/dist/shared-context/manager.d.ts +1 -1
  168. package/dist/signal.d.ts +1 -1
  169. package/dist/storage.d.ts +38 -2
  170. package/dist/storage.js +6 -3
  171. package/dist/summarizer.d.ts +1 -1
  172. package/dist/summary-snapshot.d.ts +1 -1
  173. package/dist/temporal-supersession.d.ts +1 -1
  174. package/dist/temporal-validity.d.ts +1 -1
  175. package/dist/threading.d.ts +1 -1
  176. package/dist/tier-migration.d.ts +1 -1
  177. package/dist/tier-routing.d.ts +1 -1
  178. package/dist/topics.d.ts +1 -1
  179. package/dist/transcript.d.ts +1 -1
  180. package/dist/{types-BCF2wqKa.d.ts → types-CpMPD8xl.d.ts} +59 -11
  181. package/dist/types.d.ts +1 -1
  182. package/dist/utility-runtime.d.ts +1 -1
  183. package/dist/verified-recall.js +3 -2
  184. package/package.json +1 -1
  185. package/src/orchestrator.ts +74 -0
  186. package/src/storage.ts +100 -0
  187. package/src/wearables/auto-sync.test.ts +181 -0
  188. package/src/wearables/auto-sync.ts +129 -0
  189. package/src/wearables/cli.ts +6 -0
  190. package/src/wearables/config.test.ts +90 -11
  191. package/src/wearables/config.ts +113 -11
  192. package/src/wearables/memory-gen.test.ts +416 -1
  193. package/src/wearables/memory-gen.ts +381 -23
  194. package/src/wearables/pipeline.test.ts +396 -5
  195. package/src/wearables/pipeline.ts +174 -22
  196. package/src/wearables/service.test.ts +172 -0
  197. package/src/wearables/service.ts +84 -3
  198. package/src/wearables/storage-io.test.ts +81 -0
  199. package/src/wearables/trust.test.ts +123 -0
  200. package/src/wearables/trust.ts +168 -0
  201. package/src/wearables/types.ts +57 -9
  202. package/dist/chunk-3GLCUPXP.js.map +0 -1
  203. package/dist/chunk-UGHUNQ74.js.map +0 -1
  204. /package/dist/{chunk-532VCWYW.js.map → chunk-242XFZ36.js.map} +0 -0
  205. /package/dist/{chunk-XXO5TI3B.js.map → chunk-32U3N7H5.js.map} +0 -0
  206. /package/dist/{chunk-KB4MFBF5.js.map → chunk-3RDYU3JS.js.map} +0 -0
  207. /package/dist/{chunk-57QXN2CS.js.map → chunk-4S3N6HFG.js.map} +0 -0
  208. /package/dist/{chunk-GE7Q7KXP.js.map → chunk-7A2QKUUA.js.map} +0 -0
  209. /package/dist/{chunk-3MNBW7R7.js.map → chunk-C4KKM62E.js.map} +0 -0
  210. /package/dist/{chunk-NKCW223V.js.map → chunk-CMN5AWAZ.js.map} +0 -0
  211. /package/dist/{chunk-JXHMAQYT.js.map → chunk-DOBJH4I6.js.map} +0 -0
  212. /package/dist/{chunk-TZDSNIRO.js.map → chunk-IFVFQRZ2.js.map} +0 -0
  213. /package/dist/{chunk-LQYTQCXM.js.map → chunk-JCLECECB.js.map} +0 -0
  214. /package/dist/{chunk-QDV6VAD4.js.map → chunk-LEG7XWS2.js.map} +0 -0
  215. /package/dist/{chunk-N5RGXWLQ.js.map → chunk-PUEAEQSN.js.map} +0 -0
  216. /package/dist/{chunk-JKCDQBDW.js.map → chunk-UXFOGILU.js.map} +0 -0
  217. /package/dist/{chunk-MVQN73GT.js.map → chunk-VTR3MNYF.js.map} +0 -0
  218. /package/dist/{chunk-KVFYTRMV.js.map → chunk-W25I7G6U.js.map} +0 -0
  219. /package/dist/{chunk-3R2UZV3U.js.map → chunk-X7EJF46S.js.map} +0 -0
  220. /package/dist/{chunk-54KDA6UK.js.map → chunk-XG4NAWAV.js.map} +0 -0
  221. /package/dist/{chunk-P2D2MM47.js.map → chunk-YROCXMCK.js.map} +0 -0
@@ -1,6 +1,7 @@
1
1
  import {
2
2
  Orchestrator
3
- } from "./chunk-3GLCUPXP.js";
3
+ } from "./chunk-WLZBVYC6.js";
4
+ import "./chunk-KVDUDYEN.js";
4
5
  import "./chunk-5RIRL3XL.js";
5
6
  import "./chunk-4HFJQCJZ.js";
6
7
  import "./chunk-6BDVBBBY.js";
@@ -15,7 +16,7 @@ import "./chunk-UWK5OXUJ.js";
15
16
  import "./chunk-TECVW3JP.js";
16
17
  import "./chunk-T2PO5MUF.js";
17
18
  import "./chunk-HP5FMB6L.js";
18
- import "./chunk-JKCDQBDW.js";
19
+ import "./chunk-UXFOGILU.js";
19
20
  import "./chunk-DRD2Q7HQ.js";
20
21
  import "./chunk-LXOM6IQU.js";
21
22
  import "./chunk-S75M5ZRK.js";
@@ -56,7 +57,7 @@ import "./chunk-54V4BZWP.js";
56
57
  import "./chunk-XZ4WBBB5.js";
57
58
  import "./chunk-77NAFXUD.js";
58
59
  import "./chunk-DB5A3NHS.js";
59
- import "./chunk-LQYTQCXM.js";
60
+ import "./chunk-JCLECECB.js";
60
61
  import "./chunk-6NKAQ74D.js";
61
62
  import "./chunk-OAZ5MFUB.js";
62
63
  import "./chunk-PYPOFEMK.js";
@@ -67,17 +68,17 @@ import "./chunk-6HEM6HTQ.js";
67
68
  import "./chunk-XCAZF7KQ.js";
68
69
  import "./chunk-3PG3H5TD.js";
69
70
  import "./chunk-OD4FM2U7.js";
70
- import "./chunk-3R2UZV3U.js";
71
- import "./chunk-GE7Q7KXP.js";
71
+ import "./chunk-X7EJF46S.js";
72
+ import "./chunk-7A2QKUUA.js";
72
73
  import "./chunk-LN4YGHTM.js";
73
74
  import "./chunk-JLNBQWZ2.js";
74
75
  import "./chunk-2PRQG7PV.js";
75
76
  import "./chunk-X6IRLNOO.js";
76
77
  import "./chunk-2F6NP3NT.js";
77
78
  import "./chunk-TERNBNJB.js";
78
- import "./chunk-P2D2MM47.js";
79
+ import "./chunk-YROCXMCK.js";
79
80
  import "./chunk-W4RVMTHR.js";
80
- import "./chunk-57QXN2CS.js";
81
+ import "./chunk-4S3N6HFG.js";
81
82
  import "./chunk-ZRWB5D4H.js";
82
83
  import "./chunk-A6D7A2FW.js";
83
84
  import "./chunk-FF4KLI5W.js";
@@ -92,7 +93,7 @@ import "./chunk-CYEPCZN5.js";
92
93
  import "./chunk-DCGT4FPP.js";
93
94
  import "./chunk-Q4CAQGKQ.js";
94
95
  import "./chunk-CINZGPSJ.js";
95
- import "./chunk-QDV6VAD4.js";
96
+ import "./chunk-LEG7XWS2.js";
96
97
  import "./chunk-ZFXCQPNO.js";
97
98
  import "./chunk-Q6YIJGXJ.js";
98
99
  import "./chunk-ORFGK3XI.js";
@@ -127,7 +128,7 @@ import "./chunk-L2EXJQJP.js";
127
128
  import "./chunk-RK6F44Y6.js";
128
129
  import {
129
130
  parseConfig
130
- } from "./chunk-KKTXCFD7.js";
131
+ } from "./chunk-7H5WCPBS.js";
131
132
  import "./chunk-PHK3HARR.js";
132
133
  import "./chunk-NDAH7BJ5.js";
133
134
  import "./chunk-Z5LAYHGJ.js";
@@ -141,7 +142,7 @@ import "./chunk-OADWQ5CR.js";
141
142
  import "./chunk-7WV3F5DQ.js";
142
143
  import {
143
144
  EngramAccessService
144
- } from "./chunk-JXHMAQYT.js";
145
+ } from "./chunk-DOBJH4I6.js";
145
146
  import "./chunk-GDASG7NC.js";
146
147
  import "./chunk-GDB4J2H3.js";
147
148
  import "./chunk-DGNQRNLL.js";
@@ -149,7 +150,7 @@ import "./chunk-PW6GURU3.js";
149
150
  import "./chunk-SOBJ6NEY.js";
150
151
  import "./chunk-BT7NVCML.js";
151
152
  import "./chunk-H7XKCNR6.js";
152
- import "./chunk-3MNBW7R7.js";
153
+ import "./chunk-C4KKM62E.js";
153
154
  import "./chunk-EDQVAMQI.js";
154
155
  import "./chunk-JGSKJHF7.js";
155
156
  import "./chunk-YQNADJCT.js";
@@ -167,8 +168,9 @@ import "./chunk-ODPLEWB6.js";
167
168
  import "./chunk-XL7FK7PJ.js";
168
169
  import "./chunk-2LSZVONP.js";
169
170
  import "./chunk-DEUNUKTD.js";
170
- import "./chunk-NKCW223V.js";
171
- import "./chunk-UGHUNQ74.js";
171
+ import "./chunk-CMN5AWAZ.js";
172
+ import "./chunk-QYGIQ5NM.js";
173
+ import "./chunk-M7XQSUBB.js";
172
174
  import "./chunk-5UZXUTVO.js";
173
175
  import "./chunk-J6A3CX5N.js";
174
176
  import "./chunk-FPNQF475.js";
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/access-cli.ts"],"sourcesContent":["import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { parseConfig } from \"./config.js\";\nimport type { PluginConfig } from \"./types.js\";\nimport { Orchestrator } from \"./orchestrator.js\";\nimport { EngramAccessService } from \"./access-service.js\";\nimport { readEnvVar, resolveHomeDir } from \"./runtime/env.js\";\nimport { resolvePluginEntry } from \"./plugin-entry-resolver.js\";\nimport { expandTildePath } from \"./utils/path.js\";\n\nconst OPENCLAW_REMNIC_PLUGIN_IDS = [\"openclaw-remnic\", \"openclaw-engram\"] as const;\n\ntype CommandName = \"browse\" | \"store\";\n\ntype ParsedArgs = {\n command: CommandName;\n options: Record<string, string[]>;\n flags: Set<string>;\n};\n\ntype CommandSpec = {\n valueOptions: ReadonlySet<string>;\n flagOptions: ReadonlySet<string>;\n};\n\ntype Runtime = {\n config: PluginConfig;\n service: EngramAccessService;\n};\n\nexport type AccessCliOptions = {\n /**\n * The calling plugin's own id (e.g. `\"openclaw-engram\"` when invoked by the\n * shim binary). Forwarded to the plugin-entry resolver so shim CLI\n * users target their own `plugins.entries[\"openclaw-engram\"]` block instead\n * of accidentally resolving to the canonical `\"openclaw-remnic\"` entry when\n * `plugins.slots.memory` is unset (#403).\n */\n preferredId?: string;\n};\n\nfunction getOpenClawPluginEntries(raw: Record<string, unknown>): Record<string, unknown> | undefined {\n const plugins =\n raw[\"plugins\"] && typeof raw[\"plugins\"] === \"object\" && !Array.isArray(raw[\"plugins\"])\n ? (raw[\"plugins\"] as Record<string, unknown>)\n : undefined;\n const entries =\n plugins && plugins[\"entries\"] && typeof plugins[\"entries\"] === \"object\" && !Array.isArray(plugins[\"entries\"])\n ? (plugins[\"entries\"] as Record<string, unknown>)\n : undefined;\n return entries;\n}\n\nfunction getOpenClawMemorySlotId(raw: Record<string, unknown>): string | undefined {\n const plugins =\n raw[\"plugins\"] && typeof raw[\"plugins\"] === \"object\" && !Array.isArray(raw[\"plugins\"])\n ? (raw[\"plugins\"] as Record<string, unknown>)\n : undefined;\n const slots =\n plugins && plugins[\"slots\"] && typeof plugins[\"slots\"] === \"object\" && !Array.isArray(plugins[\"slots\"])\n ? (plugins[\"slots\"] as Record<string, unknown>)\n : undefined;\n const slotId = slots?.[\"memory\"];\n return typeof slotId === \"string\" ? slotId : undefined;\n}\n\nfunction resolveOpenClawRemnicPluginEntry(raw: unknown, preferredId?: string): Record<string, unknown> | undefined {\n return resolvePluginEntry(raw, {\n candidateIds: OPENCLAW_REMNIC_PLUGIN_IDS,\n preferredId,\n getEntries: getOpenClawPluginEntries,\n getSlotId: getOpenClawMemorySlotId,\n });\n}\n\nfunction hasAllowedOpenClawRemnicPluginId(value: string): boolean {\n return (OPENCLAW_REMNIC_PLUGIN_IDS as readonly string[]).includes(value);\n}\n\ntype UsageErrorKind =\n | \"unsupported-command\"\n | \"unexpected-positional\"\n | \"unknown-option\"\n | \"invalid-option\"\n | \"option-does-not-take-value\"\n | \"missing-option\"\n | \"missing-content\"\n | \"invalid-integer\"\n | \"invalid-number\";\n\nclass UsageError extends Error {\n constructor(\n readonly kind: UsageErrorKind,\n readonly optionName?: string,\n readonly acceptedValues?: readonly string[],\n ) {\n super(\"invalid access-cli arguments\");\n }\n}\n\nfunction formatUsageError(error: UsageError): string {\n switch (error.kind) {\n case \"unsupported-command\":\n return \"unsupported command\";\n case \"unexpected-positional\":\n return \"unexpected positional argument\";\n case \"unknown-option\":\n return `unknown option: --${error.optionName ?? \"unknown\"}`;\n case \"invalid-option\": {\n const accepted = error.acceptedValues?.length ? `. Accepted: ${error.acceptedValues.join(\", \")}.` : \"\";\n return `invalid value for --${error.optionName ?? \"unknown\"}${accepted}`;\n }\n case \"option-does-not-take-value\":\n return `option does not accept a value: --${error.optionName ?? \"unknown\"}`;\n case \"missing-option\":\n return `missing required option: --${error.optionName ?? \"unknown\"}`;\n case \"missing-content\":\n return \"missing required option: --content or --content-file\";\n case \"invalid-integer\":\n return `invalid integer for --${error.optionName ?? \"unknown\"}`;\n case \"invalid-number\":\n return `invalid number for --${error.optionName ?? \"unknown\"}`;\n }\n}\n\nfunction writeCliOutput(text: string = \"\"): void {\n process.stdout.write(`${text}\\n`);\n}\n\nfunction usage(): string {\n return [\n \"Usage:\",\n \" engram-access browse [options]\",\n \" engram-access store [options]\",\n \"\",\n \"Browse options:\",\n \" --namespace <name>\",\n \" --principal <principal>\",\n \" --query <text>\",\n \" --category <name>\",\n \" --status <name>\",\n \" --sort <updated_desc|updated_asc|created_desc|created_asc>\",\n \" --limit <n>\",\n \" --offset <n>\",\n \"\",\n \"Store options:\",\n \" --namespace <name>\",\n \" --session-key <key>\",\n \" --principal <principal>\",\n \" --content <text> | --content-file <path>\",\n \" --category <name>\",\n \" --confidence <0-1>\",\n \" --tag <tag> (repeatable)\",\n \" --entity-ref <ref>\",\n \" --ttl <duration>\",\n \" --source-reason <text>\",\n \" --idempotency-key <key>\",\n \" --dry-run\",\n ].join(\"\\n\");\n}\n\nconst COMMAND_SPECS: Record<CommandName, CommandSpec> = {\n browse: {\n valueOptions: new Set([\n \"namespace\",\n \"principal\",\n \"query\",\n \"category\",\n \"status\",\n \"sort\",\n \"limit\",\n \"offset\",\n ]),\n flagOptions: new Set(),\n },\n store: {\n valueOptions: new Set([\n \"namespace\",\n \"session-key\",\n \"principal\",\n \"content\",\n \"content-file\",\n \"category\",\n \"confidence\",\n \"tag\",\n \"entity-ref\",\n \"ttl\",\n \"source-reason\",\n \"idempotency-key\",\n ]),\n flagOptions: new Set([\"dry-run\"]),\n },\n};\n\nconst BROWSE_SORT_VALUES = Object.freeze([\n \"updated_desc\",\n \"updated_asc\",\n \"created_desc\",\n \"created_asc\",\n] as const);\n\ntype BrowseSort = (typeof BROWSE_SORT_VALUES)[number];\n\nfunction parseArgs(argv: string[]): ParsedArgs {\n const [commandRaw, ...rest] = argv;\n if (commandRaw !== \"browse\" && commandRaw !== \"store\") {\n throw new UsageError(\"unsupported-command\");\n }\n const spec = COMMAND_SPECS[commandRaw];\n\n const options: Record<string, string[]> = {};\n const flags = new Set<string>();\n\n for (let i = 0; i < rest.length; i += 1) {\n const token = rest[i];\n if (!token.startsWith(\"--\")) {\n throw new UsageError(\"unexpected-positional\");\n }\n const rawKey = token.slice(2);\n if (!rawKey) {\n throw new UsageError(\"unknown-option\", rawKey);\n }\n const equalsIndex = rawKey.indexOf(\"=\");\n const key = equalsIndex === -1 ? rawKey : rawKey.slice(0, equalsIndex);\n const inlineValue = equalsIndex === -1 ? undefined : rawKey.slice(equalsIndex + 1);\n\n if (!spec.valueOptions.has(key) && !spec.flagOptions.has(key)) {\n throw new UsageError(\"unknown-option\", key);\n }\n\n if (spec.flagOptions.has(key)) {\n if (inlineValue !== undefined) {\n throw new UsageError(\"option-does-not-take-value\", key);\n }\n const next = rest[i + 1];\n if (next && !next.startsWith(\"--\")) {\n throw new UsageError(\"option-does-not-take-value\", key);\n }\n flags.add(key);\n continue;\n }\n\n if (inlineValue !== undefined) {\n if (inlineValue.length === 0) {\n throw new UsageError(\"missing-option\", key);\n }\n if (!options[key]) {\n options[key] = [];\n }\n options[key].push(inlineValue);\n continue;\n }\n\n const next = rest[i + 1];\n if (next === undefined || next.length === 0 || next.startsWith(\"--\")) {\n throw new UsageError(\"missing-option\", key);\n }\n if (!options[key]) {\n options[key] = [];\n }\n options[key].push(next);\n i += 1;\n }\n\n return {\n command: commandRaw,\n options,\n flags,\n };\n}\n\nfunction getLastOption(args: ParsedArgs, name: string): string | undefined {\n const values = args.options[name];\n if (!values || values.length === 0) return undefined;\n return values[values.length - 1];\n}\n\nfunction getAllOptions(args: ParsedArgs, name: string): string[] {\n return args.options[name] ?? [];\n}\n\nfunction requireOption(args: ParsedArgs, name: string): string {\n const value = getLastOption(args, name);\n if (!value || value.trim().length === 0) {\n throw new UsageError(\"missing-option\", name);\n }\n return value;\n}\n\nfunction parseIntegerOption(\n args: ParsedArgs,\n name: string,\n options: { min?: number } = {},\n): number | undefined {\n const raw = getLastOption(args, name);\n if (!raw) return undefined;\n const trimmed = raw.trim();\n if (!/^[+-]?\\d+$/.test(trimmed)) {\n throw new UsageError(\"invalid-integer\", name);\n }\n const value = Number(trimmed);\n if (!Number.isSafeInteger(value)) {\n throw new UsageError(\"invalid-integer\", name);\n }\n if (options.min !== undefined && value < options.min) {\n throw new UsageError(\"invalid-option\", name, [`integer >= ${options.min}`]);\n }\n return value;\n}\n\nfunction parseBrowseSortOption(args: ParsedArgs, name: string): BrowseSort | undefined {\n const raw = getLastOption(args, name);\n if (!raw) return undefined;\n if ((BROWSE_SORT_VALUES as readonly string[]).includes(raw)) {\n return raw as BrowseSort;\n }\n throw new UsageError(\"invalid-option\", name, BROWSE_SORT_VALUES);\n}\n\nfunction parseFloatOption(\n args: ParsedArgs,\n name: string,\n options: { min?: number; max?: number } = {},\n): number | undefined {\n const raw = getLastOption(args, name);\n if (!raw) return undefined;\n const trimmed = raw.trim();\n if (!/^[+-]?(?:(?:\\d+\\.?\\d*)|(?:\\.\\d+))(?:e[+-]?\\d+)?$/i.test(trimmed)) {\n throw new UsageError(\"invalid-number\", name);\n }\n const value = Number(trimmed);\n if (!Number.isFinite(value)) {\n throw new UsageError(\"invalid-number\", name);\n }\n if (options.min !== undefined && value < options.min) {\n throw new UsageError(\"invalid-number\", name);\n }\n if (options.max !== undefined && value > options.max) {\n throw new UsageError(\"invalid-number\", name);\n }\n return value;\n}\n\nfunction loadPluginConfig(preferredId?: string): Record<string, unknown> {\n const configPath =\n expandOptionalPath(readEnvVar(\"OPENCLAW_CONFIG_PATH\")) ||\n expandOptionalPath(readEnvVar(\"OPENCLAW_ENGRAM_CONFIG_PATH\")) ||\n path.join(resolveHomeDir(), \".openclaw\", \"openclaw.json\");\n const raw = JSON.parse(fs.readFileSync(configPath, \"utf8\"));\n const slotId =\n raw && typeof raw === \"object\" && !Array.isArray(raw)\n ? getOpenClawMemorySlotId(raw as Record<string, unknown>)\n : undefined;\n if (typeof slotId === \"string\" && !hasAllowedOpenClawRemnicPluginId(slotId)) {\n throw new Error(\n `OpenClaw memory slot points to non-Remnic plugin \"${slotId}\"; refusing to use default Remnic access config.`,\n );\n }\n // Delegate slot → preferredId → canonical → legacy resolution to the\n // generic helper so all config loaders stay in sync (#403). Shim CLI\n // callers pass `preferredId: \"openclaw-engram\"` so legacy shim installs\n // target their own config block instead of falling through to the canonical\n // \"openclaw-remnic\" entry.\n const entry = resolveOpenClawRemnicPluginEntry(raw, preferredId);\n if (!entry) {\n throw new Error(\n \"OpenClaw config does not contain an allowed Remnic plugin entry; refusing to use default Remnic access config.\",\n );\n }\n return (entry?.[\"config\"] as Record<string, unknown> | undefined) ?? {};\n}\n\nfunction buildRuntime(preferredId?: string): Runtime {\n const config = parseConfig(loadPluginConfig(preferredId));\n return {\n config,\n service: new EngramAccessService(new Orchestrator(config)),\n };\n}\n\nasync function runBrowse(args: ParsedArgs, preferredId?: string): Promise<void> {\n const browseArgs = {\n namespace: getLastOption(args, \"namespace\"),\n principal: getLastOption(args, \"principal\"),\n query: getLastOption(args, \"query\"),\n category: getLastOption(args, \"category\"),\n status: getLastOption(args, \"status\"),\n sort: parseBrowseSortOption(args, \"sort\"),\n limit: parseIntegerOption(args, \"limit\", { min: 1 }),\n offset: parseIntegerOption(args, \"offset\", { min: 0 }),\n };\n const { config, service } = buildRuntime(preferredId);\n const request = {\n namespace: browseArgs.namespace,\n authenticatedPrincipal: browseArgs.principal ?? config.agentAccessHttp.principal,\n query: browseArgs.query,\n category: browseArgs.category,\n status: browseArgs.status,\n sort: browseArgs.sort,\n limit: browseArgs.limit,\n offset: browseArgs.offset,\n };\n const result = await service.memoryBrowse(request);\n console.log(JSON.stringify(result, null, 2));\n}\n\nasync function runStore(args: ParsedArgs, preferredId?: string): Promise<void> {\n const contentFile = getLastOption(args, \"content-file\");\n const inlineContent = getLastOption(args, \"content\");\n const content = contentFile\n ? fs.readFileSync(expandTildePath(contentFile), \"utf8\")\n : inlineContent;\n if (!content || content.trim().length === 0) {\n throw new UsageError(\"missing-content\");\n }\n const storeArgs = {\n namespace: getLastOption(args, \"namespace\"),\n sessionKey: getLastOption(args, \"session-key\"),\n content,\n category: requireOption(args, \"category\"),\n confidence: parseFloatOption(args, \"confidence\", { min: 0, max: 1 }),\n tags: getAllOptions(args, \"tag\"),\n entityRef: getLastOption(args, \"entity-ref\"),\n ttl: getLastOption(args, \"ttl\"),\n sourceReason: getLastOption(args, \"source-reason\"),\n idempotencyKey: getLastOption(args, \"idempotency-key\"),\n dryRun: args.flags.has(\"dry-run\"),\n };\n\n const { config, service } = buildRuntime(preferredId);\n const result = await service.memoryStore({\n namespace: storeArgs.namespace,\n sessionKey: storeArgs.sessionKey,\n authenticatedPrincipal: getLastOption(args, \"principal\") ?? config.agentAccessHttp.principal,\n content: storeArgs.content,\n category: storeArgs.category,\n confidence: storeArgs.confidence,\n tags: storeArgs.tags,\n entityRef: storeArgs.entityRef,\n ttl: storeArgs.ttl,\n sourceReason: storeArgs.sourceReason,\n idempotencyKey: storeArgs.idempotencyKey,\n dryRun: storeArgs.dryRun,\n });\n console.log(JSON.stringify(result, null, 2));\n}\n\nfunction expandOptionalPath(value: string | undefined): string | undefined {\n return value === undefined ? undefined : expandTildePath(value);\n}\n\nexport async function main(\n argv: string[] = process.argv.slice(2),\n options: AccessCliOptions = {},\n): Promise<void> {\n const args = parseArgs(argv);\n if (args.command === \"browse\") {\n await runBrowse(args, options.preferredId);\n return;\n }\n await runStore(args, options.preferredId);\n}\n\nexport function sanitizeAccessCliErrorMessage(message: string): string {\n return message.replace(\n /\\b(openaiApiKey|localLlmApiKey)\\b(\\s*[:=]\\s*)(?:\"[^\"]*\"|'[^']*'|[^\\s,}\\]]+)/gi,\n (_match, name: string, separator: string) => `${name}${separator}[redacted]`,\n );\n}\n\nexport function printUsage(): void {\n writeCliOutput(usage());\n}\n\nexport async function runCli(\n argv: string[] = process.argv.slice(2),\n options: AccessCliOptions = {},\n): Promise<void> {\n try {\n await main(argv, options);\n } catch (error) {\n if (error instanceof UsageError) {\n writeCliOutput(formatUsageError(error));\n writeCliOutput();\n printUsage();\n process.exit(1);\n }\n\n console.error(\"access-cli failed: runtime error\");\n process.exit(1);\n }\n}\n"],"mappings":"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","names":["next"]}
1
+ {"version":3,"sources":["../src/access-cli.ts"],"sourcesContent":["import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { parseConfig } from \"./config.js\";\nimport type { PluginConfig } from \"./types.js\";\nimport { Orchestrator } from \"./orchestrator.js\";\nimport { EngramAccessService } from \"./access-service.js\";\nimport { readEnvVar, resolveHomeDir } from \"./runtime/env.js\";\nimport { resolvePluginEntry } from \"./plugin-entry-resolver.js\";\nimport { expandTildePath } from \"./utils/path.js\";\n\nconst OPENCLAW_REMNIC_PLUGIN_IDS = [\"openclaw-remnic\", \"openclaw-engram\"] as const;\n\ntype CommandName = \"browse\" | \"store\";\n\ntype ParsedArgs = {\n command: CommandName;\n options: Record<string, string[]>;\n flags: Set<string>;\n};\n\ntype CommandSpec = {\n valueOptions: ReadonlySet<string>;\n flagOptions: ReadonlySet<string>;\n};\n\ntype Runtime = {\n config: PluginConfig;\n service: EngramAccessService;\n};\n\nexport type AccessCliOptions = {\n /**\n * The calling plugin's own id (e.g. `\"openclaw-engram\"` when invoked by the\n * shim binary). Forwarded to the plugin-entry resolver so shim CLI\n * users target their own `plugins.entries[\"openclaw-engram\"]` block instead\n * of accidentally resolving to the canonical `\"openclaw-remnic\"` entry when\n * `plugins.slots.memory` is unset (#403).\n */\n preferredId?: string;\n};\n\nfunction getOpenClawPluginEntries(raw: Record<string, unknown>): Record<string, unknown> | undefined {\n const plugins =\n raw[\"plugins\"] && typeof raw[\"plugins\"] === \"object\" && !Array.isArray(raw[\"plugins\"])\n ? (raw[\"plugins\"] as Record<string, unknown>)\n : undefined;\n const entries =\n plugins && plugins[\"entries\"] && typeof plugins[\"entries\"] === \"object\" && !Array.isArray(plugins[\"entries\"])\n ? (plugins[\"entries\"] as Record<string, unknown>)\n : undefined;\n return entries;\n}\n\nfunction getOpenClawMemorySlotId(raw: Record<string, unknown>): string | undefined {\n const plugins =\n raw[\"plugins\"] && typeof raw[\"plugins\"] === \"object\" && !Array.isArray(raw[\"plugins\"])\n ? (raw[\"plugins\"] as Record<string, unknown>)\n : undefined;\n const slots =\n plugins && plugins[\"slots\"] && typeof plugins[\"slots\"] === \"object\" && !Array.isArray(plugins[\"slots\"])\n ? (plugins[\"slots\"] as Record<string, unknown>)\n : undefined;\n const slotId = slots?.[\"memory\"];\n return typeof slotId === \"string\" ? slotId : undefined;\n}\n\nfunction resolveOpenClawRemnicPluginEntry(raw: unknown, preferredId?: string): Record<string, unknown> | undefined {\n return resolvePluginEntry(raw, {\n candidateIds: OPENCLAW_REMNIC_PLUGIN_IDS,\n preferredId,\n getEntries: getOpenClawPluginEntries,\n getSlotId: getOpenClawMemorySlotId,\n });\n}\n\nfunction hasAllowedOpenClawRemnicPluginId(value: string): boolean {\n return (OPENCLAW_REMNIC_PLUGIN_IDS as readonly string[]).includes(value);\n}\n\ntype UsageErrorKind =\n | \"unsupported-command\"\n | \"unexpected-positional\"\n | \"unknown-option\"\n | \"invalid-option\"\n | \"option-does-not-take-value\"\n | \"missing-option\"\n | \"missing-content\"\n | \"invalid-integer\"\n | \"invalid-number\";\n\nclass UsageError extends Error {\n constructor(\n readonly kind: UsageErrorKind,\n readonly optionName?: string,\n readonly acceptedValues?: readonly string[],\n ) {\n super(\"invalid access-cli arguments\");\n }\n}\n\nfunction formatUsageError(error: UsageError): string {\n switch (error.kind) {\n case \"unsupported-command\":\n return \"unsupported command\";\n case \"unexpected-positional\":\n return \"unexpected positional argument\";\n case \"unknown-option\":\n return `unknown option: --${error.optionName ?? \"unknown\"}`;\n case \"invalid-option\": {\n const accepted = error.acceptedValues?.length ? `. Accepted: ${error.acceptedValues.join(\", \")}.` : \"\";\n return `invalid value for --${error.optionName ?? \"unknown\"}${accepted}`;\n }\n case \"option-does-not-take-value\":\n return `option does not accept a value: --${error.optionName ?? \"unknown\"}`;\n case \"missing-option\":\n return `missing required option: --${error.optionName ?? \"unknown\"}`;\n case \"missing-content\":\n return \"missing required option: --content or --content-file\";\n case \"invalid-integer\":\n return `invalid integer for --${error.optionName ?? \"unknown\"}`;\n case \"invalid-number\":\n return `invalid number for --${error.optionName ?? \"unknown\"}`;\n }\n}\n\nfunction writeCliOutput(text: string = \"\"): void {\n process.stdout.write(`${text}\\n`);\n}\n\nfunction usage(): string {\n return [\n \"Usage:\",\n \" engram-access browse [options]\",\n \" engram-access store [options]\",\n \"\",\n \"Browse options:\",\n \" --namespace <name>\",\n \" --principal <principal>\",\n \" --query <text>\",\n \" --category <name>\",\n \" --status <name>\",\n \" --sort <updated_desc|updated_asc|created_desc|created_asc>\",\n \" --limit <n>\",\n \" --offset <n>\",\n \"\",\n \"Store options:\",\n \" --namespace <name>\",\n \" --session-key <key>\",\n \" --principal <principal>\",\n \" --content <text> | --content-file <path>\",\n \" --category <name>\",\n \" --confidence <0-1>\",\n \" --tag <tag> (repeatable)\",\n \" --entity-ref <ref>\",\n \" --ttl <duration>\",\n \" --source-reason <text>\",\n \" --idempotency-key <key>\",\n \" --dry-run\",\n ].join(\"\\n\");\n}\n\nconst COMMAND_SPECS: Record<CommandName, CommandSpec> = {\n browse: {\n valueOptions: new Set([\n \"namespace\",\n \"principal\",\n \"query\",\n \"category\",\n \"status\",\n \"sort\",\n \"limit\",\n \"offset\",\n ]),\n flagOptions: new Set(),\n },\n store: {\n valueOptions: new Set([\n \"namespace\",\n \"session-key\",\n \"principal\",\n \"content\",\n \"content-file\",\n \"category\",\n \"confidence\",\n \"tag\",\n \"entity-ref\",\n \"ttl\",\n \"source-reason\",\n \"idempotency-key\",\n ]),\n flagOptions: new Set([\"dry-run\"]),\n },\n};\n\nconst BROWSE_SORT_VALUES = Object.freeze([\n \"updated_desc\",\n \"updated_asc\",\n \"created_desc\",\n \"created_asc\",\n] as const);\n\ntype BrowseSort = (typeof BROWSE_SORT_VALUES)[number];\n\nfunction parseArgs(argv: string[]): ParsedArgs {\n const [commandRaw, ...rest] = argv;\n if (commandRaw !== \"browse\" && commandRaw !== \"store\") {\n throw new UsageError(\"unsupported-command\");\n }\n const spec = COMMAND_SPECS[commandRaw];\n\n const options: Record<string, string[]> = {};\n const flags = new Set<string>();\n\n for (let i = 0; i < rest.length; i += 1) {\n const token = rest[i];\n if (!token.startsWith(\"--\")) {\n throw new UsageError(\"unexpected-positional\");\n }\n const rawKey = token.slice(2);\n if (!rawKey) {\n throw new UsageError(\"unknown-option\", rawKey);\n }\n const equalsIndex = rawKey.indexOf(\"=\");\n const key = equalsIndex === -1 ? rawKey : rawKey.slice(0, equalsIndex);\n const inlineValue = equalsIndex === -1 ? undefined : rawKey.slice(equalsIndex + 1);\n\n if (!spec.valueOptions.has(key) && !spec.flagOptions.has(key)) {\n throw new UsageError(\"unknown-option\", key);\n }\n\n if (spec.flagOptions.has(key)) {\n if (inlineValue !== undefined) {\n throw new UsageError(\"option-does-not-take-value\", key);\n }\n const next = rest[i + 1];\n if (next && !next.startsWith(\"--\")) {\n throw new UsageError(\"option-does-not-take-value\", key);\n }\n flags.add(key);\n continue;\n }\n\n if (inlineValue !== undefined) {\n if (inlineValue.length === 0) {\n throw new UsageError(\"missing-option\", key);\n }\n if (!options[key]) {\n options[key] = [];\n }\n options[key].push(inlineValue);\n continue;\n }\n\n const next = rest[i + 1];\n if (next === undefined || next.length === 0 || next.startsWith(\"--\")) {\n throw new UsageError(\"missing-option\", key);\n }\n if (!options[key]) {\n options[key] = [];\n }\n options[key].push(next);\n i += 1;\n }\n\n return {\n command: commandRaw,\n options,\n flags,\n };\n}\n\nfunction getLastOption(args: ParsedArgs, name: string): string | undefined {\n const values = args.options[name];\n if (!values || values.length === 0) return undefined;\n return values[values.length - 1];\n}\n\nfunction getAllOptions(args: ParsedArgs, name: string): string[] {\n return args.options[name] ?? [];\n}\n\nfunction requireOption(args: ParsedArgs, name: string): string {\n const value = getLastOption(args, name);\n if (!value || value.trim().length === 0) {\n throw new UsageError(\"missing-option\", name);\n }\n return value;\n}\n\nfunction parseIntegerOption(\n args: ParsedArgs,\n name: string,\n options: { min?: number } = {},\n): number | undefined {\n const raw = getLastOption(args, name);\n if (!raw) return undefined;\n const trimmed = raw.trim();\n if (!/^[+-]?\\d+$/.test(trimmed)) {\n throw new UsageError(\"invalid-integer\", name);\n }\n const value = Number(trimmed);\n if (!Number.isSafeInteger(value)) {\n throw new UsageError(\"invalid-integer\", name);\n }\n if (options.min !== undefined && value < options.min) {\n throw new UsageError(\"invalid-option\", name, [`integer >= ${options.min}`]);\n }\n return value;\n}\n\nfunction parseBrowseSortOption(args: ParsedArgs, name: string): BrowseSort | undefined {\n const raw = getLastOption(args, name);\n if (!raw) return undefined;\n if ((BROWSE_SORT_VALUES as readonly string[]).includes(raw)) {\n return raw as BrowseSort;\n }\n throw new UsageError(\"invalid-option\", name, BROWSE_SORT_VALUES);\n}\n\nfunction parseFloatOption(\n args: ParsedArgs,\n name: string,\n options: { min?: number; max?: number } = {},\n): number | undefined {\n const raw = getLastOption(args, name);\n if (!raw) return undefined;\n const trimmed = raw.trim();\n if (!/^[+-]?(?:(?:\\d+\\.?\\d*)|(?:\\.\\d+))(?:e[+-]?\\d+)?$/i.test(trimmed)) {\n throw new UsageError(\"invalid-number\", name);\n }\n const value = Number(trimmed);\n if (!Number.isFinite(value)) {\n throw new UsageError(\"invalid-number\", name);\n }\n if (options.min !== undefined && value < options.min) {\n throw new UsageError(\"invalid-number\", name);\n }\n if (options.max !== undefined && value > options.max) {\n throw new UsageError(\"invalid-number\", name);\n }\n return value;\n}\n\nfunction loadPluginConfig(preferredId?: string): Record<string, unknown> {\n const configPath =\n expandOptionalPath(readEnvVar(\"OPENCLAW_CONFIG_PATH\")) ||\n expandOptionalPath(readEnvVar(\"OPENCLAW_ENGRAM_CONFIG_PATH\")) ||\n path.join(resolveHomeDir(), \".openclaw\", \"openclaw.json\");\n const raw = JSON.parse(fs.readFileSync(configPath, \"utf8\"));\n const slotId =\n raw && typeof raw === \"object\" && !Array.isArray(raw)\n ? getOpenClawMemorySlotId(raw as Record<string, unknown>)\n : undefined;\n if (typeof slotId === \"string\" && !hasAllowedOpenClawRemnicPluginId(slotId)) {\n throw new Error(\n `OpenClaw memory slot points to non-Remnic plugin \"${slotId}\"; refusing to use default Remnic access config.`,\n );\n }\n // Delegate slot → preferredId → canonical → legacy resolution to the\n // generic helper so all config loaders stay in sync (#403). Shim CLI\n // callers pass `preferredId: \"openclaw-engram\"` so legacy shim installs\n // target their own config block instead of falling through to the canonical\n // \"openclaw-remnic\" entry.\n const entry = resolveOpenClawRemnicPluginEntry(raw, preferredId);\n if (!entry) {\n throw new Error(\n \"OpenClaw config does not contain an allowed Remnic plugin entry; refusing to use default Remnic access config.\",\n );\n }\n return (entry?.[\"config\"] as Record<string, unknown> | undefined) ?? {};\n}\n\nfunction buildRuntime(preferredId?: string): Runtime {\n const config = parseConfig(loadPluginConfig(preferredId));\n return {\n config,\n service: new EngramAccessService(new Orchestrator(config)),\n };\n}\n\nasync function runBrowse(args: ParsedArgs, preferredId?: string): Promise<void> {\n const browseArgs = {\n namespace: getLastOption(args, \"namespace\"),\n principal: getLastOption(args, \"principal\"),\n query: getLastOption(args, \"query\"),\n category: getLastOption(args, \"category\"),\n status: getLastOption(args, \"status\"),\n sort: parseBrowseSortOption(args, \"sort\"),\n limit: parseIntegerOption(args, \"limit\", { min: 1 }),\n offset: parseIntegerOption(args, \"offset\", { min: 0 }),\n };\n const { config, service } = buildRuntime(preferredId);\n const request = {\n namespace: browseArgs.namespace,\n authenticatedPrincipal: browseArgs.principal ?? config.agentAccessHttp.principal,\n query: browseArgs.query,\n category: browseArgs.category,\n status: browseArgs.status,\n sort: browseArgs.sort,\n limit: browseArgs.limit,\n offset: browseArgs.offset,\n };\n const result = await service.memoryBrowse(request);\n console.log(JSON.stringify(result, null, 2));\n}\n\nasync function runStore(args: ParsedArgs, preferredId?: string): Promise<void> {\n const contentFile = getLastOption(args, \"content-file\");\n const inlineContent = getLastOption(args, \"content\");\n const content = contentFile\n ? fs.readFileSync(expandTildePath(contentFile), \"utf8\")\n : inlineContent;\n if (!content || content.trim().length === 0) {\n throw new UsageError(\"missing-content\");\n }\n const storeArgs = {\n namespace: getLastOption(args, \"namespace\"),\n sessionKey: getLastOption(args, \"session-key\"),\n content,\n category: requireOption(args, \"category\"),\n confidence: parseFloatOption(args, \"confidence\", { min: 0, max: 1 }),\n tags: getAllOptions(args, \"tag\"),\n entityRef: getLastOption(args, \"entity-ref\"),\n ttl: getLastOption(args, \"ttl\"),\n sourceReason: getLastOption(args, \"source-reason\"),\n idempotencyKey: getLastOption(args, \"idempotency-key\"),\n dryRun: args.flags.has(\"dry-run\"),\n };\n\n const { config, service } = buildRuntime(preferredId);\n const result = await service.memoryStore({\n namespace: storeArgs.namespace,\n sessionKey: storeArgs.sessionKey,\n authenticatedPrincipal: getLastOption(args, \"principal\") ?? config.agentAccessHttp.principal,\n content: storeArgs.content,\n category: storeArgs.category,\n confidence: storeArgs.confidence,\n tags: storeArgs.tags,\n entityRef: storeArgs.entityRef,\n ttl: storeArgs.ttl,\n sourceReason: storeArgs.sourceReason,\n idempotencyKey: storeArgs.idempotencyKey,\n dryRun: storeArgs.dryRun,\n });\n console.log(JSON.stringify(result, null, 2));\n}\n\nfunction expandOptionalPath(value: string | undefined): string | undefined {\n return value === undefined ? undefined : expandTildePath(value);\n}\n\nexport async function main(\n argv: string[] = process.argv.slice(2),\n options: AccessCliOptions = {},\n): Promise<void> {\n const args = parseArgs(argv);\n if (args.command === \"browse\") {\n await runBrowse(args, options.preferredId);\n return;\n }\n await runStore(args, options.preferredId);\n}\n\nexport function sanitizeAccessCliErrorMessage(message: string): string {\n return message.replace(\n /\\b(openaiApiKey|localLlmApiKey)\\b(\\s*[:=]\\s*)(?:\"[^\"]*\"|'[^']*'|[^\\s,}\\]]+)/gi,\n (_match, name: string, separator: string) => `${name}${separator}[redacted]`,\n );\n}\n\nexport function printUsage(): void {\n writeCliOutput(usage());\n}\n\nexport async function runCli(\n argv: string[] = process.argv.slice(2),\n options: AccessCliOptions = {},\n): Promise<void> {\n try {\n await main(argv, options);\n } catch (error) {\n if (error instanceof UsageError) {\n writeCliOutput(formatUsageError(error));\n writeCliOutput();\n printUsage();\n process.exit(1);\n }\n\n console.error(\"access-cli failed: runtime error\");\n process.exit(1);\n }\n}\n"],"mappings":"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","names":["next"]}
@@ -1,11 +1,11 @@
1
1
  import { IncomingMessage } from 'node:http';
2
- import { E as EngramAccessService } from './access-service-BdThkfIE.js';
2
+ import { E as EngramAccessService } from './access-service-C9_EpVHd.js';
3
3
  import { ResolvedIdentity } from './adapters/types.js';
4
4
  import { AdapterRegistry } from './adapters/registry.js';
5
5
  import './storage.js';
6
6
  import './page-versioning.js';
7
7
  import './consolidation-operator.js';
8
- import './types-BCF2wqKa.js';
8
+ import './types-CpMPD8xl.js';
9
9
  import './types-BliCnURB.js';
10
10
  import './index-DJ9QWMw-.js';
11
11
  import './memory-projection-store.js';
@@ -21,7 +21,7 @@ import './user-model.js';
21
21
  import './recall-audit-anomaly.js';
22
22
  import './recall-audit.js';
23
23
  import './explicit-capture.js';
24
- import './orchestrator-BexeSJ2j.js';
24
+ import './orchestrator-CoqytbK_.js';
25
25
  import './briefing.js';
26
26
  import './buffer.js';
27
27
  import './search/port.js';
@@ -40,12 +40,13 @@ import './session-observer-state.js';
40
40
  import './embedding-fallback.js';
41
41
  import './semantic-DJR8_DMQ.js';
42
42
  import './replay/types.js';
43
+ import './extraction-judge.js';
43
44
  import './lcm/engine.js';
44
45
  import './lcm/archive.js';
45
46
  import './lcm/summarizer.js';
46
47
  import './lcm/dag.js';
47
48
  import './lcm/queue.js';
48
- import './semantic-consolidation-PwkzNfdK.js';
49
+ import './semantic-consolidation-BPs6BURk.js';
49
50
  import './connectors/codex-materialize.js';
50
51
  import './logger.js';
51
52
  import './conversation-index/backend.js';
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  EngramAccessHttpServer
3
- } from "./chunk-XXO5TI3B.js";
3
+ } from "./chunk-32U3N7H5.js";
4
4
  import "./chunk-SEDEKFYQ.js";
5
5
  import "./chunk-2QSZNTDO.js";
6
6
  import "./chunk-RSUYKGGZ.js";
@@ -9,10 +9,10 @@ import "./chunk-TMSXWOBZ.js";
9
9
  import "./chunk-J64TK33U.js";
10
10
  import "./chunk-7RXCMVFQ.js";
11
11
  import "./chunk-7WV3F5DQ.js";
12
- import "./chunk-54KDA6UK.js";
12
+ import "./chunk-XG4NAWAV.js";
13
13
  import "./chunk-6L46YAEZ.js";
14
14
  import "./chunk-D24OXEPB.js";
15
- import "./chunk-JXHMAQYT.js";
15
+ import "./chunk-DOBJH4I6.js";
16
16
  import "./chunk-GDASG7NC.js";
17
17
  import "./chunk-GDB4J2H3.js";
18
18
  import "./chunk-DGNQRNLL.js";
@@ -20,7 +20,7 @@ import "./chunk-PW6GURU3.js";
20
20
  import "./chunk-SOBJ6NEY.js";
21
21
  import "./chunk-BT7NVCML.js";
22
22
  import "./chunk-H7XKCNR6.js";
23
- import "./chunk-3MNBW7R7.js";
23
+ import "./chunk-C4KKM62E.js";
24
24
  import "./chunk-EDQVAMQI.js";
25
25
  import "./chunk-JGSKJHF7.js";
26
26
  import "./chunk-YQNADJCT.js";
@@ -38,8 +38,9 @@ import "./chunk-ODPLEWB6.js";
38
38
  import "./chunk-XL7FK7PJ.js";
39
39
  import "./chunk-2LSZVONP.js";
40
40
  import "./chunk-DEUNUKTD.js";
41
- import "./chunk-NKCW223V.js";
42
- import "./chunk-UGHUNQ74.js";
41
+ import "./chunk-CMN5AWAZ.js";
42
+ import "./chunk-QYGIQ5NM.js";
43
+ import "./chunk-M7XQSUBB.js";
43
44
  import "./chunk-5UZXUTVO.js";
44
45
  import "./chunk-J6A3CX5N.js";
45
46
  import "./chunk-FPNQF475.js";
@@ -1,9 +1,9 @@
1
1
  import { Readable, Writable } from 'node:stream';
2
- import { E as EngramAccessService } from './access-service-BdThkfIE.js';
2
+ import { E as EngramAccessService } from './access-service-C9_EpVHd.js';
3
3
  import './storage.js';
4
4
  import './page-versioning.js';
5
5
  import './consolidation-operator.js';
6
- import './types-BCF2wqKa.js';
6
+ import './types-CpMPD8xl.js';
7
7
  import './types-BliCnURB.js';
8
8
  import './index-DJ9QWMw-.js';
9
9
  import './memory-projection-store.js';
@@ -19,7 +19,7 @@ import './user-model.js';
19
19
  import './recall-audit-anomaly.js';
20
20
  import './recall-audit.js';
21
21
  import './explicit-capture.js';
22
- import './orchestrator-BexeSJ2j.js';
22
+ import './orchestrator-CoqytbK_.js';
23
23
  import './briefing.js';
24
24
  import './buffer.js';
25
25
  import './search/port.js';
@@ -38,12 +38,13 @@ import './session-observer-state.js';
38
38
  import './embedding-fallback.js';
39
39
  import './semantic-DJR8_DMQ.js';
40
40
  import './replay/types.js';
41
+ import './extraction-judge.js';
41
42
  import './lcm/engine.js';
42
43
  import './lcm/archive.js';
43
44
  import './lcm/summarizer.js';
44
45
  import './lcm/dag.js';
45
46
  import './lcm/queue.js';
46
- import './semantic-consolidation-PwkzNfdK.js';
47
+ import './semantic-consolidation-BPs6BURk.js';
47
48
  import './connectors/codex-materialize.js';
48
49
  import './logger.js';
49
50
  import './conversation-index/backend.js';
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  EngramMcpServer
3
- } from "./chunk-54KDA6UK.js";
3
+ } from "./chunk-XG4NAWAV.js";
4
4
  import "./chunk-6L46YAEZ.js";
5
5
  import "./chunk-D24OXEPB.js";
6
- import "./chunk-JXHMAQYT.js";
6
+ import "./chunk-DOBJH4I6.js";
7
7
  import "./chunk-GDASG7NC.js";
8
8
  import "./chunk-GDB4J2H3.js";
9
9
  import "./chunk-DGNQRNLL.js";
@@ -11,7 +11,7 @@ import "./chunk-PW6GURU3.js";
11
11
  import "./chunk-SOBJ6NEY.js";
12
12
  import "./chunk-BT7NVCML.js";
13
13
  import "./chunk-H7XKCNR6.js";
14
- import "./chunk-3MNBW7R7.js";
14
+ import "./chunk-C4KKM62E.js";
15
15
  import "./chunk-EDQVAMQI.js";
16
16
  import "./chunk-JGSKJHF7.js";
17
17
  import "./chunk-YQNADJCT.js";
@@ -29,8 +29,9 @@ import "./chunk-ODPLEWB6.js";
29
29
  import "./chunk-XL7FK7PJ.js";
30
30
  import "./chunk-2LSZVONP.js";
31
31
  import "./chunk-DEUNUKTD.js";
32
- import "./chunk-NKCW223V.js";
33
- import "./chunk-UGHUNQ74.js";
32
+ import "./chunk-CMN5AWAZ.js";
33
+ import "./chunk-QYGIQ5NM.js";
34
+ import "./chunk-M7XQSUBB.js";
34
35
  import "./chunk-5UZXUTVO.js";
35
36
  import "./chunk-J6A3CX5N.js";
36
37
  import "./chunk-FPNQF475.js";
@@ -1,12 +1,12 @@
1
1
  import { StorageManager } from './storage.js';
2
2
  import { a as Peer, b as PeerProfile } from './types-B1VHaf2w.js';
3
3
  import { RecallExplainJsonPayload } from './recall-explain-renderer.js';
4
- import { P as PluginConfig, ah as DaySummaryResult, H as RecallPlanMode, K as RecallDisclosure, g as MemoryFile, n as MemoryLifecycleEvent, x as EntityFile, j as MemoryStatus, at as DreamsStatusResult, au as DreamsPhase, av as DreamsRunResult } from './types-BCF2wqKa.js';
4
+ import { P as PluginConfig, ah as DaySummaryResult, H as RecallPlanMode, K as RecallDisclosure, g as MemoryFile, n as MemoryLifecycleEvent, x as EntityFile, h as MemoryStatus, at as DreamsStatusResult, au as DreamsPhase, av as DreamsRunResult } from './types-CpMPD8xl.js';
5
5
  import { AnomalyDetectorResult } from './recall-audit-anomaly.js';
6
6
  import { ExplicitCaptureInput } from './explicit-capture.js';
7
7
  import { BudgetDecision } from './cross-namespace-budget.js';
8
8
  import { readMemoryGovernanceRunArtifact } from './maintenance/memory-governance.js';
9
- import { O as Orchestrator, I as IntentDebugSnapshot, G as GraphRecallSnapshot, P as PatternReinforcementResult, W as WearablesService } from './orchestrator-BexeSJ2j.js';
9
+ import { O as Orchestrator, I as IntentDebugSnapshot, G as GraphRecallSnapshot, P as PatternReinforcementResult, W as WearablesService } from './orchestrator-CoqytbK_.js';
10
10
  import { LiveConnectorsRunSummary } from './live-connectors-runner.js';
11
11
  import { LastRecallSnapshot } from './recall-state.js';
12
12
  import { GraphSnapshotRequest, GraphSnapshotResponse } from './graph-snapshot.js';
@@ -1,13 +1,13 @@
1
1
  import './storage.js';
2
2
  import './types-B1VHaf2w.js';
3
- export { C as CodingScopedWriteInput, h as ENGRAM_ACCESS_WRITE_SCHEMA_VERSION, i as EngramAccessActionConfidenceRequest, j as EngramAccessActionConfidenceResponse, k as EngramAccessBriefingRequest, l as EngramAccessBriefingResponse, m as EngramAccessCapsuleListResponse, n as EngramAccessDaySummaryRequest, o as EngramAccessEntityListResponse, p as EngramAccessEntityResponse, q as EngramAccessEntitySummary, r as EngramAccessHealthResponse, b as EngramAccessInputError, s as EngramAccessLcmCompactionFlushRequest, t as EngramAccessLcmCompactionFlushResponse, u as EngramAccessLcmCompactionRecordRequest, v as EngramAccessLcmCompactionRecordResponse, w as EngramAccessLcmSearchRequest, x as EngramAccessLcmSearchResponse, y as EngramAccessLcmStatusResponse, z as EngramAccessMaintenanceResponse, A as EngramAccessMemoryBrowseRequest, B as EngramAccessMemoryBrowseResponse, D as EngramAccessMemoryRecord, F as EngramAccessMemoryResponse, G as EngramAccessMemoryStoreRequest, H as EngramAccessMemorySummary, I as EngramAccessObserveMessage, J as EngramAccessObserveRequest, K as EngramAccessObserveResponse, L as EngramAccessOfflineSyncApplyFileContentRequest, M as EngramAccessOfflineSyncApplyFileContentResponse, N as EngramAccessOfflineSyncApplyRequest, O as EngramAccessOfflineSyncApplyResponse, Q as EngramAccessOfflineSyncFileContentRequest, R as EngramAccessOfflineSyncFileContentResponse, S as EngramAccessOfflineSyncFilesRequest, T as EngramAccessOfflineSyncFilesResponse, U as EngramAccessOfflineSyncSnapshotRequest, V as EngramAccessOfflineSyncSnapshotResponse, W as EngramAccessOfflineSyncSnapshotStreamResponse, X as EngramAccessQualityResponse, Y as EngramAccessRecallExplainRequest, Z as EngramAccessRecallExplainResponse, _ as EngramAccessRecallRequest, a as EngramAccessRecallResponse, $ as EngramAccessReviewDispositionRequest, a0 as EngramAccessReviewDispositionResponse, a1 as EngramAccessReviewQueueResponse, E as EngramAccessService, a2 as EngramAccessSetCodingContextRequest, a3 as EngramAccessSuggestionSubmitRequest, a4 as EngramAccessTimelineResponse, a5 as EngramAccessTrustZoneBrowseRequest, a6 as EngramAccessTrustZoneBrowseResponse, a7 as EngramAccessTrustZoneDemoSeedRequest, a8 as EngramAccessTrustZoneDemoSeedResponse, a9 as EngramAccessTrustZonePromoteRequest, aa as EngramAccessTrustZonePromoteResponse, ab as EngramAccessTrustZoneRecordSummary, ac as EngramAccessTrustZoneStatusResponse, ad as EngramAccessWriteEnvelope, ae as EngramAccessWriteResponse, af as shapeMemorySummary } from './access-service-BdThkfIE.js';
3
+ export { C as CodingScopedWriteInput, h as ENGRAM_ACCESS_WRITE_SCHEMA_VERSION, i as EngramAccessActionConfidenceRequest, j as EngramAccessActionConfidenceResponse, k as EngramAccessBriefingRequest, l as EngramAccessBriefingResponse, m as EngramAccessCapsuleListResponse, n as EngramAccessDaySummaryRequest, o as EngramAccessEntityListResponse, p as EngramAccessEntityResponse, q as EngramAccessEntitySummary, r as EngramAccessHealthResponse, b as EngramAccessInputError, s as EngramAccessLcmCompactionFlushRequest, t as EngramAccessLcmCompactionFlushResponse, u as EngramAccessLcmCompactionRecordRequest, v as EngramAccessLcmCompactionRecordResponse, w as EngramAccessLcmSearchRequest, x as EngramAccessLcmSearchResponse, y as EngramAccessLcmStatusResponse, z as EngramAccessMaintenanceResponse, A as EngramAccessMemoryBrowseRequest, B as EngramAccessMemoryBrowseResponse, D as EngramAccessMemoryRecord, F as EngramAccessMemoryResponse, G as EngramAccessMemoryStoreRequest, H as EngramAccessMemorySummary, I as EngramAccessObserveMessage, J as EngramAccessObserveRequest, K as EngramAccessObserveResponse, L as EngramAccessOfflineSyncApplyFileContentRequest, M as EngramAccessOfflineSyncApplyFileContentResponse, N as EngramAccessOfflineSyncApplyRequest, O as EngramAccessOfflineSyncApplyResponse, Q as EngramAccessOfflineSyncFileContentRequest, R as EngramAccessOfflineSyncFileContentResponse, S as EngramAccessOfflineSyncFilesRequest, T as EngramAccessOfflineSyncFilesResponse, U as EngramAccessOfflineSyncSnapshotRequest, V as EngramAccessOfflineSyncSnapshotResponse, W as EngramAccessOfflineSyncSnapshotStreamResponse, X as EngramAccessQualityResponse, Y as EngramAccessRecallExplainRequest, Z as EngramAccessRecallExplainResponse, _ as EngramAccessRecallRequest, a as EngramAccessRecallResponse, $ as EngramAccessReviewDispositionRequest, a0 as EngramAccessReviewDispositionResponse, a1 as EngramAccessReviewQueueResponse, E as EngramAccessService, a2 as EngramAccessSetCodingContextRequest, a3 as EngramAccessSuggestionSubmitRequest, a4 as EngramAccessTimelineResponse, a5 as EngramAccessTrustZoneBrowseRequest, a6 as EngramAccessTrustZoneBrowseResponse, a7 as EngramAccessTrustZoneDemoSeedRequest, a8 as EngramAccessTrustZoneDemoSeedResponse, a9 as EngramAccessTrustZonePromoteRequest, aa as EngramAccessTrustZonePromoteResponse, ab as EngramAccessTrustZoneRecordSummary, ac as EngramAccessTrustZoneStatusResponse, ad as EngramAccessWriteEnvelope, ae as EngramAccessWriteResponse, af as shapeMemorySummary } from './access-service-C9_EpVHd.js';
4
4
  import './recall-explain-renderer.js';
5
- import './types-BCF2wqKa.js';
5
+ import './types-CpMPD8xl.js';
6
6
  import './recall-audit-anomaly.js';
7
7
  import './explicit-capture.js';
8
8
  import './cross-namespace-budget.js';
9
9
  import './maintenance/memory-governance.js';
10
- import './orchestrator-BexeSJ2j.js';
10
+ import './orchestrator-CoqytbK_.js';
11
11
  import './live-connectors-runner.js';
12
12
  import './recall-state.js';
13
13
  import './graph-snapshot.js';
@@ -46,12 +46,13 @@ import './negative.js';
46
46
  import './session-observer-state.js';
47
47
  import './embedding-fallback.js';
48
48
  import './replay/types.js';
49
+ import './extraction-judge.js';
49
50
  import './lcm/engine.js';
50
51
  import './lcm/archive.js';
51
52
  import './lcm/summarizer.js';
52
53
  import './lcm/dag.js';
53
54
  import './lcm/queue.js';
54
- import './semantic-consolidation-PwkzNfdK.js';
55
+ import './semantic-consolidation-BPs6BURk.js';
55
56
  import './connectors/codex-materialize.js';
56
57
  import './logger.js';
57
58
  import './conversation-index/backend.js';
@@ -3,7 +3,7 @@ import {
3
3
  EngramAccessInputError,
4
4
  EngramAccessService,
5
5
  shapeMemorySummary
6
- } from "./chunk-JXHMAQYT.js";
6
+ } from "./chunk-DOBJH4I6.js";
7
7
  import "./chunk-GDASG7NC.js";
8
8
  import "./chunk-GDB4J2H3.js";
9
9
  import "./chunk-DGNQRNLL.js";
@@ -11,7 +11,7 @@ import "./chunk-PW6GURU3.js";
11
11
  import "./chunk-SOBJ6NEY.js";
12
12
  import "./chunk-BT7NVCML.js";
13
13
  import "./chunk-H7XKCNR6.js";
14
- import "./chunk-3MNBW7R7.js";
14
+ import "./chunk-C4KKM62E.js";
15
15
  import "./chunk-EDQVAMQI.js";
16
16
  import "./chunk-JGSKJHF7.js";
17
17
  import "./chunk-YQNADJCT.js";
@@ -29,8 +29,9 @@ import "./chunk-ODPLEWB6.js";
29
29
  import "./chunk-XL7FK7PJ.js";
30
30
  import "./chunk-2LSZVONP.js";
31
31
  import "./chunk-DEUNUKTD.js";
32
- import "./chunk-NKCW223V.js";
33
- import "./chunk-UGHUNQ74.js";
32
+ import "./chunk-CMN5AWAZ.js";
33
+ import "./chunk-QYGIQ5NM.js";
34
+ import "./chunk-M7XQSUBB.js";
34
35
  import "./chunk-5UZXUTVO.js";
35
36
  import "./chunk-J6A3CX5N.js";
36
37
  import "./chunk-FPNQF475.js";
@@ -1,5 +1,5 @@
1
1
  import { RetrievedMemoryCorrectionState, RetrievedMemorySafety } from './memory-provenance.js';
2
- import './types-BCF2wqKa.js';
2
+ import './types-CpMPD8xl.js';
3
3
  import './types-BliCnURB.js';
4
4
  import './index-DJ9QWMw-.js';
5
5
  import './user-model.js';
@@ -1,4 +1,4 @@
1
- import { P as PluginConfig, g as MemoryFile } from './types-BCF2wqKa.js';
1
+ import { P as PluginConfig, g as MemoryFile } from './types-CpMPD8xl.js';
2
2
  import './types-BliCnURB.js';
3
3
  import './index-DJ9QWMw-.js';
4
4
 
@@ -1,4 +1,4 @@
1
- import { A as ActiveRecallChatType, a as ActiveRecallQueryMode, b as ActiveRecallPromptStyle, c as ActiveRecallThinking, d as ActiveRecallModelFallbackPolicy } from './types-BCF2wqKa.js';
1
+ import { A as ActiveRecallChatType, a as ActiveRecallQueryMode, b as ActiveRecallPromptStyle, c as ActiveRecallThinking, d as ActiveRecallModelFallbackPolicy } from './types-CpMPD8xl.js';
2
2
  import './types-BliCnURB.js';
3
3
  import './index-DJ9QWMw-.js';
4
4
 
@@ -4,7 +4,7 @@ import {
4
4
  } from "./chunk-6MKAMLQL.js";
5
5
  import {
6
6
  DEFAULT_REASONING_MODEL
7
- } from "./chunk-KKTXCFD7.js";
7
+ } from "./chunk-7H5WCPBS.js";
8
8
  import "./chunk-PHK3HARR.js";
9
9
  import "./chunk-NDAH7BJ5.js";
10
10
  import "./chunk-Z5LAYHGJ.js";
@@ -0,0 +1,75 @@
1
+ import {
2
+ dateInTimezone,
3
+ defaultTimezone
4
+ } from "./chunk-KVDUDYEN.js";
5
+ import "./chunk-K47C6M2C.js";
6
+ import "./chunk-JXS5PDQ7.js";
7
+ import "./chunk-723OMPUI.js";
8
+ import "./chunk-B5XMS73R.js";
9
+ import "./chunk-7SI52C65.js";
10
+ import "./chunk-L2EXJQJP.js";
11
+ import "./chunk-RK6F44Y6.js";
12
+ import "./chunk-NDAH7BJ5.js";
13
+ import {
14
+ describeErrorForOperator
15
+ } from "./chunk-7WV3F5DQ.js";
16
+ import "./chunk-QDW3E4RD.js";
17
+ import "./chunk-M7XQSUBB.js";
18
+ import "./chunk-6KYMPV2O.js";
19
+ import "./chunk-RGMVMVMF.js";
20
+ import "./chunk-EYIEWJNI.js";
21
+ import "./chunk-JUC24CTX.js";
22
+ import "./chunk-ZBJMUXZH.js";
23
+ import "./chunk-2ODBA7MQ.js";
24
+ import "./chunk-PZ5AY32C.js";
25
+
26
+ // src/wearables/auto-sync.ts
27
+ function startWearablesAutoSync(settings, deps) {
28
+ let inFlight = null;
29
+ let stopped = false;
30
+ let lastDeepDate = null;
31
+ const abortController = new AbortController();
32
+ const tick = async () => {
33
+ if (inFlight || stopped) return;
34
+ const run = (async () => {
35
+ try {
36
+ const now = deps.now ? deps.now() : /* @__PURE__ */ new Date();
37
+ const today = dateInTimezone(now, settings.timezone ?? defaultTimezone());
38
+ const deep = settings.deepDays > 0 && lastDeepDate !== today;
39
+ const days = deep ? settings.deepDays : settings.days;
40
+ await deps.sync({ days, signal: abortController.signal });
41
+ if (deep) lastDeepDate = today;
42
+ deps.log.info(
43
+ `wearables auto-sync: refreshed ${days}-day window${deep ? " (daily deep pass)" : ""}`
44
+ );
45
+ } catch (err) {
46
+ if (!stopped) {
47
+ deps.log.warn(
48
+ `wearables auto-sync failed: ${describeErrorForOperator(err)} \u2014 retrying on the next tick`
49
+ );
50
+ }
51
+ } finally {
52
+ inFlight = null;
53
+ }
54
+ })();
55
+ inFlight = run;
56
+ await run;
57
+ };
58
+ const timer = setInterval(() => {
59
+ void tick();
60
+ }, settings.intervalMinutes * 6e4);
61
+ timer.unref?.();
62
+ return {
63
+ tick,
64
+ stop: async () => {
65
+ stopped = true;
66
+ clearInterval(timer);
67
+ abortController.abort();
68
+ if (inFlight) await inFlight;
69
+ }
70
+ };
71
+ }
72
+ export {
73
+ startWearablesAutoSync
74
+ };
75
+ //# sourceMappingURL=auto-sync-RFADEHIQ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/wearables/auto-sync.ts"],"sourcesContent":["/**\n * Wearables auto-sync — in-process periodic transcript refresh.\n *\n * Every tick re-syncs a short rolling window ending today for ALL\n * enabled sources, so the current day's transcript keeps growing while\n * the wearable records and provider-side revisions of recent days flow\n * in without operator action. Once per local day the window deepens to\n * `autoSyncDeepDays` to pick up late uploads and provider reprocessing\n * further back (phones syncing hours later, re-diarized transcripts).\n *\n * Day fetches are unconditional within the window — existing day files\n * are always re-fetched and re-composed; the content-hash skip in the\n * pipeline keeps unchanged days write-free, so a tick on a quiet day\n * is read-only. The timer is unref'd: it never keeps a one-shot CLI\n * process alive, and long-lived hosts stop it via the returned handle.\n */\n\nimport { describeErrorForOperator } from \"./errors.js\";\nimport { dateInTimezone, defaultTimezone } from \"./pipeline.js\";\n\nexport interface WearablesAutoSyncSettings {\n /** Minutes between ticks. */\n intervalMinutes: number;\n /** Rolling window (days ending today) refreshed on a normal tick. */\n days: number;\n /**\n * Window for the once-per-local-day deep pass. 0 disables the deep\n * pass; otherwise must be >= `days` (validated at config parse).\n */\n deepDays: number;\n /** IANA timezone used to detect the local-day rollover. */\n timezone?: string;\n}\n\nexport interface WearablesAutoSyncDeps {\n /** Run a sync across all enabled sources (WearablesService.sync). */\n sync(options: { days: number; signal?: AbortSignal }): Promise<unknown>;\n log: { info(message: string): void; warn(message: string): void };\n /** Clock injection for tests. */\n now?: () => Date;\n}\n\nexport interface WearablesAutoSyncHandle {\n /** Run one scheduler tick now (first-run hook and test seam). */\n tick(): Promise<void>;\n /**\n * Stop the scheduler: clears the timer, aborts the in-flight sync's\n * provider fetches via AbortSignal, and resolves once the in-flight\n * tick has fully settled — after `await stop()` nothing is writing\n * or reindexing anymore. The handle is single-use; a restarted host\n * starts a fresh one.\n */\n stop(): Promise<void>;\n}\n\n/**\n * Start the periodic refresh. The first tick fires after one full\n * interval rather than at start — gateways on low-power hardware can\n * restart-loop during setup (issue #462), and an immediate fetch on\n * every restart would hammer provider APIs. Operators who want an\n * instant refresh run `wearables sync` (or call `tick()`).\n */\nexport function startWearablesAutoSync(\n settings: WearablesAutoSyncSettings,\n deps: WearablesAutoSyncDeps,\n): WearablesAutoSyncHandle {\n let inFlight: Promise<void> | null = null;\n let stopped = false;\n let lastDeepDate: string | null = null;\n // Aborting cancels the in-flight sync's provider fetches promptly on\n // shutdown — without it, a slow tick would keep writing/reindexing\n // after orchestrator.destroy() while a restarted host starts a\n // second scheduler (Kilo review on PR #1464).\n const abortController = new AbortController();\n\n const tick = async (): Promise<void> => {\n // Overlap guard: a slow provider or large deep window must never\n // stack a second sync on top of a running one. The skipped call\n // resolves immediately — it must NOT await the running tick, or a\n // caller holding both promises could deadlock itself.\n if (inFlight || stopped) return;\n const run = (async () => {\n try {\n const now = deps.now ? deps.now() : new Date();\n const today = dateInTimezone(now, settings.timezone ?? defaultTimezone());\n const deep = settings.deepDays > 0 && lastDeepDate !== today;\n const days = deep ? settings.deepDays : settings.days;\n await deps.sync({ days, signal: abortController.signal });\n // Mark the deep pass done only AFTER it succeeded — a failed\n // deep pass retries on the next tick instead of silently\n // waiting for tomorrow (CLAUDE.md rule 25's \"confirm before\n // consuming the one-shot\" shape).\n if (deep) lastDeepDate = today;\n deps.log.info(\n `wearables auto-sync: refreshed ${days}-day window${deep ? \" (daily deep pass)\" : \"\"}`,\n );\n } catch (err) {\n // An abort raised by stop() is intentional shutdown, not a\n // failure — warning about it would be noise in every clean\n // shutdown log.\n if (!stopped) {\n deps.log.warn(\n `wearables auto-sync failed: ${describeErrorForOperator(err)} — retrying on the next tick`,\n );\n }\n } finally {\n inFlight = null;\n }\n })();\n inFlight = run;\n await run;\n };\n\n const timer = setInterval(() => {\n void tick();\n }, settings.intervalMinutes * 60_000);\n timer.unref?.();\n\n return {\n tick,\n stop: async () => {\n stopped = true;\n clearInterval(timer);\n abortController.abort();\n // tick() never rejects (all paths caught), so this only waits.\n if (inFlight) await inFlight;\n },\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AA8DO,SAAS,uBACd,UACA,MACyB;AACzB,MAAI,WAAiC;AACrC,MAAI,UAAU;AACd,MAAI,eAA8B;AAKlC,QAAM,kBAAkB,IAAI,gBAAgB;AAE5C,QAAM,OAAO,YAA2B;AAKtC,QAAI,YAAY,QAAS;AACzB,UAAM,OAAO,YAAY;AACvB,UAAI;AACF,cAAM,MAAM,KAAK,MAAM,KAAK,IAAI,IAAI,oBAAI,KAAK;AAC7C,cAAM,QAAQ,eAAe,KAAK,SAAS,YAAY,gBAAgB,CAAC;AACxE,cAAM,OAAO,SAAS,WAAW,KAAK,iBAAiB;AACvD,cAAM,OAAO,OAAO,SAAS,WAAW,SAAS;AACjD,cAAM,KAAK,KAAK,EAAE,MAAM,QAAQ,gBAAgB,OAAO,CAAC;AAKxD,YAAI,KAAM,gBAAe;AACzB,aAAK,IAAI;AAAA,UACP,kCAAkC,IAAI,cAAc,OAAO,uBAAuB,EAAE;AAAA,QACtF;AAAA,MACF,SAAS,KAAK;AAIZ,YAAI,CAAC,SAAS;AACZ,eAAK,IAAI;AAAA,YACP,+BAA+B,yBAAyB,GAAG,CAAC;AAAA,UAC9D;AAAA,QACF;AAAA,MACF,UAAE;AACA,mBAAW;AAAA,MACb;AAAA,IACF,GAAG;AACH,eAAW;AACX,UAAM;AAAA,EACR;AAEA,QAAM,QAAQ,YAAY,MAAM;AAC9B,SAAK,KAAK;AAAA,EACZ,GAAG,SAAS,kBAAkB,GAAM;AACpC,QAAM,QAAQ;AAEd,SAAO;AAAA,IACL;AAAA,IACA,MAAM,YAAY;AAChB,gBAAU;AACV,oBAAc,KAAK;AACnB,sBAAgB,MAAM;AAEtB,UAAI,SAAU,OAAM;AAAA,IACtB;AAAA,EACF;AACF;","names":[]}
@@ -1,4 +1,4 @@
1
- import { B as BehaviorSignalEvent, P as PluginConfig, e as BehaviorLoopPolicyState } from './types-BCF2wqKa.js';
1
+ import { B as BehaviorSignalEvent, P as PluginConfig, e as BehaviorLoopPolicyState } from './types-CpMPD8xl.js';
2
2
  import './types-BliCnURB.js';
3
3
  import './index-DJ9QWMw-.js';
4
4
 
@@ -1,4 +1,4 @@
1
- import { M as MemoryCategory, B as BehaviorSignalEvent } from './types-BCF2wqKa.js';
1
+ import { M as MemoryCategory, B as BehaviorSignalEvent } from './types-CpMPD8xl.js';
2
2
  import './types-BliCnURB.js';
3
3
  import './index-DJ9QWMw-.js';
4
4
 
@@ -1,5 +1,5 @@
1
- import { P as PluginConfig } from './types-BCF2wqKa.js';
2
- import { O as Orchestrator } from './orchestrator-BexeSJ2j.js';
1
+ import { P as PluginConfig } from './types-CpMPD8xl.js';
2
+ import { O as Orchestrator } from './orchestrator-CoqytbK_.js';
3
3
  import './types-BliCnURB.js';
4
4
  import './index-DJ9QWMw-.js';
5
5
  import './briefing.js';
@@ -31,12 +31,13 @@ import './session-observer-state.js';
31
31
  import './embedding-fallback.js';
32
32
  import './semantic-DJR8_DMQ.js';
33
33
  import './replay/types.js';
34
+ import './extraction-judge.js';
34
35
  import './lcm/engine.js';
35
36
  import './lcm/archive.js';
36
37
  import './lcm/summarizer.js';
37
38
  import './lcm/dag.js';
38
39
  import './lcm/queue.js';
39
- import './semantic-consolidation-PwkzNfdK.js';
40
+ import './semantic-consolidation-BPs6BURk.js';
40
41
  import './connectors/codex-materialize.js';
41
42
  import './logger.js';
42
43
  import './conversation-index/backend.js';
@@ -1,5 +1,5 @@
1
1
  import { StorageManager } from './storage.js';
2
- import { N as BriefingSections, O as BriefingFollowup, Q as BriefingFocus, S as CalendarSource, U as CalendarEvent, g as MemoryFile, V as BriefingActiveThread, W as BriefingResult, x as EntityFile, X as BriefingRecentEntity } from './types-BCF2wqKa.js';
2
+ import { N as BriefingSections, O as BriefingFollowup, Q as BriefingFocus, S as CalendarSource, U as CalendarEvent, g as MemoryFile, V as BriefingActiveThread, W as BriefingResult, x as EntityFile, X as BriefingRecentEntity } from './types-CpMPD8xl.js';
3
3
  import './page-versioning.js';
4
4
  import './consolidation-operator.js';
5
5
  import './memory-projection-store.js';