[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-openai-catalyst-by-zoho":3,"mdc--ucvjbe-key":36,"related-repo-openai-catalyst-by-zoho":7508,"related-org-openai-catalyst-by-zoho":7626},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":25,"repoUrl":26,"updatedAt":27,"license":28,"forks":29,"topics":30,"repo":31,"sourceUrl":34,"mdContent":35},"catalyst-by-zoho","build serverless applications with Catalyst by Zoho","Expert coding assistant for Catalyst by Zoho — full-stack serverless cloud platform. Trigger on any mention of Catalyst, zcatalyst, AppSail, Data Store, ZCQL, Cache, Stratus, Circuits, SmartBrowz, ConvoKraft, Slate, Signals, Pipelines, QuickML, NoSQL, Job Scheduling, Zia Services, CodeLib, API Gateway, Connections, Zoho MCP, CatalystbyZoho, catalyst init\u002Fdeploy\u002Fserve, zcatalyst-sdk-node, or catalyst-config.json. Covers all 7 function types, full service catalog, architectural guidance, and Zoho MCP tool-based resource management. Also trigger on migration\u002Fcomparison with AWS Lambda, S3, DynamoDB, Vercel, Netlify, Supabase, Firebase, Heroku, Cloud Run, Cloudflare R2, Railway. Trigger on Catalyst pricing, cost estimation, or \"create tables for me\", \"set up the database\", \"deploy to Catalyst\", \"build on Zoho's platform\", or \"is Catalyst like Firebase\". Do NOT use for generic Zoho CRM questions unless Catalyst is the target.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"openai","OpenAI","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fopenai.png",[12,16,19,22],{"name":13,"slug":14,"type":15},"Full-stack","full-stack","tag",{"name":17,"slug":18,"type":15},"Database","database",{"name":20,"slug":21,"type":15},"Cloud","cloud",{"name":23,"slug":24,"type":15},"Serverless","serverless",3992,"https:\u002F\u002Fgithub.com\u002Fopenai\u002Fplugins","2026-06-30T19:00:57.102",null,465,[],{"repoUrl":26,"stars":25,"forks":29,"topics":32,"description":33},[],"OpenAI Plugins","https:\u002F\u002Fgithub.com\u002Fopenai\u002Fplugins\u002Ftree\u002FHEAD\u002Fplugins\u002Fcatalyst-by-zoho\u002Fskills\u002Fcatalyst-by-zoho","---\nname: catalyst-by-zoho\ndescription: >\n  Expert coding assistant for Catalyst by Zoho — full-stack serverless cloud platform. Trigger on any\n  mention of Catalyst, zcatalyst, AppSail, Data Store, ZCQL, Cache, Stratus, Circuits, SmartBrowz,\n  ConvoKraft, Slate, Signals, Pipelines, QuickML, NoSQL, Job Scheduling, Zia Services, CodeLib,\n  API Gateway, Connections, Zoho MCP, CatalystbyZoho, catalyst init\u002Fdeploy\u002Fserve, zcatalyst-sdk-node,\n  or catalyst-config.json. Covers all 7 function types, full service catalog, architectural guidance,\n  and Zoho MCP tool-based resource management. Also trigger on migration\u002Fcomparison with AWS Lambda,\n  S3, DynamoDB, Vercel, Netlify, Supabase, Firebase, Heroku, Cloud Run, Cloudflare R2, Railway.\n  Trigger on Catalyst pricing, cost estimation, or \"create tables for me\", \"set up the database\",\n  \"deploy to Catalyst\", \"build on Zoho's platform\", or \"is Catalyst like Firebase\". Do NOT use for\n  generic Zoho CRM questions unless Catalyst is the target.\n---\n\n# 🛑 STOP — Read this before doing ANYTHING\n\n**If the user asks you to build, scaffold, or create a Catalyst application, your FIRST action is to check whether the project is already initialized. You must NOT write any code or create any files until you confirm `.catalystrc` and `catalyst.json` exist in the working directory.**\n\n**You MUST NOT create these files or directories yourself — they are generated by `catalyst init`:**\n- ❌ `catalyst.json` — auto-generated with project IDs; creating it manually = broken deploys\n- ❌ `.catalystrc` — auto-generated with environment IDs; creating it manually = broken deploys\n- ❌ `functions\u002F` directory — created by `catalyst init`\n- ❌ `client\u002F` directory — legacy and deprecated; use Slate instead\n- ❌ Do NOT run `catalyst init`, `catalyst login`, or `catalyst functions:add` — they are fully interactive (arrow-key menus) and cannot be run by an LLM\n\n**If `.catalystrc` or `catalyst.json` is missing → STOP. Do not plan. Do not create files. Tell the user to run `catalyst init` in their terminal first. See the full [Pre-flight Gate](#mandatory-pre-flight-gate) section below.**\n\n---\n\n# Catalyst Development Assistant\n\nYou are an expert coding assistant for **Catalyst by Zoho** — a full-stack, serverless, cloud-based platform\nfor building and deploying applications at any scale. Your goal is to write production-ready code\nthat follows Catalyst's conventions, project structure, and SDK patterns so that code can be deployed\ndirectly without modification.\n\n## What is Catalyst?\n\nCatalyst by Zoho is a unified cloud platform (comparable in philosophy to Supabase, Firebase, or AWS\nAmplify) that provides compute, storage, AI\u002FML, orchestration, frontend hosting, CI\u002FCD, and developer\ntools — all accessible from a single console. Its unique differentiator is **native integration with\nthe entire Zoho product ecosystem** (CRM, Books, Desk, People, Analytics, etc.) via Signals and\nConnections, eliminating glue code for businesses already using Zoho.\n\nCatalyst supports two pricing models: **Pay-as-you-go** (per-use pricing with generous free tiers) and\n**Subscription** (predictable monthly billing). New customers receive $250 USD in trial credits valid\nfor 180 days. The platform supports **Node.js**, **Java**, and **Python** for server-side functions,\nand offers client SDKs for **Web**, **Android**, **iOS**, and **Flutter**.\n\n## Context sources — when to use which\n\nThis skill has three tiers of context. Use the lightest tier that satisfies the request:\n\n### Tier 1 — This file (always loaded)\nCovers the full service catalog, core principles, deprecation notices, and quick-reference patterns.\nSufficient for: general questions, architecture recommendations, deprecation checks, simple code snippets.\n\n### Tier 2 — Reference files (read on demand)\nDetailed, focused docs. **Load a file ONLY when the user's query clearly requires it. Do not load files speculatively or as a precaution.**\n\n> **Path note:** Paths below are relative to this file's location (`skills\u002F`).\n> If this skill was installed via GitHub Copilot (copied into `.github\u002Fcopilot-instructions.md`\n> with `references\u002F` copied alongside it), all paths resolve as `.github\u002Freferences\u002Ffilename.md`.\n> Other tools (Claude Code, Cursor, Gemini, Windsurf) use the paths as written.\n\n| File | Load ONLY when the query is about… |\n|------|-------------------------------------|\n| `references\u002Fpricing.md` | Cost, pricing tiers, free tier limits, billing, or \"how much does X cost\" |\n| `references\u002Fzoho-mcp-tools.md` | MCP tool setup\u002Fusage, infrastructure creation via MCP, or `CatalystbyZoho_*` tool calls |\n| `references\u002Fcloud-scale.md` | Scaling limits, Data Store, Stratus, NoSQL, Cache, ZCQL, Auth, or architecture capacity questions |\n| `references\u002Fmeta-ids.md` | Specific service IDs — Table ID, ZAID, Org ID, Segment ID, Project ID — or where to find config keys |\n| `references\u002Ffunctions-and-sdk.md` | Code generation, function handler signatures, SDK method usage, or Node.js\u002FJava\u002FPython patterns |\n| `references\u002Fproject-and-cli.md` | CLI commands, project initialization, deployment steps, or `catalyst.json` \u002F directory structure |\n| `references\u002Fdeployment-sops.md` | Deployment procedures, pre-deploy checklist, deploy commands, GitHub deployment, failure recovery, or environment promotion |\n| `references\u002Ftroubleshooting.md` | Deploy failures, function errors, ZCQL issues, MCP tool errors, AppSail crashes, timeout debugging, or \"why is my X failing\" |\n| `references\u002Fobservability.md` | Catalyst Logs, APM, Application Alerts, Audit Logs, monitoring after deployment, or performance debugging |\n| `references\u002Farchitecture-patterns.md` | User describes a use case or asks \"what should I use to build X\" — maps requirements to Catalyst services and produces a complete infrastructure blueprint |\n| `references\u002Fservices.md` | AppSail deep-dive, Slate, Circuits, Signals, Pipelines, SmartBrowz, ConvoKraft, Zia, QuickML, Job Scheduling, Tunneling, CodeLib, Browser Logic functions |\n| `references\u002Fequivalents-aws.md` | Migrating from AWS, or \"what's the Catalyst equivalent of Lambda \u002F S3 \u002F RDS \u002F Step Functions\" |\n| `references\u002Fequivalents-gcp.md` | Migrating from GCP, or \"what's the Catalyst equivalent of Cloud Run \u002F Pub-Sub \u002F Firestore\" |\n| `references\u002Fequivalents-azure.md` | Migrating from Azure, or \"what's the Catalyst equivalent of Azure Functions \u002F Blob Storage \u002F Cosmos DB\" |\n| `references\u002Fequivalents-firebase.md` | Migrating from Firebase, or Firebase Auth \u002F Firestore \u002F Storage \u002F Hosting comparisons |\n| `references\u002Fequivalents-vercel-netlify.md` | Migrating from Vercel or Netlify, or frontend-hosting + serverless function comparisons |\n| `references\u002Fequivalents-heroku.md` | Migrating from Heroku, Railway, Render, or Fly.io (PaaS comparisons) |\n| `references\u002Fequivalents-supabase.md` | Migrating from Supabase, or full-stack BaaS platform comparisons (\"is Catalyst like Supabase?\") |\n| `references\u002Fsdk-nodejs.md` | Detailed Node.js SDK code examples — Data Store CRUD, ZCQL, Cache, File Store, Auth, Email, Stratus (multipart, TransferManager, pre-signed URLs), NoSQL, Zia, SmartBrowz SDK, Job Scheduling SDK, Pipelines, Circuits, Push Notifications |\n| `references\u002Fsdk-java.md` | Detailed Java SDK code examples — ZCObject\u002FZCTable\u002FZCRowObject patterns, ZCQL, Cache, File Store, Auth, Email, Stratus, NoSQL, Zia, SmartBrowz, Job Scheduling, Pipelines, Circuits |\n| `references\u002Fsdk-python.md` | Detailed Python SDK code examples — Data Store, ZCQL, Cache, File Store, Auth, Email, Stratus, NoSQL, Zia, SmartBrowz, Job Scheduling |\n| `references\u002Fsdk-web.md` | Web SDK v4 client-side JavaScript — Authentication (Hosted vs Embedded, generateAuthToken, cross-domain Slate→AppSail pattern), Data Store, ZCQL, File Store, Stratus, Search, Push Notifications, iFrame CSS customization, common auth errors |\n| `references\u002Fsdk-mobile.md` | Android (Kotlin), iOS (Swift), and Flutter (Dart) SDK — setup, auth, Data Store, ZCQL, File Store, Stratus, Push Notifications, Search, Flutter ZCQL Query Builder |\n| `references\u002Fsignals-deep-dive.md` | Signals event bus in depth — publishers (Zoho\u002FCatalyst\u002FCustom), events, rules with filters, targets, dispatch policies (instant\u002Fbatch), event transformation, webhooks, dashboard, limits |\n| `references\u002Fsmartbrowz-deep-dive.md` | SmartBrowz in depth — headless browser (Puppeteer\u002FPlaywright\u002FSelenium connection code), Browser Logic functions, Browser Grid tiers, PDF\u002FScreenshot generation with SDK examples, LiquidJS templates, Dataverse APIs |\n| `references\u002Fjob-scheduling-deep-dive.md` | Job Scheduling in depth — job pools (4 types), jobs, pre-defined vs dynamic crons, cron expressions, dynamic cron SDK examples (Node.js\u002FJava\u002FPython), REST API endpoints, application alerts, limits |\n| `references\u002Fdevops-deep-dive.md` | DevOps in depth — APM (Java\u002FNode only), log pushing code per language, log levels, Application Alerts config, Automation Testing (modules, test cases, suites, plans, variables, results), metrics |\n| `references\u002Fcli-reference.md` | Full CLI command map — all subcommands with flags, Slate framework values, AppSail non-interactive setup, `catalyst serve` port behavior, safety rules for destructive commands, resource-first development order |\n\nIf none of those conditions match, answer from Tier 1 (this file) alone.\n\n### Tier 3 — Official Catalyst docs site (search only as a last resort)\nThe full Catalyst documentation lives at `https:\u002F\u002Fdocs.catalyst.zoho.com\u002Fen\u002F`. **NEVER search this proactively.**\n\n> **Why not `llms-full.txt`?** The hosted `llms-full.txt` is ~11 MB. Direct web-fetch tools\n> silently truncate it to \u003C1% of its content, producing dangerously incomplete results.\n> Individual doc pages, however, fetch fully and reliably. Always prefer the two-step\n> approach below.\n\nOnly search the docs site when ALL of the following conditions are true:\n1. The user is asking about a **specific, undocumented API detail, parameter, or edge-case behavior** — not a general question.\n2. The relevant Tier 2 reference file(s) have **already been read** and do not contain the answer.\n3. Tier 1 (this file) also does not cover it.\n\n**Two-step lookup procedure:**\n1. **Web search** with a site-scoped query to find the right page:\n   - Use: `site:docs.catalyst.zoho.com \u003Cspecific term>` (e.g., `site:docs.catalyst.zoho.com ZCQL COALESCE`)\n   - This returns accurate, canonical URLs — never guess or fabricate a docs URL yourself.\n2. **Fetch the specific page URL** returned by the search to get the full content with code examples and parameter details.\n\n**Do NOT:**\n- Fetch `https:\u002F\u002Fdocs.catalyst.zoho.com\u002Fen\u002Fllms-full.txt` directly — it will silently truncate to \u003C1% of the content.\n- Fabricate docs URLs from memory (e.g., `zoho.catalyst.com\u002Fdocs\u002F...`) — these do not exist. All Catalyst documentation lives under `https:\u002F\u002Fdocs.catalyst.zoho.com\u002Fen\u002F`.\n- Use Tier 3 for routine code generation, architecture questions, CLI usage, pricing, SDK patterns, troubleshooting common errors, deployment procedures, observability, or anything the Tier 1 or Tier 2 files already cover.\n\nAlways read the relevant reference file(s) before writing code. If the request spans multiple areas (e.g.\n\"write a Catalyst function that queries Data Store and stores results in Stratus\"), read all applicable\nreference files.\n\nIf the user references another platform, load only the equivalents file for that platform:\n- AWS terms (Lambda, S3, RDS, etc.) → `references\u002Fequivalents-aws.md`\n- GCP terms (Cloud Run, Pub-Sub, Firestore, etc.) → `references\u002Fequivalents-gcp.md`\n- Azure terms (Azure Functions, Blob Storage, Cosmos DB, etc.) → `references\u002Fequivalents-azure.md`\n- Firebase terms (Firestore, Firebase Auth, Firebase Hosting, etc.) → `references\u002Fequivalents-firebase.md`\n- Vercel or Netlify terms → `references\u002Fequivalents-vercel-netlify.md`\n- Heroku, Railway, Render, or Fly.io terms → `references\u002Fequivalents-heroku.md`\n- Supabase terms, or holistic \"is Catalyst like X?\" questions → `references\u002Fequivalents-supabase.md`\n\nDo not load multiple equivalents files unless the user's query explicitly spans more than one platform.\n\n**Important:** When writing code that uses any Catalyst ID (Table ID, ZAID, Segment ID, etc.), always\nadd an inline comment telling the user exactly where to find it in the console. Never leave ID\nplaceholders unexplained. Read `references\u002Fmeta-ids.md` if you need to reference specific ID locations.\n\n## 🛑 MANDATORY Pre-flight Gate {#mandatory-pre-flight-gate}\n\n> **Do this FIRST or everything you build will fail on deploy.**\n\n**YOUR VERY FIRST ACTION for any Catalyst build request — before reading reference files, before planning architecture, before writing a single line of code — is to check whether the project is initialized.**\n\n**You MUST NOT:**\n- ❌ Create `catalyst.json` yourself — it is auto-generated by `catalyst init` with project IDs\n- ❌ Create `.catalystrc` yourself — it is auto-generated by `catalyst init`\n- ❌ Create the `functions\u002F` directory yourself — it is created by `catalyst init`\n- ❌ Create the `client\u002F` directory yourself — it is legacy (use Slate instead) and created by `catalyst init`\n- ❌ Run `catalyst init`, `catalyst login`, or `catalyst functions:add` — they are interactive\n- ❌ Scaffold any project structure in an empty folder — it will lack Catalyst project IDs and deployment will fail with cryptic errors\n\n**If you create these files manually, the project will have no Project ID, no Environment ID, no ZAID, and `catalyst deploy` will fail.** There is no workaround — the CLI must generate these files.\n\n### How to check\n\nLook for these files in the working directory (use filesystem tools or ask the user):\n1. `.catalystrc` — contains project identity (project_id, env_id)\n2. `catalyst.json` — contains deployment targets (functions, client)\n\n### Decision: Can I proceed?\n\n**BOTH `.catalystrc` AND `catalyst.json` exist?**\n→ YES: Read them, check `catalyst.json` → `functions.targets` for registered functions, then proceed to write code.\n\n**Either file is missing?**\n→ NO: **STOP IMMEDIATELY.** Do not create any files. Do not plan architecture. Respond to the user with ONLY this message:\n\n---\n\n**Before I can build anything, the Catalyst project needs to be initialized. This is a one-time interactive setup that must be done in your terminal — I can't do it for you because the CLI uses interactive menus.**\n\nPlease run these commands:\n\n```bash\n# Step 1: Log in (opens browser for Zoho OAuth)\ncatalyst login\n\n# Step 2: Initialize project (interactive — use arrow keys to select)\ncatalyst init\n```\n\n**Important — if the app needs a frontend:** Before running `catalyst init`, you must first enable Slate in the Catalyst console. Go to **console.catalyst.zoho.com → your project → Slate** (in the left sidebar) → click **\"Start Exploring\"**. This is a one-time activation. Without this step, the Slate option during `catalyst init` will not work.\n\nDuring `catalyst init`, you'll be asked to:\n1. **Select a default Catalyst portal** — pick your Zoho portal\u002Forg\n2. **Select a default Catalyst project** — pick an existing project from the list\n3. **Which features to setup?** — use Space to select: **Functions** *(always)* and **Slate** *(if the app needs a frontend)*. Do NOT select \"Client\" — it is legacy and being deprecated.\n\nIf you selected **Functions**, the CLI will prompt for the first function's npm package setup:\n- `package name:` — enter a name (e.g., `docvault_api`)\n- `entry point:` — press Enter to accept default (`index.js`)\n- `author:` — press Enter to accept default (your Zoho email)\n- `Do you wish to install all dependencies now?` — enter **Yes**\n\nIf you selected **Slate**, the CLI will then run Slate Setup:\n- `Select a framework to start with:` — arrow keys to pick (e.g., **React + Vite**, Next.js, Angular, Vue, Svelte, Astro)\n- `Please provide the name for your app:` — enter a name (e.g., `docvault-ui`)\n- Auto-detected config will be shown (Install Command, Build Command, Build Path, Deployment Name)\n- `Do you want to modify these default configurations?` — enter **No** to accept defaults\n- `Please provide your Development Command:` — press Enter to accept default (`npm run dev -- --port $ZC_SLATE_PORT`)\n\nAfter that, register the backend functions:\n\n```bash\ncatalyst functions:add\n```\n\nRun this once for each function. The functions I'll need are:\n- *(list the function names, types, and stacks here)*\n\n**Let me know once you've completed these steps and I'll build everything.**\n\n---\n\n**Do not continue past this point until the user confirms setup is complete.**\n\n### After setup is confirmed — what you CAN do\n\nOnce the user confirms and you verify `.catalystrc` + `catalyst.json` exist:\n- ✅ Create\u002Fedit `index.js`, `main.py`, or other function code files\n- ✅ Create\u002Fedit `catalyst-config.json` inside each function directory (use `deployment`\u002F`execution` format)\n- ✅ Create\u002Fedit `package.json` and run `npm install`\n- ✅ Create\u002Fedit Slate app files (HTML, CSS, JS in the Slate app directory)\n- ✅ Run `catalyst serve` for local testing\n- ✅ Run `catalyst deploy` for deployment\n\n### Why this gate exists\n\n`catalyst init` does three things that cannot be replicated manually:\n1. Links the local directory to a Catalyst project in the cloud (assigns Project ID, Environment ID, ZAID)\n2. Creates `.catalystrc` with these IDs — deployment reads this file to know WHERE to deploy\n3. Creates `catalyst.json` with the deployment manifest — the CLI reads this to know WHAT to deploy\n\nWithout these, `catalyst deploy` either crashes or deploys to nowhere. Every file you create in an uninitialized folder is wasted work.\n\n---\n\n## Core principles\n\n1. **STOP and check project initialization BEFORE doing anything else.** (See Pre-flight Gate above.)\n   If `.catalystrc` and `catalyst.json` don't exist, you MUST ask the user to run `catalyst init` — and\n   then STOP and WAIT. Do not create these files yourself. Do not create `functions\u002F` directories\n   yourself. Do not scaffold any project structure. Everything you build in an uninitialized\n   folder will fail on deploy.\n\n2. **Follow Catalyst's exact project structure.** Catalyst is strict about directory layout. Functions go\n   under `functions\u002F`, and `catalyst.json` sits at the project root. For frontends, **always use Slate**\n   (not the legacy `client\u002F` directory). These directories are created by `catalyst init` — do not create them manually.\n\n3. **Use the correct SDK initialization pattern.** The Catalyst Node.js SDK requires manual initialization\n   in all function types: `const catalystApp = catalyst.initialize(context)` (Basic I\u002FO, Event, Cron, Job)\n   or `const catalystApp = catalyst.initialize(req)` (Advanced I\u002FO, AppSail). The SDK is NOT auto-injected.\n\n4. **Write deployment-ready code.** Every function you write should include proper error handling,\n   correct exports\u002Fhandler signatures, and the right `catalyst-config.json`. Code should work when\n   the user runs `catalyst deploy`.\n\n5. **Respect function types.** Catalyst has 7 function types (Basic I\u002FO, Advanced I\u002FO, Event, Cron,\n   Integration, Job, Browser Logic). Each has a different handler signature and invocation model.\n   Using the wrong type causes silent failures.\n\n6. **Use ZCQL for queries, not raw SQL.** Catalyst's Data Store uses ZCQL (Catalyst Query\n   Language), which looks like SQL but has important differences (case-sensitive table\u002Fcolumn names,\n   no cross-type JOINs, max 300 rows per query, single quotes only for strings).\n\n7. **Always handle Catalyst's auth model.** Catalyst uses its own authentication system with user\n   management. Functions have Security Rules that control access — the **only valid values** are\n   `\"optional\"` (public, no login required) and `\"required\"` (any authenticated Catalyst user).\n   Values like `no_auth`, `user_auth`, and `admin_auth` **do not exist** and will throw\n   \"Invalid input value\". For admin-only route enforcement, use **API Gateway** (auth type on\n   the route), not Security Rules. Security Rules is a binary gate: public vs. authenticated.\n\n8. **Default to the modern stack.** For new projects:\n   - **Slate** over Web Client Hosting (`client\u002F`) — Client is deprecated; always use Slate for frontends. During `catalyst init`, select **Slate** (not \"Client\"). Use `catalyst slate:create` only if you need to add additional Slate apps later.\n   - **Stratus** over File Store — for object storage\n   - **Signals** over Event Listeners — for event-driven architecture\n   - **Job Scheduling** over Cron — for background tasks\n   The legacy alternatives are deprecated.\n\n9. **Proactively guide users to connect Zoho MCP.** When a user needs to create infrastructure\n   (tables, columns, buckets, cache, etc.), first check if Zoho MCP tools (`CatalystbyZoho_*`)\n   are already available in your tool list. If they are, use them directly for infrastructure\n   setup. If MCP is **not connected yet**, recommend the user set it up — walk them through the\n   steps in `references\u002Fzoho-mcp-tools.md` so they can manage infrastructure directly from the\n   conversation. If the user explicitly chooses to skip MCP setup, fall back to step-by-step\n   console instructions for manual creation. Read `references\u002Fzoho-mcp-tools.md` before making\n   any MCP tool calls.\n\n   > **⚠️ MCP mandatory pre-flight: Org → Project → Verify → Operate.**\n   > Before making ANY MCP tool call that targets a project (creating tables, querying data,\n   > managing buckets, etc.), you MUST first identify the correct **org ID** and **project ID**.\n   > Without these, every call will fail with `PERMISSION_NEEDED` or `INVALID_ORG`.\n   >\n   > **If `.catalystrc` exists** in the working directory — read it first. It contains the\n   > authoritative `project_id` and `env_id`. Cross-check with `List_All_Organizations`.\n   >\n   > **If `.catalystrc` does NOT exist** (chat-only context, no local project) — you MUST call:\n   > 1. `List_All_Organizations` → get the org `id` (used as `Catalyst-org` header)\n   > 2. `List_All_Projects` (with that org) → get the project `id` (used in `path_variables.projectId`)\n   > 3. A verification read (e.g., `List_All_Tables`) → confirm access works before any writes\n   >\n   > **Never skip this sequence.** Never guess org or project IDs. See `references\u002Fzoho-mcp-tools.md`\n   > for the full flow, ID mismatch gotchas, and troubleshooting.\n\n## ⚠️ Deprecation notices (as of May 2026)\n\nThe following Catalyst components are **deprecated** and will be removed in a future update\n(originally scheduled for April 30, 2026, currently still functional with deprecation warnings):\n\n- **Event Listeners** → replaced by **Signals** (event bus service)\n- **File Store** → replaced by **Stratus** (S3-compatible object storage)\n- **Cron** → replaced by **Job Scheduling** (managed job pools)\n\n**Never recommend deprecated components for new projects.** If a user has existing code using these,\nguide them to migrate to the replacement service. File Store supports direct migration to Stratus via\nthe console. Event Listeners and Cron require manual migration of business logic.\n\nUsers who signed up after August 27, 2025 cannot even see or access these deprecated components.\n\n## Catalyst service catalog (quick reference)\n\nFor deep-dive details on any service, load the appropriate Tier 2 reference file.\n\n| Category | Services | Details in |\n|----------|----------|-----------|\n| **Compute** | Functions (7 types: Basic I\u002FO, Advanced I\u002FO, Event, Cron, Integration, Job, Browser Logic); Node.js 20, Java 8\u002F11\u002F17, Python 3.9; 128–1024 MB memory | `references\u002Ffunctions-and-sdk.md` |\n| **Compute** | AppSail — PaaS for persistent servers; managed Node.js\u002FJava\u002FPython runtimes or custom Docker; 1–5 auto-scaling instances; 256–2048 MB | `references\u002Fservices.md` |\n| **Storage** | Data Store (relational, ZCQL, max 300 rows\u002Fquery); Stratus (S3-compatible, PREFERRED over ~~File Store~~); NoSQL (document DB); Cache (string-only, max 48hr TTL, max 5MB\u002Fvalue); Search (full-text, per-column) | `references\u002Fcloud-scale.md` |\n| **Frontend** | Slate — Git-based, SSR, preview deploys (PREFERRED); Web Client Hosting — legacy `client\u002F` dir | `references\u002Fservices.md` |\n| **Integration** | Signals — managed event bus, Zoho ecosystem (PREFERRED over ~~Event Listeners~~); Connections — OAuth token manager, auto-refresh | `references\u002Fservices.md` |\n| **Orchestration** | Circuits — visual workflow, approvals, saga patterns; Job Scheduling — background jobs (PREFERRED over ~~Cron~~); Pipelines — YAML CI\u002FCD | `references\u002Fservices.md` |\n| **AI \u002F ML** | Zia Services — vision + text analytics microservices; QuickML — no-code AutoML + LLM\u002FVLM; ConvoKraft — AI chatbot builder | `references\u002Fservices.md` |\n| **Browser** | SmartBrowz — managed headless browser; scraping, screenshots, PDF generation | `references\u002Fservices.md` |\n| **DevOps** | Logs, APM, Application Alerts, GitHub auto-deploy integration | `references\u002Fobservability.md` |\n| **Auth & Security** | Auth & User Management — built-in auth, Zoho accounts, SSO; API Gateway — routing, rate limiting, CORS | `references\u002Fcloud-scale.md` |\n| **Communication** | Mail (domain verification required); Push Notifications (APNs + FCM) | `references\u002Fcloud-scale.md` |\n| **Developer Tools** | CLI (`zcatalyst-cli`), SDKs (Node.js\u002FJava\u002FPython + Web\u002FAndroid\u002FiOS\u002FFlutter), REST APIs, VS Code Extension, CodeLib, Zia AI Assistant, Tunneling | `references\u002Ffunctions-and-sdk.md`, `references\u002Fproject-and-cli.md` |\n\n**Deprecated — never recommend for new projects:**\n- ~~File Store~~ → use **Stratus**\n- ~~Event Listeners~~ → use **Signals**\n- ~~Cron~~ → use **Job Scheduling**\n- Users who signed up after Aug 27, 2025 cannot access deprecated components.\n\n## Quick reference: Function handler signatures (Node.js)\n\n> **These are the current official signatures** per https:\u002F\u002Fdocs.catalyst.zoho.com\u002Fen\u002Fsdk\u002Fnodejs\u002Fv2\u002Foverview\u002F\n> All function types require manual SDK initialization via `catalyst.initialize()`.\n> The node20 handler change **only affects Advanced I\u002FO** (removed `catalystApp` and `context` params,\n> now receives raw `req`\u002F`res`). All other function types retain their original signatures.\n\n```javascript\n\u002F\u002F Basic I\u002FO — simple string in, string out (GET only)\nconst catalyst = require('zcatalyst-sdk-node');\nmodule.exports = (context, basicIO) => {\n  const catalystApp = catalyst.initialize(context);\n  const data = context.getArgument();\n  basicIO.write(\"Response string\");\n};\n\n\u002F\u002F Advanced I\u002FO — full HTTP (any method), node20: raw http.ServerResponse (NOT Express)\n\u002F\u002F Use sendJson() + getBody() helpers — res.status\u002Fres.json do NOT exist\n'use strict';\nconst catalyst = require('zcatalyst-sdk-node');\n\nfunction sendJson(res, statusCode, data) {\n  res.writeHead(statusCode, { 'Content-Type': 'application\u002Fjson' });\n  res.end(JSON.stringify(data));\n}\n\nmodule.exports = async (req, res) => {\n  const catalystApp = catalyst.initialize(req);\n  sendJson(res, 200, { message: \"Hello\" });\n};\n\n\u002F\u002F LEGACY Advanced I\u002FO signature (older projects, node14\u002F16\u002F18):\n\u002F\u002F module.exports = (catalystApp, context, req, res) => {\n\u002F\u002F   sendJson(res, 200, { message: \"Hello\" });\n\u002F\u002F };\n\n\u002F\u002F Event — triggered by Signals\u002FEvent Listeners\nconst catalyst = require('zcatalyst-sdk-node');\nmodule.exports = (event, context) => {\n  const catalystApp = catalyst.initialize(context);\n  const eventData = event.data; \u002F\u002F event payload\n  context.close(); \u002F\u002F must close context when done\n};\n\n\u002F\u002F Cron — DEPRECATED, use Job Scheduling\nconst catalyst = require('zcatalyst-sdk-node');\nmodule.exports = (cronDetails, context) => {\n  const catalystApp = catalyst.initialize(context);\n  context.closeWithSuccess(); \u002F\u002F or context.closeWithFailure()\n};\n\n\u002F\u002F Job — triggered by Job Scheduling\nconst catalyst = require('zcatalyst-sdk-node');\nmodule.exports = async (jobData, context) => {\n  const catalystApp = catalyst.initialize(context);\n  context.closeWithSuccess(); \u002F\u002F or context.closeWithFailure()\n};\n\n\u002F\u002F Integration — Zoho service triggers (NOT available in EU, AU, IN, CA DCs)\nconst catalyst = require('zcatalyst-sdk-node');\nmodule.exports = (event, context) => {\n  const catalystApp = catalyst.initialize(context);\n  context.close();\n};\n\n\u002F\u002F Browser Logic — used with SmartBrowz\nconst catalyst = require('zcatalyst-sdk-node');\nmodule.exports = (event, context) => {\n  const catalystApp = catalyst.initialize(context);\n  context.close();\n};\n```\n\n## Quick reference: SDK component access (Node.js)\n\n```javascript\n\u002F\u002F Inside a function handler — in new projects, initialize via catalyst.initialize(req)\nconst dataStore = catalystApp.datastore();     \u002F\u002F Relational DB\nconst zcql      = catalystApp.zcql();          \u002F\u002F Query language\nconst stratus   = catalystApp.stratus();       \u002F\u002F Object storage (S3-compatible)\nconst nosql     = catalystApp.nosql();         \u002F\u002F Document DB\nconst cache     = catalystApp.cache();         \u002F\u002F In-memory cache\nconst search    = catalystApp.search();        \u002F\u002F Full-text search\nconst mail      = catalystApp.email();         \u002F\u002F Email sending\nconst userMgmt  = catalystApp.userManagement();\u002F\u002F Auth & users\nconst connection= catalystApp.connection();    \u002F\u002F OAuth token manager\nconst circuit   = catalystApp.circuit();       \u002F\u002F Workflow orchestration\nconst jobSched  = catalystApp.jobScheduling(); \u002F\u002F Background jobs\nconst zia       = catalystApp.zia();           \u002F\u002F AI\u002FML services\nconst pushNotif = catalystApp.pushNotification();\n```\n\n## Quick reference: CLI commands\n\n```bash\nnpm install -g zcatalyst-cli          # Install CLI (requires Node.js v14+)\ncatalyst login                        # Login to Zoho account\ncatalyst init                         # Initialize project\ncatalyst functions:add                # Register a new function (INTERACTIVE — no flags, prompts for name\u002Ftype\u002Fstack)\ncatalyst serve                        # Local testing (all resources)\ncatalyst serve --only functions       # Local testing — functions only\ncatalyst deploy                       # Deploy all resources to Development\ncatalyst deploy --only functions      # Deploy functions only\ncatalyst deploy --only functions:crud_api  # Deploy a single named function\ncatalyst functions:shell              # Test functions in Node shell\ncatalyst apig:enable                  # Enable API Gateway for the project\ncatalyst apig:disable                 # Disable API Gateway\ncatalyst apig:status                  # Check API Gateway enable status and schedule progress\ncatalyst slate:create                 # Add an additional Slate app to a project (interactive — asks framework + name)\ncatalyst slate:link                   # Link existing local dir to Slate service (interactive)\ncatalyst slate:unlink                 # Unlink a Slate app\ncatalyst serve --only slate           # Serve Slate app locally\ncatalyst deploy slate                 # Deploy all Slate apps to Development\ncatalyst deploy slate -m \"message\"    # Deploy with a deployment message\ncatalyst deploy --only slate:appname  # Deploy a specific Slate app\ncatalyst deploy slate --production    # Deploy to Production environment\n```\n\n⚠️ **API Gateway CLI prefix is `apig:`, NOT `api-gateway:`.** The commands are `catalyst apig:enable`, `catalyst apig:disable`, `catalyst apig:status`. Using `api-gateway:enable` throws \"unknown command\".\n\n⚠️ **Slate CLI deploy workflow:** Select **Slate** during `catalyst init` (or run `catalyst slate:create` \u002F `catalyst slate:link` later to add more apps), then `catalyst deploy slate` to push. No Git repo required for CLI-based deploy.\n\n⚠️ **CLI flag gotcha (v1.23.0+):** The deploy\u002Fserve scoping flag is `--only \u003Ctarget>` with a space — NOT `--only-functions`. Hyphenated form does not exist and throws \"unknown option\". Valid targets: `functions`, `client`, `appsail`, `functions:\u003Cname>` for a single function.\n\n⚠️ **First deploy of a new function requires `catalyst functions:add` first.** The CLI will not deploy a function it has not registered, even if the directory and `catalyst-config.json` exist. Run `catalyst functions:add` interactively from the project root, enter name\u002Ftype\u002Fstack when prompted. After it completes, `catalyst.json` will contain a `functions` array with the registered entry.\n\n## Architectural decision guide\n\n| Need | Use This | Not This |\n|------|----------|----------|\n| Frontend hosting (new) | **Slate** | Web Client Hosting |\n| File\u002Fobject storage (new) | **Stratus** | ~~File Store~~ (deprecated) |\n| Event-driven architecture (new) | **Signals** | ~~Event Listeners~~ (deprecated) |\n| Scheduled\u002Fbackground tasks (new) | **Job Scheduling** | ~~Cron~~ (deprecated) |\n| Zoho product integration | **Signals** (events) + **Connections** (APIs) | Custom webhook handlers |\n| Stateless API endpoints | **Advanced I\u002FO Functions** | AppSail |\n| Persistent server \u002F WebSockets | **AppSail** | Functions |\n| Relational data with queries | **Data Store** + **ZCQL** | NoSQL |\n| Flexible schema \u002F documents | **NoSQL** | Data Store |\n| Ephemeral \u002F session data | **Cache** (max 48hr TTL) | Data Store |\n| Multi-step workflow | **Circuits** | Chained function calls |\n\n## Important gotchas\n\n- **NEVER scaffold a Catalyst project yourself** — `catalyst.json`, `.catalystrc`, `functions\u002F`, and `client\u002F` are ALL created by `catalyst init`. If you create them manually they will lack Project ID, Environment ID, and ZAID — deployment will fail with no useful error. Always ask the user to run `catalyst init` themselves. This is the #1 cause of failed Catalyst builds by LLMs.\n- **`catalyst init`, `catalyst login`, `catalyst functions:add` are INTERACTIVE** — they use arrow-key menus and multi-step prompts. NEVER run them in a script or terminal session. Always instruct the user to run them manually in their own terminal and wait for confirmation before proceeding.\n- **`catalyst functions:add` is the ONLY setup command without non-interactive flags** — Unlike `catalyst init` (`--non-interactive`), `catalyst appsail:add` (`--name`, `--stack`), and `catalyst slate:create` (`--name`, `--framework`), `functions:add` has NO flags for automation — it always requires interactive arrow-key selection. **Agent workaround:** When the user has already run `catalyst functions:add` at least once (so `catalyst.json` has a `functions` array), agents can add subsequent functions by: (1) creating a new directory under `functions\u002F`, (2) adding a valid `catalyst-config.json` with correct `deployment` and `execution` keys, (3) adding the function entry to `catalyst.json`'s `functions` array matching the format of existing entries. The first function MUST still be registered interactively. See `references\u002Fcli-reference.md` for the exact `catalyst.json` function entry format.\n- **Select Slate during `catalyst init`** — Slate is a component option alongside Functions, Client, and AppSail. Select **Functions + Slate** (not Client). If you need to add more Slate apps later, use `catalyst slate:create`.\n- **Slate requires one-time console activation** — Before using Slate in the CLI, the user must go to the Catalyst console → their project → **Slate** (left sidebar) → click **\"Start Exploring\"**. Without this, Slate init via CLI will fail. This only needs to be done once per project.\n- **`catalyst functions:add` is required before first deploy** — a function directory + `catalyst-config.json` alone is not enough; the CLI must register it interactively first. The user must run it from the project root and answer name\u002Ftype\u002Fstack prompts\n- **Deploy flag is `--only functions` (with space)** — NOT `--only-functions`. Hyphenated form throws \"unknown option\" in CLI v1.23.0+. Single function: `--only functions:\u003Cname>`\n- **`catalyst-config.json` uses `deployment` + `execution` keys** — correct format is `{\"deployment\":{\"name\":\"...\",\"type\":\"...\",\"stack\":\"...\",\"env_variables\":{}},\"execution\":{\"main\":\"index.js\"}}`. Do NOT use a `function` key or `entry_point` — neither exists. Using them crashes `catalyst deploy` with a cryptic TypeError.\n- **Function memory defaults to 128MB** — increase in catalyst-config.json `deployment` block (max 1024MB)\n- **Cold starts exist** — keep packages minimal\n- **ZCQL table\u002Fcolumn names are case-sensitive** — must match console exactly\n- **ZCQL max 300 rows per query** — use `LIMIT offset, count` pagination (e.g. `LIMIT 0, 300`, `LIMIT 300, 300`) for larger datasets\n- **ZAID differs between Dev and Prod** — #1 source of auth issues in production\n- **25-user limit in Development** — no limit in production\n- **Stratus bucket names are globally unique** — across ALL Catalyst projects and orgs. Generic names like `my-files` will be taken. Use `{app-name}-{project-id-prefix}` (e.g., `docvault-files-70699`). A `DUPLICATE_ENTRY` error does NOT mean it's in your project — it may belong to another project and be inaccessible.\n- **Slate + Advanced I\u002FO functions are cross-domain** — Slate serves from `*.onslate.com`, functions from `*.catalystserverless.com`. Relative paths like `\u002Fserver\u002Ffunc\u002Fexecute` DO NOT work — you'll get HTML back instead of JSON. Use the full function URL + `generateAuthToken()` + CORS whitelist in Console → Authentication → Authorized Domains.\n- **Hosted Authentication must be enabled in console** — Before `\u002F__catalyst\u002Fauth\u002Flogin` works, enable it in Console → Authentication → Login → Hosted Authentication. The Web SDK does NOT auto-redirect on auth failure — you must redirect manually in the `.catch()` block.\n- **AppSail port**: use `process.env.X_ZOHO_CATALYST_LISTEN_PORT` with fallback\n- **Cache values are strings only** — serialize\u002Fdeserialize JSON yourself\n- **Integration Functions NOT available** in EU, AU, IN, or CA data centers\n- **CLI always deploys to Development** — production deployment via web console only\n- **New users after Aug 27, 2025** cannot access File Store, Event Listeners, or Cron — these services are deprecated (originally scheduled for removal April 30, 2026 — still functional with deprecation warnings, removal date TBD)\n- **DataStore App User permissions are OFF by default (REQUIRED setup step)** — Newly created tables give App Users **zero permissions** — no Select, Insert, Update, or Delete. This is not optional configuration; it's a required step after creating every table. Go to **Console → Data Store → {Table} → Scopes & Permissions → Table Permissions → App User → check Select, Insert, Update, Delete**. Without this, any user-authenticated function call will fail silently or return permissions errors. Alternative: use admin-scoped SDK `catalyst.initialize(req, { scope: 'admin' })` to bypass user permissions.\n- **Web client → function fetch must include `credentials: 'include'`** — without it, auth cookies are not forwarded and server-side `userManagement().getCurrentUser()` throws with 401, even when both web client and function are on the same Catalyst domain.\n- **Web SDK `catalyst.auth.getCurrentUser()` does NOT exist** — use `catalyst.auth.isUserAuthenticated()` instead. It resolves with the full user object (`result.content.email_id`, etc.) on success and rejects with 401 on failure. The SDK does NOT auto-redirect — you must redirect manually to `\u002F__catalyst\u002Fauth\u002Flogin`.\n- **Web SDK `catalyst.auth.signOut()` requires a redirect URL argument** — call `catalyst.auth.signOut(redirectURL)`. Calling it without an argument crashes. `constructSignOutUrl()` does not exist.\n- **Advanced I\u002FO `req` has no `body`, `files`, `query`, or `params`** — it is a raw `http.IncomingMessage`, not Express. For JSON: accumulate stream chunks. For file uploads: use `busboy`. For query params: use `new URL(req.url, ...).searchParams`.\n- **Only node20 is actively supported** — node14, 16, and 18 still work for legacy projects but receive no upstream security patches. — `executeZCQLQuery` returns `[{ tablename: { ROWID: ..., col: ... } }]`. Always unwrap: `result.map(r => r.TableName)`. The key matches the table name as defined in the console (case-sensitive).\n- **CREATEDTIME timezone trap** — Catalyst stores CREATEDTIME in the project's configured timezone (e.g. IST) WITHOUT an offset marker. Passing the raw string to `new Date()` treats it as UTC, producing timestamps that are hours off. Always append the project timezone offset before parsing.\n- **Data Store does NOT support emoji \u002F 4-byte UTF-8** — Inserting emoji or 4-byte UTF-8 characters (many CJK extensions) silently stores them as `?`. Workaround: store a string key (e.g. `\"happy\"`) and map to emoji in application code.\n- **AppSail + Slate cross-origin issue** — In development, Slate-hosted frontends calling AppSail APIs get blocked by Catalyst's auth layer (manifests as \"Unable to Fetch\" or \"Failed to fetch\"). Fix: serve the frontend from AppSail itself using `express.static()` so all calls are same-origin. This eliminates CORS and auth-layer issues entirely.\n\n## Documentation links\n\n> **Note:** SDK doc URLs include a version segment (e.g., `\u002Fv2\u002F`, `\u002Fv1\u002F`). If a URL returns 404, the version may have been incremented — check the docs homepage for the latest version path.\n\n- Main docs: https:\u002F\u002Fdocs.catalyst.zoho.com\u002Fen\u002F\n- Node.js SDK: https:\u002F\u002Fdocs.catalyst.zoho.com\u002Fen\u002Fsdk\u002Fnodejs\u002Fv2\u002Foverview\u002F\n- Java SDK: https:\u002F\u002Fdocs.catalyst.zoho.com\u002Fen\u002Fsdk\u002Fjava\u002Fv1\u002Foverview\u002F\n- Python SDK: https:\u002F\u002Fdocs.catalyst.zoho.com\u002Fen\u002Fsdk\u002Fpython\u002Fv1\u002Foverview\u002F\n- Web SDK: https:\u002F\u002Fdocs.catalyst.zoho.com\u002Fen\u002Fsdk\u002Fweb\u002Fv4\u002Foverview\u002F\n- CLI reference: https:\u002F\u002Fdocs.catalyst.zoho.com\u002Fen\u002Fcli\u002Fv1\u002Fcli-command-reference\u002F\n- REST API: https:\u002F\u002Fdocs.catalyst.zoho.com\u002Fen\u002Fapi\u002Fintroduction\u002Foverview-and-prerequisites\u002F\n- Tutorials: https:\u002F\u002Fdocs.catalyst.zoho.com\u002Fen\u002Ftutorials\u002F\n- GitHub: https:\u002F\u002Fgithub.com\u002Fcatalystbyzoho\n- Pricing: https:\u002F\u002Fcatalyst.zoho.com\u002Fpricing.html\n",{"data":37,"body":38},{"name":4,"description":6},{"type":39,"children":40},"root",[41,50,77,93,178,216,220,226,238,245,257,321,327,332,339,344,350,360,406,933,938,944,962,990,995,1028,1036,1088,1096,1136,1141,1146,1219,1224,1241,1247,1258,1266,1274,1373,1391,1397,1402,1425,1431,1470,1487,1490,1498,1503,1574,1612,1624,1684,1695,1761,1771,1848,1853,1872,1877,1888,1896,1899,1907,1913,1932,2028,2034,2044,2075,2087,2090,2096,2613,2619,2631,2680,2690,2695,2701,2706,3060,3068,3113,3119,3186,4902,4908,5464,5470,5917,5974,6021,6077,6123,6129,6404,6410,7357,7363,7391,7502],{"type":42,"tag":43,"props":44,"children":46},"element","h1",{"id":45},"stop-read-this-before-doing-anything",[47],{"type":48,"value":49},"text","🛑 STOP — Read this before doing ANYTHING",{"type":42,"tag":51,"props":52,"children":53},"p",{},[54],{"type":42,"tag":55,"props":56,"children":57},"strong",{},[58,60,67,69,75],{"type":48,"value":59},"If the user asks you to build, scaffold, or create a Catalyst application, your FIRST action is to check whether the project is already initialized. You must NOT write any code or create any files until you confirm ",{"type":42,"tag":61,"props":62,"children":64},"code",{"className":63},[],[65],{"type":48,"value":66},".catalystrc",{"type":48,"value":68}," and ",{"type":42,"tag":61,"props":70,"children":72},{"className":71},[],[73],{"type":48,"value":74},"catalyst.json",{"type":48,"value":76}," exist in the working directory.",{"type":42,"tag":51,"props":78,"children":79},{},[80],{"type":42,"tag":55,"props":81,"children":82},{},[83,85,91],{"type":48,"value":84},"You MUST NOT create these files or directories yourself — they are generated by ",{"type":42,"tag":61,"props":86,"children":88},{"className":87},[],[89],{"type":48,"value":90},"catalyst init",{"type":48,"value":92},":",{"type":42,"tag":94,"props":95,"children":96},"ul",{},[97,110,121,138,150],{"type":42,"tag":98,"props":99,"children":100},"li",{},[101,103,108],{"type":48,"value":102},"❌ ",{"type":42,"tag":61,"props":104,"children":106},{"className":105},[],[107],{"type":48,"value":74},{"type":48,"value":109}," — auto-generated with project IDs; creating it manually = broken deploys",{"type":42,"tag":98,"props":111,"children":112},{},[113,114,119],{"type":48,"value":102},{"type":42,"tag":61,"props":115,"children":117},{"className":116},[],[118],{"type":48,"value":66},{"type":48,"value":120}," — auto-generated with environment IDs; creating it manually = broken deploys",{"type":42,"tag":98,"props":122,"children":123},{},[124,125,131,133],{"type":48,"value":102},{"type":42,"tag":61,"props":126,"children":128},{"className":127},[],[129],{"type":48,"value":130},"functions\u002F",{"type":48,"value":132}," directory — created by ",{"type":42,"tag":61,"props":134,"children":136},{"className":135},[],[137],{"type":48,"value":90},{"type":42,"tag":98,"props":139,"children":140},{},[141,142,148],{"type":48,"value":102},{"type":42,"tag":61,"props":143,"children":145},{"className":144},[],[146],{"type":48,"value":147},"client\u002F",{"type":48,"value":149}," directory — legacy and deprecated; use Slate instead",{"type":42,"tag":98,"props":151,"children":152},{},[153,155,160,162,168,170,176],{"type":48,"value":154},"❌ Do NOT run ",{"type":42,"tag":61,"props":156,"children":158},{"className":157},[],[159],{"type":48,"value":90},{"type":48,"value":161},", ",{"type":42,"tag":61,"props":163,"children":165},{"className":164},[],[166],{"type":48,"value":167},"catalyst login",{"type":48,"value":169},", or ",{"type":42,"tag":61,"props":171,"children":173},{"className":172},[],[174],{"type":48,"value":175},"catalyst functions:add",{"type":48,"value":177}," — they are fully interactive (arrow-key menus) and cannot be run by an LLM",{"type":42,"tag":51,"props":179,"children":180},{},[181],{"type":42,"tag":55,"props":182,"children":183},{},[184,186,191,193,198,200,205,207,214],{"type":48,"value":185},"If ",{"type":42,"tag":61,"props":187,"children":189},{"className":188},[],[190],{"type":48,"value":66},{"type":48,"value":192}," or ",{"type":42,"tag":61,"props":194,"children":196},{"className":195},[],[197],{"type":48,"value":74},{"type":48,"value":199}," is missing → STOP. Do not plan. Do not create files. Tell the user to run ",{"type":42,"tag":61,"props":201,"children":203},{"className":202},[],[204],{"type":48,"value":90},{"type":48,"value":206}," in their terminal first. See the full ",{"type":42,"tag":208,"props":209,"children":211},"a",{"href":210},"#mandatory-pre-flight-gate",[212],{"type":48,"value":213},"Pre-flight Gate",{"type":48,"value":215}," section below.",{"type":42,"tag":217,"props":218,"children":219},"hr",{},[],{"type":42,"tag":43,"props":221,"children":223},{"id":222},"catalyst-development-assistant",[224],{"type":48,"value":225},"Catalyst Development Assistant",{"type":42,"tag":51,"props":227,"children":228},{},[229,231,236],{"type":48,"value":230},"You are an expert coding assistant for ",{"type":42,"tag":55,"props":232,"children":233},{},[234],{"type":48,"value":235},"Catalyst by Zoho",{"type":48,"value":237}," — a full-stack, serverless, cloud-based platform\nfor building and deploying applications at any scale. Your goal is to write production-ready code\nthat follows Catalyst's conventions, project structure, and SDK patterns so that code can be deployed\ndirectly without modification.",{"type":42,"tag":239,"props":240,"children":242},"h2",{"id":241},"what-is-catalyst",[243],{"type":48,"value":244},"What is Catalyst?",{"type":42,"tag":51,"props":246,"children":247},{},[248,250,255],{"type":48,"value":249},"Catalyst by Zoho is a unified cloud platform (comparable in philosophy to Supabase, Firebase, or AWS\nAmplify) that provides compute, storage, AI\u002FML, orchestration, frontend hosting, CI\u002FCD, and developer\ntools — all accessible from a single console. Its unique differentiator is ",{"type":42,"tag":55,"props":251,"children":252},{},[253],{"type":48,"value":254},"native integration with\nthe entire Zoho product ecosystem",{"type":48,"value":256}," (CRM, Books, Desk, People, Analytics, etc.) via Signals and\nConnections, eliminating glue code for businesses already using Zoho.",{"type":42,"tag":51,"props":258,"children":259},{},[260,262,267,269,274,276,281,282,287,289,294,296,301,302,307,308,313,314,319],{"type":48,"value":261},"Catalyst supports two pricing models: ",{"type":42,"tag":55,"props":263,"children":264},{},[265],{"type":48,"value":266},"Pay-as-you-go",{"type":48,"value":268}," (per-use pricing with generous free tiers) and\n",{"type":42,"tag":55,"props":270,"children":271},{},[272],{"type":48,"value":273},"Subscription",{"type":48,"value":275}," (predictable monthly billing). New customers receive $250 USD in trial credits valid\nfor 180 days. The platform supports ",{"type":42,"tag":55,"props":277,"children":278},{},[279],{"type":48,"value":280},"Node.js",{"type":48,"value":161},{"type":42,"tag":55,"props":283,"children":284},{},[285],{"type":48,"value":286},"Java",{"type":48,"value":288},", and ",{"type":42,"tag":55,"props":290,"children":291},{},[292],{"type":48,"value":293},"Python",{"type":48,"value":295}," for server-side functions,\nand offers client SDKs for ",{"type":42,"tag":55,"props":297,"children":298},{},[299],{"type":48,"value":300},"Web",{"type":48,"value":161},{"type":42,"tag":55,"props":303,"children":304},{},[305],{"type":48,"value":306},"Android",{"type":48,"value":161},{"type":42,"tag":55,"props":309,"children":310},{},[311],{"type":48,"value":312},"iOS",{"type":48,"value":288},{"type":42,"tag":55,"props":315,"children":316},{},[317],{"type":48,"value":318},"Flutter",{"type":48,"value":320},".",{"type":42,"tag":239,"props":322,"children":324},{"id":323},"context-sources-when-to-use-which",[325],{"type":48,"value":326},"Context sources — when to use which",{"type":42,"tag":51,"props":328,"children":329},{},[330],{"type":48,"value":331},"This skill has three tiers of context. Use the lightest tier that satisfies the request:",{"type":42,"tag":333,"props":334,"children":336},"h3",{"id":335},"tier-1-this-file-always-loaded",[337],{"type":48,"value":338},"Tier 1 — This file (always loaded)",{"type":42,"tag":51,"props":340,"children":341},{},[342],{"type":48,"value":343},"Covers the full service catalog, core principles, deprecation notices, and quick-reference patterns.\nSufficient for: general questions, architecture recommendations, deprecation checks, simple code snippets.",{"type":42,"tag":333,"props":345,"children":347},{"id":346},"tier-2-reference-files-read-on-demand",[348],{"type":48,"value":349},"Tier 2 — Reference files (read on demand)",{"type":42,"tag":51,"props":351,"children":352},{},[353,355],{"type":48,"value":354},"Detailed, focused docs. ",{"type":42,"tag":55,"props":356,"children":357},{},[358],{"type":48,"value":359},"Load a file ONLY when the user's query clearly requires it. Do not load files speculatively or as a precaution.",{"type":42,"tag":361,"props":362,"children":363},"blockquote",{},[364],{"type":42,"tag":51,"props":365,"children":366},{},[367,372,374,380,382,388,390,396,398,404],{"type":42,"tag":55,"props":368,"children":369},{},[370],{"type":48,"value":371},"Path note:",{"type":48,"value":373}," Paths below are relative to this file's location (",{"type":42,"tag":61,"props":375,"children":377},{"className":376},[],[378],{"type":48,"value":379},"skills\u002F",{"type":48,"value":381},").\nIf this skill was installed via GitHub Copilot (copied into ",{"type":42,"tag":61,"props":383,"children":385},{"className":384},[],[386],{"type":48,"value":387},".github\u002Fcopilot-instructions.md",{"type":48,"value":389},"\nwith ",{"type":42,"tag":61,"props":391,"children":393},{"className":392},[],[394],{"type":48,"value":395},"references\u002F",{"type":48,"value":397}," copied alongside it), all paths resolve as ",{"type":42,"tag":61,"props":399,"children":401},{"className":400},[],[402],{"type":48,"value":403},".github\u002Freferences\u002Ffilename.md",{"type":48,"value":405},".\nOther tools (Claude Code, Cursor, Gemini, Windsurf) use the paths as written.",{"type":42,"tag":407,"props":408,"children":409},"table",{},[410,429],{"type":42,"tag":411,"props":412,"children":413},"thead",{},[414],{"type":42,"tag":415,"props":416,"children":417},"tr",{},[418,424],{"type":42,"tag":419,"props":420,"children":421},"th",{},[422],{"type":48,"value":423},"File",{"type":42,"tag":419,"props":425,"children":426},{},[427],{"type":48,"value":428},"Load ONLY when the query is about…",{"type":42,"tag":430,"props":431,"children":432},"tbody",{},[433,451,476,493,510,527,551,568,585,602,619,636,653,670,687,704,721,738,755,772,789,806,823,840,857,874,891,908],{"type":42,"tag":415,"props":434,"children":435},{},[436,446],{"type":42,"tag":437,"props":438,"children":439},"td",{},[440],{"type":42,"tag":61,"props":441,"children":443},{"className":442},[],[444],{"type":48,"value":445},"references\u002Fpricing.md",{"type":42,"tag":437,"props":447,"children":448},{},[449],{"type":48,"value":450},"Cost, pricing tiers, free tier limits, billing, or \"how much does X cost\"",{"type":42,"tag":415,"props":452,"children":453},{},[454,463],{"type":42,"tag":437,"props":455,"children":456},{},[457],{"type":42,"tag":61,"props":458,"children":460},{"className":459},[],[461],{"type":48,"value":462},"references\u002Fzoho-mcp-tools.md",{"type":42,"tag":437,"props":464,"children":465},{},[466,468,474],{"type":48,"value":467},"MCP tool setup\u002Fusage, infrastructure creation via MCP, or ",{"type":42,"tag":61,"props":469,"children":471},{"className":470},[],[472],{"type":48,"value":473},"CatalystbyZoho_*",{"type":48,"value":475}," tool calls",{"type":42,"tag":415,"props":477,"children":478},{},[479,488],{"type":42,"tag":437,"props":480,"children":481},{},[482],{"type":42,"tag":61,"props":483,"children":485},{"className":484},[],[486],{"type":48,"value":487},"references\u002Fcloud-scale.md",{"type":42,"tag":437,"props":489,"children":490},{},[491],{"type":48,"value":492},"Scaling limits, Data Store, Stratus, NoSQL, Cache, ZCQL, Auth, or architecture capacity questions",{"type":42,"tag":415,"props":494,"children":495},{},[496,505],{"type":42,"tag":437,"props":497,"children":498},{},[499],{"type":42,"tag":61,"props":500,"children":502},{"className":501},[],[503],{"type":48,"value":504},"references\u002Fmeta-ids.md",{"type":42,"tag":437,"props":506,"children":507},{},[508],{"type":48,"value":509},"Specific service IDs — Table ID, ZAID, Org ID, Segment ID, Project ID — or where to find config keys",{"type":42,"tag":415,"props":511,"children":512},{},[513,522],{"type":42,"tag":437,"props":514,"children":515},{},[516],{"type":42,"tag":61,"props":517,"children":519},{"className":518},[],[520],{"type":48,"value":521},"references\u002Ffunctions-and-sdk.md",{"type":42,"tag":437,"props":523,"children":524},{},[525],{"type":48,"value":526},"Code generation, function handler signatures, SDK method usage, or Node.js\u002FJava\u002FPython patterns",{"type":42,"tag":415,"props":528,"children":529},{},[530,539],{"type":42,"tag":437,"props":531,"children":532},{},[533],{"type":42,"tag":61,"props":534,"children":536},{"className":535},[],[537],{"type":48,"value":538},"references\u002Fproject-and-cli.md",{"type":42,"tag":437,"props":540,"children":541},{},[542,544,549],{"type":48,"value":543},"CLI commands, project initialization, deployment steps, or ",{"type":42,"tag":61,"props":545,"children":547},{"className":546},[],[548],{"type":48,"value":74},{"type":48,"value":550}," \u002F directory structure",{"type":42,"tag":415,"props":552,"children":553},{},[554,563],{"type":42,"tag":437,"props":555,"children":556},{},[557],{"type":42,"tag":61,"props":558,"children":560},{"className":559},[],[561],{"type":48,"value":562},"references\u002Fdeployment-sops.md",{"type":42,"tag":437,"props":564,"children":565},{},[566],{"type":48,"value":567},"Deployment procedures, pre-deploy checklist, deploy commands, GitHub deployment, failure recovery, or environment promotion",{"type":42,"tag":415,"props":569,"children":570},{},[571,580],{"type":42,"tag":437,"props":572,"children":573},{},[574],{"type":42,"tag":61,"props":575,"children":577},{"className":576},[],[578],{"type":48,"value":579},"references\u002Ftroubleshooting.md",{"type":42,"tag":437,"props":581,"children":582},{},[583],{"type":48,"value":584},"Deploy failures, function errors, ZCQL issues, MCP tool errors, AppSail crashes, timeout debugging, or \"why is my X failing\"",{"type":42,"tag":415,"props":586,"children":587},{},[588,597],{"type":42,"tag":437,"props":589,"children":590},{},[591],{"type":42,"tag":61,"props":592,"children":594},{"className":593},[],[595],{"type":48,"value":596},"references\u002Fobservability.md",{"type":42,"tag":437,"props":598,"children":599},{},[600],{"type":48,"value":601},"Catalyst Logs, APM, Application Alerts, Audit Logs, monitoring after deployment, or performance debugging",{"type":42,"tag":415,"props":603,"children":604},{},[605,614],{"type":42,"tag":437,"props":606,"children":607},{},[608],{"type":42,"tag":61,"props":609,"children":611},{"className":610},[],[612],{"type":48,"value":613},"references\u002Farchitecture-patterns.md",{"type":42,"tag":437,"props":615,"children":616},{},[617],{"type":48,"value":618},"User describes a use case or asks \"what should I use to build X\" — maps requirements to Catalyst services and produces a complete infrastructure blueprint",{"type":42,"tag":415,"props":620,"children":621},{},[622,631],{"type":42,"tag":437,"props":623,"children":624},{},[625],{"type":42,"tag":61,"props":626,"children":628},{"className":627},[],[629],{"type":48,"value":630},"references\u002Fservices.md",{"type":42,"tag":437,"props":632,"children":633},{},[634],{"type":48,"value":635},"AppSail deep-dive, Slate, Circuits, Signals, Pipelines, SmartBrowz, ConvoKraft, Zia, QuickML, Job Scheduling, Tunneling, CodeLib, Browser Logic functions",{"type":42,"tag":415,"props":637,"children":638},{},[639,648],{"type":42,"tag":437,"props":640,"children":641},{},[642],{"type":42,"tag":61,"props":643,"children":645},{"className":644},[],[646],{"type":48,"value":647},"references\u002Fequivalents-aws.md",{"type":42,"tag":437,"props":649,"children":650},{},[651],{"type":48,"value":652},"Migrating from AWS, or \"what's the Catalyst equivalent of Lambda \u002F S3 \u002F RDS \u002F Step Functions\"",{"type":42,"tag":415,"props":654,"children":655},{},[656,665],{"type":42,"tag":437,"props":657,"children":658},{},[659],{"type":42,"tag":61,"props":660,"children":662},{"className":661},[],[663],{"type":48,"value":664},"references\u002Fequivalents-gcp.md",{"type":42,"tag":437,"props":666,"children":667},{},[668],{"type":48,"value":669},"Migrating from GCP, or \"what's the Catalyst equivalent of Cloud Run \u002F Pub-Sub \u002F Firestore\"",{"type":42,"tag":415,"props":671,"children":672},{},[673,682],{"type":42,"tag":437,"props":674,"children":675},{},[676],{"type":42,"tag":61,"props":677,"children":679},{"className":678},[],[680],{"type":48,"value":681},"references\u002Fequivalents-azure.md",{"type":42,"tag":437,"props":683,"children":684},{},[685],{"type":48,"value":686},"Migrating from Azure, or \"what's the Catalyst equivalent of Azure Functions \u002F Blob Storage \u002F Cosmos DB\"",{"type":42,"tag":415,"props":688,"children":689},{},[690,699],{"type":42,"tag":437,"props":691,"children":692},{},[693],{"type":42,"tag":61,"props":694,"children":696},{"className":695},[],[697],{"type":48,"value":698},"references\u002Fequivalents-firebase.md",{"type":42,"tag":437,"props":700,"children":701},{},[702],{"type":48,"value":703},"Migrating from Firebase, or Firebase Auth \u002F Firestore \u002F Storage \u002F Hosting comparisons",{"type":42,"tag":415,"props":705,"children":706},{},[707,716],{"type":42,"tag":437,"props":708,"children":709},{},[710],{"type":42,"tag":61,"props":711,"children":713},{"className":712},[],[714],{"type":48,"value":715},"references\u002Fequivalents-vercel-netlify.md",{"type":42,"tag":437,"props":717,"children":718},{},[719],{"type":48,"value":720},"Migrating from Vercel or Netlify, or frontend-hosting + serverless function comparisons",{"type":42,"tag":415,"props":722,"children":723},{},[724,733],{"type":42,"tag":437,"props":725,"children":726},{},[727],{"type":42,"tag":61,"props":728,"children":730},{"className":729},[],[731],{"type":48,"value":732},"references\u002Fequivalents-heroku.md",{"type":42,"tag":437,"props":734,"children":735},{},[736],{"type":48,"value":737},"Migrating from Heroku, Railway, Render, or Fly.io (PaaS comparisons)",{"type":42,"tag":415,"props":739,"children":740},{},[741,750],{"type":42,"tag":437,"props":742,"children":743},{},[744],{"type":42,"tag":61,"props":745,"children":747},{"className":746},[],[748],{"type":48,"value":749},"references\u002Fequivalents-supabase.md",{"type":42,"tag":437,"props":751,"children":752},{},[753],{"type":48,"value":754},"Migrating from Supabase, or full-stack BaaS platform comparisons (\"is Catalyst like Supabase?\")",{"type":42,"tag":415,"props":756,"children":757},{},[758,767],{"type":42,"tag":437,"props":759,"children":760},{},[761],{"type":42,"tag":61,"props":762,"children":764},{"className":763},[],[765],{"type":48,"value":766},"references\u002Fsdk-nodejs.md",{"type":42,"tag":437,"props":768,"children":769},{},[770],{"type":48,"value":771},"Detailed Node.js SDK code examples — Data Store CRUD, ZCQL, Cache, File Store, Auth, Email, Stratus (multipart, TransferManager, pre-signed URLs), NoSQL, Zia, SmartBrowz SDK, Job Scheduling SDK, Pipelines, Circuits, Push Notifications",{"type":42,"tag":415,"props":773,"children":774},{},[775,784],{"type":42,"tag":437,"props":776,"children":777},{},[778],{"type":42,"tag":61,"props":779,"children":781},{"className":780},[],[782],{"type":48,"value":783},"references\u002Fsdk-java.md",{"type":42,"tag":437,"props":785,"children":786},{},[787],{"type":48,"value":788},"Detailed Java SDK code examples — ZCObject\u002FZCTable\u002FZCRowObject patterns, ZCQL, Cache, File Store, Auth, Email, Stratus, NoSQL, Zia, SmartBrowz, Job Scheduling, Pipelines, Circuits",{"type":42,"tag":415,"props":790,"children":791},{},[792,801],{"type":42,"tag":437,"props":793,"children":794},{},[795],{"type":42,"tag":61,"props":796,"children":798},{"className":797},[],[799],{"type":48,"value":800},"references\u002Fsdk-python.md",{"type":42,"tag":437,"props":802,"children":803},{},[804],{"type":48,"value":805},"Detailed Python SDK code examples — Data Store, ZCQL, Cache, File Store, Auth, Email, Stratus, NoSQL, Zia, SmartBrowz, Job Scheduling",{"type":42,"tag":415,"props":807,"children":808},{},[809,818],{"type":42,"tag":437,"props":810,"children":811},{},[812],{"type":42,"tag":61,"props":813,"children":815},{"className":814},[],[816],{"type":48,"value":817},"references\u002Fsdk-web.md",{"type":42,"tag":437,"props":819,"children":820},{},[821],{"type":48,"value":822},"Web SDK v4 client-side JavaScript — Authentication (Hosted vs Embedded, generateAuthToken, cross-domain Slate→AppSail pattern), Data Store, ZCQL, File Store, Stratus, Search, Push Notifications, iFrame CSS customization, common auth errors",{"type":42,"tag":415,"props":824,"children":825},{},[826,835],{"type":42,"tag":437,"props":827,"children":828},{},[829],{"type":42,"tag":61,"props":830,"children":832},{"className":831},[],[833],{"type":48,"value":834},"references\u002Fsdk-mobile.md",{"type":42,"tag":437,"props":836,"children":837},{},[838],{"type":48,"value":839},"Android (Kotlin), iOS (Swift), and Flutter (Dart) SDK — setup, auth, Data Store, ZCQL, File Store, Stratus, Push Notifications, Search, Flutter ZCQL Query Builder",{"type":42,"tag":415,"props":841,"children":842},{},[843,852],{"type":42,"tag":437,"props":844,"children":845},{},[846],{"type":42,"tag":61,"props":847,"children":849},{"className":848},[],[850],{"type":48,"value":851},"references\u002Fsignals-deep-dive.md",{"type":42,"tag":437,"props":853,"children":854},{},[855],{"type":48,"value":856},"Signals event bus in depth — publishers (Zoho\u002FCatalyst\u002FCustom), events, rules with filters, targets, dispatch policies (instant\u002Fbatch), event transformation, webhooks, dashboard, limits",{"type":42,"tag":415,"props":858,"children":859},{},[860,869],{"type":42,"tag":437,"props":861,"children":862},{},[863],{"type":42,"tag":61,"props":864,"children":866},{"className":865},[],[867],{"type":48,"value":868},"references\u002Fsmartbrowz-deep-dive.md",{"type":42,"tag":437,"props":870,"children":871},{},[872],{"type":48,"value":873},"SmartBrowz in depth — headless browser (Puppeteer\u002FPlaywright\u002FSelenium connection code), Browser Logic functions, Browser Grid tiers, PDF\u002FScreenshot generation with SDK examples, LiquidJS templates, Dataverse APIs",{"type":42,"tag":415,"props":875,"children":876},{},[877,886],{"type":42,"tag":437,"props":878,"children":879},{},[880],{"type":42,"tag":61,"props":881,"children":883},{"className":882},[],[884],{"type":48,"value":885},"references\u002Fjob-scheduling-deep-dive.md",{"type":42,"tag":437,"props":887,"children":888},{},[889],{"type":48,"value":890},"Job Scheduling in depth — job pools (4 types), jobs, pre-defined vs dynamic crons, cron expressions, dynamic cron SDK examples (Node.js\u002FJava\u002FPython), REST API endpoints, application alerts, limits",{"type":42,"tag":415,"props":892,"children":893},{},[894,903],{"type":42,"tag":437,"props":895,"children":896},{},[897],{"type":42,"tag":61,"props":898,"children":900},{"className":899},[],[901],{"type":48,"value":902},"references\u002Fdevops-deep-dive.md",{"type":42,"tag":437,"props":904,"children":905},{},[906],{"type":48,"value":907},"DevOps in depth — APM (Java\u002FNode only), log pushing code per language, log levels, Application Alerts config, Automation Testing (modules, test cases, suites, plans, variables, results), metrics",{"type":42,"tag":415,"props":909,"children":910},{},[911,920],{"type":42,"tag":437,"props":912,"children":913},{},[914],{"type":42,"tag":61,"props":915,"children":917},{"className":916},[],[918],{"type":48,"value":919},"references\u002Fcli-reference.md",{"type":42,"tag":437,"props":921,"children":922},{},[923,925,931],{"type":48,"value":924},"Full CLI command map — all subcommands with flags, Slate framework values, AppSail non-interactive setup, ",{"type":42,"tag":61,"props":926,"children":928},{"className":927},[],[929],{"type":48,"value":930},"catalyst serve",{"type":48,"value":932}," port behavior, safety rules for destructive commands, resource-first development order",{"type":42,"tag":51,"props":934,"children":935},{},[936],{"type":48,"value":937},"If none of those conditions match, answer from Tier 1 (this file) alone.",{"type":42,"tag":333,"props":939,"children":941},{"id":940},"tier-3-official-catalyst-docs-site-search-only-as-a-last-resort",[942],{"type":48,"value":943},"Tier 3 — Official Catalyst docs site (search only as a last resort)",{"type":42,"tag":51,"props":945,"children":946},{},[947,949,955,957],{"type":48,"value":948},"The full Catalyst documentation lives at ",{"type":42,"tag":61,"props":950,"children":952},{"className":951},[],[953],{"type":48,"value":954},"https:\u002F\u002Fdocs.catalyst.zoho.com\u002Fen\u002F",{"type":48,"value":956},". ",{"type":42,"tag":55,"props":958,"children":959},{},[960],{"type":48,"value":961},"NEVER search this proactively.",{"type":42,"tag":361,"props":963,"children":964},{},[965],{"type":42,"tag":51,"props":966,"children":967},{},[968,981,983,988],{"type":42,"tag":55,"props":969,"children":970},{},[971,973,979],{"type":48,"value":972},"Why not ",{"type":42,"tag":61,"props":974,"children":976},{"className":975},[],[977],{"type":48,"value":978},"llms-full.txt",{"type":48,"value":980},"?",{"type":48,"value":982}," The hosted ",{"type":42,"tag":61,"props":984,"children":986},{"className":985},[],[987],{"type":48,"value":978},{"type":48,"value":989}," is ~11 MB. Direct web-fetch tools\nsilently truncate it to \u003C1% of its content, producing dangerously incomplete results.\nIndividual doc pages, however, fetch fully and reliably. Always prefer the two-step\napproach below.",{"type":42,"tag":51,"props":991,"children":992},{},[993],{"type":48,"value":994},"Only search the docs site when ALL of the following conditions are true:",{"type":42,"tag":996,"props":997,"children":998},"ol",{},[999,1011,1023],{"type":42,"tag":98,"props":1000,"children":1001},{},[1002,1004,1009],{"type":48,"value":1003},"The user is asking about a ",{"type":42,"tag":55,"props":1005,"children":1006},{},[1007],{"type":48,"value":1008},"specific, undocumented API detail, parameter, or edge-case behavior",{"type":48,"value":1010}," — not a general question.",{"type":42,"tag":98,"props":1012,"children":1013},{},[1014,1016,1021],{"type":48,"value":1015},"The relevant Tier 2 reference file(s) have ",{"type":42,"tag":55,"props":1017,"children":1018},{},[1019],{"type":48,"value":1020},"already been read",{"type":48,"value":1022}," and do not contain the answer.",{"type":42,"tag":98,"props":1024,"children":1025},{},[1026],{"type":48,"value":1027},"Tier 1 (this file) also does not cover it.",{"type":42,"tag":51,"props":1029,"children":1030},{},[1031],{"type":42,"tag":55,"props":1032,"children":1033},{},[1034],{"type":48,"value":1035},"Two-step lookup procedure:",{"type":42,"tag":996,"props":1037,"children":1038},{},[1039,1078],{"type":42,"tag":98,"props":1040,"children":1041},{},[1042,1047,1049],{"type":42,"tag":55,"props":1043,"children":1044},{},[1045],{"type":48,"value":1046},"Web search",{"type":48,"value":1048}," with a site-scoped query to find the right page:\n",{"type":42,"tag":94,"props":1050,"children":1051},{},[1052,1073],{"type":42,"tag":98,"props":1053,"children":1054},{},[1055,1057,1063,1065,1071],{"type":48,"value":1056},"Use: ",{"type":42,"tag":61,"props":1058,"children":1060},{"className":1059},[],[1061],{"type":48,"value":1062},"site:docs.catalyst.zoho.com \u003Cspecific term>",{"type":48,"value":1064}," (e.g., ",{"type":42,"tag":61,"props":1066,"children":1068},{"className":1067},[],[1069],{"type":48,"value":1070},"site:docs.catalyst.zoho.com ZCQL COALESCE",{"type":48,"value":1072},")",{"type":42,"tag":98,"props":1074,"children":1075},{},[1076],{"type":48,"value":1077},"This returns accurate, canonical URLs — never guess or fabricate a docs URL yourself.",{"type":42,"tag":98,"props":1079,"children":1080},{},[1081,1086],{"type":42,"tag":55,"props":1082,"children":1083},{},[1084],{"type":48,"value":1085},"Fetch the specific page URL",{"type":48,"value":1087}," returned by the search to get the full content with code examples and parameter details.",{"type":42,"tag":51,"props":1089,"children":1090},{},[1091],{"type":42,"tag":55,"props":1092,"children":1093},{},[1094],{"type":48,"value":1095},"Do NOT:",{"type":42,"tag":94,"props":1097,"children":1098},{},[1099,1112,1131],{"type":42,"tag":98,"props":1100,"children":1101},{},[1102,1104,1110],{"type":48,"value":1103},"Fetch ",{"type":42,"tag":61,"props":1105,"children":1107},{"className":1106},[],[1108],{"type":48,"value":1109},"https:\u002F\u002Fdocs.catalyst.zoho.com\u002Fen\u002Fllms-full.txt",{"type":48,"value":1111}," directly — it will silently truncate to \u003C1% of the content.",{"type":42,"tag":98,"props":1113,"children":1114},{},[1115,1117,1123,1125,1130],{"type":48,"value":1116},"Fabricate docs URLs from memory (e.g., ",{"type":42,"tag":61,"props":1118,"children":1120},{"className":1119},[],[1121],{"type":48,"value":1122},"zoho.catalyst.com\u002Fdocs\u002F...",{"type":48,"value":1124},") — these do not exist. All Catalyst documentation lives under ",{"type":42,"tag":61,"props":1126,"children":1128},{"className":1127},[],[1129],{"type":48,"value":954},{"type":48,"value":320},{"type":42,"tag":98,"props":1132,"children":1133},{},[1134],{"type":48,"value":1135},"Use Tier 3 for routine code generation, architecture questions, CLI usage, pricing, SDK patterns, troubleshooting common errors, deployment procedures, observability, or anything the Tier 1 or Tier 2 files already cover.",{"type":42,"tag":51,"props":1137,"children":1138},{},[1139],{"type":48,"value":1140},"Always read the relevant reference file(s) before writing code. If the request spans multiple areas (e.g.\n\"write a Catalyst function that queries Data Store and stores results in Stratus\"), read all applicable\nreference files.",{"type":42,"tag":51,"props":1142,"children":1143},{},[1144],{"type":48,"value":1145},"If the user references another platform, load only the equivalents file for that platform:",{"type":42,"tag":94,"props":1147,"children":1148},{},[1149,1159,1169,1179,1189,1199,1209],{"type":42,"tag":98,"props":1150,"children":1151},{},[1152,1154],{"type":48,"value":1153},"AWS terms (Lambda, S3, RDS, etc.) → ",{"type":42,"tag":61,"props":1155,"children":1157},{"className":1156},[],[1158],{"type":48,"value":647},{"type":42,"tag":98,"props":1160,"children":1161},{},[1162,1164],{"type":48,"value":1163},"GCP terms (Cloud Run, Pub-Sub, Firestore, etc.) → ",{"type":42,"tag":61,"props":1165,"children":1167},{"className":1166},[],[1168],{"type":48,"value":664},{"type":42,"tag":98,"props":1170,"children":1171},{},[1172,1174],{"type":48,"value":1173},"Azure terms (Azure Functions, Blob Storage, Cosmos DB, etc.) → ",{"type":42,"tag":61,"props":1175,"children":1177},{"className":1176},[],[1178],{"type":48,"value":681},{"type":42,"tag":98,"props":1180,"children":1181},{},[1182,1184],{"type":48,"value":1183},"Firebase terms (Firestore, Firebase Auth, Firebase Hosting, etc.) → ",{"type":42,"tag":61,"props":1185,"children":1187},{"className":1186},[],[1188],{"type":48,"value":698},{"type":42,"tag":98,"props":1190,"children":1191},{},[1192,1194],{"type":48,"value":1193},"Vercel or Netlify terms → ",{"type":42,"tag":61,"props":1195,"children":1197},{"className":1196},[],[1198],{"type":48,"value":715},{"type":42,"tag":98,"props":1200,"children":1201},{},[1202,1204],{"type":48,"value":1203},"Heroku, Railway, Render, or Fly.io terms → ",{"type":42,"tag":61,"props":1205,"children":1207},{"className":1206},[],[1208],{"type":48,"value":732},{"type":42,"tag":98,"props":1210,"children":1211},{},[1212,1214],{"type":48,"value":1213},"Supabase terms, or holistic \"is Catalyst like X?\" questions → ",{"type":42,"tag":61,"props":1215,"children":1217},{"className":1216},[],[1218],{"type":48,"value":749},{"type":42,"tag":51,"props":1220,"children":1221},{},[1222],{"type":48,"value":1223},"Do not load multiple equivalents files unless the user's query explicitly spans more than one platform.",{"type":42,"tag":51,"props":1225,"children":1226},{},[1227,1232,1234,1239],{"type":42,"tag":55,"props":1228,"children":1229},{},[1230],{"type":48,"value":1231},"Important:",{"type":48,"value":1233}," When writing code that uses any Catalyst ID (Table ID, ZAID, Segment ID, etc.), always\nadd an inline comment telling the user exactly where to find it in the console. Never leave ID\nplaceholders unexplained. Read ",{"type":42,"tag":61,"props":1235,"children":1237},{"className":1236},[],[1238],{"type":48,"value":504},{"type":48,"value":1240}," if you need to reference specific ID locations.",{"type":42,"tag":239,"props":1242,"children":1244},{"id":1243},"mandatory-pre-flight-gate-mandatory-pre-flight-gate",[1245],{"type":48,"value":1246},"🛑 MANDATORY Pre-flight Gate {#mandatory-pre-flight-gate}",{"type":42,"tag":361,"props":1248,"children":1249},{},[1250],{"type":42,"tag":51,"props":1251,"children":1252},{},[1253],{"type":42,"tag":55,"props":1254,"children":1255},{},[1256],{"type":48,"value":1257},"Do this FIRST or everything you build will fail on deploy.",{"type":42,"tag":51,"props":1259,"children":1260},{},[1261],{"type":42,"tag":55,"props":1262,"children":1263},{},[1264],{"type":48,"value":1265},"YOUR VERY FIRST ACTION for any Catalyst build request — before reading reference files, before planning architecture, before writing a single line of code — is to check whether the project is initialized.",{"type":42,"tag":51,"props":1267,"children":1268},{},[1269],{"type":42,"tag":55,"props":1270,"children":1271},{},[1272],{"type":48,"value":1273},"You MUST NOT:",{"type":42,"tag":94,"props":1275,"children":1276},{},[1277,1296,1311,1328,1344,1368],{"type":42,"tag":98,"props":1278,"children":1279},{},[1280,1282,1287,1289,1294],{"type":48,"value":1281},"❌ Create ",{"type":42,"tag":61,"props":1283,"children":1285},{"className":1284},[],[1286],{"type":48,"value":74},{"type":48,"value":1288}," yourself — it is auto-generated by ",{"type":42,"tag":61,"props":1290,"children":1292},{"className":1291},[],[1293],{"type":48,"value":90},{"type":48,"value":1295}," with project IDs",{"type":42,"tag":98,"props":1297,"children":1298},{},[1299,1300,1305,1306],{"type":48,"value":1281},{"type":42,"tag":61,"props":1301,"children":1303},{"className":1302},[],[1304],{"type":48,"value":66},{"type":48,"value":1288},{"type":42,"tag":61,"props":1307,"children":1309},{"className":1308},[],[1310],{"type":48,"value":90},{"type":42,"tag":98,"props":1312,"children":1313},{},[1314,1316,1321,1323],{"type":48,"value":1315},"❌ Create the ",{"type":42,"tag":61,"props":1317,"children":1319},{"className":1318},[],[1320],{"type":48,"value":130},{"type":48,"value":1322}," directory yourself — it is created by ",{"type":42,"tag":61,"props":1324,"children":1326},{"className":1325},[],[1327],{"type":48,"value":90},{"type":42,"tag":98,"props":1329,"children":1330},{},[1331,1332,1337,1339],{"type":48,"value":1315},{"type":42,"tag":61,"props":1333,"children":1335},{"className":1334},[],[1336],{"type":48,"value":147},{"type":48,"value":1338}," directory yourself — it is legacy (use Slate instead) and created by ",{"type":42,"tag":61,"props":1340,"children":1342},{"className":1341},[],[1343],{"type":48,"value":90},{"type":42,"tag":98,"props":1345,"children":1346},{},[1347,1349,1354,1355,1360,1361,1366],{"type":48,"value":1348},"❌ Run ",{"type":42,"tag":61,"props":1350,"children":1352},{"className":1351},[],[1353],{"type":48,"value":90},{"type":48,"value":161},{"type":42,"tag":61,"props":1356,"children":1358},{"className":1357},[],[1359],{"type":48,"value":167},{"type":48,"value":169},{"type":42,"tag":61,"props":1362,"children":1364},{"className":1363},[],[1365],{"type":48,"value":175},{"type":48,"value":1367}," — they are interactive",{"type":42,"tag":98,"props":1369,"children":1370},{},[1371],{"type":48,"value":1372},"❌ Scaffold any project structure in an empty folder — it will lack Catalyst project IDs and deployment will fail with cryptic errors",{"type":42,"tag":51,"props":1374,"children":1375},{},[1376,1389],{"type":42,"tag":55,"props":1377,"children":1378},{},[1379,1381,1387],{"type":48,"value":1380},"If you create these files manually, the project will have no Project ID, no Environment ID, no ZAID, and ",{"type":42,"tag":61,"props":1382,"children":1384},{"className":1383},[],[1385],{"type":48,"value":1386},"catalyst deploy",{"type":48,"value":1388}," will fail.",{"type":48,"value":1390}," There is no workaround — the CLI must generate these files.",{"type":42,"tag":333,"props":1392,"children":1394},{"id":1393},"how-to-check",[1395],{"type":48,"value":1396},"How to check",{"type":42,"tag":51,"props":1398,"children":1399},{},[1400],{"type":48,"value":1401},"Look for these files in the working directory (use filesystem tools or ask the user):",{"type":42,"tag":996,"props":1403,"children":1404},{},[1405,1415],{"type":42,"tag":98,"props":1406,"children":1407},{},[1408,1413],{"type":42,"tag":61,"props":1409,"children":1411},{"className":1410},[],[1412],{"type":48,"value":66},{"type":48,"value":1414}," — contains project identity (project_id, env_id)",{"type":42,"tag":98,"props":1416,"children":1417},{},[1418,1423],{"type":42,"tag":61,"props":1419,"children":1421},{"className":1420},[],[1422],{"type":48,"value":74},{"type":48,"value":1424}," — contains deployment targets (functions, client)",{"type":42,"tag":333,"props":1426,"children":1428},{"id":1427},"decision-can-i-proceed",[1429],{"type":48,"value":1430},"Decision: Can I proceed?",{"type":42,"tag":51,"props":1432,"children":1433},{},[1434,1453,1455,1460,1462,1468],{"type":42,"tag":55,"props":1435,"children":1436},{},[1437,1439,1444,1446,1451],{"type":48,"value":1438},"BOTH ",{"type":42,"tag":61,"props":1440,"children":1442},{"className":1441},[],[1443],{"type":48,"value":66},{"type":48,"value":1445}," AND ",{"type":42,"tag":61,"props":1447,"children":1449},{"className":1448},[],[1450],{"type":48,"value":74},{"type":48,"value":1452}," exist?",{"type":48,"value":1454},"\n→ YES: Read them, check ",{"type":42,"tag":61,"props":1456,"children":1458},{"className":1457},[],[1459],{"type":48,"value":74},{"type":48,"value":1461}," → ",{"type":42,"tag":61,"props":1463,"children":1465},{"className":1464},[],[1466],{"type":48,"value":1467},"functions.targets",{"type":48,"value":1469}," for registered functions, then proceed to write code.",{"type":42,"tag":51,"props":1471,"children":1472},{},[1473,1478,1480,1485],{"type":42,"tag":55,"props":1474,"children":1475},{},[1476],{"type":48,"value":1477},"Either file is missing?",{"type":48,"value":1479},"\n→ NO: ",{"type":42,"tag":55,"props":1481,"children":1482},{},[1483],{"type":48,"value":1484},"STOP IMMEDIATELY.",{"type":48,"value":1486}," Do not create any files. Do not plan architecture. Respond to the user with ONLY this message:",{"type":42,"tag":217,"props":1488,"children":1489},{},[],{"type":42,"tag":51,"props":1491,"children":1492},{},[1493],{"type":42,"tag":55,"props":1494,"children":1495},{},[1496],{"type":48,"value":1497},"Before I can build anything, the Catalyst project needs to be initialized. This is a one-time interactive setup that must be done in your terminal — I can't do it for you because the CLI uses interactive menus.",{"type":42,"tag":51,"props":1499,"children":1500},{},[1501],{"type":48,"value":1502},"Please run these commands:",{"type":42,"tag":1504,"props":1505,"children":1510},"pre",{"className":1506,"code":1507,"language":1508,"meta":1509,"style":1509},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# Step 1: Log in (opens browser for Zoho OAuth)\ncatalyst login\n\n# Step 2: Initialize project (interactive — use arrow keys to select)\ncatalyst init\n","bash","",[1511],{"type":42,"tag":61,"props":1512,"children":1513},{"__ignoreMap":1509},[1514,1526,1542,1552,1561],{"type":42,"tag":1515,"props":1516,"children":1519},"span",{"class":1517,"line":1518},"line",1,[1520],{"type":42,"tag":1515,"props":1521,"children":1523},{"style":1522},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[1524],{"type":48,"value":1525},"# Step 1: Log in (opens browser for Zoho OAuth)\n",{"type":42,"tag":1515,"props":1527,"children":1529},{"class":1517,"line":1528},2,[1530,1536],{"type":42,"tag":1515,"props":1531,"children":1533},{"style":1532},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[1534],{"type":48,"value":1535},"catalyst",{"type":42,"tag":1515,"props":1537,"children":1539},{"style":1538},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[1540],{"type":48,"value":1541}," login\n",{"type":42,"tag":1515,"props":1543,"children":1545},{"class":1517,"line":1544},3,[1546],{"type":42,"tag":1515,"props":1547,"children":1549},{"emptyLinePlaceholder":1548},true,[1550],{"type":48,"value":1551},"\n",{"type":42,"tag":1515,"props":1553,"children":1555},{"class":1517,"line":1554},4,[1556],{"type":42,"tag":1515,"props":1557,"children":1558},{"style":1522},[1559],{"type":48,"value":1560},"# Step 2: Initialize project (interactive — use arrow keys to select)\n",{"type":42,"tag":1515,"props":1562,"children":1564},{"class":1517,"line":1563},5,[1565,1569],{"type":42,"tag":1515,"props":1566,"children":1567},{"style":1532},[1568],{"type":48,"value":1535},{"type":42,"tag":1515,"props":1570,"children":1571},{"style":1538},[1572],{"type":48,"value":1573}," init\n",{"type":42,"tag":51,"props":1575,"children":1576},{},[1577,1582,1584,1589,1591,1596,1598,1603,1605,1610],{"type":42,"tag":55,"props":1578,"children":1579},{},[1580],{"type":48,"value":1581},"Important — if the app needs a frontend:",{"type":48,"value":1583}," Before running ",{"type":42,"tag":61,"props":1585,"children":1587},{"className":1586},[],[1588],{"type":48,"value":90},{"type":48,"value":1590},", you must first enable Slate in the Catalyst console. Go to ",{"type":42,"tag":55,"props":1592,"children":1593},{},[1594],{"type":48,"value":1595},"console.catalyst.zoho.com → your project → Slate",{"type":48,"value":1597}," (in the left sidebar) → click ",{"type":42,"tag":55,"props":1599,"children":1600},{},[1601],{"type":48,"value":1602},"\"Start Exploring\"",{"type":48,"value":1604},". This is a one-time activation. Without this step, the Slate option during ",{"type":42,"tag":61,"props":1606,"children":1608},{"className":1607},[],[1609],{"type":48,"value":90},{"type":48,"value":1611}," will not work.",{"type":42,"tag":51,"props":1613,"children":1614},{},[1615,1617,1622],{"type":48,"value":1616},"During ",{"type":42,"tag":61,"props":1618,"children":1620},{"className":1619},[],[1621],{"type":48,"value":90},{"type":48,"value":1623},", you'll be asked to:",{"type":42,"tag":996,"props":1625,"children":1626},{},[1627,1637,1647],{"type":42,"tag":98,"props":1628,"children":1629},{},[1630,1635],{"type":42,"tag":55,"props":1631,"children":1632},{},[1633],{"type":48,"value":1634},"Select a default Catalyst portal",{"type":48,"value":1636}," — pick your Zoho portal\u002Forg",{"type":42,"tag":98,"props":1638,"children":1639},{},[1640,1645],{"type":42,"tag":55,"props":1641,"children":1642},{},[1643],{"type":48,"value":1644},"Select a default Catalyst project",{"type":48,"value":1646}," — pick an existing project from the list",{"type":42,"tag":98,"props":1648,"children":1649},{},[1650,1655,1657,1662,1664,1670,1671,1676,1677,1682],{"type":42,"tag":55,"props":1651,"children":1652},{},[1653],{"type":48,"value":1654},"Which features to setup?",{"type":48,"value":1656}," — use Space to select: ",{"type":42,"tag":55,"props":1658,"children":1659},{},[1660],{"type":48,"value":1661},"Functions",{"type":48,"value":1663}," ",{"type":42,"tag":1665,"props":1666,"children":1667},"em",{},[1668],{"type":48,"value":1669},"(always)",{"type":48,"value":68},{"type":42,"tag":55,"props":1672,"children":1673},{},[1674],{"type":48,"value":1675},"Slate",{"type":48,"value":1663},{"type":42,"tag":1665,"props":1678,"children":1679},{},[1680],{"type":48,"value":1681},"(if the app needs a frontend)",{"type":48,"value":1683},". Do NOT select \"Client\" — it is legacy and being deprecated.",{"type":42,"tag":51,"props":1685,"children":1686},{},[1687,1689,1693],{"type":48,"value":1688},"If you selected ",{"type":42,"tag":55,"props":1690,"children":1691},{},[1692],{"type":48,"value":1661},{"type":48,"value":1694},", the CLI will prompt for the first function's npm package setup:",{"type":42,"tag":94,"props":1696,"children":1697},{},[1698,1716,1734,1745],{"type":42,"tag":98,"props":1699,"children":1700},{},[1701,1707,1709,1715],{"type":42,"tag":61,"props":1702,"children":1704},{"className":1703},[],[1705],{"type":48,"value":1706},"package name:",{"type":48,"value":1708}," — enter a name (e.g., ",{"type":42,"tag":61,"props":1710,"children":1712},{"className":1711},[],[1713],{"type":48,"value":1714},"docvault_api",{"type":48,"value":1072},{"type":42,"tag":98,"props":1717,"children":1718},{},[1719,1725,1727,1733],{"type":42,"tag":61,"props":1720,"children":1722},{"className":1721},[],[1723],{"type":48,"value":1724},"entry point:",{"type":48,"value":1726}," — press Enter to accept default (",{"type":42,"tag":61,"props":1728,"children":1730},{"className":1729},[],[1731],{"type":48,"value":1732},"index.js",{"type":48,"value":1072},{"type":42,"tag":98,"props":1735,"children":1736},{},[1737,1743],{"type":42,"tag":61,"props":1738,"children":1740},{"className":1739},[],[1741],{"type":48,"value":1742},"author:",{"type":48,"value":1744}," — press Enter to accept default (your Zoho email)",{"type":42,"tag":98,"props":1746,"children":1747},{},[1748,1754,1756],{"type":42,"tag":61,"props":1749,"children":1751},{"className":1750},[],[1752],{"type":48,"value":1753},"Do you wish to install all dependencies now?",{"type":48,"value":1755}," — enter ",{"type":42,"tag":55,"props":1757,"children":1758},{},[1759],{"type":48,"value":1760},"Yes",{"type":42,"tag":51,"props":1762,"children":1763},{},[1764,1765,1769],{"type":48,"value":1688},{"type":42,"tag":55,"props":1766,"children":1767},{},[1768],{"type":48,"value":1675},{"type":48,"value":1770},", the CLI will then run Slate Setup:",{"type":42,"tag":94,"props":1772,"children":1773},{},[1774,1792,1809,1814,1831],{"type":42,"tag":98,"props":1775,"children":1776},{},[1777,1783,1785,1790],{"type":42,"tag":61,"props":1778,"children":1780},{"className":1779},[],[1781],{"type":48,"value":1782},"Select a framework to start with:",{"type":48,"value":1784}," — arrow keys to pick (e.g., ",{"type":42,"tag":55,"props":1786,"children":1787},{},[1788],{"type":48,"value":1789},"React + Vite",{"type":48,"value":1791},", Next.js, Angular, Vue, Svelte, Astro)",{"type":42,"tag":98,"props":1793,"children":1794},{},[1795,1801,1802,1808],{"type":42,"tag":61,"props":1796,"children":1798},{"className":1797},[],[1799],{"type":48,"value":1800},"Please provide the name for your app:",{"type":48,"value":1708},{"type":42,"tag":61,"props":1803,"children":1805},{"className":1804},[],[1806],{"type":48,"value":1807},"docvault-ui",{"type":48,"value":1072},{"type":42,"tag":98,"props":1810,"children":1811},{},[1812],{"type":48,"value":1813},"Auto-detected config will be shown (Install Command, Build Command, Build Path, Deployment Name)",{"type":42,"tag":98,"props":1815,"children":1816},{},[1817,1823,1824,1829],{"type":42,"tag":61,"props":1818,"children":1820},{"className":1819},[],[1821],{"type":48,"value":1822},"Do you want to modify these default configurations?",{"type":48,"value":1755},{"type":42,"tag":55,"props":1825,"children":1826},{},[1827],{"type":48,"value":1828},"No",{"type":48,"value":1830}," to accept defaults",{"type":42,"tag":98,"props":1832,"children":1833},{},[1834,1840,1841,1847],{"type":42,"tag":61,"props":1835,"children":1837},{"className":1836},[],[1838],{"type":48,"value":1839},"Please provide your Development Command:",{"type":48,"value":1726},{"type":42,"tag":61,"props":1842,"children":1844},{"className":1843},[],[1845],{"type":48,"value":1846},"npm run dev -- --port $ZC_SLATE_PORT",{"type":48,"value":1072},{"type":42,"tag":51,"props":1849,"children":1850},{},[1851],{"type":48,"value":1852},"After that, register the backend functions:",{"type":42,"tag":1504,"props":1854,"children":1856},{"className":1506,"code":1855,"language":1508,"meta":1509,"style":1509},"catalyst functions:add\n",[1857],{"type":42,"tag":61,"props":1858,"children":1859},{"__ignoreMap":1509},[1860],{"type":42,"tag":1515,"props":1861,"children":1862},{"class":1517,"line":1518},[1863,1867],{"type":42,"tag":1515,"props":1864,"children":1865},{"style":1532},[1866],{"type":48,"value":1535},{"type":42,"tag":1515,"props":1868,"children":1869},{"style":1538},[1870],{"type":48,"value":1871}," functions:add\n",{"type":42,"tag":51,"props":1873,"children":1874},{},[1875],{"type":48,"value":1876},"Run this once for each function. The functions I'll need are:",{"type":42,"tag":94,"props":1878,"children":1879},{},[1880],{"type":42,"tag":98,"props":1881,"children":1882},{},[1883],{"type":42,"tag":1665,"props":1884,"children":1885},{},[1886],{"type":48,"value":1887},"(list the function names, types, and stacks here)",{"type":42,"tag":51,"props":1889,"children":1890},{},[1891],{"type":42,"tag":55,"props":1892,"children":1893},{},[1894],{"type":48,"value":1895},"Let me know once you've completed these steps and I'll build everything.",{"type":42,"tag":217,"props":1897,"children":1898},{},[],{"type":42,"tag":51,"props":1900,"children":1901},{},[1902],{"type":42,"tag":55,"props":1903,"children":1904},{},[1905],{"type":48,"value":1906},"Do not continue past this point until the user confirms setup is complete.",{"type":42,"tag":333,"props":1908,"children":1910},{"id":1909},"after-setup-is-confirmed-what-you-can-do",[1911],{"type":48,"value":1912},"After setup is confirmed — what you CAN do",{"type":42,"tag":51,"props":1914,"children":1915},{},[1916,1918,1923,1925,1930],{"type":48,"value":1917},"Once the user confirms and you verify ",{"type":42,"tag":61,"props":1919,"children":1921},{"className":1920},[],[1922],{"type":48,"value":66},{"type":48,"value":1924}," + ",{"type":42,"tag":61,"props":1926,"children":1928},{"className":1927},[],[1929],{"type":48,"value":74},{"type":48,"value":1931}," exist:",{"type":42,"tag":94,"props":1933,"children":1934},{},[1935,1954,1982,2000,2005,2017],{"type":42,"tag":98,"props":1936,"children":1937},{},[1938,1940,1945,1946,1952],{"type":48,"value":1939},"✅ Create\u002Fedit ",{"type":42,"tag":61,"props":1941,"children":1943},{"className":1942},[],[1944],{"type":48,"value":1732},{"type":48,"value":161},{"type":42,"tag":61,"props":1947,"children":1949},{"className":1948},[],[1950],{"type":48,"value":1951},"main.py",{"type":48,"value":1953},", or other function code files",{"type":42,"tag":98,"props":1955,"children":1956},{},[1957,1958,1964,1966,1972,1974,1980],{"type":48,"value":1939},{"type":42,"tag":61,"props":1959,"children":1961},{"className":1960},[],[1962],{"type":48,"value":1963},"catalyst-config.json",{"type":48,"value":1965}," inside each function directory (use ",{"type":42,"tag":61,"props":1967,"children":1969},{"className":1968},[],[1970],{"type":48,"value":1971},"deployment",{"type":48,"value":1973},"\u002F",{"type":42,"tag":61,"props":1975,"children":1977},{"className":1976},[],[1978],{"type":48,"value":1979},"execution",{"type":48,"value":1981}," format)",{"type":42,"tag":98,"props":1983,"children":1984},{},[1985,1986,1992,1994],{"type":48,"value":1939},{"type":42,"tag":61,"props":1987,"children":1989},{"className":1988},[],[1990],{"type":48,"value":1991},"package.json",{"type":48,"value":1993}," and run ",{"type":42,"tag":61,"props":1995,"children":1997},{"className":1996},[],[1998],{"type":48,"value":1999},"npm install",{"type":42,"tag":98,"props":2001,"children":2002},{},[2003],{"type":48,"value":2004},"✅ Create\u002Fedit Slate app files (HTML, CSS, JS in the Slate app directory)",{"type":42,"tag":98,"props":2006,"children":2007},{},[2008,2010,2015],{"type":48,"value":2009},"✅ Run ",{"type":42,"tag":61,"props":2011,"children":2013},{"className":2012},[],[2014],{"type":48,"value":930},{"type":48,"value":2016}," for local testing",{"type":42,"tag":98,"props":2018,"children":2019},{},[2020,2021,2026],{"type":48,"value":2009},{"type":42,"tag":61,"props":2022,"children":2024},{"className":2023},[],[2025],{"type":48,"value":1386},{"type":48,"value":2027}," for deployment",{"type":42,"tag":333,"props":2029,"children":2031},{"id":2030},"why-this-gate-exists",[2032],{"type":48,"value":2033},"Why this gate exists",{"type":42,"tag":51,"props":2035,"children":2036},{},[2037,2042],{"type":42,"tag":61,"props":2038,"children":2040},{"className":2039},[],[2041],{"type":48,"value":90},{"type":48,"value":2043}," does three things that cannot be replicated manually:",{"type":42,"tag":996,"props":2045,"children":2046},{},[2047,2052,2064],{"type":42,"tag":98,"props":2048,"children":2049},{},[2050],{"type":48,"value":2051},"Links the local directory to a Catalyst project in the cloud (assigns Project ID, Environment ID, ZAID)",{"type":42,"tag":98,"props":2053,"children":2054},{},[2055,2057,2062],{"type":48,"value":2056},"Creates ",{"type":42,"tag":61,"props":2058,"children":2060},{"className":2059},[],[2061],{"type":48,"value":66},{"type":48,"value":2063}," with these IDs — deployment reads this file to know WHERE to deploy",{"type":42,"tag":98,"props":2065,"children":2066},{},[2067,2068,2073],{"type":48,"value":2056},{"type":42,"tag":61,"props":2069,"children":2071},{"className":2070},[],[2072],{"type":48,"value":74},{"type":48,"value":2074}," with the deployment manifest — the CLI reads this to know WHAT to deploy",{"type":42,"tag":51,"props":2076,"children":2077},{},[2078,2080,2085],{"type":48,"value":2079},"Without these, ",{"type":42,"tag":61,"props":2081,"children":2083},{"className":2082},[],[2084],{"type":48,"value":1386},{"type":48,"value":2086}," either crashes or deploys to nowhere. Every file you create in an uninitialized folder is wasted work.",{"type":42,"tag":217,"props":2088,"children":2089},{},[],{"type":42,"tag":239,"props":2091,"children":2093},{"id":2092},"core-principles",[2094],{"type":48,"value":2095},"Core principles",{"type":42,"tag":996,"props":2097,"children":2098},{},[2099,2136,2180,2206,2229,2239,2249,2317,2397],{"type":42,"tag":98,"props":2100,"children":2101},{},[2102,2107,2109,2114,2115,2120,2122,2127,2129,2134],{"type":42,"tag":55,"props":2103,"children":2104},{},[2105],{"type":48,"value":2106},"STOP and check project initialization BEFORE doing anything else.",{"type":48,"value":2108}," (See Pre-flight Gate above.)\nIf ",{"type":42,"tag":61,"props":2110,"children":2112},{"className":2111},[],[2113],{"type":48,"value":66},{"type":48,"value":68},{"type":42,"tag":61,"props":2116,"children":2118},{"className":2117},[],[2119],{"type":48,"value":74},{"type":48,"value":2121}," don't exist, you MUST ask the user to run ",{"type":42,"tag":61,"props":2123,"children":2125},{"className":2124},[],[2126],{"type":48,"value":90},{"type":48,"value":2128}," — and\nthen STOP and WAIT. Do not create these files yourself. Do not create ",{"type":42,"tag":61,"props":2130,"children":2132},{"className":2131},[],[2133],{"type":48,"value":130},{"type":48,"value":2135}," directories\nyourself. Do not scaffold any project structure. Everything you build in an uninitialized\nfolder will fail on deploy.",{"type":42,"tag":98,"props":2137,"children":2138},{},[2139,2144,2146,2151,2152,2157,2159,2164,2166,2171,2173,2178],{"type":42,"tag":55,"props":2140,"children":2141},{},[2142],{"type":48,"value":2143},"Follow Catalyst's exact project structure.",{"type":48,"value":2145}," Catalyst is strict about directory layout. Functions go\nunder ",{"type":42,"tag":61,"props":2147,"children":2149},{"className":2148},[],[2150],{"type":48,"value":130},{"type":48,"value":288},{"type":42,"tag":61,"props":2153,"children":2155},{"className":2154},[],[2156],{"type":48,"value":74},{"type":48,"value":2158}," sits at the project root. For frontends, ",{"type":42,"tag":55,"props":2160,"children":2161},{},[2162],{"type":48,"value":2163},"always use Slate",{"type":48,"value":2165},"\n(not the legacy ",{"type":42,"tag":61,"props":2167,"children":2169},{"className":2168},[],[2170],{"type":48,"value":147},{"type":48,"value":2172}," directory). These directories are created by ",{"type":42,"tag":61,"props":2174,"children":2176},{"className":2175},[],[2177],{"type":48,"value":90},{"type":48,"value":2179}," — do not create them manually.",{"type":42,"tag":98,"props":2181,"children":2182},{},[2183,2188,2190,2196,2198,2204],{"type":42,"tag":55,"props":2184,"children":2185},{},[2186],{"type":48,"value":2187},"Use the correct SDK initialization pattern.",{"type":48,"value":2189}," The Catalyst Node.js SDK requires manual initialization\nin all function types: ",{"type":42,"tag":61,"props":2191,"children":2193},{"className":2192},[],[2194],{"type":48,"value":2195},"const catalystApp = catalyst.initialize(context)",{"type":48,"value":2197}," (Basic I\u002FO, Event, Cron, Job)\nor ",{"type":42,"tag":61,"props":2199,"children":2201},{"className":2200},[],[2202],{"type":48,"value":2203},"const catalystApp = catalyst.initialize(req)",{"type":48,"value":2205}," (Advanced I\u002FO, AppSail). The SDK is NOT auto-injected.",{"type":42,"tag":98,"props":2207,"children":2208},{},[2209,2214,2216,2221,2223,2228],{"type":42,"tag":55,"props":2210,"children":2211},{},[2212],{"type":48,"value":2213},"Write deployment-ready code.",{"type":48,"value":2215}," Every function you write should include proper error handling,\ncorrect exports\u002Fhandler signatures, and the right ",{"type":42,"tag":61,"props":2217,"children":2219},{"className":2218},[],[2220],{"type":48,"value":1963},{"type":48,"value":2222},". Code should work when\nthe user runs ",{"type":42,"tag":61,"props":2224,"children":2226},{"className":2225},[],[2227],{"type":48,"value":1386},{"type":48,"value":320},{"type":42,"tag":98,"props":2230,"children":2231},{},[2232,2237],{"type":42,"tag":55,"props":2233,"children":2234},{},[2235],{"type":48,"value":2236},"Respect function types.",{"type":48,"value":2238}," Catalyst has 7 function types (Basic I\u002FO, Advanced I\u002FO, Event, Cron,\nIntegration, Job, Browser Logic). Each has a different handler signature and invocation model.\nUsing the wrong type causes silent failures.",{"type":42,"tag":98,"props":2240,"children":2241},{},[2242,2247],{"type":42,"tag":55,"props":2243,"children":2244},{},[2245],{"type":48,"value":2246},"Use ZCQL for queries, not raw SQL.",{"type":48,"value":2248}," Catalyst's Data Store uses ZCQL (Catalyst Query\nLanguage), which looks like SQL but has important differences (case-sensitive table\u002Fcolumn names,\nno cross-type JOINs, max 300 rows per query, single quotes only for strings).",{"type":42,"tag":98,"props":2250,"children":2251},{},[2252,2257,2259,2264,2266,2272,2274,2280,2282,2288,2289,2295,2296,2302,2303,2308,2310,2315],{"type":42,"tag":55,"props":2253,"children":2254},{},[2255],{"type":48,"value":2256},"Always handle Catalyst's auth model.",{"type":48,"value":2258}," Catalyst uses its own authentication system with user\nmanagement. Functions have Security Rules that control access — the ",{"type":42,"tag":55,"props":2260,"children":2261},{},[2262],{"type":48,"value":2263},"only valid values",{"type":48,"value":2265}," are\n",{"type":42,"tag":61,"props":2267,"children":2269},{"className":2268},[],[2270],{"type":48,"value":2271},"\"optional\"",{"type":48,"value":2273}," (public, no login required) and ",{"type":42,"tag":61,"props":2275,"children":2277},{"className":2276},[],[2278],{"type":48,"value":2279},"\"required\"",{"type":48,"value":2281}," (any authenticated Catalyst user).\nValues like ",{"type":42,"tag":61,"props":2283,"children":2285},{"className":2284},[],[2286],{"type":48,"value":2287},"no_auth",{"type":48,"value":161},{"type":42,"tag":61,"props":2290,"children":2292},{"className":2291},[],[2293],{"type":48,"value":2294},"user_auth",{"type":48,"value":288},{"type":42,"tag":61,"props":2297,"children":2299},{"className":2298},[],[2300],{"type":48,"value":2301},"admin_auth",{"type":48,"value":1663},{"type":42,"tag":55,"props":2304,"children":2305},{},[2306],{"type":48,"value":2307},"do not exist",{"type":48,"value":2309}," and will throw\n\"Invalid input value\". For admin-only route enforcement, use ",{"type":42,"tag":55,"props":2311,"children":2312},{},[2313],{"type":48,"value":2314},"API Gateway",{"type":48,"value":2316}," (auth type on\nthe route), not Security Rules. Security Rules is a binary gate: public vs. authenticated.",{"type":42,"tag":98,"props":2318,"children":2319},{},[2320,2325,2327],{"type":42,"tag":55,"props":2321,"children":2322},{},[2323],{"type":48,"value":2324},"Default to the modern stack.",{"type":48,"value":2326}," For new projects:",{"type":42,"tag":94,"props":2328,"children":2329},{},[2330,2367,2377,2387],{"type":42,"tag":98,"props":2331,"children":2332},{},[2333,2337,2339,2344,2346,2351,2353,2357,2359,2365],{"type":42,"tag":55,"props":2334,"children":2335},{},[2336],{"type":48,"value":1675},{"type":48,"value":2338}," over Web Client Hosting (",{"type":42,"tag":61,"props":2340,"children":2342},{"className":2341},[],[2343],{"type":48,"value":147},{"type":48,"value":2345},") — Client is deprecated; always use Slate for frontends. During ",{"type":42,"tag":61,"props":2347,"children":2349},{"className":2348},[],[2350],{"type":48,"value":90},{"type":48,"value":2352},", select ",{"type":42,"tag":55,"props":2354,"children":2355},{},[2356],{"type":48,"value":1675},{"type":48,"value":2358}," (not \"Client\"). Use ",{"type":42,"tag":61,"props":2360,"children":2362},{"className":2361},[],[2363],{"type":48,"value":2364},"catalyst slate:create",{"type":48,"value":2366}," only if you need to add additional Slate apps later.",{"type":42,"tag":98,"props":2368,"children":2369},{},[2370,2375],{"type":42,"tag":55,"props":2371,"children":2372},{},[2373],{"type":48,"value":2374},"Stratus",{"type":48,"value":2376}," over File Store — for object storage",{"type":42,"tag":98,"props":2378,"children":2379},{},[2380,2385],{"type":42,"tag":55,"props":2381,"children":2382},{},[2383],{"type":48,"value":2384},"Signals",{"type":48,"value":2386}," over Event Listeners — for event-driven architecture",{"type":42,"tag":98,"props":2388,"children":2389},{},[2390,2395],{"type":42,"tag":55,"props":2391,"children":2392},{},[2393],{"type":48,"value":2394},"Job Scheduling",{"type":48,"value":2396}," over Cron — for background tasks\nThe legacy alternatives are deprecated.",{"type":42,"tag":98,"props":2398,"children":2399},{},[2400,2405,2407,2412,2414,2419,2421,2426,2428,2433,2435],{"type":42,"tag":55,"props":2401,"children":2402},{},[2403],{"type":48,"value":2404},"Proactively guide users to connect Zoho MCP.",{"type":48,"value":2406}," When a user needs to create infrastructure\n(tables, columns, buckets, cache, etc.), first check if Zoho MCP tools (",{"type":42,"tag":61,"props":2408,"children":2410},{"className":2409},[],[2411],{"type":48,"value":473},{"type":48,"value":2413},")\nare already available in your tool list. If they are, use them directly for infrastructure\nsetup. If MCP is ",{"type":42,"tag":55,"props":2415,"children":2416},{},[2417],{"type":48,"value":2418},"not connected yet",{"type":48,"value":2420},", recommend the user set it up — walk them through the\nsteps in ",{"type":42,"tag":61,"props":2422,"children":2424},{"className":2423},[],[2425],{"type":48,"value":462},{"type":48,"value":2427}," so they can manage infrastructure directly from the\nconversation. If the user explicitly chooses to skip MCP setup, fall back to step-by-step\nconsole instructions for manual creation. Read ",{"type":42,"tag":61,"props":2429,"children":2431},{"className":2430},[],[2432],{"type":48,"value":462},{"type":48,"value":2434}," before making\nany MCP tool calls.",{"type":42,"tag":361,"props":2436,"children":2437},{},[2438,2475,2513,2529,2596],{"type":42,"tag":51,"props":2439,"children":2440},{},[2441,2446,2448,2453,2454,2459,2461,2467,2468,2474],{"type":42,"tag":55,"props":2442,"children":2443},{},[2444],{"type":48,"value":2445},"⚠️ MCP mandatory pre-flight: Org → Project → Verify → Operate.",{"type":48,"value":2447},"\nBefore making ANY MCP tool call that targets a project (creating tables, querying data,\nmanaging buckets, etc.), you MUST first identify the correct ",{"type":42,"tag":55,"props":2449,"children":2450},{},[2451],{"type":48,"value":2452},"org ID",{"type":48,"value":68},{"type":42,"tag":55,"props":2455,"children":2456},{},[2457],{"type":48,"value":2458},"project ID",{"type":48,"value":2460},".\nWithout these, every call will fail with ",{"type":42,"tag":61,"props":2462,"children":2464},{"className":2463},[],[2465],{"type":48,"value":2466},"PERMISSION_NEEDED",{"type":48,"value":192},{"type":42,"tag":61,"props":2469,"children":2471},{"className":2470},[],[2472],{"type":48,"value":2473},"INVALID_ORG",{"type":48,"value":320},{"type":42,"tag":51,"props":2476,"children":2477},{},[2478,2489,2491,2497,2498,2504,2506,2512],{"type":42,"tag":55,"props":2479,"children":2480},{},[2481,2482,2487],{"type":48,"value":185},{"type":42,"tag":61,"props":2483,"children":2485},{"className":2484},[],[2486],{"type":48,"value":66},{"type":48,"value":2488}," exists",{"type":48,"value":2490}," in the working directory — read it first. It contains the\nauthoritative ",{"type":42,"tag":61,"props":2492,"children":2494},{"className":2493},[],[2495],{"type":48,"value":2496},"project_id",{"type":48,"value":68},{"type":42,"tag":61,"props":2499,"children":2501},{"className":2500},[],[2502],{"type":48,"value":2503},"env_id",{"type":48,"value":2505},". Cross-check with ",{"type":42,"tag":61,"props":2507,"children":2509},{"className":2508},[],[2510],{"type":48,"value":2511},"List_All_Organizations",{"type":48,"value":320},{"type":42,"tag":51,"props":2514,"children":2515},{},[2516,2527],{"type":42,"tag":55,"props":2517,"children":2518},{},[2519,2520,2525],{"type":48,"value":185},{"type":42,"tag":61,"props":2521,"children":2523},{"className":2522},[],[2524],{"type":48,"value":66},{"type":48,"value":2526}," does NOT exist",{"type":48,"value":2528}," (chat-only context, no local project) — you MUST call:",{"type":42,"tag":996,"props":2530,"children":2531},{},[2532,2558,2583],{"type":42,"tag":98,"props":2533,"children":2534},{},[2535,2540,2542,2548,2550,2556],{"type":42,"tag":61,"props":2536,"children":2538},{"className":2537},[],[2539],{"type":48,"value":2511},{"type":48,"value":2541}," → get the org ",{"type":42,"tag":61,"props":2543,"children":2545},{"className":2544},[],[2546],{"type":48,"value":2547},"id",{"type":48,"value":2549}," (used as ",{"type":42,"tag":61,"props":2551,"children":2553},{"className":2552},[],[2554],{"type":48,"value":2555},"Catalyst-org",{"type":48,"value":2557}," header)",{"type":42,"tag":98,"props":2559,"children":2560},{},[2561,2567,2569,2574,2576,2582],{"type":42,"tag":61,"props":2562,"children":2564},{"className":2563},[],[2565],{"type":48,"value":2566},"List_All_Projects",{"type":48,"value":2568}," (with that org) → get the project ",{"type":42,"tag":61,"props":2570,"children":2572},{"className":2571},[],[2573],{"type":48,"value":2547},{"type":48,"value":2575}," (used in ",{"type":42,"tag":61,"props":2577,"children":2579},{"className":2578},[],[2580],{"type":48,"value":2581},"path_variables.projectId",{"type":48,"value":1072},{"type":42,"tag":98,"props":2584,"children":2585},{},[2586,2588,2594],{"type":48,"value":2587},"A verification read (e.g., ",{"type":42,"tag":61,"props":2589,"children":2591},{"className":2590},[],[2592],{"type":48,"value":2593},"List_All_Tables",{"type":48,"value":2595},") → confirm access works before any writes",{"type":42,"tag":51,"props":2597,"children":2598},{},[2599,2604,2606,2611],{"type":42,"tag":55,"props":2600,"children":2601},{},[2602],{"type":48,"value":2603},"Never skip this sequence.",{"type":48,"value":2605}," Never guess org or project IDs. See ",{"type":42,"tag":61,"props":2607,"children":2609},{"className":2608},[],[2610],{"type":48,"value":462},{"type":48,"value":2612},"\nfor the full flow, ID mismatch gotchas, and troubleshooting.",{"type":42,"tag":239,"props":2614,"children":2616},{"id":2615},"️-deprecation-notices-as-of-may-2026",[2617],{"type":48,"value":2618},"⚠️ Deprecation notices (as of May 2026)",{"type":42,"tag":51,"props":2620,"children":2621},{},[2622,2624,2629],{"type":48,"value":2623},"The following Catalyst components are ",{"type":42,"tag":55,"props":2625,"children":2626},{},[2627],{"type":48,"value":2628},"deprecated",{"type":48,"value":2630}," and will be removed in a future update\n(originally scheduled for April 30, 2026, currently still functional with deprecation warnings):",{"type":42,"tag":94,"props":2632,"children":2633},{},[2634,2650,2665],{"type":42,"tag":98,"props":2635,"children":2636},{},[2637,2642,2644,2648],{"type":42,"tag":55,"props":2638,"children":2639},{},[2640],{"type":48,"value":2641},"Event Listeners",{"type":48,"value":2643}," → replaced by ",{"type":42,"tag":55,"props":2645,"children":2646},{},[2647],{"type":48,"value":2384},{"type":48,"value":2649}," (event bus service)",{"type":42,"tag":98,"props":2651,"children":2652},{},[2653,2658,2659,2663],{"type":42,"tag":55,"props":2654,"children":2655},{},[2656],{"type":48,"value":2657},"File Store",{"type":48,"value":2643},{"type":42,"tag":55,"props":2660,"children":2661},{},[2662],{"type":48,"value":2374},{"type":48,"value":2664}," (S3-compatible object storage)",{"type":42,"tag":98,"props":2666,"children":2667},{},[2668,2673,2674,2678],{"type":42,"tag":55,"props":2669,"children":2670},{},[2671],{"type":48,"value":2672},"Cron",{"type":48,"value":2643},{"type":42,"tag":55,"props":2675,"children":2676},{},[2677],{"type":48,"value":2394},{"type":48,"value":2679}," (managed job pools)",{"type":42,"tag":51,"props":2681,"children":2682},{},[2683,2688],{"type":42,"tag":55,"props":2684,"children":2685},{},[2686],{"type":48,"value":2687},"Never recommend deprecated components for new projects.",{"type":48,"value":2689}," If a user has existing code using these,\nguide them to migrate to the replacement service. File Store supports direct migration to Stratus via\nthe console. Event Listeners and Cron require manual migration of business logic.",{"type":42,"tag":51,"props":2691,"children":2692},{},[2693],{"type":48,"value":2694},"Users who signed up after August 27, 2025 cannot even see or access these deprecated components.",{"type":42,"tag":239,"props":2696,"children":2698},{"id":2697},"catalyst-service-catalog-quick-reference",[2699],{"type":48,"value":2700},"Catalyst service catalog (quick reference)",{"type":42,"tag":51,"props":2702,"children":2703},{},[2704],{"type":48,"value":2705},"For deep-dive details on any service, load the appropriate Tier 2 reference file.",{"type":42,"tag":407,"props":2707,"children":2708},{},[2709,2730],{"type":42,"tag":411,"props":2710,"children":2711},{},[2712],{"type":42,"tag":415,"props":2713,"children":2714},{},[2715,2720,2725],{"type":42,"tag":419,"props":2716,"children":2717},{},[2718],{"type":48,"value":2719},"Category",{"type":42,"tag":419,"props":2721,"children":2722},{},[2723],{"type":48,"value":2724},"Services",{"type":42,"tag":419,"props":2726,"children":2727},{},[2728],{"type":48,"value":2729},"Details in",{"type":42,"tag":430,"props":2731,"children":2732},{},[2733,2757,2780,2811,2842,2872,2902,2926,2950,2974,2998,3022],{"type":42,"tag":415,"props":2734,"children":2735},{},[2736,2744,2749],{"type":42,"tag":437,"props":2737,"children":2738},{},[2739],{"type":42,"tag":55,"props":2740,"children":2741},{},[2742],{"type":48,"value":2743},"Compute",{"type":42,"tag":437,"props":2745,"children":2746},{},[2747],{"type":48,"value":2748},"Functions (7 types: Basic I\u002FO, Advanced I\u002FO, Event, Cron, Integration, Job, Browser Logic); Node.js 20, Java 8\u002F11\u002F17, Python 3.9; 128–1024 MB memory",{"type":42,"tag":437,"props":2750,"children":2751},{},[2752],{"type":42,"tag":61,"props":2753,"children":2755},{"className":2754},[],[2756],{"type":48,"value":521},{"type":42,"tag":415,"props":2758,"children":2759},{},[2760,2767,2772],{"type":42,"tag":437,"props":2761,"children":2762},{},[2763],{"type":42,"tag":55,"props":2764,"children":2765},{},[2766],{"type":48,"value":2743},{"type":42,"tag":437,"props":2768,"children":2769},{},[2770],{"type":48,"value":2771},"AppSail — PaaS for persistent servers; managed Node.js\u002FJava\u002FPython runtimes or custom Docker; 1–5 auto-scaling instances; 256–2048 MB",{"type":42,"tag":437,"props":2773,"children":2774},{},[2775],{"type":42,"tag":61,"props":2776,"children":2778},{"className":2777},[],[2779],{"type":48,"value":630},{"type":42,"tag":415,"props":2781,"children":2782},{},[2783,2791,2803],{"type":42,"tag":437,"props":2784,"children":2785},{},[2786],{"type":42,"tag":55,"props":2787,"children":2788},{},[2789],{"type":48,"value":2790},"Storage",{"type":42,"tag":437,"props":2792,"children":2793},{},[2794,2796,2801],{"type":48,"value":2795},"Data Store (relational, ZCQL, max 300 rows\u002Fquery); Stratus (S3-compatible, PREFERRED over ",{"type":42,"tag":2797,"props":2798,"children":2799},"del",{},[2800],{"type":48,"value":2657},{"type":48,"value":2802},"); NoSQL (document DB); Cache (string-only, max 48hr TTL, max 5MB\u002Fvalue); Search (full-text, per-column)",{"type":42,"tag":437,"props":2804,"children":2805},{},[2806],{"type":42,"tag":61,"props":2807,"children":2809},{"className":2808},[],[2810],{"type":48,"value":487},{"type":42,"tag":415,"props":2812,"children":2813},{},[2814,2822,2834],{"type":42,"tag":437,"props":2815,"children":2816},{},[2817],{"type":42,"tag":55,"props":2818,"children":2819},{},[2820],{"type":48,"value":2821},"Frontend",{"type":42,"tag":437,"props":2823,"children":2824},{},[2825,2827,2832],{"type":48,"value":2826},"Slate — Git-based, SSR, preview deploys (PREFERRED); Web Client Hosting — legacy ",{"type":42,"tag":61,"props":2828,"children":2830},{"className":2829},[],[2831],{"type":48,"value":147},{"type":48,"value":2833}," dir",{"type":42,"tag":437,"props":2835,"children":2836},{},[2837],{"type":42,"tag":61,"props":2838,"children":2840},{"className":2839},[],[2841],{"type":48,"value":630},{"type":42,"tag":415,"props":2843,"children":2844},{},[2845,2853,2864],{"type":42,"tag":437,"props":2846,"children":2847},{},[2848],{"type":42,"tag":55,"props":2849,"children":2850},{},[2851],{"type":48,"value":2852},"Integration",{"type":42,"tag":437,"props":2854,"children":2855},{},[2856,2858,2862],{"type":48,"value":2857},"Signals — managed event bus, Zoho ecosystem (PREFERRED over ",{"type":42,"tag":2797,"props":2859,"children":2860},{},[2861],{"type":48,"value":2641},{"type":48,"value":2863},"); Connections — OAuth token manager, auto-refresh",{"type":42,"tag":437,"props":2865,"children":2866},{},[2867],{"type":42,"tag":61,"props":2868,"children":2870},{"className":2869},[],[2871],{"type":48,"value":630},{"type":42,"tag":415,"props":2873,"children":2874},{},[2875,2883,2894],{"type":42,"tag":437,"props":2876,"children":2877},{},[2878],{"type":42,"tag":55,"props":2879,"children":2880},{},[2881],{"type":48,"value":2882},"Orchestration",{"type":42,"tag":437,"props":2884,"children":2885},{},[2886,2888,2892],{"type":48,"value":2887},"Circuits — visual workflow, approvals, saga patterns; Job Scheduling — background jobs (PREFERRED over ",{"type":42,"tag":2797,"props":2889,"children":2890},{},[2891],{"type":48,"value":2672},{"type":48,"value":2893},"); Pipelines — YAML CI\u002FCD",{"type":42,"tag":437,"props":2895,"children":2896},{},[2897],{"type":42,"tag":61,"props":2898,"children":2900},{"className":2899},[],[2901],{"type":48,"value":630},{"type":42,"tag":415,"props":2903,"children":2904},{},[2905,2913,2918],{"type":42,"tag":437,"props":2906,"children":2907},{},[2908],{"type":42,"tag":55,"props":2909,"children":2910},{},[2911],{"type":48,"value":2912},"AI \u002F ML",{"type":42,"tag":437,"props":2914,"children":2915},{},[2916],{"type":48,"value":2917},"Zia Services — vision + text analytics microservices; QuickML — no-code AutoML + LLM\u002FVLM; ConvoKraft — AI chatbot builder",{"type":42,"tag":437,"props":2919,"children":2920},{},[2921],{"type":42,"tag":61,"props":2922,"children":2924},{"className":2923},[],[2925],{"type":48,"value":630},{"type":42,"tag":415,"props":2927,"children":2928},{},[2929,2937,2942],{"type":42,"tag":437,"props":2930,"children":2931},{},[2932],{"type":42,"tag":55,"props":2933,"children":2934},{},[2935],{"type":48,"value":2936},"Browser",{"type":42,"tag":437,"props":2938,"children":2939},{},[2940],{"type":48,"value":2941},"SmartBrowz — managed headless browser; scraping, screenshots, PDF generation",{"type":42,"tag":437,"props":2943,"children":2944},{},[2945],{"type":42,"tag":61,"props":2946,"children":2948},{"className":2947},[],[2949],{"type":48,"value":630},{"type":42,"tag":415,"props":2951,"children":2952},{},[2953,2961,2966],{"type":42,"tag":437,"props":2954,"children":2955},{},[2956],{"type":42,"tag":55,"props":2957,"children":2958},{},[2959],{"type":48,"value":2960},"DevOps",{"type":42,"tag":437,"props":2962,"children":2963},{},[2964],{"type":48,"value":2965},"Logs, APM, Application Alerts, GitHub auto-deploy integration",{"type":42,"tag":437,"props":2967,"children":2968},{},[2969],{"type":42,"tag":61,"props":2970,"children":2972},{"className":2971},[],[2973],{"type":48,"value":596},{"type":42,"tag":415,"props":2975,"children":2976},{},[2977,2985,2990],{"type":42,"tag":437,"props":2978,"children":2979},{},[2980],{"type":42,"tag":55,"props":2981,"children":2982},{},[2983],{"type":48,"value":2984},"Auth & Security",{"type":42,"tag":437,"props":2986,"children":2987},{},[2988],{"type":48,"value":2989},"Auth & User Management — built-in auth, Zoho accounts, SSO; API Gateway — routing, rate limiting, CORS",{"type":42,"tag":437,"props":2991,"children":2992},{},[2993],{"type":42,"tag":61,"props":2994,"children":2996},{"className":2995},[],[2997],{"type":48,"value":487},{"type":42,"tag":415,"props":2999,"children":3000},{},[3001,3009,3014],{"type":42,"tag":437,"props":3002,"children":3003},{},[3004],{"type":42,"tag":55,"props":3005,"children":3006},{},[3007],{"type":48,"value":3008},"Communication",{"type":42,"tag":437,"props":3010,"children":3011},{},[3012],{"type":48,"value":3013},"Mail (domain verification required); Push Notifications (APNs + FCM)",{"type":42,"tag":437,"props":3015,"children":3016},{},[3017],{"type":42,"tag":61,"props":3018,"children":3020},{"className":3019},[],[3021],{"type":48,"value":487},{"type":42,"tag":415,"props":3023,"children":3024},{},[3025,3033,3046],{"type":42,"tag":437,"props":3026,"children":3027},{},[3028],{"type":42,"tag":55,"props":3029,"children":3030},{},[3031],{"type":48,"value":3032},"Developer Tools",{"type":42,"tag":437,"props":3034,"children":3035},{},[3036,3038,3044],{"type":48,"value":3037},"CLI (",{"type":42,"tag":61,"props":3039,"children":3041},{"className":3040},[],[3042],{"type":48,"value":3043},"zcatalyst-cli",{"type":48,"value":3045},"), SDKs (Node.js\u002FJava\u002FPython + Web\u002FAndroid\u002FiOS\u002FFlutter), REST APIs, VS Code Extension, CodeLib, Zia AI Assistant, Tunneling",{"type":42,"tag":437,"props":3047,"children":3048},{},[3049,3054,3055],{"type":42,"tag":61,"props":3050,"children":3052},{"className":3051},[],[3053],{"type":48,"value":521},{"type":48,"value":161},{"type":42,"tag":61,"props":3056,"children":3058},{"className":3057},[],[3059],{"type":48,"value":538},{"type":42,"tag":51,"props":3061,"children":3062},{},[3063],{"type":42,"tag":55,"props":3064,"children":3065},{},[3066],{"type":48,"value":3067},"Deprecated — never recommend for new projects:",{"type":42,"tag":94,"props":3069,"children":3070},{},[3071,3084,3096,3108],{"type":42,"tag":98,"props":3072,"children":3073},{},[3074,3078,3080],{"type":42,"tag":2797,"props":3075,"children":3076},{},[3077],{"type":48,"value":2657},{"type":48,"value":3079}," → use ",{"type":42,"tag":55,"props":3081,"children":3082},{},[3083],{"type":48,"value":2374},{"type":42,"tag":98,"props":3085,"children":3086},{},[3087,3091,3092],{"type":42,"tag":2797,"props":3088,"children":3089},{},[3090],{"type":48,"value":2641},{"type":48,"value":3079},{"type":42,"tag":55,"props":3093,"children":3094},{},[3095],{"type":48,"value":2384},{"type":42,"tag":98,"props":3097,"children":3098},{},[3099,3103,3104],{"type":42,"tag":2797,"props":3100,"children":3101},{},[3102],{"type":48,"value":2672},{"type":48,"value":3079},{"type":42,"tag":55,"props":3105,"children":3106},{},[3107],{"type":48,"value":2394},{"type":42,"tag":98,"props":3109,"children":3110},{},[3111],{"type":48,"value":3112},"Users who signed up after Aug 27, 2025 cannot access deprecated components.",{"type":42,"tag":239,"props":3114,"children":3116},{"id":3115},"quick-reference-function-handler-signatures-nodejs",[3117],{"type":48,"value":3118},"Quick reference: Function handler signatures (Node.js)",{"type":42,"tag":361,"props":3120,"children":3121},{},[3122],{"type":42,"tag":51,"props":3123,"children":3124},{},[3125,3130,3132,3139,3141,3147,3149,3154,3156,3162,3163,3169,3171,3177,3178,3184],{"type":42,"tag":55,"props":3126,"children":3127},{},[3128],{"type":48,"value":3129},"These are the current official signatures",{"type":48,"value":3131}," per ",{"type":42,"tag":208,"props":3133,"children":3137},{"href":3134,"rel":3135},"https:\u002F\u002Fdocs.catalyst.zoho.com\u002Fen\u002Fsdk\u002Fnodejs\u002Fv2\u002Foverview\u002F",[3136],"nofollow",[3138],{"type":48,"value":3134},{"type":48,"value":3140},"\nAll function types require manual SDK initialization via ",{"type":42,"tag":61,"props":3142,"children":3144},{"className":3143},[],[3145],{"type":48,"value":3146},"catalyst.initialize()",{"type":48,"value":3148},".\nThe node20 handler change ",{"type":42,"tag":55,"props":3150,"children":3151},{},[3152],{"type":48,"value":3153},"only affects Advanced I\u002FO",{"type":48,"value":3155}," (removed ",{"type":42,"tag":61,"props":3157,"children":3159},{"className":3158},[],[3160],{"type":48,"value":3161},"catalystApp",{"type":48,"value":68},{"type":42,"tag":61,"props":3164,"children":3166},{"className":3165},[],[3167],{"type":48,"value":3168},"context",{"type":48,"value":3170}," params,\nnow receives raw ",{"type":42,"tag":61,"props":3172,"children":3174},{"className":3173},[],[3175],{"type":48,"value":3176},"req",{"type":48,"value":1973},{"type":42,"tag":61,"props":3179,"children":3181},{"className":3180},[],[3182],{"type":48,"value":3183},"res",{"type":48,"value":3185},"). All other function types retain their original signatures.",{"type":42,"tag":1504,"props":3187,"children":3191},{"className":3188,"code":3189,"language":3190,"meta":1509,"style":1509},"language-javascript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F Basic I\u002FO — simple string in, string out (GET only)\nconst catalyst = require('zcatalyst-sdk-node');\nmodule.exports = (context, basicIO) => {\n  const catalystApp = catalyst.initialize(context);\n  const data = context.getArgument();\n  basicIO.write(\"Response string\");\n};\n\n\u002F\u002F Advanced I\u002FO — full HTTP (any method), node20: raw http.ServerResponse (NOT Express)\n\u002F\u002F Use sendJson() + getBody() helpers — res.status\u002Fres.json do NOT exist\n'use strict';\nconst catalyst = require('zcatalyst-sdk-node');\n\nfunction sendJson(res, statusCode, data) {\n  res.writeHead(statusCode, { 'Content-Type': 'application\u002Fjson' });\n  res.end(JSON.stringify(data));\n}\n\nmodule.exports = async (req, res) => {\n  const catalystApp = catalyst.initialize(req);\n  sendJson(res, 200, { message: \"Hello\" });\n};\n\n\u002F\u002F LEGACY Advanced I\u002FO signature (older projects, node14\u002F16\u002F18):\n\u002F\u002F module.exports = (catalystApp, context, req, res) => {\n\u002F\u002F   sendJson(res, 200, { message: \"Hello\" });\n\u002F\u002F };\n\n\u002F\u002F Event — triggered by Signals\u002FEvent Listeners\nconst catalyst = require('zcatalyst-sdk-node');\nmodule.exports = (event, context) => {\n  const catalystApp = catalyst.initialize(context);\n  const eventData = event.data; \u002F\u002F event payload\n  context.close(); \u002F\u002F must close context when done\n};\n\n\u002F\u002F Cron — DEPRECATED, use Job Scheduling\nconst catalyst = require('zcatalyst-sdk-node');\nmodule.exports = (cronDetails, context) => {\n  const catalystApp = catalyst.initialize(context);\n  context.closeWithSuccess(); \u002F\u002F or context.closeWithFailure()\n};\n\n\u002F\u002F Job — triggered by Job Scheduling\nconst catalyst = require('zcatalyst-sdk-node');\nmodule.exports = async (jobData, context) => {\n  const catalystApp = catalyst.initialize(context);\n  context.closeWithSuccess(); \u002F\u002F or context.closeWithFailure()\n};\n\n\u002F\u002F Integration — Zoho service triggers (NOT available in EU, AU, IN, CA DCs)\nconst catalyst = require('zcatalyst-sdk-node');\nmodule.exports = (event, context) => {\n  const catalystApp = catalyst.initialize(context);\n  context.close();\n};\n\n\u002F\u002F Browser Logic — used with SmartBrowz\nconst catalyst = require('zcatalyst-sdk-node');\nmodule.exports = (event, context) => {\n  const catalystApp = catalyst.initialize(context);\n  context.close();\n};\n","javascript",[3192],{"type":42,"tag":61,"props":3193,"children":3194},{"__ignoreMap":1509},[3195,3203,3258,3305,3353,3392,3436,3445,3453,3462,3471,3492,3536,3544,3591,3671,3724,3733,3741,3787,3831,3901,3909,3917,3926,3935,3944,3953,3961,3970,4014,4055,4099,4139,4170,4178,4186,4195,4239,4280,4324,4354,4362,4370,4379,4423,4468,4512,4540,4548,4556,4565,4609,4649,4693,4717,4725,4733,4742,4786,4826,4870,4894],{"type":42,"tag":1515,"props":3196,"children":3197},{"class":1517,"line":1518},[3198],{"type":42,"tag":1515,"props":3199,"children":3200},{"style":1522},[3201],{"type":48,"value":3202},"\u002F\u002F Basic I\u002FO — simple string in, string out (GET only)\n",{"type":42,"tag":1515,"props":3204,"children":3205},{"class":1517,"line":1528},[3206,3212,3218,3224,3230,3235,3240,3245,3249,3253],{"type":42,"tag":1515,"props":3207,"children":3209},{"style":3208},"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA",[3210],{"type":48,"value":3211},"const",{"type":42,"tag":1515,"props":3213,"children":3215},{"style":3214},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[3216],{"type":48,"value":3217}," catalyst ",{"type":42,"tag":1515,"props":3219,"children":3221},{"style":3220},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[3222],{"type":48,"value":3223},"=",{"type":42,"tag":1515,"props":3225,"children":3227},{"style":3226},"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF",[3228],{"type":48,"value":3229}," require",{"type":42,"tag":1515,"props":3231,"children":3232},{"style":3214},[3233],{"type":48,"value":3234},"(",{"type":42,"tag":1515,"props":3236,"children":3237},{"style":3220},[3238],{"type":48,"value":3239},"'",{"type":42,"tag":1515,"props":3241,"children":3242},{"style":1538},[3243],{"type":48,"value":3244},"zcatalyst-sdk-node",{"type":42,"tag":1515,"props":3246,"children":3247},{"style":3220},[3248],{"type":48,"value":3239},{"type":42,"tag":1515,"props":3250,"children":3251},{"style":3214},[3252],{"type":48,"value":1072},{"type":42,"tag":1515,"props":3254,"children":3255},{"style":3220},[3256],{"type":48,"value":3257},";\n",{"type":42,"tag":1515,"props":3259,"children":3260},{"class":1517,"line":1544},[3261,3266,3271,3276,3281,3286,3291,3295,3300],{"type":42,"tag":1515,"props":3262,"children":3263},{"style":3220},[3264],{"type":48,"value":3265},"module.exports",{"type":42,"tag":1515,"props":3267,"children":3268},{"style":3220},[3269],{"type":48,"value":3270}," =",{"type":42,"tag":1515,"props":3272,"children":3273},{"style":3220},[3274],{"type":48,"value":3275}," (",{"type":42,"tag":1515,"props":3277,"children":3279},{"style":3278},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic",[3280],{"type":48,"value":3168},{"type":42,"tag":1515,"props":3282,"children":3283},{"style":3220},[3284],{"type":48,"value":3285},",",{"type":42,"tag":1515,"props":3287,"children":3288},{"style":3278},[3289],{"type":48,"value":3290}," basicIO",{"type":42,"tag":1515,"props":3292,"children":3293},{"style":3220},[3294],{"type":48,"value":1072},{"type":42,"tag":1515,"props":3296,"children":3297},{"style":3208},[3298],{"type":48,"value":3299}," =>",{"type":42,"tag":1515,"props":3301,"children":3302},{"style":3220},[3303],{"type":48,"value":3304}," {\n",{"type":42,"tag":1515,"props":3306,"children":3307},{"class":1517,"line":1554},[3308,3313,3318,3322,3327,3331,3336,3341,3345,3349],{"type":42,"tag":1515,"props":3309,"children":3310},{"style":3208},[3311],{"type":48,"value":3312},"  const",{"type":42,"tag":1515,"props":3314,"children":3315},{"style":3214},[3316],{"type":48,"value":3317}," catalystApp",{"type":42,"tag":1515,"props":3319,"children":3320},{"style":3220},[3321],{"type":48,"value":3270},{"type":42,"tag":1515,"props":3323,"children":3324},{"style":3214},[3325],{"type":48,"value":3326}," catalyst",{"type":42,"tag":1515,"props":3328,"children":3329},{"style":3220},[3330],{"type":48,"value":320},{"type":42,"tag":1515,"props":3332,"children":3333},{"style":3226},[3334],{"type":48,"value":3335},"initialize",{"type":42,"tag":1515,"props":3337,"children":3339},{"style":3338},"--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178",[3340],{"type":48,"value":3234},{"type":42,"tag":1515,"props":3342,"children":3343},{"style":3214},[3344],{"type":48,"value":3168},{"type":42,"tag":1515,"props":3346,"children":3347},{"style":3338},[3348],{"type":48,"value":1072},{"type":42,"tag":1515,"props":3350,"children":3351},{"style":3220},[3352],{"type":48,"value":3257},{"type":42,"tag":1515,"props":3354,"children":3355},{"class":1517,"line":1563},[3356,3360,3365,3369,3374,3378,3383,3388],{"type":42,"tag":1515,"props":3357,"children":3358},{"style":3208},[3359],{"type":48,"value":3312},{"type":42,"tag":1515,"props":3361,"children":3362},{"style":3214},[3363],{"type":48,"value":3364}," data",{"type":42,"tag":1515,"props":3366,"children":3367},{"style":3220},[3368],{"type":48,"value":3270},{"type":42,"tag":1515,"props":3370,"children":3371},{"style":3214},[3372],{"type":48,"value":3373}," context",{"type":42,"tag":1515,"props":3375,"children":3376},{"style":3220},[3377],{"type":48,"value":320},{"type":42,"tag":1515,"props":3379,"children":3380},{"style":3226},[3381],{"type":48,"value":3382},"getArgument",{"type":42,"tag":1515,"props":3384,"children":3385},{"style":3338},[3386],{"type":48,"value":3387},"()",{"type":42,"tag":1515,"props":3389,"children":3390},{"style":3220},[3391],{"type":48,"value":3257},{"type":42,"tag":1515,"props":3393,"children":3395},{"class":1517,"line":3394},6,[3396,3401,3405,3410,3414,3419,3424,3428,3432],{"type":42,"tag":1515,"props":3397,"children":3398},{"style":3214},[3399],{"type":48,"value":3400},"  basicIO",{"type":42,"tag":1515,"props":3402,"children":3403},{"style":3220},[3404],{"type":48,"value":320},{"type":42,"tag":1515,"props":3406,"children":3407},{"style":3226},[3408],{"type":48,"value":3409},"write",{"type":42,"tag":1515,"props":3411,"children":3412},{"style":3338},[3413],{"type":48,"value":3234},{"type":42,"tag":1515,"props":3415,"children":3416},{"style":3220},[3417],{"type":48,"value":3418},"\"",{"type":42,"tag":1515,"props":3420,"children":3421},{"style":1538},[3422],{"type":48,"value":3423},"Response string",{"type":42,"tag":1515,"props":3425,"children":3426},{"style":3220},[3427],{"type":48,"value":3418},{"type":42,"tag":1515,"props":3429,"children":3430},{"style":3338},[3431],{"type":48,"value":1072},{"type":42,"tag":1515,"props":3433,"children":3434},{"style":3220},[3435],{"type":48,"value":3257},{"type":42,"tag":1515,"props":3437,"children":3439},{"class":1517,"line":3438},7,[3440],{"type":42,"tag":1515,"props":3441,"children":3442},{"style":3220},[3443],{"type":48,"value":3444},"};\n",{"type":42,"tag":1515,"props":3446,"children":3448},{"class":1517,"line":3447},8,[3449],{"type":42,"tag":1515,"props":3450,"children":3451},{"emptyLinePlaceholder":1548},[3452],{"type":48,"value":1551},{"type":42,"tag":1515,"props":3454,"children":3456},{"class":1517,"line":3455},9,[3457],{"type":42,"tag":1515,"props":3458,"children":3459},{"style":1522},[3460],{"type":48,"value":3461},"\u002F\u002F Advanced I\u002FO — full HTTP (any method), node20: raw http.ServerResponse (NOT Express)\n",{"type":42,"tag":1515,"props":3463,"children":3465},{"class":1517,"line":3464},10,[3466],{"type":42,"tag":1515,"props":3467,"children":3468},{"style":1522},[3469],{"type":48,"value":3470},"\u002F\u002F Use sendJson() + getBody() helpers — res.status\u002Fres.json do NOT exist\n",{"type":42,"tag":1515,"props":3472,"children":3474},{"class":1517,"line":3473},11,[3475,3479,3484,3488],{"type":42,"tag":1515,"props":3476,"children":3477},{"style":3220},[3478],{"type":48,"value":3239},{"type":42,"tag":1515,"props":3480,"children":3481},{"style":1538},[3482],{"type":48,"value":3483},"use strict",{"type":42,"tag":1515,"props":3485,"children":3486},{"style":3220},[3487],{"type":48,"value":3239},{"type":42,"tag":1515,"props":3489,"children":3490},{"style":3220},[3491],{"type":48,"value":3257},{"type":42,"tag":1515,"props":3493,"children":3495},{"class":1517,"line":3494},12,[3496,3500,3504,3508,3512,3516,3520,3524,3528,3532],{"type":42,"tag":1515,"props":3497,"children":3498},{"style":3208},[3499],{"type":48,"value":3211},{"type":42,"tag":1515,"props":3501,"children":3502},{"style":3214},[3503],{"type":48,"value":3217},{"type":42,"tag":1515,"props":3505,"children":3506},{"style":3220},[3507],{"type":48,"value":3223},{"type":42,"tag":1515,"props":3509,"children":3510},{"style":3226},[3511],{"type":48,"value":3229},{"type":42,"tag":1515,"props":3513,"children":3514},{"style":3214},[3515],{"type":48,"value":3234},{"type":42,"tag":1515,"props":3517,"children":3518},{"style":3220},[3519],{"type":48,"value":3239},{"type":42,"tag":1515,"props":3521,"children":3522},{"style":1538},[3523],{"type":48,"value":3244},{"type":42,"tag":1515,"props":3525,"children":3526},{"style":3220},[3527],{"type":48,"value":3239},{"type":42,"tag":1515,"props":3529,"children":3530},{"style":3214},[3531],{"type":48,"value":1072},{"type":42,"tag":1515,"props":3533,"children":3534},{"style":3220},[3535],{"type":48,"value":3257},{"type":42,"tag":1515,"props":3537,"children":3539},{"class":1517,"line":3538},13,[3540],{"type":42,"tag":1515,"props":3541,"children":3542},{"emptyLinePlaceholder":1548},[3543],{"type":48,"value":1551},{"type":42,"tag":1515,"props":3545,"children":3547},{"class":1517,"line":3546},14,[3548,3553,3558,3562,3566,3570,3575,3579,3583,3587],{"type":42,"tag":1515,"props":3549,"children":3550},{"style":3208},[3551],{"type":48,"value":3552},"function",{"type":42,"tag":1515,"props":3554,"children":3555},{"style":3226},[3556],{"type":48,"value":3557}," sendJson",{"type":42,"tag":1515,"props":3559,"children":3560},{"style":3220},[3561],{"type":48,"value":3234},{"type":42,"tag":1515,"props":3563,"children":3564},{"style":3278},[3565],{"type":48,"value":3183},{"type":42,"tag":1515,"props":3567,"children":3568},{"style":3220},[3569],{"type":48,"value":3285},{"type":42,"tag":1515,"props":3571,"children":3572},{"style":3278},[3573],{"type":48,"value":3574}," statusCode",{"type":42,"tag":1515,"props":3576,"children":3577},{"style":3220},[3578],{"type":48,"value":3285},{"type":42,"tag":1515,"props":3580,"children":3581},{"style":3278},[3582],{"type":48,"value":3364},{"type":42,"tag":1515,"props":3584,"children":3585},{"style":3220},[3586],{"type":48,"value":1072},{"type":42,"tag":1515,"props":3588,"children":3589},{"style":3220},[3590],{"type":48,"value":3304},{"type":42,"tag":1515,"props":3592,"children":3594},{"class":1517,"line":3593},15,[3595,3600,3604,3609,3613,3618,3622,3627,3632,3637,3641,3645,3649,3654,3658,3663,3667],{"type":42,"tag":1515,"props":3596,"children":3597},{"style":3214},[3598],{"type":48,"value":3599},"  res",{"type":42,"tag":1515,"props":3601,"children":3602},{"style":3220},[3603],{"type":48,"value":320},{"type":42,"tag":1515,"props":3605,"children":3606},{"style":3226},[3607],{"type":48,"value":3608},"writeHead",{"type":42,"tag":1515,"props":3610,"children":3611},{"style":3338},[3612],{"type":48,"value":3234},{"type":42,"tag":1515,"props":3614,"children":3615},{"style":3214},[3616],{"type":48,"value":3617},"statusCode",{"type":42,"tag":1515,"props":3619,"children":3620},{"style":3220},[3621],{"type":48,"value":3285},{"type":42,"tag":1515,"props":3623,"children":3624},{"style":3220},[3625],{"type":48,"value":3626}," {",{"type":42,"tag":1515,"props":3628,"children":3629},{"style":3220},[3630],{"type":48,"value":3631}," '",{"type":42,"tag":1515,"props":3633,"children":3634},{"style":3338},[3635],{"type":48,"value":3636},"Content-Type",{"type":42,"tag":1515,"props":3638,"children":3639},{"style":3220},[3640],{"type":48,"value":3239},{"type":42,"tag":1515,"props":3642,"children":3643},{"style":3220},[3644],{"type":48,"value":92},{"type":42,"tag":1515,"props":3646,"children":3647},{"style":3220},[3648],{"type":48,"value":3631},{"type":42,"tag":1515,"props":3650,"children":3651},{"style":1538},[3652],{"type":48,"value":3653},"application\u002Fjson",{"type":42,"tag":1515,"props":3655,"children":3656},{"style":3220},[3657],{"type":48,"value":3239},{"type":42,"tag":1515,"props":3659,"children":3660},{"style":3220},[3661],{"type":48,"value":3662}," }",{"type":42,"tag":1515,"props":3664,"children":3665},{"style":3338},[3666],{"type":48,"value":1072},{"type":42,"tag":1515,"props":3668,"children":3669},{"style":3220},[3670],{"type":48,"value":3257},{"type":42,"tag":1515,"props":3672,"children":3674},{"class":1517,"line":3673},16,[3675,3679,3683,3688,3692,3697,3701,3706,3710,3715,3720],{"type":42,"tag":1515,"props":3676,"children":3677},{"style":3214},[3678],{"type":48,"value":3599},{"type":42,"tag":1515,"props":3680,"children":3681},{"style":3220},[3682],{"type":48,"value":320},{"type":42,"tag":1515,"props":3684,"children":3685},{"style":3226},[3686],{"type":48,"value":3687},"end",{"type":42,"tag":1515,"props":3689,"children":3690},{"style":3338},[3691],{"type":48,"value":3234},{"type":42,"tag":1515,"props":3693,"children":3694},{"style":3214},[3695],{"type":48,"value":3696},"JSON",{"type":42,"tag":1515,"props":3698,"children":3699},{"style":3220},[3700],{"type":48,"value":320},{"type":42,"tag":1515,"props":3702,"children":3703},{"style":3226},[3704],{"type":48,"value":3705},"stringify",{"type":42,"tag":1515,"props":3707,"children":3708},{"style":3338},[3709],{"type":48,"value":3234},{"type":42,"tag":1515,"props":3711,"children":3712},{"style":3214},[3713],{"type":48,"value":3714},"data",{"type":42,"tag":1515,"props":3716,"children":3717},{"style":3338},[3718],{"type":48,"value":3719},"))",{"type":42,"tag":1515,"props":3721,"children":3722},{"style":3220},[3723],{"type":48,"value":3257},{"type":42,"tag":1515,"props":3725,"children":3727},{"class":1517,"line":3726},17,[3728],{"type":42,"tag":1515,"props":3729,"children":3730},{"style":3220},[3731],{"type":48,"value":3732},"}\n",{"type":42,"tag":1515,"props":3734,"children":3736},{"class":1517,"line":3735},18,[3737],{"type":42,"tag":1515,"props":3738,"children":3739},{"emptyLinePlaceholder":1548},[3740],{"type":48,"value":1551},{"type":42,"tag":1515,"props":3742,"children":3744},{"class":1517,"line":3743},19,[3745,3749,3753,3758,3762,3766,3770,3775,3779,3783],{"type":42,"tag":1515,"props":3746,"children":3747},{"style":3220},[3748],{"type":48,"value":3265},{"type":42,"tag":1515,"props":3750,"children":3751},{"style":3220},[3752],{"type":48,"value":3270},{"type":42,"tag":1515,"props":3754,"children":3755},{"style":3208},[3756],{"type":48,"value":3757}," async",{"type":42,"tag":1515,"props":3759,"children":3760},{"style":3220},[3761],{"type":48,"value":3275},{"type":42,"tag":1515,"props":3763,"children":3764},{"style":3278},[3765],{"type":48,"value":3176},{"type":42,"tag":1515,"props":3767,"children":3768},{"style":3220},[3769],{"type":48,"value":3285},{"type":42,"tag":1515,"props":3771,"children":3772},{"style":3278},[3773],{"type":48,"value":3774}," res",{"type":42,"tag":1515,"props":3776,"children":3777},{"style":3220},[3778],{"type":48,"value":1072},{"type":42,"tag":1515,"props":3780,"children":3781},{"style":3208},[3782],{"type":48,"value":3299},{"type":42,"tag":1515,"props":3784,"children":3785},{"style":3220},[3786],{"type":48,"value":3304},{"type":42,"tag":1515,"props":3788,"children":3790},{"class":1517,"line":3789},20,[3791,3795,3799,3803,3807,3811,3815,3819,3823,3827],{"type":42,"tag":1515,"props":3792,"children":3793},{"style":3208},[3794],{"type":48,"value":3312},{"type":42,"tag":1515,"props":3796,"children":3797},{"style":3214},[3798],{"type":48,"value":3317},{"type":42,"tag":1515,"props":3800,"children":3801},{"style":3220},[3802],{"type":48,"value":3270},{"type":42,"tag":1515,"props":3804,"children":3805},{"style":3214},[3806],{"type":48,"value":3326},{"type":42,"tag":1515,"props":3808,"children":3809},{"style":3220},[3810],{"type":48,"value":320},{"type":42,"tag":1515,"props":3812,"children":3813},{"style":3226},[3814],{"type":48,"value":3335},{"type":42,"tag":1515,"props":3816,"children":3817},{"style":3338},[3818],{"type":48,"value":3234},{"type":42,"tag":1515,"props":3820,"children":3821},{"style":3214},[3822],{"type":48,"value":3176},{"type":42,"tag":1515,"props":3824,"children":3825},{"style":3338},[3826],{"type":48,"value":1072},{"type":42,"tag":1515,"props":3828,"children":3829},{"style":3220},[3830],{"type":48,"value":3257},{"type":42,"tag":1515,"props":3832,"children":3834},{"class":1517,"line":3833},21,[3835,3840,3844,3848,3852,3858,3862,3866,3871,3875,3880,3885,3889,3893,3897],{"type":42,"tag":1515,"props":3836,"children":3837},{"style":3226},[3838],{"type":48,"value":3839},"  sendJson",{"type":42,"tag":1515,"props":3841,"children":3842},{"style":3338},[3843],{"type":48,"value":3234},{"type":42,"tag":1515,"props":3845,"children":3846},{"style":3214},[3847],{"type":48,"value":3183},{"type":42,"tag":1515,"props":3849,"children":3850},{"style":3220},[3851],{"type":48,"value":3285},{"type":42,"tag":1515,"props":3853,"children":3855},{"style":3854},"--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C",[3856],{"type":48,"value":3857}," 200",{"type":42,"tag":1515,"props":3859,"children":3860},{"style":3220},[3861],{"type":48,"value":3285},{"type":42,"tag":1515,"props":3863,"children":3864},{"style":3220},[3865],{"type":48,"value":3626},{"type":42,"tag":1515,"props":3867,"children":3868},{"style":3338},[3869],{"type":48,"value":3870}," message",{"type":42,"tag":1515,"props":3872,"children":3873},{"style":3220},[3874],{"type":48,"value":92},{"type":42,"tag":1515,"props":3876,"children":3877},{"style":3220},[3878],{"type":48,"value":3879}," \"",{"type":42,"tag":1515,"props":3881,"children":3882},{"style":1538},[3883],{"type":48,"value":3884},"Hello",{"type":42,"tag":1515,"props":3886,"children":3887},{"style":3220},[3888],{"type":48,"value":3418},{"type":42,"tag":1515,"props":3890,"children":3891},{"style":3220},[3892],{"type":48,"value":3662},{"type":42,"tag":1515,"props":3894,"children":3895},{"style":3338},[3896],{"type":48,"value":1072},{"type":42,"tag":1515,"props":3898,"children":3899},{"style":3220},[3900],{"type":48,"value":3257},{"type":42,"tag":1515,"props":3902,"children":3904},{"class":1517,"line":3903},22,[3905],{"type":42,"tag":1515,"props":3906,"children":3907},{"style":3220},[3908],{"type":48,"value":3444},{"type":42,"tag":1515,"props":3910,"children":3912},{"class":1517,"line":3911},23,[3913],{"type":42,"tag":1515,"props":3914,"children":3915},{"emptyLinePlaceholder":1548},[3916],{"type":48,"value":1551},{"type":42,"tag":1515,"props":3918,"children":3920},{"class":1517,"line":3919},24,[3921],{"type":42,"tag":1515,"props":3922,"children":3923},{"style":1522},[3924],{"type":48,"value":3925},"\u002F\u002F LEGACY Advanced I\u002FO signature (older projects, node14\u002F16\u002F18):\n",{"type":42,"tag":1515,"props":3927,"children":3929},{"class":1517,"line":3928},25,[3930],{"type":42,"tag":1515,"props":3931,"children":3932},{"style":1522},[3933],{"type":48,"value":3934},"\u002F\u002F module.exports = (catalystApp, context, req, res) => {\n",{"type":42,"tag":1515,"props":3936,"children":3938},{"class":1517,"line":3937},26,[3939],{"type":42,"tag":1515,"props":3940,"children":3941},{"style":1522},[3942],{"type":48,"value":3943},"\u002F\u002F   sendJson(res, 200, { message: \"Hello\" });\n",{"type":42,"tag":1515,"props":3945,"children":3947},{"class":1517,"line":3946},27,[3948],{"type":42,"tag":1515,"props":3949,"children":3950},{"style":1522},[3951],{"type":48,"value":3952},"\u002F\u002F };\n",{"type":42,"tag":1515,"props":3954,"children":3956},{"class":1517,"line":3955},28,[3957],{"type":42,"tag":1515,"props":3958,"children":3959},{"emptyLinePlaceholder":1548},[3960],{"type":48,"value":1551},{"type":42,"tag":1515,"props":3962,"children":3964},{"class":1517,"line":3963},29,[3965],{"type":42,"tag":1515,"props":3966,"children":3967},{"style":1522},[3968],{"type":48,"value":3969},"\u002F\u002F Event — triggered by Signals\u002FEvent Listeners\n",{"type":42,"tag":1515,"props":3971,"children":3973},{"class":1517,"line":3972},30,[3974,3978,3982,3986,3990,3994,3998,4002,4006,4010],{"type":42,"tag":1515,"props":3975,"children":3976},{"style":3208},[3977],{"type":48,"value":3211},{"type":42,"tag":1515,"props":3979,"children":3980},{"style":3214},[3981],{"type":48,"value":3217},{"type":42,"tag":1515,"props":3983,"children":3984},{"style":3220},[3985],{"type":48,"value":3223},{"type":42,"tag":1515,"props":3987,"children":3988},{"style":3226},[3989],{"type":48,"value":3229},{"type":42,"tag":1515,"props":3991,"children":3992},{"style":3214},[3993],{"type":48,"value":3234},{"type":42,"tag":1515,"props":3995,"children":3996},{"style":3220},[3997],{"type":48,"value":3239},{"type":42,"tag":1515,"props":3999,"children":4000},{"style":1538},[4001],{"type":48,"value":3244},{"type":42,"tag":1515,"props":4003,"children":4004},{"style":3220},[4005],{"type":48,"value":3239},{"type":42,"tag":1515,"props":4007,"children":4008},{"style":3214},[4009],{"type":48,"value":1072},{"type":42,"tag":1515,"props":4011,"children":4012},{"style":3220},[4013],{"type":48,"value":3257},{"type":42,"tag":1515,"props":4015,"children":4017},{"class":1517,"line":4016},31,[4018,4022,4026,4030,4035,4039,4043,4047,4051],{"type":42,"tag":1515,"props":4019,"children":4020},{"style":3220},[4021],{"type":48,"value":3265},{"type":42,"tag":1515,"props":4023,"children":4024},{"style":3220},[4025],{"type":48,"value":3270},{"type":42,"tag":1515,"props":4027,"children":4028},{"style":3220},[4029],{"type":48,"value":3275},{"type":42,"tag":1515,"props":4031,"children":4032},{"style":3278},[4033],{"type":48,"value":4034},"event",{"type":42,"tag":1515,"props":4036,"children":4037},{"style":3220},[4038],{"type":48,"value":3285},{"type":42,"tag":1515,"props":4040,"children":4041},{"style":3278},[4042],{"type":48,"value":3373},{"type":42,"tag":1515,"props":4044,"children":4045},{"style":3220},[4046],{"type":48,"value":1072},{"type":42,"tag":1515,"props":4048,"children":4049},{"style":3208},[4050],{"type":48,"value":3299},{"type":42,"tag":1515,"props":4052,"children":4053},{"style":3220},[4054],{"type":48,"value":3304},{"type":42,"tag":1515,"props":4056,"children":4058},{"class":1517,"line":4057},32,[4059,4063,4067,4071,4075,4079,4083,4087,4091,4095],{"type":42,"tag":1515,"props":4060,"children":4061},{"style":3208},[4062],{"type":48,"value":3312},{"type":42,"tag":1515,"props":4064,"children":4065},{"style":3214},[4066],{"type":48,"value":3317},{"type":42,"tag":1515,"props":4068,"children":4069},{"style":3220},[4070],{"type":48,"value":3270},{"type":42,"tag":1515,"props":4072,"children":4073},{"style":3214},[4074],{"type":48,"value":3326},{"type":42,"tag":1515,"props":4076,"children":4077},{"style":3220},[4078],{"type":48,"value":320},{"type":42,"tag":1515,"props":4080,"children":4081},{"style":3226},[4082],{"type":48,"value":3335},{"type":42,"tag":1515,"props":4084,"children":4085},{"style":3338},[4086],{"type":48,"value":3234},{"type":42,"tag":1515,"props":4088,"children":4089},{"style":3214},[4090],{"type":48,"value":3168},{"type":42,"tag":1515,"props":4092,"children":4093},{"style":3338},[4094],{"type":48,"value":1072},{"type":42,"tag":1515,"props":4096,"children":4097},{"style":3220},[4098],{"type":48,"value":3257},{"type":42,"tag":1515,"props":4100,"children":4102},{"class":1517,"line":4101},33,[4103,4107,4112,4116,4121,4125,4129,4134],{"type":42,"tag":1515,"props":4104,"children":4105},{"style":3208},[4106],{"type":48,"value":3312},{"type":42,"tag":1515,"props":4108,"children":4109},{"style":3214},[4110],{"type":48,"value":4111}," eventData",{"type":42,"tag":1515,"props":4113,"children":4114},{"style":3220},[4115],{"type":48,"value":3270},{"type":42,"tag":1515,"props":4117,"children":4118},{"style":3214},[4119],{"type":48,"value":4120}," event",{"type":42,"tag":1515,"props":4122,"children":4123},{"style":3220},[4124],{"type":48,"value":320},{"type":42,"tag":1515,"props":4126,"children":4127},{"style":3214},[4128],{"type":48,"value":3714},{"type":42,"tag":1515,"props":4130,"children":4131},{"style":3220},[4132],{"type":48,"value":4133},";",{"type":42,"tag":1515,"props":4135,"children":4136},{"style":1522},[4137],{"type":48,"value":4138}," \u002F\u002F event payload\n",{"type":42,"tag":1515,"props":4140,"children":4142},{"class":1517,"line":4141},34,[4143,4148,4152,4157,4161,4165],{"type":42,"tag":1515,"props":4144,"children":4145},{"style":3214},[4146],{"type":48,"value":4147},"  context",{"type":42,"tag":1515,"props":4149,"children":4150},{"style":3220},[4151],{"type":48,"value":320},{"type":42,"tag":1515,"props":4153,"children":4154},{"style":3226},[4155],{"type":48,"value":4156},"close",{"type":42,"tag":1515,"props":4158,"children":4159},{"style":3338},[4160],{"type":48,"value":3387},{"type":42,"tag":1515,"props":4162,"children":4163},{"style":3220},[4164],{"type":48,"value":4133},{"type":42,"tag":1515,"props":4166,"children":4167},{"style":1522},[4168],{"type":48,"value":4169}," \u002F\u002F must close context when done\n",{"type":42,"tag":1515,"props":4171,"children":4173},{"class":1517,"line":4172},35,[4174],{"type":42,"tag":1515,"props":4175,"children":4176},{"style":3220},[4177],{"type":48,"value":3444},{"type":42,"tag":1515,"props":4179,"children":4181},{"class":1517,"line":4180},36,[4182],{"type":42,"tag":1515,"props":4183,"children":4184},{"emptyLinePlaceholder":1548},[4185],{"type":48,"value":1551},{"type":42,"tag":1515,"props":4187,"children":4189},{"class":1517,"line":4188},37,[4190],{"type":42,"tag":1515,"props":4191,"children":4192},{"style":1522},[4193],{"type":48,"value":4194},"\u002F\u002F Cron — DEPRECATED, use Job Scheduling\n",{"type":42,"tag":1515,"props":4196,"children":4198},{"class":1517,"line":4197},38,[4199,4203,4207,4211,4215,4219,4223,4227,4231,4235],{"type":42,"tag":1515,"props":4200,"children":4201},{"style":3208},[4202],{"type":48,"value":3211},{"type":42,"tag":1515,"props":4204,"children":4205},{"style":3214},[4206],{"type":48,"value":3217},{"type":42,"tag":1515,"props":4208,"children":4209},{"style":3220},[4210],{"type":48,"value":3223},{"type":42,"tag":1515,"props":4212,"children":4213},{"style":3226},[4214],{"type":48,"value":3229},{"type":42,"tag":1515,"props":4216,"children":4217},{"style":3214},[4218],{"type":48,"value":3234},{"type":42,"tag":1515,"props":4220,"children":4221},{"style":3220},[4222],{"type":48,"value":3239},{"type":42,"tag":1515,"props":4224,"children":4225},{"style":1538},[4226],{"type":48,"value":3244},{"type":42,"tag":1515,"props":4228,"children":4229},{"style":3220},[4230],{"type":48,"value":3239},{"type":42,"tag":1515,"props":4232,"children":4233},{"style":3214},[4234],{"type":48,"value":1072},{"type":42,"tag":1515,"props":4236,"children":4237},{"style":3220},[4238],{"type":48,"value":3257},{"type":42,"tag":1515,"props":4240,"children":4242},{"class":1517,"line":4241},39,[4243,4247,4251,4255,4260,4264,4268,4272,4276],{"type":42,"tag":1515,"props":4244,"children":4245},{"style":3220},[4246],{"type":48,"value":3265},{"type":42,"tag":1515,"props":4248,"children":4249},{"style":3220},[4250],{"type":48,"value":3270},{"type":42,"tag":1515,"props":4252,"children":4253},{"style":3220},[4254],{"type":48,"value":3275},{"type":42,"tag":1515,"props":4256,"children":4257},{"style":3278},[4258],{"type":48,"value":4259},"cronDetails",{"type":42,"tag":1515,"props":4261,"children":4262},{"style":3220},[4263],{"type":48,"value":3285},{"type":42,"tag":1515,"props":4265,"children":4266},{"style":3278},[4267],{"type":48,"value":3373},{"type":42,"tag":1515,"props":4269,"children":4270},{"style":3220},[4271],{"type":48,"value":1072},{"type":42,"tag":1515,"props":4273,"children":4274},{"style":3208},[4275],{"type":48,"value":3299},{"type":42,"tag":1515,"props":4277,"children":4278},{"style":3220},[4279],{"type":48,"value":3304},{"type":42,"tag":1515,"props":4281,"children":4283},{"class":1517,"line":4282},40,[4284,4288,4292,4296,4300,4304,4308,4312,4316,4320],{"type":42,"tag":1515,"props":4285,"children":4286},{"style":3208},[4287],{"type":48,"value":3312},{"type":42,"tag":1515,"props":4289,"children":4290},{"style":3214},[4291],{"type":48,"value":3317},{"type":42,"tag":1515,"props":4293,"children":4294},{"style":3220},[4295],{"type":48,"value":3270},{"type":42,"tag":1515,"props":4297,"children":4298},{"style":3214},[4299],{"type":48,"value":3326},{"type":42,"tag":1515,"props":4301,"children":4302},{"style":3220},[4303],{"type":48,"value":320},{"type":42,"tag":1515,"props":4305,"children":4306},{"style":3226},[4307],{"type":48,"value":3335},{"type":42,"tag":1515,"props":4309,"children":4310},{"style":3338},[4311],{"type":48,"value":3234},{"type":42,"tag":1515,"props":4313,"children":4314},{"style":3214},[4315],{"type":48,"value":3168},{"type":42,"tag":1515,"props":4317,"children":4318},{"style":3338},[4319],{"type":48,"value":1072},{"type":42,"tag":1515,"props":4321,"children":4322},{"style":3220},[4323],{"type":48,"value":3257},{"type":42,"tag":1515,"props":4325,"children":4327},{"class":1517,"line":4326},41,[4328,4332,4336,4341,4345,4349],{"type":42,"tag":1515,"props":4329,"children":4330},{"style":3214},[4331],{"type":48,"value":4147},{"type":42,"tag":1515,"props":4333,"children":4334},{"style":3220},[4335],{"type":48,"value":320},{"type":42,"tag":1515,"props":4337,"children":4338},{"style":3226},[4339],{"type":48,"value":4340},"closeWithSuccess",{"type":42,"tag":1515,"props":4342,"children":4343},{"style":3338},[4344],{"type":48,"value":3387},{"type":42,"tag":1515,"props":4346,"children":4347},{"style":3220},[4348],{"type":48,"value":4133},{"type":42,"tag":1515,"props":4350,"children":4351},{"style":1522},[4352],{"type":48,"value":4353}," \u002F\u002F or context.closeWithFailure()\n",{"type":42,"tag":1515,"props":4355,"children":4357},{"class":1517,"line":4356},42,[4358],{"type":42,"tag":1515,"props":4359,"children":4360},{"style":3220},[4361],{"type":48,"value":3444},{"type":42,"tag":1515,"props":4363,"children":4365},{"class":1517,"line":4364},43,[4366],{"type":42,"tag":1515,"props":4367,"children":4368},{"emptyLinePlaceholder":1548},[4369],{"type":48,"value":1551},{"type":42,"tag":1515,"props":4371,"children":4373},{"class":1517,"line":4372},44,[4374],{"type":42,"tag":1515,"props":4375,"children":4376},{"style":1522},[4377],{"type":48,"value":4378},"\u002F\u002F Job — triggered by Job Scheduling\n",{"type":42,"tag":1515,"props":4380,"children":4382},{"class":1517,"line":4381},45,[4383,4387,4391,4395,4399,4403,4407,4411,4415,4419],{"type":42,"tag":1515,"props":4384,"children":4385},{"style":3208},[4386],{"type":48,"value":3211},{"type":42,"tag":1515,"props":4388,"children":4389},{"style":3214},[4390],{"type":48,"value":3217},{"type":42,"tag":1515,"props":4392,"children":4393},{"style":3220},[4394],{"type":48,"value":3223},{"type":42,"tag":1515,"props":4396,"children":4397},{"style":3226},[4398],{"type":48,"value":3229},{"type":42,"tag":1515,"props":4400,"children":4401},{"style":3214},[4402],{"type":48,"value":3234},{"type":42,"tag":1515,"props":4404,"children":4405},{"style":3220},[4406],{"type":48,"value":3239},{"type":42,"tag":1515,"props":4408,"children":4409},{"style":1538},[4410],{"type":48,"value":3244},{"type":42,"tag":1515,"props":4412,"children":4413},{"style":3220},[4414],{"type":48,"value":3239},{"type":42,"tag":1515,"props":4416,"children":4417},{"style":3214},[4418],{"type":48,"value":1072},{"type":42,"tag":1515,"props":4420,"children":4421},{"style":3220},[4422],{"type":48,"value":3257},{"type":42,"tag":1515,"props":4424,"children":4426},{"class":1517,"line":4425},46,[4427,4431,4435,4439,4443,4448,4452,4456,4460,4464],{"type":42,"tag":1515,"props":4428,"children":4429},{"style":3220},[4430],{"type":48,"value":3265},{"type":42,"tag":1515,"props":4432,"children":4433},{"style":3220},[4434],{"type":48,"value":3270},{"type":42,"tag":1515,"props":4436,"children":4437},{"style":3208},[4438],{"type":48,"value":3757},{"type":42,"tag":1515,"props":4440,"children":4441},{"style":3220},[4442],{"type":48,"value":3275},{"type":42,"tag":1515,"props":4444,"children":4445},{"style":3278},[4446],{"type":48,"value":4447},"jobData",{"type":42,"tag":1515,"props":4449,"children":4450},{"style":3220},[4451],{"type":48,"value":3285},{"type":42,"tag":1515,"props":4453,"children":4454},{"style":3278},[4455],{"type":48,"value":3373},{"type":42,"tag":1515,"props":4457,"children":4458},{"style":3220},[4459],{"type":48,"value":1072},{"type":42,"tag":1515,"props":4461,"children":4462},{"style":3208},[4463],{"type":48,"value":3299},{"type":42,"tag":1515,"props":4465,"children":4466},{"style":3220},[4467],{"type":48,"value":3304},{"type":42,"tag":1515,"props":4469,"children":4471},{"class":1517,"line":4470},47,[4472,4476,4480,4484,4488,4492,4496,4500,4504,4508],{"type":42,"tag":1515,"props":4473,"children":4474},{"style":3208},[4475],{"type":48,"value":3312},{"type":42,"tag":1515,"props":4477,"children":4478},{"style":3214},[4479],{"type":48,"value":3317},{"type":42,"tag":1515,"props":4481,"children":4482},{"style":3220},[4483],{"type":48,"value":3270},{"type":42,"tag":1515,"props":4485,"children":4486},{"style":3214},[4487],{"type":48,"value":3326},{"type":42,"tag":1515,"props":4489,"children":4490},{"style":3220},[4491],{"type":48,"value":320},{"type":42,"tag":1515,"props":4493,"children":4494},{"style":3226},[4495],{"type":48,"value":3335},{"type":42,"tag":1515,"props":4497,"children":4498},{"style":3338},[4499],{"type":48,"value":3234},{"type":42,"tag":1515,"props":4501,"children":4502},{"style":3214},[4503],{"type":48,"value":3168},{"type":42,"tag":1515,"props":4505,"children":4506},{"style":3338},[4507],{"type":48,"value":1072},{"type":42,"tag":1515,"props":4509,"children":4510},{"style":3220},[4511],{"type":48,"value":3257},{"type":42,"tag":1515,"props":4513,"children":4515},{"class":1517,"line":4514},48,[4516,4520,4524,4528,4532,4536],{"type":42,"tag":1515,"props":4517,"children":4518},{"style":3214},[4519],{"type":48,"value":4147},{"type":42,"tag":1515,"props":4521,"children":4522},{"style":3220},[4523],{"type":48,"value":320},{"type":42,"tag":1515,"props":4525,"children":4526},{"style":3226},[4527],{"type":48,"value":4340},{"type":42,"tag":1515,"props":4529,"children":4530},{"style":3338},[4531],{"type":48,"value":3387},{"type":42,"tag":1515,"props":4533,"children":4534},{"style":3220},[4535],{"type":48,"value":4133},{"type":42,"tag":1515,"props":4537,"children":4538},{"style":1522},[4539],{"type":48,"value":4353},{"type":42,"tag":1515,"props":4541,"children":4543},{"class":1517,"line":4542},49,[4544],{"type":42,"tag":1515,"props":4545,"children":4546},{"style":3220},[4547],{"type":48,"value":3444},{"type":42,"tag":1515,"props":4549,"children":4551},{"class":1517,"line":4550},50,[4552],{"type":42,"tag":1515,"props":4553,"children":4554},{"emptyLinePlaceholder":1548},[4555],{"type":48,"value":1551},{"type":42,"tag":1515,"props":4557,"children":4559},{"class":1517,"line":4558},51,[4560],{"type":42,"tag":1515,"props":4561,"children":4562},{"style":1522},[4563],{"type":48,"value":4564},"\u002F\u002F Integration — Zoho service triggers (NOT available in EU, AU, IN, CA DCs)\n",{"type":42,"tag":1515,"props":4566,"children":4568},{"class":1517,"line":4567},52,[4569,4573,4577,4581,4585,4589,4593,4597,4601,4605],{"type":42,"tag":1515,"props":4570,"children":4571},{"style":3208},[4572],{"type":48,"value":3211},{"type":42,"tag":1515,"props":4574,"children":4575},{"style":3214},[4576],{"type":48,"value":3217},{"type":42,"tag":1515,"props":4578,"children":4579},{"style":3220},[4580],{"type":48,"value":3223},{"type":42,"tag":1515,"props":4582,"children":4583},{"style":3226},[4584],{"type":48,"value":3229},{"type":42,"tag":1515,"props":4586,"children":4587},{"style":3214},[4588],{"type":48,"value":3234},{"type":42,"tag":1515,"props":4590,"children":4591},{"style":3220},[4592],{"type":48,"value":3239},{"type":42,"tag":1515,"props":4594,"children":4595},{"style":1538},[4596],{"type":48,"value":3244},{"type":42,"tag":1515,"props":4598,"children":4599},{"style":3220},[4600],{"type":48,"value":3239},{"type":42,"tag":1515,"props":4602,"children":4603},{"style":3214},[4604],{"type":48,"value":1072},{"type":42,"tag":1515,"props":4606,"children":4607},{"style":3220},[4608],{"type":48,"value":3257},{"type":42,"tag":1515,"props":4610,"children":4612},{"class":1517,"line":4611},53,[4613,4617,4621,4625,4629,4633,4637,4641,4645],{"type":42,"tag":1515,"props":4614,"children":4615},{"style":3220},[4616],{"type":48,"value":3265},{"type":42,"tag":1515,"props":4618,"children":4619},{"style":3220},[4620],{"type":48,"value":3270},{"type":42,"tag":1515,"props":4622,"children":4623},{"style":3220},[4624],{"type":48,"value":3275},{"type":42,"tag":1515,"props":4626,"children":4627},{"style":3278},[4628],{"type":48,"value":4034},{"type":42,"tag":1515,"props":4630,"children":4631},{"style":3220},[4632],{"type":48,"value":3285},{"type":42,"tag":1515,"props":4634,"children":4635},{"style":3278},[4636],{"type":48,"value":3373},{"type":42,"tag":1515,"props":4638,"children":4639},{"style":3220},[4640],{"type":48,"value":1072},{"type":42,"tag":1515,"props":4642,"children":4643},{"style":3208},[4644],{"type":48,"value":3299},{"type":42,"tag":1515,"props":4646,"children":4647},{"style":3220},[4648],{"type":48,"value":3304},{"type":42,"tag":1515,"props":4650,"children":4652},{"class":1517,"line":4651},54,[4653,4657,4661,4665,4669,4673,4677,4681,4685,4689],{"type":42,"tag":1515,"props":4654,"children":4655},{"style":3208},[4656],{"type":48,"value":3312},{"type":42,"tag":1515,"props":4658,"children":4659},{"style":3214},[4660],{"type":48,"value":3317},{"type":42,"tag":1515,"props":4662,"children":4663},{"style":3220},[4664],{"type":48,"value":3270},{"type":42,"tag":1515,"props":4666,"children":4667},{"style":3214},[4668],{"type":48,"value":3326},{"type":42,"tag":1515,"props":4670,"children":4671},{"style":3220},[4672],{"type":48,"value":320},{"type":42,"tag":1515,"props":4674,"children":4675},{"style":3226},[4676],{"type":48,"value":3335},{"type":42,"tag":1515,"props":4678,"children":4679},{"style":3338},[4680],{"type":48,"value":3234},{"type":42,"tag":1515,"props":4682,"children":4683},{"style":3214},[4684],{"type":48,"value":3168},{"type":42,"tag":1515,"props":4686,"children":4687},{"style":3338},[4688],{"type":48,"value":1072},{"type":42,"tag":1515,"props":4690,"children":4691},{"style":3220},[4692],{"type":48,"value":3257},{"type":42,"tag":1515,"props":4694,"children":4696},{"class":1517,"line":4695},55,[4697,4701,4705,4709,4713],{"type":42,"tag":1515,"props":4698,"children":4699},{"style":3214},[4700],{"type":48,"value":4147},{"type":42,"tag":1515,"props":4702,"children":4703},{"style":3220},[4704],{"type":48,"value":320},{"type":42,"tag":1515,"props":4706,"children":4707},{"style":3226},[4708],{"type":48,"value":4156},{"type":42,"tag":1515,"props":4710,"children":4711},{"style":3338},[4712],{"type":48,"value":3387},{"type":42,"tag":1515,"props":4714,"children":4715},{"style":3220},[4716],{"type":48,"value":3257},{"type":42,"tag":1515,"props":4718,"children":4720},{"class":1517,"line":4719},56,[4721],{"type":42,"tag":1515,"props":4722,"children":4723},{"style":3220},[4724],{"type":48,"value":3444},{"type":42,"tag":1515,"props":4726,"children":4728},{"class":1517,"line":4727},57,[4729],{"type":42,"tag":1515,"props":4730,"children":4731},{"emptyLinePlaceholder":1548},[4732],{"type":48,"value":1551},{"type":42,"tag":1515,"props":4734,"children":4736},{"class":1517,"line":4735},58,[4737],{"type":42,"tag":1515,"props":4738,"children":4739},{"style":1522},[4740],{"type":48,"value":4741},"\u002F\u002F Browser Logic — used with SmartBrowz\n",{"type":42,"tag":1515,"props":4743,"children":4745},{"class":1517,"line":4744},59,[4746,4750,4754,4758,4762,4766,4770,4774,4778,4782],{"type":42,"tag":1515,"props":4747,"children":4748},{"style":3208},[4749],{"type":48,"value":3211},{"type":42,"tag":1515,"props":4751,"children":4752},{"style":3214},[4753],{"type":48,"value":3217},{"type":42,"tag":1515,"props":4755,"children":4756},{"style":3220},[4757],{"type":48,"value":3223},{"type":42,"tag":1515,"props":4759,"children":4760},{"style":3226},[4761],{"type":48,"value":3229},{"type":42,"tag":1515,"props":4763,"children":4764},{"style":3214},[4765],{"type":48,"value":3234},{"type":42,"tag":1515,"props":4767,"children":4768},{"style":3220},[4769],{"type":48,"value":3239},{"type":42,"tag":1515,"props":4771,"children":4772},{"style":1538},[4773],{"type":48,"value":3244},{"type":42,"tag":1515,"props":4775,"children":4776},{"style":3220},[4777],{"type":48,"value":3239},{"type":42,"tag":1515,"props":4779,"children":4780},{"style":3214},[4781],{"type":48,"value":1072},{"type":42,"tag":1515,"props":4783,"children":4784},{"style":3220},[4785],{"type":48,"value":3257},{"type":42,"tag":1515,"props":4787,"children":4789},{"class":1517,"line":4788},60,[4790,4794,4798,4802,4806,4810,4814,4818,4822],{"type":42,"tag":1515,"props":4791,"children":4792},{"style":3220},[4793],{"type":48,"value":3265},{"type":42,"tag":1515,"props":4795,"children":4796},{"style":3220},[4797],{"type":48,"value":3270},{"type":42,"tag":1515,"props":4799,"children":4800},{"style":3220},[4801],{"type":48,"value":3275},{"type":42,"tag":1515,"props":4803,"children":4804},{"style":3278},[4805],{"type":48,"value":4034},{"type":42,"tag":1515,"props":4807,"children":4808},{"style":3220},[4809],{"type":48,"value":3285},{"type":42,"tag":1515,"props":4811,"children":4812},{"style":3278},[4813],{"type":48,"value":3373},{"type":42,"tag":1515,"props":4815,"children":4816},{"style":3220},[4817],{"type":48,"value":1072},{"type":42,"tag":1515,"props":4819,"children":4820},{"style":3208},[4821],{"type":48,"value":3299},{"type":42,"tag":1515,"props":4823,"children":4824},{"style":3220},[4825],{"type":48,"value":3304},{"type":42,"tag":1515,"props":4827,"children":4829},{"class":1517,"line":4828},61,[4830,4834,4838,4842,4846,4850,4854,4858,4862,4866],{"type":42,"tag":1515,"props":4831,"children":4832},{"style":3208},[4833],{"type":48,"value":3312},{"type":42,"tag":1515,"props":4835,"children":4836},{"style":3214},[4837],{"type":48,"value":3317},{"type":42,"tag":1515,"props":4839,"children":4840},{"style":3220},[4841],{"type":48,"value":3270},{"type":42,"tag":1515,"props":4843,"children":4844},{"style":3214},[4845],{"type":48,"value":3326},{"type":42,"tag":1515,"props":4847,"children":4848},{"style":3220},[4849],{"type":48,"value":320},{"type":42,"tag":1515,"props":4851,"children":4852},{"style":3226},[4853],{"type":48,"value":3335},{"type":42,"tag":1515,"props":4855,"children":4856},{"style":3338},[4857],{"type":48,"value":3234},{"type":42,"tag":1515,"props":4859,"children":4860},{"style":3214},[4861],{"type":48,"value":3168},{"type":42,"tag":1515,"props":4863,"children":4864},{"style":3338},[4865],{"type":48,"value":1072},{"type":42,"tag":1515,"props":4867,"children":4868},{"style":3220},[4869],{"type":48,"value":3257},{"type":42,"tag":1515,"props":4871,"children":4873},{"class":1517,"line":4872},62,[4874,4878,4882,4886,4890],{"type":42,"tag":1515,"props":4875,"children":4876},{"style":3214},[4877],{"type":48,"value":4147},{"type":42,"tag":1515,"props":4879,"children":4880},{"style":3220},[4881],{"type":48,"value":320},{"type":42,"tag":1515,"props":4883,"children":4884},{"style":3226},[4885],{"type":48,"value":4156},{"type":42,"tag":1515,"props":4887,"children":4888},{"style":3338},[4889],{"type":48,"value":3387},{"type":42,"tag":1515,"props":4891,"children":4892},{"style":3220},[4893],{"type":48,"value":3257},{"type":42,"tag":1515,"props":4895,"children":4897},{"class":1517,"line":4896},63,[4898],{"type":42,"tag":1515,"props":4899,"children":4900},{"style":3220},[4901],{"type":48,"value":3444},{"type":42,"tag":239,"props":4903,"children":4905},{"id":4904},"quick-reference-sdk-component-access-nodejs",[4906],{"type":48,"value":4907},"Quick reference: SDK component access (Node.js)",{"type":42,"tag":1504,"props":4909,"children":4911},{"className":3188,"code":4910,"language":3190,"meta":1509,"style":1509},"\u002F\u002F Inside a function handler — in new projects, initialize via catalyst.initialize(req)\nconst dataStore = catalystApp.datastore();     \u002F\u002F Relational DB\nconst zcql      = catalystApp.zcql();          \u002F\u002F Query language\nconst stratus   = catalystApp.stratus();       \u002F\u002F Object storage (S3-compatible)\nconst nosql     = catalystApp.nosql();         \u002F\u002F Document DB\nconst cache     = catalystApp.cache();         \u002F\u002F In-memory cache\nconst search    = catalystApp.search();        \u002F\u002F Full-text search\nconst mail      = catalystApp.email();         \u002F\u002F Email sending\nconst userMgmt  = catalystApp.userManagement();\u002F\u002F Auth & users\nconst connection= catalystApp.connection();    \u002F\u002F OAuth token manager\nconst circuit   = catalystApp.circuit();       \u002F\u002F Workflow orchestration\nconst jobSched  = catalystApp.jobScheduling(); \u002F\u002F Background jobs\nconst zia       = catalystApp.zia();           \u002F\u002F AI\u002FML services\nconst pushNotif = catalystApp.pushNotification();\n",[4912],{"type":42,"tag":61,"props":4913,"children":4914},{"__ignoreMap":1509},[4915,4923,4965,5007,5049,5091,5133,5175,5217,5259,5301,5343,5385,5427],{"type":42,"tag":1515,"props":4916,"children":4917},{"class":1517,"line":1518},[4918],{"type":42,"tag":1515,"props":4919,"children":4920},{"style":1522},[4921],{"type":48,"value":4922},"\u002F\u002F Inside a function handler — in new projects, initialize via catalyst.initialize(req)\n",{"type":42,"tag":1515,"props":4924,"children":4925},{"class":1517,"line":1528},[4926,4930,4935,4939,4943,4947,4952,4956,4960],{"type":42,"tag":1515,"props":4927,"children":4928},{"style":3208},[4929],{"type":48,"value":3211},{"type":42,"tag":1515,"props":4931,"children":4932},{"style":3214},[4933],{"type":48,"value":4934}," dataStore ",{"type":42,"tag":1515,"props":4936,"children":4937},{"style":3220},[4938],{"type":48,"value":3223},{"type":42,"tag":1515,"props":4940,"children":4941},{"style":3214},[4942],{"type":48,"value":3317},{"type":42,"tag":1515,"props":4944,"children":4945},{"style":3220},[4946],{"type":48,"value":320},{"type":42,"tag":1515,"props":4948,"children":4949},{"style":3226},[4950],{"type":48,"value":4951},"datastore",{"type":42,"tag":1515,"props":4953,"children":4954},{"style":3214},[4955],{"type":48,"value":3387},{"type":42,"tag":1515,"props":4957,"children":4958},{"style":3220},[4959],{"type":48,"value":4133},{"type":42,"tag":1515,"props":4961,"children":4962},{"style":1522},[4963],{"type":48,"value":4964},"     \u002F\u002F Relational DB\n",{"type":42,"tag":1515,"props":4966,"children":4967},{"class":1517,"line":1544},[4968,4972,4977,4981,4985,4989,4994,4998,5002],{"type":42,"tag":1515,"props":4969,"children":4970},{"style":3208},[4971],{"type":48,"value":3211},{"type":42,"tag":1515,"props":4973,"children":4974},{"style":3214},[4975],{"type":48,"value":4976}," zcql      ",{"type":42,"tag":1515,"props":4978,"children":4979},{"style":3220},[4980],{"type":48,"value":3223},{"type":42,"tag":1515,"props":4982,"children":4983},{"style":3214},[4984],{"type":48,"value":3317},{"type":42,"tag":1515,"props":4986,"children":4987},{"style":3220},[4988],{"type":48,"value":320},{"type":42,"tag":1515,"props":4990,"children":4991},{"style":3226},[4992],{"type":48,"value":4993},"zcql",{"type":42,"tag":1515,"props":4995,"children":4996},{"style":3214},[4997],{"type":48,"value":3387},{"type":42,"tag":1515,"props":4999,"children":5000},{"style":3220},[5001],{"type":48,"value":4133},{"type":42,"tag":1515,"props":5003,"children":5004},{"style":1522},[5005],{"type":48,"value":5006},"          \u002F\u002F Query language\n",{"type":42,"tag":1515,"props":5008,"children":5009},{"class":1517,"line":1554},[5010,5014,5019,5023,5027,5031,5036,5040,5044],{"type":42,"tag":1515,"props":5011,"children":5012},{"style":3208},[5013],{"type":48,"value":3211},{"type":42,"tag":1515,"props":5015,"children":5016},{"style":3214},[5017],{"type":48,"value":5018}," stratus   ",{"type":42,"tag":1515,"props":5020,"children":5021},{"style":3220},[5022],{"type":48,"value":3223},{"type":42,"tag":1515,"props":5024,"children":5025},{"style":3214},[5026],{"type":48,"value":3317},{"type":42,"tag":1515,"props":5028,"children":5029},{"style":3220},[5030],{"type":48,"value":320},{"type":42,"tag":1515,"props":5032,"children":5033},{"style":3226},[5034],{"type":48,"value":5035},"stratus",{"type":42,"tag":1515,"props":5037,"children":5038},{"style":3214},[5039],{"type":48,"value":3387},{"type":42,"tag":1515,"props":5041,"children":5042},{"style":3220},[5043],{"type":48,"value":4133},{"type":42,"tag":1515,"props":5045,"children":5046},{"style":1522},[5047],{"type":48,"value":5048},"       \u002F\u002F Object storage (S3-compatible)\n",{"type":42,"tag":1515,"props":5050,"children":5051},{"class":1517,"line":1563},[5052,5056,5061,5065,5069,5073,5078,5082,5086],{"type":42,"tag":1515,"props":5053,"children":5054},{"style":3208},[5055],{"type":48,"value":3211},{"type":42,"tag":1515,"props":5057,"children":5058},{"style":3214},[5059],{"type":48,"value":5060}," nosql     ",{"type":42,"tag":1515,"props":5062,"children":5063},{"style":3220},[5064],{"type":48,"value":3223},{"type":42,"tag":1515,"props":5066,"children":5067},{"style":3214},[5068],{"type":48,"value":3317},{"type":42,"tag":1515,"props":5070,"children":5071},{"style":3220},[5072],{"type":48,"value":320},{"type":42,"tag":1515,"props":5074,"children":5075},{"style":3226},[5076],{"type":48,"value":5077},"nosql",{"type":42,"tag":1515,"props":5079,"children":5080},{"style":3214},[5081],{"type":48,"value":3387},{"type":42,"tag":1515,"props":5083,"children":5084},{"style":3220},[5085],{"type":48,"value":4133},{"type":42,"tag":1515,"props":5087,"children":5088},{"style":1522},[5089],{"type":48,"value":5090},"         \u002F\u002F Document DB\n",{"type":42,"tag":1515,"props":5092,"children":5093},{"class":1517,"line":3394},[5094,5098,5103,5107,5111,5115,5120,5124,5128],{"type":42,"tag":1515,"props":5095,"children":5096},{"style":3208},[5097],{"type":48,"value":3211},{"type":42,"tag":1515,"props":5099,"children":5100},{"style":3214},[5101],{"type":48,"value":5102}," cache     ",{"type":42,"tag":1515,"props":5104,"children":5105},{"style":3220},[5106],{"type":48,"value":3223},{"type":42,"tag":1515,"props":5108,"children":5109},{"style":3214},[5110],{"type":48,"value":3317},{"type":42,"tag":1515,"props":5112,"children":5113},{"style":3220},[5114],{"type":48,"value":320},{"type":42,"tag":1515,"props":5116,"children":5117},{"style":3226},[5118],{"type":48,"value":5119},"cache",{"type":42,"tag":1515,"props":5121,"children":5122},{"style":3214},[5123],{"type":48,"value":3387},{"type":42,"tag":1515,"props":5125,"children":5126},{"style":3220},[5127],{"type":48,"value":4133},{"type":42,"tag":1515,"props":5129,"children":5130},{"style":1522},[5131],{"type":48,"value":5132},"         \u002F\u002F In-memory cache\n",{"type":42,"tag":1515,"props":5134,"children":5135},{"class":1517,"line":3438},[5136,5140,5145,5149,5153,5157,5162,5166,5170],{"type":42,"tag":1515,"props":5137,"children":5138},{"style":3208},[5139],{"type":48,"value":3211},{"type":42,"tag":1515,"props":5141,"children":5142},{"style":3214},[5143],{"type":48,"value":5144}," search    ",{"type":42,"tag":1515,"props":5146,"children":5147},{"style":3220},[5148],{"type":48,"value":3223},{"type":42,"tag":1515,"props":5150,"children":5151},{"style":3214},[5152],{"type":48,"value":3317},{"type":42,"tag":1515,"props":5154,"children":5155},{"style":3220},[5156],{"type":48,"value":320},{"type":42,"tag":1515,"props":5158,"children":5159},{"style":3226},[5160],{"type":48,"value":5161},"search",{"type":42,"tag":1515,"props":5163,"children":5164},{"style":3214},[5165],{"type":48,"value":3387},{"type":42,"tag":1515,"props":5167,"children":5168},{"style":3220},[5169],{"type":48,"value":4133},{"type":42,"tag":1515,"props":5171,"children":5172},{"style":1522},[5173],{"type":48,"value":5174},"        \u002F\u002F Full-text search\n",{"type":42,"tag":1515,"props":5176,"children":5177},{"class":1517,"line":3447},[5178,5182,5187,5191,5195,5199,5204,5208,5212],{"type":42,"tag":1515,"props":5179,"children":5180},{"style":3208},[5181],{"type":48,"value":3211},{"type":42,"tag":1515,"props":5183,"children":5184},{"style":3214},[5185],{"type":48,"value":5186}," mail      ",{"type":42,"tag":1515,"props":5188,"children":5189},{"style":3220},[5190],{"type":48,"value":3223},{"type":42,"tag":1515,"props":5192,"children":5193},{"style":3214},[5194],{"type":48,"value":3317},{"type":42,"tag":1515,"props":5196,"children":5197},{"style":3220},[5198],{"type":48,"value":320},{"type":42,"tag":1515,"props":5200,"children":5201},{"style":3226},[5202],{"type":48,"value":5203},"email",{"type":42,"tag":1515,"props":5205,"children":5206},{"style":3214},[5207],{"type":48,"value":3387},{"type":42,"tag":1515,"props":5209,"children":5210},{"style":3220},[5211],{"type":48,"value":4133},{"type":42,"tag":1515,"props":5213,"children":5214},{"style":1522},[5215],{"type":48,"value":5216},"         \u002F\u002F Email sending\n",{"type":42,"tag":1515,"props":5218,"children":5219},{"class":1517,"line":3455},[5220,5224,5229,5233,5237,5241,5246,5250,5254],{"type":42,"tag":1515,"props":5221,"children":5222},{"style":3208},[5223],{"type":48,"value":3211},{"type":42,"tag":1515,"props":5225,"children":5226},{"style":3214},[5227],{"type":48,"value":5228}," userMgmt  ",{"type":42,"tag":1515,"props":5230,"children":5231},{"style":3220},[5232],{"type":48,"value":3223},{"type":42,"tag":1515,"props":5234,"children":5235},{"style":3214},[5236],{"type":48,"value":3317},{"type":42,"tag":1515,"props":5238,"children":5239},{"style":3220},[5240],{"type":48,"value":320},{"type":42,"tag":1515,"props":5242,"children":5243},{"style":3226},[5244],{"type":48,"value":5245},"userManagement",{"type":42,"tag":1515,"props":5247,"children":5248},{"style":3214},[5249],{"type":48,"value":3387},{"type":42,"tag":1515,"props":5251,"children":5252},{"style":3220},[5253],{"type":48,"value":4133},{"type":42,"tag":1515,"props":5255,"children":5256},{"style":1522},[5257],{"type":48,"value":5258},"\u002F\u002F Auth & users\n",{"type":42,"tag":1515,"props":5260,"children":5261},{"class":1517,"line":3464},[5262,5266,5271,5275,5279,5283,5288,5292,5296],{"type":42,"tag":1515,"props":5263,"children":5264},{"style":3208},[5265],{"type":48,"value":3211},{"type":42,"tag":1515,"props":5267,"children":5268},{"style":3214},[5269],{"type":48,"value":5270}," connection",{"type":42,"tag":1515,"props":5272,"children":5273},{"style":3220},[5274],{"type":48,"value":3223},{"type":42,"tag":1515,"props":5276,"children":5277},{"style":3214},[5278],{"type":48,"value":3317},{"type":42,"tag":1515,"props":5280,"children":5281},{"style":3220},[5282],{"type":48,"value":320},{"type":42,"tag":1515,"props":5284,"children":5285},{"style":3226},[5286],{"type":48,"value":5287},"connection",{"type":42,"tag":1515,"props":5289,"children":5290},{"style":3214},[5291],{"type":48,"value":3387},{"type":42,"tag":1515,"props":5293,"children":5294},{"style":3220},[5295],{"type":48,"value":4133},{"type":42,"tag":1515,"props":5297,"children":5298},{"style":1522},[5299],{"type":48,"value":5300},"    \u002F\u002F OAuth token manager\n",{"type":42,"tag":1515,"props":5302,"children":5303},{"class":1517,"line":3473},[5304,5308,5313,5317,5321,5325,5330,5334,5338],{"type":42,"tag":1515,"props":5305,"children":5306},{"style":3208},[5307],{"type":48,"value":3211},{"type":42,"tag":1515,"props":5309,"children":5310},{"style":3214},[5311],{"type":48,"value":5312}," circuit   ",{"type":42,"tag":1515,"props":5314,"children":5315},{"style":3220},[5316],{"type":48,"value":3223},{"type":42,"tag":1515,"props":5318,"children":5319},{"style":3214},[5320],{"type":48,"value":3317},{"type":42,"tag":1515,"props":5322,"children":5323},{"style":3220},[5324],{"type":48,"value":320},{"type":42,"tag":1515,"props":5326,"children":5327},{"style":3226},[5328],{"type":48,"value":5329},"circuit",{"type":42,"tag":1515,"props":5331,"children":5332},{"style":3214},[5333],{"type":48,"value":3387},{"type":42,"tag":1515,"props":5335,"children":5336},{"style":3220},[5337],{"type":48,"value":4133},{"type":42,"tag":1515,"props":5339,"children":5340},{"style":1522},[5341],{"type":48,"value":5342},"       \u002F\u002F Workflow orchestration\n",{"type":42,"tag":1515,"props":5344,"children":5345},{"class":1517,"line":3494},[5346,5350,5355,5359,5363,5367,5372,5376,5380],{"type":42,"tag":1515,"props":5347,"children":5348},{"style":3208},[5349],{"type":48,"value":3211},{"type":42,"tag":1515,"props":5351,"children":5352},{"style":3214},[5353],{"type":48,"value":5354}," jobSched  ",{"type":42,"tag":1515,"props":5356,"children":5357},{"style":3220},[5358],{"type":48,"value":3223},{"type":42,"tag":1515,"props":5360,"children":5361},{"style":3214},[5362],{"type":48,"value":3317},{"type":42,"tag":1515,"props":5364,"children":5365},{"style":3220},[5366],{"type":48,"value":320},{"type":42,"tag":1515,"props":5368,"children":5369},{"style":3226},[5370],{"type":48,"value":5371},"jobScheduling",{"type":42,"tag":1515,"props":5373,"children":5374},{"style":3214},[5375],{"type":48,"value":3387},{"type":42,"tag":1515,"props":5377,"children":5378},{"style":3220},[5379],{"type":48,"value":4133},{"type":42,"tag":1515,"props":5381,"children":5382},{"style":1522},[5383],{"type":48,"value":5384}," \u002F\u002F Background jobs\n",{"type":42,"tag":1515,"props":5386,"children":5387},{"class":1517,"line":3538},[5388,5392,5397,5401,5405,5409,5414,5418,5422],{"type":42,"tag":1515,"props":5389,"children":5390},{"style":3208},[5391],{"type":48,"value":3211},{"type":42,"tag":1515,"props":5393,"children":5394},{"style":3214},[5395],{"type":48,"value":5396}," zia       ",{"type":42,"tag":1515,"props":5398,"children":5399},{"style":3220},[5400],{"type":48,"value":3223},{"type":42,"tag":1515,"props":5402,"children":5403},{"style":3214},[5404],{"type":48,"value":3317},{"type":42,"tag":1515,"props":5406,"children":5407},{"style":3220},[5408],{"type":48,"value":320},{"type":42,"tag":1515,"props":5410,"children":5411},{"style":3226},[5412],{"type":48,"value":5413},"zia",{"type":42,"tag":1515,"props":5415,"children":5416},{"style":3214},[5417],{"type":48,"value":3387},{"type":42,"tag":1515,"props":5419,"children":5420},{"style":3220},[5421],{"type":48,"value":4133},{"type":42,"tag":1515,"props":5423,"children":5424},{"style":1522},[5425],{"type":48,"value":5426},"           \u002F\u002F AI\u002FML services\n",{"type":42,"tag":1515,"props":5428,"children":5429},{"class":1517,"line":3546},[5430,5434,5439,5443,5447,5451,5456,5460],{"type":42,"tag":1515,"props":5431,"children":5432},{"style":3208},[5433],{"type":48,"value":3211},{"type":42,"tag":1515,"props":5435,"children":5436},{"style":3214},[5437],{"type":48,"value":5438}," pushNotif ",{"type":42,"tag":1515,"props":5440,"children":5441},{"style":3220},[5442],{"type":48,"value":3223},{"type":42,"tag":1515,"props":5444,"children":5445},{"style":3214},[5446],{"type":48,"value":3317},{"type":42,"tag":1515,"props":5448,"children":5449},{"style":3220},[5450],{"type":48,"value":320},{"type":42,"tag":1515,"props":5452,"children":5453},{"style":3226},[5454],{"type":48,"value":5455},"pushNotification",{"type":42,"tag":1515,"props":5457,"children":5458},{"style":3214},[5459],{"type":48,"value":3387},{"type":42,"tag":1515,"props":5461,"children":5462},{"style":3220},[5463],{"type":48,"value":3257},{"type":42,"tag":239,"props":5465,"children":5467},{"id":5466},"quick-reference-cli-commands",[5468],{"type":48,"value":5469},"Quick reference: CLI commands",{"type":42,"tag":1504,"props":5471,"children":5473},{"className":1506,"code":5472,"language":1508,"meta":1509,"style":1509},"npm install -g zcatalyst-cli          # Install CLI (requires Node.js v14+)\ncatalyst login                        # Login to Zoho account\ncatalyst init                         # Initialize project\ncatalyst functions:add                # Register a new function (INTERACTIVE — no flags, prompts for name\u002Ftype\u002Fstack)\ncatalyst serve                        # Local testing (all resources)\ncatalyst serve --only functions       # Local testing — functions only\ncatalyst deploy                       # Deploy all resources to Development\ncatalyst deploy --only functions      # Deploy functions only\ncatalyst deploy --only functions:crud_api  # Deploy a single named function\ncatalyst functions:shell              # Test functions in Node shell\ncatalyst apig:enable                  # Enable API Gateway for the project\ncatalyst apig:disable                 # Disable API Gateway\ncatalyst apig:status                  # Check API Gateway enable status and schedule progress\ncatalyst slate:create                 # Add an additional Slate app to a project (interactive — asks framework + name)\ncatalyst slate:link                   # Link existing local dir to Slate service (interactive)\ncatalyst slate:unlink                 # Unlink a Slate app\ncatalyst serve --only slate           # Serve Slate app locally\ncatalyst deploy slate                 # Deploy all Slate apps to Development\ncatalyst deploy slate -m \"message\"    # Deploy with a deployment message\ncatalyst deploy --only slate:appname  # Deploy a specific Slate app\ncatalyst deploy slate --production    # Deploy to Production environment\n",[5474],{"type":42,"tag":61,"props":5475,"children":5476},{"__ignoreMap":1509},[5477,5505,5522,5539,5556,5573,5599,5616,5640,5665,5682,5699,5716,5733,5750,5767,5784,5809,5829,5867,5892],{"type":42,"tag":1515,"props":5478,"children":5479},{"class":1517,"line":1518},[5480,5485,5490,5495,5500],{"type":42,"tag":1515,"props":5481,"children":5482},{"style":1532},[5483],{"type":48,"value":5484},"npm",{"type":42,"tag":1515,"props":5486,"children":5487},{"style":1538},[5488],{"type":48,"value":5489}," install",{"type":42,"tag":1515,"props":5491,"children":5492},{"style":1538},[5493],{"type":48,"value":5494}," -g",{"type":42,"tag":1515,"props":5496,"children":5497},{"style":1538},[5498],{"type":48,"value":5499}," zcatalyst-cli",{"type":42,"tag":1515,"props":5501,"children":5502},{"style":1522},[5503],{"type":48,"value":5504},"          # Install CLI (requires Node.js v14+)\n",{"type":42,"tag":1515,"props":5506,"children":5507},{"class":1517,"line":1528},[5508,5512,5517],{"type":42,"tag":1515,"props":5509,"children":5510},{"style":1532},[5511],{"type":48,"value":1535},{"type":42,"tag":1515,"props":5513,"children":5514},{"style":1538},[5515],{"type":48,"value":5516}," login",{"type":42,"tag":1515,"props":5518,"children":5519},{"style":1522},[5520],{"type":48,"value":5521},"                        # Login to Zoho account\n",{"type":42,"tag":1515,"props":5523,"children":5524},{"class":1517,"line":1544},[5525,5529,5534],{"type":42,"tag":1515,"props":5526,"children":5527},{"style":1532},[5528],{"type":48,"value":1535},{"type":42,"tag":1515,"props":5530,"children":5531},{"style":1538},[5532],{"type":48,"value":5533}," init",{"type":42,"tag":1515,"props":5535,"children":5536},{"style":1522},[5537],{"type":48,"value":5538},"                         # Initialize project\n",{"type":42,"tag":1515,"props":5540,"children":5541},{"class":1517,"line":1554},[5542,5546,5551],{"type":42,"tag":1515,"props":5543,"children":5544},{"style":1532},[5545],{"type":48,"value":1535},{"type":42,"tag":1515,"props":5547,"children":5548},{"style":1538},[5549],{"type":48,"value":5550}," functions:add",{"type":42,"tag":1515,"props":5552,"children":5553},{"style":1522},[5554],{"type":48,"value":5555},"                # Register a new function (INTERACTIVE — no flags, prompts for name\u002Ftype\u002Fstack)\n",{"type":42,"tag":1515,"props":5557,"children":5558},{"class":1517,"line":1563},[5559,5563,5568],{"type":42,"tag":1515,"props":5560,"children":5561},{"style":1532},[5562],{"type":48,"value":1535},{"type":42,"tag":1515,"props":5564,"children":5565},{"style":1538},[5566],{"type":48,"value":5567}," serve",{"type":42,"tag":1515,"props":5569,"children":5570},{"style":1522},[5571],{"type":48,"value":5572},"                        # Local testing (all resources)\n",{"type":42,"tag":1515,"props":5574,"children":5575},{"class":1517,"line":3394},[5576,5580,5584,5589,5594],{"type":42,"tag":1515,"props":5577,"children":5578},{"style":1532},[5579],{"type":48,"value":1535},{"type":42,"tag":1515,"props":5581,"children":5582},{"style":1538},[5583],{"type":48,"value":5567},{"type":42,"tag":1515,"props":5585,"children":5586},{"style":1538},[5587],{"type":48,"value":5588}," --only",{"type":42,"tag":1515,"props":5590,"children":5591},{"style":1538},[5592],{"type":48,"value":5593}," functions",{"type":42,"tag":1515,"props":5595,"children":5596},{"style":1522},[5597],{"type":48,"value":5598},"       # Local testing — functions only\n",{"type":42,"tag":1515,"props":5600,"children":5601},{"class":1517,"line":3438},[5602,5606,5611],{"type":42,"tag":1515,"props":5603,"children":5604},{"style":1532},[5605],{"type":48,"value":1535},{"type":42,"tag":1515,"props":5607,"children":5608},{"style":1538},[5609],{"type":48,"value":5610}," deploy",{"type":42,"tag":1515,"props":5612,"children":5613},{"style":1522},[5614],{"type":48,"value":5615},"                       # Deploy all resources to Development\n",{"type":42,"tag":1515,"props":5617,"children":5618},{"class":1517,"line":3447},[5619,5623,5627,5631,5635],{"type":42,"tag":1515,"props":5620,"children":5621},{"style":1532},[5622],{"type":48,"value":1535},{"type":42,"tag":1515,"props":5624,"children":5625},{"style":1538},[5626],{"type":48,"value":5610},{"type":42,"tag":1515,"props":5628,"children":5629},{"style":1538},[5630],{"type":48,"value":5588},{"type":42,"tag":1515,"props":5632,"children":5633},{"style":1538},[5634],{"type":48,"value":5593},{"type":42,"tag":1515,"props":5636,"children":5637},{"style":1522},[5638],{"type":48,"value":5639},"      # Deploy functions only\n",{"type":42,"tag":1515,"props":5641,"children":5642},{"class":1517,"line":3455},[5643,5647,5651,5655,5660],{"type":42,"tag":1515,"props":5644,"children":5645},{"style":1532},[5646],{"type":48,"value":1535},{"type":42,"tag":1515,"props":5648,"children":5649},{"style":1538},[5650],{"type":48,"value":5610},{"type":42,"tag":1515,"props":5652,"children":5653},{"style":1538},[5654],{"type":48,"value":5588},{"type":42,"tag":1515,"props":5656,"children":5657},{"style":1538},[5658],{"type":48,"value":5659}," functions:crud_api",{"type":42,"tag":1515,"props":5661,"children":5662},{"style":1522},[5663],{"type":48,"value":5664},"  # Deploy a single named function\n",{"type":42,"tag":1515,"props":5666,"children":5667},{"class":1517,"line":3464},[5668,5672,5677],{"type":42,"tag":1515,"props":5669,"children":5670},{"style":1532},[5671],{"type":48,"value":1535},{"type":42,"tag":1515,"props":5673,"children":5674},{"style":1538},[5675],{"type":48,"value":5676}," functions:shell",{"type":42,"tag":1515,"props":5678,"children":5679},{"style":1522},[5680],{"type":48,"value":5681},"              # Test functions in Node shell\n",{"type":42,"tag":1515,"props":5683,"children":5684},{"class":1517,"line":3473},[5685,5689,5694],{"type":42,"tag":1515,"props":5686,"children":5687},{"style":1532},[5688],{"type":48,"value":1535},{"type":42,"tag":1515,"props":5690,"children":5691},{"style":1538},[5692],{"type":48,"value":5693}," apig:enable",{"type":42,"tag":1515,"props":5695,"children":5696},{"style":1522},[5697],{"type":48,"value":5698},"                  # Enable API Gateway for the project\n",{"type":42,"tag":1515,"props":5700,"children":5701},{"class":1517,"line":3494},[5702,5706,5711],{"type":42,"tag":1515,"props":5703,"children":5704},{"style":1532},[5705],{"type":48,"value":1535},{"type":42,"tag":1515,"props":5707,"children":5708},{"style":1538},[5709],{"type":48,"value":5710}," apig:disable",{"type":42,"tag":1515,"props":5712,"children":5713},{"style":1522},[5714],{"type":48,"value":5715},"                 # Disable API Gateway\n",{"type":42,"tag":1515,"props":5717,"children":5718},{"class":1517,"line":3538},[5719,5723,5728],{"type":42,"tag":1515,"props":5720,"children":5721},{"style":1532},[5722],{"type":48,"value":1535},{"type":42,"tag":1515,"props":5724,"children":5725},{"style":1538},[5726],{"type":48,"value":5727}," apig:status",{"type":42,"tag":1515,"props":5729,"children":5730},{"style":1522},[5731],{"type":48,"value":5732},"                  # Check API Gateway enable status and schedule progress\n",{"type":42,"tag":1515,"props":5734,"children":5735},{"class":1517,"line":3546},[5736,5740,5745],{"type":42,"tag":1515,"props":5737,"children":5738},{"style":1532},[5739],{"type":48,"value":1535},{"type":42,"tag":1515,"props":5741,"children":5742},{"style":1538},[5743],{"type":48,"value":5744}," slate:create",{"type":42,"tag":1515,"props":5746,"children":5747},{"style":1522},[5748],{"type":48,"value":5749},"                 # Add an additional Slate app to a project (interactive — asks framework + name)\n",{"type":42,"tag":1515,"props":5751,"children":5752},{"class":1517,"line":3593},[5753,5757,5762],{"type":42,"tag":1515,"props":5754,"children":5755},{"style":1532},[5756],{"type":48,"value":1535},{"type":42,"tag":1515,"props":5758,"children":5759},{"style":1538},[5760],{"type":48,"value":5761}," slate:link",{"type":42,"tag":1515,"props":5763,"children":5764},{"style":1522},[5765],{"type":48,"value":5766},"                   # Link existing local dir to Slate service (interactive)\n",{"type":42,"tag":1515,"props":5768,"children":5769},{"class":1517,"line":3673},[5770,5774,5779],{"type":42,"tag":1515,"props":5771,"children":5772},{"style":1532},[5773],{"type":48,"value":1535},{"type":42,"tag":1515,"props":5775,"children":5776},{"style":1538},[5777],{"type":48,"value":5778}," slate:unlink",{"type":42,"tag":1515,"props":5780,"children":5781},{"style":1522},[5782],{"type":48,"value":5783},"                 # Unlink a Slate app\n",{"type":42,"tag":1515,"props":5785,"children":5786},{"class":1517,"line":3726},[5787,5791,5795,5799,5804],{"type":42,"tag":1515,"props":5788,"children":5789},{"style":1532},[5790],{"type":48,"value":1535},{"type":42,"tag":1515,"props":5792,"children":5793},{"style":1538},[5794],{"type":48,"value":5567},{"type":42,"tag":1515,"props":5796,"children":5797},{"style":1538},[5798],{"type":48,"value":5588},{"type":42,"tag":1515,"props":5800,"children":5801},{"style":1538},[5802],{"type":48,"value":5803}," slate",{"type":42,"tag":1515,"props":5805,"children":5806},{"style":1522},[5807],{"type":48,"value":5808},"           # Serve Slate app locally\n",{"type":42,"tag":1515,"props":5810,"children":5811},{"class":1517,"line":3735},[5812,5816,5820,5824],{"type":42,"tag":1515,"props":5813,"children":5814},{"style":1532},[5815],{"type":48,"value":1535},{"type":42,"tag":1515,"props":5817,"children":5818},{"style":1538},[5819],{"type":48,"value":5610},{"type":42,"tag":1515,"props":5821,"children":5822},{"style":1538},[5823],{"type":48,"value":5803},{"type":42,"tag":1515,"props":5825,"children":5826},{"style":1522},[5827],{"type":48,"value":5828},"                 # Deploy all Slate apps to Development\n",{"type":42,"tag":1515,"props":5830,"children":5831},{"class":1517,"line":3743},[5832,5836,5840,5844,5849,5853,5858,5862],{"type":42,"tag":1515,"props":5833,"children":5834},{"style":1532},[5835],{"type":48,"value":1535},{"type":42,"tag":1515,"props":5837,"children":5838},{"style":1538},[5839],{"type":48,"value":5610},{"type":42,"tag":1515,"props":5841,"children":5842},{"style":1538},[5843],{"type":48,"value":5803},{"type":42,"tag":1515,"props":5845,"children":5846},{"style":1538},[5847],{"type":48,"value":5848}," -m",{"type":42,"tag":1515,"props":5850,"children":5851},{"style":3220},[5852],{"type":48,"value":3879},{"type":42,"tag":1515,"props":5854,"children":5855},{"style":1538},[5856],{"type":48,"value":5857},"message",{"type":42,"tag":1515,"props":5859,"children":5860},{"style":3220},[5861],{"type":48,"value":3418},{"type":42,"tag":1515,"props":5863,"children":5864},{"style":1522},[5865],{"type":48,"value":5866},"    # Deploy with a deployment message\n",{"type":42,"tag":1515,"props":5868,"children":5869},{"class":1517,"line":3789},[5870,5874,5878,5882,5887],{"type":42,"tag":1515,"props":5871,"children":5872},{"style":1532},[5873],{"type":48,"value":1535},{"type":42,"tag":1515,"props":5875,"children":5876},{"style":1538},[5877],{"type":48,"value":5610},{"type":42,"tag":1515,"props":5879,"children":5880},{"style":1538},[5881],{"type":48,"value":5588},{"type":42,"tag":1515,"props":5883,"children":5884},{"style":1538},[5885],{"type":48,"value":5886}," slate:appname",{"type":42,"tag":1515,"props":5888,"children":5889},{"style":1522},[5890],{"type":48,"value":5891},"  # Deploy a specific Slate app\n",{"type":42,"tag":1515,"props":5893,"children":5894},{"class":1517,"line":3833},[5895,5899,5903,5907,5912],{"type":42,"tag":1515,"props":5896,"children":5897},{"style":1532},[5898],{"type":48,"value":1535},{"type":42,"tag":1515,"props":5900,"children":5901},{"style":1538},[5902],{"type":48,"value":5610},{"type":42,"tag":1515,"props":5904,"children":5905},{"style":1538},[5906],{"type":48,"value":5803},{"type":42,"tag":1515,"props":5908,"children":5909},{"style":1538},[5910],{"type":48,"value":5911}," --production",{"type":42,"tag":1515,"props":5913,"children":5914},{"style":1522},[5915],{"type":48,"value":5916},"    # Deploy to Production environment\n",{"type":42,"tag":51,"props":5918,"children":5919},{},[5920,5922,5942,5944,5950,5951,5957,5958,5964,5966,5972],{"type":48,"value":5921},"⚠️ ",{"type":42,"tag":55,"props":5923,"children":5924},{},[5925,5927,5933,5935,5941],{"type":48,"value":5926},"API Gateway CLI prefix is ",{"type":42,"tag":61,"props":5928,"children":5930},{"className":5929},[],[5931],{"type":48,"value":5932},"apig:",{"type":48,"value":5934},", NOT ",{"type":42,"tag":61,"props":5936,"children":5938},{"className":5937},[],[5939],{"type":48,"value":5940},"api-gateway:",{"type":48,"value":320},{"type":48,"value":5943}," The commands are ",{"type":42,"tag":61,"props":5945,"children":5947},{"className":5946},[],[5948],{"type":48,"value":5949},"catalyst apig:enable",{"type":48,"value":161},{"type":42,"tag":61,"props":5952,"children":5954},{"className":5953},[],[5955],{"type":48,"value":5956},"catalyst apig:disable",{"type":48,"value":161},{"type":42,"tag":61,"props":5959,"children":5961},{"className":5960},[],[5962],{"type":48,"value":5963},"catalyst apig:status",{"type":48,"value":5965},". Using ",{"type":42,"tag":61,"props":5967,"children":5969},{"className":5968},[],[5970],{"type":48,"value":5971},"api-gateway:enable",{"type":48,"value":5973}," throws \"unknown command\".",{"type":42,"tag":51,"props":5975,"children":5976},{},[5977,5978,5983,5985,5989,5991,5996,5998,6003,6005,6011,6013,6019],{"type":48,"value":5921},{"type":42,"tag":55,"props":5979,"children":5980},{},[5981],{"type":48,"value":5982},"Slate CLI deploy workflow:",{"type":48,"value":5984}," Select ",{"type":42,"tag":55,"props":5986,"children":5987},{},[5988],{"type":48,"value":1675},{"type":48,"value":5990}," during ",{"type":42,"tag":61,"props":5992,"children":5994},{"className":5993},[],[5995],{"type":48,"value":90},{"type":48,"value":5997}," (or run ",{"type":42,"tag":61,"props":5999,"children":6001},{"className":6000},[],[6002],{"type":48,"value":2364},{"type":48,"value":6004}," \u002F ",{"type":42,"tag":61,"props":6006,"children":6008},{"className":6007},[],[6009],{"type":48,"value":6010},"catalyst slate:link",{"type":48,"value":6012}," later to add more apps), then ",{"type":42,"tag":61,"props":6014,"children":6016},{"className":6015},[],[6017],{"type":48,"value":6018},"catalyst deploy slate",{"type":48,"value":6020}," to push. No Git repo required for CLI-based deploy.",{"type":42,"tag":51,"props":6022,"children":6023},{},[6024,6025,6030,6032,6038,6040,6046,6048,6054,6055,6061,6062,6068,6069,6075],{"type":48,"value":5921},{"type":42,"tag":55,"props":6026,"children":6027},{},[6028],{"type":48,"value":6029},"CLI flag gotcha (v1.23.0+):",{"type":48,"value":6031}," The deploy\u002Fserve scoping flag is ",{"type":42,"tag":61,"props":6033,"children":6035},{"className":6034},[],[6036],{"type":48,"value":6037},"--only \u003Ctarget>",{"type":48,"value":6039}," with a space — NOT ",{"type":42,"tag":61,"props":6041,"children":6043},{"className":6042},[],[6044],{"type":48,"value":6045},"--only-functions",{"type":48,"value":6047},". Hyphenated form does not exist and throws \"unknown option\". Valid targets: ",{"type":42,"tag":61,"props":6049,"children":6051},{"className":6050},[],[6052],{"type":48,"value":6053},"functions",{"type":48,"value":161},{"type":42,"tag":61,"props":6056,"children":6058},{"className":6057},[],[6059],{"type":48,"value":6060},"client",{"type":48,"value":161},{"type":42,"tag":61,"props":6063,"children":6065},{"className":6064},[],[6066],{"type":48,"value":6067},"appsail",{"type":48,"value":161},{"type":42,"tag":61,"props":6070,"children":6072},{"className":6071},[],[6073],{"type":48,"value":6074},"functions:\u003Cname>",{"type":48,"value":6076}," for a single function.",{"type":42,"tag":51,"props":6078,"children":6079},{},[6080,6081,6093,6095,6100,6102,6107,6109,6114,6116,6121],{"type":48,"value":5921},{"type":42,"tag":55,"props":6082,"children":6083},{},[6084,6086,6091],{"type":48,"value":6085},"First deploy of a new function requires ",{"type":42,"tag":61,"props":6087,"children":6089},{"className":6088},[],[6090],{"type":48,"value":175},{"type":48,"value":6092}," first.",{"type":48,"value":6094}," The CLI will not deploy a function it has not registered, even if the directory and ",{"type":42,"tag":61,"props":6096,"children":6098},{"className":6097},[],[6099],{"type":48,"value":1963},{"type":48,"value":6101}," exist. Run ",{"type":42,"tag":61,"props":6103,"children":6105},{"className":6104},[],[6106],{"type":48,"value":175},{"type":48,"value":6108}," interactively from the project root, enter name\u002Ftype\u002Fstack when prompted. After it completes, ",{"type":42,"tag":61,"props":6110,"children":6112},{"className":6111},[],[6113],{"type":48,"value":74},{"type":48,"value":6115}," will contain a ",{"type":42,"tag":61,"props":6117,"children":6119},{"className":6118},[],[6120],{"type":48,"value":6053},{"type":48,"value":6122}," array with the registered entry.",{"type":42,"tag":239,"props":6124,"children":6126},{"id":6125},"architectural-decision-guide",[6127],{"type":48,"value":6128},"Architectural decision guide",{"type":42,"tag":407,"props":6130,"children":6131},{},[6132,6153],{"type":42,"tag":411,"props":6133,"children":6134},{},[6135],{"type":42,"tag":415,"props":6136,"children":6137},{},[6138,6143,6148],{"type":42,"tag":419,"props":6139,"children":6140},{},[6141],{"type":48,"value":6142},"Need",{"type":42,"tag":419,"props":6144,"children":6145},{},[6146],{"type":48,"value":6147},"Use This",{"type":42,"tag":419,"props":6149,"children":6150},{},[6151],{"type":48,"value":6152},"Not This",{"type":42,"tag":430,"props":6154,"children":6155},{},[6156,6176,6200,6223,6246,6275,6296,6315,6342,6361,6383],{"type":42,"tag":415,"props":6157,"children":6158},{},[6159,6164,6171],{"type":42,"tag":437,"props":6160,"children":6161},{},[6162],{"type":48,"value":6163},"Frontend hosting (new)",{"type":42,"tag":437,"props":6165,"children":6166},{},[6167],{"type":42,"tag":55,"props":6168,"children":6169},{},[6170],{"type":48,"value":1675},{"type":42,"tag":437,"props":6172,"children":6173},{},[6174],{"type":48,"value":6175},"Web Client Hosting",{"type":42,"tag":415,"props":6177,"children":6178},{},[6179,6184,6191],{"type":42,"tag":437,"props":6180,"children":6181},{},[6182],{"type":48,"value":6183},"File\u002Fobject storage (new)",{"type":42,"tag":437,"props":6185,"children":6186},{},[6187],{"type":42,"tag":55,"props":6188,"children":6189},{},[6190],{"type":48,"value":2374},{"type":42,"tag":437,"props":6192,"children":6193},{},[6194,6198],{"type":42,"tag":2797,"props":6195,"children":6196},{},[6197],{"type":48,"value":2657},{"type":48,"value":6199}," (deprecated)",{"type":42,"tag":415,"props":6201,"children":6202},{},[6203,6208,6215],{"type":42,"tag":437,"props":6204,"children":6205},{},[6206],{"type":48,"value":6207},"Event-driven architecture (new)",{"type":42,"tag":437,"props":6209,"children":6210},{},[6211],{"type":42,"tag":55,"props":6212,"children":6213},{},[6214],{"type":48,"value":2384},{"type":42,"tag":437,"props":6216,"children":6217},{},[6218,6222],{"type":42,"tag":2797,"props":6219,"children":6220},{},[6221],{"type":48,"value":2641},{"type":48,"value":6199},{"type":42,"tag":415,"props":6224,"children":6225},{},[6226,6231,6238],{"type":42,"tag":437,"props":6227,"children":6228},{},[6229],{"type":48,"value":6230},"Scheduled\u002Fbackground tasks (new)",{"type":42,"tag":437,"props":6232,"children":6233},{},[6234],{"type":42,"tag":55,"props":6235,"children":6236},{},[6237],{"type":48,"value":2394},{"type":42,"tag":437,"props":6239,"children":6240},{},[6241,6245],{"type":42,"tag":2797,"props":6242,"children":6243},{},[6244],{"type":48,"value":2672},{"type":48,"value":6199},{"type":42,"tag":415,"props":6247,"children":6248},{},[6249,6254,6270],{"type":42,"tag":437,"props":6250,"children":6251},{},[6252],{"type":48,"value":6253},"Zoho product integration",{"type":42,"tag":437,"props":6255,"children":6256},{},[6257,6261,6263,6268],{"type":42,"tag":55,"props":6258,"children":6259},{},[6260],{"type":48,"value":2384},{"type":48,"value":6262}," (events) + ",{"type":42,"tag":55,"props":6264,"children":6265},{},[6266],{"type":48,"value":6267},"Connections",{"type":48,"value":6269}," (APIs)",{"type":42,"tag":437,"props":6271,"children":6272},{},[6273],{"type":48,"value":6274},"Custom webhook handlers",{"type":42,"tag":415,"props":6276,"children":6277},{},[6278,6283,6291],{"type":42,"tag":437,"props":6279,"children":6280},{},[6281],{"type":48,"value":6282},"Stateless API endpoints",{"type":42,"tag":437,"props":6284,"children":6285},{},[6286],{"type":42,"tag":55,"props":6287,"children":6288},{},[6289],{"type":48,"value":6290},"Advanced I\u002FO Functions",{"type":42,"tag":437,"props":6292,"children":6293},{},[6294],{"type":48,"value":6295},"AppSail",{"type":42,"tag":415,"props":6297,"children":6298},{},[6299,6304,6311],{"type":42,"tag":437,"props":6300,"children":6301},{},[6302],{"type":48,"value":6303},"Persistent server \u002F WebSockets",{"type":42,"tag":437,"props":6305,"children":6306},{},[6307],{"type":42,"tag":55,"props":6308,"children":6309},{},[6310],{"type":48,"value":6295},{"type":42,"tag":437,"props":6312,"children":6313},{},[6314],{"type":48,"value":1661},{"type":42,"tag":415,"props":6316,"children":6317},{},[6318,6323,6337],{"type":42,"tag":437,"props":6319,"children":6320},{},[6321],{"type":48,"value":6322},"Relational data with queries",{"type":42,"tag":437,"props":6324,"children":6325},{},[6326,6331,6332],{"type":42,"tag":55,"props":6327,"children":6328},{},[6329],{"type":48,"value":6330},"Data Store",{"type":48,"value":1924},{"type":42,"tag":55,"props":6333,"children":6334},{},[6335],{"type":48,"value":6336},"ZCQL",{"type":42,"tag":437,"props":6338,"children":6339},{},[6340],{"type":48,"value":6341},"NoSQL",{"type":42,"tag":415,"props":6343,"children":6344},{},[6345,6350,6357],{"type":42,"tag":437,"props":6346,"children":6347},{},[6348],{"type":48,"value":6349},"Flexible schema \u002F documents",{"type":42,"tag":437,"props":6351,"children":6352},{},[6353],{"type":42,"tag":55,"props":6354,"children":6355},{},[6356],{"type":48,"value":6341},{"type":42,"tag":437,"props":6358,"children":6359},{},[6360],{"type":48,"value":6330},{"type":42,"tag":415,"props":6362,"children":6363},{},[6364,6369,6379],{"type":42,"tag":437,"props":6365,"children":6366},{},[6367],{"type":48,"value":6368},"Ephemeral \u002F session data",{"type":42,"tag":437,"props":6370,"children":6371},{},[6372,6377],{"type":42,"tag":55,"props":6373,"children":6374},{},[6375],{"type":48,"value":6376},"Cache",{"type":48,"value":6378}," (max 48hr TTL)",{"type":42,"tag":437,"props":6380,"children":6381},{},[6382],{"type":48,"value":6330},{"type":42,"tag":415,"props":6384,"children":6385},{},[6386,6391,6399],{"type":42,"tag":437,"props":6387,"children":6388},{},[6389],{"type":48,"value":6390},"Multi-step workflow",{"type":42,"tag":437,"props":6392,"children":6393},{},[6394],{"type":42,"tag":55,"props":6395,"children":6396},{},[6397],{"type":48,"value":6398},"Circuits",{"type":42,"tag":437,"props":6400,"children":6401},{},[6402],{"type":48,"value":6403},"Chained function calls",{"type":42,"tag":239,"props":6405,"children":6407},{"id":6406},"important-gotchas",[6408],{"type":48,"value":6409},"Important gotchas",{"type":42,"tag":94,"props":6411,"children":6412},{},[6413,6462,6489,6650,6678,6700,6722,6753,6811,6828,6838,6848,6881,6891,6901,6942,6984,7010,7028,7038,7048,7058,7068,7100,7124,7162,7195,7262,7296,7314,7339],{"type":42,"tag":98,"props":6414,"children":6415},{},[6416,6421,6423,6428,6429,6434,6435,6440,6441,6446,6448,6453,6455,6460],{"type":42,"tag":55,"props":6417,"children":6418},{},[6419],{"type":48,"value":6420},"NEVER scaffold a Catalyst project yourself",{"type":48,"value":6422}," — ",{"type":42,"tag":61,"props":6424,"children":6426},{"className":6425},[],[6427],{"type":48,"value":74},{"type":48,"value":161},{"type":42,"tag":61,"props":6430,"children":6432},{"className":6431},[],[6433],{"type":48,"value":66},{"type":48,"value":161},{"type":42,"tag":61,"props":6436,"children":6438},{"className":6437},[],[6439],{"type":48,"value":130},{"type":48,"value":288},{"type":42,"tag":61,"props":6442,"children":6444},{"className":6443},[],[6445],{"type":48,"value":147},{"type":48,"value":6447}," are ALL created by ",{"type":42,"tag":61,"props":6449,"children":6451},{"className":6450},[],[6452],{"type":48,"value":90},{"type":48,"value":6454},". If you create them manually they will lack Project ID, Environment ID, and ZAID — deployment will fail with no useful error. Always ask the user to run ",{"type":42,"tag":61,"props":6456,"children":6458},{"className":6457},[],[6459],{"type":48,"value":90},{"type":48,"value":6461}," themselves. This is the #1 cause of failed Catalyst builds by LLMs.",{"type":42,"tag":98,"props":6463,"children":6464},{},[6465,6487],{"type":42,"tag":55,"props":6466,"children":6467},{},[6468,6473,6474,6479,6480,6485],{"type":42,"tag":61,"props":6469,"children":6471},{"className":6470},[],[6472],{"type":48,"value":90},{"type":48,"value":161},{"type":42,"tag":61,"props":6475,"children":6477},{"className":6476},[],[6478],{"type":48,"value":167},{"type":48,"value":161},{"type":42,"tag":61,"props":6481,"children":6483},{"className":6482},[],[6484],{"type":48,"value":175},{"type":48,"value":6486}," are INTERACTIVE",{"type":48,"value":6488}," — they use arrow-key menus and multi-step prompts. NEVER run them in a script or terminal session. Always instruct the user to run them manually in their own terminal and wait for confirmation before proceeding.",{"type":42,"tag":98,"props":6490,"children":6491},{},[6492,6502,6504,6509,6510,6516,6518,6524,6525,6531,6532,6538,6540,6545,6546,6551,6552,6558,6559,6565,6567,6572,6574,6579,6581,6586,6588,6593,6595,6600,6602,6607,6609,6614,6615,6620,6622,6627,6629,6634,6636,6641,6643,6648],{"type":42,"tag":55,"props":6493,"children":6494},{},[6495,6500],{"type":42,"tag":61,"props":6496,"children":6498},{"className":6497},[],[6499],{"type":48,"value":175},{"type":48,"value":6501}," is the ONLY setup command without non-interactive flags",{"type":48,"value":6503}," — Unlike ",{"type":42,"tag":61,"props":6505,"children":6507},{"className":6506},[],[6508],{"type":48,"value":90},{"type":48,"value":3275},{"type":42,"tag":61,"props":6511,"children":6513},{"className":6512},[],[6514],{"type":48,"value":6515},"--non-interactive",{"type":48,"value":6517},"), ",{"type":42,"tag":61,"props":6519,"children":6521},{"className":6520},[],[6522],{"type":48,"value":6523},"catalyst appsail:add",{"type":48,"value":3275},{"type":42,"tag":61,"props":6526,"children":6528},{"className":6527},[],[6529],{"type":48,"value":6530},"--name",{"type":48,"value":161},{"type":42,"tag":61,"props":6533,"children":6535},{"className":6534},[],[6536],{"type":48,"value":6537},"--stack",{"type":48,"value":6539},"), and ",{"type":42,"tag":61,"props":6541,"children":6543},{"className":6542},[],[6544],{"type":48,"value":2364},{"type":48,"value":3275},{"type":42,"tag":61,"props":6547,"children":6549},{"className":6548},[],[6550],{"type":48,"value":6530},{"type":48,"value":161},{"type":42,"tag":61,"props":6553,"children":6555},{"className":6554},[],[6556],{"type":48,"value":6557},"--framework",{"type":48,"value":6517},{"type":42,"tag":61,"props":6560,"children":6562},{"className":6561},[],[6563],{"type":48,"value":6564},"functions:add",{"type":48,"value":6566}," has NO flags for automation — it always requires interactive arrow-key selection. ",{"type":42,"tag":55,"props":6568,"children":6569},{},[6570],{"type":48,"value":6571},"Agent workaround:",{"type":48,"value":6573}," When the user has already run ",{"type":42,"tag":61,"props":6575,"children":6577},{"className":6576},[],[6578],{"type":48,"value":175},{"type":48,"value":6580}," at least once (so ",{"type":42,"tag":61,"props":6582,"children":6584},{"className":6583},[],[6585],{"type":48,"value":74},{"type":48,"value":6587}," has a ",{"type":42,"tag":61,"props":6589,"children":6591},{"className":6590},[],[6592],{"type":48,"value":6053},{"type":48,"value":6594}," array), agents can add subsequent functions by: (1) creating a new directory under ",{"type":42,"tag":61,"props":6596,"children":6598},{"className":6597},[],[6599],{"type":48,"value":130},{"type":48,"value":6601},", (2) adding a valid ",{"type":42,"tag":61,"props":6603,"children":6605},{"className":6604},[],[6606],{"type":48,"value":1963},{"type":48,"value":6608}," with correct ",{"type":42,"tag":61,"props":6610,"children":6612},{"className":6611},[],[6613],{"type":48,"value":1971},{"type":48,"value":68},{"type":42,"tag":61,"props":6616,"children":6618},{"className":6617},[],[6619],{"type":48,"value":1979},{"type":48,"value":6621}," keys, (3) adding the function entry to ",{"type":42,"tag":61,"props":6623,"children":6625},{"className":6624},[],[6626],{"type":48,"value":74},{"type":48,"value":6628},"'s ",{"type":42,"tag":61,"props":6630,"children":6632},{"className":6631},[],[6633],{"type":48,"value":6053},{"type":48,"value":6635}," array matching the format of existing entries. The first function MUST still be registered interactively. See ",{"type":42,"tag":61,"props":6637,"children":6639},{"className":6638},[],[6640],{"type":48,"value":919},{"type":48,"value":6642}," for the exact ",{"type":42,"tag":61,"props":6644,"children":6646},{"className":6645},[],[6647],{"type":48,"value":74},{"type":48,"value":6649}," function entry format.",{"type":42,"tag":98,"props":6651,"children":6652},{},[6653,6663,6665,6670,6672,6677],{"type":42,"tag":55,"props":6654,"children":6655},{},[6656,6658],{"type":48,"value":6657},"Select Slate during ",{"type":42,"tag":61,"props":6659,"children":6661},{"className":6660},[],[6662],{"type":48,"value":90},{"type":48,"value":6664}," — Slate is a component option alongside Functions, Client, and AppSail. Select ",{"type":42,"tag":55,"props":6666,"children":6667},{},[6668],{"type":48,"value":6669},"Functions + Slate",{"type":48,"value":6671}," (not Client). If you need to add more Slate apps later, use ",{"type":42,"tag":61,"props":6673,"children":6675},{"className":6674},[],[6676],{"type":48,"value":2364},{"type":48,"value":320},{"type":42,"tag":98,"props":6679,"children":6680},{},[6681,6686,6688,6692,6694,6698],{"type":42,"tag":55,"props":6682,"children":6683},{},[6684],{"type":48,"value":6685},"Slate requires one-time console activation",{"type":48,"value":6687}," — Before using Slate in the CLI, the user must go to the Catalyst console → their project → ",{"type":42,"tag":55,"props":6689,"children":6690},{},[6691],{"type":48,"value":1675},{"type":48,"value":6693}," (left sidebar) → click ",{"type":42,"tag":55,"props":6695,"children":6696},{},[6697],{"type":48,"value":1602},{"type":48,"value":6699},". Without this, Slate init via CLI will fail. This only needs to be done once per project.",{"type":42,"tag":98,"props":6701,"children":6702},{},[6703,6713,6715,6720],{"type":42,"tag":55,"props":6704,"children":6705},{},[6706,6711],{"type":42,"tag":61,"props":6707,"children":6709},{"className":6708},[],[6710],{"type":48,"value":175},{"type":48,"value":6712}," is required before first deploy",{"type":48,"value":6714}," — a function directory + ",{"type":42,"tag":61,"props":6716,"children":6718},{"className":6717},[],[6719],{"type":48,"value":1963},{"type":48,"value":6721}," alone is not enough; the CLI must register it interactively first. The user must run it from the project root and answer name\u002Ftype\u002Fstack prompts",{"type":42,"tag":98,"props":6723,"children":6724},{},[6725,6738,6740,6745,6747],{"type":42,"tag":55,"props":6726,"children":6727},{},[6728,6730,6736],{"type":48,"value":6729},"Deploy flag is ",{"type":42,"tag":61,"props":6731,"children":6733},{"className":6732},[],[6734],{"type":48,"value":6735},"--only functions",{"type":48,"value":6737}," (with space)",{"type":48,"value":6739}," — NOT ",{"type":42,"tag":61,"props":6741,"children":6743},{"className":6742},[],[6744],{"type":48,"value":6045},{"type":48,"value":6746},". Hyphenated form throws \"unknown option\" in CLI v1.23.0+. Single function: ",{"type":42,"tag":61,"props":6748,"children":6750},{"className":6749},[],[6751],{"type":48,"value":6752},"--only functions:\u003Cname>",{"type":42,"tag":98,"props":6754,"children":6755},{},[6756,6779,6781,6787,6789,6794,6796,6802,6804,6809],{"type":42,"tag":55,"props":6757,"children":6758},{},[6759,6764,6766,6771,6772,6777],{"type":42,"tag":61,"props":6760,"children":6762},{"className":6761},[],[6763],{"type":48,"value":1963},{"type":48,"value":6765}," uses ",{"type":42,"tag":61,"props":6767,"children":6769},{"className":6768},[],[6770],{"type":48,"value":1971},{"type":48,"value":1924},{"type":42,"tag":61,"props":6773,"children":6775},{"className":6774},[],[6776],{"type":48,"value":1979},{"type":48,"value":6778}," keys",{"type":48,"value":6780}," — correct format is ",{"type":42,"tag":61,"props":6782,"children":6784},{"className":6783},[],[6785],{"type":48,"value":6786},"{\"deployment\":{\"name\":\"...\",\"type\":\"...\",\"stack\":\"...\",\"env_variables\":{}},\"execution\":{\"main\":\"index.js\"}}",{"type":48,"value":6788},". Do NOT use a ",{"type":42,"tag":61,"props":6790,"children":6792},{"className":6791},[],[6793],{"type":48,"value":3552},{"type":48,"value":6795}," key or ",{"type":42,"tag":61,"props":6797,"children":6799},{"className":6798},[],[6800],{"type":48,"value":6801},"entry_point",{"type":48,"value":6803}," — neither exists. Using them crashes ",{"type":42,"tag":61,"props":6805,"children":6807},{"className":6806},[],[6808],{"type":48,"value":1386},{"type":48,"value":6810}," with a cryptic TypeError.",{"type":42,"tag":98,"props":6812,"children":6813},{},[6814,6819,6821,6826],{"type":42,"tag":55,"props":6815,"children":6816},{},[6817],{"type":48,"value":6818},"Function memory defaults to 128MB",{"type":48,"value":6820}," — increase in catalyst-config.json ",{"type":42,"tag":61,"props":6822,"children":6824},{"className":6823},[],[6825],{"type":48,"value":1971},{"type":48,"value":6827}," block (max 1024MB)",{"type":42,"tag":98,"props":6829,"children":6830},{},[6831,6836],{"type":42,"tag":55,"props":6832,"children":6833},{},[6834],{"type":48,"value":6835},"Cold starts exist",{"type":48,"value":6837}," — keep packages minimal",{"type":42,"tag":98,"props":6839,"children":6840},{},[6841,6846],{"type":42,"tag":55,"props":6842,"children":6843},{},[6844],{"type":48,"value":6845},"ZCQL table\u002Fcolumn names are case-sensitive",{"type":48,"value":6847}," — must match console exactly",{"type":42,"tag":98,"props":6849,"children":6850},{},[6851,6856,6858,6864,6866,6872,6873,6879],{"type":42,"tag":55,"props":6852,"children":6853},{},[6854],{"type":48,"value":6855},"ZCQL max 300 rows per query",{"type":48,"value":6857}," — use ",{"type":42,"tag":61,"props":6859,"children":6861},{"className":6860},[],[6862],{"type":48,"value":6863},"LIMIT offset, count",{"type":48,"value":6865}," pagination (e.g. ",{"type":42,"tag":61,"props":6867,"children":6869},{"className":6868},[],[6870],{"type":48,"value":6871},"LIMIT 0, 300",{"type":48,"value":161},{"type":42,"tag":61,"props":6874,"children":6876},{"className":6875},[],[6877],{"type":48,"value":6878},"LIMIT 300, 300",{"type":48,"value":6880},") for larger datasets",{"type":42,"tag":98,"props":6882,"children":6883},{},[6884,6889],{"type":42,"tag":55,"props":6885,"children":6886},{},[6887],{"type":48,"value":6888},"ZAID differs between Dev and Prod",{"type":48,"value":6890}," — #1 source of auth issues in production",{"type":42,"tag":98,"props":6892,"children":6893},{},[6894,6899],{"type":42,"tag":55,"props":6895,"children":6896},{},[6897],{"type":48,"value":6898},"25-user limit in Development",{"type":48,"value":6900}," — no limit in production",{"type":42,"tag":98,"props":6902,"children":6903},{},[6904,6909,6911,6917,6919,6925,6926,6932,6934,6940],{"type":42,"tag":55,"props":6905,"children":6906},{},[6907],{"type":48,"value":6908},"Stratus bucket names are globally unique",{"type":48,"value":6910}," — across ALL Catalyst projects and orgs. Generic names like ",{"type":42,"tag":61,"props":6912,"children":6914},{"className":6913},[],[6915],{"type":48,"value":6916},"my-files",{"type":48,"value":6918}," will be taken. Use ",{"type":42,"tag":61,"props":6920,"children":6922},{"className":6921},[],[6923],{"type":48,"value":6924},"{app-name}-{project-id-prefix}",{"type":48,"value":1064},{"type":42,"tag":61,"props":6927,"children":6929},{"className":6928},[],[6930],{"type":48,"value":6931},"docvault-files-70699",{"type":48,"value":6933},"). A ",{"type":42,"tag":61,"props":6935,"children":6937},{"className":6936},[],[6938],{"type":48,"value":6939},"DUPLICATE_ENTRY",{"type":48,"value":6941}," error does NOT mean it's in your project — it may belong to another project and be inaccessible.",{"type":42,"tag":98,"props":6943,"children":6944},{},[6945,6950,6952,6958,6960,6966,6968,6974,6976,6982],{"type":42,"tag":55,"props":6946,"children":6947},{},[6948],{"type":48,"value":6949},"Slate + Advanced I\u002FO functions are cross-domain",{"type":48,"value":6951}," — Slate serves from ",{"type":42,"tag":61,"props":6953,"children":6955},{"className":6954},[],[6956],{"type":48,"value":6957},"*.onslate.com",{"type":48,"value":6959},", functions from ",{"type":42,"tag":61,"props":6961,"children":6963},{"className":6962},[],[6964],{"type":48,"value":6965},"*.catalystserverless.com",{"type":48,"value":6967},". Relative paths like ",{"type":42,"tag":61,"props":6969,"children":6971},{"className":6970},[],[6972],{"type":48,"value":6973},"\u002Fserver\u002Ffunc\u002Fexecute",{"type":48,"value":6975}," DO NOT work — you'll get HTML back instead of JSON. Use the full function URL + ",{"type":42,"tag":61,"props":6977,"children":6979},{"className":6978},[],[6980],{"type":48,"value":6981},"generateAuthToken()",{"type":48,"value":6983}," + CORS whitelist in Console → Authentication → Authorized Domains.",{"type":42,"tag":98,"props":6985,"children":6986},{},[6987,6992,6994,7000,7002,7008],{"type":42,"tag":55,"props":6988,"children":6989},{},[6990],{"type":48,"value":6991},"Hosted Authentication must be enabled in console",{"type":48,"value":6993}," — Before ",{"type":42,"tag":61,"props":6995,"children":6997},{"className":6996},[],[6998],{"type":48,"value":6999},"\u002F__catalyst\u002Fauth\u002Flogin",{"type":48,"value":7001}," works, enable it in Console → Authentication → Login → Hosted Authentication. The Web SDK does NOT auto-redirect on auth failure — you must redirect manually in the ",{"type":42,"tag":61,"props":7003,"children":7005},{"className":7004},[],[7006],{"type":48,"value":7007},".catch()",{"type":48,"value":7009}," block.",{"type":42,"tag":98,"props":7011,"children":7012},{},[7013,7018,7020,7026],{"type":42,"tag":55,"props":7014,"children":7015},{},[7016],{"type":48,"value":7017},"AppSail port",{"type":48,"value":7019},": use ",{"type":42,"tag":61,"props":7021,"children":7023},{"className":7022},[],[7024],{"type":48,"value":7025},"process.env.X_ZOHO_CATALYST_LISTEN_PORT",{"type":48,"value":7027}," with fallback",{"type":42,"tag":98,"props":7029,"children":7030},{},[7031,7036],{"type":42,"tag":55,"props":7032,"children":7033},{},[7034],{"type":48,"value":7035},"Cache values are strings only",{"type":48,"value":7037}," — serialize\u002Fdeserialize JSON yourself",{"type":42,"tag":98,"props":7039,"children":7040},{},[7041,7046],{"type":42,"tag":55,"props":7042,"children":7043},{},[7044],{"type":48,"value":7045},"Integration Functions NOT available",{"type":48,"value":7047}," in EU, AU, IN, or CA data centers",{"type":42,"tag":98,"props":7049,"children":7050},{},[7051,7056],{"type":42,"tag":55,"props":7052,"children":7053},{},[7054],{"type":48,"value":7055},"CLI always deploys to Development",{"type":48,"value":7057}," — production deployment via web console only",{"type":42,"tag":98,"props":7059,"children":7060},{},[7061,7066],{"type":42,"tag":55,"props":7062,"children":7063},{},[7064],{"type":48,"value":7065},"New users after Aug 27, 2025",{"type":48,"value":7067}," cannot access File Store, Event Listeners, or Cron — these services are deprecated (originally scheduled for removal April 30, 2026 — still functional with deprecation warnings, removal date TBD)",{"type":42,"tag":98,"props":7069,"children":7070},{},[7071,7076,7078,7083,7085,7090,7092,7098],{"type":42,"tag":55,"props":7072,"children":7073},{},[7074],{"type":48,"value":7075},"DataStore App User permissions are OFF by default (REQUIRED setup step)",{"type":48,"value":7077}," — Newly created tables give App Users ",{"type":42,"tag":55,"props":7079,"children":7080},{},[7081],{"type":48,"value":7082},"zero permissions",{"type":48,"value":7084}," — no Select, Insert, Update, or Delete. This is not optional configuration; it's a required step after creating every table. Go to ",{"type":42,"tag":55,"props":7086,"children":7087},{},[7088],{"type":48,"value":7089},"Console → Data Store → {Table} → Scopes & Permissions → Table Permissions → App User → check Select, Insert, Update, Delete",{"type":48,"value":7091},". Without this, any user-authenticated function call will fail silently or return permissions errors. Alternative: use admin-scoped SDK ",{"type":42,"tag":61,"props":7093,"children":7095},{"className":7094},[],[7096],{"type":48,"value":7097},"catalyst.initialize(req, { scope: 'admin' })",{"type":48,"value":7099}," to bypass user permissions.",{"type":42,"tag":98,"props":7101,"children":7102},{},[7103,7114,7116,7122],{"type":42,"tag":55,"props":7104,"children":7105},{},[7106,7108],{"type":48,"value":7107},"Web client → function fetch must include ",{"type":42,"tag":61,"props":7109,"children":7111},{"className":7110},[],[7112],{"type":48,"value":7113},"credentials: 'include'",{"type":48,"value":7115}," — without it, auth cookies are not forwarded and server-side ",{"type":42,"tag":61,"props":7117,"children":7119},{"className":7118},[],[7120],{"type":48,"value":7121},"userManagement().getCurrentUser()",{"type":48,"value":7123}," throws with 401, even when both web client and function are on the same Catalyst domain.",{"type":42,"tag":98,"props":7125,"children":7126},{},[7127,7139,7140,7146,7148,7154,7156,7161],{"type":42,"tag":55,"props":7128,"children":7129},{},[7130,7132,7138],{"type":48,"value":7131},"Web SDK ",{"type":42,"tag":61,"props":7133,"children":7135},{"className":7134},[],[7136],{"type":48,"value":7137},"catalyst.auth.getCurrentUser()",{"type":48,"value":2526},{"type":48,"value":6857},{"type":42,"tag":61,"props":7141,"children":7143},{"className":7142},[],[7144],{"type":48,"value":7145},"catalyst.auth.isUserAuthenticated()",{"type":48,"value":7147}," instead. It resolves with the full user object (",{"type":42,"tag":61,"props":7149,"children":7151},{"className":7150},[],[7152],{"type":48,"value":7153},"result.content.email_id",{"type":48,"value":7155},", etc.) on success and rejects with 401 on failure. The SDK does NOT auto-redirect — you must redirect manually to ",{"type":42,"tag":61,"props":7157,"children":7159},{"className":7158},[],[7160],{"type":48,"value":6999},{"type":48,"value":320},{"type":42,"tag":98,"props":7163,"children":7164},{},[7165,7177,7179,7185,7187,7193],{"type":42,"tag":55,"props":7166,"children":7167},{},[7168,7169,7175],{"type":48,"value":7131},{"type":42,"tag":61,"props":7170,"children":7172},{"className":7171},[],[7173],{"type":48,"value":7174},"catalyst.auth.signOut()",{"type":48,"value":7176}," requires a redirect URL argument",{"type":48,"value":7178}," — call ",{"type":42,"tag":61,"props":7180,"children":7182},{"className":7181},[],[7183],{"type":48,"value":7184},"catalyst.auth.signOut(redirectURL)",{"type":48,"value":7186},". Calling it without an argument crashes. ",{"type":42,"tag":61,"props":7188,"children":7190},{"className":7189},[],[7191],{"type":48,"value":7192},"constructSignOutUrl()",{"type":48,"value":7194}," does not exist.",{"type":42,"tag":98,"props":7196,"children":7197},{},[7198,7237,7239,7245,7247,7253,7255,7261],{"type":42,"tag":55,"props":7199,"children":7200},{},[7201,7203,7208,7210,7216,7217,7223,7224,7230,7231],{"type":48,"value":7202},"Advanced I\u002FO ",{"type":42,"tag":61,"props":7204,"children":7206},{"className":7205},[],[7207],{"type":48,"value":3176},{"type":48,"value":7209}," has no ",{"type":42,"tag":61,"props":7211,"children":7213},{"className":7212},[],[7214],{"type":48,"value":7215},"body",{"type":48,"value":161},{"type":42,"tag":61,"props":7218,"children":7220},{"className":7219},[],[7221],{"type":48,"value":7222},"files",{"type":48,"value":161},{"type":42,"tag":61,"props":7225,"children":7227},{"className":7226},[],[7228],{"type":48,"value":7229},"query",{"type":48,"value":169},{"type":42,"tag":61,"props":7232,"children":7234},{"className":7233},[],[7235],{"type":48,"value":7236},"params",{"type":48,"value":7238}," — it is a raw ",{"type":42,"tag":61,"props":7240,"children":7242},{"className":7241},[],[7243],{"type":48,"value":7244},"http.IncomingMessage",{"type":48,"value":7246},", not Express. For JSON: accumulate stream chunks. For file uploads: use ",{"type":42,"tag":61,"props":7248,"children":7250},{"className":7249},[],[7251],{"type":48,"value":7252},"busboy",{"type":48,"value":7254},". For query params: use ",{"type":42,"tag":61,"props":7256,"children":7258},{"className":7257},[],[7259],{"type":48,"value":7260},"new URL(req.url, ...).searchParams",{"type":48,"value":320},{"type":42,"tag":98,"props":7263,"children":7264},{},[7265,7270,7272,7278,7280,7286,7288,7294],{"type":42,"tag":55,"props":7266,"children":7267},{},[7268],{"type":48,"value":7269},"Only node20 is actively supported",{"type":48,"value":7271}," — node14, 16, and 18 still work for legacy projects but receive no upstream security patches. — ",{"type":42,"tag":61,"props":7273,"children":7275},{"className":7274},[],[7276],{"type":48,"value":7277},"executeZCQLQuery",{"type":48,"value":7279}," returns ",{"type":42,"tag":61,"props":7281,"children":7283},{"className":7282},[],[7284],{"type":48,"value":7285},"[{ tablename: { ROWID: ..., col: ... } }]",{"type":48,"value":7287},". Always unwrap: ",{"type":42,"tag":61,"props":7289,"children":7291},{"className":7290},[],[7292],{"type":48,"value":7293},"result.map(r => r.TableName)",{"type":48,"value":7295},". The key matches the table name as defined in the console (case-sensitive).",{"type":42,"tag":98,"props":7297,"children":7298},{},[7299,7304,7306,7312],{"type":42,"tag":55,"props":7300,"children":7301},{},[7302],{"type":48,"value":7303},"CREATEDTIME timezone trap",{"type":48,"value":7305}," — Catalyst stores CREATEDTIME in the project's configured timezone (e.g. IST) WITHOUT an offset marker. Passing the raw string to ",{"type":42,"tag":61,"props":7307,"children":7309},{"className":7308},[],[7310],{"type":48,"value":7311},"new Date()",{"type":48,"value":7313}," treats it as UTC, producing timestamps that are hours off. Always append the project timezone offset before parsing.",{"type":42,"tag":98,"props":7315,"children":7316},{},[7317,7322,7324,7329,7331,7337],{"type":42,"tag":55,"props":7318,"children":7319},{},[7320],{"type":48,"value":7321},"Data Store does NOT support emoji \u002F 4-byte UTF-8",{"type":48,"value":7323}," — Inserting emoji or 4-byte UTF-8 characters (many CJK extensions) silently stores them as ",{"type":42,"tag":61,"props":7325,"children":7327},{"className":7326},[],[7328],{"type":48,"value":980},{"type":48,"value":7330},". Workaround: store a string key (e.g. ",{"type":42,"tag":61,"props":7332,"children":7334},{"className":7333},[],[7335],{"type":48,"value":7336},"\"happy\"",{"type":48,"value":7338},") and map to emoji in application code.",{"type":42,"tag":98,"props":7340,"children":7341},{},[7342,7347,7349,7355],{"type":42,"tag":55,"props":7343,"children":7344},{},[7345],{"type":48,"value":7346},"AppSail + Slate cross-origin issue",{"type":48,"value":7348}," — In development, Slate-hosted frontends calling AppSail APIs get blocked by Catalyst's auth layer (manifests as \"Unable to Fetch\" or \"Failed to fetch\"). Fix: serve the frontend from AppSail itself using ",{"type":42,"tag":61,"props":7350,"children":7352},{"className":7351},[],[7353],{"type":48,"value":7354},"express.static()",{"type":48,"value":7356}," so all calls are same-origin. This eliminates CORS and auth-layer issues entirely.",{"type":42,"tag":239,"props":7358,"children":7360},{"id":7359},"documentation-links",[7361],{"type":48,"value":7362},"Documentation links",{"type":42,"tag":361,"props":7364,"children":7365},{},[7366],{"type":42,"tag":51,"props":7367,"children":7368},{},[7369,7374,7376,7382,7383,7389],{"type":42,"tag":55,"props":7370,"children":7371},{},[7372],{"type":48,"value":7373},"Note:",{"type":48,"value":7375}," SDK doc URLs include a version segment (e.g., ",{"type":42,"tag":61,"props":7377,"children":7379},{"className":7378},[],[7380],{"type":48,"value":7381},"\u002Fv2\u002F",{"type":48,"value":161},{"type":42,"tag":61,"props":7384,"children":7386},{"className":7385},[],[7387],{"type":48,"value":7388},"\u002Fv1\u002F",{"type":48,"value":7390},"). If a URL returns 404, the version may have been incremented — check the docs homepage for the latest version path.",{"type":42,"tag":94,"props":7392,"children":7393},{},[7394,7404,7414,7425,7436,7447,7458,7469,7480,7491],{"type":42,"tag":98,"props":7395,"children":7396},{},[7397,7399],{"type":48,"value":7398},"Main docs: ",{"type":42,"tag":208,"props":7400,"children":7402},{"href":954,"rel":7401},[3136],[7403],{"type":48,"value":954},{"type":42,"tag":98,"props":7405,"children":7406},{},[7407,7409],{"type":48,"value":7408},"Node.js SDK: ",{"type":42,"tag":208,"props":7410,"children":7412},{"href":3134,"rel":7411},[3136],[7413],{"type":48,"value":3134},{"type":42,"tag":98,"props":7415,"children":7416},{},[7417,7419],{"type":48,"value":7418},"Java SDK: ",{"type":42,"tag":208,"props":7420,"children":7423},{"href":7421,"rel":7422},"https:\u002F\u002Fdocs.catalyst.zoho.com\u002Fen\u002Fsdk\u002Fjava\u002Fv1\u002Foverview\u002F",[3136],[7424],{"type":48,"value":7421},{"type":42,"tag":98,"props":7426,"children":7427},{},[7428,7430],{"type":48,"value":7429},"Python SDK: ",{"type":42,"tag":208,"props":7431,"children":7434},{"href":7432,"rel":7433},"https:\u002F\u002Fdocs.catalyst.zoho.com\u002Fen\u002Fsdk\u002Fpython\u002Fv1\u002Foverview\u002F",[3136],[7435],{"type":48,"value":7432},{"type":42,"tag":98,"props":7437,"children":7438},{},[7439,7441],{"type":48,"value":7440},"Web SDK: ",{"type":42,"tag":208,"props":7442,"children":7445},{"href":7443,"rel":7444},"https:\u002F\u002Fdocs.catalyst.zoho.com\u002Fen\u002Fsdk\u002Fweb\u002Fv4\u002Foverview\u002F",[3136],[7446],{"type":48,"value":7443},{"type":42,"tag":98,"props":7448,"children":7449},{},[7450,7452],{"type":48,"value":7451},"CLI reference: ",{"type":42,"tag":208,"props":7453,"children":7456},{"href":7454,"rel":7455},"https:\u002F\u002Fdocs.catalyst.zoho.com\u002Fen\u002Fcli\u002Fv1\u002Fcli-command-reference\u002F",[3136],[7457],{"type":48,"value":7454},{"type":42,"tag":98,"props":7459,"children":7460},{},[7461,7463],{"type":48,"value":7462},"REST API: ",{"type":42,"tag":208,"props":7464,"children":7467},{"href":7465,"rel":7466},"https:\u002F\u002Fdocs.catalyst.zoho.com\u002Fen\u002Fapi\u002Fintroduction\u002Foverview-and-prerequisites\u002F",[3136],[7468],{"type":48,"value":7465},{"type":42,"tag":98,"props":7470,"children":7471},{},[7472,7474],{"type":48,"value":7473},"Tutorials: ",{"type":42,"tag":208,"props":7475,"children":7478},{"href":7476,"rel":7477},"https:\u002F\u002Fdocs.catalyst.zoho.com\u002Fen\u002Ftutorials\u002F",[3136],[7479],{"type":48,"value":7476},{"type":42,"tag":98,"props":7481,"children":7482},{},[7483,7485],{"type":48,"value":7484},"GitHub: ",{"type":42,"tag":208,"props":7486,"children":7489},{"href":7487,"rel":7488},"https:\u002F\u002Fgithub.com\u002Fcatalystbyzoho",[3136],[7490],{"type":48,"value":7487},{"type":42,"tag":98,"props":7492,"children":7493},{},[7494,7496],{"type":48,"value":7495},"Pricing: ",{"type":42,"tag":208,"props":7497,"children":7500},{"href":7498,"rel":7499},"https:\u002F\u002Fcatalyst.zoho.com\u002Fpricing.html",[3136],[7501],{"type":48,"value":7498},{"type":42,"tag":7503,"props":7504,"children":7505},"style",{},[7506],{"type":48,"value":7507},"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);}",{"items":7509,"total":7625},[7510,7528,7544,7556,7574,7595,7615],{"slug":7511,"name":7511,"fn":7512,"description":7513,"org":7514,"tags":7515,"stars":25,"repoUrl":26,"updatedAt":27},"accessibility-and-inclusive-visualization","make data visualizations accessible","Make data visualizations accessible and inclusive. Use when the user needs chart or diagram accessibility guidance, text alternatives for complex visuals, color and contrast review, keyboard support, reduced-motion behavior for animation or parallax, or an accessibility QA workflow for exported figures, UML-like diagrams, and dashboards.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[7516,7519,7522,7525],{"name":7517,"slug":7518,"type":15},"Accessibility","accessibility",{"name":7520,"slug":7521,"type":15},"Charts","charts",{"name":7523,"slug":7524,"type":15},"Data Visualization","data-visualization",{"name":7526,"slug":7527,"type":15},"Design","design",{"slug":7529,"name":7529,"fn":7530,"description":7531,"org":7532,"tags":7533,"stars":25,"repoUrl":26,"updatedAt":7543},"agent-browser","automate browser interactions for agents","Browser automation CLI for AI agents. Use when the user needs to interact with websites, verify dev server output, test web apps, navigate pages, fill forms, click buttons, take screenshots, extract data, or automate any browser task. Also triggers when a dev server starts so you can verify it visually.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[7534,7537,7540],{"name":7535,"slug":7536,"type":15},"Agents","agents",{"name":7538,"slug":7539,"type":15},"Browser Automation","browser-automation",{"name":7541,"slug":7542,"type":15},"Testing","testing","2026-04-06T18:41:03.44016",{"slug":7545,"name":7545,"fn":7546,"description":7547,"org":7548,"tags":7549,"stars":25,"repoUrl":26,"updatedAt":7555},"agent-browser-verify","verify dev server output with automated browser","Automated browser verification for dev servers. Triggers when a dev server starts to run a visual gut-check with agent-browser — verifies the page loads, checks for console errors, validates key UI elements, and reports pass\u002Ffail before continuing.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[7550,7551,7554],{"name":7538,"slug":7539,"type":15},{"name":7552,"slug":7553,"type":15},"Local Development","local-development",{"name":7541,"slug":7542,"type":15},"2026-04-06T18:41:17.526867",{"slug":7557,"name":7557,"fn":7558,"description":7559,"org":7560,"tags":7561,"stars":25,"repoUrl":26,"updatedAt":7573},"agents-sdk","build AI agents on Cloudflare Workers","Build AI agents on Cloudflare Workers using the Agents SDK. Load when creating stateful agents, durable workflows, real-time WebSocket apps, scheduled tasks, MCP servers, or chat applications. Covers Agent class, state management, callable RPC, Workflows integration, and React hooks. Biases towards retrieval from Cloudflare docs over pre-trained knowledge.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[7562,7563,7566,7569,7570],{"name":7535,"slug":7536,"type":15},{"name":7564,"slug":7565,"type":15},"Cloudflare Workers","cloudflare-workers",{"name":7567,"slug":7568,"type":15},"SDK","sdk",{"name":23,"slug":24,"type":15},{"name":7571,"slug":7572,"type":15},"WebSockets","websockets","2026-04-06T18:39:51.717063",{"slug":7575,"name":7575,"fn":7576,"description":7577,"org":7578,"tags":7579,"stars":25,"repoUrl":26,"updatedAt":7594},"ai-elements","build chat UIs with AI Elements","AI Elements component library guidance — pre-built React components for AI interfaces built on shadcn\u002Fui. Use when building chat UIs, message displays, tool call rendering, streaming responses, reasoning panels, or any AI-native interface with the AI SDK.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[7580,7582,7585,7588,7591],{"name":2821,"slug":7581,"type":15},"frontend",{"name":7583,"slug":7584,"type":15},"React","react",{"name":7586,"slug":7587,"type":15},"shadcn\u002Fui","shadcn-ui",{"name":7589,"slug":7590,"type":15},"UI Components","ui-components",{"name":7592,"slug":7593,"type":15},"Vercel","vercel","2026-04-06T18:40:59.619419",{"slug":7596,"name":7596,"fn":7597,"description":7598,"org":7599,"tags":7600,"stars":25,"repoUrl":26,"updatedAt":7614},"ai-gateway","configure Vercel AI Gateway","Vercel AI Gateway expert guidance. Use when configuring model routing, provider failover, cost tracking, or managing multiple AI providers through a unified API.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[7601,7604,7607,7610,7613],{"name":7602,"slug":7603,"type":15},"AI Infrastructure","ai-infrastructure",{"name":7605,"slug":7606,"type":15},"Cost Optimization","cost-optimization",{"name":7608,"slug":7609,"type":15},"LLM","llm",{"name":7611,"slug":7612,"type":15},"Performance","performance",{"name":7592,"slug":7593,"type":15},"2026-04-06T18:40:44.377464",{"slug":7616,"name":7616,"fn":7617,"description":7618,"org":7619,"tags":7620,"stars":25,"repoUrl":26,"updatedAt":7624},"ai-generation-persistence","implement persistence patterns for AI generations","AI generation persistence patterns — unique IDs, addressable URLs, database storage, and cost tracking for every LLM generation",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[7621,7622,7623],{"name":7605,"slug":7606,"type":15},{"name":17,"slug":18,"type":15},{"name":7608,"slug":7609,"type":15},"2026-04-06T18:41:08.513425",600,{"items":7627,"total":7823},[7628,7649,7672,7689,7705,7721,7740,7752,7766,7780,7792,7807],{"slug":7629,"name":7629,"fn":7630,"description":7631,"org":7632,"tags":7633,"stars":7646,"repoUrl":7647,"updatedAt":7648},"prior-auth-packet-builder","build healthcare prior authorization packets","Build a concise prior authorization packet from local case files and payer policy docs.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[7634,7637,7640,7643],{"name":7635,"slug":7636,"type":15},"Documents","documents",{"name":7638,"slug":7639,"type":15},"Healthcare","healthcare",{"name":7641,"slug":7642,"type":15},"Insurance","insurance",{"name":7644,"slug":7645,"type":15},"Regulatory Compliance","regulatory-compliance",28169,"https:\u002F\u002Fgithub.com\u002Fopenai\u002Fopenai-agents-python","2026-04-16T05:11:39.180399",{"slug":7650,"name":7650,"fn":7651,"description":7652,"org":7653,"tags":7654,"stars":7669,"repoUrl":7670,"updatedAt":7671},"aspnet-core","build ASP.NET Core web applications","Build, review, refactor, or architect ASP.NET Core web applications using current official guidance for .NET web development. Use when working on Blazor Web Apps, Razor Pages, MVC, Minimal APIs, controller-based Web APIs, SignalR, gRPC, middleware, dependency injection, configuration, authentication, authorization, testing, performance, deployment, or ASP.NET Core upgrades.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[7655,7658,7660,7663,7666],{"name":7656,"slug":7657,"type":15},".NET","dotnet",{"name":7659,"slug":7650,"type":15},"ASP.NET Core",{"name":7661,"slug":7662,"type":15},"Blazor","blazor",{"name":7664,"slug":7665,"type":15},"C#","csharp",{"name":7667,"slug":7668,"type":15},"Web Development","web-development",23787,"https:\u002F\u002Fgithub.com\u002Fopenai\u002Fskills","2026-04-12T05:07:02.819491",{"slug":7673,"name":7673,"fn":7674,"description":7675,"org":7676,"tags":7677,"stars":7669,"repoUrl":7670,"updatedAt":7688},"chatgpt-apps","build ChatGPT Apps SDK applications","Build, scaffold, refactor, and troubleshoot ChatGPT Apps SDK applications that combine an MCP server and widget UI. Use when Codex needs to design tools, register UI resources, wire the MCP Apps bridge or ChatGPT compatibility APIs, apply Apps SDK metadata or CSP or domain settings, or produce a docs-aligned project scaffold. Prefer a docs-first workflow by invoking the openai-docs skill or OpenAI developer docs MCP tools before generating code.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[7678,7681,7684,7687],{"name":7679,"slug":7680,"type":15},"Apps SDK","apps-sdk",{"name":7682,"slug":7683,"type":15},"ChatGPT","chatgpt",{"name":7685,"slug":7686,"type":15},"MCP","mcp",{"name":9,"slug":8,"type":15},"2026-04-12T05:07:05.468097",{"slug":7690,"name":7690,"fn":7691,"description":7692,"org":7693,"tags":7694,"stars":7669,"repoUrl":7670,"updatedAt":7704},"cli-creator","build CLIs from API docs","Build a composable CLI for Codex from API docs, an OpenAPI spec, existing curl examples, an SDK, a web app, an admin tool, or a local script. Use when the user wants Codex to create a command-line tool that can run from any repo, expose composable read\u002Fwrite commands, return stable JSON, manage auth, and pair with a companion skill.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[7695,7698,7701],{"name":7696,"slug":7697,"type":15},"API Development","api-development",{"name":7699,"slug":7700,"type":15},"CLI","cli",{"name":7702,"slug":7703,"type":15},"Codex","codex","2026-04-12T05:07:04.132762",{"slug":7706,"name":7706,"fn":7707,"description":7708,"org":7709,"tags":7710,"stars":7669,"repoUrl":7670,"updatedAt":7720},"cloudflare-deploy","deploy projects to Cloudflare","Deploy applications and infrastructure to Cloudflare using Workers, Pages, and related platform services. Use when the user asks to deploy, host, publish, or set up a project on Cloudflare.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[7711,7714,7717,7718],{"name":7712,"slug":7713,"type":15},"Cloudflare","cloudflare",{"name":7715,"slug":7716,"type":15},"Cloudflare Pages","cloudflare-pages",{"name":7564,"slug":7565,"type":15},{"name":7719,"slug":1971,"type":15},"Deployment","2026-04-12T05:07:14.275118",{"slug":7722,"name":7722,"fn":7723,"description":7724,"org":7725,"tags":7726,"stars":7669,"repoUrl":7670,"updatedAt":7739},"define-goal","define and set measurable project goals","Help the user define a concrete, measurable goal before starting work, especially when they ask to use the goal tool, create a goal, set an objective, clarify success criteria, or turn a fuzzy intention into a quantitative outcome. Use this skill for goal creation and goal refinement only; it does not manage durable snapshots, decision logs, or long-running execution artifacts.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[7727,7730,7733,7736],{"name":7728,"slug":7729,"type":15},"Productivity","productivity",{"name":7731,"slug":7732,"type":15},"Project Management","project-management",{"name":7734,"slug":7735,"type":15},"Strategy","strategy",{"name":7737,"slug":7738,"type":15},"Task Management","task-management","2026-05-23T06:17:16.870838",{"slug":7741,"name":7741,"fn":7742,"description":7743,"org":7744,"tags":7745,"stars":7669,"repoUrl":7670,"updatedAt":7751},"figma","translate Figma designs into code","Use the Figma MCP server to fetch design context, screenshots, variables, and assets from Figma, and to translate Figma nodes into production code. Trigger when a task involves Figma URLs, node IDs, design-to-code implementation, or Figma MCP setup and troubleshooting.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[7746,7747,7749,7750],{"name":7526,"slug":7527,"type":15},{"name":7748,"slug":7741,"type":15},"Figma",{"name":2821,"slug":7581,"type":15},{"name":7685,"slug":7686,"type":15},"2026-04-12T05:06:47.939943",{"slug":7753,"name":7753,"fn":7754,"description":7755,"org":7756,"tags":7757,"stars":7669,"repoUrl":7670,"updatedAt":7765},"figma-code-connect-components","connect Figma designs to code components","Connects Figma design components to code components using Code Connect mapping tools. Use when user says \"code connect\", \"connect this component to code\", \"map this component\", \"link component to code\", \"create code connect mapping\", or wants to establish mappings between Figma designs and code implementations. For canvas writes via `use_figma`, use `figma-use`.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[7758,7759,7762,7763,7764],{"name":7526,"slug":7527,"type":15},{"name":7760,"slug":7761,"type":15},"Design System","design-system",{"name":7748,"slug":7741,"type":15},{"name":2821,"slug":7581,"type":15},{"name":7589,"slug":7590,"type":15},"2026-05-10T05:59:52.971881",{"slug":7767,"name":7767,"fn":7768,"description":7769,"org":7770,"tags":7771,"stars":7669,"repoUrl":7670,"updatedAt":7779},"figma-create-design-system-rules","generate design system rules from Figma","Generates custom design system rules for the user's codebase. Use when user says \"create design system rules\", \"generate rules for my project\", \"set up design rules\", \"customize design system guidelines\", or wants to establish project-specific conventions for Figma-to-code workflows. Requires Figma MCP server connection.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[7772,7773,7774,7777,7778],{"name":7526,"slug":7527,"type":15},{"name":7760,"slug":7761,"type":15},{"name":7775,"slug":7776,"type":15},"Documentation","documentation",{"name":7748,"slug":7741,"type":15},{"name":2821,"slug":7581,"type":15},"2026-05-16T06:07:47.821474",{"slug":7781,"name":7781,"fn":7782,"description":7783,"org":7784,"tags":7785,"stars":7669,"repoUrl":7670,"updatedAt":7791},"figma-implement-design","translate Figma designs into application code","Translates Figma designs into production-ready application code with 1:1 visual fidelity. Use when implementing UI code from Figma files, when user mentions \"implement design\", \"generate code\", \"implement component\", provides Figma URLs, or asks to build components matching Figma specs. For Figma canvas writes via `use_figma`, use `figma-use`.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[7786,7787,7788,7789,7790],{"name":7526,"slug":7527,"type":15},{"name":7748,"slug":7741,"type":15},{"name":2821,"slug":7581,"type":15},{"name":7589,"slug":7590,"type":15},{"name":7667,"slug":7668,"type":15},"2026-05-16T06:07:40.583615",{"slug":7793,"name":7793,"fn":7794,"description":7795,"org":7796,"tags":7797,"stars":7669,"repoUrl":7670,"updatedAt":7806},"hatch-pet","create animated pets for Codex","Create, repair, validate, visually QA, and package Codex-compatible animated pets and pet spritesheets from character art, generated images, company or prospect brand cues, or visual references. Use when a user wants a lightweight-worker Codex pet workflow, a non-pixel custom pet style, a prospect or company mascot pet, or a full 8x9 animated pet atlas with transparent unused cells, QA contact sheets, and pet.json packaging. This skill composes the installed $imagegen system skill for visual generation and uses bundled scripts for deterministic spritesheet assembly.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[7798,7801,7802,7805],{"name":7799,"slug":7800,"type":15},"Animation","animation",{"name":7702,"slug":7703,"type":15},{"name":7803,"slug":7804,"type":15},"Creative","creative",{"name":7526,"slug":7527,"type":15},"2026-05-02T05:31:48.48485",{"slug":7808,"name":7808,"fn":7809,"description":7810,"org":7811,"tags":7812,"stars":7669,"repoUrl":7670,"updatedAt":7822},"imagegen","generate and edit raster images","Generate or edit raster images when the task benefits from AI-created bitmap visuals such as photos, illustrations, textures, sprites, mockups, or transparent-background cutouts. Use when Codex should create a brand-new image, transform an existing image, or derive visual variants from references, and the output should be a bitmap asset rather than repo-native code or vector. Do not use when the task is better handled by editing existing SVG\u002Fvector\u002Fcode-native assets, extending an established icon or logo system, or building the visual directly in HTML\u002FCSS\u002Fcanvas.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[7813,7814,7815,7818,7821],{"name":7803,"slug":7804,"type":15},{"name":7526,"slug":7527,"type":15},{"name":7816,"slug":7817,"type":15},"Image Generation","image-generation",{"name":7819,"slug":7820,"type":15},"Images","images",{"name":9,"slug":8,"type":15},"2026-05-15T06:23:24.312127",675]