@remnic/core 9.52.2 → 9.54.0
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 +22 -22
- package/dist/access-authorization-probe.d.ts +11 -11
- package/dist/access-authorization-probe.js +23 -23
- package/dist/access-boundary.d.ts +11 -11
- package/dist/access-boundary.js +22 -22
- package/dist/access-cli.js +55 -55
- 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 +22 -22
- 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.js +22 -22
- package/dist/access-http.d.ts +11 -11
- package/dist/access-http.js +29 -29
- package/dist/access-identity-continuity-surface.d.ts +9 -9
- package/dist/access-identity-continuity-surface.js +22 -22
- package/dist/access-lcm-surface.d.ts +11 -11
- package/dist/access-lcm-surface.js +22 -22
- package/dist/access-mcp.d.ts +11 -11
- package/dist/access-mcp.js +27 -27
- package/dist/access-memory-search-fanout.d.ts +2 -2
- package/dist/{access-namespace-preflight-Ds6CGlCP.d.ts → access-namespace-preflight-C7n4tgWC.d.ts} +1 -1
- package/dist/access-namespace-preflight.d.ts +3 -3
- package/dist/access-namespace-preflight.js +22 -22
- package/dist/access-observe-write-surface.d.ts +11 -11
- package/dist/access-observe-write-surface.js +22 -22
- package/dist/access-offline-manifest.d.ts +9 -9
- package/dist/access-offline-manifest.js +8 -4
- package/dist/access-operations-batch.js +24 -24
- package/dist/access-operations.d.ts +14 -14
- package/dist/access-operations.js +26 -26
- package/dist/access-recall-concurrency.d.ts +11 -11
- package/dist/access-recall-concurrency.js +22 -22
- package/dist/access-recall-response.d.ts +11 -11
- package/dist/access-recall-response.js +22 -22
- package/dist/access-recall-surface.d.ts +11 -11
- package/dist/access-recall-surface.js +22 -22
- package/dist/access-schema.d.ts +88 -88
- package/dist/{access-service-Cbk3bNbD.d.ts → access-service-CXvbxLK-.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 +22 -22
- package/dist/access-surface-catalog.d.ts +11 -11
- 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 -5
- package/dist/ambient-provenance.d.ts +1 -1
- package/dist/artifact-search.d.ts +1 -1
- package/dist/{auto-sync-QFQGOEO2.js → auto-sync-TDHLZPVP.js} +7 -7
- 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.d.ts +2 -2
- package/dist/briefing.js +12 -12
- 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-D3B4RDy1.d.ts → catalog-BOOxl-I2.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 +13 -13
- package/dist/causal-trajectory-graph.d.ts +1 -1
- package/dist/{chunk-MLXZD4WM.js → chunk-2GFK22OZ.js} +2 -2
- package/dist/{chunk-RANKJI5T.js → chunk-3JLPGJ43.js} +2 -2
- package/dist/{chunk-O5FFBO2M.js → chunk-47P3RYZP.js} +70 -8
- package/dist/{chunk-O5FFBO2M.js.map → chunk-47P3RYZP.js.map} +1 -1
- package/dist/{chunk-X7XEDOSL.js → chunk-4IIFL7GC.js} +8 -8
- package/dist/chunk-5FVVY2EB.js +27 -0
- package/dist/chunk-5FVVY2EB.js.map +1 -0
- package/dist/{chunk-GXSOUIA4.js → chunk-5WQMORU5.js} +4 -4
- package/dist/{chunk-J272WKX2.js → chunk-6HPHEFXT.js} +2 -2
- package/dist/{chunk-B6LZ4IBH.js → chunk-6LAPLZOS.js} +2 -2
- package/dist/{chunk-WD5B5AIE.js → chunk-6R4G7N4S.js} +118 -173
- package/dist/chunk-6R4G7N4S.js.map +1 -0
- package/dist/{chunk-VXCNQYTC.js → chunk-APPFNGX6.js} +2 -2
- package/dist/{chunk-GXFSQ6SD.js → chunk-C4ZNGVK3.js} +2 -2
- package/dist/{chunk-JSEJH2YQ.js → chunk-CGVHPCP2.js} +2 -2
- package/dist/{chunk-BQIFZ2MP.js → chunk-CX5SW2EW.js} +41 -24
- package/dist/chunk-CX5SW2EW.js.map +1 -0
- package/dist/{chunk-RMHMUUBW.js → chunk-CYF6WVE7.js} +105 -49
- package/dist/{chunk-RMHMUUBW.js.map → chunk-CYF6WVE7.js.map} +1 -1
- package/dist/{chunk-TEMSWHQD.js → chunk-DZD576ZU.js} +5 -5
- package/dist/{chunk-AMTEYNYK.js → chunk-EVWWT3KE.js} +4 -4
- package/dist/{chunk-P2KBDJJ6.js → chunk-G2LUMAUF.js} +4 -3
- package/dist/{chunk-P2KBDJJ6.js.map → chunk-G2LUMAUF.js.map} +1 -1
- package/dist/{chunk-AXIDQG5A.js → chunk-G4T7L557.js} +5 -5
- package/dist/{chunk-7M6NYQWB.js → chunk-G7Z6EENO.js} +4 -4
- package/dist/{chunk-IARXXZU4.js → chunk-HOIRB77A.js} +99 -20
- package/dist/chunk-HOIRB77A.js.map +1 -0
- package/dist/{chunk-NDAH7BJ5.js → chunk-HVP33QVW.js} +103 -6
- package/dist/chunk-HVP33QVW.js.map +1 -0
- package/dist/{chunk-YXKVLYXU.js → chunk-HWRD23DW.js} +2 -2
- package/dist/{chunk-SOEN6KCF.js → chunk-IBKR2TFR.js} +2 -2
- package/dist/{chunk-R3DJVOSM.js → chunk-JDSVLVCG.js} +8 -1
- package/dist/chunk-JDSVLVCG.js.map +1 -0
- package/dist/{chunk-F4EU6VUC.js → chunk-JDZPNCMA.js} +2 -2
- package/dist/{chunk-D5YOZ66N.js → chunk-JV5YUBIZ.js} +20 -20
- package/dist/{chunk-DLG5V6ND.js → chunk-K4QS7LXU.js} +4 -7
- package/dist/chunk-K4QS7LXU.js.map +1 -0
- package/dist/{chunk-BAKXNQ3C.js → chunk-KRTY3ENI.js} +2 -2
- package/dist/{chunk-NK5RGJ65.js → chunk-L4DLLKPN.js} +2 -2
- package/dist/{chunk-VFSAWRMZ.js → chunk-LJS7KUPV.js} +2 -2
- package/dist/{chunk-JJRVPWFY.js → chunk-MLPTFODV.js} +166 -37
- package/dist/chunk-MLPTFODV.js.map +1 -0
- package/dist/{chunk-NOEMGE56.js → chunk-NH5IR2WM.js} +2 -2
- package/dist/{chunk-5V6IXHPI.js → chunk-NSVDUN76.js} +2 -2
- package/dist/{chunk-W7Y5JDVB.js → chunk-PDDTI7IC.js} +4 -4
- package/dist/{chunk-QINJITDS.js → chunk-PX2LSHYM.js} +2 -2
- package/dist/{chunk-HDIUYMSB.js → chunk-QWGE2PUH.js} +6 -6
- package/dist/{chunk-X57M2Q4I.js → chunk-RDJRFDJY.js} +3 -3
- package/dist/{chunk-RYLEDKQ2.js → chunk-RUMNY5DT.js} +3 -3
- package/dist/{chunk-BKIFTXHR.js → chunk-RZ4XGKOJ.js} +2 -2
- package/dist/{chunk-66SE3BNH.js → chunk-SUPEYLH2.js} +2 -2
- package/dist/{chunk-BF6SXNQJ.js → chunk-T2JHZWH6.js} +20 -20
- package/dist/{chunk-VHFXP27N.js → chunk-THPPCISA.js} +60 -23
- package/dist/chunk-THPPCISA.js.map +1 -0
- package/dist/{chunk-QPOHMO6M.js → chunk-UES4BHA2.js} +2 -2
- package/dist/{chunk-XAPMEU3K.js → chunk-UU7TRFNE.js} +2 -2
- package/dist/{chunk-QBSFOKY6.js → chunk-VOELBUS4.js} +4 -4
- package/dist/{chunk-2LY6GIIE.js → chunk-WDBX6VER.js} +2 -2
- package/dist/{chunk-BMEYMKWX.js → chunk-WM65LU67.js} +2 -2
- package/dist/{chunk-WLRD2TXF.js → chunk-WOPA3SGI.js} +4 -4
- package/dist/{chunk-5UZ6UCOZ.js → chunk-XUAMCLY4.js} +3 -3
- package/dist/{chunk-7HXZJAID.js → chunk-YGLY6QFV.js} +3 -3
- package/dist/{chunk-2OIQDTDC.js → chunk-ZPJ4QSGP.js} +2 -2
- package/dist/{chunk-3OY7KXHM.js → chunk-ZYLC7NFO.js} +3 -3
- package/dist/{cli-DMAFI0qt.d.ts → cli-DVUFIa5E.d.ts} +5 -5
- package/dist/cli.d.ts +13 -13
- package/dist/cli.js +42 -42
- package/dist/coding/pre-action-gate.d.ts +1 -1
- package/dist/compounding/engine.d.ts +2 -2
- package/dist/compounding/engine.js +13 -13
- 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 -5
- package/dist/connectors/codex-materialize-runner.d.ts +1 -1
- package/dist/connectors/codex-materialize-runner.js +12 -12
- package/dist/connectors/codex-materialize.d.ts +1 -1
- package/dist/connectors/index.d.ts +1 -1
- package/dist/connectors/index.js +12 -12
- package/dist/consolidation-provenance-check.d.ts +2 -2
- package/dist/consolidation-undo.d.ts +2 -2
- package/dist/content-hash.d.ts +12 -2
- package/dist/content-hash.js +9 -3
- package/dist/contradiction/index.d.ts +2 -2
- package/dist/contradiction/index.js +3 -3
- package/dist/converge-config.d.ts +1 -1
- package/dist/convergence-refresh.d.ts +2 -2
- package/dist/convergence-refresh.js +14 -14
- 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 +14 -14
- 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-D63r24pH.d.ts → dependency-propagation-delivery-XzF76C9n.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-retrieval.d.ts +2 -2
- package/dist/entity-retrieval.js +12 -12
- package/dist/entity-schema.d.ts +1 -1
- package/dist/explicit-capture.d.ts +9 -9
- package/dist/explicit-capture.js +8 -8
- package/dist/external-wiki-access.d.ts +11 -11
- package/dist/external-wiki-access.js +23 -23
- 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-liveness.d.ts +1 -1
- package/dist/extraction-normalization.d.ts +1 -1
- package/dist/extraction-normalization.js +2 -2
- 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-source-grounding.js +3 -3
- package/dist/extraction.d.ts +1 -1
- package/dist/extraction.js +16 -16
- package/dist/fallback-llm.d.ts +1 -1
- package/dist/{forget-HDS4N6CG.js → forget-EHGGJZLX.js} +3 -2
- package/dist/{forget-HDS4N6CG.js.map → forget-EHGGJZLX.js.map} +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-construction.js +2 -2
- package/dist/harmonic-retrieval.js +4 -4
- 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.d.ts +777 -705
- package/dist/index.js +77 -67
- 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 +12 -12
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +2 -2
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +12 -12
- package/dist/maintenance/rebuild-memory-projection.d.ts +2 -2
- package/dist/maintenance/rebuild-memory-projection.js +13 -13
- package/dist/{maintenance-kBII2qUI.d.ts → maintenance-BJzNIKBE.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-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 +13 -13
- 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 +12 -12
- 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 +15 -15
- package/dist/operator-doctor-replica.d.ts +1 -1
- package/dist/operator-toolkit.d.ts +3 -3
- package/dist/operator-toolkit.js +21 -21
- package/dist/orchestration/compression-guideline-coordinator.d.ts +2 -2
- package/dist/orchestration/maintenance.d.ts +4 -4
- package/dist/orchestration/maintenance.js +17 -17
- package/dist/{orchestrator-DHy5LtTy.d.ts → orchestrator-BiXgBJBQ.d.ts} +8 -8
- package/dist/orchestrator.d.ts +9 -9
- package/dist/orchestrator.js +55 -55
- package/dist/patterns-cli.d.ts +1 -1
- package/dist/{pipeline-D21Rs6gW.d.ts → pipeline-sz_dcuLg.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/provenance.js +2 -2
- package/dist/{qmd-Dhle1P4X.d.ts → qmd-eAWObK4M.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-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-renderer.d.ts +1 -1
- package/dist/recall-xray.d.ts +1 -1
- package/dist/reconcile/cursor.d.ts +1 -1
- package/dist/reconcile/manifest.d.ts +4 -2
- package/dist/reconcile/manifest.js +7 -3
- 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-MDPNOEG6.js → resolution-MMOD5WC4.js} +4 -4
- package/dist/resolve-auth-token.d.ts +1 -1
- package/dist/resume-bundles.js +6 -6
- 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 +3 -3
- package/dist/schemas.d.ts +138 -138
- package/dist/{scope-profiles-NzGPDXLn.d.ts → scope-profiles-BBQsXuyj.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-DLDKvyy5.d.ts → semantic-consolidation-HD8RkzVA.d.ts} +1 -1
- package/dist/semantic-consolidation.d.ts +2 -2
- package/dist/semantic-consolidation.js +13 -13
- package/dist/semantic-rule-promotion.js +12 -12
- package/dist/semantic-rule-verifier.d.ts +1 -1
- package/dist/semantic-rule-verifier.js +12 -12
- package/dist/{service-PT2_z7xm.d.ts → service-DIrtHHEg.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 +9 -9
- package/dist/signal.d.ts +1 -1
- package/dist/source-agent-qualifier.d.ts +1 -1
- package/dist/source-agent-qualifier.js +14 -14
- package/dist/{storage-BmVudhk4.d.ts → storage-DqCzXi56.d.ts} +37 -33
- package/dist/storage.d.ts +2 -2
- package/dist/storage.js +14 -14
- package/dist/structured-attributes.d.ts +3 -1
- package/dist/structured-attributes.js +3 -1
- package/dist/summarizer.d.ts +1 -1
- package/dist/summary-snapshot.d.ts +1 -1
- 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/transfer/types.d.ts +66 -66
- package/dist/trust-score-stage.d.ts +1 -1
- package/dist/trust-score.d.ts +1 -1
- package/dist/{types-CkiDUorT.d.ts → types-d_j4vC6N.d.ts} +26 -1
- package/dist/types.d.ts +1 -1
- package/dist/utility-runtime.d.ts +1 -1
- package/dist/verified-recall.js +12 -12
- package/dist/write-envelope.d.ts +1 -1
- package/dist/write-envelope.js +2 -2
- package/package.json +2 -2
- package/src/access-offline-manifest.ts +1 -0
- package/src/access-service-offline-file-content.test.ts +1 -0
- package/src/content-hash.ts +34 -1
- package/src/dedup/index.test.ts +56 -38
- package/src/dedup/index.ts +85 -38
- package/src/lifecycle/tombstones.test.ts +763 -16
- package/src/lifecycle/tombstones.ts +217 -50
- package/src/reconcile/manifest.test.ts +158 -1
- package/src/reconcile/manifest.ts +76 -22
- package/src/storage/content-hash-index.ts +56 -40
- package/src/storage/entity-ref-repair.ts +3 -3
- package/src/storage/memory-read-store.ts +9 -0
- package/src/storage/tombstone-blocked-capture-index.ts +4 -9
- package/src/storage-contract/content-hash.test.ts +13 -0
- package/src/storage-fact-hash-index-defer.test.ts +1 -1
- package/src/storage.ts +107 -93
- package/src/structured-attributes.ts +11 -0
- package/src/wearables/cleanup.test.ts +71 -0
- package/src/wearables/cleanup.ts +163 -16
- package/src/wearables/config.test.ts +62 -0
- package/src/wearables/config.ts +99 -5
- package/src/wearables/index.ts +10 -0
- package/src/wearables/pipeline.test.ts +36 -0
- package/src/wearables/pipeline.ts +18 -3
- package/src/wearables/redaction.test.ts +156 -0
- package/src/wearables/redaction.ts +102 -10
- package/src/wearables/text-language.ts +146 -0
- package/src/wearables/types.ts +26 -0
- package/dist/chunk-BQIFZ2MP.js.map +0 -1
- package/dist/chunk-DLG5V6ND.js.map +0 -1
- package/dist/chunk-IARXXZU4.js.map +0 -1
- package/dist/chunk-JJRVPWFY.js.map +0 -1
- package/dist/chunk-NDAH7BJ5.js.map +0 -1
- package/dist/chunk-R3DJVOSM.js.map +0 -1
- package/dist/chunk-VHFXP27N.js.map +0 -1
- package/dist/chunk-W5H6ZRPT.js +0 -14
- package/dist/chunk-W5H6ZRPT.js.map +0 -1
- package/dist/chunk-WD5B5AIE.js.map +0 -1
- /package/dist/{auto-sync-QFQGOEO2.js.map → auto-sync-TDHLZPVP.js.map} +0 -0
- /package/dist/{chunk-MLXZD4WM.js.map → chunk-2GFK22OZ.js.map} +0 -0
- /package/dist/{chunk-RANKJI5T.js.map → chunk-3JLPGJ43.js.map} +0 -0
- /package/dist/{chunk-X7XEDOSL.js.map → chunk-4IIFL7GC.js.map} +0 -0
- /package/dist/{chunk-GXSOUIA4.js.map → chunk-5WQMORU5.js.map} +0 -0
- /package/dist/{chunk-J272WKX2.js.map → chunk-6HPHEFXT.js.map} +0 -0
- /package/dist/{chunk-B6LZ4IBH.js.map → chunk-6LAPLZOS.js.map} +0 -0
- /package/dist/{chunk-VXCNQYTC.js.map → chunk-APPFNGX6.js.map} +0 -0
- /package/dist/{chunk-GXFSQ6SD.js.map → chunk-C4ZNGVK3.js.map} +0 -0
- /package/dist/{chunk-JSEJH2YQ.js.map → chunk-CGVHPCP2.js.map} +0 -0
- /package/dist/{chunk-TEMSWHQD.js.map → chunk-DZD576ZU.js.map} +0 -0
- /package/dist/{chunk-AMTEYNYK.js.map → chunk-EVWWT3KE.js.map} +0 -0
- /package/dist/{chunk-AXIDQG5A.js.map → chunk-G4T7L557.js.map} +0 -0
- /package/dist/{chunk-7M6NYQWB.js.map → chunk-G7Z6EENO.js.map} +0 -0
- /package/dist/{chunk-YXKVLYXU.js.map → chunk-HWRD23DW.js.map} +0 -0
- /package/dist/{chunk-SOEN6KCF.js.map → chunk-IBKR2TFR.js.map} +0 -0
- /package/dist/{chunk-F4EU6VUC.js.map → chunk-JDZPNCMA.js.map} +0 -0
- /package/dist/{chunk-D5YOZ66N.js.map → chunk-JV5YUBIZ.js.map} +0 -0
- /package/dist/{chunk-BAKXNQ3C.js.map → chunk-KRTY3ENI.js.map} +0 -0
- /package/dist/{chunk-NK5RGJ65.js.map → chunk-L4DLLKPN.js.map} +0 -0
- /package/dist/{chunk-VFSAWRMZ.js.map → chunk-LJS7KUPV.js.map} +0 -0
- /package/dist/{chunk-NOEMGE56.js.map → chunk-NH5IR2WM.js.map} +0 -0
- /package/dist/{chunk-5V6IXHPI.js.map → chunk-NSVDUN76.js.map} +0 -0
- /package/dist/{chunk-W7Y5JDVB.js.map → chunk-PDDTI7IC.js.map} +0 -0
- /package/dist/{chunk-QINJITDS.js.map → chunk-PX2LSHYM.js.map} +0 -0
- /package/dist/{chunk-HDIUYMSB.js.map → chunk-QWGE2PUH.js.map} +0 -0
- /package/dist/{chunk-X57M2Q4I.js.map → chunk-RDJRFDJY.js.map} +0 -0
- /package/dist/{chunk-RYLEDKQ2.js.map → chunk-RUMNY5DT.js.map} +0 -0
- /package/dist/{chunk-BKIFTXHR.js.map → chunk-RZ4XGKOJ.js.map} +0 -0
- /package/dist/{chunk-66SE3BNH.js.map → chunk-SUPEYLH2.js.map} +0 -0
- /package/dist/{chunk-BF6SXNQJ.js.map → chunk-T2JHZWH6.js.map} +0 -0
- /package/dist/{chunk-QPOHMO6M.js.map → chunk-UES4BHA2.js.map} +0 -0
- /package/dist/{chunk-XAPMEU3K.js.map → chunk-UU7TRFNE.js.map} +0 -0
- /package/dist/{chunk-QBSFOKY6.js.map → chunk-VOELBUS4.js.map} +0 -0
- /package/dist/{chunk-2LY6GIIE.js.map → chunk-WDBX6VER.js.map} +0 -0
- /package/dist/{chunk-BMEYMKWX.js.map → chunk-WM65LU67.js.map} +0 -0
- /package/dist/{chunk-WLRD2TXF.js.map → chunk-WOPA3SGI.js.map} +0 -0
- /package/dist/{chunk-5UZ6UCOZ.js.map → chunk-XUAMCLY4.js.map} +0 -0
- /package/dist/{chunk-7HXZJAID.js.map → chunk-YGLY6QFV.js.map} +0 -0
- /package/dist/{chunk-2OIQDTDC.js.map → chunk-ZPJ4QSGP.js.map} +0 -0
- /package/dist/{chunk-3OY7KXHM.js.map → chunk-ZYLC7NFO.js.map} +0 -0
- /package/dist/{resolution-MDPNOEG6.js.map → resolution-MMOD5WC4.js.map} +0 -0
|
@@ -814,6 +814,19 @@ interface WearableCorrectionRule {
|
|
|
814
814
|
*/
|
|
815
815
|
sources?: string[];
|
|
816
816
|
}
|
|
817
|
+
/**
|
|
818
|
+
* Off-the-record marker configuration (issue #2196). Matching is
|
|
819
|
+
* case-insensitive and phrase-level. Built-in phrases stay active
|
|
820
|
+
* unless `useBuiltIns` is false.
|
|
821
|
+
*/
|
|
822
|
+
interface OffTheRecordMarkerSettings {
|
|
823
|
+
/** Extra phrases that begin an off-the-record span. */
|
|
824
|
+
start: string[];
|
|
825
|
+
/** Extra phrases that end an off-the-record span. */
|
|
826
|
+
end: string[];
|
|
827
|
+
/** Include the built-in phrase lists. Default true. */
|
|
828
|
+
useBuiltIns: boolean;
|
|
829
|
+
}
|
|
817
830
|
/** Top-level wearables configuration (parsed). */
|
|
818
831
|
interface WearablesConfig {
|
|
819
832
|
/** Master gate for the whole subsystem. Default false. */
|
|
@@ -832,6 +845,18 @@ interface WearablesConfig {
|
|
|
832
845
|
* "back on the record" (or conversation end). Default false.
|
|
833
846
|
*/
|
|
834
847
|
offTheRecordEnabled: boolean;
|
|
848
|
+
/**
|
|
849
|
+
* Off-the-record marker phrases (issue #2196). Built-in phrases cover
|
|
850
|
+
* a documented set of languages; `start`/`end` add more, and
|
|
851
|
+
* `useBuiltIns: false` uses only the configured phrases.
|
|
852
|
+
*/
|
|
853
|
+
offTheRecordMarkers: OffTheRecordMarkerSettings;
|
|
854
|
+
/**
|
|
855
|
+
* Extra filler tokens removed when a source enables
|
|
856
|
+
* `cleanup.stripFillers`. Built-in tokens are selected per script; a
|
|
857
|
+
* language outside that set is configured here.
|
|
858
|
+
*/
|
|
859
|
+
fillerTokens: string[];
|
|
835
860
|
/**
|
|
836
861
|
* Write one compact daily-digest memory per synced source/day.
|
|
837
862
|
* Default false.
|
|
@@ -4706,4 +4731,4 @@ interface HourlySummary {
|
|
|
4706
4731
|
generatedAt: string;
|
|
4707
4732
|
}
|
|
4708
4733
|
|
|
4709
|
-
export { type ConvergeConflictPolicy as $, type AgentPersonaModelConfig as A, type BriefingSections as B, type CodingContext as C, type DreamsPhase as D, type EntityFile as E, type FaithfulnessFrontmatter as F, type GatewayConfig as G, type HourlySummary as H, type IdentityInjectionMode as I, type MemoryLifecycleEvent as J, type ProvenanceSource as K, type LiveConnectorsConfig as L, type MemoryFile as M, type TrustWeights as N, type ConversationThread as O, type PluginConfig as P, type QmdSearchResult as Q, type RecallPlanMode as R, type SessionObserverBandConfig as S, type TranscriptEntry as T, type LifecycleState as U, type VerificationState as V, type PolicyClass as W, type ReplicaPeersConfig as X, type ReplicaPeerConfig as Y, type ExtractionFailureClass as Z, type ImportanceLevel as _, type DreamsRunResult as a, type WearableNativeMemory as a$, type ActiveRecallChatType as a0, type ActiveRecallQueryMode as a1, type ActiveRecallPromptStyle as a2, type ActiveRecallThinking as a3, type ActiveRecallModelFallbackPolicy as a4, type ExtractionResult as a5, type BehaviorSignalEvent as a6, type BufferSurpriseEvent as a7, type ImportTurn as a8, type BulkImportOptions as a9, summarizeExtractionLiveness as aA, type RetrievalTier as aB, type SignalScanResult as aC, type TopicScore as aD, type ConsolidationResult as aE, type DaySummaryResult as aF, type QmdSearchExplain as aG, type ActivitySnapshot as aH, type ActivityConfig as aI, type ActivitySourceConfig as aJ, type ActivitySourceClient as aK, type FusedWearableConversation as aL, type FusedDayMeta as aM, type FusedDayFile as aN, type MeetingRecord as aO, type MeetingDetectionSource as aP, type FusedMeeting as aQ, type EntityTimelineEntry as aR, type MemoryLink as aS, type BufferState as aT, type FileHygieneConfig as aU, type EntityRelationship as aV, type EntityActivityEntry as aW, type AccessTrackingEntry as aX, type MemorySummary as aY, type WearableConversation as aZ, type WearableSourceSettings as a_, type BulkImportSource as aa, type BulkImportResult as ab, type CompressionGuidelineOptimizerEventCounts as ac, type CompressionGuidelineOptimizerActionSummary as ad, type CompressionGuidelineOptimizerRuleUpdate as ae, type MemoryActionType as af, type MemoryActionEvent as ag, type CompressionGuidelineOptimizerState as ah, type ConvergeConfig as ai, type EntityMention as aj, type DependencyPropagationConfig as ak, type EntitySchemaDefinition as al, type EntitySchemaSectionDefinition as am, type EntityStructuredSection as an, type ExtractedFact as ao, type ProvenanceConfig as ap, type ImportanceScore as aq, type MemoryIntent as ar, type MemoryActionEligibilityContext as as, type MemoryActionPolicyResult as at, type MemoryLifecycleEventType as au, type MemoryLifecycleStateSummary as av, type ModelProviderConfig as aw, type NativeKnowledgeConfig as ax, type ExtractionBufferSource as ay, type MetaState as az, type RecallTierExplain as b,
|
|
4734
|
+
export { type ConvergeConflictPolicy as $, type AgentPersonaModelConfig as A, type BriefingSections as B, type CodingContext as C, type DreamsPhase as D, type EntityFile as E, type FaithfulnessFrontmatter as F, type GatewayConfig as G, type HourlySummary as H, type IdentityInjectionMode as I, type MemoryLifecycleEvent as J, type ProvenanceSource as K, type LiveConnectorsConfig as L, type MemoryFile as M, type TrustWeights as N, type ConversationThread as O, type PluginConfig as P, type QmdSearchResult as Q, type RecallPlanMode as R, type SessionObserverBandConfig as S, type TranscriptEntry as T, type LifecycleState as U, type VerificationState as V, type PolicyClass as W, type ReplicaPeersConfig as X, type ReplicaPeerConfig as Y, type ExtractionFailureClass as Z, type ImportanceLevel as _, type DreamsRunResult as a, type WearableNativeMemory as a$, type ActiveRecallChatType as a0, type ActiveRecallQueryMode as a1, type ActiveRecallPromptStyle as a2, type ActiveRecallThinking as a3, type ActiveRecallModelFallbackPolicy as a4, type ExtractionResult as a5, type BehaviorSignalEvent as a6, type BufferSurpriseEvent as a7, type ImportTurn as a8, type BulkImportOptions as a9, summarizeExtractionLiveness as aA, type RetrievalTier as aB, type SignalScanResult as aC, type TopicScore as aD, type ConsolidationResult as aE, type DaySummaryResult as aF, type QmdSearchExplain as aG, type ActivitySnapshot as aH, type ActivityConfig as aI, type ActivitySourceConfig as aJ, type ActivitySourceClient as aK, type FusedWearableConversation as aL, type FusedDayMeta as aM, type FusedDayFile as aN, type MeetingRecord as aO, type MeetingDetectionSource as aP, type FusedMeeting as aQ, type EntityTimelineEntry as aR, type MemoryLink as aS, type BufferState as aT, type FileHygieneConfig as aU, type EntityRelationship as aV, type EntityActivityEntry as aW, type AccessTrackingEntry as aX, type MemorySummary as aY, type WearableConversation as aZ, type WearableSourceSettings as a_, type BulkImportSource as aa, type BulkImportResult as ab, type CompressionGuidelineOptimizerEventCounts as ac, type CompressionGuidelineOptimizerActionSummary as ad, type CompressionGuidelineOptimizerRuleUpdate as ae, type MemoryActionType as af, type MemoryActionEvent as ag, type CompressionGuidelineOptimizerState as ah, type ConvergeConfig as ai, type EntityMention as aj, type DependencyPropagationConfig as ak, type EntitySchemaDefinition as al, type EntitySchemaSectionDefinition as am, type EntityStructuredSection as an, type ExtractedFact as ao, type ProvenanceConfig as ap, type ImportanceScore as aq, type MemoryIntent as ar, type MemoryActionEligibilityContext as as, type MemoryActionPolicyResult as at, type MemoryLifecycleEventType as au, type MemoryLifecycleStateSummary as av, type ModelProviderConfig as aw, type NativeKnowledgeConfig as ax, type ExtractionBufferSource as ay, type MetaState as az, type RecallTierExplain as b, isImportRole as b$, type WearableMemoryMode as b0, type WearableSourceConnector as b1, type WearablesConfig as b2, type WearableSyncSummary as b3, type WearableSourceStatus as b4, type WearableDayTranscript as b5, type WearableCorrectionRule as b6, type MeetingBuildInput as b7, type MeetingsConfig as b8, type MeetingsDetectionInput as b9, type ActivityExtractionMode as bA, type BriefingConfig as bB, type BriefingOpenCommitment as bC, type BriefingWindow as bD, type BulkImportError as bE, type BulkImportSourceAdapter as bF, type CodexCompatConfig as bG, DEFAULT_RECALL_DISCLOSURE as bH, type DisagreementKind as bI, type FusedContribution as bJ, type FusedConversationProvenance as bK, type FusedSegmentProvenance as bL, type FusionSegmentInput as bM, type ImportSourceRole as bN, type ImportTurnValidationIssue as bO, type MeetingScreenContextEvent as bP, type MeetingSummaryMode as bQ, type MemoryActionEligibilitySource as bR, type MemoryObservation as bS, type MemoryScope as bT, RECALL_DISCLOSURE_LEVELS as bU, type SegmentPickReason as bV, type WearableAuthCheck as bW, type WearableFetchOptions as bX, type WearableFetchPage as bY, type WearableNativeMemoryPage as bZ, type WearableTranscriptSegment as b_, type FusionConversationInput as ba, type MeetingActivitySnapshot as bb, type DetectedMeeting as bc, type DreamsStatusResult as bd, type RecallSectionConfig as be, type BootstrapOptions as bf, type BootstrapResult as bg, type ConsolidationObservation as bh, type CodingModeConfig as bi, type FusedSpeaker as bj, type FusedSegment as bk, type FusedDisagreement as bl, type FusionOptions as bm, type FusionDayResult as bn, type CodingKnowledgeConfig as bo, type WearableCleanupSettings as bp, type WearableFusionConfig as bq, type OffTheRecordMarkerSettings as br, type WearableDayTranscriptMeta as bs, type ActivityDayMeta as bt, type ActivityDayDigest as bu, type ActivitySourceCheck as bv, type ActivitySnapshotPage as bw, type MeetingsDetectionConfig as bx, type MeetingAudioWindow as by, type MeetingAppSpan as bz, type BriefingFollowup as c, type GitHubLiveConnectorConfig as c$, isRecallDisclosure as c0, parseIsoTimestamp as c1, validateImportTurn as c2, type ExtractionLivenessConfig as c3, ExtractionLivenessWarnThrottle as c4, type ExtractionRootStats as c5, type ExtractionWatermarkOrStorage as c6, type ExtractionWatermarkRead as c7, coerceExtractionWatermark as c8, computeExtractionLivenessStatus as c9, type BufferEntryState as cA, type ChatConfig as cB, type CodexCliReasoningEffort as cC, type CodexCompactionFlushMode as cD, type CodexConnectorConfig as cE, type CodingGraphLspConfig as cF, type CompressionGuidelineActivationState as cG, type CompressionGuidelineOptimizerSourceWindow as cH, type ConfidenceTier as cI, type ConsolidationAction as cJ, type ConsolidationItem as cK, type CronConversationRecallMode as cL, type CronRecallMode as cM, type DreamingConfig as cN, type DreamingNarrativePromptStyle as cO, type DreamsDeepSleepConfig as cP, type DreamsLightSleepConfig as cQ, type DreamsPhaseStatus as cR, type DreamsPhasesConfig as cS, type DreamsRemConfig as cT, type EngramTraceEvent as cU, type ExtractedProcedureStep as cV, type ExtractedQuestion as cW, type ExtractedReasoningTrace as cX, type ExtractedReasoningTraceStep as cY, type ExtractedRelationship as cZ, type ExtractionPassSource as c_, evaluateExtractionLiveness as ca, formatAgeMs as cb, gatherExtractionLivenessStatus as cc, parseExtractionLivenessConfig as cd, renderExtractionLivenessStats as ce, resolveExtractionLivenessConfig as cf, parseReplicaPeersConfig as cg, resolveReplicaPeersConfig as ch, type AmbientCaptureProvenance as ci, type BufferTurnOwner as cj, ProbeTimeoutError as ck, bufferTurnArrayIsSuffixOfSnapshot as cl, bufferTurnArraysEqual as cm, bufferTurnsEqual as cn, copyBufferTurn as co, describeError as cp, liveTurnsFromExtractionSnapshot as cq, matchingQueuedExtractionPrefixLength as cr, probeWithTimeout as cs, type AgentAccessHttpConfig as ct, type AgentDefaultsConfig as cu, type AgentPersona as cv, type BehaviorLoopAdjustment as cw, type BehaviorSignalDirection as cx, type BehaviorSignalType as cy, type BriefingCalendarSourceError as cz, type BriefingFocus as d, type GmailLiveConnectorConfig as d0, type GoogleDriveLiveConnectorConfig as d1, type HeartbeatConfig as d2, type HeartbeatDetectionMode as d3, type LlmTraceCallback as d4, type LlmTraceEvent as d5, type MemoryActionOutcome as d6, type MemoryActionPolicyDecision as d7, type MemoryActionStatus as d8, type MemoryLinkType as d9, type SlotMismatchMode as dA, type TriggerMode as dB, confidenceTier as dC, type MemoryOsPresetName as da, type ModelApi as db, type ModelDefinitionConfig as dc, type ModelProviderAuthMode as dd, type NamespacePolicy as de, type NativeKnowledgeFolderRuleConfig as df, type NativeKnowledgeObsidianVaultConfig as dg, type NativeKnowledgeOpenClawWorkspaceConfig as dh, type NotionLiveConnectorConfig as di, type PrincipalFromSessionKeyMode as dj, type PrincipalRule as dk, type ProceduralConfig as dl, type QuestionEntry as dm, type ReasoningEffort as dn, type RecallPipelineConfig as dp, type RecallTraceEvent as dq, type RelevanceFeedback as dr, SPECULATIVE_TTL_DAYS as ds, type ScopeProfileAutoPromoteConfig as dt, type ScopeProfileTeamProjectConfig as du, type ScopeTeamConfig as dv, type ScoredEntity as dw, type SemanticChunkingConfigShape as dx, type SignalLevel as dy, type SlotBehaviorConfig as dz, type CalendarSource as e, type CalendarEvent as f, type BriefingActiveThread as g, type BriefingResult as h, type BriefingRecentEntity as i, type BufferTurn as j, type ExtractionBufferSnapshot as k, type MemoryFrontmatter as l, type Checkpoint as m, type RecallDisclosure as n, type SourceConnectorProvenance as o, type ScopeProfileConfig as p, type ScopeProfileLayerId as q, type ScopeProfilePromotionTarget as r, type BehaviorLoopPolicyState as s, type SecretRef as t, type AgentAccessAuthToken as u, type ExtractionLivenessStatus as v, type MemoryCategory as w, type CaptureMode as x, type MemoryStatus as y, type MemoryProjectionCurrentState as z };
|
package/dist/types.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { aX as AccessTrackingEntry, a0 as ActiveRecallChatType, a4 as ActiveRecallModelFallbackPolicy, a2 as ActiveRecallPromptStyle, a1 as ActiveRecallQueryMode, a3 as ActiveRecallThinking, u as AgentAccessAuthToken,
|
|
1
|
+
export { aX as AccessTrackingEntry, a0 as ActiveRecallChatType, a4 as ActiveRecallModelFallbackPolicy, a2 as ActiveRecallPromptStyle, a1 as ActiveRecallQueryMode, a3 as ActiveRecallThinking, u as AgentAccessAuthToken, ct as AgentAccessHttpConfig, cu as AgentDefaultsConfig, cv as AgentPersona, A as AgentPersonaModelConfig, cw as BehaviorLoopAdjustment, s as BehaviorLoopPolicyState, cx as BehaviorSignalDirection, a6 as BehaviorSignalEvent, cy as BehaviorSignalType, bf as BootstrapOptions, bg as BootstrapResult, g as BriefingActiveThread, cz as BriefingCalendarSourceError, bB as BriefingConfig, d as BriefingFocus, c as BriefingFollowup, bC as BriefingOpenCommitment, i as BriefingRecentEntity, h as BriefingResult, B as BriefingSections, bD as BriefingWindow, cA as BufferEntryState, aT as BufferState, a7 as BufferSurpriseEvent, j as BufferTurn, f as CalendarEvent, e as CalendarSource, x as CaptureMode, cB as ChatConfig, m as Checkpoint, cC as CodexCliReasoningEffort, cD as CodexCompactionFlushMode, bG as CodexCompatConfig, cE as CodexConnectorConfig, C as CodingContext, cF as CodingGraphLspConfig, bo as CodingKnowledgeConfig, bi as CodingModeConfig, cG as CompressionGuidelineActivationState, ad as CompressionGuidelineOptimizerActionSummary, ac as CompressionGuidelineOptimizerEventCounts, ae as CompressionGuidelineOptimizerRuleUpdate, cH as CompressionGuidelineOptimizerSourceWindow, ah as CompressionGuidelineOptimizerState, cI as ConfidenceTier, cJ as ConsolidationAction, cK as ConsolidationItem, bh as ConsolidationObservation, aE as ConsolidationResult, ai as ConvergeConfig, $ as ConvergeConflictPolicy, O as ConversationThread, cL as CronConversationRecallMode, cM as CronRecallMode, bH as DEFAULT_RECALL_DISCLOSURE, aF as DaySummaryResult, ak as DependencyPropagationConfig, cN as DreamingConfig, cO as DreamingNarrativePromptStyle, cP as DreamsDeepSleepConfig, cQ as DreamsLightSleepConfig, D as DreamsPhase, cR as DreamsPhaseStatus, cS as DreamsPhasesConfig, cT as DreamsRemConfig, a as DreamsRunResult, bd as DreamsStatusResult, cU as EngramTraceEvent, aW as EntityActivityEntry, E as EntityFile, aj as EntityMention, aV as EntityRelationship, al as EntitySchemaDefinition, am as EntitySchemaSectionDefinition, an as EntityStructuredSection, aR as EntityTimelineEntry, ao as ExtractedFact, cV as ExtractedProcedureStep, cW as ExtractedQuestion, cX as ExtractedReasoningTrace, cY as ExtractedReasoningTraceStep, cZ as ExtractedRelationship, Z as ExtractionFailureClass, c_ as ExtractionPassSource, a5 as ExtractionResult, F as FaithfulnessFrontmatter, aU as FileHygieneConfig, G as GatewayConfig, c$ as GitHubLiveConnectorConfig, d0 as GmailLiveConnectorConfig, d1 as GoogleDriveLiveConnectorConfig, d2 as HeartbeatConfig, d3 as HeartbeatDetectionMode, H as HourlySummary, I as IdentityInjectionMode, _ as ImportanceLevel, aq as ImportanceScore, U as LifecycleState, L as LiveConnectorsConfig, d4 as LlmTraceCallback, d5 as LlmTraceEvent, as as MemoryActionEligibilityContext, bR as MemoryActionEligibilitySource, ag as MemoryActionEvent, d6 as MemoryActionOutcome, d7 as MemoryActionPolicyDecision, at as MemoryActionPolicyResult, d8 as MemoryActionStatus, af as MemoryActionType, w as MemoryCategory, M as MemoryFile, l as MemoryFrontmatter, ar as MemoryIntent, J as MemoryLifecycleEvent, au as MemoryLifecycleEventType, av as MemoryLifecycleStateSummary, aS as MemoryLink, d9 as MemoryLinkType, bS as MemoryObservation, da as MemoryOsPresetName, z as MemoryProjectionCurrentState, bT as MemoryScope, y as MemoryStatus, aY as MemorySummary, az as MetaState, db as ModelApi, dc as ModelDefinitionConfig, dd as ModelProviderAuthMode, aw as ModelProviderConfig, de as NamespacePolicy, ax as NativeKnowledgeConfig, df as NativeKnowledgeFolderRuleConfig, dg as NativeKnowledgeObsidianVaultConfig, dh as NativeKnowledgeOpenClawWorkspaceConfig, di as NotionLiveConnectorConfig, P as PluginConfig, W as PolicyClass, dj as PrincipalFromSessionKeyMode, dk as PrincipalRule, dl as ProceduralConfig, ap as ProvenanceConfig, K as ProvenanceSource, aG as QmdSearchExplain, Q as QmdSearchResult, dm as QuestionEntry, bU as RECALL_DISCLOSURE_LEVELS, dn as ReasoningEffort, n as RecallDisclosure, dp as RecallPipelineConfig, R as RecallPlanMode, be as RecallSectionConfig, b as RecallTierExplain, dq as RecallTraceEvent, dr as RelevanceFeedback, aB as RetrievalTier, ds as SPECULATIVE_TTL_DAYS, dt as ScopeProfileAutoPromoteConfig, p as ScopeProfileConfig, q as ScopeProfileLayerId, r as ScopeProfilePromotionTarget, du as ScopeProfileTeamProjectConfig, dv as ScopeTeamConfig, dw as ScoredEntity, t as SecretRef, dx as SemanticChunkingConfigShape, S as SessionObserverBandConfig, dy as SignalLevel, aC as SignalScanResult, dz as SlotBehaviorConfig, dA as SlotMismatchMode, o as SourceConnectorProvenance, aD as TopicScore, T as TranscriptEntry, dB as TriggerMode, N as TrustWeights, V as VerificationState, dC as confidenceTier, c0 as isRecallDisclosure } from './types-d_j4vC6N.js';
|
|
2
2
|
import './message-parts/index.js';
|
|
3
3
|
import './bounded-jsonl-state.js';
|
|
4
4
|
import './external-wiki-config.js';
|
package/dist/verified-recall.js
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
2
|
compareVerifiedEpisodeResults,
|
|
3
3
|
searchVerifiedEpisodes
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-6HPHEFXT.js";
|
|
5
5
|
import "./chunk-B7RWBZXW.js";
|
|
6
|
-
import "./chunk-
|
|
6
|
+
import "./chunk-6R4G7N4S.js";
|
|
7
7
|
import "./chunk-UHVXE24Y.js";
|
|
8
|
-
import "./chunk-
|
|
8
|
+
import "./chunk-MLPTFODV.js";
|
|
9
9
|
import "./chunk-SXIMQLGV.js";
|
|
10
10
|
import "./chunk-S2V7RUCL.js";
|
|
11
|
-
import "./chunk-J6A3CX5N.js";
|
|
12
11
|
import "./chunk-UU3G6GUP.js";
|
|
13
12
|
import "./chunk-SCU65EZI.js";
|
|
14
13
|
import "./chunk-WRJVB3C2.js";
|
|
@@ -17,10 +16,9 @@ import "./chunk-DM2T26WE.js";
|
|
|
17
16
|
import "./chunk-LDXUBPMO.js";
|
|
18
17
|
import "./chunk-JYIJNNN3.js";
|
|
19
18
|
import "./chunk-AAD2ZS6P.js";
|
|
20
|
-
import "./chunk-
|
|
21
|
-
import "./chunk-
|
|
19
|
+
import "./chunk-K4QS7LXU.js";
|
|
20
|
+
import "./chunk-NSVDUN76.js";
|
|
22
21
|
import "./chunk-BT7NVCML.js";
|
|
23
|
-
import "./chunk-R3DJVOSM.js";
|
|
24
22
|
import "./chunk-YXZG5TVN.js";
|
|
25
23
|
import "./chunk-5GINB5LC.js";
|
|
26
24
|
import "./chunk-G7D6GZ5J.js";
|
|
@@ -38,12 +36,10 @@ import "./chunk-RGMVMVMF.js";
|
|
|
38
36
|
import "./chunk-N7RWREIQ.js";
|
|
39
37
|
import "./chunk-XMMESCPD.js";
|
|
40
38
|
import "./chunk-42JKGUFJ.js";
|
|
41
|
-
import "./chunk-
|
|
42
|
-
import "./chunk-5GKPFL3S.js";
|
|
39
|
+
import "./chunk-VOELBUS4.js";
|
|
43
40
|
import "./chunk-ZIKENA2C.js";
|
|
44
41
|
import "./chunk-PQVCH2AE.js";
|
|
45
42
|
import "./chunk-6MKAMLQL.js";
|
|
46
|
-
import "./chunk-JAKIDQB2.js";
|
|
47
43
|
import "./chunk-W5BIQOAJ.js";
|
|
48
44
|
import "./chunk-Z7L72ZHL.js";
|
|
49
45
|
import "./chunk-4O4TKIXQ.js";
|
|
@@ -51,16 +47,20 @@ import "./chunk-ZBJMUXZH.js";
|
|
|
51
47
|
import "./chunk-BJMBJZ2Y.js";
|
|
52
48
|
import "./chunk-UKJAGEXH.js";
|
|
53
49
|
import "./chunk-FP2373TW.js";
|
|
50
|
+
import "./chunk-J6A3CX5N.js";
|
|
54
51
|
import "./chunk-7FGL6CGA.js";
|
|
55
52
|
import "./chunk-EGGE52UU.js";
|
|
56
53
|
import "./chunk-ZA53AZND.js";
|
|
57
54
|
import "./chunk-GCASGYIO.js";
|
|
58
55
|
import "./chunk-7RJUVTVF.js";
|
|
59
|
-
import "./chunk-
|
|
56
|
+
import "./chunk-CX5SW2EW.js";
|
|
60
57
|
import "./chunk-3CSX3ETE.js";
|
|
61
58
|
import "./chunk-RL6NEVXT.js";
|
|
59
|
+
import "./chunk-JDSVLVCG.js";
|
|
62
60
|
import "./chunk-FFAZ2XFU.js";
|
|
63
|
-
import "./chunk-
|
|
61
|
+
import "./chunk-5FVVY2EB.js";
|
|
62
|
+
import "./chunk-5GKPFL3S.js";
|
|
63
|
+
import "./chunk-JAKIDQB2.js";
|
|
64
64
|
import "./chunk-P7FMDTKL.js";
|
|
65
65
|
import "./chunk-2XRE6FLM.js";
|
|
66
66
|
import "./chunk-EYIEWJNI.js";
|
package/dist/write-envelope.d.ts
CHANGED
package/dist/write-envelope.js
CHANGED
|
@@ -11,9 +11,9 @@ import {
|
|
|
11
11
|
isMemoryCategory,
|
|
12
12
|
isSealedMemoryEnvelope,
|
|
13
13
|
sealedWriteToLegacyArgs
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-NSVDUN76.js";
|
|
15
15
|
import "./chunk-BT7NVCML.js";
|
|
16
|
-
import "./chunk-
|
|
16
|
+
import "./chunk-JDSVLVCG.js";
|
|
17
17
|
import "./chunk-5GKPFL3S.js";
|
|
18
18
|
import "./chunk-JAKIDQB2.js";
|
|
19
19
|
import "./chunk-P7FMDTKL.js";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@remnic/core",
|
|
3
|
-
"version": "9.
|
|
3
|
+
"version": "9.54.0",
|
|
4
4
|
"description": "Framework-agnostic Remnic memory engine — orchestrator, storage, extraction, search, trust zones",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -3126,7 +3126,7 @@
|
|
|
3126
3126
|
"core"
|
|
3127
3127
|
],
|
|
3128
3128
|
"peerDependencies": {
|
|
3129
|
-
"@remnic/coding-graph": "^9.
|
|
3129
|
+
"@remnic/coding-graph": "^9.54.0"
|
|
3130
3130
|
},
|
|
3131
3131
|
"peerDependenciesMeta": {
|
|
3132
3132
|
"@remnic/coding-graph": {
|
|
@@ -194,6 +194,7 @@ test("offline manifest streams body-free active, archived, old, bad, and encrypt
|
|
|
194
194
|
id: "active-memory",
|
|
195
195
|
category: "fact",
|
|
196
196
|
contentHash: activeContentHash,
|
|
197
|
+
normalizerVersion: 4,
|
|
197
198
|
status: "active",
|
|
198
199
|
});
|
|
199
200
|
assert.notEqual(rowsByPath.get("facts/active.md")?.sha256, activeContentHash);
|
package/src/content-hash.ts
CHANGED
|
@@ -9,8 +9,18 @@
|
|
|
9
9
|
|
|
10
10
|
import { createHash } from "node:crypto";
|
|
11
11
|
|
|
12
|
-
/** Normalize content:
|
|
12
|
+
/** Normalize content: preserve Unicode letters, marks, and numbers. */
|
|
13
13
|
export function normalizeContent(content: string): string {
|
|
14
|
+
return content
|
|
15
|
+
.normalize("NFC")
|
|
16
|
+
.toLowerCase()
|
|
17
|
+
.replace(/[^\p{L}\p{M}\p{N}\s]/gu, " ")
|
|
18
|
+
.replace(/\s+/g, " ")
|
|
19
|
+
.trim();
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/** Normalize content with the pre-Unicode ASCII-only normalizer. */
|
|
23
|
+
export function normalizeLegacyContent(content: string): string {
|
|
14
24
|
return content
|
|
15
25
|
.toLowerCase()
|
|
16
26
|
.replace(/[^a-z0-9\s]/g, " ")
|
|
@@ -18,6 +28,29 @@ export function normalizeContent(content: string): string {
|
|
|
18
28
|
.trim();
|
|
19
29
|
}
|
|
20
30
|
|
|
31
|
+
/** Compute the SHA-256 hash used by pre-Unicode content indexes. */
|
|
32
|
+
export function computeLegacyContentHash(content: string): string {
|
|
33
|
+
return createHash("sha256").update(normalizeLegacyContent(content)).digest("hex");
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Return true only when a persisted legacy hash can be proved to identify the
|
|
38
|
+
* same body under the current normalizer. Empty or changed legacy forms are
|
|
39
|
+
* ambiguous and must not be promoted to a current identity.
|
|
40
|
+
*/
|
|
41
|
+
export function isUnambiguousLegacyContentHash(
|
|
42
|
+
content: string,
|
|
43
|
+
contentHash: string,
|
|
44
|
+
currentNormalizedText: string = normalizeContent(content),
|
|
45
|
+
): boolean {
|
|
46
|
+
const legacyNormalizedText = normalizeLegacyContent(content);
|
|
47
|
+
return (
|
|
48
|
+
legacyNormalizedText.length > 0 &&
|
|
49
|
+
legacyNormalizedText === currentNormalizedText &&
|
|
50
|
+
createHash("sha256").update(legacyNormalizedText).digest("hex") === contentHash
|
|
51
|
+
);
|
|
52
|
+
}
|
|
53
|
+
|
|
21
54
|
/** Normalize content and compute SHA-256 hash. */
|
|
22
55
|
export function computeContentHash(content: string): string {
|
|
23
56
|
return createHash("sha256").update(normalizeContent(content)).digest("hex");
|
package/src/dedup/index.test.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import assert from "node:assert/strict";
|
|
2
|
-
import {
|
|
2
|
+
import { mkdir, mkdtemp, rm, symlink, writeFile } from "node:fs/promises";
|
|
3
3
|
import { tmpdir } from "node:os";
|
|
4
4
|
import path from "node:path";
|
|
5
5
|
import test from "node:test";
|
|
@@ -14,25 +14,13 @@ test("findContradictions detects can versus cannot statements", async () => {
|
|
|
14
14
|
await mkdir(factsDir);
|
|
15
15
|
await writeFile(
|
|
16
16
|
path.join(factsDir, "can.md"),
|
|
17
|
-
[
|
|
18
|
-
|
|
19
|
-
"id: mem-can",
|
|
20
|
-
"category: fact",
|
|
21
|
-
"---",
|
|
22
|
-
"The user can access production.",
|
|
23
|
-
].join("\n"),
|
|
24
|
-
"utf8",
|
|
17
|
+
["---", "id: mem-can", "category: fact", "---", "The user can access production."].join("\n"),
|
|
18
|
+
"utf8"
|
|
25
19
|
);
|
|
26
20
|
await writeFile(
|
|
27
21
|
path.join(factsDir, "cannot.md"),
|
|
28
|
-
[
|
|
29
|
-
|
|
30
|
-
"id: mem-cannot",
|
|
31
|
-
"category: fact",
|
|
32
|
-
"---",
|
|
33
|
-
"The user cannot access production.",
|
|
34
|
-
].join("\n"),
|
|
35
|
-
"utf8",
|
|
22
|
+
["---", "id: mem-cannot", "category: fact", "---", "The user cannot access production."].join("\n"),
|
|
23
|
+
"utf8"
|
|
36
24
|
);
|
|
37
25
|
|
|
38
26
|
const result = findContradictions({ memoryDir, categories: ["facts"] });
|
|
@@ -58,14 +46,8 @@ test("dedup public numeric options are normalized before scanning", async () =>
|
|
|
58
46
|
] as const) {
|
|
59
47
|
await writeFile(
|
|
60
48
|
path.join(factsDir, fileName),
|
|
61
|
-
[
|
|
62
|
-
|
|
63
|
-
`id: ${id}`,
|
|
64
|
-
"category: fact",
|
|
65
|
-
"---",
|
|
66
|
-
content,
|
|
67
|
-
].join("\n"),
|
|
68
|
-
"utf8",
|
|
49
|
+
["---", `id: ${id}`, "category: fact", "---", content].join("\n"),
|
|
50
|
+
"utf8"
|
|
69
51
|
);
|
|
70
52
|
}
|
|
71
53
|
|
|
@@ -95,6 +77,51 @@ test("dedup public numeric options are normalized before scanning", async () =>
|
|
|
95
77
|
}
|
|
96
78
|
});
|
|
97
79
|
|
|
80
|
+
test("dedup keeps duplicate and distinct pairs across Unicode scripts", async () => {
|
|
81
|
+
const memoryDir = await mkdtemp(path.join(tmpdir(), "remnic-dedup-unicode-"));
|
|
82
|
+
|
|
83
|
+
try {
|
|
84
|
+
const factsDir = path.join(memoryDir, "facts");
|
|
85
|
+
await mkdir(factsDir);
|
|
86
|
+
const entries = [
|
|
87
|
+
["english-a.md", "mem-english-a", "The user prefers tea."],
|
|
88
|
+
["english-b.md", "mem-english-b", "The user prefers tea"],
|
|
89
|
+
["english-c.md", "mem-english-c", "The user prefers coffee."],
|
|
90
|
+
["japanese-a.md", "mem-japanese-a", "利用者は紅茶を好む。"],
|
|
91
|
+
["japanese-b.md", "mem-japanese-b", "利用者は紅茶を好む。"],
|
|
92
|
+
["japanese-c.md", "mem-japanese-c", "利用者は珈琲を好む。"],
|
|
93
|
+
["korean-a.md", "mem-korean-a", "사용자는홍차를좋아한다"],
|
|
94
|
+
["korean-b.md", "mem-korean-b", "사용자는홍차를좋아한다"],
|
|
95
|
+
["korean-c.md", "mem-korean-c", "사용자는커피를좋아한다"],
|
|
96
|
+
["korean-punctuation.md", "mem-korean-punctuation", "홍차・커피"],
|
|
97
|
+
["korean-hyphen.md", "mem-korean-hyphen", "홍차-커피"],
|
|
98
|
+
["korean-joined.md", "mem-korean-joined", "홍차커피"],
|
|
99
|
+
["japanese-boundary-a.md", "mem-japanese-boundary-a", "甲・乙丙"],
|
|
100
|
+
["japanese-boundary-b.md", "mem-japanese-boundary-b", "甲乙・丙"],
|
|
101
|
+
] as const;
|
|
102
|
+
|
|
103
|
+
for (const [fileName, id, content] of entries) {
|
|
104
|
+
await writeFile(
|
|
105
|
+
path.join(factsDir, fileName),
|
|
106
|
+
["---", `id: ${id}`, "category: fact", "---", content].join("\n"),
|
|
107
|
+
"utf8"
|
|
108
|
+
);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
const result = findDuplicates({ memoryDir, categories: ["facts"] });
|
|
112
|
+
|
|
113
|
+
assert.equal(result.scanned, entries.length);
|
|
114
|
+
assert.equal(result.duplicates.length, 3);
|
|
115
|
+
assert.deepEqual(result.duplicates.map(({ left, right }) => [left.id, right.id]).sort(), [
|
|
116
|
+
["mem-english-a", "mem-english-b"],
|
|
117
|
+
["mem-japanese-a", "mem-japanese-b"],
|
|
118
|
+
["mem-korean-a", "mem-korean-b"],
|
|
119
|
+
]);
|
|
120
|
+
} finally {
|
|
121
|
+
await rm(memoryDir, { recursive: true, force: true });
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
|
|
98
125
|
test("dedup scans reject symlinked category directories outside memoryDir", async (t) => {
|
|
99
126
|
if (process.platform === "win32") {
|
|
100
127
|
t.skip("directory symlink setup is platform-specific");
|
|
@@ -107,24 +134,15 @@ test("dedup scans reject symlinked category directories outside memoryDir", asyn
|
|
|
107
134
|
try {
|
|
108
135
|
await writeFile(
|
|
109
136
|
path.join(outsideDir, "outside.md"),
|
|
110
|
-
[
|
|
111
|
-
|
|
112
|
-
"id: outside",
|
|
113
|
-
"category: fact",
|
|
114
|
-
"---",
|
|
115
|
-
"Outside memory should not be scanned.",
|
|
116
|
-
].join("\n"),
|
|
117
|
-
"utf8",
|
|
137
|
+
["---", "id: outside", "category: fact", "---", "Outside memory should not be scanned."].join("\n"),
|
|
138
|
+
"utf8"
|
|
118
139
|
);
|
|
119
140
|
await symlink(outsideDir, path.join(memoryDir, "facts"), "dir");
|
|
120
141
|
|
|
121
|
-
assert.throws(
|
|
122
|
-
() => findDuplicates({ memoryDir, categories: ["facts"] }),
|
|
123
|
-
/symlinked memory category directory/,
|
|
124
|
-
);
|
|
142
|
+
assert.throws(() => findDuplicates({ memoryDir, categories: ["facts"] }), /symlinked memory category directory/);
|
|
125
143
|
assert.throws(
|
|
126
144
|
() => findContradictions({ memoryDir, categories: ["facts"] }),
|
|
127
|
-
/symlinked memory category directory
|
|
145
|
+
/symlinked memory category directory/
|
|
128
146
|
);
|
|
129
147
|
} finally {
|
|
130
148
|
await rm(memoryDir, { recursive: true, force: true });
|
package/src/dedup/index.ts
CHANGED
|
@@ -5,9 +5,10 @@
|
|
|
5
5
|
* against existing memories. Can be used standalone or via curation.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
+
import crypto from "node:crypto";
|
|
8
9
|
import fs from "node:fs";
|
|
9
10
|
import path from "node:path";
|
|
10
|
-
import
|
|
11
|
+
import { normalizeRecallTokenSet } from "../recall-tokenization.js";
|
|
11
12
|
import { ALL_CATEGORY_DIRS } from "../utils/category-dir.js";
|
|
12
13
|
|
|
13
14
|
// ── Types ────────────────────────────────────────────────────────────────────
|
|
@@ -89,20 +90,11 @@ const DEFAULT_DEDUP_THRESHOLD = 0.85;
|
|
|
89
90
|
const DEFAULT_MAX_LOAD = 10000;
|
|
90
91
|
|
|
91
92
|
function normalizeThreshold(value: number | undefined, defaultValue: number): number {
|
|
92
|
-
return typeof value === "number" &&
|
|
93
|
-
Number.isFinite(value) &&
|
|
94
|
-
value >= 0 &&
|
|
95
|
-
value <= 1
|
|
96
|
-
? value
|
|
97
|
-
: defaultValue;
|
|
93
|
+
return typeof value === "number" && Number.isFinite(value) && value >= 0 && value <= 1 ? value : defaultValue;
|
|
98
94
|
}
|
|
99
95
|
|
|
100
96
|
function normalizeMaxLoad(value: number | undefined, defaultValue: number): number {
|
|
101
|
-
return typeof value === "number" &&
|
|
102
|
-
Number.isInteger(value) &&
|
|
103
|
-
value >= 0
|
|
104
|
-
? value
|
|
105
|
-
: defaultValue;
|
|
97
|
+
return typeof value === "number" && Number.isInteger(value) && value >= 0 ? value : defaultValue;
|
|
106
98
|
}
|
|
107
99
|
|
|
108
100
|
export function findDuplicates(options: DedupOptions): DedupResult {
|
|
@@ -163,26 +155,25 @@ export function findContradictions(options: ContradictionOptions): Contradiction
|
|
|
163
155
|
// ── Similarity computation ───────────────────────────────────────────────────
|
|
164
156
|
|
|
165
157
|
function computeSimilarity(a: string, b: string): number {
|
|
166
|
-
// Normalize
|
|
167
158
|
const normA = normalize(a);
|
|
168
159
|
const normB = normalize(b);
|
|
160
|
+
const punctuationBoundariesA = embeddedPunctuationSignature(a);
|
|
161
|
+
const punctuationBoundariesB = embeddedPunctuationSignature(b);
|
|
162
|
+
|
|
163
|
+
// Compare punctuation and positions before normalization's exact/hash paths.
|
|
164
|
+
if (punctuationBoundariesA !== punctuationBoundariesB) return 0;
|
|
169
165
|
|
|
170
|
-
// Exact match
|
|
171
166
|
if (normA === normB) return 1;
|
|
172
167
|
|
|
173
|
-
// Hash-based exact match
|
|
174
168
|
if (hashContent(normA) === hashContent(normB)) return 0.99;
|
|
175
|
-
|
|
176
|
-
// Substring containment
|
|
177
169
|
if (normA.length > 50 && normB.length > 50) {
|
|
178
170
|
if (normA.includes(normB.slice(0, 40)) || normB.includes(normA.slice(0, 40))) {
|
|
179
171
|
return 0.9;
|
|
180
172
|
}
|
|
181
173
|
}
|
|
182
174
|
|
|
183
|
-
|
|
184
|
-
const
|
|
185
|
-
const wordsB = new Set(normB.split(/\s+/));
|
|
175
|
+
const wordsA = tokenizeForSimilarity(normA);
|
|
176
|
+
const wordsB = tokenizeForSimilarity(normB);
|
|
186
177
|
const intersection = new Set([...wordsA].filter((w) => wordsB.has(w)));
|
|
187
178
|
const union = new Set([...wordsA, ...wordsB]);
|
|
188
179
|
|
|
@@ -190,25 +181,89 @@ function computeSimilarity(a: string, b: string): number {
|
|
|
190
181
|
return intersection.size / union.size;
|
|
191
182
|
}
|
|
192
183
|
|
|
184
|
+
function embeddedPunctuationSignature(text: string): string {
|
|
185
|
+
const chars = [...text.normalize("NFC")];
|
|
186
|
+
const significant = /[\p{L}\p{M}\p{N}]/u;
|
|
187
|
+
const ignored = /[\s']/u;
|
|
188
|
+
const boundaries: string[] = [];
|
|
189
|
+
let position = 0;
|
|
190
|
+
for (let index = 0; index < chars.length;) {
|
|
191
|
+
const char = chars[index];
|
|
192
|
+
if (char === undefined) break;
|
|
193
|
+
if (significant.test(char)) {
|
|
194
|
+
position++;
|
|
195
|
+
index++;
|
|
196
|
+
continue;
|
|
197
|
+
}
|
|
198
|
+
if (ignored.test(char)) {
|
|
199
|
+
index++;
|
|
200
|
+
continue;
|
|
201
|
+
}
|
|
202
|
+
const start = index;
|
|
203
|
+
while (index < chars.length) {
|
|
204
|
+
const next = chars[index];
|
|
205
|
+
if (next === undefined || significant.test(next) || ignored.test(next)) break;
|
|
206
|
+
index++;
|
|
207
|
+
}
|
|
208
|
+
const before = chars[start - 1];
|
|
209
|
+
const after = chars[index];
|
|
210
|
+
if (before && after && significant.test(before) && significant.test(after)) {
|
|
211
|
+
boundaries.push(`${position}:${chars.slice(start, index).join("")}`);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
return boundaries.join("\u0000");
|
|
215
|
+
}
|
|
216
|
+
|
|
193
217
|
function normalize(text: string): string {
|
|
194
218
|
return text
|
|
219
|
+
.normalize("NFC")
|
|
195
220
|
.toLowerCase()
|
|
196
|
-
.replace(/[^\
|
|
221
|
+
.replace(/[^\p{ASCII}\p{L}\p{M}\p{N}\s']/gu, " ")
|
|
222
|
+
.replace(/[^\p{L}\p{M}\p{N}\s']/gu, "")
|
|
197
223
|
.replace(/\s+/g, " ")
|
|
198
224
|
.trim();
|
|
199
225
|
}
|
|
200
226
|
|
|
227
|
+
function tokenizeForSimilarity(text: string): Set<string> {
|
|
228
|
+
if (/\p{Script=Hangul}/u.test(text)) {
|
|
229
|
+
const tokens = normalizeRecallTokenSet(text);
|
|
230
|
+
for (const segment of text.match(/\p{Script=Hangul}+/gu) ?? []) {
|
|
231
|
+
const chars = [...segment];
|
|
232
|
+
for (const size of [1, 2, 3, 4]) {
|
|
233
|
+
for (let index = 0; index <= chars.length - size; index += 1) {
|
|
234
|
+
tokens.add(chars.slice(index, index + size).join(""));
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
return tokens;
|
|
239
|
+
}
|
|
240
|
+
if (/[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}]/u.test(text)) {
|
|
241
|
+
return normalizeRecallTokenSet(text);
|
|
242
|
+
}
|
|
243
|
+
return text.length === 0 ? new Set() : new Set(text.split(/\s+/));
|
|
244
|
+
}
|
|
245
|
+
|
|
201
246
|
// ── Contradiction detection ──────────────────────────────────────────────────
|
|
202
247
|
|
|
203
248
|
const NEGATION_WORDS = new Set([
|
|
204
|
-
"not",
|
|
205
|
-
"
|
|
249
|
+
"not",
|
|
250
|
+
"don't",
|
|
251
|
+
"doesn't",
|
|
252
|
+
"isn't",
|
|
253
|
+
"aren't",
|
|
254
|
+
"won't",
|
|
255
|
+
"can't",
|
|
256
|
+
"cannot",
|
|
257
|
+
"never",
|
|
258
|
+
"no",
|
|
259
|
+
"none",
|
|
260
|
+
"neither",
|
|
261
|
+
"nor",
|
|
262
|
+
"nothing",
|
|
263
|
+
"nowhere",
|
|
206
264
|
]);
|
|
207
265
|
|
|
208
|
-
function detectContradiction(
|
|
209
|
-
a: MemoryEntry,
|
|
210
|
-
b: MemoryEntry,
|
|
211
|
-
): ContradictionPair | null {
|
|
266
|
+
function detectContradiction(a: MemoryEntry, b: MemoryEntry): ContradictionPair | null {
|
|
212
267
|
const normA = normalize(a.content);
|
|
213
268
|
const normB = normalize(b.content);
|
|
214
269
|
|
|
@@ -271,11 +326,7 @@ function stripNegation(text: string): string {
|
|
|
271
326
|
|
|
272
327
|
// ── Memory loading ───────────────────────────────────────────────────────────
|
|
273
328
|
|
|
274
|
-
function loadMemories(
|
|
275
|
-
memoryDir: string,
|
|
276
|
-
categories?: string[],
|
|
277
|
-
maxLoad = 10000,
|
|
278
|
-
): MemoryEntry[] {
|
|
329
|
+
function loadMemories(memoryDir: string, categories?: string[], maxLoad = 10000): MemoryEntry[] {
|
|
279
330
|
const result: MemoryEntry[] = [];
|
|
280
331
|
const allCategories = categories ?? ALL_CATEGORY_DIRS;
|
|
281
332
|
if (!fs.existsSync(memoryDir)) return result;
|
|
@@ -322,11 +373,7 @@ function hashContent(content: string): string {
|
|
|
322
373
|
return crypto.createHash("sha256").update(content).digest("hex").slice(0, 16);
|
|
323
374
|
}
|
|
324
375
|
|
|
325
|
-
function readFileSafe(
|
|
326
|
-
filePath: string,
|
|
327
|
-
memoryRootReal: string,
|
|
328
|
-
categoryRootReal: string,
|
|
329
|
-
): string | null {
|
|
376
|
+
function readFileSafe(filePath: string, memoryRootReal: string, categoryRootReal: string): string | null {
|
|
330
377
|
try {
|
|
331
378
|
const fileStat = fs.lstatSync(filePath);
|
|
332
379
|
if (fileStat.isSymbolicLink()) {
|
|
@@ -373,7 +420,7 @@ function walkMdFiles(
|
|
|
373
420
|
dir: string,
|
|
374
421
|
memoryRootReal: string,
|
|
375
422
|
categoryRootReal: string,
|
|
376
|
-
callback: (filePath: string) => void
|
|
423
|
+
callback: (filePath: string) => void
|
|
377
424
|
): void {
|
|
378
425
|
for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
|
|
379
426
|
const fullPath = path.join(dir, entry.name);
|