@guidify-ai/vapi-studio 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 (407) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +129 -0
  3. package/agent/AGENTS.md +42 -0
  4. package/agent/CLAUDE.md +15 -0
  5. package/agent/claude/rules/ui-and-api-identity.md +9 -0
  6. package/agent/claude/rules/vapi-studio-best-practices.md +36 -0
  7. package/agent/cursor/ui-and-api-identity.mdc +16 -0
  8. package/agent/cursor/vapi-studio-best-practices.mdc +43 -0
  9. package/dist/adapters/vapi/vapi-sse.compiler.d.ts +61 -0
  10. package/dist/adapters/vapi/vapi-sse.compiler.d.ts.map +1 -0
  11. package/dist/adapters/vapi/vapi-sse.compiler.js +396 -0
  12. package/dist/adapters/vapi/vapi-sse.compiler.js.map +1 -0
  13. package/dist/analytics/analytics-tags.d.ts +60 -0
  14. package/dist/analytics/analytics-tags.d.ts.map +1 -0
  15. package/dist/analytics/analytics-tags.js +27 -0
  16. package/dist/analytics/analytics-tags.js.map +1 -0
  17. package/dist/brain/adapters/chatgpt-brain.adapter.d.ts +27 -0
  18. package/dist/brain/adapters/chatgpt-brain.adapter.d.ts.map +1 -0
  19. package/dist/brain/adapters/chatgpt-brain.adapter.js +94 -0
  20. package/dist/brain/adapters/chatgpt-brain.adapter.js.map +1 -0
  21. package/dist/brain/adapters/claude-brain.adapter.d.ts +24 -0
  22. package/dist/brain/adapters/claude-brain.adapter.d.ts.map +1 -0
  23. package/dist/brain/adapters/claude-brain.adapter.js +96 -0
  24. package/dist/brain/adapters/claude-brain.adapter.js.map +1 -0
  25. package/dist/brain/adapters/gemini-brain.adapter.d.ts +24 -0
  26. package/dist/brain/adapters/gemini-brain.adapter.d.ts.map +1 -0
  27. package/dist/brain/adapters/gemini-brain.adapter.js +106 -0
  28. package/dist/brain/adapters/gemini-brain.adapter.js.map +1 -0
  29. package/dist/brain/adapters/grok-brain.adapter.d.ts +24 -0
  30. package/dist/brain/adapters/grok-brain.adapter.d.ts.map +1 -0
  31. package/dist/brain/adapters/grok-brain.adapter.js +90 -0
  32. package/dist/brain/adapters/grok-brain.adapter.js.map +1 -0
  33. package/dist/brain/adapters/json-llm-brain.base.d.ts +63 -0
  34. package/dist/brain/adapters/json-llm-brain.base.d.ts.map +1 -0
  35. package/dist/brain/adapters/json-llm-brain.base.js +511 -0
  36. package/dist/brain/adapters/json-llm-brain.base.js.map +1 -0
  37. package/dist/brain/adapters/mock-brain.adapter.d.ts +32 -0
  38. package/dist/brain/adapters/mock-brain.adapter.d.ts.map +1 -0
  39. package/dist/brain/adapters/mock-brain.adapter.js +201 -0
  40. package/dist/brain/adapters/mock-brain.adapter.js.map +1 -0
  41. package/dist/brain/adapters/mock-provider-brains.adapter.d.ts +22 -0
  42. package/dist/brain/adapters/mock-provider-brains.adapter.d.ts.map +1 -0
  43. package/dist/brain/adapters/mock-provider-brains.adapter.js +48 -0
  44. package/dist/brain/adapters/mock-provider-brains.adapter.js.map +1 -0
  45. package/dist/brain/brain-clarify.d.ts +75 -0
  46. package/dist/brain/brain-clarify.d.ts.map +1 -0
  47. package/dist/brain/brain-clarify.js +146 -0
  48. package/dist/brain/brain-clarify.js.map +1 -0
  49. package/dist/brain/brain-config.d.ts +20 -0
  50. package/dist/brain/brain-config.d.ts.map +1 -0
  51. package/dist/brain/brain-config.js +20 -0
  52. package/dist/brain/brain-config.js.map +1 -0
  53. package/dist/brain/brain-judge.d.ts +68 -0
  54. package/dist/brain/brain-judge.d.ts.map +1 -0
  55. package/dist/brain/brain-judge.js +111 -0
  56. package/dist/brain/brain-judge.js.map +1 -0
  57. package/dist/brain/brain-ranking.d.ts +41 -0
  58. package/dist/brain/brain-ranking.d.ts.map +1 -0
  59. package/dist/brain/brain-ranking.js +103 -0
  60. package/dist/brain/brain-ranking.js.map +1 -0
  61. package/dist/brain/brain-usage.tracker.d.ts +48 -0
  62. package/dist/brain/brain-usage.tracker.d.ts.map +1 -0
  63. package/dist/brain/brain-usage.tracker.js +106 -0
  64. package/dist/brain/brain-usage.tracker.js.map +1 -0
  65. package/dist/brain/brain.port.d.ts +63 -0
  66. package/dist/brain/brain.port.d.ts.map +1 -0
  67. package/dist/brain/brain.port.js +7 -0
  68. package/dist/brain/brain.port.js.map +1 -0
  69. package/dist/brain/brain.service.d.ts +14 -0
  70. package/dist/brain/brain.service.d.ts.map +1 -0
  71. package/dist/brain/brain.service.js +27 -0
  72. package/dist/brain/brain.service.js.map +1 -0
  73. package/dist/brain/claude-cheap-models.d.ts +18 -0
  74. package/dist/brain/claude-cheap-models.d.ts.map +1 -0
  75. package/dist/brain/claude-cheap-models.js +53 -0
  76. package/dist/brain/claude-cheap-models.js.map +1 -0
  77. package/dist/brain/gemini-cheap-models.d.ts +18 -0
  78. package/dist/brain/gemini-cheap-models.d.ts.map +1 -0
  79. package/dist/brain/gemini-cheap-models.js +53 -0
  80. package/dist/brain/gemini-cheap-models.js.map +1 -0
  81. package/dist/brain/grok-cheap-models.d.ts +18 -0
  82. package/dist/brain/grok-cheap-models.d.ts.map +1 -0
  83. package/dist/brain/grok-cheap-models.js +53 -0
  84. package/dist/brain/grok-cheap-models.js.map +1 -0
  85. package/dist/brain/llm-model-pricing.d.ts +29 -0
  86. package/dist/brain/llm-model-pricing.d.ts.map +1 -0
  87. package/dist/brain/llm-model-pricing.js +38 -0
  88. package/dist/brain/llm-model-pricing.js.map +1 -0
  89. package/dist/brain/openai-cheap-models.d.ts +34 -0
  90. package/dist/brain/openai-cheap-models.d.ts.map +1 -0
  91. package/dist/brain/openai-cheap-models.js +72 -0
  92. package/dist/brain/openai-cheap-models.js.map +1 -0
  93. package/dist/brain/prompt-injection-guard.d.ts +34 -0
  94. package/dist/brain/prompt-injection-guard.d.ts.map +1 -0
  95. package/dist/brain/prompt-injection-guard.js +109 -0
  96. package/dist/brain/prompt-injection-guard.js.map +1 -0
  97. package/dist/channel/channel-tools.d.ts +72 -0
  98. package/dist/channel/channel-tools.d.ts.map +1 -0
  99. package/dist/channel/channel-tools.js +131 -0
  100. package/dist/channel/channel-tools.js.map +1 -0
  101. package/dist/conversation/call-turn-queue.d.ts +64 -0
  102. package/dist/conversation/call-turn-queue.d.ts.map +1 -0
  103. package/dist/conversation/call-turn-queue.js +156 -0
  104. package/dist/conversation/call-turn-queue.js.map +1 -0
  105. package/dist/conversation/conversation-bootstrap.service.d.ts +60 -0
  106. package/dist/conversation/conversation-bootstrap.service.d.ts.map +1 -0
  107. package/dist/conversation/conversation-bootstrap.service.js +383 -0
  108. package/dist/conversation/conversation-bootstrap.service.js.map +1 -0
  109. package/dist/conversation/conversation-entry.d.ts +38 -0
  110. package/dist/conversation/conversation-entry.d.ts.map +1 -0
  111. package/dist/conversation/conversation-entry.js +17 -0
  112. package/dist/conversation/conversation-entry.js.map +1 -0
  113. package/dist/conversation/conversation-history.d.ts +31 -0
  114. package/dist/conversation/conversation-history.d.ts.map +1 -0
  115. package/dist/conversation/conversation-history.js +53 -0
  116. package/dist/conversation/conversation-history.js.map +1 -0
  117. package/dist/conversation/conversation-limits.d.ts +49 -0
  118. package/dist/conversation/conversation-limits.d.ts.map +1 -0
  119. package/dist/conversation/conversation-limits.js +44 -0
  120. package/dist/conversation/conversation-limits.js.map +1 -0
  121. package/dist/conversation/conversation-resume.service.d.ts +39 -0
  122. package/dist/conversation/conversation-resume.service.d.ts.map +1 -0
  123. package/dist/conversation/conversation-resume.service.js +234 -0
  124. package/dist/conversation/conversation-resume.service.js.map +1 -0
  125. package/dist/conversation/conversation-schema.d.ts +23 -0
  126. package/dist/conversation/conversation-schema.d.ts.map +1 -0
  127. package/dist/conversation/conversation-schema.js +3 -0
  128. package/dist/conversation/conversation-schema.js.map +1 -0
  129. package/dist/conversation/listen-expectation.d.ts +145 -0
  130. package/dist/conversation/listen-expectation.d.ts.map +1 -0
  131. package/dist/conversation/listen-expectation.js +219 -0
  132. package/dist/conversation/listen-expectation.js.map +1 -0
  133. package/dist/conversation/listen-timeout.d.ts +42 -0
  134. package/dist/conversation/listen-timeout.d.ts.map +1 -0
  135. package/dist/conversation/listen-timeout.js +57 -0
  136. package/dist/conversation/listen-timeout.js.map +1 -0
  137. package/dist/conversation/supervised-conversation.d.ts +64 -0
  138. package/dist/conversation/supervised-conversation.d.ts.map +1 -0
  139. package/dist/conversation/supervised-conversation.js +198 -0
  140. package/dist/conversation/supervised-conversation.js.map +1 -0
  141. package/dist/conversation/supervised-conversation.registry.d.ts +14 -0
  142. package/dist/conversation/supervised-conversation.registry.d.ts.map +1 -0
  143. package/dist/conversation/supervised-conversation.registry.js +47 -0
  144. package/dist/conversation/supervised-conversation.registry.js.map +1 -0
  145. package/dist/conversation/types.d.ts +52 -0
  146. package/dist/conversation/types.d.ts.map +1 -0
  147. package/dist/conversation/types.js +3 -0
  148. package/dist/conversation/types.js.map +1 -0
  149. package/dist/events/conversation-console.d.ts +17 -0
  150. package/dist/events/conversation-console.d.ts.map +1 -0
  151. package/dist/events/conversation-console.js +863 -0
  152. package/dist/events/conversation-console.js.map +1 -0
  153. package/dist/events/daily-log.driver.d.ts +35 -0
  154. package/dist/events/daily-log.driver.d.ts.map +1 -0
  155. package/dist/events/daily-log.driver.js +206 -0
  156. package/dist/events/daily-log.driver.js.map +1 -0
  157. package/dist/events/event.service.d.ts +24 -0
  158. package/dist/events/event.service.d.ts.map +1 -0
  159. package/dist/events/event.service.js +141 -0
  160. package/dist/events/event.service.js.map +1 -0
  161. package/dist/events/route-forensics.d.ts +38 -0
  162. package/dist/events/route-forensics.d.ts.map +1 -0
  163. package/dist/events/route-forensics.js +85 -0
  164. package/dist/events/route-forensics.js.map +1 -0
  165. package/dist/events/studio-event-bus.d.ts +17 -0
  166. package/dist/events/studio-event-bus.d.ts.map +1 -0
  167. package/dist/events/studio-event-bus.js +37 -0
  168. package/dist/events/studio-event-bus.js.map +1 -0
  169. package/dist/events/studio-event.d.ts +44 -0
  170. package/dist/events/studio-event.d.ts.map +1 -0
  171. package/dist/events/studio-event.js +27 -0
  172. package/dist/events/studio-event.js.map +1 -0
  173. package/dist/flow/condition.d.ts +35 -0
  174. package/dist/flow/condition.d.ts.map +1 -0
  175. package/dist/flow/condition.js +246 -0
  176. package/dist/flow/condition.js.map +1 -0
  177. package/dist/flow/flow-loader.d.ts +71 -0
  178. package/dist/flow/flow-loader.d.ts.map +1 -0
  179. package/dist/flow/flow-loader.js +182 -0
  180. package/dist/flow/flow-loader.js.map +1 -0
  181. package/dist/forms/form-html.d.ts +30 -0
  182. package/dist/forms/form-html.d.ts.map +1 -0
  183. package/dist/forms/form-html.js +130 -0
  184. package/dist/forms/form-html.js.map +1 -0
  185. package/dist/forms/form.tokens.d.ts +3 -0
  186. package/dist/forms/form.tokens.d.ts.map +1 -0
  187. package/dist/forms/form.tokens.js +6 -0
  188. package/dist/forms/form.tokens.js.map +1 -0
  189. package/dist/forms/form.types.d.ts +81 -0
  190. package/dist/forms/form.types.d.ts.map +1 -0
  191. package/dist/forms/form.types.js +36 -0
  192. package/dist/forms/form.types.js.map +1 -0
  193. package/dist/forms/forms.service.d.ts +52 -0
  194. package/dist/forms/forms.service.d.ts.map +1 -0
  195. package/dist/forms/forms.service.js +434 -0
  196. package/dist/forms/forms.service.js.map +1 -0
  197. package/dist/forms/noop-form-dispose.adapter.d.ts +12 -0
  198. package/dist/forms/noop-form-dispose.adapter.d.ts.map +1 -0
  199. package/dist/forms/noop-form-dispose.adapter.js +27 -0
  200. package/dist/forms/noop-form-dispose.adapter.js.map +1 -0
  201. package/dist/forms/twilio-sms-form-dispose.adapter.d.ts +33 -0
  202. package/dist/forms/twilio-sms-form-dispose.adapter.d.ts.map +1 -0
  203. package/dist/forms/twilio-sms-form-dispose.adapter.js +125 -0
  204. package/dist/forms/twilio-sms-form-dispose.adapter.js.map +1 -0
  205. package/dist/forms/twilio-sms.env.d.ts +62 -0
  206. package/dist/forms/twilio-sms.env.d.ts.map +1 -0
  207. package/dist/forms/twilio-sms.env.js +147 -0
  208. package/dist/forms/twilio-sms.env.js.map +1 -0
  209. package/dist/forms/twilio-sms.sender.d.ts +27 -0
  210. package/dist/forms/twilio-sms.sender.d.ts.map +1 -0
  211. package/dist/forms/twilio-sms.sender.js +75 -0
  212. package/dist/forms/twilio-sms.sender.js.map +1 -0
  213. package/dist/identity/email-parse.d.ts +20 -0
  214. package/dist/identity/email-parse.d.ts.map +1 -0
  215. package/dist/identity/email-parse.js +102 -0
  216. package/dist/identity/email-parse.js.map +1 -0
  217. package/dist/identity/index.d.ts +17 -0
  218. package/dist/identity/index.d.ts.map +1 -0
  219. package/dist/identity/index.js +23 -0
  220. package/dist/identity/index.js.map +1 -0
  221. package/dist/index.d.ts +108 -0
  222. package/dist/index.d.ts.map +1 -0
  223. package/dist/index.js +300 -0
  224. package/dist/index.js.map +1 -0
  225. package/dist/integrations/integration-client.d.ts +41 -0
  226. package/dist/integrations/integration-client.d.ts.map +1 -0
  227. package/dist/integrations/integration-client.js +152 -0
  228. package/dist/integrations/integration-client.js.map +1 -0
  229. package/dist/integrations/jwt-hmac.d.ts +33 -0
  230. package/dist/integrations/jwt-hmac.d.ts.map +1 -0
  231. package/dist/integrations/jwt-hmac.js +108 -0
  232. package/dist/integrations/jwt-hmac.js.map +1 -0
  233. package/dist/intention/code-intention.d.ts +94 -0
  234. package/dist/intention/code-intention.d.ts.map +1 -0
  235. package/dist/intention/code-intention.js +89 -0
  236. package/dist/intention/code-intention.js.map +1 -0
  237. package/dist/intention/intention-constants.d.ts +37 -0
  238. package/dist/intention/intention-constants.d.ts.map +1 -0
  239. package/dist/intention/intention-constants.js +37 -0
  240. package/dist/intention/intention-constants.js.map +1 -0
  241. package/dist/intentions/standard-intentions.d.ts +26 -0
  242. package/dist/intentions/standard-intentions.d.ts.map +1 -0
  243. package/dist/intentions/standard-intentions.js +28 -0
  244. package/dist/intentions/standard-intentions.js.map +1 -0
  245. package/dist/node/agent-node.d.ts +156 -0
  246. package/dist/node/agent-node.d.ts.map +1 -0
  247. package/dist/node/agent-node.js +179 -0
  248. package/dist/node/agent-node.js.map +1 -0
  249. package/dist/node/catch-directive.d.ts +33 -0
  250. package/dist/node/catch-directive.d.ts.map +1 -0
  251. package/dist/node/catch-directive.js +41 -0
  252. package/dist/node/catch-directive.js.map +1 -0
  253. package/dist/output/conversation-output.d.ts +113 -0
  254. package/dist/output/conversation-output.d.ts.map +1 -0
  255. package/dist/output/conversation-output.js +100 -0
  256. package/dist/output/conversation-output.js.map +1 -0
  257. package/dist/persistence/conversation.entity.d.ts +27 -0
  258. package/dist/persistence/conversation.entity.d.ts.map +1 -0
  259. package/dist/persistence/conversation.entity.js +115 -0
  260. package/dist/persistence/conversation.entity.js.map +1 -0
  261. package/dist/persistence/conversation.repository.d.ts +82 -0
  262. package/dist/persistence/conversation.repository.d.ts.map +1 -0
  263. package/dist/persistence/conversation.repository.js +277 -0
  264. package/dist/persistence/conversation.repository.js.map +1 -0
  265. package/dist/persistence/project.entity.d.ts +12 -0
  266. package/dist/persistence/project.entity.d.ts.map +1 -0
  267. package/dist/persistence/project.entity.js +46 -0
  268. package/dist/persistence/project.entity.js.map +1 -0
  269. package/dist/persistence/project.repository.d.ts +17 -0
  270. package/dist/persistence/project.repository.d.ts.map +1 -0
  271. package/dist/persistence/project.repository.js +69 -0
  272. package/dist/persistence/project.repository.js.map +1 -0
  273. package/dist/persistence/provider-ingress.entity.d.ts +18 -0
  274. package/dist/persistence/provider-ingress.entity.d.ts.map +1 -0
  275. package/dist/persistence/provider-ingress.entity.js +91 -0
  276. package/dist/persistence/provider-ingress.entity.js.map +1 -0
  277. package/dist/persistence/provider-ingress.repository.d.ts +21 -0
  278. package/dist/persistence/provider-ingress.repository.d.ts.map +1 -0
  279. package/dist/persistence/provider-ingress.repository.js +76 -0
  280. package/dist/persistence/provider-ingress.repository.js.map +1 -0
  281. package/dist/studio-ui/assets/index-BGd2OhLv.js +84 -0
  282. package/dist/studio-ui/assets/index-BGd2OhLv.js.map +1 -0
  283. package/dist/studio-ui/assets/index-DnJos5x2.css +1 -0
  284. package/dist/studio-ui/index.html +13 -0
  285. package/dist/studio-ui-mount/index.d.ts +6 -0
  286. package/dist/studio-ui-mount/index.d.ts.map +1 -0
  287. package/dist/studio-ui-mount/index.js +13 -0
  288. package/dist/studio-ui-mount/index.js.map +1 -0
  289. package/dist/studio-ui-mount/resolve-studio-ui-root.d.ts +6 -0
  290. package/dist/studio-ui-mount/resolve-studio-ui-root.d.ts.map +1 -0
  291. package/dist/studio-ui-mount/resolve-studio-ui-root.js +25 -0
  292. package/dist/studio-ui-mount/resolve-studio-ui-root.js.map +1 -0
  293. package/dist/studio-ui-mount/studio-spa.controller.d.ts +18 -0
  294. package/dist/studio-ui-mount/studio-spa.controller.d.ts.map +1 -0
  295. package/dist/studio-ui-mount/studio-spa.controller.js +57 -0
  296. package/dist/studio-ui-mount/studio-spa.controller.js.map +1 -0
  297. package/dist/studio-ui-mount/studio-ui.module.d.ts +15 -0
  298. package/dist/studio-ui-mount/studio-ui.module.d.ts.map +1 -0
  299. package/dist/studio-ui-mount/studio-ui.module.js +47 -0
  300. package/dist/studio-ui-mount/studio-ui.module.js.map +1 -0
  301. package/dist/studio-ui-mount/studio-ui.tokens.d.ts +2 -0
  302. package/dist/studio-ui-mount/studio-ui.tokens.d.ts.map +1 -0
  303. package/dist/studio-ui-mount/studio-ui.tokens.js +5 -0
  304. package/dist/studio-ui-mount/studio-ui.tokens.js.map +1 -0
  305. package/dist/supervisor/supervisor-cascade.d.ts +55 -0
  306. package/dist/supervisor/supervisor-cascade.d.ts.map +1 -0
  307. package/dist/supervisor/supervisor-cascade.js +261 -0
  308. package/dist/supervisor/supervisor-cascade.js.map +1 -0
  309. package/dist/supervisor/supervisor-engine.d.ts +9 -0
  310. package/dist/supervisor/supervisor-engine.d.ts.map +1 -0
  311. package/dist/supervisor/supervisor-engine.js +64 -0
  312. package/dist/supervisor/supervisor-engine.js.map +1 -0
  313. package/dist/supervisor/supervisor-limits.d.ts +8 -0
  314. package/dist/supervisor/supervisor-limits.d.ts.map +1 -0
  315. package/dist/supervisor/supervisor-limits.js +36 -0
  316. package/dist/supervisor/supervisor-limits.js.map +1 -0
  317. package/dist/supervisor/supervisor-node-exec.d.ts +39 -0
  318. package/dist/supervisor/supervisor-node-exec.d.ts.map +1 -0
  319. package/dist/supervisor/supervisor-node-exec.js +201 -0
  320. package/dist/supervisor/supervisor-node-exec.js.map +1 -0
  321. package/dist/supervisor/supervisor-orchestration.d.ts +24 -0
  322. package/dist/supervisor/supervisor-orchestration.d.ts.map +1 -0
  323. package/dist/supervisor/supervisor-orchestration.js +395 -0
  324. package/dist/supervisor/supervisor-orchestration.js.map +1 -0
  325. package/dist/supervisor/supervisor-portal.d.ts +75 -0
  326. package/dist/supervisor/supervisor-portal.d.ts.map +1 -0
  327. package/dist/supervisor/supervisor-portal.js +320 -0
  328. package/dist/supervisor/supervisor-portal.js.map +1 -0
  329. package/dist/supervisor/supervisor-route.d.ts +53 -0
  330. package/dist/supervisor/supervisor-route.d.ts.map +1 -0
  331. package/dist/supervisor/supervisor-route.js +308 -0
  332. package/dist/supervisor/supervisor-route.js.map +1 -0
  333. package/dist/supervisor/supervisor-special-turns.d.ts +34 -0
  334. package/dist/supervisor/supervisor-special-turns.d.ts.map +1 -0
  335. package/dist/supervisor/supervisor-special-turns.js +308 -0
  336. package/dist/supervisor/supervisor-special-turns.js.map +1 -0
  337. package/dist/supervisor/supervisor.d.ts +44 -0
  338. package/dist/supervisor/supervisor.d.ts.map +1 -0
  339. package/dist/supervisor/supervisor.js +79 -0
  340. package/dist/supervisor/supervisor.js.map +1 -0
  341. package/dist/supervisor/supervisor.types.d.ts +71 -0
  342. package/dist/supervisor/supervisor.types.d.ts.map +1 -0
  343. package/dist/supervisor/supervisor.types.js +8 -0
  344. package/dist/supervisor/supervisor.types.js.map +1 -0
  345. package/dist/tasks/studio-task-queue.d.ts +93 -0
  346. package/dist/tasks/studio-task-queue.d.ts.map +1 -0
  347. package/dist/tasks/studio-task-queue.js +226 -0
  348. package/dist/tasks/studio-task-queue.js.map +1 -0
  349. package/dist/util/studio-env.d.ts +7 -0
  350. package/dist/util/studio-env.d.ts.map +1 -0
  351. package/dist/util/studio-env.js +32 -0
  352. package/dist/util/studio-env.js.map +1 -0
  353. package/dist/vapi-studio.module.d.ts +55 -0
  354. package/dist/vapi-studio.module.d.ts.map +1 -0
  355. package/dist/vapi-studio.module.js +166 -0
  356. package/dist/vapi-studio.module.js.map +1 -0
  357. package/dist/workflow/workflow-handoff.service.d.ts +29 -0
  358. package/dist/workflow/workflow-handoff.service.d.ts.map +1 -0
  359. package/dist/workflow/workflow-handoff.service.js +165 -0
  360. package/dist/workflow/workflow-handoff.service.js.map +1 -0
  361. package/dist/workflow/workflow-loader.d.ts +48 -0
  362. package/dist/workflow/workflow-loader.d.ts.map +1 -0
  363. package/dist/workflow/workflow-loader.js +87 -0
  364. package/dist/workflow/workflow-loader.js.map +1 -0
  365. package/docs/README.md +69 -0
  366. package/docs/assets/deterministic-assistant-flow.svg +128 -0
  367. package/docs/assets/vapi-studio-stack.svg +26 -0
  368. package/docs/best-practices/README.md +37 -0
  369. package/docs/best-practices/brain-and-prompt-injection.md +70 -0
  370. package/docs/best-practices/conversation-design.md +152 -0
  371. package/docs/best-practices/debugging-and-observability.md +49 -0
  372. package/docs/best-practices/documentation-layers.md +31 -0
  373. package/docs/best-practices/identity-and-pii.md +66 -0
  374. package/docs/best-practices/nodes-and-listens.md +116 -0
  375. package/docs/best-practices/ui-and-api-identity.md +51 -0
  376. package/docs/building-apps/creating-an-app.md +59 -0
  377. package/docs/building-apps/example-apps.md +23 -0
  378. package/docs/building-apps/overview.md +27 -0
  379. package/docs/getting-started/installation.md +52 -0
  380. package/docs/getting-started/introduction.md +23 -0
  381. package/docs/getting-started/quick-start.md +23 -0
  382. package/docs/guide/concepts.md +103 -0
  383. package/docs/guide/forms.md +102 -0
  384. package/docs/guide/handbook.md +21 -0
  385. package/docs/guide/introduction.md +56 -0
  386. package/docs/guide/module-setup.md +68 -0
  387. package/docs/guide/vapi-adapter.md +70 -0
  388. package/docs/guide/workflow-squad.md +59 -0
  389. package/docs/guides/agents.md +85 -0
  390. package/docs/guides/docker-compose.events.stub.yaml +27 -0
  391. package/docs/guides/documentation.md +13 -0
  392. package/docs/guides/extending-events.md +155 -0
  393. package/docs/guides/node-conventions.md +59 -0
  394. package/docs/guides/speckit.md +56 -0
  395. package/docs/reference/data-model.md +79 -0
  396. package/docs/reference/environment-variables.md +60 -0
  397. package/docs/reference/events-and-logging.md +137 -0
  398. package/docs/reference/flow-schema.md +79 -0
  399. package/docs/reference/runtime-api.md +708 -0
  400. package/docs/reference/security.md +41 -0
  401. package/docs/reference/standard-intentions.md +49 -0
  402. package/docs/reference/testing.md +15 -0
  403. package/docs/samples/events/nest-listener.example.ts +17 -0
  404. package/docs/samples/events/redis-bridge.example.ts +44 -0
  405. package/package.json +81 -0
  406. package/scripts/fix-access-modifiers.mjs +85 -0
  407. package/scripts/install-agent-refs.cjs +196 -0
@@ -0,0 +1,201 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.MockBrainService = exports.MockBrainAdapter = void 0;
10
+ const fs_1 = require("fs");
11
+ const common_1 = require("@nestjs/common");
12
+ const yaml_1 = require("yaml");
13
+ const listen_expectation_1 = require("../../conversation/listen-expectation");
14
+ const conversation_history_1 = require("../../conversation/conversation-history");
15
+ const brain_ranking_1 = require("../brain-ranking");
16
+ const brain_clarify_1 = require("../brain-clarify");
17
+ const brain_judge_1 = require("../brain-judge");
18
+ /**
19
+ * Deterministic Brain adapter for PoC / tests.
20
+ * No network, no ChatGPT — sequence-driven intentions + listen boosts/hints + mock extract.
21
+ */
22
+ let MockBrainAdapter = class MockBrainAdapter {
23
+ profiles = new Map();
24
+ activeProfileId = 'state-machine';
25
+ loadProfile(profileId, path) {
26
+ const raw = (0, yaml_1.parse)((0, fs_1.readFileSync)(path, 'utf8'));
27
+ if (!raw?.sequence?.length) {
28
+ throw new Error(`Invalid brain profile at ${path}`);
29
+ }
30
+ this.setSequence(profileId, raw.sequence);
31
+ }
32
+ setSequence(profileId, sequence) {
33
+ if (!sequence.length) {
34
+ throw new Error(`Brain sequence empty for profile ${profileId}`);
35
+ }
36
+ this.profiles.set(profileId, sequence);
37
+ }
38
+ setActiveProfile(profileId) {
39
+ if (!this.profiles.has(profileId)) {
40
+ throw new Error(`Unknown brain profile: ${profileId}`);
41
+ }
42
+ this.activeProfileId = profileId;
43
+ }
44
+ getActiveProfileId() {
45
+ return this.activeProfileId;
46
+ }
47
+ async scan(input) {
48
+ const profileId = input.runtime.brainProfileId || this.activeProfileId;
49
+ const sequence = this.profiles.get(profileId);
50
+ if (!sequence) {
51
+ throw new Error(`Brain profile not loaded: ${profileId}`);
52
+ }
53
+ const listen = input.listen ?? input.runtime.listenExpectation;
54
+ const index = input.runtime.brainSequenceIndex;
55
+ const mk = (name, confidence, priority, payload) => ({
56
+ name,
57
+ confidence: (0, brain_ranking_1.roundConfidence)(confidence),
58
+ priority,
59
+ rank: Math.round((1 - (0, brain_ranking_1.roundConfidence)(confidence)) * 1_000_000),
60
+ payload: { ...payload, confidence: (0, brain_ranking_1.roundConfidence)(confidence), priority },
61
+ });
62
+ let candidates;
63
+ if (index >= sequence.length) {
64
+ candidates = [
65
+ mk(sequence[sequence.length - 1], 1, 1_000_000, {
66
+ userText: input.userText,
67
+ exhausted: true,
68
+ hints: listen?.hints,
69
+ adapter: 'mock',
70
+ }),
71
+ ];
72
+ }
73
+ else {
74
+ const name = sequence[index];
75
+ input.runtime.brainSequenceIndex = index + 1;
76
+ candidates = [
77
+ mk(name, 1, 1_000_000, {
78
+ userText: input.userText,
79
+ sequenceIndex: index,
80
+ hints: listen?.hints,
81
+ adapter: 'mock',
82
+ }),
83
+ ];
84
+ }
85
+ if (listen?.intentions?.length) {
86
+ for (const intent of listen.intentions) {
87
+ if (candidates.some((c) => c.name === intent.name)) {
88
+ continue;
89
+ }
90
+ candidates.push(mk(intent.name, 0.15, intent.priority ?? conversation_history_1.DEFAULT_INTENTION_PRIORITY, {
91
+ userText: input.userText,
92
+ fromListenHint: true,
93
+ hints: listen.hints,
94
+ adapter: 'mock',
95
+ listenBoost: intent.boost,
96
+ }));
97
+ }
98
+ }
99
+ const extracted = (0, listen_expectation_1.mockExtractFromUserText)(input.userText, listen?.extract?.fields);
100
+ return {
101
+ intentions: candidates,
102
+ extracted: Object.keys(extracted).length ? extracted : undefined,
103
+ };
104
+ }
105
+ /**
106
+ * Deterministic clarify for tests — fills required string fields from input text.
107
+ * Empty / reserved marker input → studio.clarify.cannotAnswer.
108
+ */
109
+ async clarify(request) {
110
+ const text = (0, brain_clarify_1.clarifiableInputToString)(request.input).trim();
111
+ if (!text ||
112
+ /^studio\.clarify\.cannotAnswer$/i.test(text) ||
113
+ /\bcannot\s*answer\b/i.test(text)) {
114
+ (0, brain_clarify_1.throwClarifyCannotAnswer)(!text ? 'empty_input' : 'explicit_cannot_answer');
115
+ }
116
+ const answer = {};
117
+ for (const field of request.answer.fields ?? []) {
118
+ if (field.type === 'boolean') {
119
+ answer[field.key] = /\b(yes|true|yep)\b/i.test(text);
120
+ continue;
121
+ }
122
+ if (field.type === 'number') {
123
+ const n = text.match(/-?\d+(?:\.\d+)?/);
124
+ answer[field.key] = n ? Number(n[0]) : null;
125
+ continue;
126
+ }
127
+ if (field.type === 'object' || field.type === 'array') {
128
+ answer[field.key] = null;
129
+ continue;
130
+ }
131
+ const named = text.match(/(?:my name is|i(?:'| a)?m|call me|it(?:'| i)?s)\s+([A-Za-z][A-Za-z'-]*)/i) ?? text.match(/^([A-Za-z][A-Za-z'-]*)$/);
132
+ answer[field.key] = named?.[1] ?? (text ? text.split(/\s+/)[0] : null);
133
+ }
134
+ return (0, brain_clarify_1.normalizeClarifyResult)({ answer }, request.answer);
135
+ }
136
+ /**
137
+ * Deterministic judge for tests — no network.
138
+ * Markers in context: `studio.judge.pass` / `studio.judge.fail`.
139
+ * Otherwise: any matching failureCondition → fail; all successConditions
140
+ * present (or none given) → pass.
141
+ */
142
+ async judge(request) {
143
+ const text = (0, brain_judge_1.judgeContextToString)(request.context).trim();
144
+ const success = request.successConditions ?? [];
145
+ const failure = request.failureConditions ?? [];
146
+ const haystack = text.toLowerCase();
147
+ if (!text || /^studio\.judge\.fail$/i.test(text)) {
148
+ return (0, brain_judge_1.normalizeJudgeResult)({
149
+ passed: false,
150
+ confidence: text ? 1 : 0,
151
+ reasoning: [text ? 'explicit_fail_marker' : 'empty_context'],
152
+ }, request.options);
153
+ }
154
+ if (/studio\.judge\.fail\b/i.test(text)) {
155
+ return (0, brain_judge_1.normalizeJudgeResult)({
156
+ passed: false,
157
+ confidence: 1,
158
+ reasoning: ['explicit_fail_marker'],
159
+ }, request.options);
160
+ }
161
+ if (/studio\.judge\.pass\b/i.test(text)) {
162
+ return (0, brain_judge_1.normalizeJudgeResult)({
163
+ passed: true,
164
+ confidence: 1,
165
+ reasoning: ['explicit_pass_marker'],
166
+ }, request.options);
167
+ }
168
+ const hitFailure = failure.filter((c) => haystack.includes(c.trim().toLowerCase()));
169
+ if (hitFailure.length) {
170
+ return (0, brain_judge_1.normalizeJudgeResult)({
171
+ passed: false,
172
+ confidence: 0.95,
173
+ reasoning: hitFailure.map((c) => `failure_condition: ${c}`),
174
+ }, request.options);
175
+ }
176
+ const missedSuccess = success.filter((c) => !haystack.includes(c.trim().toLowerCase()));
177
+ if (missedSuccess.length) {
178
+ return (0, brain_judge_1.normalizeJudgeResult)({
179
+ passed: false,
180
+ confidence: 0.8,
181
+ reasoning: missedSuccess.map((c) => `missing_success_condition: ${c}`),
182
+ }, request.options);
183
+ }
184
+ return (0, brain_judge_1.normalizeJudgeResult)({
185
+ passed: true,
186
+ confidence: 0.9,
187
+ reasoning: success.length
188
+ ? success.map((c) => `success_condition: ${c}`)
189
+ : ['goals_assumed_met'],
190
+ }, request.options);
191
+ }
192
+ };
193
+ exports.MockBrainAdapter = MockBrainAdapter;
194
+ exports.MockBrainAdapter = MockBrainAdapter = __decorate([
195
+ (0, common_1.Injectable)()
196
+ ], MockBrainAdapter);
197
+ /** @deprecated Prefer MockBrainAdapter — kept for existing imports. */
198
+ class MockBrainService extends MockBrainAdapter {
199
+ }
200
+ exports.MockBrainService = MockBrainService;
201
+ //# sourceMappingURL=mock-brain.adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mock-brain.adapter.js","sourceRoot":"","sources":["../../../src/brain/adapters/mock-brain.adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Named mock Brain adapters — same deterministic sequence engine as
3
+ * {@link MockBrainAdapter}, tagged by intended live provider for app wiring.
4
+ *
5
+ * Use these when you want `brainConfig.adapter: 'mock-claude'` (etc.) without
6
+ * calling Anthropic/Google/xAI/OpenAI. Behavior is identical across mocks;
7
+ * only the class identity / `mockProvider` label differs.
8
+ */
9
+ import { MockBrainAdapter } from './mock-brain.adapter';
10
+ export declare class MockChatGptBrainAdapter extends MockBrainAdapter {
11
+ readonly mockProvider: 'chatgpt';
12
+ }
13
+ export declare class MockClaudeBrainAdapter extends MockBrainAdapter {
14
+ readonly mockProvider: 'claude';
15
+ }
16
+ export declare class MockGeminiBrainAdapter extends MockBrainAdapter {
17
+ readonly mockProvider: 'gemini';
18
+ }
19
+ export declare class MockGrokBrainAdapter extends MockBrainAdapter {
20
+ readonly mockProvider: 'grok';
21
+ }
22
+ //# sourceMappingURL=mock-provider-brains.adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mock-provider-brains.adapter.d.ts","sourceRoot":"","sources":["../../../src/brain/adapters/mock-provider-brains.adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExD,qBACa,uBAAwB,SAAQ,gBAAgB;IAC3D,SAAgB,YAAY,EAAE,SAAS,CAAa;CACrD;AAED,qBACa,sBAAuB,SAAQ,gBAAgB;IAC1D,SAAgB,YAAY,EAAE,QAAQ,CAAY;CACnD;AAED,qBACa,sBAAuB,SAAQ,gBAAgB;IAC1D,SAAgB,YAAY,EAAE,QAAQ,CAAY;CACnD;AAED,qBACa,oBAAqB,SAAQ,gBAAgB;IACxD,SAAgB,YAAY,EAAE,MAAM,CAAU;CAC/C"}
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ /**
3
+ * Named mock Brain adapters — same deterministic sequence engine as
4
+ * {@link MockBrainAdapter}, tagged by intended live provider for app wiring.
5
+ *
6
+ * Use these when you want `brainConfig.adapter: 'mock-claude'` (etc.) without
7
+ * calling Anthropic/Google/xAI/OpenAI. Behavior is identical across mocks;
8
+ * only the class identity / `mockProvider` label differs.
9
+ */
10
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
11
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
12
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
13
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
14
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.MockGrokBrainAdapter = exports.MockGeminiBrainAdapter = exports.MockClaudeBrainAdapter = exports.MockChatGptBrainAdapter = void 0;
18
+ const common_1 = require("@nestjs/common");
19
+ const mock_brain_adapter_1 = require("./mock-brain.adapter");
20
+ let MockChatGptBrainAdapter = class MockChatGptBrainAdapter extends mock_brain_adapter_1.MockBrainAdapter {
21
+ mockProvider = 'chatgpt';
22
+ };
23
+ exports.MockChatGptBrainAdapter = MockChatGptBrainAdapter;
24
+ exports.MockChatGptBrainAdapter = MockChatGptBrainAdapter = __decorate([
25
+ (0, common_1.Injectable)()
26
+ ], MockChatGptBrainAdapter);
27
+ let MockClaudeBrainAdapter = class MockClaudeBrainAdapter extends mock_brain_adapter_1.MockBrainAdapter {
28
+ mockProvider = 'claude';
29
+ };
30
+ exports.MockClaudeBrainAdapter = MockClaudeBrainAdapter;
31
+ exports.MockClaudeBrainAdapter = MockClaudeBrainAdapter = __decorate([
32
+ (0, common_1.Injectable)()
33
+ ], MockClaudeBrainAdapter);
34
+ let MockGeminiBrainAdapter = class MockGeminiBrainAdapter extends mock_brain_adapter_1.MockBrainAdapter {
35
+ mockProvider = 'gemini';
36
+ };
37
+ exports.MockGeminiBrainAdapter = MockGeminiBrainAdapter;
38
+ exports.MockGeminiBrainAdapter = MockGeminiBrainAdapter = __decorate([
39
+ (0, common_1.Injectable)()
40
+ ], MockGeminiBrainAdapter);
41
+ let MockGrokBrainAdapter = class MockGrokBrainAdapter extends mock_brain_adapter_1.MockBrainAdapter {
42
+ mockProvider = 'grok';
43
+ };
44
+ exports.MockGrokBrainAdapter = MockGrokBrainAdapter;
45
+ exports.MockGrokBrainAdapter = MockGrokBrainAdapter = __decorate([
46
+ (0, common_1.Injectable)()
47
+ ], MockGrokBrainAdapter);
48
+ //# sourceMappingURL=mock-provider-brains.adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mock-provider-brains.adapter.js","sourceRoot":"","sources":["../../../src/brain/adapters/mock-provider-brains.adapter.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;;;;;;;AAEH,2CAA4C;AAC5C,6DAAwD;AAGjD,IAAM,uBAAuB,GAA7B,MAAM,uBAAwB,SAAQ,qCAAgB;IAC3C,YAAY,GAAc,SAAS,CAAC;CACrD,CAAA;AAFY,0DAAuB;kCAAvB,uBAAuB;IADnC,IAAA,mBAAU,GAAE;GACA,uBAAuB,CAEnC;AAGM,IAAM,sBAAsB,GAA5B,MAAM,sBAAuB,SAAQ,qCAAgB;IAC1C,YAAY,GAAa,QAAQ,CAAC;CACnD,CAAA;AAFY,wDAAsB;iCAAtB,sBAAsB;IADlC,IAAA,mBAAU,GAAE;GACA,sBAAsB,CAElC;AAGM,IAAM,sBAAsB,GAA5B,MAAM,sBAAuB,SAAQ,qCAAgB;IAC1C,YAAY,GAAa,QAAQ,CAAC;CACnD,CAAA;AAFY,wDAAsB;iCAAtB,sBAAsB;IADlC,IAAA,mBAAU,GAAE;GACA,sBAAsB,CAElC;AAGM,IAAM,oBAAoB,GAA1B,MAAM,oBAAqB,SAAQ,qCAAgB;IACxC,YAAY,GAAW,MAAM,CAAC;CAC/C,CAAA;AAFY,oDAAoB;+BAApB,oBAAoB;IADhC,IAAA,mBAAU,GAAE;GACA,oBAAoB,CAEhC"}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Brain clarify — ask a free-form question with a required object answer shape.
3
+ * Used when the flow has an ambiguous / incomplete answer and needs a Brain judgment.
4
+ *
5
+ * Reserved failure: throws ClarifyCannotAnswerError (`studio.clarify.cannotAnswer`).
6
+ */
7
+ /** Anything the runtime can stringify for Brain context. */
8
+ export type ClarifiableInput = string | number | boolean | bigint | Date | null | undefined | {
9
+ toString(): string;
10
+ };
11
+ export interface BrainAnswerField {
12
+ key: string;
13
+ description?: string;
14
+ type?: 'string' | 'number' | 'boolean' | 'object' | 'array';
15
+ required?: boolean;
16
+ }
17
+ /**
18
+ * Declares the object interface Brain must return.
19
+ * On success, `answer` is always an object keyed by these fields.
20
+ */
21
+ export interface BrainAnswerInterface {
22
+ fields: BrainAnswerField[];
23
+ /** Optional overall description of the answer object. */
24
+ description?: string;
25
+ }
26
+ export interface BrainClarifyRequest {
27
+ /** Arbitrary context convertible to string (user text, extracted blob, JSON, …). */
28
+ input: ClarifiableInput;
29
+ /** Question posed to Brain. */
30
+ question: string;
31
+ /** Required object answer shape. */
32
+ answer: BrainAnswerInterface;
33
+ /** Optional correlation for usage / console (filled by NodeContext). */
34
+ meta?: {
35
+ providerCallId?: string;
36
+ conversationId?: string;
37
+ };
38
+ }
39
+ /** Reserved clarify exception code — Brain cannot produce a reliable answer. */
40
+ export declare const STUDIO_CLARIFY_CANNOT_ANSWER: "studio.clarify.cannotAnswer";
41
+ /**
42
+ * Reserved exception thrown by Brain.clarify when it cannot answer.
43
+ * Catch this in Node.run / Node.catch to recover (restartNode, forceIntention, …).
44
+ */
45
+ export declare class ClarifyCannotAnswerError extends Error {
46
+ readonly code: "studio.clarify.cannotAnswer";
47
+ readonly reason?: string;
48
+ readonly details?: Record<string, unknown>;
49
+ constructor(reason?: string, details?: Record<string, unknown>);
50
+ }
51
+ export declare function isClarifyCannotAnswerError(error: unknown): error is ClarifyCannotAnswerError;
52
+ /** Throw the reserved cannot-answer exception. */
53
+ export declare function throwClarifyCannotAnswer(reason?: string, details?: Record<string, unknown>): never;
54
+ /**
55
+ * Successful clarify result — always an object answer.
56
+ * Failure is never returned here; adapters throw ClarifyCannotAnswerError.
57
+ */
58
+ export interface BrainClarifyResult<TAnswer extends Record<string, unknown> = Record<string, unknown>> {
59
+ answer: TAnswer;
60
+ }
61
+ /**
62
+ * Normalize raw Brain JSON into a successful clarify result,
63
+ * or throw ClarifyCannotAnswerError (reserved).
64
+ *
65
+ * Accepts:
66
+ * - `{ outcome: "studio.clarify.cannotAnswer", reason? }` → throw
67
+ * - `{ cannotAnswer: true, reason? }` → throw
68
+ * - `{ answer: {...} }` / `{ outcome: "answered", answer: {...} }`
69
+ */
70
+ export declare function normalizeClarifyResult<TAnswer extends Record<string, unknown> = Record<string, unknown>>(raw: unknown, answerInterface: BrainAnswerInterface): BrainClarifyResult<TAnswer>;
71
+ export declare function clarifiableInputToString(input: ClarifiableInput): string;
72
+ export declare function emptyAnswerFromInterface(answer: BrainAnswerInterface): Record<string, unknown>;
73
+ /** Keep only keys declared on the answer interface; sanitize string values fail-closed. */
74
+ export declare function filterClarifyAnswer(raw: Record<string, unknown> | null | undefined, answer: BrainAnswerInterface): Record<string, unknown>;
75
+ //# sourceMappingURL=brain-clarify.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brain-clarify.d.ts","sourceRoot":"","sources":["../../src/brain/brain-clarify.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,4DAA4D;AAC5D,MAAM,MAAM,gBAAgB,GACxB,MAAM,GACN,MAAM,GACN,OAAO,GACP,MAAM,GACN,IAAI,GACJ,IAAI,GACJ,SAAS,GACT;IAAE,QAAQ,IAAI,MAAM,CAAA;CAAE,CAAC;AAE3B,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAC;IAC5D,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B,yDAAyD;IACzD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,mBAAmB;IAClC,oFAAoF;IACpF,KAAK,EAAE,gBAAgB,CAAC;IACxB,+BAA+B;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,oCAAoC;IACpC,MAAM,EAAE,oBAAoB,CAAC;IAC7B,wEAAwE;IACxE,IAAI,CAAC,EAAE;QACL,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB,CAAC;CACH;AAED,gFAAgF;AAChF,eAAO,MAAM,4BAA4B,EAAG,6BAAsC,CAAC;AACnF;;;GAGG;AACH,qBAAa,wBAAyB,SAAQ,KAAK;IACjD,SAAgB,IAAI,EAAE,6BAA6B,CAAgC;IACnF,SAAgB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChC,SAAgB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBAE/B,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAUtE;AAED,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,OAAO,GACb,KAAK,IAAI,wBAAwB,CAOnC;AAED,kDAAkD;AAClD,wBAAgB,wBAAwB,CACtC,MAAM,CAAC,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,KAAK,CAEP;AAED;;;GAGG;AACH,MAAM,WAAW,kBAAkB,CACjC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAEjE,MAAM,EAAE,OAAO,CAAC;CACjB;AAgBD;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAEjE,GAAG,EAAE,OAAO,EACZ,eAAe,EAAE,oBAAoB,GACpC,kBAAkB,CAAC,OAAO,CAAC,CAsC7B;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM,CAsBxE;AAED,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,oBAAoB,GAC3B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAMzB;AAED,2FAA2F;AAC3F,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,SAAS,EAC/C,MAAM,EAAE,oBAAoB,GAC3B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAiBzB"}
@@ -0,0 +1,146 @@
1
+ "use strict";
2
+ /**
3
+ * Brain clarify — ask a free-form question with a required object answer shape.
4
+ * Used when the flow has an ambiguous / incomplete answer and needs a Brain judgment.
5
+ *
6
+ * Reserved failure: throws ClarifyCannotAnswerError (`studio.clarify.cannotAnswer`).
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.ClarifyCannotAnswerError = exports.STUDIO_CLARIFY_CANNOT_ANSWER = void 0;
10
+ exports.isClarifyCannotAnswerError = isClarifyCannotAnswerError;
11
+ exports.throwClarifyCannotAnswer = throwClarifyCannotAnswer;
12
+ exports.normalizeClarifyResult = normalizeClarifyResult;
13
+ exports.clarifiableInputToString = clarifiableInputToString;
14
+ exports.emptyAnswerFromInterface = emptyAnswerFromInterface;
15
+ exports.filterClarifyAnswer = filterClarifyAnswer;
16
+ const prompt_injection_guard_1 = require("./prompt-injection-guard");
17
+ /** Reserved clarify exception code — Brain cannot produce a reliable answer. */
18
+ exports.STUDIO_CLARIFY_CANNOT_ANSWER = 'studio.clarify.cannotAnswer';
19
+ /**
20
+ * Reserved exception thrown by Brain.clarify when it cannot answer.
21
+ * Catch this in Node.run / Node.catch to recover (restartNode, forceIntention, …).
22
+ */
23
+ class ClarifyCannotAnswerError extends Error {
24
+ code = exports.STUDIO_CLARIFY_CANNOT_ANSWER;
25
+ reason;
26
+ details;
27
+ constructor(reason, details) {
28
+ super(reason
29
+ ? `${exports.STUDIO_CLARIFY_CANNOT_ANSWER}: ${reason}`
30
+ : exports.STUDIO_CLARIFY_CANNOT_ANSWER);
31
+ this.name = 'ClarifyCannotAnswerError';
32
+ this.reason = reason;
33
+ this.details = details;
34
+ }
35
+ }
36
+ exports.ClarifyCannotAnswerError = ClarifyCannotAnswerError;
37
+ function isClarifyCannotAnswerError(error) {
38
+ return (error instanceof ClarifyCannotAnswerError ||
39
+ (typeof error === 'object' &&
40
+ error !== null &&
41
+ error.code === exports.STUDIO_CLARIFY_CANNOT_ANSWER));
42
+ }
43
+ /** Throw the reserved cannot-answer exception. */
44
+ function throwClarifyCannotAnswer(reason, details) {
45
+ throw new ClarifyCannotAnswerError(reason, details);
46
+ }
47
+ function requiredFieldsMissing(answer, answerInterface) {
48
+ const required = (answerInterface.fields ?? []).filter((f) => f.required);
49
+ if (!required.length) {
50
+ return false;
51
+ }
52
+ return required.every((f) => {
53
+ const v = answer[f.key];
54
+ return v === undefined || v === null || v === '';
55
+ });
56
+ }
57
+ /**
58
+ * Normalize raw Brain JSON into a successful clarify result,
59
+ * or throw ClarifyCannotAnswerError (reserved).
60
+ *
61
+ * Accepts:
62
+ * - `{ outcome: "studio.clarify.cannotAnswer", reason? }` → throw
63
+ * - `{ cannotAnswer: true, reason? }` → throw
64
+ * - `{ answer: {...} }` / `{ outcome: "answered", answer: {...} }`
65
+ */
66
+ function normalizeClarifyResult(raw, answerInterface) {
67
+ if (!raw || typeof raw !== 'object' || Array.isArray(raw)) {
68
+ throwClarifyCannotAnswer('invalid_clarify_payload');
69
+ }
70
+ const obj = raw;
71
+ if (obj.outcome === exports.STUDIO_CLARIFY_CANNOT_ANSWER ||
72
+ obj.outcome === 'studio.clarify.cannotAnswer' ||
73
+ obj.cannotAnswer === true) {
74
+ throwClarifyCannotAnswer(typeof obj.reason === 'string' ? obj.reason : undefined);
75
+ }
76
+ let answerRaw;
77
+ if (obj.answer &&
78
+ typeof obj.answer === 'object' &&
79
+ !Array.isArray(obj.answer)) {
80
+ answerRaw = obj.answer;
81
+ }
82
+ else if ('outcome' in obj || 'cannotAnswer' in obj) {
83
+ throwClarifyCannotAnswer(typeof obj.reason === 'string' ? obj.reason : 'missing_answer');
84
+ }
85
+ else {
86
+ answerRaw = obj;
87
+ }
88
+ const filtered = filterClarifyAnswer(answerRaw, answerInterface);
89
+ if (requiredFieldsMissing(filtered, answerInterface)) {
90
+ throwClarifyCannotAnswer('required_fields_missing', {
91
+ answer: filtered,
92
+ });
93
+ }
94
+ return { answer: filtered };
95
+ }
96
+ function clarifiableInputToString(input) {
97
+ if (input === null || input === undefined) {
98
+ return '';
99
+ }
100
+ if (typeof input === 'string') {
101
+ return input;
102
+ }
103
+ if (typeof input === 'number' ||
104
+ typeof input === 'boolean' ||
105
+ typeof input === 'bigint') {
106
+ return String(input);
107
+ }
108
+ if (input instanceof Date) {
109
+ return input.toISOString();
110
+ }
111
+ try {
112
+ return String(input);
113
+ }
114
+ catch {
115
+ return '';
116
+ }
117
+ }
118
+ function emptyAnswerFromInterface(answer) {
119
+ const out = {};
120
+ for (const field of answer.fields ?? []) {
121
+ out[field.key] = null;
122
+ }
123
+ return out;
124
+ }
125
+ /** Keep only keys declared on the answer interface; sanitize string values fail-closed. */
126
+ function filterClarifyAnswer(raw, answer) {
127
+ const out = {};
128
+ const allowed = new Set((answer.fields ?? []).map((f) => f.key));
129
+ if (!raw || typeof raw !== 'object') {
130
+ return out;
131
+ }
132
+ for (const [key, value] of Object.entries(raw)) {
133
+ if (!allowed.has(key))
134
+ continue;
135
+ if (typeof value === 'string') {
136
+ const sanitized = (0, prompt_injection_guard_1.sanitizeExtractedFieldValue)(value);
137
+ if (sanitized === undefined)
138
+ continue;
139
+ out[key] = sanitized;
140
+ continue;
141
+ }
142
+ out[key] = value;
143
+ }
144
+ return out;
145
+ }
146
+ //# sourceMappingURL=brain-clarify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brain-clarify.js","sourceRoot":"","sources":["../../src/brain/brain-clarify.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAqEH,gEASC;AAGD,4DAKC;AAmCD,wDA2CC;AAED,4DAsBC;AAED,4DAQC;AAGD,kDAoBC;AA3ND,qEAAuE;AA4CvE,gFAAgF;AACnE,QAAA,4BAA4B,GAAG,6BAAsC,CAAC;AACnF;;;GAGG;AACH,MAAa,wBAAyB,SAAQ,KAAK;IACjC,IAAI,GAAkC,oCAA4B,CAAC;IACnE,MAAM,CAAU;IAChB,OAAO,CAA2B;IAElD,YAAmB,MAAe,EAAE,OAAiC;QACnE,KAAK,CACH,MAAM;YACJ,CAAC,CAAC,GAAG,oCAA4B,KAAK,MAAM,EAAE;YAC9C,CAAC,CAAC,oCAA4B,CACjC,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,0BAA0B,CAAC;QACvC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;CACF;AAfD,4DAeC;AAED,SAAgB,0BAA0B,CACxC,KAAc;IAEd,OAAO,CACL,KAAK,YAAY,wBAAwB;QACzC,CAAC,OAAO,KAAK,KAAK,QAAQ;YACxB,KAAK,KAAK,IAAI;YACb,KAA2B,CAAC,IAAI,KAAK,oCAA4B,CAAC,CACtE,CAAC;AACJ,CAAC;AAED,kDAAkD;AAClD,SAAgB,wBAAwB,CACtC,MAAe,EACf,OAAiC;IAEjC,MAAM,IAAI,wBAAwB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AACtD,CAAC;AAYD,SAAS,qBAAqB,CAC5B,MAA+B,EAC/B,eAAqC;IAErC,MAAM,QAAQ,GAAG,CAAC,eAAe,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC1E,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;QACrB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;QAC1B,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACxB,OAAO,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;IACnD,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;GAQG;AACH,SAAgB,sBAAsB,CAGpC,GAAY,EACZ,eAAqC;IAErC,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1D,wBAAwB,CAAC,yBAAyB,CAAC,CAAC;IACtD,CAAC;IACD,MAAM,GAAG,GAAG,GAA8B,CAAC;IAE3C,IACE,GAAG,CAAC,OAAO,KAAK,oCAA4B;QAC5C,GAAG,CAAC,OAAO,KAAK,6BAA6B;QAC7C,GAAG,CAAC,YAAY,KAAK,IAAI,EACzB,CAAC;QACD,wBAAwB,CACtB,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CACxD,CAAC;IACJ,CAAC;IAED,IAAI,SAA8C,CAAC;IACnD,IACE,GAAG,CAAC,MAAM;QACV,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ;QAC9B,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAC1B,CAAC;QACD,SAAS,GAAG,GAAG,CAAC,MAAiC,CAAC;IACpD,CAAC;SAAM,IAAI,SAAS,IAAI,GAAG,IAAI,cAAc,IAAI,GAAG,EAAE,CAAC;QACrD,wBAAwB,CACtB,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,gBAAgB,CAC/D,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,SAAS,GAAG,GAAG,CAAC;IAClB,CAAC;IAED,MAAM,QAAQ,GAAG,mBAAmB,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;IACjE,IAAI,qBAAqB,CAAC,QAAQ,EAAE,eAAe,CAAC,EAAE,CAAC;QACrD,wBAAwB,CAAC,yBAAyB,EAAE;YAClD,MAAM,EAAE,QAAQ;SACjB,CAAC,CAAC;IACL,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,QAAmB,EAAE,CAAC;AACzC,CAAC;AAED,SAAgB,wBAAwB,CAAC,KAAuB;IAC9D,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QAC1C,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IACE,OAAO,KAAK,KAAK,QAAQ;QACzB,OAAO,KAAK,KAAK,SAAS;QAC1B,OAAO,KAAK,KAAK,QAAQ,EACzB,CAAC;QACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IACD,IAAI,KAAK,YAAY,IAAI,EAAE,CAAC;QAC1B,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC;IAC7B,CAAC;IACD,IAAI,CAAC;QACH,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAgB,wBAAwB,CACtC,MAA4B;IAE5B,MAAM,GAAG,GAA4B,EAAE,CAAC;IACxC,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;QACxC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;IACxB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,2FAA2F;AAC3F,SAAgB,mBAAmB,CACjC,GAA+C,EAC/C,MAA4B;IAE5B,MAAM,GAAG,GAA4B,EAAE,CAAC;IACxC,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACjE,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QACpC,OAAO,GAAG,CAAC;IACb,CAAC;IACD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,SAAS;QAChC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,MAAM,SAAS,GAAG,IAAA,oDAA2B,EAAC,KAAK,CAAC,CAAC;YACrD,IAAI,SAAS,KAAK,SAAS;gBAAE,SAAS;YACtC,GAAG,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;YACrB,SAAS;QACX,CAAC;QACD,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACnB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Application-supplied Brain settings (code layer, not .env).
3
+ * Secrets (OPENAI_API_KEY / ANTHROPIC_API_KEY / GOOGLE_API_KEY / XAI_API_KEY) stay in the environment.
4
+ */
5
+ export declare const STUDIO_BRAIN_CONFIG: unique symbol;
6
+ export interface StudioBrainConfig {
7
+ /**
8
+ * Adapter-specific cheap whitelist model id.
9
+ * Omit to use the selected adapter's default (e.g. gpt-4.1-nano, claude-haiku-4-5-…).
10
+ */
11
+ model?: string;
12
+ /** Scan floor (0..1). Below for all candidates → unknown transition. Default 0.4. */
13
+ confidenceThreshold?: number;
14
+ }
15
+ export type ResolvedStudioBrainConfig = {
16
+ model?: string;
17
+ confidenceThreshold: number;
18
+ };
19
+ export declare function resolveStudioBrainConfig(input?: StudioBrainConfig): ResolvedStudioBrainConfig;
20
+ //# sourceMappingURL=brain-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brain-config.d.ts","sourceRoot":"","sources":["../../src/brain/brain-config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,eAAO,MAAM,mBAAmB,eAAgC,CAAC;AAEjE,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qFAAqF;IACrF,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,MAAM,yBAAyB,GAAG;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mBAAmB,EAAE,MAAM,CAAC;CAC7B,CAAC;AAEF,wBAAgB,wBAAwB,CACtC,KAAK,CAAC,EAAE,iBAAiB,GACxB,yBAAyB,CAS3B"}
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ /**
3
+ * Application-supplied Brain settings (code layer, not .env).
4
+ * Secrets (OPENAI_API_KEY / ANTHROPIC_API_KEY / GOOGLE_API_KEY / XAI_API_KEY) stay in the environment.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.STUDIO_BRAIN_CONFIG = void 0;
8
+ exports.resolveStudioBrainConfig = resolveStudioBrainConfig;
9
+ const brain_ranking_1 = require("./brain-ranking");
10
+ exports.STUDIO_BRAIN_CONFIG = Symbol('STUDIO_BRAIN_CONFIG');
11
+ function resolveStudioBrainConfig(input) {
12
+ return {
13
+ model: input?.model?.trim() || undefined,
14
+ confidenceThreshold: typeof input?.confidenceThreshold === 'number' &&
15
+ Number.isFinite(input.confidenceThreshold)
16
+ ? input.confidenceThreshold
17
+ : brain_ranking_1.DEFAULT_BRAIN_CONFIDENCE_THRESHOLD,
18
+ };
19
+ }
20
+ //# sourceMappingURL=brain-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brain-config.js","sourceRoot":"","sources":["../../src/brain/brain-config.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAqBH,4DAWC;AA9BD,mDAAqE;AAExD,QAAA,mBAAmB,GAAG,MAAM,CAAC,qBAAqB,CAAC,CAAC;AAiBjE,SAAgB,wBAAwB,CACtC,KAAyB;IAEzB,OAAO;QACL,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,SAAS;QACxC,mBAAmB,EACjB,OAAO,KAAK,EAAE,mBAAmB,KAAK,QAAQ;YAC9C,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,mBAAmB,CAAC;YACxC,CAAC,CAAC,KAAK,CAAC,mBAAmB;YAC3B,CAAC,CAAC,kDAAkC;KACzC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Brain judge — LLM-as-a-judge.
3
+ * Rare on the live call path; the primary consumer is eval tests.
4
+ *
5
+ * Given stringifiable context + a plain-language goal + success/failure
6
+ * criteria, adapters return pass/fail, reasoning bullets, and confidence.
7
+ */
8
+ /** Default: no confidence floor — callers opt in via options.confidenceThreshold. */
9
+ export declare const DEFAULT_BRAIN_JUDGE_CONFIDENCE_THRESHOLD = 0;
10
+ /** Confidence as a fixed 6-decimal string, e.g. "0.850000". Always matches /^\d\.\d{6}$/. */
11
+ export declare const CONFIDENCE_6_PATTERN: RegExp;
12
+ export type Confidence6 = string;
13
+ export interface BrainJudgeOptions {
14
+ /**
15
+ * 0..1. Does not change `passed` (that is the model judgment).
16
+ * Sets `belowThreshold` when formatted confidence is below this floor.
17
+ * Trusted pass = `passed && !belowThreshold`.
18
+ */
19
+ confidenceThreshold?: number;
20
+ /**
21
+ * OpenAI model id for this call (studio-chatgpt cheap whitelist).
22
+ * Ignored by mock. Falls back to VapiStudioModule brain.model.
23
+ */
24
+ model?: string;
25
+ }
26
+ export interface BrainJudgeRequest<TContext = unknown> {
27
+ /** Transcript, memory snapshot, or any JSON-serializable eval fixture. */
28
+ context: TContext;
29
+ /** What “good” means, in plain language. */
30
+ goals: string;
31
+ /** Criteria that must hold for a pass. */
32
+ successConditions: string[];
33
+ /** Criteria that force a fail if observed. */
34
+ failureConditions: string[];
35
+ options?: BrainJudgeOptions;
36
+ /** Optional correlation for usage / console (filled by NodeContext). */
37
+ meta?: {
38
+ providerCallId?: string;
39
+ conversationId?: string;
40
+ };
41
+ }
42
+ export interface BrainJudgeResult {
43
+ /** Model pass/fail. Threshold is not mixed in; see `belowThreshold`. */
44
+ passed: boolean;
45
+ /** Short reasons for why it passed or failed. */
46
+ reasoning: string[];
47
+ /** Certainty in [0,1], always 6 decimal places: "0.850000". */
48
+ confidence: Confidence6;
49
+ /** True when confidence is below options.confidenceThreshold. */
50
+ belowThreshold: boolean;
51
+ }
52
+ export declare function resolveJudgeConfidenceThreshold(value: number | undefined): number;
53
+ export declare function clampConfidence(value: unknown): number;
54
+ /** Clamp to [0, 1] and format as `\d.\d\d\d\d\d\d`. */
55
+ export declare function formatConfidence6(value: unknown): Confidence6;
56
+ export declare function isConfidence6(value: string): value is Confidence6;
57
+ export declare function normalizeReasoning(raw: unknown): string[];
58
+ /**
59
+ * JSON-stringify objects; pass strings through.
60
+ * Prefer this over clarifiableInputToString so `{foo:1}` is not `[object Object]`.
61
+ */
62
+ export declare function judgeContextToString(context: unknown): string;
63
+ /**
64
+ * Normalize raw Brain JSON into a judge result.
65
+ * `passed` is the model judgment; threshold only sets `belowThreshold`.
66
+ */
67
+ export declare function normalizeJudgeResult(raw: unknown, options?: BrainJudgeOptions): BrainJudgeResult;
68
+ //# sourceMappingURL=brain-judge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brain-judge.d.ts","sourceRoot":"","sources":["../../src/brain/brain-judge.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,qFAAqF;AACrF,eAAO,MAAM,wCAAwC,IAAI,CAAC;AAE1D,6FAA6F;AAC7F,eAAO,MAAM,oBAAoB,QAAgB,CAAC;AAElD,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC;AAEjC,MAAM,WAAW,iBAAiB;IAChC;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB,CAAC,QAAQ,GAAG,OAAO;IACnD,0EAA0E;IAC1E,OAAO,EAAE,QAAQ,CAAC;IAClB,4CAA4C;IAC5C,KAAK,EAAE,MAAM,CAAC;IACd,0CAA0C;IAC1C,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,8CAA8C;IAC9C,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAC5B,wEAAwE;IACxE,IAAI,CAAC,EAAE;QACL,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB,CAAC;CACH;AAED,MAAM,WAAW,gBAAgB;IAC/B,wEAAwE;IACxE,MAAM,EAAE,OAAO,CAAC;IAChB,iDAAiD;IACjD,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,+DAA+D;IAC/D,UAAU,EAAE,WAAW,CAAC;IACxB,iEAAiE;IACjE,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,wBAAgB,+BAA+B,CAC7C,KAAK,EAAE,MAAM,GAAG,SAAS,GACxB,MAAM,CAKR;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAItD;AAED,uDAAuD;AACvD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAE7D;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,WAAW,CAEjE;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,EAAE,CAQzD;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAsB7D;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,OAAO,EACZ,OAAO,CAAC,EAAE,iBAAiB,GAC1B,gBAAgB,CAmClB"}