@remnic/core 9.3.739 → 9.3.741
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-boundary.js +13 -13
- package/dist/access-cli.js +35 -35
- package/dist/access-http.js +18 -18
- package/dist/access-mcp.js +17 -17
- package/dist/access-operations-batch.js +15 -15
- package/dist/access-operations.js +16 -16
- package/dist/access-service.js +12 -12
- package/dist/active-memory-bridge.js +3 -3
- package/dist/briefing.js +2 -2
- package/dist/buffer.js +2 -2
- package/dist/capabilities.d.ts +97 -1
- package/dist/capabilities.js +7 -1
- package/dist/causal-consolidation.js +4 -3
- package/dist/causal-consolidation.js.map +1 -1
- package/dist/{chunk-IFCM6OLK.js → chunk-3TUDKDTQ.js} +7 -7
- package/dist/{chunk-A7INTIC5.js → chunk-4J53ZVPQ.js} +3 -3
- package/dist/{chunk-XYUFGHUW.js → chunk-56F6EAQ6.js} +2 -2
- package/dist/{chunk-F6OEXJQQ.js → chunk-6XG3NQRC.js} +2 -2
- package/dist/{chunk-24ZLC5QN.js → chunk-7N7S2RKF.js} +2 -2
- package/dist/{chunk-Y5OOHER4.js → chunk-7Y5KKMIP.js} +12 -11
- package/dist/chunk-7Y5KKMIP.js.map +1 -0
- package/dist/{chunk-VRBBZH4U.js → chunk-AX4TRSRE.js} +3 -3
- package/dist/{chunk-66RZ4EIT.js → chunk-BE6NEQLF.js} +3 -3
- package/dist/{chunk-YF2MMBKA.js → chunk-BJPL5WAL.js} +3 -3
- package/dist/{chunk-EO5QWINU.js → chunk-C3Z5YJSM.js} +5 -2
- package/dist/chunk-C3Z5YJSM.js.map +1 -0
- package/dist/{chunk-GEXI357K.js → chunk-C7C5WIIF.js} +2 -2
- package/dist/{chunk-L3TYGUTH.js → chunk-CMPXLMC3.js} +3 -3
- package/dist/{chunk-W2FBVBQ4.js → chunk-DBVBV2RF.js} +4 -4
- package/dist/{chunk-JQSP7YBJ.js → chunk-ELL5VYXC.js} +5 -4
- package/dist/chunk-ELL5VYXC.js.map +1 -0
- package/dist/{chunk-IQOEW5YV.js → chunk-FCQ7ZYCQ.js} +2 -2
- package/dist/{chunk-IIBFCZA7.js → chunk-FWXLKH2H.js} +3 -3
- package/dist/{chunk-RJBW4EOU.js → chunk-G7Q4D2G3.js} +74 -2
- package/dist/{chunk-RJBW4EOU.js.map → chunk-G7Q4D2G3.js.map} +1 -1
- package/dist/{chunk-WVAEIKUY.js → chunk-GPX5E36D.js} +5 -4
- package/dist/chunk-GPX5E36D.js.map +1 -0
- package/dist/{chunk-23PLOBWT.js → chunk-H3WSZWHK.js} +22 -20
- package/dist/chunk-H3WSZWHK.js.map +1 -0
- package/dist/{chunk-Q6BAA57B.js → chunk-JFCS6PQU.js} +2 -2
- package/dist/chunk-JFCS6PQU.js.map +1 -0
- package/dist/{chunk-CKHPUOAP.js → chunk-K2N6WIZM.js} +3 -3
- package/dist/{chunk-BHJAMSVC.js → chunk-LD6A7XG5.js} +7 -7
- package/dist/{chunk-AKKFHN3I.js → chunk-M4WI23X3.js} +2 -2
- package/dist/{chunk-N2O23WYA.js → chunk-M5KLYHHI.js} +2 -2
- package/dist/{chunk-TNLXCSXV.js → chunk-O4IWVWSW.js} +5 -4
- package/dist/chunk-O4IWVWSW.js.map +1 -0
- package/dist/{chunk-OQQRWPFZ.js → chunk-OS5RKJOH.js} +2 -2
- package/dist/{chunk-MAU7DFCJ.js → chunk-OT5K26NG.js} +5 -4
- package/dist/chunk-OT5K26NG.js.map +1 -0
- package/dist/{chunk-DS3FZ7GS.js → chunk-OUSOMUFV.js} +2 -2
- package/dist/{chunk-7B7IPPN5.js → chunk-OVYBENIJ.js} +3 -3
- package/dist/{chunk-5RZOFIDL.js → chunk-PI4JHLDD.js} +6 -3
- package/dist/chunk-PI4JHLDD.js.map +1 -0
- package/dist/{chunk-EU543UDC.js → chunk-QCO2QFLZ.js} +7 -7
- package/dist/chunk-QCO2QFLZ.js.map +1 -0
- package/dist/{chunk-YXOXAQ5Y.js → chunk-TQQN64J2.js} +5 -4
- package/dist/chunk-TQQN64J2.js.map +1 -0
- package/dist/{chunk-WDJCZQB4.js → chunk-UGFPGWJB.js} +2 -2
- package/dist/{chunk-75PDC7VT.js → chunk-UOVDO6TC.js} +6 -5
- package/dist/chunk-UOVDO6TC.js.map +1 -0
- package/dist/{chunk-BVG2IZOB.js → chunk-USHVHI6J.js} +7 -6
- package/dist/chunk-USHVHI6J.js.map +1 -0
- package/dist/{chunk-56LP72AD.js → chunk-UYYSOMS2.js} +4 -4
- package/dist/{chunk-IEWUPZ75.js → chunk-VC7QELR6.js} +77 -74
- package/dist/chunk-VC7QELR6.js.map +1 -0
- package/dist/{chunk-XIQAOGAA.js → chunk-WGDE2TJP.js} +7 -6
- package/dist/chunk-WGDE2TJP.js.map +1 -0
- package/dist/{chunk-UFS7OXGL.js → chunk-WHEF76BQ.js} +5 -2
- package/dist/chunk-WHEF76BQ.js.map +1 -0
- package/dist/{chunk-QTJOORGN.js → chunk-WIMKOTNY.js} +2 -2
- package/dist/{chunk-GXTYEG7Q.js → chunk-WO22UEM3.js} +2 -2
- package/dist/{chunk-BHQQVUEQ.js → chunk-X5PMDVY4.js} +6 -5
- package/dist/{chunk-BHQQVUEQ.js.map → chunk-X5PMDVY4.js.map} +1 -1
- package/dist/{chunk-C53JDEH3.js → chunk-Y62QPRKV.js} +2 -2
- package/dist/{chunk-WFNH4UDF.js → chunk-Y6PNYJVO.js} +3 -3
- package/dist/{chunk-6YKIYQU7.js → chunk-YNHRWFAP.js} +5 -2
- package/dist/{chunk-6YKIYQU7.js.map → chunk-YNHRWFAP.js.map} +1 -1
- package/dist/cli.js +29 -29
- package/dist/compounding/engine.js +4 -4
- package/dist/connectors/codex-materialize-runner.js +2 -2
- package/dist/connectors/index.js +4 -3
- package/dist/contradiction/index.js +2 -2
- package/dist/{contradiction-scan-CWO3LIWV.js → contradiction-scan-UERKJESC.js} +3 -3
- package/dist/day-summary.js +2 -1
- package/dist/embedding-fallback.js +2 -2
- package/dist/entity-retrieval.js +3 -3
- package/dist/explicit-capture.js +2 -2
- package/dist/extraction.js +4 -4
- package/dist/{first-start-migration-5DXD3TF2.js → first-start-migration-GQ3UQNIL.js} +2 -2
- package/dist/index.js +45 -45
- package/dist/local-llm.js +2 -2
- package/dist/maintenance/memory-governance.js +2 -2
- package/dist/maintenance/rebuild-memory-lifecycle-ledger.js +2 -2
- package/dist/maintenance/rebuild-memory-projection.js +3 -3
- package/dist/namespaces/migrate.js +7 -7
- package/dist/namespaces/principal.js +2 -2
- package/dist/namespaces/search.js +4 -4
- package/dist/namespaces/storage.js +3 -3
- package/dist/operator-toolkit.js +13 -13
- package/dist/orchestration/compression-guideline-coordinator.js +2 -2
- package/dist/orchestration/maintenance.js +7 -7
- package/dist/orchestrator.js +29 -29
- package/dist/search/embed-helper.js +2 -2
- package/dist/search/factory.js +3 -3
- package/dist/search/index.js +3 -3
- package/dist/semantic-consolidation.js +4 -3
- package/dist/semantic-rule-promotion.js +2 -2
- package/dist/semantic-rule-verifier.js +2 -2
- package/dist/shared-context/manager.js +2 -1
- package/dist/storage.d.ts +1 -1
- package/dist/storage.js +1 -1
- package/dist/summarizer.js +3 -3
- package/dist/{tier-stats-QID73BBB.js → tier-stats-CSKL7BDG.js} +2 -2
- package/dist/verified-recall.js +2 -2
- package/package.json +2 -2
- package/src/access-service.ts +2 -1
- package/src/capabilities.test.ts +166 -0
- package/src/capabilities.ts +267 -0
- package/src/cli/research-status-commands.ts +2 -1
- package/src/cli.ts +3 -2
- package/src/compounding/engine.ts +2 -1
- package/src/connectors/codex-marketplace.ts +2 -1
- package/src/day-summary.ts +2 -1
- package/src/embedding-fallback.ts +2 -1
- package/src/extraction.ts +3 -2
- package/src/local-llm.ts +2 -1
- package/src/maintenance/namespace-maintenance-fanout.ts +2 -1
- package/src/maintenance/namespace-planner.ts +2 -1
- package/src/operator-toolkit.ts +1 -0
- package/src/orchestration/semantic-consolidation-coordinator.ts +3 -2
- package/src/orchestrator.ts +50 -46
- package/src/search/embed-helper.ts +2 -1
- package/src/search/factory.ts +2 -1
- package/src/semantic-consolidation.ts +2 -1
- package/src/shared-context/manager.ts +3 -2
- package/src/storage.ts +1 -1
- package/src/summarizer.ts +3 -2
- package/dist/chunk-23PLOBWT.js.map +0 -1
- package/dist/chunk-5RZOFIDL.js.map +0 -1
- package/dist/chunk-75PDC7VT.js.map +0 -1
- package/dist/chunk-BVG2IZOB.js.map +0 -1
- package/dist/chunk-EO5QWINU.js.map +0 -1
- package/dist/chunk-EU543UDC.js.map +0 -1
- package/dist/chunk-IEWUPZ75.js.map +0 -1
- package/dist/chunk-JQSP7YBJ.js.map +0 -1
- package/dist/chunk-MAU7DFCJ.js.map +0 -1
- package/dist/chunk-Q6BAA57B.js.map +0 -1
- package/dist/chunk-TNLXCSXV.js.map +0 -1
- package/dist/chunk-UFS7OXGL.js.map +0 -1
- package/dist/chunk-WVAEIKUY.js.map +0 -1
- package/dist/chunk-XIQAOGAA.js.map +0 -1
- package/dist/chunk-Y5OOHER4.js.map +0 -1
- package/dist/chunk-YXOXAQ5Y.js.map +0 -1
- /package/dist/{chunk-IFCM6OLK.js.map → chunk-3TUDKDTQ.js.map} +0 -0
- /package/dist/{chunk-A7INTIC5.js.map → chunk-4J53ZVPQ.js.map} +0 -0
- /package/dist/{chunk-XYUFGHUW.js.map → chunk-56F6EAQ6.js.map} +0 -0
- /package/dist/{chunk-F6OEXJQQ.js.map → chunk-6XG3NQRC.js.map} +0 -0
- /package/dist/{chunk-24ZLC5QN.js.map → chunk-7N7S2RKF.js.map} +0 -0
- /package/dist/{chunk-VRBBZH4U.js.map → chunk-AX4TRSRE.js.map} +0 -0
- /package/dist/{chunk-66RZ4EIT.js.map → chunk-BE6NEQLF.js.map} +0 -0
- /package/dist/{chunk-YF2MMBKA.js.map → chunk-BJPL5WAL.js.map} +0 -0
- /package/dist/{chunk-GEXI357K.js.map → chunk-C7C5WIIF.js.map} +0 -0
- /package/dist/{chunk-L3TYGUTH.js.map → chunk-CMPXLMC3.js.map} +0 -0
- /package/dist/{chunk-W2FBVBQ4.js.map → chunk-DBVBV2RF.js.map} +0 -0
- /package/dist/{chunk-IQOEW5YV.js.map → chunk-FCQ7ZYCQ.js.map} +0 -0
- /package/dist/{chunk-IIBFCZA7.js.map → chunk-FWXLKH2H.js.map} +0 -0
- /package/dist/{chunk-CKHPUOAP.js.map → chunk-K2N6WIZM.js.map} +0 -0
- /package/dist/{chunk-BHJAMSVC.js.map → chunk-LD6A7XG5.js.map} +0 -0
- /package/dist/{chunk-AKKFHN3I.js.map → chunk-M4WI23X3.js.map} +0 -0
- /package/dist/{chunk-N2O23WYA.js.map → chunk-M5KLYHHI.js.map} +0 -0
- /package/dist/{chunk-OQQRWPFZ.js.map → chunk-OS5RKJOH.js.map} +0 -0
- /package/dist/{chunk-DS3FZ7GS.js.map → chunk-OUSOMUFV.js.map} +0 -0
- /package/dist/{chunk-7B7IPPN5.js.map → chunk-OVYBENIJ.js.map} +0 -0
- /package/dist/{chunk-WDJCZQB4.js.map → chunk-UGFPGWJB.js.map} +0 -0
- /package/dist/{chunk-56LP72AD.js.map → chunk-UYYSOMS2.js.map} +0 -0
- /package/dist/{chunk-QTJOORGN.js.map → chunk-WIMKOTNY.js.map} +0 -0
- /package/dist/{chunk-GXTYEG7Q.js.map → chunk-WO22UEM3.js.map} +0 -0
- /package/dist/{chunk-C53JDEH3.js.map → chunk-Y62QPRKV.js.map} +0 -0
- /package/dist/{chunk-WFNH4UDF.js.map → chunk-Y6PNYJVO.js.map} +0 -0
- /package/dist/{contradiction-scan-CWO3LIWV.js.map → contradiction-scan-UERKJESC.js.map} +0 -0
- /package/dist/{first-start-migration-5DXD3TF2.js.map → first-start-migration-GQ3UQNIL.js.map} +0 -0
- /package/dist/{tier-stats-QID73BBB.js.map → tier-stats-CSKL7BDG.js.map} +0 -0
package/src/operator-toolkit.ts
CHANGED
|
@@ -56,6 +56,7 @@ import { reportBufferSurpriseDistribution } from "./buffer-surprise-report.js";
|
|
|
56
56
|
import { readJudgeVerdictStats } from "./extraction-judge-telemetry.js";
|
|
57
57
|
import { resolveIndexingCapabilities } from "./capabilities.js";
|
|
58
58
|
|
|
59
|
+
|
|
59
60
|
const OPENCLAW_REMNIC_PLUGIN_IDS = ["openclaw-remnic", "openclaw-engram"] as const;
|
|
60
61
|
|
|
61
62
|
function getOpenClawPluginEntries(raw: Record<string, unknown>): Record<string, unknown> | undefined {
|
|
@@ -49,6 +49,7 @@ import type { LocalLlmClient } from "../local-llm.js";
|
|
|
49
49
|
import type { EmbeddingFallback } from "../embedding-fallback.js";
|
|
50
50
|
import type { PluginConfig, MemoryFile, AgentPersonaModelConfig } from "../types.js";
|
|
51
51
|
import { log } from "../logger.js";
|
|
52
|
+
import { resolveConversationContextCapabilities } from "../capabilities.js";
|
|
52
53
|
|
|
53
54
|
/** Dependencies injected by the orchestrator. All stable references or
|
|
54
55
|
* live accessors. */
|
|
@@ -193,7 +194,7 @@ export class SemanticConsolidationCoordinator {
|
|
|
193
194
|
// `semanticConsolidationEnabled` follow the same convention,
|
|
194
195
|
// while `!== false` is reserved for default-on flags.
|
|
195
196
|
const operatorAwareEnabled =
|
|
196
|
-
this.config.
|
|
197
|
+
resolveConversationContextCapabilities(this.config).operatorAwareConsolidation === true;
|
|
197
198
|
let prompt = operatorAwareEnabled
|
|
198
199
|
? buildOperatorAwareConsolidationPrompt(cluster)
|
|
199
200
|
: buildConsolidationPrompt(cluster);
|
|
@@ -418,7 +419,7 @@ export class SemanticConsolidationCoordinator {
|
|
|
418
419
|
// in a try/catch because reasoner I/O (LLM call, peer-profile
|
|
419
420
|
// writes) must never abort the consolidation result. The reasoner
|
|
420
421
|
// itself also defends against partial failure — see profile-reasoner.ts.
|
|
421
|
-
if (this.config.
|
|
422
|
+
if (resolveConversationContextCapabilities(this.config).peerProfileReasoner) {
|
|
422
423
|
try {
|
|
423
424
|
const peerLlm = new FallbackLlmClient(
|
|
424
425
|
this.config.gatewayConfig,
|
package/src/orchestrator.ts
CHANGED
|
@@ -275,7 +275,11 @@ import { resolveNamespaceCapabilities,
|
|
|
275
275
|
resolveQmdCapabilities,
|
|
276
276
|
resolveIdentityContinuityCapabilities,
|
|
277
277
|
resolveLocalLlmCapabilities,
|
|
278
|
-
resolveSecurityCapabilities, resolveEvalCapabilities, resolveUtilityLearningCapabilities, resolveObjectiveStateCapabilities, resolveCompressionCapabilities, resolvePresentationCapabilities, resolveConsolidationCapabilities, resolveRecallAuxiliaryCapabilities
|
|
278
|
+
resolveSecurityCapabilities, resolveEvalCapabilities, resolveUtilityLearningCapabilities, resolveObjectiveStateCapabilities, resolveCompressionCapabilities, resolvePresentationCapabilities, resolveConsolidationCapabilities, resolveRecallAuxiliaryCapabilities ,
|
|
279
|
+
resolveRecallEnhancementCapabilities,
|
|
280
|
+
resolvePipelineProcessingCapabilities,
|
|
281
|
+
resolveConversationContextCapabilities,
|
|
282
|
+
} from "./capabilities.js";
|
|
279
283
|
import { DEFAULT_TAXONOMY } from "./taxonomy/index.js";
|
|
280
284
|
import {
|
|
281
285
|
searchHarmonicRetrieval,
|
|
@@ -2767,7 +2771,7 @@ export class Orchestrator {
|
|
|
2767
2771
|
constructor(config: PluginConfig) {
|
|
2768
2772
|
this.config = config;
|
|
2769
2773
|
this.profiler = new ProfilingCollector({
|
|
2770
|
-
enabled: config.
|
|
2774
|
+
enabled: resolvePipelineProcessingCapabilities(this.config).profiling,
|
|
2771
2775
|
storageDir: config.profilingStorageDir || path.join(config.memoryDir, "profiling"),
|
|
2772
2776
|
maxTraces: config.profilingMaxTraces,
|
|
2773
2777
|
});
|
|
@@ -2856,7 +2860,7 @@ export class Orchestrator {
|
|
|
2856
2860
|
this.conversationQmd = conversationIndexRuntime.qmd;
|
|
2857
2861
|
this.conversationFaiss = conversationIndexRuntime.faiss;
|
|
2858
2862
|
this.conversationIndexBackend = conversationIndexRuntime.backend;
|
|
2859
|
-
this.sharedContext = config.
|
|
2863
|
+
this.sharedContext = resolveConversationContextCapabilities(this.config).sharedContext
|
|
2860
2864
|
? new SharedContextManager(config)
|
|
2861
2865
|
: undefined;
|
|
2862
2866
|
this.compounding = resolveConsolidationCapabilities(config).compounding
|
|
@@ -2934,7 +2938,7 @@ export class Orchestrator {
|
|
|
2934
2938
|
// timeout. Operators can set `localLlmDisableThinking: false`
|
|
2935
2939
|
// when they want thinking enabled for narrative paths.
|
|
2936
2940
|
this.localLlm.disableThinking = config.localLlmDisableThinking;
|
|
2937
|
-
this.fastLlm = config.
|
|
2941
|
+
this.fastLlm = resolvePipelineProcessingCapabilities(this.config).localLlmFast
|
|
2938
2942
|
? (() => {
|
|
2939
2943
|
const client = new LocalLlmClient(
|
|
2940
2944
|
{
|
|
@@ -3007,7 +3011,7 @@ export class Orchestrator {
|
|
|
3007
3011
|
});
|
|
3008
3012
|
|
|
3009
3013
|
// Lossless Context Management (LCM) — proactive session archive + DAG summarization
|
|
3010
|
-
if (config.
|
|
3014
|
+
if (resolvePipelineProcessingCapabilities(this.config).lcm) {
|
|
3011
3015
|
const summarizeFn = async (
|
|
3012
3016
|
text: string,
|
|
3013
3017
|
targetTokens: number,
|
|
@@ -3064,7 +3068,7 @@ export class Orchestrator {
|
|
|
3064
3068
|
dir,
|
|
3065
3069
|
new BoxBuilder(dir, {
|
|
3066
3070
|
memoryBoxesEnabled: resolvePresentationCapabilities(this.config).memoryBoxes,
|
|
3067
|
-
traceWeaverEnabled: this.config.
|
|
3071
|
+
traceWeaverEnabled: resolvePipelineProcessingCapabilities(this.config).traceWeaver,
|
|
3068
3072
|
boxTopicShiftThreshold: this.config.boxTopicShiftThreshold,
|
|
3069
3073
|
boxTimeGapMs: this.config.boxTimeGapMs,
|
|
3070
3074
|
boxMaxMemories: this.config.boxMaxMemories,
|
|
@@ -3157,7 +3161,7 @@ export class Orchestrator {
|
|
|
3157
3161
|
}
|
|
3158
3162
|
|
|
3159
3163
|
private async loadRoutingRules(): Promise<RouteRule[]> {
|
|
3160
|
-
if (!this.config.
|
|
3164
|
+
if (!resolvePipelineProcessingCapabilities(this.config).routingRules) return [];
|
|
3161
3165
|
try {
|
|
3162
3166
|
return await this.getRoutingRulesStore().read(this.routeEngineOptions());
|
|
3163
3167
|
} catch (err) {
|
|
@@ -6872,7 +6876,7 @@ export class Orchestrator {
|
|
|
6872
6876
|
signal: options.abortSignal,
|
|
6873
6877
|
});
|
|
6874
6878
|
if (
|
|
6875
|
-
this.config.
|
|
6879
|
+
resolveRecallEnhancementCapabilities(this.config).recallPlannerTelemetry &&
|
|
6876
6880
|
recallDecision.plannerSource &&
|
|
6877
6881
|
recallDecision.plannerSource !== "heuristic"
|
|
6878
6882
|
) {
|
|
@@ -7406,7 +7410,7 @@ export class Orchestrator {
|
|
|
7406
7410
|
if (
|
|
7407
7411
|
!this.isRecallSectionEnabled(
|
|
7408
7412
|
"shared-context",
|
|
7409
|
-
this.config.
|
|
7413
|
+
resolveConversationContextCapabilities(this.config).sharedContext === true,
|
|
7410
7414
|
)
|
|
7411
7415
|
)
|
|
7412
7416
|
return null;
|
|
@@ -7530,7 +7534,7 @@ export class Orchestrator {
|
|
|
7530
7534
|
| null
|
|
7531
7535
|
| undefined = undefined;
|
|
7532
7536
|
const peerProfileRecallPromise = (async (): Promise<string | null> => {
|
|
7533
|
-
if (!this.config.
|
|
7537
|
+
if (!resolveRecallEnhancementCapabilities(this.config).peerProfileRecall) return null;
|
|
7534
7538
|
if (this.config.peerProfileRecallMaxFields <= 0) return null;
|
|
7535
7539
|
const peerId = this.getPeerIdForSession(sessionKey);
|
|
7536
7540
|
if (!peerId) return null;
|
|
@@ -7937,11 +7941,11 @@ export class Orchestrator {
|
|
|
7937
7941
|
const causalTrajectoryPromise = (async (): Promise<string | null> => {
|
|
7938
7942
|
const t0 = Date.now();
|
|
7939
7943
|
if (
|
|
7940
|
-
!this.config.
|
|
7941
|
-
!this.config.
|
|
7944
|
+
!resolveRecallEnhancementCapabilities(this.config).causalTrajectoryMemory ||
|
|
7945
|
+
!resolveRecallEnhancementCapabilities(this.config).causalTrajectoryRecall ||
|
|
7942
7946
|
!this.isRecallSectionEnabled(
|
|
7943
7947
|
"causal-trajectories",
|
|
7944
|
-
this.config.
|
|
7948
|
+
resolveRecallEnhancementCapabilities(this.config).causalTrajectoryRecall === true,
|
|
7945
7949
|
)
|
|
7946
7950
|
) {
|
|
7947
7951
|
recordRecallSectionMetric({
|
|
@@ -7994,10 +7998,10 @@ export class Orchestrator {
|
|
|
7994
7998
|
const cmcRetrievalPromise = (async (): Promise<string | null> => {
|
|
7995
7999
|
const t0 = Date.now();
|
|
7996
8000
|
if (
|
|
7997
|
-
!this.config.
|
|
8001
|
+
!resolveRecallEnhancementCapabilities(this.config).cmcRetrieval ||
|
|
7998
8002
|
!this.isRecallSectionEnabled(
|
|
7999
8003
|
"cmc-causal-chains",
|
|
8000
|
-
this.config.
|
|
8004
|
+
resolveRecallEnhancementCapabilities(this.config).cmcRetrieval === true,
|
|
8001
8005
|
)
|
|
8002
8006
|
) {
|
|
8003
8007
|
recordRecallSectionMetric({
|
|
@@ -8995,7 +8999,7 @@ export class Orchestrator {
|
|
|
8995
8999
|
let section: string | null = null;
|
|
8996
9000
|
// Try checkpoint first (post-compaction recovery)
|
|
8997
9001
|
let checkpointInjected = false;
|
|
8998
|
-
if (this.config.
|
|
9002
|
+
if (resolvePipelineProcessingCapabilities(this.config).checkpoint) {
|
|
8999
9003
|
const checkpoint = await this.transcript.loadCheckpoint(sessionKey);
|
|
9000
9004
|
log.debug(
|
|
9001
9005
|
`recall: checkpoint loaded, turns=${checkpoint?.turns?.length ?? 0}`,
|
|
@@ -9128,7 +9132,7 @@ export class Orchestrator {
|
|
|
9128
9132
|
const summariesPromise = (async (): Promise<string | null> => {
|
|
9129
9133
|
const t0 = Date.now();
|
|
9130
9134
|
if (
|
|
9131
|
-
!this.config.
|
|
9135
|
+
!resolvePipelineProcessingCapabilities(this.config).hourlySummaries ||
|
|
9132
9136
|
!sessionKey ||
|
|
9133
9137
|
!this.isRecallSectionEnabled("summaries", true)
|
|
9134
9138
|
) {
|
|
@@ -9358,7 +9362,7 @@ export class Orchestrator {
|
|
|
9358
9362
|
const t0 = Date.now();
|
|
9359
9363
|
if (
|
|
9360
9364
|
!this.compounding ||
|
|
9361
|
-
!this.config.
|
|
9365
|
+
!resolveRecallEnhancementCapabilities(this.config).compoundingInject ||
|
|
9362
9366
|
!this.isRecallSectionEnabled("compounding", true)
|
|
9363
9367
|
) {
|
|
9364
9368
|
recordRecallSectionMetric({
|
|
@@ -9699,7 +9703,7 @@ export class Orchestrator {
|
|
|
9699
9703
|
this.getRecallSectionMaxChars("explicit-cue") ??
|
|
9700
9704
|
this.config.explicitCueRecallMaxChars;
|
|
9701
9705
|
if (
|
|
9702
|
-
this.config.
|
|
9706
|
+
resolveRecallEnhancementCapabilities(this.config).explicitCueRecall &&
|
|
9703
9707
|
this.isRecallSectionEnabled("explicit-cue") &&
|
|
9704
9708
|
explicitCueMaxChars !== 0 &&
|
|
9705
9709
|
this.lcmEngine?.enabled &&
|
|
@@ -9742,7 +9746,7 @@ export class Orchestrator {
|
|
|
9742
9746
|
if (
|
|
9743
9747
|
this.isSpecializedRecallSectionEnabled(
|
|
9744
9748
|
"targeted-facts",
|
|
9745
|
-
this.config.
|
|
9749
|
+
resolveRecallEnhancementCapabilities(this.config).targetedFactRecall,
|
|
9746
9750
|
) &&
|
|
9747
9751
|
targetedFactMaxChars !== 0 &&
|
|
9748
9752
|
this.lcmEngine?.enabled &&
|
|
@@ -9791,7 +9795,7 @@ export class Orchestrator {
|
|
|
9791
9795
|
if (
|
|
9792
9796
|
this.isSpecializedRecallSectionEnabled(
|
|
9793
9797
|
"focused-list",
|
|
9794
|
-
this.config.
|
|
9798
|
+
resolveRecallEnhancementCapabilities(this.config).focusedListRecall,
|
|
9795
9799
|
) &&
|
|
9796
9800
|
focusedListMaxChars !== 0 &&
|
|
9797
9801
|
this.lcmEngine?.enabled &&
|
|
@@ -9845,7 +9849,7 @@ export class Orchestrator {
|
|
|
9845
9849
|
if (
|
|
9846
9850
|
this.isSpecializedRecallSectionEnabled(
|
|
9847
9851
|
"response-guidance",
|
|
9848
|
-
this.config.
|
|
9852
|
+
resolveRecallEnhancementCapabilities(this.config).responseGuidanceRecall,
|
|
9849
9853
|
) &&
|
|
9850
9854
|
responseGuidanceMaxChars !== 0 &&
|
|
9851
9855
|
this.lcmEngine?.enabled &&
|
|
@@ -9894,7 +9898,7 @@ export class Orchestrator {
|
|
|
9894
9898
|
if (
|
|
9895
9899
|
this.isSpecializedRecallSectionEnabled(
|
|
9896
9900
|
"event-order",
|
|
9897
|
-
this.config.
|
|
9901
|
+
resolveRecallEnhancementCapabilities(this.config).eventOrderRecall,
|
|
9898
9902
|
) &&
|
|
9899
9903
|
eventOrderMaxChars !== 0 &&
|
|
9900
9904
|
this.lcmEngine?.enabled &&
|
|
@@ -10320,7 +10324,7 @@ export class Orchestrator {
|
|
|
10320
10324
|
recallMode === "graph_mode" || isFullModeGraphAssist;
|
|
10321
10325
|
const graphShadowEvalEnabled =
|
|
10322
10326
|
isFullModeGraphAssist &&
|
|
10323
|
-
this.config.
|
|
10327
|
+
resolveRecallEnhancementCapabilities(this.config).graphAssistShadowEval === true;
|
|
10324
10328
|
if (shouldRunGraphExpansion) {
|
|
10325
10329
|
shouldPersistGraphSnapshot = true;
|
|
10326
10330
|
graphDecisionShadowMode = graphShadowEvalEnabled;
|
|
@@ -10584,7 +10588,7 @@ export class Orchestrator {
|
|
|
10584
10588
|
);
|
|
10585
10589
|
|
|
10586
10590
|
// E-Mem-inspired memory reconstruction: fill gaps for referenced entities
|
|
10587
|
-
if (this.config.
|
|
10591
|
+
if (resolveRecallEnhancementCapabilities(this.config).memoryReconstruction && memoryResults.length > 0) {
|
|
10588
10592
|
try {
|
|
10589
10593
|
const snippets = memoryResults.map((r) => r.snippet);
|
|
10590
10594
|
// Extract entity paths already present in recall results to avoid duplicates
|
|
@@ -12248,7 +12252,7 @@ export class Orchestrator {
|
|
|
12248
12252
|
sessionKey: string,
|
|
12249
12253
|
options: { bufferKey?: string } = {},
|
|
12250
12254
|
): Promise<void> {
|
|
12251
|
-
if (this.config.
|
|
12255
|
+
if (resolvePipelineProcessingCapabilities(this.config).sessionObserver !== true) return;
|
|
12252
12256
|
if (!sessionKey || sessionKey.length === 0) return;
|
|
12253
12257
|
|
|
12254
12258
|
const bufferKey =
|
|
@@ -13272,7 +13276,7 @@ export class Orchestrator {
|
|
|
13272
13276
|
// the citation survives hostile memory text, copy/paste, and LLM quoting.
|
|
13273
13277
|
// The helper is a no-op when the feature flag is off, so legacy pipelines
|
|
13274
13278
|
// see zero behavioral change.
|
|
13275
|
-
const citationEnabled = this.config.
|
|
13279
|
+
const citationEnabled = resolvePipelineProcessingCapabilities(this.config).inlineSourceAttribution === true;
|
|
13276
13280
|
const citationTemplate = this.config.inlineSourceAttributionFormat;
|
|
13277
13281
|
// The stable fields (agent, session) are computed once; `ts` is intentionally
|
|
13278
13282
|
// omitted here and added fresh per invocation so each fact in a large batch
|
|
@@ -13431,7 +13435,7 @@ export class Orchestrator {
|
|
|
13431
13435
|
const actualTier = confidenceTier(confidence);
|
|
13432
13436
|
const actualRank = confidenceTierOrder.indexOf(actualTier);
|
|
13433
13437
|
if (actualRank === -1) return false;
|
|
13434
|
-
if (!this.config.
|
|
13438
|
+
if (!resolveRecallEnhancementCapabilities(this.config).autoPromoteToShared) return false;
|
|
13435
13439
|
if (!this.config.autoPromoteToSharedCategories.includes(category as any))
|
|
13436
13440
|
return false;
|
|
13437
13441
|
const minimumRank = confidenceTierOrder.indexOf(
|
|
@@ -14831,7 +14835,7 @@ export class Orchestrator {
|
|
|
14831
14835
|
// a high-similarity update/correction is linked as a superseding
|
|
14832
14836
|
// contradiction rather than silently dropped.
|
|
14833
14837
|
let pendingSemanticSkip: (SemanticDedupDecision & { action: "skip" }) | null = null;
|
|
14834
|
-
if (this.config.
|
|
14838
|
+
if (resolvePipelineProcessingCapabilities(this.config).semanticDedup) {
|
|
14835
14839
|
let semanticDecision: SemanticDedupDecision;
|
|
14836
14840
|
// UUI2: skip embedding lookup for the rest of this batch once we know
|
|
14837
14841
|
// the backend is unavailable. The flag is reset per-batch (set to false
|
|
@@ -14876,7 +14880,7 @@ export class Orchestrator {
|
|
|
14876
14880
|
}
|
|
14877
14881
|
}
|
|
14878
14882
|
|
|
14879
|
-
const inferredIntent = this.config.
|
|
14883
|
+
const inferredIntent = resolveConversationContextCapabilities(this.config).intentRouting
|
|
14880
14884
|
? inferIntentFromText(
|
|
14881
14885
|
`${writeCategory} ${fact.tags.join(" ")} ${fact.content}`,
|
|
14882
14886
|
)
|
|
@@ -14916,7 +14920,7 @@ export class Orchestrator {
|
|
|
14916
14920
|
// for a pending_review fact — an unfaithful extraction in the review queue
|
|
14917
14921
|
// must not trigger auto-resolve and retire an existing active memory.
|
|
14918
14922
|
if (
|
|
14919
|
-
this.config.
|
|
14923
|
+
resolveRecallEnhancementCapabilities(this.config).contradictionDetection &&
|
|
14920
14924
|
this.qmd.isAvailable() &&
|
|
14921
14925
|
faithfulnessEnforceStatus !== "pending_review"
|
|
14922
14926
|
) {
|
|
@@ -15001,10 +15005,10 @@ export class Orchestrator {
|
|
|
15001
15005
|
// When semanticChunkingEnabled is true, prefer the embedding-based
|
|
15002
15006
|
// semantic chunker which produces more coherent topic-aligned segments.
|
|
15003
15007
|
// Falls back to the recursive sentence-boundary chunker on failure.
|
|
15004
|
-
if (this.config.
|
|
15008
|
+
if (resolvePipelineProcessingCapabilities(this.config).chunking && writeCategory !== "procedure") {
|
|
15005
15009
|
let chunkResult: { chunked: boolean; chunks: { content: string; index: number; tokenCount: number }[] };
|
|
15006
15010
|
|
|
15007
|
-
if (this.config.
|
|
15011
|
+
if (resolvePipelineProcessingCapabilities(this.config).semanticChunking) {
|
|
15008
15012
|
try {
|
|
15009
15013
|
const embedFn = this.embeddingFallback.embedTexts.bind(this.embeddingFallback);
|
|
15010
15014
|
const semanticResult: SemanticChunkResult = await semanticChunkContent(
|
|
@@ -15371,7 +15375,7 @@ export class Orchestrator {
|
|
|
15371
15375
|
}
|
|
15372
15376
|
|
|
15373
15377
|
// Suggest links for this memory (Phase 3A)
|
|
15374
|
-
if (this.config.
|
|
15378
|
+
if (resolveRecallEnhancementCapabilities(this.config).memoryLinking && this.qmd.isAvailable()) {
|
|
15375
15379
|
const targetNamespace = this.storageDirNamespace(targetStorage.dir);
|
|
15376
15380
|
const suggestedLinks = await this.suggestLinksForMemory(
|
|
15377
15381
|
fact.content,
|
|
@@ -15691,7 +15695,7 @@ export class Orchestrator {
|
|
|
15691
15695
|
|
|
15692
15696
|
// Persist entity relationships (v7.0)
|
|
15693
15697
|
if (
|
|
15694
|
-
this.config.
|
|
15698
|
+
resolveRecallEnhancementCapabilities(this.config).entityRelationships &&
|
|
15695
15699
|
Array.isArray(result.relationships)
|
|
15696
15700
|
) {
|
|
15697
15701
|
for (const rel of result.relationships.slice(0, 5)) {
|
|
@@ -15715,7 +15719,7 @@ export class Orchestrator {
|
|
|
15715
15719
|
}
|
|
15716
15720
|
|
|
15717
15721
|
// Persist entity activity (v7.0)
|
|
15718
|
-
if (this.config.
|
|
15722
|
+
if (resolveRecallEnhancementCapabilities(this.config).entityActivityLog) {
|
|
15719
15723
|
const today = new Date().toISOString().slice(0, 10);
|
|
15720
15724
|
for (const entity of entities) {
|
|
15721
15725
|
const name = (entity as any)?.name;
|
|
@@ -15753,7 +15757,7 @@ export class Orchestrator {
|
|
|
15753
15757
|
// counts as a durable non-fact write for the catalog touch below (NIIly).
|
|
15754
15758
|
// Only count it when the write actually succeeds (best-effort write); the
|
|
15755
15759
|
// touch is recorded AFTER this so a rolled-back/failed write never touches.
|
|
15756
|
-
if (this.config.
|
|
15760
|
+
if (resolveRecallEnhancementCapabilities(this.config).identity && result.identityReflection) {
|
|
15757
15761
|
try {
|
|
15758
15762
|
await storage.appendIdentityReflection(result.identityReflection);
|
|
15759
15763
|
recordDurableNonFactWrite();
|
|
@@ -16320,7 +16324,7 @@ export class Orchestrator {
|
|
|
16320
16324
|
allMemories = await this.storage.readAllMemories();
|
|
16321
16325
|
|
|
16322
16326
|
// Fact archival pass (v6.0) — move old, low-importance, rarely-accessed facts to archive/
|
|
16323
|
-
if (this.config.
|
|
16327
|
+
if (resolveRecallEnhancementCapabilities(this.config).factArchival) {
|
|
16324
16328
|
const archived = await this.runFactArchival(allMemories);
|
|
16325
16329
|
if (archived > 0) {
|
|
16326
16330
|
memoryItemMutated = true;
|
|
@@ -16418,7 +16422,7 @@ export class Orchestrator {
|
|
|
16418
16422
|
}
|
|
16419
16423
|
|
|
16420
16424
|
// Auto-consolidate IDENTITY.md if it's getting large
|
|
16421
|
-
if (this.config.
|
|
16425
|
+
if (resolveRecallEnhancementCapabilities(this.config).identity) {
|
|
16422
16426
|
await this.autoConsolidateIdentity();
|
|
16423
16427
|
}
|
|
16424
16428
|
|
|
@@ -16458,12 +16462,12 @@ export class Orchestrator {
|
|
|
16458
16462
|
}
|
|
16459
16463
|
|
|
16460
16464
|
// Memory Summarization (Phase 4A)
|
|
16461
|
-
if (this.config.
|
|
16465
|
+
if (resolvePipelineProcessingCapabilities(this.config).summarization) {
|
|
16462
16466
|
await this.runSummarization(allMemories);
|
|
16463
16467
|
}
|
|
16464
16468
|
|
|
16465
16469
|
// Topic Extraction (Phase 4B)
|
|
16466
|
-
if (this.config.
|
|
16470
|
+
if (resolvePipelineProcessingCapabilities(this.config).topicExtraction) {
|
|
16467
16471
|
await this.runTopicExtraction(allMemories);
|
|
16468
16472
|
}
|
|
16469
16473
|
|
|
@@ -17876,7 +17880,7 @@ export class Orchestrator {
|
|
|
17876
17880
|
* Updates are batched in memory and flushed during consolidation.
|
|
17877
17881
|
*/
|
|
17878
17882
|
trackMemoryAccess(memoryIds: string[]): void {
|
|
17879
|
-
if (!this.config.
|
|
17883
|
+
if (!resolveRecallEnhancementCapabilities(this.config).accessTracking) return;
|
|
17880
17884
|
|
|
17881
17885
|
const now = new Date().toISOString();
|
|
17882
17886
|
for (const id of memoryIds) {
|
|
@@ -18311,7 +18315,7 @@ export class Orchestrator {
|
|
|
18311
18315
|
]);
|
|
18312
18316
|
|
|
18313
18317
|
const queryIntent =
|
|
18314
|
-
this.config.
|
|
18318
|
+
resolveConversationContextCapabilities(this.config).intentRouting && prompt
|
|
18315
18319
|
? inferIntentFromText(prompt)
|
|
18316
18320
|
: null;
|
|
18317
18321
|
|
|
@@ -18379,7 +18383,7 @@ export class Orchestrator {
|
|
|
18379
18383
|
}
|
|
18380
18384
|
|
|
18381
18385
|
// Feedback bias (v2.2): apply small user-provided up/down vote adjustments.
|
|
18382
|
-
if (this.config.
|
|
18386
|
+
if (resolveRecallEnhancementCapabilities(this.config).feedback) {
|
|
18383
18387
|
const match = memory.path.match(/([^/]+)\.md$/);
|
|
18384
18388
|
const memoryId = match ? match[1] : null;
|
|
18385
18389
|
if (memoryId) {
|
|
@@ -18393,7 +18397,7 @@ export class Orchestrator {
|
|
|
18393
18397
|
}
|
|
18394
18398
|
|
|
18395
18399
|
// Negative examples (v2.2): apply a small penalty for memories repeatedly marked "not useful".
|
|
18396
|
-
if (this.config.
|
|
18400
|
+
if (resolvePipelineProcessingCapabilities(this.config).negativeExamples) {
|
|
18397
18401
|
const match = memory.path.match(/([^/]+)\.md$/);
|
|
18398
18402
|
const memoryId = match ? match[1] : null;
|
|
18399
18403
|
if (memoryId) {
|
|
@@ -18465,7 +18469,7 @@ export class Orchestrator {
|
|
|
18465
18469
|
// Gated by reinforcementRecallBoostEnabled (default false).
|
|
18466
18470
|
let reinforcementBoost = 0;
|
|
18467
18471
|
if (
|
|
18468
|
-
this.config.
|
|
18472
|
+
resolveRecallEnhancementCapabilities(this.config).reinforcementRecallBoost &&
|
|
18469
18473
|
typeof memory.frontmatter.reinforcement_count === "number" &&
|
|
18470
18474
|
memory.frontmatter.reinforcement_count > 0
|
|
18471
18475
|
) {
|
|
@@ -6,6 +6,7 @@ import {
|
|
|
6
6
|
import type { PluginConfig } from "../types.js";
|
|
7
7
|
import { isAbortError } from "../abort-error.js";
|
|
8
8
|
import { withTimeoutSignal } from "./abort.js";
|
|
9
|
+
import { resolvePipelineProcessingCapabilities } from "../capabilities.js";
|
|
9
10
|
import {
|
|
10
11
|
getHostEmbeddingProvider,
|
|
11
12
|
type HostEmbeddingProvider,
|
|
@@ -217,7 +218,7 @@ export class EmbedHelper {
|
|
|
217
218
|
|
|
218
219
|
if (
|
|
219
220
|
options.includeHost !== false &&
|
|
220
|
-
this.config.
|
|
221
|
+
resolvePipelineProcessingCapabilities(this.config).hostEmbeddingProvider !== false
|
|
221
222
|
) {
|
|
222
223
|
const hostProvider = this.resolveHostEmbeddingProvider();
|
|
223
224
|
if (hostProvider) {
|
package/src/search/factory.ts
CHANGED
|
@@ -10,6 +10,7 @@ import { EmbedHelper } from "./embed-helper.js";
|
|
|
10
10
|
import { QmdClient, type QmdClientOptions } from "../qmd.js";
|
|
11
11
|
import { log } from "../logger.js";
|
|
12
12
|
import { FaissConversationIndexAdapter } from "../conversation-index/faiss-adapter.js";
|
|
13
|
+
import { resolvePipelineProcessingCapabilities } from "../capabilities.js";
|
|
13
14
|
import {
|
|
14
15
|
resolveIndexingCapabilities,
|
|
15
16
|
resolveQmdCapabilities,
|
|
@@ -88,7 +89,7 @@ function resolveNonQmdBackend(config: PluginConfig): SearchBackend | undefined {
|
|
|
88
89
|
function qmdOptions(config: PluginConfig): QmdClientOptions {
|
|
89
90
|
return {
|
|
90
91
|
slowLog: {
|
|
91
|
-
enabled: config.
|
|
92
|
+
enabled: resolvePipelineProcessingCapabilities(config).slowLog,
|
|
92
93
|
thresholdMs: config.slowLogThresholdMs,
|
|
93
94
|
},
|
|
94
95
|
updateTimeoutMs: config.qmdUpdateTimeoutMs,
|
|
@@ -12,6 +12,7 @@ import { runPostConsolidationMaterialize } from "./connectors/codex-materialize-
|
|
|
12
12
|
import type { MaterializeResult, RolloutSummaryInput } from "./connectors/codex-materialize.js";
|
|
13
13
|
import { discoverMemoryExtensions, renderExtensionsBlock, resolveExtensionsRoot } from "./memory-extension-host/index.js";
|
|
14
14
|
import { log } from "./logger.js";
|
|
15
|
+
import { resolvePipelineProcessingCapabilities } from "./capabilities.js";
|
|
15
16
|
|
|
16
17
|
// Re-export resolveExtensionsRoot for backward compatibility — existing
|
|
17
18
|
// consumers that import from semantic-consolidation.ts continue to work.
|
|
@@ -404,7 +405,7 @@ void _CONSOLIDATION_OPERATORS;
|
|
|
404
405
|
export async function buildExtensionsBlockForConsolidation(
|
|
405
406
|
config: PluginConfig,
|
|
406
407
|
): Promise<string> {
|
|
407
|
-
if (!config.
|
|
408
|
+
if (!resolvePipelineProcessingCapabilities(config).memoryExtensions) return "";
|
|
408
409
|
const root = resolveExtensionsRoot(config);
|
|
409
410
|
const extensions = await discoverMemoryExtensions(root, log);
|
|
410
411
|
if (extensions.length === 0) return "";
|
|
@@ -5,6 +5,7 @@ import { z } from "zod";
|
|
|
5
5
|
import { log } from "../logger.js";
|
|
6
6
|
import type { PluginConfig } from "../types.js";
|
|
7
7
|
import { expandTildePath } from "../utils/path.js";
|
|
8
|
+
import { resolveConversationContextCapabilities } from "../capabilities.js";
|
|
8
9
|
|
|
9
10
|
export const SharedFeedbackEntrySchema = z.object({
|
|
10
11
|
agent: z.string().min(1),
|
|
@@ -713,8 +714,8 @@ export class SharedContextManager {
|
|
|
713
714
|
.sort((a, b) => b.agentCount - a.agentCount || a.token.localeCompare(b.token));
|
|
714
715
|
|
|
715
716
|
const semanticEnabled =
|
|
716
|
-
this.config.
|
|
717
|
-
|| this.config.
|
|
717
|
+
resolveConversationContextCapabilities(this.config).sharedCrossSignalSemantic === true
|
|
718
|
+
|| resolveConversationContextCapabilities(this.config).crossSignalsSemantic === true;
|
|
718
719
|
const semanticTimeoutMs =
|
|
719
720
|
this.config.sharedCrossSignalSemanticTimeoutMs
|
|
720
721
|
?? this.config.crossSignalsSemanticTimeoutMs
|
package/src/storage.ts
CHANGED
|
@@ -2373,7 +2373,7 @@ export class StorageManager {
|
|
|
2373
2373
|
* When true, the secure-store is configured as required — writes
|
|
2374
2374
|
* MUST be encrypted and a locked store MUST reject writes rather
|
|
2375
2375
|
* than silently falling back to plaintext. Set by the orchestrator
|
|
2376
|
-
* from `config.
|
|
2376
|
+
* from `resolveRecallAuxiliaryCapabilities(config).secureStore`.
|
|
2377
2377
|
*/
|
|
2378
2378
|
private _secureStoreRequired = false;
|
|
2379
2379
|
|
package/src/summarizer.ts
CHANGED
|
@@ -15,6 +15,7 @@ import {
|
|
|
15
15
|
} from "./storage-paths.js";
|
|
16
16
|
import { sessionStoragePaths } from "./session-identity.js";
|
|
17
17
|
import { resolveLocalLlmCapabilities } from "./capabilities.js";
|
|
18
|
+
import { resolvePipelineProcessingCapabilities } from "./capabilities.js";
|
|
18
19
|
|
|
19
20
|
// Schema for LLM summary output
|
|
20
21
|
const HourlySummarySchema = z.object({
|
|
@@ -130,7 +131,7 @@ export class HourlySummarizer {
|
|
|
130
131
|
.map((e) => `[${e.role}] ${e.content}`)
|
|
131
132
|
.join("\n\n");
|
|
132
133
|
|
|
133
|
-
if (this.config.
|
|
134
|
+
if (resolvePipelineProcessingCapabilities(this.config).hourlySummariesExtended) {
|
|
134
135
|
const extended = await this.generateExtended(sessionKey, hourStart, conversation, entries);
|
|
135
136
|
if (!extended) return null;
|
|
136
137
|
const meta: HourlySummaryExtendedMeta = {
|
|
@@ -468,7 +469,7 @@ Respond with valid JSON matching this schema:
|
|
|
468
469
|
const meta = (summary as any)._extendedMeta as HourlySummaryExtendedMeta | undefined;
|
|
469
470
|
const lines: string[] = [hourHeader, ""];
|
|
470
471
|
|
|
471
|
-
if (this.config.
|
|
472
|
+
if (resolvePipelineProcessingCapabilities(this.config).hourlySummariesExtended && ext) {
|
|
472
473
|
lines.push("### Topics Discussed");
|
|
473
474
|
for (const t of ext.topics) lines.push(`- ${t}`);
|
|
474
475
|
lines.push("");
|