floorp-mcp 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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;GAOG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAgB,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACxG,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACzF,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5C,MAAM,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;AAElC,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;IAC3B,IAAI,EAAE,YAAY;IAClB,OAAO,EAAE,OAAO;CACjB,CAAC,CAAC;AAEH,gFAAgF;AAChF,8EAA8E;AAC9E,gEAAgE;AAEhE,SAAS,UAAU,CAAC,IAAY;IAC9B,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AACxD,CAAC;AAED,SAAS,WAAW,CAAC,OAAe;IAClC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,UAAU,OAAO,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC5F,CAAC;AAED;;;;;;;gDAOgD;AAChD,KAAK,UAAU,eAAe,CAC5B,SAA6B,EAC7B,EAAoD,EACpD,OAA8B,EAAE;IAEhC,IAAI,GAAY,CAAC;IAEjB,IAAI,SAAS,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAC/B,iEAAiE;QACjE,IAAI,MAAM,CAAC,SAAS,CAAC,KAAK,GAAG,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CACb,8DAA8D;gBAC5D,qDAAqD,CACxD,CAAC;QACJ,CAAC;QACD,GAAG,GAAG,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAC3G,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,SAAS;YACrB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,MAAM,CAAC,SAAS,CAAC,CAAC;YACrD,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QACjC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CACb,SAAS;gBACP,CAAC,CAAC,yBAAyB,SAAS,sCAAsC;gBAC1E,CAAC,CAAC,sBAAsB,CAC3B,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,SAAS,KAAK,GAAG,EAAE,CAAC;YAChD,MAAM,IAAI,KAAK,CACb,QAAQ,KAAK,CAAC,KAAK,gDAAgD;gBACjE,qDAAqD,CACxD,CAAC;QACJ,CAAC;QACD,GAAG,GAAG,KAAK,CAAC;IACd,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACtD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CACb,sCAAsC,GAAG,CAAC,SAAS,KAAK;YACtD,oDAAoD,CACvD,CAAC;IACJ,CAAC;IACD,IAAI,CAAC;QACH,OAAO,MAAM,EAAE,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;IACnC,CAAC;YAAS,CAAC;QACT,MAAM,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAClD,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,IAAe;IACpC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,eAAe,CAAC;IAC9C,OAAO,IAAI;SACR,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACZ,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;aACrE,MAAM,CAAC,OAAO,CAAC;aACf,IAAI,CAAC,IAAI,CAAC,CAAC;QACd,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3C,OAAO,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,YAAY,GAAG,MAAM,QAAQ,CAAC,CAAC,GAAG,mBAAmB,CAAC,CAAC,SAAS,EAAE,CAAC;IACpG,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED,gFAAgF;AAEhF,MAAM,CAAC,IAAI,CACT,WAAW,EACX,sIAAsI,EACtI,EAAE,EACF,KAAK,IAAI,EAAE;IACT,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAC;QACrC,OAAO,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;IACzC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,WAAW,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,UAAU,EACV,iCAAiC,EACjC;IACE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,qDAAqD,CAAC;IACrF,UAAU,EAAE,CAAC;SACV,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CAAC,sEAAsE,CAAC;CACpF,EACD,KAAK,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,EAAE;IAC5B,IAAI,CAAC;QACH,kBAAkB,CAAC,GAAG,CAAC,CAAC;QACxB,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,UAAU,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;QAClF,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,SAAS,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YAChD,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC;YAC3B,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC;YACzB,MAAM,CAAC,oBAAoB,CAAC,UAAU,CAAC;SACxC,CAAC,CAAC;QACH,0DAA0D;QAC1D,MAAM,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAChD,OAAO,UAAU,CACf,WAAW,KAAK,IAAI,YAAY,KAAK,GAAG,IAAI,GAAG,EAAE;YAC/C,CAAC,SAAS;gBACR,CAAC,CAAC,gBAAgB,SAAS,yFAAyF;gBACpH,CAAC,CAAC,EAAE,CAAC,CACV,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,WAAW,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,gBAAgB,EAChB,wLAAwL,EACxL,EAAE,EACF,KAAK,IAAI,EAAE;IACT,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,SAAS,EAAE,CAAC;QACrC,OAAO,UAAU,CAAC,GAAG,GAAG,CAAC,KAAK,IAAI,YAAY,KAAK,GAAG,CAAC,GAAG,gBAAgB,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC;IAC7F,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,WAAW,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,cAAc,EACd,kFAAkF,EAClF;IACE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;IACzD,SAAS,EAAE,CAAC;SACT,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,gFAAgF,CAAC;CAC9F,EACD,KAAK,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE;IAC3B,IAAI,CAAC;QACH,kBAAkB,CAAC,GAAG,CAAC,CAAC;QACxB,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE;YACnE,MAAM,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;YACvC,OAAO,MAAM,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;QACH,OAAO,UAAU,CAAC,gBAAgB,MAAM,IAAI,GAAG,EAAE,CAAC,CAAC;IACrD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,WAAW,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,WAAW,EACX,gDAAgD,EAChD;IACE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iDAAiD,CAAC;CAClF,EACD,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;IACtB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;QAChE,IAAI,CAAC,GAAG;YAAE,OAAO,WAAW,CAAC,yBAAyB,SAAS,GAAG,CAAC,CAAC;QACpE,IAAI,CAAC,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,SAAS,KAAK,GAAG,EAAE,CAAC;YAC5C,OAAO,WAAW,CAAC,QAAQ,GAAG,CAAC,KAAK,6CAA6C,CAAC,CAAC;QACrF,CAAC;QACD,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACtD,IAAI,CAAC,UAAU;YAAE,OAAO,WAAW,CAAC,4BAA4B,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC;QAC/E,MAAM,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAClC,OAAO,UAAU,CAAC,WAAW,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;IACvD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,WAAW,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,WAAW,EACX,uRAAuR,EACvR;IACE,SAAS,EAAE,CAAC;SACT,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,4EAA4E,CAAC;IACzF,MAAM,EAAE,CAAC;SACN,IAAI,CAAC,CAAC,UAAU,EAAE,MAAM,EAAE,eAAe,CAAC,CAAC;SAC3C,QAAQ,EAAE;SACV,QAAQ,CAAC,mCAAmC,CAAC;IAChD,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,GAAG,EAAE;SACL,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,SAAS,CAAC;SACd,QAAQ,EAAE;SACV,QAAQ,CAAC,4EAA4E,CAAC;CAC1F,EACD,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE;IACxC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,EAAE;YACzE,MAAM,MAAM,GAAG,KAAK,GAAG,CAAC,KAAK,IAAI,YAAY,KAAK,GAAG,CAAC,GAAG,MAAM,CAAC;YAChE,IAAI,MAAM,KAAK,MAAM;gBAAE,OAAO,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;YAC1E,IAAI,MAAM,KAAK,eAAe,EAAE,CAAC;gBAC/B,OAAO,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,MAAM,CAAC,oBAAoB,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YACzF,CAAC;YACD,OAAO,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;QACrD,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QACtB,MAAM,GAAG,GAAG,QAAQ,IAAI,KAAK,CAAC;QAC9B,IAAI,GAAG,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;YACpC,OAAO,UAAU,CACf,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;gBACnB,mBAAmB,OAAO,CAAC,MAAM,GAAG,GAAG,OAAO,OAAO,CAAC,MAAM,UAAU;gBACtE,gFAAgF,CACnF,CAAC;QACJ,CAAC;QACD,OAAO,UAAU,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,WAAW,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,YAAY,EACZ,8GAA8G,EAC9G;IACE,SAAS,EAAE,CAAC;SACT,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,+EAA+E,CAAC;IAC5F,QAAQ,EAAE,CAAC;SACR,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CAAC,gFAAgF,CAAC;CAC9F,EACD,KAAK,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE;IAChC,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,eAAe,CAAC,SAAS,EAAE,CAAC,UAAU,EAAE,GAAG,EAAE,EAAE;YACjE,IAAI,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACpC,MAAM,IAAI,KAAK,CACb,gDAAgD,GAAG,CAAC,GAAG,KAAK;oBAC1D,oDAAoD,CACvD,CAAC;YACJ,CAAC;YACD,OAAO,QAAQ;gBACb,CAAC,CAAC,MAAM,CAAC,kBAAkB,CAAC,UAAU,CAAC;gBACvC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QACpC,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QACtB,IAAI,CAAC,KAAK;YAAE,OAAO,WAAW,CAAC,2BAA2B,CAAC,CAAC;QAC5D,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,OAAgB,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;SAC1E,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,WAAW,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,MAAM,EACN,mYAAmY,EACnY;IACE,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,sDAAsD,CAAC;IACnE,GAAG,EAAE,CAAC;SACH,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,2DAA2D,CAAC;IACxE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;IAClG,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kDAAkD,CAAC;CAC9F,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE;IACxC,IAAI,CAAC;QACH,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG;YAAE,OAAO,WAAW,CAAC,4CAA4C,CAAC,CAAC;QACpF,MAAM,IAAI,GAAG,MAAM,eAAe,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;QAC1E,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,EAAE,CAAC,CAAC;QAClE,IAAI,CAAC,KAAK,CAAC,MAAM;YAAE,OAAO,UAAU,CAAC,6BAA6B,CAAC,CAAC;QACpE,OAAO,UAAU,CACf,GAAG,KAAK,CAAC,MAAM,uCAAuC;YACpD,KAAK;iBACF,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,QAAQ,QAAQ,CAAC,CAAC,GAAG,QAAQ,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC;iBACnF,IAAI,CAAC,IAAI,CAAC,CAChB,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,WAAW,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,OAAO,EACP,iNAAiN,EACjN;IACE,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,wDAAwD,CAAC;IACrE,GAAG,EAAE,CAAC;SACH,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,2FAA2F,CAAC;IACxG,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kDAAkD,CAAC;IAC7F,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;CAChG,EACD,KAAK,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE;IAC7C,IAAI,CAAC;QACH,IAAI,CAAC,QAAQ,IAAI,CAAC,GAAG;YAAE,OAAO,WAAW,CAAC,kCAAkC,CAAC,CAAC;QAC9E,MAAM,eAAe,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;QACnG,OAAO,UAAU,CAAC,YAAY,QAAQ,IAAI,OAAO,GAAG,EAAE,EAAE,CAAC,CAAC;IAC5D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,WAAW,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,UAAU,EACV,iSAAiS,EACjS;IACE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kDAAkD,CAAC;CAC9F,EACD,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;IACtB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,eAAe,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3E,OAAO,UAAU,CAAC,IAAI,IAAI,cAAc,CAAC,CAAC;IAC5C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,WAAW,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,WAAW,EACX,uIAAuI,EACvI;IACE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;IACpE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC;IAC3D,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+CAA+C,CAAC;IACvF,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kDAAkD,CAAC;CAC9F,EACD,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE;IAC7C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE;YAC3D,IAAI,KAAK,KAAK,KAAK;gBAAE,MAAM,MAAM,CAAC,UAAU,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YAC3E,IAAI,CAAC;gBACH,MAAM,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;gBACvC,OAAO,OAAO,CAAC;YACjB,CAAC;YAAC,MAAM,CAAC;gBACP,wEAAwE;gBACxE,oEAAoE;gBACpE,MAAM,MAAM,CAAC,iBAAiB,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;gBACnD,OAAO,WAAW,CAAC;YACrB,CAAC;QACH,CAAC,CAAC,CAAC;QACH,OAAO,UAAU,CAAC,cAAc,QAAQ,KAAK,MAAM,IAAI,CAAC,CAAC;IAC3D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,WAAW,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,WAAW,EACX,gJAAgJ,EAChJ;IACE,MAAM,EAAE,CAAC;SACN,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;SACrD,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,GAAG,EAAE,EAAE,OAAO,EAAE,4BAA4B,EAAE,CAAC;SACtF,QAAQ,CAAC,qFAAqF,CAAC;IAClG,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kDAAkD,CAAC;CAC9F,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE;IAC9B,IAAI,CAAC;QACH,MAAM,eAAe,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;QACtE,OAAO,UAAU,CAAC,UAAU,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,YAAY,CAAC,CAAC;IACtE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,WAAW,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,WAAW,EACX,oIAAoI,EACpI;IACE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,yBAAyB,CAAC;IAC5D,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kDAAkD,CAAC;CAC9F,EACD,KAAK,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE;IAC3B,IAAI,CAAC;QACH,MAAM,eAAe,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;QACnE,OAAO,UAAU,CAAC,YAAY,GAAG,EAAE,CAAC,CAAC;IACvC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,WAAW,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,kBAAkB,EAClB,sIAAsI,EACtI;IACE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;IAC1D,KAAK,EAAE,CAAC;SACL,IAAI,CAAC,CAAC,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;SACnD,QAAQ,EAAE;SACV,QAAQ,CAAC,sCAAsC,CAAC;IACnD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;IAC9G,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kDAAkD,CAAC;CAC9F,EACD,KAAK,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE;IAClD,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,eAAe,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CACpD,MAAM,CAAC,cAAc,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,CAAC,CACtD,CAAC;QACF,OAAO,KAAK;YACV,CAAC,CAAC,UAAU,CAAC,YAAY,QAAQ,QAAQ,KAAK,IAAI,SAAS,GAAG,CAAC;YAC/D,CAAC,CAAC,WAAW,CAAC,0BAA0B,QAAQ,IAAI,CAAC,CAAC;IAC1D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,WAAW,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,WAAW,EACX,0TAA0T,EAC1T;IACE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;IACnE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kDAAkD,CAAC;CAC9F,EACD,KAAK,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE;IAChC,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,eAAe,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC;QACtF,OAAO,UAAU,CAAC,KAAK,IAAI,YAAY,CAAC,CAAC;IAC3C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,WAAW,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC,CACF,CAAC;AAEF,gFAAgF;AAChF,iFAAiF;AACjF,+EAA+E;AAC/E,iFAAiF;AACjF,8EAA8E;AAE9E,MAAM,CAAC,IAAI,CACT,WAAW,EACX,8UAA8U,EAC9U;IACE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,yCAAyC,CAAC;CAClF,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;IACjB,IAAI,CAAC;QACH,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;QACrB,OAAO,UAAU,CAAC,0BAA0B,IAAI,CAAC,MAAM,SAAS,CAAC,CAAC;IACpE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,WAAW,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,UAAU,EACV,qNAAqN,EACrN;IACE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,yCAAyC,CAAC;CAC7E,EACD,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE;IAChB,IAAI,CAAC;QACH,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC;QACnB,OAAO,UAAU,CAAC,4BAA4B,GAAG,EAAE,CAAC,CAAC;IACvD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,WAAW,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,YAAY,EACZ,mMAAmM,EACnM,EAAE,EACF,KAAK,IAAI,EAAE;IACT,IAAI,CAAC;QACH,MAAM,SAAS,EAAE,CAAC;QAClB,OAAO,UAAU,CAAC,wCAAwC,CAAC,CAAC;IAC9D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,WAAW,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC,CACF,CAAC;AAEF,gFAAgF;AAEhF,SAAS,UAAU,CAAC,QAAiB,EAAE,GAAY;IACjD,OAAO,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,CAAC,IAAI,CACT,OAAO,EACP,qHAAqH,EACrH;IACE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;IACzD,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;IACrE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;CAC7E,EACD,KAAK,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE;IACrC,IAAI,CAAC;QACH,IAAI,CAAC,QAAQ,IAAI,CAAC,GAAG;YAAE,OAAO,WAAW,CAAC,kCAAkC,CAAC,CAAC;QAC9E,MAAM,eAAe,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC;QAC1E,OAAO,UAAU,CAAC,YAAY,UAAU,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;IAC7D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,WAAW,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,cAAc,EACd,6GAA6G,EAC7G;IACE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;IACzD,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;IACrE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;CAC7E,EACD,KAAK,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE;IACrC,IAAI,CAAC;QACH,IAAI,CAAC,QAAQ,IAAI,CAAC,GAAG;YAAE,OAAO,WAAW,CAAC,kCAAkC,CAAC,CAAC;QAC9E,MAAM,eAAe,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC;QAChF,OAAO,UAAU,CAAC,mBAAmB,UAAU,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;IACpE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,WAAW,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,aAAa,EACb,2HAA2H,EAC3H;IACE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;IACzD,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;IACrE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;CAC7E,EACD,KAAK,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE;IACrC,IAAI,CAAC;QACH,IAAI,CAAC,QAAQ,IAAI,CAAC,GAAG;YAAE,OAAO,WAAW,CAAC,kCAAkC,CAAC,CAAC;QAC9E,MAAM,eAAe,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC;QAC/E,OAAO,UAAU,CAAC,kBAAkB,UAAU,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;IACnE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,WAAW,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,eAAe,EACf,0FAA0F,EAC1F;IACE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;IAC9D,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+CAA+C,CAAC;IAC3E,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;CAC7E,EACD,KAAK,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE;IACvC,IAAI,CAAC;QACH,MAAM,eAAe,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;QACnF,OAAO,UAAU,CAAC,aAAa,KAAK,QAAQ,QAAQ,EAAE,CAAC,CAAC;IAC1D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,WAAW,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,aAAa,EACb,uEAAuE,EACvE;IACE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;IACpE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;IACjE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;CAC7E,EACD,KAAK,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE;IACzC,IAAI,CAAC;QACH,MAAM,eAAe,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;QACnF,OAAO,UAAU,CAAC,OAAO,QAAQ,YAAY,OAAO,EAAE,CAAC,CAAC;IAC1D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,WAAW,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,aAAa,EACb,uIAAuI,EACvI;IACE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4CAA4C,CAAC;IACtF,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;CAC7E,EACD,KAAK,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE;IAChC,IAAI,CAAC;QACH,MAAM,eAAe,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC;QAC1E,OAAO,UAAU,CAAC,cAAc,QAAQ,IAAI,MAAM,EAAE,CAAC,CAAC;IACxD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,WAAW,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,aAAa,EACb,2QAA2Q,EAC3Q;IACE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;IAChE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4CAA4C,CAAC;IAC3E,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;CAC7E,EACD,KAAK,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE;IAC1C,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QAC/C,MAAM,eAAe,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;QACpF,OAAO,UAAU,CAAC,OAAO,QAAQ,OAAO,QAAQ,EAAE,CAAC,CAAC;IACtD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,WAAW,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,eAAe,EACf,oGAAoG,EACpG;IACE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;IAC3D,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;IACzD,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;IACrE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;CAC7E,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE;IAC3C,IAAI,CAAC;QACH,IAAI,CAAC,QAAQ,IAAI,CAAC,GAAG;YAAE,OAAO,WAAW,CAAC,kCAAkC,CAAC,CAAC;QAC9E,MAAM,CAAC,GAAG,MAAM,eAAe,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC;QACjG,OAAO,UAAU,CAAC,CAAC,IAAI,gBAAgB,CAAC,CAAC;IAC3C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,WAAW,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,aAAa,EACb,gKAAgK,EAChK;IACE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;CAC7E,EACD,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;IACtB,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,MAAM,eAAe,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;QAC1E,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ;YAAE,OAAO,WAAW,CAAC,yCAAyC,CAAC,CAAC;QACrF,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,KAAK,IAAI,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC;QACpF,OAAO,UAAU,CAAC,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;IACvC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,WAAW,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,aAAa,EACb,2OAA2O,EAC3O;IACE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;IAC5E,aAAa,EAAE,CAAC;SACb,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CAAC,gFAAgF,CAAC;CAC9F,EACD,KAAK,EAAE,EAAE,SAAS,EAAE,aAAa,EAAE,EAAE,EAAE;IACrC,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,MAAM,eAAe,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;QAC1E,MAAM,GAAG,GAAG,aAAa;YACvB,CAAC,CAAC,CAAC;YACH,CAAC,CAAE,CAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACzB,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,IAAK,CAA6B;gBACrE,CAAC,CAAC;oBACE,GAAI,CAA6B;oBACjC,KAAK,EAAE,aAAa,MAAM,CAAE,CAA6B,CAAC,KAAK,CAAC,CAAC,MAAM,mDAAmD;iBAC3H;gBACH,CAAC,CAAC,CAAC,CACN,CAAC;QACN,OAAO,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAClD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,WAAW,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,uBAAuB,EACvB,6HAA6H,EAC7H;IACE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;IACrG,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;CAC7E,EACD,KAAK,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE;IACjC,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,MAAM,eAAe,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,kBAAkB,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC;QAC9F,OAAO,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,sCAAsC,CAAC,CAAC;IACnG,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,WAAW,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,iBAAiB,EACjB,wDAAwD,EACxD,EAAE,EACF,KAAK,IAAI,EAAE;IACT,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,EAAE,CAAC;QACzC,IAAI,CAAC,EAAE,CAAC,MAAM;YAAE,OAAO,UAAU,CAAC,gBAAgB,CAAC,CAAC;QACpD,OAAO,UAAU,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACpE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,GAAI,GAAa,CAAC,OAAO,CAAC;QACjC,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7B,OAAO,WAAW,CAAC,0DAA0D,CAAC,CAAC;QACjF,CAAC;QACD,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC;IACxB,CAAC;AACH,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,kBAAkB,EAClB,6EAA6E,EAC7E;IACE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;CACzC,EACD,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IACf,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;QAC5C,OAAO,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,yBAAyB,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;IACxF,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,GAAI,GAAa,CAAC,OAAO,CAAC;QACjC,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7B,OAAO,WAAW,CAAC,0DAA0D,CAAC,CAAC;QACjF,CAAC;QACD,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC;IACxB,CAAC;AACH,CAAC,CACF,CAAC;AAEF,gFAAgF;AAChF,6EAA6E;AAC7E,2EAA2E;AAC3E,2EAA2E;AAE3E,MAAM,CAAC,IAAI,CACT,eAAe,EACf,0KAA0K,EAC1K,EAAE,EACF,KAAK,IAAI,EAAE;IACT,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,MAAM,kBAAkB,EAAE,CAAC;QACrC,OAAO,UAAU,CACf,mCAAmC,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,KAAK,WAAW,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,MAAM,GAAG,CACtH,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,WAAW,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,aAAa,EACb,wLAAwL,EACxL;IACE,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,oBAAoB,CAAC;IAC7E,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,oBAAoB,CAAC;CAC9E,EACD,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE;IACjB,IAAI,CAAC;QACH,MAAM,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACvB,OAAO,UAAU,CAAC,oBAAoB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACrD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,WAAW,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,YAAY,EACZ,uNAAuN,EACvN;IACE,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,oBAAoB,CAAC;IAC7E,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,oBAAoB,CAAC;IAC7E,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;IACrF,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;CACzE,EACD,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE;IACjC,IAAI,CAAC;QACH,MAAM,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAC1C,OAAO,UAAU,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/G,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,WAAW,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC,CACF,CAAC;AAEF,MAAM,CAAC,IAAI,CACT,eAAe,EACf,2MAA2M,EAC3M,EAAE,EACF,KAAK,IAAI,EAAE;IACT,IAAI,CAAC;QACH,OAAO,UAAU,CAAC,MAAM,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;IAChD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,WAAW,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC,CACF,CAAC;AAEF,gFAAgF;AAEhF,KAAK,UAAU,IAAI;IACjB,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,2DAA2D;IAC3D,OAAO,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;AACtD,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IAC7B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Launch Floorp if it isn't already running (Windows).
3
+ *
4
+ * "Ensure running" semantics: if the automation API is already reachable we do
5
+ * nothing; otherwise we spawn the Floorp executable and poll until the API on
6
+ * 127.0.0.1:58261 responds (or time out). Set FLOORP_PATH to override the exe.
7
+ */
8
+ import type { FloorpClient } from "./floorp-client.js";
9
+ export declare function launchFloorp(client: FloorpClient): Promise<string>;
package/dist/launch.js ADDED
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Launch Floorp if it isn't already running (Windows).
3
+ *
4
+ * "Ensure running" semantics: if the automation API is already reachable we do
5
+ * nothing; otherwise we spawn the Floorp executable and poll until the API on
6
+ * 127.0.0.1:58261 responds (or time out). Set FLOORP_PATH to override the exe.
7
+ */
8
+ import { spawn } from "node:child_process";
9
+ import { existsSync } from "node:fs";
10
+ const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
11
+ function findFloorpExe() {
12
+ const candidates = [
13
+ process.env.FLOORP_PATH,
14
+ "C:\\Program Files\\Ablaze Floorp\\floorp.exe",
15
+ "C:\\Program Files (x86)\\Ablaze Floorp\\floorp.exe",
16
+ process.env.LOCALAPPDATA
17
+ ? `${process.env.LOCALAPPDATA}\\Ablaze Floorp\\floorp.exe`
18
+ : undefined,
19
+ ].filter((p) => typeof p === "string" && p.length > 0);
20
+ return candidates.find((p) => existsSync(p)) ?? null;
21
+ }
22
+ export async function launchFloorp(client) {
23
+ if (await client.health()) {
24
+ return "Floorp is already running and its automation API is reachable.";
25
+ }
26
+ if (process.platform !== "win32") {
27
+ throw new Error("launch_floorp is currently Windows-only.");
28
+ }
29
+ const exe = findFloorpExe();
30
+ if (!exe) {
31
+ throw new Error("Could not find floorp.exe. Set the FLOORP_PATH environment variable to its full path.");
32
+ }
33
+ spawn(exe, [], { detached: true, stdio: "ignore" }).unref();
34
+ for (let i = 0; i < 30; i++) {
35
+ await sleep(1000);
36
+ if (await client.health()) {
37
+ return `Launched Floorp (${exe}); automation API is up after ~${i + 1}s.`;
38
+ }
39
+ }
40
+ throw new Error("Launched Floorp, but its automation API (127.0.0.1:58261) didn't come up within 30s. " +
41
+ "Make sure 'floorp.mcp.enabled' is set to true in about:config.");
42
+ }
43
+ //# sourceMappingURL=launch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"launch.js","sourceRoot":"","sources":["../src/launch.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAGrC,MAAM,KAAK,GAAG,CAAC,EAAU,EAAE,EAAE,CAAC,IAAI,OAAO,CAAO,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AAE1E,SAAS,aAAa;IACpB,MAAM,UAAU,GAAG;QACjB,OAAO,CAAC,GAAG,CAAC,WAAW;QACvB,8CAA8C;QAC9C,oDAAoD;QACpD,OAAO,CAAC,GAAG,CAAC,YAAY;YACtB,CAAC,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,6BAA6B;YAC1D,CAAC,CAAC,SAAS;KACd,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACpE,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;AACvD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,MAAoB;IACrD,IAAI,MAAM,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;QAC1B,OAAO,gEAAgE,CAAC;IAC1E,CAAC;IACD,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAC9D,CAAC;IACD,MAAM,GAAG,GAAG,aAAa,EAAE,CAAC;IAC5B,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CACb,uFAAuF,CACxF,CAAC;IACJ,CAAC;IACD,KAAK,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;IAE5D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5B,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;QAClB,IAAI,MAAM,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;YAC1B,OAAO,oBAAoB,GAAG,kCAAkC,CAAC,GAAG,CAAC,IAAI,CAAC;QAC5E,CAAC;IACH,CAAC;IACD,MAAM,IAAI,KAAK,CACb,uFAAuF;QACrF,gEAAgE,CACnE,CAAC;AACJ,CAAC"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * OS-level keyboard & mouse input for Floorp (Windows only).
3
+ *
4
+ * Why: synthetic DOM events (Floorp's /input, dispatchTextInput) don't reliably
5
+ * sync React/Slate-controlled editors, so submits silently fail. Real OS key
6
+ * events (isTrusted=true) are processed exactly like a human typing, which fixes
7
+ * rich-editor typing AND form submission — on the user's *live* session.
8
+ *
9
+ * SAFETY (non-negotiable): OS keystrokes/clicks go to whatever window is in the
10
+ * foreground. So before sending ANY input we:
11
+ * 1. require a Floorp window to exist,
12
+ * 2. bring it to the foreground,
13
+ * 3. VERIFY it is actually foreground,
14
+ * 4. abort WITHOUT sending input if verification fails.
15
+ * For the mouse we ALSO require the (x,y) to be inside Floorp's window rect.
16
+ *
17
+ * PERFORMANCE: spawning powershell.exe costs ~700ms and compiling the P/Invoke
18
+ * helper (Add-Type) another ~600ms — so a fresh process per call was ~1.9s. We
19
+ * instead keep ONE persistent PowerShell host: it compiles the helper + loads
20
+ * WinForms once, then runs a read-eval loop over stdin, so each subsequent call
21
+ * is just the foreground guard + SendKeys (~200-400ms). The safety guard still
22
+ * runs on every command. Requests are serialised (OS input is inherently serial).
23
+ * If the host dies or a command times out, it is respawned on the next call.
24
+ */
25
+ /** Type text into Floorp's focused element via real OS key events. */
26
+ export declare function realType(text: string): Promise<void>;
27
+ /** Translate "Enter", "Tab", "ctrl+a", "ctrl+shift+k" → SendKeys notation. */
28
+ export declare function toSendKeys(key: string): string;
29
+ /** Press a single key or combo via real OS key events. */
30
+ export declare function realKey(key: string): Promise<void>;
31
+ /** Select-all + delete via real OS key events (clears rich/contenteditable fields). */
32
+ export declare function realClear(): Promise<void>;
33
+ /** Move the real OS cursor to a screen pixel (must be inside the Floorp window). */
34
+ export declare function moveCursor(x: number, y: number): Promise<void>;
35
+ /** Real OS mouse click at a screen pixel inside the Floorp window. */
36
+ export declare function realClick(x: number, y: number, opts?: {
37
+ button?: "left" | "right";
38
+ double?: boolean;
39
+ }): Promise<void>;
40
+ /** Floorp window rectangle in screen pixels (so callers can target real_click). */
41
+ export declare function floorpWindowBounds(): Promise<{
42
+ left: number;
43
+ top: number;
44
+ right: number;
45
+ bottom: number;
46
+ width: number;
47
+ height: number;
48
+ }>;
@@ -0,0 +1,339 @@
1
+ /**
2
+ * OS-level keyboard & mouse input for Floorp (Windows only).
3
+ *
4
+ * Why: synthetic DOM events (Floorp's /input, dispatchTextInput) don't reliably
5
+ * sync React/Slate-controlled editors, so submits silently fail. Real OS key
6
+ * events (isTrusted=true) are processed exactly like a human typing, which fixes
7
+ * rich-editor typing AND form submission — on the user's *live* session.
8
+ *
9
+ * SAFETY (non-negotiable): OS keystrokes/clicks go to whatever window is in the
10
+ * foreground. So before sending ANY input we:
11
+ * 1. require a Floorp window to exist,
12
+ * 2. bring it to the foreground,
13
+ * 3. VERIFY it is actually foreground,
14
+ * 4. abort WITHOUT sending input if verification fails.
15
+ * For the mouse we ALSO require the (x,y) to be inside Floorp's window rect.
16
+ *
17
+ * PERFORMANCE: spawning powershell.exe costs ~700ms and compiling the P/Invoke
18
+ * helper (Add-Type) another ~600ms — so a fresh process per call was ~1.9s. We
19
+ * instead keep ONE persistent PowerShell host: it compiles the helper + loads
20
+ * WinForms once, then runs a read-eval loop over stdin, so each subsequent call
21
+ * is just the foreground guard + SendKeys (~200-400ms). The safety guard still
22
+ * runs on every command. Requests are serialised (OS input is inherently serial).
23
+ * If the host dies or a command times out, it is respawned on the next call.
24
+ */
25
+ import { spawn } from "node:child_process";
26
+ // ---------------------------------------------------------------------------
27
+ // Persistent PowerShell host
28
+ // ---------------------------------------------------------------------------
29
+ // The host script: define the P/Invoke helper + WinForms ONCE, then loop reading
30
+ // our line protocol from stdin and writing "RESP:<token>:<result>" to stdout.
31
+ // Request payloads arrive as base64 (safe charset, no spaces) so they can never
32
+ // break the protocol or be interpreted as PowerShell.
33
+ const HOST_SCRIPT = `
34
+ $ErrorActionPreference = 'Stop'
35
+ Add-Type @"
36
+ using System;
37
+ using System.Runtime.InteropServices;
38
+ public class FloorpInput {
39
+ [DllImport("user32.dll")] public static extern IntPtr GetForegroundWindow();
40
+ [DllImport("user32.dll")] public static extern uint GetWindowThreadProcessId(IntPtr h, IntPtr pid);
41
+ [DllImport("kernel32.dll")] public static extern uint GetCurrentThreadId();
42
+ [DllImport("user32.dll")] public static extern bool AttachThreadInput(uint a, uint b, bool f);
43
+ [DllImport("user32.dll")] public static extern bool SetForegroundWindow(IntPtr h);
44
+ [DllImport("user32.dll")] public static extern bool BringWindowToTop(IntPtr h);
45
+ [DllImport("user32.dll")] public static extern bool ShowWindow(IntPtr h, int n);
46
+ [DllImport("user32.dll")] public static extern bool SetCursorPos(int x, int y);
47
+ [DllImport("user32.dll")] public static extern void mouse_event(uint flags, uint dx, uint dy, uint data, IntPtr extra);
48
+ [DllImport("user32.dll")] public static extern bool GetWindowRect(IntPtr h, out RECT r);
49
+ [StructLayout(LayoutKind.Sequential)] public struct RECT { public int Left; public int Top; public int Right; public int Bottom; }
50
+ }
51
+ "@
52
+ Add-Type -AssemblyName System.Windows.Forms
53
+
54
+ function Get-FloorpWindow {
55
+ for ($try = 0; $try -lt 6; $try++) {
56
+ $p = Get-Process | Where-Object { $_.ProcessName -match 'floorp' -and $_.MainWindowHandle -ne 0 } | Select-Object -First 1
57
+ if ($p) { return $p.MainWindowHandle }
58
+ [System.Threading.Thread]::Sleep(150)
59
+ }
60
+ return [IntPtr]::Zero
61
+ }
62
+ function Set-Foreground($h) {
63
+ $fg = [FloorpInput]::GetForegroundWindow()
64
+ $t1 = [FloorpInput]::GetWindowThreadProcessId($fg, [IntPtr]::Zero)
65
+ $t2 = [FloorpInput]::GetCurrentThreadId()
66
+ [void][FloorpInput]::AttachThreadInput($t2, $t1, $true)
67
+ [void][FloorpInput]::ShowWindow($h, 5)
68
+ [void][FloorpInput]::BringWindowToTop($h)
69
+ [void][FloorpInput]::SetForegroundWindow($h)
70
+ [void][FloorpInput]::AttachThreadInput($t2, $t1, $false)
71
+ [System.Threading.Thread]::Sleep(170)
72
+ return ([FloorpInput]::GetForegroundWindow() -eq $h)
73
+ }
74
+ function Esc([string]$c) {
75
+ switch -CaseSensitive ($c) {
76
+ '{' { return '{{}' } '}' { return '{}}' } '[' { return '{[}' } ']' { return '{]}' }
77
+ '(' { return '{(}' } ')' { return '{)}' } '+' { return '{+}' } '^' { return '{^}' }
78
+ '%' { return '{%}' } '~' { return '{~}' } default { return $c }
79
+ }
80
+ }
81
+ function Do-Key([string]$mode, [string]$b64) {
82
+ $h = Get-FloorpWindow
83
+ if ($h -eq [IntPtr]::Zero) { return 'ERR:NO_FLOORP' }
84
+ if (-not (Set-Foreground $h)) { return 'ERR:NOT_FOREGROUND' }
85
+ $text = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($b64))
86
+ if ($mode -eq 'type') {
87
+ foreach ($ch in $text.ToCharArray()) {
88
+ $code = [int][char]$ch
89
+ if ($code -eq 13) { continue }
90
+ if ($code -eq 10) { [System.Windows.Forms.SendKeys]::SendWait('{ENTER}') }
91
+ else { [System.Windows.Forms.SendKeys]::SendWait((Esc ([string]$ch))) }
92
+ [System.Threading.Thread]::Sleep(5)
93
+ }
94
+ } else {
95
+ [System.Windows.Forms.SendKeys]::SendWait($text)
96
+ }
97
+ return 'OK'
98
+ }
99
+ function Do-Mouse([int]$x, [int]$y, [string]$action) {
100
+ $h = Get-FloorpWindow
101
+ if ($h -eq [IntPtr]::Zero) { return 'ERR:NO_FLOORP' }
102
+ $r = New-Object FloorpInput+RECT
103
+ [void][FloorpInput]::GetWindowRect($h, [ref]$r)
104
+ if ($action -eq 'bounds') { return ("BOUNDS:" + $r.Left + "," + $r.Top + "," + $r.Right + "," + $r.Bottom) }
105
+ if (-not (Set-Foreground $h)) { return 'ERR:NOT_FOREGROUND' }
106
+ if ($x -lt $r.Left -or $x -gt $r.Right -or $y -lt $r.Top -or $y -gt $r.Bottom) {
107
+ return ("ERR:OUT_OF_BOUNDS rect=" + $r.Left + "," + $r.Top + "," + $r.Right + "," + $r.Bottom)
108
+ }
109
+ [void][FloorpInput]::SetCursorPos($x, $y)
110
+ [System.Threading.Thread]::Sleep(40)
111
+ if ($action -eq 'click') { [FloorpInput]::mouse_event(2,0,0,0,[IntPtr]::Zero); [FloorpInput]::mouse_event(4,0,0,0,[IntPtr]::Zero) }
112
+ elseif ($action -eq 'double') { for ($i=0; $i -lt 2; $i++) { [FloorpInput]::mouse_event(2,0,0,0,[IntPtr]::Zero); [FloorpInput]::mouse_event(4,0,0,0,[IntPtr]::Zero); [System.Threading.Thread]::Sleep(70) } }
113
+ elseif ($action -eq 'right') { [FloorpInput]::mouse_event(8,0,0,0,[IntPtr]::Zero); [FloorpInput]::mouse_event(16,0,0,0,[IntPtr]::Zero) }
114
+ return 'OK'
115
+ }
116
+
117
+ [Console]::Out.WriteLine('READY::')
118
+ [Console]::Out.Flush()
119
+ while ($true) {
120
+ $line = [Console]::In.ReadLine()
121
+ if ($null -eq $line) { break }
122
+ if ($line.Length -eq 0) { continue }
123
+ $parts = $line.Split(' ')
124
+ $cmd = $parts[0]; $token = $parts[1]
125
+ try {
126
+ if ($cmd -eq 'KEY') { $res = Do-Key $parts[2] $parts[3] }
127
+ elseif ($cmd -eq 'MOUSE') { $res = Do-Mouse ([int]$parts[2]) ([int]$parts[3]) $parts[4] }
128
+ else { $res = 'ERR:BADCMD' }
129
+ } catch {
130
+ $res = 'ERR:EXC ' + $_.Exception.Message
131
+ }
132
+ [Console]::Out.WriteLine("RESP:" + $token + ":" + $res)
133
+ [Console]::Out.Flush()
134
+ }
135
+ `;
136
+ const HOST_SCRIPT_ENC = Buffer.from(HOST_SCRIPT, "utf16le").toString("base64");
137
+ let host = null;
138
+ let outBuf = "";
139
+ let awaiting = null;
140
+ let seq = 0;
141
+ let chain = Promise.resolve();
142
+ function handleData(chunk) {
143
+ outBuf += chunk.toString("utf8");
144
+ let idx;
145
+ while ((idx = outBuf.indexOf("\n")) >= 0) {
146
+ const line = outBuf.slice(0, idx).replace(/\r$/, "");
147
+ outBuf = outBuf.slice(idx + 1);
148
+ if (awaiting && line.startsWith(awaiting.marker)) {
149
+ const w = awaiting;
150
+ awaiting = null;
151
+ w.resolve(line.slice(w.marker.length));
152
+ }
153
+ }
154
+ }
155
+ function killHost() {
156
+ const h = host;
157
+ host = null;
158
+ awaiting = null;
159
+ outBuf = "";
160
+ if (h) {
161
+ try {
162
+ h.stdin.end();
163
+ }
164
+ catch { /* ignore */ }
165
+ try {
166
+ h.kill();
167
+ }
168
+ catch { /* ignore */ }
169
+ }
170
+ }
171
+ function ensureHost() {
172
+ if (host && !host.killed)
173
+ return Promise.resolve(host);
174
+ return new Promise((resolve, reject) => {
175
+ const child = spawn("powershell", ["-NoProfile", "-NonInteractive", "-EncodedCommand", HOST_SCRIPT_ENC], { windowsHide: true });
176
+ let settled = false;
177
+ const startTimer = setTimeout(() => {
178
+ if (settled)
179
+ return;
180
+ settled = true;
181
+ try {
182
+ child.kill();
183
+ }
184
+ catch { /* ignore */ }
185
+ reject(new Error("PowerShell input host did not become ready in time."));
186
+ }, 20_000);
187
+ child.stdout.on("data", handleData);
188
+ child.stderr.on("data", () => { });
189
+ child.on("exit", () => { if (host === child)
190
+ killHost(); });
191
+ child.on("error", (err) => {
192
+ if (settled)
193
+ return;
194
+ settled = true;
195
+ clearTimeout(startTimer);
196
+ reject(err);
197
+ });
198
+ // Wait for the host's READY:: banner before accepting commands.
199
+ awaiting = {
200
+ marker: "READY::",
201
+ resolve: () => {
202
+ if (settled)
203
+ return;
204
+ settled = true;
205
+ clearTimeout(startTimer);
206
+ host = child;
207
+ resolve(child);
208
+ },
209
+ };
210
+ });
211
+ }
212
+ /** Serialise a single request line through the host; returns the raw result
213
+ * string (e.g. "OK", "ERR:NO_FLOORP", "BOUNDS:.."). */
214
+ function send(make, timeoutMs) {
215
+ const run = () => ensureHost().then((h) => new Promise((resolve, reject) => {
216
+ const token = "T" + ++seq;
217
+ const marker = `RESP:${token}:`;
218
+ const timer = setTimeout(() => {
219
+ if (awaiting && awaiting.marker === marker)
220
+ awaiting = null;
221
+ killHost(); // a hung command poisons the host — recycle it
222
+ reject(new Error("OS input timed out (host recycled)."));
223
+ }, timeoutMs);
224
+ awaiting = {
225
+ marker,
226
+ resolve: (s) => {
227
+ clearTimeout(timer);
228
+ resolve(s);
229
+ },
230
+ };
231
+ h.stdin.write(make(token) + "\n");
232
+ }));
233
+ // Mutex: one command at a time.
234
+ const result = chain.then(run, run);
235
+ chain = result.then(() => undefined, () => undefined);
236
+ return result;
237
+ }
238
+ function b64(s) {
239
+ return Buffer.from(s, "utf8").toString("base64");
240
+ }
241
+ function interpret(result, kind) {
242
+ if (result.includes("ERR:NO_FLOORP")) {
243
+ throw new Error(kind === "keyboard"
244
+ ? "Floorp is not running (no window found). Open Floorp and try again."
245
+ : "Floorp is not running (no window found).");
246
+ }
247
+ if (result.includes("ERR:NOT_FOREGROUND")) {
248
+ throw new Error(kind === "keyboard"
249
+ ? "Could not bring Floorp to the foreground — aborted WITHOUT sending any keys " +
250
+ "(safety guard, so keystrokes can't leak to another app). Click the Floorp window, then retry."
251
+ : "Could not bring Floorp to the foreground — aborted WITHOUT clicking (safety guard).");
252
+ }
253
+ }
254
+ async function runKey(mode, payload) {
255
+ if (process.platform !== "win32")
256
+ throw new Error("OS keyboard input is currently Windows-only.");
257
+ // Allow ~6ms/char for typing plus generous headroom.
258
+ const timeout = mode === "type" ? Math.max(60_000, payload.length * 12) : 30_000;
259
+ const out = await send((t) => `KEY ${t} ${mode} ${b64(payload)}`, timeout);
260
+ interpret(out, "keyboard");
261
+ if (!out.includes("OK"))
262
+ throw new Error(`OS input failed: ${out.trim().slice(0, 300)}`);
263
+ }
264
+ /** Type text into Floorp's focused element via real OS key events. */
265
+ export function realType(text) {
266
+ return runKey("type", text);
267
+ }
268
+ /** Map a friendly key/combo name to SendKeys notation. */
269
+ const KEY_MAP = {
270
+ enter: "{ENTER}",
271
+ tab: "{TAB}",
272
+ escape: "{ESC}",
273
+ esc: "{ESC}",
274
+ backspace: "{BS}",
275
+ delete: "{DEL}",
276
+ del: "{DEL}",
277
+ up: "{UP}",
278
+ down: "{DOWN}",
279
+ left: "{LEFT}",
280
+ right: "{RIGHT}",
281
+ home: "{HOME}",
282
+ end: "{END}",
283
+ pageup: "{PGUP}",
284
+ pagedown: "{PGDN}",
285
+ };
286
+ const MODIFIERS = { ctrl: "^", control: "^", alt: "%", shift: "+" };
287
+ /** Translate "Enter", "Tab", "ctrl+a", "ctrl+shift+k" → SendKeys notation. */
288
+ export function toSendKeys(key) {
289
+ const parts = key.split("+").map((p) => p.trim().toLowerCase());
290
+ const main = parts.pop();
291
+ const mods = parts.map((m) => MODIFIERS[m] ?? "").join("");
292
+ const mapped = KEY_MAP[main] ?? (main.length === 1 ? main : `{${main.toUpperCase()}}`);
293
+ return mods + mapped;
294
+ }
295
+ /** Press a single key or combo via real OS key events. */
296
+ export function realKey(key) {
297
+ return runKey("keys", toSendKeys(key));
298
+ }
299
+ /** Select-all + delete via real OS key events (clears rich/contenteditable fields). */
300
+ export function realClear() {
301
+ return runKey("keys", "^a{DEL}");
302
+ }
303
+ // -- OS mouse -----------------------------------------------------------------
304
+ async function runMouse(x, y, action) {
305
+ if (process.platform !== "win32")
306
+ throw new Error("OS mouse is currently Windows-only.");
307
+ const out = await send((t) => `MOUSE ${t} ${Math.round(x)} ${Math.round(y)} ${action}`, 30_000);
308
+ interpret(out, "mouse");
309
+ if (out.includes("ERR:OUT_OF_BOUNDS")) {
310
+ const rect = out.match(/rect=([\-\d,]+)/)?.[1] ?? "";
311
+ throw new Error(`(${x},${y}) is outside the Floorp window [${rect}] — refused to click outside Floorp. ` +
312
+ `Call window_bounds for the valid range.`);
313
+ }
314
+ if (!out.includes("OK") && !out.includes("BOUNDS:")) {
315
+ throw new Error(`OS mouse failed: ${out.trim().slice(0, 200)}`);
316
+ }
317
+ return out;
318
+ }
319
+ /** Move the real OS cursor to a screen pixel (must be inside the Floorp window). */
320
+ export function moveCursor(x, y) {
321
+ return runMouse(x, y, "move").then(() => { });
322
+ }
323
+ /** Real OS mouse click at a screen pixel inside the Floorp window. */
324
+ export function realClick(x, y, opts = {}) {
325
+ const action = opts.double ? "double" : opts.button === "right" ? "right" : "click";
326
+ return runMouse(x, y, action).then(() => { });
327
+ }
328
+ /** Floorp window rectangle in screen pixels (so callers can target real_click). */
329
+ export async function floorpWindowBounds() {
330
+ const out = await runMouse(0, 0, "bounds");
331
+ const m = out.match(/BOUNDS:(-?\d+),(-?\d+),(-?\d+),(-?\d+)/);
332
+ if (!m)
333
+ throw new Error("Could not read Floorp window bounds: " + out.trim().slice(0, 120));
334
+ const [, L, T, R, B] = m.map(Number);
335
+ return { left: L, top: T, right: R, bottom: B, width: R - L, height: B - T };
336
+ }
337
+ // Best-effort cleanup so we don't leak the host on normal exit.
338
+ process.on("exit", killHost);
339
+ //# sourceMappingURL=os-input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"os-input.js","sourceRoot":"","sources":["../src/os-input.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Standalone diagnostic: verifies that Floorp's automation API is reachable and
3
+ * lists the currently open tabs. Run with `npm run probe`.
4
+ */
5
+ export {};
package/dist/probe.js ADDED
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Standalone diagnostic: verifies that Floorp's automation API is reachable and
3
+ * lists the currently open tabs. Run with `npm run probe`.
4
+ */
5
+ import { FloorpClient } from "./floorp-client.js";
6
+ async function main() {
7
+ const client = new FloorpClient();
8
+ const ok = await client.health();
9
+ if (!ok) {
10
+ console.error("❌ Could not reach Floorp's automation API.\n" +
11
+ " - Is Floorp running?\n" +
12
+ " - Is 'floorp.mcp.enabled' set to true in about:config?\n" +
13
+ " - Did you fully restart Floorp after enabling it?");
14
+ process.exit(1);
15
+ }
16
+ console.log("✅ Floorp automation API is reachable.\n");
17
+ const tabs = await client.listTabs();
18
+ console.log(`Open tabs (${tabs.length}):`);
19
+ for (const t of tabs) {
20
+ const flags = [t.selected ? "active" : "", t.pinned ? "pinned" : ""]
21
+ .filter(Boolean)
22
+ .join(",");
23
+ console.log(` [${t.browserId}] ${t.title}${flags ? ` (${flags})` : ""}`);
24
+ console.log(` ${t.url}`);
25
+ }
26
+ }
27
+ main().catch((err) => {
28
+ console.error("Probe failed:", err);
29
+ process.exit(1);
30
+ });
31
+ //# sourceMappingURL=probe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"probe.js","sourceRoot":"","sources":["../src/probe.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,KAAK,UAAU,IAAI;IACjB,MAAM,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;IAElC,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC;IACjC,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,OAAO,CAAC,KAAK,CACX,8CAA8C;YAC5C,2BAA2B;YAC3B,6DAA6D;YAC7D,sDAAsD,CACzD,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;IAEvD,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAC;IACrC,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC;IAC3C,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrB,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;aACjE,MAAM,CAAC,OAAO,CAAC;aACf,IAAI,CAAC,GAAG,CAAC,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC1E,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IAClC,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;IACpC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
package/package.json ADDED
@@ -0,0 +1,54 @@
1
+ {
2
+ "name": "floorp-mcp",
3
+ "version": "1.5.0",
4
+ "description": "An MCP server that lets AI assistants (Claude Code, Claude Desktop, Cursor…) read, screenshot and manage tabs in the Floorp browser via its built-in automation API.",
5
+ "type": "module",
6
+ "bin": {
7
+ "floorp-mcp": "dist/index.js"
8
+ },
9
+ "files": [
10
+ "dist",
11
+ "README.md",
12
+ "LICENSE"
13
+ ],
14
+ "scripts": {
15
+ "build": "tsc",
16
+ "dev": "tsx src/index.ts",
17
+ "start": "node dist/index.js",
18
+ "probe": "tsx src/probe.ts",
19
+ "test": "tsx --test test/unit/guards.test.ts test/unit/html-find.test.ts test/unit/keys.test.ts",
20
+ "typecheck": "tsc --noEmit",
21
+ "prepublishOnly": "npm run build"
22
+ },
23
+ "keywords": [
24
+ "mcp",
25
+ "model-context-protocol",
26
+ "floorp",
27
+ "firefox",
28
+ "browser",
29
+ "automation",
30
+ "claude"
31
+ ],
32
+ "author": "Arda Karaman (Frumane)",
33
+ "license": "MIT",
34
+ "repository": {
35
+ "type": "git",
36
+ "url": "git+https://github.com/Frumane/floorp-mcp.git"
37
+ },
38
+ "homepage": "https://github.com/Frumane/floorp-mcp#readme",
39
+ "bugs": {
40
+ "url": "https://github.com/Frumane/floorp-mcp/issues"
41
+ },
42
+ "engines": {
43
+ "node": ">=18"
44
+ },
45
+ "dependencies": {
46
+ "@modelcontextprotocol/sdk": "^1.0.1",
47
+ "zod": "^3.23.8"
48
+ },
49
+ "devDependencies": {
50
+ "@types/node": "^22.0.0",
51
+ "tsx": "^4.19.0",
52
+ "typescript": "^5.5.0"
53
+ }
54
+ }