@ariaflowagents/core 0.7.1 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (338) hide show
  1. package/README.md +90 -1
  2. package/dist/agents/Agent.d.ts +188 -9
  3. package/dist/agents/Agent.d.ts.map +1 -1
  4. package/dist/agents/Agent.js +246 -24
  5. package/dist/agents/Agent.js.map +1 -1
  6. package/dist/agents/CompositeAgent.d.ts +4 -3
  7. package/dist/agents/CompositeAgent.d.ts.map +1 -1
  8. package/dist/agents/CompositeAgent.js +19 -9
  9. package/dist/agents/CompositeAgent.js.map +1 -1
  10. package/dist/agents/FlowAgent.d.ts +3 -2
  11. package/dist/agents/FlowAgent.d.ts.map +1 -1
  12. package/dist/agents/FlowAgent.js +16 -6
  13. package/dist/agents/FlowAgent.js.map +1 -1
  14. package/dist/agents/TriageAgent.d.ts +8 -2
  15. package/dist/agents/TriageAgent.d.ts.map +1 -1
  16. package/dist/agents/TriageAgent.js +39 -6
  17. package/dist/agents/TriageAgent.js.map +1 -1
  18. package/dist/agents/index.d.ts +1 -1
  19. package/dist/agents/index.d.ts.map +1 -1
  20. package/dist/agents/index.js +0 -1
  21. package/dist/agents/index.js.map +1 -1
  22. package/dist/capabilities/AutoRetrieveCapability.d.ts +30 -0
  23. package/dist/capabilities/AutoRetrieveCapability.d.ts.map +1 -0
  24. package/dist/capabilities/AutoRetrieveCapability.js +36 -0
  25. package/dist/capabilities/AutoRetrieveCapability.js.map +1 -0
  26. package/dist/capabilities/ExtractionCapability.d.ts +25 -0
  27. package/dist/capabilities/ExtractionCapability.d.ts.map +1 -0
  28. package/dist/capabilities/ExtractionCapability.js +74 -0
  29. package/dist/capabilities/ExtractionCapability.js.map +1 -0
  30. package/dist/capabilities/FlowCapability.d.ts +81 -0
  31. package/dist/capabilities/FlowCapability.d.ts.map +1 -0
  32. package/dist/capabilities/FlowCapability.js +482 -0
  33. package/dist/capabilities/FlowCapability.js.map +1 -0
  34. package/dist/capabilities/GuardrailCapability.d.ts +30 -0
  35. package/dist/capabilities/GuardrailCapability.d.ts.map +1 -0
  36. package/dist/capabilities/GuardrailCapability.js +38 -0
  37. package/dist/capabilities/GuardrailCapability.js.map +1 -0
  38. package/dist/capabilities/HandoffCapability.d.ts +19 -0
  39. package/dist/capabilities/HandoffCapability.d.ts.map +1 -0
  40. package/dist/capabilities/HandoffCapability.js +58 -0
  41. package/dist/capabilities/HandoffCapability.js.map +1 -0
  42. package/dist/capabilities/LivePromptAssembler.d.ts +108 -0
  43. package/dist/capabilities/LivePromptAssembler.d.ts.map +1 -0
  44. package/dist/capabilities/LivePromptAssembler.js +157 -0
  45. package/dist/capabilities/LivePromptAssembler.js.map +1 -0
  46. package/dist/capabilities/TriageCapability.d.ts +16 -0
  47. package/dist/capabilities/TriageCapability.d.ts.map +1 -0
  48. package/dist/capabilities/TriageCapability.js +61 -0
  49. package/dist/capabilities/TriageCapability.js.map +1 -0
  50. package/dist/capabilities/adapters/ai-sdk.d.ts +14 -0
  51. package/dist/capabilities/adapters/ai-sdk.d.ts.map +1 -0
  52. package/dist/capabilities/adapters/ai-sdk.js +29 -0
  53. package/dist/capabilities/adapters/ai-sdk.js.map +1 -0
  54. package/dist/capabilities/adapters/gemini.d.ts +15 -0
  55. package/dist/capabilities/adapters/gemini.d.ts.map +1 -0
  56. package/dist/capabilities/adapters/gemini.js +40 -0
  57. package/dist/capabilities/adapters/gemini.js.map +1 -0
  58. package/dist/capabilities/index.d.ts +154 -0
  59. package/dist/capabilities/index.d.ts.map +1 -0
  60. package/dist/capabilities/index.js +128 -0
  61. package/dist/capabilities/index.js.map +1 -0
  62. package/dist/eval/EvalRunner.d.ts +12 -0
  63. package/dist/eval/EvalRunner.d.ts.map +1 -0
  64. package/dist/eval/EvalRunner.js +64 -0
  65. package/dist/eval/EvalRunner.js.map +1 -0
  66. package/dist/eval/scoring.d.ts +15 -0
  67. package/dist/eval/scoring.d.ts.map +1 -0
  68. package/dist/eval/scoring.js +152 -0
  69. package/dist/eval/scoring.js.map +1 -0
  70. package/dist/eval/types.d.ts +59 -0
  71. package/dist/eval/types.d.ts.map +1 -0
  72. package/dist/eval/types.js +2 -0
  73. package/dist/eval/types.js.map +1 -0
  74. package/dist/flows/FlowGraph.d.ts +3 -1
  75. package/dist/flows/FlowGraph.d.ts.map +1 -1
  76. package/dist/flows/FlowGraph.js +5 -0
  77. package/dist/flows/FlowGraph.js.map +1 -1
  78. package/dist/flows/FlowManager.d.ts +68 -1
  79. package/dist/flows/FlowManager.d.ts.map +1 -1
  80. package/dist/flows/FlowManager.js +499 -36
  81. package/dist/flows/FlowManager.js.map +1 -1
  82. package/dist/flows/extraction.d.ts +16 -1
  83. package/dist/flows/extraction.d.ts.map +1 -1
  84. package/dist/flows/extraction.js +34 -0
  85. package/dist/flows/extraction.js.map +1 -1
  86. package/dist/flows/index.d.ts +2 -0
  87. package/dist/flows/index.d.ts.map +1 -1
  88. package/dist/flows/index.js +1 -0
  89. package/dist/flows/index.js.map +1 -1
  90. package/dist/flows/validation.d.ts +1 -1
  91. package/dist/flows/validation.d.ts.map +1 -1
  92. package/dist/flows/validation.js +13 -1
  93. package/dist/flows/validation.js.map +1 -1
  94. package/dist/foundation/AgentDefinition.d.ts +18 -0
  95. package/dist/foundation/AgentDefinition.d.ts.map +1 -0
  96. package/dist/foundation/AgentDefinition.js +2 -0
  97. package/dist/foundation/AgentDefinition.js.map +1 -0
  98. package/dist/foundation/AgentStateController.d.ts +26 -0
  99. package/dist/foundation/AgentStateController.d.ts.map +1 -0
  100. package/dist/foundation/AgentStateController.js +2 -0
  101. package/dist/foundation/AgentStateController.js.map +1 -0
  102. package/dist/foundation/ConversationEventLog.d.ts +72 -0
  103. package/dist/foundation/ConversationEventLog.d.ts.map +1 -0
  104. package/dist/foundation/ConversationEventLog.js +2 -0
  105. package/dist/foundation/ConversationEventLog.js.map +1 -0
  106. package/dist/foundation/ConversationState.d.ts +31 -0
  107. package/dist/foundation/ConversationState.d.ts.map +1 -0
  108. package/dist/foundation/ConversationState.js +2 -0
  109. package/dist/foundation/ConversationState.js.map +1 -0
  110. package/dist/foundation/DefaultAgentStateController.d.ts +24 -0
  111. package/dist/foundation/DefaultAgentStateController.d.ts.map +1 -0
  112. package/dist/foundation/DefaultAgentStateController.js +49 -0
  113. package/dist/foundation/DefaultAgentStateController.js.map +1 -0
  114. package/dist/foundation/DefaultConversationEventLog.d.ts +28 -0
  115. package/dist/foundation/DefaultConversationEventLog.d.ts.map +1 -0
  116. package/dist/foundation/DefaultConversationEventLog.js +195 -0
  117. package/dist/foundation/DefaultConversationEventLog.js.map +1 -0
  118. package/dist/foundation/DefaultConversationState.d.ts +34 -0
  119. package/dist/foundation/DefaultConversationState.d.ts.map +1 -0
  120. package/dist/foundation/DefaultConversationState.js +100 -0
  121. package/dist/foundation/DefaultConversationState.js.map +1 -0
  122. package/dist/foundation/DefaultToolExecutor.d.ts +58 -0
  123. package/dist/foundation/DefaultToolExecutor.d.ts.map +1 -0
  124. package/dist/foundation/DefaultToolExecutor.js +128 -0
  125. package/dist/foundation/DefaultToolExecutor.js.map +1 -0
  126. package/dist/foundation/ToolExecutor.d.ts +44 -0
  127. package/dist/foundation/ToolExecutor.d.ts.map +1 -0
  128. package/dist/foundation/ToolExecutor.js +2 -0
  129. package/dist/foundation/ToolExecutor.js.map +1 -0
  130. package/dist/foundation/createFoundation.d.ts +33 -0
  131. package/dist/foundation/createFoundation.d.ts.map +1 -0
  132. package/dist/foundation/createFoundation.js +34 -0
  133. package/dist/foundation/createFoundation.js.map +1 -0
  134. package/dist/foundation/index.d.ts +15 -0
  135. package/dist/foundation/index.d.ts.map +1 -0
  136. package/dist/foundation/index.js +8 -0
  137. package/dist/foundation/index.js.map +1 -0
  138. package/dist/hooks/HookRunner.d.ts +5 -1
  139. package/dist/hooks/HookRunner.d.ts.map +1 -1
  140. package/dist/hooks/HookRunner.js +7 -0
  141. package/dist/hooks/HookRunner.js.map +1 -1
  142. package/dist/hooks/builtin/metrics.d.ts.map +1 -1
  143. package/dist/hooks/builtin/metrics.js +12 -0
  144. package/dist/hooks/builtin/metrics.js.map +1 -1
  145. package/dist/hooks/builtin/observability.d.ts +21 -0
  146. package/dist/hooks/builtin/observability.d.ts.map +1 -0
  147. package/dist/hooks/builtin/observability.js +535 -0
  148. package/dist/hooks/builtin/observability.js.map +1 -0
  149. package/dist/index.d.ts +24 -3
  150. package/dist/index.d.ts.map +1 -1
  151. package/dist/index.js +16 -2
  152. package/dist/index.js.map +1 -1
  153. package/dist/memory/MemoryService.d.ts +40 -0
  154. package/dist/memory/MemoryService.d.ts.map +1 -0
  155. package/dist/memory/MemoryService.js +2 -0
  156. package/dist/memory/MemoryService.js.map +1 -0
  157. package/dist/memory/index.d.ts +5 -0
  158. package/dist/memory/index.d.ts.map +1 -0
  159. package/dist/memory/index.js +3 -0
  160. package/dist/memory/index.js.map +1 -0
  161. package/dist/memory/preloadMemory.d.ts +17 -0
  162. package/dist/memory/preloadMemory.d.ts.map +1 -0
  163. package/dist/memory/preloadMemory.js +62 -0
  164. package/dist/memory/preloadMemory.js.map +1 -0
  165. package/dist/memory/stores/InMemoryMemoryService.d.ts +20 -0
  166. package/dist/memory/stores/InMemoryMemoryService.d.ts.map +1 -0
  167. package/dist/memory/stores/InMemoryMemoryService.js +92 -0
  168. package/dist/memory/stores/InMemoryMemoryService.js.map +1 -0
  169. package/dist/memory/types.d.ts +49 -0
  170. package/dist/memory/types.d.ts.map +1 -0
  171. package/dist/memory/types.js +8 -0
  172. package/dist/memory/types.js.map +1 -0
  173. package/dist/orchestration/DefaultOrchestrationAuthority.d.ts +91 -0
  174. package/dist/orchestration/DefaultOrchestrationAuthority.d.ts.map +1 -0
  175. package/dist/orchestration/DefaultOrchestrationAuthority.js +786 -0
  176. package/dist/orchestration/DefaultOrchestrationAuthority.js.map +1 -0
  177. package/dist/orchestration/OrchestrationAuthority.d.ts +119 -0
  178. package/dist/orchestration/OrchestrationAuthority.d.ts.map +1 -0
  179. package/dist/orchestration/OrchestrationAuthority.js +2 -0
  180. package/dist/orchestration/OrchestrationAuthority.js.map +1 -0
  181. package/dist/orchestration/RealtimeExtractionRunner.d.ts +25 -0
  182. package/dist/orchestration/RealtimeExtractionRunner.d.ts.map +1 -0
  183. package/dist/orchestration/RealtimeExtractionRunner.js +62 -0
  184. package/dist/orchestration/RealtimeExtractionRunner.js.map +1 -0
  185. package/dist/orchestration/index.d.ts +5 -0
  186. package/dist/orchestration/index.d.ts.map +1 -0
  187. package/dist/orchestration/index.js +4 -0
  188. package/dist/orchestration/index.js.map +1 -0
  189. package/dist/orchestration/types.d.ts +134 -0
  190. package/dist/orchestration/types.d.ts.map +1 -0
  191. package/dist/orchestration/types.js +2 -0
  192. package/dist/orchestration/types.js.map +1 -0
  193. package/dist/prompts/AgentPrompt.d.ts +110 -0
  194. package/dist/prompts/AgentPrompt.d.ts.map +1 -0
  195. package/dist/prompts/AgentPrompt.js +373 -0
  196. package/dist/prompts/AgentPrompt.js.map +1 -0
  197. package/dist/prompts/PromptAssembly.d.ts +119 -0
  198. package/dist/prompts/PromptAssembly.d.ts.map +1 -0
  199. package/dist/prompts/PromptAssembly.js +150 -0
  200. package/dist/prompts/PromptAssembly.js.map +1 -0
  201. package/dist/prompts/PromptBuilder.d.ts +22 -3
  202. package/dist/prompts/PromptBuilder.d.ts.map +1 -1
  203. package/dist/prompts/PromptBuilder.js +242 -13
  204. package/dist/prompts/PromptBuilder.js.map +1 -1
  205. package/dist/prompts/PromptRenderer.d.ts +43 -0
  206. package/dist/prompts/PromptRenderer.d.ts.map +1 -0
  207. package/dist/prompts/PromptRenderer.js +114 -0
  208. package/dist/prompts/PromptRenderer.js.map +1 -0
  209. package/dist/prompts/brandVoice.d.ts +10 -0
  210. package/dist/prompts/brandVoice.d.ts.map +1 -0
  211. package/dist/prompts/brandVoice.js +87 -0
  212. package/dist/prompts/brandVoice.js.map +1 -0
  213. package/dist/prompts/index.d.ts +11 -4
  214. package/dist/prompts/index.d.ts.map +1 -1
  215. package/dist/prompts/index.js +7 -2
  216. package/dist/prompts/index.js.map +1 -1
  217. package/dist/prompts/security.d.ts +5 -0
  218. package/dist/prompts/security.d.ts.map +1 -0
  219. package/dist/prompts/security.js +52 -0
  220. package/dist/prompts/security.js.map +1 -0
  221. package/dist/prompts/types.d.ts +65 -1
  222. package/dist/prompts/types.d.ts.map +1 -1
  223. package/dist/prompts/types.js +26 -0
  224. package/dist/prompts/types.js.map +1 -1
  225. package/dist/realtime/RealtimeAudioClient.d.ts +105 -0
  226. package/dist/realtime/RealtimeAudioClient.d.ts.map +1 -0
  227. package/dist/realtime/RealtimeAudioClient.js +15 -0
  228. package/dist/realtime/RealtimeAudioClient.js.map +1 -0
  229. package/dist/realtime/RealtimeRuntime.d.ts +136 -0
  230. package/dist/realtime/RealtimeRuntime.d.ts.map +1 -0
  231. package/dist/realtime/RealtimeRuntime.js +270 -0
  232. package/dist/realtime/RealtimeRuntime.js.map +1 -0
  233. package/dist/realtime/index.d.ts +4 -0
  234. package/dist/realtime/index.d.ts.map +1 -0
  235. package/dist/realtime/index.js +2 -0
  236. package/dist/realtime/index.js.map +1 -0
  237. package/dist/runtime/ContextBudget.d.ts +57 -0
  238. package/dist/runtime/ContextBudget.d.ts.map +1 -0
  239. package/dist/runtime/ContextBudget.js +103 -0
  240. package/dist/runtime/ContextBudget.js.map +1 -0
  241. package/dist/runtime/ContextManager.d.ts +8 -5
  242. package/dist/runtime/ContextManager.d.ts.map +1 -1
  243. package/dist/runtime/ContextManager.js +47 -14
  244. package/dist/runtime/ContextManager.js.map +1 -1
  245. package/dist/runtime/ExtractionEngine.d.ts +2 -1
  246. package/dist/runtime/ExtractionEngine.d.ts.map +1 -1
  247. package/dist/runtime/ExtractionEngine.js +11 -0
  248. package/dist/runtime/ExtractionEngine.js.map +1 -1
  249. package/dist/runtime/FlowExecutor.d.ts +22 -15
  250. package/dist/runtime/FlowExecutor.d.ts.map +1 -1
  251. package/dist/runtime/FlowExecutor.js +102 -149
  252. package/dist/runtime/FlowExecutor.js.map +1 -1
  253. package/dist/runtime/Runtime.d.ts +53 -78
  254. package/dist/runtime/Runtime.d.ts.map +1 -1
  255. package/dist/runtime/Runtime.js +272 -1406
  256. package/dist/runtime/Runtime.js.map +1 -1
  257. package/dist/runtime/SessionCache.d.ts +16 -0
  258. package/dist/runtime/SessionCache.d.ts.map +1 -0
  259. package/dist/runtime/SessionCache.js +49 -0
  260. package/dist/runtime/SessionCache.js.map +1 -0
  261. package/dist/runtime/SessionMutex.d.ts +37 -0
  262. package/dist/runtime/SessionMutex.d.ts.map +1 -0
  263. package/dist/runtime/SessionMutex.js +59 -0
  264. package/dist/runtime/SessionMutex.js.map +1 -0
  265. package/dist/runtime/StreamEmitter.d.ts +34 -0
  266. package/dist/runtime/StreamEmitter.d.ts.map +1 -0
  267. package/dist/runtime/StreamEmitter.js +91 -0
  268. package/dist/runtime/StreamEmitter.js.map +1 -0
  269. package/dist/runtime/handoffFilters.d.ts +60 -0
  270. package/dist/runtime/handoffFilters.d.ts.map +1 -0
  271. package/dist/runtime/handoffFilters.js +95 -0
  272. package/dist/runtime/handoffFilters.js.map +1 -0
  273. package/dist/runtime/pipeline/AgentExecuteStage.d.ts +22 -0
  274. package/dist/runtime/pipeline/AgentExecuteStage.d.ts.map +1 -0
  275. package/dist/runtime/pipeline/AgentExecuteStage.js +958 -0
  276. package/dist/runtime/pipeline/AgentExecuteStage.js.map +1 -0
  277. package/dist/runtime/pipeline/ContextAssembleStage.d.ts +26 -0
  278. package/dist/runtime/pipeline/ContextAssembleStage.d.ts.map +1 -0
  279. package/dist/runtime/pipeline/ContextAssembleStage.js +253 -0
  280. package/dist/runtime/pipeline/ContextAssembleStage.js.map +1 -0
  281. package/dist/runtime/pipeline/ContextGatherStage.d.ts +21 -0
  282. package/dist/runtime/pipeline/ContextGatherStage.d.ts.map +1 -0
  283. package/dist/runtime/pipeline/ContextGatherStage.js +161 -0
  284. package/dist/runtime/pipeline/ContextGatherStage.js.map +1 -0
  285. package/dist/runtime/pipeline/IntakeStage.d.ts +25 -0
  286. package/dist/runtime/pipeline/IntakeStage.d.ts.map +1 -0
  287. package/dist/runtime/pipeline/IntakeStage.js +126 -0
  288. package/dist/runtime/pipeline/IntakeStage.js.map +1 -0
  289. package/dist/runtime/pipeline/PostStreamStage.d.ts +26 -0
  290. package/dist/runtime/pipeline/PostStreamStage.d.ts.map +1 -0
  291. package/dist/runtime/pipeline/PostStreamStage.js +129 -0
  292. package/dist/runtime/pipeline/PostStreamStage.js.map +1 -0
  293. package/dist/runtime/pipeline/TurnPipeline.d.ts +54 -0
  294. package/dist/runtime/pipeline/TurnPipeline.d.ts.map +1 -0
  295. package/dist/runtime/pipeline/TurnPipeline.js +15 -0
  296. package/dist/runtime/pipeline/TurnPipeline.js.map +1 -0
  297. package/dist/runtime/pipeline/TurnServices.d.ts +48 -0
  298. package/dist/runtime/pipeline/TurnServices.d.ts.map +1 -0
  299. package/dist/runtime/pipeline/TurnServices.js +2 -0
  300. package/dist/runtime/pipeline/TurnServices.js.map +1 -0
  301. package/dist/runtime/pipeline/agentTypeGuards.d.ts +4 -0
  302. package/dist/runtime/pipeline/agentTypeGuards.d.ts.map +1 -0
  303. package/dist/runtime/pipeline/agentTypeGuards.js +7 -0
  304. package/dist/runtime/pipeline/agentTypeGuards.js.map +1 -0
  305. package/dist/runtime/pipeline/index.d.ts +11 -0
  306. package/dist/runtime/pipeline/index.d.ts.map +1 -0
  307. package/dist/runtime/pipeline/index.js +13 -0
  308. package/dist/runtime/pipeline/index.js.map +1 -0
  309. package/dist/runtime/pipeline/outputProcessing.d.ts +23 -0
  310. package/dist/runtime/pipeline/outputProcessing.d.ts.map +1 -0
  311. package/dist/runtime/pipeline/outputProcessing.js +63 -0
  312. package/dist/runtime/pipeline/outputProcessing.js.map +1 -0
  313. package/dist/runtime/pipeline/sessionUtils.d.ts +12 -0
  314. package/dist/runtime/pipeline/sessionUtils.d.ts.map +1 -0
  315. package/dist/runtime/pipeline/sessionUtils.js +73 -0
  316. package/dist/runtime/pipeline/sessionUtils.js.map +1 -0
  317. package/dist/tools/Tool.d.ts +7 -0
  318. package/dist/tools/Tool.d.ts.map +1 -1
  319. package/dist/tools/Tool.js +12 -3
  320. package/dist/tools/Tool.js.map +1 -1
  321. package/dist/tools/memory.d.ts +26 -0
  322. package/dist/tools/memory.d.ts.map +1 -0
  323. package/dist/tools/memory.js +51 -0
  324. package/dist/tools/memory.js.map +1 -0
  325. package/dist/types/index.d.ts +238 -9
  326. package/dist/types/index.d.ts.map +1 -1
  327. package/dist/types/index.js +4 -0
  328. package/dist/types/index.js.map +1 -1
  329. package/dist/types/telemetry.d.ts +107 -0
  330. package/dist/types/telemetry.d.ts.map +1 -1
  331. package/guides/AGENTS.md +173 -0
  332. package/guides/README.md +12 -0
  333. package/guides/TOOLS.md +93 -27
  334. package/package.json +25 -4
  335. package/dist/agents/LLMAgent.d.ts +0 -11
  336. package/dist/agents/LLMAgent.d.ts.map +0 -1
  337. package/dist/agents/LLMAgent.js +0 -31
  338. package/dist/agents/LLMAgent.js.map +0 -1
@@ -0,0 +1,270 @@
1
+ // ─── RealtimeRuntime ────────────────────────────────────────────────────────
2
+ /**
3
+ * Core-owned realtime execution facade.
4
+ *
5
+ * Accepts the same AgentConfig[] as the text Runtime, composes the
6
+ * OrchestrationAuthority for transport-agnostic semantics, and runs
7
+ * an event-driven loop over a RealtimeAudioClient.
8
+ *
9
+ * This facade is provider-agnostic — it works with any RealtimeAudioClient
10
+ * (Gemini, OpenAI, fake test client). Provider-specific concerns
11
+ * (wire format, reconnect, audio encoding) stay in the client adapter.
12
+ *
13
+ * @see RFC-REALTIME-RUNTIME-AUTHORITY.md §4.3
14
+ */
15
+ export class RealtimeRuntime {
16
+ authority;
17
+ activeSessions = new Map();
18
+ constructor(config) {
19
+ this.authority = config.authority;
20
+ }
21
+ /**
22
+ * Start a realtime session.
23
+ *
24
+ * This is the canonical entry point for persistent realtime execution.
25
+ * It:
26
+ * 1. Opens a session through the authority
27
+ * 2. Prepares initial model config (prompt + tools)
28
+ * 3. Connects the model client
29
+ * 4. Wires the event loop (audio, transcripts, tool calls, turns)
30
+ * 5. Returns a handle for external control
31
+ */
32
+ async startSession(params) {
33
+ const { modelClient, transport, sessionId, userId, agentId } = params;
34
+ // 1. Open session through authority — fires onStart + onAgentStart hooks
35
+ const handle = await this.authority.openSession({
36
+ sessionId,
37
+ userId,
38
+ agentId,
39
+ mode: 'realtime',
40
+ });
41
+ const callId = handle.session.id;
42
+ // 2. Prepare initial model config
43
+ const initialConfig = await this.authority.prepareRealtimeConfig(handle);
44
+ // 3. Track this session
45
+ const active = {
46
+ handle,
47
+ modelClient,
48
+ transport,
49
+ aborted: false,
50
+ };
51
+ this.activeSessions.set(callId, active);
52
+ // 4. Connect model client
53
+ await modelClient.connect(initialConfig);
54
+ // 5. Wire the event loop
55
+ this.wireEventLoop(active);
56
+ // 6. Return external handle
57
+ return {
58
+ sessionId: handle.session.id,
59
+ callId,
60
+ stop: () => this.stopSession(callId),
61
+ };
62
+ }
63
+ /**
64
+ * Stop a running session by call ID.
65
+ */
66
+ async stopSession(callId) {
67
+ const active = this.activeSessions.get(callId);
68
+ if (!active)
69
+ return;
70
+ active.aborted = true;
71
+ this.activeSessions.delete(callId);
72
+ // Disconnect model client
73
+ await active.modelClient.disconnect().catch(() => { });
74
+ // Close session through authority — fires lifecycle hooks, persists
75
+ await this.authority.closeSession(active.handle, { success: true });
76
+ // Close transport
77
+ try {
78
+ active.transport.close();
79
+ }
80
+ catch {
81
+ // Ignore transport close errors
82
+ }
83
+ }
84
+ /**
85
+ * Stop all active sessions.
86
+ */
87
+ async shutdown() {
88
+ const callIds = Array.from(this.activeSessions.keys());
89
+ await Promise.allSettled(callIds.map(id => this.stopSession(id)));
90
+ }
91
+ /**
92
+ * Get an active session by call ID.
93
+ */
94
+ getSession(callId) {
95
+ const active = this.activeSessions.get(callId);
96
+ if (!active)
97
+ return undefined;
98
+ return {
99
+ sessionId: active.handle.session.id,
100
+ callId,
101
+ stop: () => this.stopSession(callId),
102
+ };
103
+ }
104
+ // ─── Private: Event loop ────────────────────────────────────────────────────
105
+ /**
106
+ * Wire the event loop between transport, model client, and authority.
107
+ *
108
+ * This is the heart of the realtime runtime. It maps provider events
109
+ * to authority operations and authority outcomes to transport/model actions.
110
+ *
111
+ * The event loop matches the pseudocode in RFC-REALTIME-RUNTIME-AUTHORITY.md §5.
112
+ */
113
+ wireEventLoop(active) {
114
+ const { handle, modelClient, transport } = active;
115
+ // Transport audio → Model (user speaking)
116
+ transport.onAudio((data) => {
117
+ if (active.aborted)
118
+ return;
119
+ modelClient.sendAudio(data);
120
+ });
121
+ // Transport close → stop session
122
+ transport.onClose(() => {
123
+ this.stopSession(handle.session.id).catch((err) => {
124
+ console.error('[RealtimeRuntime] Error stopping session on transport close:', err);
125
+ });
126
+ });
127
+ // Model audio → Transport (assistant speaking)
128
+ modelClient.on('audio', (data) => {
129
+ if (active.aborted)
130
+ return;
131
+ transport.sendAudio(data);
132
+ });
133
+ // Model transcripts → Authority (record in session)
134
+ modelClient.on('transcript', (text, role) => {
135
+ if (active.aborted)
136
+ return;
137
+ if (role === 'user') {
138
+ this.authority.recordUserInput(handle, text).catch((err) => {
139
+ console.error('[RealtimeRuntime] Error recording user input:', err);
140
+ });
141
+ }
142
+ else {
143
+ this.authority.recordAssistantOutput(handle, text).catch((err) => {
144
+ console.error('[RealtimeRuntime] Error recording assistant output:', err);
145
+ });
146
+ }
147
+ });
148
+ // Model tool calls → Authority (execute + route + respond)
149
+ modelClient.on('tool-call', (id, name, args) => {
150
+ if (active.aborted)
151
+ return;
152
+ this.handleToolCall(active, id, name, args).catch((err) => {
153
+ console.error(`[RealtimeRuntime] Tool call error for ${name}:`, err);
154
+ });
155
+ });
156
+ // Model interrupted → clear transport buffer (barge-in)
157
+ modelClient.on('interrupted', () => {
158
+ if (active.aborted)
159
+ return;
160
+ console.log('[RealtimeRuntime] Barge-in detected — clearing audio buffer');
161
+ transport.clearAudioBuffer?.();
162
+ });
163
+ // Model turn complete → Authority (extraction, persistence, memory)
164
+ modelClient.on('turn-complete', () => {
165
+ if (active.aborted)
166
+ return;
167
+ this.authority.completeTurn(handle).catch((err) => {
168
+ console.error('[RealtimeRuntime] Error completing turn:', err);
169
+ });
170
+ });
171
+ // Model error → Authority (fail session)
172
+ modelClient.on('error', (error) => {
173
+ if (active.aborted)
174
+ return;
175
+ console.error(`[RealtimeRuntime] Model error: ${error}`);
176
+ this.authority.failSession(handle, new Error(error)).then(() => {
177
+ this.activeSessions.delete(handle.session.id);
178
+ try {
179
+ transport.close();
180
+ }
181
+ catch { /* ignore */ }
182
+ }).catch((err) => {
183
+ console.error('[RealtimeRuntime] Error failing session:', err);
184
+ });
185
+ });
186
+ // Model disconnected → stop session
187
+ modelClient.on('disconnected', () => {
188
+ if (active.aborted)
189
+ return;
190
+ this.stopSession(handle.session.id).catch((err) => {
191
+ console.error('[RealtimeRuntime] Error stopping session on disconnect:', err);
192
+ });
193
+ });
194
+ }
195
+ /**
196
+ * Handle a tool call from the model:
197
+ * 1. Execute through authority (enforcement, hooks, capability routing)
198
+ * 2. Send tool response back to model
199
+ * 3. Act on the outcome (reconfigure, handoff, end)
200
+ */
201
+ async handleToolCall(active, id, name, args) {
202
+ const { handle, modelClient } = active;
203
+ // Execute through authority — fires hooks, routes through CapabilityHost
204
+ const outcome = await this.authority.executeToolCall(handle, { id, name, args });
205
+ // Send tool response to model
206
+ modelClient.sendToolResponse([outcome.toolResponse]);
207
+ // Act on the outcome
208
+ switch (outcome.action.type) {
209
+ case 'reconfigure': {
210
+ // Flow transitioned — let the model finish responding to the tool
211
+ // result before reconfiguring. Without this, the model's acknowledgment
212
+ // (e.g., "I found your order") is lost in the reconnect.
213
+ if (outcome.nextRealtimeConfig) {
214
+ await this.waitForTurnComplete(modelClient, 10000);
215
+ await modelClient.updateConfig(outcome.nextRealtimeConfig);
216
+ }
217
+ if (modelClient.requestResponse) {
218
+ const transitionCtx = outcome.action.transition;
219
+ const instruction = transitionCtx
220
+ ? `You just transitioned to the "${transitionCtx.to}" phase. Continue with the new task using the available tools.`
221
+ : 'Continue with the current task.';
222
+ modelClient.requestResponse(instruction);
223
+ }
224
+ break;
225
+ }
226
+ case 'handoff': {
227
+ // Agent handoff — stop this session
228
+ // The caller (VoiceEngine) is responsible for starting a new session
229
+ // with the target agent.
230
+ await this.stopSession(handle.session.id);
231
+ break;
232
+ }
233
+ case 'end': {
234
+ // Flow or conversation ended — stop session
235
+ await this.stopSession(handle.session.id);
236
+ break;
237
+ }
238
+ case 'continue':
239
+ case 'extraction-complete':
240
+ default:
241
+ // Regular tool result — model drives the next response
242
+ break;
243
+ }
244
+ }
245
+ /**
246
+ * Wait for the model to emit turn-complete after a tool response.
247
+ * This gives the model time to generate a verbal acknowledgment
248
+ * before the session reconfigures (disconnect + reconnect).
249
+ *
250
+ * Times out if the model doesn't complete within the budget —
251
+ * this prevents hanging if the model enters a tool-call loop
252
+ * or the connection drops before turn-complete fires.
253
+ */
254
+ waitForTurnComplete(modelClient, timeoutMs) {
255
+ return new Promise((resolve) => {
256
+ const timer = setTimeout(() => {
257
+ modelClient.off('turn-complete', handler);
258
+ console.warn('[RealtimeRuntime] turn-complete timeout before reconfigure — proceeding');
259
+ resolve();
260
+ }, timeoutMs);
261
+ const handler = () => {
262
+ clearTimeout(timer);
263
+ modelClient.off('turn-complete', handler);
264
+ resolve();
265
+ };
266
+ modelClient.on('turn-complete', handler);
267
+ });
268
+ }
269
+ }
270
+ //# sourceMappingURL=RealtimeRuntime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RealtimeRuntime.js","sourceRoot":"","sources":["../../src/realtime/RealtimeRuntime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export type { RealtimeAudioClient, RealtimeSessionConfig, RealtimeAudioConfig, RealtimeToolResponse, RealtimeEventMap, } from './RealtimeAudioClient.js';
2
+ export { RealtimeRuntime } from './RealtimeRuntime.js';
3
+ export type { RealtimeRuntimeConfig, RealtimeTransportSession, StartRealtimeSessionParams, RealtimeSessionHandle, } from './RealtimeRuntime.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/realtime/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,mBAAmB,EACnB,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,YAAY,EACV,qBAAqB,EACrB,wBAAwB,EACxB,0BAA0B,EAC1B,qBAAqB,GACtB,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { RealtimeRuntime } from './RealtimeRuntime.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/realtime/index.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Context Budget System for AriaFlow.
3
+ *
4
+ * Manages token allocation across the multiple content sources that compose
5
+ * each LLM request. Ensures no single section can monopolize the context window.
6
+ */
7
+ /**
8
+ * ContextBudgetConfig defines the token allocation strategy for the LLM
9
+ * context window. It governs how the finite context window is partitioned
10
+ * across the multiple content sources that compose each LLM request.
11
+ */
12
+ export interface ContextBudgetConfig {
13
+ /** Total context window size of the target model, in tokens. Default: 128,000. */
14
+ modelContextWindow: number;
15
+ /** Tokens reserved for the LLM's response generation. Default: 4,096. */
16
+ responseReserve: number;
17
+ /** Maximum tokens allocated to auto-retrieve (RAG) context injection. Default: 4,000. */
18
+ maxAutoRetrieveTokens: number;
19
+ /** Maximum tokens allocated to the working memory section. Default: 2,000. */
20
+ maxWorkingMemoryTokens: number;
21
+ /** Maximum tokens allocated to the extraction snapshot section. Default: 2,000. */
22
+ maxExtractionTokens: number;
23
+ /** Maximum tokens allocated to cross-session long-term memory. Default: 2,000. */
24
+ maxLongTermMemoryTokens: number;
25
+ /**
26
+ * Maximum tokens allocated to the base system prompt.
27
+ * 0 means no limit — the base prompt is measured, not capped.
28
+ * Default: 0.
29
+ */
30
+ maxBasePromptTokens: number;
31
+ }
32
+ export declare const DEFAULT_CONTEXT_BUDGET: ContextBudgetConfig;
33
+ /**
34
+ * Token estimation function. Uses a rough 4:1 character-to-token ratio.
35
+ * Consistent with ContextManager.ts.
36
+ */
37
+ export declare function estimateTokenCount(text: string): number;
38
+ /**
39
+ * Computes the remaining token budget available for message history after
40
+ * all system prompt sections have been allocated.
41
+ *
42
+ * Floors at 1000 tokens to ensure the LLM always sees at least minimal
43
+ * conversation history.
44
+ */
45
+ export declare function computeMessageHistoryBudget(config: ContextBudgetConfig, measuredBasePromptTokens: number, measuredPolicyInjectionTokens: number): number;
46
+ /**
47
+ * Truncates a text string to fit within a token budget.
48
+ * Truncation is at the nearest sentence boundary when possible.
49
+ */
50
+ export declare function truncateToTokenBudget(text: string, maxTokens: number): string;
51
+ /**
52
+ * Budget-aware working memory formatter.
53
+ * Iterates entries in insertion order, dropping entries that exceed the budget.
54
+ * Entries are atomic — they are either fully included or fully dropped.
55
+ */
56
+ export declare function formatMemoryWithBudget(memory: Record<string, unknown>, maxTokens: number, allowlist?: string[]): string;
57
+ //# sourceMappingURL=ContextBudget.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ContextBudget.d.ts","sourceRoot":"","sources":["../../src/runtime/ContextBudget.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC,kFAAkF;IAClF,kBAAkB,EAAE,MAAM,CAAC;IAE3B,yEAAyE;IACzE,eAAe,EAAE,MAAM,CAAC;IAExB,yFAAyF;IACzF,qBAAqB,EAAE,MAAM,CAAC;IAE9B,8EAA8E;IAC9E,sBAAsB,EAAE,MAAM,CAAC;IAE/B,mFAAmF;IACnF,mBAAmB,EAAE,MAAM,CAAC;IAE5B,kFAAkF;IAClF,uBAAuB,EAAE,MAAM,CAAC;IAEhC;;;;OAIG;IACH,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED,eAAO,MAAM,sBAAsB,EAAE,mBAQpC,CAAC;AAEF;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGvD;AAED;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,mBAAmB,EAC3B,wBAAwB,EAAE,MAAM,EAChC,6BAA6B,EAAE,MAAM,GACpC,MAAM,CAuBR;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAqB7E;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,SAAS,EAAE,MAAM,EACjB,SAAS,CAAC,EAAE,MAAM,EAAE,GACnB,MAAM,CAiCR"}
@@ -0,0 +1,103 @@
1
+ /**
2
+ * Context Budget System for AriaFlow.
3
+ *
4
+ * Manages token allocation across the multiple content sources that compose
5
+ * each LLM request. Ensures no single section can monopolize the context window.
6
+ */
7
+ export const DEFAULT_CONTEXT_BUDGET = {
8
+ modelContextWindow: 128_000,
9
+ responseReserve: 4_096,
10
+ maxAutoRetrieveTokens: 4_000,
11
+ maxWorkingMemoryTokens: 2_000,
12
+ maxExtractionTokens: 2_000,
13
+ maxLongTermMemoryTokens: 2_000,
14
+ maxBasePromptTokens: 0,
15
+ };
16
+ /**
17
+ * Token estimation function. Uses a rough 4:1 character-to-token ratio.
18
+ * Consistent with ContextManager.ts.
19
+ */
20
+ export function estimateTokenCount(text) {
21
+ if (!text)
22
+ return 0;
23
+ return Math.ceil(text.length / 4);
24
+ }
25
+ /**
26
+ * Computes the remaining token budget available for message history after
27
+ * all system prompt sections have been allocated.
28
+ *
29
+ * Floors at 1000 tokens to ensure the LLM always sees at least minimal
30
+ * conversation history.
31
+ */
32
+ export function computeMessageHistoryBudget(config, measuredBasePromptTokens, measuredPolicyInjectionTokens) {
33
+ const systemBudget = measuredBasePromptTokens +
34
+ config.maxAutoRetrieveTokens +
35
+ config.maxWorkingMemoryTokens +
36
+ config.maxExtractionTokens +
37
+ config.maxLongTermMemoryTokens +
38
+ measuredPolicyInjectionTokens;
39
+ const available = config.modelContextWindow - config.responseReserve - systemBudget;
40
+ if (available < 1000) {
41
+ console.warn('[AriaFlow] Context budget exhausted: system prompt sections consume ' +
42
+ `${systemBudget} tokens, leaving only ${available} tokens for message ` +
43
+ 'history. Consider reducing maxAutoRetrieveTokens, maxWorkingMemoryTokens, ' +
44
+ 'or the base system prompt size.');
45
+ return Math.max(available, 1000);
46
+ }
47
+ return available;
48
+ }
49
+ /**
50
+ * Truncates a text string to fit within a token budget.
51
+ * Truncation is at the nearest sentence boundary when possible.
52
+ */
53
+ export function truncateToTokenBudget(text, maxTokens) {
54
+ if (maxTokens <= 0)
55
+ return '';
56
+ const estimated = estimateTokenCount(text);
57
+ if (estimated <= maxTokens)
58
+ return text;
59
+ // Convert token budget to approximate character count
60
+ const maxChars = maxTokens * 4;
61
+ const truncatedRegion = text.slice(0, maxChars);
62
+ // Find the last sentence boundary within the character budget
63
+ const lastSentenceEnd = Math.max(truncatedRegion.lastIndexOf('. '), truncatedRegion.lastIndexOf('.\n'));
64
+ if (lastSentenceEnd > maxChars * 0.5) {
65
+ return truncatedRegion.slice(0, lastSentenceEnd + 1) + '\n[truncated]';
66
+ }
67
+ // No good sentence boundary — hard truncate
68
+ return truncatedRegion + '\n[truncated]';
69
+ }
70
+ /**
71
+ * Budget-aware working memory formatter.
72
+ * Iterates entries in insertion order, dropping entries that exceed the budget.
73
+ * Entries are atomic — they are either fully included or fully dropped.
74
+ */
75
+ export function formatMemoryWithBudget(memory, maxTokens, allowlist) {
76
+ if (maxTokens <= 0)
77
+ return '';
78
+ const entries = Object.entries(memory);
79
+ const filteredEntries = allowlist
80
+ ? entries.filter(([key]) => allowlist.includes(key))
81
+ : entries;
82
+ if (filteredEntries.length === 0)
83
+ return '';
84
+ const headerLine = '\n\n## Known Information';
85
+ let tokenCount = estimateTokenCount(headerLine);
86
+ const lines = [headerLine];
87
+ let omitted = 0;
88
+ for (const [key, value] of filteredEntries) {
89
+ const line = `\n- **${key}**: ${typeof value === 'object' ? JSON.stringify(value) : value}`;
90
+ const lineTokens = estimateTokenCount(line);
91
+ if (tokenCount + lineTokens > maxTokens) {
92
+ omitted++;
93
+ continue;
94
+ }
95
+ lines.push(line);
96
+ tokenCount += lineTokens;
97
+ }
98
+ if (omitted > 0) {
99
+ lines.push(`\n[${omitted} entries omitted due to context budget]`);
100
+ }
101
+ return lines.join('');
102
+ }
103
+ //# sourceMappingURL=ContextBudget.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ContextBudget.js","sourceRoot":"","sources":["../../src/runtime/ContextBudget.ts"],"names":[],"mappings":"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"}
@@ -10,12 +10,15 @@ export interface ContextManagerOptions {
10
10
  keepSystemPrompt?: boolean;
11
11
  transformer?: MessageTransformer;
12
12
  }
13
+ export interface ContextManagerContext {
14
+ turnCount: number;
15
+ totalTokens: number;
16
+ sessionId: string;
17
+ /** When provided, overrides the configured maxTokens for this turn. */
18
+ maxTokensOverride?: number;
19
+ }
13
20
  export interface ContextManager {
14
- beforeTurn(messages: ModelMessage[], context: {
15
- turnCount: number;
16
- totalTokens: number;
17
- sessionId: string;
18
- }): Promise<ModelMessage[]> | ModelMessage[];
21
+ beforeTurn(messages: ModelMessage[], context: ContextManagerContext): Promise<ModelMessage[]> | ModelMessage[];
19
22
  }
20
23
  export declare function createContextManager(options?: ContextManagerOptions): ContextManager;
21
24
  export declare function createSummarizingContextManager(summarizeFn: (messages: ModelMessage[]) => Promise<string> | string, options?: {
@@ -1 +1 @@
1
- {"version":3,"file":"ContextManager.d.ts","sourceRoot":"","sources":["../../src/runtime/ContextManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAEvC,MAAM,MAAM,kBAAkB,GAAG,CAC/B,QAAQ,EAAE,YAAY,EAAE,EACxB,OAAO,EAAE;IACP,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB,KACE,OAAO,CAAC,YAAY,EAAE,CAAC,GAAG,YAAY,EAAE,CAAC;AAE9C,MAAM,WAAW,qBAAqB;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,WAAW,CAAC,EAAE,kBAAkB,CAAC;CAClC;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,CAAC,QAAQ,EAAE,YAAY,EAAE,EAAE,OAAO,EAAE;QAC5C,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;KACnB,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,GAAG,YAAY,EAAE,CAAC;CAC9C;AAoID,wBAAgB,oBAAoB,CAAC,OAAO,GAAE,qBAA0B,GAAG,cAAc,CAgFxF;AAED,wBAAgB,+BAA+B,CAC7C,WAAW,EAAE,CAAC,QAAQ,EAAE,YAAY,EAAE,KAAK,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,EACnE,OAAO,GAAE;IACP,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,WAAW,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;CAC1C,GACL,cAAc,CAoDhB"}
1
+ {"version":3,"file":"ContextManager.d.ts","sourceRoot":"","sources":["../../src/runtime/ContextManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAEvC,MAAM,MAAM,kBAAkB,GAAG,CAC/B,QAAQ,EAAE,YAAY,EAAE,EACxB,OAAO,EAAE;IACP,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB,KACE,OAAO,CAAC,YAAY,EAAE,CAAC,GAAG,YAAY,EAAE,CAAC;AAE9C,MAAM,WAAW,qBAAqB;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,WAAW,CAAC,EAAE,kBAAkB,CAAC;CAClC;AAED,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,uEAAuE;IACvE,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,CAAC,QAAQ,EAAE,YAAY,EAAE,EAAE,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,GAAG,YAAY,EAAE,CAAC;CAChH;AAoID,wBAAgB,oBAAoB,CAAC,OAAO,GAAE,qBAA0B,GAAG,cAAc,CAkHxF;AAED,wBAAgB,+BAA+B,CAC7C,WAAW,EAAE,CAAC,QAAQ,EAAE,YAAY,EAAE,KAAK,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,EACnE,OAAO,GAAE;IACP,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,WAAW,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;CAC1C,GACL,cAAc,CAoDhB"}
@@ -121,20 +121,39 @@ function estimateMessageTokens(message) {
121
121
  }
122
122
  export function createContextManager(options = {}) {
123
123
  const { maxTokens = 100000, maxMessages = 50, keepSystemPrompt = true, transformer, } = options;
124
- function pruneByTokenBudget(messages) {
125
- if (maxTokens === 0)
124
+ function pruneByTokenBudget(messages, tokenLimit) {
125
+ const effectiveLimit = tokenLimit ?? maxTokens;
126
+ if (effectiveLimit === 0)
126
127
  return messages;
127
- let tokenCount = 0;
128
- const pruned = [];
128
+ // Iterate back-to-front so we keep the most recent messages (recency bias).
129
+ // System messages are always kept regardless of budget.
130
+ const systemMessages = [];
131
+ const otherMessages = [];
129
132
  for (const msg of messages) {
130
- const msgTokens = estimateMessageTokens(msg);
131
- if (tokenCount + msgTokens > maxTokens) {
132
- continue;
133
+ if (msg.role === 'system' && keepSystemPrompt) {
134
+ systemMessages.push(msg);
135
+ }
136
+ else {
137
+ otherMessages.push(msg);
133
138
  }
139
+ }
140
+ let tokenCount = systemMessages.reduce((sum, m) => sum + estimateMessageTokens(m), 0);
141
+ let startIndex = otherMessages.length;
142
+ for (let i = otherMessages.length - 1; i >= 0; i--) {
143
+ const msgTokens = estimateMessageTokens(otherMessages[i]);
144
+ if (tokenCount + msgTokens > effectiveLimit)
145
+ break;
134
146
  tokenCount += msgTokens;
135
- pruned.push(msg);
147
+ startIndex = i;
136
148
  }
137
- return pruned;
149
+ // Walk startIndex backward to avoid splitting tool-call/result pairs.
150
+ while (startIndex > 0) {
151
+ const violation = firstToolBoundaryViolationIndex(otherMessages, startIndex);
152
+ if (violation < 0)
153
+ break;
154
+ startIndex = violation;
155
+ }
156
+ return [...systemMessages, ...otherMessages.slice(startIndex)];
138
157
  }
139
158
  function pruneByMessageCount(messages) {
140
159
  if (maxMessages === 0)
@@ -152,8 +171,15 @@ export function createContextManager(options = {}) {
152
171
  }
153
172
  }
154
173
  const keep = Math.min(maxMessages - systemMessages.length, otherMessages.length);
155
- const trimmed = otherMessages.slice(-keep);
156
- return [...systemMessages, ...trimmed];
174
+ let startIndex = otherMessages.length - keep;
175
+ // Walk startIndex backward to avoid splitting tool-call/result pairs.
176
+ while (startIndex > 0) {
177
+ const violation = firstToolBoundaryViolationIndex(otherMessages, startIndex);
178
+ if (violation < 0)
179
+ break;
180
+ startIndex = violation;
181
+ }
182
+ return [...systemMessages, ...otherMessages.slice(startIndex)];
157
183
  }
158
184
  function slidingWindow(messages, windowSize = 10) {
159
185
  if (windowSize === 0)
@@ -168,8 +194,15 @@ export function createContextManager(options = {}) {
168
194
  otherMessages.push(msg);
169
195
  }
170
196
  }
171
- const recent = otherMessages.slice(-windowSize);
172
- return [...systemMessages, ...recent];
197
+ let startIndex = Math.max(0, otherMessages.length - windowSize);
198
+ // Walk startIndex backward to avoid splitting tool-call/result pairs.
199
+ while (startIndex > 0) {
200
+ const violation = firstToolBoundaryViolationIndex(otherMessages, startIndex);
201
+ if (violation < 0)
202
+ break;
203
+ startIndex = violation;
204
+ }
205
+ return [...systemMessages, ...otherMessages.slice(startIndex)];
173
206
  }
174
207
  return {
175
208
  async beforeTurn(messages, context) {
@@ -177,7 +210,7 @@ export function createContextManager(options = {}) {
177
210
  if (transformer) {
178
211
  result = (await transformer(result, context)) || result;
179
212
  }
180
- result = pruneByTokenBudget(result);
213
+ result = pruneByTokenBudget(result, context.maxTokensOverride);
181
214
  result = pruneByMessageCount(result);
182
215
  result = slidingWindow(result, maxMessages);
183
216
  return result;
@@ -1 +1 @@
1
- {"version":3,"file":"ContextManager.js","sourceRoot":"","sources":["../../src/runtime/ContextManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ContextManager.js","sourceRoot":"","sources":["../../src/runtime/ContextManager.ts"],"names":[],"mappings":"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"}