@agent-native/core 0.49.22 → 0.49.23

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.
Files changed (71) hide show
  1. package/dist/agent/production-agent.d.ts +1 -0
  2. package/dist/agent/production-agent.d.ts.map +1 -1
  3. package/dist/agent/production-agent.js +15 -0
  4. package/dist/agent/production-agent.js.map +1 -1
  5. package/dist/agent/tool-search.d.ts.map +1 -1
  6. package/dist/agent/tool-search.js +32 -7
  7. package/dist/agent/tool-search.js.map +1 -1
  8. package/dist/cli/connect.d.ts +2 -3
  9. package/dist/cli/connect.d.ts.map +1 -1
  10. package/dist/cli/connect.js +60 -37
  11. package/dist/cli/connect.js.map +1 -1
  12. package/dist/cli/pr-visual-recap-workflow.d.ts +5 -7
  13. package/dist/cli/pr-visual-recap-workflow.d.ts.map +1 -1
  14. package/dist/cli/pr-visual-recap-workflow.js +5 -7
  15. package/dist/cli/pr-visual-recap-workflow.js.map +1 -1
  16. package/dist/cli/recap.d.ts +44 -52
  17. package/dist/cli/recap.d.ts.map +1 -1
  18. package/dist/cli/recap.js +420 -414
  19. package/dist/cli/recap.js.map +1 -1
  20. package/dist/client/AssistantChat.d.ts +6 -3
  21. package/dist/client/AssistantChat.d.ts.map +1 -1
  22. package/dist/client/AssistantChat.js +1 -1
  23. package/dist/client/AssistantChat.js.map +1 -1
  24. package/dist/client/MultiTabAssistantChat.d.ts.map +1 -1
  25. package/dist/client/MultiTabAssistantChat.js +23 -3
  26. package/dist/client/MultiTabAssistantChat.js.map +1 -1
  27. package/dist/client/agent-chat.d.ts +8 -0
  28. package/dist/client/agent-chat.d.ts.map +1 -1
  29. package/dist/client/agent-chat.js +24 -1
  30. package/dist/client/agent-chat.js.map +1 -1
  31. package/dist/client/blocks/library/AnnotatedCodeBlock.d.ts.map +1 -1
  32. package/dist/client/blocks/library/AnnotatedCodeBlock.js +4 -1
  33. package/dist/client/blocks/library/AnnotatedCodeBlock.js.map +1 -1
  34. package/dist/client/blocks/library/DiffBlock.d.ts.map +1 -1
  35. package/dist/client/blocks/library/DiffBlock.js +20 -7
  36. package/dist/client/blocks/library/DiffBlock.js.map +1 -1
  37. package/dist/client/blocks/library/annotation-rail.js +5 -5
  38. package/dist/client/blocks/library/annotation-rail.js.map +1 -1
  39. package/dist/client/composer/TiptapComposer.d.ts.map +1 -1
  40. package/dist/client/composer/TiptapComposer.js +15 -2
  41. package/dist/client/composer/TiptapComposer.js.map +1 -1
  42. package/dist/coding-tools/run-code.d.ts.map +1 -1
  43. package/dist/coding-tools/run-code.js +69 -17
  44. package/dist/coding-tools/run-code.js.map +1 -1
  45. package/dist/integrations/plugin.d.ts.map +1 -1
  46. package/dist/integrations/plugin.js +2 -0
  47. package/dist/integrations/plugin.js.map +1 -1
  48. package/dist/mcp/build-server.d.ts +12 -10
  49. package/dist/mcp/build-server.d.ts.map +1 -1
  50. package/dist/mcp/build-server.js +53 -89
  51. package/dist/mcp/build-server.js.map +1 -1
  52. package/dist/mcp/connect-route.d.ts.map +1 -1
  53. package/dist/mcp/connect-route.js +5 -4
  54. package/dist/mcp/connect-route.js.map +1 -1
  55. package/dist/mcp/oauth-token.d.ts +6 -5
  56. package/dist/mcp/oauth-token.d.ts.map +1 -1
  57. package/dist/mcp/oauth-token.js.map +1 -1
  58. package/dist/mcp/stdio.d.ts.map +1 -1
  59. package/dist/mcp/stdio.js +9 -2
  60. package/dist/mcp/stdio.js.map +1 -1
  61. package/dist/provider-api/staging.d.ts.map +1 -1
  62. package/dist/provider-api/staging.js +6 -4
  63. package/dist/provider-api/staging.js.map +1 -1
  64. package/dist/server/agent-chat-plugin.d.ts +10 -7
  65. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  66. package/dist/server/agent-chat-plugin.js.map +1 -1
  67. package/docs/content/actions.md +1 -1
  68. package/docs/content/external-agents.md +53 -40
  69. package/docs/content/mcp-protocol.md +16 -11
  70. package/docs/content/pr-visual-recap.md +1 -1
  71. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"TiptapComposer.js","sourceRoot":"","sources":["../../../src/client/composer/TiptapComposer.tsx"],"names":[],"mappings":";AAAA,OAAc,EACZ,QAAQ,EACR,MAAM,EACN,SAAS,EACT,WAAW,EACX,mBAAmB,EACnB,OAAO,GACR,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACtE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEzD,OAAO,UAAU,MAAM,qBAAqB,CAAC;AAC7C,OAAO,WAAW,MAAM,+BAA+B,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,cAAc,EAA0B,MAAM,qBAAqB,CAAC;AAC7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EACL,WAAW,EACX,SAAS,EACT,eAAe,EACf,gBAAgB,EAChB,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,KAAK,EACL,iBAAiB,EACjB,UAAU,EACV,iBAAiB,GAClB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AASxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,eAAe,EAA6B,MAAM,kBAAkB,CAAC;AAC9E,OAAO,EAAE,gCAAgC,EAAE,MAAM,qBAAqB,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EACL,0BAA0B,EAC1B,kBAAkB,EAClB,kCAAkC,GACnC,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,iCAAiC,EACjC,oBAAoB,GAErB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACL,OAAO,EACP,cAAc,EACd,cAAc,GACf,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,OAAO,EACP,cAAc,EACd,cAAc,GACf,MAAM,6BAA6B,CAAC;AAarC,MAAM,UAAU,wBAAwB,CAAC,OAIxC;IACC,OAAO,CACL,CAAC,OAAO,CAAC,QAAQ;QACjB,CAAC,OAAO,CAAC,gBAAgB,IAAI,OAAO,CAAC,eAAe,GAAG,CAAC,CAAC,CAC1D,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,kCAAkC,CAChD,KAAsE,EACtE,KAAc;IAEd,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,KAAK,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAEzD,MAAM,qBAAqB,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC;IACpE,IAAI,qBAAqB;QAAE,OAAO,QAAQ,CAAC;IAE3C,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO;QAAE,OAAO,WAAW,CAAC;IAEzD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,wCAAwC,CACtD,IAA4C;IAE5C,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC;IACpD,IAAI,CAAC,SAAS;QAAE,OAAO,KAAK,CAAC;IAE7B,IAAI,CAAC,QAAQ,CACX,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,oBAAoB,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,cAAc,EAAE,CACxE,CAAC;IACF,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,8BAA8B,CAAC,OAI9C;IACC,MAAM,UAAU,GACd,OAAO,CAAC,WAAW;QACnB,CAAC,OAAO,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACnE,OAAO,GAAG,OAAO,CAAC,aAAa,GAAG,UAAU,EAAE,CAAC;AACjD,CAAC;AAED,SAAS,yBAAyB,CAAC,IAAU;IAC3C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IACjD,MAAM,UAAU,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;IACvF,OAAO,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,OAItC;IACC,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;IACzE,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAE5C,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;IAC/B,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC;IAChC,MAAM,WAAW,GAAG,YAAY,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;IAChE,KAAK,OAAO,CAAC,GAAG,CACd,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CACvD,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;QAChB,OAAO,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;IACH,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,iBAAiB,GAAmB;IACxC,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,IAAI,EAAE,OAAO,EAAE;IACjE,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,IAAI,EAAE,KAAK,EAAE;IAC7D,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,kBAAkB,EAAE,IAAI,EAAE,SAAS,EAAE;IACrE,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,8BAA8B,EAAE,IAAI,EAAE,MAAM,EAAE;IAC3E,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,uBAAuB,EAAE,IAAI,EAAE,KAAK,EAAE;IAClE,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,yBAAyB,EAAE,IAAI,EAAE,MAAM,EAAE;CACvE,CAAC;AAEF,SAAS,yBAAyB,CAAC,IAAY;IAC7C,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AACvD,CAAC;AAED,SAAS,kBAAkB,CAAC,QAAwB;IAClD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,MAAM,GAAmB,EAAE,CAAC;IAClC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAG,yBAAyB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACrD,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,SAAS;QACtC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACf,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IACpC,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAqB;IAC7C,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,MAAM,GAAkB,EAAE,CAAC;IACjC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC,MAAM,IAAI,EAAE,IAAI,KAAK,CAAC,IAAI,IAAI,EAAE,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;QACtE,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,SAAS;QAC3C,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACd,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,qBAAqB,GAUvB;IACF,KAAK,EAAE;QACL,KAAK,EAAE,cAAc;QACrB,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,0CAA0C;QACvD,aAAa,EAAE,kBAAkB;QACjC,UAAU,EAAE,CAAC,MAAM,EAAE,EAAE,CACrB,gEAAgE,MAAM;;;;;;;;;;;;;;;;;yDAiBnB;KACtD;IACD,GAAG,EAAE;QACH,KAAK,EAAE,eAAe;QACtB,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,yCAAyC;QACtD,aAAa,EAAE,0BAA0B;QACzC,UAAU,EAAE,CAAC,MAAM,EAAE,EAAE,CACrB,iEAAiE,MAAM;;;;;;;;4IAQ+D;KACzI;IACD,UAAU,EAAE;QACV,KAAK,EAAE,mBAAmB;QAC1B,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,uCAAuC;QACpD,aAAa,EAAE,wBAAwB;QACvC,UAAU,EAAE,GAAG,EAAE;YACf,MAAM,CAAC,aAAa,CAClB,IAAI,WAAW,CAAC,sBAAsB,EAAE;gBACtC,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;aACzB,CAAC,CACH,CAAC;QACJ,CAAC;QACD,UAAU,EAAE,CAAC,MAAM,EAAE,EAAE,CACrB,mFAAmF,MAAM;;iKAEkE;KAC9J;IACD,SAAS,EAAE;QACT,KAAK,EAAE,kBAAkB;QACzB,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,yDAAyD;QACtE,aAAa,EAAE,uBAAuB;QACtC,UAAU,EAAE,CAAC,MAAM,EAAE,EAAE,CACrB,+FAA+F,MAAM;;;;;;;;kTAQuM;KAC/S;CACF,CAAC;AAEF,SAAS,gBAAgB,CAAC,EACxB,IAAI,EACJ,QAAQ,GAIT;IACC,MAAM,MAAM,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;IAC3C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;IACzB,OAAO,CACL,gBAAM,SAAS,EAAC,8HAA8H,aAC5I,KAAC,IAAI,IAAC,SAAS,EAAC,+BAA+B,GAAG,EACjD,MAAM,CAAC,KAAK,EACb,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,QAAQ,EACjB,SAAS,EAAC,8EAA8E,YAExF,KAAC,KAAK,IAAC,SAAS,EAAC,SAAS,GAAG,GACtB,IACJ,CACR,CAAC;AACJ,CAAC;AAuHD,SAAS,cAAc,CAAC,IAAY;IAClC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC3D,OAAO;QACL,IAAI,EAAE,KAAK;QACX,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAC5B,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE;SACpD,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,8BAA8B,CAC5C,cAAwC;IAExC,OAAO;QACL,UAAU,CAAC,SAAS,CAAC;YACnB,OAAO,EAAE,KAAK;YACd,cAAc,EAAE,KAAK;YACrB,UAAU,EAAE,KAAK;YACjB,WAAW,EAAE,KAAK;YAClB,QAAQ,EAAE,KAAK;YACf,UAAU,EAAE,KAAK;YACjB,UAAU,EAAE,KAAK;YACjB,SAAS,EAAE,KAAK;YAChB,MAAM,EAAE,KAAK;YACb,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,KAAK;YACX,IAAI,EAAE,KAAK;YACX,UAAU,EAAE,KAAK;YACjB,SAAS,EAAE,KAAK;YAChB,IAAI,EAAE,KAAK;YACX,YAAY,EAAE,KAAK;YACnB,SAAS,EAAE,KAAK;SACjB,CAAC;QACF,WAAW,CAAC,SAAS,CAAC;YACpB,WAAW,EAAE,GAAG,EAAE,CAAC,cAAc,EAAE,IAAI,EAAE;YACzC,gBAAgB,EAAE,iBAAiB;YACnC,eAAe,EAAE,KAAK;SACvB,CAAC;QACF,aAAa;QACb,cAAc;QACd,gBAAgB;KACjB,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,EACpB,IAAI,EACJ,QAAQ,EACR,gBAAgB,GAAG,KAAK,EACxB,sBAAsB,GAAG,6CAA6C,GAMvE;IACC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAExC,OAAO,CACL,MAAC,OAAO,IAAC,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,aACxC,KAAC,cAAc,IAAC,OAAO,kBACrB,kBACE,IAAI,EAAC,QAAQ,gBACD,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,8BAC9B,aAAa,EACtC,SAAS,EAAC,yKAAyK,aAElL,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAClC,KAAC,eAAe,IAAC,SAAS,EAAC,oBAAoB,GAAG,IAC3C,GACM,EACjB,MAAC,cAAc,IACb,IAAI,EAAC,KAAK,EACV,KAAK,EAAC,KAAK,EACX,UAAU,EAAE,CAAC,EACb,gBAAgB,EAAE,CAAC,wCACgB,MAAM,EACzC,SAAS,EAAC,0DAA0D,EACpE,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,aAEvB,kBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE;4BACZ,QAAQ,CAAC,OAAO,CAAC,CAAC;4BAClB,OAAO,CAAC,KAAK,CAAC,CAAC;wBACjB,CAAC,EACD,SAAS,EAAC,uEAAuE,aAEjF,KAAC,UAAU,IAAC,SAAS,EAAC,wCAAwC,GAAG,EACjE,eAAK,SAAS,EAAC,gBAAgB,aAC7B,eAAM,SAAS,EAAC,yCAAyC,oBAAW,EACpE,YAAG,SAAS,EAAC,0CAA0C,oDAEnD,IACA,EACL,IAAI,KAAK,OAAO,IAAI,CACnB,KAAC,SAAS,IAAC,SAAS,EAAC,oCAAoC,GAAG,CAC7D,IACM,EACT,kBACE,IAAI,EAAC,QAAQ,EACb,QAAQ,EAAE,gBAAgB,EAC1B,KAAK,EAAE,gBAAgB,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,SAAS,EAC5D,OAAO,EAAE,GAAG,EAAE;4BACZ,IAAI,gBAAgB;gCAAE,OAAO;4BAC7B,QAAQ,CAAC,MAAM,CAAC,CAAC;4BACjB,OAAO,CAAC,KAAK,CAAC,CAAC;wBACjB,CAAC,EACD,SAAS,EAAE,sDACT,gBAAgB;4BACd,CAAC,CAAC,+BAA+B;4BACjC,CAAC,CAAC,oBACN,EAAE,aAEF,KAAC,iBAAiB,IAAC,SAAS,EAAC,wCAAwC,GAAG,EACxE,eAAK,SAAS,EAAC,gBAAgB,aAC7B,eAAM,SAAS,EAAC,yCAAyC,qBAElD,EACP,YAAG,SAAS,EAAC,0CAA0C,YACpD,gBAAgB;4CACf,CAAC,CAAC,sBAAsB;4CACxB,CAAC,CAAC,uCAAuC,GACzC,IACA,EACL,IAAI,KAAK,MAAM,IAAI,CAAC,gBAAgB,IAAI,CACvC,KAAC,SAAS,IAAC,SAAS,EAAC,oCAAoC,GAAG,CAC7D,IACM,IACM,IACT,CACX,CAAC;AACJ,CAAC;AAED,MAAM,oBAAoB,GAA2B;IACnD,IAAI,EAAE,eAAe;IACrB,gBAAgB,EAAE,SAAS;IAC3B,gBAAgB,EAAE,gBAAgB;IAClC,aAAa,EAAE,aAAa;IAC5B,WAAW,EAAE,WAAW;IACxB,eAAe,EAAE,eAAe;CACjC,CAAC;AAEF,SAAS,iBAAiB,CAAC,KAAa;IACtC,IAAI,oBAAoB,CAAC,KAAK,CAAC;QAAE,OAAO,oBAAoB,CAAC,KAAK,CAAC,CAAC;IACpE,0EAA0E;IAC1E,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CACxB,sDAAsD,CACvD,CAAC;IACF,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC7D,OAAO,GAAG,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7C,CAAC;IACD,oEAAoE;IACpE,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;QACxD,IAAI,GAAG,EAAE,CAAC;YACR,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC;gBACnB,CAAC,CAAC,GAAG;oBACH,GAAG,CAAC,CAAC,CAAC;yBACH,KAAK,CAAC,GAAG,CAAC;yBACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;yBAC3C,IAAI,CAAC,GAAG,CAAC;gBACd,CAAC,CAAC,EAAE,CAAC;YACP,OAAO,OAAO,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC;QAC5C,CAAC;QACD,OAAO,OAAO,IAAI,EAAE,CAAC;IACvB,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACrC,kFAAkF;IAClF,MAAM,eAAe,GAAG,KAAK,CAAC,KAAK,CACjC,yCAAyC,CAC1C,CAAC;IACF,IAAI,eAAe,EAAE,CAAC;QACpB,MAAM,OAAO,GAAG,eAAe,CAAC,CAAC,CAAC;aAC/B,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;aAC3C,IAAI,CAAC,GAAG,CAAC,CAAC;QACb,OAAO,UAAU,eAAe,CAAC,CAAC,CAAC,IAAI,eAAe,CAAC,CAAC,CAAC,IAAI,OAAO,EAAE,CAAC;IACzE,CAAC;IACD,kEAAkE;IAClE,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;IAC1D,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC;aACpB,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;aAC3C,IAAI,CAAC,GAAG,CAAC,CAAC;QACb,OAAO,UAAU,KAAK,EAAE,CAAC;IAC3B,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,SAAS,gBAAgB,CAAC,MAAgB;IACxC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;QACzB,4CAA4C;QAC5C,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;QACvD,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBAAE,OAAO,KAAK,CAAC;YACtC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YACpB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,0EAA0E;QAC1E,2CAA2C;QAC3C,4CAA4C;QAC5C,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;QACtE,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,mBAAmB;YAC7C,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,MAAM,EAAE,CAAC;gBAAE,OAAO,KAAK,CAAC;YAC/C,IAAI,CAAC,GAAG,CAAC,UAAU,MAAM,EAAE,CAAC,CAAC;YAC7B,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,aAAa,CAAC,EACrB,KAAK,EACL,MAAM,GAAG,MAAM,EACf,OAAO,EACP,QAAQ,EACR,cAAc,EACd,4BAA4B,GAAG,IAAI,EACnC,iBAAiB,GAclB;IACC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxC,MAAM,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IAC9E,MAAM,cAAc,GAAG,OAAO,CAC5B,GAAG,EAAE,CACH,OAAO;SACJ,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACf,GAAG,KAAK;QACR,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,KAAK,MAAM,CAAC;KACjE,CAAC,CAAC;SACF,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,EAC/C,CAAC,OAAO,CAAC,CACV,CAAC;IACF,MAAM,aAAa,GACjB,KAAK,KAAK,MAAM;QACd,CAAC,CAAE;YACC,MAAM;YACN,KAAK;YACL,QAAQ;YACR,MAAM;YACN,OAAO;YACP,KAAK;SACuB;QAChC,CAAC,CAAC,iCAAiC,CAAC,KAAK,CAAC,CAAC;IAE/C,uEAAuE;IACvE,yEAAyE;IACzE,gEAAgE;IAChE,MAAM,gBAAgB,GAAG,OAAO,CAAC,GAAG,EAAE;QACpC,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;QACnE,OAAO,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACzD,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC;IAE5B,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAClD,GAAG,EAAE,CAAC,IAAI,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAC1D,CAAC;IAEF,uEAAuE;IACvE,4DAA4D;IAC5D,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,IAAI,EAAE,CAAC;YACT,iBAAiB,CAAC,IAAI,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACzE,CAAC;IACH,CAAC,EAAE,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAE7B,MAAM,WAAW,GAAG,WAAW,CAAC,CAAC,GAAW,EAAE,EAAE;QAC9C,iBAAiB,CAAC,CAAC,IAAI,EAAE,EAAE;YACzB,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;YAC3B,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;;gBAC/B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACnB,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,sEAAsE;IACtE,qEAAqE;IACrE,4CAA4C;IAC5C,MAAM,WAAW,GAAG,qBAAqB,CAAC;QACxC,OAAO,EAAE,4BAA4B;QACrC,cAAc,EAAE,sBAAsB;KACvC,CAAC,CAAC;IACH,MAAM,0BAA0B,GAAG,cAAc,CAAC,IAAI,CACpD,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,KAAK,CAAC,UAAU,CAC1D,CAAC;IACF,MAAM,cAAc,GAClB,CAAC,WAAW,CAAC,gBAAgB;QAC3B,CAAC,CAAC,4BAA4B,IAAI,CAAC,CAAC,iBAAiB,CAAC,CAAC;QACzD,CAAC,WAAW,CAAC,UAAU;QACvB,CAAC,WAAW,CAAC,UAAU;QACvB,CAAC,0BAA0B,CAAC;IAC9B,MAAM,eAAe,GAAG,WAAW,CAAC,GAAG,EAAE;QACvC,IAAI,CAAC;YACH,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,KAAK,CAAC;QAC/B,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;QACV,MAAM,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,2BAA2B,CAAC,CAAC,CAAC;QACnE,OAAO,CAAC,KAAK,CAAC,CAAC;IACjB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,CACL,MAAC,OAAO,IAAC,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,aACxC,KAAC,cAAc,IAAC,OAAO,kBACrB,kBACE,IAAI,EAAC,QAAQ,8BACY,cAAc,EACvC,SAAS,EAAC,gMAAgM,aAE1M,eAAM,SAAS,EAAC,kBAAkB,YAAE,iBAAiB,CAAC,KAAK,CAAC,GAAQ,EACnE,aAAa,CAAC,MAAM,GAAG,CAAC,IAAI,CAC3B,gBAAM,SAAS,EAAC,8EAA8E,wBACzF,oBAAoB,CAAC,MAAM,CAAC,IAC1B,CACR,EACD,KAAC,eAAe,IAAC,SAAS,EAAC,6BAA6B,GAAG,IACpD,GACM,EACjB,MAAC,cAAc,IACb,IAAI,EAAC,KAAK,EACV,KAAK,EAAC,KAAK,EACX,UAAU,EAAE,CAAC,EACb,gBAAgB,EAAE,CAAC,wCACgB,MAAM,EACzC,SAAS,EAAC,qFAAqF,EAC/F,KAAK,EACH,cAAc,CAAC,MAAM,GAAG,CAAC;oBACvB,CAAC,CAAC;wBACE,QAAQ,EAAE,EAAE;wBACZ,MAAM,EACJ,kEAAkE;qBACrE;oBACH,CAAC,CAAC;wBACE,QAAQ,EAAE,EAAE;wBACZ,SAAS,EACP,kEAAkE;qBACrE,aAGN,cAAc,IAAI,CACjB,8BACE,kBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE;oCACZ,IAAI,iBAAiB,EAAE,CAAC;wCACtB,iBAAiB,EAAE,CAAC;oCACtB,CAAC;yCAAM,CAAC;wCACN,WAAW,CAAC,KAAK,EAAE,CAAC;oCACtB,CAAC;gCACH,CAAC,EACD,QAAQ,EAAE,CAAC,iBAAiB,IAAI,WAAW,CAAC,UAAU,EACtD,SAAS,EAAC,0FAA0F,aAEpG,KAAC,iBAAiB,IAAC,SAAS,EAAC,uCAAuC,GAAG,EACvE,gBAAM,SAAS,EAAC,gBAAgB,aAC9B,eAAM,SAAS,EAAC,+CAA+C,YAC5D,CAAC,iBAAiB,IAAI,WAAW,CAAC,UAAU;oDAC3C,CAAC,CAAC,wBAAwB;oDAC1B,CAAC,CAAC,oBAAoB,GACnB,EACP,eAAM,SAAS,EAAC,yCAAyC,yDAElD,IACF,IACA,EACT,cAAK,SAAS,EAAC,6BAA6B,GAAG,IAC9C,CACJ,EACA,cAAc,IAAI,CACjB,kBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE;4BACZ,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;4BACxC,OAAO,CAAC,KAAK,CAAC,CAAC;wBACjB,CAAC,EACD,SAAS,EAAC,yEAAyE,aAEnF,eAAM,SAAS,EAAC,qDAAqD,qBAE9D,EACN,KAAK,KAAK,MAAM,IAAI,CACnB,KAAC,SAAS,IAAC,SAAS,EAAC,oCAAoC,GAAG,CAC7D,IACM,CACV,EACA,cAAc,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,IAAI,CAC9C,cAAK,SAAS,EAAC,6BAA6B,GAAG,CAChD,EACA,cAAc,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;wBAC5B,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;wBAC9C,MAAM,QAAQ,GAAG,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;wBAClD,MAAM,UAAU,GAAG,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;wBAChD,MAAM,WAAW,GAAG,UAAU,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,gBAAgB,CAAC;wBACpE,OAAO,CACL,0BACE,eAAK,SAAS,EAAC,sCAAsC,aACnD,kBACE,IAAI,EAAC,QAAQ,mBACE,UAAU,EACzB,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,EACpC,SAAS,EAAC,+EAA+E,aAEzF,KAAC,WAAW,IAAC,SAAS,EAAC,wCAAwC,GAAG,EAClE,eAAM,SAAS,EAAC,gFAAgF,YAC7F,KAAK,CAAC,KAAK,GACP,EACN,CAAC,UAAU,IAAI,QAAQ,KAAK,gBAAgB,IAAI,CAC/C,eAAM,SAAS,EAAC,+CAA+C,YAC5D,iBAAiB,CAAC,KAAK,CAAC,GACpB,CACR,IACM,EACR,CAAC,KAAK,CAAC,UAAU,IAAI,CACpB,iBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,uFAAuF,EACjG,OAAO,EAAE,eAAe,8BAGjB,CACV,IACG,EACL,UAAU;oCACT,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAChB,kBAEE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE;4CACZ,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;gDACtB,eAAe,EAAE,CAAC;gDAClB,OAAO;4CACT,CAAC;4CACD,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;4CAC1B,MAAM,WAAW,GAAG,iCAAiC,CAAC,CAAC,CAAC,CAAC;4CACzD,IACE,MAAM,KAAK,MAAM;gDACjB,WAAW,CAAC,MAAM,GAAG,CAAC;gDACtB,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,EAC7B,CAAC;gDACD,cAAc,EAAE,CAAC,MAAM,CAAC,CAAC;4CAC3B,CAAC;4CACD,OAAO,CAAC,KAAK,CAAC,CAAC;wCACjB,CAAC,EACD,SAAS,EAAE,6DACT,KAAK,CAAC,UAAU;4CACd,CAAC,CAAC,oBAAoB;4CACtB,CAAC,CAAC,2BACN,EAAE,aAEF,eAAM,SAAS,EAAC,qDAAqD,YAClE,iBAAiB,CAAC,CAAC,CAAC,GAChB,EACN,CAAC,KAAK,KAAK,IAAI,KAAK,CAAC,UAAU,IAAI,CAClC,KAAC,SAAS,IAAC,SAAS,EAAC,oCAAoC,GAAG,CAC7D,KA7BI,CAAC,CA8BC,CACV,CAAC,KA9DI,QAAQ,CA+DZ,CACP,CAAC;oBACJ,CAAC,CAAC,EACD,aAAa,CAAC,MAAM,GAAG,CAAC,IAAI,CAC3B,8BACE,cAAK,SAAS,EAAC,6BAA6B,GAAG,EAC/C,cAAK,SAAS,EAAC,mFAAmF,0BAE5F,EACL,aAAa,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAC7B,kBAEE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE,CAAC,cAAc,EAAE,CAAC,MAAM,CAAC,EACvC,SAAS,EAAC,yEAAyE,aAEnF,eAAM,SAAS,EAAC,qDAAqD,YAClE,oBAAoB,CAAC,MAAM,CAAC,GACxB,EACN,MAAM,KAAK,MAAM,IAAI,CACpB,KAAC,SAAS,IAAC,SAAS,EAAC,oCAAoC,GAAG,CAC7D,KAVI,MAAM,CAWJ,CACV,CAAC,IACD,CACJ,IACc,IACT,CACX,CAAC;AACJ,CAAC;AASD,MAAM,UAAU,cAAc,CAAC,EAC7B,WAAW,GAAG,kBAAkB,EAChC,QAAQ,GAAG,KAAK,EAChB,QAAQ,EACR,WAAW,EACX,cAAc,EACd,QAAQ,EACR,aAAa,GAAG,IAAI,EACpB,YAAY,EACZ,YAAY,EACZ,iBAAiB,EACjB,YAAY,EACZ,WAAW,EACX,WAAW,EACX,aAAa,GAAG,SAAS,EACzB,aAAa,GAAG,EAAE,EAClB,WAAW,GAAG,EAAE,EAChB,2BAA2B,GAAG,IAAI,EAClC,yBAAyB,GAAG,IAAI,EAChC,cAAc,EACd,QAAQ,EACR,gBAAgB,EAChB,gBAAgB,GAAG,KAAK,EACxB,sBAAsB,EACtB,YAAY,GAAG,IAAI,EACnB,aAAa,EACb,cAAc,EACd,eAAe,EACf,aAAa,EACb,cAAc,EACd,4BAA4B,EAC5B,iBAAiB,EACjB,UAAU,EACV,YAAY,GAAG,EAAE,EACjB,mBAAmB,EACnB,YAAY,GAAG,MAAM,EACrB,gCAAgC,GAAG,KAAK,EACxC,iBAAiB,GACG;IACpB,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAe,IAAI,CAAC,CAAC;IAC3D,MAAM,UAAU,GAAG,MAAM,CAAoB,IAAI,CAAC,CAAC;IACnD,MAAM,eAAe,GAAG,kBAAkB,EAAE,CAAC;IAC7C,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC1D,MAAM,YAAY,GAAG,WAAW,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACxD,MAAM,mBAAmB,GAAG,WAAW,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IACtE,MAAM,OAAO,GAAG,wBAAwB,CAAC;QACvC,gBAAgB,EAAE,aAAa;QAC/B,eAAe,EAAE,mBAAmB,CAAC,MAAM;QAC3C,QAAQ;KACT,CAAC,CAAC;IACH,MAAM,eAAe,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;IAChD,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAsB,IAAI,CAAC,CAAC;IAC5E,MAAM,eAAe,GAAG,MAAM,CAAsB,IAAI,CAAC,CAAC;IAC1D,MAAM,KAAK,GACT,OAAO,SAAS,KAAK,WAAW;QAChC,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IAE9C,0EAA0E;IAC1E,MAAM,eAAe,GAAG,MAAM,CAAe,IAAI,CAAC,CAAC;IACnD,MAAM,oBAAoB,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;IACvD,oBAAoB,CAAC,OAAO,GAAG,iBAAiB,CAAC;IACjD,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;IACrC,WAAW,CAAC,OAAO,GAAG,QAAQ,CAAC;IAC/B,MAAM,mBAAmB,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;IACrD,mBAAmB,CAAC,OAAO,GAAG,gBAAgB,CAAC;IAC/C,MAAM,mBAAmB,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;IACrD,mBAAmB,CAAC,OAAO,GAAG,gBAAgB,CAAC;IAE/C,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,eAAe,EAAE,GAAG,gBAAgB,CAC1E,OAAO,EAAE,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAC1C,OAAO,EAAE,IAAI,KAAK,GAAG,CACtB,CAAC;IAEF,MAAM,EACJ,MAAM,EACN,IAAI,EACJ,SAAS,EAAE,aAAa,GACzB,GAAG,SAAS,CAAC,yBAAyB,IAAI,OAAO,EAAE,IAAI,KAAK,GAAG,CAAC,CAAC;IAElE,MAAM,gBAAgB,GAAG,OAAO,CAC9B,GAAG,EAAE,CACH,kBAAkB,CAAC;QACjB,GAAG,CAAC,2BAA2B,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC;QACzD,GAAG,aAAa;KACjB,CAAC,EACJ,CAAC,2BAA2B,EAAE,aAAa,CAAC,CAC7C,CAAC;IAEF,MAAM,cAAc,GAAG,OAAO,CAC5B,GAAG,EAAE,CACH,gBAAgB,CAAC;QACf,GAAG,CAAC,yBAAyB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5C,GAAG,WAAW;KACf,CAAC,EACJ,CAAC,yBAAyB,EAAE,MAAM,EAAE,WAAW,CAAC,CACjD,CAAC;IAEF,MAAM,gBAAgB,GAAG,OAAO,CAAC,GAAG,EAAE;QACpC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,GAAG;YAAE,OAAO,gBAAgB,CAAC;QAC9D,MAAM,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QACtC,IAAI,CAAC,CAAC;YAAE,OAAO,gBAAgB,CAAC;QAChC,OAAO,gBAAgB,CAAC,MAAM,CAC5B,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;YAChC,CAAC,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAC1C,CAAC;IACJ,CAAC,EAAE,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC,CAAC;IAEhC,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,EAAE;QAClC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,GAAG;YAAE,OAAO,cAAc,CAAC;QAC5D,MAAM,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QACtC,IAAI,CAAC,CAAC;YAAE,OAAO,cAAc,CAAC;QAC9B,OAAO,cAAc,CAAC,MAAM,CAC1B,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;YAChC,CAAC,CAAC,WAAW,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAC3C,CAAC;IACJ,CAAC,EAAE,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC,CAAC;IAE9B,+BAA+B;IAC/B,MAAM,eAAe,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;IAC7C,eAAe,CAAC,OAAO,GAAG,YAAY,CAAC;IACvC,MAAM,mBAAmB,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;IACrD,mBAAmB,CAAC,OAAO,GAAG,gBAAgB,CAAC;IAC/C,MAAM,iBAAiB,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;IACjD,iBAAiB,CAAC,OAAO,GAAG,cAAc,CAAC;IAC3C,MAAM,iBAAiB,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;IACjD,iBAAiB,CAAC,OAAO,GAAG,cAAc,CAAC;IAC3C,MAAM,eAAe,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;IAC7C,eAAe,CAAC,OAAO,GAAG,YAAY,CAAC;IACvC,MAAM,iBAAiB,GAAG,MAAM,CAA8B,SAAS,CAAC,CAAC;IAEzE,MAAM,YAAY,GAAG,WAAW,CAAC,GAAG,EAAE;QACpC,UAAU,CAAC,IAAI,CAAC,CAAC;QACjB,eAAe,CAAC,OAAO,GAAG,IAAI,CAAC;IACjC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,qEAAqE;IACrE,MAAM,QAAQ,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAC;IACjD,MAAM,aAAa,GAAG,MAAM,CAAgC,SAAS,CAAC,CAAC;IACvE,SAAS,CAAC,GAAG,EAAE;QACb,OAAO,GAAG,EAAE;YACV,YAAY,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QACtC,CAAC,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;IACP,qEAAqE;IACrE,kDAAkD;IAClD,MAAM,cAAc,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;IAC3C,SAAS,CAAC,GAAG,EAAE;QACb,cAAc,CAAC,OAAO,GAAG,YAAY;YACnC,CAAC,CAAC,qBAAqB,CAAC,YAAY,CAAC,CAAC,WAAW;YACjD,CAAC,CAAC,WAAW,CAAC;IAClB,CAAC,EAAE,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC;IAEhC,MAAM,MAAM,GAAG,SAAS,CAAC;QACvB,UAAU,EAAE,8BAA8B,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,OAAO,CAAC;QACxE,QAAQ,EAAE,CAAC,QAAQ;QACnB,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE;YAC3B,yBAAyB;YACzB,IAAI,CAAC;gBACH,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;oBAC9B,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC;oBACpD,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;oBACzB,gBAAgB,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;oBAC7D,iBAAiB,CAAC,OAAO,GAAG,cAAc,IAAI,WAAW,CAAC;gBAC5D,CAAC;qBAAM,CAAC;oBACN,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;oBAC7C,IAAI,KAAK,EAAE,CAAC;wBACV,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;wBAC9B,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;wBACzB,gBAAgB,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;oBAC/D,CAAC;gBACH,CAAC;gBACD,eAAe,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;YAC7D,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;QACZ,CAAC;QACD,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE;YAC3B,yEAAyE;YACzE,sEAAsE;YACtE,IAAI,UAAU,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;YAC5D,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,IAAS,EAAE,EAAE;oBACrC,IACE,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,kBAAkB;wBACrC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,eAAe;wBAClC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,gBAAgB,EACnC,CAAC;wBACD,UAAU,GAAG,IAAI,CAAC;wBAClB,OAAO,KAAK,CAAC;oBACf,CAAC;oBACD,OAAO,IAAI,CAAC;gBACd,CAAC,CAAC,CAAC;YACL,CAAC;YACD,gBAAgB,CAAC,UAAU,CAAC,CAAC;YAC7B,eAAe,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;YAE3D,sCAAsC;YACtC,YAAY,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;YACpC,aAAa,CAAC,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;gBACtC,IAAI,CAAC;oBACH,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;oBAC1B,MAAM,OAAO,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;oBACjD,IAAI,OAAO,EAAE,CAAC;wBACZ,YAAY,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;oBACpC,CAAC;yBAAM,CAAC;wBACN,YAAY,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;oBACvC,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC,CAAA,CAAC;YACZ,CAAC,EAAE,GAAG,CAAC,CAAC;QACV,CAAC;QACD,WAAW,EAAE;YACX,UAAU,EAAE;gBACV,6BAA6B,EAAE,aAAa;gBAC5C,0BAA0B,EAAE,cAAc;gBAC1C,KAAK,EACH,oKAAoK;aACvK;YACD,WAAW,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;gBAC5B,MAAM,KAAK,GAAG,kBAAkB,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;gBACtD,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC;gBAC9B,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,CAC/D,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CACzC,CAAC;gBACF,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACrB,KAAK,CAAC,cAAc,EAAE,CAAC;oBACvB,MAAM,WAAW,GAAW,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;wBAC7C,oEAAoE;wBACpE,8DAA8D;wBAC9D,oEAAoE;wBACpE,sEAAsE;wBACtE,MAAM,UAAU,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;wBACvF,OAAO,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;oBAC3D,CAAC,CAAC,CAAC;oBAEH,gEAAgE;oBAChE,mEAAmE;oBACnE,oEAAoE;oBACpE,oDAAoD;oBACpD,IAAI,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC;wBACtB,WAAW,CAAC,IAAI,CAAC,0BAA0B,CAAC,KAAK,CAAC,CAAC,CAAC;oBACtD,CAAC;oBAED,KAAK,OAAO,CAAC,GAAG,CACd,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,eAAe,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAC/D,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;wBAChB,MAAM,GAAG,GACP,KAAK,YAAY,KAAK;4BACpB,CAAC,CAAC,KAAK,CAAC,OAAO;4BACf,CAAC,CAAC,4DAA4D,CAAC;wBACnE,oBAAoB,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;oBACtC,CAAC,CAAC,CAAC;oBACH,OAAO,IAAI,CAAC;gBACd,CAAC;gBAED,qEAAqE;gBACrE,uEAAuE;gBACvE,wEAAwE;gBACxE,mEAAmE;gBACnE,oEAAoE;gBACpE,oEAAoE;gBACpE,gEAAgE;gBAChE,IAAI,kCAAkC,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC9C,KAAK,CAAC,cAAc,EAAE,CAAC;oBACvB,KAAK,eAAe;yBACjB,aAAa,CAAC,0BAA0B,CAAC,KAAK,CAAC,CAAC;yBAChD,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;wBACf,MAAM,GAAG,GACP,KAAK,YAAY,KAAK;4BACpB,CAAC,CAAC,KAAK,CAAC,OAAO;4BACf,CAAC,CAAC,mCAAmC,CAAC;wBAC1C,oBAAoB,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;oBACtC,CAAC,CAAC,CAAC;oBACL,OAAO,IAAI,CAAC;gBACd,CAAC;gBAED,OAAO,KAAK,CAAC;YACf,CAAC;YACD,UAAU,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;gBAC3B,qEAAqE;gBACrE,uEAAuE;gBACvE,mCAAmC;gBACnC,OAAO,sBAAsB,CAAC;oBAC5B,KAAK,EAAE,KAAkB;oBACzB,aAAa,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,eAAe,CAAC,aAAa,CAAC,IAAI,CAAC;oBAC5D,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;wBACjB,MAAM,GAAG,GACP,KAAK,YAAY,KAAK;4BACpB,CAAC,CAAC,KAAK,CAAC,OAAO;4BACf,CAAC,CAAC,4DAA4D,CAAC;wBACnE,oBAAoB,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;oBACtC,CAAC;iBACF,CAAC,CAAC;YACL,CAAC;YACD,aAAa,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;gBAC7B,MAAM,GAAG,GAAG,eAAe,CAAC,OAAO,CAAC;gBAEpC,8BAA8B;gBAC9B,IAAI,GAAG,EAAE,CAAC;oBACR,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;wBAC5B,KAAK,CAAC,cAAc,EAAE,CAAC;wBACvB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;wBAC7B,OAAO,IAAI,CAAC;oBACd,CAAC;oBACD,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,EAAE,CAAC;wBAC9B,KAAK,CAAC,cAAc,EAAE,CAAC;wBACvB,UAAU,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC;wBAC/B,OAAO,IAAI,CAAC;oBACd,CAAC;oBACD,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,EAAE,CAAC;wBAC1B,KAAK,CAAC,cAAc,EAAE,CAAC;wBACvB,MAAM,GAAG,GAAG,UAAU,CAAC,OAAO,EAAE,gBAAgB,EAAE,IAAI,CAAC,CAAC;wBACxD,MAAM,eAAe,GAAG,mBAAmB,CAAC,OAAO,CAAC;wBACpD,MAAM,aAAa,GAAG,iBAAiB,CAAC,OAAO,CAAC;wBAChD,IAAI,GAAG,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;4BACrB,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,EAAE,kBAAkB,EAAE,CAAC;4BACtD,IAAI,IAAI;gCAAE,aAAa,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;wBAC3C,CAAC;6BAAM,IAAI,GAAG,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;4BAC5B,MAAM,GAAG,GAAG,UAAU,CAAC,OAAO,EAAE,kBAAkB,EAAE,CAAC;4BACrD,IAAI,GAAG,EAAE,CAAC;gCACR,cAAc,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;4BACjC,CAAC;iCAAM,CAAC;gCACN,MAAM,QAAQ,GAAG,GAAG,GAAG,eAAe,CAAC,MAAM,CAAC;gCAC9C,IAAI,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC;oCAC5B,WAAW,CAAC,IAAI,EAAE,GAAG,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC;gCAClD,CAAC;4BACH,CAAC;wBACH,CAAC;wBACD,OAAO,IAAI,CAAC;oBACd,CAAC;oBACD,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;wBAC3B,KAAK,CAAC,cAAc,EAAE,CAAC;wBACvB,eAAe,CAAC,OAAO,GAAG,IAAI,CAAC;wBAC/B,UAAU,CAAC,IAAI,CAAC,CAAC;wBACjB,OAAO,IAAI,CAAC;oBACd,CAAC;oBACD,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,IAAI,GAAG,CAAC,KAAK,KAAK,EAAE,EAAE,CAAC;wBAC1C,eAAe,CAAC,OAAO,GAAG,IAAI,CAAC;wBAC/B,UAAU,CAAC,IAAI,CAAC,CAAC;wBACjB,OAAO,KAAK,CAAC;oBACf,CAAC;gBACH,CAAC;gBAED,4DAA4D;gBAC5D,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,IAAI,eAAe,CAAC,OAAO,EAAE,CAAC;oBACzD,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;oBAC1C,IACE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE;wBACxC,IAAI,KAAK,EAAE;wBACX,IAAI,IAAI,CAAC,EACT,CAAC;wBACD,eAAe,CAAC,IAAI,CAAC,CAAC;wBACtB,eAAe,CAAC,OAAO,GAAG,IAAI,CAAC;wBAC/B,OAAO,IAAI,CAAC;oBACd,CAAC;gBACH,CAAC;gBAED,kEAAkE;gBAClE,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;oBAC1C,KAAK,CAAC,cAAc,EAAE,CAAC;oBACvB,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC;oBACpC,MAAM,EAAE,GAAG,mBAAmB,CAAC,OAAO,CAAC;oBACvC,IAAI,OAAO,IAAI,EAAE,EAAE,CAAC;wBAClB,MAAM,IAAI,GAAG,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;wBACpD,IAAI,IAAI,KAAK,MAAM,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,CAAC;4BACpD,EAAE,CAAC,IAAI,CAAC,CAAC;wBACX,CAAC;oBACH,CAAC;oBACD,OAAO,IAAI,CAAC;gBACd,CAAC;gBAED,+DAA+D;gBAC/D,kCAAkC;gBAClC,qEAAqE;gBACrE,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;oBAC5C,KAAK,CAAC,cAAc,EAAE,CAAC;oBACvB,OAAO,wCAAwC,CAAC,IAAI,CAAC,CAAC;gBACxD,CAAC;gBAED,MAAM,YAAY,GAAG,kCAAkC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;gBACtE,IAAI,YAAY,EAAE,CAAC;oBACjB,KAAK,CAAC,cAAc,EAAE,CAAC;oBACvB,cAAc,CAAC,YAAY,CAAC,CAAC;oBAC7B,OAAO,IAAI,CAAC;gBACd,CAAC;gBAED,4EAA4E;gBAC5E,wEAAwE;gBACxE,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;oBACtB,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;oBACtC,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAC3C,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC,EACrB,IAAI,CACL,CAAC;oBACF,IAAI,IAAI,KAAK,CAAC,IAAI,UAAU,KAAK,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;wBAC7D,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;wBACtC,UAAU,CAAC,GAAG,EAAE;4BACd,MAAM,KAAK,GAAiB;gCAC1B,IAAI,EAAE,GAAG;gCACT,QAAQ,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE;gCAChD,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI;gCACnC,KAAK,EAAE,EAAE;6BACV,CAAC;4BACF,eAAe,CAAC,OAAO,GAAG,KAAK,CAAC;4BAChC,UAAU,CAAC,KAAK,CAAC,CAAC;wBACpB,CAAC,EAAE,CAAC,CAAC,CAAC;oBACR,CAAC;oBACD,OAAO,KAAK,CAAC;gBACf,CAAC;gBAED,+DAA+D;gBAC/D,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;oBACtB,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;oBACtC,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAC3C,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC,EACrB,IAAI,CACL,CAAC;oBACF,IAAI,IAAI,KAAK,CAAC,IAAI,UAAU,KAAK,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;wBAC7D,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;wBACtC,UAAU,CAAC,GAAG,EAAE;4BACd,MAAM,KAAK,GAAiB;gCAC1B,IAAI,EAAE,GAAG;gCACT,QAAQ,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE;gCAChD,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI;gCACnC,KAAK,EAAE,EAAE;6BACV,CAAC;4BACF,eAAe,CAAC,OAAO,GAAG,KAAK,CAAC;4BAChC,UAAU,CAAC,KAAK,CAAC,CAAC;wBACpB,CAAC,EAAE,CAAC,CAAC,CAAC;oBACR,CAAC;oBACD,OAAO,KAAK,CAAC;gBACf,CAAC;gBAED,OAAO,KAAK,CAAC;YACf,CAAC;SACF;KACF,CAAC,CAAC;IAEH,mBAAmB,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;QACnC,KAAK;YACH,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;QACD,OAAO,CAAC,IAAY;YAClB,IAAI,CAAC,MAAM;gBAAE,OAAO;YACpB,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;YACjD,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC7B,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;YACpD,gBAAgB,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACrC,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACjC,eAAe,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC;YACnC,IAAI,CAAC;gBACH,IAAI,OAAO,EAAE,CAAC;oBACZ,YAAY,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;gBACnD,CAAC;qBAAM,CAAC;oBACN,YAAY,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;gBACpC,CAAC;YACH,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;QACZ,CAAC;KACF,CAAC,CAAC,CAAC;IAEJ,MAAM,gBAAgB,GAAG,WAAW,CAClC,CAAC,IAAkB,EAAE,EAAE;QACrB,eAAe,CAAC,IAAI,CAAC,CAAC;QACtB,eAAe,CAAC,OAAO,GAAG,IAAI,CAAC;QAC/B,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;IACtD,CAAC,EACD,CAAC,MAAM,CAAC,CACT,CAAC;IAEF,kFAAkF;IAClF,MAAM,cAAc,GAAG,MAAM,CAAgB,IAAI,CAAC,CAAC;IACnD,MAAM,kBAAkB,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;IAEtC,MAAM,gBAAgB,GAAG,WAAW,CAClC,CAAC,SAAiB,EAAE,WAAmB,EAAE,EAAE;QACzC,MAAM,EAAE,GAAG,MAAM,CAAC;QAClB,IAAI,CAAC,EAAE;YAAE,OAAO;QAEhB,IAAI,cAAc,CAAC,OAAO,IAAI,IAAI,EAAE,CAAC;YACnC,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC;YACpC,MAAM,QAAQ,GACZ,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3D,IAAI,QAAQ,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACrC,EAAE,CAAC,KAAK,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;YACtC,CAAC;YACD,cAAc,CAAC,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC;YACjD,kBAAkB,CAAC,OAAO,GAAG,EAAE,CAAC;QAClC,CAAC;QAED,MAAM,MAAM,GAAG,cAAc,CAAC,OAAO,CAAC;QACtC,MAAM,OAAO,GAAG,kBAAkB,CAAC,OAAO,CAAC,MAAM,CAAC;QAClD,MAAM,OAAO,GAAG,SAAS,GAAG,WAAW,CAAC;QAExC,IAAI,OAAO,KAAK,kBAAkB,CAAC,OAAO;YAAE,OAAO;QAEnD,EAAE,CAAC,KAAK,EAAE;aACP,WAAW,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,EAAE,CAAC;aACnD,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC;aAChC,GAAG,EAAE,CAAC;QAET,kBAAkB,CAAC,OAAO,GAAG,OAAO,CAAC;IACvC,CAAC,EACD,CAAC,MAAM,CAAC,CACT,CAAC;IAEF,MAAM,gBAAgB,GAAG,WAAW,CAClC,CAAC,IAAY,EAAE,EAAE;QACf,MAAM,EAAE,GAAG,MAAM,CAAC;QAClB,IAAI,CAAC,EAAE;YAAE,OAAO;QAEhB,MAAM,MAAM,GAAG,cAAc,CAAC,OAAO,CAAC;QACtC,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;YACnB,MAAM,OAAO,GAAG,kBAAkB,CAAC,OAAO,CAAC,MAAM,CAAC;YAClD,IAAI,IAAI,EAAE,CAAC;gBACT,EAAE,CAAC,KAAK,EAAE;qBACP,KAAK,EAAE;qBACP,WAAW,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,EAAE,CAAC;qBACnD,eAAe,CAAC,MAAM,EAAE,IAAI,GAAG,GAAG,CAAC;qBACnC,GAAG,EAAE,CAAC;YACX,CAAC;iBAAM,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;gBACvB,EAAE,CAAC,KAAK,EAAE;qBACP,WAAW,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,EAAE,CAAC;qBACnD,GAAG,EAAE,CAAC;YACX,CAAC;YACD,cAAc,CAAC,OAAO,GAAG,IAAI,CAAC;YAC9B,kBAAkB,CAAC,OAAO,GAAG,EAAE,CAAC;QAClC,CAAC;aAAM,IAAI,IAAI,EAAE,CAAC;YAChB,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC;YACpC,MAAM,QAAQ,GACZ,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3D,MAAM,SAAS,GAAG,QAAQ,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACnD,EAAE,CAAC,KAAK,EAAE;iBACP,KAAK,EAAE;iBACP,aAAa,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,GAAG,GAAG,CAAC;iBAClD,GAAG,EAAE,CAAC;QACX,CAAC;IACH,CAAC,EACD,CAAC,MAAM,CAAC,CACT,CAAC;IAEF,MAAM,KAAK,GAAG,iBAAiB,CAAC;QAC9B,YAAY,EAAE,gBAAgB;QAC9B,YAAY,EAAE,gBAAgB;KAC/B,CAAC,CAAC;IAEH,qFAAqF;IACrF,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,KAAK,CAAC,KAAK,KAAK,MAAM,IAAI,cAAc,CAAC,OAAO,IAAI,IAAI,EAAE,CAAC;YAC7D,MAAM,MAAM,GAAG,cAAc,CAAC,OAAO,CAAC;YACtC,MAAM,OAAO,GAAG,kBAAkB,CAAC,OAAO,CAAC,MAAM,CAAC;YAClD,IAAI,MAAM,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;gBAC1B,MAAM;qBACH,KAAK,EAAE;qBACP,WAAW,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,EAAE,CAAC;qBACnD,GAAG,EAAE,CAAC;YACX,CAAC;YACD,cAAc,CAAC,OAAO,GAAG,IAAI,CAAC;YAC9B,kBAAkB,CAAC,OAAO,GAAG,EAAE,CAAC;QAClC,CAAC;IACH,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;IAE1B,0EAA0E;IAC1E,yEAAyE;IACzE,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,YAAY,IAAI,CAAC,KAAK,CAAC,SAAS;YAAE,OAAO;QAC9C,MAAM,OAAO,GAAG,CAAC,CAAgB,EAAE,EAAE;YACnC,sEAAsE;YACtE,kEAAkE;YAClE,MAAM,aAAa,GACjB,OAAO,CAAC,CAAC,GAAG,KAAK,QAAQ;gBACzB,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,GAAG;gBAC3B,CAAC,CAAC,QAAQ;gBACV,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC;gBACxB,CAAC,CAAC,CAAC,MAAM,CAAC;YACZ,IAAI,aAAa,EAAE,CAAC;gBAClB,CAAC,CAAC,cAAc,EAAE,CAAC;gBACnB,IAAI,KAAK,CAAC,KAAK,KAAK,WAAW,IAAI,KAAK,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;oBAC9D,KAAK,CAAC,IAAI,EAAE,CAAC;gBACf,CAAC;qBAAM,IAAI,KAAK,CAAC,KAAK,KAAK,cAAc,EAAE,CAAC;oBAC1C,KAAK,KAAK,CAAC,KAAK,EAAE,CAAC;gBACrB,CAAC;gBACD,OAAO;YACT,CAAC;YACD,IACE,CAAC,CAAC,GAAG,KAAK,QAAQ;gBAClB,CAAC,KAAK,CAAC,KAAK,KAAK,WAAW,IAAI,KAAK,CAAC,KAAK,KAAK,UAAU,CAAC,EAC3D,CAAC;gBACD,CAAC,CAAC,cAAc,EAAE,CAAC;gBACnB,KAAK,CAAC,MAAM,EAAE,CAAC;YACjB,CAAC;QACH,CAAC,CAAC;QACF,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAC5C,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC9D,CAAC,EAAE,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC,CAAC;IAE1B,MAAM,sBAAsB,GAAG,WAAW,CAAC,GAAG,EAAE;QAC9C,MAAM,EAAE,GAAG,MAAM,CAAC;QAClB,IAAI,CAAC,EAAE,EAAE,CAAC;YACR,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,EAAiB,EAAE,CAAC;QACrD,CAAC;QAED,MAAM,UAAU,GAAgB,EAAE,CAAC;QAEnC,+DAA+D;QAC/D,6EAA6E;QAC7E,MAAM,SAAS,GAAa,EAAE,CAAC;QAC/B,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,IAAS,EAAE,EAAE;YACrC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAChB,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC5B,CAAC;iBAAM,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;gBACjD,SAAS,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,MAAM,GAAG,CAAC,CAAC;YACxE,CAAC;iBAAM,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;gBAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;gBACnE,SAAS,CAAC,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC;YACrC,CAAC;iBAAM,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;gBAC/C,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YACxC,CAAC;iBAAM,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;gBAC1C,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACvB,CAAC;iBAAM,IACL,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,WAAW;gBAC9B,SAAS,CAAC,MAAM,GAAG,CAAC;gBACpB,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,IAAI,EACxC,CAAC;gBACD,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACvB,CAAC;QACH,CAAC,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAEvC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,IAAS,EAAE,EAAE;YACrC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;gBACvC,iBAAiB;gBACjB,UAAU,CAAC,IAAI,CAAC;oBACd,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;oBACrB,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI;oBAC1D,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,UAAU;iBACxC,CAAC,CAAC;YACL,CAAC;iBAAM,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;gBACjD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;gBACnC,UAAU,CAAC,IAAI,CAAC;oBACd,IAAI,EACF,OAAO,KAAK,MAAM;wBAChB,CAAC,CAAC,MAAM;wBACR,CAAC,CAAC,OAAO,KAAK,OAAO;4BACnB,CAAC,CAAC,OAAO;4BACT,CAAC,CAAC,OAAO,KAAK,cAAc;gCAC1B,CAAC,CAAC,cAAc;gCAChB,CAAC,CAAC,SAAS;oBACnB,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE;oBAC9B,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK;oBACtB,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM;oBACzB,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO;oBAC3B,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK;iBACxB,CAAC,CAAC;YACL,CAAC;iBAAM,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;gBAC/C,UAAU,CAAC,IAAI,CAAC;oBACd,IAAI,EAAE,OAAO;oBACb,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;oBACrB,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;oBACrB,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,UAAU;iBACxC,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;IAC9B,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEb,MAAM,iBAAiB,GAAG,WAAW,CAAC,GAAG,EAAE;QACzC,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,sBAAsB,EAAE,CAAC;QACtD,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC9B,eAAe,CAAC,YAAY,CAC1B,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CACxD,CAAC;QACF,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;IAC9B,CAAC,EAAE,CAAC,eAAe,EAAE,sBAAsB,CAAC,CAAC,CAAC;IAE9C,MAAM,cAAc,GAAG,WAAW,CAChC,CAAC,SAA+B,WAAW,EAAE,EAAE;QAC7C,MAAM,EAAE,GAAG,MAAM,CAAC;QAClB,IAAI,CAAC,EAAE;YAAE,OAAO;QAEhB,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,iBAAiB,EAAE,CAAC;QACjD,MAAM,WAAW,GAAG,eAAe,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC;QAC3D,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;YACrE,OAAO;QACT,MAAM,iBAAiB,GAAG,GAAG,EAAE;YAC7B,IACE,KAAK,CAAC,KAAK,KAAK,WAAW;gBAC3B,KAAK,CAAC,KAAK,KAAK,UAAU;gBAC1B,KAAK,CAAC,KAAK,KAAK,cAAc,EAC9B,CAAC;gBACD,KAAK,CAAC,MAAM,EAAE,CAAC;YACjB,CAAC;QACH,CAAC,CAAC;QAEF,kEAAkE;QAClE,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvD,MAAM,OAAO,GAAG,yBAAyB,CAAC,OAAO,CAAC,CAAC;YACnD,MAAM,OAAO,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;YACjE,IAAI,OAAO,EAAE,CAAC;gBACZ,EAAE,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;gBAC3B,IAAI,CAAC;oBACH,YAAY,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;gBACpC,CAAC;gBAAC,MAAM,CAAC,CAAA,CAAC;gBACV,YAAY,EAAE,CAAC;gBACf,iBAAiB,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBAC1C,OAAO;YACT,CAAC;QACH,CAAC;QAED,yDAAyD;QACzD,IAAI,YAAY,EAAE,CAAC;YACjB,MAAM,MAAM,GAAG,qBAAqB,CAAC,YAAY,CAAC,CAAC;YACnD,MAAM,CAAC,UAAU,EAAE,EAAE,CAAC;YACtB,MAAM,OAAO,GAAG,8BAA8B,CAAC;gBAC7C,aAAa,EAAE,MAAM,CAAC,aAAa;gBACnC,WAAW,EAAE,OAAO;gBACpB,eAAe,EAAE,WAAW,CAAC,MAAM;aACpC,CAAC,CAAC;YACH,MAAM,UAAU,GACd,OAAO;gBACP,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC9D,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC3B,eAAe,CAAC,OAAO,CACrB,GAAG,OAAO,kBAAkB,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,cAAc,CACxE,CAAC;gBACF,eAAe,CAAC,IAAI,EAAE,CAAC;YACzB,CAAC;iBAAM,CAAC;gBACN,eAAe,CAAC;oBACd,OAAO;oBACP,OAAO,EAAE,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC;oBACtC,MAAM,EAAE,IAAI;iBACb,CAAC,CAAC;YACL,CAAC;YACD,iBAAiB,EAAE,CAAC;YACpB,EAAE,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;YAC3B,gBAAgB,CAAC,KAAK,CAAC,CAAC;YACxB,eAAe,CAAC,IAAI,CAAC,CAAC;YACtB,eAAe,CAAC,OAAO,GAAG,IAAI,CAAC;YAC/B,IAAI,CAAC;gBACH,YAAY,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YACpC,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;YACV,YAAY,EAAE,CAAC;YACf,OAAO;QACT,CAAC;QAED,iEAAiE;QACjE,kEAAkE;QAClE,mEAAmE;QACnE,oEAAoE;QACpE,mEAAmE;QACnE,mCAAmC;QACnC,IACE,gCAAgC;YAChC,gCAAgC,CAAC,OAAO,CAAC,EACzC,CAAC;YACD,iBAAiB,EAAE,CAAC;YACpB,EAAE,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;YAC3B,gBAAgB,CAAC,KAAK,CAAC,CAAC;YACxB,IAAI,CAAC;gBACH,YAAY,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YACpC,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;YACV,YAAY,EAAE,CAAC;YACf,OAAO;QACT,CAAC;QAED,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;YACpD,4DAA4D;YAC5D,KAAK,eAAe,CAAC,gBAAgB,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YACxD,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,YAAY,EAAE,CAAC;gBACf,OAAO;YACT,CAAC;QACH,CAAC;aAAM,CAAC;YACN,eAAe,CAAC,IAAI,EAAE,CAAC;QACzB,CAAC;QACD,iBAAiB,EAAE,CAAC;QACpB,EAAE,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;QAC3B,gBAAgB,CAAC,KAAK,CAAC,CAAC;QACxB,IAAI,CAAC;YACH,YAAY,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QACpC,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;QACV,YAAY,EAAE,CAAC;IACjB,CAAC,EACD;QACE,YAAY;QACZ,YAAY;QACZ,eAAe;QACf,MAAM;QACN,gCAAgC;QAChC,aAAa;QACb,QAAQ;QACR,iBAAiB;QACjB,KAAK;QACL,gBAAgB;KACjB,CACF,CAAC;IAEF,4DAA4D;IAC5D,kEAAkE;IAClE,SAAS,aAAa,CACpB,KAAU,EACV,GAA8B,EAC9B,IAAiB;QAEjB,MAAM,EAAE,GAAG,MAAM,CAAC;QAClB,IAAI,CAAC,EAAE;YAAE,OAAO;QAChB,MAAM,UAAU,GAAG,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC;QAC3C,kEAAkE;QAClE,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;QACjD,EAAE,CAAC,KAAK,EAAE;aACP,KAAK,EAAE;aACP,WAAW,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC;aACjD,aAAa,CAAC;YACb,IAAI,EAAE,kBAAkB;YACxB,KAAK,EAAE;gBACL,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,MAAM;gBACzB,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI;gBACzB,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,IAAI;aAC9B;SACF,CAAC;aACD,aAAa,CAAC,GAAG,CAAC;aAClB,GAAG,EAAE,CAAC;QACT,eAAe,CAAC,OAAO,GAAG,IAAI,CAAC;QAC/B,UAAU,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC;IAED,SAAS,cAAc,CACrB,KAAU,EACV,GAA8B,EAC9B,OAAqB;QAErB,MAAM,EAAE,GAAG,MAAM,CAAC;QAClB,IAAI,CAAC,EAAE;YAAE,OAAO;QAChB,MAAM,UAAU,GAAG,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC;QAC3C,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;QACjD,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC;QAC3E,eAAe,CAAC,OAAO,GAAG,IAAI,CAAC;QAC/B,UAAU,CAAC,IAAI,CAAC,CAAC;QACjB,iBAAiB,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC;IAED,SAAS,WAAW,CAClB,KAAU,EACV,GAA8B,EAC9B,KAAkB;QAElB,MAAM,EAAE,GAAG,MAAM,CAAC;QAClB,IAAI,CAAC,EAAE;YAAE,OAAO;QAChB,MAAM,UAAU,GAAG,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC;QAC3C,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;QACjD,EAAE,CAAC,KAAK,EAAE;aACP,KAAK,EAAE;aACP,WAAW,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC;aACjD,aAAa,CAAC;YACb,IAAI,EAAE,gBAAgB;YACtB,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE;SACpE,CAAC;aACD,aAAa,CAAC,GAAG,CAAC;aAClB,GAAG,EAAE,CAAC;QACT,eAAe,CAAC,OAAO,GAAG,IAAI,CAAC;QAC/B,UAAU,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC;IAED,0EAA0E;IAC1E,MAAM,mBAAmB,GAAG,WAAW,CACrC,CAAC,IAAiB,EAAE,EAAE;QACpB,IAAI,CAAC,MAAM,IAAI,CAAC,OAAO;YAAE,OAAO;QAChC,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC;QAC/C,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;QACrD,MAAM;aACH,KAAK,EAAE;aACP,KAAK,EAAE;aACP,WAAW,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC;aACjD,aAAa,CAAC;YACb,IAAI,EAAE,kBAAkB;YACxB,KAAK,EAAE;gBACL,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,MAAM;gBACzB,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI;gBACzB,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,IAAI;aAC9B;SACF,CAAC;aACD,aAAa,CAAC,GAAG,CAAC;aAClB,GAAG,EAAE,CAAC;QACT,YAAY,EAAE,CAAC;IACjB,CAAC,EACD,CAAC,MAAM,EAAE,OAAO,EAAE,YAAY,CAAC,CAChC,CAAC;IAEF,MAAM,mBAAmB,GAAG,WAAW,CACrC,CAAC,OAAqB,EAAE,EAAE;QACxB,IAAI,CAAC,MAAM,IAAI,CAAC,OAAO;YAAE,OAAO;QAChC,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC;QAC/C,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;QACrD,MAAM;aACH,KAAK,EAAE;aACP,KAAK,EAAE;aACP,WAAW,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC;aACjD,GAAG,EAAE,CAAC;QACT,YAAY,EAAE,CAAC;QACf,cAAc,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC,EACD,CAAC,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,cAAc,CAAC,CAChD,CAAC;IAEF,MAAM,iBAAiB,GAAG,WAAW,CACnC,CAAC,KAAkB,EAAE,EAAE;QACrB,IAAI,CAAC,MAAM,IAAI,CAAC,OAAO;YAAE,OAAO;QAChC,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC;QAC/C,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;QACrD,MAAM;aACH,KAAK,EAAE;aACP,KAAK,EAAE;aACP,WAAW,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC;aACjD,aAAa,CAAC;YACb,IAAI,EAAE,gBAAgB;YACtB,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE;SACpE,CAAC;aACD,aAAa,CAAC,GAAG,CAAC;aAClB,GAAG,EAAE,CAAC;QACT,YAAY,EAAE,CAAC;IACjB,CAAC,EACD,CAAC,MAAM,EAAE,OAAO,EAAE,YAAY,CAAC,CAChC,CAAC;IAEF,+CAA+C;IAC/C,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,MAAM,IAAI,CAAC,OAAO;YAAE,OAAO;QAEhC,MAAM,aAAa,GAAG,GAAG,EAAE;YACzB,iBAAiB,EAAE,CAAC;YAEpB,MAAM,GAAG,GAAG,eAAe,CAAC,OAAO,CAAC;YACpC,IAAI,CAAC,GAAG;gBAAE,OAAO;YACjB,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC;YACxC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC;YAE/B,IAAI,IAAI,GAAG,QAAQ,EAAE,CAAC;gBACpB,YAAY,EAAE,CAAC;gBACf,OAAO;YACT,CAAC;YAED,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YAE1D,8CAA8C;YAC9C,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;gBACjB,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAC9C,QAAQ,GAAG,CAAC,EACZ,QAAQ,CACT,CAAC;gBACF,IACE,CAAC,IAAI,KAAK,GAAG,IAAI,WAAW,KAAK,GAAG,CAAC;oBACrC,CAAC,IAAI,KAAK,GAAG,IAAI,WAAW,KAAK,GAAG,CAAC,EACrC,CAAC;oBACD,YAAY,EAAE,CAAC;oBACf,OAAO;gBACT,CAAC;YACH,CAAC;YAED,MAAM,OAAO,GAAG,EAAE,GAAG,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;YACxC,eAAe,CAAC,OAAO,GAAG,OAAO,CAAC;YAClC,UAAU,CAAC,OAAO,CAAC,CAAC;QACtB,CAAC,CAAC;QAEF,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;QACnC,MAAM,CAAC,EAAE,CAAC,iBAAiB,EAAE,aAAa,CAAC,CAAC;QAC5C,OAAO,GAAG,EAAE;YACV,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;YACpC,MAAM,CAAC,GAAG,CAAC,iBAAiB,EAAE,aAAa,CAAC,CAAC;QAC/C,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAEvD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,MAAM;YAAE,OAAO;QACpB,IAAI,YAAY,KAAK,EAAE;YAAE,OAAO;QAChC,IAAI,MAAM,CAAC,OAAO;YAAE,OAAO;QAC3B,MAAM,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;IACjC,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC;IAE3B,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,MAAM,IAAI,WAAW,KAAK,SAAS;YAAE,OAAO;QACjD,MAAM,GAAG,GAAG,cAAc,IAAI,WAAW,CAAC;QAC1C,IAAI,iBAAiB,CAAC,OAAO,KAAK,GAAG;YAAE,OAAO;QAC9C,iBAAiB,CAAC,OAAO,GAAG,GAAG,CAAC;QAChC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC;QACxD,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC7B,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;QACpD,gBAAgB,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACrC,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACjC,eAAe,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC;QACnC,IAAI,CAAC;YACH,IAAI,OAAO,EAAE,CAAC;gBACZ,YAAY,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;YACnD,CAAC;iBAAM,CAAC;gBACN,YAAY,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YACpC,CAAC;QACH,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;IACZ,CAAC,EAAE,CAAC,eAAe,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,cAAc,CAAC,CAAC,CAAC;IAErE,uEAAuE;IACvE,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,MAAM;YAAE,OAAO;QACpB,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,CAAC;QAC9B,IAAI,QAAQ;YAAE,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;IACvC,CAAC,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IAEvB,OAAO,CACL,8BACE,0BAAQ;;;;;;;;;OASP,GAAS,EACT,YAAY,IAAI,CACf,6CAC+B,aAAa,8BACjB,UAAU,EACnC,SAAS,EAAC,0CAA0C,YAEpD,KAAC,gBAAgB,IACf,IAAI,EAAE,YAAY,EAClB,QAAQ,EAAE,GAAG,EAAE;wBACb,eAAe,CAAC,IAAI,CAAC,CAAC;wBACtB,eAAe,CAAC,OAAO,GAAG,IAAI,CAAC;wBAC/B,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;oBAChC,CAAC,GACD,GACE,CACP,EACA,eAAe,IAAI,CAClB,6CAC+B,aAAa,8BACjB,aAAa,EACtC,SAAS,EAAC,oEAAoE,YAE7E,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAC1B,gBAEE,SAAS,EAAC,2IAA2I,aAErJ,KAAC,iBAAiB,IAAC,SAAS,EAAC,wCAAwC,GAAG,EACxE,eAAM,SAAS,EAAC,kBAAkB,YAAE,IAAI,CAAC,KAAK,GAAQ,EACtD,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE,CAAC,mBAAmB,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,gBAClC,UAAU,IAAI,CAAC,KAAK,UAAU,EAC1C,SAAS,EAAC,8HAA8H,YAExI,KAAC,KAAK,IAAC,SAAS,EAAC,SAAS,GAAG,GACtB,KAZJ,IAAI,CAAC,GAAG,CAaR,CACR,CAAC,GACE,CACP,EACD,6CAC+B,aAAa,8BACjB,aAAa,EACtC,SAAS,EAAE,8BACT,YAAY,IAAI,eAAe,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,gBACvD,EAAE,YAEF,KAAC,aAAa,IACZ,MAAM,EAAE,MAAM,iCACe,aAAa,8BACjB,QAAQ,EACjC,SAAS,EAAC,+GAA+G,GACzH,GACE,EACL,YAAY,IAAI,KAAC,qBAAqB,IAAC,KAAK,EAAE,KAAK,GAAI,EACxD,8CAC+B,aAAa,8BACjB,SAAS,EAClC,SAAS,EAAC,4DAA4D,aAErE,YAAY;wBACX,CAAC,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAClC,KAAC,gBAAgB,IACf,YAAY,EAAE,gBAAgB,EAC9B,IAAI,EAAE,YAAY,GAClB,CACH,CAAC,EACH,WAAW,IAAI,WAAW,EAC3B,0CAA8B,gBAAgB,EAAC,SAAS,EAAC,QAAQ,GAAG,EACnE,aAAa,IAAI,eAAe,IAAI,aAAa,IAAI,CACpD,KAAC,aAAa,IACZ,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,cAAc,EACtB,OAAO,EAAE,eAAe,EACxB,QAAQ,EAAE,aAAa,EACvB,cAAc,EAAE,cAAc,EAC9B,4BAA4B,EAAE,4BAA4B,EAC1D,iBAAiB,EAAE,iBAAiB,GACpC,CACH,EACA,QAAQ,IAAI,gBAAgB,IAAI,CAC/B,KAAC,YAAY,IACX,IAAI,EAAE,QAAQ,EACd,QAAQ,EAAE,gBAAgB,EAC1B,gBAAgB,EAAE,gBAAgB,EAClC,sBAAsB,EAAE,sBAAsB,GAC9C,CACH,EACA,YAAY,IAAI,CACf,8BACG,iBAAiB,EACjB,YAAY,IAAI,CACf,KAAC,WAAW,IAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,GAAI,CAChE,EACD,MAAC,OAAO,eACN,KAAC,cAAc,IAAC,OAAO,kBACrB,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,WAAW,CAAC,EAC1C,QAAQ,EAAE,CAAC,OAAO,8BACO,aAAa,EACtC,SAAS,EAAC,6LAA6L,YAEvM,KAAC,WAAW,IAAC,SAAS,EAAC,aAAa,GAAG,GAChC,GACM,EACjB,KAAC,cAAc,+BAA8B,IACrC,IACT,CACJ,IACG,EACN,KAAC,cAAc,IACb,GAAG,EAAE,UAAU,EACf,IAAI,EAAE,OAAO,EAAE,IAAI,IAAI,GAAG,EAC1B,QAAQ,EAAE,OAAO,EAAE,QAAQ,IAAI,IAAI,EACnC,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,gBAAgB,EAC1B,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,OAAO,EAAE,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,aAAa,EAClE,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,EAAE,EAC3B,eAAe,EAAE,mBAAmB,EACpC,aAAa,EAAE,iBAAiB,EAChC,eAAe,EAAE,mBAAmB,EACpC,OAAO,EAAE,YAAY,GACrB,IACD,CACJ,CAAC;AACJ,CAAC","sourcesContent":["import React, {\n useState,\n useRef,\n useEffect,\n useCallback,\n useImperativeHandle,\n useMemo,\n} from \"react\";\nimport { useComposer, useComposerRuntime } from \"@assistant-ui/react\";\nimport { useEditor, EditorContent } from \"@tiptap/react\";\nimport type { EditorView } from \"@tiptap/pm/view\";\nimport StarterKit from \"@tiptap/starter-kit\";\nimport Placeholder from \"@tiptap/extension-placeholder\";\nimport { FileReference } from \"./extensions/FileReference.js\";\nimport { SkillReference } from \"./extensions/SkillReference.js\";\nimport { MentionReference } from \"./extensions/MentionReference.js\";\nimport { MentionPopover, type MentionPopoverRef } from \"./MentionPopover.js\";\nimport { useMentionSearch } from \"./use-mention-search.js\";\nimport { useSkills } from \"./use-skills.js\";\nimport {\n IconArrowUp,\n IconCheck,\n IconChevronDown,\n IconChevronRight,\n IconBulb,\n IconClock,\n IconBolt,\n IconTool,\n IconX,\n IconClipboardList,\n IconPencil,\n IconPlugConnected,\n} from \"@tabler/icons-react\";\nimport { useBuilderConnectFlow } from \"../settings/useBuilderStatus.js\";\nimport type {\n MentionItem,\n SkillResult,\n Reference,\n SlashCommand,\n ComposerMode,\n AgentComposerLayoutVariant,\n} from \"./types.js\";\nimport { useVoiceDictation } from \"./useVoiceDictation.js\";\nimport { VoiceButton, VoiceRecordingOverlay } from \"./VoiceButton.js\";\nimport { ComposerPlusMenu } from \"./ComposerPlusMenu.js\";\nimport { sendToAgentChat, type AgentChatContextItem } from \"../agent-chat.js\";\nimport { tryDelegateBuildRequestToBuilder } from \"../builder-frame.js\";\nimport { getComposerDraftKey } from \"./draft-key.js\";\nimport {\n createPastedAttachmentFile,\n readClipboardPaste,\n shouldConvertClipboardToAttachment,\n} from \"./pasted-text.js\";\nimport {\n getReasoningEffortOptionsForModel,\n reasoningEffortLabel,\n type ReasoningEffort,\n} from \"../../shared/reasoning-effort.js\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"../components/ui/tooltip.js\";\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"../components/ui/popover.js\";\n\nexport interface TiptapComposerHandle {\n focus(): void;\n setText(text: string): void;\n}\n\nexport type ComposerSubmitIntent = \"immediate\" | \"queued\";\n\nexport interface TiptapComposerSubmitOptions {\n intent?: ComposerSubmitIntent;\n}\n\nexport function canSubmitComposerContent(options: {\n hasEditorContent: boolean;\n attachmentCount: number;\n disabled?: boolean;\n}): boolean {\n return (\n !options.disabled &&\n (options.hasEditorContent || options.attachmentCount > 0)\n );\n}\n\nexport function getComposerSubmitIntentForEnterKey(\n event: Pick<KeyboardEvent, \"key\" | \"shiftKey\" | \"metaKey\" | \"ctrlKey\">,\n isMac: boolean,\n): ComposerSubmitIntent | null {\n if (event.key !== \"Enter\" || event.shiftKey) return null;\n\n const queuedModifierPressed = isMac ? event.metaKey : event.ctrlKey;\n if (queuedModifierPressed) return \"queued\";\n\n if (!event.metaKey && !event.ctrlKey) return \"immediate\";\n\n return null;\n}\n\nexport function insertComposerHardBreakAndScrollIntoView(\n view: Pick<EditorView, \"state\" | \"dispatch\">,\n): boolean {\n const hardBreak = view.state.schema.nodes.hardBreak;\n if (!hardBreak) return false;\n\n view.dispatch(\n view.state.tr.replaceSelectionWith(hardBreak.create()).scrollIntoView(),\n );\n return true;\n}\n\nexport function displayableComposerModeMessage(options: {\n messagePrefix: string;\n trimmedText: string;\n attachmentCount: number;\n}): string {\n const modePrompt =\n options.trimmedText ||\n (options.attachmentCount > 0 ? \"Use the attached context.\" : \"\");\n return `${options.messagePrefix}${modePrompt}`;\n}\n\nfunction uniquifyComposerImageFile(file: File): File {\n if (!file.type.startsWith(\"image/\")) return file;\n const uniqueName = `${Date.now()}-${Math.random().toString(36).slice(2)}-${file.name}`;\n return new File([file], uniqueName, { type: file.type });\n}\n\nexport function handleComposerFileDrop(options: {\n event: Pick<DragEvent, \"dataTransfer\" | \"preventDefault\" | \"stopPropagation\">;\n addAttachment: (file: File) => Promise<unknown>;\n onError?: (error: unknown) => void;\n}): boolean {\n const droppedFiles = Array.from(options.event.dataTransfer?.files ?? []);\n if (droppedFiles.length === 0) return false;\n\n options.event.preventDefault();\n options.event.stopPropagation();\n const attachments = droppedFiles.map(uniquifyComposerImageFile);\n void Promise.all(\n attachments.map((file) => options.addAttachment(file)),\n ).catch((error) => {\n options.onError?.(error);\n });\n return true;\n}\n\nconst BUILT_IN_COMMANDS: SlashCommand[] = [\n { name: \"clear\", description: \"Start a new chat\", icon: \"clear\" },\n { name: \"new\", description: \"Start a new chat\", icon: \"new\" },\n { name: \"history\", description: \"Browse all chats\", icon: \"history\" },\n { name: \"plan\", description: \"Switch to read-only planning\", icon: \"plan\" },\n { name: \"act\", description: \"Switch back to acting\", icon: \"act\" },\n { name: \"help\", description: \"Show available commands\", icon: \"help\" },\n];\n\nfunction normalizeSlashCommandName(name: string): string {\n return name.replace(/^\\/+/, \"\").trim().toLowerCase();\n}\n\nfunction mergeSlashCommands(commands: SlashCommand[]): SlashCommand[] {\n const seen = new Set<string>();\n const merged: SlashCommand[] = [];\n for (const command of commands) {\n const name = normalizeSlashCommandName(command.name);\n if (!name || seen.has(name)) continue;\n seen.add(name);\n merged.push({ ...command, name });\n }\n return merged;\n}\n\nfunction mergeSlashSkills(skills: SkillResult[]): SkillResult[] {\n const seen = new Set<string>();\n const merged: SkillResult[] = [];\n for (const skill of skills) {\n const key = `${skill.source ?? \"\"}:${skill.path ?? \"\"}:${skill.name}`;\n if (!skill.name || seen.has(key)) continue;\n seen.add(key);\n merged.push(skill);\n }\n return merged;\n}\n\nconst COMPOSER_MODE_CONFIGS: Record<\n ComposerMode,\n {\n label: string;\n icon: React.ComponentType<{ className?: string }>;\n placeholder: string;\n messagePrefix: string;\n getContext: (prompt: string) => string;\n beforeSend?: () => void;\n }\n> = {\n skill: {\n label: \"Create Skill\",\n icon: IconBulb,\n placeholder: \"Describe the skill you want to create...\",\n messagePrefix: \"Create a skill: \",\n getContext: (prompt) =>\n `The user wants to create an agent skill. Their description: \"${prompt}\"\n\nFollow the create-skill pattern to build this. Before writing:\n\n1. **Determine the skill name** — derive a hyphen-case name from the description (e.g. \"code review\" → \"code-review\")\n2. **Determine the skill type** — Pattern (architectural rule), Workflow (step-by-step), or Generator (scaffolding)\n3. **Write the skill** as a personal resource at path \"skills/<name>/SKILL.md\" using the \\`resources\\` tool with \\`action: \"write\"\\`\n\nThe skill file MUST have YAML frontmatter with name and description (under 40 words), then markdown with:\n- Clear rule/purpose statement\n- Why this skill exists\n- How to follow it (with code examples where helpful)\n- Common violations to avoid\n- Related skills\n\nAfter creating, update the shared AGENTS.md resource to reference the new skill in its skills table.\n\nKeep the skill concise (under 500 lines) and actionable.`,\n },\n job: {\n label: \"Schedule Task\",\n icon: IconClock,\n placeholder: \"Describe what should happen and when...\",\n messagePrefix: \"Create a recurring job: \",\n getContext: (prompt) =>\n `The user wants to create a recurring job. Their description: \"${prompt}\"\n\nUse the manage-jobs tool with action \"create\" to create this. You need to:\n1. Derive a hyphen-case name from the description\n2. Convert the schedule to a cron expression (e.g., \"every weekday at 9am\" → \"0 9 * * 1-5\")\n3. Write clear, self-contained instructions for what the agent should do each time the job runs\n4. Create it in personal scope\n\nThe job will run automatically on the schedule. Make the instructions specific — include which actions to call and what to do with results.`,\n },\n automation: {\n label: \"Create Automation\",\n icon: IconBolt,\n placeholder: \"Describe what you want to automate...\",\n messagePrefix: \"Create an automation: \",\n beforeSend: () => {\n window.dispatchEvent(\n new CustomEvent(\"agent-panel:set-mode\", {\n detail: { mode: \"chat\" },\n }),\n );\n },\n getContext: (prompt) =>\n `The user wants to create a new automation. Scope: personal. Their description: \"${prompt}\"\n\nUse manage-automations with action=define to create it. Ask clarifying questions if needed about what event to trigger on, conditions, and what actions to take.`,\n },\n extension: {\n label: \"Create Extension\",\n icon: IconTool,\n placeholder: \"Describe the interactive extension you want to build...\",\n messagePrefix: \"Create an extension: \",\n getContext: (prompt) =>\n `The user wants to create an interactive extension (sandboxed mini-app). Their description: \"${prompt}\"\n\nUse the create-extension action with Alpine.js HTML content. The extension runs as a sandboxed iframe with Tailwind CSS and modest default canvas padding. For edge-to-edge layouts, put data-extension-layout=\"full-bleed\" on the outermost element.\n\nAfter creating the extension, navigate the user to it with the path returned by create-extension; extension URLs may include a friendly \"/extensions/<id>/<slug>\" suffix.\n\nMake the extension functional and visually polished. Extensions can use extensionFetch() for external API calls, appAction()/appFetch() for app operations, extensionData for per-extension persistence, and dbQuery()/dbExec() only for existing app tables.\n\nPrefer appAction()/appFetch() for app data. Some actions return JSON strings for CLI compatibility, so parse string results before counting rows or reading arrays. Do not guess raw SQL table names or columns for app data; use dbQuery()/dbExec() only when the table is known to exist in the current schema.`,\n },\n};\n\nfunction ComposerModeChip({\n mode,\n onRemove,\n}: {\n mode: ComposerMode;\n onRemove: () => void;\n}) {\n const config = COMPOSER_MODE_CONFIGS[mode];\n const Icon = config.icon;\n return (\n <span className=\"inline-flex items-center gap-1 rounded-md border border-border bg-muted/50 px-1.5 py-0.5 text-xs font-medium text-foreground\">\n <Icon className=\"h-3 w-3 text-muted-foreground\" />\n {config.label}\n <button\n type=\"button\"\n onClick={onRemove}\n className=\"ml-0.5 rounded-sm text-muted-foreground hover:text-foreground cursor-pointer\"\n >\n <IconX className=\"h-3 w-3\" />\n </button>\n </span>\n );\n}\n\ntype ExecMode = \"build\" | \"plan\";\n\nexport interface TiptapComposerProps {\n placeholder?: string;\n disabled?: boolean;\n focusRef?: React.Ref<TiptapComposerHandle>;\n /** Programmatically seed the editor with plain text. */\n initialText?: string;\n /** Stable key used to re-apply the seeded text. */\n initialTextKey?: string | number;\n /**\n * When provided, called instead of composerRuntime.send(). Used for queue\n * mode and standalone prompt popovers. Receives the live composer\n * attachments so callers (e.g. PromptComposer) can surface uploaded files.\n */\n onSubmit?: (\n text: string,\n references: Reference[],\n attachments?: ReadonlyArray<unknown>,\n options?: TiptapComposerSubmitOptions,\n ) => void;\n /**\n * Clear the editor after an onSubmit handler runs. Standalone workflows that\n * may fail outside the composer can keep the draft visible for quick edits.\n */\n clearOnSubmit?: boolean;\n /** Called whenever the plain editor text changes. */\n onTextChange?: (text: string) => void;\n /** Custom action button (e.g. stop button) to render instead of the default send button. */\n actionButton?: React.ReactNode;\n /** Extra button to render alongside the default send button (e.g. stop while running). */\n extraActionButton?: React.ReactNode;\n /** Custom attachment button to render instead of ComposerPrimitive.AddAttachment. */\n attachButton?: React.ReactNode;\n /** Custom host-owned control rendered next to the attachment affordance. */\n modeControl?: React.ReactNode;\n /** Explicit host-owned toolbar slot rendered next to the attachment affordance. */\n toolbarSlot?: React.ReactNode;\n /** Shared sizing/layout variant for host surfaces. Default keeps sidebar behavior. */\n layoutVariant?: AgentComposerLayoutVariant;\n /** Additional slash commands surfaced in the shared / menu. */\n slashCommands?: SlashCommand[];\n /** Additional slash skills surfaced in the shared / menu. */\n slashSkills?: SkillResult[];\n /** Include built-in sidebar slash commands like /clear and /help. Default true. */\n includeDefaultSlashCommands?: boolean;\n /** Include app-discovered skills from the default agent endpoint. Default true. */\n includeDefaultSlashSkills?: boolean;\n /** Called when a slash command (e.g. /clear, /help) is executed */\n onSlashCommand?: (command: string) => void;\n /** Current execution mode (build/plan) */\n execMode?: ExecMode;\n /** Callback to change execution mode */\n onExecModeChange?: (mode: ExecMode) => void;\n /** Disable Plan mode while leaving Act mode available. */\n planModeDisabled?: boolean;\n /** Explanation shown next to the disabled Plan option. */\n planModeDisabledReason?: string;\n /** Show the microphone button for voice dictation. Default true. */\n voiceEnabled?: boolean;\n /** Selected model override for this conversation */\n selectedModel?: string;\n /** Selected reasoning effort override for this conversation */\n selectedEffort?: ReasoningEffort;\n /** Available models grouped by provider */\n availableModels?: Array<{\n engine: string;\n label: string;\n models: string[];\n configured: boolean;\n }>;\n /** Callback when user picks a model */\n onModelChange?: (model: string, engine: string) => void;\n /** Callback when user picks a reasoning effort */\n onEffortChange?: (effort: ReasoningEffort) => void;\n /**\n * Disable Builder/provider status polling for hosts that supply provider\n * state through another channel, such as Electron IPC.\n */\n providerConnectStatusEnabled?: boolean;\n /**\n * Override the Builder.io connect action in the model picker. When provided,\n * clicking \"Connect Builder.io\" calls this instead of opening a browser popup.\n * Used by the Electron desktop app to route through the native IPC handler.\n */\n onConnectProvider?: () => void;\n /** Stable scope for persisted drafts, usually the active thread or tab id. */\n draftScope?: string;\n /** Keyed context nuggets staged for the next submitted prompt. */\n contextItems?: AgentChatContextItem[];\n /** Remove a staged context nugget by key. */\n onRemoveContextItem?: (key: string) => void;\n /**\n * Controls the \"+\" menu next to the composer. `\"full\"` (default) shows the\n * normal Upload / Skill / Job / Automation / Tool / MCP picker. `\"upload-only\"`\n * collapses it to a single button that opens the file picker directly.\n * `\"hidden\"` hides attachment controls for text-only prompt surfaces.\n */\n plusMenuMode?: \"full\" | \"upload-only\" | \"hidden\";\n /**\n * When true and the composer is running inside the Builder.io webview/iframe,\n * intercept \"build me an app/agent\" prompts and forward them to the parent\n * Builder chat via `builder.submitChat` instead of sending to the local\n * agent. Off by default — the chat sidebar opts in; standalone prompt\n * forms (NewWorkspaceAppFlow, etc.) handle delegation themselves with\n * extra context (vault keys, computed app ids) that the raw composer\n * text lacks.\n */\n interceptBuildRequestsForBuilder?: boolean;\n /**\n * Called when a drag-drop or paste attachment fails (e.g. unsupported format,\n * size cap). Use this to surface a visible error in the parent chat surface\n * rather than silently swallowing the problem.\n */\n onAttachmentError?: (message: string) => void;\n}\n\nfunction plainTextToDoc(text: string) {\n const lines = text.length > 0 ? text.split(/\\r?\\n/) : [\"\"];\n return {\n type: \"doc\",\n content: lines.map((line) => ({\n type: \"paragraph\",\n content: line ? [{ type: \"text\", text: line }] : [],\n })),\n };\n}\n\nexport function createTiptapComposerExtensions(\n getPlaceholder: () => string | undefined,\n) {\n return [\n StarterKit.configure({\n heading: false,\n horizontalRule: false,\n bulletList: false,\n orderedList: false,\n listItem: false,\n listKeymap: false,\n blockquote: false,\n codeBlock: false,\n strike: false,\n italic: false,\n bold: false,\n code: false,\n dropcursor: false,\n gapcursor: false,\n link: false,\n trailingNode: false,\n underline: false,\n }),\n Placeholder.configure({\n placeholder: () => getPlaceholder() ?? \"\",\n emptyEditorClass: \"is-editor-empty\",\n showOnlyCurrent: false,\n }),\n FileReference,\n SkillReference,\n MentionReference,\n ];\n}\n\nfunction ModeSelector({\n mode,\n onChange,\n planModeDisabled = false,\n planModeDisabledReason = \"Open Agent Native Desktop to use Plan mode.\",\n}: {\n mode: ExecMode;\n onChange: (mode: ExecMode) => void;\n planModeDisabled?: boolean;\n planModeDisabledReason?: string;\n}) {\n const [open, setOpen] = useState(false);\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n aria-label={mode === \"build\" ? \"Act mode\" : \"Plan mode\"}\n data-agent-composer-slot=\"mode-button\"\n className=\"agent-composer-mode-button shrink-0 flex items-center gap-1 rounded-md px-2 py-1 text-[12px] font-medium text-muted-foreground hover:bg-accent/50 hover:text-foreground\"\n >\n {mode === \"build\" ? \"Act\" : \"Plan\"}\n <IconChevronDown className=\"h-3 w-3 opacity-60\" />\n </button>\n </PopoverTrigger>\n <PopoverContent\n side=\"top\"\n align=\"end\"\n sideOffset={6}\n collisionPadding={8}\n data-agent-native-composer-popover=\"true\"\n className=\"z-[260] w-60 rounded-lg border-border p-0 py-1 shadow-lg\"\n style={{ fontSize: 13 }}\n >\n <button\n type=\"button\"\n onClick={() => {\n onChange(\"build\");\n setOpen(false);\n }}\n className=\"flex w-full items-center gap-3 px-3 py-2 hover:bg-accent/50 text-left\"\n >\n <IconPencil className=\"h-4 w-4 shrink-0 text-muted-foreground\" />\n <div className=\"flex-1 min-w-0\">\n <span className=\"font-medium text-foreground text-[13px]\">Act</span>\n <p className=\"text-[11px] text-muted-foreground mt-0.5\">\n Use tools and make approved changes\n </p>\n </div>\n {mode === \"build\" && (\n <IconCheck className=\"h-3.5 w-3.5 shrink-0 text-blue-500\" />\n )}\n </button>\n <button\n type=\"button\"\n disabled={planModeDisabled}\n title={planModeDisabled ? planModeDisabledReason : undefined}\n onClick={() => {\n if (planModeDisabled) return;\n onChange(\"plan\");\n setOpen(false);\n }}\n className={`flex w-full items-center gap-3 px-3 py-2 text-left ${\n planModeDisabled\n ? \"cursor-not-allowed opacity-60\"\n : \"hover:bg-accent/50\"\n }`}\n >\n <IconClipboardList className=\"h-4 w-4 shrink-0 text-muted-foreground\" />\n <div className=\"flex-1 min-w-0\">\n <span className=\"font-medium text-foreground text-[13px]\">\n Plan\n </span>\n <p className=\"text-[11px] text-muted-foreground mt-0.5\">\n {planModeDisabled\n ? planModeDisabledReason\n : \"Read-only research and approval first\"}\n </p>\n </div>\n {mode === \"plan\" && !planModeDisabled && (\n <IconCheck className=\"h-3.5 w-3.5 shrink-0 text-blue-500\" />\n )}\n </button>\n </PopoverContent>\n </Popover>\n );\n}\n\nconst FRIENDLY_MODEL_NAMES: Record<string, string> = {\n auto: \"Default model\",\n \"claude-fable-5\": \"Fable 5\",\n \"grok-code-fast\": \"Grok Code Fast\",\n \"qwen3-coder\": \"Qwen3 Coder\",\n \"kimi-k2-5\": \"Kimi K2.5\",\n \"deepseek-v3-1\": \"DeepSeek v3.1\",\n};\n\nfunction friendlyModelName(model: string): string {\n if (FRIENDLY_MODEL_NAMES[model]) return FRIENDLY_MODEL_NAMES[model];\n // Claude: claude-{tier}-{major}-{minor}[-dateYYYYMMDD] → Tier Major.Minor\n const claude = model.match(\n /^claude-(opus|sonnet|haiku)-(\\d+)-(\\d+)(?:-\\d{8,})?$/,\n );\n if (claude) {\n const tier = claude[1][0].toUpperCase() + claude[1].slice(1);\n return `${tier} ${claude[2]}.${claude[3]}`;\n }\n // GPT: gpt-{major}-{minor}[-suffix] or gpt-{major}.{minor}[-suffix]\n if (model.startsWith(\"gpt-\")) {\n const rest = model.slice(4);\n const gpt = rest.match(/^(\\d+)[.-](\\d+)(?:[.-](.+))?$/);\n if (gpt) {\n const suffix = gpt[3]\n ? \" \" +\n gpt[3]\n .split(\"-\")\n .map((s) => s[0].toUpperCase() + s.slice(1))\n .join(\" \")\n : \"\";\n return `GPT-${gpt[1]}.${gpt[2]}${suffix}`;\n }\n return `GPT-${rest}`;\n }\n if (/^o\\d/.test(model)) return model;\n // Gemini: gemini-{major}-{minor}-{variant}[-preview] → Gemini Major.Minor Variant\n const geminiVersioned = model.match(\n /^gemini-(\\d+)-(\\d+)-(.+?)(?:-preview)?$/,\n );\n if (geminiVersioned) {\n const variant = geminiVersioned[3]\n .split(\"-\")\n .map((s) => s[0].toUpperCase() + s.slice(1))\n .join(\" \");\n return `Gemini ${geminiVersioned[1]}.${geminiVersioned[2]} ${variant}`;\n }\n // Gemini: gemini-{version.parts}[-preview] → Gemini Version Parts\n const gemini = model.match(/^gemini-(.+?)(?:-preview)?$/);\n if (gemini) {\n const parts = gemini[1]\n .split(\"-\")\n .map((s) => s[0].toUpperCase() + s.slice(1))\n .join(\" \");\n return `Gemini ${parts}`;\n }\n return model;\n}\n\n/**\n * Deduplicate models to only the latest version per family.\n * e.g. [opus-4-7, opus-4-6, opus-4-5] → [opus-4-7]\n */\nfunction latestModelsOnly(models: string[]): string[] {\n const seen = new Set<string>();\n return models.filter((m) => {\n // Claude: family = tier (opus/sonnet/haiku)\n const claude = m.match(/^claude-(opus|sonnet|haiku)-/);\n if (claude) {\n if (seen.has(claude[1])) return false;\n seen.add(claude[1]);\n return true;\n }\n // GPT: family = gpt-{major} (e.g. gpt-5.4 and gpt-5.4-mini are different)\n // OpenAI reasoning: each is its own family\n // Gemini: family = gemini-{major} + variant\n const gemini = m.match(/^gemini-(\\d+(?:\\.\\d+)?)-(.+?)(?:-preview)?$/);\n if (gemini) {\n const family = gemini[2]; // flash, pro, etc.\n if (seen.has(`gemini-${family}`)) return false;\n seen.add(`gemini-${family}`);\n return true;\n }\n return true;\n });\n}\n\nfunction ModelSelector({\n model,\n effort = \"auto\",\n engines,\n onChange,\n onEffortChange,\n providerConnectStatusEnabled = true,\n onConnectProvider,\n}: {\n model: string;\n effort?: ReasoningEffort;\n engines: Array<{\n engine: string;\n label: string;\n models: string[];\n configured: boolean;\n }>;\n onChange: (model: string, engine: string) => void;\n onEffortChange?: (effort: ReasoningEffort) => void;\n providerConnectStatusEnabled?: boolean;\n onConnectProvider?: () => void;\n}) {\n const [open, setOpen] = useState(false);\n const autoModelGroup = engines.find((group) => group.models.includes(\"auto\"));\n const providerGroups = useMemo(\n () =>\n engines\n .map((group) => ({\n ...group,\n models: group.models.filter((candidate) => candidate !== \"auto\"),\n }))\n .filter((group) => group.models.length > 0),\n [engines],\n );\n const effortOptions =\n model === \"auto\"\n ? ([\n \"auto\",\n \"low\",\n \"medium\",\n \"high\",\n \"xhigh\",\n \"max\",\n ] satisfies ReasoningEffort[])\n : getReasoningEffortOptionsForModel(model);\n\n // Collapse non-selected families by default. The family containing the\n // currently-selected model stays expanded so the user sees their pick at\n // a glance; clicking another family's header expands it inline.\n const selectedGroupKey = useMemo(() => {\n const found = providerGroups.find((g) => g.models.includes(model));\n return found ? `${found.engine}:${found.label}` : null;\n }, [model, providerGroups]);\n\n const [expandedGroups, setExpandedGroups] = useState<Set<string>>(\n () => new Set(selectedGroupKey ? [selectedGroupKey] : []),\n );\n\n // Reset expansion when the popover re-opens so the picker always lands\n // on the \"selected family expanded, others collapsed\" view.\n useEffect(() => {\n if (open) {\n setExpandedGroups(new Set(selectedGroupKey ? [selectedGroupKey] : []));\n }\n }, [open, selectedGroupKey]);\n\n const toggleGroup = useCallback((key: string) => {\n setExpandedGroups((prev) => {\n const next = new Set(prev);\n if (next.has(key)) next.delete(key);\n else next.add(key);\n return next;\n });\n }, []);\n\n // When Builder.io isn't connected, surface a one-click connect path —\n // it unlocks every model family (Claude, OpenAI, Gemini) without the\n // user having to paste individual API keys.\n const builderFlow = useBuilderConnectFlow({\n enabled: providerConnectStatusEnabled,\n trackingSource: \"composer_builder_cta\",\n });\n const hasConfiguredBuilderModels = providerGroups.some(\n (group) => group.engine === \"builder\" && group.configured,\n );\n const showBuilderCta =\n (builderFlow.hasFetchedStatus ||\n (!providerConnectStatusEnabled && !!onConnectProvider)) &&\n !builderFlow.configured &&\n !builderFlow.envManaged &&\n !hasConfiguredBuilderModels;\n const openLlmSettings = useCallback(() => {\n try {\n window.location.hash = \"llm\";\n } catch {}\n window.dispatchEvent(new CustomEvent(\"agent-panel:open-settings\"));\n setOpen(false);\n }, []);\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n data-agent-composer-slot=\"model-button\"\n className=\"agent-composer-model-button flex min-w-0 max-w-[10.5rem] shrink items-center gap-1 rounded-md px-2 py-1 text-[12px] font-medium text-muted-foreground hover:bg-accent/50 hover:text-foreground\"\n >\n <span className=\"min-w-0 truncate\">{friendlyModelName(model)}</span>\n {effortOptions.length > 0 && (\n <span className=\"agent-composer-model-effort min-w-0 shrink truncate text-muted-foreground/70\">\n · {reasoningEffortLabel(effort)}\n </span>\n )}\n <IconChevronDown className=\"h-3 w-3 shrink-0 opacity-60\" />\n </button>\n </PopoverTrigger>\n <PopoverContent\n side=\"top\"\n align=\"end\"\n sideOffset={6}\n collisionPadding={8}\n data-agent-native-composer-popover=\"true\"\n className=\"z-[260] box-border w-72 overflow-y-auto rounded-lg border-border p-0 py-1 shadow-lg\"\n style={\n providerGroups.length > 0\n ? {\n fontSize: 13,\n height:\n \"min(500px, var(--radix-popover-content-available-height, 500px))\",\n }\n : {\n fontSize: 13,\n maxHeight:\n \"min(500px, var(--radix-popover-content-available-height, 500px))\",\n }\n }\n >\n {showBuilderCta && (\n <>\n <button\n type=\"button\"\n onClick={() => {\n if (onConnectProvider) {\n onConnectProvider();\n } else {\n builderFlow.start();\n }\n }}\n disabled={!onConnectProvider && builderFlow.connecting}\n className=\"flex w-full items-start gap-2 px-3 py-2 text-left hover:bg-accent/50 disabled:opacity-60\"\n >\n <IconPlugConnected className=\"h-4 w-4 shrink-0 mt-0.5 text-blue-500\" />\n <span className=\"flex-1 min-w-0\">\n <span className=\"block text-[12px] font-medium text-foreground\">\n {!onConnectProvider && builderFlow.connecting\n ? \"Connecting Builder.io…\"\n : \"Connect Builder.io\"}\n </span>\n <span className=\"block text-[11px] text-muted-foreground\">\n Free credits for Claude, OpenAI &amp; Gemini\n </span>\n </span>\n </button>\n <div className=\"my-1 border-t border-border\" />\n </>\n )}\n {autoModelGroup && (\n <button\n type=\"button\"\n onClick={() => {\n onChange(\"auto\", autoModelGroup.engine);\n setOpen(false);\n }}\n className=\"flex w-full items-center gap-3 px-3 py-1.5 text-left hover:bg-accent/50\"\n >\n <span className=\"flex-1 min-w-0 text-[13px] text-foreground truncate\">\n Auto\n </span>\n {model === \"auto\" && (\n <IconCheck className=\"h-3.5 w-3.5 shrink-0 text-blue-500\" />\n )}\n </button>\n )}\n {autoModelGroup && providerGroups.length > 0 && (\n <div className=\"my-1 border-t border-border\" />\n )}\n {providerGroups.map((group) => {\n const models = latestModelsOnly(group.models);\n const groupKey = `${group.engine}:${group.label}`;\n const isExpanded = expandedGroups.has(groupKey);\n const ChevronIcon = isExpanded ? IconChevronDown : IconChevronRight;\n return (\n <div key={groupKey}>\n <div className=\"flex items-center hover:bg-accent/30\">\n <button\n type=\"button\"\n aria-expanded={isExpanded}\n onClick={() => toggleGroup(groupKey)}\n className=\"flex flex-1 min-w-0 items-center gap-1.5 px-2 py-1.5 cursor-pointer text-left\"\n >\n <ChevronIcon className=\"h-3 w-3 shrink-0 text-muted-foreground\" />\n <span className=\"text-[11px] font-medium text-muted-foreground uppercase tracking-wide shrink-0\">\n {group.label}\n </span>\n {!isExpanded && groupKey === selectedGroupKey && (\n <span className=\"text-[11px] text-muted-foreground/80 truncate\">\n {friendlyModelName(model)}\n </span>\n )}\n </button>\n {!group.configured && (\n <button\n type=\"button\"\n className=\"text-[10px] text-muted-foreground/60 hover:text-foreground cursor-pointer pr-3 py-1.5\"\n onClick={openLlmSettings}\n >\n needs API key\n </button>\n )}\n </div>\n {isExpanded &&\n models.map((m) => (\n <button\n key={m}\n type=\"button\"\n onClick={() => {\n if (!group.configured) {\n openLlmSettings();\n return;\n }\n onChange(m, group.engine);\n const nextOptions = getReasoningEffortOptionsForModel(m);\n if (\n effort !== \"auto\" &&\n nextOptions.length > 0 &&\n !nextOptions.includes(effort)\n ) {\n onEffortChange?.(\"auto\");\n }\n setOpen(false);\n }}\n className={`flex w-full items-center gap-3 pl-7 pr-3 py-1.5 text-left ${\n group.configured\n ? \"hover:bg-accent/50\"\n : \"opacity-40 cursor-default\"\n }`}\n >\n <span className=\"flex-1 min-w-0 text-[13px] text-foreground truncate\">\n {friendlyModelName(m)}\n </span>\n {m === model && group.configured && (\n <IconCheck className=\"h-3.5 w-3.5 shrink-0 text-blue-500\" />\n )}\n </button>\n ))}\n </div>\n );\n })}\n {effortOptions.length > 0 && (\n <>\n <div className=\"my-1 border-t border-border\" />\n <div className=\"px-3 py-1.5 text-[11px] font-medium text-muted-foreground uppercase tracking-wide\">\n Reasoning\n </div>\n {effortOptions.map((option) => (\n <button\n key={option}\n type=\"button\"\n onClick={() => onEffortChange?.(option)}\n className=\"flex w-full items-center gap-3 px-3 py-1.5 text-left hover:bg-accent/50\"\n >\n <span className=\"flex-1 min-w-0 text-[13px] text-foreground truncate\">\n {reasoningEffortLabel(option)}\n </span>\n {option === effort && (\n <IconCheck className=\"h-3.5 w-3.5 shrink-0 text-blue-500\" />\n )}\n </button>\n ))}\n </>\n )}\n </PopoverContent>\n </Popover>\n );\n}\n\ntype PopoverState = {\n type: \"@\" | \"/\";\n position: { top: number; left: number };\n startPos: number;\n query: string;\n} | null;\n\nexport function TiptapComposer({\n placeholder = \"Message agent...\",\n disabled = false,\n focusRef,\n initialText,\n initialTextKey,\n onSubmit,\n clearOnSubmit = true,\n onTextChange,\n actionButton,\n extraActionButton,\n attachButton,\n modeControl,\n toolbarSlot,\n layoutVariant = \"default\",\n slashCommands = [],\n slashSkills = [],\n includeDefaultSlashCommands = true,\n includeDefaultSlashSkills = true,\n onSlashCommand,\n execMode,\n onExecModeChange,\n planModeDisabled = false,\n planModeDisabledReason,\n voiceEnabled = true,\n selectedModel,\n selectedEffort,\n availableModels,\n onModelChange,\n onEffortChange,\n providerConnectStatusEnabled,\n onConnectProvider,\n draftScope,\n contextItems = [],\n onRemoveContextItem,\n plusMenuMode = \"full\",\n interceptBuildRequestsForBuilder = false,\n onAttachmentError,\n}: TiptapComposerProps) {\n const [popover, setPopover] = useState<PopoverState>(null);\n const popoverRef = useRef<MentionPopoverRef>(null);\n const composerRuntime = useComposerRuntime();\n const [editorHasText, setEditorHasText] = useState(false);\n const composerText = useComposer((state) => state.text);\n const composerAttachments = useComposer((state) => state.attachments);\n const canSend = canSubmitComposerContent({\n hasEditorContent: editorHasText,\n attachmentCount: composerAttachments.length,\n disabled,\n });\n const hasContextItems = contextItems.length > 0;\n const [composerMode, setComposerMode] = useState<ComposerMode | null>(null);\n const composerModeRef = useRef<ComposerMode | null>(null);\n const isMac =\n typeof navigator !== \"undefined\" &&\n /Mac|iPhone|iPad/.test(navigator.userAgent);\n\n // Refs for values accessed in handleKeyDown (ProseMirror doesn't re-bind)\n const popoverStateRef = useRef<PopoverState>(null);\n const onAttachmentErrorRef = useRef(onAttachmentError);\n onAttachmentErrorRef.current = onAttachmentError;\n const execModeRef = useRef(execMode);\n execModeRef.current = execMode;\n const onExecModeChangeRef = useRef(onExecModeChange);\n onExecModeChangeRef.current = onExecModeChange;\n const planModeDisabledRef = useRef(planModeDisabled);\n planModeDisabledRef.current = planModeDisabled;\n\n const { items: mentionItems, isLoading: mentionsLoading } = useMentionSearch(\n popover?.type === \"@\" ? popover.query : \"\",\n popover?.type === \"@\",\n );\n\n const {\n skills,\n hint,\n isLoading: skillsLoading,\n } = useSkills(includeDefaultSlashSkills && popover?.type === \"/\");\n\n const allSlashCommands = useMemo(\n () =>\n mergeSlashCommands([\n ...(includeDefaultSlashCommands ? BUILT_IN_COMMANDS : []),\n ...slashCommands,\n ]),\n [includeDefaultSlashCommands, slashCommands],\n );\n\n const allSlashSkills = useMemo(\n () =>\n mergeSlashSkills([\n ...(includeDefaultSlashSkills ? skills : []),\n ...slashSkills,\n ]),\n [includeDefaultSlashSkills, skills, slashSkills],\n );\n\n const filteredCommands = useMemo(() => {\n if (!popover || popover.type !== \"/\") return allSlashCommands;\n const q = popover.query.toLowerCase();\n if (!q) return allSlashCommands;\n return allSlashCommands.filter(\n (c) =>\n c.name.toLowerCase().includes(q) ||\n c.description.toLowerCase().includes(q),\n );\n }, [allSlashCommands, popover]);\n\n const filteredSkills = useMemo(() => {\n if (!popover || popover.type !== \"/\") return allSlashSkills;\n const q = popover.query.toLowerCase();\n if (!q) return allSlashSkills;\n return allSlashSkills.filter(\n (s) =>\n s.name.toLowerCase().includes(q) ||\n s.description?.toLowerCase().includes(q),\n );\n }, [allSlashSkills, popover]);\n\n // Keep refs in sync with state\n const mentionItemsRef = useRef(mentionItems);\n mentionItemsRef.current = mentionItems;\n const filteredCommandsRef = useRef(filteredCommands);\n filteredCommandsRef.current = filteredCommands;\n const filteredSkillsRef = useRef(filteredSkills);\n filteredSkillsRef.current = filteredSkills;\n const onSlashCommandRef = useRef(onSlashCommand);\n onSlashCommandRef.current = onSlashCommand;\n const onTextChangeRef = useRef(onTextChange);\n onTextChangeRef.current = onTextChange;\n const initialTextKeyRef = useRef<string | number | undefined>(undefined);\n\n const closePopover = useCallback(() => {\n setPopover(null);\n popoverStateRef.current = null;\n }, []);\n\n // Persist draft to localStorage so hot-reloads don't lose the prompt\n const draftKey = getComposerDraftKey(draftScope);\n const draftTimerRef = useRef<ReturnType<typeof setTimeout>>(undefined);\n useEffect(() => {\n return () => {\n clearTimeout(draftTimerRef.current);\n };\n }, []);\n // Tiptap reads extension config once at init; ref keeps runtime prop\n // changes visible to Placeholder's function form.\n const placeholderRef = useRef(placeholder);\n useEffect(() => {\n placeholderRef.current = composerMode\n ? COMPOSER_MODE_CONFIGS[composerMode].placeholder\n : placeholder;\n }, [placeholder, composerMode]);\n\n const editor = useEditor({\n extensions: createTiptapComposerExtensions(() => placeholderRef.current),\n editable: !disabled,\n onCreate: ({ editor: ed }) => {\n // Restore draft on mount\n try {\n if (initialText !== undefined) {\n ed.commands.setContent(plainTextToDoc(initialText));\n ed.commands.focus(\"end\");\n setEditorHasText(ed.state.doc.textContent.trim().length > 0);\n initialTextKeyRef.current = initialTextKey ?? initialText;\n } else {\n const saved = localStorage.getItem(draftKey);\n if (saved) {\n ed.commands.setContent(saved);\n ed.commands.focus(\"end\");\n setEditorHasText(ed.state.doc.textContent.trim().length > 0);\n }\n }\n onTextChangeRef.current?.(ed.state.doc.textContent.trim());\n } catch {}\n },\n onUpdate: ({ editor: ed }) => {\n // Drive the send button's enabled state from the actual editor contents;\n // the composer runtime is only synced on submit, so its isEmpty lags.\n let hasContent = ed.state.doc.textContent.trim().length > 0;\n if (!hasContent) {\n ed.state.doc.descendants((node: any) => {\n if (\n node.type.name === \"mentionReference\" ||\n node.type.name === \"fileReference\" ||\n node.type.name === \"skillReference\"\n ) {\n hasContent = true;\n return false;\n }\n return true;\n });\n }\n setEditorHasText(hasContent);\n onTextChangeRef.current?.(ed.state.doc.textContent.trim());\n\n // Debounce-save draft to localStorage\n clearTimeout(draftTimerRef.current);\n draftTimerRef.current = setTimeout(() => {\n try {\n const html = ed.getHTML();\n const isEmpty = !ed.state.doc.textContent.trim();\n if (isEmpty) {\n localStorage.removeItem(draftKey);\n } else {\n localStorage.setItem(draftKey, html);\n }\n } catch {}\n }, 300);\n },\n editorProps: {\n attributes: {\n \"data-agent-composer-variant\": layoutVariant,\n \"data-agent-composer-slot\": \"editor-input\",\n class:\n \"agent-composer-prosemirror flex-1 resize-none bg-transparent text-sm text-foreground outline-none leading-[1.625rem] min-h-[3.25rem] max-h-[10rem] overflow-y-auto\",\n },\n handlePaste: (_view, event) => {\n const paste = readClipboardPaste(event.clipboardData);\n const pastedText = paste.text;\n const files = Array.from(event.clipboardData?.files ?? []).filter(\n (file) => file.type.startsWith(\"image/\"),\n );\n if (files.length > 0) {\n event.preventDefault();\n const attachments: File[] = files.map((file) => {\n // SimpleImageAttachmentAdapter uses file.name as the attachment id.\n // Clipboard images (e.g. screenshots) are typically all named\n // \"image.png\", so a second paste would replace the first instead of\n // appending. Prepend a unique token so each paste gets a distinct id.\n const uniqueName = `${Date.now()}-${Math.random().toString(36).slice(2)}-${file.name}`;\n return new File([file], uniqueName, { type: file.type });\n });\n\n // Google Docs rich clipboard payloads can contain both embedded\n // image files and the document text. Since handling files means we\n // prevent Tiptap's default paste, preserve any text as its own chip\n // instead of silently dropping the source material.\n if (pastedText.trim()) {\n attachments.push(createPastedAttachmentFile(paste));\n }\n\n void Promise.all(\n attachments.map((file) => composerRuntime.addAttachment(file)),\n ).catch((error) => {\n const msg =\n error instanceof Error\n ? error.message\n : \"Could not attach the pasted image. Try a different format.\";\n onAttachmentErrorRef.current?.(msg);\n });\n return true;\n }\n\n // Page-sized pastes turn into a `Pasted text` attachment chip so the\n // prompt stays readable while normal paragraphs and lists stay inline.\n // When the paste is HTML (e.g. an Alpine.js extension or a document the\n // user wants hosted), it's stored as a real .html attachment so it\n // travels the same rail as uploading that file — the agent reads it\n // verbatim via contentFromAttachment instead of retyping it inline,\n // which cuts off mid-stream on large files and triggers a spin.\n if (shouldConvertClipboardToAttachment(paste)) {\n event.preventDefault();\n void composerRuntime\n .addAttachment(createPastedAttachmentFile(paste))\n .catch((error) => {\n const msg =\n error instanceof Error\n ? error.message\n : \"Could not attach the pasted text.\";\n onAttachmentErrorRef.current?.(msg);\n });\n return true;\n }\n\n return false;\n },\n handleDrop: (_view, event) => {\n // Drag-and-drop files (decks, images, PDFs, etc.) into the composer.\n // Mark handled drops as consumed so the chat-wide drop target does not\n // add the same file a second time.\n return handleComposerFileDrop({\n event: event as DragEvent,\n addAttachment: (file) => composerRuntime.addAttachment(file),\n onError: (error) => {\n const msg =\n error instanceof Error\n ? error.message\n : \"Could not attach the dropped file. Try a different format.\";\n onAttachmentErrorRef.current?.(msg);\n },\n });\n },\n handleKeyDown: (view, event) => {\n const pop = popoverStateRef.current;\n\n // Handle popover keyboard nav\n if (pop) {\n if (event.key === \"ArrowUp\") {\n event.preventDefault();\n popoverRef.current?.moveUp();\n return true;\n }\n if (event.key === \"ArrowDown\") {\n event.preventDefault();\n popoverRef.current?.moveDown();\n return true;\n }\n if (event.key === \"Enter\") {\n event.preventDefault();\n const idx = popoverRef.current?.getSelectedIndex() ?? 0;\n const currentCommands = filteredCommandsRef.current;\n const currentSkills = filteredSkillsRef.current;\n if (pop.type === \"@\") {\n const item = popoverRef.current?.getSelectedMention();\n if (item) selectMention(view, pop, item);\n } else if (pop.type === \"/\") {\n const cmd = popoverRef.current?.getSelectedCommand();\n if (cmd) {\n executeCommand(view, pop, cmd);\n } else {\n const skillIdx = idx - currentCommands.length;\n if (currentSkills[skillIdx]) {\n selectSkill(view, pop, currentSkills[skillIdx]);\n }\n }\n }\n return true;\n }\n if (event.key === \"Escape\") {\n event.preventDefault();\n popoverStateRef.current = null;\n setPopover(null);\n return true;\n }\n if (event.key === \" \" && pop.query === \"\") {\n popoverStateRef.current = null;\n setPopover(null);\n return false;\n }\n }\n\n // Backspace removes composer mode chip when editor is empty\n if (event.key === \"Backspace\" && composerModeRef.current) {\n const { from, to } = view.state.selection;\n if (\n view.state.doc.textContent.trim() === \"\" &&\n from === to &&\n from <= 1\n ) {\n setComposerMode(null);\n composerModeRef.current = null;\n return true;\n }\n }\n\n // Keyboard shortcut toggles Act/Plan mode from inside the editor.\n if (event.key === \"Tab\" && event.shiftKey) {\n event.preventDefault();\n const current = execModeRef.current;\n const cb = onExecModeChangeRef.current;\n if (current && cb) {\n const next = current === \"build\" ? \"plan\" : \"build\";\n if (next !== \"plan\" || !planModeDisabledRef.current) {\n cb(next);\n }\n }\n return true;\n }\n\n // Submit on Enter. Shift+Enter inserts a newline and keeps the\n // composer scrolled to the caret.\n // Cmd+Enter on macOS / Ctrl+Enter elsewhere marks the submit queued.\n if (event.key === \"Enter\" && event.shiftKey) {\n event.preventDefault();\n return insertComposerHardBreakAndScrollIntoView(view);\n }\n\n const submitIntent = getComposerSubmitIntentForEnterKey(event, isMac);\n if (submitIntent) {\n event.preventDefault();\n submitComposer(submitIntent);\n return true;\n }\n\n // Detect @ trigger — only when preceded by start-of-text, space, or newline\n // (not after alphanumeric chars, which would indicate an email address)\n if (event.key === \"@\") {\n const { from } = view.state.selection;\n const textBefore = view.state.doc.textBetween(\n Math.max(0, from - 1),\n from,\n );\n if (from === 1 || textBefore === \"\" || /\\s/.test(textBefore)) {\n const coords = view.coordsAtPos(from);\n setTimeout(() => {\n const state: PopoverState = {\n type: \"@\",\n position: { top: coords.top, left: coords.left },\n startPos: view.state.selection.from,\n query: \"\",\n };\n popoverStateRef.current = state;\n setPopover(state);\n }, 0);\n }\n return false;\n }\n\n // Detect / trigger (only at start of line or after whitespace)\n if (event.key === \"/\") {\n const { from } = view.state.selection;\n const textBefore = view.state.doc.textBetween(\n Math.max(0, from - 1),\n from,\n );\n if (from === 1 || textBefore === \"\" || /\\s/.test(textBefore)) {\n const coords = view.coordsAtPos(from);\n setTimeout(() => {\n const state: PopoverState = {\n type: \"/\",\n position: { top: coords.top, left: coords.left },\n startPos: view.state.selection.from,\n query: \"\",\n };\n popoverStateRef.current = state;\n setPopover(state);\n }, 0);\n }\n return false;\n }\n\n return false;\n },\n },\n });\n\n useImperativeHandle(focusRef, () => ({\n focus() {\n editor?.commands.focus(\"end\");\n },\n setText(text: string) {\n if (!editor) return;\n editor.commands.setContent(plainTextToDoc(text));\n editor.commands.focus(\"end\");\n const trimmed = editor.state.doc.textContent.trim();\n setEditorHasText(trimmed.length > 0);\n composerRuntime.setText(trimmed);\n onTextChangeRef.current?.(trimmed);\n try {\n if (trimmed) {\n localStorage.setItem(draftKey, editor.getHTML());\n } else {\n localStorage.removeItem(draftKey);\n }\n } catch {}\n },\n }));\n\n const handleSelectMode = useCallback(\n (mode: ComposerMode) => {\n setComposerMode(mode);\n composerModeRef.current = mode;\n setTimeout(() => editor?.commands.focus(\"end\"), 50);\n },\n [editor],\n );\n\n // --- Live voice transcription: text appears in the editor as the user speaks ---\n const voiceAnchorRef = useRef<number | null>(null);\n const prevVoiceInsertRef = useRef(\"\");\n\n const handleLiveUpdate = useCallback(\n (finalText: string, interimText: string) => {\n const ed = editor;\n if (!ed) return;\n\n if (voiceAnchorRef.current == null) {\n const { from } = ed.state.selection;\n const prevChar =\n from > 1 ? ed.state.doc.textBetween(from - 1, from) : \"\";\n if (prevChar && !/\\s/.test(prevChar)) {\n ed.chain().insertContent(\" \").run();\n }\n voiceAnchorRef.current = ed.state.selection.from;\n prevVoiceInsertRef.current = \"\";\n }\n\n const anchor = voiceAnchorRef.current;\n const prevLen = prevVoiceInsertRef.current.length;\n const newText = finalText + interimText;\n\n if (newText === prevVoiceInsertRef.current) return;\n\n ed.chain()\n .deleteRange({ from: anchor, to: anchor + prevLen })\n .insertContentAt(anchor, newText)\n .run();\n\n prevVoiceInsertRef.current = newText;\n },\n [editor],\n );\n\n const insertTranscript = useCallback(\n (text: string) => {\n const ed = editor;\n if (!ed) return;\n\n const anchor = voiceAnchorRef.current;\n if (anchor != null) {\n const prevLen = prevVoiceInsertRef.current.length;\n if (text) {\n ed.chain()\n .focus()\n .deleteRange({ from: anchor, to: anchor + prevLen })\n .insertContentAt(anchor, text + \" \")\n .run();\n } else if (prevLen > 0) {\n ed.chain()\n .deleteRange({ from: anchor, to: anchor + prevLen })\n .run();\n }\n voiceAnchorRef.current = null;\n prevVoiceInsertRef.current = \"\";\n } else if (text) {\n const { from } = ed.state.selection;\n const prevChar =\n from > 1 ? ed.state.doc.textBetween(from - 1, from) : \"\";\n const needsLead = prevChar && !/\\s/.test(prevChar);\n ed.chain()\n .focus()\n .insertContent((needsLead ? \" \" : \"\") + text + \" \")\n .run();\n }\n },\n [editor],\n );\n\n const voice = useVoiceDictation({\n onTranscript: insertTranscript,\n onLiveUpdate: handleLiveUpdate,\n });\n\n // Clean up live text if voice session ends without a final transcript (cancel/error)\n useEffect(() => {\n if (voice.state === \"idle\" && voiceAnchorRef.current != null) {\n const anchor = voiceAnchorRef.current;\n const prevLen = prevVoiceInsertRef.current.length;\n if (editor && prevLen > 0) {\n editor\n .chain()\n .deleteRange({ from: anchor, to: anchor + prevLen })\n .run();\n }\n voiceAnchorRef.current = null;\n prevVoiceInsertRef.current = \"\";\n }\n }, [voice.state, editor]);\n\n // Global shortcut: Cmd/Ctrl + Shift + M toggles dictation. Escape cancels\n // while recording. Scoped to avoid firing when focus is outside the app.\n useEffect(() => {\n if (!voiceEnabled || !voice.supported) return;\n const handler = (e: KeyboardEvent) => {\n // e.key can be undefined on some trusted keydown events (autofill/IME\n // quirks) — seen crashing in production (AGENT-NATIVE-BROWSER-S).\n const isToggleCombo =\n typeof e.key === \"string\" &&\n e.key.toLowerCase() === \"m\" &&\n e.shiftKey &&\n (e.metaKey || e.ctrlKey) &&\n !e.altKey;\n if (isToggleCombo) {\n e.preventDefault();\n if (voice.state === \"recording\" || voice.state === \"starting\") {\n voice.stop();\n } else if (voice.state !== \"transcribing\") {\n void voice.start();\n }\n return;\n }\n if (\n e.key === \"Escape\" &&\n (voice.state === \"recording\" || voice.state === \"starting\")\n ) {\n e.preventDefault();\n voice.cancel();\n }\n };\n window.addEventListener(\"keydown\", handler);\n return () => window.removeEventListener(\"keydown\", handler);\n }, [voiceEnabled, voice]);\n\n const extractComposerPayload = useCallback(() => {\n const ed = editor;\n if (!ed) {\n return { text: \"\", references: [] as Reference[] };\n }\n\n const references: Reference[] = [];\n\n // Build text that preserves @mentions (getText() strips them).\n // Walk the document and reconstruct with @name for mention/file/skill nodes.\n const textParts: string[] = [];\n ed.state.doc.descendants((node: any) => {\n if (node.isText) {\n textParts.push(node.text);\n } else if (node.type.name === \"mentionReference\") {\n textParts.push(`@[${node.attrs.label}|${node.attrs.icon || \"file\"}]`);\n } else if (node.type.name === \"fileReference\") {\n const label = node.attrs.path?.split(\"/\").pop() || node.attrs.path;\n textParts.push(`@[${label}|file]`);\n } else if (node.type.name === \"skillReference\") {\n textParts.push(`/${node.attrs.name}`);\n } else if (node.type.name === \"hardBreak\") {\n textParts.push(\"\\n\");\n } else if (\n node.type.name === \"paragraph\" &&\n textParts.length > 0 &&\n textParts[textParts.length - 1] !== \"\\n\"\n ) {\n textParts.push(\"\\n\");\n }\n });\n const text = textParts.join(\"\").trim();\n\n ed.state.doc.descendants((node: any) => {\n if (node.type.name === \"fileReference\") {\n // Legacy support\n references.push({\n type: \"file\",\n path: node.attrs.path,\n name: node.attrs.path?.split(\"/\").pop() || node.attrs.path,\n source: node.attrs.source || \"codebase\",\n });\n } else if (node.type.name === \"mentionReference\") {\n const refType = node.attrs.refType;\n references.push({\n type:\n refType === \"file\"\n ? \"file\"\n : refType === \"agent\"\n ? \"agent\"\n : refType === \"custom-agent\"\n ? \"custom-agent\"\n : \"mention\",\n path: node.attrs.refPath || \"\",\n name: node.attrs.label,\n source: node.attrs.source,\n refType: node.attrs.refType,\n refId: node.attrs.refId,\n });\n } else if (node.type.name === \"skillReference\") {\n references.push({\n type: \"skill\",\n path: node.attrs.path,\n name: node.attrs.name,\n source: node.attrs.source || \"codebase\",\n });\n }\n });\n\n return { text, references };\n }, [editor]);\n\n const syncComposerState = useCallback(() => {\n const { text, references } = extractComposerPayload();\n composerRuntime.setText(text);\n composerRuntime.setRunConfig(\n references.length > 0 ? { custom: { references } } : {},\n );\n return { text, references };\n }, [composerRuntime, extractComposerPayload]);\n\n const submitComposer = useCallback(\n (intent: ComposerSubmitIntent = \"immediate\") => {\n const ed = editor;\n if (!ed) return;\n\n const { text, references } = syncComposerState();\n const attachments = composerRuntime.getState().attachments;\n if (!text.trim() && references.length === 0 && attachments.length === 0)\n return;\n const cancelActiveVoice = () => {\n if (\n voice.state === \"recording\" ||\n voice.state === \"starting\" ||\n voice.state === \"transcribing\"\n ) {\n voice.cancel();\n }\n };\n\n // Intercept slash commands typed directly (e.g. \"/clear\" + Enter)\n const trimmed = text.trim();\n if (trimmed.startsWith(\"/\") && references.length === 0) {\n const cmdName = normalizeSlashCommandName(trimmed);\n const matched = allSlashCommands.find((c) => c.name === cmdName);\n if (matched) {\n ed.commands.clearContent();\n try {\n localStorage.removeItem(draftKey);\n } catch {}\n closePopover();\n onSlashCommandRef.current?.(matched.name);\n return;\n }\n }\n\n // Composer mode: send with context via agent chat bridge\n if (composerMode) {\n const config = COMPOSER_MODE_CONFIGS[composerMode];\n config.beforeSend?.();\n const message = displayableComposerModeMessage({\n messagePrefix: config.messagePrefix,\n trimmedText: trimmed,\n attachmentCount: attachments.length,\n });\n const modePrompt =\n trimmed ||\n (attachments.length > 0 ? \"Use the attached context.\" : \"\");\n if (attachments.length > 0) {\n composerRuntime.setText(\n `${message}\\n\\n<context>\\n${config.getContext(modePrompt)}\\n</context>`,\n );\n composerRuntime.send();\n } else {\n sendToAgentChat({\n message,\n context: config.getContext(modePrompt),\n submit: true,\n });\n }\n cancelActiveVoice();\n ed.commands.clearContent();\n setEditorHasText(false);\n setComposerMode(null);\n composerModeRef.current = null;\n try {\n localStorage.removeItem(draftKey);\n } catch {}\n closePopover();\n return;\n }\n\n // Builder iframe delegation: when this app is mounted inside the\n // Builder.io webview and the user typed a \"build me an app/agent\"\n // prompt, hand it up to the parent Builder chat instead of sending\n // it to this app's domain agent. Builder is the code-writing agent;\n // the local agent (dispatch, mail, etc.) cannot scaffold workspace\n // apps from inside its own iframe.\n if (\n interceptBuildRequestsForBuilder &&\n tryDelegateBuildRequestToBuilder(trimmed)\n ) {\n cancelActiveVoice();\n ed.commands.clearContent();\n setEditorHasText(false);\n try {\n localStorage.removeItem(draftKey);\n } catch {}\n closePopover();\n return;\n }\n\n if (onSubmit) {\n onSubmit(text, references, attachments, { intent });\n // Clear any pending attachments now that the host has them.\n void composerRuntime.clearAttachments().catch(() => {});\n if (!clearOnSubmit) {\n closePopover();\n return;\n }\n } else {\n composerRuntime.send();\n }\n cancelActiveVoice();\n ed.commands.clearContent();\n setEditorHasText(false);\n try {\n localStorage.removeItem(draftKey);\n } catch {}\n closePopover();\n },\n [\n closePopover,\n composerMode,\n composerRuntime,\n editor,\n interceptBuildRequestsForBuilder,\n clearOnSubmit,\n onSubmit,\n syncComposerState,\n voice,\n allSlashCommands,\n ],\n );\n\n // Helper functions that operate on the editor view directly\n // These are called from handleKeyDown which can't use React state\n function selectMention(\n _view: any,\n pop: NonNullable<PopoverState>,\n item: MentionItem,\n ) {\n const ed = editor;\n if (!ed) return;\n const currentPos = ed.state.selection.from;\n // startPos is after the trigger char, so -1 to include the @ or /\n const deleteFrom = Math.max(0, pop.startPos - 1);\n ed.chain()\n .focus()\n .deleteRange({ from: deleteFrom, to: currentPos })\n .insertContent({\n type: \"mentionReference\",\n attrs: {\n label: item.label,\n icon: item.icon || \"file\",\n source: item.source,\n refType: item.refType,\n refId: item.refId || null,\n refPath: item.refPath || null,\n },\n })\n .insertContent(\" \")\n .run();\n popoverStateRef.current = null;\n setPopover(null);\n }\n\n function executeCommand(\n _view: any,\n pop: NonNullable<PopoverState>,\n command: SlashCommand,\n ) {\n const ed = editor;\n if (!ed) return;\n const currentPos = ed.state.selection.from;\n const deleteFrom = Math.max(0, pop.startPos - 1);\n ed.chain().focus().deleteRange({ from: deleteFrom, to: currentPos }).run();\n popoverStateRef.current = null;\n setPopover(null);\n onSlashCommandRef.current?.(command.name);\n }\n\n function selectSkill(\n _view: any,\n pop: NonNullable<PopoverState>,\n skill: SkillResult,\n ) {\n const ed = editor;\n if (!ed) return;\n const currentPos = ed.state.selection.from;\n const deleteFrom = Math.max(0, pop.startPos - 1);\n ed.chain()\n .focus()\n .deleteRange({ from: deleteFrom, to: currentPos })\n .insertContent({\n type: \"skillReference\",\n attrs: { name: skill.name, path: skill.path, source: skill.source },\n })\n .insertContent(\" \")\n .run();\n popoverStateRef.current = null;\n setPopover(null);\n }\n\n // Popover select handlers for click-based selection (from MentionPopover)\n const handleSelectMention = useCallback(\n (item: MentionItem) => {\n if (!editor || !popover) return;\n const currentPos = editor.state.selection.from;\n const deleteFrom = Math.max(0, popover.startPos - 1);\n editor\n .chain()\n .focus()\n .deleteRange({ from: deleteFrom, to: currentPos })\n .insertContent({\n type: \"mentionReference\",\n attrs: {\n label: item.label,\n icon: item.icon || \"file\",\n source: item.source,\n refType: item.refType,\n refId: item.refId || null,\n refPath: item.refPath || null,\n },\n })\n .insertContent(\" \")\n .run();\n closePopover();\n },\n [editor, popover, closePopover],\n );\n\n const handleSelectCommand = useCallback(\n (command: SlashCommand) => {\n if (!editor || !popover) return;\n const currentPos = editor.state.selection.from;\n const deleteFrom = Math.max(0, popover.startPos - 1);\n editor\n .chain()\n .focus()\n .deleteRange({ from: deleteFrom, to: currentPos })\n .run();\n closePopover();\n onSlashCommand?.(command.name);\n },\n [editor, popover, closePopover, onSlashCommand],\n );\n\n const handleSelectSkill = useCallback(\n (skill: SkillResult) => {\n if (!editor || !popover) return;\n const currentPos = editor.state.selection.from;\n const deleteFrom = Math.max(0, popover.startPos - 1);\n editor\n .chain()\n .focus()\n .deleteRange({ from: deleteFrom, to: currentPos })\n .insertContent({\n type: \"skillReference\",\n attrs: { name: skill.name, path: skill.path, source: skill.source },\n })\n .insertContent(\" \")\n .run();\n closePopover();\n },\n [editor, popover, closePopover],\n );\n\n // Track query text as user types after trigger\n useEffect(() => {\n if (!editor || !popover) return;\n\n const updateHandler = () => {\n syncComposerState();\n\n const pop = popoverStateRef.current;\n if (!pop) return;\n const { from } = editor.state.selection;\n const { startPos, type } = pop;\n\n if (from < startPos) {\n closePopover();\n return;\n }\n\n const text = editor.state.doc.textBetween(startPos, from);\n\n // Verify the trigger character is still there\n if (startPos > 0) {\n const triggerChar = editor.state.doc.textBetween(\n startPos - 1,\n startPos,\n );\n if (\n (type === \"@\" && triggerChar !== \"@\") ||\n (type === \"/\" && triggerChar !== \"/\")\n ) {\n closePopover();\n return;\n }\n }\n\n const updated = { ...pop, query: text };\n popoverStateRef.current = updated;\n setPopover(updated);\n };\n\n editor.on(\"update\", updateHandler);\n editor.on(\"selectionUpdate\", updateHandler);\n return () => {\n editor.off(\"update\", updateHandler);\n editor.off(\"selectionUpdate\", updateHandler);\n };\n }, [editor, popover, closePopover, syncComposerState]);\n\n useEffect(() => {\n if (!editor) return;\n if (composerText !== \"\") return;\n if (editor.isEmpty) return;\n editor.commands.clearContent();\n }, [composerText, editor]);\n\n useEffect(() => {\n if (!editor || initialText === undefined) return;\n const key = initialTextKey ?? initialText;\n if (initialTextKeyRef.current === key) return;\n initialTextKeyRef.current = key;\n editor.commands.setContent(plainTextToDoc(initialText));\n editor.commands.focus(\"end\");\n const trimmed = editor.state.doc.textContent.trim();\n setEditorHasText(trimmed.length > 0);\n composerRuntime.setText(trimmed);\n onTextChangeRef.current?.(trimmed);\n try {\n if (trimmed) {\n localStorage.setItem(draftKey, editor.getHTML());\n } else {\n localStorage.removeItem(draftKey);\n }\n } catch {}\n }, [composerRuntime, draftKey, editor, initialText, initialTextKey]);\n\n // Tiptap only reads `editable` at init; prop changes need setEditable.\n useEffect(() => {\n if (!editor) return;\n editor.setEditable(!disabled);\n if (disabled) editor.commands.blur();\n }, [editor, disabled]);\n\n return (\n <>\n <style>{`\n .aui-composer .ProseMirror p.is-editor-empty:first-child::before {\n content: attr(data-placeholder);\n color: var(--color-muted-foreground);\n opacity: 0.5;\n float: left;\n height: 0;\n pointer-events: none;\n }\n `}</style>\n {composerMode && (\n <div\n data-agent-composer-variant={layoutVariant}\n data-agent-composer-slot=\"mode-row\"\n className=\"agent-composer-mode-row px-2.5 pt-2 pb-0\"\n >\n <ComposerModeChip\n mode={composerMode}\n onRemove={() => {\n setComposerMode(null);\n composerModeRef.current = null;\n editor?.commands.focus(\"end\");\n }}\n />\n </div>\n )}\n {hasContextItems && (\n <div\n data-agent-composer-variant={layoutVariant}\n data-agent-composer-slot=\"context-row\"\n className=\"agent-composer-context-row flex flex-wrap gap-1.5 px-2.5 pt-2 pb-0\"\n >\n {contextItems.map((item) => (\n <span\n key={item.key}\n className=\"inline-flex max-w-full items-center gap-1.5 rounded-md border border-border bg-muted/50 px-2 py-1 text-[11px] font-medium text-foreground\"\n >\n <IconClipboardList className=\"h-3 w-3 shrink-0 text-muted-foreground\" />\n <span className=\"min-w-0 truncate\">{item.title}</span>\n <button\n type=\"button\"\n onClick={() => onRemoveContextItem?.(item.key)}\n aria-label={`Remove ${item.title} context`}\n className=\"ml-0.5 flex h-4 w-4 shrink-0 items-center justify-center rounded text-muted-foreground hover:bg-accent hover:text-foreground\"\n >\n <IconX className=\"h-3 w-3\" />\n </button>\n </span>\n ))}\n </div>\n )}\n <div\n data-agent-composer-variant={layoutVariant}\n data-agent-composer-slot=\"editor-wrap\"\n className={`agent-composer-editor-wrap ${\n composerMode || hasContextItems ? \"px-2 pt-1 pb-1\" : \"px-2 pt-2 pb-1\"\n }`}\n >\n <EditorContent\n editor={editor}\n data-agent-composer-variant={layoutVariant}\n data-agent-composer-slot=\"editor\"\n className=\"agent-composer-editor aui-composer flex-1 min-w-0 [&_.ProseMirror]:outline-none [&_.ProseMirror_p]:m-0 px-0.5\"\n />\n </div>\n {voiceEnabled && <VoiceRecordingOverlay voice={voice} />}\n <div\n data-agent-composer-variant={layoutVariant}\n data-agent-composer-slot=\"toolbar\"\n className=\"agent-composer-toolbar flex items-center gap-1 px-2 py-1.5\"\n >\n {attachButton ??\n (plusMenuMode === \"hidden\" ? null : (\n <ComposerPlusMenu\n onSelectMode={handleSelectMode}\n mode={plusMenuMode}\n />\n ))}\n {toolbarSlot ?? modeControl}\n <div data-agent-composer-slot=\"toolbar-spacer\" className=\"flex-1\" />\n {selectedModel && availableModels && onModelChange && (\n <ModelSelector\n model={selectedModel}\n effort={selectedEffort}\n engines={availableModels}\n onChange={onModelChange}\n onEffortChange={onEffortChange}\n providerConnectStatusEnabled={providerConnectStatusEnabled}\n onConnectProvider={onConnectProvider}\n />\n )}\n {execMode && onExecModeChange && (\n <ModeSelector\n mode={execMode}\n onChange={onExecModeChange}\n planModeDisabled={planModeDisabled}\n planModeDisabledReason={planModeDisabledReason}\n />\n )}\n {actionButton ?? (\n <>\n {extraActionButton}\n {voiceEnabled && (\n <VoiceButton voice={voice} isMac={isMac} disabled={disabled} />\n )}\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n onClick={() => submitComposer(\"immediate\")}\n disabled={!canSend}\n data-agent-composer-slot=\"send-button\"\n className=\"agent-composer-send-button shrink-0 flex h-7 w-7 items-center justify-center rounded-md bg-primary text-primary-foreground hover:opacity-90 disabled:opacity-30 disabled:cursor-not-allowed\"\n >\n <IconArrowUp className=\"h-3.5 w-3.5\" />\n </button>\n </TooltipTrigger>\n <TooltipContent>Send message</TooltipContent>\n </Tooltip>\n </>\n )}\n </div>\n <MentionPopover\n ref={popoverRef}\n type={popover?.type ?? \"@\"}\n position={popover?.position ?? null}\n mentionItems={mentionItems}\n skills={filteredSkills}\n commands={filteredCommands}\n hint={hint}\n isLoading={popover?.type === \"@\" ? mentionsLoading : skillsLoading}\n query={popover?.query ?? \"\"}\n onSelectMention={handleSelectMention}\n onSelectSkill={handleSelectSkill}\n onSelectCommand={handleSelectCommand}\n onClose={closePopover}\n />\n </>\n );\n}\n"]}
1
+ {"version":3,"file":"TiptapComposer.js","sourceRoot":"","sources":["../../../src/client/composer/TiptapComposer.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, {\n useState,\n useRef,\n useEffect,\n useCallback,\n useImperativeHandle,\n useMemo,\n} from \"react\";\nimport { useComposer, useComposerRuntime } from \"@assistant-ui/react\";\nimport { useEditor, EditorContent } from \"@tiptap/react\";\nimport type { EditorView } from \"@tiptap/pm/view\";\nimport StarterKit from \"@tiptap/starter-kit\";\nimport Placeholder from \"@tiptap/extension-placeholder\";\nimport { FileReference } from \"./extensions/FileReference.js\";\nimport { SkillReference } from \"./extensions/SkillReference.js\";\nimport { MentionReference } from \"./extensions/MentionReference.js\";\nimport { MentionPopover, type MentionPopoverRef } from \"./MentionPopover.js\";\nimport { useMentionSearch } from \"./use-mention-search.js\";\nimport { useSkills } from \"./use-skills.js\";\nimport {\n IconArrowUp,\n IconCheck,\n IconChevronDown,\n IconChevronRight,\n IconBulb,\n IconClock,\n IconBolt,\n IconTool,\n IconX,\n IconClipboardList,\n IconPencil,\n IconPlugConnected,\n} from \"@tabler/icons-react\";\nimport { useBuilderConnectFlow } from \"../settings/useBuilderStatus.js\";\nimport type {\n MentionItem,\n SkillResult,\n Reference,\n SlashCommand,\n ComposerMode,\n AgentComposerLayoutVariant,\n} from \"./types.js\";\nimport { useVoiceDictation } from \"./useVoiceDictation.js\";\nimport { VoiceButton, VoiceRecordingOverlay } from \"./VoiceButton.js\";\nimport { ComposerPlusMenu } from \"./ComposerPlusMenu.js\";\nimport { sendToAgentChat, type AgentChatContextItem } from \"../agent-chat.js\";\nimport { tryDelegateBuildRequestToBuilder } from \"../builder-frame.js\";\nimport { getComposerDraftKey } from \"./draft-key.js\";\nimport {\n createPastedAttachmentFile,\n readClipboardPaste,\n shouldConvertClipboardToAttachment,\n} from \"./pasted-text.js\";\nimport {\n getReasoningEffortOptionsForModel,\n reasoningEffortLabel,\n type ReasoningEffort,\n} from \"../../shared/reasoning-effort.js\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"../components/ui/tooltip.js\";\nimport {\n Popover,\n PopoverContent,\n PopoverTrigger,\n} from \"../components/ui/popover.js\";\n\nexport interface TiptapComposerHandle {\n focus(): void;\n setText(text: string): void;\n}\n\nexport type ComposerSubmitIntent = \"immediate\" | \"queued\";\n\nexport interface TiptapComposerSubmitOptions {\n intent?: ComposerSubmitIntent;\n}\n\nexport function canSubmitComposerContent(options: {\n hasEditorContent: boolean;\n attachmentCount: number;\n disabled?: boolean;\n}): boolean {\n return (\n !options.disabled &&\n (options.hasEditorContent || options.attachmentCount > 0)\n );\n}\n\nexport function getComposerSubmitIntentForEnterKey(\n event: Pick<KeyboardEvent, \"key\" | \"shiftKey\" | \"metaKey\" | \"ctrlKey\">,\n isMac: boolean,\n): ComposerSubmitIntent | null {\n if (event.key !== \"Enter\" || event.shiftKey) return null;\n\n const queuedModifierPressed = isMac ? event.metaKey : event.ctrlKey;\n if (queuedModifierPressed) return \"queued\";\n\n if (!event.metaKey && !event.ctrlKey) return \"immediate\";\n\n return null;\n}\n\nexport function insertComposerHardBreakAndScrollIntoView(\n view: Pick<EditorView, \"state\" | \"dispatch\">,\n): boolean {\n const hardBreak = view.state.schema.nodes.hardBreak;\n if (!hardBreak) return false;\n\n view.dispatch(\n view.state.tr.replaceSelectionWith(hardBreak.create()).scrollIntoView(),\n );\n return true;\n}\n\nexport function displayableComposerModeMessage(options: {\n messagePrefix: string;\n trimmedText: string;\n attachmentCount: number;\n}): string {\n const modePrompt =\n options.trimmedText ||\n (options.attachmentCount > 0 ? \"Use the attached context.\" : \"\");\n return `${options.messagePrefix}${modePrompt}`;\n}\n\nfunction uniquifyComposerImageFile(file: File): File {\n if (!file.type.startsWith(\"image/\")) return file;\n const uniqueName = `${Date.now()}-${Math.random().toString(36).slice(2)}-${file.name}`;\n return new File([file], uniqueName, { type: file.type });\n}\n\nexport function handleComposerFileDrop(options: {\n event: Pick<DragEvent, \"dataTransfer\" | \"preventDefault\" | \"stopPropagation\">;\n addAttachment: (file: File) => Promise<unknown>;\n onError?: (error: unknown) => void;\n}): boolean {\n const droppedFiles = Array.from(options.event.dataTransfer?.files ?? []);\n if (droppedFiles.length === 0) return false;\n\n options.event.preventDefault();\n options.event.stopPropagation();\n const attachments = droppedFiles.map(uniquifyComposerImageFile);\n void Promise.all(\n attachments.map((file) => options.addAttachment(file)),\n ).catch((error) => {\n options.onError?.(error);\n });\n return true;\n}\n\nconst BUILT_IN_COMMANDS: SlashCommand[] = [\n { name: \"clear\", description: \"Start a new chat\", icon: \"clear\" },\n { name: \"new\", description: \"Start a new chat\", icon: \"new\" },\n { name: \"history\", description: \"Browse all chats\", icon: \"history\" },\n { name: \"plan\", description: \"Switch to read-only planning\", icon: \"plan\" },\n { name: \"act\", description: \"Switch back to acting\", icon: \"act\" },\n { name: \"help\", description: \"Show available commands\", icon: \"help\" },\n];\n\nfunction normalizeSlashCommandName(name: string): string {\n return name.replace(/^\\/+/, \"\").trim().toLowerCase();\n}\n\nfunction mergeSlashCommands(commands: SlashCommand[]): SlashCommand[] {\n const seen = new Set<string>();\n const merged: SlashCommand[] = [];\n for (const command of commands) {\n const name = normalizeSlashCommandName(command.name);\n if (!name || seen.has(name)) continue;\n seen.add(name);\n merged.push({ ...command, name });\n }\n return merged;\n}\n\nfunction mergeSlashSkills(skills: SkillResult[]): SkillResult[] {\n const seen = new Set<string>();\n const merged: SkillResult[] = [];\n for (const skill of skills) {\n const key = `${skill.source ?? \"\"}:${skill.path ?? \"\"}:${skill.name}`;\n if (!skill.name || seen.has(key)) continue;\n seen.add(key);\n merged.push(skill);\n }\n return merged;\n}\n\nconst COMPOSER_MODE_CONFIGS: Record<\n ComposerMode,\n {\n label: string;\n icon: React.ComponentType<{ className?: string }>;\n placeholder: string;\n messagePrefix: string;\n getContext: (prompt: string) => string;\n beforeSend?: () => void;\n }\n> = {\n skill: {\n label: \"Create Skill\",\n icon: IconBulb,\n placeholder: \"Describe the skill you want to create...\",\n messagePrefix: \"Create a skill: \",\n getContext: (prompt) =>\n `The user wants to create an agent skill. Their description: \"${prompt}\"\n\nFollow the create-skill pattern to build this. Before writing:\n\n1. **Determine the skill name** — derive a hyphen-case name from the description (e.g. \"code review\" → \"code-review\")\n2. **Determine the skill type** — Pattern (architectural rule), Workflow (step-by-step), or Generator (scaffolding)\n3. **Write the skill** as a personal resource at path \"skills/<name>/SKILL.md\" using the \\`resources\\` tool with \\`action: \"write\"\\`\n\nThe skill file MUST have YAML frontmatter with name and description (under 40 words), then markdown with:\n- Clear rule/purpose statement\n- Why this skill exists\n- How to follow it (with code examples where helpful)\n- Common violations to avoid\n- Related skills\n\nAfter creating, update the shared AGENTS.md resource to reference the new skill in its skills table.\n\nKeep the skill concise (under 500 lines) and actionable.`,\n },\n job: {\n label: \"Schedule Task\",\n icon: IconClock,\n placeholder: \"Describe what should happen and when...\",\n messagePrefix: \"Create a recurring job: \",\n getContext: (prompt) =>\n `The user wants to create a recurring job. Their description: \"${prompt}\"\n\nUse the manage-jobs tool with action \"create\" to create this. You need to:\n1. Derive a hyphen-case name from the description\n2. Convert the schedule to a cron expression (e.g., \"every weekday at 9am\" → \"0 9 * * 1-5\")\n3. Write clear, self-contained instructions for what the agent should do each time the job runs\n4. Create it in personal scope\n\nThe job will run automatically on the schedule. Make the instructions specific — include which actions to call and what to do with results.`,\n },\n automation: {\n label: \"Create Automation\",\n icon: IconBolt,\n placeholder: \"Describe what you want to automate...\",\n messagePrefix: \"Create an automation: \",\n beforeSend: () => {\n window.dispatchEvent(\n new CustomEvent(\"agent-panel:set-mode\", {\n detail: { mode: \"chat\" },\n }),\n );\n },\n getContext: (prompt) =>\n `The user wants to create a new automation. Scope: personal. Their description: \"${prompt}\"\n\nUse manage-automations with action=define to create it. Ask clarifying questions if needed about what event to trigger on, conditions, and what actions to take.`,\n },\n extension: {\n label: \"Create Extension\",\n icon: IconTool,\n placeholder: \"Describe the interactive extension you want to build...\",\n messagePrefix: \"Create an extension: \",\n getContext: (prompt) =>\n `The user wants to create an interactive extension (sandboxed mini-app). Their description: \"${prompt}\"\n\nUse the create-extension action with Alpine.js HTML content. The extension runs as a sandboxed iframe with Tailwind CSS and modest default canvas padding. For edge-to-edge layouts, put data-extension-layout=\"full-bleed\" on the outermost element.\n\nAfter creating the extension, navigate the user to it with the path returned by create-extension; extension URLs may include a friendly \"/extensions/<id>/<slug>\" suffix.\n\nMake the extension functional and visually polished. Extensions can use extensionFetch() for external API calls, appAction()/appFetch() for app operations, extensionData for per-extension persistence, and dbQuery()/dbExec() only for existing app tables.\n\nPrefer appAction()/appFetch() for app data. Some actions return JSON strings for CLI compatibility, so parse string results before counting rows or reading arrays. Do not guess raw SQL table names or columns for app data; use dbQuery()/dbExec() only when the table is known to exist in the current schema.`,\n },\n};\n\nfunction ComposerModeChip({\n mode,\n onRemove,\n}: {\n mode: ComposerMode;\n onRemove: () => void;\n}) {\n const config = COMPOSER_MODE_CONFIGS[mode];\n const Icon = config.icon;\n return (\n <span className=\"inline-flex items-center gap-1 rounded-md border border-border bg-muted/50 px-1.5 py-0.5 text-xs font-medium text-foreground\">\n <Icon className=\"h-3 w-3 text-muted-foreground\" />\n {config.label}\n <button\n type=\"button\"\n onClick={onRemove}\n className=\"ml-0.5 rounded-sm text-muted-foreground hover:text-foreground cursor-pointer\"\n >\n <IconX className=\"h-3 w-3\" />\n </button>\n </span>\n );\n}\n\ntype ExecMode = \"build\" | \"plan\";\n\nexport interface TiptapComposerProps {\n placeholder?: string;\n disabled?: boolean;\n focusRef?: React.Ref<TiptapComposerHandle>;\n /** Programmatically seed the editor with plain text. */\n initialText?: string;\n /** Stable key used to re-apply the seeded text. */\n initialTextKey?: string | number;\n /**\n * When provided, called instead of composerRuntime.send(). Used for queue\n * mode and standalone prompt popovers. Receives the live composer\n * attachments so callers (e.g. PromptComposer) can surface uploaded files.\n */\n onSubmit?: (\n text: string,\n references: Reference[],\n attachments?: ReadonlyArray<unknown>,\n options?: TiptapComposerSubmitOptions,\n ) => void;\n /**\n * Clear the editor after an onSubmit handler runs. Standalone workflows that\n * may fail outside the composer can keep the draft visible for quick edits.\n */\n clearOnSubmit?: boolean;\n /** Called whenever the plain editor text changes. */\n onTextChange?: (text: string) => void;\n /** Custom action button (e.g. stop button) to render instead of the default send button. */\n actionButton?: React.ReactNode;\n /** Extra button to render alongside the default send button (e.g. stop while running). */\n extraActionButton?: React.ReactNode;\n /** Custom attachment button to render instead of ComposerPrimitive.AddAttachment. */\n attachButton?: React.ReactNode;\n /** Custom host-owned control rendered next to the attachment affordance. */\n modeControl?: React.ReactNode;\n /** Explicit host-owned toolbar slot rendered next to the attachment affordance. */\n toolbarSlot?: React.ReactNode;\n /** Shared sizing/layout variant for host surfaces. Default keeps sidebar behavior. */\n layoutVariant?: AgentComposerLayoutVariant;\n /** Additional slash commands surfaced in the shared / menu. */\n slashCommands?: SlashCommand[];\n /** Additional slash skills surfaced in the shared / menu. */\n slashSkills?: SkillResult[];\n /** Include built-in sidebar slash commands like /clear and /help. Default true. */\n includeDefaultSlashCommands?: boolean;\n /** Include app-discovered skills from the default agent endpoint. Default true. */\n includeDefaultSlashSkills?: boolean;\n /** Called when a slash command (e.g. /clear, /help) is executed */\n onSlashCommand?: (command: string) => void;\n /** Current execution mode (build/plan) */\n execMode?: ExecMode;\n /** Callback to change execution mode */\n onExecModeChange?: (mode: ExecMode) => void;\n /** Disable Plan mode while leaving Act mode available. */\n planModeDisabled?: boolean;\n /** Explanation shown next to the disabled Plan option. */\n planModeDisabledReason?: string;\n /** Show the microphone button for voice dictation. Default true. */\n voiceEnabled?: boolean;\n /** Selected model override for this conversation */\n selectedModel?: string;\n /** Selected reasoning effort override for this conversation */\n selectedEffort?: ReasoningEffort;\n /** Available models grouped by provider */\n availableModels?: Array<{\n engine: string;\n label: string;\n models: string[];\n configured: boolean;\n }>;\n /** Callback when user picks a model */\n onModelChange?: (model: string, engine: string) => void;\n /** Callback when user picks a reasoning effort */\n onEffortChange?: (effort: ReasoningEffort) => void;\n /**\n * Disable Builder/provider status polling for hosts that supply provider\n * state through another channel, such as Electron IPC.\n */\n providerConnectStatusEnabled?: boolean;\n /**\n * Override the Builder.io connect action in the model picker. When provided,\n * clicking \"Connect Builder.io\" calls this instead of opening a browser popup.\n * Used by the Electron desktop app to route through the native IPC handler.\n */\n onConnectProvider?: () => void;\n /** Stable scope for persisted drafts, usually the active thread or tab id. */\n draftScope?: string;\n /** Keyed context nuggets staged for the next submitted prompt. */\n contextItems?: AgentChatContextItem[];\n /** Remove a staged context nugget by key. */\n onRemoveContextItem?: (key: string) => void;\n /**\n * Controls the \"+\" menu next to the composer. `\"full\"` (default) shows the\n * normal Upload / Skill / Job / Automation / Tool / MCP picker. `\"upload-only\"`\n * collapses it to a single button that opens the file picker directly.\n * `\"hidden\"` hides attachment controls for text-only prompt surfaces.\n */\n plusMenuMode?: \"full\" | \"upload-only\" | \"hidden\";\n /**\n * When true and the composer is running inside the Builder.io webview/iframe,\n * intercept \"build me an app/agent\" prompts and forward them to the parent\n * Builder chat via `builder.submitChat` instead of sending to the local\n * agent. Off by default — the chat sidebar opts in; standalone prompt\n * forms (NewWorkspaceAppFlow, etc.) handle delegation themselves with\n * extra context (vault keys, computed app ids) that the raw composer\n * text lacks.\n */\n interceptBuildRequestsForBuilder?: boolean;\n /**\n * Called when a drag-drop or paste attachment fails (e.g. unsupported format,\n * size cap). Use this to surface a visible error in the parent chat surface\n * rather than silently swallowing the problem.\n */\n onAttachmentError?: (message: string) => void;\n}\n\nfunction plainTextToDoc(text: string) {\n const lines = text.length > 0 ? text.split(/\\r?\\n/) : [\"\"];\n return {\n type: \"doc\",\n content: lines.map((line) => ({\n type: \"paragraph\",\n content: line ? [{ type: \"text\", text: line }] : [],\n })),\n };\n}\n\nexport function createTiptapComposerExtensions(\n getPlaceholder: () => string | undefined,\n) {\n return [\n StarterKit.configure({\n heading: false,\n horizontalRule: false,\n bulletList: false,\n orderedList: false,\n listItem: false,\n listKeymap: false,\n blockquote: false,\n codeBlock: false,\n strike: false,\n italic: false,\n bold: false,\n code: false,\n dropcursor: false,\n gapcursor: false,\n link: false,\n trailingNode: false,\n underline: false,\n }),\n Placeholder.configure({\n placeholder: () => getPlaceholder() ?? \"\",\n emptyEditorClass: \"is-editor-empty\",\n showOnlyCurrent: false,\n }),\n FileReference,\n SkillReference,\n MentionReference,\n ];\n}\n\nfunction ModeSelector({\n mode,\n onChange,\n planModeDisabled = false,\n planModeDisabledReason = \"Open Agent Native Desktop to use Plan mode.\",\n}: {\n mode: ExecMode;\n onChange: (mode: ExecMode) => void;\n planModeDisabled?: boolean;\n planModeDisabledReason?: string;\n}) {\n const [open, setOpen] = useState(false);\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n aria-label={mode === \"build\" ? \"Act mode\" : \"Plan mode\"}\n data-agent-composer-slot=\"mode-button\"\n className=\"agent-composer-mode-button shrink-0 flex items-center gap-1 rounded-md px-2 py-1 text-[12px] font-medium text-muted-foreground hover:bg-accent/50 hover:text-foreground\"\n >\n {mode === \"build\" ? \"Act\" : \"Plan\"}\n <IconChevronDown className=\"h-3 w-3 opacity-60\" />\n </button>\n </PopoverTrigger>\n <PopoverContent\n side=\"top\"\n align=\"end\"\n sideOffset={6}\n collisionPadding={8}\n data-agent-native-composer-popover=\"true\"\n className=\"z-[260] w-60 rounded-lg border-border p-0 py-1 shadow-lg\"\n style={{ fontSize: 13 }}\n >\n <button\n type=\"button\"\n onClick={() => {\n onChange(\"build\");\n setOpen(false);\n }}\n className=\"flex w-full items-center gap-3 px-3 py-2 hover:bg-accent/50 text-left\"\n >\n <IconPencil className=\"h-4 w-4 shrink-0 text-muted-foreground\" />\n <div className=\"flex-1 min-w-0\">\n <span className=\"font-medium text-foreground text-[13px]\">Act</span>\n <p className=\"text-[11px] text-muted-foreground mt-0.5\">\n Use tools and make approved changes\n </p>\n </div>\n {mode === \"build\" && (\n <IconCheck className=\"h-3.5 w-3.5 shrink-0 text-blue-500\" />\n )}\n </button>\n <button\n type=\"button\"\n disabled={planModeDisabled}\n title={planModeDisabled ? planModeDisabledReason : undefined}\n onClick={() => {\n if (planModeDisabled) return;\n onChange(\"plan\");\n setOpen(false);\n }}\n className={`flex w-full items-center gap-3 px-3 py-2 text-left ${\n planModeDisabled\n ? \"cursor-not-allowed opacity-60\"\n : \"hover:bg-accent/50\"\n }`}\n >\n <IconClipboardList className=\"h-4 w-4 shrink-0 text-muted-foreground\" />\n <div className=\"flex-1 min-w-0\">\n <span className=\"font-medium text-foreground text-[13px]\">\n Plan\n </span>\n <p className=\"text-[11px] text-muted-foreground mt-0.5\">\n {planModeDisabled\n ? planModeDisabledReason\n : \"Read-only research and approval first\"}\n </p>\n </div>\n {mode === \"plan\" && !planModeDisabled && (\n <IconCheck className=\"h-3.5 w-3.5 shrink-0 text-blue-500\" />\n )}\n </button>\n </PopoverContent>\n </Popover>\n );\n}\n\nconst FRIENDLY_MODEL_NAMES: Record<string, string> = {\n auto: \"Default model\",\n \"claude-fable-5\": \"Fable 5\",\n \"grok-code-fast\": \"Grok Code Fast\",\n \"qwen3-coder\": \"Qwen3 Coder\",\n \"kimi-k2-5\": \"Kimi K2.5\",\n \"deepseek-v3-1\": \"DeepSeek v3.1\",\n};\n\nfunction friendlyModelName(model: string): string {\n if (FRIENDLY_MODEL_NAMES[model]) return FRIENDLY_MODEL_NAMES[model];\n // Claude: claude-{tier}-{major}-{minor}[-dateYYYYMMDD] → Tier Major.Minor\n const claude = model.match(\n /^claude-(opus|sonnet|haiku)-(\\d+)-(\\d+)(?:-\\d{8,})?$/,\n );\n if (claude) {\n const tier = claude[1][0].toUpperCase() + claude[1].slice(1);\n return `${tier} ${claude[2]}.${claude[3]}`;\n }\n // GPT: gpt-{major}-{minor}[-suffix] or gpt-{major}.{minor}[-suffix]\n if (model.startsWith(\"gpt-\")) {\n const rest = model.slice(4);\n const gpt = rest.match(/^(\\d+)[.-](\\d+)(?:[.-](.+))?$/);\n if (gpt) {\n const suffix = gpt[3]\n ? \" \" +\n gpt[3]\n .split(\"-\")\n .map((s) => s[0].toUpperCase() + s.slice(1))\n .join(\" \")\n : \"\";\n return `GPT-${gpt[1]}.${gpt[2]}${suffix}`;\n }\n return `GPT-${rest}`;\n }\n if (/^o\\d/.test(model)) return model;\n // Gemini: gemini-{major}-{minor}-{variant}[-preview] → Gemini Major.Minor Variant\n const geminiVersioned = model.match(\n /^gemini-(\\d+)-(\\d+)-(.+?)(?:-preview)?$/,\n );\n if (geminiVersioned) {\n const variant = geminiVersioned[3]\n .split(\"-\")\n .map((s) => s[0].toUpperCase() + s.slice(1))\n .join(\" \");\n return `Gemini ${geminiVersioned[1]}.${geminiVersioned[2]} ${variant}`;\n }\n // Gemini: gemini-{version.parts}[-preview] → Gemini Version Parts\n const gemini = model.match(/^gemini-(.+?)(?:-preview)?$/);\n if (gemini) {\n const parts = gemini[1]\n .split(\"-\")\n .map((s) => s[0].toUpperCase() + s.slice(1))\n .join(\" \");\n return `Gemini ${parts}`;\n }\n return model;\n}\n\n/**\n * Deduplicate models to only the latest version per family.\n * e.g. [opus-4-7, opus-4-6, opus-4-5] → [opus-4-7]\n */\nfunction latestModelsOnly(models: string[]): string[] {\n const seen = new Set<string>();\n return models.filter((m) => {\n // Claude: family = tier (opus/sonnet/haiku)\n const claude = m.match(/^claude-(opus|sonnet|haiku)-/);\n if (claude) {\n if (seen.has(claude[1])) return false;\n seen.add(claude[1]);\n return true;\n }\n // GPT: family = gpt-{major} (e.g. gpt-5.4 and gpt-5.4-mini are different)\n // OpenAI reasoning: each is its own family\n // Gemini: family = gemini-{major} + variant\n const gemini = m.match(/^gemini-(\\d+(?:\\.\\d+)?)-(.+?)(?:-preview)?$/);\n if (gemini) {\n const family = gemini[2]; // flash, pro, etc.\n if (seen.has(`gemini-${family}`)) return false;\n seen.add(`gemini-${family}`);\n return true;\n }\n return true;\n });\n}\n\nfunction ModelSelector({\n model,\n effort = \"auto\",\n engines,\n onChange,\n onEffortChange,\n providerConnectStatusEnabled = true,\n onConnectProvider,\n}: {\n model: string;\n effort?: ReasoningEffort;\n engines: Array<{\n engine: string;\n label: string;\n models: string[];\n configured: boolean;\n }>;\n onChange: (model: string, engine: string) => void;\n onEffortChange?: (effort: ReasoningEffort) => void;\n providerConnectStatusEnabled?: boolean;\n onConnectProvider?: () => void;\n}) {\n const [open, setOpen] = useState(false);\n const autoModelGroup = engines.find((group) => group.models.includes(\"auto\"));\n const providerGroups = useMemo(\n () =>\n engines\n .map((group) => ({\n ...group,\n models: group.models.filter((candidate) => candidate !== \"auto\"),\n }))\n .filter((group) => group.models.length > 0),\n [engines],\n );\n const effortOptions =\n model === \"auto\"\n ? ([\n \"auto\",\n \"low\",\n \"medium\",\n \"high\",\n \"xhigh\",\n \"max\",\n ] satisfies ReasoningEffort[])\n : getReasoningEffortOptionsForModel(model);\n\n // Collapse non-selected families by default. The family containing the\n // currently-selected model stays expanded so the user sees their pick at\n // a glance; clicking another family's header expands it inline.\n const selectedGroupKey = useMemo(() => {\n const found = providerGroups.find((g) => g.models.includes(model));\n return found ? `${found.engine}:${found.label}` : null;\n }, [model, providerGroups]);\n\n const [expandedGroups, setExpandedGroups] = useState<Set<string>>(\n () => new Set(selectedGroupKey ? [selectedGroupKey] : []),\n );\n\n // Reset expansion when the popover re-opens so the picker always lands\n // on the \"selected family expanded, others collapsed\" view.\n useEffect(() => {\n if (open) {\n setExpandedGroups(new Set(selectedGroupKey ? [selectedGroupKey] : []));\n }\n }, [open, selectedGroupKey]);\n\n const toggleGroup = useCallback((key: string) => {\n setExpandedGroups((prev) => {\n const next = new Set(prev);\n if (next.has(key)) next.delete(key);\n else next.add(key);\n return next;\n });\n }, []);\n\n // When Builder.io isn't connected, surface a one-click connect path —\n // it unlocks every model family (Claude, OpenAI, Gemini) without the\n // user having to paste individual API keys.\n const builderFlow = useBuilderConnectFlow({\n enabled: providerConnectStatusEnabled,\n trackingSource: \"composer_builder_cta\",\n });\n const hasConfiguredBuilderModels = providerGroups.some(\n (group) => group.engine === \"builder\" && group.configured,\n );\n const showBuilderCta =\n (builderFlow.hasFetchedStatus ||\n (!providerConnectStatusEnabled && !!onConnectProvider)) &&\n !builderFlow.configured &&\n !builderFlow.envManaged &&\n !hasConfiguredBuilderModels;\n const openLlmSettings = useCallback(() => {\n try {\n window.location.hash = \"llm\";\n } catch {}\n window.dispatchEvent(new CustomEvent(\"agent-panel:open-settings\"));\n setOpen(false);\n }, []);\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <button\n type=\"button\"\n data-agent-composer-slot=\"model-button\"\n className=\"agent-composer-model-button flex min-w-0 max-w-[10.5rem] shrink items-center gap-1 rounded-md px-2 py-1 text-[12px] font-medium text-muted-foreground hover:bg-accent/50 hover:text-foreground\"\n >\n <span className=\"min-w-0 truncate\">{friendlyModelName(model)}</span>\n {effortOptions.length > 0 && (\n <span className=\"agent-composer-model-effort min-w-0 shrink truncate text-muted-foreground/70\">\n · {reasoningEffortLabel(effort)}\n </span>\n )}\n <IconChevronDown className=\"h-3 w-3 shrink-0 opacity-60\" />\n </button>\n </PopoverTrigger>\n <PopoverContent\n side=\"top\"\n align=\"end\"\n sideOffset={6}\n collisionPadding={8}\n data-agent-native-composer-popover=\"true\"\n className=\"z-[260] box-border w-72 overflow-y-auto rounded-lg border-border p-0 py-1 shadow-lg\"\n style={\n providerGroups.length > 0\n ? {\n fontSize: 13,\n height:\n \"min(500px, var(--radix-popover-content-available-height, 500px))\",\n }\n : {\n fontSize: 13,\n maxHeight:\n \"min(500px, var(--radix-popover-content-available-height, 500px))\",\n }\n }\n >\n {showBuilderCta && (\n <>\n <button\n type=\"button\"\n onClick={() => {\n if (onConnectProvider) {\n onConnectProvider();\n } else {\n builderFlow.start();\n }\n }}\n disabled={!onConnectProvider && builderFlow.connecting}\n className=\"flex w-full items-start gap-2 px-3 py-2 text-left hover:bg-accent/50 disabled:opacity-60\"\n >\n <IconPlugConnected className=\"h-4 w-4 shrink-0 mt-0.5 text-blue-500\" />\n <span className=\"flex-1 min-w-0\">\n <span className=\"block text-[12px] font-medium text-foreground\">\n {!onConnectProvider && builderFlow.connecting\n ? \"Connecting Builder.io…\"\n : \"Connect Builder.io\"}\n </span>\n <span className=\"block text-[11px] text-muted-foreground\">\n Free credits for Claude, OpenAI &amp; Gemini\n </span>\n </span>\n </button>\n <div className=\"my-1 border-t border-border\" />\n </>\n )}\n {autoModelGroup && (\n <button\n type=\"button\"\n onClick={() => {\n onChange(\"auto\", autoModelGroup.engine);\n setOpen(false);\n }}\n className=\"flex w-full items-center gap-3 px-3 py-1.5 text-left hover:bg-accent/50\"\n >\n <span className=\"flex-1 min-w-0 text-[13px] text-foreground truncate\">\n Auto\n </span>\n {model === \"auto\" && (\n <IconCheck className=\"h-3.5 w-3.5 shrink-0 text-blue-500\" />\n )}\n </button>\n )}\n {autoModelGroup && providerGroups.length > 0 && (\n <div className=\"my-1 border-t border-border\" />\n )}\n {providerGroups.map((group) => {\n const models = latestModelsOnly(group.models);\n const groupKey = `${group.engine}:${group.label}`;\n const isExpanded = expandedGroups.has(groupKey);\n const ChevronIcon = isExpanded ? IconChevronDown : IconChevronRight;\n return (\n <div key={groupKey}>\n <div className=\"flex items-center hover:bg-accent/30\">\n <button\n type=\"button\"\n aria-expanded={isExpanded}\n onClick={() => toggleGroup(groupKey)}\n className=\"flex flex-1 min-w-0 items-center gap-1.5 px-2 py-1.5 cursor-pointer text-left\"\n >\n <ChevronIcon className=\"h-3 w-3 shrink-0 text-muted-foreground\" />\n <span className=\"text-[11px] font-medium text-muted-foreground uppercase tracking-wide shrink-0\">\n {group.label}\n </span>\n {!isExpanded && groupKey === selectedGroupKey && (\n <span className=\"text-[11px] text-muted-foreground/80 truncate\">\n {friendlyModelName(model)}\n </span>\n )}\n </button>\n {!group.configured && (\n <button\n type=\"button\"\n className=\"text-[10px] text-muted-foreground/60 hover:text-foreground cursor-pointer pr-3 py-1.5\"\n onClick={openLlmSettings}\n >\n needs API key\n </button>\n )}\n </div>\n {isExpanded &&\n models.map((m) => (\n <button\n key={m}\n type=\"button\"\n onClick={() => {\n if (!group.configured) {\n openLlmSettings();\n return;\n }\n onChange(m, group.engine);\n const nextOptions = getReasoningEffortOptionsForModel(m);\n if (\n effort !== \"auto\" &&\n nextOptions.length > 0 &&\n !nextOptions.includes(effort)\n ) {\n onEffortChange?.(\"auto\");\n }\n setOpen(false);\n }}\n className={`flex w-full items-center gap-3 pl-7 pr-3 py-1.5 text-left ${\n group.configured\n ? \"hover:bg-accent/50\"\n : \"opacity-40 cursor-default\"\n }`}\n >\n <span className=\"flex-1 min-w-0 text-[13px] text-foreground truncate\">\n {friendlyModelName(m)}\n </span>\n {m === model && group.configured && (\n <IconCheck className=\"h-3.5 w-3.5 shrink-0 text-blue-500\" />\n )}\n </button>\n ))}\n </div>\n );\n })}\n {effortOptions.length > 0 && (\n <>\n <div className=\"my-1 border-t border-border\" />\n <div className=\"px-3 py-1.5 text-[11px] font-medium text-muted-foreground uppercase tracking-wide\">\n Reasoning\n </div>\n {effortOptions.map((option) => (\n <button\n key={option}\n type=\"button\"\n onClick={() => onEffortChange?.(option)}\n className=\"flex w-full items-center gap-3 px-3 py-1.5 text-left hover:bg-accent/50\"\n >\n <span className=\"flex-1 min-w-0 text-[13px] text-foreground truncate\">\n {reasoningEffortLabel(option)}\n </span>\n {option === effort && (\n <IconCheck className=\"h-3.5 w-3.5 shrink-0 text-blue-500\" />\n )}\n </button>\n ))}\n </>\n )}\n </PopoverContent>\n </Popover>\n );\n}\n\ntype PopoverState = {\n type: \"@\" | \"/\";\n position: { top: number; left: number };\n startPos: number;\n query: string;\n} | null;\n\nexport function TiptapComposer({\n placeholder = \"Message agent...\",\n disabled = false,\n focusRef,\n initialText,\n initialTextKey,\n onSubmit,\n clearOnSubmit = true,\n onTextChange,\n actionButton,\n extraActionButton,\n attachButton,\n modeControl,\n toolbarSlot,\n layoutVariant = \"default\",\n slashCommands = [],\n slashSkills = [],\n includeDefaultSlashCommands = true,\n includeDefaultSlashSkills = true,\n onSlashCommand,\n execMode,\n onExecModeChange,\n planModeDisabled = false,\n planModeDisabledReason,\n voiceEnabled = true,\n selectedModel,\n selectedEffort,\n availableModels,\n onModelChange,\n onEffortChange,\n providerConnectStatusEnabled,\n onConnectProvider,\n draftScope,\n contextItems = [],\n onRemoveContextItem,\n plusMenuMode = \"full\",\n interceptBuildRequestsForBuilder = false,\n onAttachmentError,\n}: TiptapComposerProps) {\n const [popover, setPopover] = useState<PopoverState>(null);\n const popoverRef = useRef<MentionPopoverRef>(null);\n const composerRuntime = useComposerRuntime();\n const [editorHasText, setEditorHasText] = useState(false);\n const composerText = useComposer((state) => state.text);\n const composerAttachments = useComposer((state) => state.attachments);\n const canSend = canSubmitComposerContent({\n hasEditorContent: editorHasText,\n attachmentCount: composerAttachments.length,\n disabled,\n });\n const hasContextItems = contextItems.length > 0;\n const [composerMode, setComposerMode] = useState<ComposerMode | null>(null);\n const composerModeRef = useRef<ComposerMode | null>(null);\n const isMac =\n typeof navigator !== \"undefined\" &&\n /Mac|iPhone|iPad/.test(navigator.userAgent);\n\n // Refs for values accessed in handleKeyDown (ProseMirror doesn't re-bind)\n const popoverStateRef = useRef<PopoverState>(null);\n const onAttachmentErrorRef = useRef(onAttachmentError);\n onAttachmentErrorRef.current = onAttachmentError;\n const execModeRef = useRef(execMode);\n execModeRef.current = execMode;\n const onExecModeChangeRef = useRef(onExecModeChange);\n onExecModeChangeRef.current = onExecModeChange;\n const planModeDisabledRef = useRef(planModeDisabled);\n planModeDisabledRef.current = planModeDisabled;\n\n const { items: mentionItems, isLoading: mentionsLoading } = useMentionSearch(\n popover?.type === \"@\" ? popover.query : \"\",\n popover?.type === \"@\",\n );\n\n const {\n skills,\n hint,\n isLoading: skillsLoading,\n } = useSkills(includeDefaultSlashSkills && popover?.type === \"/\");\n\n const allSlashCommands = useMemo(\n () =>\n mergeSlashCommands([\n ...(includeDefaultSlashCommands ? BUILT_IN_COMMANDS : []),\n ...slashCommands,\n ]),\n [includeDefaultSlashCommands, slashCommands],\n );\n\n const allSlashSkills = useMemo(\n () =>\n mergeSlashSkills([\n ...(includeDefaultSlashSkills ? skills : []),\n ...slashSkills,\n ]),\n [includeDefaultSlashSkills, skills, slashSkills],\n );\n\n const filteredCommands = useMemo(() => {\n if (!popover || popover.type !== \"/\") return allSlashCommands;\n const q = popover.query.toLowerCase();\n if (!q) return allSlashCommands;\n return allSlashCommands.filter(\n (c) =>\n c.name.toLowerCase().includes(q) ||\n c.description.toLowerCase().includes(q),\n );\n }, [allSlashCommands, popover]);\n\n const filteredSkills = useMemo(() => {\n if (!popover || popover.type !== \"/\") return allSlashSkills;\n const q = popover.query.toLowerCase();\n if (!q) return allSlashSkills;\n return allSlashSkills.filter(\n (s) =>\n s.name.toLowerCase().includes(q) ||\n s.description?.toLowerCase().includes(q),\n );\n }, [allSlashSkills, popover]);\n\n // Keep refs in sync with state\n const mentionItemsRef = useRef(mentionItems);\n mentionItemsRef.current = mentionItems;\n const filteredCommandsRef = useRef(filteredCommands);\n filteredCommandsRef.current = filteredCommands;\n const filteredSkillsRef = useRef(filteredSkills);\n filteredSkillsRef.current = filteredSkills;\n const onSlashCommandRef = useRef(onSlashCommand);\n onSlashCommandRef.current = onSlashCommand;\n const onTextChangeRef = useRef(onTextChange);\n onTextChangeRef.current = onTextChange;\n const initialTextKeyRef = useRef<string | number | undefined>(undefined);\n\n const closePopover = useCallback(() => {\n setPopover(null);\n popoverStateRef.current = null;\n }, []);\n\n // Persist draft to localStorage so hot-reloads don't lose the prompt\n const draftKey = getComposerDraftKey(draftScope);\n const draftTimerRef = useRef<ReturnType<typeof setTimeout>>(undefined);\n useEffect(() => {\n return () => {\n clearTimeout(draftTimerRef.current);\n };\n }, []);\n // Tiptap reads extension config once at init; ref keeps runtime prop\n // changes visible to Placeholder's function form.\n const placeholderRef = useRef(placeholder);\n useEffect(() => {\n placeholderRef.current = composerMode\n ? COMPOSER_MODE_CONFIGS[composerMode].placeholder\n : placeholder;\n }, [placeholder, composerMode]);\n\n const editor = useEditor({\n extensions: createTiptapComposerExtensions(() => placeholderRef.current),\n editable: !disabled,\n onCreate: ({ editor: ed }) => {\n // Restore draft on mount\n try {\n if (initialText !== undefined) {\n ed.commands.setContent(plainTextToDoc(initialText));\n ed.commands.focus(\"end\");\n setEditorHasText(ed.state.doc.textContent.trim().length > 0);\n initialTextKeyRef.current = initialTextKey ?? initialText;\n } else {\n const saved = localStorage.getItem(draftKey);\n if (saved) {\n ed.commands.setContent(saved);\n ed.commands.focus(\"end\");\n setEditorHasText(ed.state.doc.textContent.trim().length > 0);\n }\n }\n onTextChangeRef.current?.(ed.state.doc.textContent.trim());\n } catch {}\n },\n onUpdate: ({ editor: ed }) => {\n // Drive the send button's enabled state from the actual editor contents;\n // the composer runtime is only synced on submit, so its isEmpty lags.\n let hasContent = ed.state.doc.textContent.trim().length > 0;\n if (!hasContent) {\n ed.state.doc.descendants((node: any) => {\n if (\n node.type.name === \"mentionReference\" ||\n node.type.name === \"fileReference\" ||\n node.type.name === \"skillReference\"\n ) {\n hasContent = true;\n return false;\n }\n return true;\n });\n }\n setEditorHasText(hasContent);\n onTextChangeRef.current?.(ed.state.doc.textContent.trim());\n\n // Debounce-save draft to localStorage\n clearTimeout(draftTimerRef.current);\n draftTimerRef.current = setTimeout(() => {\n try {\n const html = ed.getHTML();\n const isEmpty = !ed.state.doc.textContent.trim();\n if (isEmpty) {\n localStorage.removeItem(draftKey);\n } else {\n localStorage.setItem(draftKey, html);\n }\n } catch {}\n }, 300);\n },\n editorProps: {\n attributes: {\n \"data-agent-composer-variant\": layoutVariant,\n \"data-agent-composer-slot\": \"editor-input\",\n class:\n \"agent-composer-prosemirror flex-1 resize-none bg-transparent text-sm text-foreground outline-none leading-[1.625rem] min-h-[3.25rem] max-h-[10rem] overflow-y-auto\",\n },\n handlePaste: (_view, event) => {\n const paste = readClipboardPaste(event.clipboardData);\n const pastedText = paste.text;\n const files = Array.from(event.clipboardData?.files ?? []).filter(\n (file) => file.type.startsWith(\"image/\"),\n );\n if (files.length > 0) {\n event.preventDefault();\n const attachments: File[] = files.map((file) => {\n // SimpleImageAttachmentAdapter uses file.name as the attachment id.\n // Clipboard images (e.g. screenshots) are typically all named\n // \"image.png\", so a second paste would replace the first instead of\n // appending. Prepend a unique token so each paste gets a distinct id.\n const uniqueName = `${Date.now()}-${Math.random().toString(36).slice(2)}-${file.name}`;\n return new File([file], uniqueName, { type: file.type });\n });\n\n // Google Docs rich clipboard payloads can contain both embedded\n // image files and the document text. Since handling files means we\n // prevent Tiptap's default paste, preserve any text as its own chip\n // instead of silently dropping the source material.\n if (pastedText.trim()) {\n attachments.push(createPastedAttachmentFile(paste));\n }\n\n void Promise.all(\n attachments.map((file) => composerRuntime.addAttachment(file)),\n ).catch((error) => {\n const msg =\n error instanceof Error\n ? error.message\n : \"Could not attach the pasted image. Try a different format.\";\n onAttachmentErrorRef.current?.(msg);\n });\n return true;\n }\n\n // Page-sized pastes turn into a `Pasted text` attachment chip so the\n // prompt stays readable while normal paragraphs and lists stay inline.\n // When the paste is HTML (e.g. an Alpine.js extension or a document the\n // user wants hosted), it's stored as a real .html attachment so it\n // travels the same rail as uploading that file — the agent reads it\n // verbatim via contentFromAttachment instead of retyping it inline,\n // which cuts off mid-stream on large files and triggers a spin.\n if (shouldConvertClipboardToAttachment(paste)) {\n event.preventDefault();\n void composerRuntime\n .addAttachment(createPastedAttachmentFile(paste))\n .catch((error) => {\n const msg =\n error instanceof Error\n ? error.message\n : \"Could not attach the pasted text.\";\n onAttachmentErrorRef.current?.(msg);\n });\n return true;\n }\n\n return false;\n },\n handleDrop: (_view, event) => {\n // Drag-and-drop files (decks, images, PDFs, etc.) into the composer.\n // Mark handled drops as consumed so the chat-wide drop target does not\n // add the same file a second time.\n return handleComposerFileDrop({\n event: event as DragEvent,\n addAttachment: (file) => composerRuntime.addAttachment(file),\n onError: (error) => {\n const msg =\n error instanceof Error\n ? error.message\n : \"Could not attach the dropped file. Try a different format.\";\n onAttachmentErrorRef.current?.(msg);\n },\n });\n },\n handleKeyDown: (view, event) => {\n const pop = popoverStateRef.current;\n\n // Handle popover keyboard nav\n if (pop) {\n if (event.key === \"ArrowUp\") {\n event.preventDefault();\n popoverRef.current?.moveUp();\n return true;\n }\n if (event.key === \"ArrowDown\") {\n event.preventDefault();\n popoverRef.current?.moveDown();\n return true;\n }\n if (event.key === \"Enter\") {\n event.preventDefault();\n const idx = popoverRef.current?.getSelectedIndex() ?? 0;\n const currentCommands = filteredCommandsRef.current;\n const currentSkills = filteredSkillsRef.current;\n if (pop.type === \"@\") {\n const item = popoverRef.current?.getSelectedMention();\n if (item) selectMention(view, pop, item);\n } else if (pop.type === \"/\") {\n const cmd = popoverRef.current?.getSelectedCommand();\n if (cmd) {\n executeCommand(view, pop, cmd);\n } else {\n const skillIdx = idx - currentCommands.length;\n if (currentSkills[skillIdx]) {\n selectSkill(view, pop, currentSkills[skillIdx]);\n }\n }\n }\n return true;\n }\n if (event.key === \"Escape\") {\n event.preventDefault();\n popoverStateRef.current = null;\n setPopover(null);\n return true;\n }\n if (event.key === \" \" && pop.query === \"\") {\n popoverStateRef.current = null;\n setPopover(null);\n return false;\n }\n }\n\n // Backspace removes composer mode chip when editor is empty\n if (event.key === \"Backspace\" && composerModeRef.current) {\n const { from, to } = view.state.selection;\n if (\n view.state.doc.textContent.trim() === \"\" &&\n from === to &&\n from <= 1\n ) {\n setComposerMode(null);\n composerModeRef.current = null;\n return true;\n }\n }\n\n // Keyboard shortcut toggles Act/Plan mode from inside the editor.\n if (event.key === \"Tab\" && event.shiftKey) {\n event.preventDefault();\n const current = execModeRef.current;\n const cb = onExecModeChangeRef.current;\n if (current && cb) {\n const next = current === \"build\" ? \"plan\" : \"build\";\n if (next !== \"plan\" || !planModeDisabledRef.current) {\n cb(next);\n }\n }\n return true;\n }\n\n // Submit on Enter. Shift+Enter inserts a newline and keeps the\n // composer scrolled to the caret.\n // Cmd+Enter on macOS / Ctrl+Enter elsewhere marks the submit queued.\n if (event.key === \"Enter\" && event.shiftKey) {\n event.preventDefault();\n return insertComposerHardBreakAndScrollIntoView(view);\n }\n\n const submitIntent = getComposerSubmitIntentForEnterKey(event, isMac);\n if (submitIntent) {\n event.preventDefault();\n submitComposer(submitIntent);\n return true;\n }\n\n // Detect @ trigger — only when preceded by start-of-text, space, or newline\n // (not after alphanumeric chars, which would indicate an email address)\n if (event.key === \"@\") {\n const { from } = view.state.selection;\n const textBefore = view.state.doc.textBetween(\n Math.max(0, from - 1),\n from,\n );\n if (from === 1 || textBefore === \"\" || /\\s/.test(textBefore)) {\n const coords = view.coordsAtPos(from);\n setTimeout(() => {\n const state: PopoverState = {\n type: \"@\",\n position: { top: coords.top, left: coords.left },\n startPos: view.state.selection.from,\n query: \"\",\n };\n popoverStateRef.current = state;\n setPopover(state);\n }, 0);\n }\n return false;\n }\n\n // Detect / trigger (only at start of line or after whitespace)\n if (event.key === \"/\") {\n const { from } = view.state.selection;\n const textBefore = view.state.doc.textBetween(\n Math.max(0, from - 1),\n from,\n );\n if (from === 1 || textBefore === \"\" || /\\s/.test(textBefore)) {\n const coords = view.coordsAtPos(from);\n setTimeout(() => {\n const state: PopoverState = {\n type: \"/\",\n position: { top: coords.top, left: coords.left },\n startPos: view.state.selection.from,\n query: \"\",\n };\n popoverStateRef.current = state;\n setPopover(state);\n }, 0);\n }\n return false;\n }\n\n return false;\n },\n },\n });\n\n useImperativeHandle(focusRef, () => ({\n focus() {\n editor?.commands.focus(\"end\");\n },\n setText(text: string) {\n if (!editor) return;\n editor.commands.setContent(plainTextToDoc(text));\n editor.commands.focus(\"end\");\n const trimmed = editor.state.doc.textContent.trim();\n setEditorHasText(trimmed.length > 0);\n composerRuntime.setText(trimmed);\n onTextChangeRef.current?.(trimmed);\n try {\n if (trimmed) {\n localStorage.setItem(draftKey, editor.getHTML());\n } else {\n localStorage.removeItem(draftKey);\n }\n } catch {}\n },\n }));\n\n const handleSelectMode = useCallback(\n (mode: ComposerMode) => {\n setComposerMode(mode);\n composerModeRef.current = mode;\n setTimeout(() => editor?.commands.focus(\"end\"), 50);\n },\n [editor],\n );\n\n // --- Live voice transcription: text appears in the editor as the user speaks ---\n const voiceAnchorRef = useRef<number | null>(null);\n const prevVoiceInsertRef = useRef(\"\");\n\n const handleLiveUpdate = useCallback(\n (finalText: string, interimText: string) => {\n const ed = editor;\n if (!ed) return;\n\n if (voiceAnchorRef.current == null) {\n const { from } = ed.state.selection;\n const prevChar =\n from > 1 ? ed.state.doc.textBetween(from - 1, from) : \"\";\n if (prevChar && !/\\s/.test(prevChar)) {\n ed.chain().insertContent(\" \").run();\n }\n voiceAnchorRef.current = ed.state.selection.from;\n prevVoiceInsertRef.current = \"\";\n }\n\n const anchor = voiceAnchorRef.current;\n const prevLen = prevVoiceInsertRef.current.length;\n const newText = finalText + interimText;\n\n if (newText === prevVoiceInsertRef.current) return;\n\n ed.chain()\n .deleteRange({ from: anchor, to: anchor + prevLen })\n .insertContentAt(anchor, newText)\n .run();\n\n prevVoiceInsertRef.current = newText;\n },\n [editor],\n );\n\n const insertTranscript = useCallback(\n (text: string) => {\n const ed = editor;\n if (!ed) return;\n\n const anchor = voiceAnchorRef.current;\n if (anchor != null) {\n const prevLen = prevVoiceInsertRef.current.length;\n if (text) {\n ed.chain()\n .focus()\n .deleteRange({ from: anchor, to: anchor + prevLen })\n .insertContentAt(anchor, text + \" \")\n .run();\n } else if (prevLen > 0) {\n ed.chain()\n .deleteRange({ from: anchor, to: anchor + prevLen })\n .run();\n }\n voiceAnchorRef.current = null;\n prevVoiceInsertRef.current = \"\";\n } else if (text) {\n const { from } = ed.state.selection;\n const prevChar =\n from > 1 ? ed.state.doc.textBetween(from - 1, from) : \"\";\n const needsLead = prevChar && !/\\s/.test(prevChar);\n ed.chain()\n .focus()\n .insertContent((needsLead ? \" \" : \"\") + text + \" \")\n .run();\n }\n },\n [editor],\n );\n\n const voice = useVoiceDictation({\n onTranscript: insertTranscript,\n onLiveUpdate: handleLiveUpdate,\n });\n\n // Clean up live text if voice session ends without a final transcript (cancel/error)\n useEffect(() => {\n if (voice.state === \"idle\" && voiceAnchorRef.current != null) {\n const anchor = voiceAnchorRef.current;\n const prevLen = prevVoiceInsertRef.current.length;\n if (editor && prevLen > 0) {\n editor\n .chain()\n .deleteRange({ from: anchor, to: anchor + prevLen })\n .run();\n }\n voiceAnchorRef.current = null;\n prevVoiceInsertRef.current = \"\";\n }\n }, [voice.state, editor]);\n\n // Global shortcut: Cmd/Ctrl + Shift + M toggles dictation. Escape cancels\n // while recording. Scoped to avoid firing when focus is outside the app.\n useEffect(() => {\n if (!voiceEnabled || !voice.supported) return;\n const handler = (e: KeyboardEvent) => {\n // e.key can be undefined on some trusted keydown events (autofill/IME\n // quirks) — seen crashing in production (AGENT-NATIVE-BROWSER-S).\n const isToggleCombo =\n typeof e.key === \"string\" &&\n e.key.toLowerCase() === \"m\" &&\n e.shiftKey &&\n (e.metaKey || e.ctrlKey) &&\n !e.altKey;\n if (isToggleCombo) {\n e.preventDefault();\n if (voice.state === \"recording\" || voice.state === \"starting\") {\n voice.stop();\n } else if (voice.state !== \"transcribing\") {\n void voice.start();\n }\n return;\n }\n if (\n e.key === \"Escape\" &&\n (voice.state === \"recording\" || voice.state === \"starting\")\n ) {\n e.preventDefault();\n voice.cancel();\n }\n };\n window.addEventListener(\"keydown\", handler);\n return () => window.removeEventListener(\"keydown\", handler);\n }, [voiceEnabled, voice]);\n\n const extractComposerPayload = useCallback(() => {\n const ed = editor;\n if (!ed) {\n return { text: \"\", references: [] as Reference[] };\n }\n\n const references: Reference[] = [];\n\n // Build text that preserves @mentions (getText() strips them).\n // Walk the document and reconstruct with @name for mention/file/skill nodes.\n const textParts: string[] = [];\n ed.state.doc.descendants((node: any) => {\n if (node.isText) {\n textParts.push(node.text);\n } else if (node.type.name === \"mentionReference\") {\n textParts.push(`@[${node.attrs.label}|${node.attrs.icon || \"file\"}]`);\n } else if (node.type.name === \"fileReference\") {\n const label = node.attrs.path?.split(\"/\").pop() || node.attrs.path;\n textParts.push(`@[${label}|file]`);\n } else if (node.type.name === \"skillReference\") {\n textParts.push(`/${node.attrs.name}`);\n } else if (node.type.name === \"hardBreak\") {\n textParts.push(\"\\n\");\n } else if (\n node.type.name === \"paragraph\" &&\n textParts.length > 0 &&\n textParts[textParts.length - 1] !== \"\\n\"\n ) {\n textParts.push(\"\\n\");\n }\n });\n const text = textParts.join(\"\").trim();\n\n ed.state.doc.descendants((node: any) => {\n if (node.type.name === \"fileReference\") {\n // Legacy support\n references.push({\n type: \"file\",\n path: node.attrs.path,\n name: node.attrs.path?.split(\"/\").pop() || node.attrs.path,\n source: node.attrs.source || \"codebase\",\n });\n } else if (node.type.name === \"mentionReference\") {\n const refType = node.attrs.refType;\n references.push({\n type:\n refType === \"file\"\n ? \"file\"\n : refType === \"agent\"\n ? \"agent\"\n : refType === \"custom-agent\"\n ? \"custom-agent\"\n : \"mention\",\n path: node.attrs.refPath || \"\",\n name: node.attrs.label,\n source: node.attrs.source,\n refType: node.attrs.refType,\n refId: node.attrs.refId,\n });\n } else if (node.type.name === \"skillReference\") {\n references.push({\n type: \"skill\",\n path: node.attrs.path,\n name: node.attrs.name,\n source: node.attrs.source || \"codebase\",\n });\n }\n });\n\n return { text, references };\n }, [editor]);\n\n const syncComposerState = useCallback(() => {\n const { text, references } = extractComposerPayload();\n const requestMode =\n execMode === \"plan\" ? \"plan\" : execMode === \"build\" ? \"act\" : undefined;\n const custom: {\n references?: Reference[];\n requestMode?: \"act\" | \"plan\";\n } = {};\n if (references.length > 0) {\n custom.references = references;\n }\n if (requestMode) {\n custom.requestMode = requestMode;\n }\n composerRuntime.setText(text);\n composerRuntime.setRunConfig(\n Object.keys(custom).length > 0 ? { custom } : {},\n );\n return { text, references };\n }, [composerRuntime, execMode, extractComposerPayload]);\n\n const submitComposer = useCallback(\n (intent: ComposerSubmitIntent = \"immediate\") => {\n const ed = editor;\n if (!ed) return;\n\n const { text, references } = syncComposerState();\n const attachments = composerRuntime.getState().attachments;\n if (!text.trim() && references.length === 0 && attachments.length === 0)\n return;\n const cancelActiveVoice = () => {\n if (\n voice.state === \"recording\" ||\n voice.state === \"starting\" ||\n voice.state === \"transcribing\"\n ) {\n voice.cancel();\n }\n };\n\n // Intercept slash commands typed directly (e.g. \"/clear\" + Enter)\n const trimmed = text.trim();\n if (trimmed.startsWith(\"/\") && references.length === 0) {\n const cmdName = normalizeSlashCommandName(trimmed);\n const matched = allSlashCommands.find((c) => c.name === cmdName);\n if (matched) {\n ed.commands.clearContent();\n try {\n localStorage.removeItem(draftKey);\n } catch {}\n closePopover();\n onSlashCommandRef.current?.(matched.name);\n return;\n }\n }\n\n // Composer mode: send with context via agent chat bridge\n if (composerMode) {\n const config = COMPOSER_MODE_CONFIGS[composerMode];\n config.beforeSend?.();\n const message = displayableComposerModeMessage({\n messagePrefix: config.messagePrefix,\n trimmedText: trimmed,\n attachmentCount: attachments.length,\n });\n const modePrompt =\n trimmed ||\n (attachments.length > 0 ? \"Use the attached context.\" : \"\");\n if (attachments.length > 0) {\n composerRuntime.setText(\n `${message}\\n\\n<context>\\n${config.getContext(modePrompt)}\\n</context>`,\n );\n composerRuntime.send();\n } else {\n sendToAgentChat({\n message,\n context: config.getContext(modePrompt),\n mode:\n execMode === \"plan\"\n ? \"plan\"\n : execMode === \"build\"\n ? \"act\"\n : undefined,\n submit: true,\n });\n }\n cancelActiveVoice();\n ed.commands.clearContent();\n setEditorHasText(false);\n setComposerMode(null);\n composerModeRef.current = null;\n try {\n localStorage.removeItem(draftKey);\n } catch {}\n closePopover();\n return;\n }\n\n // Builder iframe delegation: when this app is mounted inside the\n // Builder.io webview and the user typed a \"build me an app/agent\"\n // prompt, hand it up to the parent Builder chat instead of sending\n // it to this app's domain agent. Builder is the code-writing agent;\n // the local agent (dispatch, mail, etc.) cannot scaffold workspace\n // apps from inside its own iframe.\n if (\n interceptBuildRequestsForBuilder &&\n tryDelegateBuildRequestToBuilder(trimmed)\n ) {\n cancelActiveVoice();\n ed.commands.clearContent();\n setEditorHasText(false);\n try {\n localStorage.removeItem(draftKey);\n } catch {}\n closePopover();\n return;\n }\n\n if (onSubmit) {\n onSubmit(text, references, attachments, { intent });\n // Clear any pending attachments now that the host has them.\n void composerRuntime.clearAttachments().catch(() => {});\n if (!clearOnSubmit) {\n closePopover();\n return;\n }\n } else {\n composerRuntime.send();\n }\n cancelActiveVoice();\n ed.commands.clearContent();\n setEditorHasText(false);\n try {\n localStorage.removeItem(draftKey);\n } catch {}\n closePopover();\n },\n [\n closePopover,\n composerMode,\n composerRuntime,\n editor,\n interceptBuildRequestsForBuilder,\n clearOnSubmit,\n onSubmit,\n syncComposerState,\n voice,\n allSlashCommands,\n ],\n );\n\n // Helper functions that operate on the editor view directly\n // These are called from handleKeyDown which can't use React state\n function selectMention(\n _view: any,\n pop: NonNullable<PopoverState>,\n item: MentionItem,\n ) {\n const ed = editor;\n if (!ed) return;\n const currentPos = ed.state.selection.from;\n // startPos is after the trigger char, so -1 to include the @ or /\n const deleteFrom = Math.max(0, pop.startPos - 1);\n ed.chain()\n .focus()\n .deleteRange({ from: deleteFrom, to: currentPos })\n .insertContent({\n type: \"mentionReference\",\n attrs: {\n label: item.label,\n icon: item.icon || \"file\",\n source: item.source,\n refType: item.refType,\n refId: item.refId || null,\n refPath: item.refPath || null,\n },\n })\n .insertContent(\" \")\n .run();\n popoverStateRef.current = null;\n setPopover(null);\n }\n\n function executeCommand(\n _view: any,\n pop: NonNullable<PopoverState>,\n command: SlashCommand,\n ) {\n const ed = editor;\n if (!ed) return;\n const currentPos = ed.state.selection.from;\n const deleteFrom = Math.max(0, pop.startPos - 1);\n ed.chain().focus().deleteRange({ from: deleteFrom, to: currentPos }).run();\n popoverStateRef.current = null;\n setPopover(null);\n onSlashCommandRef.current?.(command.name);\n }\n\n function selectSkill(\n _view: any,\n pop: NonNullable<PopoverState>,\n skill: SkillResult,\n ) {\n const ed = editor;\n if (!ed) return;\n const currentPos = ed.state.selection.from;\n const deleteFrom = Math.max(0, pop.startPos - 1);\n ed.chain()\n .focus()\n .deleteRange({ from: deleteFrom, to: currentPos })\n .insertContent({\n type: \"skillReference\",\n attrs: { name: skill.name, path: skill.path, source: skill.source },\n })\n .insertContent(\" \")\n .run();\n popoverStateRef.current = null;\n setPopover(null);\n }\n\n // Popover select handlers for click-based selection (from MentionPopover)\n const handleSelectMention = useCallback(\n (item: MentionItem) => {\n if (!editor || !popover) return;\n const currentPos = editor.state.selection.from;\n const deleteFrom = Math.max(0, popover.startPos - 1);\n editor\n .chain()\n .focus()\n .deleteRange({ from: deleteFrom, to: currentPos })\n .insertContent({\n type: \"mentionReference\",\n attrs: {\n label: item.label,\n icon: item.icon || \"file\",\n source: item.source,\n refType: item.refType,\n refId: item.refId || null,\n refPath: item.refPath || null,\n },\n })\n .insertContent(\" \")\n .run();\n closePopover();\n },\n [editor, popover, closePopover],\n );\n\n const handleSelectCommand = useCallback(\n (command: SlashCommand) => {\n if (!editor || !popover) return;\n const currentPos = editor.state.selection.from;\n const deleteFrom = Math.max(0, popover.startPos - 1);\n editor\n .chain()\n .focus()\n .deleteRange({ from: deleteFrom, to: currentPos })\n .run();\n closePopover();\n onSlashCommand?.(command.name);\n },\n [editor, popover, closePopover, onSlashCommand],\n );\n\n const handleSelectSkill = useCallback(\n (skill: SkillResult) => {\n if (!editor || !popover) return;\n const currentPos = editor.state.selection.from;\n const deleteFrom = Math.max(0, popover.startPos - 1);\n editor\n .chain()\n .focus()\n .deleteRange({ from: deleteFrom, to: currentPos })\n .insertContent({\n type: \"skillReference\",\n attrs: { name: skill.name, path: skill.path, source: skill.source },\n })\n .insertContent(\" \")\n .run();\n closePopover();\n },\n [editor, popover, closePopover],\n );\n\n // Track query text as user types after trigger\n useEffect(() => {\n if (!editor || !popover) return;\n\n const updateHandler = () => {\n syncComposerState();\n\n const pop = popoverStateRef.current;\n if (!pop) return;\n const { from } = editor.state.selection;\n const { startPos, type } = pop;\n\n if (from < startPos) {\n closePopover();\n return;\n }\n\n const text = editor.state.doc.textBetween(startPos, from);\n\n // Verify the trigger character is still there\n if (startPos > 0) {\n const triggerChar = editor.state.doc.textBetween(\n startPos - 1,\n startPos,\n );\n if (\n (type === \"@\" && triggerChar !== \"@\") ||\n (type === \"/\" && triggerChar !== \"/\")\n ) {\n closePopover();\n return;\n }\n }\n\n const updated = { ...pop, query: text };\n popoverStateRef.current = updated;\n setPopover(updated);\n };\n\n editor.on(\"update\", updateHandler);\n editor.on(\"selectionUpdate\", updateHandler);\n return () => {\n editor.off(\"update\", updateHandler);\n editor.off(\"selectionUpdate\", updateHandler);\n };\n }, [editor, popover, closePopover, syncComposerState]);\n\n useEffect(() => {\n if (!editor) return;\n if (composerText !== \"\") return;\n if (editor.isEmpty) return;\n editor.commands.clearContent();\n }, [composerText, editor]);\n\n useEffect(() => {\n if (!editor || initialText === undefined) return;\n const key = initialTextKey ?? initialText;\n if (initialTextKeyRef.current === key) return;\n initialTextKeyRef.current = key;\n editor.commands.setContent(plainTextToDoc(initialText));\n editor.commands.focus(\"end\");\n const trimmed = editor.state.doc.textContent.trim();\n setEditorHasText(trimmed.length > 0);\n composerRuntime.setText(trimmed);\n onTextChangeRef.current?.(trimmed);\n try {\n if (trimmed) {\n localStorage.setItem(draftKey, editor.getHTML());\n } else {\n localStorage.removeItem(draftKey);\n }\n } catch {}\n }, [composerRuntime, draftKey, editor, initialText, initialTextKey]);\n\n // Tiptap only reads `editable` at init; prop changes need setEditable.\n useEffect(() => {\n if (!editor) return;\n editor.setEditable(!disabled);\n if (disabled) editor.commands.blur();\n }, [editor, disabled]);\n\n return (\n <>\n <style>{`\n .aui-composer .ProseMirror p.is-editor-empty:first-child::before {\n content: attr(data-placeholder);\n color: var(--color-muted-foreground);\n opacity: 0.5;\n float: left;\n height: 0;\n pointer-events: none;\n }\n `}</style>\n {composerMode && (\n <div\n data-agent-composer-variant={layoutVariant}\n data-agent-composer-slot=\"mode-row\"\n className=\"agent-composer-mode-row px-2.5 pt-2 pb-0\"\n >\n <ComposerModeChip\n mode={composerMode}\n onRemove={() => {\n setComposerMode(null);\n composerModeRef.current = null;\n editor?.commands.focus(\"end\");\n }}\n />\n </div>\n )}\n {hasContextItems && (\n <div\n data-agent-composer-variant={layoutVariant}\n data-agent-composer-slot=\"context-row\"\n className=\"agent-composer-context-row flex flex-wrap gap-1.5 px-2.5 pt-2 pb-0\"\n >\n {contextItems.map((item) => (\n <span\n key={item.key}\n className=\"inline-flex max-w-full items-center gap-1.5 rounded-md border border-border bg-muted/50 px-2 py-1 text-[11px] font-medium text-foreground\"\n >\n <IconClipboardList className=\"h-3 w-3 shrink-0 text-muted-foreground\" />\n <span className=\"min-w-0 truncate\">{item.title}</span>\n <button\n type=\"button\"\n onClick={() => onRemoveContextItem?.(item.key)}\n aria-label={`Remove ${item.title} context`}\n className=\"ml-0.5 flex h-4 w-4 shrink-0 items-center justify-center rounded text-muted-foreground hover:bg-accent hover:text-foreground\"\n >\n <IconX className=\"h-3 w-3\" />\n </button>\n </span>\n ))}\n </div>\n )}\n <div\n data-agent-composer-variant={layoutVariant}\n data-agent-composer-slot=\"editor-wrap\"\n className={`agent-composer-editor-wrap ${\n composerMode || hasContextItems ? \"px-2 pt-1 pb-1\" : \"px-2 pt-2 pb-1\"\n }`}\n >\n <EditorContent\n editor={editor}\n data-agent-composer-variant={layoutVariant}\n data-agent-composer-slot=\"editor\"\n className=\"agent-composer-editor aui-composer flex-1 min-w-0 [&_.ProseMirror]:outline-none [&_.ProseMirror_p]:m-0 px-0.5\"\n />\n </div>\n {voiceEnabled && <VoiceRecordingOverlay voice={voice} />}\n <div\n data-agent-composer-variant={layoutVariant}\n data-agent-composer-slot=\"toolbar\"\n className=\"agent-composer-toolbar flex items-center gap-1 px-2 py-1.5\"\n >\n {attachButton ??\n (plusMenuMode === \"hidden\" ? null : (\n <ComposerPlusMenu\n onSelectMode={handleSelectMode}\n mode={plusMenuMode}\n />\n ))}\n {toolbarSlot ?? modeControl}\n <div data-agent-composer-slot=\"toolbar-spacer\" className=\"flex-1\" />\n {selectedModel && availableModels && onModelChange && (\n <ModelSelector\n model={selectedModel}\n effort={selectedEffort}\n engines={availableModels}\n onChange={onModelChange}\n onEffortChange={onEffortChange}\n providerConnectStatusEnabled={providerConnectStatusEnabled}\n onConnectProvider={onConnectProvider}\n />\n )}\n {execMode && onExecModeChange && (\n <ModeSelector\n mode={execMode}\n onChange={onExecModeChange}\n planModeDisabled={planModeDisabled}\n planModeDisabledReason={planModeDisabledReason}\n />\n )}\n {actionButton ?? (\n <>\n {extraActionButton}\n {voiceEnabled && (\n <VoiceButton voice={voice} isMac={isMac} disabled={disabled} />\n )}\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n onClick={() => submitComposer(\"immediate\")}\n disabled={!canSend}\n data-agent-composer-slot=\"send-button\"\n className=\"agent-composer-send-button shrink-0 flex h-7 w-7 items-center justify-center rounded-md bg-primary text-primary-foreground hover:opacity-90 disabled:opacity-30 disabled:cursor-not-allowed\"\n >\n <IconArrowUp className=\"h-3.5 w-3.5\" />\n </button>\n </TooltipTrigger>\n <TooltipContent>Send message</TooltipContent>\n </Tooltip>\n </>\n )}\n </div>\n <MentionPopover\n ref={popoverRef}\n type={popover?.type ?? \"@\"}\n position={popover?.position ?? null}\n mentionItems={mentionItems}\n skills={filteredSkills}\n commands={filteredCommands}\n hint={hint}\n isLoading={popover?.type === \"@\" ? mentionsLoading : skillsLoading}\n query={popover?.query ?? \"\"}\n onSelectMention={handleSelectMention}\n onSelectSkill={handleSelectSkill}\n onSelectCommand={handleSelectCommand}\n onClose={closePopover}\n />\n </>\n );\n}\n"]}