Fork Orca into packages/ide as first-party code, and rename its config and CLI identifiers to CoDev - #11
Merged
Merged
Conversation
The IDE was vendored: every build cloned stablyai/orca at a pinned tag and re-applied a 13k-line codev-web.patch over it. That made CoDev's own IDE work invisible in the tree, unreviewable in diffs, and reconcilable only as patch hunks. It is now ordinary source in this monorepo. The move is mechanical and byte-exact. The patched upstream tree at the pinned commit 02cea8a became packages/ide verbatim, so no CoDev edit was rewritten or redone. Rebuilding the web client from the new location reproduces the committed bundle with identical content hashes and zero diff under apps/web/public/orca -- proof this changes no behavior. Both artifacts now build from that one directory, which keeps them on the same version by construction: - pnpm orca:web -> browser client - build-orca-serve.sh -> orca serve (Containerfile COPYs it as context) packages/ide stays a self-contained project rather than joining the workspace: it declares its own pnpm-workspace.yaml (packages: []), lockfile, patchedDependencies, and an Electron native-rebuild postinstall, exactly the carve-out upstream already made for itself. The root workspace excludes it and .prettierignore skips it, so the recursive build/lint/typecheck/test scripts and Prettier do not sweep ~11k IDE sources into every CI run -- it formats with its own oxfmt and lints with its own oxlint. Trimmed at fork time, since no build consumes them and electron-builder already excluded three of them from the packaged app: mobile/ (a separate workspace), docs/, examples/, Casks/, .github/. Upstream identifiers are deliberately untouched, so this commit is a pure relocation: the package is still named orca, and the orca CLI binary, orca.yaml, ~/.orca, orca:// and orca-plugin.json are unchanged. Renaming them, and folding the post-build brand-web.mjs rewrite into the source, is follow-up work planned in packages/ide/CODEV-INTEGRATION.md. The MIT LICENSE moves with the code. third_party/orca/UPSTREAM.md is replaced by packages/ide/README.md (origin, licence, how to work in here) and packages/ide/CODEV-INTEGRATION.md (every CoDev-specific behavior: the embedding contract, parent bridge, folded sidebar, default chat tab, per-member agent subscriptions, settings surface, theme and branding layers). Accepted trade-off: upstream Orca fixes are no longer a version bump. Taking one now means reading their diff and porting it by hand into a diverged tree. Verified: pnpm install --frozen-lockfile (lockfile unchanged), format:check, lint, typecheck, cargo fmt --check, and the infra suite all pass, and the web client builds from packages/ide to a byte-identical bundle. The one failing test (apps/web sign-in-layout) is pre-existing on main from in-flight credentials sign-in work; this branch does not touch its subject files. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
First half of the identifier rename now that the IDE is first-party: the two
identifiers users actually touch on disk.
~/.orca -> ~/.codev (per-user config directory)
<repo>/.orca/ -> <repo>/.codev/ (issue-command, drops, templates)
orca.yaml -> codev.yaml (tracked project config)
Reads accept both names, so nothing has to migrate and no deploy has to be
coordinated. src/shared/codev-identifiers.ts holds the canonical and legacy
names; codevHomeConfigDir() keeps using an existing ~/.orca rather than moving
it, because agent hooks record absolute script paths in Claude/Codex config and
relocating the directory would break hooks installed before this change. Fresh
installs get ~/.codev. Writes and everything displayed use the CoDev name.
Neither name was centralized before -- 15 call sites each built
`join(home, '.orca', ...)` or `join(repoPath, 'orca.yaml')` by hand -- so this
also collapses them onto shared helpers: codevHomeConfigDir(),
getProjectConfigPath(), getRemoteManagedScriptPath() for the ten remote agent
hook installers, and readFirstProjectConfig()/readRemoteProjectConfig() for the
remote provider paths that cannot stat locally and instead try each candidate.
Deliberately NOT renamed, and each for a reason:
- `source: 'orca.yaml'` in orca-runtime.ts is a host->client wire
discriminant. Per AGENTS.md remote-wire-compatibility, mixed client/host
versions are the normal state and an older paired client would not
understand a new token. It is invisible to users; the displayed filename
beside it is renamed.
- `com.stablyai.orca` is the macOS bundle identifier -- app identity, tied to
code signing, TCC grants, and update channels.
- `.orca-remote` (SSH relay install root), `.orca-upload-` (temp suffix),
`orca-skills` (plugin key), and the `.orca-diff-comment-add-btn` CSS class
are unrelated to config and stay.
Remote and WSL hook installers always write the CoDev name: a remote home
cannot be stat'd from here, and createManagedCommandMatcher already sweeps a
stale entry by script name regardless of its parent directory.
Still to do in this series: orca-plugin.json, the orca:// pairing scheme, and
the orca CLI binary name.
Verified: typecheck:node, typecheck:cli, typecheck:web, and repo format:check
all pass. The IDE suite is at parity with the pre-change baseline -- 4412
passed, and the one file failing that did not fail before
(remote-runtime-shared-control-connection) is untouched by this commit, passed
in two earlier full runs, and passes 27/27 in isolation, i.e. flaky.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
… CoDev
Second half of the identifier rename.
orca-plugin.json -> codev-plugin.json (plugin manifest)
orca://pair -> codev://pair (pairing deep link)
orca / orca-ide -> codev (CLI command)
Every parser accepts both names, so a plugin authored before the rename still
loads and a pairing link minted by an older desktop build still pairs. Only what
is minted and displayed uses the CoDev name. apps/web's extractPairingCode
accepts both schemes too, since the IDE now mints codev://.
The CLI rename is the substantive one. Linux used `orca-ide` specifically to
avoid colliding with Ubuntu's GNOME Orca package and /usr/bin/orca; `codev` has
no such conflict, so every platform now shares one command name. package.json
keeps `orca`/`orca-dev` as aliases beside `codev`/`codev-dev`, the bundled
launcher moved to resources/linux/bin/codev, the deb/rpm hooks symlink
/usr/bin/codev, and both the launcher's executable search and the deb/rpm
uninstall hook still recognise pre-rename install layouts.
Two compatibility rules are preserved deliberately, and each has a test:
- Remote launches keep the pre-rename shim name. The relay deploys the CLI as
plain `orca`, so getTuiAgentLaunchCommand now routes remote launches through
a separate remoteLaunchCmdByPlatform rather than the local name. Local
launches use `codev` on all three platforms.
- detectCmdAliases gained the new names instead of swapping them, so a session
started by an older build is still detected.
Not renamed, same reasoning as the previous commit: the deb/rpm packageName and
artifactName, the AppImage/mac/windows artifact names, `productName`, and the
`com.stablyai.orca` bundle id are package and app identity -- tied to code
signing, TCC grants, update channels, and the userData directory -- so renaming
them would orphan user data rather than rename a command. Linux `executableName`
is the command a person types, so that one did change.
Verified: typecheck (node + cli + web), repo format:check, and the web suite all
pass, and the IDE suite is at exact parity with the pre-rename baseline -- 24
failing files / 65 failing tests before and after, with an identical failure
set, all pre-existing (they need a built Electron runtime). The one web failure
(sign-in-layout) is the same pre-existing one from in-flight credentials work.
Not verified here: Linux deb/rpm packaging output, which needs an electron-builder
run this environment cannot do. The packaging config's own contract test passes.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
The rename tables now show which name each reader writes and which legacy name it still accepts, plus the two compatibility rules that constrain further work (the remote shim keeps the pre-rename name; `source: 'orca.yaml'` is a wire discriminant). Also states why package and app identity — productName, the Electron name, the bundle id, deb/rpm package and artifact names — is staying Orca: it is tied to code signing, TCC grants, update channels, and the userData directory, so renaming it orphans user data rather than renaming a command. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
…rivation
The assertion still expected `initialMode={mode === "sign-up"` inline, but the
waitlist-invite work moved that behind `startInSignUp`, which is true for
`?mode=sign-up` *or* a valid invite grant. The page has been correct since
e8c993d; only the test was stale, so `verify` was already red on main and this
PR merely surfaced it.
Assert both halves — the derivation and the prop — so the original intent (the
mode query param selects sign-up) stays guarded without re-coupling the test to
an inline expression.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Makes the IDE first-party code in this monorepo, then renames the identifiers a
person actually types or sees on disk.
The diff is enormous (~11.3k files) but almost all of it is one mechanical move:
the IDE source landing in
packages/ide. Review the last three commits; skimthe first.
Why
The IDE was vendored. Every build cloned
stablyai/orcaat a pinned tag andre-applied a 13k-line
codev-web.patchover it. That made CoDev's own IDE workinvisible in the tree, unreviewable in diffs, and reconcilable only as patch
hunks — and it left "Orca" as the name on config files, the CLI, and the pairing
scheme.
The commits
f16a5720packages/ideas first-party codeca5de8d83296835b438379791. The fork
Mechanical and byte-exact: the patched upstream tree at the pinned commit
02cea8abecamepackages/ideverbatim, so no CoDev edit was rewritten orredone. Rebuilding the web client from the new location reproduces the
committed bundle with identical content hashes and zero diff under
apps/web/public/orca— proof this changed no behavior.Both artifacts now build from that one directory, which keeps them on the same
version by construction:
pnpm orca:web(browser client) andbuild-orca-serve.sh(the backend — the Containerfile nowCOPYs the source asbuild context instead of cloning it).
packages/idestays a self-contained project rather than joining the workspace:it declares its own
pnpm-workspace.yaml(packages: []), lockfile,patchedDependencies, and an Electron native-rebuildpostinstall— exactly thecarve-out upstream already made for itself. The root workspace excludes it and
.prettierignoreskips it, so the recursivebuild/lint/typecheck/testscripts and Prettier don't sweep ~11k IDE sources into every CI run; it formats
with its own oxfmt and lints with its own oxlint.
Trimmed at fork time, since no build consumes them and electron-builder already
excluded three of them from the packaged app:
mobile/(a separate workspace),docs/,examples/,Casks/,.github/.Accepted trade-off: upstream Orca fixes are no longer a version bump. Taking
one now means reading their diff and porting it by hand into a diverged tree.
2–3. The rename
~/.orca~/.codev~/.orcakeeps being used<repo>/.orca/<repo>/.codev/orca.yamlcodev.yamlorca-plugin.jsoncodev-plugin.jsonorca://paircodev://pairapps/weborca/orca-idecodevEvery reader accepts both names, so nothing has to migrate and no deploy has
to be coordinated. Only what is written and displayed uses the CoDev name.
src/shared/codev-identifiers.tsholds both sets.Neither name was centralized before — 15 call sites each hand-built
join(home, '.orca', …)orjoin(repoPath, 'orca.yaml'), and ten remote hookinstallers each had their own copy of the path — so this also collapses them
onto shared helpers.
~/.orcais not moved when it already exists: agent hooks record absolutescript paths in Claude/Codex config, so relocating the directory would break
hooks installed before this change. Fresh installs get
~/.codev.What reviewers should look at
Three things are deliberately not renamed, each with a test pinning it:
source: 'orca.yaml'inorca-runtime.tsis a host→client wirediscriminant. Per
AGENTS.mdremote-wire-compatibility, mixed client/hostversions are the normal state and an older paired client would not understand
a new token. Invisible to users; the filename displayed beside it is renamed.
as plain
orca, sogetTuiAgentLaunchCommandnow routes remote launchesthrough a separate
remoteLaunchCmdByPlatform. Local launches usecodevonall three platforms.
productName, the Electronname, thecom.stablyai.orcabundle id, and the deb/rpm package and artifact names.These are tied to code signing, TCC grants, update channels, and the userData
directory, so renaming them would orphan user data rather than rename a
command. Linux
executableNameis the command a person types, so that onedid change —
orca-ideexisted only to dodge Ubuntu's GNOME Orca package, aconflict
codevdoesn't have.detectCmdAliasesgained the new names rather than swapping them, so a sessionstarted by an older build is still detected.
Verification
failing tests before and after, identical failure set, 47,213 passing. Those
24 are pre-existing — they need a built Electron runtime.
typecheck(node + cli + web), repoformat:check,lint, andpnpm install --frozen-lockfile(lockfile unchanged) all pass.packages/ideto a byte-identical bundle.Containerfile can reintroduce an upstream clone.
One unrelated fix rode along.
apps/web/components/sign-in-layout.test.tswas already failing on
main: it still expectedinitialMode={mode === "sign-up"inline, but the waitlist-invite work (e8c993dc) moved that behindstartInSignUp, which is true for?mode=sign-upor a valid invite grant.The page has been correct the whole time; only the test was stale. This PR
didn't cause it and doesn't depend on it, but
verifycan't go green withoutit, so the assertion now checks both the derivation and the prop. The full
recursive suite passes:
apps/web458,packages/contracts31,apps/hocuspocus-server8.Not verified here: Linux deb/rpm packaging output, which needs an
electron-builder run this environment cannot do. The packaging config's own
contract test passes.
Still to do
Display copy, not identifiers.
infra/aws/orca-build/brand-web.mjsstillrewrites
Orca→CoDevin the built bundle after the fact, and thenon-English locale bundles (
es/ja/ko/zh, ~600 occurrences each) areuntouched. Folding that into the source is now ordinary editing.
🤖 Generated with Claude Code