[{"data":1,"prerenderedAt":722},["ShallowReactive",2],{"docs-\u002Fdocs\u002Fv2\u002Fagent\u002Fserver\u002Fapi":3},{"id":4,"title":5,"body":6,"description":17,"extension":715,"meta":716,"navigation":454,"path":718,"seo":719,"stem":720,"__hash__":721},"docs\u002Fdocs\u002Fv2\u002Fagent\u002Fserver\u002Fapi\u002Findex.md","api\u002F",{"type":7,"value":8,"toc":709},"minimark",[9,14,18,117,142,147,158,245,354,357,361,364,596,602,606,609,642,646,649,705],[10,11,13],"h1",{"id":12},"serverapi","server\u002Fapi\u002F",[15,16,17],"p",{},"File-based routing. Filename maps to path. HTTP method is encoded in the filename suffix.",[19,20,25],"pre",{"className":21,"code":22,"language":23,"meta":24,"style":24},"language-bash shiki shiki-themes dark-plus","server\u002Fapi\u002F\n├── webhooks\u002F\n│   └── github.post.ts   → POST \u002Fapi\u002Fwebhooks\u002Fgithub\n├── chat.post.ts         → POST \u002Fapi\u002Fchat\n├── health.get.ts        → GET  \u002Fapi\u002Fhealth\n└── scout.post.ts        → POST \u002Fapi\u002Fscout\n","bash","",[26,27,28,37,47,68,84,101],"code",{"__ignoreMap":24},[29,30,33],"span",{"class":31,"line":32},"line",1,[29,34,36],{"class":35},"sCudf","server\u002Fapi\u002F\n",[29,38,40,43],{"class":31,"line":39},2,[29,41,42],{"class":35},"├──",[29,44,46],{"class":45},"sKc5r"," webhooks\u002F\n",[29,48,50,53,56,59,62,65],{"class":31,"line":49},3,[29,51,52],{"class":35},"│",[29,54,55],{"class":45},"   └──",[29,57,58],{"class":45}," github.post.ts",[29,60,61],{"class":45},"   →",[29,63,64],{"class":45}," POST",[29,66,67],{"class":45}," \u002Fapi\u002Fwebhooks\u002Fgithub\n",[29,69,71,73,76,79,81],{"class":31,"line":70},4,[29,72,42],{"class":35},[29,74,75],{"class":45}," chat.post.ts",[29,77,78],{"class":45},"         →",[29,80,64],{"class":45},[29,82,83],{"class":45}," \u002Fapi\u002Fchat\n",[29,85,87,89,92,95,98],{"class":31,"line":86},5,[29,88,42],{"class":35},[29,90,91],{"class":45}," health.get.ts",[29,93,94],{"class":45},"        →",[29,96,97],{"class":45}," GET",[29,99,100],{"class":45},"  \u002Fapi\u002Fhealth\n",[29,102,104,107,110,112,114],{"class":31,"line":103},6,[29,105,106],{"class":35},"└──",[29,108,109],{"class":45}," scout.post.ts",[29,111,94],{"class":45},[29,113,64],{"class":45},[29,115,116],{"class":45}," \u002Fapi\u002Fscout\n",[15,118,119,120,123,124,123,127,123,130,133,134,137,138,141],{},"Append ",[26,121,122],{},".get",", ",[26,125,126],{},".post",[26,128,129],{},".put",[26,131,132],{},".patch",", or ",[26,135,136],{},".delete"," before ",[26,139,140],{},".ts",". No suffix accepts\nany method.",[143,144,146],"h2",{"id":145},"calling-the-agent","Calling the agent",[15,148,149,150,153,154,157],{},"Routes don't invoke the agent automatically. Use ",[26,151,152],{},"axon.request()"," for a complete result,\nor ",[26,155,156],{},"axon.stream()"," to pipe entries as they arrive.",[19,159,163],{"className":160,"code":161,"language":162,"meta":24,"style":24},"language-ts shiki shiki-themes dark-plus","\u002F\u002F server\u002Fapi\u002Fscout.post.ts\nexport default defineEventHandler(() => {\n    const { stream } = axon.scripts.stream(\"scout\")\n    return stream\n})\n","ts",[26,164,165,171,194,232,240],{"__ignoreMap":24},[29,166,167],{"class":31,"line":32},[29,168,170],{"class":169},"sOLPB","\u002F\u002F server\u002Fapi\u002Fscout.post.ts\n",[29,172,173,177,180,183,187,191],{"class":31,"line":39},[29,174,176],{"class":175},"sYbnZ","export",[29,178,179],{"class":175}," default",[29,181,182],{"class":35}," defineEventHandler",[29,184,186],{"class":185},"sTNBD","(() ",[29,188,190],{"class":189},"scz_3","=>",[29,192,193],{"class":185}," {\n",[29,195,196,199,202,206,209,213,216,219,221,223,226,229],{"class":31,"line":49},[29,197,198],{"class":189},"    const",[29,200,201],{"class":185}," { ",[29,203,205],{"class":204},"s9McN","stream",[29,207,208],{"class":185}," } = ",[29,210,212],{"class":211},"s3F5K","axon",[29,214,215],{"class":185},".",[29,217,218],{"class":211},"scripts",[29,220,215],{"class":185},[29,222,205],{"class":35},[29,224,225],{"class":185},"(",[29,227,228],{"class":45},"\"scout\"",[29,230,231],{"class":185},")\n",[29,233,234,237],{"class":31,"line":70},[29,235,236],{"class":175},"    return",[29,238,239],{"class":211}," stream\n",[29,241,242],{"class":31,"line":86},[29,243,244],{"class":185},"})\n",[19,246,248],{"className":160,"code":247,"language":162,"meta":24,"style":24},"\u002F\u002F server\u002Fapi\u002Freview.post.ts\nexport default defineEventHandler(async event => {\n    const { issueId } = await readBody(event)\n    const prompt = await axon.prompt(\"code-review\", { issueId })\n    return axon.stream({ prompt })\n})\n",[26,249,250,255,276,300,333,350],{"__ignoreMap":24},[29,251,252],{"class":31,"line":32},[29,253,254],{"class":169},"\u002F\u002F server\u002Fapi\u002Freview.post.ts\n",[29,256,257,259,261,263,265,268,271,274],{"class":31,"line":39},[29,258,176],{"class":175},[29,260,179],{"class":175},[29,262,182],{"class":35},[29,264,225],{"class":185},[29,266,267],{"class":189},"async",[29,269,270],{"class":211}," event",[29,272,273],{"class":189}," =>",[29,275,193],{"class":185},[29,277,278,280,282,285,287,290,293,295,298],{"class":31,"line":49},[29,279,198],{"class":189},[29,281,201],{"class":185},[29,283,284],{"class":204},"issueId",[29,286,208],{"class":185},[29,288,289],{"class":175},"await",[29,291,292],{"class":35}," readBody",[29,294,225],{"class":185},[29,296,297],{"class":211},"event",[29,299,231],{"class":185},[29,301,302,304,307,310,312,315,317,320,322,325,328,330],{"class":31,"line":70},[29,303,198],{"class":189},[29,305,306],{"class":204}," prompt",[29,308,309],{"class":185}," = ",[29,311,289],{"class":175},[29,313,314],{"class":211}," axon",[29,316,215],{"class":185},[29,318,319],{"class":35},"prompt",[29,321,225],{"class":185},[29,323,324],{"class":45},"\"code-review\"",[29,326,327],{"class":185},", { ",[29,329,284],{"class":211},[29,331,332],{"class":185}," })\n",[29,334,335,337,339,341,343,346,348],{"class":31,"line":86},[29,336,236],{"class":175},[29,338,314],{"class":211},[29,340,215],{"class":185},[29,342,205],{"class":35},[29,344,345],{"class":185},"({ ",[29,347,319],{"class":211},[29,349,332],{"class":185},[29,351,352],{"class":31,"line":103},[29,353,244],{"class":185},[15,355,356],{},"Scripts are the primary unit — most routes are thin wrappers that call a script and return\nthe stream. Put logic in the script, not the route.",[143,358,360],{"id":359},"fire-and-forget","Fire and forget",[15,362,363],{},"When a route needs to acknowledge receipt immediately and let the agent work in the\nbackground:",[19,365,367],{"className":160,"code":366,"language":162,"meta":24,"style":24},"\u002F\u002F server\u002Fapi\u002Fwebhooks\u002Fgithub.post.ts\nexport default defineEventHandler(async event => {\n    const payload = await readBody(event)\n    if (payload.action !== \"opened\") return { ignored: true }\n\n    const prompt = await axon.prompt(\"issue-triage\", {\n        number: payload.issue.number,\n        title: payload.issue.title,\n    })\n\n    void axon.request({ prompt, thread: `issue-${payload.issue.number}` })\n    return { received: true }\n})\n",[26,368,369,374,392,411,450,456,480,501,520,526,531,577,591],{"__ignoreMap":24},[29,370,371],{"class":31,"line":32},[29,372,373],{"class":169},"\u002F\u002F server\u002Fapi\u002Fwebhooks\u002Fgithub.post.ts\n",[29,375,376,378,380,382,384,386,388,390],{"class":31,"line":39},[29,377,176],{"class":175},[29,379,179],{"class":175},[29,381,182],{"class":35},[29,383,225],{"class":185},[29,385,267],{"class":189},[29,387,270],{"class":211},[29,389,273],{"class":189},[29,391,193],{"class":185},[29,393,394,396,399,401,403,405,407,409],{"class":31,"line":49},[29,395,198],{"class":189},[29,397,398],{"class":204}," payload",[29,400,309],{"class":185},[29,402,289],{"class":175},[29,404,292],{"class":35},[29,406,225],{"class":185},[29,408,297],{"class":211},[29,410,231],{"class":185},[29,412,413,416,419,422,424,427,430,433,436,439,441,444,447],{"class":31,"line":70},[29,414,415],{"class":175},"    if",[29,417,418],{"class":185}," (",[29,420,421],{"class":211},"payload",[29,423,215],{"class":185},[29,425,426],{"class":211},"action",[29,428,429],{"class":185}," !== ",[29,431,432],{"class":45},"\"opened\"",[29,434,435],{"class":185},") ",[29,437,438],{"class":175},"return",[29,440,201],{"class":185},[29,442,443],{"class":211},"ignored:",[29,445,446],{"class":189}," true",[29,448,449],{"class":185}," }\n",[29,451,452],{"class":31,"line":86},[29,453,455],{"emptyLinePlaceholder":454},true,"\n",[29,457,458,460,462,464,466,468,470,472,474,477],{"class":31,"line":103},[29,459,198],{"class":189},[29,461,306],{"class":204},[29,463,309],{"class":185},[29,465,289],{"class":175},[29,467,314],{"class":211},[29,469,215],{"class":185},[29,471,319],{"class":35},[29,473,225],{"class":185},[29,475,476],{"class":45},"\"issue-triage\"",[29,478,479],{"class":185},", {\n",[29,481,483,486,488,490,493,495,498],{"class":31,"line":482},7,[29,484,485],{"class":211},"        number:",[29,487,398],{"class":211},[29,489,215],{"class":185},[29,491,492],{"class":211},"issue",[29,494,215],{"class":185},[29,496,497],{"class":211},"number",[29,499,500],{"class":185},",\n",[29,502,504,507,509,511,513,515,518],{"class":31,"line":503},8,[29,505,506],{"class":211},"        title:",[29,508,398],{"class":211},[29,510,215],{"class":185},[29,512,492],{"class":211},[29,514,215],{"class":185},[29,516,517],{"class":211},"title",[29,519,500],{"class":185},[29,521,523],{"class":31,"line":522},9,[29,524,525],{"class":185},"    })\n",[29,527,529],{"class":31,"line":528},10,[29,530,455],{"emptyLinePlaceholder":454},[29,532,534,537,539,541,544,546,548,550,553,556,559,561,563,565,567,569,572,575],{"class":31,"line":533},11,[29,535,536],{"class":189},"    void",[29,538,314],{"class":211},[29,540,215],{"class":185},[29,542,543],{"class":35},"request",[29,545,345],{"class":185},[29,547,319],{"class":211},[29,549,123],{"class":185},[29,551,552],{"class":211},"thread:",[29,554,555],{"class":45}," `issue-",[29,557,558],{"class":189},"${",[29,560,421],{"class":211},[29,562,215],{"class":185},[29,564,492],{"class":211},[29,566,215],{"class":185},[29,568,497],{"class":211},[29,570,571],{"class":189},"}",[29,573,574],{"class":45},"`",[29,576,332],{"class":185},[29,578,580,582,584,587,589],{"class":31,"line":579},12,[29,581,236],{"class":175},[29,583,201],{"class":185},[29,585,586],{"class":211},"received:",[29,588,446],{"class":189},[29,590,449],{"class":185},[29,592,594],{"class":31,"line":593},13,[29,595,244],{"class":185},[15,597,598,601],{},[26,599,600],{},"void"," fires the invocation without awaiting it. The route returns immediately. Use this\nfor webhooks where the caller has a short timeout.",[143,603,605],{"id":604},"routes-that-dont-invoke-the-agent","Routes that don't invoke the agent",[15,607,608],{},"Normal HTTP endpoints return without calling the agent at all:",[19,610,612],{"className":160,"code":611,"language":162,"meta":24,"style":24},"\u002F\u002F server\u002Fapi\u002Fhealth.get.ts\nexport default defineEventHandler(() => ({ ok: true }))\n",[26,613,614,619],{"__ignoreMap":24},[29,615,616],{"class":31,"line":32},[29,617,618],{"class":169},"\u002F\u002F server\u002Fapi\u002Fhealth.get.ts\n",[29,620,621,623,625,627,629,631,634,637,639],{"class":31,"line":39},[29,622,176],{"class":175},[29,624,179],{"class":175},[29,626,182],{"class":35},[29,628,186],{"class":185},[29,630,190],{"class":189},[29,632,633],{"class":185}," ({ ",[29,635,636],{"class":211},"ok:",[29,638,446],{"class":189},[29,640,641],{"class":185}," }))\n",[143,643,645],{"id":644},"standard-routes","Standard routes",[15,647,648],{},"Every deployed agent has these built in:",[650,651,652,665],"table",{},[653,654,655],"thead",{},[656,657,658,662],"tr",{},[659,660,661],"th",{},"Route",[659,663,664],{},"What it does",[666,667,668,682,695],"tbody",{},[656,669,670,676],{},[671,672,673],"td",{},[26,674,675],{},"POST \u002Fapi\u002Fchat",[671,677,678,679],{},"Default chat — override by creating ",[26,680,681],{},"server\u002Fapi\u002Fchat.post.ts",[656,683,684,689],{},[671,685,686],{},[26,687,688],{},"GET \u002Fapi\u002Fhealth",[671,690,691,692],{},"Health check — returns ",[26,693,694],{},"{ ok: true }",[656,696,697,702],{},[671,698,699],{},[26,700,701],{},"GET \u002Fapi\u002Finfo",[671,703,704],{},"Agent metadata — name, version, engine",[706,707,708],"style",{},"html pre.shiki code .sCudf, html code.shiki .sCudf{--shiki-default:#DCDCAA}html pre.shiki code .sKc5r, html code.shiki .sKc5r{--shiki-default:#CE9178}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 pre.shiki code .sOLPB, html code.shiki .sOLPB{--shiki-default:#6A9955}html pre.shiki code .sYbnZ, html code.shiki .sYbnZ{--shiki-default:#C586C0}html pre.shiki code .sTNBD, html code.shiki .sTNBD{--shiki-default:#D4D4D4}html pre.shiki code .scz_3, html code.shiki .scz_3{--shiki-default:#569CD6}html pre.shiki code .s9McN, html code.shiki .s9McN{--shiki-default:#4FC1FF}html pre.shiki code .s3F5K, html code.shiki .s3F5K{--shiki-default:#9CDCFE}",{"title":24,"searchDepth":39,"depth":39,"links":710},[711,712,713,714],{"id":145,"depth":39,"text":146},{"id":359,"depth":39,"text":360},{"id":604,"depth":39,"text":605},{"id":644,"depth":39,"text":645},"md",{"icon":717},"vscode-icons:folder-type-api","\u002Fdocs\u002Fv2\u002Fagent\u002Fserver\u002Fapi",{"title":5,"description":17},"docs\u002Fv2\u002Fagent\u002Fserver\u002Fapi\u002Findex","tPk4-Mc7jmjoFK5EKscULWOmXtRBOhH4sKsN_o9b1F4",1785671806593]