@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,79 @@
1
+ # Data model
2
+
3
+ Postgres persistence + in-memory runtime for Vapi Studio.
4
+
5
+ ## Postgres tables
6
+
7
+ ### `projects`
8
+
9
+ | Column | Purpose |
10
+ | --- | --- |
11
+ | `id` | Internal UUID PK for DB FKs (not a public URL segment) |
12
+ | `slug` | Stable short name (unique), e.g. `my-voice-app` |
13
+ | `name` | Display name |
14
+ | `created_at` | Audit |
15
+
16
+ Apps keep **name/slug** in `config/project.identity.json` (synced from `.env`) and upsert a local `projects` row on boot. Vapi routes are host-scoped (`/vapi/...`) — each starter fork has its own deploy URL.
17
+
18
+ ### `conversations`
19
+
20
+ | Column | Purpose |
21
+ | --- | --- |
22
+ | `id` | Framework conversation UUID |
23
+ | `project_id` | Owning project (internal FK) |
24
+ | `status` | `ACTIVE`, `ENDED`, … |
25
+ | `metadata` | Channel, module, provider ids |
26
+ | `runtime_state` | Checkpoint JSON for crash recovery |
27
+ | `final_state` | Snapshot at end |
28
+
29
+ Unique on `(project_id, provider_call_id)`.
30
+
31
+ ### `conversation_events`
32
+
33
+ Not a Studio TypeORM table. Studio is event-driven: it emits Node events
34
+ (`onStudioEvent` / Nest `eventListeners`). Durable history — if any — is
35
+ application-owned infrastructure you attach to those hooks. See
36
+ [Extending events](../guides/extending-events.md).
37
+
38
+ Studio TypeORM entities: `projects`, `conversations`, `provider_ingress` only.
39
+
40
+ ### `provider_ingress`
41
+
42
+ Raw webhook and Custom LLM request bodies for operator inspection. Includes `project_id` when the request hit a project-scoped URL.
43
+
44
+ ### App tables
45
+
46
+ Applications may add their own TypeORM entities (e.g. caller profiles). Those belong in the **app repo**, not the framework.
47
+
48
+ ## In-memory (per active call)
49
+
50
+ Not Postgres source of truth:
51
+
52
+ - Portal counters (`madStrikes`, still-there attempts)
53
+ - Listen registration state
54
+ - `CallTurnQueue` (utterance coalescing)
55
+ - Pending form exposes (until submit/timeout)
56
+
57
+ ## Identity model
58
+
59
+ | Id | Role |
60
+ | --- | --- |
61
+ | `projectId` | Public ingress — URL path; registered in `projects` |
62
+ | `conversationId` | Canonical — generated by framework |
63
+ | Vapi `call.id` | Provider correlation only |
64
+ | `callerId` | App variable — cookie UUID (web) or ANI (phone) |
65
+
66
+ Vapi `assistantId` is **not** used for project routing (forensics only).
67
+
68
+ ## Cross-call resume (post-MVP)
69
+
70
+ `ConversationResumeService` — opt-in; same `callerId` within ~10 minutes may clone prior ACTIVE/ENDED conversation into a new call after caller confirmation.
71
+
72
+ ## Crash recovery (post-MVP)
73
+
74
+ Opt-in: `restoreAllActive()` reloads conversations with `runtime_state` into the registry on boot. Not distributed failover.
75
+
76
+ ## Related
77
+
78
+ - [Events & logging](./events-and-logging.md)
79
+ - [Runtime API](./runtime-api.md) — persistence section
@@ -0,0 +1,60 @@
1
+ # Environment variables
2
+
3
+ Variables the **framework** reads at runtime. Application-specific vars (database URL, `PUBLIC_BASE_URL`, Vapi outbound ids) belong in **your app** — start from the package [`.env.example`](../../.env.example) (presets for Brain providers, Twilio, Vapi tools, optional event broker).
4
+
5
+ App identity: **`config/project.identity.json`** (`slug` / `name`). App boot upserts a local `projects` row for DB FKs. Vapi ingress is host-scoped (`/vapi/...`) — each fork has its own `PUBLIC_BASE_URL` / port.
6
+
7
+ **Brain adapter class** is selected in `VapiStudioModule.forRoot({ brainAdapter })` (or your app’s `brain.config.ts`). Secrets stay in env:
8
+
9
+ | Provider | Adapter | Env |
10
+ | --- | --- | --- |
11
+ | ChatGPT | `ChatGptBrainAdapter` | `OPENAI_API_KEY` |
12
+ | Claude | `ClaudeBrainAdapter` | `ANTHROPIC_API_KEY` |
13
+ | Gemini | `GeminiBrainAdapter` | `GOOGLE_API_KEY` (alias `GEMINI_API_KEY`) |
14
+ | Grok | `GrokBrainAdapter` | `XAI_API_KEY` |
15
+ | Mock | `MockBrainAdapter` / `Mock*BrainAdapter` | none |
16
+
17
+ **Brain model and confidence** are set in `VapiStudioModule.forRoot({ brain })` — not env.
18
+
19
+ | Variable | Default | Purpose |
20
+ | --- | --- | --- |
21
+ | `OPENAI_API_KEY` | — | ChatGPT Brain adapter |
22
+ | `ANTHROPIC_API_KEY` | — | Claude Brain adapter |
23
+ | `GOOGLE_API_KEY` | — | Gemini Brain adapter (alias: `GEMINI_API_KEY`) |
24
+ | `XAI_API_KEY` | — | Grok Brain adapter |
25
+ | `STUDIO_CONSOLE_DEBUG` | on | Pretty console forensics |
26
+ | `STUDIO_CONSOLE_DEBUG_ALL` | off | Verbose console |
27
+ | `STUDIO_FILE_LOG` | on | Daily log files |
28
+ | `LOG_DIR` | `logs` | Log directory (your app chooses path) |
29
+ | `LOG_DAYS` | `14` | Retention |
30
+ | `STUDIO_FORM_ACK_MS` | `15000` | Form deliver ACK window |
31
+ | `TWILIO_ACCOUNT_SID` | — | Twilio SMS form dispose (with `TwilioSmsFormDisposeAdapter`) |
32
+ | `TWILIO_AUTH_TOKEN` | — | Twilio auth token |
33
+ | `TWILIO_FROM_NUMBER` | — | E.164 from-number (or use messaging service sid) |
34
+ | `TWILIO_MESSAGING_SERVICE_SID` | — | Alternative to `TWILIO_FROM_NUMBER` |
35
+ | `TWILIO_SMS_DRY_RUN` | on | Prepare mode — emit `OUTBOUND_NOTIFICATION` dry-run; no Twilio API |
36
+ | `PUBLIC_BASE_URL` | — | App HTTPS origin; Twilio SMS dispose uses `{PUBLIC_BASE_URL}/forms/{exposeId}` when `disposeContext.formUrl` is omitted |
37
+ | `VAPI_END_CALL_TOOL_NAME` | `end_call_tool` | End-call tool name (snake_case in `.env.example`) |
38
+ | `VAPI_TRANSFER_CALL_TOOL_NAME` | `transfer_call` | Transfer tool name (`.env.example`; live apps may still use Vapi’s `transferCall`) |
39
+ | `VAPI_HANDOFF_TOOL_NAME` | `handoff` | Squad handoff tool |
40
+ | `VAPI_TRANSFER_DESTINATION` | — | E.164 transfer target |
41
+ | `VAPI_DASHBOARD_CALL_URL` | `https://dashboard.vapi.ai/call/{callId}` | Debug UI link to Vapi call (`{callId}` = `provider_call_id`) |
42
+ | `CONFIG_DIR` | app `config/` | Flow + `workflow.yaml` root |
43
+
44
+ ### App-owned (documented in `.env.example`, not read by the framework core)
45
+
46
+ | Variable | Purpose |
47
+ | --- | --- |
48
+ | `DATABASE_URL` | App Postgres |
49
+ | `PUBLIC_BASE_URL` / `PORT` | Public host + listen port (ngrok) |
50
+ | `PROJECT_NAME` / `PROJECT_SLUG` | Human identity → `project.identity.json` |
51
+ | `VAPI_API_KEY` / `VAPI_PHONE_NUMBER_ID` / `POC_ASSISTANT_ID` | Outbound dial / telephony — **required** empty slots in app `.env.example` (client must have Vapi access; **Vapi is paid**) |
52
+ | `TWILIO_ACCOUNT_SID` / `TWILIO_AUTH_TOKEN` / `TWILIO_FROM_NUMBER` | **Twilio only for now**; same account that owns the Vapi-imported FROM number. Trust Hub must allow +1; keep ~$30 balance (auto-recharge near $10 recommended). Other carriers later. |
53
+ | `STUDIO_EVENTS_REDIS_URL` / `STUDIO_EVENTS_REDIS_STREAM` | Optional event broker for `onStudioEvent` fan-out |
54
+ | `EVENT_STORE_DATABASE_URL` | Optional durable store for your event consumer |
55
+
56
+ Event export / remote sinks are application-owned — not framework wiring.
57
+ See [Extending events](../guides/extending-events.md) · [Events & logging](./events-and-logging.md).
58
+
59
+ - [Runtime API](./runtime-api.md)
60
+ - [Security](./security.md)
@@ -0,0 +1,137 @@
1
+ # Events & logging
2
+
3
+ Vapi Studio is an **event-driven** runtime. Structured events explain every turn
4
+ and are the extension surface for custom logic — metrics, exporters, CRM sync,
5
+ or any tool that listens on the same bus.
6
+
7
+ Call forensics: every turn should be explainable from daily logs + structured
8
+ events (and any durable sink your app attaches).
9
+
10
+ **How to attach your logic:** [Extending events](../guides/extending-events.md)
11
+ (Redis / Nest / custom types). Env presets: [`.env.example`](../../.env.example).
12
+
13
+ ## Event-driven hooks (OSS is open)
14
+
15
+ | Hook | When to use |
16
+ | --- | --- |
17
+ | `onStudioEvent(handler)` | Process-wide subscribe — any sink you own |
18
+ | Nest `eventListeners` | DI / Nest services implementing `StudioEventListener` |
19
+ | `EventService.persist` / `emit` | Emit framework or **app-defined** event types |
20
+ | `EventService.persistAnalyticsTag` | Funnel milestone → type `ANALYTICS_TAG` |
21
+
22
+ The framework does **not** ship a durable event store or dashboard. That is
23
+ intentional: attach your own listeners (same ownership model as Postgres).
24
+ Guidify AI companion tools integrate through these same hooks.
25
+
26
+ ```ts
27
+ import { onStudioEvent, STUDIO_EVENTS } from '@guidify-ai/vapi-studio';
28
+
29
+ onStudioEvent((event) => {
30
+ /* metrics, Redis, warehouse, … */
31
+ });
32
+
33
+ VapiStudioModule.forRoot({
34
+ eventListeners: [MyNestListener],
35
+ });
36
+ ```
37
+
38
+ ## EventService
39
+
40
+ | Method | Hits bus? | Purpose |
41
+ | --- | --- | --- |
42
+ | `emit({ type, conversationId, payload })` | **Yes** | Console + `onStudioEvent` + Nest listeners |
43
+ | `persist(conversationId, type, payload)` | **Yes** | Conversation-scoped `emit` (not an automatic Postgres write) |
44
+ | `persistAnalyticsTag(conversationId, tag, payload?)` | **Yes** | `ANALYTICS_TAG` with `payload.tag` |
45
+ | `log(...)` | **No** | Structured console / daily file only |
46
+
47
+ ## Event catalog
48
+
49
+ Types below appear on the bus when emitted via `emit` / `persist` /
50
+ `persistAnalyticsTag` (or framework helpers that call them). Filter with
51
+ `event.type`. App code may emit additional string types.
52
+
53
+ ### Routing & flow
54
+
55
+ | Event | Answers |
56
+ | --- | --- |
57
+ | `ROUTE_DECISION` | Why this node ran (`resolvedVia`, intention, boosts) |
58
+ | `ROUTE_FAILED` | `before()` refusal, catch, unknown transition |
59
+ | `ROUTE_FALLBACK_UNKNOWN` | Fell through to unknown handling |
60
+ | `UNKNOWN_ORIGIN_CONSUME` | Unknown portal accepted restatement vs origin listen |
61
+ | `CONDITION_TRANSITION` | YAML/code force jump |
62
+ | `CONDITION_TRANSITION_MISSED` | Condition jump did not apply |
63
+ | `FLOW_CONTINUE` | `continueTo` target + reason |
64
+ | `WORKFLOW_HANDOFF` | Squad module switch |
65
+
66
+ ### Conversation lifecycle
67
+
68
+ | Event | Answers |
69
+ | --- | --- |
70
+ | `BOOTSTRAP` / `FINALIZE` | Runtime create / tear-down |
71
+ | `CONVERSATION_BEFORE_EACH` / `CONVERSATION_AFTER_EACH` | Entry hooks |
72
+ | `CONVERSATION_ENTRY_POINT` | Entry seeding |
73
+ | `CONVERSATION_RESUMED` | Resume after pause / form |
74
+ | `CONVERSATION_LIMIT_EXCEEDED` | Turn or wall-clock cap → fail-closed `endCall` |
75
+ | `DISASTER_RESTORED` | Disaster recovery restore |
76
+
77
+ ### Brain
78
+
79
+ | Event | Answers |
80
+ | --- | --- |
81
+ | `BRAIN_SCAN_START` / `BRAIN_SCAN_RESULT` | Intention / extract scan |
82
+ | `BRAIN_JUDGE_START` / `BRAIN_JUDGE_RESULT` | Judge pass |
83
+ | `BRAIN_CLARIFY_START` / `BRAIN_CLARIFY_RESULT` | Clarify pass |
84
+ | `BRAIN_USAGE` / `BRAIN_COST_SUMMARY` | Tokens / cost (live adapters) |
85
+ | `BRAIN_SERVICE` | Adapter selection / errors |
86
+
87
+ ### Forms & outbound
88
+
89
+ | Event | Answers |
90
+ | --- | --- |
91
+ | `FORM_EXPOSE` / `FORM_SENDOUT` / `FORM_RESEND` / `FORM_RESENT` | Form lane |
92
+ | `FORM_LINK_READY` / `FORM_DELIVERED` / `FORM_DELIVER_TIMEOUT` | Delivery |
93
+ | `FORM_SUBMITTED` / `FORM_FILLOUT_TIMEOUT` | User fill |
94
+ | `FORM_CHANNEL_UNAVAILABLE` / `FORM_DISPOSE_ADAPTER` | Channel wiring |
95
+ | `OUTBOUND_NOTIFICATION` | SMS (Twilio) / future channels — `channel`, `status`, `to`, `sid` |
96
+ | `OUTBOUND_NOTIFICATION_ERROR` | Outbound send failed |
97
+
98
+ Typed aliases: `STUDIO_EVENTS.OUTBOUND_NOTIFICATION` (+ `_ERROR`).
99
+
100
+ ### Integrations & tasks
101
+
102
+ | Event | Constant | Answers |
103
+ | --- | --- | --- |
104
+ | `INTEGRATION_REQUEST` / `RESPONSE` / `ERROR` | `STUDIO_EVENTS.INTEGRATION_*` | Outbound HTTP + JWT |
105
+ | `TASK_ENQUEUED` / `STARTED` / `COMPLETED` / `FAILED` / `DEDUPED` / `AWAITED` | `STUDIO_EVENTS.TASK_*` | Studio Task Queue |
106
+
107
+ ### Analytics
108
+
109
+ | Event | Answers |
110
+ | --- | --- |
111
+ | `ANALYTICS_TAG` | Funnel milestone — **`payload.tag` only** (never `payload.funnels`) |
112
+
113
+ ### Ingress / speech (often app-emitted or adapter path)
114
+
115
+ | Event | Answers |
116
+ | --- | --- |
117
+ | `WEBHOOK_RECEIVED` / `ASSISTANT_REQUEST` | Vapi webhook |
118
+ | `CUSTOM_LLM_*` | Custom LLM turn queue / abort / errors |
119
+ | `SAY` | Spoken text |
120
+ | `EVENT_BUS_ERROR` / `EVENT_LISTENER_ERROR` | Listener failures |
121
+
122
+ Full doctrine: [Debugging and observability](../best-practices/debugging-and-observability.md).
123
+
124
+ ## Console & daily files
125
+
126
+ | Env | Effect |
127
+ | --- | --- |
128
+ | `STUDIO_CONSOLE_DEBUG` | Pretty colored turn forensics |
129
+ | `STUDIO_CONSOLE_DEBUG_ALL` | Verbose (all event types) |
130
+ | `LOG_DIR` / `LOG_DAYS` / `STUDIO_FILE_LOG` | Daily `logs/dailyYYYYMMDD.log` |
131
+
132
+ ## Broker + database (app-owned)
133
+
134
+ Treat Redis (or another broker) like Postgres: optional compose service, env URL,
135
+ your consumer. Framework stays in-process. See
136
+ [Extending events](../guides/extending-events.md) and
137
+ [`docker-compose.events.stub.yaml`](../guides/docker-compose.events.stub.yaml).
@@ -0,0 +1,79 @@
1
+ # Flow schema
2
+
3
+ `config/flow.yaml` — conversation graph for a single assistant (or per-module file in Squad mode).
4
+
5
+ ## Top-level shape
6
+
7
+ ```yaml
8
+ version: 1
9
+ flow:
10
+ start: acknowledge
11
+ nodes:
12
+ acknowledge:
13
+ class: AcknowledgeNode
14
+ intentions:
15
+ - isRequestedRoofEstimate
16
+ goodbye:
17
+ class: GoodbyeNode
18
+ portal: true
19
+ priority: 90
20
+ terminal: true
21
+ intentions:
22
+ - studio.isGoodbye
23
+ transitions:
24
+ - id: needFormSendConsent
25
+ from: [identityCollect, routerTriage]
26
+ to: askFormSendConsent
27
+ when: memory.formSendConsent == undefined
28
+ force: true
29
+ reason: need_sms_form_consent
30
+ ```
31
+
32
+ ## Node fields
33
+
34
+ | Field | Purpose |
35
+ | --- | --- |
36
+ | `class` | Nest provider class name (must match `VapiStudioModule` registration) |
37
+ | `intentions` | String names for match routing on this node |
38
+ | `portal` | `true` — globally eligible interrupt (goodbye, transfer, still-there) |
39
+ | `priority` | Portal walk order (higher first) |
40
+ | `terminal` | Node may end conversation |
41
+
42
+ ## Transitions
43
+
44
+ Condition edges evaluated before listen/Brain:
45
+
46
+ | Field | Purpose |
47
+ | --- | --- |
48
+ | `from` | Source node ids (list) |
49
+ | `to` | Target node id |
50
+ | `when` | Memory expression (`memory.field == value`, `&&`, `!=`) |
51
+ | `force` | `true` — preempt current node (dedicated sub-flow) |
52
+ | `reason` | Forensics string in `CONDITION_TRANSITION` |
53
+
54
+ Code intentions (`phase: 'force'`) run in the same cascade tier.
55
+
56
+ ## Intention names
57
+
58
+ - **Framework:** `studio.isGoodbye`, `studio.isPositive`, `studio.isStillThere`, …
59
+ - **App:** `isCollectedFirstName`, `isAcceptedAppointment`, …
60
+
61
+ Naming rules: [Node conventions](../guides/node-conventions.md)
62
+
63
+ ## `continueTo` vs YAML
64
+
65
+ - **`output.continueTo({ nodeId })`** — imperative lane jump (same flow file)
66
+ - **`transitions`** — declarative gates visible in Flow Studio graph
67
+ - **`handoff`** — Squad module switch (`workflow.yaml`)
68
+
69
+ ## `workflow.yaml` (optional)
70
+
71
+ Multi-module Squad config — see [Workflow & Squad](../guide/workflow-squad.md).
72
+
73
+ ## Historical contract
74
+
75
+ Compare with your application's `config/flow.yaml` in its own repository.
76
+
77
+ ## Related
78
+
79
+ - [Concepts](../guide/concepts.md)