[{"data":1,"prerenderedAt":647},["ShallowReactive",2],{"docs-\u002Fdocs\u002Fv2\u002Ftui\u002Fapi\u002Fmode":3},{"id":4,"title":5,"body":6,"description":640,"extension":641,"meta":642,"navigation":96,"path":643,"seo":644,"stem":645,"__hash__":646},"docs\u002Fdocs\u002Fv2\u002Ftui\u002Fapi\u002Fmode.md","mode",{"type":7,"value":8,"toc":633},"minimark",[9,12,25,173,178,307,311,403,406,420,424,509,526,530,550,562,566,629],[10,11,5],"h1",{"id":5},[13,14,15,16,20,21,24],"p",{},"The active mode. Accepts any built-in and any palette registered with\n",[17,18,19],"code",{},"palette.create"," — which is why ",[17,22,23],{},"ModeName"," is not a closed union.",[26,27,32],"pre",{"className":28,"code":29,"language":30,"meta":31,"style":31},"language-ts shiki shiki-themes dark-plus","interface ModeApi {\n    \u002F\u002F Switch modes. Throws MODE_UNKNOWN rather than silently doing nothing.\n    set(mode: ModeName): Promise\u003Cvoid>\n\n    \u002F\u002F The active mode. \"normal\" when the user is just typing.\n    get(): ModeName\n\n    \u002F\u002F The glyph currently shown at the input bar.\n    symbol(): string\n}\n\ntype ModeName = BuiltinMode | (string & {})\n","ts","",[17,33,34,51,58,91,98,104,116,121,127,138,144,149],{"__ignoreMap":31},[35,36,39,43,47],"span",{"class":37,"line":38},"line",1,[35,40,42],{"class":41},"scz_3","interface",[35,44,46],{"class":45},"sNl3T"," ModeApi",[35,48,50],{"class":49},"sTNBD"," {\n",[35,52,54],{"class":37,"line":53},2,[35,55,57],{"class":56},"sOLPB","    \u002F\u002F Switch modes. Throws MODE_UNKNOWN rather than silently doing nothing.\n",[35,59,61,65,68,71,74,76,79,82,85,88],{"class":37,"line":60},3,[35,62,64],{"class":63},"sCudf","    set",[35,66,67],{"class":49},"(",[35,69,5],{"class":70},"s3F5K",[35,72,73],{"class":49},": ",[35,75,23],{"class":45},[35,77,78],{"class":49},"): ",[35,80,81],{"class":45},"Promise",[35,83,84],{"class":49},"\u003C",[35,86,87],{"class":45},"void",[35,89,90],{"class":49},">\n",[35,92,94],{"class":37,"line":93},4,[35,95,97],{"emptyLinePlaceholder":96},true,"\n",[35,99,101],{"class":37,"line":100},5,[35,102,103],{"class":56},"    \u002F\u002F The active mode. \"normal\" when the user is just typing.\n",[35,105,107,110,113],{"class":37,"line":106},6,[35,108,109],{"class":63},"    get",[35,111,112],{"class":49},"(): ",[35,114,115],{"class":45},"ModeName\n",[35,117,119],{"class":37,"line":118},7,[35,120,97],{"emptyLinePlaceholder":96},[35,122,124],{"class":37,"line":123},8,[35,125,126],{"class":56},"    \u002F\u002F The glyph currently shown at the input bar.\n",[35,128,130,133,135],{"class":37,"line":129},9,[35,131,132],{"class":63},"    symbol",[35,134,112],{"class":49},[35,136,137],{"class":45},"string\n",[35,139,141],{"class":37,"line":140},10,[35,142,143],{"class":49},"}\n",[35,145,147],{"class":37,"line":146},11,[35,148,97],{"emptyLinePlaceholder":96},[35,150,152,155,158,161,164,167,170],{"class":37,"line":151},12,[35,153,154],{"class":41},"type",[35,156,157],{"class":45}," ModeName",[35,159,160],{"class":49}," = ",[35,162,163],{"class":45},"BuiltinMode",[35,165,166],{"class":49}," | (",[35,168,169],{"class":45},"string",[35,171,172],{"class":49}," & {})\n",[174,175,177],"h2",{"id":176},"built-in-modes","Built-in modes",[26,179,181],{"className":28,"code":180,"language":30,"meta":31,"style":31},"\"normal\"      \u002F\u002F »   the message box\n\"command\"     \u002F\u002F :   the command tree\n\"agent\"       \u002F\u002F ~   start an agent\n\"instance\"    \u002F\u002F \u002F   live conversations\n\"session\"     \u002F\u002F ^   past conversations\n\"model\"       \u002F\u002F *   set the agent's model\n\"module\"      \u002F\u002F %   agent modules\n\"prompt\"      \u002F\u002F >   insert a prompt\n\"theme\"       \u002F\u002F \"   colour themes\n\"voice\"       \u002F\u002F #   voice input\n\"help\"        \u002F\u002F ?   keyboard reference\n\"file\"        \u002F\u002F @   file reference\n\"history\"     \u002F\u002F ↑   previous messages\n\"loading\"     \u002F\u002F ⠋   spinner — not user-activatable\n\"escalation\"  \u002F\u002F ‼   a capsule policy prompt\n",[17,182,183,192,200,208,216,224,232,240,248,256,264,272,280,289,298],{"__ignoreMap":31},[35,184,185,189],{"class":37,"line":38},[35,186,188],{"class":187},"sKc5r","\"normal\"",[35,190,191],{"class":56},"      \u002F\u002F »   the message box\n",[35,193,194,197],{"class":37,"line":53},[35,195,196],{"class":187},"\"command\"",[35,198,199],{"class":56},"     \u002F\u002F :   the command tree\n",[35,201,202,205],{"class":37,"line":60},[35,203,204],{"class":187},"\"agent\"",[35,206,207],{"class":56},"       \u002F\u002F ~   start an agent\n",[35,209,210,213],{"class":37,"line":93},[35,211,212],{"class":187},"\"instance\"",[35,214,215],{"class":56},"    \u002F\u002F \u002F   live conversations\n",[35,217,218,221],{"class":37,"line":100},[35,219,220],{"class":187},"\"session\"",[35,222,223],{"class":56},"     \u002F\u002F ^   past conversations\n",[35,225,226,229],{"class":37,"line":106},[35,227,228],{"class":187},"\"model\"",[35,230,231],{"class":56},"       \u002F\u002F *   set the agent's model\n",[35,233,234,237],{"class":37,"line":118},[35,235,236],{"class":187},"\"module\"",[35,238,239],{"class":56},"      \u002F\u002F %   agent modules\n",[35,241,242,245],{"class":37,"line":123},[35,243,244],{"class":187},"\"prompt\"",[35,246,247],{"class":56},"      \u002F\u002F >   insert a prompt\n",[35,249,250,253],{"class":37,"line":129},[35,251,252],{"class":187},"\"theme\"",[35,254,255],{"class":56},"       \u002F\u002F \"   colour themes\n",[35,257,258,261],{"class":37,"line":140},[35,259,260],{"class":187},"\"voice\"",[35,262,263],{"class":56},"       \u002F\u002F #   voice input\n",[35,265,266,269],{"class":37,"line":146},[35,267,268],{"class":187},"\"help\"",[35,270,271],{"class":56},"        \u002F\u002F ?   keyboard reference\n",[35,273,274,277],{"class":37,"line":151},[35,275,276],{"class":187},"\"file\"",[35,278,279],{"class":56},"        \u002F\u002F @   file reference\n",[35,281,283,286],{"class":37,"line":282},13,[35,284,285],{"class":187},"\"history\"",[35,287,288],{"class":56},"     \u002F\u002F ↑   previous messages\n",[35,290,292,295],{"class":37,"line":291},14,[35,293,294],{"class":187},"\"loading\"",[35,296,297],{"class":56},"     \u002F\u002F ⠋   spinner — not user-activatable\n",[35,299,301,304],{"class":37,"line":300},15,[35,302,303],{"class":187},"\"escalation\"",[35,305,306],{"class":56},"  \u002F\u002F ‼   a capsule policy prompt\n",[174,308,310],{"id":309},"switching","Switching",[26,312,314],{"className":28,"code":313,"language":30,"meta":31,"style":31},"await mode.set(\"command\")    \u002F\u002F as pressing : does\nawait mode.set(\"branches\")   \u002F\u002F a palette you created\nawait mode.set(\"normal\")     \u002F\u002F back to the message box\nawait mode.set(\"nope\")       \u002F\u002F MODE_UNKNOWN\n",[17,315,316,341,362,382],{"__ignoreMap":31},[35,317,318,322,325,328,331,333,335,338],{"class":37,"line":38},[35,319,321],{"class":320},"sYbnZ","await",[35,323,324],{"class":70}," mode",[35,326,327],{"class":49},".",[35,329,330],{"class":63},"set",[35,332,67],{"class":49},[35,334,196],{"class":187},[35,336,337],{"class":49},")    ",[35,339,340],{"class":56},"\u002F\u002F as pressing : does\n",[35,342,343,345,347,349,351,353,356,359],{"class":37,"line":53},[35,344,321],{"class":320},[35,346,324],{"class":70},[35,348,327],{"class":49},[35,350,330],{"class":63},[35,352,67],{"class":49},[35,354,355],{"class":187},"\"branches\"",[35,357,358],{"class":49},")   ",[35,360,361],{"class":56},"\u002F\u002F a palette you created\n",[35,363,364,366,368,370,372,374,376,379],{"class":37,"line":60},[35,365,321],{"class":320},[35,367,324],{"class":70},[35,369,327],{"class":49},[35,371,330],{"class":63},[35,373,67],{"class":49},[35,375,188],{"class":187},[35,377,378],{"class":49},")     ",[35,380,381],{"class":56},"\u002F\u002F back to the message box\n",[35,383,384,386,388,390,392,394,397,400],{"class":37,"line":93},[35,385,321],{"class":320},[35,387,324],{"class":70},[35,389,327],{"class":49},[35,391,330],{"class":63},[35,393,67],{"class":49},[35,395,396],{"class":187},"\"nope\"",[35,398,399],{"class":49},")       ",[35,401,402],{"class":56},"\u002F\u002F MODE_UNKNOWN\n",[13,404,405],{},"Throws rather than silently doing nothing — a mode set that quietly failed would be\nindistinguishable from one that worked and immediately closed.",[13,407,408,411,412,415,416,419],{},[17,409,410],{},"mode.set(\"normal\")"," and ",[17,413,414],{},"palette.close()"," are the same act. ",[17,417,418],{},"palette.open()"," is the\nstricter door: it refuses to steal the palette from another.",[174,421,423],{"id":422},"reading","Reading",[26,425,427],{"className":28,"code":426,"language":30,"meta":31,"style":31},"keys.register(\"ctrl+b\", async () => {\n    if (mode.get() !== \"normal\") return\n    await palette.open(\"branches\")\n})\n",[17,428,429,458,484,504],{"__ignoreMap":31},[35,430,431,434,436,439,441,444,447,450,453,456],{"class":37,"line":38},[35,432,433],{"class":70},"keys",[35,435,327],{"class":49},[35,437,438],{"class":63},"register",[35,440,67],{"class":49},[35,442,443],{"class":187},"\"ctrl+b\"",[35,445,446],{"class":49},", ",[35,448,449],{"class":41},"async",[35,451,452],{"class":49}," () ",[35,454,455],{"class":41},"=>",[35,457,50],{"class":49},[35,459,460,463,466,468,470,473,476,478,481],{"class":37,"line":53},[35,461,462],{"class":320},"    if",[35,464,465],{"class":49}," (",[35,467,5],{"class":70},[35,469,327],{"class":49},[35,471,472],{"class":63},"get",[35,474,475],{"class":49},"() !== ",[35,477,188],{"class":187},[35,479,480],{"class":49},") ",[35,482,483],{"class":320},"return\n",[35,485,486,489,492,494,497,499,501],{"class":37,"line":60},[35,487,488],{"class":320},"    await",[35,490,491],{"class":70}," palette",[35,493,327],{"class":49},[35,495,496],{"class":63},"open",[35,498,67],{"class":49},[35,500,355],{"class":187},[35,502,503],{"class":49},")\n",[35,505,506],{"class":37,"line":93},[35,507,508],{"class":49},"})\n",[13,510,511,512,515,516,519,520,411,523,327],{},"For \"is a list open\" specifically prefer ",[17,513,514],{},"palette.isOpen"," — it excludes ",[17,517,518],{},"loading",",\n",[17,521,522],{},"voice",[17,524,525],{},"escalation",[174,527,529],{"id":528},"symbol-is-not-the-mode-key","symbol() is not the mode key",[26,531,533],{"className":28,"code":532,"language":30,"meta":31,"style":31},"mode.symbol()   \u002F\u002F \"»\" in normal, \":\" in command, \"⠋\" while loading\n",[17,534,535],{"__ignoreMap":31},[35,536,537,539,541,544,547],{"class":37,"line":38},[35,538,5],{"class":70},[35,540,327],{"class":49},[35,542,543],{"class":63},"symbol",[35,545,546],{"class":49},"()   ",[35,548,549],{"class":56},"\u002F\u002F \"»\" in normal, \":\" in command, \"⠋\" while loading\n",[13,551,552,411,554,557,558,561],{},[17,553,518],{},[17,555,556],{},"history"," have glyphs but no key, and a palette registered without a ",[17,559,560],{},"key","\nstill shows one. Asking is the only way to get what is actually painted.",[174,563,565],{"id":564},"reacting-instead-of-polling","Reacting instead of polling",[26,567,569],{"className":28,"code":568,"language":30,"meta":31,"style":31},"tui.hook(\"mode:changed\", ({ from, to }) => {\n    if (to === \"voice\") startVisualiser()\n})\n",[17,570,571,604,625],{"__ignoreMap":31},[35,572,573,576,578,581,583,586,589,592,594,597,600,602],{"class":37,"line":38},[35,574,575],{"class":70},"tui",[35,577,327],{"class":49},[35,579,580],{"class":63},"hook",[35,582,67],{"class":49},[35,584,585],{"class":187},"\"mode:changed\"",[35,587,588],{"class":49},", ({ ",[35,590,591],{"class":70},"from",[35,593,446],{"class":49},[35,595,596],{"class":70},"to",[35,598,599],{"class":49}," }) ",[35,601,455],{"class":41},[35,603,50],{"class":49},[35,605,606,608,610,612,615,617,619,622],{"class":37,"line":53},[35,607,462],{"class":320},[35,609,465],{"class":49},[35,611,596],{"class":70},[35,613,614],{"class":49}," === ",[35,616,260],{"class":187},[35,618,480],{"class":49},[35,620,621],{"class":63},"startVisualiser",[35,623,624],{"class":49},"()\n",[35,626,627],{"class":37,"line":60},[35,628,508],{"class":49},[630,631,632],"style",{},"html pre.shiki code .scz_3, html code.shiki .scz_3{--shiki-default:#569CD6}html pre.shiki code .sNl3T, html code.shiki .sNl3T{--shiki-default:#4EC9B0}html pre.shiki code .sTNBD, html code.shiki .sTNBD{--shiki-default:#D4D4D4}html pre.shiki code .sOLPB, html code.shiki .sOLPB{--shiki-default:#6A9955}html pre.shiki code .sCudf, html code.shiki .sCudf{--shiki-default:#DCDCAA}html pre.shiki code .s3F5K, html code.shiki .s3F5K{--shiki-default:#9CDCFE}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 .sKc5r, html code.shiki .sKc5r{--shiki-default:#CE9178}html pre.shiki code .sYbnZ, html code.shiki .sYbnZ{--shiki-default:#C586C0}",{"title":31,"searchDepth":53,"depth":53,"links":634},[635,636,637,638,639],{"id":176,"depth":53,"text":177},{"id":309,"depth":53,"text":310},{"id":422,"depth":53,"text":423},{"id":528,"depth":53,"text":529},{"id":564,"depth":53,"text":565},"The active mode. Accepts any built-in and any palette registered with\npalette.create — which is why ModeName is not a closed union.","md",{},"\u002Fdocs\u002Fv2\u002Ftui\u002Fapi\u002Fmode",{"title":5,"description":640},"docs\u002Fv2\u002Ftui\u002Fapi\u002Fmode","1Wg3eYcQtl0hwCxCFv5rpbaQgZ1C2yQSdO_USOIeoSo",1786791207947]