[{"data":1,"prerenderedAt":1675},["ShallowReactive",2],{"navigation_docs":3,"-reference-ui-control-channel":172,"-reference-ui-control-channel-surround":1670},[4,30,100,134],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":29},"Getting started","i-lucide-rocket","\u002Fgetting-started","1.getting-started",[10,14,18,21,25],{"title":11,"path":12,"stem":13},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction",{"title":15,"path":16,"stem":17},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation",{"title":5,"path":19,"stem":20},"\u002Fgetting-started\u002Fquick-start","1.getting-started\u002F3.quick-start",{"title":22,"path":23,"stem":24},"Build from source","\u002Fgetting-started\u002Fbuild-from-source","1.getting-started\u002F4.build-from-source",{"title":26,"path":27,"stem":28},"Troubleshooting","\u002Fgetting-started\u002Ftroubleshooting","1.getting-started\u002F5.troubleshooting",false,{"title":31,"icon":32,"path":33,"stem":34,"children":35,"page":29},"Guide","i-lucide-book-open","\u002Fguide","2.guide",[36,40,44,48,52,56,60,64,68,72,76,80,84,88,92,96],{"title":37,"path":38,"stem":39},"Interface","\u002Fguide\u002Finterface","2.guide\u002F01.interface",{"title":41,"path":42,"stem":43},"Workspace","\u002Fguide\u002Fworkspace","2.guide\u002F02.workspace",{"title":45,"path":46,"stem":47},"Collections","\u002Fguide\u002Fcollections","2.guide\u002F03.collections",{"title":49,"path":50,"stem":51},"HTTP requests","\u002Fguide\u002Fhttp-requests","2.guide\u002F04.http-requests",{"title":53,"path":54,"stem":55},"Variables","\u002Fguide\u002Fvariables","2.guide\u002F05.variables",{"title":57,"path":58,"stem":59},"Authorization","\u002Fguide\u002Fauthorization","2.guide\u002F06.authorization",{"title":61,"path":62,"stem":63},"Scripts and tests","\u002Fguide\u002Fscripts-and-tests","2.guide\u002F07.scripts-and-tests",{"title":65,"path":66,"stem":67},"Collection runner","\u002Fguide\u002Fcollection-runner","2.guide\u002F08.collection-runner",{"title":69,"path":70,"stem":71},"Import and export","\u002Fguide\u002Fimport-export","2.guide\u002F09.import-export",{"title":73,"path":74,"stem":75},"Code snippets","\u002Fguide\u002Fcode-snippets","2.guide\u002F10.code-snippets",{"title":77,"path":78,"stem":79},"gRPC","\u002Fguide\u002Fgrpc","2.guide\u002F11.grpc",{"title":81,"path":82,"stem":83},"WebSocket","\u002Fguide\u002Fwebsocket","2.guide\u002F12.websocket",{"title":85,"path":86,"stem":87},"Cookies, proxy and certificates","\u002Fguide\u002Fcookies-proxy-certificates","2.guide\u002F13.cookies-proxy-certificates",{"title":89,"path":90,"stem":91},"Settings","\u002Fguide\u002Fsettings","2.guide\u002F14.settings",{"title":93,"path":94,"stem":95},"Keyboard shortcuts","\u002Fguide\u002Fkeyboard-shortcuts","2.guide\u002F15.keyboard-shortcuts",{"title":97,"path":98,"stem":99},"Privacy and security","\u002Fguide\u002Fprivacy-and-security","2.guide\u002F16.privacy-and-security",{"title":101,"icon":102,"path":103,"stem":104,"children":105,"page":29},"Reference","i-lucide-square-terminal","\u002Freference","3.reference",[106,110,114,118,122,126,130],{"title":107,"path":108,"stem":109},"Command line","\u002Freference\u002Fcli","3.reference\u002F1.cli",{"title":111,"path":112,"stem":113},"Automation tools","\u002Freference\u002Fautomation-tools","3.reference\u002F2.automation-tools",{"title":115,"path":116,"stem":117},"Scripting API","\u002Freference\u002Fscripting-api","3.reference\u002F3.scripting-api",{"title":119,"path":120,"stem":121},"Dynamic variables","\u002Freference\u002Fdynamic-variables","3.reference\u002F4.dynamic-variables",{"title":123,"path":124,"stem":125},"UI control channel","\u002Freference\u002Fui-control-channel","3.reference\u002F5.ui-control-channel",{"title":127,"path":128,"stem":129},"Workspace format","\u002Freference\u002Fworkspace-format","3.reference\u002F6.workspace-format",{"title":131,"path":132,"stem":133},"Feature status","\u002Freference\u002Ffeature-status","3.reference\u002F7.feature-status",{"title":135,"icon":136,"path":137,"stem":138,"children":139,"page":29},"Contributing","i-lucide-git-pull-request","\u002Fcontributing","4.contributing",[140,144,148,152,156,160,164,168],{"title":141,"path":142,"stem":143},"Contributing overview","\u002Fcontributing\u002Foverview","4.contributing\u002F1.overview",{"title":145,"path":146,"stem":147},"Development","\u002Fcontributing\u002Fdevelopment","4.contributing\u002F2.development",{"title":149,"path":150,"stem":151},"Architecture","\u002Fcontributing\u002Farchitecture","4.contributing\u002F3.architecture",{"title":153,"path":154,"stem":155},"Known gaps","\u002Fcontributing\u002Fgaps","4.contributing\u002F4.gaps",{"title":157,"path":158,"stem":159},"Adding a feature","\u002Fcontributing\u002Fadding-a-feature","4.contributing\u002F5.adding-a-feature",{"title":161,"path":162,"stem":163},"Assets and clean-room","\u002Fcontributing\u002Fassets-and-clean-room","4.contributing\u002F6.assets-and-clean-room",{"title":165,"path":166,"stem":167},"Releasing","\u002Fcontributing\u002Freleasing","4.contributing\u002F7.releasing",{"title":169,"path":170,"stem":171},"Writing the documentation","\u002Fcontributing\u002Fdocumentation","4.contributing\u002F8.documentation",{"id":173,"title":123,"body":174,"description":1663,"extension":1664,"links":1665,"meta":1666,"navigation":1667,"path":124,"seo":1668,"stem":125,"__hash__":1669},"docs\u002F3.reference\u002F5.ui-control-channel.md",{"type":175,"value":176,"toc":1649},"minimark",[177,195,199,204,235,256,280,284,350,397,408,412,419,427,563,569,574,655,675,679,684,904,1020,1025,1043,1189,1192,1198,1203,1216,1452,1466,1471,1501,1510,1554,1566,1587,1593,1620,1624,1645],[178,179,180,181,185,186,190,191,194],"p",{},"The control channel lets a script or an agent look at and steer a running Postguy window. You can read which tabs are open, run a command, switch a panel, or take a screenshot. It is ",[182,183,184],"strong",{},"off by default",". It exists only when you launch the app with ",[187,188,189],"code",{},"--control FILE",". You reach it with ",[187,192,193],{},"postguy-cli ui",".",[196,197,198],"warning",{},"Anyone who can read the control file can drive the app. Keep it in a private folder. The app writes it owner-only on Unix. On Windows the file gets default permissions, with no owner-only enforcement.",[200,201,203],"h2",{"id":202},"launch","Launch",[205,206,211],"pre",{"className":207,"code":208,"language":209,"meta":210,"style":210},"language-sh shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","postguy --workspace ~\u002Fpostguy-workspace --control \u002Ftmp\u002Fpostguy-control.json\n","sh","",[187,212,213],{"__ignoreMap":210},[214,215,218,222,226,229,232],"span",{"class":216,"line":217},"line",1,[214,219,221],{"class":220},"sBMFI","postguy",[214,223,225],{"class":224},"sfazB"," --workspace",[214,227,228],{"class":224}," ~\u002Fpostguy-workspace",[214,230,231],{"class":224}," --control",[214,233,234],{"class":224}," \u002Ftmp\u002Fpostguy-control.json\n",[205,236,238],{"className":207,"code":237,"language":209,"meta":210,"style":210},"postguy-cli ui --control \u002Ftmp\u002Fpostguy-control.json inspect\n",[187,239,240],{"__ignoreMap":210},[214,241,242,245,248,250,253],{"class":216,"line":217},[214,243,244],{"class":220},"postguy-cli",[214,246,247],{"class":224}," ui",[214,249,231],{"class":224},[214,251,252],{"class":224}," \u002Ftmp\u002Fpostguy-control.json",[214,254,255],{"class":224}," inspect\n",[257,258,259,267,270,277],"ul",{},[260,261,262,263,266],"li",{},"The server binds to ",[187,264,265],{},"127.0.0.1"," on an ephemeral port, never to another address.",[260,268,269],{},"A fresh random token is generated on every launch (64 hexadecimal characters). It is never logged.",[260,271,272,273,276],{},"If the channel cannot start, the app still runs. It reports ",[187,274,275],{},"control channel disabled: ..."," on stderr and in the status bar.",[260,278,279],{},"On exit the app deletes the control file, but only if it still contains this launch's token.",[200,281,283],{"id":282},"the-control-file","The control file",[205,285,289],{"className":286,"code":287,"language":288,"meta":210,"style":210},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\"port\": 53211, \"token\": \"\u003C64 hex characters>\", \"pid\": 4242}\n","json",[187,290,291],{"__ignoreMap":210},[214,292,293,297,300,304,306,309,313,316,319,322,324,326,328,331,333,335,337,340,342,344,347],{"class":216,"line":217},[214,294,296],{"class":295},"sMK4o","{",[214,298,299],{"class":295},"\"",[214,301,303],{"class":302},"spNyl","port",[214,305,299],{"class":295},[214,307,308],{"class":295},":",[214,310,312],{"class":311},"sbssI"," 53211",[214,314,315],{"class":295},",",[214,317,318],{"class":295}," \"",[214,320,321],{"class":302},"token",[214,323,299],{"class":295},[214,325,308],{"class":295},[214,327,318],{"class":295},[214,329,330],{"class":224},"\u003C64 hex characters>",[214,332,299],{"class":295},[214,334,315],{"class":295},[214,336,318],{"class":295},[214,338,339],{"class":302},"pid",[214,341,299],{"class":295},[214,343,308],{"class":295},[214,345,346],{"class":311}," 4242",[214,348,349],{"class":295},"}\n",[351,352,353,366],"table",{},[354,355,356],"thead",{},[357,358,359,363],"tr",{},[360,361,362],"th",{},"Key",[360,364,365],{},"Meaning",[367,368,369,379,388],"tbody",{},[357,370,371,376],{},[372,373,374],"td",{},[187,375,303],{},[372,377,378],{},"The loopback port.",[357,380,381,385],{},[372,382,383],{},[187,384,321],{},[372,386,387],{},"The bearer token for this launch.",[357,389,390,394],{},[372,391,392],{},[187,393,339],{},[372,395,396],{},"The app's process id.",[178,398,399,400,403,404,407],{},"Parent folders are created. A stale file is removed first, so a planted symlink is never followed. The new file is created with ",[187,401,402],{},"create_new"," and mode ",[187,405,406],{},"0600"," on Unix.",[200,409,411],{"id":410},"protocol","Protocol",[178,413,414,415,418],{},"The protocol is plain HTTP\u002F1.1 over TCP, one request per connection (",[187,416,417],{},"Connection: close","). Every request needs this header:",[205,420,425],{"className":421,"code":423,"language":424,"meta":210},[422],"language-text","Authorization: Bearer \u003Ctoken>\n","text",[187,426,423],{"__ignoreMap":210},[351,428,429,443],{},[354,430,431],{},[357,432,433,436,440],{},[360,434,435],{},"HTTP",[360,437,438],{},[187,439,193],{},[360,441,442],{},"Body or query",[367,444,445,460,477,494,512,529,546],{},[357,446,447,452,457],{},[372,448,449],{},[187,450,451],{},"GET \u002Finspect",[372,453,454],{},[187,455,456],{},"inspect",[372,458,459],{},"none",[357,461,462,467,472],{},[372,463,464],{},[187,465,466],{},"POST \u002Fcommand",[372,468,469],{},[187,470,471],{},"command ID",[372,473,474],{},[187,475,476],{},"{\"id\": \"\u003Ccommand id>\"}",[357,478,479,484,489],{},[372,480,481],{},[187,482,483],{},"POST \u002Fset",[372,485,486],{},[187,487,488],{},"set KEY=VALUE",[372,490,491],{},[187,492,493],{},"{\"key\": \"...\", \"value\": ...}",[357,495,496,501,506],{},[372,497,498],{},[187,499,500],{},"GET \u002Fscreenshot?path=\u003Cpercent-encoded path>",[372,502,503],{},[187,504,505],{},"screenshot --out FILE",[372,507,508,509],{},"query ",[187,510,511],{},"path",[357,513,514,519,524],{},[372,515,516],{},[187,517,518],{},"POST \u002Fclick",[372,520,521],{},[187,522,523],{},"click X Y",[372,525,526],{},[187,527,528],{},"{\"x\": 1, \"y\": 2}",[357,530,531,536,541],{},[372,532,533],{},[187,534,535],{},"POST \u002Fkey",[372,537,538],{},[187,539,540],{},"key NAME",[372,542,543],{},[187,544,545],{},"{\"key\": \"...\"}",[357,547,548,553,558],{},[372,549,550],{},[187,551,552],{},"POST \u002Ftype",[372,554,555],{},[187,556,557],{},"type TEXT",[372,559,560],{},[187,561,562],{},"{\"text\": \"...\"}",[178,564,565,566,194],{},"Any other method or path is a 400 ",[187,567,568],{},"unknown control endpoint",[570,571,573],"h3",{"id":572},"status-codes-and-limits","Status codes and limits",[351,575,576,586],{},[354,577,578],{},[357,579,580,583],{},[360,581,582],{},"Status",[360,584,585],{},"When",[367,587,588,598,612,625,635,645],{},[357,589,590,595],{},[372,591,592],{},[187,593,594],{},"200",[372,596,597],{},"Success; the body is the JSON result.",[357,599,600,605],{},[372,601,602],{},[187,603,604],{},"400",[372,606,607,608,611],{},"Bad body, unknown endpoint, or the app refused the request (the body is ",[187,609,610],{},"{\"error\": \"...\"}",").",[357,613,614,619],{},[372,615,616],{},[187,617,618],{},"401",[372,620,621,622,194],{},"Missing or wrong token: ",[187,623,624],{},"{\"error\":\"missing or invalid control token\"}",[357,626,627,632],{},[372,628,629],{},[187,630,631],{},"429",[372,633,634],{},"More than 16 concurrent connections.",[357,636,637,642],{},[372,638,639],{},[187,640,641],{},"503",[372,643,644],{},"The UI queue is unavailable.",[357,646,647,652],{},[372,648,649],{},[187,650,651],{},"504",[372,653,654],{},"The UI did not answer within 20 seconds.",[257,656,657,660,663,669],{},[260,658,659],{},"Request bodies are read up to 1 MiB.",[260,661,662],{},"The server waits at most 10 seconds for the request to arrive.",[260,664,665,666,668],{},"The ",[187,667,193],{}," client waits up to 30 seconds for the response.",[260,670,671,672,674],{},"The client connects to ",[187,673,265],{}," only and refuses a control file that has group or other permission bits on Unix.",[200,676,677],{"id":456},[187,678,456],{},[178,680,681,683],{},[187,682,456],{}," returns the state of the window:",[205,685,687],{"className":286,"code":686,"language":288,"meta":210,"style":210},"{\n  \"tabs\": [{\"id\": 1, \"title\": \"Welcome\", \"dirty\": false}],\n  \"active\": 1,\n  \"panel\": \"welcome\",\n  \"sidebar\": true,\n  \"console\": false,\n  \"right\": false,\n  \"twoPane\": false,\n  \"status\": \"\",\n  \"consoleRows\": 0,\n  \"engine\": true\n}\n",[187,688,689,694,754,771,792,807,822,836,850,867,884,899],{"__ignoreMap":210},[214,690,691],{"class":216,"line":217},[214,692,693],{"class":295},"{\n",[214,695,697,700,703,705,707,710,712,715,717,719,722,724,726,729,731,733,735,738,740,742,744,747,749,751],{"class":216,"line":696},2,[214,698,699],{"class":295},"  \"",[214,701,702],{"class":302},"tabs",[214,704,299],{"class":295},[214,706,308],{"class":295},[214,708,709],{"class":295}," [{",[214,711,299],{"class":295},[214,713,714],{"class":220},"id",[214,716,299],{"class":295},[214,718,308],{"class":295},[214,720,721],{"class":311}," 1",[214,723,315],{"class":295},[214,725,318],{"class":295},[214,727,728],{"class":220},"title",[214,730,299],{"class":295},[214,732,308],{"class":295},[214,734,318],{"class":295},[214,736,737],{"class":224},"Welcome",[214,739,299],{"class":295},[214,741,315],{"class":295},[214,743,318],{"class":295},[214,745,746],{"class":220},"dirty",[214,748,299],{"class":295},[214,750,308],{"class":295},[214,752,753],{"class":295}," false}],\n",[214,755,757,759,762,764,766,768],{"class":216,"line":756},3,[214,758,699],{"class":295},[214,760,761],{"class":302},"active",[214,763,299],{"class":295},[214,765,308],{"class":295},[214,767,721],{"class":311},[214,769,770],{"class":295},",\n",[214,772,774,776,779,781,783,785,788,790],{"class":216,"line":773},4,[214,775,699],{"class":295},[214,777,778],{"class":302},"panel",[214,780,299],{"class":295},[214,782,308],{"class":295},[214,784,318],{"class":295},[214,786,787],{"class":224},"welcome",[214,789,299],{"class":295},[214,791,770],{"class":295},[214,793,795,797,800,802,804],{"class":216,"line":794},5,[214,796,699],{"class":295},[214,798,799],{"class":302},"sidebar",[214,801,299],{"class":295},[214,803,308],{"class":295},[214,805,806],{"class":295}," true,\n",[214,808,810,812,815,817,819],{"class":216,"line":809},6,[214,811,699],{"class":295},[214,813,814],{"class":302},"console",[214,816,299],{"class":295},[214,818,308],{"class":295},[214,820,821],{"class":295}," false,\n",[214,823,825,827,830,832,834],{"class":216,"line":824},7,[214,826,699],{"class":295},[214,828,829],{"class":302},"right",[214,831,299],{"class":295},[214,833,308],{"class":295},[214,835,821],{"class":295},[214,837,839,841,844,846,848],{"class":216,"line":838},8,[214,840,699],{"class":295},[214,842,843],{"class":302},"twoPane",[214,845,299],{"class":295},[214,847,308],{"class":295},[214,849,821],{"class":295},[214,851,853,855,858,860,862,865],{"class":216,"line":852},9,[214,854,699],{"class":295},[214,856,857],{"class":302},"status",[214,859,299],{"class":295},[214,861,308],{"class":295},[214,863,864],{"class":295}," \"\"",[214,866,770],{"class":295},[214,868,870,872,875,877,879,882],{"class":216,"line":869},10,[214,871,699],{"class":295},[214,873,874],{"class":302},"consoleRows",[214,876,299],{"class":295},[214,878,308],{"class":295},[214,880,881],{"class":311}," 0",[214,883,770],{"class":295},[214,885,887,889,892,894,896],{"class":216,"line":886},11,[214,888,699],{"class":295},[214,890,891],{"class":302},"engine",[214,893,299],{"class":295},[214,895,308],{"class":295},[214,897,898],{"class":295}," true\n",[214,900,902],{"class":216,"line":901},12,[214,903,349],{"class":295},[351,905,906,914],{},[354,907,908],{},[357,909,910,912],{},[360,911,362],{},[360,913,365],{},[367,915,916,933,942,978,993,1002,1011],{},[357,917,918,922],{},[372,919,920],{},[187,921,702],{},[372,923,924,925,927,928,930,931,194],{},"Open tabs with ",[187,926,714],{},", ",[187,929,728],{}," and the unsaved-changes flag ",[187,932,746],{},[357,934,935,939],{},[372,936,937],{},[187,938,761],{},[372,940,941],{},"The active tab's id.",[357,943,944,948],{},[372,945,946],{},[187,947,778],{},[372,949,950,951,927,954,927,957,927,960,927,963,927,966,927,969,927,972,975,976,194],{},"The kind of the active tab: ",[187,952,953],{},"request",[187,955,956],{},"environment",[187,958,959],{},"collection",[187,961,962],{},"settings",[187,964,965],{},"cookies",[187,967,968],{},"trash",[187,970,971],{},"runner",[187,973,974],{},"history"," or ",[187,977,787],{},[357,979,980,990],{},[372,981,982,927,984,927,986,927,988],{},[187,983,799],{},[187,985,814],{},[187,987,829],{},[187,989,843],{},[372,991,992],{},"Whether the sidebar, the Console, the code snippet panel and the two-pane layout are on.",[357,994,995,999],{},[372,996,997],{},[187,998,857],{},[372,1000,1001],{},"The status bar text.",[357,1003,1004,1008],{},[372,1005,1006],{},[187,1007,874],{},[372,1009,1010],{},"Number of Console rows.",[357,1012,1013,1017],{},[372,1014,1015],{},[187,1016,891],{},[372,1018,1019],{},"Whether the workspace engine is running.",[200,1021,1023],{"id":1022},"set",[187,1024,1022],{},[178,1026,1027,1030,1031,1034,1035,1038,1039,1042],{},[187,1028,1029],{},"postguy-cli ui set KEY=VALUE"," parses ",[187,1032,1033],{},"VALUE"," as JSON and falls back to a plain string. So ",[187,1036,1037],{},"console=true"," sends a boolean, and ",[187,1040,1041],{},"url=https:\u002F\u002Fexample.com"," sends a string.",[351,1044,1045,1054],{},[354,1046,1047],{},[357,1048,1049,1051],{},[360,1050,362],{},[360,1052,1053],{},"Value",[367,1055,1056,1077,1093,1112,1122,1132,1164],{},[357,1057,1058,1063],{},[372,1059,1060],{},[187,1061,1062],{},"tab",[372,1064,1065,927,1067,927,1070,927,1072,975,1074,1076],{},[187,1066,962],{},[187,1068,1069],{},"globals",[187,1071,965],{},[187,1073,968],{},[187,1075,971],{}," to open that tab; otherwise the title of an open tab (case-insensitive) to activate it.",[357,1078,1079,1090],{},[372,1080,1081,927,1083,927,1085,927,1087],{},[187,1082,799],{},[187,1084,814],{},[187,1086,829],{},[187,1088,1089],{},"two-pane",[372,1091,1092],{},"Boolean. Shows or hides the panel.",[357,1094,1095,1100],{},[372,1096,1097],{},[187,1098,1099],{},"theme",[372,1101,1102,927,1105,975,1108,1111],{},[187,1103,1104],{},"light",[187,1106,1107],{},"dark",[187,1109,1110],{},"system",". Saves the setting.",[357,1113,1114,1119],{},[372,1115,1116],{},[187,1117,1118],{},"url",[372,1120,1121],{},"Sets the active request tab's URL and marks the tab as changed.",[357,1123,1124,1129],{},[372,1125,1126],{},[187,1127,1128],{},"open",[372,1130,1131],{},"A collection id (opens its detail tab) or a request id (opens the request).",[357,1133,1134,1139],{},[372,1135,1136],{},[187,1137,1138],{},"request-tab",[372,1140,1141,927,1144,927,1147,927,1150,927,1153,927,1156,927,1159,975,1161,194],{},[187,1142,1143],{},"params",[187,1145,1146],{},"authorization",[187,1148,1149],{},"headers",[187,1151,1152],{},"body",[187,1154,1155],{},"scripts",[187,1157,1158],{},"tests",[187,1160,962],{},[187,1162,1163],{},"docs",[357,1165,1166,1171],{},[372,1167,1168],{},[187,1169,1170],{},"detail-tab",[372,1172,1173,927,1176,927,1178,927,1181,927,1183,975,1186,194],{},[187,1174,1175],{},"overview",[187,1177,1146],{},[187,1179,1180],{},"variables",[187,1182,1155],{},[187,1184,1185],{},"runs",[187,1187,1188],{},"assets",[178,1190,1191],{},"An unknown key is refused with this error (400):",[205,1193,1196],{"className":1194,"code":1195,"language":424,"meta":210},[422],"unknown key `x`; keys are tab, console, right, two-pane, sidebar, theme, url, open, request-tab, detail-tab\n",[187,1197,1195],{"__ignoreMap":210},[200,1199,1201],{"id":1200},"command",[187,1202,1200],{},[178,1204,1205,1208,1209,1212,1213,194],{},[187,1206,1207],{},"postguy-cli ui command ID"," runs one command from the app's command registry. This is the same table that drives the command palette, the keyboard shortcuts and the menus. It returns ",[187,1210,1211],{},"{\"ok\":true,\"command\":\"\u003Cid>\"}",". An unknown id is an error. Shortcuts for these commands are on ",[1214,1215,93],"a",{"href":94},[351,1217,1218,1228],{},[354,1219,1220],{},[357,1221,1222,1225],{},[360,1223,1224],{},"Group",[360,1226,1227],{},"Command ids",[367,1229,1230,1252,1265,1284,1318,1340,1365,1390,1436],{},[357,1231,1232,1235],{},[372,1233,1234],{},"Create",[372,1236,1237,927,1240,927,1243,927,1246,927,1249],{},[187,1238,1239],{},"request.new",[187,1241,1242],{},"collection.new",[187,1244,1245],{},"environment.new",[187,1247,1248],{},"import.open",[187,1250,1251],{},"workspace.export",[357,1253,1254,1257],{},[372,1255,1256],{},"Request",[372,1258,1259,927,1262],{},[187,1260,1261],{},"request.send",[187,1263,1264],{},"request.cancel",[357,1266,1267,1270],{},[372,1268,1269],{},"Tabs",[372,1271,1272,927,1275,927,1278,927,1281],{},[187,1273,1274],{},"tab.close",[187,1276,1277],{},"tab.reopen",[187,1279,1280],{},"tab.next",[187,1282,1283],{},"tab.previous",[357,1285,1286,1289],{},[372,1287,1288],{},"View",[372,1290,1291,927,1294,927,1297,927,1300,927,1303,927,1306,927,1309,927,1312,927,1315],{},[187,1292,1293],{},"view.sidebar",[187,1295,1296],{},"view.console",[187,1298,1299],{},"view.right",[187,1301,1302],{},"view.two-pane",[187,1304,1305],{},"console.clear",[187,1307,1308],{},"view.zoom-in",[187,1310,1311],{},"view.zoom-out",[187,1313,1314],{},"view.zoom-reset",[187,1316,1317],{},"view.fullscreen",[357,1319,1320,1323],{},[372,1321,1322],{},"Go",[372,1324,1325,927,1328,927,1331,927,1334,927,1337],{},[187,1326,1327],{},"settings.open",[187,1329,1330],{},"globals.open",[187,1332,1333],{},"cookies.open",[187,1335,1336],{},"runner.open",[187,1338,1339],{},"trash.open",[357,1341,1342,1345],{},[372,1343,1344],{},"Edit",[372,1346,1347,927,1350,927,1353,927,1356,927,1359,927,1362],{},[187,1348,1349],{},"edit.undo",[187,1351,1352],{},"edit.redo",[187,1354,1355],{},"edit.cut",[187,1357,1358],{},"edit.copy",[187,1360,1361],{},"edit.paste",[187,1363,1364],{},"edit.delete",[357,1366,1367,1370],{},[372,1368,1369],{},"Window",[372,1371,1372,927,1375,927,1378,927,1381,927,1384,927,1387],{},[187,1373,1374],{},"window.minimize",[187,1376,1377],{},"window.zoom",[187,1379,1380],{},"window.fill",[187,1382,1383],{},"window.center",[187,1385,1386],{},"window.previous-size",[187,1388,1389],{},"window.close",[357,1391,1392,1395],{},[372,1393,1394],{},"Window placement",[372,1396,1397,927,1400,927,1403,927,1406,927,1409,927,1412,927,1415,927,1418,927,1421,927,1424,927,1427,927,1430,927,1433],{},[187,1398,1399],{},"window.left-half",[187,1401,1402],{},"window.right-half",[187,1404,1405],{},"window.top-half",[187,1407,1408],{},"window.bottom-half",[187,1410,1411],{},"window.top-left",[187,1413,1414],{},"window.top-right",[187,1416,1417],{},"window.bottom-left",[187,1419,1420],{},"window.bottom-right",[187,1422,1423],{},"window.left-third",[187,1425,1426],{},"window.center-third",[187,1428,1429],{},"window.right-third",[187,1431,1432],{},"window.left-two-thirds",[187,1434,1435],{},"window.right-two-thirds",[357,1437,1438,1441],{},[372,1439,1440],{},"App and help",[372,1442,1443,927,1446,927,1449],{},[187,1444,1445],{},"app.quit",[187,1447,1448],{},"help.docs",[187,1450,1451],{},"help.github",[1453,1454,1455,1457,1458,1460,1461,1457,1463,1465],"caution",{},[187,1456,1389],{}," and ",[187,1459,1445],{}," close the app. ",[187,1462,1448],{},[187,1464,1451],{}," open your browser. Commands act on the live window exactly as the matching menu item or shortcut would.",[200,1467,1469],{"id":1468},"screenshot",[187,1470,1468],{},[205,1472,1474],{"className":207,"code":1473,"language":209,"meta":210,"style":210},"postguy-cli ui --control \u002Ftmp\u002Fpostguy-control.json screenshot --out shots\u002Fhome.png --root \u002Ftmp\u002Fwork\n",[187,1475,1476],{"__ignoreMap":210},[214,1477,1478,1480,1482,1484,1486,1489,1492,1495,1498],{"class":216,"line":217},[214,1479,244],{"class":220},[214,1481,247],{"class":224},[214,1483,231],{"class":224},[214,1485,252],{"class":224},[214,1487,1488],{"class":224}," screenshot",[214,1490,1491],{"class":224}," --out",[214,1493,1494],{"class":224}," shots\u002Fhome.png",[214,1496,1497],{"class":224}," --root",[214,1499,1500],{"class":224}," \u002Ftmp\u002Fwork\n",[178,1502,1503,1504,1506,1507,194],{},"The app captures the next frame, writes it as a PNG (mode ",[187,1505,406],{}," on Unix, parent folders created) and replies ",[187,1508,1509],{},"{\"ok\":true,\"path\":\"...\"}",[257,1511,1512,1518,1524,1542,1545],{},[260,1513,1514,1515,194],{},"Only one screenshot can be in progress: a second request gets ",[187,1516,1517],{},"a screenshot is already in progress",[260,1519,1520,1521,194],{},"If the windowing system does not deliver the frame within 10 seconds, the reply is ",[187,1522,1523],{},"the screenshot did not arrive from the windowing system",[260,1525,1526,1529,1530,1533,1534,1537,1538,1541],{},[187,1527,1528],{},"--root DIR"," is applied by the ",[182,1531,1532],{},"CLI",", to the ",[187,1535,1536],{},"--out"," path only. A path outside the root is refused with the usual ",[187,1539,1540],{},"is outside the allowed directory"," message.",[260,1543,1544],{},"The app itself writes to whatever path it receives, so a direct HTTP client is not confined.",[260,1546,1547,1548,927,1551,1553],{},"Without ",[187,1549,1550],{},"--root",[187,1552,1536],{}," is used as given.",[200,1555,1557,927,1560,1457,1563],{"id":1556},"click-key-and-type",[187,1558,1559],{},"click",[187,1561,1562],{},"key",[187,1564,1565],{},"type",[178,1567,1568,1569,927,1571,1457,1573,1575,1576,1457,1579,1582,1583,1586],{},"The CLI accepts ",[187,1570,523],{},[187,1572,540],{},[187,1574,557],{}," (",[187,1577,1578],{},"X",[187,1580,1581],{},"Y"," are numbers) and forwards them. The app ",[182,1584,1585],{},"refuses"," all three with a 400:",[205,1588,1591],{"className":1589,"code":1590,"language":424,"meta":210},[422],"synthetic clicks are not supported; use `command` or `set`\nsynthetic keys are not supported; use `command` or `set`\nsynthetic typing is not supported; use `command` or `set`\n",[187,1592,1590],{"__ignoreMap":210},[178,1594,1595,1597,1598,1601,1602,1457,1604,1606,1607,1609,1610,1613,1614,1617,1618,194],{},[187,1596,193],{}," exits 2 with ",[187,1599,1600],{},"ui: {\"error\":\"...\"}",". The reason is that safe egui has no supported way to inject raw pointer and keyboard events into a running window. Use ",[187,1603,1200],{},[187,1605,1022],{}," instead. This is the first entry in ",[1214,1608,153],{"href":154},". ",[187,1611,1612],{},"f.ui-control"," is ",[187,1615,1616],{},"partial"," in ",[1214,1619,131],{"href":132},[200,1621,1623],{"id":1622},"safety-summary","Safety summary",[257,1625,1626,1632,1635,1640],{},[260,1627,1628,1629,1631],{},"Off unless ",[187,1630,189],{}," is given.",[260,1633,1634],{},"Loopback only, token on every request, token file owner-only on Unix, fresh token per launch.",[260,1636,1637,1638,194],{},"The channel never touches the network beyond ",[187,1639,265],{},[260,1641,1642,1644],{},[187,1643,193],{}," never guesses a token and never connects to another address.",[1646,1647,1648],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}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 .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":210,"searchDepth":696,"depth":696,"links":1650},[1651,1652,1653,1656,1657,1658,1659,1660,1662],{"id":202,"depth":696,"text":203},{"id":282,"depth":696,"text":283},{"id":410,"depth":696,"text":411,"children":1654},[1655],{"id":572,"depth":756,"text":573},{"id":456,"depth":696,"text":456},{"id":1022,"depth":696,"text":1022},{"id":1200,"depth":696,"text":1200},{"id":1468,"depth":696,"text":1468},{"id":1556,"depth":696,"text":1661},"click, key and type",{"id":1622,"depth":696,"text":1623},"The opt-in local HTTP channel that lets postguy-cli inspect and drive the running desktop app: launch, control file, endpoints, set keys, command ids and limits.","md",null,{},true,{"title":123,"description":1663},"H9ofDkGMNlPKCgi4DdZGZpJqAMkP_E_eNPti1mGQtzc",[1671,1673],{"title":119,"path":120,"stem":121,"description":1672,"children":-1},"Every built-in dynamic variable (65 names) with the shape of the value it generates.",{"title":127,"path":128,"stem":129,"description":1674,"children":-1},"The on-disk layout of a Postguy workspace folder, the JSON files in it, and the rules for ids, secrets, history, trash, caps and corrupt files.",1793179614263]