@directive-run/cli 1.3.0 → 1.5.0
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/README.md +69 -0
- package/dist/cli.js +206 -82
- package/dist/cli.js.map +1 -1
- package/dist/index.cjs +7 -7
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +7 -7
- package/dist/index.js.map +1 -1
- package/package.json +13 -4
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/lib/constants.ts","../src/lib/detect.ts","../src/lib/merge.ts","../src/lib/monorepo.ts","../src/templates/claude.ts","../src/templates/cursor.ts","../src/templates/copilot.ts","../src/templates/cline.ts","../src/templates/windsurf.ts","../src/templates/index.ts","../src/commands/ai-rules.ts","../src/commands/init.ts","../src/commands/new.ts","../src/lib/loader.ts","../src/commands/inspect.ts","../src/commands/explain.ts","../src/commands/graph.ts","../src/commands/doctor.ts","../src/commands/examples.ts","../src/cli.ts"],"names":["CLI_NAME","SECTION_START","SECTION_END","TOOL_SIGNALS","detectTools","rootDir","detected","tool","signal","existsSync","join","getToolConfig","id","t","getAllToolIds","mergeSection","existingContent","newSection","startIdx","endIdx","wrapped","separator","hasDirectiveSection","content","MONOREPO_SIGNALS","detectMonorepo","startDir","dir","resolve","dirname","pkgPath","readFileSync","generateClaudeRules","corePatterns","getKnowledge","antiPatterns","naming","schemaTypes","generateCursorRules","generateCopilotRules","generateClineRules","generateWindsurfRules","generators","getTemplate","toolId","generator","parseArgs","args","opts","i","val","aiRulesCommand","pc","mono","targetDir","placement","relative","selectedTools","config","choices","s","filePath","fileExists","writeFile","action","mkdirSync","writeFileSync","aiRulesUpdateCommand","ruleFiles","updated","file","existing","newContent","merged","aiRulesCheckCommand","checked","stale","freshContent","detectPackageManager","installCmd","pm","pkg","getTemplates","moduleName","generateCounterModule","generateCounterMain","generateAuthModule","generateAuthMain","generateAIModule","generateAIMain","name","toCamelCase","camelName","_","c","initCommand","h","nameResult","templateId","templates","choice","template","skipped","rel","depsCmd","ALL_SECTIONS","generateModule","sections","hasConstraints","hasResolvers","code","generateOrchestrator","findModulesDir","newModuleCommand","newOrchestratorCommand","loadSystem","resolved","mod","isSystem","key","err","obj","sys","arg","formatFacts","facts","lines","entries","value","formatted","formatValue","formatConstraints","constraints","status","hits","formatResolverDefs","resolverDefs","resolvers","def","stateStr","formatResolverState","formatUnmet","unmet","u","formatInflight","inflight","now","inf","elapsed","state","error","duration","dur","findWarnings","inspection","warnings","r","inspectCommand","system","factsObj","w","requirementId","explainCommand","explanation","resolverEntries","formatState","payload","resolverStatus","renderAsciiGraph","constraintMap","entry","resolversByType","info","reqType","usedResolvers","renderHtmlGraph","nodes","edges","factKeys","reqTypes","reqIdx","nodeMap","n","svgWidth","maxY","edgeSvg","e","from","to","nodeSvg","escapeHtml","headerSvg","text","graphCommand","html","outputPath","execFile","openCmd","checkCoreInstalled","deps","checkVersionCompatibility","directivePackages","k","checkTypeScript","tsconfigPath","stripped","co","issues","checkDuplicateInstances","nodeModules","duplicates","scopeDir","packages","readdirSync","nestedCore","checkAIRulesFreshness","found","doctorCommand","checks","failures","check","icon","CATEGORIES","getCategory","cat","names","getDescription","line","trimmed","jsdocMatch","examplesListCommand","filter","examples","getAllExamples","byCategory","categoryOrder","sortedCategories","a","b","items","item","desc","examplesCopyCommand","dest","getExample","rewritten","HELP","main","fileURLToPath","__dirname","command","subcommand"],"mappings":";uQAAO,IAAMA,CAAAA,CAAW,YAGjB,IAAMC,CAAAA,CAAgB,2BAChBC,CAAAA,CAAc,wBAAA,CCK3B,IAAMC,CAAAA,CAKD,CACH,CACE,EAAA,CAAI,QAAA,CACJ,IAAA,CAAM,QAAA,CACN,OAAA,CAAS,CAAC,UAAW,cAAc,CAAA,CACnC,WAAY,cACd,CAAA,CACA,CACE,EAAA,CAAI,QAAA,CACJ,KAAM,aAAA,CACN,OAAA,CAAS,CAAC,SAAS,CAAA,CACnB,WAAY,mBACd,CAAA,CACA,CACE,EAAA,CAAI,SAAA,CACJ,IAAA,CAAM,gBAAA,CACN,OAAA,CAAS,CAAC,SAAS,CAAA,CACnB,UAAA,CAAY,iCACd,CAAA,CACA,CACE,GAAI,UAAA,CACJ,IAAA,CAAM,UAAA,CACN,OAAA,CAAS,CAAC,gBAAgB,EAC1B,UAAA,CAAY,gBACd,EACA,CACE,EAAA,CAAI,QACJ,IAAA,CAAM,OAAA,CACN,OAAA,CAAS,CAAC,aAAa,CAAA,CACvB,WAAY,aACd,CACF,EAEO,SAASC,EAAAA,CAAYC,EAAiC,CAC3D,IAAMC,EAA2B,EAAC,CAElC,QAAWC,CAAAA,IAAQJ,CAAAA,CACCI,EAAK,OAAA,CAAQ,IAAA,CAAMC,GACnCC,UAAAA,CAAWC,IAAAA,CAAKL,CAAAA,CAASG,CAAM,CAAC,CAClC,GAGEF,CAAAA,CAAS,IAAA,CAAK,CACZ,IAAA,CAAMC,CAAAA,CAAK,KACX,EAAA,CAAIA,CAAAA,CAAK,EAAA,CACT,UAAA,CAAYG,IAAAA,CAAKL,CAAAA,CAASE,EAAK,UAAU,CAC3C,CAAC,CAAA,CAIL,OAAOD,CACT,CAEO,SAASK,CAAAA,CAAcC,CAAAA,CAAwB,CACpD,IAAML,EAAOJ,CAAAA,CAAa,IAAA,CAAMU,GAAMA,CAAAA,CAAE,EAAA,GAAOD,CAAE,CAAA,CACjD,GAAI,CAACL,CAAAA,CACH,MAAM,IAAI,MAAM,CAAA,cAAA,EAAiBK,CAAE,EAAE,CAAA,CAGvC,OAAOL,CACT,CAEO,SAASO,EAAAA,EAAsC,CACpD,OAAOX,CAAAA,CAAa,IAAKU,CAAAA,EAAMA,CAAAA,CAAE,EAAE,CACrC,CCxEO,SAASE,CAAAA,CACdC,CAAAA,CACAC,CAAAA,CACQ,CACR,IAAMC,CAAAA,CAAWF,EAAgB,OAAA,CAAQf,CAAa,EAChDkB,CAAAA,CAASH,CAAAA,CAAgB,QAAQd,CAAW,CAAA,CAE5CkB,CAAAA,CAAU,CAAA,EAAGnB,CAAa;AAAA,EAAKgB,CAAU;AAAA,EAAKf,CAAW,CAAA,CAAA,CAE/D,GAAIgB,CAAAA,GAAa,EAAA,EAAMC,IAAW,EAAA,EAAMA,CAAAA,CAASD,CAAAA,CAC/C,OACEF,CAAAA,CAAgB,KAAA,CAAM,EAAGE,CAAQ,CAAA,CACjCE,CAAAA,CACAJ,CAAAA,CAAgB,KAAA,CAAMG,CAAAA,CAASjB,CAAAA,CAAY,MAAM,CAAA,CAIrD,IAAMmB,CAAAA,CAAYL,CAAAA,CAAgB,QAAA,CAAS;AAAA,CAAI,CAAA,CAAI;AAAA,CAAA,CAAO;;AAAA,CAAA,CAE1D,OAAOA,CAAAA,CAAkBK,CAAAA,CAAYD,CAAAA,CAAU;AAAA,CACjD,CAKO,SAASE,CAAAA,CAAoBC,EAA0B,CAC5D,OACEA,EAAQ,QAAA,CAAStB,CAAa,CAAA,EAAKsB,CAAAA,CAAQ,SAASrB,CAAW,CAEnE,CC1BA,IAAMsB,EAAAA,CAAmB,CACvB,CAAE,KAAM,qBAAA,CAAuB,IAAA,CAAM,MAAgB,CAAA,CACrD,CAAE,KAAM,YAAA,CAAc,IAAA,CAAM,OAAiB,CAC/C,EAEO,SAASC,EAAAA,CAAeC,EAAgC,CAC7D,IAAIC,EAAMC,OAAAA,CAAQF,CAAQ,CAAA,CAE1B,KAAOC,IAAQE,OAAAA,CAAQF,CAAG,GAAG,CAC3B,IAAA,IAAWnB,KAAUgB,EAAAA,CACnB,GAAIf,UAAAA,CAAWC,IAAAA,CAAKiB,EAAKnB,CAAAA,CAAO,IAAI,CAAC,CAAA,CACnC,OAAO,CAAE,UAAA,CAAY,IAAA,CAAM,OAAA,CAASmB,CAAAA,CAAK,KAAMnB,CAAAA,CAAO,IAAK,EAI/D,IAAMsB,CAAAA,CAAUpB,KAAKiB,CAAAA,CAAK,cAAc,CAAA,CACxC,GAAIlB,WAAWqB,CAAO,CAAA,CACpB,GAAI,CAEF,GADY,KAAK,KAAA,CAAMC,YAAAA,CAAaD,CAAAA,CAAS,OAAO,CAAC,CAAA,CAC7C,UAAA,CAAY,CAClB,IAAMvB,CAAAA,CAAOE,WAAWC,IAAAA,CAAKiB,CAAAA,CAAK,WAAW,CAAC,EACzC,MAAA,CACA,KAAA,CAEL,OAAO,CAAE,UAAA,CAAY,GAAM,OAAA,CAASA,CAAAA,CAAK,IAAA,CAAApB,CAAK,CAChD,CACF,CAAA,KAAQ,CAER,CAGFoB,CAAAA,CAAME,QAAQF,CAAG,EACnB,CAEA,OAAO,CAAE,UAAA,CAAY,KAAA,CAAO,QAASD,CAAS,CAChD,CCrCO,SAASM,IAA8B,CAE5C,IAAMC,EAAeC,YAAAA,CAAa,eAAe,EAC3CC,CAAAA,CAAeD,YAAAA,CAAa,eAAe,CAAA,CAC3CE,CAAAA,CAASF,aAAa,QAAQ,CAAA,CAC9BG,EAAcH,YAAAA,CAAa,cAAc,EAE/C,OAAO,CAAA;;AAAA;AAAA;AAAA;;AAAA;;AAAA,EAQPD,CAAY;;AAAA;;AAAA;;AAAA,EAMZE,CAAY;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA,EA2BZC,CAAM;;AAAA;;AAAA;;AAAA,EAMNC,CAAW;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;;AAAA;AAAA;;AAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA,CA8Kb,CCvOO,SAASC,CAAAA,EAA8B,CAC5C,OAAO,65GAuFT,CCtFO,SAASC,CAAAA,EAA+B,CA2D7C,OA1DaD,CAAAA,GAGa,y2BAAA,CAiBN;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA,CAeH;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAwBnB,CC5DO,SAASE,EAAAA,EAA6B,CAC3C,OAAOD,GACT,CCFO,SAASE,EAAAA,EAAgC,CAC9C,OAAOF,GACT,CCAA,IAAMG,EAAAA,CAAuD,CAC3D,MAAA,CAAQJ,CAAAA,CACR,MAAA,CAAQN,EAAAA,CACR,OAAA,CAASO,CAAAA,CACT,QAAA,CAAUE,EAAAA,CACV,KAAA,CAAOD,EACT,CAAA,CAEO,SAASG,CAAAA,CAAYC,CAAAA,CAAoC,CAC9D,IAAMC,EAAYH,EAAAA,CAAWE,CAAM,CAAA,CACnC,GAAI,CAACC,CAAAA,CACH,MAAM,IAAI,KAAA,CAAM,CAAA,sBAAA,EAAyBD,CAAM,CAAA,CAAE,CAAA,CAGnD,OAAOC,CAAAA,EACT,CCDA,SAASC,EAAAA,CAAUC,CAAAA,CAAyB,CAC1C,IAAMC,CAAAA,CAAgB,CACpB,KAAA,CAAO,KAAA,CACP,KAAA,CAAO,KAAA,CACP,MAAO,EAAC,CACR,GAAA,CAAK,OAAA,CAAQ,GAAA,EACf,EAEA,IAAA,IAASC,CAAAA,CAAI,CAAA,CAAGA,CAAAA,CAAIF,CAAAA,CAAK,MAAA,CAAQE,CAAAA,EAAAA,CAG/B,OAFYF,CAAAA,CAAKE,CAAC,CAAA,EAGhB,KAAK,SAAA,CACHD,EAAK,KAAA,CAAQ,IAAA,CACb,MACF,KAAK,SAAA,CACHA,CAAAA,CAAK,MAAQ,IAAA,CACb,MACF,KAAK,QAAA,CAAU,CACb,IAAME,EAAMH,CAAAA,CAAK,EAAEE,CAAC,CAAA,CAChBC,CAAAA,EACFF,CAAAA,CAAK,KAAA,CAAM,IAAA,CAAKE,CAAG,CAAA,CAErB,KACF,CACA,KAAK,OAAA,CAAS,CACZ,IAAMA,CAAAA,CAAMH,CAAAA,CAAK,EAAEE,CAAC,CAAA,CAChBC,IACFF,CAAAA,CAAK,GAAA,CAAME,CAAAA,CAAAA,CAEb,KACF,CACF,CAGF,OAAOF,CACT,CAEA,eAAsBG,EAAAA,CAAeJ,CAAAA,CAAgB,CACnD,IAAMC,CAAAA,CAAOF,EAAAA,CAAUC,CAAI,CAAA,CAEzB,CAAA,CAAA,KAAA,CAAMK,CAAAA,CAAG,MAAA,CAAOA,EAAG,KAAA,CAAM,sBAAsB,CAAC,CAAC,CAAA,CAGnD,IAAMC,EAAO5B,EAAAA,CAAeuB,CAAAA,CAAK,GAAG,CAAA,CAChCM,CAAAA,CAAYN,CAAAA,CAAK,IAErB,GAAIK,CAAAA,CAAK,UAAA,EAAcA,CAAAA,CAAK,OAAA,GAAYL,CAAAA,CAAK,GAAA,CAAK,CAChD,IAAMO,CAAAA,CAAY,MAAQ,CAAA,CAAA,MAAA,CAAO,CAC/B,OAAA,CAAS,yDACT,OAAA,CAAS,CACP,CACE,KAAA,CAAO,MAAA,CACP,KAAA,CAAO,kBAAkBC,QAAAA,CAASR,CAAAA,CAAK,GAAA,CAAKK,CAAAA,CAAK,OAAO,CAAA,EAAK,GAAG,CAAA,CAAA,CAAA,CAChE,IAAA,CAAM,aACR,CAAA,CACA,CACE,KAAA,CAAO,WAAA,CACP,KAAA,CAAO,CAAA,mBAAA,EAAsBG,QAAAA,CAASH,CAAAA,CAAK,OAAA,CAASL,CAAAA,CAAK,GAAG,CAAC,CAAA,CAAA,CAC/D,CACF,CACF,CAAC,CAAA,CAEK,CAAA,CAAA,QAAA,CAASO,CAAS,CAAA,GACpB,CAAA,CAAA,MAAA,CAAO,YAAY,CAAA,CACrB,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,CAAA,CAGZA,CAAAA,GAAc,MAAA,GAChBD,CAAAA,CAAYD,CAAAA,CAAK,OAAA,EAErB,CAGA,IAAII,CAAAA,CAEJ,GAAIT,CAAAA,CAAK,KAAA,CAAM,MAAA,CAAS,CAAA,CACtBS,EAAgBT,CAAAA,CAAK,KAAA,CAAM,GAAA,CAAKpC,CAAAA,EAAO,CACrC,IAAM8C,EAAS/C,CAAAA,CAAcC,CAAwB,CAAA,CAErD,OAAO,CACL,IAAA,CAAM8C,EAAO,IAAA,CACb,EAAA,CAAIA,CAAAA,CAAO,EAAA,CACX,UAAA,CAAYhD,IAAAA,CAAK4C,CAAAA,CAAWI,CAAAA,CAAO,UAAU,CAC/C,CACF,CAAC,CAAA,CAAA,KACI,CACL,IAAMpD,CAAAA,CAAWF,EAAAA,CAAYkD,CAAS,CAAA,CAEtC,GAAIhD,CAAAA,CAAS,OAAS,CAAA,CAAG,CACvB,IAAMqD,CAAAA,CAAU,MAAQ,CAAA,CAAA,WAAA,CAAY,CAClC,OAAA,CAAS,CAAA,SAAA,EAAYrD,CAAAA,CAAS,MAAM,CAAA,8CAAA,CAAA,CACpC,OAAA,CAASA,CAAAA,CAAS,GAAA,CAAKO,CAAAA,GAAO,CAC5B,KAAA,CAAOA,CAAAA,CAAE,EAAA,CACT,KAAA,CAAOA,EAAE,IAAA,CACT,IAAA,CAAM2C,QAAAA,CAASF,CAAAA,CAAWzC,CAAAA,CAAE,UAAU,CACxC,CAAA,CAAE,CAAA,CACF,aAAA,CAAeP,CAAAA,CAAS,GAAA,CAAKO,CAAAA,EAAMA,EAAE,EAAE,CAAA,CACvC,QAAA,CAAU,IACZ,CAAC,CAAA,CAEK,CAAA,CAAA,QAAA,CAAS8C,CAAO,CAAA,GAClB,CAAA,CAAA,MAAA,CAAO,YAAY,CAAA,CACrB,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,CAAA,CAGhBF,CAAAA,CAAiBE,CAAAA,CAAiC,GAAA,CAAK/C,CAAAA,EAAO,CAC5D,IAAM8C,CAAAA,CAAS/C,CAAAA,CAAcC,CAAE,CAAA,CAE/B,OAAO,CACL,KAAM8C,CAAAA,CAAO,IAAA,CACb,EAAA,CAAIA,CAAAA,CAAO,EAAA,CACX,UAAA,CAAYhD,IAAAA,CAAK4C,CAAAA,CAAWI,CAAAA,CAAO,UAAU,CAC/C,CACF,CAAC,EACH,MAAO,CACL,IAAMC,CAAAA,CAAU,MAAQ,CAAA,CAAA,WAAA,CAAY,CAClC,QACE,+CAAA,CACF,OAAA,CAAS7C,EAAAA,EAAc,CAAE,GAAA,CAAKF,CAAAA,EAAO,CACnC,IAAM8C,CAAAA,CAAS/C,CAAAA,CAAcC,CAAE,CAAA,CAE/B,OAAO,CAAE,KAAA,CAAOA,CAAAA,CAAI,KAAA,CAAO8C,CAAAA,CAAO,IAAK,CACzC,CAAC,EACD,QAAA,CAAU,IACZ,CAAC,CAAA,CAEK,CAAA,CAAA,QAAA,CAASC,CAAO,IAClB,CAAA,CAAA,MAAA,CAAO,YAAY,CAAA,CACrB,OAAA,CAAQ,IAAA,CAAK,CAAC,GAGhBF,CAAAA,CAAiBE,CAAAA,CAAiC,GAAA,CAAK/C,CAAAA,EAAO,CAC5D,IAAM8C,CAAAA,CAAS/C,CAAAA,CAAcC,CAAE,CAAA,CAE/B,OAAO,CACL,IAAA,CAAM8C,CAAAA,CAAO,KACb,EAAA,CAAIA,CAAAA,CAAO,EAAA,CACX,UAAA,CAAYhD,IAAAA,CAAK4C,CAAAA,CAAWI,EAAO,UAAU,CAC/C,CACF,CAAC,EACH,CACF,CAEID,CAAAA,CAAc,MAAA,GAAW,CAAA,GACzB,CAAA,CAAA,MAAA,CAAO,oBAAoB,CAAA,CAC7B,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,CAAA,CAIhB,IAAMG,CAAAA,CAAM,CAAA,CAAA,OAAA,EAAQ,CAEpB,QAAWrD,CAAAA,IAAQkD,CAAAA,CAAe,CAChCG,CAAAA,CAAE,KAAA,CAAM,CAAA,WAAA,EAAcrD,CAAAA,CAAK,IAAI,CAAA,SAAA,CAAW,CAAA,CAE1C,IAAMgB,CAAAA,CAAUoB,CAAAA,CAAYpC,CAAAA,CAAK,EAAE,CAAA,CAC7BsD,CAAAA,CAAWtD,CAAAA,CAAK,UAAA,CAChBuD,CAAAA,CAAarD,UAAAA,CAAWoD,CAAQ,CAAA,CAItC,GAFAD,CAAAA,CAAE,IAAA,CAAK,CAAA,UAAA,EAAarD,CAAAA,CAAK,IAAI,SAAS,CAAA,CAElCuD,CAAAA,EAAc,CAACd,CAAAA,CAAK,KAAA,CAAO,CAC7B,IAAMhC,CAAAA,CAAkBe,YAAAA,CAAa8B,CAAAA,CAAU,OAAO,CAAA,CAEtD,GAAIb,EAAK,KAAA,CAAO,CACde,CAAAA,CAAUF,CAAAA,CAAU9C,CAAAA,CAAaC,CAAAA,CAAiBO,CAAO,CAAC,CAAA,CACxD,CAAA,CAAA,GAAA,CAAI,OAAA,CACJ,CAAA,EAAG6B,CAAAA,CAAG,KAAA,CAAM,QAAQ,CAAC,CAAA,wBAAA,EAA2BA,CAAAA,CAAG,GAAA,CAAII,QAAAA,CAASF,CAAAA,CAAWO,CAAQ,CAAC,CAAC,CAAA,CACvF,CAAA,CACA,QACF,CAEA,GAAIvC,CAAAA,CAAoBN,CAAe,CAAA,CAAG,CACxC,IAAMgD,CAAAA,CAAS,MAAQ,CAAA,CAAA,MAAA,CAAO,CAC5B,OAAA,CAAS,CAAA,EAAGR,QAAAA,CAASF,CAAAA,CAAWO,CAAQ,CAAC,CAAA,oDAAA,CAAA,CACzC,OAAA,CAAS,CACP,CACE,KAAA,CAAO,OAAA,CACP,MAAO,+BAAA,CACP,IAAA,CAAM,aACR,CAAA,CACA,CAAE,KAAA,CAAO,YAAa,KAAA,CAAO,uBAAwB,CAAA,CACrD,CAAE,KAAA,CAAO,MAAA,CAAQ,KAAA,CAAO,gBAAiB,CAC3C,CACF,CAAC,CAAA,CAEK,CAAA,CAAA,QAAA,CAASG,CAAM,IACjB,CAAA,CAAA,MAAA,CAAO,YAAY,CAAA,CACrB,OAAA,CAAQ,IAAA,CAAK,CAAC,GAGZA,CAAAA,GAAW,OAAA,EACbD,CAAAA,CAAUF,CAAAA,CAAU9C,CAAAA,CAAaC,CAAAA,CAAiBO,CAAO,CAAC,CAAA,CACxD,CAAA,CAAA,GAAA,CAAI,OAAA,CACJ,CAAA,EAAG6B,CAAAA,CAAG,KAAA,CAAM,SAAS,CAAC,CAAA,CAAA,EAAIA,CAAAA,CAAG,GAAA,CAAII,QAAAA,CAASF,CAAAA,CAAWO,CAAQ,CAAC,CAAC,CAAA,CACjE,CAAA,EACSG,CAAAA,GAAW,WAAA,EACpBD,EAAUF,CAAAA,CAAUtC,CAAO,CAAA,CACzB,CAAA,CAAA,GAAA,CAAI,OAAA,CACJ,CAAA,EAAG6B,EAAG,KAAA,CAAM,OAAO,CAAC,CAAA,CAAA,EAAIA,CAAAA,CAAG,GAAA,CAAII,QAAAA,CAASF,CAAAA,CAAWO,CAAQ,CAAC,CAAC,CAAA,CAC/D,CAAA,EAEE,CAAA,CAAA,GAAA,CAAI,KAAK,CAAA,QAAA,EAAWT,CAAAA,CAAG,GAAA,CAAII,QAAAA,CAASF,CAAAA,CAAWO,CAAQ,CAAC,CAAC,CAAA,CAAE,EAEjE,CAAA,KAAO,CACL,IAAMG,EAAS,MAAQ,CAAA,CAAA,MAAA,CAAO,CAC5B,OAAA,CAAS,CAAA,EAAGR,QAAAA,CAASF,CAAAA,CAAWO,CAAQ,CAAC,CAAA,mCAAA,CAAA,CACzC,OAAA,CAAS,CACP,CACE,KAAA,CAAO,SACP,KAAA,CAAO,0BAAA,CACP,IAAA,CAAM,4BACR,CAAA,CACA,CAAE,MAAO,WAAA,CAAa,KAAA,CAAO,uBAAwB,CAAA,CACrD,CAAE,KAAA,CAAO,OAAQ,KAAA,CAAO,gBAAiB,CAC3C,CACF,CAAC,CAAA,CAEK,CAAA,CAAA,QAAA,CAASG,CAAM,CAAA,GACjB,CAAA,CAAA,MAAA,CAAO,YAAY,CAAA,CACrB,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,CAAA,CAGZA,CAAAA,GAAW,QAAA,EACbD,CAAAA,CAAUF,CAAAA,CAAU9C,CAAAA,CAAaC,EAAiBO,CAAO,CAAC,CAAA,CACxD,CAAA,CAAA,GAAA,CAAI,OAAA,CACJ,CAAA,EAAG6B,EAAG,KAAA,CAAM,UAAU,CAAC,CAAA,IAAA,EAAOA,CAAAA,CAAG,GAAA,CAAII,QAAAA,CAASF,CAAAA,CAAWO,CAAQ,CAAC,CAAC,CAAA,CACrE,CAAA,EACSG,CAAAA,GAAW,aACpBD,CAAAA,CAAUF,CAAAA,CAAUtC,CAAO,CAAA,CACzB,CAAA,CAAA,GAAA,CAAI,OAAA,CACJ,GAAG6B,CAAAA,CAAG,KAAA,CAAM,OAAO,CAAC,CAAA,CAAA,EAAIA,CAAAA,CAAG,IAAII,QAAAA,CAASF,CAAAA,CAAWO,CAAQ,CAAC,CAAC,CAAA,CAC/D,CAAA,EAEE,CAAA,CAAA,GAAA,CAAI,IAAA,CAAK,CAAA,QAAA,EAAWT,CAAAA,CAAG,GAAA,CAAII,QAAAA,CAASF,CAAAA,CAAWO,CAAQ,CAAC,CAAC,CAAA,CAAE,EAEjE,CACF,CAAA,KACEE,EAAUF,CAAAA,CAAUtC,CAAO,CAAA,CACzB,CAAA,CAAA,GAAA,CAAI,OAAA,CACJ,CAAA,EAAG6B,EAAG,KAAA,CAAM,SAAS,CAAC,CAAA,CAAA,EAAIA,CAAAA,CAAG,GAAA,CAAII,QAAAA,CAASF,CAAAA,CAAWO,CAAQ,CAAC,CAAC,CAAA,CACjE,EAEJ,CAEE,QACA,CAAA,UAAA,EAAaT,CAAAA,CAAG,IAAA,CAAK,CAAA,EAAGpD,CAAQ,CAAA,sBAAA,CAAwB,CAAC,CAAA,mBAAA,CAC3D,EACF,CAEA,SAAS+D,CAAAA,CAAUF,CAAAA,CAAkBtC,EAAiB,CACpD,IAAMI,CAAAA,CAAME,OAAAA,CAAQgC,CAAQ,CAAA,CACvBpD,UAAAA,CAAWkB,CAAG,CAAA,EACjBsC,SAAAA,CAAUtC,CAAAA,CAAK,CAAE,SAAA,CAAW,IAAK,CAAC,CAAA,CAGpCuC,aAAAA,CAAcL,CAAAA,CAAUtC,CAAAA,CAAS,OAAO,EAC1C,CAMA,eAAsB4C,EAAAA,CAAqBpB,CAAAA,CAAgB,CAEzD,IAAMO,CAAAA,CADOR,GAAUC,CAAI,CAAA,CACJ,GAAA,CAEjBqB,CAAAA,CAA6D,CACjE,CAAE,EAAA,CAAI,QAAA,CAAU,IAAA,CAAM1D,IAAAA,CAAK4C,CAAAA,CAAW,cAAc,CAAE,CAAA,CACtD,CAAE,EAAA,CAAI,QAAA,CAAU,IAAA,CAAM5C,IAAAA,CAAK4C,CAAAA,CAAW,mBAAmB,CAAE,CAAA,CAC3D,CAAE,EAAA,CAAI,SAAA,CAAW,IAAA,CAAM5C,IAAAA,CAAK4C,EAAW,iCAAiC,CAAE,CAAA,CAC1E,CAAE,EAAA,CAAI,UAAA,CAAY,IAAA,CAAM5C,IAAAA,CAAK4C,CAAAA,CAAW,gBAAgB,CAAE,CAAA,CAC1D,CAAE,EAAA,CAAI,QAAS,IAAA,CAAM5C,IAAAA,CAAK4C,CAAAA,CAAW,aAAa,CAAE,CACtD,EAEIe,CAAAA,CAAU,CAAA,CAEd,IAAA,IAAWC,CAAAA,IAAQF,CAAAA,CAAW,CAC5B,GAAI,CAAC3D,UAAAA,CAAW6D,CAAAA,CAAK,IAAI,CAAA,CACvB,SAGF,IAAMC,CAAAA,CAAWxC,YAAAA,CAAauC,CAAAA,CAAK,IAAA,CAAM,OAAO,CAAA,CAChD,GAAI,CAAChD,CAAAA,CAAoBiD,CAAQ,CAAA,CAC/B,SAGF,IAAMC,CAAAA,CAAa7B,EAAY2B,CAAAA,CAAK,EAAE,CAAA,CAChCG,CAAAA,CAAS1D,CAAAA,CAAawD,CAAAA,CAAUC,CAAU,CAAA,CAEhDT,CAAAA,CAAUO,CAAAA,CAAK,IAAA,CAAMG,CAAM,CAAA,CAC3B,OAAA,CAAQ,GAAA,CACN,CAAA,EAAGrB,CAAAA,CAAG,KAAA,CAAM,SAAS,CAAC,CAAA,CAAA,EAAIA,EAAG,GAAA,CAAII,QAAAA,CAASF,CAAAA,CAAWgB,CAAAA,CAAK,IAAI,CAAC,CAAC,CAAA,CAClE,CAAA,CACAD,CAAAA,GACF,CAGE,OAAA,CAAQ,GAAA,CADNA,CAAAA,GAAY,EAEZjB,CAAAA,CAAG,GAAA,CACD,CAAA,kCAAA,EAAqCA,CAAAA,CAAG,IAAA,CAAK,CAAA,EAAGpD,CAAQ,CAAA,cAAA,CAAgB,CAAC,CAAA,OAAA,CAC3E,CAAA,CAIAoD,CAAAA,CAAG,KAAA,CAAM;AAAA,QAAA,EAAaiB,CAAO,CAAA,qCAAA,CAAuC,CAHtE,EAMJ,CAMA,eAAsBK,EAAAA,CAAoB3B,CAAAA,CAAgB,CAExD,IAAMO,EADOR,EAAAA,CAAUC,CAAI,EACJ,GAAA,CAEjBqB,CAAAA,CAA2E,CAC/E,CAAE,EAAA,CAAI,QAAA,CAAU,IAAA,CAAM1D,KAAK4C,CAAAA,CAAW,cAAc,CAAA,CAAG,IAAA,CAAM,QAAS,CAAA,CACtE,CAAE,EAAA,CAAI,QAAA,CAAU,KAAM5C,IAAAA,CAAK4C,CAAAA,CAAW,mBAAmB,CAAA,CAAG,IAAA,CAAM,aAAc,CAAA,CAChF,CAAE,EAAA,CAAI,SAAA,CAAW,KAAM5C,IAAAA,CAAK4C,CAAAA,CAAW,iCAAiC,CAAA,CAAG,KAAM,gBAAiB,CAAA,CAClG,CAAE,EAAA,CAAI,WAAY,IAAA,CAAM5C,IAAAA,CAAK4C,EAAW,gBAAgB,CAAA,CAAG,KAAM,UAAW,CAAA,CAC5E,CAAE,EAAA,CAAI,QAAS,IAAA,CAAM5C,IAAAA,CAAK4C,CAAAA,CAAW,aAAa,EAAG,IAAA,CAAM,OAAQ,CACrE,CAAA,CAEIqB,EAAU,CAAA,CACVC,CAAAA,CAAQ,EAEZ,IAAA,IAAWN,CAAAA,IAAQF,EAAW,CAC5B,GAAI,CAAC3D,UAAAA,CAAW6D,EAAK,IAAI,CAAA,CACvB,SAGF,IAAMC,EAAWxC,YAAAA,CAAauC,CAAAA,CAAK,IAAA,CAAM,OAAO,EAChD,GAAI,CAAChD,EAAoBiD,CAAQ,CAAA,CAC/B,SAGFI,CAAAA,EAAAA,CAGA,IAAME,CAAAA,CAAelC,CAAAA,CAAY2B,EAAK,EAAE,CAAA,CACzBvD,CAAAA,CAAawD,CAAAA,CAAUM,CAAY,CAAA,GAEnCN,CAAAA,EACb,OAAA,CAAQ,GAAA,CAAI,GAAGnB,CAAAA,CAAG,GAAA,CAAI,QAAG,CAAC,CAAA,CAAA,EAAIkB,EAAK,IAAI,CAAA,WAAA,EAAclB,CAAAA,CAAG,MAAA,CAAO,OAAO,CAAC,CAAA,CAAE,CAAA,CACzEwB,CAAAA,EAAAA,EAEA,QAAQ,GAAA,CAAI,CAAA,EAAGxB,CAAAA,CAAG,KAAA,CAAM,QAAG,CAAC,CAAA,CAAA,EAAIkB,EAAK,IAAI,CAAA,WAAA,EAAclB,EAAG,KAAA,CAAM,SAAS,CAAC,CAAA,CAAE,EAEhF,CAEA,GAAIuB,IAAY,CAAA,CAAG,CACjB,QAAQ,GAAA,CAAIvB,CAAAA,CAAG,GAAA,CAAI,+BAA+B,CAAC,CAAA,CAEnD,MACF,CAEIwB,CAAAA,CAAQ,CAAA,EACV,QAAQ,GAAA,CACN;AAAA,EAAKxB,CAAAA,CAAG,OAAO,CAAA,EAAGwB,CAAK,qBAAqB,CAAC,CAAA,KAAA,EAAQxB,CAAAA,CAAG,IAAA,CAAK,CAAA,EAAGpD,CAAQ,kBAAkB,CAAC,CAAA,YAAA,CAC7F,EACA,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,EAEd,OAAA,CAAQ,GAAA,CAAIoD,CAAAA,CAAG,KAAA,CAAM;AAAA,2BAAA,CAA+B,CAAC,EAEzD,CCzXA,SAASN,EAAAA,CAAUC,CAAAA,CAA6B,CAC9C,IAAMC,CAAAA,CAAoB,CACxB,GAAA,CAAK,OAAA,CAAQ,GAAA,EAAI,CACjB,aAAA,CAAe,KACjB,CAAA,CAEA,IAAA,IAASC,CAAAA,CAAI,CAAA,CAAGA,CAAAA,CAAIF,CAAAA,CAAK,MAAA,CAAQE,CAAAA,EAAAA,CAG/B,OAFYF,CAAAA,CAAKE,CAAC,CAAA,EAGhB,KAAK,YAAA,CAAc,CACjB,IAAMC,EAAMH,CAAAA,CAAK,EAAEE,CAAC,CAAA,CAChBC,CAAAA,GACFF,CAAAA,CAAK,QAAA,CAAWE,CAAAA,CAAAA,CAElB,KACF,CACA,KAAK,OAAA,CAAS,CACZ,IAAMA,CAAAA,CAAMH,CAAAA,CAAK,EAAEE,CAAC,CAAA,CAChBC,CAAAA,GACFF,CAAAA,CAAK,GAAA,CAAME,CAAAA,CAAAA,CAEb,KACF,CACA,KAAK,kBAAA,CACHF,CAAAA,CAAK,aAAA,CAAgB,IAAA,CACrB,KACJ,CAGF,OAAOA,CACT,CAQA,SAAS8B,EAAAA,CAAqBnD,CAAAA,CAA6B,CACzD,OAAIlB,UAAAA,CAAWC,IAAAA,CAAKiB,EAAK,gBAAgB,CAAC,CAAA,CACjC,MAAA,CAELlB,UAAAA,CAAWC,IAAAA,CAAKiB,CAAAA,CAAK,WAAW,CAAC,CAAA,EAAKlB,UAAAA,CAAWC,IAAAA,CAAKiB,CAAAA,CAAK,UAAU,CAAC,CAAA,CACjE,MAELlB,UAAAA,CAAWC,IAAAA,CAAKiB,CAAAA,CAAK,WAAW,CAAC,CAAA,CAC5B,MAAA,CAGF,KACT,CAEA,SAASoD,EAAAA,CAAWC,CAAAA,CAAoBC,CAAAA,CAAqB,CAC3D,OAAQD,CAAAA,EACN,KAAK,MAAA,CACH,OAAO,CAAA,SAAA,EAAYC,CAAG,CAAA,CAAA,CACxB,KAAK,MAAA,CACH,OAAO,CAAA,SAAA,EAAYA,CAAG,CAAA,CAAA,CACxB,KAAK,KAAA,CACH,OAAO,CAAA,QAAA,EAAWA,CAAG,GACvB,QACE,OAAO,CAAA,YAAA,EAAeA,CAAG,CAAA,CAC7B,CACF,CAgBA,SAASC,EAAAA,CAAaC,CAAAA,CAAwD,CAC5E,OAAO,CACL,OAAA,CAAS,CACP,EAAA,CAAI,UACJ,KAAA,CAAO,mBAAA,CACP,IAAA,CAAM,gEAAA,CACN,KAAA,CAAO,CACL,CACE,IAAA,CAAM,CAAA,IAAA,EAAOA,CAAU,CAAA,GAAA,CAAA,CACvB,OAAA,CAASC,EAAAA,CAAsBD,CAAU,CAC3C,CAAA,CACA,CACE,IAAA,CAAM,aAAA,CACN,OAAA,CAASE,EAAAA,CAAoBF,CAAU,CACzC,CACF,CAAA,CACA,KAAM,CAAC,qBAAqB,CAC9B,CAAA,CACA,WAAA,CAAa,CACX,EAAA,CAAI,WAAA,CACJ,MAAO,qCAAA,CACP,IAAA,CAAM,4DAAA,CACN,KAAA,CAAO,CACL,CACE,IAAA,CAAM,CAAA,IAAA,EAAOA,CAAU,CAAA,GAAA,CAAA,CACvB,OAAA,CAASG,EAAAA,CAAmBH,CAAU,CACxC,CAAA,CACA,CACE,KAAM,aAAA,CACN,OAAA,CAASI,EAAAA,CAAiBJ,CAAU,CACtC,CACF,CAAA,CACA,IAAA,CAAM,CAAC,qBAAqB,CAC9B,CAAA,CACA,iBAAA,CAAmB,CACjB,EAAA,CAAI,iBAAA,CACJ,KAAA,CAAO,kBACP,IAAA,CAAM,kDAAA,CACN,KAAA,CAAO,CACL,CACE,IAAA,CAAM,CAAA,IAAA,EAAOA,CAAU,CAAA,GAAA,CAAA,CACvB,OAAA,CAASK,EAAAA,CAAiBL,CAAU,CACtC,CAAA,CACA,CACE,IAAA,CAAM,cACN,OAAA,CAASM,EAAAA,CAAeN,CAAU,CACpC,CACF,CAAA,CACA,IAAA,CAAM,CAAC,sBAAuB,mBAAmB,CACnD,CACF,CACF,CAMA,SAASC,EAAAA,CAAsBM,CAAAA,CAAsB,CAGnD,OAAO,CAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA,aAAA,EAFWC,CAAAA,CAAYD,CAAI,CAqBZ,CAAA,iBAAA,EAAoBA,CAAI,CAAA;AAAA;;AAAA;AAAA;AAAA,mBAAA,EAK3BA,CAAI,CAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAwBzB,CAEA,SAASL,EAAAA,CAAoBK,CAAAA,CAAsB,CACjD,IAAME,CAAAA,CAAYD,CAAAA,CAAYD,CAAI,CAAA,CAElC,OAAO,CAAA;AAAA,SAAA,EACEE,CAAS,cAAcF,CAAI,CAAA;;AAAA;AAAA,UAAA,EAG1BE,CAAS,CAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA,CAuBrB,CAEA,SAASN,EAAAA,CAAmBI,CAAAA,CAAsB,CAGhD,OAAO,CAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA,aAAA,EAFWC,CAAAA,CAAYD,CAAI,CA6BZ,CAAA,iBAAA,EAAoBA,CAAI,CAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CA8EhD,CAEA,SAASH,EAAAA,CAAiBG,CAAAA,CAAsB,CAC9C,IAAME,CAAAA,CAAYD,CAAAA,CAAYD,CAAI,CAAA,CAElC,OAAO,CAAA;AAAA,SAAA,EACEE,CAAS,cAAcF,CAAI,CAAA;;AAAA;AAAA,UAAA,EAG1BE,CAAS,CAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA,CAkBrB,CAEA,SAASJ,EAAAA,CAAiBE,CAAAA,CAAsB,CAG9C,OAAO,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA,aAAA,EAFWC,CAAAA,CAAYD,CAAI,CAoCZ,CAAA,iBAAA,EAAoBA,CAAI,CAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CA2EhD,CAEA,SAASD,EAAAA,CAAeC,CAAAA,CAAsB,CAC5C,IAAME,CAAAA,CAAYD,CAAAA,CAAYD,CAAI,CAAA,CAElC,OAAO,CAAA;AAAA,SAAA,EACEE,CAAS,cAAcF,CAAI,CAAA;;AAAA;AAAA,UAAA,EAG1BE,CAAS,CAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;;AAAA;AAAA,CAgBrB,CAMA,SAASD,CAAAA,CAAYD,CAAAA,CAAsB,CACzC,OAAOA,CAAAA,CAAK,OAAA,CAAQ,WAAA,CAAa,CAACG,CAAAA,CAAGC,CAAAA,GAAMA,CAAAA,CAAE,WAAA,EAAa,CAC5D,CAEA,SAAS/B,EAAAA,CAAUF,EAAkBtC,CAAAA,CAAiB,CACpD,IAAMI,CAAAA,CAAME,QAAQgC,CAAQ,CAAA,CACvBpD,UAAAA,CAAWkB,CAAG,GACjBsC,SAAAA,CAAUtC,CAAAA,CAAK,CAAE,SAAA,CAAW,IAAK,CAAC,CAAA,CAEpCuC,aAAAA,CAAcL,CAAAA,CAAUtC,EAAS,OAAO,EAC1C,CAMA,eAAsBwE,GAAYhD,CAAAA,CAAgB,CAChD,IAAMC,CAAAA,CAAOF,GAAUC,CAAI,CAAA,CAEzBiD,CAAA,CAAA,KAAA,CAAM5C,CAAAA,CAAG,OAAOA,CAAAA,CAAG,KAAA,CAAM,kBAAkB,CAAC,CAAC,CAAA,CAG/C,IAAI+B,CAAAA,CAEJ,GAAInC,EAAK,aAAA,CACPmC,CAAAA,CAAa,WAAA,CAAA,KACR,CACL,IAAMc,CAAAA,CAAa,MAAQD,CAAA,CAAA,IAAA,CAAK,CAC9B,QAAS,cAAA,CACT,WAAA,CAAa,WAAA,CACb,YAAA,CAAc,YACd,QAAA,CAAW9C,CAAAA,EAAQ,CACjB,GAAI,CAAC,mBAAA,CAAoB,IAAA,CAAKA,CAAG,CAAA,CAC/B,OAAO,uEAEX,CACF,CAAC,CAAA,CAEK8C,WAASC,CAAU,CAAA,GACrBD,CAAA,CAAA,MAAA,CAAO,YAAY,EACrB,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,CAAA,CAGhBb,EAAac,EACf,CAGA,IAAIC,CAAAA,CAEJ,GAAIlD,CAAAA,CAAK,QAAA,CAAU,CACjB,IAAMmD,EAAYjB,EAAAA,CAAaC,CAAU,CAAA,CACnCnC,CAAAA,CAAK,YAAYmD,CAAAA,GACnBH,CAAA,CAAA,GAAA,CAAI,KAAA,CACJ,CAAA,kBAAA,EAAqBhD,EAAK,QAAQ,CAAA,aAAA,EAAgB,MAAA,CAAO,IAAA,CAAKmD,CAAS,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,EACrF,CAAA,CACA,OAAA,CAAQ,IAAA,CAAK,CAAC,GAEhBD,CAAAA,CAAalD,CAAAA,CAAK,SACpB,CAAA,KAAA,GAAWA,EAAK,aAAA,CACdkD,CAAAA,CAAa,SAAA,CAAA,KACR,CACL,IAAMC,CAAAA,CAAYjB,EAAAA,CAAaC,CAAU,CAAA,CACnCiB,EAAS,MAAQJ,CAAA,CAAA,MAAA,CAAO,CAC5B,OAAA,CAAS,oBACT,OAAA,CAAS,MAAA,CAAO,MAAA,CAAOG,CAAS,EAAE,GAAA,CAAKtF,CAAAA,GAAO,CAC5C,KAAA,CAAOA,EAAE,EAAA,CACT,KAAA,CAAOA,CAAAA,CAAE,KAAA,CACT,KAAMA,CAAAA,CAAE,IACV,CAAA,CAAE,CACJ,CAAC,CAAA,CAEKmF,CAAA,CAAA,QAAA,CAASI,CAAM,CAAA,GACjBJ,SAAO,YAAY,CAAA,CACrB,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,CAAA,CAGhBE,CAAAA,CAAaE,EACf,CAGA,IAAMC,CAAAA,CADYnB,EAAAA,CAAaC,CAAU,CAAA,CACde,CAAU,CAAA,CAG/BlB,CAAAA,CAAKF,EAAAA,CAAqB9B,CAAAA,CAAK,GAAG,CAAA,CACtCgD,CAAA,CAAA,GAAA,CAAI,IAAA,CAAK,CAAA,iBAAA,EAAoB5C,EAAG,IAAA,CAAK4B,CAAE,CAAC,CAAA,CAAE,EAG5C,IAAMpB,CAAAA,CAAMoC,CAAA,CAAA,OAAA,EAAQ,CACpBpC,EAAE,KAAA,CAAM,2BAA2B,CAAA,CAEnC,IACI0C,CAAAA,CAAU,EAEd,IAAA,IAAWhC,KAAQ+B,CAAAA,CAAS,KAAA,CAAO,CACjC,IAAMxC,EAAWnD,IAAAA,CAAKsC,CAAAA,CAAK,GAAA,CAAKsB,CAAAA,CAAK,IAAI,CAAA,CAEzC,GAAI7D,UAAAA,CAAWoD,CAAQ,EAAG,CACxByC,CAAAA,EAAAA,CACA,QACF,CAEAvC,GAAUF,CAAAA,CAAUS,CAAAA,CAAK,OAAO,EAElC,CAEAV,CAAAA,CAAE,IAAA,CAAK,wBAAwB,EAE/B,IAAA,IAAWU,CAAAA,IAAQ+B,CAAAA,CAAS,KAAA,CAAO,CACjC,IAAMxC,CAAAA,CAAWnD,IAAAA,CAAKsC,CAAAA,CAAK,IAAKsB,CAAAA,CAAK,IAAI,CAAA,CACnCiC,CAAAA,CAAM/C,SAASR,CAAAA,CAAK,GAAA,CAAKa,CAAQ,CAAA,CAEnCpD,WAAWoD,CAAQ,CAAA,EACnBmC,CAAA,CAAA,GAAA,CAAI,OAAA,CAAQ,GAAG5C,CAAAA,CAAG,KAAA,CAAM,SAAS,CAAC,IAAIA,CAAAA,CAAG,GAAA,CAAImD,CAAG,CAAC,EAAE,EAEzD,CAEID,CAAAA,CAAU,CAAA,EACVN,MAAI,IAAA,CAAK,CAAA,QAAA,EAAWM,CAAO,CAAA,4BAAA,CAA8B,EAI7D,IAAME,CAAAA,CAAUzB,EAAAA,CAAWC,CAAAA,CAAIqB,EAAS,IAAA,CAAK,IAAA,CAAK,GAAG,CAAC,EAEpDL,CAAA,CAAA,KAAA,CACA,CAAA;AAAA,EAAA,EACO5C,CAAAA,CAAG,IAAA,CAAKoD,CAAO,CAAC;AAAA,EAAA,EAChBpD,CAAAA,CAAG,IAAA,CAAK,CAAA,EAAGpD,CAAQ,gBAAgB,CAAC;AAAA,EAAA,EACpCoD,CAAAA,CAAG,GAAA,CAAI,iBAAiB,CAAC,EAClC,EACF,CCxnBA,SAASN,EAAAA,CAAUC,CAAAA,CAA4B,CAC7C,IAAMC,EAAmB,CACvB,IAAA,CAAM,EAAC,CACP,OAAA,CAAS,KAAA,CACT,GAAA,CAAK,OAAA,CAAQ,KACf,CAAA,CAEA,IAAA,IAASC,CAAAA,CAAI,CAAA,CAAGA,CAAAA,CAAIF,CAAAA,CAAK,MAAA,CAAQE,IAG/B,OAFYF,CAAAA,CAAKE,CAAC,CAAA,EAGhB,KAAK,QAAA,CAAU,CACb,IAAMC,CAAAA,CAAMH,CAAAA,CAAK,EAAEE,CAAC,EAChBC,CAAAA,GACFF,CAAAA,CAAK,IAAA,CAAOE,CAAAA,CAAI,MAAM,GAAG,CAAA,CAAE,GAAA,CAAKU,CAAAA,EAAMA,CAAAA,CAAE,IAAA,EAAM,CAAA,CAAA,CAEhD,KACF,CACA,KAAK,WAAA,CACHZ,CAAAA,CAAK,OAAA,CAAU,IAAA,CACf,MACF,KAAK,QAAS,CACZ,IAAME,CAAAA,CAAMH,CAAAA,CAAK,EAAEE,CAAC,CAAA,CAChBC,CAAAA,GACFF,EAAK,GAAA,CAAME,CAAAA,CAAAA,CAEb,KACF,CACF,CAGF,OAAOF,CACT,CAQA,IAAMyD,EAAAA,CAA0B,CAC9B,QAAA,CACA,QAAA,CACA,aAAA,CACA,WAAA,CACA,SACF,CAAA,CAEA,SAASC,EAAAA,CACPhB,CAAAA,CACAiB,CAAAA,CACQ,CACR,IAAMf,CAAAA,CAAYD,EAAAA,CAAYD,CAAI,EAC5BkB,CAAAA,CAAiBD,CAAAA,CAAS,QAAA,CAAS,aAAa,CAAA,CAChDE,CAAAA,CAAeF,CAAAA,CAAS,QAAA,CAAS,WAAW,CAAA,CAI9CG,CAAAA,CAAO,CAAA,SAAA,EAFK,CAAC,oBAAqB,cAAA,CAAgB,GAAG,CAAA,CAE1B,IAAA,CAAK,IAAI,CAAC,CAAA;;AAAA,CAAA,CAGzC,OAAAA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CAEJH,CAAAA,CAAS,QAAA,CAAS,QAAQ,CAAA,GAC5BG,CAAAA,EAAQ,CAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CAAA,CAGNH,CAAAA,CAAS,QAAA,CAAS,QAAQ,CAAA,GAC5BG,CAAAA,EAAQ,CAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CAAA,CAAA,CAGNF,CAAAA,EAAkBC,KACpBC,CAAAA,EAAQ,CAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CAAA,CAGVA,CAAAA,EAAQ,CAAA;;AAAA,CAAA,CAGRA,CAAAA,EAAQ,CAAA,aAAA,EAAgBlB,CAAS,CAAA,iBAAA,EAAoBF,CAAI,CAAA;AAAA,CAAA,CACzDoB,CAAAA,EAAQ,CAAA;;AAAA,CAAA,CAERA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CAEJH,CAAAA,CAAS,QAAA,CAAS,QAAQ,CAAA,GAC5BG,CAAAA,EAAQ;AAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CAAA,CAGNH,CAAAA,CAAS,QAAA,CAAS,QAAQ,CAAA,GAC5BG,CAAAA,EAAQ;AAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CAAA,CAGNF,IACFE,CAAAA,EAAQ;AAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CAAA,CAGND,IACFC,CAAAA,EAAQ;AAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CAAA,CAGNH,CAAAA,CAAS,QAAA,CAAS,SAAS,CAAA,GAC7BG,CAAAA,EAAQ;AAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,4EACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CAAA,CAGVA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CAEDA,CACT,CAMA,SAASC,EAAAA,CAAqBrB,CAAAA,CAAsB,CAClD,IAAME,CAAAA,CAAYD,EAAAA,CAAYD,CAAI,CAAA,CAElC,OAAO,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA,aAAA,EA2CME,CAAS,oBAAoBF,CAAI,CAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA,UAAA,EAsFpCE,CAAS,CAAA;AAAA;AAAA,CAGrB,CAMA,SAASD,EAAAA,CAAYD,CAAAA,CAAsB,CACzC,OAAOA,CAAAA,CAAK,OAAA,CAAQ,WAAA,CAAa,CAACG,CAAAA,CAAGC,CAAAA,GAAMA,CAAAA,CAAE,WAAA,EAAa,CAC5D,CAEA,SAAS/B,EAAAA,CAAUF,EAAkBtC,CAAAA,CAAiB,CACpD,IAAMI,CAAAA,CAAME,QAAQgC,CAAQ,CAAA,CACvBpD,UAAAA,CAAWkB,CAAG,GACjBsC,SAAAA,CAAUtC,CAAAA,CAAK,CAAE,SAAA,CAAW,IAAK,CAAC,CAAA,CAEpCuC,aAAAA,CAAcL,CAAAA,CAAUtC,CAAAA,CAAS,OAAO,EAC1C,CAEA,SAASyF,EAAAA,CAAerF,CAAAA,CAAqB,CAC3C,OAAOjB,KAAKiB,CAAAA,CAAK,KAAK,CACxB,CAMA,eAAsBsF,EAAAA,CAAiBvB,CAAAA,CAAc3C,CAAAA,CAAgB,CACnE,IAAMC,CAAAA,CAAOF,EAAAA,CAAUC,CAAI,CAAA,CAAA,CAEvB,CAAC2C,CAAAA,EAAQ,CAAC,mBAAA,CAAoB,IAAA,CAAKA,CAAI,CAAA,IACzC,OAAA,CAAQ,KAAA,CACN,CAAA,qBAAA,EAAwBA,GAAQ,QAAQ;AAAA,sEAAA,CAE1C,CAAA,CACA,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,CAAA,CAGhB,IAAIiB,CAAAA,CAEA3D,CAAAA,CAAK,OAAA,CACP2D,CAAAA,CAAW,EAAC,CACH3D,EAAK,IAAA,CAAK,MAAA,CAAS,CAAA,CAC5B2D,CAAAA,CAAW3D,CAAAA,CAAK,IAAA,CAAK,MAAA,CAAQY,CAAAA,EAC3B6C,EAAAA,CAAa,QAAA,CAAS7C,CAAY,CACpC,CAAA,CAEA+C,CAAAA,CAAWF,EAAAA,CAGb,IAAMnD,EAAY0D,EAAAA,CAAehE,CAAAA,CAAK,GAAG,CAAA,CACnCa,CAAAA,CAAWnD,IAAAA,CAAK4C,CAAAA,CAAW,CAAA,EAAGoC,CAAI,CAAA,GAAA,CAAK,CAAA,CAEzCjF,UAAAA,CAAWoD,CAAQ,CAAA,GACrB,OAAA,CAAQ,KAAA,CAAM,wBAAwBL,QAAAA,CAASR,CAAAA,CAAK,GAAA,CAAKa,CAAQ,CAAC,CAAA,CAAE,CAAA,CACpE,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,CAAA,CAGhB,IAAMtC,CAAAA,CAAUmF,EAAAA,CAAehB,CAAAA,CAAMiB,CAAQ,EAC7C5C,EAAAA,CAAUF,CAAAA,CAAUtC,CAAO,CAAA,CAE3B,IAAMgF,CAAAA,CAAM/C,QAAAA,CAASR,CAAAA,CAAK,GAAA,CAAKa,CAAQ,CAAA,CACvC,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAGT,CAAAA,CAAG,KAAA,CAAM,SAAS,CAAC,CAAA,CAAA,EAAIA,CAAAA,CAAG,GAAA,CAAImD,CAAG,CAAC,CAAA,CAAE,CAAA,CAE/CI,CAAAA,CAAS,MAAA,GAAW,CAAA,CACtB,OAAA,CAAQ,GAAA,CAAIvD,CAAAA,CAAG,GAAA,CAAI,uCAAuC,CAAC,CAAA,CAE3D,OAAA,CAAQ,GAAA,CAAIA,CAAAA,CAAG,GAAA,CAAI,CAAA,YAAA,EAAeuD,CAAAA,CAAS,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAC,EAE5D,CAEA,eAAsBO,EAAAA,CAAuBxB,EAAc3C,CAAAA,CAAgB,CACzE,IAAMC,CAAAA,CAAOF,EAAAA,CAAUC,CAAI,CAAA,CAAA,CAEvB,CAAC2C,GAAQ,CAAC,mBAAA,CAAoB,IAAA,CAAKA,CAAI,CAAA,IACzC,OAAA,CAAQ,KAAA,CACN,CAAA,2BAAA,EAA8BA,GAAQ,QAAQ;AAAA,sEAAA,CAEhD,EACA,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,CAAA,CAGhB,IAAMpC,CAAAA,CAAY0D,EAAAA,CAAehE,CAAAA,CAAK,GAAG,EACnCa,CAAAA,CAAWnD,IAAAA,CAAK4C,CAAAA,CAAW,CAAA,EAAGoC,CAAI,CAAA,GAAA,CAAK,CAAA,CAEzCjF,UAAAA,CAAWoD,CAAQ,IACrB,OAAA,CAAQ,KAAA,CAAM,CAAA,qBAAA,EAAwBL,QAAAA,CAASR,EAAK,GAAA,CAAKa,CAAQ,CAAC,CAAA,CAAE,EACpE,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,CAAA,CAGhB,IAAMtC,CAAAA,CAAUwF,EAAAA,CAAqBrB,CAAI,CAAA,CACzC3B,GAAUF,CAAAA,CAAUtC,CAAO,CAAA,CAE3B,IAAMgF,EAAM/C,QAAAA,CAASR,CAAAA,CAAK,GAAA,CAAKa,CAAQ,EACvC,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAGT,CAAAA,CAAG,MAAM,SAAS,CAAC,CAAA,CAAA,EAAIA,CAAAA,CAAG,IAAImD,CAAG,CAAC,CAAA,CAAE,CAAA,CACnD,QAAQ,GAAA,CAAInD,CAAAA,CAAG,GAAA,CAAI,0DAA0D,CAAC,EAChF,CC9XA,eAAsB+D,CAAAA,CAAWtD,CAAAA,CAAgC,CAC/D,IAAMuD,CAAAA,CAAWxF,OAAAA,CAAQiC,CAAQ,CAAA,CAEjC,GAAI,CAACpD,UAAAA,CAAW2G,CAAQ,CAAA,CACtB,MAAM,IAAI,KAAA,CAAM,CAAA,gBAAA,EAAmBA,CAAQ,EAAE,CAAA,CAI/C,GAAI,CAEF,IAAMC,EAAM,MAAM,OAAOD,CAAAA,CAAAA,CAGzB,GAAIC,EAAI,OAAA,EAAWC,EAAAA,CAASD,CAAAA,CAAI,OAAO,EACrC,OAAOA,CAAAA,CAAI,OAAA,CAIb,GAAIA,EAAI,MAAA,EAAUC,EAAAA,CAASD,CAAAA,CAAI,MAAM,EACnC,OAAOA,CAAAA,CAAI,MAAA,CAIb,IAAA,IAAWE,KAAO,MAAA,CAAO,IAAA,CAAKF,CAAG,CAAA,CAC/B,GAAIC,EAAAA,CAASD,CAAAA,CAAIE,CAAG,CAAC,EACnB,OAAOF,CAAAA,CAAIE,CAAG,CAAA,CAIlB,MAAM,IAAI,KAAA,CACR,gCAAgCnE,CAAAA,CAAG,GAAA,CAAIS,CAAQ,CAAC;AAAA;;AAAA,EAAA,EAEzCT,CAAAA,CAAG,IAAA,CAAK,gBAAgB,CAAC,CAAA;AAAA,EAAA,EACzBA,CAAAA,CAAG,IAAA,CAAK,qBAAqB,CAAC,wCACvC,CACF,CAAA,MAASoE,CAAAA,CAAK,CACZ,MAAIA,CAAAA,YAAe,KAAA,EAASA,CAAAA,CAAI,QAAQ,QAAA,CAAS,qBAAqB,CAAA,CAC9DA,CAAAA,CAGF,IAAI,KAAA,CACR,CAAA,eAAA,EAAkBpE,CAAAA,CAAG,IAAIS,CAAQ,CAAC,CAAA,EAAA,EAAK2D,CAAAA,YAAe,KAAA,CAAQA,CAAAA,CAAI,OAAA,CAAU,MAAA,CAAOA,CAAG,CAAC;;AAAA;AAAA,EAAA,EAEhFpE,CAAAA,CAAG,IAAA,CAAK,oBAAoB,CAAC,EACtC,CACF,CACF,CAKA,SAASkE,EAAAA,CAASG,CAAAA,CAAuB,CACvC,GAAI,OAAOA,CAAAA,EAAQ,QAAA,EAAYA,CAAAA,GAAQ,IAAA,CACrC,OAAO,MAAA,CAGT,IAAMC,CAAAA,CAAMD,EAEZ,OACE,OAAOC,CAAAA,CAAI,OAAA,EAAY,UAAA,EACvB,OAAOA,CAAAA,CAAI,KAAA,EAAU,YACrB,OAAOA,CAAAA,CAAI,IAAA,EAAS,UAAA,EACpB,OAAA,GAAWA,CAEf,CC1EA,SAAS5E,GAAUC,CAAAA,CAA4D,CAC7E,IAAMC,CAAAA,CAAuB,CAAE,IAAA,CAAM,KAAM,CAAA,CACvCa,EAAW,EAAA,CAEf,IAAA,IAASZ,CAAAA,CAAI,CAAA,CAAGA,CAAAA,CAAIF,CAAAA,CAAK,MAAA,CAAQE,CAAAA,EAAAA,CAAK,CACpC,IAAM0E,CAAAA,CAAM5E,CAAAA,CAAKE,CAAC,CAAA,CAElB,OAAQ0E,CAAAA,EACN,KAAK,QAAA,CACH3E,CAAAA,CAAK,IAAA,CAAO,IAAA,CACZ,MACF,KAAK,UAAA,CAAY,CACf,IAAME,CAAAA,CAAMH,CAAAA,CAAK,EAAEE,CAAC,CAAA,CAChBC,CAAAA,GACFF,CAAAA,CAAK,MAAA,CAASE,GAEhB,KACF,CACA,QACMyE,CAAAA,EAAO,CAACA,CAAAA,CAAI,UAAA,CAAW,GAAG,GAAK,CAAC9D,CAAAA,GAClCA,CAAAA,CAAW8D,CAAAA,EAEjB,CACF,CAEA,OAAO,CAAE,SAAA9D,CAAAA,CAAU,IAAA,CAAAb,CAAK,CAC1B,CAMA,SAAS4E,EAAAA,CAAYC,CAAAA,CAAwC,CAC3D,IAAMC,CAAAA,CAAkB,EAAC,CACzBA,CAAAA,CAAM,IAAA,CAAK1E,CAAAA,CAAG,IAAA,CAAK,QAAQ,CAAC,CAAA,CAE5B,IAAM2E,CAAAA,CAAU,MAAA,CAAO,OAAA,CAAQF,CAAK,CAAA,CACpC,GAAIE,CAAAA,CAAQ,MAAA,GAAW,CAAA,CACrB,OAAAD,CAAAA,CAAM,IAAA,CAAK,UAAU,CAAA,CAEdA,EAAM,IAAA,CAAK;AAAA,CAAI,CAAA,CAGxB,IAAA,GAAW,CAACP,CAAAA,CAAKS,CAAK,CAAA,GAAKD,CAAAA,CAAS,CAClC,IAAME,CAAAA,CAAYC,EAAAA,CAAYF,CAAK,CAAA,CACnCF,CAAAA,CAAM,IAAA,CAAK,CAAA,EAAA,EAAK1E,CAAAA,CAAG,IAAA,CAAKmE,CAAG,CAAC,CAAA,GAAA,EAAMU,CAAS,CAAA,CAAE,EAC/C,CAEA,OAAOH,CAAAA,CAAM,IAAA,CAAK;AAAA,CAAI,CACxB,CAEA,SAASK,EAAAA,CACPC,CAAAA,CAQQ,CACR,IAAMN,CAAAA,CAAkB,EAAC,CAGzB,GAFAA,CAAAA,CAAM,IAAA,CAAK1E,CAAAA,CAAG,IAAA,CAAK,cAAc,CAAC,CAAA,CAE9BgF,CAAAA,CAAY,MAAA,GAAW,CAAA,CACzB,OAAAN,CAAAA,CAAM,IAAA,CAAK,UAAU,CAAA,CAEdA,CAAAA,CAAM,IAAA,CAAK;AAAA,CAAI,CAAA,CAGxB,IAAA,IAAWhC,CAAAA,IAAKsC,CAAAA,CAAa,CAC3B,IAAMC,CAAAA,CAASvC,CAAAA,CAAE,QAAA,CACb1C,CAAAA,CAAG,GAAA,CAAI,UAAU,EACjB0C,CAAAA,CAAE,MAAA,CACA1C,CAAAA,CAAG,KAAA,CAAM,QAAQ,CAAA,CACjBA,CAAAA,CAAG,GAAA,CAAI,UAAU,CAAA,CACjBkF,CAAAA,CAAOxC,CAAAA,CAAE,QAAA,CAAW,CAAA,CAAI1C,EAAG,MAAA,CAAO,CAAA,EAAA,EAAK0C,CAAAA,CAAE,QAAQ,CAAA,MAAA,CAAQ,CAAA,CAAI,EAAA,CACnEgC,CAAAA,CAAM,IAAA,CACJ,CAAA,EAAA,EAAK1E,CAAAA,CAAG,IAAA,CAAK0C,CAAAA,CAAE,EAAE,CAAC,CAAA,EAAA,EAAKuC,CAAM,CAAA,WAAA,EAAcvC,CAAAA,CAAE,QAAQ,CAAA,EAAGwC,CAAI,CAAA,CAC9D,EACF,CAEA,OAAOR,CAAAA,CAAM,IAAA,CAAK;AAAA,CAAI,CACxB,CAEA,SAASS,EAAAA,CACPC,CAAAA,CACAC,CAAAA,CACQ,CACR,IAAMX,CAAAA,CAAkB,EAAC,CAGzB,GAFAA,CAAAA,CAAM,IAAA,CAAK1E,CAAAA,CAAG,IAAA,CAAK,YAAY,CAAC,CAAA,CAE5BoF,CAAAA,CAAa,MAAA,GAAW,CAAA,CAC1B,OAAAV,CAAAA,CAAM,IAAA,CAAK,UAAU,CAAA,CAEdA,CAAAA,CAAM,IAAA,CAAK;AAAA,CAAI,EAGxB,IAAA,IAAWY,CAAAA,IAAOF,EAAc,CAC9B,IAAMH,EAASI,CAAAA,CAAUC,CAAAA,CAAI,EAAE,CAAA,CACzBC,CAAAA,CAAWN,EACbO,EAAAA,CAAoBP,CAAAA,CAAO,MAAOA,CAAAA,CAAO,KAAA,CAAOA,EAAO,QAAQ,CAAA,CAC/DjF,EAAG,GAAA,CAAI,MAAM,EACjB0E,CAAAA,CAAM,IAAA,CACJ,KAAK1E,CAAAA,CAAG,IAAA,CAAKsF,EAAI,EAAE,CAAC,WAAMA,CAAAA,CAAI,WAAW,KAAKC,CAAQ,CAAA,CACxD,EACF,CAEA,OAAOb,EAAM,IAAA,CAAK;AAAA,CAAI,CACxB,CAEA,SAASe,EAAAA,CACPC,EAKQ,CACR,IAAMhB,CAAAA,CAAkB,EAAC,CAGzB,GAFAA,CAAAA,CAAM,IAAA,CAAK1E,EAAG,IAAA,CAAK,qBAAqB,CAAC,CAAA,CAErC0F,CAAAA,CAAM,MAAA,GAAW,CAAA,CACnB,OAAAhB,EAAM,IAAA,CAAK,CAAA,EAAA,EAAK1E,CAAAA,CAAG,KAAA,CAAM,wBAAwB,CAAC,CAAA,CAAE,CAAA,CAE7C0E,EAAM,IAAA,CAAK;AAAA,CAAI,CAAA,CAGxB,IAAA,IAAWiB,CAAAA,IAAKD,CAAAA,CACdhB,CAAAA,CAAM,IAAA,CACJ,CAAA,EAAA,EAAK1E,CAAAA,CAAG,MAAA,CAAO2F,CAAAA,CAAE,WAAA,CAAY,IAAI,CAAC,CAAA,MAAA,EAAS3F,CAAAA,CAAG,GAAA,CAAI2F,CAAAA,CAAE,EAAE,CAAC,CAAA,QAAA,EAAW3F,CAAAA,CAAG,GAAA,CAAI2F,CAAAA,CAAE,cAAc,CAAC,CAAA,CAC5F,CAAA,CAGF,OAAOjB,EAAM,IAAA,CAAK;AAAA,CAAI,CACxB,CAEA,SAASkB,EAAAA,CACPC,EACQ,CACR,IAAMnB,CAAAA,CAAkB,EAAC,CAGzB,GAFAA,CAAAA,CAAM,IAAA,CAAK1E,EAAG,IAAA,CAAK,WAAW,CAAC,CAAA,CAE3B6F,CAAAA,CAAS,MAAA,GAAW,CAAA,CACtB,OAAAnB,EAAM,IAAA,CAAK,CAAA,EAAA,EAAK1E,CAAAA,CAAG,KAAA,CAAM,QAAQ,CAAC,CAAA,CAAE,CAAA,CAE7B0E,EAAM,IAAA,CAAK;AAAA,CAAI,EAGxB,IAAMoB,CAAAA,CAAM,KAAK,GAAA,EAAI,CACrB,QAAWC,CAAAA,IAAOF,CAAAA,CAAU,CAC1B,IAAMG,EAAUF,CAAAA,CAAMC,CAAAA,CAAI,UAC1BrB,CAAAA,CAAM,IAAA,CACJ,KAAK1E,CAAAA,CAAG,IAAA,CAAK+F,CAAAA,CAAI,UAAU,CAAC,CAAA,YAAA,EAAU/F,CAAAA,CAAG,IAAI+F,CAAAA,CAAI,EAAE,CAAC,CAAA,EAAA,EAAK/F,CAAAA,CAAG,OAAO,CAAA,EAAGgG,CAAO,IAAI,CAAC,CAAA,CACpF,EACF,CAEA,OAAOtB,EAAM,IAAA,CAAK;AAAA,CAAI,CACxB,CAEA,SAASc,EAAAA,CACPS,CAAAA,CACAC,CAAAA,CACAC,CAAAA,CACQ,CACR,IAAMC,CAAAA,CAAMD,CAAAA,GAAa,MAAA,CAAY,IAAIA,CAAQ,CAAA,EAAA,CAAA,CAAO,EAAA,CAExD,OAAQF,CAAAA,EACN,KAAK,UAAA,CACH,OAAOjG,CAAAA,CAAG,KAAA,CAAM,CAAA,QAAA,EAAWoG,CAAG,CAAA,CAAE,CAAA,CAClC,KAAK,SAAA,CACH,OAAOpG,CAAAA,CAAG,GAAA,CAAI,CAAA,OAAA,EAAUoG,CAAG,CAAA,EAAGF,CAAAA,CAAQ,CAAA,QAAA,EAAMA,CAAK,CAAA,CAAA,CAAK,EAAE,CAAA,CAAE,CAAA,CAC5D,KAAK,UAAA,CACH,OAAOlG,CAAAA,CAAG,OAAO,UAAU,CAAA,CAC7B,KAAK,WAAA,CACH,OAAOA,CAAAA,CAAG,GAAA,CAAI,WAAW,EAC3B,QACE,OAAOA,CAAAA,CAAG,GAAA,CAAIiG,CAAK,CACvB,CACF,CAEA,SAASnB,EAAAA,CAAYF,CAAAA,CAAwB,CAC3C,OAAIA,CAAAA,GAAU,IAAA,CACL5E,CAAAA,CAAG,GAAA,CAAI,MAAM,CAAA,CAElB4E,CAAAA,GAAU,MAAA,CACL5E,CAAAA,CAAG,GAAA,CAAI,WAAW,CAAA,CAEvB,OAAO4E,CAAAA,EAAU,QAAA,CACZA,CAAAA,CAAM,MAAA,CAAS,EAAA,CAAK,CAAA,CAAA,EAAIA,CAAAA,CAAM,KAAA,CAAM,EAAG,EAAE,CAAC,CAAA,IAAA,CAAA,CAAS,CAAA,CAAA,EAAIA,CAAK,CAAA,CAAA,CAAA,CAEjE,OAAOA,CAAAA,EAAU,UAAY,OAAOA,CAAAA,EAAU,SAAA,CACzC,MAAA,CAAOA,CAAK,CAAA,CAEjB,KAAA,CAAM,OAAA,CAAQA,CAAK,CAAA,CACd,CAAA,CAAA,EAAIA,CAAAA,CAAM,MAAM,CAAA,OAAA,CAAA,CAGlB,IAAA,CAAK,SAAA,CAAUA,CAAK,CAAA,CAAE,KAAA,CAAM,CAAA,CAAG,EAAE,CAC1C,CAMA,SAASyB,EAAAA,CAAaC,EAIT,CACX,IAAMC,CAAAA,CAAqB,EAAC,CAMT,IAAI,GAAA,CAAID,CAAAA,CAAW,KAAA,CAAM,GAAA,CAAKX,CAAAA,EAAMA,CAAAA,CAAE,WAAA,CAAY,IAAI,CAAC,CAAA,CACpD,IAAI,GAAA,CACxBW,CAAAA,CAAW,YAAA,CAAa,IAAKE,CAAAA,EAAMA,CAAAA,CAAE,WAAW,CAClD,EAGA,IAAA,IAAWlB,CAAAA,IAAOgB,CAAAA,CAAW,aACvBhB,CAAAA,CAAI,WAAA,CAMV,IAAA,IAAWK,CAAAA,IAAKW,CAAAA,CAAW,KAAA,CACLA,CAAAA,CAAW,YAAA,CAAa,KACzCE,CAAAA,EACCA,CAAAA,CAAE,WAAA,GAAgBb,CAAAA,CAAE,WAAA,CAAY,IAAA,EAAQa,CAAAA,CAAE,WAAA,GAAgB,aAC9D,CAAA,EAEED,CAAAA,CAAS,IAAA,CACP,CAAA,kCAAA,EAAqCZ,CAAAA,CAAE,WAAA,CAAY,IAAI,GACzD,CAAA,CAIJ,OAAOY,CACT,CAMA,eAAsBE,EAAAA,CAAe9G,CAAAA,CAAgB,CACnD,GAAM,CAAE,QAAA,CAAAc,CAAAA,CAAU,IAAA,CAAAb,CAAK,CAAA,CAAIF,EAAAA,CAAUC,CAAI,EAEpCc,CAAAA,GACH,OAAA,CAAQ,KAAA,CACN,4DACF,CAAA,CACA,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,CAAA,CAGhB,IAAMiG,CAAAA,CAAS,MAAM3C,CAAAA,CAAWtD,CAAQ,CAAA,CAEnCiG,CAAAA,CAAO,WACVA,CAAAA,CAAO,KAAA,EAAM,CAGf,IAAMJ,CAAAA,CAAaI,CAAAA,CAAO,OAAA,EAAQ,CAElC,GAAI9G,CAAAA,CAAK,IAAA,CAAM,CAEb,IAAM+G,CAAAA,CAAoC,EAAC,CAC3C,GAAID,EAAO,KAAA,CACT,IAAA,IAAWvC,CAAAA,IAAO,MAAA,CAAO,IAAA,CAAKuC,CAAAA,CAAO,KAAK,CAAA,CACxC,GAAI,CACFC,CAAAA,CAASxC,CAAG,CAAA,CAAIuC,CAAAA,CAAO,KAAA,CAAMvC,CAAG,EAClC,MAAQ,CACNwC,CAAAA,CAASxC,CAAG,CAAA,CAAI,kBAClB,CAIJ,OAAA,CAAQ,GAAA,CACN,KAAK,SAAA,CACH,CACE,KAAA,CAAOwC,CAAAA,CACP,GAAGL,CACL,CAAA,CACA,IAAA,CACA,CACF,CACF,CAAA,CAEAI,CAAAA,CAAO,IAAA,EAAK,CAEZ,MACF,CAGA,OAAA,CAAQ,GAAA,EAAI,CACZ,OAAA,CAAQ,GAAA,CAAI1G,CAAAA,CAAG,IAAA,CAAKA,CAAAA,CAAG,IAAA,CAAK,6BAA6B,CAAC,CAAC,CAAA,CAC3D,OAAA,CAAQ,GAAA,CAAIA,CAAAA,CAAG,GAAA,CAAI,QAAA,CAAI,OAAO,EAAE,CAAC,CAAC,CAAA,CAClC,OAAA,CAAQ,GAAA,EAAI,CAGZ,IAAM2G,EAAoC,EAAC,CAC3C,GAAID,CAAAA,CAAO,KAAA,CACT,IAAA,IAAWvC,CAAAA,IAAO,MAAA,CAAO,IAAA,CAAKuC,CAAAA,CAAO,KAAK,CAAA,CACxC,GAAI,CACFC,CAAAA,CAASxC,CAAG,EAAIuC,CAAAA,CAAO,KAAA,CAAMvC,CAAG,EAClC,CAAA,KAAQ,CACNwC,CAAAA,CAASxC,CAAG,EAAI,kBAClB,CAGJ,OAAA,CAAQ,GAAA,CAAIK,EAAAA,CAAYmC,CAAQ,CAAC,CAAA,CACjC,QAAQ,GAAA,EAAI,CAGZ,OAAA,CAAQ,GAAA,CAAI5B,EAAAA,CAAkBuB,CAAAA,CAAW,WAAW,CAAC,CAAA,CACrD,OAAA,CAAQ,GAAA,EAAI,CAGZ,OAAA,CAAQ,GAAA,CAAInB,EAAAA,CAAmBmB,CAAAA,CAAW,aAAcA,CAAAA,CAAW,SAAS,CAAC,CAAA,CAC7E,OAAA,CAAQ,GAAA,EAAI,CAGZ,OAAA,CAAQ,IAAIb,EAAAA,CAAYa,CAAAA,CAAW,KAAK,CAAC,CAAA,CACzC,OAAA,CAAQ,GAAA,EAAI,CAGRA,EAAW,QAAA,CAAS,MAAA,CAAS,CAAA,GAC/B,OAAA,CAAQ,GAAA,CAAIV,EAAAA,CAAeU,CAAAA,CAAW,QAAQ,CAAC,CAAA,CAC/C,OAAA,CAAQ,GAAA,EAAI,CAAA,CAId,IAAMC,CAAAA,CAAWF,EAAAA,CAAaC,CAAU,CAAA,CACxC,GAAIC,CAAAA,CAAS,MAAA,CAAS,CAAA,CAAG,CACvB,OAAA,CAAQ,GAAA,CAAIvG,EAAG,IAAA,CAAKA,CAAAA,CAAG,MAAA,CAAO,WAAW,CAAC,CAAC,CAAA,CAC3C,IAAA,IAAW4G,KAAKL,CAAAA,CACd,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAKvG,CAAAA,CAAG,MAAA,CAAO,QAAG,CAAC,CAAA,CAAA,EAAI4G,CAAC,CAAA,CAAE,CAAA,CAExC,OAAA,CAAQ,GAAA,GACV,CAEAF,EAAO,IAAA,GACT,CCxVA,SAAShH,EAAAA,CACPC,EACoE,CACpE,IAAMC,CAAAA,CAAuB,EAAC,CAC1Ba,CAAAA,CAAW,EAAA,CACXoG,CAAAA,CAEJ,QAAShH,CAAAA,CAAI,CAAA,CAAGA,CAAAA,CAAIF,CAAAA,CAAK,MAAA,CAAQE,CAAAA,EAAAA,CAAK,CACpC,IAAM0E,CAAAA,CAAM5E,CAAAA,CAAKE,CAAC,CAAA,CAElB,GAAQ0E,CAAAA,GACD,UAAA,CAAY,CACf,IAAMzE,CAAAA,CAAMH,CAAAA,CAAK,EAAEE,CAAC,CAAA,CAChBC,CAAAA,GACFF,CAAAA,CAAK,MAAA,CAASE,GAGlB,CAAA,KAEMyE,CAAAA,EAAO,CAACA,CAAAA,CAAI,UAAA,CAAW,GAAG,CAAA,GACvB9D,CAAAA,CAEOoG,IACVA,CAAAA,CAAgBtC,CAAAA,CAAAA,CAFhB9D,CAAAA,CAAW8D,CAAAA,EAMrB,CAEA,OAAO,CAAE,QAAA,CAAA9D,CAAAA,CAAU,aAAA,CAAAoG,CAAAA,CAAe,IAAA,CAAAjH,CAAK,CACzC,CAMA,eAAsBkH,GAAenH,CAAAA,CAAgB,CACnD,GAAM,CAAE,QAAA,CAAAc,CAAAA,CAAU,aAAA,CAAAoG,CAAc,EAAInH,EAAAA,CAAUC,CAAI,CAAA,CAE7Cc,CAAAA,GACH,OAAA,CAAQ,KAAA,CACN,kDACF,CAAA,CACA,QAAQ,IAAA,CAAK,CAAC,CAAA,CAAA,CAGhB,IAAMiG,CAAAA,CAAS,MAAM3C,CAAAA,CAAWtD,CAAQ,EAEnCiG,CAAAA,CAAO,SAAA,EACVA,CAAAA,CAAO,KAAA,EAAM,CAGf,IAAMJ,CAAAA,CAAaI,CAAAA,CAAO,SAAQ,CAElC,GAAIG,CAAAA,CAAe,CAEjB,IAAME,CAAAA,CAAcL,CAAAA,CAAO,OAAA,CAAQG,CAAa,CAAA,CAEhD,GAAI,CAACE,CAAAA,CAAa,CAMhB,GALA,OAAA,CAAQ,KAAA,CACN,gBAAgBF,CAAa,CAAA;;AAAA,qBAAA,CAE/B,EAEIP,CAAAA,CAAW,KAAA,CAAM,SAAW,CAAA,CAC9B,OAAA,CAAQ,IAAItG,CAAAA,CAAG,GAAA,CAAI,2BAA2B,CAAC,CAAA,CAAA,aAEpC2F,CAAAA,IAAKW,CAAAA,CAAW,MACzB,OAAA,CAAQ,GAAA,CACN,KAAKtG,CAAAA,CAAG,IAAA,CAAK2F,EAAE,EAAE,CAAC,WAAMA,CAAAA,CAAE,WAAA,CAAY,IAAI,CAAA,OAAA,EAAUA,CAAAA,CAAE,cAAc,CAAA,CAAA,CACtE,CAAA,CAIJe,EAAO,IAAA,EAAK,CACZ,QAAQ,IAAA,CAAK,CAAC,EAChB,CAEA,OAAA,CAAQ,KAAI,CACZ,OAAA,CAAQ,IAAI1G,CAAAA,CAAG,IAAA,CAAKA,EAAG,IAAA,CAAK,yBAAyB,CAAC,CAAC,CAAA,CACvD,QAAQ,GAAA,CAAIA,CAAAA,CAAG,IAAI,QAAA,CAAI,MAAA,CAAO,EAAE,CAAC,CAAC,EAClC,OAAA,CAAQ,GAAA,GACR,OAAA,CAAQ,GAAA,CAAI+G,CAAW,CAAA,CACvB,OAAA,CAAQ,MACV,CAAA,KAAA,GAEE,QAAQ,GAAA,EAAI,CACZ,QAAQ,GAAA,CAAI/G,CAAAA,CAAG,KAAKA,CAAAA,CAAG,IAAA,CAAK,kBAAkB,CAAC,CAAC,EAChD,OAAA,CAAQ,GAAA,CAAIA,EAAG,GAAA,CAAI,QAAA,CAAI,OAAO,EAAE,CAAC,CAAC,CAAA,CAClC,OAAA,CAAQ,KAAI,CAERsG,CAAAA,CAAW,MAAM,MAAA,GAAW,CAAA,CAAG,CACjC,OAAA,CAAQ,GAAA,CAAItG,EAAG,KAAA,CAAM,2BAA2B,CAAC,CAAA,CACjD,OAAA,CAAQ,KAAI,CAGZ,IAAMgH,EAAkB,MAAA,CAAO,OAAA,CAC7BV,EAAW,SACb,CAAA,CACA,GAAIU,CAAAA,CAAgB,MAAA,CAAS,EAAG,CAC9B,OAAA,CAAQ,IAAIhH,CAAAA,CAAG,IAAA,CAAK,2BAA2B,CAAC,CAAA,CAChD,OAAW,CAACmE,CAAAA,CAAKc,CAAM,CAAA,GAAK+B,CAAAA,CAAiB,CAC3C,IAAMf,CAAAA,CAAQgB,GAAYhC,CAAAA,CAAO,KAAK,EAChCmB,CAAAA,CACJnB,CAAAA,CAAO,WAAa,MAAA,CAAY,CAAA,EAAA,EAAKA,EAAO,QAAQ,CAAA,GAAA,CAAA,CAAQ,GAC9D,OAAA,CAAQ,GAAA,CAAI,KAAKjF,CAAAA,CAAG,IAAA,CAAKmE,CAAG,CAAC,CAAA,EAAA,EAAK8B,CAAK,CAAA,EAAGG,CAAG,EAAE,EACjD,CACA,QAAQ,GAAA,GACV,CACF,CAAA,KAAO,CACL,QAAQ,GAAA,CACN,CAAA,EAAGpG,EAAG,MAAA,CAAO,MAAA,CAAOsG,EAAW,KAAA,CAAM,MAAM,CAAC,CAAC,CAAA;AAAA,CAC/C,CAAA,CAEA,IAAA,IAAWX,CAAAA,IAAKW,CAAAA,CAAW,KAAA,CAAO,CAChC,OAAA,CAAQ,GAAA,CACN,CAAA,EAAGtG,CAAAA,CAAG,MAAA,CAAO,QAAG,CAAC,CAAA,CAAA,EAAIA,CAAAA,CAAG,IAAA,CAAK2F,CAAAA,CAAE,WAAA,CAAY,IAAI,CAAC,CAAA,MAAA,EAAS3F,CAAAA,CAAG,GAAA,CAAI2F,CAAAA,CAAE,EAAE,CAAC,CAAA,CAAA,CACvE,CAAA,CACA,OAAA,CAAQ,IAAI,CAAA,mBAAA,EAAsB3F,CAAAA,CAAG,IAAA,CAAK2F,CAAAA,CAAE,cAAc,CAAC,CAAA,CAAE,CAAA,CAG7D,IAAMuB,CAAAA,CAAU,CAAE,GAAGvB,CAAAA,CAAE,WAAY,CAAA,CACnC,OAAQuB,EAAoC,IAAA,CACxB,MAAA,CAAO,IAAA,CAAKA,CAAO,CAAA,CACvB,MAAA,CAAS,CAAA,EACvB,OAAA,CAAQ,IAAI,CAAA,WAAA,EAAc,IAAA,CAAK,SAAA,CAAUA,CAAO,CAAC,CAAA,CAAE,CAAA,CAIrD,IAAMC,EAAkBb,CAAAA,CAAW,SAAA,CAA4EX,CAAAA,CAAE,EAAE,CAAA,CAC/GwB,CAAAA,CACF,OAAA,CAAQ,GAAA,CACN,CAAA,YAAA,EAAeF,EAAAA,CAAYE,CAAAA,CAAe,KAAK,CAAC,CAAA,EAAGA,CAAAA,CAAe,KAAA,CAAQ,WAAMA,CAAAA,CAAe,KAAK,CAAA,CAAA,CAAK,EAAE,CAAA,CAC7G,CAAA,CAGoBb,CAAAA,CAAW,YAAA,CAAa,KACzCE,CAAAA,EACCA,CAAAA,CAAE,WAAA,GAAgBb,CAAAA,CAAE,WAAA,CAAY,IAAA,EAChCa,CAAAA,CAAE,WAAA,GAAgB,aACtB,CAAA,EAEE,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAKxG,CAAAA,CAAG,GAAA,CAAI,sCAAsC,CAAC,CAAA,CAAE,CAAA,CAIrE,OAAA,CAAQ,GAAA,GACV,CAEA,OAAA,CAAQ,GAAA,CACNA,EAAG,GAAA,CACD,CAAA,IAAA,EAAOA,CAAAA,CAAG,IAAA,CAAK,2CAA2C,CAAC,CAAA,0BAAA,CAC7D,CACF,EACF,CAGF0G,CAAAA,CAAO,IAAA,GACT,CAEA,SAASO,EAAAA,CAAYhB,CAAAA,CAAuB,CAC1C,OAAQA,CAAAA,EACN,KAAK,UAAA,CACH,OAAOjG,CAAAA,CAAG,KAAA,CAAM,UAAU,CAAA,CAC5B,KAAK,SAAA,CACH,OAAOA,CAAAA,CAAG,GAAA,CAAI,SAAS,EACzB,KAAK,UAAA,CACH,OAAOA,CAAAA,CAAG,MAAA,CAAO,UAAU,CAAA,CAC7B,KAAK,UACH,OAAOA,CAAAA,CAAG,MAAA,CAAO,SAAS,CAAA,CAC5B,KAAK,WAAA,CACH,OAAOA,EAAG,GAAA,CAAI,WAAW,CAAA,CAC3B,QACE,OAAOA,CAAAA,CAAG,GAAA,CAAIiG,CAAK,CACvB,CACF,CC3KA,SAASvG,EAAAA,CAAUC,CAAAA,CAA0D,CAC3E,IAAMC,CAAAA,CAAqB,CAAE,KAAA,CAAO,KAAA,CAAO,IAAA,CAAM,IAAK,CAAA,CAClDa,EAAW,EAAA,CAEf,IAAA,IAASZ,CAAAA,CAAI,CAAA,CAAGA,CAAAA,CAAIF,CAAAA,CAAK,MAAA,CAAQE,CAAAA,EAAAA,CAAK,CACpC,IAAM0E,CAAAA,CAAM5E,CAAAA,CAAKE,CAAC,CAAA,CAElB,OAAQ0E,CAAAA,EACN,KAAK,SAAA,CACH3E,CAAAA,CAAK,KAAA,CAAQ,IAAA,CACb,MACF,KAAK,WAAA,CACHA,EAAK,IAAA,CAAO,KAAA,CACZ,MACF,KAAK,UAAA,CAAY,CACf,IAAME,CAAAA,CAAMH,EAAK,EAAEE,CAAC,CAAA,CAChBC,CAAAA,GACFF,CAAAA,CAAK,MAAA,CAASE,CAAAA,CAAAA,CAEhB,KACF,CACA,QACMyE,CAAAA,EAAO,CAACA,CAAAA,CAAI,UAAA,CAAW,GAAG,CAAA,EAAK,CAAC9D,CAAAA,GAClCA,CAAAA,CAAW8D,CAAAA,EAEjB,CACF,CAEA,OAAO,CAAE,QAAA,CAAA9D,EAAU,IAAA,CAAAb,CAAK,CAC1B,CAMA,SAASwH,EAAAA,CAAiBd,CAAAA,CAaf,CACT,IAAM5B,CAAAA,CAAkB,EAAC,CAEzBA,CAAAA,CAAM,IAAA,CAAK1E,CAAAA,CAAG,IAAA,CAAK,kBAAkB,CAAC,CAAA,CACtC0E,CAAAA,CAAM,IAAA,CAAK1E,CAAAA,CAAG,GAAA,CAAI,QAAA,CAAI,MAAA,CAAO,EAAE,CAAC,CAAC,CAAA,CACjC0E,CAAAA,CAAM,IAAA,CAAK,EAAE,CAAA,CAGb,IAAM2C,CAAAA,CAAgB,IAAI,GAAA,CAK1B,IAAA,IAAW3E,CAAAA,IAAK4D,CAAAA,CAAW,WAAA,CACzBe,CAAAA,CAAc,IAAI3E,CAAAA,CAAE,EAAA,CAAI,CACtB,QAAA,CAAU,IAAI,GAAA,CACd,MAAA,CAAQA,CAAAA,CAAE,MAAA,CACV,QAAA,CAAUA,CAAAA,CAAE,QACd,CAAC,CAAA,CAIH,IAAA,IAAWiD,CAAAA,IAAKW,EAAW,KAAA,CAAO,CAChC,IAAMgB,CAAAA,CAAQD,CAAAA,CAAc,GAAA,CAAI1B,CAAAA,CAAE,cAAc,EAC5C2B,CAAAA,EACFA,CAAAA,CAAM,QAAA,CAAS,GAAA,CAAI3B,CAAAA,CAAE,WAAA,CAAY,IAAI,EAEzC,CAGA,IAAM4B,CAAAA,CAAkB,IAAI,GAAA,CAC5B,IAAA,IAAWf,CAAAA,IAAKF,CAAAA,CAAW,YAAA,CACpBiB,CAAAA,CAAgB,GAAA,CAAIf,CAAAA,CAAE,WAAW,CAAA,EACpCe,CAAAA,CAAgB,GAAA,CAAIf,CAAAA,CAAE,YAAa,EAAE,CAAA,CAEvCe,CAAAA,CAAgB,GAAA,CAAIf,CAAAA,CAAE,WAAW,CAAA,CAAG,KAAKA,CAAAA,CAAE,EAAE,CAAA,CAI/C9B,CAAAA,CAAM,IAAA,CAAK1E,CAAAA,CAAG,IAAA,CAAK,kDAAwC,CAAC,CAAA,CAC5D0E,CAAAA,CAAM,IAAA,CAAK,EAAE,CAAA,CAEb,IAAA,GAAW,CAAClH,CAAAA,CAAIgK,CAAI,CAAA,GAAKH,CAAAA,CAAe,CACtC,IAAMpC,CAAAA,CAASuC,CAAAA,CAAK,MAAA,CAASxH,EAAG,KAAA,CAAM,QAAG,CAAA,CAAIA,CAAAA,CAAG,GAAA,CAAI,QAAG,CAAA,CAGvD,GAFA0E,EAAM,IAAA,CAAK,CAAA,EAAGO,CAAM,CAAA,CAAA,EAAIjF,CAAAA,CAAG,IAAA,CAAKxC,CAAE,CAAC,eAAegK,CAAAA,CAAK,QAAQ,CAAA,CAAA,CAAG,CAAA,CAE9DA,CAAAA,CAAK,QAAA,CAAS,IAAA,CAAO,CAAA,CACvB,IAAA,IAAWC,CAAAA,IAAWD,CAAAA,CAAK,QAAA,CAAU,CACnC9C,CAAAA,CAAM,IAAA,CAAK,CAAA,qBAAA,EAAS1E,EAAG,MAAA,CAAOyH,CAAO,CAAC,CAAA,CAAE,CAAA,CAExC,IAAMpC,CAAAA,CAAYkC,CAAAA,CAAgB,IAAIE,CAAO,CAAA,EAAK,EAAC,CACnD,GAAIpC,CAAAA,CAAU,MAAA,CAAS,CAAA,CACrB,QAAWmB,CAAAA,IAAKnB,CAAAA,CACdX,CAAAA,CAAM,IAAA,CAAK,CAAA,yBAAA,EAAa1E,CAAAA,CAAG,OAAA,CAAQwG,CAAC,CAAC,CAAA,CAAE,CAAA,CAAA,KAGzC9B,CAAAA,CAAM,IAAA,CAAK,CAAA,yBAAA,EAAa1E,CAAAA,CAAG,GAAA,CAAI,eAAe,CAAC,CAAA,CAAE,EAErD,CAAA,KAEA0E,CAAAA,CAAM,IAAA,CAAK,CAAA,qBAAA,EAAS1E,CAAAA,CAAG,IAAI,0BAA0B,CAAC,CAAA,CAAE,CAAA,CAG1D0E,CAAAA,CAAM,IAAA,CAAK,EAAE,EACf,CAGA,IAAMgD,CAAAA,CAAgB,IAAI,GAAA,CAC1B,IAAA,IAAWrC,CAAAA,IAAakC,CAAAA,CAAgB,MAAA,EAAO,CAC7C,IAAA,IAAWf,CAAAA,IAAKnB,CAAAA,CACdqC,CAAAA,CAAc,GAAA,CAAIlB,CAAC,CAAA,CASvB,GALuBF,CAAAA,CAAW,YAAA,CAAa,GAAA,CAAKE,CAAAA,EAAMA,CAAAA,CAAE,EAAE,CAAA,CACzB,MAAA,CAClCA,GAAM,CAACkB,CAAAA,CAAc,GAAA,CAAIlB,CAAC,CAC7B,CAAA,CAAE,MAAA,CAEkB,CAAA,CAAG,CACrB9B,CAAAA,CAAM,IAAA,CAAK1E,CAAAA,CAAG,IAAA,CAAK,uBAAuB,CAAC,CAAA,CAC3C,IAAA,IAAWwG,CAAAA,IAAKF,CAAAA,CAAW,YAAA,CACpBoB,CAAAA,CAAc,GAAA,CAAIlB,CAAAA,CAAE,EAAE,CAAA,EACzB9B,EAAM,IAAA,CACJ,CAAA,EAAA,EAAK1E,CAAAA,CAAG,OAAA,CAAQwG,CAAAA,CAAE,EAAE,CAAC,CAAA,SAAA,EAAYxG,EAAG,MAAA,CAAOwG,CAAAA,CAAE,WAAW,CAAC,CAAA,CAC3D,EAGN,CAEA,OAAO9B,EAAM,IAAA,CAAK;AAAA,CAAI,CACxB,CAMA,SAASiD,EAAAA,CACPrB,EAgBA7B,CAAAA,CACQ,CAER,IAAMmD,CAAAA,CAOD,EAAC,CACAC,CAAAA,CAA6C,GAQ7CC,CAAAA,CAAW,MAAA,CAAO,IAAA,CAAKrD,CAAK,CAAA,CAClC,IAAA,IAAS5E,CAAAA,CAAI,CAAA,CAAGA,EAAIiI,CAAAA,CAAS,MAAA,CAAQjI,CAAAA,EAAAA,CAAK,CACxC,IAAMsE,CAAAA,CAAM2D,CAAAA,CAASjI,CAAC,CAAA,CACtB+H,EAAM,IAAA,CAAK,CACT,EAAA,CAAI,CAAA,KAAA,EAAQzD,CAAG,CAAA,CAAA,CACf,KAAA,CAAOA,CAAAA,CACP,KAAM,MAAA,CACN,CAAA,CAAG,EAAA,CACH,CAAA,CAAG,EAAA,CAAStE,CAAAA,CAAI,EAAA,CAChB,KAAA,CAAO,SACT,CAAC,EACH,CAGA,IAAA,IAASA,CAAAA,CAAI,CAAA,CAAGA,CAAAA,CAAIyG,CAAAA,CAAW,YAAY,MAAA,CAAQzG,CAAAA,EAAAA,CAAK,CACtD,IAAM6C,EAAI4D,CAAAA,CAAW,WAAA,CAAYzG,CAAC,CAAA,CAClC+H,EAAM,IAAA,CAAK,CACT,EAAA,CAAI,CAAA,WAAA,EAAclF,CAAAA,CAAE,EAAE,CAAA,CAAA,CACtB,KAAA,CAAOA,EAAE,EAAA,CACT,IAAA,CAAM,YAAA,CACN,CAAA,CAAG,GAAA,CACH,CAAA,CAAG,EAAA,CAAS7C,CAAAA,CAAI,GAChB,KAAA,CAAO6C,CAAAA,CAAE,MAAA,CAAS,SAAA,CAAY,SAChC,CAAC,EACH,CAGA,IAAMqF,CAAAA,CAAW,IAAI,GAAA,CACrB,IAAA,IAAWpC,KAAKW,CAAAA,CAAW,KAAA,CACzByB,CAAAA,CAAS,GAAA,CAAIpC,EAAE,WAAA,CAAY,IAAI,CAAA,CAEjC,IAAIqC,CAAAA,CAAS,CAAA,CACb,IAAA,IAAWP,CAAAA,IAAWM,EACpBH,CAAAA,CAAM,IAAA,CAAK,CACT,EAAA,CAAI,CAAA,IAAA,EAAOH,CAAO,CAAA,CAAA,CAClB,KAAA,CAAOA,EACP,IAAA,CAAM,aAAA,CACN,CAAA,CAAG,GAAA,CACH,CAAA,CAAG,EAAA,CAASO,CAAAA,CAAS,EAAA,CACrB,MAAO,SACT,CAAC,CAAA,CACDA,CAAAA,EAAAA,CAIF,QAASnI,CAAAA,CAAI,CAAA,CAAGA,CAAAA,CAAIyG,CAAAA,CAAW,aAAa,MAAA,CAAQzG,CAAAA,EAAAA,CAAK,CACvD,IAAM2G,CAAAA,CAAIF,CAAAA,CAAW,YAAA,CAAazG,CAAC,EACnC+H,CAAAA,CAAM,IAAA,CAAK,CACT,EAAA,CAAI,CAAA,SAAA,EAAYpB,CAAAA,CAAE,EAAE,CAAA,CAAA,CACpB,MAAOA,CAAAA,CAAE,EAAA,CACT,IAAA,CAAM,UAAA,CACN,CAAA,CAAG,GAAA,CACH,CAAA,CAAG,EAAA,CAAS3G,EAAI,EAAA,CAChB,KAAA,CAAO,SACT,CAAC,EACH,CAGA,IAAA,IAAW8F,CAAAA,IAAKW,CAAAA,CAAW,MACzBuB,CAAAA,CAAM,IAAA,CAAK,CACT,IAAA,CAAM,CAAA,WAAA,EAAclC,CAAAA,CAAE,cAAc,CAAA,CAAA,CACpC,GAAI,CAAA,IAAA,EAAOA,CAAAA,CAAE,WAAA,CAAY,IAAI,CAAA,CAC/B,CAAC,CAAA,CAIH,IAAA,IAAWa,KAAKF,CAAAA,CAAW,YAAA,CACrByB,CAAAA,CAAS,GAAA,CAAIvB,CAAAA,CAAE,WAAW,CAAA,EAC5BqB,CAAAA,CAAM,KAAK,CACT,IAAA,CAAM,CAAA,IAAA,EAAOrB,CAAAA,CAAE,WAAW,CAAA,CAAA,CAC1B,EAAA,CAAI,CAAA,SAAA,EAAYA,CAAAA,CAAE,EAAE,CAAA,CACtB,CAAC,CAAA,CAIL,IAAMyB,CAAAA,CAAU,IAAI,GAAA,CAAIL,CAAAA,CAAM,IAAKM,CAAAA,EAAM,CAACA,CAAAA,CAAE,EAAA,CAAIA,CAAC,CAAC,CAAC,CAAA,CAC7CC,EAAW,GAAA,CACXC,CAAAA,CAAO,IAAA,CAAK,GAAA,CAAI,GAAGR,CAAAA,CAAM,GAAA,CAAKM,CAAAA,EAAMA,EAAE,CAAC,CAAC,CAAA,CAAI,EAAA,CAAY,GAExDG,EAAAA,CAAUR,CAAAA,CACb,GAAA,CAAKS,CAAAA,EAAM,CACV,IAAMC,CAAAA,CAAON,CAAAA,CAAQ,GAAA,CAAIK,CAAAA,CAAE,IAAI,CAAA,CACzBE,CAAAA,CAAKP,EAAQ,GAAA,CAAIK,CAAAA,CAAE,EAAE,CAAA,CAC3B,OAAI,CAACC,CAAAA,EAAQ,CAACC,EACL,EAAA,CAGF,CAAA,UAAA,EAAaD,CAAAA,CAAK,CAAA,CAAI,EAAE,CAAA,MAAA,EAASA,CAAAA,CAAK,CAAA,CAAI,EAAE,CAAA,MAAA,EAASC,CAAAA,CAAG,CAAC,CAAA,MAAA,EAASA,EAAG,CAAA,CAAI,EAAE,CAAA,gEAAA,CACpF,CAAC,EACA,IAAA,CAAK;AAAA,IAAA,CAAQ,CAAA,CAEVC,EAAAA,CAAUb,CAAAA,CACb,GAAA,CACEM,CAAAA,EACC,CAAA;AAAA,eAAA,EACSA,CAAAA,CAAE,CAAC,CAAA,KAAA,EAAQA,CAAAA,CAAE,CAAC,0CAA0CA,CAAAA,CAAE,KAAK,CAAA,yBAAA,EAA4BA,CAAAA,CAAE,KAAK,CAAA;AAAA,eAAA,EAClGA,CAAAA,CAAE,CAAA,CAAI,EAAE,CAAA,KAAA,EAAQA,EAAE,CAAA,CAAI,EAAE,CAAA,oEAAA,EAAuEA,CAAAA,CAAE,KAAK,CAAA,EAAA,EAAKQ,EAAAA,CAAWR,CAAAA,CAAE,KAAK,CAAC,CAAA;AAAA,QAAA,CAE3I,EACC,IAAA,CAAK;AAAA,IAAA,CAAQ,CAAA,CAIVS,GADU,CAAC,OAAA,CAAS,cAAe,cAAA,CAAgB,WAAW,EAEjE,GAAA,CACC,CAAC/F,EAAG/C,CAAAA,GACF,CAAA,SAAA,EAAY,GAASA,CAAAA,CAAI,GAAA,CAAW,EAAE,CAAA,uGAAA,EAA0G+C,CAAC,CAAA,OAAA,CACrJ,CAAA,CACC,IAAA,CAAK;AAAA,IAAA,CAAQ,EAEhB,OAAO,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAAA,EAUOuF,CAAQ,aAAaC,CAAI,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAA,EAMnCO,EAAS;AAAA,IAAA,EACTN,EAAO;AAAA,IAAA,EACPI,EAAO;AAAA;AAAA;AAAA,OAAA,CAIb,CAEA,SAASC,EAAAA,CAAWE,CAAAA,CAAsB,CACxC,OAAOA,CAAAA,CACJ,OAAA,CAAQ,IAAA,CAAM,OAAO,CAAA,CACrB,OAAA,CAAQ,KAAM,MAAM,CAAA,CACpB,OAAA,CAAQ,IAAA,CAAM,MAAM,CAAA,CACpB,OAAA,CAAQ,IAAA,CAAM,QAAQ,CAC3B,CAMA,eAAsBC,EAAAA,CAAalJ,CAAAA,CAAgB,CACjD,GAAM,CAAE,QAAA,CAAAc,CAAAA,CAAU,IAAA,CAAAb,CAAK,CAAA,CAAIF,EAAAA,CAAUC,CAAI,CAAA,CAEpCc,CAAAA,GACH,OAAA,CAAQ,KAAA,CAAM,uEAAuE,EACrF,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,CAAA,CAGhB,IAAMiG,CAAAA,CAAS,MAAM3C,CAAAA,CAAWtD,CAAQ,CAAA,CAEnCiG,CAAAA,CAAO,SAAA,EACVA,CAAAA,CAAO,KAAA,GAGT,IAAMJ,CAAAA,CAAaI,CAAAA,CAAO,OAAA,EAAQ,CAElC,GAAI9G,EAAK,KAAA,CAAO,CACd,OAAA,CAAQ,GAAA,CAAIwH,EAAAA,CAAiBd,CAAU,CAAC,CAAA,CACxCI,CAAAA,CAAO,IAAA,EAAK,CAEZ,MACF,CAGA,IAAMC,CAAAA,CAAoC,EAAC,CAC3C,GAAID,CAAAA,CAAO,KAAA,CACT,IAAA,IAAWvC,KAAO,MAAA,CAAO,IAAA,CAAKuC,CAAAA,CAAO,KAAK,CAAA,CACxC,GAAI,CACFC,CAAAA,CAASxC,CAAG,CAAA,CAAIuC,CAAAA,CAAO,KAAA,CAAMvC,CAAG,EAClC,MAAQ,CACNwC,CAAAA,CAASxC,CAAG,CAAA,CAAI,KAClB,CAIJ,IAAM2E,CAAAA,CAAOnB,EAAAA,CAAgBrB,CAAAA,CAAYK,CAAQ,CAAA,CAC3CoC,CAAAA,CAAanJ,CAAAA,CAAK,QAAUtC,IAAAA,CAAK,OAAA,CAAQ,GAAA,EAAI,CAAG,uBAAuB,CAAA,CAK7E,GAHAwD,aAAAA,CAAciI,CAAAA,CAAYD,CAAAA,CAAM,OAAO,CAAA,CACvC,OAAA,CAAQ,IAAI,CAAA,EAAG9I,CAAAA,CAAG,KAAA,CAAM,WAAW,CAAC,CAAA,CAAA,EAAIA,CAAAA,CAAG,GAAA,CAAI+I,CAAU,CAAC,CAAA,CAAE,CAAA,CAExDnJ,CAAAA,CAAK,IAAA,CACP,GAAI,CACF,GAAM,CAAE,QAAA,CAAAoJ,CAAS,CAAA,CAAI,MAAM,OAAO,eAAoB,CAAA,CAChDC,CAAAA,CACJ,OAAA,CAAQ,QAAA,GAAa,QAAA,CACjB,OACA,OAAA,CAAQ,QAAA,GAAa,OAAA,CACnB,OAAA,CACA,UAAA,CACRD,CAAAA,CAASC,CAAAA,CAAS,CAACF,CAAU,CAAC,CAAA,CAC9B,OAAA,CAAQ,GAAA,CAAI/I,CAAAA,CAAG,IAAI,oBAAoB,CAAC,EAC1C,CAAA,KAAQ,CACN,OAAA,CAAQ,GAAA,CACNA,CAAAA,CAAG,GAAA,CAAI,CAAA,KAAA,EAAQ+I,CAAU,CAAA,mCAAA,CAAqC,CAChE,EACF,CAGFrC,CAAAA,CAAO,IAAA,GACT,CCrYA,SAAShH,EAAAA,CAAUC,CAAAA,CAA+B,CAChD,IAAMC,CAAAA,CAAsB,CAAE,GAAA,CAAK,OAAA,CAAQ,GAAA,EAAM,CAAA,CAEjD,IAAA,IAASC,CAAAA,CAAI,CAAA,CAAGA,CAAAA,CAAIF,CAAAA,CAAK,MAAA,CAAQE,CAAAA,EAAAA,CAC/B,GAAIF,CAAAA,CAAKE,CAAC,CAAA,GAAM,OAAA,CAAS,CACvB,IAAMC,CAAAA,CAAMH,CAAAA,CAAK,EAAEE,CAAC,CAAA,CAChBC,CAAAA,GACFF,EAAK,GAAA,CAAME,CAAAA,EAEf,CAGF,OAAOF,CACT,CAaA,SAASsJ,EAAAA,CAAmB3K,CAAAA,CAA0B,CACpD,IAAMG,CAAAA,CAAUpB,IAAAA,CAAKiB,CAAAA,CAAK,cAAc,CAAA,CACxC,GAAI,CAAClB,UAAAA,CAAWqB,CAAO,CAAA,CACrB,OAAO,CACL,KAAA,CAAO,+BAAA,CACP,MAAA,CAAQ,KAAA,CACR,OAAA,CAAS,uBAAA,CACT,GAAA,CAAK,yCACP,CAAA,CAGF,IAAMmD,CAAAA,CAAM,IAAA,CAAK,KAAA,CAAMlD,aAAaD,CAAAA,CAAS,OAAO,CAAC,CAAA,CAC/CyK,CAAAA,CAAO,CAAE,GAAGtH,CAAAA,CAAI,YAAA,CAAc,GAAGA,CAAAA,CAAI,eAAgB,CAAA,CAE3D,OAAKsH,EAAK,qBAAqB,CAAA,CASxB,CACL,KAAA,CAAO,+BAAA,CACP,MAAA,CAAQ,IAAA,CACR,OAAA,CAAS,CAAA,CAAA,EAAIA,CAAAA,CAAK,qBAAqB,CAAC,CAAA,CAC1C,CAAA,CAZS,CACL,KAAA,CAAO,+BAAA,CACP,MAAA,CAAQ,KAAA,CACR,OAAA,CAAS,2BAAA,CACT,GAAA,CAAK,uCACP,CAQJ,CAEA,SAASC,EAAAA,CAA0B7K,CAAAA,CAA0B,CAC3D,IAAMG,CAAAA,CAAUpB,IAAAA,CAAKiB,CAAAA,CAAK,cAAc,CAAA,CACxC,GAAI,CAAClB,UAAAA,CAAWqB,CAAO,CAAA,CACrB,OAAO,CACL,KAAA,CAAO,+BAAA,CACP,OAAQ,IAAA,CACR,OAAA,CAAS,2BACX,CAAA,CAGF,IAAMmD,CAAAA,CAAM,IAAA,CAAK,KAAA,CAAMlD,YAAAA,CAAaD,CAAAA,CAAS,OAAO,CAAC,CAAA,CAC/CyK,CAAAA,CAAO,CAAE,GAAGtH,CAAAA,CAAI,YAAA,CAAc,GAAGA,CAAAA,CAAI,eAAgB,EAErDwH,CAAAA,CAAoB,MAAA,CAAO,IAAA,CAAKF,CAAI,CAAA,CAAE,MAAA,CAAQG,GAClDA,CAAAA,CAAE,UAAA,CAAW,iBAAiB,CAChC,CAAA,CAEA,OAAID,CAAAA,CAAkB,MAAA,EAAU,CAAA,CACvB,CACL,KAAA,CAAO,+BAAA,CACP,MAAA,CAAQ,IAAA,CACR,QAASA,CAAAA,CAAkB,MAAA,GAAW,CAAA,CAAI,mBAAA,CAAsB,gBAClE,CAAA,CAGK,CACL,KAAA,CAAO,+BAAA,CACP,MAAA,CAAQ,IAAA,CACR,OAAA,CAAS,CAAA,EAAGA,CAAAA,CAAkB,MAAM,CAAA,WAAA,EAAcA,CAAAA,CAAkB,IAAA,CAAK,IAAI,CAAC,CAAA,CAChF,CACF,CAEA,SAASE,EAAAA,CAAgBhL,CAAAA,CAA0B,CACjD,IAAMiL,CAAAA,CAAelM,KAAKiB,CAAAA,CAAK,eAAe,CAAA,CAE9C,GAAI,CAAClB,UAAAA,CAAWmM,CAAY,CAAA,CAC1B,OAAO,CACL,KAAA,CAAO,0BAAA,CACP,MAAA,CAAQ,KAAA,CACR,QAAS,wBAAA,CACT,GAAA,CAAK,uDACP,CAAA,CAGF,GAAI,CAIF,IAAMC,CAAAA,CAFM9K,YAAAA,CAAa6K,CAAAA,CAAc,OAAO,CAAA,CAEzB,OAAA,CAAQ,WAAA,CAAa,EAAE,CAAA,CAAE,OAAA,CAAQ,mBAAA,CAAqB,EAAE,CAAA,CAEvEE,CAAAA,CADS,IAAA,CAAK,KAAA,CAAMD,CAAQ,CAAA,CAChB,eAAA,EAAmB,EAAC,CAEhCE,CAAAA,CAAmB,EAAC,CAe1B,OAbID,CAAAA,CAAG,MAAA,GAAW,CAAA,CAAA,EAChBC,CAAAA,CAAO,IAAA,CAAK,yBAAyB,CAAA,CAIrCD,CAAAA,CAAG,gBAAA,EACH,CAAC,CAAC,SAAA,CAAW,WAAY,QAAQ,CAAA,CAAE,QAAA,CACjCA,CAAAA,CAAG,gBAAA,CAAiB,WAAA,EACtB,CAAA,EAEAC,CAAAA,CAAO,IAAA,CAAK,CAAA,qBAAA,EAAwBD,CAAAA,CAAG,gBAAgB,GAAG,CAAA,CAGxDC,CAAAA,CAAO,MAAA,CAAS,CAAA,CACX,CACL,KAAA,CAAO,0BAAA,CACP,MAAA,CAAQ,CAAA,CAAA,CACR,OAAA,CAASA,CAAAA,CAAO,IAAA,CAAK,IAAI,CAAA,CACzB,IAAK,uEACP,CAAA,CAGK,CACL,KAAA,CAAO,0BAAA,CACP,MAAA,CAAQ,CAAA,CAAA,CACR,OAAA,CAAS,wCACX,CACF,CAAA,KAAQ,CACN,OAAO,CACL,MAAO,0BAAA,CACP,MAAA,CAAQ,IAAA,CACR,OAAA,CAAS,6CACX,CACF,CACF,CAEA,SAASC,EAAAA,CAAwBrL,CAAAA,CAA0B,CACzD,IAAMsL,CAAAA,CAAcvM,KAAKiB,CAAAA,CAAK,cAAc,CAAA,CAE5C,GAAI,CAAClB,UAAAA,CAAWwM,CAAW,CAAA,CACzB,OAAO,CACL,KAAA,CAAO,kCAAA,CACP,MAAA,CAAQ,IAAA,CACR,QAAS,uBACX,CAAA,CAGF,IAAMC,CAAAA,CAAuB,EAAC,CAG9B,GAAI,CACF,IAAMC,CAAAA,CAAWzM,IAAAA,CAAKuM,CAAAA,CAAa,gBAAgB,CAAA,CACnD,GAAIxM,UAAAA,CAAW0M,CAAQ,CAAA,CAAG,CACxB,IAAMC,CAAAA,CAAWC,WAAAA,CAAYF,CAAQ,CAAA,CACrC,IAAA,IAAWlI,CAAAA,IAAOmI,CAAAA,CAAU,CAC1B,IAAME,EAAa5M,IAAAA,CACjByM,CAAAA,CACAlI,CAAAA,CACA,cAAA,CACA,gBAAA,CACA,MACF,CAAA,CACIxE,UAAAA,CAAW6M,CAAU,CAAA,EACvBJ,CAAAA,CAAW,IAAA,CAAK,CAAA,eAAA,EAAkBjI,CAAG,mCAAmC,EAE5E,CACF,CACF,CAAA,KAAQ,CAER,CAEA,OAAIiI,CAAAA,CAAW,MAAA,CAAS,CAAA,CACf,CACL,KAAA,CAAO,kCAAA,CACP,OAAQ,KAAA,CACR,OAAA,CAAS,CAAA,MAAA,EAASA,CAAAA,CAAW,MAAM,CAAA,eAAA,EAAkBA,CAAAA,CAAW,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAC1E,GAAA,CAAK,kDACP,CAAA,CAGK,CACL,KAAA,CAAO,kCAAA,CACP,MAAA,CAAQ,IAAA,CACR,OAAA,CAAS,wBACX,CACF,CAEA,SAASK,EAAAA,CAAsB5L,CAAAA,CAA0B,CACvD,IAAMyC,CAAAA,CAAY,CAChB,cAAA,CACA,mBAAA,CACA,iCAAA,CACA,gBAAA,CACA,aACF,CAAA,CAEMoJ,CAAAA,CAAkB,EAAC,CAEzB,IAAA,IAAWlJ,CAAAA,IAAQF,CAAAA,CAAW,CAC5B,IAAMP,EAAWnD,IAAAA,CAAKiB,CAAAA,CAAK2C,CAAI,CAAA,CAC/B,GAAI7D,UAAAA,CAAWoD,CAAQ,CAAA,CAAG,CACxB,IAAMtC,CAAAA,CAAUQ,YAAAA,CAAa8B,CAAAA,CAAU,OAAO,EAC1CvC,CAAAA,CAAoBC,CAAO,CAAA,EAC7BiM,CAAAA,CAAM,IAAA,CAAKlJ,CAAI,EAEnB,CACF,CAEA,OAAIkJ,CAAAA,CAAM,MAAA,GAAW,CAAA,CACZ,CACL,MAAO,iBAAA,CACP,MAAA,CAAQ,IAAA,CACR,OAAA,CAAS,0BACX,CAAA,CAGK,CACL,KAAA,CAAO,iBAAA,CACP,MAAA,CAAQ,IAAA,CACR,OAAA,CAAS,CAAA,eAAA,EAAkBA,CAAAA,CAAM,KAAK,IAAI,CAAC,CAAA,CAC7C,CACF,CAMA,eAAsBC,EAAAA,CAAc1K,CAAAA,CAAgB,CAClD,IAAMC,CAAAA,CAAOF,EAAAA,CAAUC,CAAI,CAAA,CAE3B,QAAQ,GAAA,EAAI,CACZ,OAAA,CAAQ,GAAA,CAAIK,CAAAA,CAAG,IAAA,CAAKA,EAAG,IAAA,CAAK,kBAAkB,CAAC,CAAC,CAAA,CAChD,OAAA,CAAQ,IAAIA,CAAAA,CAAG,GAAA,CAAI,QAAA,CAAI,MAAA,CAAO,EAAE,CAAC,CAAC,CAAA,CAClC,OAAA,CAAQ,GAAA,EAAI,CAEZ,IAAMsK,CAAAA,CAAS,CACbpB,GAAmBtJ,CAAAA,CAAK,GAAG,CAAA,CAC3BwJ,EAAAA,CAA0BxJ,CAAAA,CAAK,GAAG,CAAA,CAClC2J,EAAAA,CAAgB3J,CAAAA,CAAK,GAAG,CAAA,CACxBgK,EAAAA,CAAwBhK,CAAAA,CAAK,GAAG,EAChCuK,EAAAA,CAAsBvK,CAAAA,CAAK,GAAG,CAChC,CAAA,CAEI2K,CAAAA,CAAW,CAAA,CAEf,IAAA,IAAWC,CAAAA,IAASF,CAAAA,CAAQ,CAC1B,IAAMG,CAAAA,CAAOD,CAAAA,CAAM,OAASxK,CAAAA,CAAG,KAAA,CAAM,QAAG,CAAA,CAAIA,CAAAA,CAAG,GAAA,CAAI,QAAG,CAAA,CACtD,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAGyK,CAAI,CAAA,CAAA,EAAIzK,CAAAA,CAAG,KAAKwK,CAAAA,CAAM,KAAK,CAAC,CAAA,CAAE,CAAA,CAC7C,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAKxK,CAAAA,CAAG,GAAA,CAAIwK,CAAAA,CAAM,OAAO,CAAC,CAAA,CAAE,EAEpC,CAACA,CAAAA,CAAM,MAAA,EAAUA,CAAAA,CAAM,GAAA,GACzB,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAKxK,CAAAA,CAAG,MAAA,CAAO,MAAM,CAAC,CAAA,CAAA,EAAIwK,CAAAA,CAAM,GAAG,CAAA,CAAE,CAAA,CACjDD,CAAAA,EAAAA,CAAAA,CAGF,OAAA,CAAQ,GAAA,GACV,CAEIA,CAAAA,CAAW,CAAA,EACb,OAAA,CAAQ,GAAA,CACNvK,CAAAA,CAAG,MAAA,CAAO,CAAA,EAAGuK,CAAQ,CAAA,2CAAA,CAA6C,CACpE,CAAA,CACA,OAAA,CAAQ,IAAA,CAAK,CAAC,GAEd,OAAA,CAAQ,GAAA,CAAIvK,CAAAA,CAAG,KAAA,CAAM,oBAAoB,CAAC,EAE9C,CCpRA,IAAM0K,EAAAA,CAAuC,CAC3C,iBAAA,CAAmB,CAAC,SAAA,CAAW,cAAA,CAAgB,WAAW,CAAA,CAC1D,gBAAiB,CACf,cAAA,CACA,gBAAA,CACA,sBAAA,CACA,kBAAA,CACA,eAAA,CACA,cAAA,CACA,oBAAA,CACA,YAAA,CACA,aACF,CAAA,CACA,YAAA,CAAc,CACZ,kBAAA,CACA,cACA,YAAA,CACA,eAAA,CACA,eAAA,CACA,cAAA,CACA,UAAA,CACA,WAAA,CACA,QACF,CAAA,CACA,KAAA,CAAO,CAAC,UAAA,CAAY,QAAA,CAAU,YAAA,CAAc,YAAY,EACxD,EAAA,CAAI,CACF,iBAAA,CACA,eAAA,CACA,eAAA,CACA,gBAAA,CACA,kBAAA,CACA,aAAA,CACA,iBAAA,CACA,cACF,CACF,CAAA,CAEA,SAASC,EAAAA,CAAYrI,EAAsB,CACzC,IAAA,GAAW,CAACsI,CAAAA,CAAKC,CAAK,CAAA,GAAK,MAAA,CAAO,OAAA,CAAQH,EAAU,CAAA,CAClD,GAAIG,CAAAA,CAAM,QAAA,CAASvI,CAAI,EACrB,OAAOsI,CAAAA,CAIX,OAAO,OACT,CAEA,SAASE,EAAAA,CAAe3M,CAAAA,CAAyB,CAE/C,IAAMuG,CAAAA,CAAQvG,CAAAA,CAAQ,KAAA,CAAM;AAAA,CAAI,CAAA,CAEhC,IAAA,IAAW4M,CAAAA,IAAQrG,CAAAA,CAAO,CACxB,IAAMsG,CAAAA,CAAUD,CAAAA,CAAK,IAAA,EAAK,CAS1B,GANIC,CAAAA,CAAQ,WAAW,aAAa,CAAA,EAGhCA,CAAAA,CAAQ,UAAA,CAAW,YAAY,CAAA,EAG/BA,EAAQ,UAAA,CAAW,cAAc,CAAA,CACnC,SAIF,IAAMC,CAAAA,CAAaD,EAAQ,KAAA,CAAM,0BAA0B,CAAA,CAC3D,GAAIC,CAAAA,GAAa,CAAC,GAAK,CAACA,CAAAA,CAAW,CAAC,CAAA,CAAE,UAAA,CAAW,GAAG,EAClD,OAAOA,CAAAA,CAAW,CAAC,CAAA,CAIrB,GAAID,CAAAA,CAAQ,UAAA,CAAW,IAAI,CAAA,EAAKA,CAAAA,CAAQ,MAAA,CAAS,CAAA,CAC/C,OAAOA,CAAAA,CAAQ,MAAM,CAAC,CAAA,CAAE,IAAA,EAAK,CAI/B,GACEA,CAAAA,GAAY,IACZ,CAACA,CAAAA,CAAQ,UAAA,CAAW,IAAI,CAAA,EACxB,CAACA,EAAQ,UAAA,CAAW,IAAI,CAAA,EACxB,CAACA,CAAAA,CAAQ,UAAA,CAAW,GAAG,CAAA,CAEvB,KAEJ,CAEA,OAAO,EACT,CAMA,eAAsBE,EAAAA,CAAoBvL,CAAAA,CAAgB,CACxD,IAAIwL,CAAAA,CAEJ,IAAA,IAAStL,EAAI,CAAA,CAAGA,CAAAA,CAAIF,CAAAA,CAAK,MAAA,CAAQE,CAAAA,EAAAA,CAC3BF,CAAAA,CAAKE,CAAC,CAAA,GAAM,UAAA,GACdsL,CAAAA,CAASxL,CAAAA,CAAK,EAAEE,CAAC,CAAA,EAAG,WAAA,EAAY,CAAA,CAIpC,IAAMuL,CAAAA,CAAWC,cAAAA,EAAe,CAEhC,OAAA,CAAQ,KAAI,CACZ,OAAA,CAAQ,GAAA,CAAIrL,CAAAA,CAAG,IAAA,CAAKA,CAAAA,CAAG,KAAK,oBAAoB,CAAC,CAAC,CAAA,CAClD,OAAA,CAAQ,GAAA,CAAIA,EAAG,GAAA,CAAI,QAAA,CAAI,MAAA,CAAO,EAAE,CAAC,CAAC,EAClC,OAAA,CAAQ,GAAA,EAAI,CAGZ,IAAMsL,CAAAA,CAAa,IAAI,IAEvB,IAAA,GAAW,CAAChJ,CAAAA,CAAMnE,CAAO,CAAA,GAAKiN,CAAAA,CAAU,CACtC,IAAMR,CAAAA,CAAMD,EAAAA,CAAYrI,CAAI,CAAA,CAExB6I,CAAAA,EAAU,CAACP,CAAAA,CAAI,WAAA,EAAY,CAAE,QAAA,CAASO,CAAM,CAAA,EAAK,CAAC7I,CAAAA,CAAK,QAAA,CAAS6I,CAAM,CAAA,GAIrEG,CAAAA,CAAW,GAAA,CAAIV,CAAG,GACrBU,CAAAA,CAAW,GAAA,CAAIV,CAAAA,CAAK,EAAE,CAAA,CAExBU,EAAW,GAAA,CAAIV,CAAG,CAAA,CAAG,IAAA,CAAK,CAAE,IAAA,CAAAtI,EAAM,IAAA,CAAMwI,EAAAA,CAAe3M,CAAO,CAAE,CAAC,CAAA,EACnE,CAEA,GAAImN,CAAAA,CAAW,IAAA,GAAS,CAAA,CAAG,CACzB,OAAA,CAAQ,GAAA,CAAItL,EAAG,GAAA,CAAI,+BAA+B,CAAC,CAAA,CAEnD,MACF,CAGA,IAAMuL,CAAAA,CAAgB,MAAA,CAAO,IAAA,CAAKb,EAAU,CAAA,CACtCc,CAAAA,CAAmB,CAAC,GAAGF,CAAAA,CAAW,IAAA,EAAM,CAAA,CAAE,IAAA,CAC9C,CAACG,CAAAA,CAAGC,CAAAA,GAAAA,CAAOH,CAAAA,CAAc,OAAA,CAAQE,CAAC,CAAA,EAAK,EAAA,GAAOF,EAAc,OAAA,CAAQG,CAAC,CAAA,EAAK,EAAA,CAC5E,CAAA,CAEA,IAAA,IAAWd,KAAOY,CAAAA,CAAkB,CAClC,IAAMG,CAAAA,CAAQL,CAAAA,CAAW,GAAA,CAAIV,CAAG,CAAA,CAChC,OAAA,CAAQ,GAAA,CAAI5K,CAAAA,CAAG,IAAA,CAAK4K,CAAG,CAAC,CAAA,CAExB,IAAA,IAAWgB,CAAAA,IAAQD,CAAAA,CAAO,CACxB,IAAME,EAAOD,CAAAA,CAAK,IAAA,CAAO5L,CAAAA,CAAG,GAAA,CAAI,CAAA,QAAA,EAAM4L,CAAAA,CAAK,IAAI,CAAA,CAAE,CAAA,CAAI,EAAA,CACrD,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK5L,EAAG,IAAA,CAAK4L,CAAAA,CAAK,IAAI,CAAC,CAAA,EAAGC,CAAI,CAAA,CAAE,EAC9C,CAEA,OAAA,CAAQ,GAAA,GACV,CAEA,OAAA,CAAQ,IACN7L,CAAAA,CAAG,GAAA,CAAI,CAAA,EAAGoL,CAAAA,CAAS,IAAI,CAAA,yBAAA,EAA4BpL,EAAG,IAAA,CAAK,gCAAgC,CAAC,CAAA,gBAAA,CAAkB,CAChH,EACF,CAMA,eAAsB8L,EAAAA,CACpBxJ,CAAAA,CACA3C,CAAAA,CACA,CACA,IAAIoM,CAAAA,CAAO,OAAA,CAAQ,GAAA,EAAI,CAEvB,IAAA,IAASlM,CAAAA,CAAI,CAAA,CAAGA,CAAAA,CAAIF,EAAK,MAAA,CAAQE,CAAAA,EAAAA,CAC/B,GAAIF,CAAAA,CAAKE,CAAC,CAAA,GAAM,SAAU,CACxB,IAAMC,CAAAA,CAAMH,CAAAA,CAAK,EAAEE,CAAC,EAChBC,CAAAA,GACFiM,CAAAA,CAAOjM,CAAAA,EAEX,CAGGwC,CAAAA,GACH,OAAA,CAAQ,KAAA,CAAM,sDAAsD,CAAA,CACpE,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,CAAA,CAGhB,IAAMnE,EAAU6N,UAAAA,CAAW1J,CAAI,CAAA,CAE1BnE,CAAAA,GACH,OAAA,CAAQ,KAAA,CAAM,YAAYmE,CAAI,CAAA,YAAA,CAAc,CAAA,CAC5C,OAAA,CAAQ,KAAA,CACN,CAAA,IAAA,EAAOtC,EAAG,IAAA,CAAK,yBAAyB,CAAC,CAAA,2BAAA,CAC3C,CAAA,CACA,OAAA,CAAQ,KAAK,CAAC,CAAA,CAAA,CAIhB,IAAMiM,CAAAA,CAAY9N,CAAAA,CACf,OAAA,CACC,gDACA,oCACF,CAAA,CACC,OAAA,CACC,sCAAA,CACA,4BACF,CAAA,CACC,QACC,oCAAA,CACA,0BACF,CAAA,CAEIsC,CAAAA,CAAWnD,IAAAA,CAAKyO,CAAAA,CAAM,GAAGzJ,CAAI,CAAA,GAAA,CAAK,CAAA,CAEpCjF,UAAAA,CAAWoD,CAAQ,CAAA,GACrB,OAAA,CAAQ,KAAA,CAAM,CAAA,qBAAA,EAAwBL,QAAAA,CAAS,OAAA,CAAQ,GAAA,EAAI,CAAGK,CAAQ,CAAC,CAAA,CAAE,CAAA,CACzE,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,CAAA,CAGhB,IAAMlC,CAAAA,CAAME,OAAAA,CAAQgC,CAAQ,CAAA,CACvBpD,UAAAA,CAAWkB,CAAG,GACjBsC,SAAAA,CAAUtC,CAAAA,CAAK,CAAE,SAAA,CAAW,IAAK,CAAC,CAAA,CAGpCuC,aAAAA,CAAcL,CAAAA,CAAUwL,CAAAA,CAAW,OAAO,CAAA,CAE1C,IAAM9I,CAAAA,CAAM/C,SAAS,OAAA,CAAQ,GAAA,EAAI,CAAGK,CAAQ,CAAA,CAC5C,OAAA,CAAQ,IAAI,CAAA,EAAGT,CAAAA,CAAG,KAAA,CAAM,QAAQ,CAAC,CAAA,CAAA,EAAIA,EAAG,IAAA,CAAKsC,CAAI,CAAC,CAAA,QAAA,EAAMtC,CAAAA,CAAG,GAAA,CAAImD,CAAG,CAAC,CAAA,CAAE,EACvE,CCvNA,IAAM+I,EAAAA,CAAO;AAAA,EACXtP,CAAQ,CAAA;;AAAA,OAAA,EAEDA,CAAQ,CAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA,CAAA,CAgDf,MAAK,CAEP,eAAeuP,EAAAA,EAAO,CACpB,IAAMxM,CAAAA,CAAO,OAAA,CAAQ,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA,CAOjC,GAAA,CALIA,EAAK,MAAA,GAAW,CAAA,EAAKA,EAAK,QAAA,CAAS,QAAQ,CAAA,EAAKA,CAAAA,CAAK,SAAS,IAAI,CAAA,IACpE,QAAQ,GAAA,CAAIuM,EAAI,EAChB,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,CAAA,CAGZvM,EAAK,QAAA,CAAS,WAAW,GAAKA,CAAAA,CAAK,QAAA,CAAS,IAAI,CAAA,CAAG,CACrD,GAAM,CAAE,aAAAhB,CAAa,CAAA,CAAI,MAAM,OAAO,IAAS,EACzC,CAAE,aAAA,CAAAyN,CAAc,CAAA,CAAI,MAAM,OAAO,KAAU,EAC3C,CAAE,OAAA,CAAA3N,EAAS,IAAA,CAAAnB,CAAK,CAAA,CAAI,aAAa,MAAW,CAAA,CAE5C+O,EAAY5N,CAAAA,CAAQ2N,CAAAA,CAAc,YAAY,GAAG,CAAC,CAAA,CAClDvK,CAAAA,CAAM,KAAK,KAAA,CACflD,CAAAA,CAAarB,EAAK+O,CAAAA,CAAW,IAAA,CAAM,cAAc,CAAA,CAAG,OAAO,CAC7D,CAAA,CAEA,QAAQ,GAAA,CAAIxK,CAAAA,CAAI,OAAO,CAAA,CACvB,OAAA,CAAQ,KAAK,CAAC,EAChB,CAEA,IAAMyK,EAAU3M,CAAAA,CAAK,CAAC,EAEtB,OAAQ2M,CAAAA,EACN,KAAK,MAAA,CAAQ,CACX,MAAM3J,GAAYhD,CAAAA,CAAK,KAAA,CAAM,CAAC,CAAC,CAAA,CAC/B,KACF,CAEA,KAAK,KAAA,CAAO,CACV,IAAM4M,CAAAA,CAAa5M,CAAAA,CAAK,CAAC,CAAA,CACnB2C,CAAAA,CAAO3C,EAAK,CAAC,CAAA,CAEf4M,CAAAA,GAAe,QAAA,EACZjK,IACH,OAAA,CAAQ,KAAA,CAAM,oCAAoC,CAAA,CAClD,OAAA,CAAQ,KAAK,CAAC,CAAA,CAAA,CAEhB,MAAMuB,EAAAA,CAAiBvB,EAAM3C,CAAAA,CAAK,KAAA,CAAM,CAAC,CAAC,CAAA,EACjC4M,IAAe,cAAA,EACnBjK,CAAAA,GACH,OAAA,CAAQ,KAAA,CAAM,0CAA0C,CAAA,CACxD,OAAA,CAAQ,KAAK,CAAC,CAAA,CAAA,CAEhB,MAAMwB,EAAAA,CAAuBxB,CAAAA,CAAM3C,CAAAA,CAAK,KAAA,CAAM,CAAC,CAAC,CAAA,GAEhD,QAAQ,KAAA,CACN,CAAA,oBAAA,EAAuB4M,GAAc,QAAQ;AAAA,OAAA,EACjC3P,CAAQ,CAAA;AAAA,OAAA,EACRA,CAAQ,0BACtB,CAAA,CACA,OAAA,CAAQ,KAAK,CAAC,CAAA,CAAA,CAEhB,KACF,CAEA,KAAK,UAAW,CACd,MAAM6J,GAAe9G,CAAAA,CAAK,KAAA,CAAM,CAAC,CAAC,CAAA,CAClC,KACF,CAEA,KAAK,SAAA,CAAW,CACd,MAAMmH,EAAAA,CAAenH,EAAK,KAAA,CAAM,CAAC,CAAC,CAAA,CAClC,KACF,CAEA,KAAK,OAAA,CAAS,CACZ,MAAMkJ,EAAAA,CAAalJ,EAAK,KAAA,CAAM,CAAC,CAAC,CAAA,CAChC,KACF,CAEA,KAAK,QAAA,CAAU,CACb,MAAM0K,EAAAA,CAAc1K,CAAAA,CAAK,MAAM,CAAC,CAAC,EACjC,KACF,CAEA,KAAK,UAAA,CAAY,CACf,IAAM4M,CAAAA,CAAa5M,CAAAA,CAAK,CAAC,CAAA,CAErB4M,CAAAA,GAAe,OACjB,MAAMxM,EAAAA,CAAeJ,CAAAA,CAAK,KAAA,CAAM,CAAC,CAAC,EACzB4M,CAAAA,GAAe,QAAA,CACxB,MAAMxL,EAAAA,CAAqBpB,CAAAA,CAAK,MAAM,CAAC,CAAC,EAC/B4M,CAAAA,GAAe,OAAA,CACxB,MAAMjL,EAAAA,CAAoB3B,CAAAA,CAAK,MAAM,CAAC,CAAC,GAEvC,OAAA,CAAQ,KAAA,CACN,CAAA,oBAAA,EAAuB4M,CAAAA,EAAc,QAAQ;AAAA,OAAA,EACjC3P,CAAQ,CAAA;AAAA,OAAA,EACRA,CAAQ,CAAA;AAAA,OAAA,EACRA,CAAQ,CAAA,eAAA,CACtB,CAAA,CACA,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,CAAA,CAEhB,KACF,CAEA,KAAK,UAAA,CAAY,CACf,IAAM2P,EAAa5M,CAAAA,CAAK,CAAC,CAAA,CAEzB,GAAI4M,CAAAA,GAAe,MAAA,CACjB,MAAMrB,EAAAA,CAAoBvL,CAAAA,CAAK,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA,KAAA,GAC9B4M,CAAAA,GAAe,OAAQ,CAChC,IAAMjK,CAAAA,CAAO3C,CAAAA,CAAK,CAAC,CAAA,CACd2C,CAAAA,GACH,OAAA,CAAQ,KAAA,CAAM,uCAAuC,CAAA,CACrD,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,CAAA,CAEhB,MAAMwJ,EAAAA,CAAoBxJ,CAAAA,CAAM3C,CAAAA,CAAK,KAAA,CAAM,CAAC,CAAC,EAC/C,CAAA,KACE,OAAA,CAAQ,KAAA,CACN,CAAA,oBAAA,EAAuB4M,CAAAA,EAAc,QAAQ;AAAA,OAAA,EACjC3P,CAAQ,CAAA;AAAA,OAAA,EACRA,CAAQ,CAAA,oCAAA,CACtB,CAAA,CACA,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,CAEhB,KACF,CAEA,QACE,OAAA,CAAQ,KAAA,CACN,oBAAoB0P,CAAO;AAAA,KAAA,EAAU1P,CAAQ,CAAA,mBAAA,CAC/C,CAAA,CACA,OAAA,CAAQ,IAAA,CAAK,CAAC,EAClB,CACF,CAEAuP,EAAAA,EAAK,CAAE,KAAA,CAAO/H,GAAQ,CACpB,OAAA,CAAQ,KAAA,CAAMA,CAAAA,CAAI,OAAA,EAAWA,CAAG,EAChC,OAAA,CAAQ,IAAA,CAAK,CAAC,EAChB,CAAC,CAAA","file":"cli.js","sourcesContent":["export const CLI_NAME = \"directive\";\nexport const CLI_ALIAS = \"dr\";\nexport const PACKAGE_NAME = \"@directive-run/cli\";\nexport const SECTION_START = \"<!-- directive:start -->\";\nexport const SECTION_END = \"<!-- directive:end -->\";\n","import { existsSync } from \"node:fs\";\nimport { join } from \"node:path\";\n\nexport interface DetectedTool {\n name: string;\n id: \"cursor\" | \"claude\" | \"copilot\" | \"windsurf\" | \"cline\";\n outputPath: string;\n}\n\nconst TOOL_SIGNALS: Array<{\n id: DetectedTool[\"id\"];\n name: string;\n signals: string[];\n outputPath: string;\n}> = [\n {\n id: \"cursor\",\n name: \"Cursor\",\n signals: [\".cursor\", \".cursorrules\"],\n outputPath: \".cursorrules\",\n },\n {\n id: \"claude\",\n name: \"Claude Code\",\n signals: [\".claude\"],\n outputPath: \".claude/CLAUDE.md\",\n },\n {\n id: \"copilot\",\n name: \"GitHub Copilot\",\n signals: [\".github\"],\n outputPath: \".github/copilot-instructions.md\",\n },\n {\n id: \"windsurf\",\n name: \"Windsurf\",\n signals: [\".windsurfrules\"],\n outputPath: \".windsurfrules\",\n },\n {\n id: \"cline\",\n name: \"Cline\",\n signals: [\".clinerules\"],\n outputPath: \".clinerules\",\n },\n];\n\nexport function detectTools(rootDir: string): DetectedTool[] {\n const detected: DetectedTool[] = [];\n\n for (const tool of TOOL_SIGNALS) {\n const hasSignal = tool.signals.some((signal) =>\n existsSync(join(rootDir, signal)),\n );\n\n if (hasSignal) {\n detected.push({\n name: tool.name,\n id: tool.id,\n outputPath: join(rootDir, tool.outputPath),\n });\n }\n }\n\n return detected;\n}\n\nexport function getToolConfig(id: DetectedTool[\"id\"]) {\n const tool = TOOL_SIGNALS.find((t) => t.id === id);\n if (!tool) {\n throw new Error(`Unknown tool: ${id}`);\n }\n\n return tool;\n}\n\nexport function getAllToolIds(): DetectedTool[\"id\"][] {\n return TOOL_SIGNALS.map((t) => t.id);\n}\n","import { SECTION_END, SECTION_START } from \"./constants.js\";\n\n/**\n * Replace the Directive section within existing content, or append it.\n * Section markers: <!-- directive:start --> ... <!-- directive:end -->\n */\nexport function mergeSection(\n existingContent: string,\n newSection: string,\n): string {\n const startIdx = existingContent.indexOf(SECTION_START);\n const endIdx = existingContent.indexOf(SECTION_END);\n\n const wrapped = `${SECTION_START}\\n${newSection}\\n${SECTION_END}`;\n\n if (startIdx !== -1 && endIdx !== -1 && endIdx > startIdx) {\n return (\n existingContent.slice(0, startIdx) +\n wrapped +\n existingContent.slice(endIdx + SECTION_END.length)\n );\n }\n\n const separator = existingContent.endsWith(\"\\n\") ? \"\\n\" : \"\\n\\n\";\n\n return existingContent + separator + wrapped + \"\\n\";\n}\n\n/**\n * Check if content already has a Directive section.\n */\nexport function hasDirectiveSection(content: string): boolean {\n return (\n content.includes(SECTION_START) && content.includes(SECTION_END)\n );\n}\n","import { existsSync, readFileSync } from \"node:fs\";\nimport { dirname, join, resolve } from \"node:path\";\n\nexport interface MonorepoInfo {\n isMonorepo: boolean;\n rootDir: string;\n tool?: \"pnpm\" | \"turbo\" | \"npm\" | \"yarn\";\n}\n\nconst MONOREPO_SIGNALS = [\n { file: \"pnpm-workspace.yaml\", tool: \"pnpm\" as const },\n { file: \"turbo.json\", tool: \"turbo\" as const },\n];\n\nexport function detectMonorepo(startDir: string): MonorepoInfo {\n let dir = resolve(startDir);\n\n while (dir !== dirname(dir)) {\n for (const signal of MONOREPO_SIGNALS) {\n if (existsSync(join(dir, signal.file))) {\n return { isMonorepo: true, rootDir: dir, tool: signal.tool };\n }\n }\n\n const pkgPath = join(dir, \"package.json\");\n if (existsSync(pkgPath)) {\n try {\n const pkg = JSON.parse(readFileSync(pkgPath, \"utf-8\"));\n if (pkg.workspaces) {\n const tool = existsSync(join(dir, \"yarn.lock\"))\n ? (\"yarn\" as const)\n : (\"npm\" as const);\n\n return { isMonorepo: true, rootDir: dir, tool };\n }\n } catch {\n // ignore parse errors\n }\n }\n\n dir = dirname(dir);\n }\n\n return { isMonorepo: false, rootDir: startDir };\n}\n","import { getKnowledge } from \"../lib/knowledge.js\";\n\n/**\n * Generate Claude Code rules (~30KB).\n * Strategy: Full anti-patterns + core-patterns + naming + schema-types (most critical),\n * condensed summaries for everything else.\n */\nexport function generateClaudeRules(): string {\n // These 4 files are included in full (~25KB)\n const corePatterns = getKnowledge(\"core-patterns\");\n const antiPatterns = getKnowledge(\"anti-patterns\");\n const naming = getKnowledge(\"naming\");\n const schemaTypes = getKnowledge(\"schema-types\");\n\n return `# Directive — Complete AI Coding Rules\n\n> Constraint-driven runtime for TypeScript. Declare requirements, let the runtime resolve them.\n> https://directive.run | \\`npm install @directive-run/core\\`\n> Full reference with examples: https://directive.run/llms.txt\n\n## Core Patterns\n\n${corePatterns}\n\n---\n\n## Anti-Patterns (All 36)\n\n${antiPatterns}\n\n### AI Package Anti-Patterns (21-36)\n\n| # | WRONG | CORRECT |\n|---|-------|---------|\n| 21 | TS types for factsSchema: \\`{ confidence: number }\\` | Use \\`{ confidence: t.number() }\\` |\n| 22 | \\`facts.cache.push(item)\\` in orchestrator | \\`facts.cache = [...facts.cache, item]\\` |\n| 23 | Returning data from orchestrator \\`resolve\\` | Resolvers return \\`void\\` — mutate \\`context.facts\\` |\n| 24 | Forgetting \\`orchestrator.start()\\` multi-agent | Single: implicit. Multi: must call \\`start()\\` |\n| 25 | Catching \\`Error\\` not \\`GuardrailError\\` | \\`GuardrailError\\` has \\`.guardrailName\\`, \\`.errorCode\\` |\n| 26 | \\`from '@directive-run/ai'\\` for adapters | Subpath: \\`from '@directive-run/ai/openai'\\` |\n| 27 | Assuming \\`{ input_tokens }\\` structure | Normalized: \\`{ inputTokens, outputTokens }\\` |\n| 28 | Same CircuitBreaker across agents | Create separate instances per dependency |\n| 29 | \\`budgetWarningThreshold: 1.5\\` | Must be 0-1 (percentage) |\n| 30 | \\`race\\` minSuccess > agents.length | Must be \\`1 ≤ minSuccess ≤ agents.length\\` |\n| 31 | Async summarizer with autoManage: true | Use \\`autoManage: false\\` for sync control |\n| 32 | Side effects in reflect \\`evaluator\\` | Evaluator must be pure |\n| 33 | Task calling \\`runSingleAgent\\` | Tasks can't call agents — separate node |\n| 34 | Task expecting object input | Input is always \\`string\\` — \\`JSON.parse(input)\\` |\n| 35 | Task ID same as agent ID | IDs share namespace — distinct names |\n| 36 | \\`from '@directive-run/ai/mcp'\\` | \\`from '@directive-run/ai'\\` (main export) |\n\n---\n\n## Naming Conventions\n\n${naming}\n\n---\n\n## Schema Type Builders\n\n${schemaTypes}\n\n---\n\n## Multi-Module Quick Reference\n\n\\`\\`\\`typescript\n// Two modules with cross-module dependency\nconst authSchema = { facts: { token: t.string(), isAuth: t.boolean() } };\nconst authModule = createModule(\"auth\", { schema: authSchema, /* ... */ });\n\nconst cartModule = createModule(\"cart\", {\n schema: { facts: { items: t.array<CartItem>() } },\n crossModuleDeps: { auth: authSchema }, // Declare dependency\n constraints: {\n checkout: {\n when: (facts) => facts.self.items.length > 0 && facts.auth.isAuth, // facts.self.* for own, facts.auth.* for cross\n require: () => ({ type: \"CHECKOUT\" }),\n },\n },\n // ...\n});\n\nconst system = createSystem({ modules: { auth: authModule, cart: cartModule } });\n// Access: system.facts.auth.token, system.events.cart.addItem({...})\n\\`\\`\\`\n\nKey rules:\n- \\`facts.self.*\\` for own module facts in constraints/resolvers\n- \\`facts.otherModule.*\\` for cross-module reads\n- \\`crossModuleDeps\\` must declare consumed schemas\n- \\`system.events.moduleName.eventName(payload)\\` for namespaced events\n- The \\`::\\` separator is internal — always use dot notation\n\n---\n\n## Constraints\n\n- \\`when(facts)\\` → boolean. When true, requirement is emitted.\n- \\`require(facts)\\` → \\`{ type: \"TYPE\", ...data }\\` object (never string literal)\n- \\`priority: number\\` — higher evaluated first\n- \\`after: [\"constraintName\"]\\` — ordering within same priority\n- Async: \\`async: true\\` + \\`deps: ['factName']\\` (deps REQUIRED for async)\n- Constraints DECLARE needs, resolvers FULFILL them — decoupled.\n\n---\n\n## Resolvers\n\n- \\`resolve(req, context)\\` — async, returns \\`void\\`. Mutate \\`context.facts.*\\`.\n- \\`requirement: \"TYPE\"\\` — which type this handles\n- \\`key: (req) => string\\` — deduplication key\n- \\`retry: { attempts: 3, backoff: \"exponential\", initialDelay: 100 }\\`\n- \\`batch: { maxSize: 10, windowMs: 50 }\\` for N+1 prevention\n- Always \\`await system.settle()\\` after start to wait for resolution\n\n---\n\n## System API\n\n- \\`system.facts.fieldName\\` — read/write facts\n- \\`system.derive.derivationName\\` — read derived values\n- \\`system.events.eventName(payload)\\` — dispatch events\n- \\`system.subscribe(listener)\\` — subscribe to all changes\n- \\`system.read(key)\\` — read fact or derivation by string key\n- \\`system.inspect()\\` — full state snapshot\n- \\`system.settle()\\` — wait for async operations\n- \\`system.start()\\` / \\`system.stop()\\` / \\`system.destroy()\\`\n\n---\n\n## React (\\`@directive-run/react\\`)\n\n\\`\\`\\`typescript\nimport { useSelector, useEvent } from \"@directive-run/react\";\n\nconst count = useSelector(system, (s) => s.facts.count);\nconst events = useEvent(system);\n// onClick={() => events.increment()}\n\\`\\`\\`\n\n**NO** \\`useDirective()\\` hook. Use \\`useSelector\\` + \\`useEvent\\`.\n\n---\n\n## Plugins (\\`@directive-run/core/plugins\\`)\n\n\\`devtoolsPlugin()\\`, \\`loggingPlugin()\\`, \\`persistencePlugin(config)\\`,\n\\`createCircuitBreaker(config)\\`, \\`createObservability(config)\\`\n\n---\n\n## AI Package (\\`@directive-run/ai\\`)\n\n### Single-Agent Orchestrator\n\n\\`\\`\\`typescript\nimport { createAgentOrchestrator, t } from '@directive-run/ai';\nimport { createAnthropicRunner } from '@directive-run/ai/anthropic';\n\nconst orchestrator = createAgentOrchestrator({\n runner: createAnthropicRunner({ apiKey }),\n factsSchema: { result: t.string(), confidence: t.number() },\n init: (facts) => { facts.result = \"\"; facts.confidence = 0; },\n maxTokenBudget: 100000,\n budgetWarningThreshold: 0.8,\n guardrails: { input: [...], output: [...] },\n memory: createAgentMemory({ strategy: createSlidingWindowStrategy({ maxMessages: 30 }) }),\n debug: true,\n});\n\nconst result = await orchestrator.run(agent, \"analyze this\");\n\\`\\`\\`\n\n### Multi-Agent\n\n\\`\\`\\`typescript\nimport { createMultiAgentOrchestrator, parallel, sequential, dag } from '@directive-run/ai';\n\nconst orch = createMultiAgentOrchestrator({\n agents: { researcher: agentA, writer: agentB },\n patterns: {\n pipeline: sequential([\"researcher\", \"writer\"]),\n brainstorm: parallel([\"researcher\", \"writer\"], mergeResults),\n workflow: dag([\n { id: \"research\", handler: \"researcher\" },\n { id: \"write\", handler: \"writer\", dependencies: [\"research\"] },\n ]),\n },\n runner,\n});\norch.start(); // Required for multi-agent!\n\\`\\`\\`\n\n8 patterns: \\`parallel\\`, \\`sequential\\`, \\`supervisor\\`, \\`dag\\`, \\`reflect\\`, \\`race\\`, \\`debate\\`, \\`goal\\`\n\n### Adapter Imports (Subpath!)\n\n\\`\\`\\`typescript\nimport { createAnthropicRunner } from '@directive-run/ai/anthropic';\nimport { createOpenAIRunner } from '@directive-run/ai/openai';\nimport { createOllamaRunner } from '@directive-run/ai/ollama';\nimport { createGeminiRunner } from '@directive-run/ai/gemini';\n\\`\\`\\`\n\n### Guardrails\n\n\\`createPIIGuardrail\\`, \\`createModerationGuardrail\\`, \\`createRateLimitGuardrail\\`,\n\\`createToolGuardrail\\`, \\`createOutputSchemaGuardrail\\`, \\`createLengthGuardrail\\`,\n\\`createContentFilterGuardrail\\`\n\n\\`GuardrailResult: { passed: boolean, reason?: string, transformed?: unknown }\\`\n\n### Memory\n\n\\`createAgentMemory({ strategy, summarizer?, autoManage? })\\`\nStrategies: \\`createSlidingWindowStrategy\\`, \\`createTokenBasedStrategy\\`, \\`createHybridStrategy\\`\nSummarizers: \\`createTruncationSummarizer\\`, \\`createKeyPointsSummarizer\\`, \\`createLLMSummarizer(runner)\\`\n\n### Streaming\n\n\\`\\`\\`typescript\nconst streamResult = orchestrator.runStream(agent, \"analyze\");\nfor await (const chunk of streamResult.stream) {\n switch (chunk.type) {\n case \"token\": process.stdout.write(chunk.data); break;\n case \"done\": console.log(\"Tokens:\", chunk.totalTokens); break;\n case \"error\": console.error(chunk.error); break;\n }\n}\n\\`\\`\\`\n\nBackpressure: \\`\"buffer\"\\` (default), \\`\"block\"\\`, \\`\"drop\"\\`\n`;\n}\n","/**\n * Generate Cursor rules (<10KB).\n * Handcrafted condensed content — core patterns, top 10 anti-patterns, naming, 1 mini example.\n */\nexport function generateCursorRules(): string {\n return `# Directive — AI Coding Rules\n\n> Constraint-driven runtime for TypeScript. \\`npm install @directive-run/core\\`\n> Full reference: https://directive.run/llms.txt\n\n## Schema Shape (CRITICAL)\n\n\\`\\`\\`typescript\nimport { createModule, createSystem, t } from \"@directive-run/core\";\n\nconst myModule = createModule(\"name\", {\n schema: {\n facts: { count: t.number(), items: t.array<string>() },\n derivations: { total: \"number\" },\n events: { increment: \"void\", addItem: \"string\" },\n requirements: { FETCH_DATA: { url: \"string\" } },\n },\n init: (facts) => { facts.count = 0; facts.items = []; },\n derive: {\n total: (facts) => facts.items.length + facts.count,\n },\n events: {\n increment: (facts) => { facts.count += 1; },\n addItem: (facts, item) => { facts.items = [...facts.items, item]; },\n },\n constraints: {\n fetchWhenReady: {\n when: (facts) => facts.count > 0 && facts.items.length === 0,\n require: (facts) => ({ type: \"FETCH_DATA\", url: \"/api/items\" }),\n },\n },\n resolvers: {\n fetchData: {\n requirement: \"FETCH_DATA\",\n resolve: async (req, context) => {\n const data = await fetch(req.url).then(r => r.json());\n context.facts.items = data;\n },\n },\n },\n});\n\nconst system = createSystem({ module: myModule });\nawait system.settle();\n\\`\\`\\`\n\n## Top 10 Anti-Patterns\n\n| # | WRONG | CORRECT |\n|---|-------|---------|\n| 1 | \\`facts.profile as ResourceState<Profile>\\` | Remove cast — schema provides types |\n| 2 | \\`{ phase: t.string() }\\` flat schema | \\`schema: { facts: { phase: t.string() } }\\` |\n| 3 | \\`facts.items\\` in multi-module | \\`facts.self.items\\` |\n| 4 | \\`t.map()\\`, \\`t.set()\\`, \\`t.promise()\\` | Don't exist. Use \\`t.object<Map<K,V>>()\\` |\n| 5 | \\`(req, ctx)\\` in resolver | \\`(req, context)\\` — never abbreviate |\n| 6 | \\`createModule(\"n\", { phase: t.string() })\\` | Must wrap: \\`schema: { facts: { ... } }\\` |\n| 7 | \\`system.dispatch('login', {...})\\` | \\`system.events.login({...})\\` |\n| 8 | \\`facts.items.push(item)\\` | \\`facts.items = [...facts.items, item]\\` |\n| 9 | \\`useDirective(system)\\` | \\`useSelector(system, s => s.facts.count)\\` |\n| 10 | \\`facts['auth::status']\\` | \\`facts.auth.status\\` dot notation |\n\n## Naming\n\n- \\`req\\` = requirement (not request). Parameter: \\`(req, context)\\`\n- \\`derive\\` / derivations — never \"computed\" or \"selectors\"\n- Resolvers return \\`void\\` — mutate \\`context.facts\\` instead\n- Always use braces for returns: \\`if (x) { return y; }\\`\n- Multi-module: \\`facts.self.fieldName\\` for own module facts\n- Events: \\`system.events.eventName(payload)\\` — not \\`system.dispatch()\\`\n- Import from main: \\`import { createModule } from '@directive-run/core'\\`\n\n## Schema Types That Exist\n\n\\`t.string<T>()\\`, \\`t.number()\\`, \\`t.boolean()\\`, \\`t.array<T>()\\`, \\`t.object<T>()\\`,\n\\`t.enum(\"a\",\"b\")\\`, \\`t.literal(value)\\`, \\`t.nullable(inner)\\`, \\`t.optional(inner)\\`, \\`t.union(...)\\`\n\nChainable: \\`.default()\\`, \\`.validate()\\`, \\`.transform()\\`, \\`.brand<>()\\`, \\`.refine()\\`\n\n**DO NOT USE** (hallucinations): \\`t.map()\\`, \\`t.set()\\`, \\`t.date()\\`, \\`t.tuple()\\`, \\`t.record()\\`, \\`t.promise()\\`, \\`t.any()\\`\n\n## Key Pattern: Constraint → Requirement → Resolver\n\nWhen the user wants \"do X when Y\": create THREE things:\n1. **Constraint**: \\`when: (facts) => Y_condition\\` → \\`require: { type: \"DO_X\" }\\`\n2. **Resolver**: handles \"DO_X\", calls API, sets \\`context.facts\\`\n3. They are **decoupled**. Constraint declares need, resolver fulfills it.\n`;\n}\n","import { generateCursorRules } from \"./cursor.js\";\n\n/**\n * Generate GitHub Copilot instructions (~12KB).\n * Cursor content + all 20 anti-patterns + schema types detail + AI basics.\n */\nexport function generateCopilotRules(): string {\n const base = generateCursorRules();\n\n // Add anti-patterns 11-19 that cursor doesn't include\n const extraAntiPatterns = `\n## Anti-Patterns 11-19\n\n| # | WRONG | CORRECT |\n|---|-------|---------|\n| 11 | Returning data from \\`resolve\\` | Resolvers return \\`void\\` — mutate \\`context.facts\\` |\n| 12 | Async logic in \\`init\\` | \\`init\\` is synchronous, facts assignment only |\n| 13 | \\`await system.start()\\` without settle | Add \\`await system.settle()\\` after start |\n| 14 | Missing \\`crossModuleDeps\\` | Declare \\`crossModuleDeps: { auth: authSchema }\\` |\n| 15 | \\`require: \"TYPE\"\\` string literal | \\`require: { type: \"TYPE\" }\\` object form |\n| 16 | Passthrough derivation \\`(f) => f.count\\` | Remove — read fact directly |\n| 17 | \\`from '@directive-run/core/module'\\` | \\`from '@directive-run/core'\\` (main export) |\n| 18 | \\`async when()\\` without \\`deps\\` | Add \\`deps: ['factName']\\` for async constraints |\n| 19 | No error boundary on resolver | Use try-catch or module error boundary config |\n`;\n\n // Add multi-module basics\n const multiModule = `\n## Multi-Module\n\n\\`\\`\\`typescript\nconst system = createSystem({\n modules: { auth: authModule, cart: cartModule },\n});\n\n// Access: system.facts.auth.token, system.events.cart.addItem({...})\n// In constraints/resolvers: use facts.self.* for own module\n// Declare deps: crossModuleDeps: { auth: authSchema }\n\\`\\`\\`\n`;\n\n // Add AI basics\n const aiBasics = `\n## AI Package Basics (\\`@directive-run/ai\\`)\n\n\\`\\`\\`typescript\nimport { createAgentOrchestrator, t } from '@directive-run/ai';\nimport { createAnthropicRunner } from '@directive-run/ai/anthropic'; // Subpath import!\n\nconst orchestrator = createAgentOrchestrator({\n runner: createAnthropicRunner({ apiKey: process.env.ANTHROPIC_API_KEY }),\n factsSchema: { result: t.string(), confidence: t.number() }, // Use t.*() !\n init: (facts) => { facts.result = \"\"; facts.confidence = 0; },\n});\n\nconst result = await orchestrator.run(agent, \"analyze this\");\n\\`\\`\\`\n\n**AI Anti-Patterns:**\n- Use \\`t.number()\\` not \\`number\\` for factsSchema\n- Subpath imports: \\`from '@directive-run/ai/anthropic'\\` not \\`from '@directive-run/ai'\\`\n- Token usage normalized: \\`{ inputTokens, outputTokens }\\` (not provider-specific)\n- \\`facts.cache = [...facts.cache, item]\\` not \\`facts.cache.push(item)\\`\n`;\n\n return base + extraAntiPatterns + multiModule + aiBasics;\n}\n","import { generateCopilotRules } from \"./copilot.js\";\n\n/**\n * Generate Cline rules (~12KB).\n * Same content as Copilot.\n */\nexport function generateClineRules(): string {\n return generateCopilotRules();\n}\n","import { generateCopilotRules } from \"./copilot.js\";\n\n/**\n * Generate Windsurf rules (~12KB).\n * Same content as Copilot.\n */\nexport function generateWindsurfRules(): string {\n return generateCopilotRules();\n}\n","import type { DetectedTool } from \"../lib/detect.js\";\nimport { generateClaudeRules } from \"./claude.js\";\nimport { generateClineRules } from \"./cline.js\";\nimport { generateCopilotRules } from \"./copilot.js\";\nimport { generateCursorRules } from \"./cursor.js\";\nimport { generateLlmsTxt } from \"./llms-txt.js\";\nimport { generateWindsurfRules } from \"./windsurf.js\";\n\nconst generators: Record<DetectedTool[\"id\"], () => string> = {\n cursor: generateCursorRules,\n claude: generateClaudeRules,\n copilot: generateCopilotRules,\n windsurf: generateWindsurfRules,\n cline: generateClineRules,\n};\n\nexport function getTemplate(toolId: DetectedTool[\"id\"]): string {\n const generator = generators[toolId];\n if (!generator) {\n throw new Error(`No template for tool: ${toolId}`);\n }\n\n return generator();\n}\n\nexport { generateLlmsTxt };\n","import * as p from \"@clack/prompts\";\nimport { existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { dirname, join, relative } from \"node:path\";\nimport pc from \"picocolors\";\nimport { CLI_NAME } from \"../lib/constants.js\";\nimport {\n type DetectedTool,\n detectTools,\n getAllToolIds,\n getToolConfig,\n} from \"../lib/detect.js\";\nimport { hasDirectiveSection, mergeSection } from \"../lib/merge.js\";\nimport { detectMonorepo } from \"../lib/monorepo.js\";\nimport { getTemplate } from \"../templates/index.js\";\n\ninterface Options {\n force: boolean;\n merge: boolean;\n tools: string[];\n dir: string;\n}\n\nfunction parseArgs(args: string[]): Options {\n const opts: Options = {\n force: false,\n merge: false,\n tools: [],\n dir: process.cwd(),\n };\n\n for (let i = 0; i < args.length; i++) {\n const arg = args[i];\n\n switch (arg) {\n case \"--force\":\n opts.force = true;\n break;\n case \"--merge\":\n opts.merge = true;\n break;\n case \"--tool\": {\n const val = args[++i];\n if (val) {\n opts.tools.push(val);\n }\n break;\n }\n case \"--dir\": {\n const val = args[++i];\n if (val) {\n opts.dir = val;\n }\n break;\n }\n }\n }\n\n return opts;\n}\n\nexport async function aiRulesCommand(args: string[]) {\n const opts = parseArgs(args);\n\n p.intro(pc.bgCyan(pc.black(\" directive ai-rules \")));\n\n // Step 1: Detect monorepo\n const mono = detectMonorepo(opts.dir);\n let targetDir = opts.dir;\n\n if (mono.isMonorepo && mono.rootDir !== opts.dir) {\n const placement = await p.select({\n message: \"Monorepo detected. Where should AI rules be installed?\",\n options: [\n {\n value: \"root\",\n label: `Monorepo root (${relative(opts.dir, mono.rootDir) || \".\"})`,\n hint: \"recommended\",\n },\n {\n value: \"workspace\",\n label: `Current workspace (${relative(mono.rootDir, opts.dir)})`,\n },\n ],\n });\n\n if (p.isCancel(placement)) {\n p.cancel(\"Cancelled.\");\n process.exit(0);\n }\n\n if (placement === \"root\") {\n targetDir = mono.rootDir;\n }\n }\n\n // Step 2: Detect or select tools\n let selectedTools: DetectedTool[];\n\n if (opts.tools.length > 0) {\n selectedTools = opts.tools.map((id) => {\n const config = getToolConfig(id as DetectedTool[\"id\"]);\n\n return {\n name: config.name,\n id: config.id,\n outputPath: join(targetDir, config.outputPath),\n };\n });\n } else {\n const detected = detectTools(targetDir);\n\n if (detected.length > 0) {\n const choices = await p.multiselect({\n message: `Detected ${detected.length} AI tool(s). Which should get Directive rules?`,\n options: detected.map((t) => ({\n value: t.id,\n label: t.name,\n hint: relative(targetDir, t.outputPath),\n })),\n initialValues: detected.map((t) => t.id),\n required: true,\n });\n\n if (p.isCancel(choices)) {\n p.cancel(\"Cancelled.\");\n process.exit(0);\n }\n\n selectedTools = (choices as DetectedTool[\"id\"][]).map((id) => {\n const config = getToolConfig(id);\n\n return {\n name: config.name,\n id: config.id,\n outputPath: join(targetDir, config.outputPath),\n };\n });\n } else {\n const choices = await p.multiselect({\n message:\n \"No AI tools detected. Which tools do you use?\",\n options: getAllToolIds().map((id) => {\n const config = getToolConfig(id);\n\n return { value: id, label: config.name };\n }),\n required: true,\n });\n\n if (p.isCancel(choices)) {\n p.cancel(\"Cancelled.\");\n process.exit(0);\n }\n\n selectedTools = (choices as DetectedTool[\"id\"][]).map((id) => {\n const config = getToolConfig(id);\n\n return {\n name: config.name,\n id: config.id,\n outputPath: join(targetDir, config.outputPath),\n };\n });\n }\n }\n\n if (selectedTools.length === 0) {\n p.cancel(\"No tools selected.\");\n process.exit(0);\n }\n\n // Step 3: Write files\n const s = p.spinner();\n\n for (const tool of selectedTools) {\n s.start(`Generating ${tool.name} rules...`);\n\n const content = getTemplate(tool.id);\n const filePath = tool.outputPath;\n const fileExists = existsSync(filePath);\n\n s.stop(`Generated ${tool.name} rules.`);\n\n if (fileExists && !opts.force) {\n const existingContent = readFileSync(filePath, \"utf-8\");\n\n if (opts.merge) {\n writeFile(filePath, mergeSection(existingContent, content));\n p.log.success(\n `${pc.green(\"Merged\")} Directive section into ${pc.dim(relative(targetDir, filePath))}`,\n );\n continue;\n }\n\n if (hasDirectiveSection(existingContent)) {\n const action = await p.select({\n message: `${relative(targetDir, filePath)} already has a Directive section. What should we do?`,\n options: [\n {\n value: \"merge\",\n label: \"Update Directive section only\",\n hint: \"recommended\",\n },\n { value: \"overwrite\", label: \"Overwrite entire file\" },\n { value: \"skip\", label: \"Skip this file\" },\n ],\n });\n\n if (p.isCancel(action)) {\n p.cancel(\"Cancelled.\");\n process.exit(0);\n }\n\n if (action === \"merge\") {\n writeFile(filePath, mergeSection(existingContent, content));\n p.log.success(\n `${pc.green(\"Updated\")} ${pc.dim(relative(targetDir, filePath))}`,\n );\n } else if (action === \"overwrite\") {\n writeFile(filePath, content);\n p.log.success(\n `${pc.green(\"Wrote\")} ${pc.dim(relative(targetDir, filePath))}`,\n );\n } else {\n p.log.info(`Skipped ${pc.dim(relative(targetDir, filePath))}`);\n }\n } else {\n const action = await p.select({\n message: `${relative(targetDir, filePath)} already exists. What should we do?`,\n options: [\n {\n value: \"append\",\n label: \"Append Directive section\",\n hint: \"preserves existing content\",\n },\n { value: \"overwrite\", label: \"Overwrite entire file\" },\n { value: \"skip\", label: \"Skip this file\" },\n ],\n });\n\n if (p.isCancel(action)) {\n p.cancel(\"Cancelled.\");\n process.exit(0);\n }\n\n if (action === \"append\") {\n writeFile(filePath, mergeSection(existingContent, content));\n p.log.success(\n `${pc.green(\"Appended\")} to ${pc.dim(relative(targetDir, filePath))}`,\n );\n } else if (action === \"overwrite\") {\n writeFile(filePath, content);\n p.log.success(\n `${pc.green(\"Wrote\")} ${pc.dim(relative(targetDir, filePath))}`,\n );\n } else {\n p.log.info(`Skipped ${pc.dim(relative(targetDir, filePath))}`);\n }\n }\n } else {\n writeFile(filePath, content);\n p.log.success(\n `${pc.green(\"Created\")} ${pc.dim(relative(targetDir, filePath))}`,\n );\n }\n }\n\n p.outro(\n `Done! Run ${pc.cyan(`${CLI_NAME} ai-rules init --merge`)} anytime to update.`,\n );\n}\n\nfunction writeFile(filePath: string, content: string) {\n const dir = dirname(filePath);\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true });\n }\n\n writeFileSync(filePath, content, \"utf-8\");\n}\n\n// ---------------------------------------------------------------------------\n// ai-rules update — regenerate all existing rule files\n// ---------------------------------------------------------------------------\n\nexport async function aiRulesUpdateCommand(args: string[]) {\n const opts = parseArgs(args);\n const targetDir = opts.dir;\n\n const ruleFiles: Array<{ id: DetectedTool[\"id\"]; path: string }> = [\n { id: \"cursor\", path: join(targetDir, \".cursorrules\") },\n { id: \"claude\", path: join(targetDir, \".claude/CLAUDE.md\") },\n { id: \"copilot\", path: join(targetDir, \".github/copilot-instructions.md\") },\n { id: \"windsurf\", path: join(targetDir, \".windsurfrules\") },\n { id: \"cline\", path: join(targetDir, \".clinerules\") },\n ];\n\n let updated = 0;\n\n for (const file of ruleFiles) {\n if (!existsSync(file.path)) {\n continue;\n }\n\n const existing = readFileSync(file.path, \"utf-8\");\n if (!hasDirectiveSection(existing)) {\n continue;\n }\n\n const newContent = getTemplate(file.id);\n const merged = mergeSection(existing, newContent);\n\n writeFile(file.path, merged);\n console.log(\n `${pc.green(\"Updated\")} ${pc.dim(relative(targetDir, file.path))}`,\n );\n updated++;\n }\n\n if (updated === 0) {\n console.log(\n pc.dim(\n `No existing rule files found. Run ${pc.cyan(`${CLI_NAME} ai-rules init`)} first.`,\n ),\n );\n } else {\n console.log(\n pc.green(`\\nUpdated ${updated} file(s) to latest knowledge version.`),\n );\n }\n}\n\n// ---------------------------------------------------------------------------\n// ai-rules check — exit non-zero if rules are stale (CI-friendly)\n// ---------------------------------------------------------------------------\n\nexport async function aiRulesCheckCommand(args: string[]) {\n const opts = parseArgs(args);\n const targetDir = opts.dir;\n\n const ruleFiles: Array<{ id: DetectedTool[\"id\"]; path: string; name: string }> = [\n { id: \"cursor\", path: join(targetDir, \".cursorrules\"), name: \"Cursor\" },\n { id: \"claude\", path: join(targetDir, \".claude/CLAUDE.md\"), name: \"Claude Code\" },\n { id: \"copilot\", path: join(targetDir, \".github/copilot-instructions.md\"), name: \"GitHub Copilot\" },\n { id: \"windsurf\", path: join(targetDir, \".windsurfrules\"), name: \"Windsurf\" },\n { id: \"cline\", path: join(targetDir, \".clinerules\"), name: \"Cline\" },\n ];\n\n let checked = 0;\n let stale = 0;\n\n for (const file of ruleFiles) {\n if (!existsSync(file.path)) {\n continue;\n }\n\n const existing = readFileSync(file.path, \"utf-8\");\n if (!hasDirectiveSection(existing)) {\n continue;\n }\n\n checked++;\n\n // Generate fresh content and merge, then compare\n const freshContent = getTemplate(file.id);\n const merged = mergeSection(existing, freshContent);\n\n if (merged !== existing) {\n console.log(`${pc.red(\"✗\")} ${file.name} rules are ${pc.yellow(\"stale\")}`);\n stale++;\n } else {\n console.log(`${pc.green(\"✓\")} ${file.name} rules are ${pc.green(\"current\")}`);\n }\n }\n\n if (checked === 0) {\n console.log(pc.dim(\"No rule files found to check.\"));\n\n return;\n }\n\n if (stale > 0) {\n console.log(\n `\\n${pc.yellow(`${stale} file(s) are stale.`)} Run ${pc.cyan(`${CLI_NAME} ai-rules update`)} to refresh.`,\n );\n process.exit(1);\n } else {\n console.log(pc.green(\"\\nAll rule files are current.\"));\n }\n}\n","import * as p from \"@clack/prompts\";\nimport { existsSync, mkdirSync, writeFileSync } from \"node:fs\";\nimport { dirname, join, relative } from \"node:path\";\nimport pc from \"picocolors\";\nimport { CLI_NAME } from \"../lib/constants.js\";\n\ninterface InitOptions {\n template?: string;\n dir: string;\n noInteractive: boolean;\n}\n\nfunction parseArgs(args: string[]): InitOptions {\n const opts: InitOptions = {\n dir: process.cwd(),\n noInteractive: false,\n };\n\n for (let i = 0; i < args.length; i++) {\n const arg = args[i];\n\n switch (arg) {\n case \"--template\": {\n const val = args[++i];\n if (val) {\n opts.template = val;\n }\n break;\n }\n case \"--dir\": {\n const val = args[++i];\n if (val) {\n opts.dir = val;\n }\n break;\n }\n case \"--no-interactive\":\n opts.noInteractive = true;\n break;\n }\n }\n\n return opts;\n}\n\n// ---------------------------------------------------------------------------\n// Package manager detection\n// ---------------------------------------------------------------------------\n\ntype PackageManager = \"pnpm\" | \"npm\" | \"yarn\" | \"bun\";\n\nfunction detectPackageManager(dir: string): PackageManager {\n if (existsSync(join(dir, \"pnpm-lock.yaml\"))) {\n return \"pnpm\";\n }\n if (existsSync(join(dir, \"bun.lockb\")) || existsSync(join(dir, \"bun.lock\"))) {\n return \"bun\";\n }\n if (existsSync(join(dir, \"yarn.lock\"))) {\n return \"yarn\";\n }\n\n return \"npm\";\n}\n\nfunction installCmd(pm: PackageManager, pkg: string): string {\n switch (pm) {\n case \"pnpm\":\n return `pnpm add ${pkg}`;\n case \"yarn\":\n return `yarn add ${pkg}`;\n case \"bun\":\n return `bun add ${pkg}`;\n default:\n return `npm install ${pkg}`;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Templates\n// ---------------------------------------------------------------------------\n\ntype TemplateId = \"counter\" | \"auth-flow\" | \"ai-orchestrator\";\n\ninterface TemplateConfig {\n id: TemplateId;\n label: string;\n hint: string;\n files: Array<{ path: string; content: string }>;\n deps: string[];\n}\n\nfunction getTemplates(moduleName: string): Record<TemplateId, TemplateConfig> {\n return {\n counter: {\n id: \"counter\",\n label: \"Counter (minimal)\",\n hint: \"schema + init + derive + events — simplest starting point\",\n files: [\n {\n path: `src/${moduleName}.ts`,\n content: generateCounterModule(moduleName),\n },\n {\n path: \"src/main.ts\",\n content: generateCounterMain(moduleName),\n },\n ],\n deps: [\"@directive-run/core\"],\n },\n \"auth-flow\": {\n id: \"auth-flow\",\n label: \"Auth flow (constraints + resolvers)\",\n hint: \"login flow with constraints, resolvers, retry, and effects\",\n files: [\n {\n path: `src/${moduleName}.ts`,\n content: generateAuthModule(moduleName),\n },\n {\n path: \"src/main.ts\",\n content: generateAuthMain(moduleName),\n },\n ],\n deps: [\"@directive-run/core\"],\n },\n \"ai-orchestrator\": {\n id: \"ai-orchestrator\",\n label: \"AI orchestrator\",\n hint: \"agent orchestrator with guardrails and streaming\",\n files: [\n {\n path: `src/${moduleName}.ts`,\n content: generateAIModule(moduleName),\n },\n {\n path: \"src/main.ts\",\n content: generateAIMain(moduleName),\n },\n ],\n deps: [\"@directive-run/core\", \"@directive-run/ai\"],\n },\n };\n}\n\n// ---------------------------------------------------------------------------\n// Template generators\n// ---------------------------------------------------------------------------\n\nfunction generateCounterModule(name: string): string {\n const camelName = toCamelCase(name);\n\n return `import { type ModuleSchema, createModule, t } from \"@directive-run/core\";\n\nconst schema = {\n facts: {\n count: t.number(),\n label: t.string(),\n },\n derivations: {\n isEven: t.boolean(),\n display: t.string(),\n },\n events: {\n increment: {},\n decrement: {},\n reset: {},\n setLabel: { value: t.string() },\n },\n} satisfies ModuleSchema;\n\nexport const ${camelName} = createModule(\"${name}\", {\n schema,\n\n init: (facts) => {\n facts.count = 0;\n facts.label = \"${name}\";\n },\n\n derive: {\n isEven: (facts) => facts.count % 2 === 0,\n display: (facts) => \\`\\${facts.label}: \\${facts.count}\\`,\n },\n\n events: {\n increment: (facts) => {\n facts.count++;\n },\n decrement: (facts) => {\n facts.count--;\n },\n reset: (facts) => {\n facts.count = 0;\n },\n setLabel: (facts, { value }) => {\n facts.label = value;\n },\n },\n});\n`;\n}\n\nfunction generateCounterMain(name: string): string {\n const camelName = toCamelCase(name);\n\n return `import { createSystem } from \"@directive-run/core\";\nimport { ${camelName} } from \"./${name}.js\";\n\nconst system = createSystem({\n module: ${camelName},\n});\n\nsystem.start();\n\n// Read facts and derivations\nconsole.log(\"count:\", system.facts.count);\nconsole.log(\"display:\", system.read(\"display\"));\n\n// Dispatch events\nsystem.events.increment();\nconsole.log(\"after increment:\", system.facts.count);\n\n// Subscribe to changes\nsystem.subscribe([\"count\"], () => {\n console.log(\"count changed:\", system.facts.count);\n});\n\nsystem.events.increment();\nsystem.events.increment();\n\nexport default system;\n`;\n}\n\nfunction generateAuthModule(name: string): string {\n const camelName = toCamelCase(name);\n\n return `import { type ModuleSchema, createModule, t } from \"@directive-run/core\";\n\ntype AuthStatus = \"idle\" | \"authenticating\" | \"authenticated\" | \"expired\";\n\nconst schema = {\n facts: {\n email: t.string(),\n password: t.string(),\n token: t.string(),\n status: t.string<AuthStatus>(),\n error: t.string(),\n },\n derivations: {\n isAuthenticated: t.boolean(),\n canLogin: t.boolean(),\n },\n events: {\n setEmail: { value: t.string() },\n setPassword: { value: t.string() },\n requestLogin: {},\n logout: {},\n },\n requirements: {\n LOGIN: { email: t.string(), password: t.string() },\n },\n} satisfies ModuleSchema;\n\nexport const ${camelName} = createModule(\"${name}\", {\n schema,\n\n init: (facts) => {\n facts.email = \"\";\n facts.password = \"\";\n facts.token = \"\";\n facts.status = \"idle\";\n facts.error = \"\";\n },\n\n derive: {\n isAuthenticated: (facts) => facts.status === \"authenticated\",\n canLogin: (facts) => {\n return (\n facts.email.trim() !== \"\" &&\n facts.password.trim() !== \"\" &&\n (facts.status === \"idle\" || facts.status === \"expired\")\n );\n },\n },\n\n events: {\n setEmail: (facts, { value }) => {\n facts.email = value;\n },\n setPassword: (facts, { value }) => {\n facts.password = value;\n },\n requestLogin: (facts) => {\n facts.status = \"authenticating\";\n facts.error = \"\";\n },\n logout: (facts) => {\n facts.token = \"\";\n facts.status = \"idle\";\n },\n },\n\n constraints: {\n needsLogin: {\n priority: 100,\n when: (facts) => facts.status === \"authenticating\",\n require: (facts) => ({\n type: \"LOGIN\",\n email: facts.email,\n password: facts.password,\n }),\n },\n },\n\n resolvers: {\n login: {\n requirement: \"LOGIN\",\n retry: { attempts: 2, backoff: \"exponential\" },\n resolve: async (req, context) => {\n // Replace with real auth API call\n await new Promise((resolve) => setTimeout(resolve, 500));\n\n const token = \\`token_\\${Date.now()}\\`;\n context.facts.token = token;\n context.facts.status = \"authenticated\";\n },\n },\n },\n\n effects: {\n logStatusChange: {\n deps: [\"status\"],\n run: (facts, prev) => {\n if (prev && prev.status !== facts.status) {\n console.log(\\`Auth status: \\${prev.status} → \\${facts.status}\\`);\n }\n },\n },\n },\n});\n`;\n}\n\nfunction generateAuthMain(name: string): string {\n const camelName = toCamelCase(name);\n\n return `import { createSystem } from \"@directive-run/core\";\nimport { ${camelName} } from \"./${name}.js\";\n\nconst system = createSystem({\n module: ${camelName},\n});\n\nsystem.start();\n\n// Set credentials and login\nsystem.events.setEmail({ value: \"user@example.com\" });\nsystem.events.setPassword({ value: \"password123\" });\nsystem.events.requestLogin();\n\n// Wait for auth to complete\nawait system.settle();\n\nconsole.log(\"authenticated:\", system.read(\"isAuthenticated\"));\nconsole.log(\"token:\", system.facts.token);\n\nexport default system;\n`;\n}\n\nfunction generateAIModule(name: string): string {\n const camelName = toCamelCase(name);\n\n return `import { type ModuleSchema, createModule, t } from \"@directive-run/core\";\nimport {\n createAgentOrchestrator,\n createAgentMemory,\n createSlidingWindowStrategy,\n} from \"@directive-run/ai\";\n\n// ============================================================================\n// Module — state management\n// ============================================================================\n\ntype AgentStatus = \"idle\" | \"thinking\" | \"done\" | \"error\";\n\nconst schema = {\n facts: {\n input: t.string(),\n output: t.string(),\n status: t.string<AgentStatus>(),\n error: t.string(),\n },\n derivations: {\n isThinking: t.boolean(),\n hasOutput: t.boolean(),\n },\n events: {\n setInput: { value: t.string() },\n requestRun: {},\n reset: {},\n },\n requirements: {\n RUN_AGENT: { input: t.string() },\n },\n} satisfies ModuleSchema;\n\nexport const ${camelName} = createModule(\"${name}\", {\n schema,\n\n init: (facts) => {\n facts.input = \"\";\n facts.output = \"\";\n facts.status = \"idle\";\n facts.error = \"\";\n },\n\n derive: {\n isThinking: (facts) => facts.status === \"thinking\",\n hasOutput: (facts) => facts.output !== \"\",\n },\n\n events: {\n setInput: (facts, { value }) => {\n facts.input = value;\n },\n requestRun: (facts) => {\n facts.status = \"thinking\";\n facts.output = \"\";\n facts.error = \"\";\n },\n reset: (facts) => {\n facts.input = \"\";\n facts.output = \"\";\n facts.status = \"idle\";\n facts.error = \"\";\n },\n },\n\n constraints: {\n needsRun: {\n priority: 100,\n when: (facts) => facts.status === \"thinking\",\n require: (facts) => ({\n type: \"RUN_AGENT\",\n input: facts.input,\n }),\n },\n },\n\n resolvers: {\n runAgent: {\n requirement: \"RUN_AGENT\",\n timeout: 30000,\n resolve: async (req, context) => {\n // Replace with your agent runner (e.g., Anthropic, OpenAI)\n const result = \\`Echo: \\${req.input}\\`;\n\n context.facts.output = result;\n context.facts.status = \"done\";\n },\n },\n },\n});\n\n// ============================================================================\n// Orchestrator — optional AI features\n// ============================================================================\n\nexport const memory = createAgentMemory({\n strategy: createSlidingWindowStrategy(),\n strategyConfig: { maxMessages: 30, preserveRecentCount: 6 },\n autoManage: true,\n});\n\n// Uncomment to add orchestrator features:\n// export const orchestrator = createAgentOrchestrator({\n// runner: yourAgentRunner,\n// maxTokenBudget: 50000,\n// memory,\n// });\n`;\n}\n\nfunction generateAIMain(name: string): string {\n const camelName = toCamelCase(name);\n\n return `import { createSystem } from \"@directive-run/core\";\nimport { ${camelName} } from \"./${name}.js\";\n\nconst system = createSystem({\n module: ${camelName},\n});\n\nsystem.start();\n\n// Set input and run\nsystem.events.setInput({ value: \"Hello, world!\" });\nsystem.events.requestRun();\n\n// Wait for completion\nawait system.settle();\n\nconsole.log(\"output:\", system.facts.output);\n\nexport default system;\n`;\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction toCamelCase(name: string): string {\n return name.replace(/-([a-z])/g, (_, c) => c.toUpperCase());\n}\n\nfunction writeFile(filePath: string, content: string) {\n const dir = dirname(filePath);\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true });\n }\n writeFileSync(filePath, content, \"utf-8\");\n}\n\n// ---------------------------------------------------------------------------\n// Command\n// ---------------------------------------------------------------------------\n\nexport async function initCommand(args: string[]) {\n const opts = parseArgs(args);\n\n p.intro(pc.bgCyan(pc.black(\" directive init \")));\n\n // Step 1: Project name\n let moduleName: string;\n\n if (opts.noInteractive) {\n moduleName = \"my-module\";\n } else {\n const nameResult = await p.text({\n message: \"Module name:\",\n placeholder: \"my-module\",\n defaultValue: \"my-module\",\n validate: (val) => {\n if (!/^[a-z][a-z0-9-]*$/.test(val)) {\n return \"Must start with a letter, use lowercase letters, numbers, and hyphens\";\n }\n },\n });\n\n if (p.isCancel(nameResult)) {\n p.cancel(\"Cancelled.\");\n process.exit(0);\n }\n\n moduleName = nameResult;\n }\n\n // Step 2: Template selection\n let templateId: TemplateId;\n\n if (opts.template) {\n const templates = getTemplates(moduleName);\n if (!(opts.template in templates)) {\n p.log.error(\n `Unknown template: ${opts.template}. Available: ${Object.keys(templates).join(\", \")}`,\n );\n process.exit(1);\n }\n templateId = opts.template as TemplateId;\n } else if (opts.noInteractive) {\n templateId = \"counter\";\n } else {\n const templates = getTemplates(moduleName);\n const choice = await p.select({\n message: \"Project template:\",\n options: Object.values(templates).map((t) => ({\n value: t.id,\n label: t.label,\n hint: t.hint,\n })),\n });\n\n if (p.isCancel(choice)) {\n p.cancel(\"Cancelled.\");\n process.exit(0);\n }\n\n templateId = choice as TemplateId;\n }\n\n const templates = getTemplates(moduleName);\n const template = templates[templateId];\n\n // Step 3: Detect package manager\n const pm = detectPackageManager(opts.dir);\n p.log.info(`Package manager: ${pc.cyan(pm)}`);\n\n // Step 4: Write files\n const s = p.spinner();\n s.start(\"Creating project files...\");\n\n let created = 0;\n let skipped = 0;\n\n for (const file of template.files) {\n const filePath = join(opts.dir, file.path);\n\n if (existsSync(filePath)) {\n skipped++;\n continue;\n }\n\n writeFile(filePath, file.content);\n created++;\n }\n\n s.stop(\"Project files created.\");\n\n for (const file of template.files) {\n const filePath = join(opts.dir, file.path);\n const rel = relative(opts.dir, filePath);\n\n if (existsSync(filePath)) {\n p.log.success(`${pc.green(\"Created\")} ${pc.dim(rel)}`);\n }\n }\n\n if (skipped > 0) {\n p.log.warn(`Skipped ${skipped} file(s) that already exist.`);\n }\n\n // Step 5: Show next steps\n const depsCmd = installCmd(pm, template.deps.join(\" \"));\n\n p.outro(\n `Next steps:\\n` +\n ` ${pc.cyan(depsCmd)}\\n` +\n ` ${pc.cyan(`${CLI_NAME} ai-rules init`)}\\n` +\n ` ${pc.dim(\"Start building!\")}`,\n );\n}\n","import * as p from \"@clack/prompts\";\nimport { existsSync, mkdirSync, writeFileSync } from \"node:fs\";\nimport { dirname, join, relative } from \"node:path\";\nimport pc from \"picocolors\";\n\ninterface NewOptions {\n with: string[];\n minimal: boolean;\n dir: string;\n}\n\nfunction parseArgs(args: string[]): NewOptions {\n const opts: NewOptions = {\n with: [],\n minimal: false,\n dir: process.cwd(),\n };\n\n for (let i = 0; i < args.length; i++) {\n const arg = args[i];\n\n switch (arg) {\n case \"--with\": {\n const val = args[++i];\n if (val) {\n opts.with = val.split(\",\").map((s) => s.trim());\n }\n break;\n }\n case \"--minimal\":\n opts.minimal = true;\n break;\n case \"--dir\": {\n const val = args[++i];\n if (val) {\n opts.dir = val;\n }\n break;\n }\n }\n }\n\n return opts;\n}\n\n// ---------------------------------------------------------------------------\n// Module generator\n// ---------------------------------------------------------------------------\n\ntype Section = \"derive\" | \"events\" | \"constraints\" | \"resolvers\" | \"effects\";\n\nconst ALL_SECTIONS: Section[] = [\n \"derive\",\n \"events\",\n \"constraints\",\n \"resolvers\",\n \"effects\",\n];\n\nfunction generateModule(\n name: string,\n sections: Section[],\n): string {\n const camelName = toCamelCase(name);\n const hasConstraints = sections.includes(\"constraints\");\n const hasResolvers = sections.includes(\"resolvers\");\n\n const imports = [\"type ModuleSchema\", \"createModule\", \"t\"];\n\n let code = `import { ${imports.join(\", \")} } from \"@directive-run/core\";\\n\\n`;\n\n // Schema\n code += `const schema = {\\n`;\n code += ` facts: {\\n`;\n code += ` // Add your facts here\\n`;\n code += ` status: t.string(),\\n`;\n code += ` },\\n`;\n\n if (sections.includes(\"derive\")) {\n code += ` derivations: {\\n`;\n code += ` // Add derivation types here\\n`;\n code += ` isReady: t.boolean(),\\n`;\n code += ` },\\n`;\n }\n\n if (sections.includes(\"events\")) {\n code += ` events: {\\n`;\n code += ` // Add event shapes here\\n`;\n code += ` setStatus: { value: t.string() },\\n`;\n code += ` },\\n`;\n }\n\n if (hasConstraints || hasResolvers) {\n code += ` requirements: {\\n`;\n code += ` // Add requirement shapes here\\n`;\n code += ` PROCESS: { input: t.string() },\\n`;\n code += ` },\\n`;\n }\n\n code += `} satisfies ModuleSchema;\\n\\n`;\n\n // Module\n code += `export const ${camelName} = createModule(\"${name}\", {\\n`;\n code += ` schema,\\n\\n`;\n\n code += ` init: (facts) => {\\n`;\n code += ` facts.status = \"idle\";\\n`;\n code += ` },\\n`;\n\n if (sections.includes(\"derive\")) {\n code += `\\n derive: {\\n`;\n code += ` isReady: (facts) => facts.status === \"ready\",\\n`;\n code += ` },\\n`;\n }\n\n if (sections.includes(\"events\")) {\n code += `\\n events: {\\n`;\n code += ` setStatus: (facts, { value }) => {\\n`;\n code += ` facts.status = value;\\n`;\n code += ` },\\n`;\n code += ` },\\n`;\n }\n\n if (hasConstraints) {\n code += `\\n constraints: {\\n`;\n code += ` needsProcessing: {\\n`;\n code += ` priority: 100,\\n`;\n code += ` when: (facts) => facts.status === \"pending\",\\n`;\n code += ` require: (facts) => ({\\n`;\n code += ` type: \"PROCESS\",\\n`;\n code += ` input: facts.status,\\n`;\n code += ` }),\\n`;\n code += ` },\\n`;\n code += ` },\\n`;\n }\n\n if (hasResolvers) {\n code += `\\n resolvers: {\\n`;\n code += ` process: {\\n`;\n code += ` requirement: \"PROCESS\",\\n`;\n code += ` resolve: async (req, context) => {\\n`;\n code += ` // Implement resolution logic here\\n`;\n code += ` context.facts.status = \"done\";\\n`;\n code += ` },\\n`;\n code += ` },\\n`;\n code += ` },\\n`;\n }\n\n if (sections.includes(\"effects\")) {\n code += `\\n effects: {\\n`;\n code += ` logChange: {\\n`;\n code += ` deps: [\"status\"],\\n`;\n code += ` run: (facts, prev) => {\\n`;\n code += ` if (prev && prev.status !== facts.status) {\\n`;\n code += ` console.log(\\`Status: \\${prev.status} → \\${facts.status}\\`);\\n`;\n code += ` }\\n`;\n code += ` },\\n`;\n code += ` },\\n`;\n code += ` },\\n`;\n }\n\n code += `});\\n`;\n\n return code;\n}\n\n// ---------------------------------------------------------------------------\n// Orchestrator generator\n// ---------------------------------------------------------------------------\n\nfunction generateOrchestrator(name: string): string {\n const camelName = toCamelCase(name);\n\n return `import { type ModuleSchema, createModule, createSystem, t } from \"@directive-run/core\";\nimport {\n createAgentOrchestrator,\n createAgentMemory,\n createSlidingWindowStrategy,\n} from \"@directive-run/ai\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\ntype AgentStatus = \"idle\" | \"thinking\" | \"done\" | \"error\";\n\n// ============================================================================\n// Schema\n// ============================================================================\n\nconst schema = {\n facts: {\n input: t.string(),\n output: t.string(),\n status: t.string<AgentStatus>(),\n error: t.string(),\n totalTokens: t.number(),\n },\n derivations: {\n isThinking: t.boolean(),\n hasOutput: t.boolean(),\n },\n events: {\n setInput: { value: t.string() },\n requestRun: {},\n reset: {},\n },\n requirements: {\n RUN_AGENT: { input: t.string() },\n },\n} satisfies ModuleSchema;\n\n// ============================================================================\n// Module\n// ============================================================================\n\nexport const ${camelName} = createModule(\"${name}\", {\n schema,\n\n init: (facts) => {\n facts.input = \"\";\n facts.output = \"\";\n facts.status = \"idle\";\n facts.error = \"\";\n facts.totalTokens = 0;\n },\n\n derive: {\n isThinking: (facts) => facts.status === \"thinking\",\n hasOutput: (facts) => facts.output !== \"\",\n },\n\n events: {\n setInput: (facts, { value }) => {\n facts.input = value;\n },\n requestRun: (facts) => {\n facts.status = \"thinking\";\n facts.output = \"\";\n facts.error = \"\";\n },\n reset: (facts) => {\n facts.input = \"\";\n facts.output = \"\";\n facts.status = \"idle\";\n facts.error = \"\";\n facts.totalTokens = 0;\n },\n },\n\n constraints: {\n needsRun: {\n priority: 100,\n when: (facts) => facts.status === \"thinking\",\n require: (facts) => ({\n type: \"RUN_AGENT\",\n input: facts.input,\n }),\n },\n },\n\n resolvers: {\n runAgent: {\n requirement: \"RUN_AGENT\",\n timeout: 30000,\n resolve: async (req, context) => {\n // TODO: Replace with your agent runner\n const result = \\`Echo: \\${req.input}\\`;\n\n context.facts.output = result;\n context.facts.status = \"done\";\n },\n },\n },\n});\n\n// ============================================================================\n// AI Features\n// ============================================================================\n\nexport const memory = createAgentMemory({\n strategy: createSlidingWindowStrategy(),\n strategyConfig: { maxMessages: 30, preserveRecentCount: 6 },\n autoManage: true,\n});\n\n// TODO: Add your agent runner and configure the orchestrator\n// export const orchestrator = createAgentOrchestrator({\n// runner: yourAgentRunner,\n// maxTokenBudget: 50000,\n// memory,\n// guardrails: {\n// input: [],\n// output: [],\n// },\n// });\n\n// ============================================================================\n// System\n// ============================================================================\n\nexport const system = createSystem({\n module: ${camelName},\n});\n`;\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction toCamelCase(name: string): string {\n return name.replace(/-([a-z])/g, (_, c) => c.toUpperCase());\n}\n\nfunction writeFile(filePath: string, content: string) {\n const dir = dirname(filePath);\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true });\n }\n writeFileSync(filePath, content, \"utf-8\");\n}\n\nfunction findModulesDir(dir: string): string {\n return join(dir, \"src\");\n}\n\n// ---------------------------------------------------------------------------\n// Commands\n// ---------------------------------------------------------------------------\n\nexport async function newModuleCommand(name: string, args: string[]) {\n const opts = parseArgs(args);\n\n if (!name || !/^[a-z][a-z0-9-]*$/.test(name)) {\n console.error(\n `Invalid module name: ${name || \"(none)\"}\\n` +\n \"Must start with a letter, use lowercase letters, numbers, and hyphens.\",\n );\n process.exit(1);\n }\n\n let sections: Section[];\n\n if (opts.minimal) {\n sections = [];\n } else if (opts.with.length > 0) {\n sections = opts.with.filter((s) =>\n ALL_SECTIONS.includes(s as Section),\n ) as Section[];\n } else {\n sections = ALL_SECTIONS;\n }\n\n const targetDir = findModulesDir(opts.dir);\n const filePath = join(targetDir, `${name}.ts`);\n\n if (existsSync(filePath)) {\n console.error(`File already exists: ${relative(opts.dir, filePath)}`);\n process.exit(1);\n }\n\n const content = generateModule(name, sections);\n writeFile(filePath, content);\n\n const rel = relative(opts.dir, filePath);\n console.log(`${pc.green(\"Created\")} ${pc.dim(rel)}`);\n\n if (sections.length === 0) {\n console.log(pc.dim(\" Minimal module (schema + init only)\"));\n } else {\n console.log(pc.dim(` Sections: ${sections.join(\", \")}`));\n }\n}\n\nexport async function newOrchestratorCommand(name: string, args: string[]) {\n const opts = parseArgs(args);\n\n if (!name || !/^[a-z][a-z0-9-]*$/.test(name)) {\n console.error(\n `Invalid orchestrator name: ${name || \"(none)\"}\\n` +\n \"Must start with a letter, use lowercase letters, numbers, and hyphens.\",\n );\n process.exit(1);\n }\n\n const targetDir = findModulesDir(opts.dir);\n const filePath = join(targetDir, `${name}.ts`);\n\n if (existsSync(filePath)) {\n console.error(`File already exists: ${relative(opts.dir, filePath)}`);\n process.exit(1);\n }\n\n const content = generateOrchestrator(name);\n writeFile(filePath, content);\n\n const rel = relative(opts.dir, filePath);\n console.log(`${pc.green(\"Created\")} ${pc.dim(rel)}`);\n console.log(pc.dim(\" AI orchestrator with memory, guardrails, and streaming\"));\n}\n","import { existsSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport pc from \"picocolors\";\n\n/**\n * Loads a Directive system from a user's TypeScript file.\n *\n * Uses tsx to handle TypeScript imports. Looks for:\n * 1. Default export of a System instance\n * 2. Named \"system\" export\n *\n * Returns the live System object for inspection/explain/graph commands.\n *\n * Note: Returns `any` intentionally — the loaded module is user code with\n * unknown types. Duck-type validation via `isSystem()` ensures the returned\n * object has the required shape (start, stop, inspect, facts).\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport async function loadSystem(filePath: string): Promise<any> {\n const resolved = resolve(filePath);\n\n if (!existsSync(resolved)) {\n throw new Error(`File not found: ${resolved}`);\n }\n\n // Use tsx register to handle TypeScript imports\n try {\n // Dynamic import with tsx — tsx must be available\n const mod = await import(resolved);\n\n // Look for default export first\n if (mod.default && isSystem(mod.default)) {\n return mod.default;\n }\n\n // Look for named \"system\" export\n if (mod.system && isSystem(mod.system)) {\n return mod.system;\n }\n\n // Look for any export that looks like a System\n for (const key of Object.keys(mod)) {\n if (isSystem(mod[key])) {\n return mod[key];\n }\n }\n\n throw new Error(\n `No Directive system found in ${pc.dim(filePath)}\\n` +\n `Export a system as default or named \"system\":\\n\\n` +\n ` ${pc.cyan(\"export default\")} createSystem({ module: myModule });\\n` +\n ` ${pc.cyan(\"export const system\")} = createSystem({ module: myModule });`,\n );\n } catch (err) {\n if (err instanceof Error && err.message.includes(\"No Directive system\")) {\n throw err;\n }\n\n throw new Error(\n `Failed to load ${pc.dim(filePath)}: ${err instanceof Error ? err.message : String(err)}\\n\\n` +\n `Make sure the file is valid TypeScript and tsx is installed:\\n` +\n ` ${pc.cyan(\"npm install -D tsx\")}`,\n );\n }\n}\n\n/**\n * Duck-type check for a Directive System object.\n */\nfunction isSystem(obj: unknown): boolean {\n if (typeof obj !== \"object\" || obj === null) {\n return false;\n }\n\n const sys = obj as Record<string, unknown>;\n\n return (\n typeof sys.inspect === \"function\" &&\n typeof sys.start === \"function\" &&\n typeof sys.stop === \"function\" &&\n \"facts\" in sys\n );\n}\n","import pc from \"picocolors\";\nimport { loadSystem } from \"../lib/loader.js\";\n\ninterface InspectOptions {\n json: boolean;\n module?: string;\n}\n\nfunction parseArgs(args: string[]): { filePath: string; opts: InspectOptions } {\n const opts: InspectOptions = { json: false };\n let filePath = \"\";\n\n for (let i = 0; i < args.length; i++) {\n const arg = args[i];\n\n switch (arg) {\n case \"--json\":\n opts.json = true;\n break;\n case \"--module\": {\n const val = args[++i];\n if (val) {\n opts.module = val;\n }\n break;\n }\n default:\n if (arg && !arg.startsWith(\"-\") && !filePath) {\n filePath = arg;\n }\n }\n }\n\n return { filePath, opts };\n}\n\n// ---------------------------------------------------------------------------\n// Formatters\n// ---------------------------------------------------------------------------\n\nfunction formatFacts(facts: Record<string, unknown>): string {\n const lines: string[] = [];\n lines.push(pc.bold(\"Facts:\"));\n\n const entries = Object.entries(facts);\n if (entries.length === 0) {\n lines.push(\" (none)\");\n\n return lines.join(\"\\n\");\n }\n\n for (const [key, value] of entries) {\n const formatted = formatValue(value);\n lines.push(` ${pc.cyan(key)} = ${formatted}`);\n }\n\n return lines.join(\"\\n\");\n}\n\nfunction formatConstraints(\n constraints: Array<{\n id: string;\n active: boolean;\n disabled: boolean;\n priority: number;\n hitCount: number;\n lastActiveAt: number | null;\n }>,\n): string {\n const lines: string[] = [];\n lines.push(pc.bold(\"Constraints:\"));\n\n if (constraints.length === 0) {\n lines.push(\" (none)\");\n\n return lines.join(\"\\n\");\n }\n\n for (const c of constraints) {\n const status = c.disabled\n ? pc.dim(\"disabled\")\n : c.active\n ? pc.green(\"active\")\n : pc.dim(\"inactive\");\n const hits = c.hitCount > 0 ? pc.yellow(` (${c.hitCount} hits)`) : \"\";\n lines.push(\n ` ${pc.cyan(c.id)} ${status} priority=${c.priority}${hits}`,\n );\n }\n\n return lines.join(\"\\n\");\n}\n\nfunction formatResolverDefs(\n resolverDefs: Array<{ id: string; requirement: string }>,\n resolvers: Record<string, { state: string; error?: string; duration?: number }>,\n): string {\n const lines: string[] = [];\n lines.push(pc.bold(\"Resolvers:\"));\n\n if (resolverDefs.length === 0) {\n lines.push(\" (none)\");\n\n return lines.join(\"\\n\");\n }\n\n for (const def of resolverDefs) {\n const status = resolvers[def.id];\n const stateStr = status\n ? formatResolverState(status.state, status.error, status.duration)\n : pc.dim(\"idle\");\n lines.push(\n ` ${pc.cyan(def.id)} → ${def.requirement} ${stateStr}`,\n );\n }\n\n return lines.join(\"\\n\");\n}\n\nfunction formatUnmet(\n unmet: Array<{\n id: string;\n requirement: { type: string };\n fromConstraint: string;\n }>,\n): string {\n const lines: string[] = [];\n lines.push(pc.bold(\"Unmet Requirements:\"));\n\n if (unmet.length === 0) {\n lines.push(` ${pc.green(\"(all requirements met)\")}`);\n\n return lines.join(\"\\n\");\n }\n\n for (const u of unmet) {\n lines.push(\n ` ${pc.yellow(u.requirement.type)} (id: ${pc.dim(u.id)}) from ${pc.dim(u.fromConstraint)}`,\n );\n }\n\n return lines.join(\"\\n\");\n}\n\nfunction formatInflight(\n inflight: Array<{ id: string; resolverId: string; startedAt: number }>,\n): string {\n const lines: string[] = [];\n lines.push(pc.bold(\"Inflight:\"));\n\n if (inflight.length === 0) {\n lines.push(` ${pc.green(\"(none)\")}`);\n\n return lines.join(\"\\n\");\n }\n\n const now = Date.now();\n for (const inf of inflight) {\n const elapsed = now - inf.startedAt;\n lines.push(\n ` ${pc.cyan(inf.resolverId)} → req ${pc.dim(inf.id)} ${pc.yellow(`${elapsed}ms`)}`,\n );\n }\n\n return lines.join(\"\\n\");\n}\n\nfunction formatResolverState(\n state: string,\n error?: string,\n duration?: number,\n): string {\n const dur = duration !== undefined ? ` ${duration}ms` : \"\";\n\n switch (state) {\n case \"resolved\":\n return pc.green(`resolved${dur}`);\n case \"errored\":\n return pc.red(`errored${dur}${error ? ` — ${error}` : \"\"}`);\n case \"inflight\":\n return pc.yellow(\"inflight\");\n case \"cancelled\":\n return pc.dim(\"cancelled\");\n default:\n return pc.dim(state);\n }\n}\n\nfunction formatValue(value: unknown): string {\n if (value === null) {\n return pc.dim(\"null\");\n }\n if (value === undefined) {\n return pc.dim(\"undefined\");\n }\n if (typeof value === \"string\") {\n return value.length > 60 ? `\"${value.slice(0, 57)}...\"` : `\"${value}\"`;\n }\n if (typeof value === \"number\" || typeof value === \"boolean\") {\n return String(value);\n }\n if (Array.isArray(value)) {\n return `[${value.length} items]`;\n }\n\n return JSON.stringify(value).slice(0, 60);\n}\n\n// ---------------------------------------------------------------------------\n// Warnings\n// ---------------------------------------------------------------------------\n\nfunction findWarnings(inspection: {\n resolverDefs: Array<{ id: string; requirement: string }>;\n constraints: Array<{ id: string; active: boolean; disabled: boolean }>;\n unmet: Array<{ requirement: { type: string } }>;\n}): string[] {\n const warnings: string[] = [];\n\n // Orphaned resolvers: resolver handles a type no constraint emits\n const constraintTypes = new Set<string>();\n // We can't know constraint requirement types from inspection alone,\n // but we can check unmet requirements\n const unmetTypes = new Set(inspection.unmet.map((u) => u.requirement.type));\n const resolverTypes = new Set(\n inspection.resolverDefs.map((r) => r.requirement),\n );\n\n // Resolver types not in unmet — might be orphaned (can't be sure without full constraint analysis)\n for (const def of inspection.resolverDefs) {\n if (def.requirement === \"(predicate)\") {\n continue;\n }\n }\n\n // Unmet requirements with no matching resolver\n for (const u of inspection.unmet) {\n const hasResolver = inspection.resolverDefs.some(\n (r) =>\n r.requirement === u.requirement.type || r.requirement === \"(predicate)\",\n );\n if (!hasResolver) {\n warnings.push(\n `No resolver for requirement type \"${u.requirement.type}\"`,\n );\n }\n }\n\n return warnings;\n}\n\n// ---------------------------------------------------------------------------\n// Command\n// ---------------------------------------------------------------------------\n\nexport async function inspectCommand(args: string[]) {\n const { filePath, opts } = parseArgs(args);\n\n if (!filePath) {\n console.error(\n \"Usage: directive inspect <file> [--json] [--module <name>]\",\n );\n process.exit(1);\n }\n\n const system = await loadSystem(filePath);\n\n if (!system.isRunning) {\n system.start();\n }\n\n const inspection = system.inspect();\n\n if (opts.json) {\n // Get facts as plain object\n const factsObj: Record<string, unknown> = {};\n if (system.facts) {\n for (const key of Object.keys(system.facts)) {\n try {\n factsObj[key] = system.facts[key];\n } catch {\n factsObj[key] = \"(error reading)\";\n }\n }\n }\n\n console.log(\n JSON.stringify(\n {\n facts: factsObj,\n ...inspection,\n },\n null,\n 2,\n ),\n );\n\n system.stop();\n\n return;\n }\n\n // Pretty output\n console.log();\n console.log(pc.bold(pc.cyan(\"Directive System Inspection\")));\n console.log(pc.dim(\"─\".repeat(40)));\n console.log();\n\n // Facts\n const factsObj: Record<string, unknown> = {};\n if (system.facts) {\n for (const key of Object.keys(system.facts)) {\n try {\n factsObj[key] = system.facts[key];\n } catch {\n factsObj[key] = \"(error reading)\";\n }\n }\n }\n console.log(formatFacts(factsObj));\n console.log();\n\n // Constraints\n console.log(formatConstraints(inspection.constraints));\n console.log();\n\n // Resolvers\n console.log(formatResolverDefs(inspection.resolverDefs, inspection.resolvers));\n console.log();\n\n // Unmet requirements\n console.log(formatUnmet(inspection.unmet));\n console.log();\n\n // Inflight\n if (inspection.inflight.length > 0) {\n console.log(formatInflight(inspection.inflight));\n console.log();\n }\n\n // Warnings\n const warnings = findWarnings(inspection);\n if (warnings.length > 0) {\n console.log(pc.bold(pc.yellow(\"Warnings:\")));\n for (const w of warnings) {\n console.log(` ${pc.yellow(\"⚠\")} ${w}`);\n }\n console.log();\n }\n\n system.stop();\n}\n","import pc from \"picocolors\";\nimport { loadSystem } from \"../lib/loader.js\";\n\ninterface ExplainOptions {\n module?: string;\n}\n\nfunction parseArgs(\n args: string[],\n): { filePath: string; requirementId?: string; opts: ExplainOptions } {\n const opts: ExplainOptions = {};\n let filePath = \"\";\n let requirementId: string | undefined;\n\n for (let i = 0; i < args.length; i++) {\n const arg = args[i];\n\n switch (arg) {\n case \"--module\": {\n const val = args[++i];\n if (val) {\n opts.module = val;\n }\n break;\n }\n default:\n if (arg && !arg.startsWith(\"-\")) {\n if (!filePath) {\n filePath = arg;\n } else if (!requirementId) {\n requirementId = arg;\n }\n }\n }\n }\n\n return { filePath, requirementId, opts };\n}\n\n// ---------------------------------------------------------------------------\n// Command\n// ---------------------------------------------------------------------------\n\nexport async function explainCommand(args: string[]) {\n const { filePath, requirementId } = parseArgs(args);\n\n if (!filePath) {\n console.error(\n \"Usage: directive explain <file> [requirement-id]\",\n );\n process.exit(1);\n }\n\n const system = await loadSystem(filePath);\n\n if (!system.isRunning) {\n system.start();\n }\n\n const inspection = system.inspect();\n\n if (requirementId) {\n // Explain a specific requirement\n const explanation = system.explain(requirementId);\n\n if (!explanation) {\n console.error(\n `Requirement \"${requirementId}\" not found.\\n\\n` +\n \"Current requirements:\",\n );\n\n if (inspection.unmet.length === 0) {\n console.log(pc.dim(\" (no unmet requirements)\"));\n } else {\n for (const u of inspection.unmet) {\n console.log(\n ` ${pc.cyan(u.id)} — ${u.requirement.type} (from ${u.fromConstraint})`,\n );\n }\n }\n\n system.stop();\n process.exit(1);\n }\n\n console.log();\n console.log(pc.bold(pc.cyan(\"Requirement Explanation\")));\n console.log(pc.dim(\"─\".repeat(40)));\n console.log();\n console.log(explanation);\n console.log();\n } else {\n // List all requirements with status\n console.log();\n console.log(pc.bold(pc.cyan(\"All Requirements\")));\n console.log(pc.dim(\"─\".repeat(40)));\n console.log();\n\n if (inspection.unmet.length === 0) {\n console.log(pc.green(\"All requirements are met.\"));\n console.log();\n\n // Show resolver history if available\n const resolverEntries = Object.entries(\n inspection.resolvers as Record<string, { state: string; duration?: number; error?: string }>,\n );\n if (resolverEntries.length > 0) {\n console.log(pc.bold(\"Recent Resolver Activity:\"));\n for (const [key, status] of resolverEntries) {\n const state = formatState(status.state);\n const dur =\n status.duration !== undefined ? ` (${status.duration}ms)` : \"\";\n console.log(` ${pc.cyan(key)} ${state}${dur}`);\n }\n console.log();\n }\n } else {\n console.log(\n `${pc.yellow(String(inspection.unmet.length))} unmet requirement(s):\\n`,\n );\n\n for (const u of inspection.unmet) {\n console.log(\n `${pc.yellow(\"●\")} ${pc.bold(u.requirement.type)} (id: ${pc.dim(u.id)})`,\n );\n console.log(` From constraint: ${pc.cyan(u.fromConstraint)}`);\n\n // Show payload\n const payload = { ...u.requirement };\n delete (payload as Record<string, unknown>).type;\n const payloadKeys = Object.keys(payload);\n if (payloadKeys.length > 0) {\n console.log(` Payload: ${JSON.stringify(payload)}`);\n }\n\n // Check resolver status\n const resolverStatus = (inspection.resolvers as Record<string, { state: string; error?: string } | undefined>)[u.id];\n if (resolverStatus) {\n console.log(\n ` Resolver: ${formatState(resolverStatus.state)}${resolverStatus.error ? ` — ${resolverStatus.error}` : \"\"}`,\n );\n } else {\n // Check if any resolver handles this type\n const hasResolver = inspection.resolverDefs.some(\n (r: { id: string; requirement: string }) =>\n r.requirement === u.requirement.type ||\n r.requirement === \"(predicate)\",\n );\n if (!hasResolver) {\n console.log(` ${pc.red(\"No resolver registered for this type\")}`);\n }\n }\n\n console.log();\n }\n\n console.log(\n pc.dim(\n `Run ${pc.cyan(`directive explain <file> <requirement-id>`)} for detailed explanation.`,\n ),\n );\n }\n }\n\n system.stop();\n}\n\nfunction formatState(state: string): string {\n switch (state) {\n case \"resolved\":\n return pc.green(\"resolved\");\n case \"errored\":\n return pc.red(\"errored\");\n case \"inflight\":\n return pc.yellow(\"inflight\");\n case \"pending\":\n return pc.yellow(\"pending\");\n case \"cancelled\":\n return pc.dim(\"cancelled\");\n default:\n return pc.dim(state);\n }\n}\n","import { existsSync, writeFileSync } from \"node:fs\";\nimport { join, resolve } from \"node:path\";\nimport pc from \"picocolors\";\nimport { loadSystem } from \"../lib/loader.js\";\n\ninterface GraphOptions {\n ascii: boolean;\n open: boolean;\n output?: string;\n}\n\nfunction parseArgs(args: string[]): { filePath: string; opts: GraphOptions } {\n const opts: GraphOptions = { ascii: false, open: true };\n let filePath = \"\";\n\n for (let i = 0; i < args.length; i++) {\n const arg = args[i];\n\n switch (arg) {\n case \"--ascii\":\n opts.ascii = true;\n break;\n case \"--no-open\":\n opts.open = false;\n break;\n case \"--output\": {\n const val = args[++i];\n if (val) {\n opts.output = val;\n }\n break;\n }\n default:\n if (arg && !arg.startsWith(\"-\") && !filePath) {\n filePath = arg;\n }\n }\n }\n\n return { filePath, opts };\n}\n\n// ---------------------------------------------------------------------------\n// ASCII graph renderer\n// ---------------------------------------------------------------------------\n\nfunction renderAsciiGraph(inspection: {\n constraints: Array<{\n id: string;\n active: boolean;\n disabled: boolean;\n priority: number;\n }>;\n resolverDefs: Array<{ id: string; requirement: string }>;\n unmet: Array<{\n id: string;\n requirement: { type: string };\n fromConstraint: string;\n }>;\n}): string {\n const lines: string[] = [];\n\n lines.push(pc.bold(\"Dependency Graph\"));\n lines.push(pc.dim(\"═\".repeat(50)));\n lines.push(\"\");\n\n // Group by flow: constraint → requirement → resolver\n const constraintMap = new Map<\n string,\n { reqTypes: Set<string>; active: boolean; priority: number }\n >();\n\n for (const c of inspection.constraints) {\n constraintMap.set(c.id, {\n reqTypes: new Set(),\n active: c.active,\n priority: c.priority,\n });\n }\n\n // Map unmet requirements to constraints\n for (const u of inspection.unmet) {\n const entry = constraintMap.get(u.fromConstraint);\n if (entry) {\n entry.reqTypes.add(u.requirement.type);\n }\n }\n\n // Map resolvers to requirement types\n const resolversByType = new Map<string, string[]>();\n for (const r of inspection.resolverDefs) {\n if (!resolversByType.has(r.requirement)) {\n resolversByType.set(r.requirement, []);\n }\n resolversByType.get(r.requirement)!.push(r.id);\n }\n\n // Render constraint flows\n lines.push(pc.bold(\"Constraints → Requirements → Resolvers\"));\n lines.push(\"\");\n\n for (const [id, info] of constraintMap) {\n const status = info.active ? pc.green(\"●\") : pc.dim(\"○\");\n lines.push(`${status} ${pc.cyan(id)} (priority: ${info.priority})`);\n\n if (info.reqTypes.size > 0) {\n for (const reqType of info.reqTypes) {\n lines.push(` └─▶ ${pc.yellow(reqType)}`);\n\n const resolvers = resolversByType.get(reqType) || [];\n if (resolvers.length > 0) {\n for (const r of resolvers) {\n lines.push(` └─▶ ${pc.magenta(r)}`);\n }\n } else {\n lines.push(` └─▶ ${pc.red(\"(no resolver)\")}`);\n }\n }\n } else {\n lines.push(` └─▶ ${pc.dim(\"(no active requirements)\")}`);\n }\n\n lines.push(\"\");\n }\n\n // Orphaned resolvers\n const usedResolvers = new Set<string>();\n for (const resolvers of resolversByType.values()) {\n for (const r of resolvers) {\n usedResolvers.add(r);\n }\n }\n\n const allResolverIds = inspection.resolverDefs.map((r) => r.id);\n const orphanedCount = allResolverIds.filter(\n (r) => !usedResolvers.has(r),\n ).length;\n\n if (orphanedCount > 0) {\n lines.push(pc.bold(\"Standalone Resolvers:\"));\n for (const r of inspection.resolverDefs) {\n if (!usedResolvers.has(r.id)) {\n lines.push(\n ` ${pc.magenta(r.id)} handles ${pc.yellow(r.requirement)}`,\n );\n }\n }\n }\n\n return lines.join(\"\\n\");\n}\n\n// ---------------------------------------------------------------------------\n// HTML graph renderer\n// ---------------------------------------------------------------------------\n\nfunction renderHtmlGraph(\n inspection: {\n constraints: Array<{\n id: string;\n active: boolean;\n disabled: boolean;\n priority: number;\n hitCount: number;\n }>;\n resolverDefs: Array<{ id: string; requirement: string }>;\n resolvers: Record<string, { state: string }>;\n unmet: Array<{\n id: string;\n requirement: { type: string };\n fromConstraint: string;\n }>;\n },\n facts: Record<string, unknown>,\n): string {\n // Build nodes and edges for a simple SVG visualization\n const nodes: Array<{\n id: string;\n label: string;\n type: \"fact\" | \"constraint\" | \"requirement\" | \"resolver\";\n x: number;\n y: number;\n color: string;\n }> = [];\n const edges: Array<{ from: string; to: string }> = [];\n\n const colWidth = 220;\n const rowHeight = 50;\n const startX = 40;\n const startY = 60;\n\n // Column 1: Facts\n const factKeys = Object.keys(facts);\n for (let i = 0; i < factKeys.length; i++) {\n const key = factKeys[i]!;\n nodes.push({\n id: `fact-${key}`,\n label: key,\n type: \"fact\",\n x: startX,\n y: startY + i * rowHeight,\n color: \"#3b82f6\",\n });\n }\n\n // Column 2: Constraints\n for (let i = 0; i < inspection.constraints.length; i++) {\n const c = inspection.constraints[i]!;\n nodes.push({\n id: `constraint-${c.id}`,\n label: c.id,\n type: \"constraint\",\n x: startX + colWidth,\n y: startY + i * rowHeight,\n color: c.active ? \"#22c55e\" : \"#6b7280\",\n });\n }\n\n // Column 3: Requirements (from unmet)\n const reqTypes = new Set<string>();\n for (const u of inspection.unmet) {\n reqTypes.add(u.requirement.type);\n }\n let reqIdx = 0;\n for (const reqType of reqTypes) {\n nodes.push({\n id: `req-${reqType}`,\n label: reqType,\n type: \"requirement\",\n x: startX + colWidth * 2,\n y: startY + reqIdx * rowHeight,\n color: \"#eab308\",\n });\n reqIdx++;\n }\n\n // Column 4: Resolvers\n for (let i = 0; i < inspection.resolverDefs.length; i++) {\n const r = inspection.resolverDefs[i]!;\n nodes.push({\n id: `resolver-${r.id}`,\n label: r.id,\n type: \"resolver\",\n x: startX + colWidth * 3,\n y: startY + i * rowHeight,\n color: \"#a855f7\",\n });\n }\n\n // Edges: constraint → requirement\n for (const u of inspection.unmet) {\n edges.push({\n from: `constraint-${u.fromConstraint}`,\n to: `req-${u.requirement.type}`,\n });\n }\n\n // Edges: requirement → resolver\n for (const r of inspection.resolverDefs) {\n if (reqTypes.has(r.requirement)) {\n edges.push({\n from: `req-${r.requirement}`,\n to: `resolver-${r.id}`,\n });\n }\n }\n\n const nodeMap = new Map(nodes.map((n) => [n.id, n]));\n const svgWidth = startX + colWidth * 4 + 40;\n const maxY = Math.max(...nodes.map((n) => n.y)) + rowHeight + 20;\n\n const edgeSvg = edges\n .map((e) => {\n const from = nodeMap.get(e.from);\n const to = nodeMap.get(e.to);\n if (!from || !to) {\n return \"\";\n }\n\n return `<line x1=\"${from.x + 90}\" y1=\"${from.y + 15}\" x2=\"${to.x}\" y2=\"${to.y + 15}\" stroke=\"#94a3b8\" stroke-width=\"1.5\" marker-end=\"url(#arrow)\"/>`;\n })\n .join(\"\\n \");\n\n const nodeSvg = nodes\n .map(\n (n) =>\n `<g>\n <rect x=\"${n.x}\" y=\"${n.y}\" width=\"180\" height=\"30\" rx=\"6\" fill=\"${n.color}\" opacity=\"0.15\" stroke=\"${n.color}\" stroke-width=\"1.5\"/>\n <text x=\"${n.x + 90}\" y=\"${n.y + 19}\" text-anchor=\"middle\" font-size=\"12\" font-family=\"monospace\" fill=\"${n.color}\">${escapeHtml(n.label)}</text>\n </g>`,\n )\n .join(\"\\n \");\n\n // Column headers\n const headers = [\"Facts\", \"Constraints\", \"Requirements\", \"Resolvers\"];\n const headerSvg = headers\n .map(\n (h, i) =>\n `<text x=\"${startX + i * colWidth + 90}\" y=\"35\" text-anchor=\"middle\" font-size=\"14\" font-weight=\"bold\" font-family=\"system-ui\" fill=\"#e2e8f0\">${h}</text>`,\n )\n .join(\"\\n \");\n\n return `<!DOCTYPE html>\n<html>\n<head>\n <title>Directive System Graph</title>\n <style>\n body { margin: 0; background: #0f172a; display: flex; justify-content: center; padding: 20px; }\n svg { max-width: 100%; }\n </style>\n</head>\n<body>\n <svg width=\"${svgWidth}\" height=\"${maxY}\" xmlns=\"http://www.w3.org/2000/svg\">\n <defs>\n <marker id=\"arrow\" viewBox=\"0 0 10 10\" refX=\"9\" refY=\"5\" markerWidth=\"6\" markerHeight=\"6\" orient=\"auto-start-reverse\">\n <path d=\"M 0 0 L 10 5 L 0 10 z\" fill=\"#94a3b8\"/>\n </marker>\n </defs>\n ${headerSvg}\n ${edgeSvg}\n ${nodeSvg}\n </svg>\n</body>\n</html>`;\n}\n\nfunction escapeHtml(text: string): string {\n return text\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/\"/g, \""\");\n}\n\n// ---------------------------------------------------------------------------\n// Command\n// ---------------------------------------------------------------------------\n\nexport async function graphCommand(args: string[]) {\n const { filePath, opts } = parseArgs(args);\n\n if (!filePath) {\n console.error(\"Usage: directive graph <file> [--ascii] [--no-open] [--output <path>]\");\n process.exit(1);\n }\n\n const system = await loadSystem(filePath);\n\n if (!system.isRunning) {\n system.start();\n }\n\n const inspection = system.inspect();\n\n if (opts.ascii) {\n console.log(renderAsciiGraph(inspection));\n system.stop();\n\n return;\n }\n\n // HTML output\n const factsObj: Record<string, unknown> = {};\n if (system.facts) {\n for (const key of Object.keys(system.facts)) {\n try {\n factsObj[key] = system.facts[key];\n } catch {\n factsObj[key] = null;\n }\n }\n }\n\n const html = renderHtmlGraph(inspection, factsObj);\n const outputPath = opts.output || join(process.cwd(), \".directive-graph.html\");\n\n writeFileSync(outputPath, html, \"utf-8\");\n console.log(`${pc.green(\"Generated\")} ${pc.dim(outputPath)}`);\n\n if (opts.open) {\n try {\n const { execFile } = await import(\"node:child_process\");\n const openCmd =\n process.platform === \"darwin\"\n ? \"open\"\n : process.platform === \"win32\"\n ? \"start\"\n : \"xdg-open\";\n execFile(openCmd, [outputPath]);\n console.log(pc.dim(\"Opened in browser.\"));\n } catch {\n console.log(\n pc.dim(`Open ${outputPath} in your browser to view the graph.`),\n );\n }\n }\n\n system.stop();\n}\n","import { existsSync, readFileSync, readdirSync, statSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport pc from \"picocolors\";\nimport { hasDirectiveSection } from \"../lib/merge.js\";\n\ninterface DoctorOptions {\n dir: string;\n}\n\nfunction parseArgs(args: string[]): DoctorOptions {\n const opts: DoctorOptions = { dir: process.cwd() };\n\n for (let i = 0; i < args.length; i++) {\n if (args[i] === \"--dir\") {\n const val = args[++i];\n if (val) {\n opts.dir = val;\n }\n }\n }\n\n return opts;\n}\n\n// ---------------------------------------------------------------------------\n// Checks\n// ---------------------------------------------------------------------------\n\ninterface CheckResult {\n label: string;\n passed: boolean;\n message: string;\n fix?: string;\n}\n\nfunction checkCoreInstalled(dir: string): CheckResult {\n const pkgPath = join(dir, \"package.json\");\n if (!existsSync(pkgPath)) {\n return {\n label: \"@directive-run/core installed\",\n passed: false,\n message: \"No package.json found\",\n fix: \"Run `npm init` to create a package.json\",\n };\n }\n\n const pkg = JSON.parse(readFileSync(pkgPath, \"utf-8\"));\n const deps = { ...pkg.dependencies, ...pkg.devDependencies };\n\n if (!deps[\"@directive-run/core\"]) {\n return {\n label: \"@directive-run/core installed\",\n passed: false,\n message: \"Not found in dependencies\",\n fix: \"Run `npm install @directive-run/core`\",\n };\n }\n\n return {\n label: \"@directive-run/core installed\",\n passed: true,\n message: `v${deps[\"@directive-run/core\"]}`,\n };\n}\n\nfunction checkVersionCompatibility(dir: string): CheckResult {\n const pkgPath = join(dir, \"package.json\");\n if (!existsSync(pkgPath)) {\n return {\n label: \"Package version compatibility\",\n passed: true,\n message: \"Skipped (no package.json)\",\n };\n }\n\n const pkg = JSON.parse(readFileSync(pkgPath, \"utf-8\"));\n const deps = { ...pkg.dependencies, ...pkg.devDependencies };\n\n const directivePackages = Object.keys(deps).filter((k) =>\n k.startsWith(\"@directive-run/\"),\n );\n\n if (directivePackages.length <= 1) {\n return {\n label: \"Package version compatibility\",\n passed: true,\n message: directivePackages.length === 0 ? \"No packages found\" : \"Single package\",\n };\n }\n\n return {\n label: \"Package version compatibility\",\n passed: true,\n message: `${directivePackages.length} packages: ${directivePackages.join(\", \")}`,\n };\n}\n\nfunction checkTypeScript(dir: string): CheckResult {\n const tsconfigPath = join(dir, \"tsconfig.json\");\n\n if (!existsSync(tsconfigPath)) {\n return {\n label: \"TypeScript configuration\",\n passed: false,\n message: \"No tsconfig.json found\",\n fix: \"Run `tsc --init` to create a TypeScript configuration\",\n };\n }\n\n try {\n // Simple JSON parse — doesn't handle comments or extends\n const raw = readFileSync(tsconfigPath, \"utf-8\");\n // Strip single-line comments for parsing\n const stripped = raw.replace(/\\/\\/.*$/gm, \"\").replace(/\\/\\*[\\s\\S]*?\\*\\//g, \"\");\n const config = JSON.parse(stripped);\n const co = config.compilerOptions || {};\n\n const issues: string[] = [];\n\n if (co.strict !== true) {\n issues.push(\"strict mode not enabled\");\n }\n\n if (\n co.moduleResolution &&\n ![\"bundler\", \"nodenext\", \"node16\"].includes(\n co.moduleResolution.toLowerCase(),\n )\n ) {\n issues.push(`moduleResolution is \"${co.moduleResolution}\"`);\n }\n\n if (issues.length > 0) {\n return {\n label: \"TypeScript configuration\",\n passed: false,\n message: issues.join(\", \"),\n fix: 'Set \"strict\": true and \"moduleResolution\": \"bundler\" in tsconfig.json',\n };\n }\n\n return {\n label: \"TypeScript configuration\",\n passed: true,\n message: \"strict mode, correct module resolution\",\n };\n } catch {\n return {\n label: \"TypeScript configuration\",\n passed: true,\n message: \"Found (could not parse for detailed checks)\",\n };\n }\n}\n\nfunction checkDuplicateInstances(dir: string): CheckResult {\n const nodeModules = join(dir, \"node_modules\");\n\n if (!existsSync(nodeModules)) {\n return {\n label: \"No duplicate Directive instances\",\n passed: true,\n message: \"No node_modules found\",\n };\n }\n\n const duplicates: string[] = [];\n\n // Check for nested @directive-run/core in node_modules\n try {\n const scopeDir = join(nodeModules, \"@directive-run\");\n if (existsSync(scopeDir)) {\n const packages = readdirSync(scopeDir);\n for (const pkg of packages) {\n const nestedCore = join(\n scopeDir,\n pkg,\n \"node_modules\",\n \"@directive-run\",\n \"core\",\n );\n if (existsSync(nestedCore)) {\n duplicates.push(`@directive-run/${pkg}/node_modules/@directive-run/core`);\n }\n }\n }\n } catch {\n // Can't read node_modules, skip\n }\n\n if (duplicates.length > 0) {\n return {\n label: \"No duplicate Directive instances\",\n passed: false,\n message: `Found ${duplicates.length} duplicate(s): ${duplicates.join(\", \")}`,\n fix: \"Run `npm dedupe` or check for version mismatches\",\n };\n }\n\n return {\n label: \"No duplicate Directive instances\",\n passed: true,\n message: \"No duplicates detected\",\n };\n}\n\nfunction checkAIRulesFreshness(dir: string): CheckResult {\n const ruleFiles = [\n \".cursorrules\",\n \".claude/CLAUDE.md\",\n \".github/copilot-instructions.md\",\n \".windsurfrules\",\n \".clinerules\",\n ];\n\n const found: string[] = [];\n\n for (const file of ruleFiles) {\n const filePath = join(dir, file);\n if (existsSync(filePath)) {\n const content = readFileSync(filePath, \"utf-8\");\n if (hasDirectiveSection(content)) {\n found.push(file);\n }\n }\n }\n\n if (found.length === 0) {\n return {\n label: \"AI coding rules\",\n passed: true,\n message: \"Not installed (optional)\",\n };\n }\n\n return {\n label: \"AI coding rules\",\n passed: true,\n message: `Installed for: ${found.join(\", \")}`,\n };\n}\n\n// ---------------------------------------------------------------------------\n// Command\n// ---------------------------------------------------------------------------\n\nexport async function doctorCommand(args: string[]) {\n const opts = parseArgs(args);\n\n console.log();\n console.log(pc.bold(pc.cyan(\"Directive Doctor\")));\n console.log(pc.dim(\"─\".repeat(40)));\n console.log();\n\n const checks = [\n checkCoreInstalled(opts.dir),\n checkVersionCompatibility(opts.dir),\n checkTypeScript(opts.dir),\n checkDuplicateInstances(opts.dir),\n checkAIRulesFreshness(opts.dir),\n ];\n\n let failures = 0;\n\n for (const check of checks) {\n const icon = check.passed ? pc.green(\"✓\") : pc.red(\"✗\");\n console.log(`${icon} ${pc.bold(check.label)}`);\n console.log(` ${pc.dim(check.message)}`);\n\n if (!check.passed && check.fix) {\n console.log(` ${pc.yellow(\"Fix:\")} ${check.fix}`);\n failures++;\n }\n\n console.log();\n }\n\n if (failures > 0) {\n console.log(\n pc.yellow(`${failures} issue(s) found. See suggested fixes above.`),\n );\n process.exit(1);\n } else {\n console.log(pc.green(\"All checks passed!\"));\n }\n}\n","import { existsSync, mkdirSync, writeFileSync } from \"node:fs\";\nimport { dirname, join, relative } from \"node:path\";\nimport pc from \"picocolors\";\nimport { getAllExamples, getExample, getExampleFiles } from \"../lib/knowledge.js\";\n\n// ---------------------------------------------------------------------------\n// Categories\n// ---------------------------------------------------------------------------\n\nconst CATEGORIES: Record<string, string[]> = {\n \"Getting Started\": [\"counter\", \"contact-form\", \"auth-flow\"],\n \"Core Patterns\": [\n \"async-chains\",\n \"batch-resolver\",\n \"debounce-constraints\",\n \"error-boundaries\",\n \"feature-flags\",\n \"multi-module\",\n \"optimistic-updates\",\n \"pagination\",\n \"permissions\",\n ],\n \"Real-World\": [\n \"dashboard-loader\",\n \"form-wizard\",\n \"newsletter\",\n \"notifications\",\n \"shopping-cart\",\n \"theme-locale\",\n \"url-sync\",\n \"websocket\",\n \"server\",\n ],\n Games: [\"checkers\", \"sudoku\", \"goal-heist\", \"ab-testing\"],\n AI: [\n \"ai-orchestrator\",\n \"ai-checkpoint\",\n \"ai-guardrails\",\n \"fraud-analysis\",\n \"provider-routing\",\n \"topic-guard\",\n \"dynamic-modules\",\n \"time-machine\",\n ],\n};\n\nfunction getCategory(name: string): string {\n for (const [cat, names] of Object.entries(CATEGORIES)) {\n if (names.includes(name)) {\n return cat;\n }\n }\n\n return \"Other\";\n}\n\nfunction getDescription(content: string): string {\n // Extract first line comment or jsdoc summary\n const lines = content.split(\"\\n\");\n\n for (const line of lines) {\n const trimmed = line.trim();\n\n // Match: // Example: name or // Source: ...\n if (trimmed.startsWith(\"// Example:\")) {\n continue;\n }\n if (trimmed.startsWith(\"// Source:\")) {\n continue;\n }\n if (trimmed.startsWith(\"// Extracted\")) {\n continue;\n }\n\n // Match JSDoc: * Description text\n const jsdocMatch = trimmed.match(/^\\*\\s+(.+?)(?:\\s*\\*\\/)?$/);\n if (jsdocMatch?.[1] && !jsdocMatch[1].startsWith(\"@\")) {\n return jsdocMatch[1];\n }\n\n // Match: // Description text\n if (trimmed.startsWith(\"//\") && trimmed.length > 3) {\n return trimmed.slice(2).trim();\n }\n\n // Stop at first non-comment line\n if (\n trimmed !== \"\" &&\n !trimmed.startsWith(\"//\") &&\n !trimmed.startsWith(\"/*\") &&\n !trimmed.startsWith(\"*\")\n ) {\n break;\n }\n }\n\n return \"\";\n}\n\n// ---------------------------------------------------------------------------\n// List command\n// ---------------------------------------------------------------------------\n\nexport async function examplesListCommand(args: string[]) {\n let filter: string | undefined;\n\n for (let i = 0; i < args.length; i++) {\n if (args[i] === \"--filter\") {\n filter = args[++i]?.toLowerCase();\n }\n }\n\n const examples = getAllExamples();\n\n console.log();\n console.log(pc.bold(pc.cyan(\"Directive Examples\")));\n console.log(pc.dim(\"─\".repeat(50)));\n console.log();\n\n // Group by category\n const byCategory = new Map<string, Array<{ name: string; desc: string }>>();\n\n for (const [name, content] of examples) {\n const cat = getCategory(name);\n\n if (filter && !cat.toLowerCase().includes(filter) && !name.includes(filter)) {\n continue;\n }\n\n if (!byCategory.has(cat)) {\n byCategory.set(cat, []);\n }\n byCategory.get(cat)!.push({ name, desc: getDescription(content) });\n }\n\n if (byCategory.size === 0) {\n console.log(pc.dim(\"No examples match the filter.\"));\n\n return;\n }\n\n // Print in category order\n const categoryOrder = Object.keys(CATEGORIES);\n const sortedCategories = [...byCategory.keys()].sort(\n (a, b) => (categoryOrder.indexOf(a) ?? 99) - (categoryOrder.indexOf(b) ?? 99),\n );\n\n for (const cat of sortedCategories) {\n const items = byCategory.get(cat)!;\n console.log(pc.bold(cat));\n\n for (const item of items) {\n const desc = item.desc ? pc.dim(` — ${item.desc}`) : \"\";\n console.log(` ${pc.cyan(item.name)}${desc}`);\n }\n\n console.log();\n }\n\n console.log(\n pc.dim(`${examples.size} examples available. Run ${pc.cyan(\"directive examples copy <name>\")} to extract one.`),\n );\n}\n\n// ---------------------------------------------------------------------------\n// Copy command\n// ---------------------------------------------------------------------------\n\nexport async function examplesCopyCommand(\n name: string,\n args: string[],\n) {\n let dest = process.cwd();\n\n for (let i = 0; i < args.length; i++) {\n if (args[i] === \"--dest\") {\n const val = args[++i];\n if (val) {\n dest = val;\n }\n }\n }\n\n if (!name) {\n console.error(\"Usage: directive examples copy <name> [--dest <dir>]\");\n process.exit(1);\n }\n\n const content = getExample(name);\n\n if (!content) {\n console.error(`Example \"${name}\" not found.`);\n console.error(\n `Run ${pc.cyan(\"directive examples list\")} to see available examples.`,\n );\n process.exit(1);\n }\n\n // Rewrite workspace imports to published package names\n const rewritten = content\n .replace(\n /from\\s+[\"']@directive-run\\/core\\/plugins[\"']/g,\n 'from \"@directive-run/core/plugins\"',\n )\n .replace(\n /from\\s+[\"']@directive-run\\/core[\"']/g,\n 'from \"@directive-run/core\"',\n )\n .replace(\n /from\\s+[\"']@directive-run\\/ai[\"']/g,\n 'from \"@directive-run/ai\"',\n );\n\n const filePath = join(dest, `${name}.ts`);\n\n if (existsSync(filePath)) {\n console.error(`File already exists: ${relative(process.cwd(), filePath)}`);\n process.exit(1);\n }\n\n const dir = dirname(filePath);\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true });\n }\n\n writeFileSync(filePath, rewritten, \"utf-8\");\n\n const rel = relative(process.cwd(), filePath);\n console.log(`${pc.green(\"Copied\")} ${pc.cyan(name)} → ${pc.dim(rel)}`);\n}\n","import { CLI_NAME } from \"./lib/constants.js\";\nimport {\n aiRulesCommand,\n aiRulesUpdateCommand,\n aiRulesCheckCommand,\n} from \"./commands/ai-rules.js\";\nimport { initCommand } from \"./commands/init.js\";\nimport { newModuleCommand, newOrchestratorCommand } from \"./commands/new.js\";\nimport { inspectCommand } from \"./commands/inspect.js\";\nimport { explainCommand } from \"./commands/explain.js\";\nimport { graphCommand } from \"./commands/graph.js\";\nimport { doctorCommand } from \"./commands/doctor.js\";\nimport { examplesListCommand, examplesCopyCommand } from \"./commands/examples.js\";\n\nconst HELP = `\n${CLI_NAME} — CLI tools for Directive\n\nUsage: ${CLI_NAME} <command> [options]\n\nCommands:\n init Project scaffolding wizard\n new module <name> Generate a module file\n new orchestrator <name> Generate an AI orchestrator\n inspect <file> Runtime system introspection\n explain <file> [req-id] Explain why a requirement exists\n graph <file> Visual dependency graph\n doctor Health check for project setup\n ai-rules init Install AI coding rules\n ai-rules update Refresh rules to latest version\n ai-rules check Validate rules are current (CI)\n examples list Browse available examples\n examples copy <name> Extract example to project\n\nOptions:\n --help, -h Show this help message\n --version, -v Show version\n\ninit options:\n --template <name> Template: counter, auth-flow, ai-orchestrator\n --dir <path> Target directory (default: cwd)\n --no-interactive Skip prompts, use defaults\n\nnew module options:\n --with <sections> Sections: derive,events,constraints,resolvers,effects\n --minimal Schema + init only\n --dir <path> Target directory (default: cwd)\n\ninspect options:\n --json Output as JSON\n --module <name> Inspect specific module\n\ngraph options:\n --ascii Terminal-only output\n --no-open Don't open in browser\n --output <path> Output file path\n\nai-rules init options:\n --force Overwrite existing files without asking\n --merge Use section markers to update only the Directive section\n --tool <name> Skip detection, install for specific tool(s)\n --dir <path> Target directory (default: cwd)\n\nexamples options:\n --filter <category> Filter by category or name\n --dest <dir> Destination directory for copy\n`.trim();\n\nasync function main() {\n const args = process.argv.slice(2);\n\n if (args.length === 0 || args.includes(\"--help\") || args.includes(\"-h\")) {\n console.log(HELP);\n process.exit(0);\n }\n\n if (args.includes(\"--version\") || args.includes(\"-v\")) {\n const { readFileSync } = await import(\"node:fs\");\n const { fileURLToPath } = await import(\"node:url\");\n const { dirname, join } = await import(\"node:path\");\n\n const __dirname = dirname(fileURLToPath(import.meta.url));\n const pkg = JSON.parse(\n readFileSync(join(__dirname, \"..\", \"package.json\"), \"utf-8\"),\n );\n\n console.log(pkg.version);\n process.exit(0);\n }\n\n const command = args[0];\n\n switch (command) {\n case \"init\": {\n await initCommand(args.slice(1));\n break;\n }\n\n case \"new\": {\n const subcommand = args[1];\n const name = args[2];\n\n if (subcommand === \"module\") {\n if (!name) {\n console.error(\"Usage: directive new module <name>\");\n process.exit(1);\n }\n await newModuleCommand(name, args.slice(3));\n } else if (subcommand === \"orchestrator\") {\n if (!name) {\n console.error(\"Usage: directive new orchestrator <name>\");\n process.exit(1);\n }\n await newOrchestratorCommand(name, args.slice(3));\n } else {\n console.error(\n `Unknown subcommand: ${subcommand ?? \"(none)\"}\\n` +\n `Usage: ${CLI_NAME} new module <name>\\n` +\n ` ${CLI_NAME} new orchestrator <name>`,\n );\n process.exit(1);\n }\n break;\n }\n\n case \"inspect\": {\n await inspectCommand(args.slice(1));\n break;\n }\n\n case \"explain\": {\n await explainCommand(args.slice(1));\n break;\n }\n\n case \"graph\": {\n await graphCommand(args.slice(1));\n break;\n }\n\n case \"doctor\": {\n await doctorCommand(args.slice(1));\n break;\n }\n\n case \"ai-rules\": {\n const subcommand = args[1];\n\n if (subcommand === \"init\") {\n await aiRulesCommand(args.slice(2));\n } else if (subcommand === \"update\") {\n await aiRulesUpdateCommand(args.slice(2));\n } else if (subcommand === \"check\") {\n await aiRulesCheckCommand(args.slice(2));\n } else {\n console.error(\n `Unknown subcommand: ${subcommand ?? \"(none)\"}\\n` +\n `Usage: ${CLI_NAME} ai-rules init\\n` +\n ` ${CLI_NAME} ai-rules update\\n` +\n ` ${CLI_NAME} ai-rules check`,\n );\n process.exit(1);\n }\n break;\n }\n\n case \"examples\": {\n const subcommand = args[1];\n\n if (subcommand === \"list\") {\n await examplesListCommand(args.slice(2));\n } else if (subcommand === \"copy\") {\n const name = args[2];\n if (!name) {\n console.error(\"Usage: directive examples copy <name>\");\n process.exit(1);\n }\n await examplesCopyCommand(name, args.slice(3));\n } else {\n console.error(\n `Unknown subcommand: ${subcommand ?? \"(none)\"}\\n` +\n `Usage: ${CLI_NAME} examples list [--filter <category>]\\n` +\n ` ${CLI_NAME} examples copy <name> [--dest <dir>]`,\n );\n process.exit(1);\n }\n break;\n }\n\n default:\n console.error(\n `Unknown command: ${command}\\nRun '${CLI_NAME} --help' for usage.`,\n );\n process.exit(1);\n }\n}\n\nmain().catch((err) => {\n console.error(err.message || err);\n process.exit(1);\n});\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/lib/constants.ts","../src/lib/detect.ts","../src/lib/merge.ts","../src/lib/monorepo.ts","../src/templates/claude.ts","../src/templates/cursor.ts","../src/templates/copilot.ts","../src/templates/cline.ts","../src/templates/windsurf.ts","../src/templates/index.ts","../src/commands/ai-rules.ts","../src/lib/loader.ts","../src/lib/timeline-loader.ts","../src/commands/bisect.ts","../src/commands/doctor.ts","../src/commands/examples.ts","../src/commands/explain.ts","../src/commands/graph.ts","../src/commands/init.ts","../src/commands/inspect.ts","../src/commands/new.ts","../src/commands/replay.ts","../src/commands/timeline-diff.ts","../src/cli.ts"],"names":["CLI_NAME","SECTION_START","SECTION_END","TOOL_SIGNALS","detectTools","rootDir","detected","tool","signal","existsSync","join","getToolConfig","id","t","getAllToolIds","mergeSection","existingContent","newSection","startIdx","endIdx","wrapped","separator","hasDirectiveSection","content","MONOREPO_SIGNALS","detectMonorepo","startDir","dir","resolve","dirname","pkgPath","readFileSync","generateClaudeRules","corePatterns","getKnowledge","antiPatterns","naming","schemaTypes","generateCursorRules","generateCopilotRules","generateClineRules","generateWindsurfRules","generators","getTemplate","toolId","generator","parseArgs","args","opts","i","val","aiRulesCommand","pc","mono","targetDir","placement","relative","selectedTools","config","choices","s","filePath","fileExists","writeFile","action","mkdirSync","writeFileSync","aiRulesUpdateCommand","ruleFiles","updated","file","existing","newContent","merged","aiRulesCheckCommand","checked","stale","freshContent","loadSystem","resolved","mod","isSystem","key","err","obj","sys","loadSystemFactory","candidates","name","candidate","result","loadTimelinePackage","verbose","jsonPath","arg","printUsage","compileAssertion","expr","fn","system","facts","bisectCommand","resolvedJson","raw","parsed","deserializeTimeline","bisectTimeline","timeline","assertion","factory","lean","idx","frame","eventType","checkCoreInstalled","pkg","deps","checkVersionCompatibility","directivePackages","k","checkTypeScript","tsconfigPath","stripped","co","issues","checkDuplicateInstances","nodeModules","duplicates","scopeDir","packages","readdirSync","nestedCore","checkAIRulesFreshness","found","doctorCommand","checks","failures","check","icon","CATEGORIES","getCategory","cat","names","getDescription","lines","line","trimmed","jsdocMatch","examplesListCommand","filter","examples","getAllExamples","byCategory","categoryOrder","sortedCategories","a","b","items","item","desc","examplesCopyCommand","dest","getExample","rewritten","rel","requirementId","explainCommand","inspection","explanation","u","resolverEntries","status","state","formatState","dur","payload","resolverStatus","r","renderAsciiGraph","constraintMap","c","entry","resolversByType","info","reqType","resolvers","usedResolvers","renderHtmlGraph","nodes","edges","factKeys","reqTypes","reqIdx","nodeMap","n","svgWidth","maxY","edgeSvg","e","from","to","nodeSvg","escapeHtml","headerSvg","h","text","graphCommand","factsObj","html","outputPath","execFile","openCmd","detectPackageManager","installCmd","pm","getTemplates","moduleName","generateCounterModule","generateCounterMain","generateAuthModule","generateAuthMain","generateAIModule","generateAIMain","toCamelCase","camelName","_","initCommand","w","nameResult","templateId","templates","choice","template","skipped","depsCmd","formatFacts","entries","value","formatted","formatValue","formatConstraints","constraints","hits","formatResolverDefs","resolverDefs","def","stateStr","formatResolverState","formatUnmet","unmet","formatInflight","inflight","now","inf","elapsed","error","duration","findWarnings","warnings","inspectCommand","ALL_SECTIONS","generateModule","sections","hasConstraints","hasResolvers","code","generateOrchestrator","findModulesDir","newModuleCommand","newOrchestratorCommand","replayCommand","replayTimeline","dispatched","truncated","ok","positionals","fmtSign","fmtCountDelta","rows","fmtResolverRows","fmtErrors","sideTag","errStr","readTimeline","path","timelineDiffCommand","aPath","bPath","diffTimelines","aRaw","bRaw","aTl","bTl","diff","HELP","main","fileURLToPath","__dirname","command","subcommand"],"mappings":";uQAAO,IAAMA,CAAAA,CAAW,WAAA,CAGjB,IAAMC,CAAAA,CAAgB,0BAAA,CAChBC,EAAc,wBAAA,CCK3B,IAAMC,EAAAA,CAKD,CACH,CACE,EAAA,CAAI,QAAA,CACJ,IAAA,CAAM,QAAA,CACN,OAAA,CAAS,CAAC,UAAW,cAAc,CAAA,CACnC,WAAY,cACd,CAAA,CACA,CACE,EAAA,CAAI,QAAA,CACJ,KAAM,aAAA,CACN,OAAA,CAAS,CAAC,SAAS,CAAA,CACnB,WAAY,mBACd,CAAA,CACA,CACE,EAAA,CAAI,SAAA,CACJ,IAAA,CAAM,gBAAA,CACN,OAAA,CAAS,CAAC,SAAS,CAAA,CACnB,UAAA,CAAY,iCACd,CAAA,CACA,CACE,GAAI,UAAA,CACJ,IAAA,CAAM,UAAA,CACN,OAAA,CAAS,CAAC,gBAAgB,EAC1B,UAAA,CAAY,gBACd,EACA,CACE,EAAA,CAAI,QACJ,IAAA,CAAM,OAAA,CACN,OAAA,CAAS,CAAC,aAAa,CAAA,CACvB,WAAY,aACd,CACF,EAEO,SAASC,EAAAA,CAAYC,EAAiC,CAC3D,IAAMC,EAA2B,EAAC,CAElC,QAAWC,CAAAA,IAAQJ,EAAAA,CACCI,EAAK,OAAA,CAAQ,IAAA,CAAMC,GACnCC,UAAAA,CAAWC,IAAAA,CAAKL,CAAAA,CAASG,CAAM,CAAC,CAClC,GAGEF,CAAAA,CAAS,IAAA,CAAK,CACZ,IAAA,CAAMC,CAAAA,CAAK,KACX,EAAA,CAAIA,CAAAA,CAAK,EAAA,CACT,UAAA,CAAYG,IAAAA,CAAKL,CAAAA,CAASE,EAAK,UAAU,CAC3C,CAAC,CAAA,CAIL,OAAOD,CACT,CAEO,SAASK,CAAAA,CAAcC,CAAAA,CAAwB,CACpD,IAAML,EAAOJ,EAAAA,CAAa,IAAA,CAAMU,GAAMA,CAAAA,CAAE,EAAA,GAAOD,CAAE,CAAA,CACjD,GAAI,CAACL,CAAAA,CACH,MAAM,IAAI,MAAM,CAAA,cAAA,EAAiBK,CAAE,EAAE,CAAA,CAGvC,OAAOL,CACT,CAEO,SAASO,EAAAA,EAAsC,CACpD,OAAOX,EAAAA,CAAa,IAAKU,CAAAA,EAAMA,CAAAA,CAAE,EAAE,CACrC,CCxEO,SAASE,CAAAA,CACdC,CAAAA,CACAC,CAAAA,CACQ,CACR,IAAMC,CAAAA,CAAWF,EAAgB,OAAA,CAAQf,CAAa,EAChDkB,CAAAA,CAASH,CAAAA,CAAgB,QAAQd,CAAW,CAAA,CAE5CkB,CAAAA,CAAU,CAAA,EAAGnB,CAAa;AAAA,EAAKgB,CAAU;AAAA,EAAKf,CAAW,CAAA,CAAA,CAE/D,GAAIgB,CAAAA,GAAa,EAAA,EAAMC,IAAW,EAAA,EAAMA,CAAAA,CAASD,CAAAA,CAC/C,OACEF,CAAAA,CAAgB,KAAA,CAAM,EAAGE,CAAQ,CAAA,CACjCE,CAAAA,CACAJ,CAAAA,CAAgB,KAAA,CAAMG,CAAAA,CAASjB,CAAAA,CAAY,MAAM,CAAA,CAIrD,IAAMmB,CAAAA,CAAYL,CAAAA,CAAgB,QAAA,CAAS;AAAA,CAAI,CAAA,CAAI;AAAA,CAAA,CAAO;;AAAA,CAAA,CAE1D,OAAOA,CAAAA,CAAkBK,CAAAA,CAAYD,CAAAA,CAAU;AAAA,CACjD,CAKO,SAASE,CAAAA,CAAoBC,EAA0B,CAC5D,OAAOA,EAAQ,QAAA,CAAStB,CAAa,CAAA,EAAKsB,CAAAA,CAAQ,SAASrB,CAAW,CACxE,CCxBA,IAAMsB,EAAAA,CAAmB,CACvB,CAAE,KAAM,qBAAA,CAAuB,IAAA,CAAM,MAAgB,CAAA,CACrD,CAAE,KAAM,YAAA,CAAc,IAAA,CAAM,OAAiB,CAC/C,EAEO,SAASC,EAAAA,CAAeC,EAAgC,CAC7D,IAAIC,EAAMC,OAAAA,CAAQF,CAAQ,CAAA,CAE1B,KAAOC,IAAQE,OAAAA,CAAQF,CAAG,GAAG,CAC3B,IAAA,IAAWnB,KAAUgB,EAAAA,CACnB,GAAIf,UAAAA,CAAWC,IAAAA,CAAKiB,EAAKnB,CAAAA,CAAO,IAAI,CAAC,CAAA,CACnC,OAAO,CAAE,UAAA,CAAY,IAAA,CAAM,OAAA,CAASmB,CAAAA,CAAK,KAAMnB,CAAAA,CAAO,IAAK,EAI/D,IAAMsB,CAAAA,CAAUpB,KAAKiB,CAAAA,CAAK,cAAc,CAAA,CACxC,GAAIlB,WAAWqB,CAAO,CAAA,CACpB,GAAI,CAEF,GADY,KAAK,KAAA,CAAMC,YAAAA,CAAaD,CAAAA,CAAS,OAAO,CAAC,CAAA,CAC7C,UAAA,CAAY,CAClB,IAAMvB,CAAAA,CAAOE,WAAWC,IAAAA,CAAKiB,CAAAA,CAAK,WAAW,CAAC,EACzC,MAAA,CACA,KAAA,CAEL,OAAO,CAAE,UAAA,CAAY,GAAM,OAAA,CAASA,CAAAA,CAAK,IAAA,CAAApB,CAAK,CAChD,CACF,CAAA,KAAQ,CAER,CAGFoB,CAAAA,CAAME,QAAQF,CAAG,EACnB,CAEA,OAAO,CAAE,UAAA,CAAY,KAAA,CAAO,QAASD,CAAS,CAChD,CCrCO,SAASM,IAA8B,CAE5C,IAAMC,EAAeC,YAAAA,CAAa,eAAe,EAC3CC,CAAAA,CAAeD,YAAAA,CAAa,eAAe,CAAA,CAC3CE,CAAAA,CAASF,aAAa,QAAQ,CAAA,CAC9BG,EAAcH,YAAAA,CAAa,cAAc,EAE/C,OAAO,CAAA;;AAAA;AAAA;AAAA;;AAAA;;AAAA,EAQPD,CAAY;;AAAA;;AAAA;;AAAA,EAMZE,CAAY;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA,EA2BZC,CAAM;;AAAA;;AAAA;;AAAA,EAMNC,CAAW;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;;AAAA;AAAA;;AAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;;AAAA;;AAAA;;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA,CA8Kb,CCvOO,SAASC,CAAAA,EAA8B,CAC5C,OAAO,65GAuFT,CCtFO,SAASC,CAAAA,EAA+B,CA2D7C,OA1DaD,CAAAA,GAGa,y2BAAA,CAiBN;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA,CAeH;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAwBnB,CC5DO,SAASE,EAAAA,EAA6B,CAC3C,OAAOD,GACT,CCFO,SAASE,EAAAA,EAAgC,CAC9C,OAAOF,GACT,CCAA,IAAMG,EAAAA,CAAuD,CAC3D,MAAA,CAAQJ,CAAAA,CACR,MAAA,CAAQN,EAAAA,CACR,OAAA,CAASO,CAAAA,CACT,QAAA,CAAUE,EAAAA,CACV,KAAA,CAAOD,EACT,CAAA,CAEO,SAASG,CAAAA,CAAYC,CAAAA,CAAoC,CAC9D,IAAMC,EAAYH,EAAAA,CAAWE,CAAM,CAAA,CACnC,GAAI,CAACC,CAAAA,CACH,MAAM,IAAI,KAAA,CAAM,CAAA,sBAAA,EAAyBD,CAAM,CAAA,CAAE,CAAA,CAGnD,OAAOC,CAAAA,EACT,CCDA,SAASC,EAAAA,CAAUC,CAAAA,CAAyB,CAC1C,IAAMC,CAAAA,CAAgB,CACpB,KAAA,CAAO,KAAA,CACP,KAAA,CAAO,KAAA,CACP,MAAO,EAAC,CACR,GAAA,CAAK,OAAA,CAAQ,GAAA,EACf,EAEA,IAAA,IAASC,CAAAA,CAAI,CAAA,CAAGA,CAAAA,CAAIF,CAAAA,CAAK,MAAA,CAAQE,CAAAA,EAAAA,CAG/B,OAFYF,CAAAA,CAAKE,CAAC,CAAA,EAGhB,KAAK,SAAA,CACHD,EAAK,KAAA,CAAQ,IAAA,CACb,MACF,KAAK,SAAA,CACHA,CAAAA,CAAK,MAAQ,IAAA,CACb,MACF,KAAK,QAAA,CAAU,CACb,IAAME,EAAMH,CAAAA,CAAK,EAAEE,CAAC,CAAA,CAChBC,CAAAA,EACFF,CAAAA,CAAK,KAAA,CAAM,IAAA,CAAKE,CAAG,CAAA,CAErB,KACF,CACA,KAAK,OAAA,CAAS,CACZ,IAAMA,CAAAA,CAAMH,CAAAA,CAAK,EAAEE,CAAC,CAAA,CAChBC,IACFF,CAAAA,CAAK,GAAA,CAAME,CAAAA,CAAAA,CAEb,KACF,CACF,CAGF,OAAOF,CACT,CAEA,eAAsBG,EAAAA,CAAeJ,CAAAA,CAAgB,CACnD,IAAMC,CAAAA,CAAOF,EAAAA,CAAUC,CAAI,CAAA,CAEzB,CAAA,CAAA,KAAA,CAAMK,CAAAA,CAAG,MAAA,CAAOA,EAAG,KAAA,CAAM,sBAAsB,CAAC,CAAC,CAAA,CAGnD,IAAMC,EAAO5B,EAAAA,CAAeuB,CAAAA,CAAK,GAAG,CAAA,CAChCM,CAAAA,CAAYN,CAAAA,CAAK,IAErB,GAAIK,CAAAA,CAAK,UAAA,EAAcA,CAAAA,CAAK,OAAA,GAAYL,CAAAA,CAAK,GAAA,CAAK,CAChD,IAAMO,CAAAA,CAAY,MAAQ,CAAA,CAAA,MAAA,CAAO,CAC/B,OAAA,CAAS,yDACT,OAAA,CAAS,CACP,CACE,KAAA,CAAO,MAAA,CACP,KAAA,CAAO,kBAAkBC,QAAAA,CAASR,CAAAA,CAAK,GAAA,CAAKK,CAAAA,CAAK,OAAO,CAAA,EAAK,GAAG,CAAA,CAAA,CAAA,CAChE,IAAA,CAAM,aACR,CAAA,CACA,CACE,KAAA,CAAO,WAAA,CACP,KAAA,CAAO,CAAA,mBAAA,EAAsBG,QAAAA,CAASH,CAAAA,CAAK,OAAA,CAASL,CAAAA,CAAK,GAAG,CAAC,CAAA,CAAA,CAC/D,CACF,CACF,CAAC,CAAA,CAEK,CAAA,CAAA,QAAA,CAASO,CAAS,CAAA,GACpB,CAAA,CAAA,MAAA,CAAO,YAAY,CAAA,CACrB,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,CAAA,CAGZA,CAAAA,GAAc,MAAA,GAChBD,CAAAA,CAAYD,CAAAA,CAAK,OAAA,EAErB,CAGA,IAAII,CAAAA,CAEJ,GAAIT,CAAAA,CAAK,KAAA,CAAM,MAAA,CAAS,CAAA,CACtBS,EAAgBT,CAAAA,CAAK,KAAA,CAAM,GAAA,CAAKpC,CAAAA,EAAO,CACrC,IAAM8C,EAAS/C,CAAAA,CAAcC,CAAwB,CAAA,CAErD,OAAO,CACL,IAAA,CAAM8C,EAAO,IAAA,CACb,EAAA,CAAIA,CAAAA,CAAO,EAAA,CACX,UAAA,CAAYhD,IAAAA,CAAK4C,CAAAA,CAAWI,CAAAA,CAAO,UAAU,CAC/C,CACF,CAAC,CAAA,CAAA,KACI,CACL,IAAMpD,CAAAA,CAAWF,EAAAA,CAAYkD,CAAS,CAAA,CAEtC,GAAIhD,CAAAA,CAAS,OAAS,CAAA,CAAG,CACvB,IAAMqD,CAAAA,CAAU,MAAQ,CAAA,CAAA,WAAA,CAAY,CAClC,OAAA,CAAS,CAAA,SAAA,EAAYrD,CAAAA,CAAS,MAAM,CAAA,8CAAA,CAAA,CACpC,OAAA,CAASA,CAAAA,CAAS,GAAA,CAAKO,CAAAA,GAAO,CAC5B,KAAA,CAAOA,CAAAA,CAAE,EAAA,CACT,KAAA,CAAOA,EAAE,IAAA,CACT,IAAA,CAAM2C,QAAAA,CAASF,CAAAA,CAAWzC,CAAAA,CAAE,UAAU,CACxC,CAAA,CAAE,CAAA,CACF,aAAA,CAAeP,CAAAA,CAAS,GAAA,CAAKO,CAAAA,EAAMA,EAAE,EAAE,CAAA,CACvC,QAAA,CAAU,IACZ,CAAC,CAAA,CAEK,CAAA,CAAA,QAAA,CAAS8C,CAAO,CAAA,GAClB,CAAA,CAAA,MAAA,CAAO,YAAY,CAAA,CACrB,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,CAAA,CAGhBF,CAAAA,CAAiBE,CAAAA,CAAiC,GAAA,CAAK/C,CAAAA,EAAO,CAC5D,IAAM8C,CAAAA,CAAS/C,CAAAA,CAAcC,CAAE,CAAA,CAE/B,OAAO,CACL,KAAM8C,CAAAA,CAAO,IAAA,CACb,EAAA,CAAIA,CAAAA,CAAO,EAAA,CACX,UAAA,CAAYhD,IAAAA,CAAK4C,CAAAA,CAAWI,CAAAA,CAAO,UAAU,CAC/C,CACF,CAAC,EACH,MAAO,CACL,IAAMC,CAAAA,CAAU,MAAQ,CAAA,CAAA,WAAA,CAAY,CAClC,QAAS,+CAAA,CACT,OAAA,CAAS7C,EAAAA,EAAc,CAAE,GAAA,CAAKF,CAAAA,EAAO,CACnC,IAAM8C,CAAAA,CAAS/C,CAAAA,CAAcC,CAAE,CAAA,CAE/B,OAAO,CAAE,KAAA,CAAOA,CAAAA,CAAI,KAAA,CAAO8C,CAAAA,CAAO,IAAK,CACzC,CAAC,EACD,QAAA,CAAU,IACZ,CAAC,CAAA,CAEK,CAAA,CAAA,QAAA,CAASC,CAAO,IAClB,CAAA,CAAA,MAAA,CAAO,YAAY,CAAA,CACrB,OAAA,CAAQ,IAAA,CAAK,CAAC,GAGhBF,CAAAA,CAAiBE,CAAAA,CAAiC,GAAA,CAAK/C,CAAAA,EAAO,CAC5D,IAAM8C,CAAAA,CAAS/C,CAAAA,CAAcC,CAAE,CAAA,CAE/B,OAAO,CACL,IAAA,CAAM8C,CAAAA,CAAO,KACb,EAAA,CAAIA,CAAAA,CAAO,EAAA,CACX,UAAA,CAAYhD,IAAAA,CAAK4C,CAAAA,CAAWI,EAAO,UAAU,CAC/C,CACF,CAAC,EACH,CACF,CAEID,CAAAA,CAAc,MAAA,GAAW,CAAA,GACzB,CAAA,CAAA,MAAA,CAAO,oBAAoB,CAAA,CAC7B,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,CAAA,CAIhB,IAAMG,CAAAA,CAAM,CAAA,CAAA,OAAA,EAAQ,CAEpB,QAAWrD,CAAAA,IAAQkD,CAAAA,CAAe,CAChCG,CAAAA,CAAE,KAAA,CAAM,CAAA,WAAA,EAAcrD,CAAAA,CAAK,IAAI,CAAA,SAAA,CAAW,CAAA,CAE1C,IAAMgB,CAAAA,CAAUoB,CAAAA,CAAYpC,CAAAA,CAAK,EAAE,CAAA,CAC7BsD,CAAAA,CAAWtD,CAAAA,CAAK,UAAA,CAChBuD,CAAAA,CAAarD,UAAAA,CAAWoD,CAAQ,CAAA,CAItC,GAFAD,CAAAA,CAAE,IAAA,CAAK,CAAA,UAAA,EAAarD,CAAAA,CAAK,IAAI,SAAS,CAAA,CAElCuD,CAAAA,EAAc,CAACd,CAAAA,CAAK,KAAA,CAAO,CAC7B,IAAMhC,CAAAA,CAAkBe,YAAAA,CAAa8B,CAAAA,CAAU,OAAO,CAAA,CAEtD,GAAIb,EAAK,KAAA,CAAO,CACde,CAAAA,CAAUF,CAAAA,CAAU9C,CAAAA,CAAaC,CAAAA,CAAiBO,CAAO,CAAC,CAAA,CACxD,CAAA,CAAA,GAAA,CAAI,OAAA,CACJ,CAAA,EAAG6B,CAAAA,CAAG,KAAA,CAAM,QAAQ,CAAC,CAAA,wBAAA,EAA2BA,CAAAA,CAAG,GAAA,CAAII,QAAAA,CAASF,CAAAA,CAAWO,CAAQ,CAAC,CAAC,CAAA,CACvF,CAAA,CACA,QACF,CAEA,GAAIvC,CAAAA,CAAoBN,CAAe,CAAA,CAAG,CACxC,IAAMgD,CAAAA,CAAS,MAAQ,CAAA,CAAA,MAAA,CAAO,CAC5B,OAAA,CAAS,CAAA,EAAGR,QAAAA,CAASF,CAAAA,CAAWO,CAAQ,CAAC,CAAA,oDAAA,CAAA,CACzC,OAAA,CAAS,CACP,CACE,KAAA,CAAO,OAAA,CACP,MAAO,+BAAA,CACP,IAAA,CAAM,aACR,CAAA,CACA,CAAE,KAAA,CAAO,YAAa,KAAA,CAAO,uBAAwB,CAAA,CACrD,CAAE,KAAA,CAAO,MAAA,CAAQ,KAAA,CAAO,gBAAiB,CAC3C,CACF,CAAC,CAAA,CAEK,CAAA,CAAA,QAAA,CAASG,CAAM,IACjB,CAAA,CAAA,MAAA,CAAO,YAAY,CAAA,CACrB,OAAA,CAAQ,IAAA,CAAK,CAAC,GAGZA,CAAAA,GAAW,OAAA,EACbD,CAAAA,CAAUF,CAAAA,CAAU9C,CAAAA,CAAaC,CAAAA,CAAiBO,CAAO,CAAC,CAAA,CACxD,CAAA,CAAA,GAAA,CAAI,OAAA,CACJ,CAAA,EAAG6B,CAAAA,CAAG,KAAA,CAAM,SAAS,CAAC,CAAA,CAAA,EAAIA,CAAAA,CAAG,GAAA,CAAII,QAAAA,CAASF,CAAAA,CAAWO,CAAQ,CAAC,CAAC,CAAA,CACjE,CAAA,EACSG,CAAAA,GAAW,WAAA,EACpBD,EAAUF,CAAAA,CAAUtC,CAAO,CAAA,CACzB,CAAA,CAAA,GAAA,CAAI,OAAA,CACJ,CAAA,EAAG6B,EAAG,KAAA,CAAM,OAAO,CAAC,CAAA,CAAA,EAAIA,CAAAA,CAAG,GAAA,CAAII,QAAAA,CAASF,CAAAA,CAAWO,CAAQ,CAAC,CAAC,CAAA,CAC/D,CAAA,EAEE,CAAA,CAAA,GAAA,CAAI,KAAK,CAAA,QAAA,EAAWT,CAAAA,CAAG,GAAA,CAAII,QAAAA,CAASF,CAAAA,CAAWO,CAAQ,CAAC,CAAC,CAAA,CAAE,EAEjE,CAAA,KAAO,CACL,IAAMG,EAAS,MAAQ,CAAA,CAAA,MAAA,CAAO,CAC5B,OAAA,CAAS,CAAA,EAAGR,QAAAA,CAASF,CAAAA,CAAWO,CAAQ,CAAC,CAAA,mCAAA,CAAA,CACzC,OAAA,CAAS,CACP,CACE,KAAA,CAAO,SACP,KAAA,CAAO,0BAAA,CACP,IAAA,CAAM,4BACR,CAAA,CACA,CAAE,MAAO,WAAA,CAAa,KAAA,CAAO,uBAAwB,CAAA,CACrD,CAAE,KAAA,CAAO,OAAQ,KAAA,CAAO,gBAAiB,CAC3C,CACF,CAAC,CAAA,CAEK,CAAA,CAAA,QAAA,CAASG,CAAM,CAAA,GACjB,CAAA,CAAA,MAAA,CAAO,YAAY,CAAA,CACrB,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,CAAA,CAGZA,CAAAA,GAAW,QAAA,EACbD,CAAAA,CAAUF,CAAAA,CAAU9C,CAAAA,CAAaC,EAAiBO,CAAO,CAAC,CAAA,CACxD,CAAA,CAAA,GAAA,CAAI,OAAA,CACJ,CAAA,EAAG6B,EAAG,KAAA,CAAM,UAAU,CAAC,CAAA,IAAA,EAAOA,CAAAA,CAAG,GAAA,CAAII,QAAAA,CAASF,CAAAA,CAAWO,CAAQ,CAAC,CAAC,CAAA,CACrE,CAAA,EACSG,CAAAA,GAAW,aACpBD,CAAAA,CAAUF,CAAAA,CAAUtC,CAAO,CAAA,CACzB,CAAA,CAAA,GAAA,CAAI,OAAA,CACJ,GAAG6B,CAAAA,CAAG,KAAA,CAAM,OAAO,CAAC,CAAA,CAAA,EAAIA,CAAAA,CAAG,IAAII,QAAAA,CAASF,CAAAA,CAAWO,CAAQ,CAAC,CAAC,CAAA,CAC/D,CAAA,EAEE,CAAA,CAAA,GAAA,CAAI,IAAA,CAAK,CAAA,QAAA,EAAWT,CAAAA,CAAG,GAAA,CAAII,QAAAA,CAASF,CAAAA,CAAWO,CAAQ,CAAC,CAAC,CAAA,CAAE,EAEjE,CACF,CAAA,KACEE,EAAUF,CAAAA,CAAUtC,CAAO,CAAA,CACzB,CAAA,CAAA,GAAA,CAAI,OAAA,CACJ,CAAA,EAAG6B,EAAG,KAAA,CAAM,SAAS,CAAC,CAAA,CAAA,EAAIA,CAAAA,CAAG,GAAA,CAAII,QAAAA,CAASF,CAAAA,CAAWO,CAAQ,CAAC,CAAC,CAAA,CACjE,EAEJ,CAEE,QACA,CAAA,UAAA,EAAaT,CAAAA,CAAG,IAAA,CAAK,CAAA,EAAGpD,CAAQ,CAAA,sBAAA,CAAwB,CAAC,CAAA,mBAAA,CAC3D,EACF,CAEA,SAAS+D,CAAAA,CAAUF,CAAAA,CAAkBtC,EAAiB,CACpD,IAAMI,CAAAA,CAAME,OAAAA,CAAQgC,CAAQ,CAAA,CACvBpD,UAAAA,CAAWkB,CAAG,CAAA,EACjBsC,SAAAA,CAAUtC,CAAAA,CAAK,CAAE,SAAA,CAAW,IAAK,CAAC,CAAA,CAGpCuC,aAAAA,CAAcL,CAAAA,CAAUtC,CAAAA,CAAS,OAAO,EAC1C,CAMA,eAAsB4C,EAAAA,CAAqBpB,CAAAA,CAAgB,CAEzD,IAAMO,CAAAA,CADOR,GAAUC,CAAI,CAAA,CACJ,GAAA,CAEjBqB,CAAAA,CAA6D,CACjE,CAAE,EAAA,CAAI,QAAA,CAAU,IAAA,CAAM1D,IAAAA,CAAK4C,CAAAA,CAAW,cAAc,CAAE,CAAA,CACtD,CAAE,EAAA,CAAI,QAAA,CAAU,IAAA,CAAM5C,IAAAA,CAAK4C,CAAAA,CAAW,mBAAmB,CAAE,CAAA,CAC3D,CAAE,EAAA,CAAI,SAAA,CAAW,IAAA,CAAM5C,IAAAA,CAAK4C,EAAW,iCAAiC,CAAE,CAAA,CAC1E,CAAE,EAAA,CAAI,UAAA,CAAY,IAAA,CAAM5C,IAAAA,CAAK4C,CAAAA,CAAW,gBAAgB,CAAE,CAAA,CAC1D,CAAE,EAAA,CAAI,QAAS,IAAA,CAAM5C,IAAAA,CAAK4C,CAAAA,CAAW,aAAa,CAAE,CACtD,EAEIe,CAAAA,CAAU,CAAA,CAEd,IAAA,IAAWC,CAAAA,IAAQF,CAAAA,CAAW,CAC5B,GAAI,CAAC3D,UAAAA,CAAW6D,CAAAA,CAAK,IAAI,CAAA,CACvB,SAGF,IAAMC,CAAAA,CAAWxC,YAAAA,CAAauC,CAAAA,CAAK,IAAA,CAAM,OAAO,CAAA,CAChD,GAAI,CAAChD,CAAAA,CAAoBiD,CAAQ,CAAA,CAC/B,SAGF,IAAMC,CAAAA,CAAa7B,EAAY2B,CAAAA,CAAK,EAAE,CAAA,CAChCG,CAAAA,CAAS1D,CAAAA,CAAawD,CAAAA,CAAUC,CAAU,CAAA,CAEhDT,CAAAA,CAAUO,CAAAA,CAAK,IAAA,CAAMG,CAAM,CAAA,CAC3B,OAAA,CAAQ,GAAA,CACN,CAAA,EAAGrB,CAAAA,CAAG,KAAA,CAAM,SAAS,CAAC,CAAA,CAAA,EAAIA,EAAG,GAAA,CAAII,QAAAA,CAASF,CAAAA,CAAWgB,CAAAA,CAAK,IAAI,CAAC,CAAC,CAAA,CAClE,CAAA,CACAD,CAAAA,GACF,CAGE,OAAA,CAAQ,GAAA,CADNA,CAAAA,GAAY,EAEZjB,CAAAA,CAAG,GAAA,CACD,CAAA,kCAAA,EAAqCA,CAAAA,CAAG,IAAA,CAAK,CAAA,EAAGpD,CAAQ,CAAA,cAAA,CAAgB,CAAC,CAAA,OAAA,CAC3E,CAAA,CAIAoD,CAAAA,CAAG,KAAA,CAAM;AAAA,QAAA,EAAaiB,CAAO,CAAA,qCAAA,CAAuC,CAHtE,EAMJ,CAMA,eAAsBK,EAAAA,CAAoB3B,CAAAA,CAAgB,CAExD,IAAMO,EADOR,EAAAA,CAAUC,CAAI,EACJ,GAAA,CAEjBqB,CAAAA,CAID,CACH,CAAE,EAAA,CAAI,QAAA,CAAU,IAAA,CAAM1D,KAAK4C,CAAAA,CAAW,cAAc,CAAA,CAAG,IAAA,CAAM,QAAS,CAAA,CACtE,CACE,EAAA,CAAI,QAAA,CACJ,KAAM5C,IAAAA,CAAK4C,CAAAA,CAAW,mBAAmB,CAAA,CACzC,IAAA,CAAM,aACR,CAAA,CACA,CACE,EAAA,CAAI,SAAA,CACJ,KAAM5C,IAAAA,CAAK4C,CAAAA,CAAW,iCAAiC,CAAA,CACvD,KAAM,gBACR,CAAA,CACA,CACE,EAAA,CAAI,WACJ,IAAA,CAAM5C,IAAAA,CAAK4C,EAAW,gBAAgB,CAAA,CACtC,KAAM,UACR,CAAA,CACA,CAAE,EAAA,CAAI,QAAS,IAAA,CAAM5C,IAAAA,CAAK4C,CAAAA,CAAW,aAAa,EAAG,IAAA,CAAM,OAAQ,CACrE,CAAA,CAEIqB,EAAU,CAAA,CACVC,CAAAA,CAAQ,EAEZ,IAAA,IAAWN,CAAAA,IAAQF,EAAW,CAC5B,GAAI,CAAC3D,UAAAA,CAAW6D,EAAK,IAAI,CAAA,CACvB,SAGF,IAAMC,EAAWxC,YAAAA,CAAauC,CAAAA,CAAK,IAAA,CAAM,OAAO,EAChD,GAAI,CAAChD,EAAoBiD,CAAQ,CAAA,CAC/B,SAGFI,CAAAA,EAAAA,CAGA,IAAME,CAAAA,CAAelC,CAAAA,CAAY2B,EAAK,EAAE,CAAA,CACzBvD,CAAAA,CAAawD,CAAAA,CAAUM,CAAY,CAAA,GAEnCN,CAAAA,EACb,OAAA,CAAQ,GAAA,CACN,GAAGnB,CAAAA,CAAG,GAAA,CAAI,QAAG,CAAC,CAAA,CAAA,EAAIkB,EAAK,IAAI,CAAA,WAAA,EAAclB,CAAAA,CAAG,MAAA,CAAO,OAAO,CAAC,CAAA,CAC7D,CAAA,CACAwB,CAAAA,EAAAA,EAEA,QAAQ,GAAA,CACN,CAAA,EAAGxB,CAAAA,CAAG,KAAA,CAAM,QAAG,CAAC,CAAA,CAAA,EAAIkB,EAAK,IAAI,CAAA,WAAA,EAAclB,EAAG,KAAA,CAAM,SAAS,CAAC,CAAA,CAChE,EAEJ,CAEA,GAAIuB,IAAY,CAAA,CAAG,CACjB,QAAQ,GAAA,CAAIvB,CAAAA,CAAG,GAAA,CAAI,+BAA+B,CAAC,CAAA,CAEnD,MACF,CAEIwB,CAAAA,CAAQ,CAAA,EACV,QAAQ,GAAA,CACN;AAAA,EAAKxB,CAAAA,CAAG,OAAO,CAAA,EAAGwB,CAAK,qBAAqB,CAAC,CAAA,KAAA,EAAQxB,CAAAA,CAAG,IAAA,CAAK,CAAA,EAAGpD,CAAQ,kBAAkB,CAAC,CAAA,YAAA,CAC7F,EACA,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,EAEd,OAAA,CAAQ,GAAA,CAAIoD,CAAAA,CAAG,KAAA,CAAM;AAAA,2BAAA,CAA+B,CAAC,EAEzD,CCtYA,eAAsB0B,CAAAA,CAAWjB,EAAgC,CAC/D,IAAMkB,CAAAA,CAAWnD,OAAAA,CAAQiC,CAAQ,CAAA,CAEjC,GAAI,CAACpD,UAAAA,CAAWsE,CAAQ,CAAA,CACtB,MAAM,IAAI,KAAA,CAAM,CAAA,gBAAA,EAAmBA,CAAQ,CAAA,CAAE,CAAA,CAI/C,GAAI,CAEF,IAAMC,CAAAA,CAAM,MAAM,OAAOD,CAAAA,CAAAA,CAGzB,GAAIC,CAAAA,CAAI,OAAA,EAAWC,EAASD,CAAAA,CAAI,OAAO,EACrC,OAAOA,CAAAA,CAAI,QAIb,GAAIA,CAAAA,CAAI,QAAUC,CAAAA,CAASD,CAAAA,CAAI,MAAM,CAAA,CACnC,OAAOA,CAAAA,CAAI,OAIb,IAAA,IAAWE,CAAAA,IAAO,OAAO,IAAA,CAAKF,CAAG,EAC/B,GAAIC,CAAAA,CAASD,CAAAA,CAAIE,CAAG,CAAC,CAAA,CACnB,OAAOF,CAAAA,CAAIE,CAAG,EAIlB,MAAM,IAAI,MACR,CAAA,6BAAA,EAAgC9B,CAAAA,CAAG,GAAA,CAAIS,CAAQ,CAAC;AAAA;;AAAA,EAAA,EAEzCT,CAAAA,CAAG,IAAA,CAAK,gBAAgB,CAAC,CAAA;AAAA,EAAA,EACzBA,CAAAA,CAAG,IAAA,CAAK,qBAAqB,CAAC,wCACvC,CACF,CAAA,MAAS+B,CAAAA,CAAK,CACZ,MAAIA,CAAAA,YAAe,KAAA,EAASA,CAAAA,CAAI,QAAQ,QAAA,CAAS,qBAAqB,CAAA,CAC9DA,CAAAA,CAGF,IAAI,KAAA,CACR,CAAA,eAAA,EAAkB/B,CAAAA,CAAG,IAAIS,CAAQ,CAAC,CAAA,EAAA,EAAKsB,CAAAA,YAAe,KAAA,CAAQA,CAAAA,CAAI,OAAA,CAAU,MAAA,CAAOA,CAAG,CAAC;;AAAA;AAAA,EAAA,EAEhF/B,EAAG,IAAA,CAAK,oBAAoB,CAAC,CAAA,CACtC,CACF,CACF,CAKA,SAAS6B,CAAAA,CAASG,CAAAA,CAAuB,CACvC,GAAI,OAAOA,GAAQ,QAAA,EAAYA,CAAAA,GAAQ,KACrC,OAAO,MAAA,CAGT,IAAMC,CAAAA,CAAMD,EAEZ,OACE,OAAOC,EAAI,OAAA,EAAY,UAAA,EACvB,OAAOA,CAAAA,CAAI,KAAA,EAAU,YACrB,OAAOA,CAAAA,CAAI,MAAS,UAAA,EACpB,OAAA,GAAWA,CAEf,CAmCA,eAAsBC,GACpBzB,CAAAA,CAC6B,CAC7B,IAAMkB,CAAAA,CAAWnD,QAAQiC,CAAQ,CAAA,CAEjC,GAAI,CAACpD,UAAAA,CAAWsE,CAAQ,CAAA,CACtB,MAAM,IAAI,KAAA,CAAM,mBAAmBA,CAAQ,CAAA,CAAE,EAG/C,IAAIC,CAAAA,CACJ,GAAI,CACFA,CAAAA,CAAO,MAAM,OAAOD,GACtB,CAAA,MAASI,CAAAA,CAAK,CACZ,MAAM,IAAI,MACR,CAAA,eAAA,EAAkB/B,CAAAA,CAAG,IAAIS,CAAQ,CAAC,KAAKsB,CAAAA,YAAe,KAAA,CAAQA,EAAI,OAAA,CAAU,MAAA,CAAOA,CAAG,CAAC;;AAAA;AAAA,EAAA,EAEhF/B,CAAAA,CAAG,IAAA,CAAK,oBAAoB,CAAC,CAAA,CACtC,CACF,CAEA,IAAMmC,CAAAA,CAAuC,CAC3C,CAAC,cAAA,CAAgBP,CAAAA,CAAI,YAAY,CAAA,CACjC,CAAC,eAAA,CAAiBA,CAAAA,CAAI,aAAa,CAAA,CACnC,CAAC,SAAA,CAAWA,CAAAA,CAAI,OAAO,CACzB,CAAA,CAEA,IAAA,GAAW,CAACQ,CAAAA,CAAMC,CAAS,CAAA,GAAKF,CAAAA,CAC9B,GAAI,OAAOE,CAAAA,EAAc,UAAA,CAIvB,OAAO,SAAY,CACjB,IAAMC,CAAAA,CAAS,MAAM,OAAA,CAAQ,OAAA,CAASD,CAAAA,EAA6B,CAAA,CACnE,GAAI,CAACR,CAAAA,CAASS,CAAM,CAAA,CAClB,MAAM,IAAI,KAAA,CACR,CAAA,SAAA,EAAYF,CAAI,CAAA,OAAA,EAAUpC,CAAAA,CAAG,GAAA,CAAIS,CAAQ,CAAC,CAAA;AAAA,qGAAA,CAE5C,CAAA,CAEF,OAAO6B,CACT,CAAA,CAaJ,MAJET,CAAAA,CAASD,CAAAA,CAAI,OAAO,CAAA,EACpBC,CAAAA,CAASD,CAAAA,CAAI,MAAM,CAAA,EACnB,OAAO,MAAA,CAAOA,CAAG,CAAA,CAAE,IAAA,CAAKC,CAAQ,CAAA,CAG1B,IAAI,KAAA,CACR,CAAA,oCAAA,EAAuC7B,CAAAA,CAAG,GAAA,CAAIS,CAAQ,CAAC,CAAA;AAAA;AAAA,wDAAA,EAEMT,CAAAA,CAAG,IAAA,CAAK,kBAAkB,CAAC,CAAA;;AAAA;;AAAA,EAAA,EAEjFA,CAAAA,CAAG,IAAA,CAAK,gCAAgC,CAAC,CAAA;AAAA;AAAA;AAAA;AAAA,GAAA,CAKlD,EAGI,IAAI,KAAA,CACR,8BAA8BA,CAAAA,CAAG,GAAA,CAAIS,CAAQ,CAAC;AAAA;;AAAA,EAAA,EAEvCT,CAAAA,CAAG,IAAA,CAAK,gCAAgC,CAAC,CAAA;AAAA,EAAA,EACzCA,CAAAA,CAAG,IAAA,CAAK,4BAA4B,CAAC,CAAA;AAAA,EAAA,EACrCA,CAAAA,CAAG,IAAA,CAAK,gBAAgB,CAAC,CAAA;;AAAA;AAAA,gBAAA,EAEXA,CAAAA,CAAG,IAAA,CAAK,aAAa,CAAC,CAAA,mBAAA,CAC7C,CACF,CCrKA,eAAsBuC,CAAAA,CACpBC,CAAAA,CAAU,KAAA,CACe,CACzB,GAAI,CACF,OAAQ,MAAM,OAAO,yBAAyB,CAChD,CAAA,MAAST,CAAAA,CAAK,CACZ,OAAA,CAAQ,KAAA,CACN/B,CAAAA,CAAG,GAAA,CACD,CAAA;AAAA,iEAAA,CACF,CACF,CAAA,CACIwC,CAAAA,EAAS,OAAA,CAAQ,KAAA,CAAMxC,EAAG,GAAA,CAAK+B,CAAAA,CAAc,OAAO,CAAC,EACzD,OAAA,CAAQ,IAAA,CAAK,CAAC,EAChB,CACF,CCyBA,SAASrC,EAAAA,CAAUC,CAAAA,CAGjB,CACA,IAAMC,CAAAA,CAAyB,CAC7B,IAAA,CAAM,MACN,kBAAA,CAAoB,KAAA,CACpB,OAAA,CAAS,KACX,EACI6C,CAAAA,CAAW,EAAA,CAEf,IAAA,IAAS5C,CAAAA,CAAI,EAAGA,CAAAA,CAAIF,CAAAA,CAAK,MAAA,CAAQE,CAAAA,EAAAA,CAAK,CACpC,IAAM6C,CAAAA,CAAM/C,CAAAA,CAAKE,CAAC,EAClB,OAAQ6C,CAAAA,EACN,KAAK,WACL,KAAK,IAAA,CAAM,CACT,IAAM5C,EAAMH,CAAAA,CAAK,EAAEE,CAAC,CAAA,CAChBC,IAAKF,CAAAA,CAAK,UAAA,CAAaE,CAAAA,CAAAA,CAC3B,KACF,CACA,KAAK,UAAA,CACL,KAAK,IAAA,CAAM,CACT,IAAMA,CAAAA,CAAMH,CAAAA,CAAK,EAAEE,CAAC,CAAA,CAChBC,CAAAA,GAAKF,CAAAA,CAAK,UAAA,CAAaE,GAC3B,KACF,CACA,KAAK,cAAA,CAAgB,CACnB,IAAMA,CAAAA,CAAMH,CAAAA,CAAK,EAAEE,CAAC,CAAA,CACd,CAAA,CAAIC,CAAAA,CAAM,MAAA,CAAO,SAASA,CAAAA,CAAK,EAAE,CAAA,CAAI,MAAA,CAAO,IAC9C,MAAA,CAAO,QAAA,CAAS,CAAC,CAAA,EAAK,EAAI,CAAA,GAAGF,CAAAA,CAAK,SAAA,CAAY,CAAA,CAAA,CAClD,KACF,CACA,KAAK,wBAAA,CACHA,CAAAA,CAAK,mBAAqB,IAAA,CAC1B,MACF,KAAK,QAAA,CACHA,EAAK,IAAA,CAAO,IAAA,CACZ,MACF,KAAK,YACL,KAAK,IAAA,CACHA,CAAAA,CAAK,OAAA,CAAU,KACf,MACF,QACM8C,CAAAA,EAAO,CAACA,EAAI,UAAA,CAAW,GAAG,CAAA,EAAK,CAACD,IAClCA,CAAAA,CAAWC,CAAAA,EAEjB,CACF,CAEA,OAAO,CAAE,QAAA,CAAAD,CAAAA,CAAU,IAAA,CAAA7C,CAAK,CAC1B,CAEA,SAAS+C,EAAAA,EAAmB,CAC1B,QAAQ,KAAA,CAAM;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA,CAmCf,EACD,CAYA,SAASC,EAAAA,CAAiBC,CAAAA,CAA4C,CACpE,IAAIC,CAAAA,CACJ,GAAI,CAGFA,CAAAA,CAAK,IAAI,QAAA,CAAS,OAAA,CAAS,QAAA,CAAU,CAAA,sBAAA,EAAyBD,CAAI,CAAA,EAAA,CAAI,EAIxE,CAAA,MAASd,CAAAA,CAAK,CACZ,MAAM,IAAI,KAAA,CACR,CAAA,uCAAA,EAA2CA,CAAAA,CAAc,OAAO;AAAA,cAAA,EAAmBc,CAAI,CAAA,CACzF,CACF,CACA,OAAQE,GAAoB,CAC1B,IAAMC,CAAAA,CAASD,CAAAA,EAAgC,MAE/C,OAAO,CAAA,CADQD,CAAAA,CAAGE,CAAAA,CAAOD,CAAM,CAEjC,CACF,CAEA,eAAsBE,GAActD,CAAAA,CAA+B,CAAA,CAC7DA,CAAAA,CAAK,QAAA,CAAS,QAAQ,CAAA,EAAKA,CAAAA,CAAK,QAAA,CAAS,IAAI,GAAKA,CAAAA,CAAK,MAAA,GAAW,CAAA,IACpEgD,EAAAA,GACA,OAAA,CAAQ,IAAA,CAAKhD,CAAAA,CAAK,MAAA,GAAW,EAAI,CAAA,CAAI,CAAC,CAAA,CAAA,CAGxC,GAAM,CAAE,QAAA,CAAA8C,CAAAA,CAAU,IAAA,CAAA7C,CAAK,EAAIF,EAAAA,CAAUC,CAAI,CAAA,CAEpC8C,CAAAA,GACH,QAAQ,KAAA,CAAMzC,CAAAA,CAAG,GAAA,CAAI,yCAAyC,CAAC,CAAA,CAC/D2C,EAAAA,EAAW,CACX,OAAA,CAAQ,KAAK,CAAC,CAAA,CAAA,CAEX/C,CAAAA,CAAK,UAAA,GACR,QAAQ,KAAA,CACNI,CAAAA,CAAG,IAAI,oCAAoC,CAAA,CAC3CA,EAAG,GAAA,CACD;AAAA,0EAAA,CACF,CACF,CAAA,CACA2C,EAAAA,EAAW,CACX,OAAA,CAAQ,KAAK,CAAC,CAAA,CAAA,CAEX/C,CAAAA,CAAK,UAAA,GACR,QAAQ,KAAA,CACNI,CAAAA,CAAG,IAAI,0CAA0C,CAAA,CACjDA,EAAG,GAAA,CACD;AAAA,+DAAA,CACF,CACF,CAAA,CACA2C,EAAAA,EAAW,CACX,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,CAAA,CAIhB,IAAMO,CAAAA,CAAe1E,OAAAA,CAAQiE,CAAQ,CAAA,CAChCpF,UAAAA,CAAW6F,CAAY,CAAA,GAC1B,OAAA,CAAQ,KAAA,CAAMlD,CAAAA,CAAG,GAAA,CAAI,CAAA,gCAAA,EAAmCkD,CAAY,CAAA,CAAE,CAAC,CAAA,CACvE,OAAA,CAAQ,IAAA,CAAK,CAAC,GAGhB,IAAIC,CAAAA,CACJ,GAAI,CACFA,CAAAA,CAAMxE,YAAAA,CAAauE,CAAAA,CAAc,MAAM,EACzC,CAAA,MAASnB,CAAAA,CAAK,CACZ,OAAA,CAAQ,KAAA,CACN/B,CAAAA,CAAG,GAAA,CACD,CAAA,sBAAA,EAAyBkD,CAAY,CAAA,EAAA,EAAMnB,CAAAA,CAAc,OAAO,CAAA,CAClE,CACF,CAAA,CACA,OAAA,CAAQ,IAAA,CAAK,CAAC,EAChB,CAEA,IAAIqB,CAAAA,CACJ,GAAI,CACFA,CAAAA,CAAS,IAAA,CAAK,KAAA,CAAMD,CAAG,EACzB,CAAA,MAASpB,CAAAA,CAAK,CACZ,OAAA,CAAQ,KAAA,CACN/B,CAAAA,CAAG,GAAA,CACD,CAAA,OAAA,EAAUkD,CAAY,CAAA,oBAAA,EAAwBnB,CAAAA,CAAc,OAAO,CAAA,CACrE,CACF,CAAA,CACA,OAAA,CAAQ,IAAA,CAAK,CAAC,EAChB,CAMA,GAAM,CAAE,mBAAA,CAAAsB,CAAAA,CAAqB,cAAA,CAAAC,CAAe,CAAA,CAAI,MAAMf,CAAAA,CACpD3C,CAAAA,CAAK,OACP,CAAA,CAGI2D,CAAAA,CACJ,GAAI,CACFA,CAAAA,CAAWF,CAAAA,CAAoBD,CAAM,EACvC,CAAA,MAASrB,CAAAA,CAAK,CACZ,OAAA,CAAQ,KAAA,CACN/B,EAAG,GAAA,CACD,CAAA,wCAAA,EAA4C+B,CAAAA,CAAc,OAAO,CAAA,CACnE,CACF,CAAA,CACA,OAAA,CAAQ,IAAA,CAAK,CAAC,EAChB,CAIA,IAAIyB,CAAAA,CACJ,GAAI,CACFA,EAAYZ,EAAAA,CAAiBhD,CAAAA,CAAK,UAAU,EAC9C,CAAA,MAASmC,CAAAA,CAAK,CACZ,OAAA,CAAQ,KAAA,CAAM/B,CAAAA,CAAG,GAAA,CAAI,CAAA,OAAA,EAAW+B,CAAAA,CAAc,OAAO,CAAA,CAAE,CAAC,CAAA,CACxD,OAAA,CAAQ,IAAA,CAAK,CAAC,EAChB,CAGA,IAAI0B,CAAAA,CACJ,GAAI,CACFA,CAAAA,CAAU,MAAMvB,EAAAA,CAAkBtC,CAAAA,CAAK,UAAU,EACnD,OAASmC,CAAAA,CAAK,CACZ,OAAA,CAAQ,KAAA,CACN/B,CAAAA,CAAG,GAAA,CAAI,CAAA,sCAAA,EAA0C+B,CAAAA,CAAc,OAAO,CAAA,CAAE,CAC1E,CAAA,CACA,OAAA,CAAQ,IAAA,CAAK,CAAC,EAChB,CAEInC,CAAAA,CAAK,OAAA,EACP,OAAA,CAAQ,KAAA,CACNI,CAAAA,CAAG,GAAA,CACD,CAAA,UAAA,EAAauD,CAAAA,CAAS,MAAA,CAAO,MAAM,CAAA,wBAAA,EAA2B3D,CAAAA,CAAK,UAAU,CAAA,CAC/E,CACF,EAQF,IAAM0C,CAAAA,CAAS,MAAMgB,CAAAA,CACnBC,CAAAA,CACAE,CAAAA,CAGAD,CAAAA,CACA,CACE,SAAA,CAAW5D,CAAAA,CAAK,SAAA,CAChB,gBAAA,CAAkB,CAACA,CAAAA,CAAK,kBAC1B,CACF,CAAA,CAEA,GAAIA,CAAAA,CAAK,IAAA,CAAM,CASb,IAAM8D,CAAAA,CAAO,CACX,sBAAA,CAAwBpB,CAAAA,CAAO,sBAAA,EAA0B,IAAA,CACzD,UAAA,CAAYA,CAAAA,CAAO,UAAA,CACnB,cAAA,CAAgBA,EAAO,cAAA,CACvB,kBAAA,CAAoBA,CAAAA,CAAO,kBAAA,CAC3B,gBAAA,CAAkBA,CAAAA,CAAO,gBAC3B,CAAA,CACA,OAAA,CAAQ,GAAA,CAAI,IAAA,CAAK,SAAA,CAAUoB,CAAAA,CAAM,IAAA,CAAM,CAAC,CAAC,EACzC,OAAA,CAAQ,IAAA,CAAK,CAAC,EAChB,CAGIpB,CAAAA,CAAO,gBAAA,GACT,OAAA,CAAQ,KAAA,CAAMtC,CAAAA,CAAG,GAAA,CAAI,sDAAiD,CAAC,CAAA,CACvE,OAAA,CAAQ,KAAA,CACNA,EAAG,GAAA,CACD,CAAA;AAAA;AAAA;AAAA,oEAAA,CAIF,CACF,CAAA,CACA,OAAA,CAAQ,KAAK,CAAC,CAAA,CAAA,CAEZsC,EAAO,cAAA,GACT,OAAA,CAAQ,KAAA,CACNtC,CAAAA,CAAG,OACD,oEACF,CACF,EACA,OAAA,CAAQ,KAAA,CACNA,EAAG,GAAA,CACD,CAAA;AAAA;AAAA,gCAAA,CAGF,CACF,CAAA,CACA,OAAA,CAAQ,KAAK,CAAC,CAAA,CAAA,CAEZsC,EAAO,kBAAA,GACT,OAAA,CAAQ,KAAA,CACNtC,CAAAA,CAAG,OACD,iFACF,CACF,EACA,OAAA,CAAQ,KAAA,CACNA,EAAG,GAAA,CACD,CAAA;AAAA;AAAA,8BAAA,CAGF,CACF,CAAA,CACA,OAAA,CAAQ,IAAA,CAAK,CAAC,GAIhB,IAAM2D,CAAAA,CAAMrB,CAAAA,CAAO,sBAAA,EAA0B,GACvCsB,CAAAA,CAAQtB,CAAAA,CAAO,iBAAA,CACfuB,CAAAA,CAAYD,GAAO,KAAA,CAAM,IAAA,EAAQ,WAAA,CACvC,OAAA,CAAQ,IACN,CAAA,EAAG5D,CAAAA,CAAG,KAAA,CAAM,QAAG,CAAC,CAAA,kBAAA,EAAqBA,CAAAA,CAAG,IAAA,CAAK,CAAA,wBAAA,EAA2B2D,CAAG,CAAA,CAAE,CAAC,CAAA,CAAA,EAAI3D,CAAAA,CAAG,IAAI,CAAA,CAAA,EAAI6D,CAAS,CAAA,CAAA,CAAG,CAAC,EAC5G,CAAA,CACA,OAAA,CAAQ,GAAA,CACN7D,CAAAA,CAAG,IACD,CAAA,qBAAA,EAAmBsC,CAAAA,CAAO,UAAU,CAAA,oBAAA,EAAuBiB,EAAS,MAAA,CAAO,MAAM,CAAA,CACnF,CACF,EACI3D,CAAAA,CAAK,OAAA,EAAWgE,CAAAA,GAClB,OAAA,CAAQ,IAAI5D,CAAAA,CAAG,GAAA,CAAI,iBAAY,CAAC,EAChC,OAAA,CAAQ,GAAA,CACNA,CAAAA,CAAG,GAAA,CACD,OAAO,IAAA,CAAK,SAAA,CAAU4D,EAAO,IAAA,CAAM,CAAC,EAAE,KAAA,CAAM;AAAA,CAAI,EAAE,IAAA,CAAK;AAAA,IAAA,CAAQ,CAAC,CAAA,CAClE,CACF,GAUF,OAAA,CAAQ,IAAA,CAAK,CAAC,EAChB,CCrZA,SAASlE,EAAAA,CAAUC,CAAAA,CAA+B,CAChD,IAAMC,CAAAA,CAAsB,CAAE,GAAA,CAAK,OAAA,CAAQ,KAAM,CAAA,CAEjD,QAASC,CAAAA,CAAI,CAAA,CAAGA,EAAIF,CAAAA,CAAK,MAAA,CAAQE,IAC/B,GAAIF,CAAAA,CAAKE,CAAC,CAAA,GAAM,OAAA,CAAS,CACvB,IAAMC,CAAAA,CAAMH,EAAK,EAAEE,CAAC,EAChBC,CAAAA,GACFF,CAAAA,CAAK,IAAME,CAAAA,EAEf,CAGF,OAAOF,CACT,CAaA,SAASkE,EAAAA,CAAmBvF,CAAAA,CAA0B,CACpD,IAAMG,CAAAA,CAAUpB,KAAKiB,CAAAA,CAAK,cAAc,EACxC,GAAI,CAAClB,WAAWqB,CAAO,CAAA,CACrB,OAAO,CACL,KAAA,CAAO,gCACP,MAAA,CAAQ,KAAA,CACR,QAAS,uBAAA,CACT,GAAA,CAAK,yCACP,CAAA,CAGF,IAAMqF,EAAM,IAAA,CAAK,KAAA,CAAMpF,aAAaD,CAAAA,CAAS,OAAO,CAAC,CAAA,CAC/CsF,CAAAA,CAAO,CAAE,GAAGD,CAAAA,CAAI,aAAc,GAAGA,CAAAA,CAAI,eAAgB,CAAA,CAE3D,OAAKC,EAAK,qBAAqB,CAAA,CASxB,CACL,KAAA,CAAO,+BAAA,CACP,OAAQ,IAAA,CACR,OAAA,CAAS,IAAIA,CAAAA,CAAK,qBAAqB,CAAC,CAAA,CAC1C,CAAA,CAZS,CACL,KAAA,CAAO,+BAAA,CACP,OAAQ,KAAA,CACR,OAAA,CAAS,4BACT,GAAA,CAAK,uCACP,CAQJ,CAEA,SAASC,GAA0B1F,CAAAA,CAA0B,CAC3D,IAAMG,CAAAA,CAAUpB,IAAAA,CAAKiB,EAAK,cAAc,CAAA,CACxC,GAAI,CAAClB,UAAAA,CAAWqB,CAAO,CAAA,CACrB,OAAO,CACL,KAAA,CAAO,+BAAA,CACP,OAAQ,IAAA,CACR,OAAA,CAAS,2BACX,CAAA,CAGF,IAAMqF,EAAM,IAAA,CAAK,KAAA,CAAMpF,aAAaD,CAAAA,CAAS,OAAO,CAAC,CAAA,CAC/CsF,CAAAA,CAAO,CAAE,GAAGD,CAAAA,CAAI,aAAc,GAAGA,CAAAA,CAAI,eAAgB,CAAA,CAErDG,CAAAA,CAAoB,OAAO,IAAA,CAAKF,CAAI,EAAE,MAAA,CAAQG,CAAAA,EAClDA,EAAE,UAAA,CAAW,iBAAiB,CAChC,CAAA,CAEA,OAAID,CAAAA,CAAkB,MAAA,EAAU,EACvB,CACL,KAAA,CAAO,gCACP,MAAA,CAAQ,IAAA,CACR,QACEA,CAAAA,CAAkB,MAAA,GAAW,EAAI,mBAAA,CAAsB,gBAC3D,EAGK,CACL,KAAA,CAAO,gCACP,MAAA,CAAQ,IAAA,CACR,QAAS,CAAA,EAAGA,CAAAA,CAAkB,MAAM,CAAA,WAAA,EAAcA,CAAAA,CAAkB,KAAK,IAAI,CAAC,EAChF,CACF,CAEA,SAASE,EAAAA,CAAgB7F,CAAAA,CAA0B,CACjD,IAAM8F,CAAAA,CAAe/G,KAAKiB,CAAAA,CAAK,eAAe,EAE9C,GAAI,CAAClB,WAAWgH,CAAY,CAAA,CAC1B,OAAO,CACL,KAAA,CAAO,2BACP,MAAA,CAAQ,KAAA,CACR,QAAS,wBAAA,CACT,GAAA,CAAK,uDACP,CAAA,CAGF,GAAI,CAIF,IAAMC,CAAAA,CAFM3F,aAAa0F,CAAAA,CAAc,OAAO,EAG3C,OAAA,CAAQ,WAAA,CAAa,EAAE,CAAA,CACvB,OAAA,CAAQ,oBAAqB,EAAE,CAAA,CAE5BE,EADS,IAAA,CAAK,KAAA,CAAMD,CAAQ,CAAA,CAChB,eAAA,EAAmB,EAAC,CAEhCE,CAAAA,CAAmB,EAAC,CAe1B,OAbID,EAAG,MAAA,GAAW,CAAA,CAAA,EAChBC,EAAO,IAAA,CAAK,yBAAyB,EAIrCD,CAAAA,CAAG,gBAAA,EACH,CAAC,CAAC,SAAA,CAAW,WAAY,QAAQ,CAAA,CAAE,SACjCA,CAAAA,CAAG,gBAAA,CAAiB,aACtB,CAAA,EAEAC,EAAO,IAAA,CAAK,CAAA,qBAAA,EAAwBD,EAAG,gBAAgB,CAAA,CAAA,CAAG,EAGxDC,CAAAA,CAAO,MAAA,CAAS,EACX,CACL,KAAA,CAAO,2BACP,MAAA,CAAQ,CAAA,CAAA,CACR,QAASA,CAAAA,CAAO,IAAA,CAAK,IAAI,CAAA,CACzB,GAAA,CAAK,uEACP,CAAA,CAGK,CACL,MAAO,0BAAA,CACP,MAAA,CAAQ,GACR,OAAA,CAAS,wCACX,CACF,CAAA,KAAQ,CACN,OAAO,CACL,KAAA,CAAO,2BACP,MAAA,CAAQ,IAAA,CACR,QAAS,6CACX,CACF,CACF,CAEA,SAASC,GAAwBlG,CAAAA,CAA0B,CACzD,IAAMmG,CAAAA,CAAcpH,IAAAA,CAAKiB,EAAK,cAAc,CAAA,CAE5C,GAAI,CAAClB,UAAAA,CAAWqH,CAAW,CAAA,CACzB,OAAO,CACL,KAAA,CAAO,kCAAA,CACP,OAAQ,IAAA,CACR,OAAA,CAAS,uBACX,CAAA,CAGF,IAAMC,EAAuB,EAAC,CAG9B,GAAI,CACF,IAAMC,EAAWtH,IAAAA,CAAKoH,CAAAA,CAAa,gBAAgB,CAAA,CACnD,GAAIrH,WAAWuH,CAAQ,CAAA,CAAG,CACxB,IAAMC,EAAWC,WAAAA,CAAYF,CAAQ,EACrC,IAAA,IAAWb,CAAAA,IAAOc,EAAU,CAC1B,IAAME,EAAazH,IAAAA,CACjBsH,CAAAA,CACAb,EACA,cAAA,CACA,gBAAA,CACA,MACF,CAAA,CACI1G,UAAAA,CAAW0H,CAAU,CAAA,EACvBJ,CAAAA,CAAW,KACT,CAAA,eAAA,EAAkBZ,CAAG,mCACvB,EAEJ,CACF,CACF,CAAA,KAAQ,CAER,CAEA,OAAIY,CAAAA,CAAW,OAAS,CAAA,CACf,CACL,MAAO,kCAAA,CACP,MAAA,CAAQ,MACR,OAAA,CAAS,CAAA,MAAA,EAASA,EAAW,MAAM,CAAA,eAAA,EAAkBA,EAAW,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAC1E,GAAA,CAAK,kDACP,CAAA,CAGK,CACL,MAAO,kCAAA,CACP,MAAA,CAAQ,KACR,OAAA,CAAS,wBACX,CACF,CAEA,SAASK,GAAsBzG,CAAAA,CAA0B,CACvD,IAAMyC,CAAAA,CAAY,CAChB,eACA,mBAAA,CACA,iCAAA,CACA,iBACA,aACF,CAAA,CAEMiE,EAAkB,EAAC,CAEzB,QAAW/D,CAAAA,IAAQF,CAAAA,CAAW,CAC5B,IAAMP,CAAAA,CAAWnD,KAAKiB,CAAAA,CAAK2C,CAAI,EAC/B,GAAI7D,UAAAA,CAAWoD,CAAQ,CAAA,CAAG,CACxB,IAAMtC,CAAAA,CAAUQ,YAAAA,CAAa8B,EAAU,OAAO,CAAA,CAC1CvC,EAAoBC,CAAO,CAAA,EAC7B8G,EAAM,IAAA,CAAK/D,CAAI,EAEnB,CACF,CAEA,OAAI+D,CAAAA,CAAM,MAAA,GAAW,EACZ,CACL,KAAA,CAAO,kBACP,MAAA,CAAQ,IAAA,CACR,QAAS,0BACX,CAAA,CAGK,CACL,KAAA,CAAO,iBAAA,CACP,OAAQ,IAAA,CACR,OAAA,CAAS,kBAAkBA,CAAAA,CAAM,IAAA,CAAK,IAAI,CAAC,CAAA,CAC7C,CACF,CAMA,eAAsBC,GAAcvF,CAAAA,CAAgB,CAClD,IAAMC,CAAAA,CAAOF,EAAAA,CAAUC,CAAI,CAAA,CAE3B,OAAA,CAAQ,KAAI,CACZ,OAAA,CAAQ,IAAIK,CAAAA,CAAG,IAAA,CAAKA,EAAG,IAAA,CAAK,kBAAkB,CAAC,CAAC,CAAA,CAChD,QAAQ,GAAA,CAAIA,CAAAA,CAAG,IAAI,QAAA,CAAI,MAAA,CAAO,EAAE,CAAC,CAAC,EAClC,OAAA,CAAQ,GAAA,GAER,IAAMmF,CAAAA,CAAS,CACbrB,EAAAA,CAAmBlE,CAAAA,CAAK,GAAG,CAAA,CAC3BqE,EAAAA,CAA0BrE,EAAK,GAAG,CAAA,CAClCwE,GAAgBxE,CAAAA,CAAK,GAAG,EACxB6E,EAAAA,CAAwB7E,CAAAA,CAAK,GAAG,CAAA,CAChCoF,EAAAA,CAAsBpF,EAAK,GAAG,CAChC,EAEIwF,CAAAA,CAAW,CAAA,CAEf,QAAWC,CAAAA,IAASF,CAAAA,CAAQ,CAC1B,IAAMG,CAAAA,CAAOD,EAAM,MAAA,CAASrF,CAAAA,CAAG,MAAM,QAAG,CAAA,CAAIA,EAAG,GAAA,CAAI,QAAG,EACtD,OAAA,CAAQ,GAAA,CAAI,GAAGsF,CAAI,CAAA,CAAA,EAAItF,EAAG,IAAA,CAAKqF,CAAAA,CAAM,KAAK,CAAC,CAAA,CAAE,EAC7C,OAAA,CAAQ,GAAA,CAAI,KAAKrF,CAAAA,CAAG,GAAA,CAAIqF,EAAM,OAAO,CAAC,EAAE,CAAA,CAEpC,CAACA,EAAM,MAAA,EAAUA,CAAAA,CAAM,MACzB,OAAA,CAAQ,GAAA,CAAI,KAAKrF,CAAAA,CAAG,MAAA,CAAO,MAAM,CAAC,CAAA,CAAA,EAAIqF,EAAM,GAAG,CAAA,CAAE,EACjDD,CAAAA,EAAAA,CAAAA,CAGF,OAAA,CAAQ,MACV,CAEIA,EAAW,CAAA,EACb,OAAA,CAAQ,IACNpF,CAAAA,CAAG,MAAA,CAAO,GAAGoF,CAAQ,CAAA,2CAAA,CAA6C,CACpE,CAAA,CACA,OAAA,CAAQ,KAAK,CAAC,CAAA,EAEd,QAAQ,GAAA,CAAIpF,CAAAA,CAAG,MAAM,oBAAoB,CAAC,EAE9C,CCzRA,IAAMuF,EAAAA,CAAuC,CAC3C,kBAAmB,CAAC,SAAA,CAAW,eAAgB,WAAW,CAAA,CAC1D,gBAAiB,CACf,cAAA,CACA,iBACA,sBAAA,CACA,kBAAA,CACA,gBACA,cAAA,CACA,oBAAA,CACA,aACA,aACF,CAAA,CACA,aAAc,CACZ,kBAAA,CACA,cACA,YAAA,CACA,eAAA,CACA,gBACA,cAAA,CACA,UAAA,CACA,YACA,QACF,CAAA,CACA,MAAO,CAAC,UAAA,CAAY,SAAU,YAAA,CAAc,YAAY,EACxD,EAAA,CAAI,CACF,kBACA,eAAA,CACA,eAAA,CACA,iBACA,kBAAA,CACA,aAAA,CACA,kBACA,cACF,CACF,EAEA,SAASC,EAAAA,CAAYpD,EAAsB,CACzC,IAAA,GAAW,CAACqD,CAAAA,CAAKC,CAAK,IAAK,MAAA,CAAO,OAAA,CAAQH,EAAU,CAAA,CAClD,GAAIG,EAAM,QAAA,CAAStD,CAAI,EACrB,OAAOqD,CAAAA,CAIX,OAAO,OACT,CAEA,SAASE,EAAAA,CAAexH,CAAAA,CAAyB,CAE/C,IAAMyH,CAAAA,CAAQzH,EAAQ,KAAA,CAAM;AAAA,CAAI,CAAA,CAEhC,IAAA,IAAW0H,CAAAA,IAAQD,CAAAA,CAAO,CACxB,IAAME,CAAAA,CAAUD,CAAAA,CAAK,IAAA,EAAK,CAS1B,GANIC,CAAAA,CAAQ,UAAA,CAAW,aAAa,CAAA,EAGhCA,CAAAA,CAAQ,UAAA,CAAW,YAAY,CAAA,EAG/BA,CAAAA,CAAQ,UAAA,CAAW,cAAc,EACnC,SAIF,IAAMC,CAAAA,CAAaD,CAAAA,CAAQ,KAAA,CAAM,0BAA0B,CAAA,CAC3D,GAAIC,IAAa,CAAC,CAAA,EAAK,CAACA,CAAAA,CAAW,CAAC,CAAA,CAAE,UAAA,CAAW,GAAG,EAClD,OAAOA,CAAAA,CAAW,CAAC,CAAA,CAIrB,GAAID,CAAAA,CAAQ,UAAA,CAAW,IAAI,GAAKA,CAAAA,CAAQ,MAAA,CAAS,CAAA,CAC/C,OAAOA,CAAAA,CAAQ,KAAA,CAAM,CAAC,CAAA,CAAE,MAAK,CAI/B,GACEA,CAAAA,GAAY,EAAA,EACZ,CAACA,CAAAA,CAAQ,UAAA,CAAW,IAAI,GACxB,CAACA,CAAAA,CAAQ,UAAA,CAAW,IAAI,CAAA,EACxB,CAACA,CAAAA,CAAQ,UAAA,CAAW,GAAG,CAAA,CAEvB,KAEJ,CAEA,OAAO,EACT,CAMA,eAAsBE,EAAAA,CAAoBrG,EAAgB,CACxD,IAAIsG,CAAAA,CAEJ,IAAA,IAASpG,CAAAA,CAAI,CAAA,CAAGA,CAAAA,CAAIF,CAAAA,CAAK,OAAQE,CAAAA,EAAAA,CAC3BF,CAAAA,CAAKE,CAAC,CAAA,GAAM,UAAA,GACdoG,CAAAA,CAAStG,CAAAA,CAAK,EAAEE,CAAC,CAAA,EAAG,WAAA,EAAY,CAAA,CAIpC,IAAMqG,CAAAA,CAAWC,cAAAA,EAAe,CAEhC,OAAA,CAAQ,KAAI,CACZ,OAAA,CAAQ,GAAA,CAAInG,CAAAA,CAAG,IAAA,CAAKA,CAAAA,CAAG,IAAA,CAAK,oBAAoB,CAAC,CAAC,CAAA,CAClD,OAAA,CAAQ,GAAA,CAAIA,CAAAA,CAAG,GAAA,CAAI,QAAA,CAAI,MAAA,CAAO,EAAE,CAAC,CAAC,CAAA,CAClC,OAAA,CAAQ,GAAA,EAAI,CAGZ,IAAMoG,CAAAA,CAAa,IAAI,GAAA,CAEvB,IAAA,GAAW,CAAChE,CAAAA,CAAMjE,CAAO,CAAA,GAAK+H,CAAAA,CAAU,CACtC,IAAMT,CAAAA,CAAMD,EAAAA,CAAYpD,CAAI,CAAA,CAG1B6D,CAAAA,EACA,CAACR,CAAAA,CAAI,WAAA,GAAc,QAAA,CAASQ,CAAM,CAAA,EAClC,CAAC7D,CAAAA,CAAK,QAAA,CAAS6D,CAAM,CAAA,GAKlBG,EAAW,GAAA,CAAIX,CAAG,CAAA,EACrBW,CAAAA,CAAW,GAAA,CAAIX,CAAAA,CAAK,EAAE,EAExBW,CAAAA,CAAW,GAAA,CAAIX,CAAG,CAAA,CAAG,IAAA,CAAK,CAAE,IAAA,CAAArD,CAAAA,CAAM,KAAMuD,EAAAA,CAAexH,CAAO,CAAE,CAAC,CAAA,EACnE,CAEA,GAAIiI,CAAAA,CAAW,OAAS,CAAA,CAAG,CACzB,OAAA,CAAQ,GAAA,CAAIpG,CAAAA,CAAG,GAAA,CAAI,+BAA+B,CAAC,EAEnD,MACF,CAGA,IAAMqG,CAAAA,CAAgB,MAAA,CAAO,IAAA,CAAKd,EAAU,CAAA,CACtCe,EAAmB,CAAC,GAAGF,CAAAA,CAAW,IAAA,EAAM,CAAA,CAAE,IAAA,CAC9C,CAACG,EAAGC,CAAAA,GAAAA,CACDH,CAAAA,CAAc,OAAA,CAAQE,CAAC,CAAA,EAAK,EAAA,GAAOF,CAAAA,CAAc,OAAA,CAAQG,CAAC,CAAA,EAAK,EAAA,CACpE,CAAA,CAEA,IAAA,IAAWf,CAAAA,IAAOa,CAAAA,CAAkB,CAClC,IAAMG,EAAQL,CAAAA,CAAW,GAAA,CAAIX,CAAG,CAAA,CAChC,OAAA,CAAQ,GAAA,CAAIzF,CAAAA,CAAG,IAAA,CAAKyF,CAAG,CAAC,CAAA,CAExB,IAAA,IAAWiB,CAAAA,IAAQD,CAAAA,CAAO,CACxB,IAAME,CAAAA,CAAOD,EAAK,IAAA,CAAO1G,CAAAA,CAAG,GAAA,CAAI,CAAA,QAAA,EAAM0G,CAAAA,CAAK,IAAI,CAAA,CAAE,CAAA,CAAI,GACrD,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK1G,CAAAA,CAAG,IAAA,CAAK0G,CAAAA,CAAK,IAAI,CAAC,GAAGC,CAAI,CAAA,CAAE,EAC9C,CAEA,QAAQ,GAAA,GACV,CAEA,OAAA,CAAQ,IACN3G,CAAAA,CAAG,GAAA,CACD,CAAA,EAAGkG,CAAAA,CAAS,IAAI,CAAA,yBAAA,EAA4BlG,CAAAA,CAAG,IAAA,CAAK,gCAAgC,CAAC,CAAA,gBAAA,CACvF,CACF,EACF,CAMA,eAAsB4G,EAAAA,CAAoBxE,CAAAA,CAAczC,EAAgB,CACtE,IAAIkH,CAAAA,CAAO,OAAA,CAAQ,GAAA,EAAI,CAEvB,IAAA,IAAShH,CAAAA,CAAI,EAAGA,CAAAA,CAAIF,CAAAA,CAAK,MAAA,CAAQE,CAAAA,EAAAA,CAC/B,GAAIF,CAAAA,CAAKE,CAAC,CAAA,GAAM,SAAU,CACxB,IAAMC,CAAAA,CAAMH,CAAAA,CAAK,EAAEE,CAAC,CAAA,CAChBC,CAAAA,GACF+G,EAAO/G,CAAAA,EAEX,CAGGsC,CAAAA,GACH,OAAA,CAAQ,KAAA,CAAM,sDAAsD,CAAA,CACpE,OAAA,CAAQ,KAAK,CAAC,CAAA,CAAA,CAGhB,IAAMjE,CAAAA,CAAU2I,UAAAA,CAAW1E,CAAI,CAAA,CAE1BjE,CAAAA,GACH,QAAQ,KAAA,CAAM,CAAA,SAAA,EAAYiE,CAAI,CAAA,YAAA,CAAc,CAAA,CAC5C,OAAA,CAAQ,KAAA,CACN,CAAA,IAAA,EAAOpC,EAAG,IAAA,CAAK,yBAAyB,CAAC,CAAA,2BAAA,CAC3C,CAAA,CACA,OAAA,CAAQ,IAAA,CAAK,CAAC,GAIhB,IAAM+G,CAAAA,CAAY5I,CAAAA,CACf,OAAA,CACC,+CAAA,CACA,oCACF,CAAA,CACC,OAAA,CACC,uCACA,4BACF,CAAA,CACC,OAAA,CAAQ,oCAAA,CAAsC,0BAA0B,CAAA,CAErEsC,CAAAA,CAAWnD,IAAAA,CAAKuJ,EAAM,CAAA,EAAGzE,CAAI,CAAA,GAAA,CAAK,CAAA,CAEpC/E,UAAAA,CAAWoD,CAAQ,CAAA,GACrB,OAAA,CAAQ,MAAM,CAAA,qBAAA,EAAwBL,QAAAA,CAAS,OAAA,CAAQ,GAAA,EAAI,CAAGK,CAAQ,CAAC,CAAA,CAAE,EACzE,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,CAAA,CAGhB,IAAMlC,CAAAA,CAAME,OAAAA,CAAQgC,CAAQ,EACvBpD,UAAAA,CAAWkB,CAAG,CAAA,EACjBsC,SAAAA,CAAUtC,CAAAA,CAAK,CAAE,SAAA,CAAW,IAAK,CAAC,CAAA,CAGpCuC,aAAAA,CAAcL,CAAAA,CAAUsG,CAAAA,CAAW,OAAO,CAAA,CAE1C,IAAMC,CAAAA,CAAM5G,QAAAA,CAAS,QAAQ,GAAA,EAAI,CAAGK,CAAQ,CAAA,CAC5C,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAGT,CAAAA,CAAG,MAAM,QAAQ,CAAC,CAAA,CAAA,EAAIA,CAAAA,CAAG,IAAA,CAAKoC,CAAI,CAAC,CAAA,QAAA,EAAMpC,EAAG,GAAA,CAAIgH,CAAG,CAAC,CAAA,CAAE,EACvE,CC/NA,SAAStH,EAAAA,CAAUC,CAAAA,CAIjB,CACA,IAAMC,CAAAA,CAAuB,EAAC,CAC1Ba,EAAW,EAAA,CACXwG,CAAAA,CAEJ,IAAA,IAASpH,CAAAA,CAAI,CAAA,CAAGA,CAAAA,CAAIF,CAAAA,CAAK,MAAA,CAAQE,IAAK,CACpC,IAAM6C,CAAAA,CAAM/C,CAAAA,CAAKE,CAAC,CAAA,CAElB,GAAQ6C,CAAAA,GACD,WAAY,CACf,IAAM5C,CAAAA,CAAMH,CAAAA,CAAK,EAAEE,CAAC,CAAA,CAChBC,CAAAA,GACFF,EAAK,MAAA,CAASE,CAAAA,EAGlB,CAAA,KAEM4C,CAAAA,EAAO,CAACA,CAAAA,CAAI,UAAA,CAAW,GAAG,IACvBjC,CAAAA,CAEOwG,CAAAA,GACVA,CAAAA,CAAgBvE,CAAAA,CAAAA,CAFhBjC,CAAAA,CAAWiC,CAAAA,EAMrB,CAEA,OAAO,CAAE,QAAA,CAAAjC,CAAAA,CAAU,aAAA,CAAAwG,CAAAA,CAAe,IAAA,CAAArH,CAAK,CACzC,CAMA,eAAsBsH,EAAAA,CAAevH,CAAAA,CAAgB,CACnD,GAAM,CAAE,QAAA,CAAAc,CAAAA,CAAU,aAAA,CAAAwG,CAAc,CAAA,CAAIvH,EAAAA,CAAUC,CAAI,CAAA,CAE7Cc,CAAAA,GACH,OAAA,CAAQ,KAAA,CAAM,kDAAkD,EAChE,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,CAAA,CAGhB,IAAMsC,CAAAA,CAAS,MAAMrB,CAAAA,CAAWjB,CAAQ,CAAA,CAEnCsC,CAAAA,CAAO,SAAA,EACVA,CAAAA,CAAO,KAAA,EAAM,CAGf,IAAMoE,CAAAA,CAAapE,EAAO,OAAA,EAAQ,CAElC,GAAIkE,CAAAA,CAAe,CAEjB,IAAMG,CAAAA,CAAcrE,CAAAA,CAAO,QAAQkE,CAAa,CAAA,CAEhD,GAAI,CAACG,EAAa,CAMhB,GALA,OAAA,CAAQ,KAAA,CACN,gBAAgBH,CAAa,CAAA;;AAAA,qBAAA,CAE/B,EAEIE,CAAAA,CAAW,KAAA,CAAM,SAAW,CAAA,CAC9B,OAAA,CAAQ,IAAInH,CAAAA,CAAG,GAAA,CAAI,2BAA2B,CAAC,CAAA,CAAA,aAEpCqH,CAAAA,IAAKF,CAAAA,CAAW,MACzB,OAAA,CAAQ,GAAA,CACN,KAAKnH,CAAAA,CAAG,IAAA,CAAKqH,EAAE,EAAE,CAAC,WAAMA,CAAAA,CAAE,WAAA,CAAY,IAAI,CAAA,OAAA,EAAUA,CAAAA,CAAE,cAAc,CAAA,CAAA,CACtE,CAAA,CAIJtE,EAAO,IAAA,EAAK,CACZ,QAAQ,IAAA,CAAK,CAAC,EAChB,CAEA,OAAA,CAAQ,KAAI,CACZ,OAAA,CAAQ,IAAI/C,CAAAA,CAAG,IAAA,CAAKA,EAAG,IAAA,CAAK,yBAAyB,CAAC,CAAC,CAAA,CACvD,QAAQ,GAAA,CAAIA,CAAAA,CAAG,IAAI,QAAA,CAAI,MAAA,CAAO,EAAE,CAAC,CAAC,EAClC,OAAA,CAAQ,GAAA,GACR,OAAA,CAAQ,GAAA,CAAIoH,CAAW,CAAA,CACvB,OAAA,CAAQ,MACV,CAAA,KAAA,GAEE,QAAQ,GAAA,EAAI,CACZ,QAAQ,GAAA,CAAIpH,CAAAA,CAAG,KAAKA,CAAAA,CAAG,IAAA,CAAK,kBAAkB,CAAC,CAAC,EAChD,OAAA,CAAQ,GAAA,CAAIA,EAAG,GAAA,CAAI,QAAA,CAAI,OAAO,EAAE,CAAC,CAAC,CAAA,CAClC,OAAA,CAAQ,KAAI,CAERmH,CAAAA,CAAW,MAAM,MAAA,GAAW,CAAA,CAAG,CACjC,OAAA,CAAQ,GAAA,CAAInH,EAAG,KAAA,CAAM,2BAA2B,CAAC,CAAA,CACjD,OAAA,CAAQ,KAAI,CAGZ,IAAMsH,EAAkB,MAAA,CAAO,OAAA,CAC7BH,EAAW,SAIb,CAAA,CACA,GAAIG,CAAAA,CAAgB,MAAA,CAAS,EAAG,CAC9B,OAAA,CAAQ,IAAItH,CAAAA,CAAG,IAAA,CAAK,2BAA2B,CAAC,CAAA,CAChD,OAAW,CAAC8B,CAAAA,CAAKyF,CAAM,CAAA,GAAKD,CAAAA,CAAiB,CAC3C,IAAME,CAAAA,CAAQC,GAAYF,CAAAA,CAAO,KAAK,EAChCG,CAAAA,CACJH,CAAAA,CAAO,WAAa,MAAA,CAAY,CAAA,EAAA,EAAKA,EAAO,QAAQ,CAAA,GAAA,CAAA,CAAQ,GAC9D,OAAA,CAAQ,GAAA,CAAI,KAAKvH,CAAAA,CAAG,IAAA,CAAK8B,CAAG,CAAC,CAAA,EAAA,EAAK0F,CAAK,CAAA,EAAGE,CAAG,EAAE,EACjD,CACA,QAAQ,GAAA,GACV,CACF,CAAA,KAAO,CACL,QAAQ,GAAA,CACN,CAAA,EAAG1H,EAAG,MAAA,CAAO,MAAA,CAAOmH,EAAW,KAAA,CAAM,MAAM,CAAC,CAAC,CAAA;AAAA,CAC/C,CAAA,CAEA,IAAA,IAAWE,CAAAA,IAAKF,CAAAA,CAAW,KAAA,CAAO,CAChC,OAAA,CAAQ,GAAA,CACN,CAAA,EAAGnH,CAAAA,CAAG,MAAA,CAAO,QAAG,CAAC,CAAA,CAAA,EAAIA,CAAAA,CAAG,IAAA,CAAKqH,CAAAA,CAAE,WAAA,CAAY,IAAI,CAAC,CAAA,MAAA,EAASrH,CAAAA,CAAG,GAAA,CAAIqH,CAAAA,CAAE,EAAE,CAAC,CAAA,CAAA,CACvE,CAAA,CACA,OAAA,CAAQ,IAAI,CAAA,mBAAA,EAAsBrH,CAAAA,CAAG,IAAA,CAAKqH,CAAAA,CAAE,cAAc,CAAC,CAAA,CAAE,CAAA,CAG7D,IAAMM,CAAAA,CAAU,CAAE,GAAGN,CAAAA,CAAE,WAAY,CAAA,CACnC,OAAQM,EAAoC,IAAA,CACxB,MAAA,CAAO,IAAA,CAAKA,CAAO,CAAA,CACvB,MAAA,CAAS,CAAA,EACvB,OAAA,CAAQ,IAAI,CAAA,WAAA,EAAc,IAAA,CAAK,SAAA,CAAUA,CAAO,CAAC,CAAA,CAAE,CAAA,CAIrD,IAAMC,EACJT,CAAAA,CAAW,SAAA,CAIXE,CAAAA,CAAE,EAAE,CAAA,CACFO,CAAAA,CACF,OAAA,CAAQ,GAAA,CACN,CAAA,YAAA,EAAeH,EAAAA,CAAYG,CAAAA,CAAe,KAAK,CAAC,CAAA,EAAGA,CAAAA,CAAe,KAAA,CAAQ,WAAMA,CAAAA,CAAe,KAAK,CAAA,CAAA,CAAK,EAAE,CAAA,CAC7G,CAAA,CAGoBT,CAAAA,CAAW,YAAA,CAAa,KACzCU,CAAAA,EACCA,CAAAA,CAAE,WAAA,GAAgBR,CAAAA,CAAE,WAAA,CAAY,IAAA,EAChCQ,CAAAA,CAAE,WAAA,GAAgB,aACtB,CAAA,EAEE,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK7H,CAAAA,CAAG,GAAA,CAAI,sCAAsC,CAAC,CAAA,CAAE,CAAA,CAIrE,OAAA,CAAQ,GAAA,GACV,CAEA,OAAA,CAAQ,GAAA,CACNA,EAAG,GAAA,CACD,CAAA,IAAA,EAAOA,CAAAA,CAAG,IAAA,CAAK,2CAA2C,CAAC,CAAA,0BAAA,CAC7D,CACF,EACF,CAGF+C,CAAAA,CAAO,IAAA,GACT,CAEA,SAAS0E,EAAAA,CAAYD,CAAAA,CAAuB,CAC1C,OAAQA,CAAAA,EACN,KAAK,UAAA,CACH,OAAOxH,CAAAA,CAAG,KAAA,CAAM,UAAU,CAAA,CAC5B,KAAK,SAAA,CACH,OAAOA,CAAAA,CAAG,GAAA,CAAI,SAAS,EACzB,KAAK,UAAA,CACH,OAAOA,CAAAA,CAAG,MAAA,CAAO,UAAU,CAAA,CAC7B,KAAK,UACH,OAAOA,CAAAA,CAAG,MAAA,CAAO,SAAS,CAAA,CAC5B,KAAK,WAAA,CACH,OAAOA,EAAG,GAAA,CAAI,WAAW,CAAA,CAC3B,QACE,OAAOA,CAAAA,CAAG,GAAA,CAAIwH,CAAK,CACvB,CACF,CCnLA,SAAS9H,EAAAA,CAAUC,CAAAA,CAA0D,CAC3E,IAAMC,CAAAA,CAAqB,CAAE,KAAA,CAAO,KAAA,CAAO,IAAA,CAAM,IAAK,CAAA,CAClDa,EAAW,EAAA,CAEf,IAAA,IAASZ,CAAAA,CAAI,CAAA,CAAGA,CAAAA,CAAIF,CAAAA,CAAK,MAAA,CAAQE,CAAAA,EAAAA,CAAK,CACpC,IAAM6C,CAAAA,CAAM/C,CAAAA,CAAKE,CAAC,CAAA,CAElB,OAAQ6C,CAAAA,EACN,KAAK,SAAA,CACH9C,CAAAA,CAAK,KAAA,CAAQ,IAAA,CACb,MACF,KAAK,WAAA,CACHA,EAAK,IAAA,CAAO,KAAA,CACZ,MACF,KAAK,UAAA,CAAY,CACf,IAAME,CAAAA,CAAMH,EAAK,EAAEE,CAAC,CAAA,CAChBC,CAAAA,GACFF,CAAAA,CAAK,MAAA,CAASE,CAAAA,CAAAA,CAEhB,KACF,CACA,QACM4C,CAAAA,EAAO,CAACA,CAAAA,CAAI,UAAA,CAAW,GAAG,CAAA,EAAK,CAACjC,CAAAA,GAClCA,CAAAA,CAAWiC,CAAAA,EAEjB,CACF,CAEA,OAAO,CAAE,QAAA,CAAAjC,EAAU,IAAA,CAAAb,CAAK,CAC1B,CAMA,SAASkI,EAAAA,CAAiBX,CAAAA,CAaf,CACT,IAAMvB,CAAAA,CAAkB,EAAC,CAEzBA,CAAAA,CAAM,IAAA,CAAK5F,CAAAA,CAAG,IAAA,CAAK,kBAAkB,CAAC,CAAA,CACtC4F,CAAAA,CAAM,IAAA,CAAK5F,CAAAA,CAAG,GAAA,CAAI,QAAA,CAAI,MAAA,CAAO,EAAE,CAAC,CAAC,CAAA,CACjC4F,CAAAA,CAAM,IAAA,CAAK,EAAE,CAAA,CAGb,IAAMmC,CAAAA,CAAgB,IAAI,GAAA,CAK1B,IAAA,IAAWC,CAAAA,IAAKb,CAAAA,CAAW,WAAA,CACzBY,CAAAA,CAAc,IAAIC,CAAAA,CAAE,EAAA,CAAI,CACtB,QAAA,CAAU,IAAI,GAAA,CACd,MAAA,CAAQA,CAAAA,CAAE,MAAA,CACV,QAAA,CAAUA,CAAAA,CAAE,QACd,CAAC,CAAA,CAIH,IAAA,IAAWX,CAAAA,IAAKF,EAAW,KAAA,CAAO,CAChC,IAAMc,CAAAA,CAAQF,CAAAA,CAAc,GAAA,CAAIV,CAAAA,CAAE,cAAc,EAC5CY,CAAAA,EACFA,CAAAA,CAAM,QAAA,CAAS,GAAA,CAAIZ,CAAAA,CAAE,WAAA,CAAY,IAAI,EAEzC,CAGA,IAAMa,CAAAA,CAAkB,IAAI,GAAA,CAC5B,IAAA,IAAWL,CAAAA,IAAKV,CAAAA,CAAW,YAAA,CACpBe,CAAAA,CAAgB,GAAA,CAAIL,CAAAA,CAAE,WAAW,CAAA,EACpCK,CAAAA,CAAgB,GAAA,CAAIL,CAAAA,CAAE,YAAa,EAAE,CAAA,CAEvCK,CAAAA,CAAgB,GAAA,CAAIL,CAAAA,CAAE,WAAW,CAAA,CAAG,KAAKA,CAAAA,CAAE,EAAE,CAAA,CAI/CjC,CAAAA,CAAM,IAAA,CAAK5F,CAAAA,CAAG,IAAA,CAAK,kDAAwC,CAAC,CAAA,CAC5D4F,CAAAA,CAAM,IAAA,CAAK,EAAE,CAAA,CAEb,IAAA,GAAW,CAACpI,CAAAA,CAAI2K,CAAI,CAAA,GAAKJ,CAAAA,CAAe,CACtC,IAAMR,CAAAA,CAASY,CAAAA,CAAK,MAAA,CAASnI,EAAG,KAAA,CAAM,QAAG,CAAA,CAAIA,CAAAA,CAAG,GAAA,CAAI,QAAG,CAAA,CAGvD,GAFA4F,EAAM,IAAA,CAAK,CAAA,EAAG2B,CAAM,CAAA,CAAA,EAAIvH,CAAAA,CAAG,IAAA,CAAKxC,CAAE,CAAC,eAAe2K,CAAAA,CAAK,QAAQ,CAAA,CAAA,CAAG,CAAA,CAE9DA,CAAAA,CAAK,QAAA,CAAS,IAAA,CAAO,CAAA,CACvB,IAAA,IAAWC,CAAAA,IAAWD,CAAAA,CAAK,QAAA,CAAU,CACnCvC,CAAAA,CAAM,IAAA,CAAK,CAAA,qBAAA,EAAS5F,EAAG,MAAA,CAAOoI,CAAO,CAAC,CAAA,CAAE,CAAA,CAExC,IAAMC,CAAAA,CAAYH,CAAAA,CAAgB,IAAIE,CAAO,CAAA,EAAK,EAAC,CACnD,GAAIC,CAAAA,CAAU,MAAA,CAAS,CAAA,CACrB,QAAWR,CAAAA,IAAKQ,CAAAA,CACdzC,CAAAA,CAAM,IAAA,CAAK,CAAA,yBAAA,EAAa5F,CAAAA,CAAG,OAAA,CAAQ6H,CAAC,CAAC,CAAA,CAAE,CAAA,CAAA,KAGzCjC,CAAAA,CAAM,IAAA,CAAK,CAAA,yBAAA,EAAa5F,CAAAA,CAAG,GAAA,CAAI,eAAe,CAAC,CAAA,CAAE,EAErD,CAAA,KAEA4F,CAAAA,CAAM,IAAA,CAAK,CAAA,qBAAA,EAAS5F,CAAAA,CAAG,IAAI,0BAA0B,CAAC,CAAA,CAAE,CAAA,CAG1D4F,CAAAA,CAAM,IAAA,CAAK,EAAE,EACf,CAGA,IAAM0C,CAAAA,CAAgB,IAAI,GAAA,CAC1B,IAAA,IAAWD,CAAAA,IAAaH,CAAAA,CAAgB,MAAA,EAAO,CAC7C,IAAA,IAAWL,CAAAA,IAAKQ,CAAAA,CACdC,CAAAA,CAAc,GAAA,CAAIT,CAAC,CAAA,CASvB,GALuBV,CAAAA,CAAW,YAAA,CAAa,GAAA,CAAKU,CAAAA,EAAMA,CAAAA,CAAE,EAAE,CAAA,CACzB,MAAA,CAClCA,GAAM,CAACS,CAAAA,CAAc,GAAA,CAAIT,CAAC,CAC7B,CAAA,CAAE,MAAA,CAEkB,CAAA,CAAG,CACrBjC,CAAAA,CAAM,IAAA,CAAK5F,CAAAA,CAAG,IAAA,CAAK,uBAAuB,CAAC,CAAA,CAC3C,IAAA,IAAW6H,CAAAA,IAAKV,CAAAA,CAAW,YAAA,CACpBmB,CAAAA,CAAc,GAAA,CAAIT,CAAAA,CAAE,EAAE,CAAA,EACzBjC,EAAM,IAAA,CAAK,CAAA,EAAA,EAAK5F,CAAAA,CAAG,OAAA,CAAQ6H,CAAAA,CAAE,EAAE,CAAC,CAAA,SAAA,EAAY7H,EAAG,MAAA,CAAO6H,CAAAA,CAAE,WAAW,CAAC,CAAA,CAAE,EAG5E,CAEA,OAAOjC,EAAM,IAAA,CAAK;AAAA,CAAI,CACxB,CAMA,SAAS2C,EAAAA,CACPpB,EAgBAnE,CAAAA,CACQ,CAER,IAAMwF,CAAAA,CAOD,EAAC,CACAC,CAAAA,CAA6C,GAQ7CC,CAAAA,CAAW,MAAA,CAAO,IAAA,CAAK1F,CAAK,CAAA,CAClC,IAAA,IAASnD,CAAAA,CAAI,CAAA,CAAGA,EAAI6I,CAAAA,CAAS,MAAA,CAAQ7I,CAAAA,EAAAA,CAAK,CACxC,IAAMiC,CAAAA,CAAM4G,CAAAA,CAAS7I,CAAC,CAAA,CACtB2I,EAAM,IAAA,CAAK,CACT,EAAA,CAAI,CAAA,KAAA,EAAQ1G,CAAG,CAAA,CAAA,CACf,KAAA,CAAOA,CAAAA,CACP,KAAM,MAAA,CACN,CAAA,CAAG,EAAA,CACH,CAAA,CAAG,EAAA,CAASjC,CAAAA,CAAI,EAAA,CAChB,KAAA,CAAO,SACT,CAAC,EACH,CAGA,IAAA,IAASA,CAAAA,CAAI,CAAA,CAAGA,CAAAA,CAAIsH,CAAAA,CAAW,YAAY,MAAA,CAAQtH,CAAAA,EAAAA,CAAK,CACtD,IAAMmI,EAAIb,CAAAA,CAAW,WAAA,CAAYtH,CAAC,CAAA,CAClC2I,EAAM,IAAA,CAAK,CACT,EAAA,CAAI,CAAA,WAAA,EAAcR,CAAAA,CAAE,EAAE,CAAA,CAAA,CACtB,KAAA,CAAOA,EAAE,EAAA,CACT,IAAA,CAAM,YAAA,CACN,CAAA,CAAG,GAAA,CACH,CAAA,CAAG,EAAA,CAASnI,CAAAA,CAAI,GAChB,KAAA,CAAOmI,CAAAA,CAAE,MAAA,CAAS,SAAA,CAAY,SAChC,CAAC,EACH,CAGA,IAAMW,CAAAA,CAAW,IAAI,GAAA,CACrB,IAAA,IAAW,KAAKxB,CAAAA,CAAW,KAAA,CACzBwB,CAAAA,CAAS,GAAA,CAAI,EAAE,WAAA,CAAY,IAAI,CAAA,CAEjC,IAAIC,CAAAA,CAAS,CAAA,CACb,IAAA,IAAWR,CAAAA,IAAWO,EACpBH,CAAAA,CAAM,IAAA,CAAK,CACT,EAAA,CAAI,CAAA,IAAA,EAAOJ,CAAO,CAAA,CAAA,CAClB,KAAA,CAAOA,EACP,IAAA,CAAM,aAAA,CACN,CAAA,CAAG,GAAA,CACH,CAAA,CAAG,EAAA,CAASQ,CAAAA,CAAS,EAAA,CACrB,MAAO,SACT,CAAC,CAAA,CACDA,CAAAA,EAAAA,CAIF,QAAS/I,CAAAA,CAAI,CAAA,CAAGA,CAAAA,CAAIsH,CAAAA,CAAW,aAAa,MAAA,CAAQtH,CAAAA,EAAAA,CAAK,CACvD,IAAMgI,CAAAA,CAAIV,CAAAA,CAAW,YAAA,CAAatH,CAAC,EACnC2I,CAAAA,CAAM,IAAA,CAAK,CACT,EAAA,CAAI,CAAA,SAAA,EAAYX,CAAAA,CAAE,EAAE,CAAA,CAAA,CACpB,MAAOA,CAAAA,CAAE,EAAA,CACT,IAAA,CAAM,UAAA,CACN,CAAA,CAAG,GAAA,CACH,CAAA,CAAG,EAAA,CAAShI,EAAI,EAAA,CAChB,KAAA,CAAO,SACT,CAAC,EACH,CAGA,IAAA,IAAW,CAAA,IAAKsH,CAAAA,CAAW,MACzBsB,CAAAA,CAAM,IAAA,CAAK,CACT,IAAA,CAAM,CAAA,WAAA,EAAc,CAAA,CAAE,cAAc,CAAA,CAAA,CACpC,GAAI,CAAA,IAAA,EAAO,CAAA,CAAE,WAAA,CAAY,IAAI,CAAA,CAC/B,CAAC,CAAA,CAIH,IAAA,IAAWZ,KAAKV,CAAAA,CAAW,YAAA,CACrBwB,CAAAA,CAAS,GAAA,CAAId,CAAAA,CAAE,WAAW,CAAA,EAC5BY,CAAAA,CAAM,KAAK,CACT,IAAA,CAAM,CAAA,IAAA,EAAOZ,CAAAA,CAAE,WAAW,CAAA,CAAA,CAC1B,EAAA,CAAI,CAAA,SAAA,EAAYA,CAAAA,CAAE,EAAE,CAAA,CACtB,CAAC,CAAA,CAIL,IAAMgB,CAAAA,CAAU,IAAI,GAAA,CAAIL,CAAAA,CAAM,IAAKM,CAAAA,EAAM,CAACA,CAAAA,CAAE,EAAA,CAAIA,CAAC,CAAC,CAAC,CAAA,CAC7CC,EAAW,GAAA,CACXC,CAAAA,CAAO,IAAA,CAAK,GAAA,CAAI,GAAGR,CAAAA,CAAM,GAAA,CAAKM,CAAAA,EAAMA,EAAE,CAAC,CAAC,CAAA,CAAI,EAAA,CAAY,GAExDG,CAAAA,CAAUR,CAAAA,CACb,GAAA,CAAKS,CAAAA,EAAM,CACV,IAAMC,CAAAA,CAAON,CAAAA,CAAQ,GAAA,CAAIK,CAAAA,CAAE,IAAI,CAAA,CACzBE,EAAAA,CAAKP,EAAQ,GAAA,CAAIK,CAAAA,CAAE,EAAE,CAAA,CAC3B,OAAI,CAACC,CAAAA,EAAQ,CAACC,GACL,EAAA,CAGF,CAAA,UAAA,EAAaD,CAAAA,CAAK,CAAA,CAAI,EAAE,CAAA,MAAA,EAASA,CAAAA,CAAK,CAAA,CAAI,EAAE,CAAA,MAAA,EAASC,EAAAA,CAAG,CAAC,CAAA,MAAA,EAASA,GAAG,CAAA,CAAI,EAAE,CAAA,gEAAA,CACpF,CAAC,EACA,IAAA,CAAK;AAAA,IAAA,CAAQ,CAAA,CAEVC,CAAAA,CAAUb,CAAAA,CACb,GAAA,CACEM,CAAAA,EACC,CAAA;AAAA,eAAA,EACSA,CAAAA,CAAE,CAAC,CAAA,KAAA,EAAQA,CAAAA,CAAE,CAAC,0CAA0CA,CAAAA,CAAE,KAAK,CAAA,yBAAA,EAA4BA,CAAAA,CAAE,KAAK,CAAA;AAAA,eAAA,EAClGA,CAAAA,CAAE,CAAA,CAAI,EAAE,CAAA,KAAA,EAAQA,EAAE,CAAA,CAAI,EAAE,CAAA,oEAAA,EAAuEA,CAAAA,CAAE,KAAK,CAAA,EAAA,EAAKQ,EAAAA,CAAWR,CAAAA,CAAE,KAAK,CAAC,CAAA;AAAA,QAAA,CAE3I,EACC,IAAA,CAAK;AAAA,IAAA,CAAQ,CAAA,CAIVS,GADU,CAAC,OAAA,CAAS,cAAe,cAAA,CAAgB,WAAW,EAEjE,GAAA,CACC,CAACC,EAAG3J,CAAAA,GACF,CAAA,SAAA,EAAY,GAASA,CAAAA,CAAI,GAAA,CAAW,EAAE,CAAA,uGAAA,EAA0G2J,CAAC,CAAA,OAAA,CACrJ,CAAA,CACC,IAAA,CAAK;AAAA,IAAA,CAAQ,EAEhB,OAAO,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAAA,EAUOT,CAAQ,aAAaC,CAAI,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAA,EAMnCO,EAAS;AAAA,IAAA,EACTN,CAAO;AAAA,IAAA,EACPI,CAAO;AAAA;AAAA;AAAA,OAAA,CAIb,CAEA,SAASC,EAAAA,CAAWG,CAAAA,CAAsB,CACxC,OAAOA,CAAAA,CACJ,OAAA,CAAQ,IAAA,CAAM,OAAO,CAAA,CACrB,OAAA,CAAQ,KAAM,MAAM,CAAA,CACpB,OAAA,CAAQ,IAAA,CAAM,MAAM,CAAA,CACpB,OAAA,CAAQ,IAAA,CAAM,QAAQ,CAC3B,CAMA,eAAsBC,EAAAA,CAAa/J,CAAAA,CAAgB,CACjD,GAAM,CAAE,QAAA,CAAAc,CAAAA,CAAU,IAAA,CAAAb,CAAK,EAAIF,EAAAA,CAAUC,CAAI,CAAA,CAEpCc,CAAAA,GACH,OAAA,CAAQ,KAAA,CACN,uEACF,CAAA,CACA,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,CAAA,CAGhB,IAAMsC,CAAAA,CAAS,MAAMrB,CAAAA,CAAWjB,CAAQ,CAAA,CAEnCsC,CAAAA,CAAO,SAAA,EACVA,CAAAA,CAAO,OAAM,CAGf,IAAMoE,CAAAA,CAAapE,CAAAA,CAAO,OAAA,EAAQ,CAElC,GAAInD,CAAAA,CAAK,KAAA,CAAO,CACd,OAAA,CAAQ,GAAA,CAAIkI,EAAAA,CAAiBX,CAAU,CAAC,CAAA,CACxCpE,CAAAA,CAAO,IAAA,EAAK,CAEZ,MACF,CAGA,IAAM4G,CAAAA,CAAoC,EAAC,CAC3C,GAAI5G,CAAAA,CAAO,KAAA,CACT,QAAWjB,CAAAA,IAAO,MAAA,CAAO,IAAA,CAAKiB,CAAAA,CAAO,KAAK,CAAA,CACxC,GAAI,CACF4G,CAAAA,CAAS7H,CAAG,CAAA,CAAIiB,CAAAA,CAAO,KAAA,CAAMjB,CAAG,EAClC,CAAA,KAAQ,CACN6H,CAAAA,CAAS7H,CAAG,CAAA,CAAI,KAClB,CAIJ,IAAM8H,CAAAA,CAAOrB,EAAAA,CAAgBpB,CAAAA,CAAYwC,CAAQ,CAAA,CAC3CE,CAAAA,CACJjK,EAAK,MAAA,EAAUtC,IAAAA,CAAK,OAAA,CAAQ,GAAA,EAAI,CAAG,uBAAuB,EAK5D,GAHAwD,aAAAA,CAAc+I,CAAAA,CAAYD,CAAAA,CAAM,OAAO,CAAA,CACvC,QAAQ,GAAA,CAAI,CAAA,EAAG5J,CAAAA,CAAG,KAAA,CAAM,WAAW,CAAC,CAAA,CAAA,EAAIA,CAAAA,CAAG,GAAA,CAAI6J,CAAU,CAAC,CAAA,CAAE,CAAA,CAExDjK,CAAAA,CAAK,KACP,GAAI,CACF,GAAM,CAAE,QAAA,CAAAkK,CAAS,EAAI,MAAM,OAAO,eAAoB,CAAA,CAChDC,CAAAA,CACJ,OAAA,CAAQ,WAAa,QAAA,CACjB,MAAA,CACA,OAAA,CAAQ,QAAA,GAAa,OAAA,CACnB,OAAA,CACA,UAAA,CACRD,CAAAA,CAASC,CAAAA,CAAS,CAACF,CAAU,CAAC,CAAA,CAC9B,OAAA,CAAQ,IAAI7J,CAAAA,CAAG,GAAA,CAAI,oBAAoB,CAAC,EAC1C,CAAA,KAAQ,CACN,OAAA,CAAQ,GAAA,CACNA,CAAAA,CAAG,GAAA,CAAI,CAAA,KAAA,EAAQ6J,CAAU,qCAAqC,CAChE,EACF,CAGF9G,CAAAA,CAAO,IAAA,GACT,CCnYA,SAASrD,EAAAA,CAAUC,CAAAA,CAA6B,CAC9C,IAAMC,CAAAA,CAAoB,CACxB,GAAA,CAAK,OAAA,CAAQ,GAAA,EAAI,CACjB,aAAA,CAAe,KACjB,CAAA,CAEA,IAAA,IAASC,EAAI,CAAA,CAAGA,CAAAA,CAAIF,CAAAA,CAAK,MAAA,CAAQE,CAAAA,EAAAA,CAG/B,OAFYF,EAAKE,CAAC,CAAA,EAGhB,KAAK,YAAA,CAAc,CACjB,IAAMC,CAAAA,CAAMH,CAAAA,CAAK,EAAEE,CAAC,CAAA,CAChBC,CAAAA,GACFF,CAAAA,CAAK,QAAA,CAAWE,CAAAA,CAAAA,CAElB,KACF,CACA,KAAK,OAAA,CAAS,CACZ,IAAMA,CAAAA,CAAMH,CAAAA,CAAK,EAAEE,CAAC,CAAA,CAChBC,CAAAA,GACFF,EAAK,GAAA,CAAME,CAAAA,CAAAA,CAEb,KACF,CACA,KAAK,kBAAA,CACHF,EAAK,aAAA,CAAgB,IAAA,CACrB,KACJ,CAGF,OAAOA,CACT,CAQA,SAASoK,EAAAA,CAAqBzL,CAAAA,CAA6B,CACzD,OAAIlB,UAAAA,CAAWC,IAAAA,CAAKiB,EAAK,gBAAgB,CAAC,CAAA,CACjC,MAAA,CAELlB,UAAAA,CAAWC,IAAAA,CAAKiB,EAAK,WAAW,CAAC,CAAA,EAAKlB,UAAAA,CAAWC,IAAAA,CAAKiB,CAAAA,CAAK,UAAU,CAAC,CAAA,CACjE,KAAA,CAELlB,UAAAA,CAAWC,IAAAA,CAAKiB,CAAAA,CAAK,WAAW,CAAC,CAAA,CAC5B,MAAA,CAGF,KACT,CAEA,SAAS0L,EAAAA,CAAWC,EAAoBnG,CAAAA,CAAqB,CAC3D,OAAQmG,CAAAA,EACN,KAAK,MAAA,CACH,OAAO,CAAA,SAAA,EAAYnG,CAAG,CAAA,CAAA,CACxB,KAAK,MAAA,CACH,OAAO,YAAYA,CAAG,CAAA,CAAA,CACxB,KAAK,KAAA,CACH,OAAO,CAAA,QAAA,EAAWA,CAAG,CAAA,CAAA,CACvB,QACE,OAAO,CAAA,YAAA,EAAeA,CAAG,CAAA,CAC7B,CACF,CAgBA,SAASoG,EAAAA,CAAaC,CAAAA,CAAwD,CAC5E,OAAO,CACL,QAAS,CACP,EAAA,CAAI,SAAA,CACJ,KAAA,CAAO,mBAAA,CACP,IAAA,CAAM,iEACN,KAAA,CAAO,CACL,CACE,IAAA,CAAM,CAAA,IAAA,EAAOA,CAAU,CAAA,GAAA,CAAA,CACvB,OAAA,CAASC,EAAAA,CAAsBD,CAAU,CAC3C,CAAA,CACA,CACE,IAAA,CAAM,cACN,OAAA,CAASE,EAAAA,CAAoBF,CAAU,CACzC,CACF,CAAA,CACA,IAAA,CAAM,CAAC,qBAAqB,CAC9B,CAAA,CACA,WAAA,CAAa,CACX,EAAA,CAAI,YACJ,KAAA,CAAO,qCAAA,CACP,IAAA,CAAM,4DAAA,CACN,KAAA,CAAO,CACL,CACE,IAAA,CAAM,CAAA,IAAA,EAAOA,CAAU,CAAA,GAAA,CAAA,CACvB,OAAA,CAASG,EAAAA,CAAmBH,CAAU,CACxC,CAAA,CACA,CACE,IAAA,CAAM,aAAA,CACN,OAAA,CAASI,EAAAA,CAAiBJ,CAAU,CACtC,CACF,CAAA,CACA,IAAA,CAAM,CAAC,qBAAqB,CAC9B,CAAA,CACA,iBAAA,CAAmB,CACjB,EAAA,CAAI,iBAAA,CACJ,KAAA,CAAO,iBAAA,CACP,IAAA,CAAM,kDAAA,CACN,KAAA,CAAO,CACL,CACE,IAAA,CAAM,CAAA,IAAA,EAAOA,CAAU,CAAA,GAAA,CAAA,CACvB,OAAA,CAASK,EAAAA,CAAiBL,CAAU,CACtC,CAAA,CACA,CACE,IAAA,CAAM,aAAA,CACN,OAAA,CAASM,EAAAA,CAAeN,CAAU,CACpC,CACF,EACA,IAAA,CAAM,CAAC,qBAAA,CAAuB,mBAAmB,CACnD,CACF,CACF,CAMA,SAASC,EAAAA,CAAsBjI,CAAAA,CAAsB,CAGnD,OAAO,CAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA,aAAA,EAFWuI,CAAAA,CAAYvI,CAAI,CAqBZ,CAAA,iBAAA,EAAoBA,CAAI,CAAA;AAAA;;AAAA;AAAA;AAAA,mBAAA,EAK3BA,CAAI,CAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAwBzB,CAEA,SAASkI,EAAAA,CAAoBlI,CAAAA,CAAsB,CACjD,IAAMwI,CAAAA,CAAYD,CAAAA,CAAYvI,CAAI,CAAA,CAElC,OAAO,CAAA;AAAA,SAAA,EACEwI,CAAS,cAAcxI,CAAI,CAAA;;AAAA;AAAA,UAAA,EAG1BwI,CAAS,CAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA,CAuBrB,CAEA,SAASL,EAAAA,CAAmBnI,CAAAA,CAAsB,CAGhD,OAAO,CAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA,aAAA,EAFWuI,CAAAA,CAAYvI,CAAI,CA6BZ,CAAA,iBAAA,EAAoBA,CAAI,CAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CA8EhD,CAEA,SAASoI,EAAAA,CAAiBpI,CAAAA,CAAsB,CAC9C,IAAMwI,CAAAA,CAAYD,CAAAA,CAAYvI,CAAI,CAAA,CAElC,OAAO,CAAA;AAAA,SAAA,EACEwI,CAAS,cAAcxI,CAAI,CAAA;;AAAA;AAAA,UAAA,EAG1BwI,CAAS,CAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA,CAkBrB,CAEA,SAASH,EAAAA,CAAiBrI,CAAAA,CAAsB,CAG9C,OAAO,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA,aAAA,EAFWuI,CAAAA,CAAYvI,CAAI,CAoCZ,CAAA,iBAAA,EAAoBA,CAAI,CAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CA2EhD,CAEA,SAASsI,EAAAA,CAAetI,CAAAA,CAAsB,CAC5C,IAAMwI,CAAAA,CAAYD,CAAAA,CAAYvI,CAAI,CAAA,CAElC,OAAO,CAAA;AAAA,SAAA,EACEwI,CAAS,cAAcxI,CAAI,CAAA;;AAAA;AAAA,UAAA,EAG1BwI,CAAS,CAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;;AAAA;AAAA,CAgBrB,CAMA,SAASD,CAAAA,CAAYvI,CAAAA,CAAsB,CACzC,OAAOA,CAAAA,CAAK,OAAA,CAAQ,WAAA,CAAa,CAACyI,CAAAA,CAAG7C,CAAAA,GAAMA,CAAAA,CAAE,WAAA,EAAa,CAC5D,CAEA,SAASrH,EAAAA,CAAUF,EAAkBtC,CAAAA,CAAiB,CACpD,IAAMI,CAAAA,CAAME,QAAQgC,CAAQ,CAAA,CACvBpD,UAAAA,CAAWkB,CAAG,GACjBsC,SAAAA,CAAUtC,CAAAA,CAAK,CAAE,SAAA,CAAW,IAAK,CAAC,CAAA,CAEpCuC,aAAAA,CAAcL,CAAAA,CAAUtC,EAAS,OAAO,EAC1C,CAMA,eAAsB2M,GAAYnL,CAAAA,CAAgB,CAChD,IAAMC,CAAAA,CAAOF,GAAUC,CAAI,CAAA,CAEzBoL,CAAA,CAAA,KAAA,CAAM/K,CAAAA,CAAG,OAAOA,CAAAA,CAAG,KAAA,CAAM,kBAAkB,CAAC,CAAC,CAAA,CAG/C,IAAIoK,CAAAA,CAEJ,GAAIxK,EAAK,aAAA,CACPwK,CAAAA,CAAa,WAAA,CAAA,KACR,CACL,IAAMY,CAAAA,CAAa,MAAQD,CAAA,CAAA,IAAA,CAAK,CAC9B,QAAS,cAAA,CACT,WAAA,CAAa,WAAA,CACb,YAAA,CAAc,YACd,QAAA,CAAWjL,CAAAA,EAAQ,CACjB,GAAI,CAAC,mBAAA,CAAoB,IAAA,CAAKA,CAAG,CAAA,CAC/B,OAAO,uEAEX,CACF,CAAC,CAAA,CAEKiL,WAASC,CAAU,CAAA,GACrBD,CAAA,CAAA,MAAA,CAAO,YAAY,EACrB,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,CAAA,CAGhBX,EAAaY,EACf,CAGA,IAAIC,CAAAA,CAEJ,GAAIrL,CAAAA,CAAK,QAAA,CAAU,CACjB,IAAMsL,EAAYf,EAAAA,CAAaC,CAAU,CAAA,CACnCxK,CAAAA,CAAK,YAAYsL,CAAAA,GACnBH,CAAA,CAAA,GAAA,CAAI,KAAA,CACJ,CAAA,kBAAA,EAAqBnL,EAAK,QAAQ,CAAA,aAAA,EAAgB,MAAA,CAAO,IAAA,CAAKsL,CAAS,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,EACrF,CAAA,CACA,OAAA,CAAQ,IAAA,CAAK,CAAC,GAEhBD,CAAAA,CAAarL,CAAAA,CAAK,SACpB,CAAA,KAAA,GAAWA,EAAK,aAAA,CACdqL,CAAAA,CAAa,SAAA,CAAA,KACR,CACL,IAAMC,CAAAA,CAAYf,EAAAA,CAAaC,CAAU,CAAA,CACnCe,EAAS,MAAQJ,CAAA,CAAA,MAAA,CAAO,CAC5B,OAAA,CAAS,oBACT,OAAA,CAAS,MAAA,CAAO,MAAA,CAAOG,CAAS,EAAE,GAAA,CAAKzN,CAAAA,GAAO,CAC5C,KAAA,CAAOA,EAAE,EAAA,CACT,KAAA,CAAOA,CAAAA,CAAE,KAAA,CACT,KAAMA,CAAAA,CAAE,IACV,CAAA,CAAE,CACJ,CAAC,CAAA,CAEKsN,CAAA,CAAA,QAAA,CAASI,CAAM,CAAA,GACjBJ,SAAO,YAAY,CAAA,CACrB,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,CAAA,CAGhBE,CAAAA,CAAaE,EACf,CAGA,IAAMC,CAAAA,CADYjB,EAAAA,CAAaC,CAAU,CAAA,CACda,CAAU,CAAA,CAG/Bf,CAAAA,CAAKF,EAAAA,CAAqBpK,CAAAA,CAAK,GAAG,CAAA,CACtCmL,CAAA,CAAA,GAAA,CAAI,IAAA,CAAK,CAAA,iBAAA,EAAoB/K,EAAG,IAAA,CAAKkK,CAAE,CAAC,CAAA,CAAE,EAG5C,IAAM1J,CAAAA,CAAMuK,CAAA,CAAA,OAAA,EAAQ,CACpBvK,EAAE,KAAA,CAAM,2BAA2B,CAAA,CAEnC,IACI6K,CAAAA,CAAU,EAEd,IAAA,IAAWnK,KAAQkK,CAAAA,CAAS,KAAA,CAAO,CACjC,IAAM3K,EAAWnD,IAAAA,CAAKsC,CAAAA,CAAK,GAAA,CAAKsB,CAAAA,CAAK,IAAI,CAAA,CAEzC,GAAI7D,UAAAA,CAAWoD,CAAQ,EAAG,CACxB4K,CAAAA,EAAAA,CACA,QACF,CAEA1K,GAAUF,CAAAA,CAAUS,CAAAA,CAAK,OAAO,EAElC,CAEAV,CAAAA,CAAE,IAAA,CAAK,wBAAwB,EAE/B,IAAA,IAAWU,CAAAA,IAAQkK,CAAAA,CAAS,KAAA,CAAO,CACjC,IAAM3K,CAAAA,CAAWnD,IAAAA,CAAKsC,CAAAA,CAAK,IAAKsB,CAAAA,CAAK,IAAI,CAAA,CACnC8F,CAAAA,CAAM5G,SAASR,CAAAA,CAAK,GAAA,CAAKa,CAAQ,CAAA,CAEnCpD,WAAWoD,CAAQ,CAAA,EACnBsK,CAAA,CAAA,GAAA,CAAI,OAAA,CAAQ,GAAG/K,CAAAA,CAAG,KAAA,CAAM,SAAS,CAAC,IAAIA,CAAAA,CAAG,GAAA,CAAIgH,CAAG,CAAC,EAAE,EAEzD,CAEIqE,CAAAA,CAAU,CAAA,EACVN,MAAI,IAAA,CAAK,CAAA,QAAA,EAAWM,CAAO,CAAA,4BAAA,CAA8B,EAI7D,IAAMC,CAAAA,CAAUrB,EAAAA,CAAWC,CAAAA,CAAIkB,EAAS,IAAA,CAAK,IAAA,CAAK,GAAG,CAAC,EAEpDL,CAAA,CAAA,KAAA,CACA,CAAA;AAAA,EAAA,EACO/K,CAAAA,CAAG,IAAA,CAAKsL,CAAO,CAAC;AAAA,EAAA,EAChBtL,CAAAA,CAAG,IAAA,CAAK,CAAA,EAAGpD,CAAQ,gBAAgB,CAAC;AAAA,EAAA,EACpCoD,CAAAA,CAAG,GAAA,CAAI,iBAAiB,CAAC,CAAA,CAClC,EACF,CC3nBA,SAASN,EAAAA,CAAUC,EAA4D,CAC7E,IAAMC,CAAAA,CAAuB,CAAE,IAAA,CAAM,KAAM,EACvCa,CAAAA,CAAW,EAAA,CAEf,IAAA,IAASZ,CAAAA,CAAI,CAAA,CAAGA,CAAAA,CAAIF,EAAK,MAAA,CAAQE,CAAAA,EAAAA,CAAK,CACpC,IAAM6C,CAAAA,CAAM/C,CAAAA,CAAKE,CAAC,CAAA,CAElB,OAAQ6C,CAAAA,EACN,KAAK,QAAA,CACH9C,EAAK,IAAA,CAAO,IAAA,CACZ,MACF,KAAK,UAAA,CAAY,CACf,IAAME,CAAAA,CAAMH,CAAAA,CAAK,EAAEE,CAAC,CAAA,CAChBC,CAAAA,GACFF,CAAAA,CAAK,OAASE,CAAAA,CAAAA,CAEhB,KACF,CACA,QACM4C,CAAAA,EAAO,CAACA,EAAI,UAAA,CAAW,GAAG,CAAA,EAAK,CAACjC,CAAAA,GAClCA,CAAAA,CAAWiC,GAEjB,CACF,CAEA,OAAO,CAAE,QAAA,CAAAjC,CAAAA,CAAU,IAAA,CAAAb,CAAK,CAC1B,CAMA,SAAS2L,EAAAA,CAAYvI,CAAAA,CAAwC,CAC3D,IAAM4C,CAAAA,CAAkB,EAAC,CACzBA,CAAAA,CAAM,IAAA,CAAK5F,CAAAA,CAAG,KAAK,QAAQ,CAAC,CAAA,CAE5B,IAAMwL,CAAAA,CAAU,MAAA,CAAO,QAAQxI,CAAK,CAAA,CACpC,GAAIwI,CAAAA,CAAQ,MAAA,GAAW,CAAA,CACrB,OAAA5F,CAAAA,CAAM,IAAA,CAAK,UAAU,CAAA,CAEdA,CAAAA,CAAM,IAAA,CAAK;AAAA,CAAI,CAAA,CAGxB,IAAA,GAAW,CAAC9D,CAAAA,CAAK2J,CAAK,CAAA,GAAKD,CAAAA,CAAS,CAClC,IAAME,CAAAA,CAAYC,EAAAA,CAAYF,CAAK,CAAA,CACnC7F,CAAAA,CAAM,IAAA,CAAK,CAAA,EAAA,EAAK5F,CAAAA,CAAG,IAAA,CAAK8B,CAAG,CAAC,CAAA,GAAA,EAAM4J,CAAS,CAAA,CAAE,EAC/C,CAEA,OAAO9F,CAAAA,CAAM,IAAA,CAAK;AAAA,CAAI,CACxB,CAEA,SAASgG,EAAAA,CACPC,CAAAA,CAQQ,CACR,IAAMjG,CAAAA,CAAkB,EAAC,CAGzB,GAFAA,CAAAA,CAAM,IAAA,CAAK5F,CAAAA,CAAG,IAAA,CAAK,cAAc,CAAC,CAAA,CAE9B6L,CAAAA,CAAY,MAAA,GAAW,CAAA,CACzB,OAAAjG,CAAAA,CAAM,IAAA,CAAK,UAAU,CAAA,CAEdA,CAAAA,CAAM,IAAA,CAAK;AAAA,CAAI,CAAA,CAGxB,IAAA,IAAWoC,CAAAA,IAAK6D,CAAAA,CAAa,CAC3B,IAAMtE,CAAAA,CAASS,CAAAA,CAAE,QAAA,CACbhI,CAAAA,CAAG,GAAA,CAAI,UAAU,EACjBgI,CAAAA,CAAE,MAAA,CACAhI,CAAAA,CAAG,KAAA,CAAM,QAAQ,CAAA,CACjBA,CAAAA,CAAG,GAAA,CAAI,UAAU,CAAA,CACjB8L,CAAAA,CAAO9D,CAAAA,CAAE,QAAA,CAAW,CAAA,CAAIhI,EAAG,MAAA,CAAO,CAAA,EAAA,EAAKgI,CAAAA,CAAE,QAAQ,CAAA,MAAA,CAAQ,CAAA,CAAI,EAAA,CACnEpC,CAAAA,CAAM,IAAA,CAAK,CAAA,EAAA,EAAK5F,CAAAA,CAAG,IAAA,CAAKgI,CAAAA,CAAE,EAAE,CAAC,CAAA,EAAA,EAAKT,CAAM,CAAA,WAAA,EAAcS,CAAAA,CAAE,QAAQ,CAAA,EAAG8D,CAAI,CAAA,CAAE,EAC3E,CAEA,OAAOlG,CAAAA,CAAM,IAAA,CAAK;AAAA,CAAI,CACxB,CAEA,SAASmG,EAAAA,CACPC,CAAAA,CACA3D,CAAAA,CAIQ,CACR,IAAMzC,CAAAA,CAAkB,EAAC,CAGzB,GAFAA,CAAAA,CAAM,IAAA,CAAK5F,CAAAA,CAAG,IAAA,CAAK,YAAY,CAAC,CAAA,CAE5BgM,CAAAA,CAAa,MAAA,GAAW,CAAA,CAC1B,OAAApG,CAAAA,CAAM,IAAA,CAAK,UAAU,CAAA,CAEdA,CAAAA,CAAM,IAAA,CAAK;AAAA,CAAI,EAGxB,IAAA,IAAWqG,CAAAA,IAAOD,EAAc,CAC9B,IAAMzE,EAASc,CAAAA,CAAU4D,CAAAA,CAAI,EAAE,CAAA,CACzBC,CAAAA,CAAW3E,EACb4E,EAAAA,CAAoB5E,CAAAA,CAAO,MAAOA,CAAAA,CAAO,KAAA,CAAOA,EAAO,QAAQ,CAAA,CAC/DvH,EAAG,GAAA,CAAI,MAAM,EACjB4F,CAAAA,CAAM,IAAA,CAAK,KAAK5F,CAAAA,CAAG,IAAA,CAAKiM,EAAI,EAAE,CAAC,WAAMA,CAAAA,CAAI,WAAW,KAAKC,CAAQ,CAAA,CAAE,EACrE,CAEA,OAAOtG,EAAM,IAAA,CAAK;AAAA,CAAI,CACxB,CAEA,SAASwG,EAAAA,CACPC,EAKQ,CACR,IAAMzG,CAAAA,CAAkB,EAAC,CAGzB,GAFAA,CAAAA,CAAM,IAAA,CAAK5F,EAAG,IAAA,CAAK,qBAAqB,CAAC,CAAA,CAErCqM,CAAAA,CAAM,MAAA,GAAW,CAAA,CACnB,OAAAzG,EAAM,IAAA,CAAK,CAAA,EAAA,EAAK5F,CAAAA,CAAG,KAAA,CAAM,wBAAwB,CAAC,CAAA,CAAE,CAAA,CAE7C4F,EAAM,IAAA,CAAK;AAAA,CAAI,CAAA,CAGxB,IAAA,IAAWyB,CAAAA,IAAKgF,CAAAA,CACdzG,CAAAA,CAAM,IAAA,CACJ,CAAA,EAAA,EAAK5F,CAAAA,CAAG,MAAA,CAAOqH,CAAAA,CAAE,WAAA,CAAY,IAAI,CAAC,CAAA,MAAA,EAASrH,CAAAA,CAAG,GAAA,CAAIqH,CAAAA,CAAE,EAAE,CAAC,CAAA,QAAA,EAAWrH,CAAAA,CAAG,GAAA,CAAIqH,CAAAA,CAAE,cAAc,CAAC,CAAA,CAC5F,CAAA,CAGF,OAAOzB,EAAM,IAAA,CAAK;AAAA,CAAI,CACxB,CAEA,SAAS0G,EAAAA,CACPC,EACQ,CACR,IAAM3G,CAAAA,CAAkB,EAAC,CAGzB,GAFAA,CAAAA,CAAM,IAAA,CAAK5F,EAAG,IAAA,CAAK,WAAW,CAAC,CAAA,CAE3BuM,CAAAA,CAAS,MAAA,GAAW,CAAA,CACtB,OAAA3G,EAAM,IAAA,CAAK,CAAA,EAAA,EAAK5F,CAAAA,CAAG,KAAA,CAAM,QAAQ,CAAC,CAAA,CAAE,CAAA,CAE7B4F,EAAM,IAAA,CAAK;AAAA,CAAI,EAGxB,IAAM4G,CAAAA,CAAM,KAAK,GAAA,EAAI,CACrB,QAAWC,CAAAA,IAAOF,CAAAA,CAAU,CAC1B,IAAMG,EAAUF,CAAAA,CAAMC,CAAAA,CAAI,UAC1B7G,CAAAA,CAAM,IAAA,CACJ,KAAK5F,CAAAA,CAAG,IAAA,CAAKyM,CAAAA,CAAI,UAAU,CAAC,CAAA,YAAA,EAAUzM,CAAAA,CAAG,IAAIyM,CAAAA,CAAI,EAAE,CAAC,CAAA,EAAA,EAAKzM,CAAAA,CAAG,OAAO,CAAA,EAAG0M,CAAO,IAAI,CAAC,CAAA,CACpF,EACF,CAEA,OAAO9G,EAAM,IAAA,CAAK;AAAA,CAAI,CACxB,CAEA,SAASuG,EAAAA,CACP3E,EACAmF,CAAAA,CACAC,CAAAA,CACQ,CACR,IAAMlF,CAAAA,CAAMkF,CAAAA,GAAa,MAAA,CAAY,CAAA,CAAA,EAAIA,CAAQ,CAAA,EAAA,CAAA,CAAO,EAAA,CAExD,OAAQpF,CAAAA,EACN,KAAK,UAAA,CACH,OAAOxH,EAAG,KAAA,CAAM,CAAA,QAAA,EAAW0H,CAAG,CAAA,CAAE,CAAA,CAClC,KAAK,SAAA,CACH,OAAO1H,EAAG,GAAA,CAAI,CAAA,OAAA,EAAU0H,CAAG,CAAA,EAAGiF,CAAAA,CAAQ,CAAA,QAAA,EAAMA,CAAK,CAAA,CAAA,CAAK,EAAE,CAAA,CAAE,CAAA,CAC5D,KAAK,UAAA,CACH,OAAO3M,CAAAA,CAAG,MAAA,CAAO,UAAU,EAC7B,KAAK,WAAA,CACH,OAAOA,CAAAA,CAAG,GAAA,CAAI,WAAW,CAAA,CAC3B,QACE,OAAOA,CAAAA,CAAG,GAAA,CAAIwH,CAAK,CACvB,CACF,CAEA,SAASmE,EAAAA,CAAYF,EAAwB,CAC3C,OAAIA,CAAAA,GAAU,IAAA,CACLzL,CAAAA,CAAG,GAAA,CAAI,MAAM,CAAA,CAElByL,IAAU,MAAA,CACLzL,CAAAA,CAAG,GAAA,CAAI,WAAW,CAAA,CAEvB,OAAOyL,CAAAA,EAAU,QAAA,CACZA,EAAM,MAAA,CAAS,EAAA,CAAK,CAAA,CAAA,EAAIA,CAAAA,CAAM,KAAA,CAAM,CAAA,CAAG,EAAE,CAAC,OAAS,CAAA,CAAA,EAAIA,CAAK,CAAA,CAAA,CAAA,CAEjE,OAAOA,CAAAA,EAAU,QAAA,EAAY,OAAOA,CAAAA,EAAU,UACzC,MAAA,CAAOA,CAAK,CAAA,CAEjB,KAAA,CAAM,OAAA,CAAQA,CAAK,CAAA,CACd,CAAA,CAAA,EAAIA,EAAM,MAAM,CAAA,OAAA,CAAA,CAGlB,IAAA,CAAK,SAAA,CAAUA,CAAK,CAAA,CAAE,KAAA,CAAM,CAAA,CAAG,EAAE,CAC1C,CAMA,SAASoB,EAAAA,CAAa1F,CAAAA,CAIT,CACX,IAAM2F,CAAAA,CAAqB,EAAC,CAMT,IAAI,GAAA,CAAI3F,CAAAA,CAAW,MAAM,GAAA,CAAKE,CAAAA,EAAMA,CAAAA,CAAE,WAAA,CAAY,IAAI,CAAC,CAAA,CACpD,IAAI,GAAA,CACxBF,CAAAA,CAAW,YAAA,CAAa,GAAA,CAAKU,CAAAA,EAAMA,CAAAA,CAAE,WAAW,CAClD,EAGA,IAAA,IAAWoE,CAAAA,IAAO9E,CAAAA,CAAW,YAAA,CACvB8E,CAAAA,CAAI,WAAA,CAMV,IAAA,IAAW5E,CAAAA,IAAKF,EAAW,KAAA,CACLA,CAAAA,CAAW,YAAA,CAAa,IAAA,CACzCU,CAAAA,EACCA,CAAAA,CAAE,WAAA,GAAgBR,CAAAA,CAAE,YAAY,IAAA,EAAQQ,CAAAA,CAAE,WAAA,GAAgB,aAC9D,CAAA,EAEEiF,CAAAA,CAAS,IAAA,CAAK,CAAA,kCAAA,EAAqCzF,EAAE,WAAA,CAAY,IAAI,CAAA,CAAA,CAAG,CAAA,CAI5E,OAAOyF,CACT,CAMA,eAAsBC,GAAepN,CAAAA,CAAgB,CACnD,GAAM,CAAE,QAAA,CAAAc,CAAAA,CAAU,IAAA,CAAAb,CAAK,EAAIF,EAAAA,CAAUC,CAAI,CAAA,CAEpCc,CAAAA,GACH,OAAA,CAAQ,KAAA,CAAM,4DAA4D,CAAA,CAC1E,QAAQ,IAAA,CAAK,CAAC,CAAA,CAAA,CAGhB,IAAMsC,CAAAA,CAAS,MAAMrB,CAAAA,CAAWjB,CAAQ,EAEnCsC,CAAAA,CAAO,SAAA,EACVA,CAAAA,CAAO,KAAA,EAAM,CAGf,IAAMoE,CAAAA,CAAapE,CAAAA,CAAO,SAAQ,CAElC,GAAInD,CAAAA,CAAK,IAAA,CAAM,CAEb,IAAM+J,CAAAA,CAAoC,GAC1C,GAAI5G,CAAAA,CAAO,KAAA,CACT,IAAA,IAAWjB,CAAAA,IAAO,MAAA,CAAO,IAAA,CAAKiB,CAAAA,CAAO,KAAK,CAAA,CACxC,GAAI,CACF4G,CAAAA,CAAS7H,CAAG,CAAA,CAAIiB,CAAAA,CAAO,KAAA,CAAMjB,CAAG,EAClC,CAAA,KAAQ,CACN6H,CAAAA,CAAS7H,CAAG,CAAA,CAAI,kBAClB,CAIJ,QAAQ,GAAA,CACN,IAAA,CAAK,SAAA,CACH,CACE,KAAA,CAAO6H,CAAAA,CACP,GAAGxC,CACL,EACA,IAAA,CACA,CACF,CACF,CAAA,CAEApE,CAAAA,CAAO,IAAA,EAAK,CAEZ,MACF,CAGA,OAAA,CAAQ,GAAA,EAAI,CACZ,OAAA,CAAQ,GAAA,CAAI/C,CAAAA,CAAG,IAAA,CAAKA,CAAAA,CAAG,KAAK,6BAA6B,CAAC,CAAC,CAAA,CAC3D,OAAA,CAAQ,GAAA,CAAIA,CAAAA,CAAG,GAAA,CAAI,SAAI,MAAA,CAAO,EAAE,CAAC,CAAC,CAAA,CAClC,OAAA,CAAQ,GAAA,EAAI,CAGZ,IAAM2J,CAAAA,CAAoC,EAAC,CAC3C,GAAI5G,CAAAA,CAAO,KAAA,CACT,IAAA,IAAWjB,CAAAA,IAAO,OAAO,IAAA,CAAKiB,CAAAA,CAAO,KAAK,CAAA,CACxC,GAAI,CACF4G,CAAAA,CAAS7H,CAAG,EAAIiB,CAAAA,CAAO,KAAA,CAAMjB,CAAG,EAClC,CAAA,KAAQ,CACN6H,CAAAA,CAAS7H,CAAG,EAAI,kBAClB,CAGJ,OAAA,CAAQ,GAAA,CAAIyJ,EAAAA,CAAY5B,CAAQ,CAAC,CAAA,CACjC,QAAQ,GAAA,EAAI,CAGZ,OAAA,CAAQ,GAAA,CAAIiC,EAAAA,CAAkBzE,CAAAA,CAAW,WAAW,CAAC,EACrD,OAAA,CAAQ,GAAA,EAAI,CAGZ,OAAA,CAAQ,GAAA,CACN4E,EAAAA,CAAmB5E,CAAAA,CAAW,YAAA,CAAcA,EAAW,SAAS,CAClE,CAAA,CACA,OAAA,CAAQ,GAAA,EAAI,CAGZ,OAAA,CAAQ,GAAA,CAAIiF,GAAYjF,CAAAA,CAAW,KAAK,CAAC,CAAA,CACzC,OAAA,CAAQ,GAAA,EAAI,CAGRA,CAAAA,CAAW,SAAS,MAAA,CAAS,CAAA,GAC/B,OAAA,CAAQ,GAAA,CAAImF,EAAAA,CAAenF,CAAAA,CAAW,QAAQ,CAAC,EAC/C,OAAA,CAAQ,GAAA,EAAI,CAAA,CAId,IAAM2F,CAAAA,CAAWD,EAAAA,CAAa1F,CAAU,CAAA,CACxC,GAAI2F,CAAAA,CAAS,MAAA,CAAS,CAAA,CAAG,CACvB,OAAA,CAAQ,GAAA,CAAI9M,CAAAA,CAAG,IAAA,CAAKA,EAAG,MAAA,CAAO,WAAW,CAAC,CAAC,CAAA,CAC3C,IAAA,IAAW+K,CAAAA,IAAK+B,CAAAA,CACd,QAAQ,GAAA,CAAI,CAAA,EAAA,EAAK9M,CAAAA,CAAG,MAAA,CAAO,QAAG,CAAC,CAAA,CAAA,EAAI+K,CAAC,EAAE,CAAA,CAExC,OAAA,CAAQ,GAAA,GACV,CAEAhI,CAAAA,CAAO,IAAA,GACT,CClVA,SAASrD,EAAAA,CAAUC,CAAAA,CAA4B,CAC7C,IAAMC,CAAAA,CAAmB,CACvB,KAAM,EAAC,CACP,OAAA,CAAS,KAAA,CACT,GAAA,CAAK,OAAA,CAAQ,GAAA,EACf,EAEA,IAAA,IAASC,CAAAA,CAAI,CAAA,CAAGA,CAAAA,CAAIF,CAAAA,CAAK,MAAA,CAAQE,CAAAA,EAAAA,CAG/B,OAFYF,EAAKE,CAAC,CAAA,EAGhB,KAAK,QAAA,CAAU,CACb,IAAMC,CAAAA,CAAMH,EAAK,EAAEE,CAAC,CAAA,CAChBC,CAAAA,GACFF,CAAAA,CAAK,IAAA,CAAOE,CAAAA,CAAI,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,CAAKU,CAAAA,EAAMA,CAAAA,CAAE,IAAA,EAAM,CAAA,CAAA,CAEhD,KACF,CACA,KAAK,WAAA,CACHZ,CAAAA,CAAK,OAAA,CAAU,IAAA,CACf,MACF,KAAK,OAAA,CAAS,CACZ,IAAME,CAAAA,CAAMH,CAAAA,CAAK,EAAEE,CAAC,CAAA,CAChBC,CAAAA,GACFF,CAAAA,CAAK,IAAME,CAAAA,CAAAA,CAEb,KACF,CACF,CAGF,OAAOF,CACT,CAQA,IAAMoN,GAA0B,CAC9B,QAAA,CACA,QAAA,CACA,aAAA,CACA,WAAA,CACA,SACF,CAAA,CAEA,SAASC,GAAe7K,CAAAA,CAAc8K,CAAAA,CAA6B,CACjE,IAAMtC,CAAAA,CAAYD,EAAAA,CAAYvI,CAAI,CAAA,CAC5B+K,EAAiBD,CAAAA,CAAS,QAAA,CAAS,aAAa,CAAA,CAChDE,CAAAA,CAAeF,CAAAA,CAAS,QAAA,CAAS,WAAW,EAI9CG,CAAAA,CAAO,CAAA,SAAA,EAFK,CAAC,mBAAA,CAAqB,cAAA,CAAgB,GAAG,CAAA,CAE1B,IAAA,CAAK,IAAI,CAAC,CAAA;;AAAA,CAAA,CAGzC,OAAAA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CAEJH,CAAAA,CAAS,QAAA,CAAS,QAAQ,CAAA,GAC5BG,CAAAA,EAAQ,CAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CAAA,CAGNH,CAAAA,CAAS,QAAA,CAAS,QAAQ,CAAA,GAC5BG,CAAAA,EAAQ,CAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CAAA,CAAA,CAGNF,CAAAA,EAAkBC,KACpBC,CAAAA,EAAQ,CAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CAAA,CAGVA,CAAAA,EAAQ,CAAA;;AAAA,CAAA,CAGRA,CAAAA,EAAQ,CAAA,aAAA,EAAgBzC,CAAS,CAAA,iBAAA,EAAoBxI,CAAI,CAAA;AAAA,CAAA,CACzDiL,CAAAA,EAAQ,CAAA;;AAAA,CAAA,CAERA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CAEJH,CAAAA,CAAS,QAAA,CAAS,QAAQ,CAAA,GAC5BG,CAAAA,EAAQ;AAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CAAA,CAGNH,CAAAA,CAAS,QAAA,CAAS,QAAQ,CAAA,GAC5BG,CAAAA,EAAQ;AAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CAAA,CAGNF,IACFE,CAAAA,EAAQ;AAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CAAA,CAGND,IACFC,CAAAA,EAAQ;AAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CAAA,CAGNH,CAAAA,CAAS,QAAA,CAAS,SAAS,CAAA,GAC7BG,CAAAA,EAAQ;AAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,4EACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CACRA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CAAA,CAGVA,CAAAA,EAAQ,CAAA;AAAA,CAAA,CAEDA,CACT,CAMA,SAASC,EAAAA,CAAqBlL,CAAAA,CAAsB,CAClD,IAAMwI,CAAAA,CAAYD,EAAAA,CAAYvI,CAAI,CAAA,CAElC,OAAO,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA,aAAA,EA2CMwI,CAAS,oBAAoBxI,CAAI,CAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA,UAAA,EAsFpCwI,CAAS,CAAA;AAAA;AAAA,CAGrB,CAMA,SAASD,EAAAA,CAAYvI,CAAAA,CAAsB,CACzC,OAAOA,CAAAA,CAAK,OAAA,CAAQ,WAAA,CAAa,CAACyI,CAAAA,CAAG7C,CAAAA,GAAMA,CAAAA,CAAE,WAAA,EAAa,CAC5D,CAEA,SAASrH,EAAAA,CAAUF,EAAkBtC,CAAAA,CAAiB,CACpD,IAAMI,CAAAA,CAAME,QAAQgC,CAAQ,CAAA,CACvBpD,UAAAA,CAAWkB,CAAG,GACjBsC,SAAAA,CAAUtC,CAAAA,CAAK,CAAE,SAAA,CAAW,IAAK,CAAC,CAAA,CAEpCuC,aAAAA,CAAcL,CAAAA,CAAUtC,CAAAA,CAAS,OAAO,EAC1C,CAEA,SAASoP,EAAAA,CAAehP,CAAAA,CAAqB,CAC3C,OAAOjB,KAAKiB,CAAAA,CAAK,KAAK,CACxB,CAMA,eAAsBiP,EAAAA,CAAiBpL,CAAAA,CAAczC,CAAAA,CAAgB,CACnE,IAAMC,CAAAA,CAAOF,EAAAA,CAAUC,CAAI,CAAA,CAAA,CAEvB,CAACyC,CAAAA,EAAQ,CAAC,mBAAA,CAAoB,IAAA,CAAKA,CAAI,CAAA,IACzC,OAAA,CAAQ,KAAA,CACN,CAAA,qBAAA,EAAwBA,GAAQ,QAAQ;AAAA,sEAAA,CAE1C,CAAA,CACA,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,CAAA,CAGhB,IAAI8K,CAAAA,CAEAtN,CAAAA,CAAK,OAAA,CACPsN,CAAAA,CAAW,EAAC,CACHtN,EAAK,IAAA,CAAK,MAAA,CAAS,CAAA,CAC5BsN,CAAAA,CAAWtN,CAAAA,CAAK,IAAA,CAAK,MAAA,CAAQY,CAAAA,EAC3BwM,EAAAA,CAAa,QAAA,CAASxM,CAAY,CACpC,CAAA,CAEA0M,CAAAA,CAAWF,EAAAA,CAGb,IAAM9M,EAAYqN,EAAAA,CAAe3N,CAAAA,CAAK,GAAG,CAAA,CACnCa,CAAAA,CAAWnD,IAAAA,CAAK4C,CAAAA,CAAW,CAAA,EAAGkC,CAAI,CAAA,GAAA,CAAK,CAAA,CAEzC/E,UAAAA,CAAWoD,CAAQ,CAAA,GACrB,OAAA,CAAQ,KAAA,CAAM,wBAAwBL,QAAAA,CAASR,CAAAA,CAAK,GAAA,CAAKa,CAAQ,CAAC,CAAA,CAAE,CAAA,CACpE,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,CAAA,CAGhB,IAAMtC,CAAAA,CAAU8O,EAAAA,CAAe7K,CAAAA,CAAM8K,CAAQ,EAC7CvM,EAAAA,CAAUF,CAAAA,CAAUtC,CAAO,CAAA,CAE3B,IAAM6I,CAAAA,CAAM5G,QAAAA,CAASR,CAAAA,CAAK,GAAA,CAAKa,CAAQ,CAAA,CACvC,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAGT,CAAAA,CAAG,KAAA,CAAM,SAAS,CAAC,CAAA,CAAA,EAAIA,CAAAA,CAAG,GAAA,CAAIgH,CAAG,CAAC,CAAA,CAAE,CAAA,CAE/CkG,CAAAA,CAAS,MAAA,GAAW,CAAA,CACtB,OAAA,CAAQ,GAAA,CAAIlN,CAAAA,CAAG,GAAA,CAAI,uCAAuC,CAAC,CAAA,CAE3D,OAAA,CAAQ,GAAA,CAAIA,CAAAA,CAAG,GAAA,CAAI,CAAA,YAAA,EAAekN,CAAAA,CAAS,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAC,EAE5D,CAEA,eAAsBO,EAAAA,CAAuBrL,EAAczC,CAAAA,CAAgB,CACzE,IAAMC,CAAAA,CAAOF,EAAAA,CAAUC,CAAI,CAAA,CAAA,CAEvB,CAACyC,GAAQ,CAAC,mBAAA,CAAoB,IAAA,CAAKA,CAAI,CAAA,IACzC,OAAA,CAAQ,KAAA,CACN,CAAA,2BAAA,EAA8BA,GAAQ,QAAQ;AAAA,sEAAA,CAEhD,CAAA,CACA,QAAQ,IAAA,CAAK,CAAC,GAGhB,IAAMlC,CAAAA,CAAYqN,EAAAA,CAAe3N,CAAAA,CAAK,GAAG,CAAA,CACnCa,EAAWnD,IAAAA,CAAK4C,CAAAA,CAAW,GAAGkC,CAAI,CAAA,GAAA,CAAK,EAEzC/E,UAAAA,CAAWoD,CAAQ,CAAA,GACrB,OAAA,CAAQ,KAAA,CAAM,CAAA,qBAAA,EAAwBL,SAASR,CAAAA,CAAK,GAAA,CAAKa,CAAQ,CAAC,CAAA,CAAE,EACpE,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,CAAA,CAGhB,IAAMtC,CAAAA,CAAUmP,GAAqBlL,CAAI,CAAA,CACzCzB,EAAAA,CAAUF,CAAAA,CAAUtC,CAAO,CAAA,CAE3B,IAAM6I,CAAAA,CAAM5G,QAAAA,CAASR,CAAAA,CAAK,GAAA,CAAKa,CAAQ,CAAA,CACvC,QAAQ,GAAA,CAAI,CAAA,EAAGT,EAAG,KAAA,CAAM,SAAS,CAAC,CAAA,CAAA,EAAIA,CAAAA,CAAG,GAAA,CAAIgH,CAAG,CAAC,CAAA,CAAE,EACnD,OAAA,CAAQ,GAAA,CACNhH,CAAAA,CAAG,GAAA,CAAI,0DAA0D,CACnE,EACF,CChWA,SAASN,EAAAA,CAAUC,CAAAA,CAGjB,CACA,IAAMC,EAAyB,CAC7B,IAAA,CAAM,KAAA,CACN,gBAAA,CAAkB,IAAA,CAClB,OAAA,CAAS,KACX,CAAA,CACI6C,CAAAA,CAAW,EAAA,CAEf,IAAA,IAAS5C,CAAAA,CAAI,CAAA,CAAGA,EAAIF,CAAAA,CAAK,MAAA,CAAQE,IAAK,CACpC,IAAM6C,EAAM/C,CAAAA,CAAKE,CAAC,CAAA,CAClB,OAAQ6C,CAAAA,EACN,KAAK,UAAA,CACL,KAAK,IAAA,CAAM,CACT,IAAM5C,CAAAA,CAAMH,EAAK,EAAEE,CAAC,CAAA,CAChBC,CAAAA,GAAKF,CAAAA,CAAK,UAAA,CAAaE,GAC3B,KACF,CACA,KAAK,cAAA,CAAgB,CACnB,IAAMA,CAAAA,CAAMH,CAAAA,CAAK,EAAEE,CAAC,CAAA,CACd,CAAA,CAAIC,EAAM,MAAA,CAAO,QAAA,CAASA,CAAAA,CAAK,EAAE,CAAA,CAAI,MAAA,CAAO,IAC9C,MAAA,CAAO,QAAA,CAAS,CAAC,CAAA,EAAK,CAAA,CAAI,CAAA,GAAGF,EAAK,SAAA,CAAY,CAAA,CAAA,CAClD,KACF,CACA,KAAK,eACL,KAAK,wBAAA,CACHA,CAAAA,CAAK,gBAAA,CAAmB,KAAA,CACxB,MACF,KAAK,QAAA,CACHA,CAAAA,CAAK,IAAA,CAAO,IAAA,CACZ,MACF,KAAK,YACL,KAAK,IAAA,CACHA,CAAAA,CAAK,OAAA,CAAU,IAAA,CACf,MACF,QACM8C,CAAAA,EAAO,CAACA,EAAI,UAAA,CAAW,GAAG,GAAK,CAACD,CAAAA,GAClCA,CAAAA,CAAWC,CAAAA,EAEjB,CACF,CAEA,OAAO,CAAE,QAAA,CAAAD,CAAAA,CAAU,IAAA,CAAA7C,CAAK,CAC1B,CAEA,SAAS+C,EAAAA,EAAmB,CAC1B,OAAA,CAAQ,KAAA,CAAM;AAAA;;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA,CAsBf,EACD,CAEA,eAAsB+K,EAAAA,CAAc/N,CAAAA,CAA+B,CAAA,CAC7DA,CAAAA,CAAK,QAAA,CAAS,QAAQ,CAAA,EAAKA,CAAAA,CAAK,QAAA,CAAS,IAAI,CAAA,EAAKA,CAAAA,CAAK,MAAA,GAAW,CAAA,IACpEgD,EAAAA,EAAW,CACX,OAAA,CAAQ,IAAA,CAAKhD,CAAAA,CAAK,MAAA,GAAW,CAAA,CAAI,CAAA,CAAI,CAAC,CAAA,CAAA,CAGxC,GAAM,CAAE,QAAA,CAAA8C,CAAAA,CAAU,IAAA,CAAA7C,CAAK,CAAA,CAAIF,EAAAA,CAAUC,CAAI,CAAA,CAEpC8C,CAAAA,GACH,OAAA,CAAQ,KAAA,CAAMzC,CAAAA,CAAG,GAAA,CAAI,yCAAyC,CAAC,CAAA,CAC/D2C,EAAAA,EAAW,CACX,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,CAAA,CAEX/C,CAAAA,CAAK,UAAA,GACR,OAAA,CAAQ,KAAA,CACNI,CAAAA,CAAG,GAAA,CAAI,oCAAoC,CAAA,CAC3CA,CAAAA,CAAG,GAAA,CAAI;AAAA,wDAAA,CAA4D,CACrE,CAAA,CACA2C,EAAAA,GACA,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,CAAA,CAGhB,IAAMO,EAAe1E,OAAAA,CAAQiE,CAAQ,EAChCpF,UAAAA,CAAW6F,CAAY,IAC1B,OAAA,CAAQ,KAAA,CAAMlD,EAAG,GAAA,CAAI,CAAA,gCAAA,EAAmCkD,CAAY,CAAA,CAAE,CAAC,EACvE,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,CAAA,CAIhB,IAAIC,EACJ,GAAI,CACFA,EAAMxE,YAAAA,CAAauE,CAAAA,CAAc,MAAM,EACzC,CAAA,MAASnB,EAAK,CACZ,OAAA,CAAQ,MACN/B,CAAAA,CAAG,GAAA,CACD,yBAAyBkD,CAAY,CAAA,EAAA,EAAMnB,EAAc,OAAO,CAAA,CAClE,CACF,CAAA,CACA,OAAA,CAAQ,KAAK,CAAC,EAChB,CAEA,IAAIqB,CAAAA,CACJ,GAAI,CACFA,CAAAA,CAAS,KAAK,KAAA,CAAMD,CAAG,EACzB,CAAA,MAASpB,CAAAA,CAAK,CACZ,OAAA,CAAQ,KAAA,CACN/B,EAAG,GAAA,CACD,CAAA,OAAA,EAAUkD,CAAY,CAAA,oBAAA,EAAwBnB,CAAAA,CAAc,OAAO,CAAA,CACrE,CACF,EACA,OAAA,CAAQ,IAAA,CAAK,CAAC,EAChB,CAGA,GAAM,CAAE,mBAAA,CAAAsB,EAAqB,cAAA,CAAAsK,CAAe,CAAA,CAAI,MAAMpL,EACpD3C,CAAAA,CAAK,OACP,EAGI2D,CAAAA,CACJ,GAAI,CACFA,CAAAA,CAAWF,CAAAA,CAAoBD,CAAM,EACvC,CAAA,MAASrB,EAAK,CACZ,OAAA,CAAQ,MACN/B,CAAAA,CAAG,GAAA,CACD,2CAA4C+B,CAAAA,CAAc,OAAO,EACnE,CACF,CAAA,CACA,QAAQ,IAAA,CAAK,CAAC,EAChB,CAGA,IAAIgB,EACJ,GAAI,CACFA,EAAS,MAAMrB,CAAAA,CAAW9B,EAAK,UAAU,EAC3C,OAASmC,CAAAA,CAAK,CACZ,QAAQ,KAAA,CACN/B,CAAAA,CAAG,IAAI,CAAA,mCAAA,EAAuC+B,CAAAA,CAAc,OAAO,CAAA,CAAE,CACvE,EACA,OAAA,CAAQ,IAAA,CAAK,CAAC,EAChB,CAGA,IAAME,CAAAA,CAAMc,CAAAA,CAaZ,GAZI,OAAOd,CAAAA,CAAI,UAAa,UAAA,GAC1B,OAAA,CAAQ,MACNjC,CAAAA,CAAG,GAAA,CACD,uHACF,CACF,CAAA,CACA,QAAQ,IAAA,CAAK,CAAC,GAMZ,OAAOiC,CAAAA,CAAI,OAAU,UAAA,CACvB,GAAI,CACFA,CAAAA,CAAI,KAAA,GACN,CAAA,KAAQ,CAER,CAOF,IAAMK,CAAAA,CAAS,MAAMqL,CAAAA,CACnBpK,CAAAA,CACAtB,CAAAA,CAGA,CACE,iBAAkBrC,CAAAA,CAAK,gBAAA,CACvB,UAAWA,CAAAA,CAAK,SAClB,CACF,CAAA,CAEA,GAAIA,EAAK,IAAA,CACP,OAAA,CAAQ,IAAI,IAAA,CAAK,SAAA,CAAU0C,EAAQ,IAAA,CAAM,CAAC,CAAC,CAAA,CAAA,KACtC,CACL,GAAM,CAAE,UAAA,CAAAsL,EAAY,OAAA,CAAAvC,CAAAA,CAAS,UAAAwC,CAAU,CAAA,CAAIvL,EACrCwL,CAAAA,CAAKF,CAAAA,CAAa,EACxB,OAAA,CAAQ,GAAA,CACN,GAAGE,CAAAA,CAAK9N,CAAAA,CAAG,MAAM,QAAG,CAAA,CAAIA,EAAG,MAAA,CAAO,QAAG,CAAC,CAAA,iBAAA,CAAA,CACtCA,CAAAA,CAAG,KAAK,CAAA,EAAG4N,CAAU,aAAa,CAAA,CAClC5N,CAAAA,CAAG,IAAI,CAAA,EAAA,EAAKqL,CAAO,UAAU,CAAA,CAC7BwC,CAAAA,CAAY,EAAI7N,CAAAA,CAAG,MAAA,CAAO,KAAK6N,CAAS,CAAA,UAAA,CAAY,EAAI,EAC1D,CAAA,CACID,IAAe,CAAA,EACjB,OAAA,CAAQ,MACN5N,CAAAA,CAAG,MAAA,CACD,6LACF,CACF,CAAA,CAEE6N,EAAY,CAAA,EACd,OAAA,CAAQ,MACN7N,CAAAA,CAAG,MAAA,CACD,YAAY6N,CAAS,CAAA,uFAAA,CACvB,CACF,EAEJ,CAKA,QAAQ,IAAA,CAAK,CAAC,EAChB,CCjOA,SAASnO,EAAAA,CAAUC,EAIjB,CACA,IAAMC,EAA+B,CAAE,IAAA,CAAM,MAAO,OAAA,CAAS,KAAM,EAC7DmO,CAAAA,CAAwB,GAC9B,IAAA,IAASlO,CAAAA,CAAI,EAAGA,CAAAA,CAAIF,CAAAA,CAAK,OAAQE,CAAAA,EAAAA,CAAK,CACpC,IAAM6C,CAAAA,CAAM/C,CAAAA,CAAKE,CAAC,CAAA,CAClB,OAAQ6C,GACN,KAAK,SACH9C,CAAAA,CAAK,IAAA,CAAO,KACZ,MACF,KAAK,YACL,KAAK,IAAA,CACHA,EAAK,OAAA,CAAU,IAAA,CACf,MACF,QACM8C,CAAAA,EAAO,CAACA,CAAAA,CAAI,UAAA,CAAW,GAAG,CAAA,EAAGqL,CAAAA,CAAY,KAAKrL,CAAG,EACzD,CACF,CACA,OAAO,CACL,KAAA,CAAOqL,CAAAA,CAAY,CAAC,CAAA,EAAK,EAAA,CACzB,MAAOA,CAAAA,CAAY,CAAC,GAAK,EAAA,CACzB,IAAA,CAAAnO,CACF,CACF,CAEA,SAAS+C,EAAAA,EAAmB,CAC1B,QAAQ,KAAA,CAAM;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA,CAwBf,EACD,CAEA,SAASqL,CAAAA,CAAQlF,EAAmB,CAClC,OAAIA,CAAAA,CAAI,CAAA,CAAU9I,CAAAA,CAAG,KAAA,CAAM,CAAA,CAAA,EAAI8I,CAAC,EAAE,CAAA,CAC9BA,CAAAA,CAAI,CAAA,CAAU9I,CAAAA,CAAG,GAAA,CAAI,CAAA,EAAG8I,CAAC,CAAA,CAAE,EACxB9I,CAAAA,CAAG,GAAA,CAAI,IAAI,CACpB,CAEA,SAASiO,EAAAA,CAAcC,CAAAA,CAA8B,CACnD,OAAIA,CAAAA,CAAK,MAAA,GAAW,CAAA,CAAU,CAAClO,CAAAA,CAAG,GAAA,CAAI,oBAAoB,CAAC,CAAA,CACpDkO,CAAAA,CAAK,GAAA,CACTrG,CAAAA,EACC,CAAA,EAAA,EAAK7H,CAAAA,CAAG,IAAA,CAAK6H,CAAAA,CAAE,GAAG,MAAA,CAAO,EAAE,CAAC,CAAC,CAAA,CAAA,EAAI,MAAA,CAAOA,CAAAA,CAAE,MAAM,EAAE,QAAA,CAAS,CAAC,CAAC,CAAA,QAAA,EAAM,MAAA,CAAOA,CAAAA,CAAE,MAAM,CAAA,CAAE,SAAS,CAAC,CAAC,CAAA,GAAA,EAAMmG,CAAAA,CAAQnG,CAAAA,CAAE,KAAK,CAAC,CAAA,CAAA,CACzH,CACF,CAEA,SAASsG,EAAAA,CAAgBD,CAAAA,CAAoC,CAC3D,OAAIA,CAAAA,CAAK,MAAA,GAAW,EAAU,CAAClO,CAAAA,CAAG,GAAA,CAAI,oBAAoB,CAAC,CAAA,CACpDkO,CAAAA,CAAK,GAAA,CACTrG,GACC,CAAA,EAAA,EAAK7H,CAAAA,CAAG,IAAA,CAAK6H,CAAAA,CAAE,QAAA,CAAS,MAAA,CAAO,EAAE,CAAC,CAAC,CAAA,QAAA,EACzBA,CAAAA,CAAE,OAAO,CAAA,MAAA,EAAIA,CAAAA,CAAE,OAAO,CAAA,EAAA,EAAKmG,CAAAA,CAAQnG,EAAE,OAAA,CAAUA,CAAAA,CAAE,OAAO,CAAC,CAAA,aAAA,EACtDA,CAAAA,CAAE,UAAU,CAAA,MAAA,EAAIA,EAAE,UAAU,CAAA,EAAA,EAAKmG,CAAAA,CAAQnG,CAAAA,CAAE,UAAA,CAAaA,CAAAA,CAAE,UAAU,CAAC,aACxEA,CAAAA,CAAE,OAAO,CAAA,MAAA,EAAIA,CAAAA,CAAE,OAAO,CAAA,EAAA,EAAKmG,CAAAA,CAAQnG,CAAAA,CAAE,OAAA,CAAUA,EAAE,OAAO,CAAC,CAAA,CAAA,CACvE,CACF,CAEA,SAASuG,EAAAA,CAAUF,CAAAA,CAA8B,CAC/C,OAAIA,CAAAA,CAAK,MAAA,GAAW,CAAA,CAAU,CAAClO,CAAAA,CAAG,GAAA,CAAI,mBAAmB,CAAC,CAAA,CACnDkO,CAAAA,CAAK,GAAA,CAAKhF,CAAAA,EAAM,CACrB,IAAMmF,CAAAA,CAAUnF,CAAAA,CAAE,OAAS,GAAA,CAAMlJ,CAAAA,CAAG,IAAA,CAAK,QAAQ,CAAA,CAAIA,CAAAA,CAAG,MAAA,CAAO,QAAQ,EACjEsO,CAAAA,CAAAA,CAAU,IAAM,CACpB,GAAI,CACF,OAAO,IAAA,CAAK,SAAA,CAAUpF,EAAE,KAAK,CAC/B,CAAA,KAAQ,CACN,OAAO,CAAA,CAAA,EAAI,OAAOA,CAAAA,CAAE,KAAK,CAAA,CAAA,CAC3B,CACF,CAAA,GAAG,CACH,OAAO,CAAA,EAAA,EAAKmF,CAAO,CAAA,SAAA,EAAYnF,EAAE,UAAU,CAAA,EAAA,EAAKlJ,CAAAA,CAAG,IAAA,CAAKkJ,EAAE,IAAI,CAAC,CAAA,EAAA,EAAKA,CAAAA,CAAE,EAAE,CAAA,GAAA,EAAMlJ,CAAAA,CAAG,GAAA,CAAIsO,CAAM,CAAC,CAAA,CAC9F,CAAC,CACH,CAEA,SAASC,EAAAA,CAAaC,CAAAA,CAAuB,CAC3C,IAAM7M,CAAAA,CAAWnD,OAAAA,CAAQgQ,CAAI,EACxBnR,UAAAA,CAAWsE,CAAQ,CAAA,GACtB,OAAA,CAAQ,KAAA,CAAM3B,CAAAA,CAAG,GAAA,CAAI,CAAA,gCAAA,EAAmC2B,CAAQ,CAAA,CAAE,CAAC,CAAA,CACnE,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,CAAA,CAEhB,IAAIwB,EACJ,GAAI,CACFA,CAAAA,CAAMxE,YAAAA,CAAagD,CAAAA,CAAU,MAAM,EACrC,CAAA,MAASI,EAAK,CACZ,OAAA,CAAQ,KAAA,CACN/B,CAAAA,CAAG,GAAA,CAAI,CAAA,sBAAA,EAAyB2B,CAAQ,CAAA,EAAA,EAAMI,EAAc,OAAO,CAAA,CAAE,CACvE,CAAA,CACA,OAAA,CAAQ,IAAA,CAAK,CAAC,EAChB,CACA,GAAI,CACF,OAAO,IAAA,CAAK,MAAMoB,CAAG,CACvB,CAAA,MAASpB,CAAAA,CAAK,CACZ,OAAA,CAAQ,KAAA,CACN/B,CAAAA,CAAG,GAAA,CAAI,CAAA,OAAA,EAAU2B,CAAQ,CAAA,oBAAA,EAAwBI,CAAAA,CAAc,OAAO,CAAA,CAAE,CAC1E,CAAA,CACA,OAAA,CAAQ,IAAA,CAAK,CAAC,EAChB,CACF,CAEA,eAAsB0M,EAAAA,CAAoB9O,CAAAA,CAA+B,CAAA,CACnEA,CAAAA,CAAK,QAAA,CAAS,QAAQ,CAAA,EAAKA,EAAK,QAAA,CAAS,IAAI,CAAA,EAAKA,CAAAA,CAAK,MAAA,GAAW,CAAA,IACpEgD,EAAAA,EAAW,CACX,QAAQ,IAAA,CAAKhD,CAAAA,CAAK,MAAA,GAAW,CAAA,CAAI,CAAA,CAAI,CAAC,CAAA,CAAA,CAGxC,GAAM,CAAE,KAAA,CAAA+O,CAAAA,CAAO,KAAA,CAAAC,CAAAA,CAAO,IAAA,CAAA/O,CAAK,CAAA,CAAIF,EAAAA,CAAUC,CAAI,CAAA,CAAA,CACzC,CAAC+O,CAAAA,EAAS,CAACC,CAAAA,IACb,OAAA,CAAQ,KAAA,CAAM3O,CAAAA,CAAG,IAAI,gDAAgD,CAAC,CAAA,CACtE2C,EAAAA,EAAW,CACX,OAAA,CAAQ,IAAA,CAAK,CAAC,GAIhB,GAAM,CAAE,mBAAA,CAAAU,CAAAA,CAAqB,aAAA,CAAAuL,CAAc,CAAA,CAAI,MAAMrM,EACnD3C,CAAAA,CAAK,OACP,CAAA,CAGMiP,CAAAA,CAAON,EAAAA,CAAaG,CAAK,CAAA,CACzBI,CAAAA,CAAOP,GAAaI,CAAK,CAAA,CAC3BI,CAAAA,CACAC,CAAAA,CACJ,GAAI,CACFD,CAAAA,CAAM1L,CAAAA,CAAoBwL,CAAI,CAAA,CAC9BG,CAAAA,CAAM3L,CAAAA,CAAoByL,CAAI,EAChC,CAAA,MAAS/M,CAAAA,CAAK,CACZ,QAAQ,KAAA,CACN/B,CAAAA,CAAG,GAAA,CACD,CAAA,wCAAA,EAA4C+B,CAAAA,CAAc,OAAO,CAAA,CACnE,CACF,EACA,OAAA,CAAQ,IAAA,CAAK,CAAC,EAChB,CAEA,IAAMkN,CAAAA,CAAOL,CAAAA,CAAcG,EAAKC,CAAG,CAAA,CAE/BpP,CAAAA,CAAK,IAAA,GACP,OAAA,CAAQ,GAAA,CAAI,IAAA,CAAK,SAAA,CAAUqP,EAAM,IAAA,CAAM,CAAC,CAAC,CAAA,CACzC,QAAQ,IAAA,CAAKA,CAAAA,CAAK,SAAA,CAAY,CAAA,CAAI,CAAC,CAAA,CAAA,CAIjCA,CAAAA,CAAK,SAAA,GACP,OAAA,CAAQ,GAAA,CACNjP,CAAAA,CAAG,KAAA,CAAM,mBAAc,EACvB,CAAA,oBAAA,EAAuBiP,CAAAA,CAAK,WAAW,CAAA,kCAAA,CACzC,CAAA,CACA,OAAA,CAAQ,IAAA,CAAK,CAAC,GAGhB,OAAA,CAAQ,GAAA,CAAIjP,CAAAA,CAAG,IAAA,CAAK,eAAe,CAAA,CAAGA,CAAAA,CAAG,GAAA,CAAI,IAAI0O,CAAK,CAAA,IAAA,EAAOC,CAAK,CAAA,CAAA,CAAG,CAAC,CAAA,CACtE,OAAA,CAAQ,GAAA,CAAI,EAAE,CAAA,CACd,OAAA,CAAQ,GAAA,CACN,CAAA,kBAAA,EAAqBM,CAAAA,CAAK,WAAW,CAAA,QAAA,EAAMA,CAAAA,CAAK,WAAW,CAAA,GAAA,EAAMjB,CAAAA,CAAQiB,CAAAA,CAAK,eAAe,CAAC,CAAA,CAAA,CAChG,CAAA,CACA,OAAA,CAAQ,IAAI,EAAE,CAAA,CAEd,OAAA,CAAQ,GAAA,CAAIjP,CAAAA,CAAG,IAAA,CAAK,mBAAmB,CAAC,EACxC,IAAA,IAAW6F,CAAAA,IAAQoI,EAAAA,CAAcgB,CAAAA,CAAK,eAAe,CAAA,CAAG,OAAA,CAAQ,GAAA,CAAIpJ,CAAI,EACxE,OAAA,CAAQ,GAAA,CAAI,EAAE,CAAA,CAEd,OAAA,CAAQ,GAAA,CAAI7F,CAAAA,CAAG,IAAA,CAAK,YAAY,CAAC,CAAA,CACjC,IAAA,IAAW6F,CAAAA,IAAQoI,EAAAA,CAAcgB,CAAAA,CAAK,SAAS,CAAA,CAAG,QAAQ,GAAA,CAAIpJ,CAAI,CAAA,CAClE,OAAA,CAAQ,GAAA,CAAI,EAAE,CAAA,CAEd,OAAA,CAAQ,IAAI7F,CAAAA,CAAG,IAAA,CAAK,gBAAgB,CAAC,CAAA,CACrC,IAAA,IAAW6F,CAAAA,IAAQsI,EAAAA,CAAgBc,EAAK,YAAY,CAAA,CAAG,OAAA,CAAQ,GAAA,CAAIpJ,CAAI,CAAA,CACvE,OAAA,CAAQ,GAAA,CAAI,EAAE,CAAA,CAEd,OAAA,CAAQ,GAAA,CAAI7F,CAAAA,CAAG,IAAA,CAAK,aAAa,CAAC,CAAA,CAClC,QAAW6F,CAAAA,IAAQuI,EAAAA,CAAUa,CAAAA,CAAK,SAAS,CAAA,CAAG,OAAA,CAAQ,GAAA,CAAIpJ,CAAI,EAC9D,OAAA,CAAQ,GAAA,CAAI,EAAE,CAAA,CAEd,QAAQ,IAAA,CAAK,CAAC,EAChB,CC5NA,IAAMqJ,EAAAA,CAAO;AAAA,EACXtS,CAAQ,CAAA;;AAAA,OAAA,EAEDA,CAAQ,CAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA,CAAA,CAsDf,MAAK,CAEP,eAAeuS,EAAAA,EAAO,CACpB,IAAMxP,CAAAA,CAAO,OAAA,CAAQ,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA,CAOjC,GAAA,CALIA,EAAK,MAAA,GAAW,CAAA,EAAKA,EAAK,QAAA,CAAS,QAAQ,CAAA,EAAKA,CAAAA,CAAK,SAAS,IAAI,CAAA,IACpE,QAAQ,GAAA,CAAIuP,EAAI,EAChB,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,CAAA,CAGZvP,EAAK,QAAA,CAAS,WAAW,GAAKA,CAAAA,CAAK,QAAA,CAAS,IAAI,CAAA,CAAG,CACrD,GAAM,CAAE,aAAAhB,CAAa,CAAA,CAAI,MAAM,OAAO,IAAS,EACzC,CAAE,aAAA,CAAAyQ,CAAc,CAAA,CAAI,MAAM,OAAO,KAAU,EAC3C,CAAE,OAAA,CAAA3Q,EAAS,IAAA,CAAAnB,CAAK,CAAA,CAAI,aAAa,MAAW,CAAA,CAE5C+R,EAAY5Q,CAAAA,CAAQ2Q,CAAAA,CAAc,YAAY,GAAG,CAAC,CAAA,CAClDrL,CAAAA,CAAM,KAAK,KAAA,CACfpF,CAAAA,CAAarB,EAAK+R,CAAAA,CAAW,IAAA,CAAM,cAAc,CAAA,CAAG,OAAO,CAC7D,CAAA,CAEA,QAAQ,GAAA,CAAItL,CAAAA,CAAI,OAAO,CAAA,CACvB,OAAA,CAAQ,KAAK,CAAC,EAChB,CAEA,IAAMuL,EAAU3P,CAAAA,CAAK,CAAC,EAEtB,OAAQ2P,CAAAA,EACN,KAAK,MAAA,CAAQ,CACX,MAAMxE,GAAYnL,CAAAA,CAAK,KAAA,CAAM,CAAC,CAAC,CAAA,CAC/B,KACF,CAEA,KAAK,KAAA,CAAO,CACV,IAAM4P,CAAAA,CAAa5P,CAAAA,CAAK,CAAC,CAAA,CACnByC,CAAAA,CAAOzC,EAAK,CAAC,CAAA,CAEf4P,CAAAA,GAAe,QAAA,EACZnN,IACH,OAAA,CAAQ,KAAA,CAAM,oCAAoC,CAAA,CAClD,OAAA,CAAQ,KAAK,CAAC,CAAA,CAAA,CAEhB,MAAMoL,EAAAA,CAAiBpL,EAAMzC,CAAAA,CAAK,KAAA,CAAM,CAAC,CAAC,CAAA,EACjC4P,IAAe,cAAA,EACnBnN,CAAAA,GACH,OAAA,CAAQ,KAAA,CAAM,0CAA0C,CAAA,CACxD,OAAA,CAAQ,KAAK,CAAC,CAAA,CAAA,CAEhB,MAAMqL,EAAAA,CAAuBrL,CAAAA,CAAMzC,CAAAA,CAAK,KAAA,CAAM,CAAC,CAAC,CAAA,GAEhD,QAAQ,KAAA,CACN,CAAA,oBAAA,EAAuB4P,GAAc,QAAQ;AAAA,OAAA,EACjC3S,CAAQ,CAAA;AAAA,OAAA,EACRA,CAAQ,0BACtB,CAAA,CACA,OAAA,CAAQ,KAAK,CAAC,CAAA,CAAA,CAEhB,KACF,CAEA,KAAK,UAAW,CACd,MAAMmQ,GAAepN,CAAAA,CAAK,KAAA,CAAM,CAAC,CAAC,CAAA,CAClC,KACF,CAEA,KAAK,SAAA,CAAW,CACd,MAAMuH,EAAAA,CAAevH,EAAK,KAAA,CAAM,CAAC,CAAC,CAAA,CAClC,KACF,CAEA,KAAK,OAAA,CAAS,CACZ,MAAM+J,EAAAA,CAAa/J,EAAK,KAAA,CAAM,CAAC,CAAC,CAAA,CAChC,KACF,CAEA,KAAK,QAAA,CAAU,CACb,MAAMuF,EAAAA,CAAcvF,CAAAA,CAAK,MAAM,CAAC,CAAC,EACjC,KACF,CAEA,KAAK,UAAA,CAAY,CACf,IAAM4P,CAAAA,CAAa5P,CAAAA,CAAK,CAAC,CAAA,CAErB4P,CAAAA,GAAe,OACjB,MAAMxP,EAAAA,CAAeJ,CAAAA,CAAK,KAAA,CAAM,CAAC,CAAC,EACzB4P,CAAAA,GAAe,QAAA,CACxB,MAAMxO,EAAAA,CAAqBpB,CAAAA,CAAK,MAAM,CAAC,CAAC,EAC/B4P,CAAAA,GAAe,OAAA,CACxB,MAAMjO,EAAAA,CAAoB3B,CAAAA,CAAK,MAAM,CAAC,CAAC,GAEvC,OAAA,CAAQ,KAAA,CACN,CAAA,oBAAA,EAAuB4P,CAAAA,EAAc,QAAQ;AAAA,OAAA,EACjC3S,CAAQ,CAAA;AAAA,OAAA,EACRA,CAAQ,CAAA;AAAA,OAAA,EACRA,CAAQ,CAAA,eAAA,CACtB,CAAA,CACA,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,CAAA,CAEhB,KACF,CAEA,KAAK,UAAA,CAAY,CACf,IAAM2S,EAAa5P,CAAAA,CAAK,CAAC,CAAA,CAEzB,GAAI4P,CAAAA,GAAe,MAAA,CACjB,MAAMvJ,EAAAA,CAAoBrG,CAAAA,CAAK,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA,KAAA,GAC9B4P,CAAAA,GAAe,OAAQ,CAChC,IAAMnN,CAAAA,CAAOzC,CAAAA,CAAK,CAAC,CAAA,CACdyC,CAAAA,GACH,OAAA,CAAQ,KAAA,CAAM,uCAAuC,CAAA,CACrD,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,CAAA,CAEhB,MAAMwE,EAAAA,CAAoBxE,CAAAA,CAAMzC,CAAAA,CAAK,KAAA,CAAM,CAAC,CAAC,EAC/C,CAAA,KACE,OAAA,CAAQ,KAAA,CACN,CAAA,oBAAA,EAAuB4P,CAAAA,EAAc,QAAQ;AAAA,OAAA,EACjC3S,CAAQ,CAAA;AAAA,OAAA,EACRA,CAAQ,CAAA,oCAAA,CACtB,CAAA,CACA,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,CAEhB,KACF,CAEA,KAAK,QAAA,CAAU,CACb,MAAM8Q,EAAAA,CAAc/N,CAAAA,CAAK,KAAA,CAAM,CAAC,CAAC,CAAA,CACjC,KACF,CAEA,KAAK,QAAA,CAAU,CACb,MAAMsD,EAAAA,CAActD,CAAAA,CAAK,MAAM,CAAC,CAAC,CAAA,CACjC,KACF,CAEA,KAAK,WAAY,CACf,IAAM4P,CAAAA,CAAa5P,CAAAA,CAAK,CAAC,CAAA,CACrB4P,IAAe,MAAA,CACjB,MAAMd,EAAAA,CAAoB9O,CAAAA,CAAK,KAAA,CAAM,CAAC,CAAC,CAAA,EAEvC,OAAA,CAAQ,KAAA,CACN,CAAA,oBAAA,EAAuB4P,CAAAA,EAAc,QAAQ;AAAA,OAAA,EACjC3S,CAAQ,CAAA,gCAAA,CACtB,CAAA,CACA,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,CAAA,CAEhB,KACF,CAEA,QACE,OAAA,CAAQ,KAAA,CACN,oBAAoB0S,CAAO;AAAA,KAAA,EAAU1S,CAAQ,CAAA,mBAAA,CAC/C,CAAA,CACA,OAAA,CAAQ,IAAA,CAAK,CAAC,EAClB,CACF,CAEAuS,EAAAA,EAAK,CAAE,KAAA,CAAOpN,GAAQ,CACpB,OAAA,CAAQ,KAAA,CAAMA,CAAAA,CAAI,OAAA,EAAWA,CAAG,EAChC,OAAA,CAAQ,IAAA,CAAK,CAAC,EAChB,CAAC,CAAA","file":"cli.js","sourcesContent":["export const CLI_NAME = \"directive\";\nexport const CLI_ALIAS = \"dr\";\nexport const PACKAGE_NAME = \"@directive-run/cli\";\nexport const SECTION_START = \"<!-- directive:start -->\";\nexport const SECTION_END = \"<!-- directive:end -->\";\n","import { existsSync } from \"node:fs\";\nimport { join } from \"node:path\";\n\nexport interface DetectedTool {\n name: string;\n id: \"cursor\" | \"claude\" | \"copilot\" | \"windsurf\" | \"cline\";\n outputPath: string;\n}\n\nconst TOOL_SIGNALS: Array<{\n id: DetectedTool[\"id\"];\n name: string;\n signals: string[];\n outputPath: string;\n}> = [\n {\n id: \"cursor\",\n name: \"Cursor\",\n signals: [\".cursor\", \".cursorrules\"],\n outputPath: \".cursorrules\",\n },\n {\n id: \"claude\",\n name: \"Claude Code\",\n signals: [\".claude\"],\n outputPath: \".claude/CLAUDE.md\",\n },\n {\n id: \"copilot\",\n name: \"GitHub Copilot\",\n signals: [\".github\"],\n outputPath: \".github/copilot-instructions.md\",\n },\n {\n id: \"windsurf\",\n name: \"Windsurf\",\n signals: [\".windsurfrules\"],\n outputPath: \".windsurfrules\",\n },\n {\n id: \"cline\",\n name: \"Cline\",\n signals: [\".clinerules\"],\n outputPath: \".clinerules\",\n },\n];\n\nexport function detectTools(rootDir: string): DetectedTool[] {\n const detected: DetectedTool[] = [];\n\n for (const tool of TOOL_SIGNALS) {\n const hasSignal = tool.signals.some((signal) =>\n existsSync(join(rootDir, signal)),\n );\n\n if (hasSignal) {\n detected.push({\n name: tool.name,\n id: tool.id,\n outputPath: join(rootDir, tool.outputPath),\n });\n }\n }\n\n return detected;\n}\n\nexport function getToolConfig(id: DetectedTool[\"id\"]) {\n const tool = TOOL_SIGNALS.find((t) => t.id === id);\n if (!tool) {\n throw new Error(`Unknown tool: ${id}`);\n }\n\n return tool;\n}\n\nexport function getAllToolIds(): DetectedTool[\"id\"][] {\n return TOOL_SIGNALS.map((t) => t.id);\n}\n","import { SECTION_END, SECTION_START } from \"./constants.js\";\n\n/**\n * Replace the Directive section within existing content, or append it.\n * Section markers: <!-- directive:start --> ... <!-- directive:end -->\n */\nexport function mergeSection(\n existingContent: string,\n newSection: string,\n): string {\n const startIdx = existingContent.indexOf(SECTION_START);\n const endIdx = existingContent.indexOf(SECTION_END);\n\n const wrapped = `${SECTION_START}\\n${newSection}\\n${SECTION_END}`;\n\n if (startIdx !== -1 && endIdx !== -1 && endIdx > startIdx) {\n return (\n existingContent.slice(0, startIdx) +\n wrapped +\n existingContent.slice(endIdx + SECTION_END.length)\n );\n }\n\n const separator = existingContent.endsWith(\"\\n\") ? \"\\n\" : \"\\n\\n\";\n\n return existingContent + separator + wrapped + \"\\n\";\n}\n\n/**\n * Check if content already has a Directive section.\n */\nexport function hasDirectiveSection(content: string): boolean {\n return content.includes(SECTION_START) && content.includes(SECTION_END);\n}\n","import { existsSync, readFileSync } from \"node:fs\";\nimport { dirname, join, resolve } from \"node:path\";\n\nexport interface MonorepoInfo {\n isMonorepo: boolean;\n rootDir: string;\n tool?: \"pnpm\" | \"turbo\" | \"npm\" | \"yarn\";\n}\n\nconst MONOREPO_SIGNALS = [\n { file: \"pnpm-workspace.yaml\", tool: \"pnpm\" as const },\n { file: \"turbo.json\", tool: \"turbo\" as const },\n];\n\nexport function detectMonorepo(startDir: string): MonorepoInfo {\n let dir = resolve(startDir);\n\n while (dir !== dirname(dir)) {\n for (const signal of MONOREPO_SIGNALS) {\n if (existsSync(join(dir, signal.file))) {\n return { isMonorepo: true, rootDir: dir, tool: signal.tool };\n }\n }\n\n const pkgPath = join(dir, \"package.json\");\n if (existsSync(pkgPath)) {\n try {\n const pkg = JSON.parse(readFileSync(pkgPath, \"utf-8\"));\n if (pkg.workspaces) {\n const tool = existsSync(join(dir, \"yarn.lock\"))\n ? (\"yarn\" as const)\n : (\"npm\" as const);\n\n return { isMonorepo: true, rootDir: dir, tool };\n }\n } catch {\n // ignore parse errors\n }\n }\n\n dir = dirname(dir);\n }\n\n return { isMonorepo: false, rootDir: startDir };\n}\n","import { getKnowledge } from \"../lib/knowledge.js\";\n\n/**\n * Generate Claude Code rules (~30KB).\n * Strategy: Full anti-patterns + core-patterns + naming + schema-types (most critical),\n * condensed summaries for everything else.\n */\nexport function generateClaudeRules(): string {\n // These 4 files are included in full (~25KB)\n const corePatterns = getKnowledge(\"core-patterns\");\n const antiPatterns = getKnowledge(\"anti-patterns\");\n const naming = getKnowledge(\"naming\");\n const schemaTypes = getKnowledge(\"schema-types\");\n\n return `# Directive — Complete AI Coding Rules\n\n> Constraint-driven runtime for TypeScript. Declare requirements, let the runtime resolve them.\n> https://directive.run | \\`npm install @directive-run/core\\`\n> Full reference with examples: https://directive.run/llms.txt\n\n## Core Patterns\n\n${corePatterns}\n\n---\n\n## Anti-Patterns (All 36)\n\n${antiPatterns}\n\n### AI Package Anti-Patterns (21-36)\n\n| # | WRONG | CORRECT |\n|---|-------|---------|\n| 21 | TS types for factsSchema: \\`{ confidence: number }\\` | Use \\`{ confidence: t.number() }\\` |\n| 22 | \\`facts.cache.push(item)\\` in orchestrator | \\`facts.cache = [...facts.cache, item]\\` |\n| 23 | Returning data from orchestrator \\`resolve\\` | Resolvers return \\`void\\` — mutate \\`context.facts\\` |\n| 24 | Forgetting \\`orchestrator.start()\\` multi-agent | Single: implicit. Multi: must call \\`start()\\` |\n| 25 | Catching \\`Error\\` not \\`GuardrailError\\` | \\`GuardrailError\\` has \\`.guardrailName\\`, \\`.errorCode\\` |\n| 26 | \\`from '@directive-run/ai'\\` for adapters | Subpath: \\`from '@directive-run/ai/openai'\\` |\n| 27 | Assuming \\`{ input_tokens }\\` structure | Normalized: \\`{ inputTokens, outputTokens }\\` |\n| 28 | Same CircuitBreaker across agents | Create separate instances per dependency |\n| 29 | \\`budgetWarningThreshold: 1.5\\` | Must be 0-1 (percentage) |\n| 30 | \\`race\\` minSuccess > agents.length | Must be \\`1 ≤ minSuccess ≤ agents.length\\` |\n| 31 | Async summarizer with autoManage: true | Use \\`autoManage: false\\` for sync control |\n| 32 | Side effects in reflect \\`evaluator\\` | Evaluator must be pure |\n| 33 | Task calling \\`runSingleAgent\\` | Tasks can't call agents — separate node |\n| 34 | Task expecting object input | Input is always \\`string\\` — \\`JSON.parse(input)\\` |\n| 35 | Task ID same as agent ID | IDs share namespace — distinct names |\n| 36 | \\`from '@directive-run/ai/mcp'\\` | \\`from '@directive-run/ai'\\` (main export) |\n\n---\n\n## Naming Conventions\n\n${naming}\n\n---\n\n## Schema Type Builders\n\n${schemaTypes}\n\n---\n\n## Multi-Module Quick Reference\n\n\\`\\`\\`typescript\n// Two modules with cross-module dependency\nconst authSchema = { facts: { token: t.string(), isAuth: t.boolean() } };\nconst authModule = createModule(\"auth\", { schema: authSchema, /* ... */ });\n\nconst cartModule = createModule(\"cart\", {\n schema: { facts: { items: t.array<CartItem>() } },\n crossModuleDeps: { auth: authSchema }, // Declare dependency\n constraints: {\n checkout: {\n when: (facts) => facts.self.items.length > 0 && facts.auth.isAuth, // facts.self.* for own, facts.auth.* for cross\n require: () => ({ type: \"CHECKOUT\" }),\n },\n },\n // ...\n});\n\nconst system = createSystem({ modules: { auth: authModule, cart: cartModule } });\n// Access: system.facts.auth.token, system.events.cart.addItem({...})\n\\`\\`\\`\n\nKey rules:\n- \\`facts.self.*\\` for own module facts in constraints/resolvers\n- \\`facts.otherModule.*\\` for cross-module reads\n- \\`crossModuleDeps\\` must declare consumed schemas\n- \\`system.events.moduleName.eventName(payload)\\` for namespaced events\n- The \\`::\\` separator is internal — always use dot notation\n\n---\n\n## Constraints\n\n- \\`when(facts)\\` → boolean. When true, requirement is emitted.\n- \\`require(facts)\\` → \\`{ type: \"TYPE\", ...data }\\` object (never string literal)\n- \\`priority: number\\` — higher evaluated first\n- \\`after: [\"constraintName\"]\\` — ordering within same priority\n- Async: \\`async: true\\` + \\`deps: ['factName']\\` (deps REQUIRED for async)\n- Constraints DECLARE needs, resolvers FULFILL them — decoupled.\n\n---\n\n## Resolvers\n\n- \\`resolve(req, context)\\` — async, returns \\`void\\`. Mutate \\`context.facts.*\\`.\n- \\`requirement: \"TYPE\"\\` — which type this handles\n- \\`key: (req) => string\\` — deduplication key\n- \\`retry: { attempts: 3, backoff: \"exponential\", initialDelay: 100 }\\`\n- \\`batch: { maxSize: 10, windowMs: 50 }\\` for N+1 prevention\n- Always \\`await system.settle()\\` after start to wait for resolution\n\n---\n\n## System API\n\n- \\`system.facts.fieldName\\` — read/write facts\n- \\`system.derive.derivationName\\` — read derived values\n- \\`system.events.eventName(payload)\\` — dispatch events\n- \\`system.subscribe(listener)\\` — subscribe to all changes\n- \\`system.read(key)\\` — read fact or derivation by string key\n- \\`system.inspect()\\` — full state snapshot\n- \\`system.settle()\\` — wait for async operations\n- \\`system.start()\\` / \\`system.stop()\\` / \\`system.destroy()\\`\n\n---\n\n## React (\\`@directive-run/react\\`)\n\n\\`\\`\\`typescript\nimport { useSelector, useEvent } from \"@directive-run/react\";\n\nconst count = useSelector(system, (s) => s.facts.count);\nconst events = useEvent(system);\n// onClick={() => events.increment()}\n\\`\\`\\`\n\n**NO** \\`useDirective()\\` hook. Use \\`useSelector\\` + \\`useEvent\\`.\n\n---\n\n## Plugins (\\`@directive-run/core/plugins\\`)\n\n\\`devtoolsPlugin()\\`, \\`loggingPlugin()\\`, \\`persistencePlugin(config)\\`,\n\\`createCircuitBreaker(config)\\`, \\`createObservability(config)\\`\n\n---\n\n## AI Package (\\`@directive-run/ai\\`)\n\n### Single-Agent Orchestrator\n\n\\`\\`\\`typescript\nimport { createAgentOrchestrator, t } from '@directive-run/ai';\nimport { createAnthropicRunner } from '@directive-run/ai/anthropic';\n\nconst orchestrator = createAgentOrchestrator({\n runner: createAnthropicRunner({ apiKey }),\n factsSchema: { result: t.string(), confidence: t.number() },\n init: (facts) => { facts.result = \"\"; facts.confidence = 0; },\n maxTokenBudget: 100000,\n budgetWarningThreshold: 0.8,\n guardrails: { input: [...], output: [...] },\n memory: createAgentMemory({ strategy: createSlidingWindowStrategy({ maxMessages: 30 }) }),\n debug: true,\n});\n\nconst result = await orchestrator.run(agent, \"analyze this\");\n\\`\\`\\`\n\n### Multi-Agent\n\n\\`\\`\\`typescript\nimport { createMultiAgentOrchestrator, parallel, sequential, dag } from '@directive-run/ai';\n\nconst orch = createMultiAgentOrchestrator({\n agents: { researcher: agentA, writer: agentB },\n patterns: {\n pipeline: sequential([\"researcher\", \"writer\"]),\n brainstorm: parallel([\"researcher\", \"writer\"], mergeResults),\n workflow: dag([\n { id: \"research\", handler: \"researcher\" },\n { id: \"write\", handler: \"writer\", dependencies: [\"research\"] },\n ]),\n },\n runner,\n});\norch.start(); // Required for multi-agent!\n\\`\\`\\`\n\n8 patterns: \\`parallel\\`, \\`sequential\\`, \\`supervisor\\`, \\`dag\\`, \\`reflect\\`, \\`race\\`, \\`debate\\`, \\`goal\\`\n\n### Adapter Imports (Subpath!)\n\n\\`\\`\\`typescript\nimport { createAnthropicRunner } from '@directive-run/ai/anthropic';\nimport { createOpenAIRunner } from '@directive-run/ai/openai';\nimport { createOllamaRunner } from '@directive-run/ai/ollama';\nimport { createGeminiRunner } from '@directive-run/ai/gemini';\n\\`\\`\\`\n\n### Guardrails\n\n\\`createPIIGuardrail\\`, \\`createModerationGuardrail\\`, \\`createRateLimitGuardrail\\`,\n\\`createToolGuardrail\\`, \\`createOutputSchemaGuardrail\\`, \\`createLengthGuardrail\\`,\n\\`createContentFilterGuardrail\\`\n\n\\`GuardrailResult: { passed: boolean, reason?: string, transformed?: unknown }\\`\n\n### Memory\n\n\\`createAgentMemory({ strategy, summarizer?, autoManage? })\\`\nStrategies: \\`createSlidingWindowStrategy\\`, \\`createTokenBasedStrategy\\`, \\`createHybridStrategy\\`\nSummarizers: \\`createTruncationSummarizer\\`, \\`createKeyPointsSummarizer\\`, \\`createLLMSummarizer(runner)\\`\n\n### Streaming\n\n\\`\\`\\`typescript\nconst streamResult = orchestrator.runStream(agent, \"analyze\");\nfor await (const chunk of streamResult.stream) {\n switch (chunk.type) {\n case \"token\": process.stdout.write(chunk.data); break;\n case \"done\": console.log(\"Tokens:\", chunk.totalTokens); break;\n case \"error\": console.error(chunk.error); break;\n }\n}\n\\`\\`\\`\n\nBackpressure: \\`\"buffer\"\\` (default), \\`\"block\"\\`, \\`\"drop\"\\`\n`;\n}\n","/**\n * Generate Cursor rules (<10KB).\n * Handcrafted condensed content — core patterns, top 10 anti-patterns, naming, 1 mini example.\n */\nexport function generateCursorRules(): string {\n return `# Directive — AI Coding Rules\n\n> Constraint-driven runtime for TypeScript. \\`npm install @directive-run/core\\`\n> Full reference: https://directive.run/llms.txt\n\n## Schema Shape (CRITICAL)\n\n\\`\\`\\`typescript\nimport { createModule, createSystem, t } from \"@directive-run/core\";\n\nconst myModule = createModule(\"name\", {\n schema: {\n facts: { count: t.number(), items: t.array<string>() },\n derivations: { total: \"number\" },\n events: { increment: \"void\", addItem: \"string\" },\n requirements: { FETCH_DATA: { url: \"string\" } },\n },\n init: (facts) => { facts.count = 0; facts.items = []; },\n derive: {\n total: (facts) => facts.items.length + facts.count,\n },\n events: {\n increment: (facts) => { facts.count += 1; },\n addItem: (facts, item) => { facts.items = [...facts.items, item]; },\n },\n constraints: {\n fetchWhenReady: {\n when: (facts) => facts.count > 0 && facts.items.length === 0,\n require: (facts) => ({ type: \"FETCH_DATA\", url: \"/api/items\" }),\n },\n },\n resolvers: {\n fetchData: {\n requirement: \"FETCH_DATA\",\n resolve: async (req, context) => {\n const data = await fetch(req.url).then(r => r.json());\n context.facts.items = data;\n },\n },\n },\n});\n\nconst system = createSystem({ module: myModule });\nawait system.settle();\n\\`\\`\\`\n\n## Top 10 Anti-Patterns\n\n| # | WRONG | CORRECT |\n|---|-------|---------|\n| 1 | \\`facts.profile as ResourceState<Profile>\\` | Remove cast — schema provides types |\n| 2 | \\`{ phase: t.string() }\\` flat schema | \\`schema: { facts: { phase: t.string() } }\\` |\n| 3 | \\`facts.items\\` in multi-module | \\`facts.self.items\\` |\n| 4 | \\`t.map()\\`, \\`t.set()\\`, \\`t.promise()\\` | Don't exist. Use \\`t.object<Map<K,V>>()\\` |\n| 5 | \\`(req, ctx)\\` in resolver | \\`(req, context)\\` — never abbreviate |\n| 6 | \\`createModule(\"n\", { phase: t.string() })\\` | Must wrap: \\`schema: { facts: { ... } }\\` |\n| 7 | \\`system.dispatch('login', {...})\\` | \\`system.events.login({...})\\` |\n| 8 | \\`facts.items.push(item)\\` | \\`facts.items = [...facts.items, item]\\` |\n| 9 | \\`useDirective(system)\\` | \\`useSelector(system, s => s.facts.count)\\` |\n| 10 | \\`facts['auth::status']\\` | \\`facts.auth.status\\` dot notation |\n\n## Naming\n\n- \\`req\\` = requirement (not request). Parameter: \\`(req, context)\\`\n- \\`derive\\` / derivations — never \"computed\" or \"selectors\"\n- Resolvers return \\`void\\` — mutate \\`context.facts\\` instead\n- Always use braces for returns: \\`if (x) { return y; }\\`\n- Multi-module: \\`facts.self.fieldName\\` for own module facts\n- Events: \\`system.events.eventName(payload)\\` — not \\`system.dispatch()\\`\n- Import from main: \\`import { createModule } from '@directive-run/core'\\`\n\n## Schema Types That Exist\n\n\\`t.string<T>()\\`, \\`t.number()\\`, \\`t.boolean()\\`, \\`t.array<T>()\\`, \\`t.object<T>()\\`,\n\\`t.enum(\"a\",\"b\")\\`, \\`t.literal(value)\\`, \\`t.nullable(inner)\\`, \\`t.optional(inner)\\`, \\`t.union(...)\\`\n\nChainable: \\`.default()\\`, \\`.validate()\\`, \\`.transform()\\`, \\`.brand<>()\\`, \\`.refine()\\`\n\n**DO NOT USE** (hallucinations): \\`t.map()\\`, \\`t.set()\\`, \\`t.date()\\`, \\`t.tuple()\\`, \\`t.record()\\`, \\`t.promise()\\`, \\`t.any()\\`\n\n## Key Pattern: Constraint → Requirement → Resolver\n\nWhen the user wants \"do X when Y\": create THREE things:\n1. **Constraint**: \\`when: (facts) => Y_condition\\` → \\`require: { type: \"DO_X\" }\\`\n2. **Resolver**: handles \"DO_X\", calls API, sets \\`context.facts\\`\n3. They are **decoupled**. Constraint declares need, resolver fulfills it.\n`;\n}\n","import { generateCursorRules } from \"./cursor.js\";\n\n/**\n * Generate GitHub Copilot instructions (~12KB).\n * Cursor content + all 20 anti-patterns + schema types detail + AI basics.\n */\nexport function generateCopilotRules(): string {\n const base = generateCursorRules();\n\n // Add anti-patterns 11-19 that cursor doesn't include\n const extraAntiPatterns = `\n## Anti-Patterns 11-19\n\n| # | WRONG | CORRECT |\n|---|-------|---------|\n| 11 | Returning data from \\`resolve\\` | Resolvers return \\`void\\` — mutate \\`context.facts\\` |\n| 12 | Async logic in \\`init\\` | \\`init\\` is synchronous, facts assignment only |\n| 13 | \\`await system.start()\\` without settle | Add \\`await system.settle()\\` after start |\n| 14 | Missing \\`crossModuleDeps\\` | Declare \\`crossModuleDeps: { auth: authSchema }\\` |\n| 15 | \\`require: \"TYPE\"\\` string literal | \\`require: { type: \"TYPE\" }\\` object form |\n| 16 | Passthrough derivation \\`(f) => f.count\\` | Remove — read fact directly |\n| 17 | \\`from '@directive-run/core/module'\\` | \\`from '@directive-run/core'\\` (main export) |\n| 18 | \\`async when()\\` without \\`deps\\` | Add \\`deps: ['factName']\\` for async constraints |\n| 19 | No error boundary on resolver | Use try-catch or module error boundary config |\n`;\n\n // Add multi-module basics\n const multiModule = `\n## Multi-Module\n\n\\`\\`\\`typescript\nconst system = createSystem({\n modules: { auth: authModule, cart: cartModule },\n});\n\n// Access: system.facts.auth.token, system.events.cart.addItem({...})\n// In constraints/resolvers: use facts.self.* for own module\n// Declare deps: crossModuleDeps: { auth: authSchema }\n\\`\\`\\`\n`;\n\n // Add AI basics\n const aiBasics = `\n## AI Package Basics (\\`@directive-run/ai\\`)\n\n\\`\\`\\`typescript\nimport { createAgentOrchestrator, t } from '@directive-run/ai';\nimport { createAnthropicRunner } from '@directive-run/ai/anthropic'; // Subpath import!\n\nconst orchestrator = createAgentOrchestrator({\n runner: createAnthropicRunner({ apiKey: process.env.ANTHROPIC_API_KEY }),\n factsSchema: { result: t.string(), confidence: t.number() }, // Use t.*() !\n init: (facts) => { facts.result = \"\"; facts.confidence = 0; },\n});\n\nconst result = await orchestrator.run(agent, \"analyze this\");\n\\`\\`\\`\n\n**AI Anti-Patterns:**\n- Use \\`t.number()\\` not \\`number\\` for factsSchema\n- Subpath imports: \\`from '@directive-run/ai/anthropic'\\` not \\`from '@directive-run/ai'\\`\n- Token usage normalized: \\`{ inputTokens, outputTokens }\\` (not provider-specific)\n- \\`facts.cache = [...facts.cache, item]\\` not \\`facts.cache.push(item)\\`\n`;\n\n return base + extraAntiPatterns + multiModule + aiBasics;\n}\n","import { generateCopilotRules } from \"./copilot.js\";\n\n/**\n * Generate Cline rules (~12KB).\n * Same content as Copilot.\n */\nexport function generateClineRules(): string {\n return generateCopilotRules();\n}\n","import { generateCopilotRules } from \"./copilot.js\";\n\n/**\n * Generate Windsurf rules (~12KB).\n * Same content as Copilot.\n */\nexport function generateWindsurfRules(): string {\n return generateCopilotRules();\n}\n","import type { DetectedTool } from \"../lib/detect.js\";\nimport { generateClaudeRules } from \"./claude.js\";\nimport { generateClineRules } from \"./cline.js\";\nimport { generateCopilotRules } from \"./copilot.js\";\nimport { generateCursorRules } from \"./cursor.js\";\nimport { generateLlmsTxt } from \"./llms-txt.js\";\nimport { generateWindsurfRules } from \"./windsurf.js\";\n\nconst generators: Record<DetectedTool[\"id\"], () => string> = {\n cursor: generateCursorRules,\n claude: generateClaudeRules,\n copilot: generateCopilotRules,\n windsurf: generateWindsurfRules,\n cline: generateClineRules,\n};\n\nexport function getTemplate(toolId: DetectedTool[\"id\"]): string {\n const generator = generators[toolId];\n if (!generator) {\n throw new Error(`No template for tool: ${toolId}`);\n }\n\n return generator();\n}\n\nexport { generateLlmsTxt };\n","import { existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { dirname, join, relative } from \"node:path\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { CLI_NAME } from \"../lib/constants.js\";\nimport {\n type DetectedTool,\n detectTools,\n getAllToolIds,\n getToolConfig,\n} from \"../lib/detect.js\";\nimport { hasDirectiveSection, mergeSection } from \"../lib/merge.js\";\nimport { detectMonorepo } from \"../lib/monorepo.js\";\nimport { getTemplate } from \"../templates/index.js\";\n\ninterface Options {\n force: boolean;\n merge: boolean;\n tools: string[];\n dir: string;\n}\n\nfunction parseArgs(args: string[]): Options {\n const opts: Options = {\n force: false,\n merge: false,\n tools: [],\n dir: process.cwd(),\n };\n\n for (let i = 0; i < args.length; i++) {\n const arg = args[i];\n\n switch (arg) {\n case \"--force\":\n opts.force = true;\n break;\n case \"--merge\":\n opts.merge = true;\n break;\n case \"--tool\": {\n const val = args[++i];\n if (val) {\n opts.tools.push(val);\n }\n break;\n }\n case \"--dir\": {\n const val = args[++i];\n if (val) {\n opts.dir = val;\n }\n break;\n }\n }\n }\n\n return opts;\n}\n\nexport async function aiRulesCommand(args: string[]) {\n const opts = parseArgs(args);\n\n p.intro(pc.bgCyan(pc.black(\" directive ai-rules \")));\n\n // Step 1: Detect monorepo\n const mono = detectMonorepo(opts.dir);\n let targetDir = opts.dir;\n\n if (mono.isMonorepo && mono.rootDir !== opts.dir) {\n const placement = await p.select({\n message: \"Monorepo detected. Where should AI rules be installed?\",\n options: [\n {\n value: \"root\",\n label: `Monorepo root (${relative(opts.dir, mono.rootDir) || \".\"})`,\n hint: \"recommended\",\n },\n {\n value: \"workspace\",\n label: `Current workspace (${relative(mono.rootDir, opts.dir)})`,\n },\n ],\n });\n\n if (p.isCancel(placement)) {\n p.cancel(\"Cancelled.\");\n process.exit(0);\n }\n\n if (placement === \"root\") {\n targetDir = mono.rootDir;\n }\n }\n\n // Step 2: Detect or select tools\n let selectedTools: DetectedTool[];\n\n if (opts.tools.length > 0) {\n selectedTools = opts.tools.map((id) => {\n const config = getToolConfig(id as DetectedTool[\"id\"]);\n\n return {\n name: config.name,\n id: config.id,\n outputPath: join(targetDir, config.outputPath),\n };\n });\n } else {\n const detected = detectTools(targetDir);\n\n if (detected.length > 0) {\n const choices = await p.multiselect({\n message: `Detected ${detected.length} AI tool(s). Which should get Directive rules?`,\n options: detected.map((t) => ({\n value: t.id,\n label: t.name,\n hint: relative(targetDir, t.outputPath),\n })),\n initialValues: detected.map((t) => t.id),\n required: true,\n });\n\n if (p.isCancel(choices)) {\n p.cancel(\"Cancelled.\");\n process.exit(0);\n }\n\n selectedTools = (choices as DetectedTool[\"id\"][]).map((id) => {\n const config = getToolConfig(id);\n\n return {\n name: config.name,\n id: config.id,\n outputPath: join(targetDir, config.outputPath),\n };\n });\n } else {\n const choices = await p.multiselect({\n message: \"No AI tools detected. Which tools do you use?\",\n options: getAllToolIds().map((id) => {\n const config = getToolConfig(id);\n\n return { value: id, label: config.name };\n }),\n required: true,\n });\n\n if (p.isCancel(choices)) {\n p.cancel(\"Cancelled.\");\n process.exit(0);\n }\n\n selectedTools = (choices as DetectedTool[\"id\"][]).map((id) => {\n const config = getToolConfig(id);\n\n return {\n name: config.name,\n id: config.id,\n outputPath: join(targetDir, config.outputPath),\n };\n });\n }\n }\n\n if (selectedTools.length === 0) {\n p.cancel(\"No tools selected.\");\n process.exit(0);\n }\n\n // Step 3: Write files\n const s = p.spinner();\n\n for (const tool of selectedTools) {\n s.start(`Generating ${tool.name} rules...`);\n\n const content = getTemplate(tool.id);\n const filePath = tool.outputPath;\n const fileExists = existsSync(filePath);\n\n s.stop(`Generated ${tool.name} rules.`);\n\n if (fileExists && !opts.force) {\n const existingContent = readFileSync(filePath, \"utf-8\");\n\n if (opts.merge) {\n writeFile(filePath, mergeSection(existingContent, content));\n p.log.success(\n `${pc.green(\"Merged\")} Directive section into ${pc.dim(relative(targetDir, filePath))}`,\n );\n continue;\n }\n\n if (hasDirectiveSection(existingContent)) {\n const action = await p.select({\n message: `${relative(targetDir, filePath)} already has a Directive section. What should we do?`,\n options: [\n {\n value: \"merge\",\n label: \"Update Directive section only\",\n hint: \"recommended\",\n },\n { value: \"overwrite\", label: \"Overwrite entire file\" },\n { value: \"skip\", label: \"Skip this file\" },\n ],\n });\n\n if (p.isCancel(action)) {\n p.cancel(\"Cancelled.\");\n process.exit(0);\n }\n\n if (action === \"merge\") {\n writeFile(filePath, mergeSection(existingContent, content));\n p.log.success(\n `${pc.green(\"Updated\")} ${pc.dim(relative(targetDir, filePath))}`,\n );\n } else if (action === \"overwrite\") {\n writeFile(filePath, content);\n p.log.success(\n `${pc.green(\"Wrote\")} ${pc.dim(relative(targetDir, filePath))}`,\n );\n } else {\n p.log.info(`Skipped ${pc.dim(relative(targetDir, filePath))}`);\n }\n } else {\n const action = await p.select({\n message: `${relative(targetDir, filePath)} already exists. What should we do?`,\n options: [\n {\n value: \"append\",\n label: \"Append Directive section\",\n hint: \"preserves existing content\",\n },\n { value: \"overwrite\", label: \"Overwrite entire file\" },\n { value: \"skip\", label: \"Skip this file\" },\n ],\n });\n\n if (p.isCancel(action)) {\n p.cancel(\"Cancelled.\");\n process.exit(0);\n }\n\n if (action === \"append\") {\n writeFile(filePath, mergeSection(existingContent, content));\n p.log.success(\n `${pc.green(\"Appended\")} to ${pc.dim(relative(targetDir, filePath))}`,\n );\n } else if (action === \"overwrite\") {\n writeFile(filePath, content);\n p.log.success(\n `${pc.green(\"Wrote\")} ${pc.dim(relative(targetDir, filePath))}`,\n );\n } else {\n p.log.info(`Skipped ${pc.dim(relative(targetDir, filePath))}`);\n }\n }\n } else {\n writeFile(filePath, content);\n p.log.success(\n `${pc.green(\"Created\")} ${pc.dim(relative(targetDir, filePath))}`,\n );\n }\n }\n\n p.outro(\n `Done! Run ${pc.cyan(`${CLI_NAME} ai-rules init --merge`)} anytime to update.`,\n );\n}\n\nfunction writeFile(filePath: string, content: string) {\n const dir = dirname(filePath);\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true });\n }\n\n writeFileSync(filePath, content, \"utf-8\");\n}\n\n// ---------------------------------------------------------------------------\n// ai-rules update — regenerate all existing rule files\n// ---------------------------------------------------------------------------\n\nexport async function aiRulesUpdateCommand(args: string[]) {\n const opts = parseArgs(args);\n const targetDir = opts.dir;\n\n const ruleFiles: Array<{ id: DetectedTool[\"id\"]; path: string }> = [\n { id: \"cursor\", path: join(targetDir, \".cursorrules\") },\n { id: \"claude\", path: join(targetDir, \".claude/CLAUDE.md\") },\n { id: \"copilot\", path: join(targetDir, \".github/copilot-instructions.md\") },\n { id: \"windsurf\", path: join(targetDir, \".windsurfrules\") },\n { id: \"cline\", path: join(targetDir, \".clinerules\") },\n ];\n\n let updated = 0;\n\n for (const file of ruleFiles) {\n if (!existsSync(file.path)) {\n continue;\n }\n\n const existing = readFileSync(file.path, \"utf-8\");\n if (!hasDirectiveSection(existing)) {\n continue;\n }\n\n const newContent = getTemplate(file.id);\n const merged = mergeSection(existing, newContent);\n\n writeFile(file.path, merged);\n console.log(\n `${pc.green(\"Updated\")} ${pc.dim(relative(targetDir, file.path))}`,\n );\n updated++;\n }\n\n if (updated === 0) {\n console.log(\n pc.dim(\n `No existing rule files found. Run ${pc.cyan(`${CLI_NAME} ai-rules init`)} first.`,\n ),\n );\n } else {\n console.log(\n pc.green(`\\nUpdated ${updated} file(s) to latest knowledge version.`),\n );\n }\n}\n\n// ---------------------------------------------------------------------------\n// ai-rules check — exit non-zero if rules are stale (CI-friendly)\n// ---------------------------------------------------------------------------\n\nexport async function aiRulesCheckCommand(args: string[]) {\n const opts = parseArgs(args);\n const targetDir = opts.dir;\n\n const ruleFiles: Array<{\n id: DetectedTool[\"id\"];\n path: string;\n name: string;\n }> = [\n { id: \"cursor\", path: join(targetDir, \".cursorrules\"), name: \"Cursor\" },\n {\n id: \"claude\",\n path: join(targetDir, \".claude/CLAUDE.md\"),\n name: \"Claude Code\",\n },\n {\n id: \"copilot\",\n path: join(targetDir, \".github/copilot-instructions.md\"),\n name: \"GitHub Copilot\",\n },\n {\n id: \"windsurf\",\n path: join(targetDir, \".windsurfrules\"),\n name: \"Windsurf\",\n },\n { id: \"cline\", path: join(targetDir, \".clinerules\"), name: \"Cline\" },\n ];\n\n let checked = 0;\n let stale = 0;\n\n for (const file of ruleFiles) {\n if (!existsSync(file.path)) {\n continue;\n }\n\n const existing = readFileSync(file.path, \"utf-8\");\n if (!hasDirectiveSection(existing)) {\n continue;\n }\n\n checked++;\n\n // Generate fresh content and merge, then compare\n const freshContent = getTemplate(file.id);\n const merged = mergeSection(existing, freshContent);\n\n if (merged !== existing) {\n console.log(\n `${pc.red(\"✗\")} ${file.name} rules are ${pc.yellow(\"stale\")}`,\n );\n stale++;\n } else {\n console.log(\n `${pc.green(\"✓\")} ${file.name} rules are ${pc.green(\"current\")}`,\n );\n }\n }\n\n if (checked === 0) {\n console.log(pc.dim(\"No rule files found to check.\"));\n\n return;\n }\n\n if (stale > 0) {\n console.log(\n `\\n${pc.yellow(`${stale} file(s) are stale.`)} Run ${pc.cyan(`${CLI_NAME} ai-rules update`)} to refresh.`,\n );\n process.exit(1);\n } else {\n console.log(pc.green(\"\\nAll rule files are current.\"));\n }\n}\n","import { existsSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport pc from \"picocolors\";\n\n/**\n * Loads a Directive system from a user's TypeScript file.\n *\n * Uses tsx to handle TypeScript imports. Looks for:\n * 1. Default export of a System instance\n * 2. Named \"system\" export\n *\n * Returns the live System object for inspection/explain/graph commands.\n *\n * Note: Returns `any` intentionally — the loaded module is user code with\n * unknown types. Duck-type validation via `isSystem()` ensures the returned\n * object has the required shape (start, stop, inspect, facts).\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport async function loadSystem(filePath: string): Promise<any> {\n const resolved = resolve(filePath);\n\n if (!existsSync(resolved)) {\n throw new Error(`File not found: ${resolved}`);\n }\n\n // Use tsx register to handle TypeScript imports\n try {\n // Dynamic import with tsx — tsx must be available\n const mod = await import(resolved);\n\n // Look for default export first\n if (mod.default && isSystem(mod.default)) {\n return mod.default;\n }\n\n // Look for named \"system\" export\n if (mod.system && isSystem(mod.system)) {\n return mod.system;\n }\n\n // Look for any export that looks like a System\n for (const key of Object.keys(mod)) {\n if (isSystem(mod[key])) {\n return mod[key];\n }\n }\n\n throw new Error(\n `No Directive system found in ${pc.dim(filePath)}\\n` +\n `Export a system as default or named \"system\":\\n\\n` +\n ` ${pc.cyan(\"export default\")} createSystem({ module: myModule });\\n` +\n ` ${pc.cyan(\"export const system\")} = createSystem({ module: myModule });`,\n );\n } catch (err) {\n if (err instanceof Error && err.message.includes(\"No Directive system\")) {\n throw err;\n }\n\n throw new Error(\n `Failed to load ${pc.dim(filePath)}: ${err instanceof Error ? err.message : String(err)}\\n\\n` +\n `Make sure the file is valid TypeScript and tsx is installed:\\n` +\n ` ${pc.cyan(\"npm install -D tsx\")}`,\n );\n }\n}\n\n/**\n * Duck-type check for a Directive System object.\n */\nfunction isSystem(obj: unknown): boolean {\n if (typeof obj !== \"object\" || obj === null) {\n return false;\n }\n\n const sys = obj as Record<string, unknown>;\n\n return (\n typeof sys.inspect === \"function\" &&\n typeof sys.start === \"function\" &&\n typeof sys.stop === \"function\" &&\n \"facts\" in sys\n );\n}\n\n/**\n * Loads a Directive system *factory* from a user's TypeScript file.\n *\n * Where {@link loadSystem} returns a one-shot started system instance,\n * `loadSystemFactory()` returns a callable that produces a fresh,\n * started system on every invocation. This is the contract that\n * `directive bisect` needs — each midpoint replay must start from the\n * same hermetic initial state, so we re-instantiate per attempt.\n *\n * Lookup order (first match wins):\n * 1. Named export `createSystem` (function).\n * 2. Named export `systemFactory` (function).\n * 3. Default export, if it's a function.\n *\n * The factory may return either a System directly or a Promise<System>.\n * Whatever it returns must satisfy {@link isSystem}'s duck-type\n * (`inspect`/`start`/`stop`/`facts`). The factory is responsible for\n * calling `start()` itself — the bisect runner does NOT call start.\n *\n * @example\n * ```ts\n * // User's bisect-system.ts:\n * import { createSystem as makeSys } from \"@directive-run/core\";\n * import { counterModule } from \"./modules/counter\";\n *\n * export function createSystem() {\n * const sys = makeSys({ module: counterModule });\n * sys.start();\n * return sys;\n * }\n * ```\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport async function loadSystemFactory(\n filePath: string,\n): Promise<() => Promise<any>> {\n const resolved = resolve(filePath);\n\n if (!existsSync(resolved)) {\n throw new Error(`File not found: ${resolved}`);\n }\n\n let mod: Record<string, unknown>;\n try {\n mod = (await import(resolved)) as Record<string, unknown>;\n } catch (err) {\n throw new Error(\n `Failed to load ${pc.dim(filePath)}: ${err instanceof Error ? err.message : String(err)}\\n\\n` +\n `Make sure the file is valid TypeScript and tsx is installed:\\n` +\n ` ${pc.cyan(\"npm install -D tsx\")}`,\n );\n }\n\n const candidates: Array<[string, unknown]> = [\n [\"createSystem\", mod.createSystem],\n [\"systemFactory\", mod.systemFactory],\n [\"default\", mod.default],\n ];\n\n for (const [name, candidate] of candidates) {\n if (typeof candidate === \"function\") {\n // Wrap so we always return a Promise and validate the result\n // shape after each call (catches \"factory exists but returns\n // junk\" — common when the user forgets to call sys.start()).\n return async () => {\n const result = await Promise.resolve((candidate as () => unknown)());\n if (!isSystem(result)) {\n throw new Error(\n `Factory '${name}' from ${pc.dim(filePath)} returned a value that is not a started Directive system.\\n` +\n `Expected an object with inspect/start/stop/facts. The factory must call sys.start() before returning.`,\n );\n }\n return result;\n };\n }\n }\n\n // R5 DX C4: detect the most common confusion — user passed a file\n // that exports a STARTED system (the shape `directive replay` wants)\n // and got a confusing \"no factory\" error. Surface a targeted message\n // explaining how to wrap it.\n const hasStartedInstance =\n isSystem(mod.default) ||\n isSystem(mod.system) ||\n Object.values(mod).some(isSystem);\n\n if (hasStartedInstance) {\n throw new Error(\n `Found a started Directive system in ${pc.dim(filePath)}, but bisect needs a factory.\\n` +\n `Bisect instantiates a fresh system for every midpoint replay (so each attempt is hermetic),\\n` +\n `which means it can't reuse a singleton instance the way ${pc.cyan(\"directive replay\")} does.\\n\\n` +\n `Wrap the existing export in a function:\\n\\n` +\n ` ${pc.cyan(\"export function createSystem()\")} {\\n` +\n ` const sys = createSystem({ module: yourModule });\\n` +\n ` sys.start();\\n` +\n ` return sys;\\n` +\n ` }`,\n );\n }\n\n throw new Error(\n `No system factory found in ${pc.dim(filePath)}\\n` +\n `Bisect needs to instantiate a fresh system per midpoint replay. Export one of:\\n\\n` +\n ` ${pc.cyan(\"export function createSystem()\")} { ... return sys; }\\n` +\n ` ${pc.cyan(\"export const systemFactory\")} = () => { ... return sys; };\\n` +\n ` ${pc.cyan(\"export default\")} () => { ... return sys; };\\n\\n` +\n `The factory MUST call sys.start() and return the started system.\\n` +\n `(Did you forget ${pc.cyan(\"sys.start()\")} before returning?)`,\n );\n}\n","/**\n * Shared lazy-import helper for `@directive-run/timeline`. Three CLI\n * commands (`replay`, `bisect`, `timeline diff`) all need to load\n * timeline at runtime as an optional peer — without this helper each\n * command duplicates the same try/catch + error message.\n *\n * `import type` at the top is fully erased at compile time, so the\n * lazy `await import()` semantics are preserved exactly: timeline\n * stays an optional peer, the CLI runs without it for non-timeline\n * commands, and the typed module shape is still single-sourced.\n *\n * (R5 arch C2 + arch M2.)\n */\n\nimport pc from \"picocolors\";\n\n// eslint-disable-next-line @typescript-eslint/consistent-type-imports\nimport type * as Timeline from \"@directive-run/timeline\";\n\nexport type TimelineModule = typeof Timeline;\n\n/**\n * Load `@directive-run/timeline` lazily. On failure, prints a clear\n * install-prompt error and exits with code 1.\n *\n * @param verbose — when true, also prints the underlying require/import\n * error to stderr for debugging.\n */\nexport async function loadTimelinePackage(\n verbose = false,\n): Promise<TimelineModule> {\n try {\n return (await import(\"@directive-run/timeline\")) as TimelineModule;\n } catch (err) {\n console.error(\n pc.red(\n `error: @directive-run/timeline not installed in this project.\\n Install it: npm install --save-dev @directive-run/timeline`,\n ),\n );\n if (verbose) console.error(pc.dim((err as Error).message));\n process.exit(1);\n }\n}\n","/**\n * `directive bisect <timeline.json> --system <factory.ts> --assert <expr>`\n *\n * Git-bisect, but over recorded timeline frames. Pairs with\n * `@directive-run/timeline`'s `serializeTimeline()` + `bisectTimeline()`\n * — typical flow:\n *\n * 1. Production captures a timeline that ends in a known-bad state.\n * 2. Engineer downloads the JSON, picks a JS expression that\n * distinguishes the good state from the bad state (e.g.\n * `facts.count >= 0`).\n * 3. Run:\n * directive bisect bug-1234.json \\\n * --system test/bisect-system.ts \\\n * --assert 'facts.count >= 0'\n * 4. CLI binary-searches the frame stream and prints the first\n * frame whose inclusion flips the assertion to false.\n *\n * --system contract\n * The user's TypeScript file must export a factory: a callable\n * returning a freshly-instantiated, started Directive system. Bisect\n * calls the factory once per midpoint replay so each attempt is\n * hermetic. See `loadSystemFactory()` for the exact lookup rules.\n *\n * --assert contract\n * The expression is evaluated as a JS Function body with `facts` and\n * `system` in scope. Returning a truthy value means \"this prefix is\n * in the GOOD region of the search\"; falsy means \"this prefix is in\n * the BAD region.\" Bisect locates the smallest prefix in the BAD\n * region.\n *\n * --assert 'facts.count >= 0' // good: count never negative\n * --assert 'facts.status !== \"error\"' // good: status not error\n * --assert 'system.inspect().errors.length === 0' // good: no errors\n *\n * The expression runs LOCALLY in the CLI process — there's no\n * sandbox. Don't pass arbitrary strings from untrusted callers.\n *\n * v0.1 scope:\n * - Single-timeline bisect (no good.json/bad.json comparison yet).\n * - String --assert expression (no `--assert-file` to load a vitest\n * yet; that's R2.D territory).\n * - Reports first failing frame index + reconstructs the dispatch\n * payload for human readability.\n *\n * v0.2 (deferred):\n * - `directive bisect --good <good.json> --bad <bad.json>` — diff\n * two timelines and bisect the delta.\n * - `--assert-file <vitest.ts>` — run a real test as the oracle.\n * - `--git-bisect` — emit a bisect-run script.\n */\n\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport pc from \"picocolors\";\nimport { loadSystemFactory } from \"../lib/loader.js\";\nimport { loadTimelinePackage } from \"../lib/timeline-loader.js\";\n\ninterface BisectCliOptions {\n systemPath?: string;\n assertExpr?: string;\n maxFrames?: number;\n noDeterminismCheck: boolean;\n json: boolean;\n verbose: boolean;\n}\n\nfunction parseArgs(args: string[]): {\n jsonPath: string;\n opts: BisectCliOptions;\n} {\n const opts: BisectCliOptions = {\n json: false,\n noDeterminismCheck: false,\n verbose: false,\n };\n let jsonPath = \"\";\n\n for (let i = 0; i < args.length; i++) {\n const arg = args[i];\n switch (arg) {\n case \"--system\":\n case \"-s\": {\n const val = args[++i];\n if (val) opts.systemPath = val;\n break;\n }\n case \"--assert\":\n case \"-a\": {\n const val = args[++i];\n if (val) opts.assertExpr = val;\n break;\n }\n case \"--max-frames\": {\n const val = args[++i];\n const n = val ? Number.parseInt(val, 10) : Number.NaN;\n if (Number.isFinite(n) && n > 0) opts.maxFrames = n;\n break;\n }\n case \"--no-determinism-check\":\n opts.noDeterminismCheck = true;\n break;\n case \"--json\":\n opts.json = true;\n break;\n case \"--verbose\":\n case \"-v\":\n opts.verbose = true;\n break;\n default:\n if (arg && !arg.startsWith(\"-\") && !jsonPath) {\n jsonPath = arg;\n }\n }\n }\n\n return { jsonPath, opts };\n}\n\nfunction printUsage(): void {\n console.error(`\nUsage: directive bisect <timeline.json> --system <factory.ts> --assert <expr>\n\nBinary-search a recorded timeline for the first frame that triggers a\nfailing assertion — git-bisect, but over ObservationEvent frames.\n\nArguments:\n <timeline.json> Path to a timeline produced by serializeTimeline()\n\nOptions:\n --system, -s <path> TypeScript file exporting a system factory\n (createSystem / systemFactory / default).\n The factory must return a started Directive\n system; bisect calls it once per midpoint.\n --assert, -a <expression> JS expression with 'facts' and 'system' in\n scope. Truthy = good prefix, falsy = bad\n prefix. Bisect finds the smallest bad prefix.\n --max-frames <n> Per-replay frame cap (default 100,000)\n --no-determinism-check Skip the \"replay-twice and compare\" gate\n before bisecting. Use only on timelines you\n know are deterministic.\n --json Emit BisectResult as JSON\n --verbose, -v Print every midpoint and its verdict\n --help, -h Show this help\n\nSECURITY: --assert is evaluated as JavaScript in this process. Only\npass expressions from sources you trust (your own scripts, your own\nPRs). Don't paste expressions from issues, untrusted Slack messages,\nor third-party sources without reading them first.\n\nExamples:\n directive bisect bug-1234.json --system test/bisect-sys.ts \\\\\n --assert 'facts.count >= 0'\n\n directive bisect crash.json -s factory.ts -a 'facts.status !== \"error\"' --json\n`);\n}\n\n/**\n * Build a user-supplied JS expression into a callable oracle that\n * returns boolean. Accepts `facts` and `system` as the only in-scope\n * names. Throws at parse time if the expression is malformed.\n *\n * Important: this evaluates user-supplied JS in the CLI process. The\n * CLI is a local-trust tool (operator runs it on their own machine\n * with their own input), so this is acceptable. Do NOT relay this\n * surface to a server-side context.\n */\nfunction compileAssertion(expr: string): (system: unknown) => boolean {\n let fn: (facts: unknown, system: unknown) => unknown;\n try {\n // Function constructor is intentional: the assertion expression\n // needs lexical scope of `facts` + `system` as variables.\n fn = new Function(\"facts\", \"system\", `\"use strict\"; return (${expr});`) as (\n facts: unknown,\n system: unknown,\n ) => unknown;\n } catch (err) {\n throw new Error(\n `Failed to compile --assert expression: ${(err as Error).message}\\n expression: ${expr}`,\n );\n }\n return (system: unknown) => {\n const facts = (system as { facts?: unknown })?.facts;\n const result = fn(facts, system);\n return Boolean(result);\n };\n}\n\nexport async function bisectCommand(args: string[]): Promise<void> {\n if (args.includes(\"--help\") || args.includes(\"-h\") || args.length === 0) {\n printUsage();\n process.exit(args.length === 0 ? 1 : 0);\n }\n\n const { jsonPath, opts } = parseArgs(args);\n\n if (!jsonPath) {\n console.error(pc.red(\"error: missing <timeline.json> argument\"));\n printUsage();\n process.exit(1);\n }\n if (!opts.systemPath) {\n console.error(\n pc.red(\"error: --system <path> is required\"),\n pc.dim(\n \"\\n (bisect needs a factory to instantiate a fresh system per midpoint)\",\n ),\n );\n printUsage();\n process.exit(1);\n }\n if (!opts.assertExpr) {\n console.error(\n pc.red(\"error: --assert <expression> is required\"),\n pc.dim(\n \"\\n (assertion distinguishes 'good' from 'bad' system state)\",\n ),\n );\n printUsage();\n process.exit(1);\n }\n\n // Load the timeline JSON.\n const resolvedJson = resolve(jsonPath);\n if (!existsSync(resolvedJson)) {\n console.error(pc.red(`error: timeline file not found: ${resolvedJson}`));\n process.exit(1);\n }\n\n let raw: string;\n try {\n raw = readFileSync(resolvedJson, \"utf8\");\n } catch (err) {\n console.error(\n pc.red(\n `error: failed to read ${resolvedJson}: ${(err as Error).message}`,\n ),\n );\n process.exit(1);\n }\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw);\n } catch (err) {\n console.error(\n pc.red(\n `error: ${resolvedJson} is not valid JSON: ${(err as Error).message}`,\n ),\n );\n process.exit(1);\n }\n\n // Lazy-import the timeline package — optional peer. Types come\n // from `import type` inside the helper, so we get full type safety\n // without forcing timeline into the install graph for non-timeline\n // CLI commands.\n const { deserializeTimeline, bisectTimeline } = await loadTimelinePackage(\n opts.verbose,\n );\n\n // Validate + deserialize.\n let timeline: ReturnType<typeof deserializeTimeline>;\n try {\n timeline = deserializeTimeline(parsed);\n } catch (err) {\n console.error(\n pc.red(\n `error: timeline JSON failed validation: ${(err as Error).message}`,\n ),\n );\n process.exit(1);\n }\n\n // Compile the assertion before any replay so a malformed expression\n // fails fast with a clear message instead of after a minute of work.\n let assertion: (system: unknown) => boolean;\n try {\n assertion = compileAssertion(opts.assertExpr);\n } catch (err) {\n console.error(pc.red(`error: ${(err as Error).message}`));\n process.exit(1);\n }\n\n // Load the user's factory.\n let factory: () => Promise<unknown>;\n try {\n factory = await loadSystemFactory(opts.systemPath);\n } catch (err) {\n console.error(\n pc.red(`error: failed to load system factory: ${(err as Error).message}`),\n );\n process.exit(1);\n }\n\n if (opts.verbose) {\n console.error(\n pc.dim(\n `bisecting ${timeline.frames.length} frames with assertion: ${opts.assertExpr}`,\n ),\n );\n }\n\n // Run bisect. The factory's return is verified at runtime by\n // loadSystemFactory() to be a started Directive system (which\n // satisfies ReplayableSystem's `dispatch` requirement); the cast\n // here just bridges loadSystemFactory's `any` return to bisect's\n // typed factory shape.\n const result = await bisectTimeline(\n timeline,\n factory as () => Promise<{\n dispatch: (event: { type: string; [key: string]: unknown }) => void;\n }>,\n assertion,\n {\n maxFrames: opts.maxFrames,\n determinismCheck: !opts.noDeterminismCheck,\n },\n );\n\n if (opts.json) {\n // Strip the heavy frame object from JSON output — the index alone\n // is enough for tooling, and the full frame would double the\n // payload size for callers that just want to pipe into jq.\n // R5 sec #9: emit `null` (not `undefined`) for absent index so jq\n // consumers can distinguish \"fails before frame 0\" (index=null,\n // failsOnEmptyReplay=true) from \"frame 0 itself triggers\"\n // (index=0, failsOnEmptyReplay=false). JSON.stringify drops\n // `undefined` keys which made these states indistinguishable.\n const lean = {\n firstFailingFrameIndex: result.firstFailingFrameIndex ?? null,\n iterations: result.iterations,\n noFailureFound: result.noFailureFound,\n failsOnEmptyReplay: result.failsOnEmptyReplay,\n nonDeterministic: result.nonDeterministic,\n };\n console.log(JSON.stringify(lean, null, 2));\n process.exit(0);\n }\n\n // Human-friendly output.\n if (result.nonDeterministic) {\n console.error(pc.red(\"✗ bisect aborted: timeline is non-deterministic\"));\n console.error(\n pc.dim(\n ` Two full-timeline replays produced different oracle verdicts.\\n` +\n ` Bisection is unreliable on non-deterministic timelines.\\n` +\n ` Either fix the timeline source (deterministic clocks/seeds)\\n` +\n ` or re-run with --no-determinism-check if you accept the risk.`,\n ),\n );\n process.exit(2);\n }\n if (result.noFailureFound) {\n console.error(\n pc.yellow(\n \"⚠ no failure to bisect: assertion passes on the full timeline\",\n ),\n );\n console.error(\n pc.dim(\n ` The recorded timeline does not exhibit the bug your\\n` +\n ` --assert expression checks. Verify the assertion or\\n` +\n ` try a different bad.json.`,\n ),\n );\n process.exit(0);\n }\n if (result.failsOnEmptyReplay) {\n console.error(\n pc.yellow(\n \"⚠ assertion fails BEFORE any frame replays — bug is in initialization\",\n ),\n );\n console.error(\n pc.dim(\n ` The freshly-started system already violates the assertion.\\n` +\n ` Bisect cannot narrow further. Inspect the system factory\\n` +\n ` or initial fact values.`,\n ),\n );\n process.exit(0);\n }\n\n // Standard hit.\n const idx = result.firstFailingFrameIndex ?? -1;\n const frame = result.firstFailingFrame;\n const eventType = frame?.event.type ?? \"<unknown>\";\n console.log(\n `${pc.green(\"✓\")} bisect complete: ${pc.bold(`first failing frame is #${idx}`)} ${pc.dim(`(${eventType})`)}`,\n );\n console.log(\n pc.dim(\n ` • iterations: ${result.iterations} | timeline frames: ${timeline.frames.length}`,\n ),\n );\n if (opts.verbose && frame) {\n console.log(pc.dim(\" • frame:\"));\n console.log(\n pc.dim(\n ` ${JSON.stringify(frame, null, 2).split(\"\\n\").join(\"\\n \")}`,\n ),\n );\n }\n // R5 DX M3: align with `directive timeline diff` and the rest of\n // the CLI's exit-code convention. A \"standard hit\" means we LOCATED\n // a failing frame — the user's original premise (bad.json fails)\n // is now confirmed. CI gates can branch on `directive bisect && echo OK`\n // to mean \"the timeline is clean.\"\n // 0 — nothing wrong (noFailureFound / failsOnEmptyReplay handled above)\n // 1 — CLI argument / file / module error (handled above)\n // 2 — problem found (this branch) OR refused to bisect (nonDeterministic, above)\n process.exit(2);\n}\n","import { existsSync, readFileSync, readdirSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport pc from \"picocolors\";\nimport { hasDirectiveSection } from \"../lib/merge.js\";\n\ninterface DoctorOptions {\n dir: string;\n}\n\nfunction parseArgs(args: string[]): DoctorOptions {\n const opts: DoctorOptions = { dir: process.cwd() };\n\n for (let i = 0; i < args.length; i++) {\n if (args[i] === \"--dir\") {\n const val = args[++i];\n if (val) {\n opts.dir = val;\n }\n }\n }\n\n return opts;\n}\n\n// ---------------------------------------------------------------------------\n// Checks\n// ---------------------------------------------------------------------------\n\ninterface CheckResult {\n label: string;\n passed: boolean;\n message: string;\n fix?: string;\n}\n\nfunction checkCoreInstalled(dir: string): CheckResult {\n const pkgPath = join(dir, \"package.json\");\n if (!existsSync(pkgPath)) {\n return {\n label: \"@directive-run/core installed\",\n passed: false,\n message: \"No package.json found\",\n fix: \"Run `npm init` to create a package.json\",\n };\n }\n\n const pkg = JSON.parse(readFileSync(pkgPath, \"utf-8\"));\n const deps = { ...pkg.dependencies, ...pkg.devDependencies };\n\n if (!deps[\"@directive-run/core\"]) {\n return {\n label: \"@directive-run/core installed\",\n passed: false,\n message: \"Not found in dependencies\",\n fix: \"Run `npm install @directive-run/core`\",\n };\n }\n\n return {\n label: \"@directive-run/core installed\",\n passed: true,\n message: `v${deps[\"@directive-run/core\"]}`,\n };\n}\n\nfunction checkVersionCompatibility(dir: string): CheckResult {\n const pkgPath = join(dir, \"package.json\");\n if (!existsSync(pkgPath)) {\n return {\n label: \"Package version compatibility\",\n passed: true,\n message: \"Skipped (no package.json)\",\n };\n }\n\n const pkg = JSON.parse(readFileSync(pkgPath, \"utf-8\"));\n const deps = { ...pkg.dependencies, ...pkg.devDependencies };\n\n const directivePackages = Object.keys(deps).filter((k) =>\n k.startsWith(\"@directive-run/\"),\n );\n\n if (directivePackages.length <= 1) {\n return {\n label: \"Package version compatibility\",\n passed: true,\n message:\n directivePackages.length === 0 ? \"No packages found\" : \"Single package\",\n };\n }\n\n return {\n label: \"Package version compatibility\",\n passed: true,\n message: `${directivePackages.length} packages: ${directivePackages.join(\", \")}`,\n };\n}\n\nfunction checkTypeScript(dir: string): CheckResult {\n const tsconfigPath = join(dir, \"tsconfig.json\");\n\n if (!existsSync(tsconfigPath)) {\n return {\n label: \"TypeScript configuration\",\n passed: false,\n message: \"No tsconfig.json found\",\n fix: \"Run `tsc --init` to create a TypeScript configuration\",\n };\n }\n\n try {\n // Simple JSON parse — doesn't handle comments or extends\n const raw = readFileSync(tsconfigPath, \"utf-8\");\n // Strip single-line comments for parsing\n const stripped = raw\n .replace(/\\/\\/.*$/gm, \"\")\n .replace(/\\/\\*[\\s\\S]*?\\*\\//g, \"\");\n const config = JSON.parse(stripped);\n const co = config.compilerOptions || {};\n\n const issues: string[] = [];\n\n if (co.strict !== true) {\n issues.push(\"strict mode not enabled\");\n }\n\n if (\n co.moduleResolution &&\n ![\"bundler\", \"nodenext\", \"node16\"].includes(\n co.moduleResolution.toLowerCase(),\n )\n ) {\n issues.push(`moduleResolution is \"${co.moduleResolution}\"`);\n }\n\n if (issues.length > 0) {\n return {\n label: \"TypeScript configuration\",\n passed: false,\n message: issues.join(\", \"),\n fix: 'Set \"strict\": true and \"moduleResolution\": \"bundler\" in tsconfig.json',\n };\n }\n\n return {\n label: \"TypeScript configuration\",\n passed: true,\n message: \"strict mode, correct module resolution\",\n };\n } catch {\n return {\n label: \"TypeScript configuration\",\n passed: true,\n message: \"Found (could not parse for detailed checks)\",\n };\n }\n}\n\nfunction checkDuplicateInstances(dir: string): CheckResult {\n const nodeModules = join(dir, \"node_modules\");\n\n if (!existsSync(nodeModules)) {\n return {\n label: \"No duplicate Directive instances\",\n passed: true,\n message: \"No node_modules found\",\n };\n }\n\n const duplicates: string[] = [];\n\n // Check for nested @directive-run/core in node_modules\n try {\n const scopeDir = join(nodeModules, \"@directive-run\");\n if (existsSync(scopeDir)) {\n const packages = readdirSync(scopeDir);\n for (const pkg of packages) {\n const nestedCore = join(\n scopeDir,\n pkg,\n \"node_modules\",\n \"@directive-run\",\n \"core\",\n );\n if (existsSync(nestedCore)) {\n duplicates.push(\n `@directive-run/${pkg}/node_modules/@directive-run/core`,\n );\n }\n }\n }\n } catch {\n // Can't read node_modules, skip\n }\n\n if (duplicates.length > 0) {\n return {\n label: \"No duplicate Directive instances\",\n passed: false,\n message: `Found ${duplicates.length} duplicate(s): ${duplicates.join(\", \")}`,\n fix: \"Run `npm dedupe` or check for version mismatches\",\n };\n }\n\n return {\n label: \"No duplicate Directive instances\",\n passed: true,\n message: \"No duplicates detected\",\n };\n}\n\nfunction checkAIRulesFreshness(dir: string): CheckResult {\n const ruleFiles = [\n \".cursorrules\",\n \".claude/CLAUDE.md\",\n \".github/copilot-instructions.md\",\n \".windsurfrules\",\n \".clinerules\",\n ];\n\n const found: string[] = [];\n\n for (const file of ruleFiles) {\n const filePath = join(dir, file);\n if (existsSync(filePath)) {\n const content = readFileSync(filePath, \"utf-8\");\n if (hasDirectiveSection(content)) {\n found.push(file);\n }\n }\n }\n\n if (found.length === 0) {\n return {\n label: \"AI coding rules\",\n passed: true,\n message: \"Not installed (optional)\",\n };\n }\n\n return {\n label: \"AI coding rules\",\n passed: true,\n message: `Installed for: ${found.join(\", \")}`,\n };\n}\n\n// ---------------------------------------------------------------------------\n// Command\n// ---------------------------------------------------------------------------\n\nexport async function doctorCommand(args: string[]) {\n const opts = parseArgs(args);\n\n console.log();\n console.log(pc.bold(pc.cyan(\"Directive Doctor\")));\n console.log(pc.dim(\"─\".repeat(40)));\n console.log();\n\n const checks = [\n checkCoreInstalled(opts.dir),\n checkVersionCompatibility(opts.dir),\n checkTypeScript(opts.dir),\n checkDuplicateInstances(opts.dir),\n checkAIRulesFreshness(opts.dir),\n ];\n\n let failures = 0;\n\n for (const check of checks) {\n const icon = check.passed ? pc.green(\"✓\") : pc.red(\"✗\");\n console.log(`${icon} ${pc.bold(check.label)}`);\n console.log(` ${pc.dim(check.message)}`);\n\n if (!check.passed && check.fix) {\n console.log(` ${pc.yellow(\"Fix:\")} ${check.fix}`);\n failures++;\n }\n\n console.log();\n }\n\n if (failures > 0) {\n console.log(\n pc.yellow(`${failures} issue(s) found. See suggested fixes above.`),\n );\n process.exit(1);\n } else {\n console.log(pc.green(\"All checks passed!\"));\n }\n}\n","import { existsSync, mkdirSync, writeFileSync } from \"node:fs\";\nimport { dirname, join, relative } from \"node:path\";\nimport pc from \"picocolors\";\nimport { getAllExamples, getExample } from \"../lib/knowledge.js\";\n\n// ---------------------------------------------------------------------------\n// Categories\n// ---------------------------------------------------------------------------\n\nconst CATEGORIES: Record<string, string[]> = {\n \"Getting Started\": [\"counter\", \"contact-form\", \"auth-flow\"],\n \"Core Patterns\": [\n \"async-chains\",\n \"batch-resolver\",\n \"debounce-constraints\",\n \"error-boundaries\",\n \"feature-flags\",\n \"multi-module\",\n \"optimistic-updates\",\n \"pagination\",\n \"permissions\",\n ],\n \"Real-World\": [\n \"dashboard-loader\",\n \"form-wizard\",\n \"newsletter\",\n \"notifications\",\n \"shopping-cart\",\n \"theme-locale\",\n \"url-sync\",\n \"websocket\",\n \"server\",\n ],\n Games: [\"checkers\", \"sudoku\", \"goal-heist\", \"ab-testing\"],\n AI: [\n \"ai-orchestrator\",\n \"ai-checkpoint\",\n \"ai-guardrails\",\n \"fraud-analysis\",\n \"provider-routing\",\n \"topic-guard\",\n \"dynamic-modules\",\n \"time-machine\",\n ],\n};\n\nfunction getCategory(name: string): string {\n for (const [cat, names] of Object.entries(CATEGORIES)) {\n if (names.includes(name)) {\n return cat;\n }\n }\n\n return \"Other\";\n}\n\nfunction getDescription(content: string): string {\n // Extract first line comment or jsdoc summary\n const lines = content.split(\"\\n\");\n\n for (const line of lines) {\n const trimmed = line.trim();\n\n // Match: // Example: name or // Source: ...\n if (trimmed.startsWith(\"// Example:\")) {\n continue;\n }\n if (trimmed.startsWith(\"// Source:\")) {\n continue;\n }\n if (trimmed.startsWith(\"// Extracted\")) {\n continue;\n }\n\n // Match JSDoc: * Description text\n const jsdocMatch = trimmed.match(/^\\*\\s+(.+?)(?:\\s*\\*\\/)?$/);\n if (jsdocMatch?.[1] && !jsdocMatch[1].startsWith(\"@\")) {\n return jsdocMatch[1];\n }\n\n // Match: // Description text\n if (trimmed.startsWith(\"//\") && trimmed.length > 3) {\n return trimmed.slice(2).trim();\n }\n\n // Stop at first non-comment line\n if (\n trimmed !== \"\" &&\n !trimmed.startsWith(\"//\") &&\n !trimmed.startsWith(\"/*\") &&\n !trimmed.startsWith(\"*\")\n ) {\n break;\n }\n }\n\n return \"\";\n}\n\n// ---------------------------------------------------------------------------\n// List command\n// ---------------------------------------------------------------------------\n\nexport async function examplesListCommand(args: string[]) {\n let filter: string | undefined;\n\n for (let i = 0; i < args.length; i++) {\n if (args[i] === \"--filter\") {\n filter = args[++i]?.toLowerCase();\n }\n }\n\n const examples = getAllExamples();\n\n console.log();\n console.log(pc.bold(pc.cyan(\"Directive Examples\")));\n console.log(pc.dim(\"─\".repeat(50)));\n console.log();\n\n // Group by category\n const byCategory = new Map<string, Array<{ name: string; desc: string }>>();\n\n for (const [name, content] of examples) {\n const cat = getCategory(name);\n\n if (\n filter &&\n !cat.toLowerCase().includes(filter) &&\n !name.includes(filter)\n ) {\n continue;\n }\n\n if (!byCategory.has(cat)) {\n byCategory.set(cat, []);\n }\n byCategory.get(cat)!.push({ name, desc: getDescription(content) });\n }\n\n if (byCategory.size === 0) {\n console.log(pc.dim(\"No examples match the filter.\"));\n\n return;\n }\n\n // Print in category order\n const categoryOrder = Object.keys(CATEGORIES);\n const sortedCategories = [...byCategory.keys()].sort(\n (a, b) =>\n (categoryOrder.indexOf(a) ?? 99) - (categoryOrder.indexOf(b) ?? 99),\n );\n\n for (const cat of sortedCategories) {\n const items = byCategory.get(cat)!;\n console.log(pc.bold(cat));\n\n for (const item of items) {\n const desc = item.desc ? pc.dim(` — ${item.desc}`) : \"\";\n console.log(` ${pc.cyan(item.name)}${desc}`);\n }\n\n console.log();\n }\n\n console.log(\n pc.dim(\n `${examples.size} examples available. Run ${pc.cyan(\"directive examples copy <name>\")} to extract one.`,\n ),\n );\n}\n\n// ---------------------------------------------------------------------------\n// Copy command\n// ---------------------------------------------------------------------------\n\nexport async function examplesCopyCommand(name: string, args: string[]) {\n let dest = process.cwd();\n\n for (let i = 0; i < args.length; i++) {\n if (args[i] === \"--dest\") {\n const val = args[++i];\n if (val) {\n dest = val;\n }\n }\n }\n\n if (!name) {\n console.error(\"Usage: directive examples copy <name> [--dest <dir>]\");\n process.exit(1);\n }\n\n const content = getExample(name);\n\n if (!content) {\n console.error(`Example \"${name}\" not found.`);\n console.error(\n `Run ${pc.cyan(\"directive examples list\")} to see available examples.`,\n );\n process.exit(1);\n }\n\n // Rewrite workspace imports to published package names\n const rewritten = content\n .replace(\n /from\\s+[\"']@directive-run\\/core\\/plugins[\"']/g,\n 'from \"@directive-run/core/plugins\"',\n )\n .replace(\n /from\\s+[\"']@directive-run\\/core[\"']/g,\n 'from \"@directive-run/core\"',\n )\n .replace(/from\\s+[\"']@directive-run\\/ai[\"']/g, 'from \"@directive-run/ai\"');\n\n const filePath = join(dest, `${name}.ts`);\n\n if (existsSync(filePath)) {\n console.error(`File already exists: ${relative(process.cwd(), filePath)}`);\n process.exit(1);\n }\n\n const dir = dirname(filePath);\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true });\n }\n\n writeFileSync(filePath, rewritten, \"utf-8\");\n\n const rel = relative(process.cwd(), filePath);\n console.log(`${pc.green(\"Copied\")} ${pc.cyan(name)} → ${pc.dim(rel)}`);\n}\n","import pc from \"picocolors\";\nimport { loadSystem } from \"../lib/loader.js\";\n\ninterface ExplainOptions {\n module?: string;\n}\n\nfunction parseArgs(args: string[]): {\n filePath: string;\n requirementId?: string;\n opts: ExplainOptions;\n} {\n const opts: ExplainOptions = {};\n let filePath = \"\";\n let requirementId: string | undefined;\n\n for (let i = 0; i < args.length; i++) {\n const arg = args[i];\n\n switch (arg) {\n case \"--module\": {\n const val = args[++i];\n if (val) {\n opts.module = val;\n }\n break;\n }\n default:\n if (arg && !arg.startsWith(\"-\")) {\n if (!filePath) {\n filePath = arg;\n } else if (!requirementId) {\n requirementId = arg;\n }\n }\n }\n }\n\n return { filePath, requirementId, opts };\n}\n\n// ---------------------------------------------------------------------------\n// Command\n// ---------------------------------------------------------------------------\n\nexport async function explainCommand(args: string[]) {\n const { filePath, requirementId } = parseArgs(args);\n\n if (!filePath) {\n console.error(\"Usage: directive explain <file> [requirement-id]\");\n process.exit(1);\n }\n\n const system = await loadSystem(filePath);\n\n if (!system.isRunning) {\n system.start();\n }\n\n const inspection = system.inspect();\n\n if (requirementId) {\n // Explain a specific requirement\n const explanation = system.explain(requirementId);\n\n if (!explanation) {\n console.error(\n `Requirement \"${requirementId}\" not found.\\n\\n` +\n \"Current requirements:\",\n );\n\n if (inspection.unmet.length === 0) {\n console.log(pc.dim(\" (no unmet requirements)\"));\n } else {\n for (const u of inspection.unmet) {\n console.log(\n ` ${pc.cyan(u.id)} — ${u.requirement.type} (from ${u.fromConstraint})`,\n );\n }\n }\n\n system.stop();\n process.exit(1);\n }\n\n console.log();\n console.log(pc.bold(pc.cyan(\"Requirement Explanation\")));\n console.log(pc.dim(\"─\".repeat(40)));\n console.log();\n console.log(explanation);\n console.log();\n } else {\n // List all requirements with status\n console.log();\n console.log(pc.bold(pc.cyan(\"All Requirements\")));\n console.log(pc.dim(\"─\".repeat(40)));\n console.log();\n\n if (inspection.unmet.length === 0) {\n console.log(pc.green(\"All requirements are met.\"));\n console.log();\n\n // Show resolver history if available\n const resolverEntries = Object.entries(\n inspection.resolvers as Record<\n string,\n { state: string; duration?: number; error?: string }\n >,\n );\n if (resolverEntries.length > 0) {\n console.log(pc.bold(\"Recent Resolver Activity:\"));\n for (const [key, status] of resolverEntries) {\n const state = formatState(status.state);\n const dur =\n status.duration !== undefined ? ` (${status.duration}ms)` : \"\";\n console.log(` ${pc.cyan(key)} ${state}${dur}`);\n }\n console.log();\n }\n } else {\n console.log(\n `${pc.yellow(String(inspection.unmet.length))} unmet requirement(s):\\n`,\n );\n\n for (const u of inspection.unmet) {\n console.log(\n `${pc.yellow(\"●\")} ${pc.bold(u.requirement.type)} (id: ${pc.dim(u.id)})`,\n );\n console.log(` From constraint: ${pc.cyan(u.fromConstraint)}`);\n\n // Show payload\n const payload = { ...u.requirement };\n delete (payload as Record<string, unknown>).type;\n const payloadKeys = Object.keys(payload);\n if (payloadKeys.length > 0) {\n console.log(` Payload: ${JSON.stringify(payload)}`);\n }\n\n // Check resolver status\n const resolverStatus = (\n inspection.resolvers as Record<\n string,\n { state: string; error?: string } | undefined\n >\n )[u.id];\n if (resolverStatus) {\n console.log(\n ` Resolver: ${formatState(resolverStatus.state)}${resolverStatus.error ? ` — ${resolverStatus.error}` : \"\"}`,\n );\n } else {\n // Check if any resolver handles this type\n const hasResolver = inspection.resolverDefs.some(\n (r: { id: string; requirement: string }) =>\n r.requirement === u.requirement.type ||\n r.requirement === \"(predicate)\",\n );\n if (!hasResolver) {\n console.log(` ${pc.red(\"No resolver registered for this type\")}`);\n }\n }\n\n console.log();\n }\n\n console.log(\n pc.dim(\n `Run ${pc.cyan(`directive explain <file> <requirement-id>`)} for detailed explanation.`,\n ),\n );\n }\n }\n\n system.stop();\n}\n\nfunction formatState(state: string): string {\n switch (state) {\n case \"resolved\":\n return pc.green(\"resolved\");\n case \"errored\":\n return pc.red(\"errored\");\n case \"inflight\":\n return pc.yellow(\"inflight\");\n case \"pending\":\n return pc.yellow(\"pending\");\n case \"cancelled\":\n return pc.dim(\"cancelled\");\n default:\n return pc.dim(state);\n }\n}\n","import { writeFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport pc from \"picocolors\";\nimport { loadSystem } from \"../lib/loader.js\";\n\ninterface GraphOptions {\n ascii: boolean;\n open: boolean;\n output?: string;\n}\n\nfunction parseArgs(args: string[]): { filePath: string; opts: GraphOptions } {\n const opts: GraphOptions = { ascii: false, open: true };\n let filePath = \"\";\n\n for (let i = 0; i < args.length; i++) {\n const arg = args[i];\n\n switch (arg) {\n case \"--ascii\":\n opts.ascii = true;\n break;\n case \"--no-open\":\n opts.open = false;\n break;\n case \"--output\": {\n const val = args[++i];\n if (val) {\n opts.output = val;\n }\n break;\n }\n default:\n if (arg && !arg.startsWith(\"-\") && !filePath) {\n filePath = arg;\n }\n }\n }\n\n return { filePath, opts };\n}\n\n// ---------------------------------------------------------------------------\n// ASCII graph renderer\n// ---------------------------------------------------------------------------\n\nfunction renderAsciiGraph(inspection: {\n constraints: Array<{\n id: string;\n active: boolean;\n disabled: boolean;\n priority: number;\n }>;\n resolverDefs: Array<{ id: string; requirement: string }>;\n unmet: Array<{\n id: string;\n requirement: { type: string };\n fromConstraint: string;\n }>;\n}): string {\n const lines: string[] = [];\n\n lines.push(pc.bold(\"Dependency Graph\"));\n lines.push(pc.dim(\"═\".repeat(50)));\n lines.push(\"\");\n\n // Group by flow: constraint → requirement → resolver\n const constraintMap = new Map<\n string,\n { reqTypes: Set<string>; active: boolean; priority: number }\n >();\n\n for (const c of inspection.constraints) {\n constraintMap.set(c.id, {\n reqTypes: new Set(),\n active: c.active,\n priority: c.priority,\n });\n }\n\n // Map unmet requirements to constraints\n for (const u of inspection.unmet) {\n const entry = constraintMap.get(u.fromConstraint);\n if (entry) {\n entry.reqTypes.add(u.requirement.type);\n }\n }\n\n // Map resolvers to requirement types\n const resolversByType = new Map<string, string[]>();\n for (const r of inspection.resolverDefs) {\n if (!resolversByType.has(r.requirement)) {\n resolversByType.set(r.requirement, []);\n }\n resolversByType.get(r.requirement)!.push(r.id);\n }\n\n // Render constraint flows\n lines.push(pc.bold(\"Constraints → Requirements → Resolvers\"));\n lines.push(\"\");\n\n for (const [id, info] of constraintMap) {\n const status = info.active ? pc.green(\"●\") : pc.dim(\"○\");\n lines.push(`${status} ${pc.cyan(id)} (priority: ${info.priority})`);\n\n if (info.reqTypes.size > 0) {\n for (const reqType of info.reqTypes) {\n lines.push(` └─▶ ${pc.yellow(reqType)}`);\n\n const resolvers = resolversByType.get(reqType) || [];\n if (resolvers.length > 0) {\n for (const r of resolvers) {\n lines.push(` └─▶ ${pc.magenta(r)}`);\n }\n } else {\n lines.push(` └─▶ ${pc.red(\"(no resolver)\")}`);\n }\n }\n } else {\n lines.push(` └─▶ ${pc.dim(\"(no active requirements)\")}`);\n }\n\n lines.push(\"\");\n }\n\n // Orphaned resolvers\n const usedResolvers = new Set<string>();\n for (const resolvers of resolversByType.values()) {\n for (const r of resolvers) {\n usedResolvers.add(r);\n }\n }\n\n const allResolverIds = inspection.resolverDefs.map((r) => r.id);\n const orphanedCount = allResolverIds.filter(\n (r) => !usedResolvers.has(r),\n ).length;\n\n if (orphanedCount > 0) {\n lines.push(pc.bold(\"Standalone Resolvers:\"));\n for (const r of inspection.resolverDefs) {\n if (!usedResolvers.has(r.id)) {\n lines.push(` ${pc.magenta(r.id)} handles ${pc.yellow(r.requirement)}`);\n }\n }\n }\n\n return lines.join(\"\\n\");\n}\n\n// ---------------------------------------------------------------------------\n// HTML graph renderer\n// ---------------------------------------------------------------------------\n\nfunction renderHtmlGraph(\n inspection: {\n constraints: Array<{\n id: string;\n active: boolean;\n disabled: boolean;\n priority: number;\n hitCount: number;\n }>;\n resolverDefs: Array<{ id: string; requirement: string }>;\n resolvers: Record<string, { state: string }>;\n unmet: Array<{\n id: string;\n requirement: { type: string };\n fromConstraint: string;\n }>;\n },\n facts: Record<string, unknown>,\n): string {\n // Build nodes and edges for a simple SVG visualization\n const nodes: Array<{\n id: string;\n label: string;\n type: \"fact\" | \"constraint\" | \"requirement\" | \"resolver\";\n x: number;\n y: number;\n color: string;\n }> = [];\n const edges: Array<{ from: string; to: string }> = [];\n\n const colWidth = 220;\n const rowHeight = 50;\n const startX = 40;\n const startY = 60;\n\n // Column 1: Facts\n const factKeys = Object.keys(facts);\n for (let i = 0; i < factKeys.length; i++) {\n const key = factKeys[i]!;\n nodes.push({\n id: `fact-${key}`,\n label: key,\n type: \"fact\",\n x: startX,\n y: startY + i * rowHeight,\n color: \"#3b82f6\",\n });\n }\n\n // Column 2: Constraints\n for (let i = 0; i < inspection.constraints.length; i++) {\n const c = inspection.constraints[i]!;\n nodes.push({\n id: `constraint-${c.id}`,\n label: c.id,\n type: \"constraint\",\n x: startX + colWidth,\n y: startY + i * rowHeight,\n color: c.active ? \"#22c55e\" : \"#6b7280\",\n });\n }\n\n // Column 3: Requirements (from unmet)\n const reqTypes = new Set<string>();\n for (const u of inspection.unmet) {\n reqTypes.add(u.requirement.type);\n }\n let reqIdx = 0;\n for (const reqType of reqTypes) {\n nodes.push({\n id: `req-${reqType}`,\n label: reqType,\n type: \"requirement\",\n x: startX + colWidth * 2,\n y: startY + reqIdx * rowHeight,\n color: \"#eab308\",\n });\n reqIdx++;\n }\n\n // Column 4: Resolvers\n for (let i = 0; i < inspection.resolverDefs.length; i++) {\n const r = inspection.resolverDefs[i]!;\n nodes.push({\n id: `resolver-${r.id}`,\n label: r.id,\n type: \"resolver\",\n x: startX + colWidth * 3,\n y: startY + i * rowHeight,\n color: \"#a855f7\",\n });\n }\n\n // Edges: constraint → requirement\n for (const u of inspection.unmet) {\n edges.push({\n from: `constraint-${u.fromConstraint}`,\n to: `req-${u.requirement.type}`,\n });\n }\n\n // Edges: requirement → resolver\n for (const r of inspection.resolverDefs) {\n if (reqTypes.has(r.requirement)) {\n edges.push({\n from: `req-${r.requirement}`,\n to: `resolver-${r.id}`,\n });\n }\n }\n\n const nodeMap = new Map(nodes.map((n) => [n.id, n]));\n const svgWidth = startX + colWidth * 4 + 40;\n const maxY = Math.max(...nodes.map((n) => n.y)) + rowHeight + 20;\n\n const edgeSvg = edges\n .map((e) => {\n const from = nodeMap.get(e.from);\n const to = nodeMap.get(e.to);\n if (!from || !to) {\n return \"\";\n }\n\n return `<line x1=\"${from.x + 90}\" y1=\"${from.y + 15}\" x2=\"${to.x}\" y2=\"${to.y + 15}\" stroke=\"#94a3b8\" stroke-width=\"1.5\" marker-end=\"url(#arrow)\"/>`;\n })\n .join(\"\\n \");\n\n const nodeSvg = nodes\n .map(\n (n) =>\n `<g>\n <rect x=\"${n.x}\" y=\"${n.y}\" width=\"180\" height=\"30\" rx=\"6\" fill=\"${n.color}\" opacity=\"0.15\" stroke=\"${n.color}\" stroke-width=\"1.5\"/>\n <text x=\"${n.x + 90}\" y=\"${n.y + 19}\" text-anchor=\"middle\" font-size=\"12\" font-family=\"monospace\" fill=\"${n.color}\">${escapeHtml(n.label)}</text>\n </g>`,\n )\n .join(\"\\n \");\n\n // Column headers\n const headers = [\"Facts\", \"Constraints\", \"Requirements\", \"Resolvers\"];\n const headerSvg = headers\n .map(\n (h, i) =>\n `<text x=\"${startX + i * colWidth + 90}\" y=\"35\" text-anchor=\"middle\" font-size=\"14\" font-weight=\"bold\" font-family=\"system-ui\" fill=\"#e2e8f0\">${h}</text>`,\n )\n .join(\"\\n \");\n\n return `<!DOCTYPE html>\n<html>\n<head>\n <title>Directive System Graph</title>\n <style>\n body { margin: 0; background: #0f172a; display: flex; justify-content: center; padding: 20px; }\n svg { max-width: 100%; }\n </style>\n</head>\n<body>\n <svg width=\"${svgWidth}\" height=\"${maxY}\" xmlns=\"http://www.w3.org/2000/svg\">\n <defs>\n <marker id=\"arrow\" viewBox=\"0 0 10 10\" refX=\"9\" refY=\"5\" markerWidth=\"6\" markerHeight=\"6\" orient=\"auto-start-reverse\">\n <path d=\"M 0 0 L 10 5 L 0 10 z\" fill=\"#94a3b8\"/>\n </marker>\n </defs>\n ${headerSvg}\n ${edgeSvg}\n ${nodeSvg}\n </svg>\n</body>\n</html>`;\n}\n\nfunction escapeHtml(text: string): string {\n return text\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/\"/g, \""\");\n}\n\n// ---------------------------------------------------------------------------\n// Command\n// ---------------------------------------------------------------------------\n\nexport async function graphCommand(args: string[]) {\n const { filePath, opts } = parseArgs(args);\n\n if (!filePath) {\n console.error(\n \"Usage: directive graph <file> [--ascii] [--no-open] [--output <path>]\",\n );\n process.exit(1);\n }\n\n const system = await loadSystem(filePath);\n\n if (!system.isRunning) {\n system.start();\n }\n\n const inspection = system.inspect();\n\n if (opts.ascii) {\n console.log(renderAsciiGraph(inspection));\n system.stop();\n\n return;\n }\n\n // HTML output\n const factsObj: Record<string, unknown> = {};\n if (system.facts) {\n for (const key of Object.keys(system.facts)) {\n try {\n factsObj[key] = system.facts[key];\n } catch {\n factsObj[key] = null;\n }\n }\n }\n\n const html = renderHtmlGraph(inspection, factsObj);\n const outputPath =\n opts.output || join(process.cwd(), \".directive-graph.html\");\n\n writeFileSync(outputPath, html, \"utf-8\");\n console.log(`${pc.green(\"Generated\")} ${pc.dim(outputPath)}`);\n\n if (opts.open) {\n try {\n const { execFile } = await import(\"node:child_process\");\n const openCmd =\n process.platform === \"darwin\"\n ? \"open\"\n : process.platform === \"win32\"\n ? \"start\"\n : \"xdg-open\";\n execFile(openCmd, [outputPath]);\n console.log(pc.dim(\"Opened in browser.\"));\n } catch {\n console.log(\n pc.dim(`Open ${outputPath} in your browser to view the graph.`),\n );\n }\n }\n\n system.stop();\n}\n","import { existsSync, mkdirSync, writeFileSync } from \"node:fs\";\nimport { dirname, join, relative } from \"node:path\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { CLI_NAME } from \"../lib/constants.js\";\n\ninterface InitOptions {\n template?: string;\n dir: string;\n noInteractive: boolean;\n}\n\nfunction parseArgs(args: string[]): InitOptions {\n const opts: InitOptions = {\n dir: process.cwd(),\n noInteractive: false,\n };\n\n for (let i = 0; i < args.length; i++) {\n const arg = args[i];\n\n switch (arg) {\n case \"--template\": {\n const val = args[++i];\n if (val) {\n opts.template = val;\n }\n break;\n }\n case \"--dir\": {\n const val = args[++i];\n if (val) {\n opts.dir = val;\n }\n break;\n }\n case \"--no-interactive\":\n opts.noInteractive = true;\n break;\n }\n }\n\n return opts;\n}\n\n// ---------------------------------------------------------------------------\n// Package manager detection\n// ---------------------------------------------------------------------------\n\ntype PackageManager = \"pnpm\" | \"npm\" | \"yarn\" | \"bun\";\n\nfunction detectPackageManager(dir: string): PackageManager {\n if (existsSync(join(dir, \"pnpm-lock.yaml\"))) {\n return \"pnpm\";\n }\n if (existsSync(join(dir, \"bun.lockb\")) || existsSync(join(dir, \"bun.lock\"))) {\n return \"bun\";\n }\n if (existsSync(join(dir, \"yarn.lock\"))) {\n return \"yarn\";\n }\n\n return \"npm\";\n}\n\nfunction installCmd(pm: PackageManager, pkg: string): string {\n switch (pm) {\n case \"pnpm\":\n return `pnpm add ${pkg}`;\n case \"yarn\":\n return `yarn add ${pkg}`;\n case \"bun\":\n return `bun add ${pkg}`;\n default:\n return `npm install ${pkg}`;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Templates\n// ---------------------------------------------------------------------------\n\ntype TemplateId = \"counter\" | \"auth-flow\" | \"ai-orchestrator\";\n\ninterface TemplateConfig {\n id: TemplateId;\n label: string;\n hint: string;\n files: Array<{ path: string; content: string }>;\n deps: string[];\n}\n\nfunction getTemplates(moduleName: string): Record<TemplateId, TemplateConfig> {\n return {\n counter: {\n id: \"counter\",\n label: \"Counter (minimal)\",\n hint: \"schema + init + derive + events — simplest starting point\",\n files: [\n {\n path: `src/${moduleName}.ts`,\n content: generateCounterModule(moduleName),\n },\n {\n path: \"src/main.ts\",\n content: generateCounterMain(moduleName),\n },\n ],\n deps: [\"@directive-run/core\"],\n },\n \"auth-flow\": {\n id: \"auth-flow\",\n label: \"Auth flow (constraints + resolvers)\",\n hint: \"login flow with constraints, resolvers, retry, and effects\",\n files: [\n {\n path: `src/${moduleName}.ts`,\n content: generateAuthModule(moduleName),\n },\n {\n path: \"src/main.ts\",\n content: generateAuthMain(moduleName),\n },\n ],\n deps: [\"@directive-run/core\"],\n },\n \"ai-orchestrator\": {\n id: \"ai-orchestrator\",\n label: \"AI orchestrator\",\n hint: \"agent orchestrator with guardrails and streaming\",\n files: [\n {\n path: `src/${moduleName}.ts`,\n content: generateAIModule(moduleName),\n },\n {\n path: \"src/main.ts\",\n content: generateAIMain(moduleName),\n },\n ],\n deps: [\"@directive-run/core\", \"@directive-run/ai\"],\n },\n };\n}\n\n// ---------------------------------------------------------------------------\n// Template generators\n// ---------------------------------------------------------------------------\n\nfunction generateCounterModule(name: string): string {\n const camelName = toCamelCase(name);\n\n return `import { type ModuleSchema, createModule, t } from \"@directive-run/core\";\n\nconst schema = {\n facts: {\n count: t.number(),\n label: t.string(),\n },\n derivations: {\n isEven: t.boolean(),\n display: t.string(),\n },\n events: {\n increment: {},\n decrement: {},\n reset: {},\n setLabel: { value: t.string() },\n },\n} satisfies ModuleSchema;\n\nexport const ${camelName} = createModule(\"${name}\", {\n schema,\n\n init: (facts) => {\n facts.count = 0;\n facts.label = \"${name}\";\n },\n\n derive: {\n isEven: (facts) => facts.count % 2 === 0,\n display: (facts) => \\`\\${facts.label}: \\${facts.count}\\`,\n },\n\n events: {\n increment: (facts) => {\n facts.count++;\n },\n decrement: (facts) => {\n facts.count--;\n },\n reset: (facts) => {\n facts.count = 0;\n },\n setLabel: (facts, { value }) => {\n facts.label = value;\n },\n },\n});\n`;\n}\n\nfunction generateCounterMain(name: string): string {\n const camelName = toCamelCase(name);\n\n return `import { createSystem } from \"@directive-run/core\";\nimport { ${camelName} } from \"./${name}.js\";\n\nconst system = createSystem({\n module: ${camelName},\n});\n\nsystem.start();\n\n// Read facts and derivations\nconsole.log(\"count:\", system.facts.count);\nconsole.log(\"display:\", system.read(\"display\"));\n\n// Dispatch events\nsystem.events.increment();\nconsole.log(\"after increment:\", system.facts.count);\n\n// Subscribe to changes\nsystem.subscribe([\"count\"], () => {\n console.log(\"count changed:\", system.facts.count);\n});\n\nsystem.events.increment();\nsystem.events.increment();\n\nexport default system;\n`;\n}\n\nfunction generateAuthModule(name: string): string {\n const camelName = toCamelCase(name);\n\n return `import { type ModuleSchema, createModule, t } from \"@directive-run/core\";\n\ntype AuthStatus = \"idle\" | \"authenticating\" | \"authenticated\" | \"expired\";\n\nconst schema = {\n facts: {\n email: t.string(),\n password: t.string(),\n token: t.string(),\n status: t.string<AuthStatus>(),\n error: t.string(),\n },\n derivations: {\n isAuthenticated: t.boolean(),\n canLogin: t.boolean(),\n },\n events: {\n setEmail: { value: t.string() },\n setPassword: { value: t.string() },\n requestLogin: {},\n logout: {},\n },\n requirements: {\n LOGIN: { email: t.string(), password: t.string() },\n },\n} satisfies ModuleSchema;\n\nexport const ${camelName} = createModule(\"${name}\", {\n schema,\n\n init: (facts) => {\n facts.email = \"\";\n facts.password = \"\";\n facts.token = \"\";\n facts.status = \"idle\";\n facts.error = \"\";\n },\n\n derive: {\n isAuthenticated: (facts) => facts.status === \"authenticated\",\n canLogin: (facts) => {\n return (\n facts.email.trim() !== \"\" &&\n facts.password.trim() !== \"\" &&\n (facts.status === \"idle\" || facts.status === \"expired\")\n );\n },\n },\n\n events: {\n setEmail: (facts, { value }) => {\n facts.email = value;\n },\n setPassword: (facts, { value }) => {\n facts.password = value;\n },\n requestLogin: (facts) => {\n facts.status = \"authenticating\";\n facts.error = \"\";\n },\n logout: (facts) => {\n facts.token = \"\";\n facts.status = \"idle\";\n },\n },\n\n constraints: {\n needsLogin: {\n priority: 100,\n when: (facts) => facts.status === \"authenticating\",\n require: (facts) => ({\n type: \"LOGIN\",\n email: facts.email,\n password: facts.password,\n }),\n },\n },\n\n resolvers: {\n login: {\n requirement: \"LOGIN\",\n retry: { attempts: 2, backoff: \"exponential\" },\n resolve: async (req, context) => {\n // Replace with real auth API call\n await new Promise((resolve) => setTimeout(resolve, 500));\n\n const token = \\`token_\\${Date.now()}\\`;\n context.facts.token = token;\n context.facts.status = \"authenticated\";\n },\n },\n },\n\n effects: {\n logStatusChange: {\n deps: [\"status\"],\n run: (facts, prev) => {\n if (prev && prev.status !== facts.status) {\n console.log(\\`Auth status: \\${prev.status} → \\${facts.status}\\`);\n }\n },\n },\n },\n});\n`;\n}\n\nfunction generateAuthMain(name: string): string {\n const camelName = toCamelCase(name);\n\n return `import { createSystem } from \"@directive-run/core\";\nimport { ${camelName} } from \"./${name}.js\";\n\nconst system = createSystem({\n module: ${camelName},\n});\n\nsystem.start();\n\n// Set credentials and login\nsystem.events.setEmail({ value: \"user@example.com\" });\nsystem.events.setPassword({ value: \"password123\" });\nsystem.events.requestLogin();\n\n// Wait for auth to complete\nawait system.settle();\n\nconsole.log(\"authenticated:\", system.read(\"isAuthenticated\"));\nconsole.log(\"token:\", system.facts.token);\n\nexport default system;\n`;\n}\n\nfunction generateAIModule(name: string): string {\n const camelName = toCamelCase(name);\n\n return `import { type ModuleSchema, createModule, t } from \"@directive-run/core\";\nimport {\n createAgentOrchestrator,\n createAgentMemory,\n createSlidingWindowStrategy,\n} from \"@directive-run/ai\";\n\n// ============================================================================\n// Module — state management\n// ============================================================================\n\ntype AgentStatus = \"idle\" | \"thinking\" | \"done\" | \"error\";\n\nconst schema = {\n facts: {\n input: t.string(),\n output: t.string(),\n status: t.string<AgentStatus>(),\n error: t.string(),\n },\n derivations: {\n isThinking: t.boolean(),\n hasOutput: t.boolean(),\n },\n events: {\n setInput: { value: t.string() },\n requestRun: {},\n reset: {},\n },\n requirements: {\n RUN_AGENT: { input: t.string() },\n },\n} satisfies ModuleSchema;\n\nexport const ${camelName} = createModule(\"${name}\", {\n schema,\n\n init: (facts) => {\n facts.input = \"\";\n facts.output = \"\";\n facts.status = \"idle\";\n facts.error = \"\";\n },\n\n derive: {\n isThinking: (facts) => facts.status === \"thinking\",\n hasOutput: (facts) => facts.output !== \"\",\n },\n\n events: {\n setInput: (facts, { value }) => {\n facts.input = value;\n },\n requestRun: (facts) => {\n facts.status = \"thinking\";\n facts.output = \"\";\n facts.error = \"\";\n },\n reset: (facts) => {\n facts.input = \"\";\n facts.output = \"\";\n facts.status = \"idle\";\n facts.error = \"\";\n },\n },\n\n constraints: {\n needsRun: {\n priority: 100,\n when: (facts) => facts.status === \"thinking\",\n require: (facts) => ({\n type: \"RUN_AGENT\",\n input: facts.input,\n }),\n },\n },\n\n resolvers: {\n runAgent: {\n requirement: \"RUN_AGENT\",\n timeout: 30000,\n resolve: async (req, context) => {\n // Replace with your agent runner (e.g., Anthropic, OpenAI)\n const result = \\`Echo: \\${req.input}\\`;\n\n context.facts.output = result;\n context.facts.status = \"done\";\n },\n },\n },\n});\n\n// ============================================================================\n// Orchestrator — optional AI features\n// ============================================================================\n\nexport const memory = createAgentMemory({\n strategy: createSlidingWindowStrategy(),\n strategyConfig: { maxMessages: 30, preserveRecentCount: 6 },\n autoManage: true,\n});\n\n// Uncomment to add orchestrator features:\n// export const orchestrator = createAgentOrchestrator({\n// runner: yourAgentRunner,\n// maxTokenBudget: 50000,\n// memory,\n// });\n`;\n}\n\nfunction generateAIMain(name: string): string {\n const camelName = toCamelCase(name);\n\n return `import { createSystem } from \"@directive-run/core\";\nimport { ${camelName} } from \"./${name}.js\";\n\nconst system = createSystem({\n module: ${camelName},\n});\n\nsystem.start();\n\n// Set input and run\nsystem.events.setInput({ value: \"Hello, world!\" });\nsystem.events.requestRun();\n\n// Wait for completion\nawait system.settle();\n\nconsole.log(\"output:\", system.facts.output);\n\nexport default system;\n`;\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction toCamelCase(name: string): string {\n return name.replace(/-([a-z])/g, (_, c) => c.toUpperCase());\n}\n\nfunction writeFile(filePath: string, content: string) {\n const dir = dirname(filePath);\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true });\n }\n writeFileSync(filePath, content, \"utf-8\");\n}\n\n// ---------------------------------------------------------------------------\n// Command\n// ---------------------------------------------------------------------------\n\nexport async function initCommand(args: string[]) {\n const opts = parseArgs(args);\n\n p.intro(pc.bgCyan(pc.black(\" directive init \")));\n\n // Step 1: Project name\n let moduleName: string;\n\n if (opts.noInteractive) {\n moduleName = \"my-module\";\n } else {\n const nameResult = await p.text({\n message: \"Module name:\",\n placeholder: \"my-module\",\n defaultValue: \"my-module\",\n validate: (val) => {\n if (!/^[a-z][a-z0-9-]*$/.test(val)) {\n return \"Must start with a letter, use lowercase letters, numbers, and hyphens\";\n }\n },\n });\n\n if (p.isCancel(nameResult)) {\n p.cancel(\"Cancelled.\");\n process.exit(0);\n }\n\n moduleName = nameResult;\n }\n\n // Step 2: Template selection\n let templateId: TemplateId;\n\n if (opts.template) {\n const templates = getTemplates(moduleName);\n if (!(opts.template in templates)) {\n p.log.error(\n `Unknown template: ${opts.template}. Available: ${Object.keys(templates).join(\", \")}`,\n );\n process.exit(1);\n }\n templateId = opts.template as TemplateId;\n } else if (opts.noInteractive) {\n templateId = \"counter\";\n } else {\n const templates = getTemplates(moduleName);\n const choice = await p.select({\n message: \"Project template:\",\n options: Object.values(templates).map((t) => ({\n value: t.id,\n label: t.label,\n hint: t.hint,\n })),\n });\n\n if (p.isCancel(choice)) {\n p.cancel(\"Cancelled.\");\n process.exit(0);\n }\n\n templateId = choice as TemplateId;\n }\n\n const templates = getTemplates(moduleName);\n const template = templates[templateId];\n\n // Step 3: Detect package manager\n const pm = detectPackageManager(opts.dir);\n p.log.info(`Package manager: ${pc.cyan(pm)}`);\n\n // Step 4: Write files\n const s = p.spinner();\n s.start(\"Creating project files...\");\n\n let created = 0;\n let skipped = 0;\n\n for (const file of template.files) {\n const filePath = join(opts.dir, file.path);\n\n if (existsSync(filePath)) {\n skipped++;\n continue;\n }\n\n writeFile(filePath, file.content);\n created++;\n }\n\n s.stop(\"Project files created.\");\n\n for (const file of template.files) {\n const filePath = join(opts.dir, file.path);\n const rel = relative(opts.dir, filePath);\n\n if (existsSync(filePath)) {\n p.log.success(`${pc.green(\"Created\")} ${pc.dim(rel)}`);\n }\n }\n\n if (skipped > 0) {\n p.log.warn(`Skipped ${skipped} file(s) that already exist.`);\n }\n\n // Step 5: Show next steps\n const depsCmd = installCmd(pm, template.deps.join(\" \"));\n\n p.outro(\n `Next steps:\\n` +\n ` ${pc.cyan(depsCmd)}\\n` +\n ` ${pc.cyan(`${CLI_NAME} ai-rules init`)}\\n` +\n ` ${pc.dim(\"Start building!\")}`,\n );\n}\n","import pc from \"picocolors\";\nimport { loadSystem } from \"../lib/loader.js\";\n\ninterface InspectOptions {\n json: boolean;\n module?: string;\n}\n\nfunction parseArgs(args: string[]): { filePath: string; opts: InspectOptions } {\n const opts: InspectOptions = { json: false };\n let filePath = \"\";\n\n for (let i = 0; i < args.length; i++) {\n const arg = args[i];\n\n switch (arg) {\n case \"--json\":\n opts.json = true;\n break;\n case \"--module\": {\n const val = args[++i];\n if (val) {\n opts.module = val;\n }\n break;\n }\n default:\n if (arg && !arg.startsWith(\"-\") && !filePath) {\n filePath = arg;\n }\n }\n }\n\n return { filePath, opts };\n}\n\n// ---------------------------------------------------------------------------\n// Formatters\n// ---------------------------------------------------------------------------\n\nfunction formatFacts(facts: Record<string, unknown>): string {\n const lines: string[] = [];\n lines.push(pc.bold(\"Facts:\"));\n\n const entries = Object.entries(facts);\n if (entries.length === 0) {\n lines.push(\" (none)\");\n\n return lines.join(\"\\n\");\n }\n\n for (const [key, value] of entries) {\n const formatted = formatValue(value);\n lines.push(` ${pc.cyan(key)} = ${formatted}`);\n }\n\n return lines.join(\"\\n\");\n}\n\nfunction formatConstraints(\n constraints: Array<{\n id: string;\n active: boolean;\n disabled: boolean;\n priority: number;\n hitCount: number;\n lastActiveAt: number | null;\n }>,\n): string {\n const lines: string[] = [];\n lines.push(pc.bold(\"Constraints:\"));\n\n if (constraints.length === 0) {\n lines.push(\" (none)\");\n\n return lines.join(\"\\n\");\n }\n\n for (const c of constraints) {\n const status = c.disabled\n ? pc.dim(\"disabled\")\n : c.active\n ? pc.green(\"active\")\n : pc.dim(\"inactive\");\n const hits = c.hitCount > 0 ? pc.yellow(` (${c.hitCount} hits)`) : \"\";\n lines.push(` ${pc.cyan(c.id)} ${status} priority=${c.priority}${hits}`);\n }\n\n return lines.join(\"\\n\");\n}\n\nfunction formatResolverDefs(\n resolverDefs: Array<{ id: string; requirement: string }>,\n resolvers: Record<\n string,\n { state: string; error?: string; duration?: number }\n >,\n): string {\n const lines: string[] = [];\n lines.push(pc.bold(\"Resolvers:\"));\n\n if (resolverDefs.length === 0) {\n lines.push(\" (none)\");\n\n return lines.join(\"\\n\");\n }\n\n for (const def of resolverDefs) {\n const status = resolvers[def.id];\n const stateStr = status\n ? formatResolverState(status.state, status.error, status.duration)\n : pc.dim(\"idle\");\n lines.push(` ${pc.cyan(def.id)} → ${def.requirement} ${stateStr}`);\n }\n\n return lines.join(\"\\n\");\n}\n\nfunction formatUnmet(\n unmet: Array<{\n id: string;\n requirement: { type: string };\n fromConstraint: string;\n }>,\n): string {\n const lines: string[] = [];\n lines.push(pc.bold(\"Unmet Requirements:\"));\n\n if (unmet.length === 0) {\n lines.push(` ${pc.green(\"(all requirements met)\")}`);\n\n return lines.join(\"\\n\");\n }\n\n for (const u of unmet) {\n lines.push(\n ` ${pc.yellow(u.requirement.type)} (id: ${pc.dim(u.id)}) from ${pc.dim(u.fromConstraint)}`,\n );\n }\n\n return lines.join(\"\\n\");\n}\n\nfunction formatInflight(\n inflight: Array<{ id: string; resolverId: string; startedAt: number }>,\n): string {\n const lines: string[] = [];\n lines.push(pc.bold(\"Inflight:\"));\n\n if (inflight.length === 0) {\n lines.push(` ${pc.green(\"(none)\")}`);\n\n return lines.join(\"\\n\");\n }\n\n const now = Date.now();\n for (const inf of inflight) {\n const elapsed = now - inf.startedAt;\n lines.push(\n ` ${pc.cyan(inf.resolverId)} → req ${pc.dim(inf.id)} ${pc.yellow(`${elapsed}ms`)}`,\n );\n }\n\n return lines.join(\"\\n\");\n}\n\nfunction formatResolverState(\n state: string,\n error?: string,\n duration?: number,\n): string {\n const dur = duration !== undefined ? ` ${duration}ms` : \"\";\n\n switch (state) {\n case \"resolved\":\n return pc.green(`resolved${dur}`);\n case \"errored\":\n return pc.red(`errored${dur}${error ? ` — ${error}` : \"\"}`);\n case \"inflight\":\n return pc.yellow(\"inflight\");\n case \"cancelled\":\n return pc.dim(\"cancelled\");\n default:\n return pc.dim(state);\n }\n}\n\nfunction formatValue(value: unknown): string {\n if (value === null) {\n return pc.dim(\"null\");\n }\n if (value === undefined) {\n return pc.dim(\"undefined\");\n }\n if (typeof value === \"string\") {\n return value.length > 60 ? `\"${value.slice(0, 57)}...\"` : `\"${value}\"`;\n }\n if (typeof value === \"number\" || typeof value === \"boolean\") {\n return String(value);\n }\n if (Array.isArray(value)) {\n return `[${value.length} items]`;\n }\n\n return JSON.stringify(value).slice(0, 60);\n}\n\n// ---------------------------------------------------------------------------\n// Warnings\n// ---------------------------------------------------------------------------\n\nfunction findWarnings(inspection: {\n resolverDefs: Array<{ id: string; requirement: string }>;\n constraints: Array<{ id: string; active: boolean; disabled: boolean }>;\n unmet: Array<{ requirement: { type: string } }>;\n}): string[] {\n const warnings: string[] = [];\n\n // Orphaned resolvers: resolver handles a type no constraint emits\n const constraintTypes = new Set<string>();\n // We can't know constraint requirement types from inspection alone,\n // but we can check unmet requirements\n const unmetTypes = new Set(inspection.unmet.map((u) => u.requirement.type));\n const resolverTypes = new Set(\n inspection.resolverDefs.map((r) => r.requirement),\n );\n\n // Resolver types not in unmet — might be orphaned (can't be sure without full constraint analysis)\n for (const def of inspection.resolverDefs) {\n if (def.requirement === \"(predicate)\") {\n continue;\n }\n }\n\n // Unmet requirements with no matching resolver\n for (const u of inspection.unmet) {\n const hasResolver = inspection.resolverDefs.some(\n (r) =>\n r.requirement === u.requirement.type || r.requirement === \"(predicate)\",\n );\n if (!hasResolver) {\n warnings.push(`No resolver for requirement type \"${u.requirement.type}\"`);\n }\n }\n\n return warnings;\n}\n\n// ---------------------------------------------------------------------------\n// Command\n// ---------------------------------------------------------------------------\n\nexport async function inspectCommand(args: string[]) {\n const { filePath, opts } = parseArgs(args);\n\n if (!filePath) {\n console.error(\"Usage: directive inspect <file> [--json] [--module <name>]\");\n process.exit(1);\n }\n\n const system = await loadSystem(filePath);\n\n if (!system.isRunning) {\n system.start();\n }\n\n const inspection = system.inspect();\n\n if (opts.json) {\n // Get facts as plain object\n const factsObj: Record<string, unknown> = {};\n if (system.facts) {\n for (const key of Object.keys(system.facts)) {\n try {\n factsObj[key] = system.facts[key];\n } catch {\n factsObj[key] = \"(error reading)\";\n }\n }\n }\n\n console.log(\n JSON.stringify(\n {\n facts: factsObj,\n ...inspection,\n },\n null,\n 2,\n ),\n );\n\n system.stop();\n\n return;\n }\n\n // Pretty output\n console.log();\n console.log(pc.bold(pc.cyan(\"Directive System Inspection\")));\n console.log(pc.dim(\"─\".repeat(40)));\n console.log();\n\n // Facts\n const factsObj: Record<string, unknown> = {};\n if (system.facts) {\n for (const key of Object.keys(system.facts)) {\n try {\n factsObj[key] = system.facts[key];\n } catch {\n factsObj[key] = \"(error reading)\";\n }\n }\n }\n console.log(formatFacts(factsObj));\n console.log();\n\n // Constraints\n console.log(formatConstraints(inspection.constraints));\n console.log();\n\n // Resolvers\n console.log(\n formatResolverDefs(inspection.resolverDefs, inspection.resolvers),\n );\n console.log();\n\n // Unmet requirements\n console.log(formatUnmet(inspection.unmet));\n console.log();\n\n // Inflight\n if (inspection.inflight.length > 0) {\n console.log(formatInflight(inspection.inflight));\n console.log();\n }\n\n // Warnings\n const warnings = findWarnings(inspection);\n if (warnings.length > 0) {\n console.log(pc.bold(pc.yellow(\"Warnings:\")));\n for (const w of warnings) {\n console.log(` ${pc.yellow(\"⚠\")} ${w}`);\n }\n console.log();\n }\n\n system.stop();\n}\n","import { existsSync, mkdirSync, writeFileSync } from \"node:fs\";\nimport { dirname, join, relative } from \"node:path\";\nimport pc from \"picocolors\";\n\ninterface NewOptions {\n with: string[];\n minimal: boolean;\n dir: string;\n}\n\nfunction parseArgs(args: string[]): NewOptions {\n const opts: NewOptions = {\n with: [],\n minimal: false,\n dir: process.cwd(),\n };\n\n for (let i = 0; i < args.length; i++) {\n const arg = args[i];\n\n switch (arg) {\n case \"--with\": {\n const val = args[++i];\n if (val) {\n opts.with = val.split(\",\").map((s) => s.trim());\n }\n break;\n }\n case \"--minimal\":\n opts.minimal = true;\n break;\n case \"--dir\": {\n const val = args[++i];\n if (val) {\n opts.dir = val;\n }\n break;\n }\n }\n }\n\n return opts;\n}\n\n// ---------------------------------------------------------------------------\n// Module generator\n// ---------------------------------------------------------------------------\n\ntype Section = \"derive\" | \"events\" | \"constraints\" | \"resolvers\" | \"effects\";\n\nconst ALL_SECTIONS: Section[] = [\n \"derive\",\n \"events\",\n \"constraints\",\n \"resolvers\",\n \"effects\",\n];\n\nfunction generateModule(name: string, sections: Section[]): string {\n const camelName = toCamelCase(name);\n const hasConstraints = sections.includes(\"constraints\");\n const hasResolvers = sections.includes(\"resolvers\");\n\n const imports = [\"type ModuleSchema\", \"createModule\", \"t\"];\n\n let code = `import { ${imports.join(\", \")} } from \"@directive-run/core\";\\n\\n`;\n\n // Schema\n code += `const schema = {\\n`;\n code += ` facts: {\\n`;\n code += ` // Add your facts here\\n`;\n code += ` status: t.string(),\\n`;\n code += ` },\\n`;\n\n if (sections.includes(\"derive\")) {\n code += ` derivations: {\\n`;\n code += ` // Add derivation types here\\n`;\n code += ` isReady: t.boolean(),\\n`;\n code += ` },\\n`;\n }\n\n if (sections.includes(\"events\")) {\n code += ` events: {\\n`;\n code += ` // Add event shapes here\\n`;\n code += ` setStatus: { value: t.string() },\\n`;\n code += ` },\\n`;\n }\n\n if (hasConstraints || hasResolvers) {\n code += ` requirements: {\\n`;\n code += ` // Add requirement shapes here\\n`;\n code += ` PROCESS: { input: t.string() },\\n`;\n code += ` },\\n`;\n }\n\n code += `} satisfies ModuleSchema;\\n\\n`;\n\n // Module\n code += `export const ${camelName} = createModule(\"${name}\", {\\n`;\n code += ` schema,\\n\\n`;\n\n code += ` init: (facts) => {\\n`;\n code += ` facts.status = \"idle\";\\n`;\n code += ` },\\n`;\n\n if (sections.includes(\"derive\")) {\n code += `\\n derive: {\\n`;\n code += ` isReady: (facts) => facts.status === \"ready\",\\n`;\n code += ` },\\n`;\n }\n\n if (sections.includes(\"events\")) {\n code += `\\n events: {\\n`;\n code += ` setStatus: (facts, { value }) => {\\n`;\n code += ` facts.status = value;\\n`;\n code += ` },\\n`;\n code += ` },\\n`;\n }\n\n if (hasConstraints) {\n code += `\\n constraints: {\\n`;\n code += ` needsProcessing: {\\n`;\n code += ` priority: 100,\\n`;\n code += ` when: (facts) => facts.status === \"pending\",\\n`;\n code += ` require: (facts) => ({\\n`;\n code += ` type: \"PROCESS\",\\n`;\n code += ` input: facts.status,\\n`;\n code += ` }),\\n`;\n code += ` },\\n`;\n code += ` },\\n`;\n }\n\n if (hasResolvers) {\n code += `\\n resolvers: {\\n`;\n code += ` process: {\\n`;\n code += ` requirement: \"PROCESS\",\\n`;\n code += ` resolve: async (req, context) => {\\n`;\n code += ` // Implement resolution logic here\\n`;\n code += ` context.facts.status = \"done\";\\n`;\n code += ` },\\n`;\n code += ` },\\n`;\n code += ` },\\n`;\n }\n\n if (sections.includes(\"effects\")) {\n code += `\\n effects: {\\n`;\n code += ` logChange: {\\n`;\n code += ` deps: [\"status\"],\\n`;\n code += ` run: (facts, prev) => {\\n`;\n code += ` if (prev && prev.status !== facts.status) {\\n`;\n code += ` console.log(\\`Status: \\${prev.status} → \\${facts.status}\\`);\\n`;\n code += ` }\\n`;\n code += ` },\\n`;\n code += ` },\\n`;\n code += ` },\\n`;\n }\n\n code += `});\\n`;\n\n return code;\n}\n\n// ---------------------------------------------------------------------------\n// Orchestrator generator\n// ---------------------------------------------------------------------------\n\nfunction generateOrchestrator(name: string): string {\n const camelName = toCamelCase(name);\n\n return `import { type ModuleSchema, createModule, createSystem, t } from \"@directive-run/core\";\nimport {\n createAgentOrchestrator,\n createAgentMemory,\n createSlidingWindowStrategy,\n} from \"@directive-run/ai\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\ntype AgentStatus = \"idle\" | \"thinking\" | \"done\" | \"error\";\n\n// ============================================================================\n// Schema\n// ============================================================================\n\nconst schema = {\n facts: {\n input: t.string(),\n output: t.string(),\n status: t.string<AgentStatus>(),\n error: t.string(),\n totalTokens: t.number(),\n },\n derivations: {\n isThinking: t.boolean(),\n hasOutput: t.boolean(),\n },\n events: {\n setInput: { value: t.string() },\n requestRun: {},\n reset: {},\n },\n requirements: {\n RUN_AGENT: { input: t.string() },\n },\n} satisfies ModuleSchema;\n\n// ============================================================================\n// Module\n// ============================================================================\n\nexport const ${camelName} = createModule(\"${name}\", {\n schema,\n\n init: (facts) => {\n facts.input = \"\";\n facts.output = \"\";\n facts.status = \"idle\";\n facts.error = \"\";\n facts.totalTokens = 0;\n },\n\n derive: {\n isThinking: (facts) => facts.status === \"thinking\",\n hasOutput: (facts) => facts.output !== \"\",\n },\n\n events: {\n setInput: (facts, { value }) => {\n facts.input = value;\n },\n requestRun: (facts) => {\n facts.status = \"thinking\";\n facts.output = \"\";\n facts.error = \"\";\n },\n reset: (facts) => {\n facts.input = \"\";\n facts.output = \"\";\n facts.status = \"idle\";\n facts.error = \"\";\n facts.totalTokens = 0;\n },\n },\n\n constraints: {\n needsRun: {\n priority: 100,\n when: (facts) => facts.status === \"thinking\",\n require: (facts) => ({\n type: \"RUN_AGENT\",\n input: facts.input,\n }),\n },\n },\n\n resolvers: {\n runAgent: {\n requirement: \"RUN_AGENT\",\n timeout: 30000,\n resolve: async (req, context) => {\n // TODO: Replace with your agent runner\n const result = \\`Echo: \\${req.input}\\`;\n\n context.facts.output = result;\n context.facts.status = \"done\";\n },\n },\n },\n});\n\n// ============================================================================\n// AI Features\n// ============================================================================\n\nexport const memory = createAgentMemory({\n strategy: createSlidingWindowStrategy(),\n strategyConfig: { maxMessages: 30, preserveRecentCount: 6 },\n autoManage: true,\n});\n\n// TODO: Add your agent runner and configure the orchestrator\n// export const orchestrator = createAgentOrchestrator({\n// runner: yourAgentRunner,\n// maxTokenBudget: 50000,\n// memory,\n// guardrails: {\n// input: [],\n// output: [],\n// },\n// });\n\n// ============================================================================\n// System\n// ============================================================================\n\nexport const system = createSystem({\n module: ${camelName},\n});\n`;\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction toCamelCase(name: string): string {\n return name.replace(/-([a-z])/g, (_, c) => c.toUpperCase());\n}\n\nfunction writeFile(filePath: string, content: string) {\n const dir = dirname(filePath);\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true });\n }\n writeFileSync(filePath, content, \"utf-8\");\n}\n\nfunction findModulesDir(dir: string): string {\n return join(dir, \"src\");\n}\n\n// ---------------------------------------------------------------------------\n// Commands\n// ---------------------------------------------------------------------------\n\nexport async function newModuleCommand(name: string, args: string[]) {\n const opts = parseArgs(args);\n\n if (!name || !/^[a-z][a-z0-9-]*$/.test(name)) {\n console.error(\n `Invalid module name: ${name || \"(none)\"}\\n` +\n \"Must start with a letter, use lowercase letters, numbers, and hyphens.\",\n );\n process.exit(1);\n }\n\n let sections: Section[];\n\n if (opts.minimal) {\n sections = [];\n } else if (opts.with.length > 0) {\n sections = opts.with.filter((s) =>\n ALL_SECTIONS.includes(s as Section),\n ) as Section[];\n } else {\n sections = ALL_SECTIONS;\n }\n\n const targetDir = findModulesDir(opts.dir);\n const filePath = join(targetDir, `${name}.ts`);\n\n if (existsSync(filePath)) {\n console.error(`File already exists: ${relative(opts.dir, filePath)}`);\n process.exit(1);\n }\n\n const content = generateModule(name, sections);\n writeFile(filePath, content);\n\n const rel = relative(opts.dir, filePath);\n console.log(`${pc.green(\"Created\")} ${pc.dim(rel)}`);\n\n if (sections.length === 0) {\n console.log(pc.dim(\" Minimal module (schema + init only)\"));\n } else {\n console.log(pc.dim(` Sections: ${sections.join(\", \")}`));\n }\n}\n\nexport async function newOrchestratorCommand(name: string, args: string[]) {\n const opts = parseArgs(args);\n\n if (!name || !/^[a-z][a-z0-9-]*$/.test(name)) {\n console.error(\n `Invalid orchestrator name: ${name || \"(none)\"}\\n` +\n \"Must start with a letter, use lowercase letters, numbers, and hyphens.\",\n );\n process.exit(1);\n }\n\n const targetDir = findModulesDir(opts.dir);\n const filePath = join(targetDir, `${name}.ts`);\n\n if (existsSync(filePath)) {\n console.error(`File already exists: ${relative(opts.dir, filePath)}`);\n process.exit(1);\n }\n\n const content = generateOrchestrator(name);\n writeFile(filePath, content);\n\n const rel = relative(opts.dir, filePath);\n console.log(`${pc.green(\"Created\")} ${pc.dim(rel)}`);\n console.log(\n pc.dim(\" AI orchestrator with memory, guardrails, and streaming\"),\n );\n}\n","/**\n * `directive replay <timeline.json> --system <module.ts>`\n *\n * Replay a serialized timeline against a fresh Directive system. Pairs\n * with `@directive-run/timeline`'s `serializeTimeline()` — the typical\n * flow:\n *\n * 1. Production error captures the last N seconds of timeline frames\n * via `recordTimeline(sys, ...)` + `serializeTimeline(t)`. The\n * JSON gets attached to a Sentry / PostHog / bug-tracker entry.\n * 2. A developer downloads the JSON and runs:\n * directive replay bug-1234.json --system path/to/module.ts\n * 3. The CLI loads the module, instantiates a fresh system, and\n * replays every dispatchable frame in order. The `ReplayResult`\n * summarizes how many frames dispatched / skipped / truncated.\n *\n * v0.1 scope (deliberately narrow):\n * - Only reconstructs MUTATE dispatches (matches @directive-run/timeline's\n * v0.1 dispatchable filter).\n * - The user's --system file must default-export a `System` instance,\n * OR export a named `createSystem`-shaped factory we can call.\n * - No assertion DSL today — the CLI prints the replay diagnostic.\n * Consumers writing assertions use `replayTimeline()` from the\n * library directly inside vitest, paired with R1.B matchers.\n *\n * v0.2 scope (deferred, see docs/IDEAS.md):\n * - `--as-test` flag emits a vitest source file that drives the same\n * replay loop with structured assertions.\n * - `--bisect <good.json>` for git-bisect over timeline frames.\n * - `--diff <other.json>` for causal-graph diff output.\n */\n\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport pc from \"picocolors\";\nimport { loadSystem } from \"../lib/loader.js\";\nimport { loadTimelinePackage } from \"../lib/timeline-loader.js\";\n\ninterface ReplayCliOptions {\n systemPath?: string;\n maxFrames?: number;\n json: boolean;\n dispatchableOnly: boolean;\n verbose: boolean;\n}\n\nfunction parseArgs(args: string[]): {\n jsonPath: string;\n opts: ReplayCliOptions;\n} {\n const opts: ReplayCliOptions = {\n json: false,\n dispatchableOnly: true,\n verbose: false,\n };\n let jsonPath = \"\";\n\n for (let i = 0; i < args.length; i++) {\n const arg = args[i];\n switch (arg) {\n case \"--system\":\n case \"-s\": {\n const val = args[++i];\n if (val) opts.systemPath = val;\n break;\n }\n case \"--max-frames\": {\n const val = args[++i];\n const n = val ? Number.parseInt(val, 10) : Number.NaN;\n if (Number.isFinite(n) && n > 0) opts.maxFrames = n;\n break;\n }\n case \"--all-frames\":\n case \"--no-dispatchable-only\":\n opts.dispatchableOnly = false;\n break;\n case \"--json\":\n opts.json = true;\n break;\n case \"--verbose\":\n case \"-v\":\n opts.verbose = true;\n break;\n default:\n if (arg && !arg.startsWith(\"-\") && !jsonPath) {\n jsonPath = arg;\n }\n }\n }\n\n return { jsonPath, opts };\n}\n\nfunction printUsage(): void {\n console.error(`\nUsage: directive replay <timeline.json> [options]\n\nReplay a serialized Directive timeline against a fresh system.\n\nArguments:\n <timeline.json> Path to a timeline produced by serializeTimeline()\n\nOptions:\n --system, -s <path> Path to a TypeScript file exporting a Directive\n system (default export or 'system' named export)\n --max-frames <n> Cap on frames replayed (default 100,000)\n --all-frames Walk every frame, not just dispatchable ones\n (diagnostic mode — most frames will skip silently)\n --json Emit ReplayResult as JSON\n --verbose, -v Print per-frame trace\n --help, -h Show this help\n\nExamples:\n directive replay bug-1234.json --system src/app/system.ts\n directive replay error.json --system src/system.ts --json\n directive replay error.json --system src/system.ts --verbose\n`);\n}\n\nexport async function replayCommand(args: string[]): Promise<void> {\n if (args.includes(\"--help\") || args.includes(\"-h\") || args.length === 0) {\n printUsage();\n process.exit(args.length === 0 ? 1 : 0);\n }\n\n const { jsonPath, opts } = parseArgs(args);\n\n if (!jsonPath) {\n console.error(pc.red(\"error: missing <timeline.json> argument\"));\n printUsage();\n process.exit(1);\n }\n if (!opts.systemPath) {\n console.error(\n pc.red(\"error: --system <path> is required\"),\n pc.dim(\"\\n (replay needs a fresh system to dispatch against)\"),\n );\n printUsage();\n process.exit(1);\n }\n\n const resolvedJson = resolve(jsonPath);\n if (!existsSync(resolvedJson)) {\n console.error(pc.red(`error: timeline file not found: ${resolvedJson}`));\n process.exit(1);\n }\n\n // Load the timeline JSON.\n let raw: string;\n try {\n raw = readFileSync(resolvedJson, \"utf8\");\n } catch (err) {\n console.error(\n pc.red(\n `error: failed to read ${resolvedJson}: ${(err as Error).message}`,\n ),\n );\n process.exit(1);\n }\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw);\n } catch (err) {\n console.error(\n pc.red(\n `error: ${resolvedJson} is not valid JSON: ${(err as Error).message}`,\n ),\n );\n process.exit(1);\n }\n\n // Lazy-import the timeline package — optional peer.\n const { deserializeTimeline, replayTimeline } = await loadTimelinePackage(\n opts.verbose,\n );\n\n // Validate + deserialize.\n let timeline: ReturnType<typeof deserializeTimeline>;\n try {\n timeline = deserializeTimeline(parsed);\n } catch (err) {\n console.error(\n pc.red(\n `error: timeline JSON failed validation: ${(err as Error).message}`,\n ),\n );\n process.exit(1);\n }\n\n // Load the user's system.\n let system: unknown;\n try {\n system = await loadSystem(opts.systemPath);\n } catch (err) {\n console.error(\n pc.red(`error: failed to load system file: ${(err as Error).message}`),\n );\n process.exit(1);\n }\n\n // Type-guard: replayTimeline needs a `dispatch` function.\n const sys = system as { dispatch?: unknown; start?: () => void };\n if (typeof sys.dispatch !== \"function\") {\n console.error(\n pc.red(\n `error: loaded system has no dispatch() method. The --system file must export a started Directive system or a factory.`,\n ),\n );\n process.exit(1);\n }\n\n // Start the system if it isn't already running. Many user files\n // export pre-started systems; double-start is safe (createSystem\n // handles it idempotently).\n if (typeof sys.start === \"function\") {\n try {\n sys.start();\n } catch {\n /* already running — fine */\n }\n }\n\n // Replay. The earlier `typeof sys.dispatch !== 'function'` guard\n // (line ~210) verifies the duck-type at runtime; the cast here just\n // bridges the unknown-typed loadSystem return to replayTimeline's\n // typed ReplayableSystem.\n const result = await replayTimeline(\n timeline,\n sys as {\n dispatch: (event: { type: string; [key: string]: unknown }) => void;\n },\n {\n dispatchableOnly: opts.dispatchableOnly,\n maxFrames: opts.maxFrames,\n },\n );\n\n if (opts.json) {\n console.log(JSON.stringify(result, null, 2));\n } else {\n const { dispatched, skipped, truncated } = result;\n const ok = dispatched > 0;\n console.log(\n `${ok ? pc.green(\"✓\") : pc.yellow(\"⚠\")} replay complete:`,\n pc.bold(`${dispatched} dispatched`),\n pc.dim(`/ ${skipped} skipped`),\n truncated > 0 ? pc.yellow(`/ ${truncated} TRUNCATED`) : \"\",\n );\n if (dispatched === 0) {\n console.error(\n pc.yellow(\n \"warning: 0 frames dispatched. Either the timeline contains only non-dispatchable frames (system lifecycle, derivations, etc.) or the system shape doesn't match what the timeline recorded.\",\n ),\n );\n }\n if (truncated > 0) {\n console.error(\n pc.yellow(\n `warning: ${truncated} frames truncated by --max-frames cap. Raise it with --max-frames <n> if you need them.`,\n ),\n );\n }\n }\n\n // Exit cleanly. The caller's tests / assertions can chain off this\n // exit status: 0 = replay completed (independent of dispatched count\n // — that's a metric, not a pass/fail).\n process.exit(0);\n}\n","/**\n * `directive timeline diff <a.json> <b.json>`\n *\n * Semantic causal-graph diff between two serialized timelines. Pairs\n * with `@directive-run/timeline`'s `diffTimelines()` (R2.C). Typical\n * flow:\n *\n * 1. Engineer captures two timelines: a known-good run + a\n * regression-bearing run.\n * 2. Run:\n * directive timeline diff good.json bad.json\n * 3. CLI prints a structured report — frame counts, constraint-fire\n * deltas, mutation deltas, resolver-run deltas, new errors.\n *\n * Output modes:\n * - default: human-readable Markdown-style table.\n * - --json: raw `TimelineDiff` for piping into jq / CI.\n *\n * Exit codes:\n * 0 → identical timelines\n * 1 → CLI argument error\n * 2 → diff found differences (CI gate friendly)\n */\n\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\n// R5 arch C2: import types directly from the timeline package. These\n// imports are fully erased at compile time (no runtime require), so the\n// optional-peer / lazy `await import()` pattern below is preserved\n// exactly. Sourcing the types from the package eliminates the silent\n// drift risk that would arise from re-declaring them here.\nimport type {\n CountDelta,\n ErrorDelta,\n ResolverRunDelta,\n} from \"@directive-run/timeline\";\nimport pc from \"picocolors\";\nimport { loadTimelinePackage } from \"../lib/timeline-loader.js\";\n\ninterface TimelineDiffCliOptions {\n json: boolean;\n verbose: boolean;\n}\n\nfunction parseArgs(args: string[]): {\n aPath: string;\n bPath: string;\n opts: TimelineDiffCliOptions;\n} {\n const opts: TimelineDiffCliOptions = { json: false, verbose: false };\n const positionals: string[] = [];\n for (let i = 0; i < args.length; i++) {\n const arg = args[i];\n switch (arg) {\n case \"--json\":\n opts.json = true;\n break;\n case \"--verbose\":\n case \"-v\":\n opts.verbose = true;\n break;\n default:\n if (arg && !arg.startsWith(\"-\")) positionals.push(arg);\n }\n }\n return {\n aPath: positionals[0] ?? \"\",\n bPath: positionals[1] ?? \"\",\n opts,\n };\n}\n\nfunction printUsage(): void {\n console.error(`\nUsage: directive timeline diff <a.json> <b.json>\n\nCompare two serialized Directive timelines as a structured causal-graph\ndiff. Reports frame counts, constraint-fire deltas, mutation deltas,\nresolver runs, and new errors.\n\nArguments:\n <a.json> First timeline (typically the \"good\" / baseline run)\n <b.json> Second timeline (typically the \"bad\" / regression run)\n\nOptions:\n --json Emit TimelineDiff as JSON\n -v, --verbose Include unchanged categories in the human output\n --help, -h Show this help\n\nExit codes:\n 0 identical timelines\n 1 CLI argument error\n 2 diff found differences\n\nExamples:\n directive timeline diff baseline.json regression.json\n directive timeline diff a.json b.json --json | jq .constraintFires\n`);\n}\n\nfunction fmtSign(n: number): string {\n if (n > 0) return pc.green(`+${n}`);\n if (n < 0) return pc.red(`${n}`);\n return pc.dim(\" 0\");\n}\n\nfunction fmtCountDelta(rows: CountDelta[]): string[] {\n if (rows.length === 0) return [pc.dim(\" (no differences)\")];\n return rows.map(\n (r) =>\n ` ${pc.bold(r.id.padEnd(28))} ${String(r.aCount).padStart(4)} → ${String(r.bCount).padStart(4)} (${fmtSign(r.delta)})`,\n );\n}\n\nfunction fmtResolverRows(rows: ResolverRunDelta[]): string[] {\n if (rows.length === 0) return [pc.dim(\" (no differences)\")];\n return rows.map(\n (r) =>\n ` ${pc.bold(r.resolver.padEnd(28))} ` +\n `starts ${r.aStarts}→${r.bStarts} (${fmtSign(r.bStarts - r.aStarts)}) ` +\n `completes ${r.aCompletes}→${r.bCompletes} (${fmtSign(r.bCompletes - r.aCompletes)}) ` +\n `errors ${r.aErrors}→${r.bErrors} (${fmtSign(r.bErrors - r.aErrors)})`,\n );\n}\n\nfunction fmtErrors(rows: ErrorDelta[]): string[] {\n if (rows.length === 0) return [pc.dim(\" (no new errors)\")];\n return rows.map((e) => {\n const sideTag = e.side === \"a\" ? pc.cyan(\"a-only\") : pc.yellow(\"b-only\");\n const errStr = (() => {\n try {\n return JSON.stringify(e.error);\n } catch {\n return `[${typeof e.error}]`;\n }\n })();\n return ` ${sideTag} frame #${e.frameIndex} ${pc.bold(e.kind)} '${e.id}' ${pc.dim(errStr)}`;\n });\n}\n\nfunction readTimeline(path: string): unknown {\n const resolved = resolve(path);\n if (!existsSync(resolved)) {\n console.error(pc.red(`error: timeline file not found: ${resolved}`));\n process.exit(1);\n }\n let raw: string;\n try {\n raw = readFileSync(resolved, \"utf8\");\n } catch (err) {\n console.error(\n pc.red(`error: failed to read ${resolved}: ${(err as Error).message}`),\n );\n process.exit(1);\n }\n try {\n return JSON.parse(raw);\n } catch (err) {\n console.error(\n pc.red(`error: ${resolved} is not valid JSON: ${(err as Error).message}`),\n );\n process.exit(1);\n }\n}\n\nexport async function timelineDiffCommand(args: string[]): Promise<void> {\n if (args.includes(\"--help\") || args.includes(\"-h\") || args.length === 0) {\n printUsage();\n process.exit(args.length === 0 ? 1 : 0);\n }\n\n const { aPath, bPath, opts } = parseArgs(args);\n if (!aPath || !bPath) {\n console.error(pc.red(\"error: both <a.json> and <b.json> are required\"));\n printUsage();\n process.exit(1);\n }\n\n // Lazy-import the timeline package — optional peer.\n const { deserializeTimeline, diffTimelines } = await loadTimelinePackage(\n opts.verbose,\n );\n\n // Parse + validate.\n const aRaw = readTimeline(aPath);\n const bRaw = readTimeline(bPath);\n let aTl: ReturnType<typeof deserializeTimeline>;\n let bTl: ReturnType<typeof deserializeTimeline>;\n try {\n aTl = deserializeTimeline(aRaw);\n bTl = deserializeTimeline(bRaw);\n } catch (err) {\n console.error(\n pc.red(\n `error: timeline JSON failed validation: ${(err as Error).message}`,\n ),\n );\n process.exit(1);\n }\n\n const diff = diffTimelines(aTl, bTl);\n\n if (opts.json) {\n console.log(JSON.stringify(diff, null, 2));\n process.exit(diff.identical ? 0 : 2);\n }\n\n // Human output.\n if (diff.identical) {\n console.log(\n pc.green(\"✓ identical:\"),\n `both timelines have ${diff.aFrameCount} frames and the same causal shape.`,\n );\n process.exit(0);\n }\n\n console.log(pc.bold(\"Timeline diff\"), pc.dim(`(${aPath} vs ${bPath})`));\n console.log(\"\");\n console.log(\n `Frames: ${diff.aFrameCount} → ${diff.bFrameCount} (${fmtSign(diff.frameCountDelta)})`,\n );\n console.log(\"\");\n\n console.log(pc.bold(\"Constraint fires:\"));\n for (const line of fmtCountDelta(diff.constraintFires)) console.log(line);\n console.log(\"\");\n\n console.log(pc.bold(\"Mutations:\"));\n for (const line of fmtCountDelta(diff.mutations)) console.log(line);\n console.log(\"\");\n\n console.log(pc.bold(\"Resolver runs:\"));\n for (const line of fmtResolverRows(diff.resolverRuns)) console.log(line);\n console.log(\"\");\n\n console.log(pc.bold(\"New errors:\"));\n for (const line of fmtErrors(diff.newErrors)) console.log(line);\n console.log(\"\");\n\n process.exit(2);\n}\n","import {\n aiRulesCheckCommand,\n aiRulesCommand,\n aiRulesUpdateCommand,\n} from \"./commands/ai-rules.js\";\nimport { bisectCommand } from \"./commands/bisect.js\";\nimport { doctorCommand } from \"./commands/doctor.js\";\nimport {\n examplesCopyCommand,\n examplesListCommand,\n} from \"./commands/examples.js\";\nimport { explainCommand } from \"./commands/explain.js\";\nimport { graphCommand } from \"./commands/graph.js\";\nimport { initCommand } from \"./commands/init.js\";\nimport { inspectCommand } from \"./commands/inspect.js\";\nimport { newModuleCommand, newOrchestratorCommand } from \"./commands/new.js\";\nimport { replayCommand } from \"./commands/replay.js\";\nimport { timelineDiffCommand } from \"./commands/timeline-diff.js\";\nimport { CLI_NAME } from \"./lib/constants.js\";\n\nconst HELP = `\n${CLI_NAME} — CLI tools for Directive\n\nUsage: ${CLI_NAME} <command> [options]\n\nCommands:\n init Project scaffolding wizard\n new module <name> Generate a module file\n new orchestrator <name> Generate an AI orchestrator\n inspect <file> Runtime system introspection\n explain <file> [req-id] Explain why a requirement exists\n graph <file> Visual dependency graph\n doctor Health check for project setup\n ai-rules init Install AI coding rules\n ai-rules update Refresh rules to latest version\n ai-rules check Validate rules are current (CI)\n examples list Browse available examples\n examples copy <name> Extract example to project\n replay <timeline.json> Replay a serialized Directive timeline\n (paired with @directive-run/timeline)\n bisect <timeline.json> Binary-search a timeline for the first\n frame that triggers a failing assertion\n timeline diff <a> <b> Semantic causal-graph diff between two\n serialized timelines\n\nOptions:\n --help, -h Show this help message\n --version, -v Show version\n\ninit options:\n --template <name> Template: counter, auth-flow, ai-orchestrator\n --dir <path> Target directory (default: cwd)\n --no-interactive Skip prompts, use defaults\n\nnew module options:\n --with <sections> Sections: derive,events,constraints,resolvers,effects\n --minimal Schema + init only\n --dir <path> Target directory (default: cwd)\n\ninspect options:\n --json Output as JSON\n --module <name> Inspect specific module\n\ngraph options:\n --ascii Terminal-only output\n --no-open Don't open in browser\n --output <path> Output file path\n\nai-rules init options:\n --force Overwrite existing files without asking\n --merge Use section markers to update only the Directive section\n --tool <name> Skip detection, install for specific tool(s)\n --dir <path> Target directory (default: cwd)\n\nexamples options:\n --filter <category> Filter by category or name\n --dest <dir> Destination directory for copy\n`.trim();\n\nasync function main() {\n const args = process.argv.slice(2);\n\n if (args.length === 0 || args.includes(\"--help\") || args.includes(\"-h\")) {\n console.log(HELP);\n process.exit(0);\n }\n\n if (args.includes(\"--version\") || args.includes(\"-v\")) {\n const { readFileSync } = await import(\"node:fs\");\n const { fileURLToPath } = await import(\"node:url\");\n const { dirname, join } = await import(\"node:path\");\n\n const __dirname = dirname(fileURLToPath(import.meta.url));\n const pkg = JSON.parse(\n readFileSync(join(__dirname, \"..\", \"package.json\"), \"utf-8\"),\n );\n\n console.log(pkg.version);\n process.exit(0);\n }\n\n const command = args[0];\n\n switch (command) {\n case \"init\": {\n await initCommand(args.slice(1));\n break;\n }\n\n case \"new\": {\n const subcommand = args[1];\n const name = args[2];\n\n if (subcommand === \"module\") {\n if (!name) {\n console.error(\"Usage: directive new module <name>\");\n process.exit(1);\n }\n await newModuleCommand(name, args.slice(3));\n } else if (subcommand === \"orchestrator\") {\n if (!name) {\n console.error(\"Usage: directive new orchestrator <name>\");\n process.exit(1);\n }\n await newOrchestratorCommand(name, args.slice(3));\n } else {\n console.error(\n `Unknown subcommand: ${subcommand ?? \"(none)\"}\\n` +\n `Usage: ${CLI_NAME} new module <name>\\n` +\n ` ${CLI_NAME} new orchestrator <name>`,\n );\n process.exit(1);\n }\n break;\n }\n\n case \"inspect\": {\n await inspectCommand(args.slice(1));\n break;\n }\n\n case \"explain\": {\n await explainCommand(args.slice(1));\n break;\n }\n\n case \"graph\": {\n await graphCommand(args.slice(1));\n break;\n }\n\n case \"doctor\": {\n await doctorCommand(args.slice(1));\n break;\n }\n\n case \"ai-rules\": {\n const subcommand = args[1];\n\n if (subcommand === \"init\") {\n await aiRulesCommand(args.slice(2));\n } else if (subcommand === \"update\") {\n await aiRulesUpdateCommand(args.slice(2));\n } else if (subcommand === \"check\") {\n await aiRulesCheckCommand(args.slice(2));\n } else {\n console.error(\n `Unknown subcommand: ${subcommand ?? \"(none)\"}\\n` +\n `Usage: ${CLI_NAME} ai-rules init\\n` +\n ` ${CLI_NAME} ai-rules update\\n` +\n ` ${CLI_NAME} ai-rules check`,\n );\n process.exit(1);\n }\n break;\n }\n\n case \"examples\": {\n const subcommand = args[1];\n\n if (subcommand === \"list\") {\n await examplesListCommand(args.slice(2));\n } else if (subcommand === \"copy\") {\n const name = args[2];\n if (!name) {\n console.error(\"Usage: directive examples copy <name>\");\n process.exit(1);\n }\n await examplesCopyCommand(name, args.slice(3));\n } else {\n console.error(\n `Unknown subcommand: ${subcommand ?? \"(none)\"}\\n` +\n `Usage: ${CLI_NAME} examples list [--filter <category>]\\n` +\n ` ${CLI_NAME} examples copy <name> [--dest <dir>]`,\n );\n process.exit(1);\n }\n break;\n }\n\n case \"replay\": {\n await replayCommand(args.slice(1));\n break;\n }\n\n case \"bisect\": {\n await bisectCommand(args.slice(1));\n break;\n }\n\n case \"timeline\": {\n const subcommand = args[1];\n if (subcommand === \"diff\") {\n await timelineDiffCommand(args.slice(2));\n } else {\n console.error(\n `Unknown subcommand: ${subcommand ?? \"(none)\"}\\n` +\n `Usage: ${CLI_NAME} timeline diff <a.json> <b.json>`,\n );\n process.exit(1);\n }\n break;\n }\n\n default:\n console.error(\n `Unknown command: ${command}\\nRun '${CLI_NAME} --help' for usage.`,\n );\n process.exit(1);\n }\n}\n\nmain().catch((err) => {\n console.error(err.message || err);\n process.exit(1);\n});\n"]}
|