[{"data":1,"prerenderedAt":557},["ShallowReactive",2],{"docs-\u002Fdocs\u002Fv2\u002Fapi\u002Fstream":3},{"id":4,"title":5,"body":6,"description":550,"extension":551,"meta":552,"navigation":80,"path":553,"seo":554,"stem":555,"__hash__":556},"docs\u002Fdocs\u002Fv2\u002Fapi\u002Fstream.md","axon.stream",{"type":7,"value":8,"toc":546},"minimark",[9,13,26,164,167,330,336,341,344,413,420,424,427,533,542],[10,11,5],"h1",{"id":12},"axonstream",[14,15,16,17,21,22,25],"p",{},"Invokes the agent loop and yields entries as they arrive. Returns ",[18,19,20],"code",{},"{ stream }"," — an\nasync generator of ",[18,23,24],{},"AnyThreadEntry"," values.",[27,28,33],"pre",{"className":29,"code":30,"language":31,"meta":32,"style":32},"language-ts shiki shiki-themes dark-plus","const { stream } = axon.stream(\"scout the repository and report findings\")\n\nfor await (const entry of stream) {\n    if (entry.type === \"text\") process.stdout.write(entry.content)\n}\n","ts","",[18,34,35,75,82,109,158],{"__ignoreMap":32},[36,37,40,44,48,52,55,59,62,65,68,72],"span",{"class":38,"line":39},"line",1,[36,41,43],{"class":42},"scz_3","const",[36,45,47],{"class":46},"sTNBD"," { ",[36,49,51],{"class":50},"s9McN","stream",[36,53,54],{"class":46}," } = ",[36,56,58],{"class":57},"s3F5K","axon",[36,60,61],{"class":46},".",[36,63,51],{"class":64},"sCudf",[36,66,67],{"class":46},"(",[36,69,71],{"class":70},"sKc5r","\"scout the repository and report findings\"",[36,73,74],{"class":46},")\n",[36,76,78],{"class":38,"line":77},2,[36,79,81],{"emptyLinePlaceholder":80},true,"\n",[36,83,85,89,92,95,97,100,103,106],{"class":38,"line":84},3,[36,86,88],{"class":87},"sYbnZ","for",[36,90,91],{"class":87}," await",[36,93,94],{"class":46}," (",[36,96,43],{"class":42},[36,98,99],{"class":50}," entry",[36,101,102],{"class":42}," of",[36,104,105],{"class":57}," stream",[36,107,108],{"class":46},") {\n",[36,110,112,115,117,120,122,125,128,131,134,137,139,142,144,147,149,151,153,156],{"class":38,"line":111},4,[36,113,114],{"class":87},"    if",[36,116,94],{"class":46},[36,118,119],{"class":57},"entry",[36,121,61],{"class":46},[36,123,124],{"class":57},"type",[36,126,127],{"class":46}," === ",[36,129,130],{"class":70},"\"text\"",[36,132,133],{"class":46},") ",[36,135,136],{"class":57},"process",[36,138,61],{"class":46},[36,140,141],{"class":57},"stdout",[36,143,61],{"class":46},[36,145,146],{"class":64},"write",[36,148,67],{"class":46},[36,150,119],{"class":57},[36,152,61],{"class":46},[36,154,155],{"class":57},"content",[36,157,74],{"class":46},[36,159,161],{"class":38,"line":160},5,[36,162,163],{"class":46},"}\n",[14,165,166],{},"With options:",[27,168,170],{"className":29,"code":169,"language":31,"meta":32,"style":32},"const context = await axon.prompt(\"context\")\nconst scout   = await axon.prompt(\"scout\")\n\nconst { stream } = axon.stream({\n    prompt: [context, scout],   \u002F\u002F array — Axon concatenates in order\n    thread: \"research\",         \u002F\u002F named thread — omit to use the execution thread\n    policy: { ... },            \u002F\u002F narrow the active policy for this call only\n})\n\nfor await (const entry of stream) { ... }\n",[18,171,172,200,225,229,248,272,287,299,305,310],{"__ignoreMap":32},[36,173,174,176,179,182,185,188,190,193,195,198],{"class":38,"line":39},[36,175,43],{"class":42},[36,177,178],{"class":50}," context",[36,180,181],{"class":46}," = ",[36,183,184],{"class":87},"await",[36,186,187],{"class":57}," axon",[36,189,61],{"class":46},[36,191,192],{"class":64},"prompt",[36,194,67],{"class":46},[36,196,197],{"class":70},"\"context\"",[36,199,74],{"class":46},[36,201,202,204,207,210,212,214,216,218,220,223],{"class":38,"line":77},[36,203,43],{"class":42},[36,205,206],{"class":50}," scout",[36,208,209],{"class":46},"   = ",[36,211,184],{"class":87},[36,213,187],{"class":57},[36,215,61],{"class":46},[36,217,192],{"class":64},[36,219,67],{"class":46},[36,221,222],{"class":70},"\"scout\"",[36,224,74],{"class":46},[36,226,227],{"class":38,"line":84},[36,228,81],{"emptyLinePlaceholder":80},[36,230,231,233,235,237,239,241,243,245],{"class":38,"line":111},[36,232,43],{"class":42},[36,234,47],{"class":46},[36,236,51],{"class":50},[36,238,54],{"class":46},[36,240,58],{"class":57},[36,242,61],{"class":46},[36,244,51],{"class":64},[36,246,247],{"class":46},"({\n",[36,249,250,253,256,259,262,265,268],{"class":38,"line":160},[36,251,252],{"class":57},"    prompt:",[36,254,255],{"class":46}," [",[36,257,258],{"class":57},"context",[36,260,261],{"class":46},", ",[36,263,264],{"class":57},"scout",[36,266,267],{"class":46},"],   ",[36,269,271],{"class":270},"sOLPB","\u002F\u002F array — Axon concatenates in order\n",[36,273,275,278,281,284],{"class":38,"line":274},6,[36,276,277],{"class":57},"    thread:",[36,279,280],{"class":70}," \"research\"",[36,282,283],{"class":46},",         ",[36,285,286],{"class":270},"\u002F\u002F named thread — omit to use the execution thread\n",[36,288,290,293,296],{"class":38,"line":289},7,[36,291,292],{"class":57},"    policy:",[36,294,295],{"class":46}," { ... },            ",[36,297,298],{"class":270},"\u002F\u002F narrow the active policy for this call only\n",[36,300,302],{"class":38,"line":301},8,[36,303,304],{"class":46},"})\n",[36,306,308],{"class":38,"line":307},9,[36,309,81],{"emptyLinePlaceholder":80},[36,311,313,315,317,319,321,323,325,327],{"class":38,"line":312},10,[36,314,88],{"class":87},[36,316,91],{"class":87},[36,318,94],{"class":46},[36,320,43],{"class":42},[36,322,99],{"class":50},[36,324,102],{"class":42},[36,326,105],{"class":57},[36,328,329],{"class":46},") { ... }\n",[14,331,332,333,335],{},"Use ",[18,334,51],{}," when forwarding output incrementally — chat routes, long-running tasks,\nprogress display. The loop may run for seconds or minutes; streaming lets you show\nwork in real time rather than blocking until done.",[337,338,340],"h2",{"id":339},"entry-types","Entry types",[14,342,343],{},"The entries you most commonly act on while iterating:",[27,345,347],{"className":29,"code":346,"language":31,"meta":32,"style":32},"entry.type === \"axon:agent:message:delta\"   \u002F\u002F streaming chunk — payload.content\nentry.type === \"axon:agent:message\"         \u002F\u002F final accumulated message — payload.content\nentry.type === \"capsule:stdout\"             \u002F\u002F tool process output — payload.data\nentry.type === \"pathway:complete\"           \u002F\u002F loop finished — payload.durationMs, billing\n",[18,348,349,365,381,397],{"__ignoreMap":32},[36,350,351,353,355,357,359,362],{"class":38,"line":39},[36,352,119],{"class":57},[36,354,61],{"class":46},[36,356,124],{"class":57},[36,358,127],{"class":46},[36,360,361],{"class":70},"\"axon:agent:message:delta\"",[36,363,364],{"class":270},"   \u002F\u002F streaming chunk — payload.content\n",[36,366,367,369,371,373,375,378],{"class":38,"line":77},[36,368,119],{"class":57},[36,370,61],{"class":46},[36,372,124],{"class":57},[36,374,127],{"class":46},[36,376,377],{"class":70},"\"axon:agent:message\"",[36,379,380],{"class":270},"         \u002F\u002F final accumulated message — payload.content\n",[36,382,383,385,387,389,391,394],{"class":38,"line":84},[36,384,119],{"class":57},[36,386,61],{"class":46},[36,388,124],{"class":57},[36,390,127],{"class":46},[36,392,393],{"class":70},"\"capsule:stdout\"",[36,395,396],{"class":270},"             \u002F\u002F tool process output — payload.data\n",[36,398,399,401,403,405,407,410],{"class":38,"line":111},[36,400,119],{"class":57},[36,402,61],{"class":46},[36,404,124],{"class":57},[36,406,127],{"class":46},[36,408,409],{"class":70},"\"pathway:complete\"",[36,411,412],{"class":270},"           \u002F\u002F loop finished — payload.durationMs, billing\n",[14,414,415,416,419],{},"Deltas arrive in real time as the model generates. The final ",[18,417,418],{},"axon:agent:message","\nentry carries the fully accumulated content — renderers typically accumulate deltas\nin place and replace with the final entry on completion.",[337,421,423],{"id":422},"forwarding-from-a-route","Forwarding from a route",[14,425,426],{},"The standard pattern for a streaming chat route:",[27,428,430],{"className":29,"code":429,"language":31,"meta":32,"style":32},"\u002F\u002F server\u002Fapi\u002Fchat.ts\nexport default defineEventHandler(async (event) => {\n    const { message } = await readBody(event)\n    const { stream } = axon.stream(message)\n    return sendStream(event, stream)\n})\n",[18,431,432,437,466,489,511,529],{"__ignoreMap":32},[36,433,434],{"class":38,"line":39},[36,435,436],{"class":270},"\u002F\u002F server\u002Fapi\u002Fchat.ts\n",[36,438,439,442,445,448,450,453,455,458,460,463],{"class":38,"line":77},[36,440,441],{"class":87},"export",[36,443,444],{"class":87}," default",[36,446,447],{"class":64}," defineEventHandler",[36,449,67],{"class":46},[36,451,452],{"class":42},"async",[36,454,94],{"class":46},[36,456,457],{"class":57},"event",[36,459,133],{"class":46},[36,461,462],{"class":42},"=>",[36,464,465],{"class":46}," {\n",[36,467,468,471,473,476,478,480,483,485,487],{"class":38,"line":84},[36,469,470],{"class":42},"    const",[36,472,47],{"class":46},[36,474,475],{"class":50},"message",[36,477,54],{"class":46},[36,479,184],{"class":87},[36,481,482],{"class":64}," readBody",[36,484,67],{"class":46},[36,486,457],{"class":57},[36,488,74],{"class":46},[36,490,491,493,495,497,499,501,503,505,507,509],{"class":38,"line":111},[36,492,470],{"class":42},[36,494,47],{"class":46},[36,496,51],{"class":50},[36,498,54],{"class":46},[36,500,58],{"class":57},[36,502,61],{"class":46},[36,504,51],{"class":64},[36,506,67],{"class":46},[36,508,475],{"class":57},[36,510,74],{"class":46},[36,512,513,516,519,521,523,525,527],{"class":38,"line":160},[36,514,515],{"class":87},"    return",[36,517,518],{"class":64}," sendStream",[36,520,67],{"class":46},[36,522,457],{"class":57},[36,524,261],{"class":46},[36,526,51],{"class":57},[36,528,74],{"class":46},[36,530,531],{"class":38,"line":274},[36,532,304],{"class":46},[14,534,535,536,541],{},"See ",[537,538,540],"a",{"href":539},"\u002Fdocs\u002Fv2\u002Fapi\u002Frequest","axon.request"," for the non-streaming equivalent.",[543,544,545],"style",{},"html pre.shiki code .scz_3, html code.shiki .scz_3{--shiki-default:#569CD6}html pre.shiki code .sTNBD, html code.shiki .sTNBD{--shiki-default:#D4D4D4}html pre.shiki code .s9McN, html code.shiki .s9McN{--shiki-default:#4FC1FF}html pre.shiki code .s3F5K, html code.shiki .s3F5K{--shiki-default:#9CDCFE}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 pre.shiki code .sYbnZ, html code.shiki .sYbnZ{--shiki-default:#C586C0}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}",{"title":32,"searchDepth":77,"depth":77,"links":547},[548,549],{"id":339,"depth":77,"text":340},{"id":422,"depth":77,"text":423},"Invokes the agent loop and yields entries as they arrive. Returns { stream } — an\nasync generator of AnyThreadEntry values.","md",{},"\u002Fdocs\u002Fv2\u002Fapi\u002Fstream",{"title":5,"description":550},"docs\u002Fv2\u002Fapi\u002Fstream","fHaryx8KvNt6vImpnqoeoE49GZEk9s7cLkiiiGgrz_Y",1785671808321]