@remnic/core 9.65.3 → 9.65.4
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.
- package/dist/access-admin-ops-surface.d.ts +11 -11
- package/dist/access-admin-ops-surface.js +20 -18
- package/dist/access-authorization-probe.d.ts +11 -11
- package/dist/access-authorization-probe.js +21 -19
- package/dist/access-boundary.d.ts +11 -11
- package/dist/access-boundary.js +20 -18
- package/dist/access-cli.js +55 -53
- package/dist/access-cli.js.map +1 -1
- package/dist/access-coding-context-resolution.d.ts +1 -1
- package/dist/access-extraction-force-flush.d.ts +11 -11
- package/dist/access-extraction-force-flush.js +20 -18
- package/dist/access-health-types.d.ts +1 -1
- package/dist/access-http-lcm-compaction.d.ts +11 -11
- package/dist/access-http-lifecycle-flush.d.ts +11 -11
- package/dist/access-http-offline-stream.d.ts +11 -11
- package/dist/access-http-query.d.ts +2 -2
- package/dist/access-http-query.js +22 -20
- package/dist/access-http.d.ts +12 -12
- package/dist/access-http.js +31 -29
- package/dist/access-identity-continuity-surface.d.ts +9 -9
- package/dist/access-identity-continuity-surface.js +20 -18
- package/dist/access-lcm-surface.d.ts +11 -11
- package/dist/access-lcm-surface.js +20 -18
- package/dist/access-mcp.d.ts +11 -11
- package/dist/access-mcp.js +25 -23
- package/dist/access-memory-search-fanout.d.ts +2 -2
- package/dist/{access-namespace-preflight-B7Usyz-K.d.ts → access-namespace-preflight-D_6mo8ms.d.ts} +1 -1
- package/dist/access-namespace-preflight.d.ts +3 -3
- package/dist/access-namespace-preflight.js +20 -18
- package/dist/access-observe-write-surface.d.ts +11 -11
- package/dist/access-observe-write-surface.js +20 -18
- package/dist/access-offline-manifest.d.ts +9 -9
- package/dist/access-offline-manifest.js +3 -3
- package/dist/access-operations-batch.js +21 -19
- package/dist/access-operations.d.ts +11 -11
- package/dist/access-operations.js +24 -22
- package/dist/access-recall-concurrency.d.ts +11 -11
- package/dist/access-recall-concurrency.js +20 -18
- package/dist/access-recall-response.d.ts +11 -11
- package/dist/access-recall-response.js +20 -18
- package/dist/access-recall-surface.d.ts +11 -11
- package/dist/access-recall-surface.js +20 -18
- package/dist/{access-service-DkaIG3n8.d.ts → access-service-DqPa3hy4.d.ts} +7 -7
- package/dist/access-service-helpers.d.ts +11 -11
- package/dist/access-service.d.ts +11 -11
- package/dist/access-service.js +20 -18
- package/dist/access-surface-catalog.d.ts +11 -11
- package/dist/access-surface-catalog.js +22 -20
- package/dist/access-surface-catalog.js.map +1 -1
- package/dist/access-wearables-meetings-surface.d.ts +3 -3
- package/dist/action-confidence.d.ts +1 -1
- package/dist/active-memory-bridge.d.ts +1 -1
- package/dist/active-recall.d.ts +1 -1
- package/dist/active-recall.js +5 -1
- package/dist/active-recall.js.map +1 -1
- package/dist/ambient-provenance.d.ts +1 -1
- package/dist/artifact-search.d.ts +1 -1
- package/dist/{auto-sync-H64ZCNIR.js → auto-sync-XVMLL2RH.js} +5 -5
- package/dist/behavior-learner.d.ts +1 -1
- package/dist/behavior-signals.d.ts +1 -1
- package/dist/bootstrap.d.ts +9 -9
- package/dist/briefing-window.d.ts +2 -2
- package/dist/briefing.d.ts +2 -2
- package/dist/briefing.js +4 -4
- package/dist/buffer-surprise-report.d.ts +1 -1
- package/dist/buffer-turn-helpers.d.ts +1 -1
- package/dist/buffer.d.ts +2 -2
- package/dist/bulk-import/index.d.ts +3 -3
- package/dist/calibration.d.ts +1 -1
- package/dist/capabilities.d.ts +1 -1
- package/dist/{catalog-CX2BZEJh.d.ts → catalog-DO_7zfkv.d.ts} +1 -1
- package/dist/causal-behavior.d.ts +1 -1
- package/dist/causal-consolidation.d.ts +1 -1
- package/dist/causal-consolidation.js +9 -6
- package/dist/causal-consolidation.js.map +1 -1
- package/dist/causal-trajectory-graph.d.ts +1 -1
- package/dist/chunk-236PXYG7.js +232 -0
- package/dist/chunk-236PXYG7.js.map +1 -0
- package/dist/{chunk-IQSC3V2E.js → chunk-2IXQSGCU.js} +2 -2
- package/dist/{chunk-GUXS322H.js → chunk-2MVTAIL3.js} +2 -2
- package/dist/{chunk-7QOO4LGC.js → chunk-3JZBPTLD.js} +331 -73
- package/dist/chunk-3JZBPTLD.js.map +1 -0
- package/dist/{chunk-TDKSCV62.js → chunk-3NH3VP3U.js} +2 -2
- package/dist/{chunk-URHCUXKI.js → chunk-AXGFOFNY.js} +2 -2
- package/dist/{chunk-WN5FSGLE.js → chunk-AZLLH6YA.js} +19 -19
- package/dist/{chunk-D27J626P.js → chunk-BK5G2MHO.js} +2 -2
- package/dist/{chunk-DHTQP334.js → chunk-CQBIN77D.js} +2 -2
- package/dist/{chunk-6VALIZKG.js → chunk-DORFF5N5.js} +2 -2
- package/dist/{chunk-76PL4XLG.js → chunk-DPNXADEI.js} +7 -2
- package/dist/chunk-DPNXADEI.js.map +1 -0
- package/dist/{chunk-MRTUN665.js → chunk-DUEDOYZD.js} +2 -2
- package/dist/{chunk-QFMO32TO.js → chunk-DUZARALI.js} +3 -3
- package/dist/{chunk-7KFIMGMP.js → chunk-ECLJ4LA2.js} +2 -2
- package/dist/{chunk-PDVQ5JU3.js → chunk-GHD2LLG4.js} +2 -2
- package/dist/{chunk-RK4WXUI2.js → chunk-HF5BUTI6.js} +2 -2
- package/dist/{chunk-3DVBKTSO.js → chunk-HSZMX3ZJ.js} +4 -4
- package/dist/{chunk-EV3YFLCB.js → chunk-I23ZHYSL.js} +2 -2
- package/dist/{chunk-ODZG724P.js → chunk-I2HTKOOP.js} +2 -2
- package/dist/{chunk-AYYGRVRP.js → chunk-IURMJBGP.js} +2 -2
- package/dist/{chunk-TYUS5TLG.js → chunk-IWKGOCL6.js} +3 -3
- package/dist/{chunk-4XDGYCZI.js → chunk-J3ATBB7M.js} +2 -2
- package/dist/{chunk-E4MVQQVX.js → chunk-JPAKBNTM.js} +2 -2
- package/dist/{chunk-NZWEEALH.js → chunk-KFIOPZ25.js} +2 -2
- package/dist/{chunk-EIVIB73I.js → chunk-KOO37E4Y.js} +2 -2
- package/dist/{chunk-57HVIG5U.js → chunk-KPB2QHJZ.js} +2 -2
- package/dist/{chunk-NXKJHSDN.js → chunk-LBFFNDFM.js} +1 -1
- package/dist/chunk-LBFFNDFM.js.map +1 -0
- package/dist/{chunk-Z4RPXHJH.js → chunk-LYBIHM4N.js} +4 -4
- package/dist/{chunk-G57LQRP6.js → chunk-MFOSZUIT.js} +2 -2
- package/dist/{chunk-AUO2LJ3K.js → chunk-NLEH4RTB.js} +2 -2
- package/dist/{chunk-AYDDB3XI.js → chunk-OCCHUEZB.js} +2 -2
- package/dist/{chunk-6TAX66IA.js → chunk-OU34IQXV.js} +2 -2
- package/dist/{chunk-OJD4WS2E.js → chunk-OZDFB22S.js} +2 -2
- package/dist/{chunk-GN55KU2P.js → chunk-PTZQYCJ4.js} +2 -2
- package/dist/{chunk-BQUEAVNW.js → chunk-QJW4MZSW.js} +2 -2
- package/dist/{chunk-2VXWFYJE.js → chunk-R2MZCYA6.js} +3 -3
- package/dist/{chunk-VA5KMSAE.js → chunk-SR5LNI6Q.js} +3 -3
- package/dist/{chunk-LBWQ65SX.js → chunk-T42L3S6A.js} +4 -4
- package/dist/{chunk-PAYGC3BD.js → chunk-THVI4Y7X.js} +7 -7
- package/dist/{chunk-S7Q5CM7E.js → chunk-TJFI3K2O.js} +15 -3
- package/dist/chunk-TJFI3K2O.js.map +1 -0
- package/dist/{chunk-R47WINCY.js → chunk-UCKG36HO.js} +2 -2
- package/dist/{chunk-QXIQPCCN.js → chunk-UFR6HX7A.js} +1 -1
- package/dist/{chunk-CDUUDBWJ.js → chunk-VFYRYFLL.js} +2 -2
- package/dist/{chunk-P4DHENRE.js → chunk-WDXD6ITO.js} +2 -2
- package/dist/{chunk-BKYPJUQL.js → chunk-XGM3VQWG.js} +10 -10
- package/dist/{chunk-MBDJJTAT.js → chunk-YDKF4MSJ.js} +3 -3
- package/dist/{chunk-YF6UHWOV.js → chunk-YHGCT462.js} +3 -3
- package/dist/{chunk-AZAA5DNP.js → chunk-YOXVZJFM.js} +2 -2
- package/dist/{chunk-OLWTCWQ2.js → chunk-YZJM6CLF.js} +8 -8
- package/dist/chunk-ZCUTSMR2.js +61 -0
- package/dist/chunk-ZCUTSMR2.js.map +1 -0
- package/dist/{chunk-LUNJ3WFO.js → chunk-ZK4BFABK.js} +4 -4
- package/dist/{chunk-H5FW4S5Q.js → chunk-ZPOHEB5Z.js} +31 -31
- package/dist/{chunk-RDFF2NAU.js → chunk-ZXBTTMGZ.js} +184 -88
- package/dist/chunk-ZXBTTMGZ.js.map +1 -0
- package/dist/{cli-ChKeYMZv.d.ts → cli-DO3i14pM.d.ts} +5 -5
- package/dist/cli.d.ts +13 -13
- package/dist/cli.js +44 -42
- package/dist/coding/pre-action-gate.d.ts +1 -1
- package/dist/compounding/engine.d.ts +2 -2
- package/dist/compounding/engine.js +4 -4
- package/dist/compounding/preference-consolidator.d.ts +1 -1
- package/dist/compression-optimizer.d.ts +1 -1
- package/dist/config.d.ts +1 -1
- package/dist/config.js +5 -1
- package/dist/connectors/codex-materialize-runner.d.ts +1 -1
- package/dist/connectors/codex-materialize-runner.js +8 -5
- package/dist/connectors/codex-materialize.d.ts +14 -1
- package/dist/connectors/codex-materialize.js +10 -1
- package/dist/connectors/index.d.ts +1 -1
- package/dist/connectors/index.js +8 -5
- package/dist/consolidation-provenance-check.d.ts +2 -2
- package/dist/consolidation-undo.d.ts +2 -2
- package/dist/contradiction/index.d.ts +3 -3
- package/dist/contradiction/index.js +1 -1
- package/dist/converge-config.d.ts +1 -1
- package/dist/convergence-refresh.d.ts +2 -2
- package/dist/convergence-refresh.js +6 -6
- package/dist/conversation-index/backend.d.ts +1 -1
- package/dist/conversation-index/chunker.d.ts +1 -1
- package/dist/conversation-index/faiss-adapter.d.ts +1 -1
- package/dist/conversation-index/indexer.d.ts +1 -1
- package/dist/conversation-index/search.d.ts +1 -1
- package/dist/corpus-watermark.d.ts +1 -1
- package/dist/corpus-watermark.js +6 -6
- package/dist/cross-lingual-recall.d.ts +1 -1
- package/dist/day-summary.d.ts +1 -1
- package/dist/delinearize.d.ts +1 -1
- package/dist/dependency-propagation-config.d.ts +1 -1
- package/dist/{dependency-propagation-delivery-B8ZMBBCY.d.ts → dependency-propagation-delivery-D23_x-s5.d.ts} +1 -1
- package/dist/direct-answer-wiring.d.ts +1 -1
- package/dist/direct-answer.d.ts +1 -1
- package/dist/embedding-fallback.d.ts +1 -1
- package/dist/enrichment/index.d.ts +1 -1
- package/dist/entity-origin-fields.d.ts +1 -1
- package/dist/entity-retrieval.d.ts +2 -2
- package/dist/entity-retrieval.js +4 -4
- package/dist/entity-schema.d.ts +1 -1
- package/dist/episodic-context.d.ts +1 -1
- package/dist/explicit-capture.d.ts +9 -9
- package/dist/explicit-capture.js +1 -1
- package/dist/external-wiki-access.d.ts +11 -11
- package/dist/external-wiki-access.js +21 -19
- package/dist/external-wiki-collection-registration.d.ts +1 -1
- package/dist/external-wiki-collection.d.ts +1 -1
- package/dist/external-wiki-mcp-tools.d.ts +11 -11
- package/dist/extraction-error-classification.d.ts +1 -1
- package/dist/extraction-faithfulness.d.ts +1 -1
- package/dist/extraction-judge-telemetry.d.ts +1 -1
- package/dist/extraction-judge-training.d.ts +1 -1
- package/dist/extraction-judge.d.ts +1 -1
- package/dist/extraction-judge.js +2 -2
- package/dist/extraction-liveness.d.ts +1 -1
- package/dist/extraction-normalization.d.ts +1 -1
- package/dist/extraction-prompt.d.ts +1 -1
- package/dist/extraction-source-grounding-rules.d.ts +1 -1
- package/dist/extraction-source-grounding.d.ts +1 -1
- package/dist/extraction.d.ts +1 -1
- package/dist/extraction.js +9 -7
- package/dist/fallback-llm.d.ts +1 -1
- package/dist/graph-dashboard-diff.d.ts +1 -1
- package/dist/graph-dashboard-key.d.ts +1 -1
- package/dist/graph-dashboard-parser.d.ts +1 -1
- package/dist/graph-edge-reinforcement.d.ts +1 -1
- package/dist/graph-path-reconstruction.d.ts +1 -1
- package/dist/graph-path-scoring.d.ts +1 -1
- package/dist/graph-snapshot.d.ts +1 -1
- package/dist/graph.d.ts +1 -1
- package/dist/harmonic-retrieval.js +1 -1
- package/dist/importance.d.ts +1 -1
- package/dist/importers/index.d.ts +1 -1
- package/dist/in-flight-reads.d.ts +1 -1
- package/dist/{index-CexDrJzC.d.ts → index--QhGIXF2.d.ts} +2 -2
- package/dist/index.d.ts +87 -40
- package/dist/index.js +79 -58
- package/dist/intent.d.ts +1 -1
- package/dist/lcm/engine.d.ts +1 -1
- package/dist/lcm/index.d.ts +1 -1
- package/dist/lcm/tools.d.ts +1 -1
- package/dist/lifecycle.d.ts +1 -1
- package/dist/live-connectors-runner.d.ts +1 -1
- package/dist/local-llm.d.ts +1 -1
- package/dist/local-model-endpoint.d.ts +1 -1
- package/dist/maintenance/memory-governance.d.ts +1 -1
- package/dist/maintenance/memory-governance.js +4 -4
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +2 -2
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +4 -4
- package/dist/maintenance/rebuild-memory-projection.d.ts +2 -2
- package/dist/maintenance/rebuild-memory-projection.js +5 -5
- package/dist/{maintenance-nkdtSrVr.d.ts → maintenance-PFvY1Pw_.d.ts} +3 -3
- package/dist/mcp-memory-inspector-app.d.ts +11 -11
- package/dist/memory-action-policy.d.ts +1 -1
- package/dist/memory-cache.d.ts +1 -1
- package/dist/memory-lifecycle-ledger-utils.d.ts +1 -1
- package/dist/memory-projection-store.d.ts +1 -1
- package/dist/memory-provenance.d.ts +1 -1
- package/dist/memory-snapshot.d.ts +1 -1
- package/dist/memory-subject-cli.d.ts +11 -11
- package/dist/memory-subject.d.ts +11 -11
- package/dist/memory-worth-outcomes.d.ts +2 -2
- package/dist/models-json.d.ts +1 -1
- package/dist/namespaces/migrate.d.ts +3 -3
- package/dist/namespaces/migrate.js +5 -5
- package/dist/namespaces/principal.d.ts +1 -1
- package/dist/namespaces/search.d.ts +1 -1
- package/dist/namespaces/storage.d.ts +3 -3
- package/dist/namespaces/storage.js +4 -4
- package/dist/native-knowledge.d.ts +1 -1
- package/dist/offline-sync-impression-drain.d.ts +1 -1
- package/dist/operator-doctor-corpus.d.ts +1 -1
- package/dist/operator-doctor-corpus.js +7 -7
- package/dist/operator-doctor-replica.d.ts +1 -1
- package/dist/operator-toolkit.d.ts +3 -3
- package/dist/operator-toolkit.js +16 -13
- package/dist/orchestration/compression-guideline-coordinator.d.ts +2 -2
- package/dist/orchestration/maintenance.d.ts +4 -4
- package/dist/orchestration/maintenance.js +10 -10
- package/dist/{orchestrator-Bvq1-RQs.d.ts → orchestrator-4wzJrPVm.d.ts} +8 -8
- package/dist/orchestrator.d.ts +9 -9
- package/dist/orchestrator.js +55 -53
- package/dist/patterns-cli.d.ts +1 -1
- package/dist/{pipeline-C8vfIiTX.d.ts → pipeline-CgXgdIrF.d.ts} +1 -1
- package/dist/policy-runtime.d.ts +1 -1
- package/dist/proactive-contention.d.ts +1 -1
- package/dist/provenance.d.ts +1 -1
- package/dist/{public-http-Cy0aYbys.d.ts → public-http-DhIXYBYI.d.ts} +1 -1
- package/dist/{qmd-B9p1SZTZ.d.ts → qmd-BppGGxsi.d.ts} +1 -1
- package/dist/qmd-preflight.d.ts +2 -2
- package/dist/qmd-recall-cache.d.ts +1 -1
- package/dist/qmd.d.ts +2 -2
- package/dist/recall-concurrency-config.d.ts +1 -1
- package/dist/recall-disclosure-escalation.d.ts +1 -1
- package/dist/recall-explain-renderer.d.ts +1 -1
- package/dist/recall-explain-renderer.js +3 -3
- package/dist/recall-memory-map.d.ts +1 -1
- package/dist/recall-planner-llm.d.ts +1 -1
- package/dist/recall-state.d.ts +1 -1
- package/dist/recall-tag-filter.d.ts +1 -1
- package/dist/recall-timings.d.ts +1 -1
- package/dist/recall-xray-cli.d.ts +1 -1
- package/dist/recall-xray-cli.js +4 -4
- package/dist/recall-xray-renderer.d.ts +1 -1
- package/dist/recall-xray-renderer.js +3 -3
- package/dist/recall-xray.d.ts +1 -1
- package/dist/recall-xray.js +2 -2
- package/dist/reconcile/cursor.d.ts +1 -1
- package/dist/reconcile/manifest.d.ts +1 -1
- package/dist/reconcile/manifest.js +2 -2
- package/dist/reconcile/plan.d.ts +1 -1
- package/dist/replay/normalizers/chatgpt.d.ts +1 -1
- package/dist/replay/normalizers/claude.d.ts +1 -1
- package/dist/replay/normalizers/openclaw.d.ts +1 -1
- package/dist/replay/normalizers/shared.d.ts +1 -1
- package/dist/replay/runner.d.ts +1 -1
- package/dist/replay/types.d.ts +1 -1
- package/dist/replica-divergence.d.ts +1 -1
- package/dist/replica-peers-config.d.ts +1 -1
- package/dist/resolution-4552BNRV.js +1 -1
- package/dist/resolve-auth-token.d.ts +1 -1
- package/dist/resume-bundles.js +6 -2
- package/dist/retrieval-agents.d.ts +2 -2
- package/dist/retrieval-tiers.d.ts +1 -1
- package/dist/routing/engine.d.ts +1 -1
- package/dist/routing/store.d.ts +1 -1
- package/dist/salvage-envelope.d.ts +1 -1
- package/dist/salvage-envelope.js +1 -1
- package/dist/schemas.d.ts +12 -12
- package/dist/{scope-profiles-DLrRxFWR.d.ts → scope-profiles-ChZUtxDU.d.ts} +1 -1
- package/dist/search/embed-helper.d.ts +1 -1
- package/dist/search/factory.d.ts +1 -1
- package/dist/search/index.d.ts +1 -1
- package/dist/search/lancedb-backend.d.ts +1 -1
- package/dist/search/meilisearch-backend.d.ts +1 -1
- package/dist/search/noop-backend.d.ts +1 -1
- package/dist/search/orama-backend.d.ts +1 -1
- package/dist/search/port.d.ts +1 -1
- package/dist/search/remote-backend.d.ts +1 -1
- package/dist/{semantic-consolidation-DlN6xe20.d.ts → semantic-consolidation-mSPwQSmF.d.ts} +1 -1
- package/dist/semantic-consolidation.d.ts +2 -2
- package/dist/semantic-consolidation.js +9 -6
- package/dist/semantic-rule-promotion.js +4 -4
- package/dist/semantic-rule-verifier.d.ts +1 -1
- package/dist/semantic-rule-verifier.js +4 -4
- package/dist/{service-GkYyVfm9.d.ts → service-BICWLwSP.d.ts} +2 -2
- package/dist/session-observer-bands.d.ts +1 -1
- package/dist/session-observer-state.d.ts +1 -1
- package/dist/shared-context/manager.d.ts +1 -1
- package/dist/signal.d.ts +1 -1
- package/dist/skills-registry.js +4 -56
- package/dist/skills-registry.js.map +1 -1
- package/dist/source-agent-qualifier.d.ts +1 -1
- package/dist/source-agent-qualifier.js +8 -5
- package/dist/{storage-BIDzuKIn.d.ts → storage-B7urx1K3.d.ts} +1 -1
- package/dist/storage.d.ts +2 -2
- package/dist/storage.js +6 -6
- package/dist/subject-config.d.ts +1 -1
- package/dist/summarizer.d.ts +1 -1
- package/dist/summary-snapshot.d.ts +1 -1
- package/dist/support-passport/index.d.ts +14 -14
- package/dist/support-passport/index.js +23 -21
- package/dist/temporal-supersession.d.ts +2 -2
- package/dist/temporal-timeline-recall.d.ts +1 -1
- package/dist/temporal-validity.d.ts +1 -1
- package/dist/threading.d.ts +1 -1
- package/dist/tier-migration.d.ts +2 -2
- package/dist/tier-routing.d.ts +1 -1
- package/dist/topics.d.ts +1 -1
- package/dist/transcript.d.ts +1 -1
- package/dist/trust-score-stage.d.ts +1 -1
- package/dist/trust-score.d.ts +1 -1
- package/dist/{types-BxAcOl5Q.d.ts → types-ETU5N6nB.d.ts} +111 -4
- package/dist/types.d.ts +1 -1
- package/dist/types.js +1 -1
- package/dist/utility-runtime.d.ts +1 -1
- package/dist/verified-recall.js +4 -4
- package/dist/who-knows-cli.d.ts +11 -11
- package/dist/who-knows-cli.js +5 -5
- package/dist/who-knows.d.ts +11 -11
- package/dist/who-knows.js +4 -4
- package/dist/write-envelope.d.ts +1 -1
- package/dist/write-envelope.js +1 -1
- package/package.json +2 -2
- package/src/cli/skills-commands.ts +150 -0
- package/src/cli.ts +4 -2
- package/src/config.ts +4 -2
- package/src/connectors/codex-materialize-runner.ts +16 -0
- package/src/connectors/codex-materialize-skills.test.ts +141 -0
- package/src/connectors/codex-materialize.ts +58 -40
- package/src/connectors/materialize-paths.ts +50 -0
- package/src/connectors/materialize-skills.ts +127 -0
- package/src/index.ts +5 -10
- package/src/procedural/skill-io.test.ts +190 -0
- package/src/procedural/skill-io.ts +220 -0
- package/src/procedural/skill-projection.test.ts +214 -0
- package/src/procedural/skill-projection.ts +356 -0
- package/src/types.ts +2 -3
- package/dist/chunk-76PL4XLG.js.map +0 -1
- package/dist/chunk-7QOO4LGC.js.map +0 -1
- package/dist/chunk-NXKJHSDN.js.map +0 -1
- package/dist/chunk-RDFF2NAU.js.map +0 -1
- package/dist/chunk-S7Q5CM7E.js.map +0 -1
- /package/dist/{auto-sync-H64ZCNIR.js.map → auto-sync-XVMLL2RH.js.map} +0 -0
- /package/dist/{chunk-IQSC3V2E.js.map → chunk-2IXQSGCU.js.map} +0 -0
- /package/dist/{chunk-GUXS322H.js.map → chunk-2MVTAIL3.js.map} +0 -0
- /package/dist/{chunk-TDKSCV62.js.map → chunk-3NH3VP3U.js.map} +0 -0
- /package/dist/{chunk-URHCUXKI.js.map → chunk-AXGFOFNY.js.map} +0 -0
- /package/dist/{chunk-WN5FSGLE.js.map → chunk-AZLLH6YA.js.map} +0 -0
- /package/dist/{chunk-D27J626P.js.map → chunk-BK5G2MHO.js.map} +0 -0
- /package/dist/{chunk-DHTQP334.js.map → chunk-CQBIN77D.js.map} +0 -0
- /package/dist/{chunk-6VALIZKG.js.map → chunk-DORFF5N5.js.map} +0 -0
- /package/dist/{chunk-MRTUN665.js.map → chunk-DUEDOYZD.js.map} +0 -0
- /package/dist/{chunk-QFMO32TO.js.map → chunk-DUZARALI.js.map} +0 -0
- /package/dist/{chunk-7KFIMGMP.js.map → chunk-ECLJ4LA2.js.map} +0 -0
- /package/dist/{chunk-PDVQ5JU3.js.map → chunk-GHD2LLG4.js.map} +0 -0
- /package/dist/{chunk-RK4WXUI2.js.map → chunk-HF5BUTI6.js.map} +0 -0
- /package/dist/{chunk-3DVBKTSO.js.map → chunk-HSZMX3ZJ.js.map} +0 -0
- /package/dist/{chunk-EV3YFLCB.js.map → chunk-I23ZHYSL.js.map} +0 -0
- /package/dist/{chunk-ODZG724P.js.map → chunk-I2HTKOOP.js.map} +0 -0
- /package/dist/{chunk-AYYGRVRP.js.map → chunk-IURMJBGP.js.map} +0 -0
- /package/dist/{chunk-TYUS5TLG.js.map → chunk-IWKGOCL6.js.map} +0 -0
- /package/dist/{chunk-4XDGYCZI.js.map → chunk-J3ATBB7M.js.map} +0 -0
- /package/dist/{chunk-E4MVQQVX.js.map → chunk-JPAKBNTM.js.map} +0 -0
- /package/dist/{chunk-NZWEEALH.js.map → chunk-KFIOPZ25.js.map} +0 -0
- /package/dist/{chunk-EIVIB73I.js.map → chunk-KOO37E4Y.js.map} +0 -0
- /package/dist/{chunk-57HVIG5U.js.map → chunk-KPB2QHJZ.js.map} +0 -0
- /package/dist/{chunk-Z4RPXHJH.js.map → chunk-LYBIHM4N.js.map} +0 -0
- /package/dist/{chunk-G57LQRP6.js.map → chunk-MFOSZUIT.js.map} +0 -0
- /package/dist/{chunk-AUO2LJ3K.js.map → chunk-NLEH4RTB.js.map} +0 -0
- /package/dist/{chunk-AYDDB3XI.js.map → chunk-OCCHUEZB.js.map} +0 -0
- /package/dist/{chunk-6TAX66IA.js.map → chunk-OU34IQXV.js.map} +0 -0
- /package/dist/{chunk-OJD4WS2E.js.map → chunk-OZDFB22S.js.map} +0 -0
- /package/dist/{chunk-GN55KU2P.js.map → chunk-PTZQYCJ4.js.map} +0 -0
- /package/dist/{chunk-BQUEAVNW.js.map → chunk-QJW4MZSW.js.map} +0 -0
- /package/dist/{chunk-2VXWFYJE.js.map → chunk-R2MZCYA6.js.map} +0 -0
- /package/dist/{chunk-VA5KMSAE.js.map → chunk-SR5LNI6Q.js.map} +0 -0
- /package/dist/{chunk-LBWQ65SX.js.map → chunk-T42L3S6A.js.map} +0 -0
- /package/dist/{chunk-PAYGC3BD.js.map → chunk-THVI4Y7X.js.map} +0 -0
- /package/dist/{chunk-R47WINCY.js.map → chunk-UCKG36HO.js.map} +0 -0
- /package/dist/{chunk-QXIQPCCN.js.map → chunk-UFR6HX7A.js.map} +0 -0
- /package/dist/{chunk-CDUUDBWJ.js.map → chunk-VFYRYFLL.js.map} +0 -0
- /package/dist/{chunk-P4DHENRE.js.map → chunk-WDXD6ITO.js.map} +0 -0
- /package/dist/{chunk-BKYPJUQL.js.map → chunk-XGM3VQWG.js.map} +0 -0
- /package/dist/{chunk-MBDJJTAT.js.map → chunk-YDKF4MSJ.js.map} +0 -0
- /package/dist/{chunk-YF6UHWOV.js.map → chunk-YHGCT462.js.map} +0 -0
- /package/dist/{chunk-AZAA5DNP.js.map → chunk-YOXVZJFM.js.map} +0 -0
- /package/dist/{chunk-OLWTCWQ2.js.map → chunk-YZJM6CLF.js.map} +0 -0
- /package/dist/{chunk-LUNJ3WFO.js.map → chunk-ZK4BFABK.js.map} +0 -0
- /package/dist/{chunk-H5FW4S5Q.js.map → chunk-ZPOHEB5Z.js.map} +0 -0
|
@@ -57,7 +57,7 @@ import {
|
|
|
57
57
|
} from "./chunk-IIFFC3RL.js";
|
|
58
58
|
import {
|
|
59
59
|
rebuildMemoryLifecycleLedger
|
|
60
|
-
} from "./chunk-
|
|
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-
|
|
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-
|
|
89
|
+
} from "./chunk-J3ATBB7M.js";
|
|
90
90
|
import {
|
|
91
91
|
searchVerifiedSemanticRules
|
|
92
|
-
} from "./chunk-
|
|
92
|
+
} from "./chunk-OCCHUEZB.js";
|
|
93
93
|
import {
|
|
94
94
|
buildResumeBundleFromState,
|
|
95
95
|
getResumeBundleStatus,
|
|
96
96
|
recordResumeBundle
|
|
97
|
-
} from "./chunk-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
199
|
+
} from "./chunk-DPNXADEI.js";
|
|
200
200
|
import {
|
|
201
201
|
EngramAccessHttpServer,
|
|
202
202
|
MeetingsInputError
|
|
203
|
-
} from "./chunk-
|
|
203
|
+
} from "./chunk-XGM3VQWG.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-
|
|
213
|
+
} from "./chunk-SR5LNI6Q.js";
|
|
214
214
|
import {
|
|
215
215
|
getAbstractionNodeStoreStatus
|
|
216
216
|
} from "./chunk-DJUKBGAD.js";
|
|
217
217
|
import {
|
|
218
218
|
EngramAccessService
|
|
219
|
-
} from "./chunk-
|
|
219
|
+
} from "./chunk-AZLLH6YA.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-
|
|
236
|
+
} from "./chunk-YOXVZJFM.js";
|
|
237
237
|
import {
|
|
238
238
|
readAggregateExtractionWatermark
|
|
239
|
-
} from "./chunk-
|
|
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-
|
|
248
|
+
} from "./chunk-KOO37E4Y.js";
|
|
249
249
|
import {
|
|
250
250
|
listNamespaces,
|
|
251
251
|
runNamespaceMigration,
|
|
252
252
|
verifyNamespaces
|
|
253
|
-
} from "./chunk-
|
|
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-
|
|
259
|
+
} from "./chunk-TJFI3K2O.js";
|
|
260
260
|
import {
|
|
261
261
|
OKF_RESERVED_BASENAMES,
|
|
262
262
|
meetingIdDate,
|
|
263
263
|
okfTypeForCategory
|
|
264
|
-
} from "./chunk-
|
|
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-
|
|
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
|
|
353
|
-
import { access, lstat as
|
|
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
|
|
1971
|
+
import path4 from "path";
|
|
1718
1972
|
async function runRebuildMemoryLifecycleLedgerCliCommand(options) {
|
|
1719
1973
|
const storage = options.storage;
|
|
1720
|
-
const ledgerPath =
|
|
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
|
|
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
|
|
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 +
|
|
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
|
|
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
|
|
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 =
|
|
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
|
|
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) =>
|
|
2614
|
+
const dirs = RECALL_FALLBACK_DIRS.map((dir) => path5.join(memoryDir, dir));
|
|
2361
2615
|
if (options.includeEntities) {
|
|
2362
|
-
dirs.push(
|
|
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 =
|
|
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
|
|
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
|
|
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
|
|
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("\\") ||
|
|
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
|
|
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
|
|
4435
|
+
const dirStat = await lstat3(dir);
|
|
4182
4436
|
if (dirStat.isSymbolicLink() || !dirStat.isDirectory()) return;
|
|
4183
|
-
assertPathInsideRoot(memoryRootReal, await
|
|
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
|
|
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 =
|
|
4451
|
+
const fullPath = path6.join(dir, entryName);
|
|
4198
4452
|
try {
|
|
4199
|
-
assertPathInsideRoot(memoryRootReal, await
|
|
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) =>
|
|
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
|
|
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(`- ${
|
|
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(
|
|
5376
|
+
const looksLikePath = sourceArchive.startsWith("/") || sourceArchive.startsWith("./") || sourceArchive.startsWith("../") || sourceArchive.includes(path6.sep);
|
|
5122
5377
|
if (!looksLikePath) {
|
|
5123
|
-
const cwdResolved =
|
|
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 =
|
|
5129
|
-
const byIdEnc =
|
|
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:
|
|
5442
|
+
const { readdir: readdir4, readFile: readFile3, stat } = await import("fs/promises");
|
|
5188
5443
|
let dirEntries;
|
|
5189
5444
|
try {
|
|
5190
|
-
dirEntries = await
|
|
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 =
|
|
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 =
|
|
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
|
|
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(
|
|
5523
|
+
const looksLikePath = archivePath.startsWith("/") || archivePath.startsWith("./") || archivePath.startsWith("../") || archivePath.includes(path6.sep);
|
|
5269
5524
|
if (!looksLikePath) {
|
|
5270
|
-
const cwdResolved =
|
|
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 =
|
|
5276
|
-
const byIdEnc =
|
|
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:
|
|
5293
|
-
const raw = await
|
|
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:
|
|
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
|
|
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 =
|
|
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 =
|
|
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 =
|
|
7529
|
-
const threading = new ThreadingManager(
|
|
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-
|
|
8814
|
+
//# sourceMappingURL=chunk-3JZBPTLD.js.map
|