@remnic/core 9.22.0 → 9.22.2
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 +15 -12
- package/dist/access-admin-ops-surface.js +25 -24
- package/dist/access-audit.js +2 -2
- package/dist/access-boundary.d.ts +13 -10
- package/dist/access-boundary.js +25 -24
- package/dist/access-cli.js +84 -82
- package/dist/access-cli.js.map +1 -1
- package/dist/access-http.d.ts +16 -9
- package/dist/access-http.js +33 -32
- package/dist/access-identity-continuity-surface.d.ts +9 -7
- package/dist/access-identity-continuity-surface.js +25 -24
- package/dist/access-lcm-surface.d.ts +12 -9
- package/dist/access-lcm-surface.js +25 -24
- package/dist/access-mcp-output-schemas.js +1 -1
- package/dist/access-mcp.d.ts +22 -10
- package/dist/access-mcp.js +31 -30
- package/dist/access-memory-search-fanout.d.ts +2 -2
- package/dist/{access-namespace-preflight-tmwQgCT6.d.ts → access-namespace-preflight-CmErR03h.d.ts} +1 -1
- package/dist/access-namespace-preflight.d.ts +3 -3
- package/dist/access-namespace-preflight.js +25 -24
- package/dist/access-observe-write-surface.d.ts +12 -9
- package/dist/access-observe-write-surface.js +25 -24
- package/dist/access-operations-batch.js +27 -26
- package/dist/access-operations.d.ts +16 -13
- package/dist/access-operations.js +28 -27
- package/dist/access-recall-concurrency.d.ts +12 -9
- package/dist/access-recall-concurrency.js +25 -24
- package/dist/access-recall-response.d.ts +12 -9
- package/dist/access-recall-response.js +25 -24
- package/dist/access-recall-surface.d.ts +14 -11
- package/dist/access-recall-surface.js +25 -24
- package/dist/access-schema.d.ts +76 -76
- package/dist/{access-service-BtxW52vv.d.ts → access-service-CKEROeFP.d.ts} +22 -11
- package/dist/access-service.d.ts +13 -10
- package/dist/access-service.js +25 -24
- package/dist/access-surface-catalog.d.ts +12 -9
- package/dist/access-surface-catalog.js +6 -0
- package/dist/access-surface-catalog.js.map +1 -1
- package/dist/access-wearables-meetings-surface.d.ts +78 -0
- package/dist/access-wearables-meetings-surface.js +22 -0
- package/dist/access-wearables-meetings-surface.js.map +1 -0
- 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 +2 -2
- package/dist/{auto-sync-UPTUVE4X.js → auto-sync-5OE5QOZB.js} +3 -3
- package/dist/behavior-learner.d.ts +1 -1
- package/dist/behavior-signals.d.ts +1 -1
- package/dist/bootstrap.d.ts +9 -7
- package/dist/briefing.d.ts +2 -2
- package/dist/briefing.js +5 -5
- package/dist/buffer-surprise-report.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-iWvWz61I.d.ts → catalog-BFTVo2Ez.d.ts} +1 -1
- package/dist/causal-behavior.d.ts +1 -1
- package/dist/causal-behavior.js +2 -2
- package/dist/causal-chain.js +2 -2
- package/dist/causal-consolidation.d.ts +1 -1
- package/dist/causal-consolidation.js +9 -9
- package/dist/causal-retrieval.js +2 -2
- package/dist/causal-trajectory-graph.d.ts +1 -1
- package/dist/causal-trajectory.js +1 -1
- package/dist/{chunk-GF22HWS2.js → chunk-2PHX3I5C.js} +7 -7
- package/dist/{chunk-JFDEYXF7.js → chunk-3NAHZQU3.js} +2 -2
- package/dist/{chunk-XBRPEGXF.js → chunk-3UOSVTFR.js} +5 -5
- package/dist/{chunk-TTKWTT72.js → chunk-3ZW6ZQO6.js} +3 -3
- package/dist/{chunk-UV72DEZD.js → chunk-4B77XSG5.js} +5 -5
- package/dist/{chunk-IC2TCZJ2.js → chunk-57QKLRBV.js} +3 -1
- package/dist/chunk-57QKLRBV.js.map +1 -0
- package/dist/{chunk-LMHDFOVV.js → chunk-5CPI2QWG.js} +3 -3
- package/dist/{chunk-P72WZMWQ.js → chunk-5FZQ74K5.js} +2 -2
- package/dist/{chunk-BRT7KEXU.js → chunk-6TWXQ4E2.js} +5 -5
- package/dist/{chunk-CV6ZYXK3.js → chunk-7I7AYIUQ.js} +3 -3
- package/dist/{chunk-TVVEYCNW.js → chunk-7K5Q6COX.js} +4 -4
- package/dist/{chunk-MONWCSVL.js → chunk-7RAJ3GXO.js} +2 -1
- package/dist/chunk-7RAJ3GXO.js.map +1 -0
- package/dist/{chunk-SQEDDWAM.js → chunk-A2RFKL3V.js} +5 -34
- package/dist/chunk-A2RFKL3V.js.map +1 -0
- package/dist/{chunk-JN57HZCD.js → chunk-ATEAL5EI.js} +6 -6
- package/dist/{chunk-4PYLBXX6.js → chunk-AYAROCWD.js} +2 -2
- package/dist/chunk-BLDBT6HZ.js +39 -0
- package/dist/chunk-BLDBT6HZ.js.map +1 -0
- package/dist/{chunk-NB2P47N7.js → chunk-CUUY5CC4.js} +6 -6
- package/dist/{chunk-KL5Y6PEV.js → chunk-E3ZMFFQZ.js} +2 -2
- package/dist/{chunk-55FDQYPS.js → chunk-ES5IHQ6M.js} +2 -2
- package/dist/{chunk-N47ZWQBO.js → chunk-G2NSSQES.js} +2 -2
- package/dist/{chunk-GSWPU5CR.js → chunk-GD3QOBMB.js} +2 -2
- package/dist/{chunk-6ANPNUVL.js → chunk-IIXLB5E7.js} +58 -36
- package/dist/chunk-IIXLB5E7.js.map +1 -0
- package/dist/{chunk-SACPRJ7F.js → chunk-JNIJBXVK.js} +2 -2
- package/dist/{chunk-W3XT32W7.js → chunk-JVGUY2AU.js} +23 -13
- package/dist/chunk-JVGUY2AU.js.map +1 -0
- package/dist/{chunk-DGLON3AL.js → chunk-KNRG6ZGJ.js} +6 -6
- package/dist/{chunk-GEUDRENF.js → chunk-MMTG3SCJ.js} +2 -2
- package/dist/{chunk-WZFAPHIK.js → chunk-MU7ZHSZE.js} +2 -2
- package/dist/{chunk-W4FBGYGK.js → chunk-NRV4Y3PM.js} +1 -1
- package/dist/{chunk-QTO2FGBT.js → chunk-OUW4PAY4.js} +191 -117
- package/dist/chunk-OUW4PAY4.js.map +1 -0
- package/dist/{chunk-KQ2XCQYN.js → chunk-P2BLHUL2.js} +2 -2
- package/dist/{chunk-ACGGTPU4.js → chunk-QCKQEBIY.js} +17 -9
- package/dist/chunk-QCKQEBIY.js.map +1 -0
- package/dist/{chunk-6L775BUB.js → chunk-QE63OHLB.js} +2 -2
- package/dist/{chunk-ONHRRJZM.js → chunk-QJAQNXWI.js} +6 -6
- package/dist/{chunk-EQYBHXRR.js → chunk-ROUL7RZU.js} +385 -59
- package/dist/chunk-ROUL7RZU.js.map +1 -0
- package/dist/{chunk-N6M7MRVN.js → chunk-RT4TSR2C.js} +9034 -8726
- package/dist/chunk-RT4TSR2C.js.map +1 -0
- package/dist/{chunk-6NZ7U4R4.js → chunk-SCOT5DTA.js} +1 -1
- package/dist/chunk-SCOT5DTA.js.map +1 -0
- package/dist/{chunk-6RYWNBSA.js → chunk-SVZGA2MK.js} +2 -2
- package/dist/chunk-SYOIVK7K.js +63 -0
- package/dist/chunk-SYOIVK7K.js.map +1 -0
- package/dist/{chunk-DM5A4ZFL.js → chunk-TWCOYET2.js} +11 -1
- package/dist/chunk-TWCOYET2.js.map +1 -0
- package/dist/{chunk-7S5OMI76.js → chunk-WS32QRLO.js} +109 -44
- package/dist/chunk-WS32QRLO.js.map +1 -0
- package/dist/{chunk-OCMLGND7.js → chunk-WWZ35GWW.js} +5 -5
- package/dist/{chunk-QMGIQUBG.js → chunk-XWPFZX6S.js} +503 -139
- package/dist/chunk-XWPFZX6S.js.map +1 -0
- package/dist/{chunk-A5N6ISRK.js → chunk-ZN4UZWMT.js} +2 -2
- package/dist/{chunk-7M6APKJL.js → chunk-ZYU7ZFLT.js} +2 -2
- package/dist/{cli-D9vXgWwM.d.ts → cli-BrwT9YMD.d.ts} +5 -5
- package/dist/cli.d.ts +14 -11
- package/dist/cli.js +57 -56
- package/dist/compounding/engine.d.ts +2 -2
- package/dist/compounding/engine.js +5 -5
- 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 +2 -2
- package/dist/connectors/codex-materialize-runner.d.ts +1 -1
- package/dist/connectors/codex-materialize-runner.js +5 -5
- package/dist/connectors/codex-materialize.d.ts +1 -1
- package/dist/connectors/index.d.ts +1 -1
- package/dist/connectors/index.js +5 -5
- package/dist/consolidation-provenance-check.d.ts +2 -2
- package/dist/consolidation-undo.d.ts +2 -2
- package/dist/contradiction/index.d.ts +2 -2
- 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/day-summary.d.ts +1 -1
- package/dist/delinearize.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 +5 -5
- package/dist/entity-schema.d.ts +1 -1
- package/dist/explicit-capture.d.ts +9 -7
- package/dist/extraction-error-classification.d.ts +22 -0
- package/dist/extraction-error-classification.js +11 -0
- package/dist/extraction-error-classification.js.map +1 -0
- 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.d.ts +3 -17
- package/dist/extraction.js +5 -3
- package/dist/fallback-llm.d.ts +1 -1
- package/dist/{first-start-migration-LEXL3XYL.js → first-start-migration-BKNGOFED.js} +4 -4
- 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-snapshot.d.ts +1 -1
- package/dist/graph.d.ts +1 -1
- package/dist/importance.d.ts +1 -1
- package/dist/importers/index.d.ts +1 -1
- package/dist/in-flight-reads.d.ts +1 -1
- package/dist/index.d.ts +713 -923
- package/dist/index.js +176 -140
- package/dist/intent.d.ts +1 -1
- package/dist/lcm/engine.d.ts +1 -1
- package/dist/lcm/engine.js +3 -3
- package/dist/lcm/index.d.ts +1 -1
- package/dist/lcm/index.js +11 -11
- 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 +6 -6
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +2 -2
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +5 -5
- package/dist/maintenance/rebuild-memory-projection.d.ts +2 -2
- package/dist/maintenance/rebuild-memory-projection.js +7 -7
- package/dist/maintenance-C98njYb8.d.ts +366 -0
- package/dist/mcp-memory-inspector-app.d.ts +12 -9
- package/dist/mcp-read-only-tools.js +1 -1
- 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-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 +12 -12
- package/dist/namespaces/principal.d.ts +1 -1
- package/dist/namespaces/search.d.ts +1 -1
- package/dist/namespaces/search.js +6 -6
- package/dist/namespaces/storage.d.ts +3 -3
- package/dist/namespaces/storage.js +5 -5
- package/dist/native-knowledge.d.ts +1 -1
- package/dist/offline-sync-impression-drain.d.ts +1 -1
- package/dist/operator-toolkit.d.ts +2 -2
- package/dist/operator-toolkit.js +18 -18
- package/dist/orchestration/compression-guideline-coordinator.d.ts +2 -2
- package/dist/orchestration/maintenance.d.ts +6 -223
- package/dist/orchestration/maintenance.js +12 -12
- package/dist/{orchestrator-DB93S48I.d.ts → orchestrator-C9ZVppNh.d.ts} +12 -481
- package/dist/orchestrator.d.ts +10 -8
- package/dist/orchestrator.js +84 -82
- package/dist/patterns-cli.d.ts +1 -1
- package/dist/{pipeline-DmGc-H66.d.ts → pipeline-id_-sqYm.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/{qmd-cJT0crkF.d.ts → qmd-R6XaQOZK.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/qmd.js +4 -4
- package/dist/recall-concurrency-config.d.ts +1 -1
- package/dist/recall-disclosure-escalation.d.ts +1 -1
- package/dist/recall-explain-renderer.d.ts +1 -1
- package/dist/recall-explain-renderer.js +3 -3
- package/dist/recall-memory-map.d.ts +1 -1
- package/dist/recall-planner-llm.d.ts +1 -1
- package/dist/recall-state.d.ts +1 -1
- package/dist/recall-tag-filter.d.ts +1 -1
- package/dist/recall-timings.d.ts +1 -1
- package/dist/recall-xray-cli.d.ts +1 -1
- package/dist/recall-xray-cli.js +4 -4
- package/dist/recall-xray-renderer.d.ts +1 -1
- package/dist/recall-xray-renderer.js +3 -3
- package/dist/recall-xray.d.ts +1 -1
- package/dist/recall-xray.js +2 -2
- package/dist/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/resolve-auth-token.d.ts +1 -1
- package/dist/resume-bundles.js +4 -4
- 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/schemas.d.ts +76 -76
- package/dist/{scope-profiles-KG2nODX7.d.ts → scope-profiles-EhyuAKkd.d.ts} +1 -1
- package/dist/search/embed-helper.d.ts +1 -1
- package/dist/search/factory.d.ts +1 -1
- package/dist/search/factory.js +5 -5
- package/dist/search/index.d.ts +1 -1
- package/dist/search/index.js +9 -9
- 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-BaZlg0D8.d.ts → semantic-consolidation-B2xo26UQ.d.ts} +1 -1
- package/dist/semantic-consolidation.d.ts +2 -2
- package/dist/semantic-consolidation.js +7 -7
- package/dist/semantic-rule-promotion.js +5 -5
- package/dist/semantic-rule-verifier.d.ts +1 -1
- package/dist/semantic-rule-verifier.js +6 -6
- package/dist/service-DgFWlZ-r.d.ts +835 -0
- 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/{storage-BKhHHnRo.d.ts → storage-XGawwqXE.d.ts} +131 -2
- package/dist/storage.d.ts +2 -2
- package/dist/storage.js +4 -4
- 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-GBQZuT7l.d.ts → types-Bbs0qz6b.d.ts} +2 -3
- package/dist/types.d.ts +1 -1
- package/dist/types.js +1 -1
- package/dist/utility-runtime.d.ts +1 -1
- package/dist/verified-recall.js +6 -6
- package/dist/write-envelope.d.ts +1 -1
- package/package.json +2 -2
- package/src/access-boundary.ts +3 -0
- package/src/access-http.test.ts +63 -0
- package/src/access-http.ts +26 -37
- package/src/access-mcp-output-schemas.ts +10 -0
- package/src/access-mcp.ts +4 -121
- package/src/access-operations-batch.ts +10 -5
- package/src/access-service.ts +43 -46
- package/src/access-surface-catalog.ts +6 -0
- package/src/access-wearables-meetings-surface.ts +139 -0
- package/src/activity/digest.ts +1 -1
- package/src/activity/runner.test.ts +37 -0
- package/src/activity/runner.ts +12 -0
- package/src/activity/scheduler.test.ts +1 -0
- package/src/activity/sync-registration.ts +13 -0
- package/src/cli/meetings-commands.ts +70 -0
- package/src/cli.ts +7 -6
- package/src/extraction-error-classification.ts +52 -0
- package/src/extraction.ts +2 -50
- package/src/mcp-read-only-tools.ts +2 -0
- package/src/meetings/build-memory.test.ts +364 -0
- package/src/meetings/build-scheduler.test.ts +55 -0
- package/src/meetings/build-scheduler.ts +96 -0
- package/src/meetings/day-source.test.ts +275 -0
- package/src/meetings/day-source.ts +352 -0
- package/src/meetings/http-glue.ts +126 -0
- package/src/meetings/index.ts +5 -4
- package/src/meetings/manual-sync-flush.test.ts +72 -0
- package/src/meetings/mcp-tools.ts +65 -0
- package/src/meetings/memory-gen.test.ts +498 -0
- package/src/meetings/memory-gen.ts +549 -0
- package/src/meetings/memory-generator.ts +5 -0
- package/src/meetings/namespace-isolation.test.ts +159 -0
- package/src/meetings/service.test.ts +195 -0
- package/src/meetings/service.ts +157 -0
- package/src/meetings/summary-extractor.test.ts +287 -0
- package/src/meetings/summary-extractor.ts +264 -0
- package/src/orchestration/maintenance.ts +8 -0
- package/src/orchestration/orchestrator-init.ts +6 -1
- package/src/orchestration/workspace-ops.ts +172 -8
- package/src/orchestrator.ts +12 -13
- package/src/storage.ts +21 -0
- package/src/testing/subjects/meetings-namespace-harness.ts +159 -0
- package/src/testing/subjects/meetings-namespace.test.ts +93 -0
- package/src/types.ts +1 -2
- package/src/wearables/cli.ts +2 -1
- package/src/wearables/index.ts +1 -0
- package/src/wearables/mcp-tools.ts +143 -0
- package/src/wearables/registry.test.ts +11 -0
- package/src/wearables/registry.ts +13 -0
- package/src/wearables/service.test.ts +62 -1
- package/src/wearables/service.ts +30 -2
- package/src/wearables/transcript-search-namespace-isolation.test.ts +98 -0
- package/dist/chunk-6ANPNUVL.js.map +0 -1
- package/dist/chunk-6NZ7U4R4.js.map +0 -1
- package/dist/chunk-7S5OMI76.js.map +0 -1
- package/dist/chunk-ACGGTPU4.js.map +0 -1
- package/dist/chunk-DM5A4ZFL.js.map +0 -1
- package/dist/chunk-EQYBHXRR.js.map +0 -1
- package/dist/chunk-IC2TCZJ2.js.map +0 -1
- package/dist/chunk-MONWCSVL.js.map +0 -1
- package/dist/chunk-N6M7MRVN.js.map +0 -1
- package/dist/chunk-QMGIQUBG.js.map +0 -1
- package/dist/chunk-QTO2FGBT.js.map +0 -1
- package/dist/chunk-SQEDDWAM.js.map +0 -1
- package/dist/chunk-W3XT32W7.js.map +0 -1
- /package/dist/{auto-sync-UPTUVE4X.js.map → auto-sync-5OE5QOZB.js.map} +0 -0
- /package/dist/{chunk-GF22HWS2.js.map → chunk-2PHX3I5C.js.map} +0 -0
- /package/dist/{chunk-JFDEYXF7.js.map → chunk-3NAHZQU3.js.map} +0 -0
- /package/dist/{chunk-XBRPEGXF.js.map → chunk-3UOSVTFR.js.map} +0 -0
- /package/dist/{chunk-TTKWTT72.js.map → chunk-3ZW6ZQO6.js.map} +0 -0
- /package/dist/{chunk-UV72DEZD.js.map → chunk-4B77XSG5.js.map} +0 -0
- /package/dist/{chunk-LMHDFOVV.js.map → chunk-5CPI2QWG.js.map} +0 -0
- /package/dist/{chunk-P72WZMWQ.js.map → chunk-5FZQ74K5.js.map} +0 -0
- /package/dist/{chunk-BRT7KEXU.js.map → chunk-6TWXQ4E2.js.map} +0 -0
- /package/dist/{chunk-CV6ZYXK3.js.map → chunk-7I7AYIUQ.js.map} +0 -0
- /package/dist/{chunk-TVVEYCNW.js.map → chunk-7K5Q6COX.js.map} +0 -0
- /package/dist/{chunk-JN57HZCD.js.map → chunk-ATEAL5EI.js.map} +0 -0
- /package/dist/{chunk-4PYLBXX6.js.map → chunk-AYAROCWD.js.map} +0 -0
- /package/dist/{chunk-NB2P47N7.js.map → chunk-CUUY5CC4.js.map} +0 -0
- /package/dist/{chunk-KL5Y6PEV.js.map → chunk-E3ZMFFQZ.js.map} +0 -0
- /package/dist/{chunk-55FDQYPS.js.map → chunk-ES5IHQ6M.js.map} +0 -0
- /package/dist/{chunk-N47ZWQBO.js.map → chunk-G2NSSQES.js.map} +0 -0
- /package/dist/{chunk-GSWPU5CR.js.map → chunk-GD3QOBMB.js.map} +0 -0
- /package/dist/{chunk-SACPRJ7F.js.map → chunk-JNIJBXVK.js.map} +0 -0
- /package/dist/{chunk-DGLON3AL.js.map → chunk-KNRG6ZGJ.js.map} +0 -0
- /package/dist/{chunk-GEUDRENF.js.map → chunk-MMTG3SCJ.js.map} +0 -0
- /package/dist/{chunk-WZFAPHIK.js.map → chunk-MU7ZHSZE.js.map} +0 -0
- /package/dist/{chunk-W4FBGYGK.js.map → chunk-NRV4Y3PM.js.map} +0 -0
- /package/dist/{chunk-KQ2XCQYN.js.map → chunk-P2BLHUL2.js.map} +0 -0
- /package/dist/{chunk-6L775BUB.js.map → chunk-QE63OHLB.js.map} +0 -0
- /package/dist/{chunk-ONHRRJZM.js.map → chunk-QJAQNXWI.js.map} +0 -0
- /package/dist/{chunk-6RYWNBSA.js.map → chunk-SVZGA2MK.js.map} +0 -0
- /package/dist/{chunk-OCMLGND7.js.map → chunk-WWZ35GWW.js.map} +0 -0
- /package/dist/{chunk-A5N6ISRK.js.map → chunk-ZN4UZWMT.js.map} +0 -0
- /package/dist/{chunk-7M6APKJL.js.map → chunk-ZYU7ZFLT.js.map} +0 -0
- /package/dist/{first-start-migration-LEXL3XYL.js.map → first-start-migration-BKNGOFED.js.map} +0 -0
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import type { WearablesService } from "./wearables/service.js";
|
|
2
|
+
import type { MeetingsService, MeetingsGetResult, MeetingsListResult } from "./meetings/service.js";
|
|
3
|
+
import type { MeetingsDayBuildSummary } from "./meetings/build.js";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Caller scope threaded into the wearables + meetings access ops so reads and
|
|
7
|
+
* writes resolve to the CALLER namespace (caller-derived namespace symmetry,
|
|
8
|
+
* issue #2123), not a machine-wide default. Every field is optional; omitting
|
|
9
|
+
* all three preserves the operator/CLI default-namespace behavior.
|
|
10
|
+
*/
|
|
11
|
+
export type WearablesMeetingsScope = {
|
|
12
|
+
sessionKey?: string;
|
|
13
|
+
authenticatedPrincipal?: string;
|
|
14
|
+
namespace?: string;
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* The access-service capabilities the wearables + meetings surface needs.
|
|
19
|
+
* A structural host (not the class itself) so these ops stay pure delegators
|
|
20
|
+
* while EngramAccessService keeps its namespace/principal resolvers private.
|
|
21
|
+
*/
|
|
22
|
+
export interface WearablesMeetingsHost {
|
|
23
|
+
readonly orchestrator: {
|
|
24
|
+
getWearablesService(namespace: string): WearablesService;
|
|
25
|
+
getMeetingsService(namespace: string): Promise<MeetingsService>;
|
|
26
|
+
readonly config: { readonly meetings: { readonly enabled: boolean } };
|
|
27
|
+
};
|
|
28
|
+
resolveReadableNamespace(namespace: string | undefined, principal?: string): string;
|
|
29
|
+
writableNamespaceFor(
|
|
30
|
+
namespace: string | undefined,
|
|
31
|
+
sessionKey: string | undefined,
|
|
32
|
+
authenticatedPrincipal?: string,
|
|
33
|
+
): string;
|
|
34
|
+
resolveRequestPrincipal(sessionKey: string | undefined, authenticatedPrincipal?: string): string | undefined;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Wearables reads resolve to the CALLER namespace via resolveReadableNamespace;
|
|
39
|
+
* sync writes via writableNamespaceFor; build needs BOTH — it reads
|
|
40
|
+
* transcripts/records to derive, then writes episodes. Non-default callers are
|
|
41
|
+
* strictly isolated: no default-ns wearable fallback, no machine-global
|
|
42
|
+
* activity (machine-scoped, consumed only by the default ns).
|
|
43
|
+
*/
|
|
44
|
+
function wearablesReadService(host: WearablesMeetingsHost, scope?: WearablesMeetingsScope): WearablesService {
|
|
45
|
+
return host.orchestrator.getWearablesService(
|
|
46
|
+
host.resolveReadableNamespace(scope?.namespace, host.resolveRequestPrincipal(scope?.sessionKey, scope?.authenticatedPrincipal)),
|
|
47
|
+
);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export function wearablesStatus(
|
|
51
|
+
host: WearablesMeetingsHost,
|
|
52
|
+
scope?: WearablesMeetingsScope,
|
|
53
|
+
): Promise<Awaited<ReturnType<WearablesService["status"]>>> {
|
|
54
|
+
return wearablesReadService(host, scope).status();
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export async function wearablesSync(
|
|
58
|
+
host: WearablesMeetingsHost,
|
|
59
|
+
request: { source?: string; date?: string; days?: number; forceMemories?: boolean } & WearablesMeetingsScope,
|
|
60
|
+
): Promise<Awaited<ReturnType<WearablesService["sync"]>>> {
|
|
61
|
+
const namespace = host.writableNamespaceFor(request.namespace, request.sessionKey, request.authenticatedPrincipal);
|
|
62
|
+
const summaries = await host.orchestrator
|
|
63
|
+
.getWearablesService(namespace)
|
|
64
|
+
.sync({ source: request.source, date: request.date, days: request.days, forceMemories: request.forceMemories });
|
|
65
|
+
// Manual one-shot sync (HTTP/MCP/CLI): the meeting tail-step arms a
|
|
66
|
+
// debounced, unref'd timer a short-lived caller exits before firing. Drain
|
|
67
|
+
// it now so a manual sync's meeting build actually runs before we return.
|
|
68
|
+
// The long-lived auto-sync daemon does NOT flush — it keeps coalescing.
|
|
69
|
+
if (host.orchestrator.config.meetings.enabled) {
|
|
70
|
+
await (await host.orchestrator.getMeetingsService(namespace)).flushBuilds();
|
|
71
|
+
}
|
|
72
|
+
return summaries;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
export function wearablesTranscriptDay(
|
|
76
|
+
host: WearablesMeetingsHost,
|
|
77
|
+
request: { date: string; source?: string } & WearablesMeetingsScope,
|
|
78
|
+
): Promise<Awaited<ReturnType<WearablesService["dayTranscript"]>>> {
|
|
79
|
+
return wearablesReadService(host, request).dayTranscript(request.date, request.source);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
export function wearablesTranscriptSearch(
|
|
83
|
+
host: WearablesMeetingsHost,
|
|
84
|
+
request: { query: string; source?: string; from?: string; to?: string; limit?: number } & WearablesMeetingsScope,
|
|
85
|
+
): Promise<Awaited<ReturnType<WearablesService["searchTranscripts"]>>> {
|
|
86
|
+
return wearablesReadService(host, request).searchTranscripts(request.query, {
|
|
87
|
+
source: request.source,
|
|
88
|
+
from: request.from,
|
|
89
|
+
to: request.to,
|
|
90
|
+
limit: request.limit,
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
export function wearablesTranscriptMemories(
|
|
95
|
+
host: WearablesMeetingsHost,
|
|
96
|
+
request: { source?: string; date?: string; limit?: number } & WearablesMeetingsScope,
|
|
97
|
+
): Promise<Awaited<ReturnType<WearablesService["transcriptMemories"]>>> {
|
|
98
|
+
return wearablesReadService(host, request).transcriptMemories({
|
|
99
|
+
source: request.source,
|
|
100
|
+
date: request.date,
|
|
101
|
+
limit: request.limit,
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
// Meetings (issue #1900): thin delegations to the caller-ns MeetingsService.
|
|
106
|
+
export async function meetingsList(
|
|
107
|
+
host: WearablesMeetingsHost,
|
|
108
|
+
date?: string,
|
|
109
|
+
scope?: WearablesMeetingsScope,
|
|
110
|
+
): Promise<MeetingsListResult> {
|
|
111
|
+
return (
|
|
112
|
+
await host.orchestrator.getMeetingsService(
|
|
113
|
+
host.resolveReadableNamespace(scope?.namespace, host.resolveRequestPrincipal(scope?.sessionKey, scope?.authenticatedPrincipal)),
|
|
114
|
+
)
|
|
115
|
+
).meetingsList(date);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
export async function meetingsGet(
|
|
119
|
+
host: WearablesMeetingsHost,
|
|
120
|
+
id: string,
|
|
121
|
+
scope?: WearablesMeetingsScope,
|
|
122
|
+
): Promise<MeetingsGetResult> {
|
|
123
|
+
return (
|
|
124
|
+
await host.orchestrator.getMeetingsService(
|
|
125
|
+
host.resolveReadableNamespace(scope?.namespace, host.resolveRequestPrincipal(scope?.sessionKey, scope?.authenticatedPrincipal)),
|
|
126
|
+
)
|
|
127
|
+
).meetingsGet(id);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
export async function meetingsBuild(
|
|
131
|
+
host: WearablesMeetingsHost,
|
|
132
|
+
date: string,
|
|
133
|
+
scope?: WearablesMeetingsScope,
|
|
134
|
+
): Promise<MeetingsDayBuildSummary> {
|
|
135
|
+
const principal = host.resolveRequestPrincipal(scope?.sessionKey, scope?.authenticatedPrincipal);
|
|
136
|
+
const namespace = host.writableNamespaceFor(scope?.namespace, scope?.sessionKey, scope?.authenticatedPrincipal);
|
|
137
|
+
host.resolveReadableNamespace(namespace, principal);
|
|
138
|
+
return (await host.orchestrator.getMeetingsService(namespace)).meetingsBuild(date);
|
|
139
|
+
}
|
package/src/activity/digest.ts
CHANGED
|
@@ -45,7 +45,7 @@ export function activityDigestPath(memoryDir: string, date: string): string {
|
|
|
45
45
|
|
|
46
46
|
// ── DST-aware local-day window ──────────────────────────────────────────────
|
|
47
47
|
|
|
48
|
-
function timezoneOffsetIso(instant: Date, timezone: string): string {
|
|
48
|
+
export function timezoneOffsetIso(instant: Date, timezone: string): string {
|
|
49
49
|
const parts = new Intl.DateTimeFormat("en-US", {
|
|
50
50
|
timeZone: timezone,
|
|
51
51
|
timeZoneName: "longOffset",
|
|
@@ -453,3 +453,40 @@ test("an older-day failure does not starve newer dates in a multi-day window", a
|
|
|
453
453
|
await rm(memoryDir, { recursive: true, force: true });
|
|
454
454
|
}
|
|
455
455
|
});
|
|
456
|
+
|
|
457
|
+
test("runActivitySyncOnce reports every local date that gained snapshots (issue #1900 backfill)", async () => {
|
|
458
|
+
const memoryDir = await mkdtemp(path.join(os.tmpdir(), "remnic-activity-runner-"));
|
|
459
|
+
const store = ActivityStore.open(memoryDir);
|
|
460
|
+
try {
|
|
461
|
+
let calls = 0;
|
|
462
|
+
const client: ActivitySourceClient = {
|
|
463
|
+
machineLabel: "workstation-a",
|
|
464
|
+
async verify() {
|
|
465
|
+
return { ok: true };
|
|
466
|
+
},
|
|
467
|
+
async fetchSnapshots() {
|
|
468
|
+
calls += 1;
|
|
469
|
+
// Dates are processed oldest-first: day 1 = 2026-07-21, day 2 = 2026-07-22.
|
|
470
|
+
const capturedAtUtc = calls === 1 ? "2026-07-21T14:00:00.000Z" : "2026-07-22T14:00:00.000Z";
|
|
471
|
+
return { snapshots: [snapshot({ capturedAtUtc, contentHash: `hash-${calls}` })], nextCursor: null };
|
|
472
|
+
},
|
|
473
|
+
};
|
|
474
|
+
|
|
475
|
+
const summary = await runActivitySyncOnce({
|
|
476
|
+
config: enabledConfig({ syncDays: 2 }),
|
|
477
|
+
memoryDir,
|
|
478
|
+
store,
|
|
479
|
+
now: NOW,
|
|
480
|
+
createSourceClient: () => client,
|
|
481
|
+
});
|
|
482
|
+
|
|
483
|
+
assert.deepEqual(
|
|
484
|
+
summary.touchedDates,
|
|
485
|
+
["2026-07-21", "2026-07-22"],
|
|
486
|
+
"both days that inserted snapshots are reported so meetings rebuild the older day too",
|
|
487
|
+
);
|
|
488
|
+
} finally {
|
|
489
|
+
store.close();
|
|
490
|
+
await rm(memoryDir, { recursive: true, force: true });
|
|
491
|
+
}
|
|
492
|
+
});
|
package/src/activity/runner.ts
CHANGED
|
@@ -60,6 +60,12 @@ export interface ActivitySyncRunSummary {
|
|
|
60
60
|
reindexErrorCount: number;
|
|
61
61
|
totalInserted: number;
|
|
62
62
|
results: ActivitySourceRunItem[];
|
|
63
|
+
/**
|
|
64
|
+
* Local dates (YYYY-MM-DD, in the sync timezone) that gained new snapshots
|
|
65
|
+
* this run — a backfill/rolling window can touch several. Meetings rebuild
|
|
66
|
+
* uses this so a change to an OLDER day rebuilds that day, not just today.
|
|
67
|
+
*/
|
|
68
|
+
touchedDates: string[];
|
|
63
69
|
}
|
|
64
70
|
|
|
65
71
|
export interface ActivitySyncRunOptions {
|
|
@@ -148,6 +154,7 @@ export async function runActivitySyncOnce(options: ActivitySyncRunOptions): Prom
|
|
|
148
154
|
reindexErrorCount: 0,
|
|
149
155
|
totalInserted: 0,
|
|
150
156
|
results: [],
|
|
157
|
+
touchedDates: [],
|
|
151
158
|
};
|
|
152
159
|
}
|
|
153
160
|
|
|
@@ -163,6 +170,9 @@ export async function runActivitySyncOnce(options: ActivitySyncRunOptions): Prom
|
|
|
163
170
|
const ownStore = options.store === undefined;
|
|
164
171
|
const store = options.store ?? ActivityStore.open(options.memoryDir);
|
|
165
172
|
const results: ActivitySourceRunItem[] = [];
|
|
173
|
+
// Local dates that gained new snapshots this run (any source). Drives the
|
|
174
|
+
// meetings rebuild fan-out so a backfilled OLDER day is rebuilt too.
|
|
175
|
+
const touchedDates = new Set<string>();
|
|
166
176
|
|
|
167
177
|
try {
|
|
168
178
|
for (const sourceConfig of options.config.sources) {
|
|
@@ -191,6 +201,7 @@ export async function runActivitySyncOnce(options: ActivitySyncRunOptions): Prom
|
|
|
191
201
|
});
|
|
192
202
|
item.fetched += result.fetched;
|
|
193
203
|
item.inserted += result.inserted;
|
|
204
|
+
if (result.inserted > 0) touchedDates.add(date);
|
|
194
205
|
item.duplicates += result.duplicates;
|
|
195
206
|
if (result.digestWritten) item.digestsWritten += 1;
|
|
196
207
|
item.cursor = result.cursor;
|
|
@@ -233,5 +244,6 @@ export async function runActivitySyncOnce(options: ActivitySyncRunOptions): Prom
|
|
|
233
244
|
reindexErrorCount: results.filter((item) => item.reindexError !== undefined).length,
|
|
234
245
|
totalInserted: results.reduce((sum, item) => sum + item.inserted, 0),
|
|
235
246
|
results,
|
|
247
|
+
touchedDates: [...touchedDates].sort(),
|
|
236
248
|
};
|
|
237
249
|
}
|
|
@@ -50,6 +50,13 @@ export interface ActivitySyncRegistrarDeps {
|
|
|
50
50
|
readonly getQmd: () => ActivityIndexRefresher;
|
|
51
51
|
/** Debounced/singleflighted QMD retry used when a tick's reindex fails. */
|
|
52
52
|
readonly requestReindexRetry: () => void;
|
|
53
|
+
/**
|
|
54
|
+
* Tail step (issue #1900): observe a completed sync tick so a dependent
|
|
55
|
+
* subsystem (meeting building) can rebuild the affected day(s). Fired only
|
|
56
|
+
* after a durable tick and never after teardown. Optional; omitted by hosts
|
|
57
|
+
* that do not build meetings.
|
|
58
|
+
*/
|
|
59
|
+
readonly onSynced?: (summary: ActivitySyncRunSummary) => void;
|
|
53
60
|
/** Scheduler factory (injectable for tests); defaults to the real scheduler. */
|
|
54
61
|
readonly createScheduler?: (options: ActivitySyncSchedulerOptions) => ActivitySyncSchedulerLike;
|
|
55
62
|
}
|
|
@@ -111,6 +118,12 @@ export class ActivitySyncRegistrar {
|
|
|
111
118
|
);
|
|
112
119
|
this.deps.requestReindexRetry();
|
|
113
120
|
}
|
|
121
|
+
// Tail step: a durable tick that ingested snapshots may have changed a
|
|
122
|
+
// meeting's screen context; notify the dependent builder. Never after
|
|
123
|
+
// teardown.
|
|
124
|
+
if (summary.enabled && summary.totalInserted > 0 && !this.disposed) {
|
|
125
|
+
this.deps.onSynced?.(summary);
|
|
126
|
+
}
|
|
114
127
|
},
|
|
115
128
|
});
|
|
116
129
|
this.scheduler = scheduler;
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Meetings command group (issue #1900) — extracted from cli.ts so the surface
|
|
3
|
+
* file stays under its structural ceiling. Mirrors the
|
|
4
|
+
* registerResearchStatusCommands / registerCreationLedgerCommands seam: a single
|
|
5
|
+
* registrar wires the `meetings` command (list / show / build) on the parent
|
|
6
|
+
* `engram` command.
|
|
7
|
+
*
|
|
8
|
+
* Every subcommand forwards to the shared runner in meetings/cli.ts so this host
|
|
9
|
+
* CLI and the standalone `remnic` CLI never fork behavior or formatting.
|
|
10
|
+
* Behaviour is identical to the inline registration it replaces — the
|
|
11
|
+
* cli-command-surface contract tests guard against silent drift.
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
import type { Orchestrator } from "../orchestrator.js";
|
|
15
|
+
import type { CliCommand } from "../cli.js";
|
|
16
|
+
import { runMeetingsCliCommand } from "../meetings/cli.js";
|
|
17
|
+
|
|
18
|
+
export function registerMeetingsCommands(cmd: CliCommand, orchestrator: Orchestrator): void {
|
|
19
|
+
const meetingsCmd = cmd
|
|
20
|
+
.command("meetings")
|
|
21
|
+
.description(
|
|
22
|
+
"Retrospective meetings: list records, show one, build (detect + fuse + store) a day",
|
|
23
|
+
);
|
|
24
|
+
const forwardMeetings = async (argv: string[]): Promise<void> => {
|
|
25
|
+
const service = await orchestrator.getMeetingsService();
|
|
26
|
+
const code = await runMeetingsCliCommand(
|
|
27
|
+
{ store: service.store, builder: service.builder, config: service.config },
|
|
28
|
+
argv,
|
|
29
|
+
{ stdout: process.stdout, stderr: process.stderr },
|
|
30
|
+
);
|
|
31
|
+
if (code !== 0) process.exitCode = code;
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
meetingsCmd
|
|
35
|
+
.command("list")
|
|
36
|
+
.description("List meeting records (all days, or one day)")
|
|
37
|
+
.option("--date <date>", "Day to list (YYYY-MM-DD)")
|
|
38
|
+
.option("--json", "JSON output")
|
|
39
|
+
.action(async (...args: unknown[]) => {
|
|
40
|
+
const options = (args[0] ?? {}) as Record<string, unknown>;
|
|
41
|
+
await forwardMeetings([
|
|
42
|
+
"list",
|
|
43
|
+
...(typeof options.date === "string" && options.date.length > 0
|
|
44
|
+
? ["--date", options.date]
|
|
45
|
+
: []),
|
|
46
|
+
...(options.json === true ? ["--json"] : []),
|
|
47
|
+
]);
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
meetingsCmd
|
|
51
|
+
.command("show <meeting-id>")
|
|
52
|
+
.description("Print a stored meeting record")
|
|
53
|
+
.action(async (...args: unknown[]) => {
|
|
54
|
+
await forwardMeetings(["show", String(args[0] ?? "")]);
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
meetingsCmd
|
|
58
|
+
.command("build")
|
|
59
|
+
.description("Detect + fuse + store the day's meetings")
|
|
60
|
+
.option("--date <date>", "Day to build (YYYY-MM-DD)")
|
|
61
|
+
.option("--json", "JSON output")
|
|
62
|
+
.action(async (...args: unknown[]) => {
|
|
63
|
+
const options = (args[0] ?? {}) as Record<string, unknown>;
|
|
64
|
+
await forwardMeetings([
|
|
65
|
+
"build",
|
|
66
|
+
...(typeof options.date === "string" ? ["--date", options.date] : []),
|
|
67
|
+
...(options.json === true ? ["--json"] : []),
|
|
68
|
+
]);
|
|
69
|
+
});
|
|
70
|
+
}
|
package/src/cli.ts
CHANGED
|
@@ -13,6 +13,7 @@ import { ThreadingManager } from "./threading.js";
|
|
|
13
13
|
import { bumpMemoryCorpusVersionForDir } from "./memory-corpus-version.js";
|
|
14
14
|
import { utcDayRange } from "./transcript.js";
|
|
15
15
|
import { runWearablesCliCommand } from "./wearables/cli.js";
|
|
16
|
+
import { registerMeetingsCommands } from "./cli/meetings-commands.js";
|
|
16
17
|
import { registerResearchStatusCommands } from "./cli/research-status-commands.js";
|
|
17
18
|
import { registerCreationLedgerCommands } from "./cli/creation-ledger-commands.js";
|
|
18
19
|
import type {
|
|
@@ -5197,11 +5198,11 @@ export function registerCli(
|
|
|
5197
5198
|
"Wearable transcript sources (Limitless / Bee / Omi): sync, transcripts, search, speakers, corrections",
|
|
5198
5199
|
);
|
|
5199
5200
|
const forwardWearables = async (argv: string[]): Promise<void> => {
|
|
5200
|
-
const
|
|
5201
|
-
|
|
5202
|
-
|
|
5203
|
-
|
|
5204
|
-
|
|
5201
|
+
const io = { stdout: process.stdout, stderr: process.stderr };
|
|
5202
|
+
const code = await runWearablesCliCommand(orchestrator.getWearablesService(), argv, io);
|
|
5203
|
+
if (argv[0] === "sync" && code === 0 && orchestrator.config.meetings.enabled) { // drain debounced build
|
|
5204
|
+
await (await orchestrator.getMeetingsService()).flushBuilds();
|
|
5205
|
+
}
|
|
5205
5206
|
if (code !== 0) process.exitCode = code;
|
|
5206
5207
|
};
|
|
5207
5208
|
const stringOpt = (options: Record<string, unknown>, key: string, flag: string): string[] =>
|
|
@@ -6230,7 +6231,7 @@ export function registerCli(
|
|
|
6230
6231
|
|
|
6231
6232
|
registerResearchStatusCommands(cmd, orchestrator);
|
|
6232
6233
|
|
|
6233
|
-
registerCreationLedgerCommands(cmd, orchestrator);
|
|
6234
|
+
registerCreationLedgerCommands(cmd, orchestrator); registerMeetingsCommands(cmd, orchestrator);
|
|
6234
6235
|
|
|
6235
6236
|
cmd
|
|
6236
6237
|
.command("trust-zone-promote")
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { ExtractionFailureClass } from "./types.js";
|
|
2
|
+
import { isTransientHttpError } from "./connectors/live/transient-errors.js";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Read a numeric HTTP status off a thrown error without re-implementing the
|
|
6
|
+
* shared transient classifier. Uses `in`/typeof narrowing (no inline casts).
|
|
7
|
+
*/
|
|
8
|
+
function httpStatusFromError(err: unknown): number | undefined {
|
|
9
|
+
if (!err || typeof err !== "object") return undefined;
|
|
10
|
+
if ("status" in err && typeof err.status === "number" && Number.isFinite(err.status)) return err.status;
|
|
11
|
+
if ("statusCode" in err && typeof err.statusCode === "number" && Number.isFinite(err.statusCode)) {
|
|
12
|
+
return err.statusCode;
|
|
13
|
+
}
|
|
14
|
+
return undefined;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Map a thrown extraction error to a coarse failure class for the retry/breaker
|
|
19
|
+
* layer. 401/403 → `auth_config` (misconfigured provider, open the breaker);
|
|
20
|
+
* transient (429/5xx/network, per the shared `isTransientHttpError`) → back off;
|
|
21
|
+
* anything else defaults to `provider_retryable` (fail-open toward retry, but
|
|
22
|
+
* capped by the per-fingerprint attempt budget). Never throws.
|
|
23
|
+
*/
|
|
24
|
+
export function classifyExtractionThrownError(err: unknown): ExtractionFailureClass {
|
|
25
|
+
try {
|
|
26
|
+
const status = httpStatusFromError(err);
|
|
27
|
+
if (status === 401 || status === 403) return "auth_config";
|
|
28
|
+
if (isTransientHttpError(err)) return "provider_retryable";
|
|
29
|
+
return "provider_retryable";
|
|
30
|
+
} catch {
|
|
31
|
+
return "provider_retryable";
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Map the gateway fallback's discriminated parse-failure reason to a coarse
|
|
37
|
+
* extraction failure class. "no models configured" is an auth/config problem;
|
|
38
|
+
* an HTTP/transport failure backs off; an unparseable-but-present response is a
|
|
39
|
+
* genuine empty-parse.
|
|
40
|
+
*/
|
|
41
|
+
export function classifyFallbackParseFailure(
|
|
42
|
+
reason: "no_models" | "empty" | "http_error",
|
|
43
|
+
): ExtractionFailureClass {
|
|
44
|
+
switch (reason) {
|
|
45
|
+
case "no_models":
|
|
46
|
+
return "auth_config";
|
|
47
|
+
case "http_error":
|
|
48
|
+
return "provider_retryable";
|
|
49
|
+
case "empty":
|
|
50
|
+
return "parse_empty";
|
|
51
|
+
}
|
|
52
|
+
}
|
package/src/extraction.ts
CHANGED
|
@@ -40,7 +40,8 @@ import { normalizeProcedureSteps } from "./procedural/procedure-types.js";
|
|
|
40
40
|
import { normalizeReasoningTrace } from "./reasoning-trace-types.js";
|
|
41
41
|
import { looksLikeMechanicalTelemetryTranscript } from "./telemetry-transcript.js";
|
|
42
42
|
import { buildFactProvenance, type ProvenanceTurnInput } from "./provenance.js";
|
|
43
|
-
import {
|
|
43
|
+
import { classifyExtractionThrownError, classifyFallbackParseFailure } from "./extraction-error-classification.js";
|
|
44
|
+
export { classifyExtractionThrownError, classifyFallbackParseFailure } from "./extraction-error-classification.js";
|
|
44
45
|
import { resolvePipelineProcessingCapabilities } from "./capabilities.js";
|
|
45
46
|
import { resolveMemoryLifecycleCapabilities,
|
|
46
47
|
resolveLocalLlmCapabilities,resolveRecallAuxiliaryCapabilities } from "./capabilities.js";
|
|
@@ -50,55 +51,6 @@ type ExtractedFactResult = ExtractionResult["facts"][number];
|
|
|
50
51
|
type ExtractedEntityResult = ExtractionResult["entities"][number];
|
|
51
52
|
type ExtractedRelationshipResult = NonNullable<ExtractionResult["relationships"]>[number];
|
|
52
53
|
|
|
53
|
-
/**
|
|
54
|
-
* Read a numeric HTTP status off a thrown error without re-implementing the
|
|
55
|
-
* shared transient classifier. Uses `in`/typeof narrowing (no inline casts).
|
|
56
|
-
*/
|
|
57
|
-
function httpStatusFromError(err: unknown): number | undefined {
|
|
58
|
-
if (!err || typeof err !== "object") return undefined;
|
|
59
|
-
if ("status" in err && typeof err.status === "number" && Number.isFinite(err.status)) return err.status;
|
|
60
|
-
if ("statusCode" in err && typeof err.statusCode === "number" && Number.isFinite(err.statusCode)) {
|
|
61
|
-
return err.statusCode;
|
|
62
|
-
}
|
|
63
|
-
return undefined;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
/**
|
|
67
|
-
* Map a thrown extraction error to a coarse failure class for the retry/breaker
|
|
68
|
-
* layer. 401/403 → `auth_config` (misconfigured provider, open the breaker);
|
|
69
|
-
* transient (429/5xx/network, per the shared `isTransientHttpError`) → back off;
|
|
70
|
-
* anything else defaults to `provider_retryable` (fail-open toward retry, but
|
|
71
|
-
* capped by the per-fingerprint attempt budget). Never throws.
|
|
72
|
-
*/
|
|
73
|
-
export function classifyExtractionThrownError(err: unknown): ExtractionFailureClass {
|
|
74
|
-
try {
|
|
75
|
-
const status = httpStatusFromError(err);
|
|
76
|
-
if (status === 401 || status === 403) return "auth_config";
|
|
77
|
-
if (isTransientHttpError(err)) return "provider_retryable";
|
|
78
|
-
return "provider_retryable";
|
|
79
|
-
} catch {
|
|
80
|
-
return "provider_retryable";
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
/**
|
|
85
|
-
* Map the gateway fallback's discriminated parse-failure reason to a coarse
|
|
86
|
-
* extraction failure class. "no models configured" is an auth/config problem;
|
|
87
|
-
* an HTTP/transport failure backs off; an unparseable-but-present response is a
|
|
88
|
-
* genuine empty-parse.
|
|
89
|
-
*/
|
|
90
|
-
export function classifyFallbackParseFailure(
|
|
91
|
-
reason: "no_models" | "empty" | "http_error",
|
|
92
|
-
): ExtractionFailureClass {
|
|
93
|
-
switch (reason) {
|
|
94
|
-
case "no_models":
|
|
95
|
-
return "auth_config";
|
|
96
|
-
case "http_error":
|
|
97
|
-
return "provider_retryable";
|
|
98
|
-
case "empty":
|
|
99
|
-
return "parse_empty";
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
54
|
const PROACTIVE_MIN_CONFIDENCE = 0.8;
|
|
103
55
|
const CONSOLIDATION_RESPONSE_SCHEMA = `{
|
|
104
56
|
"items": [
|
|
@@ -21,6 +21,8 @@ export const MCP_READ_ONLY_TOOL_SUFFIXES: Readonly<Record<string, true>> = {
|
|
|
21
21
|
transcript_day: true,
|
|
22
22
|
transcript_search: true,
|
|
23
23
|
transcript_memories: true,
|
|
24
|
+
meetings_list: true,
|
|
25
|
+
meetings_get: true,
|
|
24
26
|
action_confidence: true,
|
|
25
27
|
capsule_list: true,
|
|
26
28
|
procedural_stats: true,
|