@kilnai/runtime 0.1.15 → 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 (249) hide show
  1. package/README.md +7 -3
  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/channels/web-channel.d.ts +2 -0
  35. package/dist/channels/web-channel.d.ts.map +1 -1
  36. package/dist/channels/web-channel.js +9 -0
  37. package/dist/channels/web-channel.js.map +1 -1
  38. package/dist/enrichment/enrichment-runner.d.ts +17 -0
  39. package/dist/enrichment/enrichment-runner.d.ts.map +1 -0
  40. package/dist/enrichment/enrichment-runner.js +45 -0
  41. package/dist/enrichment/enrichment-runner.js.map +1 -0
  42. package/dist/enrichment/sqlite-enrichment-store.d.ts +14 -0
  43. package/dist/enrichment/sqlite-enrichment-store.d.ts.map +1 -0
  44. package/dist/enrichment/sqlite-enrichment-store.js +69 -0
  45. package/dist/enrichment/sqlite-enrichment-store.js.map +1 -0
  46. package/dist/gateway/audio-preprocessor.d.ts +11 -0
  47. package/dist/gateway/audio-preprocessor.d.ts.map +1 -0
  48. package/dist/gateway/audio-preprocessor.js +76 -0
  49. package/dist/gateway/audio-preprocessor.js.map +1 -0
  50. package/dist/gateway/auth-middleware.d.ts.map +1 -1
  51. package/dist/gateway/auth-middleware.js +10 -2
  52. package/dist/gateway/auth-middleware.js.map +1 -1
  53. package/dist/gateway/contact-memory-admin-routes.d.ts +9 -0
  54. package/dist/gateway/contact-memory-admin-routes.d.ts.map +1 -0
  55. package/dist/gateway/contact-memory-admin-routes.js +42 -0
  56. package/dist/gateway/contact-memory-admin-routes.js.map +1 -0
  57. package/dist/gateway/context-formatter.d.ts +5 -0
  58. package/dist/gateway/context-formatter.d.ts.map +1 -0
  59. package/dist/gateway/context-formatter.js +16 -0
  60. package/dist/gateway/context-formatter.js.map +1 -0
  61. package/dist/gateway/conversation-event-emitter.d.ts +4 -1
  62. package/dist/gateway/conversation-event-emitter.d.ts.map +1 -1
  63. package/dist/gateway/conversation-event-emitter.js +44 -13
  64. package/dist/gateway/conversation-event-emitter.js.map +1 -1
  65. package/dist/gateway/dev-routes.d.ts +1 -1
  66. package/dist/gateway/dev-routes.d.ts.map +1 -1
  67. package/dist/gateway/dev-routes.js +2 -2
  68. package/dist/gateway/dev-routes.js.map +1 -1
  69. package/dist/gateway/email-loop-guard.d.ts +10 -0
  70. package/dist/gateway/email-loop-guard.d.ts.map +1 -0
  71. package/dist/gateway/email-loop-guard.js +39 -0
  72. package/dist/gateway/email-loop-guard.js.map +1 -0
  73. package/dist/gateway/email-thread-store.d.ts +24 -0
  74. package/dist/gateway/email-thread-store.d.ts.map +1 -0
  75. package/dist/gateway/email-thread-store.js +34 -0
  76. package/dist/gateway/email-thread-store.js.map +1 -0
  77. package/dist/gateway/email-webhook-routes.d.ts +32 -0
  78. package/dist/gateway/email-webhook-routes.d.ts.map +1 -0
  79. package/dist/gateway/email-webhook-routes.js +411 -0
  80. package/dist/gateway/email-webhook-routes.js.map +1 -0
  81. package/dist/gateway/enrichment-admin-routes.d.ts +9 -0
  82. package/dist/gateway/enrichment-admin-routes.d.ts.map +1 -0
  83. package/dist/gateway/enrichment-admin-routes.js +41 -0
  84. package/dist/gateway/enrichment-admin-routes.js.map +1 -0
  85. package/dist/gateway/gateway-routes.d.ts +17 -1
  86. package/dist/gateway/gateway-routes.d.ts.map +1 -1
  87. package/dist/gateway/gateway-routes.js +55 -1
  88. package/dist/gateway/gateway-routes.js.map +1 -1
  89. package/dist/gateway/gateway-server.d.ts.map +1 -1
  90. package/dist/gateway/gateway-server.js +250 -14
  91. package/dist/gateway/gateway-server.js.map +1 -1
  92. package/dist/gateway/handoff-routes.d.ts +15 -0
  93. package/dist/gateway/handoff-routes.d.ts.map +1 -0
  94. package/dist/gateway/handoff-routes.js +253 -0
  95. package/dist/gateway/handoff-routes.js.map +1 -0
  96. package/dist/gateway/instagram-webhook-routes.d.ts +30 -0
  97. package/dist/gateway/instagram-webhook-routes.d.ts.map +1 -0
  98. package/dist/gateway/instagram-webhook-routes.js +394 -0
  99. package/dist/gateway/instagram-webhook-routes.js.map +1 -0
  100. package/dist/gateway/knowledge-admin-routes.d.ts +9 -0
  101. package/dist/gateway/knowledge-admin-routes.d.ts.map +1 -0
  102. package/dist/gateway/knowledge-admin-routes.js +84 -0
  103. package/dist/gateway/knowledge-admin-routes.js.map +1 -0
  104. package/dist/gateway/knowledge-factory.d.ts +19 -0
  105. package/dist/gateway/knowledge-factory.d.ts.map +1 -0
  106. package/dist/gateway/knowledge-factory.js +122 -0
  107. package/dist/gateway/knowledge-factory.js.map +1 -0
  108. package/dist/gateway/message-pipeline.d.ts +69 -0
  109. package/dist/gateway/message-pipeline.d.ts.map +1 -0
  110. package/dist/gateway/message-pipeline.js +185 -0
  111. package/dist/gateway/message-pipeline.js.map +1 -0
  112. package/dist/gateway/messenger-webhook-routes.d.ts +30 -0
  113. package/dist/gateway/messenger-webhook-routes.d.ts.map +1 -0
  114. package/dist/gateway/messenger-webhook-routes.js +394 -0
  115. package/dist/gateway/messenger-webhook-routes.js.map +1 -0
  116. package/dist/gateway/meta-webhook-foundation.d.ts +12 -0
  117. package/dist/gateway/meta-webhook-foundation.d.ts.map +1 -0
  118. package/dist/gateway/meta-webhook-foundation.js +25 -0
  119. package/dist/gateway/meta-webhook-foundation.js.map +1 -0
  120. package/dist/gateway/mode-b-routes.d.ts +8 -0
  121. package/dist/gateway/mode-b-routes.d.ts.map +1 -1
  122. package/dist/gateway/mode-b-routes.js +74 -36
  123. package/dist/gateway/mode-b-routes.js.map +1 -1
  124. package/dist/gateway/outbound-routes.d.ts.map +1 -1
  125. package/dist/gateway/outbound-routes.js +49 -21
  126. package/dist/gateway/outbound-routes.js.map +1 -1
  127. package/dist/gateway/routing-test-routes.d.ts +10 -0
  128. package/dist/gateway/routing-test-routes.d.ts.map +1 -0
  129. package/dist/gateway/routing-test-routes.js +76 -0
  130. package/dist/gateway/routing-test-routes.js.map +1 -0
  131. package/dist/gateway/sqlite-email-thread-store.d.ts +13 -0
  132. package/dist/gateway/sqlite-email-thread-store.d.ts.map +1 -0
  133. package/dist/gateway/sqlite-email-thread-store.js +66 -0
  134. package/dist/gateway/sqlite-email-thread-store.js.map +1 -0
  135. package/dist/gateway/stt-factory.d.ts +3 -0
  136. package/dist/gateway/stt-factory.d.ts.map +1 -0
  137. package/dist/gateway/stt-factory.js +21 -0
  138. package/dist/gateway/stt-factory.js.map +1 -0
  139. package/dist/gateway/tenant-admin-routes.d.ts.map +1 -1
  140. package/dist/gateway/tenant-admin-routes.js +17 -3
  141. package/dist/gateway/tenant-admin-routes.js.map +1 -1
  142. package/dist/gateway/tenant-routes.d.ts.map +1 -1
  143. package/dist/gateway/tenant-routes.js +18 -27
  144. package/dist/gateway/tenant-routes.js.map +1 -1
  145. package/dist/gateway/tenant-tool-factory.d.ts +10 -0
  146. package/dist/gateway/tenant-tool-factory.d.ts.map +1 -0
  147. package/dist/gateway/tenant-tool-factory.js +55 -0
  148. package/dist/gateway/tenant-tool-factory.js.map +1 -0
  149. package/dist/gateway/trace-context.d.ts +8 -0
  150. package/dist/gateway/trace-context.d.ts.map +1 -0
  151. package/dist/gateway/trace-context.js +17 -0
  152. package/dist/gateway/trace-context.js.map +1 -0
  153. package/dist/gateway/webhook-dedup.d.ts +13 -0
  154. package/dist/gateway/webhook-dedup.d.ts.map +1 -0
  155. package/dist/gateway/webhook-dedup.js +37 -0
  156. package/dist/gateway/webhook-dedup.js.map +1 -0
  157. package/dist/gateway/webhook-tool-executor.d.ts +17 -0
  158. package/dist/gateway/webhook-tool-executor.d.ts.map +1 -0
  159. package/dist/gateway/webhook-tool-executor.js +69 -0
  160. package/dist/gateway/webhook-tool-executor.js.map +1 -0
  161. package/dist/gateway/whatsapp-webhook-routes.d.ts +11 -0
  162. package/dist/gateway/whatsapp-webhook-routes.d.ts.map +1 -1
  163. package/dist/gateway/whatsapp-webhook-routes.js +205 -33
  164. package/dist/gateway/whatsapp-webhook-routes.js.map +1 -1
  165. package/dist/gateway/ws-tenant-routes.d.ts +9 -0
  166. package/dist/gateway/ws-tenant-routes.d.ts.map +1 -1
  167. package/dist/gateway/ws-tenant-routes.js +184 -7
  168. package/dist/gateway/ws-tenant-routes.js.map +1 -1
  169. package/dist/index.d.ts +63 -3
  170. package/dist/index.d.ts.map +1 -1
  171. package/dist/index.js +39 -1
  172. package/dist/index.js.map +1 -1
  173. package/dist/observability/composite-event-store.d.ts +13 -0
  174. package/dist/observability/composite-event-store.d.ts.map +1 -0
  175. package/dist/observability/composite-event-store.js +37 -0
  176. package/dist/observability/composite-event-store.js.map +1 -0
  177. package/dist/observability/prometheus-collector.d.ts +33 -0
  178. package/dist/observability/prometheus-collector.d.ts.map +1 -0
  179. package/dist/observability/prometheus-collector.js +170 -0
  180. package/dist/observability/prometheus-collector.js.map +1 -0
  181. package/dist/session/agent-handoff-summarizer.d.ts +11 -0
  182. package/dist/session/agent-handoff-summarizer.d.ts.map +1 -0
  183. package/dist/session/agent-handoff-summarizer.js +26 -0
  184. package/dist/session/agent-handoff-summarizer.js.map +1 -0
  185. package/dist/session/context-summarizer.d.ts +11 -0
  186. package/dist/session/context-summarizer.d.ts.map +1 -0
  187. package/dist/session/context-summarizer.js +23 -0
  188. package/dist/session/context-summarizer.js.map +1 -0
  189. package/dist/session/escalation-detector.d.ts +27 -0
  190. package/dist/session/escalation-detector.d.ts.map +1 -0
  191. package/dist/session/escalation-detector.js +75 -0
  192. package/dist/session/escalation-detector.js.map +1 -0
  193. package/dist/session/in-memory-session-store.d.ts +11 -0
  194. package/dist/session/in-memory-session-store.d.ts.map +1 -0
  195. package/dist/session/in-memory-session-store.js +26 -0
  196. package/dist/session/in-memory-session-store.js.map +1 -0
  197. package/dist/session/mode-b-orchestrator.d.ts +54 -1
  198. package/dist/session/mode-b-orchestrator.d.ts.map +1 -1
  199. package/dist/session/mode-b-orchestrator.js +349 -17
  200. package/dist/session/mode-b-orchestrator.js.map +1 -1
  201. package/dist/session/mode-b-session.d.ts +48 -1
  202. package/dist/session/mode-b-session.d.ts.map +1 -1
  203. package/dist/session/mode-b-session.js +105 -0
  204. package/dist/session/mode-b-session.js.map +1 -1
  205. package/dist/session/redis-session-store.d.ts +22 -0
  206. package/dist/session/redis-session-store.d.ts.map +1 -0
  207. package/dist/session/redis-session-store.js +44 -0
  208. package/dist/session/redis-session-store.js.map +1 -0
  209. package/dist/session/session-mode.d.ts +4 -0
  210. package/dist/session/session-mode.d.ts.map +1 -0
  211. package/dist/session/session-mode.js +20 -0
  212. package/dist/session/session-mode.js.map +1 -0
  213. package/dist/session/session-registry.d.ts +17 -9
  214. package/dist/session/session-registry.d.ts.map +1 -1
  215. package/dist/session/session-registry.js +80 -29
  216. package/dist/session/session-registry.js.map +1 -1
  217. package/dist/session/session-serializer.d.ts +4 -0
  218. package/dist/session/session-serializer.d.ts.map +1 -0
  219. package/dist/session/session-serializer.js +26 -0
  220. package/dist/session/session-serializer.js.map +1 -0
  221. package/dist/session/session-store.d.ts +9 -0
  222. package/dist/session/session-store.d.ts.map +1 -0
  223. package/dist/session/session-store.js +2 -0
  224. package/dist/session/session-store.js.map +1 -0
  225. package/dist/tenant/agent-resolver.d.ts +26 -0
  226. package/dist/tenant/agent-resolver.d.ts.map +1 -0
  227. package/dist/tenant/agent-resolver.js +232 -0
  228. package/dist/tenant/agent-resolver.js.map +1 -0
  229. package/dist/tenant/ping-pong-guard.d.ts +9 -0
  230. package/dist/tenant/ping-pong-guard.d.ts.map +1 -0
  231. package/dist/tenant/ping-pong-guard.js +30 -0
  232. package/dist/tenant/ping-pong-guard.js.map +1 -0
  233. package/dist/tenant/system-prompt-builder.d.ts +1 -1
  234. package/dist/tenant/system-prompt-builder.d.ts.map +1 -1
  235. package/dist/tenant/system-prompt-builder.js +13 -1
  236. package/dist/tenant/system-prompt-builder.js.map +1 -1
  237. package/dist/tenant/tenant-registry.d.ts +3 -0
  238. package/dist/tenant/tenant-registry.d.ts.map +1 -1
  239. package/dist/tenant/tenant-registry.js +83 -4
  240. package/dist/tenant/tenant-registry.js.map +1 -1
  241. package/dist/tenant/tenant-router.d.ts +27 -0
  242. package/dist/tenant/tenant-router.d.ts.map +1 -0
  243. package/dist/tenant/tenant-router.js +72 -0
  244. package/dist/tenant/tenant-router.js.map +1 -0
  245. package/dist/utils/hmac.d.ts +1 -0
  246. package/dist/utils/hmac.d.ts.map +1 -1
  247. package/dist/utils/hmac.js +3 -0
  248. package/dist/utils/hmac.js.map +1 -1
  249. package/package.json +7 -3
@@ -5,11 +5,15 @@ import { join } from "node:path";
5
5
  import { mkdirSync } from "node:fs";
6
6
  import { textParts, extractText, SqliteMemoryStore } from "@kilnai/core";
7
7
  import { toWhatsAppFormat } from "../channels/message-formatter.js";
8
- import { buildTenantSystemPrompt } from "../tenant/system-prompt-builder.js";
8
+ import { resolveAgentContextAsync } from "../tenant/agent-resolver.js";
9
9
  import { stripSuggestionTags } from "../tenant/suggestion-parser.js";
10
10
  import { sendWhatsAppMessage, whatsappMediaUrl } from "../channels/whatsapp-api.js";
11
11
  import { checkBudget, reportUsage } from "./budget-middleware.js";
12
12
  import { requireWebhookSignature } from "./auth-middleware.js";
13
+ import { verifyMetaWebhook } from "./meta-webhook-foundation.js";
14
+ import { TraceContext } from "./trace-context.js";
15
+ import { preprocessAudio, createWhatsAppMediaDownloader } from "./audio-preprocessor.js";
16
+ import { formatKnowledgeContext, formatContactContext, mergeContextSources } from "./context-formatter.js";
13
17
  /** Lazily-opened per-tenant memory stores. Keyed by tenantId. */
14
18
  const memoryStores = new Map();
15
19
  function getMemoryStore(memoryBasePath, tenantId) {
@@ -26,6 +30,22 @@ function getMemoryStore(memoryBasePath, tenantId) {
26
30
  memoryStores.set(tenantId, store);
27
31
  return store;
28
32
  }
33
+ /** Tool definition for knowledge_search -- injected when knowledge mode is "tool" */
34
+ const KNOWLEDGE_SEARCH_TOOL = {
35
+ name: "knowledge_search",
36
+ description: "Search the knowledge base for relevant information. Use this when the user asks a question that may be answered by stored documents or knowledge.",
37
+ inputSchema: {
38
+ type: "object",
39
+ properties: {
40
+ query: {
41
+ type: "string",
42
+ description: "The search query to find relevant knowledge.",
43
+ },
44
+ },
45
+ required: ["query"],
46
+ },
47
+ tags: new Set(["builtin"]),
48
+ };
29
49
  /** Tool definition for notify_owner -- injected when tenant has escalationContact */
30
50
  const NOTIFY_OWNER_TOOL = {
31
51
  name: "notify_owner",
@@ -78,15 +98,7 @@ function parseWhatsAppMessageParts(msg) {
78
98
  export function createWhatsAppWebhookRoutes(config) {
79
99
  const app = new Hono();
80
100
  // GET /webhook -- Meta verification handshake
81
- app.get("/webhook", (c) => {
82
- const mode = c.req.query("hub.mode");
83
- const token = c.req.query("hub.verify_token");
84
- const challenge = c.req.query("hub.challenge");
85
- if (mode === "subscribe" && token === config.verifyToken) {
86
- return c.text(challenge ?? "", 200);
87
- }
88
- return c.text("Forbidden", 403);
89
- });
101
+ app.get("/webhook", (c) => verifyMetaWebhook(c, config.verifyToken));
90
102
  // HMAC-SHA256 signature validation for POST webhooks
91
103
  if (config.appSecret) {
92
104
  app.use("/webhook", requireWebhookSignature(config.appSecret, "x-hub-signature-256"));
@@ -113,7 +125,8 @@ export function createWhatsAppWebhookRoutes(config) {
113
125
  // Resolve tenant by phone number
114
126
  const tenant = config.tenantRegistry.resolveByPhone(phoneNumberId, config.appName);
115
127
  if (!tenant) {
116
- console.warn(`[whatsapp] No tenant found for phone_number_id=${phoneNumberId} app=${config.appName}`);
128
+ const entryTrace = new TraceContext();
129
+ entryTrace.warn("whatsapp", "No tenant found", { phoneNumberId, appName: config.appName });
117
130
  continue;
118
131
  }
119
132
  // Forward delivery statuses to product backend (fire-and-forget)
@@ -138,15 +151,20 @@ export function createWhatsAppWebhookRoutes(config) {
138
151
  continue;
139
152
  const contacts = change.value.contacts ?? [];
140
153
  for (const msg of messages) {
154
+ // Deduplicate -- Meta uses at-least-once delivery
155
+ if (config.dedup?.isDuplicate(msg.id)) {
156
+ console.debug(`[whatsapp] Skipping duplicate message ${msg.id}`);
157
+ continue;
158
+ }
141
159
  const msgParts = parseWhatsAppMessageParts(msg);
142
160
  if (!msgParts) {
143
- console.warn(`[whatsapp] Unsupported message type=${msg.type} from=${msg.from}`);
161
+ const msgTrace = new TraceContext();
162
+ msgTrace.warn("whatsapp", "Unsupported message type", { type: msg.type, from: msg.from });
144
163
  continue;
145
164
  }
146
165
  // Resolve canonical reply address from contacts; fall back to msg.from
147
166
  const contact = contacts.find((c) => c.wa_id === msg.from);
148
167
  const replyTo = contact?.wa_id ?? msg.from;
149
- console.log(`[whatsapp] Received message from=${replyTo} tenant=${tenant.tenantId} type=${msg.type}`);
150
168
  const promise = processWhatsAppMessage(config, tenant.tenantId, replyTo, msgParts, phoneNumberId, tenant.whatsappAccessToken);
151
169
  processPromises.push(promise);
152
170
  }
@@ -156,7 +174,8 @@ export function createWhatsAppWebhookRoutes(config) {
156
174
  Promise.allSettled(processPromises).then((results) => {
157
175
  for (const result of results) {
158
176
  if (result.status === "rejected") {
159
- console.warn("[whatsapp] Message processing failed:", result.reason);
177
+ const failTrace = new TraceContext();
178
+ failTrace.warn("whatsapp", "Message processing failed", { error: String(result.reason) });
160
179
  }
161
180
  }
162
181
  });
@@ -165,21 +184,26 @@ export function createWhatsAppWebhookRoutes(config) {
165
184
  return app;
166
185
  }
167
186
  async function processWhatsAppMessage(config, tenantId, senderPhone, messageParts, phoneNumberId, accessToken) {
187
+ const trace = new TraceContext();
188
+ trace.log("whatsapp", "Processing message", { tenantId, from: senderPhone });
168
189
  const tenant = config.tenantRegistry.get(tenantId);
169
190
  if (!tenant)
170
191
  return;
171
- const systemPrompt = buildTenantSystemPrompt(tenant, "whatsapp");
172
192
  const resolvedAccessToken = accessToken
173
193
  ? (process.env[accessToken] ?? accessToken)
174
194
  : "";
175
- const messageText = extractText(messageParts);
176
- const session = config.sessionRegistry.getOrCreate({
177
- appName: config.appName,
178
- tenantId,
179
- userId: senderPhone,
180
- systemPrompt,
181
- idleTimeoutMs: tenant.idleTimeoutMs,
182
- });
195
+ // Preprocess audio parts via STT (fail-open)
196
+ let processedParts = messageParts;
197
+ if (config.sttAdapter) {
198
+ try {
199
+ const downloader = createWhatsAppMediaDownloader(resolvedAccessToken);
200
+ processedParts = await preprocessAudio(messageParts, config.sttAdapter, downloader);
201
+ }
202
+ catch (err) {
203
+ trace.warn("whatsapp", "Audio preprocessing failed", { error: err instanceof Error ? err.message : String(err) });
204
+ }
205
+ }
206
+ const messageText = extractText(processedParts);
183
207
  // --- Memory: recall past context about this user ---
184
208
  let recalledMemory;
185
209
  if (config.memoryBasePath) {
@@ -189,31 +213,96 @@ async function processWhatsAppMessage(config, tenantId, senderPhone, messagePart
189
213
  recalledMemory = await store.recall(query, 500) || undefined;
190
214
  }
191
215
  catch (err) {
192
- console.warn(`[whatsapp] Memory recall failed for tenant=${tenantId}: ${err instanceof Error ? err.message : String(err)}`);
216
+ trace.warn("whatsapp", "Memory recall failed", { tenantId, error: err instanceof Error ? err.message : String(err) });
217
+ }
218
+ }
219
+ // --- Knowledge: retrieve relevant context ---
220
+ let knowledgeContext;
221
+ if (config.knowledgePipeline && messageText.length > 0) {
222
+ const knowledgeMode = config.knowledgeMode ?? "auto";
223
+ if (knowledgeMode === "auto") {
224
+ try {
225
+ const results = await config.knowledgePipeline.retrieve(messageText, { topK: 5 });
226
+ knowledgeContext = formatKnowledgeContext(results);
227
+ }
228
+ catch (err) {
229
+ trace.warn("whatsapp", "Knowledge retrieval failed", { error: err instanceof Error ? err.message : String(err) });
230
+ }
193
231
  }
194
232
  }
233
+ // --- Contact memory: recall persistent facts about this user ---
234
+ let contactContext;
235
+ if (config.contactMemoryService) {
236
+ try {
237
+ const facts = await config.contactMemoryService.recall(senderPhone, tenantId);
238
+ contactContext = formatContactContext(facts);
239
+ }
240
+ catch (err) {
241
+ trace.warn("whatsapp", "Contact memory recall failed", { tenantId, error: err instanceof Error ? err.message : String(err) });
242
+ }
243
+ }
244
+ // Merge recalled memory + knowledge context + contact context
245
+ const combinedMemory = mergeContextSources(recalledMemory, knowledgeContext, contactContext);
195
246
  // --- Tools: build per-call builtin tools ---
196
247
  const callTools = new Map();
197
248
  if (tenant.escalationContact?.phone) {
198
249
  const ownerPhone = tenant.escalationContact.phone.replace(/\+/g, "");
199
250
  callTools.set("notify_owner", async (input) => {
200
251
  const msg = String(input.message ?? "");
201
- const fullMessage = `[Ale - Notificación automática]\n\nCliente: ${senderPhone}\n${msg}`;
252
+ const fullMessage = `[${tenant.businessName ?? tenant.name} - Notificación automática]\n\nCliente: ${senderPhone}\n${msg}`;
202
253
  await sendWhatsAppMessage(phoneNumberId, resolvedAccessToken, ownerPhone, {
203
254
  type: "text",
204
255
  text: { body: fullMessage },
205
256
  });
206
- console.log(`[whatsapp] Owner notified for tenant=${tenantId} owner=${ownerPhone}`);
257
+ trace.log("whatsapp", "Owner notified", { tenantId, ownerPhone });
207
258
  return { success: true, message: "Owner has been notified." };
208
259
  });
209
260
  }
261
+ // Register knowledge_search tool for "tool" mode
262
+ if (config.knowledgePipeline && (config.knowledgeMode ?? "auto") === "tool") {
263
+ callTools.set("knowledge_search", async (input) => {
264
+ const query = String(input.query ?? "");
265
+ const results = await config.knowledgePipeline.retrieve(query, { topK: 5 });
266
+ return results.map((r) => ({ content: r.content, score: r.score }));
267
+ });
268
+ const hasKnowledgeTool = config.orchestrator.tools?.some((t) => t.name === "knowledge_search");
269
+ if (!hasKnowledgeTool) {
270
+ config.orchestrator.registerTools([KNOWLEDGE_SEARCH_TOOL]);
271
+ }
272
+ }
210
273
  // Register notify_owner tool definition on the orchestrator if not already present
211
- if (callTools.size > 0 && config.orchestrator.tools) {
274
+ if (callTools.has("notify_owner") && config.orchestrator.tools) {
212
275
  const hasNotifyTool = config.orchestrator.tools.some((t) => t.name === "notify_owner");
213
276
  if (!hasNotifyTool) {
214
277
  config.orchestrator.registerTools([NOTIFY_OWNER_TOOL]);
215
278
  }
216
279
  }
280
+ // Get or create session first (needed for ping-pong guard)
281
+ const session = await config.sessionRegistry.getOrCreate({
282
+ appName: config.appName,
283
+ tenantId,
284
+ userId: senderPhone,
285
+ systemPrompt: "",
286
+ idleTimeoutMs: tenant.idleTimeoutMs,
287
+ });
288
+ // Resolve agent context (multi-agent routing with ping-pong guard)
289
+ const agentCtx = await resolveAgentContextAsync(tenant, processedParts, session, { handoffSummarizer: config.handoffSummarizer, eventBus: config.eventBus }, "whatsapp", callTools);
290
+ // Update session with resolved prompt and agent
291
+ session.setSystemPrompt(agentCtx.systemPrompt);
292
+ if (agentCtx.activeAgentId) {
293
+ session.setActiveAgent(agentCtx.activeAgentId, agentCtx.handoffBrief);
294
+ }
295
+ const tenantToolCtx = agentCtx.tenantToolContext;
296
+ // Register webhook tool definitions on the orchestrator
297
+ if (tenantToolCtx.toolDefinitions.length > 0) {
298
+ config.orchestrator.registerTools(tenantToolCtx.toolDefinitions);
299
+ }
300
+ const perCallConfig = {
301
+ toolAllowlist: tenantToolCtx.toolAllowlist,
302
+ rateLimiter: tenantToolCtx.rateLimiter,
303
+ tenantId: tenant.tenantId,
304
+ additionalTools: tenantToolCtx.toolDefinitions.length > 0 ? tenantToolCtx.toolDefinitions : undefined,
305
+ };
217
306
  // --- Budget check ---
218
307
  const activeBilling = tenant.billing?.budgetEndpoint
219
308
  ? tenant.billing
@@ -223,7 +312,7 @@ async function processWhatsAppMessage(config, tenantId, senderPhone, messagePart
223
312
  if (!budgetResult.allowed) {
224
313
  const overBudgetMsg = tenant.billing?.overBudgetMessage
225
314
  ?? activeBilling.overBudgetMessage ?? "Budget exhausted.";
226
- console.log(`[whatsapp] Budget exhausted for tenant=${tenantId} sender=${senderPhone}`);
315
+ trace.log("whatsapp", "Budget exhausted", { tenantId, sender: senderPhone });
227
316
  try {
228
317
  await sendWhatsAppMessage(phoneNumberId, resolvedAccessToken, senderPhone, {
229
318
  type: "text",
@@ -231,7 +320,7 @@ async function processWhatsAppMessage(config, tenantId, senderPhone, messagePart
231
320
  });
232
321
  }
233
322
  catch (err) {
234
- console.warn(`[whatsapp] Failed to send over-budget reply: ${err instanceof Error ? err.message : String(err)}`);
323
+ trace.warn("whatsapp", "Failed to send over-budget reply", { error: err instanceof Error ? err.message : String(err) });
235
324
  }
236
325
  return;
237
326
  }
@@ -245,12 +334,94 @@ async function processWhatsAppMessage(config, tenantId, senderPhone, messagePart
245
334
  externalUserId: senderPhone,
246
335
  messageContent: messageText,
247
336
  messageRole: "USER",
337
+ traceId: trace.traceId,
248
338
  timestamp: new Date().toISOString(),
249
339
  });
250
340
  }
251
341
  let replyText;
252
342
  try {
253
- const result = await config.orchestrator.processMessage(session, messageParts, recalledMemory, callTools.size > 0 ? callTools : undefined);
343
+ const result = await config.orchestrator.processMessage(session, processedParts, combinedMemory, tenantToolCtx.callBuiltinTools.size > 0 ? tenantToolCtx.callBuiltinTools : undefined, perCallConfig);
344
+ // Persist mutated session (required for non-reference stores like Redis)
345
+ await config.sessionRegistry.save(session);
346
+ // Emit handoff events when message was queued
347
+ if (result.queued && config.eventEmitter) {
348
+ config.eventEmitter.emit({
349
+ eventType: "HANDOFF_MESSAGE_QUEUED",
350
+ tenantId,
351
+ channel: "whatsapp",
352
+ externalUserId: senderPhone,
353
+ sessionMode: session.sessionMode,
354
+ traceId: trace.traceId,
355
+ timestamp: new Date().toISOString(),
356
+ });
357
+ }
358
+ // Emit escalation event when detected
359
+ if (result.escalation && config.eventEmitter) {
360
+ config.eventEmitter.emit({
361
+ eventType: "ESCALATION_DETECTED",
362
+ tenantId,
363
+ channel: "whatsapp",
364
+ externalUserId: senderPhone,
365
+ escalationReason: result.escalation.reason,
366
+ escalationDetail: result.escalation.detail,
367
+ summary: result.contextSummary,
368
+ sessionMode: session.sessionMode,
369
+ traceId: trace.traceId,
370
+ timestamp: new Date().toISOString(),
371
+ });
372
+ }
373
+ // Emit TOOL_EXECUTED events for product backend visibility
374
+ if (result.toolExecutions && config.eventEmitter) {
375
+ for (const exec of result.toolExecutions) {
376
+ config.eventEmitter.emit({
377
+ eventType: "TOOL_EXECUTED",
378
+ tenantId,
379
+ channel: "whatsapp",
380
+ externalUserId: senderPhone,
381
+ toolName: exec.toolName,
382
+ durationMs: exec.durationMs,
383
+ success: exec.success,
384
+ resultSummary: exec.resultSummary,
385
+ traceId: trace.traceId,
386
+ timestamp: new Date().toISOString(),
387
+ });
388
+ }
389
+ }
390
+ // Emit AGENT_ROUTED when multi-agent routing is active
391
+ if (agentCtx.activeAgentId && config.eventEmitter) {
392
+ config.eventEmitter.emit({
393
+ eventType: "AGENT_ROUTED",
394
+ tenantId,
395
+ channel: "whatsapp",
396
+ externalUserId: senderPhone,
397
+ activeAgentId: agentCtx.activeAgentId,
398
+ activeAgentName: agentCtx.activeAgentName,
399
+ routingTier: agentCtx.routingResult?.tier,
400
+ routingConfidence: agentCtx.routingResult?.confidence,
401
+ traceId: trace.traceId,
402
+ timestamp: new Date().toISOString(),
403
+ });
404
+ }
405
+ // Emit AGENT_HANDOFF when an agent switch occurred (or was blocked)
406
+ if ((agentCtx.isHandoff || agentCtx.pingPongBlocked) && config.eventEmitter) {
407
+ const fromAgent = tenant.agents?.find((a) => a.id === agentCtx.previousAgentId);
408
+ const toAgent = tenant.agents?.find((a) => a.id === agentCtx.activeAgentId);
409
+ config.eventEmitter.emit({
410
+ eventType: "AGENT_HANDOFF",
411
+ tenantId,
412
+ channel: "whatsapp",
413
+ externalUserId: senderPhone,
414
+ fromAgentId: agentCtx.previousAgentId,
415
+ fromAgentName: fromAgent?.name,
416
+ toAgentId: agentCtx.activeAgentId,
417
+ toAgentName: toAgent?.name,
418
+ handoffBrief: agentCtx.handoffBrief,
419
+ handoffBlocked: agentCtx.pingPongBlocked,
420
+ handoffBlockReason: agentCtx.pingPongReason,
421
+ traceId: trace.traceId,
422
+ timestamp: new Date().toISOString(),
423
+ });
424
+ }
254
425
  replyText = toWhatsAppFormat(stripSuggestionTags(extractText(result.parts)));
255
426
  // Report usage (fire-and-forget)
256
427
  if (activeBilling) {
@@ -270,12 +441,13 @@ async function processWhatsAppMessage(config, tenantId, senderPhone, messagePart
270
441
  externalUserId: senderPhone,
271
442
  messageContent: replyText,
272
443
  messageRole: "ASSISTANT",
444
+ traceId: trace.traceId,
273
445
  timestamp: new Date().toISOString(),
274
446
  });
275
447
  }
276
448
  }
277
449
  catch (err) {
278
- console.error(`[whatsapp] Orchestrator error for tenant=${tenantId}: ${err instanceof Error ? err.message : String(err)}`);
450
+ trace.error("whatsapp", "Orchestrator error", { tenantId, error: err instanceof Error ? err.message : String(err) });
279
451
  replyText = "Something went wrong. Please try again.";
280
452
  }
281
453
  // Reply via WhatsApp Cloud API
@@ -286,7 +458,7 @@ async function processWhatsAppMessage(config, tenantId, senderPhone, messagePart
286
458
  });
287
459
  }
288
460
  catch (err) {
289
- console.warn(`[whatsapp] Failed to send reply -- phoneNumberId=${phoneNumberId} recipient=${senderPhone} error=${err instanceof Error ? err.message : String(err)}`);
461
+ trace.warn("whatsapp", "Failed to send reply", { phoneNumberId, recipient: senderPhone, error: err instanceof Error ? err.message : String(err) });
290
462
  }
291
463
  // --- Memory: save what was learned from this exchange ---
292
464
  if (config.memoryBasePath && messageText.length > 5) {
@@ -299,7 +471,7 @@ async function processWhatsAppMessage(config, tenantId, senderPhone, messagePart
299
471
  });
300
472
  }
301
473
  catch (err) {
302
- console.warn(`[whatsapp] Memory save failed for tenant=${tenantId}: ${err instanceof Error ? err.message : String(err)}`);
474
+ trace.warn("whatsapp", "Memory save failed", { tenantId, error: err instanceof Error ? err.message : String(err) });
303
475
  }
304
476
  }
305
477
  }
@@ -1 +1 @@
1
- {"version":3,"file":"whatsapp-webhook-routes.js","sourceRoot":"","sources":["../../src/gateway/whatsapp-webhook-routes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"whatsapp-webhook-routes.js","sourceRoot":"","sources":["../../src/gateway/whatsapp-webhook-routes.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,12 @@
1
1
  import { Hono } from "hono";
2
2
  import type { UpgradeWebSocket } from "hono/ws";
3
3
  import type { WebChannel } from "../channels/web-channel.js";
4
+ import type { SttAdapter, RetrievalPipeline, ContactMemoryService } from "@kilnai/core";
4
5
  import type { ModeBOrchestrator } from "../session/mode-b-orchestrator.js";
5
6
  import type { SessionRegistry } from "../session/session-registry.js";
6
7
  import type { TenantRegistry } from "../tenant/tenant-registry.js";
8
+ import type { AgentHandoffSummarizer } from "../session/agent-handoff-summarizer.js";
9
+ import type { EventBus } from "@kilnai/core";
7
10
  import type { BillingConfig } from "./budget-middleware.js";
8
11
  import type { ConversationEventEmitter } from "./conversation-event-emitter.js";
9
12
  export interface WsTenantRoutesConfig {
@@ -16,6 +19,12 @@ export interface WsTenantRoutesConfig {
16
19
  readonly billing?: BillingConfig;
17
20
  readonly eventEmitter?: ConversationEventEmitter;
18
21
  readonly allowedOrigins?: readonly string[];
22
+ readonly sttAdapter?: SttAdapter;
23
+ readonly knowledgePipeline?: RetrievalPipeline;
24
+ readonly knowledgeMode?: "auto" | "tool";
25
+ readonly contactMemoryService?: ContactMemoryService;
26
+ readonly handoffSummarizer?: AgentHandoffSummarizer;
27
+ readonly eventBus?: EventBus;
19
28
  }
20
29
  export declare function createWsTenantRoutes(config: WsTenantRoutesConfig): Hono;
21
30
  //# sourceMappingURL=ws-tenant-routes.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ws-tenant-routes.d.ts","sourceRoot":"","sources":["../../src/gateway/ws-tenant-routes.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,KAAK,EAAE,gBAAgB,EAAa,MAAM,SAAS,CAAC;AAC3D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAG7D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAC3E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAInE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAGhF,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IAC5C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,YAAY,EAAE,iBAAiB,CAAC;IACzC,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAC;IAC1C,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC;IACxC,QAAQ,CAAC,OAAO,CAAC,EAAE,aAAa,CAAC;IACjC,QAAQ,CAAC,YAAY,CAAC,EAAE,wBAAwB,CAAC;IACjD,QAAQ,CAAC,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC7C;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,oBAAoB,GAAG,IAAI,CAyJvE"}
1
+ {"version":3,"file":"ws-tenant-routes.d.ts","sourceRoot":"","sources":["../../src/gateway/ws-tenant-routes.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,KAAK,EAAE,gBAAgB,EAAa,MAAM,SAAS,CAAC;AAC3D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,KAAK,EAAe,UAAU,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAErG,OAAO,KAAK,EAAE,iBAAiB,EAAqB,MAAM,mCAAmC,CAAC;AAC9F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAEnE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,wCAAwC,CAAC;AACrF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAG7C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAMhF,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IAC5C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,YAAY,EAAE,iBAAiB,CAAC;IACzC,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAC;IAC1C,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC;IACxC,QAAQ,CAAC,OAAO,CAAC,EAAE,aAAa,CAAC;IACjC,QAAQ,CAAC,YAAY,CAAC,EAAE,wBAAwB,CAAC;IACjD,QAAQ,CAAC,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5C,QAAQ,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC;IACjC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IAC/C,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IACrD,QAAQ,CAAC,iBAAiB,CAAC,EAAE,sBAAsB,CAAC;IACpD,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC;CAC9B;AAWD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,oBAAoB,GAAG,IAAI,CAuVvE"}