@remnic/core 1.1.2 → 1.1.3
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/abort-error.js +1 -0
- package/dist/abstraction-nodes.js +1 -0
- package/dist/access-audit.js +1 -0
- package/dist/access-cli.js +70 -45
- package/dist/access-cli.js.map +1 -1
- package/dist/access-http.d.ts +50 -5
- package/dist/access-http.js +37 -15
- package/dist/access-idempotency.js +1 -0
- package/dist/access-mcp.d.ts +10 -5
- package/dist/access-mcp.js +36 -13
- package/dist/access-schema.d.ts +133 -13
- package/dist/access-schema.js +20 -1
- package/dist/access-service-_AEUMVyX.d.ts +1981 -0
- package/dist/access-service.d.ts +11 -6
- package/dist/access-service.js +38 -14
- package/dist/active-memory-bridge.js +1 -0
- package/dist/active-recall.js +1 -0
- package/dist/active-recall.js.map +1 -1
- package/dist/behavior-learner.js +1 -0
- package/dist/behavior-learner.js.map +1 -1
- package/dist/behavior-signals.js +1 -0
- package/dist/bootstrap.d.ts +6 -4
- package/dist/bootstrap.js +1 -0
- package/dist/boxes.js +1 -0
- package/dist/briefing.d.ts +9 -5
- package/dist/briefing.js +9 -6
- package/dist/buffer-surprise-report.js +1 -0
- package/dist/buffer-surprise.js +1 -0
- package/dist/buffer.d.ts +1 -1
- package/dist/buffer.js +1 -0
- package/dist/calibration.d.ts +8 -1
- package/dist/calibration.js +10 -2
- package/dist/calibration.js.map +1 -1
- package/dist/capsule-cli.d.ts +137 -0
- package/dist/capsule-cli.js +34 -0
- package/dist/capsule-crypto-5CYAGVC5.js +18 -0
- package/dist/capsule-export-NZQPOTQ4.js +17 -0
- package/dist/capsule-export-NZQPOTQ4.js.map +1 -0
- package/dist/capsule-import-SDCUXLEV.js +16 -0
- package/dist/capsule-import-SDCUXLEV.js.map +1 -0
- package/dist/capsule-merge-DI7PNQ2H.js +189 -0
- package/dist/capsule-merge-DI7PNQ2H.js.map +1 -0
- package/dist/causal-behavior.js +1 -0
- package/dist/causal-behavior.js.map +1 -1
- package/dist/causal-chain.js +1 -0
- package/dist/causal-consolidation.js +11 -8
- package/dist/causal-consolidation.js.map +1 -1
- package/dist/causal-retrieval.js +2 -1
- package/dist/causal-retrieval.js.map +1 -1
- package/dist/causal-trajectory-graph.js +4 -1
- package/dist/causal-trajectory-graph.js.map +1 -1
- package/dist/causal-trajectory.js +2 -1
- package/dist/chunk-2LSZVONP.js +67 -0
- package/dist/chunk-2LSZVONP.js.map +1 -0
- package/dist/chunk-32KD5IHZ.js +245 -0
- package/dist/chunk-32KD5IHZ.js.map +1 -0
- package/dist/{chunk-VDX363PS.js → chunk-34F3PLWZ.js} +10 -3
- package/dist/chunk-34F3PLWZ.js.map +1 -0
- package/dist/chunk-3KIS4VGT.js +228 -0
- package/dist/chunk-3KIS4VGT.js.map +1 -0
- package/dist/chunk-3LCWFNVS.js +350 -0
- package/dist/chunk-3LCWFNVS.js.map +1 -0
- package/dist/chunk-43EKP2UK.js +26 -0
- package/dist/chunk-43EKP2UK.js.map +1 -0
- package/dist/chunk-457A4P3L.js +119 -0
- package/dist/chunk-457A4P3L.js.map +1 -0
- package/dist/{chunk-TMYO7B5P.js → chunk-47WOM4YW.js} +2 -2
- package/dist/{chunk-OC5OXUQ4.js → chunk-4PLGJRBV.js} +653 -17
- package/dist/chunk-4PLGJRBV.js.map +1 -0
- package/dist/{chunk-PVICZTKG.js → chunk-55FXRRSJ.js} +5 -5
- package/dist/{chunk-PVICZTKG.js.map → chunk-55FXRRSJ.js.map} +1 -1
- package/dist/{chunk-ULYOGL6R.js → chunk-5HRY2WRF.js} +7 -3
- package/dist/chunk-5HRY2WRF.js.map +1 -0
- package/dist/chunk-6TBWYBJ3.js +236 -0
- package/dist/chunk-6TBWYBJ3.js.map +1 -0
- package/dist/chunk-74EMIVE4.js +329 -0
- package/dist/chunk-74EMIVE4.js.map +1 -0
- package/dist/chunk-74WWN7ZW.js +82 -0
- package/dist/chunk-74WWN7ZW.js.map +1 -0
- package/dist/{chunk-6YJHX2DL.js → chunk-7GCMLT7J.js} +242 -22
- package/dist/chunk-7GCMLT7J.js.map +1 -0
- package/dist/chunk-A6XUJE5D.js +126 -0
- package/dist/chunk-A6XUJE5D.js.map +1 -0
- package/dist/chunk-AJA46VX5.js +393 -0
- package/dist/chunk-AJA46VX5.js.map +1 -0
- package/dist/{chunk-UWB5LMWY.js → chunk-AKUCB2OG.js} +525 -24
- package/dist/chunk-AKUCB2OG.js.map +1 -0
- package/dist/chunk-ASIQZXYO.js +277 -0
- package/dist/chunk-ASIQZXYO.js.map +1 -0
- package/dist/{chunk-DG6YMRDC.js → chunk-B2TL6GA2.js} +2 -2
- package/dist/chunk-BJMBJZ2Y.js +290 -0
- package/dist/chunk-BJMBJZ2Y.js.map +1 -0
- package/dist/chunk-BT7NVCML.js +79 -0
- package/dist/chunk-BT7NVCML.js.map +1 -0
- package/dist/chunk-CK5NTM2S.js +454 -0
- package/dist/chunk-CK5NTM2S.js.map +1 -0
- package/dist/{chunk-AYXIPSZO.js → chunk-CRU27Q4J.js} +2 -2
- package/dist/{chunk-F5VP6YCB.js → chunk-DCE6SQLA.js} +572 -155
- package/dist/chunk-DCE6SQLA.js.map +1 -0
- package/dist/{chunk-CUPFXL3J.js → chunk-DHRQHX36.js} +4 -4
- package/dist/chunk-DHRQHX36.js.map +1 -0
- package/dist/{chunk-STGWEHYR.js → chunk-DR7MCMPS.js} +981 -61
- package/dist/chunk-DR7MCMPS.js.map +1 -0
- package/dist/chunk-FP2373TW.js +149 -0
- package/dist/chunk-FP2373TW.js.map +1 -0
- package/dist/{chunk-RBBWYEFJ.js → chunk-G2WADRQ3.js} +1 -1
- package/dist/chunk-G7D6GZ5J.js +48 -0
- package/dist/chunk-G7D6GZ5J.js.map +1 -0
- package/dist/chunk-H7XKCNR6.js +60 -0
- package/dist/chunk-H7XKCNR6.js.map +1 -0
- package/dist/{chunk-3YGHKTBF.js → chunk-IM3JSE73.js} +953 -322
- package/dist/chunk-IM3JSE73.js.map +1 -0
- package/dist/chunk-IXEJRKCZ.js +18 -0
- package/dist/chunk-IXEJRKCZ.js.map +1 -0
- package/dist/chunk-IYY4MCPG.js +275 -0
- package/dist/chunk-IYY4MCPG.js.map +1 -0
- package/dist/{chunk-BECYBZLX.js → chunk-JWSENLQI.js} +502 -22
- package/dist/chunk-JWSENLQI.js.map +1 -0
- package/dist/chunk-KNKUID7G.js +183 -0
- package/dist/chunk-KNKUID7G.js.map +1 -0
- package/dist/chunk-L2IO2QPY.js +2036 -0
- package/dist/chunk-L2IO2QPY.js.map +1 -0
- package/dist/{chunk-SPI27QT6.js → chunk-L5IIGA5V.js} +9 -4
- package/dist/chunk-L5IIGA5V.js.map +1 -0
- package/dist/{chunk-XXVWLXSG.js → chunk-LVYGDT5V.js} +56 -82
- package/dist/chunk-LVYGDT5V.js.map +1 -0
- package/dist/{chunk-ZAIM4TUE.js → chunk-LW2NMHDW.js} +46 -1
- package/dist/chunk-LW2NMHDW.js.map +1 -0
- package/dist/{chunk-3OGMS3PE.js → chunk-LZRYQK6L.js} +3 -2
- package/dist/chunk-LZRYQK6L.js.map +1 -0
- package/dist/chunk-MDYG7VI7.js +48 -0
- package/dist/chunk-MDYG7VI7.js.map +1 -0
- package/dist/chunk-MXC3AP5I.js +74 -0
- package/dist/chunk-MXC3AP5I.js.map +1 -0
- package/dist/{chunk-DIXB44VE.js → chunk-N7X62G74.js} +25 -10
- package/dist/chunk-N7X62G74.js.map +1 -0
- package/dist/chunk-NN3TS5BM.js +147 -0
- package/dist/chunk-NN3TS5BM.js.map +1 -0
- package/dist/chunk-OA3L7BFR.js +183 -0
- package/dist/chunk-OA3L7BFR.js.map +1 -0
- package/dist/chunk-OZHRDTDX.js +240 -0
- package/dist/chunk-OZHRDTDX.js.map +1 -0
- package/dist/chunk-PCUKNJAZ.js +165 -0
- package/dist/chunk-PCUKNJAZ.js.map +1 -0
- package/dist/{chunk-6PFRXT4K.js → chunk-PFV5C235.js} +11 -6
- package/dist/chunk-PFV5C235.js.map +1 -0
- package/dist/chunk-PZ5AY32C.js +10 -0
- package/dist/chunk-PZ5AY32C.js.map +1 -0
- package/dist/{chunk-Y7R2XJ5Q.js → chunk-Q7FJ5ZHM.js} +6 -2
- package/dist/chunk-Q7FJ5ZHM.js.map +1 -0
- package/dist/{chunk-NBVAS5MT.js → chunk-R2L7SUX2.js} +6 -6
- package/dist/{chunk-WCLICCGB.js → chunk-RILIVK4O.js} +91 -4
- package/dist/chunk-RILIVK4O.js.map +1 -0
- package/dist/{chunk-C2EFFULQ.js → chunk-RK2Y4XOM.js} +163 -20
- package/dist/chunk-RK2Y4XOM.js.map +1 -0
- package/dist/{chunk-TP4FZJIZ.js → chunk-RULE4VG5.js} +5 -1
- package/dist/chunk-RULE4VG5.js.map +1 -0
- package/dist/{chunk-PVPWZSSI.js → chunk-SMA4IMHV.js} +19 -3
- package/dist/chunk-SMA4IMHV.js.map +1 -0
- package/dist/{chunk-L7IXWRYE.js → chunk-SS253RXF.js} +22 -13
- package/dist/chunk-SS253RXF.js.map +1 -0
- package/dist/chunk-TUFG6VXY.js +875 -0
- package/dist/chunk-TUFG6VXY.js.map +1 -0
- package/dist/chunk-TYEOAFH3.js +251 -0
- package/dist/chunk-TYEOAFH3.js.map +1 -0
- package/dist/chunk-UKJAGEXH.js +260 -0
- package/dist/chunk-UKJAGEXH.js.map +1 -0
- package/dist/{chunk-KVBLZUKV.js → chunk-USFPPRAF.js} +93 -3
- package/dist/chunk-USFPPRAF.js.map +1 -0
- package/dist/{chunk-GA5P7RST.js → chunk-VTJVUHRK.js} +22 -36
- package/dist/chunk-VTJVUHRK.js.map +1 -0
- package/dist/chunk-WIICJPET.js +45 -0
- package/dist/chunk-WIICJPET.js.map +1 -0
- package/dist/{chunk-VBVG2M5G.js → chunk-WPGJYVUH.js} +6 -2
- package/dist/chunk-WPGJYVUH.js.map +1 -0
- package/dist/{chunk-4HQS2HPX.js → chunk-WSZIHQBK.js} +29 -9
- package/dist/{chunk-4HQS2HPX.js.map → chunk-WSZIHQBK.js.map} +1 -1
- package/dist/{chunk-NZLQTHS5.js → chunk-WW3QQF4H.js} +4 -1
- package/dist/chunk-WW3QQF4H.js.map +1 -0
- package/dist/{chunk-FVA6TGI3.js → chunk-Y3WQ4ZWK.js} +42 -2
- package/dist/chunk-Y3WQ4ZWK.js.map +1 -0
- package/dist/chunk-YNJHCGDT.js +309 -0
- package/dist/chunk-YNJHCGDT.js.map +1 -0
- package/dist/{chunk-LOIMBRDE.js → chunk-ZGXSCMQN.js} +1993 -411
- package/dist/chunk-ZGXSCMQN.js.map +1 -0
- package/dist/{chunk-W6SL7OFG.js → chunk-ZTSE2ZJ6.js} +12 -2
- package/dist/{chunk-W6SL7OFG.js.map → chunk-ZTSE2ZJ6.js.map} +1 -1
- package/dist/chunking.js +1 -0
- package/dist/cipher-GVE2GQ5H.js +28 -0
- package/dist/cipher-GVE2GQ5H.js.map +1 -0
- package/dist/citations.js +1 -0
- package/dist/{cli-BkeRaYfk.d.ts → cli-x2APT9a6.d.ts} +26 -7
- package/dist/cli.d.ts +11 -6
- package/dist/cli.js +67 -33
- package/dist/codex-thread-key.js +1 -0
- package/dist/commitment-ledger.js +1 -0
- package/dist/compression-optimizer.js +1 -0
- package/dist/config.d.ts +2 -1
- package/dist/config.js +4 -1
- package/dist/connectors-cli-DFGtY2DB.d.ts +257 -0
- package/dist/connectors-cli.d.ts +2 -0
- package/dist/connectors-cli.js +22 -0
- package/dist/connectors-cli.js.map +1 -0
- package/dist/consolidation-operator.d.ts +65 -5
- package/dist/consolidation-operator.js +6 -1
- package/dist/consolidation-provenance-check.d.ts +1 -1
- package/dist/consolidation-provenance-check.js +3 -2
- package/dist/consolidation-undo.d.ts +1 -1
- package/dist/consolidation-undo.js +1 -0
- package/dist/consolidation-undo.js.map +1 -1
- package/dist/{contradiction-review-WIUBAR52.js → contradiction-review-5LTTVDQV.js} +2 -1
- package/dist/contradiction-review-5LTTVDQV.js.map +1 -0
- package/dist/{contradiction-scan-E3GJTI4F.js → contradiction-scan-3Z6YW7YA.js} +2 -1
- package/dist/{contradiction-scan-E3GJTI4F.js.map → contradiction-scan-3Z6YW7YA.js.map} +1 -1
- package/dist/cross-namespace-budget.js +1 -0
- package/dist/cue-anchors.js +1 -0
- package/dist/dashboard-runtime.js +1 -0
- package/dist/day-summary.js +1 -0
- package/dist/delinearize.js +1 -0
- package/dist/direct-answer-wiring.js +1 -0
- package/dist/direct-answer.js +1 -0
- package/dist/dreams-ledger-LR2NBAZE.js +286 -0
- package/dist/dreams-ledger-LR2NBAZE.js.map +1 -0
- package/dist/embedding-fallback.js +1 -0
- package/dist/{engine-72LSIWQP.js → engine-ICC2DSQF.js} +10 -7
- package/dist/engine-ICC2DSQF.js.map +1 -0
- package/dist/entity-retrieval.d.ts +1 -1
- package/dist/entity-retrieval.js +9 -6
- package/dist/entity-schema.js +1 -0
- package/dist/evals.js +1 -0
- package/dist/evidence-pack.d.ts +16 -0
- package/dist/evidence-pack.js +8 -0
- package/dist/evidence-pack.js.map +1 -0
- package/dist/explicit-capture.d.ts +6 -4
- package/dist/explicit-capture.js +1 -0
- package/dist/extraction-judge-telemetry.js +1 -0
- package/dist/extraction-judge-training.js +1 -0
- package/dist/extraction-judge.js +1 -0
- package/dist/extraction.js +7 -6
- package/dist/fallback-llm.js +3 -2
- package/dist/first-start-migration-4MHQEOSD.js +263 -0
- package/dist/first-start-migration-4MHQEOSD.js.map +1 -0
- package/dist/forget-PLR6J5DN.js +69 -0
- package/dist/forget-PLR6J5DN.js.map +1 -0
- package/dist/framework-CyHYDcri.d.ts +153 -0
- package/dist/fs-utils-IRVUFB6G.js +30 -0
- package/dist/fs-utils-IRVUFB6G.js.map +1 -0
- package/dist/graph-dashboard-diff.js +1 -0
- package/dist/graph-dashboard-key.js +1 -0
- package/dist/graph-dashboard-parser.js +1 -0
- package/dist/graph-edge-decay-PWB63GRE.js +207 -0
- package/dist/graph-edge-decay-PWB63GRE.js.map +1 -0
- package/dist/graph-edge-reinforcement.d.ts +81 -0
- package/dist/graph-edge-reinforcement.js +24 -0
- package/dist/graph-edge-reinforcement.js.map +1 -0
- package/dist/graph-events.d.ts +87 -0
- package/dist/graph-events.js +14 -0
- package/dist/graph-events.js.map +1 -0
- package/dist/graph-recall.js +1 -0
- package/dist/graph-retrieval.js +1 -0
- package/dist/graph-snapshot.d.ts +112 -0
- package/dist/graph-snapshot.js +19 -0
- package/dist/graph-snapshot.js.map +1 -0
- package/dist/graph.d.ts +105 -7
- package/dist/graph.js +20 -3
- package/dist/harmonic-retrieval.js +1 -0
- package/dist/himem.js +1 -0
- package/dist/hygiene.js +1 -0
- package/dist/identity-continuity.js +1 -0
- package/dist/importance.js +1 -0
- package/dist/index.d.ts +562 -13
- package/dist/index.js +329 -67
- package/dist/index.js.map +1 -1
- package/dist/intent.js +1 -0
- package/dist/json-extract.js +1 -0
- package/dist/json-store.js +1 -0
- package/dist/kdf-7S6RWKLZ.js +26 -0
- package/dist/kdf-7S6RWKLZ.js.map +1 -0
- package/dist/legacy-hook-compat.js +1 -0
- package/dist/legacy-hook-compat.js.map +1 -1
- package/dist/lifecycle.js +1 -0
- package/dist/live-connectors-runner.d.ts +48 -0
- package/dist/live-connectors-runner.js +17 -0
- package/dist/live-connectors-runner.js.map +1 -0
- package/dist/local-llm.js +1 -0
- package/dist/logger.js +1 -0
- package/dist/memory-action-policy.js +1 -0
- package/dist/memory-cache.d.ts +2 -1
- package/dist/memory-cache.js +4 -1
- package/dist/memory-governance-KG52RITE.js +37 -0
- package/dist/memory-governance-KG52RITE.js.map +1 -0
- package/dist/memory-lifecycle-ledger-utils.d.ts +2 -1
- package/dist/memory-lifecycle-ledger-utils.js +4 -1
- package/dist/memory-projection-format.js +1 -0
- package/dist/{memory-projection-store-DeSXPh1j.d.ts → memory-projection-store-D3vBHS4J.d.ts} +1 -0
- package/dist/memory-projection-store.d.ts +1 -1
- package/dist/memory-projection-store.js +1 -0
- package/dist/memory-worth-bench.js +1 -0
- package/dist/memory-worth-bench.js.map +1 -1
- package/dist/memory-worth-filter.js +1 -0
- package/dist/memory-worth-outcomes.d.ts +1 -1
- package/dist/memory-worth-outcomes.js +1 -0
- package/dist/memory-worth.js +1 -0
- package/dist/metadata-FC3XPDRQ.js +21 -0
- package/dist/metadata-FC3XPDRQ.js.map +1 -0
- package/dist/migrate-from-identity-anchor-TTEDEJGX.js +8 -0
- package/dist/migrate-from-identity-anchor-TTEDEJGX.js.map +1 -0
- package/dist/model-registry.js +1 -0
- package/dist/models-json.js +1 -0
- package/dist/native-knowledge.js +1 -0
- package/dist/negative.js +1 -0
- package/dist/objective-state-writers.js +1 -0
- package/dist/objective-state-writers.js.map +1 -1
- package/dist/objective-state.js +1 -0
- package/dist/openai-chat-compat.js +1 -0
- package/dist/operator-toolkit.d.ts +46 -2
- package/dist/operator-toolkit.js +28 -16
- package/dist/opik-exporter.js +1 -0
- package/dist/opik-exporter.js.map +1 -1
- package/dist/{orchestrator-CmJ-NTdJ.d.ts → orchestrator-ChkesB8U.d.ts} +177 -13
- package/dist/orchestrator.d.ts +6 -4
- package/dist/orchestrator.js +55 -39
- package/dist/page-versioning.js +1 -0
- package/dist/path-RMTY5Y5A.js +9 -0
- package/dist/path-RMTY5Y5A.js.map +1 -0
- package/dist/patterns-cli.d.ts +160 -0
- package/dist/patterns-cli.js +29 -0
- package/dist/patterns-cli.js.map +1 -0
- package/dist/peers-6OSQ3NK6.js +44 -0
- package/dist/peers-6OSQ3NK6.js.map +1 -0
- package/dist/plugin-id.js +1 -0
- package/dist/policy-runtime.js +1 -0
- package/dist/{port-BADbLZU5.d.ts → port-hqGnoStS.d.ts} +6 -0
- package/dist/profiling.js +1 -0
- package/dist/purge-6ATBGT77.js +205 -0
- package/dist/purge-6ATBGT77.js.map +1 -0
- package/dist/qmd-recall-cache.d.ts +1 -1
- package/dist/qmd-recall-cache.js +1 -0
- package/dist/qmd.d.ts +2 -1
- package/dist/qmd.js +4 -3
- package/dist/reasoning-trace-recall.js +1 -0
- package/dist/reasoning-trace-types.js +1 -0
- package/dist/recall-audit-anomaly.js +1 -0
- package/dist/recall-audit.js +1 -0
- package/dist/recall-disclosure-escalation.d.ts +84 -0
- package/dist/recall-disclosure-escalation.js +14 -0
- package/dist/recall-disclosure-escalation.js.map +1 -0
- package/dist/recall-explain-renderer.js +4 -1
- package/dist/recall-mmr.js +1 -0
- package/dist/recall-qos.js +1 -0
- package/dist/recall-query-policy.js +1 -0
- package/dist/recall-state.d.ts +7 -0
- package/dist/recall-state.js +2 -1
- package/dist/recall-tag-filter.d.ts +56 -0
- package/dist/recall-tag-filter.js +14 -0
- package/dist/recall-tag-filter.js.map +1 -0
- package/dist/recall-tokenization.js +1 -0
- package/dist/recall-xray-cli.d.ts +9 -2
- package/dist/recall-xray-cli.js +9 -4
- package/dist/recall-xray-renderer.js +4 -1
- package/dist/recall-xray.d.ts +116 -2
- package/dist/recall-xray.js +9 -3
- package/dist/reconstruct.js +1 -0
- package/dist/release-changelog.js +2 -0
- package/dist/release-changelog.js.map +1 -1
- package/dist/relevance.js +1 -0
- package/dist/rerank.js +1 -0
- package/dist/{resolution-QBTDHTG7.js → resolution-YGIBORXI.js} +2 -1
- package/dist/{resolution-QBTDHTG7.js.map → resolution-YGIBORXI.js.map} +1 -1
- package/dist/resolve-auth-token.d.ts +51 -0
- package/dist/resolve-auth-token.js +12 -0
- package/dist/resolve-auth-token.js.map +1 -0
- package/dist/resolve-provider-secret.d.ts +9 -1
- package/dist/resolve-provider-secret.js +4 -1
- package/dist/resume-bundles.js +4 -3
- package/dist/retrieval-agents.d.ts +1 -1
- package/dist/retrieval-agents.js +1 -0
- package/dist/retrieval-tiers.js +1 -0
- package/dist/retrieval.js +1 -0
- package/dist/sanitize.js +1 -0
- package/dist/schemas.d.ts +37 -24
- package/dist/schemas.js +2 -1
- package/dist/sdk-compat.js +1 -0
- package/dist/sdk-compat.js.map +1 -1
- package/dist/secure-store-4R2GSO7S.js +156 -0
- package/dist/secure-store-4R2GSO7S.js.map +1 -0
- package/dist/semantic-chunking.js +1 -0
- package/dist/{semantic-consolidation-CxJU6MJk.d.ts → semantic-consolidation-ByBXb-sf.d.ts} +3 -3
- package/dist/semantic-consolidation.d.ts +2 -2
- package/dist/semantic-consolidation.js +11 -6
- package/dist/semantic-rule-promotion.d.ts +1 -1
- package/dist/semantic-rule-promotion.js +9 -6
- package/dist/semantic-rule-verifier.d.ts +1 -1
- package/dist/semantic-rule-verifier.js +9 -6
- package/dist/session-integrity.js +1 -0
- package/dist/session-observer-bands.js +1 -0
- package/dist/session-observer-state.js +1 -0
- package/dist/session-toggles.js +2 -0
- package/dist/session-toggles.js.map +1 -1
- package/dist/signal.js +1 -0
- package/dist/skills-registry.js +2 -0
- package/dist/skills-registry.js.map +1 -1
- package/dist/source-attribution.js +1 -0
- package/dist/state-NCHQ4TRG.js +8 -0
- package/dist/state-NCHQ4TRG.js.map +1 -0
- package/dist/state-store-3EH7HYIN.js +16 -0
- package/dist/state-store-3EH7HYIN.js.map +1 -0
- package/dist/storage.d.ts +76 -2
- package/dist/storage.js +8 -5
- package/dist/store-contract.js +1 -0
- package/dist/summarizer.js +5 -4
- package/dist/summary-snapshot.js +1 -0
- package/dist/temporal-index.js +1 -0
- package/dist/temporal-supersession.d.ts +1 -1
- package/dist/temporal-supersession.js +2 -1
- package/dist/temporal-validity.d.ts +52 -0
- package/dist/temporal-validity.js +14 -0
- package/dist/temporal-validity.js.map +1 -0
- package/dist/threading.js +1 -0
- package/dist/tier-migration.d.ts +2 -2
- package/dist/tier-migration.js +1 -0
- package/dist/tier-routing.js +1 -0
- package/dist/tier-stats-62ZVDFKS.js +152 -0
- package/dist/tier-stats-62ZVDFKS.js.map +1 -0
- package/dist/tmt.js +1 -0
- package/dist/tokens.js +1 -0
- package/dist/topics.js +1 -0
- package/dist/trace-C5ETWBEF.js +290 -0
- package/dist/trace-C5ETWBEF.js.map +1 -0
- package/dist/transcript.js +1 -0
- package/dist/trust-zones.js +1 -0
- package/dist/tui-RI7P6PBS.js +13 -0
- package/dist/tui-RI7P6PBS.js.map +1 -0
- package/dist/types-V3FJ26TF.js +30 -0
- package/dist/types-V3FJ26TF.js.map +1 -0
- package/dist/types.d.ts +634 -9
- package/dist/types.js +10 -3
- package/dist/utility-learner.js +1 -0
- package/dist/utility-runtime.js +1 -0
- package/dist/utility-telemetry.js +1 -0
- package/dist/verified-recall.js +9 -6
- package/dist/version-utils.js +1 -0
- package/dist/whitespace.js +1 -0
- package/dist/work-product-ledger.js +1 -0
- package/package.json +2 -1
- package/dist/access-service-Br8ZydTK.d.ts +0 -827
- package/dist/chunk-3OGMS3PE.js.map +0 -1
- package/dist/chunk-3YGHKTBF.js.map +0 -1
- package/dist/chunk-6PFRXT4K.js.map +0 -1
- package/dist/chunk-6YJHX2DL.js.map +0 -1
- package/dist/chunk-BECYBZLX.js.map +0 -1
- package/dist/chunk-C2EFFULQ.js.map +0 -1
- package/dist/chunk-CUPFXL3J.js.map +0 -1
- package/dist/chunk-DIXB44VE.js.map +0 -1
- package/dist/chunk-F5VP6YCB.js.map +0 -1
- package/dist/chunk-FVA6TGI3.js.map +0 -1
- package/dist/chunk-GA5P7RST.js.map +0 -1
- package/dist/chunk-KVBLZUKV.js.map +0 -1
- package/dist/chunk-L7IXWRYE.js.map +0 -1
- package/dist/chunk-LOIMBRDE.js.map +0 -1
- package/dist/chunk-LTCGGW2D.js +0 -14
- package/dist/chunk-LTCGGW2D.js.map +0 -1
- package/dist/chunk-NZLQTHS5.js.map +0 -1
- package/dist/chunk-OC5OXUQ4.js.map +0 -1
- package/dist/chunk-PVPWZSSI.js.map +0 -1
- package/dist/chunk-SPI27QT6.js.map +0 -1
- package/dist/chunk-STGWEHYR.js.map +0 -1
- package/dist/chunk-TP4FZJIZ.js.map +0 -1
- package/dist/chunk-ULYOGL6R.js.map +0 -1
- package/dist/chunk-UWB5LMWY.js.map +0 -1
- package/dist/chunk-VBVG2M5G.js.map +0 -1
- package/dist/chunk-VDX363PS.js.map +0 -1
- package/dist/chunk-WCLICCGB.js.map +0 -1
- package/dist/chunk-X6GF3FX2.js +0 -26
- package/dist/chunk-X6GF3FX2.js.map +0 -1
- package/dist/chunk-XXVWLXSG.js.map +0 -1
- package/dist/chunk-Y7R2XJ5Q.js.map +0 -1
- package/dist/chunk-ZAIM4TUE.js.map +0 -1
- /package/dist/{contradiction-review-WIUBAR52.js.map → capsule-cli.js.map} +0 -0
- /package/dist/{engine-72LSIWQP.js.map → capsule-crypto-5CYAGVC5.js.map} +0 -0
- /package/dist/{chunk-TMYO7B5P.js.map → chunk-47WOM4YW.js.map} +0 -0
- /package/dist/{chunk-DG6YMRDC.js.map → chunk-B2TL6GA2.js.map} +0 -0
- /package/dist/{chunk-AYXIPSZO.js.map → chunk-CRU27Q4J.js.map} +0 -0
- /package/dist/{chunk-RBBWYEFJ.js.map → chunk-G2WADRQ3.js.map} +0 -0
- /package/dist/{chunk-NBVAS5MT.js.map → chunk-R2L7SUX2.js.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/capsule-cli.ts"],"sourcesContent":["/**\n * Pure-function helpers for the `remnic capsule` CLI surface (issue #676 PR 6/6).\n *\n * All functions here are free of orchestrator / filesystem side-effects so\n * they can be unit-tested without booting the gateway (CLAUDE.md rules 14, 51).\n *\n * Responsibilities:\n * - Input validation + option parsing for every capsule sub-command flag.\n * - Rendering of `capsule list` and `capsule inspect` output in text /\n * markdown / json forms.\n *\n * The actual I/O (export, import, merge, directory listing, manifest read) is\n * wired in `cli.ts` because those operations need the orchestrator's config.\n */\n\nimport path from \"node:path\";\n\n// ---------------------------------------------------------------------------\n// Shared types\n// ---------------------------------------------------------------------------\n\nexport type CapsuleOutputFormat = \"text\" | \"markdown\" | \"json\";\n\n/**\n * Metadata entry returned by `capsule list` for a single archive file found\n * in the capsule store directory.\n */\nexport interface CapsuleListEntry {\n /** Capsule id extracted from the filename (slug before `.capsule.json.gz`). */\n id: string;\n /** Absolute path to the `.capsule.json.gz` archive. */\n archivePath: string;\n /** Absolute path to the sidecar `.manifest.json`, or null if missing. */\n manifestPath: string | null;\n /** `createdAt` ISO string from the sidecar manifest, or null if unreadable. */\n createdAt: string | null;\n /** `pluginVersion` from the sidecar manifest, or null. */\n pluginVersion: string | null;\n /** `files` array length from the sidecar manifest, or null. */\n fileCount: number | null;\n /** `capsule.description` from the sidecar manifest, or null. */\n description: string | null;\n}\n\n// ---------------------------------------------------------------------------\n// Validation helpers\n// ---------------------------------------------------------------------------\n\n/**\n * Validate and coerce the `--format` flag value.\n *\n * Rule 51: invalid values must throw with a listed-options error, not silently\n * fall back to a default.\n */\nexport function parseCapsuleOutputFormat(\n raw: unknown,\n): CapsuleOutputFormat {\n if (raw === undefined || raw === null) return \"text\";\n if (typeof raw !== \"string\" || raw.trim() === \"\") {\n throw new Error(\n `--format expects one of text, markdown, json; got ${JSON.stringify(raw)}`,\n );\n }\n const v = raw.trim() as CapsuleOutputFormat;\n if (v !== \"text\" && v !== \"markdown\" && v !== \"json\") {\n throw new Error(\n `--format expects one of text, markdown, json; got ${JSON.stringify(raw)}`,\n );\n }\n return v;\n}\n\n/**\n * Validate and coerce the `--mode` flag for `capsule import`.\n */\nexport function parseCapsuleImportMode(\n raw: unknown,\n): \"skip\" | \"overwrite\" | \"fork\" {\n if (raw === undefined || raw === null) return \"skip\";\n if (typeof raw !== \"string\" || raw.trim() === \"\") {\n throw new Error(\n `--mode expects one of skip, overwrite, fork; got ${JSON.stringify(raw)}`,\n );\n }\n const v = raw.trim();\n if (v !== \"skip\" && v !== \"overwrite\" && v !== \"fork\") {\n throw new Error(\n `--mode expects one of skip, overwrite, fork; got ${JSON.stringify(raw)}`,\n );\n }\n return v as \"skip\" | \"overwrite\" | \"fork\";\n}\n\n/**\n * Validate and coerce the `--conflict-mode` flag for `capsule merge`.\n */\nexport function parseCapsuleConflictMode(\n raw: unknown,\n): \"skip-conflicts\" | \"prefer-source\" | \"prefer-local\" {\n if (raw === undefined || raw === null) return \"skip-conflicts\";\n if (typeof raw !== \"string\" || raw.trim() === \"\") {\n throw new Error(\n `--conflict-mode expects one of skip-conflicts, prefer-source, prefer-local; got ${JSON.stringify(raw)}`,\n );\n }\n const v = raw.trim();\n if (v !== \"skip-conflicts\" && v !== \"prefer-source\" && v !== \"prefer-local\") {\n throw new Error(\n `--conflict-mode expects one of skip-conflicts, prefer-source, prefer-local; got ${JSON.stringify(raw)}`,\n );\n }\n return v as \"skip-conflicts\" | \"prefer-source\" | \"prefer-local\";\n}\n\n/**\n * Parse and validate the `--since` ISO-8601 string.\n *\n * Accepts date-only (`YYYY-MM-DD`) and date+time with explicit timezone\n * (`YYYY-MM-DDTHH:MM...Z` / `±HH:MM`). Rejects datetime without a timezone\n * designator (host-dependent interpretation, Rule 51).\n */\nconst ISO_8601_RE =\n /^\\d{4}-\\d{2}-\\d{2}(?:[Tt]\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d{1,9})?)?(?:[Zz]|[+-]\\d{2}:?\\d{2}))?$/;\n\nexport function parseCapsuleSince(raw: unknown): string | undefined {\n if (raw === undefined || raw === null) return undefined;\n if (typeof raw !== \"string\") {\n throw new Error(\n `--since expects an ISO 8601 timestamp; got ${JSON.stringify(raw)}`,\n );\n }\n if (raw.trim() === \"\") {\n throw new Error(`--since expects an ISO 8601 timestamp; received empty string`);\n }\n if (!ISO_8601_RE.test(raw)) {\n throw new Error(\n `--since is not a valid ISO 8601 timestamp: ${raw}. ` +\n `Accepted forms: YYYY-MM-DD, YYYY-MM-DDTHH:MM:SSZ, YYYY-MM-DDTHH:MM:SS±HH:MM`,\n );\n }\n const ms = Date.parse(raw);\n if (!Number.isFinite(ms)) {\n throw new Error(`--since is not a valid ISO 8601 timestamp: ${raw}`);\n }\n // Calendar overflow detection (same logic as capsule-export.ts parseSince).\n const m = /^(\\d{4})-(\\d{2})-(\\d{2})/.exec(raw);\n if (m) {\n const offsetMatch = /([+-])(\\d{2}):?(\\d{2})$/.exec(raw);\n let displayMs = ms;\n if (offsetMatch) {\n const sign = offsetMatch[1] === \"-\" ? -1 : 1;\n const offsetMin = sign * (Number(offsetMatch[2]) * 60 + Number(offsetMatch[3]));\n displayMs = ms + offsetMin * 60_000;\n }\n const dd = new Date(displayMs);\n if (\n dd.getUTCFullYear() !== Number(m[1]) ||\n dd.getUTCMonth() + 1 !== Number(m[2]) ||\n dd.getUTCDate() !== Number(m[3])\n ) {\n throw new Error(\n `--since: calendar overflow — ${raw} normalises to a different calendar date`,\n );\n }\n }\n return raw;\n}\n\n/**\n * Parse a comma-separated `--include-kinds` value into an array of non-empty\n * top-level directory names. Rejects values containing path separators.\n */\nexport function parseCapsuleIncludeKinds(raw: unknown): string[] | undefined {\n if (raw === undefined || raw === null) return undefined;\n if (typeof raw !== \"string\") {\n throw new Error(\n `--include-kinds expects a comma-separated list of directory names; got ${JSON.stringify(raw)}`,\n );\n }\n if (raw.trim() === \"\") {\n throw new Error(\n `--include-kinds expects at least one non-empty kind name`,\n );\n }\n const parts = raw\n .split(\",\")\n .map((s) => s.trim())\n .filter((s) => s.length > 0);\n if (parts.length === 0) {\n throw new Error(`--include-kinds expects at least one non-empty kind name`);\n }\n for (const p of parts) {\n if (p.includes(\"/\") || p.includes(\"\\\\\")) {\n throw new Error(\n `--include-kinds entries must be top-level directory names (no path separators): ${p}`,\n );\n }\n }\n // Deduplicate while preserving order.\n return [...new Set(parts)];\n}\n\n/**\n * Parse a comma-separated `--peers` value into an array of peer ids.\n */\nexport function parseCapsulePeers(raw: unknown): string[] | undefined {\n if (raw === undefined || raw === null) return undefined;\n if (typeof raw !== \"string\") {\n throw new Error(\n `--peers expects a comma-separated list of peer ids; got ${JSON.stringify(raw)}`,\n );\n }\n if (raw.trim() === \"\") {\n throw new Error(`--peers expects at least one non-empty peer id`);\n }\n const parts = raw\n .split(\",\")\n .map((s) => s.trim())\n .filter((s) => s.length > 0);\n if (parts.length === 0) {\n throw new Error(`--peers expects at least one non-empty peer id`);\n }\n for (const p of parts) {\n if (p.includes(\"/\") || p.includes(\"\\\\\") || p === \".\" || p === \"..\") {\n throw new Error(\n `--peers entries must be plain id tokens (no path separators): ${p}`,\n );\n }\n }\n return [...new Set(parts)];\n}\n\n// ---------------------------------------------------------------------------\n// Parsed option bags (returned by the parse helpers below and consumed by\n// cli.ts action handlers).\n// ---------------------------------------------------------------------------\n\nexport interface CapsuleExportOptions {\n name: string;\n out: string | undefined;\n since: string | undefined;\n includeKinds: string[] | undefined;\n peers: string[] | undefined;\n}\n\nexport interface CapsuleImportOptions {\n archive: string;\n mode: \"skip\" | \"overwrite\" | \"fork\";\n}\n\nexport interface CapsuleMergeOptions {\n archive: string;\n conflictMode: \"skip-conflicts\" | \"prefer-source\" | \"prefer-local\";\n}\n\nexport interface CapsuleListOptions {\n format: CapsuleOutputFormat;\n capsulesDir: string;\n}\n\nexport interface CapsuleInspectOptions {\n archive: string;\n format: CapsuleOutputFormat;\n}\n\n// ---------------------------------------------------------------------------\n// Option bag parsers (Rule 51: validate + throw on bad input, never silently\n// default to a value that hides user misconfiguration).\n// ---------------------------------------------------------------------------\n\nexport function parseCapsuleExportOptions(\n nameArg: unknown,\n opts: Record<string, unknown>,\n): CapsuleExportOptions {\n if (typeof nameArg !== \"string\" || nameArg.trim() === \"\") {\n throw new Error(\n `capsule export: <name> is required (e.g. \"remnic capsule export my-capsule\")`,\n );\n }\n const name = nameArg.trim();\n\n const out =\n typeof opts.out === \"string\" && opts.out.trim() !== \"\"\n ? opts.out.trim()\n : undefined;\n\n const since = parseCapsuleSince(opts.since);\n const includeKinds = parseCapsuleIncludeKinds(opts.includeKinds);\n const peers = parseCapsulePeers(opts.peers);\n\n return { name, out, since, includeKinds, peers };\n}\n\nexport function parseCapsuleImportOptions(\n archiveArg: unknown,\n opts: Record<string, unknown>,\n): CapsuleImportOptions {\n if (typeof archiveArg !== \"string\" || archiveArg.trim() === \"\") {\n throw new Error(\n `capsule import: <archive> path is required (e.g. \"remnic capsule import /path/to/my-capsule.capsule.json.gz\")`,\n );\n }\n const archive = archiveArg.trim();\n const mode = parseCapsuleImportMode(opts.mode);\n return { archive, mode };\n}\n\nexport function parseCapsuleMergeOptions(\n archiveArg: unknown,\n opts: Record<string, unknown>,\n): CapsuleMergeOptions {\n if (typeof archiveArg !== \"string\" || archiveArg.trim() === \"\") {\n throw new Error(\n `capsule merge: <archive> path is required (e.g. \"remnic capsule merge /path/to/my-capsule.capsule.json.gz\")`,\n );\n }\n const archive = archiveArg.trim();\n const conflictMode = parseCapsuleConflictMode(opts.conflictMode);\n return { archive, conflictMode };\n}\n\nexport function parseCapsuleListOptions(\n opts: Record<string, unknown>,\n defaultCapsulesDir: string,\n): CapsuleListOptions {\n const format = parseCapsuleOutputFormat(opts.format);\n const rawDir =\n typeof opts.dir === \"string\" && opts.dir.trim() !== \"\"\n ? opts.dir.trim()\n : undefined;\n const capsulesDir = rawDir ?? defaultCapsulesDir;\n return { format, capsulesDir };\n}\n\nexport function parseCapsuleInspectOptions(\n archiveArg: unknown,\n opts: Record<string, unknown>,\n): CapsuleInspectOptions {\n if (typeof archiveArg !== \"string\" || archiveArg.trim() === \"\") {\n throw new Error(\n `capsule inspect: <archive> path is required (e.g. \"remnic capsule inspect my-capsule.capsule.json.gz\")`,\n );\n }\n const archive = archiveArg.trim();\n const format = parseCapsuleOutputFormat(opts.format);\n return { archive, format };\n}\n\n// ---------------------------------------------------------------------------\n// Default capsules directory\n// ---------------------------------------------------------------------------\n\n/**\n * Return the default capsule store directory for a given memory root.\n * This mirrors the `outDir` default in `exportCapsule` (`<root>/.capsules`)\n * so that `capsule list` discovers archives written by `capsule export`\n * without extra configuration.\n *\n * For `capsule list`, the POSIX conventional path is:\n * `<memoryDir>/.capsules`\n *\n * Operators can override it with `--dir <path>` at runtime.\n */\nexport function defaultCapsulesDir(memoryDir: string): string {\n return path.join(memoryDir, \".capsules\");\n}\n\n// ---------------------------------------------------------------------------\n// Renderers\n// ---------------------------------------------------------------------------\n\nfunction escapeMarkdownCell(v: string): string {\n return v.replace(/\\\\/g, \"\\\\\\\\\").replace(/\\|/g, \"\\\\|\");\n}\n\n/**\n * Render the `capsule list` output.\n */\nexport function renderCapsuleList(\n entries: CapsuleListEntry[],\n format: CapsuleOutputFormat,\n): string {\n if (format === \"json\") {\n return JSON.stringify({ capsules: entries }, null, 2);\n }\n\n if (entries.length === 0) {\n if (format === \"markdown\") return \"_No capsule archives found._\\n\";\n return \"No capsule archives found.\\n\";\n }\n\n if (format === \"markdown\") {\n const rows = entries.map((e) => {\n const id = escapeMarkdownCell(e.id);\n const date = escapeMarkdownCell(e.createdAt?.slice(0, 10) ?? \"—\");\n const ver = escapeMarkdownCell(e.pluginVersion ?? \"—\");\n const files = e.fileCount !== null ? String(e.fileCount) : \"—\";\n const desc = escapeMarkdownCell(\n e.description != null && e.description.trim() !== \"\"\n ? e.description.trim()\n : \"—\",\n );\n return `| \\`${id}\\` | ${date} | ${ver} | ${files} | ${desc} |`;\n });\n return [\n \"# Capsule archives\",\n \"\",\n \"| ID | Created | Version | Files | Description |\",\n \"| -- | ------- | ------- | ----- | ----------- |\",\n ...rows,\n \"\",\n ].join(\"\\n\");\n }\n\n // text\n const lines = entries.map((e) => {\n const date = e.createdAt?.slice(0, 10) ?? \"—\";\n const files =\n e.fileCount !== null ? `${e.fileCount} file${e.fileCount !== 1 ? \"s\" : \"\"}` : \"? files\";\n const desc =\n e.description != null && e.description.trim() !== \"\"\n ? ` ${e.description.trim()}`\n : \"\";\n return `${e.id} [${date}] [${files}]${desc}`;\n });\n return lines.join(\"\\n\") + \"\\n\";\n}\n\n/**\n * Render the `capsule inspect` output from a manifest object.\n */\nexport function renderCapsuleInspect(\n manifest: CapsuleInspectData,\n format: CapsuleOutputFormat,\n): string {\n if (format === \"json\") {\n return JSON.stringify(manifest, null, 2);\n }\n\n const {\n capsuleId,\n version,\n schemaVersion,\n createdAt,\n pluginVersion,\n fileCount,\n includesTranscripts,\n description,\n parentCapsule,\n retrievalPolicy,\n includes,\n topFiles,\n } = manifest;\n\n if (format === \"markdown\") {\n const policyLines = Object.entries(retrievalPolicy.tierWeights ?? {}).map(\n ([k, v]) => ` - ${k}: ${v}`,\n );\n const policyBlock =\n policyLines.length > 0\n ? policyLines.join(\"\\n\")\n : \" _(no tier weight overrides)_\";\n\n return [\n `# Capsule: \\`${capsuleId}\\``,\n \"\",\n `**Version:** ${version} `,\n `**Schema version:** ${schemaVersion} `,\n `**Created:** ${createdAt ?? \"—\"} `,\n `**Plugin version:** ${pluginVersion ?? \"—\"} `,\n `**Files:** ${fileCount} `,\n `**Includes transcripts:** ${includesTranscripts ? \"yes\" : \"no\"} `,\n `**Parent capsule:** ${parentCapsule ?? \"_none_\"} `,\n `**Description:** ${description && description.trim() !== \"\" ? description.trim() : \"_none_\"} `,\n \"\",\n \"## Includes\",\n `- taxonomy: ${includes.taxonomy ? \"yes\" : \"no\"}`,\n `- identityAnchors: ${includes.identityAnchors ? \"yes\" : \"no\"}`,\n `- peerProfiles: ${includes.peerProfiles ? \"yes\" : \"no\"}`,\n `- procedural: ${includes.procedural ? \"yes\" : \"no\"}`,\n \"\",\n \"## Retrieval policy\",\n `- directAnswerEnabled: ${retrievalPolicy.directAnswerEnabled ? \"yes\" : \"no\"}`,\n `- tierWeights:`,\n policyBlock,\n \"\",\n ...(topFiles.length > 0\n ? [\n `## Files (${fileCount} total, showing first ${topFiles.length})`,\n ...topFiles.map((f) => `- \\`${f}\\``),\n \"\",\n ]\n : [`## Files (${fileCount} total)`, \"_Empty capsule._\", \"\"]),\n ].join(\"\\n\");\n }\n\n // text\n const lines: string[] = [\n `Capsule: ${capsuleId}`,\n ` version: ${version}`,\n ` schema: ${schemaVersion}`,\n ` created: ${createdAt ?? \"—\"}`,\n ` plugin: ${pluginVersion ?? \"—\"}`,\n ` files: ${fileCount}`,\n ` transcripts: ${includesTranscripts ? \"yes\" : \"no\"}`,\n ` parent: ${parentCapsule ?? \"(none)\"}`,\n ` description: ${description && description.trim() !== \"\" ? description.trim() : \"(none)\"}`,\n \"\",\n ` includes.taxonomy: ${includes.taxonomy ? \"yes\" : \"no\"}`,\n ` includes.identityAnchors: ${includes.identityAnchors ? \"yes\" : \"no\"}`,\n ` includes.peerProfiles: ${includes.peerProfiles ? \"yes\" : \"no\"}`,\n ` includes.procedural: ${includes.procedural ? \"yes\" : \"no\"}`,\n \"\",\n ` policy.directAnswer: ${retrievalPolicy.directAnswerEnabled ? \"yes\" : \"no\"}`,\n ];\n\n const weights = Object.entries(retrievalPolicy.tierWeights ?? {});\n if (weights.length > 0) {\n for (const [k, v] of weights) {\n lines.push(` policy.tierWeight[${k}]: ${v}`);\n }\n } else {\n lines.push(` policy.tierWeights: (none)`);\n }\n\n if (topFiles.length > 0) {\n lines.push(\"\", ` files (first ${topFiles.length} of ${fileCount}):`);\n for (const f of topFiles) {\n lines.push(` ${f}`);\n }\n }\n\n return lines.join(\"\\n\") + \"\\n\";\n}\n\n/**\n * Data shape consumed by {@link renderCapsuleInspect}.\n * Populated by the cli.ts action handler from the parsed manifest.\n */\nexport interface CapsuleInspectData {\n capsuleId: string;\n version: string;\n schemaVersion: string;\n createdAt: string | null;\n pluginVersion: string | null;\n fileCount: number;\n includesTranscripts: boolean;\n description: string;\n parentCapsule: string | null;\n retrievalPolicy: {\n tierWeights: Record<string, number>;\n directAnswerEnabled: boolean;\n };\n includes: {\n taxonomy: boolean;\n identityAnchors: boolean;\n peerProfiles: boolean;\n procedural: boolean;\n };\n /** First N file paths from manifest.files (for preview). */\n topFiles: string[];\n}\n"],"mappings":";AAeA,OAAO,UAAU;AAuCV,SAAS,yBACd,KACqB;AACrB,MAAI,QAAQ,UAAa,QAAQ,KAAM,QAAO;AAC9C,MAAI,OAAO,QAAQ,YAAY,IAAI,KAAK,MAAM,IAAI;AAChD,UAAM,IAAI;AAAA,MACR,qDAAqD,KAAK,UAAU,GAAG,CAAC;AAAA,IAC1E;AAAA,EACF;AACA,QAAM,IAAI,IAAI,KAAK;AACnB,MAAI,MAAM,UAAU,MAAM,cAAc,MAAM,QAAQ;AACpD,UAAM,IAAI;AAAA,MACR,qDAAqD,KAAK,UAAU,GAAG,CAAC;AAAA,IAC1E;AAAA,EACF;AACA,SAAO;AACT;AAKO,SAAS,uBACd,KAC+B;AAC/B,MAAI,QAAQ,UAAa,QAAQ,KAAM,QAAO;AAC9C,MAAI,OAAO,QAAQ,YAAY,IAAI,KAAK,MAAM,IAAI;AAChD,UAAM,IAAI;AAAA,MACR,oDAAoD,KAAK,UAAU,GAAG,CAAC;AAAA,IACzE;AAAA,EACF;AACA,QAAM,IAAI,IAAI,KAAK;AACnB,MAAI,MAAM,UAAU,MAAM,eAAe,MAAM,QAAQ;AACrD,UAAM,IAAI;AAAA,MACR,oDAAoD,KAAK,UAAU,GAAG,CAAC;AAAA,IACzE;AAAA,EACF;AACA,SAAO;AACT;AAKO,SAAS,yBACd,KACqD;AACrD,MAAI,QAAQ,UAAa,QAAQ,KAAM,QAAO;AAC9C,MAAI,OAAO,QAAQ,YAAY,IAAI,KAAK,MAAM,IAAI;AAChD,UAAM,IAAI;AAAA,MACR,mFAAmF,KAAK,UAAU,GAAG,CAAC;AAAA,IACxG;AAAA,EACF;AACA,QAAM,IAAI,IAAI,KAAK;AACnB,MAAI,MAAM,oBAAoB,MAAM,mBAAmB,MAAM,gBAAgB;AAC3E,UAAM,IAAI;AAAA,MACR,mFAAmF,KAAK,UAAU,GAAG,CAAC;AAAA,IACxG;AAAA,EACF;AACA,SAAO;AACT;AASA,IAAM,cACJ;AAEK,SAAS,kBAAkB,KAAkC;AAClE,MAAI,QAAQ,UAAa,QAAQ,KAAM,QAAO;AAC9C,MAAI,OAAO,QAAQ,UAAU;AAC3B,UAAM,IAAI;AAAA,MACR,8CAA8C,KAAK,UAAU,GAAG,CAAC;AAAA,IACnE;AAAA,EACF;AACA,MAAI,IAAI,KAAK,MAAM,IAAI;AACrB,UAAM,IAAI,MAAM,8DAA8D;AAAA,EAChF;AACA,MAAI,CAAC,YAAY,KAAK,GAAG,GAAG;AAC1B,UAAM,IAAI;AAAA,MACR,8CAA8C,GAAG;AAAA,IAEnD;AAAA,EACF;AACA,QAAM,KAAK,KAAK,MAAM,GAAG;AACzB,MAAI,CAAC,OAAO,SAAS,EAAE,GAAG;AACxB,UAAM,IAAI,MAAM,8CAA8C,GAAG,EAAE;AAAA,EACrE;AAEA,QAAM,IAAI,2BAA2B,KAAK,GAAG;AAC7C,MAAI,GAAG;AACL,UAAM,cAAc,0BAA0B,KAAK,GAAG;AACtD,QAAI,YAAY;AAChB,QAAI,aAAa;AACf,YAAM,OAAO,YAAY,CAAC,MAAM,MAAM,KAAK;AAC3C,YAAM,YAAY,QAAQ,OAAO,YAAY,CAAC,CAAC,IAAI,KAAK,OAAO,YAAY,CAAC,CAAC;AAC7E,kBAAY,KAAK,YAAY;AAAA,IAC/B;AACA,UAAM,KAAK,IAAI,KAAK,SAAS;AAC7B,QACE,GAAG,eAAe,MAAM,OAAO,EAAE,CAAC,CAAC,KACnC,GAAG,YAAY,IAAI,MAAM,OAAO,EAAE,CAAC,CAAC,KACpC,GAAG,WAAW,MAAM,OAAO,EAAE,CAAC,CAAC,GAC/B;AACA,YAAM,IAAI;AAAA,QACR,qCAAgC,GAAG;AAAA,MACrC;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAMO,SAAS,yBAAyB,KAAoC;AAC3E,MAAI,QAAQ,UAAa,QAAQ,KAAM,QAAO;AAC9C,MAAI,OAAO,QAAQ,UAAU;AAC3B,UAAM,IAAI;AAAA,MACR,0EAA0E,KAAK,UAAU,GAAG,CAAC;AAAA,IAC/F;AAAA,EACF;AACA,MAAI,IAAI,KAAK,MAAM,IAAI;AACrB,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACA,QAAM,QAAQ,IACX,MAAM,GAAG,EACT,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,EACnB,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC;AAC7B,MAAI,MAAM,WAAW,GAAG;AACtB,UAAM,IAAI,MAAM,0DAA0D;AAAA,EAC5E;AACA,aAAW,KAAK,OAAO;AACrB,QAAI,EAAE,SAAS,GAAG,KAAK,EAAE,SAAS,IAAI,GAAG;AACvC,YAAM,IAAI;AAAA,QACR,mFAAmF,CAAC;AAAA,MACtF;AAAA,IACF;AAAA,EACF;AAEA,SAAO,CAAC,GAAG,IAAI,IAAI,KAAK,CAAC;AAC3B;AAKO,SAAS,kBAAkB,KAAoC;AACpE,MAAI,QAAQ,UAAa,QAAQ,KAAM,QAAO;AAC9C,MAAI,OAAO,QAAQ,UAAU;AAC3B,UAAM,IAAI;AAAA,MACR,2DAA2D,KAAK,UAAU,GAAG,CAAC;AAAA,IAChF;AAAA,EACF;AACA,MAAI,IAAI,KAAK,MAAM,IAAI;AACrB,UAAM,IAAI,MAAM,gDAAgD;AAAA,EAClE;AACA,QAAM,QAAQ,IACX,MAAM,GAAG,EACT,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,EACnB,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC;AAC7B,MAAI,MAAM,WAAW,GAAG;AACtB,UAAM,IAAI,MAAM,gDAAgD;AAAA,EAClE;AACA,aAAW,KAAK,OAAO;AACrB,QAAI,EAAE,SAAS,GAAG,KAAK,EAAE,SAAS,IAAI,KAAK,MAAM,OAAO,MAAM,MAAM;AAClE,YAAM,IAAI;AAAA,QACR,iEAAiE,CAAC;AAAA,MACpE;AAAA,IACF;AAAA,EACF;AACA,SAAO,CAAC,GAAG,IAAI,IAAI,KAAK,CAAC;AAC3B;AAwCO,SAAS,0BACd,SACA,MACsB;AACtB,MAAI,OAAO,YAAY,YAAY,QAAQ,KAAK,MAAM,IAAI;AACxD,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACA,QAAM,OAAO,QAAQ,KAAK;AAE1B,QAAM,MACJ,OAAO,KAAK,QAAQ,YAAY,KAAK,IAAI,KAAK,MAAM,KAChD,KAAK,IAAI,KAAK,IACd;AAEN,QAAM,QAAQ,kBAAkB,KAAK,KAAK;AAC1C,QAAM,eAAe,yBAAyB,KAAK,YAAY;AAC/D,QAAM,QAAQ,kBAAkB,KAAK,KAAK;AAE1C,SAAO,EAAE,MAAM,KAAK,OAAO,cAAc,MAAM;AACjD;AAEO,SAAS,0BACd,YACA,MACsB;AACtB,MAAI,OAAO,eAAe,YAAY,WAAW,KAAK,MAAM,IAAI;AAC9D,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACA,QAAM,UAAU,WAAW,KAAK;AAChC,QAAM,OAAO,uBAAuB,KAAK,IAAI;AAC7C,SAAO,EAAE,SAAS,KAAK;AACzB;AAEO,SAAS,yBACd,YACA,MACqB;AACrB,MAAI,OAAO,eAAe,YAAY,WAAW,KAAK,MAAM,IAAI;AAC9D,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACA,QAAM,UAAU,WAAW,KAAK;AAChC,QAAM,eAAe,yBAAyB,KAAK,YAAY;AAC/D,SAAO,EAAE,SAAS,aAAa;AACjC;AAEO,SAAS,wBACd,MACAA,qBACoB;AACpB,QAAM,SAAS,yBAAyB,KAAK,MAAM;AACnD,QAAM,SACJ,OAAO,KAAK,QAAQ,YAAY,KAAK,IAAI,KAAK,MAAM,KAChD,KAAK,IAAI,KAAK,IACd;AACN,QAAM,cAAc,UAAUA;AAC9B,SAAO,EAAE,QAAQ,YAAY;AAC/B;AAEO,SAAS,2BACd,YACA,MACuB;AACvB,MAAI,OAAO,eAAe,YAAY,WAAW,KAAK,MAAM,IAAI;AAC9D,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACA,QAAM,UAAU,WAAW,KAAK;AAChC,QAAM,SAAS,yBAAyB,KAAK,MAAM;AACnD,SAAO,EAAE,SAAS,OAAO;AAC3B;AAiBO,SAAS,mBAAmB,WAA2B;AAC5D,SAAO,KAAK,KAAK,WAAW,WAAW;AACzC;AAMA,SAAS,mBAAmB,GAAmB;AAC7C,SAAO,EAAE,QAAQ,OAAO,MAAM,EAAE,QAAQ,OAAO,KAAK;AACtD;AAKO,SAAS,kBACd,SACA,QACQ;AACR,MAAI,WAAW,QAAQ;AACrB,WAAO,KAAK,UAAU,EAAE,UAAU,QAAQ,GAAG,MAAM,CAAC;AAAA,EACtD;AAEA,MAAI,QAAQ,WAAW,GAAG;AACxB,QAAI,WAAW,WAAY,QAAO;AAClC,WAAO;AAAA,EACT;AAEA,MAAI,WAAW,YAAY;AACzB,UAAM,OAAO,QAAQ,IAAI,CAAC,MAAM;AAC9B,YAAM,KAAK,mBAAmB,EAAE,EAAE;AAClC,YAAM,OAAO,mBAAmB,EAAE,WAAW,MAAM,GAAG,EAAE,KAAK,QAAG;AAChE,YAAM,MAAM,mBAAmB,EAAE,iBAAiB,QAAG;AACrD,YAAM,QAAQ,EAAE,cAAc,OAAO,OAAO,EAAE,SAAS,IAAI;AAC3D,YAAM,OAAO;AAAA,QACX,EAAE,eAAe,QAAQ,EAAE,YAAY,KAAK,MAAM,KAC9C,EAAE,YAAY,KAAK,IACnB;AAAA,MACN;AACA,aAAO,OAAO,EAAE,QAAQ,IAAI,MAAM,GAAG,MAAM,KAAK,MAAM,IAAI;AAAA,IAC5D,CAAC;AACD,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,GAAG;AAAA,MACH;AAAA,IACF,EAAE,KAAK,IAAI;AAAA,EACb;AAGA,QAAM,QAAQ,QAAQ,IAAI,CAAC,MAAM;AAC/B,UAAM,OAAO,EAAE,WAAW,MAAM,GAAG,EAAE,KAAK;AAC1C,UAAM,QACJ,EAAE,cAAc,OAAO,GAAG,EAAE,SAAS,QAAQ,EAAE,cAAc,IAAI,MAAM,EAAE,KAAK;AAChF,UAAM,OACJ,EAAE,eAAe,QAAQ,EAAE,YAAY,KAAK,MAAM,KAC9C,KAAK,EAAE,YAAY,KAAK,CAAC,KACzB;AACN,WAAO,GAAG,EAAE,EAAE,MAAM,IAAI,MAAM,KAAK,IAAI,IAAI;AAAA,EAC7C,CAAC;AACD,SAAO,MAAM,KAAK,IAAI,IAAI;AAC5B;AAKO,SAAS,qBACd,UACA,QACQ;AACR,MAAI,WAAW,QAAQ;AACrB,WAAO,KAAK,UAAU,UAAU,MAAM,CAAC;AAAA,EACzC;AAEA,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI;AAEJ,MAAI,WAAW,YAAY;AACzB,UAAM,cAAc,OAAO,QAAQ,gBAAgB,eAAe,CAAC,CAAC,EAAE;AAAA,MACpE,CAAC,CAAC,GAAG,CAAC,MAAM,OAAO,CAAC,KAAK,CAAC;AAAA,IAC5B;AACA,UAAM,cACJ,YAAY,SAAS,IACjB,YAAY,KAAK,IAAI,IACrB;AAEN,WAAO;AAAA,MACL,gBAAgB,SAAS;AAAA,MACzB;AAAA,MACA,gBAAgB,OAAO;AAAA,MACvB,uBAAuB,aAAa;AAAA,MACpC,gBAAgB,aAAa,QAAG;AAAA,MAChC,uBAAuB,iBAAiB,QAAG;AAAA,MAC3C,cAAc,SAAS;AAAA,MACvB,6BAA6B,sBAAsB,QAAQ,IAAI;AAAA,MAC/D,uBAAuB,iBAAiB,QAAQ;AAAA,MAChD,oBAAoB,eAAe,YAAY,KAAK,MAAM,KAAK,YAAY,KAAK,IAAI,QAAQ;AAAA,MAC5F;AAAA,MACA;AAAA,MACA,eAAe,SAAS,WAAW,QAAQ,IAAI;AAAA,MAC/C,sBAAsB,SAAS,kBAAkB,QAAQ,IAAI;AAAA,MAC7D,mBAAmB,SAAS,eAAe,QAAQ,IAAI;AAAA,MACvD,iBAAiB,SAAS,aAAa,QAAQ,IAAI;AAAA,MACnD;AAAA,MACA;AAAA,MACA,0BAA0B,gBAAgB,sBAAsB,QAAQ,IAAI;AAAA,MAC5E;AAAA,MACA;AAAA,MACA;AAAA,MACA,GAAI,SAAS,SAAS,IAClB;AAAA,QACE,aAAa,SAAS,yBAAyB,SAAS,MAAM;AAAA,QAC9D,GAAG,SAAS,IAAI,CAAC,MAAM,OAAO,CAAC,IAAI;AAAA,QACnC;AAAA,MACF,IACA,CAAC,aAAa,SAAS,WAAW,oBAAoB,EAAE;AAAA,IAC9D,EAAE,KAAK,IAAI;AAAA,EACb;AAGA,QAAM,QAAkB;AAAA,IACtB,YAAY,SAAS;AAAA,IACrB,uBAAuB,OAAO;AAAA,IAC9B,uBAAuB,aAAa;AAAA,IACpC,uBAAuB,aAAa,QAAG;AAAA,IACvC,uBAAuB,iBAAiB,QAAG;AAAA,IAC3C,uBAAuB,SAAS;AAAA,IAChC,uBAAuB,sBAAsB,QAAQ,IAAI;AAAA,IACzD,uBAAuB,iBAAiB,QAAQ;AAAA,IAChD,uBAAuB,eAAe,YAAY,KAAK,MAAM,KAAK,YAAY,KAAK,IAAI,QAAQ;AAAA,IAC/F;AAAA,IACA,+BAA+B,SAAS,WAAW,QAAQ,IAAI;AAAA,IAC/D,+BAA+B,SAAS,kBAAkB,QAAQ,IAAI;AAAA,IACtE,+BAA+B,SAAS,eAAe,QAAQ,IAAI;AAAA,IACnE,+BAA+B,SAAS,aAAa,QAAQ,IAAI;AAAA,IACjE;AAAA,IACA,4BAA4B,gBAAgB,sBAAsB,QAAQ,IAAI;AAAA,EAChF;AAEA,QAAM,UAAU,OAAO,QAAQ,gBAAgB,eAAe,CAAC,CAAC;AAChE,MAAI,QAAQ,SAAS,GAAG;AACtB,eAAW,CAAC,GAAG,CAAC,KAAK,SAAS;AAC5B,YAAM,KAAK,uBAAuB,CAAC,MAAM,CAAC,EAAE;AAAA,IAC9C;AAAA,EACF,OAAO;AACL,UAAM,KAAK,iCAAiC;AAAA,EAC9C;AAEA,MAAI,SAAS,SAAS,GAAG;AACvB,UAAM,KAAK,IAAI,kBAAkB,SAAS,MAAM,OAAO,SAAS,IAAI;AACpE,eAAW,KAAK,UAAU;AACxB,YAAM,KAAK,OAAO,CAAC,EAAE;AAAA,IACvB;AAAA,EACF;AAEA,SAAO,MAAM,KAAK,IAAI,IAAI;AAC5B;","names":["defaultCapsulesDir"]}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
// src/evidence-pack.ts
|
|
2
|
+
var DEFAULT_MAX_ITEM_CHARS = 1200;
|
|
3
|
+
function buildEvidencePack(items, options) {
|
|
4
|
+
const budget = normalizePositiveInteger(options.maxChars);
|
|
5
|
+
if (budget <= 0 || items.length === 0) {
|
|
6
|
+
return "";
|
|
7
|
+
}
|
|
8
|
+
const maxItemChars = normalizePositiveInteger(
|
|
9
|
+
options.maxItemChars ?? DEFAULT_MAX_ITEM_CHARS
|
|
10
|
+
);
|
|
11
|
+
if (maxItemChars <= 0) {
|
|
12
|
+
return "";
|
|
13
|
+
}
|
|
14
|
+
const title = options.title ?? "Evidence";
|
|
15
|
+
const lines = [`## ${title}`];
|
|
16
|
+
const seenIds = /* @__PURE__ */ new Set();
|
|
17
|
+
const seenContent = /* @__PURE__ */ new Set();
|
|
18
|
+
let used = lines[0].length;
|
|
19
|
+
for (const item of items) {
|
|
20
|
+
const content = item.content.trim();
|
|
21
|
+
if (!content) continue;
|
|
22
|
+
const id = item.id ?? evidenceItemFallbackId(item);
|
|
23
|
+
if (id && seenIds.has(id)) continue;
|
|
24
|
+
const contentKey = normalizeEvidenceContent(content);
|
|
25
|
+
if (seenContent.has(contentKey)) continue;
|
|
26
|
+
const label = formatEvidenceLabel(item);
|
|
27
|
+
const clipped = clipText(content, maxItemChars);
|
|
28
|
+
const block = `${label}: ${clipped}`;
|
|
29
|
+
const separatorLength = lines.length > 0 ? 2 : 0;
|
|
30
|
+
const remaining = budget - used - separatorLength;
|
|
31
|
+
if (remaining <= 0) break;
|
|
32
|
+
const finalBlock = block.length > remaining ? clipText(block, remaining) : block;
|
|
33
|
+
if (!finalBlock.trim()) break;
|
|
34
|
+
lines.push(finalBlock);
|
|
35
|
+
used += separatorLength + finalBlock.length;
|
|
36
|
+
if (id) seenIds.add(id);
|
|
37
|
+
seenContent.add(contentKey);
|
|
38
|
+
}
|
|
39
|
+
return lines.length === 1 ? "" : lines.join("\n\n");
|
|
40
|
+
}
|
|
41
|
+
function normalizePositiveInteger(value) {
|
|
42
|
+
if (!Number.isFinite(value) || value <= 0) {
|
|
43
|
+
return 0;
|
|
44
|
+
}
|
|
45
|
+
return Math.floor(value);
|
|
46
|
+
}
|
|
47
|
+
function evidenceItemFallbackId(item) {
|
|
48
|
+
if (item.sessionId && typeof item.turnIndex === "number") {
|
|
49
|
+
return `${item.sessionId}:${item.turnIndex}`;
|
|
50
|
+
}
|
|
51
|
+
return void 0;
|
|
52
|
+
}
|
|
53
|
+
function normalizeEvidenceContent(content) {
|
|
54
|
+
return content.toLowerCase().replace(/\s+/g, " ").trim();
|
|
55
|
+
}
|
|
56
|
+
function formatEvidenceLabel(item) {
|
|
57
|
+
const parts = [];
|
|
58
|
+
if (item.sessionId) parts.push(item.sessionId);
|
|
59
|
+
if (typeof item.turnIndex === "number") parts.push(`turn ${item.turnIndex}`);
|
|
60
|
+
if (item.role) parts.push(item.role);
|
|
61
|
+
if (typeof item.score === "number" && Number.isFinite(item.score)) {
|
|
62
|
+
parts.push(`score ${item.score.toFixed(3)}`);
|
|
63
|
+
}
|
|
64
|
+
return parts.length > 0 ? `[${parts.join(", ")}]` : "[evidence]";
|
|
65
|
+
}
|
|
66
|
+
function clipText(text, maxChars) {
|
|
67
|
+
if (text.length <= maxChars) {
|
|
68
|
+
return text;
|
|
69
|
+
}
|
|
70
|
+
if (maxChars <= 1) {
|
|
71
|
+
return text.slice(0, maxChars);
|
|
72
|
+
}
|
|
73
|
+
if (maxChars <= 3) {
|
|
74
|
+
return text.slice(0, maxChars);
|
|
75
|
+
}
|
|
76
|
+
return `${text.slice(0, maxChars - 3).trimEnd()}...`;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
export {
|
|
80
|
+
buildEvidencePack
|
|
81
|
+
};
|
|
82
|
+
//# sourceMappingURL=chunk-74WWN7ZW.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/evidence-pack.ts"],"sourcesContent":["export interface EvidencePackItem {\n id?: string;\n sessionId?: string;\n turnIndex?: number;\n role?: string;\n content: string;\n score?: number;\n}\n\nexport interface EvidencePackOptions {\n title?: string;\n maxChars: number;\n maxItemChars?: number;\n}\n\nconst DEFAULT_MAX_ITEM_CHARS = 1_200;\n\nexport function buildEvidencePack(\n items: readonly EvidencePackItem[],\n options: EvidencePackOptions,\n): string {\n const budget = normalizePositiveInteger(options.maxChars);\n if (budget <= 0 || items.length === 0) {\n return \"\";\n }\n\n const maxItemChars = normalizePositiveInteger(\n options.maxItemChars ?? DEFAULT_MAX_ITEM_CHARS,\n );\n if (maxItemChars <= 0) {\n return \"\";\n }\n\n const title = options.title ?? \"Evidence\";\n const lines: string[] = [`## ${title}`];\n const seenIds = new Set<string>();\n const seenContent = new Set<string>();\n let used = lines[0]!.length;\n\n for (const item of items) {\n const content = item.content.trim();\n if (!content) continue;\n\n const id = item.id ?? evidenceItemFallbackId(item);\n if (id && seenIds.has(id)) continue;\n\n const contentKey = normalizeEvidenceContent(content);\n if (seenContent.has(contentKey)) continue;\n\n const label = formatEvidenceLabel(item);\n const clipped = clipText(content, maxItemChars);\n const block = `${label}: ${clipped}`;\n const separatorLength = lines.length > 0 ? 2 : 0;\n const remaining = budget - used - separatorLength;\n if (remaining <= 0) break;\n\n const finalBlock =\n block.length > remaining ? clipText(block, remaining) : block;\n if (!finalBlock.trim()) break;\n\n lines.push(finalBlock);\n used += separatorLength + finalBlock.length;\n if (id) seenIds.add(id);\n seenContent.add(contentKey);\n }\n\n return lines.length === 1 ? \"\" : lines.join(\"\\n\\n\");\n}\n\nfunction normalizePositiveInteger(value: number): number {\n if (!Number.isFinite(value) || value <= 0) {\n return 0;\n }\n return Math.floor(value);\n}\n\nfunction evidenceItemFallbackId(item: EvidencePackItem): string | undefined {\n if (item.sessionId && typeof item.turnIndex === \"number\") {\n return `${item.sessionId}:${item.turnIndex}`;\n }\n return undefined;\n}\n\nfunction normalizeEvidenceContent(content: string): string {\n return content.toLowerCase().replace(/\\s+/g, \" \").trim();\n}\n\nfunction formatEvidenceLabel(item: EvidencePackItem): string {\n const parts: string[] = [];\n if (item.sessionId) parts.push(item.sessionId);\n if (typeof item.turnIndex === \"number\") parts.push(`turn ${item.turnIndex}`);\n if (item.role) parts.push(item.role);\n if (typeof item.score === \"number\" && Number.isFinite(item.score)) {\n parts.push(`score ${item.score.toFixed(3)}`);\n }\n return parts.length > 0 ? `[${parts.join(\", \")}]` : \"[evidence]\";\n}\n\nfunction clipText(text: string, maxChars: number): string {\n if (text.length <= maxChars) {\n return text;\n }\n if (maxChars <= 1) {\n return text.slice(0, maxChars);\n }\n if (maxChars <= 3) {\n return text.slice(0, maxChars);\n }\n return `${text.slice(0, maxChars - 3).trimEnd()}...`;\n}\n"],"mappings":";AAeA,IAAM,yBAAyB;AAExB,SAAS,kBACd,OACA,SACQ;AACR,QAAM,SAAS,yBAAyB,QAAQ,QAAQ;AACxD,MAAI,UAAU,KAAK,MAAM,WAAW,GAAG;AACrC,WAAO;AAAA,EACT;AAEA,QAAM,eAAe;AAAA,IACnB,QAAQ,gBAAgB;AAAA,EAC1B;AACA,MAAI,gBAAgB,GAAG;AACrB,WAAO;AAAA,EACT;AAEA,QAAM,QAAQ,QAAQ,SAAS;AAC/B,QAAM,QAAkB,CAAC,MAAM,KAAK,EAAE;AACtC,QAAM,UAAU,oBAAI,IAAY;AAChC,QAAM,cAAc,oBAAI,IAAY;AACpC,MAAI,OAAO,MAAM,CAAC,EAAG;AAErB,aAAW,QAAQ,OAAO;AACxB,UAAM,UAAU,KAAK,QAAQ,KAAK;AAClC,QAAI,CAAC,QAAS;AAEd,UAAM,KAAK,KAAK,MAAM,uBAAuB,IAAI;AACjD,QAAI,MAAM,QAAQ,IAAI,EAAE,EAAG;AAE3B,UAAM,aAAa,yBAAyB,OAAO;AACnD,QAAI,YAAY,IAAI,UAAU,EAAG;AAEjC,UAAM,QAAQ,oBAAoB,IAAI;AACtC,UAAM,UAAU,SAAS,SAAS,YAAY;AAC9C,UAAM,QAAQ,GAAG,KAAK,KAAK,OAAO;AAClC,UAAM,kBAAkB,MAAM,SAAS,IAAI,IAAI;AAC/C,UAAM,YAAY,SAAS,OAAO;AAClC,QAAI,aAAa,EAAG;AAEpB,UAAM,aACJ,MAAM,SAAS,YAAY,SAAS,OAAO,SAAS,IAAI;AAC1D,QAAI,CAAC,WAAW,KAAK,EAAG;AAExB,UAAM,KAAK,UAAU;AACrB,YAAQ,kBAAkB,WAAW;AACrC,QAAI,GAAI,SAAQ,IAAI,EAAE;AACtB,gBAAY,IAAI,UAAU;AAAA,EAC5B;AAEA,SAAO,MAAM,WAAW,IAAI,KAAK,MAAM,KAAK,MAAM;AACpD;AAEA,SAAS,yBAAyB,OAAuB;AACvD,MAAI,CAAC,OAAO,SAAS,KAAK,KAAK,SAAS,GAAG;AACzC,WAAO;AAAA,EACT;AACA,SAAO,KAAK,MAAM,KAAK;AACzB;AAEA,SAAS,uBAAuB,MAA4C;AAC1E,MAAI,KAAK,aAAa,OAAO,KAAK,cAAc,UAAU;AACxD,WAAO,GAAG,KAAK,SAAS,IAAI,KAAK,SAAS;AAAA,EAC5C;AACA,SAAO;AACT;AAEA,SAAS,yBAAyB,SAAyB;AACzD,SAAO,QAAQ,YAAY,EAAE,QAAQ,QAAQ,GAAG,EAAE,KAAK;AACzD;AAEA,SAAS,oBAAoB,MAAgC;AAC3D,QAAM,QAAkB,CAAC;AACzB,MAAI,KAAK,UAAW,OAAM,KAAK,KAAK,SAAS;AAC7C,MAAI,OAAO,KAAK,cAAc,SAAU,OAAM,KAAK,QAAQ,KAAK,SAAS,EAAE;AAC3E,MAAI,KAAK,KAAM,OAAM,KAAK,KAAK,IAAI;AACnC,MAAI,OAAO,KAAK,UAAU,YAAY,OAAO,SAAS,KAAK,KAAK,GAAG;AACjE,UAAM,KAAK,SAAS,KAAK,MAAM,QAAQ,CAAC,CAAC,EAAE;AAAA,EAC7C;AACA,SAAO,MAAM,SAAS,IAAI,IAAI,MAAM,KAAK,IAAI,CAAC,MAAM;AACtD;AAEA,SAAS,SAAS,MAAc,UAA0B;AACxD,MAAI,KAAK,UAAU,UAAU;AAC3B,WAAO;AAAA,EACT;AACA,MAAI,YAAY,GAAG;AACjB,WAAO,KAAK,MAAM,GAAG,QAAQ;AAAA,EAC/B;AACA,MAAI,YAAY,GAAG;AACjB,WAAO,KAAK,MAAM,GAAG,QAAQ;AAAA,EAC/B;AACA,SAAO,GAAG,KAAK,MAAM,GAAG,WAAW,CAAC,EAAE,QAAQ,CAAC;AACjD;","names":[]}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
2
|
runConsolidationProvenanceCheck
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-5HRY2WRF.js";
|
|
4
4
|
import {
|
|
5
5
|
reportBufferSurpriseDistribution
|
|
6
6
|
} from "./chunk-ASAITVLA.js";
|
|
7
7
|
import {
|
|
8
8
|
NamespaceStorageRouter,
|
|
9
9
|
namespaceCollectionName
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-R2L7SUX2.js";
|
|
11
11
|
import {
|
|
12
12
|
analyzeSessionIntegrity,
|
|
13
13
|
applySessionRepair,
|
|
@@ -16,11 +16,6 @@ import {
|
|
|
16
16
|
import {
|
|
17
17
|
resolveRemnicPluginEntry
|
|
18
18
|
} from "./chunk-U66YHYC7.js";
|
|
19
|
-
import {
|
|
20
|
-
resolveCuratedIncludeFilesStatePath,
|
|
21
|
-
resolveNativeKnowledgeStatePath,
|
|
22
|
-
resolveOpenClawWorkspaceStatePath
|
|
23
|
-
} from "./chunk-7SEAZFFB.js";
|
|
24
19
|
import {
|
|
25
20
|
createEvalBaselineSnapshot,
|
|
26
21
|
getEvalHarnessStatus,
|
|
@@ -29,21 +24,29 @@ import {
|
|
|
29
24
|
validateEvalBenchmarkPack
|
|
30
25
|
} from "./chunk-K6WK37A6.js";
|
|
31
26
|
import {
|
|
32
|
-
|
|
33
|
-
} from "./chunk-
|
|
27
|
+
readJudgeVerdictStats
|
|
28
|
+
} from "./chunk-AJU4PJGY.js";
|
|
34
29
|
import {
|
|
35
|
-
|
|
36
|
-
|
|
30
|
+
resolveCuratedIncludeFilesStatePath,
|
|
31
|
+
resolveNativeKnowledgeStatePath,
|
|
32
|
+
resolveOpenClawWorkspaceStatePath
|
|
33
|
+
} from "./chunk-7SEAZFFB.js";
|
|
34
|
+
import {
|
|
35
|
+
parseConfig
|
|
36
|
+
} from "./chunk-JWSENLQI.js";
|
|
37
37
|
import {
|
|
38
38
|
listMemoryGovernanceRuns,
|
|
39
39
|
readMemoryGovernanceRunArtifact
|
|
40
|
-
} from "./chunk-
|
|
40
|
+
} from "./chunk-LZRYQK6L.js";
|
|
41
41
|
import {
|
|
42
42
|
isSafeRouteNamespace
|
|
43
43
|
} from "./chunk-2LGMW3DJ.js";
|
|
44
|
+
import {
|
|
45
|
+
analyzeGraphHealth
|
|
46
|
+
} from "./chunk-RK2Y4XOM.js";
|
|
44
47
|
import {
|
|
45
48
|
StorageManager
|
|
46
|
-
} from "./chunk-
|
|
49
|
+
} from "./chunk-DCE6SQLA.js";
|
|
47
50
|
import {
|
|
48
51
|
lintWorkspaceFiles
|
|
49
52
|
} from "./chunk-DM2T26WE.js";
|
|
@@ -183,6 +186,12 @@ async function runNamespaceMigration(options) {
|
|
|
183
186
|
}
|
|
184
187
|
|
|
185
188
|
// src/operator-toolkit.ts
|
|
189
|
+
function isMissingPathError(error) {
|
|
190
|
+
return typeof error === "object" && error !== null && "code" in error && error.code === "ENOENT";
|
|
191
|
+
}
|
|
192
|
+
function formatUnknownError(error) {
|
|
193
|
+
return error instanceof Error ? error.message : String(error);
|
|
194
|
+
}
|
|
186
195
|
function resolveConfigPath(explicitPath) {
|
|
187
196
|
if (explicitPath && explicitPath.trim().length > 0) return explicitPath.trim();
|
|
188
197
|
const configured = readEnvVar("OPENCLAW_ENGRAM_CONFIG_PATH") || readEnvVar("OPENCLAW_CONFIG_PATH");
|
|
@@ -407,7 +416,7 @@ function removeManagedCaptureInstructions(existing) {
|
|
|
407
416
|
async function runOperatorSetup(options) {
|
|
408
417
|
const now = options.now ?? /* @__PURE__ */ new Date();
|
|
409
418
|
const configStatus = await loadCliPluginConfig(options.configPath);
|
|
410
|
-
const storage =
|
|
419
|
+
const storage = options.orchestrator.storage;
|
|
411
420
|
await storage.ensureDirectories();
|
|
412
421
|
await mkdir2(options.orchestrator.config.workspaceDir, { recursive: true });
|
|
413
422
|
const qmdAvailable = await options.orchestrator.qmd.probe();
|
|
@@ -684,6 +693,7 @@ async function runOperatorDoctor(options) {
|
|
|
684
693
|
const configStatus = await loadCliPluginConfig(options.configPath);
|
|
685
694
|
const checks = [];
|
|
686
695
|
const config = options.orchestrator.config;
|
|
696
|
+
const storage = options.orchestrator.storage;
|
|
687
697
|
const configReview = await buildOperatorConfigReviewReport({
|
|
688
698
|
now,
|
|
689
699
|
configStatus,
|
|
@@ -734,7 +744,7 @@ async function runOperatorDoctor(options) {
|
|
|
734
744
|
remediation: conversationIndex.enabled && conversationIndex.status !== "ok" ? "Run `openclaw engram rebuild-index` to refresh the conversation index artifacts." : void 0,
|
|
735
745
|
details: conversationIndex
|
|
736
746
|
});
|
|
737
|
-
const meta = await
|
|
747
|
+
const meta = await storage.loadMeta();
|
|
738
748
|
checks.push({
|
|
739
749
|
key: "maintenance",
|
|
740
750
|
status: meta.lastExtractionAt || meta.lastConsolidationAt ? "ok" : "warn",
|
|
@@ -752,11 +762,13 @@ async function runOperatorDoctor(options) {
|
|
|
752
762
|
details: nativeKnowledgeStatus
|
|
753
763
|
});
|
|
754
764
|
const agentAccessEnabled = config.agentAccessHttp?.enabled === true;
|
|
765
|
+
const rawAuthToken = config.agentAccessHttp?.authToken;
|
|
766
|
+
const authTokenConfigured = typeof rawAuthToken === "string" && rawAuthToken.length > 0 || rawAuthToken !== null && typeof rawAuthToken === "object" && typeof rawAuthToken.source === "string";
|
|
755
767
|
checks.push({
|
|
756
768
|
key: "access_http_auth",
|
|
757
|
-
status: !agentAccessEnabled ? "warn" :
|
|
758
|
-
summary: !agentAccessEnabled ? "Agent access HTTP bridge is disabled." :
|
|
759
|
-
remediation: !agentAccessEnabled ? "Ignore unless you plan to enable the HTTP bridge." :
|
|
769
|
+
status: !agentAccessEnabled ? "warn" : authTokenConfigured ? "ok" : "error",
|
|
770
|
+
summary: !agentAccessEnabled ? "Agent access HTTP bridge is disabled." : authTokenConfigured ? "Agent access HTTP bridge has an auth token configured." : "Agent access HTTP bridge is enabled without an auth token.",
|
|
771
|
+
remediation: !agentAccessEnabled ? "Ignore unless you plan to enable the HTTP bridge." : authTokenConfigured ? void 0 : "Set `agentAccessHttp.authToken` before exposing the bridge."
|
|
760
772
|
});
|
|
761
773
|
const warnings = config.fileHygiene?.lintEnabled ? await lintWorkspaceFiles({
|
|
762
774
|
workspaceDir: config.workspaceDir,
|
|
@@ -765,12 +777,16 @@ async function runOperatorDoctor(options) {
|
|
|
765
777
|
warnRatio: config.fileHygiene.lintWarnRatio
|
|
766
778
|
}) : [];
|
|
767
779
|
checks.push(summarizeHygieneWarnings(warnings, config.fileHygiene));
|
|
768
|
-
checks.push(await summarizeMemoryWorthLegacyCounters(
|
|
780
|
+
checks.push(await summarizeMemoryWorthLegacyCounters(storage));
|
|
769
781
|
checks.push(
|
|
770
|
-
await summarizeBufferSurpriseDistribution(
|
|
782
|
+
await summarizeBufferSurpriseDistribution(storage, config)
|
|
771
783
|
);
|
|
772
|
-
checks.push(await summarizeConsolidationProvenance(
|
|
784
|
+
checks.push(await summarizeConsolidationProvenance(storage, config));
|
|
785
|
+
checks.push(await summarizeGraphEdgeDecayStatus(config));
|
|
786
|
+
checks.push(await summarizeTierDistribution(options.orchestrator.storage));
|
|
787
|
+
checks.push(await summarizeDreamsPhases(config, storage));
|
|
773
788
|
checks.push(summarizeSecurityMitigations(config));
|
|
789
|
+
checks.push(await summarizeObservationThroughput(config.memoryDir));
|
|
774
790
|
const summary = checks.reduce(
|
|
775
791
|
(acc, check) => {
|
|
776
792
|
acc[check.status] += 1;
|
|
@@ -869,6 +885,167 @@ async function summarizeBufferSurpriseDistribution(storage, config) {
|
|
|
869
885
|
};
|
|
870
886
|
}
|
|
871
887
|
}
|
|
888
|
+
async function summarizeGraphEdgeDecayStatus(config) {
|
|
889
|
+
const { readGraphEdgeDecayStatus } = await import("./graph-edge-decay-PWB63GRE.js");
|
|
890
|
+
const enabled = config.graphEdgeDecayEnabled === true;
|
|
891
|
+
if (!enabled) {
|
|
892
|
+
return {
|
|
893
|
+
key: "graph_edge_decay",
|
|
894
|
+
status: "ok",
|
|
895
|
+
summary: "Graph-edge decay maintenance is disabled (graphEdgeDecayEnabled = false).",
|
|
896
|
+
remediation: "Set graphEdgeDecayEnabled = true to opt into the periodic decay job (issue #681).",
|
|
897
|
+
details: { enabled: false }
|
|
898
|
+
};
|
|
899
|
+
}
|
|
900
|
+
const status = await readGraphEdgeDecayStatus(config.memoryDir);
|
|
901
|
+
if (!status) {
|
|
902
|
+
return {
|
|
903
|
+
key: "graph_edge_decay",
|
|
904
|
+
status: "warn",
|
|
905
|
+
summary: "Graph-edge decay is enabled but has not run yet (no status file present).",
|
|
906
|
+
remediation: "Trigger the cron, run `engram.graph_edge_decay_run` via MCP, or wait for the scheduled cadence to fire.",
|
|
907
|
+
details: { enabled: true, lastRun: null, cadenceMs: config.graphEdgeDecayCadenceMs }
|
|
908
|
+
};
|
|
909
|
+
}
|
|
910
|
+
return {
|
|
911
|
+
key: "graph_edge_decay",
|
|
912
|
+
status: "ok",
|
|
913
|
+
summary: `Graph-edge decay last ran at ${status.ranAt} (${status.edgesDecayed}/${status.edgesTotal} edges decayed, ${status.edgesBelowVisibilityThreshold} below visibility threshold).`,
|
|
914
|
+
details: {
|
|
915
|
+
enabled: true,
|
|
916
|
+
lastRun: status.ranAt,
|
|
917
|
+
durationMs: status.durationMs,
|
|
918
|
+
edgesTotal: status.edgesTotal,
|
|
919
|
+
edgesDecayed: status.edgesDecayed,
|
|
920
|
+
edgesBelowVisibilityThreshold: status.edgesBelowVisibilityThreshold,
|
|
921
|
+
topDecayedEntities: status.topDecayedEntities,
|
|
922
|
+
cadenceMs: config.graphEdgeDecayCadenceMs
|
|
923
|
+
}
|
|
924
|
+
};
|
|
925
|
+
}
|
|
926
|
+
async function summarizeTierDistribution(storage) {
|
|
927
|
+
try {
|
|
928
|
+
const { summarizeTiers } = await import("./tier-stats-62ZVDFKS.js");
|
|
929
|
+
const summary = await summarizeTiers(storage);
|
|
930
|
+
const storageDir = storage.dir ?? "";
|
|
931
|
+
const journalPath = storageDir.length > 0 ? path2.join(storageDir, "state", "tier-migration-journal.jsonl") : null;
|
|
932
|
+
let recentMigrations = 0;
|
|
933
|
+
const demotionReasons = {};
|
|
934
|
+
const sevenDaysAgoMs = Date.now() - 7 * 864e5;
|
|
935
|
+
if (journalPath) {
|
|
936
|
+
try {
|
|
937
|
+
const { readFile: readFile2 } = await import("fs/promises");
|
|
938
|
+
const raw = await readFile2(journalPath, "utf-8");
|
|
939
|
+
for (const line of raw.split("\n")) {
|
|
940
|
+
const trimmed = line.trim();
|
|
941
|
+
if (trimmed.length === 0) continue;
|
|
942
|
+
try {
|
|
943
|
+
const entry = JSON.parse(trimmed);
|
|
944
|
+
const tsMs = entry.ts ? Date.parse(entry.ts) : NaN;
|
|
945
|
+
if (Number.isFinite(tsMs) && tsMs >= sevenDaysAgoMs && entry.changed === true) {
|
|
946
|
+
recentMigrations += 1;
|
|
947
|
+
if (entry.fromTier === "hot" && entry.toTier === "cold" && typeof entry.reason === "string") {
|
|
948
|
+
const reason = entry.reason;
|
|
949
|
+
demotionReasons[reason] = (demotionReasons[reason] ?? 0) + 1;
|
|
950
|
+
}
|
|
951
|
+
}
|
|
952
|
+
} catch {
|
|
953
|
+
}
|
|
954
|
+
}
|
|
955
|
+
} catch {
|
|
956
|
+
}
|
|
957
|
+
}
|
|
958
|
+
const topDemotionReasons = Object.entries(demotionReasons).sort((a, b) => b[1] - a[1] || a[0].localeCompare(b[0])).slice(0, 5).map(([reason, count]) => ({ reason, count }));
|
|
959
|
+
const statusParts = Object.entries(summary.byStatus).sort((a, b) => b[1] - a[1] || a[0].localeCompare(b[0])).slice(0, 6).map(([s, n]) => `${s}: ${n}`).join(", ");
|
|
960
|
+
return {
|
|
961
|
+
key: "tier_distribution",
|
|
962
|
+
status: "ok",
|
|
963
|
+
summary: `Tier distribution: hot=${summary.byTier.hot}, cold=${summary.byTier.cold}` + (summary.forgottenCount > 0 ? `, forgotten=${summary.forgottenCount}` : "") + `. Total: ${summary.total}.` + (recentMigrations > 0 ? ` Recent migrations (7d): ${recentMigrations}.` : ""),
|
|
964
|
+
details: {
|
|
965
|
+
total: summary.total,
|
|
966
|
+
byTier: summary.byTier,
|
|
967
|
+
byStatus: summary.byStatus,
|
|
968
|
+
forgottenCount: summary.forgottenCount,
|
|
969
|
+
statusSummary: statusParts,
|
|
970
|
+
recentMigrations,
|
|
971
|
+
topDemotionReasons
|
|
972
|
+
}
|
|
973
|
+
};
|
|
974
|
+
} catch (err) {
|
|
975
|
+
return {
|
|
976
|
+
key: "tier_distribution",
|
|
977
|
+
status: "ok",
|
|
978
|
+
summary: "Tier distribution unavailable \u2014 could not enumerate memories.",
|
|
979
|
+
details: { error: String(err) }
|
|
980
|
+
};
|
|
981
|
+
}
|
|
982
|
+
}
|
|
983
|
+
async function summarizeDreamsPhases(config, storage = new StorageManager(config.memoryDir)) {
|
|
984
|
+
const phases = config.dreamsPhases;
|
|
985
|
+
const meta = await storage.loadMeta();
|
|
986
|
+
let deepSleepLastRun = null;
|
|
987
|
+
let deepSleepLastRunWarning = null;
|
|
988
|
+
try {
|
|
989
|
+
const runsDir = path2.join(config.memoryDir, "state", "memory-governance", "runs");
|
|
990
|
+
const runIds = (await readdir2(runsDir)).sort().reverse();
|
|
991
|
+
if (runIds.length > 0) {
|
|
992
|
+
const latestRunId = runIds[0];
|
|
993
|
+
const manifestPath = path2.join(
|
|
994
|
+
runsDir,
|
|
995
|
+
latestRunId,
|
|
996
|
+
"manifest.json"
|
|
997
|
+
);
|
|
998
|
+
const raw = await readFile(manifestPath, "utf-8");
|
|
999
|
+
const parsed = JSON.parse(raw);
|
|
1000
|
+
if (typeof parsed.createdAt === "string" && parsed.createdAt.length > 0) {
|
|
1001
|
+
deepSleepLastRun = parsed.createdAt;
|
|
1002
|
+
}
|
|
1003
|
+
}
|
|
1004
|
+
} catch (error) {
|
|
1005
|
+
if (!isMissingPathError(error)) {
|
|
1006
|
+
deepSleepLastRunWarning = `Could not read latest governance run manifest: ${formatUnknownError(error)}`;
|
|
1007
|
+
}
|
|
1008
|
+
}
|
|
1009
|
+
const phaseLines = [
|
|
1010
|
+
`lightSleep: enabled=${phases.lightSleep.enabled}, cadenceMs=${phases.lightSleep.cadenceMs}, promoteHeat=${phases.lightSleep.promoteHeatThreshold}, staleDecay=${phases.lightSleep.staleDecayThreshold}, archiveDecay=${phases.lightSleep.archiveDecayThreshold}, filterStale=${phases.lightSleep.filterStaleEnabled}, lastRun=${meta.lastExtractionAt ?? "never"}`,
|
|
1011
|
+
`rem: enabled=${phases.rem.enabled}, cadenceMs=${phases.rem.cadenceMs}, similarity=${phases.rem.similarityThreshold}, minCluster=${phases.rem.minClusterSize}, maxPerRun=${phases.rem.maxPerRun}, minIntervalMs=${phases.rem.minIntervalMs}, lastRun=${meta.lastConsolidationAt ?? "never"}`,
|
|
1012
|
+
`deepSleep: enabled=${phases.deepSleep.enabled}, cadenceMs=${phases.deepSleep.cadenceMs}, versioning=${phases.deepSleep.versioningEnabled}, versioningMaxPerPage=${phases.deepSleep.versioningMaxPerPage}, lastRun=${deepSleepLastRun ?? "never"}`
|
|
1013
|
+
];
|
|
1014
|
+
return {
|
|
1015
|
+
key: "dreams_phases",
|
|
1016
|
+
status: deepSleepLastRunWarning ? "warn" : "ok",
|
|
1017
|
+
summary: `Dreams pipeline phases: ${phaseLines.join("; ")}${deepSleepLastRunWarning ? `; ${deepSleepLastRunWarning}` : ""}`,
|
|
1018
|
+
remediation: deepSleepLastRunWarning ? "Inspect state/memory-governance/runs and repair or remove unreadable governance run artifacts." : void 0,
|
|
1019
|
+
details: {
|
|
1020
|
+
lightSleep: {
|
|
1021
|
+
enabled: phases.lightSleep.enabled,
|
|
1022
|
+
cadenceMs: phases.lightSleep.cadenceMs,
|
|
1023
|
+
promoteHeatThreshold: phases.lightSleep.promoteHeatThreshold,
|
|
1024
|
+
staleDecayThreshold: phases.lightSleep.staleDecayThreshold,
|
|
1025
|
+
archiveDecayThreshold: phases.lightSleep.archiveDecayThreshold,
|
|
1026
|
+
filterStaleEnabled: phases.lightSleep.filterStaleEnabled,
|
|
1027
|
+
lastRun: meta.lastExtractionAt ?? null
|
|
1028
|
+
},
|
|
1029
|
+
rem: {
|
|
1030
|
+
enabled: phases.rem.enabled,
|
|
1031
|
+
cadenceMs: phases.rem.cadenceMs,
|
|
1032
|
+
similarityThreshold: phases.rem.similarityThreshold,
|
|
1033
|
+
minClusterSize: phases.rem.minClusterSize,
|
|
1034
|
+
maxPerRun: phases.rem.maxPerRun,
|
|
1035
|
+
minIntervalMs: phases.rem.minIntervalMs,
|
|
1036
|
+
lastRun: meta.lastConsolidationAt ?? null
|
|
1037
|
+
},
|
|
1038
|
+
deepSleep: {
|
|
1039
|
+
enabled: phases.deepSleep.enabled,
|
|
1040
|
+
cadenceMs: phases.deepSleep.cadenceMs,
|
|
1041
|
+
versioningEnabled: phases.deepSleep.versioningEnabled,
|
|
1042
|
+
versioningMaxPerPage: phases.deepSleep.versioningMaxPerPage,
|
|
1043
|
+
lastRun: deepSleepLastRun,
|
|
1044
|
+
warning: deepSleepLastRunWarning
|
|
1045
|
+
}
|
|
1046
|
+
}
|
|
1047
|
+
};
|
|
1048
|
+
}
|
|
872
1049
|
function summarizeSecurityMitigations(config) {
|
|
873
1050
|
const budgetEnabled = config.recallCrossNamespaceBudgetEnabled === true;
|
|
874
1051
|
const anomalyEnabled = config.recallAuditAnomalyDetectionEnabled === true;
|
|
@@ -911,6 +1088,46 @@ function summarizeSecurityMitigations(config) {
|
|
|
911
1088
|
details: { ...details, configOnly: true }
|
|
912
1089
|
};
|
|
913
1090
|
}
|
|
1091
|
+
async function summarizeObservationThroughput(memoryDir) {
|
|
1092
|
+
try {
|
|
1093
|
+
const stats = await readJudgeVerdictStats(memoryDir);
|
|
1094
|
+
if (stats.total === 0) {
|
|
1095
|
+
return {
|
|
1096
|
+
key: "observations",
|
|
1097
|
+
status: "ok",
|
|
1098
|
+
summary: "No observations recorded yet (extraction-judge telemetry ledger is empty or missing).",
|
|
1099
|
+
details: { total: 0, accept: 0, reject: 0, defer: 0, lastObservedAt: null }
|
|
1100
|
+
};
|
|
1101
|
+
}
|
|
1102
|
+
const acceptPct = (stats.accept / stats.total * 100).toFixed(1);
|
|
1103
|
+
const rejectPct = (stats.reject / stats.total * 100).toFixed(1);
|
|
1104
|
+
const deferPct = (stats.defer / stats.total * 100).toFixed(1);
|
|
1105
|
+
return {
|
|
1106
|
+
key: "observations",
|
|
1107
|
+
status: "ok",
|
|
1108
|
+
summary: `${stats.total} observations recorded: accept=${acceptPct}%, reject=${rejectPct}%, defer=${deferPct}%. Last observed: ${stats.lastTs ?? "unknown"}.`,
|
|
1109
|
+
details: {
|
|
1110
|
+
total: stats.total,
|
|
1111
|
+
accept: stats.accept,
|
|
1112
|
+
reject: stats.reject,
|
|
1113
|
+
defer: stats.defer,
|
|
1114
|
+
deferCapTriggered: stats.deferCapTriggered,
|
|
1115
|
+
deferRate: stats.deferRate,
|
|
1116
|
+
meanElapsedMs: stats.meanElapsedMs,
|
|
1117
|
+
firstObservedAt: stats.firstTs ?? null,
|
|
1118
|
+
lastObservedAt: stats.lastTs ?? null
|
|
1119
|
+
}
|
|
1120
|
+
};
|
|
1121
|
+
} catch (err) {
|
|
1122
|
+
return {
|
|
1123
|
+
key: "observations",
|
|
1124
|
+
status: "warn",
|
|
1125
|
+
summary: "Could not read observation telemetry ledger.",
|
|
1126
|
+
remediation: "Retry `remnic doctor` after ensuring the memory state directory is readable.",
|
|
1127
|
+
details: { error: String(err) }
|
|
1128
|
+
};
|
|
1129
|
+
}
|
|
1130
|
+
}
|
|
914
1131
|
async function summarizeConsolidationProvenance(storage, config) {
|
|
915
1132
|
let report;
|
|
916
1133
|
try {
|
|
@@ -1223,9 +1440,12 @@ export {
|
|
|
1223
1440
|
runOperatorDoctor,
|
|
1224
1441
|
summarizeMemoryWorthLegacyCounters,
|
|
1225
1442
|
summarizeBufferSurpriseDistribution,
|
|
1443
|
+
summarizeTierDistribution,
|
|
1444
|
+
summarizeDreamsPhases,
|
|
1445
|
+
summarizeObservationThroughput,
|
|
1226
1446
|
summarizeConsolidationProvenance,
|
|
1227
1447
|
runOperatorInventory,
|
|
1228
1448
|
runBenchmarkRecall,
|
|
1229
1449
|
runOperatorRepair
|
|
1230
1450
|
};
|
|
1231
|
-
//# sourceMappingURL=chunk-
|
|
1451
|
+
//# sourceMappingURL=chunk-7GCMLT7J.js.map
|