Repository navigation
feat(agents): add Gajae Code to the built-in agent registry - #15025
Yeachan-Heo wants to merge 1 commit into
Conversation
Gajae Code (gjc) is a terminal coding agent that runs on an existing Claude/Codex subscription. It launches as a plain interactive TUI in the worktree cwd, so it only needed registry wiring: detection, display name, telemetry kind, icon, and auto-pick order. The launch table moved to src/shared/tui-agent-config-table.ts because one more agent pushed tui-agent-config.ts past the 300-line ceiling; per AGENTS.md the file is split instead of baselined, and the table is re-exported from the old path so no importer changes.
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Repository UI Review profile: CHILL Plan: Pro Plus Run ID: ⛔ Files ignored due to path filters (1)
📒 Files selected for processing (20)
Included review availability: Your plan includes up to 10 reviews per rolling hour; 9 remain after this review. 📝 WalkthroughWalkthroughAdded Gajae Code as the Merge Risk: 🔵 Low · up to The PR adds Gajae Code as a built-in agent and enables prompt delivery through stdin after startup across desktop platforms. It is mergeable with explicit owner awareness, but Windows and Linux prompt-injection compatibility should be confirmed or guarded because only macOS arm64 validation is supplied. 🚥 Pre-merge checks | ✅ 3 | ❌ 2❌ Failed checks (2 warnings)
✅ Passed checks (3 passed)
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 |
|
Cross-posting verification, not a competing claim — I have the same registration open at #13952 and I'm happy to close it in favour of yours. Two fields would need to change first, and both are checkable against your own CLI. 1. $ gjc --help
USAGE
$ gjc [COMMAND]
ARGUMENTS
MESSAGES Messages to send (prefix files with @)
$ script -q out.log gjc -- hi # real pty, gjc v0.14.2
→ inline TUI renders, the prompt is processed, the composer stays live
("Type your message..."), and the session is still alive when I SIGKILL it
at 45s; on teardown it prints "Resume this session with: gjc --resume …"Six of the seven open/closed gjc registrations landed on 2. /** Normalize the sole `gjc resume` alias into the value-less launch intent. */
export function normalizeResumeAlias(argv: readonly string[]): string[] {
return argv.length === 1 && argv[0] === "resume" ? ["--resume"] : [...argv];
}Why this matters in practice, not just in theory. gjc's 134 MB single-file binary can block in dyld for ~60 s before $ sample <pid>
1786 Thread: Main Thread
1786 _dyld_start (in dyld) + 0
→ dyld4::RuntimeState::notifyDebuggerLoad
→ RemoteNotificationResponder::blockOnSynchronousEvent
→ mach_msg2_trapOrca's stdin-after-start delivery is gated by Everything else in yours is better than mine — the bundled 64×64 icon (mine falls back to |
What this adds
Gajae Code (
gjc) as a built-in agent: it shows up in the agent combobox, agent settings, auto-pick order, tab/status icons, and telemetry — no custom-command setup.Gajae Code is a terminal coding agent that runs on the Claude/Codex/Gemini subscription you already pay for, and it is worktree-native (
gjc --worktree), so Orca's one-worktree-per-agent model fits it exactly.Files
src/shared/tui-agent.ts'gjc'union membersrc/shared/tui-agent-config-table.tstui-agent-config.ts(see note below), plus thegjcentrysrc/shared/tui-agent-config.tsTUI_AGENT_CONFIG, so no importer changessrc/shared/tui-agent-display-names.tsGajae Codesrc/shared/tui-agent-selection.tssrc/shared/agent-kind.ts,src/shared/telemetry-events.tsgjctelemetry kind (the exhaustive-sync test requires it)src/shared/skills-cli-agent-keys.tsnull— the skills CLI has no gjc key, and it exits 1 on unknown--agentsrc/renderer/src/lib/agent-catalog.tsx+i18n/locales/*.json+config/scripts/locale-translation-policy.mjsNEVER_TRANSLATE_VALUESsrc/renderer/src/lib/agent-status.tsICONABLE_AGENT_TYPESsrc/shared/agent-icons/gjc.png+agent-favicon-assets.ts+mobile/.../mobile-agent-icon-assets.tssrc/shared/gjc-agent-registration.test.tsREADME.mdPrompt injection is
stdin-after-starton purpose.gjc -p <prompt>is its non-interactive print mode (processes and exits), and it exposes no--prefill-style flag or prefill env var, so argv/flag injection would kill the hosted session. No permission-bypass flag is set:gjcdeliberately has none — its approval gates for shell and destructive edits stay in force. That means the global Yolo/Manual switch has nothing to write for it, which matches the other flagless agents.The icon is our own artwork (Gajae Code's mascot from the project's MIT-licensed repo), downscaled to 64×64 to match the existing PNGs, so there is no third-party mark to license-check.
About the file split
Adding one agent pushed
src/shared/tui-agent-config.tsfrom 297 to 303 counted lines, over themax-lines: 300ceiling forsrc/shared/**.config/max-lines-baseline.txtsays explicitly "only SHRINK. Do NOT add entries to get CI green — split the oversized file instead", so the table moved to its own module (tui-agent-config-table.ts, 300 lines incl. the new entry) with the types and helpers left in place and the table re-exported. The move is verbatim —git diff -Mshows it as a rename plus the new entry. Happy to drop the split into a separate PR if you'd rather land it first.QA evidence
Typechecks (all three projects):
The exhaustive maps caught two real omissions during this work (
agent-status.tsICONABLE_AGENT_TYPES, and theagent-kind↔AGENT_KIND_VALUESsync test), both fixed.Tests — new registration suite plus every existing agent-registry suite:
Lint / gates touched by this change:
The agent itself:
gjcv0.13.3 installed from npm (@gajae-code/coding-agent), launches its TUI on baregjcin a worktree cwd.Platforms: tested on macOS (arm64). Not tested: Windows, Linux, or the mobile app build — the mobile change is one
require()line in the existing icon map.No new UI was designed, so there is no new screen to record: the entry renders through the existing catalog/combobox rows. Say the word if you still want a screen recording of the picker with the row present and I'll attach one.
Notes