Skip to content

sync main to staging#1368

Merged
TimothyZhang7 merged 46 commits intostagingfrom
main
Jan 27, 2026
Merged

sync main to staging#1368
TimothyZhang7 merged 46 commits intostagingfrom
main

Conversation

@TimothyZhang7
Copy link
Collaborator

Description

Sync main to staging branch

vakrahul and others added 30 commits January 25, 2026 23:09
Add comprehensive CSV manipulation tools:
- csv_read: Read CSV with pagination (limit/offset)
- csv_write: Create new CSV files
- csv_append: Append rows to existing CSV
- csv_info: Get CSV metadata (columns, row count, file size)
- csv_sql: Query CSV using SQL (powered by DuckDB)

Features:
- Session sandbox security (workspace_id, agent_id, session_id)
- DuckDB as optional dependency for SQL queries
- Security: Only SELECT queries allowed, dangerous keywords blocked
- Full Unicode support
- 45 tests covering all tools

Install SQL support: pip install tools[sql]
- Created MockLLMProvider class that generates placeholder JSON responses
- Updated AgentRunner._setup() to use MockLLMProvider when mock_mode=True
- Added MockLLMProvider to llm module exports
- Fixes issue where agents failed with 'LLM not available' in mock mode

The MockLLMProvider extracts expected output keys from system prompts
and generates mock JSON responses for structural validation without
making real LLM API calls. This enables:
- Testing agent structure without API keys
- Fast iteration on agent graphs
- CI/CD testing without credentials
- Zero-cost structural validation

Tested with simple agent - all nodes execute successfully in mock mode.
Signed-off-by: Arush Wadhawan <warush23+github@gmail.com>
Replace direct print() statements with Python's logging module in MCP
setup and verification scripts for better configurability and
production readiness.

Changes:
- setup_mcp.py: Convert 30+ print() calls to structured logging
- verify_mcp.py: Convert 40+ print() calls to structured logging
- mcp_server.py: Convert 4 print() calls to structured logging
- Preserve colored CLI output using logging formatters
- Maintain all functional behavior (refactor only)

Benefits:
- Configurable log levels (debug/info/warning/error)
- Better observability in production environments
- Cleaner programmatic usage (no stdout pollution)
- Professional logging practices

Fixes #833
Allow LLMJudge to accept any LLMProvider instance instead of being
hardcoded to use Anthropic. This aligns with the framework's pluggable
LLM design and enables users to:

- Use the same LLM provider across their agent and tests
- Run tests with cheaper or local models
- Avoid requiring an Anthropic API key for testing

Backward compatible: existing code using LLMJudge() without arguments
continues to work by falling back to Anthropic.

Closes #477

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
feat(validation): add Pydantic model validation for LLM outputs
docs(llm): add DeepSeek models support documentation and examples
fix(tools): validate Content-Type in web_scrape tool (Closes #487)
Fix: Add MockLLMProvider to enable mock mode execution
…vider

feat(testing): add configurable LLM provider to LLMJudge
…_command_tool)

The "Available Tools" table listed `execute_command` but the actual
registered name is `execute_command_tool`. This aligns the docs with
the runtime name in __init__.py and the tool's own README.

Fixes #901
… or empty

Previously, when exports/ was missing or empty, the bash glob
`exports/*/` would not match anything and the loop would silently
do nothing. The job would pass without actually validating anything,
which was misleading.

Now the job:
- Explicitly checks if exports/ directory exists
- Uses nullglob to handle empty directories properly
- Logs clear messages when skipping validation
- Reports the number of agents validated when successful

Fixes #887
Centralized _get_api_key in prompts.py to support OpenAI, Cerebras, and Groq via environment variables while maintaining Anthropic support through CredentialManager.
fix(graph): add logging for JSON parsing failures in worker_node
…ame-readme

docs(tools): fix tool name in README table (execute_command → execute_command_tool)
…empty

ci: make Validate Agent Exports skip clearly when exports/ is missing or empty
fix(types): correct type annotation from lowercase 'callable' to 'Callable'
vakrahul and others added 16 commits January 27, 2026 07:26
feat(tools): add CSV tools with DuckDB SQL support
…prompts

Refactor/provider agnostic prompts
- Change single quotes to double quotes in logging formatters
- Fixes: setup_mcp.py, verify_mcp.py formatter strings
- Addresses Q000 linter errors from PR review
refactor(mcp): replace print() with logging in setup scripts
* feat(tools): add Google Custom Search as alternative to Brave Search

Adds google_search tool using Google Custom Search API as an alternative
to the existing web_search tool (Brave Search).

Changes:
- Add google_search_tool with full implementation
- Register Google credentials (GOOGLE_API_KEY, GOOGLE_CSE_ID)
- Register tool in tools/__init__.py
- Add README with setup instructions

Closes #793

* test(tools): add unit tests for google_search tool

Adds 7 tests mirroring web_search_tool test patterns:
- Missing API key error handling
- Missing CSE ID error handling
- Empty query validation
- Long query validation
- num_results clamping
- Default parameters
- Custom language/country parameters

All tests pass.

* refactor(tools): add multi-provider support to web_search tool

BREAKING CHANGE: None - backward compatible. Brave remains default.

- Add Google Custom Search as alternative provider in web_search
- Add 'provider' parameter: 'auto' (default), 'google', 'brave'
- Auto mode tries Brave first for backward compatibility
- Remove separate google_search_tool (consolidated into web_search)
- Update tests to cover multi-provider functionality (13 tests)
- Update README documentation

Users with BRAVE_SEARCH_API_KEY: No changes needed
Users with GOOGLE_API_KEY + GOOGLE_CSE_ID: Can use provider='google'
Users with both: Brave preferred by default, use provider='google' to force

Closes #793

* feat(tools): fixed readme

---------

Co-authored-by: Mustafa Abdat <abdamus@hilti.com>
…-locks-leak

fix(memory): patch ConcurrentStorage leak (WeakValueDictionary)
refactor: provider-agnostic LLMJudge with auto-detection for OpenAI (#1103)
@github-actions
Copy link

PR Closed - Requirements Not Met

This PR has been automatically closed because it doesn't meet the requirements.

Missing: No linked issue found.

To fix:

  1. Create or find an existing issue for this work
  2. Assign yourself to the issue
  3. Re-open this PR and add Fixes #123 in the description

Why is this required? See #472 for details.

@github-actions github-actions bot closed this Jan 27, 2026
@TimothyZhang7 TimothyZhang7 merged commit c441494 into staging Jan 27, 2026
6 of 8 checks passed
jhalak999 pushed a commit to jhalak999/hive that referenced this pull request Feb 17, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.