Skip to content

feat(workspace): Multi-directory workspace engine support (#215) - #230

Merged
jeonghun-jj-lee merged 6 commits into
local/amicodefrom
feat/215-workspace-aware-rebased
Aug 22, 2026
Merged

jeonghun-jj-lee merged 6 commits into
local/amicodefrom
feat/215-workspace-aware-rebased

Conversation

@jeonghun-jj-lee

@jeonghun-jj-lee jeonghun-jj-lee commented Aug 22, 2026

Copy link
Copy Markdown
Contributor

Multi-root workspace support for the opencode engine.

Changes

  • Location.Ref gains a directories field for secondary workspace roots
  • instruction.ts discovers CLAUDE.md/AGENTS.md across all workspace directories
  • builtins.ts marks correct directory as primary in multi-root prompt
  • Session DB migration adds directories column
  • findUp uses per-directory stop boundaries

Bug fixes

  1. Location.Interface missing directories field (type error)
  2. Migration not registered in migration.gen.ts
  3. instruction.ts unsafe cast
  4. findUp boundary check wrong for secondary dirs
  5. builtins.ts primary marker logic

All 30 packages typecheck clean.

Summary by CodeRabbit

  • New Features

    • Added support for projects containing multiple workspace directories.
    • Workspace context now lists all configured folders and identifies the primary directory.
    • Instruction files are discovered across workspace directories, with appropriate search boundaries and precedence.
    • Session and location data now preserve configured workspace directories.
  • Bug Fixes

    • Files within secondary workspace directories are no longer incorrectly treated as external or rejected as path escapes.
    • Paths outside all configured workspaces continue to receive external-directory handling.

amico and others added 6 commits August 21, 2026 19:48
…t (opencode#215, draft)

- schema: Location.Ref.directories?: AbsolutePath[] (primary + all workspace roots)
- core/location-mutation: isLexicallyInternal checks primary + directories; canonical check also allows any workspace dir (no external-directory prompts across workspace)
- core/system-context: env block lists all workspace folders with primary mark; single-folder fallback unchanged

Remaining for full AC (see #215): instruction discovery (findUp per dir, dedup), server session create ?directories=JSON handling, DB migration (directories TEXT nullable), and amicode extension Workspace sidebar (WorkspaceTreeProvider) + Catalog removal (already #457). Draft — engine core only.
…DB (opencode#215)

- project/instance-context: add directories?: string[], containsPath checks all roots
- project/instance-store: LoadInput.directories forwarding to InstanceContext
- session/instruction: systemPaths runs findUp from each workspace dir (dedup), primary first
- core/session/sql: SessionTable.directories JSON + migration 20260820000001

Remaining (tracked): POST /session?directories=JSON handler + extension WorkspaceTree (amicode#457 follow-up extends 215 AC6/7). Engine core now workspace-aware end-to-end.
… primary marker

- instruction.ts: remove (ctx as unknown) cast — InstanceContext already has directories
- instruction.ts: use directory itself as findUp boundary for secondary dirs (prevents
  walking past workspace root into unrelated parents)
- builtins.ts: always place primary first in workspaceFolders, mark by equality not index
- tests: add multi-root instruction discovery + builtins primary-marking tests
@coderabbitai

coderabbitai Bot commented Aug 22, 2026

Copy link
Copy Markdown

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 72324ae0-8338-48c3-a75f-f312c721c4e0

📥 Commits

Reviewing files that changed from the base of the PR and between 8dfb210 and ad35703.

📒 Files selected for processing (15)
  • packages/core/src/database/migration.gen.ts
  • packages/core/src/database/migration/20260820000001_add_session_directories.ts
  • packages/core/src/location-mutation.ts
  • packages/core/src/location.ts
  • packages/core/src/session/sql.ts
  • packages/core/src/system-context/builtins.ts
  • packages/core/test/fixture/location.ts
  • packages/core/test/location-mutation.test.ts
  • packages/core/test/system-context/builtins.test.ts
  • packages/opencode/src/project/instance-context.ts
  • packages/opencode/src/project/instance-store.ts
  • packages/opencode/src/session/instruction.ts
  • packages/opencode/test/fixture/fixture.ts
  • packages/opencode/test/session/instruction.test.ts
  • packages/schema/src/location.ts

📝 Walkthrough

Walkthrough

The PR adds optional multi-root workspace directories to location and session data. It updates path validation, environment context, project instance propagation, and instruction discovery. It also adds database migration and multi-root test coverage.

Changes

Multi-root workspace support

Layer / File(s) Summary
Directory contracts and persistence
packages/schema/src/location.ts, packages/core/src/location.ts, packages/core/src/session/sql.ts, packages/core/src/database/migration/*
Location and session data now support optional directories. The migration creates and registers the session column.
Workspace boundaries and environment context
packages/core/src/location-mutation.ts, packages/core/src/system-context/builtins.ts, packages/core/test/location-mutation.test.ts, packages/core/test/system-context/builtins.test.ts, packages/core/test/fixture/location.ts
Path checks accept configured workspace roots. Environment context lists workspace folders and identifies the primary directory. Tests cover secondary roots and reversed directory ordering.
Project propagation and instruction discovery
packages/opencode/src/project/*, packages/opencode/src/session/instruction.ts, packages/opencode/test/session/instruction.test.ts, packages/opencode/test/fixture/fixture.ts
Project instances preserve directories. Instruction lookup searches each configured root within its boundary and deduplicates results. Tests cover secondary instruction files and Git-root isolation.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Suggested reviewers: kitlangton, thdxr, jlongster

Sequence Diagram(s)

sequenceDiagram
  participant InstanceStore
  participant InstanceContext
  participant InstructionSystemPaths
  InstanceStore->>InstanceContext: copy configured directories during boot
  InstructionSystemPaths->>InstanceContext: search configured workspace directories
  InstructionSystemPaths->>InstructionSystemPaths: enforce boundaries and instruction precedence
Loading
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/215-workspace-aware-rebased

Comment @coderabbitai help to get the list of available commands.

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.

1 participant