bathys 0.6.2__tar.gz → 0.7.1__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.
Files changed (101) hide show
  1. {bathys-0.6.2 → bathys-0.7.1}/.remember/logs/memory-2026-09-08.log +50 -0
  2. bathys-0.7.1/.remember/tmp/no-transcript-notice +1 -0
  3. {bathys-0.6.2 → bathys-0.7.1}/CHANGELOG.md +22 -0
  4. {bathys-0.6.2 → bathys-0.7.1}/PKG-INFO +44 -22
  5. {bathys-0.6.2 → bathys-0.7.1}/README.md +43 -21
  6. {bathys-0.6.2 → bathys-0.7.1}/docs/contracts/config.md +1 -0
  7. {bathys-0.6.2 → bathys-0.7.1}/docs/getting-started/configure.md +1 -0
  8. bathys-0.7.1/install.sh +105 -0
  9. {bathys-0.6.2 → bathys-0.7.1}/npm/bathys-mcp/.remember/logs/memory-2026-09-08.log +5 -0
  10. {bathys-0.6.2 → bathys-0.7.1}/pyproject.toml +1 -1
  11. {bathys-0.6.2 → bathys-0.7.1}/src/bathys/__init__.py +1 -1
  12. {bathys-0.6.2 → bathys-0.7.1}/src/bathys/config.py +2 -0
  13. {bathys-0.6.2 → bathys-0.7.1}/src/bathys/core.py +1 -1
  14. bathys-0.7.1/src/bathys/crawler.py +205 -0
  15. {bathys-0.6.2 → bathys-0.7.1}/src/bathys/installer.py +102 -17
  16. {bathys-0.6.2 → bathys-0.7.1}/src/bathys/server.py +12 -7
  17. {bathys-0.6.2 → bathys-0.7.1}/tests/test_installer.py +5 -3
  18. bathys-0.6.2/.remember/tmp/no-transcript-notice +0 -1
  19. bathys-0.6.2/src/bathys/crawler.py +0 -104
  20. {bathys-0.6.2 → bathys-0.7.1}/.github/workflows/ci.yml +0 -0
  21. {bathys-0.6.2 → bathys-0.7.1}/.gitignore +0 -0
  22. {bathys-0.6.2 → bathys-0.7.1}/.remember/.gitignore +0 -0
  23. {bathys-0.6.2 → bathys-0.7.1}/.remember/logs/hook-errors.log +0 -0
  24. {bathys-0.6.2 → bathys-0.7.1}/.remember/logs/memory-2026-09-06.log +0 -0
  25. {bathys-0.6.2 → bathys-0.7.1}/.remember/logs/memory-2026-09-07.log +0 -0
  26. {bathys-0.6.2 → bathys-0.7.1}/.remember/tmp/capture-gap-skipped +0 -0
  27. {bathys-0.6.2 → bathys-0.7.1}/.remember/tmp/case-divergence +0 -0
  28. {bathys-0.6.2 → bathys-0.7.1}/.remember/tmp/post-tool-ran +0 -0
  29. {bathys-0.6.2 → bathys-0.7.1}/.remember/tmp/session-slug +0 -0
  30. {bathys-0.6.2 → bathys-0.7.1}/Dockerfile +0 -0
  31. {bathys-0.6.2 → bathys-0.7.1}/LICENSE +0 -0
  32. {bathys-0.6.2 → bathys-0.7.1}/agents/HARNESS-DROPIN.md +0 -0
  33. {bathys-0.6.2 → bathys-0.7.1}/agents/bathys-researcher.md +0 -0
  34. {bathys-0.6.2 → bathys-0.7.1}/agents/skills/bathys-deep-dive/SKILL.md +0 -0
  35. {bathys-0.6.2 → bathys-0.7.1}/agents/skills/bathys-source-audit/SKILL.md +0 -0
  36. {bathys-0.6.2 → bathys-0.7.1}/docs/adr/0001-python-crawl4ai.md +0 -0
  37. {bathys-0.6.2 → bathys-0.7.1}/docs/adr/0002-pin-mcp-sdk-v1.md +0 -0
  38. {bathys-0.6.2 → bathys-0.7.1}/docs/adr/0003-self-managed-searxng.md +0 -0
  39. {bathys-0.6.2 → bathys-0.7.1}/docs/adr/0004-bm25-distillation.md +0 -0
  40. {bathys-0.6.2 → bathys-0.7.1}/docs/adr/0005-cache-raw-before-distill.md +0 -0
  41. {bathys-0.6.2 → bathys-0.7.1}/docs/adr/0006-three-tool-string-surface.md +0 -0
  42. {bathys-0.6.2 → bathys-0.7.1}/docs/architecture/data-flow.md +0 -0
  43. {bathys-0.6.2 → bathys-0.7.1}/docs/architecture/overview.md +0 -0
  44. {bathys-0.6.2 → bathys-0.7.1}/docs/architecture/pipeline.md +0 -0
  45. {bathys-0.6.2 → bathys-0.7.1}/docs/assets/banner.svg +0 -0
  46. {bathys-0.6.2 → bathys-0.7.1}/docs/contracts/mcp-tools.md +0 -0
  47. {bathys-0.6.2 → bathys-0.7.1}/docs/contracts/module-contracts.md +0 -0
  48. {bathys-0.6.2 → bathys-0.7.1}/docs/contracts/output-format.md +0 -0
  49. {bathys-0.6.2 → bathys-0.7.1}/docs/getting-started/cases.md +0 -0
  50. {bathys-0.6.2 → bathys-0.7.1}/docs/getting-started/install.md +0 -0
  51. {bathys-0.6.2 → bathys-0.7.1}/docs/getting-started/integrate.md +0 -0
  52. {bathys-0.6.2 → bathys-0.7.1}/docs/index.md +0 -0
  53. {bathys-0.6.2 → bathys-0.7.1}/docs/integrations/claude-code.md +0 -0
  54. {bathys-0.6.2 → bathys-0.7.1}/docs/integrations/cursor.md +0 -0
  55. {bathys-0.6.2 → bathys-0.7.1}/docs/integrations/generic-mcp.md +0 -0
  56. {bathys-0.6.2 → bathys-0.7.1}/docs/integrations/overview.md +0 -0
  57. {bathys-0.6.2 → bathys-0.7.1}/docs/integrations/zcode.md +0 -0
  58. {bathys-0.6.2 → bathys-0.7.1}/docs/meta/glossary.md +0 -0
  59. {bathys-0.6.2 → bathys-0.7.1}/docs/meta/style-guide.md +0 -0
  60. {bathys-0.6.2 → bathys-0.7.1}/docs/operations/metrics.md +0 -0
  61. {bathys-0.6.2 → bathys-0.7.1}/docs/operations/runbook.md +0 -0
  62. {bathys-0.6.2 → bathys-0.7.1}/docs/product/charter.md +0 -0
  63. {bathys-0.6.2 → bathys-0.7.1}/docs/product/competitive.md +0 -0
  64. {bathys-0.6.2 → bathys-0.7.1}/docs/product/features.md +0 -0
  65. {bathys-0.6.2 → bathys-0.7.1}/docs/product/mind-initiative.md +0 -0
  66. {bathys-0.6.2 → bathys-0.7.1}/docs/product/ocr-initiative.md +0 -0
  67. {bathys-0.6.2 → bathys-0.7.1}/docs/product/roadmap.md +0 -0
  68. {bathys-0.6.2 → bathys-0.7.1}/integrations/README.md +0 -0
  69. {bathys-0.6.2 → bathys-0.7.1}/integrations/hermes/README.md +0 -0
  70. {bathys-0.6.2 → bathys-0.7.1}/integrations/hermes/install.py +0 -0
  71. {bathys-0.6.2 → bathys-0.7.1}/integrations/pi/README.md +0 -0
  72. {bathys-0.6.2 → bathys-0.7.1}/integrations/pi/assets/bathys-rules.md +0 -0
  73. {bathys-0.6.2 → bathys-0.7.1}/integrations/zcode/README.md +0 -0
  74. {bathys-0.6.2 → bathys-0.7.1}/npm/bathys-mcp/.remember/.gitignore +0 -0
  75. {bathys-0.6.2 → bathys-0.7.1}/npm/bathys-mcp/.remember/logs/hook-errors.log +0 -0
  76. {bathys-0.6.2 → bathys-0.7.1}/npm/bathys-mcp/.remember/tmp/no-transcript-notice +0 -0
  77. {bathys-0.6.2 → bathys-0.7.1}/npm/bathys-mcp/.remember/tmp/post-tool-ran +0 -0
  78. {bathys-0.6.2 → bathys-0.7.1}/npm/bathys-mcp/README.md +0 -0
  79. {bathys-0.6.2 → bathys-0.7.1}/npm/bathys-mcp/bin/cli.js +0 -0
  80. {bathys-0.6.2 → bathys-0.7.1}/npm/bathys-mcp/bin/postinstall.js +0 -0
  81. {bathys-0.6.2 → bathys-0.7.1}/npm/bathys-mcp/package.json +0 -0
  82. {bathys-0.6.2 → bathys-0.7.1}/scripts/acceptance_v02.py +0 -0
  83. {bathys-0.6.2 → bathys-0.7.1}/scripts/batch_check.py +0 -0
  84. {bathys-0.6.2 → bathys-0.7.1}/scripts/metrics_report.py +0 -0
  85. {bathys-0.6.2 → bathys-0.7.1}/scripts/smoke.py +0 -0
  86. {bathys-0.6.2 → bathys-0.7.1}/scripts/stdio_check.py +0 -0
  87. {bathys-0.6.2 → bathys-0.7.1}/src/bathys/batch.py +0 -0
  88. {bathys-0.6.2 → bathys-0.7.1}/src/bathys/cache.py +0 -0
  89. {bathys-0.6.2 → bathys-0.7.1}/src/bathys/compose.yaml +0 -0
  90. {bathys-0.6.2 → bathys-0.7.1}/src/bathys/distill.py +0 -0
  91. {bathys-0.6.2 → bathys-0.7.1}/src/bathys/doctor.py +0 -0
  92. {bathys-0.6.2 → bathys-0.7.1}/src/bathys/searx.py +0 -0
  93. {bathys-0.6.2 → bathys-0.7.1}/src/bathys/searxng-settings.yml +0 -0
  94. {bathys-0.6.2 → bathys-0.7.1}/src/bathys/services.py +0 -0
  95. {bathys-0.6.2 → bathys-0.7.1}/tests/test_batch.py +0 -0
  96. {bathys-0.6.2 → bathys-0.7.1}/tests/test_cache.py +0 -0
  97. {bathys-0.6.2 → bathys-0.7.1}/tests/test_config.py +0 -0
  98. {bathys-0.6.2 → bathys-0.7.1}/tests/test_core.py +0 -0
  99. {bathys-0.6.2 → bathys-0.7.1}/tests/test_distill.py +0 -0
  100. {bathys-0.6.2 → bathys-0.7.1}/tests/test_searx.py +0 -0
  101. {bathys-0.6.2 → bathys-0.7.1}/tests/test_v04.py +0 -0
@@ -163,3 +163,53 @@
163
163
  12:45:40 [hook] post-tool: PROJECT_DIR=/var/home/abyss/LABs/MCP/deepreserch PIPELINE_DIR=/var/home/abyss/.distrobox/ubuntu/home/.zcode/cli/plugins/cache/claude-plugins-official/remember/0.20.0 PYTHON=python3 REMEMBER_DIR=/var/home/abyss/LABs/MCP/deepreserch/.remember
164
164
  12:45:43 [hook] post-tool: PROJECT_DIR=/var/home/abyss/LABs/MCP/deepreserch PIPELINE_DIR=/var/home/abyss/.distrobox/ubuntu/home/.zcode/cli/plugins/cache/claude-plugins-official/remember/0.20.0 PYTHON=python3 REMEMBER_DIR=/var/home/abyss/LABs/MCP/deepreserch/.remember
165
165
  12:45:47 [hook] post-tool: PROJECT_DIR=/var/home/abyss/LABs/MCP/deepreserch PIPELINE_DIR=/var/home/abyss/.distrobox/ubuntu/home/.zcode/cli/plugins/cache/claude-plugins-official/remember/0.20.0 PYTHON=python3 REMEMBER_DIR=/var/home/abyss/LABs/MCP/deepreserch/.remember
166
+ 12:45:52 [hook] post-tool: PROJECT_DIR=/var/home/abyss/LABs/MCP/deepreserch PIPELINE_DIR=/var/home/abyss/.distrobox/ubuntu/home/.zcode/cli/plugins/cache/claude-plugins-official/remember/0.20.0 PYTHON=python3 REMEMBER_DIR=/var/home/abyss/LABs/MCP/deepreserch/.remember
167
+ 12:46:09 [hook] post-tool: PROJECT_DIR=/var/home/abyss/LABs/MCP/deepreserch PIPELINE_DIR=/var/home/abyss/.distrobox/ubuntu/home/.zcode/cli/plugins/cache/claude-plugins-official/remember/0.20.0 PYTHON=python3 REMEMBER_DIR=/var/home/abyss/LABs/MCP/deepreserch/.remember
168
+ 12:47:02 [hook] post-tool: PROJECT_DIR=/var/home/abyss/LABs/MCP/deepreserch PIPELINE_DIR=/var/home/abyss/.distrobox/ubuntu/home/.zcode/cli/plugins/cache/claude-plugins-official/remember/0.20.0 PYTHON=python3 REMEMBER_DIR=/var/home/abyss/LABs/MCP/deepreserch/.remember
169
+ 12:47:14 [hook] post-tool: PROJECT_DIR=/var/home/abyss/LABs/MCP/deepreserch PIPELINE_DIR=/var/home/abyss/.distrobox/ubuntu/home/.zcode/cli/plugins/cache/claude-plugins-official/remember/0.20.0 PYTHON=python3 REMEMBER_DIR=/var/home/abyss/LABs/MCP/deepreserch/.remember
170
+ 12:47:17 [hook] post-tool: PROJECT_DIR=/var/home/abyss/LABs/MCP/deepreserch PIPELINE_DIR=/var/home/abyss/.distrobox/ubuntu/home/.zcode/cli/plugins/cache/claude-plugins-official/remember/0.20.0 PYTHON=python3 REMEMBER_DIR=/var/home/abyss/LABs/MCP/deepreserch/.remember
171
+ 12:47:20 [hook] post-tool: PROJECT_DIR=/var/home/abyss/LABs/MCP/deepreserch PIPELINE_DIR=/var/home/abyss/.distrobox/ubuntu/home/.zcode/cli/plugins/cache/claude-plugins-official/remember/0.20.0 PYTHON=python3 REMEMBER_DIR=/var/home/abyss/LABs/MCP/deepreserch/.remember
172
+ 12:47:25 [hook] post-tool: PROJECT_DIR=/var/home/abyss/LABs/MCP/deepreserch PIPELINE_DIR=/var/home/abyss/.distrobox/ubuntu/home/.zcode/cli/plugins/cache/claude-plugins-official/remember/0.20.0 PYTHON=python3 REMEMBER_DIR=/var/home/abyss/LABs/MCP/deepreserch/.remember
173
+ 12:47:31 [hook] post-tool: PROJECT_DIR=/var/home/abyss/LABs/MCP/deepreserch PIPELINE_DIR=/var/home/abyss/.distrobox/ubuntu/home/.zcode/cli/plugins/cache/claude-plugins-official/remember/0.20.0 PYTHON=python3 REMEMBER_DIR=/var/home/abyss/LABs/MCP/deepreserch/.remember
174
+ 12:47:50 [hook] post-tool: PROJECT_DIR=/var/home/abyss/LABs/MCP/deepreserch PIPELINE_DIR=/var/home/abyss/.distrobox/ubuntu/home/.zcode/cli/plugins/cache/claude-plugins-official/remember/0.20.0 PYTHON=python3 REMEMBER_DIR=/var/home/abyss/LABs/MCP/deepreserch/.remember
175
+ 13:37:33 [hook] session-start: PROJECT_DIR=/var/home/abyss/LABs/MCP/deepreserch PIPELINE_DIR=/var/home/abyss/.distrobox/ubuntu/home/.zcode/cli/plugins/cache/claude-plugins-official/remember/0.20.0 REMEMBER_DIR=/var/home/abyss/LABs/MCP/deepreserch/.remember
176
+ 13:37:33 [hook] session-start: capture-gap check skipped — no session_id on stdin
177
+ 13:54:37 [hook] post-tool: PROJECT_DIR=/var/home/abyss/LABs/MCP/deepreserch PIPELINE_DIR=/var/home/abyss/.distrobox/ubuntu/home/.zcode/cli/plugins/cache/claude-plugins-official/remember/0.20.0 PYTHON=python3 REMEMBER_DIR=/var/home/abyss/LABs/MCP/deepreserch/.remember
178
+ 13:54:37 [hook] WARNING: no session dir for this project: /var/home/abyss/.distrobox/ubuntu/home/.claude/projects/-var-home-abyss-LABs-MCP-deepreserch (slug of /var/home/abyss/LABs/MCP/deepreserch). Memory cannot save until it matches a directory under /var/home/abyss/.distrobox/ubuntu/home/.claude/projects/
179
+ 13:54:43 [hook] post-tool: PROJECT_DIR=/var/home/abyss/LABs/MCP/deepreserch PIPELINE_DIR=/var/home/abyss/.distrobox/ubuntu/home/.zcode/cli/plugins/cache/claude-plugins-official/remember/0.20.0 PYTHON=python3 REMEMBER_DIR=/var/home/abyss/LABs/MCP/deepreserch/.remember
180
+ 13:54:59 [hook] post-tool: PROJECT_DIR=/var/home/abyss/LABs/MCP/deepreserch PIPELINE_DIR=/var/home/abyss/.distrobox/ubuntu/home/.zcode/cli/plugins/cache/claude-plugins-official/remember/0.20.0 PYTHON=python3 REMEMBER_DIR=/var/home/abyss/LABs/MCP/deepreserch/.remember
181
+ 13:55:07 [hook] post-tool: PROJECT_DIR=/var/home/abyss/LABs/MCP/deepreserch PIPELINE_DIR=/var/home/abyss/.distrobox/ubuntu/home/.zcode/cli/plugins/cache/claude-plugins-official/remember/0.20.0 PYTHON=python3 REMEMBER_DIR=/var/home/abyss/LABs/MCP/deepreserch/.remember
182
+ 13:55:17 [hook] post-tool: PROJECT_DIR=/var/home/abyss/LABs/MCP/deepreserch PIPELINE_DIR=/var/home/abyss/.distrobox/ubuntu/home/.zcode/cli/plugins/cache/claude-plugins-official/remember/0.20.0 PYTHON=python3 REMEMBER_DIR=/var/home/abyss/LABs/MCP/deepreserch/.remember
183
+ 13:55:27 [hook] post-tool: PROJECT_DIR=/var/home/abyss/LABs/MCP/deepreserch PIPELINE_DIR=/var/home/abyss/.distrobox/ubuntu/home/.zcode/cli/plugins/cache/claude-plugins-official/remember/0.20.0 PYTHON=python3 REMEMBER_DIR=/var/home/abyss/LABs/MCP/deepreserch/.remember
184
+ 13:55:33 [hook] post-tool: PROJECT_DIR=/var/home/abyss/LABs/MCP/deepreserch PIPELINE_DIR=/var/home/abyss/.distrobox/ubuntu/home/.zcode/cli/plugins/cache/claude-plugins-official/remember/0.20.0 PYTHON=python3 REMEMBER_DIR=/var/home/abyss/LABs/MCP/deepreserch/.remember
185
+ 13:56:11 [hook] post-tool: PROJECT_DIR=/var/home/abyss/LABs/MCP/deepreserch PIPELINE_DIR=/var/home/abyss/.distrobox/ubuntu/home/.zcode/cli/plugins/cache/claude-plugins-official/remember/0.20.0 PYTHON=python3 REMEMBER_DIR=/var/home/abyss/LABs/MCP/deepreserch/.remember
186
+ 13:56:25 [hook] post-tool: PROJECT_DIR=/var/home/abyss/LABs/MCP/deepreserch PIPELINE_DIR=/var/home/abyss/.distrobox/ubuntu/home/.zcode/cli/plugins/cache/claude-plugins-official/remember/0.20.0 PYTHON=python3 REMEMBER_DIR=/var/home/abyss/LABs/MCP/deepreserch/.remember
187
+ 13:56:37 [hook] post-tool: PROJECT_DIR=/var/home/abyss/LABs/MCP/deepreserch PIPELINE_DIR=/var/home/abyss/.distrobox/ubuntu/home/.zcode/cli/plugins/cache/claude-plugins-official/remember/0.20.0 PYTHON=python3 REMEMBER_DIR=/var/home/abyss/LABs/MCP/deepreserch/.remember
188
+ 13:56:50 [hook] post-tool: PROJECT_DIR=/var/home/abyss/LABs/MCP/deepreserch PIPELINE_DIR=/var/home/abyss/.distrobox/ubuntu/home/.zcode/cli/plugins/cache/claude-plugins-official/remember/0.20.0 PYTHON=python3 REMEMBER_DIR=/var/home/abyss/LABs/MCP/deepreserch/.remember
189
+ 13:56:58 [hook] post-tool: PROJECT_DIR=/var/home/abyss/LABs/MCP/deepreserch PIPELINE_DIR=/var/home/abyss/.distrobox/ubuntu/home/.zcode/cli/plugins/cache/claude-plugins-official/remember/0.20.0 PYTHON=python3 REMEMBER_DIR=/var/home/abyss/LABs/MCP/deepreserch/.remember
190
+ 13:57:00 [hook] post-tool: PROJECT_DIR=/var/home/abyss/LABs/MCP/deepreserch PIPELINE_DIR=/var/home/abyss/.distrobox/ubuntu/home/.zcode/cli/plugins/cache/claude-plugins-official/remember/0.20.0 PYTHON=python3 REMEMBER_DIR=/var/home/abyss/LABs/MCP/deepreserch/.remember
191
+ 13:57:08 [hook] post-tool: PROJECT_DIR=/var/home/abyss/LABs/MCP/deepreserch PIPELINE_DIR=/var/home/abyss/.distrobox/ubuntu/home/.zcode/cli/plugins/cache/claude-plugins-official/remember/0.20.0 PYTHON=python3 REMEMBER_DIR=/var/home/abyss/LABs/MCP/deepreserch/.remember
192
+ 13:57:16 [hook] post-tool: PROJECT_DIR=/var/home/abyss/LABs/MCP/deepreserch PIPELINE_DIR=/var/home/abyss/.distrobox/ubuntu/home/.zcode/cli/plugins/cache/claude-plugins-official/remember/0.20.0 PYTHON=python3 REMEMBER_DIR=/var/home/abyss/LABs/MCP/deepreserch/.remember
193
+ 13:57:22 [hook] post-tool: PROJECT_DIR=/var/home/abyss/LABs/MCP/deepreserch PIPELINE_DIR=/var/home/abyss/.distrobox/ubuntu/home/.zcode/cli/plugins/cache/claude-plugins-official/remember/0.20.0 PYTHON=python3 REMEMBER_DIR=/var/home/abyss/LABs/MCP/deepreserch/.remember
194
+ 13:57:36 [hook] post-tool: PROJECT_DIR=/var/home/abyss/LABs/MCP/deepreserch PIPELINE_DIR=/var/home/abyss/.distrobox/ubuntu/home/.zcode/cli/plugins/cache/claude-plugins-official/remember/0.20.0 PYTHON=python3 REMEMBER_DIR=/var/home/abyss/LABs/MCP/deepreserch/.remember
195
+ 13:57:42 [hook] post-tool: PROJECT_DIR=/var/home/abyss/LABs/MCP/deepreserch PIPELINE_DIR=/var/home/abyss/.distrobox/ubuntu/home/.zcode/cli/plugins/cache/claude-plugins-official/remember/0.20.0 PYTHON=python3 REMEMBER_DIR=/var/home/abyss/LABs/MCP/deepreserch/.remember
196
+ 13:57:52 [hook] post-tool: PROJECT_DIR=/var/home/abyss/LABs/MCP/deepreserch PIPELINE_DIR=/var/home/abyss/.distrobox/ubuntu/home/.zcode/cli/plugins/cache/claude-plugins-official/remember/0.20.0 PYTHON=python3 REMEMBER_DIR=/var/home/abyss/LABs/MCP/deepreserch/.remember
197
+ 13:58:04 [hook] post-tool: PROJECT_DIR=/var/home/abyss/LABs/MCP/deepreserch PIPELINE_DIR=/var/home/abyss/.distrobox/ubuntu/home/.zcode/cli/plugins/cache/claude-plugins-official/remember/0.20.0 PYTHON=python3 REMEMBER_DIR=/var/home/abyss/LABs/MCP/deepreserch/.remember
198
+ 13:58:16 [hook] post-tool: PROJECT_DIR=/var/home/abyss/LABs/MCP/deepreserch PIPELINE_DIR=/var/home/abyss/.distrobox/ubuntu/home/.zcode/cli/plugins/cache/claude-plugins-official/remember/0.20.0 PYTHON=python3 REMEMBER_DIR=/var/home/abyss/LABs/MCP/deepreserch/.remember
199
+ 13:58:27 [hook] post-tool: PROJECT_DIR=/var/home/abyss/LABs/MCP/deepreserch PIPELINE_DIR=/var/home/abyss/.distrobox/ubuntu/home/.zcode/cli/plugins/cache/claude-plugins-official/remember/0.20.0 PYTHON=python3 REMEMBER_DIR=/var/home/abyss/LABs/MCP/deepreserch/.remember
200
+ 13:58:39 [hook] post-tool: PROJECT_DIR=/var/home/abyss/LABs/MCP/deepreserch PIPELINE_DIR=/var/home/abyss/.distrobox/ubuntu/home/.zcode/cli/plugins/cache/claude-plugins-official/remember/0.20.0 PYTHON=python3 REMEMBER_DIR=/var/home/abyss/LABs/MCP/deepreserch/.remember
201
+ 13:58:47 [hook] post-tool: PROJECT_DIR=/var/home/abyss/LABs/MCP/deepreserch PIPELINE_DIR=/var/home/abyss/.distrobox/ubuntu/home/.zcode/cli/plugins/cache/claude-plugins-official/remember/0.20.0 PYTHON=python3 REMEMBER_DIR=/var/home/abyss/LABs/MCP/deepreserch/.remember
202
+ 14:16:47 [hook] post-tool: PROJECT_DIR=/var/home/abyss/LABs/MCP/deepreserch PIPELINE_DIR=/var/home/abyss/.distrobox/ubuntu/home/.zcode/cli/plugins/cache/claude-plugins-official/remember/0.20.0 PYTHON=python3 REMEMBER_DIR=/var/home/abyss/LABs/MCP/deepreserch/.remember
203
+ 14:16:53 [hook] post-tool: PROJECT_DIR=/var/home/abyss/LABs/MCP/deepreserch PIPELINE_DIR=/var/home/abyss/.distrobox/ubuntu/home/.zcode/cli/plugins/cache/claude-plugins-official/remember/0.20.0 PYTHON=python3 REMEMBER_DIR=/var/home/abyss/LABs/MCP/deepreserch/.remember
204
+ 14:17:02 [hook] post-tool: PROJECT_DIR=/var/home/abyss/LABs/MCP/deepreserch PIPELINE_DIR=/var/home/abyss/.distrobox/ubuntu/home/.zcode/cli/plugins/cache/claude-plugins-official/remember/0.20.0 PYTHON=python3 REMEMBER_DIR=/var/home/abyss/LABs/MCP/deepreserch/.remember
205
+ 14:31:07 [hook] post-tool: PROJECT_DIR=/var/home/abyss/LABs/MCP/deepreserch PIPELINE_DIR=/var/home/abyss/.distrobox/ubuntu/home/.zcode/cli/plugins/cache/claude-plugins-official/remember/0.20.0 PYTHON=python3 REMEMBER_DIR=/var/home/abyss/LABs/MCP/deepreserch/.remember
206
+ 14:31:19 [hook] post-tool: PROJECT_DIR=/var/home/abyss/LABs/MCP/deepreserch PIPELINE_DIR=/var/home/abyss/.distrobox/ubuntu/home/.zcode/cli/plugins/cache/claude-plugins-official/remember/0.20.0 PYTHON=python3 REMEMBER_DIR=/var/home/abyss/LABs/MCP/deepreserch/.remember
207
+ 14:31:39 [hook] post-tool: PROJECT_DIR=/var/home/abyss/LABs/MCP/deepreserch PIPELINE_DIR=/var/home/abyss/.distrobox/ubuntu/home/.zcode/cli/plugins/cache/claude-plugins-official/remember/0.20.0 PYTHON=python3 REMEMBER_DIR=/var/home/abyss/LABs/MCP/deepreserch/.remember
208
+ 14:32:16 [hook] post-tool: PROJECT_DIR=/var/home/abyss/LABs/MCP/deepreserch PIPELINE_DIR=/var/home/abyss/.distrobox/ubuntu/home/.zcode/cli/plugins/cache/claude-plugins-official/remember/0.20.0 PYTHON=python3 REMEMBER_DIR=/var/home/abyss/LABs/MCP/deepreserch/.remember
209
+ 14:32:27 [hook] post-tool: PROJECT_DIR=/var/home/abyss/LABs/MCP/deepreserch PIPELINE_DIR=/var/home/abyss/.distrobox/ubuntu/home/.zcode/cli/plugins/cache/claude-plugins-official/remember/0.20.0 PYTHON=python3 REMEMBER_DIR=/var/home/abyss/LABs/MCP/deepreserch/.remember
210
+ 14:32:44 [hook] post-tool: PROJECT_DIR=/var/home/abyss/LABs/MCP/deepreserch PIPELINE_DIR=/var/home/abyss/.distrobox/ubuntu/home/.zcode/cli/plugins/cache/claude-plugins-official/remember/0.20.0 PYTHON=python3 REMEMBER_DIR=/var/home/abyss/LABs/MCP/deepreserch/.remember
211
+ 14:32:45 [hook] post-tool: PROJECT_DIR=/var/home/abyss/LABs/MCP/deepreserch PIPELINE_DIR=/var/home/abyss/.distrobox/ubuntu/home/.zcode/cli/plugins/cache/claude-plugins-official/remember/0.20.0 PYTHON=python3 REMEMBER_DIR=/var/home/abyss/LABs/MCP/deepreserch/.remember
212
+ 14:33:04 [hook] post-tool: PROJECT_DIR=/var/home/abyss/LABs/MCP/deepreserch PIPELINE_DIR=/var/home/abyss/.distrobox/ubuntu/home/.zcode/cli/plugins/cache/claude-plugins-official/remember/0.20.0 PYTHON=python3 REMEMBER_DIR=/var/home/abyss/LABs/MCP/deepreserch/.remember
213
+ 14:33:05 [hook] post-tool: PROJECT_DIR=/var/home/abyss/LABs/MCP/deepreserch PIPELINE_DIR=/var/home/abyss/.distrobox/ubuntu/home/.zcode/cli/plugins/cache/claude-plugins-official/remember/0.20.0 PYTHON=python3 REMEMBER_DIR=/var/home/abyss/LABs/MCP/deepreserch/.remember
214
+ 14:33:20 [hook] post-tool: PROJECT_DIR=/var/home/abyss/LABs/MCP/deepreserch PIPELINE_DIR=/var/home/abyss/.distrobox/ubuntu/home/.zcode/cli/plugins/cache/claude-plugins-official/remember/0.20.0 PYTHON=python3 REMEMBER_DIR=/var/home/abyss/LABs/MCP/deepreserch/.remember
215
+ 14:33:32 [hook] post-tool: PROJECT_DIR=/var/home/abyss/LABs/MCP/deepreserch PIPELINE_DIR=/var/home/abyss/.distrobox/ubuntu/home/.zcode/cli/plugins/cache/claude-plugins-official/remember/0.20.0 PYTHON=python3 REMEMBER_DIR=/var/home/abyss/LABs/MCP/deepreserch/.remember
@@ -0,0 +1 @@
1
+ 1788864877
@@ -2,6 +2,28 @@
2
2
 
3
3
  Формат: Keep a Changelog; версии — semver. Дата — дата выпуска версии.
4
4
 
5
+ ## [0.7.1] — 2026-09-08
6
+
7
+ ### Добавлено
8
+
9
+ - **Однострочный установщик `install.sh`** — основной путь установки: `curl -fsSL https://raw.githubusercontent.com/Korrnals/bathys/main/install.sh | bash`. Приватный venv в `~/.local/share/bathys/venv` (решение против хрупкости `pip --user` между контейнерами и PEP 668), бутстрап pip через `get-pip.py` для минимальных образов, PATH прописывается в `.profile`/`.bashrc`, затем `bathys setup` и финальный `bathys-doctor`. Идемпотентен (повтор = обновление), без sudo, ничего вне `$HOME`. Живые прогоны: двойной (создание + идемпотентное обновление), setup прописал zcode+hermes с бэкапами, doctor 5/6 (бэкенд поднимается при первом вызове — норма).
10
+ - README: однострочник — основной путь Quick start; `pip install` + `bathys setup` — равноправная альтернатива «без скрипта»; npm/исходники — под катом.
11
+
12
+ ## [0.7.0] — 2026-09-08
13
+
14
+ Тема: «Ship & Setup» — двухъярусное извлечение без обязательного браузера и модульная установка.
15
+
16
+ ### Добавлено
17
+
18
+ - **Двухъярусное извлечение** (`crawler.py`): по умолчанию страницы читает собственный HTTP-движок (httpx, миллисекунды, ноль браузера); headless-Chromium включается автоматически только когда страница — JS-оболочка (детект: app-root-разметка, пустое тело, экранирование контента) или HTTP-ярус не смог. Замеры: Wikipedia 0.61 c, GitHub 1.0 c по HTTP против ~4–5 c с браузером. `BATHYS_BROWSER=off|auto|always` управляет режимом; браузер больше не обязательная зависимость запуска — `bathys setup` ставит его для JS-страниц, но сервер работает и без него.
19
+ - **`bathys setup`** — полная установка одним вызовом: браузерный движок (пропускается по `--skip-browser`) → интеграция всех найденных харнессов → субагент → итоговые подсказки. Идемпотентен; после `pip install bathys` пользователю достаточно `bathys setup`.
20
+ - **Точечная установка `bathys install <HARNESS>`**: `bathys install hermes` пишет только Hermes, отсутствующий конфиг целевого харнесса создаётся с нуля (проверено: opencode-конфиг создан в его формате); `--list` печатает все таргеты с их путями и статусом; неизвестное имя — понятная ошибка.
21
+
22
+ ### Изменено
23
+
24
+ - README: идентичность переписана («самостоятельный продукт, а не обёртка над чужими сервисами: реализует весь конвейер сам»); основной путь установки — `pip install bathys` + `bathys setup`, альтернативы (npm, исходники, минимальные образы) и ручное подключение убраны под `<details>`-каты.
25
+ - Синтаксис вызова диспетчера: `bathys` (сервер) / `bathys setup` / `bathys install [targets]` / `bathys doctor`; справка `--help` обновлена.
26
+
5
27
  ## [0.6.2] — 2026-09-08
6
28
 
7
29
  Публикационная волна: PyPI + NPM + кастомные интеграции.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: bathys
3
- Version: 0.6.2
3
+ Version: 0.7.1
4
4
  Summary: Unified local deep-research search service for AI agents — one pipeline (search → extraction → query distillation → cache), zero cloud quotas. MCP stdio server with native harness integration (bathys install).
5
5
  Project-URL: Homepage, https://github.com/Korrnals/bathys
6
6
  Project-URL: Repository, https://github.com/Korrnals/bathys
@@ -28,31 +28,43 @@ Description-Content-Type: text/markdown
28
28
 
29
29
  # Bathys
30
30
 
31
- **Единый локальный поисковый сервис глубокого ресёрча для ИИ-агентов.** Один процесс владеет всем конвейером — поиск → извлечение → дистилляция под запрос → кэш — и всей стратегией ресёрча: что искать, какие страницы читать, сколько вернуть. Агент видит лишь интерфейс из четырёх MCP-инструментов; SearXNG и Crawl4AI работают внутри как сменные движки. Облачных квот и API-ключей нет, LLM внутри нет — дистилляция детерминированная (BM25).
31
+ **Единый локальный поисковый сервис глубокого ресёрча для ИИ-агентов.** Это самостоятельный продукт, а не обёртка над чужими сервисами: Bathys реализует весь конвейер сам — метапоиск с дедупликацией и живучестью к блокировкам, двухъярусное извлечение (HTTP-движок по умолчанию, headless-браузер только для JS-страниц), пятистадийную дистилляцию под запрос с жёсткими бюджетами, TTL-кэш сырца, robots-этику, метрики и диагностику. Метапоиск и извлечение оформлены как сменные внутренние движки (SearXNG, Crawl4AI) — их можно заменить, продукт останется Bathys. Облачных квот нет; LLM внутри нет — синтез остаётся за вызывающим агентом, дистилляция детерминированная (BM25).
32
32
 
33
33
  Сонар находит координаты, батискаф ныряет за полными текстами, дистиллятор поднимает на палубу только то, что отвечает на вопрос.
34
34
 
35
35
  ![python](https://img.shields.io/badge/python-3.10%2B-blue)
36
- ![version](https://img.shields.io/badge/version-0.6.2-9cf)
36
+ ![version](https://img.shields.io/badge/version-0.7.1-9cf)
37
37
  ![mcp](https://img.shields.io/badge/MCP-stdio%20server-6f42c1)
38
38
  ![license](https://img.shields.io/badge/license-MIT-green)
39
39
 
40
40
  ## ⚡ Quick start
41
41
 
42
- **Из PyPI** (основной путь — Python ≥ 3.10):
42
+ **Одной командой** (Python ≥ 3.10; приватный venv, без sudo, идемпотентно):
43
43
 
44
44
  ```bash
45
- pip install bathys # сервер + команды bathys/bathys-doctor
46
- python -m playwright install chromium # браузер для извлечения
47
- bathys install # автоподключение к найденным харнессам
48
- bathys-doctor # диагностика стека одним запуском
45
+ curl -fsSL https://raw.githubusercontent.com/Korrnals/bathys/main/install.sh | bash
49
46
  ```
50
47
 
51
- **Из npm** (для Node-first окружений — обёртка ставит Python-пакет сама):
48
+ Скрипт ставит пакет с PyPI в `~/.local/share/bathys/venv`, прописывает PATH, запускает `bathys setup` (браузер для JS-страниц → все найденные харнессы → субагент) и финальный `bathys-doctor`. Повторный запуск — безопасное обновление.
49
+
50
+ **Без скрипта** (то же самое вручную, для тех кто предпочитает pip):
51
+
52
+ ```bash
53
+ pip install bathys # пакет: сервер + bathys setup/install/doctor
54
+ bathys setup # браузер → харнессы → субагент
55
+ bathys doctor # самодиагностика стека
56
+ ```
57
+
58
+ SearXNG ставить руками не нужно: бэкенд поднимется сам при первом поиске (внешний инстанс → docker → нативный режим). Браузер нужен только для JS-страниц: обычные страницы Bathys читает собственным HTTP-движком, `BATHYS_BROWSER=off` отключает браузерный ярус полностью.
59
+
60
+ <details>
61
+ <summary><b>Альтернативные пути установки</b> (npm, исходники, минимальные образы)</summary>
62
+
63
+ **npm** (Node-first окружения — обёртка ставит Python-пакет сама):
52
64
 
53
65
  ```bash
54
66
  npm install -g bathys-mcp
55
- bathys-mcp install
67
+ bathys-mcp setup
56
68
  ```
57
69
 
58
70
  **Из исходников** (разработка):
@@ -60,32 +72,40 @@ bathys-mcp install
60
72
  ```bash
61
73
  git clone https://github.com/Korrnals/bathys.git && cd bathys
62
74
  python3.12 -m venv .venv && .venv/bin/pip install -e .
63
- .venv/bin/python -m playwright install chromium
64
- .venv/bin/python -m unittest discover -s tests # юнит-тесты без сети, ~0.1 c
75
+ .venv/bin/bathys setup
76
+ .venv/bin/python -m unittest discover -s tests # юнит-тесты без сети
65
77
  ```
66
78
 
67
- В минимальном контейнерном образе без `ensurepip` venv собирается через `get-pip.py` — ветка в [docs/getting-started/install.md](docs/getting-started/install.md). SearXNG поднимать руками не нужно: при первом поиске сервер сам пробует внешний инстанс, затем docker/podman, затем нативный режим ([docs/getting-started/configure.md](docs/getting-started/configure.md)).
79
+ В минимальном контейнерном образе без `ensurepip` venv собирается через `get-pip.py` — ветка в [docs/getting-started/install.md](docs/getting-started/install.md).
80
+
81
+ </details>
68
82
 
69
83
  ## 🔌 Подключение к харнессу
70
84
 
71
- **Автоматически.** Одна команда найдёт харнессы по стандартным путям, пропишет сервер с бэкапом конфига и (с `--with-agent`) скопирует субагента:
85
+ **Автоматически — весь стек:** `bathys setup` (см. выше) прописывает сервер во все найденные харнессы.
86
+
87
+ **Точечно — когда нужно именно здесь:**
72
88
 
73
89
  ```bash
74
- .venv/bin/bathys install # сначала --dry-run, чтобы увидеть план
90
+ bathys install # автодетект всех установленных харнессов
91
+ bathys install hermes # только Hermes (отсутствующий конфиг создастся)
92
+ bathys install --list # все поддерживаемые таргеты
93
+ bathys install --print-config # готовые блоки для ручной вставки
75
94
  ```
76
95
 
77
- Детектируются zcode, Claude Code, Claude Desktop, Cursor, VS Code-семейство (Cline / Roo Code / Kilo Code), Gemini CLI, Windsurf, Zed, opencode, goose, Hermes; форматы каждого — свои (JSON-схемы и YAML-контуры goose/hermes), запись идемпотентна. Для Pi (badlogic pi-mono), у которого нет MCP-конфига, — дроп-ин в `AGENTS.md`. Поддерживаются `--print-config` (готовые блоки для ручной вставки) и `--searxng-home <путь>`; кастомные интеграции — в каталоге [integrations/](integrations/).
96
+ Детектируются zcode, Claude Code, Claude Desktop, Cursor, VS Code-семейство (Cline / Roo Code / Kilo Code), Gemini CLI, Windsurf, Zed, opencode, goose, Hermes; форматы каждого — свои (JSON-схемы и YAML-контуры goose/hermes), запись идемпотентна с бэкапом. Для Pi (badlogic pi-mono), у которого нет MCP-конфига, — дроп-ин в `AGENTS.md`. Кастомные интеграции — в каталоге [integrations/](integrations/).
78
97
 
79
- **Вручную.** Bathys — stdio MCP-сервер, конфиг везде один и тот же блок `mcpServers`; от харнесса зависит только файл, в который его кладут. `command` — абсолютный путь к вашему клону (`~` внутри JSON не раскрывается); `BATHYS_SEARXNG_HOME` опциональна.
98
+ <details>
99
+ <summary><b>Ручное подключение</b> (когда правите конфиги сами)</summary>
100
+
101
+ Bathys — stdio MCP-сервер: блок `mcpServers` один и тот же везде, от харнесса зависит только файл, в который его кладут. `command` — абсолютный путь к бинарнику (`~` внутри JSON не раскрывается); `BATHYS_SEARXNG_HOME` опциональна. Готовые блоки под каждый клиент: `bathys install --print-config`.
80
102
 
81
103
  ```json
82
104
  {
83
105
  "mcpServers": {
84
106
  "bathys": {
85
- "command": "/path/to/bathys/.venv/bin/bathys",
86
- "env": {
87
- "BATHYS_SEARXNG_HOME": "/path/to/bathys/.runtime/searxng-home"
88
- }
107
+ "command": "/path/to/bathys",
108
+ "env": { "BATHYS_SEARXNG_HOME": "/path/to/searxng-home" }
89
109
  }
90
110
  }
91
111
  }
@@ -98,6 +118,8 @@ python3.12 -m venv .venv && .venv/bin/pip install -e .
98
118
  | Cursor | [docs/integrations/cursor.md](docs/integrations/cursor.md) |
99
119
  | Любой другой MCP-клиент | [docs/integrations/generic-mcp.md](docs/integrations/generic-mcp.md) |
100
120
 
121
+ </details>
122
+
101
123
  ## 🧠 Научить агента работать эффективно
102
124
 
103
125
  Конфиг — только половина дела. Из коробки харнесс получает **instructions-playbook** (матрицу выбора инструментов), **annotations** и **три стратегии-промпта** — `bathys_deep_research`, `bathys_source_audit`, `bathys_fresh_scan`, — так что выбирает инструменты Bathys уже нативно. Сильнее — профиль: субагент [`agents/bathys-researcher.md`](agents/bathys-researcher.md) с двумя скиллами, которому глубокий ресёрч делегируется целиком; для клиентов, не показывающих MCP instructions, — дроп-ин [`agents/HARNESS-DROPIN.md`](agents/HARNESS-DROPIN.md) в `AGENTS.md` / `CLAUDE.md` / `.cursor/rules`.
@@ -166,7 +188,7 @@ docs/
166
188
 
167
189
  ## 📍 Статус
168
190
 
169
- **0.6.2.** Выпускная история: v0.2 «Качество выдачи» (ретраи, здоровье движков), v0.3 «Паритет с Tavily» (`read_urls`, JSON-режим), v0.4 «Эксплуатация» (robots-этика, метрики, `bathys-doctor`), v0.5 «Identity & Harness» (репозиционирование, промпты, субагент), v0.6 «Native Install» (`bathys install`) — итоги в [CHANGELOG.md](CHANGELOG.md).
191
+ **0.7.1.** Выпускная история: v0.2 «Качество выдачи» (ретраи, здоровье движков), v0.3 «Паритет с Tavily» (`read_urls`, JSON-режим), v0.4 «Эксплуатация» (robots-этика, метрики, `bathys-doctor`), v0.5 «Identity & Harness» (репозиционирование, промпты, субагент), v0.6 «Native Install» (`bathys install`) — итоги в [CHANGELOG.md](CHANGELOG.md).
170
192
 
171
193
  Репозиторий: `github.com/Korrnals/bathys`. До 1.0 остаются публикация пакета `bathys` на PyPI (имя свободно, публикация планируется к 1.0) и первый прогон Docker-образа; CI с matrix 3.10–3.12 уже в репозитории.
172
194
 
@@ -2,31 +2,43 @@
2
2
 
3
3
  # Bathys
4
4
 
5
- **Единый локальный поисковый сервис глубокого ресёрча для ИИ-агентов.** Один процесс владеет всем конвейером — поиск → извлечение → дистилляция под запрос → кэш — и всей стратегией ресёрча: что искать, какие страницы читать, сколько вернуть. Агент видит лишь интерфейс из четырёх MCP-инструментов; SearXNG и Crawl4AI работают внутри как сменные движки. Облачных квот и API-ключей нет, LLM внутри нет — дистилляция детерминированная (BM25).
5
+ **Единый локальный поисковый сервис глубокого ресёрча для ИИ-агентов.** Это самостоятельный продукт, а не обёртка над чужими сервисами: Bathys реализует весь конвейер сам — метапоиск с дедупликацией и живучестью к блокировкам, двухъярусное извлечение (HTTP-движок по умолчанию, headless-браузер только для JS-страниц), пятистадийную дистилляцию под запрос с жёсткими бюджетами, TTL-кэш сырца, robots-этику, метрики и диагностику. Метапоиск и извлечение оформлены как сменные внутренние движки (SearXNG, Crawl4AI) — их можно заменить, продукт останется Bathys. Облачных квот нет; LLM внутри нет — синтез остаётся за вызывающим агентом, дистилляция детерминированная (BM25).
6
6
 
7
7
  Сонар находит координаты, батискаф ныряет за полными текстами, дистиллятор поднимает на палубу только то, что отвечает на вопрос.
8
8
 
9
9
  ![python](https://img.shields.io/badge/python-3.10%2B-blue)
10
- ![version](https://img.shields.io/badge/version-0.6.2-9cf)
10
+ ![version](https://img.shields.io/badge/version-0.7.1-9cf)
11
11
  ![mcp](https://img.shields.io/badge/MCP-stdio%20server-6f42c1)
12
12
  ![license](https://img.shields.io/badge/license-MIT-green)
13
13
 
14
14
  ## ⚡ Quick start
15
15
 
16
- **Из PyPI** (основной путь — Python ≥ 3.10):
16
+ **Одной командой** (Python ≥ 3.10; приватный venv, без sudo, идемпотентно):
17
17
 
18
18
  ```bash
19
- pip install bathys # сервер + команды bathys/bathys-doctor
20
- python -m playwright install chromium # браузер для извлечения
21
- bathys install # автоподключение к найденным харнессам
22
- bathys-doctor # диагностика стека одним запуском
19
+ curl -fsSL https://raw.githubusercontent.com/Korrnals/bathys/main/install.sh | bash
23
20
  ```
24
21
 
25
- **Из npm** (для Node-first окружений — обёртка ставит Python-пакет сама):
22
+ Скрипт ставит пакет с PyPI в `~/.local/share/bathys/venv`, прописывает PATH, запускает `bathys setup` (браузер для JS-страниц → все найденные харнессы → субагент) и финальный `bathys-doctor`. Повторный запуск — безопасное обновление.
23
+
24
+ **Без скрипта** (то же самое вручную, для тех кто предпочитает pip):
25
+
26
+ ```bash
27
+ pip install bathys # пакет: сервер + bathys setup/install/doctor
28
+ bathys setup # браузер → харнессы → субагент
29
+ bathys doctor # самодиагностика стека
30
+ ```
31
+
32
+ SearXNG ставить руками не нужно: бэкенд поднимется сам при первом поиске (внешний инстанс → docker → нативный режим). Браузер нужен только для JS-страниц: обычные страницы Bathys читает собственным HTTP-движком, `BATHYS_BROWSER=off` отключает браузерный ярус полностью.
33
+
34
+ <details>
35
+ <summary><b>Альтернативные пути установки</b> (npm, исходники, минимальные образы)</summary>
36
+
37
+ **npm** (Node-first окружения — обёртка ставит Python-пакет сама):
26
38
 
27
39
  ```bash
28
40
  npm install -g bathys-mcp
29
- bathys-mcp install
41
+ bathys-mcp setup
30
42
  ```
31
43
 
32
44
  **Из исходников** (разработка):
@@ -34,32 +46,40 @@ bathys-mcp install
34
46
  ```bash
35
47
  git clone https://github.com/Korrnals/bathys.git && cd bathys
36
48
  python3.12 -m venv .venv && .venv/bin/pip install -e .
37
- .venv/bin/python -m playwright install chromium
38
- .venv/bin/python -m unittest discover -s tests # юнит-тесты без сети, ~0.1 c
49
+ .venv/bin/bathys setup
50
+ .venv/bin/python -m unittest discover -s tests # юнит-тесты без сети
39
51
  ```
40
52
 
41
- В минимальном контейнерном образе без `ensurepip` venv собирается через `get-pip.py` — ветка в [docs/getting-started/install.md](docs/getting-started/install.md). SearXNG поднимать руками не нужно: при первом поиске сервер сам пробует внешний инстанс, затем docker/podman, затем нативный режим ([docs/getting-started/configure.md](docs/getting-started/configure.md)).
53
+ В минимальном контейнерном образе без `ensurepip` venv собирается через `get-pip.py` — ветка в [docs/getting-started/install.md](docs/getting-started/install.md).
54
+
55
+ </details>
42
56
 
43
57
  ## 🔌 Подключение к харнессу
44
58
 
45
- **Автоматически.** Одна команда найдёт харнессы по стандартным путям, пропишет сервер с бэкапом конфига и (с `--with-agent`) скопирует субагента:
59
+ **Автоматически — весь стек:** `bathys setup` (см. выше) прописывает сервер во все найденные харнессы.
60
+
61
+ **Точечно — когда нужно именно здесь:**
46
62
 
47
63
  ```bash
48
- .venv/bin/bathys install # сначала --dry-run, чтобы увидеть план
64
+ bathys install # автодетект всех установленных харнессов
65
+ bathys install hermes # только Hermes (отсутствующий конфиг создастся)
66
+ bathys install --list # все поддерживаемые таргеты
67
+ bathys install --print-config # готовые блоки для ручной вставки
49
68
  ```
50
69
 
51
- Детектируются zcode, Claude Code, Claude Desktop, Cursor, VS Code-семейство (Cline / Roo Code / Kilo Code), Gemini CLI, Windsurf, Zed, opencode, goose, Hermes; форматы каждого — свои (JSON-схемы и YAML-контуры goose/hermes), запись идемпотентна. Для Pi (badlogic pi-mono), у которого нет MCP-конфига, — дроп-ин в `AGENTS.md`. Поддерживаются `--print-config` (готовые блоки для ручной вставки) и `--searxng-home <путь>`; кастомные интеграции — в каталоге [integrations/](integrations/).
70
+ Детектируются zcode, Claude Code, Claude Desktop, Cursor, VS Code-семейство (Cline / Roo Code / Kilo Code), Gemini CLI, Windsurf, Zed, opencode, goose, Hermes; форматы каждого — свои (JSON-схемы и YAML-контуры goose/hermes), запись идемпотентна с бэкапом. Для Pi (badlogic pi-mono), у которого нет MCP-конфига, — дроп-ин в `AGENTS.md`. Кастомные интеграции — в каталоге [integrations/](integrations/).
52
71
 
53
- **Вручную.** Bathys — stdio MCP-сервер, конфиг везде один и тот же блок `mcpServers`; от харнесса зависит только файл, в который его кладут. `command` — абсолютный путь к вашему клону (`~` внутри JSON не раскрывается); `BATHYS_SEARXNG_HOME` опциональна.
72
+ <details>
73
+ <summary><b>Ручное подключение</b> (когда правите конфиги сами)</summary>
74
+
75
+ Bathys — stdio MCP-сервер: блок `mcpServers` один и тот же везде, от харнесса зависит только файл, в который его кладут. `command` — абсолютный путь к бинарнику (`~` внутри JSON не раскрывается); `BATHYS_SEARXNG_HOME` опциональна. Готовые блоки под каждый клиент: `bathys install --print-config`.
54
76
 
55
77
  ```json
56
78
  {
57
79
  "mcpServers": {
58
80
  "bathys": {
59
- "command": "/path/to/bathys/.venv/bin/bathys",
60
- "env": {
61
- "BATHYS_SEARXNG_HOME": "/path/to/bathys/.runtime/searxng-home"
62
- }
81
+ "command": "/path/to/bathys",
82
+ "env": { "BATHYS_SEARXNG_HOME": "/path/to/searxng-home" }
63
83
  }
64
84
  }
65
85
  }
@@ -72,6 +92,8 @@ python3.12 -m venv .venv && .venv/bin/pip install -e .
72
92
  | Cursor | [docs/integrations/cursor.md](docs/integrations/cursor.md) |
73
93
  | Любой другой MCP-клиент | [docs/integrations/generic-mcp.md](docs/integrations/generic-mcp.md) |
74
94
 
95
+ </details>
96
+
75
97
  ## 🧠 Научить агента работать эффективно
76
98
 
77
99
  Конфиг — только половина дела. Из коробки харнесс получает **instructions-playbook** (матрицу выбора инструментов), **annotations** и **три стратегии-промпта** — `bathys_deep_research`, `bathys_source_audit`, `bathys_fresh_scan`, — так что выбирает инструменты Bathys уже нативно. Сильнее — профиль: субагент [`agents/bathys-researcher.md`](agents/bathys-researcher.md) с двумя скиллами, которому глубокий ресёрч делегируется целиком; для клиентов, не показывающих MCP instructions, — дроп-ин [`agents/HARNESS-DROPIN.md`](agents/HARNESS-DROPIN.md) в `AGENTS.md` / `CLAUDE.md` / `.cursor/rules`.
@@ -140,7 +162,7 @@ docs/
140
162
 
141
163
  ## 📍 Статус
142
164
 
143
- **0.6.2.** Выпускная история: v0.2 «Качество выдачи» (ретраи, здоровье движков), v0.3 «Паритет с Tavily» (`read_urls`, JSON-режим), v0.4 «Эксплуатация» (robots-этика, метрики, `bathys-doctor`), v0.5 «Identity & Harness» (репозиционирование, промпты, субагент), v0.6 «Native Install» (`bathys install`) — итоги в [CHANGELOG.md](CHANGELOG.md).
165
+ **0.7.1.** Выпускная история: v0.2 «Качество выдачи» (ретраи, здоровье движков), v0.3 «Паритет с Tavily» (`read_urls`, JSON-режим), v0.4 «Эксплуатация» (robots-этика, метрики, `bathys-doctor`), v0.5 «Identity & Harness» (репозиционирование, промпты, субагент), v0.6 «Native Install» (`bathys install`) — итоги в [CHANGELOG.md](CHANGELOG.md).
144
166
 
145
167
  Репозиторий: `github.com/Korrnals/bathys`. До 1.0 остаются публикация пакета `bathys` на PyPI (имя свободно, публикация планируется к 1.0) и первый прогон Docker-образа; CI с matrix 3.10–3.12 уже в репозитории.
146
168
 
@@ -30,6 +30,7 @@
30
30
  | `BATHYS_SEARCH_MIN_INTERVAL` | `1.0` | float, с | вежливый минимальный интервал между поисками к бэкенду (F-301); 0 — без пауз |
31
31
  | `BATHYS_SEARCH_RETRIES` | `2` | int | дoп. попытки при пустой/заблокированной выдаче с ротацией наборов движков и паузой 1.5s×n (F-101); 0–3 |
32
32
  | `BATHYS_DIVE_CONCURRENCY` | `4` | int | параллельные нырки страниц в `deep_research` (F-301); 1–8 |
33
+ | `BATHYS_BROWSER` | `auto` | режим | двухъярусное извлечение: `auto` — HTTP-движок первым, браузер только для JS-страниц; `off` — без браузера; `always` — только браузер (отладка) |
33
34
  | `BATHYS_ROBOTS` | `1` | bool | уважать robots.txt при прямых нырках страниц (F-303); fail-open при недоступном robots; поиск не затрагивается |
34
35
  | `BATHYS_METRICS` | `1` | bool | локальный журнал вызовов `{DATA_DIR}/metrics.jsonl` (F-304); выключается полностью |
35
36
  | `BATHYS_ENGINE_BRAVE_KEY` | — | str | API-ключ Brave Search: одним ключом включает движок `brave` в генерируемых настройках SearXNG нативного режима (F-203, `services.render_settings`); для docker-режима — пропишите движок в settings сами |
@@ -22,6 +22,7 @@
22
22
  | `BATHYS_SEARCH_MIN_INTERVAL` | `1.0` | вежливая пауза между поисками к бэкенду, сек |
23
23
  | `BATHYS_SEARCH_RETRIES` | `2` | доп. попытки при пустой выдаче (ротация движков с паузами), 0–3 |
24
24
  | `BATHYS_DIVE_CONCURRENCY` | `4` | параллельные чтения страниц в `deep_research`, 1–8 |
25
+ | `BATHYS_BROWSER` | `auto` | режим | двухъярусное извлечение: `auto` — HTTP-движок первым, браузер только для JS-страниц; `off` — без браузера; `always` — только браузер (отладка) |
25
26
  | `BATHYS_ROBOTS` | `1` | уважать robots.txt при чтении страниц (отказ — пометкой, не ошибкой) |
26
27
  | `BATHYS_METRICS` | `1` | писать локальный журнал вызовов `~/.local/share/bathys/metrics.jsonl` |
27
28
  | `BATHYS_ENGINE_BRAVE_KEY` | — | ключ Brave Search API: включает движок `brave` в настройках нативного SearXNG одним env |
@@ -0,0 +1,105 @@
1
+ #!/usr/bin/env bash
2
+ # Bathys — one-line installer.
3
+ #
4
+ # curl -fsSL https://raw.githubusercontent.com/Korrnals/bathys/main/install.sh | bash
5
+ #
6
+ # What it does (idempotent, safe to re-run):
7
+ # 1. finds Python >= 3.10 (python3/python/3.12/3.11/3.10);
8
+ # 2. installs the `bathys` package from PyPI into a PRIVATE venv at
9
+ # ~/.local/share/bathys/venv (deterministic, no PEP-668 surprises,
10
+ # no sudo, nothing outside $HOME; --user is deliberately not used —
11
+ # it is fragile across containers/managed environments);
12
+ # 3. wires the venv bin into PATH permanently (.profile/.bashrc);
13
+ # 4. runs `bathys setup`: browser engine for JS pages -> harness
14
+ # auto-integration (zcode, Claude, Cursor, VS Code family, Gemini CLI,
15
+ # Windsurf, Zed, opencode, goose, Hermes) -> researcher subagent;
16
+ # 5. runs `bathys-doctor` for a final health check.
17
+ #
18
+ # Exit code is the doctor's. Manual alternative (the same result, no script):
19
+ # pip install bathys && bathys setup
20
+
21
+ set -euo pipefail
22
+
23
+ BOLD="$(tput bold 2>/dev/null || echo '')"
24
+ DIM="$(tput dim 2>/dev/null || echo '')"
25
+ RESET="$(tput sgr0 2>/dev/null || echo '')"
26
+ say() { printf "%s\n" "${BOLD}[bathys]${RESET} $*"; }
27
+ note() { printf "%s\n" "${DIM}[bathys]${RESET} $*"; }
28
+ die() { printf "%s\n" "${BOLD}[bathys]${RESET} ERROR: $*" >&2; exit 1; }
29
+
30
+ VENV_DIR="${XDG_DATA_HOME:-$HOME/.local/share}/bathys/venv"
31
+
32
+ # ------------------------------------------------------------------ python --
33
+ find_python() {
34
+ for cand in python3.12 python3.11 python3.10 python3 python; do
35
+ if command -v "$cand" >/dev/null 2>&1; then
36
+ if "$cand" - <<'PY' >/dev/null 2>&1
37
+ import sys
38
+ raise SystemExit(0 if (3, 10) <= sys.version_info[:2] <= (3, 14) else 1)
39
+ PY
40
+ then
41
+ echo "$cand"
42
+ return 0
43
+ fi
44
+ fi
45
+ done
46
+ return 1
47
+ }
48
+
49
+ PY="$(find_python)" || die "Python 3.10–3.14 не найден. Установите его и повторите — либо вручную: pip install bathys && bathys setup"
50
+ note "python: $($PY --version 2>&1)"
51
+
52
+ # ------------------------------------------------------------------- venv --
53
+ if [ -x "$VENV_DIR/bin/bathys" ] && "$VENV_DIR/bin/bathys" --help >/dev/null 2>&1; then
54
+ note "venv уже живой: $VENV_DIR (обновляю пакет)"
55
+ UPGRADE=yes
56
+ else
57
+ note "создаю приватный venv: $VENV_DIR"
58
+ rm -rf "$VENV_DIR"
59
+ "$PY" -m venv "$VENV_DIR" 2>/dev/null \
60
+ || "$PY" -m venv --without-pip "$VENV_DIR" \
61
+ || die "не удалось создать venv в $VENV_DIR"
62
+ UPGRADE=no
63
+ fi
64
+
65
+ # bootstrap pip when the venv lacks it (minimal images without ensurepip)
66
+ if [ ! -x "$VENV_DIR/bin/pip" ]; then
67
+ note "pip отсутствует в venv — бутстрап через get-pip.py…"
68
+ TMP_GP="$(mktemp)"; trap 'rm -f "$TMP_GP"' EXIT
69
+ curl -fsSL https://bootstrap.pypa.io/get-pip.py -o "$TMP_GP" \
70
+ || die "не удалось скачать get-pip.py (сеть?)"
71
+ "$VENV_DIR/bin/python" "$TMP_GP" -q >/dev/null 2>&1 \
72
+ || die "get-pip.py не смог подняться в venv"
73
+ fi
74
+
75
+ # ---------------------------------------------------------------- install --
76
+ if [ "$UPGRADE" = yes ]; then
77
+ "$VENV_DIR/bin/pip" install --quiet --upgrade bathys >/dev/null 2>&1 \
78
+ || die "pip install --upgrade bathys не удался (сеть/PyPI?)"
79
+ else
80
+ "$VENV_DIR/bin/pip" install --quiet bathys >/dev/null 2>&1 \
81
+ || die "pip install bathys не удался (сеть/PyPI?)"
82
+ fi
83
+ [ -x "$VENV_DIR/bin/bathys" ] || die "bathys не появился в venv — проверьте вывод pip вручную"
84
+
85
+ # ------------------------------------------------------------------- PATH --
86
+ PATH_LINE='export PATH="$HOME/.local/share/bathys/venv/bin:$PATH"'
87
+ if ! case ":$PATH:" in *":$VENV_DIR/bin:"*) false;; esac; then
88
+ export PATH="$VENV_DIR/bin:$PATH"
89
+ fi
90
+ for rc in "$HOME/.profile" "$HOME/.bashrc"; do
91
+ if [ -f "$rc" ] && ! grep -qF 'bathys/venv/bin' "$rc"; then
92
+ printf '\n# bathys (one-line installer)\n%s\n' "$PATH_LINE" >> "$rc"
93
+ note "PATH дополнен в $rc — перезапустите шелл или: source $rc"
94
+ fi
95
+ done
96
+
97
+ say "установлен: $VENV_DIR/bin/bathys"
98
+
99
+ # ------------------------------------------------------------------ setup --
100
+ say "полная настройка (браузер → харнессы → субагент)…"
101
+ "$VENV_DIR/bin/bathys" setup
102
+
103
+ # ----------------------------------------------------------------- doctor --
104
+ say "финальная диагностика:"
105
+ exec "$VENV_DIR/bin/bathys" doctor
@@ -9,3 +9,8 @@
9
9
  12:44:57 [hook] post-tool: PROJECT_DIR=/var/home/abyss/LABs/MCP/deepreserch/npm/bathys-mcp PIPELINE_DIR=/var/home/abyss/.distrobox/ubuntu/home/.zcode/cli/plugins/cache/claude-plugins-official/remember/0.20.0 PYTHON=python3 REMEMBER_DIR=/var/home/abyss/LABs/MCP/deepreserch/npm/bathys-mcp/.remember
10
10
  12:45:02 [hook] post-tool: PROJECT_DIR=/var/home/abyss/LABs/MCP/deepreserch/npm/bathys-mcp PIPELINE_DIR=/var/home/abyss/.distrobox/ubuntu/home/.zcode/cli/plugins/cache/claude-plugins-official/remember/0.20.0 PYTHON=python3 REMEMBER_DIR=/var/home/abyss/LABs/MCP/deepreserch/npm/bathys-mcp/.remember
11
11
  12:45:09 [hook] post-tool: PROJECT_DIR=/var/home/abyss/LABs/MCP/deepreserch/npm/bathys-mcp PIPELINE_DIR=/var/home/abyss/.distrobox/ubuntu/home/.zcode/cli/plugins/cache/claude-plugins-official/remember/0.20.0 PYTHON=python3 REMEMBER_DIR=/var/home/abyss/LABs/MCP/deepreserch/npm/bathys-mcp/.remember
12
+ 12:46:14 [hook] post-tool: PROJECT_DIR=/var/home/abyss/LABs/MCP/deepreserch/npm/bathys-mcp PIPELINE_DIR=/var/home/abyss/.distrobox/ubuntu/home/.zcode/cli/plugins/cache/claude-plugins-official/remember/0.20.0 PYTHON=python3 REMEMBER_DIR=/var/home/abyss/LABs/MCP/deepreserch/npm/bathys-mcp/.remember
13
+ 12:46:18 [hook] post-tool: PROJECT_DIR=/var/home/abyss/LABs/MCP/deepreserch/npm/bathys-mcp PIPELINE_DIR=/var/home/abyss/.distrobox/ubuntu/home/.zcode/cli/plugins/cache/claude-plugins-official/remember/0.20.0 PYTHON=python3 REMEMBER_DIR=/var/home/abyss/LABs/MCP/deepreserch/npm/bathys-mcp/.remember
14
+ 12:46:23 [hook] post-tool: PROJECT_DIR=/var/home/abyss/LABs/MCP/deepreserch/npm/bathys-mcp PIPELINE_DIR=/var/home/abyss/.distrobox/ubuntu/home/.zcode/cli/plugins/cache/claude-plugins-official/remember/0.20.0 PYTHON=python3 REMEMBER_DIR=/var/home/abyss/LABs/MCP/deepreserch/npm/bathys-mcp/.remember
15
+ 12:46:28 [hook] post-tool: PROJECT_DIR=/var/home/abyss/LABs/MCP/deepreserch/npm/bathys-mcp PIPELINE_DIR=/var/home/abyss/.distrobox/ubuntu/home/.zcode/cli/plugins/cache/claude-plugins-official/remember/0.20.0 PYTHON=python3 REMEMBER_DIR=/var/home/abyss/LABs/MCP/deepreserch/npm/bathys-mcp/.remember
16
+ 12:46:30 [hook] post-tool: PROJECT_DIR=/var/home/abyss/LABs/MCP/deepreserch/npm/bathys-mcp PIPELINE_DIR=/var/home/abyss/.distrobox/ubuntu/home/.zcode/cli/plugins/cache/claude-plugins-official/remember/0.20.0 PYTHON=python3 REMEMBER_DIR=/var/home/abyss/LABs/MCP/deepreserch/npm/bathys-mcp/.remember
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "bathys"
7
- version = "0.6.2"
7
+ version = "0.7.1"
8
8
  description = "Unified local deep-research search service for AI agents — one pipeline (search → extraction → query distillation → cache), zero cloud quotas. MCP stdio server with native harness integration (bathys install)."
9
9
  keywords = ["mcp", "deep-research", "search", "web-search", "ai-agents", "llm", "local-first", "distillation", "searxng", "crawl4ai"]
10
10
  classifiers = [
@@ -5,4 +5,4 @@ a query-focused distiller keeps only what answers the question. Built to spend
5
5
  the model's tokens on answers, not on boilerplate.
6
6
  """
7
7
 
8
- __version__ = "0.6.2"
8
+ __version__ = "0.7.1"
@@ -39,6 +39,7 @@ class Config:
39
39
  search_min_interval: float
40
40
  search_retries: int
41
41
  dive_concurrency: int
42
+ browser_mode: str
42
43
  respect_robots: bool
43
44
  metrics: bool
44
45
 
@@ -66,6 +67,7 @@ class Config:
66
67
  search_min_interval=float(os.environ.get("BATHYS_SEARCH_MIN_INTERVAL", "1.0")),
67
68
  search_retries=max(0, min(3, int(os.environ.get("BATHYS_SEARCH_RETRIES", "2")))),
68
69
  dive_concurrency=max(1, min(8, int(os.environ.get("BATHYS_DIVE_CONCURRENCY", "4")))),
70
+ browser_mode=(os.environ.get("BATHYS_BROWSER") or "auto").strip().lower(),
69
71
  respect_robots=_env_bool("BATHYS_ROBOTS", True),
70
72
  metrics=_env_bool("BATHYS_METRICS", True),
71
73
  )
@@ -313,7 +313,7 @@ class Engine:
313
313
  self.cache.set(pk, {"error": err}, ttl=max(3600, self.cfg.page_ttl // 24))
314
314
  raise RobotsRefusal(err)
315
315
  try:
316
- page = await self.crawler.fetch(url)
316
+ page = await self.crawler.fetch(url, http=self.http)
317
317
  except Exception as e:
318
318
  err = f"{e.__class__.__name__}: {e}"
319
319
  self.cache.set(pk, {"error": err}, ttl=max(3600, self.cfg.page_ttl // 24))