Files
Zhifei Li ccb6136545 feat: OpenClaw integration - ClawHub skill, MCP structured output, and E2E tests (#272)
* feat: OpenClaw ClawHub skill and MCP structured output

Add a ClawHub-compatible skill (skills/leann-memory/) that enables
OpenClaw agents to use LEANN for 97% storage-compressed memory search
with free local embeddings. No PR to the OpenClaw repo required —
users install via `clawhub install` or copy the skill directory.

Skill files:
- claw.json: ClawHub manifest with permissions, tags, model compat
- instructions.md: Agent-facing instructions for search workflow
- README.md: Human-facing setup and comparison table

MCP server:
- Add --json flag to leann_search tool for structured output
  (enables machine-readable results for both MCP and skill paths)

Docs:
- openclaw-setup.md: Quick start guide with MCP and skill options
- openclaw-integration-plan.md: Full competitive analysis, storage
  growth calculations, and marketing strategy

Made-with: Cursor

* feat: OpenClaw integration tests, clean JSON output, and type fixes

- Add tests/openclaw/ suite: skill manifest, MCP protocol, build/search
  E2E, and subprocess-based MCP E2E tests
- Fix SearchResult.score to emit native float (not numpy.float32)
- Add --json quiet mode to suppress informational prints to stderr
- Redirect C++ diagnostic printf to stderr in faiss submodule
- Add stdout fd-level redirection with libc.fflush for clean JSON output
- Fix ty type checker errors (assert shutil.which not None, pytest.skip)

Made-with: Cursor

* feat: real OpenClaw E2E integration test

- Add test_openclaw_e2e.py: 11 tests against a live OpenClaw Docker
  instance with real memory formation via qwen3:8b + native Ollama API
- Fix docker-compose.yml: use --bind lan and native ollama API for
  proper tool calling (openai-completions silently breaks it)
- Add tests/openclaw/.gitignore for docker-data/

Made-with: Cursor

* chore: remove internal strategy docs from public repo

Made-with: Cursor

* docs: restore openclaw-setup.md (user-facing guide)

Made-with: Cursor

* chore: upgrade pytest to 9.0 and remove skip workarounds

pytest 9 fixes the type annotation for pytest.skip(), so ty passes
without the `raise pytest.skip.Exception(...)` workaround. Reverted
all skip calls back to the clean `pytest.skip(...)` form.

Made-with: Cursor

* fix: ruff 0.12.7 format and ty type narrowing for CI

- Reformat assert statements to match ruff 0.12.7 style
- Use assert narrowing instead of explicit type annotation for
  leann_mcp_bin after pytest.skip

Made-with: Cursor
2026-03-06 23:59:11 -08:00

2.0 KiB
Executable File