@remnic/core 9.3.624 → 9.3.625

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 (261) hide show
  1. package/dist/access-cli.js +18 -16
  2. package/dist/access-cli.js.map +1 -1
  3. package/dist/access-http.d.ts +12 -5
  4. package/dist/access-http.js +10 -9
  5. package/dist/access-mcp.d.ts +5 -5
  6. package/dist/access-mcp.js +8 -8
  7. package/dist/access-schema.d.ts +5 -5
  8. package/dist/{access-service-CBNEKjzN.d.ts → access-service-C_sfOHsX.d.ts} +26 -3
  9. package/dist/access-service.d.ts +5 -5
  10. package/dist/access-service.js +7 -7
  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 +2 -1
  15. package/dist/active-recall.js.map +1 -1
  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 -4
  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/causal-behavior.d.ts +1 -1
  25. package/dist/causal-consolidation.d.ts +1 -1
  26. package/dist/causal-consolidation.js +4 -4
  27. package/dist/{chunk-7TPH6UZL.js → chunk-2RHI3FGV.js} +540 -17
  28. package/dist/chunk-2RHI3FGV.js.map +1 -0
  29. package/dist/{chunk-GYTVOLNX.js → chunk-3MNBW7R7.js} +2 -2
  30. package/dist/{chunk-QFQQFX2H.js → chunk-3R2UZV3U.js} +2 -2
  31. package/dist/{chunk-O4UNM6OR.js → chunk-532VCWYW.js} +2 -2
  32. package/dist/{chunk-2UFQYU5F.js → chunk-57QXN2CS.js} +2 -2
  33. package/dist/chunk-7WV3F5DQ.js +22 -0
  34. package/dist/chunk-7WV3F5DQ.js.map +1 -0
  35. package/dist/{chunk-RKW6QR7W.js → chunk-AZ4RI3QD.js} +1461 -78
  36. package/dist/chunk-AZ4RI3QD.js.map +1 -0
  37. package/dist/{chunk-KQFQ3IS5.js → chunk-F3FY3D3S.js} +43 -7
  38. package/dist/chunk-F3FY3D3S.js.map +1 -0
  39. package/dist/{chunk-4R4KTDIE.js → chunk-FPNQF475.js} +1 -1
  40. package/dist/chunk-FPNQF475.js.map +1 -0
  41. package/dist/{chunk-UGEBPVNI.js → chunk-GE7Q7KXP.js} +2 -2
  42. package/dist/{chunk-GLWW3EJQ.js → chunk-KB4MFBF5.js} +3 -3
  43. package/dist/{chunk-5GOMXHLC.js → chunk-KKTXCFD7.js} +255 -1
  44. package/dist/chunk-KKTXCFD7.js.map +1 -0
  45. package/dist/{chunk-FH3PPO42.js → chunk-KVFYTRMV.js} +2 -2
  46. package/dist/{chunk-BNW5NJJH.js → chunk-LQYTQCXM.js} +2 -2
  47. package/dist/{chunk-AYHXQR53.js → chunk-MVQN73GT.js} +2 -2
  48. package/dist/{chunk-ZZPIJPPD.js → chunk-N5RGXWLQ.js} +2 -2
  49. package/dist/chunk-NDAH7BJ5.js +213 -0
  50. package/dist/chunk-NDAH7BJ5.js.map +1 -0
  51. package/dist/{chunk-R3OQGYOU.js → chunk-P2D2MM47.js} +2 -2
  52. package/dist/{chunk-PSUB67YB.js → chunk-PW6GURU3.js} +2 -2
  53. package/dist/{chunk-W3BKVM64.js → chunk-QDV6VAD4.js} +2 -2
  54. package/dist/{chunk-3QSU4NFF.js → chunk-QHXW3LZV.js} +3 -3
  55. package/dist/{chunk-I6UCUHLK.js → chunk-SHV5Y2WU.js} +182 -3
  56. package/dist/chunk-SHV5Y2WU.js.map +1 -0
  57. package/dist/{chunk-OZXVGYGZ.js → chunk-STDAAGH7.js} +2 -2
  58. package/dist/{chunk-FMGWXIES.js → chunk-TZDSNIRO.js} +5 -5
  59. package/dist/{chunk-2L54V4ZO.js → chunk-UELS6WWF.js} +2 -2
  60. package/dist/{chunk-PJGB7XRR.js → chunk-UGHUNQ74.js} +502 -134
  61. package/dist/chunk-UGHUNQ74.js.map +1 -0
  62. package/dist/{chunk-FG76RDVI.js → chunk-Y3TMFC6I.js} +136 -4
  63. package/dist/chunk-Y3TMFC6I.js.map +1 -0
  64. package/dist/{chunk-BPSGLMQ4.js → chunk-YQNADJCT.js} +2 -2
  65. package/dist/{cli-Cw729yLf.d.ts → cli-EZv6YE6_.d.ts} +3 -3
  66. package/dist/cli.d.ts +6 -6
  67. package/dist/cli.js +23 -21
  68. package/dist/compounding/engine.d.ts +1 -1
  69. package/dist/compounding/engine.js +3 -3
  70. package/dist/compounding/preference-consolidator.d.ts +1 -1
  71. package/dist/compression-optimizer.d.ts +1 -1
  72. package/dist/config.d.ts +1 -1
  73. package/dist/config.js +2 -1
  74. package/dist/connectors/codex-materialize-runner.d.ts +1 -1
  75. package/dist/connectors/codex-materialize-runner.js +3 -3
  76. package/dist/connectors/codex-materialize.d.ts +1 -1
  77. package/dist/connectors/index.d.ts +1 -1
  78. package/dist/connectors/index.js +3 -3
  79. package/dist/consolidation-provenance-check.d.ts +1 -1
  80. package/dist/consolidation-undo.d.ts +1 -1
  81. package/dist/contradiction/index.d.ts +2 -2
  82. package/dist/conversation-index/backend.d.ts +1 -1
  83. package/dist/conversation-index/chunker.d.ts +1 -1
  84. package/dist/conversation-index/faiss-adapter.d.ts +1 -1
  85. package/dist/conversation-index/indexer.d.ts +1 -1
  86. package/dist/conversation-index/search.d.ts +1 -1
  87. package/dist/day-summary.d.ts +1 -1
  88. package/dist/delinearize.d.ts +1 -1
  89. package/dist/direct-answer-wiring.d.ts +1 -1
  90. package/dist/direct-answer.d.ts +1 -1
  91. package/dist/embedding-fallback.d.ts +1 -1
  92. package/dist/enrichment/index.d.ts +1 -1
  93. package/dist/entity-retrieval.d.ts +1 -1
  94. package/dist/entity-retrieval.js +3 -3
  95. package/dist/entity-schema.d.ts +1 -1
  96. package/dist/explicit-capture.d.ts +4 -4
  97. package/dist/extraction-judge-telemetry.d.ts +1 -1
  98. package/dist/extraction-judge-training.d.ts +1 -1
  99. package/dist/extraction-judge.d.ts +1 -1
  100. package/dist/extraction.d.ts +1 -1
  101. package/dist/fallback-llm.d.ts +1 -1
  102. package/dist/identity-continuity.d.ts +1 -1
  103. package/dist/importance.d.ts +1 -1
  104. package/dist/index.d.ts +307 -9
  105. package/dist/index.js +155 -29
  106. package/dist/index.js.map +1 -1
  107. package/dist/intent.d.ts +1 -1
  108. package/dist/lcm/engine.d.ts +1 -1
  109. package/dist/lcm/index.d.ts +1 -1
  110. package/dist/lcm/tools.d.ts +1 -1
  111. package/dist/lifecycle.d.ts +1 -1
  112. package/dist/live-connectors-runner.d.ts +1 -1
  113. package/dist/local-llm.d.ts +1 -1
  114. package/dist/maintenance/memory-governance.d.ts +1 -1
  115. package/dist/maintenance/memory-governance.js +3 -3
  116. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +3 -3
  117. package/dist/maintenance/rebuild-memory-projection.js +4 -4
  118. package/dist/mcp-memory-inspector-app.d.ts +5 -5
  119. package/dist/memory-action-policy.d.ts +1 -1
  120. package/dist/memory-cache.d.ts +1 -1
  121. package/dist/memory-lifecycle-ledger-utils.d.ts +1 -1
  122. package/dist/memory-projection-store.d.ts +1 -1
  123. package/dist/memory-provenance.d.ts +1 -1
  124. package/dist/memory-worth-outcomes.d.ts +1 -1
  125. package/dist/models-json.d.ts +1 -1
  126. package/dist/namespaces/migrate.d.ts +1 -1
  127. package/dist/namespaces/migrate.js +4 -4
  128. package/dist/namespaces/principal.d.ts +1 -1
  129. package/dist/namespaces/search.d.ts +1 -1
  130. package/dist/namespaces/storage.d.ts +1 -1
  131. package/dist/namespaces/storage.js +3 -3
  132. package/dist/native-knowledge.d.ts +1 -1
  133. package/dist/operator-toolkit.d.ts +1 -1
  134. package/dist/operator-toolkit.js +8 -7
  135. package/dist/{orchestrator-CqWOjfgl.d.ts → orchestrator-CEycaY3M.d.ts} +361 -4
  136. package/dist/orchestrator.d.ts +4 -4
  137. package/dist/orchestrator.js +13 -11
  138. package/dist/patterns-cli.d.ts +1 -1
  139. package/dist/policy-runtime.d.ts +1 -1
  140. package/dist/qmd-recall-cache.d.ts +1 -1
  141. package/dist/qmd.d.ts +1 -1
  142. package/dist/recall-disclosure-escalation.d.ts +1 -1
  143. package/dist/recall-explain-renderer.d.ts +1 -1
  144. package/dist/recall-explain-renderer.js +3 -3
  145. package/dist/recall-planner-llm.d.ts +1 -1
  146. package/dist/recall-state.d.ts +1 -1
  147. package/dist/recall-tag-filter.d.ts +1 -1
  148. package/dist/recall-xray-cli.d.ts +1 -1
  149. package/dist/recall-xray-cli.js +4 -4
  150. package/dist/recall-xray-renderer.d.ts +1 -1
  151. package/dist/recall-xray-renderer.js +3 -3
  152. package/dist/recall-xray.d.ts +1 -1
  153. package/dist/recall-xray.js +2 -2
  154. package/dist/resolve-auth-token.d.ts +1 -1
  155. package/dist/resume-bundles.js +3 -2
  156. package/dist/retrieval-agents.d.ts +1 -1
  157. package/dist/retrieval-tiers.d.ts +1 -1
  158. package/dist/routing/engine.d.ts +1 -1
  159. package/dist/routing/store.d.ts +1 -1
  160. package/dist/schemas.d.ts +10 -10
  161. package/dist/search/embed-helper.d.ts +1 -1
  162. package/dist/search/factory.d.ts +1 -1
  163. package/dist/search/index.d.ts +1 -1
  164. package/dist/search/lancedb-backend.d.ts +1 -1
  165. package/dist/search/meilisearch-backend.d.ts +1 -1
  166. package/dist/search/noop-backend.d.ts +1 -1
  167. package/dist/search/orama-backend.d.ts +1 -1
  168. package/dist/search/port.d.ts +1 -1
  169. package/dist/search/remote-backend.d.ts +1 -1
  170. package/dist/{semantic-SLAa_prH.d.ts → semantic-DJR8_DMQ.d.ts} +1 -1
  171. package/dist/{semantic-consolidation-4HkHWgeI.d.ts → semantic-consolidation-FbhPeJjB.d.ts} +1 -1
  172. package/dist/semantic-consolidation.d.ts +2 -2
  173. package/dist/semantic-consolidation.js +4 -4
  174. package/dist/semantic-rule-promotion.js +3 -3
  175. package/dist/semantic-rule-verifier.d.ts +1 -1
  176. package/dist/semantic-rule-verifier.js +3 -3
  177. package/dist/session-observer-bands.d.ts +1 -1
  178. package/dist/session-observer-state.d.ts +1 -1
  179. package/dist/shared-context/manager.d.ts +5 -5
  180. package/dist/signal.d.ts +1 -1
  181. package/dist/storage.d.ts +19 -1
  182. package/dist/storage.js +2 -2
  183. package/dist/summarizer.d.ts +1 -1
  184. package/dist/summary-snapshot.d.ts +1 -1
  185. package/dist/temporal-supersession.d.ts +1 -1
  186. package/dist/temporal-validity.d.ts +1 -1
  187. package/dist/threading.d.ts +1 -1
  188. package/dist/tier-migration.d.ts +1 -1
  189. package/dist/tier-routing.d.ts +1 -1
  190. package/dist/topics.d.ts +1 -1
  191. package/dist/transcript.d.ts +1 -1
  192. package/dist/types-D5VRAI04.d.ts +3134 -0
  193. package/dist/types.d.ts +3 -2862
  194. package/dist/types.js +1 -1
  195. package/dist/utility-runtime.d.ts +1 -1
  196. package/dist/verified-recall.js +3 -3
  197. package/package.json +1 -1
  198. package/src/access-http.ts +167 -0
  199. package/src/access-mcp.ts +198 -0
  200. package/src/access-service.ts +65 -0
  201. package/src/cli.ts +187 -0
  202. package/src/config.ts +7 -0
  203. package/src/index.ts +7 -0
  204. package/src/orchestrator.ts +42 -0
  205. package/src/storage.ts +106 -0
  206. package/src/types.ts +5 -0
  207. package/src/wearables/cleanup.test.ts +134 -0
  208. package/src/wearables/cleanup.ts +188 -0
  209. package/src/wearables/cli.test.ts +170 -0
  210. package/src/wearables/cli.ts +441 -0
  211. package/src/wearables/config.test.ts +143 -0
  212. package/src/wearables/config.ts +332 -0
  213. package/src/wearables/corrections.test.ts +118 -0
  214. package/src/wearables/corrections.ts +211 -0
  215. package/src/wearables/day-store.test.ts +143 -0
  216. package/src/wearables/day-store.ts +238 -0
  217. package/src/wearables/errors.test.ts +32 -0
  218. package/src/wearables/errors.ts +29 -0
  219. package/src/wearables/index.ts +114 -0
  220. package/src/wearables/memory-gen.test.ts +342 -0
  221. package/src/wearables/memory-gen.ts +413 -0
  222. package/src/wearables/pipeline.test.ts +608 -0
  223. package/src/wearables/pipeline.ts +519 -0
  224. package/src/wearables/redaction.test.ts +94 -0
  225. package/src/wearables/redaction.ts +156 -0
  226. package/src/wearables/registry.test.ts +62 -0
  227. package/src/wearables/registry.ts +133 -0
  228. package/src/wearables/service.test.ts +425 -0
  229. package/src/wearables/service.ts +691 -0
  230. package/src/wearables/speakers.test.ts +110 -0
  231. package/src/wearables/speakers.ts +174 -0
  232. package/src/wearables/storage-io.test.ts +105 -0
  233. package/src/wearables/sync-state.test.ts +134 -0
  234. package/src/wearables/sync-state.ts +186 -0
  235. package/src/wearables/types.ts +285 -0
  236. package/dist/chunk-4R4KTDIE.js.map +0 -1
  237. package/dist/chunk-5GOMXHLC.js.map +0 -1
  238. package/dist/chunk-7TPH6UZL.js.map +0 -1
  239. package/dist/chunk-FG76RDVI.js.map +0 -1
  240. package/dist/chunk-I6UCUHLK.js.map +0 -1
  241. package/dist/chunk-KQFQ3IS5.js.map +0 -1
  242. package/dist/chunk-PJGB7XRR.js.map +0 -1
  243. package/dist/chunk-RKW6QR7W.js.map +0 -1
  244. /package/dist/{chunk-GYTVOLNX.js.map → chunk-3MNBW7R7.js.map} +0 -0
  245. /package/dist/{chunk-QFQQFX2H.js.map → chunk-3R2UZV3U.js.map} +0 -0
  246. /package/dist/{chunk-O4UNM6OR.js.map → chunk-532VCWYW.js.map} +0 -0
  247. /package/dist/{chunk-2UFQYU5F.js.map → chunk-57QXN2CS.js.map} +0 -0
  248. /package/dist/{chunk-UGEBPVNI.js.map → chunk-GE7Q7KXP.js.map} +0 -0
  249. /package/dist/{chunk-GLWW3EJQ.js.map → chunk-KB4MFBF5.js.map} +0 -0
  250. /package/dist/{chunk-FH3PPO42.js.map → chunk-KVFYTRMV.js.map} +0 -0
  251. /package/dist/{chunk-BNW5NJJH.js.map → chunk-LQYTQCXM.js.map} +0 -0
  252. /package/dist/{chunk-AYHXQR53.js.map → chunk-MVQN73GT.js.map} +0 -0
  253. /package/dist/{chunk-ZZPIJPPD.js.map → chunk-N5RGXWLQ.js.map} +0 -0
  254. /package/dist/{chunk-R3OQGYOU.js.map → chunk-P2D2MM47.js.map} +0 -0
  255. /package/dist/{chunk-PSUB67YB.js.map → chunk-PW6GURU3.js.map} +0 -0
  256. /package/dist/{chunk-W3BKVM64.js.map → chunk-QDV6VAD4.js.map} +0 -0
  257. /package/dist/{chunk-3QSU4NFF.js.map → chunk-QHXW3LZV.js.map} +0 -0
  258. /package/dist/{chunk-OZXVGYGZ.js.map → chunk-STDAAGH7.js.map} +0 -0
  259. /package/dist/{chunk-FMGWXIES.js.map → chunk-TZDSNIRO.js.map} +0 -0
  260. /package/dist/{chunk-2L54V4ZO.js.map → chunk-UELS6WWF.js.map} +0 -0
  261. /package/dist/{chunk-BPSGLMQ4.js.map → chunk-YQNADJCT.js.map} +0 -0
@@ -53,12 +53,12 @@ import {
53
53
  } from "./chunk-D6RIFG4O.js";
54
54
  import {
55
55
  rebuildMemoryLifecycleLedger
56
- } from "./chunk-O4UNM6OR.js";
56
+ } from "./chunk-532VCWYW.js";
57
57
  import {
58
58
  rebuildMemoryProjection,
59
59
  repairMemoryProjection,
60
60
  verifyMemoryProjection
61
- } from "./chunk-GLWW3EJQ.js";
61
+ } from "./chunk-KB4MFBF5.js";
62
62
  import {
63
63
  getBulkImportSource,
64
64
  listBulkImportSources,
@@ -70,15 +70,15 @@ import {
70
70
  } from "./chunk-YR6GIWWY.js";
71
71
  import {
72
72
  promoteSemanticRuleFromMemory
73
- } from "./chunk-ZZPIJPPD.js";
73
+ } from "./chunk-N5RGXWLQ.js";
74
74
  import {
75
75
  buildResumeBundleFromState,
76
76
  getResumeBundleStatus,
77
77
  recordResumeBundle
78
- } from "./chunk-FH3PPO42.js";
78
+ } from "./chunk-KVFYTRMV.js";
79
79
  import {
80
80
  parseXrayCliOptions
81
- } from "./chunk-3QSU4NFF.js";
81
+ } from "./chunk-QHXW3LZV.js";
82
82
  import {
83
83
  resolveAgentAccessAuthToken
84
84
  } from "./chunk-TGQ2NTWH.js";
@@ -89,12 +89,12 @@ import {
89
89
  runOperatorInventory,
90
90
  runOperatorRepair,
91
91
  runOperatorSetup
92
- } from "./chunk-FMGWXIES.js";
92
+ } from "./chunk-TZDSNIRO.js";
93
93
  import {
94
94
  listNamespaces,
95
95
  runNamespaceMigration,
96
96
  verifyNamespaces
97
- } from "./chunk-AYHXQR53.js";
97
+ } from "./chunk-MVQN73GT.js";
98
98
  import {
99
99
  collectPatternMemories,
100
100
  explainPatternMemory,
@@ -124,13 +124,13 @@ import {
124
124
  } from "./chunk-TERNBNJB.js";
125
125
  import {
126
126
  searchVerifiedEpisodes
127
- } from "./chunk-R3OQGYOU.js";
127
+ } from "./chunk-P2D2MM47.js";
128
128
  import {
129
129
  ThreadingManager
130
130
  } from "./chunk-W4RVMTHR.js";
131
131
  import {
132
132
  searchVerifiedSemanticRules
133
- } from "./chunk-2UFQYU5F.js";
133
+ } from "./chunk-57QXN2CS.js";
134
134
  import {
135
135
  getWorkProductLedgerStatus,
136
136
  recordWorkProductLedgerEntry,
@@ -203,19 +203,22 @@ import {
203
203
  } from "./chunk-UQ7RN5HK.js";
204
204
  import {
205
205
  parseConfig
206
- } from "./chunk-5GOMXHLC.js";
206
+ } from "./chunk-KKTXCFD7.js";
207
207
  import {
208
208
  getAbstractionNodeStoreStatus
209
209
  } from "./chunk-OADWQ5CR.js";
210
210
  import {
211
211
  EngramAccessHttpServer
212
- } from "./chunk-FG76RDVI.js";
212
+ } from "./chunk-Y3TMFC6I.js";
213
+ import {
214
+ WearablesInputError
215
+ } from "./chunk-7WV3F5DQ.js";
213
216
  import {
214
217
  EngramMcpServer
215
- } from "./chunk-I6UCUHLK.js";
218
+ } from "./chunk-SHV5Y2WU.js";
216
219
  import {
217
220
  EngramAccessService
218
- } from "./chunk-KQFQ3IS5.js";
221
+ } from "./chunk-F3FY3D3S.js";
219
222
  import {
220
223
  WorkStorage
221
224
  } from "./chunk-GDB4J2H3.js";
@@ -223,13 +226,13 @@ import {
223
226
  parseRecallExplainFormat,
224
227
  renderRecallExplain,
225
228
  renderXray
226
- } from "./chunk-PSUB67YB.js";
229
+ } from "./chunk-PW6GURU3.js";
227
230
  import {
228
231
  listMemoryGovernanceRuns,
229
232
  readMemoryGovernanceRunArtifact,
230
233
  restoreMemoryGovernanceRun,
231
234
  runMemoryGovernance
232
- } from "./chunk-GYTVOLNX.js";
235
+ } from "./chunk-3MNBW7R7.js";
233
236
  import {
234
237
  getTrustZoneStoreStatus,
235
238
  promoteTrustZoneRecord,
@@ -244,7 +247,7 @@ import {
244
247
  import {
245
248
  RECALL_DISCLOSURE_LEVELS,
246
249
  isRecallDisclosure
247
- } from "./chunk-4R4KTDIE.js";
250
+ } from "./chunk-FPNQF475.js";
248
251
  import {
249
252
  getCausalTrajectoryStoreStatus
250
253
  } from "./chunk-TQOU3VAT.js";
@@ -269,6 +272,421 @@ import path2 from "path";
269
272
  import { access, readFile, readdir as readdir2, unlink } from "fs/promises";
270
273
  import { createHash } from "crypto";
271
274
 
275
+ // src/wearables/cli.ts
276
+ var USAGE = `Usage: wearables <command> [options]
277
+
278
+ Commands:
279
+ status Show configured sources, connectors, last sync
280
+ check <source> Verify credentials/connectivity for a source
281
+ sync [options] Pull + clean + store transcripts (and memories)
282
+ --source <id> Only this source (default: all enabled)
283
+ --date <YYYY-MM-DD> Exactly this day
284
+ --days <n> Lookback window ending today (default 2)
285
+ --force-memories Re-extract memories for unchanged days
286
+ transcript --date <YYYY-MM-DD> [--source <id>]
287
+ Print the stored day transcript(s)
288
+ search <query> [options] Search stored transcripts
289
+ --source <id> --from <date> --to <date> --limit <n>
290
+ memories [options] List memories created from transcripts
291
+ --source <id> --date <date> --limit <n>
292
+ speakers list Show the speaker registry
293
+ speakers self <name> Set the wearer's display name
294
+ speakers set <source> <key> <name> [--self]
295
+ Map a provider speaker label to a name
296
+ speakers remove <source> <key> Remove a speaker mapping
297
+ corrections list Show correction rules (config + state)
298
+ corrections add <match> <replace> [--regex] [--case-sensitive] [--source <id>]
299
+ Add a transcript correction rule
300
+ corrections remove <index> Remove a state correction rule by index
301
+
302
+ Add --json to status/sync/search/memories for machine-readable output.
303
+ `;
304
+ var VALUE_FLAGS = /* @__PURE__ */ new Set([
305
+ "--source",
306
+ "--date",
307
+ "--days",
308
+ "--from",
309
+ "--to",
310
+ "--limit"
311
+ ]);
312
+ var BOOLEAN_FLAGS = /* @__PURE__ */ new Set([
313
+ "--json",
314
+ "--force-memories",
315
+ "--regex",
316
+ "--case-sensitive",
317
+ "--self"
318
+ ]);
319
+ function parseFlags(args) {
320
+ const flags = /* @__PURE__ */ new Map();
321
+ const positional = [];
322
+ for (let index = 0; index < args.length; index++) {
323
+ const arg = args[index];
324
+ if (!arg.startsWith("--")) {
325
+ positional.push(arg);
326
+ continue;
327
+ }
328
+ if (BOOLEAN_FLAGS.has(arg)) {
329
+ flags.set(arg, true);
330
+ continue;
331
+ }
332
+ if (VALUE_FLAGS.has(arg)) {
333
+ const value = args[index + 1];
334
+ if (value === void 0 || value.startsWith("--")) {
335
+ throw new WearablesInputError(`${arg} requires a value`);
336
+ }
337
+ flags.set(arg, value);
338
+ index++;
339
+ continue;
340
+ }
341
+ throw new WearablesInputError(
342
+ `unknown flag '${arg}' \u2014 valid flags: ${[...VALUE_FLAGS, ...BOOLEAN_FLAGS].join(", ")}`
343
+ );
344
+ }
345
+ return { flags, positional };
346
+ }
347
+ function flagString(parsed, name) {
348
+ const value = parsed.flags.get(name);
349
+ return typeof value === "string" ? value : void 0;
350
+ }
351
+ function flagInt(parsed, name) {
352
+ const value = flagString(parsed, name);
353
+ if (value === void 0) return void 0;
354
+ const parsedValue = Number(value);
355
+ if (!Number.isFinite(parsedValue) || !Number.isInteger(parsedValue) || parsedValue < 1) {
356
+ throw new WearablesInputError(`${name} expects a positive integer (got '${value}')`);
357
+ }
358
+ return parsedValue;
359
+ }
360
+ function renderSyncSummary(summary) {
361
+ const lines = [
362
+ `${summary.source}: ${summary.conversations} conversation${summary.conversations === 1 ? "" : "s"} across ${summary.days.length} day${summary.days.length === 1 ? "" : "s"} (${summary.days.join(", ")})`,
363
+ ` segments kept/dropped: ${summary.segmentsKept}/${summary.segmentsDropped}`,
364
+ ` redactions applied: ${summary.redactions}`,
365
+ ` corrections applied: ${summary.correctionsApplied}`,
366
+ ` transcripts written: ${summary.transcriptsWritten.length > 0 ? summary.transcriptsWritten.join(", ") : "(none \u2014 unchanged)"}`,
367
+ ` memories created: ${summary.memoriesCreated} (skipped ${summary.memoriesSkipped})`
368
+ ];
369
+ if (summary.nativeMemoriesImported > 0) {
370
+ lines.push(` native memories queued: ${summary.nativeMemoriesImported}`);
371
+ }
372
+ for (const warning of summary.warnings) {
373
+ lines.push(` warning: ${warning}`);
374
+ }
375
+ return lines.join("\n");
376
+ }
377
+ async function runWearablesCliCommand(service, args, io) {
378
+ const [command, ...rest] = args;
379
+ try {
380
+ switch (command) {
381
+ case void 0:
382
+ case "help":
383
+ case "--help": {
384
+ io.stdout.write(USAGE);
385
+ return command === void 0 ? 1 : 0;
386
+ }
387
+ case "status": {
388
+ const parsed = parseFlags(rest);
389
+ const status = await service.status();
390
+ if (parsed.flags.has("--json")) {
391
+ io.stdout.write(`${JSON.stringify(status, null, 2)}
392
+ `);
393
+ return 0;
394
+ }
395
+ io.stdout.write(
396
+ `Wearables: ${status.enabled ? "enabled" : "disabled"} (timezone ${status.timezone})
397
+ `
398
+ );
399
+ if (status.sources.length === 0) {
400
+ io.stdout.write(
401
+ "No sources configured. Add wearables.sources.<id> to the plugin config.\n"
402
+ );
403
+ return 0;
404
+ }
405
+ for (const source of status.sources) {
406
+ io.stdout.write(
407
+ ` ${source.source} (${source.displayName}): ${source.enabled ? "enabled" : "disabled"}, connector ${source.connectorInstalled ? "installed" : `MISSING \u2014 npm install @remnic/connector-${source.source}`}, memoryMode ${source.memoryMode}, ${source.transcriptDays} transcript day${source.transcriptDays === 1 ? "" : "s"}, last sync ${source.lastSyncAt ?? "never"}
408
+ `
409
+ );
410
+ }
411
+ return 0;
412
+ }
413
+ case "check": {
414
+ const [sourceId] = rest;
415
+ if (!sourceId) {
416
+ throw new WearablesInputError("check requires a source id (e.g. wearables check limitless)");
417
+ }
418
+ const result = await service.checkAuth(sourceId);
419
+ io.stdout.write(
420
+ result.ok ? `${sourceId}: OK${result.detail ? ` \u2014 ${result.detail}` : ""}
421
+ ` : `${sourceId}: FAILED${result.detail ? ` \u2014 ${result.detail}` : ""}
422
+ `
423
+ );
424
+ return result.ok ? 0 : 1;
425
+ }
426
+ case "sync": {
427
+ const parsed = parseFlags(rest);
428
+ if (parsed.positional.length > 0) {
429
+ throw new WearablesInputError(
430
+ `unexpected argument '${parsed.positional[0]}' \u2014 sync takes flags only`
431
+ );
432
+ }
433
+ const summaries = await service.sync({
434
+ source: flagString(parsed, "--source"),
435
+ date: flagString(parsed, "--date"),
436
+ days: flagInt(parsed, "--days"),
437
+ forceMemories: parsed.flags.has("--force-memories")
438
+ });
439
+ if (parsed.flags.has("--json")) {
440
+ io.stdout.write(`${JSON.stringify({ summaries }, null, 2)}
441
+ `);
442
+ return 0;
443
+ }
444
+ for (const summary of summaries) {
445
+ io.stdout.write(`${renderSyncSummary(summary)}
446
+ `);
447
+ }
448
+ io.stdout.write("OK\n");
449
+ return 0;
450
+ }
451
+ case "transcript": {
452
+ const parsed = parseFlags(rest);
453
+ const date = flagString(parsed, "--date");
454
+ if (!date) {
455
+ throw new WearablesInputError("transcript requires --date <YYYY-MM-DD>");
456
+ }
457
+ const views = await service.dayTranscript(date, flagString(parsed, "--source"));
458
+ if (views.length === 0) {
459
+ io.stderr.write(`No stored transcripts for ${date}.
460
+ `);
461
+ return 1;
462
+ }
463
+ for (const view of views) {
464
+ if (views.length > 1) {
465
+ io.stdout.write(`
466
+ ===== ${view.source} \u2014 ${view.date} =====
467
+
468
+ `);
469
+ }
470
+ if (view.overlapsWith.length > 0) {
471
+ io.stdout.write(
472
+ `(also recorded by: ${view.overlapsWith.join(", ")})
473
+
474
+ `
475
+ );
476
+ }
477
+ io.stdout.write(`${view.body}
478
+ `);
479
+ }
480
+ return 0;
481
+ }
482
+ case "search": {
483
+ const parsed = parseFlags(rest);
484
+ const query = parsed.positional.join(" ").trim();
485
+ if (query.length === 0) {
486
+ throw new WearablesInputError("search requires a query");
487
+ }
488
+ const results = await service.searchTranscripts(query, {
489
+ source: flagString(parsed, "--source"),
490
+ from: flagString(parsed, "--from"),
491
+ to: flagString(parsed, "--to"),
492
+ limit: flagInt(parsed, "--limit")
493
+ });
494
+ if (parsed.flags.has("--json")) {
495
+ io.stdout.write(`${JSON.stringify({ results }, null, 2)}
496
+ `);
497
+ return 0;
498
+ }
499
+ if (results.length === 0) {
500
+ io.stdout.write("No matches.\n");
501
+ return 0;
502
+ }
503
+ for (const result of results) {
504
+ io.stdout.write(
505
+ `${result.source} ${result.date} ${result.snippet}
506
+ `
507
+ );
508
+ }
509
+ if (results.some((result) => result.backend === "scan")) {
510
+ io.stdout.write(
511
+ "(search index unavailable \u2014 results from bounded text scan)\n"
512
+ );
513
+ }
514
+ return 0;
515
+ }
516
+ case "memories": {
517
+ const parsed = parseFlags(rest);
518
+ const memories = await service.transcriptMemories({
519
+ source: flagString(parsed, "--source"),
520
+ date: flagString(parsed, "--date"),
521
+ limit: flagInt(parsed, "--limit")
522
+ });
523
+ if (parsed.flags.has("--json")) {
524
+ io.stdout.write(`${JSON.stringify({ memories }, null, 2)}
525
+ `);
526
+ return 0;
527
+ }
528
+ if (memories.length === 0) {
529
+ io.stdout.write("No wearable-derived memories found.\n");
530
+ return 0;
531
+ }
532
+ for (const memory of memories) {
533
+ const status = memory.status === "pending_review" ? " [pending review]" : "";
534
+ io.stdout.write(
535
+ `${memory.id} (${memory.source}${memory.date ? ` ${memory.date}` : ""})${status}
536
+ ${memory.content.split("\n")[0]}
537
+ `
538
+ );
539
+ }
540
+ return 0;
541
+ }
542
+ case "speakers": {
543
+ const [action, ...speakerArgs] = rest;
544
+ if (action === "list" || action === void 0) {
545
+ const registry = await service.listSpeakers();
546
+ io.stdout.write(`Self: ${registry.selfName}
547
+ `);
548
+ const entries = Object.entries(registry.speakers);
549
+ if (entries.length === 0) {
550
+ io.stdout.write("No speaker overrides stored.\n");
551
+ return 0;
552
+ }
553
+ for (const [key, override] of entries) {
554
+ io.stdout.write(
555
+ ` ${key} -> ${override.name}${override.isSelf ? " (you)" : ""}
556
+ `
557
+ );
558
+ }
559
+ return 0;
560
+ }
561
+ if (action === "self") {
562
+ const name = speakerArgs.join(" ").trim();
563
+ if (name.length === 0) {
564
+ throw new WearablesInputError("speakers self requires a name");
565
+ }
566
+ await service.setSelfName(name);
567
+ io.stdout.write(`Self name set to '${name}'.
568
+ `);
569
+ return 0;
570
+ }
571
+ if (action === "set") {
572
+ const parsed = parseFlags(speakerArgs);
573
+ const [sourceId, speakerKey, ...nameParts] = parsed.positional;
574
+ const name = nameParts.join(" ").trim();
575
+ if (!sourceId || !speakerKey || name.length === 0) {
576
+ throw new WearablesInputError(
577
+ "speakers set requires: <source> <speakerKey> <name>"
578
+ );
579
+ }
580
+ await service.setSpeaker(sourceId, speakerKey, name, {
581
+ isSelf: parsed.flags.has("--self")
582
+ });
583
+ io.stdout.write(`Mapped ${sourceId}:${speakerKey} -> ${name}.
584
+ `);
585
+ io.stdout.write(
586
+ "(re-run `wearables sync --force-memories` to rebuild stored transcripts with the new label)\n"
587
+ );
588
+ return 0;
589
+ }
590
+ if (action === "remove") {
591
+ const [sourceId, speakerKey] = speakerArgs;
592
+ if (!sourceId || !speakerKey) {
593
+ throw new WearablesInputError("speakers remove requires: <source> <speakerKey>");
594
+ }
595
+ await service.removeSpeaker(sourceId, speakerKey);
596
+ io.stdout.write(`Removed mapping for ${sourceId}:${speakerKey}.
597
+ `);
598
+ return 0;
599
+ }
600
+ throw new WearablesInputError(
601
+ `unknown speakers action '${action}' \u2014 expected list, self, set, or remove`
602
+ );
603
+ }
604
+ case "corrections": {
605
+ const [action, ...correctionArgs] = rest;
606
+ if (action === "list" || action === void 0) {
607
+ const { fromConfig, fromState, stateFilePath } = await service.listCorrections();
608
+ if (fromConfig.length === 0 && fromState.length === 0) {
609
+ io.stdout.write("No correction rules configured.\n");
610
+ return 0;
611
+ }
612
+ if (fromConfig.length > 0) {
613
+ io.stdout.write("From config (wearables.corrections):\n");
614
+ fromConfig.forEach((rule, index) => {
615
+ io.stdout.write(` [config ${index}] ${formatRule(rule)}
616
+ `);
617
+ });
618
+ }
619
+ if (fromState.length > 0) {
620
+ io.stdout.write(`From state (${stateFilePath}):
621
+ `);
622
+ fromState.forEach((rule, index) => {
623
+ io.stdout.write(` [${index}] ${formatRule(rule)}
624
+ `);
625
+ });
626
+ }
627
+ return 0;
628
+ }
629
+ if (action === "add") {
630
+ const parsed = parseFlags(correctionArgs);
631
+ const [match, replace] = parsed.positional;
632
+ if (match === void 0 || replace === void 0) {
633
+ throw new WearablesInputError(
634
+ "corrections add requires: <match> <replace> (quote multi-word values)"
635
+ );
636
+ }
637
+ const sourceFlag = flagString(parsed, "--source");
638
+ await service.addCorrection({
639
+ match,
640
+ replace,
641
+ ...parsed.flags.has("--regex") ? { regex: true } : {},
642
+ ...parsed.flags.has("--case-sensitive") ? { caseInsensitive: false } : {},
643
+ ...sourceFlag !== void 0 ? { sources: [sourceFlag] } : {}
644
+ });
645
+ io.stdout.write(`Added correction: ${JSON.stringify(match)} -> ${JSON.stringify(replace)}.
646
+ `);
647
+ return 0;
648
+ }
649
+ if (action === "remove") {
650
+ const [indexRaw] = correctionArgs;
651
+ const index = Number(indexRaw);
652
+ if (indexRaw === void 0 || !Number.isInteger(index) || index < 0) {
653
+ throw new WearablesInputError("corrections remove requires a non-negative index");
654
+ }
655
+ const removed = await service.removeCorrection(index);
656
+ io.stdout.write(`Removed correction ${formatRule(removed)}.
657
+ `);
658
+ return 0;
659
+ }
660
+ throw new WearablesInputError(
661
+ `unknown corrections action '${action}' \u2014 expected list, add, or remove`
662
+ );
663
+ }
664
+ default:
665
+ throw new WearablesInputError(
666
+ `unknown wearables command '${command}'
667
+
668
+ ${USAGE}`
669
+ );
670
+ }
671
+ } catch (err) {
672
+ if (err instanceof WearablesInputError) {
673
+ io.stderr.write(`wearables: ${err.message}
674
+ `);
675
+ return 1;
676
+ }
677
+ throw err;
678
+ }
679
+ }
680
+ function formatRule(rule) {
681
+ const parts = [`${JSON.stringify(rule.match)} -> ${JSON.stringify(rule.replace)}`];
682
+ if (rule.regex === true) parts.push("(regex)");
683
+ if (rule.caseInsensitive === false) parts.push("(case-sensitive)");
684
+ if (rule.sources && rule.sources.length > 0) {
685
+ parts.push(`(sources: ${rule.sources.join(", ")})`);
686
+ }
687
+ return parts.join(" ");
688
+ }
689
+
272
690
  // src/training-export/converter.ts
273
691
  import { constants } from "fs";
274
692
  import { lstat, open, readdir, realpath } from "fs/promises";
@@ -3465,6 +3883,110 @@ function registerCli(api, orchestrator, registerOptions = {}) {
3465
3883
  process.exitCode = 1;
3466
3884
  }
3467
3885
  });
3886
+ {
3887
+ const wearablesCmd = cmd.command("wearables").description(
3888
+ "Wearable transcript sources (Limitless / Bee / Omi): sync, transcripts, search, speakers, corrections"
3889
+ );
3890
+ const forwardWearables = async (argv) => {
3891
+ const code = await runWearablesCliCommand(
3892
+ orchestrator.getWearablesService(),
3893
+ argv,
3894
+ { stdout: process.stdout, stderr: process.stderr }
3895
+ );
3896
+ if (code !== 0) process.exitCode = code;
3897
+ };
3898
+ const stringOpt = (options, key, flag) => typeof options[key] === "string" && options[key].length > 0 ? [flag, options[key]] : [];
3899
+ wearablesCmd.command("status").description("Show configured sources, connector availability, and last sync").option("--json", "JSON output").action(async (...args) => {
3900
+ const options = args[0] ?? {};
3901
+ await forwardWearables(["status", ...options.json === true ? ["--json"] : []]);
3902
+ });
3903
+ wearablesCmd.command("check <source>").description("Verify credentials/connectivity for a source").action(async (...args) => {
3904
+ await forwardWearables(["check", String(args[0] ?? "")]);
3905
+ });
3906
+ wearablesCmd.command("sync").description("Pull, clean, and store wearable transcripts (and trust-gated memories)").option("--source <id>", "Only this source (default: all enabled)").option("--date <date>", "Sync exactly this day (YYYY-MM-DD)").option("--days <n>", "Lookback window in days ending today (default 2)").option("--force-memories", "Re-run memory extraction for unchanged days").option("--json", "JSON output").action(async (...args) => {
3907
+ const options = args[0] ?? {};
3908
+ await forwardWearables([
3909
+ "sync",
3910
+ ...stringOpt(options, "source", "--source"),
3911
+ ...stringOpt(options, "date", "--date"),
3912
+ ...stringOpt(options, "days", "--days"),
3913
+ ...options.forceMemories === true ? ["--force-memories"] : [],
3914
+ ...options.json === true ? ["--json"] : []
3915
+ ]);
3916
+ });
3917
+ wearablesCmd.command("transcript").description("Print the stored transcript(s) for a day").requiredOption("--date <date>", "Day to read (YYYY-MM-DD)").option("--source <id>", "Scope to one source").action(async (...args) => {
3918
+ const options = args[0] ?? {};
3919
+ await forwardWearables([
3920
+ "transcript",
3921
+ ...stringOpt(options, "date", "--date"),
3922
+ ...stringOpt(options, "source", "--source")
3923
+ ]);
3924
+ });
3925
+ wearablesCmd.command("search <query>").description("Search stored wearable transcripts").option("--source <id>", "Source id filter").option("--from <date>", "Inclusive start date (YYYY-MM-DD)").option("--to <date>", "Inclusive end date (YYYY-MM-DD)").option("--limit <n>", "Maximum results (default 10)").option("--json", "JSON output").action(async (...args) => {
3926
+ const query = typeof args[0] === "string" ? args[0] : "";
3927
+ const options = args[1] ?? {};
3928
+ await forwardWearables([
3929
+ "search",
3930
+ query,
3931
+ ...stringOpt(options, "source", "--source"),
3932
+ ...stringOpt(options, "from", "--from"),
3933
+ ...stringOpt(options, "to", "--to"),
3934
+ ...stringOpt(options, "limit", "--limit"),
3935
+ ...options.json === true ? ["--json"] : []
3936
+ ]);
3937
+ });
3938
+ wearablesCmd.command("memories").description("List memories created from wearable transcripts").option("--source <id>", "Source id filter").option("--date <date>", "Transcript day filter (YYYY-MM-DD)").option("--limit <n>", "Maximum results (default 50)").option("--json", "JSON output").action(async (...args) => {
3939
+ const options = args[0] ?? {};
3940
+ await forwardWearables([
3941
+ "memories",
3942
+ ...stringOpt(options, "source", "--source"),
3943
+ ...stringOpt(options, "date", "--date"),
3944
+ ...stringOpt(options, "limit", "--limit"),
3945
+ ...options.json === true ? ["--json"] : []
3946
+ ]);
3947
+ });
3948
+ const speakersCmd = wearablesCmd.command("speakers").description("Manage the speaker registry");
3949
+ speakersCmd.command("list").description("Show stored speaker mappings").action(async () => forwardWearables(["speakers", "list"]));
3950
+ speakersCmd.command("self <name>").description("Set the wearer's display name").action(
3951
+ async (...args) => forwardWearables(["speakers", "self", String(args[0] ?? "")])
3952
+ );
3953
+ speakersCmd.command("set <source> <speakerKey> <name>").description("Map a provider speaker label to a display name").option("--self", "Mark this speaker as the wearer").action(async (...args) => {
3954
+ const options = args[3] ?? {};
3955
+ await forwardWearables([
3956
+ "speakers",
3957
+ "set",
3958
+ String(args[0] ?? ""),
3959
+ String(args[1] ?? ""),
3960
+ String(args[2] ?? ""),
3961
+ ...options.self === true ? ["--self"] : []
3962
+ ]);
3963
+ });
3964
+ speakersCmd.command("remove <source> <speakerKey>").description("Remove a speaker mapping").action(
3965
+ async (...args) => forwardWearables([
3966
+ "speakers",
3967
+ "remove",
3968
+ String(args[0] ?? ""),
3969
+ String(args[1] ?? "")
3970
+ ])
3971
+ );
3972
+ const correctionsCmd = wearablesCmd.command("corrections").description("Manage user-specific transcript correction rules");
3973
+ correctionsCmd.command("list").description("Show correction rules from config and state").action(async () => forwardWearables(["corrections", "list"]));
3974
+ correctionsCmd.command("add <match> <replace>").description("Add a correction rule (quote multi-word values)").option("--regex", "Treat <match> as a regular expression").option("--case-sensitive", "Match case-sensitively").option("--source <id>", "Restrict the rule to one source").action(async (...args) => {
3975
+ const options = args[2] ?? {};
3976
+ await forwardWearables([
3977
+ "corrections",
3978
+ "add",
3979
+ String(args[0] ?? ""),
3980
+ String(args[1] ?? ""),
3981
+ ...options.regex === true ? ["--regex"] : [],
3982
+ ...options.caseSensitive === true ? ["--case-sensitive"] : [],
3983
+ ...stringOpt(options, "source", "--source")
3984
+ ]);
3985
+ });
3986
+ correctionsCmd.command("remove <index>").description("Remove a state correction rule by index").action(
3987
+ async (...args) => forwardWearables(["corrections", "remove", String(args[0] ?? "")])
3988
+ );
3989
+ }
3468
3990
  cmd.command("benchmark-status").description("Show benchmark/evaluation harness status, benchmark packs, and latest run summary").action(async () => {
3469
3991
  const status = await runBenchmarkStatusCliCommand({
3470
3992
  memoryDir: orchestrator.config.memoryDir,
@@ -6527,6 +7049,7 @@ function parseDuration(duration) {
6527
7049
  }
6528
7050
 
6529
7051
  export {
7052
+ runWearablesCliCommand,
6530
7053
  convertMemoriesToRecords,
6531
7054
  registerTrainingExportAdapter,
6532
7055
  getTrainingExportAdapter,
@@ -6623,4 +7146,4 @@ export {
6623
7146
  resolveMemoryDirForNamespace,
6624
7147
  registerCli
6625
7148
  };
6626
- //# sourceMappingURL=chunk-7TPH6UZL.js.map
7149
+ //# sourceMappingURL=chunk-2RHI3FGV.js.map