[{"data":1,"prerenderedAt":2988},["ShallowReactive",2],{"navigation":3,"/chat/option-d-chat-api":879,"/chat/option-d-chat-api-surround":2983},[4,22,45,115,156,187,214,235,264,295,318,361,389,418,436,470,491,534,548,571,632,670,693,757,850],{"title":5,"path":6,"stem":7,"children":8,"icon":11},"Introduction","/introduction","01.introduction/1.index",[9,12,17],{"title":10,"path":6,"stem":7,"icon":11},"What is Orkestia?","i-lucide-sparkles",{"title":13,"path":14,"stem":15,"icon":16},"Core Philosophy","/introduction/core-philosophy","01.introduction/2.core-philosophy","i-lucide-shield-check",{"title":18,"path":19,"stem":20,"icon":21},"Key Benefits","/introduction/key-benefits","01.introduction/3.key-benefits","i-lucide-trophy",{"title":23,"path":24,"stem":25,"children":26,"icon":29},"Getting Started","/getting-started","02.getting-started/1.index",[27,30,35,40],{"title":28,"path":24,"stem":25,"icon":29},"Quick Start","i-lucide-rocket",{"title":31,"path":32,"stem":33,"icon":34},"Architecture Overview","/getting-started/architecture-overview","02.getting-started/2.architecture-overview","i-lucide-layout-dashboard",{"title":36,"path":37,"stem":38,"icon":39},"Concepts at a Glance","/getting-started/concepts","02.getting-started/3.concepts","i-lucide-list",{"title":41,"path":42,"stem":43,"icon":44},"Connect an AI Assistant","/getting-started/connect-an-ai-assistant","02.getting-started/4.connect-an-ai-assistant","i-lucide-bot",{"title":46,"path":47,"stem":48,"children":49,"icon":51},"Core Concepts","/concepts","03.concepts/01.index",[50,52,57,62,67,71,76,81,86,91,96,100,105,110],{"title":46,"path":47,"stem":48,"icon":51},"i-lucide-book-open",{"title":53,"path":54,"stem":55,"icon":56},"Workflows","/concepts/workflows","03.concepts/02.workflows","i-lucide-workflow",{"title":58,"path":59,"stem":60,"icon":61},"DGI — Dialog Generative Interface","/concepts/dgi","03.concepts/03.dgi","i-lucide-brain",{"title":63,"path":64,"stem":65,"icon":66},"Staff & AI Workforce Governance","/concepts/staff-governance","03.concepts/04.staff-governance","i-lucide-users-round",{"title":68,"path":69,"stem":70,"icon":44},"Agents — the execution substrate","/concepts/agents-platform","03.concepts/05.agents-platform",{"title":72,"path":73,"stem":74,"icon":75},"Runners & Execution Environments","/concepts/runners","03.concepts/06.runners","i-lucide-server-cog",{"title":77,"path":78,"stem":79,"icon":80},"Lumen Observability","/concepts/lumen","03.concepts/07.lumen","i-lucide-activity",{"title":82,"path":83,"stem":84,"icon":85},"Identity & Multi-Tenancy","/concepts/identity-multi-tenancy","03.concepts/08.identity-multi-tenancy","i-lucide-users",{"title":87,"path":88,"stem":89,"icon":90},"Billing, Pricing & Seats","/concepts/billing-and-seats","03.concepts/09.billing-and-seats","i-lucide-credit-card",{"title":92,"path":93,"stem":94,"icon":95},"App Data","/concepts/appdata","03.concepts/10.appdata","i-lucide-database",{"title":97,"path":98,"stem":99,"icon":61},"Engram","/concepts/engram","03.concepts/11.engram",{"title":101,"path":102,"stem":103,"icon":104},"DevKit","/concepts/devkit","03.concepts/12.devkit","i-lucide-terminal",{"title":106,"path":107,"stem":108,"icon":109},"App Host","/concepts/app-host","03.concepts/13.app-host","i-lucide-globe",{"title":111,"path":112,"stem":113,"icon":114},"Agent Exchange","/concepts/agent-exchange","03.concepts/14.agent-exchange","i-lucide-landmark",{"title":116,"path":117,"stem":118,"children":119,"icon":121},"Guides","/guides","04.guides/1.index",[120,122,127,132,137,142,147,151],{"title":116,"path":117,"stem":118,"icon":121},"i-lucide-compass",{"title":123,"path":124,"stem":125,"icon":126},"Building with DGI","/guides/building-with-dgi","04.guides/2.building-with-dgi","i-lucide-brain-circuit",{"title":128,"path":129,"stem":130,"icon":131},"Creating & Exposing Virtual Workflows","/guides/virtual-workflows","04.guides/4.virtual-workflows","i-lucide-blocks",{"title":133,"path":134,"stem":135,"icon":136},"Runner Management & Provisioning","/guides/runner-management","04.guides/5.runner-management","i-lucide-server",{"title":138,"path":139,"stem":140,"icon":141},"Security & Compliance","/guides/security-and-compliance","04.guides/7.security-and-compliance","i-lucide-shield",{"title":143,"path":144,"stem":145,"icon":146},"Tickets & Software Delivery","/guides/tickets-and-software-delivery","04.guides/8.tickets-and-software-delivery","i-lucide-ticket",{"title":148,"path":149,"stem":150},"Orkestia for AI-driven cloud infrastructure automation","/guides/cloud-automation-alternatives","04.guides/9.cloud-automation-alternatives",{"title":152,"path":153,"stem":154,"icon":155},"Typed decisions with TypeSafe","/guides/typed-decisions-with-typesafe","04.guides/9.typed-decisions-with-typesafe","i-lucide-git-branch",{"title":157,"path":158,"stem":159,"children":160,"icon":162},"Reference","/reference","05.reference/1.index",[161,163,168,173,177,182],{"title":157,"path":158,"stem":159,"icon":162},"i-lucide-library",{"title":164,"path":165,"stem":166,"icon":167},"Workflow Types & Registry","/reference/workflow-types-registry","05.reference/2.workflow-types-registry","i-lucide-list-tree",{"title":169,"path":170,"stem":171,"icon":172},"MCP Integration","/reference/mcp-integration","05.reference/3.mcp-integration","i-lucide-plug-zap",{"title":174,"path":175,"stem":176,"icon":104},"API & Tooling","/reference/api-tooling","05.reference/4.api-tooling",{"title":178,"path":179,"stem":180,"icon":181},"Integrations Catalog","/reference/integrations-catalog","05.reference/6.integrations-catalog","i-lucide-plug",{"title":183,"path":184,"stem":185,"icon":186},"Platform Services","/reference/platform-services","05.reference/7.platform-services","i-lucide-boxes",{"title":188,"path":189,"stem":190,"children":191,"icon":193},"Advanced Topics","/advanced","06.advanced/1.index",[192,194,199,204,209],{"title":188,"path":189,"stem":190,"icon":193},"i-lucide-flask-conical",{"title":195,"path":196,"stem":197,"icon":198},"Hybrid AI + Deterministic Execution","/advanced/hybrid-execution-model","06.advanced/2.hybrid-execution-model","i-lucide-git-merge",{"title":200,"path":201,"stem":202,"icon":203},"Drift Detection & Self-Healing","/advanced/drift-detection-self-healing","06.advanced/3.drift-detection-self-healing","i-lucide-heart-pulse",{"title":205,"path":206,"stem":207,"icon":208},"Governance & Approvals","/advanced/governance-and-approvals","06.advanced/4.governance-and-approvals","i-lucide-scale",{"title":210,"path":211,"stem":212,"icon":213},"Cost & Performance Optimization","/advanced/cost-and-performance","06.advanced/5.cost-and-performance","i-lucide-zap",{"title":215,"path":216,"stem":217,"children":218,"icon":220},"Operations","/operations","07.operations/1.index",[219,221,225,230],{"title":215,"path":216,"stem":217,"icon":220},"i-lucide-settings-2",{"title":222,"path":223,"stem":224,"icon":186},"Deployment Models","/operations/deployment-models","07.operations/2.deployment-models",{"title":226,"path":227,"stem":228,"icon":229},"Monitoring & Debugging","/operations/monitoring-and-debugging","07.operations/3.monitoring-and-debugging","i-lucide-bug",{"title":231,"path":232,"stem":233,"icon":234},"Best Practices","/operations/best-practices","07.operations/4.best-practices","i-lucide-check-check",{"title":236,"path":237,"stem":238,"children":239,"icon":241},"AWS Connections","/aws-connections","08.aws-connections/1.index",[240,242,245,250,255,260],{"title":236,"path":237,"stem":238,"icon":241},"i-simple-icons-amazonaws",{"title":23,"path":243,"stem":244,"icon":29},"/aws-connections/getting-started","08.aws-connections/2.getting-started",{"title":246,"path":247,"stem":248,"icon":249},"Setup Methods","/aws-connections/setup-methods","08.aws-connections/3.setup-methods","i-lucide-wrench",{"title":251,"path":252,"stem":253,"icon":254},"Managing Connections","/aws-connections/managing-connections","08.aws-connections/4.managing-connections","i-lucide-settings",{"title":256,"path":257,"stem":258,"icon":259},"Security Best Practices","/aws-connections/security-best-practices","08.aws-connections/5.security-best-practices","i-lucide-lock",{"title":261,"path":262,"stem":263,"icon":229},"Troubleshooting","/aws-connections/troubleshooting","08.aws-connections/6.troubleshooting",{"title":265,"path":266,"stem":267,"children":268,"icon":270},"Cloud Connections","/cloud-connections","09.cloud-connections/1.index",[269,271,276,281,286,291],{"title":265,"path":266,"stem":267,"icon":270},"i-lucide-cable",{"title":272,"path":273,"stem":274,"icon":275},"Google Cloud (GCP)","/cloud-connections/gcp","09.cloud-connections/2.gcp","i-simple-icons-googlecloud",{"title":277,"path":278,"stem":279,"icon":280},"Microsoft Azure","/cloud-connections/azure","09.cloud-connections/3.azure","i-simple-icons-microsoftazure",{"title":282,"path":283,"stem":284,"icon":285},"Magalu Cloud","/cloud-connections/magalu","09.cloud-connections/4.magalu","i-lucide-cloud",{"title":287,"path":288,"stem":289,"icon":290},"Kubernetes","/cloud-connections/kubernetes","09.cloud-connections/5.kubernetes","i-simple-icons-kubernetes",{"title":292,"path":293,"stem":294,"icon":208},"TypeSafe","/cloud-connections/typesafe","09.cloud-connections/6.typesafe",{"title":296,"path":297,"stem":298,"children":299,"icon":136},"DNS Providers","/dns-providers","10.dns-providers/1.index",[300,302,305,308,311,315],{"title":301,"path":297,"stem":298,"icon":136},"DNS Provider Connections",{"title":23,"path":303,"stem":304,"icon":29},"/dns-providers/getting-started","10.dns-providers/2.getting-started",{"title":246,"path":306,"stem":307,"icon":249},"/dns-providers/setup-methods","10.dns-providers/3.setup-methods",{"title":251,"path":309,"stem":310,"icon":254},"/dns-providers/managing-connections","10.dns-providers/4.managing-connections",{"title":312,"path":313,"stem":314,"icon":39},"Zones and Records","/dns-providers/zones-and-records","10.dns-providers/5.zones-and-records",{"title":261,"path":316,"stem":317,"icon":229},"/dns-providers/troubleshooting","10.dns-providers/6.troubleshooting",{"title":319,"path":320,"stem":321,"children":322,"icon":29},"Cloud Deploy","/cloud-deploy","11.cloud-deploy/01.index",[323,324,327,332,336,341,345,349,354,358],{"title":319,"path":320,"stem":321,"icon":29},{"title":23,"path":325,"stem":326,"icon":29},"/cloud-deploy/getting-started","11.cloud-deploy/02.getting-started",{"title":328,"path":329,"stem":330,"icon":331},"Creating a Site","/cloud-deploy/creating-a-site","11.cloud-deploy/03.creating-a-site","i-lucide-plus-circle",{"title":333,"path":334,"stem":335,"icon":34},"Site Overview and Deployments","/cloud-deploy/site-overview","11.cloud-deploy/04.site-overview",{"title":337,"path":338,"stem":339,"icon":340},"Deployment Progress and Success","/cloud-deploy/deployment-progress","11.cloud-deploy/05.deployment-progress","i-lucide-loader",{"title":342,"path":343,"stem":344,"icon":254},"Settings","/cloud-deploy/settings","11.cloud-deploy/06.settings",{"title":346,"path":347,"stem":348,"icon":109},"Custom Domains","/cloud-deploy/custom-domains","11.cloud-deploy/07.custom-domains",{"title":350,"path":351,"stem":352,"icon":353},"Resources, Releases, and Danger Zone","/cloud-deploy/resources-releases","11.cloud-deploy/08.resources-releases","i-lucide-package",{"title":355,"path":356,"stem":357,"icon":141},"Admin Dashboard","/cloud-deploy/admin-dashboard","11.cloud-deploy/09.admin-dashboard",{"title":261,"path":359,"stem":360,"icon":229},"/cloud-deploy/troubleshooting","11.cloud-deploy/10.troubleshooting",{"title":362,"path":363,"stem":364,"children":365,"icon":368},"User Onboarding","/user-onboarding","12.user-onboarding/1.index",[366,369,372,377,382,386],{"title":367,"path":363,"stem":364,"icon":368},"User Creation and Onboarding","i-lucide-user-plus",{"title":23,"path":370,"stem":371,"icon":29},"/user-onboarding/getting-started","12.user-onboarding/2.getting-started",{"title":373,"path":374,"stem":375,"icon":376},"Creating Your Organization","/user-onboarding/onboarding","12.user-onboarding/3.onboarding","i-lucide-building-2",{"title":378,"path":379,"stem":380,"icon":381},"Invitations","/user-onboarding/invitations","12.user-onboarding/4.invitations","i-lucide-mail",{"title":383,"path":384,"stem":385,"icon":254},"Managing Your Account","/user-onboarding/managing-account","12.user-onboarding/5.managing-account",{"title":261,"path":387,"stem":388,"icon":229},"/user-onboarding/troubleshooting","12.user-onboarding/6.troubleshooting",{"title":342,"path":390,"stem":391,"children":392,"icon":394},"/settings","13.settings/1.index",[393,395,400,404,409,413],{"title":342,"path":390,"stem":391,"icon":394},"i-lucide-sliders-horizontal",{"title":396,"path":397,"stem":398,"icon":399},"General Settings","/settings/general","13.settings/2.general","i-lucide-user",{"title":401,"path":402,"stem":403,"icon":85},"Members Settings","/settings/members","13.settings/3.members",{"title":405,"path":406,"stem":407,"icon":408},"Notifications Settings","/settings/notifications","13.settings/4.notifications","i-lucide-bell",{"title":410,"path":411,"stem":412,"icon":141},"Security Settings","/settings/security","13.settings/5.security",{"title":414,"path":415,"stem":416,"icon":417},"Signing Keys","/settings/keys","13.settings/6.keys","i-lucide-key-round",{"title":419,"path":420,"stem":421,"children":422,"icon":29},"App Enablement","/app-enablement","14.app-enablement/1.index",[423,424,428,432],{"title":419,"path":420,"stem":421,"icon":29},{"title":425,"path":426,"stem":427,"icon":417},"Sign in with Orkestia","/app-enablement/sign-in-with-orkestia","14.app-enablement/2.sign-in-with-orkestia",{"title":429,"path":430,"stem":431,"icon":95},"End-user data","/app-enablement/end-user-data","14.app-enablement/3.end-user-data",{"title":433,"path":434,"stem":435,"icon":131},"Compositions — use, invoke, share","/app-enablement/compositions","14.app-enablement/4.compositions",{"title":437,"path":438,"stem":439,"children":440,"icon":80},"Lumen","/lumen","15.lumen/1.index",[441,442,447,452,457,461,465],{"title":437,"path":438,"stem":439,"icon":80},{"title":443,"path":444,"stem":445,"icon":446},"Enable Lumen","/lumen/enable","15.lumen/2.enable","i-lucide-power",{"title":448,"path":449,"stem":450,"icon":451},"Send data","/lumen/send-data","15.lumen/3.send-data","i-lucide-upload",{"title":453,"path":454,"stem":455,"icon":456},"Collector","/lumen/collector","15.lumen/4.collector","i-lucide-container",{"title":458,"path":459,"stem":460,"icon":34},"Use Lumen","/lumen/observe","15.lumen/5.observe",{"title":462,"path":463,"stem":464,"icon":44},"Lumen MCP","/lumen/mcp","15.lumen/6.mcp",{"title":466,"path":467,"stem":468,"icon":469},"Query API","/lumen/query-api","15.lumen/7.query-api","i-lucide-search",{"title":471,"path":472,"stem":473,"children":474,"icon":476},"SDKs","/sdks","16.sdks/1.index",[475,477,482,487],{"title":471,"path":472,"stem":473,"icon":476},"i-lucide-code",{"title":478,"path":479,"stem":480,"icon":481},"Workflows SDK — Node / TypeScript","/sdks/workflows-nodejs","16.sdks/2.workflows-nodejs","i-lucide-file-ts",{"title":483,"path":484,"stem":485,"icon":486},"Workflows SDK — Python","/sdks/workflows-python","16.sdks/3.workflows-python","i-simple-icons-python",{"title":488,"path":489,"stem":490,"icon":417},"Auth SDK — Sign in with Orkestia","/sdks/auth","16.sdks/4.auth",{"title":92,"path":492,"stem":493,"children":494,"icon":95},"/appdata","17.appdata/1.index",[495,496,501,506,510,515,520,525,530],{"title":92,"path":492,"stem":493,"icon":95},{"title":497,"path":498,"stem":499,"icon":500},"Declare structures","/appdata/declare","17.appdata/2.declare","i-lucide-table",{"title":502,"path":503,"stem":504,"icon":505},"Records & Data API","/appdata/data-api","17.appdata/3.data-api","i-lucide-rows-3",{"title":507,"path":508,"stem":509,"icon":376},"Ownership & workspaces","/appdata/ownership","17.appdata/4.ownership",{"title":511,"path":512,"stem":513,"icon":514},"Expose App Data to end-users","/appdata/expose","17.appdata/5.expose","i-lucide-app-window",{"title":516,"path":517,"stem":518,"icon":519},"PostgREST HTTP","/appdata/postgrest","17.appdata/6.postgrest","i-lucide-unplug",{"title":521,"path":522,"stem":523,"icon":524},"Ordered append","/appdata/append","17.appdata/7.append","i-lucide-list-ordered",{"title":526,"path":527,"stem":528,"icon":529},"Databases and instances","/appdata/instances","17.appdata/8.instances","i-lucide-hard-drive",{"title":531,"path":532,"stem":533,"icon":104},"Query console and SQL","/appdata/query","17.appdata/9.query",{"title":97,"path":535,"stem":536,"children":537,"icon":61},"/engram","18.engram/1.index",[538,539,543],{"title":97,"path":535,"stem":536,"icon":61},{"title":540,"path":541,"stem":542,"icon":155},"Write & recall","/engram/write-recall","18.engram/2.write-recall",{"title":544,"path":545,"stem":546,"icon":547},"Field & feed","/engram/agent-memory","18.engram/3.agent-memory","i-lucide-radio",{"title":101,"path":549,"stem":550,"children":551,"icon":104},"/devkit","19.devkit/1.index",[552,553,558,562,567],{"title":101,"path":549,"stem":550,"icon":104},{"title":554,"path":555,"stem":556,"icon":557},"Install DevKit","/devkit/install","19.devkit/2.install","i-lucide-download",{"title":559,"path":560,"stem":561,"icon":519},"Hook redirect","/devkit/hooks","19.devkit/3.hooks",{"title":563,"path":564,"stem":565,"icon":566},"Local coding runner","/devkit/local-runner","19.devkit/4.local-runner","i-lucide-cpu",{"title":568,"path":569,"stem":570,"icon":131},"Compositions from DevKit","/devkit/compositions","19.devkit/5.compositions",{"title":572,"path":573,"stem":574,"children":575,"icon":44},"Staff & Agents","/staff-and-agents","20.staff-and-agents/01.index",[576,577,582,586,590,594,598,602,606,611,615,620,625,629],{"title":572,"path":573,"stem":574,"icon":44},{"title":578,"path":579,"stem":580,"icon":581},"Prerequisites","/staff-and-agents/prerequisites","20.staff-and-agents/02.prerequisites","i-lucide-list-checks",{"title":583,"path":584,"stem":585,"icon":368},"Hire an actor","/staff-and-agents/hire-an-actor","20.staff-and-agents/03.hire-an-actor",{"title":587,"path":588,"stem":589,"icon":34},"Console","/staff-and-agents/console","20.staff-and-agents/04.console",{"title":591,"path":592,"stem":593,"icon":11},"Configs, skills, and MCP","/staff-and-agents/configs-skills-mcp","20.staff-and-agents/05.configs-skills-mcp",{"title":595,"path":596,"stem":597,"icon":136},"Agent runner groups","/staff-and-agents/runner-groups","20.staff-and-agents/06.runner-groups",{"title":599,"path":600,"stem":601,"icon":16},"Governance","/staff-and-agents/governance","20.staff-and-agents/07.governance",{"title":603,"path":604,"stem":605,"icon":417},"Identity and tokens","/staff-and-agents/identity","20.staff-and-agents/08.identity",{"title":607,"path":608,"stem":609,"icon":610},"Memory and cost","/staff-and-agents/memory-and-cost","20.staff-and-agents/09.memory-and-cost","i-lucide-wallet",{"title":612,"path":613,"stem":614,"icon":155},"Coding agents","/staff-and-agents/coding-agents","20.staff-and-agents/10.coding-agents",{"title":616,"path":617,"stem":618,"icon":619},"Wire a repository for coding agents","/staff-and-agents/wire-a-repository","20.staff-and-agents/11.wire-a-repository","i-lucide-link",{"title":621,"path":622,"stem":623,"icon":624},"Run a ticket end to end","/staff-and-agents/run-a-ticket","20.staff-and-agents/12.run-a-ticket","i-lucide-play",{"title":626,"path":627,"stem":628,"icon":66},"Build a product team of actors","/staff-and-agents/build-a-product-team","20.staff-and-agents/13.build-a-product-team",{"title":261,"path":630,"stem":631,"icon":249},"/staff-and-agents/troubleshooting","20.staff-and-agents/14.troubleshooting",{"title":106,"path":633,"stem":634,"children":635,"icon":109},"/app-host","21.app-host/1.index",[636,637,641,644,649,653,658,662,666],{"title":106,"path":633,"stem":634,"icon":109},{"title":638,"path":639,"stem":640,"icon":514},"Your app and site","/app-host/your-app","21.app-host/2.your-app",{"title":92,"path":642,"stem":643,"icon":95},"/app-host/app-data","21.app-host/3.app-data",{"title":645,"path":646,"stem":647,"icon":648},"Website and process","/app-host/hosting","21.app-host/4.hosting","i-lucide-cloud-upload",{"title":650,"path":651,"stem":652,"icon":547},"Buzz","/app-host/buzz","21.app-host/5.buzz",{"title":654,"path":655,"stem":656,"icon":657},"Files","/app-host/files","21.app-host/6.files","i-lucide-folder",{"title":659,"path":660,"stem":661,"icon":109},"Your own domain","/app-host/your-domain","21.app-host/7.your-domain",{"title":663,"path":664,"stem":665,"icon":229},"Troubleshooting App Host","/app-host/troubleshooting","21.app-host/8.troubleshooting",{"title":667,"path":668,"stem":669,"icon":417},"Signing keys","/app-host/signing-keys","21.app-host/9.signing-keys",{"title":111,"path":671,"stem":672,"children":673,"icon":114},"/agent-exchange","22.agent-exchange/01.index",[674,675,678,682,686,690],{"title":111,"path":671,"stem":672,"icon":114},{"title":583,"path":676,"stem":677,"icon":368},"/agent-exchange/hire","22.agent-exchange/02.hire",{"title":679,"path":680,"stem":681,"icon":208},"List an actor","/agent-exchange/list","22.agent-exchange/03.list",{"title":683,"path":684,"stem":685,"icon":104},"Invoke & leases","/agent-exchange/invoke","22.agent-exchange/04.invoke",{"title":687,"path":688,"stem":689,"icon":141},"Settlement & trust","/agent-exchange/settlement","22.agent-exchange/05.settlement",{"title":53,"path":691,"stem":692,"icon":56},"/agent-exchange/workflows","22.agent-exchange/06.workflows",{"title":694,"path":695,"stem":696,"children":697,"icon":75},"Runners","/runners","23.runners/1.index",[698,700,704,709,713,717,721,726,730,734,738,741,745,749,753],{"title":699,"path":695,"stem":696,"icon":75},"Runner groups",{"title":701,"path":702,"stem":703,"icon":275},"Cloud Run","/runners/cloud-run","23.runners/10.cloud-run",{"title":705,"path":706,"stem":707,"icon":708},"DigitalOcean App Job","/runners/do-app-job","23.runners/11.do-app-job","i-simple-icons-digitalocean",{"title":710,"path":711,"stem":712,"icon":708},"DigitalOcean Droplet","/runners/do-droplet","23.runners/12.do-droplet",{"title":714,"path":715,"stem":716,"icon":285},"Magalu Cloud VM","/runners/magalu-vm","23.runners/13.magalu-vm",{"title":101,"path":718,"stem":719,"icon":720},"/runners/devkit","23.runners/14.devkit","i-lucide-laptop",{"title":722,"path":723,"stem":724,"icon":725},"Purposes & integrations","/runners/purposes","23.runners/16.purposes","i-lucide-layers",{"title":727,"path":728,"stem":729,"icon":241},"Fargate","/runners/fargate","23.runners/2.fargate",{"title":731,"path":732,"stem":733,"icon":241},"EC2 Auto Scaling","/runners/ec2-auto-scaling","23.runners/3.ec2-auto-scaling",{"title":735,"path":736,"stem":737,"icon":241},"EC2 VM","/runners/ec2-vm","23.runners/4.ec2-vm",{"title":287,"path":739,"stem":740,"icon":290},"/runners/kubernetes","23.runners/5.kubernetes",{"title":742,"path":743,"stem":744,"icon":280},"Azure Container Apps","/runners/azure-container-apps","23.runners/6.azure-container-apps",{"title":746,"path":747,"stem":748,"icon":280},"Azure VMSS","/runners/azure-vmss","23.runners/7.azure-vmss",{"title":750,"path":751,"stem":752,"icon":280},"Azure VM","/runners/azure-vm","23.runners/8.azure-vm",{"title":754,"path":755,"stem":756,"icon":275},"GCE","/runners/gce","23.runners/9.gce",{"title":758,"path":759,"stem":760,"children":761,"icon":763},"Chat","/chat","24.chat/01.index",[762,764,768,773,777,782,787,791,796,800,805,810,814,819,824,828,832,836,840,845],{"title":758,"path":759,"stem":760,"icon":763},"i-lucide-messages-square",{"title":765,"path":766,"stem":767,"icon":446},"Enable and publish","/chat/enable-and-publish","24.chat/02.enable-and-publish",{"title":769,"path":770,"stem":771,"icon":772},"Theme and customization","/chat/theme-and-customization","24.chat/03.theme-and-customization","i-lucide-palette",{"title":774,"path":775,"stem":776,"icon":85},"Members and moderation","/chat/members-and-moderation","24.chat/04.members-and-moderation",{"title":778,"path":779,"stem":780,"icon":781},"Channels","/chat/channels","24.chat/05.channels","i-lucide-hash",{"title":783,"path":784,"stem":785,"icon":786},"Using the chat","/chat/using-the-chat","24.chat/06.using-the-chat","i-lucide-message-circle",{"title":788,"path":789,"stem":790,"icon":44},"Actors in chat","/chat/actors-in-chat","24.chat/07.actors-in-chat",{"title":792,"path":793,"stem":794,"icon":795},"Internal support actor","/chat/internal-support-actor","24.chat/08.internal-support-actor","i-lucide-life-buoy",{"title":797,"path":798,"stem":799,"icon":104},"API and console","/chat/api-and-console","24.chat/09.api-and-console",{"title":801,"path":802,"stem":803,"icon":804},"Limits","/chat/limits","24.chat/10.limits","i-lucide-triangle-alert",{"title":806,"path":807,"stem":808,"icon":809},"Structured chat with DGI","/chat/structured-chat","24.chat/11.structured-chat","i-lucide-layout-list",{"title":811,"path":812,"stem":813,"icon":109},"Option A: hosted chat with DGI","/chat/option-a-hosted-chat","24.chat/12.option-a-hosted-chat",{"title":815,"path":816,"stem":817,"icon":818},"Option B: embed the chat component","/chat/option-b-embed-component","24.chat/13.option-b-embed-component","i-lucide-component",{"title":820,"path":821,"stem":822,"icon":823},"Option C: custom client (wire contract)","/chat/option-c-custom-client","24.chat/14.option-c-custom-client","i-lucide-braces",{"title":825,"path":826,"stem":827,"icon":394},"Responder configuration reference","/chat/responder-reference","24.chat/15.responder-reference",{"title":829,"path":830,"stem":831,"icon":547},"Cards, live updates and proactive posts","/chat/cards-live-and-proactive","24.chat/16.cards-live-and-proactive",{"title":833,"path":834,"stem":835,"icon":16},"Structured chat security model","/chat/structured-chat-security","24.chat/17.structured-chat-security",{"title":837,"path":838,"stem":839,"icon":181},"Option D: any app or API (dgi.chat)","/chat/option-d-chat-api","24.chat/18.option-d-chat-api",{"title":841,"path":842,"stem":843,"icon":844},"Card catalog","/chat/card-catalog","24.chat/19.card-catalog","i-lucide-layout-grid",{"title":846,"path":847,"stem":848,"icon":849},"Living Surfaces","/chat/living-surfaces","24.chat/20.living-surfaces","i-lucide-sprout",{"title":851,"path":852,"stem":853,"children":854,"icon":61},"DGI","/dgi","25.dgi/1.index",[855,857,862,866,870,874],{"title":856,"path":852,"stem":853,"icon":61},"What is DGI",{"title":858,"path":859,"stem":860,"icon":861},"How DGI works","/dgi/how-it-works","25.dgi/2.how-it-works","i-lucide-cog",{"title":863,"path":864,"stem":865,"icon":844},"Interfaces","/dgi/interfaces","25.dgi/3.interfaces",{"title":867,"path":868,"stem":869,"icon":29},"Quickstart","/dgi/quickstart","25.dgi/4.quickstart",{"title":871,"path":872,"stem":873,"icon":16},"Trust and safety","/dgi/trust-and-safety","25.dgi/5.trust-and-safety",{"title":875,"path":876,"stem":877,"icon":878},"FAQ","/dgi/faq","25.dgi/6.faq","i-lucide-circle-help",{"id":880,"title":837,"body":881,"description":2976,"extension":2977,"links":2978,"meta":2979,"navigation":2980,"path":838,"seo":2981,"stem":839,"__hash__":2982},"docs/24.chat/18.option-d-chat-api.md",{"type":882,"value":883,"toc":2960},"minimark",[884,906,911,1009,1013,1073,1076,1080,1091,1101,1388,1409,1424,1428,1434,1494,1497,1602,1608,1612,1619,1625,1794,1820,1825,1840,1964,1968,1971,1974,2035,2041,2045,2113,2120,2124,2601,2614,2618,2749,2758,2762,2778,2845,2850,2854,2861,2865,2956],[885,886,887,888,892,893,897,898,901,902,905],"p",{},"The ",[889,890,891],"code",{},"dgi.chat.*"," workflows give any client the same structured chat the Buzz chat draws, without a chat space, a relay or a chat key. Your app sends a message and gets back text, at most ",[894,895,896],"strong",{},"one card"," and a few chips. The person answers the card, and your app sends that answer back. Structured chat is part of ",[899,900,851],"a",{"href":59}," and is ",[894,903,904],{},"Alpha",".",[907,908,910],"h2",{"id":909},"tldr","TL;DR",[912,913,914,937,962,976,982,992],"ul",{},[915,916,917,920,921,924,925,928,929,932,933,936],"li",{},[894,918,919],{},"Four workflows."," An admin saves a profile once with ",[889,922,923],{},"dgi.chat.profile.save",". Your app calls ",[889,926,927],{},"dgi.chat.turn"," for every message and ",[889,930,931],{},"dgi.chat.respond"," for every answer to a card. ",[889,934,935],{},"dgi.chat.profile.get"," reads a profile back.",[915,938,939,942,943,946,947,950,951,954,955,958,959,905],{},[894,940,941],{},"Same cards as the chat."," The ",[889,944,945],{},"ui"," object is the chat wire contract, v1.3 (block version ",[889,948,949],{},"v"," is still ",[889,952,953],{},"1","). Buzz posts the very same object inside its ",[889,956,957],{},"buzz-ui"," fence. Every card is listed in the ",[899,960,961],{"href":842},"card catalog",[915,963,964,967,968,971,972,975],{},[894,965,966],{},"Jev first, the LLM off by default."," A new profile decides with ",[889,969,970],{},"decision_engine: \"jev\""," and ",[889,973,974],{},"llm_fallback: false",". A turn Jev cannot decide comes back as chips, never as a generated answer.",[915,977,978,981],{},[894,979,980],{},"The caller is the principal."," A member runs as themselves. An end user, signed in with your app's token, runs in DGI's end-user lockdown. Nobody chooses it in the input.",[915,983,984,987,988,991],{},[894,985,986],{},"Writes need a stored confirm."," A confirm runs the server's own copy of the proposal, checked by ",[889,989,990],{},"action_input_hash",", once, within 30 minutes.",[915,993,994,997,998,1001,1002,971,1005,1008],{},[894,995,996],{},"Ordinary workflows."," Start them with ",[889,999,1000],{},"POST /api/workflows/start"," and read the run until it ends, or use the MCP tools ",[889,1003,1004],{},"start_workflow",[889,1006,1007],{},"watch_workflow",". The organization comes from the token.",[907,1010,1012],{"id":1011},"when-to-use-it","When to use it",[1014,1015,1016,1029],"table",{},[1017,1018,1019],"thead",{},[1020,1021,1022,1026],"tr",{},[1023,1024,1025],"th",{},"You have",[1023,1027,1028],{},"Use",[1030,1031,1032,1043,1053,1063],"tbody",{},[1020,1033,1034,1038],{},[1035,1036,1037],"td",{},"An Orkestia chat space and the hosted page fits",[1035,1039,1040],{},[899,1041,1042],{"href":812},"Option A",[1020,1044,1045,1048],{},[1035,1046,1047],{},"A React app that should show the Orkestia chat",[1035,1049,1050],{},[899,1051,1052],{"href":816},"Option B",[1020,1054,1055,1058],{},[1035,1056,1057],{},"A chat client of your own on the relay",[1035,1059,1060],{},[899,1061,1062],{"href":821},"Option C",[1020,1064,1065,1068],{},[1035,1066,1067],{},"Any other surface: a web or mobile app, a support widget, a backend, a non-React stack, no chat space at all",[1035,1069,1070],{},[894,1071,1072],{},"Option D, this page",[885,1074,1075],{},"Option D needs no identity app chat, no seat for an actor and no bridge. It is a request and a response.",[907,1077,1079],{"id":1078},"_1-save-a-profile","1. Save a profile",[885,1081,1082,1083,1086,1087,1090],{},"A profile is the scope and the decision settings every turn runs under. Only organization ",[894,1084,1085],{},"admins and owners"," may save or read one (",[889,1088,1089],{},"organization_admin_required"," otherwise).",[1092,1093,1099],"pre",{"className":1094,"code":1096,"language":1097,"meta":1098},[1095],"language-text","start_workflow(\"dgi.chat.profile.save\", {\n  \"name\": \"Orders\",\n  \"allowed_workflow_types\": [\"acme.order.*\"],\n  \"suggestions\": [{\"label\": \"My orders\", \"prompt\": \"list my open orders\"}],\n  \"locale\": \"en\"\n})\n→ {\"profile_uuid\": \"7c1e…\", \"profile\": {…}, \"created\": true, \"set_by_user_uuid\": \"…\", \"set_at\": \"…\"}\n","text","",[889,1100,1096],{"__ignoreMap":1098},[1014,1102,1103,1116],{},[1017,1104,1105],{},[1020,1106,1107,1110,1113],{},[1023,1108,1109],{},"Field",[1023,1111,1112],{},"Values and default",[1023,1114,1115],{},"What it does",[1030,1117,1118,1131,1144,1167,1198,1217,1243,1263,1282,1303,1316,1329,1346,1362,1375],{},[1020,1119,1120,1125,1128],{},[1035,1121,1122],{},[889,1123,1124],{},"profile_uuid",[1035,1126,1127],{},"Optional",[1035,1129,1130],{},"Update this profile. Omitted: a new one is created",[1020,1132,1133,1138,1141],{},[1035,1134,1135],{},[889,1136,1137],{},"name",[1035,1139,1140],{},"Up to 120 characters",[1035,1142,1143],{},"A label for you",[1020,1145,1146,1151,1160],{},[1035,1147,1148],{},[889,1149,1150],{},"allowed_workflow_types",[1035,1152,1153,1156,1157],{},[894,1154,1155],{},"Required."," 1 to 50 names, exact or ",[889,1158,1159],{},"prefix.*",[1035,1161,1162,1163,1166],{},"The only workflows DGI may start, intersected with what the caller may run. An empty list is refused, and a bare ",[889,1164,1165],{},"*"," is not a workflow type",[1020,1168,1169,1174,1187],{},[1035,1170,1171],{},[889,1172,1173],{},"decision_engine",[1035,1175,1176,1179,1180,1183,1184],{},[889,1177,1178],{},"jev"," (default), ",[889,1181,1182],{},"auto",", ",[889,1185,1186],{},"llm",[1035,1188,1189,1191,1192,1194,1195,1197],{},[889,1190,1178],{},": Jev decides. ",[889,1193,1182],{},": Jev when it is confident, else the LLM. ",[889,1196,1186],{},": the LLM answers first, which is itself an opt-in to the LLM",[1020,1199,1200,1205,1211],{},[1035,1201,1202],{},[889,1203,1204],{},"llm_fallback",[1035,1206,1207,1208],{},"Boolean, default ",[889,1209,1210],{},"false",[1035,1212,1213,1214],{},"The switch for the LLM. Off: a turn Jev cannot decide comes back as chips. On: DGI's LLM answers every fallback reason except those in ",[889,1215,1216],{},"llm_fallback_handoff",[1020,1218,1219,1223,1229],{},[1035,1220,1221],{},[889,1222,1216],{},[1035,1224,1225,1226],{},"Up to 20 reason names, default ",[889,1227,1228],{},"[]",[1035,1230,1231,1232,1235,1236,1238,1239,1242],{},"With ",[889,1233,1234],{},"llm_fallback: true",", the fallback reasons that still come back as chips instead of an LLM answer. Matched exactly, or by family (",[889,1237,1178],{}," covers ",[889,1240,1241],{},"jev_timeout",")",[1020,1244,1245,1250,1256],{},[1035,1246,1247],{},[889,1248,1249],{},"suggestions",[1035,1251,1252,1253],{},"Up to 8 ",[889,1254,1255],{},"{label, prompt}",[1035,1257,1258,1259,1262],{},"Your chips. A chip sends its ",[894,1260,1261],{},"label"," as the next message",[1020,1264,1265,1270,1275],{},[1035,1266,1267],{},[889,1268,1269],{},"default_inputs",[1035,1271,1272],{},[889,1273,1274],{},"{workflow_type: {field: value}}",[1035,1276,1277,1278],{},"Values DGI pre-fills. Same limits and rules as in the ",[899,1279,1281],{"href":1280},"/chat/responder-reference#default-inputs","responder reference",[1020,1283,1284,1289,1300],{},[1035,1285,1286],{},[889,1287,1288],{},"locale",[1035,1290,1291,1183,1294,1183,1297],{},[889,1292,1293],{},"pt-BR",[889,1295,1296],{},"en",[889,1298,1299],{},"es",[1035,1301,1302],{},"The language of fixed texts such as refusals. A turn can override it",[1020,1304,1305,1310,1313],{},[1035,1306,1307],{},[889,1308,1309],{},"prompt",[1035,1311,1312],{},"Up to 8,000 characters",[1035,1314,1315],{},"Instructions added to DGI's own: tone, language, what to show",[1020,1317,1318,1323,1326],{},[1035,1319,1320],{},[889,1321,1322],{},"max_reasoning_turns",[1035,1324,1325],{},"6 to 48, default 12",[1035,1327,1328],{},"Tool-loop budget per turn on the LLM path",[1020,1330,1331,1336,1343],{},[1035,1332,1333],{},[889,1334,1335],{},"renderers",[1035,1337,1338,1339,1342],{},"A subset of the renderers in the ",[899,1340,1341],{"href":842},"catalog",". Default: all",[1035,1344,1345],{},"Which cards the profile may return",[1020,1347,1348,1353,1359],{},[1035,1349,1350],{},[889,1351,1352],{},"jev_connection_uuid",[1035,1354,1355,1356,1358],{},"An active ",[899,1357,292],{"href":293}," connection",[1035,1360,1361],{},"Which connection Jev decides with. Without it, DGI uses the organization's own",[1020,1363,1364,1369,1372],{},[1035,1365,1366],{},[889,1367,1368],{},"jev_threshold",[1035,1370,1371],{},"0.5 to 0.99",[1035,1373,1374],{},"Jev confidence needed to act",[1020,1376,1377,1382,1385],{},[1035,1378,1379],{},[889,1380,1381],{},"ai_provider_config_uuid",[1035,1383,1384],{},"An AI provider configuration of the organization",[1035,1386,1387],{},"Which model answers when the LLM is used. Your organization pays its own tokens",[885,1389,1390,1391,1393,1394,1397,1398,1183,1400,1183,1403,971,1406,905],{},"Each save stores the whole profile. Send every field you want to keep. ",[889,1392,935],{}," with ",[889,1395,1396],{},"{\"profile_uuid\": \"…\"}"," returns ",[889,1399,1124],{},[889,1401,1402],{},"profile",[889,1404,1405],{},"set_by_user_uuid",[889,1407,1408],{},"set_at",[1410,1411,1412],"note",{},[885,1413,1414,1415,1417,1418,1420,1421,1423],{},"A profile saved before ",[889,1416,1204],{}," existed, with a non-empty ",[889,1419,1216],{},", still reads as ",[889,1422,1234],{},". Set the flag explicitly the next time you save it.",[907,1425,1427],{"id":1426},"_2-send-a-turn","2. Send a turn",[1092,1429,1432],{"className":1430,"code":1431,"language":1097,"meta":1098},[1095],"start_workflow(\"dgi.chat.turn\", {\n  \"profile_uuid\": \"7c1e…\",\n  \"message\": \"create an order for Ana, 2 units\",\n  \"conversation_uuid\": \"3f9a…\",\n  \"locale\": \"en\"\n})\n",[889,1433,1431],{"__ignoreMap":1098},[1014,1435,1436,1446],{},[1017,1437,1438],{},[1020,1439,1440,1443],{},[1023,1441,1442],{},"Input",[1023,1444,1445],{},"Meaning",[1030,1447,1448,1457,1467,1477],{},[1020,1449,1450,1454],{},[1035,1451,1452],{},[889,1453,1124],{},[1035,1455,1456],{},"Required. The profile to run under",[1020,1458,1459,1464],{},[1035,1460,1461],{},[889,1462,1463],{},"message",[1035,1465,1466],{},"Required. What the person wrote",[1020,1468,1469,1474],{},[1035,1470,1471],{},[889,1472,1473],{},"conversation_uuid",[1035,1475,1476],{},"Optional. Continue this conversation. Omitted: a new conversation is created and returned",[1020,1478,1479,1483],{},[1035,1480,1481],{},[889,1482,1288],{},[1035,1484,1485,1486,1183,1488,1490,1491,1493],{},"Optional. ",[889,1487,1293],{},[889,1489,1296],{}," or ",[889,1492,1299],{},". Default: the profile's",[885,1495,1496],{},"Every turn and every answer returns the same shape:",[1014,1498,1499,1508],{},[1017,1500,1501],{},[1020,1502,1503,1506],{},[1023,1504,1505],{},"Output",[1023,1507,1445],{},[1030,1509,1510,1519,1528,1543,1552,1579,1589],{},[1020,1511,1512,1516],{},[1035,1513,1514],{},[889,1515,1473],{},[1035,1517,1518],{},"Keep it and send it with the next turn",[1020,1520,1521,1525],{},[1035,1522,1523],{},[889,1524,1097],{},[1035,1526,1527],{},"The answer, in markdown. It always stands on its own, even when there is a card",[1020,1529,1530,1534],{},[1035,1531,1532],{},[889,1533,945],{},[1035,1535,1536,1537,1540,1541],{},"One card, or ",[889,1538,1539],{},"null",". See the ",[899,1542,961],{"href":842},[1020,1544,1545,1549],{},[1035,1546,1547],{},[889,1548,1249],{},[1035,1550,1551],{},"Up to 5 chip labels. A chip sends its label verbatim as the next message",[1020,1553,1554,1559],{},[1035,1555,1556],{},[889,1557,1558],{},"decision_path",[1035,1560,1561,1562,1183,1565,1183,1568,1183,1570,1183,1573,1490,1576],{},"How the turn was decided: ",[889,1563,1564],{},"jev:\u003Cfast path>",[889,1566,1567],{},"deterministic:\u003Cfast path>",[889,1569,1186],{},[889,1571,1572],{},"llm_fallback:\u003Creason>",[889,1574,1575],{},"deterministic:view",[889,1577,1578],{},"deterministic:refused",[1020,1580,1581,1586],{},[1035,1582,1583],{},[889,1584,1585],{},"duration_ms",[1035,1587,1588],{},"Turn wall time",[1020,1590,1591,1596],{},[1035,1592,1593],{},[889,1594,1595],{},"ui_refusal",[1035,1597,1598,1599,1601],{},"Only on ",[889,1600,931],{},", when the answer was refused",[885,1603,1604,1605,905],{},"A conversation belongs to its caller: a member's own user, or the end user of your app. Anyone else gets ",[889,1606,1607],{},"conversation_not_found",[907,1609,1611],{"id":1610},"_3-answer-the-card","3. Answer the card",[885,1613,1614,1615,1618],{},"When the person acts on a card, send only its ",[889,1616,1617],{},"ui_id",", the action and the values:",[1092,1620,1623],{"className":1621,"code":1622,"language":1097,"meta":1098},[1095],"start_workflow(\"dgi.chat.respond\", {\n  \"conversation_uuid\": \"3f9a…\",\n  \"ui_id\": \"0b6f…\",\n  \"action\": \"confirm\"\n})\n",[889,1624,1622],{"__ignoreMap":1098},[1014,1626,1627,1644],{},[1017,1628,1629],{},[1020,1630,1631,1636,1639],{},[1023,1632,1633],{},[889,1634,1635],{},"action",[1023,1637,1638],{},"On",[1023,1640,1641],{},[889,1642,1643],{},"values",[1030,1645,1646,1665,1677,1690,1703,1735,1748,1771],{},[1020,1647,1648,1653,1656],{},[1035,1649,1650],{},[889,1651,1652],{},"submit",[1035,1654,1655],{},"form, query console",[1035,1657,1658,1661,1662],{},[889,1659,1660],{},"{field: value}",". A query console sends ",[889,1663,1664],{},"{statement}",[1020,1666,1667,1672,1674],{},[1035,1668,1669],{},[889,1670,1671],{},"confirm",[1035,1673,1671],{},[1035,1675,1676],{},"None. The server runs its stored proposal",[1020,1678,1679,1684,1687],{},[1035,1680,1681],{},[889,1682,1683],{},"cancel",[1035,1685,1686],{},"form, confirm",[1035,1688,1689],{},"None",[1020,1691,1692,1697,1700],{},[1035,1693,1694],{},[889,1695,1696],{},"edit",[1035,1698,1699],{},"confirm, when offered",[1035,1701,1702],{},"The changed inputs. DGI proposes again on a new card",[1020,1704,1705,1710,1713],{},[1035,1706,1707],{},[889,1708,1709],{},"select",[1035,1711,1712],{},"select, table, actionlist, composition, and the views that open something",[1035,1714,1715,1718,1719,1722,1723,1726,1727,1730,1731,1734],{},[889,1716,1717],{},"{value, label?, prompt?, row? or item?}",". On the newer views: ",[889,1720,1721],{},"{node}"," (dag, schema), ",[889,1724,1725],{},"{item}"," (timeline), ",[889,1728,1729],{},"{related}"," (detail), ",[889,1732,1733],{},"{saved}"," (query console)",[1020,1736,1737,1742,1745],{},[1035,1738,1739],{},[889,1740,1741],{},"refresh",[1035,1743,1744],{},"a read card",[1035,1746,1747],{},"None. The read runs again with the same inputs, no reasoning",[1020,1749,1750,1755,1758],{},[1035,1751,1752],{},[889,1753,1754],{},"row_action",[1035,1756,1757],{},"table or datagrid with row actions",[1035,1759,1760,1763,1764,1767,1768],{},[889,1761,1762],{},"{row, action}",", indices into the card's rows and ",[889,1765,1766],{},"render.row_actions",". A datagrid adds the row's ",[889,1769,1770],{},"ref",[1020,1772,1773,1778,1781],{},[1035,1774,1775],{},[889,1776,1777],{},"query",[1035,1779,1780],{},"datagrid, query console, a card with view controls",[1035,1782,1783,1490,1786,1789,1790],{},[889,1784,1785],{},"{sort?, filters?, cursor?}",[889,1787,1788],{},"{params}",". See ",[899,1791,1793],{"href":1792},"/chat/card-catalog#view-controls-and-the-query-action","view controls",[885,1795,1796,1797,1183,1800,1183,1802,1804,1805,1808,1809,1812,1813,1490,1816,1819],{},"Prompts (",[889,1798,1799],{},"form",[889,1801,1671],{},[889,1803,1709],{},") are answerable for ",[894,1806,1807],{},"30 minutes",". Read cards stay refreshable for ",[894,1810,1811],{},"7 days",", at most one refresh every 10 seconds. This API never offers ",[889,1814,1815],{},"live",[889,1817,1818],{},"stop",": your client refreshes when it wants fresh data.",[1821,1822,1824],"h3",{"id":1823},"refusals","Refusals",[885,1826,1827,1828,1830,1831,1183,1833,971,1836,1839],{},"A refused answer comes back as a completed turn with ",[889,1829,1595],{},", a short localized ",[889,1832,1097],{},[889,1834,1835],{},"ui: null",[889,1837,1838],{},"decision_path: \"deterministic:refused\"",". Nothing refused ever reaches DGI, and a refusal consumes nothing.",[1014,1841,1842,1853],{},[1017,1843,1844],{},[1020,1845,1846,1850],{},[1023,1847,1848],{},[889,1849,1595],{},[1023,1851,1852],{},"Why",[1030,1854,1855,1865,1875,1885,1895,1905,1921,1931,1944,1954],{},[1020,1856,1857,1862],{},[1035,1858,1859],{},[889,1860,1861],{},"ui_unknown",[1035,1863,1864],{},"No such card in this conversation, or it was replaced by a newer one",[1020,1866,1867,1872],{},[1035,1868,1869],{},[889,1870,1871],{},"ui_consumed",[1035,1873,1874],{},"The form or confirm was already answered",[1020,1876,1877,1882],{},[1035,1878,1879],{},[889,1880,1881],{},"ui_expired",[1035,1883,1884],{},"More than 30 minutes passed",[1020,1886,1887,1892],{},[1035,1888,1889],{},[889,1890,1891],{},"ui_wrong_author",[1035,1893,1894],{},"The card was issued to someone else",[1020,1896,1897,1902],{},[1035,1898,1899],{},[889,1900,1901],{},"ui_action_not_offered",[1035,1903,1904],{},"The card does not offer that action",[1020,1906,1907,1918],{},[1035,1908,1909,1183,1912,1183,1915],{},[889,1910,1911],{},"ui_field_unknown",[889,1913,1914],{},"ui_field_required",[889,1916,1917],{},"ui_field_invalid",[1035,1919,1920],{},"A value does not match the stored card's fields, options or controls",[1020,1922,1923,1928],{},[1035,1924,1925],{},[889,1926,1927],{},"ui_response_malformed",[1035,1929,1930],{},"The answer is not well formed",[1020,1932,1933,1938],{},[1035,1934,1935],{},[889,1936,1937],{},"ui_rate_limited",[1035,1939,1940,1941,1943],{},"A refresh within 10 seconds, or a ",[889,1942,1777],{}," within 2 seconds, of the last one",[1020,1945,1946,1951],{},[1035,1947,1948],{},[889,1949,1950],{},"ui_action_tampered",[1035,1952,1953],{},"The stored proposal no longer matches the hash it was issued with. It is never confirmed",[1020,1955,1956,1961],{},[1035,1957,1958],{},[889,1959,1960],{},"card_scope_changed",[1035,1962,1963],{},"The card's read left the profile's scope",[907,1965,1967],{"id":1966},"jev-first-then-chips","Jev first, then chips",[885,1969,1970],{},"Every turn wraps DGI's own thought processing. Jev, the typed decision engine, answers first: is this a read, a form, a proposal, and which workflow. Most turns end there, with a card built in code from DGI's typed output. No model text ever becomes a card.",[885,1972,1973],{},"When Jev cannot decide:",[1014,1975,1976,1986],{},[1017,1977,1978],{},[1020,1979,1980,1983],{},[1023,1981,1982],{},"Profile",[1023,1984,1985],{},"What comes back",[1030,1987,1988,2010,2022],{},[1020,1989,1990,1995],{},[1035,1991,1992,1994],{},[889,1993,974],{}," (default)",[1035,1996,1997,1998,2001,2002,2004,2005,2007,2008],{},"A short text and ",[894,1999,2000],{},"chips",": the profile's ",[889,2003,1249],{},", or else the slash commands of the profile's scope. No LLM runs. ",[889,2006,1558],{}," is ",[889,2009,1572],{},[1020,2011,2012,2016],{},[1035,2013,2014],{},[889,2015,1234],{},[1035,2017,2018,2019,2021],{},"DGI's LLM answers, except for the reasons listed in ",[889,2020,1216],{},", which still come back as chips",[1020,2023,2024,2029],{},[1035,2025,2026],{},[889,2027,2028],{},"decision_engine: \"llm\"",[1035,2030,2031,2032,2034],{},"The LLM answers first. ",[889,2033,1216],{}," still names the reasons that come back as chips",[885,2036,2037,2038,2040],{},"A chip is not a special action. Tapping one sends its label as an ordinary ",[889,2039,927],{}," message, so the next turn usually lands on a Jev fast path.",[907,2042,2044],{"id":2043},"security","Security",[912,2046,2047,2060,2068,2074,2080,2094,2100],{},[915,2048,2049,2052,2053,2055,2056,2059],{},[894,2050,2051],{},"Scope pinned."," DGI may start only the profile's ",[889,2054,1150],{},", intersected with what the caller may run. An empty scope is refused (",[889,2057,2058],{},"dgi_scope_required",").",[915,2061,2062,2064,2065,905],{},[894,2063,980],{}," The principal comes from the token: a member runs as themselves, and an end user runs in DGI's end-user lockdown, limited to workflows your app exposes to end users. A run with no person behind it (a system trigger, an agent with no user) is refused with ",[889,2066,2067],{},"caller_principal_required",[915,2069,2070,2073],{},[894,2071,2072],{},"The stored card is the only authority."," Every answer is checked against the server's copy of the card: its fields and options, its author, its expiry and its pending action.",[915,2075,2076,2079],{},[894,2077,2078],{},"Consume once."," A form or confirm is consumed once, under the conversation's row lock. The same answer sent twice is refused the second time.",[915,2081,2082,2085,2086,2089,2090,2093],{},[894,2083,2084],{},"Confirm by hash."," A proposal carries ",[889,2087,2088],{},"action_input_hash = sha256(canonical_json(input))",", the SHA-256 of the input as JSON with sorted keys, no whitespace, UTF-8. A confirm runs the ",[894,2091,2092],{},"stored"," proposal with that hash. Values sent with a confirm are ignored, and Edit produces a new proposal with a new hash on a new card.",[915,2095,2096,2099],{},[894,2097,2098],{},"30-minute expiry."," Forms, confirms and selects expire 30 minutes after they are issued.",[915,2101,2102,2105,2106,1490,2109,2112],{},[894,2103,2104],{},"Opaque refs."," Rows, nodes, tables and saved queries carry refs such as ",[889,2107,2108],{},"r1",[889,2110,2111],{},"sq1",". What each stands for stays on the server.",[885,2114,2115,2116,2119],{},"The same rules hold in the Buzz chat. Read ",[899,2117,2118],{"href":834},"Security model"," for the full list.",[907,2121,2123],{"id":2122},"example-curl","Example: curl",[1092,2125,2129],{"className":2126,"code":2127,"language":2128,"meta":1098,"style":1098},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","API=\"https://workflow-api.orkestia.dev\"\nAUTH=\"Authorization: Bearer $TOKEN\"\n\nstart() {  # start a workflow and wait until it ends\n  wid=$(curl -s -X POST \"$API/api/workflows/start\" -H \"$AUTH\" -H 'Content-Type: application/json' \\\n          -d \"{\\\"workflow_type\\\": \\\"$1\\\", \\\"initial_data\\\": $2}\" | jq -r .workflow_id)\n  until curl -s \"$API/api/workflows/$wid\" -H \"$AUTH\" | jq -e '.is_terminal' >/dev/null; do sleep 1; done\n  curl -s \"$API/api/workflows/$wid\" -H \"$AUTH\" | jq .state_data\n}\n\n# 1. An admin saves the profile once (Jev only, LLM off).\nstart dgi.chat.profile.save '{\"name\": \"Orders\", \"allowed_workflow_types\": [\"acme.order.*\"],\n  \"suggestions\": [{\"label\": \"My orders\", \"prompt\": \"list my open orders\"}], \"locale\": \"en\"}'\n# -> {\"profile_uuid\": \"7c1e…\", ...}\n\n# 2. A turn.\nstart dgi.chat.turn '{\"profile_uuid\": \"7c1e…\", \"message\": \"create an order for Ana, 2 units\"}'\n# -> {\"conversation_uuid\": \"3f9a…\", \"text\": \"Create an order for Ana?\",\n#     \"ui\": {\"v\": 1, \"ui_id\": \"0b6f…\", \"renderer\": \"confirm\", \"title\": \"Create order for Ana\",\n#            \"pending_action\": {\"workflowType\": \"acme.order.create\", \"input\": {\"name\": \"Ana\", \"qty\": 2},\n#                               \"action_input_hash\": \"9d2c…\", ...},\n#            \"actions\": [\"confirm\", \"cancel\", \"edit\"], \"expires_at\": \"…\"},\n#     \"decision_path\": \"jev:write_propose\", \"duration_ms\": 640, \"suggestions\": []}\n\n# 3. The person presses Confirm: only the ui_id and the action travel.\nstart dgi.chat.respond '{\"conversation_uuid\": \"3f9a…\", \"ui_id\": \"0b6f…\", \"action\": \"confirm\"}'\n# -> {\"text\": \"Order A-17 created.\", \"ui\": {\"renderer\": \"run\", ...},\n#     \"decision_path\": \"deterministic:confirm_execute\", ...}\n\n# 4. The same answer again is refused.\nstart dgi.chat.respond '{\"conversation_uuid\": \"3f9a…\", \"ui_id\": \"0b6f…\", \"action\": \"confirm\"}'\n# -> {\"ui_refusal\": \"ui_unknown\", \"text\": \"That form is no longer active. Please ask again.\", \"ui\": null,\n#     \"decision_path\": \"deterministic:refused\", ...}\n","bash",[889,2130,2131,2154,2172,2179,2196,2253,2317,2387,2420,2426,2431,2437,2450,2459,2465,2470,2476,2491,2497,2503,2509,2515,2521,2527,2532,2538,2553,2559,2565,2570,2576,2589,2595],{"__ignoreMap":1098},[2132,2133,2136,2140,2144,2147,2151],"span",{"class":2134,"line":2135},"line",1,[2132,2137,2139],{"class":2138},"sTEyZ","API",[2132,2141,2143],{"class":2142},"sMK4o","=",[2132,2145,2146],{"class":2142},"\"",[2132,2148,2150],{"class":2149},"sfazB","https://workflow-api.orkestia.dev",[2132,2152,2153],{"class":2142},"\"\n",[2132,2155,2157,2160,2162,2164,2167,2170],{"class":2134,"line":2156},2,[2132,2158,2159],{"class":2138},"AUTH",[2132,2161,2143],{"class":2142},[2132,2163,2146],{"class":2142},[2132,2165,2166],{"class":2149},"Authorization: Bearer ",[2132,2168,2169],{"class":2138},"$TOKEN",[2132,2171,2153],{"class":2142},[2132,2173,2175],{"class":2134,"line":2174},3,[2132,2176,2178],{"emptyLinePlaceholder":2177},true,"\n",[2132,2180,2182,2186,2189,2192],{"class":2134,"line":2181},4,[2132,2183,2185],{"class":2184},"s2Zo4","start",[2132,2187,2188],{"class":2142},"()",[2132,2190,2191],{"class":2142}," {",[2132,2193,2195],{"class":2194},"sHwdD","  # start a workflow and wait until it ends\n",[2132,2197,2199,2202,2205,2209,2212,2215,2218,2221,2224,2227,2229,2232,2234,2237,2239,2241,2244,2247,2250],{"class":2134,"line":2198},5,[2132,2200,2201],{"class":2138},"  wid",[2132,2203,2204],{"class":2142},"=$(",[2132,2206,2208],{"class":2207},"sBMFI","curl",[2132,2210,2211],{"class":2149}," -s",[2132,2213,2214],{"class":2149}," -X",[2132,2216,2217],{"class":2149}," POST",[2132,2219,2220],{"class":2142}," \"",[2132,2222,2223],{"class":2138},"$API",[2132,2225,2226],{"class":2149},"/api/workflows/start",[2132,2228,2146],{"class":2142},[2132,2230,2231],{"class":2149}," -H",[2132,2233,2220],{"class":2142},[2132,2235,2236],{"class":2138},"$AUTH",[2132,2238,2146],{"class":2142},[2132,2240,2231],{"class":2149},[2132,2242,2243],{"class":2142}," '",[2132,2245,2246],{"class":2149},"Content-Type: application/json",[2132,2248,2249],{"class":2142},"'",[2132,2251,2252],{"class":2138}," \\\n",[2132,2254,2256,2259,2261,2264,2267,2270,2272,2275,2277,2281,2283,2285,2287,2290,2292,2294,2297,2300,2302,2305,2308,2311,2314],{"class":2134,"line":2255},6,[2132,2257,2258],{"class":2149},"          -d",[2132,2260,2220],{"class":2142},[2132,2262,2263],{"class":2149},"{",[2132,2265,2266],{"class":2138},"\\\"",[2132,2268,2269],{"class":2149},"workflow_type",[2132,2271,2266],{"class":2138},[2132,2273,2274],{"class":2149},": ",[2132,2276,2266],{"class":2138},[2132,2278,2280],{"class":2279},"sHdIc","$1",[2132,2282,2266],{"class":2138},[2132,2284,1183],{"class":2149},[2132,2286,2266],{"class":2138},[2132,2288,2289],{"class":2149},"initial_data",[2132,2291,2266],{"class":2138},[2132,2293,2274],{"class":2149},[2132,2295,2296],{"class":2279},"$2",[2132,2298,2299],{"class":2149},"}",[2132,2301,2146],{"class":2142},[2132,2303,2304],{"class":2142}," |",[2132,2306,2307],{"class":2207}," jq",[2132,2309,2310],{"class":2149}," -r",[2132,2312,2313],{"class":2149}," .workflow_id",[2132,2315,2316],{"class":2142},")\n",[2132,2318,2320,2324,2327,2329,2331,2333,2336,2339,2341,2343,2345,2347,2349,2351,2353,2356,2358,2361,2363,2366,2369,2372,2375,2378,2382,2384],{"class":2134,"line":2319},7,[2132,2321,2323],{"class":2322},"s7zQu","  until",[2132,2325,2326],{"class":2207}," curl",[2132,2328,2211],{"class":2149},[2132,2330,2220],{"class":2142},[2132,2332,2223],{"class":2138},[2132,2334,2335],{"class":2149},"/api/workflows/",[2132,2337,2338],{"class":2138},"$wid",[2132,2340,2146],{"class":2142},[2132,2342,2231],{"class":2149},[2132,2344,2220],{"class":2142},[2132,2346,2236],{"class":2138},[2132,2348,2146],{"class":2142},[2132,2350,2304],{"class":2142},[2132,2352,2307],{"class":2207},[2132,2354,2355],{"class":2149}," -e",[2132,2357,2243],{"class":2142},[2132,2359,2360],{"class":2149},".is_terminal",[2132,2362,2249],{"class":2142},[2132,2364,2365],{"class":2142}," >",[2132,2367,2368],{"class":2149},"/dev/null",[2132,2370,2371],{"class":2142},";",[2132,2373,2374],{"class":2322}," do",[2132,2376,2377],{"class":2207}," sleep",[2132,2379,2381],{"class":2380},"sbssI"," 1",[2132,2383,2371],{"class":2142},[2132,2385,2386],{"class":2322}," done\n",[2132,2388,2390,2393,2395,2397,2399,2401,2403,2405,2407,2409,2411,2413,2415,2417],{"class":2134,"line":2389},8,[2132,2391,2392],{"class":2207},"  curl",[2132,2394,2211],{"class":2149},[2132,2396,2220],{"class":2142},[2132,2398,2223],{"class":2138},[2132,2400,2335],{"class":2149},[2132,2402,2338],{"class":2138},[2132,2404,2146],{"class":2142},[2132,2406,2231],{"class":2149},[2132,2408,2220],{"class":2142},[2132,2410,2236],{"class":2138},[2132,2412,2146],{"class":2142},[2132,2414,2304],{"class":2142},[2132,2416,2307],{"class":2207},[2132,2418,2419],{"class":2149}," .state_data\n",[2132,2421,2423],{"class":2134,"line":2422},9,[2132,2424,2425],{"class":2142},"}\n",[2132,2427,2429],{"class":2134,"line":2428},10,[2132,2430,2178],{"emptyLinePlaceholder":2177},[2132,2432,2434],{"class":2134,"line":2433},11,[2132,2435,2436],{"class":2194},"# 1. An admin saves the profile once (Jev only, LLM off).\n",[2132,2438,2440,2442,2445,2447],{"class":2134,"line":2439},12,[2132,2441,2185],{"class":2207},[2132,2443,2444],{"class":2149}," dgi.chat.profile.save",[2132,2446,2243],{"class":2142},[2132,2448,2449],{"class":2149},"{\"name\": \"Orders\", \"allowed_workflow_types\": [\"acme.order.*\"],\n",[2132,2451,2453,2456],{"class":2134,"line":2452},13,[2132,2454,2455],{"class":2149},"  \"suggestions\": [{\"label\": \"My orders\", \"prompt\": \"list my open orders\"}], \"locale\": \"en\"}",[2132,2457,2458],{"class":2142},"'\n",[2132,2460,2462],{"class":2134,"line":2461},14,[2132,2463,2464],{"class":2194},"# -> {\"profile_uuid\": \"7c1e…\", ...}\n",[2132,2466,2468],{"class":2134,"line":2467},15,[2132,2469,2178],{"emptyLinePlaceholder":2177},[2132,2471,2473],{"class":2134,"line":2472},16,[2132,2474,2475],{"class":2194},"# 2. A turn.\n",[2132,2477,2479,2481,2484,2486,2489],{"class":2134,"line":2478},17,[2132,2480,2185],{"class":2207},[2132,2482,2483],{"class":2149}," dgi.chat.turn",[2132,2485,2243],{"class":2142},[2132,2487,2488],{"class":2149},"{\"profile_uuid\": \"7c1e…\", \"message\": \"create an order for Ana, 2 units\"}",[2132,2490,2458],{"class":2142},[2132,2492,2494],{"class":2134,"line":2493},18,[2132,2495,2496],{"class":2194},"# -> {\"conversation_uuid\": \"3f9a…\", \"text\": \"Create an order for Ana?\",\n",[2132,2498,2500],{"class":2134,"line":2499},19,[2132,2501,2502],{"class":2194},"#     \"ui\": {\"v\": 1, \"ui_id\": \"0b6f…\", \"renderer\": \"confirm\", \"title\": \"Create order for Ana\",\n",[2132,2504,2506],{"class":2134,"line":2505},20,[2132,2507,2508],{"class":2194},"#            \"pending_action\": {\"workflowType\": \"acme.order.create\", \"input\": {\"name\": \"Ana\", \"qty\": 2},\n",[2132,2510,2512],{"class":2134,"line":2511},21,[2132,2513,2514],{"class":2194},"#                               \"action_input_hash\": \"9d2c…\", ...},\n",[2132,2516,2518],{"class":2134,"line":2517},22,[2132,2519,2520],{"class":2194},"#            \"actions\": [\"confirm\", \"cancel\", \"edit\"], \"expires_at\": \"…\"},\n",[2132,2522,2524],{"class":2134,"line":2523},23,[2132,2525,2526],{"class":2194},"#     \"decision_path\": \"jev:write_propose\", \"duration_ms\": 640, \"suggestions\": []}\n",[2132,2528,2530],{"class":2134,"line":2529},24,[2132,2531,2178],{"emptyLinePlaceholder":2177},[2132,2533,2535],{"class":2134,"line":2534},25,[2132,2536,2537],{"class":2194},"# 3. The person presses Confirm: only the ui_id and the action travel.\n",[2132,2539,2541,2543,2546,2548,2551],{"class":2134,"line":2540},26,[2132,2542,2185],{"class":2207},[2132,2544,2545],{"class":2149}," dgi.chat.respond",[2132,2547,2243],{"class":2142},[2132,2549,2550],{"class":2149},"{\"conversation_uuid\": \"3f9a…\", \"ui_id\": \"0b6f…\", \"action\": \"confirm\"}",[2132,2552,2458],{"class":2142},[2132,2554,2556],{"class":2134,"line":2555},27,[2132,2557,2558],{"class":2194},"# -> {\"text\": \"Order A-17 created.\", \"ui\": {\"renderer\": \"run\", ...},\n",[2132,2560,2562],{"class":2134,"line":2561},28,[2132,2563,2564],{"class":2194},"#     \"decision_path\": \"deterministic:confirm_execute\", ...}\n",[2132,2566,2568],{"class":2134,"line":2567},29,[2132,2569,2178],{"emptyLinePlaceholder":2177},[2132,2571,2573],{"class":2134,"line":2572},30,[2132,2574,2575],{"class":2194},"# 4. The same answer again is refused.\n",[2132,2577,2579,2581,2583,2585,2587],{"class":2134,"line":2578},31,[2132,2580,2185],{"class":2207},[2132,2582,2545],{"class":2149},[2132,2584,2243],{"class":2142},[2132,2586,2550],{"class":2149},[2132,2588,2458],{"class":2142},[2132,2590,2592],{"class":2134,"line":2591},32,[2132,2593,2594],{"class":2194},"# -> {\"ui_refusal\": \"ui_unknown\", \"text\": \"That form is no longer active. Please ask again.\", \"ui\": null,\n",[2132,2596,2598],{"class":2134,"line":2597},33,[2132,2599,2600],{"class":2194},"#     \"decision_path\": \"deterministic:refused\", ...}\n",[885,2602,2603,2606,2607,2610,2611,2059],{},[889,2604,2605],{},"acme.order.*"," stands for your own workflows. Instead of polling, you can follow a run with the SSE stream ",[889,2608,2609],{},"GET /api/workflows/{workflow_id}/stream"," (see ",[899,2612,2613],{"href":175},"API and tooling",[907,2615,2617],{"id":2616},"example-python","Example: Python",[1092,2619,2623],{"className":2620,"code":2621,"language":2622,"meta":1098,"style":1098},"language-python shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import time\nimport requests\n\nAPI = \"https://workflow-api.orkestia.dev\"\nHEADERS = {\"Authorization\": f\"Bearer {TOKEN}\"}\n\n\ndef run(workflow_type: str, initial_data: dict) -> dict:\n    started = requests.post(f\"{API}/api/workflows/start\", headers=HEADERS,\n                            json={\"workflow_type\": workflow_type, \"initial_data\": initial_data}).json()\n    while True:\n        state = requests.get(f\"{API}/api/workflows/{started['workflow_id']}\", headers=HEADERS).json()\n        if state.get(\"is_terminal\"):\n            return state[\"state_data\"]\n        time.sleep(0.5)\n\n\nturn = run(\"dgi.chat.turn\", {\"profile_uuid\": PROFILE_UUID, \"message\": \"my open orders\"})\ncard = turn[\"ui\"]\nif card and card[\"renderer\"] == \"form\":\n    turn = run(\"dgi.chat.respond\", {\"conversation_uuid\": turn[\"conversation_uuid\"], \"ui_id\": card[\"ui_id\"],\n                                    \"action\": \"submit\", \"values\": {\"status\": \"open\"}})\nelif card and \"refresh\" in card.get(\"actions\", []):\n    turn = run(\"dgi.chat.respond\", {\"conversation_uuid\": turn[\"conversation_uuid\"], \"ui_id\": card[\"ui_id\"],\n                                    \"action\": \"refresh\"})   # reruns the read with no reasoning\nprint(turn[\"text\"], turn[\"suggestions\"], turn[\"decision_path\"])\n","python",[889,2624,2625,2630,2635,2639,2644,2649,2653,2657,2662,2667,2672,2677,2682,2687,2692,2697,2701,2705,2710,2715,2720,2725,2730,2735,2739,2744],{"__ignoreMap":1098},[2132,2626,2627],{"class":2134,"line":2135},[2132,2628,2629],{},"import time\n",[2132,2631,2632],{"class":2134,"line":2156},[2132,2633,2634],{},"import requests\n",[2132,2636,2637],{"class":2134,"line":2174},[2132,2638,2178],{"emptyLinePlaceholder":2177},[2132,2640,2641],{"class":2134,"line":2181},[2132,2642,2643],{},"API = \"https://workflow-api.orkestia.dev\"\n",[2132,2645,2646],{"class":2134,"line":2198},[2132,2647,2648],{},"HEADERS = {\"Authorization\": f\"Bearer {TOKEN}\"}\n",[2132,2650,2651],{"class":2134,"line":2255},[2132,2652,2178],{"emptyLinePlaceholder":2177},[2132,2654,2655],{"class":2134,"line":2319},[2132,2656,2178],{"emptyLinePlaceholder":2177},[2132,2658,2659],{"class":2134,"line":2389},[2132,2660,2661],{},"def run(workflow_type: str, initial_data: dict) -> dict:\n",[2132,2663,2664],{"class":2134,"line":2422},[2132,2665,2666],{},"    started = requests.post(f\"{API}/api/workflows/start\", headers=HEADERS,\n",[2132,2668,2669],{"class":2134,"line":2428},[2132,2670,2671],{},"                            json={\"workflow_type\": workflow_type, \"initial_data\": initial_data}).json()\n",[2132,2673,2674],{"class":2134,"line":2433},[2132,2675,2676],{},"    while True:\n",[2132,2678,2679],{"class":2134,"line":2439},[2132,2680,2681],{},"        state = requests.get(f\"{API}/api/workflows/{started['workflow_id']}\", headers=HEADERS).json()\n",[2132,2683,2684],{"class":2134,"line":2452},[2132,2685,2686],{},"        if state.get(\"is_terminal\"):\n",[2132,2688,2689],{"class":2134,"line":2461},[2132,2690,2691],{},"            return state[\"state_data\"]\n",[2132,2693,2694],{"class":2134,"line":2467},[2132,2695,2696],{},"        time.sleep(0.5)\n",[2132,2698,2699],{"class":2134,"line":2472},[2132,2700,2178],{"emptyLinePlaceholder":2177},[2132,2702,2703],{"class":2134,"line":2478},[2132,2704,2178],{"emptyLinePlaceholder":2177},[2132,2706,2707],{"class":2134,"line":2493},[2132,2708,2709],{},"turn = run(\"dgi.chat.turn\", {\"profile_uuid\": PROFILE_UUID, \"message\": \"my open orders\"})\n",[2132,2711,2712],{"class":2134,"line":2499},[2132,2713,2714],{},"card = turn[\"ui\"]\n",[2132,2716,2717],{"class":2134,"line":2505},[2132,2718,2719],{},"if card and card[\"renderer\"] == \"form\":\n",[2132,2721,2722],{"class":2134,"line":2511},[2132,2723,2724],{},"    turn = run(\"dgi.chat.respond\", {\"conversation_uuid\": turn[\"conversation_uuid\"], \"ui_id\": card[\"ui_id\"],\n",[2132,2726,2727],{"class":2134,"line":2517},[2132,2728,2729],{},"                                    \"action\": \"submit\", \"values\": {\"status\": \"open\"}})\n",[2132,2731,2732],{"class":2134,"line":2523},[2132,2733,2734],{},"elif card and \"refresh\" in card.get(\"actions\", []):\n",[2132,2736,2737],{"class":2134,"line":2529},[2132,2738,2724],{},[2132,2740,2741],{"class":2134,"line":2534},[2132,2742,2743],{},"                                    \"action\": \"refresh\"})   # reruns the read with no reasoning\n",[2132,2745,2746],{"class":2134,"line":2540},[2132,2747,2748],{},"print(turn[\"text\"], turn[\"suggestions\"], turn[\"decision_path\"])\n",[885,2750,2751,2754,2755,2757],{},[889,2752,2753],{},"TOKEN"," is a member's token, or your end user's own token from ",[899,2756,425],{"href":426},". Never put an organization token or API key in a browser or mobile bundle.",[907,2759,2761],{"id":2760},"the-card-contract-json-schema","The card contract (JSON Schema)",[885,2763,887,2764,2766,2767,2769,2770,2773,2774,2777],{},[889,2765,945],{}," object, the ",[889,2768,931],{}," input and the turn output are described by one JSON Schema (draft 2020-12), ",[889,2771,2772],{},"chat_ui.v1_3.json",", with the id ",[889,2775,2776],{},"https://orkestia.dev/schemas/dgi/chat_ui.v1_3.json",". Its rules for a client:",[912,2779,2780,2804,2831,2839],{},[915,2781,2782,2785,2786,2788,2789,2791,2792,2794,2795,1183,2798,1183,2801,905],{},[894,2783,2784],{},"Required keys:"," ",[889,2787,949],{}," (always ",[889,2790,953],{},"), ",[889,2793,1617],{}," (32 hex), ",[889,2796,2797],{},"renderer",[889,2799,2800],{},"title",[889,2802,2803],{},"expires_at",[915,2805,2806,2785,2809,2812,2813,2816,2817,2820,2821,1183,2824,2827,2828,905],{},[894,2807,2808],{},"One of:",[889,2810,2811],{},"pending_input"," for a form, ",[889,2814,2815],{},"pending_action"," for a confirm, ",[889,2818,2819],{},"render"," for everything else. Read cards may also carry ",[889,2822,2823],{},"actions",[889,2825,2826],{},"context"," (up to 8 chips of labels) and ",[889,2829,2830],{},"controls",[915,2832,2833,2836,2837,905],{},[894,2834,2835],{},"Ignore what you do not know."," Revisions add optional keys and renderers only. An unknown renderer is drawn as the turn's ",[889,2838,1097],{},[915,2840,2841,2844],{},[894,2842,2843],{},"Nothing in it is authority."," The server checks every answer against its own stored copy, so a client decides how a card looks, never what is accepted.",[885,2846,887,2847,2849],{},[899,2848,961],{"href":842}," lists every renderer, its fields and the answers it sends.",[907,2851,2853],{"id":2852},"ask-your-ai-assistant","Ask your AI assistant",[1092,2855,2859],{"className":2856,"code":2857,"filename":2858,"language":1097,"meta":1098},[1095],"Using https://docs.orkestia.dev/raw/chat/option-d-chat-api.md, draft a dgi.chat.profile.save call for a support widget that may search and open tickets, with Jev only and three chips. Do not start it.\n\nWrite a TypeScript client for dgi.chat.turn and dgi.chat.respond that draws form, confirm and table cards and falls back to the text for any other renderer.\n\nExplain what my widget should show for each ui_refusal code of dgi.chat.respond.\n","prompts",[889,2860,2857],{"__ignoreMap":1098},[907,2862,2864],{"id":2863},"for-ai-agents","For AI agents",[1014,2866,2867,2877],{},[1017,2868,2869],{},[1020,2870,2871,2874],{},[1023,2872,2873],{},"Rule",[1023,2875,2876],{},"Detail",[1030,2878,2879,2894,2906,2919,2930,2944],{},[1020,2880,2881,2884],{},[1035,2882,2883],{},"Discover",[1035,2885,2886,2889,2890,2893],{},[889,2887,2888],{},"list_workflow_types(prefix=\"dgi.chat.\")",", then ",[889,2891,2892],{},"get_workflow_schema"," on each before proposing a call",[1020,2895,2896,2899],{},[1035,2897,2898],{},"Profiles",[1035,2900,2901,971,2903,2905],{},[889,2902,923],{},[889,2904,935],{}," need an organization admin or owner. Prepare the call; a person starts it. Each save replaces the whole profile",[1020,2907,2908,2911],{},[1035,2909,2910],{},"Scope",[1035,2912,2913,2914,2916,2917],{},"Never propose an empty ",[889,2915,1150],{}," or a bare ",[889,2918,1165],{},[1020,2920,2921,2924],{},[1035,2922,2923],{},"LLM",[1035,2925,2926,2927,2929],{},"Off by default. Do not turn on ",[889,2928,1204],{}," unless the user asks for it: it spends the organization's tokens",[1020,2931,2932,2935],{},[1035,2933,2934],{},"Confirms",[1035,2936,2937,2938,1393,2940,2943],{},"Only ",[889,2939,931],{},[889,2941,2942],{},"action: \"confirm\""," on a stored confirm card runs a write. Never treat a typed \"yes\" as a confirm, and never send values with it",[1020,2945,2946,2949],{},[1035,2947,2948],{},"Principal",[1035,2950,2951,2952,2955],{},"Never pass ",[889,2953,2954],{},"organization_uuid"," or a user id: the token decides who the turn runs as",[2957,2958,2959],"style",{},"html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":1098,"searchDepth":2135,"depth":2156,"links":2961},[2962,2963,2964,2965,2966,2969,2970,2971,2972,2973,2974,2975],{"id":909,"depth":2156,"text":910},{"id":1011,"depth":2156,"text":1012},{"id":1078,"depth":2156,"text":1079},{"id":1426,"depth":2156,"text":1427},{"id":1610,"depth":2156,"text":1611,"children":2967},[2968],{"id":1823,"depth":2174,"text":1824},{"id":1966,"depth":2156,"text":1967},{"id":2043,"depth":2156,"text":2044},{"id":2122,"depth":2156,"text":2123},{"id":2616,"depth":2156,"text":2617},{"id":2760,"depth":2156,"text":2761},{"id":2852,"depth":2156,"text":2853},{"id":2863,"depth":2156,"text":2864},"Put DGI's structured chat in any web app, mobile app, support widget or backend with four workflows. Save a profile, send a turn, answer the card, and read the card contract as JSON Schema. Jev first, the LLM off by default, and every write behind a stored confirm","md",null,{},{"icon":181},{"title":837,"description":2976},"4MgVMbUjzPewiePl5tlMXXyq9GQV4vKR3vvQlzJocdo",[2984,2986],{"title":833,"path":834,"stem":835,"description":2985,"icon":16,"children":-1},"Who DGI runs as in chat, what it may reach, why a typed yes never confirms, how cards are protected against forgery and replay, and who pays for the tokens",{"title":841,"path":842,"stem":843,"description":2987,"icon":844,"children":-1},"Every structured chat card DGI can return, what it shows and what the person can do with it. Forms, confirms with a diff, tables, charts, KPI tiles, logs, runs, links, compositions, documents, and the DAG, schema, datagrid, query console, diff, detail and timeline views, plus view controls and the query action",1790354064398]