entari-plugin-hyw 3.2.105__py3-none-any.whl → 3.5.0rc6__py3-none-any.whl

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 (95) hide show
  1. entari_plugin_hyw/__init__.py +120 -428
  2. entari_plugin_hyw/assets/card-dist/index.html +396 -0
  3. entari_plugin_hyw/assets/card-dist/logos/anthropic.svg +1 -0
  4. entari_plugin_hyw/assets/card-dist/logos/cerebras.svg +9 -0
  5. entari_plugin_hyw/assets/card-dist/logos/deepseek.png +0 -0
  6. entari_plugin_hyw/assets/card-dist/logos/gemini.svg +1 -0
  7. entari_plugin_hyw/assets/card-dist/logos/google.svg +1 -0
  8. entari_plugin_hyw/assets/card-dist/logos/grok.png +0 -0
  9. entari_plugin_hyw/assets/card-dist/logos/huggingface.png +0 -0
  10. entari_plugin_hyw/assets/card-dist/logos/microsoft.svg +15 -0
  11. entari_plugin_hyw/assets/card-dist/logos/minimax.png +0 -0
  12. entari_plugin_hyw/assets/card-dist/logos/mistral.png +0 -0
  13. entari_plugin_hyw/assets/card-dist/logos/nvida.png +0 -0
  14. entari_plugin_hyw/assets/card-dist/logos/openai.svg +1 -0
  15. entari_plugin_hyw/assets/card-dist/logos/openrouter.png +0 -0
  16. entari_plugin_hyw/assets/card-dist/logos/perplexity.svg +24 -0
  17. entari_plugin_hyw/assets/card-dist/logos/qwen.png +0 -0
  18. entari_plugin_hyw/assets/card-dist/logos/xai.png +0 -0
  19. entari_plugin_hyw/assets/card-dist/logos/xiaomi.png +0 -0
  20. entari_plugin_hyw/assets/card-dist/logos/zai.png +0 -0
  21. entari_plugin_hyw/assets/card-dist/vite.svg +1 -0
  22. entari_plugin_hyw/assets/icon/cerebras.svg +9 -0
  23. entari_plugin_hyw/assets/icon/huggingface.png +0 -0
  24. entari_plugin_hyw/assets/icon/xiaomi.png +0 -0
  25. entari_plugin_hyw/card-ui/.gitignore +24 -0
  26. entari_plugin_hyw/card-ui/README.md +5 -0
  27. entari_plugin_hyw/card-ui/index.html +16 -0
  28. entari_plugin_hyw/card-ui/package-lock.json +2342 -0
  29. entari_plugin_hyw/card-ui/package.json +31 -0
  30. entari_plugin_hyw/card-ui/public/logos/anthropic.svg +1 -0
  31. entari_plugin_hyw/card-ui/public/logos/cerebras.svg +9 -0
  32. entari_plugin_hyw/card-ui/public/logos/deepseek.png +0 -0
  33. entari_plugin_hyw/card-ui/public/logos/gemini.svg +1 -0
  34. entari_plugin_hyw/card-ui/public/logos/google.svg +1 -0
  35. entari_plugin_hyw/card-ui/public/logos/grok.png +0 -0
  36. entari_plugin_hyw/card-ui/public/logos/huggingface.png +0 -0
  37. entari_plugin_hyw/card-ui/public/logos/microsoft.svg +15 -0
  38. entari_plugin_hyw/card-ui/public/logos/minimax.png +0 -0
  39. entari_plugin_hyw/card-ui/public/logos/mistral.png +0 -0
  40. entari_plugin_hyw/card-ui/public/logos/nvida.png +0 -0
  41. entari_plugin_hyw/card-ui/public/logos/openai.svg +1 -0
  42. entari_plugin_hyw/card-ui/public/logos/openrouter.png +0 -0
  43. entari_plugin_hyw/card-ui/public/logos/perplexity.svg +24 -0
  44. entari_plugin_hyw/card-ui/public/logos/qwen.png +0 -0
  45. entari_plugin_hyw/card-ui/public/logos/xai.png +0 -0
  46. entari_plugin_hyw/card-ui/public/logos/xiaomi.png +0 -0
  47. entari_plugin_hyw/card-ui/public/logos/zai.png +0 -0
  48. entari_plugin_hyw/card-ui/public/vite.svg +1 -0
  49. entari_plugin_hyw/card-ui/src/App.vue +412 -0
  50. entari_plugin_hyw/card-ui/src/assets/vue.svg +1 -0
  51. entari_plugin_hyw/card-ui/src/components/HelloWorld.vue +41 -0
  52. entari_plugin_hyw/card-ui/src/components/MarkdownContent.vue +386 -0
  53. entari_plugin_hyw/card-ui/src/components/SectionCard.vue +41 -0
  54. entari_plugin_hyw/card-ui/src/components/StageCard.vue +237 -0
  55. entari_plugin_hyw/card-ui/src/main.ts +5 -0
  56. entari_plugin_hyw/card-ui/src/style.css +29 -0
  57. entari_plugin_hyw/card-ui/src/test_regex.js +103 -0
  58. entari_plugin_hyw/card-ui/src/types.ts +52 -0
  59. entari_plugin_hyw/card-ui/tsconfig.app.json +16 -0
  60. entari_plugin_hyw/card-ui/tsconfig.json +7 -0
  61. entari_plugin_hyw/card-ui/tsconfig.node.json +26 -0
  62. entari_plugin_hyw/card-ui/vite.config.ts +16 -0
  63. entari_plugin_hyw/{core/history.py → history.py} +25 -1
  64. entari_plugin_hyw/image_cache.py +274 -0
  65. entari_plugin_hyw/{utils/misc.py → misc.py} +38 -3
  66. entari_plugin_hyw/pipeline.py +1338 -0
  67. entari_plugin_hyw/prompts.py +108 -0
  68. entari_plugin_hyw/render_vue.py +314 -0
  69. entari_plugin_hyw/search.py +696 -0
  70. entari_plugin_hyw-3.5.0rc6.dist-info/METADATA +116 -0
  71. entari_plugin_hyw-3.5.0rc6.dist-info/RECORD +88 -0
  72. entari_plugin_hyw/assets/libs/highlight.css +0 -10
  73. entari_plugin_hyw/assets/libs/highlight.js +0 -1213
  74. entari_plugin_hyw/assets/libs/katex-auto-render.js +0 -1
  75. entari_plugin_hyw/assets/libs/katex.css +0 -1
  76. entari_plugin_hyw/assets/libs/katex.js +0 -1
  77. entari_plugin_hyw/assets/libs/tailwind.css +0 -1
  78. entari_plugin_hyw/assets/tailwind.config.js +0 -12
  79. entari_plugin_hyw/assets/tailwind.input.css +0 -235
  80. entari_plugin_hyw/assets/template.html +0 -157
  81. entari_plugin_hyw/core/__init__.py +0 -0
  82. entari_plugin_hyw/core/config.py +0 -36
  83. entari_plugin_hyw/core/hyw.py +0 -41
  84. entari_plugin_hyw/core/pipeline.py +0 -816
  85. entari_plugin_hyw/core/render.py +0 -926
  86. entari_plugin_hyw/utils/__init__.py +0 -3
  87. entari_plugin_hyw/utils/browser.py +0 -61
  88. entari_plugin_hyw/utils/mcp_playwright.py +0 -128
  89. entari_plugin_hyw/utils/playwright_tool.py +0 -46
  90. entari_plugin_hyw/utils/prompts.py +0 -91
  91. entari_plugin_hyw/utils/search.py +0 -193
  92. entari_plugin_hyw-3.2.105.dist-info/METADATA +0 -141
  93. entari_plugin_hyw-3.2.105.dist-info/RECORD +0 -42
  94. {entari_plugin_hyw-3.2.105.dist-info → entari_plugin_hyw-3.5.0rc6.dist-info}/WHEEL +0 -0
  95. {entari_plugin_hyw-3.2.105.dist-info → entari_plugin_hyw-3.5.0rc6.dist-info}/top_level.txt +0 -0
@@ -1 +0,0 @@
1
- *,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }/*! tailwindcss v3.4.17 | MIT License | https://tailwindcss.com*/*,:after,:before{border:0 solid #e5e7eb;box-sizing:border-box}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-feature-settings:normal;font-variation-settings:normal;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-tap-highlight-color:transparent}body{line-height:inherit;margin:0}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace;font-feature-settings:normal;font-size:1em;font-variation-settings:normal}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}button,input,optgroup,select,textarea{color:inherit;font-family:inherit;font-feature-settings:inherit;font-size:100%;font-variation-settings:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{color:#9ca3af;opacity:1}input::placeholder,textarea::placeholder{color:#9ca3af;opacity:1}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}[hidden]:where(:not([hidden=until-found])){display:none}.visible{visibility:visible}.absolute{position:absolute}.relative{position:relative}.m-0{margin:0}.mx-auto{margin-left:auto;margin-right:auto}.my-4{margin-bottom:1rem;margin-top:1rem}.my-6{margin-bottom:1.5rem;margin-top:1.5rem}.\!mb-0{margin-bottom:0!important}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.ml-0\.5{margin-left:.125rem}.mt-0\.5{margin-top:.125rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-5{margin-top:1.25rem}.mt-6{margin-top:1.5rem}.box-border{box-sizing:border-box}.line-clamp-2{display:-webkit-box;overflow:hidden;-webkit-box-orient:vertical;-webkit-line-clamp:2}.block{display:block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-2{height:.5rem}.h-3{height:.75rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-auto{height:auto}.h-fit{height:-moz-fit-content;height:fit-content}.w-2{width:.5rem}.w-3{width:.75rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-fit{width:-moz-fit-content;width:fit-content}.w-full{width:100%}.min-w-0{min-width:0}.max-w-\[450px\]{max-width:450px}.max-w-\[60\%\]{max-width:60%}.flex-1{flex:1 1 0%}.flex-none{flex:none}.shrink-0{flex-shrink:0}.border-collapse{border-collapse:collapse}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.cursor-default{cursor:default}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-center{align-items:center}.items-baseline{align-items:baseline}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0{gap:0}.gap-0\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-2{gap:.5rem}.gap-2\.5{gap:.625rem}.gap-3{gap:.75rem}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.25rem*var(--tw-space-y-reverse));margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)))}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-hidden{overflow-y:hidden}.text-ellipsis{text-overflow:ellipsis}.whitespace-nowrap{white-space:nowrap}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:1rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-sm{border-radius:.125rem}.rounded-xl{border-radius:.75rem}.border{border-width:1px}.border-b{border-bottom-width:1px}.border-l-4{border-left-width:4px}.\!border-none{border-style:none!important}.border-blue-100{--tw-border-opacity:1;border-color:rgb(219 234 254/var(--tw-border-opacity,1))}.border-cyan-100{--tw-border-opacity:1;border-color:rgb(207 250 254/var(--tw-border-opacity,1))}.border-gray-100{--tw-border-opacity:1;border-color:rgb(243 244 246/var(--tw-border-opacity,1))}.border-gray-200{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity,1))}.border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity,1))}.border-green-100{--tw-border-opacity:1;border-color:rgb(220 252 231/var(--tw-border-opacity,1))}.border-orange-100{--tw-border-opacity:1;border-color:rgb(255 237 213/var(--tw-border-opacity,1))}.border-pink-100{--tw-border-opacity:1;border-color:rgb(252 231 243/var(--tw-border-opacity,1))}.border-purple-100{--tw-border-opacity:1;border-color:rgb(243 232 255/var(--tw-border-opacity,1))}.\!bg-transparent{background-color:transparent!important}.bg-\[\#f2f2f2\]{--tw-bg-opacity:1;background-color:rgb(242 242 242/var(--tw-bg-opacity,1))}.bg-blue-50{--tw-bg-opacity:1;background-color:rgb(239 246 255/var(--tw-bg-opacity,1))}.bg-cyan-50{--tw-bg-opacity:1;background-color:rgb(236 254 255/var(--tw-bg-opacity,1))}.bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.bg-gray-400{--tw-bg-opacity:1;background-color:rgb(156 163 175/var(--tw-bg-opacity,1))}.bg-gray-50{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.bg-green-400{--tw-bg-opacity:1;background-color:rgb(74 222 128/var(--tw-bg-opacity,1))}.bg-green-50{--tw-bg-opacity:1;background-color:rgb(240 253 244/var(--tw-bg-opacity,1))}.bg-orange-50{--tw-bg-opacity:1;background-color:rgb(255 247 237/var(--tw-bg-opacity,1))}.bg-pink-50{--tw-bg-opacity:1;background-color:rgb(253 242 248/var(--tw-bg-opacity,1))}.bg-pink-500{--tw-bg-opacity:1;background-color:rgb(236 72 153/var(--tw-bg-opacity,1))}.bg-purple-400{--tw-bg-opacity:1;background-color:rgb(192 132 252/var(--tw-bg-opacity,1))}.bg-purple-50{--tw-bg-opacity:1;background-color:rgb(250 245 255/var(--tw-bg-opacity,1))}.bg-rose-50{--tw-bg-opacity:1;background-color:rgb(255 241 242/var(--tw-bg-opacity,1))}.bg-transparent{background-color:transparent}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.bg-white\/60{background-color:hsla(0,0%,100%,.6)}.bg-white\/80{background-color:hsla(0,0%,100%,.8)}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.from-pink-300{--tw-gradient-from:#f9a8d4 var(--tw-gradient-from-position);--tw-gradient-to:rgba(249,168,212,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.to-pink-200{--tw-gradient-to:#fbcfe8 var(--tw-gradient-to-position)}.object-contain{-o-object-fit:contain;object-fit:contain}.\!p-0{padding:0!important}.p-0{padding:0}.p-2\.5{padding:.625rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3\.5{padding-left:.875rem;padding-right:.875rem}.px-4{padding-left:1rem;padding-right:1rem}.py-0\.5{padding-bottom:.125rem;padding-top:.125rem}.py-1{padding-bottom:.25rem;padding-top:.25rem}.py-2{padding-bottom:.5rem;padding-top:.5rem}.py-2\.5{padding-bottom:.625rem;padding-top:.625rem}.\!pb-0{padding-bottom:0!important}.pb-3{padding-bottom:.75rem}.pl-4{padding-left:1rem}.pl-5{padding-left:1.25rem}.pl-7{padding-left:1.75rem}.pr-2{padding-right:.5rem}.text-left{text-align:left}.font-mono{font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace}.font-sans{font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.text-2xl{font-size:1.5rem;line-height:2rem}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[12px\]{font-size:12px}.text-\[13px\]{font-size:13px}.text-\[15px\]{font-size:15px}.text-\[9px\]{font-size:9px}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.lowercase{text-transform:lowercase}.italic{font-style:italic}.leading-7{line-height:1.75rem}.leading-normal{line-height:1.5}.leading-relaxed{line-height:1.625}.tracking-wide{letter-spacing:.025em}.text-blue-600{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity,1))}.text-blue-700{--tw-text-opacity:1;color:rgb(29 78 216/var(--tw-text-opacity,1))}.text-cyan-600{--tw-text-opacity:1;color:rgb(8 145 178/var(--tw-text-opacity,1))}.text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}.text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.text-gray-800{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity,1))}.text-gray-900{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.text-green-600{--tw-text-opacity:1;color:rgb(22 163 74/var(--tw-text-opacity,1))}.text-inherit{color:inherit}.text-orange-600{--tw-text-opacity:1;color:rgb(234 88 12/var(--tw-text-opacity,1))}.text-pink-500{--tw-text-opacity:1;color:rgb(236 72 153/var(--tw-text-opacity,1))}.text-pink-600{--tw-text-opacity:1;color:rgb(219 39 119/var(--tw-text-opacity,1))}.text-pink-700{--tw-text-opacity:1;color:rgb(190 24 93/var(--tw-text-opacity,1))}.text-purple-600{--tw-text-opacity:1;color:rgb(147 51 234/var(--tw-text-opacity,1))}.text-rose-600{--tw-text-opacity:1;color:rgb(225 29 72/var(--tw-text-opacity,1))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.underline{text-decoration-line:underline}.no-underline{text-decoration-line:none}.decoration-pink-300{text-decoration-color:#f9a8d4}.underline-offset-2{text-underline-offset:2px}.\!shadow-none{--tw-shadow:0 0 #0000!important;--tw-shadow-colored:0 0 #0000!important;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)!important}.shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.backdrop-blur-sm{--tw-backdrop-blur:blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-all{transition-duration:.15s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-colors{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-shadow{transition-duration:.15s;transition-property:box-shadow;transition-timing-function:cubic-bezier(.4,0,.2,1)}pre::-webkit-scrollbar{background-color:transparent;height:8px}pre::-webkit-scrollbar-thumb{background-color:hsla(0,0%,100%,.2);border-radius:4px}.markdown-body h1{border-bottom-width:1px;margin-bottom:1rem;margin-top:1.5rem;--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity,1));font-size:1.5rem;font-weight:700;line-height:2rem;padding-bottom:.5rem;--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity,1))}.markdown-body h2{font-size:1.25rem;margin-bottom:.75rem;margin-top:1.25rem}.markdown-body h2,.markdown-body h3{font-weight:700;line-height:1.75rem;--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity,1))}.markdown-body h3{font-size:1.125rem;margin-bottom:.5rem;margin-top:1rem}.markdown-body h4{font-size:1rem;font-weight:700;line-height:1.5rem;margin-bottom:.5rem;margin-top:.75rem;--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity,1))}.markdown-body p{line-height:1.75rem;margin-bottom:1rem;--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.markdown-body ul{list-style-type:disc;margin-bottom:1rem}.markdown-body ul>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.25rem*var(--tw-space-y-reverse));margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)))}.markdown-body ul{padding-left:1.25rem;--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.markdown-body ol{list-style-type:decimal;margin-bottom:1rem}.markdown-body ol>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.25rem*var(--tw-space-y-reverse));margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)))}.markdown-body ol{padding-left:1.25rem;--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.markdown-body li{padding-left:.25rem}.markdown-body li>p{margin-bottom:.25rem}.markdown-body a{--tw-text-opacity:1;color:rgb(219 39 119/var(--tw-text-opacity,1));text-decoration-color:#f9a8d4;text-decoration-line:underline;text-underline-offset:2px;transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.markdown-body a:hover{--tw-text-opacity:1;color:rgb(190 24 93/var(--tw-text-opacity,1));text-decoration-color:#be185d}.markdown-body blockquote{border-bottom-right-radius:.25rem;border-left-width:4px;border-top-right-radius:.25rem;margin-bottom:1rem;margin-top:1rem;--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity,1));--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1));font-style:italic;padding:.5rem .5rem .5rem 1rem;--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}.hljs-built_in,.hljs-keyword,.hljs-name,.hljs-selector-tag,.hljs-tag{color:#db2777!important}.hljs-addition,.hljs-attribute,.hljs-literal,.hljs-section,.hljs-string,.hljs-template-tag,.hljs-template-variable,.hljs-title,.hljs-type{color:#d97706!important}.hljs-comment,.hljs-deletion,.hljs-meta,.hljs-quote{color:#9ca3af!important}.hljs-bullet,.hljs-number,.hljs-symbol{color:#ea580c!important}.hljs-doctag,.hljs-keyword,.hljs-literal,.hljs-name,.hljs-section,.hljs-selector-tag,.hljs-strong,.hljs-title,.hljs-type{font-weight:700}.markdown-body code{border-radius:.25rem;--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1));font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace;font-size:.875rem;line-height:1.25rem;padding:.125rem .375rem;--tw-text-opacity:1;color:rgb(219 39 119/var(--tw-text-opacity,1))}.markdown-body pre{border-radius:.5rem;border-width:1px;margin-bottom:1rem;overflow-x:auto;--tw-border-opacity:1;border-color:rgb(243 244 246/var(--tw-border-opacity,1));--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1));font-size:.875rem;line-height:1.25rem;line-height:1.5;padding:1rem;--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.markdown-body pre code{background-color:transparent;border-style:none;padding:0;--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity,1))}.markdown-body img{border-radius:.5rem;border-width:1px;height:auto;margin-bottom:1rem;margin-top:1rem;max-width:60%;--tw-border-opacity:1;border-color:rgb(243 244 246/var(--tw-border-opacity,1));--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.markdown-body table{border-collapse:collapse;font-size:.875rem;line-height:1.25rem;margin-bottom:1rem;width:100%}.markdown-body th{--tw-border-opacity:1;--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1));font-weight:600;text-align:left;--tw-text-opacity:1}.markdown-body td,.markdown-body th{border-color:rgb(209 213 219/var(--tw-border-opacity,1));border-width:1px;color:rgb(55 65 81/var(--tw-text-opacity,1));padding:.5rem 1rem}.markdown-body td{--tw-border-opacity:1;--tw-text-opacity:1}.markdown-body hr{margin-bottom:1.5rem;margin-top:1.5rem;--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity,1))}.markdown-body>:last-child{margin-bottom:0}.katex-display{overflow-x:auto;overflow-y:hidden;padding-bottom:.5rem;padding-top:.5rem}.mermaid{border-radius:.5rem;border-width:1px;display:flex;justify-content:center;margin-bottom:1rem;margin-top:1rem;--tw-border-opacity:1;border-color:rgb(243 244 246/var(--tw-border-opacity,1));--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1));padding:1rem}.citation-ref{align-items:center;background-color:#fdf2f8;border:1px solid #fce7f3;border-radius:9999px;box-shadow:none!important;color:#db2777;cursor:pointer;display:inline-flex;font-size:.75em;font-weight:700;height:1.4em;justify-content:center;line-height:1;margin-left:2px;position:relative;text-decoration:none!important;transition:all .2s;vertical-align:super;width:1.4em}.citation-ref:hover{background-color:#db2777;color:#fff;text-decoration:none!important}.citation-tooltip{background:#fff;border:1px solid #e5e7eb;border-radius:8px;bottom:100%;box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06);color:#374151;font-size:12px;font-weight:400;left:50%;line-height:1.4;margin-bottom:8px;max-width:300px;opacity:0;padding:8px 12px;pointer-events:none;position:absolute;text-align:left;transform:translateX(-50%);transition:all .2s;visibility:hidden;width:-moz-max-content;width:max-content;z-index:50}.citation-ref:hover .citation-tooltip{opacity:1;transform:translateX(-50%) translateY(-4px);visibility:visible}.citation-tooltip-title{color:#111827;display:block;font-weight:600;margin-bottom:2px;max-width:280px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.citation-tooltip-url{align-items:center;color:#6b7280;display:flex;font-size:10px;gap:4px}.hover\:bg-gray-50:hover{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.hover\:text-pink-700:hover{--tw-text-opacity:1;color:rgb(190 24 93/var(--tw-text-opacity,1))}.hover\:decoration-pink-700:hover{text-decoration-color:#be185d}.hover\:shadow:hover{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.hover\:shadow-md:hover,.hover\:shadow:hover{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.hover\:shadow-md:hover{--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color)}
@@ -1,12 +0,0 @@
1
- module.exports = {
2
- content: ["./template.html", "../core/render.py"],
3
- theme: {
4
- extend: {
5
- fontFamily: {
6
- sans: ['Inter', '-apple-system', 'BlinkMacSystemFont', 'Segoe UI', 'Roboto', 'sans-serif'],
7
- mono: ['SFMono-Regular', 'Consolas', 'Liberation Mono', 'Menlo', 'monospace'],
8
- }
9
- }
10
- },
11
- plugins: [],
12
- }
@@ -1,235 +0,0 @@
1
- @tailwind base;
2
- @tailwind components;
3
- @tailwind utilities;
4
-
5
- /* Custom scrollbar for code blocks */
6
- pre::-webkit-scrollbar {
7
- height: 8px;
8
- background-color: transparent;
9
- }
10
-
11
- pre::-webkit-scrollbar-thumb {
12
- background-color: rgba(255, 255, 255, 0.2);
13
- border-radius: 4px;
14
- }
15
-
16
- /* Markdown Styles Override/Enhancement */
17
- .markdown-body h1 {
18
- @apply text-2xl font-bold mt-6 mb-4 text-gray-800 border-b border-gray-200 pb-2;
19
- }
20
-
21
- .markdown-body h2 {
22
- @apply text-xl font-bold mt-5 mb-3 text-gray-800;
23
- }
24
-
25
- .markdown-body h3 {
26
- @apply text-lg font-bold mt-4 mb-2 text-gray-800;
27
- }
28
-
29
- .markdown-body h4 {
30
- @apply text-base font-bold mt-3 mb-2 text-gray-800;
31
- }
32
-
33
- .markdown-body p {
34
- @apply mb-4 leading-7 text-gray-700;
35
- }
36
-
37
- .markdown-body ul {
38
- @apply list-disc pl-5 mb-4 space-y-1 text-gray-700;
39
- }
40
-
41
- .markdown-body ol {
42
- @apply list-decimal pl-5 mb-4 space-y-1 text-gray-700;
43
- }
44
-
45
- .markdown-body li {
46
- @apply pl-1;
47
- }
48
-
49
- .markdown-body li>p {
50
- @apply mb-1;
51
- }
52
-
53
- .markdown-body a {
54
- @apply text-pink-600 underline decoration-pink-300 underline-offset-2 hover:text-pink-700 hover:decoration-pink-700 transition-colors;
55
- }
56
-
57
- .markdown-body blockquote {
58
- @apply border-l-4 border-gray-300 pl-4 italic text-gray-600 my-4 bg-gray-50 py-2 pr-2 rounded-r;
59
- }
60
-
61
- /* Code Highlight Customization (Pink & Warm Theme) */
62
- .hljs-keyword,
63
- .hljs-selector-tag,
64
- .hljs-built_in,
65
- .hljs-name,
66
- .hljs-tag {
67
- color: #db2777 !important;
68
- }
69
-
70
- /* pink-600 */
71
- .hljs-string,
72
- .hljs-title,
73
- .hljs-section,
74
- .hljs-attribute,
75
- .hljs-literal,
76
- .hljs-template-tag,
77
- .hljs-template-variable,
78
- .hljs-type,
79
- .hljs-addition {
80
- color: #d97706 !important;
81
- }
82
-
83
- /* amber-600 */
84
- .hljs-comment,
85
- .hljs-quote,
86
- .hljs-deletion,
87
- .hljs-meta {
88
- color: #9ca3af !important;
89
- }
90
-
91
- /* gray-400 */
92
- .hljs-number,
93
- .hljs-symbol,
94
- .hljs-bullet {
95
- color: #ea580c !important;
96
- }
97
-
98
- /* orange-600 */
99
- .hljs-keyword,
100
- .hljs-selector-tag,
101
- .hljs-literal,
102
- .hljs-title,
103
- .hljs-section,
104
- .hljs-doctag,
105
- .hljs-type,
106
- .hljs-name,
107
- .hljs-strong {
108
- font-weight: bold;
109
- }
110
-
111
- .markdown-body code {
112
- @apply bg-gray-100 px-1.5 py-0.5 rounded text-sm font-mono text-pink-600;
113
- }
114
-
115
- .markdown-body pre {
116
- @apply bg-white p-4 rounded-lg overflow-x-auto mb-4 text-sm leading-normal border border-gray-100 shadow-sm;
117
- }
118
-
119
- .markdown-body pre code {
120
- @apply bg-transparent p-0 text-gray-800 border-none;
121
- }
122
-
123
- .markdown-body img {
124
- @apply max-w-[60%] h-auto rounded-lg my-4 shadow-sm border border-gray-100;
125
- }
126
-
127
- .markdown-body table {
128
- @apply w-full border-collapse mb-4 text-sm;
129
- }
130
-
131
- .markdown-body th {
132
- @apply border border-gray-300 px-4 py-2 bg-gray-50 font-semibold text-left text-gray-700;
133
- }
134
-
135
- .markdown-body td {
136
- @apply border border-gray-300 px-4 py-2 text-gray-700;
137
- }
138
-
139
- .markdown-body hr {
140
- @apply my-6 border-gray-200;
141
- }
142
-
143
- .markdown-body>*:last-child {
144
- @apply mb-0;
145
- }
146
-
147
- /* KaTeX adjustments */
148
- .katex-display {
149
- @apply overflow-x-auto overflow-y-hidden py-2;
150
- }
151
-
152
- /* Mermaid adjustments */
153
- .mermaid {
154
- @apply flex justify-center my-4 bg-gray-50 p-4 rounded-lg border border-gray-100;
155
- }
156
-
157
- /* Citation Styles */
158
- .citation-ref {
159
- display: inline-flex;
160
- align-items: center;
161
- justify-content: center;
162
- vertical-align: super;
163
- font-size: 0.75em;
164
- font-weight: bold;
165
- color: #db2777;
166
- background-color: #fdf2f8;
167
- border: 1px solid #fce7f3;
168
- border-radius: 9999px;
169
- width: 1.4em;
170
- height: 1.4em;
171
- margin-left: 2px;
172
- cursor: pointer;
173
- text-decoration: none !important;
174
- transition: all 0.2s;
175
- position: relative;
176
- line-height: 1;
177
- box-shadow: none !important;
178
- }
179
-
180
- .citation-ref:hover {
181
- background-color: #db2777;
182
- color: white;
183
- text-decoration: none !important;
184
- }
185
-
186
- .citation-tooltip {
187
- position: absolute;
188
- bottom: 100%;
189
- left: 50%;
190
- transform: translateX(-50%);
191
- margin-bottom: 8px;
192
- background: white;
193
- border: 1px solid #e5e7eb;
194
- box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
195
- border-radius: 8px;
196
- padding: 8px 12px;
197
- width: max-content;
198
- max-width: 300px;
199
- z-index: 50;
200
- opacity: 0;
201
- visibility: hidden;
202
- transition: all 0.2s;
203
- pointer-events: none;
204
- font-size: 12px;
205
- line-height: 1.4;
206
- color: #374151;
207
- text-align: left;
208
- font-weight: normal;
209
- }
210
-
211
- .citation-ref:hover .citation-tooltip {
212
- opacity: 1;
213
- visibility: visible;
214
- transform: translateX(-50%) translateY(-4px);
215
-
216
- }
217
-
218
- .citation-tooltip-title {
219
- font-weight: 600;
220
- color: #111827;
221
- margin-bottom: 2px;
222
- display: block;
223
- white-space: nowrap;
224
- overflow: hidden;
225
- text-overflow: ellipsis;
226
- max-width: 280px;
227
- }
228
-
229
- .citation-tooltip-url {
230
- color: #6b7280;
231
- font-size: 10px;
232
- display: flex;
233
- align-items: center;
234
- gap: 4px;
235
- }
@@ -1,157 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="zh-CN">
3
-
4
- <head>
5
- <meta charset="UTF-8">
6
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
7
- <title>Entari Render</title>
8
- <!-- @formatter:off -->
9
- <!-- prettier-ignore -->
10
- <!-- IMPORTANT: Asset placeholders MUST be {{ name }} on single line! -->
11
- <style>
12
- {
13
- {
14
- tailwind_css
15
- }
16
- }
17
- </style>
18
- <style>
19
- {
20
- {
21
- highlight_css
22
- }
23
- }
24
- </style>
25
- <script>{ { highlight_js } }</script>
26
- <style>
27
- {
28
- {
29
- katex_css
30
- }
31
- }
32
- </style>
33
- <script>{ { katex_js } }</script>
34
- <script>{ { katex_auto_render_js } }</script>
35
- <!-- @formatter:on -->
36
- <style>
37
- #markdown-content h1,
38
- #markdown-content h2,
39
- #markdown-content h3,
40
- #markdown-content h4,
41
- #markdown-content h5,
42
- #markdown-content h6 {
43
- color: #db2777;
44
- /* text-pink-600 */
45
- }
46
- </style>
47
- </head>
48
-
49
- <body class="bg-[#f2f2f2] p-0 box-border m-0 font-sans text-gray-800">
50
- <div id="main-container" class="w-full max-w-[450px] flex flex-col gap-4 mx-auto bg-[#f2f2f2] p-0 font-sans h-fit">
51
- <!-- Response Card (Content First) -->
52
- <div class="bg-[#f2f2f2] rounded-2xl p-5 overflow-hidden">
53
- <div id="markdown-content" class="markdown-body text-[15px] leading-relaxed text-gray-800">
54
- {{ content_html }}
55
- </div>
56
- </div>
57
-
58
-
59
-
60
- <!-- Speculation Card (Optional) -->
61
- {{ suggestions }}
62
-
63
- <!-- Model Header (Moved to Bottom) -->
64
- <div class="bg-[#f2f2f2] rounded-2xl p-5 overflow-hidden">
65
- {{ response_header }}
66
- <!-- Pipeline Stages -->
67
- {{ stages }}
68
- </div>
69
-
70
- <!-- Stats Footer -->
71
- {{ stats }}
72
- </div>
73
-
74
- <script>window.REFERENCES = {{ references_json }};</script>
75
-
76
- <script>
77
- document.addEventListener("DOMContentLoaded", () => {
78
- // Render Math (KaTeX)
79
- const contentDiv = document.getElementById("markdown-content");
80
- renderMathInElement(contentDiv, {
81
- delimiters: [
82
- { left: "$$", right: "$$", display: true },
83
- { left: "$", right: "$", display: false },
84
- { left: "\\(", right: "\\)", display: false },
85
- { left: "\\[", right: "\\]", display: true }
86
- ],
87
- throwOnError: false
88
- });
89
-
90
- // Process Citations
91
- function processCitations(rootNode) {
92
- const walker = document.createTreeWalker(
93
- rootNode,
94
- NodeFilter.SHOW_TEXT,
95
- null,
96
- false
97
- );
98
-
99
- const nodesToReplace = [];
100
- let node;
101
- while (node = walker.nextNode()) {
102
- if (node.parentElement.tagName === "SCRIPT" || node.parentElement.tagName === "STYLE" || node.parentElement.tagName === "A") continue;
103
- if (/\[\d+\]/.test(node.nodeValue)) {
104
- nodesToReplace.push(node);
105
- }
106
- }
107
-
108
- nodesToReplace.forEach(textNode => {
109
- const fragment = document.createDocumentFragment();
110
- let lastIndex = 0;
111
- const text = textNode.nodeValue;
112
- const regex = /\[(\d+)\]/g;
113
- let match;
114
-
115
- while ((match = regex.exec(text)) !== null) {
116
- fragment.appendChild(document.createTextNode(text.substring(lastIndex, match.index)));
117
-
118
- const id = match[1];
119
- const ref = window.REFERENCES ? window.REFERENCES.find(r => r.id == id) : null;
120
-
121
- if (ref) {
122
- const span = document.createElement("span");
123
- const title = ref.title.replace(/"/g, "&quot;");
124
- const url = ref.url;
125
- let domain = "unknown";
126
- try { domain = new URL(url).hostname; } catch (e) { }
127
- const favicon = `https://www.google.com/s2/favicons?domain=${domain}&sz=32`;
128
-
129
- span.innerHTML = `<a href="${url}" target="_blank" class="citation-ref" data-id="${id}">
130
- ${id}
131
- <span class="citation-tooltip">
132
- <span class="citation-tooltip-title">${title}</span>
133
- <span class="citation-tooltip-url">
134
- <img src="${favicon}" style="width:12px;height:12px;vertical-align:middle;margin-right:4px;">
135
- ${domain}
136
- </span>
137
- </span>
138
- </a>`;
139
- fragment.appendChild(span.firstElementChild);
140
- } else {
141
- fragment.appendChild(document.createTextNode(match[0]));
142
- }
143
-
144
- lastIndex = regex.lastIndex;
145
- }
146
-
147
- fragment.appendChild(document.createTextNode(text.substring(lastIndex)));
148
- textNode.parentNode.replaceChild(fragment, textNode);
149
- });
150
- }
151
-
152
- processCitations(contentDiv);
153
- });
154
- </script>
155
- </body>
156
-
157
- </html>
File without changes
@@ -1,36 +0,0 @@
1
- from dataclasses import dataclass
2
- from typing import Optional, Dict, Any, List
3
-
4
- @dataclass
5
- class HYWConfig:
6
- api_key: str
7
- model_name: str
8
- vision_model_name: Optional[str] = None
9
- vision_api_key: Optional[str] = None
10
- vision_base_url: Optional[str] = None
11
- base_url: str = "https://openrouter.ai/api/v1"
12
- fusion_mode: bool = False
13
- save_conversation: bool = False
14
- headless: bool = True
15
- intruct_model_name: Optional[str] = None
16
- intruct_api_key: Optional[str] = None
17
- intruct_base_url: Optional[str] = None
18
- search_base_url: str = "https://duckduckgo.com/?q={query}&format=json&results_per_page={limit}"
19
- image_search_base_url: str = "https://duckduckgo.com/?q={query}&iax=images&ia=images&format=json&results_per_page={limit}"
20
- extra_body: Optional[Dict[str, Any]] = None
21
- temperature: float = 0.4
22
- max_turns: int = 10
23
- icon: str = "openai" # logo for primary model
24
- vision_icon: Optional[str] = None # logo for vision model (falls back to icon when absent)
25
- enable_browser_fallback: bool = False
26
- vision_system_prompt: Optional[str] = None
27
- intruct_system_prompt: Optional[str] = None
28
- agent_system_prompt: Optional[str] = None
29
- playwright_mcp_command: str = "npx"
30
- playwright_mcp_args: Optional[List[str]] = None
31
- input_price: Optional[float] = None # $ per 1M input tokens
32
- output_price: Optional[float] = None # $ per 1M output tokens
33
- vision_input_price: Optional[float] = None
34
- vision_output_price: Optional[float] = None
35
- intruct_input_price: Optional[float] = None
36
- intruct_output_price: Optional[float] = None
@@ -1,41 +0,0 @@
1
- from typing import Any, Dict, List, Optional
2
- from loguru import logger
3
- from .config import HYWConfig
4
- from .pipeline import ProcessingPipeline
5
-
6
- class HYW:
7
- """
8
- V2 Core Wrapper (Facade).
9
- Delegates all logic to ProcessingPipeline.
10
- Ensures safe lifecycle management.
11
- """
12
- def __init__(self, config: HYWConfig):
13
- self.config = config
14
- self.pipeline = ProcessingPipeline(config)
15
- logger.info(f"HYW V2 (Ironclad) initialized - Model: {config.model_name}")
16
-
17
- async def agent(self, user_input: str, conversation_history: List[Dict] = None, images: List[str] = None,
18
- selected_model: str = None, selected_vision_model: str = None, local_mode: bool = False) -> Dict[str, Any]:
19
- """
20
- Main entry point for the plugin (called by __init__.py).
21
- """
22
- # Note: 'images' handling is skipped for V2 initial stability MVP as per user focus on 'search hangs'.
23
- # We can re-integrate vision later, but for now we focus on Text/Search stability.
24
-
25
- # Delegate completely to pipeline
26
- result = await self.pipeline.execute(
27
- user_input,
28
- conversation_history or [],
29
- model_name=selected_model,
30
- images=images,
31
- selected_vision_model=selected_vision_model,
32
- )
33
- return result
34
-
35
- async def close(self):
36
- """Explicit async close method. NO __del__."""
37
- if self.pipeline:
38
- await self.pipeline.close()
39
-
40
- # Legacy Compatibility (optional attributes just to prevent blind attribute errors if referenced externally)
41
- # in V2 we strongly discourage accessing internal tools directly.