feat(cli): add optional path argument to coder start subcommand#1352
feat(cli): add optional path argument to coder start subcommand#1352devin-ai-integration[bot] wants to merge 2 commits intomainfrom
Conversation
Allow users to specify a local project directory when starting a coder session. The path is passed as a positional argument: agentuity coder start ~/path/to/my/project When provided: - The path is resolved and validated (must exist) - Used as the working directory for the pi process - Passed as a positional arg to pi - Displayed in the startup output When omitted, behavior is unchanged (uses current working directory). Co-Authored-By: Rick Blalock <rickblalock@mac.com>
🤖 Devin AI EngineerI'll be helping with this pull request! Here's what you should know: ✅ I will automatically:
Note: I can only respond to comments from users who have write access to this repository. ⚙️ Control Options:
|
📝 WalkthroughWalkthroughAdds an optional positional local project directory argument to Changes
🚥 Pre-merge checks | ✅ 1✅ Passed checks (1 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. Comment |
📦 Canary Packages Publishedversion: PackagesInstallAdd to your {
"dependencies": {
"@agentuity/frontend": "https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-2075d54/agentuity-frontend-2.0.9-2075d54.tgz",
"@agentuity/postgres": "https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-2075d54/agentuity-postgres-2.0.9-2075d54.tgz",
"@agentuity/task": "https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-2075d54/agentuity-task-2.0.9-2075d54.tgz",
"@agentuity/keyvalue": "https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-2075d54/agentuity-keyvalue-2.0.9-2075d54.tgz",
"@agentuity/claude-code": "https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-2075d54/agentuity-claude-code-2.0.9-2075d54.tgz",
"@agentuity/email": "https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-2075d54/agentuity-email-2.0.9-2075d54.tgz",
"@agentuity/db": "https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-2075d54/agentuity-db-2.0.9-2075d54.tgz",
"@agentuity/runtime": "https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-2075d54/agentuity-runtime-2.0.9-2075d54.tgz",
"@agentuity/evals": "https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-2075d54/agentuity-evals-2.0.9-2075d54.tgz",
"@agentuity/coder-tui": "https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-2075d54/agentuity-coder-tui-2.0.9-2075d54.tgz",
"@agentuity/auth": "https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-2075d54/agentuity-auth-2.0.9-2075d54.tgz",
"@agentuity/webhook": "https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-2075d54/agentuity-webhook-2.0.9-2075d54.tgz",
"@agentuity/drizzle": "https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-2075d54/agentuity-drizzle-2.0.9-2075d54.tgz",
"@agentuity/core": "https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-2075d54/agentuity-core-2.0.9-2075d54.tgz",
"@agentuity/coder": "https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-2075d54/agentuity-coder-2.0.9-2075d54.tgz",
"@agentuity/schedule": "https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-2075d54/agentuity-schedule-2.0.9-2075d54.tgz",
"@agentuity/opencode": "https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-2075d54/agentuity-opencode-2.0.9-2075d54.tgz",
"@agentuity/vector": "https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-2075d54/agentuity-vector-2.0.9-2075d54.tgz",
"@agentuity/schema": "https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-2075d54/agentuity-schema-2.0.9-2075d54.tgz",
"@agentuity/cli": "https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-2075d54/agentuity-cli-2.0.9-2075d54.tgz",
"@agentuity/react": "https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-2075d54/agentuity-react-2.0.9-2075d54.tgz",
"@agentuity/server": "https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-2075d54/agentuity-server-2.0.9-2075d54.tgz",
"@agentuity/sandbox": "https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-2075d54/agentuity-sandbox-2.0.9-2075d54.tgz",
"@agentuity/workbench": "https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-2075d54/agentuity-workbench-2.0.9-2075d54.tgz",
"@agentuity/migrate": "https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-2075d54/agentuity-migrate-2.0.9-2075d54.tgz",
"@agentuity/queue": "https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-2075d54/agentuity-queue-2.0.9-2075d54.tgz"
}
}Or install directly: bun add https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-2075d54/agentuity-frontend-2.0.9-2075d54.tgz
bun add https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-2075d54/agentuity-postgres-2.0.9-2075d54.tgz
bun add https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-2075d54/agentuity-task-2.0.9-2075d54.tgz
bun add https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-2075d54/agentuity-keyvalue-2.0.9-2075d54.tgz
bun add https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-2075d54/agentuity-claude-code-2.0.9-2075d54.tgz
bun add https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-2075d54/agentuity-email-2.0.9-2075d54.tgz
bun add https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-2075d54/agentuity-db-2.0.9-2075d54.tgz
bun add https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-2075d54/agentuity-runtime-2.0.9-2075d54.tgz
bun add https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-2075d54/agentuity-evals-2.0.9-2075d54.tgz
bun add https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-2075d54/agentuity-coder-tui-2.0.9-2075d54.tgz
bun add https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-2075d54/agentuity-auth-2.0.9-2075d54.tgz
bun add https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-2075d54/agentuity-webhook-2.0.9-2075d54.tgz
bun add https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-2075d54/agentuity-drizzle-2.0.9-2075d54.tgz
bun add https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-2075d54/agentuity-core-2.0.9-2075d54.tgz
bun add https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-2075d54/agentuity-coder-2.0.9-2075d54.tgz
bun add https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-2075d54/agentuity-schedule-2.0.9-2075d54.tgz
bun add https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-2075d54/agentuity-opencode-2.0.9-2075d54.tgz
bun add https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-2075d54/agentuity-vector-2.0.9-2075d54.tgz
bun add https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-2075d54/agentuity-schema-2.0.9-2075d54.tgz
bun add https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-2075d54/agentuity-cli-2.0.9-2075d54.tgz
bun add https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-2075d54/agentuity-react-2.0.9-2075d54.tgz
bun add https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-2075d54/agentuity-server-2.0.9-2075d54.tgz
bun add https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-2075d54/agentuity-sandbox-2.0.9-2075d54.tgz
bun add https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-2075d54/agentuity-workbench-2.0.9-2075d54.tgz
bun add https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-2075d54/agentuity-migrate-2.0.9-2075d54.tgz
bun add https://agentuity-sdk-objects.t3.storageapi.dev/npm/2.0.9-2075d54/agentuity-queue-2.0.9-2075d54.tgz |
There was a problem hiding this comment.
Actionable comments posted: 3
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@packages/cli/src/cmd/coder/start.ts`:
- Around line 133-141: The local-path existence check runs unconditionally; gate
it so it only runs in local mode (i.e., when not in remote or sandbox mode).
Move the existsSync + tui.fatal(ErrorCode.CONFIG_INVALID) validation into the
branch that handles local startup (check flags like args.remote or args.sandbox
or whichever mode variable your code uses) and skip validation when
remote/sandbox is true; if args.path is provided but ignored because
remote/sandbox mode is active, emit a concise tui.warn indicating the path was
ignored. Ensure you still set cwd = resolve(args.path) only for local mode and
keep references to cwd, args.path, existsSync, tui.fatal, and
ErrorCode.CONFIG_INVALID to locate the change.
- Line 385: The line that pushes the working directory into the Pi CLI
positional args is incorrect: remove the push of cwd into piArgs (the
conditional using args?.path and piArgs.push(cwd)) so the Pi CLI doesn't treat
the directory as a message/file; instead rely on the existing Bun.spawn
invocation that sets the cwd option to control the process working directory.
Locate the piArgs construction and the conditional referencing args?.path and
remove the piArgs.push(cwd) call so only valid flags/positional values are
passed to the Pi CLI.
- Line 2: resolve(args.path) does not expand a leading ~ and the current
existence check (including Bun.file().exists()) does not verify the target is a
directory; update the path handling to first expand a leading '~' to
os.homedir(), then call path.resolve on that expanded value (reference resolve
and args.path), and replace the Bun.file().exists() check with node:fs/promises
stat/lstat to ensure the path exists and stats.isDirectory() returns true (use
the async fs.stat or fs.lstat functions); if the check fails, log a clear error
via the same logger and exit, ensuring any imports are updated to include
node:os and node:fs/promises instead of relying on Bun.file().exists().
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: e9bcf5f0-6d70-47d0-9773-a8840ec73b1a
📒 Files selected for processing (2)
packages/cli/src/cmd/coder/index.tspackages/cli/src/cmd/coder/start.ts
📜 Review details
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (12)
- GitHub Check: Windows WSL CLI Smoke Test
- GitHub Check: Pack & Upload
- GitHub Check: Build
- GitHub Check: Framework Integration Tests (TanStack & Next.js)
- GitHub Check: Playwright E2E Smoke Test
- GitHub Check: SDK Integration Test Suite
- GitHub Check: Sandbox CLI Tests
- GitHub Check: Queue CLI Tests
- GitHub Check: Postgres SSL Integration Test
- GitHub Check: Cloud Deployment Tests
- GitHub Check: Package Installation & Usage Test
- GitHub Check: Template Integration Tests
🧰 Additional context used
📓 Path-based instructions (5)
packages/cli/src/cmd/**/index.ts
📄 CodeRabbit inference engine (packages/cli/AGENTS.md)
packages/cli/src/cmd/**/index.ts: Each command must be structured as a directory insrc/cmd/with anindex.tsfile as the entry point
Always define interfaces or Zod schemas for command options; never useanytype for type safety
Usetui.*helpers (header, info, success, warning, error, table, progress) for formatted TUI output instead of raw console methods
Usectx.loggerfor logging instead of console methods; uselogger.fatal()for fatal errors which logs and exits with code 1
Always checkisJSONMode()before outputting data and provide machine-readable output when in JSON mode
UserequireAuth(ctx)for commands that require authentication oroptionalAuth(ctx)for commands that support optional authentication
Files:
packages/cli/src/cmd/coder/index.ts
packages/cli/**/*.ts
📄 CodeRabbit inference engine (packages/cli/AGENTS.md)
Use
Bun.file(f).exists()instead ofexistsSync(f)for file existence checks
Files:
packages/cli/src/cmd/coder/index.tspackages/cli/src/cmd/coder/start.ts
**/*.{ts,tsx,js,jsx}
📄 CodeRabbit inference engine (AGENTS.md)
Use Biome as code formatter with tabs (width 3), single quotes, semicolons, lineWidth 100, and trailingCommas es5
Files:
packages/cli/src/cmd/coder/index.tspackages/cli/src/cmd/coder/start.ts
**/*.{ts,tsx}
📄 CodeRabbit inference engine (AGENTS.md)
**/*.{ts,tsx}: Use TypeScript Strict mode with ESNext target and bundler moduleResolution
UseStructuredErrorfrom@agentuity/corefor error handling
Files:
packages/cli/src/cmd/coder/index.tspackages/cli/src/cmd/coder/start.ts
**/index.ts
📄 CodeRabbit inference engine (AGENTS.md)
Use named exports from package
index.tsfiles
Files:
packages/cli/src/cmd/coder/index.ts
🧠 Learnings (2)
📚 Learning: 2025-12-21T00:31:41.858Z
Learnt from: jhaynie
Repo: agentuity/sdk PR: 274
File: packages/cli/src/cmd/build/vite/server-bundler.ts:12-41
Timestamp: 2025-12-21T00:31:41.858Z
Learning: In Bun runtime, BuildMessage and ResolveMessage are global types and are not exported from the bun module. Do not import { BuildMessage } from 'bun' or similar; these types are available globally and should be used without import. This applies to all TypeScript files that target the Bun runtime within the repository.
Applied to files:
packages/cli/src/cmd/coder/index.tspackages/cli/src/cmd/coder/start.ts
📚 Learning: 2026-02-17T14:23:15.448Z
Learnt from: potofpie
Repo: agentuity/sdk PR: 974
File: packages/cli/src/cmd/git/account/list.ts:39-40
Timestamp: 2026-02-17T14:23:15.448Z
Learning: In the Agentuity CLI framework (packages/cli), when a subcommand declares requires: { auth: true }, the framework will automatically call requireAuth() before invoking the handler. Do not call requireAuth(ctx) manually inside command handlers. This applies to all TypeScript command files under packages/cli/src, including paths like packages/cli/src/cmd/git/account/list.ts.
Applied to files:
packages/cli/src/cmd/coder/index.tspackages/cli/src/cmd/coder/start.ts
🔇 Additional comments (1)
packages/cli/src/cmd/coder/start.ts (1)
104-106: Good addition of positional path schema.The optional
args.pathdefinition is clean and type-safe, and it aligns with the new command UX.
…dation, remove piArgs.push - Expand ~ to homedir() before resolving path (fixes ~/path examples) - Validate path is a directory using stat().isDirectory() instead of existsSync() - Remove piArgs.push(cwd) since Pi CLI doesn't accept directory positional args (Bun.spawn cwd option is sufficient) - Gate path validation to local mode only; warn if used with --remote/--sandbox - Use async stat from node:fs/promises instead of sync existsSync Co-Authored-By: Rick Blalock <rickblalock@mac.com>
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@packages/cli/src/cmd/coder/start.ts`:
- Around line 136-145: The code currently treats args.path truthily and calls
trim(), which wrongly ignores empty strings and strips intentional spaces and
fails to expand Windows-style home paths; change the condition to check presence
explicitly (if (args?.path !== undefined)), stop using trim() (use raw =
args.path), and implement home expansion for '~' plus both '~/...' and '~\\...'
(e.g., if raw === '~' -> cwd = resolve(homedir()), else if raw.startsWith('~/')
|| raw.startsWith('~\\') -> cwd = resolve(homedir(), raw.slice(2)), otherwise
cwd = resolve(raw)); keep the existing tui.warning for when opts.remote or
opts.sandbox are set.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: 257ae603-6e2c-49d3-bd2d-6a9804adf759
📒 Files selected for processing (1)
packages/cli/src/cmd/coder/start.ts
📜 Review details
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (14)
- GitHub Check: Framework Integration Tests (TanStack & Next.js)
- GitHub Check: Postgres SSL Integration Test
- GitHub Check: Queue SDK Tests
- GitHub Check: Storage CLI Tests
- GitHub Check: Playwright E2E Smoke Test
- GitHub Check: Sandbox CLI Tests
- GitHub Check: Queue CLI Tests
- GitHub Check: Cloud Deployment Tests
- GitHub Check: Package Installation & Usage Test
- GitHub Check: Template Integration Tests
- GitHub Check: SDK Integration Test Suite
- GitHub Check: Pack & Upload
- GitHub Check: Build
- GitHub Check: Windows WSL CLI Smoke Test
🧰 Additional context used
📓 Path-based instructions (3)
packages/cli/**/*.ts
📄 CodeRabbit inference engine (packages/cli/AGENTS.md)
Use
Bun.file(f).exists()instead ofexistsSync(f)for file existence checks
Files:
packages/cli/src/cmd/coder/start.ts
**/*.{ts,tsx,js,jsx}
📄 CodeRabbit inference engine (AGENTS.md)
Use Biome as code formatter with tabs (width 3), single quotes, semicolons, lineWidth 100, and trailingCommas es5
Files:
packages/cli/src/cmd/coder/start.ts
**/*.{ts,tsx}
📄 CodeRabbit inference engine (AGENTS.md)
**/*.{ts,tsx}: Use TypeScript Strict mode with ESNext target and bundler moduleResolution
UseStructuredErrorfrom@agentuity/corefor error handling
Files:
packages/cli/src/cmd/coder/start.ts
🧠 Learnings (2)
📚 Learning: 2025-12-21T00:31:41.858Z
Learnt from: jhaynie
Repo: agentuity/sdk PR: 274
File: packages/cli/src/cmd/build/vite/server-bundler.ts:12-41
Timestamp: 2025-12-21T00:31:41.858Z
Learning: In Bun runtime, BuildMessage and ResolveMessage are global types and are not exported from the bun module. Do not import { BuildMessage } from 'bun' or similar; these types are available globally and should be used without import. This applies to all TypeScript files that target the Bun runtime within the repository.
Applied to files:
packages/cli/src/cmd/coder/start.ts
📚 Learning: 2026-02-17T14:23:15.448Z
Learnt from: potofpie
Repo: agentuity/sdk PR: 974
File: packages/cli/src/cmd/git/account/list.ts:39-40
Timestamp: 2026-02-17T14:23:15.448Z
Learning: In the Agentuity CLI framework (packages/cli), when a subcommand declares requires: { auth: true }, the framework will automatically call requireAuth() before invoking the handler. Do not call requireAuth(ctx) manually inside command handlers. This applies to all TypeScript command files under packages/cli/src, including paths like packages/cli/src/cmd/git/account/list.ts.
Applied to files:
packages/cli/src/cmd/coder/start.ts
| if (args?.path) { | ||
| // Warn if path is provided with --remote or --sandbox (path is ignored in those modes) | ||
| if (opts?.remote !== undefined || opts?.sandbox !== undefined) { | ||
| tui.warning('Path argument is ignored in remote/sandbox mode'); | ||
| } else { | ||
| const raw = args.path.trim(); | ||
| cwd = | ||
| raw === '~' || raw.startsWith('~/') | ||
| ? resolve(homedir(), raw.slice(2)) | ||
| : resolve(raw); |
There was a problem hiding this comment.
Don't rely on truthiness and trim() for the positional path.
if (args?.path) treats "" as “no path”, while trim() makes ' ' resolve to process.cwd() and strips intentional leading/trailing spaces from quoted directory names. The home-expansion check also misses ~\..., so Windows-style home paths resolve incorrectly.
🛠️ Proposed fix
- if (args?.path) {
+ if (args?.path !== undefined) {
// Warn if path is provided with --remote or --sandbox (path is ignored in those modes)
if (opts?.remote !== undefined || opts?.sandbox !== undefined) {
tui.warning('Path argument is ignored in remote/sandbox mode');
} else {
- const raw = args.path.trim();
+ const raw = args.path;
+ if (raw.trim().length === 0) {
+ tui.fatal('Path argument cannot be empty', ErrorCode.CONFIG_INVALID);
+ return;
+ }
cwd =
- raw === '~' || raw.startsWith('~/')
+ raw === '~' || raw.startsWith('~/') || raw.startsWith('~\\')
? resolve(homedir(), raw.slice(2))
: resolve(raw);🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@packages/cli/src/cmd/coder/start.ts` around lines 136 - 145, The code
currently treats args.path truthily and calls trim(), which wrongly ignores
empty strings and strips intentional spaces and fails to expand Windows-style
home paths; change the condition to check presence explicitly (if (args?.path
!== undefined)), stop using trim() (use raw = args.path), and implement home
expansion for '~' plus both '~/...' and '~\\...' (e.g., if raw === '~' -> cwd =
resolve(homedir()), else if raw.startsWith('~/') || raw.startsWith('~\\') -> cwd
= resolve(homedir(), raw.slice(2)), otherwise cwd = resolve(raw)); keep the
existing tui.warning for when opts.remote or opts.sandbox are set.
Summary
Adds an optional positional
pathargument to thecoder startsubcommand so users can specify a local project directory to operate from:When provided, the path is resolved to an absolute path, validated for existence, used as the
cwdfor the spawnedpiprocess, and passed as a positional argument topi. When omitted, behavior is unchanged (uses current working directory).Updated help examples in both
start.tsandindex.tsto show the new usage pattern.Review & Testing Checklist for Human
piaccepts a directory as a positional argument. The code pushescwdontopiArgswhen a path is given — confirm thatpiinterprets a trailing positional arg as the working directory. Ifpidoesn't support this, thepiArgs.push(cwd)line should be removed (thecwdoption onBun.spawnalone may suffice).existsSyncwill pass for files too. Consider whether astatSync(cwd).isDirectory()check is needed.--remoteand a path, the path has no effect. Decide if a warning is appropriate.agentuity coder start ~/some/projectand confirmpilaunches in the correct directory. Also test without a path to confirm no regression.Notes
startsubcommand is modified. Thecreatesubcommand was intentionally left unchanged since it targets remote/sandbox sessions, not local projects.existsSyncfromnode:fs(new import) for path validation.Link to Devin session: https://app.devin.ai/sessions/851aa4f948c04bcaa045a3ef07748551
Summary by CodeRabbit
New Features
Bug Fixes / Validation