bathys 0.7.0__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.0 → bathys-0.7.2}/.github/workflows/ci.yml +10 -0
- {bathys-0.7.0 → bathys-0.7.2}/.remember/logs/memory-2026-09-08.log +40 -0
- bathys-0.7.2/.remember/tmp/no-transcript-notice +1 -0
- {bathys-0.7.0 → bathys-0.7.2}/.remember/tmp/session-slug +1 -0
- {bathys-0.7.0 → bathys-0.7.2}/CHANGELOG.md +20 -0
- {bathys-0.7.0 → bathys-0.7.2}/PKG-INFO +16 -6
- {bathys-0.7.0 → bathys-0.7.2}/README.md +15 -5
- bathys-0.7.2/install.sh +109 -0
- {bathys-0.7.0 → bathys-0.7.2}/pyproject.toml +1 -1
- {bathys-0.7.0 → bathys-0.7.2}/src/bathys/__init__.py +1 -1
- {bathys-0.7.0 → bathys-0.7.2}/src/bathys/doctor.py +19 -5
- {bathys-0.7.0 → bathys-0.7.2}/src/bathys/installer.py +110 -0
- {bathys-0.7.0 → bathys-0.7.2}/src/bathys/server.py +5 -1
- bathys-0.7.0/.remember/tmp/capture-gap-skipped +0 -1
- bathys-0.7.0/.remember/tmp/no-transcript-notice +0 -1
- {bathys-0.7.0 → bathys-0.7.2}/.gitignore +0 -0
- {bathys-0.7.0 → bathys-0.7.2}/.remember/.gitignore +0 -0
- {bathys-0.7.0 → bathys-0.7.2}/.remember/logs/hook-errors.log +0 -0
- {bathys-0.7.0 → bathys-0.7.2}/.remember/logs/memory-2026-09-06.log +0 -0
- {bathys-0.7.0 → bathys-0.7.2}/.remember/logs/memory-2026-09-07.log +0 -0
- {bathys-0.7.0 → bathys-0.7.2}/.remember/tmp/case-divergence +0 -0
- {bathys-0.7.0 → bathys-0.7.2}/.remember/tmp/post-tool-ran +0 -0
- {bathys-0.7.0 → bathys-0.7.2}/Dockerfile +0 -0
- {bathys-0.7.0 → bathys-0.7.2}/LICENSE +0 -0
- {bathys-0.7.0 → bathys-0.7.2}/agents/HARNESS-DROPIN.md +0 -0
- {bathys-0.7.0 → bathys-0.7.2}/agents/bathys-researcher.md +0 -0
- {bathys-0.7.0 → bathys-0.7.2}/agents/skills/bathys-deep-dive/SKILL.md +0 -0
- {bathys-0.7.0 → bathys-0.7.2}/agents/skills/bathys-source-audit/SKILL.md +0 -0
- {bathys-0.7.0 → bathys-0.7.2}/docs/adr/0001-python-crawl4ai.md +0 -0
- {bathys-0.7.0 → bathys-0.7.2}/docs/adr/0002-pin-mcp-sdk-v1.md +0 -0
- {bathys-0.7.0 → bathys-0.7.2}/docs/adr/0003-self-managed-searxng.md +0 -0
- {bathys-0.7.0 → bathys-0.7.2}/docs/adr/0004-bm25-distillation.md +0 -0
- {bathys-0.7.0 → bathys-0.7.2}/docs/adr/0005-cache-raw-before-distill.md +0 -0
- {bathys-0.7.0 → bathys-0.7.2}/docs/adr/0006-three-tool-string-surface.md +0 -0
- {bathys-0.7.0 → bathys-0.7.2}/docs/architecture/data-flow.md +0 -0
- {bathys-0.7.0 → bathys-0.7.2}/docs/architecture/overview.md +0 -0
- {bathys-0.7.0 → bathys-0.7.2}/docs/architecture/pipeline.md +0 -0
- {bathys-0.7.0 → bathys-0.7.2}/docs/assets/banner.svg +0 -0
- {bathys-0.7.0 → bathys-0.7.2}/docs/contracts/config.md +0 -0
- {bathys-0.7.0 → bathys-0.7.2}/docs/contracts/mcp-tools.md +0 -0
- {bathys-0.7.0 → bathys-0.7.2}/docs/contracts/module-contracts.md +0 -0
- {bathys-0.7.0 → bathys-0.7.2}/docs/contracts/output-format.md +0 -0
- {bathys-0.7.0 → bathys-0.7.2}/docs/getting-started/cases.md +0 -0
- {bathys-0.7.0 → bathys-0.7.2}/docs/getting-started/configure.md +0 -0
- {bathys-0.7.0 → bathys-0.7.2}/docs/getting-started/install.md +0 -0
- {bathys-0.7.0 → bathys-0.7.2}/docs/getting-started/integrate.md +0 -0
- {bathys-0.7.0 → bathys-0.7.2}/docs/index.md +0 -0
- {bathys-0.7.0 → bathys-0.7.2}/docs/integrations/claude-code.md +0 -0
- {bathys-0.7.0 → bathys-0.7.2}/docs/integrations/cursor.md +0 -0
- {bathys-0.7.0 → bathys-0.7.2}/docs/integrations/generic-mcp.md +0 -0
- {bathys-0.7.0 → bathys-0.7.2}/docs/integrations/overview.md +0 -0
- {bathys-0.7.0 → bathys-0.7.2}/docs/integrations/zcode.md +0 -0
- {bathys-0.7.0 → bathys-0.7.2}/docs/meta/glossary.md +0 -0
- {bathys-0.7.0 → bathys-0.7.2}/docs/meta/style-guide.md +0 -0
- {bathys-0.7.0 → bathys-0.7.2}/docs/operations/metrics.md +0 -0
- {bathys-0.7.0 → bathys-0.7.2}/docs/operations/runbook.md +0 -0
- {bathys-0.7.0 → bathys-0.7.2}/docs/product/charter.md +0 -0
- {bathys-0.7.0 → bathys-0.7.2}/docs/product/competitive.md +0 -0
- {bathys-0.7.0 → bathys-0.7.2}/docs/product/features.md +0 -0
- {bathys-0.7.0 → bathys-0.7.2}/docs/product/mind-initiative.md +0 -0
- {bathys-0.7.0 → bathys-0.7.2}/docs/product/ocr-initiative.md +0 -0
- {bathys-0.7.0 → bathys-0.7.2}/docs/product/roadmap.md +0 -0
- {bathys-0.7.0 → bathys-0.7.2}/integrations/README.md +0 -0
- {bathys-0.7.0 → bathys-0.7.2}/integrations/hermes/README.md +0 -0
- {bathys-0.7.0 → bathys-0.7.2}/integrations/hermes/install.py +0 -0
- {bathys-0.7.0 → bathys-0.7.2}/integrations/pi/README.md +0 -0
- {bathys-0.7.0 → bathys-0.7.2}/integrations/pi/assets/bathys-rules.md +0 -0
- {bathys-0.7.0 → bathys-0.7.2}/integrations/zcode/README.md +0 -0
- {bathys-0.7.0 → bathys-0.7.2}/npm/bathys-mcp/.remember/.gitignore +0 -0
- {bathys-0.7.0 → bathys-0.7.2}/npm/bathys-mcp/.remember/logs/hook-errors.log +0 -0
- {bathys-0.7.0 → bathys-0.7.2}/npm/bathys-mcp/.remember/logs/memory-2026-09-08.log +0 -0
- {bathys-0.7.0 → bathys-0.7.2}/npm/bathys-mcp/.remember/tmp/no-transcript-notice +0 -0
- {bathys-0.7.0 → bathys-0.7.2}/npm/bathys-mcp/.remember/tmp/post-tool-ran +0 -0
- {bathys-0.7.0 → bathys-0.7.2}/npm/bathys-mcp/README.md +0 -0
- {bathys-0.7.0 → bathys-0.7.2}/npm/bathys-mcp/bin/cli.js +0 -0
- {bathys-0.7.0 → bathys-0.7.2}/npm/bathys-mcp/bin/postinstall.js +0 -0
- {bathys-0.7.0 → bathys-0.7.2}/npm/bathys-mcp/package.json +0 -0
- {bathys-0.7.0 → bathys-0.7.2}/scripts/acceptance_v02.py +0 -0
- {bathys-0.7.0 → bathys-0.7.2}/scripts/batch_check.py +0 -0
- {bathys-0.7.0 → bathys-0.7.2}/scripts/metrics_report.py +0 -0
- {bathys-0.7.0 → bathys-0.7.2}/scripts/smoke.py +0 -0
- {bathys-0.7.0 → bathys-0.7.2}/scripts/stdio_check.py +0 -0
- {bathys-0.7.0 → bathys-0.7.2}/src/bathys/batch.py +0 -0
- {bathys-0.7.0 → bathys-0.7.2}/src/bathys/cache.py +0 -0
- {bathys-0.7.0 → bathys-0.7.2}/src/bathys/compose.yaml +0 -0
- {bathys-0.7.0 → bathys-0.7.2}/src/bathys/config.py +0 -0
- {bathys-0.7.0 → bathys-0.7.2}/src/bathys/core.py +0 -0
- {bathys-0.7.0 → bathys-0.7.2}/src/bathys/crawler.py +0 -0
- {bathys-0.7.0 → bathys-0.7.2}/src/bathys/distill.py +0 -0
- {bathys-0.7.0 → bathys-0.7.2}/src/bathys/searx.py +0 -0
- {bathys-0.7.0 → bathys-0.7.2}/src/bathys/searxng-settings.yml +0 -0
- {bathys-0.7.0 → bathys-0.7.2}/src/bathys/services.py +0 -0
- {bathys-0.7.0 → bathys-0.7.2}/tests/test_batch.py +0 -0
- {bathys-0.7.0 → bathys-0.7.2}/tests/test_cache.py +0 -0
- {bathys-0.7.0 → bathys-0.7.2}/tests/test_config.py +0 -0
- {bathys-0.7.0 → bathys-0.7.2}/tests/test_core.py +0 -0
- {bathys-0.7.0 → bathys-0.7.2}/tests/test_distill.py +0 -0
- {bathys-0.7.0 → bathys-0.7.2}/tests/test_installer.py +0 -0
- {bathys-0.7.0 → bathys-0.7.2}/tests/test_searx.py +0 -0
- {bathys-0.7.0 → 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
|
|
@@ -195,3 +195,43 @@
|
|
|
195
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
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
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
|
|
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,26 @@
|
|
|
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
|
+
|
|
18
|
+
## [0.7.1] — 2026-09-08
|
|
19
|
+
|
|
20
|
+
### Добавлено
|
|
21
|
+
|
|
22
|
+
- **Однострочный установщик `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 (бэкенд поднимается при первом вызове — норма).
|
|
23
|
+
- README: однострочник — основной путь Quick start; `pip install` + `bathys setup` — равноправная альтернатива «без скрипта»; npm/исходники — под катом.
|
|
24
|
+
|
|
5
25
|
## [0.7.0] — 2026-09-08
|
|
6
26
|
|
|
7
27
|
Тема: «Ship & Setup» — двухъярусное извлечение без обязательного браузера и модульная установка.
|
|
@@ -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,21 +33,31 @@ Description-Content-Type: text/markdown
|
|
|
33
33
|
Сонар находит координаты, батискаф ныряет за полными текстами, дистиллятор поднимает на палубу только то, что отвечает на вопрос.
|
|
34
34
|
|
|
35
35
|

|
|
36
|
-

|
|
37
37
|

|
|
38
38
|

|
|
39
39
|
|
|
40
40
|
## ⚡ Quick start
|
|
41
41
|
|
|
42
|
-
|
|
42
|
+
**Одной командой** (Python ≥ 3.10; приватный venv, без sudo, идемпотентно):
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
curl -fsSL https://raw.githubusercontent.com/Korrnals/bathys/main/install.sh | bash
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Скрипт ставит пакет с PyPI в `~/.local/share/bathys/venv`, прописывает PATH, запускает `bathys setup` (браузер для JS-страниц → все найденные харнессы → субагент) и финальный `bathys-doctor`. Повторный запуск — безопасное обновление.
|
|
49
|
+
|
|
50
|
+
**Без скрипта** (то же самое вручную, для тех кто предпочитает pip):
|
|
43
51
|
|
|
44
52
|
```bash
|
|
45
53
|
pip install bathys # пакет: сервер + bathys setup/install/doctor
|
|
46
|
-
bathys setup # браузер
|
|
54
|
+
bathys setup # браузер → харнессы → субагент
|
|
47
55
|
bathys doctor # самодиагностика стека
|
|
48
56
|
```
|
|
49
57
|
|
|
50
|
-
|
|
58
|
+
Откат на конкретную версию: `BATHYS_INSTALL_VERSION=0.7.0 bash install.sh`. Снятие Bathys с харнессов — `bathys uninstall` (точечно: `bathys uninstall hermes`; полный снос — `--purge`).
|
|
59
|
+
|
|
60
|
+
SearXNG ставить руками не нужно: бэкенд поднимется сам при первом поиске (внешний инстанс → docker → нативный режим). Браузер нужен только для JS-страниц: обычные страницы Bathys читает собственным HTTP-движком, `BATHYS_BROWSER=off` отключает браузерный ярус полностью.
|
|
51
61
|
|
|
52
62
|
<details>
|
|
53
63
|
<summary><b>Альтернативные пути установки</b> (npm, исходники, минимальные образы)</summary>
|
|
@@ -180,7 +190,7 @@ docs/
|
|
|
180
190
|
|
|
181
191
|
## 📍 Статус
|
|
182
192
|
|
|
183
|
-
**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).
|
|
184
194
|
|
|
185
195
|
Репозиторий: `github.com/Korrnals/bathys`. До 1.0 остаются публикация пакета `bathys` на PyPI (имя свободно, публикация планируется к 1.0) и первый прогон Docker-образа; CI с matrix 3.10–3.12 уже в репозитории.
|
|
186
196
|
|
|
@@ -7,21 +7,31 @@
|
|
|
7
7
|
Сонар находит координаты, батискаф ныряет за полными текстами, дистиллятор поднимает на палубу только то, что отвечает на вопрос.
|
|
8
8
|
|
|
9
9
|

|
|
10
|
-

|
|
11
11
|

|
|
12
12
|

|
|
13
13
|
|
|
14
14
|
## ⚡ Quick start
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
**Одной командой** (Python ≥ 3.10; приватный venv, без sudo, идемпотентно):
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
curl -fsSL https://raw.githubusercontent.com/Korrnals/bathys/main/install.sh | bash
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Скрипт ставит пакет с PyPI в `~/.local/share/bathys/venv`, прописывает PATH, запускает `bathys setup` (браузер для JS-страниц → все найденные харнессы → субагент) и финальный `bathys-doctor`. Повторный запуск — безопасное обновление.
|
|
23
|
+
|
|
24
|
+
**Без скрипта** (то же самое вручную, для тех кто предпочитает pip):
|
|
17
25
|
|
|
18
26
|
```bash
|
|
19
27
|
pip install bathys # пакет: сервер + bathys setup/install/doctor
|
|
20
|
-
bathys setup # браузер
|
|
28
|
+
bathys setup # браузер → харнессы → субагент
|
|
21
29
|
bathys doctor # самодиагностика стека
|
|
22
30
|
```
|
|
23
31
|
|
|
24
|
-
|
|
32
|
+
Откат на конкретную версию: `BATHYS_INSTALL_VERSION=0.7.0 bash install.sh`. Снятие Bathys с харнессов — `bathys uninstall` (точечно: `bathys uninstall hermes`; полный снос — `--purge`).
|
|
33
|
+
|
|
34
|
+
SearXNG ставить руками не нужно: бэкенд поднимется сам при первом поиске (внешний инстанс → docker → нативный режим). Браузер нужен только для JS-страниц: обычные страницы Bathys читает собственным HTTP-движком, `BATHYS_BROWSER=off` отключает браузерный ярус полностью.
|
|
25
35
|
|
|
26
36
|
<details>
|
|
27
37
|
<summary><b>Альтернативные пути установки</b> (npm, исходники, минимальные образы)</summary>
|
|
@@ -154,7 +164,7 @@ docs/
|
|
|
154
164
|
|
|
155
165
|
## 📍 Статус
|
|
156
166
|
|
|
157
|
-
**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).
|
|
158
168
|
|
|
159
169
|
Репозиторий: `github.com/Korrnals/bathys`. До 1.0 остаются публикация пакета `bathys` на PyPI (имя свободно, публикация планируется к 1.0) и первый прогон Docker-образа; CI с matrix 3.10–3.12 уже в репозитории.
|
|
160
170
|
|
bathys-0.7.2/install.sh
ADDED
|
@@ -0,0 +1,109 @@
|
|
|
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
|
+
# 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
|
+
|
|
36
|
+
# ------------------------------------------------------------------ python --
|
|
37
|
+
find_python() {
|
|
38
|
+
for cand in python3.12 python3.11 python3.10 python3 python; do
|
|
39
|
+
if command -v "$cand" >/dev/null 2>&1; then
|
|
40
|
+
if "$cand" - <<'PY' >/dev/null 2>&1
|
|
41
|
+
import sys
|
|
42
|
+
raise SystemExit(0 if (3, 10) <= sys.version_info[:2] <= (3, 14) else 1)
|
|
43
|
+
PY
|
|
44
|
+
then
|
|
45
|
+
echo "$cand"
|
|
46
|
+
return 0
|
|
47
|
+
fi
|
|
48
|
+
fi
|
|
49
|
+
done
|
|
50
|
+
return 1
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
PY="$(find_python)" || die "Python 3.10–3.14 не найден. Установите его и повторите — либо вручную: pip install bathys && bathys setup"
|
|
54
|
+
note "python: $($PY --version 2>&1)"
|
|
55
|
+
|
|
56
|
+
# ------------------------------------------------------------------- venv --
|
|
57
|
+
if [ -x "$VENV_DIR/bin/bathys" ] && "$VENV_DIR/bin/bathys" --help >/dev/null 2>&1; then
|
|
58
|
+
note "venv уже живой: $VENV_DIR (обновляю пакет)"
|
|
59
|
+
UPGRADE=yes
|
|
60
|
+
else
|
|
61
|
+
note "создаю приватный venv: $VENV_DIR"
|
|
62
|
+
rm -rf "$VENV_DIR"
|
|
63
|
+
"$PY" -m venv "$VENV_DIR" 2>/dev/null \
|
|
64
|
+
|| "$PY" -m venv --without-pip "$VENV_DIR" \
|
|
65
|
+
|| die "не удалось создать venv в $VENV_DIR"
|
|
66
|
+
UPGRADE=no
|
|
67
|
+
fi
|
|
68
|
+
|
|
69
|
+
# bootstrap pip when the venv lacks it (minimal images without ensurepip)
|
|
70
|
+
if [ ! -x "$VENV_DIR/bin/pip" ]; then
|
|
71
|
+
note "pip отсутствует в venv — бутстрап через get-pip.py…"
|
|
72
|
+
TMP_GP="$(mktemp)"; trap 'rm -f "$TMP_GP"' EXIT
|
|
73
|
+
curl -fsSL https://bootstrap.pypa.io/get-pip.py -o "$TMP_GP" \
|
|
74
|
+
|| die "не удалось скачать get-pip.py (сеть?)"
|
|
75
|
+
"$VENV_DIR/bin/python" "$TMP_GP" -q >/dev/null 2>&1 \
|
|
76
|
+
|| die "get-pip.py не смог подняться в venv"
|
|
77
|
+
fi
|
|
78
|
+
|
|
79
|
+
# ---------------------------------------------------------------- install --
|
|
80
|
+
if [ "$UPGRADE" = yes ]; then
|
|
81
|
+
"$VENV_DIR/bin/pip" install --quiet --upgrade "$BATHYS_VERSION_SPEC" >/dev/null 2>&1 \
|
|
82
|
+
|| die "pip install --upgrade \"$BATHYS_VERSION_SPEC\" не удался (сеть/PyPI?)"
|
|
83
|
+
else
|
|
84
|
+
"$VENV_DIR/bin/pip" install --quiet "$BATHYS_VERSION_SPEC" >/dev/null 2>&1 \
|
|
85
|
+
|| die "pip install \"$BATHYS_VERSION_SPEC\" не удался (сеть/PyPI?)"
|
|
86
|
+
fi
|
|
87
|
+
[ -x "$VENV_DIR/bin/bathys" ] || die "bathys не появился в venv — проверьте вывод pip вручную"
|
|
88
|
+
|
|
89
|
+
# ------------------------------------------------------------------- PATH --
|
|
90
|
+
PATH_LINE='export PATH="$HOME/.local/share/bathys/venv/bin:$PATH"'
|
|
91
|
+
if ! case ":$PATH:" in *":$VENV_DIR/bin:"*) false;; esac; then
|
|
92
|
+
export PATH="$VENV_DIR/bin:$PATH"
|
|
93
|
+
fi
|
|
94
|
+
for rc in "$HOME/.profile" "$HOME/.bashrc"; do
|
|
95
|
+
if [ -f "$rc" ] && ! grep -qF 'bathys/venv/bin' "$rc"; then
|
|
96
|
+
printf '\n# bathys (one-line installer)\n%s\n' "$PATH_LINE" >> "$rc"
|
|
97
|
+
note "PATH дополнен в $rc — перезапустите шелл или: source $rc"
|
|
98
|
+
fi
|
|
99
|
+
done
|
|
100
|
+
|
|
101
|
+
say "установлен: $VENV_DIR/bin/bathys"
|
|
102
|
+
|
|
103
|
+
# ------------------------------------------------------------------ setup --
|
|
104
|
+
say "полная настройка (браузер → харнессы → субагент)…"
|
|
105
|
+
"$VENV_DIR/bin/bathys" setup
|
|
106
|
+
|
|
107
|
+
# ----------------------------------------------------------------- doctor --
|
|
108
|
+
say "финальная диагностика:"
|
|
109
|
+
exec "$VENV_DIR/bin/bathys" doctor
|
|
@@ -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
|