@kilnai/core 0.1.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 (609) hide show
  1. package/dist/agents/circuit-breaker.d.ts +26 -0
  2. package/dist/agents/circuit-breaker.d.ts.map +1 -0
  3. package/dist/agents/circuit-breaker.js +90 -0
  4. package/dist/agents/circuit-breaker.js.map +1 -0
  5. package/dist/agents/context-compressor.d.ts +13 -0
  6. package/dist/agents/context-compressor.d.ts.map +1 -0
  7. package/dist/agents/context-compressor.js +21 -0
  8. package/dist/agents/context-compressor.js.map +1 -0
  9. package/dist/agents/index.d.ts +68 -0
  10. package/dist/agents/index.d.ts.map +1 -0
  11. package/dist/agents/index.js +13 -0
  12. package/dist/agents/index.js.map +1 -0
  13. package/dist/agents/infrastructure/anthropic.d.ts +24 -0
  14. package/dist/agents/infrastructure/anthropic.d.ts.map +1 -0
  15. package/dist/agents/infrastructure/anthropic.js +226 -0
  16. package/dist/agents/infrastructure/anthropic.js.map +1 -0
  17. package/dist/agents/infrastructure/deepseek.d.ts +10 -0
  18. package/dist/agents/infrastructure/deepseek.d.ts.map +1 -0
  19. package/dist/agents/infrastructure/deepseek.js +14 -0
  20. package/dist/agents/infrastructure/deepseek.js.map +1 -0
  21. package/dist/agents/infrastructure/ollama.d.ts +20 -0
  22. package/dist/agents/infrastructure/ollama.d.ts.map +1 -0
  23. package/dist/agents/infrastructure/ollama.js +128 -0
  24. package/dist/agents/infrastructure/ollama.js.map +1 -0
  25. package/dist/agents/infrastructure/openai-compat.d.ts +25 -0
  26. package/dist/agents/infrastructure/openai-compat.d.ts.map +1 -0
  27. package/dist/agents/infrastructure/openai-compat.js +211 -0
  28. package/dist/agents/infrastructure/openai-compat.js.map +1 -0
  29. package/dist/agents/infrastructure/openai.d.ts +12 -0
  30. package/dist/agents/infrastructure/openai.d.ts.map +1 -0
  31. package/dist/agents/infrastructure/openai.js +16 -0
  32. package/dist/agents/infrastructure/openai.js.map +1 -0
  33. package/dist/agents/infrastructure/retry.d.ts +10 -0
  34. package/dist/agents/infrastructure/retry.d.ts.map +1 -0
  35. package/dist/agents/infrastructure/retry.js +22 -0
  36. package/dist/agents/infrastructure/retry.js.map +1 -0
  37. package/dist/agents/mcp-client.d.ts +22 -0
  38. package/dist/agents/mcp-client.d.ts.map +1 -0
  39. package/dist/agents/mcp-client.js +104 -0
  40. package/dist/agents/mcp-client.js.map +1 -0
  41. package/dist/agents/model-pricing.d.ts +9 -0
  42. package/dist/agents/model-pricing.d.ts.map +1 -0
  43. package/dist/agents/model-pricing.js +17 -0
  44. package/dist/agents/model-pricing.js.map +1 -0
  45. package/dist/agents/provider-registry.d.ts +25 -0
  46. package/dist/agents/provider-registry.d.ts.map +1 -0
  47. package/dist/agents/provider-registry.js +62 -0
  48. package/dist/agents/provider-registry.js.map +1 -0
  49. package/dist/agents/tool-cache.d.ts +13 -0
  50. package/dist/agents/tool-cache.d.ts.map +1 -0
  51. package/dist/agents/tool-cache.js +52 -0
  52. package/dist/agents/tool-cache.js.map +1 -0
  53. package/dist/agents/tool-rag.d.ts +15 -0
  54. package/dist/agents/tool-rag.d.ts.map +1 -0
  55. package/dist/agents/tool-rag.js +92 -0
  56. package/dist/agents/tool-rag.js.map +1 -0
  57. package/dist/agents/tool-registry.d.ts +29 -0
  58. package/dist/agents/tool-registry.d.ts.map +1 -0
  59. package/dist/agents/tool-registry.js +64 -0
  60. package/dist/agents/tool-registry.js.map +1 -0
  61. package/dist/cost/cost-tracker.d.ts +27 -0
  62. package/dist/cost/cost-tracker.d.ts.map +1 -0
  63. package/dist/cost/cost-tracker.js +103 -0
  64. package/dist/cost/cost-tracker.js.map +1 -0
  65. package/dist/cost/index.d.ts +30 -0
  66. package/dist/cost/index.d.ts.map +1 -0
  67. package/dist/cost/index.js +2 -0
  68. package/dist/cost/index.js.map +1 -0
  69. package/dist/domain/domain-package-adapter.d.ts +13 -0
  70. package/dist/domain/domain-package-adapter.d.ts.map +1 -0
  71. package/dist/domain/domain-package-adapter.js +66 -0
  72. package/dist/domain/domain-package-adapter.js.map +1 -0
  73. package/dist/domain/domain-registry.d.ts +26 -0
  74. package/dist/domain/domain-registry.d.ts.map +1 -0
  75. package/dist/domain/domain-registry.js +119 -0
  76. package/dist/domain/domain-registry.js.map +1 -0
  77. package/dist/domain/index.d.ts +22 -0
  78. package/dist/domain/index.d.ts.map +1 -0
  79. package/dist/domain/index.js +30 -0
  80. package/dist/domain/index.js.map +1 -0
  81. package/dist/domain/yaml-parser.d.ts +18 -0
  82. package/dist/domain/yaml-parser.d.ts.map +1 -0
  83. package/dist/domain/yaml-parser.js +47 -0
  84. package/dist/domain/yaml-parser.js.map +1 -0
  85. package/dist/domain/yaml-schema.d.ts +26 -0
  86. package/dist/domain/yaml-schema.d.ts.map +1 -0
  87. package/dist/domain/yaml-schema.js +66 -0
  88. package/dist/domain/yaml-schema.js.map +1 -0
  89. package/dist/engine/composites/app.d.ts +39 -0
  90. package/dist/engine/composites/app.d.ts.map +1 -0
  91. package/dist/engine/composites/app.js +125 -0
  92. package/dist/engine/composites/app.js.map +1 -0
  93. package/dist/engine/composites/router.d.ts +20 -0
  94. package/dist/engine/composites/router.d.ts.map +1 -0
  95. package/dist/engine/composites/router.js +31 -0
  96. package/dist/engine/composites/router.js.map +1 -0
  97. package/dist/engine/composites/team.d.ts +36 -0
  98. package/dist/engine/composites/team.d.ts.map +1 -0
  99. package/dist/engine/composites/team.js +100 -0
  100. package/dist/engine/composites/team.js.map +1 -0
  101. package/dist/engine/domain/a2a-config.d.ts +53 -0
  102. package/dist/engine/domain/a2a-config.d.ts.map +1 -0
  103. package/dist/engine/domain/a2a-config.js +32 -0
  104. package/dist/engine/domain/a2a-config.js.map +1 -0
  105. package/dist/engine/domain/agent.d.ts +18 -0
  106. package/dist/engine/domain/agent.d.ts.map +1 -0
  107. package/dist/engine/domain/agent.js +4 -0
  108. package/dist/engine/domain/agent.js.map +1 -0
  109. package/dist/engine/domain/capability.d.ts +24 -0
  110. package/dist/engine/domain/capability.d.ts.map +1 -0
  111. package/dist/engine/domain/capability.js +3 -0
  112. package/dist/engine/domain/capability.js.map +1 -0
  113. package/dist/engine/domain/channel.d.ts +37 -0
  114. package/dist/engine/domain/channel.d.ts.map +1 -0
  115. package/dist/engine/domain/channel.js +4 -0
  116. package/dist/engine/domain/channel.js.map +1 -0
  117. package/dist/engine/domain/chunker.d.ts +22 -0
  118. package/dist/engine/domain/chunker.d.ts.map +1 -0
  119. package/dist/engine/domain/chunker.js +3 -0
  120. package/dist/engine/domain/chunker.js.map +1 -0
  121. package/dist/engine/domain/content.d.ts +57 -0
  122. package/dist/engine/domain/content.d.ts.map +1 -0
  123. package/dist/engine/domain/content.js +63 -0
  124. package/dist/engine/domain/content.js.map +1 -0
  125. package/dist/engine/domain/cron.d.ts +15 -0
  126. package/dist/engine/domain/cron.d.ts.map +1 -0
  127. package/dist/engine/domain/cron.js +114 -0
  128. package/dist/engine/domain/cron.js.map +1 -0
  129. package/dist/engine/domain/embedding.d.ts +9 -0
  130. package/dist/engine/domain/embedding.d.ts.map +1 -0
  131. package/dist/engine/domain/embedding.js +4 -0
  132. package/dist/engine/domain/embedding.js.map +1 -0
  133. package/dist/engine/domain/eval-config.d.ts +36 -0
  134. package/dist/engine/domain/eval-config.d.ts.map +1 -0
  135. package/dist/engine/domain/eval-config.js +155 -0
  136. package/dist/engine/domain/eval-config.js.map +1 -0
  137. package/dist/engine/domain/knowledge-config.d.ts +34 -0
  138. package/dist/engine/domain/knowledge-config.d.ts.map +1 -0
  139. package/dist/engine/domain/knowledge-config.js +62 -0
  140. package/dist/engine/domain/knowledge-config.js.map +1 -0
  141. package/dist/engine/domain/mcp-config.d.ts +15 -0
  142. package/dist/engine/domain/mcp-config.d.ts.map +1 -0
  143. package/dist/engine/domain/mcp-config.js +26 -0
  144. package/dist/engine/domain/mcp-config.js.map +1 -0
  145. package/dist/engine/domain/memory.d.ts +17 -0
  146. package/dist/engine/domain/memory.d.ts.map +1 -0
  147. package/dist/engine/domain/memory.js +4 -0
  148. package/dist/engine/domain/memory.js.map +1 -0
  149. package/dist/engine/domain/modality.d.ts +5 -0
  150. package/dist/engine/domain/modality.d.ts.map +1 -0
  151. package/dist/engine/domain/modality.js +19 -0
  152. package/dist/engine/domain/modality.js.map +1 -0
  153. package/dist/engine/domain/orchestrator-config.d.ts +11 -0
  154. package/dist/engine/domain/orchestrator-config.d.ts.map +1 -0
  155. package/dist/engine/domain/orchestrator-config.js +4 -0
  156. package/dist/engine/domain/orchestrator-config.js.map +1 -0
  157. package/dist/engine/domain/prompt-assembler.d.ts +32 -0
  158. package/dist/engine/domain/prompt-assembler.d.ts.map +1 -0
  159. package/dist/engine/domain/prompt-assembler.js +60 -0
  160. package/dist/engine/domain/prompt-assembler.js.map +1 -0
  161. package/dist/engine/domain/safety-config.d.ts +51 -0
  162. package/dist/engine/domain/safety-config.d.ts.map +1 -0
  163. package/dist/engine/domain/safety-config.js +74 -0
  164. package/dist/engine/domain/safety-config.js.map +1 -0
  165. package/dist/engine/domain/speech-config.d.ts +53 -0
  166. package/dist/engine/domain/speech-config.d.ts.map +1 -0
  167. package/dist/engine/domain/speech-config.js +26 -0
  168. package/dist/engine/domain/speech-config.js.map +1 -0
  169. package/dist/engine/domain/task.d.ts +16 -0
  170. package/dist/engine/domain/task.d.ts.map +1 -0
  171. package/dist/engine/domain/task.js +4 -0
  172. package/dist/engine/domain/task.js.map +1 -0
  173. package/dist/engine/domain/tool-selection-config.d.ts +12 -0
  174. package/dist/engine/domain/tool-selection-config.d.ts.map +1 -0
  175. package/dist/engine/domain/tool-selection-config.js +22 -0
  176. package/dist/engine/domain/tool-selection-config.js.map +1 -0
  177. package/dist/engine/domain/trigger.d.ts +43 -0
  178. package/dist/engine/domain/trigger.d.ts.map +1 -0
  179. package/dist/engine/domain/trigger.js +39 -0
  180. package/dist/engine/domain/trigger.js.map +1 -0
  181. package/dist/engine/domain/vector-store.d.ts +27 -0
  182. package/dist/engine/domain/vector-store.d.ts.map +1 -0
  183. package/dist/engine/domain/vector-store.js +3 -0
  184. package/dist/engine/domain/vector-store.js.map +1 -0
  185. package/dist/engine/domain/workflow.d.ts +11 -0
  186. package/dist/engine/domain/workflow.d.ts.map +1 -0
  187. package/dist/engine/domain/workflow.js +4 -0
  188. package/dist/engine/domain/workflow.js.map +1 -0
  189. package/dist/engine/error-catalog.d.ts +8 -0
  190. package/dist/engine/error-catalog.d.ts.map +1 -0
  191. package/dist/engine/error-catalog.js +335 -0
  192. package/dist/engine/error-catalog.js.map +1 -0
  193. package/dist/engine/errors.d.ts +18 -0
  194. package/dist/engine/errors.d.ts.map +1 -0
  195. package/dist/engine/errors.js +20 -0
  196. package/dist/engine/errors.js.map +1 -0
  197. package/dist/engine/gateway/delegation-config.d.ts +52 -0
  198. package/dist/engine/gateway/delegation-config.d.ts.map +1 -0
  199. package/dist/engine/gateway/delegation-config.js +48 -0
  200. package/dist/engine/gateway/delegation-config.js.map +1 -0
  201. package/dist/engine/gateway/gateway-config.d.ts +33 -0
  202. package/dist/engine/gateway/gateway-config.d.ts.map +1 -0
  203. package/dist/engine/gateway/gateway-config.js +61 -0
  204. package/dist/engine/gateway/gateway-config.js.map +1 -0
  205. package/dist/engine/gateway/gateway-loader.d.ts +10 -0
  206. package/dist/engine/gateway/gateway-loader.d.ts.map +1 -0
  207. package/dist/engine/gateway/gateway-loader.js +150 -0
  208. package/dist/engine/gateway/gateway-loader.js.map +1 -0
  209. package/dist/engine/gateway/mode-b-config.d.ts +44 -0
  210. package/dist/engine/gateway/mode-b-config.d.ts.map +1 -0
  211. package/dist/engine/gateway/mode-b-config.js +45 -0
  212. package/dist/engine/gateway/mode-b-config.js.map +1 -0
  213. package/dist/engine/gateway/mode-b-loader.d.ts +14 -0
  214. package/dist/engine/gateway/mode-b-loader.d.ts.map +1 -0
  215. package/dist/engine/gateway/mode-b-loader.js +104 -0
  216. package/dist/engine/gateway/mode-b-loader.js.map +1 -0
  217. package/dist/engine/gateway/observability-config.d.ts +19 -0
  218. package/dist/engine/gateway/observability-config.d.ts.map +1 -0
  219. package/dist/engine/gateway/observability-config.js +27 -0
  220. package/dist/engine/gateway/observability-config.js.map +1 -0
  221. package/dist/engine/gateway/tenant-config.d.ts +59 -0
  222. package/dist/engine/gateway/tenant-config.d.ts.map +1 -0
  223. package/dist/engine/gateway/tenant-config.js +44 -0
  224. package/dist/engine/gateway/tenant-config.js.map +1 -0
  225. package/dist/engine/index.d.ts +49 -0
  226. package/dist/engine/index.d.ts.map +1 -0
  227. package/dist/engine/index.js +27 -0
  228. package/dist/engine/index.js.map +1 -0
  229. package/dist/engine/loader/app-loader.d.ts +18 -0
  230. package/dist/engine/loader/app-loader.d.ts.map +1 -0
  231. package/dist/engine/loader/app-loader.js +947 -0
  232. package/dist/engine/loader/app-loader.js.map +1 -0
  233. package/dist/engine/loader/preset-loader.d.ts +13 -0
  234. package/dist/engine/loader/preset-loader.d.ts.map +1 -0
  235. package/dist/engine/loader/preset-loader.js +51 -0
  236. package/dist/engine/loader/preset-loader.js.map +1 -0
  237. package/dist/eval/dataset-loader.d.ts +3 -0
  238. package/dist/eval/dataset-loader.d.ts.map +1 -0
  239. package/dist/eval/dataset-loader.js +70 -0
  240. package/dist/eval/dataset-loader.js.map +1 -0
  241. package/dist/eval/experiment-comparator.d.ts +16 -0
  242. package/dist/eval/experiment-comparator.d.ts.map +1 -0
  243. package/dist/eval/experiment-comparator.js +34 -0
  244. package/dist/eval/experiment-comparator.js.map +1 -0
  245. package/dist/eval/experiment-runner.d.ts +20 -0
  246. package/dist/eval/experiment-runner.d.ts.map +1 -0
  247. package/dist/eval/experiment-runner.js +54 -0
  248. package/dist/eval/experiment-runner.js.map +1 -0
  249. package/dist/eval/index.d.ts +21 -0
  250. package/dist/eval/index.d.ts.map +1 -0
  251. package/dist/eval/index.js +19 -0
  252. package/dist/eval/index.js.map +1 -0
  253. package/dist/eval/scorer-factory.d.ts +4 -0
  254. package/dist/eval/scorer-factory.d.ts.map +1 -0
  255. package/dist/eval/scorer-factory.js +67 -0
  256. package/dist/eval/scorer-factory.js.map +1 -0
  257. package/dist/eval/scorers/coherence-scorer.d.ts +8 -0
  258. package/dist/eval/scorers/coherence-scorer.d.ts.map +1 -0
  259. package/dist/eval/scorers/coherence-scorer.js +22 -0
  260. package/dist/eval/scorers/coherence-scorer.js.map +1 -0
  261. package/dist/eval/scorers/composite-scorer.d.ts +8 -0
  262. package/dist/eval/scorers/composite-scorer.d.ts.map +1 -0
  263. package/dist/eval/scorers/composite-scorer.js +19 -0
  264. package/dist/eval/scorers/composite-scorer.js.map +1 -0
  265. package/dist/eval/scorers/contains-scorer.d.ts +8 -0
  266. package/dist/eval/scorers/contains-scorer.d.ts.map +1 -0
  267. package/dist/eval/scorers/contains-scorer.js +30 -0
  268. package/dist/eval/scorers/contains-scorer.js.map +1 -0
  269. package/dist/eval/scorers/cost-scorer.d.ts +8 -0
  270. package/dist/eval/scorers/cost-scorer.d.ts.map +1 -0
  271. package/dist/eval/scorers/cost-scorer.js +19 -0
  272. package/dist/eval/scorers/cost-scorer.js.map +1 -0
  273. package/dist/eval/scorers/custom-prompt-scorer.d.ts +9 -0
  274. package/dist/eval/scorers/custom-prompt-scorer.d.ts.map +1 -0
  275. package/dist/eval/scorers/custom-prompt-scorer.js +24 -0
  276. package/dist/eval/scorers/custom-prompt-scorer.js.map +1 -0
  277. package/dist/eval/scorers/exact-match-scorer.d.ts +6 -0
  278. package/dist/eval/scorers/exact-match-scorer.d.ts.map +1 -0
  279. package/dist/eval/scorers/exact-match-scorer.js +16 -0
  280. package/dist/eval/scorers/exact-match-scorer.js.map +1 -0
  281. package/dist/eval/scorers/faithfulness-scorer.d.ts +8 -0
  282. package/dist/eval/scorers/faithfulness-scorer.d.ts.map +1 -0
  283. package/dist/eval/scorers/faithfulness-scorer.js +27 -0
  284. package/dist/eval/scorers/faithfulness-scorer.js.map +1 -0
  285. package/dist/eval/scorers/hallucination-scorer.d.ts +8 -0
  286. package/dist/eval/scorers/hallucination-scorer.d.ts.map +1 -0
  287. package/dist/eval/scorers/hallucination-scorer.js +31 -0
  288. package/dist/eval/scorers/hallucination-scorer.js.map +1 -0
  289. package/dist/eval/scorers/json-validity-scorer.d.ts +8 -0
  290. package/dist/eval/scorers/json-validity-scorer.d.ts.map +1 -0
  291. package/dist/eval/scorers/json-validity-scorer.js +32 -0
  292. package/dist/eval/scorers/json-validity-scorer.js.map +1 -0
  293. package/dist/eval/scorers/latency-scorer.d.ts +8 -0
  294. package/dist/eval/scorers/latency-scorer.d.ts.map +1 -0
  295. package/dist/eval/scorers/latency-scorer.js +19 -0
  296. package/dist/eval/scorers/latency-scorer.js.map +1 -0
  297. package/dist/eval/scorers/length-scorer.d.ts +9 -0
  298. package/dist/eval/scorers/length-scorer.d.ts.map +1 -0
  299. package/dist/eval/scorers/length-scorer.js +26 -0
  300. package/dist/eval/scorers/length-scorer.js.map +1 -0
  301. package/dist/eval/scorers/parse-llm-response.d.ts +5 -0
  302. package/dist/eval/scorers/parse-llm-response.d.ts.map +1 -0
  303. package/dist/eval/scorers/parse-llm-response.js +13 -0
  304. package/dist/eval/scorers/parse-llm-response.js.map +1 -0
  305. package/dist/eval/scorers/relevance-scorer.d.ts +8 -0
  306. package/dist/eval/scorers/relevance-scorer.d.ts.map +1 -0
  307. package/dist/eval/scorers/relevance-scorer.js +23 -0
  308. package/dist/eval/scorers/relevance-scorer.js.map +1 -0
  309. package/dist/eval/scorers/toxicity-scorer.d.ts +8 -0
  310. package/dist/eval/scorers/toxicity-scorer.d.ts.map +1 -0
  311. package/dist/eval/scorers/toxicity-scorer.js +26 -0
  312. package/dist/eval/scorers/toxicity-scorer.js.map +1 -0
  313. package/dist/eval/types.d.ts +51 -0
  314. package/dist/eval/types.d.ts.map +1 -0
  315. package/dist/eval/types.js +3 -0
  316. package/dist/eval/types.js.map +1 -0
  317. package/dist/events/event-bus.d.ts +36 -0
  318. package/dist/events/event-bus.d.ts.map +1 -0
  319. package/dist/events/event-bus.js +116 -0
  320. package/dist/events/event-bus.js.map +1 -0
  321. package/dist/events/event-store.d.ts +11 -0
  322. package/dist/events/event-store.d.ts.map +1 -0
  323. package/dist/events/event-store.js +2 -0
  324. package/dist/events/event-store.js.map +1 -0
  325. package/dist/events/index.d.ts +295 -0
  326. package/dist/events/index.d.ts.map +1 -0
  327. package/dist/events/index.js +48 -0
  328. package/dist/events/index.js.map +1 -0
  329. package/dist/events/trace.d.ts +30 -0
  330. package/dist/events/trace.d.ts.map +1 -0
  331. package/dist/events/trace.js +45 -0
  332. package/dist/events/trace.js.map +1 -0
  333. package/dist/index.d.ts +58 -0
  334. package/dist/index.d.ts.map +1 -0
  335. package/dist/index.js +42 -0
  336. package/dist/index.js.map +1 -0
  337. package/dist/knowledge/index.d.ts +10 -0
  338. package/dist/knowledge/index.d.ts.map +1 -0
  339. package/dist/knowledge/index.js +9 -0
  340. package/dist/knowledge/index.js.map +1 -0
  341. package/dist/knowledge/infrastructure/memory-vector-store.d.ts +12 -0
  342. package/dist/knowledge/infrastructure/memory-vector-store.d.ts.map +1 -0
  343. package/dist/knowledge/infrastructure/memory-vector-store.js +71 -0
  344. package/dist/knowledge/infrastructure/memory-vector-store.js.map +1 -0
  345. package/dist/knowledge/infrastructure/ollama-embedding.d.ts +15 -0
  346. package/dist/knowledge/infrastructure/ollama-embedding.d.ts.map +1 -0
  347. package/dist/knowledge/infrastructure/ollama-embedding.js +38 -0
  348. package/dist/knowledge/infrastructure/ollama-embedding.js.map +1 -0
  349. package/dist/knowledge/infrastructure/openai-embedding.d.ts +18 -0
  350. package/dist/knowledge/infrastructure/openai-embedding.d.ts.map +1 -0
  351. package/dist/knowledge/infrastructure/openai-embedding.js +66 -0
  352. package/dist/knowledge/infrastructure/openai-embedding.js.map +1 -0
  353. package/dist/knowledge/knowledge-capability.d.ts +15 -0
  354. package/dist/knowledge/knowledge-capability.d.ts.map +1 -0
  355. package/dist/knowledge/knowledge-capability.js +36 -0
  356. package/dist/knowledge/knowledge-capability.js.map +1 -0
  357. package/dist/knowledge/markdown-chunker.d.ts +8 -0
  358. package/dist/knowledge/markdown-chunker.d.ts.map +1 -0
  359. package/dist/knowledge/markdown-chunker.js +146 -0
  360. package/dist/knowledge/markdown-chunker.js.map +1 -0
  361. package/dist/knowledge/recursive-chunker.d.ts +8 -0
  362. package/dist/knowledge/recursive-chunker.d.ts.map +1 -0
  363. package/dist/knowledge/recursive-chunker.js +73 -0
  364. package/dist/knowledge/recursive-chunker.js.map +1 -0
  365. package/dist/knowledge/reranker.d.ts +5 -0
  366. package/dist/knowledge/reranker.d.ts.map +1 -0
  367. package/dist/knowledge/reranker.js +3 -0
  368. package/dist/knowledge/reranker.js.map +1 -0
  369. package/dist/knowledge/retrieval-pipeline.d.ts +26 -0
  370. package/dist/knowledge/retrieval-pipeline.d.ts.map +1 -0
  371. package/dist/knowledge/retrieval-pipeline.js +56 -0
  372. package/dist/knowledge/retrieval-pipeline.js.map +1 -0
  373. package/dist/memory/chunk-importer.d.ts +16 -0
  374. package/dist/memory/chunk-importer.d.ts.map +1 -0
  375. package/dist/memory/chunk-importer.js +58 -0
  376. package/dist/memory/chunk-importer.js.map +1 -0
  377. package/dist/memory/compactor.d.ts +59 -0
  378. package/dist/memory/compactor.d.ts.map +1 -0
  379. package/dist/memory/compactor.js +100 -0
  380. package/dist/memory/compactor.js.map +1 -0
  381. package/dist/memory/decay-curves.d.ts +33 -0
  382. package/dist/memory/decay-curves.d.ts.map +1 -0
  383. package/dist/memory/decay-curves.js +48 -0
  384. package/dist/memory/decay-curves.js.map +1 -0
  385. package/dist/memory/developer-identity.d.ts +7 -0
  386. package/dist/memory/developer-identity.d.ts.map +1 -0
  387. package/dist/memory/developer-identity.js +20 -0
  388. package/dist/memory/developer-identity.js.map +1 -0
  389. package/dist/memory/git-sync-manager.d.ts +28 -0
  390. package/dist/memory/git-sync-manager.d.ts.map +1 -0
  391. package/dist/memory/git-sync-manager.js +77 -0
  392. package/dist/memory/git-sync-manager.js.map +1 -0
  393. package/dist/memory/index.d.ts +46 -0
  394. package/dist/memory/index.d.ts.map +1 -0
  395. package/dist/memory/index.js +11 -0
  396. package/dist/memory/index.js.map +1 -0
  397. package/dist/memory/memory-manager.d.ts +34 -0
  398. package/dist/memory/memory-manager.d.ts.map +1 -0
  399. package/dist/memory/memory-manager.js +151 -0
  400. package/dist/memory/memory-manager.js.map +1 -0
  401. package/dist/memory/project-store.d.ts +28 -0
  402. package/dist/memory/project-store.d.ts.map +1 -0
  403. package/dist/memory/project-store.js +159 -0
  404. package/dist/memory/project-store.js.map +1 -0
  405. package/dist/memory/sqlite-store.d.ts +41 -0
  406. package/dist/memory/sqlite-store.d.ts.map +1 -0
  407. package/dist/memory/sqlite-store.js +320 -0
  408. package/dist/memory/sqlite-store.js.map +1 -0
  409. package/dist/observability/index.d.ts +5 -0
  410. package/dist/observability/index.d.ts.map +1 -0
  411. package/dist/observability/index.js +3 -0
  412. package/dist/observability/index.js.map +1 -0
  413. package/dist/observability/otel-exporter.d.ts +41 -0
  414. package/dist/observability/otel-exporter.d.ts.map +1 -0
  415. package/dist/observability/otel-exporter.js +166 -0
  416. package/dist/observability/otel-exporter.js.map +1 -0
  417. package/dist/observability/span-mapper.d.ts +24 -0
  418. package/dist/observability/span-mapper.d.ts.map +1 -0
  419. package/dist/observability/span-mapper.js +375 -0
  420. package/dist/observability/span-mapper.js.map +1 -0
  421. package/dist/orchestrator/checkpoint-store.d.ts +9 -0
  422. package/dist/orchestrator/checkpoint-store.d.ts.map +1 -0
  423. package/dist/orchestrator/checkpoint-store.js +2 -0
  424. package/dist/orchestrator/checkpoint-store.js.map +1 -0
  425. package/dist/orchestrator/checkpoint-types.d.ts +30 -0
  426. package/dist/orchestrator/checkpoint-types.d.ts.map +1 -0
  427. package/dist/orchestrator/checkpoint-types.js +2 -0
  428. package/dist/orchestrator/checkpoint-types.js.map +1 -0
  429. package/dist/orchestrator/guardrails.d.ts +23 -0
  430. package/dist/orchestrator/guardrails.d.ts.map +1 -0
  431. package/dist/orchestrator/guardrails.js +136 -0
  432. package/dist/orchestrator/guardrails.js.map +1 -0
  433. package/dist/orchestrator/index.d.ts +45 -0
  434. package/dist/orchestrator/index.d.ts.map +1 -0
  435. package/dist/orchestrator/index.js +8 -0
  436. package/dist/orchestrator/index.js.map +1 -0
  437. package/dist/orchestrator/interrupt.d.ts +20 -0
  438. package/dist/orchestrator/interrupt.d.ts.map +1 -0
  439. package/dist/orchestrator/interrupt.js +4 -0
  440. package/dist/orchestrator/interrupt.js.map +1 -0
  441. package/dist/orchestrator/orchestrator.d.ts +170 -0
  442. package/dist/orchestrator/orchestrator.d.ts.map +1 -0
  443. package/dist/orchestrator/orchestrator.js +509 -0
  444. package/dist/orchestrator/orchestrator.js.map +1 -0
  445. package/dist/orchestrator/phase-machine.d.ts +48 -0
  446. package/dist/orchestrator/phase-machine.d.ts.map +1 -0
  447. package/dist/orchestrator/phase-machine.js +176 -0
  448. package/dist/orchestrator/phase-machine.js.map +1 -0
  449. package/dist/orchestrator/schemas.d.ts +145 -0
  450. package/dist/orchestrator/schemas.d.ts.map +1 -0
  451. package/dist/orchestrator/schemas.js +126 -0
  452. package/dist/orchestrator/schemas.js.map +1 -0
  453. package/dist/orchestrator/sqlite-checkpoint-store.d.ts +15 -0
  454. package/dist/orchestrator/sqlite-checkpoint-store.d.ts.map +1 -0
  455. package/dist/orchestrator/sqlite-checkpoint-store.js +98 -0
  456. package/dist/orchestrator/sqlite-checkpoint-store.js.map +1 -0
  457. package/dist/orchestrator/strategies/index.d.ts +28 -0
  458. package/dist/orchestrator/strategies/index.d.ts.map +1 -0
  459. package/dist/orchestrator/strategies/index.js +20 -0
  460. package/dist/orchestrator/strategies/index.js.map +1 -0
  461. package/dist/orchestrator/strategies/sequential-strategy.d.ts +13 -0
  462. package/dist/orchestrator/strategies/sequential-strategy.d.ts.map +1 -0
  463. package/dist/orchestrator/strategies/sequential-strategy.js +29 -0
  464. package/dist/orchestrator/strategies/sequential-strategy.js.map +1 -0
  465. package/dist/orchestrator/strategies/supervisor-strategy.d.ts +43 -0
  466. package/dist/orchestrator/strategies/supervisor-strategy.d.ts.map +1 -0
  467. package/dist/orchestrator/strategies/supervisor-strategy.js +118 -0
  468. package/dist/orchestrator/strategies/supervisor-strategy.js.map +1 -0
  469. package/dist/orchestrator/strategies/swarm-strategy.d.ts +36 -0
  470. package/dist/orchestrator/strategies/swarm-strategy.d.ts.map +1 -0
  471. package/dist/orchestrator/strategies/swarm-strategy.js +126 -0
  472. package/dist/orchestrator/strategies/swarm-strategy.js.map +1 -0
  473. package/dist/package/index.d.ts +7 -0
  474. package/dist/package/index.d.ts.map +1 -0
  475. package/dist/package/index.js +6 -0
  476. package/dist/package/index.js.map +1 -0
  477. package/dist/package/security.d.ts +18 -0
  478. package/dist/package/security.d.ts.map +1 -0
  479. package/dist/package/security.js +110 -0
  480. package/dist/package/security.js.map +1 -0
  481. package/dist/package/types.d.ts +34 -0
  482. package/dist/package/types.d.ts.map +1 -0
  483. package/dist/package/types.js +4 -0
  484. package/dist/package/types.js.map +1 -0
  485. package/dist/package/yaml-parser.d.ts +22 -0
  486. package/dist/package/yaml-parser.d.ts.map +1 -0
  487. package/dist/package/yaml-parser.js +109 -0
  488. package/dist/package/yaml-parser.js.map +1 -0
  489. package/dist/package/yaml-schema.d.ts +42 -0
  490. package/dist/package/yaml-schema.d.ts.map +1 -0
  491. package/dist/package/yaml-schema.js +141 -0
  492. package/dist/package/yaml-schema.js.map +1 -0
  493. package/dist/safety/content-classifier.d.ts +31 -0
  494. package/dist/safety/content-classifier.d.ts.map +1 -0
  495. package/dist/safety/content-classifier.js +107 -0
  496. package/dist/safety/content-classifier.js.map +1 -0
  497. package/dist/safety/index.d.ts +10 -0
  498. package/dist/safety/index.d.ts.map +1 -0
  499. package/dist/safety/index.js +10 -0
  500. package/dist/safety/index.js.map +1 -0
  501. package/dist/safety/pii-scanner.d.ts +26 -0
  502. package/dist/safety/pii-scanner.d.ts.map +1 -0
  503. package/dist/safety/pii-scanner.js +82 -0
  504. package/dist/safety/pii-scanner.js.map +1 -0
  505. package/dist/safety/rails.d.ts +33 -0
  506. package/dist/safety/rails.d.ts.map +1 -0
  507. package/dist/safety/rails.js +134 -0
  508. package/dist/safety/rails.js.map +1 -0
  509. package/dist/safety/safety-pipeline.d.ts +41 -0
  510. package/dist/safety/safety-pipeline.d.ts.map +1 -0
  511. package/dist/safety/safety-pipeline.js +153 -0
  512. package/dist/safety/safety-pipeline.js.map +1 -0
  513. package/dist/safety/types.d.ts +38 -0
  514. package/dist/safety/types.d.ts.map +1 -0
  515. package/dist/safety/types.js +3 -0
  516. package/dist/safety/types.js.map +1 -0
  517. package/dist/sandbox/index.d.ts +17 -0
  518. package/dist/sandbox/index.d.ts.map +1 -0
  519. package/dist/sandbox/index.js +4 -0
  520. package/dist/sandbox/index.js.map +1 -0
  521. package/dist/sandbox/network-filter.d.ts +13 -0
  522. package/dist/sandbox/network-filter.d.ts.map +1 -0
  523. package/dist/sandbox/network-filter.js +43 -0
  524. package/dist/sandbox/network-filter.js.map +1 -0
  525. package/dist/sandbox/path-validator.d.ts +16 -0
  526. package/dist/sandbox/path-validator.d.ts.map +1 -0
  527. package/dist/sandbox/path-validator.js +47 -0
  528. package/dist/sandbox/path-validator.js.map +1 -0
  529. package/dist/sandbox/policies.d.ts +38 -0
  530. package/dist/sandbox/policies.d.ts.map +1 -0
  531. package/dist/sandbox/policies.js +145 -0
  532. package/dist/sandbox/policies.js.map +1 -0
  533. package/dist/security/audit-log.d.ts +17 -0
  534. package/dist/security/audit-log.d.ts.map +1 -0
  535. package/dist/security/audit-log.js +214 -0
  536. package/dist/security/audit-log.js.map +1 -0
  537. package/dist/security/guardian.d.ts +24 -0
  538. package/dist/security/guardian.d.ts.map +1 -0
  539. package/dist/security/guardian.js +177 -0
  540. package/dist/security/guardian.js.map +1 -0
  541. package/dist/security/index.d.ts +10 -0
  542. package/dist/security/index.d.ts.map +1 -0
  543. package/dist/security/index.js +7 -0
  544. package/dist/security/index.js.map +1 -0
  545. package/dist/security/prompt-scanner.d.ts +23 -0
  546. package/dist/security/prompt-scanner.d.ts.map +1 -0
  547. package/dist/security/prompt-scanner.js +376 -0
  548. package/dist/security/prompt-scanner.js.map +1 -0
  549. package/dist/security/secret-store.d.ts +18 -0
  550. package/dist/security/secret-store.d.ts.map +1 -0
  551. package/dist/security/secret-store.js +123 -0
  552. package/dist/security/secret-store.js.map +1 -0
  553. package/dist/security/self-audit.d.ts +33 -0
  554. package/dist/security/self-audit.d.ts.map +1 -0
  555. package/dist/security/self-audit.js +142 -0
  556. package/dist/security/self-audit.js.map +1 -0
  557. package/dist/security/types.d.ts +107 -0
  558. package/dist/security/types.d.ts.map +1 -0
  559. package/dist/security/types.js +3 -0
  560. package/dist/security/types.js.map +1 -0
  561. package/dist/skill/index.d.ts +7 -0
  562. package/dist/skill/index.d.ts.map +1 -0
  563. package/dist/skill/index.js +4 -0
  564. package/dist/skill/index.js.map +1 -0
  565. package/dist/skill/skill-registry.d.ts +26 -0
  566. package/dist/skill/skill-registry.d.ts.map +1 -0
  567. package/dist/skill/skill-registry.js +81 -0
  568. package/dist/skill/skill-registry.js.map +1 -0
  569. package/dist/skill/types.d.ts +17 -0
  570. package/dist/skill/types.d.ts.map +1 -0
  571. package/dist/skill/types.js +2 -0
  572. package/dist/skill/types.js.map +1 -0
  573. package/dist/skill/yaml-parser.d.ts +18 -0
  574. package/dist/skill/yaml-parser.d.ts.map +1 -0
  575. package/dist/skill/yaml-parser.js +61 -0
  576. package/dist/skill/yaml-parser.js.map +1 -0
  577. package/dist/skill/yaml-schema.d.ts +20 -0
  578. package/dist/skill/yaml-schema.d.ts.map +1 -0
  579. package/dist/skill/yaml-schema.js +80 -0
  580. package/dist/skill/yaml-schema.js.map +1 -0
  581. package/dist/tree/batch-executor.d.ts +28 -0
  582. package/dist/tree/batch-executor.d.ts.map +1 -0
  583. package/dist/tree/batch-executor.js +78 -0
  584. package/dist/tree/batch-executor.js.map +1 -0
  585. package/dist/tree/index.d.ts +26 -0
  586. package/dist/tree/index.d.ts.map +1 -0
  587. package/dist/tree/index.js +3 -0
  588. package/dist/tree/index.js.map +1 -0
  589. package/dist/tree/task-tree.d.ts +74 -0
  590. package/dist/tree/task-tree.d.ts.map +1 -0
  591. package/dist/tree/task-tree.js +262 -0
  592. package/dist/tree/task-tree.js.map +1 -0
  593. package/dist/verification/coverage-parser.d.ts +6 -0
  594. package/dist/verification/coverage-parser.d.ts.map +1 -0
  595. package/dist/verification/coverage-parser.js +29 -0
  596. package/dist/verification/coverage-parser.js.map +1 -0
  597. package/dist/verification/gate-runner.d.ts +18 -0
  598. package/dist/verification/gate-runner.d.ts.map +1 -0
  599. package/dist/verification/gate-runner.js +63 -0
  600. package/dist/verification/gate-runner.js.map +1 -0
  601. package/dist/verification/index.d.ts +24 -0
  602. package/dist/verification/index.d.ts.map +1 -0
  603. package/dist/verification/index.js +4 -0
  604. package/dist/verification/index.js.map +1 -0
  605. package/dist/verification/verification-loop.d.ts +32 -0
  606. package/dist/verification/verification-loop.d.ts.map +1 -0
  607. package/dist/verification/verification-loop.js +71 -0
  608. package/dist/verification/verification-loop.js.map +1 -0
  609. package/package.json +58 -0
@@ -0,0 +1,33 @@
1
+ import type { ObservabilityConfig } from "./observability-config.js";
2
+ /** Channel binding for a specific platform adapter */
3
+ export interface GatewayChannelBinding {
4
+ readonly type: string;
5
+ readonly path?: string;
6
+ readonly phoneNumber?: string;
7
+ readonly botToken?: string;
8
+ readonly multiTenant?: boolean;
9
+ readonly verifyTokenEnv?: string;
10
+ readonly adminTokenEnv?: string;
11
+ readonly [key: string]: unknown;
12
+ }
13
+ /** App binding: name, config path, optional workspace, and channel bindings */
14
+ export interface GatewayAppBinding {
15
+ readonly name: string;
16
+ readonly config: string;
17
+ readonly workspace?: string;
18
+ readonly channels: readonly GatewayChannelBinding[];
19
+ }
20
+ /** Top-level gateway configuration: port + multiple app bindings + optional observability */
21
+ export interface GatewayConfig {
22
+ readonly port: number;
23
+ readonly apps: readonly GatewayAppBinding[];
24
+ readonly observability?: ObservabilityConfig;
25
+ }
26
+ /** Validation error for gateway configuration */
27
+ export interface GatewayValidationError {
28
+ readonly field: string;
29
+ readonly message: string;
30
+ }
31
+ /** Validate a GatewayConfig. Returns array of errors; empty means valid. */
32
+ export declare function validateGatewayConfig(config: GatewayConfig): GatewayValidationError[];
33
+ //# sourceMappingURL=gateway-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gateway-config.d.ts","sourceRoot":"","sources":["../../../src/engine/gateway/gateway-config.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAErE,sDAAsD;AACtD,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACjC;AAED,+EAA+E;AAC/E,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,SAAS,qBAAqB,EAAE,CAAC;CACrD;AAED,6FAA6F;AAC7F,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,SAAS,iBAAiB,EAAE,CAAC;IAC5C,QAAQ,CAAC,aAAa,CAAC,EAAE,mBAAmB,CAAC;CAC9C;AAED,iDAAiD;AACjD,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,4EAA4E;AAC5E,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,aAAa,GAAG,sBAAsB,EAAE,CA6DrF"}
@@ -0,0 +1,61 @@
1
+ // Engine type: GatewayConfig -- multi-app gateway configuration
2
+ // Declares which Apps to host and how they bind to channels
3
+ /** Validate a GatewayConfig. Returns array of errors; empty means valid. */
4
+ export function validateGatewayConfig(config) {
5
+ const errors = [];
6
+ // Port must be a positive integer in valid TCP range
7
+ if (!Number.isInteger(config.port) || config.port < 1 || config.port > 65535) {
8
+ errors.push({ field: "port", message: "must be an integer between 1 and 65535" });
9
+ }
10
+ // Apps array must be non-empty
11
+ if (!config.apps || config.apps.length === 0) {
12
+ errors.push({ field: "apps", message: "must have at least one app" });
13
+ return errors;
14
+ }
15
+ const seenNames = new Set();
16
+ const seenPaths = new Set();
17
+ const seenPhoneNumbers = new Set();
18
+ for (let i = 0; i < config.apps.length; i++) {
19
+ const app = config.apps[i];
20
+ const prefix = `apps[${i}]`;
21
+ if (!app.name || typeof app.name !== "string") {
22
+ errors.push({ field: `${prefix}.name`, message: "must be a non-empty string" });
23
+ }
24
+ else if (seenNames.has(app.name)) {
25
+ errors.push({ field: `${prefix}.name`, message: `duplicate app name "${app.name}"` });
26
+ }
27
+ else {
28
+ seenNames.add(app.name);
29
+ }
30
+ if (!app.config || typeof app.config !== "string") {
31
+ errors.push({ field: `${prefix}.config`, message: "must be a non-empty string" });
32
+ }
33
+ if (!app.channels || app.channels.length === 0) {
34
+ errors.push({ field: `${prefix}.channels`, message: "must have at least one channel binding" });
35
+ }
36
+ else {
37
+ for (let j = 0; j < app.channels.length; j++) {
38
+ const channel = app.channels[j];
39
+ const channelPrefix = `${prefix}.channels[${j}]`;
40
+ if (channel.path && typeof channel.path === "string") {
41
+ if (seenPaths.has(channel.path)) {
42
+ errors.push({ field: `${channelPrefix}.path`, message: `duplicate API path "${channel.path}"` });
43
+ }
44
+ else {
45
+ seenPaths.add(channel.path);
46
+ }
47
+ }
48
+ if (channel.phoneNumber && typeof channel.phoneNumber === "string") {
49
+ if (seenPhoneNumbers.has(channel.phoneNumber)) {
50
+ errors.push({ field: `${channelPrefix}.phoneNumber`, message: `duplicate phone number "${channel.phoneNumber}"` });
51
+ }
52
+ else {
53
+ seenPhoneNumbers.add(channel.phoneNumber);
54
+ }
55
+ }
56
+ }
57
+ }
58
+ }
59
+ return errors;
60
+ }
61
+ //# sourceMappingURL=gateway-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gateway-config.js","sourceRoot":"","sources":["../../../src/engine/gateway/gateway-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { KilnError } from "../errors.js";
2
+ import type { GatewayConfig, GatewayValidationError } from "./gateway-config.js";
3
+ /** Error class for gateway YAML loader failures, aggregating all validation errors */
4
+ export declare class GatewayLoaderError extends KilnError {
5
+ readonly errors: readonly GatewayValidationError[];
6
+ constructor(errors: readonly GatewayValidationError[]);
7
+ }
8
+ /** Parse a YAML string into a typed GatewayConfig. Throws GatewayLoaderError if invalid. */
9
+ export declare function parseGatewayYaml(content: string): GatewayConfig;
10
+ //# sourceMappingURL=gateway-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gateway-loader.d.ts","sourceRoot":"","sources":["../../../src/engine/gateway/gateway-loader.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,KAAK,EAAE,aAAa,EAA4C,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAK3H,sFAAsF;AACtF,qBAAa,kBAAmB,SAAQ,SAAS;IAC/C,QAAQ,CAAC,MAAM,EAAE,SAAS,sBAAsB,EAAE,CAAC;gBAEvC,MAAM,EAAE,SAAS,sBAAsB,EAAE;CAStD;AAuFD,4FAA4F;AAC5F,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,CA6E/D"}
@@ -0,0 +1,150 @@
1
+ // Engine loader: GatewayLoader -- parses gateway YAML into typed config
2
+ // Does NOT load individual App YAML files
3
+ import { parse } from "yaml";
4
+ import { KilnError } from "../errors.js";
5
+ import { validateGatewayConfig } from "./gateway-config.js";
6
+ import { validateObservabilityConfig } from "./observability-config.js";
7
+ /** Error class for gateway YAML loader failures, aggregating all validation errors */
8
+ export class GatewayLoaderError extends KilnError {
9
+ errors;
10
+ constructor(errors) {
11
+ const msg = errors.map((e) => ` ${e.field}: ${e.message}`).join("\n");
12
+ super("GATEWAY_YAML_INVALID", `Invalid gateway YAML:\n${msg}`, {
13
+ context: { errors },
14
+ retryable: false,
15
+ });
16
+ this.name = "GatewayLoaderError";
17
+ this.errors = errors;
18
+ }
19
+ }
20
+ // ---------------------------------------------------------------------------
21
+ // Mapping helpers
22
+ // ---------------------------------------------------------------------------
23
+ function mapChannelBinding(raw) {
24
+ const binding = {};
25
+ if (typeof raw.type === "string")
26
+ binding["type"] = raw.type;
27
+ else
28
+ binding["type"] = "";
29
+ if (typeof raw.path === "string")
30
+ binding["path"] = raw.path;
31
+ if (typeof raw.phoneNumber === "string")
32
+ binding["phoneNumber"] = raw.phoneNumber;
33
+ if (typeof raw.botToken === "string")
34
+ binding["botToken"] = raw.botToken;
35
+ // Preserve any additional channel-specific keys
36
+ for (const [key, value] of Object.entries(raw)) {
37
+ if (key !== "type" && key !== "path" && key !== "phoneNumber" && key !== "botToken") {
38
+ binding[key] = value;
39
+ }
40
+ }
41
+ return binding;
42
+ }
43
+ function mapAppBinding(raw, path) {
44
+ const errors = [];
45
+ if (!raw.name || typeof raw.name !== "string") {
46
+ errors.push({ field: `${path}.name`, message: "must be a non-empty string" });
47
+ }
48
+ if (!raw.config || typeof raw.config !== "string") {
49
+ errors.push({ field: `${path}.config`, message: "must be a non-empty string" });
50
+ }
51
+ const channels = [];
52
+ if (!raw.channels || !Array.isArray(raw.channels)) {
53
+ errors.push({ field: `${path}.channels`, message: "must be a non-empty array" });
54
+ }
55
+ else {
56
+ for (const ch of raw.channels) {
57
+ if (ch && typeof ch === "object" && !Array.isArray(ch)) {
58
+ channels.push(mapChannelBinding(ch));
59
+ }
60
+ }
61
+ }
62
+ const binding = {
63
+ name: typeof raw.name === "string" ? raw.name : "",
64
+ config: typeof raw.config === "string" ? raw.config : "",
65
+ ...(typeof raw.workspace === "string" ? { workspace: raw.workspace } : {}),
66
+ channels,
67
+ };
68
+ return { binding, errors };
69
+ }
70
+ // ---------------------------------------------------------------------------
71
+ // Public API
72
+ // ---------------------------------------------------------------------------
73
+ /** Parse a YAML string into a typed GatewayConfig. Throws GatewayLoaderError if invalid. */
74
+ export function parseGatewayYaml(content) {
75
+ let data;
76
+ try {
77
+ data = parse(content);
78
+ }
79
+ catch (err) {
80
+ throw new GatewayLoaderError([{ field: "yaml", message: String(err) }]);
81
+ }
82
+ if (!data || typeof data !== "object" || Array.isArray(data)) {
83
+ throw new GatewayLoaderError([{ field: "root", message: "must be a YAML object" }]);
84
+ }
85
+ const raw = data;
86
+ const errors = [];
87
+ // port defaults to 4800
88
+ let port = 4800;
89
+ if (raw.port !== undefined) {
90
+ if (typeof raw.port !== "number") {
91
+ errors.push({ field: "port", message: "must be a number" });
92
+ }
93
+ else {
94
+ port = raw.port;
95
+ }
96
+ }
97
+ // apps
98
+ const apps = [];
99
+ if (!raw.apps || !Array.isArray(raw.apps)) {
100
+ errors.push({ field: "apps", message: "must be a non-empty array" });
101
+ }
102
+ else {
103
+ for (let i = 0; i < raw.apps.length; i++) {
104
+ const rawApp = raw.apps[i];
105
+ if (!rawApp || typeof rawApp !== "object" || Array.isArray(rawApp)) {
106
+ errors.push({ field: `apps[${i}]`, message: "must be an object" });
107
+ continue;
108
+ }
109
+ const { binding, errors: appErrors } = mapAppBinding(rawApp, `apps[${i}]`);
110
+ apps.push(binding);
111
+ errors.push(...appErrors);
112
+ }
113
+ }
114
+ if (errors.length > 0)
115
+ throw new GatewayLoaderError(errors);
116
+ // Parse optional observability block
117
+ let observability;
118
+ if (raw.observability !== undefined) {
119
+ if (typeof raw.observability !== "object" || Array.isArray(raw.observability) || raw.observability === null) {
120
+ errors.push({ field: "observability", message: "must be an object" });
121
+ }
122
+ else {
123
+ const rawObs = raw.observability;
124
+ const parsed = {
125
+ enabled: typeof rawObs["enabled"] === "boolean" ? rawObs["enabled"] : true,
126
+ exporter: rawObs["exporter"] ?? "none",
127
+ ...(typeof rawObs["endpoint"] === "string" ? { endpoint: rawObs["endpoint"] } : {}),
128
+ serviceName: typeof rawObs["serviceName"] === "string" ? rawObs["serviceName"] : "",
129
+ ...(rawObs["attributes"] && typeof rawObs["attributes"] === "object" && !Array.isArray(rawObs["attributes"])
130
+ ? { attributes: rawObs["attributes"] }
131
+ : {}),
132
+ };
133
+ const obsErrors = validateObservabilityConfig(parsed);
134
+ if (obsErrors.length > 0) {
135
+ errors.push(...obsErrors);
136
+ }
137
+ else {
138
+ observability = parsed;
139
+ }
140
+ }
141
+ }
142
+ if (errors.length > 0)
143
+ throw new GatewayLoaderError(errors);
144
+ const config = { port, apps, ...(observability ? { observability } : {}) };
145
+ const validationErrors = validateGatewayConfig(config);
146
+ if (validationErrors.length > 0)
147
+ throw new GatewayLoaderError(validationErrors);
148
+ return config;
149
+ }
150
+ //# sourceMappingURL=gateway-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gateway-loader.js","sourceRoot":"","sources":["../../../src/engine/gateway/gateway-loader.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,0CAA0C;AAE1C,OAAO,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,OAAO,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAExE,sFAAsF;AACtF,MAAM,OAAO,kBAAmB,SAAQ,SAAS;IACtC,MAAM,CAAoC;IAEnD,YAAY,MAAyC;QACnD,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvE,KAAK,CAAC,sBAAsB,EAAE,0BAA0B,GAAG,EAAE,EAAE;YAC7D,OAAO,EAAE,EAAE,MAAM,EAAE;YACnB,SAAS,EAAE,KAAK;SACjB,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;QACjC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;CACF;AA2BD,8EAA8E;AAC9E,kBAAkB;AAClB,8EAA8E;AAE9E,SAAS,iBAAiB,CAAC,GAAsB;IAC/C,MAAM,OAAO,GAA4B,EAAE,CAAC;IAE5C,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC;;QACxD,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;IAE1B,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC;IAC7D,IAAI,OAAO,GAAG,CAAC,WAAW,KAAK,QAAQ;QAAE,OAAO,CAAC,aAAa,CAAC,GAAG,GAAG,CAAC,WAAW,CAAC;IAClF,IAAI,OAAO,GAAG,CAAC,QAAQ,KAAK,QAAQ;QAAE,OAAO,CAAC,UAAU,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC;IAEzE,gDAAgD;IAChD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/C,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,aAAa,IAAI,GAAG,KAAK,UAAU,EAAE,CAAC;YACpF,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACvB,CAAC;IACH,CAAC;IAED,OAAO,OAAgC,CAAC;AAC1C,CAAC;AAED,SAAS,aAAa,CAAC,GAAkB,EAAE,IAAY;IACrD,MAAM,MAAM,GAA6B,EAAE,CAAC;IAE5C,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC9C,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,IAAI,OAAO,EAAE,OAAO,EAAE,4BAA4B,EAAE,CAAC,CAAC;IAChF,CAAC;IAED,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QAClD,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,IAAI,SAAS,EAAE,OAAO,EAAE,4BAA4B,EAAE,CAAC,CAAC;IAClF,CAAC;IAED,MAAM,QAAQ,GAA4B,EAAE,CAAC;IAC7C,IAAI,CAAC,GAAG,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QAClD,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,IAAI,WAAW,EAAE,OAAO,EAAE,2BAA2B,EAAE,CAAC,CAAC;IACnF,CAAC;SAAM,CAAC;QACN,KAAK,MAAM,EAAE,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;YAC9B,IAAI,EAAE,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;gBACvD,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAuB,CAAC,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAsB;QACjC,IAAI,EAAE,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;QAClD,MAAM,EAAE,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;QACxD,GAAG,CAAC,OAAO,GAAG,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1E,QAAQ;KACT,CAAC;IAEF,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;AAC7B,CAAC;AAED,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E,4FAA4F;AAC5F,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAC9C,IAAI,IAAa,CAAC;IAClB,IAAI,CAAC;QACH,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;IACxB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,kBAAkB,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1E,CAAC;IAED,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7D,MAAM,IAAI,kBAAkB,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,uBAAuB,EAAE,CAAC,CAAC,CAAC;IACtF,CAAC;IAED,MAAM,GAAG,GAAG,IAAkB,CAAC;IAC/B,MAAM,MAAM,GAA6B,EAAE,CAAC;IAE5C,wBAAwB;IACxB,IAAI,IAAI,GAAG,IAAI,CAAC;IAChB,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC3B,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACjC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,EAAE,CAAC,CAAC;QAC9D,CAAC;aAAM,CAAC;YACN,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;QAClB,CAAC;IACH,CAAC;IAED,OAAO;IACP,MAAM,IAAI,GAAwB,EAAE,CAAC;IACrC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1C,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,2BAA2B,EAAE,CAAC,CAAC;IACvE,CAAC;SAAM,CAAC;QACN,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACzC,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC3B,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBACnE,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,GAAG,EAAE,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC;gBACnE,SAAS;YACX,CAAC;YACD,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,aAAa,CAAC,MAAuB,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;YAC5F,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACnB,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,IAAI,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAE5D,qCAAqC;IACrC,IAAI,aAA8C,CAAC;IACnD,IAAI,GAAG,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;QACpC,IAAI,OAAO,GAAG,CAAC,aAAa,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,GAAG,CAAC,aAAa,KAAK,IAAI,EAAE,CAAC;YAC5G,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC;QACxE,CAAC;aAAM,CAAC;YACN,MAAM,MAAM,GAAG,GAAG,CAAC,aAAwC,CAAC;YAC5D,MAAM,MAAM,GAAwB;gBAClC,OAAO,EAAE,OAAO,MAAM,CAAC,SAAS,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI;gBAC1E,QAAQ,EAAG,MAAM,CAAC,UAAU,CAAqC,IAAI,MAAM;gBAC3E,GAAG,CAAC,OAAO,MAAM,CAAC,UAAU,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnF,WAAW,EAAE,OAAO,MAAM,CAAC,aAAa,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE;gBACnF,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,OAAO,MAAM,CAAC,YAAY,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;oBAC1G,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,YAAY,CAA2B,EAAE;oBAChE,CAAC,CAAC,EAAE,CAAC;aACR,CAAC;YACF,MAAM,SAAS,GAAG,2BAA2B,CAAC,MAAM,CAAC,CAAC;YACtD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzB,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC;YAC5B,CAAC;iBAAM,CAAC;gBACN,aAAa,GAAG,MAAM,CAAC;YACzB,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,IAAI,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAE5D,MAAM,MAAM,GAAkB,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IAE1F,MAAM,gBAAgB,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;IACvD,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,IAAI,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;IAEhF,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,44 @@
1
+ /** Runtime mode: "claude-code" for Mode A, "provider-adapter" for Mode B */
2
+ export type RuntimeMode = "claude-code" | "provider-adapter";
3
+ /** Provider configuration for Mode B Apps */
4
+ export interface ProviderConfig {
5
+ readonly name: string;
6
+ readonly model?: string;
7
+ readonly apiKeyEnv?: string;
8
+ }
9
+ /** Billing tier: which agent tiers a plan level allows */
10
+ export interface BillingTier {
11
+ readonly agents: readonly string[];
12
+ }
13
+ /** Billing configuration for budget enforcement */
14
+ export interface BillingConfig {
15
+ readonly budgetEndpoint: string;
16
+ readonly usageEndpoint: string;
17
+ readonly overBudgetMessage: string;
18
+ readonly tiers?: Readonly<Record<string, BillingTier>>;
19
+ }
20
+ /** Budget response from product API */
21
+ export interface BudgetResponse {
22
+ readonly remaining: number;
23
+ readonly unit: "tokens" | "requests";
24
+ }
25
+ /** Usage report sent to product API */
26
+ export interface UsageReport {
27
+ readonly tokens: number;
28
+ readonly model: string;
29
+ readonly role: string;
30
+ }
31
+ /** Full Mode B configuration parsed from App YAML */
32
+ export interface ModeBConfig {
33
+ readonly runtime: RuntimeMode;
34
+ readonly provider: ProviderConfig;
35
+ readonly billing?: BillingConfig;
36
+ }
37
+ /** Validation error for Mode B configuration */
38
+ export interface ModeBValidationError {
39
+ readonly field: string;
40
+ readonly message: string;
41
+ }
42
+ /** Validate a ModeBConfig. Returns array of errors; empty means valid. */
43
+ export declare function validateModeBConfig(config: ModeBConfig): ModeBValidationError[];
44
+ //# sourceMappingURL=mode-b-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mode-b-config.d.ts","sourceRoot":"","sources":["../../../src/engine/gateway/mode-b-config.ts"],"names":[],"mappings":"AAGA,4EAA4E;AAC5E,MAAM,MAAM,WAAW,GAAG,aAAa,GAAG,kBAAkB,CAAC;AAE7D,6CAA6C;AAC7C,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,0DAA0D;AAC1D,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;CACpC;AAED,mDAAmD;AACnD,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC;CACxD;AAED,uCAAuC;AACvC,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,UAAU,CAAC;CACtC;AAED,uCAAuC;AACvC,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,qDAAqD;AACrD,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC,QAAQ,CAAC,OAAO,CAAC,EAAE,aAAa,CAAC;CAClC;AAED,gDAAgD;AAChD,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,0EAA0E;AAC1E,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,WAAW,GAAG,oBAAoB,EAAE,CA8C/E"}
@@ -0,0 +1,45 @@
1
+ // Engine type: ModeBConfig -- provider-adapter runtime configuration
2
+ // Parsed from the same App YAML as the App composite, by a separate parser
3
+ /** Validate a ModeBConfig. Returns array of errors; empty means valid. */
4
+ export function validateModeBConfig(config) {
5
+ const errors = [];
6
+ // runtime must be a valid value
7
+ if (config.runtime !== "claude-code" && config.runtime !== "provider-adapter") {
8
+ errors.push({ field: "runtime", message: 'must be "claude-code" or "provider-adapter"' });
9
+ }
10
+ // if runtime is "provider-adapter", provider.name must be non-empty
11
+ if (config.runtime === "provider-adapter") {
12
+ if (!config.provider.name || typeof config.provider.name !== "string") {
13
+ errors.push({ field: "provider.name", message: "must be a non-empty string" });
14
+ }
15
+ }
16
+ // billing validations
17
+ if (config.billing !== undefined) {
18
+ if (!config.billing.budgetEndpoint || typeof config.billing.budgetEndpoint !== "string") {
19
+ errors.push({ field: "billing.budgetEndpoint", message: "must be a non-empty string" });
20
+ }
21
+ if (!config.billing.usageEndpoint || typeof config.billing.usageEndpoint !== "string") {
22
+ errors.push({ field: "billing.usageEndpoint", message: "must be a non-empty string" });
23
+ }
24
+ if (!config.billing.overBudgetMessage || typeof config.billing.overBudgetMessage !== "string") {
25
+ errors.push({ field: "billing.overBudgetMessage", message: "must be a non-empty string" });
26
+ }
27
+ if (config.billing.tiers !== undefined) {
28
+ for (const [tierName, tier] of Object.entries(config.billing.tiers)) {
29
+ if (!tier.agents || tier.agents.length === 0) {
30
+ errors.push({ field: `billing.tiers.${tierName}.agents`, message: "must be a non-empty array" });
31
+ }
32
+ else {
33
+ for (let i = 0; i < tier.agents.length; i++) {
34
+ const agent = tier.agents[i];
35
+ if (!agent || typeof agent !== "string") {
36
+ errors.push({ field: `billing.tiers.${tierName}.agents[${i}]`, message: "must be a non-empty string" });
37
+ }
38
+ }
39
+ }
40
+ }
41
+ }
42
+ }
43
+ return errors;
44
+ }
45
+ //# sourceMappingURL=mode-b-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mode-b-config.js","sourceRoot":"","sources":["../../../src/engine/gateway/mode-b-config.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,2EAA2E;AAmD3E,0EAA0E;AAC1E,MAAM,UAAU,mBAAmB,CAAC,MAAmB;IACrD,MAAM,MAAM,GAA2B,EAAE,CAAC;IAE1C,gCAAgC;IAChC,IAAI,MAAM,CAAC,OAAO,KAAK,aAAa,IAAI,MAAM,CAAC,OAAO,KAAK,kBAAkB,EAAE,CAAC;QAC9E,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,6CAA6C,EAAE,CAAC,CAAC;IAC5F,CAAC;IAED,oEAAoE;IACpE,IAAI,MAAM,CAAC,OAAO,KAAK,kBAAkB,EAAE,CAAC;QAC1C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,IAAI,OAAO,MAAM,CAAC,QAAQ,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtE,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,4BAA4B,EAAE,CAAC,CAAC;QACjF,CAAC;IACH,CAAC;IAED,sBAAsB;IACtB,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QACjC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,cAAc,IAAI,OAAO,MAAM,CAAC,OAAO,CAAC,cAAc,KAAK,QAAQ,EAAE,CAAC;YACxF,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,wBAAwB,EAAE,OAAO,EAAE,4BAA4B,EAAE,CAAC,CAAC;QAC1F,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,IAAI,OAAO,MAAM,CAAC,OAAO,CAAC,aAAa,KAAK,QAAQ,EAAE,CAAC;YACtF,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,uBAAuB,EAAE,OAAO,EAAE,4BAA4B,EAAE,CAAC,CAAC;QACzF,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,iBAAiB,IAAI,OAAO,MAAM,CAAC,OAAO,CAAC,iBAAiB,KAAK,QAAQ,EAAE,CAAC;YAC9F,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,2BAA2B,EAAE,OAAO,EAAE,4BAA4B,EAAE,CAAC,CAAC;QAC7F,CAAC;QAED,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YACvC,KAAK,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACpE,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC7C,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,iBAAiB,QAAQ,SAAS,EAAE,OAAO,EAAE,2BAA2B,EAAE,CAAC,CAAC;gBACnG,CAAC;qBAAM,CAAC;oBACN,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;wBAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;wBAC7B,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;4BACxC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,iBAAiB,QAAQ,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,4BAA4B,EAAE,CAAC,CAAC;wBAC1G,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { KilnError } from "../errors.js";
2
+ import type { ModeBConfig, ModeBValidationError } from "./mode-b-config.js";
3
+ /** Error class for Mode B YAML loader failures */
4
+ export declare class ModeBLoaderError extends KilnError {
5
+ readonly errors: readonly ModeBValidationError[];
6
+ constructor(errors: readonly ModeBValidationError[]);
7
+ }
8
+ /**
9
+ * Parse a YAML string and extract Mode B config fields.
10
+ * Returns null if the YAML does not have runtime: "provider-adapter" (it's a Mode A app).
11
+ * Throws ModeBLoaderError if runtime is "provider-adapter" but config is invalid.
12
+ */
13
+ export declare function parseModeBConfig(content: string): ModeBConfig | null;
14
+ //# sourceMappingURL=mode-b-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mode-b-loader.d.ts","sourceRoot":"","sources":["../../../src/engine/gateway/mode-b-loader.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,oBAAoB,EAA8C,MAAM,oBAAoB,CAAC;AAGxH,kDAAkD;AAClD,qBAAa,gBAAiB,SAAQ,SAAS;IAC7C,QAAQ,CAAC,MAAM,EAAE,SAAS,oBAAoB,EAAE,CAAC;gBAErC,MAAM,EAAE,SAAS,oBAAoB,EAAE;CASpD;AAiFD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CA4CpE"}
@@ -0,0 +1,104 @@
1
+ // Engine loader: ModeBLoader -- parses Mode B config from App YAML
2
+ // Extracts runtime, provider, and billing fields from the same YAML as parseAppYaml()
3
+ import { parse } from "yaml";
4
+ import { KilnError } from "../errors.js";
5
+ import { validateModeBConfig } from "./mode-b-config.js";
6
+ /** Error class for Mode B YAML loader failures */
7
+ export class ModeBLoaderError extends KilnError {
8
+ errors;
9
+ constructor(errors) {
10
+ const msg = errors.map((e) => ` ${e.field}: ${e.message}`).join("\n");
11
+ super("MODE_B_CONFIG_INVALID", `Invalid Mode B config:\n${msg}`, {
12
+ context: { errors },
13
+ retryable: false,
14
+ });
15
+ this.name = "ModeBLoaderError";
16
+ this.errors = errors;
17
+ }
18
+ }
19
+ // ---------------------------------------------------------------------------
20
+ // Mapping helpers
21
+ // ---------------------------------------------------------------------------
22
+ function mapProvider(raw) {
23
+ const provider = {
24
+ name: typeof raw.name === "string" ? raw.name : "",
25
+ };
26
+ if (typeof raw.model === "string")
27
+ provider.model = raw.model;
28
+ if (typeof raw.apiKeyEnv === "string")
29
+ provider.apiKeyEnv = raw.apiKeyEnv;
30
+ return provider;
31
+ }
32
+ function mapBillingTier(raw) {
33
+ const agents = [];
34
+ if (Array.isArray(raw.agents)) {
35
+ for (const agent of raw.agents) {
36
+ if (typeof agent === "string")
37
+ agents.push(agent);
38
+ }
39
+ }
40
+ return { agents };
41
+ }
42
+ function mapBilling(raw) {
43
+ const billing = {
44
+ budgetEndpoint: typeof raw.budgetEndpoint === "string" ? raw.budgetEndpoint : "",
45
+ usageEndpoint: typeof raw.usageEndpoint === "string" ? raw.usageEndpoint : "",
46
+ overBudgetMessage: typeof raw.overBudgetMessage === "string" ? raw.overBudgetMessage : "",
47
+ };
48
+ if (raw.tiers && typeof raw.tiers === "object" && !Array.isArray(raw.tiers)) {
49
+ const tiers = {};
50
+ for (const [tierName, tierValue] of Object.entries(raw.tiers)) {
51
+ if (tierValue && typeof tierValue === "object" && !Array.isArray(tierValue)) {
52
+ tiers[tierName] = mapBillingTier(tierValue);
53
+ }
54
+ }
55
+ billing.tiers = tiers;
56
+ }
57
+ return billing;
58
+ }
59
+ // ---------------------------------------------------------------------------
60
+ // Public API
61
+ // ---------------------------------------------------------------------------
62
+ /**
63
+ * Parse a YAML string and extract Mode B config fields.
64
+ * Returns null if the YAML does not have runtime: "provider-adapter" (it's a Mode A app).
65
+ * Throws ModeBLoaderError if runtime is "provider-adapter" but config is invalid.
66
+ */
67
+ export function parseModeBConfig(content) {
68
+ let data;
69
+ try {
70
+ data = parse(content);
71
+ }
72
+ catch (err) {
73
+ throw new ModeBLoaderError([{ field: "yaml", message: String(err) }]);
74
+ }
75
+ if (!data || typeof data !== "object" || Array.isArray(data)) {
76
+ throw new ModeBLoaderError([{ field: "root", message: "must be a YAML object" }]);
77
+ }
78
+ const raw = data;
79
+ // runtime defaults to "claude-code"
80
+ const runtime = typeof raw.runtime === "string" ? raw.runtime : "claude-code";
81
+ // if not Mode B, return null
82
+ if (runtime !== "provider-adapter") {
83
+ return null;
84
+ }
85
+ // extract provider
86
+ const provider = raw.provider && typeof raw.provider === "object" && !Array.isArray(raw.provider)
87
+ ? mapProvider(raw.provider)
88
+ : { name: "" };
89
+ // extract billing if present
90
+ let billing;
91
+ if (raw.billing && typeof raw.billing === "object" && !Array.isArray(raw.billing)) {
92
+ billing = mapBilling(raw.billing);
93
+ }
94
+ const config = {
95
+ runtime: "provider-adapter",
96
+ provider,
97
+ ...(billing !== undefined ? { billing } : {}),
98
+ };
99
+ const errors = validateModeBConfig(config);
100
+ if (errors.length > 0)
101
+ throw new ModeBLoaderError(errors);
102
+ return config;
103
+ }
104
+ //# sourceMappingURL=mode-b-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mode-b-loader.js","sourceRoot":"","sources":["../../../src/engine/gateway/mode-b-loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { GatewayValidationError } from "./gateway-config.js";
2
+ /** Supported OTel exporter backends */
3
+ export type ObservabilityExporter = "otlp" | "console" | "none";
4
+ /** Top-level observability configuration for gateway.yaml */
5
+ export interface ObservabilityConfig {
6
+ /** Whether observability is active. Defaults to true when the block is present. */
7
+ readonly enabled: boolean;
8
+ /** Which exporter to use: otlp (OTLP/HTTP), console (stdout), or none (disable). */
9
+ readonly exporter: ObservabilityExporter;
10
+ /** OTLP collector endpoint. Required when exporter is "otlp". */
11
+ readonly endpoint?: string;
12
+ /** Service name reported to the OTel backend. */
13
+ readonly serviceName: string;
14
+ /** Optional custom resource attributes attached to all spans. */
15
+ readonly attributes?: Record<string, string>;
16
+ }
17
+ /** Validate an ObservabilityConfig. Returns array of errors; empty means valid. */
18
+ export declare function validateObservabilityConfig(config: ObservabilityConfig): GatewayValidationError[];
19
+ //# sourceMappingURL=observability-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observability-config.d.ts","sourceRoot":"","sources":["../../../src/engine/gateway/observability-config.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAElE,uCAAuC;AACvC,MAAM,MAAM,qBAAqB,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC;AAEhE,6DAA6D;AAC7D,MAAM,WAAW,mBAAmB;IAChC,mFAAmF;IACnF,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,oFAAoF;IACpF,QAAQ,CAAC,QAAQ,EAAE,qBAAqB,CAAC;IACzC,iEAAiE;IACjE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,iDAAiD;IACjD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,iEAAiE;IACjE,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAChD;AAED,mFAAmF;AACnF,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,mBAAmB,GAAG,sBAAsB,EAAE,CA4BjG"}
@@ -0,0 +1,27 @@
1
+ // Engine type: ObservabilityConfig -- optional top-level OTel observability configuration for gateway.yaml
2
+ /** Validate an ObservabilityConfig. Returns array of errors; empty means valid. */
3
+ export function validateObservabilityConfig(config) {
4
+ const errors = [];
5
+ const prefix = "observability";
6
+ if (!config.serviceName || typeof config.serviceName !== "string" || config.serviceName.trim() === "") {
7
+ errors.push({ field: `${prefix}.serviceName`, message: "must be a non-empty string" });
8
+ }
9
+ const validExporters = ["otlp", "console", "none"];
10
+ if (!validExporters.includes(config.exporter)) {
11
+ errors.push({ field: `${prefix}.exporter`, message: `must be one of: ${validExporters.join(", ")}` });
12
+ }
13
+ if (config.exporter === "otlp") {
14
+ if (!config.endpoint || typeof config.endpoint !== "string" || config.endpoint.trim() === "") {
15
+ errors.push({ field: `${prefix}.endpoint`, message: "required when exporter is \"otlp\"" });
16
+ }
17
+ }
18
+ if (config.attributes !== undefined) {
19
+ for (const [key, value] of Object.entries(config.attributes)) {
20
+ if (typeof value !== "string") {
21
+ errors.push({ field: `${prefix}.attributes.${key}`, message: "attribute values must be strings" });
22
+ }
23
+ }
24
+ }
25
+ return errors;
26
+ }
27
+ //# sourceMappingURL=observability-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observability-config.js","sourceRoot":"","sources":["../../../src/engine/gateway/observability-config.ts"],"names":[],"mappings":"AAAA,2GAA2G;AAqB3G,mFAAmF;AACnF,MAAM,UAAU,2BAA2B,CAAC,MAA2B;IACnE,MAAM,MAAM,GAA6B,EAAE,CAAC;IAC5C,MAAM,MAAM,GAAG,eAAe,CAAC;IAE/B,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,OAAO,MAAM,CAAC,WAAW,KAAK,QAAQ,IAAI,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACpG,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,MAAM,cAAc,EAAE,OAAO,EAAE,4BAA4B,EAAE,CAAC,CAAC;IAC3F,CAAC;IAED,MAAM,cAAc,GAA4B,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IAC5E,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5C,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,MAAM,WAAW,EAAE,OAAO,EAAE,mBAAmB,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;IAC1G,CAAC;IAED,IAAI,MAAM,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;QAC7B,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YAC3F,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,MAAM,WAAW,EAAE,OAAO,EAAE,oCAAoC,EAAE,CAAC,CAAC;QAChG,CAAC;IACL,CAAC;IAED,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QAClC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;YAC3D,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC5B,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,MAAM,eAAe,GAAG,EAAE,EAAE,OAAO,EAAE,kCAAkC,EAAE,CAAC,CAAC;YACvG,CAAC;QACL,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC"}
@@ -0,0 +1,59 @@
1
+ /** A service offered by the tenant business */
2
+ export interface TenantService {
3
+ readonly name: string;
4
+ readonly description?: string;
5
+ readonly price?: string;
6
+ readonly duration?: string;
7
+ }
8
+ /** A contact person for escalation */
9
+ export interface TenantContact {
10
+ readonly name: string;
11
+ readonly phone?: string;
12
+ readonly email?: string;
13
+ }
14
+ /** Business operating hours, keyed by day name */
15
+ export interface TenantHours {
16
+ readonly [day: string]: string;
17
+ }
18
+ /** FAQ entry: question and response */
19
+ export interface TenantFaqEntry {
20
+ readonly q: string;
21
+ readonly r: string;
22
+ }
23
+ /** Tone of the AI assistant's responses */
24
+ export type TenantTone = "formal" | "friendly" | "casual";
25
+ /** Per-tenant billing configuration (overrides App-level billing) */
26
+ export interface TenantBilling {
27
+ readonly budgetEndpoint?: string;
28
+ readonly usageEndpoint?: string;
29
+ readonly overBudgetMessage?: string;
30
+ }
31
+ /** Full tenant configuration for a business within a multi-tenant App */
32
+ export interface TenantConfig {
33
+ readonly tenantId: string;
34
+ readonly appName: string;
35
+ readonly name: string;
36
+ readonly description?: string;
37
+ readonly services?: readonly TenantService[];
38
+ readonly hours?: TenantHours;
39
+ readonly faqEntries?: readonly TenantFaqEntry[];
40
+ readonly escalationContact?: TenantContact;
41
+ readonly tone?: TenantTone;
42
+ readonly language?: string;
43
+ readonly whatsappPhoneNumberId?: string;
44
+ readonly whatsappAccessToken?: string;
45
+ readonly whatsappVerifyToken?: string;
46
+ readonly billing?: TenantBilling;
47
+ readonly idleTimeoutMs?: number;
48
+ readonly enabled: boolean;
49
+ readonly createdAt: string;
50
+ readonly updatedAt: string;
51
+ }
52
+ /** Validation error for tenant configuration */
53
+ export interface TenantValidationError {
54
+ readonly field: string;
55
+ readonly message: string;
56
+ }
57
+ /** Validate a TenantConfig. Returns array of errors; empty means valid. */
58
+ export declare function validateTenantConfig(config: TenantConfig): TenantValidationError[];
59
+ //# sourceMappingURL=tenant-config.d.ts.map