Commit Graph
327 Commits
Author SHA1 Message Date
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
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
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
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
zooqueenandHanzo Dev ed9b96bbb2 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 3e974c1135 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 1e37e9fd38 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 f93e5fb8ba 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 768a263e4f 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 7c4440809c 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.
2026-02-21 13:46:55 -08:00
zooqueen ef9e13f110 docs(hanzo-tools): add README with architecture, API, and usage examples 2026-02-21 12:15:26 -08:00
zooqueen bcdea21d23 feat(cli): add bot commands, s3 storage, dev/net passthrough
- Add `hanzo bot` command group (status, logs, deploy, env, events) via PaaS API
- Replace all storage placeholders with real boto3 S3 API calls to s3.hanzo.ai
- Rename `hanzo storage` → `hanzo s3` (storage kept as alias)
- Rewrite `hanzo dev` as lazy-install passthrough to @hanzo/dev binary
- Rewrite `hanzo net`/`hanzo node` as passthrough to hanzod binary
- Remove ~350 lines of inline orchestrator/node code in favor of os.execvp()
2026-02-21 11:54:01 -08:00
zooqueenandHanzo Dev df010e4acc feat(cli): add k8s kubectl wrapper and remove REPL
- Add `hanzo k8s` command group to hanzo-cli that wraps kubectl with
  Hanzo-managed auth and default namespace. Uses KubectlGroup that
  dynamically proxies unknown subcommands to kubectl (e.g.
  `hanzo k8s get pods` -> `kubectl get pods -n hanzo`).
- Remove REPL mode from hanzo wrapper: bare `hanzo` now shows help
  instead of dropping into interactive REPL.
- Remove hanzo-ai, hanzo-chat, hanzo-repl entry points.
- Make hanzo-cli a core dependency of hanzo (was optional [cli] extra).
- Remove unused typer dep, move openai/anthropic/prompt-toolkit to
  optional extras ([ai], [interactive]).

Co-authored-by: Hanzo Dev <[email protected]>
2026-02-21 09:46:50 -08:00
zooqueenandHanzo Dev 55979e8f2b fix: move hanzo-cli/kms to optional deps to unblock publish
hanzo-cli and hanzo-kms need to be published to PyPI first before
hanzo can depend on them. Move to optional [cli] extra for now.

Co-authored-by: Hanzo Dev <[email protected]>
2026-02-20 22:17:02 -08:00
zooqueenandHanzo Dev b3fcb0be7a feat: bump versions and add hanzo-cli/kms/iam to publish workflow
- hanzo-kms 1.0.0 -> 1.1.0 (fix create_secret null comment bug)
- hanzo-cli 0.1.0 -> 0.2.0 (add paas/kms/iam subcommands, top-level deploy alias)
- hanzo 0.3.48 -> 0.4.0 (add hanzo-cli and hanzo-kms as dependencies)
- Add hanzo-cli, hanzo-kms, hanzo-iam to publish-pypi.yml workflow

Co-authored-by: Hanzo Dev <[email protected]>
2026-02-20 22:15:39 -08:00
zooqueenandHanzo Dev 4526b39b17 feat(cli): add top-level deploy alias and fix KMS create_secret
- Add `hanzo deploy` as top-level alias for `hanzo paas deploy`
- Fix KMS create_secret sending null secretComment (caused 422 errors)
- Login callback page styling (from previous session)

Co-authored-by: Hanzo Dev <[email protected]>
2026-02-20 22:13:04 -08:00
zooqueenandHanzo Dev 0834abe2aa style: auto-fix ruff lint and format for Python 3.12
Run ruff check --fix and ruff format across the repo to fix ~495
auto-fixable lint errors (mostly I001 import sorting) and reformat
225 files to match the py312 target.

Co-authored-by: Hanzo Dev <[email protected]>
2026-02-20 21:29:31 -08:00
zooqueenandHanzo Dev 27b8c81262 fix(cli): refactor PaaS auth flow and fix container deploy payload
Extract _exchange_iam_token method for cleaner auth caching logic.
Fix deploy_env to send full container payload on PUT (PaaS requires it).
Add e2e test scaffold.

Co-authored-by: Hanzo Dev <[email protected]>
2026-02-20 19:09:05 -08:00
zooqueenandHanzo Dev 9f63cf85e9 feat: add hanzo-cli unified CLI with IAM, KMS, PaaS management
- New hanzo-cli package (0.1.0) providing the `hanzo` command
- Auth: browser OAuth + ROPC password login against hanzo.id (Casdoor)
- IAM subcommands: users, user, set-password, orgs, apps, sync-app
- KMS subcommands: list, get, set, delete, inject
- PaaS subcommands: orgs, projects, envs, deploy (create/status/logs/redeploy/env/delete)
- PaaS deploy supports both Docker images (--image) and git repos (--repo)
- Sticky org/project/env context for PaaS commands
- PaaS client with IAM→PaaS session exchange and auto-refresh
- hanzo-iam SDK v1.1.0: bearer_token auth, admin helpers, set_password/get_applications/update_application

Co-authored-by: Hanzo Dev <[email protected]>
2026-02-18 20:58:43 -08:00
zeekay 1303dc89d5 feat: wire CLI to PaaS API with IAM session exchange
- Add PaaS API client with IAM→session token exchange, auto-refresh,
  and session caching (~/.hanzo/paas_session.json)
- Add `hanzo auth context` for org/project/env selection against live API
- Wire `hanzo run` commands to PaaS container CRUD endpoints
- Wire `hanzo k8s` commands to PaaS cluster and workload endpoints
- Add `hanzo git` commands for provider/repo/branch management
- Fix auth.json token format handling (nested tokens.access_token)
- Extract shared find_container/extract_list helpers to api_client
2026-02-15 18:31:44 -08:00
zeekay 381c580d99 chore: sync uncommitted changes 2026-02-13 22:16:03 -08:00
zeekay 15cbf35697 feat: auth/IAM refactor + add hanzo-iam and hanzo-web3 packages
- Rewrite auth.py with full OAuth token management flow
- Rewrite iam.py with comprehensive IAM commands (users, orgs, apps)
- Add hanzo-iam package for IAM SDK
- Add hanzo-web3 package for blockchain SDK
- Update API providers for new auth flow
2026-02-12 20:47:40 -08:00
zeekay b35a5ca4e0 feat(tools): add Rust<>Python parity for plan, patch, wait tools
- plan: add update/get/clear actions for step tracking (Rust update_plan parity)
- fs: add patch action with Rust grammar format parser (*** Begin Patch)
- proc: add wait action for background polling, array command support

Aligns Python MCP tools with Rust dev tool schemas for cross-language compatibility.
2026-02-06 07:25:02 -08:00