[{"data":1,"prerenderedAt":891},["ShallowReactive",2],{"navigation":3,"\u002Freference\u002Faddressing":169,"\u002Freference\u002Faddressing-surround":886},[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":139,"body":171,"description":879,"extension":880,"links":881,"meta":882,"navigation":883,"path":140,"seo":884,"stem":141,"__hash__":885},"docs\u002F4.reference\u002F2.addressing.md",{"type":172,"value":173,"toc":869},"minimark",[174,186,202,207,328,334,338,355,365,388,433,436,462,466,498,511,515,531,605,621,625,639,663,667,672,807,830],[175,176,177,178,182,183,185],"p",{},"Every running agent is an ",[179,180,181],"a",{"href":51},"entity"," with one URL-shaped id, and every stream and workspace it uses derives from that id. This page is the grammar and the derivation rules; for the mental model, read ",[179,184,50],{"href":51},".",[175,187,188,189,193,194,197,198,201],{},"All the derivation functions live in ",[190,191,192],"code",{},"@teaspill\u002Fschema"," (",[190,195,196],{},"addressing.ts","). They are pure and validate their inputs — a malformed identifier throws ",[190,199,200],{},"AddressingError"," rather than reaching the catalog or a stream.",[203,204,206],"h2",{"id":205},"at-a-glance","At a glance",[208,209,210,226],"table",{},[211,212,213],"thead",{},[214,215,216,220,223],"tr",{},[217,218,219],"th",{},"Thing",[217,221,222],{},"Canonical form",[217,224,225],{},"Example (default tenant)",[227,228,229,249,264,279,294,309],"tbody",{},[214,230,231,239,244],{},[232,233,234,235,238],"td",{},"Entity URL (",[190,236,237],{},"entityId",")",[232,240,241],{},[190,242,243],{},"\u002Ft\u002F\u003Ctenant>\u002Fa\u002F\u003Ctype>\u002F\u003Cid>",[232,245,246],{},[190,247,248],{},"\u002Ft\u002Fdefault\u002Fa\u002Fresearcher\u002F01j9z8k3q…",[214,250,251,254,259],{},[232,252,253],{},"Entity URL, gateway short form",[232,255,256],{},[190,257,258],{},"\u002Fa\u002F\u003Ctype>\u002F\u003Cid>",[232,260,261],{},[190,262,263],{},"\u002Fa\u002Fresearcher\u002F01j9z8k3q…",[214,265,266,269,274],{},[232,267,268],{},"Timeline stream (server key)",[232,270,271],{},[190,272,273],{},"\u002Ft\u002F\u003Ctenant>\u002Fagents\u002F\u003Ctype>\u002F\u003Cid>\u002Ftimeline",[232,275,276],{},[190,277,278],{},"\u002Ft\u002Fdefault\u002Fagents\u002Fresearcher\u002F01j9…\u002Ftimeline",[214,280,281,284,289],{},[232,282,283],{},"Deltas stream",[232,285,286],{},[190,287,288],{},"\u002Ft\u002F\u003Ctenant>\u002Fagents\u002F\u003Ctype>\u002F\u003Cid>\u002Fdeltas",[232,290,291],{},[190,292,293],{},"\u002Ft\u002Fdefault\u002Fagents\u002Fresearcher\u002F01j9…\u002Fdeltas",[214,295,296,299,304],{},[232,297,298],{},"Workspace stdout stream",[232,300,301],{},[190,302,303],{},"\u002Ft\u002F\u003Ctenant>\u002Fworkspaces\u002F\u003Cname>\u002Fstdout",[232,305,306],{},[190,307,308],{},"\u002Ft\u002Fdefault\u002Fworkspaces\u002Fa-researcher-01j9…\u002Fstdout",[214,310,311,314,323],{},[232,312,313],{},"Gateway stream URL",[232,315,316,319,320],{},[190,317,318],{},"\u002Fstreams"," + ",[190,321,322],{},"\u003CstreamPath>",[232,324,325],{},[190,326,327],{},"\u002Fstreams\u002Ft\u002Fdefault\u002Fagents\u002F…\u002Ftimeline",[175,329,330,331,333],{},"The entity URL is the same string everywhere — the catalog row's primary key, the ",[190,332,237],{}," in every event, and the value browsers hold to read a stream. There is no separate opaque id.",[203,335,337],{"id":336},"segment-grammar","Segment grammar",[175,339,340,341,344,345,344,348,344,351,354],{},"Every segment — ",[190,342,343],{},"\u003Ctenant>",", ",[190,346,347],{},"\u003Ctype>",[190,349,350],{},"\u003Cid>",[190,352,353],{},"\u003Cname>"," — matches the same charset:",[356,357,362],"pre",{"className":358,"code":360,"language":361},[359],"language-text","^[a-z0-9][a-z0-9_-]*$\n","text",[190,363,360],{"__ignoreMap":364},"",[175,366,367,368,371,372,375,376,344,378,344,381,384,385,387],{},"Lowercase alphanumerics, ",[190,369,370],{},"-",", and ",[190,373,374],{},"_","; must start with an alphanumeric. No ",[190,377,185],{},[190,379,380],{},"\u002F",[190,382,383],{},"%",", uppercase, or unicode inside a segment; ",[190,386,380],{}," is the path separator only.",[208,389,390,400],{},[211,391,392],{},[214,393,394,397],{},[217,395,396],{},"Segment",[217,398,399],{},"Max length",[227,401,402,410,418,426],{},[214,403,404,407],{},[232,405,406],{},"tenant",[232,408,409],{},"32",[214,411,412,415],{},[232,413,414],{},"type",[232,416,417],{},"48",[214,419,420,423],{},[232,421,422],{},"id",[232,424,425],{},"64",[214,427,428,431],{},[232,429,430],{},"workspace name",[232,432,425],{},[175,434,435],{},"Lowercase-only avoids \"same entity, two URLs\" bugs on case-insensitive filesystems, where the history store writes one file per stream. The length caps keep the full timeline stream path legible on disk.",[175,437,438,439,441,442,445,446,449,450,453,454,458,459,461],{},"The ",[190,440,343],{}," segment is a deployment-level constant (",[190,443,444],{},"TEASPILL_TENANT",", default ",[190,447,448],{},"default","). One deployment is one tenant, so in practice every identifier reads ",[190,451,452],{},"\u002Ft\u002Fdefault\u002F…",". The gateway accepts and emits the tenant-relative ",[455,456,457],"strong",{},"short form"," ",[190,460,258],{}," for ergonomics and expands it to the canonical form before touching anything durable.",[203,463,465],{"id":464},"instance-ids","Instance ids",[467,468,469,484],"ul",{},[470,471,472,475,476,479,480,483],"li",{},[455,473,474],{},"Default: a lowercase ULID"," (26 chars, time-sortable). Generated by ",[190,477,478],{},"newInstanceId()",". Sortable means ",[190,481,482],{},"ORDER BY id"," roughly matches creation order — convenient for listings and catalog queries.",[470,485,486,489,490,493,494,497],{},[455,487,488],{},"Caller-supplied ids"," enable deterministic, idempotent spawn: key a child's id off ",[190,491,492],{},"(parent, role)"," and a retried spawn reattaches to the same instance instead of creating a duplicate. A supplied id must match the segment grammar (validated by ",[190,495,496],{},"assertInstanceId","); the gateway rejects a non-conforming id with a 400.",[499,500,501],"note",{},[175,502,503,504,507,508,510],{},"Identity is the full URL ",[190,505,506],{},"(tenant, type, id)",". A second spawn with the same id lands on the same object and reattaches — it does not create a duplicate. See ",[179,509,75],{"href":76}," for the deterministic-worker pattern.",[203,512,514],{"id":513},"stream-paths","Stream paths",[175,516,517,518,521,522,319,524,527,528,530],{},"Each stream is an independent append-only log. The paths below are the ",[455,519,520],{},"server keys","; a client reaches them through the gateway at ",[190,523,318],{},[190,525,526],{},"\u003Cpath>"," (see the ",[179,529,144],{"href":145},").",[208,532,533,546],{},[211,534,535],{},[214,536,537,540,543],{},[217,538,539],{},"Stream",[217,541,542],{},"Server key",[217,544,545],{},"Helper",[227,547,548,562,576,590],{},[214,549,550,553,557],{},[232,551,552],{},"Timeline (authoritative history)",[232,554,555],{},[190,556,273],{},[232,558,559],{},[190,560,561],{},"timelineStreamPath(url)",[214,563,564,567,571],{},[232,565,566],{},"Deltas (live token fragments)",[232,568,569],{},[190,570,288],{},[232,572,573],{},[190,574,575],{},"deltasStreamPath(url)",[214,577,578,581,585],{},[232,579,580],{},"Workspace stdout (coarse)",[232,582,583],{},[190,584,303],{},[232,586,587],{},[190,588,589],{},"workspaceStdoutStreamPath(key)",[214,591,592,595,600],{},[232,593,594],{},"Workspace exec stdout (per-exec)",[232,596,597],{},[190,598,599],{},"\u002Ft\u002F\u003Ctenant>\u002Fworkspaces\u002F\u003Cname>\u002Fexec\u002F\u003CrunId>\u002Fstdout",[232,601,602],{},[190,603,604],{},"workspaceExecStdoutStreamPath(key, runId)",[175,606,607,608,611,612,614,615,617,618,185],{},"Note the collection segment is ",[190,609,610],{},"agents"," (plural) in a stream path versus the ",[190,613,179],{}," marker in an entity URL — both derive from the same entity URL. Prefix any server key with ",[190,616,318],{}," for the client-facing URL: ",[190,619,620],{},"gatewayStreamUrl(streamPath)",[203,622,624],{"id":623},"workspace-keys","Workspace keys",[175,626,627,628,631,632,635,636,638],{},"A ",[179,629,630],{"href":66},"workspace"," key is ",[190,633,634],{},"\u003Ctenant>\u002F\u003Cname>",". The ",[190,637,353],{}," comes from one of two places:",[467,640,641,654],{},[470,642,643,458,646,649,650,653],{},[455,644,645],{},"Private (default, one per entity):",[190,647,648],{},"a-\u003Ctype>-\u003Cid>",", derived from the owning entity URL by ",[190,651,652],{},"privateWorkspaceKey(url)",". Unique by construction, traceable back to its agent.",[470,655,656,659,660,662],{},[455,657,658],{},"Shared \u002F named:"," a caller-supplied ",[190,661,353],{}," passed at spawn (same segment grammar). Several entities may point at the same shared key; serialization still holds because it is keyed on the workspace, not the entity.",[203,664,666],{"id":665},"helpers","Helpers",[175,668,669,670,185],{},"Exported from ",[190,671,192],{},[208,673,674,684],{},[211,675,676],{},[214,677,678,681],{},[217,679,680],{},"Function",[217,682,683],{},"Returns",[227,685,686,696,709,719,733,742,752,763,774,787,796],{},[214,687,688,693],{},[232,689,690],{},[190,691,692],{},"entityUrl(tenant, type, id)",[232,694,695],{},"Canonical entity URL.",[214,697,698,703],{},[232,699,700],{},[190,701,702],{},"parseEntityUrl(url)",[232,704,705,708],{},[190,706,707],{},"{ tenant, type, id }"," (revalidates).",[214,710,711,716],{},[232,712,713],{},[190,714,715],{},"isEntityUrl(url)",[232,717,718],{},"Boolean guard.",[214,720,721,730],{},[232,722,723,726,727],{},[190,724,725],{},"toHttpForm(url)"," \u002F ",[190,728,729],{},"fromHttpForm(path, tenant?)",[232,731,732],{},"Canonical ↔ gateway short form.",[214,734,735,739],{},[232,736,737],{},[190,738,478],{},[232,740,741],{},"A fresh lowercase ULID.",[214,743,744,749],{},[232,745,746],{},[190,747,748],{},"assertInstanceId(id)",[232,750,751],{},"Throws unless the id matches the grammar.",[214,753,754,760],{},[232,755,756,726,758],{},[190,757,561],{},[190,759,575],{},[232,761,762],{},"Server stream keys.",[214,764,765,769],{},[232,766,767],{},[190,768,620],{},[232,770,771,772,185],{},"Prefix a server key with ",[190,773,318],{},[214,775,776,784],{},[232,777,778,726,781],{},[190,779,780],{},"workspaceKey(tenant, name)",[190,782,783],{},"parseWorkspaceKey(key)",[232,785,786],{},"Build \u002F split a workspace key.",[214,788,789,793],{},[232,790,791],{},[190,792,652],{},[232,794,795],{},"The default per-entity workspace key.",[214,797,798,804],{},[232,799,800,726,802],{},[190,801,589],{},[190,803,604],{},[232,805,806],{},"Workspace output stream keys.",[175,808,809,810,344,813,344,816,344,819,822,823,344,826,829],{},"The regexes (",[190,811,812],{},"TENANT_RE",[190,814,815],{},"TYPE_RE",[190,817,818],{},"ID_RE",[190,820,821],{},"WORKSPACE_NAME_RE",") and constants (",[190,824,825],{},"DEFAULT_TENANT",[190,827,828],{},"GATEWAY_STREAMS_PREFIX",") are exported too.",[831,832,833],"accordion",{},[834,835,838],"accordion-item",{"icon":836,"label":837},"i-lucide-microscope","How entity URLs map to Restate objects",[175,839,840,841,843,844,344,847,344,850,344,853,856,857,860,861,863,864,860,866,868],{},"Internally, each identifier resolves to a Restate virtual object — the coordination primitive teaspill runs on. ",[190,842,192],{}," exports the mapping (",[190,845,846],{},"restateAgentKey",[190,848,849],{},"restateWorkspaceKey",[190,851,852],{},"restateCronKey",[190,854,855],{},"steerKey","), but you never call these as a teaspill user: the gateway and the platform own them. An agent object is service ",[190,858,859],{},"agent.\u003Ctype>",", keyed by ",[190,862,350],{},"; a workspace object is service ",[190,865,630],{},[190,867,634],{},". The tenant is not part of any Restate key — one deployment is one tenant. This surface is contributor-facing; the package map covers it.",{"title":364,"searchDepth":870,"depth":871,"links":872},1,2,[873,874,875,876,877,878],{"id":205,"depth":871,"text":206},{"id":336,"depth":871,"text":337},{"id":464,"depth":871,"text":465},{"id":513,"depth":871,"text":514},{"id":623,"depth":871,"text":624},{"id":665,"depth":871,"text":666},"Entity URLs, the gateway short form, stream paths, workspace keys, the segment grammar, and the addressing helpers in @teaspill\u002Fschema.","md",null,{},{"icon":142},{"title":139,"description":879},"a8b16fKvS9WRav8sucLssAqIJes5tylXjyOX9EdSZN0",[887,889],{"title":134,"path":135,"stem":136,"description":888,"icon":137,"children":-1},"The canonical timeline event — envelope, the fifteen event types, token deltas, and the helpers exported from @teaspill\u002Fschema.",{"title":144,"path":145,"stem":146,"description":890,"icon":147,"children":-1},"The gateway's public HTTP surface — command endpoints, stream and shape proxies, deployment registration, auth, idempotency, and status codes.",1784473423433]