deepresearch-flow 0.7.1__tar.gz → 0.7.3__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.
- {deepresearch_flow-0.7.1/python/deepresearch_flow.egg-info → deepresearch_flow-0.7.3}/PKG-INFO +25 -6
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/README.md +24 -5
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/pyproject.toml +1 -1
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/snapshot/api.py +4 -3
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/snapshot/mcp_server.py +84 -45
- deepresearch_flow-0.7.3/python/deepresearch_flow/paper/snapshot/tests/test_mcp_server_schema_compat.py +184 -0
- deepresearch_flow-0.7.3/python/deepresearch_flow/paper/snapshot/tests/test_mcp_transport.py +52 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3/python/deepresearch_flow.egg-info}/PKG-INFO +25 -6
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow.egg-info/SOURCES.txt +2 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/LICENSE +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/MANIFEST.in +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/__init__.py +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/__main__.py +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/cli.py +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/__init__.py +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/cli.py +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/config.py +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/db.py +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/db_ops.py +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/extract.py +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/llm.py +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/prompt_templates/__init__.py +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/prompt_templates/deep_read_phi_system.j2 +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/prompt_templates/deep_read_phi_user.j2 +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/prompt_templates/deep_read_system.j2 +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/prompt_templates/deep_read_user.j2 +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/prompt_templates/eight_questions_phi_system.j2 +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/prompt_templates/eight_questions_phi_user.j2 +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/prompt_templates/eight_questions_system.j2 +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/prompt_templates/eight_questions_user.j2 +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/prompt_templates/simple_phi_system.j2 +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/prompt_templates/simple_phi_user.j2 +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/prompt_templates/simple_system.j2 +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/prompt_templates/simple_user.j2 +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/prompt_templates/three_pass_system.j2 +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/prompt_templates/three_pass_user.j2 +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/prompts.py +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/providers/__init__.py +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/providers/azure_openai.py +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/providers/base.py +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/providers/claude.py +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/providers/dashscope.py +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/providers/gemini.py +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/providers/ollama.py +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/providers/openai_compatible.py +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/render.py +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/schema.py +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/schemas/__init__.py +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/schemas/deep_read_phi_schema.json +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/schemas/deep_read_schema.json +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/schemas/default_paper_schema.json +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/schemas/eight_questions_schema.json +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/schemas/three_pass_schema.json +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/snapshot/__init__.py +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/snapshot/builder.py +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/snapshot/common.py +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/snapshot/identity.py +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/snapshot/schema.py +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/snapshot/tests/__init__.py +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/snapshot/tests/test_identity.py +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/snapshot/text.py +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/snapshot/unpacker.py +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/template_registry.py +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/templates/__init__.py +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/templates/deep_read.md.j2 +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/templates/deep_read_phi.md.j2 +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/templates/default_paper.md.j2 +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/templates/eight_questions.md.j2 +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/templates/three_pass.md.j2 +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/utils.py +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/__init__.py +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/app.py +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/constants.py +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/filters.py +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/handlers/__init__.py +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/handlers/api.py +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/handlers/pages.py +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/markdown.py +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/LICENSE +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/build/pdf.js +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/build/pdf.js.map +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/build/pdf.sandbox.js +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/build/pdf.sandbox.js.map +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/build/pdf.worker.js +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/build/pdf.worker.js.map +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/78-EUC-H.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/78-EUC-V.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/78-H.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/78-RKSJ-H.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/78-RKSJ-V.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/78-V.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/78ms-RKSJ-H.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/78ms-RKSJ-V.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/83pv-RKSJ-H.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/90ms-RKSJ-H.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/90ms-RKSJ-V.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/90msp-RKSJ-H.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/90msp-RKSJ-V.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/90pv-RKSJ-H.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/90pv-RKSJ-V.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/Add-H.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/Add-RKSJ-H.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/Add-RKSJ-V.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/Add-V.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/Adobe-CNS1-0.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/Adobe-CNS1-1.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/Adobe-CNS1-2.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/Adobe-CNS1-3.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/Adobe-CNS1-4.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/Adobe-CNS1-5.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/Adobe-CNS1-6.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/Adobe-CNS1-UCS2.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/Adobe-GB1-0.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/Adobe-GB1-1.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/Adobe-GB1-2.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/Adobe-GB1-3.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/Adobe-GB1-4.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/Adobe-GB1-5.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/Adobe-GB1-UCS2.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/Adobe-Japan1-0.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/Adobe-Japan1-1.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/Adobe-Japan1-2.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/Adobe-Japan1-3.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/Adobe-Japan1-4.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/Adobe-Japan1-5.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/Adobe-Japan1-6.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/Adobe-Japan1-UCS2.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/Adobe-Korea1-0.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/Adobe-Korea1-1.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/Adobe-Korea1-2.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/Adobe-Korea1-UCS2.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/B5-H.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/B5-V.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/B5pc-H.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/B5pc-V.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/CNS-EUC-H.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/CNS-EUC-V.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/CNS1-H.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/CNS1-V.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/CNS2-H.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/CNS2-V.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/ETHK-B5-H.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/ETHK-B5-V.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/ETen-B5-H.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/ETen-B5-V.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/ETenms-B5-H.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/ETenms-B5-V.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/EUC-H.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/EUC-V.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/Ext-H.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/Ext-RKSJ-H.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/Ext-RKSJ-V.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/Ext-V.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/GB-EUC-H.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/GB-EUC-V.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/GB-H.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/GB-V.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/GBK-EUC-H.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/GBK-EUC-V.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/GBK2K-H.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/GBK2K-V.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/GBKp-EUC-H.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/GBKp-EUC-V.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/GBT-EUC-H.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/GBT-EUC-V.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/GBT-H.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/GBT-V.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/GBTpc-EUC-H.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/GBTpc-EUC-V.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/GBpc-EUC-H.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/GBpc-EUC-V.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/H.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/HKdla-B5-H.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/HKdla-B5-V.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/HKdlb-B5-H.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/HKdlb-B5-V.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/HKgccs-B5-H.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/HKgccs-B5-V.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/HKm314-B5-H.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/HKm314-B5-V.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/HKm471-B5-H.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/HKm471-B5-V.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/HKscs-B5-H.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/HKscs-B5-V.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/Hankaku.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/Hiragana.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/KSC-EUC-H.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/KSC-EUC-V.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/KSC-H.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/KSC-Johab-H.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/KSC-Johab-V.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/KSC-V.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/KSCms-UHC-H.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/KSCms-UHC-HW-H.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/KSCms-UHC-HW-V.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/KSCms-UHC-V.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/KSCpc-EUC-H.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/KSCpc-EUC-V.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/Katakana.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/LICENSE +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/NWP-H.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/NWP-V.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/RKSJ-H.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/RKSJ-V.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/Roman.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/UniCNS-UCS2-H.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/UniCNS-UCS2-V.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/UniCNS-UTF16-H.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/UniCNS-UTF16-V.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/UniCNS-UTF32-H.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/UniCNS-UTF32-V.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/UniCNS-UTF8-H.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/UniCNS-UTF8-V.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/UniGB-UCS2-H.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/UniGB-UCS2-V.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/UniGB-UTF16-H.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/UniGB-UTF16-V.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/UniGB-UTF32-H.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/UniGB-UTF32-V.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/UniGB-UTF8-H.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/UniGB-UTF8-V.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/UniJIS-UCS2-H.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/UniJIS-UCS2-HW-H.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/UniJIS-UCS2-HW-V.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/UniJIS-UCS2-V.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/UniJIS-UTF16-H.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/UniJIS-UTF16-V.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/UniJIS-UTF32-H.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/UniJIS-UTF32-V.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/UniJIS-UTF8-H.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/UniJIS-UTF8-V.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/UniJIS2004-UTF16-H.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/UniJIS2004-UTF16-V.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/UniJIS2004-UTF32-H.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/UniJIS2004-UTF32-V.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/UniJIS2004-UTF8-H.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/UniJIS2004-UTF8-V.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/UniJISPro-UCS2-HW-V.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/UniJISPro-UCS2-V.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/UniJISPro-UTF8-V.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/UniJISX0213-UTF32-H.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/UniJISX0213-UTF32-V.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/UniJISX02132004-UTF32-H.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/UniJISX02132004-UTF32-V.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/UniKS-UCS2-H.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/UniKS-UCS2-V.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/UniKS-UTF16-H.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/UniKS-UTF16-V.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/UniKS-UTF32-H.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/UniKS-UTF32-V.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/UniKS-UTF8-H.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/UniKS-UTF8-V.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/V.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/cmaps/WP-Symbol.bcmap +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/compressed.tracemonkey-pldi-09.pdf +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/debugger.css +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/debugger.js +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/images/altText_add.svg +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/images/altText_done.svg +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/images/annotation-check.svg +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/images/annotation-comment.svg +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/images/annotation-help.svg +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/images/annotation-insert.svg +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/images/annotation-key.svg +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/images/annotation-newparagraph.svg +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/images/annotation-noicon.svg +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/images/annotation-note.svg +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/images/annotation-paperclip.svg +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/images/annotation-paragraph.svg +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/images/annotation-pushpin.svg +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/images/cursor-editorFreeText.svg +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/images/cursor-editorInk.svg +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/images/findbarButton-next.svg +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/images/findbarButton-previous.svg +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/images/gv-toolbarButton-download.svg +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/images/gv-toolbarButton-openinapp.svg +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/images/loading-dark.svg +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/images/loading-icon.gif +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/images/loading.svg +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/images/secondaryToolbarButton-documentProperties.svg +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/images/secondaryToolbarButton-firstPage.svg +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/images/secondaryToolbarButton-handTool.svg +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/images/secondaryToolbarButton-lastPage.svg +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/images/secondaryToolbarButton-rotateCcw.svg +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/images/secondaryToolbarButton-rotateCw.svg +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/images/secondaryToolbarButton-scrollHorizontal.svg +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/images/secondaryToolbarButton-scrollPage.svg +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/images/secondaryToolbarButton-scrollVertical.svg +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/images/secondaryToolbarButton-scrollWrapped.svg +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/images/secondaryToolbarButton-selectTool.svg +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/images/secondaryToolbarButton-spreadEven.svg +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/images/secondaryToolbarButton-spreadNone.svg +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/images/secondaryToolbarButton-spreadOdd.svg +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/images/toolbarButton-bookmark.svg +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/images/toolbarButton-currentOutlineItem.svg +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/images/toolbarButton-download.svg +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/images/toolbarButton-editorFreeText.svg +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/images/toolbarButton-editorInk.svg +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/images/toolbarButton-editorStamp.svg +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/images/toolbarButton-menuArrow.svg +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/images/toolbarButton-openFile.svg +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/images/toolbarButton-pageDown.svg +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/images/toolbarButton-pageUp.svg +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/images/toolbarButton-presentationMode.svg +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/images/toolbarButton-print.svg +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/images/toolbarButton-search.svg +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/images/toolbarButton-secondaryToolbarToggle.svg +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/images/toolbarButton-sidebarToggle.svg +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/images/toolbarButton-viewAttachments.svg +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/images/toolbarButton-viewLayers.svg +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/images/toolbarButton-viewOutline.svg +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/images/toolbarButton-viewThumbnail.svg +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/images/toolbarButton-zoomIn.svg +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/images/toolbarButton-zoomOut.svg +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/images/treeitem-collapsed.svg +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/images/treeitem-expanded.svg +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/ach/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/af/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/an/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/ar/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/ast/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/az/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/be/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/bg/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/bn/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/bo/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/br/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/brx/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/bs/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/ca/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/cak/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/ckb/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/cs/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/cy/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/da/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/de/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/dsb/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/el/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/en-CA/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/en-GB/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/en-US/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/eo/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/es-AR/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/es-CL/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/es-ES/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/es-MX/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/et/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/eu/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/fa/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/ff/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/fi/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/fr/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/fur/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/fy-NL/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/ga-IE/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/gd/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/gl/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/gn/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/gu-IN/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/he/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/hi-IN/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/hr/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/hsb/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/hu/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/hy-AM/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/hye/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/ia/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/id/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/is/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/it/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/ja/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/ka/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/kab/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/kk/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/km/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/kn/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/ko/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/lij/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/lo/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/locale.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/lt/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/ltg/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/lv/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/meh/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/mk/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/mr/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/ms/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/my/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/nb-NO/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/ne-NP/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/nl/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/nn-NO/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/oc/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/pa-IN/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/pl/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/pt-BR/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/pt-PT/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/rm/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/ro/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/ru/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/sat/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/sc/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/scn/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/sco/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/si/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/sk/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/skr/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/sl/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/son/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/sq/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/sr/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/sv-SE/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/szl/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/ta/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/te/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/tg/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/th/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/tl/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/tr/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/trs/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/uk/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/ur/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/uz/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/vi/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/wo/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/xh/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/zh-CN/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/locale/zh-TW/viewer.properties +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/standard_fonts/FoxitDingbats.pfb +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/standard_fonts/FoxitFixed.pfb +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/standard_fonts/FoxitFixedBold.pfb +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/standard_fonts/FoxitFixedBoldItalic.pfb +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/standard_fonts/FoxitFixedItalic.pfb +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/standard_fonts/FoxitSerif.pfb +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/standard_fonts/FoxitSerifBold.pfb +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/standard_fonts/FoxitSerifBoldItalic.pfb +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/standard_fonts/FoxitSerifItalic.pfb +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/standard_fonts/FoxitSymbol.pfb +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/standard_fonts/LICENSE_FOXIT +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/standard_fonts/LICENSE_LIBERATION +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/standard_fonts/LiberationSans-Bold.ttf +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/standard_fonts/LiberationSans-BoldItalic.ttf +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/standard_fonts/LiberationSans-Italic.ttf +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/standard_fonts/LiberationSans-Regular.ttf +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/viewer.css +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/viewer.html +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/viewer.js +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/pdfjs/web/viewer.js.map +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/query.py +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/static/css/main.css +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/static/js/detail.js +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/static/js/index.js +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/static/js/outline.js +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/static/js/stats.js +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/static_assets.py +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/templates/base.html +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/templates/detail.html +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/templates/index.html +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/templates/stats.html +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/templates.py +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/web/text.py +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/recognize/__init__.py +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/recognize/cli.py +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/recognize/katex_check.js +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/recognize/markdown.py +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/recognize/math.py +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/recognize/mermaid.py +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/recognize/organize.py +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/translator/__init__.py +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/translator/cli.py +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/translator/config.py +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/translator/engine.py +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/translator/fixers.py +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/translator/placeholder.py +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/translator/prompts.py +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/translator/protector.py +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/translator/segment.py +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow.egg-info/dependency_links.txt +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow.egg-info/entry_points.txt +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow.egg-info/requires.txt +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow.egg-info/top_level.txt +0 -0
- {deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/setup.cfg +0 -0
{deepresearch_flow-0.7.1/python/deepresearch_flow.egg-info → deepresearch_flow-0.7.3}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: deepresearch-flow
|
|
3
|
-
Version: 0.7.
|
|
3
|
+
Version: 0.7.3
|
|
4
4
|
Summary: Workflow tools for paper extraction, review, and research automation.
|
|
5
5
|
Author-email: DengQi <dengqi935@gmail.com>
|
|
6
6
|
License: MIT License
|
|
@@ -532,6 +532,22 @@ server {
|
|
|
532
532
|
proxy_set_header X-Real-IP $remote_addr;
|
|
533
533
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
534
534
|
}
|
|
535
|
+
|
|
536
|
+
# SSE transport for MCP clients that require Server-Sent Events
|
|
537
|
+
location ^~ /mcp-sse {
|
|
538
|
+
proxy_pass http://127.0.0.1:8001;
|
|
539
|
+
proxy_http_version 1.1;
|
|
540
|
+
proxy_set_header Connection "";
|
|
541
|
+
proxy_set_header Host $host;
|
|
542
|
+
proxy_set_header X-Real-IP $remote_addr;
|
|
543
|
+
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
544
|
+
proxy_buffering off;
|
|
545
|
+
proxy_cache off;
|
|
546
|
+
proxy_read_timeout 3600s;
|
|
547
|
+
proxy_send_timeout 3600s;
|
|
548
|
+
chunked_transfer_encoding off;
|
|
549
|
+
add_header X-Accel-Buffering no;
|
|
550
|
+
}
|
|
535
551
|
}
|
|
536
552
|
|
|
537
553
|
# Static assets (separate domain)
|
|
@@ -562,12 +578,15 @@ uv run deepresearch-flow paper db api serve \
|
|
|
562
578
|
--host 0.0.0.0 --port 8001
|
|
563
579
|
```
|
|
564
580
|
|
|
565
|
-
### 3.1) MCP (FastMCP Streamable HTTP)
|
|
581
|
+
### 3.1) MCP (FastMCP Streamable HTTP + SSE)
|
|
566
582
|
|
|
567
|
-
This project exposes
|
|
583
|
+
This project exposes MCP servers mounted on the snapshot API:
|
|
568
584
|
|
|
569
|
-
-
|
|
570
|
-
-
|
|
585
|
+
- Streamable HTTP endpoint: `http://<host>:8001/mcp`
|
|
586
|
+
- SSE endpoint: `http://<host>:8001/mcp-sse`
|
|
587
|
+
- Transport behavior:
|
|
588
|
+
- `/mcp`: Streamable HTTP via `POST` only (`GET` returns 405)
|
|
589
|
+
- `/mcp-sse`: SSE-enabled transport (supports `GET` handshake)
|
|
571
590
|
- Protocol header: optional `mcp-protocol-version` (`2025-03-26` or `2025-06-18`)
|
|
572
591
|
- Static reads: summary/source/translation are served as **text content** by reading snapshot static assets (local-first via `PAPER_DB_STATIC_EXPORT_DIR`, HTTP fallback via `PAPER_DB_STATIC_BASE` / `PAPER_DB_STATIC_BASE_URL`)
|
|
573
592
|
|
|
@@ -959,7 +978,7 @@ docker run --rm -p 8899:8899 \
|
|
|
959
978
|
```
|
|
960
979
|
|
|
961
980
|
Notes:
|
|
962
|
-
- nginx listens on 8899 and proxies `/api
|
|
981
|
+
- nginx listens on 8899 and proxies `/api`, `/mcp`, and `/mcp-sse` to the internal API at `127.0.0.1:8000`.
|
|
963
982
|
- Mount your snapshot DB to `/db/papers.db` inside the container.
|
|
964
983
|
- Mount snapshot static assets to `/static` when serving assets from this container (default `PAPER_DB_STATIC_BASE` is `/static`).
|
|
965
984
|
- If `PAPER_DB_STATIC_BASE` is a full URL (e.g. `https://static.example.com`), nginx still serves the frontend locally, while API responses use that external static base for asset links.
|
|
@@ -469,6 +469,22 @@ server {
|
|
|
469
469
|
proxy_set_header X-Real-IP $remote_addr;
|
|
470
470
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
471
471
|
}
|
|
472
|
+
|
|
473
|
+
# SSE transport for MCP clients that require Server-Sent Events
|
|
474
|
+
location ^~ /mcp-sse {
|
|
475
|
+
proxy_pass http://127.0.0.1:8001;
|
|
476
|
+
proxy_http_version 1.1;
|
|
477
|
+
proxy_set_header Connection "";
|
|
478
|
+
proxy_set_header Host $host;
|
|
479
|
+
proxy_set_header X-Real-IP $remote_addr;
|
|
480
|
+
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
481
|
+
proxy_buffering off;
|
|
482
|
+
proxy_cache off;
|
|
483
|
+
proxy_read_timeout 3600s;
|
|
484
|
+
proxy_send_timeout 3600s;
|
|
485
|
+
chunked_transfer_encoding off;
|
|
486
|
+
add_header X-Accel-Buffering no;
|
|
487
|
+
}
|
|
472
488
|
}
|
|
473
489
|
|
|
474
490
|
# Static assets (separate domain)
|
|
@@ -499,12 +515,15 @@ uv run deepresearch-flow paper db api serve \
|
|
|
499
515
|
--host 0.0.0.0 --port 8001
|
|
500
516
|
```
|
|
501
517
|
|
|
502
|
-
### 3.1) MCP (FastMCP Streamable HTTP)
|
|
518
|
+
### 3.1) MCP (FastMCP Streamable HTTP + SSE)
|
|
503
519
|
|
|
504
|
-
This project exposes
|
|
520
|
+
This project exposes MCP servers mounted on the snapshot API:
|
|
505
521
|
|
|
506
|
-
-
|
|
507
|
-
-
|
|
522
|
+
- Streamable HTTP endpoint: `http://<host>:8001/mcp`
|
|
523
|
+
- SSE endpoint: `http://<host>:8001/mcp-sse`
|
|
524
|
+
- Transport behavior:
|
|
525
|
+
- `/mcp`: Streamable HTTP via `POST` only (`GET` returns 405)
|
|
526
|
+
- `/mcp-sse`: SSE-enabled transport (supports `GET` handshake)
|
|
508
527
|
- Protocol header: optional `mcp-protocol-version` (`2025-03-26` or `2025-06-18`)
|
|
509
528
|
- Static reads: summary/source/translation are served as **text content** by reading snapshot static assets (local-first via `PAPER_DB_STATIC_EXPORT_DIR`, HTTP fallback via `PAPER_DB_STATIC_BASE` / `PAPER_DB_STATIC_BASE_URL`)
|
|
510
529
|
|
|
@@ -896,7 +915,7 @@ docker run --rm -p 8899:8899 \
|
|
|
896
915
|
```
|
|
897
916
|
|
|
898
917
|
Notes:
|
|
899
|
-
- nginx listens on 8899 and proxies `/api
|
|
918
|
+
- nginx listens on 8899 and proxies `/api`, `/mcp`, and `/mcp-sse` to the internal API at `127.0.0.1:8000`.
|
|
900
919
|
- Mount your snapshot DB to `/db/papers.db` inside the container.
|
|
901
920
|
- Mount snapshot static assets to `/static` when serving assets from this container (default `PAPER_DB_STATIC_BASE` is `/static`).
|
|
902
921
|
- If `PAPER_DB_STATIC_BASE` is a full URL (e.g. `https://static.example.com`), nginx still serves the frontend locally, while API responses use that external static base for asset links.
|
{deepresearch_flow-0.7.1 → deepresearch_flow-0.7.3}/python/deepresearch_flow/paper/snapshot/api.py
RENAMED
|
@@ -908,7 +908,7 @@ def create_app(
|
|
|
908
908
|
# Lazy import to avoid circular dependency
|
|
909
909
|
from deepresearch_flow.paper.snapshot.mcp_server import (
|
|
910
910
|
McpSnapshotConfig,
|
|
911
|
-
|
|
911
|
+
create_mcp_apps,
|
|
912
912
|
resolve_static_export_dir,
|
|
913
913
|
)
|
|
914
914
|
|
|
@@ -919,7 +919,7 @@ def create_app(
|
|
|
919
919
|
limits=limits or ApiLimits(),
|
|
920
920
|
origin_allowlist=cors_allowed_origins or ["*"],
|
|
921
921
|
)
|
|
922
|
-
|
|
922
|
+
mcp_apps, mcp_lifespan = create_mcp_apps(mcp_config)
|
|
923
923
|
|
|
924
924
|
routes = [
|
|
925
925
|
Route("/api/v1/config", _api_config, methods=["GET"]),
|
|
@@ -931,7 +931,8 @@ def create_app(
|
|
|
931
931
|
Route("/api/v1/facets/{facet:str}/{facet_id:str}/stats", _api_facet_stats, methods=["GET"]),
|
|
932
932
|
Route("/api/v1/facets/{facet:str}/by-value/{value:str}/papers", _api_facet_by_value_papers, methods=["GET"]),
|
|
933
933
|
Route("/api/v1/facets/{facet:str}/by-value/{value:str}/stats", _api_facet_by_value_stats, methods=["GET"]),
|
|
934
|
-
Mount("/mcp", app=
|
|
934
|
+
Mount("/mcp", app=mcp_apps["streamable-http"]),
|
|
935
|
+
Mount("/mcp-sse", app=mcp_apps["sse"]),
|
|
935
936
|
]
|
|
936
937
|
|
|
937
938
|
# Pass MCP lifespan to ensure session manager initializes properly
|
|
@@ -5,7 +5,7 @@ import json
|
|
|
5
5
|
import os
|
|
6
6
|
from pathlib import Path
|
|
7
7
|
import re
|
|
8
|
-
from typing import Any
|
|
8
|
+
from typing import Any, Literal
|
|
9
9
|
|
|
10
10
|
import httpx
|
|
11
11
|
from starlette.applications import Starlette
|
|
@@ -76,14 +76,13 @@ class McpSnapshotConfig:
|
|
|
76
76
|
|
|
77
77
|
|
|
78
78
|
class McpRequestGuardMiddleware(BaseHTTPMiddleware):
|
|
79
|
-
def __init__(self, app, *, origin_allowlist: list[str]) -> None:
|
|
79
|
+
def __init__(self, app, *, origin_allowlist: list[str], allowed_methods: set[str] | None = None) -> None:
|
|
80
80
|
super().__init__(app)
|
|
81
81
|
self._allowlist = [origin.lower() for origin in origin_allowlist]
|
|
82
|
+
self._allowed_methods = {method.upper() for method in (allowed_methods or {"POST", "OPTIONS"})}
|
|
82
83
|
|
|
83
84
|
async def dispatch(self, request: Request, call_next): # type: ignore[override]
|
|
84
|
-
if request.method
|
|
85
|
-
return Response("Method Not Allowed", status_code=405)
|
|
86
|
-
if request.method not in {"POST", "OPTIONS"}:
|
|
85
|
+
if request.method.upper() not in self._allowed_methods:
|
|
87
86
|
return Response("Method Not Allowed", status_code=405)
|
|
88
87
|
origin = request.headers.get("origin")
|
|
89
88
|
if origin and not self._is_allowed_origin(origin):
|
|
@@ -108,23 +107,49 @@ def configure(config: McpSnapshotConfig) -> None:
|
|
|
108
107
|
_CONFIG = config
|
|
109
108
|
|
|
110
109
|
|
|
111
|
-
def
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
110
|
+
def _allowed_methods_for_transport(transport: Literal["streamable-http", "sse"]) -> set[str]:
|
|
111
|
+
if transport == "sse":
|
|
112
|
+
return {"GET", "POST", "OPTIONS"}
|
|
113
|
+
return {"POST", "OPTIONS"}
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
def create_mcp_transport_app(
|
|
117
|
+
config: McpSnapshotConfig,
|
|
118
|
+
*,
|
|
119
|
+
transport: Literal["streamable-http", "sse"] = "streamable-http",
|
|
120
|
+
) -> tuple[Starlette, Any]:
|
|
121
|
+
"""Create MCP app for a specific transport with transport-aware method guard."""
|
|
117
122
|
configure(config)
|
|
118
|
-
mcp_app = mcp.http_app(path="/", stateless_http=
|
|
123
|
+
mcp_app = mcp.http_app(path="/", transport=transport, stateless_http=(transport == "streamable-http"))
|
|
119
124
|
wrapped = Starlette(
|
|
120
125
|
routes=[Mount("/", app=mcp_app)],
|
|
121
126
|
middleware=[
|
|
122
|
-
Middleware(
|
|
127
|
+
Middleware(
|
|
128
|
+
McpRequestGuardMiddleware,
|
|
129
|
+
origin_allowlist=config.origin_allowlist,
|
|
130
|
+
allowed_methods=_allowed_methods_for_transport(transport),
|
|
131
|
+
),
|
|
123
132
|
],
|
|
124
133
|
)
|
|
125
134
|
return wrapped, mcp_app.lifespan
|
|
126
135
|
|
|
127
136
|
|
|
137
|
+
def create_mcp_apps(config: McpSnapshotConfig) -> tuple[dict[str, Starlette], Any]:
|
|
138
|
+
"""Create streamable-http and sse MCP apps.
|
|
139
|
+
|
|
140
|
+
Returns:
|
|
141
|
+
A tuple of (apps_by_transport, lifespan_context).
|
|
142
|
+
"""
|
|
143
|
+
streamable_app, lifespan = create_mcp_transport_app(config, transport="streamable-http")
|
|
144
|
+
sse_app, _ = create_mcp_transport_app(config, transport="sse")
|
|
145
|
+
return {"streamable-http": streamable_app, "sse": sse_app}, lifespan
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
def create_mcp_app(config: McpSnapshotConfig) -> tuple[Starlette, Any]:
|
|
149
|
+
"""Backward-compatible helper returning streamable-http MCP app."""
|
|
150
|
+
return create_mcp_transport_app(config, transport="streamable-http")
|
|
151
|
+
|
|
152
|
+
|
|
128
153
|
def _get_config() -> McpSnapshotConfig:
|
|
129
154
|
if _CONFIG is None:
|
|
130
155
|
raise RuntimeError("MCP server not configured")
|
|
@@ -227,18 +252,24 @@ def _load_summary_json(paper_id: str, template: str | None) -> tuple[str | None,
|
|
|
227
252
|
conn = _open_ro_conn(cfg.snapshot_db)
|
|
228
253
|
try:
|
|
229
254
|
row = conn.execute(
|
|
230
|
-
"SELECT preferred_summary_template
|
|
255
|
+
"SELECT preferred_summary_template FROM paper WHERE paper_id = ?",
|
|
231
256
|
(paper_id,),
|
|
232
257
|
).fetchone()
|
|
233
258
|
if not row:
|
|
234
259
|
return None, None
|
|
235
|
-
preferred = row["preferred_summary_template"]
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
260
|
+
preferred = str(row["preferred_summary_template"] or "")
|
|
261
|
+
template_rows = conn.execute(
|
|
262
|
+
"SELECT template_tag FROM paper_summary WHERE paper_id = ?",
|
|
263
|
+
(paper_id,),
|
|
264
|
+
).fetchall()
|
|
265
|
+
available = sorted((str(item["template_tag"]) for item in template_rows), key=str.lower)
|
|
266
|
+
selected = (template or preferred).strip()
|
|
267
|
+
if not selected or selected not in set(available):
|
|
240
268
|
return None, available
|
|
241
|
-
|
|
269
|
+
if template:
|
|
270
|
+
rel_path = f"summary/{paper_id}/{selected}.json"
|
|
271
|
+
else:
|
|
272
|
+
rel_path = f"summary/{paper_id}.json"
|
|
242
273
|
return _load_static_text(rel_path), available
|
|
243
274
|
finally:
|
|
244
275
|
conn.close()
|
|
@@ -267,15 +298,12 @@ def _load_translation_markdown(paper_id: str, lang: str) -> str | None:
|
|
|
267
298
|
conn = _open_ro_conn(cfg.snapshot_db)
|
|
268
299
|
try:
|
|
269
300
|
row = conn.execute(
|
|
270
|
-
"SELECT
|
|
271
|
-
(paper_id,),
|
|
301
|
+
"SELECT md_content_hash FROM paper_translation WHERE paper_id = ? AND lang = ?",
|
|
302
|
+
(paper_id, lang),
|
|
272
303
|
).fetchone()
|
|
273
|
-
if not row or not row["
|
|
274
|
-
return None
|
|
275
|
-
translations = json.loads(row["translations_json"])
|
|
276
|
-
rel_path = translations.get(lang)
|
|
277
|
-
if not rel_path:
|
|
304
|
+
if not row or not row["md_content_hash"]:
|
|
278
305
|
return None
|
|
306
|
+
rel_path = f"md_translate/{lang}/{row['md_content_hash']}.md"
|
|
279
307
|
return _load_static_text(rel_path)
|
|
280
308
|
finally:
|
|
281
309
|
conn.close()
|
|
@@ -296,22 +324,32 @@ def search_papers(query: str, limit: int = 10) -> list[dict[str, Any]]:
|
|
|
296
324
|
|
|
297
325
|
conn = _open_ro_conn(cfg.snapshot_db)
|
|
298
326
|
try:
|
|
327
|
+
match_expr = rewrite_search_query(query)
|
|
328
|
+
if not match_expr:
|
|
329
|
+
return []
|
|
299
330
|
cur = conn.execute(
|
|
300
331
|
"""
|
|
301
|
-
SELECT
|
|
302
|
-
|
|
303
|
-
|
|
332
|
+
SELECT
|
|
333
|
+
p.paper_id,
|
|
334
|
+
p.title,
|
|
335
|
+
p.year,
|
|
336
|
+
p.venue,
|
|
337
|
+
snippet(paper_fts, -1, '[[[', ']]]', '…', 30) AS snippet_markdown,
|
|
338
|
+
bm25(paper_fts, 5.0, 3.0, 1.0, 1.0, 2.0) AS rank
|
|
339
|
+
FROM paper_fts
|
|
340
|
+
JOIN paper p ON p.paper_id = paper_fts.paper_id
|
|
341
|
+
WHERE paper_fts MATCH ?
|
|
304
342
|
ORDER BY rank
|
|
305
343
|
LIMIT ?
|
|
306
344
|
""",
|
|
307
|
-
(
|
|
345
|
+
(match_expr, limit),
|
|
308
346
|
)
|
|
309
347
|
rows = cur.fetchall()
|
|
310
348
|
results: list[dict[str, Any]] = []
|
|
311
349
|
for row in rows:
|
|
312
|
-
snippet = str(row["
|
|
350
|
+
snippet = str(row["snippet_markdown"] or "")
|
|
313
351
|
snippet = remove_cjk_spaces(snippet)
|
|
314
|
-
snippet
|
|
352
|
+
snippet = merge_adjacent_markers(snippet)
|
|
315
353
|
results.append({
|
|
316
354
|
"paper_id": str(row["paper_id"]),
|
|
317
355
|
"title": str(row["title"]),
|
|
@@ -337,7 +375,7 @@ def search_papers_by_keyword(keyword: str, limit: int = 10) -> list[dict[str, An
|
|
|
337
375
|
try:
|
|
338
376
|
rows = conn.execute(
|
|
339
377
|
"""
|
|
340
|
-
SELECT DISTINCT p.paper_id, p.title, p.year, p.venue, p.
|
|
378
|
+
SELECT DISTINCT p.paper_id, p.title, p.year, p.venue, p.summary_preview
|
|
341
379
|
FROM paper p
|
|
342
380
|
JOIN paper_keyword pk ON pk.paper_id = p.paper_id
|
|
343
381
|
JOIN keyword k ON k.keyword_id = pk.keyword_id
|
|
@@ -349,9 +387,9 @@ def search_papers_by_keyword(keyword: str, limit: int = 10) -> list[dict[str, An
|
|
|
349
387
|
).fetchall()
|
|
350
388
|
results: list[dict[str, Any]] = []
|
|
351
389
|
for row in rows:
|
|
352
|
-
snippet = str(row["
|
|
390
|
+
snippet = str(row["summary_preview"] or "")
|
|
353
391
|
snippet = remove_cjk_spaces(snippet)
|
|
354
|
-
snippet
|
|
392
|
+
snippet = merge_adjacent_markers(snippet)
|
|
355
393
|
results.append({
|
|
356
394
|
"paper_id": str(row["paper_id"]),
|
|
357
395
|
"title": str(row["title"]),
|
|
@@ -377,26 +415,27 @@ def get_paper_metadata(paper_id: str) -> dict[str, Any]:
|
|
|
377
415
|
try:
|
|
378
416
|
row = conn.execute(
|
|
379
417
|
"""
|
|
380
|
-
SELECT paper_id, title, year, venue,
|
|
381
|
-
preferred_summary_template, summary_asset_paths_json
|
|
418
|
+
SELECT paper_id, title, year, venue, preferred_summary_template
|
|
382
419
|
FROM paper WHERE paper_id = ?
|
|
383
420
|
""",
|
|
384
421
|
(paper_id,),
|
|
385
422
|
).fetchone()
|
|
386
423
|
if not row:
|
|
387
424
|
raise McpToolError("not_found", "paper not found", paper_id=paper_id)
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
425
|
+
template_rows = conn.execute(
|
|
426
|
+
"SELECT template_tag FROM paper_summary WHERE paper_id = ?",
|
|
427
|
+
(paper_id,),
|
|
428
|
+
).fetchall()
|
|
429
|
+
available = sorted((str(item["template_tag"]) for item in template_rows), key=str.lower)
|
|
391
430
|
return {
|
|
392
431
|
"paper_id": str(row["paper_id"]),
|
|
393
432
|
"title": str(row["title"]),
|
|
394
433
|
"year": str(row["year"]),
|
|
395
434
|
"venue": str(row["venue"]),
|
|
396
|
-
"doi":
|
|
397
|
-
"arxiv_id":
|
|
398
|
-
"openreview_id":
|
|
399
|
-
"paper_pw_url":
|
|
435
|
+
"doi": None,
|
|
436
|
+
"arxiv_id": None,
|
|
437
|
+
"openreview_id": None,
|
|
438
|
+
"paper_pw_url": None,
|
|
400
439
|
"preferred_summary_template": row["preferred_summary_template"],
|
|
401
440
|
"available_summary_templates": available,
|
|
402
441
|
}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import sqlite3
|
|
4
|
+
import tempfile
|
|
5
|
+
from pathlib import Path
|
|
6
|
+
import unittest
|
|
7
|
+
|
|
8
|
+
from deepresearch_flow.paper.snapshot.common import ApiLimits
|
|
9
|
+
from deepresearch_flow.paper.snapshot.mcp_server import (
|
|
10
|
+
McpSnapshotConfig,
|
|
11
|
+
McpToolError,
|
|
12
|
+
configure,
|
|
13
|
+
get_paper_metadata,
|
|
14
|
+
get_paper_source,
|
|
15
|
+
get_paper_summary,
|
|
16
|
+
resource_translation,
|
|
17
|
+
search_papers,
|
|
18
|
+
search_papers_by_keyword,
|
|
19
|
+
)
|
|
20
|
+
from deepresearch_flow.paper.snapshot.schema import init_snapshot_db
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class TestMcpServerSchemaCompat(unittest.TestCase):
|
|
24
|
+
@classmethod
|
|
25
|
+
def setUpClass(cls) -> None:
|
|
26
|
+
cls.tmpdir = tempfile.TemporaryDirectory()
|
|
27
|
+
root = Path(cls.tmpdir.name)
|
|
28
|
+
cls.db_path = root / "snapshot.db"
|
|
29
|
+
cls.static_dir = root / "static"
|
|
30
|
+
cls.paper_id = "eb87c02de5b908dff9f91edda47364a5"
|
|
31
|
+
|
|
32
|
+
(cls.static_dir / "summary" / cls.paper_id).mkdir(parents=True, exist_ok=True)
|
|
33
|
+
(cls.static_dir / "md").mkdir(parents=True, exist_ok=True)
|
|
34
|
+
(cls.static_dir / "md_translate" / "zh").mkdir(parents=True, exist_ok=True)
|
|
35
|
+
(cls.static_dir / "summary" / f"{cls.paper_id}.json").write_text(
|
|
36
|
+
'{"template_tag":"deep_read","summary":"default summary"}',
|
|
37
|
+
encoding="utf-8",
|
|
38
|
+
)
|
|
39
|
+
(cls.static_dir / "summary" / cls.paper_id / "deep_read.json").write_text(
|
|
40
|
+
'{"template_tag":"deep_read","summary":"deep summary"}',
|
|
41
|
+
encoding="utf-8",
|
|
42
|
+
)
|
|
43
|
+
(cls.static_dir / "summary" / cls.paper_id / "simple.json").write_text(
|
|
44
|
+
'{"template_tag":"simple","summary":"simple summary"}',
|
|
45
|
+
encoding="utf-8",
|
|
46
|
+
)
|
|
47
|
+
(cls.static_dir / "md" / "sourcehash.md").write_text(
|
|
48
|
+
"# source body",
|
|
49
|
+
encoding="utf-8",
|
|
50
|
+
)
|
|
51
|
+
(cls.static_dir / "md_translate" / "zh" / "trhash.md").write_text(
|
|
52
|
+
"# 翻译内容",
|
|
53
|
+
encoding="utf-8",
|
|
54
|
+
)
|
|
55
|
+
|
|
56
|
+
conn = sqlite3.connect(str(cls.db_path))
|
|
57
|
+
try:
|
|
58
|
+
init_snapshot_db(conn)
|
|
59
|
+
conn.execute(
|
|
60
|
+
"""
|
|
61
|
+
INSERT INTO paper(
|
|
62
|
+
paper_id, paper_key, paper_key_type, title, year, month, publication_date,
|
|
63
|
+
venue, preferred_summary_template, summary_preview, paper_index, source_hash,
|
|
64
|
+
output_language, provider, model, prompt_template, extracted_at,
|
|
65
|
+
pdf_content_hash, source_md_content_hash
|
|
66
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
67
|
+
""",
|
|
68
|
+
(
|
|
69
|
+
cls.paper_id,
|
|
70
|
+
"meta:key",
|
|
71
|
+
"meta",
|
|
72
|
+
"Graph Neural Networks",
|
|
73
|
+
"2024",
|
|
74
|
+
"01",
|
|
75
|
+
"2024-01-01",
|
|
76
|
+
"ICLR",
|
|
77
|
+
"deep_read",
|
|
78
|
+
"Graph methods preview",
|
|
79
|
+
1,
|
|
80
|
+
"sourcekey",
|
|
81
|
+
"en",
|
|
82
|
+
"provider-x",
|
|
83
|
+
"model-y",
|
|
84
|
+
"deep_read",
|
|
85
|
+
"2025-01-01T00:00:00Z",
|
|
86
|
+
"pdfhash",
|
|
87
|
+
"sourcehash",
|
|
88
|
+
),
|
|
89
|
+
)
|
|
90
|
+
conn.execute(
|
|
91
|
+
"INSERT INTO paper_summary(paper_id, template_tag) VALUES (?, ?)",
|
|
92
|
+
(cls.paper_id, "deep_read"),
|
|
93
|
+
)
|
|
94
|
+
conn.execute(
|
|
95
|
+
"INSERT INTO paper_summary(paper_id, template_tag) VALUES (?, ?)",
|
|
96
|
+
(cls.paper_id, "simple"),
|
|
97
|
+
)
|
|
98
|
+
conn.execute(
|
|
99
|
+
"INSERT INTO paper_translation(paper_id, lang, md_content_hash) VALUES (?, ?, ?)",
|
|
100
|
+
(cls.paper_id, "zh", "trhash"),
|
|
101
|
+
)
|
|
102
|
+
conn.execute("INSERT INTO keyword(value) VALUES (?)", ("machine learning",))
|
|
103
|
+
keyword_row = conn.execute(
|
|
104
|
+
"SELECT keyword_id FROM keyword WHERE value = ?",
|
|
105
|
+
("machine learning",),
|
|
106
|
+
).fetchone()
|
|
107
|
+
conn.execute(
|
|
108
|
+
"INSERT INTO paper_keyword(paper_id, keyword_id) VALUES (?, ?)",
|
|
109
|
+
(cls.paper_id, int(keyword_row[0])),
|
|
110
|
+
)
|
|
111
|
+
conn.execute(
|
|
112
|
+
"""
|
|
113
|
+
INSERT INTO paper_fts(paper_id, title, summary, source, translated, metadata)
|
|
114
|
+
VALUES (?, ?, ?, ?, ?, ?)
|
|
115
|
+
""",
|
|
116
|
+
(
|
|
117
|
+
cls.paper_id,
|
|
118
|
+
"graph neural networks",
|
|
119
|
+
"graph representation learning",
|
|
120
|
+
"source text",
|
|
121
|
+
"translated text",
|
|
122
|
+
"machine learning iclr",
|
|
123
|
+
),
|
|
124
|
+
)
|
|
125
|
+
conn.commit()
|
|
126
|
+
finally:
|
|
127
|
+
conn.close()
|
|
128
|
+
|
|
129
|
+
configure(
|
|
130
|
+
McpSnapshotConfig(
|
|
131
|
+
snapshot_db=cls.db_path,
|
|
132
|
+
static_base_url="",
|
|
133
|
+
static_export_dir=cls.static_dir,
|
|
134
|
+
limits=ApiLimits(),
|
|
135
|
+
origin_allowlist=["*"],
|
|
136
|
+
)
|
|
137
|
+
)
|
|
138
|
+
|
|
139
|
+
@classmethod
|
|
140
|
+
def tearDownClass(cls) -> None:
|
|
141
|
+
cls.tmpdir.cleanup()
|
|
142
|
+
|
|
143
|
+
def test_get_paper_metadata_with_new_schema(self) -> None:
|
|
144
|
+
payload = get_paper_metadata(self.paper_id)
|
|
145
|
+
self.assertEqual(payload["paper_id"], self.paper_id)
|
|
146
|
+
self.assertEqual(payload["preferred_summary_template"], "deep_read")
|
|
147
|
+
self.assertEqual(payload["available_summary_templates"], ["deep_read", "simple"])
|
|
148
|
+
self.assertIsNone(payload["doi"])
|
|
149
|
+
self.assertIsNone(payload["arxiv_id"])
|
|
150
|
+
self.assertIsNone(payload["openreview_id"])
|
|
151
|
+
self.assertIsNone(payload["paper_pw_url"])
|
|
152
|
+
|
|
153
|
+
def test_get_paper_summary_default_and_template(self) -> None:
|
|
154
|
+
default_summary = get_paper_summary(self.paper_id)
|
|
155
|
+
deep_read_summary = get_paper_summary(self.paper_id, template="deep_read")
|
|
156
|
+
self.assertIn("default summary", default_summary)
|
|
157
|
+
self.assertIn("deep summary", deep_read_summary)
|
|
158
|
+
|
|
159
|
+
def test_get_paper_summary_template_not_available(self) -> None:
|
|
160
|
+
with self.assertRaises(McpToolError) as ctx:
|
|
161
|
+
get_paper_summary(self.paper_id, template="unknown")
|
|
162
|
+
self.assertEqual(ctx.exception.code, "template_not_available")
|
|
163
|
+
self.assertEqual(
|
|
164
|
+
ctx.exception.details["available_summary_templates"],
|
|
165
|
+
["deep_read", "simple"],
|
|
166
|
+
)
|
|
167
|
+
|
|
168
|
+
def test_source_and_translation_loading(self) -> None:
|
|
169
|
+
source = get_paper_source(self.paper_id)
|
|
170
|
+
translated = resource_translation(self.paper_id, "zh")
|
|
171
|
+
self.assertIn("source body", source)
|
|
172
|
+
self.assertIn("翻译内容", translated)
|
|
173
|
+
|
|
174
|
+
def test_search_tools_use_current_schema(self) -> None:
|
|
175
|
+
fts_hits = search_papers("graph", limit=5)
|
|
176
|
+
facet_hits = search_papers_by_keyword("machine", limit=5)
|
|
177
|
+
self.assertGreaterEqual(len(fts_hits), 1)
|
|
178
|
+
self.assertGreaterEqual(len(facet_hits), 1)
|
|
179
|
+
self.assertEqual(fts_hits[0]["paper_id"], self.paper_id)
|
|
180
|
+
self.assertEqual(facet_hits[0]["paper_id"], self.paper_id)
|
|
181
|
+
|
|
182
|
+
|
|
183
|
+
if __name__ == "__main__":
|
|
184
|
+
unittest.main()
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import tempfile
|
|
4
|
+
from pathlib import Path
|
|
5
|
+
import unittest
|
|
6
|
+
|
|
7
|
+
from deepresearch_flow.paper.snapshot.api import create_app
|
|
8
|
+
from deepresearch_flow.paper.snapshot.common import ApiLimits
|
|
9
|
+
from deepresearch_flow.paper.snapshot.mcp_server import (
|
|
10
|
+
McpSnapshotConfig,
|
|
11
|
+
_allowed_methods_for_transport,
|
|
12
|
+
)
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class TestMcpTransport(unittest.TestCase):
|
|
16
|
+
@classmethod
|
|
17
|
+
def setUpClass(cls) -> None:
|
|
18
|
+
cls.tmpdir = tempfile.TemporaryDirectory()
|
|
19
|
+
cls.snapshot_db = Path(cls.tmpdir.name) / "snapshot.db"
|
|
20
|
+
cls.snapshot_db.touch()
|
|
21
|
+
cls.cfg = McpSnapshotConfig(
|
|
22
|
+
snapshot_db=cls.snapshot_db,
|
|
23
|
+
static_base_url="",
|
|
24
|
+
static_export_dir=None,
|
|
25
|
+
limits=ApiLimits(),
|
|
26
|
+
origin_allowlist=["*"],
|
|
27
|
+
)
|
|
28
|
+
|
|
29
|
+
@classmethod
|
|
30
|
+
def tearDownClass(cls) -> None:
|
|
31
|
+
cls.tmpdir.cleanup()
|
|
32
|
+
|
|
33
|
+
def test_streamable_transport_rejects_get(self) -> None:
|
|
34
|
+
self.assertNotIn("GET", _allowed_methods_for_transport("streamable-http"))
|
|
35
|
+
|
|
36
|
+
def test_sse_transport_allows_get(self) -> None:
|
|
37
|
+
self.assertIn("GET", _allowed_methods_for_transport("sse"))
|
|
38
|
+
|
|
39
|
+
def test_api_mounts_streamable_and_sse_endpoints(self) -> None:
|
|
40
|
+
app = create_app(
|
|
41
|
+
snapshot_db=self.snapshot_db,
|
|
42
|
+
static_base_url="",
|
|
43
|
+
cors_allowed_origins=["*"],
|
|
44
|
+
limits=ApiLimits(),
|
|
45
|
+
)
|
|
46
|
+
mount_paths = sorted(getattr(route, "path", "") for route in app.routes)
|
|
47
|
+
self.assertIn("/mcp", mount_paths)
|
|
48
|
+
self.assertIn("/mcp-sse", mount_paths)
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
if __name__ == "__main__":
|
|
52
|
+
unittest.main()
|