Skip to content

feat(desktop): auto-discover Honcho instances on localhost#30

Merged
offendingcommit merged 1 commit into
mainfrom
feat/desktop-auto-discover
May 28, 2026
Merged

feat(desktop): auto-discover Honcho instances on localhost#30
offendingcommit merged 1 commit into
mainfrom
feat/desktop-auto-discover

Conversation

@offendingcommit
Copy link
Copy Markdown
Owner

Cuts first-run friction: the desktop app port-scans 127.0.0.1:8000-8100 for live Honcho /health endpoints and offers one-click add of any it finds.

  • src-tauri/src/discover.rs — Rust port scan exposed as a Tauri command
  • lib/discovery.ts + DiscoveredInstances — invokes it and lists candidates in Settings
  • InstancesManager wiring + unit tests

Desktop-gated — the web build degrades cleanly (the Tauri command simply isn't available, so no discovery UI).

Credit

Cherry-picked from @BenSheridanEdwards's fork (feat/auto-discover), authorship preserved. Thanks Ben!

Verification

make check (lint + typecheck + tests) and cargo-check both pass locally.

* feat(desktop): auto-discover Honcho instances on localhost

First-launch and on-demand discovery of running Honcho instances on
127.0.0.1:8000-8100. Desktop-only — the browser can't port-scan due to
CORS, so the scan runs in the Tauri Rust shell.

- New Rust command `discover_honcho_instances(start_port?, end_port?)`
  in src-tauri/src/discover.rs: parallel TCP probe of each port with
  150ms connect timeout + 250ms total request budget, looking for a
  /health endpoint returning `{"status":"ok"}`.
- New TS helper `discoverHonchoInstances()` in src/lib/discovery.ts:
  detects Tauri runtime; web build degrades to an empty result.
- `suggestNameForInstance()` fetches the first workspace and derives a
  friendly name from its id ("neo-personal" -> "Neo"). Used to seed the
  Name field for each discovered instance.
- `DiscoveredInstances` component: list of found instances with
  editable suggested names + per-row checkbox + "Add N instances"
  button. Rows are pre-checked by default and filter out already-
  configured baseUrls.
- Wired into `InstancesManager`:
  - First launch (no instances): renders above the connection-type
    chooser with autoRun=true. User sees results immediately.
  - With instances: adds a "Discover instances" button to the list
    view that opens the discovery flow on demand.
  - Both paths gate on `isTauri()`; the web build keeps its existing
    behaviour unchanged.

Adds tokio (with net + io-util + time + rt + macros) and futures to
the Tauri shell to get async TCP + join_all.

Tests:
- deriveNameFromWorkspaceId handles hyphenated, multi-segment, and
  no-hyphen ids

* test(desktop): add probe tests including live Hermes stack integration

- rejects_inverted_port_range
- ignores_ports_with_no_listener
- finds_live_hermes_stacks (#[ignore]d; opt-in with --ignored)

The ignored test exercises discover_honcho_instances against ports
8000-8010, expecting exactly [8001, 8002, 8003, 8004, 8005]. Verified
locally — the probe finds all 5 stacks in <10ms.

---------

Co-authored-by: Agents <agents@Jarviss-Mac-mini.local>
@offendingcommit offendingcommit merged commit aa46d47 into main May 28, 2026
2 checks passed
@offendingcommit offendingcommit deleted the feat/desktop-auto-discover branch May 28, 2026 19:32
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.

2 participants