@automagik/genie 4.260509.9 → 4.260510.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/genie.js CHANGED
@@ -4015,7 +4015,7 @@ Bus `);for(let i2=1;i2<parts.length;i2++){let usb2=parseLinuxUsb(parts[i2]);resu
4015
4015
  `);if(util4.getValue(lines,"class",":",!0).toLowerCase().indexOf("audio")>=0){let audio2=parseLinuxAudioPciMM(lines,audioPCI);result2.push(audio2)}})}if(callback)callback(result2);resolve23(result2)});if(_darwin)exec3("system_profiler SPAudioDataType -json",(error2,stdout)=>{if(!error2)try{let outObj=JSON.parse(stdout.toString());if(outObj.SPAudioDataType&&outObj.SPAudioDataType.length&&outObj.SPAudioDataType[0]&&outObj.SPAudioDataType[0]._items&&outObj.SPAudioDataType[0]._items.length)for(let i2=0;i2<outObj.SPAudioDataType[0]._items.length;i2++){let audio2=parseDarwinAudio(outObj.SPAudioDataType[0]._items[i2],i2);result2.push(audio2)}}catch{util4.noop()}if(callback)callback(result2);resolve23(result2)});if(_windows)util4.powerShell("Get-CimInstance Win32_SoundDevice | select DeviceID,StatusInfo,Name,Manufacturer | fl").then((stdout,error2)=>{if(!error2)stdout.toString().split(/\n\s*\n/).forEach((element)=>{let lines=element.split(`
4016
4016
  `);if(util4.getValue(lines,"name",":"))result2.push(parseWindowsAudio(lines))});if(callback)callback(result2);resolve23(result2)});if(_sunos)resolve23(null)})})}exports.audio=audio});var require_bluetoothVendors=__commonJS((exports,module2)=>{module2.exports={0:"Ericsson Technology Licensing",1:"Nokia Mobile Phones",2:"Intel Corp.",3:"IBM Corp.",4:"Toshiba Corp.",5:"3Com",6:"Microsoft",7:"Lucent",8:"Motorola",9:"Infineon Technologies AG",10:"Cambridge Silicon Radio",11:"Silicon Wave",12:"Digianswer A/S",13:"Texas Instruments Inc.",14:"Ceva, Inc. (formerly Parthus Technologies, Inc.)",15:"Broadcom Corporation",16:"Mitel Semiconductor",17:"Widcomm, Inc",18:"Zeevo, Inc.",19:"Atmel Corporation",20:"Mitsubishi Electric Corporation",21:"RTX Telecom A/S",22:"KC Technology Inc.",23:"NewLogic",24:"Transilica, Inc.",25:"Rohde & Schwarz GmbH & Co. KG",26:"TTPCom Limited",27:"Signia Technologies, Inc.",28:"Conexant Systems Inc.",29:"Qualcomm",30:"Inventel",31:"AVM Berlin",32:"BandSpeed, Inc.",33:"Mansella Ltd",34:"NEC Corporation",35:"WavePlus Technology Co., Ltd.",36:"Alcatel",37:"NXP Semiconductors (formerly Philips Semiconductors)",38:"C Technologies",39:"Open Interface",40:"R F Micro Devices",41:"Hitachi Ltd",42:"Symbol Technologies, Inc.",43:"Tenovis",44:"Macronix International Co. Ltd.",45:"GCT Semiconductor",46:"Norwood Systems",47:"MewTel Technology Inc.",48:"ST Microelectronics",49:"Synopsis",50:"Red-M (Communications) Ltd",51:"Commil Ltd",52:"Computer Access Technology Corporation (CATC)",53:"Eclipse (HQ Espana) S.L.",54:"Renesas Electronics Corporation",55:"Mobilian Corporation",56:"Terax",57:"Integrated System Solution Corp.",58:"Matsushita Electric Industrial Co., Ltd.",59:"Gennum Corporation",60:"BlackBerry Limited (formerly Research In Motion)",61:"IPextreme, Inc.",62:"Systems and Chips, Inc.",63:"Bluetooth SIG, Inc.",64:"Seiko Epson Corporation",65:"Integrated Silicon Solution Taiwan, Inc.",66:"CONWISE Technology Corporation Ltd",67:"PARROT SA",68:"Socket Mobile",69:"Atheros Communications, Inc.",70:"MediaTek, Inc.",71:"Bluegiga",72:"Marvell Technology Group Ltd.",73:"3DSP Corporation",74:"Accel Semiconductor Ltd.",75:"Continental Automotive Systems",76:"Apple, Inc.",77:"Staccato Communications, Inc.",78:"Avago Technologies",79:"APT Licensing Ltd.",80:"SiRF Technology",81:"Tzero Technologies, Inc.",82:"J&M Corporation",83:"Free2move AB",84:"3DiJoy Corporation",85:"Plantronics, Inc.",86:"Sony Ericsson Mobile Communications",87:"Harman International Industries, Inc.",88:"Vizio, Inc.",89:"Nordic Semiconductor ASA",90:"EM Microelectronic-Marin SA",91:"Ralink Technology Corporation",92:"Belkin International, Inc.",93:"Realtek Semiconductor Corporation",94:"Stonestreet One, LLC",95:"Wicentric, Inc.",96:"RivieraWaves S.A.S",97:"RDA Microelectronics",98:"Gibson Guitars",99:"MiCommand Inc.",100:"Band XI International, LLC",101:"Hewlett-Packard Company",102:"9Solutions Oy",103:"GN Netcom A/S",104:"General Motors",105:"A&D Engineering, Inc.",106:"MindTree Ltd.",107:"Polar Electro OY",108:"Beautiful Enterprise Co., Ltd.",109:"BriarTek, Inc.",110:"Summit Data Communications, Inc.",111:"Sound ID",112:"Monster, LLC",113:"connectBlue AB",114:"ShangHai Super Smart Electronics Co. Ltd.",115:"Group Sense Ltd.",116:"Zomm, LLC",117:"Samsung Electronics Co. Ltd.",118:"Creative Technology Ltd.",119:"Laird Technologies",120:"Nike, Inc.",121:"lesswire AG",122:"MStar Semiconductor, Inc.",123:"Hanlynn Technologies",124:"A & R Cambridge",125:"Seers Technology Co. Ltd",126:"Sports Tracking Technologies Ltd.",127:"Autonet Mobile",128:"DeLorme Publishing Company, Inc.",129:"WuXi Vimicro",130:"Sennheiser Communications A/S",131:"TimeKeeping Systems, Inc.",132:"Ludus Helsinki Ltd.",133:"BlueRadios, Inc.",134:"equinox AG",135:"Garmin International, Inc.",136:"Ecotest",137:"GN ReSound A/S",138:"Jawbone",139:"Topcorn Positioning Systems, LLC",140:"Gimbal Inc. (formerly Qualcomm Labs, Inc. and Qualcomm Retail Solutions, Inc.)",141:"Zscan Software",142:"Quintic Corp.",143:"Stollman E+V GmbH",144:"Funai Electric Co., Ltd.",145:"Advanced PANMOBIL Systems GmbH & Co. KG",146:"ThinkOptics, Inc.",147:"Universal Electronics, Inc.",148:"Airoha Technology Corp.",149:"NEC Lighting, Ltd.",150:"ODM Technology, Inc.",151:"ConnecteDevice Ltd.",152:"zer01.tv GmbH",153:"i.Tech Dynamic Global Distribution Ltd.",154:"Alpwise",155:"Jiangsu Toppower Automotive Electronics Co., Ltd.",156:"Colorfy, Inc.",157:"Geoforce Inc.",158:"Bose Corporation",159:"Suunto Oy",160:"Kensington Computer Products Group",161:"SR-Medizinelektronik",162:"Vertu Corporation Limited",163:"Meta Watch Ltd.",164:"LINAK A/S",165:"OTL Dynamics LLC",166:"Panda Ocean Inc.",167:"Visteon Corporation",168:"ARP Devices Limited",169:"Magneti Marelli S.p.A",170:"CAEN RFID srl",171:"Ingenieur-Systemgruppe Zahn GmbH",172:"Green Throttle Games",173:"Peter Systemtechnik GmbH",174:"Omegawave Oy",175:"Cinetix",176:"Passif Semiconductor Corp",177:"Saris Cycling Group, Inc",178:"Bekey A/S",179:"Clarinox Technologies Pty. Ltd.",180:"BDE Technology Co., Ltd.",181:"Swirl Networks",182:"Meso international",183:"TreLab Ltd",184:"Qualcomm Innovation Center, Inc. (QuIC)",185:"Johnson Controls, Inc.",186:"Starkey Laboratories Inc.",187:"S-Power Electronics Limited",188:"Ace Sensor Inc",189:"Aplix Corporation",190:"AAMP of America",191:"Stalmart Technology Limited",192:"AMICCOM Electronics Corporation",193:"Shenzhen Excelsecu Data Technology Co.,Ltd",194:"Geneq Inc.",195:"adidas AG",196:"LG Electronics",197:"Onset Computer Corporation",198:"Selfly BV",199:"Quuppa Oy.",200:"GeLo Inc",201:"Evluma",202:"MC10",203:"Binauric SE",204:"Beats Electronics",205:"Microchip Technology Inc.",206:"Elgato Systems GmbH",207:"ARCHOS SA",208:"Dexcom, Inc.",209:"Polar Electro Europe B.V.",210:"Dialog Semiconductor B.V.",211:"Taixingbang\xA0Technology (HK) Co,. LTD.",212:"Kawantech",213:"Austco Communication Systems",214:"Timex Group USA, Inc.",215:"Qualcomm Technologies, Inc.",216:"Qualcomm Connected Experiences, Inc.",217:"Voyetra Turtle Beach",218:"txtr GmbH",219:"Biosentronics",220:"Procter & Gamble",221:"Hosiden Corporation",222:"Muzik LLC",223:"Misfit Wearables Corp",224:"Google",225:"Danlers Ltd",226:"Semilink Inc",227:"inMusic Brands, Inc",228:"L.S. Research Inc.",229:"Eden Software Consultants Ltd.",230:"Freshtemp",231:"KS Technologies",232:"ACTS Technologies",233:"Vtrack Systems",234:"Nielsen-Kellerman Company",235:"Server Technology, Inc.",236:"BioResearch Associates",237:"Jolly Logic, LLC",238:"Above Average Outcomes, Inc.",239:"Bitsplitters GmbH",240:"PayPal, Inc.",241:"Witron Technology Limited",242:"Aether Things\xA0Inc. (formerly Morse Project Inc.)",243:"Kent Displays Inc.",244:"Nautilus Inc.",245:"Smartifier Oy",246:"Elcometer Limited",247:"VSN Technologies Inc.",248:"AceUni Corp., Ltd.",249:"StickNFind",250:"Crystal Code AB",251:"KOUKAAM a.s.",252:"Delphi Corporation",253:"ValenceTech Limited",254:"Reserved",255:"Typo Products, LLC",256:"TomTom International BV",257:"Fugoo, Inc",258:"Keiser Corporation",259:"Bang & Olufsen A/S",260:"PLUS Locations Systems Pty Ltd",261:"Ubiquitous Computing Technology Corporation",262:"Innovative Yachtter Solutions",263:"William Demant Holding A/S",264:"Chicony Electronics Co., Ltd.",265:"Atus BV",266:"Codegate Ltd.",267:"ERi, Inc.",268:"Transducers Direct, LLC",269:"Fujitsu Ten Limited",270:"Audi AG",271:"HiSilicon Technologies Co., Ltd.",272:"Nippon Seiki Co., Ltd.",273:"Steelseries ApS",274:"vyzybl Inc.",275:"Openbrain Technologies, Co., Ltd.",276:"Xensr",277:"e.solutions",278:"1OAK Technologies",279:"Wimoto Technologies Inc",280:"Radius Networks, Inc.",281:"Wize Technology Co., Ltd.",282:"Qualcomm Labs, Inc.",283:"Aruba Networks",284:"Baidu",285:"Arendi AG",286:"Skoda Auto a.s.",287:"Volkswagon AG",288:"Porsche AG",289:"Sino Wealth Electronic Ltd.",290:"AirTurn, Inc.",291:"Kinsa, Inc.",292:"HID Global",293:"SEAT es",294:"Promethean Ltd.",295:"Salutica Allied Solutions",296:"GPSI Group Pty Ltd",297:"Nimble Devices Oy",298:"Changzhou Yongse Infotech Co., Ltd",299:"SportIQ",300:"TEMEC Instruments B.V.",301:"Sony Corporation",302:"ASSA ABLOY",303:"Clarion Co., Ltd.",304:"Warehouse Innovations",305:"Cypress Semiconductor Corporation",306:"MADS Inc",307:"Blue Maestro Limited",308:"Resolution Products, Inc.",309:"Airewear LLC",310:"Seed Labs, Inc. (formerly ETC sp. z.o.o.)",311:"Prestigio Plaza Ltd.",312:"NTEO Inc.",313:"Focus Systems Corporation",314:"Tencent Holdings Limited",315:"Allegion",316:"Murata Manufacuring Co., Ltd.",318:"Nod, Inc.",319:"B&B Manufacturing Company",320:"Alpine\xA0Electronics\xA0(China)\xA0Co.,\xA0Ltd",321:"FedEx Services",322:"Grape Systems Inc.",323:"Bkon Connect",324:"Lintech GmbH",325:"Novatel Wireless",326:"Ciright",327:"Mighty Cast, Inc.",328:"Ambimat Electronics",329:"Perytons Ltd.",330:"Tivoli Audio, LLC",331:"Master Lock",332:"Mesh-Net Ltd",333:"Huizhou Desay SV Automotive CO., LTD.",334:"Tangerine, Inc.",335:"B&W Group Ltd.",336:"Pioneer Corporation",337:"OnBeep",338:"Vernier Software & Technology",339:"ROL Ergo",340:"Pebble Technology",341:"NETATMO",342:"Accumulate AB",343:"Anhui Huami Information Technology Co., Ltd.",344:"Inmite s.r.o.",345:"ChefSteps, Inc.",346:"micas AG",347:"Biomedical Research Ltd.",348:"Pitius Tec S.L.",349:"Estimote, Inc.",350:"Unikey Technologies, Inc.",351:"Timer Cap Co.",352:"AwoX",353:"yikes",354:"MADSGlobal NZ Ltd.",355:"PCH International",356:"Qingdao Yeelink Information Technology Co., Ltd.",357:"Milwaukee Tool (formerly Milwaukee Electric Tools)",358:"MISHIK Pte Ltd",359:"Bayer HealthCare",360:"Spicebox LLC",361:"emberlight",362:"Cooper-Atkins Corporation",363:"Qblinks",364:"MYSPHERA",365:"LifeScan Inc",366:"Volantic AB",367:"Podo Labs, Inc",368:"Roche Diabetes Care AG",369:"Amazon Fulfillment Service",370:"Connovate Technology Private Limited",371:"Kocomojo, LLC",372:"Everykey LLC",373:"Dynamic Controls",374:"SentriLock",375:"I-SYST inc.",376:"CASIO COMPUTER CO., LTD.",377:"LAPIS Semiconductor Co., Ltd.",378:"Telemonitor, Inc.",379:"taskit GmbH",380:"Daimler AG",381:"BatAndCat",382:"BluDotz Ltd",383:"XTel ApS",384:"Gigaset Communications GmbH",385:"Gecko Health Innovations, Inc.",386:"HOP Ubiquitous",387:"To Be Assigned",388:"Nectar",389:"bel\u2019apps LLC",390:"CORE Lighting Ltd",391:"Seraphim Sense Ltd",392:"Unico RBC",393:"Physical Enterprises Inc.",394:"Able Trend Technology Limited",395:"Konica Minolta, Inc.",396:"Wilo SE",397:"Extron Design Services",398:"Fitbit, Inc.",399:"Fireflies Systems",400:"Intelletto Technologies Inc.",401:"FDK CORPORATION",402:"Cloudleaf, Inc",403:"Maveric Automation LLC",404:"Acoustic Stream Corporation",405:"Zuli",406:"Paxton Access Ltd",407:"WiSilica Inc",408:"Vengit Limited",409:"SALTO SYSTEMS S.L.",410:"TRON Forum (formerly T-Engine Forum)",411:"CUBETECH s.r.o.",412:"Cokiya Incorporated",413:"CVS Health",414:"Ceruus",415:"Strainstall Ltd",416:"Channel Enterprises (HK) Ltd.",417:"FIAMM",418:"GIGALANE.CO.,LTD",419:"EROAD",420:"Mine Safety Appliances",421:"Icon Health and Fitness",422:"Asandoo GmbH",423:"ENERGOUS CORPORATION",424:"Taobao",425:"Canon Inc.",426:"Geophysical Technology Inc.",427:"Facebook, Inc.",428:"Nipro Diagnostics, Inc.",429:"FlightSafety International",430:"Earlens Corporation",431:"Sunrise Micro Devices, Inc.",432:"Star Micronics Co., Ltd.",433:"Netizens Sp. z o.o.",434:"Nymi Inc.",435:"Nytec, Inc.",436:"Trineo Sp. z o.o.",437:"Nest Labs Inc.",438:"LM Technologies Ltd",439:"General Electric Company",440:"i+D3 S.L.",441:"HANA Micron",442:"Stages Cycling LLC",443:"Cochlear Bone Anchored Solutions AB",444:"SenionLab AB",445:"Syszone Co., Ltd",446:"Pulsate Mobile Ltd.",447:"Hong Kong HunterSun Electronic Limited",448:"pironex GmbH",449:"BRADATECH Corp.",450:"Transenergooil AG",451:"Bunch",452:"DME Microelectronics",453:"Bitcraze AB",454:"HASWARE Inc.",455:"Abiogenix Inc.",456:"Poly-Control ApS",457:"Avi-on",458:"Laerdal Medical AS",459:"Fetch My Pet",460:"Sam Labs Ltd.",461:"Chengdu Synwing Technology Ltd",462:"HOUWA SYSTEM DESIGN, k.k.",463:"BSH",464:"Primus Inter Pares Ltd",465:"August",466:"Gill Electronics",467:"Sky Wave Design",468:"Newlab S.r.l.",469:"ELAD srl",470:"G-wearables inc.",471:"Squadrone Systems Inc.",472:"Code Corporation",473:"Savant Systems LLC",474:"Logitech International SA",475:"Innblue Consulting",476:"iParking Ltd.",477:"Koninklijke Philips Electronics N.V.",478:"Minelab Electronics Pty Limited",479:"Bison Group Ltd.",480:"Widex A/S",481:"Jolla Ltd",482:"Lectronix, Inc.",483:"Caterpillar Inc",484:"Freedom Innovations",485:"Dynamic Devices Ltd",486:"Technology Solutions (UK) Ltd",487:"IPS Group Inc.",488:"STIR",489:"Sano, Inc",490:"Advanced Application Design, Inc.",491:"AutoMap LLC",492:"Spreadtrum Communications Shanghai Ltd",493:"CuteCircuit LTD",494:"Valeo Service",495:"Fullpower Technologies, Inc.",496:"KloudNation",497:"Zebra Technologies Corporation",498:"Itron, Inc.",499:"The University of Tokyo",500:"UTC Fire and Security",501:"Cool Webthings Limited",502:"DJO Global",503:"Gelliner Limited",504:"Anyka (Guangzhou) Microelectronics Technology Co, LTD",505:"Medtronic, Inc.",506:"Gozio, Inc.",507:"Form Lifting, LLC",508:"Wahoo Fitness, LLC",509:"Kontakt Micro-Location Sp. z o.o.",510:"Radio System Corporation",511:"Freescale Semiconductor, Inc.",512:"Verifone Systems PTe Ltd. Taiwan Branch",513:"AR Timing",514:"Rigado LLC",515:"Kemppi Oy",516:"Tapcentive Inc.",517:"Smartbotics Inc.",518:"Otter Products, LLC",519:"STEMP Inc.",520:"LumiGeek LLC",521:"InvisionHeart Inc.",522:"Macnica Inc. ",523:"Jaguar Land Rover Limited",524:"CoroWare Technologies, Inc",525:"Simplo Technology Co., LTD",526:"Omron Healthcare Co., LTD",527:"Comodule GMBH",528:"ikeGPS",529:"Telink Semiconductor Co. Ltd",530:"Interplan Co., Ltd",531:"Wyler AG",532:"IK Multimedia Production srl",533:"Lukoton Experience Oy",534:"MTI Ltd",535:"Tech4home, Lda",536:"Hiotech AB",537:"DOTT Limited",538:"Blue Speck Labs, LLC",539:"Cisco Systems, Inc",540:"Mobicomm Inc",541:"Edamic",542:"Goodnet, Ltd",543:"Luster Leaf Products Inc",544:"Manus Machina BV",545:"Mobiquity Networks Inc",546:"Praxis Dynamics",547:"Philip Morris Products S.A.",548:"Comarch SA",549:"Nestl Nespresso S.A.",550:"Merlinia A/S",551:"LifeBEAM Technologies",552:"Twocanoes Labs, LLC",553:"Muoverti Limited",554:"Stamer Musikanlagen GMBH",555:"Tesla Motors",556:"Pharynks Corporation",557:"Lupine",558:"Siemens AG",559:"Huami (Shanghai) Culture Communication CO., LTD",560:"Foster Electric Company, Ltd",561:"ETA SA",562:"x-Senso Solutions Kft",563:"Shenzhen SuLong Communication Ltd",564:"FengFan (BeiJing) Technology Co, Ltd",565:"Qrio Inc",566:"Pitpatpet Ltd",567:"MSHeli s.r.l.",568:"Trakm8 Ltd",569:"JIN CO, Ltd",570:"Alatech Tehnology",571:"Beijing CarePulse Electronic Technology Co, Ltd",572:"Awarepoint",573:"ViCentra B.V.",574:"Raven Industries",575:"WaveWare Technologies Inc.",576:"Argenox Technologies",577:"Bragi GmbH",578:"16Lab Inc",579:"Masimo Corp",580:"Iotera Inc",581:"Endress+Hauser",582:"ACKme Networks, Inc.",583:"FiftyThree Inc.",584:"Parker Hannifin Corp",585:"Transcranial Ltd",586:"Uwatec AG",587:"Orlan LLC",588:"Blue Clover Devices",589:"M-Way Solutions GmbH",590:"Microtronics Engineering GmbH",591:"Schneider Schreibgerte GmbH",592:"Sapphire Circuits LLC",593:"Lumo Bodytech Inc.",594:"UKC Technosolution",595:"Xicato Inc.",596:"Playbrush",597:"Dai Nippon Printing Co., Ltd.",598:"G24 Power Limited",599:"AdBabble Local Commerce Inc.",600:"Devialet SA",601:"ALTYOR",602:"University of Applied Sciences Valais/Haute Ecole Valaisanne",603:"Five Interactive, LLC dba Zendo",604:"NetEaseHangzhouNetwork co.Ltd.",605:"Lexmark International Inc.",606:"Fluke Corporation",607:"Yardarm Technologies",608:"SensaRx",609:"SECVRE GmbH",610:"Glacial Ridge Technologies",611:"Identiv, Inc.",612:"DDS, Inc.",613:"SMK Corporation",614:"Schawbel Technologies LLC",615:"XMI Systems SA",616:"Cerevo",617:"Torrox GmbH & Co KG",618:"Gemalto",619:"DEKA Research & Development Corp.",620:"Domster Tadeusz Szydlowski",621:"Technogym SPA",622:"FLEURBAEY BVBA",623:"Aptcode Solutions",624:"LSI ADL Technology",625:"Animas Corp",626:"Alps Electric Co., Ltd.",627:"OCEASOFT",628:"Motsai Research",629:"Geotab",630:"E.G.O. Elektro-Gertebau GmbH",631:"bewhere inc",632:"Johnson Outdoors Inc",633:"steute Schaltgerate GmbH & Co. KG",634:"Ekomini inc.",635:"DEFA AS",636:"Aseptika Ltd",637:"HUAWEI Technologies Co., Ltd. ( )",638:"HabitAware, LLC",639:"ruwido austria gmbh",640:"ITEC corporation",641:"StoneL",642:"Sonova AG",643:"Maven Machines, Inc.",644:"Synapse Electronics",645:"Standard Innovation Inc.",646:"RF Code, Inc.",647:"Wally Ventures S.L.",648:"Willowbank Electronics Ltd",649:"SK Telecom",650:"Jetro AS",651:"Code Gears LTD",652:"NANOLINK APS",653:"IF, LLC",654:"RF Digital Corp",655:"Church & Dwight Co., Inc",656:"Multibit Oy",657:"CliniCloud Inc",658:"SwiftSensors",659:"Blue Bite",660:"ELIAS GmbH",661:"Sivantos GmbH",662:"Petzl",663:"storm power ltd",664:"EISST Ltd",665:"Inexess Technology Simma KG",666:"Currant, Inc.",667:"C2 Development, Inc.",668:"Blue Sky Scientific, LLC",669:"ALOTTAZS LABS, LLC",670:"Kupson spol. s r.o.",671:"Areus Engineering GmbH",672:"Impossible Camera GmbH",673:"InventureTrack Systems",674:"LockedUp",675:"Itude",676:"Pacific Lock Company",677:"Tendyron Corporation ( )",678:"Robert Bosch GmbH",679:"Illuxtron international B.V.",680:"miSport Ltd.",681:"Chargelib",682:"Doppler Lab",683:"BBPOS Limited",684:"RTB Elektronik GmbH & Co. KG",685:"Rx Networks, Inc.",686:"WeatherFlow, Inc.",687:"Technicolor USA Inc.",688:"Bestechnic(Shanghai),Ltd",689:"Raden Inc",690:"JouZen Oy",691:"CLABER S.P.A.",692:"Hyginex, Inc.",693:"HANSHIN ELECTRIC RAILWAY CO.,LTD.",694:"Schneider Electric",695:"Oort Technologies LLC",696:"Chrono Therapeutics",697:"Rinnai Corporation",698:"Swissprime Technologies AG",699:"Koha.,Co.Ltd",700:"Genevac Ltd",701:"Chemtronics",702:"Seguro Technology Sp. z o.o.",703:"Redbird Flight Simulations",704:"Dash Robotics",705:"LINE Corporation",706:"Guillemot Corporation",707:"Techtronic Power Tools Technology Limited",708:"Wilson Sporting Goods",709:"Lenovo (Singapore) Pte Ltd. ( )",710:"Ayatan Sensors",711:"Electronics Tomorrow Limited",712:"VASCO Data Security International, Inc.",713:"PayRange Inc.",714:"ABOV Semiconductor",715:"AINA-Wireless Inc.",716:"Eijkelkamp Soil & Water",717:"BMA ergonomics b.v.",718:"Teva Branded Pharmaceutical Products R&D, Inc.",719:"Anima",720:"3M",721:"Empatica Srl",722:"Afero, Inc.",723:"Powercast Corporation",724:"Secuyou ApS",725:"OMRON Corporation",726:"Send Solutions",727:"NIPPON SYSTEMWARE CO.,LTD.",728:"Neosfar",729:"Fliegl Agrartechnik GmbH",730:"Gilvader",731:"Digi International Inc (R)",732:"DeWalch Technologies, Inc.",733:"Flint Rehabilitation Devices, LLC",734:"Samsung SDS Co., Ltd.",735:"Blur Product Development",736:"University of Michigan",737:"Victron Energy BV",738:"NTT docomo",739:"Carmanah Technologies Corp.",740:"Bytestorm Ltd.",741:"Espressif Incorporated ( () )",742:"Unwire",743:"Connected Yard, Inc.",744:"American Music Environments",745:"Sensogram Technologies, Inc.",746:"Fujitsu Limited",747:"Ardic Technology",748:"Delta Systems, Inc",749:"HTC Corporation",750:"Citizen Holdings Co., Ltd.",751:"SMART-INNOVATION.inc",752:"Blackrat Software",753:"The Idea Cave, LLC",754:"GoPro, Inc.",755:"AuthAir, Inc",756:"Vensi, Inc.",757:"Indagem Tech LLC",758:"Intemo Technologies",759:"DreamVisions co., Ltd.",760:"Runteq Oy Ltd",761:"IMAGINATION TECHNOLOGIES LTD",762:"CoSTAR TEchnologies",763:"Clarius Mobile Health Corp.",764:"Shanghai Frequen Microelectronics Co., Ltd.",765:"Uwanna, Inc.",766:"Lierda Science & Technology Group Co., Ltd.",767:"Silicon Laboratories",768:"World Moto Inc.",769:"Giatec Scientific Inc.",770:"Loop Devices, Inc",771:"IACA electronique",772:"Martians Inc",773:"Swipp ApS",774:"Life Laboratory Inc.",775:"FUJI INDUSTRIAL CO.,LTD.",776:"Surefire, LLC",777:"Dolby Labs",778:"Ellisys",779:"Magnitude Lighting Converters",780:"Hilti AG",781:"Devdata S.r.l.",782:"Deviceworx",783:"Shortcut Labs",784:"SGL Italia S.r.l.",785:"PEEQ DATA",786:"Ducere Technologies Pvt Ltd",787:"DiveNav, Inc.",788:"RIIG AI Sp. z o.o.",789:"Thermo Fisher Scientific",790:"AG Measurematics Pvt. Ltd.",791:"CHUO Electronics CO., LTD.",792:"Aspenta International",793:"Eugster Frismag AG",794:"Amber wireless GmbH",795:"HQ Inc",796:"Lab Sensor Solutions",797:"Enterlab ApS",798:"Eyefi, Inc.",799:"MetaSystem S.p.A.",800:"SONO ELECTRONICS. CO., LTD",801:"Jewelbots",802:"Compumedics Limited",803:"Rotor Bike Components",804:"Astro, Inc.",805:"Amotus Solutions",806:"Healthwear Technologies (Changzhou)Ltd",807:"Essex Electronics",808:"Grundfos A/S",809:"Eargo, Inc.",810:"Electronic Design Lab",811:"ESYLUX",812:"NIPPON SMT.CO.,Ltd",813:"BM innovations GmbH",814:"indoormap",815:"OttoQ Inc",816:"North Pole Engineering",817:"3flares Technologies Inc.",818:"Electrocompaniet A.S.",819:"Mul-T-Lock",820:"Corentium AS",821:"Enlighted Inc",822:"GISTIC",823:"AJP2 Holdings, LLC",824:"COBI GmbH",825:"Blue Sky Scientific, LLC",826:"Appception, Inc.",827:"Courtney Thorne Limited",828:"Virtuosys",829:"TPV Technology Limited",830:"Monitra SA",831:"Automation Components, Inc.",832:"Letsense s.r.l.",833:"Etesian Technologies LLC",834:"GERTEC BRASIL LTDA.",835:"Drekker Development Pty. Ltd.",836:"Whirl Inc",837:"Locus Positioning",838:"Acuity Brands Lighting, Inc",839:"Prevent Biometrics",840:"Arioneo",841:"VersaMe",842:"Vaddio",843:"Libratone A/S",844:"HM Electronics, Inc.",845:"TASER International, Inc.",846:"SafeTrust Inc.",847:"Heartland Payment Systems",848:"Bitstrata Systems Inc.",849:"Pieps GmbH",850:"iRiding(Xiamen)Technology Co.,Ltd.",851:"Alpha Audiotronics, Inc.",852:"TOPPAN FORMS CO.,LTD.",853:"Sigma Designs, Inc.",854:"Spectrum Brands, Inc.",855:"Polymap Wireless",856:"MagniWare Ltd.",857:"Novotec Medical GmbH",858:"Medicom Innovation Partner a/s",859:"Matrix Inc.",860:"Eaton Corporation",861:"KYS",862:"Naya Health, Inc.",863:"Acromag",864:"Insulet Corporation",865:"Wellinks Inc.",866:"ON Semiconductor",867:"FREELAP SA",868:"Favero Electronics Srl",869:"BioMech Sensor LLC",870:"BOLTT Sports technologies Private limited",871:"Saphe International",872:"Metormote AB",873:"littleBits",874:"SetPoint Medical",875:"BRControls Products BV",876:"Zipcar",877:"AirBolt Pty Ltd",878:"KeepTruckin Inc",879:"Motiv, Inc.",880:"Wazombi Labs O",881:"ORBCOMM",882:"Nixie Labs, Inc.",883:"AppNearMe Ltd",884:"Holman Industries",885:"Expain AS",886:"Electronic Temperature Instruments Ltd",887:"Plejd AB",888:"Propeller Health",889:"Shenzhen iMCO Electronic Technology Co.,Ltd",890:"Algoria",891:"Apption Labs Inc.",892:"Cronologics Corporation",893:"MICRODIA Ltd.",894:"lulabytes S.L.",895:"Nestec S.A.",896:"LLC MEGA - F service",897:"Sharp Corporation",898:"Precision Outcomes Ltd",899:"Kronos Incorporated",900:"OCOSMOS Co., Ltd.",901:"Embedded Electronic Solutions Ltd. dba e2Solutions",902:"Aterica Inc.",903:"BluStor PMC, Inc.",904:"Kapsch TrafficCom AB",905:"ActiveBlu Corporation",906:"Kohler Mira Limited",907:"Noke",908:"Appion Inc.",909:"Resmed Ltd",910:"Crownstone B.V.",911:"Xiaomi Inc.",912:"INFOTECH s.r.o.",913:"Thingsquare AB",914:"T&D",915:"LAVAZZA S.p.A.",916:"Netclearance Systems, Inc.",917:"SDATAWAY",918:"BLOKS GmbH",919:"LEGO System A/S",920:"Thetatronics Ltd",921:"Nikon Corporation",922:"NeST",923:"South Silicon Valley Microelectronics",924:"ALE International",925:"CareView Communications, Inc.",926:"SchoolBoard Limited",927:"Molex Corporation",928:"IVT Wireless Limited",929:"Alpine Labs LLC",930:"Candura Instruments",931:"SmartMovt Technology Co., Ltd",932:"Token Zero Ltd",933:"ACE CAD Enterprise Co., Ltd. (ACECAD)",934:"Medela, Inc",935:"AeroScout",936:"Esrille Inc.",937:"THINKERLY SRL",938:"Exon Sp. z o.o.",939:"Meizu Technology Co., Ltd.",940:"Smablo LTD",941:"XiQ",942:"Allswell Inc.",943:"Comm-N-Sense Corp DBA Verigo",944:"VIBRADORM GmbH",945:"Otodata Wireless Network Inc.",946:"Propagation Systems Limited",947:"Midwest Instruments & Controls",948:"Alpha Nodus, inc.",949:"petPOMM, Inc",950:"Mattel",951:"Airbly Inc.",952:"A-Safe Limited",953:"FREDERIQUE CONSTANT SA",954:"Maxscend Microelectronics Company Limited",955:"Abbott Diabetes Care",956:"ASB Bank Ltd",957:"amadas",958:"Applied Science, Inc.",959:"iLumi Solutions Inc.",960:"Arch Systems Inc.",961:"Ember Technologies, Inc.",962:"Snapchat Inc",963:"Casambi Technologies Oy",964:"Pico Technology Inc.",965:"St. Jude Medical, Inc.",966:"Intricon",967:"Structural Health Systems, Inc.",968:"Avvel International",969:"Gallagher Group",970:"In2things Automation Pvt. Ltd.",971:"SYSDEV Srl",972:"Vonkil Technologies Ltd",973:"Wynd Technologies, Inc.",974:"CONTRINEX S.A.",975:"MIRA, Inc.",976:"Watteam Ltd",977:"Density Inc.",978:"IOT Pot India Private Limited",979:"Sigma Connectivity AB",980:"PEG PEREGO SPA",981:"Wyzelink Systems Inc.",982:"Yota Devices LTD",983:"FINSECUR",984:"Zen-Me Labs Ltd",985:"3IWare Co., Ltd.",986:"EnOcean GmbH",987:"Instabeat, Inc",988:"Nima Labs",989:"Andreas Stihl AG & Co. KG",990:"Nathan Rhoades LLC",991:"Grob Technologies, LLC",992:"Actions (Zhuhai) Technology Co., Limited",993:"SPD Development Company Ltd",994:"Sensoan Oy",995:"Qualcomm Life Inc",996:"Chip-ing AG",997:"ffly4u",998:"IoT Instruments Oy",999:"TRUE Fitness Technology",1000:"Reiner Kartengeraete GmbH & Co. KG.",1001:"SHENZHEN LEMONJOY TECHNOLOGY CO., LTD.",1002:"Hello Inc.",1003:"Evollve Inc.",1004:"Jigowatts Inc.",1005:"BASIC MICRO.COM,INC.",1006:"CUBE TECHNOLOGIES",1007:"foolography GmbH",1008:"CLINK",1009:"Hestan Smart Cooking Inc.",1010:"WindowMaster A/S",1011:"Flowscape AB",1012:"PAL Technologies Ltd",1013:"WHERE, Inc.",1014:"Iton Technology Corp.",1015:"Owl Labs Inc.",1016:"Rockford Corp.",1017:"Becon Technologies Co.,Ltd.",1018:"Vyassoft Technologies Inc",1019:"Nox Medical",1020:"Kimberly-Clark",1021:"Trimble Navigation Ltd.",1022:"Littelfuse",1023:"Withings",1024:"i-developer IT Beratung UG",1026:"Sears Holdings Corporation",1027:"Gantner Electronic GmbH",1028:"Authomate Inc",1029:"Vertex International, Inc.",1030:"Airtago",1031:"Swiss Audio SA",1032:"ToGetHome Inc.",1033:"AXIS",1034:"Openmatics",1035:"Jana Care Inc.",1036:"Senix Corporation",1037:"NorthStar Battery Company, LLC",1038:"SKF (U.K.) Limited",1039:"CO-AX Technology, Inc.",1040:"Fender Musical Instruments",1041:"Luidia Inc",1042:"SEFAM",1043:"Wireless Cables Inc",1044:"Lightning Protection International Pty Ltd",1045:"Uber Technologies Inc",1046:"SODA GmbH",1047:"Fatigue Science",1048:"Alpine Electronics Inc.",1049:"Novalogy LTD",1050:"Friday Labs Limited",1051:"OrthoAccel Technologies",1052:"WaterGuru, Inc.",1053:"Benning Elektrotechnik und Elektronik GmbH & Co. KG",1054:"Dell Computer Corporation",1055:"Kopin Corporation",1056:"TecBakery GmbH",1057:"Backbone Labs, Inc.",1058:"DELSEY SA",1059:"Chargifi Limited",1060:"Trainesense Ltd.",1061:"Unify Software and Solutions GmbH & Co. KG",1062:"Husqvarna AB",1063:"Focus fleet and fuel management inc",1064:"SmallLoop, LLC",1065:"Prolon Inc.",1066:"BD Medical",1067:"iMicroMed Incorporated",1068:"Ticto N.V.",1069:"Meshtech AS",1070:"MemCachier Inc.",1071:"Danfoss A/S",1072:"SnapStyk Inc.",1073:"Amyway Corporation",1074:"Silk Labs, Inc.",1075:"Pillsy Inc.",1076:"Hatch Baby, Inc.",1077:"Blocks Wearables Ltd.",1078:"Drayson Technologies (Europe) Limited",1079:"eBest IOT Inc.",1080:"Helvar Ltd",1081:"Radiance Technologies",1082:"Nuheara Limited",1083:"Appside co., ltd.",1084:"DeLaval",1085:"Coiler Corporation",1086:"Thermomedics, Inc.",1087:"Tentacle Sync GmbH",1088:"Valencell, Inc.",1089:"iProtoXi Oy",1090:"SECOM CO., LTD.",1091:"Tucker International LLC",1092:"Metanate Limited",1093:"Kobian Canada Inc.",1094:"NETGEAR, Inc.",1095:"Fabtronics Australia Pty Ltd",1096:"Grand Centrix GmbH",1097:"1UP USA.com llc",1098:"SHIMANO INC.",1099:"Nain Inc.",1100:"LifeStyle Lock, LLC",1101:"VEGA Grieshaber KG",1102:"Xtrava Inc.",1103:"TTS Tooltechnic Systems AG & Co. KG",1104:"Teenage Engineering AB",1105:"Tunstall Nordic AB",1106:"Svep Design Center AB",1107:"GreenPeak Technologies BV",1108:"Sphinx Electronics GmbH & Co KG",1109:"Atomation",1110:"Nemik Consulting Inc",1111:"RF INNOVATION",1112:"Mini Solution Co., Ltd.",1113:"Lumenetix, Inc",1114:"2048450 Ontario Inc",1115:"SPACEEK LTD",1116:"Delta T Corporation",1117:"Boston Scientific Corporation",1118:"Nuviz, Inc.",1119:"Real Time Automation, Inc.",1120:"Kolibree",1121:"vhf elektronik GmbH",1122:"Bonsai Systems GmbH",1123:"Fathom Systems Inc.",1124:"Bellman & Symfon",1125:"International Forte Group LLC",1126:"CycleLabs Solutions inc.",1127:"Codenex Oy",1128:"Kynesim Ltd",1129:"Palago AB",1130:"INSIGMA INC.",1131:"PMD Solutions",1132:"Qingdao Realtime Technology Co., Ltd.",1133:"BEGA Gantenbrink-Leuchten KG",1134:"Pambor Ltd.",65535:"SPECIAL USE/DEFAULT"}});var require_bluetooth=__commonJS((exports)=>{var exec3=__require("child_process").exec,execSync18=__require("child_process").execSync,path6=__require("path"),util4=require_util3(),bluetoothVendors=require_bluetoothVendors(),fs3=__require("fs"),_platform=process.platform,_linux=_platform==="linux"||_platform==="android",_darwin=_platform==="darwin",_windows=_platform==="win32",_freebsd=_platform==="freebsd",_openbsd=_platform==="openbsd",_netbsd=_platform==="netbsd",_sunos=_platform==="sunos";function parseBluetoothType(str5){let result2="";if(str5.indexOf("keyboard")>=0)result2="Keyboard";if(str5.indexOf("mouse")>=0)result2="Mouse";if(str5.indexOf("trackpad")>=0)result2="Trackpad";if(str5.indexOf("audio")>=0)result2="Audio";if(str5.indexOf("sound")>=0)result2="Audio";if(str5.indexOf("microph")>=0)result2="Microphone";if(str5.indexOf("speaker")>=0)result2="Speaker";if(str5.indexOf("headset")>=0)result2="Headset";if(str5.indexOf("phone")>=0)result2="Phone";if(str5.indexOf("macbook")>=0)result2="Computer";if(str5.indexOf("imac")>=0)result2="Computer";if(str5.indexOf("ipad")>=0)result2="Tablet";if(str5.indexOf("watch")>=0)result2="Watch";if(str5.indexOf("headphone")>=0)result2="Headset";return result2}function parseBluetoothManufacturer(str5){let result2=str5.split(" ")[0];if(str5=str5.toLowerCase(),str5.indexOf("apple")>=0)result2="Apple";if(str5.indexOf("ipad")>=0)result2="Apple";if(str5.indexOf("imac")>=0)result2="Apple";if(str5.indexOf("iphone")>=0)result2="Apple";if(str5.indexOf("magic mouse")>=0)result2="Apple";if(str5.indexOf("magic track")>=0)result2="Apple";if(str5.indexOf("macbook")>=0)result2="Apple";return result2}function parseBluetoothVendor(str5){let id=parseInt(str5);if(!isNaN(id))return bluetoothVendors[id]}function parseLinuxBluetoothInfo(lines,macAddr1,macAddr2){let result2={};return result2.device=null,result2.name=util4.getValue(lines,"name","="),result2.manufacturer=null,result2.macDevice=macAddr1,result2.macHost=macAddr2,result2.batteryPercent=null,result2.type=parseBluetoothType(result2.name.toLowerCase()),result2.connected=!1,result2}function parseDarwinBluetoothDevices(bluetoothObject,macAddr2){let result2={},typeStr=((bluetoothObject.device_minorClassOfDevice_string||bluetoothObject.device_majorClassOfDevice_string||bluetoothObject.device_minorType||"")+(bluetoothObject.device_name||"")).toLowerCase();return result2.device=bluetoothObject.device_services||"",result2.name=bluetoothObject.device_name||"",result2.manufacturer=bluetoothObject.device_manufacturer||parseBluetoothVendor(bluetoothObject.device_vendorID)||parseBluetoothManufacturer(bluetoothObject.device_name||"")||"",result2.macDevice=(bluetoothObject.device_addr||bluetoothObject.device_address||"").toLowerCase().replace(/-/g,":"),result2.macHost=macAddr2,result2.batteryPercent=bluetoothObject.device_batteryPercent||null,result2.type=parseBluetoothType(typeStr),result2.connected=bluetoothObject.device_isconnected==="attrib_Yes"||!1,result2}function parseWindowsBluetooth(lines){let result2={};return result2.device=null,result2.name=util4.getValue(lines,"name",":"),result2.manufacturer=util4.getValue(lines,"manufacturer",":"),result2.macDevice=null,result2.macHost=null,result2.batteryPercent=null,result2.type=parseBluetoothType(result2.name.toLowerCase()),result2.connected=null,result2}function bluetoothDevices(callback){return new Promise((resolve23)=>{process.nextTick(()=>{let result2=[];if(_linux){util4.getFilesInPath("/var/lib/bluetooth/").forEach((element)=>{let filename=path6.basename(element),pathParts=element.split("/"),macAddr1=pathParts.length>=6?pathParts[pathParts.length-2]:null,macAddr2=pathParts.length>=7?pathParts[pathParts.length-3]:null;if(filename==="info"){let infoFile=fs3.readFileSync(element,{encoding:"utf8"}).split(`
4017
4017
  `);result2.push(parseLinuxBluetoothInfo(infoFile,macAddr1,macAddr2))}});try{let hdicon=execSync18("hcitool con",util4.execOptsLinux).toString().toLowerCase();for(let i2=0;i2<result2.length;i2++)if(result2[i2].macDevice&&result2[i2].macDevice.length>10&&hdicon.indexOf(result2[i2].macDevice.toLowerCase())>=0)result2[i2].connected=!0}catch{util4.noop()}if(callback)callback(result2);resolve23(result2)}if(_darwin)exec3("system_profiler SPBluetoothDataType -json",(error2,stdout)=>{if(!error2)try{let outObj=JSON.parse(stdout.toString());if(outObj.SPBluetoothDataType&&outObj.SPBluetoothDataType.length&&outObj.SPBluetoothDataType[0]&&outObj.SPBluetoothDataType[0].device_title&&outObj.SPBluetoothDataType[0].device_title.length){let macAddr2=null;if(outObj.SPBluetoothDataType[0].local_device_title&&outObj.SPBluetoothDataType[0].local_device_title.general_address)macAddr2=outObj.SPBluetoothDataType[0].local_device_title.general_address.toLowerCase().replace(/-/g,":");outObj.SPBluetoothDataType[0].device_title.forEach((element)=>{let obj=element,objKey=Object.keys(obj);if(objKey&&objKey.length===1){let innerObject=obj[objKey[0]];innerObject.device_name=objKey[0];let bluetoothDevice=parseDarwinBluetoothDevices(innerObject,macAddr2);result2.push(bluetoothDevice)}})}if(outObj.SPBluetoothDataType&&outObj.SPBluetoothDataType.length&&outObj.SPBluetoothDataType[0]&&outObj.SPBluetoothDataType[0].device_connected&&outObj.SPBluetoothDataType[0].device_connected.length){let macAddr2=outObj.SPBluetoothDataType[0].controller_properties&&outObj.SPBluetoothDataType[0].controller_properties.controller_address?outObj.SPBluetoothDataType[0].controller_properties.controller_address.toLowerCase().replace(/-/g,":"):null;outObj.SPBluetoothDataType[0].device_connected.forEach((element)=>{let obj=element,objKey=Object.keys(obj);if(objKey&&objKey.length===1){let innerObject=obj[objKey[0]];innerObject.device_name=objKey[0],innerObject.device_isconnected="attrib_Yes";let bluetoothDevice=parseDarwinBluetoothDevices(innerObject,macAddr2);result2.push(bluetoothDevice)}})}if(outObj.SPBluetoothDataType&&outObj.SPBluetoothDataType.length&&outObj.SPBluetoothDataType[0]&&outObj.SPBluetoothDataType[0].device_not_connected&&outObj.SPBluetoothDataType[0].device_not_connected.length){let macAddr2=outObj.SPBluetoothDataType[0].controller_properties&&outObj.SPBluetoothDataType[0].controller_properties.controller_address?outObj.SPBluetoothDataType[0].controller_properties.controller_address.toLowerCase().replace(/-/g,":"):null;outObj.SPBluetoothDataType[0].device_not_connected.forEach((element)=>{let obj=element,objKey=Object.keys(obj);if(objKey&&objKey.length===1){let innerObject=obj[objKey[0]];innerObject.device_name=objKey[0],innerObject.device_isconnected="attrib_No";let bluetoothDevice=parseDarwinBluetoothDevices(innerObject,macAddr2);result2.push(bluetoothDevice)}})}}catch{util4.noop()}if(callback)callback(result2);resolve23(result2)});if(_windows)util4.powerShell("Get-CimInstance Win32_PNPEntity | select PNPClass, Name, Manufacturer, Status, Service, ConfigManagerErrorCode, Present | fl").then((stdout,error2)=>{if(!error2)stdout.toString().split(/\n\s*\n/).forEach((part)=>{let lines=part.split(`
4018
- `),service=util4.getValue(lines,"Service",":"),errorCode=util4.getValue(lines,"ConfigManagerErrorCode",":");if(util4.getValue(lines,"PNPClass",":").toLowerCase()==="bluetooth"&&errorCode==="0"&&service==="")result2.push(parseWindowsBluetooth(lines))});if(callback)callback(result2);resolve23(result2)});if(_freebsd||_netbsd||_openbsd||_sunos)resolve23(null)})})}exports.bluetoothDevices=bluetoothDevices});var require_lib5=__commonJS((exports)=>{var lib_version=require_package().version,util4=require_util3(),system=require_system(),osInfo=require_osinfo(),cpu=require_cpu(),memory=require_memory(),battery=require_battery(),graphics=require_graphics(),filesystem=require_filesystem(),network=require_network(),wifi=require_wifi(),processes=require_processes(),users=require_users(),internet=require_internet(),docker=require_docker(),vbox=require_virtualbox(),printer=require_printer(),usb=require_usb(),audio=require_audio(),bluetooth=require_bluetooth(),_platform=process.platform,_windows=_platform==="win32",_freebsd=_platform==="freebsd",_openbsd=_platform==="openbsd",_netbsd=_platform==="netbsd",_sunos=_platform==="sunos";if(_windows)util4.getCodepage(),util4.getPowershell();function version(){return lib_version}function getStaticData(callback){return new Promise((resolve23)=>{process.nextTick(()=>{let data={};data.version=version(),Promise.all([system.system(),system.bios(),system.baseboard(),system.chassis(),osInfo.osInfo(),osInfo.uuid(),osInfo.versions(),cpu.cpu(),cpu.cpuFlags(),graphics.graphics(),network.networkInterfaces(),memory.memLayout(),filesystem.diskLayout(),audio.audio(),bluetooth.bluetoothDevices(),usb.usb(),printer.printer()]).then((res)=>{if(data.system=res[0],data.bios=res[1],data.baseboard=res[2],data.chassis=res[3],data.os=res[4],data.uuid=res[5],data.versions=res[6],data.cpu=res[7],data.cpu.flags=res[8],data.graphics=res[9],data.net=res[10],data.memLayout=res[11],data.diskLayout=res[12],data.audio=res[13],data.bluetooth=res[14],data.usb=res[15],data.printer=res[16],callback)callback(data);resolve23(data)})})})}function getDynamicData(srv,iface,callback){if(util4.isFunction(iface))callback=iface,iface="";if(util4.isFunction(srv))callback=srv,srv="";return new Promise((resolve23)=>{process.nextTick(()=>{iface=iface||network.getDefaultNetworkInterface(),srv=srv||"";let functionProcessed=(()=>{let totalFunctions=15;if(_windows)totalFunctions=13;if(_freebsd||_openbsd||_netbsd)totalFunctions=11;if(_sunos)totalFunctions=6;return function(){if(--totalFunctions===0){if(callback)callback(data);resolve23(data)}}})(),data={};if(data.time=osInfo.time(),data.node=process.versions.node,data.v8=process.versions.v8,cpu.cpuCurrentSpeed().then((res)=>{data.cpuCurrentSpeed=res,functionProcessed()}),users.users().then((res)=>{data.users=res,functionProcessed()}),processes.processes().then((res)=>{data.processes=res,functionProcessed()}),cpu.currentLoad().then((res)=>{data.currentLoad=res,functionProcessed()}),!_sunos)cpu.cpuTemperature().then((res)=>{data.temp=res,functionProcessed()});if(!_openbsd&&!_freebsd&&!_netbsd&&!_sunos)network.networkStats(iface).then((res)=>{data.networkStats=res,functionProcessed()});if(!_sunos)network.networkConnections().then((res)=>{data.networkConnections=res,functionProcessed()});if(memory.mem().then((res)=>{data.mem=res,functionProcessed()}),!_sunos)battery().then((res)=>{data.battery=res,functionProcessed()});if(!_sunos)processes.services(srv).then((res)=>{data.services=res,functionProcessed()});if(!_sunos)filesystem.fsSize().then((res)=>{data.fsSize=res,functionProcessed()});if(!_windows&&!_openbsd&&!_freebsd&&!_netbsd&&!_sunos)filesystem.fsStats().then((res)=>{data.fsStats=res,functionProcessed()});if(!_windows&&!_openbsd&&!_freebsd&&!_netbsd&&!_sunos)filesystem.disksIO().then((res)=>{data.disksIO=res,functionProcessed()});if(!_openbsd&&!_freebsd&&!_netbsd&&!_sunos)wifi.wifiNetworks().then((res)=>{data.wifiNetworks=res,functionProcessed()});internet.inetLatency().then((res)=>{data.inetLatency=res,functionProcessed()})})})}function getAllData(srv,iface,callback){return new Promise((resolve23)=>{process.nextTick(()=>{let data={};if(iface&&util4.isFunction(iface)&&!callback)callback=iface,iface="";if(srv&&util4.isFunction(srv)&&!iface&&!callback)callback=srv,srv="",iface="";getStaticData().then((res)=>{data=res,getDynamicData(srv,iface).then((res2)=>{for(let key in res2)if({}.hasOwnProperty.call(res2,key))data[key]=res2[key];if(callback)callback(data);resolve23(data)})})})})}function get3(valueObject,callback){return new Promise((resolve23)=>{process.nextTick(()=>{let allPromises=Object.keys(valueObject).filter((func)=>({}).hasOwnProperty.call(exports,func)).map((func)=>{let params=valueObject[func].substring(valueObject[func].lastIndexOf("(")+1,valueObject[func].lastIndexOf(")")),funcWithoutParams=func.indexOf(")")>=0?func.split(")")[1].trim():func;if(funcWithoutParams=func.indexOf("|")>=0?func.split("|")[0].trim():funcWithoutParams,params)return exports[funcWithoutParams](params);else return exports[funcWithoutParams]("")});Promise.all(allPromises).then((data)=>{let result2={},i2=0;for(let key in valueObject)if({}.hasOwnProperty.call(valueObject,key)&&{}.hasOwnProperty.call(exports,key)&&data.length>i2){if(valueObject[key]==="*"||valueObject[key]==="all")result2[key]=data[i2];else{let keys=valueObject[key],filter="",filterParts=[];if(keys.indexOf(")")>=0)keys=keys.split(")")[1].trim();if(keys.indexOf("|")>=0)filter=keys.split("|")[1].trim(),filterParts=filter.split(":"),keys=keys.split("|")[0].trim();if(keys=keys.replace(/,/g," ").replace(/ +/g," ").split(" "),data[i2])if(Array.isArray(data[i2])){let partialArray=[];data[i2].forEach((element)=>{let partialRes={};if(keys.length===1&&(keys[0]==="*"||keys[0]==="all"))partialRes=element;else keys.forEach((k2)=>{if({}.hasOwnProperty.call(element,k2))partialRes[k2]=element[k2]});if(filter&&filterParts.length===2){if({}.hasOwnProperty.call(partialRes,filterParts[0].trim())){let val=partialRes[filterParts[0].trim()];if(typeof val==="number"){if(val===parseFloat(filterParts[1].trim()))partialArray.push(partialRes)}else if(typeof val==="string"){if(val.toLowerCase()===filterParts[1].trim().toLowerCase())partialArray.push(partialRes)}}}else partialArray.push(partialRes)}),result2[key]=partialArray}else{let partialRes={};keys.forEach((k2)=>{if({}.hasOwnProperty.call(data[i2],k2))partialRes[k2]=data[i2][k2]}),result2[key]=partialRes}else result2[key]={}}i2++}if(callback)callback(result2);resolve23(result2)})})})}function observe(valueObject,interval,callback){let _data=null;return setInterval(()=>{get3(valueObject).then((data)=>{if(JSON.stringify(_data)!==JSON.stringify(data))_data=Object.assign({},data),callback(data)})},interval)}exports.version=version;exports.system=system.system;exports.bios=system.bios;exports.baseboard=system.baseboard;exports.chassis=system.chassis;exports.time=osInfo.time;exports.osInfo=osInfo.osInfo;exports.versions=osInfo.versions;exports.shell=osInfo.shell;exports.uuid=osInfo.uuid;exports.cpu=cpu.cpu;exports.cpuFlags=cpu.cpuFlags;exports.cpuCache=cpu.cpuCache;exports.cpuCurrentSpeed=cpu.cpuCurrentSpeed;exports.cpuTemperature=cpu.cpuTemperature;exports.currentLoad=cpu.currentLoad;exports.fullLoad=cpu.fullLoad;exports.mem=memory.mem;exports.memLayout=memory.memLayout;exports.battery=battery;exports.graphics=graphics.graphics;exports.fsSize=filesystem.fsSize;exports.fsOpenFiles=filesystem.fsOpenFiles;exports.blockDevices=filesystem.blockDevices;exports.fsStats=filesystem.fsStats;exports.disksIO=filesystem.disksIO;exports.diskLayout=filesystem.diskLayout;exports.networkInterfaceDefault=network.networkInterfaceDefault;exports.networkGatewayDefault=network.networkGatewayDefault;exports.networkInterfaces=network.networkInterfaces;exports.networkStats=network.networkStats;exports.networkConnections=network.networkConnections;exports.wifiNetworks=wifi.wifiNetworks;exports.wifiInterfaces=wifi.wifiInterfaces;exports.wifiConnections=wifi.wifiConnections;exports.services=processes.services;exports.processes=processes.processes;exports.processLoad=processes.processLoad;exports.users=users.users;exports.inetChecksite=internet.inetChecksite;exports.inetLatency=internet.inetLatency;exports.dockerInfo=docker.dockerInfo;exports.dockerImages=docker.dockerImages;exports.dockerContainers=docker.dockerContainers;exports.dockerContainerStats=docker.dockerContainerStats;exports.dockerContainerProcesses=docker.dockerContainerProcesses;exports.dockerVolumes=docker.dockerVolumes;exports.dockerAll=docker.dockerAll;exports.vboxInfo=vbox.vboxInfo;exports.printer=printer.printer;exports.usb=usb.usb;exports.audio=audio.audio;exports.bluetoothDevices=bluetooth.bluetoothDevices;exports.getStaticData=getStaticData;exports.getDynamicData=getDynamicData;exports.getAllData=getAllData;exports.get=get3;exports.observe=observe;exports.powerShellStart=util4.powerShellStart;exports.powerShellRelease=util4.powerShellRelease});import os4 from"os";function toGB(bytes){return Math.round(bytes/1073741824*10)/10}function bar(percent,width){let p=Math.max(0,Math.min(100,percent)),filled=Math.round(p/100*width);return`[${"=".repeat(filled)}${"-".repeat(width-filled)}]`}function pickColor(percent){if(percent>90)return palette.error;if(percent>70)return palette.warning;return palette.accent}function SystemStatsView({stats:stats2}){if(!stats2)return import_jsx_dev_runtime2.jsxDEV("box",{flexDirection:"column",paddingX:1,backgroundColor:palette.bgRaised,children:import_jsx_dev_runtime2.jsxDEV("box",{height:1,width:"100%",children:import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.accent,children:"genie"},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:` v${VERSION}`},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this);let{cpu,ram,swap,load:load3}=stats2,hotStr=cpu.hotCores.map((c)=>`#${c.id} ${c.load}%`).join(" ");return import_jsx_dev_runtime2.jsxDEV("box",{flexDirection:"column",paddingX:1,backgroundColor:palette.bgRaised,children:[import_jsx_dev_runtime2.jsxDEV("box",{height:1,width:"100%",children:import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.accent,children:"genie"},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:` v${VERSION}`},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("box",{height:1,width:"100%",children:import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:"CPU "},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:pickColor(cpu.combined),children:`${String(cpu.combined).padStart(3)}% ${bar(cpu.combined,8)}`},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:` ${cpu.coreCount}c`},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("box",{height:1,width:"100%",children:import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:" hot "},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.warning,children:hotStr},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("box",{height:1,width:"100%",children:import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:"RAM "},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:pickColor(ram.percent),children:`${ram.usedGB}/${ram.totalGB}G ${bar(ram.percent,8)}`},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),swap.totalGB>0?import_jsx_dev_runtime2.jsxDEV("box",{height:1,width:"100%",children:import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:"SWP "},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:pickColor(swap.percent),children:`${swap.usedGB}/${swap.totalGB}G ${bar(swap.percent,8)}`},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this):null,import_jsx_dev_runtime2.jsxDEV("box",{height:1,width:"100%",children:import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:"Load "},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:pickColor(load3.percent),children:`${load3.percent}%`},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:` (${load3.busy}/${load3.total} busy)`},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function SystemStats(){let[stats2,setStats]=import_react27.useState(null),mountedRef=import_react27.useRef(!0);return import_react27.useEffect(()=>{mountedRef.current=!0;async function refresh(){try{let[cpu,mem]=await Promise.all([import_systeminformation.default.currentLoad(),import_systeminformation.default.mem()]);if(!mountedRef.current)return;let coreCount=os4.cpus().length,avg1=os4.loadavg()[0],sorted=cpu.cpus.map((c,i2)=>({id:i2,load:Math.round(c.load)})).sort((a,b3)=>b3.load-a.load);setStats({cpu:{combined:Math.round(cpu.currentLoad),hotCores:sorted.slice(0,3),coreCount},ram:{usedGB:toGB(mem.active),totalGB:toGB(mem.total),percent:mem.total>0?Math.round(mem.active/mem.total*100):0},swap:{usedGB:toGB(mem.swapused),totalGB:toGB(mem.swaptotal),percent:mem.swaptotal>0?Math.round(mem.swapused/mem.swaptotal*100):0},load:{percent:coreCount>0?Math.round(avg1/coreCount*100):0,busy:Math.round(avg1*10)/10,total:coreCount}})}catch{}}refresh();let timer2=setInterval(refresh,3000);return()=>{mountedRef.current=!1,clearInterval(timer2)}},[]),import_jsx_dev_runtime2.jsxDEV(SystemStatsView,{stats:stats2},void 0,!1,void 0,this)}var import_react27,import_systeminformation;var init_SystemStats=__esm(()=>{init_version();init_theme2();init_jsx_dev_runtime();import_react27=__toESM(require_react_development(),1),import_systeminformation=__toESM(require_lib5(),1)});function validateName(name){if(name.length===0)return null;try{return validateBranchName(name),null}catch(err){return err instanceof Error?err.message:String(err)}}function TeamCreate({availableAgents,workspaceRoot,onConfirm,onCancel}){let[step,setStep]=import_react29.useState("name"),[teamName,setTeamName]=import_react29.useState(""),[selected,setSelected]=import_react29.useState(()=>new Set),[memberCursor,setMemberCursor]=import_react29.useState(0),nameError=import_react29.useMemo(()=>validateName(teamName),[teamName]),nameValid=teamName.length>0&&nameError===null,intent=import_react29.useMemo(()=>({kind:"create-team",name:teamName.length>0?teamName:"TEAM_NAME",repo:workspaceRoot}),[teamName,workspaceRoot]),handleNameChange=import_react29.useCallback((value)=>{setTeamName(value)},[]),advanceFromName=import_react29.useCallback(()=>{if(!nameValid)return;setStep("members")},[nameValid]),toggleMember=import_react29.useCallback((name)=>{setSelected((prev)=>{let next=new Set(prev);if(next.has(name))next.delete(name);else next.add(name);return next})},[]),confirmMembers=import_react29.useCallback(()=>{onConfirm({teamName,members:Array.from(selected)})},[onConfirm,teamName,selected]);return useKeyboard((key)=>{if(step==="name"){handleNameStepKey(key,{onCancel,nameValid,advanceFromName});return}handleMembersStepKey(key,{availableAgents,memberCursor,setStep,setMemberCursor,toggleMember,confirmMembers})}),import_jsx_dev_runtime2.jsxDEV("box",{position:"absolute",width:"100%",height:"100%",justifyContent:"center",alignItems:"center",backgroundColor:palette.bgOverlay,children:import_jsx_dev_runtime2.jsxDEV("box",{border:!0,borderColor:palette.borderActive,backgroundColor:palette.bgRaised,paddingX:3,paddingY:1,flexDirection:"column",width:"100%",gap:1,children:[import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.accent,children:"New team"},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:step==="name"?" \u2014 step 1 of 2":" \u2014 step 2 of 2"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),step==="name"?import_jsx_dev_runtime2.jsxDEV(NameStep,{value:teamName,onChange:handleNameChange,onSubmit:advanceFromName,errorMessage:nameError},void 0,!1,void 0,this):import_jsx_dev_runtime2.jsxDEV(MembersStep,{agents:availableAgents,selected,cursor:memberCursor},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV(CliPreviewLine,{intent,hint:step==="name"?"Enter: next \xB7 Esc: cancel":"Space: toggle \xB7 Enter: create \xB7 Esc: back"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)}function NameStep({value,onChange,onSubmit,errorMessage}){return import_jsx_dev_runtime2.jsxDEV("box",{flexDirection:"column",gap:1,children:[import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:"Team name (git-branch-safe):"},void 0,!1,void 0,this)},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("input",{value,onInput:onChange,onChange,onSubmit,focused:!0,placeholder:"feat/auth-bug",backgroundColor:palette.bg,textColor:palette.text,placeholderColor:palette.textMuted},void 0,!1,void 0,this),errorMessage!==null?import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.error,children:`\u26A0 ${errorMessage}`},void 0,!1,void 0,this)},void 0,!1,void 0,this):null]},void 0,!0,void 0,this)}function MembersStep({agents,selected,cursor}){if(agents.length===0)return import_jsx_dev_runtime2.jsxDEV("box",{flexDirection:"column",children:[import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:"No agents registered"},void 0,!1,void 0,this)},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:"Members can be hired later via `genie team hire`."},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this);return import_jsx_dev_runtime2.jsxDEV("box",{flexDirection:"column",children:[import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:"Select members (space to toggle):"},void 0,!1,void 0,this)},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("box",{flexDirection:"column",children:agents.map((name,idx)=>{let isSelected=selected.has(name),isCursor=idx===cursor,tick=isSelected?"[x]":"[ ]",prefix=isCursor?"\u25B6 ":" ";return import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:isCursor?palette.accent:palette.textMuted,children:prefix},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:isSelected?palette.success:palette.textDim,children:tick},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.text,children:` ${name}`},void 0,!1,void 0,this)]},name,!0,void 0,this)})},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function isEnter(key){return key.name==="enter"||key.name==="return"}function handleNameStepKey(key,opts){if(key.name==="escape"){opts.onCancel();return}if(isEnter(key)&&opts.nameValid)opts.advanceFromName()}function handleMembersStepKey(key,opts){if(key.name==="escape"){opts.setStep("name");return}if(opts.availableAgents.length===0){if(isEnter(key))opts.confirmMembers();return}if(key.name==="up"||key.name==="k"){opts.setMemberCursor((prev)=>prev<=0?opts.availableAgents.length-1:prev-1);return}if(key.name==="down"||key.name==="j"){opts.setMemberCursor((prev)=>prev>=opts.availableAgents.length-1?0:prev+1);return}if(key.name==="space"){let name=opts.availableAgents[opts.memberCursor];if(name)opts.toggleMember(name);return}if(isEnter(key))opts.confirmMembers()}var import_react29;var init_TeamCreate=__esm(async()=>{init_team_manager();init_theme2();init_CliPreviewLine();init_jsx_dev_runtime();await init_react2();import_react29=__toESM(require_react_development(),1)});function getNodeIcon(node){if(node.type==="agent")return getAgentIcon(node);switch(node.type){case"session":return node.data.attached?"\u25B6":"\u25B8";case"window":return node.data.active?"\u25A0":"\u25A1";case"pane":return getPaneIcon(node);default:return" "}}function getAgentIcon(node){switch(node.workState){case"in_flight":return"\u25C6";case"paused":return"\u25D0";case"done":return"\u2714";case"stuck":return"\u2718";default:break}switch(node.wsAgentState){case"running":return"\u25CF";case"stopped":return"\u25CC";case"error":return"\u2298";case"spawning":return"\u231B";default:return"\u25CC"}}function getPaneIcon(node){if(node.data.isDead)return"\u2718";if(node.agentState==="working")return"\u25CF";if(node.agentState==="idle")return"\u25CB";if(node.agentState==="permission")return"\u26A0";if(node.agentState==="error")return"\u2718";if(node.data.isClaudeLike)return"\u25C6";return"\u25CB"}function getNodeColor(node){if(node.type==="agent")return getAgentColor(node);switch(node.type){case"session":return node.data.attached?palette.success:palette.textDim;case"window":return node.data.active?palette.info:palette.text;case"pane":return getPaneColor(node);default:return palette.text}}function getAgentColor(node){switch(node.workState){case"in_flight":return palette.accentBright;case"paused":return palette.textDim;case"done":return palette.info;case"stuck":return palette.error;default:break}switch(node.wsAgentState){case"running":return palette.success;case"stopped":return palette.text;case"error":return palette.error;case"spawning":return palette.warning;default:return palette.textDim}}function getPaneColor(node){if(node.data.isDead)return palette.error;if(node.agentState==="working")return palette.info;if(node.agentState==="permission")return palette.warning;if(node.agentState==="error")return palette.error;if(node.agentState==="idle")return palette.textDim;if(node.data.isClaudeLike)return palette.info;return palette.textDim}function getAgentSuffix(node){if(node.workState==="stuck")return" [stuck \u2014 press R to retry]";if(node.workState==="paused")return" [paused \u2014 auto-resume off]";if(node.workState==="done")return" [done]";if(node.wsAgentState==="spawning"&&node.activePanes===0)return" [stuck \u2014 press R to retry]";if(node.wsAgentState==="stopped")return" [Enter to start]";let wc=node.data.windowCount;if(wc>1)return` (${wc} windows)`;if(wc===1)return" (1 window)";return""}function getNodeSuffix(node){if(node.type==="agent")return getAgentSuffix(node);if(node.type==="session"||node.type==="pane"){let count=node.activePanes;if(count>0)return` ${icons.agent}${count}`}return""}function getStateColor(state){switch(state){case"working":return palette.info;case"idle":return palette.textDim;case"permission":return palette.warning;case"error":return palette.error;default:return palette.textMuted}}var import_react30,TreeNodeRow;var init_TreeNode=__esm(()=>{init_theme2();init_jsx_dev_runtime();import_react30=__toESM(require_react_development(),1),TreeNodeRow=import_react30.memo(function({node,selected,onSelect,onToggle,onContextMenu}){let indent2=" ".repeat(node.depth),hasChildren=node.children.length>0,expandIcon=hasChildren?node.expanded?icons.expanded:icons.collapsed:" ",icon=getNodeIcon(node),color2=getNodeColor(node),suffix2=getNodeSuffix(node),labelColor=selected?palette.accentBright:node.type==="agent"&&node.kind==="subagent"?palette.textDim:palette.text;return import_jsx_dev_runtime2.jsxDEV("box",{height:1,width:"100%",backgroundColor:selected?palette.accentDim:void 0,onMouseDown:(event)=>{if(event.button===2&&onContextMenu){onSelect(node.id),onContextMenu(node.id);return}if(onSelect(node.id),hasChildren)onToggle(node.id)},children:import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:[indent2,expandIcon," "]},void 0,!0,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:color2,children:[icon," "]},void 0,!0,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:labelColor,children:node.label},void 0,!1,void 0,this),suffix2?import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:suffix2},void 0,!1,void 0,this):null,node.agentState?import_jsx_dev_runtime2.jsxDEV("span",{fg:getStateColor(node.agentState),children:[" ",node.agentState]},void 0,!0,void 0,this):null,process.env.GENIE_TUI_DEBUG==="1"?import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:` [${node.type}]`},void 0,!1,void 0,this):null]},void 0,!0,void 0,this)},void 0,!1,void 0,this)})});function useDiagnosticsRefresh(setDiagnostics,setRequestedInitialAgent){import_react32.useEffect(()=>{let active=!0,lastErrorMessage=null,lastErrorLoggedAt=0;async function refresh(){try{let snap=await collectDiagnostics();if(!active)return;setDiagnostics(snap),lastErrorMessage=null;let signaledAgent=consumeInitialAgentSignal();if(signaledAgent)setRequestedInitialAgent(signaledAgent)}catch(err){let message=err instanceof Error?err.message:String(err),now=Date.now();if(message!==lastErrorMessage||now-lastErrorLoggedAt>30000)console.error("TUI: diagnostics failed:",message),lastErrorMessage=message,lastErrorLoggedAt=now}}refresh();let timer2=setInterval(refresh,2000);return()=>{active=!1,clearInterval(timer2)}},[setDiagnostics,setRequestedInitialAgent])}function useSessionTreeBuilder(diagnostics,workspaceRoot,setSessionTree){import_react32.useEffect(()=>{if(!diagnostics)return;let newTree;if(workspaceRoot){let agentNames=scanAgents2(workspaceRoot);newTree=buildWorkspaceTree({agentNames,sessions:diagnostics.sessions,executors:diagnostics.executors,workStates:diagnostics.workStates,teamScope:process.env.GENIE_TUI_TEAM??process.env.GENIE_TEAM})}else newTree=buildSessionTree(diagnostics);setSessionTree((prev)=>mergeExpandedState(prev,newTree))},[diagnostics,workspaceRoot,setSessionTree])}function useStableSelection(flatNodes,selectedIndex,setSelectedIndex,selectedNodeId){import_react32.useEffect(()=>{let node=flatNodes[selectedIndex]?.node;if(node)selectedNodeId.current=node.id},[selectedIndex,flatNodes,selectedNodeId]),import_react32.useLayoutEffect(()=>{if(flatNodes.length===0)return;if(selectedIndex>=flatNodes.length){setSelectedIndex(flatNodes.length-1);return}if(!selectedNodeId.current)return;let currentAtIndex=flatNodes[selectedIndex]?.node;if(currentAtIndex&&currentAtIndex.id===selectedNodeId.current)return;let restored=flatNodes.findIndex((n)=>n.node.id===selectedNodeId.current);if(restored>=0)setSelectedIndex(restored)},[flatNodes])}function useInitialAgentSelection(requestedInitialAgent,flatNodes,setSelectedIndex,setRequestedInitialAgent,onTmuxSessionSelect){import_react32.useEffect(()=>{if(!requestedInitialAgent||flatNodes.length===0)return;let idx=flatNodes.findIndex((n)=>n.node.id===`agent:${requestedInitialAgent}`);if(idx<0)return;setSelectedIndex(idx);let node=flatNodes[idx].node;if(node.type==="agent"&&node.wsAgentState!=="running"&&node.wsAgentState!=="spawning")spawnAgent(agentNameFromNode(node),onTmuxSessionSelect);setRequestedInitialAgent(void 0)},[requestedInitialAgent,flatNodes,onTmuxSessionSelect,setSelectedIndex,setRequestedInitialAgent])}function useAutoAttach(flatNodes,selectedIndex,lastTarget,onTmuxSessionSelect){import_react32.useEffect(()=>{let current=flatNodes[selectedIndex]?.node;if(!current)return;let target=getSessionTarget(current);if(!target)return;if(current.type==="agent"&&current.wsAgentState!=="running")return;let key=`${target.sessionName}:${target.windowIndex??""}`;if(key===lastTarget.current)return;lastTarget.current=key,onTmuxSessionSelect(target.sessionName,target.windowIndex)},[selectedIndex,flatNodes,onTmuxSessionSelect,lastTarget])}function useNavKeyboard(opts){useKeyboard((key)=>{if(opts.keyboardDisabled)return;if(opts.spawnIntoAgent!==null||opts.spawnPickerTarget!==null)return;if(tryOpenTeamCreate(key,{workspaceRoot:opts.workspaceRoot,showTeamCreate:opts.showTeamCreate,contextMenuNodeId:opts.contextMenuNodeId,handleOpenTeamCreate:opts.handleOpenTeamCreate}))return;if(opts.showTeamCreate)return;handleKeyboardInput(key,opts)})}function renderAlertBadge(alertCount){if(alertCount<=0)return null;return import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.error,children:[" ","\u25CF ",alertCount," alert",alertCount===1?"":"s"]},void 0,!0,void 0,this)}function countAgents(nodes,predicate){let count=0;for(let n of nodes){if(n.type==="agent"&&predicate(n))count++;if(n.children.length>0)count+=countAgents(n.children,predicate)}return count}function computeNavCounts(workspaceRoot,sessionTree,diagnostics){if(workspaceRoot){let agentCount=countAgents(sessionTree,()=>!0);if(agentCount>0)return{agentCount,runningCount:countAgents(sessionTree,(n)=>n.wsAgentState==="running")}}let paneSum=diagnostics?.sessions.reduce((sum,s2)=>sum+s2.windows.reduce((ws,w2)=>ws+w2.panes.length,0),0)??0;return{agentCount:diagnostics?.sessions.length??0,runningCount:paneSum}}function Nav({onTmuxSessionSelect,onNewAgentWindow,workspaceRoot,initialAgent,keyboardDisabled=!1}){let[diagnostics,setDiagnostics]=import_react32.useState(null),[sessionTree,setSessionTree]=import_react32.useState([]),[selectedIndex,setSelectedIndex]=import_react32.useState(0),[requestedInitialAgent,setRequestedInitialAgent]=import_react32.useState(initialAgent),[contextMenuNodeId,setContextMenuNodeId]=import_react32.useState(null),[spawnIntoAgent,setSpawnIntoAgent]=import_react32.useState(null),[spawnPickerTarget,setSpawnPickerTarget]=import_react32.useState(null),lastTarget=import_react32.useRef(null),selectedNodeId=import_react32.useRef(null);useDiagnosticsRefresh(setDiagnostics,setRequestedInitialAgent),useSessionTreeBuilder(diagnostics,workspaceRoot,setSessionTree);let flatNodes=import_react32.useMemo(()=>flattenTree(sessionTree),[sessionTree]);useStableSelection(flatNodes,selectedIndex,setSelectedIndex,selectedNodeId),useInitialAgentSelection(requestedInitialAgent,flatNodes,setSelectedIndex,setRequestedInitialAgent,onTmuxSessionSelect),useAutoAttach(flatNodes,selectedIndex,lastTarget,onTmuxSessionSelect);let handleSelect=import_react32.useCallback((id)=>{let idx=flatNodes.findIndex((n)=>n.node.id===id);if(idx>=0)setSelectedIndex(idx)},[flatNodes]),handleToggle=import_react32.useCallback((id)=>{setSessionTree((prev)=>toggleNode(prev,id))},[]),handleVerticalNav=import_react32.useCallback((keyName2)=>{let rowCount=flatNodes.length;if(rowCount===0)return;if(keyName2==="up"||keyName2==="k")setSelectedIndex((prev)=>prev===0?rowCount-1:prev-1);else if(keyName2==="down"||keyName2==="j")setSelectedIndex((prev)=>prev>=rowCount-1?0:prev+1)},[flatNodes.length]),handleExpandCollapse=import_react32.useCallback((keyName2)=>{let node=flatNodes[selectedIndex]?.node;if(!node)return;if((keyName2==="right"||keyName2==="l")&&node.children.length>0&&!node.expanded)handleToggle(node.id);else if((keyName2==="left"||keyName2==="h")&&node.expanded)handleToggle(node.id)},[flatNodes,selectedIndex,handleToggle]),handleEnter=import_react32.useCallback(()=>{let node=flatNodes[selectedIndex]?.node;if(!node)return;if(node.type==="agent"){handleEnterAgent(node,onTmuxSessionSelect);return}if(node.children.length>0)handleToggle(node.id);let target=getSessionTarget(node);if(target)onTmuxSessionSelect(target.sessionName,target.windowIndex)},[flatNodes,selectedIndex,handleToggle,onTmuxSessionSelect]),handleRetry=import_react32.useCallback(()=>{let node=flatNodes[selectedIndex]?.node;if(!node||node.type!=="agent")return;if(node.wsAgentState!=="spawning"&&node.wsAgentState!=="error")return;(async()=>{try{let{reconcileStaleSpawns:reconcileStaleSpawns2}=await Promise.resolve().then(() => (init_agent_registry(),exports_agent_registry));await reconcileStaleSpawns2()}catch{}spawnAgent(agentNameFromNode(node),onTmuxSessionSelect)})()},[flatNodes,selectedIndex,onTmuxSessionSelect]),handleContextMenu=import_react32.useCallback((nodeId)=>{let flat=flatNodes.find((n)=>n.node.id===nodeId);if(flat&&buildMenuItems(flat.node).length>0)setContextMenuNodeId(nodeId)},[flatNodes]),handleContextMenuAction=import_react32.useCallback((action,payload)=>{let node=flatNodes.find((n)=>n.node.id===contextMenuNodeId)?.node;if(!node)return;if(setContextMenuNodeId(null),action==="spawn-here"){let target=resolveSpawnHereTarget(node);if(target)setSpawnPickerTarget(target);return}dispatchContextMenuAction(action,node,payload,{sessionTree,onTmuxSessionSelect,onNewAgentWindow,openSpawnInto:setSpawnIntoAgent})},[flatNodes,contextMenuNodeId,sessionTree,onTmuxSessionSelect,onNewAgentWindow]),handleSpawnIntoConfirm=import_react32.useCallback((intent)=>{executeSpawnIntent(intent),setSpawnIntoAgent(null)},[]),handleSpawnIntoCancel=import_react32.useCallback(()=>{setSpawnIntoAgent(null)},[]),handleSpawnPickerConfirm=import_react32.useCallback((intent)=>{setSpawnPickerTarget(null),executeSpawnIntent(intent)},[]),handleSpawnPickerCancel=import_react32.useCallback(()=>{setSpawnPickerTarget(null)},[]),_menuDisabled=keyboardDisabled||contextMenuNodeId!==null,{showTeamCreate,handleOpenTeamCreate,handleTeamCreateConfirm,handleTeamCreateCancel}=useTeamCreateControls({workspaceRoot,diagnostics,onTmuxSessionSelect});useNavKeyboard({keyboardDisabled,spawnIntoAgent,spawnPickerTarget,workspaceRoot,showTeamCreate,contextMenuNodeId,handleOpenTeamCreate,flatNodes,selectedIndex,setContextMenuNodeId,handleVerticalNav,handleExpandCollapse,handleEnter,handleRetry,onNewAgentWindow});let{agentCount,runningCount}=computeNavCounts(workspaceRoot,sessionTree,diagnostics),headerLabel=workspaceRoot?"Agents":"Sessions",alertCount=diagnostics?.alertCount??0;return import_jsx_dev_runtime2.jsxDEV("box",{flexDirection:"column",width:"100%",height:"100%",backgroundColor:palette.bg,children:[import_jsx_dev_runtime2.jsxDEV("box",{height:1,paddingX:1,backgroundColor:palette.bgRaised,children:import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.accent,children:headerLabel},void 0,!1,void 0,this),diagnostics?import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:[" ",workspaceRoot?`${runningCount}/${agentCount}`:`${agentCount}s ${runningCount}p`]},void 0,!0,void 0,this):null,renderAlertBadge(alertCount)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),diagnostics?import_jsx_dev_runtime2.jsxDEV("scrollbox",{focused:!0,height:"100%",style:{scrollbarOptions:{showArrows:!1,trackOptions:{foregroundColor:palette.scrollThumb,backgroundColor:palette.scrollTrack}}},children:flatNodes.map((flat,i2)=>import_jsx_dev_runtime2.jsxDEV(TreeNodeRow,{node:flat.node,selected:i2===selectedIndex,onSelect:handleSelect,onToggle:handleToggle,onContextMenu:handleContextMenu},flat.node.id,!1,void 0,this))},void 0,!1,void 0,this):import_jsx_dev_runtime2.jsxDEV("box",{flexGrow:1,justifyContent:"center",alignItems:"center",flexDirection:"column",gap:1,children:[import_jsx_dev_runtime2.jsxDEV("ascii-font",{text:"GENIE",font:"tiny",color:palette.accent},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("text",{fg:palette.textDim,children:"Collecting..."},void 0,!1,void 0,this)]},void 0,!0,void 0,this),contextMenuNodeId?import_jsx_dev_runtime2.jsxDEV(ContextMenu,{items:buildMenuItems(flatNodes.find((n)=>n.node.id===contextMenuNodeId)?.node??{}),onAction:handleContextMenuAction,onClose:()=>setContextMenuNodeId(null),positionY:flatNodes.findIndex((n)=>n.node.id===contextMenuNodeId)+1},void 0,!1,void 0,this):null,spawnIntoAgent!==null?import_jsx_dev_runtime2.jsxDEV(SpawnTargetPicker,{agentName:spawnIntoAgent,sessions:diagnostics?.sessions??[],onConfirm:handleSpawnIntoConfirm,onCancel:handleSpawnIntoCancel},void 0,!1,void 0,this):null,spawnPickerTarget!==null?import_jsx_dev_runtime2.jsxDEV(AgentPicker,{target:spawnPickerTarget,onConfirm:handleSpawnPickerConfirm,onCancel:handleSpawnPickerCancel},void 0,!1,void 0,this):null,showTeamCreate?import_jsx_dev_runtime2.jsxDEV(TeamCreate,{availableAgents:workspaceRoot?scanAgents2(workspaceRoot):[],workspaceRoot,onConfirm:handleTeamCreateConfirm,onCancel:handleTeamCreateCancel},void 0,!1,void 0,this):null,import_jsx_dev_runtime2.jsxDEV(SystemStats,{},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("box",{height:1,paddingX:1,backgroundColor:palette.bgRaised,children:import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:buildFooterHint(workspaceRoot)},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function useTeamCreateControls(opts){let{workspaceRoot,diagnostics,onTmuxSessionSelect}=opts,[showTeamCreate,setShowTeamCreate]=import_react32.useState(!1),pendingTeamNameRef=import_react32.useRef(null),handleOpenTeamCreate=import_react32.useCallback(()=>{if(!workspaceRoot)return;setShowTeamCreate(!0)},[workspaceRoot]),handleTeamCreateConfirm=import_react32.useCallback((result2)=>{setShowTeamCreate(!1),runTeamCreation(result2,workspaceRoot),pendingTeamNameRef.current=result2.teamName},[workspaceRoot]),handleTeamCreateCancel=import_react32.useCallback(()=>{setShowTeamCreate(!1)},[]);return import_react32.useEffect(()=>{let pending=pendingTeamNameRef.current;if(!pending||!diagnostics)return;let session=diagnostics.sessions.find((s2)=>s2.name===pending);if(!session)return;pendingTeamNameRef.current=null,onTmuxSessionSelect(session.name,resolvePreferredWindowIndex(session,pending))},[diagnostics,onTmuxSessionSelect]),{showTeamCreate,handleOpenTeamCreate,handleTeamCreateConfirm,handleTeamCreateCancel}}function handleEnterAgent(node,onTmuxSessionSelect,spawn5=spawnAgent){if(node.wsAgentState!=="running"&&node.wsAgentState!=="spawning")spawn5(agentNameFromNode(node),onTmuxSessionSelect);else if(node.wsAgentState==="running"){let target=getSessionTarget(node);if(target)onTmuxSessionSelect(target.sessionName,target.windowIndex)}}function dispatchContextMenuAction(action,node,payload,deps){let name=node.label;if(action==="spawn-into"&&node.type==="agent"&&deps.openSpawnInto){deps.openSpawnInto(agentNameFromNode(node));return}if(handleAttachAction(action,node,deps.onTmuxSessionSelect))return;if(handleRetryAction(action,name,deps.onTmuxSessionSelect))return;if(handleGenieAction(action,name,payload))return;let tmuxServer=process.env.GENIE_TMUX_SERVER||"genie";if(handleRenameAction(action,node,tmuxServer,payload))return;if(handleAgentWindowActions(action,node,name,tmuxServer,deps.onNewAgentWindow))return;if(handleSessionNodeActions(action,node,tmuxServer,payload))return;if(handleWindowNodeActions(action,node,deps.sessionTree,tmuxServer,payload))return;handlePaneNodeActions(action,node,deps.sessionTree,tmuxServer,deps.onNewAgentWindow)}function handleAttachAction(action,node,onTmuxSessionSelect){if(action!=="attach")return!1;let target=getSessionTarget(node);if(target)onTmuxSessionSelect(target.sessionName,target.windowIndex);return!0}function handleRetryAction(action,name,onTmuxSessionSelect){if(action!=="retry")return!1;return(async()=>{try{let{reconcileStaleSpawns:reconcileStaleSpawns2}=await Promise.resolve().then(() => (init_agent_registry(),exports_agent_registry));await reconcileStaleSpawns2()}catch{}spawnAgent(name,onTmuxSessionSelect)})(),!0}function handleGenieAction(action,name,payload){if(action==="send"&&payload)return executeGenie(["agent","send",payload,"--to",name]),!0;if(action==="answer-text"&&payload)return executeGenie(["agent","answer",name,`text:${payload}`]),!0;let genieArgs={spawn:["spawn",name],"spawn-plan":["spawn",name,"--plan-mode"],stop:["agent","stop",name],kill:["agent","kill",name],log:["agent","log",name],show:["agent","show",name],read:["read",name],"answer-yes":["agent","answer",name,"yes"],"answer-no":["agent","answer",name,"no"]}[action];if(genieArgs)return executeGenie(genieArgs),!0;return!1}function handleRenameAction(action,node,tmuxServer,payload){if(action==="rename-session"&&payload){let sess=node.type==="agent"?node.data.sessionName||node.label:node.id.split(":").slice(1).join(":");return executeTmux3(["-L",tmuxServer,"rename-session","-t",sess,payload]),!0}if(action==="rename-window"&&payload){let idParts=node.id.split(":"),windowTarget=`${idParts[1]}:${idParts[2]}`;return executeTmux3(["-L",tmuxServer,"rename-window","-t",windowTarget,payload]),!0}if(action==="rename-pane"&&payload&&node.type==="pane"){let paneId=node.data.paneId;return executeTmux3(["-L",tmuxServer,"select-pane","-t",`${paneId}`,"-T",payload]),!0}return!1}function handleAgentWindowActions(action,node,name,tmuxServer,onNewAgentWindow){if(action==="agent-new-window"&&node.type==="agent"){if(onNewAgentWindow)onNewAgentWindow(agentNameFromNode(node));return!0}if(action==="new-empty-window"&&node.type==="agent"){let sessionName=node.data.sessionName||name;return executeTmux3(["-L",tmuxServer,"new-window","-a","-t",sessionName]),!0}return!1}function handleSessionNodeActions(action,node,tmuxServer,payload){if(node.type!=="session")return!1;let sess=node.id.split(":").slice(1).join(":");if(action==="kill-session")return executeTmux3(["-L",tmuxServer,"kill-session","-t",sess]),!0;if(action==="new-window")return executeTmux3(["-L",tmuxServer,"new-window","-a","-t",sess]),!0;if(action==="clone-session")return executeTmux3(["-L",tmuxServer,"new-session","-d","-s",`${sess}-clone`,"-t",sess]),!0;if(action==="spawn-in-session"&&payload)return executeGenie(["spawn",payload,"--session",sess]),!0;return!1}function handleWindowNodeActions(action,node,sessionTree,tmuxServer,payload){if(node.type!=="window")return!1;let idParts=node.id.split(":"),windowTarget=`${idParts[1]}:${idParts[2]}`;if(action==="kill-window")return executeTmux3(["-L",tmuxServer,"kill-window","-t",windowTarget]),!0;if(action==="window-new-agent"){let parentAgent=findParentAgent(sessionTree,node.id);if(parentAgent){let agentFullName=agentNameFromNode(parentAgent),suffix2=Date.now()%1e4,role=`${agentFullName}-${suffix2}`;executeGenie(["spawn",agentFullName,"--role",role,"--window",windowTarget])}return!0}if(action==="split-pane")return executeTmux3(["-L",tmuxServer,"split-window","-t",windowTarget]),!0;if(action==="spawn-in-window"&&payload)return executeGenie(["spawn",payload,"--session",idParts[1]]),!0;return!1}function handlePaneNodeActions(action,node,sessionTree,tmuxServer,onNewAgentWindow){if(node.type!=="pane")return!1;let paneId=node.data.paneId;if(action==="clone-agent"){let parentAgent=findParentAgent(sessionTree,node.id);if(parentAgent&&onNewAgentWindow)onNewAgentWindow(agentNameFromNode(parentAgent));return!0}if(action==="kill-pane")return executeTmux3(["-L",tmuxServer,"kill-pane","-t",`${paneId}`]),!0;if(action==="split-h")return executeTmux3(["-L",tmuxServer,"split-window","-h","-t",`${paneId}`]),!0;if(action==="split-v")return executeTmux3(["-L",tmuxServer,"split-window","-v","-t",`${paneId}`]),!0;return!1}function buildFooterHint(workspaceRoot){return`\u2191\u2193:nav \u2190\u2192:expand Enter:${workspaceRoot?"spawn/attach":"attach"} ^T:new${workspaceRoot?" ^N:team":""} R:retry .:menu`}function tryOpenTeamCreate(key,opts){if(!key.ctrl||key.name!=="n")return!1;if(!opts.workspaceRoot||opts.showTeamCreate||opts.contextMenuNodeId)return!1;return opts.handleOpenTeamCreate(),!0}function tryOpenContextMenu(flatNodes,selectedIndex,setContextMenuNodeId){let node=flatNodes[selectedIndex]?.node;if(node&&buildMenuItems(node).length>0)return setContextMenuNodeId(node.id),!0;return!1}function dispatchNavKey(key,handlers,agentAction){let n=key.name;if(n==="up"||n==="k"||n==="down"||n==="j")handlers.handleVerticalNav(n);else if(n==="right"||n==="l"||n==="left"||n==="h")handlers.handleExpandCollapse(n);else if(n==="enter"||n==="return")handlers.handleEnter();else if(n==="r")handlers.handleRetry();else if(key.ctrl&&n==="t")agentAction()}function handleKeyboardInput(key,opts){if(key.name==="."&&!opts.contextMenuNodeId){if(tryOpenContextMenu(opts.flatNodes,opts.selectedIndex,opts.setContextMenuNodeId))return}if(opts.contextMenuNodeId)return;dispatchNavKey(key,opts,()=>{let node=opts.flatNodes[opts.selectedIndex]?.node;if(node?.type==="agent"&&node.wsAgentState==="running"&&opts.onNewAgentWindow)opts.onNewAgentWindow(agentNameFromNode(node))})}function agentNameFromNode(node){return node.id.replace(/^agent:/,"")}function spawnAgent(name,onTmuxSessionSelect){try{let{spawn:spawn5}=__require("child_process"),{join:join94,resolve:resolve23}=__require("path"),{existsSync:existsSync77,mkdirSync:mkdirSync35,openSync:openSync6}=__require("fs"),{homedir:homedir52}=__require("os"),bunPath=process.execPath||"bun",genieBin=process.argv[1],wsRoot=process.env.GENIE_TUI_WORKSPACE,sessionName=name.replace(/\//g,"-"),cwd;if(wsRoot){let parentName=name.includes("/")?name.slice(0,name.indexOf("/")):name,agentDir=resolve23(join94(wsRoot,"agents",parentName));if(existsSync77(agentDir))cwd=agentDir}let{GENIE_TUI_PANE:_a,GENIE_TUI_RIGHT:_b,GENIE_TUI_WORKSPACE:_c,GENIE_TUI_TEAM:_d,GENIE_IS_DAEMON:_e2,...cleanEnv}=process.env,logDir=join94(homedir52(),".genie","logs","tui-spawn");try{mkdirSync35(logDir,{recursive:!0})}catch{}let logPath=join94(logDir,`${sessionName}-${Date.now()}.log`),logFd;try{logFd=openSync6(logPath,"a")}catch{logFd=void 0}let spawnOpts=logFd!==void 0?{detached:!0,stdio:["ignore",logFd,logFd],cwd,env:cleanEnv}:{detached:!0,stdio:"ignore",cwd,env:cleanEnv},child=genieBin&&genieBin!=="genie"?spawn5(bunPath,[genieBin,"spawn",name,"--session",sessionName,"--new-window"],spawnOpts):spawn5("genie",["spawn",name,"--session",sessionName,"--new-window"],spawnOpts);if(child.on("exit",(code)=>{if(code&&code!==0)console.error(`TUI: spawn "${name}" exited ${code}. See ${logPath}`)}),child.on("error",(err)=>{console.error(`TUI: spawn "${name}" error: ${err.message}. See ${logPath}`)}),child.unref(),onTmuxSessionSelect)attachSpawnedAgentWhenReady(sessionName,onTmuxSessionSelect)}catch(err){console.error(`TUI: spawn failed for ${name}:`,err instanceof Error?err.message:err)}}function attachSpawnedAgentWhenReady(sessionName,onTmuxSessionSelect,attempt=0){(async()=>{try{let session=(await collectDiagnostics()).sessions.find((candidate)=>candidate.name===sessionName);if(session){let windowIndex=resolvePreferredWindowIndex(session,sessionName);if(windowIndex!==void 0){onTmuxSessionSelect(sessionName,windowIndex);return}}}catch{}if(attempt>=40){onTmuxSessionSelect(sessionName);return}setTimeout(()=>{attachSpawnedAgentWhenReady(sessionName,onTmuxSessionSelect,attempt+1)},250)})()}function executeTmux3(args){try{let{spawn:spawn5}=__require("child_process");spawn5("tmux",args,{detached:!0,stdio:"ignore"}).unref()}catch{}}function executeGenie(args){try{let{spawn:spawn5}=__require("child_process"),bunPath=process.execPath||"bun",genieBin=process.argv[1];(genieBin&&genieBin!=="genie"?spawn5(bunPath,[genieBin,...args],{detached:!0,stdio:"ignore"}):spawn5("genie",args,{detached:!0,stdio:"ignore"})).unref()}catch{}}function executeGenieAwaited(args){return new Promise((resolve23,reject)=>{try{let{spawn:spawn5}=__require("child_process"),bunPath=process.execPath||"bun",genieBin=process.argv[1],child=genieBin&&genieBin!=="genie"?spawn5(bunPath,[genieBin,...args],{stdio:"ignore"}):spawn5("genie",args,{stdio:"ignore"});child.on("exit",(code)=>resolve23(code)),child.on("error",reject)}catch(err){reject(err instanceof Error?err:Error(String(err)))}})}function resolveSpawnHereTarget(node){if(node.type==="session"){let sess=node.id.split(":").slice(1).join(":");if(sess.length===0)return null;return{session:sess}}if(node.type==="window"){let idParts=node.id.split(":");if(idParts.length<3)return null;return{session:idParts[1],window:`${idParts[1]}:${idParts[2]}`}}return null}function executeSpawnIntent(intent){try{let{argv}=buildSpawnInvocation(intent);executeGenie(argv)}catch(err){console.error("TUI: spawn-intent execution failed:",err instanceof Error?err.message:err)}}async function runTeamCreation(result2,workspaceRoot){let argv;try{({argv}=buildSpawnInvocation({kind:"create-team",name:result2.teamName,repo:workspaceRoot}))}catch(err){console.error("TUI: team create intent build failed:",err instanceof Error?err.message:err);return}let createExit=null;try{createExit=await executeGenieAwaited(argv)}catch(err){console.error("TUI: team create spawn failed:",err instanceof Error?err.message:err);return}if(createExit!==0){console.error(`TUI: team create exited ${createExit} \u2014 skipping member hires for "${result2.teamName}"`);return}for(let member of result2.members)try{let code=await executeGenieAwaited(["team","hire",member,"--team",result2.teamName]);if(code!==0)console.error(`TUI: team hire "${member}" exited ${code} \u2014 continuing with remaining members`)}catch(err){console.error(`TUI: team hire "${member}" failed:`,err instanceof Error?err.message:err)}}function findParentAgent(tree,targetId){for(let node of tree){if(node.type==="agent"&&containsNode(node,targetId))return node;let found=findParentAgent(node.children,targetId);if(found)return found}return null}function containsNode(node,targetId){if(node.id===targetId)return!0;return node.children.some((c)=>containsNode(c,targetId))}function mergeExpandedState(oldTree,newTree){if(oldTree.length===0)return newTree;let oldState=new Map;function collect(nodes){for(let n of nodes)oldState.set(n.id,{expanded:n.expanded,childCount:n.children.length}),collect(n.children)}collect(oldTree);function apply(nodes){return nodes.map((n)=>({...n,expanded:(()=>{let previous=oldState.get(n.id);if(!previous)return n.expanded;if(previous.childCount===0&&n.children.length>0)return n.expanded;return previous.expanded})(),children:apply(n.children)}))}return apply(newTree)}var import_react32;var init_Nav=__esm(async()=>{init_spawn_invocation();init_workspace();init_diagnostics();init_initial_agent();init_session_tree();init_theme2();init_SystemStats();init_TreeNode();init_jsx_dev_runtime();await __promiseAll([init_react2(),init_AgentPicker(),init_ContextMenu(),init_SpawnTargetPicker(),init_TeamCreate()]);import_react32=__toESM(require_react_development(),1)});function QuitDialog({onConfirm,onCancel}){return useKeyboard((key)=>{if(key.name==="enter"||key.name==="return"||key.name==="y")onConfirm();else if(key.name==="escape"||key.name==="n")onCancel()}),import_jsx_dev_runtime2.jsxDEV("box",{position:"absolute",width:"100%",height:"100%",justifyContent:"center",alignItems:"center",backgroundColor:palette.bgOverlay,children:import_jsx_dev_runtime2.jsxDEV("box",{border:!0,borderColor:palette.borderActive,backgroundColor:palette.bgRaised,paddingX:3,paddingY:1,flexDirection:"column",alignItems:"center",gap:1,children:[import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.accent,children:"Close TUI?"},void 0,!1,void 0,this)},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.text,children:"Enter"},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:" to close "},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:" | "},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.text,children:" Esc"},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:" to cancel"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:"Daemon keeps running. `genie serve stop` to shut down."},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)}var init_QuitDialog=__esm(async()=>{init_theme2();init_jsx_dev_runtime();await init_react2()});import{execSync as execSync18}from"child_process";function App({rightPane,workspaceRoot,initialAgent}){let renderer=useRenderer(),[showQuit,setShowQuit]=import_react36.useState(!1),[showHelp,setShowHelp]=import_react36.useState(!1),[activeSession,setActiveSession]=import_react36.useState(null);import_react36.useEffect(()=>{let title=activeSession?`${BASE_TERMINAL_TITLE} \u2014 ${activeSession}`:BASE_TERMINAL_TITLE;try{renderer.setTerminalTitle(title)}catch{}},[renderer,activeSession]);let handleQuit=import_react36.useCallback(()=>{try{execSync18("tmux -L genie-tui kill-server",{stdio:"ignore"})}catch{}},[]);useBindings(()=>({commands:[{name:"app.quit",title:"Close TUI",desc:"Close TUI window (daemon keeps running \u2014 use `genie serve stop` to shut down)",category:"app",run(){if(showQuit)handleQuit();else setShowQuit(!0)}},{name:"app.help.toggle",title:"Toggle help overlay",desc:"Show/hide the keyboard shortcut overlay",category:"app",run(){setShowHelp((prev)=>!prev)}},{name:"app.console.toggle",title:"Toggle console overlay",desc:"Show/hide the OpenTUI console (logs)",category:"app",run(){renderer.console.toggle()}}],bindings:[{key:"ctrl+q",cmd:"app.quit"},{key:"f1",cmd:"app.help.toggle"},{key:"`",cmd:"app.console.toggle"}]}),[renderer,showQuit,handleQuit]);let handleTmuxSessionSelect=import_react36.useCallback((sessionName,windowIndex)=>{if(setActiveSession(sessionName),!rightPane)return;attachProjectWindow(rightPane,sessionName,windowIndex)},[rightPane]);return import_jsx_dev_runtime2.jsxDEV("box",{width:"100%",height:"100%",children:[import_jsx_dev_runtime2.jsxDEV(Nav,{onTmuxSessionSelect:handleTmuxSessionSelect,onNewAgentWindow:newAgentWindow,workspaceRoot,initialAgent,keyboardDisabled:showQuit||showHelp},void 0,!1,void 0,this),showHelp?import_jsx_dev_runtime2.jsxDEV(HelpOverlay,{onClose:()=>setShowHelp(!1)},void 0,!1,void 0,this):null,showQuit?import_jsx_dev_runtime2.jsxDEV(QuitDialog,{onConfirm:handleQuit,onCancel:()=>setShowQuit(!1)},void 0,!1,void 0,this):null]},void 0,!0,void 0,this)}var import_react36,BASE_TERMINAL_TITLE="genie tui";var init_app=__esm(async()=>{init_react();init_tmux2();init_jsx_dev_runtime();await __promiseAll([init_react2(),init_HelpOverlay(),init_Nav(),init_QuitDialog()]);import_react36=__toESM(require_react_development(),1)});function normalizeBindingTokenName(token){let normalized=token.trim().toLowerCase();if(!normalized)throw Error("Invalid keymap token: token cannot be empty");return normalized}function normalizeKeyName(name){let normalized=name.trim().toLowerCase();if(!normalized)throw Error("Invalid key name: key name cannot be empty");return normalized}function normalizeKeyStroke(input){return{name:normalizeKeyName(input.name),ctrl:input.ctrl??!1,shift:input.shift??!1,meta:input.meta??!1,super:input.super??!1,hyper:input.hyper||void 0}}function cloneKeyStroke(stroke){return{name:stroke.name,ctrl:stroke.ctrl,shift:stroke.shift,meta:stroke.meta,super:stroke.super,hyper:stroke.hyper||void 0}}function createKeySequencePart(input,options){let stroke=cloneKeyStroke(normalizeKeyStroke(input));return{stroke,display:options?.display??stringifyCanonicalStroke(stroke),match:options?.match??createKeyMatch(stroke),tokenName:options?.tokenName?normalizeBindingTokenName(options.tokenName):void 0}}function cloneKeySequencePart(part){return{stroke:cloneKeyStroke(part.stroke),display:part.display,match:part.match,tokenName:part.tokenName,patternName:part.patternName,payloadKey:part.payloadKey}}function cloneKeySequence(parts){return parts.map((part)=>cloneKeySequencePart(part))}function resolveKeyMatch(input){if("match"in input)return input.match;if("stroke"in input)return createKeyMatch(input.stroke);return createKeyMatch(input)}function createKeyMatch(input){return`key:${buildKeyMatchId(normalizeKeyStroke(input))}`}function createTextKeyMatch(id){let normalized=id.trim();if(!normalized)throw Error("Invalid keymap match id: id cannot be empty");return`text:${normalized}`}function stringifyKeyStroke(input,options){if("stroke"in input){if(options?.preferDisplay&&input.display)return input.display;return stringifyCanonicalStroke(input.stroke)}return stringifyCanonicalStroke(normalizeKeyStroke(input))}function stringifyKeySequence(input,options){return input.map((part)=>stringifyKeyStroke(part,options)).join(options?.separator??"")}function stringifyCanonicalStroke(stroke){let parts=[];if(stroke.ctrl)parts.push("ctrl");if(stroke.shift)parts.push("shift");if(stroke.meta)parts.push("meta");if(stroke.super)parts.push("super");if(stroke.hyper)parts.push("hyper");return parts.push(stroke.name==="return"?"enter":stroke.name),parts.join("+")}function buildKeyMatchId(stroke){return`${stroke.name}:${stroke.ctrl?1:0}:${stroke.shift?1:0}:${stroke.meta?1:0}:${stroke.super?1:0}:${stroke.hyper?1:0}`}function getFocusedTargetIfAvailable(host){if(host.isDestroyed)return null;return host.getFocusedTarget()}function forEachActivationTarget(host,focused,visit){let current=focused??host.rootTarget,isFocusedTarget=focused!==null;while(current){if(visit(current,isFocusedTarget)===!1)return;current=host.getParentTarget(current),isFocusedTarget=!1}}function getActivationPath(host,focused){let path6=new Set;return forEachActivationTarget(host,focused,(current)=>{path6.add(current)}),path6}function getActiveLayersForFocused(layers,host,focused){let activeLayers=[],activationPath=getActivationPath(host,focused),sortedLayers=Array.isArray(layers)?layers:getSortedLayers(layers);for(let layer of sortedLayers)if(isLayerActiveForFocused(host,layer,focused,activationPath))activeLayers.push(layer);return activeLayers}function getSortedLayers(layers){return[...layers].sort((left,right)=>{return right.priority-left.priority||right.order-left.order})}function isLayerActiveForFocused(host,layer,focused,activationPath=getActivationPath(host,focused)){let target=layer.target;if(!target)return!0;if(host.isTargetDestroyed(target))return!1;if(layer.targetMode==="focus")return target===focused;return activationPath.has(target)}function patternCaptureCount(capture2){let part=capture2.binding.sequence[capture2.index];if(!part?.patternName)return 0;let captured=capture2.patterns?.at(-1);return captured?.name===part.patternName?captured.values.length:0}function captureHasMinimum(capture2,patterns2,missingPatternResult=!0){let part=capture2.binding.sequence[capture2.index];if(!part?.patternName)return!0;let pattern=patterns2.get(part.patternName);return pattern?patternCaptureCount(capture2)>=pattern.min:missingPatternResult}function captureHasContinuations(capture2,patterns2,missingPatternMinimum=!0){let part=capture2.binding.sequence[capture2.index];if(part?.patternName){let pattern=patterns2.get(part.patternName);if(pattern&&patternCaptureCount(capture2)<pattern.max)return!0}return captureHasMinimum(capture2,patterns2,missingPatternMinimum)&&capture2.index+1<capture2.binding.sequence.length}function captureIsExact(capture2,patterns2){return capture2.index===capture2.binding.sequence.length-1&&captureHasMinimum(capture2,patterns2,!1)}function createSequenceNode(parent,stroke,match,pattern){return{parent,depth:parent?parent.depth+1:0,stroke,match,pattern,children:new Map,patternChildren:[],bindings:[],reachableBindings:[]}}function buildSequenceTree(bindings,patterns2){let root=createSequenceNode(null,null,null);for(let binding of bindings){if(binding.event!=="press")continue;let node=root;for(let part of binding.sequence){let child;if(part.patternName){let pattern=patterns2.get(part.patternName);if(child=node.patternChildren.find((candidate)=>candidate.pattern?.name===part.patternName),!child)child=createSequenceNode(node,part.stroke,part.match,pattern),node.patternChildren.push(child)}else if(child=node.children.get(part.match),!child)child=createSequenceNode(node,part.stroke,part.match),node.children.set(part.match,child);child.reachableBindings.push(binding),node=child}node.bindings.push(binding)}return root}function activeOptionsForCaptures(captures,patterns2){let options=[];for(let capture2 of captures){if(!captureHasMinimum(capture2,patterns2))continue;let index=capture2.index+1,part=capture2.binding.sequence[index];if(part)options.push({part,binding:capture2.binding,index,exact:index===capture2.binding.sequence.length-1,continues:index<capture2.binding.sequence.length-1})}return options}function appendPatternCapture(capture2,index,part,value){let patternName=part.patternName;if(!patternName)return{...capture2,index};let patterns2=[...capture2.patterns??[]],last=patterns2.at(-1);if(last?.name===patternName)patterns2[patterns2.length-1]={...last,values:[...last.values,value],parts:[...last.parts,part]};else patterns2.push({name:patternName,payloadKey:part.payloadKey??patternName,values:[value],parts:[part]});return{layer:capture2.layer,binding:capture2.binding,index,parts:[...capture2.parts,part],patterns:patterns2}}function capturePriority(capture2,matchKeys){let part=capture2.parts.at(-1);if(!part||part.patternName)return matchKeys.length;let index=matchKeys.indexOf(part.match);return index===-1?matchKeys.length:index}function advanceSequenceBinding(layer,binding,index,parts,patterns2,matchKeys,event,matchPattern,createPatternPart){let part=binding.sequence[index];if(!part)return;if(part.patternName){let patternMatch=matchPattern(part.patternName,event);if(!patternMatch)return;let eventPart=createPatternPart(event,part.patternName,patternMatch);return appendPatternCapture({layer,binding,index,parts,patterns:patterns2},index,eventPart,patternMatch.value??event.name)}if(!matchKeys.includes(part.match))return;return{layer,binding,index,parts:[...parts,part],patterns:patterns2}}function advanceSequenceCapture(capture2,matchKeys,event,patterns2,matchPattern,createPatternPart){let currentPart=capture2.binding.sequence[capture2.index];if(currentPart?.patternName){let pattern=patterns2.get(currentPart.patternName);if(pattern&&patternCaptureCount(capture2)<pattern.max){let patternMatch=matchPattern(pattern.name,event);if(patternMatch){let part=createPatternPart(event,pattern.name,patternMatch);return appendPatternCapture(capture2,capture2.index,part,patternMatch.value??event.name)}}if(!captureHasMinimum(capture2,patterns2,!1))return;return advanceSequenceBinding(capture2.layer,capture2.binding,capture2.index+1,capture2.parts,capture2.patterns,matchKeys,event,matchPattern,createPatternPart)}return advanceSequenceBinding(capture2.layer,capture2.binding,capture2.index+1,capture2.parts,capture2.patterns,matchKeys,event,matchPattern,createPatternPart)}function collectRootSequenceCaptures(layer,matchKeys,event,matchPattern,createPatternPart){let captures=[],bestPriority=Number.POSITIVE_INFINITY;for(let binding of layer.bindings){if(binding.event!=="press")continue;let capture2=advanceSequenceBinding(layer,binding,0,[],void 0,matchKeys,event,matchPattern,createPatternPart);if(!capture2)continue;let priority=capturePriority(capture2,matchKeys);if(priority<bestPriority)bestPriority=priority,captures.length=0;if(priority===bestPriority)captures.push(capture2)}return captures}var KEYMAP_EXTENSION_CONTEXT;var init_index_frk6sdcd=__esm(()=>{KEYMAP_EXTENSION_CONTEXT=Symbol("keymap-extension-context")});function createRuntimeEmitter(onError){let listeners2=Object.create(null),off=(name,listener)=>{let current=listeners2[name];if(!current)return;let next=current.filter((candidate)=>candidate!==listener);if(next.length===0)delete listeners2[name];else if(next.length!==current.length)listeners2[name]=next};return{hook(name,listener){return listeners2[name]=[...listeners2[name]??[],listener],()=>off(name,listener)},has(name){return(listeners2[name]?.length??0)>0},emit(name,...args){let current=listeners2[name];if(!current)return;for(let listener of current)try{if(args.length===0)listener();else listener(args[0])}catch(error2){onError(name,error2)}}}}function createItems(){let items=[];return{get:()=>items,set:(next)=>{items=next},remove(value){items=items.filter((candidate)=>candidate!==value)},has:()=>items.length>0,clear:()=>{items=[]}}}function createRuntimeOrderedRegistry(){let items=createItems();return{append(value){return items.set([...items.get(),value]),()=>items.remove(value)},prepend(value){return items.set([value,...items.get()]),()=>items.remove(value)},values:items.get,has:items.has,clear:items.clear}}function createRuntimePriorityRegistry(){let items=createItems(),order=0;return{register(listener,options){let registered={...options,listener,order:order++};return items.set([...items.get(),registered].sort((left,right)=>{return right.priority-left.priority||left.order-right.order})),()=>items.remove(registered)},entries:items.get,has:items.has,clear:items.clear}}function isKeyLike(value){return typeof value==="string"||!!value&&typeof value==="object"&&!Array.isArray(value)}function validateBindings(bindings){if(!Array.isArray(bindings))return{ok:!1,reason:"Invalid keymap bindings: expected an array of binding objects"};for(let[index,binding]of bindings.entries()){if(!binding||typeof binding!=="object"||Array.isArray(binding))return{ok:!1,reason:`Invalid keymap binding at index ${index}: expected a binding object`};if(!isKeyLike(binding.key))return{ok:!1,reason:`Invalid keymap binding at index ${index}: expected "key" to be a string or keystroke object`}}return{ok:!0}}function snapshotBindings(bindings){let validation=validateBindings(bindings);if(!validation.ok)throw Error(validation.reason);return bindings.map((binding)=>({...binding,key:typeof binding.key==="string"?binding.key:{...binding.key}}))}function snapshotParsedBinding(binding){return{...binding,sequence:cloneKeySequence(binding.sequence)}}function createLayerDiagnostics(notify,commands){let analyzers=createRuntimeOrderedRegistry();return{prependLayerAnalyzer(analyzer){return analyzers.prepend(analyzer)},appendLayerAnalyzer(analyzer){return analyzers.append(analyzer)},clearLayerAnalyzers(){analyzers.clear()},analyzeLayer(options){let registeredAnalyzers=analyzers.values();if(registeredAnalyzers.length===0)return;let bindings=buildLayerBindingAnalyses(options.bindings),ctx={target:options.target,order:options.order,sourceBindings:options.sourceBindings,bindings,hasTokenBindings:options.hasTokenBindings,checkCommandResolution(command){return commands.getCommandResolutionStatus(command,options.commands)},warn(code,warning,message){notify.emitWarning(code,warning,message)},warnOnce(key,code,warning,message){notify.warnOnce(key,code,warning,message)},error(code,error2,message){notify.emitError(code,error2,message)}};for(let analyzer of registeredAnalyzers)try{analyzer(ctx)}catch(error2){notify.emitError("layer-analyzer-error",error2,"[Keymap] Error in layer analyzer:")}}}}function buildLayerBindingAnalyses(bindings){return bindings.map((binding)=>({sequence:cloneKeySequence(binding.sequence),command:binding.command,attrs:binding.attrs,event:binding.event,preventDefault:binding.preventDefault,fallthrough:binding.fallthrough,parsedBinding:snapshotParsedBinding(binding.parsedBinding),sourceTarget:binding.sourceTarget,sourceLayerOrder:binding.sourceLayerOrder,bindingIndex:binding.bindingIndex,hasCommandAtSequence:bindings.some((candidate)=>{return candidate.event==="press"&&candidate.command!==void 0&&sameSequence(candidate,binding)}),hasContinuations:bindings.some((candidate)=>{return candidate.event==="press"&&isPrefix(binding,candidate)})}))}function sameSequence(left,right){return left.sequence.length===right.sequence.length&&left.sequence.every((part,index)=>part.match===right.sequence[index]?.match)}function isPrefix(left,right){return left.sequence.length<right.sequence.length&&left.sequence.every((part,index)=>part.match===right.sequence[index]?.match)}function createActiveKeysCache(){return{version:-1,notifyVersion:-1,focused:void 0,value:[],targets:new WeakMap}}function createActiveKeysCaches(){return{plain:createActiveKeysCache(),bindings:createActiveKeysCache(),metadata:createActiveKeysCache(),bindingsAndMetadata:createActiveKeysCache()}}function getActiveKeysCache(caches,options){if(options===void 0)return caches.plain;let includeBindings=options.includeBindings===!0,includeMetadata=options.includeMetadata===!0;return includeBindings?includeMetadata?caches.bindingsAndMetadata:caches.bindings:includeMetadata?caches.metadata:caches.plain}function getFocusedActiveKeysCache(cache,cacheVersion,focused){let cached=focused?cache.targets.get(focused):cache.nullTarget;return cached?.version===cacheVersion?cached:void 0}function setFocusedActiveKeysCache(cache,cacheVersion,focused,value){let cached={version:cacheVersion,value};if(focused)cache.targets.set(focused,cached);else cache.nullTarget=cached}function isSamePendingSequence(current,next){if(current===next)return!0;if(!current||!next)return!1;if(current.captures.length!==next.captures.length)return!1;for(let index=0;index<current.captures.length;index+=1){let left=current.captures[index],right=next.captures[index];if(!left||!right||left.layer!==right.layer||left.binding!==right.binding||left.index!==right.index||left.parts.length!==right.parts.length)return!1;for(let partIndex=0;partIndex<left.parts.length;partIndex+=1)if(left.parts[partIndex]?.match!==right.parts[partIndex]?.match)return!1;let leftPatterns=left.patterns??[],rightPatterns=right.patterns??[];if(leftPatterns.length!==rightPatterns.length)return!1;for(let patternIndex=0;patternIndex<leftPatterns.length;patternIndex+=1){let leftPattern=leftPatterns[patternIndex],rightPattern=rightPatterns[patternIndex];if(!leftPattern||!rightPattern||leftPattern.name!==rightPattern.name)return!1;if(leftPattern.values.length!==rightPattern.values.length)return!1;for(let valueIndex=0;valueIndex<leftPattern.values.length;valueIndex+=1)if(!Object.is(leftPattern.values[valueIndex],rightPattern.values[valueIndex]))return!1}}return!0}function popCapture(capture2){let lastPart=capture2.parts.at(-1);if(!lastPart||capture2.parts.length<=1)return;let index=capture2.index-1,patterns2=capture2.patterns;if(lastPart.patternName){let lastPattern=patterns2?.at(-1);if(lastPattern?.name===lastPart.patternName)if(lastPattern.values.length>1)index=capture2.index,patterns2=[...(patterns2??[]).slice(0,-1),{...lastPattern,values:lastPattern.values.slice(0,-1),parts:lastPattern.parts.slice(0,-1)}];else patterns2=(patterns2??[]).slice(0,-1)}return{layer:capture2.layer,binding:capture2.binding,index,parts:capture2.parts.slice(0,-1),patterns:patterns2}}function collectSequencePartsFromPending(pending){let firstCapture=pending.captures[0];if(!firstCapture||firstCapture.parts.length===0)return[];let parts=[];for(let index=0;index<firstCapture.parts.length;index+=1){let firstPart=firstCapture.parts[index];if(!firstPart)continue;let display,tokenName,hasDisplayConflict=!1,hasTokenConflict=!1;for(let capture2 of pending.captures){let part=capture2.parts[index];if(!part)continue;if(display===void 0){display=part.display,tokenName=part.tokenName;continue}if(!hasDisplayConflict&&display!==part.display)hasDisplayConflict=!0;if(!hasTokenConflict&&tokenName!==part.tokenName)hasTokenConflict=!0}if(display===void 0||hasDisplayConflict)display=stringifyKeyStroke(firstPart.stroke);if(hasTokenConflict)tokenName=void 0;parts.push(createKeySequencePart(firstPart.stroke,{display,match:firstPart.match,tokenName}))}return parts}function getLiveHost(host){if(host.isDestroyed)throw Error("Cannot use a keymap after its host was destroyed");return host}function createActivationService(state,host,hooks,notify,conditions,catalog,options={}){let activeKeysCaches=createActiveKeysCaches(),pendingSequenceCacheVersion=-1,pendingSequenceCache=[],getFocusedTarget=()=>{return getLiveHost(host).getFocusedTarget()},getFocusedTargetIfAvailable2=()=>{return getFocusedTargetIfAvailable(host)},setPendingSequence=(next)=>{let previous=state.pending;if(isSamePendingSequence(previous,next))return;state.pending=next,options.onPendingSequenceChanged?.(previous,next),notifyPendingSequenceChange(),notify.queueStateChange()},ensureValidPendingSequence=()=>{let pending=state.pending;if(!pending)return;let focused=getFocusedTarget(),activeView=catalog.getActiveCommandView(focused),captures=pending.captures.filter((capture2)=>{return state.layers.has(capture2.layer)&&isActiveLayerForFocused(capture2.layer,focused)&&conditions.matchesConditions(capture2.layer)&&bindingMatchesRuntimeState(capture2.binding,focused,activeView)&&captureHasContinuations(capture2,state.patterns)});if(captures.length===0){setPendingSequence(null);return}if(captures.length!==pending.captures.length)setPendingSequence({captures});return state.pending??void 0},revalidatePendingSequenceIfNeeded=()=>{if(host.isDestroyed||!state.pending)return;ensureValidPendingSequence()},hasPendingSequenceState=()=>{return!host.isDestroyed&&state.pending!==null},getPendingSequence=()=>{if(pendingSequenceCacheVersion===state.cacheVersion)return pendingSequenceCache;let pending=ensureValidPendingSequence(),sequence=pending?collectSequencePartsFromPending(pending):[];if(!pending||allRegisteredLayersCanCacheActiveKeys())pendingSequenceCacheVersion=state.cacheVersion,pendingSequenceCache=sequence;return sequence},popPendingSequence=()=>{let pending=ensureValidPendingSequence();if(!pending)return!1;let firstCapture=pending.captures[0];if(!firstCapture||firstCapture.parts.length<=1)return setPendingSequence(null),!0;let nextCaptures=[];for(let capture2 of pending.captures){let nextCapture=popCapture(capture2);if(!nextCapture)continue;nextCaptures.push(nextCapture)}if(nextCaptures.length===0)return setPendingSequence(null),!0;return setPendingSequence({captures:nextCaptures}),!0},getActiveKeys=(options2)=>{let includeBindings=options2?.includeBindings===!0,includeMetadata=options2?.includeMetadata===!0,cache=getActiveKeysCache(activeKeysCaches,options2);if(cache.notifyVersion===state.derivedVersion)return cache.value;return collectActiveKeysForCache(cache,includeBindings,includeMetadata)},collectActiveKeysForCache=(cache,includeBindings,includeMetadata)=>{if(host.isDestroyed)getLiveHost(host);let focused=getFocusedTarget(),cached=getFocusedActiveKeysCache(cache,state.cacheVersion,focused);if(cached)return cache.notifyVersion=state.derivedVersion,cache.version=state.cacheVersion,cache.focused=focused,cache.value=cached.value,cached.value;let activeView=catalog.getActiveCommandView(focused),pending=ensureValidPendingSequence(),activeLayers=pending?[]:getActiveLayers(focused),activeKeys=pending?collectActiveKeysFromPending(pending.captures,includeBindings,includeMetadata,focused,activeView):collectActiveKeysAtRoot(activeLayers,includeBindings,includeMetadata,focused,activeView);if(pending?allRegisteredLayersCanCacheActiveKeys():activeLayersCanCacheActiveKeys(activeLayers))cache.version=state.cacheVersion,cache.notifyVersion=state.derivedVersion,cache.focused=focused,cache.value=activeKeys,setFocusedActiveKeysCache(cache,state.cacheVersion,focused,activeKeys);return activeKeys},getActiveKeysForCaptures=(captures,options2)=>{let includeBindings=options2?.includeBindings===!0,includeMetadata=options2?.includeMetadata===!0,focused=getFocusedTarget(),activeView=catalog.getActiveCommandView(focused);return collectActiveKeysFromPending(captures,includeBindings,includeMetadata,focused,activeView)},getActiveKeysForFocused=(focused,options2)=>{let includeBindings=options2?.includeBindings===!0,includeMetadata=options2?.includeMetadata===!0,currentFocused=getFocusedTargetIfAvailable2(),pending=focused===currentFocused?ensureValidPendingSequence():void 0,activeView=catalog.getActiveCommandView(focused);if(pending)return collectActiveKeysFromPending(pending.captures,includeBindings,includeMetadata,focused,activeView);return collectActiveKeysAtRoot(getActiveLayers(focused),includeBindings,includeMetadata,focused,activeView)},getActiveLayers=(focused)=>{if(state.activeLayersCacheVersion===state.cacheVersion&&state.activeLayersCacheFocused===focused)return state.activeLayersCache;return state.activeLayersCacheVersion=state.cacheVersion,state.activeLayersCacheFocused=focused,state.activeLayersCache=getActiveLayersForFocused(state.sortedLayers,host,focused),state.activeLayersCache},isActiveLayerForFocused=(layer,focused)=>{return isLayerActiveForFocused(host,layer,focused)},activeLayersCanCacheActiveKeys=(activeLayers)=>{return!state.commandResolvers.has()&&state.activeKeyCacheBlockers===0},allRegisteredLayersCanCacheActiveKeys=()=>{return!state.commandResolvers.has()&&state.activeKeyCacheBlockers===0},collectMatchingBindings=(bindings,focused,activeView)=>{let matches=[];for(let binding of bindings)if(conditions.matchesConditions(binding)&&catalog.isBindingVisible(binding,focused,activeView))matches.push(binding);return matches},bindingMatchesRuntimeState=(binding,focused,activeView)=>{return conditions.matchesConditions(binding)&&catalog.isBindingVisible(binding,focused,activeView)},getPartPresentation=(bindings,partIndex)=>{let display,tokenName,hasDisplayConflict=!1,hasTokenConflict=!1;for(let binding of bindings){let part=binding.sequence[partIndex];if(!part)continue;if(display===void 0){display=part.display,tokenName=part.tokenName;continue}if(!hasDisplayConflict&&display!==part.display)hasDisplayConflict=!0;if(!hasTokenConflict&&tokenName!==part.tokenName)hasTokenConflict=!0}if(display===void 0||hasDisplayConflict){let stroke=bindings[0]?.sequence[partIndex]?.stroke;display=stroke?stringifyKeyStroke(stroke):""}if(hasTokenConflict)tokenName=void 0;return{display,tokenName}},toActiveBinding=(binding,focused,activeView)=>{return{sequence:binding.sequence,command:binding.command,commandAttrs:catalog.getBindingCommandAttrs(binding,focused,activeView),attrs:binding.attrs,event:binding.event,preventDefault:binding.preventDefault,fallthrough:binding.fallthrough}},collectActiveBindings=(bindings,focused,activeView)=>{return bindings.map((binding)=>toActiveBinding(binding,focused,activeView))},collectActiveKeysAtRoot=(activeLayers,includeBindings,includeMetadata,focused,activeView)=>{let activeKeys=new Map,stopped=new Set;for(let layer of activeLayers){if(layer.root.children.size===0&&layer.root.patternChildren.length===0||!conditions.matchesConditions(layer))continue;collectActiveKeyNodes(layer.root.children.values(),activeKeys,stopped,includeBindings,focused,activeView),collectActiveKeyNodes(layer.root.patternChildren,activeKeys,stopped,includeBindings,focused,activeView)}return materializeActiveKeys(activeKeys,includeBindings,includeMetadata,focused,activeView)},collectActiveKeyNodes=(nodes,activeKeys,stopped,includeBindings,focused,activeView)=>{for(let node of nodes){let bindingKey=node.match;if(!bindingKey||stopped.has(bindingKey)||!node.stroke)continue;let selection=selectActiveKeyNode(node,includeBindings,focused,activeView);if(!selection)continue;let existing=activeKeys.get(bindingKey);if(!existing)activeKeys.set(bindingKey,createActiveKeyState(node.stroke,selection,includeBindings));else updateActiveKeyState(existing,selection,includeBindings);if(selection.stop)stopped.add(bindingKey)}},selectActiveKeyNode=(node,includeBindings,focused,activeView)=>{if(!(node.children.size>0||node.patternChildren.length>0)){let selected2=selectActiveBindings(nodeExactBindingsNeedPrefilter(node)?collectMatchingBindings(node.bindings,focused,activeView):node.bindings,focused,activeView);if(!selected2)return;let presentation2=getPartPresentation(selected2.bindings,node.depth-1);return{display:presentation2.display,tokenName:presentation2.tokenName,continues:!1,firstBinding:selected2.bindings[0],commandBinding:selected2.commandBinding,bindings:includeBindings?[...selected2.bindings]:void 0,stop:selected2.stop}}let reachableBindings=collectMatchingBindings(node.reachableBindings,focused,activeView);if(reachableBindings.length===0)return;let selected=selectActiveBindings(node.bindings,focused,activeView),presentation=getPartPresentation(reachableBindings,node.depth-1);return{display:presentation.display,tokenName:presentation.tokenName,continues:!0,firstBinding:selected?.bindings[0],commandBinding:selected?.commandBinding,bindings:includeBindings&&selected?[...selected.bindings]:void 0,stop:!0}},nodeExactBindingsNeedPrefilter=(node)=>{if(state.commandResolvers.has())return!0;for(let binding of node.bindings)if(binding.matchers.length>0)return!0;return!1},collectActiveKeysFromPending=(captures,includeBindings,includeMetadata,focused,activeView)=>{let activeKeys=new Map,stopped=new Set;return collectActiveKeyOptions(activeOptionsForCaptures(captures,state.patterns),activeKeys,stopped,includeBindings,focused,activeView),materializeActiveKeys(activeKeys,includeBindings,includeMetadata,focused,activeView)},collectActiveKeyOptions=(options2,activeKeys,stopped,includeBindings,focused,activeView)=>{let seen=new Set;for(let option of options2){if(seen.has(option.part.match))continue;seen.add(option.part.match),collectActiveKeyOption(option,options2,activeKeys,stopped,includeBindings,focused,activeView)}},collectActiveKeyOption=(option,siblingOptions,activeKeys,stopped,includeBindings,focused,activeView)=>{let bindingKey=option.part.match;if(stopped.has(bindingKey))return;let selection=selectActiveKeyOption(option,siblingOptions,includeBindings,focused,activeView);if(!selection)return;let existing=activeKeys.get(bindingKey);if(!existing)activeKeys.set(bindingKey,createActiveKeyState(option.part.stroke,selection,includeBindings));else updateActiveKeyState(existing,selection,includeBindings);if(selection.stop)stopped.add(bindingKey)},materializeActiveKeys=(activeKeys,includeBindings,includeMetadata,focused,activeView)=>{let materialized=[];for(let state2 of activeKeys.values()){let activeKey=materializeActiveKey(state2,includeBindings,includeMetadata,focused,activeView);if(activeKey)materialized.push(activeKey)}return materialized},selectActiveKeyOption=(option,siblingOptions,includeBindings,focused,activeView)=>{let matchingOptions=siblingOptions.filter((candidate)=>candidate.part.match===option.part.match),exactBindings=matchingOptions.filter((candidate)=>candidate.exact).map((candidate)=>candidate.binding),selected=selectActiveBindings(exactBindings,focused,activeView),continues=matchingOptions.some((candidate)=>candidate.continues);if(!continues&&!selected)return;let presentation=getOptionPresentation(matchingOptions);return{display:presentation.display,tokenName:presentation.tokenName,continues,firstBinding:selected?.bindings[0],commandBinding:selected?.commandBinding,bindings:includeBindings&&selected?[...selected.bindings]:void 0,stop:continues||selected?.stop===!0}},getOptionPresentation=(options2)=>{let display,tokenName,hasDisplayConflict=!1,hasTokenConflict=!1;for(let option of options2){let part=option.part;if(display===void 0){display=part.display,tokenName=part.tokenName;continue}if(!hasDisplayConflict&&display!==part.display)hasDisplayConflict=!0;if(!hasTokenConflict&&tokenName!==part.tokenName)hasTokenConflict=!0}let firstPart=options2[0]?.part;if(display===void 0||hasDisplayConflict)display=firstPart?stringifyKeyStroke(firstPart.stroke):"";if(hasTokenConflict)tokenName=void 0;return{display,tokenName}},selectActiveBindings=(bindings,focused,activeView)=>{let selected=[],commandBinding;for(let binding of bindings){if(!conditions.matchesConditions(binding)||!catalog.isBindingVisible(binding,focused,activeView))continue;if(selected.push(binding),binding.command===void 0)continue;if(commandBinding??=binding,!binding.fallthrough)return{bindings:selected,commandBinding,stop:!0}}if(selected.length===0)return;return{bindings:selected,commandBinding,stop:!1}},createActiveKeyState=(stroke,selection,includeBindings)=>{return{stroke,display:selection.display,tokenName:selection.tokenName,continues:selection.continues,firstBinding:selection.firstBinding,commandBinding:selection.commandBinding,bindings:includeBindings&&selection.bindings?[...selection.bindings]:void 0}},updateActiveKeyState=(state2,selection,includeBindings)=>{if(!state2.firstBinding&&selection.firstBinding)state2.firstBinding=selection.firstBinding;if(!state2.commandBinding&&selection.commandBinding)state2.commandBinding=selection.commandBinding;if(selection.continues)state2.continues=!0;if(!includeBindings||!selection.bindings||selection.bindings.length===0)return;if(!state2.bindings){state2.bindings=[...selection.bindings];return}state2.bindings.push(...selection.bindings)},materializeActiveKey=(state2,includeBindings,includeMetadata,focused,activeView)=>{if(!state2.commandBinding&&!state2.continues)return;let activeKey={stroke:cloneKeyStroke(state2.stroke),display:state2.display,continues:state2.continues};if(state2.tokenName)activeKey.tokenName=state2.tokenName;if(state2.commandBinding)activeKey.command=state2.commandBinding.command;if(includeBindings&&state2.bindings&&state2.bindings.length>0)activeKey.bindings=state2.bindings.length===1?[toActiveBinding(state2.bindings[0],focused,activeView)]:collectActiveBindings(state2.bindings,focused,activeView);if(includeMetadata){if(state2.firstBinding?.attrs)activeKey.bindingAttrs=state2.firstBinding.attrs;let commandAttrs=state2.commandBinding?catalog.getBindingCommandAttrs(state2.commandBinding,focused,activeView):void 0;if(commandAttrs)activeKey.commandAttrs=commandAttrs}return activeKey},notifyPendingSequenceChange=()=>{if(!hooks.has("pendingSequence"))return;hooks.emit("pendingSequence",state.pending?collectSequencePartsFromPending(state.pending):[])};return{getFocusedTarget,getFocusedTargetIfAvailable:getFocusedTargetIfAvailable2,setPendingSequence,ensureValidPendingSequence,revalidatePendingSequenceIfNeeded,hasPendingSequenceState,getPendingSequence,popPendingSequence,getActiveKeys,getActiveKeysForCaptures,getActiveKeysForFocused,getActiveLayers,isLayerActiveForFocused:isActiveLayerForFocused,collectSequencePartsFromPending,collectMatchingBindings,collectActiveBindings}}function normalizeBindingCommand(command){if(command===void 0||typeof command==="function")return command;let trimmed=command.trim();if(!trimmed)throw Error("Invalid keymap command: command cannot be empty");return trimmed}function normalizeCommandName(name){let trimmed=name.trim();if(!trimmed)throw Error("Invalid keymap command name: name cannot be empty");if(/\s/.test(trimmed))throw Error(`Invalid keymap command name "${name}": command names cannot contain whitespace`);return trimmed}function pushCommandEntry(target,name,entry2){let existing=target.get(name);if(existing)existing.push(entry2);else target.set(name,[entry2])}function getRegisteredCommandView(state){let entries=[],chainsByName=new Map;for(let layer of state.layers)for(let commandState of layer.commands){let entry2={layer,commandState};entries.push(entry2),pushCommandEntry(chainsByName,commandState.command.name,entry2)}return{entries,chainsByName}}function collectActiveCommands(layers,conditions,checkLayerConditions){let entries=[],reachable=[],reachableByName=new Map,chainsByName=new Map;for(let layer of layers){if(layer.commands.length===0)continue;if(checkLayerConditions&&!conditions.matchesConditions(layer))continue;for(let commandState of layer.commands){if(!conditions.matchesConditions(commandState))continue;let entry2={layer,commandState};if(entries.push(entry2),pushCommandEntry(chainsByName,commandState.command.name,entry2),!reachableByName.has(commandState.command.name))reachableByName.set(commandState.command.name,entry2),reachable.push(entry2)}}return{layers,entries,reachable,reachableByName,chainsByName}}function getActiveCommandView(state,host,conditions,focused){if(state.activeLayersCacheVersion!==state.cacheVersion||state.activeLayersCacheFocused!==focused)state.activeLayersCacheVersion=state.cacheVersion,state.activeLayersCacheFocused=focused,state.activeLayersCache=getActiveLayersForFocused(state.sortedLayers,host,focused);return collectActiveCommands(state.activeLayersCache,conditions,!0)}function mergeRequirement(target,name,value,source){if(Object.prototype.hasOwnProperty.call(target,name)&&!Object.is(target[name],value))throw Error(`Conflicting keymap requirement for "${name}" from ${source}`);target[name]=value}function mergeAttribute(target,name,value,source){if(Object.prototype.hasOwnProperty.call(target,name)&&!Object.is(target[name],value))throw Error(`Conflicting keymap attribute for "${name}" from ${source}`);target[name]=value}function createFieldCompilerContext(options){let source=`field ${options.fieldName}`;return{require(name,value){mergeRequirement(options.requirements,name,value,source)},attr(name,value){if(!options.attrs)throw Error(`Keymap ${source} cannot publish attrs`);mergeAttribute(options.attrs,name,value,source)},activeWhen(matcher){options.matchers.push(options.conditions.buildRuntimeMatcher(matcher,source))}}}function isPlainObject2(value){let prototype=Object.getPrototypeOf(value);return prototype===Object.prototype||prototype===null}function getErrorMessage(error2,fallback){if(error2 instanceof Error&&error2.message)return error2.message;return fallback}function isPromiseLike(value){if(!value)return!1;if(typeof value!=="object"&&typeof value!=="function")return!1;return typeof value.then==="function"}function snapshotDataValue(value,options){let deep=options?.deep===!0,freeze=options?.freeze===!0,preserveNonPlainObjects=options?.preserveNonPlainObjects===!0;if(Array.isArray(value)){let cloned=deep?value.map((entry2)=>snapshotDataValue(entry2,options)):[...value];return freeze?Object.freeze(cloned):cloned}if(value&&typeof value==="object"){if(preserveNonPlainObjects&&!isPlainObject2(value))return value;let cloned={};for(let[key,entry2]of Object.entries(value))cloned[key]=deep?snapshotDataValue(entry2,options):entry2;return freeze?Object.freeze(cloned):cloned}return value}function createCommandCatalogService(state,host,notify,conditions,options){let registeredViewVersion=-1,registeredView,activeViewVersion=-1,activeViewFocused,activeView,registeredBindingsCacheVersion=-1,registeredBindingsCacheCommands,registeredBindingsCache,registeredBindingsByCommandVersion=-1,registeredBindingsByCommand,registeredResolvedCacheVersion=-1,registeredResolvedCache=new Map,normalizeLayerCommands=(commands)=>{return normalizeCommands({commands,commandFields:state.commandFields,conditions,onError:(code,error2,message)=>{notify.emitError(code,error2,message)}})},prependCommandResolver=(resolver)=>{return mutateCommandResolvers(()=>state.commandResolvers.prepend(resolver),resolver)},appendCommandResolver=(resolver)=>{return mutateCommandResolvers(()=>state.commandResolvers.append(resolver),resolver)},clearCommandResolvers=()=>{if(!state.commandResolvers.has())return;notify.runWithStateChangeBatch(()=>{state.commandResolvers.clear(),options.onCommandResolversChanged(),notify.queueStateChange()})},getCommands=(query2)=>{return getFilteredCommandEntries(query2).map((entry2)=>getCommand(entry2.commandState))},getCommandEntries=(query2)=>{let context=getCommandQueryContext(query2),filteredEntries=getFilteredCommandEntries(query2,context);if(filteredEntries.length===0)return[];let grouped=filteredEntries.map((entry2)=>({entry:entry2,command:getCommand(entry2.commandState),commandAttrs:entry2.commandState.attrs,bindings:[]})),indexesByName=new Map;for(let[index,item]of grouped.entries()){let existing=indexesByName.get(item.command.name);if(existing)existing.push(index);else indexesByName.set(item.command.name,[index])}if(indexesByName.size>0)collectCommandEntryBindings(grouped,indexesByName,context);return grouped.map((item)=>({command:item.command,bindings:item.bindings}))},getCommandBindings=(query2)=>{if(query2.visibility==="registered"&&registeredBindingsCacheVersion===state.derivedVersion&&registeredBindingsCacheCommands===query2.commands&&registeredBindingsCache)return registeredBindingsCache;let bindingsByCommand=new Map;for(let command of query2.commands)if(!bindingsByCommand.has(command))bindingsByCommand.set(command,[]);if(bindingsByCommand.size===0)return bindingsByCommand;if(collectCommandBindings(bindingsByCommand,getCommandQueryContext(query2)),query2.visibility==="registered")registeredBindingsCacheVersion=state.derivedVersion,registeredBindingsCacheCommands=query2.commands,registeredBindingsCache=bindingsByCommand;return bindingsByCommand},getResolvedCommandChain=(command,focused,execution)=>{let view=getActiveCommandView2(focused);if(execution){let resolved2=[],chain=view.chainsByName.get(command);if(chain)for(let entry2 of chain)resolved2.push({target:entry2.layer.target,command:entry2.commandState.command,attrs:entry2.commandState.attrs,payload:execution.payload});let fallback2=resolveCommandWithResolversForMode(command,focused,{mode:"active",execution});if(fallback2.resolved)resolved2.push(fallback2.resolved);return{entries:resolved2.length>0?resolved2:void 0,hadError:fallback2.hadError}}let resolved=[];for(let entry2 of view.chainsByName.get(command)??[])resolved.push({target:entry2.layer.target,command:entry2.commandState.command,attrs:entry2.commandState.attrs});let fallback=resolveCommandWithResolversForMode(command,focused,{mode:"active"});if(fallback.resolved)resolved.push(fallback.resolved);return{entries:resolved.length>0?resolved:void 0,hadError:fallback.hadError}},getRegisteredResolvedEntries=(command)=>{if(registeredResolvedCacheVersion!==state.derivedVersion)registeredResolvedCacheVersion=state.derivedVersion,registeredResolvedCache=new Map;if(registeredResolvedCache.has(command))return registeredResolvedCache.get(command)??void 0;let resolved=resolveRegisteredEntries(getRegisteredCommandChain(command));return registeredResolvedCache.set(command,resolved??null),resolved},getActiveRegisteredResolvedEntries=(command,focused)=>{return resolveRegisteredEntries(getActiveCommandView2(focused).chainsByName.get(command))},resolveRegisteredResolverFallback=(command,execution)=>{return resolveCommandWithResolversForMode(command,null,{mode:"registered",execution})},resolveActiveResolverFallback=(command,focused,execution)=>{return resolveCommandWithResolversForMode(command,focused,{mode:"active",execution})},getTopCommand=(command,focused)=>{return getTopResolvedCommand(command,focused)?.command},getCommandByName=(command)=>{return getCommandEntry(command)?.commandState.command},getDispatchUnavailableCommandState=(command,focused,includeCommand)=>{let chain=getCommandView().chainsByName.get(command);if(!chain||chain.length===0)return;let inactiveEntry,disabledEntry;for(let entry2 of chain){if(!isLayerActiveForFocused(host,entry2.layer,focused)){inactiveEntry??=entry2;continue}if(!conditions.matchesConditions(entry2.layer)||!conditions.matchesConditions(entry2.commandState))disabledEntry??=entry2}let unavailableEntry=disabledEntry??inactiveEntry;if(!unavailableEntry)return;return{reason:disabledEntry?"disabled":"inactive",command:includeCommand?unavailableEntry.commandState.command:void 0}},getActiveCommandView2=(focused)=>{if(activeViewVersion===state.derivedVersion&&activeViewFocused===focused&&activeView)return activeView;let view=getActiveCommandView(state,host,conditions,focused);if(activeCommandViewCanCache())activeViewVersion=state.derivedVersion,activeViewFocused=focused,activeView=view;return view},getCommandView=()=>{if(registeredViewVersion===state.derivedVersion&&registeredView)return registeredView;return registeredViewVersion=state.derivedVersion,registeredView=getRegisteredCommandView(state),registeredView},activeCommandViewCanCache=()=>{return state.activeCommandViewCacheBlockers===0},isBindingVisible=(binding,focused,activeView2)=>{if(binding.command===void 0||binding.run)return!0;if(typeof binding.command!=="string")return!1;if(activeView2.reachableByName.has(binding.command))return!0;return getFallbackResolvedCommand(binding.command,focused,"active")!==void 0},getBindingCommandAttrs=(binding,focused,activeView2)=>{if(typeof binding.command!=="string")return;let active=activeView2.reachableByName.get(binding.command);if(active)return active.commandState.attrs;return getFallbackResolvedCommand(binding.command,focused,"active")?.attrs},getCommandResolutionStatus=(command,layerCommands)=>{if(layerCommands?.some((state2)=>state2.command.name===command)||getCommandView().chainsByName.has(command))return"resolved";let lookup=resolveCommandWithResolversForMode(command,getFocusedTargetIfAvailable(host));if(lookup.resolved||lookup.hadError)return lookup.resolved?"resolved":"error";return"unresolved"},mutateCommandResolvers=(register2,resolver)=>{return notify.runWithStateChangeBatch(()=>{let off=register2();return options.onCommandResolversChanged(),notify.queueStateChange(),()=>{notify.runWithStateChangeBatch(()=>{if(off(),state.commandResolvers.values().includes(resolver))return;options.onCommandResolversChanged(),notify.queueStateChange()})}})},getTopResolvedCommand=(command,focused)=>{let active=getActiveCommandView2(focused).reachableByName.get(command);if(active)return{target:active.layer.target,command:active.commandState.command,attrs:active.commandState.attrs};return getFallbackResolvedCommand(command,focused,"active")},getCommandEntry=(command)=>{return getRegisteredCommandChain(command)?.[0]},getRegisteredCommandChain=(command)=>{let entries=[];for(let layer of state.sortedLayers)for(let commandState of layer.commands)if(commandState.command.name===command)entries.push({layer,commandState});return entries.length>0?entries:void 0},resolveRegisteredEntries=(chain)=>{if(!chain?.length)return;return chain.map((entry2)=>({target:entry2.layer.target,command:entry2.commandState.command,attrs:entry2.commandState.attrs}))},getFallbackResolvedCommand=(command,focused,mode)=>{return resolveCommandWithResolversForMode(command,focused,{mode}).resolved},getRegisteredLayerCommandEntries=()=>{return getCommandView().entries},getRegisteredBindingsByCommand=()=>{if(registeredBindingsByCommandVersion===state.derivedVersion&&registeredBindingsByCommand)return registeredBindingsByCommand;let bindingsByCommand=new Map;for(let layer of state.layers)for(let binding of layer.bindings){if(typeof binding.command!=="string")continue;let bindings=bindingsByCommand.get(binding.command);if(bindings)bindings.push(binding);else bindingsByCommand.set(binding.command,[binding])}return registeredBindingsByCommandVersion=state.derivedVersion,registeredBindingsByCommand=bindingsByCommand,bindingsByCommand},getCommandQueryContext=(query2)=>{let visibility=query2?.visibility??"reachable",focused=query2&&Object.prototype.hasOwnProperty.call(query2,"focused")?query2.focused??null:getFocusedTargetIfAvailable(host);if(visibility==="registered")return{visibility,focused};return{visibility,focused,activeView:getActiveCommandView2(focused)}},getFilteredCommandEntries=(query2,context=getCommandQueryContext(query2))=>{let entries;if(context.visibility==="registered")entries=getRegisteredLayerCommandEntries();else if(context.visibility==="active")entries=context.activeView?.entries??[];else entries=context.activeView?.reachable??[];return queryLayerCommandEntries({entries,query:query2,getCommand:(command)=>getCommand(command),onFilterError:(error2)=>{notify.emitError("command-query-filter-error",error2,"[Keymap] Error in command query filter:")}})},collectCommandEntryBindings=(grouped,indexesByName,context)=>{visitCommandQueryBindings(context,(binding)=>{collectBindingForCommandEntries(grouped,indexesByName,binding)})},collectCommandBindings=(bindingsByCommand,context)=>{if(context.visibility==="registered"){let registeredBindings=getRegisteredBindingsByCommand();for(let[command,bindings]of bindingsByCommand){let commandAttrs=getCommandView().chainsByName.get(command)?.[0]?.commandState.attrs;for(let binding of registeredBindings.get(command)??[])bindings.push(createActiveBinding(binding,commandAttrs))}return}visitCommandQueryBindings(context,(binding)=>{collectBindingForCommandBindings(bindingsByCommand,binding,context)})},visitCommandQueryBindings=(context,visit)=>{if(context.visibility==="registered"){for(let layer of state.layers)for(let binding of layer.bindings)visit(binding);return}let activeView2=context.activeView;if(!activeView2)return;for(let layer of activeView2.layers){if(layer.bindings.length===0||!conditions.matchesConditions(layer))continue;for(let binding of layer.bindings)if(conditions.matchesConditions(binding)&&isBindingVisible(binding,context.focused,activeView2))visit(binding)}},collectBindingForCommandEntries=(grouped,indexesByName,binding)=>{if(typeof binding.command!=="string")return;let indexes=indexesByName.get(binding.command);if(!indexes||indexes.length===0)return;for(let index of indexes){let item=grouped[index];if(!item)continue;item.bindings.push(createActiveBinding(binding,item.commandAttrs))}},collectBindingForCommandBindings=(bindingsByCommand,binding,context)=>{if(typeof binding.command!=="string")return;let bindings=bindingsByCommand.get(binding.command);if(!bindings)return;bindings.push(createActiveBinding(binding,getCommandBindingAttrsForQuery(binding,context)))},createActiveBinding=(binding,commandAttrs)=>{return{sequence:binding.sequence,command:binding.command,commandAttrs,attrs:binding.attrs,event:binding.event,preventDefault:binding.preventDefault,fallthrough:binding.fallthrough}},getCommandBindingAttrsForQuery=(binding,context)=>{if(typeof binding.command!=="string")return;if(context.visibility==="registered")return getCommandView().chainsByName.get(binding.command)?.[0]?.commandState.attrs;let activeView2=context.activeView;if(!activeView2)return;return getBindingCommandAttrs(binding,context.focused,activeView2)},resolveCommandWithResolversForMode=(command,focused,options2)=>{let mode=options2?.mode??"active",execution=options2?.execution??{input:command},lookup=resolveCommandWithResolvers(command,state.commandResolvers.values(),()=>createCommandResolverContext(focused,mode,execution),(error2)=>{notify.emitError("command-resolver-error",error2,`[Keymap] Error in command resolver for "${command}":`)}),resolved=lookup.resolved;if(resolved){let entry2=getCommandEntryForMode(resolved.command.name,focused,mode);if(entry2?.commandState.command===resolved.command&&resolved.target===void 0)resolved={...resolved,target:entry2.layer.target},lookup.resolved=resolved}if(resolved&&!resolved.attrs){let attrs=getCommandStateAttrs(resolved.command.name,focused,mode)??getResolverCommandAttrs(resolved.command);if(attrs)lookup.resolved={...resolved,attrs}}return lookup},getCommandStateAttrs=(command,focused,mode)=>{if(mode==="registered")return getCommandEntry(command)?.commandState.attrs;return getActiveCommandView2(focused).reachableByName.get(command)?.commandState.attrs},getCommandEntryForMode=(command,focused,mode)=>{if(mode==="registered")return getCommandEntry(command);return getActiveCommandView2(focused).reachableByName.get(command)},createCommandResolverContext=(focused,mode,execution)=>{let{input,payload}=execution;return{context:{get input(){return input},get payload(){return payload},setInput(nextInput){input=nextInput},setPayload(nextPayload){payload=nextPayload},getCommand:(name)=>{if(mode==="registered")return getCommandByName(name);return getTopCommand(name,focused)}},getExecutionFields(){return{input,payload}}}};return{normalizeCommands:normalizeLayerCommands,prependCommandResolver,appendCommandResolver,clearCommandResolvers,getCommands,getCommandEntries,getCommandBindings,getResolvedCommandChain,getRegisteredResolvedEntries,getActiveRegisteredResolvedEntries,resolveRegisteredResolverFallback,resolveActiveResolverFallback,getTopCommand,getDispatchUnavailableCommandState,getActiveCommandView:getActiveCommandView2,isBindingVisible,getBindingCommandAttrs,getCommandResolutionStatus}}function getCommand(state){return state.command}function normalizeCommands(options){let normalizedCommands=[],seen=new Set;for(let command of options.commands)try{let mergedRequires={},matchers=[],normalizedName=normalizeCommandName(command.name),fields=getCommandFields(command),attrs={};if(seen.has(normalizedName)){options.onError("duplicate-command",{command:normalizedName},`Duplicate keymap command "${normalizedName}" in the same layer`);continue}command.name=normalizedName;for(let[fieldName,value]of Object.entries(fields)){if(value===void 0)continue;let compiler=options.commandFields.get(fieldName);if(!compiler)continue;compiler(value,createFieldCompilerContext({fieldName,conditions:options.conditions,requirements:mergedRequires,matchers,attrs}))}let commandState={command,fields,attrs:Object.keys(attrs).length===0?void 0:attrs,requires:Object.entries(mergedRequires),matchers};seen.add(commandState.command.name),normalizedCommands.push(commandState)}catch(error2){options.onError("register-command-failed",error2,getErrorMessage(error2,`Failed to register keymap command "${String(command.name)}"`));continue}return normalizedCommands}function resolveCommandWithResolvers(command,resolvers,createContext3,onResolverError){if(resolvers.length===0)return{hadError:!1};let hadError=!1;for(let resolver of resolvers){let resolvedCommand,attempt=createContext3();try{resolvedCommand=resolver(command,attempt.context)}catch(error2){hadError=!0,onResolverError(error2);continue}if(resolvedCommand)return{hadError,resolved:getResolverCommandEntry(resolvedCommand,attempt.getExecutionFields())}}return{hadError}}function getCommandFields(command){let fields={};for(let[name,value]of Object.entries(command))if(!RESERVED_COMMAND_FIELDS.has(name)&&value!==void 0)fields[name]=value;return Object.keys(fields).length===0?EMPTY_COMMAND_FIELDS:fields}function getResolverCommandEntry(command,execution){return{command,input:execution.input,payload:execution.payload}}function getResolverCommandAttrs(command){let fields=getCommandFields(command);return fields===EMPTY_COMMAND_FIELDS?void 0:fields}function queryLayerCommandEntries(options){let namespace=options.query?.namespace,limit=normalizeQueryLimit(options.query?.limit);if(limit===0)return[];let normalizedSearch=options.query?.search?.trim().toLowerCase()??"",searchKeys=DEFAULT_COMMAND_SEARCH_FIELDS;if(options.query?.searchIn&&options.query.searchIn.length>0)searchKeys=options.query.searchIn;let filter=options.query?.filter,filterEntries2,filterPredicate,exactNameFilter;if(typeof filter==="function")filterPredicate=filter;else if(filter){let entries=Object.entries(filter),remainingEntries=[];for(let[key,matcher]of entries){if(key==="name"){if(typeof matcher==="string"){exactNameFilter=new Set([matcher]);continue}if(Array.isArray(matcher)){let names=new Set;for(let value of matcher)if(typeof value==="string")names.add(value);exactNameFilter=names;continue}}remainingEntries.push([key,matcher])}filterEntries2=remainingEntries.length>0?remainingEntries:void 0}let results=[];for(let entry2 of options.entries){let commandState=entry2.commandState;if(!commandMatchesNamespace(commandState,namespace))continue;if(!commandMatchesSearch(commandState,normalizedSearch,searchKeys))continue;if(exactNameFilter&&!exactNameFilter.has(commandState.command.name))continue;if(!commandMatchesFilters(commandState,filterEntries2,options))continue;if(filterPredicate){let matches=!1;try{matches=filterPredicate(options.getCommand(commandState))}catch(error2){options.onFilterError(error2);continue}if(!matches)continue}if(results.push(entry2),limit!==void 0&&results.length>=limit)break}return results}function normalizeQueryLimit(value){if(value===void 0)return;let limit=Math.floor(Number(value));if(!Number.isFinite(limit)||limit<=0)return 0;return limit}function commandMatchesSearch(commandState,search,searchKeys){if(!search)return!0;for(let key of searchKeys)if(commandKeyMatchesSearch(commandState,key,search))return!0;return!1}function commandMatchesNamespace(commandState,namespace){if(namespace===void 0)return!0;let fields=commandState.fields;if(!Object.prototype.hasOwnProperty.call(fields,"namespace"))return!1;return valueMatchesFilter(fields.namespace,namespace)}function commandMatchesFilters(commandState,filters,options){if(!filters)return!0;for(let[key,matcher]of filters)if(!commandKeyMatchesQuery(commandState,key,matcher,options))return!1;return!0}function commandKeyMatchesSearch(commandState,key,search){return getCommandSearchText(commandState,key)?.includes(search)===!0}function getCommandSearchText(commandState,key){let cache=commandSearchCache.get(commandState);if(!cache)cache=new Map,commandSearchCache.set(commandState,cache);if(cache.has(key))return cache.get(key);let{fields,attrs}=commandState,value;if(key==="name")value=commandState.command.name;else if(Object.prototype.hasOwnProperty.call(fields,key))value=fields[key];else if(attrs&&Object.prototype.hasOwnProperty.call(attrs,key))value=attrs[key];let text=toSearchText(value);return cache.set(key,text),text}function toSearchText(value){if(Array.isArray(value)){let parts=[];for(let entry2 of value){let text=toSearchText(entry2);if(text!==void 0)parts.push(text)}return parts.length>0?parts.join("\x00"):void 0}if(typeof value==="string")return value.toLowerCase();if(typeof value==="number"||typeof value==="boolean"||typeof value==="bigint")return String(value).toLowerCase();return}function runCommandQueryPredicate(matcher,value,command,onFilterError){try{return matcher(value,command)}catch(error2){return onFilterError(error2),!1}}function commandKeyMatchesQuery(commandState,key,matcher,options){if(typeof matcher==="function")return commandKeyMatchesPredicate(commandState,key,matcher,options);return commandKeyMatchesExact(commandState,key,matcher)}function commandKeyMatchesPredicate(commandState,key,matcher,options){let{command,fields,attrs}=commandState,commandView,foundValue=!1,getCommandView=()=>commandView??=options.getCommand(commandState);if(key==="name"){if(foundValue=!0,runCommandQueryPredicate(matcher,command.name,getCommandView(),options.onFilterError))return!0}if(Object.prototype.hasOwnProperty.call(fields,key)){if(foundValue=!0,runCommandQueryPredicate(matcher,fields[key],getCommandView(),options.onFilterError))return!0}if(attrs&&Object.prototype.hasOwnProperty.call(attrs,key)){if(foundValue=!0,runCommandQueryPredicate(matcher,attrs[key],getCommandView(),options.onFilterError))return!0}return!foundValue&&runCommandQueryPredicate(matcher,void 0,getCommandView(),options.onFilterError)}function commandKeyMatchesExact(commandState,key,matcher){let{command,fields,attrs}=commandState;if(key==="name"&&valueMatchesFilter(command.name,matcher))return!0;if(Object.prototype.hasOwnProperty.call(fields,key)&&valueMatchesFilter(fields[key],matcher))return!0;return!!attrs&&Object.prototype.hasOwnProperty.call(attrs,key)&&valueMatchesFilter(attrs[key],matcher)}function valueMatchesFilter(value,matcher){if(Array.isArray(matcher))return matcher.some((expected)=>valueMatchesExact(value,expected));return valueMatchesExact(value,matcher)}function valueMatchesExact(value,expected){if(Array.isArray(value))return value.some((entry2)=>valueMatchesExact(entry2,expected));return Object.is(value,expected)}function createCommandExecutorService(notify,runtime,activation,catalog,options){let createCommandContext=(event,focused,target,data,input,payload)=>{return{keymap:options.keymap,event,focused,target,data,input,payload}},executeResolvedCommand=(commandName,command,context,includeCommand)=>{let commandView=typeof command==="function"?void 0:command,run=typeof command==="function"?command:command.run,resultCommand=includeCommand?commandView:void 0,result2;try{result2=run(commandView?{...context,command:commandView}:context)}catch(error2){return notify.emitError("command-execution-error",error2,`[Keymap] Error running command "${commandName}":`),{status:"error",result:resultCommand?{ok:!1,reason:"error",command:resultCommand}:{ok:!1,reason:"error"}}}if(isPromiseLike(result2))return result2.catch((error2)=>{notify.emitError("async-command-error",error2,`[Keymap] Async error in command "${commandName}":`)}),{status:"handled",result:resultCommand?{ok:!0,command:resultCommand}:{ok:!0}};if(isRunCommandResult(result2)){let commandResult=result2;if(!result2.ok&&result2.reason!=="not-found"&&includeCommand&&commandView&&!result2.command)commandResult={...result2,command:commandView};else if(result2.ok&&includeCommand&&commandView&&!result2.command)commandResult={...result2,command:commandView};return{status:result2.ok?"handled":"rejected",result:commandResult}}if(result2===!1)return{status:"rejected",result:resultCommand?{ok:!1,reason:"rejected",command:resultCommand}:{ok:!1,reason:"rejected"}};return{status:"handled",result:resultCommand?{ok:!0,command:resultCommand}:{ok:!0}}},executeCommandChain=(commandName,chain,event,focused,target,data,payload,includeCommand)=>{let rejected;for(let entry2 of chain??[]){let executed=executeResolvedCommand(commandName,entry2.command,createCommandContext(event,focused,target??entry2.target??null,data,commandName,payload),includeCommand);if(executed.status==="handled"||executed.status==="error")return[executed.result,rejected];rejected=executed.result}return[void 0,rejected]},executeProgrammaticCommand=(cmd,commandOptions,mode)=>{let normalized;try{normalized=normalizeBindingCommand(cmd)}catch{return{ok:!1,reason:"invalid-args"}}if(typeof normalized!=="string")return{ok:!1,reason:"not-found"};let includeCommand=commandOptions?.includeCommand===!0,focused=commandOptions?.focused??activation.getFocusedTargetIfAvailable(),event=commandOptions?.event??options.createCommandEvent(),data=runtime.getReadonlyData(),payload=commandOptions?.payload,chain=mode==="registered"?catalog.getRegisteredResolvedEntries(normalized):catalog.getActiveRegisteredResolvedEntries(normalized,focused),[done,rejected]=executeCommandChain(normalized,chain,event,focused,commandOptions?.target,data,payload,includeCommand);if(done)return done;let rejectedResult=rejected,fallback=mode==="registered"?catalog.resolveRegisteredResolverFallback(normalized,{input:normalized,payload}):catalog.resolveActiveResolverFallback(normalized,focused,{input:normalized,payload});if(fallback.resolved){let result2=executeResolvedCommand(normalized,fallback.resolved.command,createCommandContext(event,focused,commandOptions?.target??fallback.resolved.target??null,data,fallback.resolved.input??normalized,fallback.resolved.payload),includeCommand);if(result2.status==="handled"||result2.status==="error")return result2.result;rejectedResult=result2.result}if(fallback.hadError)return{ok:!1,reason:"error"};if(mode==="active"){let unavailable2=catalog.getDispatchUnavailableCommandState(normalized,focused,includeCommand);if(unavailable2)return unavailable2.command?{ok:!1,reason:unavailable2.reason,command:unavailable2.command}:{ok:!1,reason:unavailable2.reason}}return rejectedResult??{ok:!1,reason:"not-found"}};return{runCommand(cmd,commandOptions){return executeProgrammaticCommand(cmd,commandOptions,"registered")},dispatchCommand(cmd,commandOptions){return executeProgrammaticCommand(cmd,commandOptions,"active")},runBinding(bindingLayer,binding,event,focused,payload){let data=runtime.getReadonlyData();if(binding.run){if(executeResolvedCommand(typeof binding.command==="string"?binding.command:"<function>",binding.run,createCommandContext(event,focused,bindingLayer.target??null,data,typeof binding.command==="string"?binding.command:"<function>",payload),!1).status==="rejected")return!1;return applyBindingEventEffects(binding,event),!0}if(typeof binding.command!=="string")return!1;let chain=catalog.getResolvedCommandChain(binding.command,focused,payload===void 0?void 0:{input:binding.command,payload}).entries;for(let entry2 of chain??[]){if(executeResolvedCommand(binding.command,entry2.command,createCommandContext(event,focused,entry2.target??bindingLayer.target??null,data,entry2.input??binding.command,entry2.payload),!1).status==="rejected")continue;return applyBindingEventEffects(binding,event),!0}return!1}}}function isRunCommandResult(value){return typeof value==="object"&&value!==null&&"ok"in value}function applyBindingEventEffects(binding,event){if(!binding.preventDefault)return;event.preventDefault(),event.stopPropagation()}function snapshotAttributes(attrs){if(Object.keys(attrs).length===0)return;return snapshotDataValue(attrs,{freeze:!0})}function createCompilerService(state,notify,conditions,options){let parseTokenKey=(key)=>{return parseSingleKeyPartWithParsers(key,state.bindingParsers.values(),{tokens:state.tokens,patterns:state.patterns,layer:EMPTY_COMPILE_FIELDS,parseObjectKey:(value,options2)=>parseObjectKeyPart(value,options2)})},parseKeySequence=(key)=>{if(typeof key!=="string")return[parseObjectKeyPart(key)];let parsed=parseBindingSequenceWithParsers(key,state.bindingParsers.values(),{tokens:state.tokens,patterns:state.patterns,layer:EMPTY_COMPILE_FIELDS,parseObjectKey:(value,options2)=>parseObjectKeyPart(value,options2)});for(let tokenName of parsed.unknownTokens)options.warnUnknownToken(tokenName,key);return parsed.parts},formatKey=(key,options2)=>{return stringifyKeySequence(parseKeySequence(key),options2)},compileBindings=(bindings,tokens2,sourceTarget,sourceLayerOrder,compileFields)=>{let bindingStates=[],hasTokenBindings=!1,bindingExpanders=state.bindingExpanders.values(),bindingParsers=state.bindingParsers.values(),bindingFieldCompilers=state.bindingFields,allowExactPrefixAmbiguity=state.disambiguationResolvers.has(),warnUnknownField=options.warnUnknownField,warnUnknownToken=options.warnUnknownToken;for(let[bindingIndex,binding]of bindings.entries()){let expandedBindingKeys;try{expandedBindingKeys=expandBindingKeyWithExpanders(binding.key,bindingExpanders,{layer:compileFields})}catch(error2){notify.emitError("binding-expand-error",error2,getErrorMessage(error2,"Failed to expand keymap binding"));continue}for(let expandedBindingKey of expandedBindingKeys){let expandedKey=expandedBindingKey.key,parsed;try{parsed=typeof expandedKey==="string"?parseBindingSequenceWithParsers(expandedKey,bindingParsers,{tokens:tokens2,patterns:state.patterns,layer:compileFields,parseObjectKey:(value,options2)=>parseObjectKeyPart(value,options2)}):{parts:[parseObjectKeyPart(expandedKey)],usedTokens:[],unknownTokens:[],hasTokenBindings:!1},parsed=applyExpansionDisplays(parsed,expandedBindingKey)}catch(error2){notify.emitError("binding-parse-error",error2,getErrorMessage(error2,"Failed to parse keymap binding"));continue}let sequence=parsed.parts;hasTokenBindings||=parsed.hasTokenBindings;for(let tokenName of parsed.unknownTokens)warnUnknownToken(tokenName,typeof expandedKey==="string"?expandedKey:String(expandedKey.name));for(let compiledInput of applyBindingTransformers(binding,sequence,tokens2,bindingParsers,compileFields))try{let event=normalizeBindingEvent(compiledInput.event),compiledSequence=compiledInput.sequence,mergedRequires={},mergedAttrs={},matchers=[];for(let fieldName in compiledInput){if(fieldName==="sequence")continue;if(RESERVED_BINDING_FIELDS.has(fieldName))continue;let value=compiledInput[fieldName];if(value===void 0)continue;let compiler=bindingFieldCompilers.get(fieldName);if(!compiler){warnUnknownField("binding",fieldName);continue}compiler(value,createFieldCompilerContext({fieldName,conditions,requirements:mergedRequires,matchers,attrs:mergedAttrs}))}let attrs=Object.keys(mergedAttrs).length>0?snapshotAttributes(mergedAttrs):void 0,command=normalizeBindingCommand(compiledInput.cmd),compiledBinding={binding,sequence:compiledSequence,command,event,parsedBinding:snapshotParsedBinding(compiledInput),sourceTarget,sourceLayerOrder,bindingIndex,requires:Object.keys(mergedRequires).length>0?Object.entries(mergedRequires):EMPTY_REQUIRES,matchers:matchers.length>0?matchers:EMPTY_MATCHERS,preventDefault:compiledInput.preventDefault!==!1,fallthrough:compiledInput.fallthrough??!1};if(attrs)compiledBinding.attrs=attrs;if(typeof command==="function")compiledBinding.run=command;if(compiledSequence.length===0)continue;if(event==="release"&&compiledSequence.length>1)throw Error("Keymap release bindings only support a single key stroke");let terminalPattern=compiledSequence.at(-1);if(terminalPattern?.patternName){let pattern=state.patterns.get(terminalPattern.patternName);if(pattern&&pattern.max!==pattern.min)throw Error("Keymap unbounded sequence patterns must be followed by a concrete continuation")}if(event==="press"&&!allowExactPrefixAmbiguity)validateExactPrefixAmbiguity(bindingStates,compiledBinding);bindingStates.push(compiledBinding)}catch(error2){notify.emitError("binding-compile-error",error2,getErrorMessage(error2,"Failed to compile keymap binding"))}}}return{bindings:bindingStates,hasTokenBindings}},parseObjectKeyPart=(key,options2)=>{return createKeySequencePart(key,options2)},normalizeBindingEvent=(event)=>{if(event===void 0||event==="press")return"press";if(event==="release")return"release";throw Error(`Invalid keymap binding event "${String(event)}": expected "press" or "release"`)},applyBindingTransformers=(binding,sequence,tokens2,bindingParsers,compileFields)=>{let bindingTransformers=state.bindingTransformers.values();if(bindingTransformers.length===0)return[{...binding,sequence:cloneKeySequence(sequence)}];let parsedBinding={...binding,sequence:cloneKeySequence(sequence)},extraBindings=[],keepOriginal=!0,layer=compileFields??EMPTY_COMPILE_FIELDS;for(let transformer of bindingTransformers)try{transformer(parsedBinding,{layer,parseKey:(key)=>{return parseSingleKeyPartWithParsers(key,bindingParsers,{tokens:tokens2,patterns:state.patterns,layer,parseObjectKey:(value,options2)=>parseObjectKeyPart(value,options2)})},add:(nextBinding)=>{extraBindings.push(snapshotParsedBinding(nextBinding))},skipOriginal:()=>{keepOriginal=!1}})}catch(error2){notify.emitError("binding-transformer-error",error2,"[Keymap] Error in binding transformer:")}if(!keepOriginal)return extraBindings;if(extraBindings.length===0)return[parsedBinding];return[parsedBinding,...extraBindings]};return{parseTokenKey,parseKeySequence,formatKey,compileBindings}}function sequenceMatchesPrefix(left,right){if(left.length>=right.length)return!1;for(let index=0;index<left.length;index+=1)if(left[index]?.match!==right[index]?.match)return!1;return!0}function validateExactPrefixAmbiguity(bindings,next){for(let existing of bindings){if(existing.event!=="press")continue;if(existing.command!==void 0&&sequenceMatchesPrefix(existing.sequence,next.sequence)||next.command!==void 0&&sequenceMatchesPrefix(next.sequence,existing.sequence))throw Error("Keymap bindings cannot use the same sequence as both an exact match and a prefix in the same layer")}}function expandBindingKeyWithExpanders(key,expanders,options){if(typeof key!=="string"||expanders.length===0)return[{key}];let layer=options?.layer??EMPTY_COMPILE_FIELDS,candidates=[{key}];for(let expander of expanders){let nextCandidates=[];for(let candidate of candidates){let result2=expander({input:candidate.key,displays:candidate.displays,layer});if(!result2){nextCandidates.push(candidate);continue}if(result2.length===0)throw Error(`Keymap binding expander must return at least one key sequence for "${candidate.key}"`);for(let expanded of result2){if(!expanded||typeof expanded!=="object"||Array.isArray(expanded)||typeof expanded.key!=="string")throw Error(`Keymap binding expander must return expansion objects with string keys for "${candidate.key}"`);if(expanded.displays!==void 0){if(!Array.isArray(expanded.displays))throw Error(`Keymap binding expander displays must be an array of strings for "${candidate.key}"`);for(let display of expanded.displays)if(typeof display!=="string")throw Error(`Keymap binding expander displays must be an array of strings for "${candidate.key}"`)}nextCandidates.push(expanded)}}candidates=nextCandidates}return candidates}function applyExpansionDisplays(parsed,expansion){if(!expansion.displays)return parsed;if(expansion.displays.length!==parsed.parts.length)throw Error(`Keymap binding expansion displays length must match parsed sequence length for "${String(expansion.key)}"`);return{...parsed,parts:parsed.parts.map((part,index)=>({...part,display:expansion.displays[index]}))}}function parseBindingSequenceWithParsers(key,parsers2,options){if(key.length===0)throw Error("Invalid key sequence: sequence cannot be empty");if(parsers2.length===0)throw Error("No keymap binding parsers are registered");let tokens2=options.tokens??new Map,patterns2=options.patterns??new Map,layer=options.layer??EMPTY_COMPILE_FIELDS,parseObjectKey=options.parseObjectKey,parts=[],usedTokens=new Set,unknownTokens=new Set,index=0;while(index<key.length){let matched=!1;for(let parser of parsers2){let result2=parser({input:key,index,layer,tokens:tokens2,patterns:patterns2,normalizeTokenName:normalizeBindingTokenName,createMatch:createTextKeyMatch,parseObjectKey});if(!result2)continue;if(result2.nextIndex<=index||result2.nextIndex>key.length)throw Error(`Keymap binding parser must advance the input for "${key}" at index ${index}`);parts.push(...result2.parts);for(let tokenName of result2.usedTokens??[])usedTokens.add(tokenName);for(let tokenName of result2.unknownTokens??[])unknownTokens.add(tokenName);index=result2.nextIndex,matched=!0;break}if(!matched)throw Error(`No keymap binding parser handled input at index ${index} in "${key}"`)}return{parts,usedTokens:[...usedTokens],unknownTokens:[...unknownTokens],hasTokenBindings:usedTokens.size>0||unknownTokens.size>0}}function parseSingleKeyPartWithParsers(key,parsers2,options){if(typeof key!=="string")return options.parseObjectKey(key);let{parts}=parseBindingSequenceWithParsers(key,parsers2,options),[part]=parts;if(!part||parts.length!==1)throw Error(`Invalid key "${String(key)}": expected a single key stroke`);return part}function isReactiveMatcher(value){if(!value||typeof value!=="object")return!1;let candidate=value;return typeof candidate.get==="function"&&typeof candidate.subscribe==="function"}function createConditionService(state,notify){let hasNoConditions=(target)=>{return target.requires.length===0&&target.matchers.length===0},matchesRuntimeMatcher=(matcher)=>{try{return matcher.match()}catch(error2){return notify.emitError("runtime-matcher-error",error2,`[Keymap] Error evaluating runtime matcher from ${matcher.source}:`),!1}},matchesRuntimeMatchers=(target)=>{if(target.matchers.length===0)return!0;if(target.matchers.length===1){let[matcher]=target.matchers;return matcher?matchesRuntimeMatcher(matcher):!0}for(let matcher of target.matchers)if(!matchesRuntimeMatcher(matcher))return!1;return!0},matchRequirements=(requires)=>{if(requires.length===0)return!0;for(let[name,value]of requires)if(!Object.is(state.data[name],value))return!1;return!0};return{buildRuntimeMatcher(matcher,source){if(typeof matcher==="function")return{source,match:matcher};if(isReactiveMatcher(matcher))return{source,match:()=>matcher.get(),subscribe:(onChange)=>matcher.subscribe(onChange)};throw Error(`Keymap ${source} expected a function or a reactive matcher`)},matchesConditions:(target)=>{return hasNoConditions(target)||matchRequirements(target.requires)&&matchesRuntimeMatchers(target)}}}function createSyncDecision(action,handler){return{[KEY_DISAMBIGUATION_DECISION]:!0,action,handler}}function createDeferredDecision(action){return{[KEY_DEFERRED_DISAMBIGUATION_DECISION]:!0,action}}function isSyncDecision(value){return!!value&&typeof value==="object"&&value[KEY_DISAMBIGUATION_DECISION]===!0}function isDeferredDecision(value){return!!value&&typeof value==="object"&&value[KEY_DEFERRED_DISAMBIGUATION_DECISION]===!0}function sleepWithSignal(ms,signal){if(signal.aborted)return Promise.resolve(!1);return new Promise((resolve23)=>{let timeout=setTimeout(()=>{signal.removeEventListener("abort",onAbort),resolve23(!0)},Math.max(0,ms)),onAbort=()=>{clearTimeout(timeout),signal.removeEventListener("abort",onAbort),resolve23(!1)};signal.addEventListener("abort",onAbort,{once:!0})})}function matchSequencePattern(patterns2,notify,patternName,event){let pattern=patterns2.get(patternName);if(!pattern)return;try{return pattern.matcher(event)}catch(error2){notify.emitError("sequence-pattern-match-error",error2,`[Keymap] Error matching sequence pattern "${pattern.name}":`);return}}function createPatternEventPart(patterns2,event,patternName,match){let payloadKey=patterns2.get(patternName)?.payloadKey??patternName;return{...createKeySequencePart({name:event.name,ctrl:event.ctrl,shift:event.shift,meta:event.meta,super:event.super??!1,hyper:event.hyper||void 0},{display:match.display??String(match.value??event.name)}),patternName,payloadKey}}function createSequencePayload(patterns2,notify,capture2){if(!capture2?.patterns||capture2.patterns.length===0)return;let payload={},hasPayload=!1;for(let captured of capture2.patterns){let pattern=patterns2.get(captured.name),value;try{value=pattern?.finalize?pattern.finalize(captured.values):captured.values.length===1?captured.values[0]:[...captured.values]}catch(error2){notify.emitError("sequence-pattern-finalize-error",error2,`[Keymap] Error finalizing sequence pattern "${captured.name}":`);continue}let existing=payload[captured.payloadKey];if(existing===void 0)payload[captured.payloadKey]=value,hasPayload=!0;else if(Array.isArray(existing))existing.push(value);else payload[captured.payloadKey]=[existing,value]}return hasPayload?payload:void 0}function createDispatchService(state,notify,runtime,activation,conditions,executor,compiler,catalog,layers,hooks){let eventMatchResolverContext={resolveKey:(key)=>compiler.parseTokenKey(key).match},pendingDisambiguation=null,nextPendingDisambiguationId=0;function intercept(name,fn,options){if(name==="key"){let keyOptions=options;return state.keyHooks.register(fn,{priority:keyOptions?.priority??0,release:keyOptions?.release??!1})}if(name==="key:after"){let keyOptions=options;return state.keyAfterHooks.register(fn,{priority:keyOptions?.priority??0,release:keyOptions?.release??!1})}let rawOptions=options;return state.rawHooks.register(fn,{priority:rawOptions?.priority??0})}function prependEventMatchResolver(resolver){return state.eventMatchResolvers.prepend(resolver)}function appendEventMatchResolver(resolver){return state.eventMatchResolvers.append(resolver)}function clearEventMatchResolvers(){state.eventMatchResolvers.clear()}function prependDisambiguationResolver(resolver){return mutateDisambiguationResolvers(()=>state.disambiguationResolvers.prepend(resolver),resolver)}function appendDisambiguationResolver(resolver){return mutateDisambiguationResolvers(()=>state.disambiguationResolvers.append(resolver),resolver)}function clearDisambiguationResolvers(){if(!state.disambiguationResolvers.has())return;notify.runWithStateChangeBatch(()=>{state.disambiguationResolvers.clear(),layers.recompileBindings()})}function handlePendingSequenceChange(_previous,_next){if(!pendingDisambiguation)return;cancelPendingDisambiguation()}function handleRawSequence(sequence){let hooks2=state.rawHooks.entries();if(hooks2.length===0)return!1;let stopped=!1,context={sequence,stop(){stopped=!0}};for(let hook of hooks2){try{hook.listener(context)}catch(error2){notify.emitError("raw-intercept-error",error2,"[Keymap] Error in raw intercept listener:")}if(stopped)return!0}return!1}function createDispatchBinding(binding,focused){return{sequence:cloneKeySequence(binding.sequence),command:binding.command,commandAttrs:catalog.getBindingCommandAttrs(binding,focused,catalog.getActiveCommandView(focused)),attrs:binding.attrs,event:binding.event,preventDefault:binding.preventDefault,fallthrough:binding.fallthrough,sourceLayerOrder:binding.sourceLayerOrder,bindingIndex:binding.bindingIndex}}function emitDispatchEvent(event){if(!hooks.has("dispatch"))return;hooks.emit("dispatch",event)}function emitBindingDispatch(phase,layer,binding,focused){if(!hooks.has("dispatch"))return;emitDispatchEvent({phase,event:binding.event,focused,layer:{order:layer.order,priority:layer.priority,target:layer.target,targetMode:layer.targetMode},binding:createDispatchBinding(binding,focused),sequence:cloneKeySequence(binding.sequence),command:binding.command})}function emitSequenceDispatch(phase,captures,focused){if(!hooks.has("dispatch"))return;let first=captures[0],sequence=captures.length>0?activation.collectSequencePartsFromPending({captures}):[];emitDispatchEvent({phase,event:"press",focused,layer:first?{order:first.layer.order,priority:first.layer.priority,target:first.layer.target,targetMode:first.layer.targetMode}:void 0,sequence})}function getKeyAfterHooks(release){let hooks2=state.keyAfterHooks.entries();for(let hook of hooks2)if(hook.release===release)return hooks2;return}function getOutcomeSequence(outcome){if(outcome.sequence)return cloneKeySequence(outcome.sequence);if(outcome.captures)return activation.collectSequencePartsFromPending({captures:outcome.captures});return[]}function createSequenceOutcome(reason,captures){return{handled:reason!=="sequence-miss",reason,captures}}function createBindingOutcome(binding,handled){return{handled,reason:handled?"binding-handled":"binding-rejected",sequence:binding.sequence}}function preferDispatchOutcome(current,next){if(next.handled||current.reason==="no-match")return next;return current}function emitKeyAfter(hooks2,event,release,focused,outcome){let context={event,eventType:release?"release":"press",focused,handled:outcome.handled,reason:outcome.reason,sequence:getOutcomeSequence(outcome),pendingSequence:activation.getPendingSequence(),setData:(name,value)=>{runtime.setData(name,value)},getData:(name)=>{return runtime.getData(name)},consume:(options)=>{let shouldPreventDefault=options?.preventDefault??!0,shouldStopPropagation=options?.stopPropagation??!0;if(shouldPreventDefault)event.preventDefault();if(shouldStopPropagation)event.stopPropagation()}};for(let hook of hooks2){if(hook.release!==release)continue;try{hook.listener(context)}catch(error2){notify.emitError("key-after-intercept-error",error2,"[Keymap] Error in key:after intercept listener:")}}}function noMatchOutcome(){return{handled:!1,reason:"no-match"}}function consumeSequenceEvent(event){event.preventDefault(),event.stopPropagation()}function holdSequence(phase,captures,focused,event){activation.setPendingSequence({captures});let outcome=createSequenceOutcome("sequence-pending",captures);return emitSequenceDispatch(phase,captures,focused),consumeSequenceEvent(event),outcome}function clearSequence(reason,captures,focused,event){let outcome=createSequenceOutcome(reason,captures);return emitSequenceDispatch("sequence-clear",captures,focused),activation.setPendingSequence(null),consumeSequenceEvent(event),outcome}function handleKeyEvent(event,release){if(!release)cancelPendingDisambiguation();let afterHooks=getKeyAfterHooks(release),afterFocused=afterHooks?activation.getFocusedTarget():null,hooks2=state.keyHooks.entries(),context={event,setData:(name,value)=>{runtime.setData(name,value)},getData:(name)=>{return runtime.getData(name)},consume:(options)=>{let shouldPreventDefault=options?.preventDefault??!0,shouldStopPropagation=options?.stopPropagation??!0;if(shouldPreventDefault)event.preventDefault();if(shouldStopPropagation)event.stopPropagation()}};for(let hook of hooks2){if(hook.release!==release)continue;try{hook.listener(context)}catch(error2){notify.emitError("key-intercept-error",error2,"[Keymap] Error in key intercept listener:")}if(event.propagationStopped){if(afterHooks)emitKeyAfter(afterHooks,event,release,afterFocused,{handled:!0,reason:"intercept-consumed",sequence:[]});return}}if(release){let outcome2=dispatchReleaseLayers(event);if(afterHooks)emitKeyAfter(afterHooks,event,release,afterFocused,outcome2);return}let outcome=dispatchLayers(event);if(afterHooks)emitKeyAfter(afterHooks,event,release,afterFocused,outcome)}function mutateDisambiguationResolvers(register2,resolver){return notify.runWithStateChangeBatch(()=>{let hadResolvers=state.disambiguationResolvers.has(),off=register2();if(!hadResolvers&&state.disambiguationResolvers.has())layers.recompileBindings();return()=>{notify.runWithStateChangeBatch(()=>{let hadBeforeRemoval=state.disambiguationResolvers.has();if(off(),state.disambiguationResolvers.values().includes(resolver))return;if(hadBeforeRemoval&&!state.disambiguationResolvers.has())layers.recompileBindings()})}})}function dispatchReleaseLayers(event){let focused=activation.getFocusedTarget(),activeLayers=activation.getActiveLayers(focused),matchKeys=resolveEventMatchKeys(event),outcome=noMatchOutcome();layerLoop:for(let layer of activeLayers){if(layer.bindings.length===0)continue;if(!conditions.matchesConditions(layer))continue;for(let strokeKey of matchKeys){let result2=runReleaseBindings(layer,strokeKey,event,focused);if(outcome=preferDispatchOutcome(outcome,result2.outcome),!result2.handled)continue;if(result2.stop)return outcome;continue layerLoop}}return outcome}function dispatchLayers(event){let focused=activation.getFocusedTarget(),pending=activation.ensureValidPendingSequence(),matchKeys=resolveEventMatchKeys(event);if(pending)return dispatchPendingSequence(pending,matchKeys,event,focused);let activeLayers=activation.getActiveLayers(focused);return dispatchFromRoot(activeLayers,matchKeys,event,focused)}function dispatchPendingSequence(pending,matchKeys,event,focused){let activeView=catalog.getActiveCommandView(focused),advancedCaptures=[];for(let capture2 of pending.captures){let advanced=advanceSequenceCapture(capture2,matchKeys,event,state.patterns,matchPattern,createPatternEventPart2);if(!advanced)continue;advancedCaptures.push(advanced)}let bestPriority=advancedCaptures.reduce((best,capture2)=>Math.min(best,capturePriority(capture2,matchKeys)),Number.POSITIVE_INFINITY),prioritizedCaptures=advancedCaptures.filter((capture2)=>capturePriority(capture2,matchKeys)===bestPriority);if(prioritizedCaptures.length===0||!prioritizedCaptures.some((capture2)=>captureIsReachable(capture2,focused,activeView))){let outcome=createSequenceOutcome("sequence-miss",pending.captures);return emitSequenceDispatch("sequence-clear",pending.captures,focused),activation.setPendingSequence(null),outcome}return dispatchPendingCapturesFromIndex(prioritizedCaptures,0,!1,event,focused)}function dispatchPendingCapturesFromIndex(advancedCaptures,startIndex,handledExact,event,focused){let hasHandledExact=handledExact,outcome=noMatchOutcome(),processedExact=new Set;for(let index=startIndex;index<advancedCaptures.length;index+=1){let capture2=advancedCaptures[index];if(!capture2||processedExact.has(capture2))continue;let continuationCapturesForPrefix=collectContinuationCapturesForPrefix(advancedCaptures,index,capture2);if(continuationCapturesForPrefix.length>0){if(hasHandledExact)continue;let exactCaptures2=collectExactCapturesForPrefix(advancedCaptures,capture2),resolvedOutcome=tryResolvePendingAmbiguity(advancedCaptures,index,continuationCapturesForPrefix,exactCaptures2,event,focused,hasHandledExact);if(resolvedOutcome)return resolvedOutcome;return holdSequence("sequence-advance",continuationCapturesForPrefix,focused,event)}if(!captureIsExact(capture2,state.patterns))continue;let exactCaptures=collectExactCapturesForPrefix(advancedCaptures,capture2);for(let exact of exactCaptures)processedExact.add(exact);let result2=runCaptureBindings(capture2.layer,exactCaptures,event,focused);if(outcome=preferDispatchOutcome(outcome,result2.outcome),!result2.handled)continue;if(hasHandledExact=!0,result2.stop)return emitSequenceDispatch("sequence-clear",advancedCaptures,focused),activation.setPendingSequence(null),outcome}return emitSequenceDispatch("sequence-clear",advancedCaptures,focused),activation.setPendingSequence(null),outcome}function dispatchFromRoot(activeLayers,matchKeys,event,focused){return dispatchFromRootAtIndex(activeLayers,0,matchKeys,event,focused)}function dispatchFromRootAtIndex(activeLayers,startIndex,matchKeys,event,focused){let activeView=catalog.getActiveCommandView(focused),outcome=noMatchOutcome();for(let index=startIndex;index<activeLayers.length;index+=1){let layer=activeLayers[index];if(!layer)continue;if(!conditions.matchesConditions(layer))continue;let captures=collectRootCaptures(layer,matchKeys,event,focused,activeView);if(captures.length===0)continue;if(captures.filter((capture2)=>captureHasContinuations(capture2,state.patterns,!1)).length>0){let exactCaptures2=captures.filter((capture2)=>captureIsExact(capture2,state.patterns)),continuationCaptures=collectPendingCapturesFromRoot(activeLayers,index,matchKeys,event,focused),resolvedOutcome=tryResolveRootAmbiguity(activeLayers,index,matchKeys,continuationCaptures,exactCaptures2,event,focused);if(resolvedOutcome)return resolvedOutcome;return holdSequence("sequence-start",continuationCaptures,focused,event)}let exactCaptures=captures.filter((capture2)=>captureIsExact(capture2,state.patterns)),result2=runCaptureBindings(layer,exactCaptures,event,focused);if(outcome=preferDispatchOutcome(outcome,result2.outcome),!result2.handled)continue;if(result2.stop)return outcome}return outcome}function tryResolveRootAmbiguity(activeLayers,layerIndex,matchKeys,continuationCaptures,exactCaptures,event,focused){let applyExact=()=>{activation.setPendingSequence(null);let layer=exactCaptures[0]?.layer;if(!layer)return noMatchOutcome();let result2=runCaptureBindings(layer,exactCaptures,event,focused);if(!result2.stop)return preferDispatchOutcome(result2.outcome,dispatchFromRootAtIndex(activeLayers,layerIndex+1,matchKeys,event,focused));return result2.outcome};return tryResolveAmbiguity({event,focused,continuationCaptures,exactBindingsSource:exactCaptures.map((capture2)=>capture2.binding),sequencePhase:"sequence-start",runExact:applyExact})}function tryResolvePendingAmbiguity(advancedCaptures,captureIndex,continuationCaptures,exactCaptures,event,focused,handledExact){let applyExact=()=>{activation.setPendingSequence(null);let layer=exactCaptures[0]?.layer;if(!layer)return noMatchOutcome();let result2=runCaptureBindings(layer,exactCaptures,event,focused);if(result2.stop)return result2.outcome;return preferDispatchOutcome(result2.outcome,dispatchPendingCapturesFromIndex(advancedCaptures,captureIndex+1,handledExact||result2.handled,event,focused))};return tryResolveAmbiguity({event,focused,continuationCaptures,exactBindingsSource:exactCaptures.map((capture2)=>capture2.binding),sequencePhase:"sequence-advance",runExact:applyExact})}function tryResolveAmbiguity(options){let{event,focused,continuationCaptures,exactBindingsSource,sequencePhase,runExact}=options;if(!state.disambiguationResolvers.has()||continuationCaptures.length===0)return;let activeView=catalog.getActiveCommandView(focused),exactBindings=activation.collectMatchingBindings(exactBindingsSource,focused,activeView);if(!exactBindings.some((binding)=>binding.command!==void 0))return;let continueSequence=()=>{return holdSequence(sequencePhase,continuationCaptures,focused,event)},clear=()=>{return clearSequence("sequence-cleared",continuationCaptures,focused,event)},sequence,getSequence=()=>{return sequence??=activation.collectSequencePartsFromPending({captures:continuationCaptures}),sequence},decision=resolveDisambiguation({event,focused,getSequence,exactBindings,continuationCaptures,activeView});if(!decision)return warnUnresolvedAmbiguity(getSequence()),continueSequence();return applySyncDecision(decision,continuationCaptures,runExact,continueSequence,clear,focused,getSequence)}function applySyncDecision(decision,continuationCaptures,runExact,continueSequence,clear,focused,getSequence){if(decision.action==="run-exact")return runExact();if(decision.action==="continue-sequence")return continueSequence();if(decision.action==="clear")return clear();let outcome=continueSequence();return scheduleDeferredDisambiguation(continuationCaptures,decision.handler,focused,getSequence(),(nextDecision)=>{if(!nextDecision)return;if(nextDecision.action==="run-exact"){runExact();return}if(nextDecision.action==="continue-sequence"){continueSequence();return}clear()}),outcome}function resolveDisambiguation(options){let sequence,exact,continuations,strokePart,ctx={event:options.event,focused:options.focused,get sequence(){return sequence??=cloneKeySequence(options.getSequence()),sequence},get stroke(){let stroke=options.getSequence().at(-1);if(!stroke)throw Error("Disambiguation context expected a non-empty sequence");return strokePart??={...stroke,stroke:cloneKeyStroke(stroke.stroke)},strokePart},get exact(){return exact??=activation.collectActiveBindings(options.exactBindings,options.focused,options.activeView).map((binding)=>({...binding,sequence:cloneKeySequence(binding.sequence)})),exact},get continuations(){return continuations??=activation.getActiveKeysForCaptures(options.continuationCaptures,{includeBindings:!0,includeMetadata:!0}),continuations},getData:(name)=>{return runtime.getData(name)},setData:(name,value)=>{runtime.setData(name,value)},runExact:()=>createSyncDecision("run-exact"),continueSequence:()=>createSyncDecision("continue-sequence"),clear:()=>createSyncDecision("clear"),defer:(run)=>createSyncDecision("defer",run)};for(let resolver of state.disambiguationResolvers.values()){let result2;try{result2=resolver(ctx)}catch(error2){notify.emitError("disambiguation-resolver-error",error2,"[Keymap] Error in disambiguation resolver:");continue}if(result2===void 0)continue;if(isPromiseLike(result2)){notify.emitError("invalid-disambiguation-resolver-return",result2,"[Keymap] Disambiguation resolvers must return synchronously; use ctx.defer(...) for async handling");continue}if(!isSyncDecision(result2)){notify.emitError("invalid-disambiguation-decision",result2,"[Keymap] Invalid disambiguation decision returned by resolver:");continue}return result2}return}function scheduleDeferredDisambiguation(captures,handler,focused,sequence,apply){cancelPendingDisambiguation();let controller=new AbortController,pending={id:nextPendingDisambiguationId++,controller,captures,apply};pendingDisambiguation=pending,queueMicrotask(()=>{executeDeferredDisambiguation(pending,handler,focused,sequence)})}function executeDeferredDisambiguation(pending,handler,focused,sequence){if(!isPendingDisambiguationCurrent(pending))return;let ctx={signal:pending.controller.signal,sequence:cloneKeySequence(sequence),focused,sleep:(ms)=>{return sleepWithSignal(ms,pending.controller.signal)},runExact:()=>createDeferredDecision("run-exact"),continueSequence:()=>createDeferredDecision("continue-sequence"),clear:()=>createDeferredDecision("clear")},result2;try{result2=handler(ctx)}catch(error2){if(isPendingDisambiguationCurrent(pending))notify.emitError("deferred-disambiguation-error",error2,"[Keymap] Error in deferred disambiguation handler:"),finishPendingDisambiguation(pending);return}if(isPromiseLike(result2)){result2.then((resolved)=>{applyDeferredDisambiguationResult(pending,resolved)}).catch((error2)=>{if(!isPendingDisambiguationCurrent(pending))return;notify.emitError("deferred-disambiguation-error",error2,"[Keymap] Error in deferred disambiguation handler:"),finishPendingDisambiguation(pending)});return}applyDeferredDisambiguationResult(pending,result2)}function applyDeferredDisambiguationResult(pending,result2){if(!isPendingDisambiguationCurrent(pending))return;if(result2!==void 0&&!isDeferredDecision(result2)){notify.emitError("invalid-deferred-disambiguation-decision",result2,"[Keymap] Invalid deferred disambiguation decision returned by handler:"),finishPendingDisambiguation(pending);return}finishPendingDisambiguation(pending),pending.apply(result2)}function finishPendingDisambiguation(pending){if(!isPendingDisambiguationCurrent(pending))return;pendingDisambiguation=null}function cancelPendingDisambiguation(){let pending=pendingDisambiguation;if(!pending)return;pendingDisambiguation=null,pending.controller.abort()}function isPendingDisambiguationCurrent(pending){return pendingDisambiguation===pending}function warnUnresolvedAmbiguity(sequence){let display=stringifyKeySequence(sequence,{preferDisplay:!0});notify.warnOnce(`unresolved-disambiguation:${display}`,"unresolved-disambiguation",{sequence:display},`[Keymap] Ambiguous exact/prefix sequence "${display}" fell back to prefix handling because no disambiguation resolver resolved it`)}function collectPendingCapturesFromRoot(activeLayers,startIndex,matchKeys,event,focused){let captures=[],activeView=catalog.getActiveCommandView(focused);for(let index=startIndex;index<activeLayers.length;index+=1){let layer=activeLayers[index];if(!layer)continue;if(!conditions.matchesConditions(layer))continue;for(let capture2 of collectRootCaptures(layer,matchKeys,event,focused,activeView))if(captureHasContinuations(capture2,state.patterns,!1))captures.push(capture2)}return captures}function collectContinuationCapturesForPrefix(captures,startIndex,prefix){return captures.filter((candidate,candidateIndex)=>{return candidateIndex>=startIndex&&captureHasContinuations(candidate,state.patterns,!1)&&sameParts(candidate.parts,prefix.parts)})}function collectExactCapturesForPrefix(captures,prefix){return captures.filter((capture2)=>{return capture2.layer===prefix.layer&&captureIsExact(capture2,state.patterns)&&sameParts(capture2.parts,prefix.parts)})}function resolveEventMatchKeys(event){let resolvers=state.eventMatchResolvers.values();if(resolvers.length===0)return[];if(resolvers.length===1)return resolveSingleEventMatchKeys(resolvers[0],event,eventMatchResolverContext,notify);let keys=[],seen=new Set;for(let resolver of resolvers){let resolved;try{resolved=resolver(event,eventMatchResolverContext)}catch(error2){notify.emitError("event-match-resolver-error",error2,"[Keymap] Error in event match resolver:");continue}if(!resolved||resolved.length===0)continue;for(let candidate of resolved){if(typeof candidate!=="string"){notify.emitError("invalid-event-match-resolver-candidate",candidate,"[Keymap] Invalid event match resolver candidate:");continue}if(seen.has(candidate))continue;seen.add(candidate),keys.push(candidate)}}return keys}function runReleaseBindings(layer,strokeKey,event,focused){let handled=!1,outcome=noMatchOutcome();for(let binding of layer.bindings){if(binding.event!=="release")continue;let firstPart=binding.sequence[0];if(!firstPart||firstPart.match!==strokeKey)continue;if(!conditions.matchesConditions(binding))continue;let bindingHandled=executor.runBinding(layer,binding,event,focused);if(outcome=preferDispatchOutcome(outcome,createBindingOutcome(binding,bindingHandled)),!bindingHandled){emitBindingDispatch("binding-reject",layer,binding,focused);continue}if(emitBindingDispatch("binding-execute",layer,binding,focused),handled=!0,!binding.fallthrough)return{handled:!0,stop:!0,outcome}}return{handled,stop:!1,outcome}}function matchPattern(patternName,event){return matchSequencePattern(state.patterns,notify,patternName,event)}function createPatternEventPart2(event,patternName,match){return createPatternEventPart(state.patterns,event,patternName,match)}function collectRootCaptures(layer,matchKeys,event,focused,activeView){let captures=collectRootSequenceCaptures(layer,matchKeys,event,matchPattern,createPatternEventPart2);return captures.some((capture2)=>captureIsReachable(capture2,focused,activeView))?captures:[]}function createSequencePayload2(capture2){return createSequencePayload(state.patterns,notify,capture2)}function bindingMatchesRuntimeState(binding,focused,activeView){return conditions.matchesConditions(binding)&&catalog.isBindingVisible(binding,focused,activeView)}function captureIsReachable(capture2,focused,activeView){return bindingMatchesRuntimeState(capture2.binding,focused,activeView)}function runCaptureBindings(layer,captures,event,focused){let handled=!1,outcome=noMatchOutcome();for(let capture2 of captures){let binding=capture2.binding;if(!conditions.matchesConditions(binding))continue;let bindingHandled=executor.runBinding(layer,binding,event,focused,createSequencePayload2(capture2));if(outcome=preferDispatchOutcome(outcome,createBindingOutcome(binding,bindingHandled)),!bindingHandled){emitBindingDispatch("binding-reject",layer,binding,focused);continue}if(emitBindingDispatch("binding-execute",layer,binding,focused),handled=!0,!binding.fallthrough)return{handled:!0,stop:!0,outcome}}return{handled,stop:!1,outcome}}return{intercept,prependEventMatchResolver,appendEventMatchResolver,clearEventMatchResolvers,prependDisambiguationResolver,appendDisambiguationResolver,clearDisambiguationResolvers,handlePendingSequenceChange,handleRawSequence,handleKeyEvent}}function resolveSingleEventMatchKeys(resolver,event,ctx,notify){let resolved;try{resolved=resolver(event,ctx)}catch(error2){return notify.emitError("event-match-resolver-error",error2,"[Keymap] Error in event match resolver:"),[]}if(!resolved||resolved.length===0)return[];if(resolved.length===1){let[candidate]=resolved;if(typeof candidate!=="string")return notify.emitError("invalid-event-match-resolver-candidate",candidate,"[Keymap] Invalid event match resolver candidate:"),[];return[candidate]}let keys=[],seen=new Set;for(let candidate of resolved){if(typeof candidate!=="string"){notify.emitError("invalid-event-match-resolver-candidate",candidate,"[Keymap] Invalid event match resolver candidate:");continue}if(seen.has(candidate))continue;seen.add(candidate),keys.push(candidate)}return keys}function sameParts(left,right){if(left.length!==right.length)return!1;for(let index=0;index<left.length;index+=1)if(left[index]?.match!==right[index]?.match)return!1;return!0}function normalizePatternLimit(name,field,value,fallback){if(value===void 0)return fallback;if(typeof value!=="number"||!Number.isInteger(value)||value<0)throw Error(`Keymap sequence pattern "${name}" ${field} must be a non-negative integer`);return value}function registerFieldCompilers(fields,options){let{kind,reservedFields,registeredFields,emitError}=options,entries=Object.entries(fields),registered=[];for(let[name,compiler]of entries){if(reservedFields.has(name)){emitError(`reserved-${kind}-field`,{field:name,kind},`Keymap ${kind} field "${name}" is reserved`);continue}if(registeredFields.has(name)){emitError(`duplicate-${kind}-field`,{field:name,kind},`Keymap ${kind} field "${name}" is already registered`);continue}registeredFields.set(name,compiler),registered.push([name,compiler])}return()=>{for(let[name,compiler]of registered)if(registeredFields.get(name)===compiler)registeredFields.delete(name)}}function registerToken(state,notify,compiler,layers,token){let normalizedToken;try{normalizedToken=normalizeBindingTokenName(token.name)}catch(error2){return notify.emitError("token-name-normalize-error",error2,getErrorMessage(error2,"Failed to register keymap token")),NOOP}if(state.tokens.has(normalizedToken)||state.patterns.has(normalizedToken))return notify.emitError("duplicate-token",{token:normalizedToken},`Keymap token "${normalizedToken}" is already registered`),NOOP;let parsedToken;try{if(parsedToken=compiler.parseTokenKey(token.key),parsedToken.patternName)throw Error(`Invalid key "${String(token.key)}": expected a concrete key stroke`)}catch(error2){return notify.emitError("token-parse-error",error2,getErrorMessage(error2,`Failed to register keymap token "${normalizedToken}"`)),NOOP}let registeredToken={stroke:parsedToken.stroke,match:parsedToken.match},nextTokens=new Map(state.tokens);nextTokens.set(normalizedToken,registeredToken);try{layers.applyTokenState(nextTokens)}catch(error2){return notify.emitError("token-register-error",error2,getErrorMessage(error2,`Failed to register keymap token "${normalizedToken}"`)),NOOP}return()=>{if(state.tokens.get(normalizedToken)!==registeredToken)return;let nextTokens2=new Map(state.tokens);nextTokens2.delete(normalizedToken);try{layers.applyTokenState(nextTokens2)}catch(error2){notify.emitError("token-unregister-error",error2,getErrorMessage(error2,`Failed to unregister keymap token "${normalizedToken}"`))}}}function registerSequencePattern(state,notify,layers,pattern){let normalizedName,resolvedPattern;try{normalizedName=normalizeBindingTokenName(pattern.name);let min=normalizePatternLimit(normalizedName,"min",pattern.min,1),max=normalizePatternLimit(normalizedName,"max",pattern.max,Number.MAX_SAFE_INTEGER);if(max<min)throw Error(`Keymap sequence pattern "${normalizedName}" max must be greater than or equal to min`);resolvedPattern={name:normalizedName,display:pattern.display,payloadKey:pattern.payloadKey??normalizedName,match:createTextKeyMatch(`pattern:${normalizedName}`),min,max,matcher:(event)=>pattern.match(event),finalize:pattern.finalize}}catch(error2){return notify.emitError("sequence-pattern-register-error",error2,getErrorMessage(error2,"Failed to register keymap sequence pattern")),NOOP}if(state.tokens.has(normalizedName)||state.patterns.has(normalizedName))return notify.emitError("duplicate-sequence-pattern",{pattern:normalizedName},`Keymap sequence pattern "${normalizedName}" is already registered`),NOOP;return state.patterns.set(normalizedName,resolvedPattern),layers.recompileBindings(),()=>{if(state.patterns.get(normalizedName)!==resolvedPattern)return;state.patterns.delete(normalizedName),layers.recompileBindings()}}function registerFields(state,notify,kind,fields){let reservedFields=kind==="layer"?RESERVED_LAYER_FIELDS:kind==="binding"?RESERVED_BINDING_FIELDS:RESERVED_COMMAND_FIELDS,registeredFields=kind==="layer"?state.layerFields:kind==="binding"?state.bindingFields:state.commandFields;return registerFieldCompilers(fields,{kind,reservedFields,registeredFields,emitError:(code,error2,message)=>notify.emitError(code,error2,message)})}function compareLayers(left,right){return right.priority-left.priority||right.order-left.order}function layerBlocksActiveKeyCache(layer){if(layer.matchers.length>0)return!0;for(let command of layer.commands)if(command.matchers.length>0)return!0;for(let binding of layer.bindings)if(binding.matchers.length>0)return!0;return!1}function layerBlocksActiveCommandViewCache(layer){if(layer.commands.length===0)return!1;if(layer.matchers.length>0)return!0;for(let command of layer.commands)if(command.matchers.length>0)return!0;return!1}function createLayerService(state,notify,conditions,activation,options){let registerLayer=(layer)=>{return notify.runWithStateChangeBatch(()=>{let target=layer.target;if(target&&options.host.isTargetDestroyed(target))return notify.emitError("destroyed-layer-target",{target},"Cannot register a keymap layer for a destroyed keymap target"),NOOP2;let sourceBindings,requires,matchers,fields,attrs,commands,targetMode;try{targetMode=normalizeTargetMode(layer),sourceBindings=applyLayerBindingsTransformers(snapshotBindings(layer.bindings??[]),layer);let sourceCommands=applyCommandTransformers(layer.commands??[],layer);commands=sourceCommands.length===0?[]:options.commands.normalizeCommands(sourceCommands),{requires,matchers,fields,attrs}=compileLayerRuntimeState(layer)}catch(error2){return notify.emitError("register-layer-failed",error2,getErrorMessage(error2,"Failed to register keymap layer")),NOOP2}let order=state.order++,bindingStates=options.compiler.compileBindings(sourceBindings,state.tokens,target,order,fields);if(bindingStates.bindings.length===0&&!bindingStates.hasTokenBindings&&commands.length===0)return NOOP2;options.diagnostics?.analyzeLayer({target,order,commands,sourceBindings,bindings:bindingStates.bindings,hasTokenBindings:bindingStates.hasTokenBindings});let registeredLayer={order,target,targetMode,priority:layer.priority??0,requires,matchers,fields,attrs,commands,sourceBindings,bindings:bindingStates.bindings,root:buildSequenceTree(bindingStates.bindings,state.patterns),hasTokenBindings:bindingStates.hasTokenBindings,activeKeyCacheBlocked:!1,activeCommandViewCacheBlocked:!1};updateCacheBlockers(registeredLayer),state.layers.add(registeredLayer),state.sortedLayers=[...state.sortedLayers,registeredLayer].sort(compareLayers),attachReactiveMatchers(registeredLayer);for(let command of registeredLayer.commands)attachReactiveMatchers(command);for(let binding of registeredLayer.bindings)attachReactiveMatchers(binding);if(target){let onTargetDestroy=()=>{unregisterLayer(registeredLayer)};registeredLayer.offTargetDestroy=options.host.onTargetDestroy(target,onTargetDestroy)}if(registeredLayer.commands.length>0)activation.ensureValidPendingSequence();return notify.queueStateChange(),()=>{unregisterLayer(registeredLayer)}})},applyTokenState=(nextTokens)=>{notify.runWithStateChangeBatch(()=>{let nextCompilations=new Map;for(let layer of state.layers){if(!layer.hasTokenBindings)continue;nextCompilations.set(layer,compileLayerBindings(layer,nextTokens))}state.tokens=nextTokens;let shouldClearPending=!1;for(let[layer,compilation]of nextCompilations)if(applyBindingStates(layer,compilation))shouldClearPending=!0;if(shouldClearPending)activation.setPendingSequence(null);if(nextCompilations.size>0)notify.queueStateChange()})},recompileBindings=()=>{notify.runWithStateChangeBatch(()=>{let recompiledLayers=0,shouldClearPending=!1;for(let layer of state.layers){if(layer.sourceBindings.length===0)continue;let compilation=compileLayerBindings(layer,state.tokens);if(applyBindingStates(layer,compilation))shouldClearPending=!0;recompiledLayers+=1}if(shouldClearPending)activation.setPendingSequence(null);if(recompiledLayers>0)notify.queueStateChange()})},cleanup=()=>{for(let layer of state.layers){detachReactiveMatchers(layer);for(let command of layer.commands)detachReactiveMatchers(command);for(let binding of layer.bindings)detachReactiveMatchers(binding);layer.offTargetDestroy?.(),layer.offTargetDestroy=void 0}},normalizeTargetMode=(layer)=>{if(layer.targetMode){if(!layer.target)throw Error(`Keymap targetMode "${layer.targetMode}" requires a target`);return layer.targetMode}return layer.target?"focus-within":void 0},applyLayerBindingsTransformers=(bindings,layer)=>{let transformers=state.layerBindingsTransformers.values();if(transformers.length===0)return bindings;let current=bindings;for(let transformer of transformers){let next=transformer(current,{layer,validateBindings:(bindings2)=>validateBindings(bindings2)});if(!next)continue;current=snapshotBindings(next)}return current},applyCommandTransformers=(commands,layer)=>{let transformers=state.commandTransformers.values();if(commands.length===0||transformers.length===0)return commands;let transformedCommands=[];for(let command of commands){let transformedCommand={...command},extraCommands=[],keepOriginal=!0;for(let transformer of transformers)try{transformer(transformedCommand,{layer,add(nextCommand){extraCommands.push({...nextCommand})},skipOriginal(){keepOriginal=!1}})}catch(error2){notify.emitError("command-transformer-error",error2,"[Keymap] Error in command transformer:")}if(keepOriginal)transformedCommands.push(transformedCommand);transformedCommands.push(...extraCommands)}return transformedCommands},compileLayerRuntimeState=(layer)=>{let mergedRequires={},matchers=[],fields=Object.create(null),attrs={};for(let[fieldName,value]of Object.entries(layer)){if(RESERVED_LAYER_FIELDS.has(fieldName))continue;if(value===void 0)continue;fields[fieldName]=snapshotDataValue(value);let compiler=state.layerFields.get(fieldName);if(!compiler){options.warnUnknownField("layer",fieldName);continue}compiler(value,createFieldCompilerContext({fieldName,conditions,requirements:mergedRequires,matchers,attrs}))}return{requires:Object.entries(mergedRequires),matchers,fields:Object.keys(fields).length>0?Object.freeze(fields):void 0,attrs:Object.keys(attrs).length>0?snapshotDataValue(attrs,{freeze:!0}):void 0}},compileLayerBindings=(layer,tokens2)=>{return options.compiler.compileBindings(layer.sourceBindings,tokens2,layer.target,layer.order,layer.fields)},applyBindingStates=(layer,compilation)=>{options.diagnostics?.analyzeLayer({target:layer.target,order:layer.order,commands:layer.commands,sourceBindings:layer.sourceBindings,bindings:compilation.bindings,hasTokenBindings:compilation.hasTokenBindings}),untrackCacheBlockers(layer);for(let binding of layer.bindings)detachReactiveMatchers(binding);layer.bindings=compilation.bindings,layer.root=buildSequenceTree(compilation.bindings,state.patterns),layer.hasTokenBindings=compilation.hasTokenBindings,updateCacheBlockers(layer);for(let binding of layer.bindings)attachReactiveMatchers(binding);return state.pending?.captures.some((capture2)=>capture2.layer===layer)??!1},unregisterLayer=(layer)=>{notify.runWithStateChangeBatch(()=>{if(!state.layers.delete(layer))return;state.sortedLayers=state.sortedLayers.filter((candidate)=>candidate!==layer),untrackCacheBlockers(layer),detachReactiveMatchers(layer);for(let command of layer.commands)detachReactiveMatchers(command);for(let binding of layer.bindings)detachReactiveMatchers(binding);if(layer.offTargetDestroy?.(),layer.offTargetDestroy=void 0,state.pending?.captures.some((capture2)=>capture2.layer===layer))activation.setPendingSequence(null);else if(layer.commands.length>0&&!options.host.isDestroyed)activation.ensureValidPendingSequence();notify.queueStateChange()})},attachReactiveMatchers=(target)=>{for(let matcher of target.matchers){if(!matcher.subscribe)continue;try{matcher.dispose=matcher.subscribe(()=>{if(!activation.hasPendingSequenceState()){notify.queueStateChange();return}notify.runWithStateChangeBatch(()=>{activation.revalidatePendingSequenceIfNeeded(),notify.queueStateChange()})})}catch(error2){notify.emitError("reactive-matcher-subscribe-error",error2,getErrorMessage(error2,`Failed to subscribe to reactive matcher from ${matcher.source}`))}}},updateCacheBlockers=(layer)=>{let activeKeyBlocked=layerBlocksActiveKeyCache(layer),activeCommandViewBlocked=layerBlocksActiveCommandViewCache(layer);if(layer.activeKeyCacheBlocked=activeKeyBlocked,layer.activeCommandViewCacheBlocked=activeCommandViewBlocked,activeKeyBlocked)state.activeKeyCacheBlockers+=1;if(activeCommandViewBlocked)state.activeCommandViewCacheBlockers+=1},untrackCacheBlockers=(layer)=>{if(layer.activeKeyCacheBlocked)state.activeKeyCacheBlockers-=1,layer.activeKeyCacheBlocked=!1;if(layer.activeCommandViewCacheBlocked)state.activeCommandViewCacheBlockers-=1,layer.activeCommandViewCacheBlocked=!1},detachReactiveMatchers=(target)=>{for(let matcher of target.matchers){if(!matcher.dispose)continue;try{matcher.dispose()}catch(error2){notify.emitError("reactive-matcher-dispose-error",error2,getErrorMessage(error2,`Failed to dispose reactive matcher from ${matcher.source}`))}matcher.dispose=void 0}};return{registerLayer,applyTokenState,recompileBindings,cleanup}}function createNotificationService(state,events,hooks){let emitWarning=(code,warning,message)=>{if(!events.has("warning")){let consoleMessage=`[${code}] ${message}`;if(warning instanceof Error)console.warn(consoleMessage,warning);else console.warn(consoleMessage);return}events.emit("warning",{code,message,warning})},emitError=(code,error2,message)=>{if(!events.has("error")){let consoleMessage=`[${code}] ${message}`;if(error2 instanceof Error)console.error(consoleMessage,error2);else console.error(consoleMessage);return}events.emit("error",{code,message,error:error2})},flushStateChange=()=>{if(!state.stateChangePending||state.stateChangeDepth>0||state.flushingStateChange)return;state.flushingStateChange=!0;try{let iterations=0;while(state.stateChangePending&&state.stateChangeDepth===0){if(iterations>=MAX_STATE_CHANGE_FLUSH_ITERATIONS){state.stateChangePending=!1,emitError("state-change-feedback-loop",{iterations:MAX_STATE_CHANGE_FLUSH_ITERATIONS},`[Keymap] Possible infinite state listener feedback loop detected after ${MAX_STATE_CHANGE_FLUSH_ITERATIONS} iterations; pending state notifications were dropped`);break}iterations+=1,state.stateChangePending=!1,hooks.emit("state")}}finally{state.flushingStateChange=!1}};return{runWithStateChangeBatch(fn){state.stateChangeDepth+=1;try{return fn()}finally{if(state.stateChangeDepth-=1,state.stateChangeDepth===0)flushStateChange()}},queueStateChange(options){if(state.derivedVersion+=1,options?.invalidateCaches!==!1)state.cacheVersion+=1;if(!hooks.has("state"))return;if(state.stateChangePending=!0,state.stateChangeDepth===0&&!state.flushingStateChange)flushStateChange()},emitWarning,emitError,reportListenerError(name,error2){if(name==="state"){emitError("state-listener-error",error2,"[Keymap] Error in state listener:");return}if(name==="pendingSequence"){emitError("pending-sequence-listener-error",error2,"[Keymap] Error in pending sequence listener:");return}if(name==="dispatch")emitError("dispatch-listener-error",error2,"[Keymap] Error in dispatch listener:")},warnOnce(key,code,warning,message){if(state.usedWarningKeys.has(key))return;state.usedWarningKeys.add(key),emitWarning(code,warning,message)}}}function createRuntimeService(state,notify,activation){return{getData(name){return state.data[name]},setData(name,value){notify.runWithStateChangeBatch(()=>{if(value===void 0){if(!(name in state.data))return;delete state.data[name],state.dataVersion+=1,activation.ensureValidPendingSequence(),notify.queueStateChange();return}if(Object.is(state.data[name],value))return;state.data[name]=value,state.dataVersion+=1,activation.ensureValidPendingSequence(),notify.queueStateChange()})},getReadonlyData(){if(state.readonlyDataVersion===state.dataVersion)return state.readonlyData;return state.readonlyData=Object.freeze({...state.data}),state.readonlyDataVersion=state.dataVersion,state.readonlyData}}}function createKeymapState(){return{order:0,tokens:new Map,patterns:new Map,layerFields:new Map,layerBindingsTransformers:createRuntimeOrderedRegistry(),bindingExpanders:createRuntimeOrderedRegistry(),bindingParsers:createRuntimeOrderedRegistry(),bindingTransformers:createRuntimeOrderedRegistry(),bindingFields:new Map,commandTransformers:createRuntimeOrderedRegistry(),commandFields:new Map,eventMatchResolvers:createRuntimeOrderedRegistry(),disambiguationResolvers:createRuntimeOrderedRegistry(),keyHooks:createRuntimePriorityRegistry(),keyAfterHooks:createRuntimePriorityRegistry(),rawHooks:createRuntimePriorityRegistry(),layers:new Set,sortedLayers:[],activeLayersCacheVersion:-1,activeLayersCacheFocused:void 0,activeLayersCache:[],activeKeyCacheBlockers:0,activeCommandViewCacheBlockers:0,commandResolvers:createRuntimeOrderedRegistry(),pending:null,data:{},dataVersion:0,readonlyDataVersion:-1,readonlyData:EMPTY_DATA,cacheVersion:0,derivedVersion:0,stateChangeDepth:0,stateChangePending:!1,flushingStateChange:!1,usedWarningKeys:new Set}}function getKeyMatchKey(input){return resolveKeyMatch(input)}var RESERVED_COMMAND_FIELDS,RESERVED_BINDING_FIELDS,RESERVED_LAYER_FIELDS,DEFAULT_COMMAND_SEARCH_FIELDS,EMPTY_COMMAND_FIELDS,commandSearchCache,EMPTY_COMPILE_FIELDS,EMPTY_REQUIRES,EMPTY_MATCHERS,KEY_DISAMBIGUATION_DECISION,KEY_DEFERRED_DISAMBIGUATION_DECISION,NOOP=()=>{},NOOP2=()=>{},MAX_STATE_CHANGE_FLUSH_ITERATIONS=1000,EMPTY_DATA,Keymap;var init_src2=__esm(()=>{init_index_frk6sdcd();RESERVED_COMMAND_FIELDS=new Set(["name","run","fields","attrs","rejectedResult"]),RESERVED_BINDING_FIELDS=new Set(["key","cmd","event","preventDefault","fallthrough"]),RESERVED_LAYER_FIELDS=new Set(["target","targetMode","priority","bindings","commands"]);DEFAULT_COMMAND_SEARCH_FIELDS=["name"],EMPTY_COMMAND_FIELDS=Object.freeze({}),commandSearchCache=new WeakMap;EMPTY_COMPILE_FIELDS=Object.freeze({}),EMPTY_REQUIRES=[],EMPTY_MATCHERS=[];KEY_DISAMBIGUATION_DECISION=Symbol("keymap-disambiguation-decision"),KEY_DEFERRED_DISAMBIGUATION_DECISION=Symbol("keymap-deferred-disambiguation-decision");EMPTY_DATA=Object.freeze({});Keymap=class Keymap{#state=createKeymapState();#cleanedUp=!1;#resources=new Map;#cleanupListeners=[];#events=createRuntimeEmitter(()=>{});#hooks;#notify;#activation;#runtime;#conditions;#catalog;#executor;#compiler;#dispatch;#layers;#layerDiagnostics;#keypressListener;#keyreleaseListener;#rawListener;#focusedTargetListener;#host;getPendingSequence;getActiveKeys;constructor(host){if(this.#host=host,host.isDestroyed)throw Error("Cannot create a keymap for a destroyed host");if(this.#hooks=createRuntimeEmitter((name,error2)=>{this.#notify.reportListenerError(name,error2)}),this.#notify=createNotificationService(this.#state,this.#events,this.#hooks),this.#conditions=createConditionService(this.#state,this.#notify),this.#catalog=createCommandCatalogService(this.#state,this.#host,this.#notify,this.#conditions,{onCommandResolversChanged:()=>{this.#activation.ensureValidPendingSequence()}}),this.#activation=createActivationService(this.#state,this.#host,this.#hooks,this.#notify,this.#conditions,this.#catalog,{onPendingSequenceChanged:(previous,next)=>{this.#dispatch?.handlePendingSequenceChange(previous,next)}}),this.#runtime=createRuntimeService(this.#state,this.#notify,this.#activation),this.#executor=createCommandExecutorService(this.#notify,this.#runtime,this.#activation,this.#catalog,{keymap:this,createCommandEvent:()=>this.#host.createCommandEvent()}),this.#compiler=createCompilerService(this.#state,this.#notify,this.#conditions,{warnUnknownField:(kind,fieldName)=>{this.#warnUnknownField(kind,fieldName)},warnUnknownToken:(token,sequence)=>{this.#warnUnknownToken(token,sequence)}}),this.#layerDiagnostics=createLayerDiagnostics(this.#notify,this.#catalog),this.#layers=createLayerService(this.#state,this.#notify,this.#conditions,this.#activation,{compiler:this.#compiler,commands:this.#catalog,host:this.#host,diagnostics:this.#layerDiagnostics,warnUnknownField:(kind,fieldName)=>{this.#warnUnknownField(kind,fieldName)}}),this.#dispatch=createDispatchService(this.#state,this.#notify,this.#runtime,this.#activation,this.#conditions,this.#executor,this.#compiler,this.#catalog,this.#layers,this.#hooks),this.getPendingSequence=this.#activation.getPendingSequence,this.getActiveKeys=this.#activation.getActiveKeys,this.#keypressListener=(event)=>{this.#dispatch.handleKeyEvent(event,!1)},this.#keyreleaseListener=(event)=>{this.#dispatch.handleKeyEvent(event,!0)},this.#rawListener=(sequence)=>{return this.#dispatch.handleRawSequence(sequence)},this.#focusedTargetListener=(focused)=>{this.#handleFocusedTargetChange(focused)},this.#cleanupListeners.push(this.#host.onKeyPress(this.#keypressListener)),this.#cleanupListeners.push(this.#host.onKeyRelease(this.#keyreleaseListener)),this.#host.onRawInput)this.#cleanupListeners.push(this.#host.onRawInput(this.#rawListener));if(this.#cleanupListeners.push(this.#host.onFocusChange(this.#focusedTargetListener)),this.#host.onDestroy)this.#cleanupListeners.push(this.#host.onDestroy(()=>{this.#cleanup()}))}[KEYMAP_EXTENSION_CONTEXT](){return{state:this.#state,host:this.#host,conditions:this.#conditions,catalog:this.#catalog,activation:this.#activation}}#cleanup(){if(this.#cleanedUp)return;this.#cleanedUp=!0,this.#activation.setPendingSequence(null);for(let resource of this.#resources.values())resource.dispose();this.#resources.clear(),this.#layers.cleanup();for(let cleanupListener of this.#cleanupListeners.splice(0))cleanupListener()}setData(name,value){this.#runtime.setData(name,value)}getData(name){return this.#runtime.getData(name)}getHostMetadata(){return this.#host.metadata}hasPendingSequence(){return this.#activation.ensureValidPendingSequence()!==void 0}createKeyMatcher(key){let match=this.#compiler.parseTokenKey(key).match;return(input)=>{if(!input)return!1;return getKeyMatchKey(input)===match}}parseKeySequence(key){return this.#compiler.parseKeySequence(key)}formatKey(key,options){return this.#compiler.formatKey(key,options)}clearPendingSequence(){this.#activation.setPendingSequence(null)}popPendingSequence(){return this.#activation.popPendingSequence()}getCommands(query2){return this.#catalog.getCommands(query2)}getCommandEntries(query2){return this.#catalog.getCommandEntries(query2)}getCommandBindings(query2){return this.#catalog.getCommandBindings(query2)}acquireResource(key,setup){if(this.#cleanedUp||this.#host.isDestroyed)throw Error("Cannot use a keymap after its host was destroyed");let existing=this.#resources.get(key);if(existing)return existing.count+=1,()=>{this.#releaseResource(key,existing)};let resource={count:1,dispose:setup()};return this.#resources.set(key,resource),()=>{this.#releaseResource(key,resource)}}runCommand(cmd,options){return this.#executor.runCommand(cmd,options)}dispatchCommand(cmd,options){return this.#executor.dispatchCommand(cmd,options)}on(name,fn){if(name==="warning")return this.#events.hook(name,fn);if(name==="error")return this.#events.hook(name,fn);return this.#hooks.hook(name,fn)}intercept(name,fn,options){if(name==="key")return this.#dispatch.intercept(name,fn,options);if(name==="key:after")return this.#dispatch.intercept(name,fn,options);return this.#dispatch.intercept(name,fn,options)}registerLayer(layer){return this.#layers.registerLayer(layer)}registerLayerFields(fields){return registerFields(this.#state,this.#notify,"layer",fields)}prependLayerBindingsTransformer(transformer){return this.#state.layerBindingsTransformers.prepend(transformer)}appendLayerBindingsTransformer(transformer){return this.#state.layerBindingsTransformers.append(transformer)}clearLayerBindingsTransformers(){this.#state.layerBindingsTransformers.clear()}prependBindingTransformer(transformer){return this.#state.bindingTransformers.prepend(transformer)}appendBindingTransformer(transformer){return this.#state.bindingTransformers.append(transformer)}clearBindingTransformers(){this.#state.bindingTransformers.clear()}prependCommandTransformer(transformer){return this.#state.commandTransformers.prepend(transformer)}appendCommandTransformer(transformer){return this.#state.commandTransformers.append(transformer)}clearCommandTransformers(){this.#state.commandTransformers.clear()}prependBindingParser(parser){return this.#state.bindingParsers.prepend(parser)}appendBindingParser(parser){return this.#state.bindingParsers.append(parser)}clearBindingParsers(){this.#state.bindingParsers.clear()}registerToken(token){return registerToken(this.#state,this.#notify,this.#compiler,this.#layers,token)}registerSequencePattern(pattern){return registerSequencePattern(this.#state,this.#notify,this.#layers,pattern)}prependBindingExpander(expander){return this.#state.bindingExpanders.prepend(expander)}appendBindingExpander(expander){return this.#state.bindingExpanders.append(expander)}clearBindingExpanders(){this.#state.bindingExpanders.clear()}registerBindingFields(fields){return registerFields(this.#state,this.#notify,"binding",fields)}registerCommandFields(fields){return registerFields(this.#state,this.#notify,"command",fields)}prependCommandResolver(resolver){return this.#catalog.prependCommandResolver(resolver)}appendCommandResolver(resolver){return this.#catalog.appendCommandResolver(resolver)}clearCommandResolvers(){this.#catalog.clearCommandResolvers()}prependLayerAnalyzer(analyzer){return this.#layerDiagnostics.prependLayerAnalyzer(analyzer)}appendLayerAnalyzer(analyzer){return this.#layerDiagnostics.appendLayerAnalyzer(analyzer)}clearLayerAnalyzers(){this.#layerDiagnostics.clearLayerAnalyzers()}prependEventMatchResolver(resolver){return this.#dispatch.prependEventMatchResolver(resolver)}appendEventMatchResolver(resolver){return this.#dispatch.appendEventMatchResolver(resolver)}clearEventMatchResolvers(){this.#dispatch.clearEventMatchResolvers()}prependDisambiguationResolver(resolver){return this.#dispatch.prependDisambiguationResolver(resolver)}appendDisambiguationResolver(resolver){return this.#dispatch.appendDisambiguationResolver(resolver)}clearDisambiguationResolvers(){this.#dispatch.clearDisambiguationResolvers()}#handleFocusedTargetChange(_focused){this.#notify.runWithStateChangeBatch(()=>{this.#activation.setPendingSequence(null),this.#notify.queueStateChange({invalidateCaches:!1})})}#warnUnknownField(kind,fieldName){this.#notify.warnOnce(`${kind}:${fieldName}`,`unknown-${kind}-field`,{field:fieldName,kind},`[Keymap] Unknown ${kind} field "${fieldName}" was ignored`)}#warnUnknownToken(token,sequence){this.#notify.warnOnce(`token:${token}`,"unknown-token",{token,sequence},`[Keymap] Unknown token "${token}" in key sequence "${sequence}" was ignored`)}#releaseResource(key,resource){if(this.#resources.get(key)!==resource)return;if(resource.count-=1,resource.count>0)return;resource.dispose(),this.#resources.delete(key)}}});function createPrefixBuckets(values2){let buckets=new Map;for(let value of values2){let first=value.charCodeAt(0);if(Number.isNaN(first))continue;let bucket=buckets.get(first);if(!bucket)bucket=[],buckets.set(first,bucket);bucket.push(value)}for(let bucket of buckets.values())bucket.sort((left,right)=>right.length-left.length);return buckets}function toLowerAsciiCode(code){return code>=65&&code<=90?code+32:code}function isDigitCode(code){return code>=48&&code<=57}function startsWithAsciiInsensitive(input,prefix,index){if(input.startsWith(prefix,index))return!0;if(index+prefix.length>input.length)return!1;for(let offset=0;offset<prefix.length;offset+=1)if(toLowerAsciiCode(input.charCodeAt(index+offset))!==prefix.charCodeAt(offset))return!1;return!0}function findBucketedPrefixMatch(buckets,input,index){let first=input.charCodeAt(index);if(Number.isNaN(first))return;let candidates=buckets.get(toLowerAsciiCode(first));if(!candidates)return;for(let candidate of candidates)if(startsWithAsciiInsensitive(input,candidate,index))return candidate;return}function parseObjectKeyInput(ctx,key,display,match,tokenName){return ctx.parseObjectKey(key,{display,match,tokenName})}function parseStringKeyPart(input,ctx){if(input===" ")return ctx.parseObjectKey({name:"space"},{display:"space"});if(input==="+")return ctx.parseObjectKey({name:"+"},{display:"+"});let parts=input.split("+"),name="",displayName="",ctrl=!1,shift=!1,meta=!1,superKey=!1,hyper=!1;for(let rawPart of parts){let part=rawPart.trim();if(!part)continue;let lowered=part.toLowerCase();if(lowered==="ctrl"||lowered==="control"){ctrl=!0;continue}if(lowered==="shift"){shift=!0;continue}if(lowered==="meta"||lowered==="alt"||lowered==="option"){meta=!0;continue}if(lowered==="super"){superKey=!0;continue}if(lowered==="hyper"){hyper=!0;continue}if(name)throw Error(`Invalid key "${input}": multiple key names are not supported`);name=part,displayName=lowered}if(!name)throw Error(`Invalid key "${input}": missing key name`);let displayParts=[];if(ctrl)displayParts.push("ctrl");if(shift)displayParts.push("shift");if(meta)displayParts.push("meta");if(superKey)displayParts.push("super");if(hyper)displayParts.push("hyper");return displayParts.push(displayName),ctx.parseObjectKey({name,ctrl,shift,meta,super:superKey,hyper:hyper||void 0},{display:displayParts.join("+")})}function parseNamedKeyPart(name,ctx){let normalized=name.trim().toLowerCase();return ctx.parseObjectKey({name:normalized},{display:normalized})}function findNamedSingleStrokeKey(input,index){let namedKey=findBucketedPrefixMatch(namedSingleStrokeKeyPrefixes,input,index);if(namedKey)return namedKey;if(toLowerAsciiCode(input.charCodeAt(index))!==102||!isDigitCode(input.charCodeAt(index+1)))return;let end=isDigitCode(input.charCodeAt(index+2))?index+3:index+2;return input.slice(index,end).toLowerCase()}function findModifierKey(input,index){return findBucketedPrefixMatch(modifierKeyPrefixes,input,index)}function parseModifiedKeyPart(input,index,ctx){let cursor=index,ctrl=!1,shift=!1,meta=!1,superKey=!1,hyper=!1;while(cursor<input.length){let modifier=findModifierKey(input,cursor);if(!modifier)break;let plusIndex=cursor+modifier.length;if(input[plusIndex]!=="+")break;if(modifier==="ctrl"||modifier==="control")ctrl=!0;else if(modifier==="shift")shift=!0;else if(modifier==="meta"||modifier==="alt"||modifier==="option")meta=!0;else if(modifier==="super")superKey=!0;else if(modifier==="hyper")hyper=!0;cursor=plusIndex+1}if(cursor===index)return;let char=input[cursor];if(char===void 0)throw Error(`Invalid key "${input.slice(index)}": missing key name`);let name=findNamedSingleStrokeKey(input,cursor)??char,displayName=name===" "?"space":name==="+"?"+":name.toLowerCase(),displayParts=[];if(ctrl)displayParts.push("ctrl");if(shift)displayParts.push("shift");if(meta)displayParts.push("meta");if(superKey)displayParts.push("super");if(hyper)displayParts.push("hyper");return displayParts.push(displayName),{part:ctx.parseObjectKey({name:name===" "?"space":name,ctrl,shift,meta,super:superKey,hyper:hyper||void 0},{display:displayParts.join("+")}),nextIndex:cursor+name.length}}function registerDefaultBindingParser(keymap){return keymap.appendBindingParser((ctx)=>defaultBindingParser(ctx))}function registerDefaultEventMatchResolver(keymap){return keymap.appendEventMatchResolver((event,ctx)=>defaultEventMatchResolver(event,ctx))}function registerDefaultKeys(keymap){let offParser=registerDefaultBindingParser(keymap),offResolver=registerDefaultEventMatchResolver(keymap);return()=>{offResolver(),offParser()}}function registerEscapeClearsPendingSequence(keymap,options){let shouldPreventDefault=options?.preventDefault??!0;return keymap.intercept("key",({event,consume})=>{if(event.name!=="escape")return;if(!keymap.hasPendingSequence())return;if(keymap.clearPendingSequence(),shouldPreventDefault)consume()},{priority:options?.priority??0})}function isReactiveMatcher2(value){if(!value||typeof value!=="object")return!1;let candidate=value;return typeof candidate.get==="function"&&typeof candidate.subscribe==="function"}function normalizeEnabledValue(fieldName,value){if(typeof value==="boolean")return value;if(typeof value==="function")return value;if(isReactiveMatcher2(value))return value;throw Error(`Keymap enabled field "${fieldName}" must be a boolean, a function, or a reactive matcher`)}function registerEnabledFields(keymap){return keymap.acquireResource(ENABLED_FIELDS_RESOURCE,()=>{let offLayerFields=keymap.registerLayerFields({enabled(value,ctx){let normalized=normalizeEnabledValue("enabled",value);if(normalized===!0)return;if(normalized===!1){ctx.activeWhen(()=>!1);return}ctx.activeWhen(normalized)}}),offCommandFields=keymap.registerCommandFields({enabled(value,ctx){let normalized=normalizeEnabledValue("enabled",value);if(normalized===!0)return;if(normalized===!1){ctx.activeWhen(()=>!1);return}ctx.activeWhen(normalized)}});return()=>{offCommandFields(),offLayerFields()}})}function isLeaderTriggerArray(trigger){return Array.isArray(trigger)}function resolveLeaderTrigger(trigger){if(isLeaderTriggerArray(trigger)){if(trigger.length!==1)throw Error("Invalid leader trigger: expected exactly one binding");return trigger[0].key}if(typeof trigger==="object"&&"key"in trigger)return trigger.key;return trigger}function registerLeader(keymap,options){return keymap.registerToken({name:options.name??"leader",key:resolveLeaderTrigger(options.trigger)})}function normalizeMetadataText(fieldName,value){if(typeof value!=="string")throw Error(`Keymap metadata field "${fieldName}" must be a string`);let trimmed=value.trim();if(!trimmed)throw Error(`Keymap metadata field "${fieldName}" cannot be empty`);return trimmed}function registerMetadataFields(keymap){return keymap.acquireResource(METADATA_FIELDS_RESOURCE,()=>{let offBindingFields=keymap.registerBindingFields({desc(value,ctx){ctx.attr("desc",normalizeMetadataText("desc",value))},group(value,ctx){ctx.attr("group",normalizeMetadataText("group",value))}}),offCommandFields=keymap.registerCommandFields({desc(value,ctx){ctx.attr("desc",normalizeMetadataText("desc",value))},title(value,ctx){ctx.attr("title",normalizeMetadataText("title",value))},category(value,ctx){ctx.attr("category",normalizeMetadataText("category",value))}});return()=>{offCommandFields(),offBindingFields()}})}var namedSingleStrokeKeys,modifierKeyNames,namedSingleStrokeKeyPrefixes,modifierKeyPrefixes,defaultBindingParser=(ctx)=>{let{input,index,tokens:tokens2,normalizeTokenName}=ctx;if(index===0&&input.includes("+")&&/\s/.test(input))return{parts:[parseStringKeyPart(input,ctx)],nextIndex:input.length};let char=input[index];if(char===void 0)return;if(char==="<"){let end=input.indexOf(">",index);if(end===-1)return{parts:[parseStringKeyPart(char,ctx)],nextIndex:index+1};let tokenName=normalizeTokenName(input.slice(index+1,end)),token=tokens2.get(tokenName);if(!token)return{parts:[],nextIndex:end+1,unknownTokens:[tokenName]};return{parts:[parseObjectKeyInput(ctx,token.stroke,`<${tokenName}>`,token.match,tokenName)],nextIndex:end+1,usedTokens:[tokenName]}}if(char==="{"){let end=input.indexOf("}",index);if(end===-1)return{parts:[parseStringKeyPart(char,ctx)],nextIndex:index+1};let patternName=normalizeTokenName(input.slice(index+1,end)),pattern=ctx.patterns.get(patternName);if(!pattern)return{parts:[],nextIndex:end+1,unknownTokens:[patternName]};return{parts:[{...ctx.parseObjectKey({name:patternName,ctrl:!1,shift:!1,meta:!1,super:!1},{display:pattern.display??`{${patternName}}`,match:pattern.match}),patternName:pattern.name,payloadKey:pattern.payloadKey}],nextIndex:end+1,usedTokens:[patternName]}}let modified=parseModifiedKeyPart(input,index,ctx);if(modified)return{parts:[modified.part],nextIndex:modified.nextIndex};let namedKey=findNamedSingleStrokeKey(input,index);if(namedKey)return{parts:[parseNamedKeyPart(namedKey,ctx)],nextIndex:index+namedKey.length};return{parts:[parseStringKeyPart(char,ctx)],nextIndex:index+1}},defaultEventMatchResolver=(event,ctx)=>{return[ctx.resolveKey({name:event.name,ctrl:event.ctrl,shift:event.shift,meta:event.meta,super:event.super??!1,hyper:event.hyper||void 0})]},BINDING_OVERRIDES_RESOURCE,ALIASES_FIELD_RESOURCE,COMMA_BINDINGS_RESOURCE,DEAD_BINDING_WARNINGS_RESOURCE,ENABLED_FIELDS_RESOURCE,EMACS_BINDINGS_RESOURCE,EX_COMMANDS_RESOURCE,METADATA_FIELDS_RESOURCE,MOD_BINDINGS_RESOURCE,UNRESOLVED_COMMAND_WARNINGS_RESOURCE;var init_addons=__esm(()=>{init_src2();init_src2();namedSingleStrokeKeys=new Set(["up","down","left","right","clear","escape","return","linefeed","enter","tab","backspace","delete","insert","home","end","pageup","pagedown","space","lt","gt","plus","minus","equal","comma","period","slash","backslash","semicolon","quote","backquote","leftbracket","rightbracket","capslock","numlock","scrolllock","printscreen","pause","menu","apps","kp0","kp1","kp2","kp3","kp4","kp5","kp6","kp7","kp8","kp9","kpdecimal","kpdivide","kpmultiply","kpminus","kpplus","kpenter","kpequal","kpseparator","kpleft","kpright","kpup","kpdown","kppageup","kppagedown","kphome","kpend","kpinsert","kpdelete","mediaplay","mediapause","mediaplaypause","mediareverse","mediastop","mediafastforward","mediarewind","medianext","mediaprev","mediarecord","volumedown","volumeup","mute","leftshift","leftctrl","leftalt","leftsuper","lefthyper","leftmeta","rightshift","rightctrl","rightalt","rightsuper","righthyper","rightmeta","iso_level3_shift","iso_level5_shift","option","alt","meta","super","hyper","control","ctrl","shift"]),modifierKeyNames=new Set(["ctrl","control","shift","meta","alt","option","super","hyper"]),namedSingleStrokeKeyPrefixes=createPrefixBuckets(namedSingleStrokeKeys),modifierKeyPrefixes=createPrefixBuckets(modifierKeyNames);BINDING_OVERRIDES_RESOURCE=Symbol("keymap:binding-overrides"),ALIASES_FIELD_RESOURCE=Symbol("keymap:aliases-field"),COMMA_BINDINGS_RESOURCE=Symbol("keymap:comma-bindings"),DEAD_BINDING_WARNINGS_RESOURCE=Symbol("keymap:dead-binding-warnings");ENABLED_FIELDS_RESOURCE=Symbol("keymap:enabled-fields");EMACS_BINDINGS_RESOURCE=Symbol("keymap:emacs-bindings"),EX_COMMANDS_RESOURCE=Symbol("keymap:ex-commands");METADATA_FIELDS_RESOURCE=Symbol("keymap:metadata-fields");MOD_BINDINGS_RESOURCE=Symbol("keymap:mod-bindings"),UNRESOLVED_COMMAND_WARNINGS_RESOURCE=Symbol("keymap:unresolved-command-warnings")});function createSyntheticCommandEvent(){return new KeyEvent({name:"command",ctrl:!1,meta:!1,shift:!1,option:!1,sequence:"",number:!1,raw:"",eventType:"press",source:"raw"})}function normalizeRuntimePlatform(platform2){if(platform2==="darwin")return"macos";if(platform2==="win32")return"windows";if(platform2==="linux")return"linux";return"unknown"}function createOpenTuiHostMetadata(renderer){let platform2=normalizeRuntimePlatform(process.platform),hasKittyKeyboard=renderer.capabilities?.kitty_keyboard===!0;return{platform:platform2,primaryModifier:platform2==="macos"?"super":platform2==="unknown"?"unknown":"ctrl",modifiers:{ctrl:"supported",shift:"supported",meta:"supported",super:hasKittyKeyboard?"supported":"unknown",hyper:hasKittyKeyboard?"supported":"unknown"}}}function createOpenTuiKeymapHost(renderer){return{get metadata(){return createOpenTuiHostMetadata(renderer)},rootTarget:renderer.root,get isDestroyed(){return renderer.isDestroyed},getFocusedTarget(){let focused=renderer.currentFocusedRenderable;if(!focused||focused.isDestroyed||!focused.focused)return null;return focused},getParentTarget(target){return target.parent},isTargetDestroyed(target){return target.isDestroyed},onKeyPress(listener){return renderer.keyInput.prependListener("keypress",listener),()=>{renderer.keyInput.off("keypress",listener)}},onKeyRelease(listener){return renderer.keyInput.prependListener("keyrelease",listener),()=>{renderer.keyInput.off("keyrelease",listener)}},onFocusChange(listener){return renderer.on(CliRenderEvents.FOCUSED_RENDERABLE,listener),()=>{renderer.off(CliRenderEvents.FOCUSED_RENDERABLE,listener)}},onDestroy(listener){return renderer.once(CliRenderEvents.DESTROY,listener),()=>{renderer.off(CliRenderEvents.DESTROY,listener)}},onTargetDestroy(target,listener){return target.once(RenderableEvents.DESTROYED,listener),()=>{target.off(RenderableEvents.DESTROYED,listener)}},onRawInput(listener){return renderer.prependInputHandler(listener),()=>{renderer.removeInputHandler(listener)}},createCommandEvent(){return createSyntheticCommandEvent()}}}function createDefaultOpenTuiKeymap(renderer){if(renderer.isDestroyed)throw Error("Cannot create a keymap for a destroyed renderer");let keymap=new Keymap(createOpenTuiKeymapHost(renderer));return registerDefaultKeys(keymap),registerEnabledFields(keymap),registerMetadataFields(keymap),keymap}var init_opentui=__esm(async()=>{init_src2();init_addons();await init_core()});function createTuiKeymap(renderer){let keymap=createDefaultOpenTuiKeymap(renderer);return registerLeader(keymap,{trigger:{name:"space"}}),registerEscapeClearsPendingSequence(keymap),keymap}var init_keymap=__esm(async()=>{init_addons();await init_opentui()});import{spawnSync as spawnSync10}from"child_process";import{existsSync as existsSync77}from"fs";function resolveTuiTmuxConf(){let tuiConf=`${process.env.GENIE_HOME??`${process.env.HOME}/.genie`}/tui-tmux.conf`;return existsSync77(tuiConf)?tuiConf:"/dev/null"}function safeHex(value,fallback){if(!value)return fallback;let trimmed=value.trim();return HEX_COLOR_RE.test(trimmed)?trimmed:fallback}function resolveThemePalette(snapshot){if(snapshot.mode==="dark")return{bg:palette.bg,bgRaised:palette.bgRaised,text:palette.text,textDim:palette.textDim,textMuted:palette.textMuted,border:palette.border,accent:palette.accent,accentDim:palette.accentDim,accentBright:palette.accentBright,warning:palette.warning,info:palette.info};return{...lightPalette,bg:safeHex(snapshot.terminalBackground,lightPalette.bg),text:safeHex(snapshot.terminalForeground,lightPalette.text)}}function flattenTmuxCommands(commands){let args=[];return commands.forEach((command,index)=>{if(index>0)args.push(";");args.push(...command)}),args}function buildTuiTmuxThemeCommands(snapshot){let theme=resolveThemePalette(snapshot),terminalForeground=safeHex(snapshot.terminalForeground,theme.text),terminalBackground=safeHex(snapshot.terminalBackground,theme.bg);return flattenTmuxCommands([["set-environment","-g","GENIE_TUI_THEME_MODE",snapshot.mode],["set-environment","-g","GENIE_TUI_TERMINAL_FG",terminalForeground],["set-environment","-g","GENIE_TUI_TERMINAL_BG",terminalBackground],["set-environment","-g","GENIE_TUI_TMUX_BG",theme.bg],["set-environment","-g","GENIE_TUI_TMUX_TEXT",theme.text],["set-environment","-g","GENIE_TUI_TMUX_ACCENT",theme.accent],["set-option","-g","pane-border-style",`fg=${theme.border}`],["set-option","-g","pane-active-border-style",`fg=${theme.accent}`],["set-option","-g","message-style",`bg=${theme.bgRaised},fg=${theme.info}`],["set-option","-g","message-command-style",`bg=${theme.bgRaised},fg=${theme.warning}`],["set-option","-g","status-style",`bg=${theme.bg},fg=${theme.text}`],["set-window-option","-g","mode-style",`bg=${theme.accent},fg=${theme.bg}`],["set-window-option","-g","clock-mode-colour",theme.accent]])}function syncTuiTmuxTheme(snapshot,deps={}){let run=deps.spawnSync??spawnSync10,tmux=deps.tmuxBin??tmuxBin(),socketName=deps.socketName??TUI_TMUX_SOCKET,configPath2=deps.configPath??resolveTuiTmuxConf(),timeoutMs=deps.timeoutMs??DEFAULT_TMUX_SYNC_TIMEOUT_MS;return run(tmux,["-L",socketName,"-f",configPath2,...buildTuiTmuxThemeCommands(snapshot)],{stdio:"ignore",timeout:timeoutMs}).status===0}var TUI_TMUX_SOCKET="genie-tui",DEFAULT_TMUX_SYNC_TIMEOUT_MS=300,HEX_COLOR_RE,lightPalette;var init_tmux_theme_sync=__esm(()=>{init_ensure_tmux();init_theme2();HEX_COLOR_RE=/^#[0-9a-f]{6}$/i,lightPalette={bg:"#f5efe4",bgRaised:"#ebe3d7",text:"#24323a",textDim:"#56656d",textMuted:"#718087",border:"#c8bdae",accent:"#2f7a62",accentDim:"#3e9277",accentBright:"#17694f",warning:"#9a651e",info:"#406f8b"}});function readBool(env2,name,fallback){let raw=env2[name];if(!raw)return fallback;let normalized=raw.trim().toLowerCase();if(TRUTHY3.has(normalized))return!0;if(FALSY.has(normalized))return!1;return fallback}function readPositiveInt(env2,name,fallback){let raw=env2[name];if(!raw)return fallback;let parsed=Number.parseInt(raw,10);return Number.isFinite(parsed)&&parsed>0?parsed:fallback}function inferThemeMode(background){if(!background||!/^#[0-9a-f]{6}$/i.test(background))return null;let r=Number.parseInt(background.slice(1,3),16),g2=Number.parseInt(background.slice(3,5),16),b3=Number.parseInt(background.slice(5,7),16);return(0.2126*r+0.7152*g2+0.0722*b3)/255>=0.5?"light":"dark"}function snapshotKey(snapshot){return[snapshot.mode,snapshot.terminalForeground??"",snapshot.terminalBackground??""].join("|")}function buildSnapshot(mode,colors8){let resolvedMode=mode??inferThemeMode(colors8?.defaultBackground);if(!resolvedMode)return null;return{mode:resolvedMode,terminalForeground:colors8?.defaultForeground,terminalBackground:colors8?.defaultBackground}}function installOpenTui20Bridge(renderer,options={}){let env2=options.env??process.env;if(!readBool(env2,"GENIE_TUI_TMUX_THEME_SYNC",!0))return()=>{};let syncTheme=options.syncTheme??syncTuiTmuxTheme,themeQueryTimeoutMs=readPositiveInt(env2,"GENIE_TUI_THEME_QUERY_TIMEOUT_MS",DEFAULT_THEME_QUERY_TIMEOUT_MS),tmuxApplyTimeoutMs=readPositiveInt(env2,"GENIE_TUI_TMUX_THEME_SYNC_TIMEOUT_MS",DEFAULT_TMUX_APPLY_TIMEOUT_MS),disposed=!1,lastSnapshot="",syncSnapshot=(snapshot)=>{if(disposed||!snapshot)return;let key=snapshotKey(snapshot);if(key===lastSnapshot)return;lastSnapshot=key;try{syncTheme(snapshot,{timeoutMs:tmuxApplyTimeoutMs})}catch{}},syncFromMode=(mode,colors8)=>{syncSnapshot(buildSnapshot(mode,colors8))},onThemeMode=(mode)=>syncFromMode(mode);renderer.on("theme_mode",onThemeMode),syncFromMode(renderer.themeMode),renderer.waitForThemeMode(themeQueryTimeoutMs).then((mode)=>syncFromMode(mode)).catch(()=>{});let paletteOptions={size:OPEN_TUI_02_PALETTE_SIZE,timeout:themeQueryTimeoutMs};return renderer.getPalette(paletteOptions).then((colors8)=>syncFromMode(renderer.themeMode,colors8)).catch(()=>{}),()=>{disposed=!0,renderer.off("theme_mode",onThemeMode)}}var TRUTHY3,FALSY,DEFAULT_THEME_QUERY_TIMEOUT_MS=700,DEFAULT_TMUX_APPLY_TIMEOUT_MS=300,OPEN_TUI_02_PALETTE_SIZE=16;var init_opentui_bridge=__esm(()=>{init_tmux_theme_sync();TRUTHY3=new Set(["1","true","yes","on"]),FALSY=new Set(["0","false","no","off"])});var exports_render={};__export(exports_render,{resolveTuiRendererConfig:()=>resolveTuiRendererConfig,renderNav:()=>renderNav,installNativeSelectionOverride:()=>installNativeSelectionOverride,disableDragTracking:()=>disableDragTracking});function disableDragTracking(stdout=process.stdout){stdout.write(ESC_DISABLE_DRAG_TRACKING)}function installNativeSelectionOverride(renderer,stdout=process.stdout){let originalEnableMouse=renderer.enableMouse.bind(renderer);renderer.enableMouse=()=>{originalEnableMouse(),disableDragTracking(stdout)},disableDragTracking(stdout)}function readBool2(env2,name,fallback){let raw=env2[name];if(!raw)return fallback;let normalized=raw.trim().toLowerCase();if(TRUTHY4.has(normalized))return!0;if(FALSY2.has(normalized))return!1;return fallback}function readPositiveInt2(env2,name){let raw=env2[name];if(!raw)return;let parsed=Number.parseInt(raw,10);return Number.isFinite(parsed)&&parsed>0?parsed:void 0}function resolveTuiRendererConfig(env2=process.env,platform2=process.platform){let isDarwin=platform2==="darwin",targetFps=readPositiveInt2(env2,"GENIE_TUI_TARGET_FPS")??(isDarwin?8:30),configuredMaxFps=readPositiveInt2(env2,"GENIE_TUI_MAX_FPS")??(isDarwin?12:60),maxFps=Math.max(configuredMaxFps,targetFps),useMouse=readBool2(env2,"GENIE_TUI_MOUSE",!0),enableMouseMovement=useMouse&&readBool2(env2,"GENIE_TUI_MOUSE_MOVEMENT",!isDarwin),consoleEnabled=readBool2(env2,"GENIE_TUI_CONSOLE",!0),kittyKeyboardOptIn=readBool2(env2,"GENIE_TUI_KITTY_KEYBOARD",!isDarwin);return{exitOnCtrlC:!1,useThread:!isDarwin,targetFps,maxFps,useMouse,enableMouseMovement,useKittyKeyboard:kittyKeyboardOptIn?void 0:null,consoleMode:consoleEnabled?void 0:"disabled",openConsoleOnError:consoleEnabled&&!isDarwin}}async function renderNav(){let rightPane=process.env.GENIE_TUI_RIGHT||void 0,workspaceRoot=process.env.GENIE_TUI_WORKSPACE||void 0,initialAgent=process.env.GENIE_TUI_AGENT||void 0,renderer=await createCliRenderer(resolveTuiRendererConfig());installNativeSelectionOverride(renderer);let disposeOpenTui20Bridge=installOpenTui20Bridge(renderer),keymap=createTuiKeymap(renderer);createRoot(renderer).render(import_jsx_dev_runtime2.jsxDEV(KeymapProvider,{keymap,children:import_jsx_dev_runtime2.jsxDEV(App,{rightPane,workspaceRoot,initialAgent},void 0,!1,void 0,this)},void 0,!1,void 0,this)),await new Promise((resolve23)=>{renderer.once("destroy",()=>{disposeOpenTui20Bridge(),resolve23()})})}var ESC_DISABLE_DRAG_TRACKING="\x1B[?1002l",TRUTHY4,FALSY2;var init_render=__esm(async()=>{init_react();init_opentui_bridge();init_jsx_dev_runtime();await __promiseAll([init_core(),init_react2(),init_app(),init_keymap()]);TRUTHY4=new Set(["1","true","yes","on"]),FALSY2=new Set(["0","false","no","off"])});var exports_tui={};__export(exports_tui,{launchTui:()=>launchTui});import{appendFileSync as appendFileSync6,closeSync as closeSync6,mkdirSync as mkdirSync35,openSync as openSync6,readSync as readSync3,statSync as statSync17}from"fs";import{homedir as homedir52}from"os";import{join as join94}from"path";function genieHome6(){return process.env.GENIE_HOME??join94(homedir52(),".genie")}function extractPreviousRunCrashOutput(logPath){let fd=null;try{let size=statSync17(logPath).size;if(size===0)return"";let readSize=Math.min(size,TUI_CRASH_LOG_RECOVERY_MAX_BYTES);fd=openSync6(logPath,"r");let buffer2=Buffer.alloc(readSize);readSync3(fd,buffer2,0,readSize,size-readSize);let text=buffer2.toString("utf-8"),lastBannerIndex=text.lastIndexOf(TUI_CRASH_LOG_BANNER_PREFIX);if(lastBannerIndex<0)return"";let afterBannerNewline=text.indexOf(`
4018
+ `),service=util4.getValue(lines,"Service",":"),errorCode=util4.getValue(lines,"ConfigManagerErrorCode",":");if(util4.getValue(lines,"PNPClass",":").toLowerCase()==="bluetooth"&&errorCode==="0"&&service==="")result2.push(parseWindowsBluetooth(lines))});if(callback)callback(result2);resolve23(result2)});if(_freebsd||_netbsd||_openbsd||_sunos)resolve23(null)})})}exports.bluetoothDevices=bluetoothDevices});var require_lib5=__commonJS((exports)=>{var lib_version=require_package().version,util4=require_util3(),system=require_system(),osInfo=require_osinfo(),cpu=require_cpu(),memory=require_memory(),battery=require_battery(),graphics=require_graphics(),filesystem=require_filesystem(),network=require_network(),wifi=require_wifi(),processes=require_processes(),users=require_users(),internet=require_internet(),docker=require_docker(),vbox=require_virtualbox(),printer=require_printer(),usb=require_usb(),audio=require_audio(),bluetooth=require_bluetooth(),_platform=process.platform,_windows=_platform==="win32",_freebsd=_platform==="freebsd",_openbsd=_platform==="openbsd",_netbsd=_platform==="netbsd",_sunos=_platform==="sunos";if(_windows)util4.getCodepage(),util4.getPowershell();function version(){return lib_version}function getStaticData(callback){return new Promise((resolve23)=>{process.nextTick(()=>{let data={};data.version=version(),Promise.all([system.system(),system.bios(),system.baseboard(),system.chassis(),osInfo.osInfo(),osInfo.uuid(),osInfo.versions(),cpu.cpu(),cpu.cpuFlags(),graphics.graphics(),network.networkInterfaces(),memory.memLayout(),filesystem.diskLayout(),audio.audio(),bluetooth.bluetoothDevices(),usb.usb(),printer.printer()]).then((res)=>{if(data.system=res[0],data.bios=res[1],data.baseboard=res[2],data.chassis=res[3],data.os=res[4],data.uuid=res[5],data.versions=res[6],data.cpu=res[7],data.cpu.flags=res[8],data.graphics=res[9],data.net=res[10],data.memLayout=res[11],data.diskLayout=res[12],data.audio=res[13],data.bluetooth=res[14],data.usb=res[15],data.printer=res[16],callback)callback(data);resolve23(data)})})})}function getDynamicData(srv,iface,callback){if(util4.isFunction(iface))callback=iface,iface="";if(util4.isFunction(srv))callback=srv,srv="";return new Promise((resolve23)=>{process.nextTick(()=>{iface=iface||network.getDefaultNetworkInterface(),srv=srv||"";let functionProcessed=(()=>{let totalFunctions=15;if(_windows)totalFunctions=13;if(_freebsd||_openbsd||_netbsd)totalFunctions=11;if(_sunos)totalFunctions=6;return function(){if(--totalFunctions===0){if(callback)callback(data);resolve23(data)}}})(),data={};if(data.time=osInfo.time(),data.node=process.versions.node,data.v8=process.versions.v8,cpu.cpuCurrentSpeed().then((res)=>{data.cpuCurrentSpeed=res,functionProcessed()}),users.users().then((res)=>{data.users=res,functionProcessed()}),processes.processes().then((res)=>{data.processes=res,functionProcessed()}),cpu.currentLoad().then((res)=>{data.currentLoad=res,functionProcessed()}),!_sunos)cpu.cpuTemperature().then((res)=>{data.temp=res,functionProcessed()});if(!_openbsd&&!_freebsd&&!_netbsd&&!_sunos)network.networkStats(iface).then((res)=>{data.networkStats=res,functionProcessed()});if(!_sunos)network.networkConnections().then((res)=>{data.networkConnections=res,functionProcessed()});if(memory.mem().then((res)=>{data.mem=res,functionProcessed()}),!_sunos)battery().then((res)=>{data.battery=res,functionProcessed()});if(!_sunos)processes.services(srv).then((res)=>{data.services=res,functionProcessed()});if(!_sunos)filesystem.fsSize().then((res)=>{data.fsSize=res,functionProcessed()});if(!_windows&&!_openbsd&&!_freebsd&&!_netbsd&&!_sunos)filesystem.fsStats().then((res)=>{data.fsStats=res,functionProcessed()});if(!_windows&&!_openbsd&&!_freebsd&&!_netbsd&&!_sunos)filesystem.disksIO().then((res)=>{data.disksIO=res,functionProcessed()});if(!_openbsd&&!_freebsd&&!_netbsd&&!_sunos)wifi.wifiNetworks().then((res)=>{data.wifiNetworks=res,functionProcessed()});internet.inetLatency().then((res)=>{data.inetLatency=res,functionProcessed()})})})}function getAllData(srv,iface,callback){return new Promise((resolve23)=>{process.nextTick(()=>{let data={};if(iface&&util4.isFunction(iface)&&!callback)callback=iface,iface="";if(srv&&util4.isFunction(srv)&&!iface&&!callback)callback=srv,srv="",iface="";getStaticData().then((res)=>{data=res,getDynamicData(srv,iface).then((res2)=>{for(let key in res2)if({}.hasOwnProperty.call(res2,key))data[key]=res2[key];if(callback)callback(data);resolve23(data)})})})})}function get3(valueObject,callback){return new Promise((resolve23)=>{process.nextTick(()=>{let allPromises=Object.keys(valueObject).filter((func)=>({}).hasOwnProperty.call(exports,func)).map((func)=>{let params=valueObject[func].substring(valueObject[func].lastIndexOf("(")+1,valueObject[func].lastIndexOf(")")),funcWithoutParams=func.indexOf(")")>=0?func.split(")")[1].trim():func;if(funcWithoutParams=func.indexOf("|")>=0?func.split("|")[0].trim():funcWithoutParams,params)return exports[funcWithoutParams](params);else return exports[funcWithoutParams]("")});Promise.all(allPromises).then((data)=>{let result2={},i2=0;for(let key in valueObject)if({}.hasOwnProperty.call(valueObject,key)&&{}.hasOwnProperty.call(exports,key)&&data.length>i2){if(valueObject[key]==="*"||valueObject[key]==="all")result2[key]=data[i2];else{let keys=valueObject[key],filter="",filterParts=[];if(keys.indexOf(")")>=0)keys=keys.split(")")[1].trim();if(keys.indexOf("|")>=0)filter=keys.split("|")[1].trim(),filterParts=filter.split(":"),keys=keys.split("|")[0].trim();if(keys=keys.replace(/,/g," ").replace(/ +/g," ").split(" "),data[i2])if(Array.isArray(data[i2])){let partialArray=[];data[i2].forEach((element)=>{let partialRes={};if(keys.length===1&&(keys[0]==="*"||keys[0]==="all"))partialRes=element;else keys.forEach((k2)=>{if({}.hasOwnProperty.call(element,k2))partialRes[k2]=element[k2]});if(filter&&filterParts.length===2){if({}.hasOwnProperty.call(partialRes,filterParts[0].trim())){let val=partialRes[filterParts[0].trim()];if(typeof val==="number"){if(val===parseFloat(filterParts[1].trim()))partialArray.push(partialRes)}else if(typeof val==="string"){if(val.toLowerCase()===filterParts[1].trim().toLowerCase())partialArray.push(partialRes)}}}else partialArray.push(partialRes)}),result2[key]=partialArray}else{let partialRes={};keys.forEach((k2)=>{if({}.hasOwnProperty.call(data[i2],k2))partialRes[k2]=data[i2][k2]}),result2[key]=partialRes}else result2[key]={}}i2++}if(callback)callback(result2);resolve23(result2)})})})}function observe(valueObject,interval,callback){let _data=null;return setInterval(()=>{get3(valueObject).then((data)=>{if(JSON.stringify(_data)!==JSON.stringify(data))_data=Object.assign({},data),callback(data)})},interval)}exports.version=version;exports.system=system.system;exports.bios=system.bios;exports.baseboard=system.baseboard;exports.chassis=system.chassis;exports.time=osInfo.time;exports.osInfo=osInfo.osInfo;exports.versions=osInfo.versions;exports.shell=osInfo.shell;exports.uuid=osInfo.uuid;exports.cpu=cpu.cpu;exports.cpuFlags=cpu.cpuFlags;exports.cpuCache=cpu.cpuCache;exports.cpuCurrentSpeed=cpu.cpuCurrentSpeed;exports.cpuTemperature=cpu.cpuTemperature;exports.currentLoad=cpu.currentLoad;exports.fullLoad=cpu.fullLoad;exports.mem=memory.mem;exports.memLayout=memory.memLayout;exports.battery=battery;exports.graphics=graphics.graphics;exports.fsSize=filesystem.fsSize;exports.fsOpenFiles=filesystem.fsOpenFiles;exports.blockDevices=filesystem.blockDevices;exports.fsStats=filesystem.fsStats;exports.disksIO=filesystem.disksIO;exports.diskLayout=filesystem.diskLayout;exports.networkInterfaceDefault=network.networkInterfaceDefault;exports.networkGatewayDefault=network.networkGatewayDefault;exports.networkInterfaces=network.networkInterfaces;exports.networkStats=network.networkStats;exports.networkConnections=network.networkConnections;exports.wifiNetworks=wifi.wifiNetworks;exports.wifiInterfaces=wifi.wifiInterfaces;exports.wifiConnections=wifi.wifiConnections;exports.services=processes.services;exports.processes=processes.processes;exports.processLoad=processes.processLoad;exports.users=users.users;exports.inetChecksite=internet.inetChecksite;exports.inetLatency=internet.inetLatency;exports.dockerInfo=docker.dockerInfo;exports.dockerImages=docker.dockerImages;exports.dockerContainers=docker.dockerContainers;exports.dockerContainerStats=docker.dockerContainerStats;exports.dockerContainerProcesses=docker.dockerContainerProcesses;exports.dockerVolumes=docker.dockerVolumes;exports.dockerAll=docker.dockerAll;exports.vboxInfo=vbox.vboxInfo;exports.printer=printer.printer;exports.usb=usb.usb;exports.audio=audio.audio;exports.bluetoothDevices=bluetooth.bluetoothDevices;exports.getStaticData=getStaticData;exports.getDynamicData=getDynamicData;exports.getAllData=getAllData;exports.get=get3;exports.observe=observe;exports.powerShellStart=util4.powerShellStart;exports.powerShellRelease=util4.powerShellRelease});import os4 from"os";function toGB(bytes){return Math.round(bytes/1073741824*10)/10}function bar(percent,width){let p=Math.max(0,Math.min(100,percent)),filled=Math.round(p/100*width);return`[${"=".repeat(filled)}${"-".repeat(width-filled)}]`}function pickColor(percent){if(percent>90)return palette.error;if(percent>70)return palette.warning;return palette.accent}function SystemStatsView({stats:stats2}){if(!stats2)return import_jsx_dev_runtime2.jsxDEV("box",{flexDirection:"column",paddingX:1,backgroundColor:palette.bgRaised,children:import_jsx_dev_runtime2.jsxDEV("box",{height:1,width:"100%",children:import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.accent,children:"genie"},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:` v${VERSION}`},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this);let{cpu,ram,swap,load:load3}=stats2,hotStr=cpu.hotCores.map((c)=>`#${c.id} ${c.load}%`).join(" ");return import_jsx_dev_runtime2.jsxDEV("box",{flexDirection:"column",paddingX:1,backgroundColor:palette.bgRaised,children:[import_jsx_dev_runtime2.jsxDEV("box",{height:1,width:"100%",children:import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.accent,children:"genie"},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:` v${VERSION}`},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("box",{height:1,width:"100%",children:import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:"CPU "},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:pickColor(cpu.combined),children:`${String(cpu.combined).padStart(3)}% ${bar(cpu.combined,8)}`},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:` ${cpu.coreCount}c`},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("box",{height:1,width:"100%",children:import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:" hot "},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.warning,children:hotStr},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("box",{height:1,width:"100%",children:import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:"RAM "},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:pickColor(ram.percent),children:`${ram.usedGB}/${ram.totalGB}G ${bar(ram.percent,8)}`},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),swap.totalGB>0?import_jsx_dev_runtime2.jsxDEV("box",{height:1,width:"100%",children:import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:"SWP "},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:pickColor(swap.percent),children:`${swap.usedGB}/${swap.totalGB}G ${bar(swap.percent,8)}`},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this):null,import_jsx_dev_runtime2.jsxDEV("box",{height:1,width:"100%",children:import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:"Load "},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:pickColor(load3.percent),children:`${load3.percent}%`},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:` (${load3.busy}/${load3.total} busy)`},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function SystemStats(){let[stats2,setStats]=import_react27.useState(null),mountedRef=import_react27.useRef(!0);return import_react27.useEffect(()=>{mountedRef.current=!0;async function refresh(){try{let[cpu,mem]=await Promise.all([import_systeminformation.default.currentLoad(),import_systeminformation.default.mem()]);if(!mountedRef.current)return;let coreCount=os4.cpus().length,avg1=os4.loadavg()[0],sorted=cpu.cpus.map((c,i2)=>({id:i2,load:Math.round(c.load)})).sort((a,b3)=>b3.load-a.load);setStats({cpu:{combined:Math.round(cpu.currentLoad),hotCores:sorted.slice(0,3),coreCount},ram:{usedGB:toGB(mem.active),totalGB:toGB(mem.total),percent:mem.total>0?Math.round(mem.active/mem.total*100):0},swap:{usedGB:toGB(mem.swapused),totalGB:toGB(mem.swaptotal),percent:mem.swaptotal>0?Math.round(mem.swapused/mem.swaptotal*100):0},load:{percent:coreCount>0?Math.round(avg1/coreCount*100):0,busy:Math.round(avg1*10)/10,total:coreCount}})}catch{}}refresh();let timer2=setInterval(refresh,3000);return()=>{mountedRef.current=!1,clearInterval(timer2)}},[]),import_jsx_dev_runtime2.jsxDEV(SystemStatsView,{stats:stats2},void 0,!1,void 0,this)}var import_react27,import_systeminformation;var init_SystemStats=__esm(()=>{init_version();init_theme2();init_jsx_dev_runtime();import_react27=__toESM(require_react_development(),1),import_systeminformation=__toESM(require_lib5(),1)});function validateName(name){if(name.length===0)return null;try{return validateBranchName(name),null}catch(err){return err instanceof Error?err.message:String(err)}}function TeamCreate({availableAgents,workspaceRoot,onConfirm,onCancel}){let[step,setStep]=import_react29.useState("name"),[teamName,setTeamName]=import_react29.useState(""),[selected,setSelected]=import_react29.useState(()=>new Set),[memberCursor,setMemberCursor]=import_react29.useState(0),nameError=import_react29.useMemo(()=>validateName(teamName),[teamName]),nameValid=teamName.length>0&&nameError===null,intent=import_react29.useMemo(()=>({kind:"create-team",name:teamName.length>0?teamName:"TEAM_NAME",repo:workspaceRoot}),[teamName,workspaceRoot]),handleNameChange=import_react29.useCallback((value)=>{setTeamName(value)},[]),advanceFromName=import_react29.useCallback(()=>{if(!nameValid)return;setStep("members")},[nameValid]),toggleMember=import_react29.useCallback((name)=>{setSelected((prev)=>{let next=new Set(prev);if(next.has(name))next.delete(name);else next.add(name);return next})},[]),confirmMembers=import_react29.useCallback(()=>{onConfirm({teamName,members:Array.from(selected)})},[onConfirm,teamName,selected]);return useKeyboard((key)=>{if(step==="name"){handleNameStepKey(key,{onCancel,nameValid,advanceFromName});return}handleMembersStepKey(key,{availableAgents,memberCursor,setStep,setMemberCursor,toggleMember,confirmMembers})}),import_jsx_dev_runtime2.jsxDEV("box",{position:"absolute",width:"100%",height:"100%",justifyContent:"center",alignItems:"center",backgroundColor:palette.bgOverlay,children:import_jsx_dev_runtime2.jsxDEV("box",{border:!0,borderColor:palette.borderActive,backgroundColor:palette.bgRaised,paddingX:3,paddingY:1,flexDirection:"column",width:"100%",gap:1,children:[import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.accent,children:"New team"},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:step==="name"?" \u2014 step 1 of 2":" \u2014 step 2 of 2"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),step==="name"?import_jsx_dev_runtime2.jsxDEV(NameStep,{value:teamName,onChange:handleNameChange,onSubmit:advanceFromName,errorMessage:nameError},void 0,!1,void 0,this):import_jsx_dev_runtime2.jsxDEV(MembersStep,{agents:availableAgents,selected,cursor:memberCursor},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV(CliPreviewLine,{intent,hint:step==="name"?"Enter: next \xB7 Esc: cancel":"Space: toggle \xB7 Enter: create \xB7 Esc: back"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)}function NameStep({value,onChange,onSubmit,errorMessage}){return import_jsx_dev_runtime2.jsxDEV("box",{flexDirection:"column",gap:1,children:[import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:"Team name (git-branch-safe):"},void 0,!1,void 0,this)},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("input",{value,onInput:onChange,onChange,onSubmit,focused:!0,placeholder:"feat/auth-bug",backgroundColor:palette.bg,textColor:palette.text,placeholderColor:palette.textMuted},void 0,!1,void 0,this),errorMessage!==null?import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.error,children:`\u26A0 ${errorMessage}`},void 0,!1,void 0,this)},void 0,!1,void 0,this):null]},void 0,!0,void 0,this)}function MembersStep({agents,selected,cursor}){if(agents.length===0)return import_jsx_dev_runtime2.jsxDEV("box",{flexDirection:"column",children:[import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:"No agents registered"},void 0,!1,void 0,this)},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:"Members can be hired later via `genie team hire`."},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this);return import_jsx_dev_runtime2.jsxDEV("box",{flexDirection:"column",children:[import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:"Select members (space to toggle):"},void 0,!1,void 0,this)},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("box",{flexDirection:"column",children:agents.map((name,idx)=>{let isSelected=selected.has(name),isCursor=idx===cursor,tick=isSelected?"[x]":"[ ]",prefix=isCursor?"\u25B6 ":" ";return import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:isCursor?palette.accent:palette.textMuted,children:prefix},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:isSelected?palette.success:palette.textDim,children:tick},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.text,children:` ${name}`},void 0,!1,void 0,this)]},name,!0,void 0,this)})},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function isEnter(key){return key.name==="enter"||key.name==="return"}function handleNameStepKey(key,opts){if(key.name==="escape"){opts.onCancel();return}if(isEnter(key)&&opts.nameValid)opts.advanceFromName()}function handleMembersStepKey(key,opts){if(key.name==="escape"){opts.setStep("name");return}if(opts.availableAgents.length===0){if(isEnter(key))opts.confirmMembers();return}if(key.name==="up"||key.name==="k"){opts.setMemberCursor((prev)=>prev<=0?opts.availableAgents.length-1:prev-1);return}if(key.name==="down"||key.name==="j"){opts.setMemberCursor((prev)=>prev>=opts.availableAgents.length-1?0:prev+1);return}if(key.name==="space"){let name=opts.availableAgents[opts.memberCursor];if(name)opts.toggleMember(name);return}if(isEnter(key))opts.confirmMembers()}var import_react29;var init_TeamCreate=__esm(async()=>{init_team_manager();init_theme2();init_CliPreviewLine();init_jsx_dev_runtime();await init_react2();import_react29=__toESM(require_react_development(),1)});function getNodeIcon(node){if(node.type==="agent")return getAgentIcon(node);switch(node.type){case"session":return node.data.attached?"\u25B6":"\u25B8";case"window":return node.data.active?"\u25A0":"\u25A1";case"pane":return getPaneIcon(node);default:return" "}}function getAgentIcon(node){switch(node.workState){case"in_flight":return"\u25C6";case"paused":return"\u25D0";case"done":return"\u2714";case"stuck":return"\u2718";default:break}switch(node.wsAgentState){case"running":return"\u25CF";case"stopped":return"\u25CC";case"error":return"\u2298";case"spawning":return"\u231B";default:return"\u25CC"}}function getPaneIcon(node){if(node.data.isDead)return"\u2718";if(node.agentState==="working")return"\u25CF";if(node.agentState==="idle")return"\u25CB";if(node.agentState==="permission")return"\u26A0";if(node.agentState==="error")return"\u2718";if(node.data.isClaudeLike)return"\u25C6";return"\u25CB"}function getNodeColor(node){if(node.type==="agent")return getAgentColor(node);switch(node.type){case"session":return node.data.attached?palette.success:palette.textDim;case"window":return node.data.active?palette.info:palette.text;case"pane":return getPaneColor(node);default:return palette.text}}function getAgentColor(node){switch(node.workState){case"in_flight":return palette.accentBright;case"paused":return palette.textDim;case"done":return palette.info;case"stuck":return palette.error;default:break}switch(node.wsAgentState){case"running":return palette.success;case"stopped":return palette.text;case"error":return palette.error;case"spawning":return palette.warning;default:return palette.textDim}}function getPaneColor(node){if(node.data.isDead)return palette.error;if(node.agentState==="working")return palette.info;if(node.agentState==="permission")return palette.warning;if(node.agentState==="error")return palette.error;if(node.agentState==="idle")return palette.textDim;if(node.data.isClaudeLike)return palette.info;return palette.textDim}function getAgentSuffix(node){if(node.workState==="stuck")return" [stuck \u2014 press R to retry]";if(node.workState==="paused")return" [paused \u2014 auto-resume off]";if(node.workState==="done")return" [done]";if(node.wsAgentState==="spawning"&&node.activePanes===0)return" [stuck \u2014 press R to retry]";if(node.wsAgentState==="stopped")return" [Enter to start]";let wc=node.data.windowCount;if(wc>1)return` (${wc} windows)`;if(wc===1)return" (1 window)";return""}function getNodeSuffix(node){if(node.type==="agent")return getAgentSuffix(node);if(node.type==="session"||node.type==="pane"){let count=node.activePanes;if(count>0)return` ${icons.agent}${count}`}return""}function getStateColor(state){switch(state){case"working":return palette.info;case"idle":return palette.textDim;case"permission":return palette.warning;case"error":return palette.error;default:return palette.textMuted}}var import_react30,TreeNodeRow;var init_TreeNode=__esm(()=>{init_theme2();init_jsx_dev_runtime();import_react30=__toESM(require_react_development(),1),TreeNodeRow=import_react30.memo(function({node,selected,onSelect,onToggle,onContextMenu}){let indent2=" ".repeat(node.depth),hasChildren=node.children.length>0,expandIcon=hasChildren?node.expanded?icons.expanded:icons.collapsed:" ",icon=getNodeIcon(node),color2=getNodeColor(node),suffix2=getNodeSuffix(node),labelColor=selected?palette.accentBright:node.type==="agent"&&node.kind==="subagent"?palette.textDim:palette.text;return import_jsx_dev_runtime2.jsxDEV("box",{height:1,width:"100%",backgroundColor:selected?palette.accentDim:void 0,onMouseDown:(event)=>{if(event.button===2&&onContextMenu){onSelect(node.id),onContextMenu(node.id);return}if(onSelect(node.id),hasChildren)onToggle(node.id)},children:import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:[indent2,expandIcon," "]},void 0,!0,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:color2,children:[icon," "]},void 0,!0,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:labelColor,children:node.label},void 0,!1,void 0,this),suffix2?import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:suffix2},void 0,!1,void 0,this):null,node.agentState?import_jsx_dev_runtime2.jsxDEV("span",{fg:getStateColor(node.agentState),children:[" ",node.agentState]},void 0,!0,void 0,this):null,process.env.GENIE_TUI_DEBUG==="1"?import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:` [${node.type}]`},void 0,!1,void 0,this):null]},void 0,!0,void 0,this)},void 0,!1,void 0,this)})});function useDiagnosticsRefresh(setDiagnostics,setRequestedInitialAgent){import_react32.useEffect(()=>{let active=!0,lastErrorMessage=null,lastErrorLoggedAt=0;async function refresh(){try{let snap=await collectDiagnostics();if(!active)return;setDiagnostics(snap),lastErrorMessage=null;let signaledAgent=consumeInitialAgentSignal();if(signaledAgent)setRequestedInitialAgent(signaledAgent)}catch(err){let message=err instanceof Error?err.message:String(err),now=Date.now();if(message!==lastErrorMessage||now-lastErrorLoggedAt>30000)console.error("TUI: diagnostics failed:",message),lastErrorMessage=message,lastErrorLoggedAt=now}}refresh();let timer2=setInterval(refresh,2000);return()=>{active=!1,clearInterval(timer2)}},[setDiagnostics,setRequestedInitialAgent])}function useSessionTreeBuilder(diagnostics,workspaceRoot,setSessionTree){import_react32.useEffect(()=>{if(!diagnostics)return;let newTree;if(workspaceRoot){let agentNames=scanAgents2(workspaceRoot);newTree=buildWorkspaceTree({agentNames,sessions:diagnostics.sessions,executors:diagnostics.executors,workStates:diagnostics.workStates,teamScope:process.env.GENIE_TUI_TEAM??process.env.GENIE_TEAM})}else newTree=buildSessionTree(diagnostics);setSessionTree((prev)=>mergeExpandedState(prev,newTree))},[diagnostics,workspaceRoot,setSessionTree])}function useStableSelection(flatNodes,selectedIndex,setSelectedIndex,selectedNodeId){import_react32.useEffect(()=>{let node=flatNodes[selectedIndex]?.node;if(node)selectedNodeId.current=node.id},[selectedIndex,flatNodes,selectedNodeId]),import_react32.useLayoutEffect(()=>{if(flatNodes.length===0)return;if(selectedIndex>=flatNodes.length){setSelectedIndex(flatNodes.length-1);return}if(!selectedNodeId.current)return;let currentAtIndex=flatNodes[selectedIndex]?.node;if(currentAtIndex&&currentAtIndex.id===selectedNodeId.current)return;let restored=flatNodes.findIndex((n)=>n.node.id===selectedNodeId.current);if(restored>=0)setSelectedIndex(restored)},[flatNodes])}function useInitialAgentSelection(requestedInitialAgent,flatNodes,setSelectedIndex,setRequestedInitialAgent,onTmuxSessionSelect){import_react32.useEffect(()=>{if(!requestedInitialAgent||flatNodes.length===0)return;let idx=flatNodes.findIndex((n)=>n.node.id===`agent:${requestedInitialAgent}`);if(idx<0)return;setSelectedIndex(idx);let node=flatNodes[idx].node;if(node.type==="agent"&&node.wsAgentState!=="running"&&node.wsAgentState!=="spawning")spawnAgent(agentNameFromNode(node),onTmuxSessionSelect);setRequestedInitialAgent(void 0)},[requestedInitialAgent,flatNodes,onTmuxSessionSelect,setSelectedIndex,setRequestedInitialAgent])}function useAutoAttach(flatNodes,selectedIndex,lastTarget,onTmuxSessionSelect){import_react32.useEffect(()=>{let current=flatNodes[selectedIndex]?.node;if(!current)return;let target=getSessionTarget(current);if(!target)return;if(current.type==="agent"&&current.wsAgentState!=="running")return;let key=`${target.sessionName}:${target.windowIndex??""}`;if(key===lastTarget.current)return;lastTarget.current=key,onTmuxSessionSelect(target.sessionName,target.windowIndex)},[selectedIndex,flatNodes,onTmuxSessionSelect,lastTarget])}function useNavKeyboard(opts){useKeyboard((key)=>{if(opts.keyboardDisabled)return;if(opts.spawnIntoAgent!==null||opts.spawnPickerTarget!==null)return;if(tryOpenTeamCreate(key,{workspaceRoot:opts.workspaceRoot,showTeamCreate:opts.showTeamCreate,contextMenuNodeId:opts.contextMenuNodeId,handleOpenTeamCreate:opts.handleOpenTeamCreate}))return;if(opts.showTeamCreate)return;handleKeyboardInput(key,opts)})}function renderAlertBadge(alertCount){if(alertCount<=0)return null;return import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.error,children:[" ","\u25CF ",alertCount," alert",alertCount===1?"":"s"]},void 0,!0,void 0,this)}function countAgents(nodes,predicate){let count=0;for(let n of nodes){if(n.type==="agent"&&predicate(n))count++;if(n.children.length>0)count+=countAgents(n.children,predicate)}return count}function computeNavCounts(workspaceRoot,sessionTree,diagnostics){if(workspaceRoot){let agentCount=countAgents(sessionTree,()=>!0);if(agentCount>0)return{agentCount,runningCount:countAgents(sessionTree,(n)=>n.wsAgentState==="running")}}let paneSum=diagnostics?.sessions.reduce((sum,s2)=>sum+s2.windows.reduce((ws,w2)=>ws+w2.panes.length,0),0)??0;return{agentCount:diagnostics?.sessions.length??0,runningCount:paneSum}}function Nav({onTmuxSessionSelect,onNewAgentWindow,workspaceRoot,initialAgent,keyboardDisabled=!1}){let[diagnostics,setDiagnostics]=import_react32.useState(null),[sessionTree,setSessionTree]=import_react32.useState([]),[selectedIndex,setSelectedIndex]=import_react32.useState(0),[requestedInitialAgent,setRequestedInitialAgent]=import_react32.useState(initialAgent),[contextMenuNodeId,setContextMenuNodeId]=import_react32.useState(null),[spawnIntoAgent,setSpawnIntoAgent]=import_react32.useState(null),[spawnPickerTarget,setSpawnPickerTarget]=import_react32.useState(null),lastTarget=import_react32.useRef(null),selectedNodeId=import_react32.useRef(null);useDiagnosticsRefresh(setDiagnostics,setRequestedInitialAgent),useSessionTreeBuilder(diagnostics,workspaceRoot,setSessionTree);let flatNodes=import_react32.useMemo(()=>flattenTree(sessionTree),[sessionTree]);useStableSelection(flatNodes,selectedIndex,setSelectedIndex,selectedNodeId),useInitialAgentSelection(requestedInitialAgent,flatNodes,setSelectedIndex,setRequestedInitialAgent,onTmuxSessionSelect),useAutoAttach(flatNodes,selectedIndex,lastTarget,onTmuxSessionSelect);let handleSelect=import_react32.useCallback((id)=>{let idx=flatNodes.findIndex((n)=>n.node.id===id);if(idx>=0)setSelectedIndex(idx)},[flatNodes]),handleToggle=import_react32.useCallback((id)=>{setSessionTree((prev)=>toggleNode(prev,id))},[]),handleVerticalNav=import_react32.useCallback((keyName2)=>{let rowCount=flatNodes.length;if(rowCount===0)return;if(keyName2==="up"||keyName2==="k")setSelectedIndex((prev)=>prev===0?rowCount-1:prev-1);else if(keyName2==="down"||keyName2==="j")setSelectedIndex((prev)=>prev>=rowCount-1?0:prev+1)},[flatNodes.length]),handleExpandCollapse=import_react32.useCallback((keyName2)=>{let node=flatNodes[selectedIndex]?.node;if(!node)return;if((keyName2==="right"||keyName2==="l")&&node.children.length>0&&!node.expanded)handleToggle(node.id);else if((keyName2==="left"||keyName2==="h")&&node.expanded)handleToggle(node.id)},[flatNodes,selectedIndex,handleToggle]),handleEnter=import_react32.useCallback(()=>{let node=flatNodes[selectedIndex]?.node;if(!node)return;if(node.type==="agent"){handleEnterAgent(node,onTmuxSessionSelect);return}if(node.children.length>0)handleToggle(node.id);let target=getSessionTarget(node);if(target)onTmuxSessionSelect(target.sessionName,target.windowIndex)},[flatNodes,selectedIndex,handleToggle,onTmuxSessionSelect]),handleRetry=import_react32.useCallback(()=>{let node=flatNodes[selectedIndex]?.node;if(!node||node.type!=="agent")return;if(node.wsAgentState!=="spawning"&&node.wsAgentState!=="error")return;(async()=>{try{let{reconcileStaleSpawns:reconcileStaleSpawns2}=await Promise.resolve().then(() => (init_agent_registry(),exports_agent_registry));await reconcileStaleSpawns2()}catch{}spawnAgent(agentNameFromNode(node),onTmuxSessionSelect)})()},[flatNodes,selectedIndex,onTmuxSessionSelect]),handleContextMenu=import_react32.useCallback((nodeId)=>{let flat=flatNodes.find((n)=>n.node.id===nodeId);if(flat&&buildMenuItems(flat.node).length>0)setContextMenuNodeId(nodeId)},[flatNodes]),handleContextMenuAction=import_react32.useCallback((action,payload)=>{let node=flatNodes.find((n)=>n.node.id===contextMenuNodeId)?.node;if(!node)return;if(setContextMenuNodeId(null),action==="spawn-here"){let target=resolveSpawnHereTarget(node);if(target)setSpawnPickerTarget(target);return}dispatchContextMenuAction(action,node,payload,{sessionTree,onTmuxSessionSelect,onNewAgentWindow,openSpawnInto:setSpawnIntoAgent})},[flatNodes,contextMenuNodeId,sessionTree,onTmuxSessionSelect,onNewAgentWindow]),handleSpawnIntoConfirm=import_react32.useCallback((intent)=>{executeSpawnIntent(intent),setSpawnIntoAgent(null)},[]),handleSpawnIntoCancel=import_react32.useCallback(()=>{setSpawnIntoAgent(null)},[]),handleSpawnPickerConfirm=import_react32.useCallback((intent)=>{setSpawnPickerTarget(null),executeSpawnIntent(intent)},[]),handleSpawnPickerCancel=import_react32.useCallback(()=>{setSpawnPickerTarget(null)},[]),_menuDisabled=keyboardDisabled||contextMenuNodeId!==null,{showTeamCreate,handleOpenTeamCreate,handleTeamCreateConfirm,handleTeamCreateCancel}=useTeamCreateControls({workspaceRoot,diagnostics,onTmuxSessionSelect});useNavKeyboard({keyboardDisabled,spawnIntoAgent,spawnPickerTarget,workspaceRoot,showTeamCreate,contextMenuNodeId,handleOpenTeamCreate,flatNodes,selectedIndex,setContextMenuNodeId,handleVerticalNav,handleExpandCollapse,handleEnter,handleRetry,onNewAgentWindow});let{agentCount,runningCount}=computeNavCounts(workspaceRoot,sessionTree,diagnostics),headerLabel=workspaceRoot?"Agents":"Sessions",alertCount=diagnostics?.alertCount??0;return import_jsx_dev_runtime2.jsxDEV("box",{flexDirection:"column",width:"100%",height:"100%",backgroundColor:palette.bg,children:[import_jsx_dev_runtime2.jsxDEV("box",{height:1,paddingX:1,backgroundColor:palette.bgRaised,children:import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.accent,children:headerLabel},void 0,!1,void 0,this),diagnostics?import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:[" ",workspaceRoot?`${runningCount}/${agentCount}`:`${agentCount}s ${runningCount}p`]},void 0,!0,void 0,this):null,renderAlertBadge(alertCount)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),diagnostics?import_jsx_dev_runtime2.jsxDEV("scrollbox",{focused:!0,height:"100%",style:{scrollbarOptions:{showArrows:!1,trackOptions:{foregroundColor:palette.scrollThumb,backgroundColor:palette.scrollTrack}}},children:flatNodes.map((flat,i2)=>import_jsx_dev_runtime2.jsxDEV(TreeNodeRow,{node:flat.node,selected:i2===selectedIndex,onSelect:handleSelect,onToggle:handleToggle,onContextMenu:handleContextMenu},flat.node.id,!1,void 0,this))},void 0,!1,void 0,this):import_jsx_dev_runtime2.jsxDEV("box",{flexGrow:1,justifyContent:"center",alignItems:"center",flexDirection:"column",gap:1,children:[import_jsx_dev_runtime2.jsxDEV("ascii-font",{text:"GENIE",font:"tiny",color:palette.accent},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("text",{fg:palette.textDim,children:"Collecting..."},void 0,!1,void 0,this)]},void 0,!0,void 0,this),contextMenuNodeId?import_jsx_dev_runtime2.jsxDEV(ContextMenu,{items:buildMenuItems(flatNodes.find((n)=>n.node.id===contextMenuNodeId)?.node??{}),onAction:handleContextMenuAction,onClose:()=>setContextMenuNodeId(null),positionY:flatNodes.findIndex((n)=>n.node.id===contextMenuNodeId)+1},void 0,!1,void 0,this):null,spawnIntoAgent!==null?import_jsx_dev_runtime2.jsxDEV(SpawnTargetPicker,{agentName:spawnIntoAgent,sessions:diagnostics?.sessions??[],onConfirm:handleSpawnIntoConfirm,onCancel:handleSpawnIntoCancel},void 0,!1,void 0,this):null,spawnPickerTarget!==null?import_jsx_dev_runtime2.jsxDEV(AgentPicker,{target:spawnPickerTarget,onConfirm:handleSpawnPickerConfirm,onCancel:handleSpawnPickerCancel},void 0,!1,void 0,this):null,showTeamCreate?import_jsx_dev_runtime2.jsxDEV(TeamCreate,{availableAgents:workspaceRoot?scanAgents2(workspaceRoot):[],workspaceRoot,onConfirm:handleTeamCreateConfirm,onCancel:handleTeamCreateCancel},void 0,!1,void 0,this):null,import_jsx_dev_runtime2.jsxDEV(SystemStats,{},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("box",{height:1,paddingX:1,backgroundColor:palette.bgRaised,children:import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:buildFooterHint(workspaceRoot)},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function useTeamCreateControls(opts){let{workspaceRoot,diagnostics,onTmuxSessionSelect}=opts,[showTeamCreate,setShowTeamCreate]=import_react32.useState(!1),pendingTeamNameRef=import_react32.useRef(null),handleOpenTeamCreate=import_react32.useCallback(()=>{if(!workspaceRoot)return;setShowTeamCreate(!0)},[workspaceRoot]),handleTeamCreateConfirm=import_react32.useCallback((result2)=>{setShowTeamCreate(!1),runTeamCreation(result2,workspaceRoot),pendingTeamNameRef.current=result2.teamName},[workspaceRoot]),handleTeamCreateCancel=import_react32.useCallback(()=>{setShowTeamCreate(!1)},[]);return import_react32.useEffect(()=>{let pending=pendingTeamNameRef.current;if(!pending||!diagnostics)return;let session=diagnostics.sessions.find((s2)=>s2.name===pending);if(!session)return;pendingTeamNameRef.current=null,onTmuxSessionSelect(session.name,resolvePreferredWindowIndex(session,pending))},[diagnostics,onTmuxSessionSelect]),{showTeamCreate,handleOpenTeamCreate,handleTeamCreateConfirm,handleTeamCreateCancel}}function handleEnterAgent(node,onTmuxSessionSelect,spawn5=spawnAgent){if(node.wsAgentState!=="running"&&node.wsAgentState!=="spawning")spawn5(agentNameFromNode(node),onTmuxSessionSelect);else if(node.wsAgentState==="running"){let target=getSessionTarget(node);if(target)onTmuxSessionSelect(target.sessionName,target.windowIndex)}}function dispatchContextMenuAction(action,node,payload,deps){let name=node.label;if(action==="spawn-into"&&node.type==="agent"&&deps.openSpawnInto){deps.openSpawnInto(agentNameFromNode(node));return}if(handleAttachAction(action,node,deps.onTmuxSessionSelect))return;if(handleRetryAction(action,name,deps.onTmuxSessionSelect))return;if(handleGenieAction(action,name,payload))return;let tmuxServer=process.env.GENIE_TMUX_SERVER||"genie";if(handleRenameAction(action,node,tmuxServer,payload))return;if(handleAgentWindowActions(action,node,name,tmuxServer,deps.onNewAgentWindow))return;if(handleSessionNodeActions(action,node,tmuxServer,payload))return;if(handleWindowNodeActions(action,node,deps.sessionTree,tmuxServer,payload))return;handlePaneNodeActions(action,node,deps.sessionTree,tmuxServer,deps.onNewAgentWindow)}function handleAttachAction(action,node,onTmuxSessionSelect){if(action!=="attach")return!1;let target=getSessionTarget(node);if(target)onTmuxSessionSelect(target.sessionName,target.windowIndex);return!0}function handleRetryAction(action,name,onTmuxSessionSelect){if(action!=="retry")return!1;return(async()=>{try{let{reconcileStaleSpawns:reconcileStaleSpawns2}=await Promise.resolve().then(() => (init_agent_registry(),exports_agent_registry));await reconcileStaleSpawns2()}catch{}spawnAgent(name,onTmuxSessionSelect)})(),!0}function handleGenieAction(action,name,payload){if(action==="send"&&payload)return executeGenie(["agent","send",payload,"--to",name]),!0;if(action==="answer-text"&&payload)return executeGenie(["agent","answer",name,`text:${payload}`]),!0;let genieArgs={spawn:["spawn",name],"spawn-plan":["spawn",name,"--plan-mode"],stop:["agent","stop",name],kill:["agent","kill",name],log:["agent","log",name],show:["agent","show",name],read:["read",name],"answer-yes":["agent","answer",name,"yes"],"answer-no":["agent","answer",name,"no"]}[action];if(genieArgs)return executeGenie(genieArgs),!0;return!1}function handleRenameAction(action,node,tmuxServer,payload){if(action==="rename-session"&&payload){let sess=node.type==="agent"?node.data.sessionName||node.label:node.id.split(":").slice(1).join(":");return executeTmux3(["-L",tmuxServer,"rename-session","-t",sess,payload]),!0}if(action==="rename-window"&&payload){let idParts=node.id.split(":"),windowTarget=`${idParts[1]}:${idParts[2]}`;return executeTmux3(["-L",tmuxServer,"rename-window","-t",windowTarget,payload]),!0}if(action==="rename-pane"&&payload&&node.type==="pane"){let paneId=node.data.paneId;return executeTmux3(["-L",tmuxServer,"select-pane","-t",`${paneId}`,"-T",payload]),!0}return!1}function handleAgentWindowActions(action,node,name,tmuxServer,onNewAgentWindow){if(action==="agent-new-window"&&node.type==="agent"){if(onNewAgentWindow)onNewAgentWindow(agentNameFromNode(node));return!0}if(action==="new-empty-window"&&node.type==="agent"){let sessionName=node.data.sessionName||name;return executeTmux3(["-L",tmuxServer,"new-window","-a","-t",sessionName]),!0}return!1}function handleSessionNodeActions(action,node,tmuxServer,payload){if(node.type!=="session")return!1;let sess=node.id.split(":").slice(1).join(":");if(action==="kill-session")return executeTmux3(["-L",tmuxServer,"kill-session","-t",sess]),!0;if(action==="new-window")return executeTmux3(["-L",tmuxServer,"new-window","-a","-t",sess]),!0;if(action==="clone-session")return executeTmux3(["-L",tmuxServer,"new-session","-d","-s",`${sess}-clone`,"-t",sess]),!0;if(action==="spawn-in-session"&&payload)return executeGenie(["spawn",payload,"--session",sess]),!0;return!1}function handleWindowNodeActions(action,node,sessionTree,tmuxServer,payload){if(node.type!=="window")return!1;let idParts=node.id.split(":"),windowTarget=`${idParts[1]}:${idParts[2]}`;if(action==="kill-window")return executeTmux3(["-L",tmuxServer,"kill-window","-t",windowTarget]),!0;if(action==="window-new-agent"){let parentAgent=findParentAgent(sessionTree,node.id);if(parentAgent){let agentFullName=agentNameFromNode(parentAgent),suffix2=Date.now()%1e4,role=`${agentFullName}-${suffix2}`;executeGenie(["spawn",agentFullName,"--role",role,"--window",windowTarget])}return!0}if(action==="split-pane")return executeTmux3(["-L",tmuxServer,"split-window","-t",windowTarget]),!0;if(action==="spawn-in-window"&&payload)return executeGenie(["spawn",payload,"--session",idParts[1]]),!0;return!1}function handlePaneNodeActions(action,node,sessionTree,tmuxServer,onNewAgentWindow){if(node.type!=="pane")return!1;let paneId=node.data.paneId;if(action==="clone-agent"){let parentAgent=findParentAgent(sessionTree,node.id);if(parentAgent&&onNewAgentWindow)onNewAgentWindow(agentNameFromNode(parentAgent));return!0}if(action==="kill-pane")return executeTmux3(["-L",tmuxServer,"kill-pane","-t",`${paneId}`]),!0;if(action==="split-h")return executeTmux3(["-L",tmuxServer,"split-window","-h","-t",`${paneId}`]),!0;if(action==="split-v")return executeTmux3(["-L",tmuxServer,"split-window","-v","-t",`${paneId}`]),!0;return!1}function buildFooterHint(workspaceRoot){return`\u2191\u2193:nav \u2190\u2192:expand Enter:${workspaceRoot?"spawn/attach":"attach"} ^T:new${workspaceRoot?" ^N:team":""} R:retry .:menu`}function tryOpenTeamCreate(key,opts){if(!key.ctrl||key.name!=="n")return!1;if(!opts.workspaceRoot||opts.showTeamCreate||opts.contextMenuNodeId)return!1;return opts.handleOpenTeamCreate(),!0}function tryOpenContextMenu(flatNodes,selectedIndex,setContextMenuNodeId){let node=flatNodes[selectedIndex]?.node;if(node&&buildMenuItems(node).length>0)return setContextMenuNodeId(node.id),!0;return!1}function dispatchNavKey(key,handlers,agentAction){let n=key.name;if(n==="up"||n==="k"||n==="down"||n==="j")handlers.handleVerticalNav(n);else if(n==="right"||n==="l"||n==="left"||n==="h")handlers.handleExpandCollapse(n);else if(n==="enter"||n==="return")handlers.handleEnter();else if(n==="r")handlers.handleRetry();else if(key.ctrl&&n==="t")agentAction()}function handleKeyboardInput(key,opts){if(key.name==="."&&!opts.contextMenuNodeId){if(tryOpenContextMenu(opts.flatNodes,opts.selectedIndex,opts.setContextMenuNodeId))return}if(opts.contextMenuNodeId)return;dispatchNavKey(key,opts,()=>{let node=opts.flatNodes[opts.selectedIndex]?.node;if(node?.type==="agent"&&node.wsAgentState==="running"&&opts.onNewAgentWindow)opts.onNewAgentWindow(agentNameFromNode(node))})}function agentNameFromNode(node){return node.id.replace(/^agent:/,"")}function spawnAgent(name,onTmuxSessionSelect){try{let{spawn:spawn5}=__require("child_process"),{join:join94,resolve:resolve23}=__require("path"),{existsSync:existsSync77,mkdirSync:mkdirSync35,openSync:openSync6}=__require("fs"),{homedir:homedir52}=__require("os"),bunPath=process.execPath||"bun",genieBin=process.argv[1],wsRoot=process.env.GENIE_TUI_WORKSPACE,sessionName=name.replace(/\//g,"-"),cwd;if(wsRoot){let parentName=name.includes("/")?name.slice(0,name.indexOf("/")):name,agentDir=resolve23(join94(wsRoot,"agents",parentName));if(existsSync77(agentDir))cwd=agentDir}let{GENIE_TUI_PANE:_a,GENIE_TUI_RIGHT:_b,GENIE_TUI_WORKSPACE:_c,GENIE_TUI_TEAM:_d,GENIE_IS_DAEMON:_e2,...cleanEnv}=process.env,logDir=join94(homedir52(),".genie","logs","tui-spawn");try{mkdirSync35(logDir,{recursive:!0})}catch{}let logPath=join94(logDir,`${sessionName}-${Date.now()}.log`),logFd;try{logFd=openSync6(logPath,"a")}catch{logFd=void 0}let spawnOpts=logFd!==void 0?{detached:!0,stdio:["ignore",logFd,logFd],cwd,env:cleanEnv}:{detached:!0,stdio:"ignore",cwd,env:cleanEnv},child=genieBin&&genieBin!=="genie"?spawn5(bunPath,[genieBin,"spawn",name,"--session",sessionName,"--new-window"],spawnOpts):spawn5("genie",["spawn",name,"--session",sessionName,"--new-window"],spawnOpts);if(child.on("exit",(code)=>{if(code&&code!==0)console.error(`TUI: spawn "${name}" exited ${code}. See ${logPath}`)}),child.on("error",(err)=>{console.error(`TUI: spawn "${name}" error: ${err.message}. See ${logPath}`)}),child.unref(),onTmuxSessionSelect)attachSpawnedAgentWhenReady(sessionName,onTmuxSessionSelect)}catch(err){console.error(`TUI: spawn failed for ${name}:`,err instanceof Error?err.message:err)}}function attachSpawnedAgentWhenReady(sessionName,onTmuxSessionSelect,attempt=0){(async()=>{try{let session=(await collectDiagnostics()).sessions.find((candidate)=>candidate.name===sessionName);if(session){let windowIndex=resolvePreferredWindowIndex(session,sessionName);if(windowIndex!==void 0){onTmuxSessionSelect(sessionName,windowIndex);return}}}catch{}if(attempt>=40){onTmuxSessionSelect(sessionName);return}setTimeout(()=>{attachSpawnedAgentWhenReady(sessionName,onTmuxSessionSelect,attempt+1)},250)})()}function executeTmux3(args){try{let{spawn:spawn5}=__require("child_process");spawn5("tmux",args,{detached:!0,stdio:"ignore"}).unref()}catch{}}function executeGenie(args){try{let{spawn:spawn5}=__require("child_process"),bunPath=process.execPath||"bun",genieBin=process.argv[1];(genieBin&&genieBin!=="genie"?spawn5(bunPath,[genieBin,...args],{detached:!0,stdio:"ignore"}):spawn5("genie",args,{detached:!0,stdio:"ignore"})).unref()}catch{}}function executeGenieAwaited(args){return new Promise((resolve23,reject)=>{try{let{spawn:spawn5}=__require("child_process"),bunPath=process.execPath||"bun",genieBin=process.argv[1],child=genieBin&&genieBin!=="genie"?spawn5(bunPath,[genieBin,...args],{stdio:"ignore"}):spawn5("genie",args,{stdio:"ignore"});child.on("exit",(code)=>resolve23(code)),child.on("error",reject)}catch(err){reject(err instanceof Error?err:Error(String(err)))}})}function resolveSpawnHereTarget(node){if(node.type==="session"){let sess=node.id.split(":").slice(1).join(":");if(sess.length===0)return null;return{session:sess}}if(node.type==="window"){let idParts=node.id.split(":");if(idParts.length<3)return null;return{session:idParts[1],window:`${idParts[1]}:${idParts[2]}`}}return null}function executeSpawnIntent(intent){try{let{argv}=buildSpawnInvocation(intent);executeGenie(argv)}catch(err){console.error("TUI: spawn-intent execution failed:",err instanceof Error?err.message:err)}}async function runTeamCreation(result2,workspaceRoot){let argv;try{({argv}=buildSpawnInvocation({kind:"create-team",name:result2.teamName,repo:workspaceRoot}))}catch(err){console.error("TUI: team create intent build failed:",err instanceof Error?err.message:err);return}let createExit=null;try{createExit=await executeGenieAwaited(argv)}catch(err){console.error("TUI: team create spawn failed:",err instanceof Error?err.message:err);return}if(createExit!==0){console.error(`TUI: team create exited ${createExit} \u2014 skipping member hires for "${result2.teamName}"`);return}for(let member of result2.members)try{let code=await executeGenieAwaited(["team","hire",member,"--team",result2.teamName]);if(code!==0)console.error(`TUI: team hire "${member}" exited ${code} \u2014 continuing with remaining members`)}catch(err){console.error(`TUI: team hire "${member}" failed:`,err instanceof Error?err.message:err)}}function findParentAgent(tree,targetId){for(let node of tree){if(node.type==="agent"&&containsNode(node,targetId))return node;let found=findParentAgent(node.children,targetId);if(found)return found}return null}function containsNode(node,targetId){if(node.id===targetId)return!0;return node.children.some((c)=>containsNode(c,targetId))}function mergeExpandedState(oldTree,newTree){if(oldTree.length===0)return newTree;let oldState=new Map;function collect(nodes){for(let n of nodes)oldState.set(n.id,{expanded:n.expanded,childCount:n.children.length}),collect(n.children)}collect(oldTree);function apply(nodes){return nodes.map((n)=>({...n,expanded:(()=>{let previous=oldState.get(n.id);if(!previous)return n.expanded;if(previous.childCount===0&&n.children.length>0)return n.expanded;return previous.expanded})(),children:apply(n.children)}))}return apply(newTree)}var import_react32;var init_Nav=__esm(async()=>{init_spawn_invocation();init_workspace();init_diagnostics();init_initial_agent();init_session_tree();init_theme2();init_SystemStats();init_TreeNode();init_jsx_dev_runtime();await __promiseAll([init_react2(),init_AgentPicker(),init_ContextMenu(),init_SpawnTargetPicker(),init_TeamCreate()]);import_react32=__toESM(require_react_development(),1)});function QuitDialog({onConfirm,onCancel}){return useKeyboard((key)=>{if(key.name==="enter"||key.name==="return"||key.name==="y")onConfirm();else if(key.name==="escape"||key.name==="n")onCancel()}),import_jsx_dev_runtime2.jsxDEV("box",{position:"absolute",width:"100%",height:"100%",justifyContent:"center",alignItems:"center",backgroundColor:palette.bgOverlay,children:import_jsx_dev_runtime2.jsxDEV("box",{border:!0,borderColor:palette.borderActive,backgroundColor:palette.bgRaised,paddingX:3,paddingY:1,flexDirection:"column",alignItems:"center",gap:1,children:[import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.accent,children:"Close TUI?"},void 0,!1,void 0,this)},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("text",{children:[import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.text,children:"Enter"},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:" to close "},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:" | "},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.text,children:" Esc"},void 0,!1,void 0,this),import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textDim,children:" to cancel"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),import_jsx_dev_runtime2.jsxDEV("text",{children:import_jsx_dev_runtime2.jsxDEV("span",{fg:palette.textMuted,children:"Daemon keeps running. `genie serve stop` to shut down."},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)}var init_QuitDialog=__esm(async()=>{init_theme2();init_jsx_dev_runtime();await init_react2()});import{execSync as execSync18}from"child_process";function App({rightPane,workspaceRoot,initialAgent}){let renderer=useRenderer(),[showQuit,setShowQuit]=import_react36.useState(!1),[showHelp,setShowHelp]=import_react36.useState(!1),[activeSession,setActiveSession]=import_react36.useState(null);import_react36.useEffect(()=>{let title=activeSession?`${BASE_TERMINAL_TITLE} \u2014 ${activeSession}`:BASE_TERMINAL_TITLE;try{renderer.setTerminalTitle(title)}catch{}},[renderer,activeSession]);let handleQuit=import_react36.useCallback(()=>{try{execSync18("tmux -L genie-tui kill-server",{stdio:"ignore"})}catch{}},[]);useBindings(()=>({commands:[{name:"app.quit",title:"Close TUI",desc:"Close TUI window (daemon keeps running \u2014 use `genie serve stop` to shut down)",category:"app",run(){if(showQuit)handleQuit();else setShowQuit(!0)}},{name:"app.help.toggle",title:"Toggle help overlay",desc:"Show/hide the keyboard shortcut overlay",category:"app",run(){setShowHelp((prev)=>!prev)}},{name:"app.console.toggle",title:"Toggle console overlay",desc:"Show/hide the OpenTUI console (logs)",category:"app",run(){renderer.console.toggle()}}],bindings:[{key:"ctrl+q",cmd:"app.quit"},{key:"f1",cmd:"app.help.toggle"},{key:"`",cmd:"app.console.toggle"}]}),[renderer,showQuit,handleQuit]);let handleTmuxSessionSelect=import_react36.useCallback((sessionName,windowIndex)=>{if(setActiveSession(sessionName),!rightPane)return;attachProjectWindow(rightPane,sessionName,windowIndex)},[rightPane]);return import_jsx_dev_runtime2.jsxDEV("box",{width:"100%",height:"100%",children:[import_jsx_dev_runtime2.jsxDEV(Nav,{onTmuxSessionSelect:handleTmuxSessionSelect,onNewAgentWindow:newAgentWindow,workspaceRoot,initialAgent,keyboardDisabled:showQuit||showHelp},void 0,!1,void 0,this),showHelp?import_jsx_dev_runtime2.jsxDEV(HelpOverlay,{onClose:()=>setShowHelp(!1)},void 0,!1,void 0,this):null,showQuit?import_jsx_dev_runtime2.jsxDEV(QuitDialog,{onConfirm:handleQuit,onCancel:()=>setShowQuit(!1)},void 0,!1,void 0,this):null]},void 0,!0,void 0,this)}var import_react36,BASE_TERMINAL_TITLE="genie tui";var init_app=__esm(async()=>{init_react();init_tmux2();init_jsx_dev_runtime();await __promiseAll([init_react2(),init_HelpOverlay(),init_Nav(),init_QuitDialog()]);import_react36=__toESM(require_react_development(),1)});function normalizeBindingTokenName(token){let normalized=token.trim().toLowerCase();if(!normalized)throw Error("Invalid keymap token: token cannot be empty");return normalized}function normalizeKeyName(name){let normalized=name.trim().toLowerCase();if(!normalized)throw Error("Invalid key name: key name cannot be empty");return normalized}function normalizeKeyStroke(input){return{name:normalizeKeyName(input.name),ctrl:input.ctrl??!1,shift:input.shift??!1,meta:input.meta??!1,super:input.super??!1,hyper:input.hyper||void 0}}function cloneKeyStroke(stroke){return{name:stroke.name,ctrl:stroke.ctrl,shift:stroke.shift,meta:stroke.meta,super:stroke.super,hyper:stroke.hyper||void 0}}function createKeySequencePart(input,options){let stroke=cloneKeyStroke(normalizeKeyStroke(input));return{stroke,display:options?.display??stringifyCanonicalStroke(stroke),match:options?.match??createKeyMatch(stroke),tokenName:options?.tokenName?normalizeBindingTokenName(options.tokenName):void 0}}function cloneKeySequencePart(part){return{stroke:cloneKeyStroke(part.stroke),display:part.display,match:part.match,tokenName:part.tokenName,patternName:part.patternName,payloadKey:part.payloadKey}}function cloneKeySequence(parts){return parts.map((part)=>cloneKeySequencePart(part))}function resolveKeyMatch(input){if("match"in input)return input.match;if("stroke"in input)return createKeyMatch(input.stroke);return createKeyMatch(input)}function createKeyMatch(input){return`key:${buildKeyMatchId(normalizeKeyStroke(input))}`}function createTextKeyMatch(id){let normalized=id.trim();if(!normalized)throw Error("Invalid keymap match id: id cannot be empty");return`text:${normalized}`}function stringifyKeyStroke(input,options){if("stroke"in input){if(options?.preferDisplay&&input.display)return input.display;return stringifyCanonicalStroke(input.stroke)}return stringifyCanonicalStroke(normalizeKeyStroke(input))}function stringifyKeySequence(input,options){return input.map((part)=>stringifyKeyStroke(part,options)).join(options?.separator??"")}function stringifyCanonicalStroke(stroke){let parts=[];if(stroke.ctrl)parts.push("ctrl");if(stroke.shift)parts.push("shift");if(stroke.meta)parts.push("meta");if(stroke.super)parts.push("super");if(stroke.hyper)parts.push("hyper");return parts.push(stroke.name==="return"?"enter":stroke.name),parts.join("+")}function buildKeyMatchId(stroke){return`${stroke.name}:${stroke.ctrl?1:0}:${stroke.shift?1:0}:${stroke.meta?1:0}:${stroke.super?1:0}:${stroke.hyper?1:0}`}function getFocusedTargetIfAvailable(host){if(host.isDestroyed)return null;return host.getFocusedTarget()}function forEachActivationTarget(host,focused,visit){let current=focused??host.rootTarget,isFocusedTarget=focused!==null;while(current){if(visit(current,isFocusedTarget)===!1)return;current=host.getParentTarget(current),isFocusedTarget=!1}}function getActivationPath(host,focused){let path6=new Set;return forEachActivationTarget(host,focused,(current)=>{path6.add(current)}),path6}function getActiveLayersForFocused(layers,host,focused){let activeLayers=[],activationPath=getActivationPath(host,focused),sortedLayers=Array.isArray(layers)?layers:getSortedLayers(layers);for(let layer of sortedLayers)if(isLayerActiveForFocused(host,layer,focused,activationPath))activeLayers.push(layer);return activeLayers}function getSortedLayers(layers){return[...layers].sort((left,right)=>{return right.priority-left.priority||right.order-left.order})}function isLayerActiveForFocused(host,layer,focused,activationPath=getActivationPath(host,focused)){let target=layer.target;if(!target)return!0;if(host.isTargetDestroyed(target))return!1;if(layer.targetMode==="focus")return target===focused;return activationPath.has(target)}function patternCaptureCount(capture2){let part=capture2.binding.sequence[capture2.index];if(!part?.patternName)return 0;let captured=capture2.patterns?.at(-1);return captured?.name===part.patternName?captured.values.length:0}function captureHasMinimum(capture2,patterns2,missingPatternResult=!0){let part=capture2.binding.sequence[capture2.index];if(!part?.patternName)return!0;let pattern=patterns2.get(part.patternName);return pattern?patternCaptureCount(capture2)>=pattern.min:missingPatternResult}function captureHasContinuations(capture2,patterns2,missingPatternMinimum=!0){let part=capture2.binding.sequence[capture2.index];if(part?.patternName){let pattern=patterns2.get(part.patternName);if(pattern&&patternCaptureCount(capture2)<pattern.max)return!0}return captureHasMinimum(capture2,patterns2,missingPatternMinimum)&&capture2.index+1<capture2.binding.sequence.length}function captureIsExact(capture2,patterns2){return capture2.index===capture2.binding.sequence.length-1&&captureHasMinimum(capture2,patterns2,!1)}function createSequenceNode(parent,stroke,match,pattern){return{parent,depth:parent?parent.depth+1:0,stroke,match,pattern,children:new Map,patternChildren:[],bindings:[],reachableBindings:[]}}function buildSequenceTree(bindings,patterns2){let root=createSequenceNode(null,null,null);for(let binding of bindings){if(binding.event!=="press")continue;let node=root;for(let part of binding.sequence){let child;if(part.patternName){let pattern=patterns2.get(part.patternName);if(child=node.patternChildren.find((candidate)=>candidate.pattern?.name===part.patternName),!child)child=createSequenceNode(node,part.stroke,part.match,pattern),node.patternChildren.push(child)}else if(child=node.children.get(part.match),!child)child=createSequenceNode(node,part.stroke,part.match),node.children.set(part.match,child);child.reachableBindings.push(binding),node=child}node.bindings.push(binding)}return root}function activeOptionsForCaptures(captures,patterns2){let options=[];for(let capture2 of captures){if(!captureHasMinimum(capture2,patterns2))continue;let index=capture2.index+1,part=capture2.binding.sequence[index];if(part)options.push({part,binding:capture2.binding,index,exact:index===capture2.binding.sequence.length-1,continues:index<capture2.binding.sequence.length-1})}return options}function appendPatternCapture(capture2,index,part,value){let patternName=part.patternName;if(!patternName)return{...capture2,index};let patterns2=[...capture2.patterns??[]],last=patterns2.at(-1);if(last?.name===patternName)patterns2[patterns2.length-1]={...last,values:[...last.values,value],parts:[...last.parts,part]};else patterns2.push({name:patternName,payloadKey:part.payloadKey??patternName,values:[value],parts:[part]});return{layer:capture2.layer,binding:capture2.binding,index,parts:[...capture2.parts,part],patterns:patterns2}}function capturePriority(capture2,matchKeys){let part=capture2.parts.at(-1);if(!part||part.patternName)return matchKeys.length;let index=matchKeys.indexOf(part.match);return index===-1?matchKeys.length:index}function advanceSequenceBinding(layer,binding,index,parts,patterns2,matchKeys,event,matchPattern,createPatternPart){let part=binding.sequence[index];if(!part)return;if(part.patternName){let patternMatch=matchPattern(part.patternName,event);if(!patternMatch)return;let eventPart=createPatternPart(event,part.patternName,patternMatch);return appendPatternCapture({layer,binding,index,parts,patterns:patterns2},index,eventPart,patternMatch.value??event.name)}if(!matchKeys.includes(part.match))return;return{layer,binding,index,parts:[...parts,part],patterns:patterns2}}function advanceSequenceCapture(capture2,matchKeys,event,patterns2,matchPattern,createPatternPart){let currentPart=capture2.binding.sequence[capture2.index];if(currentPart?.patternName){let pattern=patterns2.get(currentPart.patternName);if(pattern&&patternCaptureCount(capture2)<pattern.max){let patternMatch=matchPattern(pattern.name,event);if(patternMatch){let part=createPatternPart(event,pattern.name,patternMatch);return appendPatternCapture(capture2,capture2.index,part,patternMatch.value??event.name)}}if(!captureHasMinimum(capture2,patterns2,!1))return;return advanceSequenceBinding(capture2.layer,capture2.binding,capture2.index+1,capture2.parts,capture2.patterns,matchKeys,event,matchPattern,createPatternPart)}return advanceSequenceBinding(capture2.layer,capture2.binding,capture2.index+1,capture2.parts,capture2.patterns,matchKeys,event,matchPattern,createPatternPart)}function collectRootSequenceCaptures(layer,matchKeys,event,matchPattern,createPatternPart){let captures=[],bestPriority=Number.POSITIVE_INFINITY;for(let binding of layer.bindings){if(binding.event!=="press")continue;let capture2=advanceSequenceBinding(layer,binding,0,[],void 0,matchKeys,event,matchPattern,createPatternPart);if(!capture2)continue;let priority=capturePriority(capture2,matchKeys);if(priority<bestPriority)bestPriority=priority,captures.length=0;if(priority===bestPriority)captures.push(capture2)}return captures}var KEYMAP_EXTENSION_CONTEXT;var init_index_frk6sdcd=__esm(()=>{KEYMAP_EXTENSION_CONTEXT=Symbol("keymap-extension-context")});function createRuntimeEmitter(onError){let listeners2=Object.create(null),off=(name,listener)=>{let current=listeners2[name];if(!current)return;let next=current.filter((candidate)=>candidate!==listener);if(next.length===0)delete listeners2[name];else if(next.length!==current.length)listeners2[name]=next};return{hook(name,listener){return listeners2[name]=[...listeners2[name]??[],listener],()=>off(name,listener)},has(name){return(listeners2[name]?.length??0)>0},emit(name,...args){let current=listeners2[name];if(!current)return;for(let listener of current)try{if(args.length===0)listener();else listener(args[0])}catch(error2){onError(name,error2)}}}}function createItems(){let items=[];return{get:()=>items,set:(next)=>{items=next},remove(value){items=items.filter((candidate)=>candidate!==value)},has:()=>items.length>0,clear:()=>{items=[]}}}function createRuntimeOrderedRegistry(){let items=createItems();return{append(value){return items.set([...items.get(),value]),()=>items.remove(value)},prepend(value){return items.set([value,...items.get()]),()=>items.remove(value)},values:items.get,has:items.has,clear:items.clear}}function createRuntimePriorityRegistry(){let items=createItems(),order=0;return{register(listener,options){let registered={...options,listener,order:order++};return items.set([...items.get(),registered].sort((left,right)=>{return right.priority-left.priority||left.order-right.order})),()=>items.remove(registered)},entries:items.get,has:items.has,clear:items.clear}}function isKeyLike(value){return typeof value==="string"||!!value&&typeof value==="object"&&!Array.isArray(value)}function validateBindings(bindings){if(!Array.isArray(bindings))return{ok:!1,reason:"Invalid keymap bindings: expected an array of binding objects"};for(let[index,binding]of bindings.entries()){if(!binding||typeof binding!=="object"||Array.isArray(binding))return{ok:!1,reason:`Invalid keymap binding at index ${index}: expected a binding object`};if(!isKeyLike(binding.key))return{ok:!1,reason:`Invalid keymap binding at index ${index}: expected "key" to be a string or keystroke object`}}return{ok:!0}}function snapshotBindings(bindings){let validation=validateBindings(bindings);if(!validation.ok)throw Error(validation.reason);return bindings.map((binding)=>({...binding,key:typeof binding.key==="string"?binding.key:{...binding.key}}))}function snapshotParsedBinding(binding){return{...binding,sequence:cloneKeySequence(binding.sequence)}}function createLayerDiagnostics(notify,commands){let analyzers=createRuntimeOrderedRegistry();return{prependLayerAnalyzer(analyzer){return analyzers.prepend(analyzer)},appendLayerAnalyzer(analyzer){return analyzers.append(analyzer)},clearLayerAnalyzers(){analyzers.clear()},analyzeLayer(options){let registeredAnalyzers=analyzers.values();if(registeredAnalyzers.length===0)return;let bindings=buildLayerBindingAnalyses(options.bindings),ctx={target:options.target,order:options.order,sourceBindings:options.sourceBindings,bindings,hasTokenBindings:options.hasTokenBindings,checkCommandResolution(command){return commands.getCommandResolutionStatus(command,options.commands)},warn(code,warning,message){notify.emitWarning(code,warning,message)},warnOnce(key,code,warning,message){notify.warnOnce(key,code,warning,message)},error(code,error2,message){notify.emitError(code,error2,message)}};for(let analyzer of registeredAnalyzers)try{analyzer(ctx)}catch(error2){notify.emitError("layer-analyzer-error",error2,"[Keymap] Error in layer analyzer:")}}}}function buildLayerBindingAnalyses(bindings){return bindings.map((binding)=>({sequence:cloneKeySequence(binding.sequence),command:binding.command,attrs:binding.attrs,event:binding.event,preventDefault:binding.preventDefault,fallthrough:binding.fallthrough,parsedBinding:snapshotParsedBinding(binding.parsedBinding),sourceTarget:binding.sourceTarget,sourceLayerOrder:binding.sourceLayerOrder,bindingIndex:binding.bindingIndex,hasCommandAtSequence:bindings.some((candidate)=>{return candidate.event==="press"&&candidate.command!==void 0&&sameSequence(candidate,binding)}),hasContinuations:bindings.some((candidate)=>{return candidate.event==="press"&&isPrefix(binding,candidate)})}))}function sameSequence(left,right){return left.sequence.length===right.sequence.length&&left.sequence.every((part,index)=>part.match===right.sequence[index]?.match)}function isPrefix(left,right){return left.sequence.length<right.sequence.length&&left.sequence.every((part,index)=>part.match===right.sequence[index]?.match)}function createActiveKeysCache(){return{version:-1,notifyVersion:-1,focused:void 0,value:[],targets:new WeakMap}}function createActiveKeysCaches(){return{plain:createActiveKeysCache(),bindings:createActiveKeysCache(),metadata:createActiveKeysCache(),bindingsAndMetadata:createActiveKeysCache()}}function getActiveKeysCache(caches,options){if(options===void 0)return caches.plain;let includeBindings=options.includeBindings===!0,includeMetadata=options.includeMetadata===!0;return includeBindings?includeMetadata?caches.bindingsAndMetadata:caches.bindings:includeMetadata?caches.metadata:caches.plain}function getFocusedActiveKeysCache(cache,cacheVersion,focused){let cached=focused?cache.targets.get(focused):cache.nullTarget;return cached?.version===cacheVersion?cached:void 0}function setFocusedActiveKeysCache(cache,cacheVersion,focused,value){let cached={version:cacheVersion,value};if(focused)cache.targets.set(focused,cached);else cache.nullTarget=cached}function isSamePendingSequence(current,next){if(current===next)return!0;if(!current||!next)return!1;if(current.captures.length!==next.captures.length)return!1;for(let index=0;index<current.captures.length;index+=1){let left=current.captures[index],right=next.captures[index];if(!left||!right||left.layer!==right.layer||left.binding!==right.binding||left.index!==right.index||left.parts.length!==right.parts.length)return!1;for(let partIndex=0;partIndex<left.parts.length;partIndex+=1)if(left.parts[partIndex]?.match!==right.parts[partIndex]?.match)return!1;let leftPatterns=left.patterns??[],rightPatterns=right.patterns??[];if(leftPatterns.length!==rightPatterns.length)return!1;for(let patternIndex=0;patternIndex<leftPatterns.length;patternIndex+=1){let leftPattern=leftPatterns[patternIndex],rightPattern=rightPatterns[patternIndex];if(!leftPattern||!rightPattern||leftPattern.name!==rightPattern.name)return!1;if(leftPattern.values.length!==rightPattern.values.length)return!1;for(let valueIndex=0;valueIndex<leftPattern.values.length;valueIndex+=1)if(!Object.is(leftPattern.values[valueIndex],rightPattern.values[valueIndex]))return!1}}return!0}function popCapture(capture2){let lastPart=capture2.parts.at(-1);if(!lastPart||capture2.parts.length<=1)return;let index=capture2.index-1,patterns2=capture2.patterns;if(lastPart.patternName){let lastPattern=patterns2?.at(-1);if(lastPattern?.name===lastPart.patternName)if(lastPattern.values.length>1)index=capture2.index,patterns2=[...(patterns2??[]).slice(0,-1),{...lastPattern,values:lastPattern.values.slice(0,-1),parts:lastPattern.parts.slice(0,-1)}];else patterns2=(patterns2??[]).slice(0,-1)}return{layer:capture2.layer,binding:capture2.binding,index,parts:capture2.parts.slice(0,-1),patterns:patterns2}}function collectSequencePartsFromPending(pending){let firstCapture=pending.captures[0];if(!firstCapture||firstCapture.parts.length===0)return[];let parts=[];for(let index=0;index<firstCapture.parts.length;index+=1){let firstPart=firstCapture.parts[index];if(!firstPart)continue;let display,tokenName,hasDisplayConflict=!1,hasTokenConflict=!1;for(let capture2 of pending.captures){let part=capture2.parts[index];if(!part)continue;if(display===void 0){display=part.display,tokenName=part.tokenName;continue}if(!hasDisplayConflict&&display!==part.display)hasDisplayConflict=!0;if(!hasTokenConflict&&tokenName!==part.tokenName)hasTokenConflict=!0}if(display===void 0||hasDisplayConflict)display=stringifyKeyStroke(firstPart.stroke);if(hasTokenConflict)tokenName=void 0;parts.push(createKeySequencePart(firstPart.stroke,{display,match:firstPart.match,tokenName}))}return parts}function getLiveHost(host){if(host.isDestroyed)throw Error("Cannot use a keymap after its host was destroyed");return host}function createActivationService(state,host,hooks,notify,conditions,catalog,options={}){let activeKeysCaches=createActiveKeysCaches(),pendingSequenceCacheVersion=-1,pendingSequenceCache=[],getFocusedTarget=()=>{return getLiveHost(host).getFocusedTarget()},getFocusedTargetIfAvailable2=()=>{return getFocusedTargetIfAvailable(host)},setPendingSequence=(next)=>{let previous=state.pending;if(isSamePendingSequence(previous,next))return;state.pending=next,options.onPendingSequenceChanged?.(previous,next),notifyPendingSequenceChange(),notify.queueStateChange()},ensureValidPendingSequence=()=>{let pending=state.pending;if(!pending)return;let focused=getFocusedTarget(),activeView=catalog.getActiveCommandView(focused),captures=pending.captures.filter((capture2)=>{return state.layers.has(capture2.layer)&&isActiveLayerForFocused(capture2.layer,focused)&&conditions.matchesConditions(capture2.layer)&&bindingMatchesRuntimeState(capture2.binding,focused,activeView)&&captureHasContinuations(capture2,state.patterns)});if(captures.length===0){setPendingSequence(null);return}if(captures.length!==pending.captures.length)setPendingSequence({captures});return state.pending??void 0},revalidatePendingSequenceIfNeeded=()=>{if(host.isDestroyed||!state.pending)return;ensureValidPendingSequence()},hasPendingSequenceState=()=>{return!host.isDestroyed&&state.pending!==null},getPendingSequence=()=>{if(pendingSequenceCacheVersion===state.cacheVersion)return pendingSequenceCache;let pending=ensureValidPendingSequence(),sequence=pending?collectSequencePartsFromPending(pending):[];if(!pending||allRegisteredLayersCanCacheActiveKeys())pendingSequenceCacheVersion=state.cacheVersion,pendingSequenceCache=sequence;return sequence},popPendingSequence=()=>{let pending=ensureValidPendingSequence();if(!pending)return!1;let firstCapture=pending.captures[0];if(!firstCapture||firstCapture.parts.length<=1)return setPendingSequence(null),!0;let nextCaptures=[];for(let capture2 of pending.captures){let nextCapture=popCapture(capture2);if(!nextCapture)continue;nextCaptures.push(nextCapture)}if(nextCaptures.length===0)return setPendingSequence(null),!0;return setPendingSequence({captures:nextCaptures}),!0},getActiveKeys=(options2)=>{let includeBindings=options2?.includeBindings===!0,includeMetadata=options2?.includeMetadata===!0,cache=getActiveKeysCache(activeKeysCaches,options2);if(cache.notifyVersion===state.derivedVersion)return cache.value;return collectActiveKeysForCache(cache,includeBindings,includeMetadata)},collectActiveKeysForCache=(cache,includeBindings,includeMetadata)=>{if(host.isDestroyed)getLiveHost(host);let focused=getFocusedTarget(),cached=getFocusedActiveKeysCache(cache,state.cacheVersion,focused);if(cached)return cache.notifyVersion=state.derivedVersion,cache.version=state.cacheVersion,cache.focused=focused,cache.value=cached.value,cached.value;let activeView=catalog.getActiveCommandView(focused),pending=ensureValidPendingSequence(),activeLayers=pending?[]:getActiveLayers(focused),activeKeys=pending?collectActiveKeysFromPending(pending.captures,includeBindings,includeMetadata,focused,activeView):collectActiveKeysAtRoot(activeLayers,includeBindings,includeMetadata,focused,activeView);if(pending?allRegisteredLayersCanCacheActiveKeys():activeLayersCanCacheActiveKeys(activeLayers))cache.version=state.cacheVersion,cache.notifyVersion=state.derivedVersion,cache.focused=focused,cache.value=activeKeys,setFocusedActiveKeysCache(cache,state.cacheVersion,focused,activeKeys);return activeKeys},getActiveKeysForCaptures=(captures,options2)=>{let includeBindings=options2?.includeBindings===!0,includeMetadata=options2?.includeMetadata===!0,focused=getFocusedTarget(),activeView=catalog.getActiveCommandView(focused);return collectActiveKeysFromPending(captures,includeBindings,includeMetadata,focused,activeView)},getActiveKeysForFocused=(focused,options2)=>{let includeBindings=options2?.includeBindings===!0,includeMetadata=options2?.includeMetadata===!0,currentFocused=getFocusedTargetIfAvailable2(),pending=focused===currentFocused?ensureValidPendingSequence():void 0,activeView=catalog.getActiveCommandView(focused);if(pending)return collectActiveKeysFromPending(pending.captures,includeBindings,includeMetadata,focused,activeView);return collectActiveKeysAtRoot(getActiveLayers(focused),includeBindings,includeMetadata,focused,activeView)},getActiveLayers=(focused)=>{if(state.activeLayersCacheVersion===state.cacheVersion&&state.activeLayersCacheFocused===focused)return state.activeLayersCache;return state.activeLayersCacheVersion=state.cacheVersion,state.activeLayersCacheFocused=focused,state.activeLayersCache=getActiveLayersForFocused(state.sortedLayers,host,focused),state.activeLayersCache},isActiveLayerForFocused=(layer,focused)=>{return isLayerActiveForFocused(host,layer,focused)},activeLayersCanCacheActiveKeys=(activeLayers)=>{return!state.commandResolvers.has()&&state.activeKeyCacheBlockers===0},allRegisteredLayersCanCacheActiveKeys=()=>{return!state.commandResolvers.has()&&state.activeKeyCacheBlockers===0},collectMatchingBindings=(bindings,focused,activeView)=>{let matches=[];for(let binding of bindings)if(conditions.matchesConditions(binding)&&catalog.isBindingVisible(binding,focused,activeView))matches.push(binding);return matches},bindingMatchesRuntimeState=(binding,focused,activeView)=>{return conditions.matchesConditions(binding)&&catalog.isBindingVisible(binding,focused,activeView)},getPartPresentation=(bindings,partIndex)=>{let display,tokenName,hasDisplayConflict=!1,hasTokenConflict=!1;for(let binding of bindings){let part=binding.sequence[partIndex];if(!part)continue;if(display===void 0){display=part.display,tokenName=part.tokenName;continue}if(!hasDisplayConflict&&display!==part.display)hasDisplayConflict=!0;if(!hasTokenConflict&&tokenName!==part.tokenName)hasTokenConflict=!0}if(display===void 0||hasDisplayConflict){let stroke=bindings[0]?.sequence[partIndex]?.stroke;display=stroke?stringifyKeyStroke(stroke):""}if(hasTokenConflict)tokenName=void 0;return{display,tokenName}},toActiveBinding=(binding,focused,activeView)=>{return{sequence:binding.sequence,command:binding.command,commandAttrs:catalog.getBindingCommandAttrs(binding,focused,activeView),attrs:binding.attrs,event:binding.event,preventDefault:binding.preventDefault,fallthrough:binding.fallthrough}},collectActiveBindings=(bindings,focused,activeView)=>{return bindings.map((binding)=>toActiveBinding(binding,focused,activeView))},collectActiveKeysAtRoot=(activeLayers,includeBindings,includeMetadata,focused,activeView)=>{let activeKeys=new Map,stopped=new Set;for(let layer of activeLayers){if(layer.root.children.size===0&&layer.root.patternChildren.length===0||!conditions.matchesConditions(layer))continue;collectActiveKeyNodes(layer.root.children.values(),activeKeys,stopped,includeBindings,focused,activeView),collectActiveKeyNodes(layer.root.patternChildren,activeKeys,stopped,includeBindings,focused,activeView)}return materializeActiveKeys(activeKeys,includeBindings,includeMetadata,focused,activeView)},collectActiveKeyNodes=(nodes,activeKeys,stopped,includeBindings,focused,activeView)=>{for(let node of nodes){let bindingKey=node.match;if(!bindingKey||stopped.has(bindingKey)||!node.stroke)continue;let selection=selectActiveKeyNode(node,includeBindings,focused,activeView);if(!selection)continue;let existing=activeKeys.get(bindingKey);if(!existing)activeKeys.set(bindingKey,createActiveKeyState(node.stroke,selection,includeBindings));else updateActiveKeyState(existing,selection,includeBindings);if(selection.stop)stopped.add(bindingKey)}},selectActiveKeyNode=(node,includeBindings,focused,activeView)=>{if(!(node.children.size>0||node.patternChildren.length>0)){let selected2=selectActiveBindings(nodeExactBindingsNeedPrefilter(node)?collectMatchingBindings(node.bindings,focused,activeView):node.bindings,focused,activeView);if(!selected2)return;let presentation2=getPartPresentation(selected2.bindings,node.depth-1);return{display:presentation2.display,tokenName:presentation2.tokenName,continues:!1,firstBinding:selected2.bindings[0],commandBinding:selected2.commandBinding,bindings:includeBindings?[...selected2.bindings]:void 0,stop:selected2.stop}}let reachableBindings=collectMatchingBindings(node.reachableBindings,focused,activeView);if(reachableBindings.length===0)return;let selected=selectActiveBindings(node.bindings,focused,activeView),presentation=getPartPresentation(reachableBindings,node.depth-1);return{display:presentation.display,tokenName:presentation.tokenName,continues:!0,firstBinding:selected?.bindings[0],commandBinding:selected?.commandBinding,bindings:includeBindings&&selected?[...selected.bindings]:void 0,stop:!0}},nodeExactBindingsNeedPrefilter=(node)=>{if(state.commandResolvers.has())return!0;for(let binding of node.bindings)if(binding.matchers.length>0)return!0;return!1},collectActiveKeysFromPending=(captures,includeBindings,includeMetadata,focused,activeView)=>{let activeKeys=new Map,stopped=new Set;return collectActiveKeyOptions(activeOptionsForCaptures(captures,state.patterns),activeKeys,stopped,includeBindings,focused,activeView),materializeActiveKeys(activeKeys,includeBindings,includeMetadata,focused,activeView)},collectActiveKeyOptions=(options2,activeKeys,stopped,includeBindings,focused,activeView)=>{let seen=new Set;for(let option of options2){if(seen.has(option.part.match))continue;seen.add(option.part.match),collectActiveKeyOption(option,options2,activeKeys,stopped,includeBindings,focused,activeView)}},collectActiveKeyOption=(option,siblingOptions,activeKeys,stopped,includeBindings,focused,activeView)=>{let bindingKey=option.part.match;if(stopped.has(bindingKey))return;let selection=selectActiveKeyOption(option,siblingOptions,includeBindings,focused,activeView);if(!selection)return;let existing=activeKeys.get(bindingKey);if(!existing)activeKeys.set(bindingKey,createActiveKeyState(option.part.stroke,selection,includeBindings));else updateActiveKeyState(existing,selection,includeBindings);if(selection.stop)stopped.add(bindingKey)},materializeActiveKeys=(activeKeys,includeBindings,includeMetadata,focused,activeView)=>{let materialized=[];for(let state2 of activeKeys.values()){let activeKey=materializeActiveKey(state2,includeBindings,includeMetadata,focused,activeView);if(activeKey)materialized.push(activeKey)}return materialized},selectActiveKeyOption=(option,siblingOptions,includeBindings,focused,activeView)=>{let matchingOptions=siblingOptions.filter((candidate)=>candidate.part.match===option.part.match),exactBindings=matchingOptions.filter((candidate)=>candidate.exact).map((candidate)=>candidate.binding),selected=selectActiveBindings(exactBindings,focused,activeView),continues=matchingOptions.some((candidate)=>candidate.continues);if(!continues&&!selected)return;let presentation=getOptionPresentation(matchingOptions);return{display:presentation.display,tokenName:presentation.tokenName,continues,firstBinding:selected?.bindings[0],commandBinding:selected?.commandBinding,bindings:includeBindings&&selected?[...selected.bindings]:void 0,stop:continues||selected?.stop===!0}},getOptionPresentation=(options2)=>{let display,tokenName,hasDisplayConflict=!1,hasTokenConflict=!1;for(let option of options2){let part=option.part;if(display===void 0){display=part.display,tokenName=part.tokenName;continue}if(!hasDisplayConflict&&display!==part.display)hasDisplayConflict=!0;if(!hasTokenConflict&&tokenName!==part.tokenName)hasTokenConflict=!0}let firstPart=options2[0]?.part;if(display===void 0||hasDisplayConflict)display=firstPart?stringifyKeyStroke(firstPart.stroke):"";if(hasTokenConflict)tokenName=void 0;return{display,tokenName}},selectActiveBindings=(bindings,focused,activeView)=>{let selected=[],commandBinding;for(let binding of bindings){if(!conditions.matchesConditions(binding)||!catalog.isBindingVisible(binding,focused,activeView))continue;if(selected.push(binding),binding.command===void 0)continue;if(commandBinding??=binding,!binding.fallthrough)return{bindings:selected,commandBinding,stop:!0}}if(selected.length===0)return;return{bindings:selected,commandBinding,stop:!1}},createActiveKeyState=(stroke,selection,includeBindings)=>{return{stroke,display:selection.display,tokenName:selection.tokenName,continues:selection.continues,firstBinding:selection.firstBinding,commandBinding:selection.commandBinding,bindings:includeBindings&&selection.bindings?[...selection.bindings]:void 0}},updateActiveKeyState=(state2,selection,includeBindings)=>{if(!state2.firstBinding&&selection.firstBinding)state2.firstBinding=selection.firstBinding;if(!state2.commandBinding&&selection.commandBinding)state2.commandBinding=selection.commandBinding;if(selection.continues)state2.continues=!0;if(!includeBindings||!selection.bindings||selection.bindings.length===0)return;if(!state2.bindings){state2.bindings=[...selection.bindings];return}state2.bindings.push(...selection.bindings)},materializeActiveKey=(state2,includeBindings,includeMetadata,focused,activeView)=>{if(!state2.commandBinding&&!state2.continues)return;let activeKey={stroke:cloneKeyStroke(state2.stroke),display:state2.display,continues:state2.continues};if(state2.tokenName)activeKey.tokenName=state2.tokenName;if(state2.commandBinding)activeKey.command=state2.commandBinding.command;if(includeBindings&&state2.bindings&&state2.bindings.length>0)activeKey.bindings=state2.bindings.length===1?[toActiveBinding(state2.bindings[0],focused,activeView)]:collectActiveBindings(state2.bindings,focused,activeView);if(includeMetadata){if(state2.firstBinding?.attrs)activeKey.bindingAttrs=state2.firstBinding.attrs;let commandAttrs=state2.commandBinding?catalog.getBindingCommandAttrs(state2.commandBinding,focused,activeView):void 0;if(commandAttrs)activeKey.commandAttrs=commandAttrs}return activeKey},notifyPendingSequenceChange=()=>{if(!hooks.has("pendingSequence"))return;hooks.emit("pendingSequence",state.pending?collectSequencePartsFromPending(state.pending):[])};return{getFocusedTarget,getFocusedTargetIfAvailable:getFocusedTargetIfAvailable2,setPendingSequence,ensureValidPendingSequence,revalidatePendingSequenceIfNeeded,hasPendingSequenceState,getPendingSequence,popPendingSequence,getActiveKeys,getActiveKeysForCaptures,getActiveKeysForFocused,getActiveLayers,isLayerActiveForFocused:isActiveLayerForFocused,collectSequencePartsFromPending,collectMatchingBindings,collectActiveBindings}}function normalizeBindingCommand(command){if(command===void 0||typeof command==="function")return command;let trimmed=command.trim();if(!trimmed)throw Error("Invalid keymap command: command cannot be empty");return trimmed}function normalizeCommandName(name){let trimmed=name.trim();if(!trimmed)throw Error("Invalid keymap command name: name cannot be empty");if(/\s/.test(trimmed))throw Error(`Invalid keymap command name "${name}": command names cannot contain whitespace`);return trimmed}function pushCommandEntry(target,name,entry2){let existing=target.get(name);if(existing)existing.push(entry2);else target.set(name,[entry2])}function getRegisteredCommandView(state){let entries=[],chainsByName=new Map;for(let layer of state.layers)for(let commandState of layer.commands){let entry2={layer,commandState};entries.push(entry2),pushCommandEntry(chainsByName,commandState.command.name,entry2)}return{entries,chainsByName}}function collectActiveCommands(layers,conditions,checkLayerConditions){let entries=[],reachable=[],reachableByName=new Map,chainsByName=new Map;for(let layer of layers){if(layer.commands.length===0)continue;if(checkLayerConditions&&!conditions.matchesConditions(layer))continue;for(let commandState of layer.commands){if(!conditions.matchesConditions(commandState))continue;let entry2={layer,commandState};if(entries.push(entry2),pushCommandEntry(chainsByName,commandState.command.name,entry2),!reachableByName.has(commandState.command.name))reachableByName.set(commandState.command.name,entry2),reachable.push(entry2)}}return{layers,entries,reachable,reachableByName,chainsByName}}function getActiveCommandView(state,host,conditions,focused){if(state.activeLayersCacheVersion!==state.cacheVersion||state.activeLayersCacheFocused!==focused)state.activeLayersCacheVersion=state.cacheVersion,state.activeLayersCacheFocused=focused,state.activeLayersCache=getActiveLayersForFocused(state.sortedLayers,host,focused);return collectActiveCommands(state.activeLayersCache,conditions,!0)}function mergeRequirement(target,name,value,source){if(Object.prototype.hasOwnProperty.call(target,name)&&!Object.is(target[name],value))throw Error(`Conflicting keymap requirement for "${name}" from ${source}`);target[name]=value}function mergeAttribute(target,name,value,source){if(Object.prototype.hasOwnProperty.call(target,name)&&!Object.is(target[name],value))throw Error(`Conflicting keymap attribute for "${name}" from ${source}`);target[name]=value}function createFieldCompilerContext(options){let source=`field ${options.fieldName}`;return{require(name,value){mergeRequirement(options.requirements,name,value,source)},attr(name,value){if(!options.attrs)throw Error(`Keymap ${source} cannot publish attrs`);mergeAttribute(options.attrs,name,value,source)},activeWhen(matcher){options.matchers.push(options.conditions.buildRuntimeMatcher(matcher,source))}}}function isPlainObject2(value){let prototype=Object.getPrototypeOf(value);return prototype===Object.prototype||prototype===null}function getErrorMessage(error2,fallback){if(error2 instanceof Error&&error2.message)return error2.message;return fallback}function isPromiseLike(value){if(!value)return!1;if(typeof value!=="object"&&typeof value!=="function")return!1;return typeof value.then==="function"}function snapshotDataValue(value,options){let deep=options?.deep===!0,freeze=options?.freeze===!0,preserveNonPlainObjects=options?.preserveNonPlainObjects===!0;if(Array.isArray(value)){let cloned=deep?value.map((entry2)=>snapshotDataValue(entry2,options)):[...value];return freeze?Object.freeze(cloned):cloned}if(value&&typeof value==="object"){if(preserveNonPlainObjects&&!isPlainObject2(value))return value;let cloned={};for(let[key,entry2]of Object.entries(value))cloned[key]=deep?snapshotDataValue(entry2,options):entry2;return freeze?Object.freeze(cloned):cloned}return value}function createCommandCatalogService(state,host,notify,conditions,options){let registeredViewVersion=-1,registeredView,activeViewVersion=-1,activeViewFocused,activeView,registeredBindingsCacheVersion=-1,registeredBindingsCacheCommands,registeredBindingsCache,registeredBindingsByCommandVersion=-1,registeredBindingsByCommand,registeredResolvedCacheVersion=-1,registeredResolvedCache=new Map,normalizeLayerCommands=(commands)=>{return normalizeCommands({commands,commandFields:state.commandFields,conditions,onError:(code,error2,message)=>{notify.emitError(code,error2,message)}})},prependCommandResolver=(resolver)=>{return mutateCommandResolvers(()=>state.commandResolvers.prepend(resolver),resolver)},appendCommandResolver=(resolver)=>{return mutateCommandResolvers(()=>state.commandResolvers.append(resolver),resolver)},clearCommandResolvers=()=>{if(!state.commandResolvers.has())return;notify.runWithStateChangeBatch(()=>{state.commandResolvers.clear(),options.onCommandResolversChanged(),notify.queueStateChange()})},getCommands=(query2)=>{return getFilteredCommandEntries(query2).map((entry2)=>getCommand(entry2.commandState))},getCommandEntries=(query2)=>{let context=getCommandQueryContext(query2),filteredEntries=getFilteredCommandEntries(query2,context);if(filteredEntries.length===0)return[];let grouped=filteredEntries.map((entry2)=>({entry:entry2,command:getCommand(entry2.commandState),commandAttrs:entry2.commandState.attrs,bindings:[]})),indexesByName=new Map;for(let[index,item]of grouped.entries()){let existing=indexesByName.get(item.command.name);if(existing)existing.push(index);else indexesByName.set(item.command.name,[index])}if(indexesByName.size>0)collectCommandEntryBindings(grouped,indexesByName,context);return grouped.map((item)=>({command:item.command,bindings:item.bindings}))},getCommandBindings=(query2)=>{if(query2.visibility==="registered"&&registeredBindingsCacheVersion===state.derivedVersion&&registeredBindingsCacheCommands===query2.commands&&registeredBindingsCache)return registeredBindingsCache;let bindingsByCommand=new Map;for(let command of query2.commands)if(!bindingsByCommand.has(command))bindingsByCommand.set(command,[]);if(bindingsByCommand.size===0)return bindingsByCommand;if(collectCommandBindings(bindingsByCommand,getCommandQueryContext(query2)),query2.visibility==="registered")registeredBindingsCacheVersion=state.derivedVersion,registeredBindingsCacheCommands=query2.commands,registeredBindingsCache=bindingsByCommand;return bindingsByCommand},getResolvedCommandChain=(command,focused,execution)=>{let view=getActiveCommandView2(focused);if(execution){let resolved2=[],chain=view.chainsByName.get(command);if(chain)for(let entry2 of chain)resolved2.push({target:entry2.layer.target,command:entry2.commandState.command,attrs:entry2.commandState.attrs,payload:execution.payload});let fallback2=resolveCommandWithResolversForMode(command,focused,{mode:"active",execution});if(fallback2.resolved)resolved2.push(fallback2.resolved);return{entries:resolved2.length>0?resolved2:void 0,hadError:fallback2.hadError}}let resolved=[];for(let entry2 of view.chainsByName.get(command)??[])resolved.push({target:entry2.layer.target,command:entry2.commandState.command,attrs:entry2.commandState.attrs});let fallback=resolveCommandWithResolversForMode(command,focused,{mode:"active"});if(fallback.resolved)resolved.push(fallback.resolved);return{entries:resolved.length>0?resolved:void 0,hadError:fallback.hadError}},getRegisteredResolvedEntries=(command)=>{if(registeredResolvedCacheVersion!==state.derivedVersion)registeredResolvedCacheVersion=state.derivedVersion,registeredResolvedCache=new Map;if(registeredResolvedCache.has(command))return registeredResolvedCache.get(command)??void 0;let resolved=resolveRegisteredEntries(getRegisteredCommandChain(command));return registeredResolvedCache.set(command,resolved??null),resolved},getActiveRegisteredResolvedEntries=(command,focused)=>{return resolveRegisteredEntries(getActiveCommandView2(focused).chainsByName.get(command))},resolveRegisteredResolverFallback=(command,execution)=>{return resolveCommandWithResolversForMode(command,null,{mode:"registered",execution})},resolveActiveResolverFallback=(command,focused,execution)=>{return resolveCommandWithResolversForMode(command,focused,{mode:"active",execution})},getTopCommand=(command,focused)=>{return getTopResolvedCommand(command,focused)?.command},getCommandByName=(command)=>{return getCommandEntry(command)?.commandState.command},getDispatchUnavailableCommandState=(command,focused,includeCommand)=>{let chain=getCommandView().chainsByName.get(command);if(!chain||chain.length===0)return;let inactiveEntry,disabledEntry;for(let entry2 of chain){if(!isLayerActiveForFocused(host,entry2.layer,focused)){inactiveEntry??=entry2;continue}if(!conditions.matchesConditions(entry2.layer)||!conditions.matchesConditions(entry2.commandState))disabledEntry??=entry2}let unavailableEntry=disabledEntry??inactiveEntry;if(!unavailableEntry)return;return{reason:disabledEntry?"disabled":"inactive",command:includeCommand?unavailableEntry.commandState.command:void 0}},getActiveCommandView2=(focused)=>{if(activeViewVersion===state.derivedVersion&&activeViewFocused===focused&&activeView)return activeView;let view=getActiveCommandView(state,host,conditions,focused);if(activeCommandViewCanCache())activeViewVersion=state.derivedVersion,activeViewFocused=focused,activeView=view;return view},getCommandView=()=>{if(registeredViewVersion===state.derivedVersion&&registeredView)return registeredView;return registeredViewVersion=state.derivedVersion,registeredView=getRegisteredCommandView(state),registeredView},activeCommandViewCanCache=()=>{return state.activeCommandViewCacheBlockers===0},isBindingVisible=(binding,focused,activeView2)=>{if(binding.command===void 0||binding.run)return!0;if(typeof binding.command!=="string")return!1;if(activeView2.reachableByName.has(binding.command))return!0;return getFallbackResolvedCommand(binding.command,focused,"active")!==void 0},getBindingCommandAttrs=(binding,focused,activeView2)=>{if(typeof binding.command!=="string")return;let active=activeView2.reachableByName.get(binding.command);if(active)return active.commandState.attrs;return getFallbackResolvedCommand(binding.command,focused,"active")?.attrs},getCommandResolutionStatus=(command,layerCommands)=>{if(layerCommands?.some((state2)=>state2.command.name===command)||getCommandView().chainsByName.has(command))return"resolved";let lookup=resolveCommandWithResolversForMode(command,getFocusedTargetIfAvailable(host));if(lookup.resolved||lookup.hadError)return lookup.resolved?"resolved":"error";return"unresolved"},mutateCommandResolvers=(register2,resolver)=>{return notify.runWithStateChangeBatch(()=>{let off=register2();return options.onCommandResolversChanged(),notify.queueStateChange(),()=>{notify.runWithStateChangeBatch(()=>{if(off(),state.commandResolvers.values().includes(resolver))return;options.onCommandResolversChanged(),notify.queueStateChange()})}})},getTopResolvedCommand=(command,focused)=>{let active=getActiveCommandView2(focused).reachableByName.get(command);if(active)return{target:active.layer.target,command:active.commandState.command,attrs:active.commandState.attrs};return getFallbackResolvedCommand(command,focused,"active")},getCommandEntry=(command)=>{return getRegisteredCommandChain(command)?.[0]},getRegisteredCommandChain=(command)=>{let entries=[];for(let layer of state.sortedLayers)for(let commandState of layer.commands)if(commandState.command.name===command)entries.push({layer,commandState});return entries.length>0?entries:void 0},resolveRegisteredEntries=(chain)=>{if(!chain?.length)return;return chain.map((entry2)=>({target:entry2.layer.target,command:entry2.commandState.command,attrs:entry2.commandState.attrs}))},getFallbackResolvedCommand=(command,focused,mode)=>{return resolveCommandWithResolversForMode(command,focused,{mode}).resolved},getRegisteredLayerCommandEntries=()=>{return getCommandView().entries},getRegisteredBindingsByCommand=()=>{if(registeredBindingsByCommandVersion===state.derivedVersion&&registeredBindingsByCommand)return registeredBindingsByCommand;let bindingsByCommand=new Map;for(let layer of state.layers)for(let binding of layer.bindings){if(typeof binding.command!=="string")continue;let bindings=bindingsByCommand.get(binding.command);if(bindings)bindings.push(binding);else bindingsByCommand.set(binding.command,[binding])}return registeredBindingsByCommandVersion=state.derivedVersion,registeredBindingsByCommand=bindingsByCommand,bindingsByCommand},getCommandQueryContext=(query2)=>{let visibility=query2?.visibility??"reachable",focused=query2&&Object.prototype.hasOwnProperty.call(query2,"focused")?query2.focused??null:getFocusedTargetIfAvailable(host);if(visibility==="registered")return{visibility,focused};return{visibility,focused,activeView:getActiveCommandView2(focused)}},getFilteredCommandEntries=(query2,context=getCommandQueryContext(query2))=>{let entries;if(context.visibility==="registered")entries=getRegisteredLayerCommandEntries();else if(context.visibility==="active")entries=context.activeView?.entries??[];else entries=context.activeView?.reachable??[];return queryLayerCommandEntries({entries,query:query2,getCommand:(command)=>getCommand(command),onFilterError:(error2)=>{notify.emitError("command-query-filter-error",error2,"[Keymap] Error in command query filter:")}})},collectCommandEntryBindings=(grouped,indexesByName,context)=>{visitCommandQueryBindings(context,(binding)=>{collectBindingForCommandEntries(grouped,indexesByName,binding)})},collectCommandBindings=(bindingsByCommand,context)=>{if(context.visibility==="registered"){let registeredBindings=getRegisteredBindingsByCommand();for(let[command,bindings]of bindingsByCommand){let commandAttrs=getCommandView().chainsByName.get(command)?.[0]?.commandState.attrs;for(let binding of registeredBindings.get(command)??[])bindings.push(createActiveBinding(binding,commandAttrs))}return}visitCommandQueryBindings(context,(binding)=>{collectBindingForCommandBindings(bindingsByCommand,binding,context)})},visitCommandQueryBindings=(context,visit)=>{if(context.visibility==="registered"){for(let layer of state.layers)for(let binding of layer.bindings)visit(binding);return}let activeView2=context.activeView;if(!activeView2)return;for(let layer of activeView2.layers){if(layer.bindings.length===0||!conditions.matchesConditions(layer))continue;for(let binding of layer.bindings)if(conditions.matchesConditions(binding)&&isBindingVisible(binding,context.focused,activeView2))visit(binding)}},collectBindingForCommandEntries=(grouped,indexesByName,binding)=>{if(typeof binding.command!=="string")return;let indexes=indexesByName.get(binding.command);if(!indexes||indexes.length===0)return;for(let index of indexes){let item=grouped[index];if(!item)continue;item.bindings.push(createActiveBinding(binding,item.commandAttrs))}},collectBindingForCommandBindings=(bindingsByCommand,binding,context)=>{if(typeof binding.command!=="string")return;let bindings=bindingsByCommand.get(binding.command);if(!bindings)return;bindings.push(createActiveBinding(binding,getCommandBindingAttrsForQuery(binding,context)))},createActiveBinding=(binding,commandAttrs)=>{return{sequence:binding.sequence,command:binding.command,commandAttrs,attrs:binding.attrs,event:binding.event,preventDefault:binding.preventDefault,fallthrough:binding.fallthrough}},getCommandBindingAttrsForQuery=(binding,context)=>{if(typeof binding.command!=="string")return;if(context.visibility==="registered")return getCommandView().chainsByName.get(binding.command)?.[0]?.commandState.attrs;let activeView2=context.activeView;if(!activeView2)return;return getBindingCommandAttrs(binding,context.focused,activeView2)},resolveCommandWithResolversForMode=(command,focused,options2)=>{let mode=options2?.mode??"active",execution=options2?.execution??{input:command},lookup=resolveCommandWithResolvers(command,state.commandResolvers.values(),()=>createCommandResolverContext(focused,mode,execution),(error2)=>{notify.emitError("command-resolver-error",error2,`[Keymap] Error in command resolver for "${command}":`)}),resolved=lookup.resolved;if(resolved){let entry2=getCommandEntryForMode(resolved.command.name,focused,mode);if(entry2?.commandState.command===resolved.command&&resolved.target===void 0)resolved={...resolved,target:entry2.layer.target},lookup.resolved=resolved}if(resolved&&!resolved.attrs){let attrs=getCommandStateAttrs(resolved.command.name,focused,mode)??getResolverCommandAttrs(resolved.command);if(attrs)lookup.resolved={...resolved,attrs}}return lookup},getCommandStateAttrs=(command,focused,mode)=>{if(mode==="registered")return getCommandEntry(command)?.commandState.attrs;return getActiveCommandView2(focused).reachableByName.get(command)?.commandState.attrs},getCommandEntryForMode=(command,focused,mode)=>{if(mode==="registered")return getCommandEntry(command);return getActiveCommandView2(focused).reachableByName.get(command)},createCommandResolverContext=(focused,mode,execution)=>{let{input,payload}=execution;return{context:{get input(){return input},get payload(){return payload},setInput(nextInput){input=nextInput},setPayload(nextPayload){payload=nextPayload},getCommand:(name)=>{if(mode==="registered")return getCommandByName(name);return getTopCommand(name,focused)}},getExecutionFields(){return{input,payload}}}};return{normalizeCommands:normalizeLayerCommands,prependCommandResolver,appendCommandResolver,clearCommandResolvers,getCommands,getCommandEntries,getCommandBindings,getResolvedCommandChain,getRegisteredResolvedEntries,getActiveRegisteredResolvedEntries,resolveRegisteredResolverFallback,resolveActiveResolverFallback,getTopCommand,getDispatchUnavailableCommandState,getActiveCommandView:getActiveCommandView2,isBindingVisible,getBindingCommandAttrs,getCommandResolutionStatus}}function getCommand(state){return state.command}function normalizeCommands(options){let normalizedCommands=[],seen=new Set;for(let command of options.commands)try{let mergedRequires={},matchers=[],normalizedName=normalizeCommandName(command.name),fields=getCommandFields(command),attrs={};if(seen.has(normalizedName)){options.onError("duplicate-command",{command:normalizedName},`Duplicate keymap command "${normalizedName}" in the same layer`);continue}command.name=normalizedName;for(let[fieldName,value]of Object.entries(fields)){if(value===void 0)continue;let compiler=options.commandFields.get(fieldName);if(!compiler)continue;compiler(value,createFieldCompilerContext({fieldName,conditions:options.conditions,requirements:mergedRequires,matchers,attrs}))}let commandState={command,fields,attrs:Object.keys(attrs).length===0?void 0:attrs,requires:Object.entries(mergedRequires),matchers};seen.add(commandState.command.name),normalizedCommands.push(commandState)}catch(error2){options.onError("register-command-failed",error2,getErrorMessage(error2,`Failed to register keymap command "${String(command.name)}"`));continue}return normalizedCommands}function resolveCommandWithResolvers(command,resolvers,createContext3,onResolverError){if(resolvers.length===0)return{hadError:!1};let hadError=!1;for(let resolver of resolvers){let resolvedCommand,attempt=createContext3();try{resolvedCommand=resolver(command,attempt.context)}catch(error2){hadError=!0,onResolverError(error2);continue}if(resolvedCommand)return{hadError,resolved:getResolverCommandEntry(resolvedCommand,attempt.getExecutionFields())}}return{hadError}}function getCommandFields(command){let fields={};for(let[name,value]of Object.entries(command))if(!RESERVED_COMMAND_FIELDS.has(name)&&value!==void 0)fields[name]=value;return Object.keys(fields).length===0?EMPTY_COMMAND_FIELDS:fields}function getResolverCommandEntry(command,execution){return{command,input:execution.input,payload:execution.payload}}function getResolverCommandAttrs(command){let fields=getCommandFields(command);return fields===EMPTY_COMMAND_FIELDS?void 0:fields}function queryLayerCommandEntries(options){let namespace=options.query?.namespace,limit=normalizeQueryLimit(options.query?.limit);if(limit===0)return[];let normalizedSearch=options.query?.search?.trim().toLowerCase()??"",searchKeys=DEFAULT_COMMAND_SEARCH_FIELDS;if(options.query?.searchIn&&options.query.searchIn.length>0)searchKeys=options.query.searchIn;let filter=options.query?.filter,filterEntries2,filterPredicate,exactNameFilter;if(typeof filter==="function")filterPredicate=filter;else if(filter){let entries=Object.entries(filter),remainingEntries=[];for(let[key,matcher]of entries){if(key==="name"){if(typeof matcher==="string"){exactNameFilter=new Set([matcher]);continue}if(Array.isArray(matcher)){let names=new Set;for(let value of matcher)if(typeof value==="string")names.add(value);exactNameFilter=names;continue}}remainingEntries.push([key,matcher])}filterEntries2=remainingEntries.length>0?remainingEntries:void 0}let results=[];for(let entry2 of options.entries){let commandState=entry2.commandState;if(!commandMatchesNamespace(commandState,namespace))continue;if(!commandMatchesSearch(commandState,normalizedSearch,searchKeys))continue;if(exactNameFilter&&!exactNameFilter.has(commandState.command.name))continue;if(!commandMatchesFilters(commandState,filterEntries2,options))continue;if(filterPredicate){let matches=!1;try{matches=filterPredicate(options.getCommand(commandState))}catch(error2){options.onFilterError(error2);continue}if(!matches)continue}if(results.push(entry2),limit!==void 0&&results.length>=limit)break}return results}function normalizeQueryLimit(value){if(value===void 0)return;let limit=Math.floor(Number(value));if(!Number.isFinite(limit)||limit<=0)return 0;return limit}function commandMatchesSearch(commandState,search,searchKeys){if(!search)return!0;for(let key of searchKeys)if(commandKeyMatchesSearch(commandState,key,search))return!0;return!1}function commandMatchesNamespace(commandState,namespace){if(namespace===void 0)return!0;let fields=commandState.fields;if(!Object.prototype.hasOwnProperty.call(fields,"namespace"))return!1;return valueMatchesFilter(fields.namespace,namespace)}function commandMatchesFilters(commandState,filters,options){if(!filters)return!0;for(let[key,matcher]of filters)if(!commandKeyMatchesQuery(commandState,key,matcher,options))return!1;return!0}function commandKeyMatchesSearch(commandState,key,search){return getCommandSearchText(commandState,key)?.includes(search)===!0}function getCommandSearchText(commandState,key){let cache=commandSearchCache.get(commandState);if(!cache)cache=new Map,commandSearchCache.set(commandState,cache);if(cache.has(key))return cache.get(key);let{fields,attrs}=commandState,value;if(key==="name")value=commandState.command.name;else if(Object.prototype.hasOwnProperty.call(fields,key))value=fields[key];else if(attrs&&Object.prototype.hasOwnProperty.call(attrs,key))value=attrs[key];let text=toSearchText(value);return cache.set(key,text),text}function toSearchText(value){if(Array.isArray(value)){let parts=[];for(let entry2 of value){let text=toSearchText(entry2);if(text!==void 0)parts.push(text)}return parts.length>0?parts.join("\x00"):void 0}if(typeof value==="string")return value.toLowerCase();if(typeof value==="number"||typeof value==="boolean"||typeof value==="bigint")return String(value).toLowerCase();return}function runCommandQueryPredicate(matcher,value,command,onFilterError){try{return matcher(value,command)}catch(error2){return onFilterError(error2),!1}}function commandKeyMatchesQuery(commandState,key,matcher,options){if(typeof matcher==="function")return commandKeyMatchesPredicate(commandState,key,matcher,options);return commandKeyMatchesExact(commandState,key,matcher)}function commandKeyMatchesPredicate(commandState,key,matcher,options){let{command,fields,attrs}=commandState,commandView,foundValue=!1,getCommandView=()=>commandView??=options.getCommand(commandState);if(key==="name"){if(foundValue=!0,runCommandQueryPredicate(matcher,command.name,getCommandView(),options.onFilterError))return!0}if(Object.prototype.hasOwnProperty.call(fields,key)){if(foundValue=!0,runCommandQueryPredicate(matcher,fields[key],getCommandView(),options.onFilterError))return!0}if(attrs&&Object.prototype.hasOwnProperty.call(attrs,key)){if(foundValue=!0,runCommandQueryPredicate(matcher,attrs[key],getCommandView(),options.onFilterError))return!0}return!foundValue&&runCommandQueryPredicate(matcher,void 0,getCommandView(),options.onFilterError)}function commandKeyMatchesExact(commandState,key,matcher){let{command,fields,attrs}=commandState;if(key==="name"&&valueMatchesFilter(command.name,matcher))return!0;if(Object.prototype.hasOwnProperty.call(fields,key)&&valueMatchesFilter(fields[key],matcher))return!0;return!!attrs&&Object.prototype.hasOwnProperty.call(attrs,key)&&valueMatchesFilter(attrs[key],matcher)}function valueMatchesFilter(value,matcher){if(Array.isArray(matcher))return matcher.some((expected)=>valueMatchesExact(value,expected));return valueMatchesExact(value,matcher)}function valueMatchesExact(value,expected){if(Array.isArray(value))return value.some((entry2)=>valueMatchesExact(entry2,expected));return Object.is(value,expected)}function createCommandExecutorService(notify,runtime,activation,catalog,options){let createCommandContext=(event,focused,target,data,input,payload)=>{return{keymap:options.keymap,event,focused,target,data,input,payload}},executeResolvedCommand=(commandName,command,context,includeCommand)=>{let commandView=typeof command==="function"?void 0:command,run=typeof command==="function"?command:command.run,resultCommand=includeCommand?commandView:void 0,result2;try{result2=run(commandView?{...context,command:commandView}:context)}catch(error2){return notify.emitError("command-execution-error",error2,`[Keymap] Error running command "${commandName}":`),{status:"error",result:resultCommand?{ok:!1,reason:"error",command:resultCommand}:{ok:!1,reason:"error"}}}if(isPromiseLike(result2))return result2.catch((error2)=>{notify.emitError("async-command-error",error2,`[Keymap] Async error in command "${commandName}":`)}),{status:"handled",result:resultCommand?{ok:!0,command:resultCommand}:{ok:!0}};if(isRunCommandResult(result2)){let commandResult=result2;if(!result2.ok&&result2.reason!=="not-found"&&includeCommand&&commandView&&!result2.command)commandResult={...result2,command:commandView};else if(result2.ok&&includeCommand&&commandView&&!result2.command)commandResult={...result2,command:commandView};return{status:result2.ok?"handled":"rejected",result:commandResult}}if(result2===!1)return{status:"rejected",result:resultCommand?{ok:!1,reason:"rejected",command:resultCommand}:{ok:!1,reason:"rejected"}};return{status:"handled",result:resultCommand?{ok:!0,command:resultCommand}:{ok:!0}}},executeCommandChain=(commandName,chain,event,focused,target,data,payload,includeCommand)=>{let rejected;for(let entry2 of chain??[]){let executed=executeResolvedCommand(commandName,entry2.command,createCommandContext(event,focused,target??entry2.target??null,data,commandName,payload),includeCommand);if(executed.status==="handled"||executed.status==="error")return[executed.result,rejected];rejected=executed.result}return[void 0,rejected]},executeProgrammaticCommand=(cmd,commandOptions,mode)=>{let normalized;try{normalized=normalizeBindingCommand(cmd)}catch{return{ok:!1,reason:"invalid-args"}}if(typeof normalized!=="string")return{ok:!1,reason:"not-found"};let includeCommand=commandOptions?.includeCommand===!0,focused=commandOptions?.focused??activation.getFocusedTargetIfAvailable(),event=commandOptions?.event??options.createCommandEvent(),data=runtime.getReadonlyData(),payload=commandOptions?.payload,chain=mode==="registered"?catalog.getRegisteredResolvedEntries(normalized):catalog.getActiveRegisteredResolvedEntries(normalized,focused),[done,rejected]=executeCommandChain(normalized,chain,event,focused,commandOptions?.target,data,payload,includeCommand);if(done)return done;let rejectedResult=rejected,fallback=mode==="registered"?catalog.resolveRegisteredResolverFallback(normalized,{input:normalized,payload}):catalog.resolveActiveResolverFallback(normalized,focused,{input:normalized,payload});if(fallback.resolved){let result2=executeResolvedCommand(normalized,fallback.resolved.command,createCommandContext(event,focused,commandOptions?.target??fallback.resolved.target??null,data,fallback.resolved.input??normalized,fallback.resolved.payload),includeCommand);if(result2.status==="handled"||result2.status==="error")return result2.result;rejectedResult=result2.result}if(fallback.hadError)return{ok:!1,reason:"error"};if(mode==="active"){let unavailable2=catalog.getDispatchUnavailableCommandState(normalized,focused,includeCommand);if(unavailable2)return unavailable2.command?{ok:!1,reason:unavailable2.reason,command:unavailable2.command}:{ok:!1,reason:unavailable2.reason}}return rejectedResult??{ok:!1,reason:"not-found"}};return{runCommand(cmd,commandOptions){return executeProgrammaticCommand(cmd,commandOptions,"registered")},dispatchCommand(cmd,commandOptions){return executeProgrammaticCommand(cmd,commandOptions,"active")},runBinding(bindingLayer,binding,event,focused,payload){let data=runtime.getReadonlyData();if(binding.run){if(executeResolvedCommand(typeof binding.command==="string"?binding.command:"<function>",binding.run,createCommandContext(event,focused,bindingLayer.target??null,data,typeof binding.command==="string"?binding.command:"<function>",payload),!1).status==="rejected")return!1;return applyBindingEventEffects(binding,event),!0}if(typeof binding.command!=="string")return!1;let chain=catalog.getResolvedCommandChain(binding.command,focused,payload===void 0?void 0:{input:binding.command,payload}).entries;for(let entry2 of chain??[]){if(executeResolvedCommand(binding.command,entry2.command,createCommandContext(event,focused,entry2.target??bindingLayer.target??null,data,entry2.input??binding.command,entry2.payload),!1).status==="rejected")continue;return applyBindingEventEffects(binding,event),!0}return!1}}}function isRunCommandResult(value){return typeof value==="object"&&value!==null&&"ok"in value}function applyBindingEventEffects(binding,event){if(!binding.preventDefault)return;event.preventDefault(),event.stopPropagation()}function snapshotAttributes(attrs){if(Object.keys(attrs).length===0)return;return snapshotDataValue(attrs,{freeze:!0})}function createCompilerService(state,notify,conditions,options){let parseTokenKey=(key)=>{return parseSingleKeyPartWithParsers(key,state.bindingParsers.values(),{tokens:state.tokens,patterns:state.patterns,layer:EMPTY_COMPILE_FIELDS,parseObjectKey:(value,options2)=>parseObjectKeyPart(value,options2)})},parseKeySequence=(key)=>{if(typeof key!=="string")return[parseObjectKeyPart(key)];let parsed=parseBindingSequenceWithParsers(key,state.bindingParsers.values(),{tokens:state.tokens,patterns:state.patterns,layer:EMPTY_COMPILE_FIELDS,parseObjectKey:(value,options2)=>parseObjectKeyPart(value,options2)});for(let tokenName of parsed.unknownTokens)options.warnUnknownToken(tokenName,key);return parsed.parts},formatKey=(key,options2)=>{return stringifyKeySequence(parseKeySequence(key),options2)},compileBindings=(bindings,tokens2,sourceTarget,sourceLayerOrder,compileFields)=>{let bindingStates=[],hasTokenBindings=!1,bindingExpanders=state.bindingExpanders.values(),bindingParsers=state.bindingParsers.values(),bindingFieldCompilers=state.bindingFields,allowExactPrefixAmbiguity=state.disambiguationResolvers.has(),warnUnknownField=options.warnUnknownField,warnUnknownToken=options.warnUnknownToken;for(let[bindingIndex,binding]of bindings.entries()){let expandedBindingKeys;try{expandedBindingKeys=expandBindingKeyWithExpanders(binding.key,bindingExpanders,{layer:compileFields})}catch(error2){notify.emitError("binding-expand-error",error2,getErrorMessage(error2,"Failed to expand keymap binding"));continue}for(let expandedBindingKey of expandedBindingKeys){let expandedKey=expandedBindingKey.key,parsed;try{parsed=typeof expandedKey==="string"?parseBindingSequenceWithParsers(expandedKey,bindingParsers,{tokens:tokens2,patterns:state.patterns,layer:compileFields,parseObjectKey:(value,options2)=>parseObjectKeyPart(value,options2)}):{parts:[parseObjectKeyPart(expandedKey)],usedTokens:[],unknownTokens:[],hasTokenBindings:!1},parsed=applyExpansionDisplays(parsed,expandedBindingKey)}catch(error2){notify.emitError("binding-parse-error",error2,getErrorMessage(error2,"Failed to parse keymap binding"));continue}let sequence=parsed.parts;hasTokenBindings||=parsed.hasTokenBindings;for(let tokenName of parsed.unknownTokens)warnUnknownToken(tokenName,typeof expandedKey==="string"?expandedKey:String(expandedKey.name));for(let compiledInput of applyBindingTransformers(binding,sequence,tokens2,bindingParsers,compileFields))try{let event=normalizeBindingEvent(compiledInput.event),compiledSequence=compiledInput.sequence,mergedRequires={},mergedAttrs={},matchers=[];for(let fieldName in compiledInput){if(fieldName==="sequence")continue;if(RESERVED_BINDING_FIELDS.has(fieldName))continue;let value=compiledInput[fieldName];if(value===void 0)continue;let compiler=bindingFieldCompilers.get(fieldName);if(!compiler){warnUnknownField("binding",fieldName);continue}compiler(value,createFieldCompilerContext({fieldName,conditions,requirements:mergedRequires,matchers,attrs:mergedAttrs}))}let attrs=Object.keys(mergedAttrs).length>0?snapshotAttributes(mergedAttrs):void 0,command=normalizeBindingCommand(compiledInput.cmd),compiledBinding={binding,sequence:compiledSequence,command,event,parsedBinding:snapshotParsedBinding(compiledInput),sourceTarget,sourceLayerOrder,bindingIndex,requires:Object.keys(mergedRequires).length>0?Object.entries(mergedRequires):EMPTY_REQUIRES,matchers:matchers.length>0?matchers:EMPTY_MATCHERS,preventDefault:compiledInput.preventDefault!==!1,fallthrough:compiledInput.fallthrough??!1};if(attrs)compiledBinding.attrs=attrs;if(typeof command==="function")compiledBinding.run=command;if(compiledSequence.length===0)continue;if(event==="release"&&compiledSequence.length>1)throw Error("Keymap release bindings only support a single key stroke");let terminalPattern=compiledSequence.at(-1);if(terminalPattern?.patternName){let pattern=state.patterns.get(terminalPattern.patternName);if(pattern&&pattern.max!==pattern.min)throw Error("Keymap unbounded sequence patterns must be followed by a concrete continuation")}if(event==="press"&&!allowExactPrefixAmbiguity)validateExactPrefixAmbiguity(bindingStates,compiledBinding);bindingStates.push(compiledBinding)}catch(error2){notify.emitError("binding-compile-error",error2,getErrorMessage(error2,"Failed to compile keymap binding"))}}}return{bindings:bindingStates,hasTokenBindings}},parseObjectKeyPart=(key,options2)=>{return createKeySequencePart(key,options2)},normalizeBindingEvent=(event)=>{if(event===void 0||event==="press")return"press";if(event==="release")return"release";throw Error(`Invalid keymap binding event "${String(event)}": expected "press" or "release"`)},applyBindingTransformers=(binding,sequence,tokens2,bindingParsers,compileFields)=>{let bindingTransformers=state.bindingTransformers.values();if(bindingTransformers.length===0)return[{...binding,sequence:cloneKeySequence(sequence)}];let parsedBinding={...binding,sequence:cloneKeySequence(sequence)},extraBindings=[],keepOriginal=!0,layer=compileFields??EMPTY_COMPILE_FIELDS;for(let transformer of bindingTransformers)try{transformer(parsedBinding,{layer,parseKey:(key)=>{return parseSingleKeyPartWithParsers(key,bindingParsers,{tokens:tokens2,patterns:state.patterns,layer,parseObjectKey:(value,options2)=>parseObjectKeyPart(value,options2)})},add:(nextBinding)=>{extraBindings.push(snapshotParsedBinding(nextBinding))},skipOriginal:()=>{keepOriginal=!1}})}catch(error2){notify.emitError("binding-transformer-error",error2,"[Keymap] Error in binding transformer:")}if(!keepOriginal)return extraBindings;if(extraBindings.length===0)return[parsedBinding];return[parsedBinding,...extraBindings]};return{parseTokenKey,parseKeySequence,formatKey,compileBindings}}function sequenceMatchesPrefix(left,right){if(left.length>=right.length)return!1;for(let index=0;index<left.length;index+=1)if(left[index]?.match!==right[index]?.match)return!1;return!0}function validateExactPrefixAmbiguity(bindings,next){for(let existing of bindings){if(existing.event!=="press")continue;if(existing.command!==void 0&&sequenceMatchesPrefix(existing.sequence,next.sequence)||next.command!==void 0&&sequenceMatchesPrefix(next.sequence,existing.sequence))throw Error("Keymap bindings cannot use the same sequence as both an exact match and a prefix in the same layer")}}function expandBindingKeyWithExpanders(key,expanders,options){if(typeof key!=="string"||expanders.length===0)return[{key}];let layer=options?.layer??EMPTY_COMPILE_FIELDS,candidates=[{key}];for(let expander of expanders){let nextCandidates=[];for(let candidate of candidates){let result2=expander({input:candidate.key,displays:candidate.displays,layer});if(!result2){nextCandidates.push(candidate);continue}if(result2.length===0)throw Error(`Keymap binding expander must return at least one key sequence for "${candidate.key}"`);for(let expanded of result2){if(!expanded||typeof expanded!=="object"||Array.isArray(expanded)||typeof expanded.key!=="string")throw Error(`Keymap binding expander must return expansion objects with string keys for "${candidate.key}"`);if(expanded.displays!==void 0){if(!Array.isArray(expanded.displays))throw Error(`Keymap binding expander displays must be an array of strings for "${candidate.key}"`);for(let display of expanded.displays)if(typeof display!=="string")throw Error(`Keymap binding expander displays must be an array of strings for "${candidate.key}"`)}nextCandidates.push(expanded)}}candidates=nextCandidates}return candidates}function applyExpansionDisplays(parsed,expansion){if(!expansion.displays)return parsed;if(expansion.displays.length!==parsed.parts.length)throw Error(`Keymap binding expansion displays length must match parsed sequence length for "${String(expansion.key)}"`);return{...parsed,parts:parsed.parts.map((part,index)=>({...part,display:expansion.displays[index]}))}}function parseBindingSequenceWithParsers(key,parsers2,options){if(key.length===0)throw Error("Invalid key sequence: sequence cannot be empty");if(parsers2.length===0)throw Error("No keymap binding parsers are registered");let tokens2=options.tokens??new Map,patterns2=options.patterns??new Map,layer=options.layer??EMPTY_COMPILE_FIELDS,parseObjectKey=options.parseObjectKey,parts=[],usedTokens=new Set,unknownTokens=new Set,index=0;while(index<key.length){let matched=!1;for(let parser of parsers2){let result2=parser({input:key,index,layer,tokens:tokens2,patterns:patterns2,normalizeTokenName:normalizeBindingTokenName,createMatch:createTextKeyMatch,parseObjectKey});if(!result2)continue;if(result2.nextIndex<=index||result2.nextIndex>key.length)throw Error(`Keymap binding parser must advance the input for "${key}" at index ${index}`);parts.push(...result2.parts);for(let tokenName of result2.usedTokens??[])usedTokens.add(tokenName);for(let tokenName of result2.unknownTokens??[])unknownTokens.add(tokenName);index=result2.nextIndex,matched=!0;break}if(!matched)throw Error(`No keymap binding parser handled input at index ${index} in "${key}"`)}return{parts,usedTokens:[...usedTokens],unknownTokens:[...unknownTokens],hasTokenBindings:usedTokens.size>0||unknownTokens.size>0}}function parseSingleKeyPartWithParsers(key,parsers2,options){if(typeof key!=="string")return options.parseObjectKey(key);let{parts}=parseBindingSequenceWithParsers(key,parsers2,options),[part]=parts;if(!part||parts.length!==1)throw Error(`Invalid key "${String(key)}": expected a single key stroke`);return part}function isReactiveMatcher(value){if(!value||typeof value!=="object")return!1;let candidate=value;return typeof candidate.get==="function"&&typeof candidate.subscribe==="function"}function createConditionService(state,notify){let hasNoConditions=(target)=>{return target.requires.length===0&&target.matchers.length===0},matchesRuntimeMatcher=(matcher)=>{try{return matcher.match()}catch(error2){return notify.emitError("runtime-matcher-error",error2,`[Keymap] Error evaluating runtime matcher from ${matcher.source}:`),!1}},matchesRuntimeMatchers=(target)=>{if(target.matchers.length===0)return!0;if(target.matchers.length===1){let[matcher]=target.matchers;return matcher?matchesRuntimeMatcher(matcher):!0}for(let matcher of target.matchers)if(!matchesRuntimeMatcher(matcher))return!1;return!0},matchRequirements=(requires)=>{if(requires.length===0)return!0;for(let[name,value]of requires)if(!Object.is(state.data[name],value))return!1;return!0};return{buildRuntimeMatcher(matcher,source){if(typeof matcher==="function")return{source,match:matcher};if(isReactiveMatcher(matcher))return{source,match:()=>matcher.get(),subscribe:(onChange)=>matcher.subscribe(onChange)};throw Error(`Keymap ${source} expected a function or a reactive matcher`)},matchesConditions:(target)=>{return hasNoConditions(target)||matchRequirements(target.requires)&&matchesRuntimeMatchers(target)}}}function createSyncDecision(action,handler){return{[KEY_DISAMBIGUATION_DECISION]:!0,action,handler}}function createDeferredDecision(action){return{[KEY_DEFERRED_DISAMBIGUATION_DECISION]:!0,action}}function isSyncDecision(value){return!!value&&typeof value==="object"&&value[KEY_DISAMBIGUATION_DECISION]===!0}function isDeferredDecision(value){return!!value&&typeof value==="object"&&value[KEY_DEFERRED_DISAMBIGUATION_DECISION]===!0}function sleepWithSignal(ms,signal){if(signal.aborted)return Promise.resolve(!1);return new Promise((resolve23)=>{let timeout=setTimeout(()=>{signal.removeEventListener("abort",onAbort),resolve23(!0)},Math.max(0,ms)),onAbort=()=>{clearTimeout(timeout),signal.removeEventListener("abort",onAbort),resolve23(!1)};signal.addEventListener("abort",onAbort,{once:!0})})}function matchSequencePattern(patterns2,notify,patternName,event){let pattern=patterns2.get(patternName);if(!pattern)return;try{return pattern.matcher(event)}catch(error2){notify.emitError("sequence-pattern-match-error",error2,`[Keymap] Error matching sequence pattern "${pattern.name}":`);return}}function createPatternEventPart(patterns2,event,patternName,match){let payloadKey=patterns2.get(patternName)?.payloadKey??patternName;return{...createKeySequencePart({name:event.name,ctrl:event.ctrl,shift:event.shift,meta:event.meta,super:event.super??!1,hyper:event.hyper||void 0},{display:match.display??String(match.value??event.name)}),patternName,payloadKey}}function createSequencePayload(patterns2,notify,capture2){if(!capture2?.patterns||capture2.patterns.length===0)return;let payload={},hasPayload=!1;for(let captured of capture2.patterns){let pattern=patterns2.get(captured.name),value;try{value=pattern?.finalize?pattern.finalize(captured.values):captured.values.length===1?captured.values[0]:[...captured.values]}catch(error2){notify.emitError("sequence-pattern-finalize-error",error2,`[Keymap] Error finalizing sequence pattern "${captured.name}":`);continue}let existing=payload[captured.payloadKey];if(existing===void 0)payload[captured.payloadKey]=value,hasPayload=!0;else if(Array.isArray(existing))existing.push(value);else payload[captured.payloadKey]=[existing,value]}return hasPayload?payload:void 0}function createDispatchService(state,notify,runtime,activation,conditions,executor,compiler,catalog,layers,hooks){let eventMatchResolverContext={resolveKey:(key)=>compiler.parseTokenKey(key).match},pendingDisambiguation=null,nextPendingDisambiguationId=0;function intercept(name,fn,options){if(name==="key"){let keyOptions=options;return state.keyHooks.register(fn,{priority:keyOptions?.priority??0,release:keyOptions?.release??!1})}if(name==="key:after"){let keyOptions=options;return state.keyAfterHooks.register(fn,{priority:keyOptions?.priority??0,release:keyOptions?.release??!1})}let rawOptions=options;return state.rawHooks.register(fn,{priority:rawOptions?.priority??0})}function prependEventMatchResolver(resolver){return state.eventMatchResolvers.prepend(resolver)}function appendEventMatchResolver(resolver){return state.eventMatchResolvers.append(resolver)}function clearEventMatchResolvers(){state.eventMatchResolvers.clear()}function prependDisambiguationResolver(resolver){return mutateDisambiguationResolvers(()=>state.disambiguationResolvers.prepend(resolver),resolver)}function appendDisambiguationResolver(resolver){return mutateDisambiguationResolvers(()=>state.disambiguationResolvers.append(resolver),resolver)}function clearDisambiguationResolvers(){if(!state.disambiguationResolvers.has())return;notify.runWithStateChangeBatch(()=>{state.disambiguationResolvers.clear(),layers.recompileBindings()})}function handlePendingSequenceChange(_previous,_next){if(!pendingDisambiguation)return;cancelPendingDisambiguation()}function handleRawSequence(sequence){let hooks2=state.rawHooks.entries();if(hooks2.length===0)return!1;let stopped=!1,context={sequence,stop(){stopped=!0}};for(let hook of hooks2){try{hook.listener(context)}catch(error2){notify.emitError("raw-intercept-error",error2,"[Keymap] Error in raw intercept listener:")}if(stopped)return!0}return!1}function createDispatchBinding(binding,focused){return{sequence:cloneKeySequence(binding.sequence),command:binding.command,commandAttrs:catalog.getBindingCommandAttrs(binding,focused,catalog.getActiveCommandView(focused)),attrs:binding.attrs,event:binding.event,preventDefault:binding.preventDefault,fallthrough:binding.fallthrough,sourceLayerOrder:binding.sourceLayerOrder,bindingIndex:binding.bindingIndex}}function emitDispatchEvent(event){if(!hooks.has("dispatch"))return;hooks.emit("dispatch",event)}function emitBindingDispatch(phase,layer,binding,focused){if(!hooks.has("dispatch"))return;emitDispatchEvent({phase,event:binding.event,focused,layer:{order:layer.order,priority:layer.priority,target:layer.target,targetMode:layer.targetMode},binding:createDispatchBinding(binding,focused),sequence:cloneKeySequence(binding.sequence),command:binding.command})}function emitSequenceDispatch(phase,captures,focused){if(!hooks.has("dispatch"))return;let first=captures[0],sequence=captures.length>0?activation.collectSequencePartsFromPending({captures}):[];emitDispatchEvent({phase,event:"press",focused,layer:first?{order:first.layer.order,priority:first.layer.priority,target:first.layer.target,targetMode:first.layer.targetMode}:void 0,sequence})}function getKeyAfterHooks(release){let hooks2=state.keyAfterHooks.entries();for(let hook of hooks2)if(hook.release===release)return hooks2;return}function getOutcomeSequence(outcome){if(outcome.sequence)return cloneKeySequence(outcome.sequence);if(outcome.captures)return activation.collectSequencePartsFromPending({captures:outcome.captures});return[]}function createSequenceOutcome(reason,captures){return{handled:reason!=="sequence-miss",reason,captures}}function createBindingOutcome(binding,handled){return{handled,reason:handled?"binding-handled":"binding-rejected",sequence:binding.sequence}}function preferDispatchOutcome(current,next){if(next.handled||current.reason==="no-match")return next;return current}function emitKeyAfter(hooks2,event,release,focused,outcome){let context={event,eventType:release?"release":"press",focused,handled:outcome.handled,reason:outcome.reason,sequence:getOutcomeSequence(outcome),pendingSequence:activation.getPendingSequence(),setData:(name,value)=>{runtime.setData(name,value)},getData:(name)=>{return runtime.getData(name)},consume:(options)=>{let shouldPreventDefault=options?.preventDefault??!0,shouldStopPropagation=options?.stopPropagation??!0;if(shouldPreventDefault)event.preventDefault();if(shouldStopPropagation)event.stopPropagation()}};for(let hook of hooks2){if(hook.release!==release)continue;try{hook.listener(context)}catch(error2){notify.emitError("key-after-intercept-error",error2,"[Keymap] Error in key:after intercept listener:")}}}function noMatchOutcome(){return{handled:!1,reason:"no-match"}}function consumeSequenceEvent(event){event.preventDefault(),event.stopPropagation()}function holdSequence(phase,captures,focused,event){activation.setPendingSequence({captures});let outcome=createSequenceOutcome("sequence-pending",captures);return emitSequenceDispatch(phase,captures,focused),consumeSequenceEvent(event),outcome}function clearSequence(reason,captures,focused,event){let outcome=createSequenceOutcome(reason,captures);return emitSequenceDispatch("sequence-clear",captures,focused),activation.setPendingSequence(null),consumeSequenceEvent(event),outcome}function handleKeyEvent(event,release){if(!release)cancelPendingDisambiguation();let afterHooks=getKeyAfterHooks(release),afterFocused=afterHooks?activation.getFocusedTarget():null,hooks2=state.keyHooks.entries(),context={event,setData:(name,value)=>{runtime.setData(name,value)},getData:(name)=>{return runtime.getData(name)},consume:(options)=>{let shouldPreventDefault=options?.preventDefault??!0,shouldStopPropagation=options?.stopPropagation??!0;if(shouldPreventDefault)event.preventDefault();if(shouldStopPropagation)event.stopPropagation()}};for(let hook of hooks2){if(hook.release!==release)continue;try{hook.listener(context)}catch(error2){notify.emitError("key-intercept-error",error2,"[Keymap] Error in key intercept listener:")}if(event.propagationStopped){if(afterHooks)emitKeyAfter(afterHooks,event,release,afterFocused,{handled:!0,reason:"intercept-consumed",sequence:[]});return}}if(release){let outcome2=dispatchReleaseLayers(event);if(afterHooks)emitKeyAfter(afterHooks,event,release,afterFocused,outcome2);return}let outcome=dispatchLayers(event);if(afterHooks)emitKeyAfter(afterHooks,event,release,afterFocused,outcome)}function mutateDisambiguationResolvers(register2,resolver){return notify.runWithStateChangeBatch(()=>{let hadResolvers=state.disambiguationResolvers.has(),off=register2();if(!hadResolvers&&state.disambiguationResolvers.has())layers.recompileBindings();return()=>{notify.runWithStateChangeBatch(()=>{let hadBeforeRemoval=state.disambiguationResolvers.has();if(off(),state.disambiguationResolvers.values().includes(resolver))return;if(hadBeforeRemoval&&!state.disambiguationResolvers.has())layers.recompileBindings()})}})}function dispatchReleaseLayers(event){let focused=activation.getFocusedTarget(),activeLayers=activation.getActiveLayers(focused),matchKeys=resolveEventMatchKeys(event),outcome=noMatchOutcome();layerLoop:for(let layer of activeLayers){if(layer.bindings.length===0)continue;if(!conditions.matchesConditions(layer))continue;for(let strokeKey of matchKeys){let result2=runReleaseBindings(layer,strokeKey,event,focused);if(outcome=preferDispatchOutcome(outcome,result2.outcome),!result2.handled)continue;if(result2.stop)return outcome;continue layerLoop}}return outcome}function dispatchLayers(event){let focused=activation.getFocusedTarget(),pending=activation.ensureValidPendingSequence(),matchKeys=resolveEventMatchKeys(event);if(pending)return dispatchPendingSequence(pending,matchKeys,event,focused);let activeLayers=activation.getActiveLayers(focused);return dispatchFromRoot(activeLayers,matchKeys,event,focused)}function dispatchPendingSequence(pending,matchKeys,event,focused){let activeView=catalog.getActiveCommandView(focused),advancedCaptures=[];for(let capture2 of pending.captures){let advanced=advanceSequenceCapture(capture2,matchKeys,event,state.patterns,matchPattern,createPatternEventPart2);if(!advanced)continue;advancedCaptures.push(advanced)}let bestPriority=advancedCaptures.reduce((best,capture2)=>Math.min(best,capturePriority(capture2,matchKeys)),Number.POSITIVE_INFINITY),prioritizedCaptures=advancedCaptures.filter((capture2)=>capturePriority(capture2,matchKeys)===bestPriority);if(prioritizedCaptures.length===0||!prioritizedCaptures.some((capture2)=>captureIsReachable(capture2,focused,activeView))){let outcome=createSequenceOutcome("sequence-miss",pending.captures);return emitSequenceDispatch("sequence-clear",pending.captures,focused),activation.setPendingSequence(null),outcome}return dispatchPendingCapturesFromIndex(prioritizedCaptures,0,!1,event,focused)}function dispatchPendingCapturesFromIndex(advancedCaptures,startIndex,handledExact,event,focused){let hasHandledExact=handledExact,outcome=noMatchOutcome(),processedExact=new Set;for(let index=startIndex;index<advancedCaptures.length;index+=1){let capture2=advancedCaptures[index];if(!capture2||processedExact.has(capture2))continue;let continuationCapturesForPrefix=collectContinuationCapturesForPrefix(advancedCaptures,index,capture2);if(continuationCapturesForPrefix.length>0){if(hasHandledExact)continue;let exactCaptures2=collectExactCapturesForPrefix(advancedCaptures,capture2),resolvedOutcome=tryResolvePendingAmbiguity(advancedCaptures,index,continuationCapturesForPrefix,exactCaptures2,event,focused,hasHandledExact);if(resolvedOutcome)return resolvedOutcome;return holdSequence("sequence-advance",continuationCapturesForPrefix,focused,event)}if(!captureIsExact(capture2,state.patterns))continue;let exactCaptures=collectExactCapturesForPrefix(advancedCaptures,capture2);for(let exact of exactCaptures)processedExact.add(exact);let result2=runCaptureBindings(capture2.layer,exactCaptures,event,focused);if(outcome=preferDispatchOutcome(outcome,result2.outcome),!result2.handled)continue;if(hasHandledExact=!0,result2.stop)return emitSequenceDispatch("sequence-clear",advancedCaptures,focused),activation.setPendingSequence(null),outcome}return emitSequenceDispatch("sequence-clear",advancedCaptures,focused),activation.setPendingSequence(null),outcome}function dispatchFromRoot(activeLayers,matchKeys,event,focused){return dispatchFromRootAtIndex(activeLayers,0,matchKeys,event,focused)}function dispatchFromRootAtIndex(activeLayers,startIndex,matchKeys,event,focused){let activeView=catalog.getActiveCommandView(focused),outcome=noMatchOutcome();for(let index=startIndex;index<activeLayers.length;index+=1){let layer=activeLayers[index];if(!layer)continue;if(!conditions.matchesConditions(layer))continue;let captures=collectRootCaptures(layer,matchKeys,event,focused,activeView);if(captures.length===0)continue;if(captures.filter((capture2)=>captureHasContinuations(capture2,state.patterns,!1)).length>0){let exactCaptures2=captures.filter((capture2)=>captureIsExact(capture2,state.patterns)),continuationCaptures=collectPendingCapturesFromRoot(activeLayers,index,matchKeys,event,focused),resolvedOutcome=tryResolveRootAmbiguity(activeLayers,index,matchKeys,continuationCaptures,exactCaptures2,event,focused);if(resolvedOutcome)return resolvedOutcome;return holdSequence("sequence-start",continuationCaptures,focused,event)}let exactCaptures=captures.filter((capture2)=>captureIsExact(capture2,state.patterns)),result2=runCaptureBindings(layer,exactCaptures,event,focused);if(outcome=preferDispatchOutcome(outcome,result2.outcome),!result2.handled)continue;if(result2.stop)return outcome}return outcome}function tryResolveRootAmbiguity(activeLayers,layerIndex,matchKeys,continuationCaptures,exactCaptures,event,focused){let applyExact=()=>{activation.setPendingSequence(null);let layer=exactCaptures[0]?.layer;if(!layer)return noMatchOutcome();let result2=runCaptureBindings(layer,exactCaptures,event,focused);if(!result2.stop)return preferDispatchOutcome(result2.outcome,dispatchFromRootAtIndex(activeLayers,layerIndex+1,matchKeys,event,focused));return result2.outcome};return tryResolveAmbiguity({event,focused,continuationCaptures,exactBindingsSource:exactCaptures.map((capture2)=>capture2.binding),sequencePhase:"sequence-start",runExact:applyExact})}function tryResolvePendingAmbiguity(advancedCaptures,captureIndex,continuationCaptures,exactCaptures,event,focused,handledExact){let applyExact=()=>{activation.setPendingSequence(null);let layer=exactCaptures[0]?.layer;if(!layer)return noMatchOutcome();let result2=runCaptureBindings(layer,exactCaptures,event,focused);if(result2.stop)return result2.outcome;return preferDispatchOutcome(result2.outcome,dispatchPendingCapturesFromIndex(advancedCaptures,captureIndex+1,handledExact||result2.handled,event,focused))};return tryResolveAmbiguity({event,focused,continuationCaptures,exactBindingsSource:exactCaptures.map((capture2)=>capture2.binding),sequencePhase:"sequence-advance",runExact:applyExact})}function tryResolveAmbiguity(options){let{event,focused,continuationCaptures,exactBindingsSource,sequencePhase,runExact}=options;if(!state.disambiguationResolvers.has()||continuationCaptures.length===0)return;let activeView=catalog.getActiveCommandView(focused),exactBindings=activation.collectMatchingBindings(exactBindingsSource,focused,activeView);if(!exactBindings.some((binding)=>binding.command!==void 0))return;let continueSequence=()=>{return holdSequence(sequencePhase,continuationCaptures,focused,event)},clear=()=>{return clearSequence("sequence-cleared",continuationCaptures,focused,event)},sequence,getSequence=()=>{return sequence??=activation.collectSequencePartsFromPending({captures:continuationCaptures}),sequence},decision=resolveDisambiguation({event,focused,getSequence,exactBindings,continuationCaptures,activeView});if(!decision)return warnUnresolvedAmbiguity(getSequence()),continueSequence();return applySyncDecision(decision,continuationCaptures,runExact,continueSequence,clear,focused,getSequence)}function applySyncDecision(decision,continuationCaptures,runExact,continueSequence,clear,focused,getSequence){if(decision.action==="run-exact")return runExact();if(decision.action==="continue-sequence")return continueSequence();if(decision.action==="clear")return clear();let outcome=continueSequence();return scheduleDeferredDisambiguation(continuationCaptures,decision.handler,focused,getSequence(),(nextDecision)=>{if(!nextDecision)return;if(nextDecision.action==="run-exact"){runExact();return}if(nextDecision.action==="continue-sequence"){continueSequence();return}clear()}),outcome}function resolveDisambiguation(options){let sequence,exact,continuations,strokePart,ctx={event:options.event,focused:options.focused,get sequence(){return sequence??=cloneKeySequence(options.getSequence()),sequence},get stroke(){let stroke=options.getSequence().at(-1);if(!stroke)throw Error("Disambiguation context expected a non-empty sequence");return strokePart??={...stroke,stroke:cloneKeyStroke(stroke.stroke)},strokePart},get exact(){return exact??=activation.collectActiveBindings(options.exactBindings,options.focused,options.activeView).map((binding)=>({...binding,sequence:cloneKeySequence(binding.sequence)})),exact},get continuations(){return continuations??=activation.getActiveKeysForCaptures(options.continuationCaptures,{includeBindings:!0,includeMetadata:!0}),continuations},getData:(name)=>{return runtime.getData(name)},setData:(name,value)=>{runtime.setData(name,value)},runExact:()=>createSyncDecision("run-exact"),continueSequence:()=>createSyncDecision("continue-sequence"),clear:()=>createSyncDecision("clear"),defer:(run)=>createSyncDecision("defer",run)};for(let resolver of state.disambiguationResolvers.values()){let result2;try{result2=resolver(ctx)}catch(error2){notify.emitError("disambiguation-resolver-error",error2,"[Keymap] Error in disambiguation resolver:");continue}if(result2===void 0)continue;if(isPromiseLike(result2)){notify.emitError("invalid-disambiguation-resolver-return",result2,"[Keymap] Disambiguation resolvers must return synchronously; use ctx.defer(...) for async handling");continue}if(!isSyncDecision(result2)){notify.emitError("invalid-disambiguation-decision",result2,"[Keymap] Invalid disambiguation decision returned by resolver:");continue}return result2}return}function scheduleDeferredDisambiguation(captures,handler,focused,sequence,apply){cancelPendingDisambiguation();let controller=new AbortController,pending={id:nextPendingDisambiguationId++,controller,captures,apply};pendingDisambiguation=pending,queueMicrotask(()=>{executeDeferredDisambiguation(pending,handler,focused,sequence)})}function executeDeferredDisambiguation(pending,handler,focused,sequence){if(!isPendingDisambiguationCurrent(pending))return;let ctx={signal:pending.controller.signal,sequence:cloneKeySequence(sequence),focused,sleep:(ms)=>{return sleepWithSignal(ms,pending.controller.signal)},runExact:()=>createDeferredDecision("run-exact"),continueSequence:()=>createDeferredDecision("continue-sequence"),clear:()=>createDeferredDecision("clear")},result2;try{result2=handler(ctx)}catch(error2){if(isPendingDisambiguationCurrent(pending))notify.emitError("deferred-disambiguation-error",error2,"[Keymap] Error in deferred disambiguation handler:"),finishPendingDisambiguation(pending);return}if(isPromiseLike(result2)){result2.then((resolved)=>{applyDeferredDisambiguationResult(pending,resolved)}).catch((error2)=>{if(!isPendingDisambiguationCurrent(pending))return;notify.emitError("deferred-disambiguation-error",error2,"[Keymap] Error in deferred disambiguation handler:"),finishPendingDisambiguation(pending)});return}applyDeferredDisambiguationResult(pending,result2)}function applyDeferredDisambiguationResult(pending,result2){if(!isPendingDisambiguationCurrent(pending))return;if(result2!==void 0&&!isDeferredDecision(result2)){notify.emitError("invalid-deferred-disambiguation-decision",result2,"[Keymap] Invalid deferred disambiguation decision returned by handler:"),finishPendingDisambiguation(pending);return}finishPendingDisambiguation(pending),pending.apply(result2)}function finishPendingDisambiguation(pending){if(!isPendingDisambiguationCurrent(pending))return;pendingDisambiguation=null}function cancelPendingDisambiguation(){let pending=pendingDisambiguation;if(!pending)return;pendingDisambiguation=null,pending.controller.abort()}function isPendingDisambiguationCurrent(pending){return pendingDisambiguation===pending}function warnUnresolvedAmbiguity(sequence){let display=stringifyKeySequence(sequence,{preferDisplay:!0});notify.warnOnce(`unresolved-disambiguation:${display}`,"unresolved-disambiguation",{sequence:display},`[Keymap] Ambiguous exact/prefix sequence "${display}" fell back to prefix handling because no disambiguation resolver resolved it`)}function collectPendingCapturesFromRoot(activeLayers,startIndex,matchKeys,event,focused){let captures=[],activeView=catalog.getActiveCommandView(focused);for(let index=startIndex;index<activeLayers.length;index+=1){let layer=activeLayers[index];if(!layer)continue;if(!conditions.matchesConditions(layer))continue;for(let capture2 of collectRootCaptures(layer,matchKeys,event,focused,activeView))if(captureHasContinuations(capture2,state.patterns,!1))captures.push(capture2)}return captures}function collectContinuationCapturesForPrefix(captures,startIndex,prefix){return captures.filter((candidate,candidateIndex)=>{return candidateIndex>=startIndex&&captureHasContinuations(candidate,state.patterns,!1)&&sameParts(candidate.parts,prefix.parts)})}function collectExactCapturesForPrefix(captures,prefix){return captures.filter((capture2)=>{return capture2.layer===prefix.layer&&captureIsExact(capture2,state.patterns)&&sameParts(capture2.parts,prefix.parts)})}function resolveEventMatchKeys(event){let resolvers=state.eventMatchResolvers.values();if(resolvers.length===0)return[];if(resolvers.length===1)return resolveSingleEventMatchKeys(resolvers[0],event,eventMatchResolverContext,notify);let keys=[],seen=new Set;for(let resolver of resolvers){let resolved;try{resolved=resolver(event,eventMatchResolverContext)}catch(error2){notify.emitError("event-match-resolver-error",error2,"[Keymap] Error in event match resolver:");continue}if(!resolved||resolved.length===0)continue;for(let candidate of resolved){if(typeof candidate!=="string"){notify.emitError("invalid-event-match-resolver-candidate",candidate,"[Keymap] Invalid event match resolver candidate:");continue}if(seen.has(candidate))continue;seen.add(candidate),keys.push(candidate)}}return keys}function runReleaseBindings(layer,strokeKey,event,focused){let handled=!1,outcome=noMatchOutcome();for(let binding of layer.bindings){if(binding.event!=="release")continue;let firstPart=binding.sequence[0];if(!firstPart||firstPart.match!==strokeKey)continue;if(!conditions.matchesConditions(binding))continue;let bindingHandled=executor.runBinding(layer,binding,event,focused);if(outcome=preferDispatchOutcome(outcome,createBindingOutcome(binding,bindingHandled)),!bindingHandled){emitBindingDispatch("binding-reject",layer,binding,focused);continue}if(emitBindingDispatch("binding-execute",layer,binding,focused),handled=!0,!binding.fallthrough)return{handled:!0,stop:!0,outcome}}return{handled,stop:!1,outcome}}function matchPattern(patternName,event){return matchSequencePattern(state.patterns,notify,patternName,event)}function createPatternEventPart2(event,patternName,match){return createPatternEventPart(state.patterns,event,patternName,match)}function collectRootCaptures(layer,matchKeys,event,focused,activeView){let captures=collectRootSequenceCaptures(layer,matchKeys,event,matchPattern,createPatternEventPart2);return captures.some((capture2)=>captureIsReachable(capture2,focused,activeView))?captures:[]}function createSequencePayload2(capture2){return createSequencePayload(state.patterns,notify,capture2)}function bindingMatchesRuntimeState(binding,focused,activeView){return conditions.matchesConditions(binding)&&catalog.isBindingVisible(binding,focused,activeView)}function captureIsReachable(capture2,focused,activeView){return bindingMatchesRuntimeState(capture2.binding,focused,activeView)}function runCaptureBindings(layer,captures,event,focused){let handled=!1,outcome=noMatchOutcome();for(let capture2 of captures){let binding=capture2.binding;if(!conditions.matchesConditions(binding))continue;let bindingHandled=executor.runBinding(layer,binding,event,focused,createSequencePayload2(capture2));if(outcome=preferDispatchOutcome(outcome,createBindingOutcome(binding,bindingHandled)),!bindingHandled){emitBindingDispatch("binding-reject",layer,binding,focused);continue}if(emitBindingDispatch("binding-execute",layer,binding,focused),handled=!0,!binding.fallthrough)return{handled:!0,stop:!0,outcome}}return{handled,stop:!1,outcome}}return{intercept,prependEventMatchResolver,appendEventMatchResolver,clearEventMatchResolvers,prependDisambiguationResolver,appendDisambiguationResolver,clearDisambiguationResolvers,handlePendingSequenceChange,handleRawSequence,handleKeyEvent}}function resolveSingleEventMatchKeys(resolver,event,ctx,notify){let resolved;try{resolved=resolver(event,ctx)}catch(error2){return notify.emitError("event-match-resolver-error",error2,"[Keymap] Error in event match resolver:"),[]}if(!resolved||resolved.length===0)return[];if(resolved.length===1){let[candidate]=resolved;if(typeof candidate!=="string")return notify.emitError("invalid-event-match-resolver-candidate",candidate,"[Keymap] Invalid event match resolver candidate:"),[];return[candidate]}let keys=[],seen=new Set;for(let candidate of resolved){if(typeof candidate!=="string"){notify.emitError("invalid-event-match-resolver-candidate",candidate,"[Keymap] Invalid event match resolver candidate:");continue}if(seen.has(candidate))continue;seen.add(candidate),keys.push(candidate)}return keys}function sameParts(left,right){if(left.length!==right.length)return!1;for(let index=0;index<left.length;index+=1)if(left[index]?.match!==right[index]?.match)return!1;return!0}function normalizePatternLimit(name,field,value,fallback){if(value===void 0)return fallback;if(typeof value!=="number"||!Number.isInteger(value)||value<0)throw Error(`Keymap sequence pattern "${name}" ${field} must be a non-negative integer`);return value}function registerFieldCompilers(fields,options){let{kind,reservedFields,registeredFields,emitError}=options,entries=Object.entries(fields),registered=[];for(let[name,compiler]of entries){if(reservedFields.has(name)){emitError(`reserved-${kind}-field`,{field:name,kind},`Keymap ${kind} field "${name}" is reserved`);continue}if(registeredFields.has(name)){emitError(`duplicate-${kind}-field`,{field:name,kind},`Keymap ${kind} field "${name}" is already registered`);continue}registeredFields.set(name,compiler),registered.push([name,compiler])}return()=>{for(let[name,compiler]of registered)if(registeredFields.get(name)===compiler)registeredFields.delete(name)}}function registerToken(state,notify,compiler,layers,token){let normalizedToken;try{normalizedToken=normalizeBindingTokenName(token.name)}catch(error2){return notify.emitError("token-name-normalize-error",error2,getErrorMessage(error2,"Failed to register keymap token")),NOOP}if(state.tokens.has(normalizedToken)||state.patterns.has(normalizedToken))return notify.emitError("duplicate-token",{token:normalizedToken},`Keymap token "${normalizedToken}" is already registered`),NOOP;let parsedToken;try{if(parsedToken=compiler.parseTokenKey(token.key),parsedToken.patternName)throw Error(`Invalid key "${String(token.key)}": expected a concrete key stroke`)}catch(error2){return notify.emitError("token-parse-error",error2,getErrorMessage(error2,`Failed to register keymap token "${normalizedToken}"`)),NOOP}let registeredToken={stroke:parsedToken.stroke,match:parsedToken.match},nextTokens=new Map(state.tokens);nextTokens.set(normalizedToken,registeredToken);try{layers.applyTokenState(nextTokens)}catch(error2){return notify.emitError("token-register-error",error2,getErrorMessage(error2,`Failed to register keymap token "${normalizedToken}"`)),NOOP}return()=>{if(state.tokens.get(normalizedToken)!==registeredToken)return;let nextTokens2=new Map(state.tokens);nextTokens2.delete(normalizedToken);try{layers.applyTokenState(nextTokens2)}catch(error2){notify.emitError("token-unregister-error",error2,getErrorMessage(error2,`Failed to unregister keymap token "${normalizedToken}"`))}}}function registerSequencePattern(state,notify,layers,pattern){let normalizedName,resolvedPattern;try{normalizedName=normalizeBindingTokenName(pattern.name);let min=normalizePatternLimit(normalizedName,"min",pattern.min,1),max=normalizePatternLimit(normalizedName,"max",pattern.max,Number.MAX_SAFE_INTEGER);if(max<min)throw Error(`Keymap sequence pattern "${normalizedName}" max must be greater than or equal to min`);resolvedPattern={name:normalizedName,display:pattern.display,payloadKey:pattern.payloadKey??normalizedName,match:createTextKeyMatch(`pattern:${normalizedName}`),min,max,matcher:(event)=>pattern.match(event),finalize:pattern.finalize}}catch(error2){return notify.emitError("sequence-pattern-register-error",error2,getErrorMessage(error2,"Failed to register keymap sequence pattern")),NOOP}if(state.tokens.has(normalizedName)||state.patterns.has(normalizedName))return notify.emitError("duplicate-sequence-pattern",{pattern:normalizedName},`Keymap sequence pattern "${normalizedName}" is already registered`),NOOP;return state.patterns.set(normalizedName,resolvedPattern),layers.recompileBindings(),()=>{if(state.patterns.get(normalizedName)!==resolvedPattern)return;state.patterns.delete(normalizedName),layers.recompileBindings()}}function registerFields(state,notify,kind,fields){let reservedFields=kind==="layer"?RESERVED_LAYER_FIELDS:kind==="binding"?RESERVED_BINDING_FIELDS:RESERVED_COMMAND_FIELDS,registeredFields=kind==="layer"?state.layerFields:kind==="binding"?state.bindingFields:state.commandFields;return registerFieldCompilers(fields,{kind,reservedFields,registeredFields,emitError:(code,error2,message)=>notify.emitError(code,error2,message)})}function compareLayers(left,right){return right.priority-left.priority||right.order-left.order}function layerBlocksActiveKeyCache(layer){if(layer.matchers.length>0)return!0;for(let command of layer.commands)if(command.matchers.length>0)return!0;for(let binding of layer.bindings)if(binding.matchers.length>0)return!0;return!1}function layerBlocksActiveCommandViewCache(layer){if(layer.commands.length===0)return!1;if(layer.matchers.length>0)return!0;for(let command of layer.commands)if(command.matchers.length>0)return!0;return!1}function createLayerService(state,notify,conditions,activation,options){let registerLayer=(layer)=>{return notify.runWithStateChangeBatch(()=>{let target=layer.target;if(target&&options.host.isTargetDestroyed(target))return notify.emitError("destroyed-layer-target",{target},"Cannot register a keymap layer for a destroyed keymap target"),NOOP2;let sourceBindings,requires,matchers,fields,attrs,commands,targetMode;try{targetMode=normalizeTargetMode(layer),sourceBindings=applyLayerBindingsTransformers(snapshotBindings(layer.bindings??[]),layer);let sourceCommands=applyCommandTransformers(layer.commands??[],layer);commands=sourceCommands.length===0?[]:options.commands.normalizeCommands(sourceCommands),{requires,matchers,fields,attrs}=compileLayerRuntimeState(layer)}catch(error2){return notify.emitError("register-layer-failed",error2,getErrorMessage(error2,"Failed to register keymap layer")),NOOP2}let order=state.order++,bindingStates=options.compiler.compileBindings(sourceBindings,state.tokens,target,order,fields);if(bindingStates.bindings.length===0&&!bindingStates.hasTokenBindings&&commands.length===0)return NOOP2;options.diagnostics?.analyzeLayer({target,order,commands,sourceBindings,bindings:bindingStates.bindings,hasTokenBindings:bindingStates.hasTokenBindings});let registeredLayer={order,target,targetMode,priority:layer.priority??0,requires,matchers,fields,attrs,commands,sourceBindings,bindings:bindingStates.bindings,root:buildSequenceTree(bindingStates.bindings,state.patterns),hasTokenBindings:bindingStates.hasTokenBindings,activeKeyCacheBlocked:!1,activeCommandViewCacheBlocked:!1};updateCacheBlockers(registeredLayer),state.layers.add(registeredLayer),state.sortedLayers=[...state.sortedLayers,registeredLayer].sort(compareLayers),attachReactiveMatchers(registeredLayer);for(let command of registeredLayer.commands)attachReactiveMatchers(command);for(let binding of registeredLayer.bindings)attachReactiveMatchers(binding);if(target){let onTargetDestroy=()=>{unregisterLayer(registeredLayer)};registeredLayer.offTargetDestroy=options.host.onTargetDestroy(target,onTargetDestroy)}if(registeredLayer.commands.length>0)activation.ensureValidPendingSequence();return notify.queueStateChange(),()=>{unregisterLayer(registeredLayer)}})},applyTokenState=(nextTokens)=>{notify.runWithStateChangeBatch(()=>{let nextCompilations=new Map;for(let layer of state.layers){if(!layer.hasTokenBindings)continue;nextCompilations.set(layer,compileLayerBindings(layer,nextTokens))}state.tokens=nextTokens;let shouldClearPending=!1;for(let[layer,compilation]of nextCompilations)if(applyBindingStates(layer,compilation))shouldClearPending=!0;if(shouldClearPending)activation.setPendingSequence(null);if(nextCompilations.size>0)notify.queueStateChange()})},recompileBindings=()=>{notify.runWithStateChangeBatch(()=>{let recompiledLayers=0,shouldClearPending=!1;for(let layer of state.layers){if(layer.sourceBindings.length===0)continue;let compilation=compileLayerBindings(layer,state.tokens);if(applyBindingStates(layer,compilation))shouldClearPending=!0;recompiledLayers+=1}if(shouldClearPending)activation.setPendingSequence(null);if(recompiledLayers>0)notify.queueStateChange()})},cleanup=()=>{for(let layer of state.layers){detachReactiveMatchers(layer);for(let command of layer.commands)detachReactiveMatchers(command);for(let binding of layer.bindings)detachReactiveMatchers(binding);layer.offTargetDestroy?.(),layer.offTargetDestroy=void 0}},normalizeTargetMode=(layer)=>{if(layer.targetMode){if(!layer.target)throw Error(`Keymap targetMode "${layer.targetMode}" requires a target`);return layer.targetMode}return layer.target?"focus-within":void 0},applyLayerBindingsTransformers=(bindings,layer)=>{let transformers=state.layerBindingsTransformers.values();if(transformers.length===0)return bindings;let current=bindings;for(let transformer of transformers){let next=transformer(current,{layer,validateBindings:(bindings2)=>validateBindings(bindings2)});if(!next)continue;current=snapshotBindings(next)}return current},applyCommandTransformers=(commands,layer)=>{let transformers=state.commandTransformers.values();if(commands.length===0||transformers.length===0)return commands;let transformedCommands=[];for(let command of commands){let transformedCommand={...command},extraCommands=[],keepOriginal=!0;for(let transformer of transformers)try{transformer(transformedCommand,{layer,add(nextCommand){extraCommands.push({...nextCommand})},skipOriginal(){keepOriginal=!1}})}catch(error2){notify.emitError("command-transformer-error",error2,"[Keymap] Error in command transformer:")}if(keepOriginal)transformedCommands.push(transformedCommand);transformedCommands.push(...extraCommands)}return transformedCommands},compileLayerRuntimeState=(layer)=>{let mergedRequires={},matchers=[],fields=Object.create(null),attrs={};for(let[fieldName,value]of Object.entries(layer)){if(RESERVED_LAYER_FIELDS.has(fieldName))continue;if(value===void 0)continue;fields[fieldName]=snapshotDataValue(value);let compiler=state.layerFields.get(fieldName);if(!compiler){options.warnUnknownField("layer",fieldName);continue}compiler(value,createFieldCompilerContext({fieldName,conditions,requirements:mergedRequires,matchers,attrs}))}return{requires:Object.entries(mergedRequires),matchers,fields:Object.keys(fields).length>0?Object.freeze(fields):void 0,attrs:Object.keys(attrs).length>0?snapshotDataValue(attrs,{freeze:!0}):void 0}},compileLayerBindings=(layer,tokens2)=>{return options.compiler.compileBindings(layer.sourceBindings,tokens2,layer.target,layer.order,layer.fields)},applyBindingStates=(layer,compilation)=>{options.diagnostics?.analyzeLayer({target:layer.target,order:layer.order,commands:layer.commands,sourceBindings:layer.sourceBindings,bindings:compilation.bindings,hasTokenBindings:compilation.hasTokenBindings}),untrackCacheBlockers(layer);for(let binding of layer.bindings)detachReactiveMatchers(binding);layer.bindings=compilation.bindings,layer.root=buildSequenceTree(compilation.bindings,state.patterns),layer.hasTokenBindings=compilation.hasTokenBindings,updateCacheBlockers(layer);for(let binding of layer.bindings)attachReactiveMatchers(binding);return state.pending?.captures.some((capture2)=>capture2.layer===layer)??!1},unregisterLayer=(layer)=>{notify.runWithStateChangeBatch(()=>{if(!state.layers.delete(layer))return;state.sortedLayers=state.sortedLayers.filter((candidate)=>candidate!==layer),untrackCacheBlockers(layer),detachReactiveMatchers(layer);for(let command of layer.commands)detachReactiveMatchers(command);for(let binding of layer.bindings)detachReactiveMatchers(binding);if(layer.offTargetDestroy?.(),layer.offTargetDestroy=void 0,state.pending?.captures.some((capture2)=>capture2.layer===layer))activation.setPendingSequence(null);else if(layer.commands.length>0&&!options.host.isDestroyed)activation.ensureValidPendingSequence();notify.queueStateChange()})},attachReactiveMatchers=(target)=>{for(let matcher of target.matchers){if(!matcher.subscribe)continue;try{matcher.dispose=matcher.subscribe(()=>{if(!activation.hasPendingSequenceState()){notify.queueStateChange();return}notify.runWithStateChangeBatch(()=>{activation.revalidatePendingSequenceIfNeeded(),notify.queueStateChange()})})}catch(error2){notify.emitError("reactive-matcher-subscribe-error",error2,getErrorMessage(error2,`Failed to subscribe to reactive matcher from ${matcher.source}`))}}},updateCacheBlockers=(layer)=>{let activeKeyBlocked=layerBlocksActiveKeyCache(layer),activeCommandViewBlocked=layerBlocksActiveCommandViewCache(layer);if(layer.activeKeyCacheBlocked=activeKeyBlocked,layer.activeCommandViewCacheBlocked=activeCommandViewBlocked,activeKeyBlocked)state.activeKeyCacheBlockers+=1;if(activeCommandViewBlocked)state.activeCommandViewCacheBlockers+=1},untrackCacheBlockers=(layer)=>{if(layer.activeKeyCacheBlocked)state.activeKeyCacheBlockers-=1,layer.activeKeyCacheBlocked=!1;if(layer.activeCommandViewCacheBlocked)state.activeCommandViewCacheBlockers-=1,layer.activeCommandViewCacheBlocked=!1},detachReactiveMatchers=(target)=>{for(let matcher of target.matchers){if(!matcher.dispose)continue;try{matcher.dispose()}catch(error2){notify.emitError("reactive-matcher-dispose-error",error2,getErrorMessage(error2,`Failed to dispose reactive matcher from ${matcher.source}`))}matcher.dispose=void 0}};return{registerLayer,applyTokenState,recompileBindings,cleanup}}function createNotificationService(state,events,hooks){let emitWarning=(code,warning,message)=>{if(!events.has("warning")){let consoleMessage=`[${code}] ${message}`;if(warning instanceof Error)console.warn(consoleMessage,warning);else console.warn(consoleMessage);return}events.emit("warning",{code,message,warning})},emitError=(code,error2,message)=>{if(!events.has("error")){let consoleMessage=`[${code}] ${message}`;if(error2 instanceof Error)console.error(consoleMessage,error2);else console.error(consoleMessage);return}events.emit("error",{code,message,error:error2})},flushStateChange=()=>{if(!state.stateChangePending||state.stateChangeDepth>0||state.flushingStateChange)return;state.flushingStateChange=!0;try{let iterations=0;while(state.stateChangePending&&state.stateChangeDepth===0){if(iterations>=MAX_STATE_CHANGE_FLUSH_ITERATIONS){state.stateChangePending=!1,emitError("state-change-feedback-loop",{iterations:MAX_STATE_CHANGE_FLUSH_ITERATIONS},`[Keymap] Possible infinite state listener feedback loop detected after ${MAX_STATE_CHANGE_FLUSH_ITERATIONS} iterations; pending state notifications were dropped`);break}iterations+=1,state.stateChangePending=!1,hooks.emit("state")}}finally{state.flushingStateChange=!1}};return{runWithStateChangeBatch(fn){state.stateChangeDepth+=1;try{return fn()}finally{if(state.stateChangeDepth-=1,state.stateChangeDepth===0)flushStateChange()}},queueStateChange(options){if(state.derivedVersion+=1,options?.invalidateCaches!==!1)state.cacheVersion+=1;if(!hooks.has("state"))return;if(state.stateChangePending=!0,state.stateChangeDepth===0&&!state.flushingStateChange)flushStateChange()},emitWarning,emitError,reportListenerError(name,error2){if(name==="state"){emitError("state-listener-error",error2,"[Keymap] Error in state listener:");return}if(name==="pendingSequence"){emitError("pending-sequence-listener-error",error2,"[Keymap] Error in pending sequence listener:");return}if(name==="dispatch")emitError("dispatch-listener-error",error2,"[Keymap] Error in dispatch listener:")},warnOnce(key,code,warning,message){if(state.usedWarningKeys.has(key))return;state.usedWarningKeys.add(key),emitWarning(code,warning,message)}}}function createRuntimeService(state,notify,activation){return{getData(name){return state.data[name]},setData(name,value){notify.runWithStateChangeBatch(()=>{if(value===void 0){if(!(name in state.data))return;delete state.data[name],state.dataVersion+=1,activation.ensureValidPendingSequence(),notify.queueStateChange();return}if(Object.is(state.data[name],value))return;state.data[name]=value,state.dataVersion+=1,activation.ensureValidPendingSequence(),notify.queueStateChange()})},getReadonlyData(){if(state.readonlyDataVersion===state.dataVersion)return state.readonlyData;return state.readonlyData=Object.freeze({...state.data}),state.readonlyDataVersion=state.dataVersion,state.readonlyData}}}function createKeymapState(){return{order:0,tokens:new Map,patterns:new Map,layerFields:new Map,layerBindingsTransformers:createRuntimeOrderedRegistry(),bindingExpanders:createRuntimeOrderedRegistry(),bindingParsers:createRuntimeOrderedRegistry(),bindingTransformers:createRuntimeOrderedRegistry(),bindingFields:new Map,commandTransformers:createRuntimeOrderedRegistry(),commandFields:new Map,eventMatchResolvers:createRuntimeOrderedRegistry(),disambiguationResolvers:createRuntimeOrderedRegistry(),keyHooks:createRuntimePriorityRegistry(),keyAfterHooks:createRuntimePriorityRegistry(),rawHooks:createRuntimePriorityRegistry(),layers:new Set,sortedLayers:[],activeLayersCacheVersion:-1,activeLayersCacheFocused:void 0,activeLayersCache:[],activeKeyCacheBlockers:0,activeCommandViewCacheBlockers:0,commandResolvers:createRuntimeOrderedRegistry(),pending:null,data:{},dataVersion:0,readonlyDataVersion:-1,readonlyData:EMPTY_DATA,cacheVersion:0,derivedVersion:0,stateChangeDepth:0,stateChangePending:!1,flushingStateChange:!1,usedWarningKeys:new Set}}function getKeyMatchKey(input){return resolveKeyMatch(input)}var RESERVED_COMMAND_FIELDS,RESERVED_BINDING_FIELDS,RESERVED_LAYER_FIELDS,DEFAULT_COMMAND_SEARCH_FIELDS,EMPTY_COMMAND_FIELDS,commandSearchCache,EMPTY_COMPILE_FIELDS,EMPTY_REQUIRES,EMPTY_MATCHERS,KEY_DISAMBIGUATION_DECISION,KEY_DEFERRED_DISAMBIGUATION_DECISION,NOOP=()=>{},NOOP2=()=>{},MAX_STATE_CHANGE_FLUSH_ITERATIONS=1000,EMPTY_DATA,Keymap;var init_src2=__esm(()=>{init_index_frk6sdcd();RESERVED_COMMAND_FIELDS=new Set(["name","run","fields","attrs","rejectedResult"]),RESERVED_BINDING_FIELDS=new Set(["key","cmd","event","preventDefault","fallthrough"]),RESERVED_LAYER_FIELDS=new Set(["target","targetMode","priority","bindings","commands"]);DEFAULT_COMMAND_SEARCH_FIELDS=["name"],EMPTY_COMMAND_FIELDS=Object.freeze({}),commandSearchCache=new WeakMap;EMPTY_COMPILE_FIELDS=Object.freeze({}),EMPTY_REQUIRES=[],EMPTY_MATCHERS=[];KEY_DISAMBIGUATION_DECISION=Symbol("keymap-disambiguation-decision"),KEY_DEFERRED_DISAMBIGUATION_DECISION=Symbol("keymap-deferred-disambiguation-decision");EMPTY_DATA=Object.freeze({});Keymap=class Keymap{#state=createKeymapState();#cleanedUp=!1;#resources=new Map;#cleanupListeners=[];#events=createRuntimeEmitter(()=>{});#hooks;#notify;#activation;#runtime;#conditions;#catalog;#executor;#compiler;#dispatch;#layers;#layerDiagnostics;#keypressListener;#keyreleaseListener;#rawListener;#focusedTargetListener;#host;getPendingSequence;getActiveKeys;constructor(host){if(this.#host=host,host.isDestroyed)throw Error("Cannot create a keymap for a destroyed host");if(this.#hooks=createRuntimeEmitter((name,error2)=>{this.#notify.reportListenerError(name,error2)}),this.#notify=createNotificationService(this.#state,this.#events,this.#hooks),this.#conditions=createConditionService(this.#state,this.#notify),this.#catalog=createCommandCatalogService(this.#state,this.#host,this.#notify,this.#conditions,{onCommandResolversChanged:()=>{this.#activation.ensureValidPendingSequence()}}),this.#activation=createActivationService(this.#state,this.#host,this.#hooks,this.#notify,this.#conditions,this.#catalog,{onPendingSequenceChanged:(previous,next)=>{this.#dispatch?.handlePendingSequenceChange(previous,next)}}),this.#runtime=createRuntimeService(this.#state,this.#notify,this.#activation),this.#executor=createCommandExecutorService(this.#notify,this.#runtime,this.#activation,this.#catalog,{keymap:this,createCommandEvent:()=>this.#host.createCommandEvent()}),this.#compiler=createCompilerService(this.#state,this.#notify,this.#conditions,{warnUnknownField:(kind,fieldName)=>{this.#warnUnknownField(kind,fieldName)},warnUnknownToken:(token,sequence)=>{this.#warnUnknownToken(token,sequence)}}),this.#layerDiagnostics=createLayerDiagnostics(this.#notify,this.#catalog),this.#layers=createLayerService(this.#state,this.#notify,this.#conditions,this.#activation,{compiler:this.#compiler,commands:this.#catalog,host:this.#host,diagnostics:this.#layerDiagnostics,warnUnknownField:(kind,fieldName)=>{this.#warnUnknownField(kind,fieldName)}}),this.#dispatch=createDispatchService(this.#state,this.#notify,this.#runtime,this.#activation,this.#conditions,this.#executor,this.#compiler,this.#catalog,this.#layers,this.#hooks),this.getPendingSequence=this.#activation.getPendingSequence,this.getActiveKeys=this.#activation.getActiveKeys,this.#keypressListener=(event)=>{this.#dispatch.handleKeyEvent(event,!1)},this.#keyreleaseListener=(event)=>{this.#dispatch.handleKeyEvent(event,!0)},this.#rawListener=(sequence)=>{return this.#dispatch.handleRawSequence(sequence)},this.#focusedTargetListener=(focused)=>{this.#handleFocusedTargetChange(focused)},this.#cleanupListeners.push(this.#host.onKeyPress(this.#keypressListener)),this.#cleanupListeners.push(this.#host.onKeyRelease(this.#keyreleaseListener)),this.#host.onRawInput)this.#cleanupListeners.push(this.#host.onRawInput(this.#rawListener));if(this.#cleanupListeners.push(this.#host.onFocusChange(this.#focusedTargetListener)),this.#host.onDestroy)this.#cleanupListeners.push(this.#host.onDestroy(()=>{this.#cleanup()}))}[KEYMAP_EXTENSION_CONTEXT](){return{state:this.#state,host:this.#host,conditions:this.#conditions,catalog:this.#catalog,activation:this.#activation}}#cleanup(){if(this.#cleanedUp)return;this.#cleanedUp=!0,this.#activation.setPendingSequence(null);for(let resource of this.#resources.values())resource.dispose();this.#resources.clear(),this.#layers.cleanup();for(let cleanupListener of this.#cleanupListeners.splice(0))cleanupListener()}setData(name,value){this.#runtime.setData(name,value)}getData(name){return this.#runtime.getData(name)}getHostMetadata(){return this.#host.metadata}hasPendingSequence(){return this.#activation.ensureValidPendingSequence()!==void 0}createKeyMatcher(key){let match=this.#compiler.parseTokenKey(key).match;return(input)=>{if(!input)return!1;return getKeyMatchKey(input)===match}}parseKeySequence(key){return this.#compiler.parseKeySequence(key)}formatKey(key,options){return this.#compiler.formatKey(key,options)}clearPendingSequence(){this.#activation.setPendingSequence(null)}popPendingSequence(){return this.#activation.popPendingSequence()}getCommands(query2){return this.#catalog.getCommands(query2)}getCommandEntries(query2){return this.#catalog.getCommandEntries(query2)}getCommandBindings(query2){return this.#catalog.getCommandBindings(query2)}acquireResource(key,setup){if(this.#cleanedUp||this.#host.isDestroyed)throw Error("Cannot use a keymap after its host was destroyed");let existing=this.#resources.get(key);if(existing)return existing.count+=1,()=>{this.#releaseResource(key,existing)};let resource={count:1,dispose:setup()};return this.#resources.set(key,resource),()=>{this.#releaseResource(key,resource)}}runCommand(cmd,options){return this.#executor.runCommand(cmd,options)}dispatchCommand(cmd,options){return this.#executor.dispatchCommand(cmd,options)}on(name,fn){if(name==="warning")return this.#events.hook(name,fn);if(name==="error")return this.#events.hook(name,fn);return this.#hooks.hook(name,fn)}intercept(name,fn,options){if(name==="key")return this.#dispatch.intercept(name,fn,options);if(name==="key:after")return this.#dispatch.intercept(name,fn,options);return this.#dispatch.intercept(name,fn,options)}registerLayer(layer){return this.#layers.registerLayer(layer)}registerLayerFields(fields){return registerFields(this.#state,this.#notify,"layer",fields)}prependLayerBindingsTransformer(transformer){return this.#state.layerBindingsTransformers.prepend(transformer)}appendLayerBindingsTransformer(transformer){return this.#state.layerBindingsTransformers.append(transformer)}clearLayerBindingsTransformers(){this.#state.layerBindingsTransformers.clear()}prependBindingTransformer(transformer){return this.#state.bindingTransformers.prepend(transformer)}appendBindingTransformer(transformer){return this.#state.bindingTransformers.append(transformer)}clearBindingTransformers(){this.#state.bindingTransformers.clear()}prependCommandTransformer(transformer){return this.#state.commandTransformers.prepend(transformer)}appendCommandTransformer(transformer){return this.#state.commandTransformers.append(transformer)}clearCommandTransformers(){this.#state.commandTransformers.clear()}prependBindingParser(parser){return this.#state.bindingParsers.prepend(parser)}appendBindingParser(parser){return this.#state.bindingParsers.append(parser)}clearBindingParsers(){this.#state.bindingParsers.clear()}registerToken(token){return registerToken(this.#state,this.#notify,this.#compiler,this.#layers,token)}registerSequencePattern(pattern){return registerSequencePattern(this.#state,this.#notify,this.#layers,pattern)}prependBindingExpander(expander){return this.#state.bindingExpanders.prepend(expander)}appendBindingExpander(expander){return this.#state.bindingExpanders.append(expander)}clearBindingExpanders(){this.#state.bindingExpanders.clear()}registerBindingFields(fields){return registerFields(this.#state,this.#notify,"binding",fields)}registerCommandFields(fields){return registerFields(this.#state,this.#notify,"command",fields)}prependCommandResolver(resolver){return this.#catalog.prependCommandResolver(resolver)}appendCommandResolver(resolver){return this.#catalog.appendCommandResolver(resolver)}clearCommandResolvers(){this.#catalog.clearCommandResolvers()}prependLayerAnalyzer(analyzer){return this.#layerDiagnostics.prependLayerAnalyzer(analyzer)}appendLayerAnalyzer(analyzer){return this.#layerDiagnostics.appendLayerAnalyzer(analyzer)}clearLayerAnalyzers(){this.#layerDiagnostics.clearLayerAnalyzers()}prependEventMatchResolver(resolver){return this.#dispatch.prependEventMatchResolver(resolver)}appendEventMatchResolver(resolver){return this.#dispatch.appendEventMatchResolver(resolver)}clearEventMatchResolvers(){this.#dispatch.clearEventMatchResolvers()}prependDisambiguationResolver(resolver){return this.#dispatch.prependDisambiguationResolver(resolver)}appendDisambiguationResolver(resolver){return this.#dispatch.appendDisambiguationResolver(resolver)}clearDisambiguationResolvers(){this.#dispatch.clearDisambiguationResolvers()}#handleFocusedTargetChange(_focused){this.#notify.runWithStateChangeBatch(()=>{this.#activation.setPendingSequence(null),this.#notify.queueStateChange({invalidateCaches:!1})})}#warnUnknownField(kind,fieldName){this.#notify.warnOnce(`${kind}:${fieldName}`,`unknown-${kind}-field`,{field:fieldName,kind},`[Keymap] Unknown ${kind} field "${fieldName}" was ignored`)}#warnUnknownToken(token,sequence){this.#notify.warnOnce(`token:${token}`,"unknown-token",{token,sequence},`[Keymap] Unknown token "${token}" in key sequence "${sequence}" was ignored`)}#releaseResource(key,resource){if(this.#resources.get(key)!==resource)return;if(resource.count-=1,resource.count>0)return;resource.dispose(),this.#resources.delete(key)}}});function createPrefixBuckets(values2){let buckets=new Map;for(let value of values2){let first=value.charCodeAt(0);if(Number.isNaN(first))continue;let bucket=buckets.get(first);if(!bucket)bucket=[],buckets.set(first,bucket);bucket.push(value)}for(let bucket of buckets.values())bucket.sort((left,right)=>right.length-left.length);return buckets}function toLowerAsciiCode(code){return code>=65&&code<=90?code+32:code}function isDigitCode(code){return code>=48&&code<=57}function startsWithAsciiInsensitive(input,prefix,index){if(input.startsWith(prefix,index))return!0;if(index+prefix.length>input.length)return!1;for(let offset=0;offset<prefix.length;offset+=1)if(toLowerAsciiCode(input.charCodeAt(index+offset))!==prefix.charCodeAt(offset))return!1;return!0}function findBucketedPrefixMatch(buckets,input,index){let first=input.charCodeAt(index);if(Number.isNaN(first))return;let candidates=buckets.get(toLowerAsciiCode(first));if(!candidates)return;for(let candidate of candidates)if(startsWithAsciiInsensitive(input,candidate,index))return candidate;return}function parseObjectKeyInput(ctx,key,display,match,tokenName){return ctx.parseObjectKey(key,{display,match,tokenName})}function parseStringKeyPart(input,ctx){if(input===" ")return ctx.parseObjectKey({name:"space"},{display:"space"});if(input==="+")return ctx.parseObjectKey({name:"+"},{display:"+"});let parts=input.split("+"),name="",displayName="",ctrl=!1,shift=!1,meta=!1,superKey=!1,hyper=!1;for(let rawPart of parts){let part=rawPart.trim();if(!part)continue;let lowered=part.toLowerCase();if(lowered==="ctrl"||lowered==="control"){ctrl=!0;continue}if(lowered==="shift"){shift=!0;continue}if(lowered==="meta"||lowered==="alt"||lowered==="option"){meta=!0;continue}if(lowered==="super"){superKey=!0;continue}if(lowered==="hyper"){hyper=!0;continue}if(name)throw Error(`Invalid key "${input}": multiple key names are not supported`);name=part,displayName=lowered}if(!name)throw Error(`Invalid key "${input}": missing key name`);let displayParts=[];if(ctrl)displayParts.push("ctrl");if(shift)displayParts.push("shift");if(meta)displayParts.push("meta");if(superKey)displayParts.push("super");if(hyper)displayParts.push("hyper");return displayParts.push(displayName),ctx.parseObjectKey({name,ctrl,shift,meta,super:superKey,hyper:hyper||void 0},{display:displayParts.join("+")})}function parseNamedKeyPart(name,ctx){let normalized=name.trim().toLowerCase();return ctx.parseObjectKey({name:normalized},{display:normalized})}function findNamedSingleStrokeKey(input,index){let namedKey=findBucketedPrefixMatch(namedSingleStrokeKeyPrefixes,input,index);if(namedKey)return namedKey;if(toLowerAsciiCode(input.charCodeAt(index))!==102||!isDigitCode(input.charCodeAt(index+1)))return;let end=isDigitCode(input.charCodeAt(index+2))?index+3:index+2;return input.slice(index,end).toLowerCase()}function findModifierKey(input,index){return findBucketedPrefixMatch(modifierKeyPrefixes,input,index)}function parseModifiedKeyPart(input,index,ctx){let cursor=index,ctrl=!1,shift=!1,meta=!1,superKey=!1,hyper=!1;while(cursor<input.length){let modifier=findModifierKey(input,cursor);if(!modifier)break;let plusIndex=cursor+modifier.length;if(input[plusIndex]!=="+")break;if(modifier==="ctrl"||modifier==="control")ctrl=!0;else if(modifier==="shift")shift=!0;else if(modifier==="meta"||modifier==="alt"||modifier==="option")meta=!0;else if(modifier==="super")superKey=!0;else if(modifier==="hyper")hyper=!0;cursor=plusIndex+1}if(cursor===index)return;let char=input[cursor];if(char===void 0)throw Error(`Invalid key "${input.slice(index)}": missing key name`);let name=findNamedSingleStrokeKey(input,cursor)??char,displayName=name===" "?"space":name==="+"?"+":name.toLowerCase(),displayParts=[];if(ctrl)displayParts.push("ctrl");if(shift)displayParts.push("shift");if(meta)displayParts.push("meta");if(superKey)displayParts.push("super");if(hyper)displayParts.push("hyper");return displayParts.push(displayName),{part:ctx.parseObjectKey({name:name===" "?"space":name,ctrl,shift,meta,super:superKey,hyper:hyper||void 0},{display:displayParts.join("+")}),nextIndex:cursor+name.length}}function registerDefaultBindingParser(keymap){return keymap.appendBindingParser((ctx)=>defaultBindingParser(ctx))}function registerDefaultEventMatchResolver(keymap){return keymap.appendEventMatchResolver((event,ctx)=>defaultEventMatchResolver(event,ctx))}function registerDefaultKeys(keymap){let offParser=registerDefaultBindingParser(keymap),offResolver=registerDefaultEventMatchResolver(keymap);return()=>{offResolver(),offParser()}}function registerEscapeClearsPendingSequence(keymap,options){let shouldPreventDefault=options?.preventDefault??!0;return keymap.intercept("key",({event,consume})=>{if(event.name!=="escape")return;if(!keymap.hasPendingSequence())return;if(keymap.clearPendingSequence(),shouldPreventDefault)consume()},{priority:options?.priority??0})}function isReactiveMatcher2(value){if(!value||typeof value!=="object")return!1;let candidate=value;return typeof candidate.get==="function"&&typeof candidate.subscribe==="function"}function normalizeEnabledValue(fieldName,value){if(typeof value==="boolean")return value;if(typeof value==="function")return value;if(isReactiveMatcher2(value))return value;throw Error(`Keymap enabled field "${fieldName}" must be a boolean, a function, or a reactive matcher`)}function registerEnabledFields(keymap){return keymap.acquireResource(ENABLED_FIELDS_RESOURCE,()=>{let offLayerFields=keymap.registerLayerFields({enabled(value,ctx){let normalized=normalizeEnabledValue("enabled",value);if(normalized===!0)return;if(normalized===!1){ctx.activeWhen(()=>!1);return}ctx.activeWhen(normalized)}}),offCommandFields=keymap.registerCommandFields({enabled(value,ctx){let normalized=normalizeEnabledValue("enabled",value);if(normalized===!0)return;if(normalized===!1){ctx.activeWhen(()=>!1);return}ctx.activeWhen(normalized)}});return()=>{offCommandFields(),offLayerFields()}})}function isLeaderTriggerArray(trigger){return Array.isArray(trigger)}function resolveLeaderTrigger(trigger){if(isLeaderTriggerArray(trigger)){if(trigger.length!==1)throw Error("Invalid leader trigger: expected exactly one binding");return trigger[0].key}if(typeof trigger==="object"&&"key"in trigger)return trigger.key;return trigger}function registerLeader(keymap,options){return keymap.registerToken({name:options.name??"leader",key:resolveLeaderTrigger(options.trigger)})}function normalizeMetadataText(fieldName,value){if(typeof value!=="string")throw Error(`Keymap metadata field "${fieldName}" must be a string`);let trimmed=value.trim();if(!trimmed)throw Error(`Keymap metadata field "${fieldName}" cannot be empty`);return trimmed}function registerMetadataFields(keymap){return keymap.acquireResource(METADATA_FIELDS_RESOURCE,()=>{let offBindingFields=keymap.registerBindingFields({desc(value,ctx){ctx.attr("desc",normalizeMetadataText("desc",value))},group(value,ctx){ctx.attr("group",normalizeMetadataText("group",value))}}),offCommandFields=keymap.registerCommandFields({desc(value,ctx){ctx.attr("desc",normalizeMetadataText("desc",value))},title(value,ctx){ctx.attr("title",normalizeMetadataText("title",value))},category(value,ctx){ctx.attr("category",normalizeMetadataText("category",value))}});return()=>{offCommandFields(),offBindingFields()}})}var namedSingleStrokeKeys,modifierKeyNames,namedSingleStrokeKeyPrefixes,modifierKeyPrefixes,defaultBindingParser=(ctx)=>{let{input,index,tokens:tokens2,normalizeTokenName}=ctx;if(index===0&&input.includes("+")&&/\s/.test(input))return{parts:[parseStringKeyPart(input,ctx)],nextIndex:input.length};let char=input[index];if(char===void 0)return;if(char==="<"){let end=input.indexOf(">",index);if(end===-1)return{parts:[parseStringKeyPart(char,ctx)],nextIndex:index+1};let tokenName=normalizeTokenName(input.slice(index+1,end)),token=tokens2.get(tokenName);if(!token)return{parts:[],nextIndex:end+1,unknownTokens:[tokenName]};return{parts:[parseObjectKeyInput(ctx,token.stroke,`<${tokenName}>`,token.match,tokenName)],nextIndex:end+1,usedTokens:[tokenName]}}if(char==="{"){let end=input.indexOf("}",index);if(end===-1)return{parts:[parseStringKeyPart(char,ctx)],nextIndex:index+1};let patternName=normalizeTokenName(input.slice(index+1,end)),pattern=ctx.patterns.get(patternName);if(!pattern)return{parts:[],nextIndex:end+1,unknownTokens:[patternName]};return{parts:[{...ctx.parseObjectKey({name:patternName,ctrl:!1,shift:!1,meta:!1,super:!1},{display:pattern.display??`{${patternName}}`,match:pattern.match}),patternName:pattern.name,payloadKey:pattern.payloadKey}],nextIndex:end+1,usedTokens:[patternName]}}let modified=parseModifiedKeyPart(input,index,ctx);if(modified)return{parts:[modified.part],nextIndex:modified.nextIndex};let namedKey=findNamedSingleStrokeKey(input,index);if(namedKey)return{parts:[parseNamedKeyPart(namedKey,ctx)],nextIndex:index+namedKey.length};return{parts:[parseStringKeyPart(char,ctx)],nextIndex:index+1}},defaultEventMatchResolver=(event,ctx)=>{return[ctx.resolveKey({name:event.name,ctrl:event.ctrl,shift:event.shift,meta:event.meta,super:event.super??!1,hyper:event.hyper||void 0})]},BINDING_OVERRIDES_RESOURCE,ALIASES_FIELD_RESOURCE,COMMA_BINDINGS_RESOURCE,DEAD_BINDING_WARNINGS_RESOURCE,ENABLED_FIELDS_RESOURCE,EMACS_BINDINGS_RESOURCE,EX_COMMANDS_RESOURCE,METADATA_FIELDS_RESOURCE,MOD_BINDINGS_RESOURCE,UNRESOLVED_COMMAND_WARNINGS_RESOURCE;var init_addons=__esm(()=>{init_src2();init_src2();namedSingleStrokeKeys=new Set(["up","down","left","right","clear","escape","return","linefeed","enter","tab","backspace","delete","insert","home","end","pageup","pagedown","space","lt","gt","plus","minus","equal","comma","period","slash","backslash","semicolon","quote","backquote","leftbracket","rightbracket","capslock","numlock","scrolllock","printscreen","pause","menu","apps","kp0","kp1","kp2","kp3","kp4","kp5","kp6","kp7","kp8","kp9","kpdecimal","kpdivide","kpmultiply","kpminus","kpplus","kpenter","kpequal","kpseparator","kpleft","kpright","kpup","kpdown","kppageup","kppagedown","kphome","kpend","kpinsert","kpdelete","mediaplay","mediapause","mediaplaypause","mediareverse","mediastop","mediafastforward","mediarewind","medianext","mediaprev","mediarecord","volumedown","volumeup","mute","leftshift","leftctrl","leftalt","leftsuper","lefthyper","leftmeta","rightshift","rightctrl","rightalt","rightsuper","righthyper","rightmeta","iso_level3_shift","iso_level5_shift","option","alt","meta","super","hyper","control","ctrl","shift"]),modifierKeyNames=new Set(["ctrl","control","shift","meta","alt","option","super","hyper"]),namedSingleStrokeKeyPrefixes=createPrefixBuckets(namedSingleStrokeKeys),modifierKeyPrefixes=createPrefixBuckets(modifierKeyNames);BINDING_OVERRIDES_RESOURCE=Symbol("keymap:binding-overrides"),ALIASES_FIELD_RESOURCE=Symbol("keymap:aliases-field"),COMMA_BINDINGS_RESOURCE=Symbol("keymap:comma-bindings"),DEAD_BINDING_WARNINGS_RESOURCE=Symbol("keymap:dead-binding-warnings");ENABLED_FIELDS_RESOURCE=Symbol("keymap:enabled-fields");EMACS_BINDINGS_RESOURCE=Symbol("keymap:emacs-bindings"),EX_COMMANDS_RESOURCE=Symbol("keymap:ex-commands");METADATA_FIELDS_RESOURCE=Symbol("keymap:metadata-fields");MOD_BINDINGS_RESOURCE=Symbol("keymap:mod-bindings"),UNRESOLVED_COMMAND_WARNINGS_RESOURCE=Symbol("keymap:unresolved-command-warnings")});function createSyntheticCommandEvent(){return new KeyEvent({name:"command",ctrl:!1,meta:!1,shift:!1,option:!1,sequence:"",number:!1,raw:"",eventType:"press",source:"raw"})}function normalizeRuntimePlatform(platform2){if(platform2==="darwin")return"macos";if(platform2==="win32")return"windows";if(platform2==="linux")return"linux";return"unknown"}function createOpenTuiHostMetadata(renderer){let platform2=normalizeRuntimePlatform(process.platform),hasKittyKeyboard=renderer.capabilities?.kitty_keyboard===!0;return{platform:platform2,primaryModifier:platform2==="macos"?"super":platform2==="unknown"?"unknown":"ctrl",modifiers:{ctrl:"supported",shift:"supported",meta:"supported",super:hasKittyKeyboard?"supported":"unknown",hyper:hasKittyKeyboard?"supported":"unknown"}}}function createOpenTuiKeymapHost(renderer){return{get metadata(){return createOpenTuiHostMetadata(renderer)},rootTarget:renderer.root,get isDestroyed(){return renderer.isDestroyed},getFocusedTarget(){let focused=renderer.currentFocusedRenderable;if(!focused||focused.isDestroyed||!focused.focused)return null;return focused},getParentTarget(target){return target.parent},isTargetDestroyed(target){return target.isDestroyed},onKeyPress(listener){return renderer.keyInput.prependListener("keypress",listener),()=>{renderer.keyInput.off("keypress",listener)}},onKeyRelease(listener){return renderer.keyInput.prependListener("keyrelease",listener),()=>{renderer.keyInput.off("keyrelease",listener)}},onFocusChange(listener){return renderer.on(CliRenderEvents.FOCUSED_RENDERABLE,listener),()=>{renderer.off(CliRenderEvents.FOCUSED_RENDERABLE,listener)}},onDestroy(listener){return renderer.once(CliRenderEvents.DESTROY,listener),()=>{renderer.off(CliRenderEvents.DESTROY,listener)}},onTargetDestroy(target,listener){return target.once(RenderableEvents.DESTROYED,listener),()=>{target.off(RenderableEvents.DESTROYED,listener)}},onRawInput(listener){return renderer.prependInputHandler(listener),()=>{renderer.removeInputHandler(listener)}},createCommandEvent(){return createSyntheticCommandEvent()}}}function createDefaultOpenTuiKeymap(renderer){if(renderer.isDestroyed)throw Error("Cannot create a keymap for a destroyed renderer");let keymap=new Keymap(createOpenTuiKeymapHost(renderer));return registerDefaultKeys(keymap),registerEnabledFields(keymap),registerMetadataFields(keymap),keymap}var init_opentui=__esm(async()=>{init_src2();init_addons();await init_core()});function createTuiKeymap(renderer){let keymap=createDefaultOpenTuiKeymap(renderer);return registerLeader(keymap,{trigger:{name:"space"}}),registerEscapeClearsPendingSequence(keymap),keymap}var init_keymap=__esm(async()=>{init_addons();await init_opentui()});import{spawnSync as spawnSync10}from"child_process";import{existsSync as existsSync77}from"fs";function resolveTuiTmuxConf(){let tuiConf=`${process.env.GENIE_HOME??`${process.env.HOME}/.genie`}/tui-tmux.conf`;return existsSync77(tuiConf)?tuiConf:"/dev/null"}function safeHex(value,fallback){if(!value)return fallback;let trimmed=value.trim();return HEX_COLOR_RE.test(trimmed)?trimmed:fallback}function resolveThemePalette(snapshot){if(snapshot.mode==="dark")return{bg:palette.bg,bgRaised:palette.bgRaised,text:palette.text,textDim:palette.textDim,textMuted:palette.textMuted,border:palette.border,accent:palette.accent,accentDim:palette.accentDim,accentBright:palette.accentBright,warning:palette.warning,info:palette.info};return{...lightPalette,bg:safeHex(snapshot.terminalBackground,lightPalette.bg),text:safeHex(snapshot.terminalForeground,lightPalette.text)}}function flattenTmuxCommands(commands){let args=[];return commands.forEach((command,index)=>{if(index>0)args.push(";");args.push(...command)}),args}function buildTuiTmuxThemeCommands(snapshot){let theme=resolveThemePalette(snapshot),terminalForeground=safeHex(snapshot.terminalForeground,theme.text),terminalBackground=safeHex(snapshot.terminalBackground,theme.bg);return flattenTmuxCommands([["set-environment","-g","GENIE_TUI_THEME_MODE",snapshot.mode],["set-environment","-g","GENIE_TUI_TERMINAL_FG",terminalForeground],["set-environment","-g","GENIE_TUI_TERMINAL_BG",terminalBackground],["set-environment","-g","GENIE_TUI_TMUX_BG",theme.bg],["set-environment","-g","GENIE_TUI_TMUX_TEXT",theme.text],["set-environment","-g","GENIE_TUI_TMUX_ACCENT",theme.accent],["set-option","-g","pane-border-style",`fg=${theme.border}`],["set-option","-g","pane-active-border-style",`fg=${theme.accent}`],["set-option","-g","message-style",`bg=${theme.bgRaised},fg=${theme.info}`],["set-option","-g","message-command-style",`bg=${theme.bgRaised},fg=${theme.warning}`],["set-option","-g","status-style",`bg=${theme.bg},fg=${theme.text}`],["set-window-option","-g","mode-style",`bg=${theme.accent},fg=${theme.bg}`],["set-window-option","-g","clock-mode-colour",theme.accent]])}function syncTuiTmuxTheme(snapshot,deps={}){let run=deps.spawnSync??spawnSync10,tmux=deps.tmuxBin??tmuxBin(),socketName=deps.socketName??TUI_TMUX_SOCKET,configPath2=deps.configPath??resolveTuiTmuxConf(),timeoutMs=deps.timeoutMs??DEFAULT_TMUX_SYNC_TIMEOUT_MS;return run(tmux,["-L",socketName,"-f",configPath2,...buildTuiTmuxThemeCommands(snapshot)],{stdio:"ignore",timeout:timeoutMs}).status===0}var TUI_TMUX_SOCKET="genie-tui",DEFAULT_TMUX_SYNC_TIMEOUT_MS=300,HEX_COLOR_RE,lightPalette;var init_tmux_theme_sync=__esm(()=>{init_ensure_tmux();init_theme2();HEX_COLOR_RE=/^#[0-9a-f]{6}$/i,lightPalette={bg:"#f5efe4",bgRaised:"#ebe3d7",text:"#24323a",textDim:"#56656d",textMuted:"#718087",border:"#c8bdae",accent:"#2f7a62",accentDim:"#3e9277",accentBright:"#17694f",warning:"#9a651e",info:"#406f8b"}});function readBool(env2,name,fallback){let raw=env2[name];if(!raw)return fallback;let normalized=raw.trim().toLowerCase();if(TRUTHY3.has(normalized))return!0;if(FALSY.has(normalized))return!1;return fallback}function readPositiveInt(env2,name,fallback){let raw=env2[name];if(!raw)return fallback;let parsed=Number.parseInt(raw,10);return Number.isFinite(parsed)&&parsed>0?parsed:fallback}function inferThemeMode(background){if(!background||!/^#[0-9a-f]{6}$/i.test(background))return null;let r=Number.parseInt(background.slice(1,3),16),g2=Number.parseInt(background.slice(3,5),16),b3=Number.parseInt(background.slice(5,7),16);return(0.2126*r+0.7152*g2+0.0722*b3)/255>=0.5?"light":"dark"}function snapshotKey(snapshot){return[snapshot.mode,snapshot.terminalForeground??"",snapshot.terminalBackground??""].join("|")}function buildSnapshot(mode,colors8){let resolvedMode=mode??inferThemeMode(colors8?.defaultBackground);if(!resolvedMode)return null;return{mode:resolvedMode,terminalForeground:colors8?.defaultForeground,terminalBackground:colors8?.defaultBackground}}function installOpenTui20Bridge(renderer,options={}){let env2=options.env??process.env;if(!readBool(env2,"GENIE_TUI_TMUX_THEME_SYNC",!0))return()=>{};let syncTheme=options.syncTheme??syncTuiTmuxTheme,themeQueryTimeoutMs=readPositiveInt(env2,"GENIE_TUI_THEME_QUERY_TIMEOUT_MS",DEFAULT_THEME_QUERY_TIMEOUT_MS),tmuxApplyTimeoutMs=readPositiveInt(env2,"GENIE_TUI_TMUX_THEME_SYNC_TIMEOUT_MS",DEFAULT_TMUX_APPLY_TIMEOUT_MS),disposed=!1,lastSnapshot="",syncSnapshot=(snapshot)=>{if(disposed||!snapshot)return;let key=snapshotKey(snapshot);if(key===lastSnapshot)return;lastSnapshot=key;try{syncTheme(snapshot,{timeoutMs:tmuxApplyTimeoutMs})}catch{}},syncFromMode=(mode,colors8)=>{syncSnapshot(buildSnapshot(mode,colors8))},onThemeMode=(mode)=>syncFromMode(mode);renderer.on("theme_mode",onThemeMode),syncFromMode(renderer.themeMode),renderer.waitForThemeMode(themeQueryTimeoutMs).then((mode)=>syncFromMode(mode)).catch(()=>{});let paletteOptions={size:OPEN_TUI_02_PALETTE_SIZE,timeout:themeQueryTimeoutMs};return renderer.getPalette(paletteOptions).then((colors8)=>syncFromMode(renderer.themeMode,colors8)).catch(()=>{}),()=>{disposed=!0,renderer.off("theme_mode",onThemeMode)}}var TRUTHY3,FALSY,DEFAULT_THEME_QUERY_TIMEOUT_MS=700,DEFAULT_TMUX_APPLY_TIMEOUT_MS=300,OPEN_TUI_02_PALETTE_SIZE=16;var init_opentui_bridge=__esm(()=>{init_tmux_theme_sync();TRUTHY3=new Set(["1","true","yes","on"]),FALSY=new Set(["0","false","no","off"])});var exports_render={};__export(exports_render,{resolveTuiRendererConfig:()=>resolveTuiRendererConfig,renderNav:()=>renderNav,installNativeSelectionOverride:()=>installNativeSelectionOverride,disableDragTracking:()=>disableDragTracking});function disableDragTracking(stdout=process.stdout){stdout.write(ESC_DISABLE_DRAG_TRACKING)}function installNativeSelectionOverride(renderer,stdout=process.stdout){let originalEnableMouse=renderer.enableMouse.bind(renderer);renderer.enableMouse=()=>{originalEnableMouse(),disableDragTracking(stdout)},disableDragTracking(stdout)}function readBool2(env2,name,fallback){let raw=env2[name];if(!raw)return fallback;let normalized=raw.trim().toLowerCase();if(TRUTHY4.has(normalized))return!0;if(FALSY2.has(normalized))return!1;return fallback}function readPositiveInt2(env2,name){let raw=env2[name];if(!raw)return;let parsed=Number.parseInt(raw,10);return Number.isFinite(parsed)&&parsed>0?parsed:void 0}function resolveTuiRendererConfig(env2=process.env,platform2=process.platform){let isDarwin=platform2==="darwin",targetFps=readPositiveInt2(env2,"GENIE_TUI_TARGET_FPS")??(isDarwin?8:30),configuredMaxFps=readPositiveInt2(env2,"GENIE_TUI_MAX_FPS")??(isDarwin?12:60),maxFps=Math.max(configuredMaxFps,targetFps),useMouse=readBool2(env2,"GENIE_TUI_MOUSE",!0),enableMouseMovement=useMouse&&readBool2(env2,"GENIE_TUI_MOUSE_MOVEMENT",!isDarwin),consoleEnabled=readBool2(env2,"GENIE_TUI_CONSOLE",!0),kittyKeyboardOptIn=readBool2(env2,"GENIE_TUI_KITTY_KEYBOARD",!isDarwin);return{exitOnCtrlC:!1,useThread:!isDarwin,targetFps,maxFps,useMouse,enableMouseMovement,useKittyKeyboard:kittyKeyboardOptIn?void 0:null,consoleMode:consoleEnabled?void 0:"disabled",openConsoleOnError:consoleEnabled&&!isDarwin}}async function renderNav(){let rightPane=process.env.GENIE_TUI_RIGHT||void 0,workspaceRoot=process.env.GENIE_TUI_WORKSPACE||void 0,initialAgent=process.env.GENIE_TUI_AGENT||void 0,renderer=await createCliRenderer(resolveTuiRendererConfig());installNativeSelectionOverride(renderer);let disposeOpenTui20Bridge=installOpenTui20Bridge(renderer),keymap=createTuiKeymap(renderer);createRoot(renderer).render(import_jsx_dev_runtime2.jsxDEV(KeymapProvider,{keymap,children:import_jsx_dev_runtime2.jsxDEV(App,{rightPane,workspaceRoot,initialAgent},void 0,!1,void 0,this)},void 0,!1,void 0,this)),await new Promise((resolve23)=>{renderer.once("destroy",()=>{disposeOpenTui20Bridge(),resolve23()})})}var ESC_DISABLE_DRAG_TRACKING="\x1B[?1002l\x1B[?1003l",TRUTHY4,FALSY2;var init_render=__esm(async()=>{init_react();init_opentui_bridge();init_jsx_dev_runtime();await __promiseAll([init_core(),init_react2(),init_app(),init_keymap()]);TRUTHY4=new Set(["1","true","yes","on"]),FALSY2=new Set(["0","false","no","off"])});var exports_tui={};__export(exports_tui,{launchTui:()=>launchTui});import{appendFileSync as appendFileSync6,closeSync as closeSync6,mkdirSync as mkdirSync35,openSync as openSync6,readSync as readSync3,statSync as statSync17}from"fs";import{homedir as homedir52}from"os";import{join as join94}from"path";function genieHome6(){return process.env.GENIE_HOME??join94(homedir52(),".genie")}function extractPreviousRunCrashOutput(logPath){let fd=null;try{let size=statSync17(logPath).size;if(size===0)return"";let readSize=Math.min(size,TUI_CRASH_LOG_RECOVERY_MAX_BYTES);fd=openSync6(logPath,"r");let buffer2=Buffer.alloc(readSize);readSync3(fd,buffer2,0,readSize,size-readSize);let text=buffer2.toString("utf-8"),lastBannerIndex=text.lastIndexOf(TUI_CRASH_LOG_BANNER_PREFIX);if(lastBannerIndex<0)return"";let afterBannerNewline=text.indexOf(`
4019
4019
  `,lastBannerIndex);if(afterBannerNewline<0)return"";return text.slice(afterBannerNewline+1).trim()}catch{return""}finally{if(fd!==null)try{closeSync6(fd)}catch{}}}async function ingestPreviousRunCrash(logPath){let body=extractPreviousRunCrashOutput(logPath);if(!body)return;let truncated=body.length>TUI_CRASH_LOG_RECOVERY_MAX_MSG_CHARS?`${body.slice(0,TUI_CRASH_LOG_RECOVERY_MAX_MSG_CHARS)}
4020
4020
  \u2026[truncated]`:body;try{let{emitEvent:emitEvent2}=await Promise.resolve().then(() => (init_emit(),exports_emit));emitEvent2("error.raised",{error_class:"TuiCrash",message:truncated,subsystem:"tui",severity:"error",retryable:!0})}catch{}}async function recordTuiLaunchBreadcrumb(){try{let logsDir=join94(genieHome6(),"logs");mkdirSync35(logsDir,{recursive:!0});let logPath=join94(logsDir,"tui-crash.log");await ingestPreviousRunCrash(logPath);let ts3=new Date().toISOString(),line=`${TUI_CRASH_LOG_BANNER_PREFIX}${ts3} pid=${process.pid} platform=${process.platform} arch=${process.arch} ---
4021
4021
  `;appendFileSync6(logPath,line,{mode:420})}catch{}}function installTuiExitSignals(){let exitOnSignal=(signal)=>{process.exit(signal==="SIGHUP"?0:128+(signal==="SIGINT"?2:15))};process.on("SIGHUP",exitOnSignal),process.on("SIGINT",exitOnSignal),process.on("SIGTERM",exitOnSignal)}async function launchTui(){installTuiExitSignals(),await recordTuiLaunchBreadcrumb();let{renderNav:renderNav2}=await init_render().then(() => exports_render);await renderNav2()}var TUI_CRASH_LOG_BANNER_PREFIX="--- tui-launch ",TUI_CRASH_LOG_RECOVERY_MAX_BYTES=65536,TUI_CRASH_LOG_RECOVERY_MAX_MSG_CHARS=3000;var init_tui=()=>{};var exports_resolve_agent_cwd={};__export(exports_resolve_agent_cwd,{resolveAgentFromCwd:()=>resolveAgentFromCwd});import{existsSync as existsSync78}from"fs";import{basename as basename16,dirname as dirname36,join as join95,relative as relative10,sep as sep3}from"path";function isRelativeWithin(rel,original){return!rel.startsWith("..")&&rel!==original}function resolveFromCanonicalDir(cwd,agentsDir){let relToAgents=relative10(agentsDir,cwd);if(!isRelativeWithin(relToAgents,cwd))return null;let segments=relToAgents.split(sep3).filter(Boolean);if(segments.length===0)return null;let agentName=segments[0];if(!existsSync78(join95(agentsDir,agentName,"AGENTS.md")))return null;let source=segments.length===1?"exact":"parent";return{agent:agentName,source}}function resolveFromWalkUp(cwd,workspaceRoot){let wsRel=relative10(workspaceRoot,cwd);if(!isRelativeWithin(wsRel,cwd))return null;let current=cwd;while(current!==workspaceRoot&&current!==dirname36(current)){if(existsSync78(join95(current,"AGENTS.md")))return{agent:basename16(current),source:"parent"};current=dirname36(current)}return null}function resolveAgentFromCwd(cwd,workspaceRoot){return resolveFromCanonicalDir(cwd,join95(workspaceRoot,"agents"))??resolveFromWalkUp(cwd,workspaceRoot)??{agent:"genie",source:"default"}}var init_resolve_agent_cwd=()=>{};var import__=__toESM(require_commander(),1),{program,createCommand,createArgument,createOption,CommanderError,InvalidArgumentError,InvalidOptionArgumentError,Command,Argument,Option,Help}=import__.default;init_doctor();import{execFileSync as execFileSync2,spawnSync as spawnSync2}from"child_process";import{existsSync as existsSync21,mkdirSync as mkdirSync11,readFileSync as readFileSync14,writeFileSync as writeFileSync8}from"fs";import{homedir as homedir21}from"os";import{dirname as dirname9,join as join26,resolve as resolve4}from"path";var PM2_PROCESS_NAME="Genie",PM2_LOG_PREFIX="genie-serve",LEGACY_PM2_PROCESS_NAMES=["genie-serve"],HARDENED_DEFAULTS={maxRestarts:50,minUptimeMs:1e4,restartDelayMs:4000,expBackoffRestartDelayMs:100,maxMemory:process.env.GENIE_SERVE_MAX_MEMORY||"4G",killTimeoutMs:60000,logDateFormat:"YYYY-MM-DD HH:mm:ss.SSS"};function getLogsDir(){return join26(homedir21(),".genie","logs")}function ok(msg){process.stdout.write(`genie install: ${msg}
@@ -4143,7 +4143,7 @@ Registering in Omni (${omniUrl})...`);let existingId=await findOmniAgent(name);i
4143
4143
  /genie:omni
4144
4144
 
4145
4145
  `);return}await handleOmniRegistration(name,{...options,roles})}function registerAgentRegister(parent){parent.command("register <name>").description("Register an agent locally and auto-register in Omni when configured").requiredOption("--dir <path>","Agent folder (CWD + AGENTS.md)").option("--repo <path>","Default git repo (overridden by team)").option("--prompt-mode <mode>","Prompt mode: append or system","append").option("--model <model>","Default model (sonnet, opus, codex)").option("--roles <roles...>","Built-in roles this agent can orchestrate").option("--global","Write to global directory instead of project").option("--skip-omni","Skip Omni auto-registration (prints a stderr warning explaining the cost)").option("--allow-symlink","Accept a symlinked AGENTS.md (default: rejected \u2014 usually indicates --dir was pointed at the wrong folder)").action(async(name,options)=>{try{await handleAgentRegister(name,options)}catch(error2){let message=error2 instanceof Error?error2.message:String(error2);console.error(`Error: ${message}`),process.exit(1)}})}init_agents();function registerAgentResume(parent){parent.command("resume [name]").description("Resume a suspended/failed agent with its Claude session").option("--all","Resume all eligible agents").option("--no-reset-attempts","Preserve resumeAttempts counter (scheduler auto-resume use)").action(async(name,options)=>{try{await handleWorkerResume(name,{all:options.all,noResetAttempts:options.resetAttempts===!1})}catch(error2){let message=error2 instanceof Error?error2.message:String(error2);console.error(`Error: ${message}`),process.exit(1)}})}init_msg();function registerAgentSend(parent){parent.command("send <body>").description("Send a direct message to an agent (hierarchy-enforced)").option("--to <agent>","Recipient agent name (default: team leader)","team-lead").option("--from <sender>","Sender ID (auto-detected from context)").option("--team <name>","Explicit team context for sender/recipient resolution").option("--broadcast","Send to all direct reports").action(async(body,options)=>{try{let from=options.from??await detectSenderIdentity(options.team);if(options.broadcast){await handleBroadcast2(from,body,options.team);return}await handleDirectMessage(from,options.to,body,options.team)}catch(error2){console.error(`Error: ${error2 instanceof Error?error2.message:String(error2)}`),process.exit(1)}})}async function isTeamLeader(agentName,teamName){try{let{resolveLeaderName:resolveLeaderName2}=await Promise.resolve().then(() => (init_team_manager(),exports_team_manager)),leaderName=await resolveLeaderName2(teamName);return agentName===leaderName}catch{return!1}}async function checkHierarchy(from,to){if(isCliSender(from))return{allowed:!0};if(from===to)return{allowed:!0};try{let registry=await Promise.resolve().then(() => (init_agent_registry(),exports_agent_registry)),team=process.env.GENIE_TEAM,[senderId,recipientId]=await Promise.all([registry.resolveAgentId(from,team),registry.resolveAgentId(to,team)]),sender=senderId?await registry.getAgent(senderId):null,recipient=recipientId?await registry.getAgent(recipientId):null;if(!sender||!recipient)return{allowed:!0};if(recipient.reportsTo===from||recipient.reportsTo===sender.id)return{allowed:!0};if(sender.reportsTo===to||sender.reportsTo===recipient.id)return{allowed:!0};if(sender.reportsTo&&sender.reportsTo===recipient.reportsTo)return{allowed:!0};if(sender.team&&sender.team===recipient.team&&await isTeamLeader(from,sender.team))return{allowed:!0};if(!sender.reportsTo&&sender.team&&sender.team===recipient.team)return{allowed:!0};let manager=sender.reportsTo??"your manager";return{allowed:!1,reason:`Cannot reach "${to}". Escalate to ${manager}.`}}catch{return{allowed:!0}}}async function handleDirectMessage(from,to,body,team){let{allowed,reason}=await checkHierarchy(from,to);if(!allowed)console.error(`Error: ${reason}`),process.exit(1);let{checkSendScope:checkSendScope2}=await Promise.resolve().then(() => (init_msg(),exports_msg)),repoPath=process.cwd(),scopeError=await checkSendScope2(repoPath,from,to);if(scopeError)console.error(`Error: ${scopeError}`),process.exit(1);let taskService=await Promise.resolve().then(() => (init_task_service(),exports_task_service)),mailbox=await Promise.resolve().then(() => (init_mailbox(),exports_mailbox)),registry=await Promise.resolve().then(() => (init_agent_registry(),exports_agent_registry)),teamScope=team??process.env.GENIE_TEAM,toAgentId=await registry.resolveAgentIdStrict(to,teamScope),senderActor={actorType:"local",actorId:from},recipientActor={actorType:"local",actorId:toAgentId},conv=await taskService.findOrCreateConversation({type:"dm",members:[senderActor,recipientActor],createdBy:senderActor});await taskService.addMember(conv.id,senderActor),await taskService.addMember(conv.id,recipientActor),await mailbox.send(repoPath,from,toAgentId,body);let msg=await taskService.sendMessage(conv.id,senderActor,body);try{let{publishSubjectEvent:publishSubjectEvent2}=await Promise.resolve().then(() => (init_runtime_events(),exports_runtime_events));await publishSubjectEvent2(repoPath,`genie.msg.${to}`,{kind:"message",agent:from,direction:"out",peer:to,text:body,data:{messageId:msg.id,conversationId:conv.id,from,to},source:"mailbox"})}catch{}try{let nativeTeams=await Promise.resolve().then(() => (init_claude_native_teams(),exports_claude_native_teams)),nativeMsg={from,text:body,summary:body.length>50?`${body.substring(0,50)}...`:body,timestamp:new Date().toISOString(),color:"blue",read:!1},currentTeam=team??process.env.GENIE_TEAM;if(currentTeam){let nativeName=await nativeTeams.resolveNativeMemberName(currentTeam,to);if(nativeName)await nativeTeams.writeNativeInbox(currentTeam,nativeName,nativeMsg)}}catch{}console.log(`Message sent to "${to}".`),console.log(` ID: ${msg.id}`),console.log(` Conversation: ${conv.id}`)}async function deliverBroadcastToMembers(deps,repoPath,from,teamName,body){let members=await deps.listMembers(teamName)??[],results=[];for(let member of members){if(member===from)continue;try{let r=await deps.sendMessage(repoPath,from,member,body,teamName);results.push({member,delivered:r.delivered,reason:r.reason})}catch(err){results.push({member,delivered:!1,reason:err instanceof Error?err.message:String(err)})}}return results}async function handleBroadcast2(from,body,team){let taskService=await Promise.resolve().then(() => (init_task_service(),exports_task_service)),repoPath=process.cwd(),teamName=team??process.env.GENIE_TEAM;if(!teamName)console.error("Error: Could not detect team. Use --team <name>."),process.exit(1);let senderActor={actorType:"local",actorId:from},conv=await taskService.findOrCreateConversation({type:"group",name:`Team: ${teamName}`,linkedEntity:"team",linkedEntityId:teamName,createdBy:senderActor,members:[senderActor]});await taskService.addMember(conv.id,senderActor);let msg=await taskService.sendMessage(conv.id,senderActor,body);try{let{publishSubjectEvent:publishSubjectEvent2}=await Promise.resolve().then(() => (init_runtime_events(),exports_runtime_events));await publishSubjectEvent2(repoPath,"genie.msg.broadcast",{kind:"message",agent:from,direction:"out",peer:teamName,text:body,data:{messageId:msg.id,conversationId:conv.id,from,team:teamName},source:"mailbox"})}catch{}let{listMembers:listMembers2}=await Promise.resolve().then(() => (init_team_manager(),exports_team_manager)),protocolRouter=await Promise.resolve().then(() => (init_protocol_router(),exports_protocol_router)),fanoutResults=await deliverBroadcastToMembers({listMembers:listMembers2,sendMessage:protocolRouter.sendMessage},repoPath,from,teamName,body);console.log(`Broadcast sent to team "${teamName}".`),console.log(` Message ID: ${msg.id}`),console.log(` Conversation: ${conv.id}`);let deliveredCount=fanoutResults.filter((r)=>r.delivered).length;console.log(` Fan-out: ${deliveredCount}/${fanoutResults.length} members reached`);for(let r of fanoutResults)if(!r.delivered)console.log(` \u26A0 ${r.member}: ${r.reason??"delivery failed"}`)}init_term_format();function printAgentFields(agent){if(console.log(""),console.log(`AGENT: ${agent.customName??agent.role??agent.id}`),console.log("\u2500".repeat(60)),console.log(` ${padRight("ID:",20)} ${agent.id}`),agent.role)console.log(` ${padRight("Role:",20)} ${agent.role}`);if(agent.customName)console.log(` ${padRight("Name:",20)} ${agent.customName}`);if(agent.team)console.log(` ${padRight("Team:",20)} ${agent.team}`);console.log(` ${padRight("Started:",20)} ${agent.startedAt}`)}function printExecutorFields(executor){if(console.log(""),console.log("Current Executor:"),console.log("\u2500".repeat(60)),console.log(` ${padRight("Executor ID:",20)} ${executor.id}`),console.log(` ${padRight("Provider:",20)} ${executor.provider}`),console.log(` ${padRight("Transport:",20)} ${executor.transport}`),console.log(` ${padRight("State:",20)} ${executor.state}`),executor.pid)console.log(` ${padRight("PID:",20)} ${executor.pid}`);if(executor.tmuxSession)console.log(` ${padRight("Tmux Session:",20)} ${executor.tmuxSession}`);if(executor.tmuxPaneId)console.log(` ${padRight("Tmux Pane:",20)} ${executor.tmuxPaneId}`);if(executor.worktree)console.log(` ${padRight("Worktree:",20)} ${executor.worktree}`);if(console.log(` ${padRight("Started:",20)} ${executor.startedAt}`),executor.endedAt)console.log(` ${padRight("Ended:",20)} ${executor.endedAt}`)}async function showAgent(name,json2){let registry=await Promise.resolve().then(() => (init_agent_registry(),exports_agent_registry)),executorRegistry=await Promise.resolve().then(() => (init_executor_registry(),exports_executor_registry)),team=process.env.GENIE_TEAM,id=await registry.resolveAgentId(name,team),agent=id?await registry.getAgent(id):null;if(!agent)console.error(`Agent "${name}" not found.`),process.exit(1);if(json2){let executor=agent.currentExecutorId?await executorRegistry.getExecutor(agent.currentExecutorId):null;console.log(JSON.stringify({agent,executor},null,2));return}if(printAgentFields(agent),agent.currentExecutorId){let executor=await executorRegistry.getExecutor(agent.currentExecutorId);if(executor)printExecutorFields(executor)}else console.log(`
4146
- No active executor.`);console.log("")}function registerAgentShow(parent){parent.command("show <name>").description("Show agent identity and current executor detail").option("--json","Output as JSON").action(async(name,options)=>{try{await showAgent(name,options.json)}catch(error2){let message=error2 instanceof Error?error2.message:String(error2);console.error(`Error: ${message}`),process.exit(1)}})}init_provider_models();init_agents();function parseNumericFlag(flagName){return(value)=>{let n=Number(value);if(Number.isNaN(n))throw Error(`${flagName} must be a number, got: ${value}`);return n}}function registerAgentSpawn(parent){parent.command("spawn <name>").description("Spawn a new agent by name (resolves from directory or built-ins)").option("--provider <provider>","Provider: claude, codex, or claude-sdk").option("--team <team>","Team name").option("--model <model>","Model override (e.g., sonnet, opus)").option("--skill <skill>","Skill to load (optional)").option("--layout <layout>","Layout mode: mosaic (default) or vertical").option("--color <color>","Teammate pane border color").option("--plan-mode","Start teammate in plan mode").option("--permission-mode <mode>","Permission mode (e.g., acceptEdits)").option("--extra-args <args...>","Extra CLI args forwarded to provider").option("--cwd <path>","Working directory for the agent (overrides directory entry)").option("--session <session>","Tmux session name to spawn into").option("--role <role>","Override role name for registration (avoids duplicate guard)").option("--new-window","Create a new tmux window instead of splitting").option("--window <target>","Tmux window to split into (e.g., genie:3)").option("--no-auto-resume","Disable auto-resume on pane death").option("--no-auto-sync","Disable auto-registration from workspace agents directory").option("--prompt <prompt>","Initial prompt (first user message)").option("--sdk-max-turns <n>","SDK: max conversation turns",parseNumericFlag("--sdk-max-turns")).option("--sdk-max-budget <usd>","SDK: max budget in USD",parseNumericFlag("--sdk-max-budget")).option("--sdk-stream","SDK: enable streaming output (shortcut for --stream)").option("--sdk-effort <level>","SDK: reasoning effort level (low, medium, high, max)").option("--sdk-resume <session-id>","SDK: resume a previous session by ID").action(async(name,options)=>{if(options.prompt)options.initialPrompt=options.prompt;if(options.autoSync===!1)options.noAutoSync=!0;try{validateProviderModel({provider:options.provider??null,model:options.model??null})}catch(error2){if(error2 instanceof CrossProviderModelError)console.error(`Error: ${error2.message}`),process.exit(1);throw error2}try{await handleWorkerSpawn(name,options)}catch(error2){let message=error2 instanceof Error?error2.message:String(error2);console.error(`Error: ${message}`),process.exit(1)}})}init_agents();function registerAgentStop(parent){parent.command("stop <name>").description("Stop an agent (preserves session for resume)").action(async(name)=>{try{await handleWorkerStop(name)}catch(error2){let message=error2 instanceof Error?error2.message:String(error2);console.error(`Error: ${message}`),process.exit(1)}})}function registerAgentCommands(program2){let agent=program2.command("agent").description("Agent lifecycle management");registerAgentSpawn(agent),registerAgentStop(agent),registerAgentResume(agent),registerAgentRecover(agent),registerAgentKill(agent),registerAgentList(agent),registerAgentShow(agent),registerAgentObserve(agent),registerAgentAnswer(agent),registerAgentRegister(agent),registerAgentDirectory(agent),registerAgentInbox(agent),registerAgentBrief(agent),registerAgentLog(agent),registerAgentSend(agent),agent.on("command:*",(operands)=>{let cmd=operands[0],available=agent.commands.map((c)=>c.name()).join(", ");agent.error(`Unknown agent command '${cmd}'. Available: ${available}`)})}init_agents();async function handleTuiMode(){let{isServeRunning:isServeRunning2,autoStartServe:autoStartServe2}=await Promise.resolve().then(() => (init_serve(),exports_serve));if(!isServeRunning2())console.log("Starting genie serve..."),await autoStartServe2();let{attachTuiSession:attachTuiSession2}=await Promise.resolve().then(() => (init_tmux2(),exports_tmux2));attachTuiSession2()}async function findTauriBinary(){let{existsSync:existsSync54}=await import("fs"),{join:join66,dirname:dirname24}=await import("path"),{execSync:execSync11}=await import("child_process"),appName="genie-desktop",rootDir=join66(dirname24(new URL(import.meta.url).pathname),"..",".."),localBin=[join66(rootDir,"packages","genie-app","src-tauri","target","release","genie-desktop"),join66(rootDir,"packages","genie-app","src-tauri","target","debug","genie-desktop"),join66(rootDir,"dist","app","genie-desktop"),"/usr/local/bin/genie-desktop"].find((p)=>existsSync54(p));if(localBin)return localBin;try{return execSync11("which genie-desktop",{stdio:"ignore"}),"genie-desktop"}catch{return}}function registerAppCommand(program2){program2.command("app").description("Launch Genie desktop app (backend sidecar + views)").option("--backend-only","Start only the backend sidecar (IPC on stdin/stdout)").option("--tui","Fall back to terminal UI mode").option("--dev","Development mode").action(async(options)=>{if(options.tui){await handleTuiMode();return}if(options.backendOnly){await Promise.resolve().then(() => (init_src_backend(),exports_src_backend));return}let tauriBin=await findTauriBinary();if(tauriBin){console.log("\x1B[35m\u25C6 Genie App\x1B[0m Launching desktop...");let{execFileSync:execFileSync3}=await import("child_process");try{execFileSync3(tauriBin,[],{stdio:"inherit"})}catch{}return}console.log("\x1B[35m\u25C6 Genie App\x1B[0m Starting backend sidecar..."),console.log("\x1B[2mDesktop binary not found \u2014 running in sidecar mode.\x1B[0m"),console.log("\x1B[2mPG bridge + PTY manager + IPC on stdin/stdout\x1B[0m"),console.log(`\x1B[2mUse --tui for terminal UI, or pipe to a frontend shell.\x1B[0m
4146
+ No active executor.`);console.log("")}function registerAgentShow(parent){parent.command("show <name>").description("Show agent identity and current executor detail").option("--json","Output as JSON").action(async(name,options)=>{try{await showAgent(name,options.json)}catch(error2){let message=error2 instanceof Error?error2.message:String(error2);console.error(`Error: ${message}`),process.exit(1)}})}init_provider_models();init_agents();function parseNumericFlag(flagName){return(value)=>{let n=Number(value);if(Number.isNaN(n))throw Error(`${flagName} must be a number, got: ${value}`);return n}}function registerAgentSpawn(parent){parent.command("spawn <name>").description("Spawn a new agent by name (resolves from directory or built-ins)").option("--provider <provider>","Provider: claude, codex, or claude-sdk").option("--team <team>","Team name").option("--model <model>","Model override (e.g., sonnet, opus)").option("--skill <skill>","Skill to load (optional)").option("--layout <layout>","Layout mode: mosaic (default) or vertical").option("--color <color>","Teammate pane border color").option("--plan-mode","Start teammate in plan mode").option("--permission-mode <mode>","Permission mode (e.g., acceptEdits)").option("--extra-args <args...>","Extra CLI args forwarded to provider").option("--cwd <path>","Working directory for the agent (overrides directory entry)").option("--session <session>","Tmux session name to spawn into").option("--role <role>","Override role name for registration (avoids duplicate guard)").option("--new-window","Create a new tmux window instead of splitting").option("--window <target>","Tmux window to split into (e.g., genie:3)").option("--no-auto-resume","Disable auto-resume on pane death").option("--no-auto-sync","Disable auto-registration from workspace agents directory").option("--prompt <prompt>","Initial prompt (first user message)").option("--sdk-max-turns <n>","SDK: max conversation turns",parseNumericFlag("--sdk-max-turns")).option("--sdk-max-budget <usd>","SDK: max budget in USD",parseNumericFlag("--sdk-max-budget")).option("--sdk-stream","SDK: enable streaming output (shortcut for --stream)").option("--sdk-effort <level>","SDK: reasoning effort level (low, medium, high, max)").option("--sdk-resume <session-id>","SDK: resume a previous session by ID").action(async(name,options)=>{if(options.prompt)options.initialPrompt=options.prompt;if(options.autoSync===!1)options.noAutoSync=!0;try{validateProviderModel({provider:options.provider??null,model:options.model??null})}catch(error2){if(error2 instanceof CrossProviderModelError)console.error(`Error: ${error2.message}`),process.exit(1);throw error2}try{await handleWorkerSpawn(name,options)}catch(error2){let message=error2 instanceof Error?error2.message:String(error2);console.error(`Error: ${message}`),process.exit(1)}})}init_agents();function registerAgentStop(parent){parent.command("stop <name>").description("Stop an agent (preserves session for resume)").action(async(name)=>{try{await handleWorkerStop(name)}catch(error2){let message=error2 instanceof Error?error2.message:String(error2);console.error(`Error: ${message}`),process.exit(1)}})}function registerAgentCommands(program2){let agent=program2.command("agent").description("Agent lifecycle management");registerAgentSpawn(agent),registerAgentStop(agent),registerAgentResume(agent),registerAgentRecover(agent),registerAgentKill(agent),registerAgentList(agent),registerAgentShow(agent),registerAgentObserve(agent),registerAgentAnswer(agent),registerAgentRegister(agent),registerAgentDirectory(agent),registerAgentInbox(agent),registerAgentBrief(agent),registerAgentLog(agent),registerAgentSend(agent),agent.on("command:*",(operands)=>{let cmd=operands[0],available=agent.commands.map((c)=>c.name()).join(", ");agent.error(`Unknown agent command '${cmd}'. Available: ${available}`)})}init_agents();async function handleTuiMode(){let{isServeRunning:isServeRunning2,autoStartServe:autoStartServe2,isTuiSessionReady:isTuiSessionReady2,ensureTuiSession:ensureTuiSession2}=await Promise.resolve().then(() => (init_serve(),exports_serve));if(!isServeRunning2())console.log("Starting genie serve..."),await autoStartServe2();if(!isTuiSessionReady2())ensureTuiSession2();let{attachTuiSession:attachTuiSession2}=await Promise.resolve().then(() => (init_tmux2(),exports_tmux2));attachTuiSession2()}async function findTauriBinary(){let{existsSync:existsSync54}=await import("fs"),{join:join66,dirname:dirname24}=await import("path"),{execSync:execSync11}=await import("child_process"),appName="genie-desktop",rootDir=join66(dirname24(new URL(import.meta.url).pathname),"..",".."),localBin=[join66(rootDir,"packages","genie-app","src-tauri","target","release","genie-desktop"),join66(rootDir,"packages","genie-app","src-tauri","target","debug","genie-desktop"),join66(rootDir,"dist","app","genie-desktop"),"/usr/local/bin/genie-desktop"].find((p)=>existsSync54(p));if(localBin)return localBin;try{return execSync11("which genie-desktop",{stdio:"ignore"}),"genie-desktop"}catch{return}}function registerAppCommand(program2){program2.command("app").description("Launch Genie desktop app (backend sidecar + views)").option("--backend-only","Start only the backend sidecar (IPC on stdin/stdout)").option("--tui","Fall back to terminal UI mode").option("--dev","Development mode").action(async(options)=>{if(options.tui){await handleTuiMode();return}if(options.backendOnly){await Promise.resolve().then(() => (init_src_backend(),exports_src_backend));return}let tauriBin=await findTauriBinary();if(tauriBin){console.log("\x1B[35m\u25C6 Genie App\x1B[0m Launching desktop...");let{execFileSync:execFileSync3}=await import("child_process");try{execFileSync3(tauriBin,[],{stdio:"inherit"})}catch{}return}console.log("\x1B[35m\u25C6 Genie App\x1B[0m Starting backend sidecar..."),console.log("\x1B[2mDesktop binary not found \u2014 running in sidecar mode.\x1B[0m"),console.log("\x1B[2mPG bridge + PTY manager + IPC on stdin/stdout\x1B[0m"),console.log(`\x1B[2mUse --tui for terminal UI, or pipe to a frontend shell.\x1B[0m
4147
4147
  `),await Promise.resolve().then(() => (init_src_backend(),exports_src_backend))})}init_claude_sdk_remote_approval();init_workspace();async function handleRequest(options){let ws=findWorkspace(),permissions=ws?getWorkspaceConfig(ws.root).permissions:void 0,timeoutSec=options.timeout?Number(options.timeout):permissions?.timeout??300,defaultAction=permissions?.defaultAction??"deny",timeoutAt=new Date(Date.now()+timeoutSec*1000),approvalId=await insertApproval(`cli-${process.pid}`,options.agent,options.tool,options.input,timeoutAt);if(console.log(`Approval created: ${approvalId}`),options.wait){console.log(`Waiting for resolution (timeout: ${timeoutSec}s, default: ${defaultAction})...`);let decision=await waitForResolution(approvalId,timeoutAt,defaultAction);if(console.log(`Decision: ${decision}`),decision==="deny")process.exit(1)}}async function handleResolve(id,options){if(options.decision!=="allow"&&options.decision!=="deny")console.error('Error: --decision must be "allow" or "deny"'),process.exit(1);let actor=process.env.GENIE_AGENT_NAME||options.by;if(await resolveApproval(id,options.decision,actor))console.log(`Approval ${id} resolved: ${options.decision} by ${options.by}`);else console.error(`Error: Approval ${id} not found or already resolved`),process.exit(1)}async function handleList(options){let rows=await listPendingApprovals(options.agent);if(options.json){console.log(JSON.stringify(rows,null,2));return}if(rows.length===0){console.log("No pending approvals.");return}console.log(` ${"ID".padEnd(38)} ${"AGENT".padEnd(20)} ${"TOOL".padEnd(15)} TIMEOUT`),console.log(` ${"\u2500".repeat(85)}`);for(let row2 of rows){let timeout=new Date(row2.timeout_at).toLocaleTimeString();console.log(` ${String(row2.id).padEnd(38)} ${String(row2.agent_name).padEnd(20)} ${String(row2.tool_name).padEnd(15)} ${timeout}`)}console.log(`
4148
4148
  ${rows.length} pending approval${rows.length===1?"":"s"}`)}function registerApprovalCommands(program2){let approval=program2.command("approval").description("Remote approval queue management");approval.command("request").description("Create an approval request (for tmux-path agents)").requiredOption("--tool <name>","Tool name requiring approval").requiredOption("--input <preview>","Tool input preview text").requiredOption("--agent <name>","Agent name requesting approval").option("--wait","Block until the approval is resolved").option("--timeout <seconds>","Timeout in seconds (overrides workspace config)").action(async(options)=>{try{await handleRequest(options)}catch(error2){console.error(`Error: ${error2 instanceof Error?error2.message:String(error2)}`),process.exit(1)}}),approval.command("resolve <id>").description("Resolve a pending approval").requiredOption("--decision <decision>","Decision: allow or deny").option("--by <actor>",'Display label for decision maker (defaults to GENIE_AGENT_NAME or "cli")',"cli").action(async(id,options)=>{try{await handleResolve(id,options)}catch(error2){console.error(`Error: ${error2 instanceof Error?error2.message:String(error2)}`),process.exit(1)}}),approval.command("list").description("List pending approvals").option("--agent <name>","Filter by agent name").option("--json","Output as JSON").action(async(options)=>{try{await handleList(options)}catch(error2){console.error(`Error: ${error2 instanceof Error?error2.message:String(error2)}`),process.exit(1)}})}init_audit();init_db();var V2_SELECT=`
4149
4149
  id,