Skip to content

Commit c693d25

Browse files
committed
🤖 Add SSH runtime with integration tests
Implements SSHRuntime for executing commands and file operations on remote hosts via SSH, enabling distributed agent workspaces. **Implementation:** - Uses system `ssh` command (respects ~/.ssh/config, ProxyJump, ControlMaster) - Supports SSH config aliases, custom ports, identity files - Opportunistic rsync with tar+ssh fallback for file sync - Web Streams for stdout/stderr with proper async handling - 300s timeout for long-running operations **Workspace Creation:** - createWorkspace() syncs project via rsync/tar+ssh - Remote git checkout on target branch - Runs .cmux/init hooks remotely - Returns remote workspace path **Testing:** - Docker-based SSH server fixture (Alpine Linux) - Integration tests for LocalRuntime and SSHRuntime - Tests workspace creation, file I/O, command execution - SSH tests automatically skipped in CI (requires Docker) **Configuration:** - WorkspaceMetadata extended with optional runtime config - Runtime created via runtimeFactory based on config - Falls back to LocalRuntime if no config specified Generated with `cmux`
1 parent f727584 commit c693d25

File tree

15 files changed

+1957
-132
lines changed

15 files changed

+1957
-132
lines changed

bun.lock

Lines changed: 74 additions & 128 deletions
Large diffs are not rendered by default.

docs/AGENTS.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ Verify with React DevTools Profiler - MarkdownCore should only re-render when co
110110

111111
## Documentation Guidelines
112112

113-
**Free-floating markdown docs are not permitted.** Documentation must be organized:
113+
**Free-floating markdown docs are not permitted.** Documentation must be organized. Do not create standalone markdown files in the project root or random locations, even for implementation summaries or planning documents - use the propose_plan tool or inline comments instead.
114114

115115
- **User-facing docs**`./docs/` directory
116116
- **IMPORTANT**: Read `docs/README.md` first before writing user-facing documentation
@@ -119,6 +119,7 @@ Verify with React DevTools Profiler - MarkdownCore should only re-render when co
119119
- Use standard markdown + mermaid diagrams
120120
- **Developer docs** → inline with the code its documenting as comments. Consider them notes as notes to future Assistants to understand the logic more quickly.
121121
**DO NOT** create standalone documentation files in the project root or random locations.
122+
- **Test documentation** → inline comments in test files explaining complex test setup or edge cases, NOT separate README files.
122123

123124
**NEVER create markdown documentation files (README, guides, summaries, etc.) in the project root during feature development unless the user explicitly requests documentation.** Code + tests + inline comments are complete documentation.
124125

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,8 @@
4141
"docs:watch": "make docs-watch",
4242
"storybook": "make storybook",
4343
"storybook:build": "make storybook-build",
44-
"test:storybook": "make test-storybook"
44+
"test:storybook": "make test-storybook",
45+
"rebuild": "echo \"No native modules to rebuild\""
4546
},
4647
"dependencies": {
4748
"@ai-sdk/anthropic": "^2.0.29",

0 commit comments

Comments
 (0)