@remnic/core 9.5.0 → 9.6.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 +6 -6
- package/dist/access-admin-ops-surface.js +12 -12
- package/dist/access-boundary.d.ts +6 -6
- package/dist/access-boundary.js +13 -13
- package/dist/access-cli.js +36 -36
- package/dist/access-http.d.ts +6 -6
- package/dist/access-http.js +17 -17
- package/dist/access-identity-continuity-surface.d.ts +5 -5
- package/dist/access-identity-continuity-surface.js +12 -12
- package/dist/access-lcm-surface.d.ts +6 -6
- package/dist/access-lcm-surface.js +12 -12
- package/dist/access-mcp.d.ts +6 -6
- package/dist/access-mcp.js +16 -16
- package/dist/access-observe-write-surface.d.ts +6 -6
- package/dist/access-observe-write-surface.js +12 -12
- package/dist/access-operations-batch.js +14 -14
- package/dist/access-operations.d.ts +7 -7
- package/dist/access-operations.js +15 -15
- package/dist/access-recall-surface.d.ts +6 -6
- package/dist/access-recall-surface.js +12 -12
- package/dist/access-schema.d.ts +4 -4
- package/dist/{access-service-DZX0sYAv.d.ts → access-service-CXJaql3A.d.ts} +4 -4
- package/dist/access-service.d.ts +6 -6
- package/dist/access-service.js +12 -12
- package/dist/access-surface-catalog.d.ts +6 -6
- 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-G6IU7L6C.js → auto-sync-4A5YBWYO.js} +3 -3
- package/dist/behavior-learner.d.ts +1 -1
- package/dist/behavior-signals.d.ts +1 -1
- package/dist/bootstrap.d.ts +5 -5
- 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/calibration.d.ts +1 -1
- package/dist/capabilities.d.ts +1 -1
- package/dist/{catalog-DoH2b0OR.d.ts → catalog-C9cu67Ig.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-H5PFR5ZT.js → chunk-23JFRB73.js} +2 -2
- package/dist/{chunk-BGMSRN6I.js → chunk-3XIY7MDQ.js} +3 -3
- package/dist/{chunk-L2QJQSHL.js → chunk-4GNEDXDI.js} +2 -2
- package/dist/{chunk-MFDJ63U5.js → chunk-4LV23CHK.js} +2 -2
- package/dist/{chunk-AER6MT24.js → chunk-6SXVCD7W.js} +2 -2
- package/dist/{chunk-2SFEFR5I.js → chunk-72WG5QKN.js} +2 -2
- package/dist/{chunk-7BAJAXGB.js → chunk-7MW3CVLD.js} +2 -2
- package/dist/{chunk-SNNIUDRS.js → chunk-AYZJID4S.js} +2 -2
- package/dist/{chunk-M7XQSUBB.js → chunk-B3ABVQ36.js} +116 -9
- package/dist/chunk-B3ABVQ36.js.map +1 -0
- package/dist/{chunk-LNHJ32NK.js → chunk-BEM4D2QG.js} +3 -3
- package/dist/{chunk-AOYJVCFN.js → chunk-CYWA2CXR.js} +2 -2
- package/dist/{chunk-2JFDHI2K.js → chunk-DEG5ULFJ.js} +2 -2
- package/dist/{chunk-L6V3WJ55.js → chunk-DS7MM2ES.js} +3 -3
- package/dist/{chunk-CXEL3Y22.js → chunk-FKCRGLRD.js} +184 -29
- package/dist/{chunk-CXEL3Y22.js.map → chunk-FKCRGLRD.js.map} +1 -1
- package/dist/{chunk-TI7IHDBQ.js → chunk-H2DXDQCQ.js} +5 -5
- package/dist/{chunk-KMF67QDQ.js → chunk-HLN7RROI.js} +4 -4
- package/dist/{chunk-D2XYYU5Q.js → chunk-J3XHPFEU.js} +2 -2
- package/dist/{chunk-ODSYJXDU.js → chunk-JSNVWNGX.js} +2 -2
- package/dist/{chunk-7Z2DZNWN.js → chunk-KL4UAXUY.js} +43 -2
- package/dist/{chunk-7Z2DZNWN.js.map → chunk-KL4UAXUY.js.map} +1 -1
- package/dist/{chunk-4WNLSSHL.js → chunk-LADFWYHY.js} +4 -4
- package/dist/{chunk-UBGAOYBP.js → chunk-LR5DZ56F.js} +2 -2
- package/dist/{chunk-5K5VEDFY.js → chunk-N3JDIRBW.js} +2 -2
- package/dist/{chunk-2B7DP7AP.js → chunk-P454KXD6.js} +93 -15
- package/dist/chunk-P454KXD6.js.map +1 -0
- package/dist/{chunk-VWEWK2BM.js → chunk-PCLIWBGD.js} +3 -3
- package/dist/{chunk-TV7C3HCB.js → chunk-PNLFN2PZ.js} +2 -2
- package/dist/{chunk-STCCFQU5.js → chunk-PVUJ6WVV.js} +6 -6
- package/dist/{chunk-ITWTKT2R.js → chunk-RGK27ELN.js} +2 -2
- package/dist/{chunk-II6WHCCW.js → chunk-SIRPLF54.js} +2 -2
- package/dist/{chunk-UDCDGP6A.js → chunk-SVOHGUMI.js} +1188 -112
- package/dist/chunk-SVOHGUMI.js.map +1 -0
- package/dist/{chunk-NFTABV56.js → chunk-TLUDFPZL.js} +2 -2
- package/dist/{chunk-I74ZEBMA.js → chunk-UFUKHGZD.js} +4 -4
- package/dist/{chunk-L4UZBJNM.js → chunk-UTRJFDP2.js} +2 -2
- package/dist/{chunk-5GPPACXK.js → chunk-VSMRDBFT.js} +2 -1
- package/dist/{chunk-SNBEVJBX.js → chunk-XCL57M6Q.js} +3 -3
- package/dist/{chunk-DZSAXE3T.js → chunk-Y7UNNAZD.js} +2 -2
- package/dist/{chunk-XN3TUUX2.js → chunk-YQB32INI.js} +2 -2
- package/dist/{cli-1dghPCO2.d.ts → cli-CqdPA6z9.d.ts} +3 -3
- package/dist/cli.d.ts +7 -7
- package/dist/cli.js +29 -29
- 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 +5 -5
- 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/identity-continuity.d.ts +1 -1
- package/dist/importance.d.ts +1 -1
- package/dist/index.d.ts +268 -17
- package/dist/index.js +80 -38
- 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.js +4 -4
- package/dist/maintenance/rebuild-memory-projection.js +5 -5
- package/dist/mcp-memory-inspector-app.d.ts +6 -6
- 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 +11 -11
- package/dist/namespaces/principal.d.ts +1 -1
- package/dist/namespaces/search.d.ts +1 -1
- package/dist/namespaces/search.js +7 -7
- 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/operator-toolkit.d.ts +2 -2
- package/dist/operator-toolkit.js +15 -15
- package/dist/orchestration/compression-guideline-coordinator.d.ts +2 -2
- package/dist/orchestration/maintenance.d.ts +2 -2
- package/dist/orchestration/maintenance.js +6 -6
- package/dist/{orchestrator-Dh3WSW_O.d.ts → orchestrator-CWFrT8AF.d.ts} +91 -60
- package/dist/orchestrator.d.ts +5 -5
- package/dist/orchestrator.js +36 -36
- package/dist/patterns-cli.d.ts +1 -1
- package/dist/policy-runtime.d.ts +1 -1
- package/dist/provenance.d.ts +1 -1
- package/dist/{qmd-DoUVxqND.d.ts → qmd--fnPMK60.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-disclosure-escalation.d.ts +1 -1
- package/dist/recall-explain-renderer.d.ts +1 -1
- package/dist/recall-planner-llm.d.ts +1 -1
- package/dist/recall-state.d.ts +1 -1
- package/dist/recall-tag-filter.d.ts +1 -1
- package/dist/recall-timings.d.ts +1 -1
- package/dist/recall-xray-cli.d.ts +1 -1
- package/dist/recall-xray-renderer.d.ts +1 -1
- package/dist/recall-xray.d.ts +1 -1
- package/dist/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/schemas.d.ts +22 -22
- package/dist/search/document-scanner.js +2 -2
- package/dist/search/embed-helper.d.ts +1 -1
- package/dist/search/factory.d.ts +1 -1
- package/dist/search/factory.js +6 -6
- package/dist/search/index.d.ts +1 -1
- package/dist/search/index.js +6 -6
- package/dist/search/lancedb-backend.d.ts +1 -1
- package/dist/search/lancedb-backend.js +3 -3
- package/dist/search/meilisearch-backend.d.ts +1 -1
- package/dist/search/meilisearch-backend.js +3 -3
- package/dist/search/noop-backend.d.ts +1 -1
- package/dist/search/orama-backend.d.ts +1 -1
- package/dist/search/orama-backend.js +3 -3
- package/dist/search/port.d.ts +1 -1
- package/dist/search/remote-backend.d.ts +1 -1
- package/dist/{semantic-consolidation-Dof1865o.d.ts → semantic-consolidation-O5lMZ4LG.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-C1maCNbc.d.ts +1591 -0
- package/dist/storage.d.ts +5 -1239
- 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-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 +12 -12
- package/dist/trust-score-stage.d.ts +1 -1
- package/dist/trust-score.d.ts +1 -1
- package/dist/{types-C7HUgOuA.d.ts → types-CGgcNWCG.d.ts} +31 -1
- package/dist/types.d.ts +1 -1
- package/dist/utility-runtime.d.ts +1 -1
- package/dist/verified-recall.js +4 -4
- package/package.json +2 -2
- package/src/cli-wearables-fuse.test.ts +197 -0
- package/src/cli.ts +25 -0
- package/src/storage.ts +16 -0
- package/src/wearables/cli.test.ts +102 -0
- package/src/wearables/cli.ts +65 -0
- package/src/wearables/config.test.ts +32 -0
- package/src/wearables/config.ts +52 -0
- package/src/wearables/day-store.test.ts +246 -0
- package/src/wearables/day-store.ts +272 -3
- package/src/wearables/fusion/cluster.ts +230 -0
- package/src/wearables/fusion/fuse.ts +218 -0
- package/src/wearables/fusion/fusion.test.ts +2575 -0
- package/src/wearables/fusion/index.ts +50 -0
- package/src/wearables/fusion/reconcile.ts +831 -0
- package/src/wearables/fusion/reconstruct.ts +251 -0
- package/src/wearables/fusion/store.ts +480 -0
- package/src/wearables/fusion/types.ts +228 -0
- package/src/wearables/index.ts +41 -0
- package/src/wearables/service.test.ts +1030 -2
- package/src/wearables/service.ts +258 -16
- package/src/wearables/speakers.test.ts +128 -0
- package/src/wearables/speakers.ts +58 -4
- package/src/wearables/storage-io.test.ts +146 -0
- package/src/wearables/types.ts +31 -0
- package/dist/chunk-2B7DP7AP.js.map +0 -1
- package/dist/chunk-M7XQSUBB.js.map +0 -1
- package/dist/chunk-UDCDGP6A.js.map +0 -1
- /package/dist/{auto-sync-G6IU7L6C.js.map → auto-sync-4A5YBWYO.js.map} +0 -0
- /package/dist/{chunk-H5PFR5ZT.js.map → chunk-23JFRB73.js.map} +0 -0
- /package/dist/{chunk-BGMSRN6I.js.map → chunk-3XIY7MDQ.js.map} +0 -0
- /package/dist/{chunk-L2QJQSHL.js.map → chunk-4GNEDXDI.js.map} +0 -0
- /package/dist/{chunk-MFDJ63U5.js.map → chunk-4LV23CHK.js.map} +0 -0
- /package/dist/{chunk-AER6MT24.js.map → chunk-6SXVCD7W.js.map} +0 -0
- /package/dist/{chunk-2SFEFR5I.js.map → chunk-72WG5QKN.js.map} +0 -0
- /package/dist/{chunk-7BAJAXGB.js.map → chunk-7MW3CVLD.js.map} +0 -0
- /package/dist/{chunk-SNNIUDRS.js.map → chunk-AYZJID4S.js.map} +0 -0
- /package/dist/{chunk-LNHJ32NK.js.map → chunk-BEM4D2QG.js.map} +0 -0
- /package/dist/{chunk-AOYJVCFN.js.map → chunk-CYWA2CXR.js.map} +0 -0
- /package/dist/{chunk-2JFDHI2K.js.map → chunk-DEG5ULFJ.js.map} +0 -0
- /package/dist/{chunk-L6V3WJ55.js.map → chunk-DS7MM2ES.js.map} +0 -0
- /package/dist/{chunk-TI7IHDBQ.js.map → chunk-H2DXDQCQ.js.map} +0 -0
- /package/dist/{chunk-KMF67QDQ.js.map → chunk-HLN7RROI.js.map} +0 -0
- /package/dist/{chunk-D2XYYU5Q.js.map → chunk-J3XHPFEU.js.map} +0 -0
- /package/dist/{chunk-ODSYJXDU.js.map → chunk-JSNVWNGX.js.map} +0 -0
- /package/dist/{chunk-4WNLSSHL.js.map → chunk-LADFWYHY.js.map} +0 -0
- /package/dist/{chunk-UBGAOYBP.js.map → chunk-LR5DZ56F.js.map} +0 -0
- /package/dist/{chunk-5K5VEDFY.js.map → chunk-N3JDIRBW.js.map} +0 -0
- /package/dist/{chunk-VWEWK2BM.js.map → chunk-PCLIWBGD.js.map} +0 -0
- /package/dist/{chunk-TV7C3HCB.js.map → chunk-PNLFN2PZ.js.map} +0 -0
- /package/dist/{chunk-STCCFQU5.js.map → chunk-PVUJ6WVV.js.map} +0 -0
- /package/dist/{chunk-ITWTKT2R.js.map → chunk-RGK27ELN.js.map} +0 -0
- /package/dist/{chunk-II6WHCCW.js.map → chunk-SIRPLF54.js.map} +0 -0
- /package/dist/{chunk-NFTABV56.js.map → chunk-TLUDFPZL.js.map} +0 -0
- /package/dist/{chunk-I74ZEBMA.js.map → chunk-UFUKHGZD.js.map} +0 -0
- /package/dist/{chunk-L4UZBJNM.js.map → chunk-UTRJFDP2.js.map} +0 -0
- /package/dist/{chunk-5GPPACXK.js.map → chunk-VSMRDBFT.js.map} +0 -0
- /package/dist/{chunk-SNBEVJBX.js.map → chunk-XCL57M6Q.js.map} +0 -0
- /package/dist/{chunk-DZSAXE3T.js.map → chunk-Y7UNNAZD.js.map} +0 -0
- /package/dist/{chunk-XN3TUUX2.js.map → chunk-YQB32INI.js.map} +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
dateInTimezone,
|
|
3
3
|
defaultTimezone
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-J3XHPFEU.js";
|
|
5
5
|
import "./chunk-YFBTVOMB.js";
|
|
6
6
|
import "./chunk-JXS5PDQ7.js";
|
|
7
7
|
import "./chunk-NDAH7BJ5.js";
|
|
@@ -10,7 +10,7 @@ import {
|
|
|
10
10
|
} from "./chunk-V7IZKJI3.js";
|
|
11
11
|
import "./chunk-QDW3E4RD.js";
|
|
12
12
|
import "./chunk-ZBJMUXZH.js";
|
|
13
|
-
import "./chunk-
|
|
13
|
+
import "./chunk-B3ABVQ36.js";
|
|
14
14
|
import "./chunk-RL6NEVXT.js";
|
|
15
15
|
import "./chunk-JIKJPDQJ.js";
|
|
16
16
|
import "./chunk-K2ZLHESQ.js";
|
|
@@ -72,4 +72,4 @@ function startWearablesAutoSync(settings, deps) {
|
|
|
72
72
|
export {
|
|
73
73
|
startWearablesAutoSync
|
|
74
74
|
};
|
|
75
|
-
//# sourceMappingURL=auto-sync-
|
|
75
|
+
//# sourceMappingURL=auto-sync-4A5YBWYO.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { B as BehaviorSignalEvent, P as PluginConfig, g as BehaviorLoopPolicyState } from './types-
|
|
1
|
+
import { B as BehaviorSignalEvent, P as PluginConfig, g as BehaviorLoopPolicyState } from './types-CGgcNWCG.js';
|
|
2
2
|
import './types-gb_SNtjR.js';
|
|
3
3
|
import './message-parts/index.js';
|
|
4
4
|
|
package/dist/bootstrap.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { P as PluginConfig } from './types-
|
|
2
|
-
import { O as Orchestrator } from './orchestrator-
|
|
1
|
+
import { P as PluginConfig } from './types-CGgcNWCG.js';
|
|
2
|
+
import { O as Orchestrator } from './orchestrator-CWFrT8AF.js';
|
|
3
3
|
import './types-gb_SNtjR.js';
|
|
4
4
|
import './message-parts/index.js';
|
|
5
5
|
import './briefing.js';
|
|
6
|
-
import './storage.js';
|
|
6
|
+
import './storage-C1maCNbc.js';
|
|
7
7
|
import './page-versioning.js';
|
|
8
8
|
import './consolidation-operator.js';
|
|
9
9
|
import './memory-projection-store.js';
|
|
@@ -23,7 +23,7 @@ import './session-integrity.js';
|
|
|
23
23
|
import './summarizer.js';
|
|
24
24
|
import './orchestration/maintenance.js';
|
|
25
25
|
import './namespaces/search.js';
|
|
26
|
-
import './catalog-
|
|
26
|
+
import './catalog-C9cu67Ig.js';
|
|
27
27
|
import './recall-state.js';
|
|
28
28
|
import './compounding/engine.js';
|
|
29
29
|
import './shared-context/manager.js';
|
|
@@ -33,7 +33,7 @@ import './utility-runtime.js';
|
|
|
33
33
|
import './tier-routing.js';
|
|
34
34
|
import './lifecycle.js';
|
|
35
35
|
import './orchestration/compression-guideline-coordinator.js';
|
|
36
|
-
import './semantic-consolidation-
|
|
36
|
+
import './semantic-consolidation-O5lMZ4LG.js';
|
|
37
37
|
import './connectors/codex-materialize.js';
|
|
38
38
|
import './logger.js';
|
|
39
39
|
import './embedding-fallback.js';
|
package/dist/briefing.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { StorageManager } from './storage.js';
|
|
2
|
-
import { h as BriefingSections, i as BriefingFollowup, j as BriefingFocus, C as CalendarSource, k as CalendarEvent, M as MemoryFile, l as BriefingActiveThread, m as BriefingResult, E as EntityFile, n as BriefingRecentEntity } from './types-
|
|
1
|
+
import { S as StorageManager } from './storage-C1maCNbc.js';
|
|
2
|
+
import { h as BriefingSections, i as BriefingFollowup, j as BriefingFocus, C as CalendarSource, k as CalendarEvent, M as MemoryFile, l as BriefingActiveThread, m as BriefingResult, E as EntityFile, n as BriefingRecentEntity } from './types-CGgcNWCG.js';
|
|
3
3
|
import './page-versioning.js';
|
|
4
4
|
import './consolidation-operator.js';
|
|
5
5
|
import './memory-projection-store.js';
|
package/dist/briefing.js
CHANGED
|
@@ -17,12 +17,12 @@ import {
|
|
|
17
17
|
renderBriefingMarkdown,
|
|
18
18
|
resolveBriefingSaveDir,
|
|
19
19
|
validateBriefingFormat
|
|
20
|
-
} from "./chunk-
|
|
21
|
-
import "./chunk-
|
|
22
|
-
import "./chunk-
|
|
20
|
+
} from "./chunk-Y7UNNAZD.js";
|
|
21
|
+
import "./chunk-SVOHGUMI.js";
|
|
22
|
+
import "./chunk-B3ABVQ36.js";
|
|
23
23
|
import "./chunk-L2B3EE7B.js";
|
|
24
24
|
import "./chunk-5UZXUTVO.js";
|
|
25
|
-
import "./chunk-
|
|
25
|
+
import "./chunk-VSMRDBFT.js";
|
|
26
26
|
import "./chunk-EHK6KZHK.js";
|
|
27
27
|
import "./chunk-6CIAGZ6X.js";
|
|
28
28
|
import "./chunk-J6A3CX5N.js";
|
package/dist/buffer.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { StorageManager } from './storage.js';
|
|
2
|
-
import { P as PluginConfig, o as BufferTurn } from './types-
|
|
1
|
+
import { S as StorageManager } from './storage-C1maCNbc.js';
|
|
2
|
+
import { P as PluginConfig, o as BufferTurn } from './types-CGgcNWCG.js';
|
|
3
3
|
import './page-versioning.js';
|
|
4
4
|
import './consolidation-operator.js';
|
|
5
5
|
import './memory-projection-store.js';
|
package/dist/calibration.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { FallbackLlmClient } from './fallback-llm.js';
|
|
2
|
-
import { G as GatewayConfig, r as AgentPersonaModelConfig } from './types-
|
|
2
|
+
import { G as GatewayConfig, r as AgentPersonaModelConfig } from './types-CGgcNWCG.js';
|
|
3
3
|
import './resolve-provider-secret.js';
|
|
4
4
|
import './types-gb_SNtjR.js';
|
|
5
5
|
import './message-parts/index.js';
|
package/dist/capabilities.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import { CausalChainIndex } from './causal-chain.js';
|
|
|
2
2
|
import { ConsolidatedPreference } from './compounding/preference-consolidator.js';
|
|
3
3
|
import './causal-trajectory.js';
|
|
4
4
|
import './objective-state.js';
|
|
5
|
-
import './types-
|
|
5
|
+
import './types-CGgcNWCG.js';
|
|
6
6
|
import './types-gb_SNtjR.js';
|
|
7
7
|
import './message-parts/index.js';
|
|
8
8
|
import './lcm/engine.js';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { G as GatewayConfig, r as AgentPersonaModelConfig, P as PluginConfig, M as MemoryFile } from './types-
|
|
1
|
+
import { G as GatewayConfig, r as AgentPersonaModelConfig, P as PluginConfig, M as MemoryFile } from './types-CGgcNWCG.js';
|
|
2
2
|
import { RolloutSummaryInput, MaterializeResult } from './connectors/codex-materialize.js';
|
|
3
3
|
import './types-gb_SNtjR.js';
|
|
4
4
|
import './message-parts/index.js';
|
|
@@ -4,10 +4,10 @@ import {
|
|
|
4
4
|
} from "./chunk-NKCPUHCI.js";
|
|
5
5
|
import {
|
|
6
6
|
buildExtensionsBlockForConsolidation
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-LR5DZ56F.js";
|
|
8
8
|
import {
|
|
9
9
|
runPostConsolidationMaterialize
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-JSNVWNGX.js";
|
|
11
11
|
import "./chunk-QLULYKWZ.js";
|
|
12
12
|
import "./chunk-JLNBQWZ2.js";
|
|
13
13
|
import "./chunk-3UXOZBHV.js";
|
|
@@ -16,11 +16,11 @@ import {
|
|
|
16
16
|
resolveCausalTrajectoryStoreDir
|
|
17
17
|
} from "./chunk-7XGSIUP5.js";
|
|
18
18
|
import "./chunk-ZBJMUXZH.js";
|
|
19
|
-
import "./chunk-
|
|
20
|
-
import "./chunk-
|
|
19
|
+
import "./chunk-SVOHGUMI.js";
|
|
20
|
+
import "./chunk-B3ABVQ36.js";
|
|
21
21
|
import "./chunk-L2B3EE7B.js";
|
|
22
22
|
import "./chunk-5UZXUTVO.js";
|
|
23
|
-
import "./chunk-
|
|
23
|
+
import "./chunk-VSMRDBFT.js";
|
|
24
24
|
import "./chunk-EHK6KZHK.js";
|
|
25
25
|
import "./chunk-6CIAGZ6X.js";
|
|
26
26
|
import "./chunk-J6A3CX5N.js";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { GraphEdge } from './graph.js';
|
|
2
2
|
import { CausalTrajectoryRecord } from './causal-trajectory.js';
|
|
3
3
|
import './capabilities.js';
|
|
4
|
-
import './types-
|
|
4
|
+
import './types-CGgcNWCG.js';
|
|
5
5
|
import './types-gb_SNtjR.js';
|
|
6
6
|
import './message-parts/index.js';
|
|
7
7
|
import './objective-state.js';
|
|
@@ -10,7 +10,7 @@ import {
|
|
|
10
10
|
import {
|
|
11
11
|
planNamespaceMaintenance,
|
|
12
12
|
runNamespaceMaintenanceBatchPlan
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-4LV23CHK.js";
|
|
14
14
|
import {
|
|
15
15
|
resolveConsolidationCapabilities,
|
|
16
16
|
resolveNamespaceCapabilities,
|
|
@@ -447,4 +447,4 @@ var MaintenanceScheduler = class {
|
|
|
447
447
|
export {
|
|
448
448
|
MaintenanceScheduler
|
|
449
449
|
};
|
|
450
|
-
//# sourceMappingURL=chunk-
|
|
450
|
+
//# sourceMappingURL=chunk-23JFRB73.js.map
|
|
@@ -3,10 +3,10 @@ import {
|
|
|
3
3
|
} from "./chunk-TBBDFYXW.js";
|
|
4
4
|
import {
|
|
5
5
|
StorageManager
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-SVOHGUMI.js";
|
|
7
7
|
import {
|
|
8
8
|
assertPathInsideRoot
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-VSMRDBFT.js";
|
|
10
10
|
import {
|
|
11
11
|
RECALL_FALLBACK_DIRS
|
|
12
12
|
} from "./chunk-VS2IYZRU.js";
|
|
@@ -751,4 +751,4 @@ export {
|
|
|
751
751
|
listMemoryGovernanceRuns,
|
|
752
752
|
readMemoryGovernanceRunArtifact
|
|
753
753
|
};
|
|
754
|
-
//# sourceMappingURL=chunk-
|
|
754
|
+
//# sourceMappingURL=chunk-3XIY7MDQ.js.map
|
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
} from "./chunk-D7FOKIY5.js";
|
|
6
6
|
import {
|
|
7
7
|
EngramAccessInputError
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-H2DXDQCQ.js";
|
|
9
9
|
import {
|
|
10
10
|
expandTildePath
|
|
11
11
|
} from "./chunk-EYIEWJNI.js";
|
|
@@ -274,4 +274,4 @@ export {
|
|
|
274
274
|
listRegisteredOperations,
|
|
275
275
|
__resetRegistryForTest
|
|
276
276
|
};
|
|
277
|
-
//# sourceMappingURL=chunk-
|
|
277
|
+
//# sourceMappingURL=chunk-4GNEDXDI.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
resolveDefaultNamespaceRoot,
|
|
3
3
|
resolveNamespaceStorageRoot
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-PNLFN2PZ.js";
|
|
5
5
|
import {
|
|
6
6
|
getConfiguredNamespaces
|
|
7
7
|
} from "./chunk-BAVVI5GP.js";
|
|
@@ -2042,4 +2042,4 @@ export {
|
|
|
2042
2042
|
runNamespaceMaintenancePlan,
|
|
2043
2043
|
runNamespaceMaintenanceBatchPlan
|
|
2044
2044
|
};
|
|
2045
|
-
//# sourceMappingURL=chunk-
|
|
2045
|
+
//# sourceMappingURL=chunk-4LV23CHK.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
assertPathInsideRoot
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-VSMRDBFT.js";
|
|
4
4
|
import {
|
|
5
5
|
RECALL_FALLBACK_DIRS
|
|
6
6
|
} from "./chunk-VS2IYZRU.js";
|
|
@@ -92,4 +92,4 @@ async function scanMemoryDir(memoryDir) {
|
|
|
92
92
|
export {
|
|
93
93
|
scanMemoryDir
|
|
94
94
|
};
|
|
95
|
-
//# sourceMappingURL=chunk-
|
|
95
|
+
//# sourceMappingURL=chunk-6SXVCD7W.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
StorageManager
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-SVOHGUMI.js";
|
|
4
4
|
|
|
5
5
|
// src/semantic-rule-promotion.ts
|
|
6
6
|
import { createHash, randomUUID } from "crypto";
|
|
@@ -529,4 +529,4 @@ export {
|
|
|
529
529
|
setSemanticRulePromotionTestHooks,
|
|
530
530
|
promoteSemanticRuleFromMemory
|
|
531
531
|
};
|
|
532
|
-
//# sourceMappingURL=chunk-
|
|
532
|
+
//# sourceMappingURL=chunk-72WG5QKN.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
scanMemoryDir
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-6SXVCD7W.js";
|
|
4
4
|
import {
|
|
5
5
|
isSearchAborted,
|
|
6
6
|
throwIfSearchAborted
|
|
@@ -613,4 +613,4 @@ export {
|
|
|
613
613
|
resolveOramaCollectionDbFilePath,
|
|
614
614
|
OramaBackend
|
|
615
615
|
};
|
|
616
|
-
//# sourceMappingURL=chunk-
|
|
616
|
+
//# sourceMappingURL=chunk-7MW3CVLD.js.map
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
} from "./chunk-UI4FVU6T.js";
|
|
5
5
|
import {
|
|
6
6
|
StorageManager
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-SVOHGUMI.js";
|
|
8
8
|
import {
|
|
9
9
|
parseContinuityImprovementLoops
|
|
10
10
|
} from "./chunk-LDXUBPMO.js";
|
|
@@ -1276,4 +1276,4 @@ export {
|
|
|
1276
1276
|
defaultTierMigrationCycleBudget,
|
|
1277
1277
|
CompoundingEngine
|
|
1278
1278
|
};
|
|
1279
|
-
//# sourceMappingURL=chunk-
|
|
1279
|
+
//# sourceMappingURL=chunk-AYZJID4S.js.map
|
|
@@ -2,6 +2,16 @@
|
|
|
2
2
|
import { promises as fsPromises } from "fs";
|
|
3
3
|
import * as path from "path";
|
|
4
4
|
var DEFAULT_SELF_NAME = "Me";
|
|
5
|
+
var SELF_MARKER_SUFFIX = " (you)";
|
|
6
|
+
var SELF_MARKER = "(you)";
|
|
7
|
+
function stripSelfMarker(name) {
|
|
8
|
+
const trimmed = name.trimEnd();
|
|
9
|
+
if (!trimmed.endsWith(SELF_MARKER)) return trimmed;
|
|
10
|
+
return trimmed.slice(0, -SELF_MARKER.length).trimEnd();
|
|
11
|
+
}
|
|
12
|
+
function hasSelfMarker(label) {
|
|
13
|
+
return label.trimEnd().endsWith(SELF_MARKER);
|
|
14
|
+
}
|
|
5
15
|
function emptySpeakerRegistry() {
|
|
6
16
|
return { version: 1, selfName: DEFAULT_SELF_NAME, speakers: {} };
|
|
7
17
|
}
|
|
@@ -63,18 +73,22 @@ function resolveSpeaker(sourceId, segment, registry) {
|
|
|
63
73
|
const override = registry.speakers[speakerRegistryKey(sourceId, segment.speakerKey)];
|
|
64
74
|
if (override) {
|
|
65
75
|
const isSelf = override.isSelf === true;
|
|
76
|
+
const base = stripSelfMarker(override.name);
|
|
66
77
|
return {
|
|
67
|
-
label: isSelf ? `${
|
|
78
|
+
label: isSelf ? `${base}${SELF_MARKER_SUFFIX}` : base,
|
|
68
79
|
isSelf
|
|
69
80
|
};
|
|
70
81
|
}
|
|
71
82
|
if (segment.isWearer === true) {
|
|
72
|
-
return {
|
|
83
|
+
return {
|
|
84
|
+
label: `${stripSelfMarker(registry.selfName)}${SELF_MARKER_SUFFIX}`,
|
|
85
|
+
isSelf: true
|
|
86
|
+
};
|
|
73
87
|
}
|
|
74
88
|
if (typeof segment.speakerName === "string" && segment.speakerName.trim().length > 0) {
|
|
75
|
-
return { label: segment.speakerName.trim(), isSelf: false };
|
|
89
|
+
return { label: stripSelfMarker(segment.speakerName.trim()), isSelf: false };
|
|
76
90
|
}
|
|
77
|
-
const key = segment.speakerKey.trim();
|
|
91
|
+
const key = stripSelfMarker(segment.speakerKey.trim());
|
|
78
92
|
if (/^\d+$/.test(key)) {
|
|
79
93
|
return { label: `Speaker ${key}`, isSelf: false };
|
|
80
94
|
}
|
|
@@ -97,13 +111,46 @@ function distinctSpeakerLabels(sourceId, segments, registry) {
|
|
|
97
111
|
import { createHash } from "crypto";
|
|
98
112
|
var WEARABLES_DIR_NAME = "wearables";
|
|
99
113
|
var DATE_PATTERN = /^\d{4}-\d{2}-\d{2}$/;
|
|
114
|
+
var TRANSCRIPT_FORMAT_VERSION = 2;
|
|
115
|
+
function isRegexWhitespace(code) {
|
|
116
|
+
return code >= 9 && code <= 13 || code === 32 || code === 160 || code === 5760 || code >= 8192 && code <= 8202 || code === 8232 || code === 8233 || code === 8239 || code === 8287 || code === 12288 || code === 65279;
|
|
117
|
+
}
|
|
118
|
+
function parseTranscriptSegmentLine(line) {
|
|
119
|
+
if (!line.startsWith("**")) return null;
|
|
120
|
+
let labelEnd = -1;
|
|
121
|
+
for (let i = 3; i < line.length; i++) {
|
|
122
|
+
if (line.charCodeAt(i) !== 42 || i + 3 >= line.length || line.charCodeAt(i + 1) !== 42 || !isRegexWhitespace(line.charCodeAt(i + 2)) || line.charCodeAt(i + 3) !== 91) {
|
|
123
|
+
continue;
|
|
124
|
+
}
|
|
125
|
+
labelEnd = i;
|
|
126
|
+
break;
|
|
127
|
+
}
|
|
128
|
+
if (labelEnd === -1) return null;
|
|
129
|
+
const label = line.slice(2, labelEnd);
|
|
130
|
+
const clockStart = labelEnd + 4;
|
|
131
|
+
let clockEnd = -1;
|
|
132
|
+
for (let i = clockStart + 1; i < line.length; i++) {
|
|
133
|
+
if (line.charCodeAt(i) !== 93 || i + 2 >= line.length || line.charCodeAt(i + 1) !== 58 || !isRegexWhitespace(line.charCodeAt(i + 2))) {
|
|
134
|
+
continue;
|
|
135
|
+
}
|
|
136
|
+
clockEnd = i;
|
|
137
|
+
break;
|
|
138
|
+
}
|
|
139
|
+
if (clockEnd === -1) return null;
|
|
140
|
+
return {
|
|
141
|
+
label,
|
|
142
|
+
clock: line.slice(clockStart, clockEnd),
|
|
143
|
+
text: line.slice(clockEnd + 3)
|
|
144
|
+
};
|
|
145
|
+
}
|
|
100
146
|
function isValidTranscriptDate(date) {
|
|
101
147
|
if (!DATE_PATTERN.test(date)) return false;
|
|
102
148
|
const parsed = /* @__PURE__ */ new Date(`${date}T00:00:00Z`);
|
|
103
149
|
return !Number.isNaN(parsed.getTime()) && parsed.toISOString().slice(0, 10) === date;
|
|
104
150
|
}
|
|
105
151
|
function hashTranscriptBody(body) {
|
|
106
|
-
return createHash("sha256").update(
|
|
152
|
+
return createHash("sha256").update(`v${TRANSCRIPT_FORMAT_VERSION}
|
|
153
|
+
${body}`, "utf-8").digest("hex");
|
|
107
154
|
}
|
|
108
155
|
function formatClockTime(iso, timezone) {
|
|
109
156
|
if (!iso) return "--:--";
|
|
@@ -126,6 +173,48 @@ function conversationDurationMinutes(conversation) {
|
|
|
126
173
|
if (Number.isNaN(start) || Number.isNaN(end) || end <= start) return 0;
|
|
127
174
|
return (end - start) / 6e4;
|
|
128
175
|
}
|
|
176
|
+
function escapeSegmentText(text) {
|
|
177
|
+
return text.replace(/\\/g, "\\\\").replace(/\n/g, "\\n").replace(/\r/g, "\\r");
|
|
178
|
+
}
|
|
179
|
+
function unescapeSegmentText(text) {
|
|
180
|
+
return text.replace(/\\(.)/g, (_match, ch) => {
|
|
181
|
+
if (ch === "n") return "\n";
|
|
182
|
+
if (ch === "r") return "\r";
|
|
183
|
+
if (ch === "\\") return "\\";
|
|
184
|
+
return "\\" + ch;
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
function escapeSpeakerLabel(label) {
|
|
188
|
+
return label.replace(/\\/g, "\\\\").replace(/\*/g, "\\*").replace(/\[/g, "\\[").replace(/\]/g, "\\]").replace(/\n/g, "\\n").replace(/\r/g, "\\r");
|
|
189
|
+
}
|
|
190
|
+
function unescapeSpeakerLabel(label) {
|
|
191
|
+
return label.replace(/\\(.)/g, (_match, ch) => {
|
|
192
|
+
if (ch === "\\") return "\\";
|
|
193
|
+
if (ch === "*") return "*";
|
|
194
|
+
if (ch === "[") return "[";
|
|
195
|
+
if (ch === "]") return "]";
|
|
196
|
+
if (ch === "n") return "\n";
|
|
197
|
+
if (ch === "r") return "\r";
|
|
198
|
+
return "\\" + ch;
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
function bodyIsEscaped(meta) {
|
|
202
|
+
return meta !== null && meta !== void 0 && typeof meta.formatVersion === "number" && meta.formatVersion >= TRANSCRIPT_FORMAT_VERSION;
|
|
203
|
+
}
|
|
204
|
+
function decodeTranscriptBody(body, escaped = false) {
|
|
205
|
+
if (!escaped) return body;
|
|
206
|
+
const lines = body.split("\n");
|
|
207
|
+
for (let i = 0; i < lines.length; i++) {
|
|
208
|
+
const match = parseTranscriptSegmentLine(lines[i]);
|
|
209
|
+
if (match === null) continue;
|
|
210
|
+
const { label, clock, text: rawText } = match;
|
|
211
|
+
const decodedText = unescapeSegmentText(rawText);
|
|
212
|
+
const decodedLabel = unescapeSpeakerLabel(label);
|
|
213
|
+
if (decodedText === rawText && decodedLabel === label) continue;
|
|
214
|
+
lines[i] = `**${decodedLabel}** [${clock}]: ${decodedText}`;
|
|
215
|
+
}
|
|
216
|
+
return lines.join("\n");
|
|
217
|
+
}
|
|
129
218
|
function composeDayTranscriptBody(sourceId, date, timezone, conversations, registry) {
|
|
130
219
|
const lines = [];
|
|
131
220
|
lines.push(`# ${sourceId} transcript \u2014 ${date}`);
|
|
@@ -150,7 +239,9 @@ function composeDayTranscriptBody(sourceId, date, timezone, conversations, regis
|
|
|
150
239
|
for (const segment of conversation.segments) {
|
|
151
240
|
const { label } = resolveSpeaker(sourceId, segment, registry);
|
|
152
241
|
const at = formatClockTime(segment.startIso, timezone);
|
|
153
|
-
lines.push(
|
|
242
|
+
lines.push(
|
|
243
|
+
`**${escapeSpeakerLabel(label)}** [${at}]: ${escapeSegmentText(segment.text)}`
|
|
244
|
+
);
|
|
154
245
|
}
|
|
155
246
|
lines.push("");
|
|
156
247
|
}
|
|
@@ -172,12 +263,16 @@ function composeDayTranscriptMeta(sourceId, date, timezone, conversations, regis
|
|
|
172
263
|
speakers: distinctSpeakerLabels(sourceId, allSegments, registry),
|
|
173
264
|
durationMinutes,
|
|
174
265
|
contentHash: hashTranscriptBody(body),
|
|
175
|
-
syncedAt
|
|
266
|
+
syncedAt,
|
|
267
|
+
formatVersion: TRANSCRIPT_FORMAT_VERSION
|
|
176
268
|
};
|
|
177
269
|
}
|
|
178
270
|
function serializeDayTranscript(meta, body) {
|
|
179
271
|
const lines = ["---"];
|
|
180
272
|
lines.push(`kind: ${meta.kind}`);
|
|
273
|
+
if (typeof meta.formatVersion === "number") {
|
|
274
|
+
lines.push(`formatVersion: ${meta.formatVersion}`);
|
|
275
|
+
}
|
|
181
276
|
lines.push(`source: ${JSON.stringify(meta.source)}`);
|
|
182
277
|
lines.push(`date: ${JSON.stringify(meta.date)}`);
|
|
183
278
|
lines.push(`timezone: ${JSON.stringify(meta.timezone)}`);
|
|
@@ -230,9 +325,13 @@ function parseDayTranscript(raw) {
|
|
|
230
325
|
if (!source || !date) return null;
|
|
231
326
|
const meta = {
|
|
232
327
|
kind: "wearable-transcript",
|
|
328
|
+
...scalars.has("formatVersion") ? { formatVersion: parseNonNegativeInt(scalars.get("formatVersion")) } : {},
|
|
233
329
|
source,
|
|
234
330
|
date,
|
|
235
|
-
timezone
|
|
331
|
+
// Preserve a missing timezone field as "" rather than coercing to a
|
|
332
|
+
// default: the fusion identity guard must see "no resolvable tz id"
|
|
333
|
+
// and skip, never silently match a known zone.
|
|
334
|
+
timezone: scalars.get("timezone") ?? "",
|
|
236
335
|
conversationCount: parseNonNegativeInt(scalars.get("conversationCount")),
|
|
237
336
|
segmentCount: parseNonNegativeInt(scalars.get("segmentCount")),
|
|
238
337
|
speakers,
|
|
@@ -262,6 +361,7 @@ function parseNonNegativeInt(value) {
|
|
|
262
361
|
|
|
263
362
|
export {
|
|
264
363
|
DEFAULT_SELF_NAME,
|
|
364
|
+
hasSelfMarker,
|
|
265
365
|
emptySpeakerRegistry,
|
|
266
366
|
speakersFilePath,
|
|
267
367
|
loadSpeakerRegistry,
|
|
@@ -270,11 +370,18 @@ export {
|
|
|
270
370
|
resolveSpeaker,
|
|
271
371
|
distinctSpeakerLabels,
|
|
272
372
|
WEARABLES_DIR_NAME,
|
|
373
|
+
TRANSCRIPT_FORMAT_VERSION,
|
|
374
|
+
parseTranscriptSegmentLine,
|
|
273
375
|
isValidTranscriptDate,
|
|
274
376
|
hashTranscriptBody,
|
|
377
|
+
escapeSegmentText,
|
|
378
|
+
unescapeSegmentText,
|
|
379
|
+
unescapeSpeakerLabel,
|
|
380
|
+
bodyIsEscaped,
|
|
381
|
+
decodeTranscriptBody,
|
|
275
382
|
composeDayTranscriptBody,
|
|
276
383
|
composeDayTranscriptMeta,
|
|
277
384
|
serializeDayTranscript,
|
|
278
385
|
parseDayTranscript
|
|
279
386
|
};
|
|
280
|
-
//# sourceMappingURL=chunk-
|
|
387
|
+
//# sourceMappingURL=chunk-B3ABVQ36.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/wearables/speakers.ts","../src/wearables/day-store.ts"],"sourcesContent":["/**\n * Wearable speaker registry — maps provider diarization labels to\n * human names, persistently, per source.\n *\n * Providers expose speakers differently (Limitless: names + a \"user\"\n * marker; Bee: opaque labels like \"0\"/\"1\"; Omi: \"SPEAKER_00\" + is_user\n * + optional person ids). The registry stores operator-confirmed\n * mappings keyed `<sourceId>:<speakerKey>` in\n * `state/wearables/speakers.json`, plus the wearer's display name.\n *\n * Resolution precedence (most-authoritative first):\n * 1. registry override for `<sourceId>:<speakerKey>`\n * 2. provider-identified wearer -> selfName\n * 3. provider-supplied speaker name\n * 4. the raw speaker key, prefixed \"Speaker\" when it is bare digits\n */\n\nimport { promises as fsPromises } from \"node:fs\";\nimport * as path from \"node:path\";\n\nexport interface SpeakerOverride {\n name: string;\n /** Mark this speaker as the wearer (their words become \"you\"). */\n isSelf?: boolean;\n updatedAt: string;\n}\n\nexport interface SpeakerRegistry {\n version: 1;\n /** Display name used for the wearer across all sources. */\n selfName: string;\n /** Overrides keyed `<sourceId>:<speakerKey>`. */\n speakers: Record<string, SpeakerOverride>;\n}\n\nexport const DEFAULT_SELF_NAME = \"Me\";\n\n/**\n * Reserved self marker appended to a wearer's display label so the\n * rendered transcript carries explicit, parseable self metadata. It is\n * RESERVED: a non-self display label can never carry it (see\n * `stripSelfMarker`), so when `reconstructFusionInputs` reads it back it\n * is authoritative self metadata — never a coincidental display-name\n * suffix that would misattribute another speaker as the wearer\n * (issue #1849).\n */\nexport const SELF_MARKER_SUFFIX = \" (you)\";\nconst SELF_MARKER = \"(you)\";\n\n/**\n * Remove a reserved `(you)` self marker from a display name. Applied to\n * every base name before it becomes a label so the marker can only ever\n * appear as the renderer-appended self flag, never as part of a stored\n * non-self display name.\n *\n * Implemented with plain string ops instead of a regex so the leading\n * `\\s*` (no anchor) cannot cause the O(n²) backtracking CodeQL flags\n * on whitespace-only input (js/polynomial-redos).\n */\nexport function stripSelfMarker(name: string): string {\n const trimmed = name.trimEnd();\n if (!trimmed.endsWith(SELF_MARKER)) return trimmed;\n return trimmed.slice(0, -SELF_MARKER.length).trimEnd();\n}\n\n/**\n * Whether a rendered label carries the reserved self marker. This is the\n * single authoritative self-status detector shared by the renderer and\n * the fusion reconstructor (issue #1849).\n */\nexport function hasSelfMarker(label: string): boolean {\n return label.trimEnd().endsWith(SELF_MARKER);\n}\n\nexport function emptySpeakerRegistry(): SpeakerRegistry {\n return { version: 1, selfName: DEFAULT_SELF_NAME, speakers: {} };\n}\n\nexport function speakersFilePath(memoryDir: string): string {\n return path.join(memoryDir, \"state\", \"wearables\", \"speakers.json\");\n}\n\nexport async function loadSpeakerRegistry(\n memoryDir: string,\n): Promise<SpeakerRegistry> {\n const filePath = speakersFilePath(memoryDir);\n let raw: string;\n try {\n raw = await fsPromises.readFile(filePath, \"utf-8\");\n } catch (err) {\n if ((err as NodeJS.ErrnoException).code === \"ENOENT\") {\n return emptySpeakerRegistry();\n }\n throw err;\n }\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw);\n } catch (err) {\n throw new Error(\n `wearables speakers file is not valid JSON (state/wearables/speakers.json): ${\n err instanceof Error ? err.message : String(err)\n }`,\n );\n }\n if (\n typeof parsed !== \"object\" ||\n parsed === null ||\n Array.isArray(parsed) ||\n typeof (parsed as SpeakerRegistry).speakers !== \"object\" ||\n (parsed as SpeakerRegistry).speakers === null\n ) {\n throw new Error(\n 'wearables speakers file has an unexpected shape (state/wearables/speakers.json); expected {\"version\":1,\"selfName\":\"...\",\"speakers\":{}}',\n );\n }\n const registry = parsed as SpeakerRegistry;\n return {\n version: 1,\n selfName:\n typeof registry.selfName === \"string\" && registry.selfName.trim().length > 0\n ? registry.selfName.trim()\n : DEFAULT_SELF_NAME,\n speakers: registry.speakers,\n };\n}\n\nexport async function saveSpeakerRegistry(\n memoryDir: string,\n registry: SpeakerRegistry,\n): Promise<void> {\n const filePath = speakersFilePath(memoryDir);\n await fsPromises.mkdir(path.dirname(filePath), { recursive: true });\n const tmpPath = `${filePath}.tmp-${process.pid}-${Date.now().toString(36)}`;\n await fsPromises.writeFile(\n tmpPath,\n `${JSON.stringify(registry, null, 2)}\\n`,\n \"utf-8\",\n );\n try {\n await fsPromises.rename(tmpPath, filePath);\n } catch (err) {\n await fsPromises.unlink(tmpPath).catch(() => undefined);\n throw err;\n }\n}\n\nexport function speakerRegistryKey(\n sourceId: string,\n speakerKey: string,\n): string {\n return `${sourceId}:${speakerKey}`;\n}\n\nexport interface ResolvedSpeaker {\n /** Display label used in transcripts, e.g. \"Jane\" or \"Me (you)\". */\n label: string;\n /** Whether this speaker is the wearer. */\n isSelf: boolean;\n}\n\nexport function resolveSpeaker(\n sourceId: string,\n segment: { speakerKey: string; speakerName?: string; isWearer?: boolean },\n registry: SpeakerRegistry,\n): ResolvedSpeaker {\n const override = registry.speakers[speakerRegistryKey(sourceId, segment.speakerKey)];\n if (override) {\n const isSelf = override.isSelf === true;\n // Reserve the `(you)` marker: strip any pre-existing marker from the\n // base name so a NON-self label can never carry it. Without this, a\n // speaker override like \"Pat (you)\" set WITHOUT --self would render\n // as \"Pat (you)\" and the fusion reconstructor would read the suffix\n // as self metadata, attributing Pat's words to the wearer (issue\n // #1849).\n const base = stripSelfMarker(override.name);\n return {\n label: isSelf ? `${base}${SELF_MARKER_SUFFIX}` : base,\n isSelf,\n };\n }\n if (segment.isWearer === true) {\n return {\n label: `${stripSelfMarker(registry.selfName)}${SELF_MARKER_SUFFIX}`,\n isSelf: true,\n };\n }\n if (\n typeof segment.speakerName === \"string\" &&\n segment.speakerName.trim().length > 0\n ) {\n // Provider-supplied names are never self here; strip a stray marker\n // so a provider label cannot masquerade as the reserved self flag.\n return { label: stripSelfMarker(segment.speakerName.trim()), isSelf: false };\n }\n // Strip the reserved `(you)` marker from the raw key so a provider\n // speakerKey like \"Pat (you)\" can never leak the marker into a non-self\n // rendered label — the fusion reconstructor reads the suffix as\n // authoritative self metadata and would misattribute the speaker as the\n // wearer (issue #1849).\n const key = stripSelfMarker(segment.speakerKey.trim());\n // Bare diarization indexes read better with a prefix.\n if (/^\\d+$/.test(key)) {\n return { label: `Speaker ${key}`, isSelf: false };\n }\n return { label: key.length > 0 ? key : \"Unknown speaker\", isSelf: false };\n}\n\n/**\n * Distinct speaker labels for a set of segments, in first-appearance\n * order — used for day-transcript frontmatter.\n */\nexport function distinctSpeakerLabels(\n sourceId: string,\n segments: Array<{ speakerKey: string; speakerName?: string; isWearer?: boolean }>,\n registry: SpeakerRegistry,\n): string[] {\n const labels: string[] = [];\n const seen = new Set<string>();\n for (const segment of segments) {\n const { label } = resolveSpeaker(sourceId, segment, registry);\n if (!seen.has(label)) {\n seen.add(label);\n labels.push(label);\n }\n }\n return labels;\n}\n","/**\n * Wearable day-transcript composition and parsing.\n *\n * One markdown file per source per day, stored under\n * `<memoryDir>/wearables/<source>/<YYYY-MM-DD>.md` with YAML\n * frontmatter. The location is deliberate:\n *\n * - it is OUTSIDE the memory scan roots (facts/, procedures/,\n * reasoning-traces/, corrections/), so transcripts never appear as\n * memories in recall or governance passes;\n * - it is INSIDE the QMD collection root (the memory dir), so day\n * transcripts are full-text searchable after the next index update.\n *\n * Files are rebuilt idempotently from provider data on every sync; the\n * body hash in frontmatter lets the pipeline skip rewriting (and\n * re-extracting) unchanged days.\n *\n * This module is pure composition/parsing — file IO lives in\n * `StorageManager` so encrypted-at-rest deployments and atomic write\n * semantics are inherited from the same code paths memories use.\n */\n\nimport { createHash } from \"node:crypto\";\n\nimport type { SpeakerRegistry } from \"./speakers.js\";\nimport { distinctSpeakerLabels, resolveSpeaker } from \"./speakers.js\";\nimport type {\n WearableConversation,\n WearableDayTranscript,\n WearableDayTranscriptMeta,\n} from \"./types.js\";\n\nexport const WEARABLES_DIR_NAME = \"wearables\";\n\nconst DATE_PATTERN = /^\\d{4}-\\d{2}-\\d{2}$/;\n\n/**\n * Day-transcript body serialization format version. Folded into\n * `hashTranscriptBody` so a version bump invalidates files written by an\n * older serializer and forces an idempotent rewrite. Decoders gate on this:\n * only bodies whose parsed meta carries >= this version have escape\n * sequences decoded; legacy bodies (absent / older) are left byte-for-byte\n * unchanged so a literal two-character `\\n`/`\\r` in a pre-escaper\n * transcript is never altered (issue #1849).\n */\nexport const TRANSCRIPT_FORMAT_VERSION = 2;\n\n/**\n * Result of parsing a rendered transcript segment line.\n */\nexport interface TranscriptSegmentMatch {\n /** Speaker label text between the `**` delimiters. */\n label: string;\n /** Clock text between the `[` `]` delimiters. */\n clock: string;\n /** Segment text after the colon. */\n text: string;\n}\n\n/**\n * Test a single character code point against the JavaScript regex `\\s`\n * whitespace class without invoking a regex. Used by the linear segment\n * line parser so no quantified pattern is ever evaluated on untrusted\n * transcript content (CodeQL polynomial-redos, issue #1849).\n */\nfunction isRegexWhitespace(code: number): boolean {\n return (\n (code >= 0x09 && code <= 0x0d) ||\n code === 0x20 ||\n code === 0xa0 ||\n code === 0x1680 ||\n (code >= 0x2000 && code <= 0x200a) ||\n code === 0x2028 ||\n code === 0x2029 ||\n code === 0x202f ||\n code === 0x205f ||\n code === 0x3000 ||\n code === 0xfeff\n );\n}\n\n/**\n * Parse a rendered transcript segment line (`**label** [clock]: text`)\n * into its three components using a linear, bounded scan — a CodeQL-safe\n * replacement for the polynomial-risk regex that previously matched this\n * format. Returns null when the line is not a segment line.\n *\n * The scan finds the FIRST occurrence of each structural delimiter\n * (`**` after the label, `]` after the clock) exactly as the original\n * non-greedy regex did, and verifies the fixed separator characters\n * (`\\s`, `[`, `:`, `\\s`) by single-character code-point comparison.\n * No quantified regex is evaluated on the line (#1849).\n *\n * Escaped labels (formatVersion >= 2) never contain an unescaped `**`,\n * `[`, or `]`, and rendered clocks are always `HH:MM` / `--:--`, so the\n * first delimiter is always the correct one for every well-formed\n * transcript. Legacy unescaped labels are used verbatim by the caller\n * and parsed identically here.\n */\nexport function parseTranscriptSegmentLine(\n line: string,\n): TranscriptSegmentMatch | null {\n // Must start with '**'.\n if (!line.startsWith(\"**\")) return null;\n\n // Find the closing '**' of the label: the first '**' at index >= 3\n // (label is at least 1 char) that is immediately followed by \\s and\n // then '['. This mirrors the non-greedy regex: the engine tries the\n // shortest label first and extends only when the subsequent fixed\n // delimiters do not line up. An escaped label ending with '\\*' is\n // correctly handled because the spurious '**' (escape-star + close-\n // star) is not followed by \\s and the scan continues.\n let labelEnd = -1;\n for (let i = 3; i < line.length; i++) {\n if (\n line.charCodeAt(i) !== 0x2a /* '*' */ ||\n i + 3 >= line.length ||\n line.charCodeAt(i + 1) !== 0x2a /* '*' */ ||\n !isRegexWhitespace(line.charCodeAt(i + 2)) ||\n line.charCodeAt(i + 3) !== 0x5b /* '[' */\n ) {\n continue;\n }\n labelEnd = i;\n break;\n }\n if (labelEnd === -1) return null;\n\n const label = line.slice(2, labelEnd);\n // Clock content starts after the closing '**', the \\s, and the '['.\n const clockStart = labelEnd + 4;\n\n // Find the closing ']' of the clock: the first ']' at index >=\n // clockStart + 1 (clock is at least 1 char) that is immediately\n // followed by ':' and \\s — matching the non-greedy regex.\n let clockEnd = -1;\n for (let i = clockStart + 1; i < line.length; i++) {\n if (\n line.charCodeAt(i) !== 0x5d /* ']' */ ||\n i + 2 >= line.length ||\n line.charCodeAt(i + 1) !== 0x3a /* ':' */ ||\n !isRegexWhitespace(line.charCodeAt(i + 2))\n ) {\n continue;\n }\n clockEnd = i;\n break;\n }\n if (clockEnd === -1) return null;\n\n return {\n label,\n clock: line.slice(clockStart, clockEnd),\n text: line.slice(clockEnd + 3),\n };\n}\n\nexport function isValidTranscriptDate(date: string): boolean {\n if (!DATE_PATTERN.test(date)) return false;\n const parsed = new Date(`${date}T00:00:00Z`);\n return !Number.isNaN(parsed.getTime()) && parsed.toISOString().slice(0, 10) === date;\n}\n\nexport function hashTranscriptBody(body: string): string {\n // The version prefix makes the hash an idempotency key for the body AS\n // SERIALIZED under the current format: when the escape encoding changes\n // (version bump) every existing file's stored hash no longer matches and\n // the pipeline rewrites it with the new marker — no separate migration\n // pass needed (issue #1849).\n return createHash(\"sha256\")\n .update(`v${TRANSCRIPT_FORMAT_VERSION}\\n${body}`, \"utf-8\")\n .digest(\"hex\");\n}\n\nfunction formatClockTime(iso: string | undefined, timezone: string): string {\n if (!iso) return \"--:--\";\n const ms = Date.parse(iso);\n if (Number.isNaN(ms)) return \"--:--\";\n try {\n return new Intl.DateTimeFormat(\"en-US\", {\n timeZone: timezone,\n hour12: false,\n hour: \"2-digit\",\n minute: \"2-digit\",\n }).format(new Date(ms));\n } catch {\n // Unknown timezone identifiers fall back to UTC rather than\n // crashing a sync that already fetched data.\n return new Date(ms).toISOString().slice(11, 16);\n }\n}\n\nfunction conversationDurationMinutes(conversation: WearableConversation): number {\n const start = Date.parse(conversation.startIso);\n const end = conversation.endIso ? Date.parse(conversation.endIso) : NaN;\n if (Number.isNaN(start) || Number.isNaN(end) || end <= start) return 0;\n return (end - start) / 60_000;\n}\n\n/**\n * Escape segment text for the line-based markdown format so that embedded\n * newlines, carriage returns, and backslashes survive the serialize →\n * reconstruct round-trip losslessly. Reversed by `unescapeSegmentText`\n * (this module — the single decode primitive shared with the fusion\n * reconstruct path and every view/search/index surface).\n *\n * Without this, a segment whose text contains a newline is split across\n * multiple physical lines; the reconstruct path treats each line\n * independently and the continuation is silently dropped (or worse, a\n * continuation line that looks like a heading/clock is mis-parsed).\n */\nexport function escapeSegmentText(text: string): string {\n return text\n .replace(/\\\\/g, \"\\\\\\\\\")\n .replace(/\\n/g, \"\\\\n\")\n .replace(/\\r/g, \"\\\\r\");\n}\n\n/**\n * Reverse `escapeSegmentText`. Unknown escape sequences (a lone\n * backslash followed by a character the escaper never emits) are passed\n * through literally so legacy transcripts that never went through the\n * escaper still round-trip their original text. This is the SINGLE\n * decode primitive: the fusion reconstruct path and every user-facing\n * view/search/index surface call it so escaped storage never leaks to\n * display (#1849).\n */\nexport function unescapeSegmentText(text: string): string {\n return text.replace(/\\\\(.)/g, (_match, ch: string) => {\n if (ch === \"n\") return \"\\n\";\n if (ch === \"r\") return \"\\r\";\n if (ch === \"\\\\\") return \"\\\\\";\n return \"\\\\\" + ch;\n });\n}\n\n/**\n * Escape a speaker label for the line-based markdown format so that\n * markdown-delimiter characters in an arbitrary user/provider label\n * (`**`, `[`, `]`), the escape character (`\\`), and embedded newlines/\n * carriage returns cannot break `parseTranscriptSegmentLine` parsing.\n * Without this, a label containing `**` (or `** [clock]:`) can make the\n * non-greedy delimiter match land on the wrong `**` and mis-parse the\n * clock/text — or fail to parse the line at all. Reversed by\n * `unescapeSpeakerLabel` (this module). Legacy transcripts whose labels\n * were never escaped still parse: `unescapeSpeakerLabel` is a no-op on\n * any label without a backslash escape sequence (#1849).\n */\nexport function escapeSpeakerLabel(label: string): string {\n return label\n .replace(/\\\\/g, \"\\\\\\\\\")\n .replace(/\\*/g, \"\\\\*\")\n .replace(/\\[/g, \"\\\\[\")\n .replace(/\\]/g, \"\\\\]\")\n .replace(/\\n/g, \"\\\\n\")\n .replace(/\\r/g, \"\\\\r\");\n}\n\n/**\n * Reverse `escapeSpeakerLabel`. Unknown escape sequences (a backslash\n * followed by a character the escaper never emits) are passed through\n * literally so legacy transcripts with raw labels still round-trip\n * their original text, mirroring `unescapeSegmentText` for segment text.\n */\nexport function unescapeSpeakerLabel(label: string): string {\n return label.replace(/\\\\(.)/g, (_match, ch: string) => {\n if (ch === \"\\\\\") return \"\\\\\";\n if (ch === \"*\") return \"*\";\n if (ch === \"[\") return \"[\";\n if (ch === \"]\") return \"]\";\n if (ch === \"n\") return \"\\n\";\n if (ch === \"r\") return \"\\r\";\n return \"\\\\\" + ch;\n });\n}\n\n/**\n * Whether a parsed day-transcript's body was written by the escape-aware\n * serializer (meta carries `formatVersion` >= `TRANSCRIPT_FORMAT_VERSION`).\n * Legacy bodies (no marker, or an older version) must NOT be decoded: their\n * literal two-character `\\n`, `\\r`, and lone backslashes are original\n * content, not escape sequences (issue #1849).\n */\nexport function bodyIsEscaped(\n meta: { formatVersion?: number } | null | undefined,\n): boolean {\n return (\n meta !== null &&\n meta !== undefined &&\n typeof meta.formatVersion === \"number\" &&\n meta.formatVersion >= TRANSCRIPT_FORMAT_VERSION\n );\n}\n\n/**\n * Decode the escaped segment text AND speaker label of a stored\n * transcript body into the ORIGINAL forms for user-facing\n * view/search/index surfaces. Only segment lines are touched: the text\n * is decoded via `unescapeSegmentText` and the label via\n * `unescapeSpeakerLabel`; headings, locations, and the H1 header are\n * NOT escaped on write and pass through unchanged, so a title or\n * location containing a literal backslash is never altered. The fusion\n * reconstruct path does NOT use this — it decodes each segment once\n * during parse — so callers feeding bodies back into reconstruct must\n * pass the RAW stored body, not a decoded one, to avoid double-decoding.\n *\n * FORMAT-AWARE (issue #1849): when `escaped` is falsy (the default) the\n * body is returned byte-for-byte unchanged. Only bodies written by the\n * escape-aware serializer (`escaped = true`, derived from\n * `bodyIsEscaped(meta)`) are decoded, so a legacy transcript's literal\n * two-character `\\n`/`\\r` or lone backslash is never altered. Callers\n * that have the parsed meta should pass `bodyIsEscaped(meta)`.\n */\nexport function decodeTranscriptBody(body: string, escaped = false): string {\n if (!escaped) return body;\n const lines = body.split(\"\\n\");\n for (let i = 0; i < lines.length; i++) {\n const match = parseTranscriptSegmentLine(lines[i]);\n if (match === null) continue;\n const { label, clock, text: rawText } = match;\n const decodedText = unescapeSegmentText(rawText);\n const decodedLabel = unescapeSpeakerLabel(label);\n if (decodedText === rawText && decodedLabel === label) continue;\n lines[i] = `**${decodedLabel}** [${clock}]: ${decodedText}`;\n }\n return lines.join(\"\\n\");\n}\n\n/** Compose the markdown body (no frontmatter) for one source/day. */\nexport function composeDayTranscriptBody(\n sourceId: string,\n date: string,\n timezone: string,\n conversations: WearableConversation[],\n registry: SpeakerRegistry,\n): string {\n const lines: string[] = [];\n lines.push(`# ${sourceId} transcript — ${date}`);\n lines.push(\"\");\n const ordered = [...conversations].sort((a, b) => {\n const aMs = Date.parse(a.startIso);\n const bMs = Date.parse(b.startIso);\n if (aMs < bMs) return -1;\n if (aMs > bMs) return 1;\n // Stable secondary key so equal start times order deterministically.\n return a.id < b.id ? -1 : a.id > b.id ? 1 : 0;\n });\n for (const conversation of ordered) {\n const start = formatClockTime(conversation.startIso, timezone);\n const end = formatClockTime(conversation.endIso, timezone);\n const title = conversation.title?.trim();\n const heading = title && title.length > 0 ? ` · ${title}` : \"\";\n lines.push(`## ${start}–${end}${heading} (conversation ${conversation.id})`);\n if (conversation.location) {\n lines.push(`*Location: ${conversation.location}*`);\n }\n lines.push(\"\");\n for (const segment of conversation.segments) {\n const { label } = resolveSpeaker(sourceId, segment, registry);\n const at = formatClockTime(segment.startIso, timezone);\n lines.push(\n `**${escapeSpeakerLabel(label)}** [${at}]: ${escapeSegmentText(segment.text)}`,\n );\n }\n lines.push(\"\");\n }\n return `${lines.join(\"\\n\").trimEnd()}\\n`;\n}\n\nexport function composeDayTranscriptMeta(\n sourceId: string,\n date: string,\n timezone: string,\n conversations: WearableConversation[],\n registry: SpeakerRegistry,\n body: string,\n syncedAt: string,\n): WearableDayTranscriptMeta {\n const allSegments = conversations.flatMap((c) => c.segments);\n const durationMinutes = Math.round(\n conversations.reduce((sum, c) => sum + conversationDurationMinutes(c), 0),\n );\n return {\n kind: \"wearable-transcript\",\n source: sourceId,\n date,\n timezone,\n conversationCount: conversations.length,\n segmentCount: allSegments.length,\n speakers: distinctSpeakerLabels(sourceId, allSegments, registry),\n durationMinutes,\n contentHash: hashTranscriptBody(body),\n syncedAt,\n formatVersion: TRANSCRIPT_FORMAT_VERSION,\n };\n}\n\n/** Serialize meta + body into the persisted file format. */\nexport function serializeDayTranscript(\n meta: WearableDayTranscriptMeta,\n body: string,\n): string {\n const lines: string[] = [\"---\"];\n lines.push(`kind: ${meta.kind}`);\n if (typeof meta.formatVersion === \"number\") {\n lines.push(`formatVersion: ${meta.formatVersion}`);\n }\n lines.push(`source: ${JSON.stringify(meta.source)}`);\n lines.push(`date: ${JSON.stringify(meta.date)}`);\n lines.push(`timezone: ${JSON.stringify(meta.timezone)}`);\n lines.push(`conversationCount: ${meta.conversationCount}`);\n lines.push(`segmentCount: ${meta.segmentCount}`);\n if (meta.speakers.length === 0) {\n lines.push(\"speakers: []\");\n } else {\n lines.push(\"speakers:\");\n for (const speaker of meta.speakers) {\n lines.push(` - ${JSON.stringify(speaker)}`);\n }\n }\n lines.push(`durationMinutes: ${meta.durationMinutes}`);\n lines.push(`contentHash: ${JSON.stringify(meta.contentHash)}`);\n lines.push(`syncedAt: ${JSON.stringify(meta.syncedAt)}`);\n lines.push(\"---\");\n lines.push(\"\");\n return `${lines.join(\"\\n\")}${body}`;\n}\n\n/**\n * Parse a persisted day-transcript file. Returns null when the content\n * does not look like a wearable transcript (wrong kind, missing\n * frontmatter) so callers can distinguish \"not a transcript\" from a\n * read error.\n */\nexport function parseDayTranscript(raw: string): WearableDayTranscript | null {\n if (!raw.startsWith(\"---\\n\")) return null;\n const closeIndex = raw.indexOf(\"\\n---\\n\", 4);\n if (closeIndex === -1) return null;\n const header = raw.slice(4, closeIndex);\n const body = raw.slice(closeIndex + 5).replace(/^\\n/, \"\");\n\n const scalars = new Map<string, string>();\n const speakers: string[] = [];\n let inSpeakers = false;\n for (const line of header.split(\"\\n\")) {\n if (inSpeakers) {\n const item = line.match(/^ {2}- (.*)$/);\n if (item) {\n speakers.push(parseYamlScalar(item[1]));\n continue;\n }\n inSpeakers = false;\n }\n if (line === \"speakers:\") {\n inSpeakers = true;\n continue;\n }\n if (line === \"speakers: []\") continue;\n const match = line.match(/^([A-Za-z][A-Za-z0-9]*): (.*)$/);\n if (match) scalars.set(match[1], parseYamlScalar(match[2]));\n }\n\n if (scalars.get(\"kind\") !== \"wearable-transcript\") return null;\n const source = scalars.get(\"source\");\n const date = scalars.get(\"date\");\n if (!source || !date) return null;\n\n const meta: WearableDayTranscriptMeta = {\n kind: \"wearable-transcript\",\n ...(scalars.has(\"formatVersion\")\n ? { formatVersion: parseNonNegativeInt(scalars.get(\"formatVersion\")) }\n : {}),\n source,\n date,\n // Preserve a missing timezone field as \"\" rather than coercing to a\n // default: the fusion identity guard must see \"no resolvable tz id\"\n // and skip, never silently match a known zone.\n timezone: scalars.get(\"timezone\") ?? \"\",\n conversationCount: parseNonNegativeInt(scalars.get(\"conversationCount\")),\n segmentCount: parseNonNegativeInt(scalars.get(\"segmentCount\")),\n speakers,\n durationMinutes: parseNonNegativeInt(scalars.get(\"durationMinutes\")),\n contentHash: scalars.get(\"contentHash\") ?? \"\",\n syncedAt: scalars.get(\"syncedAt\") ?? \"\",\n };\n return { meta, body };\n}\n\nfunction parseYamlScalar(value: string): string {\n const trimmed = value.trim();\n if (trimmed.startsWith('\"') && trimmed.endsWith('\"') && trimmed.length >= 2) {\n try {\n const parsed = JSON.parse(trimmed);\n if (typeof parsed === \"string\") return parsed;\n } catch {\n // Fall through to the raw value below.\n }\n }\n return trimmed;\n}\n\nfunction parseNonNegativeInt(value: string | undefined): number {\n if (value === undefined) return 0;\n const parsed = Number(value);\n if (!Number.isFinite(parsed) || parsed < 0) return 0;\n return Math.floor(parsed);\n}\n"],"mappings":"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","names":[]}
|
|
@@ -10,10 +10,10 @@ import {
|
|
|
10
10
|
import {
|
|
11
11
|
listMemoryGovernanceRuns,
|
|
12
12
|
readMemoryGovernanceRunArtifact
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-3XIY7MDQ.js";
|
|
14
14
|
import {
|
|
15
15
|
StorageManager
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-SVOHGUMI.js";
|
|
17
17
|
import {
|
|
18
18
|
MEMORY_PROJECTION_SCHEMA_VERSION,
|
|
19
19
|
getMemoryProjectionPath,
|
|
@@ -1023,4 +1023,4 @@ export {
|
|
|
1023
1023
|
verifyMemoryProjection,
|
|
1024
1024
|
repairMemoryProjection
|
|
1025
1025
|
};
|
|
1026
|
-
//# sourceMappingURL=chunk-
|
|
1026
|
+
//# sourceMappingURL=chunk-BEM4D2QG.js.map
|