feat: add workspace sources from files panel#1900
Conversation
|
Too many files changed for review. ( Bypass the limit by tagging |
|
Important Review skippedToo many files! This PR contains 203 files, which is 103 over the limit of 100. To get a review, narrow the scope: Upgrade to a paid plan to raise the limit. This review couldn't start because sufficient usage credits or metered capacity aren't available. Add credits or update usage-based reviews in the billing tab, then retry. ⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (203)
You can disable this status message by setting the ✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
Claude finished @carlosflorencio's task in 1s —— View job I'll analyze this and get back to you. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 4c8d568bb9
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
Cloudflare Pages docs previewBuilt from docs commit Stable PR alias: https://docs-pr-1900.landing-87j.pages.dev/docs |
|
Claude finished @carlosflorencio's task in 1s —— View job I'll analyze this and get back to you. |
|
Claude finished @carlosflorencio's task in 1s —— View job I'll analyze this and get back to you. |
7bc0bb4 to
36b3ef7
Compare
|
Claude finished @carlosflorencio's task in 0s —— View job I'll analyze this and get back to you. |
|
Claude finished @carlosflorencio's task in 0s —— View job I'll analyze this and get back to you. |
|
Claude finished @carlosflorencio's task in 0s —— View job I'll analyze this and get back to you. |
|
Claude finished @carlosflorencio's task in 1s —— View job I'll analyze this and get back to you. |
|
Claude finished @carlosflorencio's task in 1s —— View job I'll analyze this and get back to you. |
|
Claude finished @carlosflorencio's task in 0s —— View job I'll analyze this and get back to you. |
|
Claude finished @carlosflorencio's task in 0s —— View job I'll analyze this and get back to you. |
|
Claude finished @carlosflorencio's task in 4s —— View job I'll analyze this and get back to you. |
|
Claude finished @carlosflorencio's task in 0s —— View job I'll analyze this and get back to you. |
|
Claude finished @carlosflorencio's task in 1s —— View job I'll analyze this and get back to you. |
6c1faac to
10472cc
Compare
|
Claude finished @carlosflorencio's task in 0s —— View job I'll analyze this and get back to you. |
10472cc to
695c361
Compare
|
Claude finished @carlosflorencio's task in 0s —— View job I'll analyze this and get back to you. |
695c361 to
b764d4a
Compare
|
Claude finished @carlosflorencio's task in 1s —— View job I'll analyze this and get back to you. |
b764d4a to
696cd8b
Compare
|
Claude finished @carlosflorencio's task in 0s —— View job I'll analyze this and get back to you. |
|
Claude finished @carlosflorencio's task in 0s —— View job I'll analyze this and get back to you. |
1a00c2c to
5881565
Compare
|
Claude finished @carlosflorencio's task in 0s —— View job I'll analyze this and get back to you. |
|
Claude finished @carlosflorencio's task in 0s —— View job I'll analyze this and get back to you. |
|
Claude finished @carlosflorencio's task in 0s —— View job I'll analyze this and get back to you. |
|
Claude finished @carlosflorencio's task in 1s —— View job I'll analyze this and get back to you. |
Tasks can now take multiple durable workspace sources directly from the Files panel, so agents can work across saved, remote, and local Git repositories or local folders without recreating a task. A unified Workspace actions menu keeps source attachment and opening the workspace folder available together, while preserving mixed configured rows when users switch Local and Remote modes.
Important Changes
Adds durable source contracts and HTTP, WebSocket, and MCP operations for saved/remote/local Git and local-folder sources.
Materializes sources atomically and reconciles idle host and remote executor sessions through adoption, rebind, and relaunch paths; recovery now validates recovered repositories.
Reuses the Local/Remote source selector in task creation and Files-panel source attachment, with responsive desktop and mobile flows and an independent open-folder action when adding sources is unavailable.
Adds executor E2E fixture routing, security coverage, focused race coverage, public documentation, and recovery coverage.
Refines the Files workflow with the clearer Add Repositories to workspace action, delayed compact validation, one base-branch choice, and the shared saved/discovered repository picker with refresh and create-repository controls.
Security Hardening
os.Root; cross-root rename is explicitly rejected by ADR2026-07-23-workspace-source-root-move-boundary.Validation
SSH shutdown/resume follow-up passed at
6c1faacb45e666f40cda0f61bf6d4092a45d3803: graceful backend shutdown was incorrectly killing the SSH agentctl required for resume; the exact shutdown-only reason now preserves remote agentctl, while user, rollback, and destructive paths still kill it. Code review passed, commit hooks passed, and changed-scope verification passed with fullmake test-backendand diff checks. Rebuilt live-container SSHadd-workspace-sourcesE2E passed with remote PID 49 preserved, no second agentctl launch, forward34313→41037, and the final source visible.SSH resume identity/reuse follow-up passed at
f4471d6f8e4cf152aa4e9de9d941c0c1236f9089: authenticated status uses thePreviousExecutionIDremote identity while the local lifecycle keeps its newInstanceID; running or starting setsreuse_existing_processto prevent duplicate starts. Full backend, lifecycle, race, Windows, typecheck, lint, fmt, and diff checks passed. Live SSH reconnect is delegated to CI.SSH recovery follow-up passed at
3300c072210c99a266c2e8692949f78592b0f460: workspace-only create shares theRemoteSessionResumerpreflight with full launch, preserving persisted SSH metadata and the root tracker. Full backend, lifecycle, race, Windows, typecheck, lint, fmt, and diff checks passed. Live SSH reconnect is delegated to CI.Final fixture follow-up passed at
be351070a2aef2430c5f0e87218c62435efba013: backend recovery uses per-fixture exact-URLGIT_CONFIG_GLOBALcoexisting with repoclone credential config; executor inline config is unchanged; post-listen failures close the server and aggregate errors.Seven focused tests and three listed container tests passed; full fmt, typecheck, lint, and diff checks passed.
Direct-local and fixture-recovery follow-up passed at
f3e47a1dfd494858b46389e3755986aac674e77a: sanitized/fallback stableRepoNameIDs fix environment persistence; backend fixture exact Git rewrite survives restart and recovery with conflict-safe, failure-safe cleanup.Full backend, executor/lifecycle, and fixture tests passed; 3 container tests are listed; Windows executor/process compile, full typecheck, lint, fmt, and diff checks passed. Live container execution is delegated to CI.
Container E2E expectation follow-up passed at
b476aafe8c49317cb0dc231b3e00cf83e3df72b6: a trusted GitLab owner yields canonicalfixture-*directories; the fix is CI artifact-backed, the exact Playwright containers list contains 3 tests, and full typecheck, lint, fmt, and diff checks passed. Live execution is delegated to CI.Windows-portability follow-up passed at
b79e840dd0011782b23ed44ed87b4213a67ec702: source-root tests canonicalize expected paths to matchEvalSymlinksand 8.3 behavior; exact full process/race/focused tests, Windows compile, full typecheck, lint, and diff checks passed.CI-fix and rescan follow-up passed at
8bb65c05933ec01f6b117e316d6ad66c95d8d9ef: arbitrary rescan recovery is restricted with regression coverage; materialization helper extraction clears exact base-scoped cyclop lint; fixture unit coverage validates URL/rewrite shape while Docker/SSH E2E owns connectivity.make fmt,make typecheck,make test-backend, base-scoped Go lint, API/process/race/Windows, focused web, full lint, and diff checks passed.Parent full web validation is reused: Web Vitest passed across four shards with 6,311 passed and 4 skipped.
Focused production desktop Files-panel E2E: 2/2 passed; Pixel 5 E2E: 1/1 passed.
Container fixture unit, lint, and typecheck checks passed.
Live container E2E was locally blocked because
apps/backend/bin/mock-agent-linux-amd64was unavailable.UX refinement passed focused desktop and Pixel 5 E2E, 26 focused component tests, public-doc validation, and full post-rebase format/typecheck/test/lint at 695c361. Public docs and the durable feature spec were updated with the new label and branch behavior.
\n- Resume phantom-turn regression passed at
b764d4a2b: resumed session-status messages now reuse only an existing turn instead of lazily creating one. The focused regression failed before the fix and passed afterward; race-focused backend tests, full post-rebase format/typecheck/test/lint, and exact-head CI all passed.\n\n## ChecklistI have performed a self-review of my code.
I have manually tested my changes and they work as expected.
My changes have tests that cover the new functionality and edge cases.
If my change touches UI files (
apps/web/), I have added or updated Playwright e2e tests inapps/web/e2e/and verified them withmake test-e2e.I checked whether this affects public docs in
docs/public/**and updated them or noted why no docs change is needed.Screenshots
Desktop
Mobile
Preview Environment
a7b18db