bathys 0.7.1__tar.gz → 0.7.2__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.
- {bathys-0.7.1 → bathys-0.7.2}/.github/workflows/ci.yml +10 -0
- {bathys-0.7.1 → bathys-0.7.2}/.remember/logs/memory-2026-09-08.log +22 -0
- bathys-0.7.2/.remember/tmp/no-transcript-notice +1 -0
- {bathys-0.7.1 → bathys-0.7.2}/.remember/tmp/session-slug +1 -0
- {bathys-0.7.1 → bathys-0.7.2}/CHANGELOG.md +13 -0
- {bathys-0.7.1 → bathys-0.7.2}/PKG-INFO +5 -3
- {bathys-0.7.1 → bathys-0.7.2}/README.md +4 -2
- {bathys-0.7.1 → bathys-0.7.2}/install.sh +8 -4
- {bathys-0.7.1 → bathys-0.7.2}/pyproject.toml +1 -1
- {bathys-0.7.1 → bathys-0.7.2}/src/bathys/__init__.py +1 -1
- {bathys-0.7.1 → bathys-0.7.2}/src/bathys/doctor.py +19 -5
- {bathys-0.7.1 → bathys-0.7.2}/src/bathys/installer.py +110 -0
- {bathys-0.7.1 → bathys-0.7.2}/src/bathys/server.py +5 -1
- bathys-0.7.1/.remember/tmp/capture-gap-skipped +0 -1
- bathys-0.7.1/.remember/tmp/no-transcript-notice +0 -1
- {bathys-0.7.1 → bathys-0.7.2}/.gitignore +0 -0
- {bathys-0.7.1 → bathys-0.7.2}/.remember/.gitignore +0 -0
- {bathys-0.7.1 → bathys-0.7.2}/.remember/logs/hook-errors.log +0 -0
- {bathys-0.7.1 → bathys-0.7.2}/.remember/logs/memory-2026-09-06.log +0 -0
- {bathys-0.7.1 → bathys-0.7.2}/.remember/logs/memory-2026-09-07.log +0 -0
- {bathys-0.7.1 → bathys-0.7.2}/.remember/tmp/case-divergence +0 -0
- {bathys-0.7.1 → bathys-0.7.2}/.remember/tmp/post-tool-ran +0 -0
- {bathys-0.7.1 → bathys-0.7.2}/Dockerfile +0 -0
- {bathys-0.7.1 → bathys-0.7.2}/LICENSE +0 -0
- {bathys-0.7.1 → bathys-0.7.2}/agents/HARNESS-DROPIN.md +0 -0
- {bathys-0.7.1 → bathys-0.7.2}/agents/bathys-researcher.md +0 -0
- {bathys-0.7.1 → bathys-0.7.2}/agents/skills/bathys-deep-dive/SKILL.md +0 -0
- {bathys-0.7.1 → bathys-0.7.2}/agents/skills/bathys-source-audit/SKILL.md +0 -0
- {bathys-0.7.1 → bathys-0.7.2}/docs/adr/0001-python-crawl4ai.md +0 -0
- {bathys-0.7.1 → bathys-0.7.2}/docs/adr/0002-pin-mcp-sdk-v1.md +0 -0
- {bathys-0.7.1 → bathys-0.7.2}/docs/adr/0003-self-managed-searxng.md +0 -0
- {bathys-0.7.1 → bathys-0.7.2}/docs/adr/0004-bm25-distillation.md +0 -0
- {bathys-0.7.1 → bathys-0.7.2}/docs/adr/0005-cache-raw-before-distill.md +0 -0
- {bathys-0.7.1 → bathys-0.7.2}/docs/adr/0006-three-tool-string-surface.md +0 -0
- {bathys-0.7.1 → bathys-0.7.2}/docs/architecture/data-flow.md +0 -0
- {bathys-0.7.1 → bathys-0.7.2}/docs/architecture/overview.md +0 -0
- {bathys-0.7.1 → bathys-0.7.2}/docs/architecture/pipeline.md +0 -0
- {bathys-0.7.1 → bathys-0.7.2}/docs/assets/banner.svg +0 -0
- {bathys-0.7.1 → bathys-0.7.2}/docs/contracts/config.md +0 -0
- {bathys-0.7.1 → bathys-0.7.2}/docs/contracts/mcp-tools.md +0 -0
- {bathys-0.7.1 → bathys-0.7.2}/docs/contracts/module-contracts.md +0 -0
- {bathys-0.7.1 → bathys-0.7.2}/docs/contracts/output-format.md +0 -0
- {bathys-0.7.1 → bathys-0.7.2}/docs/getting-started/cases.md +0 -0
- {bathys-0.7.1 → bathys-0.7.2}/docs/getting-started/configure.md +0 -0
- {bathys-0.7.1 → bathys-0.7.2}/docs/getting-started/install.md +0 -0
- {bathys-0.7.1 → bathys-0.7.2}/docs/getting-started/integrate.md +0 -0
- {bathys-0.7.1 → bathys-0.7.2}/docs/index.md +0 -0
- {bathys-0.7.1 → bathys-0.7.2}/docs/integrations/claude-code.md +0 -0
- {bathys-0.7.1 → bathys-0.7.2}/docs/integrations/cursor.md +0 -0
- {bathys-0.7.1 → bathys-0.7.2}/docs/integrations/generic-mcp.md +0 -0
- {bathys-0.7.1 → bathys-0.7.2}/docs/integrations/overview.md +0 -0
- {bathys-0.7.1 → bathys-0.7.2}/docs/integrations/zcode.md +0 -0
- {bathys-0.7.1 → bathys-0.7.2}/docs/meta/glossary.md +0 -0
- {bathys-0.7.1 → bathys-0.7.2}/docs/meta/style-guide.md +0 -0
- {bathys-0.7.1 → bathys-0.7.2}/docs/operations/metrics.md +0 -0
- {bathys-0.7.1 → bathys-0.7.2}/docs/operations/runbook.md +0 -0
- {bathys-0.7.1 → bathys-0.7.2}/docs/product/charter.md +0 -0
- {bathys-0.7.1 → bathys-0.7.2}/docs/product/competitive.md +0 -0
- {bathys-0.7.1 → bathys-0.7.2}/docs/product/features.md +0 -0
- {bathys-0.7.1 → bathys-0.7.2}/docs/product/mind-initiative.md +0 -0
- {bathys-0.7.1 → bathys-0.7.2}/docs/product/ocr-initiative.md +0 -0
- {bathys-0.7.1 → bathys-0.7.2}/docs/product/roadmap.md +0 -0
- {bathys-0.7.1 → bathys-0.7.2}/integrations/README.md +0 -0
- {bathys-0.7.1 → bathys-0.7.2}/integrations/hermes/README.md +0 -0
- {bathys-0.7.1 → bathys-0.7.2}/integrations/hermes/install.py +0 -0
- {bathys-0.7.1 → bathys-0.7.2}/integrations/pi/README.md +0 -0
- {bathys-0.7.1 → bathys-0.7.2}/integrations/pi/assets/bathys-rules.md +0 -0
- {bathys-0.7.1 → bathys-0.7.2}/integrations/zcode/README.md +0 -0
- {bathys-0.7.1 → bathys-0.7.2}/npm/bathys-mcp/.remember/.gitignore +0 -0
- {bathys-0.7.1 → bathys-0.7.2}/npm/bathys-mcp/.remember/logs/hook-errors.log +0 -0
- {bathys-0.7.1 → bathys-0.7.2}/npm/bathys-mcp/.remember/logs/memory-2026-09-08.log +0 -0
- {bathys-0.7.1 → bathys-0.7.2}/npm/bathys-mcp/.remember/tmp/no-transcript-notice +0 -0
- {bathys-0.7.1 → bathys-0.7.2}/npm/bathys-mcp/.remember/tmp/post-tool-ran +0 -0
- {bathys-0.7.1 → bathys-0.7.2}/npm/bathys-mcp/README.md +0 -0
- {bathys-0.7.1 → bathys-0.7.2}/npm/bathys-mcp/bin/cli.js +0 -0
- {bathys-0.7.1 → bathys-0.7.2}/npm/bathys-mcp/bin/postinstall.js +0 -0
- {bathys-0.7.1 → bathys-0.7.2}/npm/bathys-mcp/package.json +0 -0
- {bathys-0.7.1 → bathys-0.7.2}/scripts/acceptance_v02.py +0 -0
- {bathys-0.7.1 → bathys-0.7.2}/scripts/batch_check.py +0 -0
- {bathys-0.7.1 → bathys-0.7.2}/scripts/metrics_report.py +0 -0
- {bathys-0.7.1 → bathys-0.7.2}/scripts/smoke.py +0 -0
- {bathys-0.7.1 → bathys-0.7.2}/scripts/stdio_check.py +0 -0
- {bathys-0.7.1 → bathys-0.7.2}/src/bathys/batch.py +0 -0
- {bathys-0.7.1 → bathys-0.7.2}/src/bathys/cache.py +0 -0
- {bathys-0.7.1 → bathys-0.7.2}/src/bathys/compose.yaml +0 -0
- {bathys-0.7.1 → bathys-0.7.2}/src/bathys/config.py +0 -0
- {bathys-0.7.1 → bathys-0.7.2}/src/bathys/core.py +0 -0
- {bathys-0.7.1 → bathys-0.7.2}/src/bathys/crawler.py +0 -0
- {bathys-0.7.1 → bathys-0.7.2}/src/bathys/distill.py +0 -0
- {bathys-0.7.1 → bathys-0.7.2}/src/bathys/searx.py +0 -0
- {bathys-0.7.1 → bathys-0.7.2}/src/bathys/searxng-settings.yml +0 -0
- {bathys-0.7.1 → bathys-0.7.2}/src/bathys/services.py +0 -0
- {bathys-0.7.1 → bathys-0.7.2}/tests/test_batch.py +0 -0
- {bathys-0.7.1 → bathys-0.7.2}/tests/test_cache.py +0 -0
- {bathys-0.7.1 → bathys-0.7.2}/tests/test_config.py +0 -0
- {bathys-0.7.1 → bathys-0.7.2}/tests/test_core.py +0 -0
- {bathys-0.7.1 → bathys-0.7.2}/tests/test_distill.py +0 -0
- {bathys-0.7.1 → bathys-0.7.2}/tests/test_installer.py +0 -0
- {bathys-0.7.1 → bathys-0.7.2}/tests/test_searx.py +0 -0
- {bathys-0.7.1 → bathys-0.7.2}/tests/test_v04.py +0 -0
|
@@ -24,6 +24,16 @@ jobs:
|
|
|
24
24
|
- name: Unit tests
|
|
25
25
|
run: python -m unittest discover -s tests -v
|
|
26
26
|
|
|
27
|
+
shellcheck:
|
|
28
|
+
# install.sh is the product's front door — it gets its own lint gate.
|
|
29
|
+
runs-on: ubuntu-latest
|
|
30
|
+
steps:
|
|
31
|
+
- uses: actions/checkout@v4
|
|
32
|
+
- name: ShellCheck install.sh
|
|
33
|
+
run: |
|
|
34
|
+
sudo apt-get update -qq && sudo apt-get install -y -qq shellcheck
|
|
35
|
+
shellcheck -S warning install.sh
|
|
36
|
+
|
|
27
37
|
package:
|
|
28
38
|
# Packaging smoke: build the wheel, install it into a fresh venv together
|
|
29
39
|
# with real deps is heavy (playwright et al.) — here we only verify the
|
|
@@ -213,3 +213,25 @@
|
|
|
213
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
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
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
|
|
216
|
+
14:33: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
|
|
217
|
+
14:34:06 [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
|
|
218
|
+
16:21:12 [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
|
|
219
|
+
16:21:12 [hook] session-start: capture-gap check skipped — no session_id on stdin
|
|
220
|
+
17:32:27 [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
|
|
221
|
+
17:34:24 [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
|
|
222
|
+
17:34:24 [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/
|
|
223
|
+
17:34:41 [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
|
|
224
|
+
17:34: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
|
|
225
|
+
17:35: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
|
|
226
|
+
17:35:06 [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
|
|
227
|
+
17:35: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
|
|
228
|
+
17:35:24 [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
|
|
229
|
+
17:35:30 [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
|
|
230
|
+
17:35: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
|
|
231
|
+
17:35:48 [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
|
|
232
|
+
17:35:54 [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
|
|
233
|
+
17:36:01 [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
|
|
234
|
+
17:36:10 [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
|
|
235
|
+
17:36:10 [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
|
|
236
|
+
17:36:26 [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
|
|
237
|
+
17:36:41 [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
|
+
1788878064
|
|
@@ -4,3 +4,4 @@ project_dir=/var/home/abyss/LABs/MCP/deepreserch
|
|
|
4
4
|
slug=-var-home-abyss-LABs-MCP-deepreserch
|
|
5
5
|
sessions_dir=/var/home/abyss/.distrobox/ubuntu/home/.claude/projects/-var-home-abyss-LABs-MCP-deepreserch
|
|
6
6
|
memory_dir=/var/home/abyss/LABs/MCP/deepreserch/.remember
|
|
7
|
+
session_id=sess_f9b00fe5-9050-4bf4-ba3e-4e68b02802b3
|
|
@@ -2,6 +2,19 @@
|
|
|
2
2
|
|
|
3
3
|
Формат: Keep a Changelog; версии — semver. Дата — дата выпуска версии.
|
|
4
4
|
|
|
5
|
+
## [0.7.2] — 2026-09-08
|
|
6
|
+
|
|
7
|
+
### Добавлено
|
|
8
|
+
|
|
9
|
+
- **`bathys uninstall [HARNESS…] [--purge]`** — симметрия установки: снимает только записи `bathys` из конфигов (чужие серверы, бэкапы и субагенты не трогаются), перед записью создаёт бэкап; `--purge` дополнительно удаляет venv/кэш/данные. Живой цикл проверен: uninstall hermes → бэкап → reinstall.
|
|
10
|
+
- **`bathys-doctor --start-backend`** — бэкенд SearXNG поднимается перед проверкой (live: native-режим, 6/6 checks passed); прежнее поведение (честный FAIL на незапущенном бэкенде + подсказка) сохранено как дефолт.
|
|
11
|
+
- **`BATHYS_INSTALL_VERSION`** в install.sh — пин/откат на конкретную версию пакета одной env-переменной.
|
|
12
|
+
- CI: job `shellcheck` — install.sh линтится на каждом push (локально shellcheck отсутствует — CI будет первым прогоном).
|
|
13
|
+
|
|
14
|
+
### Изменено
|
|
15
|
+
|
|
16
|
+
- Справка `bathys --help` дополнена uninstall; README Quick start — откат версии и снятие.
|
|
17
|
+
|
|
5
18
|
## [0.7.1] — 2026-09-08
|
|
6
19
|
|
|
7
20
|
### Добавлено
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: bathys
|
|
3
|
-
Version: 0.7.
|
|
3
|
+
Version: 0.7.2
|
|
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
|
|
@@ -33,7 +33,7 @@ Description-Content-Type: text/markdown
|
|
|
33
33
|
Сонар находит координаты, батискаф ныряет за полными текстами, дистиллятор поднимает на палубу только то, что отвечает на вопрос.
|
|
34
34
|
|
|
35
35
|

|
|
36
|
-

|
|
37
37
|

|
|
38
38
|

|
|
39
39
|
|
|
@@ -55,6 +55,8 @@ bathys setup # браузер → харнессы → субагент
|
|
|
55
55
|
bathys doctor # самодиагностика стека
|
|
56
56
|
```
|
|
57
57
|
|
|
58
|
+
Откат на конкретную версию: `BATHYS_INSTALL_VERSION=0.7.0 bash install.sh`. Снятие Bathys с харнессов — `bathys uninstall` (точечно: `bathys uninstall hermes`; полный снос — `--purge`).
|
|
59
|
+
|
|
58
60
|
SearXNG ставить руками не нужно: бэкенд поднимется сам при первом поиске (внешний инстанс → docker → нативный режим). Браузер нужен только для JS-страниц: обычные страницы Bathys читает собственным HTTP-движком, `BATHYS_BROWSER=off` отключает браузерный ярус полностью.
|
|
59
61
|
|
|
60
62
|
<details>
|
|
@@ -188,7 +190,7 @@ docs/
|
|
|
188
190
|
|
|
189
191
|
## 📍 Статус
|
|
190
192
|
|
|
191
|
-
**0.7.
|
|
193
|
+
**0.7.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).
|
|
192
194
|
|
|
193
195
|
Репозиторий: `github.com/Korrnals/bathys`. До 1.0 остаются публикация пакета `bathys` на PyPI (имя свободно, публикация планируется к 1.0) и первый прогон Docker-образа; CI с matrix 3.10–3.12 уже в репозитории.
|
|
194
196
|
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
Сонар находит координаты, батискаф ныряет за полными текстами, дистиллятор поднимает на палубу только то, что отвечает на вопрос.
|
|
8
8
|
|
|
9
9
|

|
|
10
|
-

|
|
11
11
|

|
|
12
12
|

|
|
13
13
|
|
|
@@ -29,6 +29,8 @@ bathys setup # браузер → харнессы → субагент
|
|
|
29
29
|
bathys doctor # самодиагностика стека
|
|
30
30
|
```
|
|
31
31
|
|
|
32
|
+
Откат на конкретную версию: `BATHYS_INSTALL_VERSION=0.7.0 bash install.sh`. Снятие Bathys с харнессов — `bathys uninstall` (точечно: `bathys uninstall hermes`; полный снос — `--purge`).
|
|
33
|
+
|
|
32
34
|
SearXNG ставить руками не нужно: бэкенд поднимется сам при первом поиске (внешний инстанс → docker → нативный режим). Браузер нужен только для JS-страниц: обычные страницы Bathys читает собственным HTTP-движком, `BATHYS_BROWSER=off` отключает браузерный ярус полностью.
|
|
33
35
|
|
|
34
36
|
<details>
|
|
@@ -162,7 +164,7 @@ docs/
|
|
|
162
164
|
|
|
163
165
|
## 📍 Статус
|
|
164
166
|
|
|
165
|
-
**0.7.
|
|
167
|
+
**0.7.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).
|
|
166
168
|
|
|
167
169
|
Репозиторий: `github.com/Korrnals/bathys`. До 1.0 остаются публикация пакета `bathys` на PyPI (имя свободно, публикация планируется к 1.0) и первый прогон Docker-образа; CI с matrix 3.10–3.12 уже в репозитории.
|
|
168
170
|
|
|
@@ -29,6 +29,10 @@ die() { printf "%s\n" "${BOLD}[bathys]${RESET} ERROR: $*" >&2; exit 1; }
|
|
|
29
29
|
|
|
30
30
|
VENV_DIR="${XDG_DATA_HOME:-$HOME/.local/share}/bathys/venv"
|
|
31
31
|
|
|
32
|
+
# Pin a specific version when needed (rollback channel):
|
|
33
|
+
# BATHYS_INSTALL_VERSION=0.7.0 bash install.sh
|
|
34
|
+
BATHYS_VERSION_SPEC="${BATHYS_INSTALL_VERSION:-bathys}"
|
|
35
|
+
|
|
32
36
|
# ------------------------------------------------------------------ python --
|
|
33
37
|
find_python() {
|
|
34
38
|
for cand in python3.12 python3.11 python3.10 python3 python; do
|
|
@@ -74,11 +78,11 @@ fi
|
|
|
74
78
|
|
|
75
79
|
# ---------------------------------------------------------------- install --
|
|
76
80
|
if [ "$UPGRADE" = yes ]; then
|
|
77
|
-
"$VENV_DIR/bin/pip" install --quiet --upgrade
|
|
78
|
-
|| die "pip install --upgrade
|
|
81
|
+
"$VENV_DIR/bin/pip" install --quiet --upgrade "$BATHYS_VERSION_SPEC" >/dev/null 2>&1 \
|
|
82
|
+
|| die "pip install --upgrade \"$BATHYS_VERSION_SPEC\" не удался (сеть/PyPI?)"
|
|
79
83
|
else
|
|
80
|
-
"$VENV_DIR/bin/pip" install --quiet
|
|
81
|
-
|| die "pip install
|
|
84
|
+
"$VENV_DIR/bin/pip" install --quiet "$BATHYS_VERSION_SPEC" >/dev/null 2>&1 \
|
|
85
|
+
|| die "pip install \"$BATHYS_VERSION_SPEC\" не удался (сеть/PyPI?)"
|
|
82
86
|
fi
|
|
83
87
|
[ -x "$VENV_DIR/bin/bathys" ] || die "bathys не появился в venv — проверьте вывод pip вручную"
|
|
84
88
|
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "bathys"
|
|
7
|
-
version = "0.7.
|
|
7
|
+
version = "0.7.2"
|
|
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 = [
|
|
@@ -59,7 +59,7 @@ async def _backend_ping(cfg: Config) -> tuple[bool, str]:
|
|
|
59
59
|
return False, f"{e.__class__.__name__}: {str(e)[:120]}"
|
|
60
60
|
|
|
61
61
|
|
|
62
|
-
async def run_checks(full: bool) -> int:
|
|
62
|
+
async def run_checks(full: bool, start_backend: bool = False) -> int:
|
|
63
63
|
cfg = Config.load()
|
|
64
64
|
results: list[bool] = []
|
|
65
65
|
|
|
@@ -71,11 +71,23 @@ async def run_checks(full: bool) -> int:
|
|
|
71
71
|
|
|
72
72
|
results.append(_ok("config loads", True, f"backend={cfg.searxng_url}"))
|
|
73
73
|
|
|
74
|
+
if start_backend and cfg.auto_start:
|
|
75
|
+
import httpx
|
|
76
|
+
|
|
77
|
+
from .services import ensure_running
|
|
78
|
+
|
|
79
|
+
print(" стартую бэкенд (—start-backend)…")
|
|
80
|
+
async with httpx.AsyncClient() as _http:
|
|
81
|
+
try:
|
|
82
|
+
mode = await ensure_running(cfg, _http)
|
|
83
|
+
print(f" бэкенд поднят (режим: {mode})")
|
|
84
|
+
except Exception as e: # noqa: BLE001 — diagnostics must not die
|
|
85
|
+
print(f" не удалось поднять бэкенд: {e.__class__.__name__}: {e}")
|
|
74
86
|
ping_ok, detail = await _backend_ping(cfg)
|
|
75
87
|
results.append(_ok("searxng backend", ping_ok, detail))
|
|
76
88
|
if not ping_ok and cfg.auto_start:
|
|
77
|
-
print(" hint:
|
|
78
|
-
"
|
|
89
|
+
print(" hint: запустите с --start-backend, чтобы поднять бэкенд "
|
|
90
|
+
"перед проверкой, или сделайте любой вызов инструмента")
|
|
79
91
|
|
|
80
92
|
marker = cfg.searxng_home / "repo" / ".bathys-ref"
|
|
81
93
|
if cfg.searxng_home.joinpath("repo").is_dir():
|
|
@@ -130,9 +142,11 @@ def main() -> None:
|
|
|
130
142
|
ap = argparse.ArgumentParser(prog="bathys-doctor",
|
|
131
143
|
description="Bathys local stack diagnostics")
|
|
132
144
|
ap.add_argument("--full", action="store_true",
|
|
133
|
-
help="
|
|
145
|
+
help="также запустить headless chromium (медленнее)")
|
|
146
|
+
ap.add_argument("--start-backend", action="store_true",
|
|
147
|
+
help="поднять бэкенд SearXNG перед проверкой (иначе пинг честно скажет, что сервер не запущен)")
|
|
134
148
|
args = ap.parse_args()
|
|
135
|
-
raise SystemExit(asyncio.run(run_checks(args.full)))
|
|
149
|
+
raise SystemExit(asyncio.run(run_checks(args.full, args.start_backend)))
|
|
136
150
|
|
|
137
151
|
|
|
138
152
|
if __name__ == "__main__":
|
|
@@ -480,6 +480,116 @@ def setup(searxng_home: str | None = None, skip_browser: bool = False) -> int:
|
|
|
480
480
|
return rc
|
|
481
481
|
|
|
482
482
|
|
|
483
|
+
def uninstall(purge: bool, targets: list[str] | None) -> int:
|
|
484
|
+
"""`bathys uninstall` — симметрия установки: снять сервер Bathys с харнессов.
|
|
485
|
+
|
|
486
|
+
Удаляет ТОЛЬКО записи `bathys` из конфигов (чужие серверы не трогаются);
|
|
487
|
+
конфиг-файлы и бэкапы остаются. --purge дополнительно удаляет приватный
|
|
488
|
+
venv однострочника, кэш и данные (спрашивать подтверждение нечего: вызов
|
|
489
|
+
уже явно --purge). Точечно: bathys uninstall hermes zcode.
|
|
490
|
+
"""
|
|
491
|
+
all_targets = _all_targets()
|
|
492
|
+
names = targets or list(all_targets)
|
|
493
|
+
removed, absent = [], []
|
|
494
|
+
for name in names:
|
|
495
|
+
if name not in all_targets:
|
|
496
|
+
print(f"[SKIP] {name}: неизвестный таргет (--list для карты)")
|
|
497
|
+
continue
|
|
498
|
+
path, dotpath, fmt = all_targets[name]
|
|
499
|
+
if fmt in ("goose", "hermes"):
|
|
500
|
+
if not path.is_file():
|
|
501
|
+
absent.append(name); continue
|
|
502
|
+
text = path.read_text(encoding="utf-8")
|
|
503
|
+
if not _yaml_current_ok(text, dotpath, "bathys", fmt, None) \
|
|
504
|
+
and f" bathys:" not in text:
|
|
505
|
+
absent.append(name); continue
|
|
506
|
+
new_text = _yaml_remove(text, dotpath, "bathys")
|
|
507
|
+
if new_text != text:
|
|
508
|
+
bkp = _backup(path)
|
|
509
|
+
path.write_text(new_text, encoding="utf-8")
|
|
510
|
+
print(f"[OK] {name}: bathys удалён из {path} (бэкап: {bkp.name})")
|
|
511
|
+
removed.append(name)
|
|
512
|
+
else:
|
|
513
|
+
absent.append(name)
|
|
514
|
+
continue
|
|
515
|
+
if not path.is_file():
|
|
516
|
+
absent.append(name); continue
|
|
517
|
+
try:
|
|
518
|
+
data = json.loads(path.read_text(encoding="utf-8"))
|
|
519
|
+
except (json.JSONDecodeError, OSError) as e:
|
|
520
|
+
print(f"[SKIP] {name}: {path} не читается ({e.__class__.__name__})")
|
|
521
|
+
continue
|
|
522
|
+
servers = _get_by_path(data, dotpath)
|
|
523
|
+
if not servers or "bathys" not in servers:
|
|
524
|
+
absent.append(name); continue
|
|
525
|
+
bkp = _backup(path)
|
|
526
|
+
servers.pop("bathys", None)
|
|
527
|
+
path.write_text(json.dumps(data, indent=2, ensure_ascii=False) + "\n",
|
|
528
|
+
encoding="utf-8")
|
|
529
|
+
print(f"[OK] {name}: bathys удалён из {path} (бэкап: {bkp.name})")
|
|
530
|
+
removed.append(name)
|
|
531
|
+
|
|
532
|
+
for name in absent:
|
|
533
|
+
print(f"[=] {name}: записи bathys не найдено")
|
|
534
|
+
print(f"Снято с {len(removed)} харнессов; субагенты (если ставились) — "
|
|
535
|
+
"скопируйте сами: rm ~/.zcode/agents/bathys-researcher.md и т.п.")
|
|
536
|
+
|
|
537
|
+
if purge:
|
|
538
|
+
venv = Path.home() / ".local" / "share" / "bathys" / "venv"
|
|
539
|
+
cache = Path.home() / ".cache" / "bathys"
|
|
540
|
+
data = Path.home() / ".local" / "share" / "bathys"
|
|
541
|
+
import shutil as _sh
|
|
542
|
+
for label, d in (("venv", venv), ("кэш", cache), ("данные", data)):
|
|
543
|
+
if d.is_dir() and d != Path.home():
|
|
544
|
+
_sh.rmtree(d, ignore_errors=True)
|
|
545
|
+
print(f"[OK] purge: {label} удалён ({d})")
|
|
546
|
+
print("[i] purge: PATH-строку в ~/.profile или ~/.bashrc удалите вручную "
|
|
547
|
+
"(одна строка с bathys/venv/bin)")
|
|
548
|
+
else:
|
|
549
|
+
print("Кэш и данные НЕ тронуты; полный снос — `bathys uninstall --purge`.")
|
|
550
|
+
return 0
|
|
551
|
+
|
|
552
|
+
|
|
553
|
+
def _yaml_remove(text: str, root: str, name: str) -> str:
|
|
554
|
+
"""Remove root.<name> entry from a flat-roots YAML document."""
|
|
555
|
+
lines = text.splitlines()
|
|
556
|
+
out: list[str] = []
|
|
557
|
+
in_root = False
|
|
558
|
+
skipping = False
|
|
559
|
+
for ln in lines:
|
|
560
|
+
m = _YAML_BLOCK_HDR.match(ln)
|
|
561
|
+
if m and m.group(1) == root:
|
|
562
|
+
in_root = True; skipping = False
|
|
563
|
+
out.append(ln); continue
|
|
564
|
+
if m and in_root:
|
|
565
|
+
in_root = False; skipping = False
|
|
566
|
+
out.append(ln); continue
|
|
567
|
+
if in_root and re.match(rf"^ {re.escape(name)}:\s*(#.*)?$", ln):
|
|
568
|
+
skipping = True
|
|
569
|
+
continue
|
|
570
|
+
if skipping:
|
|
571
|
+
if not ln.strip() or ln.startswith(" "):
|
|
572
|
+
continue
|
|
573
|
+
skipping = False
|
|
574
|
+
out.append(ln)
|
|
575
|
+
return "\n".join(out) + "\n"
|
|
576
|
+
|
|
577
|
+
|
|
578
|
+
def uninstall_main() -> None:
|
|
579
|
+
"""`bathys uninstall …` — argparse wrapper for the uninstall subcommand."""
|
|
580
|
+
ap = argparse.ArgumentParser(
|
|
581
|
+
prog="bathys uninstall",
|
|
582
|
+
description="Снять Bathys с харнессов: удаляются только записи `bathys`; "
|
|
583
|
+
"чужие серверы и бэкапы не трогаются. --purge — дополнительно "
|
|
584
|
+
"venv/кэш/данные.")
|
|
585
|
+
ap.add_argument("targets", nargs="*", metavar="HARNESS",
|
|
586
|
+
help="точечно: имена харнессов (bathys uninstall hermes zcode)")
|
|
587
|
+
ap.add_argument("--purge", action="store_true",
|
|
588
|
+
help="также удалить venv/кэш/данные bathys")
|
|
589
|
+
args = ap.parse_args()
|
|
590
|
+
raise SystemExit(uninstall(args.purge, args.targets or None))
|
|
591
|
+
|
|
592
|
+
|
|
483
593
|
def main() -> None:
|
|
484
594
|
ap = argparse.ArgumentParser(
|
|
485
595
|
prog="bathys install",
|
|
@@ -372,7 +372,7 @@ def _hush_stdout_logs() -> None:
|
|
|
372
372
|
|
|
373
373
|
def main() -> None:
|
|
374
374
|
argv = sys.argv[1:]
|
|
375
|
-
if argv and argv[0] in ("install", "doctor", "setup"):
|
|
375
|
+
if argv and argv[0] in ("install", "uninstall", "doctor", "setup"):
|
|
376
376
|
# Console-style subcommands: one entry point covers the MCP server
|
|
377
377
|
# and the setup tooling, so `pip install bathys` is all a user needs.
|
|
378
378
|
from . import doctor, installer
|
|
@@ -380,6 +380,9 @@ def main() -> None:
|
|
|
380
380
|
if argv[0] == "install":
|
|
381
381
|
sys.argv = ["bathys install", *argv[1:]]
|
|
382
382
|
raise SystemExit(installer.main())
|
|
383
|
+
if argv[0] == "uninstall":
|
|
384
|
+
sys.argv = ["bathys uninstall", *argv[1:]]
|
|
385
|
+
raise SystemExit(installer.uninstall_main())
|
|
383
386
|
if argv[0] == "setup":
|
|
384
387
|
sys.argv = ["bathys setup", *argv[1:]]
|
|
385
388
|
raise SystemExit(installer.setup())
|
|
@@ -394,6 +397,7 @@ def main() -> None:
|
|
|
394
397
|
" харнессы → субагент → самодиагностика\n"
|
|
395
398
|
" bathys install [HARNESS…] автоподключение всех харнессов или точечное\n"
|
|
396
399
|
" (bathys install hermes; --list, --print-config)\n"
|
|
400
|
+
" bathys uninstall [HARNESS…] снять Bathys с харнессов (--purge: снос)\n"
|
|
397
401
|
" bathys doctor [--full] диагностика стека\n")
|
|
398
402
|
return
|
|
399
403
|
_hush_stdout_logs()
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
the SessionStart payload carried no usable session_id
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
1788864877
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|