Commit Graph
365 Commits
Author SHA1 Message Date
zeekay 55703b869c fix(computer): use Claude's actual 2000px limit for multi-image forge/hanzo-mcp-v0.10.37 hanzo-mcp-v0.10.37 hanzo-tools-shell-v0.6.1 forge/hanzo-tools-shell-v0.6.1 forge/hanzo-tools-computer-v0.4.0 hanzo-tools-computer-v0.5.1 hanzo-tools-computer-v0.4.0 hanzo-tools-computer-v0.3.0 forge/hanzo-tools-computer-v0.3.0 forge/hanzo-tools-computer-v0.5.1 forge/hanzo-tools-computer-v0.5.0 hanzo-tools-computer-v0.5.0 2026-01-11 20:13:05 -08:00
zeekay 9144211873 feat(computer): add ScreenTool for unified screen recording and Claude interpretation
New 'screen' tool provides one-shot recording → analysis → compression:

screen(action="session", duration=30)  # Record 30s, return compressed frames

ACTIONS:
- session: ONE-SHOT record → analyze → compress → return for Claude
- capture: Single screenshot (optimized)
- record: Start background recording
- stop: Stop and process recording
- analyze: Process existing video file

HARD LIMITS (Claude API constraints):
- Max 1568px per dimension (Claude 2000px limit for multi-image)
- Max 100 images per request
- Max 32MB payload

DEFAULT SETTINGS:
- 768px max dimension (good quality, safe margin)
- 60% JPEG quality (aggressive compression)
- 30 target frames per session
- Activity detection @ 0.02 threshold

USAGE:
  screen(action="session")  # 30s → ~30 frames → ~500KB
  screen(action="capture")  # Single screenshot
  screen(action="analyze", path="recording.mp4")  # Process existing

ENV VARS:
  HANZO_SCREEN_DURATION=30
  HANZO_SCREEN_TARGET_FRAMES=30
  HANZO_SCREEN_MAX_SIZE=768
  HANZO_SCREEN_QUALITY=60

Bump hanzo-tools-computer to v0.5.0
2026-01-11 20:07:08 -08:00
zeekay dbd18eca93 feat(computer): add intelligent video slicing with activity detection
MediaTool v0.4.0 - Smart video compression for Claude interpretation:

NEW ACTIONS:
- analyze: Detect activity segments (movement, scene changes)
- slice: Extract frames ONLY at activity points
- compress_session: Full pipeline for computer use sessions

ACTIVITY DETECTION:
- Frame differencing (PIL + numpy) for movement detection
- FFmpeg scene change detection for major transitions
- Activity clustering into segments with scores
- Configurable sensitivity thresholds

COMPRESSION:
- 512px max dimension for session frames (vs 768px default)
- 60% JPEG quality for aggressive compression
- Target 30 frames per 60-second session
- ~15KB per frame, ~450KB total for typical session

NEW ENV VARS:
  HANZO_MEDIA_ACTIVITY_THRESHOLD=0.02
  HANZO_MEDIA_SCENE_THRESHOLD=0.3
  HANZO_MEDIA_SESSION_MAX_DURATION=60
  HANZO_MEDIA_SESSION_TARGET_FRAMES=30
  HANZO_MEDIA_SESSION_QUALITY=60

Usage:
  media(action="compress_session", path="recording.mp4")
  # Returns compressed keyframes + activity analysis
  # Perfect for Claude to interpret computer use sessions

Added numpy>=1.26.0 dependency for frame differencing.
2026-01-11 19:52:05 -08:00
zeekay e940ca5f1a feat(computer): add MediaTool with configurable limits (100 images, 32MB)
- Add MediaTool for native image/video support with configurable limits
- MediaLimits dataclass configurable via HANZO_MEDIA_* env vars
- Actions: load, load_batch, optimize, resize, extract_frames, info, limits, status
- Hard caps enforced: 100 images, 32MB payload, 4096px max resolution
- Default optimal targets: 768px, 85% JPEG quality
- Fixed requires-python to >=3.12 (was >=3.11)
- Bump hanzo-tools-computer to v0.3.0

Environment variables:
  HANZO_MEDIA_MAX_IMAGES=100       # Max images per batch
  HANZO_MEDIA_MAX_PAYLOAD_MB=32    # Max total payload in MB
  HANZO_MEDIA_MAX_RESOLUTION=1568  # Max image dimension
  HANZO_MEDIA_OPTIMAL_SIZE=768     # Target size for optimization
  HANZO_MEDIA_JPEG_QUALITY=85      # JPEG quality (1-100)
2026-01-11 19:30:45 -08:00
zeekay 8d30e5a9e3 feat(shell): remove cmd, add ksh/tcsh/csh support, shell-first exposure
- Remove 'cmd' from default TOOLS list - only detected shell exposed
- Add KshTool, TcshTool, CshTool for enterprise Unix shells
- Fallback to ShellTool (smart auto-detect) if shell detection fails
- Support ksh93, pdksh, mksh as aliases for ksh
- Bump hanzo-tools-shell to 0.6.1, hanzo-mcp to 0.10.37
2026-01-11 19:22:32 -08:00
zeekay d5f07ec514 feat(shell): add shell detection to only expose user's active shell
- Add shell_detect.py module with comprehensive shell detection:
  - Detects login shell from passwd/Directory Services
  - Detects invoking shell by walking parent processes
  - Prefers Homebrew shell paths on macOS
  - Supports override via HANZO_MCP_SHELL and HANZO_MCP_FORCE_SHELL

- Update hanzo-tools-shell to only include detected shell in TOOLS list
  - HANZO_MCP_ALL_SHELLS=1 to expose all shells
  - get_shell_tools() now supports shell_override parameter

- Add CLI options to hanzo-mcp:
  - --shell: Specify shell by name or path
  - --all-shells: Expose all shell tools
  - Updated --force-shell to include fish and dash

- Bump hanzo-tools-shell to 0.6.0 (published to PyPI)
- Bump hanzo-mcp to 0.10.36

Detection order: HANZO_MCP_SHELL > HANZO_MCP_FORCE_SHELL > CLI --shell >
invoking shell > login shell > $SHELL
2026-01-11 19:11:20 -08:00
zeekay 485feee668 Async read/write 2026-01-06 12:02:00 -08:00
zeekay e937ce2d64 chore: integrate hanzo-agent into workspace
- Rename package from hanzoai to hanzo-agent (avoid conflict with root)
- Add to workspace members
- Add numpy as required dependency (used by memory module)
2026-01-05 22:12:32 -08:00
zeekay 21d28970b5 chore: remove standalone GitHub workflows from hanzo-agent 2026-01-05 22:04:17 -08:00
zeekay fba1c0175e feat: bring hanzo-agent into monorepo tree
Converts hanzo-agent from git submodule to regular directory.
This enables simpler cross-package refactoring and unified CI/CD.

Source: github.com/hanzoai/agent.git (a8d7ec9)
2026-01-05 21:56:22 -08:00
zeekay fd21a7d995 feat(browser): add CDP bridge server for extension integration
- Add cdp_bridge_server.py with WebSocket bridge
- CDPBridgeServer routes commands to browser extension
- CDPBridgeClient for programmatic browser control
- Export bridge classes from browser package
- Update vscode.md with extension integration docs
2026-01-05 18:46:13 -08:00
zeekay e8695ee79d docs: replace all placeholder content with real documentation
MCP docs:
- quickstart.md - Installation, basic usage, transport modes
- configuration.md - CLI options, env vars, config files
- vscode.md - VS Code, Cursor, Windsurf integration

Agent SDK docs:
- agents.md - Creating and configuring agents
- running_agents.md - Runner, RunConfig, async/sync
- tools.md - Function tools, context, custom tools
- guardrails.md - Input/output validation
- handoffs.md - Agent delegation patterns
- streaming.md - Stream events and responses
- tracing.md - Observability and debugging
- context.md - Mutable run context
- config.md - RunConfig and ModelSettings
- results.md - RunResult, items, usage
- models.md - Providers and model selection
- multi_agent.md - Complex multi-agent patterns
2026-01-05 18:37:11 -08:00
zeekay 7a5285e545 docs: add navigation section to main index 2026-01-05 17:45:23 -08:00
zeekay 2a8255df59 docs: improve DX with navigation and cross-references
- Update docs/mcp/tools/ placeholders with quick refs and links
- Create docs/ref/tools/index.md with full package table
- Create docs/ref/agent/index.md with topic links
- Create docs/ref/mcp/index.md with tool categories
- Create docs/tools/index.md as main entry point
- Add consistent cross-references between sections
2026-01-05 17:45:00 -08:00
zeekay edc958eaac test: fix tool count expectations in test_all_tools.py
- Update shell tools: 11→12 (cmd replaces dag, added fish/dash)
- Update memory tools: 1→9 (individual tools not unified)
- Make database/editor tests optional with skipif
- Update total expected count: 40→38
2026-01-05 17:42:14 -08:00
zeekay 08b0828cc3 docs(lib): add core library documentation
- lib/index.md: Overview of all core utility packages
- lib/async.md: High-performance async I/O with uvloop
- lib/consensus.md: Metastable consensus protocol for multi-agent agreement
- lib/network.md: Agent network orchestration
- lib/aci.md: Agent-Computer Interface for development agents
- lib/repl.md: Interactive REPL with voice and LLM integration
2026-01-05 17:39:35 -08:00
zeekay ce115ab6e1 docs(tools): add database, editor, jupyter, mcp, vector tool docs
- database.md: SQL query/search/stats and graph database tools
- editor.md: Neovim integration (edit, command, session)
- jupyter.md: Notebook read/edit/create/execute operations
- mcp-tools.md: MCP server management and configuration
- vector.md: Semantic search with vector embeddings
2026-01-05 17:36:05 -08:00
zeekay cd9c5b823b docs(tools): add todo, computer, config tool documentation
- todo.md: Task management with list, add, update, remove, clear actions
- computer.md: pyautogui Mac automation (mouse, keyboard, screenshots, windows)
- config.md: Git-style configuration and 700+ programmer personas
2026-01-05 17:33:39 -08:00
zeekay a0387b1604 fix(docs): correct auto-background timeout from 45s to 30s
The auto-backgrounding timeout was changed to 30 seconds but
documentation still referenced 45 seconds. Updated all occurrences.
2026-01-05 17:30:53 -08:00
zeekay b24f09e28c docs(tools): add comprehensive documentation for all tool packages
Add detailed documentation with examples for:
- hanzo-tools-fs: read, write, edit, tree, find, search, ast
- hanzo-tools-shell: cmd, ps, zsh, bash, auto-backgrounding
- hanzo-tools-browser: 70+ Playwright actions, device emulation
- hanzo-tools-memory: memories, facts, knowledge bases, scopes
- hanzo-tools-reasoning: think and critic tools
- hanzo-tools-lsp: go-to-definition, references, rename, hover
- hanzo-tools-refactor: rename, extract, inline, batch operations
- hanzo-tools-agent: multi-agent orchestration, consensus, swarm
- hanzo-tools-llm: unified LLM interface with 100+ models

Each doc includes:
- Installation instructions
- Quick start examples
- Full API reference
- Usage examples
- Best practices
2026-01-05 17:27:46 -08:00
zeekay bf551f3b44 feat(docs): add Cmd+K search with dark modal styling 2026-01-05 17:17:02 -08:00
zeekay 7925dc4ece fix(docs): remove blue links, fix search box dark styling 2026-01-05 17:09:05 -08:00
zeekay 0ba3a996d6 fix(docs): improve header tab contrast and visibility 2026-01-05 16:56:59 -08:00
zeekay 534338a58c fix(docs): add .gitkeep to overrides directory for GitHub Actions 2026-01-05 16:40:53 -08:00
zeekay 6405ef5842 style(docs): add Geist font, Hanzo logo, and shadcn/ui dark theme
- Replace default logo with Hanzo logo (white for dark header)
- Add Hanzo favicon
- Configure Geist font family from jsdelivr CDN
- Configure Geist Mono for code blocks
- Implement shadcn/ui zinc color palette
- Set pure black header (#000000) matching shadcn dark mode
- Set slate scheme as default (dark mode first)
- Style code blocks, tables, admonitions with rounded corners
- Remove footer, add scrollbar styling
- Fix mkdocstrings config (deprecated selection option)
2026-01-05 16:39:16 -08:00
zeekay 9fd65547e5 docs(mcp): add comprehensive parity analysis for Python/TS/Rust MCPs 2026-01-05 16:05:34 -08:00
zeekay 07125377e4 fix(docs): rename llm.md to llm-tools.md to avoid gitignore 2026-01-05 13:43:11 -08:00
zeekay 5fe36c9e1d docs: create unified documentation site for python-sdk
- Add root-level mkdocs.yml with comprehensive navigation
- Create docs/ directory with:
  - Getting started (installation, quickstart)
  - MCP tools documentation (shell, browser, memory, etc.)
  - Agent SDK documentation structure
  - API reference stubs
- Update GitHub workflow to build from root mkdocs.yml
- Add Material theme with dark/light mode toggle

The docs site will be available at hanzoai.github.io/python-sdk/
2026-01-05 13:42:30 -08:00
zeekay 169a7dccf2 feat: HANZO_AUTO_BACKGROUND_TIMEOUT=0 disables auto-backgrounding
- Setting timeout to 0 or negative now disables auto-backgrounding
  (uses 24h internal timeout instead of immediate backgrounding)
- Updated docstrings to document the disabled behavior
- hanzo-tools-shell 0.5.6, hanzo-tools-agent 0.3.1, hanzo-mcp 0.10.35
2026-01-05 12:50:30 -08:00
zeekay 86cb5e0eb5 feat: configurable HANZO_AUTO_BACKGROUND_TIMEOUT env var (default: 30s) 2026-01-05 06:41:08 -08:00
zeekay 41955bf7cd chore: bump hanzo-mcp to 0.10.33, update shell dep to 0.5.4 2026-01-05 01:27:01 -08:00
zeekay 88d094cfe0 perf: 30s auto-backgrounding + fix hanging processes
- Change default timeout from 45s to 30s for faster response
- Fix potential hanging in run_shell by using stream reading instead of communicate()
- Add start_new_session=True to prevent zombie processes
- Proper cleanup on error with process.kill()
- All stream reading uses chunked async reads (8KB chunks)
- Partial output preserved when backgrounding

53 tests pass in 1.1s.
2026-01-05 01:05:53 -08:00
zeekay bd9c6e5740 fix: async audit improvements and test fixes
- Fix deprecated asyncio.get_event_loop() → get_running_loop() in open_tool.py
- Add documentation for ProcessManager dict modification pattern
- Add module docstring for hanzo_async.paths explaining executor usage
- Fix bash test to use proper bash syntax (not zsh-style { } backgrounding)
- Bump hanzo-tools-shell 0.5.2 → 0.5.3
- Bump hanzo-async 0.1.0 → 0.1.1

All 53 shell tests pass. Async code review: production-ready.
2026-01-04 17:18:57 -08:00
zeekay 56972574f9 chore: bump hanzo-mcp to 0.10.32 2026-01-04 16:51:48 -08:00
zeekay 4fa44a28fc refactor: remove ambiguous shell tool, keep specific shells
- Remove ShellTool from TOOLS list (too ambiguous)
- Keep zsh, bash, fish, dash as specific shell tools
- Update get_shell_tools to include bash
- Fix test imports (ShellTool now in shell_tools.py)
- Update tests to expect cmd as primary tool
- Verify asyncio.gather + uvloop works correctly

hanzo-tools-shell: 0.5.1 → 0.5.2
2026-01-04 13:27:34 -08:00
zeekay 35c8288217 chore: bump versions for PyPI release
- hanzo-async: 0.1.0 (new)
- hanzo-tools-fs: 0.3.1
- hanzo-tools-shell: 0.5.1
- hanzo-tools-agent: 0.3.0
- hanzo-mcp: 0.10.31
2026-01-03 17:41:51 -08:00
zeekay f34a70a041 feat: add hanzo-async unified async I/O with uvloop support
New package: hanzo-async
- Automatic uvloop detection and configuration
- Async file I/O (read_file, write_file, append_file, read_json, write_json)
- Async path operations (path_exists, is_file, is_dir, mkdir, etc.)
- Async subprocess execution (run_command, run_shell)
- Graceful fallback to asyncio on Windows or when uvloop not installed

Updated packages to use hanzo-async:
- hanzo-tools-shell: base_process.py, ps_tool.py, shell_tools.py
- hanzo-tools-agent: agent_tool.py, dataset.py
- hanzo-tools-fs: search.py
- hanzo-mcp: cli.py, auto_timeout.py, event_loop.py, version_tool.py

Shell improvements:
- Renamed zsh_tool.py to shell_tools.py (better organization)
- Added DashTool for Debian/Ubuntu's fast POSIX shell
- All shell tools now thin shims over CmdTool

Version info now shows async backend:
- CLI: hanzo-mcp 0.10.27 (async: uvloop 0.22.1)
- Tool: async: uvloop 0.22.1
2026-01-03 17:39:48 -08:00
zeekay b1de477422 docs: add Next.js documentation site with @hanzo/mdx
- Fumadocs-based docs with @hanzo/mdx and @hanzo/ui integration
- Comprehensive SDK documentation for all packages:
  - hanzo-agent SDK (agents, tools, guardrails, tracing)
  - hanzo-mcp tools (filesystem, shell, browser, memory, etc.)
  - Client, models, embeddings, chat APIs
- Tailwind 4 + Next.js 16 + React 19 stack
- Static export for GitHub Pages deployment
2025-12-29 20:16:38 -08:00
zeekay 4d0db161a8 fix(docs): install package for API reference generation 2025-12-27 21:29:46 -08:00
zeekay a5592fbcec fix(docs): pin mkdocstrings version for compatibility 2025-12-27 21:27:50 -08:00
zeekay 113f3f9a77 fix(docs): checkout submodules for docs build 2025-12-27 21:26:25 -08:00
zeekay 0723f4cff4 ci(docs): add GitHub Pages deployment workflow 2025-12-27 21:24:35 -08:00
zeekay cd89d0090a fix(imports): update filesystem to fs in agent tools 2025-12-27 20:36:12 -08:00
zeekay 1143769c59 fix(lint): fix import sorting and lru_cache noqa
- Fix 12 import sorting issues (I001)
- Add noqa for lru_cache in shellflow.py (TID251 rule for Stainless SDK)
2025-12-27 20:32:45 -08:00
zeekay 12d4acf619 style(hanzo): format with black 2025-12-27 16:25:51 -08:00
zeekay 601e279e06 chore: rename Quality Gate workflow 2025-12-27 15:39:39 -08:00
zeekay 7bf664aee8 fix(ci): update workflow to use hanzo_tools.agent imports
- Replace hanzo_mcp.tools.agent.cli_tools with hanzo_tools.agent
- Update test imports to use AgentTool, IChingTool, ReviewTool
- Simplify integration tests for new agent tool API
2025-12-27 15:30:38 -08:00
zeekay 1951042fb8 fix(mcp): correct import in litellm warning test
- Change register_agent_tools to register_tools (actual export name)
2025-12-27 15:26:31 -08:00
zeekay 6c6f4b163a fix(mcp): simplify agent tests to match actual API
- Remove tests for non-existent AgentTool attributes (AGENTS, _mcp_config, etc.)
- Update uv.lock with latest package versions
- Keep only basic tool creation and registration tests
2025-12-27 15:25:11 -08:00
zeekay d3842b805f style: format hanzo_mcp/__init__.py 2025-12-27 15:21:35 -08:00