[{"data":1,"prerenderedAt":1298},["ShallowReactive",2],{"docs-\u002Fdocs\u002Fv2\u002Fapi\u002Fproc\u002Fspawn":3},{"id":4,"title":5,"body":6,"description":1291,"extension":1292,"meta":1293,"navigation":500,"path":1294,"seo":1295,"stem":1296,"__hash__":1297},"docs\u002Fdocs\u002Fv2\u002Fapi\u002Fproc\u002Fspawn.md","process.spawn",{"type":7,"value":8,"toc":1275},"minimark",[9,13,26,94,99,185,188,193,297,301,341,345,348,452,456,574,578,718,722,879,883,887,988,992,1077,1081,1262,1271],[10,11,5],"h1",{"id":12},"processspawn",[14,15,16,17,21,22,25],"p",{},"Starts a shell command and returns a ",[18,19,20],"code",{},"LiveProcHandle"," immediately. The process runs\nin the background, tracked by the capsule and visible to the agent in the AIR\n",[18,23,24],{},"\u003Cprocesses>"," context on each cognitive tick.",[27,28,33],"pre",{"className":29,"code":30,"language":31,"meta":32,"style":32},"language-ts shiki shiki-themes dark-plus","const proc = process.spawn(\"bun dev\")\nawait proc.waitFor(\"ready on port\")\n","ts","",[18,34,35,73],{"__ignoreMap":32},[36,37,40,44,48,52,56,59,63,66,70],"span",{"class":38,"line":39},"line",1,[36,41,43],{"class":42},"scz_3","const",[36,45,47],{"class":46},"s9McN"," proc",[36,49,51],{"class":50},"sTNBD"," = ",[36,53,55],{"class":54},"s3F5K","process",[36,57,58],{"class":50},".",[36,60,62],{"class":61},"sCudf","spawn",[36,64,65],{"class":50},"(",[36,67,69],{"class":68},"sKc5r","\"bun dev\"",[36,71,72],{"class":50},")\n",[36,74,76,80,82,84,87,89,92],{"class":38,"line":75},2,[36,77,79],{"class":78},"sYbnZ","await",[36,81,47],{"class":54},[36,83,58],{"class":50},[36,85,86],{"class":61},"waitFor",[36,88,65],{"class":50},[36,90,91],{"class":68},"\"ready on port\"",[36,93,72],{"class":50},[95,96,98],"h2",{"id":97},"signature","Signature",[27,100,102],{"className":29,"code":101,"language":31,"meta":32,"style":32},"process.spawn(\n    command: string,\n    opts?: {\n        cwd?: string\n        env?: Record\u003Cstring, string>\n    }\n): LiveProcHandle\n",[18,103,104,115,129,138,150,170,176],{"__ignoreMap":32},[36,105,106,108,110,112],{"class":38,"line":39},[36,107,55],{"class":54},[36,109,58],{"class":50},[36,111,62],{"class":61},[36,113,114],{"class":50},"(\n",[36,116,117,120,123,126],{"class":38,"line":75},[36,118,119],{"class":54},"    command",[36,121,122],{"class":50},": ",[36,124,125],{"class":54},"string",[36,127,128],{"class":50},",\n",[36,130,132,135],{"class":38,"line":131},3,[36,133,134],{"class":54},"    opts",[36,136,137],{"class":50},"?: {\n",[36,139,141,144,147],{"class":38,"line":140},4,[36,142,143],{"class":50},"        cwd?",[36,145,146],{"class":54},":",[36,148,149],{"class":54}," string\n",[36,151,153,156,159,162,165,167],{"class":38,"line":152},5,[36,154,155],{"class":54},"        env",[36,157,158],{"class":50},"?: ",[36,160,161],{"class":54},"Record",[36,163,164],{"class":50},"\u003C",[36,166,125],{"class":54},[36,168,169],{"class":50},", string>\n",[36,171,173],{"class":38,"line":172},6,[36,174,175],{"class":50},"    }\n",[36,177,179,182],{"class":38,"line":178},7,[36,180,181],{"class":50},"): ",[36,183,184],{"class":54},"LiveProcHandle\n",[95,186,20],{"id":187},"liveprochandle",[189,190,192],"h3",{"id":191},"state","State",[27,194,196],{"className":29,"code":195,"language":31,"meta":32,"style":32},"proc.procId     \u002F\u002F string — unique ID tracked by the capsule\nproc.command    \u002F\u002F string — original command string\nproc.pid        \u002F\u002F number | undefined\nproc.cwd        \u002F\u002F string | undefined\nproc.status     \u002F\u002F \"running\" | \"exited\"\nproc.exitCode   \u002F\u002F number | undefined — set after exit\nproc.startedAt  \u002F\u002F number — unix ms\nproc.endedAt    \u002F\u002F number | undefined — set after exit\n",[18,197,198,212,224,236,248,260,272,284],{"__ignoreMap":32},[36,199,200,203,205,208],{"class":38,"line":39},[36,201,202],{"class":54},"proc",[36,204,58],{"class":50},[36,206,207],{"class":54},"procId",[36,209,211],{"class":210},"sOLPB","     \u002F\u002F string — unique ID tracked by the capsule\n",[36,213,214,216,218,221],{"class":38,"line":75},[36,215,202],{"class":54},[36,217,58],{"class":50},[36,219,220],{"class":54},"command",[36,222,223],{"class":210},"    \u002F\u002F string — original command string\n",[36,225,226,228,230,233],{"class":38,"line":131},[36,227,202],{"class":54},[36,229,58],{"class":50},[36,231,232],{"class":54},"pid",[36,234,235],{"class":210},"        \u002F\u002F number | undefined\n",[36,237,238,240,242,245],{"class":38,"line":140},[36,239,202],{"class":54},[36,241,58],{"class":50},[36,243,244],{"class":54},"cwd",[36,246,247],{"class":210},"        \u002F\u002F string | undefined\n",[36,249,250,252,254,257],{"class":38,"line":152},[36,251,202],{"class":54},[36,253,58],{"class":50},[36,255,256],{"class":54},"status",[36,258,259],{"class":210},"     \u002F\u002F \"running\" | \"exited\"\n",[36,261,262,264,266,269],{"class":38,"line":172},[36,263,202],{"class":54},[36,265,58],{"class":50},[36,267,268],{"class":54},"exitCode",[36,270,271],{"class":210},"   \u002F\u002F number | undefined — set after exit\n",[36,273,274,276,278,281],{"class":38,"line":178},[36,275,202],{"class":54},[36,277,58],{"class":50},[36,279,280],{"class":54},"startedAt",[36,282,283],{"class":210},"  \u002F\u002F number — unix ms\n",[36,285,287,289,291,294],{"class":38,"line":286},8,[36,288,202],{"class":54},[36,290,58],{"class":50},[36,292,293],{"class":54},"endedAt",[36,295,296],{"class":210},"    \u002F\u002F number | undefined — set after exit\n",[189,298,300],{"id":299},"interaction","Interaction",[27,302,304],{"className":29,"code":303,"language":31,"meta":32,"style":32},"proc.kill()             \u002F\u002F terminate the process\nproc.stdin(data)        \u002F\u002F write a string to stdin\n",[18,305,306,321],{"__ignoreMap":32},[36,307,308,310,312,315,318],{"class":38,"line":39},[36,309,202],{"class":54},[36,311,58],{"class":50},[36,313,314],{"class":61},"kill",[36,316,317],{"class":50},"()             ",[36,319,320],{"class":210},"\u002F\u002F terminate the process\n",[36,322,323,325,327,330,332,335,338],{"class":38,"line":75},[36,324,202],{"class":54},[36,326,58],{"class":50},[36,328,329],{"class":61},"stdin",[36,331,65],{"class":50},[36,333,334],{"class":54},"data",[36,336,337],{"class":50},")        ",[36,339,340],{"class":210},"\u002F\u002F write a string to stdin\n",[189,342,344],{"id":343},"output","Output",[14,346,347],{},"All output methods return buffered content captured since spawn.",[27,349,351],{"className":29,"code":350,"language":31,"meta":32,"style":32},"proc.stdout()                        \u002F\u002F full stdout as string\nproc.stdout(\"stderr\")                \u002F\u002F stderr only\nproc.stdout([\"stdout\", \"stderr\"])    \u002F\u002F both streams interleaved\nproc.tail(n)                         \u002F\u002F last n lines\nproc.extract(regex)                  \u002F\u002F all regex matches from stdout\n",[18,352,353,368,387,412,432],{"__ignoreMap":32},[36,354,355,357,359,362,365],{"class":38,"line":39},[36,356,202],{"class":54},[36,358,58],{"class":50},[36,360,361],{"class":61},"stdout",[36,363,364],{"class":50},"()                        ",[36,366,367],{"class":210},"\u002F\u002F full stdout as string\n",[36,369,370,372,374,376,378,381,384],{"class":38,"line":75},[36,371,202],{"class":54},[36,373,58],{"class":50},[36,375,361],{"class":61},[36,377,65],{"class":50},[36,379,380],{"class":68},"\"stderr\"",[36,382,383],{"class":50},")                ",[36,385,386],{"class":210},"\u002F\u002F stderr only\n",[36,388,389,391,393,395,398,401,404,406,409],{"class":38,"line":131},[36,390,202],{"class":54},[36,392,58],{"class":50},[36,394,361],{"class":61},[36,396,397],{"class":50},"([",[36,399,400],{"class":68},"\"stdout\"",[36,402,403],{"class":50},", ",[36,405,380],{"class":68},[36,407,408],{"class":50},"])    ",[36,410,411],{"class":210},"\u002F\u002F both streams interleaved\n",[36,413,414,416,418,421,423,426,429],{"class":38,"line":140},[36,415,202],{"class":54},[36,417,58],{"class":50},[36,419,420],{"class":61},"tail",[36,422,65],{"class":50},[36,424,425],{"class":54},"n",[36,427,428],{"class":50},")                         ",[36,430,431],{"class":210},"\u002F\u002F last n lines\n",[36,433,434,436,438,441,443,446,449],{"class":38,"line":152},[36,435,202],{"class":54},[36,437,58],{"class":50},[36,439,440],{"class":61},"extract",[36,442,65],{"class":50},[36,444,445],{"class":54},"regex",[36,447,448],{"class":50},")                  ",[36,450,451],{"class":210},"\u002F\u002F all regex matches from stdout\n",[189,453,455],{"id":454},"waiting","Waiting",[27,457,459],{"className":29,"code":458,"language":31,"meta":32,"style":32},"\u002F\u002F Resolves when the process exits\nconst { exitCode, ok, stdout } = await proc.exited\n\n\u002F\u002F Resolves when a line matches the pattern\nconst { line, stdout } = await proc.waitFor(\"Listening on\")\nconst { line }         = await proc.waitFor(\u002Fready\u002F, { timeoutMs: 10_000 })\n",[18,460,461,466,496,502,507,536],{"__ignoreMap":32},[36,462,463],{"class":38,"line":39},[36,464,465],{"class":210},"\u002F\u002F Resolves when the process exits\n",[36,467,468,470,473,475,477,480,482,484,487,489,491,493],{"class":38,"line":75},[36,469,43],{"class":42},[36,471,472],{"class":50}," { ",[36,474,268],{"class":46},[36,476,403],{"class":50},[36,478,479],{"class":46},"ok",[36,481,403],{"class":50},[36,483,361],{"class":46},[36,485,486],{"class":50}," } = ",[36,488,79],{"class":78},[36,490,47],{"class":54},[36,492,58],{"class":50},[36,494,495],{"class":54},"exited\n",[36,497,498],{"class":38,"line":131},[36,499,501],{"emptyLinePlaceholder":500},true,"\n",[36,503,504],{"class":38,"line":140},[36,505,506],{"class":210},"\u002F\u002F Resolves when a line matches the pattern\n",[36,508,509,511,513,515,517,519,521,523,525,527,529,531,534],{"class":38,"line":152},[36,510,43],{"class":42},[36,512,472],{"class":50},[36,514,38],{"class":46},[36,516,403],{"class":50},[36,518,361],{"class":46},[36,520,486],{"class":50},[36,522,79],{"class":78},[36,524,47],{"class":54},[36,526,58],{"class":50},[36,528,86],{"class":61},[36,530,65],{"class":50},[36,532,533],{"class":68},"\"Listening on\"",[36,535,72],{"class":50},[36,537,538,540,542,544,547,549,551,553,555,557,561,564,567,571],{"class":38,"line":172},[36,539,43],{"class":42},[36,541,472],{"class":50},[36,543,38],{"class":46},[36,545,546],{"class":50}," }         = ",[36,548,79],{"class":78},[36,550,47],{"class":54},[36,552,58],{"class":50},[36,554,86],{"class":61},[36,556,65],{"class":50},[36,558,560],{"class":559},"sxaxS","\u002Fready\u002F",[36,562,563],{"class":50},", { ",[36,565,566],{"class":54},"timeoutMs:",[36,568,570],{"class":569},"sDGX8"," 10_000",[36,572,573],{"class":50}," })\n",[189,575,577],{"id":576},"streaming","Streaming",[27,579,581],{"className":29,"code":580,"language":31,"meta":32,"style":32},"\u002F\u002F Async generator — yields every line as it arrives\nfor await (const line of proc.watch()) { ... }\n\n\u002F\u002F Filtered — yields only lines matching the pattern\nfor await (const line of proc.watch(\u002Fcompiled in\u002F)) { ... }\n\n\u002F\u002F Subscribe with a callback — returns an unsubscribe function\nconst off = proc.on(\u002Ferror\u002F, line => console.error(line))\noff() \u002F\u002F unsubscribe\n",[18,582,583,588,617,621,626,654,658,663,706],{"__ignoreMap":32},[36,584,585],{"class":38,"line":39},[36,586,587],{"class":210},"\u002F\u002F Async generator — yields every line as it arrives\n",[36,589,590,593,596,599,601,604,607,609,611,614],{"class":38,"line":75},[36,591,592],{"class":78},"for",[36,594,595],{"class":78}," await",[36,597,598],{"class":50}," (",[36,600,43],{"class":42},[36,602,603],{"class":46}," line",[36,605,606],{"class":42}," of",[36,608,47],{"class":54},[36,610,58],{"class":50},[36,612,613],{"class":61},"watch",[36,615,616],{"class":50},"()) { ... }\n",[36,618,619],{"class":38,"line":131},[36,620,501],{"emptyLinePlaceholder":500},[36,622,623],{"class":38,"line":140},[36,624,625],{"class":210},"\u002F\u002F Filtered — yields only lines matching the pattern\n",[36,627,628,630,632,634,636,638,640,642,644,646,648,651],{"class":38,"line":152},[36,629,592],{"class":78},[36,631,595],{"class":78},[36,633,598],{"class":50},[36,635,43],{"class":42},[36,637,603],{"class":46},[36,639,606],{"class":42},[36,641,47],{"class":54},[36,643,58],{"class":50},[36,645,613],{"class":61},[36,647,65],{"class":50},[36,649,650],{"class":559},"\u002Fcompiled in\u002F",[36,652,653],{"class":50},")) { ... }\n",[36,655,656],{"class":38,"line":172},[36,657,501],{"emptyLinePlaceholder":500},[36,659,660],{"class":38,"line":178},[36,661,662],{"class":210},"\u002F\u002F Subscribe with a callback — returns an unsubscribe function\n",[36,664,665,667,670,672,674,676,679,681,684,686,688,691,694,696,699,701,703],{"class":38,"line":286},[36,666,43],{"class":42},[36,668,669],{"class":46}," off",[36,671,51],{"class":50},[36,673,202],{"class":54},[36,675,58],{"class":50},[36,677,678],{"class":61},"on",[36,680,65],{"class":50},[36,682,683],{"class":559},"\u002Ferror\u002F",[36,685,403],{"class":50},[36,687,38],{"class":54},[36,689,690],{"class":42}," =>",[36,692,693],{"class":54}," console",[36,695,58],{"class":50},[36,697,698],{"class":61},"error",[36,700,65],{"class":50},[36,702,38],{"class":54},[36,704,705],{"class":50},"))\n",[36,707,709,712,715],{"class":38,"line":708},9,[36,710,711],{"class":61},"off",[36,713,714],{"class":50},"() ",[36,716,717],{"class":210},"\u002F\u002F unsubscribe\n",[189,719,721],{"id":720},"querying-buffered-output","Querying buffered output",[27,723,725],{"className":29,"code":724,"language":31,"meta":32,"style":32},"const snapshot = proc.query({\n    search: \"FAIL\",        \u002F\u002F substring match\n    regex: \u002FFAIL\\s+\\d+\u002F,  \u002F\u002F regex match (use one or the other)\n    context: 3,            \u002F\u002F lines before and after each match\n    lines: 100,            \u002F\u002F limit total lines considered\n    include: [\"stdout\", \"stderr\"],\n    caseSensitive: false,\n})\n\n\u002F\u002F snapshot.lines          — all lines in the buffer\n\u002F\u002F snapshot.matches        — matched entries with .text, .before, .after\n\u002F\u002F snapshot.totalLines\n\u002F\u002F snapshot.matchedLines\n\u002F\u002F snapshot.raw            — full buffer as a single string\n",[18,726,727,746,760,786,800,813,830,840,845,849,855,861,867,873],{"__ignoreMap":32},[36,728,729,731,734,736,738,740,743],{"class":38,"line":39},[36,730,43],{"class":42},[36,732,733],{"class":46}," snapshot",[36,735,51],{"class":50},[36,737,202],{"class":54},[36,739,58],{"class":50},[36,741,742],{"class":61},"query",[36,744,745],{"class":50},"({\n",[36,747,748,751,754,757],{"class":38,"line":75},[36,749,750],{"class":54},"    search:",[36,752,753],{"class":68}," \"FAIL\"",[36,755,756],{"class":50},",        ",[36,758,759],{"class":210},"\u002F\u002F substring match\n",[36,761,762,765,768,772,775,777,780,783],{"class":38,"line":131},[36,763,764],{"class":54},"    regex:",[36,766,767],{"class":559}," \u002FFAIL\\s",[36,769,771],{"class":770},"svVle","+",[36,773,774],{"class":559},"\\d",[36,776,771],{"class":770},[36,778,779],{"class":559},"\u002F",[36,781,782],{"class":50},",  ",[36,784,785],{"class":210},"\u002F\u002F regex match (use one or the other)\n",[36,787,788,791,794,797],{"class":38,"line":140},[36,789,790],{"class":54},"    context:",[36,792,793],{"class":569}," 3",[36,795,796],{"class":50},",            ",[36,798,799],{"class":210},"\u002F\u002F lines before and after each match\n",[36,801,802,805,808,810],{"class":38,"line":152},[36,803,804],{"class":54},"    lines:",[36,806,807],{"class":569}," 100",[36,809,796],{"class":50},[36,811,812],{"class":210},"\u002F\u002F limit total lines considered\n",[36,814,815,818,821,823,825,827],{"class":38,"line":172},[36,816,817],{"class":54},"    include:",[36,819,820],{"class":50}," [",[36,822,400],{"class":68},[36,824,403],{"class":50},[36,826,380],{"class":68},[36,828,829],{"class":50},"],\n",[36,831,832,835,838],{"class":38,"line":178},[36,833,834],{"class":54},"    caseSensitive:",[36,836,837],{"class":42}," false",[36,839,128],{"class":50},[36,841,842],{"class":38,"line":286},[36,843,844],{"class":50},"})\n",[36,846,847],{"class":38,"line":708},[36,848,501],{"emptyLinePlaceholder":500},[36,850,852],{"class":38,"line":851},10,[36,853,854],{"class":210},"\u002F\u002F snapshot.lines          — all lines in the buffer\n",[36,856,858],{"class":38,"line":857},11,[36,859,860],{"class":210},"\u002F\u002F snapshot.matches        — matched entries with .text, .before, .after\n",[36,862,864],{"class":38,"line":863},12,[36,865,866],{"class":210},"\u002F\u002F snapshot.totalLines\n",[36,868,870],{"class":38,"line":869},13,[36,871,872],{"class":210},"\u002F\u002F snapshot.matchedLines\n",[36,874,876],{"class":38,"line":875},14,[36,877,878],{"class":210},"\u002F\u002F snapshot.raw            — full buffer as a single string\n",[95,880,882],{"id":881},"patterns","Patterns",[189,884,886],{"id":885},"wait-for-a-server-to-be-ready","Wait for a server to be ready",[27,888,890],{"className":29,"code":889,"language":31,"meta":32,"style":32},"const server = process.spawn(\"bun run server.ts\")\nawait server.waitFor(\"Listening on\", { timeoutMs: 15_000 })\n\n\u002F\u002F server is ready — do work\nconst result = await axon.request(\"check the server health\")\n\nserver.kill()\n",[18,891,892,914,937,941,946,972,976],{"__ignoreMap":32},[36,893,894,896,899,901,903,905,907,909,912],{"class":38,"line":39},[36,895,43],{"class":42},[36,897,898],{"class":46}," server",[36,900,51],{"class":50},[36,902,55],{"class":54},[36,904,58],{"class":50},[36,906,62],{"class":61},[36,908,65],{"class":50},[36,910,911],{"class":68},"\"bun run server.ts\"",[36,913,72],{"class":50},[36,915,916,918,920,922,924,926,928,930,932,935],{"class":38,"line":75},[36,917,79],{"class":78},[36,919,898],{"class":54},[36,921,58],{"class":50},[36,923,86],{"class":61},[36,925,65],{"class":50},[36,927,533],{"class":68},[36,929,563],{"class":50},[36,931,566],{"class":54},[36,933,934],{"class":569}," 15_000",[36,936,573],{"class":50},[36,938,939],{"class":38,"line":131},[36,940,501],{"emptyLinePlaceholder":500},[36,942,943],{"class":38,"line":140},[36,944,945],{"class":210},"\u002F\u002F server is ready — do work\n",[36,947,948,950,953,955,957,960,962,965,967,970],{"class":38,"line":152},[36,949,43],{"class":42},[36,951,952],{"class":46}," result",[36,954,51],{"class":50},[36,956,79],{"class":78},[36,958,959],{"class":54}," axon",[36,961,58],{"class":50},[36,963,964],{"class":61},"request",[36,966,65],{"class":50},[36,968,969],{"class":68},"\"check the server health\"",[36,971,72],{"class":50},[36,973,974],{"class":38,"line":172},[36,975,501],{"emptyLinePlaceholder":500},[36,977,978,981,983,985],{"class":38,"line":178},[36,979,980],{"class":54},"server",[36,982,58],{"class":50},[36,984,314],{"class":61},[36,986,987],{"class":50},"()\n",[189,989,991],{"id":990},"stream-build-output","Stream build output",[27,993,995],{"className":29,"code":994,"language":31,"meta":32,"style":32},"const build = process.spawn(\"bun run build --watch\")\n\nfor await (const line of build.watch(\u002Fcompiled\u002F)) {\n    console.log(\"Build:\", line)\n}\n",[18,996,997,1019,1023,1051,1072],{"__ignoreMap":32},[36,998,999,1001,1004,1006,1008,1010,1012,1014,1017],{"class":38,"line":39},[36,1000,43],{"class":42},[36,1002,1003],{"class":46}," build",[36,1005,51],{"class":50},[36,1007,55],{"class":54},[36,1009,58],{"class":50},[36,1011,62],{"class":61},[36,1013,65],{"class":50},[36,1015,1016],{"class":68},"\"bun run build --watch\"",[36,1018,72],{"class":50},[36,1020,1021],{"class":38,"line":75},[36,1022,501],{"emptyLinePlaceholder":500},[36,1024,1025,1027,1029,1031,1033,1035,1037,1039,1041,1043,1045,1048],{"class":38,"line":131},[36,1026,592],{"class":78},[36,1028,595],{"class":78},[36,1030,598],{"class":50},[36,1032,43],{"class":42},[36,1034,603],{"class":46},[36,1036,606],{"class":42},[36,1038,1003],{"class":54},[36,1040,58],{"class":50},[36,1042,613],{"class":61},[36,1044,65],{"class":50},[36,1046,1047],{"class":559},"\u002Fcompiled\u002F",[36,1049,1050],{"class":50},")) {\n",[36,1052,1053,1056,1058,1061,1063,1066,1068,1070],{"class":38,"line":140},[36,1054,1055],{"class":54},"    console",[36,1057,58],{"class":50},[36,1059,1060],{"class":61},"log",[36,1062,65],{"class":50},[36,1064,1065],{"class":68},"\"Build:\"",[36,1067,403],{"class":50},[36,1069,38],{"class":54},[36,1071,72],{"class":50},[36,1073,1074],{"class":38,"line":152},[36,1075,1076],{"class":50},"}\n",[189,1078,1080],{"id":1079},"run-a-process-and-inspect-failures","Run a process and inspect failures",[27,1082,1084],{"className":29,"code":1083,"language":31,"meta":32,"style":32},"const proc = process.spawn(\"bun test --reporter=verbose\")\nconst { ok } = await proc.exited\n\nif (!ok) {\n    const failures = proc.query({ search: \"FAIL\", context: 5 })\n    for (const match of failures.matches) {\n        console.log(match.text)\n        console.log(match.after.join(\"\\n\"))\n    }\n}\n",[18,1085,1086,1107,1125,1129,1142,1176,1199,1220,1254,1258],{"__ignoreMap":32},[36,1087,1088,1090,1092,1094,1096,1098,1100,1102,1105],{"class":38,"line":39},[36,1089,43],{"class":42},[36,1091,47],{"class":46},[36,1093,51],{"class":50},[36,1095,55],{"class":54},[36,1097,58],{"class":50},[36,1099,62],{"class":61},[36,1101,65],{"class":50},[36,1103,1104],{"class":68},"\"bun test --reporter=verbose\"",[36,1106,72],{"class":50},[36,1108,1109,1111,1113,1115,1117,1119,1121,1123],{"class":38,"line":75},[36,1110,43],{"class":42},[36,1112,472],{"class":50},[36,1114,479],{"class":46},[36,1116,486],{"class":50},[36,1118,79],{"class":78},[36,1120,47],{"class":54},[36,1122,58],{"class":50},[36,1124,495],{"class":54},[36,1126,1127],{"class":38,"line":131},[36,1128,501],{"emptyLinePlaceholder":500},[36,1130,1131,1134,1137,1139],{"class":38,"line":140},[36,1132,1133],{"class":78},"if",[36,1135,1136],{"class":50}," (!",[36,1138,479],{"class":54},[36,1140,1141],{"class":50},") {\n",[36,1143,1144,1147,1150,1152,1154,1156,1158,1161,1164,1166,1168,1171,1174],{"class":38,"line":152},[36,1145,1146],{"class":42},"    const",[36,1148,1149],{"class":46}," failures",[36,1151,51],{"class":50},[36,1153,202],{"class":54},[36,1155,58],{"class":50},[36,1157,742],{"class":61},[36,1159,1160],{"class":50},"({ ",[36,1162,1163],{"class":54},"search:",[36,1165,753],{"class":68},[36,1167,403],{"class":50},[36,1169,1170],{"class":54},"context:",[36,1172,1173],{"class":569}," 5",[36,1175,573],{"class":50},[36,1177,1178,1181,1183,1185,1188,1190,1192,1194,1197],{"class":38,"line":172},[36,1179,1180],{"class":78},"    for",[36,1182,598],{"class":50},[36,1184,43],{"class":42},[36,1186,1187],{"class":46}," match",[36,1189,606],{"class":42},[36,1191,1149],{"class":54},[36,1193,58],{"class":50},[36,1195,1196],{"class":54},"matches",[36,1198,1141],{"class":50},[36,1200,1201,1204,1206,1208,1210,1213,1215,1218],{"class":38,"line":178},[36,1202,1203],{"class":54},"        console",[36,1205,58],{"class":50},[36,1207,1060],{"class":61},[36,1209,65],{"class":50},[36,1211,1212],{"class":54},"match",[36,1214,58],{"class":50},[36,1216,1217],{"class":54},"text",[36,1219,72],{"class":50},[36,1221,1222,1224,1226,1228,1230,1232,1234,1237,1239,1242,1244,1247,1250,1252],{"class":38,"line":286},[36,1223,1203],{"class":54},[36,1225,58],{"class":50},[36,1227,1060],{"class":61},[36,1229,65],{"class":50},[36,1231,1212],{"class":54},[36,1233,58],{"class":50},[36,1235,1236],{"class":54},"after",[36,1238,58],{"class":50},[36,1240,1241],{"class":61},"join",[36,1243,65],{"class":50},[36,1245,1246],{"class":68},"\"",[36,1248,1249],{"class":770},"\\n",[36,1251,1246],{"class":68},[36,1253,705],{"class":50},[36,1255,1256],{"class":38,"line":708},[36,1257,175],{"class":50},[36,1259,1260],{"class":38,"line":851},[36,1261,1076],{"class":50},[14,1263,1264,1265,1270],{},"For commands where you just need the complete output, use\n",[1266,1267,1269],"a",{"href":1268},"\u002Fdocs\u002Fv2\u002Fapi\u002Fproc\u002Frun","process.run"," instead.",[1272,1273,1274],"style",{},"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 .sTNBD, html code.shiki .sTNBD{--shiki-default:#D4D4D4}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}html pre.shiki code .sxaxS, html code.shiki .sxaxS{--shiki-default:#D16969}html pre.shiki code .sDGX8, html code.shiki .sDGX8{--shiki-default:#B5CEA8}html pre.shiki code .svVle, html code.shiki .svVle{--shiki-default:#D7BA7D}",{"title":32,"searchDepth":75,"depth":75,"links":1276},[1277,1278,1286],{"id":97,"depth":75,"text":98},{"id":187,"depth":75,"text":20,"children":1279},[1280,1281,1282,1283,1284,1285],{"id":191,"depth":131,"text":192},{"id":299,"depth":131,"text":300},{"id":343,"depth":131,"text":344},{"id":454,"depth":131,"text":455},{"id":576,"depth":131,"text":577},{"id":720,"depth":131,"text":721},{"id":881,"depth":75,"text":882,"children":1287},[1288,1289,1290],{"id":885,"depth":131,"text":886},{"id":990,"depth":131,"text":991},{"id":1079,"depth":131,"text":1080},"Starts a shell command and returns a LiveProcHandle immediately. The process runs\nin the background, tracked by the capsule and visible to the agent in the AIR\n\u003Cprocesses> context on each cognitive tick.","md",{},"\u002Fdocs\u002Fv2\u002Fapi\u002Fproc\u002Fspawn",{"title":5,"description":1291},"docs\u002Fv2\u002Fapi\u002Fproc\u002Fspawn","jNlfBd6CUrk8upXutZjkVA1jGhxDZg53PJTJUK2X6oI",1785671808358]