[{"data":1,"prerenderedAt":468},["ShallowReactive",2],{"docs-\u002Fdocs\u002Fv2\u002Fagent\u002Fengines\u002Fmock":3},{"id":4,"title":5,"body":6,"description":16,"extension":462,"meta":463,"navigation":63,"path":464,"seo":465,"stem":466,"__hash__":467},"docs\u002Fdocs\u002Fv2\u002Fagent\u002Fengines\u002Fmock.md","Mock",{"type":7,"value":8,"toc":455},"minimark",[9,13,17,22,99,110,114,117,196,208,212,215,305,310,314,317,437,444,448,451],[10,11,5],"h1",{"id":12},"mock",[14,15,16],"p",{},"A deterministic engine for testing. Replaces the inference step with a script you write\n— the full agent loop still runs. Tool calls execute, the session log accumulates, stop\nconditions fire. Everything behaves as in production, just without a model call.",[18,19,21],"h2",{"id":20},"configuration","Configuration",[23,24,29],"pre",{"className":25,"code":26,"language":27,"meta":28,"style":28},"language-ts shiki shiki-themes dark-plus","import { Mock } from \"@arcforge\u002Fengines\u002Fmock\"\n\nexport default defineAgent({\n    engine: Mock(),\n})\n","ts","",[30,31,32,58,65,81,93],"code",{"__ignoreMap":28},[33,34,37,41,45,48,51,54],"span",{"class":35,"line":36},"line",1,[33,38,40],{"class":39},"sYbnZ","import",[33,42,44],{"class":43},"sTNBD"," { ",[33,46,5],{"class":47},"s3F5K",[33,49,50],{"class":43}," } ",[33,52,53],{"class":39},"from",[33,55,57],{"class":56},"sKc5r"," \"@arcforge\u002Fengines\u002Fmock\"\n",[33,59,61],{"class":35,"line":60},2,[33,62,64],{"emptyLinePlaceholder":63},true,"\n",[33,66,68,71,74,78],{"class":35,"line":67},3,[33,69,70],{"class":39},"export",[33,72,73],{"class":39}," default",[33,75,77],{"class":76},"sCudf"," defineAgent",[33,79,80],{"class":43},"({\n",[33,82,84,87,90],{"class":35,"line":83},4,[33,85,86],{"class":47},"    engine:",[33,88,89],{"class":76}," Mock",[33,91,92],{"class":43},"(),\n",[33,94,96],{"class":35,"line":95},5,[33,97,98],{"class":43},"})\n",[14,100,101,102,105,106,109],{},"With no argument, ",[30,103,104],{},"Mock()"," echoes the user's last message back as agent output. Useful\nfor testing routing and wiring without caring about content — and it's what a fresh\n",[30,107,108],{},"axon init"," boots with before an engine is configured.",[18,111,113],{"id":112},"response-map","Response map",[14,115,116],{},"Map patterns to replies. Patterns are matched as case-insensitive substrings against\nthe last user message; on no match, Mock falls back to echo.",[23,118,120],{"className":25,"code":119,"language":27,"meta":28,"style":28},"import { Mock } from \"@arcforge\u002Fengines\u002Fmock\"\n\nexport default defineAgent({\n    engine: Mock({\n        \"hello\": \"Hi there!\",\n        \"sprint status\": \"Two issues remain in review.\",\n    }),\n})\n",[30,121,122,136,140,150,158,172,185,191],{"__ignoreMap":28},[33,123,124,126,128,130,132,134],{"class":35,"line":36},[33,125,40],{"class":39},[33,127,44],{"class":43},[33,129,5],{"class":47},[33,131,50],{"class":43},[33,133,53],{"class":39},[33,135,57],{"class":56},[33,137,138],{"class":35,"line":60},[33,139,64],{"emptyLinePlaceholder":63},[33,141,142,144,146,148],{"class":35,"line":67},[33,143,70],{"class":39},[33,145,73],{"class":39},[33,147,77],{"class":76},[33,149,80],{"class":43},[33,151,152,154,156],{"class":35,"line":83},[33,153,86],{"class":47},[33,155,89],{"class":76},[33,157,80],{"class":43},[33,159,160,163,166,169],{"class":35,"line":95},[33,161,162],{"class":56},"        \"hello\"",[33,164,165],{"class":47},":",[33,167,168],{"class":56}," \"Hi there!\"",[33,170,171],{"class":43},",\n",[33,173,175,178,180,183],{"class":35,"line":174},6,[33,176,177],{"class":56},"        \"sprint status\"",[33,179,165],{"class":47},[33,181,182],{"class":56}," \"Two issues remain in review.\"",[33,184,171],{"class":43},[33,186,188],{"class":35,"line":187},7,[33,189,190],{"class":43},"    }),\n",[33,192,194],{"class":35,"line":193},8,[33,195,98],{"class":43},[14,197,198,199,203,204,207],{},"A reply is a ",[200,201,202],"strong",{},"step",": spoken text (ends the wake), or code to run via ",[30,205,206],{},"run()"," (the\nloop continues so the model can see the result).",[18,209,211],{"id":210},"sequences","Sequences",[14,213,214],{},"An array of steps plays out one per loop tick, in order. Once exhausted, further\nmatching calls repeat the last step.",[23,216,218],{"className":25,"code":217,"language":27,"meta":28,"style":28},"import { Mock, run } from \"@arcforge\u002Fengines\u002Fmock\"\n\nengine: Mock({\n    \"review the file\": [\n        run(`fs.read(\"src\u002Findex.ts\")`),   \u002F\u002F tick 1: act\n        \"The file looks correct.\",         \u002F\u002F tick 2: see the result, speak\n    ],\n})\n",[30,219,220,240,244,257,267,285,296,301],{"__ignoreMap":28},[33,221,222,224,226,228,231,234,236,238],{"class":35,"line":36},[33,223,40],{"class":39},[33,225,44],{"class":43},[33,227,5],{"class":47},[33,229,230],{"class":43},", ",[33,232,233],{"class":47},"run",[33,235,50],{"class":43},[33,237,53],{"class":39},[33,239,57],{"class":56},[33,241,242],{"class":35,"line":60},[33,243,64],{"emptyLinePlaceholder":63},[33,245,246,250,253,255],{"class":35,"line":67},[33,247,249],{"class":248},"sqDPy","engine",[33,251,252],{"class":43},": ",[33,254,5],{"class":76},[33,256,80],{"class":43},[33,258,259,262,264],{"class":35,"line":83},[33,260,261],{"class":56},"    \"review the file\"",[33,263,165],{"class":47},[33,265,266],{"class":43}," [\n",[33,268,269,272,275,278,281],{"class":35,"line":95},[33,270,271],{"class":76},"        run",[33,273,274],{"class":43},"(",[33,276,277],{"class":56},"`fs.read(\"src\u002Findex.ts\")`",[33,279,280],{"class":43},"),   ",[33,282,284],{"class":283},"sOLPB","\u002F\u002F tick 1: act\n",[33,286,287,290,293],{"class":35,"line":174},[33,288,289],{"class":56},"        \"The file looks correct.\"",[33,291,292],{"class":43},",         ",[33,294,295],{"class":283},"\u002F\u002F tick 2: see the result, speak\n",[33,297,298],{"class":35,"line":187},[33,299,300],{"class":43},"    ],\n",[33,302,303],{"class":35,"line":193},[33,304,98],{"class":43},[14,306,307,309],{},[30,308,206],{}," executes real code in the real capsule, under the agent's real policy. The\nresult is committed to the session log and re-enters the loop on the next tick —\nexactly the path a real model's tool call takes. This is what makes multi-step flows,\nfailure handling, and policy rejections deterministically testable.",[18,311,313],{"id":312},"function-form","Function form",[14,315,316],{},"Full control — receives the engine request, returns the next step:",[23,318,320],{"className":25,"code":319,"language":27,"meta":28,"style":28},"import { Mock } from \"@arcforge\u002Fengines\u002Fmock\"\n\nengine: Mock(async (req) => {\n    const last = req.messages.at(-1)?.content ?? \"\"\n    return `You said: ${last}`\n})\n",[30,321,322,336,340,369,413,433],{"__ignoreMap":28},[33,323,324,326,328,330,332,334],{"class":35,"line":36},[33,325,40],{"class":39},[33,327,44],{"class":43},[33,329,5],{"class":47},[33,331,50],{"class":43},[33,333,53],{"class":39},[33,335,57],{"class":56},[33,337,338],{"class":35,"line":60},[33,339,64],{"emptyLinePlaceholder":63},[33,341,342,344,346,348,350,354,357,360,363,366],{"class":35,"line":67},[33,343,249],{"class":248},[33,345,252],{"class":43},[33,347,5],{"class":76},[33,349,274],{"class":43},[33,351,353],{"class":352},"scz_3","async",[33,355,356],{"class":43}," (",[33,358,359],{"class":47},"req",[33,361,362],{"class":43},") ",[33,364,365],{"class":352},"=>",[33,367,368],{"class":43}," {\n",[33,370,371,374,378,381,383,386,389,391,394,397,401,404,407,410],{"class":35,"line":83},[33,372,373],{"class":352},"    const",[33,375,377],{"class":376},"s9McN"," last",[33,379,380],{"class":43}," = ",[33,382,359],{"class":47},[33,384,385],{"class":43},".",[33,387,388],{"class":47},"messages",[33,390,385],{"class":43},[33,392,393],{"class":76},"at",[33,395,396],{"class":43},"(-",[33,398,400],{"class":399},"sDGX8","1",[33,402,403],{"class":43},")?.",[33,405,406],{"class":47},"content",[33,408,409],{"class":43}," ?? ",[33,411,412],{"class":56},"\"\"\n",[33,414,415,418,421,424,427,430],{"class":35,"line":95},[33,416,417],{"class":39},"    return",[33,419,420],{"class":56}," `You said: ",[33,422,423],{"class":352},"${",[33,425,426],{"class":47},"last",[33,428,429],{"class":352},"}",[33,431,432],{"class":56},"`\n",[33,434,435],{"class":35,"line":174},[33,436,98],{"class":43},[14,438,439,440,443],{},"Return a string to speak, or ",[30,441,442],{},"run(code)"," to act.",[18,445,447],{"id":446},"streaming-behaviour","Streaming behaviour",[14,449,450],{},"Mock streams spoken text by chunking words with small delays, matching the feel of a\nreal streaming engine. Tests can iterate the stream normally.",[452,453,454],"style",{},"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 .s3F5K, html code.shiki .s3F5K{--shiki-default:#9CDCFE}html pre.shiki code .sKc5r, html code.shiki .sKc5r{--shiki-default:#CE9178}html pre.shiki code .sCudf, html code.shiki .sCudf{--shiki-default:#DCDCAA}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 .sqDPy, html code.shiki .sqDPy{--shiki-default:#C8C8C8}html pre.shiki code .sOLPB, html code.shiki .sOLPB{--shiki-default:#6A9955}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 .sDGX8, html code.shiki .sDGX8{--shiki-default:#B5CEA8}",{"title":28,"searchDepth":60,"depth":60,"links":456},[457,458,459,460,461],{"id":20,"depth":60,"text":21},{"id":112,"depth":60,"text":113},{"id":210,"depth":60,"text":211},{"id":312,"depth":60,"text":313},{"id":446,"depth":60,"text":447},"md",{},"\u002Fdocs\u002Fv2\u002Fagent\u002Fengines\u002Fmock",{"title":5,"description":16},"docs\u002Fv2\u002Fagent\u002Fengines\u002Fmock","Fw3BrmqrlViixK1cRbqew79tvC8XOZgZEtG4am66WkU",1785671805865]