@remnic/core 9.19.0 → 9.21.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/access-admin-ops-surface.d.ts +8 -8
- package/dist/access-admin-ops-surface.js +8 -8
- package/dist/access-boundary.d.ts +8 -8
- package/dist/access-boundary.js +8 -8
- package/dist/access-cli.js +32 -32
- package/dist/access-http.d.ts +8 -8
- package/dist/access-http.js +12 -12
- package/dist/access-identity-continuity-surface.d.ts +6 -6
- package/dist/access-identity-continuity-surface.js +8 -8
- package/dist/access-lcm-surface.d.ts +8 -8
- package/dist/access-lcm-surface.js +8 -8
- package/dist/access-mcp.d.ts +8 -8
- package/dist/access-mcp.js +11 -11
- package/dist/access-memory-search-fanout.d.ts +2 -2
- package/dist/{access-namespace-preflight-BsawJa-L.d.ts → access-namespace-preflight-tmwQgCT6.d.ts} +1 -1
- package/dist/access-namespace-preflight.d.ts +3 -3
- package/dist/access-namespace-preflight.js +8 -8
- package/dist/access-observe-write-surface.d.ts +8 -8
- package/dist/access-observe-write-surface.js +8 -8
- package/dist/access-operations-batch.js +9 -9
- package/dist/access-operations.d.ts +8 -8
- package/dist/access-operations.js +10 -10
- package/dist/access-recall-concurrency.d.ts +8 -8
- package/dist/access-recall-concurrency.js +8 -8
- package/dist/access-recall-response.d.ts +8 -8
- package/dist/access-recall-response.js +8 -8
- package/dist/access-recall-surface.d.ts +8 -8
- package/dist/access-recall-surface.js +8 -8
- package/dist/{access-service-DLuVnV6a.d.ts → access-service-BqUii7LY.d.ts} +6 -6
- package/dist/access-service.d.ts +8 -8
- package/dist/access-service.js +8 -8
- package/dist/access-surface-catalog.d.ts +8 -8
- 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 +1 -1
- package/dist/{auto-sync-IH3G25MT.js → auto-sync-UPTUVE4X.js} +3 -3
- package/dist/behavior-learner.d.ts +1 -1
- package/dist/behavior-signals.d.ts +1 -1
- package/dist/bootstrap.d.ts +6 -6
- package/dist/briefing.d.ts +2 -2
- package/dist/briefing.js +4 -4
- package/dist/buffer-surprise-report.d.ts +1 -1
- package/dist/buffer.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-O6P8694A.d.ts → catalog-iWvWz61I.d.ts} +1 -1
- package/dist/causal-behavior.d.ts +1 -1
- package/dist/causal-consolidation.d.ts +1 -1
- package/dist/causal-consolidation.js +5 -5
- package/dist/causal-trajectory-graph.d.ts +1 -1
- package/dist/{chunk-YUWFASAK.js → chunk-275ENJDK.js} +2 -2
- package/dist/{chunk-EZFVVEQG.js → chunk-3ZUY2VQF.js} +2 -2
- package/dist/{chunk-HRREDJSL.js → chunk-4F6AANKS.js} +3 -3
- package/dist/{chunk-U7D5HWNG.js → chunk-4PYLBXX6.js} +2 -2
- package/dist/{chunk-3LZSS77C.js → chunk-53WDAG7X.js} +2 -2
- package/dist/{chunk-QEEMLGCO.js → chunk-5IXPWEQB.js} +5 -5
- package/dist/{chunk-VSVX777Y.js → chunk-5JQLAQUZ.js} +2 -2
- package/dist/{chunk-DR65EEXG.js → chunk-62QM5MKY.js} +7 -7
- package/dist/{chunk-WYL5ODHJ.js → chunk-6NZ7U4R4.js} +1 -1
- package/dist/chunk-6NZ7U4R4.js.map +1 -0
- package/dist/{chunk-OFQUY5NZ.js → chunk-7M6APKJL.js} +331 -5
- package/dist/chunk-7M6APKJL.js.map +1 -0
- package/dist/{chunk-OOJQ6ID5.js → chunk-AT3TDN6O.js} +1017 -296
- package/dist/chunk-AT3TDN6O.js.map +1 -0
- package/dist/{chunk-DQCUBRTZ.js → chunk-B7C3TF5H.js} +2 -2
- package/dist/{chunk-RPOOJPMB.js → chunk-EILX7SQR.js} +3 -3
- package/dist/{chunk-D5H3B36B.js → chunk-EXU5IQ3S.js} +2 -2
- package/dist/{chunk-KUF7OIFK.js → chunk-EZKKHVFY.js} +2 -2
- package/dist/{chunk-S5HCKQ7Q.js → chunk-GEUDRENF.js} +2 -2
- package/dist/{chunk-X7GOH7Y6.js → chunk-HJEEAO4O.js} +2 -2
- package/dist/{chunk-FL7MNSH3.js → chunk-HPOY2PHQ.js} +3 -3
- package/dist/{chunk-Q55XM4SU.js → chunk-JFDEYXF7.js} +2 -2
- package/dist/{chunk-UVSDFM7R.js → chunk-JN3IUA2Q.js} +2 -2
- package/dist/{chunk-PLRDZ2OO.js → chunk-JWMYVQAM.js} +2 -2
- package/dist/{chunk-KOFVOVJG.js → chunk-KHRKEELC.js} +17 -17
- package/dist/{chunk-Y4JHE2ML.js → chunk-LI4ZOFHW.js} +2 -2
- package/dist/{chunk-MLW3J7IC.js → chunk-LMHDFOVV.js} +3 -3
- package/dist/{chunk-X6E5WAGX.js → chunk-N7EVMKP6.js} +6 -6
- package/dist/{chunk-HCNG42P3.js → chunk-Q3FWRDCP.js} +2 -2
- package/dist/{chunk-5MFHOX5T.js → chunk-QO2KODU6.js} +2 -2
- package/dist/{chunk-W3DJOT22.js → chunk-TCZWBJBO.js} +2 -2
- package/dist/{chunk-B3ABVQ36.js → chunk-UHVXE24Y.js} +2 -1
- package/dist/{chunk-UX3ZXN34.js → chunk-UV72DEZD.js} +2 -2
- package/dist/{chunk-OZSL2QZC.js → chunk-V5TSUGRB.js} +5 -5
- package/dist/{chunk-CH3BRJ3P.js → chunk-X5QS5C2O.js} +2 -2
- package/dist/{cli-0dQHR6e6.d.ts → cli-DPEhq0Cp.d.ts} +5 -5
- package/dist/cli.d.ts +10 -10
- package/dist/cli.js +25 -25
- package/dist/compounding/engine.d.ts +2 -2
- package/dist/compounding/engine.js +4 -4
- package/dist/compounding/preference-consolidator.d.ts +1 -1
- package/dist/compression-optimizer.d.ts +1 -1
- package/dist/config.d.ts +1 -1
- package/dist/config.js +1 -1
- package/dist/connectors/codex-materialize-runner.d.ts +1 -1
- package/dist/connectors/codex-materialize-runner.js +4 -4
- package/dist/connectors/codex-materialize.d.ts +1 -1
- package/dist/connectors/index.d.ts +1 -1
- package/dist/connectors/index.js +4 -4
- 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 +4 -4
- package/dist/entity-schema.d.ts +1 -1
- package/dist/explicit-capture.d.ts +6 -6
- 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 +1 -1
- package/dist/fallback-llm.d.ts +1 -1
- package/dist/graph-dashboard-diff.d.ts +1 -1
- package/dist/graph-dashboard-key.d.ts +1 -1
- package/dist/graph-dashboard-parser.d.ts +1 -1
- package/dist/graph-edge-reinforcement.d.ts +1 -1
- package/dist/graph-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 +468 -88
- package/dist/index.js +66 -36
- package/dist/intent.d.ts +1 -1
- package/dist/lcm/engine.d.ts +1 -1
- package/dist/lcm/index.d.ts +1 -1
- package/dist/lcm/tools.d.ts +1 -1
- package/dist/lifecycle.d.ts +1 -1
- package/dist/live-connectors-runner.d.ts +1 -1
- package/dist/local-llm.d.ts +1 -1
- package/dist/local-model-endpoint.d.ts +1 -1
- package/dist/maintenance/memory-governance.d.ts +1 -1
- package/dist/maintenance/memory-governance.js +4 -4
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.d.ts +2 -2
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +4 -4
- package/dist/maintenance/rebuild-memory-projection.d.ts +2 -2
- package/dist/maintenance/rebuild-memory-projection.js +5 -5
- package/dist/mcp-memory-inspector-app.d.ts +8 -8
- 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 +5 -5
- package/dist/namespaces/principal.d.ts +1 -1
- package/dist/namespaces/search.d.ts +1 -1
- package/dist/namespaces/storage.d.ts +3 -3
- package/dist/namespaces/storage.js +4 -4
- package/dist/native-knowledge.d.ts +1 -1
- package/dist/offline-sync-impression-drain.d.ts +1 -1
- package/dist/operator-toolkit.d.ts +2 -2
- package/dist/operator-toolkit.js +9 -9
- package/dist/orchestration/compression-guideline-coordinator.d.ts +2 -2
- package/dist/orchestration/maintenance.d.ts +3 -3
- package/dist/orchestration/maintenance.js +9 -9
- package/dist/{orchestrator-B8ickLkd.d.ts → orchestrator-DB93S48I.d.ts} +5 -5
- package/dist/orchestrator.d.ts +6 -6
- package/dist/orchestrator.js +32 -32
- package/dist/patterns-cli.d.ts +1 -1
- package/dist/{pipeline-B669unGm.d.ts → pipeline-DmGc-H66.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-D0PVXmea.d.ts → qmd-cJT0crkF.d.ts} +1 -1
- package/dist/qmd-preflight.d.ts +2 -2
- package/dist/qmd-recall-cache.d.ts +1 -1
- package/dist/qmd.d.ts +2 -2
- package/dist/recall-concurrency-config.d.ts +1 -1
- package/dist/recall-disclosure-escalation.d.ts +1 -1
- package/dist/recall-explain-renderer.d.ts +1 -1
- package/dist/recall-explain-renderer.js +3 -3
- package/dist/recall-memory-map.d.ts +1 -1
- package/dist/recall-planner-llm.d.ts +1 -1
- package/dist/recall-state.d.ts +1 -1
- package/dist/recall-tag-filter.d.ts +1 -1
- package/dist/recall-timings.d.ts +1 -1
- package/dist/recall-xray-cli.d.ts +1 -1
- package/dist/recall-xray-cli.js +4 -4
- package/dist/recall-xray-renderer.d.ts +1 -1
- package/dist/recall-xray-renderer.js +3 -3
- package/dist/recall-xray.d.ts +1 -1
- package/dist/recall-xray.js +2 -2
- package/dist/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 +2 -2
- package/dist/retrieval-agents.d.ts +2 -2
- package/dist/retrieval-tiers.d.ts +1 -1
- package/dist/routing/engine.d.ts +1 -1
- package/dist/routing/store.d.ts +1 -1
- package/dist/salvage-envelope.d.ts +1 -1
- package/dist/{scope-profiles-BOp3gSzp.d.ts → scope-profiles-KG2nODX7.d.ts} +1 -1
- package/dist/search/embed-helper.d.ts +1 -1
- package/dist/search/factory.d.ts +1 -1
- package/dist/search/index.d.ts +1 -1
- package/dist/search/lancedb-backend.d.ts +1 -1
- package/dist/search/meilisearch-backend.d.ts +1 -1
- package/dist/search/noop-backend.d.ts +1 -1
- package/dist/search/orama-backend.d.ts +1 -1
- package/dist/search/port.d.ts +1 -1
- package/dist/search/remote-backend.d.ts +1 -1
- package/dist/{semantic-consolidation-C7SZNzUJ.d.ts → semantic-consolidation-BaZlg0D8.d.ts} +1 -1
- package/dist/semantic-consolidation.d.ts +2 -2
- package/dist/semantic-consolidation.js +5 -5
- package/dist/semantic-rule-promotion.js +4 -4
- package/dist/semantic-rule-verifier.d.ts +1 -1
- package/dist/semantic-rule-verifier.js +4 -4
- package/dist/session-observer-bands.d.ts +1 -1
- package/dist/session-observer-state.d.ts +1 -1
- package/dist/shared-context/manager.d.ts +1 -1
- package/dist/signal.d.ts +1 -1
- package/dist/{storage-CJ_Fia4H.d.ts → storage-BKhHHnRo.d.ts} +2 -221
- package/dist/storage.d.ts +2 -2
- package/dist/storage.js +3 -3
- 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/trust-score-stage.d.ts +1 -1
- package/dist/trust-score.d.ts +1 -1
- package/dist/{types-GeWGXq9E.d.ts → types-GBQZuT7l.d.ts} +395 -1
- package/dist/types.d.ts +1 -1
- package/dist/types.js +1 -1
- package/dist/utility-runtime.d.ts +1 -1
- package/dist/verified-recall.js +4 -4
- package/dist/write-envelope.d.ts +1 -1
- package/package.json +2 -2
- package/src/config.ts +3 -3
- package/src/meetings/build.test.ts +646 -0
- package/src/meetings/build.ts +365 -0
- package/src/meetings/cli.test.ts +276 -0
- package/src/meetings/cli.ts +242 -0
- package/src/meetings/config.test.ts +72 -0
- package/src/meetings/config.ts +183 -0
- package/src/meetings/errors.ts +13 -0
- package/src/meetings/fuse.test.ts +208 -0
- package/src/meetings/fuse.ts +297 -0
- package/src/meetings/index.ts +11 -1
- package/src/meetings/memory-generator.ts +116 -0
- package/src/meetings/recall-exclusion.test.ts +88 -0
- package/src/meetings/store.test.ts +232 -0
- package/src/meetings/store.ts +465 -0
- package/src/meetings/types.ts +111 -0
- package/src/orchestration/orchestrator-helpers.ts +23 -3
- package/src/orchestration/recall-search-pipeline.test.ts +182 -0
- package/src/orchestration/recall-search-pipeline.ts +36 -15
- package/src/types.ts +6 -0
- package/dist/chunk-OFQUY5NZ.js.map +0 -1
- package/dist/chunk-OOJQ6ID5.js.map +0 -1
- package/dist/chunk-WYL5ODHJ.js.map +0 -1
- /package/dist/{auto-sync-IH3G25MT.js.map → auto-sync-UPTUVE4X.js.map} +0 -0
- /package/dist/{chunk-YUWFASAK.js.map → chunk-275ENJDK.js.map} +0 -0
- /package/dist/{chunk-EZFVVEQG.js.map → chunk-3ZUY2VQF.js.map} +0 -0
- /package/dist/{chunk-HRREDJSL.js.map → chunk-4F6AANKS.js.map} +0 -0
- /package/dist/{chunk-U7D5HWNG.js.map → chunk-4PYLBXX6.js.map} +0 -0
- /package/dist/{chunk-3LZSS77C.js.map → chunk-53WDAG7X.js.map} +0 -0
- /package/dist/{chunk-QEEMLGCO.js.map → chunk-5IXPWEQB.js.map} +0 -0
- /package/dist/{chunk-VSVX777Y.js.map → chunk-5JQLAQUZ.js.map} +0 -0
- /package/dist/{chunk-DR65EEXG.js.map → chunk-62QM5MKY.js.map} +0 -0
- /package/dist/{chunk-DQCUBRTZ.js.map → chunk-B7C3TF5H.js.map} +0 -0
- /package/dist/{chunk-RPOOJPMB.js.map → chunk-EILX7SQR.js.map} +0 -0
- /package/dist/{chunk-D5H3B36B.js.map → chunk-EXU5IQ3S.js.map} +0 -0
- /package/dist/{chunk-KUF7OIFK.js.map → chunk-EZKKHVFY.js.map} +0 -0
- /package/dist/{chunk-S5HCKQ7Q.js.map → chunk-GEUDRENF.js.map} +0 -0
- /package/dist/{chunk-X7GOH7Y6.js.map → chunk-HJEEAO4O.js.map} +0 -0
- /package/dist/{chunk-FL7MNSH3.js.map → chunk-HPOY2PHQ.js.map} +0 -0
- /package/dist/{chunk-Q55XM4SU.js.map → chunk-JFDEYXF7.js.map} +0 -0
- /package/dist/{chunk-UVSDFM7R.js.map → chunk-JN3IUA2Q.js.map} +0 -0
- /package/dist/{chunk-PLRDZ2OO.js.map → chunk-JWMYVQAM.js.map} +0 -0
- /package/dist/{chunk-KOFVOVJG.js.map → chunk-KHRKEELC.js.map} +0 -0
- /package/dist/{chunk-Y4JHE2ML.js.map → chunk-LI4ZOFHW.js.map} +0 -0
- /package/dist/{chunk-MLW3J7IC.js.map → chunk-LMHDFOVV.js.map} +0 -0
- /package/dist/{chunk-X6E5WAGX.js.map → chunk-N7EVMKP6.js.map} +0 -0
- /package/dist/{chunk-HCNG42P3.js.map → chunk-Q3FWRDCP.js.map} +0 -0
- /package/dist/{chunk-5MFHOX5T.js.map → chunk-QO2KODU6.js.map} +0 -0
- /package/dist/{chunk-W3DJOT22.js.map → chunk-TCZWBJBO.js.map} +0 -0
- /package/dist/{chunk-B3ABVQ36.js.map → chunk-UHVXE24Y.js.map} +0 -0
- /package/dist/{chunk-UX3ZXN34.js.map → chunk-UV72DEZD.js.map} +0 -0
- /package/dist/{chunk-OZSL2QZC.js.map → chunk-V5TSUGRB.js.map} +0 -0
- /package/dist/{chunk-CH3BRJ3P.js.map → chunk-X5QS5C2O.js.map} +0 -0
|
@@ -351,7 +351,7 @@ function parseWearablesConfig(value) {
|
|
|
351
351
|
redactionPatterns = raw.redactionPatterns;
|
|
352
352
|
compileRedactionPatterns(redactionPatterns);
|
|
353
353
|
}
|
|
354
|
-
const
|
|
354
|
+
const parseBoundedInt2 = (value2, name, fallback, min, max) => {
|
|
355
355
|
if (value2 === void 0) return fallback;
|
|
356
356
|
const coerced = coerceNumber(value2);
|
|
357
357
|
if (coerced === void 0 || !Number.isInteger(coerced) || coerced < min || coerced > max) {
|
|
@@ -361,21 +361,21 @@ function parseWearablesConfig(value) {
|
|
|
361
361
|
}
|
|
362
362
|
return coerced;
|
|
363
363
|
};
|
|
364
|
-
const autoSyncIntervalMinutes =
|
|
364
|
+
const autoSyncIntervalMinutes = parseBoundedInt2(
|
|
365
365
|
raw.autoSyncIntervalMinutes,
|
|
366
366
|
"wearables.autoSyncIntervalMinutes",
|
|
367
367
|
defaults.autoSyncIntervalMinutes,
|
|
368
368
|
1,
|
|
369
369
|
MAX_AUTO_SYNC_INTERVAL_MINUTES
|
|
370
370
|
);
|
|
371
|
-
const autoSyncDays =
|
|
371
|
+
const autoSyncDays = parseBoundedInt2(
|
|
372
372
|
raw.autoSyncDays,
|
|
373
373
|
"wearables.autoSyncDays",
|
|
374
374
|
defaults.autoSyncDays,
|
|
375
375
|
1,
|
|
376
376
|
MAX_AUTO_SYNC_WINDOW_DAYS
|
|
377
377
|
);
|
|
378
|
-
const autoSyncDeepDays =
|
|
378
|
+
const autoSyncDeepDays = parseBoundedInt2(
|
|
379
379
|
raw.autoSyncDeepDays,
|
|
380
380
|
"wearables.autoSyncDeepDays",
|
|
381
381
|
defaults.autoSyncDeepDays,
|
|
@@ -436,6 +436,324 @@ function parseWearablesConfig(value) {
|
|
|
436
436
|
};
|
|
437
437
|
}
|
|
438
438
|
|
|
439
|
+
// src/meetings/detect.ts
|
|
440
|
+
import { createHash } from "crypto";
|
|
441
|
+
var DEFAULT_MEETING_APP_PATTERNS = [
|
|
442
|
+
"zoom.us",
|
|
443
|
+
"Zoom",
|
|
444
|
+
"Microsoft Teams",
|
|
445
|
+
"teams.microsoft.com",
|
|
446
|
+
"meet.google.com",
|
|
447
|
+
"Webex",
|
|
448
|
+
"Slack",
|
|
449
|
+
// huddle windows
|
|
450
|
+
"FaceTime"
|
|
451
|
+
];
|
|
452
|
+
var DEFAULT_MEETINGS_DETECTION_CONFIG = {
|
|
453
|
+
appPatterns: [...DEFAULT_MEETING_APP_PATTERNS],
|
|
454
|
+
minOverlapMinutes: 2,
|
|
455
|
+
audioOnlyMinMinutes: 15,
|
|
456
|
+
mergeGapMinutes: 2
|
|
457
|
+
};
|
|
458
|
+
function ms(iso) {
|
|
459
|
+
if (typeof iso !== "string") return Number.NaN;
|
|
460
|
+
if (!Number.isFinite(Date.parse(iso))) return Number.NaN;
|
|
461
|
+
const m = iso.match(/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})(?:\.\d+)?(?:Z|[+-](?:0\d:[0-5]\d|1[0-3]:[0-5]\d|14:00))$/);
|
|
462
|
+
if (m === null) return Number.NaN;
|
|
463
|
+
const [year, month, day, hour, minute, second] = m.slice(1).map(Number);
|
|
464
|
+
const daysInMonth = month >= 1 && month <= 12 ? new Date(Date.UTC(year, month, 0)).getUTCDate() : 0;
|
|
465
|
+
if (day < 1 || day > daysInMonth || hour > 23 || minute > 59 || second > 59) return Number.NaN;
|
|
466
|
+
return Date.parse(iso);
|
|
467
|
+
}
|
|
468
|
+
function overlapMs(aStart, aEnd, bStart, bEnd) {
|
|
469
|
+
const start = Math.max(aStart, bStart);
|
|
470
|
+
const end = Math.min(aEnd, bEnd);
|
|
471
|
+
return end > start ? end - start : 0;
|
|
472
|
+
}
|
|
473
|
+
function meetingId(date, startUtc) {
|
|
474
|
+
if (!isValidDay(date)) {
|
|
475
|
+
throw new RangeError(`meetings: invalid day "${date}" for a meeting id; expected a real YYYY-MM-DD.`);
|
|
476
|
+
}
|
|
477
|
+
const startMs = ms(startUtc);
|
|
478
|
+
if (Number.isNaN(startMs)) {
|
|
479
|
+
throw new RangeError(`meetings: invalid meeting start "${startUtc}" for a meeting id.`);
|
|
480
|
+
}
|
|
481
|
+
const anchor = new Date(startMs).toISOString();
|
|
482
|
+
const hash = createHash("sha256").update(`${date}|${anchor}`, "utf8").digest("hex").slice(0, 8);
|
|
483
|
+
return `mtg-${date}-${hash}`;
|
|
484
|
+
}
|
|
485
|
+
function isFinitePair(a, b) {
|
|
486
|
+
return Number.isFinite(a) && Number.isFinite(b) && b > a;
|
|
487
|
+
}
|
|
488
|
+
function combineDetection(a, b) {
|
|
489
|
+
if (a === "app+audio" || b === "app+audio") return "app+audio";
|
|
490
|
+
if (a === "provider" || b === "provider") return "provider";
|
|
491
|
+
return "audio";
|
|
492
|
+
}
|
|
493
|
+
function buildCandidates(audioWindows, appSpans, config) {
|
|
494
|
+
const minOverlapMs = config.minOverlapMinutes * 6e4;
|
|
495
|
+
const audioOnlyMs = config.audioOnlyMinMinutes * 6e4;
|
|
496
|
+
const candidates = [];
|
|
497
|
+
for (const window of audioWindows) {
|
|
498
|
+
const startMs = ms(window.startUtc);
|
|
499
|
+
const endMs = ms(window.endUtc);
|
|
500
|
+
if (!isFinitePair(startMs, endMs)) continue;
|
|
501
|
+
if (window.providerMeeting === true) {
|
|
502
|
+
candidates.push({
|
|
503
|
+
startMs,
|
|
504
|
+
endMs,
|
|
505
|
+
detectionSource: "provider",
|
|
506
|
+
sources: [window.source],
|
|
507
|
+
...window.title !== void 0 ? { title: window.title } : {}
|
|
508
|
+
});
|
|
509
|
+
continue;
|
|
510
|
+
}
|
|
511
|
+
let bestApp;
|
|
512
|
+
for (const span of appSpans) {
|
|
513
|
+
const spanStart = ms(span.startUtc);
|
|
514
|
+
const spanEnd = ms(span.endUtc);
|
|
515
|
+
if (!isFinitePair(spanStart, spanEnd)) continue;
|
|
516
|
+
const overlap = overlapMs(startMs, endMs, spanStart, spanEnd);
|
|
517
|
+
if (overlap <= 0 || overlap < minOverlapMs) continue;
|
|
518
|
+
if (bestApp === void 0 || overlap > bestApp.overlap) {
|
|
519
|
+
bestApp = { span, overlap };
|
|
520
|
+
} else if (overlap === bestApp.overlap) {
|
|
521
|
+
const bestStart = ms(bestApp.span.startUtc);
|
|
522
|
+
const better = spanStart < bestStart || spanStart === bestStart && (span.app < bestApp.span.app || span.app === bestApp.span.app && spanEnd < ms(bestApp.span.endUtc));
|
|
523
|
+
if (better) bestApp = { span, overlap };
|
|
524
|
+
}
|
|
525
|
+
}
|
|
526
|
+
if (bestApp !== void 0) {
|
|
527
|
+
candidates.push({
|
|
528
|
+
startMs,
|
|
529
|
+
endMs,
|
|
530
|
+
app: bestApp.span.app,
|
|
531
|
+
detectionSource: "app+audio",
|
|
532
|
+
sources: [window.source],
|
|
533
|
+
...window.title !== void 0 ? { title: window.title } : {}
|
|
534
|
+
});
|
|
535
|
+
continue;
|
|
536
|
+
}
|
|
537
|
+
if (endMs - startMs >= audioOnlyMs && Number.isInteger(window.distinctNonWearerSpeakers) && window.distinctNonWearerSpeakers >= 2) {
|
|
538
|
+
candidates.push({
|
|
539
|
+
startMs,
|
|
540
|
+
endMs,
|
|
541
|
+
detectionSource: "audio",
|
|
542
|
+
sources: [window.source],
|
|
543
|
+
...window.title !== void 0 ? { title: window.title } : {}
|
|
544
|
+
});
|
|
545
|
+
}
|
|
546
|
+
}
|
|
547
|
+
return candidates;
|
|
548
|
+
}
|
|
549
|
+
var DETECTION_RANK = {
|
|
550
|
+
"app+audio": 0,
|
|
551
|
+
provider: 1,
|
|
552
|
+
audio: 2
|
|
553
|
+
};
|
|
554
|
+
function candidateOrder(a, b) {
|
|
555
|
+
return a.startMs - b.startMs || a.endMs - b.endMs || DETECTION_RANK[a.detectionSource] - DETECTION_RANK[b.detectionSource] || (a.app ?? "").localeCompare(b.app ?? "") || (a.title ?? "").localeCompare(b.title ?? "") || (a.sources[0] ?? "").localeCompare(b.sources[0] ?? "");
|
|
556
|
+
}
|
|
557
|
+
function mergeCandidates(candidates, mergeGapMs) {
|
|
558
|
+
const sorted = [...candidates].sort(candidateOrder);
|
|
559
|
+
const merged = [];
|
|
560
|
+
for (const candidate of sorted) {
|
|
561
|
+
const prev = merged[merged.length - 1];
|
|
562
|
+
const overlaps = prev !== void 0 && candidate.startMs < prev.endMs;
|
|
563
|
+
const sameAppAdjacent = prev !== void 0 && prev.app !== void 0 && prev.app === candidate.app && candidate.startMs - prev.endMs <= mergeGapMs;
|
|
564
|
+
if (prev !== void 0 && (overlaps || sameAppAdjacent)) {
|
|
565
|
+
prev.endMs = Math.max(prev.endMs, candidate.endMs);
|
|
566
|
+
prev.app = prev.app ?? candidate.app;
|
|
567
|
+
prev.detectionSource = combineDetection(prev.detectionSource, candidate.detectionSource);
|
|
568
|
+
prev.sources = [.../* @__PURE__ */ new Set([...prev.sources, ...candidate.sources])];
|
|
569
|
+
prev.title = prev.title ?? candidate.title;
|
|
570
|
+
continue;
|
|
571
|
+
}
|
|
572
|
+
merged.push({ ...candidate, sources: [...candidate.sources] });
|
|
573
|
+
}
|
|
574
|
+
return merged;
|
|
575
|
+
}
|
|
576
|
+
function assertFiniteNonNegative(name, value) {
|
|
577
|
+
if (!Number.isFinite(value) || value < 0) {
|
|
578
|
+
throw new RangeError(`meetings config "${name}" must be a finite, non-negative number (got ${value}).`);
|
|
579
|
+
}
|
|
580
|
+
}
|
|
581
|
+
function isValidDay(date) {
|
|
582
|
+
const m = /^(\d{4})-(\d{2})-(\d{2})$/.exec(date);
|
|
583
|
+
if (m === null) return false;
|
|
584
|
+
const [, year, month, day] = m.map(Number);
|
|
585
|
+
const daysInMonth = month >= 1 && month <= 12 ? new Date(Date.UTC(year, month, 0)).getUTCDate() : 0;
|
|
586
|
+
return day >= 1 && day <= daysInMonth;
|
|
587
|
+
}
|
|
588
|
+
function validateConfig(config) {
|
|
589
|
+
assertFiniteNonNegative("minOverlapMinutes", config.minOverlapMinutes);
|
|
590
|
+
assertFiniteNonNegative("audioOnlyMinMinutes", config.audioOnlyMinMinutes);
|
|
591
|
+
assertFiniteNonNegative("mergeGapMinutes", config.mergeGapMinutes);
|
|
592
|
+
}
|
|
593
|
+
function detectMeetings(input, config = DEFAULT_MEETINGS_DETECTION_CONFIG) {
|
|
594
|
+
validateConfig(config);
|
|
595
|
+
if (!isValidDay(input.date)) {
|
|
596
|
+
throw new RangeError(`meetings: invalid day "${input.date}"; expected a real YYYY-MM-DD.`);
|
|
597
|
+
}
|
|
598
|
+
const candidates = buildCandidates(input.audioWindows, input.appSpans, config);
|
|
599
|
+
const merged = mergeCandidates(candidates, config.mergeGapMinutes * 6e4);
|
|
600
|
+
return merged.map((candidate) => {
|
|
601
|
+
const startUtc = new Date(candidate.startMs).toISOString();
|
|
602
|
+
const endUtc = new Date(candidate.endMs).toISOString();
|
|
603
|
+
return {
|
|
604
|
+
id: meetingId(input.date, startUtc),
|
|
605
|
+
date: input.date,
|
|
606
|
+
startUtc,
|
|
607
|
+
endUtc,
|
|
608
|
+
...candidate.app !== void 0 ? { app: candidate.app } : {},
|
|
609
|
+
detectionSource: candidate.detectionSource,
|
|
610
|
+
sources: [...candidate.sources].sort((a, b) => a < b ? -1 : a > b ? 1 : 0),
|
|
611
|
+
...candidate.title !== void 0 ? { title: candidate.title } : {}
|
|
612
|
+
};
|
|
613
|
+
});
|
|
614
|
+
}
|
|
615
|
+
|
|
616
|
+
// src/meetings/config.ts
|
|
617
|
+
var DEFAULT_MIN_OVERLAP_MINUTES = 2;
|
|
618
|
+
var DEFAULT_AUDIO_ONLY_MIN_MINUTES = 15;
|
|
619
|
+
var DEFAULT_MERGE_GAP_MINUTES = 2;
|
|
620
|
+
var DEFAULT_CONTEXT_DWELL_SECONDS = 20;
|
|
621
|
+
var DEFAULT_MAX_CONTEXT_CHARS = 4e3;
|
|
622
|
+
var DEFAULT_SUMMARY_MODE = "smart";
|
|
623
|
+
var DEFAULT_SOURCE_TRUST2 = 0.85;
|
|
624
|
+
var DEFAULT_AUTO_APPROVE_TRUST2 = 0.7;
|
|
625
|
+
var DEFAULT_REVIEW_TRUST2 = 0.45;
|
|
626
|
+
var SUMMARY_MODES = ["off", "review", "smart"];
|
|
627
|
+
var DEFAULT_MEETINGS_CONFIG = {
|
|
628
|
+
enabled: false,
|
|
629
|
+
appPatterns: [...DEFAULT_MEETING_APP_PATTERNS],
|
|
630
|
+
minOverlapMinutes: DEFAULT_MIN_OVERLAP_MINUTES,
|
|
631
|
+
audioOnlyMinMinutes: DEFAULT_AUDIO_ONLY_MIN_MINUTES,
|
|
632
|
+
mergeGapMinutes: DEFAULT_MERGE_GAP_MINUTES,
|
|
633
|
+
contextDwellSeconds: DEFAULT_CONTEXT_DWELL_SECONDS,
|
|
634
|
+
maxContextChars: DEFAULT_MAX_CONTEXT_CHARS,
|
|
635
|
+
summaryMode: DEFAULT_SUMMARY_MODE,
|
|
636
|
+
sourceTrust: DEFAULT_SOURCE_TRUST2,
|
|
637
|
+
autoApproveTrust: DEFAULT_AUTO_APPROVE_TRUST2,
|
|
638
|
+
reviewTrust: DEFAULT_REVIEW_TRUST2
|
|
639
|
+
};
|
|
640
|
+
function parseBool2(value, name, fallback) {
|
|
641
|
+
if (value === void 0 || value === null) return fallback;
|
|
642
|
+
const coerced = coerceBool(value);
|
|
643
|
+
if (coerced === void 0) {
|
|
644
|
+
throw new Error(
|
|
645
|
+
`${name} must be a boolean-like value (true/false/1/0/yes/no/on/off); got ${JSON.stringify(value)}`
|
|
646
|
+
);
|
|
647
|
+
}
|
|
648
|
+
return coerced;
|
|
649
|
+
}
|
|
650
|
+
function parseBoundedInt(value, name, fallback, min, max) {
|
|
651
|
+
if (value === void 0 || value === null) return fallback;
|
|
652
|
+
const coerced = coerceNumber(value);
|
|
653
|
+
if (coerced === void 0 || !Number.isFinite(coerced) || !Number.isInteger(coerced) || coerced < min || coerced > max) {
|
|
654
|
+
throw new Error(
|
|
655
|
+
`${name} must be an integer between ${min} and ${max}; got ${JSON.stringify(value)}`
|
|
656
|
+
);
|
|
657
|
+
}
|
|
658
|
+
return coerced;
|
|
659
|
+
}
|
|
660
|
+
function parseAppPatterns(value) {
|
|
661
|
+
if (value === void 0 || value === null) {
|
|
662
|
+
return [...DEFAULT_MEETING_APP_PATTERNS];
|
|
663
|
+
}
|
|
664
|
+
if (!Array.isArray(value)) {
|
|
665
|
+
throw new Error(
|
|
666
|
+
`meetings.appPatterns must be an array of non-empty strings; got ${JSON.stringify(value)}`
|
|
667
|
+
);
|
|
668
|
+
}
|
|
669
|
+
const patterns = [];
|
|
670
|
+
for (const entry of value) {
|
|
671
|
+
if (typeof entry !== "string" || entry.trim().length === 0) {
|
|
672
|
+
throw new Error(
|
|
673
|
+
`meetings.appPatterns entries must be non-empty strings; got ${JSON.stringify(entry)}`
|
|
674
|
+
);
|
|
675
|
+
}
|
|
676
|
+
patterns.push(entry);
|
|
677
|
+
}
|
|
678
|
+
const merged = [...DEFAULT_MEETING_APP_PATTERNS, ...patterns];
|
|
679
|
+
return [...new Set(merged)];
|
|
680
|
+
}
|
|
681
|
+
function parseSummaryMode(value) {
|
|
682
|
+
if (value === void 0 || value === null) return DEFAULT_SUMMARY_MODE;
|
|
683
|
+
if (typeof value === "string" && SUMMARY_MODES.includes(value)) {
|
|
684
|
+
return value;
|
|
685
|
+
}
|
|
686
|
+
throw new Error(
|
|
687
|
+
`meetings.summaryMode must be one of ${SUMMARY_MODES.join(", ")}; got ${JSON.stringify(value)}`
|
|
688
|
+
);
|
|
689
|
+
}
|
|
690
|
+
function parseTrust01(value, name, fallback) {
|
|
691
|
+
if (value === void 0 || value === null) return fallback;
|
|
692
|
+
const coerced = coerceNumber(value);
|
|
693
|
+
if (coerced === void 0 || !Number.isFinite(coerced) || coerced < 0 || coerced > 1) {
|
|
694
|
+
throw new Error(`${name} must be a number in [0, 1]; got ${JSON.stringify(value)}`);
|
|
695
|
+
}
|
|
696
|
+
return coerced;
|
|
697
|
+
}
|
|
698
|
+
function parseMeetingsConfig(value) {
|
|
699
|
+
if (value === void 0 || value === null) {
|
|
700
|
+
return { ...DEFAULT_MEETINGS_CONFIG, appPatterns: [...DEFAULT_MEETING_APP_PATTERNS] };
|
|
701
|
+
}
|
|
702
|
+
if (typeof value !== "object" || Array.isArray(value)) {
|
|
703
|
+
throw new Error(`meetings must be an object; got ${JSON.stringify(value)}`);
|
|
704
|
+
}
|
|
705
|
+
const raw = value;
|
|
706
|
+
const config = {
|
|
707
|
+
enabled: parseBool2(raw.enabled, "meetings.enabled", DEFAULT_MEETINGS_CONFIG.enabled),
|
|
708
|
+
appPatterns: parseAppPatterns(raw.appPatterns),
|
|
709
|
+
minOverlapMinutes: parseBoundedInt(
|
|
710
|
+
raw.minOverlapMinutes,
|
|
711
|
+
"meetings.minOverlapMinutes",
|
|
712
|
+
DEFAULT_MIN_OVERLAP_MINUTES,
|
|
713
|
+
0,
|
|
714
|
+
1440
|
|
715
|
+
),
|
|
716
|
+
audioOnlyMinMinutes: parseBoundedInt(
|
|
717
|
+
raw.audioOnlyMinMinutes,
|
|
718
|
+
"meetings.audioOnlyMinMinutes",
|
|
719
|
+
DEFAULT_AUDIO_ONLY_MIN_MINUTES,
|
|
720
|
+
1,
|
|
721
|
+
1440
|
|
722
|
+
),
|
|
723
|
+
mergeGapMinutes: parseBoundedInt(
|
|
724
|
+
raw.mergeGapMinutes,
|
|
725
|
+
"meetings.mergeGapMinutes",
|
|
726
|
+
DEFAULT_MERGE_GAP_MINUTES,
|
|
727
|
+
0,
|
|
728
|
+
1440
|
|
729
|
+
),
|
|
730
|
+
contextDwellSeconds: parseBoundedInt(
|
|
731
|
+
raw.contextDwellSeconds,
|
|
732
|
+
"meetings.contextDwellSeconds",
|
|
733
|
+
DEFAULT_CONTEXT_DWELL_SECONDS,
|
|
734
|
+
0,
|
|
735
|
+
86400
|
|
736
|
+
),
|
|
737
|
+
maxContextChars: parseBoundedInt(
|
|
738
|
+
raw.maxContextChars,
|
|
739
|
+
"meetings.maxContextChars",
|
|
740
|
+
DEFAULT_MAX_CONTEXT_CHARS,
|
|
741
|
+
0,
|
|
742
|
+
1e6
|
|
743
|
+
),
|
|
744
|
+
summaryMode: parseSummaryMode(raw.summaryMode),
|
|
745
|
+
sourceTrust: parseTrust01(raw.sourceTrust, "meetings.sourceTrust", DEFAULT_SOURCE_TRUST2),
|
|
746
|
+
autoApproveTrust: parseTrust01(raw.autoApproveTrust, "meetings.autoApproveTrust", DEFAULT_AUTO_APPROVE_TRUST2),
|
|
747
|
+
reviewTrust: parseTrust01(raw.reviewTrust, "meetings.reviewTrust", DEFAULT_REVIEW_TRUST2)
|
|
748
|
+
};
|
|
749
|
+
if (config.autoApproveTrust < config.reviewTrust) {
|
|
750
|
+
throw new Error(
|
|
751
|
+
`meetings.autoApproveTrust (${config.autoApproveTrust}) must be >= meetings.reviewTrust (${config.reviewTrust}); an inverted gate would auto-approve below the review bar`
|
|
752
|
+
);
|
|
753
|
+
}
|
|
754
|
+
return config;
|
|
755
|
+
}
|
|
756
|
+
|
|
439
757
|
// src/coding/coding-knowledge-config.ts
|
|
440
758
|
var CODING_KNOWLEDGE_DEFAULTS = Object.freeze({
|
|
441
759
|
enabled: false,
|
|
@@ -1442,6 +1760,7 @@ function parseConfig(raw, rawOperatorConfig, runtimeSet) {
|
|
|
1442
1760
|
};
|
|
1443
1761
|
const wearables = parseWearablesConfig(cfg.wearables);
|
|
1444
1762
|
const activity = parseActivityConfig(cfg.activity);
|
|
1763
|
+
const meetings = parseMeetingsConfig(cfg.meetings);
|
|
1445
1764
|
const provenance = parseProvenanceConfig(cfg.provenance);
|
|
1446
1765
|
const rawCodingMode = cfg.codingMode && typeof cfg.codingMode === "object" && !Array.isArray(cfg.codingMode) ? cfg.codingMode : {};
|
|
1447
1766
|
const codingProjectScopeRaw = coerceBool(rawCodingMode.projectScope);
|
|
@@ -2222,6 +2541,7 @@ function parseConfig(raw, rawOperatorConfig, runtimeSet) {
|
|
|
2222
2541
|
dreamsPhases,
|
|
2223
2542
|
procedural,
|
|
2224
2543
|
wearables,
|
|
2544
|
+
meetings,
|
|
2225
2545
|
activity,
|
|
2226
2546
|
provenance,
|
|
2227
2547
|
// At-rest encryption (#690): coerceBool handles CLI string "true" (#36).
|
|
@@ -3622,10 +3942,16 @@ export {
|
|
|
3622
3942
|
defaultWearableFusionConfig,
|
|
3623
3943
|
defaultWearablesConfig,
|
|
3624
3944
|
parseWearablesConfig,
|
|
3945
|
+
DEFAULT_MEETING_APP_PATTERNS,
|
|
3946
|
+
DEFAULT_MEETINGS_DETECTION_CONFIG,
|
|
3947
|
+
meetingId,
|
|
3948
|
+
detectMeetings,
|
|
3949
|
+
DEFAULT_MEETINGS_CONFIG,
|
|
3950
|
+
parseMeetingsConfig,
|
|
3625
3951
|
isOpenaiApiKeyDisabled,
|
|
3626
3952
|
resolveEnvVars,
|
|
3627
3953
|
DEFAULT_REASONING_MODEL,
|
|
3628
3954
|
VALID_MEMORY_CATEGORIES,
|
|
3629
3955
|
parseConfig
|
|
3630
3956
|
};
|
|
3631
|
-
//# sourceMappingURL=chunk-
|
|
3957
|
+
//# sourceMappingURL=chunk-7M6APKJL.js.map
|