Commit Graph
476 Commits
Author SHA1 Message Date
zeekay dd5ae39e55 fix(ci): install local hanzo-tools-agent in release-check venv
The release-check creates a fresh venv that pulls from PyPI where
hanzo-tools-agent 0.3.1 still has IChingTool. Override with local.
2026-03-06 15:01:10 -08:00
zeekay 86410899d0 fix(ci): drop --no-deps from local tool installs to resolve psutil
The --no-deps flag skipped transitive deps like psutil needed by
hanzo-tools-shell. Let uv resolve deps naturally.
2026-03-06 14:58:31 -08:00
zeekay cc7af1282b fix(ci): remove PYTEST_DISABLE_PLUGIN_AUTOLOAD, override addopts in CI
The pyproject.toml addopts includes -p asyncio which conflicts with
PYTEST_DISABLE_PLUGIN_AUTOLOAD=1. Override addopts in CI commands
to get clean test output with full error messages.
2026-03-06 14:53:07 -08:00
zeekay c0f2f47959 fix(ci): install local tool packages in CI to match monorepo renames
CI was pulling hanzo-tools-agent 0.3.1 from PyPI which still has
IChingTool. Override with local editable installs so ZenTool/etc
are available during tests.
2026-03-06 14:49:55 -08:00
zeekay 248267bc8d fix(ci): sort imports in 4 test files (ruff I001) 2026-03-06 14:45:17 -08:00
zeekay 4c8b36fab9 ci: switch all workflows to hanzo-build ARC runners, fix stale iching refs
- Replace ubuntu-latest with hanzo-build across all 11 workflow files
- Fix IChingTool → ZenTool references in test-hanzo-mcp and test-hanzo-tools
2026-03-06 14:42:06 -08:00
zeekay d63f961a42 fix(ci): align test expectations with tool renames, fix ruff lint/format
- test_all_tools: todo→tasks, iching→zen tool name expectations
- ruff: fix import sorting in test files
- ruff: format server.py and batch_tool.py
2026-03-06 14:10:57 -08:00
zeekay d5f5c3e400 chore: gitignore build/ artifacts, remove tracked build files 2026-03-06 12:24:01 -08:00
zeekay 5c93279b64 fix(screen): write captures to file instead of returning inline base64
Screenshots and session frames are now saved to ~/.hanzo/screen/ and
the tool returns the file path. Prevents blowing up context with ~52K
chars of base64 per capture.
2026-03-06 04:18:32 -08:00
zeekay 2627398822 fix(mcp): inject hanzo-mcp version into MCP server metadata
Sets _mcp_server.version from importlib.metadata so clients see the
correct hanzo-mcp package version instead of the default.
2026-03-06 03:56:01 -08:00
zeekay 074acc447d feat(browser): add wait_for_selector, query_selector_all to extension actions 2026-03-06 03:49:20 -08:00
zeekay 6528f39f13 feat(browser): add navigation/fetch/history to extension actions 2026-03-06 03:43:55 -08:00
zeekay 3ac1f9f890 fix(browser): fix extension result passthrough, add DOM actions
- Fix result normalization: non-dict values no longer crash with **spread
- Add 20+ DOM actions to extension_actions set (get/set HTML/text,
  attributes, styles, classes, mutations, localStorage, cookies, etc.)
- Bump hanzo-tools-browser 0.4.3, hanzo-mcp 0.12.6
2026-03-06 03:33:33 -08:00
zeekay d5818d2dc9 feat(mcp): unify tool surfaces, rename iching→zen, fix test infrastructure
- Consolidate memory tools into single unified surface
- Rename IChingTool → ZenTool across agent tools
- Rename tool files: proc_tool→exec_tool, net_tool→fetch_tool,
  vcs_tool→git_tool, todo_tool→tasks_tool
- Add hanzo_tool.py for unified Hanzo API surface
- Add workspace_tool.py for config management
- Add hanzo-tools-ui package with GitHub API integration
- Add unified.py core tool dispatcher
- Update IAM client to RFC-compliant OAuth endpoints
- Fix pytest-asyncio plugin conflict: pin <1.0.0, fix addopts
  double-registration, and align test APIs to current signatures
- Fix integration tests: PermissionManager API, ReviewProtocol
  focus values, AgentTool parameter names, mock llm module for CI
2026-03-06 03:13:54 -08:00
zeekay aff3ec6e8a bump: hanzo-tools-browser 0.4.2, hanzo-mcp 0.12.4
- browser: auto-start CDP bridge on BrowserTool init (extension-first routing)
- mcp: pin hanzo-tools-browser>=0.4.2
2026-03-06 00:55:37 -08:00
zeekay 167ed4ed80 fix(browser): auto-start CDP bridge on BrowserTool init
The CDP bridge server (ws://localhost:9223 + http://localhost:9224)
was never starting because the entrypoint loader instantiates
BrowserTool directly, bypassing the package-level register_tools()
which called start_cdp_bridge().

Now BrowserTool.__init__() auto-starts the bridge when backend is
not "playwright", ensuring the browser extension can connect and
be used as the preferred backend over headless Playwright.
2026-03-06 00:32:42 -08:00
zeekay 08cd64afac feat(browser): configurable backend + fix CDP bridge for websockets >= 13
- Add BROWSER_BACKEND env var: firefox | chrome | extension | playwright | auto
- Config persists to ~/.hanzo/extension/config.json
- Fix CDP bridge WebSocket handler signature for websockets >= 13 (new API)
- Add browser-based client resolution in CDP bridge
- Add /config GET/POST endpoints for extension preference sync
- Backend-aware routing: explicit backends don't fall back to Playwright
2026-03-04 19:35:00 -08:00
zeekay 257b919265 feat(mcp): consolidate memory surface and restore local tool compatibility 2026-03-04 15:21:57 -08:00
zeekay 3d697783dd fix(test-hanzo-tools): align tool expectations and modernize websockets import 2026-03-04 12:52:05 -08:00
zeekay 98a1ef1f7c fix(ci): resolve root lint failures across workspace packages 2026-03-04 12:15:14 -08:00
zeekay 668c9ca6da fix(ci): apply black formatting and bump hanzo-mcp to 0.12.3 2026-03-04 11:57:07 -08:00
zeekay 5ed24f2dfb fix(ci): clean lint/format and bump hanzo-mcp to 0.12.2 2026-03-04 11:53:51 -08:00
zeekay cf25f89ae3 chore(release): bump hanzo-mcp to 0.12.1 2026-03-04 11:30:57 -08:00
zeekay 453485d061 fix: finalize latest MCP/CLI/SDK updates 2026-03-04 11:27:19 -08:00
zeekay 79bc725482 feat(dns): add multi-provider DNS CLI
- hanzo dns zones/list/add/rm/update commands
- Multi-provider architecture: Cloudflare + CoreDNS
- Parallel queries across all configured providers
- Provider abstraction for easy extension (Route53, GoDaddy, etc.)
- Thread-safe parallel execution with ThreadPoolExecutor
- Legacy credential format backward compatible
2026-03-03 23:04:29 -08:00
zooqueen f0fab6fe4c fix(ci): apply black formatting to base.py and enhanced_repl.py
Reformat multiline string arguments in write_text() calls and
collapse a ternary expression to satisfy black<26.1 style check
in the Test Hanzo Python SDK CI workflow.
2026-03-03 07:58:23 -08:00
zooqueen 5a5641c6df Add Pages resource and Gateway resource with DNS alignment
New Pages resource for CF Pages project/deployment/domain management.
New Gateway resource for rate limit and routing rule CRUD. DNS resource
gains update_record and verify_domain methods for platform alignment.
2026-03-03 07:45:05 -08:00
zeekay d3d3961399 feat: rename PostHog analytics -> Insights in hanzo-mcp
- Add insights_analytics.py with InsightsAnalytics class
- Env var reads INSIGHTS_API_KEY first, falls back to POSTHOG_API_KEY
- Analytics = InsightsAnalytics alias preserves backward compat
- Delete posthog_analytics.py
- Update __init__.py imports
2026-03-02 14:09:16 -08:00
zooqueenandGitHub 6f7b1abbf6 Merge pull request #28 from hanzoai/feat/iam-password-management
feat(iam): add set-password and enforce-hashing CLI commands
2026-03-02 08:17:34 -08:00
zeekay 4609e0a0ca fix(sdk): update paas resource module 2026-03-01 19:40:49 -08:00
zeekay be1d607d1c feat(sdk): add datastore, docdb, ingress, mpc, paas resource modules
New API resources for infrastructure management:
- datastore: RAG vector store operations
- docdb: document database CRUD
- ingress: traffic routing management
- mpc: multi-party computation endpoints
- paas: platform-as-a-service deployment
2026-03-01 19:37:21 -08:00
zeekay 13f91a8ba2 chore(hanzo-mcp): update uv lockfile after dependency changes 2026-03-01 16:20:12 -08:00
zeekay 9f0d4e7a97 fix(hanzo-mcp): add missing mypy type annotations to pass CI 2026-03-01 16:08:00 -08:00
zeekay 3e3e1ac861 fix(ci): pin black <26.1 to avoid internal error, lower requires-python to 3.12
Black 26.1.0 crashes on multiple exception types in parentheses.
The requires-python bump to 3.14 broke CI which runs Python 3.12.
2026-03-01 16:01:16 -08:00
zeekay 3a817115ae feat(memory): consolidate 9 memory tools → single unified memory tool
Switch TOOLS export from individual tools list to [UnifiedMemoryTool],
replacing 9 separate MCP tools (recall_memories, create_memories,
update_memories, delete_memories, manage_memories, recall_facts,
store_facts, summarize_to_memory, manage_knowledge_bases) with a
single action-param 'memory' tool. Individual tool classes remain
available for direct import.
2026-03-01 15:19:15 -08:00
zeekay 12d58510e6 feat(memory): add no-backend markdown fallback for all memory MCP tools
Memory tools now work out-of-the-box without any backend installed.
Instead of raising ImportError when hanzo-memory is not available,
all tools fall back to MarkdownMemoryBackend which:

- Reads context from local .md files (MEMORY.md, LLM.md, CLAUDE.md,
  AGENTS.md, GEMINI.md, etc.) in CWD and parent dirs up to 4 levels
- Writes new memories to MEMORY.md at project root or ~/.claude/MEMORY.md
- Uses keyword scoring for search (zero external dependencies)
- Stores session facts in-memory

Changes:
- pkg/hanzo-tools-memory: add markdown_memory.py (new MarkdownMemoryBackend)
- pkg/hanzo-tools-memory: update memory_tools.py, knowledge_tools.py,
  unified_memory_tool.py to use markdown fallback via _get_backend()
- pkg/hanzo-tools-memory: update __init__.py to export ALL_TOOL_CLASSES
  (individual tools) so each gets its own MCP tool name
- pkg/hanzo-tools-memory: bump to 0.2.1 (published to PyPI)
- pkg/hanzo-mcp: bump to 0.11.8 to force uvx venv rebuild (published)

Install hanzo-tools-memory[full] for full vector search via hanzo-memory.
2026-03-01 14:54:12 -08:00
zeekay 265de87103 [chore] bump all packages to Python 3.14+
Update requires-python to >=3.14 in all 46 pkg/ pyproject.toml files
and the root pyproject.toml (47 files total).
2026-02-28 12:43:10 -08:00
zeekay 3ed87f85df Update hanzo-mcp config and browser tool 2026-02-26 20:56:54 -08:00
5b735905db feat(iam): add set-password and enforce-hashing CLI commands (#27)
* feat(iam): add set-password and enforce-hashing CLI commands

Adds two new top-level IAM commands:
- `hanzo iam set-password USER` — directly set/reset a user's password
  via the /api/set-password endpoint (server-side argon2id hashing)
- `hanzo iam enforce-hashing` — set org passwordType to argon2id and
  audit all users for plaintext passwords

* style: format iam.py with black line-length rules

---------

Co-authored-by: Hanzo Dev <[email protected]>
2026-02-26 12:38:49 -08:00
zooqueenandHanzo Dev c4409307ee style: format iam.py with black line-length rules
Co-authored-by: Hanzo Dev <[email protected]>
2026-02-26 12:27:55 -08:00
zooqueenandHanzo Dev d49898c236 feat(iam): add set-password and enforce-hashing CLI commands
Adds two new top-level IAM commands:
- `hanzo iam set-password USER` — directly set/reset a user's password
  via the /api/set-password endpoint (server-side argon2id hashing)
- `hanzo iam enforce-hashing` — set org passwordType to argon2id and
  audit all users for plaintext passwords

Co-authored-by: Hanzo Dev <[email protected]>
2026-02-26 10:24:59 -08:00
zeekay 394c437277 rebrand: rename litellm module to llm — complete purge
All imports, test files, docs, and config references updated.
import litellm → import llm across entire codebase.
2026-02-25 15:13:14 -08:00
zeekay 6f2c239ea6 rebrand: replace litellm package dep with hanzo-llm
All pyproject.toml deps now reference hanzo-llm (Hanzo's fork)
instead of upstream litellm. Python import name stays as litellm.
2026-02-25 14:39:34 -08:00
zeekay dd550ad8be refactor(mcp): rename hanzo-tools-platform to hanzo-tools-paas
Clearer name — "paas" immediately conveys what the tool does.
MCP tool name changes from "platform" to "paas".
2026-02-24 22:04:47 -08:00
zeekay ec166c6416 feat(mcp): add auth, kms, and platform MCP tools
Add 3 new hanzo-tools-* packages exposing Hanzo platform services via MCP:

- hanzo-tools-auth: HanzoSession singleton + LoginTool (status/whoami/logout/refresh)
- hanzo-tools-kms: KMSTool (list/get/set/delete/inject secrets via KMS)
- hanzo-tools-platform: PlatformTool (PaaS deployments, IAM users/orgs, cloud services)

Wire into hanzo-mcp as dependencies and register in entrypoint loader.
2026-02-24 21:56:50 -08:00
zeekay d1ce8c7c45 chore: update uv.lock 2026-02-23 00:48:23 -08:00
zooqueenandHanzo Dev a43c09b707 feat(hanzo-cli): add native hanzo.toml support for PaaS deployments
Add TOML config parser that converts hanzo.toml manifests into PaaS
container API payloads. New `deploy up` command reads hanzo.toml from
CWD and creates or updates containers. Also adds --config flag to
`deploy create` for explicit manifest path. Adds tomli dependency for
Python 3.9/3.10 compat.

Co-authored-by: Hanzo Dev <[email protected]>
2026-02-22 15:59:24 -08:00
zooqueen 23fd4b7b55 fix(bot): use OPENCLAW_GATEWAY_TOKEN and write bot.json config
The installed @hanzo/bot binary (v2026.2.16) reads OPENCLAW_GATEWAY_TOKEN
for the node run command's token resolution, not BOT_GATEWAY_TOKEN.
Also writes gateway config to bot.json so the config loader picks it up
as a fallback.
2026-02-22 15:42:15 -08:00
zooqueen ed13435e6c feat(hanzo-cli): add bot node agent commands with browser OAuth login
Add install, login, logout, run, stop subcommands to `hanzo bot` for
managing local bot agent nodes that connect to gw.hanzo.bot. Browser
OAuth flow authenticates against hanzobot-client-id with dedicated token
storage at ~/.hanzo/bot/token.json. Password grant fallback via
--no-browser flag.

Normalize env var lookup: IAM_ canonical prefix with HANZO_IAM_ accepted
as backwards-compatible fallback via _env() helper in both auth.py and
bot/commands.py.
2026-02-22 14:49:04 -08:00
zeekay 63f0b05461 Add hanzo-s3 package — S3-compatible storage client wrapper
Wraps minio Python client with Hanzo-branded aliases:
- hanzo_s3.Client / S3Client (→ minio.Minio)
- hanzo_s3.S3Error / S3Exception
- hanzo_s3.S3Admin / Admin (→ minio.MinioAdmin)
2026-02-22 14:39:07 -08:00