@remnic/core 9.5.0 → 9.6.1
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/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/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
package/dist/storage.js
CHANGED
|
@@ -16,11 +16,11 @@ import {
|
|
|
16
16
|
parseFrontmatter,
|
|
17
17
|
parseFrontmatterStringValue,
|
|
18
18
|
serializeEntityFile
|
|
19
|
-
} from "./chunk-
|
|
20
|
-
import "./chunk-
|
|
19
|
+
} from "./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";
|
package/dist/summarizer.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ModelRegistry } from './model-registry.js';
|
|
2
|
-
import { P as PluginConfig, G as GatewayConfig, T as TranscriptEntry, H as HourlySummary } from './types-
|
|
2
|
+
import { P as PluginConfig, G as GatewayConfig, T as TranscriptEntry, H as HourlySummary } from './types-CGgcNWCG.js';
|
|
3
3
|
import { TranscriptManager } from './transcript.js';
|
|
4
4
|
import './types-gb_SNtjR.js';
|
|
5
5
|
import './message-parts/index.js';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { p as MemoryFrontmatter } from './types-
|
|
2
|
-
import { StorageManager } from './storage.js';
|
|
1
|
+
import { p as MemoryFrontmatter } from './types-CGgcNWCG.js';
|
|
2
|
+
import { S as StorageManager } from './storage-C1maCNbc.js';
|
|
3
3
|
import './types-gb_SNtjR.js';
|
|
4
4
|
import './message-parts/index.js';
|
|
5
5
|
import './page-versioning.js';
|
package/dist/threading.d.ts
CHANGED
package/dist/tier-migration.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { M as MemoryFile } from './types-
|
|
2
|
-
import { StorageManager } from './storage.js';
|
|
1
|
+
import { M as MemoryFile } from './types-CGgcNWCG.js';
|
|
2
|
+
import { S as StorageManager } from './storage-C1maCNbc.js';
|
|
3
3
|
import { MemoryTier } from './tier-routing.js';
|
|
4
4
|
import { SearchBackend } from './search/port.js';
|
|
5
5
|
import './types-gb_SNtjR.js';
|
package/dist/tier-routing.d.ts
CHANGED
package/dist/topics.d.ts
CHANGED
package/dist/transcript.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { P as PluginConfig, T as TranscriptEntry, q as Checkpoint } from './types-
|
|
1
|
+
import { P as PluginConfig, T as TranscriptEntry, q as Checkpoint } from './types-CGgcNWCG.js';
|
|
2
2
|
import { SessionIntegrityReport } from './session-integrity.js';
|
|
3
3
|
import './types-gb_SNtjR.js';
|
|
4
4
|
import './message-parts/index.js';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { TrustScoreResult, TrustSignals, TrustBand, TrustScoreComponent } from './trust-score.js';
|
|
2
|
-
import { F as FaithfulnessFrontmatter, J as ProvenanceSource, K as TrustWeights } from './types-
|
|
2
|
+
import { F as FaithfulnessFrontmatter, J as ProvenanceSource, K as TrustWeights } from './types-CGgcNWCG.js';
|
|
3
3
|
import './types-gb_SNtjR.js';
|
|
4
4
|
import './message-parts/index.js';
|
|
5
5
|
|
package/dist/trust-score.d.ts
CHANGED
|
@@ -274,6 +274,29 @@ interface WearablesConfig {
|
|
|
274
274
|
corrections: WearableCorrectionRule[];
|
|
275
275
|
/** Per-source settings, keyed by connector id. */
|
|
276
276
|
sources: Record<string, WearableSourceSettings>;
|
|
277
|
+
/**
|
|
278
|
+
* Cross-source fusion settings (issue #1810). Default disabled —
|
|
279
|
+
* enabling it is the only behavior change fusion introduces.
|
|
280
|
+
*/
|
|
281
|
+
fusion: WearableFusionConfig;
|
|
282
|
+
}
|
|
283
|
+
/**
|
|
284
|
+
* Cross-source fusion configuration (issue #1810). When disabled (the
|
|
285
|
+
* default), no fusion artifacts are written and no behavior changes.
|
|
286
|
+
*/
|
|
287
|
+
interface WearableFusionConfig {
|
|
288
|
+
/** Master gate for fusion. Default false. */
|
|
289
|
+
enabled: boolean;
|
|
290
|
+
/**
|
|
291
|
+
* Max gap (ms) between two conversations to merge into one fused
|
|
292
|
+
* cluster. Default 300000 (5 minutes).
|
|
293
|
+
*/
|
|
294
|
+
proximityGapMs: number;
|
|
295
|
+
/**
|
|
296
|
+
* Max drift (ms) for two segments to align across sources. Default
|
|
297
|
+
* 30000 (30 seconds).
|
|
298
|
+
*/
|
|
299
|
+
windowToleranceMs: number;
|
|
277
300
|
}
|
|
278
301
|
/** Summary returned by a sync run (one source). */
|
|
279
302
|
interface WearableSyncSummary {
|
|
@@ -317,6 +340,13 @@ interface WearableDayTranscriptMeta {
|
|
|
317
340
|
/** SHA-256 of the body — used to skip unchanged rewrites. */
|
|
318
341
|
contentHash: string;
|
|
319
342
|
syncedAt: string;
|
|
343
|
+
/**
|
|
344
|
+
* Body serialization format version. Present (>= 2) only on bodies written
|
|
345
|
+
* by the escape-aware serializer; absent on legacy transcripts. Decoders
|
|
346
|
+
* gate on this so a legacy body's literal two-character `\n`/`\r` is never
|
|
347
|
+
* altered (issue #1849).
|
|
348
|
+
*/
|
|
349
|
+
formatVersion?: number;
|
|
320
350
|
}
|
|
321
351
|
/** A parsed day-transcript file. */
|
|
322
352
|
interface WearableDayTranscript {
|
|
@@ -3678,4 +3708,4 @@ interface HourlySummary {
|
|
|
3678
3708
|
generatedAt: string;
|
|
3679
3709
|
}
|
|
3680
3710
|
|
|
3681
|
-
export { type CompressionGuidelineOptimizerActionSummary as $, type ActiveRecallChatType as A, type BehaviorSignalEvent as B, type CalendarSource as C, type DreamsPhase as D, type EntityFile as E, type FaithfulnessFrontmatter as F, type GatewayConfig as G, type HourlySummary as H, type IdentityInjectionMode as I, type ProvenanceSource as J, type TrustWeights as K, type LiveConnectorsConfig as L, type MemoryFile as M, type ConversationThread as N, type LifecycleState as O, type PluginConfig as P, type QmdSearchResult as Q, type RecallDisclosure as R, type SessionObserverBandConfig as S, type TranscriptEntry as T, type PolicyClass as U, type VerificationState as V, type ImportanceLevel as W, type BufferSurpriseEvent as X, type SecretRef as Y, type AgentAccessAuthToken as Z, type CompressionGuidelineOptimizerEventCounts as _, type DreamsRunResult as a,
|
|
3711
|
+
export { type CompressionGuidelineOptimizerActionSummary as $, type ActiveRecallChatType as A, type BehaviorSignalEvent as B, type CalendarSource as C, type DreamsPhase as D, type EntityFile as E, type FaithfulnessFrontmatter as F, type GatewayConfig as G, type HourlySummary as H, type IdentityInjectionMode as I, type ProvenanceSource as J, type TrustWeights as K, type LiveConnectorsConfig as L, type MemoryFile as M, type ConversationThread as N, type LifecycleState as O, type PluginConfig as P, type QmdSearchResult as Q, type RecallDisclosure as R, type SessionObserverBandConfig as S, type TranscriptEntry as T, type PolicyClass as U, type VerificationState as V, type ImportanceLevel as W, type BufferSurpriseEvent as X, type SecretRef as Y, type AgentAccessAuthToken as Z, type CompressionGuidelineOptimizerEventCounts as _, type DreamsRunResult as a, type CodexCompatConfig as a$, type CompressionGuidelineOptimizerRuleUpdate as a0, type MemoryActionType as a1, type MemoryActionEvent as a2, type CompressionGuidelineOptimizerState as a3, type EntityMention as a4, type EntitySchemaDefinition as a5, type EntitySchemaSectionDefinition as a6, type EntityStructuredSection as a7, type ContinuityIncidentRecord as a8, type ContinuityIncidentCloseInput as a9, type CodingContext as aA, type DreamsStatusResult as aB, type ScopeProfileConfig as aC, type ScopeProfileLayerId as aD, type ScopeProfilePromotionTarget as aE, type WearableConversation as aF, type WearableSourceSettings as aG, type WearableNativeMemory as aH, type WearableMemoryMode as aI, type WearableSourceConnector as aJ, type WearablesConfig as aK, type WearableSyncSummary as aL, type WearableSourceStatus as aM, type WearableDayTranscript as aN, type WearableCorrectionRule as aO, type RecallSectionConfig as aP, type BootstrapOptions as aQ, type BootstrapResult as aR, type ConsolidationObservation as aS, type CodingModeConfig as aT, type CodingKnowledgeConfig as aU, type WearableCleanupSettings as aV, type WearableFusionConfig as aW, type WearableDayTranscriptMeta as aX, type BriefingConfig as aY, type BriefingOpenCommitment as aZ, type BriefingWindow as a_, type ContinuityIncidentOpenInput as aa, type ContinuityImprovementLoop as ab, type ContinuityLoopReviewInput as ac, type ContinuityLoopUpsertInput as ad, type ImportanceScore as ae, type MemoryIntent as af, type MemoryActionEligibilityContext as ag, type MemoryActionPolicyResult as ah, type MemoryLifecycleEventType as ai, type MemoryLifecycleStateSummary as aj, type ModelProviderConfig as ak, type NativeKnowledgeConfig as al, type ProvenanceConfig as am, type RetrievalTier as an, type SignalScanResult as ao, type TopicScore as ap, type QmdSearchExplain as aq, type MemoryLink as ar, type BufferState as as, type MetaState as at, type FileHygieneConfig as au, type EntityRelationship as av, type EntityActivityEntry as aw, type AccessTrackingEntry as ax, type MemorySummary as ay, type EntityTimelineEntry as az, type RecallPlanMode as b, type ModelDefinitionConfig as b$, DEFAULT_RECALL_DISCLOSURE as b0, type ExtractedFact as b1, type MemoryActionEligibilitySource as b2, type MemoryObservation as b3, type MemoryScope as b4, RECALL_DISCLOSURE_LEVELS as b5, type WearableAuthCheck as b6, type WearableFetchOptions as b7, type WearableFetchPage as b8, type WearableNativeMemoryPage as b9, type DreamingConfig as bA, type DreamingNarrativePromptStyle as bB, type DreamsDeepSleepConfig as bC, type DreamsLightSleepConfig as bD, type DreamsPhaseStatus as bE, type DreamsPhasesConfig as bF, type DreamsRemConfig as bG, type EngramTraceEvent as bH, type ExtractedProcedureStep as bI, type ExtractedQuestion as bJ, type ExtractedReasoningTrace as bK, type ExtractedReasoningTraceStep as bL, type ExtractedRelationship as bM, type ExtractionPassSource as bN, type GitHubLiveConnectorConfig as bO, type GmailLiveConnectorConfig as bP, type GoogleDriveLiveConnectorConfig as bQ, type HeartbeatConfig as bR, type HeartbeatDetectionMode as bS, type LlmTraceCallback as bT, type LlmTraceEvent as bU, type MemoryActionOutcome as bV, type MemoryActionPolicyDecision as bW, type MemoryActionStatus as bX, type MemoryLinkType as bY, type MemoryOsPresetName as bZ, type ModelApi as b_, type WearableTranscriptSegment as ba, isRecallDisclosure as bb, type AgentAccessHttpConfig as bc, type AgentDefaultsConfig as bd, type AgentPersona as be, type BehaviorLoopAdjustment as bf, type BehaviorSignalDirection as bg, type BehaviorSignalType as bh, type BriefingCalendarSourceError as bi, type BufferEntryState as bj, type CaptureMode as bk, type ChatConfig as bl, type CodexCliReasoningEffort as bm, type CodexCompactionFlushMode as bn, type CodexConnectorConfig as bo, type CompressionGuidelineActivationState as bp, type CompressionGuidelineOptimizerSourceWindow as bq, type ConfidenceTier as br, type ConsolidationAction as bs, type ConsolidationItem as bt, type ContinuityIncidentState as bu, type ContinuityLoopCadence as bv, type ContinuityLoopStatus as bw, type ContradictionScanConfig as bx, type CronConversationRecallMode as by, type CronRecallMode as bz, type ActiveRecallQueryMode as c, type ModelProviderAuthMode as c0, type NamespacePolicy as c1, type NativeKnowledgeFolderRuleConfig as c2, type NativeKnowledgeObsidianVaultConfig as c3, type NativeKnowledgeOpenClawWorkspaceConfig as c4, type NotionLiveConnectorConfig as c5, type PrincipalFromSessionKeyMode as c6, type PrincipalRule as c7, type ProceduralConfig as c8, type QuestionEntry as c9, type ReasoningEffort as ca, type RecallPipelineConfig as cb, type RecallTraceEvent as cc, type RelevanceFeedback as cd, SPECULATIVE_TTL_DAYS as ce, type ScopeProfileAutoPromoteConfig as cf, type ScopeProfileTeamProjectConfig as cg, type ScopeTeamConfig as ch, type ScoredEntity as ci, type SemanticChunkingConfigShape as cj, type SignalLevel as ck, type SlotBehaviorConfig as cl, type SlotMismatchMode as cm, type TriggerMode as cn, confidenceTier as co, type ActiveRecallPromptStyle as d, type ActiveRecallThinking as e, type ActiveRecallModelFallbackPolicy as f, type BehaviorLoopPolicyState as g, type BriefingSections as h, type BriefingFollowup as i, type BriefingFocus as j, type CalendarEvent as k, type BriefingActiveThread as l, type BriefingResult as m, type BriefingRecentEntity as n, type BufferTurn as o, type MemoryFrontmatter as p, type Checkpoint as q, type AgentPersonaModelConfig as r, type RecallTierExplain as s, type MemoryCategory as t, type MemoryStatus as u, type MemoryProjectionCurrentState as v, type MemoryLifecycleEvent as w, type ExtractionResult as x, type ConsolidationResult as y, type DaySummaryResult as z };
|
package/dist/types.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import './types-gb_SNtjR.js';
|
|
2
2
|
import './message-parts/index.js';
|
|
3
|
-
export {
|
|
3
|
+
export { ax as AccessTrackingEntry, A as ActiveRecallChatType, f as ActiveRecallModelFallbackPolicy, d as ActiveRecallPromptStyle, c as ActiveRecallQueryMode, e as ActiveRecallThinking, Z as AgentAccessAuthToken, bc as AgentAccessHttpConfig, bd as AgentDefaultsConfig, be as AgentPersona, r as AgentPersonaModelConfig, bf as BehaviorLoopAdjustment, g as BehaviorLoopPolicyState, bg as BehaviorSignalDirection, B as BehaviorSignalEvent, bh as BehaviorSignalType, aQ as BootstrapOptions, aR as BootstrapResult, l as BriefingActiveThread, bi as BriefingCalendarSourceError, aY as BriefingConfig, j as BriefingFocus, i as BriefingFollowup, aZ as BriefingOpenCommitment, n as BriefingRecentEntity, m as BriefingResult, h as BriefingSections, a_ as BriefingWindow, bj as BufferEntryState, as as BufferState, X as BufferSurpriseEvent, o as BufferTurn, k as CalendarEvent, C as CalendarSource, bk as CaptureMode, bl as ChatConfig, q as Checkpoint, bm as CodexCliReasoningEffort, bn as CodexCompactionFlushMode, a$ as CodexCompatConfig, bo as CodexConnectorConfig, aA as CodingContext, aU as CodingKnowledgeConfig, aT as CodingModeConfig, bp as CompressionGuidelineActivationState, $ as CompressionGuidelineOptimizerActionSummary, _ as CompressionGuidelineOptimizerEventCounts, a0 as CompressionGuidelineOptimizerRuleUpdate, bq as CompressionGuidelineOptimizerSourceWindow, a3 as CompressionGuidelineOptimizerState, br as ConfidenceTier, bs as ConsolidationAction, bt as ConsolidationItem, aS as ConsolidationObservation, y as ConsolidationResult, ab as ContinuityImprovementLoop, a9 as ContinuityIncidentCloseInput, aa as ContinuityIncidentOpenInput, a8 as ContinuityIncidentRecord, bu as ContinuityIncidentState, bv as ContinuityLoopCadence, ac as ContinuityLoopReviewInput, bw as ContinuityLoopStatus, ad as ContinuityLoopUpsertInput, bx as ContradictionScanConfig, N as ConversationThread, by as CronConversationRecallMode, bz as CronRecallMode, b0 as DEFAULT_RECALL_DISCLOSURE, z as DaySummaryResult, bA as DreamingConfig, bB as DreamingNarrativePromptStyle, bC as DreamsDeepSleepConfig, bD as DreamsLightSleepConfig, D as DreamsPhase, bE as DreamsPhaseStatus, bF as DreamsPhasesConfig, bG as DreamsRemConfig, a as DreamsRunResult, aB as DreamsStatusResult, bH as EngramTraceEvent, aw as EntityActivityEntry, E as EntityFile, a4 as EntityMention, av as EntityRelationship, a5 as EntitySchemaDefinition, a6 as EntitySchemaSectionDefinition, a7 as EntityStructuredSection, az as EntityTimelineEntry, b1 as ExtractedFact, bI as ExtractedProcedureStep, bJ as ExtractedQuestion, bK as ExtractedReasoningTrace, bL as ExtractedReasoningTraceStep, bM as ExtractedRelationship, bN as ExtractionPassSource, x as ExtractionResult, F as FaithfulnessFrontmatter, au as FileHygieneConfig, G as GatewayConfig, bO as GitHubLiveConnectorConfig, bP as GmailLiveConnectorConfig, bQ as GoogleDriveLiveConnectorConfig, bR as HeartbeatConfig, bS as HeartbeatDetectionMode, H as HourlySummary, I as IdentityInjectionMode, W as ImportanceLevel, ae as ImportanceScore, O as LifecycleState, L as LiveConnectorsConfig, bT as LlmTraceCallback, bU as LlmTraceEvent, ag as MemoryActionEligibilityContext, b2 as MemoryActionEligibilitySource, a2 as MemoryActionEvent, bV as MemoryActionOutcome, bW as MemoryActionPolicyDecision, ah as MemoryActionPolicyResult, bX as MemoryActionStatus, a1 as MemoryActionType, t as MemoryCategory, M as MemoryFile, p as MemoryFrontmatter, af as MemoryIntent, w as MemoryLifecycleEvent, ai as MemoryLifecycleEventType, aj as MemoryLifecycleStateSummary, ar as MemoryLink, bY as MemoryLinkType, b3 as MemoryObservation, bZ as MemoryOsPresetName, v as MemoryProjectionCurrentState, b4 as MemoryScope, u as MemoryStatus, ay as MemorySummary, at as MetaState, b_ as ModelApi, b$ as ModelDefinitionConfig, c0 as ModelProviderAuthMode, ak as ModelProviderConfig, c1 as NamespacePolicy, al as NativeKnowledgeConfig, c2 as NativeKnowledgeFolderRuleConfig, c3 as NativeKnowledgeObsidianVaultConfig, c4 as NativeKnowledgeOpenClawWorkspaceConfig, c5 as NotionLiveConnectorConfig, P as PluginConfig, U as PolicyClass, c6 as PrincipalFromSessionKeyMode, c7 as PrincipalRule, c8 as ProceduralConfig, am as ProvenanceConfig, J as ProvenanceSource, aq as QmdSearchExplain, Q as QmdSearchResult, c9 as QuestionEntry, b5 as RECALL_DISCLOSURE_LEVELS, ca as ReasoningEffort, R as RecallDisclosure, cb as RecallPipelineConfig, b as RecallPlanMode, aP as RecallSectionConfig, s as RecallTierExplain, cc as RecallTraceEvent, cd as RelevanceFeedback, an as RetrievalTier, ce as SPECULATIVE_TTL_DAYS, cf as ScopeProfileAutoPromoteConfig, aC as ScopeProfileConfig, aD as ScopeProfileLayerId, aE as ScopeProfilePromotionTarget, cg as ScopeProfileTeamProjectConfig, ch as ScopeTeamConfig, ci as ScoredEntity, Y as SecretRef, cj as SemanticChunkingConfigShape, S as SessionObserverBandConfig, ck as SignalLevel, ao as SignalScanResult, cl as SlotBehaviorConfig, cm as SlotMismatchMode, ap as TopicScore, T as TranscriptEntry, cn as TriggerMode, K as TrustWeights, V as VerificationState, co as confidenceTier, bb as isRecallDisclosure } from './types-CGgcNWCG.js';
|
package/dist/verified-recall.js
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import {
|
|
2
2
|
compareVerifiedEpisodeResults,
|
|
3
3
|
searchVerifiedEpisodes
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-SIRPLF54.js";
|
|
5
5
|
import "./chunk-2A3OXAP2.js";
|
|
6
6
|
import "./chunk-ZBJMUXZH.js";
|
|
7
|
-
import "./chunk-
|
|
8
|
-
import "./chunk-
|
|
7
|
+
import "./chunk-SVOHGUMI.js";
|
|
8
|
+
import "./chunk-B3ABVQ36.js";
|
|
9
9
|
import "./chunk-L2B3EE7B.js";
|
|
10
10
|
import "./chunk-5UZXUTVO.js";
|
|
11
|
-
import "./chunk-
|
|
11
|
+
import "./chunk-VSMRDBFT.js";
|
|
12
12
|
import "./chunk-EHK6KZHK.js";
|
|
13
13
|
import "./chunk-6CIAGZ6X.js";
|
|
14
14
|
import "./chunk-J6A3CX5N.js";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@remnic/core",
|
|
3
|
-
"version": "9.
|
|
3
|
+
"version": "9.6.1",
|
|
4
4
|
"description": "Framework-agnostic Remnic memory engine — orchestrator, storage, extraction, search, trust zones",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -3000,7 +3000,7 @@
|
|
|
3000
3000
|
"core"
|
|
3001
3001
|
],
|
|
3002
3002
|
"peerDependencies": {
|
|
3003
|
-
"@remnic/coding-graph": "^9.
|
|
3003
|
+
"@remnic/coding-graph": "^9.6.1"
|
|
3004
3004
|
},
|
|
3005
3005
|
"peerDependenciesMeta": {
|
|
3006
3006
|
"@remnic/coding-graph": {
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
import assert from "node:assert/strict";
|
|
2
|
+
import { test } from "node:test";
|
|
3
|
+
|
|
4
|
+
import {
|
|
5
|
+
registerCli,
|
|
6
|
+
type CliApi,
|
|
7
|
+
type CliCommand,
|
|
8
|
+
type CliProgram,
|
|
9
|
+
} from "./cli.js";
|
|
10
|
+
import type { WearablesService } from "./wearables/service.js";
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Host-CLI registration test for the wearables `fuse`/`fused` subcommands.
|
|
14
|
+
*
|
|
15
|
+
* The shared runner (`runWearablesCliCommand`) already handles fuse/fused, but
|
|
16
|
+
* the host CLI must ALSO register forwarders under `wearablesCmd` — otherwise
|
|
17
|
+
* commander rejects `remnic wearables fuse <date>` / `remnic wearables fused
|
|
18
|
+
* <date>` as unknown subcommands before the runner is ever reached (issue
|
|
19
|
+
* #1849). This drives `registerCli` with a recording program mock plus a stub
|
|
20
|
+
* orchestrator and asserts both that the subcommands are registered and that
|
|
21
|
+
* their actions dispatch into the runner (which calls the wearables service).
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
/** Recording commander stand-in: records the command tree + action callbacks. */
|
|
25
|
+
class RecCmd implements CliCommand {
|
|
26
|
+
readonly children = new Map<string, RecCmd>();
|
|
27
|
+
readonly options: string[] = [];
|
|
28
|
+
readonly args: string[] = [];
|
|
29
|
+
actionFn?: (...args: unknown[]) => unknown;
|
|
30
|
+
constructor(readonly rawName: string) {}
|
|
31
|
+
description(): CliCommand {
|
|
32
|
+
return this;
|
|
33
|
+
}
|
|
34
|
+
option(flags: string): CliCommand {
|
|
35
|
+
this.options.push(flags);
|
|
36
|
+
return this;
|
|
37
|
+
}
|
|
38
|
+
requiredOption(flags: string): CliCommand {
|
|
39
|
+
this.options.push(flags);
|
|
40
|
+
return this;
|
|
41
|
+
}
|
|
42
|
+
argument(name: string): CliCommand {
|
|
43
|
+
this.args.push(name);
|
|
44
|
+
return this;
|
|
45
|
+
}
|
|
46
|
+
action(fn: (...args: unknown[]) => Promise<void> | void): CliCommand {
|
|
47
|
+
this.actionFn = fn;
|
|
48
|
+
return this;
|
|
49
|
+
}
|
|
50
|
+
command(name: string): CliCommand {
|
|
51
|
+
const key = name.split(/\s+/)[0]!;
|
|
52
|
+
const child = new RecCmd(name);
|
|
53
|
+
this.children.set(key, child);
|
|
54
|
+
return child;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
class RecProgram implements CliProgram {
|
|
59
|
+
readonly root = new RecCmd("__program__");
|
|
60
|
+
command(name: string): CliCommand {
|
|
61
|
+
return this.root.command(name);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Deterministic orchestrator stub. registerCli only reads `config.*` while
|
|
67
|
+
* building the command tree (feature flags gate subcommand registration;
|
|
68
|
+
* memoryDir is an option default), so every accessed field returns a real
|
|
69
|
+
* primitive — no Proxy ever reaches a string/number call site. The wearables
|
|
70
|
+
* forwarder is the only action that touches the stub, via getWearablesService.
|
|
71
|
+
*/
|
|
72
|
+
function makeOrchestratorStub(
|
|
73
|
+
service: WearablesService,
|
|
74
|
+
): Parameters<typeof registerCli>[1] {
|
|
75
|
+
const config = new Proxy(
|
|
76
|
+
{ memoryDir: "/tmp/cli-wearables-fuse-test" } as Record<string, unknown>,
|
|
77
|
+
{
|
|
78
|
+
get(target, prop) {
|
|
79
|
+
if (typeof prop === "symbol") return undefined;
|
|
80
|
+
if (prop in target) return target[prop as string];
|
|
81
|
+
const key = prop as string;
|
|
82
|
+
if (
|
|
83
|
+
key.endsWith("WindowMs") ||
|
|
84
|
+
key.endsWith("SoftLimit") ||
|
|
85
|
+
key.endsWith("HardLimit")
|
|
86
|
+
) {
|
|
87
|
+
return 0;
|
|
88
|
+
}
|
|
89
|
+
return true; // feature flags -> enabled (every subcommand registers)
|
|
90
|
+
},
|
|
91
|
+
},
|
|
92
|
+
);
|
|
93
|
+
return { config, getWearablesService: () => service } as unknown as Parameters<
|
|
94
|
+
typeof registerCli
|
|
95
|
+
>[1];
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/** Spy service recording fuseDay/fusedConversations dispatch. */
|
|
99
|
+
function spyService(): WearablesService & {
|
|
100
|
+
calls: Array<[string, string]>;
|
|
101
|
+
} {
|
|
102
|
+
const calls: Array<[string, string]> = [];
|
|
103
|
+
const svc = {
|
|
104
|
+
fuseDay: async (date: string) => {
|
|
105
|
+
calls.push(["fuseDay", date]);
|
|
106
|
+
return {
|
|
107
|
+
date,
|
|
108
|
+
sources: ["limitless", "bee"],
|
|
109
|
+
conversationCount: 2,
|
|
110
|
+
contentHash: "h",
|
|
111
|
+
written: true,
|
|
112
|
+
};
|
|
113
|
+
},
|
|
114
|
+
fusedConversations: async (date: string) => {
|
|
115
|
+
calls.push(["fusedConversations", date]);
|
|
116
|
+
return [];
|
|
117
|
+
},
|
|
118
|
+
};
|
|
119
|
+
return { ...svc, calls } as unknown as WearablesService & {
|
|
120
|
+
calls: Array<[string, string]>;
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
function buildRegisteredTree(): {
|
|
125
|
+
program: RecProgram;
|
|
126
|
+
wearables: RecCmd;
|
|
127
|
+
service: WearablesService & { calls: Array<[string, string]> };
|
|
128
|
+
} {
|
|
129
|
+
const program = new RecProgram();
|
|
130
|
+
const service = spyService();
|
|
131
|
+
const api: CliApi = {
|
|
132
|
+
registerCli: (handler) => handler({ program }),
|
|
133
|
+
};
|
|
134
|
+
registerCli(api, makeOrchestratorStub(service));
|
|
135
|
+
const wearables = program.root.children.get("engram")?.children.get("wearables");
|
|
136
|
+
assert.ok(wearables, "wearables command registered under engram");
|
|
137
|
+
return { program, wearables: wearables!, service };
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
test("wearablesCmd registers fuse and fused subcommands (#1849)", () => {
|
|
141
|
+
const { wearables } = buildRegisteredTree();
|
|
142
|
+
// fuse/fused must be present alongside the previously-registered forwarders.
|
|
143
|
+
const subcommands = [...wearables.children.keys()];
|
|
144
|
+
for (const expected of [
|
|
145
|
+
"status",
|
|
146
|
+
"check",
|
|
147
|
+
"sync",
|
|
148
|
+
"transcript",
|
|
149
|
+
"search",
|
|
150
|
+
"memories",
|
|
151
|
+
"speakers",
|
|
152
|
+
"corrections",
|
|
153
|
+
"fuse",
|
|
154
|
+
"fused",
|
|
155
|
+
]) {
|
|
156
|
+
assert.ok(
|
|
157
|
+
subcommands.includes(expected),
|
|
158
|
+
`wearables ${expected} subcommand registered`,
|
|
159
|
+
);
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
const fuse = wearables.children.get("fuse")!;
|
|
163
|
+
assert.ok(
|
|
164
|
+
fuse.rawName.includes("<date>"),
|
|
165
|
+
"fuse declares a <date> argument",
|
|
166
|
+
);
|
|
167
|
+
assert.ok(fuse.options.includes("--json"), "fuse forwards --json");
|
|
168
|
+
|
|
169
|
+
const fused = wearables.children.get("fused")!;
|
|
170
|
+
assert.ok(
|
|
171
|
+
fused.rawName.includes("<date>"),
|
|
172
|
+
"fused declares a <date> argument",
|
|
173
|
+
);
|
|
174
|
+
assert.ok(fused.options.includes("--json"), "fused forwards --json");
|
|
175
|
+
});
|
|
176
|
+
|
|
177
|
+
test("wearables fuse/fused forwarders dispatch to the runner, not rejected (#1849)", async () => {
|
|
178
|
+
const { wearables, service } = buildRegisteredTree();
|
|
179
|
+
const fuse = wearables.children.get("fuse")!;
|
|
180
|
+
const fused = wearables.children.get("fused")!;
|
|
181
|
+
|
|
182
|
+
// commander passes the <date> positional as arg[0] and the options object
|
|
183
|
+
// as the trailing arg — the same shape the `search <query>` forwarder uses.
|
|
184
|
+
await fuse.actionFn!("2026-06-10", { json: false });
|
|
185
|
+
assert.deepEqual(
|
|
186
|
+
service.calls[0],
|
|
187
|
+
["fuseDay", "2026-06-10"],
|
|
188
|
+
"wearables fuse <date> dispatches into the runner -> service.fuseDay",
|
|
189
|
+
);
|
|
190
|
+
|
|
191
|
+
await fused.actionFn!("2026-06-10", { json: true });
|
|
192
|
+
assert.deepEqual(
|
|
193
|
+
service.calls[1],
|
|
194
|
+
["fusedConversations", "2026-06-10"],
|
|
195
|
+
"wearables fused <date> dispatches into the runner -> service.fusedConversations",
|
|
196
|
+
);
|
|
197
|
+
});
|
package/src/cli.ts
CHANGED
|
@@ -5376,6 +5376,31 @@ export function registerCli(
|
|
|
5376
5376
|
.action(async (...args: unknown[]) =>
|
|
5377
5377
|
forwardWearables(["corrections", "remove", String(args[0] ?? "")]),
|
|
5378
5378
|
);
|
|
5379
|
+
wearablesCmd
|
|
5380
|
+
.command("fuse <date>")
|
|
5381
|
+
.description("Fuse (cross-source merge) wearable transcripts for a day")
|
|
5382
|
+
.option("--json", "JSON output")
|
|
5383
|
+
.action(async (...args: unknown[]) => {
|
|
5384
|
+
const options = (args[1] ?? {}) as Record<string, unknown>;
|
|
5385
|
+
await forwardWearables([
|
|
5386
|
+
"fuse",
|
|
5387
|
+
String(args[0] ?? ""),
|
|
5388
|
+
...(options.json === true ? ["--json"] : []),
|
|
5389
|
+
]);
|
|
5390
|
+
});
|
|
5391
|
+
|
|
5392
|
+
wearablesCmd
|
|
5393
|
+
.command("fused <date>")
|
|
5394
|
+
.description("List fused conversations for a day")
|
|
5395
|
+
.option("--json", "JSON output")
|
|
5396
|
+
.action(async (...args: unknown[]) => {
|
|
5397
|
+
const options = (args[1] ?? {}) as Record<string, unknown>;
|
|
5398
|
+
await forwardWearables([
|
|
5399
|
+
"fused",
|
|
5400
|
+
String(args[0] ?? ""),
|
|
5401
|
+
...(options.json === true ? ["--json"] : []),
|
|
5402
|
+
]);
|
|
5403
|
+
});
|
|
5379
5404
|
}
|
|
5380
5405
|
|
|
5381
5406
|
cmd
|
package/src/storage.ts
CHANGED
|
@@ -23,6 +23,7 @@ import { serializeProvenanceFields, parseProvenanceSources, parseProvenanceTag,
|
|
|
23
23
|
import { serializeFaithfulnessFields, parseFaithfulnessField } from "./extraction-faithfulness.js";
|
|
24
24
|
import { createVersion as createPageVersion, type VersioningConfig, type VersionTrigger } from "./page-versioning.js";
|
|
25
25
|
import { isValidTranscriptDate, WEARABLES_DIR_NAME } from "./wearables/day-store.js";
|
|
26
|
+
import { FusionArtifactStore } from "./wearables/fusion/index.js";
|
|
26
27
|
import {
|
|
27
28
|
SecureStoreLockedError,
|
|
28
29
|
MAGIC_HEADER_SIZE,
|
|
@@ -2709,6 +2710,21 @@ export class StorageManager {
|
|
|
2709
2710
|
);
|
|
2710
2711
|
}
|
|
2711
2712
|
|
|
2713
|
+
private _fusionStore?: FusionArtifactStore;
|
|
2714
|
+
|
|
2715
|
+
/** Derived fusion-day IO; file IO lives in wearables/fusion (#1810). */
|
|
2716
|
+
fusionArtifactStore(): FusionArtifactStore {
|
|
2717
|
+
if (this._fusionStore) return this._fusionStore;
|
|
2718
|
+
return (this._fusionStore = new FusionArtifactStore(this.wearablesDir, this.baseDir, {
|
|
2719
|
+
writeFile: (p, c) => this.writeStorageSecureFile(p, c),
|
|
2720
|
+
readFile: (p) => readMaybeEncryptedFile(p, this._secureStoreKey, this.baseDir),
|
|
2721
|
+
readDir: (d) => readdir(d),
|
|
2722
|
+
deleteFile: (p) => unlink(p),
|
|
2723
|
+
realpath: (p) => realpath(p),
|
|
2724
|
+
lstat: (p) => lstat(p).then((st) => ({ isSymbolicLink: st.isSymbolicLink() })),
|
|
2725
|
+
}));
|
|
2726
|
+
}
|
|
2727
|
+
|
|
2712
2728
|
/**
|
|
2713
2729
|
* Locate a wearable-sourced memory by exact (trimmed) content,
|
|
2714
2730
|
* ignoring the "[Attributes: ...]" suffix writeMemory appends for
|
|
@@ -198,3 +198,105 @@ test("backend faults propagate instead of being swallowed as exit codes", async
|
|
|
198
198
|
/disk exploded/,
|
|
199
199
|
);
|
|
200
200
|
});
|
|
201
|
+
|
|
202
|
+
test("fuse command requires a date and renders the fuseDay result", async () => {
|
|
203
|
+
const { io, out, err } = makeIo();
|
|
204
|
+
const service = stubService({
|
|
205
|
+
fuseDay: async () => ({
|
|
206
|
+
date: "2026-06-10",
|
|
207
|
+
sources: ["bee", "limitless"],
|
|
208
|
+
conversationCount: 2,
|
|
209
|
+
contentHash: "abc123",
|
|
210
|
+
written: true,
|
|
211
|
+
}),
|
|
212
|
+
});
|
|
213
|
+
assert.equal(await runWearablesCliCommand(service, ["fuse"], io), 1);
|
|
214
|
+
assert.match(err.join(""), /fuse requires a date/);
|
|
215
|
+
|
|
216
|
+
// Success path needs its own captured stdout.
|
|
217
|
+
const okIo = makeIo();
|
|
218
|
+
assert.equal(
|
|
219
|
+
await runWearablesCliCommand(service, ["fuse", "2026-06-10"], okIo.io),
|
|
220
|
+
0,
|
|
221
|
+
);
|
|
222
|
+
assert.match(
|
|
223
|
+
okIo.out.join(""),
|
|
224
|
+
/Fused 2026-06-10: 2 conversations from 2 sources/,
|
|
225
|
+
);
|
|
226
|
+
});
|
|
227
|
+
|
|
228
|
+
test("fuse command prints a distinct skip line when fusion is skipped, not '(unchanged)'", async () => {
|
|
229
|
+
// written:false has two meanings (issue #1849): a skip (e.g. conflicting
|
|
230
|
+
// source timezones, which also clears any existing fused artifact) must
|
|
231
|
+
// NOT be mislabeled as an idempotent "(unchanged)" no-op.
|
|
232
|
+
const { io, out } = makeIo();
|
|
233
|
+
const service = stubService({
|
|
234
|
+
fuseDay: async () => ({
|
|
235
|
+
date: "2026-06-10",
|
|
236
|
+
sources: [],
|
|
237
|
+
conversationCount: 0,
|
|
238
|
+
contentHash: "",
|
|
239
|
+
written: false,
|
|
240
|
+
skipped: { reason: "conflicting-timezones" },
|
|
241
|
+
}),
|
|
242
|
+
});
|
|
243
|
+
assert.equal(await runWearablesCliCommand(service, ["fuse", "2026-06-10"], io), 0);
|
|
244
|
+
const text = out.join("");
|
|
245
|
+
assert.match(text, /Skipped fusing 2026-06-10: conflicting-timezones/);
|
|
246
|
+
assert.match(text, /cleared/);
|
|
247
|
+
assert.doesNotMatch(text, /unchanged/, "a skip must not look idempotent");
|
|
248
|
+
});
|
|
249
|
+
|
|
250
|
+
test("fuse command keeps '(unchanged)' for written:false without a skip reason", async () => {
|
|
251
|
+
const { io, out } = makeIo();
|
|
252
|
+
const service = stubService({
|
|
253
|
+
fuseDay: async () => ({
|
|
254
|
+
date: "2026-06-10",
|
|
255
|
+
sources: ["bee", "limitless"],
|
|
256
|
+
conversationCount: 2,
|
|
257
|
+
contentHash: "abc123",
|
|
258
|
+
written: false,
|
|
259
|
+
}),
|
|
260
|
+
});
|
|
261
|
+
assert.equal(await runWearablesCliCommand(service, ["fuse", "2026-06-10"], io), 0);
|
|
262
|
+
assert.match(out.join(""), /\(unchanged\)/);
|
|
263
|
+
});
|
|
264
|
+
|
|
265
|
+
test("fused command lists conversations and surfaces disagreements (--json)", async () => {
|
|
266
|
+
const { io, out } = makeIo();
|
|
267
|
+
const service = stubService({
|
|
268
|
+
fusedConversations: async () => [
|
|
269
|
+
{
|
|
270
|
+
id: "fusion-1",
|
|
271
|
+
date: "2026-06-10",
|
|
272
|
+
startIso: "2026-06-10T09:00:00.000Z",
|
|
273
|
+
sources: ["bee", "limitless"],
|
|
274
|
+
speakers: [],
|
|
275
|
+
segments: [
|
|
276
|
+
{ speaker: "Me (you)", isSelf: true, text: "hi", confidence: 0.8, provenance: { source: "limitless", conversationId: "c1", sourceTrust: 0.8, reason: "only-source", alternatives: [] } },
|
|
277
|
+
],
|
|
278
|
+
disagreements: [
|
|
279
|
+
{ kind: "asr-text", subject: "2026-06-10T09:00:00.000Z", candidates: [{ source: "bee", value: "x" }, { source: "limitless", value: "y" }] },
|
|
280
|
+
],
|
|
281
|
+
provenance: { contributions: [], proximityGapMs: 300000, windowToleranceMs: 30000, method: "time-proximity" },
|
|
282
|
+
},
|
|
283
|
+
],
|
|
284
|
+
});
|
|
285
|
+
assert.equal(await runWearablesCliCommand(service, ["fused", "2026-06-10", "--json"], io), 0);
|
|
286
|
+
const parsed = JSON.parse(out.join(""));
|
|
287
|
+
assert.equal(parsed.date, "2026-06-10");
|
|
288
|
+
assert.equal(parsed.conversations.length, 1);
|
|
289
|
+
assert.equal(parsed.conversations[0].disagreements.length, 1);
|
|
290
|
+
|
|
291
|
+
// Plain-text path surfaces the disagreement count.
|
|
292
|
+
const text = makeIo();
|
|
293
|
+
assert.equal(await runWearablesCliCommand(service, ["fused", "2026-06-10"], text.io), 0);
|
|
294
|
+
assert.match(text.out.join(""), /disagreement \[asr-text\]/);
|
|
295
|
+
});
|
|
296
|
+
|
|
297
|
+
test("fused command reports nothing-fused gracefully", async () => {
|
|
298
|
+
const { io, out } = makeIo();
|
|
299
|
+
const service = stubService({ fusedConversations: async () => [] });
|
|
300
|
+
assert.equal(await runWearablesCliCommand(service, ["fused", "2026-06-10"], io), 0);
|
|
301
|
+
assert.match(out.join(""), /No fused conversations for 2026-06-10/);
|
|
302
|
+
});
|