chore: v0.2.2 release — arbitrary socket names #32

Open
mahmoud wants to merge 17 commits from development into main
Owner

Includes fix for arbitrary socket name routing (explorer_rpc.sock etc).

Includes fix for arbitrary socket name routing (explorer_rpc.sock etc).
Fix agent Python executor for hyphenated service names (#26)
Some checks failed
Build & Test / check (push) Failing after 36s
33e984809f
- to_class_name() now splits on both '_' and '-' so recipe-server → RecipeServer
- Add to_python_module_name() to normalize hyphens → underscores for Python identifiers
- Cache files, staged clients, and interface stubs all use normalized names
- LLM system prompt explicitly forbids pip install — all clients are pre-staged
- Add tests for hyphenated service name handling

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace persistent venv with uv run --isolated for sandboxed execution (#26)
Some checks failed
Build & Test / check (push) Failing after 37s
0907936af8
Remove all venv creation/management code (ensure_python_env, python_executable).
Scripts now execute via `uv run --script --no-project --isolated` which gives
each invocation a clean, ephemeral environment with no state leakage between
runs. Falls back to python3 if uv is not available.

This eliminates:
- Persistent venv at ~/.hero/var/router/python/venv
- Complex uv/python3 venv creation fallback chain
- Risk of stale packages or side effects between agent runs

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add dynamic models, agent_run MCP tool, and improved error display (#27)
Some checks failed
Build & Test / check (push) Failing after 55s
6f0bf37619
- Add GET /api/models endpoint proxying ai.models to hero_aibroker
- Replace hard-coded 3-model dropdown with dynamic fetch from all providers
- Add agent_run tool to every service's MCP tools/list and tools/call
- Improve agent error display with alert styling and formatted answers

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Merge development_26 and development_27 into development
Some checks failed
Build & Test / check (push) Failing after 38s
960e05dafe
Brings in:
- #26: Fix hyphenated service names, sandboxed uv run execution
- #27: Dynamic models, agent_run MCP tool, improved error display

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Fix models endpoint to handle ai.models OpenAI-compatible response format
Some checks failed
Build & Test / check (push) Failing after 35s
0374d48ae3
ai.models returns {object:"list", data:[{id:...}]}, not {models:[...]}.
Extract the data array in Rust and handle all response shapes in JS.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
fix: support arbitrary socket names in URL routing
All checks were successful
Build & Test / check (push) Successful in 2m38s
Build & Test / check (pull_request) Successful in 2m32s
c6ed792555
Before: /{service}/{name}/* where name is not rpc/ui/admin/rest/api
mapped to web_{name}.sock. Custom sockets like explorer_rpc.sock
were unreachable.

Now: check if {name}.sock exists directly on disk first. Only fall
back to web_{name}.sock if the direct name doesn't exist.

Closes #28
Reviewed-on: #29
chore: bump version to 0.2.1
Some checks failed
Create Release / build (linux-amd64-musl, true, x86_64-unknown-linux-musl) (push) Failing after 3s
Build & Test / check (push) Has been cancelled
Build & Test / check (pull_request) Has been cancelled
12f42cd2ad
Merge branch 'main' into development
All checks were successful
Build & Test / check (push) Successful in 2m51s
Build & Test / check (pull_request) Successful in 3m23s
9328552a5c
Add global multi-service agent with intelligent service selection (#31)
Some checks failed
Build & Test / check (push) Failing after 38s
760e682309
Two-step pipeline: LLM first selects which services the prompt needs
from a catalog of all healthy services, then generates a multi-service
Python script using all selected clients.

- Add run_global_agent() with build_service_catalog() and LLM selector
- Add POST /api/agent global endpoint (no service name in URL)
- Add Agent button to navbar with full agent panel UI
- Supports model selection, retries, answer/output/script tabs
- Shows which services were selected in the result badge

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
chore: bump version to 0.2.2
Some checks failed
Build & Test / check (push) Failing after 37s
Build & Test / check (pull_request) Failing after 41s
dd7814c818
style: apply cargo fmt to agent.rs and routes.rs
All checks were successful
Build & Test / check (pull_request) Successful in 2m35s
Build & Test / check (push) Successful in 2m54s
e2b3d9c703
merge: main into development — resolve conflicts
Some checks failed
Build & Test / check (push) Failing after 40s
Build & Test / check (pull_request) Failing after 56s
d31a594ebf
mahmoud force-pushed development from d31a594ebf
Some checks failed
Build & Test / check (push) Failing after 40s
Build & Test / check (pull_request) Failing after 56s
to e2b3d9c703
All checks were successful
Build & Test / check (pull_request) Successful in 2m35s
Build & Test / check (push) Successful in 2m54s
2026-04-10 15:32:05 +00:00
Compare
feat: integrate hero_logic for DAG-based agent execution
Some checks failed
Build & Test / check (push) Failing after 37s
Build & Test / check (pull_request) Failing after 58s
68c8a14eb0
Add optional hero_logic integration to agent endpoints. When hero_logic
is running (socket detected), agent requests are delegated to it for
DAG-based workflow execution with per-node logging, token tracking, and
configurable pipelines. Falls back gracefully to the existing inline
pipeline when hero_logic is unavailable.

New functions:
- logic_socket_path(), call_logic_rpc(), wait_for_play() - RPC helpers
- run_agent_via_logic() - single-service agent via hero_logic
- run_global_agent_via_logic() - multi-service agent via hero_logic
- extract_agent_response() - maps hero_logic Play to AgentResponse

Refs: #34

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
refactor: remove inline agent pipeline, use hero_logic exclusively
Some checks failed
Build & Test / check (push) Failing after 36s
Build & Test / check (pull_request) Failing after 38s
e17652eb51
Strip out the entire duplicated inline pipeline (LLM calls, script
execution, retry loops, summarization) from agent.rs. The agent now
delegates exclusively to hero_logic for DAG-based workflow execution.

Removed ~740 lines of code:
- execute_script(), is_command_available(), ExecutionResult
- call_llm(), strip_code_fences()
- summarize_result(), summarize_error(), summarize_global_result()
- All inline retry/execution logic in run_agent() and run_global_agent()

Kept: service context prep (interfaces, client staging, catalog),
hero_logic RPC helpers, fetch_models().

Refs: #34

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
refactor: unify single-service and global agent into one code path
Some checks failed
Build & Test / check (push) Failing after 33s
Build & Test / check (pull_request) Failing after 35s
71240fcc56
Service agent is just a global agent with a single-entry catalog.
Both endpoints now use the same `run_agent()` function with an optional
service filter, and the same `service_agent` workflow template.

Removed: AgentRequest/GlobalAgentRequest duplication,
AgentResponse/GlobalAgentResponse split, run_global_agent() function.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
feat: chat-style agent UI with play detail endpoint
Some checks failed
Build & Test / check (push) Failing after 37s
Build & Test / check (pull_request) Failing after 37s
7421fd87e8
- Replace form-based agent panel with chat interface (message bubbles,
  conversation history, thinking indicator, collapsible script/output)
- Add play_sid to AgentResponse for hero_logic workflow tracing
- Add GET /api/agent/play/:play_sid proxy endpoint for play inspection
- Add Workflows link to hero_logic in both global and per-service agent
- Enter to send, Shift+Enter for newline, auto-resize textarea

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
feat: sessions 17-18 — native dioxus islands, new URL routing, OSIS auth fix, build safety
Some checks are pending
Build & Test / check (push) Waiting to run
Build & Test / check (pull_request) Waiting to run
a5b4a6ee0a
- 18 native dioxus-bootstrap-css _app crates with ConnectionStatusIndicator
- Proxy → hero_router routing model (/<service>/<socket_type>/<path>)
- Socket convention migration (per-service directories)
- OSIS auth dispatch fix (OsisAppWrapper::handle_custom)
- Build parallelism limits for thermal safety
- hero_services → hero_zero rename
- Service TOML URL fixes for new routing pattern

Signed-off-by: mik-tf
fix: correct hero_logic socket path (underscore not hyphen)
Some checks failed
Build & Test / check (push) Failing after 54s
Build & Test / check (pull_request) Failing after 50s
471f4f5413
The socket is at hero_logic/rpc.sock, not hero-logic/rpc.sock.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
feat: add HTML play viewer page for agent workflow inspection
Some checks failed
Build & Test / check (pull_request) Failing after 39s
Build & Test / check (push) Failing after 41s
f07f866711
- Add GET /agent/play/:play_sid route that renders a user-friendly
  HTML page showing play status, node runs, logs, tokens, and errors
- Each node run is collapsible with input/output/error details
- Update chat UI play links to point to HTML viewer instead of raw JSON
- Raw JSON still available at GET /api/agent/play/:play_sid

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Update axum-core to 0.4.5 and matchit to 0.7.3.
- Update axum to 0.8.8 and matchit to 0.8.4.
- Replace resp.status() and resp.headers().clone() with resp.into_parts().
- Use Body::new(incoming) instead of Body::from(body_bytes).
- Add async-stream, async-stream-impl, async-tungstenite, axum, axum-core, byteorder, etc.
- Update several other dioxus-related dependencies.
Merge branch 'development' of https://forge.ourworld.tf/lhumina_code/hero_router into development
Some checks failed
Build & Test / check (pull_request) Failing after 37s
Build & Test / check (push) Failing after 42s
713cda27ac
refactor: Simplify conditional logic and signal usage
Some checks failed
Build & Test / check (push) Failing after 36s
Build & Test / check (pull_request) Failing after 37s
ddac499950
- Make `last_scan` signal immutable
- Combine fetch and deserialization for contexts
- Combine fetch and deserialization for logs
- Remove unused `log_id` variable
- Simplify `$ref` path splitting logic
- Simplify enum value checking
ci: Update CI to run separate checks
Some checks failed
Build & Test / check (push) Has been cancelled
Build & Test / check (pull_request) Has been cancelled
363802885a
- Add formatting check step
- Add clippy linting step
- Add separate test step
- Change build step to release build
ci: reorder and rename CI steps
All checks were successful
Build & Test / check (pull_request) Successful in 1m39s
Build & Test / check (push) Successful in 2m7s
5c9c909f5c
- Rename toolchain setup step
- Reorder test, format, and clippy steps
- Update command names in CI steps
Implement WebSocket upgrade detection and tunneling through Unix sockets,
enabling real-time communication with backend services via WebSocket.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
Merge branch 'development' of https://forge.ourworld.tf/lhumina_code/hero_router into development
All checks were successful
Build & Test / check (push) Successful in 2m11s
Build & Test / check (pull_request) Successful in 2m15s
4001ebbe99
fix: update Workflows link and fix per-service agent JS errors
All checks were successful
Build & Test / check (pull_request) Successful in 1m37s
Build & Test / check (push) Successful in 1m40s
bfef4f7d0c
- Point Workflows link to /hero_logic/ui/ (proxied through hero_router)
- Fix JS redeclaration errors in service.html partial (IIFE wrapping)
- Fix per-service agent chat feature parity with global agent

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
fix: update scanner socket comments to directory convention
All checks were successful
Build & Test / check (push) Successful in 3m0s
Build & Test / check (pull_request) Successful in 3m31s
e2a7e325ed
lhumina_code/home#116

Signed-off-by: mik-tf
feat: split hero_router into separate RPC and UI routers with dedicated sockets
All checks were successful
Build & Test / check (push) Successful in 1m42s
Build & Test / check (pull_request) Successful in 2m21s
e5544202cb
- Separate OpenRPC/JSON-RPC logic from admin dashboard into two routers:
  - build_rpc_router(): JSON-RPC 2.0 only, listens on rpc.sock
  - build_ui_router(): Admin dashboard, reverse proxy, MCP gateway, listens on ui.sock
- Add ui_socket_path() config helper for dashboard socket
- Add socket-only mode support (--port 0) for headless deployments
- Update discovery manifests to distinguish between protocols (openrpc vs ui)
- Add runsocket Makefile target for testing socket-only mode
- Make router_openrpc_spec() public for handler visibility

This aligns with hero_sockets convention where each service exposes
both machine-callable (rpc.sock) and browser-callable (ui.sock) interfaces.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
All checks were successful
Build & Test / check (push) Successful in 1m42s
Build & Test / check (pull_request) Successful in 2m21s
This pull request can be merged automatically.
This branch is out-of-date with the base branch
You are not authorized to merge this pull request.
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin development:development
git switch development
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
4 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
lhumina_code/hero_router!32
No description provided.