mirror of
https://github.com/hanzoai/dev.git
synced 2026-10-25 03:32:32 +00:00
chore(rebrand): rename user-facing Coder → Code; update links to new repo
- Update TUI titles, labels, messages - Update onboarding copy and links - Update MCP titles and human-output banner - Update README branding and URLs - postinstall: switch release URL to just-every/code; offer optional 'code' alias without collisions - package.json repository URL updated Note: CLI command remains 'coder' to avoid VS Code collision; optional alias offered interactively.
This commit is contained in:
@@ -1,17 +1,17 @@
|
||||
# JustEvery_ Coder
|
||||
# JustEvery_ Code
|
||||
|
||||
 
|
||||
|
||||
<p align="center">
|
||||
<img src="docs/logo.png" alt="Coder Logo" width="400">
|
||||
<img src="docs/logo.png" alt="Code Logo" width="400">
|
||||
</p>
|
||||
|
||||
 
|
||||
|
||||
**Coder** is a fast, local coding agent for your terminal. It's a community-driven fork of `openai/codex` focused on real developer ergonomics: Browser integration, multi-agents, theming, and reasoning control - all while staying compatible with upstream.
|
||||
**Code** is a fast, local coding agent for your terminal. It's a community-driven fork of `openai/codex` focused on real developer ergonomics: Browser integration, multi-agents, theming, and reasoning control — all while staying compatible with upstream.
|
||||
|
||||
 
|
||||
## Why Coder
|
||||
## Why Code
|
||||
|
||||
- 🌐 **Browser Integration** - CDP support, headless browsing, screenshots
|
||||
- 🤖 **Multi-Agent Commands** - /plan, /solve, /code with agent panels
|
||||
@@ -24,7 +24,7 @@
|
||||
 
|
||||
## Quickstart
|
||||
|
||||
### Install Coder
|
||||
### Install Code
|
||||
|
||||
```bash
|
||||
npm install -g @just-every/coder
|
||||
@@ -40,7 +40,7 @@ coder
|
||||
|
||||
### Install Claude & Gemini (optional)
|
||||
|
||||
Coder supports orchestrating other AI CLI tools. Install these and config to use alongside coder.
|
||||
Code supports orchestrating other AI CLI tools. Install these and config to use alongside coder.
|
||||
|
||||
```bash
|
||||
|
||||
@@ -108,7 +108,7 @@ Options:
|
||||
 
|
||||
## Memory & project docs
|
||||
|
||||
Coder can remember context across sessions:
|
||||
Code can remember context across sessions:
|
||||
|
||||
1. **Create an `AGENTS.md` or `CLAUDE.md` file** in your project root:
|
||||
```markdown
|
||||
@@ -124,7 +124,7 @@ This is a React TypeScript application with:
|
||||
- `/server/` - Backend services
|
||||
```
|
||||
|
||||
2. **Session memory**: Coder maintains conversation history
|
||||
2. **Session memory**: Code maintains conversation history
|
||||
3. **Codebase analysis**: Automatically understands project structure
|
||||
|
||||
 
|
||||
@@ -146,7 +146,7 @@ coder --config output_format=json "list all TODO comments"
|
||||
 
|
||||
## Model Context Protocol (MCP)
|
||||
|
||||
Coder supports MCP for extended capabilities:
|
||||
Code supports MCP for extended capabilities:
|
||||
|
||||
- **File operations**: Advanced file system access
|
||||
- **Database connections**: Query and modify databases
|
||||
@@ -220,8 +220,8 @@ We welcome contributions! This fork maintains compatibility with upstream while
|
||||
|
||||
```bash
|
||||
# Clone and setup
|
||||
git clone https://github.com/just-every/coder.git
|
||||
cd coder
|
||||
git clone https://github.com/just-every/code.git
|
||||
cd code
|
||||
npm install
|
||||
|
||||
# Build (use fast build for development)
|
||||
@@ -246,10 +246,10 @@ npm install
|
||||
|
||||
### License & attribution
|
||||
- This project is a community fork of `openai/codex` under **Apache-2.0**. We preserve upstream LICENSE and NOTICE files.
|
||||
- **Coder** is **not** affiliated with, sponsored by, or endorsed by OpenAI.
|
||||
- **Code** is **not** affiliated with, sponsored by, or endorsed by OpenAI.
|
||||
|
||||
### Your responsibilities
|
||||
Using OpenAI, Anthropic or Google services through Coder means you agree to **their Terms and policies**. In particular:
|
||||
Using OpenAI, Anthropic or Google services through Code means you agree to **their Terms and policies**. In particular:
|
||||
- **Don't** programmatically scrape/extract content outside intended flows.
|
||||
- **Don't** bypass or interfere with rate limits, quotas, or safety mitigations.
|
||||
- Use your **own** account; don't share or rotate accounts to evade limits.
|
||||
@@ -260,7 +260,7 @@ Using OpenAI, Anthropic or Google services through Coder means you agree to **th
|
||||
- Inputs/outputs you send to AI providers are handled under their Terms and Privacy Policy; consult those documents (and any org-level data-sharing settings).
|
||||
|
||||
### Subject to change
|
||||
AI providers can change eligibility, limits, models, or authentication flows. Coder supports **both** ChatGPT sign-in and API-key modes so you can pick what fits (local/hobby vs CI/automation).
|
||||
AI providers can change eligibility, limits, models, or authentication flows. Code supports **both** ChatGPT sign-in and API-key modes so you can pick what fits (local/hobby vs CI/automation).
|
||||
|
||||
 
|
||||
## License
|
||||
@@ -271,4 +271,4 @@ This project is a community fork of the original Codex CLI. We maintain compatib
|
||||
|
||||
 
|
||||
---
|
||||
**Need help?** Open an issue on [GitHub](https://github.com/just-every/coder/issues) or check our documentation.
|
||||
**Need help?** Open an issue on [GitHub](https://github.com/just-every/code/issues) or check our documentation.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env node
|
||||
// Unified entry point for the Coder CLI (fork of OpenAI Codex).
|
||||
// Unified entry point for the Code CLI (fork of OpenAI Codex).
|
||||
|
||||
import path from "path";
|
||||
import { fileURLToPath } from "url";
|
||||
@@ -142,4 +142,3 @@ if (childResult.type === "signal") {
|
||||
} else {
|
||||
process.exit(childResult.exitCode);
|
||||
}
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/just-every/coder.git"
|
||||
"url": "git+https://github.com/just-every/code.git"
|
||||
},
|
||||
"publishConfig": {
|
||||
"access": "public"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
import { existsSync, mkdirSync, createWriteStream, chmodSync, readFileSync } from 'fs';
|
||||
import { existsSync, mkdirSync, createWriteStream, chmodSync, readFileSync, readSync, writeFileSync } from 'fs';
|
||||
import { join, dirname } from 'path';
|
||||
import { fileURLToPath } from 'url';
|
||||
import { get } from 'https';
|
||||
@@ -94,7 +94,7 @@ async function main() {
|
||||
continue;
|
||||
}
|
||||
|
||||
const downloadUrl = `https://github.com/just-every/coder/releases/download/v${version}/${binaryName}`;
|
||||
const downloadUrl = `https://github.com/just-every/code/releases/download/v${version}/${binaryName}`;
|
||||
|
||||
console.log(`Downloading ${binaryName}...`);
|
||||
try {
|
||||
@@ -126,9 +126,89 @@ async function main() {
|
||||
} else {
|
||||
console.warn('⚠ Main coder binary not found. You may need to build from source.');
|
||||
}
|
||||
|
||||
// Optional: offer a 'code' alias if safe. Do not override existing 'code'.
|
||||
try {
|
||||
const isTTY = process.stdout && process.stdout.isTTY;
|
||||
// Best-effort detection of global install
|
||||
const isGlobal = process.env.npm_config_global === 'true' || (() => {
|
||||
try {
|
||||
const p = execSync('npm bin -g', { stdio: ['ignore', 'pipe', 'ignore'] }).toString().trim();
|
||||
return p.length > 0;
|
||||
} catch { return false; }
|
||||
})();
|
||||
|
||||
// Resolve global bin dir
|
||||
let globalBin = '';
|
||||
try {
|
||||
globalBin = execSync('npm bin -g', { stdio: ['ignore', 'pipe', 'ignore'] }).toString().trim();
|
||||
} catch {}
|
||||
|
||||
// Helper: does a command exist on PATH
|
||||
const commandExists = (cmd) => {
|
||||
try {
|
||||
if (platform() === 'win32') {
|
||||
execSync(`where ${cmd}`, { stdio: 'ignore' });
|
||||
} else {
|
||||
execSync(`command -v ${cmd}`, { stdio: 'ignore' });
|
||||
}
|
||||
return true;
|
||||
} catch { return false; }
|
||||
};
|
||||
|
||||
const codeOnPath = commandExists('code');
|
||||
|
||||
if (isGlobal && isTTY) {
|
||||
if (codeOnPath) {
|
||||
console.log('⚠ Detected an existing `code` command on your PATH (e.g., VS Code).');
|
||||
console.log(' We will keep the CLI command name as `coder` to avoid collisions.');
|
||||
// Optionally, offer to create a shell alias suggestion
|
||||
console.log(' Tip: add `alias code=coder` to your shell rc if you prefer.');
|
||||
} else if (globalBin) {
|
||||
// Offer to create a non-conflicting `code` shim that invokes coder.js
|
||||
const prompt = (msg) => {
|
||||
process.stdout.write(msg);
|
||||
try {
|
||||
const buf = Buffer.alloc(1024);
|
||||
const bytes = readSync(0, buf, 0, 1024, null);
|
||||
const ans = buf.slice(0, bytes).toString('utf8').trim().toLowerCase();
|
||||
return ans;
|
||||
} catch { return 'n'; }
|
||||
};
|
||||
const answer = prompt('No existing `code` found. Create a `code` alias for this tool? [y/N] ');
|
||||
if (answer === 'y' || answer === 'yes') {
|
||||
try {
|
||||
const shimPath = join(globalBin, platform() === 'win32' ? 'code.cmd' : 'code');
|
||||
if (platform() === 'win32') {
|
||||
// cmd shim that forwards to existing `coder`
|
||||
const content = `@echo off\r\n"%~dp0coder" %*\r\n`;
|
||||
writeFileSync(shimPath, content);
|
||||
} else {
|
||||
const content = `#!/bin/sh\nexec "$(dirname \"$0\")/coder" "$@"\n`;
|
||||
writeFileSync(shimPath, content);
|
||||
chmodSync(shimPath, 0o755);
|
||||
}
|
||||
console.log(`✓ Created \`${shimPath}\` that forwards to \`coder\``);
|
||||
} catch (e) {
|
||||
console.log(`⚠ Failed to create 'code' alias automatically: ${e.message}`);
|
||||
console.log(' You can add `alias code=coder` to your shell instead.');
|
||||
}
|
||||
} else {
|
||||
console.log('Skipping `code` alias creation. Use `coder` to run the CLI.');
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// Non-interactive or local install; just print guidance
|
||||
if (!codeOnPath) {
|
||||
console.log('Note: You can add an alias `code=coder` in your shell if desired.');
|
||||
}
|
||||
}
|
||||
} catch {
|
||||
// Non-fatal; continue silently
|
||||
}
|
||||
}
|
||||
|
||||
main().catch(error => {
|
||||
console.error('Installation failed:', error);
|
||||
process.exit(1);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
In this environment, you are running as `coder` and your name is Coder. Coder is a fork Codex CLI, an open source project led by OpenAI.
|
||||
In this environment, you are running as `coder` and your name is Code. Code is a fork Codex CLI, an open source project led by OpenAI.
|
||||
|
||||
Coder is a fast, community-driven fork focused on key developer ergonomics: Browser control, multi-agent flows, live theming, and on-the-fly reasoning control - all while staying compatible with upstream.
|
||||
Code is a fast, community-driven fork focused on key developer ergonomics: Browser control, multi-agent flows, live theming, and on-the-fly reasoning control - all while staying compatible with upstream.
|
||||
|
||||
# Changes
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ use tokio::sync::mpsc;
|
||||
/// with this content.
|
||||
const BASE_INSTRUCTIONS: &str = include_str!("../prompt.md");
|
||||
|
||||
/// Additional prompt for Coder. Can not edit Codex instructions.
|
||||
/// Additional prompt for Code. Can not edit Codex instructions.
|
||||
const ADDITIONAL_INSTRUCTIONS: &str = include_str!("../prompt_coder.md");
|
||||
|
||||
/// wraps environment context message in a tag for the model to parse more easily.
|
||||
|
||||
@@ -140,7 +140,7 @@ impl EventProcessor for EventProcessorWithHumanOutput {
|
||||
const VERSION: &str = env!("CARGO_PKG_VERSION");
|
||||
ts_println!(
|
||||
self,
|
||||
"Coder v{}\n--------",
|
||||
"Code v{}\n--------",
|
||||
VERSION
|
||||
);
|
||||
|
||||
|
||||
@@ -63,7 +63,7 @@ async fn main() -> Result<()> {
|
||||
client_info: Implementation {
|
||||
name: "coder-mcp-client".to_owned(),
|
||||
version: env!("CARGO_PKG_VERSION").to_owned(),
|
||||
title: Some("Coder".to_string()),
|
||||
title: Some("Code".to_string()),
|
||||
},
|
||||
protocol_version: MCP_SCHEMA_VERSION.to_owned(),
|
||||
};
|
||||
|
||||
@@ -241,7 +241,7 @@ impl MessageProcessor {
|
||||
server_info: mcp_types::Implementation {
|
||||
name: "coder-mcp-server".to_string(),
|
||||
version: env!("CARGO_PKG_VERSION").to_string(),
|
||||
title: Some("Coder".to_string()),
|
||||
title: Some("Code".to_string()),
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
@@ -595,7 +595,7 @@ impl App<'_> {
|
||||
)),
|
||||
crossterm::terminal::Clear(crossterm::terminal::ClearType::All),
|
||||
crossterm::cursor::MoveTo(0, 0),
|
||||
crossterm::terminal::SetTitle("Coder"),
|
||||
crossterm::terminal::SetTitle("Code"),
|
||||
crossterm::terminal::EnableLineWrap
|
||||
);
|
||||
|
||||
@@ -622,7 +622,7 @@ impl App<'_> {
|
||||
)),
|
||||
crossterm::terminal::Clear(crossterm::terminal::ClearType::All),
|
||||
crossterm::cursor::MoveTo(0, 0),
|
||||
crossterm::terminal::SetTitle("Coder"),
|
||||
crossterm::terminal::SetTitle("Code"),
|
||||
crossterm::terminal::EnableLineWrap
|
||||
);
|
||||
|
||||
|
||||
@@ -3411,7 +3411,7 @@ impl ChatWidget<'_> {
|
||||
|
||||
// Build status line spans
|
||||
let mut status_spans = vec![
|
||||
Span::styled("Coder", Style::default().add_modifier(Modifier::BOLD)),
|
||||
Span::styled("Code", Style::default().add_modifier(Modifier::BOLD)),
|
||||
Span::raw(" • "),
|
||||
Span::styled("Model: ", Style::default().dim()),
|
||||
Span::styled(
|
||||
|
||||
@@ -360,7 +360,7 @@ impl HistoryCell for AnimatedWelcomeCell {
|
||||
// For plain lines, just show a simple welcome message
|
||||
vec![
|
||||
Line::from(""),
|
||||
Line::from("Welcome to Coder"),
|
||||
Line::from("Welcome to Code"),
|
||||
Line::from(""),
|
||||
]
|
||||
}
|
||||
|
||||
@@ -227,7 +227,7 @@ pub async fn run_main(
|
||||
|
||||
eprintln!(
|
||||
"{} {current_version} -> {latest_version}.",
|
||||
"Coder update available!".blue()
|
||||
"Code update available!".blue()
|
||||
);
|
||||
|
||||
if managed_by_npm {
|
||||
@@ -241,7 +241,7 @@ pub async fn run_main(
|
||||
} else {
|
||||
eprintln!(
|
||||
"See {} for the latest releases and installation options.",
|
||||
"https://github.com/just-every/coder/releases/latest"
|
||||
"https://github.com/just-every/code/releases/latest"
|
||||
.cyan()
|
||||
.on_black()
|
||||
);
|
||||
|
||||
@@ -225,17 +225,17 @@ impl AuthModeWidget {
|
||||
Line::from(""),
|
||||
Line::from("> Before you start:"),
|
||||
Line::from(""),
|
||||
Line::from(" Decide how much autonomy you want to grant Coder"),
|
||||
Line::from(" Decide how much autonomy you want to grant Code"),
|
||||
Line::from(vec![
|
||||
Span::raw(" For more details see the "),
|
||||
Span::styled(
|
||||
"\u{1b}]8;;https://github.com/just-every/coder\u{7}Coder docs\u{1b}]8;;\u{7}",
|
||||
"\u{1b}]8;;https://github.com/just-every/code\u{7}Code docs\u{1b}]8;;\u{7}",
|
||||
Style::default().add_modifier(Modifier::UNDERLINED),
|
||||
),
|
||||
])
|
||||
.style(Style::default().add_modifier(Modifier::DIM)),
|
||||
Line::from(""),
|
||||
Line::from(" Coder can make mistakes")
|
||||
Line::from(" Code can make mistakes")
|
||||
.style(Style::default().fg(text_bright())),
|
||||
Line::from(" Review the code it writes and commands it runs")
|
||||
.style(Style::default().add_modifier(Modifier::DIM)),
|
||||
@@ -281,7 +281,7 @@ impl AuthModeWidget {
|
||||
fn render_env_var_missing(&self, area: Rect, buf: &mut Buffer) {
|
||||
let lines = vec![
|
||||
Line::from(
|
||||
" To use Coder with the OpenAI API, set OPENAI_API_KEY in your environment",
|
||||
" To use Code with the OpenAI API, set OPENAI_API_KEY in your environment",
|
||||
)
|
||||
.style(Style::default().fg(info())),
|
||||
Line::from(""),
|
||||
|
||||
@@ -83,7 +83,7 @@ pub fn init(config: &Config) -> Result<(Tui, TerminalInfo)> {
|
||||
)),
|
||||
Clear(ClearType::All),
|
||||
MoveTo(0, 0),
|
||||
crossterm::terminal::SetTitle("Coder"),
|
||||
crossterm::terminal::SetTitle("Code"),
|
||||
crossterm::terminal::EnableLineWrap
|
||||
)?;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user