[{"data":1,"prerenderedAt":1062},["ShallowReactive",2],{"navigation_docs":3,"-architecture-widget":92,"-architecture-widget-surround-resolved":1055,"daily-note-surround--architecture-widget":95},[4,9,35,66,82,87],{"title":5,"path":6,"stem":5,"icon":7,"order":8},"Home","/home","i-lucide-home",0,{"title":10,"icon":11,"order":12,"path":13,"stem":14,"children":15,"page":34},"Guide","i-lucide-book-open",1,"/guide","1.guide",[16,22,28],{"title":17,"path":18,"stem":19,"icon":20,"order":21},"Installation","/guide/installation","1.guide/1.installation","i-lucide-download",10,{"title":23,"path":24,"stem":25,"icon":26,"order":27},"Usage","/guide/usage","1.guide/2.usage","i-lucide-layers",20,{"title":29,"path":30,"stem":31,"icon":32,"order":33},"Configuration","/guide/configuration","1.guide/3.configuration","i-lucide-settings",30,false,{"title":36,"icon":26,"order":37,"path":38,"stem":39,"children":40,"page":34},"Architecture",2,"/architecture","2.architecture",[41,45,50,55,61],{"title":42,"path":43,"stem":44,"icon":26,"order":21},"Overview","/architecture/overview","2.architecture/1.overview",{"title":46,"path":47,"stem":48,"icon":49,"order":27},"Ghostty","/architecture/ghostty","2.architecture/2.ghostty","i-lucide-terminal",{"title":51,"path":52,"stem":53,"icon":54,"order":33},"Sessions","/architecture/sessions","2.architecture/3.sessions","i-lucide-layout-grid",{"title":56,"path":57,"stem":58,"icon":59,"order":60},"Shell Integration","/architecture/shell-integration","2.architecture/4.shell-integration","i-lucide-plug",40,{"title":62,"path":63,"stem":64,"icon":54,"order":65},"Widget","/architecture/widget","2.architecture/5.widget",50,{"title":67,"icon":68,"order":69,"path":70,"stem":71,"children":72,"page":34},"Development","i-lucide-wrench",3,"/development","3.development",[73,77],{"title":74,"path":75,"stem":76,"icon":68,"order":21},"Building","/development/building","3.development/1.building",{"title":78,"path":79,"stem":80,"icon":81,"order":27},"Distribution","/development/distribution","3.development/2.distribution","i-lucide-package",{"title":83,"path":84,"stem":83,"icon":85,"order":86},"Changelog","/changelog","i-lucide-history",98,{"title":88,"path":89,"stem":88,"icon":90,"order":91},"About","/about","i-lucide-info",99,{"id":93,"title":94,"aliases":95,"body":96,"concluded":95,"date":95,"description":1045,"documentation":95,"extension":1046,"isBase":34,"links":95,"meta":1047,"mtime":95,"navigation":1048,"order":65,"outcome":95,"path":63,"project":95,"repository":95,"seo":1049,"started":95,"status":95,"stem":64,"tags":1050,"team":95,"type":95,"__hash__":1054},"docs/2.architecture/5.widget.md","Desktop Widget",null,{"type":97,"value":98,"toc":1034},"minimark",[99,108,113,165,169,179,208,211,217,221,230,429,433,440,505,514,540,544,551,624,627,661,665,671,909,916,920,925,943,949,953,956,994,998,1030],[100,101,102,103,107],"p",{},"Kytos ships a WidgetKit extension (",[104,105,106],"code",{},"KytosWidget",") that displays live terminal workspace activity on the macOS Desktop. The widget receives data via a shared App Group container — no network, no XPC.",[109,110,112],"h2",{"id":111},"widget-sizes","Widget Sizes",[114,115,116,129],"table",{},[117,118,119],"thead",{},[120,121,122,126],"tr",{},[123,124,125],"th",{},"Size",[123,127,128],{},"Content",[130,131,132,141,149,157],"tbody",{},[120,133,134,138],{},[135,136,137],"td",{},"Small",[135,139,140],{},"Active workspace name + pane count",[120,142,143,146],{},[135,144,145],{},"Medium",[135,147,148],{},"Workspace name, active pane title, working directory",[120,150,151,154],{},[135,152,153],{},"Large",[135,155,156],{},"All workspaces with pane titles and working directories",[120,158,159,162],{},[135,160,161],{},"Extra Large",[135,163,164],{},"Full workspace tree with timestamps",[109,166,168],{"id":167},"data-flow","Data Flow",[170,171,176],"pre",{"className":172,"code":174,"language":175},[173],"language-text","Kytos.app → JSON file → App Group container → KytosWidget\n","text",[104,177,174],{"__ignoreMap":178},"",[180,181,182,193,199,205],"ol",{},[183,184,185,188,189,192],"li",{},[104,186,187],{},"KytosAppModel"," writes ",[104,190,191],{},"widget-snapshot.json"," to the shared container after any state change",[183,194,195,198],{},[104,196,197],{},"WidgetCenter.shared.reloadAllTimelines()"," signals WidgetKit to refresh",[183,200,201,204],{},[104,202,203],{},"KytosWidgetSnapshot"," reads the JSON from the container in the timeline provider",[183,206,207],{},"WidgetKit renders the new data within its refresh budget",[100,209,210],{},"The snapshot file lives at:",[170,212,215],{"className":213,"code":214,"language":175},[173],"~/Library/Containers/me.jwintz.Kytos.KytosWidget/Data/\n  Library/Application Support/Kytos/widget-snapshot.json\n",[104,216,214],{"__ignoreMap":178},[109,218,220],{"id":219},"snapshot-format","Snapshot Format",[100,222,223,225,226,229],{},[104,224,203],{}," is a ",[104,227,228],{},"Codable"," struct written directly into the widget container:",[170,231,235],{"className":232,"code":233,"language":234,"meta":178,"style":178},"language-swift shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","struct KytosWidgetSnapshot: Codable {\n    var workspaces: [WorkspaceSnapshot]\n    var updatedAt: Date\n\n    struct WorkspaceSnapshot: Codable, Identifiable {\n        var id: UUID\n        var title: String\n        var panes: [PaneSnapshot]\n    }\n\n    struct PaneSnapshot: Codable, Identifiable {\n        var id: UUID\n        var title: String\n        var workingDirectory: String?\n        var isFocused: Bool\n    }\n}\n","swift",[104,236,237,259,278,285,292,314,323,334,349,355,359,377,384,393,407,418,423],{"__ignoreMap":178},[238,239,241,245,249,253,256],"span",{"class":240,"line":12},"line",[238,242,244],{"class":243},"spNyl","struct",[238,246,248],{"class":247},"sBMFI"," KytosWidgetSnapshot",[238,250,252],{"class":251},"sMK4o",":",[238,254,255],{"class":247}," Codable ",[238,257,258],{"class":251},"{\n",[238,260,261,265,269,272,275],{"class":240,"line":37},[238,262,264],{"class":263},"sbssI","    var",[238,266,268],{"class":267},"sTEyZ"," workspaces: ",[238,270,271],{"class":251},"[",[238,273,274],{"class":267},"WorkspaceSnapshot",[238,276,277],{"class":251},"]\n",[238,279,280,282],{"class":240,"line":69},[238,281,264],{"class":263},[238,283,284],{"class":267}," updatedAt: Date\n",[238,286,288],{"class":240,"line":287},4,[238,289,291],{"emptyLinePlaceholder":290},true,"\n",[238,293,295,298,301,303,306,309,312],{"class":240,"line":294},5,[238,296,297],{"class":243},"    struct",[238,299,300],{"class":247}," WorkspaceSnapshot",[238,302,252],{"class":251},[238,304,305],{"class":247}," Codable",[238,307,308],{"class":267},", ",[238,310,311],{"class":247},"Identifiable ",[238,313,258],{"class":251},[238,315,317,320],{"class":240,"line":316},6,[238,318,319],{"class":263},"        var",[238,321,322],{"class":267}," id: UUID\n",[238,324,326,328,331],{"class":240,"line":325},7,[238,327,319],{"class":263},[238,329,330],{"class":267}," title: ",[238,332,333],{"class":247},"String\n",[238,335,337,339,342,344,347],{"class":240,"line":336},8,[238,338,319],{"class":263},[238,340,341],{"class":267}," panes: ",[238,343,271],{"class":251},[238,345,346],{"class":267},"PaneSnapshot",[238,348,277],{"class":251},[238,350,352],{"class":240,"line":351},9,[238,353,354],{"class":251},"    }\n",[238,356,357],{"class":240,"line":21},[238,358,291],{"emptyLinePlaceholder":290},[238,360,362,364,367,369,371,373,375],{"class":240,"line":361},11,[238,363,297],{"class":243},[238,365,366],{"class":247}," PaneSnapshot",[238,368,252],{"class":251},[238,370,305],{"class":247},[238,372,308],{"class":267},[238,374,311],{"class":247},[238,376,258],{"class":251},[238,378,380,382],{"class":240,"line":379},12,[238,381,319],{"class":263},[238,383,322],{"class":267},[238,385,387,389,391],{"class":240,"line":386},13,[238,388,319],{"class":263},[238,390,330],{"class":267},[238,392,333],{"class":247},[238,394,396,398,401,404],{"class":240,"line":395},14,[238,397,319],{"class":263},[238,399,400],{"class":267}," workingDirectory: ",[238,402,403],{"class":247},"String",[238,405,406],{"class":251},"?\n",[238,408,410,412,415],{"class":240,"line":409},15,[238,411,319],{"class":263},[238,413,414],{"class":267}," isFocused: ",[238,416,417],{"class":247},"Bool\n",[238,419,421],{"class":240,"line":420},16,[238,422,354],{"class":251},[238,424,426],{"class":240,"line":425},17,[238,427,428],{"class":251},"}\n",[109,430,432],{"id":431},"app-group-configuration","App Group Configuration",[100,434,435,436,439],{},"Both the app and widget share the App Group ",[104,437,438],{},"group.me.jwintz.Kytos",". Both entitlement files include:",[170,441,445],{"className":442,"code":443,"language":444,"meta":178,"style":178},"language-xml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003Ckey>com.apple.security.application-groups\u003C/key>\n\u003Carray>\n    \u003Cstring>group.me.jwintz.Kytos\u003C/string>\n\u003C/array>\n","xml",[104,446,447,470,479,497],{"__ignoreMap":178},[238,448,449,452,456,459,462,465,467],{"class":240,"line":12},[238,450,451],{"class":251},"\u003C",[238,453,455],{"class":454},"swJcz","key",[238,457,458],{"class":251},">",[238,460,461],{"class":267},"com.apple.security.application-groups",[238,463,464],{"class":251},"\u003C/",[238,466,455],{"class":454},[238,468,469],{"class":251},">\n",[238,471,472,474,477],{"class":240,"line":37},[238,473,451],{"class":251},[238,475,476],{"class":454},"array",[238,478,469],{"class":251},[238,480,481,484,487,489,491,493,495],{"class":240,"line":69},[238,482,483],{"class":251},"    \u003C",[238,485,486],{"class":454},"string",[238,488,458],{"class":251},[238,490,438],{"class":267},[238,492,464],{"class":251},[238,494,486],{"class":454},[238,496,469],{"class":251},[238,498,499,501,503],{"class":240,"line":287},[238,500,464],{"class":251},[238,502,476],{"class":454},[238,504,469],{"class":251},[100,506,507,509,510,513],{},[104,508,203],{}," uses ",[104,511,512],{},"FileManager.default.containerURL(forSecurityApplicationGroupIdentifier:)"," to resolve the container path in both the app and the widget extension.",[515,516,518,519,523,524,527,528,531,532,535,536],"obsidian-callout",{"type":517},"warning","The widget extension ",[520,521,522],"strong",{},"must"," have ",[104,525,526],{},"com.apple.security.app-sandbox = true"," in its entitlements. Without it, ",[104,529,530],{},"pluginkit"," silently rejects the extension — no error is shown. Diagnosable via ",[104,533,534],{},"log show --last 30s --predicate 'eventMessage CONTAINS \"KytosWidget\"'",".",[537,538,539],"template",{"v-slot:title":178},"App Sandbox required",[109,541,543],{"id":542},"widget-registration","Widget Registration",[100,545,546,547,550],{},"The ",[104,548,549],{},"pixi run run"," task registers the widget automatically:",[170,552,556],{"className":553,"code":554,"language":555,"meta":178,"style":178},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","lsregister -f \"$BUILT/Kytos.app\"\npluginkit -r \"$BUILT/Kytos.app/Contents/PlugIns/KytosWidget.appex\" 2>/dev/null || true\npluginkit -a \"$BUILT/Kytos.app/Contents/PlugIns/KytosWidget.appex\"\n","bash",[104,557,558,579,609],{"__ignoreMap":178},[238,559,560,563,567,570,573,576],{"class":240,"line":12},[238,561,562],{"class":247},"lsregister",[238,564,566],{"class":565},"sfazB"," -f",[238,568,569],{"class":251}," \"",[238,571,572],{"class":267},"$BUILT",[238,574,575],{"class":565},"/Kytos.app",[238,577,578],{"class":251},"\"\n",[238,580,581,583,586,588,590,593,596,599,602,605],{"class":240,"line":37},[238,582,530],{"class":247},[238,584,585],{"class":565}," -r",[238,587,569],{"class":251},[238,589,572],{"class":267},[238,591,592],{"class":565},"/Kytos.app/Contents/PlugIns/KytosWidget.appex",[238,594,595],{"class":251},"\"",[238,597,598],{"class":251}," 2>",[238,600,601],{"class":565},"/dev/null",[238,603,604],{"class":251}," ||",[238,606,608],{"class":607},"s2Zo4"," true\n",[238,610,611,613,616,618,620,622],{"class":240,"line":69},[238,612,530],{"class":247},[238,614,615],{"class":565}," -a",[238,617,569],{"class":251},[238,619,572],{"class":267},[238,621,592],{"class":565},[238,623,578],{"class":251},[100,625,626],{},"Verify registration:",[170,628,630],{"className":553,"code":629,"language":555,"meta":178,"style":178},"pluginkit -m -p \"com.apple.widgetkit-extension\" 2>&1 | grep kytos\n",[104,631,632],{"__ignoreMap":178},[238,633,634,636,639,642,644,647,649,652,655,658],{"class":240,"line":12},[238,635,530],{"class":247},[238,637,638],{"class":565}," -m",[238,640,641],{"class":565}," -p",[238,643,569],{"class":251},[238,645,646],{"class":565},"com.apple.widgetkit-extension",[238,648,595],{"class":251},[238,650,651],{"class":251}," 2>&1",[238,653,654],{"class":251}," |",[238,656,657],{"class":247}," grep",[238,659,660],{"class":565}," kytos\n",[109,662,664],{"id":663},"timeline-provider","Timeline Provider",[100,666,667,670],{},[104,668,669],{},"KytosWidgetTimelineProvider"," reads the snapshot on each refresh:",[170,672,674],{"className":232,"code":673,"language":234,"meta":178,"style":178},"struct KytosWidgetTimelineProvider: TimelineProvider {\n    func getTimeline(in context: Context, completion: @escaping (Timeline\u003CKytosWidgetEntry>) -> Void) {\n        let snapshot = KytosWidgetSnapshot.load()\n        let entry = KytosWidgetEntry(date: .now, snapshot: snapshot)\n        let nextRefresh = Calendar.current.date(byAdding: .minute, value: 15, to: .now)!\n        let timeline = Timeline(entries: [entry], policy: .after(nextRefresh))\n        completion(timeline)\n    }\n}\n",[104,675,676,690,750,770,803,848,889,901,905],{"__ignoreMap":178},[238,677,678,680,683,685,688],{"class":240,"line":12},[238,679,244],{"class":243},[238,681,682],{"class":247}," KytosWidgetTimelineProvider",[238,684,252],{"class":251},[238,686,687],{"class":247}," TimelineProvider ",[238,689,258],{"class":251},[238,691,692,695,698,701,704,708,711,715,718,721,724,727,730,732,735,738,741,744,747],{"class":240,"line":37},[238,693,694],{"class":243},"    func",[238,696,697],{"class":607}," getTimeline",[238,699,700],{"class":251},"(",[238,702,703],{"class":607},"in",[238,705,707],{"class":706},"sHdIc"," context",[238,709,710],{"class":267},": Context, ",[238,712,714],{"class":713},"sjYur","completion",[238,716,717],{"class":267},": ",[238,719,720],{"class":251},"@",[238,722,723],{"class":243},"escaping",[238,725,726],{"class":251}," (",[238,728,729],{"class":267},"Timeline",[238,731,451],{"class":251},[238,733,734],{"class":267},"KytosWidgetEntry",[238,736,737],{"class":251},">)",[238,739,740],{"class":251}," ->",[238,742,743],{"class":247}," Void",[238,745,746],{"class":251},")",[238,748,749],{"class":251}," {\n",[238,751,752,755,758,761,764,767],{"class":240,"line":69},[238,753,754],{"class":263},"        let",[238,756,757],{"class":267}," snapshot ",[238,759,760],{"class":251},"=",[238,762,763],{"class":267}," KytosWidgetSnapshot.",[238,765,766],{"class":607},"load",[238,768,769],{"class":251},"()\n",[238,771,772,774,777,779,782,784,787,789,792,795,797,800],{"class":240,"line":287},[238,773,754],{"class":263},[238,775,776],{"class":267}," entry ",[238,778,760],{"class":251},[238,780,781],{"class":607}," KytosWidgetEntry",[238,783,700],{"class":251},[238,785,786],{"class":607},"date",[238,788,252],{"class":251},[238,790,791],{"class":267}," .now, ",[238,793,794],{"class":607},"snapshot",[238,796,252],{"class":251},[238,798,799],{"class":267}," snapshot",[238,801,802],{"class":251},")\n",[238,804,805,807,810,812,815,817,819,822,824,827,830,832,835,837,840,842,845],{"class":240,"line":294},[238,806,754],{"class":263},[238,808,809],{"class":267}," nextRefresh ",[238,811,760],{"class":251},[238,813,814],{"class":267}," Calendar.current.",[238,816,786],{"class":607},[238,818,700],{"class":251},[238,820,821],{"class":607},"byAdding",[238,823,252],{"class":251},[238,825,826],{"class":267}," .minute, ",[238,828,829],{"class":607},"value",[238,831,252],{"class":251},[238,833,834],{"class":263}," 15",[238,836,308],{"class":267},[238,838,839],{"class":607},"to",[238,841,252],{"class":251},[238,843,844],{"class":267}," .now",[238,846,847],{"class":251},")!\n",[238,849,850,852,855,857,860,862,865,867,870,873,875,878,881,883,886],{"class":240,"line":316},[238,851,754],{"class":263},[238,853,854],{"class":267}," timeline ",[238,856,760],{"class":251},[238,858,859],{"class":607}," Timeline",[238,861,700],{"class":251},[238,863,864],{"class":607},"entries",[238,866,252],{"class":251},[238,868,869],{"class":267}," [entry], ",[238,871,872],{"class":607},"policy",[238,874,252],{"class":251},[238,876,877],{"class":267}," .",[238,879,880],{"class":607},"after",[238,882,700],{"class":251},[238,884,885],{"class":267},"nextRefresh",[238,887,888],{"class":251},"))\n",[238,890,891,894,896,899],{"class":240,"line":325},[238,892,893],{"class":607},"        completion",[238,895,700],{"class":251},[238,897,898],{"class":267},"timeline",[238,900,802],{"class":251},[238,902,903],{"class":240,"line":336},[238,904,354],{"class":251},[238,906,907],{"class":240,"line":351},[238,908,428],{"class":251},[100,910,911,912,915],{},"WidgetKit's 15-minute background refresh budget is supplemented by the app calling ",[104,913,914],{},"reloadAllTimelines()"," after each state change — so the widget updates in real time while the app is running.",[109,917,919],{"id":918},"adding-the-widget-to-desktop","Adding the Widget to Desktop",[100,921,922,923,252],{},"After ",[104,924,549],{},[180,926,927,933,940],{},[183,928,929,930],{},"Right-click the macOS Desktop → ",[520,931,932],{},"Edit Widgets",[183,934,935,936,939],{},"Find ",[520,937,938],{},"Kytos"," in the widget gallery",[183,941,942],{},"Drag a size to the Desktop",[100,944,945,946,948],{},"If a pinned widget shows stale data after rebuilding, run ",[104,947,549],{}," to re-register the updated extension, then remove and re-add the widget.",[109,950,952],{"id":951},"build-requirements","Build Requirements",[100,954,955],{},"The widget target requires:",[957,958,959,968,977],"ul",{},[183,960,961,964,965],{},[104,962,963],{},"DEVELOPMENT_TEAM: H4T77W7K9A"," and ",[104,966,967],{},"CODE_SIGN_STYLE: Automatic",[183,969,970,973,974],{},[104,971,972],{},"-allowProvisioningUpdates"," during ",[104,975,976],{},"xcodebuild",[183,978,979,982,983,986,987,990,991,746],{},[104,980,981],{},"NSExtension.NSExtensionPointIdentifier: com.apple.widgetkit-extension"," declared in ",[104,984,985],{},"project.yml"," under ",[104,988,989],{},"info.properties"," (XcodeGen does not carry nested dicts from a source ",[104,992,993],{},"Info.plist",[109,995,997],{"id":996},"related","Related",[957,999,1000,1009,1016,1023],{},[183,1001,1002],{},[1003,1004,1008],"a",{"href":1005,"className":1006},"/kytos/home/runner/work/kytos/kytos/lithos/content/architecture/overview",[1007],"internal-link","Architecture Overview",[183,1010,1011],{},[1003,1012,1015],{"href":1013,"className":1014},"/kytos/home/runner/work/kytos/kytos/lithos/content/architecture/sessions",[1007],"Sessions & Workspaces",[183,1017,1018],{},[1003,1019,1022],{"href":1020,"className":1021},"/kytos/3development/1building",[1007],"Building from Source",[183,1024,1025],{},[1003,1026,1029],{"href":1027,"className":1028},"/kytos/3development/2distribution",[1007],"Distribution & Notarization",[1031,1032,1033],"style",{},"html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}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 .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sjYur, html code.shiki .sjYur{--shiki-light:#6182B8;--shiki-light-font-style:italic;--shiki-default:#82AAFF;--shiki-default-font-style:italic;--shiki-dark:#82AAFF;--shiki-dark-font-style:italic}",{"title":178,"searchDepth":69,"depth":69,"links":1035},[1036,1037,1038,1039,1040,1041,1042,1043,1044],{"id":111,"depth":37,"text":112},{"id":167,"depth":37,"text":168},{"id":219,"depth":37,"text":220},{"id":431,"depth":37,"text":432},{"id":542,"depth":37,"text":543},{"id":663,"depth":37,"text":664},{"id":918,"depth":37,"text":919},{"id":951,"depth":37,"text":952},{"id":996,"depth":37,"text":997},"The KytosWidget extension — workspace snapshots, WidgetKit timeline, and cross-process data sharing","md",{"icon":54},{"title":62,"icon":54,"order":65},{"title":94,"description":1045},[1051,1052,1053,794],"widget","widgetkit","app-group","eU_q4-Bv6VjjfYFoRomod6dbkbDBZt9CRTyjpd13k6o",[1056,1059],{"title":56,"description":1057,"path":57,"navigation":1058},"OSC escape sequences, resource detection, and live UI updates",{"title":56,"icon":59,"order":60},{"title":1022,"description":1060,"path":75,"navigation":1061},"Full build pipeline from GhosttyKit to Kytos.app",{"title":74,"icon":68,"order":21},1774809103766]