Skip to content

feat(ecoseek): Phase 2 — direct hermes.ecoseek.org + legacy broker fallback - #6

Merged
alrobles merged 1 commit into
mainfrom
devin/1779661009-didal-phase2-hermes
May 24, 2026
Merged

feat(ecoseek): Phase 2 — direct hermes.ecoseek.org + legacy broker fallback#6
alrobles merged 1 commit into
mainfrom
devin/1779661009-didal-phase2-hermes

Conversation

@alrobles

Copy link
Copy Markdown
Owner

What does this PR do?

Updates the ecoseek plugin (remote/Beta side) to prefer direct connection to hermes.ecoseek.org over the legacy broker at broker.ecoseek.org. This is the companion to ecoseek PR NousResearch#58 which updates the Alpha/Emily side.

Related Issue

Part of DiDAL Phase 2 implementation. Companion PR: alrobles/ecoseek#58

Type of Change

  • 🐛 Bug fix (non-breaking change that fixes an issue)
  • ✨ New feature (non-breaking change that adds functionality)
  • 🔒 Security fix
  • 📝 Documentation update
  • ✅ Tests (adding or improving test coverage)
  • ♻️ Refactor (no behavior change)
  • 🎯 New skill (bundled or hub)

Changes Made

  • plugins/ecoseek/__init__.py: Added HERMES_REMOTE_URL + HERMES_ECOSEEK_API_KEY config with _get_remote_endpoint() resolver. Prefers direct hermes.ecoseek.org, falls back to legacy broker. Updated error messages. Updated docstring.
  • plugins/ecoseek/didal.py: Same config refactor — _send_to_beta() now uses _get_remote_endpoint() instead of hardcoded broker URL. Model default changed from openclaw/main to hermes.
  • plugins/ecoseek/plugin.yaml: Version bumped to 0.5.0.

How to Test

  1. Set HERMES_ECOSEEK_API_KEY=agenticplu-... in ~/.hermes/.env
  2. hermes plugins enable ecoseek
  3. HERMES_PLUGINS_DEBUG=1 hermes tools list 2>&1 | grep ecoseek
  4. Verify 4 tools load: escalate_remote, dialectical_exchange, eco_analyze, ku_hpc

For backward compatibility:

  1. Remove HERMES_ECOSEEK_API_KEY, set ECOSEEK_BROKER_URL + ECOSEEK_BROKER_KEY
  2. Verify tools still load and connect via broker

Checklist

Code

  • My commit messages follow Conventional Commits
  • I searched for existing PRs to make sure this isn't a duplicate
  • My PR contains only changes related to this fix/feature
  • I've run pytest tests/ -q and all tests pass
  • I've added tests for my changes
  • I've tested on my platform: Ubuntu 22.04

Documentation & Housekeeping

  • I've updated relevant documentation (docstrings) — or N/A
  • I've updated tool descriptions/schemas if I changed tool behavior — or N/A

Link to Devin session: https://app.devin.ai/sessions/6e7495b7d2e2416ba3f9626d6dcb9a2e
Requested by: @alrobles

…llback

Update ecoseek plugin to prefer direct connection to hermes.ecoseek.org
over the legacy broker at broker.ecoseek.org:

- HERMES_REMOTE_URL (default: https://hermes.ecoseek.org)
- HERMES_ECOSEEK_API_KEY for authentication
- HERMES_REMOTE_MODEL (default: hermes, was openclaw/main)
- Fallback to ECOSEEK_BROKER_URL + ECOSEEK_BROKER_KEY if direct not configured

Both __init__.py and didal.py now use _get_remote_endpoint() which
resolves the best available connection method.

Plugin version bumped to 0.5.0.
@devin-ai-integration

Copy link
Copy Markdown

🤖 Devin AI Engineer

I'll be helping with this pull request! Here's what you should know:

✅ I will automatically:

  • Address comments on this PR. Add '(aside)' to your comment to have me ignore it.
  • Look at CI failures and help fix them

Note: I can only respond to comments from users who have write access to this repository.

⚙️ Control Options:

  • Disable automatic comment and CI monitoring

@alrobles
alrobles merged commit 8698af7 into main May 24, 2026
alrobles pushed a commit that referenced this pull request Jun 1, 2026
…te + cell_size_check + synchronous=FULL)

Production corruption #6 left b-tree pages with zeroed headers but intact old cell content — the Bug E pattern. This fix applies three pragma calls on every connect():

- synchronous=FULL (was NORMAL): closes the WAL-checkpoint reordering window where a crash between WAL commit and main-DB write leaves a partially-written b-tree page header. Cost is <1ms per commit on local SSD; negligible at kanban write volume.

- secure_delete=ON: forces SQLite to zero freed page bytes on disk. If a torn write or hardware fault later corrupts a page, the underlying cell content is zero, so corruption is detectable and no stale rows can resurface as live data.

- cell_size_check=ON: adds a read-side guard so corrupt cells surface as errors at read time rather than as silent wrong-data returns.

All three are connection-scoped and re-applied on every connect(). secure_delete also writes a persistent flag into the DB header on the first call against a fresh DB, making the protection durable across processes for new DBs.

Tests added for all four required cases: each pragma active on a fresh connection, and all three re-applied after close+reopen. Also adds the required negative test (migration path does not reset pragmas).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant