@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.
- package/LICENSE +21 -0
- package/README.md +129 -0
- package/agent/AGENTS.md +42 -0
- package/agent/CLAUDE.md +15 -0
- package/agent/claude/rules/ui-and-api-identity.md +9 -0
- package/agent/claude/rules/vapi-studio-best-practices.md +36 -0
- package/agent/cursor/ui-and-api-identity.mdc +16 -0
- package/agent/cursor/vapi-studio-best-practices.mdc +43 -0
- package/dist/adapters/vapi/vapi-sse.compiler.d.ts +61 -0
- package/dist/adapters/vapi/vapi-sse.compiler.d.ts.map +1 -0
- package/dist/adapters/vapi/vapi-sse.compiler.js +396 -0
- package/dist/adapters/vapi/vapi-sse.compiler.js.map +1 -0
- package/dist/analytics/analytics-tags.d.ts +60 -0
- package/dist/analytics/analytics-tags.d.ts.map +1 -0
- package/dist/analytics/analytics-tags.js +27 -0
- package/dist/analytics/analytics-tags.js.map +1 -0
- package/dist/brain/adapters/chatgpt-brain.adapter.d.ts +27 -0
- package/dist/brain/adapters/chatgpt-brain.adapter.d.ts.map +1 -0
- package/dist/brain/adapters/chatgpt-brain.adapter.js +94 -0
- package/dist/brain/adapters/chatgpt-brain.adapter.js.map +1 -0
- package/dist/brain/adapters/claude-brain.adapter.d.ts +24 -0
- package/dist/brain/adapters/claude-brain.adapter.d.ts.map +1 -0
- package/dist/brain/adapters/claude-brain.adapter.js +96 -0
- package/dist/brain/adapters/claude-brain.adapter.js.map +1 -0
- package/dist/brain/adapters/gemini-brain.adapter.d.ts +24 -0
- package/dist/brain/adapters/gemini-brain.adapter.d.ts.map +1 -0
- package/dist/brain/adapters/gemini-brain.adapter.js +106 -0
- package/dist/brain/adapters/gemini-brain.adapter.js.map +1 -0
- package/dist/brain/adapters/grok-brain.adapter.d.ts +24 -0
- package/dist/brain/adapters/grok-brain.adapter.d.ts.map +1 -0
- package/dist/brain/adapters/grok-brain.adapter.js +90 -0
- package/dist/brain/adapters/grok-brain.adapter.js.map +1 -0
- package/dist/brain/adapters/json-llm-brain.base.d.ts +63 -0
- package/dist/brain/adapters/json-llm-brain.base.d.ts.map +1 -0
- package/dist/brain/adapters/json-llm-brain.base.js +511 -0
- package/dist/brain/adapters/json-llm-brain.base.js.map +1 -0
- package/dist/brain/adapters/mock-brain.adapter.d.ts +32 -0
- package/dist/brain/adapters/mock-brain.adapter.d.ts.map +1 -0
- package/dist/brain/adapters/mock-brain.adapter.js +201 -0
- package/dist/brain/adapters/mock-brain.adapter.js.map +1 -0
- package/dist/brain/adapters/mock-provider-brains.adapter.d.ts +22 -0
- package/dist/brain/adapters/mock-provider-brains.adapter.d.ts.map +1 -0
- package/dist/brain/adapters/mock-provider-brains.adapter.js +48 -0
- package/dist/brain/adapters/mock-provider-brains.adapter.js.map +1 -0
- package/dist/brain/brain-clarify.d.ts +75 -0
- package/dist/brain/brain-clarify.d.ts.map +1 -0
- package/dist/brain/brain-clarify.js +146 -0
- package/dist/brain/brain-clarify.js.map +1 -0
- package/dist/brain/brain-config.d.ts +20 -0
- package/dist/brain/brain-config.d.ts.map +1 -0
- package/dist/brain/brain-config.js +20 -0
- package/dist/brain/brain-config.js.map +1 -0
- package/dist/brain/brain-judge.d.ts +68 -0
- package/dist/brain/brain-judge.d.ts.map +1 -0
- package/dist/brain/brain-judge.js +111 -0
- package/dist/brain/brain-judge.js.map +1 -0
- package/dist/brain/brain-ranking.d.ts +41 -0
- package/dist/brain/brain-ranking.d.ts.map +1 -0
- package/dist/brain/brain-ranking.js +103 -0
- package/dist/brain/brain-ranking.js.map +1 -0
- package/dist/brain/brain-usage.tracker.d.ts +48 -0
- package/dist/brain/brain-usage.tracker.d.ts.map +1 -0
- package/dist/brain/brain-usage.tracker.js +106 -0
- package/dist/brain/brain-usage.tracker.js.map +1 -0
- package/dist/brain/brain.port.d.ts +63 -0
- package/dist/brain/brain.port.d.ts.map +1 -0
- package/dist/brain/brain.port.js +7 -0
- package/dist/brain/brain.port.js.map +1 -0
- package/dist/brain/brain.service.d.ts +14 -0
- package/dist/brain/brain.service.d.ts.map +1 -0
- package/dist/brain/brain.service.js +27 -0
- package/dist/brain/brain.service.js.map +1 -0
- package/dist/brain/claude-cheap-models.d.ts +18 -0
- package/dist/brain/claude-cheap-models.d.ts.map +1 -0
- package/dist/brain/claude-cheap-models.js +53 -0
- package/dist/brain/claude-cheap-models.js.map +1 -0
- package/dist/brain/gemini-cheap-models.d.ts +18 -0
- package/dist/brain/gemini-cheap-models.d.ts.map +1 -0
- package/dist/brain/gemini-cheap-models.js +53 -0
- package/dist/brain/gemini-cheap-models.js.map +1 -0
- package/dist/brain/grok-cheap-models.d.ts +18 -0
- package/dist/brain/grok-cheap-models.d.ts.map +1 -0
- package/dist/brain/grok-cheap-models.js +53 -0
- package/dist/brain/grok-cheap-models.js.map +1 -0
- package/dist/brain/llm-model-pricing.d.ts +29 -0
- package/dist/brain/llm-model-pricing.d.ts.map +1 -0
- package/dist/brain/llm-model-pricing.js +38 -0
- package/dist/brain/llm-model-pricing.js.map +1 -0
- package/dist/brain/openai-cheap-models.d.ts +34 -0
- package/dist/brain/openai-cheap-models.d.ts.map +1 -0
- package/dist/brain/openai-cheap-models.js +72 -0
- package/dist/brain/openai-cheap-models.js.map +1 -0
- package/dist/brain/prompt-injection-guard.d.ts +34 -0
- package/dist/brain/prompt-injection-guard.d.ts.map +1 -0
- package/dist/brain/prompt-injection-guard.js +109 -0
- package/dist/brain/prompt-injection-guard.js.map +1 -0
- package/dist/channel/channel-tools.d.ts +72 -0
- package/dist/channel/channel-tools.d.ts.map +1 -0
- package/dist/channel/channel-tools.js +131 -0
- package/dist/channel/channel-tools.js.map +1 -0
- package/dist/conversation/call-turn-queue.d.ts +64 -0
- package/dist/conversation/call-turn-queue.d.ts.map +1 -0
- package/dist/conversation/call-turn-queue.js +156 -0
- package/dist/conversation/call-turn-queue.js.map +1 -0
- package/dist/conversation/conversation-bootstrap.service.d.ts +60 -0
- package/dist/conversation/conversation-bootstrap.service.d.ts.map +1 -0
- package/dist/conversation/conversation-bootstrap.service.js +383 -0
- package/dist/conversation/conversation-bootstrap.service.js.map +1 -0
- package/dist/conversation/conversation-entry.d.ts +38 -0
- package/dist/conversation/conversation-entry.d.ts.map +1 -0
- package/dist/conversation/conversation-entry.js +17 -0
- package/dist/conversation/conversation-entry.js.map +1 -0
- package/dist/conversation/conversation-history.d.ts +31 -0
- package/dist/conversation/conversation-history.d.ts.map +1 -0
- package/dist/conversation/conversation-history.js +53 -0
- package/dist/conversation/conversation-history.js.map +1 -0
- package/dist/conversation/conversation-limits.d.ts +49 -0
- package/dist/conversation/conversation-limits.d.ts.map +1 -0
- package/dist/conversation/conversation-limits.js +44 -0
- package/dist/conversation/conversation-limits.js.map +1 -0
- package/dist/conversation/conversation-resume.service.d.ts +39 -0
- package/dist/conversation/conversation-resume.service.d.ts.map +1 -0
- package/dist/conversation/conversation-resume.service.js +234 -0
- package/dist/conversation/conversation-resume.service.js.map +1 -0
- package/dist/conversation/conversation-schema.d.ts +23 -0
- package/dist/conversation/conversation-schema.d.ts.map +1 -0
- package/dist/conversation/conversation-schema.js +3 -0
- package/dist/conversation/conversation-schema.js.map +1 -0
- package/dist/conversation/listen-expectation.d.ts +145 -0
- package/dist/conversation/listen-expectation.d.ts.map +1 -0
- package/dist/conversation/listen-expectation.js +219 -0
- package/dist/conversation/listen-expectation.js.map +1 -0
- package/dist/conversation/listen-timeout.d.ts +42 -0
- package/dist/conversation/listen-timeout.d.ts.map +1 -0
- package/dist/conversation/listen-timeout.js +57 -0
- package/dist/conversation/listen-timeout.js.map +1 -0
- package/dist/conversation/supervised-conversation.d.ts +64 -0
- package/dist/conversation/supervised-conversation.d.ts.map +1 -0
- package/dist/conversation/supervised-conversation.js +198 -0
- package/dist/conversation/supervised-conversation.js.map +1 -0
- package/dist/conversation/supervised-conversation.registry.d.ts +14 -0
- package/dist/conversation/supervised-conversation.registry.d.ts.map +1 -0
- package/dist/conversation/supervised-conversation.registry.js +47 -0
- package/dist/conversation/supervised-conversation.registry.js.map +1 -0
- package/dist/conversation/types.d.ts +52 -0
- package/dist/conversation/types.d.ts.map +1 -0
- package/dist/conversation/types.js +3 -0
- package/dist/conversation/types.js.map +1 -0
- package/dist/events/conversation-console.d.ts +17 -0
- package/dist/events/conversation-console.d.ts.map +1 -0
- package/dist/events/conversation-console.js +863 -0
- package/dist/events/conversation-console.js.map +1 -0
- package/dist/events/daily-log.driver.d.ts +35 -0
- package/dist/events/daily-log.driver.d.ts.map +1 -0
- package/dist/events/daily-log.driver.js +206 -0
- package/dist/events/daily-log.driver.js.map +1 -0
- package/dist/events/event.service.d.ts +24 -0
- package/dist/events/event.service.d.ts.map +1 -0
- package/dist/events/event.service.js +141 -0
- package/dist/events/event.service.js.map +1 -0
- package/dist/events/route-forensics.d.ts +38 -0
- package/dist/events/route-forensics.d.ts.map +1 -0
- package/dist/events/route-forensics.js +85 -0
- package/dist/events/route-forensics.js.map +1 -0
- package/dist/events/studio-event-bus.d.ts +17 -0
- package/dist/events/studio-event-bus.d.ts.map +1 -0
- package/dist/events/studio-event-bus.js +37 -0
- package/dist/events/studio-event-bus.js.map +1 -0
- package/dist/events/studio-event.d.ts +44 -0
- package/dist/events/studio-event.d.ts.map +1 -0
- package/dist/events/studio-event.js +27 -0
- package/dist/events/studio-event.js.map +1 -0
- package/dist/flow/condition.d.ts +35 -0
- package/dist/flow/condition.d.ts.map +1 -0
- package/dist/flow/condition.js +246 -0
- package/dist/flow/condition.js.map +1 -0
- package/dist/flow/flow-loader.d.ts +71 -0
- package/dist/flow/flow-loader.d.ts.map +1 -0
- package/dist/flow/flow-loader.js +182 -0
- package/dist/flow/flow-loader.js.map +1 -0
- package/dist/forms/form-html.d.ts +30 -0
- package/dist/forms/form-html.d.ts.map +1 -0
- package/dist/forms/form-html.js +130 -0
- package/dist/forms/form-html.js.map +1 -0
- package/dist/forms/form.tokens.d.ts +3 -0
- package/dist/forms/form.tokens.d.ts.map +1 -0
- package/dist/forms/form.tokens.js +6 -0
- package/dist/forms/form.tokens.js.map +1 -0
- package/dist/forms/form.types.d.ts +81 -0
- package/dist/forms/form.types.d.ts.map +1 -0
- package/dist/forms/form.types.js +36 -0
- package/dist/forms/form.types.js.map +1 -0
- package/dist/forms/forms.service.d.ts +52 -0
- package/dist/forms/forms.service.d.ts.map +1 -0
- package/dist/forms/forms.service.js +434 -0
- package/dist/forms/forms.service.js.map +1 -0
- package/dist/forms/noop-form-dispose.adapter.d.ts +12 -0
- package/dist/forms/noop-form-dispose.adapter.d.ts.map +1 -0
- package/dist/forms/noop-form-dispose.adapter.js +27 -0
- package/dist/forms/noop-form-dispose.adapter.js.map +1 -0
- package/dist/forms/twilio-sms-form-dispose.adapter.d.ts +33 -0
- package/dist/forms/twilio-sms-form-dispose.adapter.d.ts.map +1 -0
- package/dist/forms/twilio-sms-form-dispose.adapter.js +125 -0
- package/dist/forms/twilio-sms-form-dispose.adapter.js.map +1 -0
- package/dist/forms/twilio-sms.env.d.ts +62 -0
- package/dist/forms/twilio-sms.env.d.ts.map +1 -0
- package/dist/forms/twilio-sms.env.js +147 -0
- package/dist/forms/twilio-sms.env.js.map +1 -0
- package/dist/forms/twilio-sms.sender.d.ts +27 -0
- package/dist/forms/twilio-sms.sender.d.ts.map +1 -0
- package/dist/forms/twilio-sms.sender.js +75 -0
- package/dist/forms/twilio-sms.sender.js.map +1 -0
- package/dist/identity/email-parse.d.ts +20 -0
- package/dist/identity/email-parse.d.ts.map +1 -0
- package/dist/identity/email-parse.js +102 -0
- package/dist/identity/email-parse.js.map +1 -0
- package/dist/identity/index.d.ts +17 -0
- package/dist/identity/index.d.ts.map +1 -0
- package/dist/identity/index.js +23 -0
- package/dist/identity/index.js.map +1 -0
- package/dist/index.d.ts +108 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +300 -0
- package/dist/index.js.map +1 -0
- package/dist/integrations/integration-client.d.ts +41 -0
- package/dist/integrations/integration-client.d.ts.map +1 -0
- package/dist/integrations/integration-client.js +152 -0
- package/dist/integrations/integration-client.js.map +1 -0
- package/dist/integrations/jwt-hmac.d.ts +33 -0
- package/dist/integrations/jwt-hmac.d.ts.map +1 -0
- package/dist/integrations/jwt-hmac.js +108 -0
- package/dist/integrations/jwt-hmac.js.map +1 -0
- package/dist/intention/code-intention.d.ts +94 -0
- package/dist/intention/code-intention.d.ts.map +1 -0
- package/dist/intention/code-intention.js +89 -0
- package/dist/intention/code-intention.js.map +1 -0
- package/dist/intention/intention-constants.d.ts +37 -0
- package/dist/intention/intention-constants.d.ts.map +1 -0
- package/dist/intention/intention-constants.js +37 -0
- package/dist/intention/intention-constants.js.map +1 -0
- package/dist/intentions/standard-intentions.d.ts +26 -0
- package/dist/intentions/standard-intentions.d.ts.map +1 -0
- package/dist/intentions/standard-intentions.js +28 -0
- package/dist/intentions/standard-intentions.js.map +1 -0
- package/dist/node/agent-node.d.ts +156 -0
- package/dist/node/agent-node.d.ts.map +1 -0
- package/dist/node/agent-node.js +179 -0
- package/dist/node/agent-node.js.map +1 -0
- package/dist/node/catch-directive.d.ts +33 -0
- package/dist/node/catch-directive.d.ts.map +1 -0
- package/dist/node/catch-directive.js +41 -0
- package/dist/node/catch-directive.js.map +1 -0
- package/dist/output/conversation-output.d.ts +113 -0
- package/dist/output/conversation-output.d.ts.map +1 -0
- package/dist/output/conversation-output.js +100 -0
- package/dist/output/conversation-output.js.map +1 -0
- package/dist/persistence/conversation.entity.d.ts +27 -0
- package/dist/persistence/conversation.entity.d.ts.map +1 -0
- package/dist/persistence/conversation.entity.js +115 -0
- package/dist/persistence/conversation.entity.js.map +1 -0
- package/dist/persistence/conversation.repository.d.ts +82 -0
- package/dist/persistence/conversation.repository.d.ts.map +1 -0
- package/dist/persistence/conversation.repository.js +277 -0
- package/dist/persistence/conversation.repository.js.map +1 -0
- package/dist/persistence/project.entity.d.ts +12 -0
- package/dist/persistence/project.entity.d.ts.map +1 -0
- package/dist/persistence/project.entity.js +46 -0
- package/dist/persistence/project.entity.js.map +1 -0
- package/dist/persistence/project.repository.d.ts +17 -0
- package/dist/persistence/project.repository.d.ts.map +1 -0
- package/dist/persistence/project.repository.js +69 -0
- package/dist/persistence/project.repository.js.map +1 -0
- package/dist/persistence/provider-ingress.entity.d.ts +18 -0
- package/dist/persistence/provider-ingress.entity.d.ts.map +1 -0
- package/dist/persistence/provider-ingress.entity.js +91 -0
- package/dist/persistence/provider-ingress.entity.js.map +1 -0
- package/dist/persistence/provider-ingress.repository.d.ts +21 -0
- package/dist/persistence/provider-ingress.repository.d.ts.map +1 -0
- package/dist/persistence/provider-ingress.repository.js +76 -0
- package/dist/persistence/provider-ingress.repository.js.map +1 -0
- package/dist/studio-ui/assets/index-BGd2OhLv.js +84 -0
- package/dist/studio-ui/assets/index-BGd2OhLv.js.map +1 -0
- package/dist/studio-ui/assets/index-DnJos5x2.css +1 -0
- package/dist/studio-ui/index.html +13 -0
- package/dist/studio-ui-mount/index.d.ts +6 -0
- package/dist/studio-ui-mount/index.d.ts.map +1 -0
- package/dist/studio-ui-mount/index.js +13 -0
- package/dist/studio-ui-mount/index.js.map +1 -0
- package/dist/studio-ui-mount/resolve-studio-ui-root.d.ts +6 -0
- package/dist/studio-ui-mount/resolve-studio-ui-root.d.ts.map +1 -0
- package/dist/studio-ui-mount/resolve-studio-ui-root.js +25 -0
- package/dist/studio-ui-mount/resolve-studio-ui-root.js.map +1 -0
- package/dist/studio-ui-mount/studio-spa.controller.d.ts +18 -0
- package/dist/studio-ui-mount/studio-spa.controller.d.ts.map +1 -0
- package/dist/studio-ui-mount/studio-spa.controller.js +57 -0
- package/dist/studio-ui-mount/studio-spa.controller.js.map +1 -0
- package/dist/studio-ui-mount/studio-ui.module.d.ts +15 -0
- package/dist/studio-ui-mount/studio-ui.module.d.ts.map +1 -0
- package/dist/studio-ui-mount/studio-ui.module.js +47 -0
- package/dist/studio-ui-mount/studio-ui.module.js.map +1 -0
- package/dist/studio-ui-mount/studio-ui.tokens.d.ts +2 -0
- package/dist/studio-ui-mount/studio-ui.tokens.d.ts.map +1 -0
- package/dist/studio-ui-mount/studio-ui.tokens.js +5 -0
- package/dist/studio-ui-mount/studio-ui.tokens.js.map +1 -0
- package/dist/supervisor/supervisor-cascade.d.ts +55 -0
- package/dist/supervisor/supervisor-cascade.d.ts.map +1 -0
- package/dist/supervisor/supervisor-cascade.js +261 -0
- package/dist/supervisor/supervisor-cascade.js.map +1 -0
- package/dist/supervisor/supervisor-engine.d.ts +9 -0
- package/dist/supervisor/supervisor-engine.d.ts.map +1 -0
- package/dist/supervisor/supervisor-engine.js +64 -0
- package/dist/supervisor/supervisor-engine.js.map +1 -0
- package/dist/supervisor/supervisor-limits.d.ts +8 -0
- package/dist/supervisor/supervisor-limits.d.ts.map +1 -0
- package/dist/supervisor/supervisor-limits.js +36 -0
- package/dist/supervisor/supervisor-limits.js.map +1 -0
- package/dist/supervisor/supervisor-node-exec.d.ts +39 -0
- package/dist/supervisor/supervisor-node-exec.d.ts.map +1 -0
- package/dist/supervisor/supervisor-node-exec.js +201 -0
- package/dist/supervisor/supervisor-node-exec.js.map +1 -0
- package/dist/supervisor/supervisor-orchestration.d.ts +24 -0
- package/dist/supervisor/supervisor-orchestration.d.ts.map +1 -0
- package/dist/supervisor/supervisor-orchestration.js +395 -0
- package/dist/supervisor/supervisor-orchestration.js.map +1 -0
- package/dist/supervisor/supervisor-portal.d.ts +75 -0
- package/dist/supervisor/supervisor-portal.d.ts.map +1 -0
- package/dist/supervisor/supervisor-portal.js +320 -0
- package/dist/supervisor/supervisor-portal.js.map +1 -0
- package/dist/supervisor/supervisor-route.d.ts +53 -0
- package/dist/supervisor/supervisor-route.d.ts.map +1 -0
- package/dist/supervisor/supervisor-route.js +308 -0
- package/dist/supervisor/supervisor-route.js.map +1 -0
- package/dist/supervisor/supervisor-special-turns.d.ts +34 -0
- package/dist/supervisor/supervisor-special-turns.d.ts.map +1 -0
- package/dist/supervisor/supervisor-special-turns.js +308 -0
- package/dist/supervisor/supervisor-special-turns.js.map +1 -0
- package/dist/supervisor/supervisor.d.ts +44 -0
- package/dist/supervisor/supervisor.d.ts.map +1 -0
- package/dist/supervisor/supervisor.js +79 -0
- package/dist/supervisor/supervisor.js.map +1 -0
- package/dist/supervisor/supervisor.types.d.ts +71 -0
- package/dist/supervisor/supervisor.types.d.ts.map +1 -0
- package/dist/supervisor/supervisor.types.js +8 -0
- package/dist/supervisor/supervisor.types.js.map +1 -0
- package/dist/tasks/studio-task-queue.d.ts +93 -0
- package/dist/tasks/studio-task-queue.d.ts.map +1 -0
- package/dist/tasks/studio-task-queue.js +226 -0
- package/dist/tasks/studio-task-queue.js.map +1 -0
- package/dist/util/studio-env.d.ts +7 -0
- package/dist/util/studio-env.d.ts.map +1 -0
- package/dist/util/studio-env.js +32 -0
- package/dist/util/studio-env.js.map +1 -0
- package/dist/vapi-studio.module.d.ts +55 -0
- package/dist/vapi-studio.module.d.ts.map +1 -0
- package/dist/vapi-studio.module.js +166 -0
- package/dist/vapi-studio.module.js.map +1 -0
- package/dist/workflow/workflow-handoff.service.d.ts +29 -0
- package/dist/workflow/workflow-handoff.service.d.ts.map +1 -0
- package/dist/workflow/workflow-handoff.service.js +165 -0
- package/dist/workflow/workflow-handoff.service.js.map +1 -0
- package/dist/workflow/workflow-loader.d.ts +48 -0
- package/dist/workflow/workflow-loader.d.ts.map +1 -0
- package/dist/workflow/workflow-loader.js +87 -0
- package/dist/workflow/workflow-loader.js.map +1 -0
- package/docs/README.md +69 -0
- package/docs/assets/deterministic-assistant-flow.svg +128 -0
- package/docs/assets/vapi-studio-stack.svg +26 -0
- package/docs/best-practices/README.md +37 -0
- package/docs/best-practices/brain-and-prompt-injection.md +70 -0
- package/docs/best-practices/conversation-design.md +152 -0
- package/docs/best-practices/debugging-and-observability.md +49 -0
- package/docs/best-practices/documentation-layers.md +31 -0
- package/docs/best-practices/identity-and-pii.md +66 -0
- package/docs/best-practices/nodes-and-listens.md +116 -0
- package/docs/best-practices/ui-and-api-identity.md +51 -0
- package/docs/building-apps/creating-an-app.md +59 -0
- package/docs/building-apps/example-apps.md +23 -0
- package/docs/building-apps/overview.md +27 -0
- package/docs/getting-started/installation.md +52 -0
- package/docs/getting-started/introduction.md +23 -0
- package/docs/getting-started/quick-start.md +23 -0
- package/docs/guide/concepts.md +103 -0
- package/docs/guide/forms.md +102 -0
- package/docs/guide/handbook.md +21 -0
- package/docs/guide/introduction.md +56 -0
- package/docs/guide/module-setup.md +68 -0
- package/docs/guide/vapi-adapter.md +70 -0
- package/docs/guide/workflow-squad.md +59 -0
- package/docs/guides/agents.md +85 -0
- package/docs/guides/docker-compose.events.stub.yaml +27 -0
- package/docs/guides/documentation.md +13 -0
- package/docs/guides/extending-events.md +155 -0
- package/docs/guides/node-conventions.md +59 -0
- package/docs/guides/speckit.md +56 -0
- package/docs/reference/data-model.md +79 -0
- package/docs/reference/environment-variables.md +60 -0
- package/docs/reference/events-and-logging.md +137 -0
- package/docs/reference/flow-schema.md +79 -0
- package/docs/reference/runtime-api.md +708 -0
- package/docs/reference/security.md +41 -0
- package/docs/reference/standard-intentions.md +49 -0
- package/docs/reference/testing.md +15 -0
- package/docs/samples/events/nest-listener.example.ts +17 -0
- package/docs/samples/events/redis-bridge.example.ts +44 -0
- package/package.json +81 -0
- package/scripts/fix-access-modifiers.mjs +85 -0
- package/scripts/install-agent-refs.cjs +196 -0
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.STANDARD_INTENTIONS = void 0;
|
|
4
|
+
/** Framework-standard intention ids (use in flow.yaml and portal nodes). */
|
|
5
|
+
exports.STANDARD_INTENTIONS = {
|
|
6
|
+
isGoodbye: 'studio.isGoodbye',
|
|
7
|
+
isTransferToHuman: 'studio.isTransferToHuman',
|
|
8
|
+
isPause: 'studio.isPause',
|
|
9
|
+
/** Caller is angry / mad — handle as a standalone portal, not normal flow. */
|
|
10
|
+
isMad: 'studio.isMad',
|
|
11
|
+
/**
|
|
12
|
+
* No candidate intention cleared the confidence threshold.
|
|
13
|
+
* Standalone portal — ask to clarify / recover.
|
|
14
|
+
*/
|
|
15
|
+
isUnknownTransition: 'studio.isUnknownTransition',
|
|
16
|
+
/** Affirmative answer (yes / correct / sure / okay). */
|
|
17
|
+
isPositive: 'studio.isPositive',
|
|
18
|
+
/** Negative answer (no / incorrect / decline). */
|
|
19
|
+
isNegative: 'studio.isNegative',
|
|
20
|
+
/**
|
|
21
|
+
* Caller went silent — Vapi idle hook / Studio timer injects this portal.
|
|
22
|
+
* Ask “still there?” twice, then endCall.
|
|
23
|
+
*/
|
|
24
|
+
isStillThere: 'studio.isStillThere',
|
|
25
|
+
/** Synthetic: channel delivered tool results for the pending toolCall. */
|
|
26
|
+
isToolResult: 'studio.isToolResult',
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=standard-intentions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"standard-intentions.js","sourceRoot":"","sources":["../../src/intentions/standard-intentions.ts"],"names":[],"mappings":";;;AAAA,4EAA4E;AAC/D,QAAA,mBAAmB,GAAG;IACjC,SAAS,EAAE,kBAAkB;IAC7B,iBAAiB,EAAE,0BAA0B;IAC7C,OAAO,EAAE,gBAAgB;IACzB,8EAA8E;IAC9E,KAAK,EAAE,cAAc;IACrB;;;OAGG;IACH,mBAAmB,EAAE,4BAA4B;IACjD,wDAAwD;IACxD,UAAU,EAAE,mBAAmB;IAC/B,kDAAkD;IAClD,UAAU,EAAE,mBAAmB;IAC/B;;;OAGG;IACH,YAAY,EAAE,qBAAqB;IACnC,0EAA0E;IAC1E,YAAY,EAAE,qBAAqB;CAC3B,CAAC"}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import type { SupervisedConversation } from '../conversation/supervised-conversation';
|
|
2
|
+
import type { ListenExpectation } from '../conversation/listen-expectation';
|
|
3
|
+
import type { ConversationHistory } from '../conversation/conversation-history';
|
|
4
|
+
import type { ConversationSchema, DefaultConversationSchema, SchemaMemory, SchemaVariables } from '../conversation/conversation-schema';
|
|
5
|
+
import type { ConversationOutput, NodeResult } from '../output/conversation-output';
|
|
6
|
+
import type { EventService } from '../events/event.service';
|
|
7
|
+
import type { IntegrationClient, IntegrationRequest, IntegrationResponse } from '../integrations/integration-client';
|
|
8
|
+
import type { BrainService } from '../brain/brain.port';
|
|
9
|
+
import type { BrainClarifyRequest, BrainClarifyResult } from '../brain/brain-clarify';
|
|
10
|
+
import type { BrainJudgeRequest, BrainJudgeResult } from '../brain/brain-judge';
|
|
11
|
+
import type { CatchDirective } from './catch-directive';
|
|
12
|
+
import type { FormsService } from '../forms/forms.service';
|
|
13
|
+
import type { FormExposeHandle, FormExposeSpec, FormValues } from '../forms/form.types';
|
|
14
|
+
import { type ChannelToolResult, type ChannelToolsApi, type VapiTurnContext } from '../channel/channel-tools';
|
|
15
|
+
import { type StudioTasksApi } from '../tasks/studio-task-queue';
|
|
16
|
+
/**
|
|
17
|
+
* Typed view of the Conversation for Nodes.
|
|
18
|
+
* Inner types come from the app ConversationSchema generic.
|
|
19
|
+
*/
|
|
20
|
+
export interface ConversationView<TSchema extends ConversationSchema = DefaultConversationSchema> {
|
|
21
|
+
id: string;
|
|
22
|
+
providerCallId: string;
|
|
23
|
+
flowId: string;
|
|
24
|
+
variables: SchemaVariables<TSchema>;
|
|
25
|
+
memory: SchemaMemory<TSchema>;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Node execution context — fully schema-aware.
|
|
29
|
+
* `ctx.memory.foo` and `ctx.conversation.variables.bar` are typed from TSchema.
|
|
30
|
+
*/
|
|
31
|
+
export interface NodeContext<TSchema extends ConversationSchema = DefaultConversationSchema> {
|
|
32
|
+
runtime: SupervisedConversation;
|
|
33
|
+
conversation: ConversationView<TSchema>;
|
|
34
|
+
userText: string;
|
|
35
|
+
output: ConversationOutput;
|
|
36
|
+
events: EventService;
|
|
37
|
+
/** Same object as `conversation.memory`, typed. */
|
|
38
|
+
memory: SchemaMemory<TSchema>;
|
|
39
|
+
/**
|
|
40
|
+
* Intention currently being considered for transfer (set during before()/run()).
|
|
41
|
+
*/
|
|
42
|
+
intention: string | null;
|
|
43
|
+
/**
|
|
44
|
+
* Compact chat + node path from before this candidate is entered.
|
|
45
|
+
* Use for iteration counts / "were we just in X?".
|
|
46
|
+
*/
|
|
47
|
+
history: ConversationHistory;
|
|
48
|
+
/** How many times `nodeId` has already been entered this call. */
|
|
49
|
+
visitCount: (nodeId: string) => number;
|
|
50
|
+
/** Last entered node id, or null at the start. */
|
|
51
|
+
previousNodeId: string | null;
|
|
52
|
+
/**
|
|
53
|
+
* Ask Brain a clarification question with a required object answer shape.
|
|
54
|
+
* Always resolves to `{ answer: object }`.
|
|
55
|
+
*/
|
|
56
|
+
clarify: <TAnswer extends Record<string, unknown> = Record<string, unknown>>(request: BrainClarifyRequest) => Promise<BrainClarifyResult<TAnswer>>;
|
|
57
|
+
/**
|
|
58
|
+
* LLM-as-a-judge: pass/fail + reasoning + confidence for evals (rarely live).
|
|
59
|
+
*/
|
|
60
|
+
judge: <TContext = unknown>(request: BrainJudgeRequest<TContext>) => Promise<BrainJudgeResult>;
|
|
61
|
+
/**
|
|
62
|
+
* Signed outbound HTTP (JWT HMAC in x-signature). Conversation ids filled in.
|
|
63
|
+
*/
|
|
64
|
+
integrations: {
|
|
65
|
+
request: <T = unknown>(input: Omit<IntegrationRequest, 'meta'> & {
|
|
66
|
+
meta?: IntegrationRequest['meta'];
|
|
67
|
+
}) => Promise<IntegrationResponse<T>>;
|
|
68
|
+
};
|
|
69
|
+
/**
|
|
70
|
+
* Blocking form expose (Studio modal / Formsster). Requires a dispose adapter.
|
|
71
|
+
* Live Vapi should use `open` so the Custom LLM turn can finish (TTS) before fillout.
|
|
72
|
+
* `hasPending` is true while an expose awaits submit (silence/ghosting must not end).
|
|
73
|
+
*/
|
|
74
|
+
forms: {
|
|
75
|
+
expose: (spec: FormExposeSpec) => Promise<FormValues>;
|
|
76
|
+
/** Deliver + speak wait copy, return without blocking the channel turn. */
|
|
77
|
+
open: (spec: FormExposeSpec) => Promise<FormExposeHandle>;
|
|
78
|
+
/** Re-dispose the open expose (caller never got the SMS / link). */
|
|
79
|
+
resend: () => Promise<FormExposeHandle | null>;
|
|
80
|
+
/** Take submitted values after {@link open} (clears the expose). */
|
|
81
|
+
claimSubmitted: () => FormValues | null;
|
|
82
|
+
hasPending: () => boolean;
|
|
83
|
+
hasUnclaimedSubmit: () => boolean;
|
|
84
|
+
};
|
|
85
|
+
/**
|
|
86
|
+
* Tools advertised on this channel turn (Vapi Custom LLM `body.tools`).
|
|
87
|
+
* Empty in Studio unless the app stashes a snapshot.
|
|
88
|
+
*/
|
|
89
|
+
tools: ChannelToolsApi;
|
|
90
|
+
/** Tool results from this Custom LLM request (`role:tool` messages). */
|
|
91
|
+
toolResults: () => ChannelToolResult[];
|
|
92
|
+
/** Lookup by tool name or tool_call id. */
|
|
93
|
+
toolResult: (nameOrId: string) => ChannelToolResult | undefined;
|
|
94
|
+
/**
|
|
95
|
+
* Vapi call/turn metadata for this request (null fields when not delivered).
|
|
96
|
+
*/
|
|
97
|
+
vapi: VapiTurnContext;
|
|
98
|
+
/**
|
|
99
|
+
* Background / waitable work queue (I/O counterpart to the speech phrase pool).
|
|
100
|
+
* Prefer `mode: 'async'` for multi-second side effects with a spoken bridge;
|
|
101
|
+
* `mode: 'wait'` when the next CTA needs the result.
|
|
102
|
+
*/
|
|
103
|
+
tasks: StudioTasksApi;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Node lifecycle (per turn selection) — declare overrides in this order:
|
|
107
|
+
* before() → authorize / prepare (return false to reject); async prep / warms here
|
|
108
|
+
* listen() → register listen expectation before speech (no I/O)
|
|
109
|
+
* run() → speech + one terminal output (do not overload with integrations)
|
|
110
|
+
* after() → teardown for this Node execution (non-speech)
|
|
111
|
+
* catch() → recover from FlowUncertainError / other errors
|
|
112
|
+
*/
|
|
113
|
+
export declare abstract class AgentNode<TSchema extends ConversationSchema = DefaultConversationSchema> {
|
|
114
|
+
/**
|
|
115
|
+
* Seconds the channel waits after a user pause before closing this Node's
|
|
116
|
+
* listen. Override on the subclass. `listen()` / `sayAndListen({ timeoutSeconds })`
|
|
117
|
+
* can still override per turn.
|
|
118
|
+
*/
|
|
119
|
+
listenTimeoutSeconds: number;
|
|
120
|
+
/**
|
|
121
|
+
* When false, the next listen is not barge-in: Custom LLM overlap is queued
|
|
122
|
+
* until `listenTimeoutSeconds` of silence after the last fragment.
|
|
123
|
+
*/
|
|
124
|
+
interruptible: boolean;
|
|
125
|
+
/**
|
|
126
|
+
* CAN gate + prepare. Return false to reject this candidate.
|
|
127
|
+
* Prefer async prep / warms here (spawn without await when speech must stay fast).
|
|
128
|
+
*/
|
|
129
|
+
before(_ctx: NodeContext<TSchema>): Promise<boolean>;
|
|
130
|
+
listen(_ctx: NodeContext<TSchema>): Promise<ListenExpectation | null>;
|
|
131
|
+
/** Speech + one terminal output. Do not overload with integrations — use before()/after(). */
|
|
132
|
+
abstract run(ctx: NodeContext<TSchema>): Promise<NodeResult>;
|
|
133
|
+
/** Non-speech teardown after the terminal action. */
|
|
134
|
+
after(_ctx: NodeContext<TSchema>, _result: NodeResult): Promise<void>;
|
|
135
|
+
/**
|
|
136
|
+
* Handle errors thrown from run() (e.g. FlowUncertainError).
|
|
137
|
+
* Return restartNode() / forceIntention(...) / catchResult(...) / rethrowCatch().
|
|
138
|
+
* Default: rethrow.
|
|
139
|
+
*/
|
|
140
|
+
catch(_ctx: NodeContext<TSchema>, _error: unknown): Promise<CatchDirective>;
|
|
141
|
+
}
|
|
142
|
+
export declare const STUDIO_NODE_REGISTRY: unique symbol;
|
|
143
|
+
/** Runtime registry is schema-erased; Nodes keep compile-time schema via their class generic. */
|
|
144
|
+
export type AgentNodeRegistry = Map<string, AgentNode<any>>;
|
|
145
|
+
export declare function conversationViewFromRuntime<TSchema extends ConversationSchema = DefaultConversationSchema>(runtime: SupervisedConversation): ConversationView<TSchema>;
|
|
146
|
+
export declare function nodeContextFromRuntime<TSchema extends ConversationSchema = DefaultConversationSchema>(input: {
|
|
147
|
+
runtime: SupervisedConversation;
|
|
148
|
+
userText: string;
|
|
149
|
+
output: ConversationOutput;
|
|
150
|
+
events: EventService;
|
|
151
|
+
brain: BrainService;
|
|
152
|
+
integrations?: IntegrationClient;
|
|
153
|
+
forms?: FormsService;
|
|
154
|
+
intention?: string | null;
|
|
155
|
+
}): NodeContext<TSchema>;
|
|
156
|
+
//# sourceMappingURL=agent-node.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-node.d.ts","sourceRoot":"","sources":["../../src/node/agent-node.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.STUDIO_NODE_REGISTRY = exports.AgentNode = void 0;
|
|
4
|
+
exports.conversationViewFromRuntime = conversationViewFromRuntime;
|
|
5
|
+
exports.nodeContextFromRuntime = nodeContextFromRuntime;
|
|
6
|
+
const conversation_history_1 = require("../conversation/conversation-history");
|
|
7
|
+
const catch_directive_1 = require("./catch-directive");
|
|
8
|
+
const listen_timeout_1 = require("../conversation/listen-timeout");
|
|
9
|
+
const channel_tools_1 = require("../channel/channel-tools");
|
|
10
|
+
const studio_task_queue_1 = require("../tasks/studio-task-queue");
|
|
11
|
+
/**
|
|
12
|
+
* Node lifecycle (per turn selection) — declare overrides in this order:
|
|
13
|
+
* before() → authorize / prepare (return false to reject); async prep / warms here
|
|
14
|
+
* listen() → register listen expectation before speech (no I/O)
|
|
15
|
+
* run() → speech + one terminal output (do not overload with integrations)
|
|
16
|
+
* after() → teardown for this Node execution (non-speech)
|
|
17
|
+
* catch() → recover from FlowUncertainError / other errors
|
|
18
|
+
*/
|
|
19
|
+
class AgentNode {
|
|
20
|
+
/**
|
|
21
|
+
* Seconds the channel waits after a user pause before closing this Node's
|
|
22
|
+
* listen. Override on the subclass. `listen()` / `sayAndListen({ timeoutSeconds })`
|
|
23
|
+
* can still override per turn.
|
|
24
|
+
*/
|
|
25
|
+
listenTimeoutSeconds = listen_timeout_1.DEFAULT_LISTEN_TIMEOUT_SECONDS;
|
|
26
|
+
/**
|
|
27
|
+
* When false, the next listen is not barge-in: Custom LLM overlap is queued
|
|
28
|
+
* until `listenTimeoutSeconds` of silence after the last fragment.
|
|
29
|
+
*/
|
|
30
|
+
interruptible = true;
|
|
31
|
+
/**
|
|
32
|
+
* CAN gate + prepare. Return false to reject this candidate.
|
|
33
|
+
* Prefer async prep / warms here (spawn without await when speech must stay fast).
|
|
34
|
+
*/
|
|
35
|
+
async before(_ctx) {
|
|
36
|
+
return true;
|
|
37
|
+
}
|
|
38
|
+
async listen(_ctx) {
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
/** Non-speech teardown after the terminal action. */
|
|
42
|
+
async after(_ctx, _result) {
|
|
43
|
+
// no-op
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Handle errors thrown from run() (e.g. FlowUncertainError).
|
|
47
|
+
* Return restartNode() / forceIntention(...) / catchResult(...) / rethrowCatch().
|
|
48
|
+
* Default: rethrow.
|
|
49
|
+
*/
|
|
50
|
+
async catch(_ctx, _error) {
|
|
51
|
+
return (0, catch_directive_1.rethrowCatch)();
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
exports.AgentNode = AgentNode;
|
|
55
|
+
exports.STUDIO_NODE_REGISTRY = Symbol('STUDIO_NODE_REGISTRY');
|
|
56
|
+
function conversationViewFromRuntime(runtime) {
|
|
57
|
+
return {
|
|
58
|
+
id: runtime.conversationId,
|
|
59
|
+
providerCallId: runtime.providerCallId,
|
|
60
|
+
flowId: runtime.flowId,
|
|
61
|
+
variables: runtime.variables,
|
|
62
|
+
memory: runtime.memory,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
function nodeContextFromRuntime(input) {
|
|
66
|
+
const conversation = conversationViewFromRuntime(input.runtime);
|
|
67
|
+
const history = input.runtime.history;
|
|
68
|
+
const integrations = input.integrations;
|
|
69
|
+
const forms = input.forms;
|
|
70
|
+
const meta = input.runtime.metadata;
|
|
71
|
+
const toolsRaw = meta[channel_tools_1.CHANNEL_META.tools];
|
|
72
|
+
const toolsList = Array.isArray(toolsRaw)
|
|
73
|
+
? toolsRaw
|
|
74
|
+
: [];
|
|
75
|
+
const tools = (0, channel_tools_1.channelToolsApiFromList)(toolsList);
|
|
76
|
+
const resultsRaw = meta[channel_tools_1.CHANNEL_META.toolResults];
|
|
77
|
+
const toolResultsList = Array.isArray(resultsRaw)
|
|
78
|
+
? resultsRaw
|
|
79
|
+
: [];
|
|
80
|
+
const vapiRaw = meta[channel_tools_1.CHANNEL_META.vapi];
|
|
81
|
+
const vapi = vapiRaw && typeof vapiRaw === 'object'
|
|
82
|
+
? vapiRaw
|
|
83
|
+
: {
|
|
84
|
+
callId: input.runtime.providerCallId ?? null,
|
|
85
|
+
};
|
|
86
|
+
return {
|
|
87
|
+
runtime: input.runtime,
|
|
88
|
+
conversation,
|
|
89
|
+
userText: input.userText,
|
|
90
|
+
output: input.output,
|
|
91
|
+
events: input.events,
|
|
92
|
+
memory: conversation.memory,
|
|
93
|
+
intention: input.intention ?? null,
|
|
94
|
+
history,
|
|
95
|
+
visitCount: (nodeId) => (0, conversation_history_1.countNodeVisits)(history, nodeId),
|
|
96
|
+
previousNodeId: (0, conversation_history_1.lastVisitedNodeId)(history),
|
|
97
|
+
clarify: (request) => input.brain.clarify({
|
|
98
|
+
...request,
|
|
99
|
+
meta: {
|
|
100
|
+
providerCallId: input.runtime.providerCallId,
|
|
101
|
+
conversationId: input.runtime.conversationId,
|
|
102
|
+
...request.meta,
|
|
103
|
+
},
|
|
104
|
+
}),
|
|
105
|
+
judge: (request) => input.brain.judge({
|
|
106
|
+
...request,
|
|
107
|
+
meta: {
|
|
108
|
+
providerCallId: input.runtime.providerCallId,
|
|
109
|
+
conversationId: input.runtime.conversationId,
|
|
110
|
+
...request.meta,
|
|
111
|
+
},
|
|
112
|
+
}),
|
|
113
|
+
integrations: {
|
|
114
|
+
request: (request) => {
|
|
115
|
+
if (!integrations) {
|
|
116
|
+
throw new Error('IntegrationClient is not wired on this NodeContext');
|
|
117
|
+
}
|
|
118
|
+
return integrations.request({
|
|
119
|
+
...request,
|
|
120
|
+
meta: {
|
|
121
|
+
conversationId: input.runtime.conversationId,
|
|
122
|
+
runtimeInstanceId: input.runtime.runtimeInstanceId,
|
|
123
|
+
providerCallId: input.runtime.providerCallId,
|
|
124
|
+
...request.meta,
|
|
125
|
+
},
|
|
126
|
+
});
|
|
127
|
+
},
|
|
128
|
+
},
|
|
129
|
+
forms: {
|
|
130
|
+
expose: (spec) => {
|
|
131
|
+
if (!forms) {
|
|
132
|
+
throw new Error('FormsService is not wired on this NodeContext');
|
|
133
|
+
}
|
|
134
|
+
return forms.expose(input.runtime.conversationId, spec);
|
|
135
|
+
},
|
|
136
|
+
open: (spec) => {
|
|
137
|
+
if (!forms) {
|
|
138
|
+
throw new Error('FormsService is not wired on this NodeContext');
|
|
139
|
+
}
|
|
140
|
+
return forms.open(input.runtime.conversationId, spec);
|
|
141
|
+
},
|
|
142
|
+
resend: () => {
|
|
143
|
+
if (!forms) {
|
|
144
|
+
throw new Error('FormsService is not wired on this NodeContext');
|
|
145
|
+
}
|
|
146
|
+
return forms.resend(input.runtime.conversationId);
|
|
147
|
+
},
|
|
148
|
+
claimSubmitted: () => {
|
|
149
|
+
if (!forms)
|
|
150
|
+
return null;
|
|
151
|
+
return forms.claimSubmitted(input.runtime.conversationId);
|
|
152
|
+
},
|
|
153
|
+
hasPending: () => {
|
|
154
|
+
if (!forms)
|
|
155
|
+
return false;
|
|
156
|
+
return forms.getPending(input.runtime.conversationId) != null;
|
|
157
|
+
},
|
|
158
|
+
hasUnclaimedSubmit: () => {
|
|
159
|
+
if (!forms)
|
|
160
|
+
return false;
|
|
161
|
+
return forms.hasUnclaimedSubmit(input.runtime.conversationId);
|
|
162
|
+
},
|
|
163
|
+
},
|
|
164
|
+
tools,
|
|
165
|
+
toolResults: () => toolResultsList,
|
|
166
|
+
toolResult: (nameOrId) => {
|
|
167
|
+
const key = nameOrId.trim();
|
|
168
|
+
return (toolResultsList.find((r) => r.name === key || r.toolCallId === key) ?? undefined);
|
|
169
|
+
},
|
|
170
|
+
vapi,
|
|
171
|
+
tasks: (0, studio_task_queue_1.createStudioTasksApi)({
|
|
172
|
+
events: input.events,
|
|
173
|
+
runtime: input.runtime,
|
|
174
|
+
conversationId: input.runtime.conversationId,
|
|
175
|
+
runtimeInstanceId: input.runtime.runtimeInstanceId,
|
|
176
|
+
}),
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
//# sourceMappingURL=agent-node.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-node.js","sourceRoot":"","sources":["../../src/node/agent-node.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Node catch recovery directives — returned from AgentNode.catch().
|
|
3
|
+
* Prefer helpers: restartNode(), forceIntention(...).
|
|
4
|
+
*/
|
|
5
|
+
import type { NodeResult } from '../output/conversation-output';
|
|
6
|
+
export type CatchDirective = {
|
|
7
|
+
kind: 'restartNode';
|
|
8
|
+
} | {
|
|
9
|
+
kind: 'forceIntention';
|
|
10
|
+
intention: string;
|
|
11
|
+
} | {
|
|
12
|
+
kind: 'result';
|
|
13
|
+
result: NodeResult;
|
|
14
|
+
} | {
|
|
15
|
+
kind: 'rethrow';
|
|
16
|
+
};
|
|
17
|
+
/** Re-run the same Node (listen → run) within the current turn. */
|
|
18
|
+
export declare function restartNode(): CatchDirective;
|
|
19
|
+
/** Abort current Node and route this turn to the given intention. */
|
|
20
|
+
export declare function forceIntention(intention: string): CatchDirective;
|
|
21
|
+
/** Finish the turn with an explicit output result (sayAndListen / endCall / …). */
|
|
22
|
+
export declare function catchResult(result: NodeResult): CatchDirective;
|
|
23
|
+
/** Let Supervisor rethrow the original error. */
|
|
24
|
+
export declare function rethrowCatch(): CatchDirective;
|
|
25
|
+
/**
|
|
26
|
+
* Thrown by Node logic when the flow cannot decide how to continue.
|
|
27
|
+
* catch() can map this to restartNode / forceIntention / etc.
|
|
28
|
+
*/
|
|
29
|
+
export declare class FlowUncertainError extends Error {
|
|
30
|
+
readonly details?: Record<string, unknown>;
|
|
31
|
+
constructor(message: string, details?: Record<string, unknown>);
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=catch-directive.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catch-directive.d.ts","sourceRoot":"","sources":["../../src/node/catch-directive.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAEhE,MAAM,MAAM,cAAc,GACtB;IAAE,IAAI,EAAE,aAAa,CAAA;CAAE,GACvB;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAC7C;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,UAAU,CAAA;CAAE,GACtC;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,CAAC;AAExB,mEAAmE;AACnE,wBAAgB,WAAW,IAAI,cAAc,CAE5C;AAED,qEAAqE;AACrE,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc,CAEhE;AAED,mFAAmF;AACnF,wBAAgB,WAAW,CAAC,MAAM,EAAE,UAAU,GAAG,cAAc,CAE9D;AAED,iDAAiD;AACjD,wBAAgB,YAAY,IAAI,cAAc,CAE7C;AAED;;;GAGG;AACH,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,SAAgB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBAE/B,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAKtE"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Node catch recovery directives — returned from AgentNode.catch().
|
|
4
|
+
* Prefer helpers: restartNode(), forceIntention(...).
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.FlowUncertainError = void 0;
|
|
8
|
+
exports.restartNode = restartNode;
|
|
9
|
+
exports.forceIntention = forceIntention;
|
|
10
|
+
exports.catchResult = catchResult;
|
|
11
|
+
exports.rethrowCatch = rethrowCatch;
|
|
12
|
+
/** Re-run the same Node (listen → run) within the current turn. */
|
|
13
|
+
function restartNode() {
|
|
14
|
+
return { kind: 'restartNode' };
|
|
15
|
+
}
|
|
16
|
+
/** Abort current Node and route this turn to the given intention. */
|
|
17
|
+
function forceIntention(intention) {
|
|
18
|
+
return { kind: 'forceIntention', intention };
|
|
19
|
+
}
|
|
20
|
+
/** Finish the turn with an explicit output result (sayAndListen / endCall / …). */
|
|
21
|
+
function catchResult(result) {
|
|
22
|
+
return { kind: 'result', result };
|
|
23
|
+
}
|
|
24
|
+
/** Let Supervisor rethrow the original error. */
|
|
25
|
+
function rethrowCatch() {
|
|
26
|
+
return { kind: 'rethrow' };
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Thrown by Node logic when the flow cannot decide how to continue.
|
|
30
|
+
* catch() can map this to restartNode / forceIntention / etc.
|
|
31
|
+
*/
|
|
32
|
+
class FlowUncertainError extends Error {
|
|
33
|
+
details;
|
|
34
|
+
constructor(message, details) {
|
|
35
|
+
super(message);
|
|
36
|
+
this.name = 'FlowUncertainError';
|
|
37
|
+
this.details = details;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
exports.FlowUncertainError = FlowUncertainError;
|
|
41
|
+
//# sourceMappingURL=catch-directive.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catch-directive.js","sourceRoot":"","sources":["../../src/node/catch-directive.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAWH,kCAEC;AAGD,wCAEC;AAGD,kCAEC;AAGD,oCAEC;AAlBD,mEAAmE;AACnE,SAAgB,WAAW;IACzB,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;AACjC,CAAC;AAED,qEAAqE;AACrE,SAAgB,cAAc,CAAC,SAAiB;IAC9C,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,SAAS,EAAE,CAAC;AAC/C,CAAC;AAED,mFAAmF;AACnF,SAAgB,WAAW,CAAC,MAAkB;IAC5C,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;AACpC,CAAC;AAED,iDAAiD;AACjD,SAAgB,YAAY;IAC1B,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;AAC7B,CAAC;AAED;;;GAGG;AACH,MAAa,kBAAmB,SAAQ,KAAK;IAC3B,OAAO,CAA2B;IAElD,YAAmB,OAAe,EAAE,OAAiC;QACnE,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;QACjC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;CACF;AARD,gDAQC"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import type { ListenExtractField, ListenExtractSpec, SayAndListenOptions } from '../conversation/listen-expectation';
|
|
2
|
+
export type OutputKind = 'say' | 'sayAndListen' | 'endCall' | 'transferToHuman' | 'handoff' | 'continueTo' | 'toolCall';
|
|
3
|
+
export interface ToolCallRequest {
|
|
4
|
+
/** Advertised channel tool / function name (e.g. Vapi `model.tools[].function.name`). */
|
|
5
|
+
name: string;
|
|
6
|
+
arguments?: Record<string, unknown>;
|
|
7
|
+
}
|
|
8
|
+
export interface OutputAction {
|
|
9
|
+
kind: OutputKind;
|
|
10
|
+
text?: string;
|
|
11
|
+
destination?: string;
|
|
12
|
+
/**
|
|
13
|
+
* Workflow module id to hand off to (e.g. `identity`, `farewell`).
|
|
14
|
+
* Present when kind === 'handoff'. Compiles to Vapi Squad handoff.
|
|
15
|
+
*/
|
|
16
|
+
handoffTo?: string;
|
|
17
|
+
handoffReason?: string;
|
|
18
|
+
handoffPayload?: Record<string, unknown>;
|
|
19
|
+
/** Vapi assistantName resolved from workflow config (adapter may fill). */
|
|
20
|
+
assistantName?: string;
|
|
21
|
+
/**
|
|
22
|
+
* Same-flow jump target node id (kind === 'continueTo').
|
|
23
|
+
* Does not emit a Squad handoff — stays on the current assistant.
|
|
24
|
+
*/
|
|
25
|
+
continueToNodeId?: string;
|
|
26
|
+
/** Present when sayAndListen declared listen/extract for the next answer. */
|
|
27
|
+
sayAndListen?: SayAndListenOptions;
|
|
28
|
+
/** Present when kind === 'toolCall' — raw channel tool by advertised name. */
|
|
29
|
+
toolCall?: ToolCallRequest;
|
|
30
|
+
}
|
|
31
|
+
export type NodeResult = OutputAction;
|
|
32
|
+
export interface ConversationOutput {
|
|
33
|
+
say(text: string): Promise<void>;
|
|
34
|
+
sayAndListen(text: string, options?: SayAndListenOptions): Promise<NodeResult>;
|
|
35
|
+
endCall(text?: string): Promise<NodeResult>;
|
|
36
|
+
transferToHuman(destination?: string): Promise<NodeResult>;
|
|
37
|
+
/**
|
|
38
|
+
* Leave this module without ending the Conversation.
|
|
39
|
+
* Compiles to Vapi Squad handoff (or Studio in-process module switch).
|
|
40
|
+
* Prefer `continueTo` when staying on a single assistant.
|
|
41
|
+
*/
|
|
42
|
+
handoff(input: {
|
|
43
|
+
to: string;
|
|
44
|
+
reason?: string;
|
|
45
|
+
payload?: Record<string, unknown>;
|
|
46
|
+
text?: string;
|
|
47
|
+
}): Promise<NodeResult>;
|
|
48
|
+
/**
|
|
49
|
+
* Jump to another Node in the **same** loaded flow and speak its entry
|
|
50
|
+
* on the next turn (Studio / same-assistant Vapi). Does not emit Squad handoff.
|
|
51
|
+
*/
|
|
52
|
+
continueTo(input: {
|
|
53
|
+
nodeId: string;
|
|
54
|
+
reason?: string;
|
|
55
|
+
text?: string;
|
|
56
|
+
}): Promise<NodeResult>;
|
|
57
|
+
/**
|
|
58
|
+
* Request a **channel tool by the function name Vapi advertised** on this
|
|
59
|
+
* assistant (`model.tools[].function.name`). Compiles to OpenAI-compatible
|
|
60
|
+
* `tool_calls` SSE — same framing as `endCall` / `transferToHuman` / `handoff`.
|
|
61
|
+
*
|
|
62
|
+
* Prefer semantic helpers when they apply. This is for app-specific tools
|
|
63
|
+
* (SMS, CRM lookup, still-there hook, …) that you pre-provision on the assistant.
|
|
64
|
+
*/
|
|
65
|
+
invokeAdvertisedTool(input: {
|
|
66
|
+
name: string;
|
|
67
|
+
arguments?: Record<string, unknown>;
|
|
68
|
+
/** Optional speech before the tool call is emitted. */
|
|
69
|
+
text?: string;
|
|
70
|
+
}): Promise<NodeResult>;
|
|
71
|
+
/**
|
|
72
|
+
* @deprecated Use {@link invokeAdvertisedTool}. Kept for older app code.
|
|
73
|
+
*/
|
|
74
|
+
toolCall(input: {
|
|
75
|
+
name: string;
|
|
76
|
+
arguments?: Record<string, unknown>;
|
|
77
|
+
text?: string;
|
|
78
|
+
}): Promise<NodeResult>;
|
|
79
|
+
readonly actions: OutputAction[];
|
|
80
|
+
}
|
|
81
|
+
export declare class BufferedConversationOutput implements ConversationOutput {
|
|
82
|
+
readonly actions: OutputAction[];
|
|
83
|
+
private readonly onSay?;
|
|
84
|
+
constructor(onSay?: (text: string) => Promise<void>);
|
|
85
|
+
say(text: string): Promise<void>;
|
|
86
|
+
sayAndListen(text: string, options?: SayAndListenOptions): Promise<NodeResult>;
|
|
87
|
+
endCall(text?: string): Promise<NodeResult>;
|
|
88
|
+
transferToHuman(destination?: string): Promise<NodeResult>;
|
|
89
|
+
handoff(input: {
|
|
90
|
+
to: string;
|
|
91
|
+
reason?: string;
|
|
92
|
+
payload?: Record<string, unknown>;
|
|
93
|
+
text?: string;
|
|
94
|
+
}): Promise<NodeResult>;
|
|
95
|
+
continueTo(input: {
|
|
96
|
+
nodeId: string;
|
|
97
|
+
reason?: string;
|
|
98
|
+
text?: string;
|
|
99
|
+
}): Promise<NodeResult>;
|
|
100
|
+
invokeAdvertisedTool(input: {
|
|
101
|
+
name: string;
|
|
102
|
+
arguments?: Record<string, unknown>;
|
|
103
|
+
text?: string;
|
|
104
|
+
}): Promise<NodeResult>;
|
|
105
|
+
toolCall(input: {
|
|
106
|
+
name: string;
|
|
107
|
+
arguments?: Record<string, unknown>;
|
|
108
|
+
text?: string;
|
|
109
|
+
}): Promise<NodeResult>;
|
|
110
|
+
}
|
|
111
|
+
/** Re-export for callers that import extract types via output. */
|
|
112
|
+
export type { ListenExtractField, ListenExtractSpec, SayAndListenOptions };
|
|
113
|
+
//# sourceMappingURL=conversation-output.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conversation-output.d.ts","sourceRoot":"","sources":["../../src/output/conversation-output.ts"],"names":[],"mappings":"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"}
|