@remnic/core 9.3.628 → 9.3.629

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.
Files changed (168) hide show
  1. package/dist/access-cli.js +9 -9
  2. package/dist/access-http.d.ts +5 -4
  3. package/dist/access-http.js +5 -4
  4. package/dist/access-mcp.d.ts +5 -4
  5. package/dist/access-mcp.js +4 -3
  6. package/dist/{access-service-C_sfOHsX.d.ts → access-service-BdThkfIE.d.ts} +2 -2
  7. package/dist/access-service.d.ts +5 -4
  8. package/dist/access-service.js +3 -2
  9. package/dist/action-confidence.d.ts +1 -1
  10. package/dist/active-memory-bridge.d.ts +1 -1
  11. package/dist/active-recall.d.ts +1 -1
  12. package/dist/behavior-learner.d.ts +1 -1
  13. package/dist/behavior-signals.d.ts +1 -1
  14. package/dist/bootstrap.d.ts +5 -4
  15. package/dist/briefing.d.ts +33 -2
  16. package/dist/briefing.js +4 -1
  17. package/dist/buffer-surprise-report.d.ts +1 -1
  18. package/dist/buffer.d.ts +1 -1
  19. package/dist/calibration.d.ts +1 -1
  20. package/dist/calibration.js +2 -2
  21. package/dist/causal-behavior.d.ts +1 -1
  22. package/dist/causal-consolidation.d.ts +1 -1
  23. package/dist/causal-consolidation.js +2 -2
  24. package/dist/{chunk-AZ4RI3QD.js → chunk-3GLCUPXP.js} +24 -6
  25. package/dist/chunk-3GLCUPXP.js.map +1 -0
  26. package/dist/{chunk-SHV5Y2WU.js → chunk-54KDA6UK.js} +3 -3
  27. package/dist/{chunk-KGIGRNR6.js → chunk-723OMPUI.js} +4 -4
  28. package/dist/{chunk-3VONWEQB.js → chunk-HZVIYZYN.js} +2 -2
  29. package/dist/{chunk-UELS6WWF.js → chunk-JKCDQBDW.js} +1 -1
  30. package/dist/{chunk-F3FY3D3S.js → chunk-JXHMAQYT.js} +8 -3
  31. package/dist/chunk-JXHMAQYT.js.map +1 -0
  32. package/dist/{chunk-Z3CCEP6F.js → chunk-K47C6M2C.js} +5 -5
  33. package/dist/{chunk-STDAAGH7.js → chunk-NKCW223V.js} +38 -2
  34. package/dist/chunk-NKCW223V.js.map +1 -0
  35. package/dist/{chunk-MON3LMO7.js → chunk-NRST7W5Q.js} +5 -5
  36. package/dist/{chunk-2RHI3FGV.js → chunk-OLNNOHBC.js} +4 -4
  37. package/dist/{chunk-Y3TMFC6I.js → chunk-XXO5TI3B.js} +3 -3
  38. package/dist/{cli-EZv6YE6_.d.ts → cli-DAsHklrf.d.ts} +3 -3
  39. package/dist/cli.d.ts +6 -5
  40. package/dist/cli.js +6 -5
  41. package/dist/compounding/engine.d.ts +1 -1
  42. package/dist/compounding/engine.js +1 -1
  43. package/dist/compounding/preference-consolidator.d.ts +1 -1
  44. package/dist/compression-optimizer.d.ts +1 -1
  45. package/dist/config.d.ts +1 -1
  46. package/dist/connectors/codex-materialize-runner.d.ts +1 -1
  47. package/dist/connectors/codex-materialize.d.ts +1 -1
  48. package/dist/connectors/index.d.ts +1 -1
  49. package/dist/consolidation-provenance-check.d.ts +1 -1
  50. package/dist/consolidation-undo.d.ts +1 -1
  51. package/dist/contradiction/index.d.ts +1 -1
  52. package/dist/conversation-index/backend.d.ts +1 -1
  53. package/dist/conversation-index/chunker.d.ts +1 -1
  54. package/dist/conversation-index/faiss-adapter.d.ts +1 -1
  55. package/dist/conversation-index/indexer.d.ts +1 -1
  56. package/dist/conversation-index/search.d.ts +1 -1
  57. package/dist/day-summary.d.ts +1 -1
  58. package/dist/delinearize.d.ts +1 -1
  59. package/dist/direct-answer-wiring.d.ts +1 -1
  60. package/dist/direct-answer.d.ts +1 -1
  61. package/dist/embedding-fallback.d.ts +1 -1
  62. package/dist/enrichment/index.d.ts +1 -1
  63. package/dist/entity-retrieval.d.ts +1 -1
  64. package/dist/entity-schema.d.ts +1 -1
  65. package/dist/explicit-capture.d.ts +5 -4
  66. package/dist/extraction-judge-telemetry.d.ts +1 -1
  67. package/dist/extraction-judge-training.d.ts +1 -1
  68. package/dist/extraction-judge.d.ts +1 -1
  69. package/dist/extraction-judge.js +3 -3
  70. package/dist/extraction.d.ts +1 -1
  71. package/dist/extraction.js +3 -3
  72. package/dist/fallback-llm.d.ts +1 -1
  73. package/dist/fallback-llm.js +2 -2
  74. package/dist/identity-continuity.d.ts +1 -1
  75. package/dist/importance.d.ts +1 -1
  76. package/dist/index.d.ts +9 -9
  77. package/dist/index.js +14 -12
  78. package/dist/index.js.map +1 -1
  79. package/dist/intent.d.ts +1 -1
  80. package/dist/lcm/engine.d.ts +1 -1
  81. package/dist/lcm/index.d.ts +1 -1
  82. package/dist/lcm/tools.d.ts +1 -1
  83. package/dist/lifecycle.d.ts +1 -1
  84. package/dist/live-connectors-runner.d.ts +1 -1
  85. package/dist/local-llm.d.ts +1 -1
  86. package/dist/maintenance/memory-governance.d.ts +1 -1
  87. package/dist/mcp-memory-inspector-app.d.ts +5 -4
  88. package/dist/memory-action-policy.d.ts +1 -1
  89. package/dist/memory-cache.d.ts +1 -1
  90. package/dist/memory-lifecycle-ledger-utils.d.ts +1 -1
  91. package/dist/memory-projection-store.d.ts +1 -1
  92. package/dist/memory-provenance.d.ts +1 -1
  93. package/dist/memory-worth-outcomes.d.ts +1 -1
  94. package/dist/models-json.d.ts +1 -1
  95. package/dist/namespaces/migrate.d.ts +1 -1
  96. package/dist/namespaces/principal.d.ts +1 -1
  97. package/dist/namespaces/search.d.ts +1 -1
  98. package/dist/namespaces/storage.d.ts +1 -1
  99. package/dist/native-knowledge.d.ts +1 -1
  100. package/dist/operator-toolkit.d.ts +1 -1
  101. package/dist/{orchestrator-CEycaY3M.d.ts → orchestrator-BexeSJ2j.d.ts} +12 -2
  102. package/dist/orchestrator.d.ts +4 -3
  103. package/dist/orchestrator.js +8 -7
  104. package/dist/patterns-cli.d.ts +1 -1
  105. package/dist/policy-runtime.d.ts +1 -1
  106. package/dist/qmd-recall-cache.d.ts +1 -1
  107. package/dist/qmd.d.ts +1 -1
  108. package/dist/recall-disclosure-escalation.d.ts +1 -1
  109. package/dist/recall-explain-renderer.d.ts +1 -1
  110. package/dist/recall-planner-llm.d.ts +1 -1
  111. package/dist/recall-planner-llm.js +2 -2
  112. package/dist/recall-state.d.ts +1 -1
  113. package/dist/recall-tag-filter.d.ts +1 -1
  114. package/dist/recall-xray-cli.d.ts +1 -1
  115. package/dist/recall-xray-renderer.d.ts +1 -1
  116. package/dist/recall-xray.d.ts +1 -1
  117. package/dist/resolve-auth-token.d.ts +1 -1
  118. package/dist/retrieval-agents.d.ts +1 -1
  119. package/dist/retrieval-tiers.d.ts +1 -1
  120. package/dist/routing/engine.d.ts +1 -1
  121. package/dist/routing/store.d.ts +1 -1
  122. package/dist/schemas.d.ts +2 -2
  123. package/dist/search/embed-helper.d.ts +1 -1
  124. package/dist/search/factory.d.ts +1 -1
  125. package/dist/search/index.d.ts +1 -1
  126. package/dist/search/lancedb-backend.d.ts +1 -1
  127. package/dist/search/meilisearch-backend.d.ts +1 -1
  128. package/dist/search/noop-backend.d.ts +1 -1
  129. package/dist/search/orama-backend.d.ts +1 -1
  130. package/dist/search/port.d.ts +1 -1
  131. package/dist/search/remote-backend.d.ts +1 -1
  132. package/dist/{semantic-consolidation-FbhPeJjB.d.ts → semantic-consolidation-PwkzNfdK.d.ts} +1 -1
  133. package/dist/semantic-consolidation.d.ts +2 -2
  134. package/dist/semantic-rule-verifier.d.ts +1 -1
  135. package/dist/session-observer-bands.d.ts +1 -1
  136. package/dist/session-observer-state.d.ts +1 -1
  137. package/dist/shared-context/manager.d.ts +1 -1
  138. package/dist/signal.d.ts +1 -1
  139. package/dist/storage.d.ts +1 -1
  140. package/dist/summarizer.d.ts +1 -1
  141. package/dist/summarizer.js +3 -3
  142. package/dist/summary-snapshot.d.ts +1 -1
  143. package/dist/temporal-supersession.d.ts +1 -1
  144. package/dist/temporal-validity.d.ts +1 -1
  145. package/dist/threading.d.ts +1 -1
  146. package/dist/tier-migration.d.ts +1 -1
  147. package/dist/tier-routing.d.ts +1 -1
  148. package/dist/topics.d.ts +1 -1
  149. package/dist/transcript.d.ts +1 -1
  150. package/dist/{types-D5VRAI04.d.ts → types-BCF2wqKa.d.ts} +1 -1
  151. package/dist/types.d.ts +1 -1
  152. package/dist/utility-runtime.d.ts +1 -1
  153. package/package.json +1 -1
  154. package/src/access-service.ts +7 -0
  155. package/src/briefing.ts +67 -1
  156. package/src/index.ts +2 -0
  157. package/src/orchestrator.ts +26 -0
  158. package/dist/chunk-AZ4RI3QD.js.map +0 -1
  159. package/dist/chunk-F3FY3D3S.js.map +0 -1
  160. package/dist/chunk-STDAAGH7.js.map +0 -1
  161. /package/dist/{chunk-SHV5Y2WU.js.map → chunk-54KDA6UK.js.map} +0 -0
  162. /package/dist/{chunk-KGIGRNR6.js.map → chunk-723OMPUI.js.map} +0 -0
  163. /package/dist/{chunk-3VONWEQB.js.map → chunk-HZVIYZYN.js.map} +0 -0
  164. /package/dist/{chunk-UELS6WWF.js.map → chunk-JKCDQBDW.js.map} +0 -0
  165. /package/dist/{chunk-Z3CCEP6F.js.map → chunk-K47C6M2C.js.map} +0 -0
  166. /package/dist/{chunk-MON3LMO7.js.map → chunk-NRST7W5Q.js.map} +0 -0
  167. /package/dist/{chunk-2RHI3FGV.js.map → chunk-OLNNOHBC.js.map} +0 -0
  168. /package/dist/{chunk-Y3TMFC6I.js.map → chunk-XXO5TI3B.js.map} +0 -0
@@ -1,5 +1,5 @@
1
1
  import { z } from 'zod';
2
- import { P as PluginConfig } from '../types-D5VRAI04.js';
2
+ import { P as PluginConfig } from '../types-BCF2wqKa.js';
3
3
  import '../types-BliCnURB.js';
4
4
  import '../index-DJ9QWMw-.js';
5
5
 
package/dist/signal.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { ar as SignalScanResult } from './types-D5VRAI04.js';
1
+ import { ar as SignalScanResult } from './types-BCF2wqKa.js';
2
2
  import './types-BliCnURB.js';
3
3
  import './index-DJ9QWMw-.js';
4
4
 
package/dist/storage.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { VersioningConfig } from './page-versioning.js';
2
2
  import { ConsolidationOperator } from './consolidation-operator.js';
3
- import { P as PluginConfig, M as MemoryCategory, I as ImportanceScore, h as MemoryLink, i as MemoryFrontmatter, j as MemoryStatus, g as MemoryFile, E as EntityStructuredSection, k as BufferState, l as MetaState, m as MemoryActionEvent, n as MemoryLifecycleEvent, o as BufferSurpriseEvent, B as BehaviorSignalEvent, C as CompressionGuidelineOptimizerState, p as ContinuityIncidentOpenInput, q as ContinuityIncidentRecord, r as ContinuityIncidentCloseInput, s as ContinuityImprovementLoop, t as ContinuityLoopUpsertInput, u as ContinuityLoopReviewInput, F as FileHygieneConfig, v as EntityRelationship, w as EntityActivityEntry, x as EntityFile, y as AccessTrackingEntry, z as MemoryProjectionCurrentState, D as MemorySummary, T as TopicScore } from './types-D5VRAI04.js';
3
+ import { P as PluginConfig, M as MemoryCategory, I as ImportanceScore, h as MemoryLink, i as MemoryFrontmatter, j as MemoryStatus, g as MemoryFile, E as EntityStructuredSection, k as BufferState, l as MetaState, m as MemoryActionEvent, n as MemoryLifecycleEvent, o as BufferSurpriseEvent, B as BehaviorSignalEvent, C as CompressionGuidelineOptimizerState, p as ContinuityIncidentOpenInput, q as ContinuityIncidentRecord, r as ContinuityIncidentCloseInput, s as ContinuityImprovementLoop, t as ContinuityLoopUpsertInput, u as ContinuityLoopReviewInput, F as FileHygieneConfig, v as EntityRelationship, w as EntityActivityEntry, x as EntityFile, y as AccessTrackingEntry, z as MemoryProjectionCurrentState, D as MemorySummary, T as TopicScore } from './types-BCF2wqKa.js';
4
4
  import { ProjectedMemoryBrowseOptions, ProjectedMemoryBrowsePage, readProjectedGovernanceRecord } from './memory-projection-store.js';
5
5
  import './types-BliCnURB.js';
6
6
  import './index-DJ9QWMw-.js';
@@ -1,5 +1,5 @@
1
1
  import { ModelRegistry } from './model-registry.js';
2
- import { P as PluginConfig, G as GatewayConfig, O as TranscriptEntry, U as HourlySummary } from './types-D5VRAI04.js';
2
+ import { P as PluginConfig, G as GatewayConfig, _ as TranscriptEntry, a0 as HourlySummary } from './types-BCF2wqKa.js';
3
3
  import { TranscriptManager } from './transcript.js';
4
4
  import './types-BliCnURB.js';
5
5
  import './index-DJ9QWMw-.js';
@@ -1,17 +1,17 @@
1
1
  import {
2
2
  HourlySummarizer
3
- } from "./chunk-3VONWEQB.js";
3
+ } from "./chunk-HZVIYZYN.js";
4
4
  import "./chunk-XJNBEDFE.js";
5
5
  import "./chunk-XZ4WBBB5.js";
6
6
  import "./chunk-77NAFXUD.js";
7
7
  import "./chunk-FF4KLI5W.js";
8
- import "./chunk-KGIGRNR6.js";
8
+ import "./chunk-723OMPUI.js";
9
9
  import "./chunk-B5XMS73R.js";
10
10
  import "./chunk-7SI52C65.js";
11
11
  import "./chunk-L2EXJQJP.js";
12
- import "./chunk-RGMVMVMF.js";
13
12
  import "./chunk-RK6F44Y6.js";
14
13
  import "./chunk-NNVTUXEB.js";
14
+ import "./chunk-RGMVMVMF.js";
15
15
  import "./chunk-EYIEWJNI.js";
16
16
  import "./chunk-JUC24CTX.js";
17
17
  import "./chunk-2ODBA7MQ.js";
@@ -1,4 +1,4 @@
1
- import { U as HourlySummary } from './types-D5VRAI04.js';
1
+ import { a0 as HourlySummary } from './types-BCF2wqKa.js';
2
2
  import './types-BliCnURB.js';
3
3
  import './index-DJ9QWMw-.js';
4
4
 
@@ -1,4 +1,4 @@
1
- import { i as MemoryFrontmatter } from './types-D5VRAI04.js';
1
+ import { i as MemoryFrontmatter } from './types-BCF2wqKa.js';
2
2
  import { StorageManager } from './storage.js';
3
3
  import './types-BliCnURB.js';
4
4
  import './index-DJ9QWMw-.js';
@@ -1,4 +1,4 @@
1
- import { i as MemoryFrontmatter } from './types-D5VRAI04.js';
1
+ import { i as MemoryFrontmatter } from './types-BCF2wqKa.js';
2
2
  import './types-BliCnURB.js';
3
3
  import './index-DJ9QWMw-.js';
4
4
 
@@ -1,4 +1,4 @@
1
- import { N as BufferTurn, as as ConversationThread } from './types-D5VRAI04.js';
1
+ import { Y as BufferTurn, as as ConversationThread } from './types-BCF2wqKa.js';
2
2
  import './types-BliCnURB.js';
3
3
  import './index-DJ9QWMw-.js';
4
4
 
@@ -1,4 +1,4 @@
1
- import { g as MemoryFile } from './types-D5VRAI04.js';
1
+ import { g as MemoryFile } from './types-BCF2wqKa.js';
2
2
  import { StorageManager } from './storage.js';
3
3
  import { MemoryTier } from './tier-routing.js';
4
4
  import { SearchBackend } from './search/port.js';
@@ -1,4 +1,4 @@
1
- import { g as MemoryFile } from './types-D5VRAI04.js';
1
+ import { g as MemoryFile } from './types-BCF2wqKa.js';
2
2
  import { LifecycleSignals } from './lifecycle.js';
3
3
  import './types-BliCnURB.js';
4
4
  import './index-DJ9QWMw-.js';
package/dist/topics.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { g as MemoryFile, T as TopicScore } from './types-D5VRAI04.js';
1
+ import { g as MemoryFile, T as TopicScore } from './types-BCF2wqKa.js';
2
2
  import './types-BliCnURB.js';
3
3
  import './index-DJ9QWMw-.js';
4
4
 
@@ -1,4 +1,4 @@
1
- import { P as PluginConfig, O as TranscriptEntry, S as Checkpoint } from './types-D5VRAI04.js';
1
+ import { P as PluginConfig, _ as TranscriptEntry, $ as Checkpoint } from './types-BCF2wqKa.js';
2
2
  import { SessionIntegrityReport } from './session-integrity.js';
3
3
  import './types-BliCnURB.js';
4
4
  import './index-DJ9QWMw-.js';
@@ -3131,4 +3131,4 @@ interface HourlySummary {
3131
3131
  generatedAt: string;
3132
3132
  }
3133
3133
 
3134
- export { type BriefingFocus as $, type ActiveRecallChatType as A, type BehaviorSignalEvent as B, type CompressionGuidelineOptimizerState as C, type MemorySummary as D, type EntityStructuredSection as E, type FileHygieneConfig as F, type GatewayConfig as G, type RecallPlanMode as H, type ImportanceScore as I, type IdentityInjectionMode as J, type RecallDisclosure as K, type LiveConnectorsConfig as L, type MemoryCategory as M, type BufferTurn as N, type TranscriptEntry as O, type PluginConfig as P, type QmdSearchResult as Q, type RecallTierExplain as R, type Checkpoint as S, type TopicScore as T, type HourlySummary as U, type SessionObserverBandConfig as V, type LifecycleState as W, type VerificationState as X, type PolicyClass as Y, type BriefingSections as Z, type BriefingFollowup as _, type ActiveRecallQueryMode as a, type WearableNativeMemoryPage as a$, type CalendarSource as a0, type CalendarEvent as a1, type BriefingActiveThread as a2, type BriefingResult as a3, type BriefingRecentEntity as a4, type SecretRef as a5, type AgentAccessAuthToken as a6, type CompressionGuidelineOptimizerEventCounts as a7, type CompressionGuidelineOptimizerActionSummary as a8, type CompressionGuidelineOptimizerRuleUpdate as a9, type WearableSourceConnector as aA, type WearablesConfig as aB, type WearableSyncSummary as aC, type WearableSourceStatus as aD, type WearableDayTranscript as aE, type WearableCorrectionRule as aF, type CodingContext as aG, type BootstrapOptions as aH, type BootstrapResult as aI, type ConsolidationObservation as aJ, type EntityTimelineEntry as aK, type CodingModeConfig as aL, type WearableCleanupSettings as aM, type WearableDayTranscriptMeta as aN, type BriefingConfig as aO, type BriefingOpenCommitment as aP, type BriefingWindow as aQ, type CodexCompatConfig as aR, DEFAULT_RECALL_DISCLOSURE as aS, type ExtractedFact as aT, type MemoryActionEligibilitySource as aU, type MemoryObservation as aV, type MemoryScope as aW, RECALL_DISCLOSURE_LEVELS as aX, type WearableAuthCheck as aY, type WearableFetchOptions as aZ, type WearableFetchPage as a_, type MemoryActionType as aa, type EntityMention as ab, type EntitySchemaDefinition as ac, type EntitySchemaSectionDefinition as ad, type ImportanceLevel as ae, type ExtractionResult as af, type ConsolidationResult as ag, type DaySummaryResult as ah, type MemoryIntent as ai, type QmdSearchExplain as aj, type MemoryActionEligibilityContext as ak, type MemoryActionPolicyResult as al, type MemoryLifecycleEventType as am, type MemoryLifecycleStateSummary as an, type ModelProviderConfig as ao, type NativeKnowledgeConfig as ap, type RetrievalTier as aq, type SignalScanResult as ar, type ConversationThread as as, type DreamsStatusResult as at, type DreamsPhase as au, type DreamsRunResult as av, type WearableConversation as aw, type WearableSourceSettings as ax, type WearableNativeMemory as ay, type WearableMemoryMode as az, type ActiveRecallPromptStyle as b, type ReasoningEffort as b$, type WearableTranscriptSegment as b0, isRecallDisclosure as b1, type AgentAccessHttpConfig as b2, type AgentDefaultsConfig as b3, type AgentPersona as b4, type BehaviorLoopAdjustment as b5, type BehaviorSignalDirection as b6, type BehaviorSignalType as b7, type BriefingCalendarSourceError as b8, type BufferEntryState as b9, type ExtractedReasoningTraceStep as bA, type ExtractedRelationship as bB, type ExtractionPassSource as bC, type GitHubLiveConnectorConfig as bD, type GmailLiveConnectorConfig as bE, type GoogleDriveLiveConnectorConfig as bF, type HeartbeatConfig as bG, type HeartbeatDetectionMode as bH, type LlmTraceCallback as bI, type LlmTraceEvent as bJ, type MemoryActionOutcome as bK, type MemoryActionPolicyDecision as bL, type MemoryActionStatus as bM, type MemoryLinkType as bN, type MemoryOsPresetName as bO, type ModelApi as bP, type ModelDefinitionConfig as bQ, type ModelProviderAuthMode as bR, type NamespacePolicy as bS, type NativeKnowledgeFolderRuleConfig as bT, type NativeKnowledgeObsidianVaultConfig as bU, type NativeKnowledgeOpenClawWorkspaceConfig as bV, type NotionLiveConnectorConfig as bW, type PrincipalFromSessionKeyMode as bX, type PrincipalRule as bY, type ProceduralConfig as bZ, type QuestionEntry as b_, type CaptureMode as ba, type CodexCliReasoningEffort as bb, type CodexCompactionFlushMode as bc, type CodexConnectorConfig as bd, type CompressionGuidelineActivationState as be, type CompressionGuidelineOptimizerSourceWindow as bf, type ConfidenceTier as bg, type ConsolidationAction as bh, type ConsolidationItem as bi, type ContinuityIncidentState as bj, type ContinuityLoopCadence as bk, type ContinuityLoopStatus as bl, type ContradictionScanConfig as bm, type CronConversationRecallMode as bn, type CronRecallMode as bo, type DreamingConfig as bp, type DreamingNarrativePromptStyle as bq, type DreamsDeepSleepConfig as br, type DreamsLightSleepConfig as bs, type DreamsPhaseStatus as bt, type DreamsPhasesConfig as bu, type DreamsRemConfig as bv, type EngramTraceEvent as bw, type ExtractedProcedureStep as bx, type ExtractedQuestion as by, type ExtractedReasoningTrace as bz, type ActiveRecallThinking as c, type RecallPipelineConfig as c0, type RecallSectionConfig as c1, type RecallTraceEvent as c2, type RelevanceFeedback as c3, SPECULATIVE_TTL_DAYS as c4, type ScoredEntity as c5, type SemanticChunkingConfigShape as c6, type SignalLevel as c7, type SlotBehaviorConfig as c8, type SlotMismatchMode as c9, type TriggerMode as ca, confidenceTier as cb, type ActiveRecallModelFallbackPolicy as d, type BehaviorLoopPolicyState as e, type AgentPersonaModelConfig as f, type MemoryFile as g, type MemoryLink as h, type MemoryFrontmatter as i, type MemoryStatus as j, type BufferState as k, type MetaState as l, type MemoryActionEvent as m, type MemoryLifecycleEvent as n, type BufferSurpriseEvent as o, type ContinuityIncidentOpenInput as p, type ContinuityIncidentRecord as q, type ContinuityIncidentCloseInput as r, type ContinuityImprovementLoop as s, type ContinuityLoopUpsertInput as t, type ContinuityLoopReviewInput as u, type EntityRelationship as v, type EntityActivityEntry as w, type EntityFile as x, type AccessTrackingEntry as y, type MemoryProjectionCurrentState as z };
3134
+ export { type Checkpoint as $, type ActiveRecallChatType as A, type BehaviorSignalEvent as B, type CompressionGuidelineOptimizerState as C, type MemorySummary as D, type EntityStructuredSection as E, type FileHygieneConfig as F, type GatewayConfig as G, type RecallPlanMode as H, type ImportanceScore as I, type IdentityInjectionMode as J, type RecallDisclosure as K, type LiveConnectorsConfig as L, type MemoryCategory as M, type BriefingSections as N, type BriefingFollowup as O, type PluginConfig as P, type BriefingFocus as Q, type RecallTierExplain as R, type CalendarSource as S, type TopicScore as T, type CalendarEvent as U, type BriefingActiveThread as V, type BriefingResult as W, type BriefingRecentEntity as X, type BufferTurn as Y, type QmdSearchResult as Z, type TranscriptEntry as _, type ActiveRecallQueryMode as a, type WearableNativeMemoryPage as a$, type HourlySummary as a0, type SessionObserverBandConfig as a1, type LifecycleState as a2, type VerificationState as a3, type PolicyClass as a4, type SecretRef as a5, type AgentAccessAuthToken as a6, type CompressionGuidelineOptimizerEventCounts as a7, type CompressionGuidelineOptimizerActionSummary as a8, type CompressionGuidelineOptimizerRuleUpdate as a9, type WearableSourceConnector as aA, type WearablesConfig as aB, type WearableSyncSummary as aC, type WearableSourceStatus as aD, type WearableDayTranscript as aE, type WearableCorrectionRule as aF, type CodingContext as aG, type BootstrapOptions as aH, type BootstrapResult as aI, type ConsolidationObservation as aJ, type EntityTimelineEntry as aK, type CodingModeConfig as aL, type WearableCleanupSettings as aM, type WearableDayTranscriptMeta as aN, type BriefingConfig as aO, type BriefingOpenCommitment as aP, type BriefingWindow as aQ, type CodexCompatConfig as aR, DEFAULT_RECALL_DISCLOSURE as aS, type ExtractedFact as aT, type MemoryActionEligibilitySource as aU, type MemoryObservation as aV, type MemoryScope as aW, RECALL_DISCLOSURE_LEVELS as aX, type WearableAuthCheck as aY, type WearableFetchOptions as aZ, type WearableFetchPage as a_, type MemoryActionType as aa, type EntityMention as ab, type EntitySchemaDefinition as ac, type EntitySchemaSectionDefinition as ad, type ImportanceLevel as ae, type ExtractionResult as af, type ConsolidationResult as ag, type DaySummaryResult as ah, type MemoryIntent as ai, type QmdSearchExplain as aj, type MemoryActionEligibilityContext as ak, type MemoryActionPolicyResult as al, type MemoryLifecycleEventType as am, type MemoryLifecycleStateSummary as an, type ModelProviderConfig as ao, type NativeKnowledgeConfig as ap, type RetrievalTier as aq, type SignalScanResult as ar, type ConversationThread as as, type DreamsStatusResult as at, type DreamsPhase as au, type DreamsRunResult as av, type WearableConversation as aw, type WearableSourceSettings as ax, type WearableNativeMemory as ay, type WearableMemoryMode as az, type ActiveRecallPromptStyle as b, type ReasoningEffort as b$, type WearableTranscriptSegment as b0, isRecallDisclosure as b1, type AgentAccessHttpConfig as b2, type AgentDefaultsConfig as b3, type AgentPersona as b4, type BehaviorLoopAdjustment as b5, type BehaviorSignalDirection as b6, type BehaviorSignalType as b7, type BriefingCalendarSourceError as b8, type BufferEntryState as b9, type ExtractedReasoningTraceStep as bA, type ExtractedRelationship as bB, type ExtractionPassSource as bC, type GitHubLiveConnectorConfig as bD, type GmailLiveConnectorConfig as bE, type GoogleDriveLiveConnectorConfig as bF, type HeartbeatConfig as bG, type HeartbeatDetectionMode as bH, type LlmTraceCallback as bI, type LlmTraceEvent as bJ, type MemoryActionOutcome as bK, type MemoryActionPolicyDecision as bL, type MemoryActionStatus as bM, type MemoryLinkType as bN, type MemoryOsPresetName as bO, type ModelApi as bP, type ModelDefinitionConfig as bQ, type ModelProviderAuthMode as bR, type NamespacePolicy as bS, type NativeKnowledgeFolderRuleConfig as bT, type NativeKnowledgeObsidianVaultConfig as bU, type NativeKnowledgeOpenClawWorkspaceConfig as bV, type NotionLiveConnectorConfig as bW, type PrincipalFromSessionKeyMode as bX, type PrincipalRule as bY, type ProceduralConfig as bZ, type QuestionEntry as b_, type CaptureMode as ba, type CodexCliReasoningEffort as bb, type CodexCompactionFlushMode as bc, type CodexConnectorConfig as bd, type CompressionGuidelineActivationState as be, type CompressionGuidelineOptimizerSourceWindow as bf, type ConfidenceTier as bg, type ConsolidationAction as bh, type ConsolidationItem as bi, type ContinuityIncidentState as bj, type ContinuityLoopCadence as bk, type ContinuityLoopStatus as bl, type ContradictionScanConfig as bm, type CronConversationRecallMode as bn, type CronRecallMode as bo, type DreamingConfig as bp, type DreamingNarrativePromptStyle as bq, type DreamsDeepSleepConfig as br, type DreamsLightSleepConfig as bs, type DreamsPhaseStatus as bt, type DreamsPhasesConfig as bu, type DreamsRemConfig as bv, type EngramTraceEvent as bw, type ExtractedProcedureStep as bx, type ExtractedQuestion as by, type ExtractedReasoningTrace as bz, type ActiveRecallThinking as c, type RecallPipelineConfig as c0, type RecallSectionConfig as c1, type RecallTraceEvent as c2, type RelevanceFeedback as c3, SPECULATIVE_TTL_DAYS as c4, type ScoredEntity as c5, type SemanticChunkingConfigShape as c6, type SignalLevel as c7, type SlotBehaviorConfig as c8, type SlotMismatchMode as c9, type TriggerMode as ca, confidenceTier as cb, type ActiveRecallModelFallbackPolicy as d, type BehaviorLoopPolicyState as e, type AgentPersonaModelConfig as f, type MemoryFile as g, type MemoryLink as h, type MemoryFrontmatter as i, type MemoryStatus as j, type BufferState as k, type MetaState as l, type MemoryActionEvent as m, type MemoryLifecycleEvent as n, type BufferSurpriseEvent as o, type ContinuityIncidentOpenInput as p, type ContinuityIncidentRecord as q, type ContinuityIncidentCloseInput as r, type ContinuityImprovementLoop as s, type ContinuityLoopUpsertInput as t, type ContinuityLoopReviewInput as u, type EntityRelationship as v, type EntityActivityEntry as w, type EntityFile as x, type AccessTrackingEntry as y, type MemoryProjectionCurrentState as z };
package/dist/types.d.ts CHANGED
@@ -1,3 +1,3 @@
1
1
  import './types-BliCnURB.js';
2
2
  import './index-DJ9QWMw-.js';
3
- export { y as AccessTrackingEntry, A as ActiveRecallChatType, d as ActiveRecallModelFallbackPolicy, b as ActiveRecallPromptStyle, a as ActiveRecallQueryMode, c as ActiveRecallThinking, a6 as AgentAccessAuthToken, b2 as AgentAccessHttpConfig, b3 as AgentDefaultsConfig, b4 as AgentPersona, f as AgentPersonaModelConfig, b5 as BehaviorLoopAdjustment, e as BehaviorLoopPolicyState, b6 as BehaviorSignalDirection, B as BehaviorSignalEvent, b7 as BehaviorSignalType, aH as BootstrapOptions, aI as BootstrapResult, a2 as BriefingActiveThread, b8 as BriefingCalendarSourceError, aO as BriefingConfig, $ as BriefingFocus, _ as BriefingFollowup, aP as BriefingOpenCommitment, a4 as BriefingRecentEntity, a3 as BriefingResult, Z as BriefingSections, aQ as BriefingWindow, b9 as BufferEntryState, k as BufferState, o as BufferSurpriseEvent, N as BufferTurn, a1 as CalendarEvent, a0 as CalendarSource, ba as CaptureMode, S as Checkpoint, bb as CodexCliReasoningEffort, bc as CodexCompactionFlushMode, aR as CodexCompatConfig, bd as CodexConnectorConfig, aG as CodingContext, aL as CodingModeConfig, be as CompressionGuidelineActivationState, a8 as CompressionGuidelineOptimizerActionSummary, a7 as CompressionGuidelineOptimizerEventCounts, a9 as CompressionGuidelineOptimizerRuleUpdate, bf as CompressionGuidelineOptimizerSourceWindow, C as CompressionGuidelineOptimizerState, bg as ConfidenceTier, bh as ConsolidationAction, bi as ConsolidationItem, aJ as ConsolidationObservation, ag as ConsolidationResult, s as ContinuityImprovementLoop, r as ContinuityIncidentCloseInput, p as ContinuityIncidentOpenInput, q as ContinuityIncidentRecord, bj as ContinuityIncidentState, bk as ContinuityLoopCadence, u as ContinuityLoopReviewInput, bl as ContinuityLoopStatus, t as ContinuityLoopUpsertInput, bm as ContradictionScanConfig, as as ConversationThread, bn as CronConversationRecallMode, bo as CronRecallMode, aS as DEFAULT_RECALL_DISCLOSURE, ah as DaySummaryResult, bp as DreamingConfig, bq as DreamingNarrativePromptStyle, br as DreamsDeepSleepConfig, bs as DreamsLightSleepConfig, au as DreamsPhase, bt as DreamsPhaseStatus, bu as DreamsPhasesConfig, bv as DreamsRemConfig, av as DreamsRunResult, at as DreamsStatusResult, bw as EngramTraceEvent, w as EntityActivityEntry, x as EntityFile, ab as EntityMention, v as EntityRelationship, ac as EntitySchemaDefinition, ad as EntitySchemaSectionDefinition, E as EntityStructuredSection, aK as EntityTimelineEntry, aT as ExtractedFact, bx as ExtractedProcedureStep, by as ExtractedQuestion, bz as ExtractedReasoningTrace, bA as ExtractedReasoningTraceStep, bB as ExtractedRelationship, bC as ExtractionPassSource, af as ExtractionResult, F as FileHygieneConfig, G as GatewayConfig, bD as GitHubLiveConnectorConfig, bE as GmailLiveConnectorConfig, bF as GoogleDriveLiveConnectorConfig, bG as HeartbeatConfig, bH as HeartbeatDetectionMode, U as HourlySummary, J as IdentityInjectionMode, ae as ImportanceLevel, I as ImportanceScore, W as LifecycleState, L as LiveConnectorsConfig, bI as LlmTraceCallback, bJ as LlmTraceEvent, ak as MemoryActionEligibilityContext, aU as MemoryActionEligibilitySource, m as MemoryActionEvent, bK as MemoryActionOutcome, bL as MemoryActionPolicyDecision, al as MemoryActionPolicyResult, bM as MemoryActionStatus, aa as MemoryActionType, M as MemoryCategory, g as MemoryFile, i as MemoryFrontmatter, ai as MemoryIntent, n as MemoryLifecycleEvent, am as MemoryLifecycleEventType, an as MemoryLifecycleStateSummary, h as MemoryLink, bN as MemoryLinkType, aV as MemoryObservation, bO as MemoryOsPresetName, z as MemoryProjectionCurrentState, aW as MemoryScope, j as MemoryStatus, D as MemorySummary, l as MetaState, bP as ModelApi, bQ as ModelDefinitionConfig, bR as ModelProviderAuthMode, ao as ModelProviderConfig, bS as NamespacePolicy, ap as NativeKnowledgeConfig, bT as NativeKnowledgeFolderRuleConfig, bU as NativeKnowledgeObsidianVaultConfig, bV as NativeKnowledgeOpenClawWorkspaceConfig, bW as NotionLiveConnectorConfig, P as PluginConfig, Y as PolicyClass, bX as PrincipalFromSessionKeyMode, bY as PrincipalRule, bZ as ProceduralConfig, aj as QmdSearchExplain, Q as QmdSearchResult, b_ as QuestionEntry, aX as RECALL_DISCLOSURE_LEVELS, b$ as ReasoningEffort, K as RecallDisclosure, c0 as RecallPipelineConfig, H as RecallPlanMode, c1 as RecallSectionConfig, R as RecallTierExplain, c2 as RecallTraceEvent, c3 as RelevanceFeedback, aq as RetrievalTier, c4 as SPECULATIVE_TTL_DAYS, c5 as ScoredEntity, a5 as SecretRef, c6 as SemanticChunkingConfigShape, V as SessionObserverBandConfig, c7 as SignalLevel, ar as SignalScanResult, c8 as SlotBehaviorConfig, c9 as SlotMismatchMode, T as TopicScore, O as TranscriptEntry, ca as TriggerMode, X as VerificationState, cb as confidenceTier, b1 as isRecallDisclosure } from './types-D5VRAI04.js';
3
+ export { y as AccessTrackingEntry, A as ActiveRecallChatType, d as ActiveRecallModelFallbackPolicy, b as ActiveRecallPromptStyle, a as ActiveRecallQueryMode, c as ActiveRecallThinking, a6 as AgentAccessAuthToken, b2 as AgentAccessHttpConfig, b3 as AgentDefaultsConfig, b4 as AgentPersona, f as AgentPersonaModelConfig, b5 as BehaviorLoopAdjustment, e as BehaviorLoopPolicyState, b6 as BehaviorSignalDirection, B as BehaviorSignalEvent, b7 as BehaviorSignalType, aH as BootstrapOptions, aI as BootstrapResult, V as BriefingActiveThread, b8 as BriefingCalendarSourceError, aO as BriefingConfig, Q as BriefingFocus, O as BriefingFollowup, aP as BriefingOpenCommitment, X as BriefingRecentEntity, W as BriefingResult, N as BriefingSections, aQ as BriefingWindow, b9 as BufferEntryState, k as BufferState, o as BufferSurpriseEvent, Y as BufferTurn, U as CalendarEvent, S as CalendarSource, ba as CaptureMode, $ as Checkpoint, bb as CodexCliReasoningEffort, bc as CodexCompactionFlushMode, aR as CodexCompatConfig, bd as CodexConnectorConfig, aG as CodingContext, aL as CodingModeConfig, be as CompressionGuidelineActivationState, a8 as CompressionGuidelineOptimizerActionSummary, a7 as CompressionGuidelineOptimizerEventCounts, a9 as CompressionGuidelineOptimizerRuleUpdate, bf as CompressionGuidelineOptimizerSourceWindow, C as CompressionGuidelineOptimizerState, bg as ConfidenceTier, bh as ConsolidationAction, bi as ConsolidationItem, aJ as ConsolidationObservation, ag as ConsolidationResult, s as ContinuityImprovementLoop, r as ContinuityIncidentCloseInput, p as ContinuityIncidentOpenInput, q as ContinuityIncidentRecord, bj as ContinuityIncidentState, bk as ContinuityLoopCadence, u as ContinuityLoopReviewInput, bl as ContinuityLoopStatus, t as ContinuityLoopUpsertInput, bm as ContradictionScanConfig, as as ConversationThread, bn as CronConversationRecallMode, bo as CronRecallMode, aS as DEFAULT_RECALL_DISCLOSURE, ah as DaySummaryResult, bp as DreamingConfig, bq as DreamingNarrativePromptStyle, br as DreamsDeepSleepConfig, bs as DreamsLightSleepConfig, au as DreamsPhase, bt as DreamsPhaseStatus, bu as DreamsPhasesConfig, bv as DreamsRemConfig, av as DreamsRunResult, at as DreamsStatusResult, bw as EngramTraceEvent, w as EntityActivityEntry, x as EntityFile, ab as EntityMention, v as EntityRelationship, ac as EntitySchemaDefinition, ad as EntitySchemaSectionDefinition, E as EntityStructuredSection, aK as EntityTimelineEntry, aT as ExtractedFact, bx as ExtractedProcedureStep, by as ExtractedQuestion, bz as ExtractedReasoningTrace, bA as ExtractedReasoningTraceStep, bB as ExtractedRelationship, bC as ExtractionPassSource, af as ExtractionResult, F as FileHygieneConfig, G as GatewayConfig, bD as GitHubLiveConnectorConfig, bE as GmailLiveConnectorConfig, bF as GoogleDriveLiveConnectorConfig, bG as HeartbeatConfig, bH as HeartbeatDetectionMode, a0 as HourlySummary, J as IdentityInjectionMode, ae as ImportanceLevel, I as ImportanceScore, a2 as LifecycleState, L as LiveConnectorsConfig, bI as LlmTraceCallback, bJ as LlmTraceEvent, ak as MemoryActionEligibilityContext, aU as MemoryActionEligibilitySource, m as MemoryActionEvent, bK as MemoryActionOutcome, bL as MemoryActionPolicyDecision, al as MemoryActionPolicyResult, bM as MemoryActionStatus, aa as MemoryActionType, M as MemoryCategory, g as MemoryFile, i as MemoryFrontmatter, ai as MemoryIntent, n as MemoryLifecycleEvent, am as MemoryLifecycleEventType, an as MemoryLifecycleStateSummary, h as MemoryLink, bN as MemoryLinkType, aV as MemoryObservation, bO as MemoryOsPresetName, z as MemoryProjectionCurrentState, aW as MemoryScope, j as MemoryStatus, D as MemorySummary, l as MetaState, bP as ModelApi, bQ as ModelDefinitionConfig, bR as ModelProviderAuthMode, ao as ModelProviderConfig, bS as NamespacePolicy, ap as NativeKnowledgeConfig, bT as NativeKnowledgeFolderRuleConfig, bU as NativeKnowledgeObsidianVaultConfig, bV as NativeKnowledgeOpenClawWorkspaceConfig, bW as NotionLiveConnectorConfig, P as PluginConfig, a4 as PolicyClass, bX as PrincipalFromSessionKeyMode, bY as PrincipalRule, bZ as ProceduralConfig, aj as QmdSearchExplain, Z as QmdSearchResult, b_ as QuestionEntry, aX as RECALL_DISCLOSURE_LEVELS, b$ as ReasoningEffort, K as RecallDisclosure, c0 as RecallPipelineConfig, H as RecallPlanMode, c1 as RecallSectionConfig, R as RecallTierExplain, c2 as RecallTraceEvent, c3 as RelevanceFeedback, aq as RetrievalTier, c4 as SPECULATIVE_TTL_DAYS, c5 as ScoredEntity, a5 as SecretRef, c6 as SemanticChunkingConfigShape, a1 as SessionObserverBandConfig, c7 as SignalLevel, ar as SignalScanResult, c8 as SlotBehaviorConfig, c9 as SlotMismatchMode, T as TopicScore, _ as TranscriptEntry, ca as TriggerMode, a3 as VerificationState, cb as confidenceTier, b1 as isRecallDisclosure } from './types-BCF2wqKa.js';
@@ -1,5 +1,5 @@
1
1
  import { TierRoutingPolicy } from './tier-routing.js';
2
- import './types-D5VRAI04.js';
2
+ import './types-BCF2wqKa.js';
3
3
  import './types-BliCnURB.js';
4
4
  import './index-DJ9QWMw-.js';
5
5
  import './lifecycle.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@remnic/core",
3
- "version": "9.3.628",
3
+ "version": "9.3.629",
4
4
  "description": "Framework-agnostic Remnic memory engine — orchestrator, storage, extraction, search, trust zones",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -1814,6 +1814,13 @@ export class EngramAccessService {
1814
1814
  openaiApiKey: config.openaiApiKey,
1815
1815
  openaiBaseUrl: config.openaiBaseUrl,
1816
1816
  model: config.model,
1817
+ // Without a direct OpenAI key, route follow-ups through the configured
1818
+ // LLM chain (gateway model source or local LLM) — same fallback every
1819
+ // other LLM feature uses. A configured key keeps its precedence so
1820
+ // existing deployments are unchanged.
1821
+ followupGenerator: config.openaiApiKey
1822
+ ? undefined
1823
+ : this.orchestrator.briefingChainFollowupGenerator,
1817
1824
  });
1818
1825
 
1819
1826
  return {
package/src/briefing.ts CHANGED
@@ -19,6 +19,7 @@ import { readFile } from "node:fs/promises";
19
19
  import os from "node:os";
20
20
  import path from "node:path";
21
21
  import { log } from "./logger.js";
22
+ import { extractJsonCandidates } from "./json-extract.js";
22
23
  import { normalizeEntityName, StorageManager } from "./storage.js";
23
24
  import { readEnvVar, resolveHomeDir } from "./runtime/env.js";
24
25
  import type {
@@ -865,7 +866,8 @@ export async function buildBriefing(options: BuildBriefingOptions): Promise<Brie
865
866
  if (maxFollowups === 0 || options.allowLlm === false) {
866
867
  followupsUnavailableReason = "LLM follow-ups disabled by configuration";
867
868
  } else if (!options.openaiApiKey && !options.followupGenerator) {
868
- followupsUnavailableReason = "OPENAI_API_KEY not configured";
869
+ followupsUnavailableReason =
870
+ 'no LLM configured for follow-ups (set OPENAI_API_KEY, enable a local LLM, or use modelSource "gateway")';
869
871
  } else {
870
872
  try {
871
873
  const generator = options.followupGenerator ?? buildOpenAiFollowupGenerator({
@@ -1200,6 +1202,70 @@ function buildOpenAiFollowupGenerator(cfg: {
1200
1202
  };
1201
1203
  }
1202
1204
 
1205
+ /**
1206
+ * Minimal chat-completion surface shared by `FallbackLlmClient` (gateway
1207
+ * model chain) and `LocalLlmClient` (Ollama / OpenAI-compatible local
1208
+ * endpoints). Matches `Orchestrator.fastLlmForRerank` so briefing
1209
+ * follow-ups can ride the same routing as other fast-tier operations.
1210
+ */
1211
+ export interface BriefingChainLlmClient {
1212
+ chatCompletion(
1213
+ messages: Array<{ role: "system" | "user" | "assistant"; content: string }>,
1214
+ options?: {
1215
+ temperature?: number;
1216
+ maxTokens?: number;
1217
+ timeoutMs?: number;
1218
+ operation?: string;
1219
+ priority?: "background" | "recall-critical";
1220
+ },
1221
+ ): Promise<{ content: string } | null>;
1222
+ }
1223
+
1224
+ /**
1225
+ * Build a follow-up generator backed by the configured LLM chain
1226
+ * (gateway model source or local LLM) instead of a direct OpenAI key.
1227
+ *
1228
+ * Local models frequently wrap JSON in code fences or prose, so the
1229
+ * response is run through `extractJsonCandidates` and the first candidate
1230
+ * that parses into a valid `{ followups: [...] }` shape wins. Throws when
1231
+ * the chain returns nothing or no candidate parses — `buildBriefing`
1232
+ * catches and surfaces the message via `followupsUnavailableReason`.
1233
+ */
1234
+ export function buildChainFollowupGenerator(
1235
+ client: BriefingChainLlmClient,
1236
+ ): BriefingFollowupGenerator {
1237
+ return async ({ sections, windowLabel, maxFollowups }) => {
1238
+ const prompt = buildFollowupPrompt(sections, windowLabel, maxFollowups);
1239
+ const response = await client.chatCompletion(
1240
+ [
1241
+ { role: "system", content: FOLLOWUP_INSTRUCTIONS },
1242
+ { role: "user", content: prompt },
1243
+ ],
1244
+ {
1245
+ temperature: 0.2,
1246
+ maxTokens: 512,
1247
+ operation: "briefing-followups",
1248
+ priority: "background",
1249
+ },
1250
+ );
1251
+ if (!response?.content) {
1252
+ throw new Error("LLM chain returned no response");
1253
+ }
1254
+ const candidates = extractJsonCandidates(response.content);
1255
+ let lastError: unknown;
1256
+ for (const candidate of candidates) {
1257
+ try {
1258
+ return parseFollowupResponse(candidate, maxFollowups);
1259
+ } catch (err) {
1260
+ lastError = err;
1261
+ }
1262
+ }
1263
+ throw new Error(
1264
+ `LLM chain response contained no valid followups JSON: ${stringifyError(lastError ?? "no JSON candidates found")}`,
1265
+ );
1266
+ };
1267
+ }
1268
+
1203
1269
  const FOLLOWUP_INSTRUCTIONS = `You suggest short follow-up prompts for a daily context briefing.
1204
1270
  Return strict JSON of the form { "followups": [{ "text": "...", "rationale": "..." }] }.
1205
1271
  Rules:
package/src/index.ts CHANGED
@@ -507,6 +507,8 @@ export {
507
507
  briefingFilename,
508
508
  FileCalendarSource,
509
509
  BRIEFING_FORMAT_ALLOWED,
510
+ buildChainFollowupGenerator,
511
+ type BriefingChainLlmClient,
510
512
  type BuildBriefingOptions,
511
513
  type BriefingFollowupGenerator,
512
514
  type ParsedBriefingWindow,
@@ -1,4 +1,8 @@
1
1
  import { log } from "./logger.js";
2
+ import {
3
+ buildChainFollowupGenerator,
4
+ type BriefingFollowupGenerator,
5
+ } from "./briefing.js";
2
6
  import path from "node:path";
3
7
  import os from "node:os";
4
8
  import { createHash, randomBytes } from "node:crypto";
@@ -2516,6 +2520,28 @@ export class Orchestrator {
2516
2520
  };
2517
2521
  }
2518
2522
 
2523
+ /**
2524
+ * Build a briefing follow-up generator backed by the configured LLM chain
2525
+ * (gateway model source or local LLM). Returns `undefined` when no chain
2526
+ * is available so `buildBriefing` can surface a clear unavailable reason
2527
+ * instead of failing at call time. Used by the access service and CLI as
2528
+ * the fallback when no direct `openaiApiKey` is configured, so briefing
2529
+ * follow-ups ride the same routing as every other fast-tier LLM feature.
2530
+ */
2531
+ get briefingChainFollowupGenerator(): BriefingFollowupGenerator | undefined {
2532
+ // Plugin mode gates on `localLlmEnabled` alone: `LocalLlmClient.chatCompletion`
2533
+ // returns null when the master switch is off, so `localLlmFastEnabled` by
2534
+ // itself cannot serve requests (Cursor review on PR #1463).
2535
+ const chainAvailable =
2536
+ this.config.modelSource === "gateway"
2537
+ ? this._fastGatewayLlm?.isAvailable(
2538
+ this.config.fastGatewayAgentId || this.config.gatewayAgentId || undefined,
2539
+ ) === true
2540
+ : this.config.localLlmEnabled;
2541
+ if (!chainAvailable) return undefined;
2542
+ return buildChainFollowupGenerator(this.fastLlmForRerank);
2543
+ }
2544
+
2519
2545
  async initialize(): Promise<void> {
2520
2546
  // Recreate the deferred-ready gate on every initialize() call.
2521
2547
  // The same Orchestrator instance may be reused across stop/start cycles