@kilnai/runtime 0.1.16 → 0.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (211) hide show
  1. package/README.md +2 -2
  2. package/dist/channels/email-api.d.ts +29 -0
  3. package/dist/channels/email-api.d.ts.map +1 -0
  4. package/dist/channels/email-api.js +133 -0
  5. package/dist/channels/email-api.js.map +1 -0
  6. package/dist/channels/email-channel.d.ts +26 -0
  7. package/dist/channels/email-channel.d.ts.map +1 -0
  8. package/dist/channels/email-channel.js +59 -0
  9. package/dist/channels/email-channel.js.map +1 -0
  10. package/dist/channels/email-template.d.ts +10 -0
  11. package/dist/channels/email-template.d.ts.map +1 -0
  12. package/dist/channels/email-template.js +63 -0
  13. package/dist/channels/email-template.js.map +1 -0
  14. package/dist/channels/instagram-api.d.ts +29 -0
  15. package/dist/channels/instagram-api.d.ts.map +1 -0
  16. package/dist/channels/instagram-api.js +75 -0
  17. package/dist/channels/instagram-api.js.map +1 -0
  18. package/dist/channels/instagram-channel.d.ts +24 -0
  19. package/dist/channels/instagram-channel.d.ts.map +1 -0
  20. package/dist/channels/instagram-channel.js +55 -0
  21. package/dist/channels/instagram-channel.js.map +1 -0
  22. package/dist/channels/message-formatter.d.ts +17 -0
  23. package/dist/channels/message-formatter.d.ts.map +1 -1
  24. package/dist/channels/message-formatter.js +27 -0
  25. package/dist/channels/message-formatter.js.map +1 -1
  26. package/dist/channels/messenger-api.d.ts +27 -0
  27. package/dist/channels/messenger-api.d.ts.map +1 -0
  28. package/dist/channels/messenger-api.js +75 -0
  29. package/dist/channels/messenger-api.js.map +1 -0
  30. package/dist/channels/messenger-channel.d.ts +23 -0
  31. package/dist/channels/messenger-channel.d.ts.map +1 -0
  32. package/dist/channels/messenger-channel.js +55 -0
  33. package/dist/channels/messenger-channel.js.map +1 -0
  34. package/dist/enrichment/enrichment-runner.d.ts +17 -0
  35. package/dist/enrichment/enrichment-runner.d.ts.map +1 -0
  36. package/dist/enrichment/enrichment-runner.js +45 -0
  37. package/dist/enrichment/enrichment-runner.js.map +1 -0
  38. package/dist/enrichment/sqlite-enrichment-store.d.ts +14 -0
  39. package/dist/enrichment/sqlite-enrichment-store.d.ts.map +1 -0
  40. package/dist/enrichment/sqlite-enrichment-store.js +69 -0
  41. package/dist/enrichment/sqlite-enrichment-store.js.map +1 -0
  42. package/dist/gateway/audio-preprocessor.d.ts +11 -0
  43. package/dist/gateway/audio-preprocessor.d.ts.map +1 -0
  44. package/dist/gateway/audio-preprocessor.js +76 -0
  45. package/dist/gateway/audio-preprocessor.js.map +1 -0
  46. package/dist/gateway/auth-middleware.d.ts.map +1 -1
  47. package/dist/gateway/auth-middleware.js +10 -2
  48. package/dist/gateway/auth-middleware.js.map +1 -1
  49. package/dist/gateway/contact-memory-admin-routes.d.ts +9 -0
  50. package/dist/gateway/contact-memory-admin-routes.d.ts.map +1 -0
  51. package/dist/gateway/contact-memory-admin-routes.js +42 -0
  52. package/dist/gateway/contact-memory-admin-routes.js.map +1 -0
  53. package/dist/gateway/context-formatter.d.ts +5 -0
  54. package/dist/gateway/context-formatter.d.ts.map +1 -0
  55. package/dist/gateway/context-formatter.js +16 -0
  56. package/dist/gateway/context-formatter.js.map +1 -0
  57. package/dist/gateway/conversation-event-emitter.d.ts +4 -1
  58. package/dist/gateway/conversation-event-emitter.d.ts.map +1 -1
  59. package/dist/gateway/conversation-event-emitter.js +44 -13
  60. package/dist/gateway/conversation-event-emitter.js.map +1 -1
  61. package/dist/gateway/dev-routes.js +1 -1
  62. package/dist/gateway/dev-routes.js.map +1 -1
  63. package/dist/gateway/email-loop-guard.d.ts +10 -0
  64. package/dist/gateway/email-loop-guard.d.ts.map +1 -0
  65. package/dist/gateway/email-loop-guard.js +39 -0
  66. package/dist/gateway/email-loop-guard.js.map +1 -0
  67. package/dist/gateway/email-thread-store.d.ts +24 -0
  68. package/dist/gateway/email-thread-store.d.ts.map +1 -0
  69. package/dist/gateway/email-thread-store.js +34 -0
  70. package/dist/gateway/email-thread-store.js.map +1 -0
  71. package/dist/gateway/email-webhook-routes.d.ts +32 -0
  72. package/dist/gateway/email-webhook-routes.d.ts.map +1 -0
  73. package/dist/gateway/email-webhook-routes.js +411 -0
  74. package/dist/gateway/email-webhook-routes.js.map +1 -0
  75. package/dist/gateway/enrichment-admin-routes.d.ts +9 -0
  76. package/dist/gateway/enrichment-admin-routes.d.ts.map +1 -0
  77. package/dist/gateway/enrichment-admin-routes.js +41 -0
  78. package/dist/gateway/enrichment-admin-routes.js.map +1 -0
  79. package/dist/gateway/gateway-routes.d.ts +17 -1
  80. package/dist/gateway/gateway-routes.d.ts.map +1 -1
  81. package/dist/gateway/gateway-routes.js +41 -0
  82. package/dist/gateway/gateway-routes.js.map +1 -1
  83. package/dist/gateway/gateway-server.d.ts.map +1 -1
  84. package/dist/gateway/gateway-server.js +248 -12
  85. package/dist/gateway/gateway-server.js.map +1 -1
  86. package/dist/gateway/handoff-routes.d.ts.map +1 -1
  87. package/dist/gateway/handoff-routes.js +39 -0
  88. package/dist/gateway/handoff-routes.js.map +1 -1
  89. package/dist/gateway/instagram-webhook-routes.d.ts +30 -0
  90. package/dist/gateway/instagram-webhook-routes.d.ts.map +1 -0
  91. package/dist/gateway/instagram-webhook-routes.js +394 -0
  92. package/dist/gateway/instagram-webhook-routes.js.map +1 -0
  93. package/dist/gateway/knowledge-admin-routes.d.ts +9 -0
  94. package/dist/gateway/knowledge-admin-routes.d.ts.map +1 -0
  95. package/dist/gateway/knowledge-admin-routes.js +84 -0
  96. package/dist/gateway/knowledge-admin-routes.js.map +1 -0
  97. package/dist/gateway/knowledge-factory.d.ts +19 -0
  98. package/dist/gateway/knowledge-factory.d.ts.map +1 -0
  99. package/dist/gateway/knowledge-factory.js +122 -0
  100. package/dist/gateway/knowledge-factory.js.map +1 -0
  101. package/dist/gateway/message-pipeline.d.ts +22 -2
  102. package/dist/gateway/message-pipeline.d.ts.map +1 -1
  103. package/dist/gateway/message-pipeline.js +90 -4
  104. package/dist/gateway/message-pipeline.js.map +1 -1
  105. package/dist/gateway/messenger-webhook-routes.d.ts +30 -0
  106. package/dist/gateway/messenger-webhook-routes.d.ts.map +1 -0
  107. package/dist/gateway/messenger-webhook-routes.js +394 -0
  108. package/dist/gateway/messenger-webhook-routes.js.map +1 -0
  109. package/dist/gateway/meta-webhook-foundation.d.ts +12 -0
  110. package/dist/gateway/meta-webhook-foundation.d.ts.map +1 -0
  111. package/dist/gateway/meta-webhook-foundation.js +25 -0
  112. package/dist/gateway/meta-webhook-foundation.js.map +1 -0
  113. package/dist/gateway/mode-b-routes.d.ts +8 -0
  114. package/dist/gateway/mode-b-routes.d.ts.map +1 -1
  115. package/dist/gateway/mode-b-routes.js +53 -2
  116. package/dist/gateway/mode-b-routes.js.map +1 -1
  117. package/dist/gateway/outbound-routes.d.ts.map +1 -1
  118. package/dist/gateway/outbound-routes.js +49 -21
  119. package/dist/gateway/outbound-routes.js.map +1 -1
  120. package/dist/gateway/routing-test-routes.d.ts +10 -0
  121. package/dist/gateway/routing-test-routes.d.ts.map +1 -0
  122. package/dist/gateway/routing-test-routes.js +76 -0
  123. package/dist/gateway/routing-test-routes.js.map +1 -0
  124. package/dist/gateway/sqlite-email-thread-store.d.ts +13 -0
  125. package/dist/gateway/sqlite-email-thread-store.d.ts.map +1 -0
  126. package/dist/gateway/sqlite-email-thread-store.js +66 -0
  127. package/dist/gateway/sqlite-email-thread-store.js.map +1 -0
  128. package/dist/gateway/stt-factory.d.ts +3 -0
  129. package/dist/gateway/stt-factory.d.ts.map +1 -0
  130. package/dist/gateway/stt-factory.js +21 -0
  131. package/dist/gateway/stt-factory.js.map +1 -0
  132. package/dist/gateway/tenant-admin-routes.d.ts +1 -1
  133. package/dist/gateway/tenant-admin-routes.d.ts.map +1 -1
  134. package/dist/gateway/tenant-admin-routes.js +16 -2
  135. package/dist/gateway/tenant-admin-routes.js.map +1 -1
  136. package/dist/gateway/tenant-tool-factory.d.ts +10 -0
  137. package/dist/gateway/tenant-tool-factory.d.ts.map +1 -0
  138. package/dist/gateway/tenant-tool-factory.js +55 -0
  139. package/dist/gateway/tenant-tool-factory.js.map +1 -0
  140. package/dist/gateway/webhook-dedup.d.ts +13 -0
  141. package/dist/gateway/webhook-dedup.d.ts.map +1 -0
  142. package/dist/gateway/webhook-dedup.js +37 -0
  143. package/dist/gateway/webhook-dedup.js.map +1 -0
  144. package/dist/gateway/webhook-tool-executor.d.ts +17 -0
  145. package/dist/gateway/webhook-tool-executor.d.ts.map +1 -0
  146. package/dist/gateway/webhook-tool-executor.js +69 -0
  147. package/dist/gateway/webhook-tool-executor.js.map +1 -0
  148. package/dist/gateway/whatsapp-webhook-routes.d.ts +11 -0
  149. package/dist/gateway/whatsapp-webhook-routes.d.ts.map +1 -1
  150. package/dist/gateway/whatsapp-webhook-routes.js +158 -22
  151. package/dist/gateway/whatsapp-webhook-routes.js.map +1 -1
  152. package/dist/gateway/ws-tenant-routes.d.ts +9 -0
  153. package/dist/gateway/ws-tenant-routes.d.ts.map +1 -1
  154. package/dist/gateway/ws-tenant-routes.js +149 -6
  155. package/dist/gateway/ws-tenant-routes.js.map +1 -1
  156. package/dist/index.d.ts +47 -3
  157. package/dist/index.d.ts.map +1 -1
  158. package/dist/index.js +28 -1
  159. package/dist/index.js.map +1 -1
  160. package/dist/observability/composite-event-store.d.ts +13 -0
  161. package/dist/observability/composite-event-store.d.ts.map +1 -0
  162. package/dist/observability/composite-event-store.js +37 -0
  163. package/dist/observability/composite-event-store.js.map +1 -0
  164. package/dist/observability/prometheus-collector.d.ts +33 -0
  165. package/dist/observability/prometheus-collector.d.ts.map +1 -0
  166. package/dist/observability/prometheus-collector.js +169 -0
  167. package/dist/observability/prometheus-collector.js.map +1 -0
  168. package/dist/session/agent-handoff-summarizer.d.ts +11 -0
  169. package/dist/session/agent-handoff-summarizer.d.ts.map +1 -0
  170. package/dist/session/agent-handoff-summarizer.js +26 -0
  171. package/dist/session/agent-handoff-summarizer.js.map +1 -0
  172. package/dist/session/mode-b-orchestrator.d.ts +47 -1
  173. package/dist/session/mode-b-orchestrator.d.ts.map +1 -1
  174. package/dist/session/mode-b-orchestrator.js +286 -18
  175. package/dist/session/mode-b-orchestrator.js.map +1 -1
  176. package/dist/session/mode-b-session.d.ts +24 -4
  177. package/dist/session/mode-b-session.d.ts.map +1 -1
  178. package/dist/session/mode-b-session.js +37 -4
  179. package/dist/session/mode-b-session.js.map +1 -1
  180. package/dist/session/session-registry.d.ts +3 -2
  181. package/dist/session/session-registry.d.ts.map +1 -1
  182. package/dist/session/session-registry.js +35 -2
  183. package/dist/session/session-registry.js.map +1 -1
  184. package/dist/session/session-serializer.d.ts.map +1 -1
  185. package/dist/session/session-serializer.js +4 -0
  186. package/dist/session/session-serializer.js.map +1 -1
  187. package/dist/tenant/agent-resolver.d.ts +26 -0
  188. package/dist/tenant/agent-resolver.d.ts.map +1 -0
  189. package/dist/tenant/agent-resolver.js +232 -0
  190. package/dist/tenant/agent-resolver.js.map +1 -0
  191. package/dist/tenant/ping-pong-guard.d.ts +9 -0
  192. package/dist/tenant/ping-pong-guard.d.ts.map +1 -0
  193. package/dist/tenant/ping-pong-guard.js +30 -0
  194. package/dist/tenant/ping-pong-guard.js.map +1 -0
  195. package/dist/tenant/system-prompt-builder.d.ts +1 -1
  196. package/dist/tenant/system-prompt-builder.d.ts.map +1 -1
  197. package/dist/tenant/system-prompt-builder.js +13 -1
  198. package/dist/tenant/system-prompt-builder.js.map +1 -1
  199. package/dist/tenant/tenant-registry.d.ts +3 -0
  200. package/dist/tenant/tenant-registry.d.ts.map +1 -1
  201. package/dist/tenant/tenant-registry.js +83 -4
  202. package/dist/tenant/tenant-registry.js.map +1 -1
  203. package/dist/tenant/tenant-router.d.ts +27 -0
  204. package/dist/tenant/tenant-router.d.ts.map +1 -0
  205. package/dist/tenant/tenant-router.js +72 -0
  206. package/dist/tenant/tenant-router.js.map +1 -0
  207. package/dist/utils/hmac.d.ts +1 -0
  208. package/dist/utils/hmac.d.ts.map +1 -1
  209. package/dist/utils/hmac.js +3 -0
  210. package/dist/utils/hmac.js.map +1 -1
  211. package/package.json +2 -2
@@ -1,4 +1,5 @@
1
1
  import { MODEL_PRICING, extractText } from "@kilnai/core";
2
+ import { executeWithRetry, scoreComplexity } from "@kilnai/core";
2
3
  const DEFAULT_MAX_TOOL_ROUNDS = 10;
3
4
  export class ModeBOrchestrator {
4
5
  deps;
@@ -30,7 +31,7 @@ export class ModeBOrchestrator {
30
31
  this._tools = [...existing, ...additions];
31
32
  }
32
33
  }
33
- async processMessage(session, userParts, recalledMemory, callBuiltinTools) {
34
+ async processMessage(session, userParts, recalledMemory, callBuiltinTools, perCallConfig) {
34
35
  // AI guard: skip LLM when session is not ai_active
35
36
  if (session.sessionMode !== "ai_active") {
36
37
  // Auto-reopen resolved sessions on new user message
@@ -66,24 +67,109 @@ export class ModeBOrchestrator {
66
67
  this._callBuiltinTools = callBuiltinTools;
67
68
  const hasBuiltins = (this.deps.builtinTools?.size ?? 0) + (callBuiltinTools?.size ?? 0) > 0;
68
69
  const hasMcp = (this.deps.mcpClients?.length ?? 0) > 0;
69
- const hasTools = (this._tools?.length ?? 0) > 0 && (hasBuiltins || hasMcp);
70
+ // Merge per-call additional tools (webhook tools, tenant tools)
71
+ let baseTools = this._tools;
72
+ if (perCallConfig?.additionalTools && perCallConfig.additionalTools.length > 0) {
73
+ const existing = baseTools ?? [];
74
+ const existingNames = new Set(existing.map(t => t.name));
75
+ const additions = perCallConfig.additionalTools.filter(t => !existingNames.has(t.name));
76
+ baseTools = additions.length > 0 ? [...existing, ...additions] : existing;
77
+ }
78
+ const hasTools = (baseTools?.length ?? 0) > 0 && (hasBuiltins || hasMcp);
79
+ // ToolRAG: filter tools once per message (fail-open)
80
+ let effectiveTools = baseTools;
81
+ if (this.deps.toolRAG && this.deps.capabilityMap && effectiveTools && effectiveTools.length > 30) {
82
+ try {
83
+ const userText = extractText(userParts);
84
+ const allCapabilities = Array.from(this.deps.capabilityMap.values());
85
+ const selected = await this.deps.toolRAG.selectTools(userText, allCapabilities);
86
+ if (selected.length > 0) {
87
+ const selectedNames = new Set(selected.map((s) => s.name));
88
+ effectiveTools = effectiveTools.filter((t) => selectedNames.has(t.name));
89
+ }
90
+ }
91
+ catch {
92
+ // Fail-open: use all tools if ToolRAG fails
93
+ }
94
+ }
95
+ // Model routing: select provider per-request
96
+ let effectiveProvider = this.deps.provider;
97
+ let routingDecisionResult;
98
+ if (perCallConfig?.modelOverride) {
99
+ // Explicit override takes precedence
100
+ const override = perCallConfig.modelOverride;
101
+ const poolProvider = this.deps.providerPool?.get(override.provider);
102
+ if (poolProvider) {
103
+ effectiveProvider = poolProvider;
104
+ }
105
+ routingDecisionResult = {
106
+ provider: override.provider,
107
+ model: override.model,
108
+ reasoning: "Explicit model override",
109
+ confidence: 1.0,
110
+ routingTier: "rule",
111
+ };
112
+ }
113
+ else if (this.deps.modelRouter) {
114
+ try {
115
+ const userText = extractText(userParts);
116
+ const complexity = scoreComplexity({
117
+ messageText: userText,
118
+ toolCount: effectiveTools?.length ?? 0,
119
+ turnDepth: session.messageCount,
120
+ });
121
+ const routingRequest = {
122
+ tenantId: perCallConfig?.tenantId ?? "default",
123
+ complexity,
124
+ hasTools,
125
+ toolCount: effectiveTools?.length ?? 0,
126
+ requiresStreaming: false,
127
+ };
128
+ const decision = this.deps.modelRouter.route(routingRequest);
129
+ routingDecisionResult = decision;
130
+ // Look up provider from pool
131
+ const poolProvider = this.deps.providerPool?.get(decision.provider);
132
+ if (poolProvider) {
133
+ effectiveProvider = poolProvider;
134
+ }
135
+ // Emit model_routed event
136
+ this.emitModelRouted(session.id, decision);
137
+ }
138
+ catch {
139
+ // Fail-open: use default provider if routing fails
140
+ }
141
+ }
70
142
  let totalInputTokens = 0;
71
143
  let totalOutputTokens = 0;
72
144
  let totalCacheRead = 0;
73
145
  let totalCacheWrite = 0;
146
+ const toolExecutions = [];
74
147
  for (let round = 0; round < this.maxToolRounds; round++) {
148
+ // Budget check (skip first round -- let the user's message through)
149
+ if (round > 0 && this.deps.budgetChecker) {
150
+ try {
151
+ const budget = await this.deps.budgetChecker();
152
+ if (!budget.allowed) {
153
+ this.emitError(session.id, budget.message ?? "Budget exhausted");
154
+ break;
155
+ }
156
+ }
157
+ catch {
158
+ // Fail-open: continue if budget check fails
159
+ }
160
+ }
75
161
  const messages = [...session.conversationHistory];
76
- const response = await this.deps.provider.createMessage({
162
+ const response = await effectiveProvider.createMessage({
77
163
  system,
78
164
  messages,
79
- tools: hasTools ? this._tools : undefined,
165
+ tools: hasTools ? effectiveTools : undefined,
80
166
  maxTokens: this.deps.maxTokens,
81
167
  });
82
168
  totalInputTokens += response.inputTokens;
83
169
  totalOutputTokens += response.outputTokens;
84
170
  totalCacheRead += response.cacheReadTokens;
85
171
  totalCacheWrite += response.cacheWriteTokens;
86
- this.emitCostUpdate(session.id, totalInputTokens, totalOutputTokens, totalCacheRead, totalCacheWrite);
172
+ this.emitCostUpdate(session.id, totalInputTokens, totalOutputTokens, totalCacheRead, totalCacheWrite, session.activeAgentId ?? undefined);
87
173
  if (!hasTools || response.toolCalls.length === 0) {
88
174
  session.addAssistantMessage(response.parts);
89
175
  // Post-LLM escalation check (only if pre-LLM didn't trigger)
@@ -111,6 +197,10 @@ export class ModeBOrchestrator {
111
197
  queued: false,
112
198
  escalation,
113
199
  contextSummary,
200
+ toolExecutions: toolExecutions.length > 0 ? toolExecutions : undefined,
201
+ routingDecision: routingDecisionResult
202
+ ? { provider: routingDecisionResult.provider, model: routingDecisionResult.model, routingTier: routingDecisionResult.routingTier, reasoning: routingDecisionResult.reasoning }
203
+ : undefined,
114
204
  };
115
205
  }
116
206
  // Build assistant message with text + tool_use parts
@@ -127,27 +217,144 @@ export class ModeBOrchestrator {
127
217
  // Execute tools and build tool_result parts
128
218
  const resultParts = [];
129
219
  for (const tc of response.toolCalls) {
130
- this.emitToolCalled(session.id, tc.name);
220
+ // Tool allowlist check
221
+ if (perCallConfig?.toolAllowlist && !perCallConfig.toolAllowlist.has(tc.name)) {
222
+ resultParts.push({
223
+ type: "tool_result",
224
+ toolUseId: tc.id,
225
+ content: `Tool "${tc.name}" is not available for this tenant`,
226
+ isError: true,
227
+ });
228
+ continue;
229
+ }
230
+ // Authorization check
231
+ const capability = this.deps.capabilityMap?.get(tc.name);
232
+ if (this.deps.toolAuthorizer) {
233
+ const authResult = this.deps.toolAuthorizer.authorize(tc.name, capability?.annotations);
234
+ this.emitToolAuthorized(session.id, tc.name, authResult.level, authResult.allowed, authResult.reason);
235
+ if (!authResult.allowed) {
236
+ resultParts.push({
237
+ type: "tool_result",
238
+ toolUseId: tc.id,
239
+ content: `Authorization denied: ${authResult.reason}`,
240
+ isError: true,
241
+ });
242
+ continue;
243
+ }
244
+ }
245
+ // Rate limit check
246
+ if (perCallConfig?.rateLimiter && perCallConfig?.tenantId) {
247
+ const rateResult = perCallConfig.rateLimiter.check(perCallConfig.tenantId, tc.name);
248
+ if (!rateResult.allowed) {
249
+ const retryAfterSec = Math.ceil((rateResult.retryAfterMs ?? 60_000) / 1000);
250
+ resultParts.push({
251
+ type: "tool_result",
252
+ toolUseId: tc.id,
253
+ content: `Rate limit exceeded for tool "${tc.name}". Try again in ${retryAfterSec} seconds.`,
254
+ isError: true,
255
+ });
256
+ continue;
257
+ }
258
+ }
259
+ // Resolve cacheTtl before try block so it's accessible for both check and store
260
+ const cacheTtl = capability?.annotations?.cacheTtl;
261
+ // Cache check (fail-open)
262
+ if (cacheTtl && this.deps.toolCache) {
263
+ try {
264
+ const cached = this.deps.toolCache.get(tc.name, tc.input);
265
+ if (cached !== undefined) {
266
+ const resultString = typeof cached === "string" ? cached : JSON.stringify(cached);
267
+ this.emitToolCacheHit(session.id, tc.name, cacheTtl);
268
+ resultParts.push({
269
+ type: "tool_result",
270
+ toolUseId: tc.id,
271
+ content: resultString,
272
+ isError: false,
273
+ });
274
+ continue;
275
+ }
276
+ }
277
+ catch {
278
+ // Fail-open: proceed to execute tool if cache throws
279
+ }
280
+ }
281
+ const annotations = capability?.annotations
282
+ ? { readOnly: capability.annotations.readOnly, destructive: capability.annotations.destructive, idempotent: capability.annotations.idempotent }
283
+ : undefined;
284
+ this.emitToolCalled(session.id, tc.name, tc.input, annotations);
131
285
  const startMs = Date.now();
132
286
  try {
133
- const result = await this.executeTool(tc);
287
+ let resultValue;
288
+ let retryAttempt;
289
+ // Use executeWithRetry if capability has retry config
290
+ if (capability?.retry) {
291
+ const executor = (name, input) => this.executeTool({ id: tc.id, name, input });
292
+ const fallbackExecutor = capability.retry.fallback
293
+ ? (name, input) => this.executeTool({ id: tc.id, name, input })
294
+ : undefined;
295
+ const execResult = await executeWithRetry(tc.name, tc.input, executor, capability.retry, fallbackExecutor);
296
+ resultValue = execResult.result;
297
+ retryAttempt = execResult.attempts > 1 ? execResult.attempts : undefined;
298
+ }
299
+ else {
300
+ resultValue = await this.executeTool(tc);
301
+ }
134
302
  const durationMs = Date.now() - startMs;
135
- this.emitToolResult(session.id, tc.name, durationMs, true);
303
+ let resultString = typeof resultValue === "string" ? resultValue : JSON.stringify(resultValue);
304
+ // Result sanitization
305
+ let sanitized = false;
306
+ if (this.deps.toolResultSanitizer) {
307
+ const sanitizationResult = await this.deps.toolResultSanitizer.sanitize(resultString);
308
+ if (sanitizationResult.sanitized) {
309
+ resultString = sanitizationResult.content;
310
+ sanitized = true;
311
+ }
312
+ }
313
+ this.emitToolResult(session.id, tc.name, durationMs, true, resultString.slice(0, 200), false, retryAttempt);
314
+ toolExecutions.push({
315
+ toolName: tc.name,
316
+ durationMs,
317
+ success: true,
318
+ resultSummary: resultString.slice(0, 200),
319
+ });
320
+ // Audit log
321
+ this.appendAudit(tc.name, durationMs, sanitized ? "success_sanitized" : "success");
136
322
  resultParts.push({
137
323
  type: "tool_result",
138
324
  toolUseId: tc.id,
139
- content: typeof result === "string" ? result : JSON.stringify(result),
325
+ content: resultString,
140
326
  isError: false,
141
327
  });
328
+ // Cache store (fail-open)
329
+ if (cacheTtl && this.deps.toolCache) {
330
+ try {
331
+ this.deps.toolCache.set(tc.name, tc.input, resultValue, cacheTtl);
332
+ }
333
+ catch {
334
+ // Fail-open: don't break execution if cache store fails
335
+ }
336
+ }
337
+ // Record rate limit usage after successful execution
338
+ if (perCallConfig?.rateLimiter && perCallConfig?.tenantId) {
339
+ perCallConfig.rateLimiter.record(perCallConfig.tenantId, tc.name);
340
+ }
142
341
  }
143
342
  catch (err) {
144
343
  const durationMs = Date.now() - startMs;
145
- this.emitToolResult(session.id, tc.name, durationMs, false);
344
+ const errMsg = err instanceof Error ? err.message : String(err);
345
+ this.emitToolResult(session.id, tc.name, durationMs, false, errMsg.slice(0, 200), true);
346
+ toolExecutions.push({
347
+ toolName: tc.name,
348
+ durationMs,
349
+ success: false,
350
+ resultSummary: errMsg.slice(0, 200),
351
+ });
146
352
  this.emitError(session.id, `Tool "${tc.name}" failed: ${err}`);
353
+ this.appendAudit(tc.name, durationMs, "error");
147
354
  resultParts.push({
148
355
  type: "tool_result",
149
356
  toolUseId: tc.id,
150
- content: `Error: ${err instanceof Error ? err.message : String(err)}`,
357
+ content: `Error: ${errMsg}`,
151
358
  isError: true,
152
359
  });
153
360
  }
@@ -157,7 +364,7 @@ export class ModeBOrchestrator {
157
364
  // Safety: max rounds exceeded, return last available response
158
365
  this.emitError(session.id, `Max tool rounds (${this.maxToolRounds}) exceeded`);
159
366
  const finalMessages = [...session.conversationHistory];
160
- const finalResponse = await this.deps.provider.createMessage({
367
+ const finalResponse = await effectiveProvider.createMessage({
161
368
  system,
162
369
  messages: finalMessages,
163
370
  maxTokens: this.deps.maxTokens,
@@ -166,7 +373,7 @@ export class ModeBOrchestrator {
166
373
  totalOutputTokens += finalResponse.outputTokens;
167
374
  totalCacheRead += finalResponse.cacheReadTokens;
168
375
  totalCacheWrite += finalResponse.cacheWriteTokens;
169
- this.emitCostUpdate(session.id, totalInputTokens, totalOutputTokens, totalCacheRead, totalCacheWrite);
376
+ this.emitCostUpdate(session.id, totalInputTokens, totalOutputTokens, totalCacheRead, totalCacheWrite, session.activeAgentId ?? undefined);
170
377
  session.addAssistantMessage(finalResponse.parts);
171
378
  // Post-LLM escalation check (only if pre-LLM didn't trigger)
172
379
  if (!escalation && this.deps.escalationDetector) {
@@ -193,6 +400,10 @@ export class ModeBOrchestrator {
193
400
  queued: false,
194
401
  escalation,
195
402
  contextSummary,
403
+ toolExecutions: toolExecutions.length > 0 ? toolExecutions : undefined,
404
+ routingDecision: routingDecisionResult
405
+ ? { provider: routingDecisionResult.provider, model: routingDecisionResult.model, routingTier: routingDecisionResult.routingTier, reasoning: routingDecisionResult.reasoning }
406
+ : undefined,
196
407
  };
197
408
  }
198
409
  async executeTool(tc) {
@@ -216,16 +427,30 @@ export class ModeBOrchestrator {
216
427
  }
217
428
  throw new Error(`Tool "${tc.name}" not found`);
218
429
  }
219
- emitToolCalled(sessionId, toolName) {
430
+ emitToolCalled(sessionId, toolName, toolInput, annotations) {
220
431
  const event = {
221
432
  type: "tool_called",
222
433
  toolName,
223
434
  timestamp: new Date(),
224
435
  sessionId,
436
+ ...(toolInput ? { toolInput } : {}),
437
+ ...(annotations ? { annotations } : {}),
438
+ };
439
+ this.deps.eventBus?.emit(event);
440
+ }
441
+ emitToolAuthorized(sessionId, toolName, level, allowed, reason) {
442
+ const event = {
443
+ type: "tool_authorized",
444
+ toolName,
445
+ level,
446
+ allowed,
447
+ reason,
448
+ timestamp: new Date(),
449
+ sessionId,
225
450
  };
226
451
  this.deps.eventBus?.emit(event);
227
452
  }
228
- emitToolResult(sessionId, toolName, durationMs, success) {
453
+ emitToolResult(sessionId, toolName, durationMs, success, resultSummary, isError, retryAttempt) {
229
454
  const event = {
230
455
  type: "tool_result",
231
456
  toolName,
@@ -233,9 +458,39 @@ export class ModeBOrchestrator {
233
458
  success,
234
459
  timestamp: new Date(),
235
460
  sessionId,
461
+ ...(resultSummary ? { resultSummary } : {}),
462
+ ...(isError !== undefined ? { isError } : {}),
463
+ ...(retryAttempt !== undefined ? { retryAttempt } : {}),
236
464
  };
237
465
  this.deps.eventBus?.emit(event);
238
466
  }
467
+ emitToolCacheHit(sessionId, toolName, cacheTtl) {
468
+ const event = {
469
+ type: "tool_cache_hit",
470
+ toolName,
471
+ cacheTtl,
472
+ timestamp: new Date(),
473
+ sessionId,
474
+ };
475
+ this.deps.eventBus?.emit(event);
476
+ }
477
+ appendAudit(toolName, durationMs, outcome) {
478
+ if (!this.deps.auditLog)
479
+ return;
480
+ try {
481
+ this.deps.auditLog.append({
482
+ timestamp: new Date(),
483
+ action: "tool_execution",
484
+ actor: "orchestrator",
485
+ outcome,
486
+ resource: toolName,
487
+ metadata: { durationMs },
488
+ });
489
+ }
490
+ catch {
491
+ // Non-critical: don't fail tool execution for audit
492
+ }
493
+ }
239
494
  computeTotalCostUsd(inputTokens, outputTokens, cacheReadTokens, cacheWriteTokens) {
240
495
  const pricing = this.resolvedPricing;
241
496
  if (!pricing)
@@ -256,7 +511,7 @@ export class ModeBOrchestrator {
256
511
  }
257
512
  return pricing;
258
513
  }
259
- emitCostUpdate(sessionId, inputTokens, outputTokens, cacheReadTokens, cacheWriteTokens) {
514
+ emitCostUpdate(sessionId, inputTokens, outputTokens, cacheReadTokens, cacheWriteTokens, agentId) {
260
515
  const totalCostUsd = this.computeTotalCostUsd(inputTokens, outputTokens, cacheReadTokens, cacheWriteTokens);
261
516
  const model = this.deps.model ?? "unknown";
262
517
  const event = {
@@ -265,11 +520,24 @@ export class ModeBOrchestrator {
265
520
  outputTokens,
266
521
  cacheReadTokens,
267
522
  totalCostUsd,
268
- byRole: {
269
- assistant: { model, calls: 1, costUsd: totalCostUsd },
523
+ byRoleModel: {
524
+ [`assistant:${model}`]: { model, calls: 1, costUsd: totalCostUsd },
270
525
  },
271
526
  timestamp: new Date(),
272
527
  sessionId,
528
+ ...(agentId ? { agentId } : {}),
529
+ };
530
+ this.deps.eventBus?.emit(event);
531
+ }
532
+ emitModelRouted(sessionId, decision) {
533
+ const event = {
534
+ type: "model_routed",
535
+ model: decision.model,
536
+ provider: decision.provider,
537
+ routingTier: decision.routingTier,
538
+ reason: decision.reasoning,
539
+ timestamp: new Date(),
540
+ sessionId,
273
541
  };
274
542
  this.deps.eventBus?.emit(event);
275
543
  }
@@ -1 +1 @@
1
- {"version":3,"file":"mode-b-orchestrator.js","sourceRoot":"","sources":["../../src/session/mode-b-orchestrator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mode-b-orchestrator.js","sourceRoot":"","sources":["../../src/session/mode-b-orchestrator.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAS1D,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAKjE,MAAM,uBAAuB,GAAG,EAAE,CAAC;AAyDnC,MAAM,OAAO,iBAAiB;IACX,IAAI,CAAmB;IACvB,aAAa,CAAS;IAC/B,MAAM,CAAwC;IAC9C,iBAAiB,CAA6E;IAEtG,YAAY,IAAsB;QAChC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,IAAI,uBAAuB,CAAC;QACnE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAChB,OAAO,CAAC,IAAI,CAAC,yIAAyI,CAAC,CAAC;QAC1J,CAAC;IACH,CAAC;IAED,6FAA6F;IAC7F,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;IACzB,CAAC;IAED,gCAAgC;IAChC,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,kGAAkG;IAClG,aAAa,CAAC,QAAmC;QAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;QACnC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACnD,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAC7D,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,QAAQ,EAAE,GAAG,SAAS,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IAED,KAAK,CAAC,cAAc,CAClB,OAAqB,EACrB,SAAiC,EACjC,cAAuB,EACvB,gBAA4F,EAC5F,aAAiC;QAEjC,mDAAmD;QACnD,IAAI,OAAO,CAAC,WAAW,KAAK,WAAW,EAAE,CAAC;YACxC,oDAAoD;YACpD,IAAI,OAAO,CAAC,WAAW,KAAK,UAAU,EAAE,CAAC;gBACvC,OAAO,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;YACtC,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;gBAClC,OAAO;oBACL,KAAK,EAAE,EAAE;oBACT,WAAW,EAAE,CAAC;oBACd,YAAY,EAAE,CAAC;oBACf,eAAe,EAAE,CAAC;oBAClB,gBAAgB,EAAE,CAAC;oBACnB,MAAM,EAAE,IAAI;iBACb,CAAC;YACJ,CAAC;QACH,CAAC;QAED,2BAA2B;QAC3B,IAAI,UAAwC,CAAC;QAC7C,IAAI,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACjC,MAAM,QAAQ,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;YACxC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;YAClE,IAAI,MAAM;gBAAE,UAAU,GAAG,MAAM,CAAC;QAClC,CAAC;QAED,OAAO,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QAElC,IAAI,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;QAClC,IAAI,cAAc,EAAE,CAAC;YACnB,MAAM,IAAI,+BAA+B,GAAG,cAAc,CAAC;QAC7D,CAAC;QAED,6CAA6C;QAC7C,IAAI,CAAC,iBAAiB,GAAG,gBAAgB,CAAC;QAC1C,MAAM,WAAW,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QAC5F,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QAEvD,gEAAgE;QAChE,IAAI,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC;QAC5B,IAAI,aAAa,EAAE,eAAe,IAAI,aAAa,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/E,MAAM,QAAQ,GAAG,SAAS,IAAI,EAAE,CAAC;YACjC,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YACzD,MAAM,SAAS,GAAG,aAAa,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YACxF,SAAS,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;QAC5E,CAAC;QAED,MAAM,QAAQ,GAAG,CAAC,SAAS,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,IAAI,MAAM,CAAC,CAAC;QAEzE,qDAAqD;QACrD,IAAI,cAAc,GAAG,SAAS,CAAC;QAC/B,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,cAAc,IAAI,cAAc,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;YACjG,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;gBACxC,MAAM,eAAe,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC;gBACrE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;gBAChF,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACxB,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;oBAC3D,cAAc,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC3E,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,4CAA4C;YAC9C,CAAC;QACH,CAAC;QAED,6CAA6C;QAC7C,IAAI,iBAAiB,GAAoB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;QAC5D,IAAI,qBAAkD,CAAC;QAEvD,IAAI,aAAa,EAAE,aAAa,EAAE,CAAC;YACjC,qCAAqC;YACrC,MAAM,QAAQ,GAAG,aAAa,CAAC,aAAa,CAAC;YAC7C,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACpE,IAAI,YAAY,EAAE,CAAC;gBACjB,iBAAiB,GAAG,YAAY,CAAC;YACnC,CAAC;YACD,qBAAqB,GAAG;gBACtB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;gBAC3B,KAAK,EAAE,QAAQ,CAAC,KAAK;gBACrB,SAAS,EAAE,yBAAyB;gBACpC,UAAU,EAAE,GAAG;gBACf,WAAW,EAAE,MAAM;aACpB,CAAC;QACJ,CAAC;aAAM,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACjC,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;gBACxC,MAAM,UAAU,GAAG,eAAe,CAAC;oBACjC,WAAW,EAAE,QAAQ;oBACrB,SAAS,EAAE,cAAc,EAAE,MAAM,IAAI,CAAC;oBACtC,SAAS,EAAE,OAAO,CAAC,YAAY;iBAChC,CAAC,CAAC;gBACH,MAAM,cAAc,GAAG;oBACrB,QAAQ,EAAE,aAAa,EAAE,QAAQ,IAAI,SAAS;oBAC9C,UAAU;oBACV,QAAQ;oBACR,SAAS,EAAE,cAAc,EAAE,MAAM,IAAI,CAAC;oBACtC,iBAAiB,EAAE,KAAK;iBACzB,CAAC;gBACF,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;gBAC7D,qBAAqB,GAAG,QAAQ,CAAC;gBAEjC,6BAA6B;gBAC7B,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBACpE,IAAI,YAAY,EAAE,CAAC;oBACjB,iBAAiB,GAAG,YAAY,CAAC;gBACnC,CAAC;gBAED,0BAA0B;gBAC1B,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;YAC7C,CAAC;YAAC,MAAM,CAAC;gBACP,mDAAmD;YACrD,CAAC;QACH,CAAC;QAED,IAAI,gBAAgB,GAAG,CAAC,CAAC;QACzB,IAAI,iBAAiB,GAAG,CAAC,CAAC;QAC1B,IAAI,cAAc,GAAG,CAAC,CAAC;QACvB,IAAI,eAAe,GAAG,CAAC,CAAC;QAExB,MAAM,cAAc,GAA2B,EAAE,CAAC;QAElD,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE,KAAK,EAAE,EAAE,CAAC;YACxD,oEAAoE;YACpE,IAAI,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;gBACzC,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;oBAC/C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;wBACpB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,OAAO,IAAI,kBAAkB,CAAC,CAAC;wBACjE,MAAM;oBACR,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,4CAA4C;gBAC9C,CAAC;YACH,CAAC;YAED,MAAM,QAAQ,GAAG,CAAC,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;YAElD,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC,aAAa,CAAC;gBACrD,MAAM;gBACN,QAAQ;gBACR,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS;gBAC5C,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS;aAC/B,CAAC,CAAC;YAEH,gBAAgB,IAAI,QAAQ,CAAC,WAAW,CAAC;YACzC,iBAAiB,IAAI,QAAQ,CAAC,YAAY,CAAC;YAC3C,cAAc,IAAI,QAAQ,CAAC,eAAe,CAAC;YAC3C,eAAe,IAAI,QAAQ,CAAC,gBAAgB,CAAC;YAE7C,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,cAAc,EAAE,eAAe,EAAE,OAAO,CAAC,aAAa,IAAI,SAAS,CAAC,CAAC;YAE1I,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACjD,OAAO,CAAC,mBAAmB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAE5C,6DAA6D;gBAC7D,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;oBAChD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;oBACtF,IAAI,UAAU;wBAAE,UAAU,GAAG,UAAU,CAAC;gBAC1C,CAAC;gBAED,2EAA2E;gBAC3E,IAAI,cAAkC,CAAC;gBACvC,IAAI,UAAU,IAAI,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;oBAC9C,IAAI,CAAC;wBACH,cAAc,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;oBACxE,CAAC;oBAAC,MAAM,CAAC;wBACP,wCAAwC;oBAC1C,CAAC;gBACH,CAAC;gBAED,OAAO;oBACL,KAAK,EAAE,QAAQ,CAAC,KAAK;oBACrB,WAAW,EAAE,gBAAgB;oBAC7B,YAAY,EAAE,iBAAiB;oBAC/B,eAAe,EAAE,cAAc;oBAC/B,gBAAgB,EAAE,eAAe;oBACjC,MAAM,EAAE,KAAK;oBACb,UAAU;oBACV,cAAc;oBACd,cAAc,EAAE,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS;oBACtE,eAAe,EAAE,qBAAqB;wBACpC,CAAC,CAAC,EAAE,QAAQ,EAAE,qBAAqB,CAAC,QAAQ,EAAE,KAAK,EAAE,qBAAqB,CAAC,KAAK,EAAE,WAAW,EAAE,qBAAqB,CAAC,WAAW,EAAE,SAAS,EAAE,qBAAqB,CAAC,SAAS,EAAE;wBAC9K,CAAC,CAAC,SAAS;iBACd,CAAC;YACJ,CAAC;YAED,qDAAqD;YACrD,MAAM,cAAc,GAAkB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC1D,KAAK,MAAM,EAAE,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;gBACpC,cAAc,CAAC,IAAI,CAAC;oBAClB,IAAI,EAAE,UAAU;oBAChB,EAAE,EAAE,EAAE,CAAC,EAAE;oBACT,IAAI,EAAE,EAAE,CAAC,IAAI;oBACb,KAAK,EAAE,EAAE,CAAC,KAAK;iBAChB,CAAC,CAAC;YACL,CAAC;YACD,OAAO,CAAC,mBAAmB,CAAC,cAAc,CAAC,CAAC;YAE5C,4CAA4C;YAC5C,MAAM,WAAW,GAAkB,EAAE,CAAC;YACtC,KAAK,MAAM,EAAE,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;gBACpC,uBAAuB;gBACvB,IAAI,aAAa,EAAE,aAAa,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC9E,WAAW,CAAC,IAAI,CAAC;wBACf,IAAI,EAAE,aAAa;wBACnB,SAAS,EAAE,EAAE,CAAC,EAAE;wBAChB,OAAO,EAAE,SAAS,EAAE,CAAC,IAAI,oCAAoC;wBAC7D,OAAO,EAAE,IAAI;qBACd,CAAC,CAAC;oBACH,SAAS;gBACX,CAAC;gBAED,sBAAsB;gBACtB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;gBACzD,IAAI,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;oBAC7B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;oBACxF,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;oBAEtG,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;wBACxB,WAAW,CAAC,IAAI,CAAC;4BACf,IAAI,EAAE,aAAa;4BACnB,SAAS,EAAE,EAAE,CAAC,EAAE;4BAChB,OAAO,EAAE,yBAAyB,UAAU,CAAC,MAAM,EAAE;4BACrD,OAAO,EAAE,IAAI;yBACd,CAAC,CAAC;wBACH,SAAS;oBACX,CAAC;gBACH,CAAC;gBAED,mBAAmB;gBACnB,IAAI,aAAa,EAAE,WAAW,IAAI,aAAa,EAAE,QAAQ,EAAE,CAAC;oBAC1D,MAAM,UAAU,GAAG,aAAa,CAAC,WAAW,CAAC,KAAK,CAAC,aAAa,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;oBACpF,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;wBACxB,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,YAAY,IAAI,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;wBAC5E,WAAW,CAAC,IAAI,CAAC;4BACf,IAAI,EAAE,aAAa;4BACnB,SAAS,EAAE,EAAE,CAAC,EAAE;4BAChB,OAAO,EAAE,iCAAiC,EAAE,CAAC,IAAI,mBAAmB,aAAa,WAAW;4BAC5F,OAAO,EAAE,IAAI;yBACd,CAAC,CAAC;wBACH,SAAS;oBACX,CAAC;gBACH,CAAC;gBAED,gFAAgF;gBAChF,MAAM,QAAQ,GAAG,UAAU,EAAE,WAAW,EAAE,QAAQ,CAAC;gBAEnD,0BAA0B;gBAC1B,IAAI,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;oBACpC,IAAI,CAAC;wBACH,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;wBAC1D,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;4BACzB,MAAM,YAAY,GAAG,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;4BAClF,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;4BACrD,WAAW,CAAC,IAAI,CAAC;gCACf,IAAI,EAAE,aAAa;gCACnB,SAAS,EAAE,EAAE,CAAC,EAAE;gCAChB,OAAO,EAAE,YAAY;gCACrB,OAAO,EAAE,KAAK;6BACf,CAAC,CAAC;4BACH,SAAS;wBACX,CAAC;oBACH,CAAC;oBAAC,MAAM,CAAC;wBACP,qDAAqD;oBACvD,CAAC;gBACH,CAAC;gBAED,MAAM,WAAW,GAAG,UAAU,EAAE,WAAW;oBACzC,CAAC,CAAC,EAAE,QAAQ,EAAE,UAAU,CAAC,WAAW,CAAC,QAAQ,EAAE,WAAW,EAAE,UAAU,CAAC,WAAW,CAAC,WAAW,EAAE,UAAU,EAAE,UAAU,CAAC,WAAW,CAAC,UAAU,EAAE;oBAC/I,CAAC,CAAC,SAAS,CAAC;gBACd,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;gBAChE,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBAE3B,IAAI,CAAC;oBACH,IAAI,WAAoB,CAAC;oBACzB,IAAI,YAAgC,CAAC;oBAErC,sDAAsD;oBACtD,IAAI,UAAU,EAAE,KAAK,EAAE,CAAC;wBACtB,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAE,KAA8B,EAAE,EAAE,CAChE,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;wBAC/C,MAAM,gBAAgB,GAAG,UAAU,CAAC,KAAK,CAAC,QAAQ;4BAChD,CAAC,CAAC,CAAC,IAAY,EAAE,KAA8B,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;4BAChG,CAAC,CAAC,SAAS,CAAC;wBAEd,MAAM,UAAU,GAAwB,MAAM,gBAAgB,CAC5D,EAAE,CAAC,IAAI,EACP,EAAE,CAAC,KAAK,EACR,QAAQ,EACR,UAAU,CAAC,KAAK,EAChB,gBAAgB,CACjB,CAAC;wBACF,WAAW,GAAG,UAAU,CAAC,MAAM,CAAC;wBAChC,YAAY,GAAG,UAAU,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;oBAC3E,CAAC;yBAAM,CAAC;wBACN,WAAW,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;oBAC3C,CAAC;oBAED,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC;oBACxC,IAAI,YAAY,GAAG,OAAO,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;oBAE/F,sBAAsB;oBACtB,IAAI,SAAS,GAAG,KAAK,CAAC;oBACtB,IAAI,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC;wBAClC,MAAM,kBAAkB,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;wBACtF,IAAI,kBAAkB,CAAC,SAAS,EAAE,CAAC;4BACjC,YAAY,GAAG,kBAAkB,CAAC,OAAO,CAAC;4BAC1C,SAAS,GAAG,IAAI,CAAC;wBACnB,CAAC;oBACH,CAAC;oBAED,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;oBAE5G,cAAc,CAAC,IAAI,CAAC;wBAClB,QAAQ,EAAE,EAAE,CAAC,IAAI;wBACjB,UAAU;wBACV,OAAO,EAAE,IAAI;wBACb,aAAa,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;qBAC1C,CAAC,CAAC;oBAEH,YAAY;oBACZ,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;oBAEnF,WAAW,CAAC,IAAI,CAAC;wBACf,IAAI,EAAE,aAAa;wBACnB,SAAS,EAAE,EAAE,CAAC,EAAE;wBAChB,OAAO,EAAE,YAAY;wBACrB,OAAO,EAAE,KAAK;qBACf,CAAC,CAAC;oBAEH,0BAA0B;oBAC1B,IAAI,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;wBACpC,IAAI,CAAC;4BACH,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;wBACpE,CAAC;wBAAC,MAAM,CAAC;4BACP,wDAAwD;wBAC1D,CAAC;oBACH,CAAC;oBAED,qDAAqD;oBACrD,IAAI,aAAa,EAAE,WAAW,IAAI,aAAa,EAAE,QAAQ,EAAE,CAAC;wBAC1D,aAAa,CAAC,WAAW,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;oBACpE,CAAC;gBACH,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC;oBACxC,MAAM,MAAM,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;oBAChE,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;oBAExF,cAAc,CAAC,IAAI,CAAC;wBAClB,QAAQ,EAAE,EAAE,CAAC,IAAI;wBACjB,UAAU;wBACV,OAAO,EAAE,KAAK;wBACd,aAAa,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;qBACpC,CAAC,CAAC;oBAEH,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,CAAC,IAAI,aAAa,GAAG,EAAE,CAAC,CAAC;oBAC/D,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;oBAE/C,WAAW,CAAC,IAAI,CAAC;wBACf,IAAI,EAAE,aAAa;wBACnB,SAAS,EAAE,EAAE,CAAC,EAAE;wBAChB,OAAO,EAAE,UAAU,MAAM,EAAE;wBAC3B,OAAO,EAAE,IAAI;qBACd,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YACD,OAAO,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;QACtC,CAAC;QAED,8DAA8D;QAC9D,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,EAAE,oBAAoB,IAAI,CAAC,aAAa,YAAY,CAAC,CAAC;QAE/E,MAAM,aAAa,GAAG,CAAC,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;QACvD,MAAM,aAAa,GAAG,MAAM,iBAAiB,CAAC,aAAa,CAAC;YAC1D,MAAM;YACN,QAAQ,EAAE,aAAa;YACvB,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS;SAC/B,CAAC,CAAC;QAEH,gBAAgB,IAAI,aAAa,CAAC,WAAW,CAAC;QAC9C,iBAAiB,IAAI,aAAa,CAAC,YAAY,CAAC;QAChD,cAAc,IAAI,aAAa,CAAC,eAAe,CAAC;QAChD,eAAe,IAAI,aAAa,CAAC,gBAAgB,CAAC;QAElD,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,cAAc,EAAE,eAAe,EAAE,OAAO,CAAC,aAAa,IAAI,SAAS,CAAC,CAAC;QAE1I,OAAO,CAAC,mBAAmB,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAEjD,6DAA6D;QAC7D,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAChD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,OAAO,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;YAC3F,IAAI,UAAU;gBAAE,UAAU,GAAG,UAAU,CAAC;QAC1C,CAAC;QAED,2EAA2E;QAC3E,IAAI,cAAkC,CAAC;QACvC,IAAI,UAAU,IAAI,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC9C,IAAI,CAAC;gBACH,cAAc,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YACxE,CAAC;YAAC,MAAM,CAAC;gBACP,wCAAwC;YAC1C,CAAC;QACH,CAAC;QAED,OAAO;YACL,KAAK,EAAE,aAAa,CAAC,KAAK;YAC1B,WAAW,EAAE,gBAAgB;YAC7B,YAAY,EAAE,iBAAiB;YAC/B,eAAe,EAAE,cAAc;YAC/B,gBAAgB,EAAE,eAAe;YACjC,MAAM,EAAE,KAAK;YACb,UAAU;YACV,cAAc;YACd,cAAc,EAAE,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS;YACtE,eAAe,EAAE,qBAAqB;gBACpC,CAAC,CAAC,EAAE,QAAQ,EAAE,qBAAqB,CAAC,QAAQ,EAAE,KAAK,EAAE,qBAAqB,CAAC,KAAK,EAAE,WAAW,EAAE,qBAAqB,CAAC,WAAW,EAAE,SAAS,EAAE,qBAAqB,CAAC,SAAS,EAAE;gBAC9K,CAAC,CAAC,SAAS;SACd,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,WAAW,CAAC,EAAY;QACpC,8DAA8D;QAC9D,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,EAAE,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;QACzD,IAAI,WAAW;YAAE,OAAO,WAAW,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;QAE9C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;QACxD,IAAI,UAAU;YAAE,OAAO,UAAU,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;QAE5C,2BAA2B;QAC3B,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACzB,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;gBAC1C,IAAI,CAAC;oBACH,OAAO,MAAM,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;gBACrD,CAAC;gBAAC,MAAM,CAAC;oBACP,SAAS;gBACX,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC,IAAI,aAAa,CAAC,CAAC;IACjD,CAAC;IAEO,cAAc,CACpB,SAAiB,EACjB,QAAgB,EAChB,SAAmC,EACnC,WAAqC;QAErC,MAAM,KAAK,GAAoB;YAC7B,IAAI,EAAE,aAAa;YACnB,QAAQ;YACR,SAAS,EAAE,IAAI,IAAI,EAAE;YACrB,SAAS;YACT,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACnC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACxC,CAAC;QACF,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;IAEO,kBAAkB,CACxB,SAAiB,EACjB,QAAgB,EAChB,KAAa,EACb,OAAgB,EAChB,MAAc;QAEd,MAAM,KAAK,GAAwB;YACjC,IAAI,EAAE,iBAAiB;YACvB,QAAQ;YACR,KAAK;YACL,OAAO;YACP,MAAM;YACN,SAAS,EAAE,IAAI,IAAI,EAAE;YACrB,SAAS;SACV,CAAC;QACF,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;IAEO,cAAc,CACpB,SAAiB,EACjB,QAAgB,EAChB,UAAkB,EAClB,OAAgB,EAChB,aAAsB,EACtB,OAAiB,EACjB,YAAqB;QAErB,MAAM,KAAK,GAAoB;YAC7B,IAAI,EAAE,aAAa;YACnB,QAAQ;YACR,UAAU;YACV,OAAO;YACP,SAAS,EAAE,IAAI,IAAI,EAAE;YACrB,SAAS;YACT,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3C,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7C,GAAG,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACxD,CAAC;QACF,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;IAEO,gBAAgB,CAAC,SAAiB,EAAE,QAAgB,EAAE,QAAgB;QAC5E,MAAM,KAAK,GAAsB;YAC/B,IAAI,EAAE,gBAAgB;YACtB,QAAQ;YACR,QAAQ;YACR,SAAS,EAAE,IAAI,IAAI,EAAE;YACrB,SAAS;SACV,CAAC;QACF,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;IAEO,WAAW,CAAC,QAAgB,EAAE,UAAkB,EAAE,OAAkD;QAC1G,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,OAAO;QAChC,IAAI,CAAC;YACH,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;gBACxB,SAAS,EAAE,IAAI,IAAI,EAAE;gBACrB,MAAM,EAAE,gBAAgB;gBACxB,KAAK,EAAE,cAAc;gBACrB,OAAO;gBACP,QAAQ,EAAE,QAAQ;gBAClB,QAAQ,EAAE,EAAE,UAAU,EAAE;aACzB,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,oDAAoD;QACtD,CAAC;IACH,CAAC;IAEO,mBAAmB,CACzB,WAAmB,EACnB,YAAoB,EACpB,eAAuB,EACvB,gBAAwB;QAExB,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC;QACrC,IAAI,CAAC,OAAO;YAAE,OAAO,CAAC,CAAC;QAEvB,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,GAAG,eAAe,GAAG,gBAAgB,CAAC,CAAC;QAEpF,OAAO,CACL,CAAC,aAAa,GAAG,OAAO,CAAC,SAAS;YAChC,YAAY,GAAG,OAAO,CAAC,UAAU;YACjC,eAAe,GAAG,OAAO,CAAC,SAAS,GAAG,OAAO,CAAC,mBAAmB;YACjE,gBAAgB,GAAG,OAAO,CAAC,SAAS,GAAG,OAAO,CAAC,oBAAoB,CAAC;YACtE,SAAS,CACV,CAAC;IACJ,CAAC;IAED,IAAY,eAAe;QACzB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,OAAO,SAAS,CAAC;QACvC,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,8BAA8B,IAAI,CAAC,IAAI,CAAC,KAAK,+GAA+G,CAAC,CAAC;QAC7K,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,cAAc,CACpB,SAAiB,EACjB,WAAmB,EACnB,YAAoB,EACpB,eAAuB,EACvB,gBAAwB,EACxB,OAAgB;QAEhB,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE,YAAY,EAAE,eAAe,EAAE,gBAAgB,CAAC,CAAC;QAC5G,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,SAAS,CAAC;QAE3C,MAAM,KAAK,GAAoB;YAC7B,IAAI,EAAE,aAAa;YACnB,WAAW;YACX,YAAY;YACZ,eAAe;YACf,YAAY;YACZ,WAAW,EAAE;gBACX,CAAC,aAAa,KAAK,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE;aACnE;YACD,SAAS,EAAE,IAAI,IAAI,EAAE;YACrB,SAAS;YACT,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAChC,CAAC;QACF,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;IAEO,eAAe,CAAC,SAAiB,EAAE,QAAyB;QAClE,MAAM,KAAK,GAAqB;YAC9B,IAAI,EAAE,cAAc;YACpB,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;YAC3B,WAAW,EAAE,QAAQ,CAAC,WAAW;YACjC,MAAM,EAAE,QAAQ,CAAC,SAAS;YAC1B,SAAS,EAAE,IAAI,IAAI,EAAE;YACrB,SAAS;SACV,CAAC;QACF,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;IAEO,SAAS,CAAC,SAAiB,EAAE,OAAe;QAClD,MAAM,KAAK,GAAe;YACxB,IAAI,EAAE,OAAO;YACb,OAAO;YACP,IAAI,EAAE,cAAc;YACpB,MAAM,EAAE,IAAI;YACZ,SAAS,EAAE,IAAI,IAAI,EAAE;YACrB,SAAS;SACV,CAAC;QACF,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;CACF"}
@@ -1,9 +1,15 @@
1
1
  import type { AgentMessage, ContentPart } from "@kilnai/core";
2
2
  import type { SessionMode } from "./session-mode.js";
3
+ export interface AgentTurnEntry {
4
+ readonly agentId: string;
5
+ readonly turnIndex: number;
6
+ readonly handoffBrief?: string;
7
+ readonly fromAgentId?: string;
8
+ }
3
9
  export interface SerializedSessionData {
4
10
  readonly id: string;
5
11
  readonly appName: string;
6
- readonly tenantId?: string;
12
+ readonly tenantId: string;
7
13
  readonly userId: string;
8
14
  readonly systemPrompt: string;
9
15
  readonly idleTimeoutMs: number;
@@ -12,10 +18,14 @@ export interface SerializedSessionData {
12
18
  readonly createdAt: string;
13
19
  readonly lastActivityAt: string;
14
20
  readonly history: readonly AgentMessage[];
21
+ readonly activeAgentId: string | null;
22
+ readonly agentTurnHistory: readonly AgentTurnEntry[];
23
+ readonly handoffCount: number;
24
+ readonly lastRouteChangeAt: number;
15
25
  }
16
26
  export interface ModeBSessionConfig {
17
27
  readonly appName: string;
18
- readonly tenantId?: string;
28
+ readonly tenantId: string;
19
29
  readonly userId: string;
20
30
  readonly systemPrompt: string;
21
31
  readonly idleTimeoutMs?: number;
@@ -23,16 +33,20 @@ export interface ModeBSessionConfig {
23
33
  export declare class ModeBSession {
24
34
  readonly id: string;
25
35
  readonly appName: string;
26
- readonly tenantId: string | undefined;
36
+ readonly tenantId: string;
27
37
  readonly userId: string;
28
38
  readonly createdAt: Date;
29
39
  private _lastActivityAt;
30
- private readonly _systemPrompt;
40
+ private _systemPrompt;
31
41
  private readonly _idleTimeoutMs;
32
42
  private readonly _history;
33
43
  private _sessionMode;
34
44
  private _version;
35
45
  private _loadedVersion;
46
+ private _activeAgentId;
47
+ private _agentTurnHistory;
48
+ private _handoffCount;
49
+ private _lastRouteChangeAt;
36
50
  constructor(config: ModeBSessionConfig);
37
51
  get lastActivityAt(): Date;
38
52
  get isExpired(): boolean;
@@ -50,6 +64,12 @@ export declare class ModeBSession {
50
64
  touch(): void;
51
65
  get sessionMode(): SessionMode;
52
66
  setSessionMode(mode: SessionMode): void;
67
+ get activeAgentId(): string | null;
68
+ get agentTurnHistory(): readonly AgentTurnEntry[];
69
+ get handoffCount(): number;
70
+ get lastRouteChangeAt(): number;
71
+ setActiveAgent(agentId: string, handoffBrief?: string): void;
72
+ setSystemPrompt(prompt: string): void;
53
73
  lastAssistantTexts(count: number): string[];
54
74
  injectOperatorMessage(parts: readonly ContentPart[]): void;
55
75
  }
@@ -1 +1 @@
1
- {"version":3,"file":"mode-b-session.d.ts","sourceRoot":"","sources":["../../src/session/mode-b-session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGrD,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAClC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAE,SAAS,YAAY,EAAE,CAAC;CAC3C;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,qBAAa,YAAY;IACvB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;IAEzB,OAAO,CAAC,eAAe,CAAO;IAC9B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAsB;IAC/C,OAAO,CAAC,YAAY,CAA4B;IAChD,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,cAAc,CAAK;gBAEf,MAAM,EAAE,kBAAkB;IAatC,IAAI,cAAc,IAAI,IAAI,CAEzB;IAED,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED,IAAI,mBAAmB,IAAI,SAAS,YAAY,EAAE,CAEjD;IAED,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED,IAAI,aAAa,IAAI,MAAM,CAE1B;IAED,qEAAqE;IACrE,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,oFAAoF;IACpF,IAAI,aAAa,IAAI,MAAM,CAE1B;IAED,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,qBAAqB,GAAG,YAAY;IA2BhE,cAAc,CAAC,KAAK,EAAE,SAAS,WAAW,EAAE,GAAG,IAAI;IAKnD,mBAAmB,CAAC,KAAK,EAAE,SAAS,WAAW,EAAE,GAAG,IAAI;IAKxD,KAAK,IAAI,IAAI;IAKb,IAAI,WAAW,IAAI,WAAW,CAE7B;IAED,cAAc,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI;IAKvC,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;IAU3C,qBAAqB,CAAC,KAAK,EAAE,SAAS,WAAW,EAAE,GAAG,IAAI;CAI3D"}
1
+ {"version":3,"file":"mode-b-session.d.ts","sourceRoot":"","sources":["../../src/session/mode-b-session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGrD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAClC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAE,SAAS,YAAY,EAAE,CAAC;IAC1C,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,QAAQ,CAAC,gBAAgB,EAAE,SAAS,cAAc,EAAE,CAAC;IACrD,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;CACpC;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,qBAAa,YAAY;IACvB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;IAEzB,OAAO,CAAC,eAAe,CAAO;IAC9B,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAsB;IAC/C,OAAO,CAAC,YAAY,CAA4B;IAChD,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,iBAAiB,CAAwB;IACjD,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,kBAAkB,CAAK;gBAEnB,MAAM,EAAE,kBAAkB;IAWtC,IAAI,cAAc,IAAI,IAAI,CAEzB;IAED,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED,IAAI,mBAAmB,IAAI,SAAS,YAAY,EAAE,CAEjD;IAED,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED,IAAI,aAAa,IAAI,MAAM,CAE1B;IAED,qEAAqE;IACrE,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,oFAAoF;IACpF,IAAI,aAAa,IAAI,MAAM,CAE1B;IAED,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,qBAAqB,GAAG,YAAY;IAgChE,cAAc,CAAC,KAAK,EAAE,SAAS,WAAW,EAAE,GAAG,IAAI;IAKnD,mBAAmB,CAAC,KAAK,EAAE,SAAS,WAAW,EAAE,GAAG,IAAI;IAKxD,KAAK,IAAI,IAAI;IAKb,IAAI,WAAW,IAAI,WAAW,CAE7B;IAED,cAAc,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI;IAKvC,IAAI,aAAa,IAAI,MAAM,GAAG,IAAI,CAEjC;IAED,IAAI,gBAAgB,IAAI,SAAS,cAAc,EAAE,CAEhD;IAED,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED,IAAI,iBAAiB,IAAI,MAAM,CAE9B;IAED,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI;IAU5D,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAKrC,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;IAU3C,qBAAqB,CAAC,KAAK,EAAE,SAAS,WAAW,EAAE,GAAG,IAAI;CAI3D"}
@@ -13,6 +13,10 @@ export class ModeBSession {
13
13
  _sessionMode = "ai_active";
14
14
  _version = 0;
15
15
  _loadedVersion = 0;
16
+ _activeAgentId = null;
17
+ _agentTurnHistory = [];
18
+ _handoffCount = 0;
19
+ _lastRouteChangeAt = 0;
16
20
  constructor(config) {
17
21
  this.appName = config.appName;
18
22
  this.tenantId = config.tenantId;
@@ -21,9 +25,7 @@ export class ModeBSession {
21
25
  this._idleTimeoutMs = config.idleTimeoutMs ?? 30 * 60 * 1000;
22
26
  this.createdAt = new Date();
23
27
  this._lastActivityAt = new Date();
24
- this.id = config.tenantId
25
- ? `${config.appName}:${config.tenantId}:${config.userId}:${Date.now()}`
26
- : `${config.appName}:${config.userId}:${Date.now()}`;
28
+ this.id = `${config.appName}:${config.tenantId}:${config.userId}:${Date.now()}`;
27
29
  }
28
30
  get lastActivityAt() {
29
31
  return this._lastActivityAt;
@@ -73,8 +75,13 @@ export class ModeBSession {
73
75
  }
74
76
  // Re-set lastActivityAt since addMessage calls touch()
75
77
  session._lastActivityAt = new Date(data.lastActivityAt);
78
+ // Restore agent routing state
79
+ session._activeAgentId = data.activeAgentId;
80
+ session._agentTurnHistory = [...data.agentTurnHistory];
81
+ session._handoffCount = data.handoffCount;
82
+ session._lastRouteChangeAt = data.lastRouteChangeAt;
76
83
  // Restore version and record loaded version for conflict detection
77
- const storedVersion = data.version ?? 0;
84
+ const storedVersion = data.version;
78
85
  session._version = storedVersion;
79
86
  session._loadedVersion = storedVersion;
80
87
  return session;
@@ -98,6 +105,32 @@ export class ModeBSession {
98
105
  this._sessionMode = transitionSessionMode(this._sessionMode, mode);
99
106
  this._version++;
100
107
  }
108
+ get activeAgentId() {
109
+ return this._activeAgentId;
110
+ }
111
+ get agentTurnHistory() {
112
+ return this._agentTurnHistory;
113
+ }
114
+ get handoffCount() {
115
+ return this._handoffCount;
116
+ }
117
+ get lastRouteChangeAt() {
118
+ return this._lastRouteChangeAt;
119
+ }
120
+ setActiveAgent(agentId, handoffBrief) {
121
+ if (this._activeAgentId === agentId)
122
+ return;
123
+ const fromAgentId = this._activeAgentId ?? undefined;
124
+ this._activeAgentId = agentId;
125
+ this._agentTurnHistory.push({ agentId, turnIndex: this._history.length, handoffBrief, fromAgentId });
126
+ this._handoffCount++;
127
+ this._lastRouteChangeAt = this._history.length;
128
+ this._version++;
129
+ }
130
+ setSystemPrompt(prompt) {
131
+ this._systemPrompt = prompt;
132
+ this._version++;
133
+ }
101
134
  lastAssistantTexts(count) {
102
135
  const texts = [];
103
136
  for (let i = this._history.length - 1; i >= 0 && texts.length < count; i--) {