Commit Graph
464 Commits
Author SHA1 Message Date
zeekay 833dbd715e 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
hanzo-mcp-v0.12.6 forge/hanzo-tools-browser-v0.4.3 hanzo-tools-browser-v0.4.3 forge/hanzo-mcp-v0.12.6
2026-03-06 03:33:33 -08:00
zeekay 4ebf26df3e 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 c69a39146a 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 237c801a7b 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 d2c6d50557 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 69b8948dd6 feat(mcp): consolidate memory surface and restore local tool compatibility 2026-03-04 15:21:57 -08:00
zeekay e35be26f75 fix(test-hanzo-tools): align tool expectations and modernize websockets import 2026-03-04 12:52:05 -08:00
zeekay 32aea4054b fix(ci): resolve root lint failures across workspace packages 2026-03-04 12:15:14 -08:00
zeekay 9491fc94bb fix(ci): apply black formatting and bump hanzo-mcp to 0.12.3 forge/hanzo-mcp-v0.12.3 hanzo-mcp-v0.12.3 2026-03-04 11:57:07 -08:00
zeekay 6c8d3c69b9 fix(ci): clean lint/format and bump hanzo-mcp to 0.12.2 forge/hanzo-mcp-v0.12.2 hanzo-mcp-v0.12.2 2026-03-04 11:53:51 -08:00
zeekay 79701d26c4 chore(release): bump hanzo-mcp to 0.12.1 hanzo-mcp-v0.12.1 forge/hanzo-mcp-v0.12.1 2026-03-04 11:30:57 -08:00
zeekay 0279142e4a fix: finalize latest MCP/CLI/SDK updates 2026-03-04 11:27:19 -08:00
zeekay 483d645dd9 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 2d66f60f4c 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 721bef7cb4 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 a605801a44 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 06c023e0b8 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 2006004828 fix(sdk): update paas resource module 2026-03-01 19:40:49 -08:00
zeekay 375a5bda63 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 a0a537cbb0 chore(hanzo-mcp): update uv lockfile after dependency changes 2026-03-01 16:20:12 -08:00
zeekay cd53d84e38 fix(hanzo-mcp): add missing mypy type annotations to pass CI 2026-03-01 16:08:00 -08:00
zeekay 8c05bf99d6 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 42fa4a7acf 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 8111d562e2 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 6c376a4d13 [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 4455f09a67 Update hanzo-mcp config and browser tool 2026-02-26 20:56:54 -08:00
2bb73348f4 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 6b8bec8e4f 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 e2dd5bda88 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 d094a8b481 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 8d1df37bf2 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 d43abebbe8 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 0f3ad2483c 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 be87531a14 chore: update uv.lock 2026-02-23 00:48:23 -08:00
zooqueenandHanzo Dev b2c00fb723 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 850d53fb75 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 798eeaec59 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 7f998bd17c 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
zooqueenandHanzo Dev 8dcfe497b3 fix(ci): exclude all subpackages from pyright scope
Subpackages have their own type checking. The previous exclude list was
incomplete, leaving 65 pyright errors from hanzo-tools-* packages.

Co-authored-by: Hanzo Dev <[email protected]>
2026-02-22 01:21:37 -08:00
zooqueenandHanzo Dev e64fe09df5 fix(ci): change pyright from strict to basic mode
Strict mode with 22+ disabled report types is contradictory and has caused
CI to never pass (0/50 runs). Basic mode is the honest configuration for
an SDK with many optional dependencies and generated code.

Co-authored-by: Hanzo Dev <[email protected]>
2026-02-22 00:41:16 -08:00
zooqueenandHanzo Dev 6569d008a8 fix(lint): add strict=False to zip() in using_grok example
Co-authored-by: Hanzo Dev <[email protected]>
2026-02-21 23:42:27 -08:00
zooqueenandHanzo Dev c14176a266 fix(lint): format hanzo-mcp tests with ruff
Co-authored-by: Hanzo Dev <[email protected]>
2026-02-21 23:37:18 -08:00
zooqueenandHanzo Dev b144973bfc fix(lint): resolve all ruff + black errors across all packages
Fix 35 ruff errors (E722, F841, B904, B905, B007, E741, S202, S310,
S306, S110, TID251, UP042, F401) and run black on 526 files.

Co-authored-by: Hanzo Dev <[email protected]>
2026-02-21 23:32:32 -08:00
zooqueenandHanzo Dev 964a72bd24 fix(lint): run black formatter on all 69 unformatted files
Co-authored-by: Hanzo Dev <[email protected]>
2026-02-21 14:49:49 -08:00
zooqueenandHanzo Dev ad65de44e1 fix(lint): resolve all ruff E722, S310, S202, S103, B905 errors
Replace bare except with except Exception, add noqa for legitimate
URL opens, tarfile extraction, chmod on installed binaries.

Co-authored-by: Hanzo Dev <[email protected]>
2026-02-21 14:44:43 -08:00
zooqueenandHanzo Dev 24739539d0 fix(cli): sort imports to satisfy ruff I001 lint rule
Co-authored-by: Hanzo Dev <[email protected]>
2026-02-21 13:56:05 -08:00
zooqueen 450cbbf689 feat(cli): replace all 18 stub commands with real API implementations
Every service command (vector, kv, search, doc, events, pubsub, queues,
jobs, secrets, tasks, fn, auto, flow, ml, o11y, cx, growth, platform)
now makes authenticated HTTP calls via shared service_request/check_response
utilities in base.py. No stubs, no hardcoded data, no placeholders.

Bump hanzo 0.4.0→0.4.1, hanzo-cli 0.2.0→0.2.1.
forge/v0.4.1 v0.4.1
2026-02-21 13:46:55 -08:00
zooqueen 16459919ad docs(hanzo-tools): add README with architecture, API, and usage examples 2026-02-21 12:15:26 -08:00
zooqueen 62f5e38602 fix(ci): handle hanzoai root package in publish workflow
The hanzoai package lives at the repo root (./pyproject.toml), not
under pkg/hanzoai/. All other packages live under pkg/.
2026-02-21 11:56:58 -08:00
zooqueen d0b39a63a8 fix(ci): build packages from repo root to avoid stdlib shadowing
The hanzoai package has a types/ directory that shadows Python's
stdlib types module when building from within pkg/hanzoai/. Build
from the repo root using `python -m build pkg/$package` instead.
2026-02-21 11:54:54 -08:00