entari-plugin-hyw 4.0.0rc8__tar.gz → 4.0.0rc10__tar.gz
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.
Potentially problematic release.
This version of entari-plugin-hyw might be problematic. Click here for more details.
- {entari_plugin_hyw-4.0.0rc8/src/entari_plugin_hyw.egg-info → entari_plugin_hyw-4.0.0rc10}/PKG-INFO +1 -1
- {entari_plugin_hyw-4.0.0rc8 → entari_plugin_hyw-4.0.0rc10}/pyproject.toml +1 -1
- {entari_plugin_hyw-4.0.0rc8 → entari_plugin_hyw-4.0.0rc10}/src/entari_plugin_hyw/__init__.py +62 -34
- {entari_plugin_hyw-4.0.0rc8 → entari_plugin_hyw-4.0.0rc10/src/entari_plugin_hyw.egg-info}/PKG-INFO +1 -1
- {entari_plugin_hyw-4.0.0rc8 → entari_plugin_hyw-4.0.0rc10}/src/entari_plugin_hyw.egg-info/SOURCES.txt +3 -1
- {entari_plugin_hyw-4.0.0rc8 → entari_plugin_hyw-4.0.0rc10}/src/hyw_core/browser_control/__init__.py +1 -3
- entari_plugin_hyw-4.0.0rc10/src/hyw_core/browser_control/assets/card-dist/index.html +425 -0
- {entari_plugin_hyw-4.0.0rc8 → entari_plugin_hyw-4.0.0rc10}/src/hyw_core/browser_control/engines/__init__.py +0 -2
- {entari_plugin_hyw-4.0.0rc8 → entari_plugin_hyw-4.0.0rc10}/src/hyw_core/browser_control/manager.py +18 -5
- {entari_plugin_hyw-4.0.0rc8 → entari_plugin_hyw-4.0.0rc10}/src/hyw_core/browser_control/renderer.py +36 -6
- {entari_plugin_hyw-4.0.0rc8 → entari_plugin_hyw-4.0.0rc10}/src/hyw_core/browser_control/service.py +119 -52
- entari_plugin_hyw-4.0.0rc10/src/hyw_core/crawling/__init__.py +18 -0
- entari_plugin_hyw-4.0.0rc10/src/hyw_core/crawling/completeness.py +348 -0
- entari_plugin_hyw-4.0.0rc10/src/hyw_core/crawling/models.py +88 -0
- {entari_plugin_hyw-4.0.0rc8 → entari_plugin_hyw-4.0.0rc10}/src/hyw_core/search.py +4 -6
- entari_plugin_hyw-4.0.0rc8/src/hyw_core/browser_control/assets/card-dist/index.html +0 -409
- entari_plugin_hyw-4.0.0rc8/src/hyw_core/browser_control/engines/google.py +0 -155
- {entari_plugin_hyw-4.0.0rc8 → entari_plugin_hyw-4.0.0rc10}/MANIFEST.in +0 -0
- {entari_plugin_hyw-4.0.0rc8 → entari_plugin_hyw-4.0.0rc10}/README.md +0 -0
- {entari_plugin_hyw-4.0.0rc8 → entari_plugin_hyw-4.0.0rc10}/setup.cfg +0 -0
- {entari_plugin_hyw-4.0.0rc8 → entari_plugin_hyw-4.0.0rc10}/src/entari_plugin_hyw/Untitled-1 +0 -0
- {entari_plugin_hyw-4.0.0rc8 → entari_plugin_hyw-4.0.0rc10}/src/entari_plugin_hyw/history.py +0 -0
- {entari_plugin_hyw-4.0.0rc8 → entari_plugin_hyw-4.0.0rc10}/src/entari_plugin_hyw/misc.py +0 -0
- {entari_plugin_hyw-4.0.0rc8 → entari_plugin_hyw-4.0.0rc10}/src/entari_plugin_hyw/search_cache.py +0 -0
- {entari_plugin_hyw-4.0.0rc8 → entari_plugin_hyw-4.0.0rc10}/src/entari_plugin_hyw.egg-info/dependency_links.txt +0 -0
- {entari_plugin_hyw-4.0.0rc8 → entari_plugin_hyw-4.0.0rc10}/src/entari_plugin_hyw.egg-info/requires.txt +0 -0
- {entari_plugin_hyw-4.0.0rc8 → entari_plugin_hyw-4.0.0rc10}/src/entari_plugin_hyw.egg-info/top_level.txt +0 -0
- {entari_plugin_hyw-4.0.0rc8 → entari_plugin_hyw-4.0.0rc10}/src/hyw_core/__init__.py +0 -0
- {entari_plugin_hyw-4.0.0rc8 → entari_plugin_hyw-4.0.0rc10}/src/hyw_core/browser_control/assets/card-dist/logos/anthropic.svg +0 -0
- {entari_plugin_hyw-4.0.0rc8 → entari_plugin_hyw-4.0.0rc10}/src/hyw_core/browser_control/assets/card-dist/logos/cerebras.svg +0 -0
- {entari_plugin_hyw-4.0.0rc8 → entari_plugin_hyw-4.0.0rc10}/src/hyw_core/browser_control/assets/card-dist/logos/deepseek.png +0 -0
- {entari_plugin_hyw-4.0.0rc8 → entari_plugin_hyw-4.0.0rc10}/src/hyw_core/browser_control/assets/card-dist/logos/gemini.svg +0 -0
- {entari_plugin_hyw-4.0.0rc8 → entari_plugin_hyw-4.0.0rc10}/src/hyw_core/browser_control/assets/card-dist/logos/google.svg +0 -0
- {entari_plugin_hyw-4.0.0rc8 → entari_plugin_hyw-4.0.0rc10}/src/hyw_core/browser_control/assets/card-dist/logos/grok.png +0 -0
- {entari_plugin_hyw-4.0.0rc8 → entari_plugin_hyw-4.0.0rc10}/src/hyw_core/browser_control/assets/card-dist/logos/huggingface.png +0 -0
- {entari_plugin_hyw-4.0.0rc8 → entari_plugin_hyw-4.0.0rc10}/src/hyw_core/browser_control/assets/card-dist/logos/microsoft.svg +0 -0
- {entari_plugin_hyw-4.0.0rc8 → entari_plugin_hyw-4.0.0rc10}/src/hyw_core/browser_control/assets/card-dist/logos/minimax.png +0 -0
- {entari_plugin_hyw-4.0.0rc8 → entari_plugin_hyw-4.0.0rc10}/src/hyw_core/browser_control/assets/card-dist/logos/mistral.png +0 -0
- {entari_plugin_hyw-4.0.0rc8 → entari_plugin_hyw-4.0.0rc10}/src/hyw_core/browser_control/assets/card-dist/logos/nvida.png +0 -0
- {entari_plugin_hyw-4.0.0rc8 → entari_plugin_hyw-4.0.0rc10}/src/hyw_core/browser_control/assets/card-dist/logos/openai.svg +0 -0
- {entari_plugin_hyw-4.0.0rc8 → entari_plugin_hyw-4.0.0rc10}/src/hyw_core/browser_control/assets/card-dist/logos/openrouter.png +0 -0
- {entari_plugin_hyw-4.0.0rc8 → entari_plugin_hyw-4.0.0rc10}/src/hyw_core/browser_control/assets/card-dist/logos/perplexity.svg +0 -0
- {entari_plugin_hyw-4.0.0rc8 → entari_plugin_hyw-4.0.0rc10}/src/hyw_core/browser_control/assets/card-dist/logos/qwen.png +0 -0
- {entari_plugin_hyw-4.0.0rc8 → entari_plugin_hyw-4.0.0rc10}/src/hyw_core/browser_control/assets/card-dist/logos/xai.png +0 -0
- {entari_plugin_hyw-4.0.0rc8 → entari_plugin_hyw-4.0.0rc10}/src/hyw_core/browser_control/assets/card-dist/logos/xiaomi.png +0 -0
- {entari_plugin_hyw-4.0.0rc8 → entari_plugin_hyw-4.0.0rc10}/src/hyw_core/browser_control/assets/card-dist/logos/zai.png +0 -0
- {entari_plugin_hyw-4.0.0rc8 → entari_plugin_hyw-4.0.0rc10}/src/hyw_core/browser_control/assets/card-dist/vite.svg +0 -0
- {entari_plugin_hyw-4.0.0rc8 → entari_plugin_hyw-4.0.0rc10}/src/hyw_core/browser_control/assets/index.html +0 -0
- {entari_plugin_hyw-4.0.0rc8 → entari_plugin_hyw-4.0.0rc10}/src/hyw_core/browser_control/assets/logos/anthropic.svg +0 -0
- {entari_plugin_hyw-4.0.0rc8 → entari_plugin_hyw-4.0.0rc10}/src/hyw_core/browser_control/assets/logos/cerebras.svg +0 -0
- {entari_plugin_hyw-4.0.0rc8 → entari_plugin_hyw-4.0.0rc10}/src/hyw_core/browser_control/assets/logos/deepseek.png +0 -0
- {entari_plugin_hyw-4.0.0rc8 → entari_plugin_hyw-4.0.0rc10}/src/hyw_core/browser_control/assets/logos/gemini.svg +0 -0
- {entari_plugin_hyw-4.0.0rc8 → entari_plugin_hyw-4.0.0rc10}/src/hyw_core/browser_control/assets/logos/google.svg +0 -0
- {entari_plugin_hyw-4.0.0rc8 → entari_plugin_hyw-4.0.0rc10}/src/hyw_core/browser_control/assets/logos/grok.png +0 -0
- {entari_plugin_hyw-4.0.0rc8 → entari_plugin_hyw-4.0.0rc10}/src/hyw_core/browser_control/assets/logos/huggingface.png +0 -0
- {entari_plugin_hyw-4.0.0rc8 → entari_plugin_hyw-4.0.0rc10}/src/hyw_core/browser_control/assets/logos/microsoft.svg +0 -0
- {entari_plugin_hyw-4.0.0rc8 → entari_plugin_hyw-4.0.0rc10}/src/hyw_core/browser_control/assets/logos/minimax.png +0 -0
- {entari_plugin_hyw-4.0.0rc8 → entari_plugin_hyw-4.0.0rc10}/src/hyw_core/browser_control/assets/logos/mistral.png +0 -0
- {entari_plugin_hyw-4.0.0rc8 → entari_plugin_hyw-4.0.0rc10}/src/hyw_core/browser_control/assets/logos/nvida.png +0 -0
- {entari_plugin_hyw-4.0.0rc8 → entari_plugin_hyw-4.0.0rc10}/src/hyw_core/browser_control/assets/logos/openai.svg +0 -0
- {entari_plugin_hyw-4.0.0rc8 → entari_plugin_hyw-4.0.0rc10}/src/hyw_core/browser_control/assets/logos/openrouter.png +0 -0
- {entari_plugin_hyw-4.0.0rc8 → entari_plugin_hyw-4.0.0rc10}/src/hyw_core/browser_control/assets/logos/perplexity.svg +0 -0
- {entari_plugin_hyw-4.0.0rc8 → entari_plugin_hyw-4.0.0rc10}/src/hyw_core/browser_control/assets/logos/qwen.png +0 -0
- {entari_plugin_hyw-4.0.0rc8 → entari_plugin_hyw-4.0.0rc10}/src/hyw_core/browser_control/assets/logos/xai.png +0 -0
- {entari_plugin_hyw-4.0.0rc8 → entari_plugin_hyw-4.0.0rc10}/src/hyw_core/browser_control/assets/logos/xiaomi.png +0 -0
- {entari_plugin_hyw-4.0.0rc8 → entari_plugin_hyw-4.0.0rc10}/src/hyw_core/browser_control/assets/logos/zai.png +0 -0
- {entari_plugin_hyw-4.0.0rc8 → entari_plugin_hyw-4.0.0rc10}/src/hyw_core/browser_control/engines/base.py +0 -0
- {entari_plugin_hyw-4.0.0rc8 → entari_plugin_hyw-4.0.0rc10}/src/hyw_core/browser_control/engines/default.py +0 -0
- {entari_plugin_hyw-4.0.0rc8 → entari_plugin_hyw-4.0.0rc10}/src/hyw_core/browser_control/engines/duckduckgo.py +0 -0
- {entari_plugin_hyw-4.0.0rc8 → entari_plugin_hyw-4.0.0rc10}/src/hyw_core/browser_control/landing.html +0 -0
- {entari_plugin_hyw-4.0.0rc8 → entari_plugin_hyw-4.0.0rc10}/src/hyw_core/config.py +0 -0
- {entari_plugin_hyw-4.0.0rc8 → entari_plugin_hyw-4.0.0rc10}/src/hyw_core/core.py +0 -0
- {entari_plugin_hyw-4.0.0rc8 → entari_plugin_hyw-4.0.0rc10}/src/hyw_core/definitions.py +0 -0
- {entari_plugin_hyw-4.0.0rc8 → entari_plugin_hyw-4.0.0rc10}/src/hyw_core/image_cache.py +0 -0
- {entari_plugin_hyw-4.0.0rc8 → entari_plugin_hyw-4.0.0rc10}/src/hyw_core/pipeline.py +0 -0
- {entari_plugin_hyw-4.0.0rc8 → entari_plugin_hyw-4.0.0rc10}/src/hyw_core/stages/__init__.py +0 -0
- {entari_plugin_hyw-4.0.0rc8 → entari_plugin_hyw-4.0.0rc10}/src/hyw_core/stages/base.py +0 -0
- {entari_plugin_hyw-4.0.0rc8 → entari_plugin_hyw-4.0.0rc10}/src/hyw_core/stages/summary.py +0 -0
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "entari_plugin_hyw"
|
|
7
|
-
version = "4.0.0-
|
|
7
|
+
version = "4.0.0-rc10"
|
|
8
8
|
description = "Use large language models to interpret chat messages"
|
|
9
9
|
authors = [{name = "kumoSleeping", email = "zjr2992@outlook.com"}]
|
|
10
10
|
dependencies = [
|
{entari_plugin_hyw-4.0.0rc8 → entari_plugin_hyw-4.0.0rc10}/src/entari_plugin_hyw/__init__.py
RENAMED
|
@@ -162,6 +162,7 @@ class HywConfig(BasicConfModel):
|
|
|
162
162
|
admins: List[str] = field(default_factory=list)
|
|
163
163
|
models: List[Dict[str, Any]] = field(default_factory=list)
|
|
164
164
|
question_command: str = "/q"
|
|
165
|
+
web_command: str = "/w"
|
|
165
166
|
language: str = "Simplified Chinese"
|
|
166
167
|
temperature: float = 0.4
|
|
167
168
|
|
|
@@ -169,7 +170,7 @@ class HywConfig(BasicConfModel):
|
|
|
169
170
|
api_key: Optional[str] = None
|
|
170
171
|
base_url: str = "https://openrouter.ai/api/v1"
|
|
171
172
|
|
|
172
|
-
search_engine: str = "
|
|
173
|
+
search_engine: str = "duckduckgo"
|
|
173
174
|
|
|
174
175
|
headless: bool = False
|
|
175
176
|
save_conversation: bool = False
|
|
@@ -177,19 +178,14 @@ class HywConfig(BasicConfModel):
|
|
|
177
178
|
quote: bool = False
|
|
178
179
|
theme_color: str = "#ff0000"
|
|
179
180
|
|
|
180
|
-
#
|
|
181
|
+
# Main model configuration (used for summary/main LLM calls)
|
|
181
182
|
main: Optional[Dict[str, Any]] = None
|
|
182
|
-
instruct: Optional[Dict[str, Any]] = None
|
|
183
|
-
vision: Optional[Dict[str, Any]] = None
|
|
184
|
-
deepsearch_instruct: Optional[Dict[str, Any]] = None
|
|
185
|
-
deepsearch_agent: Optional[Dict[str, Any]] = None
|
|
186
183
|
|
|
187
184
|
def __post_init__(self):
|
|
188
185
|
self.theme_color = parse_color(self.theme_color)
|
|
189
186
|
|
|
190
187
|
def to_hyw_core_config(self) -> HywCoreConfig:
|
|
191
188
|
main_cfg = self.main or {}
|
|
192
|
-
instruct_cfg = self.instruct or {}
|
|
193
189
|
|
|
194
190
|
return HywCoreConfig.from_dict({
|
|
195
191
|
"models": self.models,
|
|
@@ -207,20 +203,7 @@ class HywConfig(BasicConfModel):
|
|
|
207
203
|
"summary_api_key": main_cfg.get("api_key"),
|
|
208
204
|
"summary_base_url": main_cfg.get("base_url"),
|
|
209
205
|
"summary_extra_body": main_cfg.get("extra_body"),
|
|
210
|
-
|
|
211
|
-
# Map nested 'instruct' config to instruct stage
|
|
212
|
-
"instruct_model": instruct_cfg.get("model_name"),
|
|
213
|
-
"instruct_api_key": instruct_cfg.get("api_key"),
|
|
214
|
-
"instruct_base_url": instruct_cfg.get("base_url"),
|
|
215
|
-
"instruct_extra_body": instruct_cfg.get("extra_body"),
|
|
216
206
|
})
|
|
217
|
-
|
|
218
|
-
def get_model_config(self, stage: str) -> Dict[str, Any]:
|
|
219
|
-
return {
|
|
220
|
-
"model_name": self.model_name,
|
|
221
|
-
"api_key": self.api_key,
|
|
222
|
-
"base_url": self.base_url,
|
|
223
|
-
}
|
|
224
207
|
|
|
225
208
|
|
|
226
209
|
conf = plugin_config(HywConfig)
|
|
@@ -690,7 +673,7 @@ async def handle_question_command(session: Session[MessageCreatedEvent], result:
|
|
|
690
673
|
|
|
691
674
|
|
|
692
675
|
# Search/Web Command (/w)
|
|
693
|
-
alc_search = Alconna(
|
|
676
|
+
alc_search = Alconna(conf.web_command, Args["query;?", AllParam])
|
|
694
677
|
|
|
695
678
|
@command.on(alc_search)
|
|
696
679
|
async def handle_web_command(session: Session[MessageCreatedEvent], result: Arparma):
|
|
@@ -756,6 +739,17 @@ async def handle_web_command(session: Session[MessageCreatedEvent], result: Arpa
|
|
|
756
739
|
|
|
757
740
|
search_cache.cleanup()
|
|
758
741
|
return
|
|
742
|
+
else:
|
|
743
|
+
# Reply to a non-cached message: append reply content to query
|
|
744
|
+
try:
|
|
745
|
+
# session.reply.origin.message is a list, wrap it in MessageChain
|
|
746
|
+
reply_msg = MessageChain(session.reply.origin.message)
|
|
747
|
+
reply_content = str(reply_msg.get(Text)).strip()
|
|
748
|
+
if reply_content:
|
|
749
|
+
query = f"{query} {reply_content}".strip() if query else reply_content
|
|
750
|
+
logger.info(f"/w appended reply content, new query: '{query}'")
|
|
751
|
+
except Exception as e:
|
|
752
|
+
logger.warning(f"/w failed to extract reply content: {e}")
|
|
759
753
|
|
|
760
754
|
# No query and no cache context - nothing to do
|
|
761
755
|
if not query:
|
|
@@ -805,8 +799,10 @@ async def handle_web_command(session: Session[MessageCreatedEvent], result: Arpa
|
|
|
805
799
|
await session.send(filter_error)
|
|
806
800
|
return
|
|
807
801
|
|
|
808
|
-
#
|
|
802
|
+
# Start search and tab pre-warming in parallel
|
|
803
|
+
local_renderer = await get_content_renderer()
|
|
809
804
|
search_task = asyncio.create_task(core.search([search_query]))
|
|
805
|
+
tab_task = asyncio.create_task(local_renderer.prepare_tab())
|
|
810
806
|
|
|
811
807
|
if conf.reaction:
|
|
812
808
|
asyncio.create_task(react(session, "🔍"))
|
|
@@ -815,17 +811,25 @@ async def handle_web_command(session: Session[MessageCreatedEvent], result: Arpa
|
|
|
815
811
|
flat_results = results[0] if results else []
|
|
816
812
|
|
|
817
813
|
if not flat_results:
|
|
814
|
+
try: await tab_task
|
|
815
|
+
except: pass
|
|
818
816
|
await session.send("Search returned no results.")
|
|
819
817
|
return
|
|
820
818
|
|
|
821
819
|
visible = [r for r in flat_results if not r.get("_hidden", False)]
|
|
822
820
|
|
|
823
821
|
if not visible:
|
|
822
|
+
try: await tab_task
|
|
823
|
+
except: pass
|
|
824
824
|
await session.send("Search returned no visible results.")
|
|
825
825
|
return
|
|
826
826
|
|
|
827
827
|
# === Filter Mode: Screenshot matching links ===
|
|
828
828
|
if filters:
|
|
829
|
+
# No need for tab in filter/screenshot mode, cancel it
|
|
830
|
+
try: await tab_task
|
|
831
|
+
except: pass
|
|
832
|
+
|
|
829
833
|
urls_to_screenshot = []
|
|
830
834
|
|
|
831
835
|
for filter_type, filter_value, count in filters:
|
|
@@ -881,20 +885,42 @@ async def handle_web_command(session: Session[MessageCreatedEvent], result: Arpa
|
|
|
881
885
|
await session.send("截图失败")
|
|
882
886
|
return
|
|
883
887
|
|
|
884
|
-
# === Normal Search Mode:
|
|
885
|
-
|
|
886
|
-
|
|
888
|
+
# === Normal Search Mode: Render search results as Sources card ===
|
|
889
|
+
|
|
890
|
+
# Build references from search results for Sources card
|
|
891
|
+
references = []
|
|
892
|
+
for i, res in enumerate(visible[:10]):
|
|
893
|
+
references.append({
|
|
894
|
+
"title": res.get("title", f"Result {i+1}"),
|
|
895
|
+
"url": res.get("url", ""),
|
|
896
|
+
"snippet": res.get("content", "") or res.get("snippet", ""),
|
|
897
|
+
"original_idx": i + 1,
|
|
898
|
+
})
|
|
887
899
|
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
900
|
+
try:
|
|
901
|
+
tab_id = await tab_task
|
|
902
|
+
except Exception:
|
|
903
|
+
tab_id = None
|
|
904
|
+
|
|
905
|
+
with tempfile.NamedTemporaryFile(suffix=".jpg", delete=False) as tf:
|
|
906
|
+
output_path = tf.name
|
|
893
907
|
|
|
894
|
-
|
|
908
|
+
# Render Sources card with search results (no markdown content, just references)
|
|
909
|
+
render_ok = await core.render(
|
|
910
|
+
markdown_content=f"# 搜索结果: {search_query}",
|
|
911
|
+
output_path=output_path,
|
|
912
|
+
stats={"total_time": 0},
|
|
913
|
+
references=references,
|
|
914
|
+
page_references=[],
|
|
915
|
+
stages_used=[{"name": "search", "description": f"搜索 \"{search_query}\"", "time": 0}],
|
|
916
|
+
tab_id=tab_id
|
|
917
|
+
)
|
|
895
918
|
|
|
896
|
-
if
|
|
897
|
-
|
|
919
|
+
if render_ok and os.path.exists(output_path):
|
|
920
|
+
with open(output_path, "rb") as f:
|
|
921
|
+
img_data = base64.b64encode(f.read()).decode()
|
|
922
|
+
|
|
923
|
+
msg_chain = MessageChain(Image(src=f'data:image/png;base64,{img_data}'))
|
|
898
924
|
if conf.quote:
|
|
899
925
|
msg_chain = MessageChain(Quote(session.event.message.id)) + msg_chain
|
|
900
926
|
|
|
@@ -909,8 +935,10 @@ async def handle_web_command(session: Session[MessageCreatedEvent], result: Arpa
|
|
|
909
935
|
mid = str(session.event.message.id) if getattr(session.event, "message", None) else str(session.event.id)
|
|
910
936
|
context_id = f"guild_{session.guild.id}" if session.guild else "user"
|
|
911
937
|
history_manager.remember(mid, [{"role": "user", "content": f"/w {query}"}], [], {}, context_id=context_id)
|
|
938
|
+
|
|
939
|
+
os.remove(output_path)
|
|
912
940
|
else:
|
|
913
|
-
await session.send(
|
|
941
|
+
await session.send("渲染搜索结果失败")
|
|
914
942
|
|
|
915
943
|
search_cache.cleanup() # Lazy cleanup
|
|
916
944
|
|
|
@@ -66,7 +66,9 @@ src/hyw_core/browser_control/engines/__init__.py
|
|
|
66
66
|
src/hyw_core/browser_control/engines/base.py
|
|
67
67
|
src/hyw_core/browser_control/engines/default.py
|
|
68
68
|
src/hyw_core/browser_control/engines/duckduckgo.py
|
|
69
|
-
src/hyw_core/
|
|
69
|
+
src/hyw_core/crawling/__init__.py
|
|
70
|
+
src/hyw_core/crawling/completeness.py
|
|
71
|
+
src/hyw_core/crawling/models.py
|
|
70
72
|
src/hyw_core/stages/__init__.py
|
|
71
73
|
src/hyw_core/stages/base.py
|
|
72
74
|
src/hyw_core/stages/summary.py
|
{entari_plugin_hyw-4.0.0rc8 → entari_plugin_hyw-4.0.0rc10}/src/hyw_core/browser_control/__init__.py
RENAMED
|
@@ -5,7 +5,7 @@ This subpackage provides:
|
|
|
5
5
|
- BrowserManager: Shared browser instance management
|
|
6
6
|
- PageService: Page fetching and screenshot capabilities
|
|
7
7
|
- RenderService: Vue-based card rendering
|
|
8
|
-
- Search engines:
|
|
8
|
+
- Search engines: DuckDuckGo adapter
|
|
9
9
|
"""
|
|
10
10
|
|
|
11
11
|
from .manager import (
|
|
@@ -28,7 +28,6 @@ from .renderer import (
|
|
|
28
28
|
)
|
|
29
29
|
|
|
30
30
|
from .engines.base import SearchEngine
|
|
31
|
-
from .engines.google import GoogleEngine
|
|
32
31
|
from .engines.duckduckgo import DuckDuckGoEngine
|
|
33
32
|
from .engines.default import DefaultEngine
|
|
34
33
|
|
|
@@ -59,7 +58,6 @@ __all__ = [
|
|
|
59
58
|
|
|
60
59
|
# Search Engines
|
|
61
60
|
"SearchEngine",
|
|
62
|
-
"GoogleEngine",
|
|
63
61
|
"DuckDuckGoEngine",
|
|
64
62
|
"DefaultEngine",
|
|
65
63
|
]
|