@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,44 @@
1
+ "use strict";
2
+ /**
3
+ * Hard caps on conversation length — fail-closed goodbye + endCall.
4
+ * Every call must have finite turn and wall-clock bounds.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.DEFAULT_CONVERSATION_LIMIT_MESSAGE = exports.HARD_MAX_CONVERSATION_DURATION_MS = exports.HARD_MAX_CONVERSATION_TURNS = exports.DEFAULT_MAX_CONVERSATION_DURATION_MS = exports.DEFAULT_MAX_CONVERSATION_TURNS = exports.STUDIO_CONVERSATION_LIMITS = void 0;
8
+ exports.resolveConversationLimits = resolveConversationLimits;
9
+ exports.evaluateConversationLimits = evaluateConversationLimits;
10
+ exports.STUDIO_CONVERSATION_LIMITS = Symbol('STUDIO_CONVERSATION_LIMITS');
11
+ /** Default: 40 Supervisor turns (opening + user/tool/force/entry-speak). */
12
+ exports.DEFAULT_MAX_CONVERSATION_TURNS = 40;
13
+ /** Default: 20 minutes from runtime `createdAt`. */
14
+ exports.DEFAULT_MAX_CONVERSATION_DURATION_MS = 20 * 60 * 1000;
15
+ /** Soft ceiling — apps may raise, not beyond. */
16
+ exports.HARD_MAX_CONVERSATION_TURNS = 150;
17
+ /** Soft ceiling — apps may raise, not beyond (60 minutes). */
18
+ exports.HARD_MAX_CONVERSATION_DURATION_MS = 60 * 60 * 1000;
19
+ exports.DEFAULT_CONVERSATION_LIMIT_MESSAGE = "We've been talking for a while, so I'm going to end this call now. Please call back if you still need help.";
20
+ function resolveConversationLimits(input) {
21
+ const maxTurns = clampInt(input?.maxTurns, exports.DEFAULT_MAX_CONVERSATION_TURNS, 1, exports.HARD_MAX_CONVERSATION_TURNS);
22
+ const maxDurationMs = clampInt(input?.maxDurationMs, exports.DEFAULT_MAX_CONVERSATION_DURATION_MS, 1_000, exports.HARD_MAX_CONVERSATION_DURATION_MS);
23
+ const endMessage = typeof input?.endMessage === 'string' && input.endMessage.trim()
24
+ ? input.endMessage.trim()
25
+ : exports.DEFAULT_CONVERSATION_LIMIT_MESSAGE;
26
+ return { maxTurns, maxDurationMs, endMessage };
27
+ }
28
+ function evaluateConversationLimits(input) {
29
+ const now = input.now ?? new Date();
30
+ const elapsedMs = Math.max(0, now.getTime() - input.createdAt.getTime());
31
+ if (input.turnNumber > input.limits.maxTurns) {
32
+ return { exceeded: true, reason: 'max_turns', elapsedMs };
33
+ }
34
+ if (elapsedMs > input.limits.maxDurationMs) {
35
+ return { exceeded: true, reason: 'max_duration', elapsedMs };
36
+ }
37
+ return { exceeded: false, elapsedMs };
38
+ }
39
+ function clampInt(raw, fallback, min, max) {
40
+ if (typeof raw !== 'number' || !Number.isFinite(raw))
41
+ return fallback;
42
+ return Math.min(max, Math.max(min, Math.floor(raw)));
43
+ }
44
+ //# sourceMappingURL=conversation-limits.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversation-limits.js","sourceRoot":"","sources":["../../src/conversation/conversation-limits.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AA0CH,8DAoBC;AAED,gEAkBC;AAhFY,QAAA,0BAA0B,GAAG,MAAM,CAAC,4BAA4B,CAAC,CAAC;AAE/E,4EAA4E;AAC/D,QAAA,8BAA8B,GAAG,EAAE,CAAC;AAEjD,oDAAoD;AACvC,QAAA,oCAAoC,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAEnE,iDAAiD;AACpC,QAAA,2BAA2B,GAAG,GAAG,CAAC;AAE/C,8DAA8D;AACjD,QAAA,iCAAiC,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAEnD,QAAA,kCAAkC,GAC7C,6GAA6G,CAAC;AAyBhH,SAAgB,yBAAyB,CACvC,KAAgC;IAEhC,MAAM,QAAQ,GAAG,QAAQ,CACvB,KAAK,EAAE,QAAQ,EACf,sCAA8B,EAC9B,CAAC,EACD,mCAA2B,CAC5B,CAAC;IACF,MAAM,aAAa,GAAG,QAAQ,CAC5B,KAAK,EAAE,aAAa,EACpB,4CAAoC,EACpC,KAAK,EACL,yCAAiC,CAClC,CAAC;IACF,MAAM,UAAU,GACd,OAAO,KAAK,EAAE,UAAU,KAAK,QAAQ,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE;QAC9D,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE;QACzB,CAAC,CAAC,0CAAkC,CAAC;IACzC,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU,EAAE,CAAC;AACjD,CAAC;AAED,SAAgB,0BAA0B,CAAC,KAK1C;IAIC,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC;IACpC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC;IACzE,IAAI,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QAC7C,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC;IAC5D,CAAC;IACD,IAAI,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;QAC3C,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,CAAC;IAC/D,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AACxC,CAAC;AAED,SAAS,QAAQ,CACf,GAAuB,EACvB,QAAgB,EAChB,GAAW,EACX,GAAW;IAEX,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,QAAQ,CAAC;IACtE,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACvD,CAAC"}
@@ -0,0 +1,39 @@
1
+ import type { SupervisedConversation } from './supervised-conversation';
2
+ import { EventService } from '../events/event.service';
3
+ import { ConversationRepository, type ResumableConversation } from '../persistence/conversation.repository';
4
+ import { SupervisedConversationRegistry } from './supervised-conversation.registry';
5
+ import { CallTurnQueueRegistry } from './call-turn-queue';
6
+ import { BrainUsageTracker } from '../brain/brain-usage.tracker';
7
+ /** Default window for “continue where you left off?” */
8
+ export declare const DEFAULT_RESUME_WITHIN_MS: number;
9
+ export interface ResumePeekResult {
10
+ prior: ResumableConversation;
11
+ summary: {
12
+ activeModuleId: string | null;
13
+ currentNodeId: string | null;
14
+ firstName: string | null;
15
+ };
16
+ }
17
+ /**
18
+ * Cross-call resume: find a recent Conversation for the same caller and
19
+ * clone its durable state into the **current** call (new providerCallId).
20
+ *
21
+ * Avoids injecting ConversationBootstrapService (Entry↔Bootstrap cycle).
22
+ */
23
+ export declare class ConversationResumeService {
24
+ private readonly conversations;
25
+ private readonly events;
26
+ private readonly registry;
27
+ private readonly turnQueues;
28
+ private readonly brainUsage;
29
+ constructor(conversations: ConversationRepository, events: EventService, registry: SupervisedConversationRegistry, turnQueues: CallTurnQueueRegistry, brainUsage: BrainUsageTracker);
30
+ peek(input: {
31
+ callerId: string;
32
+ excludeConversationId: string;
33
+ withinMs?: number;
34
+ }): Promise<ResumePeekResult | null>;
35
+ applyCloneByConversationId(runtime: SupervisedConversation, priorConversationId: string): Promise<boolean>;
36
+ applyClone(runtime: SupervisedConversation, prior: ResumableConversation): Promise<void>;
37
+ private sealAbandonedPrior;
38
+ }
39
+ //# sourceMappingURL=conversation-resume.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversation-resume.service.d.ts","sourceRoot":"","sources":["../../src/conversation/conversation-resume.service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAKxE,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EACL,sBAAsB,EAEtB,KAAK,qBAAqB,EAC3B,MAAM,wCAAwC,CAAC;AAChD,OAAO,EAAE,8BAA8B,EAAE,MAAM,oCAAoC,CAAC;AACpF,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAEjE,wDAAwD;AACxD,eAAO,MAAM,wBAAwB,QAAiB,CAAC;AAcvD,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,qBAAqB,CAAC;IAC7B,OAAO,EAAE;QACP,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;QAC9B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;QAC7B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;KAC1B,CAAC;CACH;AAED;;;;;GAKG;AACH,qBACa,yBAAyB;IAElC,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,UAAU;gBAJV,aAAa,EAAE,sBAAsB,EACrC,MAAM,EAAE,YAAY,EACpB,QAAQ,EAAE,8BAA8B,EACxC,UAAU,EAAE,qBAAqB,EACjC,UAAU,EAAE,iBAAiB;IAGnC,IAAI,CAAC,KAAK,EAAE;QACvB,QAAQ,EAAE,MAAM,CAAC;QACjB,qBAAqB,EAAE,MAAM,CAAC;QAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IA6BvB,0BAA0B,CACrC,OAAO,EAAE,sBAAsB,EAC/B,mBAAmB,EAAE,MAAM,GAC1B,OAAO,CAAC,OAAO,CAAC;IAkBN,UAAU,CACrB,OAAO,EAAE,sBAAsB,EAC/B,KAAK,EAAE,qBAAqB,GAC3B,OAAO,CAAC,IAAI,CAAC;YA4IF,kBAAkB;CAuBjC"}
@@ -0,0 +1,234 @@
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
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.ConversationResumeService = exports.DEFAULT_RESUME_WITHIN_MS = void 0;
13
+ const common_1 = require("@nestjs/common");
14
+ const conversation_history_1 = require("./conversation-history");
15
+ const event_service_1 = require("../events/event.service");
16
+ const conversation_repository_1 = require("../persistence/conversation.repository");
17
+ const supervised_conversation_registry_1 = require("./supervised-conversation.registry");
18
+ const call_turn_queue_1 = require("./call-turn-queue");
19
+ const brain_usage_tracker_1 = require("../brain/brain-usage.tracker");
20
+ /** Default window for “continue where you left off?” */
21
+ exports.DEFAULT_RESUME_WITHIN_MS = 10 * 60 * 1000;
22
+ const CHANNEL_META_KEYS = [
23
+ 'caller',
24
+ 'callerId',
25
+ 'channel',
26
+ 'callerPhoneNumber',
27
+ 'callerChannel',
28
+ 'startedBy',
29
+ 'afterHours',
30
+ 'abOverrides',
31
+ 'featureFlags',
32
+ ];
33
+ /**
34
+ * Cross-call resume: find a recent Conversation for the same caller and
35
+ * clone its durable state into the **current** call (new providerCallId).
36
+ *
37
+ * Avoids injecting ConversationBootstrapService (Entry↔Bootstrap cycle).
38
+ */
39
+ let ConversationResumeService = class ConversationResumeService {
40
+ conversations;
41
+ events;
42
+ registry;
43
+ turnQueues;
44
+ brainUsage;
45
+ constructor(conversations, events, registry, turnQueues, brainUsage) {
46
+ this.conversations = conversations;
47
+ this.events = events;
48
+ this.registry = registry;
49
+ this.turnQueues = turnQueues;
50
+ this.brainUsage = brainUsage;
51
+ }
52
+ async peek(input) {
53
+ const prior = await this.conversations.findResumableForCaller({
54
+ callerId: input.callerId,
55
+ withinMs: input.withinMs ?? exports.DEFAULT_RESUME_WITHIN_MS,
56
+ excludeConversationId: input.excludeConversationId,
57
+ });
58
+ if (!prior)
59
+ return null;
60
+ const mem = prior.state.memory && typeof prior.state.memory === 'object'
61
+ ? prior.state.memory
62
+ : {};
63
+ const meta = prior.state.metadata && typeof prior.state.metadata === 'object'
64
+ ? prior.state.metadata
65
+ : {};
66
+ return {
67
+ prior,
68
+ summary: {
69
+ activeModuleId: typeof meta.activeModuleId === 'string' ? meta.activeModuleId : null,
70
+ currentNodeId: typeof prior.state.currentNodeId === 'string'
71
+ ? prior.state.currentNodeId
72
+ : null,
73
+ firstName: typeof mem.firstName === 'string' ? mem.firstName : null,
74
+ },
75
+ };
76
+ }
77
+ async applyCloneByConversationId(runtime, priorConversationId) {
78
+ const row = await this.conversations.findById(priorConversationId);
79
+ if (!row)
80
+ return false;
81
+ const state = row.status === 'ENDED'
82
+ ? row.finalState
83
+ : (row.runtimeState ?? row.finalState);
84
+ if (!state || typeof state !== 'object')
85
+ return false;
86
+ await this.applyClone(runtime, {
87
+ conversationId: row.id,
88
+ providerCallId: row.providerCallId,
89
+ status: row.status,
90
+ state: state,
91
+ activityAt: row.lastActivityAt ?? row.endedAt ?? row.createdAt,
92
+ });
93
+ return true;
94
+ }
95
+ async applyClone(runtime, prior) {
96
+ const state = prior.state;
97
+ const keepVars = { ...runtime.variables };
98
+ const keepMeta = {};
99
+ for (const key of CHANNEL_META_KEYS) {
100
+ if (runtime.metadata[key] !== undefined) {
101
+ keepMeta[key] = runtime.metadata[key];
102
+ }
103
+ }
104
+ const priorMeta = state.metadata && typeof state.metadata === 'object'
105
+ ? { ...state.metadata }
106
+ : {};
107
+ const priorMemory = state.memory && typeof state.memory === 'object'
108
+ ? { ...state.memory }
109
+ : {};
110
+ delete priorMemory.pendingResumeConversationId;
111
+ delete priorMemory.pendingResumeAsked;
112
+ delete priorMemory.pendingResumeModuleId;
113
+ delete priorMemory.pendingResumeNodeId;
114
+ priorMemory.resumedFromConversationId = prior.conversationId;
115
+ runtime.memory = priorMemory;
116
+ if (state.history && typeof state.history === 'object') {
117
+ runtime.history = state.history;
118
+ }
119
+ else {
120
+ runtime.history = (0, conversation_history_1.emptyConversationHistory)();
121
+ }
122
+ if (state.portalState && typeof state.portalState === 'object') {
123
+ const ps = state.portalState;
124
+ runtime.portalState = {
125
+ activePortalId: ps.activePortalId ?? null,
126
+ originNodeId: ps.originNodeId ?? null,
127
+ originListenExpectation: null,
128
+ transferToHuman: {
129
+ reengagementAttempts: ps.transferToHuman?.reengagementAttempts ?? 0,
130
+ },
131
+ stillThere: {
132
+ attempts: ps.stillThere?.attempts ?? 0,
133
+ },
134
+ };
135
+ }
136
+ runtime.currentNodeId =
137
+ typeof state.currentNodeId === 'string' ? state.currentNodeId : null;
138
+ runtime.normalFlowNodeId =
139
+ typeof state.normalFlowNodeId === 'string'
140
+ ? state.normalFlowNodeId
141
+ : runtime.currentNodeId;
142
+ runtime.brainSequenceIndex =
143
+ typeof state.brainSequenceIndex === 'number'
144
+ ? state.brainSequenceIndex
145
+ : 0;
146
+ runtime.openingCompleted = true;
147
+ runtime.listenExpectation =
148
+ state.listenExpectation ?? null;
149
+ runtime.lastAssistantSpeech = Array.isArray(state.lastAssistantSpeech)
150
+ ? state.lastAssistantSpeech.filter((s) => typeof s === 'string')
151
+ : [];
152
+ if (state.turn && typeof state.turn === 'object') {
153
+ const t = state.turn;
154
+ runtime.turn = {
155
+ turnNumber: typeof t.turnNumber === 'number'
156
+ ? t.turnNumber
157
+ : runtime.turn.turnNumber,
158
+ interrupted: Boolean(t.interrupted),
159
+ lastInterruptAt: t.lastInterruptAt,
160
+ };
161
+ }
162
+ if (typeof state.brainProfileId === 'string' && state.brainProfileId) {
163
+ runtime.brainProfileId = state.brainProfileId;
164
+ }
165
+ const priorVars = state.variables && typeof state.variables === 'object'
166
+ ? { ...state.variables }
167
+ : {};
168
+ runtime.variables = {
169
+ ...priorVars,
170
+ ...keepVars,
171
+ };
172
+ runtime.metadata = {
173
+ ...priorMeta,
174
+ ...keepMeta,
175
+ activeModuleId: priorMeta.activeModuleId ?? null,
176
+ workflowId: priorMeta.workflowId ?? null,
177
+ lastHandoff: priorMeta.lastHandoff,
178
+ resumedFromConversationId: prior.conversationId,
179
+ resumedFromProviderCallId: prior.providerCallId,
180
+ };
181
+ const cloned = 0;
182
+ // Durable events live in analytics PG — resume does not clone Studio rows.
183
+ await this.events.persist(runtime.conversationId, 'CONVERSATION_RESUMED', {
184
+ projectId: typeof runtime.metadata.projectId === 'string'
185
+ ? runtime.metadata.projectId
186
+ : undefined,
187
+ fromConversationId: prior.conversationId,
188
+ fromProviderCallId: prior.providerCallId,
189
+ fromStatus: prior.status,
190
+ eventsCloned: cloned,
191
+ currentNodeId: runtime.currentNodeId,
192
+ activeModuleId: runtime.metadata.activeModuleId ?? null,
193
+ callerId: (0, conversation_repository_1.extractCallerIdFromBags)(runtime.variables, runtime.metadata),
194
+ });
195
+ if (runtime.status === 'ACTIVE') {
196
+ await this.conversations.saveRuntimeCheckpoint({
197
+ conversationId: runtime.conversationId,
198
+ runtimeState: runtime.snapshot(),
199
+ callerId: (0, conversation_repository_1.extractCallerIdFromBags)(runtime.variables, runtime.metadata),
200
+ });
201
+ }
202
+ if (prior.status === 'ACTIVE') {
203
+ await this.sealAbandonedPrior(prior);
204
+ }
205
+ }
206
+ async sealAbandonedPrior(prior) {
207
+ const live = this.registry.getByProviderCallId(prior.providerCallId);
208
+ if (live && live.conversationId === prior.conversationId) {
209
+ live.status = 'ENDED';
210
+ this.registry.delete(prior.providerCallId);
211
+ this.turnQueues.delete(prior.providerCallId);
212
+ this.brainUsage.clear(prior.providerCallId);
213
+ }
214
+ await this.conversations.markEnded({
215
+ conversationId: prior.conversationId,
216
+ finalState: {
217
+ ...prior.state,
218
+ status: 'ENDED',
219
+ supersededByResume: true,
220
+ },
221
+ callerId: (0, conversation_repository_1.extractCallerIdFromBags)(prior.state.variables, prior.state.metadata),
222
+ });
223
+ }
224
+ };
225
+ exports.ConversationResumeService = ConversationResumeService;
226
+ exports.ConversationResumeService = ConversationResumeService = __decorate([
227
+ (0, common_1.Injectable)(),
228
+ __metadata("design:paramtypes", [conversation_repository_1.ConversationRepository,
229
+ event_service_1.EventService,
230
+ supervised_conversation_registry_1.SupervisedConversationRegistry,
231
+ call_turn_queue_1.CallTurnQueueRegistry,
232
+ brain_usage_tracker_1.BrainUsageTracker])
233
+ ], ConversationResumeService);
234
+ //# sourceMappingURL=conversation-resume.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversation-resume.service.js","sourceRoot":"","sources":["../../src/conversation/conversation-resume.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import type { Variables } from './conversation-entry';
2
+ /**
3
+ * Full Conversation type schema — apps define this once; Nodes inherit it via generics.
4
+ *
5
+ * @example
6
+ * interface AppConversationSchema {
7
+ * variables: { companyName: string };
8
+ * memory: { conversationReady?: boolean; setupAt?: string };
9
+ * }
10
+ * class AcknowledgeNode extends AgentNode<AppConversationSchema> { ... }
11
+ */
12
+ export interface ConversationSchema {
13
+ variables: object;
14
+ memory: object;
15
+ }
16
+ export type SchemaVariables<T extends ConversationSchema> = Variables<T['variables']>;
17
+ export type SchemaMemory<T extends ConversationSchema> = T['memory'];
18
+ /** Default empty schema when an app has not declared one yet. */
19
+ export interface DefaultConversationSchema {
20
+ variables: Record<string, never>;
21
+ memory: Record<string, unknown>;
22
+ }
23
+ //# sourceMappingURL=conversation-schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversation-schema.d.ts","sourceRoot":"","sources":["../../src/conversation/conversation-schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEtD;;;;;;;;;GASG;AACH,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,eAAe,CAAC,CAAC,SAAS,kBAAkB,IAAI,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;AACtF,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,kBAAkB,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC;AAErE,iEAAiE;AACjE,MAAM,WAAW,yBAAyB;IACxC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACjC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=conversation-schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversation-schema.js","sourceRoot":"","sources":["../../src/conversation/conversation-schema.ts"],"names":[],"mappings":""}
@@ -0,0 +1,145 @@
1
+ /**
2
+ * Listen registration — opened before Node speech so interrupts still bind to it.
3
+ * Guides Brain intention scan + optional field extraction + ASR/LLM hints.
4
+ */
5
+ export interface ListenIntentionBoost {
6
+ /** Intention name to prioritize (e.g. isAcknowledge, studio.isGoodbye). */
7
+ name: string;
8
+ /**
9
+ * Extra weight for Brain scoring (hint only — does not change Supervisor walk order).
10
+ * Higher = more preferred by the scanner. Default when listed: 10.
11
+ */
12
+ boost?: number;
13
+ /**
14
+ * Supervisor walk order among scored intentions. Higher is tried first.
15
+ * Default 1. Tie-break: intention name A–Z.
16
+ */
17
+ priority?: number;
18
+ }
19
+ /**
20
+ * Field the Brain should pull from the next user utterance.
21
+ * App writes memory itself via `onExtracted` — no framework auto-target.
22
+ */
23
+ export interface ListenExtractField {
24
+ /** Key in Brain JSON `extracted` object (e.g. "firstName"). */
25
+ key: string;
26
+ /** Helps LLM extraction. */
27
+ description?: string;
28
+ type?: 'string' | 'number' | 'boolean';
29
+ /** If true and missing, extraction is incomplete (logged; routing still proceeds). */
30
+ required?: boolean;
31
+ }
32
+ /** Context passed to the sayAndListen extract callback. */
33
+ export interface ListenExtractApplyContext {
34
+ memory: Record<string, unknown>;
35
+ variables: Record<string, unknown>;
36
+ userText: string;
37
+ }
38
+ /**
39
+ * App-owned handler: Brain returns `extracted`, you set memory/variables yourself.
40
+ */
41
+ export type ListenExtractHandler = (extracted: Record<string, unknown>, ctx: ListenExtractApplyContext) => void | Promise<void>;
42
+ /** Closed-set cheap match before Brain (listed options: pick N / neither). */
43
+ export type ListenResolveIntention = (input: {
44
+ userText: string;
45
+ memory: Record<string, unknown>;
46
+ }) => string | null | Promise<string | null>;
47
+ /**
48
+ * Extract registration for the next answer:
49
+ * - `fields` tell Brain what to pull
50
+ * - `onExtracted` lets the Node write memory (required for applying values)
51
+ */
52
+ export interface ListenExtractSpec {
53
+ fields: ListenExtractField[];
54
+ onExtracted?: ListenExtractHandler;
55
+ }
56
+ export interface ListenExpectation {
57
+ /** Intentions this Node expects / wants Brain to prioritize. */
58
+ intentions: ListenIntentionBoost[];
59
+ /**
60
+ * Hints for Brain/ops: what the user might mean if ASR is messy.
61
+ * Valuable context for LLM intention scanning.
62
+ */
63
+ hints?: string[];
64
+ /** Optional free-form operator note. */
65
+ note?: string;
66
+ /** Structured extraction for the next user answer (fields + apply callback). */
67
+ extract?: ListenExtractSpec;
68
+ /**
69
+ * Seconds the channel waits after a user pause before closing this listen.
70
+ * Omit to use the Node class `listenTimeoutSeconds` (framework default 2.5).
71
+ */
72
+ timeoutSeconds?: number;
73
+ /**
74
+ * When false, overlapping Custom LLM POSTs are queued until this listen's
75
+ * timeout of silence after the last fragment. Default true (barge-in).
76
+ */
77
+ interruptible?: boolean;
78
+ /**
79
+ * Cheap closed-set match **before** Brain scan. If this returns an intention
80
+ * name that is on this listen, Supervisor skips OpenAI and walks that
81
+ * intention at confidence 1. Return null to fall through to Brain (portals,
82
+ * unknown, free-form). Use after the bot listed numbered options.
83
+ */
84
+ resolveIntention?: ListenResolveIntention;
85
+ }
86
+ /** Options passed to `sayAndListen` — especially extraction for the next answer. */
87
+ export interface SayAndListenOptions {
88
+ /**
89
+ * Ask Brain for fields, then run `onExtracted` so the Node sets memory itself.
90
+ *
91
+ * @example
92
+ * sayAndListen("What's your first name?", {
93
+ * extract: {
94
+ * fields: [{ key: 'firstName', type: 'string', required: true }],
95
+ * onExtracted: (data) => { ctx.memory.callerName = String(data.firstName ?? ''); },
96
+ * },
97
+ * })
98
+ */
99
+ extract?: ListenExtractSpec;
100
+ /** If set, replaces listen intentions for the next turn. */
101
+ intentions?: ListenIntentionBoost[];
102
+ hints?: string[];
103
+ note?: string;
104
+ /** Per-turn listen window; wins over `listen()` and the Node class default. */
105
+ timeoutSeconds?: number;
106
+ /** Per-turn barge-in; wins over Node class `interruptible`. */
107
+ interruptible?: boolean;
108
+ /** Per-turn closed-set matcher; wins over `listen()`. */
109
+ resolveIntention?: ListenResolveIntention;
110
+ }
111
+ export declare function applyListenBoosts(candidates: Array<{
112
+ name: string;
113
+ rank: number;
114
+ payload?: unknown;
115
+ }>, listen: ListenExpectation | null | undefined): Array<{
116
+ name: string;
117
+ rank: number;
118
+ payload?: unknown;
119
+ }>;
120
+ /**
121
+ * Merge `sayAndListen` options into the listen registered by `node.listen()`.
122
+ * Extract spec on sayAndListen wins for the upcoming user answer.
123
+ */
124
+ export declare function mergeSayAndListenOptions(current: ListenExpectation | null | undefined, options: SayAndListenOptions | undefined): ListenExpectation | null;
125
+ /**
126
+ * Run a listen's cheap matcher. Returns an intention name only when it is
127
+ * listed on this listen. Null → Brain scan as usual.
128
+ */
129
+ export declare function tryResolveListenIntention(input: {
130
+ listen: ListenExpectation | null | undefined;
131
+ userText: string;
132
+ memory: Record<string, unknown>;
133
+ }): Promise<string | null>;
134
+ export declare function missingRequiredExtractKeys(fields: ListenExtractField[] | undefined, extracted: Record<string, unknown> | undefined): string[];
135
+ /**
136
+ * Pull a plausible person name from ASR text.
137
+ * Accepts "Mark." / "yeah Mark" from voice ASR. Rejects pronouns and
138
+ * intent sentences (e.g. "I need my roof estimate").
139
+ */
140
+ export declare function mockExtractPersonName(userText: string, prefer?: 'first' | 'last'): string | undefined;
141
+ /**
142
+ * Deterministic mock extraction for tests / MockBrain (no LLM).
143
+ */
144
+ export declare function mockExtractFromUserText(userText: string, fields: ListenExtractField[] | undefined): Record<string, unknown>;
145
+ //# sourceMappingURL=listen-expectation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listen-expectation.d.ts","sourceRoot":"","sources":["../../src/conversation/listen-expectation.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,2EAA2E;IAC3E,IAAI,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,+DAA+D;IAC/D,GAAG,EAAE,MAAM,CAAC;IACZ,4BAA4B;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;IACvC,sFAAsF;IACtF,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,2DAA2D;AAC3D,MAAM,WAAW,yBAAyB;IACxC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG,CACjC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,GAAG,EAAE,yBAAyB,KAC3B,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE1B,8EAA8E;AAC9E,MAAM,MAAM,sBAAsB,GAAG,CAAC,KAAK,EAAE;IAC3C,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC,KAAK,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;AAE7C;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,kBAAkB,EAAE,CAAC;IAC7B,WAAW,CAAC,EAAE,oBAAoB,CAAC;CACpC;AAED,MAAM,WAAW,iBAAiB;IAChC,gEAAgE;IAChE,UAAU,EAAE,oBAAoB,EAAE,CAAC;IACnC;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,wCAAwC;IACxC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gFAAgF;IAChF,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAC5B;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,sBAAsB,CAAC;CAC3C;AAED,oFAAoF;AACpF,MAAM,WAAW,mBAAmB;IAClC;;;;;;;;;;OAUG;IACH,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAC5B,4DAA4D;IAC5D,UAAU,CAAC,EAAE,oBAAoB,EAAE,CAAC;IACpC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,+EAA+E;IAC/E,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,+DAA+D;IAC/D,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,yDAAyD;IACzD,gBAAgB,CAAC,EAAE,sBAAsB,CAAC;CAC3C;AAED,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,EACpE,MAAM,EAAE,iBAAiB,GAAG,IAAI,GAAG,SAAS,GAC3C,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,CAqB1D;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,iBAAiB,GAAG,IAAI,GAAG,SAAS,EAC7C,OAAO,EAAE,mBAAmB,GAAG,SAAS,GACvC,iBAAiB,GAAG,IAAI,CAwB1B;AAED;;;GAGG;AACH,wBAAsB,yBAAyB,CAAC,KAAK,EAAE;IACrD,MAAM,EAAE,iBAAiB,GAAG,IAAI,GAAG,SAAS,CAAC;IAC7C,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAiBzB;AAED,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,kBAAkB,EAAE,GAAG,SAAS,EACxC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAC7C,MAAM,EAAE,CAWV;AAyFD;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,MAAM,EAChB,MAAM,GAAE,OAAO,GAAG,MAAgB,GACjC,MAAM,GAAG,SAAS,CAIpB;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,kBAAkB,EAAE,GAAG,SAAS,GACvC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAkCzB"}