[{"data":1,"prerenderedAt":446},["ShallowReactive",2],{"navigation":3,"\u002Fcontributing":169,"\u002Fcontributing-surround":441},[4,28,85,127,157],{"title":5,"path":6,"stem":7,"children":8,"icon":27},"Getting Started","\u002Fgetting-started","1.getting-started\u002F1.index",[9,12,17,22],{"title":10,"path":6,"stem":7,"icon":11},"Introduction","i-lucide-house",{"title":13,"path":14,"stem":15,"icon":16},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",{"title":18,"path":19,"stem":20,"icon":21},"Quick start","\u002Fgetting-started\u002Fquick-start","1.getting-started\u002F3.quick-start","i-lucide-zap",{"title":23,"path":24,"stem":25,"icon":26},"Architecture","\u002Fgetting-started\u002Farchitecture","1.getting-started\u002F4.architecture","i-lucide-layers","i-lucide-rocket",{"title":29,"icon":30,"path":31,"stem":32,"children":33,"page":84},"Concepts","i-lucide-lightbulb","\u002Fconcepts","2.concepts",[34,39,44,49,54,59,64,69,74,79],{"title":35,"path":36,"stem":37,"icon":38},"Durable agents","\u002Fconcepts\u002Fdurable-agents","2.concepts\u002F1.durable-agents","i-lucide-infinity",{"title":40,"path":41,"stem":42,"icon":43},"Glossary","\u002Fconcepts\u002Fglossary","2.concepts\u002F10.glossary","i-lucide-book-a",{"title":45,"path":46,"stem":47,"icon":48},"Restate in five minutes","\u002Fconcepts\u002Frestate-primer","2.concepts\u002F2.restate-primer","i-lucide-cpu",{"title":50,"path":51,"stem":52,"icon":53},"Entities & addressing","\u002Fconcepts\u002Fentities-addressing","2.concepts\u002F3.entities-addressing","i-lucide-at-sign",{"title":55,"path":56,"stem":57,"icon":58},"Timelines & events","\u002Fconcepts\u002Ftimelines-events","2.concepts\u002F4.timelines-events","i-lucide-list-ordered",{"title":60,"path":61,"stem":62,"icon":63},"Projections & the catalog","\u002Fconcepts\u002Fprojections-catalog","2.concepts\u002F5.projections-catalog","i-lucide-database",{"title":65,"path":66,"stem":67,"icon":68},"Workspaces & execution","\u002Fconcepts\u002Fworkspaces","2.concepts\u002F6.workspaces","i-lucide-terminal",{"title":70,"path":71,"stem":72,"icon":73},"Harnesses","\u002Fconcepts\u002Fharnesses","2.concepts\u002F7.harnesses","i-lucide-plug",{"title":75,"path":76,"stem":77,"icon":78},"Multi-agent patterns","\u002Fconcepts\u002Fmulti-agent","2.concepts\u002F8.multi-agent","i-lucide-network",{"title":80,"path":81,"stem":82,"icon":83},"Lifecycle & control","\u002Fconcepts\u002Flifecycle","2.concepts\u002F9.lifecycle","i-lucide-sliders-horizontal",false,{"title":86,"icon":87,"path":88,"stem":89,"children":90,"page":84},"Guides","i-lucide-book-open","\u002Fguides","3.guides",[91,106],{"title":92,"icon":93,"path":94,"stem":95,"children":96,"page":84},"Agents","i-lucide-bot","\u002Fguides\u002Fagents","3.guides\u002F1.agents",[97,101],{"title":98,"path":99,"stem":100,"icon":93},"Building agents","\u002Fguides\u002Fagents\u002Fbuilding-agents","3.guides\u002F1.agents\u002F1.building-agents",{"title":102,"path":103,"stem":104,"icon":105},"Frontend integration","\u002Fguides\u002Fagents\u002Ffrontend-integration","3.guides\u002F1.agents\u002F2.frontend-integration","i-lucide-monitor",{"title":107,"icon":108,"path":109,"stem":110,"children":111,"page":84},"Operations","i-lucide-server-cog","\u002Fguides\u002Foperations","3.guides\u002F2.operations",[112,117,122],{"title":113,"path":114,"stem":115,"icon":116},"Self-hosting","\u002Fguides\u002Foperations\u002Fself-hosting","3.guides\u002F2.operations\u002F1.self-hosting","i-lucide-server",{"title":118,"path":119,"stem":120,"icon":121},"Auth & API keys","\u002Fguides\u002Foperations\u002Fauth-api-keys","3.guides\u002F2.operations\u002F2.auth-api-keys","i-lucide-key-round",{"title":123,"path":124,"stem":125,"icon":126},"Backup & restore","\u002Fguides\u002Foperations\u002Fbackup-restore","3.guides\u002F2.operations\u002F3.backup-restore","i-lucide-database-backup",{"title":128,"icon":129,"path":130,"stem":131,"children":132,"page":84},"Reference","i-lucide-book-marked","\u002Freference","4.reference",[133,138,143,148,153],{"title":134,"path":135,"stem":136,"icon":137},"Event schema","\u002Freference\u002Fevents","4.reference\u002F1.events","i-lucide-list-tree",{"title":139,"path":140,"stem":141,"icon":142},"Addressing","\u002Freference\u002Faddressing","4.reference\u002F2.addressing","i-lucide-map-pin",{"title":144,"path":145,"stem":146,"icon":147},"Gateway HTTP API","\u002Freference\u002Fgateway-api","4.reference\u002F3.gateway-api","i-lucide-webhook",{"title":149,"path":150,"stem":151,"icon":152},"CLI","\u002Freference\u002Fcli","4.reference\u002F4.cli","i-lucide-square-terminal",{"title":154,"path":155,"stem":156,"icon":83},"Configuration","\u002Freference\u002Fconfiguration","4.reference\u002F5.configuration",{"title":158,"path":159,"stem":160,"children":161,"icon":163},"Contributing","\u002Fcontributing","5.contributing\u002F1.index",[162,164],{"title":158,"path":159,"stem":160,"icon":163},"i-lucide-git-pull-request",{"title":165,"path":166,"stem":167,"icon":168},"The package map","\u002Fcontributing\u002Fpackage-map","5.contributing\u002F2.package-map","i-lucide-boxes",{"id":170,"title":158,"body":171,"description":434,"extension":435,"links":436,"meta":437,"navigation":438,"path":159,"seo":439,"stem":160,"__hash__":440},"docs\u002F5.contributing\u002F1.index.md",{"type":172,"value":173,"toc":427},"minimark",[174,190,195,207,235,239,242,258,261,283,293,308,312,352,356,363,378,382,393,402,405,414,423],[175,176,177,178,182,183,186,187,189],"p",{},"You only need this section if you're working on teaspill itself. Everything here is about the source repository — its layout, how to build and test it, and how the pieces fit together. If you're building agents ",[179,180,181],"em",{},"with"," teaspill, the ",[184,185,86],"a",{"href":99}," and ",[184,188,128],{"href":135}," are where you want to be.",[191,192,194],"h2",{"id":193},"the-repository","The repository",[175,196,197,198,202,203,206],{},"teaspill is a single pnpm workspace. Every published package lives under ",[199,200,201],"code",{},"packages\u002F"," — the SDKs and CLI you use, the platform services you run, and the quality kits that keep the durability guarantees honest. The ",[184,204,205],{"href":166},"package map"," walks through all thirteen.",[175,208,209,210,186,213,216,217,186,220,222,223,226,227,230,231,234],{},"Alongside the packages, the repo root carries what runs and ships them: ",[199,211,212],{},"docker-compose.yml",[199,214,215],{},"docker-compose.overlay.yml"," (the self-hosted stack plus the reference deployment that the ",[184,218,219],{"href":19},"quick start",[184,221,113],{"href":114}," guide drive), ",[199,224,225],{},".env.example",", and ",[199,228,229],{},"scripts\u002F"," for backup and restore. This documentation site is itself a workspace package (",[199,232,233],{},"@teaspill\u002Fdocs",").",[191,236,238],{"id":237},"running-the-repo","Running the repo",[175,240,241],{},"You need Node 20.19 or newer and pnpm. Install once from the repo root:",[243,244,249],"pre",{"className":245,"code":246,"language":247,"meta":248,"style":248},"language-sh shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","pnpm install\n","sh","",[199,250,251],{"__ignoreMap":248},[252,253,256],"span",{"class":254,"line":255},"line",1,[252,257,246],{},[175,259,260],{},"Three checks make up the bar every change must clear:",[243,262,264],{"className":245,"code":263,"language":247,"meta":248,"style":248},"pnpm -r typecheck\npnpm -r test\npnpm lint\n",[199,265,266,271,277],{"__ignoreMap":248},[252,267,268],{"class":254,"line":255},[252,269,270],{},"pnpm -r typecheck\n",[252,272,274],{"class":254,"line":273},2,[252,275,276],{},"pnpm -r test\n",[252,278,280],{"class":254,"line":279},3,[252,281,282],{},"pnpm lint\n",[175,284,285,288,289,292],{},[199,286,287],{},"pnpm -r"," fans out across the whole workspace. All three must be green before any work is committed. Changes to the documentation site add one more: ",[199,290,291],{},"pnpm --filter @teaspill\u002Fdocs generate"," must prerender cleanly — a docs site that doesn't build is not done.",[175,294,295,296,299,300,303,304,307],{},"Most tests run entirely offline against in-process fakes and the real durability primitives, so the default run needs nothing else installed. Suites that need live infrastructure — a running gateway, Postgres, or the durable streams server — skip themselves when the service isn't there, which keeps the offline run green. You opt in by pointing a suite at a real service: set ",[199,297,298],{},"TEASPILL_STACK_URL"," (and an API key) for the end-to-end conformance suites, ",[199,301,302],{},"DATABASE_URL"," for the Postgres integration tests, ",[199,305,306],{},"TEASPILL_CHAOS=1"," for real fault injection, and so on. Each package's README lists the exact variables it reads.",[191,309,311],{"id":310},"conventions","Conventions",[313,314,315,340,346],"ul",{},[316,317,318,322,323,326,327,326,330,326,333,326,336,339],"li",{},[319,320,321],"strong",{},"Commits"," use conventional-commit subjects: ",[199,324,325],{},"feat:",", ",[199,328,329],{},"fix:",[199,331,332],{},"chore:",[199,334,335],{},"docs:",[199,337,338],{},"test:",".",[316,341,342,345],{},[319,343,344],{},"Language."," TypeScript throughout, ESM only, Node 20.19+.",[316,347,348,351],{},[319,349,350],{},"Pinned versions."," TypeScript is capped for compatibility with the lint toolchain, and several dependencies are exact-pinned — never with a caret — because they must match a protocol on the other side: the Restate SDK, the durable streams client (paired to the server image), and the Claude Agent SDK (paired to its goldens). Bump these deliberately, one at a time, and re-run the affected suite.",[191,353,355],{"id":354},"where-the-design-history-lives","Where the design history lives",[175,357,358,359,362],{},"The docs teach how teaspill works today. They don't carry the ",[179,360,361],{},"why"," behind each decision — that history is deep, and it belongs to contributors.",[175,364,365,366,374,375,234],{},"teaspill's full design history — every architectural decision and why — lives in the repository under ",[184,367,371],{"href":368,"rel":369},"https:\u002F\u002Fgithub.com\u002Feverynow-dev\u002Fteaspill\u002Ftree\u002Fmain\u002Fwork",[370],"nofollow",[199,372,373],{},"work\u002F"," (start with ",[199,376,377],{},"work\u002FREADME.md",[191,379,381],{"id":380},"the-documentation-site","The documentation site",[175,383,384,385,388,389,392],{},"This site lives in ",[199,386,387],{},"packages\u002Fdocs",", built on Nuxt Content. Every page is a Markdown file under ",[199,390,391],{},"content\u002F",", ordered by numeric filename prefixes. To work on it:",[243,394,396],{"className":245,"code":395,"language":247,"meta":248,"style":248},"pnpm --filter @teaspill\u002Fdocs dev\n",[199,397,398],{"__ignoreMap":248},[252,399,400],{"class":254,"line":255},[252,401,395],{},[175,403,404],{},"That serves the site locally with hot reload. To produce the static build that gets deployed:",[243,406,408],{"className":245,"code":407,"language":247,"meta":248,"style":248},"pnpm --filter @teaspill\u002Fdocs generate\n",[199,409,410],{"__ignoreMap":248},[252,411,412],{"class":254,"line":255},[252,413,407],{},[415,416,417],"note",{},[175,418,419,420,422],{},"Ready to see how the code is organized? The ",[184,421,205],{"href":166}," covers every package — what it's for, its public surface, and whether it's something you use or something you'd only touch as a contributor.",[424,425,426],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":248,"searchDepth":255,"depth":273,"links":428},[429,430,431,432,433],{"id":193,"depth":273,"text":194},{"id":237,"depth":273,"text":238},{"id":310,"depth":273,"text":311},{"id":354,"depth":273,"text":355},{"id":380,"depth":273,"text":381},"How to work on teaspill itself — the repo layout, the build and test bar, the conventions, and where the design history lives.","md",null,{},{"icon":163},{"title":158,"description":434},"nOLpAoSsSzPA7SjiPO09CsH7LAe4j33P-nJXHfHYc2M",[442,444],{"title":154,"path":155,"stem":156,"description":443,"icon":83,"children":-1},"Every environment variable, grouped by surface — the compose stack, the gateway, the CLI and clients, and the developer-deployed agent-loop and executor.",{"title":165,"path":166,"stem":167,"description":445,"icon":168,"children":-1},"All thirteen teaspill packages — what each is for, its public surface, and whether you use it or only touch it as a contributor.",1784473424224]