Skip to content

Latest commit

 

History

History
103 lines (75 loc) · 5.76 KB

File metadata and controls

103 lines (75 loc) · 5.76 KB

Integration

External systems and APIs connected by Ho Launcher.

LLM Providers

Four providers via rig-core OpenAI-compatible client (backend/src/llm/openai_compatible.rs, backend/src/llm/completion.rs).

Provider Config fields Notes
OpenAI baseUrl, model, apiKey Default base: https://api.openai.com/v1
Azure OpenAI baseUrl, model, apiKey baseUrl = deployment endpoint URL; model = deployment name
Ollama baseUrl, model apiKey optional
Thinkers baseUrl, model, apiKey Auth via API key header
  • Transport: rig-core completions client
  • API keys: plaintext or env:VAR_NAME (config_secret.rs)
  • Tool lists encoded as TOON where used (backend/src/llm/toon.rs)
  • Health check (tiered, llm/health.rs):
    1. rig list_models (strict OpenAI schema)
    2. lenient GET /models — HTTP auth + configured model id/alias in data[]
    3. minimal completion probe (fallback)
  • Request timeout default: 60s
  • One active model at runtime; disabled on failed health check

Agent mode uses rig streaming multi-turn with native tool calling and message.delta events. Launcher and script paths use blocking complete(). Launcher suggestions use local keyword search (utils/tool_search.rs → search_tools_response).

MCP (Model Context Protocol)

  • SDK: rmcp (backend/Cargo.toml)
  • Transports: stdio (child process), streamable HTTP, and in-process builtin
  • OAuth: HTTP OAuth flow via rmcp auth transport
  • Host handlers: sampling, elicitation, progress, logging, list_changed, resource_updated
  • Task polling for long-running tool calls
  • Service: backend/src/mcp/service/ (MCPManager in service/mod.rs)
  • Built-in App Launcher MCP server: http://localhost:1228/applauncher/mcp
  • Tauri commands: add/update/remove/connect/disconnect servers; mcp_call_tool, mcp_read_resource, mcp_get_prompt, mcp_authorize_oauth, mcp_resolve_approval_gate, mcp_submit_elicitation

See MCP.md for server configuration details.

Analytics

Build-time optional telemetry. No analytics when env vars are unset at compile time.

Service Location Enable condition Details
Aptabase backend/build.rs, backend/src/utils/analytics.rs, frontend/src/shared/services/analytics-service.ts APTABASE_APP_KEY set at backend build cfg(analytics) gates tauri-plugin-aptabase; host from APTABASE_HOST (optional). Backend and frontend events when enabled: app_started, app_exited, settings/tour/launcher actions.
Microsoft Clarity frontend/src/landing.tsx VITE_CLARITY_PROJECT_ID set at frontend build Landing/preview page only; not loaded by the desktop app shell.
Landing footer frontend/src/features/preview/landing-data.ts VITE_LANDING_COPYRIGHT, VITE_LANDING_LICENSE_URL at frontend build Optional footer text and license URL on landing build only.

Self-built and typical OSS dev builds without APTABASE_APP_KEY compile with #[cfg(not(analytics))] stubs — no events sent to Aptabase.

File System

  • Tauri plugins: tauri-plugin-fs, tauri-plugin-dialog
  • FS scope: read/write/read-dir on $APPDATA/**, $APPLOCALDATA/**, $DOCUMENT/**, $DOWNLOAD/**, $DESKTOP/**, $HOME/.ho/** (backend/capabilities/default.json)
  • File context: plain-text extensions list in backend/src/constants.rs → file_context
  • Frontend file service: frontend/src/shared/services/file-service.ts
  • Run persistence: {app_data_dir}/runs/, {app_data_dir}/events/, {app_data_dir}/conversations/, {app_data_dir}/sessions/
  • Agent worker IPC: {app_data_dir}/pending-runs/, {app_data_dir}/cancel-requests/, {app_data_dir}/resume-requests/
  • Token ledger: {app_data_dir}/token-ledger.jsonl
  • Split registry: {app_data_dir}/models.json, mcp-servers.json, agent.json, approvals.json
  • App launcher cache: {app_data_dir}/app_cache.json (app_run/cache.rs)
  • Application logs: {app_data_dir}/logs/ho.log.* (utils/logging.rs)

Script Runtimes

Embedded interpreters (no system Python/Node required):

Language Runtime Module
Python RustPython backend/src/script_run/python_runtime.rs
JavaScript Boa Engine backend/src/script_run/javascript_runtime.rs

Default language: python. Timeout: 30s. Max output: 10,000 chars. When enableSafetyChecks is true, blocked import/eval patterns are rejected before execution (script_run/safety.rs).

System Integration

  • Global hotkey: cmd+`` (macOS) / ctrl+space(Windows/Linux) —backend/src/system/shortcuts.rs`
  • System tray: Open, Settings, Help, Quit — backend/src/system/tray.rs
  • URL opener: tauri-plugin-opener
  • OS modules: backend/src/agent_os/ (builtin MCP capabilities), backend/src/app_platform/ (app discovery and launch)
  • Click-through: transparent launcher ignores pointer events outside hit regions (window/click_through.rs)
  • DevTools overlay: when DevTools is open, main window drops always-on-top (window/devtools_overlay.rs)

Tauri Plugins

Registered in backend/src/lib.rs:

  • opener, global-shortcut, fs, dialog, aptabase

Frontend ↔ Backend

  • Frontend invokes Tauri commands via shared/services/invoke.ts
  • Backend emits Tauri events: run-event, agent-run-terminal, launcher-progress, mcp-server-status-changed, llm-status-changed, form-window-opened
  • Settings sync: settings_update_field / settings_save → backend emits section events
  • Run queries: shared/services/run-service.ts wraps run_get, run_list, run_list_events
  • Headless CLI: same binary, subcommands in backend/src/cli/ — see CLI.md

Not Implemented

  • Webhooks or scheduled runs
  • Automatic approval without user action after restart