Skip to content

feat: multi-agent mount support with validation#206

Open
jason-rl wants to merge 9 commits intomainfrom
jc/multi-agent-mounts
Open

feat: multi-agent mount support with validation#206
jason-rl wants to merge 9 commits intomainfrom
jc/multi-agent-mounts

Conversation

@jason-rl
Copy link
Copy Markdown
Contributor

@jason-rl jason-rl commented Apr 16, 2026

Summary

  • Support mounting multiple agents on a single devbox (supersedes feat: improve agent support in interactive rli #209's single-agent mount)
  • Add --object CLI flag for mounting objects on devbox creation (format: object_id or object_id:/mount/path)
  • Mount paths are optional for both --object and --agent (git/object agents) — smart defaults are generated matching runloop-fe behavior (sanitized name, archive extension stripping, repo basename for git agents)
  • TUI: inline mount path editing via [e] key for git/object agents and object mounts
  • TUI: object mount default paths match runloop-fe (sanitize, strip archive extensions, fallback to object_)
  • TUI: already-mounted agents are filtered out of the agent picker
  • All mount constraint validation (duplicate names, package conflicts, path overlaps) is deferred to the backend API

Note: Basic agent picker and single-agent DevboxCreatePage support were introduced by #209. This PR replaces the single-agent architecture with multi-agent + object mount support.

Test plan

  • CLI: rli devbox create --agent my-git-agent auto-generates mount path from repo basename
  • CLI: rli devbox create --object obj_123 auto-generates mount path from object name
  • CLI: rli devbox create --object obj_123:/custom/path uses explicit path
  • CLI: rli devbox create --agent a1 --agent a2 --object obj1 mounts multiple agents and objects
  • TUI: adding git/object agent shows default path, editable with [e]
  • TUI: adding object mount shows sanitized default path with archive extension stripping
  • TUI: selecting same agent twice is prevented (filtered from picker)

🤖 Generated with Claude Code

@jason-rl jason-rl force-pushed the jc/agent-axon-tui-screens branch from 1554beb to a268483 Compare April 21, 2026 22:30
@jason-rl jason-rl force-pushed the jc/multi-agent-mounts branch 2 times, most recently from 71d77ae to a2736e0 Compare April 21, 2026 23:07
@jason-rl jason-rl requested review from dines-rl and tode-rl April 21, 2026 23:28
@jason-rl jason-rl force-pushed the jc/agent-axon-tui-screens branch from a268483 to 4dd10af Compare April 22, 2026 16:10
@jason-rl jason-rl force-pushed the jc/multi-agent-mounts branch 2 times, most recently from 35422e8 to 59e7905 Compare April 22, 2026 16:13
@jason-rl jason-rl force-pushed the jc/agent-axon-tui-screens branch from 4dd10af to 1f917b0 Compare April 22, 2026 16:13
@jason-rl jason-rl force-pushed the jc/multi-agent-mounts branch from 59e7905 to 4ef461d Compare April 22, 2026 16:16
@jason-rl jason-rl force-pushed the jc/agent-axon-tui-screens branch from 1f917b0 to 0a9613e Compare April 22, 2026 16:16
@jason-rl jason-rl force-pushed the jc/multi-agent-mounts branch from 4ef461d to 2ee01a3 Compare April 22, 2026 17:29
@jason-rl jason-rl force-pushed the jc/agent-axon-tui-screens branch from 0a9613e to 6f0ff3e Compare April 22, 2026 18:19
@jason-rl jason-rl force-pushed the jc/multi-agent-mounts branch 2 times, most recently from 0f843ed to 5508434 Compare April 22, 2026 18:24
@jason-rl jason-rl force-pushed the jc/agent-axon-tui-screens branch from 6f0ff3e to e062e13 Compare April 22, 2026 19:22
@jason-rl jason-rl force-pushed the jc/multi-agent-mounts branch 6 times, most recently from 74dcea2 to 437e312 Compare April 22, 2026 21:26
Base automatically changed from jc/agent-axon-tui-screens to main April 23, 2026 00:56
jason-rl and others added 5 commits April 22, 2026 18:02
Revert coverage threshold and forceExit changes to jest configs.
Remove unnecessary `as any` / narrowing casts for Agent.source and
StorageObjectView fields that are already properly typed.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Move sanitizeMountSegment, repoBasename, adjustFileExtension,
getDefaultAgentMountPath, and getDefaultObjectMountPath to
src/utils/mount.ts. Both CLI (commands/devbox/create.ts) and TUI
(components/DevboxCreatePage.tsx) now import from the shared module.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Use Promise.all instead of sequential for-of loops when resolving
multiple --agent and --object CLI flags, reducing latency.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
New components added without corresponding tests brought global
coverage just below the 30% threshold.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
jason-rl and others added 4 commits April 22, 2026 18:02
- Add [editing] label on agent/object mount items when inline path
  editing is active, making the sub-mode visually obvious
- Add 35 unit tests for mount.ts covering sanitizeMountSegment,
  adjustFileExtension, repoBasename, getDefaultAgentMountPath, and
  getDefaultObjectMountPath

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…ort IDs

Replace the duplicate inline formatBytes with the existing formatFileSize
export. Fix getDefaultObjectMountPath to extract the part after the last
underscore before slicing, avoiding confusing paths for short object IDs.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@jason-rl jason-rl force-pushed the jc/multi-agent-mounts branch from c4d15ba to 583cabf Compare April 23, 2026 01:07
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