@remnic/core 9.65.3 → 9.65.5

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 (436) hide show
  1. package/dist/access-admin-ops-surface.d.ts +11 -11
  2. package/dist/access-admin-ops-surface.js +20 -18
  3. package/dist/access-authorization-probe.d.ts +11 -11
  4. package/dist/access-authorization-probe.js +21 -19
  5. package/dist/access-boundary.d.ts +11 -11
  6. package/dist/access-boundary.js +20 -18
  7. package/dist/access-cli.js +55 -53
  8. package/dist/access-cli.js.map +1 -1
  9. package/dist/access-coding-context-resolution.d.ts +1 -1
  10. package/dist/access-extraction-force-flush.d.ts +11 -11
  11. package/dist/access-extraction-force-flush.js +20 -18
  12. package/dist/access-health-types.d.ts +1 -1
  13. package/dist/access-http-lcm-compaction.d.ts +11 -11
  14. package/dist/access-http-lifecycle-flush.d.ts +11 -11
  15. package/dist/access-http-offline-stream.d.ts +11 -11
  16. package/dist/access-http-query.d.ts +2 -2
  17. package/dist/access-http-query.js +22 -20
  18. package/dist/access-http.d.ts +12 -12
  19. package/dist/access-http.js +31 -29
  20. package/dist/access-identity-continuity-surface.d.ts +9 -9
  21. package/dist/access-identity-continuity-surface.js +20 -18
  22. package/dist/access-lcm-surface.d.ts +11 -11
  23. package/dist/access-lcm-surface.js +20 -18
  24. package/dist/access-mcp.d.ts +11 -11
  25. package/dist/access-mcp.js +25 -23
  26. package/dist/access-memory-search-fanout.d.ts +2 -2
  27. package/dist/{access-namespace-preflight-B7Usyz-K.d.ts → access-namespace-preflight-D_6mo8ms.d.ts} +1 -1
  28. package/dist/access-namespace-preflight.d.ts +3 -3
  29. package/dist/access-namespace-preflight.js +20 -18
  30. package/dist/access-observe-write-surface.d.ts +11 -11
  31. package/dist/access-observe-write-surface.js +20 -18
  32. package/dist/access-offline-manifest.d.ts +9 -9
  33. package/dist/access-offline-manifest.js +3 -3
  34. package/dist/access-operations-batch.js +21 -19
  35. package/dist/access-operations.d.ts +16 -16
  36. package/dist/access-operations.js +24 -22
  37. package/dist/access-recall-concurrency.d.ts +11 -11
  38. package/dist/access-recall-concurrency.js +20 -18
  39. package/dist/access-recall-response.d.ts +11 -11
  40. package/dist/access-recall-response.js +20 -18
  41. package/dist/access-recall-surface.d.ts +11 -11
  42. package/dist/access-recall-surface.js +20 -18
  43. package/dist/access-schema.d.ts +83 -83
  44. package/dist/access-service-helpers.d.ts +11 -11
  45. package/dist/{access-service-DkaIG3n8.d.ts → access-service-sbiNS5UB.d.ts} +71 -71
  46. package/dist/access-service.d.ts +11 -11
  47. package/dist/access-service.js +20 -18
  48. package/dist/access-surface-catalog.d.ts +11 -11
  49. package/dist/access-surface-catalog.js +22 -20
  50. package/dist/access-surface-catalog.js.map +1 -1
  51. package/dist/access-wearables-meetings-surface.d.ts +3 -3
  52. package/dist/action-confidence.d.ts +1 -1
  53. package/dist/active-memory-bridge.d.ts +1 -1
  54. package/dist/active-recall.d.ts +1 -1
  55. package/dist/active-recall.js +5 -1
  56. package/dist/active-recall.js.map +1 -1
  57. package/dist/ambient-provenance.d.ts +1 -1
  58. package/dist/artifact-search.d.ts +1 -1
  59. package/dist/{auto-sync-H64ZCNIR.js → auto-sync-XVMLL2RH.js} +5 -5
  60. package/dist/behavior-learner.d.ts +1 -1
  61. package/dist/behavior-signals.d.ts +1 -1
  62. package/dist/bootstrap.d.ts +9 -9
  63. package/dist/briefing-window.d.ts +2 -2
  64. package/dist/briefing.d.ts +2 -2
  65. package/dist/briefing.js +4 -4
  66. package/dist/buffer-surprise-report.d.ts +1 -1
  67. package/dist/buffer-turn-helpers.d.ts +1 -1
  68. package/dist/buffer.d.ts +2 -2
  69. package/dist/bulk-import/index.d.ts +3 -3
  70. package/dist/calibration.d.ts +1 -1
  71. package/dist/capabilities.d.ts +1 -1
  72. package/dist/{catalog-CX2BZEJh.d.ts → catalog-DO_7zfkv.d.ts} +1 -1
  73. package/dist/causal-behavior.d.ts +1 -1
  74. package/dist/causal-consolidation.d.ts +1 -1
  75. package/dist/causal-consolidation.js +9 -6
  76. package/dist/causal-consolidation.js.map +1 -1
  77. package/dist/causal-trajectory-graph.d.ts +1 -1
  78. package/dist/chunk-236PXYG7.js +232 -0
  79. package/dist/chunk-236PXYG7.js.map +1 -0
  80. package/dist/{chunk-YF6UHWOV.js → chunk-2EPOGPKO.js} +3 -3
  81. package/dist/{chunk-IQSC3V2E.js → chunk-2IXQSGCU.js} +2 -2
  82. package/dist/{chunk-GUXS322H.js → chunk-2MVTAIL3.js} +2 -2
  83. package/dist/{chunk-TDKSCV62.js → chunk-3NH3VP3U.js} +2 -2
  84. package/dist/{chunk-6TAX66IA.js → chunk-4JSF7UUP.js} +2 -2
  85. package/dist/{chunk-URHCUXKI.js → chunk-AXGFOFNY.js} +2 -2
  86. package/dist/{chunk-BKYPJUQL.js → chunk-BA2GLSIP.js} +10 -10
  87. package/dist/{chunk-D27J626P.js → chunk-BK5G2MHO.js} +2 -2
  88. package/dist/{chunk-EV3YFLCB.js → chunk-BW4GAF57.js} +2 -2
  89. package/dist/{chunk-DHTQP334.js → chunk-CQBIN77D.js} +2 -2
  90. package/dist/{chunk-WN5FSGLE.js → chunk-CV3GNPOE.js} +45 -50
  91. package/dist/chunk-CV3GNPOE.js.map +1 -0
  92. package/dist/{chunk-6VALIZKG.js → chunk-DORFF5N5.js} +2 -2
  93. package/dist/{chunk-7QOO4LGC.js → chunk-DPGH6LHQ.js} +331 -73
  94. package/dist/chunk-DPGH6LHQ.js.map +1 -0
  95. package/dist/{chunk-76PL4XLG.js → chunk-DPNXADEI.js} +7 -2
  96. package/dist/chunk-DPNXADEI.js.map +1 -0
  97. package/dist/{chunk-MRTUN665.js → chunk-DUEDOYZD.js} +2 -2
  98. package/dist/{chunk-QFMO32TO.js → chunk-DUZARALI.js} +3 -3
  99. package/dist/{chunk-7KFIMGMP.js → chunk-ECLJ4LA2.js} +2 -2
  100. package/dist/{chunk-PDVQ5JU3.js → chunk-FBR7PIL4.js} +2 -2
  101. package/dist/{chunk-RK4WXUI2.js → chunk-HF5BUTI6.js} +2 -2
  102. package/dist/{chunk-3DVBKTSO.js → chunk-HSZMX3ZJ.js} +4 -4
  103. package/dist/{chunk-ODZG724P.js → chunk-I2HTKOOP.js} +2 -2
  104. package/dist/{chunk-GN55KU2P.js → chunk-IIRCHGWD.js} +2 -2
  105. package/dist/{chunk-AYYGRVRP.js → chunk-IURMJBGP.js} +2 -2
  106. package/dist/{chunk-4XDGYCZI.js → chunk-J3ATBB7M.js} +2 -2
  107. package/dist/{chunk-E4MVQQVX.js → chunk-JPAKBNTM.js} +2 -2
  108. package/dist/{chunk-NZWEEALH.js → chunk-KFIOPZ25.js} +2 -2
  109. package/dist/{chunk-EIVIB73I.js → chunk-KOO37E4Y.js} +2 -2
  110. package/dist/{chunk-VA5KMSAE.js → chunk-KTPXXVDQ.js} +3 -3
  111. package/dist/{chunk-NXKJHSDN.js → chunk-LBFFNDFM.js} +1 -1
  112. package/dist/chunk-LBFFNDFM.js.map +1 -0
  113. package/dist/{chunk-Z4RPXHJH.js → chunk-LYBIHM4N.js} +4 -4
  114. package/dist/{chunk-G57LQRP6.js → chunk-MFOSZUIT.js} +2 -2
  115. package/dist/{chunk-TYUS5TLG.js → chunk-N56GVOWR.js} +3 -3
  116. package/dist/{chunk-BQUEAVNW.js → chunk-NH6LC57D.js} +2 -2
  117. package/dist/{chunk-AUO2LJ3K.js → chunk-NLEH4RTB.js} +2 -2
  118. package/dist/{chunk-AYDDB3XI.js → chunk-OCCHUEZB.js} +2 -2
  119. package/dist/{chunk-57HVIG5U.js → chunk-OWQNJJY2.js} +2 -2
  120. package/dist/{chunk-OJD4WS2E.js → chunk-OZDFB22S.js} +2 -2
  121. package/dist/{chunk-2VXWFYJE.js → chunk-R2MZCYA6.js} +3 -3
  122. package/dist/{chunk-LBWQ65SX.js → chunk-T42L3S6A.js} +4 -4
  123. package/dist/{chunk-PAYGC3BD.js → chunk-THVI4Y7X.js} +7 -7
  124. package/dist/{chunk-S7Q5CM7E.js → chunk-TJFI3K2O.js} +15 -3
  125. package/dist/chunk-TJFI3K2O.js.map +1 -0
  126. package/dist/{chunk-R47WINCY.js → chunk-UCKG36HO.js} +2 -2
  127. package/dist/{chunk-QXIQPCCN.js → chunk-UFR6HX7A.js} +1 -1
  128. package/dist/{chunk-CDUUDBWJ.js → chunk-VFYRYFLL.js} +2 -2
  129. package/dist/{chunk-P4DHENRE.js → chunk-WDXD6ITO.js} +2 -2
  130. package/dist/{chunk-H5FW4S5Q.js → chunk-YB4GBWBU.js} +31 -31
  131. package/dist/{chunk-MBDJJTAT.js → chunk-YDKF4MSJ.js} +3 -3
  132. package/dist/{chunk-AZAA5DNP.js → chunk-YOXVZJFM.js} +2 -2
  133. package/dist/{chunk-OLWTCWQ2.js → chunk-YZJM6CLF.js} +8 -8
  134. package/dist/chunk-ZCUTSMR2.js +61 -0
  135. package/dist/chunk-ZCUTSMR2.js.map +1 -0
  136. package/dist/{chunk-LUNJ3WFO.js → chunk-ZK4BFABK.js} +4 -4
  137. package/dist/{chunk-RDFF2NAU.js → chunk-ZXBTTMGZ.js} +184 -88
  138. package/dist/chunk-ZXBTTMGZ.js.map +1 -0
  139. package/dist/{cli-ChKeYMZv.d.ts → cli-BqdqPdG_.d.ts} +5 -5
  140. package/dist/cli.d.ts +13 -13
  141. package/dist/cli.js +44 -42
  142. package/dist/coding/pre-action-gate.d.ts +1 -1
  143. package/dist/compounding/engine.d.ts +2 -2
  144. package/dist/compounding/engine.js +4 -4
  145. package/dist/compounding/preference-consolidator.d.ts +1 -1
  146. package/dist/compression-optimizer.d.ts +1 -1
  147. package/dist/config.d.ts +1 -1
  148. package/dist/config.js +5 -1
  149. package/dist/connectors/codex-materialize-runner.d.ts +1 -1
  150. package/dist/connectors/codex-materialize-runner.js +8 -5
  151. package/dist/connectors/codex-materialize.d.ts +14 -1
  152. package/dist/connectors/codex-materialize.js +10 -1
  153. package/dist/connectors/index.d.ts +1 -1
  154. package/dist/connectors/index.js +8 -5
  155. package/dist/consolidation-provenance-check.d.ts +2 -2
  156. package/dist/consolidation-undo.d.ts +2 -2
  157. package/dist/contradiction/index.d.ts +3 -3
  158. package/dist/contradiction/index.js +1 -1
  159. package/dist/converge-config.d.ts +1 -1
  160. package/dist/convergence-refresh.d.ts +2 -2
  161. package/dist/convergence-refresh.js +6 -6
  162. package/dist/conversation-index/backend.d.ts +1 -1
  163. package/dist/conversation-index/chunker.d.ts +1 -1
  164. package/dist/conversation-index/faiss-adapter.d.ts +1 -1
  165. package/dist/conversation-index/indexer.d.ts +1 -1
  166. package/dist/conversation-index/search.d.ts +1 -1
  167. package/dist/corpus-watermark.d.ts +1 -1
  168. package/dist/corpus-watermark.js +6 -6
  169. package/dist/cross-lingual-recall.d.ts +1 -1
  170. package/dist/day-summary.d.ts +1 -1
  171. package/dist/delinearize.d.ts +1 -1
  172. package/dist/dependency-propagation-config.d.ts +1 -1
  173. package/dist/{dependency-propagation-delivery-B8ZMBBCY.d.ts → dependency-propagation-delivery-D23_x-s5.d.ts} +1 -1
  174. package/dist/direct-answer-wiring.d.ts +1 -1
  175. package/dist/direct-answer.d.ts +1 -1
  176. package/dist/embedding-fallback.d.ts +1 -1
  177. package/dist/enrichment/index.d.ts +1 -1
  178. package/dist/entity-origin-fields.d.ts +1 -1
  179. package/dist/entity-retrieval.d.ts +2 -2
  180. package/dist/entity-retrieval.js +4 -4
  181. package/dist/entity-schema.d.ts +1 -1
  182. package/dist/episodic-context.d.ts +1 -1
  183. package/dist/explicit-capture.d.ts +9 -9
  184. package/dist/explicit-capture.js +1 -1
  185. package/dist/external-wiki-access.d.ts +11 -11
  186. package/dist/external-wiki-access.js +21 -19
  187. package/dist/external-wiki-collection-registration.d.ts +1 -1
  188. package/dist/external-wiki-collection.d.ts +1 -1
  189. package/dist/external-wiki-mcp-tools.d.ts +11 -11
  190. package/dist/extraction-error-classification.d.ts +1 -1
  191. package/dist/extraction-faithfulness.d.ts +1 -1
  192. package/dist/extraction-judge-telemetry.d.ts +1 -1
  193. package/dist/extraction-judge-training.d.ts +1 -1
  194. package/dist/extraction-judge.d.ts +1 -1
  195. package/dist/extraction-judge.js +2 -2
  196. package/dist/extraction-liveness.d.ts +1 -1
  197. package/dist/extraction-normalization.d.ts +1 -1
  198. package/dist/extraction-prompt.d.ts +1 -1
  199. package/dist/extraction-source-grounding-rules.d.ts +1 -1
  200. package/dist/extraction-source-grounding.d.ts +1 -1
  201. package/dist/extraction.d.ts +1 -1
  202. package/dist/extraction.js +9 -7
  203. package/dist/fallback-llm.d.ts +1 -1
  204. package/dist/graph-dashboard-diff.d.ts +1 -1
  205. package/dist/graph-dashboard-key.d.ts +1 -1
  206. package/dist/graph-dashboard-parser.d.ts +1 -1
  207. package/dist/graph-edge-reinforcement.d.ts +1 -1
  208. package/dist/graph-path-reconstruction.d.ts +1 -1
  209. package/dist/graph-path-scoring.d.ts +1 -1
  210. package/dist/graph-snapshot.d.ts +1 -1
  211. package/dist/graph.d.ts +1 -1
  212. package/dist/harmonic-retrieval.js +1 -1
  213. package/dist/importance.d.ts +1 -1
  214. package/dist/importers/index.d.ts +1 -1
  215. package/dist/in-flight-reads.d.ts +1 -1
  216. package/dist/{index-CexDrJzC.d.ts → index--QhGIXF2.d.ts} +2 -2
  217. package/dist/index.d.ts +763 -716
  218. package/dist/index.js +79 -58
  219. package/dist/intent.d.ts +1 -1
  220. package/dist/lcm/engine.d.ts +1 -1
  221. package/dist/lcm/index.d.ts +1 -1
  222. package/dist/lcm/tools.d.ts +1 -1
  223. package/dist/lifecycle.d.ts +1 -1
  224. package/dist/live-connectors-runner.d.ts +1 -1
  225. package/dist/local-llm.d.ts +1 -1
  226. package/dist/local-model-endpoint.d.ts +1 -1
  227. package/dist/maintenance/memory-governance.d.ts +1 -1
  228. package/dist/maintenance/memory-governance.js +4 -4
  229. package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +2 -2
  230. package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +4 -4
  231. package/dist/maintenance/rebuild-memory-projection.d.ts +2 -2
  232. package/dist/maintenance/rebuild-memory-projection.js +5 -5
  233. package/dist/{maintenance-nkdtSrVr.d.ts → maintenance-PFvY1Pw_.d.ts} +3 -3
  234. package/dist/mcp-memory-inspector-app.d.ts +11 -11
  235. package/dist/memory-action-policy.d.ts +1 -1
  236. package/dist/memory-cache.d.ts +1 -1
  237. package/dist/memory-lifecycle-ledger-utils.d.ts +1 -1
  238. package/dist/memory-projection-store.d.ts +1 -1
  239. package/dist/memory-provenance.d.ts +1 -1
  240. package/dist/memory-snapshot.d.ts +1 -1
  241. package/dist/memory-subject-cli.d.ts +11 -11
  242. package/dist/memory-subject.d.ts +11 -11
  243. package/dist/memory-worth-outcomes.d.ts +2 -2
  244. package/dist/models-json.d.ts +1 -1
  245. package/dist/namespaces/migrate.d.ts +3 -3
  246. package/dist/namespaces/migrate.js +5 -5
  247. package/dist/namespaces/principal.d.ts +1 -1
  248. package/dist/namespaces/search.d.ts +1 -1
  249. package/dist/namespaces/storage.d.ts +3 -3
  250. package/dist/namespaces/storage.js +4 -4
  251. package/dist/native-knowledge.d.ts +1 -1
  252. package/dist/offline-sync-impression-drain.d.ts +1 -1
  253. package/dist/operator-doctor-corpus.d.ts +1 -1
  254. package/dist/operator-doctor-corpus.js +7 -7
  255. package/dist/operator-doctor-replica.d.ts +1 -1
  256. package/dist/operator-toolkit.d.ts +3 -3
  257. package/dist/operator-toolkit.js +16 -13
  258. package/dist/orchestration/compression-guideline-coordinator.d.ts +2 -2
  259. package/dist/orchestration/maintenance.d.ts +4 -4
  260. package/dist/orchestration/maintenance.js +10 -10
  261. package/dist/{orchestrator-Bvq1-RQs.d.ts → orchestrator-4wzJrPVm.d.ts} +8 -8
  262. package/dist/orchestrator.d.ts +9 -9
  263. package/dist/orchestrator.js +55 -53
  264. package/dist/patterns-cli.d.ts +1 -1
  265. package/dist/{pipeline-C8vfIiTX.d.ts → pipeline-CgXgdIrF.d.ts} +1 -1
  266. package/dist/policy-runtime.d.ts +1 -1
  267. package/dist/proactive-contention.d.ts +1 -1
  268. package/dist/provenance.d.ts +1 -1
  269. package/dist/{public-http-Cy0aYbys.d.ts → public-http-BP3VQDl5.d.ts} +1 -1
  270. package/dist/{qmd-B9p1SZTZ.d.ts → qmd-BppGGxsi.d.ts} +1 -1
  271. package/dist/qmd-preflight.d.ts +2 -2
  272. package/dist/qmd-recall-cache.d.ts +1 -1
  273. package/dist/qmd.d.ts +2 -2
  274. package/dist/recall-concurrency-config.d.ts +1 -1
  275. package/dist/recall-disclosure-escalation.d.ts +1 -1
  276. package/dist/recall-explain-renderer.d.ts +1 -1
  277. package/dist/recall-explain-renderer.js +3 -3
  278. package/dist/recall-memory-map.d.ts +1 -1
  279. package/dist/recall-planner-llm.d.ts +1 -1
  280. package/dist/recall-state.d.ts +1 -1
  281. package/dist/recall-tag-filter.d.ts +1 -1
  282. package/dist/recall-timings.d.ts +1 -1
  283. package/dist/recall-xray-cli.d.ts +1 -1
  284. package/dist/recall-xray-cli.js +4 -4
  285. package/dist/recall-xray-renderer.d.ts +1 -1
  286. package/dist/recall-xray-renderer.js +3 -3
  287. package/dist/recall-xray.d.ts +1 -1
  288. package/dist/recall-xray.js +2 -2
  289. package/dist/reconcile/cursor.d.ts +1 -1
  290. package/dist/reconcile/manifest.d.ts +1 -1
  291. package/dist/reconcile/manifest.js +2 -2
  292. package/dist/reconcile/plan.d.ts +1 -1
  293. package/dist/replay/normalizers/chatgpt.d.ts +1 -1
  294. package/dist/replay/normalizers/claude.d.ts +1 -1
  295. package/dist/replay/normalizers/openclaw.d.ts +1 -1
  296. package/dist/replay/normalizers/shared.d.ts +1 -1
  297. package/dist/replay/runner.d.ts +1 -1
  298. package/dist/replay/types.d.ts +1 -1
  299. package/dist/replica-divergence.d.ts +1 -1
  300. package/dist/replica-peers-config.d.ts +1 -1
  301. package/dist/resolution-4552BNRV.js +1 -1
  302. package/dist/resolve-auth-token.d.ts +1 -1
  303. package/dist/resume-bundles.js +6 -2
  304. package/dist/retrieval-agents.d.ts +2 -2
  305. package/dist/retrieval-tiers.d.ts +1 -1
  306. package/dist/routing/engine.d.ts +1 -1
  307. package/dist/routing/store.d.ts +1 -1
  308. package/dist/salvage-envelope.d.ts +1 -1
  309. package/dist/salvage-envelope.js +1 -1
  310. package/dist/schemas.d.ts +136 -136
  311. package/dist/{scope-profiles-DLrRxFWR.d.ts → scope-profiles-ChZUtxDU.d.ts} +1 -1
  312. package/dist/search/embed-helper.d.ts +1 -1
  313. package/dist/search/factory.d.ts +1 -1
  314. package/dist/search/index.d.ts +1 -1
  315. package/dist/search/lancedb-backend.d.ts +1 -1
  316. package/dist/search/meilisearch-backend.d.ts +1 -1
  317. package/dist/search/noop-backend.d.ts +1 -1
  318. package/dist/search/orama-backend.d.ts +1 -1
  319. package/dist/search/port.d.ts +1 -1
  320. package/dist/search/remote-backend.d.ts +1 -1
  321. package/dist/{semantic-consolidation-DlN6xe20.d.ts → semantic-consolidation-mSPwQSmF.d.ts} +1 -1
  322. package/dist/semantic-consolidation.d.ts +2 -2
  323. package/dist/semantic-consolidation.js +9 -6
  324. package/dist/semantic-rule-promotion.js +4 -4
  325. package/dist/semantic-rule-verifier.d.ts +1 -1
  326. package/dist/semantic-rule-verifier.js +4 -4
  327. package/dist/{service-GkYyVfm9.d.ts → service-BICWLwSP.d.ts} +2 -2
  328. package/dist/session-observer-bands.d.ts +1 -1
  329. package/dist/session-observer-state.d.ts +1 -1
  330. package/dist/shared-context/manager.d.ts +7 -7
  331. package/dist/signal.d.ts +1 -1
  332. package/dist/skills-registry.js +4 -56
  333. package/dist/skills-registry.js.map +1 -1
  334. package/dist/source-agent-qualifier.d.ts +1 -1
  335. package/dist/source-agent-qualifier.js +8 -5
  336. package/dist/{storage-BIDzuKIn.d.ts → storage-B7urx1K3.d.ts} +1 -1
  337. package/dist/storage.d.ts +2 -2
  338. package/dist/storage.js +6 -6
  339. package/dist/subject-config.d.ts +1 -1
  340. package/dist/summarizer.d.ts +1 -1
  341. package/dist/summary-snapshot.d.ts +1 -1
  342. package/dist/support-passport/index.d.ts +14 -14
  343. package/dist/support-passport/index.js +23 -21
  344. package/dist/temporal-supersession.d.ts +2 -2
  345. package/dist/temporal-timeline-recall.d.ts +1 -1
  346. package/dist/temporal-validity.d.ts +1 -1
  347. package/dist/threading.d.ts +1 -1
  348. package/dist/tier-migration.d.ts +2 -2
  349. package/dist/tier-routing.d.ts +1 -1
  350. package/dist/topics.d.ts +1 -1
  351. package/dist/transcript.d.ts +1 -1
  352. package/dist/transfer/types.d.ts +78 -78
  353. package/dist/trust-score-stage.d.ts +1 -1
  354. package/dist/trust-score.d.ts +1 -1
  355. package/dist/{types-BxAcOl5Q.d.ts → types-ETU5N6nB.d.ts} +111 -4
  356. package/dist/types.d.ts +1 -1
  357. package/dist/types.js +1 -1
  358. package/dist/utility-runtime.d.ts +1 -1
  359. package/dist/verified-recall.js +4 -4
  360. package/dist/who-knows-cli.d.ts +11 -11
  361. package/dist/who-knows-cli.js +5 -5
  362. package/dist/who-knows.d.ts +11 -11
  363. package/dist/who-knows.js +4 -4
  364. package/dist/write-envelope.d.ts +1 -1
  365. package/dist/write-envelope.js +1 -1
  366. package/package.json +2 -2
  367. package/src/cli/skills-commands.ts +150 -0
  368. package/src/cli.ts +4 -2
  369. package/src/config.ts +4 -2
  370. package/src/connectors/codex-materialize-runner.ts +16 -0
  371. package/src/connectors/codex-materialize-skills.test.ts +141 -0
  372. package/src/connectors/codex-materialize.ts +58 -40
  373. package/src/connectors/materialize-paths.ts +50 -0
  374. package/src/connectors/materialize-skills.ts +127 -0
  375. package/src/index.ts +5 -10
  376. package/src/procedural/skill-io.test.ts +190 -0
  377. package/src/procedural/skill-io.ts +220 -0
  378. package/src/procedural/skill-projection.test.ts +214 -0
  379. package/src/procedural/skill-projection.ts +356 -0
  380. package/src/review/frontmatter.test.ts +15 -0
  381. package/src/review/frontmatter.ts +20 -0
  382. package/src/review/review-deck-snapshot.ts +4 -20
  383. package/src/review/review-deck.ts +1 -12
  384. package/src/types.ts +2 -3
  385. package/dist/chunk-76PL4XLG.js.map +0 -1
  386. package/dist/chunk-7QOO4LGC.js.map +0 -1
  387. package/dist/chunk-NXKJHSDN.js.map +0 -1
  388. package/dist/chunk-RDFF2NAU.js.map +0 -1
  389. package/dist/chunk-S7Q5CM7E.js.map +0 -1
  390. package/dist/chunk-WN5FSGLE.js.map +0 -1
  391. /package/dist/{auto-sync-H64ZCNIR.js.map → auto-sync-XVMLL2RH.js.map} +0 -0
  392. /package/dist/{chunk-YF6UHWOV.js.map → chunk-2EPOGPKO.js.map} +0 -0
  393. /package/dist/{chunk-IQSC3V2E.js.map → chunk-2IXQSGCU.js.map} +0 -0
  394. /package/dist/{chunk-GUXS322H.js.map → chunk-2MVTAIL3.js.map} +0 -0
  395. /package/dist/{chunk-TDKSCV62.js.map → chunk-3NH3VP3U.js.map} +0 -0
  396. /package/dist/{chunk-6TAX66IA.js.map → chunk-4JSF7UUP.js.map} +0 -0
  397. /package/dist/{chunk-URHCUXKI.js.map → chunk-AXGFOFNY.js.map} +0 -0
  398. /package/dist/{chunk-BKYPJUQL.js.map → chunk-BA2GLSIP.js.map} +0 -0
  399. /package/dist/{chunk-D27J626P.js.map → chunk-BK5G2MHO.js.map} +0 -0
  400. /package/dist/{chunk-EV3YFLCB.js.map → chunk-BW4GAF57.js.map} +0 -0
  401. /package/dist/{chunk-DHTQP334.js.map → chunk-CQBIN77D.js.map} +0 -0
  402. /package/dist/{chunk-6VALIZKG.js.map → chunk-DORFF5N5.js.map} +0 -0
  403. /package/dist/{chunk-MRTUN665.js.map → chunk-DUEDOYZD.js.map} +0 -0
  404. /package/dist/{chunk-QFMO32TO.js.map → chunk-DUZARALI.js.map} +0 -0
  405. /package/dist/{chunk-7KFIMGMP.js.map → chunk-ECLJ4LA2.js.map} +0 -0
  406. /package/dist/{chunk-PDVQ5JU3.js.map → chunk-FBR7PIL4.js.map} +0 -0
  407. /package/dist/{chunk-RK4WXUI2.js.map → chunk-HF5BUTI6.js.map} +0 -0
  408. /package/dist/{chunk-3DVBKTSO.js.map → chunk-HSZMX3ZJ.js.map} +0 -0
  409. /package/dist/{chunk-ODZG724P.js.map → chunk-I2HTKOOP.js.map} +0 -0
  410. /package/dist/{chunk-GN55KU2P.js.map → chunk-IIRCHGWD.js.map} +0 -0
  411. /package/dist/{chunk-AYYGRVRP.js.map → chunk-IURMJBGP.js.map} +0 -0
  412. /package/dist/{chunk-4XDGYCZI.js.map → chunk-J3ATBB7M.js.map} +0 -0
  413. /package/dist/{chunk-E4MVQQVX.js.map → chunk-JPAKBNTM.js.map} +0 -0
  414. /package/dist/{chunk-NZWEEALH.js.map → chunk-KFIOPZ25.js.map} +0 -0
  415. /package/dist/{chunk-EIVIB73I.js.map → chunk-KOO37E4Y.js.map} +0 -0
  416. /package/dist/{chunk-VA5KMSAE.js.map → chunk-KTPXXVDQ.js.map} +0 -0
  417. /package/dist/{chunk-Z4RPXHJH.js.map → chunk-LYBIHM4N.js.map} +0 -0
  418. /package/dist/{chunk-G57LQRP6.js.map → chunk-MFOSZUIT.js.map} +0 -0
  419. /package/dist/{chunk-TYUS5TLG.js.map → chunk-N56GVOWR.js.map} +0 -0
  420. /package/dist/{chunk-BQUEAVNW.js.map → chunk-NH6LC57D.js.map} +0 -0
  421. /package/dist/{chunk-AUO2LJ3K.js.map → chunk-NLEH4RTB.js.map} +0 -0
  422. /package/dist/{chunk-AYDDB3XI.js.map → chunk-OCCHUEZB.js.map} +0 -0
  423. /package/dist/{chunk-57HVIG5U.js.map → chunk-OWQNJJY2.js.map} +0 -0
  424. /package/dist/{chunk-OJD4WS2E.js.map → chunk-OZDFB22S.js.map} +0 -0
  425. /package/dist/{chunk-2VXWFYJE.js.map → chunk-R2MZCYA6.js.map} +0 -0
  426. /package/dist/{chunk-LBWQ65SX.js.map → chunk-T42L3S6A.js.map} +0 -0
  427. /package/dist/{chunk-PAYGC3BD.js.map → chunk-THVI4Y7X.js.map} +0 -0
  428. /package/dist/{chunk-R47WINCY.js.map → chunk-UCKG36HO.js.map} +0 -0
  429. /package/dist/{chunk-QXIQPCCN.js.map → chunk-UFR6HX7A.js.map} +0 -0
  430. /package/dist/{chunk-CDUUDBWJ.js.map → chunk-VFYRYFLL.js.map} +0 -0
  431. /package/dist/{chunk-P4DHENRE.js.map → chunk-WDXD6ITO.js.map} +0 -0
  432. /package/dist/{chunk-H5FW4S5Q.js.map → chunk-YB4GBWBU.js.map} +0 -0
  433. /package/dist/{chunk-MBDJJTAT.js.map → chunk-YDKF4MSJ.js.map} +0 -0
  434. /package/dist/{chunk-AZAA5DNP.js.map → chunk-YOXVZJFM.js.map} +0 -0
  435. /package/dist/{chunk-OLWTCWQ2.js.map → chunk-YZJM6CLF.js.map} +0 -0
  436. /package/dist/{chunk-LUNJ3WFO.js.map → chunk-ZK4BFABK.js.map} +0 -0
@@ -57,7 +57,7 @@ import {
57
57
  } from "./chunk-IIFFC3RL.js";
58
58
  import {
59
59
  rebuildMemoryLifecycleLedger
60
- } from "./chunk-TDKSCV62.js";
60
+ } from "./chunk-3NH3VP3U.js";
61
61
  import {
62
62
  archiveObservations
63
63
  } from "./chunk-YLBE6PLR.js";
@@ -80,21 +80,21 @@ import {
80
80
  } from "./chunk-6FC3IZ26.js";
81
81
  import {
82
82
  searchVerifiedEpisodes
83
- } from "./chunk-7KFIMGMP.js";
83
+ } from "./chunk-ECLJ4LA2.js";
84
84
  import {
85
85
  ThreadingManager
86
86
  } from "./chunk-OJP3N7UK.js";
87
87
  import {
88
88
  promoteSemanticRuleFromMemory
89
- } from "./chunk-4XDGYCZI.js";
89
+ } from "./chunk-J3ATBB7M.js";
90
90
  import {
91
91
  searchVerifiedSemanticRules
92
- } from "./chunk-AYDDB3XI.js";
92
+ } from "./chunk-OCCHUEZB.js";
93
93
  import {
94
94
  buildResumeBundleFromState,
95
95
  getResumeBundleStatus,
96
96
  recordResumeBundle
97
- } from "./chunk-URHCUXKI.js";
97
+ } from "./chunk-AXGFOFNY.js";
98
98
  import {
99
99
  getWorkProductLedgerStatus,
100
100
  recordWorkProductLedgerEntry,
@@ -105,7 +105,7 @@ import {
105
105
  } from "./chunk-AM4T6CHX.js";
106
106
  import {
107
107
  parseXrayCliOptions
108
- } from "./chunk-2VXWFYJE.js";
108
+ } from "./chunk-R2MZCYA6.js";
109
109
  import {
110
110
  collectPatternMemories,
111
111
  explainPatternMemory,
@@ -127,7 +127,7 @@ import {
127
127
  runOperatorInventory,
128
128
  runOperatorRepair,
129
129
  runOperatorSetup
130
- } from "./chunk-OLWTCWQ2.js";
130
+ } from "./chunk-YZJM6CLF.js";
131
131
  import {
132
132
  analyzeSessionIntegrity,
133
133
  applySessionRepair,
@@ -152,7 +152,7 @@ import {
152
152
  } from "./chunk-6GUG4YNM.js";
153
153
  import {
154
154
  searchHarmonicRetrieval
155
- } from "./chunk-QXIQPCCN.js";
155
+ } from "./chunk-UFR6HX7A.js";
156
156
  import {
157
157
  rescoreMemoryImportance
158
158
  } from "./chunk-UOBPK2OS.js";
@@ -175,7 +175,7 @@ import {
175
175
  rebuildMemoryProjection,
176
176
  repairMemoryProjection,
177
177
  verifyMemoryProjection
178
- } from "./chunk-QFMO32TO.js";
178
+ } from "./chunk-DUZARALI.js";
179
179
  import {
180
180
  buildConnectorRowsFromDefinitions,
181
181
  parseConnectorsListOptions,
@@ -196,11 +196,11 @@ import {
196
196
  } from "./chunk-6TBIWIAG.js";
197
197
  import {
198
198
  parseConfig
199
- } from "./chunk-76PL4XLG.js";
199
+ } from "./chunk-DPNXADEI.js";
200
200
  import {
201
201
  EngramAccessHttpServer,
202
202
  MeetingsInputError
203
- } from "./chunk-BKYPJUQL.js";
203
+ } from "./chunk-BA2GLSIP.js";
204
204
  import {
205
205
  WearablesInputError
206
206
  } from "./chunk-V7IZKJI3.js";
@@ -210,13 +210,13 @@ import {
210
210
  loadChatSession,
211
211
  processChatMessage,
212
212
  sessionBelongsToPrincipal
213
- } from "./chunk-VA5KMSAE.js";
213
+ } from "./chunk-KTPXXVDQ.js";
214
214
  import {
215
215
  getAbstractionNodeStoreStatus
216
216
  } from "./chunk-DJUKBGAD.js";
217
217
  import {
218
218
  EngramAccessService
219
- } from "./chunk-WN5FSGLE.js";
219
+ } from "./chunk-CV3GNPOE.js";
220
220
  import {
221
221
  WorkStorage
222
222
  } from "./chunk-GDB4J2H3.js";
@@ -233,10 +233,10 @@ import {
233
233
  parseRecallExplainFormat,
234
234
  renderRecallExplain,
235
235
  renderXray
236
- } from "./chunk-AZAA5DNP.js";
236
+ } from "./chunk-YOXVZJFM.js";
237
237
  import {
238
238
  readAggregateExtractionWatermark
239
- } from "./chunk-GUXS322H.js";
239
+ } from "./chunk-2MVTAIL3.js";
240
240
  import {
241
241
  getObjectiveStateStoreStatus
242
242
  } from "./chunk-HTP6XRUI.js";
@@ -245,30 +245,33 @@ import {
245
245
  readMemoryGovernanceRunArtifact,
246
246
  restoreMemoryGovernanceRun,
247
247
  runMemoryGovernance
248
- } from "./chunk-EIVIB73I.js";
248
+ } from "./chunk-KOO37E4Y.js";
249
249
  import {
250
250
  listNamespaces,
251
251
  runNamespaceMigration,
252
252
  verifyNamespaces
253
- } from "./chunk-OJD4WS2E.js";
253
+ } from "./chunk-OZDFB22S.js";
254
254
  import {
255
255
  analyzeGraphHealth
256
256
  } from "./chunk-BIJAWZYW.js";
257
257
  import {
258
258
  resolveNamespaceChildRoot
259
- } from "./chunk-S7Q5CM7E.js";
259
+ } from "./chunk-TJFI3K2O.js";
260
260
  import {
261
261
  OKF_RESERVED_BASENAMES,
262
262
  meetingIdDate,
263
263
  okfTypeForCategory
264
- } from "./chunk-PAYGC3BD.js";
264
+ } from "./chunk-THVI4Y7X.js";
265
265
  import {
266
266
  isValidTranscriptDate
267
267
  } from "./chunk-UHVXE24Y.js";
268
268
  import {
269
269
  RECALL_DISCLOSURE_LEVELS,
270
270
  isRecallDisclosure
271
- } from "./chunk-NXKJHSDN.js";
271
+ } from "./chunk-LBFFNDFM.js";
272
+ import {
273
+ composeMemoryEnvelope
274
+ } from "./chunk-RAIUTAZZ.js";
272
275
  import {
273
276
  bumpMemoryCorpusVersionForDir
274
277
  } from "./chunk-XCB6QDL6.js";
@@ -283,6 +286,20 @@ import {
283
286
  import {
284
287
  renderExtractionLivenessStats
285
288
  } from "./chunk-3SG4FGDV.js";
289
+ import {
290
+ SKILL_FILE_NAME,
291
+ SKILL_IMPORT_SOURCE,
292
+ parseSkillBundle,
293
+ projectProceduresToSkills,
294
+ renderSkillBundle,
295
+ sanitizeSkillSlug
296
+ } from "./chunk-236PXYG7.js";
297
+ import {
298
+ BUILTIN_SKILLS
299
+ } from "./chunk-ZCUTSMR2.js";
300
+ import {
301
+ buildProcedurePersistBody
302
+ } from "./chunk-QDW3E4RD.js";
286
303
  import {
287
304
  getCausalTrajectoryStoreStatus
288
305
  } from "./chunk-PP7R754B.js";
@@ -299,7 +316,8 @@ import {
299
316
  STATE_FILE_MAX_DECRYPT_BYTES
300
317
  } from "./chunk-DVYRD4HY.js";
301
318
  import {
302
- assertPathInsideRoot
319
+ assertPathInsideRoot,
320
+ pathIsInside
303
321
  } from "./chunk-GCASGYIO.js";
304
322
  import {
305
323
  inferMemoryStatus,
@@ -349,8 +367,8 @@ import {
349
367
  } from "./chunk-3WCASNQZ.js";
350
368
 
351
369
  // src/cli.ts
352
- import path5 from "path";
353
- import { access, lstat as lstat2, readFile, readdir as readdir2, realpath as realpath2, unlink } from "fs/promises";
370
+ import path6 from "path";
371
+ import { access, lstat as lstat3, readFile as readFile2, readdir as readdir3, realpath as realpath3, unlink } from "fs/promises";
354
372
  import { createHash } from "crypto";
355
373
 
356
374
  // src/wearables/registry.ts
@@ -1351,6 +1369,242 @@ function registerOkfCommands(cmd, orchestrator) {
1351
1369
  });
1352
1370
  }
1353
1371
 
1372
+ // src/procedural/skill-io.ts
1373
+ import { lstat, mkdir, readdir, readFile, realpath, writeFile } from "fs/promises";
1374
+ import path3 from "path";
1375
+ async function exportSkillBundles(options) {
1376
+ const outDir = path3.resolve(options.outDir);
1377
+ await mkdir(outDir, { recursive: true });
1378
+ const slugs = [];
1379
+ for (const bundle of options.bundles) {
1380
+ const dir = path3.join(outDir, bundle.slug);
1381
+ if (!pathIsInside(outDir, dir)) {
1382
+ throw new Error(`skill export: refusing to write outside ${outDir} (slug ${bundle.slug})`);
1383
+ }
1384
+ try {
1385
+ const existing = await lstat(dir);
1386
+ if (existing.isSymbolicLink()) {
1387
+ throw new Error(`skill export: refusing to write through symlink ${dir}`);
1388
+ }
1389
+ } catch (err) {
1390
+ if (err.code !== "ENOENT") throw err;
1391
+ }
1392
+ await mkdir(dir, { recursive: true });
1393
+ const skillPath = path3.join(dir, SKILL_FILE_NAME);
1394
+ try {
1395
+ const existingSkill = await lstat(skillPath);
1396
+ if (existingSkill.isSymbolicLink()) {
1397
+ throw new Error(`skill export: refusing to write through symlink ${skillPath}`);
1398
+ }
1399
+ } catch (err) {
1400
+ if (err.code !== "ENOENT") throw err;
1401
+ }
1402
+ await writeFile(skillPath, renderSkillBundle(bundle), "utf-8");
1403
+ slugs.push(bundle.slug);
1404
+ }
1405
+ return { outDir, slugs };
1406
+ }
1407
+ async function readSkillBundlesFromDir(dir) {
1408
+ const root = path3.resolve(dir);
1409
+ const rootStat = await lstat(root);
1410
+ if (rootStat.isSymbolicLink()) {
1411
+ throw new Error(`skill import: refusing to walk symlinked directory ${root}`);
1412
+ }
1413
+ if (!rootStat.isDirectory()) {
1414
+ throw new Error(`skill import: ${root} is not a directory`);
1415
+ }
1416
+ const rootReal = await realpath(root);
1417
+ const bundles = [];
1418
+ const skipped = [];
1419
+ const entries = await readdir(root, { withFileTypes: true });
1420
+ entries.sort((a, b) => a.name < b.name ? -1 : a.name > b.name ? 1 : 0);
1421
+ for (const entry of entries) {
1422
+ try {
1423
+ if (entry.isSymbolicLink()) {
1424
+ skipped.push({ entry: entry.name, reason: "symlink" });
1425
+ continue;
1426
+ }
1427
+ if (!entry.isDirectory()) continue;
1428
+ const bundleDir = path3.join(root, entry.name);
1429
+ const bundleReal = await realpath(bundleDir);
1430
+ if (!pathIsInside(rootReal, bundleReal)) {
1431
+ skipped.push({ entry: entry.name, reason: "resolves outside the import root" });
1432
+ continue;
1433
+ }
1434
+ const skillPath = path3.join(bundleDir, SKILL_FILE_NAME);
1435
+ let skillStat;
1436
+ try {
1437
+ skillStat = await lstat(skillPath);
1438
+ } catch {
1439
+ skipped.push({ entry: entry.name, reason: `no ${SKILL_FILE_NAME}` });
1440
+ continue;
1441
+ }
1442
+ if (skillStat.isSymbolicLink() || !skillStat.isFile()) {
1443
+ skipped.push({ entry: entry.name, reason: `${SKILL_FILE_NAME} is not a regular file` });
1444
+ continue;
1445
+ }
1446
+ const parsed = parseSkillBundle(await readFile(skillPath, "utf-8"), sanitizeSkillSlug(entry.name));
1447
+ if (!parsed) {
1448
+ skipped.push({ entry: entry.name, reason: "empty body" });
1449
+ continue;
1450
+ }
1451
+ const siblings = await readdir(bundleDir);
1452
+ bundles.push({
1453
+ ...parsed,
1454
+ hasUnimportedResources: siblings.some((name) => name !== SKILL_FILE_NAME)
1455
+ });
1456
+ } catch (err) {
1457
+ skipped.push({
1458
+ entry: entry.name,
1459
+ reason: `unreadable: ${err instanceof Error ? err.message : String(err)}`
1460
+ });
1461
+ }
1462
+ }
1463
+ return { bundles, skipped };
1464
+ }
1465
+ async function persistImportedSkills(options) {
1466
+ const imported = [];
1467
+ const rejected = [];
1468
+ for (const bundle of options.bundles) {
1469
+ const title = (bundle.description ?? bundle.name ?? bundle.slug).trim() || bundle.slug;
1470
+ const content = bundle.steps ? buildProcedurePersistBody(title, bundle.steps) : bundle.body;
1471
+ const envelope = composeMemoryEnvelope(
1472
+ {
1473
+ content,
1474
+ category: "procedure",
1475
+ tags: ["skill-import", "procedure"],
1476
+ structuredAttributes: {
1477
+ skill_slug: bundle.slug,
1478
+ // Basename only — never an operator's absolute path.
1479
+ skill_source: `${bundle.slug}/${SKILL_FILE_NAME}`,
1480
+ ...bundle.provenance.memoryId ? { skill_origin_memory_id: bundle.provenance.memoryId } : {},
1481
+ ...bundle.hasUnimportedResources ? { hasUnimportedResources: "true" } : {}
1482
+ }
1483
+ },
1484
+ { source: SKILL_IMPORT_SOURCE },
1485
+ // Machine-generated / externally authored input — salvage, warn on drops.
1486
+ { salvage: true }
1487
+ );
1488
+ if (envelope.salvageNotes.length > 0) {
1489
+ log.warn(`skill-import write salvaged invalid fields: ${envelope.salvageNotes.join("; ")}`);
1490
+ }
1491
+ const written = await options.storage.writeSealedMemory(envelope, { status: "pending_review" });
1492
+ if (written.tombstoneBlocked) {
1493
+ rejected.push({ slug: bundle.slug, reason: "blocked by a tombstone; left for review" });
1494
+ continue;
1495
+ }
1496
+ imported.push({
1497
+ slug: bundle.slug,
1498
+ memoryId: written.id,
1499
+ steps: bundle.steps?.length ?? 0,
1500
+ hasUnimportedResources: bundle.hasUnimportedResources
1501
+ });
1502
+ }
1503
+ return { imported, rejected };
1504
+ }
1505
+
1506
+ // src/cli/skills-commands.ts
1507
+ function parseMaxSkills(raw, fallback) {
1508
+ if (raw === void 0 || raw === null || raw === "") return fallback;
1509
+ const value = Number(raw);
1510
+ if (!Number.isInteger(value) || value < 0) {
1511
+ throw new Error(`Invalid --max-skills '${String(raw)}'. Expected a non-negative integer (0 exports nothing).`);
1512
+ }
1513
+ return value;
1514
+ }
1515
+ function registerSkillsCommands(exportCmd, importCmd, orchestrator) {
1516
+ exportCmd.command("skills").description(
1517
+ "Export active procedure memories as portable skills/<slug>/SKILL.md bundles (issue #2369). Read-only with respect to memory."
1518
+ ).option("--out <dir>", "Output directory (e.g. a host skills dir or a git repo)").option("--max-skills <n>", "Cap on exported bundles (0 exports none; default from config)").option("--namespace <ns>", "Namespace to export (default: config defaultNamespace)", "").action(async (...args) => {
1519
+ const options = args[0] ?? {};
1520
+ const out = options.out ? String(options.out) : "";
1521
+ if (!out) {
1522
+ console.error("Missing --out. Example: remnic export skills --out ./exported-skills");
1523
+ process.exitCode = 1;
1524
+ return;
1525
+ }
1526
+ if (orchestrator.config.procedural.enabled !== true) {
1527
+ console.error(
1528
+ "procedural memory is disabled (procedural.enabled=false); there are no procedure memories to export."
1529
+ );
1530
+ process.exitCode = 1;
1531
+ return;
1532
+ }
1533
+ let maxSkills;
1534
+ try {
1535
+ maxSkills = parseMaxSkills(options.maxSkills, orchestrator.config.procedural.skillProjection.maxSkills);
1536
+ } catch (err) {
1537
+ console.error(err instanceof Error ? err.message : String(err));
1538
+ process.exitCode = 1;
1539
+ return;
1540
+ }
1541
+ const namespace = options.namespace ? String(options.namespace) : "";
1542
+ const storage = await orchestrator.getStorageForNamespace(namespace || void 0);
1543
+ const bundles = projectProceduresToSkills(await storage.readAllMemories(), {
1544
+ maxSkills,
1545
+ reservedSlugs: BUILTIN_SKILLS.map((skill) => skill.slug)
1546
+ });
1547
+ const result = await exportSkillBundles({ bundles, outDir: expandTildePath(out) });
1548
+ console.log(`Exported ${result.slugs.length} skill bundle(s) to ${result.outDir}`);
1549
+ for (const slug of result.slugs) {
1550
+ console.log(` ${slug}/SKILL.md`);
1551
+ }
1552
+ console.log("OK");
1553
+ });
1554
+ importCmd.command("skills <dir>").description(
1555
+ "Import skills/<slug>/SKILL.md bundles as pending_review procedure memories (issue #2369). Never executes bundle scripts."
1556
+ ).option("--namespace <ns>", "Namespace to import into (default: config defaultNamespace)", "").action(async (...args) => {
1557
+ const dir = args[0] ? String(args[0]) : "";
1558
+ const options = args[1] ?? {};
1559
+ if (!dir) {
1560
+ console.error("Usage: remnic import skills <dir>");
1561
+ process.exitCode = 1;
1562
+ return;
1563
+ }
1564
+ if (orchestrator.config.procedural.enabled !== true) {
1565
+ console.error(
1566
+ "procedural memory is disabled (procedural.enabled=false); enable it before importing procedures."
1567
+ );
1568
+ process.exitCode = 1;
1569
+ return;
1570
+ }
1571
+ let read;
1572
+ try {
1573
+ read = await readSkillBundlesFromDir(expandTildePath(dir));
1574
+ } catch (err) {
1575
+ console.error(err instanceof Error ? err.message : String(err));
1576
+ process.exitCode = 1;
1577
+ return;
1578
+ }
1579
+ for (const skip of read.skipped) {
1580
+ console.log(`Skipped ${skip.entry}: ${skip.reason}`);
1581
+ }
1582
+ if (read.bundles.length === 0) {
1583
+ console.log("No SKILL.md bundles found.");
1584
+ console.log("OK");
1585
+ return;
1586
+ }
1587
+ const namespace = options.namespace ? String(options.namespace) : "";
1588
+ const storage = await orchestrator.getStorageForNamespace(namespace || void 0);
1589
+ const { imported, rejected } = await persistImportedSkills({ storage, bundles: read.bundles });
1590
+ await orchestrator.qmd.probe();
1591
+ if (orchestrator.qmd.isAvailable()) {
1592
+ await orchestrator.qmd.update();
1593
+ } else {
1594
+ console.log(`QMD unavailable in this process; skipped reindex. Status: ${orchestrator.qmd.debugStatus()}`);
1595
+ }
1596
+ console.log(`Imported ${imported.length} procedure(s) as pending_review (promote after review).`);
1597
+ for (const record of imported) {
1598
+ const resources = record.hasUnimportedResources ? " [has unimported resources]" : "";
1599
+ console.log(` ${record.slug}: ${record.steps} step(s)${resources}`);
1600
+ }
1601
+ for (const reject of rejected) {
1602
+ console.log(` ${reject.slug}: ${reject.reason}`);
1603
+ }
1604
+ console.log("OK");
1605
+ });
1606
+ }
1607
+
1354
1608
  // src/cli/harmonic-search.ts
1355
1609
  async function runHarmonicSearchCliCommand(options) {
1356
1610
  if (!options.harmonicRetrievalEnabled) return [];
@@ -1714,10 +1968,10 @@ function registerCreationLedgerCommands(cmd, orchestrator) {
1714
1968
  }
1715
1969
 
1716
1970
  // src/maintenance/rebuild-memory-lifecycle-ledger-cli.ts
1717
- import path3 from "path";
1971
+ import path4 from "path";
1718
1972
  async function runRebuildMemoryLifecycleLedgerCliCommand(options) {
1719
1973
  const storage = options.storage;
1720
- const ledgerPath = path3.join(options.memoryDir, "state", "memory-lifecycle-ledger.jsonl");
1974
+ const ledgerPath = path4.join(options.memoryDir, "state", "memory-lifecycle-ledger.jsonl");
1721
1975
  const encrypted = await probeEncryptedRegularFileHeader(ledgerPath);
1722
1976
  if (encrypted && !(storage?.isSecureStoreUnlocked() ?? false)) {
1723
1977
  throw new Error(
@@ -2214,8 +2468,8 @@ assistant> ${result.reply}
2214
2468
 
2215
2469
  // src/training-export/converter.ts
2216
2470
  import { constants } from "fs";
2217
- import { lstat, open, readdir, realpath } from "fs/promises";
2218
- import path4 from "path";
2471
+ import { lstat as lstat2, open, readdir as readdir2, realpath as realpath2 } from "fs/promises";
2472
+ import path5 from "path";
2219
2473
  function parseFrontmatter(raw) {
2220
2474
  const match = raw.match(/^---\n([\s\S]*?)\n---\n?([\s\S]*)$/);
2221
2475
  if (!match) return null;
@@ -2249,40 +2503,40 @@ function parseFrontmatter(raw) {
2249
2503
  }
2250
2504
  async function safeRealpath(p) {
2251
2505
  try {
2252
- return await realpath(p);
2506
+ return await realpath2(p);
2253
2507
  } catch {
2254
2508
  return null;
2255
2509
  }
2256
2510
  }
2257
2511
  function isContainedPath(real, containmentRoot) {
2258
- return real === containmentRoot || real.startsWith(containmentRoot + path4.sep);
2512
+ return real === containmentRoot || real.startsWith(containmentRoot + path5.sep);
2259
2513
  }
2260
2514
  async function collectMarkdownFiles(dir, containmentRoot) {
2261
2515
  const files = [];
2262
2516
  const walk = async (d) => {
2263
2517
  let dStat = null;
2264
2518
  try {
2265
- dStat = await lstat(d);
2519
+ dStat = await lstat2(d);
2266
2520
  } catch {
2267
2521
  return;
2268
2522
  }
2269
2523
  if (dStat.isSymbolicLink()) return;
2270
2524
  let entries;
2271
2525
  try {
2272
- entries = await readdir(d, { withFileTypes: true });
2526
+ entries = await readdir2(d, { withFileTypes: true });
2273
2527
  } catch {
2274
2528
  return;
2275
2529
  }
2276
2530
  const sorted = [...entries].sort((a, b) => a.name.localeCompare(b.name));
2277
2531
  for (const entry of sorted) {
2278
- const full = path4.join(d, entry.name);
2532
+ const full = path5.join(d, entry.name);
2279
2533
  if (entry.isSymbolicLink()) continue;
2280
2534
  if (entry.isDirectory()) {
2281
2535
  await walk(full);
2282
2536
  } else if (entry.isFile() && entry.name.endsWith(".md")) {
2283
2537
  let st = null;
2284
2538
  try {
2285
- st = await lstat(full);
2539
+ st = await lstat2(full);
2286
2540
  } catch {
2287
2541
  continue;
2288
2542
  }
@@ -2357,9 +2611,9 @@ async function convertMemoriesToRecords(options) {
2357
2611
  const { memoryDir } = options;
2358
2612
  const containmentRoot = await safeRealpath(memoryDir);
2359
2613
  if (!containmentRoot) return [];
2360
- const dirs = RECALL_FALLBACK_DIRS.map((dir) => path4.join(memoryDir, dir));
2614
+ const dirs = RECALL_FALLBACK_DIRS.map((dir) => path5.join(memoryDir, dir));
2361
2615
  if (options.includeEntities) {
2362
- dirs.push(path4.join(memoryDir, "entities"));
2616
+ dirs.push(path5.join(memoryDir, "entities"));
2363
2617
  }
2364
2618
  const allFiles = [];
2365
2619
  for (const dir of dirs) {
@@ -3367,7 +3621,7 @@ function policyVersionForValues(values, config) {
3367
3621
  return createHash("sha256").update(JSON.stringify(normalized)).digest("hex").slice(0, 12);
3368
3622
  }
3369
3623
  async function readRuntimePolicySnapshot2(config, fileName) {
3370
- const filePath = path5.join(config.memoryDir, "state", fileName);
3624
+ const filePath = path6.join(config.memoryDir, "state", fileName);
3371
3625
  const snapshot = await readRuntimePolicySnapshot(filePath, {
3372
3626
  maxStaleDecayThreshold: config.lifecycleArchiveDecayThreshold
3373
3627
  });
@@ -3972,7 +4226,7 @@ async function withTimeout(promise, timeoutMs, timeoutMessage) {
3972
4226
  }
3973
4227
  async function runReplayCliCommand(orchestrator, options) {
3974
4228
  const extractionIdleTimeoutMs = Number.isFinite(options.extractionIdleTimeoutMs) ? Math.max(1e3, Math.floor(options.extractionIdleTimeoutMs)) : 15 * 6e4;
3975
- const inputRaw = await readFile(options.inputPath, "utf-8");
4229
+ const inputRaw = await readFile2(options.inputPath, "utf-8");
3976
4230
  const registry = buildReplayNormalizerRegistry([
3977
4231
  openclawReplayNormalizer,
3978
4232
  claudeReplayNormalizer,
@@ -4064,7 +4318,7 @@ async function runBulkImportCliCommand(opts) {
4064
4318
  "Bulk import persistence is not wired: no ingestBatch callback was provided by the host CLI. Use --dry-run to validate without persisting, or invoke via `openclaw engram bulk-import` which supplies the orchestrator-backed ingestion path."
4065
4319
  );
4066
4320
  }
4067
- const inputRaw = await readFile(opts.file, "utf-8");
4321
+ const inputRaw = await readFile2(opts.file, "utf-8");
4068
4322
  let inputParsed;
4069
4323
  try {
4070
4324
  inputParsed = JSON.parse(inputRaw);
@@ -4128,7 +4382,7 @@ async function runBulkImportCliCommand(opts) {
4128
4382
  async function getPluginVersion() {
4129
4383
  try {
4130
4384
  const pkgPath = new URL("../package.json", import.meta.url);
4131
- const raw = await readFile(pkgPath, "utf-8");
4385
+ const raw = await readFile2(pkgPath, "utf-8");
4132
4386
  const parsed = JSON.parse(raw);
4133
4387
  return parsed.version ?? "unknown";
4134
4388
  } catch {
@@ -4144,7 +4398,7 @@ async function exists(p) {
4144
4398
  }
4145
4399
  }
4146
4400
  function assertSafeNamespaceSegment(namespace) {
4147
- if (namespace.length === 0 || namespace === "." || namespace === ".." || namespace.includes("/") || namespace.includes("\\") || path5.isAbsolute(namespace) || path5.win32.isAbsolute(namespace)) {
4401
+ if (namespace.length === 0 || namespace === "." || namespace === ".." || namespace.includes("/") || namespace.includes("\\") || path6.isAbsolute(namespace) || path6.win32.isAbsolute(namespace)) {
4148
4402
  throw new Error(`invalid namespace: ${namespace}`);
4149
4403
  }
4150
4404
  }
@@ -4167,7 +4421,7 @@ async function resolveMemoryDirForNamespace(orchestrator, namespace, options) {
4167
4421
  async function walkMemoryMarkdownFiles(memoryDir, visit) {
4168
4422
  let memoryRootReal;
4169
4423
  try {
4170
- memoryRootReal = await realpath2(memoryDir);
4424
+ memoryRootReal = await realpath3(memoryDir);
4171
4425
  } catch {
4172
4426
  return;
4173
4427
  }
@@ -4178,25 +4432,25 @@ async function walkMemoryMarkdownFiles(memoryDir, visit) {
4178
4432
  };
4179
4433
  const walk = async (dir) => {
4180
4434
  try {
4181
- const dirStat = await lstat2(dir);
4435
+ const dirStat = await lstat3(dir);
4182
4436
  if (dirStat.isSymbolicLink() || !dirStat.isDirectory()) return;
4183
- assertPathInsideRoot(memoryRootReal, await realpath2(dir), dir);
4437
+ assertPathInsideRoot(memoryRootReal, await realpath3(dir), dir);
4184
4438
  } catch (err) {
4185
4439
  skip(dir, err);
4186
4440
  return;
4187
4441
  }
4188
4442
  let entries;
4189
4443
  try {
4190
- entries = await readdir2(dir, { withFileTypes: true });
4444
+ entries = await readdir3(dir, { withFileTypes: true });
4191
4445
  } catch {
4192
4446
  return;
4193
4447
  }
4194
4448
  for (const entry of entries) {
4195
4449
  if (entry.isSymbolicLink()) continue;
4196
4450
  const entryName = typeof entry.name === "string" ? entry.name : entry.name.toString("utf-8");
4197
- const fullPath = path5.join(dir, entryName);
4451
+ const fullPath = path6.join(dir, entryName);
4198
4452
  try {
4199
- assertPathInsideRoot(memoryRootReal, await realpath2(fullPath), fullPath);
4453
+ assertPathInsideRoot(memoryRootReal, await realpath3(fullPath), fullPath);
4200
4454
  } catch (err) {
4201
4455
  skip(fullPath, err);
4202
4456
  continue;
@@ -4209,7 +4463,7 @@ async function walkMemoryMarkdownFiles(memoryDir, visit) {
4209
4463
  await visit(fullPath);
4210
4464
  }
4211
4465
  };
4212
- for (const root of RECALL_FALLBACK_DIRS.map((dir) => path5.join(memoryDir, dir))) {
4466
+ for (const root of RECALL_FALLBACK_DIRS.map((dir) => path6.join(memoryDir, dir))) {
4213
4467
  await walk(root);
4214
4468
  }
4215
4469
  }
@@ -4224,7 +4478,7 @@ async function readAllMemoryFiles(memoryDir) {
4224
4478
  const out = [];
4225
4479
  await walkMemoryMarkdownFiles(memoryDir, async (fullPath) => {
4226
4480
  try {
4227
- const raw = await readFile(fullPath, "utf-8");
4481
+ const raw = await readFile2(fullPath, "utf-8");
4228
4482
  const parsed = raw.match(/^---\n([\s\S]*?)\n---\n([\s\S]*)$/);
4229
4483
  if (!parsed) return;
4230
4484
  const fmRaw = parsed[1];
@@ -4819,7 +5073,7 @@ function registerCli(api, orchestrator, registerOptions = {}) {
4819
5073
  if (plan.moved.length > 0) {
4820
5074
  console.log("\nEntries:");
4821
5075
  for (const move of plan.moved) {
4822
- console.log(`- ${path5.basename(move.from)}`);
5076
+ console.log(`- ${path6.basename(move.from)}`);
4823
5077
  }
4824
5078
  }
4825
5079
  if (dryRun) {
@@ -4901,7 +5155,7 @@ function registerCli(api, orchestrator, registerOptions = {}) {
4901
5155
  console.log(formatNamespaceMaintenanceHealthText(summary));
4902
5156
  }
4903
5157
  });
4904
- cmd.command("export").description("Export Remnic memory to JSON, Markdown bundle, or SQLite").option("--format <format>", "Export format: json|md|sqlite", "json").option("--out <path>", "Output path (dir for json/md, file for sqlite)").option("--include-transcripts", "Include transcripts in export (default: false)").option("--namespace <ns>", "Namespace to export (v3.0+, default: config defaultNamespace)", "").action(async (...args) => {
5158
+ const exportCmd = cmd.command("export").description("Export Remnic memory to JSON, Markdown bundle, or SQLite").option("--format <format>", "Export format: json|md|sqlite", "json").option("--out <path>", "Output path (dir for json/md, file for sqlite)").option("--include-transcripts", "Include transcripts in export (default: false)").option("--namespace <ns>", "Namespace to export (v3.0+, default: config defaultNamespace)", "").action(async (...args) => {
4905
5159
  const options = args[0] ?? {};
4906
5160
  const format = String(options.format ?? "json");
4907
5161
  const out = options.out ? String(options.out) : "";
@@ -4944,7 +5198,7 @@ function registerCli(api, orchestrator, registerOptions = {}) {
4944
5198
  }
4945
5199
  console.log("OK");
4946
5200
  });
4947
- cmd.command("import").description("Import Remnic memory from JSON bundle, Markdown bundle, or SQLite").option("--from <path>", "Import source path (dir or file)").option("--format <format>", "Import format: auto|json|md|sqlite", "auto").option("--conflict <mode>", "Conflict policy: skip|overwrite|dedupe", "skip").option("--dry-run", "Validate import without writing files").option("--namespace <ns>", "Namespace to import into (v3.0+, default: config defaultNamespace)", "").action(async (...args) => {
5201
+ const importCmd = cmd.command("import").description("Import Remnic memory from JSON bundle, Markdown bundle, or SQLite").option("--from <path>", "Import source path (dir or file)").option("--format <format>", "Import format: auto|json|md|sqlite", "auto").option("--conflict <mode>", "Conflict policy: skip|overwrite|dedupe", "skip").option("--dry-run", "Validate import without writing files").option("--namespace <ns>", "Namespace to import into (v3.0+, default: config defaultNamespace)", "").action(async (...args) => {
4948
5202
  const options = args[0] ?? {};
4949
5203
  const from = options.from ? String(options.from) : "";
4950
5204
  const formatOpt = String(options.format ?? "auto");
@@ -4989,6 +5243,7 @@ function registerCli(api, orchestrator, registerOptions = {}) {
4989
5243
  }
4990
5244
  console.log("OK");
4991
5245
  });
5246
+ registerSkillsCommands(exportCmd, importCmd, orchestrator);
4992
5247
  cmd.command("backup").description("Create a timestamped backup of the Remnic memory directory").option("--out-dir <dir>", "Backup root directory").option("--retention-days <n>", "Delete backups older than N days", "0").option("--include-transcripts", "Include transcripts (default false)").option("--namespace <ns>", "Namespace to back up (v3.0+, default: config defaultNamespace)", "").option("--encrypt", "Encrypt the backup archive with the secure-store master key (must be unlocked)").action(async (...args) => {
4993
5248
  const options = args[0] ?? {};
4994
5249
  const outDir = options.outDir ? String(options.outDir) : "";
@@ -5118,15 +5373,15 @@ function registerCli(api, orchestrator, registerOptions = {}) {
5118
5373
  const capsulesDir = defaultCapsulesDir(memoryDir);
5119
5374
  const { stat: statMerge } = await import("fs/promises");
5120
5375
  let sourceArchive = expandTildePath(parsed.archive);
5121
- const looksLikePath = sourceArchive.startsWith("/") || sourceArchive.startsWith("./") || sourceArchive.startsWith("../") || sourceArchive.includes(path5.sep);
5376
+ const looksLikePath = sourceArchive.startsWith("/") || sourceArchive.startsWith("./") || sourceArchive.startsWith("../") || sourceArchive.includes(path6.sep);
5122
5377
  if (!looksLikePath) {
5123
- const cwdResolved = path5.resolve(sourceArchive);
5378
+ const cwdResolved = path6.resolve(sourceArchive);
5124
5379
  const cwdSt = await statMerge(cwdResolved).catch(() => null);
5125
5380
  if (cwdSt && cwdSt.isFile()) {
5126
5381
  sourceArchive = cwdResolved;
5127
5382
  } else {
5128
- const byId = path5.join(capsulesDir, `${sourceArchive}.capsule.json.gz`);
5129
- const byIdEnc = path5.join(capsulesDir, `${sourceArchive}.capsule.json.gz.enc`);
5383
+ const byId = path6.join(capsulesDir, `${sourceArchive}.capsule.json.gz`);
5384
+ const byIdEnc = path6.join(capsulesDir, `${sourceArchive}.capsule.json.gz.enc`);
5130
5385
  const stId = await statMerge(byId).catch(() => null);
5131
5386
  if (stId && stId.isFile()) {
5132
5387
  sourceArchive = byId;
@@ -5184,10 +5439,10 @@ function registerCli(api, orchestrator, registerOptions = {}) {
5184
5439
  const dirWasExplicit = typeof opts.dir === "string" && opts.dir.trim() !== "";
5185
5440
  const parsed = parseCapsuleListOptions(opts, defaultDir);
5186
5441
  const capsulesDir = expandTildePath(parsed.capsulesDir);
5187
- const { readdir: readdir3, readFile: readFile2, stat } = await import("fs/promises");
5442
+ const { readdir: readdir4, readFile: readFile3, stat } = await import("fs/promises");
5188
5443
  let dirEntries;
5189
5444
  try {
5190
- dirEntries = await readdir3(capsulesDir);
5445
+ dirEntries = await readdir4(capsulesDir);
5191
5446
  } catch (err) {
5192
5447
  const code = err.code;
5193
5448
  if (dirWasExplicit) {
@@ -5207,10 +5462,10 @@ function registerCli(api, orchestrator, registerOptions = {}) {
5207
5462
  ).sort();
5208
5463
  const entries = [];
5209
5464
  for (const archiveName of archives) {
5210
- const archivePath = path5.join(capsulesDir, archiveName);
5465
+ const archivePath = path6.join(capsulesDir, archiveName);
5211
5466
  const id = archiveName.replace(/\.capsule\.json\.gz\.enc$/, "").replace(/\.capsule\.json\.gz$/, "");
5212
5467
  const manifestName = `${id}.manifest.json`;
5213
- const manifestPath = path5.join(capsulesDir, manifestName);
5468
+ const manifestPath = path6.join(capsulesDir, manifestName);
5214
5469
  let createdAt = null;
5215
5470
  let pluginVersion = null;
5216
5471
  let fileCount = null;
@@ -5223,7 +5478,7 @@ function registerCli(api, orchestrator, registerOptions = {}) {
5223
5478
  }
5224
5479
  if (hasManifest) {
5225
5480
  try {
5226
- const raw = await readFile2(manifestPath, "utf-8");
5481
+ const raw = await readFile3(manifestPath, "utf-8");
5227
5482
  const sidecar = JSON.parse(raw);
5228
5483
  createdAt = typeof sidecar.createdAt === "string" ? sidecar.createdAt : null;
5229
5484
  pluginVersion = typeof sidecar.pluginVersion === "string" ? sidecar.pluginVersion : null;
@@ -5265,15 +5520,15 @@ function registerCli(api, orchestrator, registerOptions = {}) {
5265
5520
  const parsed = parseCapsuleInspectOptions(archiveArg, opts);
5266
5521
  const { stat } = await import("fs/promises");
5267
5522
  let archivePath = expandTildePath(parsed.archive);
5268
- const looksLikePath = archivePath.startsWith("/") || archivePath.startsWith("./") || archivePath.startsWith("../") || archivePath.includes(path5.sep);
5523
+ const looksLikePath = archivePath.startsWith("/") || archivePath.startsWith("./") || archivePath.startsWith("../") || archivePath.includes(path6.sep);
5269
5524
  if (!looksLikePath) {
5270
- const cwdResolved = path5.resolve(archivePath);
5525
+ const cwdResolved = path6.resolve(archivePath);
5271
5526
  const cwdSt = await stat(cwdResolved).catch(() => null);
5272
5527
  if (cwdSt && cwdSt.isFile()) {
5273
5528
  archivePath = cwdResolved;
5274
5529
  } else {
5275
- const byId = path5.join(capsulesDir, `${archivePath}.capsule.json.gz`);
5276
- const byIdEnc = path5.join(capsulesDir, `${archivePath}.capsule.json.gz.enc`);
5530
+ const byId = path6.join(capsulesDir, `${archivePath}.capsule.json.gz`);
5531
+ const byIdEnc = path6.join(capsulesDir, `${archivePath}.capsule.json.gz.enc`);
5277
5532
  const st = await stat(byId).catch(() => null);
5278
5533
  if (st && st.isFile()) {
5279
5534
  archivePath = byId;
@@ -5289,8 +5544,8 @@ function registerCli(api, orchestrator, registerOptions = {}) {
5289
5544
  const sidecarPath = archivePath.replace(/\.enc$/, "").replace(/\.capsule\.json\.gz$/, ".manifest.json");
5290
5545
  let sidecar = null;
5291
5546
  try {
5292
- const { readFile: readFile2 } = await import("fs/promises");
5293
- const raw = await readFile2(sidecarPath, "utf-8");
5547
+ const { readFile: readFile3 } = await import("fs/promises");
5548
+ const raw = await readFile3(sidecarPath, "utf-8");
5294
5549
  sidecar = JSON.parse(raw);
5295
5550
  } catch {
5296
5551
  }
@@ -5327,10 +5582,10 @@ function registerCli(api, orchestrator, registerOptions = {}) {
5327
5582
  }
5328
5583
  manifest = parsed2.bundle.manifest;
5329
5584
  } else {
5330
- const { readFile: readFile2 } = await import("fs/promises");
5585
+ const { readFile: readFile3 } = await import("fs/promises");
5331
5586
  const { gunzipSync } = await import("zlib");
5332
5587
  const { parseExportBundle } = await import("./transfer/types.js");
5333
- const buf = await readFile2(archivePath);
5588
+ const buf = await readFile3(archivePath);
5334
5589
  const json = gunzipSync(buf).toString("utf-8");
5335
5590
  const parsed2 = parseExportBundle(JSON.parse(json));
5336
5591
  if (parsed2.capsuleVersion !== 2) {
@@ -7264,7 +7519,7 @@ Semantic consolidation complete. clusters=${result.clustersFound}, consolidated=
7264
7519
  return;
7265
7520
  }
7266
7521
  const expandedTarget = expandTildePath(rawTarget);
7267
- const targetPath = path5.isAbsolute(expandedTarget) ? expandedTarget : path5.join(orchestrator.config.memoryDir, expandedTarget);
7522
+ const targetPath = path6.isAbsolute(expandedTarget) ? expandedTarget : path6.join(orchestrator.config.memoryDir, expandedTarget);
7268
7523
  const { runConsolidationUndo, formatConsolidationUndoResult } = await import("./consolidation-undo.js");
7269
7524
  const result = await runConsolidationUndo({
7270
7525
  storage: orchestrator.storage,
@@ -7302,7 +7557,7 @@ Semantic consolidation complete. clusters=${result.clustersFound}, consolidated=
7302
7557
  }
7303
7558
  });
7304
7559
  cmd.command("identity").description("Show agent identity reflections").action(async () => {
7305
- const workspaceDir = path5.join(resolveHomeDir(), ".openclaw", "workspace");
7560
+ const workspaceDir = path6.join(resolveHomeDir(), ".openclaw", "workspace");
7306
7561
  const identity = await orchestrator.storage.readIdentity(workspaceDir);
7307
7562
  if (!identity) {
7308
7563
  console.log("No identity file found.");
@@ -7525,8 +7780,8 @@ Semantic consolidation complete. clusters=${result.clustersFound}, consolidated=
7525
7780
  const options = args[0] ?? {};
7526
7781
  const threadId = options.thread;
7527
7782
  const top = parseInt(options.top ?? "10", 10);
7528
- const memoryDir = path5.join(resolveHomeDir(), ".openclaw", "workspace", "memory", "local");
7529
- const threading = new ThreadingManager(path5.join(memoryDir, "threads"));
7783
+ const memoryDir = path6.join(resolveHomeDir(), ".openclaw", "workspace", "memory", "local");
7784
+ const threading = new ThreadingManager(path6.join(memoryDir, "threads"));
7530
7785
  if (threadId) {
7531
7786
  const thread = await threading.loadThread(threadId);
7532
7787
  if (!thread) {
@@ -8444,6 +8699,9 @@ function parseDuration(duration) {
8444
8699
  export {
8445
8700
  INJECTION_SCREEN_THRESHOLD,
8446
8701
  screenCandidateFact,
8702
+ exportSkillBundles,
8703
+ readSkillBundlesFromDir,
8704
+ persistImportedSkills,
8447
8705
  auditMemoryStore,
8448
8706
  formatAuditMemoryReport,
8449
8707
  registerWearableConnector,
@@ -8553,4 +8811,4 @@ export {
8553
8811
  listMemoryMarkdownFilePaths,
8554
8812
  registerCli
8555
8813
  };
8556
- //# sourceMappingURL=chunk-7QOO4LGC.js.map
8814
+ //# sourceMappingURL=chunk-DPGH6LHQ.js.map