mirror of
https://github.com/hanzoai/dev.git
synced 2026-10-17 15:34:54 +00:00
feat: the product says its own name, and can be driven from outside
Branding. The reported "OpenAI Codex" was not a banner — the TUI banner has said "Welcome to Code" all along. It was the model describing itself. Every request carries BASE_INSTRUCTIONS, and `zen5-coder` matches none of the OpenAI slug prefixes in find_family_for_model, so it lands on derive_default_model_family -> core/prompt.md, whose first line read "You are a coding agent running in the Codex CLI ... led by OpenAI". The agent was told who it was, and it answered honestly. Fixed the harness identity in all eight prompts (keeping each model's own identity: "based on GPT-5" stays, the harness around it becomes Hanzo Dev), the per-turn header, approval and model pickers, the login success page, MCP tool titles and approval prompts on both client and server sides, seatbelt policy header, cloud copy, two stale User-Agents, and the CLI hints that named the wrong binary. Golden JSON fixtures moved with the code they assert. Deliberately NOT changed, because they are wire and not text: `OPENAI_*` and `CODEX_*` env vars, the `codex`/`codex-reply` MCP tool names and the `code-mcp-server` server name (hosts key allowlists off them), `codex.*` OTEL event names, the `openai` provider id, model slugs, `~/.code` on disk, and the `https://api.openai.com/auth` JWT claim namespace. Control. `cli/src/proto.rs` was a complete bidirectional control plane — Submission JSON lines in, Event JSON lines out, the whole `Op` set including QueueUserInput — exported from lib.rs with no subcommand to reach it. Wired it up as `dev proto`. That is the difference between interrupting a turn and steering one: `app-server`'s sendUserMessage hardcodes Op::UserInput, which calls sess.abort() and restarts the turn. $ printf '%s\n' '{"id":"s1","op":{"type":"interrupt"}}' \ '{"id":"s2","op":{"type":"shutdown"}}' | dev proto {"id":"","event_seq":0,"msg":{"type":"session_configured", "session_id":"4d82071e-...","model":"zen5-coder",...}} {"id":"s2","event_seq":1,"msg":{"type":"shutdown_complete"}} Also: upstream-merge.yml polled openai/codex every 30 minutes. That is the wrong upstream (codex-rs reaches us through just-every) and a cron cannot work against a disjoint history anyway — it needs a hand-supplied merge base. Retargeted to just-every/code and made it manual, pointing at the procedure in LLM.md. Purged @just-every/code from the release and recovery pipelines, which would otherwise have published our binaries under their scope. Co-authored-by: Hanzo Dev <[email protected]>
This commit is contained in:
@@ -347,8 +347,8 @@ jobs:
|
||||
set -euo pipefail
|
||||
# Use bot identity if available
|
||||
if [ -n "${{ secrets.CODE_GH_PAT }}" ]; then
|
||||
git config user.name "just-every-code"
|
||||
git config user.email "[email protected]"
|
||||
git config user.name "hanzo-dev"
|
||||
git config user.email "[email protected]"
|
||||
else
|
||||
git config user.name "github-actions[bot]"
|
||||
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
|
||||
|
||||
@@ -1,15 +1,17 @@
|
||||
name: Upstream Merge
|
||||
|
||||
on:
|
||||
# Poll upstream regularly; also allow manual and external triggers
|
||||
schedule:
|
||||
- cron: '*/30 * * * *'
|
||||
# Manual only. Our history is just-every/code's with author emails rewritten,
|
||||
# so the two graphs share no merge base and a plain `git merge` conflicts on
|
||||
# every file. A sync needs a merge base supplied by hand — the procedure and
|
||||
# the current base SHA live in LLM.md, "Upstream lineage". A cron here would
|
||||
# either no-op forever or open an unmergeable PR every 30 minutes.
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
upstream_repo:
|
||||
description: 'Upstream repo (owner/name)'
|
||||
required: false
|
||||
default: 'openai/codex'
|
||||
default: 'just-every/code'
|
||||
upstream_branch:
|
||||
description: 'Upstream branch'
|
||||
required: false
|
||||
@@ -28,7 +30,7 @@ permissions:
|
||||
pull-requests: write
|
||||
|
||||
env:
|
||||
UPSTREAM_REPO: ${{ inputs.upstream_repo || 'openai/codex' }}
|
||||
UPSTREAM_REPO: ${{ inputs.upstream_repo || 'just-every/code' }}
|
||||
UPSTREAM_BRANCH: ${{ inputs.upstream_branch || 'main' }}
|
||||
MERGE_BRANCH: upstream-merge
|
||||
# Controls whether we auto-close an existing upstream-merge PR when the run
|
||||
@@ -197,8 +199,8 @@ jobs:
|
||||
|
||||
- name: Set git identity for commits
|
||||
run: |
|
||||
git config user.name "just-every-code"
|
||||
git config user.email "[email protected]"
|
||||
git config user.name "hanzo-dev"
|
||||
git config user.email "[email protected]"
|
||||
git config --global --add safe.directory "$GITHUB_WORKSPACE"
|
||||
|
||||
- name: "Quick no-op: ancestor check (default and merge branch)"
|
||||
@@ -622,7 +624,7 @@ jobs:
|
||||
OPENAI_API_BASE="http://127.0.0.1:5055/v1" \
|
||||
GH_TOKEN="$GH_TOKEN" \
|
||||
npm_config_cache="$SAFE_HOME/.npm" \
|
||||
npx -y @just-every/code@latest \
|
||||
npx -y @hanzo/dev@latest \
|
||||
auto \
|
||||
--goal-file .github/auto/AUTO_GOAL.md \
|
||||
--max-attempts 3 \
|
||||
@@ -739,7 +741,7 @@ jobs:
|
||||
GH_TOKEN="$GH_TOKEN" \
|
||||
RUSTC_WRAPPER="sccache" SCCACHE_GHA_ENABLED="true" SCCACHE_IDLE_TIMEOUT="1800" SCCACHE_CACHE_SIZE="5G" \
|
||||
npm_config_cache="$SAFE_HOME/.npm" \
|
||||
npx -y @just-every/code@latest \
|
||||
npx -y @hanzo/dev@latest \
|
||||
exec \
|
||||
-s workspace-write \
|
||||
-c sandbox_workspace_write.allow_git_writes=true \
|
||||
|
||||
+13
-1
@@ -39,6 +39,8 @@ use tokio::runtime::{Builder as TokioRuntimeBuilder, Handle as TokioHandle};
|
||||
mod mcp_cmd;
|
||||
|
||||
use crate::mcp_cmd::McpCli;
|
||||
use code_cli::proto;
|
||||
use code_cli::proto::ProtoCli;
|
||||
|
||||
const CLI_COMMAND_NAME: &str = "dev";
|
||||
pub(crate) const CODEX_SECURE_MODE_ENV_VAR: &str = "CODEX_SECURE_MODE";
|
||||
@@ -122,6 +124,12 @@ enum Subcommand {
|
||||
/// [experimental] Run the app server.
|
||||
AppServer,
|
||||
|
||||
/// [experimental] Speak the agent protocol on stdin/stdout: Submission
|
||||
/// JSON lines in, Event JSON lines out. Unlike `app-server` this exposes
|
||||
/// the whole `Op` set, so a controller can steer a turn in flight
|
||||
/// (`queue_user_input`) rather than only interrupt it.
|
||||
Proto(ProtoCli),
|
||||
|
||||
/// Generate shell completion scripts.
|
||||
Completion(CompletionCommand),
|
||||
|
||||
@@ -495,6 +503,10 @@ async fn cli_main(code_linux_sandbox_exe: Option<PathBuf>) -> anyhow::Result<()>
|
||||
Some(Subcommand::AppServer) => {
|
||||
code_app_server::run_main(code_linux_sandbox_exe, root_config_overrides).await?;
|
||||
}
|
||||
Some(Subcommand::Proto(mut proto_cli)) => {
|
||||
prepend_config_flags(&mut proto_cli.config_overrides, root_config_overrides.clone());
|
||||
proto::run_main(proto_cli).await?;
|
||||
}
|
||||
Some(Subcommand::Resume(ResumeCommand {
|
||||
session_id,
|
||||
last,
|
||||
@@ -1260,7 +1272,7 @@ async fn preview_main(args: PreviewArgs) -> anyhow::Result<()> {
|
||||
_ => bail!(format!("Unsupported platform: {}/{}", os, arch)),
|
||||
};
|
||||
|
||||
let client = reqwest::Client::builder().user_agent("codex-preview/1").build()?;
|
||||
let client = reqwest::Client::builder().user_agent("hanzo-dev-preview/1").build()?;
|
||||
|
||||
// Resolve slug/tag from id
|
||||
let id = args.slug.trim().to_string();
|
||||
|
||||
@@ -341,7 +341,7 @@ fn run_list(config_overrides: &CliConfigOverrides, list_args: ListArgs) -> Resul
|
||||
}
|
||||
|
||||
if entries.is_empty() {
|
||||
println!("No MCP servers configured yet. Try `codex mcp add my-tool -- my-command`.");
|
||||
println!("No MCP servers configured yet. Try `dev mcp add my-tool -- my-command`.");
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
@@ -567,7 +567,7 @@ fn run_get(config_overrides: &CliConfigOverrides, get_args: GetArgs) -> Result<(
|
||||
if let Some(timeout) = server.tool_timeout_sec {
|
||||
println!(" tool_timeout_sec: {:.3}", timeout.as_secs_f64());
|
||||
}
|
||||
println!(" remove: codex mcp remove {}", get_args.name);
|
||||
println!(" remove: dev mcp remove {}", get_args.name);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
@@ -233,7 +233,7 @@ pub async fn run_main(cli: Cli, _code_linux_sandbox_exe: Option<PathBuf>) -> any
|
||||
}
|
||||
_ => {
|
||||
eprintln!(
|
||||
"Not signed in. Please run 'dev login' to sign in with ChatGPT, then re-run 'codex cloud'."
|
||||
"Not signed in. Please run 'dev login' to sign in with ChatGPT, then re-run 'dev cloud'."
|
||||
);
|
||||
std::process::exit(1);
|
||||
}
|
||||
@@ -241,7 +241,7 @@ pub async fn run_main(cli: Cli, _code_linux_sandbox_exe: Option<PathBuf>) -> any
|
||||
}
|
||||
None => {
|
||||
eprintln!(
|
||||
"Not signed in. Please run 'dev login' to sign in with ChatGPT, then re-run 'codex cloud'."
|
||||
"Not signed in. Please run 'dev login' to sign in with ChatGPT, then re-run 'dev cloud'."
|
||||
);
|
||||
std::process::exit(1);
|
||||
}
|
||||
|
||||
@@ -24,21 +24,21 @@ pub fn builtin_approval_presets() -> Vec<ApprovalPreset> {
|
||||
ApprovalPreset {
|
||||
id: "read-only",
|
||||
label: "Read Only",
|
||||
description: "Codex can read files and answer questions. Codex requires approval to make edits, run commands, or access network",
|
||||
description: "Hanzo Dev can read files and answer questions. It requires approval to make edits, run commands, or access network",
|
||||
approval: AskForApproval::OnRequest,
|
||||
sandbox: SandboxPolicy::ReadOnly,
|
||||
},
|
||||
ApprovalPreset {
|
||||
id: "auto",
|
||||
label: "Auto",
|
||||
description: "Codex can read files, make edits, and run commands in the workspace. Codex requires approval to work outside the workspace or access network",
|
||||
description: "Hanzo Dev can read files, make edits, and run commands in the workspace. It requires approval to work outside the workspace or access network",
|
||||
approval: AskForApproval::OnRequest,
|
||||
sandbox: SandboxPolicy::new_workspace_write_policy(),
|
||||
},
|
||||
ApprovalPreset {
|
||||
id: "full-access",
|
||||
label: "Full Access",
|
||||
description: "Codex can read files, make edits, and run commands with network access, without approval. Exercise caution",
|
||||
description: "Hanzo Dev can read files, make edits, and run commands with network access, without approval. Exercise caution",
|
||||
approval: AskForApproval::Never,
|
||||
sandbox: SandboxPolicy::DangerFullAccess,
|
||||
},
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
You are Codex, based on GPT-5. You are running as a coding agent in the Codex CLI on a user's computer.
|
||||
You are a coding agent based on GPT-5, running in Hanzo Dev on a user's computer.
|
||||
|
||||
## General
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
You are Codex, based on GPT-5. You are running as a coding agent in the Codex CLI on a user's computer.
|
||||
You are a coding agent based on GPT-5, running in Hanzo Dev on a user's computer.
|
||||
|
||||
## General
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
You are GPT-5.1 running in the Codex CLI, a terminal-based coding assistant. Codex CLI is an open source project led by OpenAI. You are expected to be precise, safe, and helpful.
|
||||
You are GPT-5.1 running in Hanzo Dev, a terminal-based coding assistant. You are expected to be precise, safe, and helpful.
|
||||
|
||||
Your capabilities:
|
||||
|
||||
@@ -6,7 +6,6 @@ Your capabilities:
|
||||
- Communicate with the user by streaming thinking & responses, and by making & updating plans.
|
||||
- Emit function calls to run terminal commands and apply patches. Depending on how this specific run is configured, you can request that these function calls be escalated to the user for approval before running. More on this in the "Sandbox and approvals" section.
|
||||
|
||||
Within this context, Codex refers to the open-source agentic coding interface (not the old Codex language model built by OpenAI).
|
||||
|
||||
# How you work
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
You are GPT-5.2 running in the Codex CLI, a terminal-based coding assistant. Codex CLI is an open source project led by OpenAI. You are expected to be precise, safe, and helpful.
|
||||
You are GPT-5.2 running in Hanzo Dev, a terminal-based coding assistant. You are expected to be precise, safe, and helpful.
|
||||
|
||||
Your capabilities:
|
||||
|
||||
@@ -6,7 +6,6 @@ Your capabilities:
|
||||
- Communicate with the user by streaming thinking & responses, and by making & updating plans.
|
||||
- Emit function calls to run terminal commands and apply patches. Depending on how this specific run is configured, you can request that these function calls be escalated to the user for approval before running. More on this in the "Sandbox and approvals" section.
|
||||
|
||||
Within this context, Codex refers to the open-source agentic coding interface (not the old Codex language model built by OpenAI).
|
||||
|
||||
# How you work
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
You are Codex, based on GPT-5. You are running as a coding agent in the Codex CLI on a user's computer.
|
||||
You are a coding agent based on GPT-5, running in Hanzo Dev on a user's computer.
|
||||
|
||||
## General
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
You are a coding agent running in the Codex CLI, a terminal-based coding assistant. Codex CLI is an open source project led by OpenAI. You are expected to be precise, safe, and helpful.
|
||||
You are a coding agent running in Hanzo Dev, a terminal-based coding assistant. You are expected to be precise, safe, and helpful.
|
||||
|
||||
Your capabilities:
|
||||
|
||||
@@ -6,7 +6,6 @@ Your capabilities:
|
||||
- Communicate with the user by streaming thinking & responses, and by making & updating plans.
|
||||
- Emit function calls to run terminal commands and apply patches. Depending on how this specific run is configured, you can request that these function calls be escalated to the user for approval before running. More on this in the "Sandbox and approvals" section.
|
||||
|
||||
Within this context, Codex refers to the open-source agentic coding interface (not the old Codex language model built by OpenAI).
|
||||
|
||||
# How you work
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
In this environment, you are running as `code` and your name is Code. Code is a fork Codex CLI, an open source project led by OpenAI.
|
||||
In this environment, you are running as `dev` and your name is Hanzo Dev.
|
||||
|
||||
Code is a fast, community-driven fork focused on key developer ergonomics: Browser control, multi-agent flows, autonomous tasks, and on-the-fly reasoning control - all while staying compatible with upstream.
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
You are a coding agent running in the Codex CLI, a terminal-based coding assistant. Codex CLI is an open source project led by OpenAI. You are expected to be precise, safe, and helpful.
|
||||
You are a coding agent running in Hanzo Dev, a terminal-based coding assistant. You are expected to be precise, safe, and helpful.
|
||||
|
||||
Your capabilities:
|
||||
|
||||
@@ -6,7 +6,6 @@ Your capabilities:
|
||||
- Communicate with the user by streaming thinking & responses, and by making & updating plans.
|
||||
- Emit function calls to run terminal commands and apply patches. Depending on how this specific run is configured, you can request that these function calls be escalated to the user for approval before running. More on this in the "Sandbox and approvals" section.
|
||||
|
||||
Within this context, Codex refers to the open-source agentic coding interface (not the old Codex language model built by OpenAI).
|
||||
|
||||
# How you work
|
||||
|
||||
|
||||
@@ -311,7 +311,7 @@ impl McpConnectionManager {
|
||||
client_info: Implementation {
|
||||
name: "codex-mcp-client".to_owned(),
|
||||
version: env!("CARGO_PKG_VERSION").to_owned(),
|
||||
title: Some("Codex".into()),
|
||||
title: Some("Hanzo Dev".into()),
|
||||
// This field is used by Codex when it is an MCP
|
||||
// server: it should not be used when Codex is
|
||||
// an MCP client.
|
||||
|
||||
@@ -120,7 +120,7 @@ fn create_seatbelt_command_args(
|
||||
);
|
||||
|
||||
if std::env::var("CODEX_DEBUG_PRINT_SEATBELT").is_ok() {
|
||||
eprintln!("--- Codex Seatbelt Policy ---\n{}\n------------------------------", full_policy);
|
||||
eprintln!("--- Hanzo Dev Seatbelt Policy ---\n{}\n------------------------------", full_policy);
|
||||
}
|
||||
|
||||
let mut seatbelt_args: Vec<String> = vec!["-p".to_string(), full_policy];
|
||||
|
||||
+2
-2
@@ -27,9 +27,9 @@ rec {
|
||||
openssl
|
||||
];
|
||||
meta = with pkgs.lib; {
|
||||
description = "OpenAI Codex command‑line interface rust implementation";
|
||||
description = "Hanzo Dev — the Hanzo coding agent (Rust implementation)";
|
||||
license = licenses.asl20;
|
||||
homepage = "https://github.com/openai/codex";
|
||||
homepage = "https://github.com/hanzoai/dev";
|
||||
};
|
||||
};
|
||||
devShell = pkgs.mkShell {
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<meta name="color-scheme" content="light dark" />
|
||||
<title>Sign into Codex</title>
|
||||
<title>Sign in to Hanzo Dev</title>
|
||||
<link rel="icon" href='data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="none" viewBox="0 0 32 32"%3E%3Cpath stroke="%23000" stroke-linecap="round" stroke-width="2.484" d="M22.356 19.797H17.17M9.662 12.29l1.979 3.576a.511.511 0 0 1-.005.504l-1.974 3.409M30.758 16c0 8.15-6.607 14.758-14.758 14.758-8.15 0-14.758-6.607-14.758-14.758C1.242 7.85 7.85 1.242 16 1.242c8.15 0 14.758 6.608 14.758 14.758Z"/%3E%3C/svg%3E' type="image/svg+xml">
|
||||
<style>
|
||||
:root {
|
||||
@@ -169,7 +169,7 @@
|
||||
<div class="logo">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="none" viewBox="0 0 32 32"><path stroke="#000" stroke-linecap="round" stroke-width="2.484" d="M22.356 19.797H17.17M9.662 12.29l1.979 3.576a.511.511 0 0 1-.005.504l-1.974 3.409M30.758 16c0 8.15-6.607 14.758-14.758 14.758-8.15 0-14.758-6.607-14.758-14.758C1.242 7.85 7.85 1.242 16 1.242c8.15 0 14.758 6.608 14.758 14.758Z"></path></svg>
|
||||
</div>
|
||||
<div class="title">Signed in to Codex</div>
|
||||
<div class="title">Signed in to Hanzo Dev</div>
|
||||
</div>
|
||||
<div class="close-box" style="display: none;">
|
||||
<div class="setup-description">You may now close this page</div>
|
||||
|
||||
@@ -63,7 +63,7 @@ async fn main() -> Result<()> {
|
||||
client_info: Implementation {
|
||||
name: "codex-mcp-client".to_owned(),
|
||||
version: env!("CARGO_PKG_VERSION").to_owned(),
|
||||
title: Some("Codex".to_string()),
|
||||
title: Some("Hanzo Dev".to_string()),
|
||||
// This field is used by Codex when it is an MCP server: it should
|
||||
// not be used when Codex is an MCP client.
|
||||
user_agent: None,
|
||||
|
||||
@@ -42,7 +42,7 @@ pub async fn new_session(
|
||||
let result = CallToolResult {
|
||||
content: vec![ContentBlock::TextContent(TextContent {
|
||||
r#type: "text".to_string(),
|
||||
text: format!("Failed to start Codex session: {err}"),
|
||||
text: format!("Failed to start Hanzo Dev session: {err}"),
|
||||
annotations: None,
|
||||
})],
|
||||
is_error: Some(true),
|
||||
@@ -78,7 +78,7 @@ pub async fn prompt(
|
||||
final_output_json_schema: None,
|
||||
})
|
||||
.await
|
||||
.context("failed to submit prompt to Codex")?;
|
||||
.context("failed to submit prompt to Hanzo Dev")?;
|
||||
|
||||
let mut stop_reason = acp::StopReason::EndTurn;
|
||||
|
||||
|
||||
@@ -127,12 +127,12 @@ pub(crate) fn create_tool_for_code_tool_call_param() -> Tool {
|
||||
|
||||
Tool {
|
||||
name: "codex".to_string(),
|
||||
title: Some("Codex".to_string()),
|
||||
title: Some("Hanzo Dev".to_string()),
|
||||
input_schema: tool_input_schema,
|
||||
// TODO(mbolin): This should be defined.
|
||||
output_schema: None,
|
||||
description: Some(
|
||||
"Run a Codex session. Accepts configuration parameters matching the Codex Config struct.".to_string(),
|
||||
"Run a Hanzo Dev session. Accepts configuration parameters matching the Config struct.".to_string(),
|
||||
),
|
||||
annotations: None,
|
||||
}
|
||||
@@ -160,7 +160,7 @@ pub(crate) fn create_tool_for_acp_new_session() -> Tool {
|
||||
title: Some(acp::AGENT_METHOD_NAMES.session_new.to_string()),
|
||||
input_schema,
|
||||
output_schema: Some(output_schema),
|
||||
description: Some("Start a Codex session over ACP.".to_string()),
|
||||
description: Some("Start a Hanzo Dev session over ACP.".to_string()),
|
||||
annotations: None,
|
||||
}
|
||||
}
|
||||
@@ -182,7 +182,7 @@ pub(crate) fn create_tool_for_acp_prompt() -> Tool {
|
||||
title: Some(acp::AGENT_METHOD_NAMES.session_prompt.to_string()),
|
||||
input_schema,
|
||||
output_schema: None,
|
||||
description: Some("Send a prompt to an existing ACP Codex session.".to_string()),
|
||||
description: Some("Send a prompt to an existing ACP Hanzo Dev session.".to_string()),
|
||||
annotations: None,
|
||||
}
|
||||
}
|
||||
@@ -203,7 +203,7 @@ pub(crate) fn create_tool_for_acp_set_model() -> Tool {
|
||||
title: Some(acp::AGENT_METHOD_NAMES.session_set_model.to_string()),
|
||||
input_schema,
|
||||
output_schema: None,
|
||||
description: Some("Select a model for an existing ACP Codex session.".to_string()),
|
||||
description: Some("Select a model for an existing ACP Hanzo Dev session.".to_string()),
|
||||
annotations: None,
|
||||
}
|
||||
}
|
||||
@@ -324,11 +324,11 @@ pub(crate) fn create_tool_for_code_tool_call_reply_param() -> Tool {
|
||||
|
||||
Tool {
|
||||
name: "codex-reply".to_string(),
|
||||
title: Some("Codex Reply".to_string()),
|
||||
title: Some("Hanzo Dev Reply".to_string()),
|
||||
input_schema: tool_input_schema,
|
||||
output_schema: None,
|
||||
description: Some(
|
||||
"Continue a Codex session by providing the session id and prompt.".to_string(),
|
||||
"Continue a Hanzo Dev session by providing the session id and prompt.".to_string(),
|
||||
),
|
||||
annotations: None,
|
||||
}
|
||||
@@ -357,8 +357,8 @@ mod tests {
|
||||
let tool_json = serde_json::to_value(&tool).expect("tool serializes");
|
||||
let expected_tool_json = serde_json::json!({
|
||||
"name": "codex",
|
||||
"title": "Codex",
|
||||
"description": "Run a Codex session. Accepts configuration parameters matching the Codex Config struct.",
|
||||
"title": "Hanzo Dev",
|
||||
"description": "Run a Hanzo Dev session. Accepts configuration parameters matching the Config struct.",
|
||||
"inputSchema": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
@@ -517,7 +517,7 @@ mod tests {
|
||||
#[expect(clippy::expect_used)]
|
||||
let tool_json = serde_json::to_value(&tool).expect("tool serializes");
|
||||
let expected_tool_json = serde_json::json!({
|
||||
"description": "Continue a Codex session by providing the session id and prompt.",
|
||||
"description": "Continue a Hanzo Dev session by providing the session id and prompt.",
|
||||
"inputSchema": {
|
||||
"properties": {
|
||||
"prompt": {
|
||||
@@ -536,7 +536,7 @@ mod tests {
|
||||
"type": "object",
|
||||
},
|
||||
"name": "codex-reply",
|
||||
"title": "Codex Reply",
|
||||
"title": "Hanzo Dev Reply",
|
||||
});
|
||||
assert_eq!(expected_tool_json, tool_json);
|
||||
}
|
||||
|
||||
@@ -60,7 +60,7 @@ pub async fn run_code_tool_session(
|
||||
let result = CallToolResult {
|
||||
content: vec![ContentBlock::TextContent(TextContent {
|
||||
r#type: "text".to_string(),
|
||||
text: format!("Failed to start Codex session: {e}"),
|
||||
text: format!("Failed to start Hanzo Dev session: {e}"),
|
||||
annotations: None,
|
||||
})],
|
||||
is_error: Some(true),
|
||||
@@ -367,7 +367,7 @@ async fn run_code_tool_session_inner(
|
||||
let result = CallToolResult {
|
||||
content: vec![ContentBlock::TextContent(TextContent {
|
||||
r#type: "text".to_string(),
|
||||
text: format!("Codex runtime error: {e}"),
|
||||
text: format!("Hanzo Dev runtime error: {e}"),
|
||||
annotations: None,
|
||||
})],
|
||||
is_error: Some(true),
|
||||
|
||||
@@ -61,7 +61,7 @@ pub(crate) async fn handle_exec_approval_request(
|
||||
let escaped_command =
|
||||
shlex::try_join(command.iter().map(String::as_str)).unwrap_or_else(|_| command.join(" "));
|
||||
let message = format!(
|
||||
"Allow Codex to run `{escaped_command}` in `{cwd}`?",
|
||||
"Allow Hanzo Dev to run `{escaped_command}` in `{cwd}`?",
|
||||
cwd = cwd.to_string_lossy()
|
||||
);
|
||||
|
||||
|
||||
@@ -401,7 +401,7 @@ impl MessageProcessor {
|
||||
let server_info = serde_json::json!({
|
||||
"name": "code-mcp-server",
|
||||
"version": env!("CARGO_PKG_VERSION"),
|
||||
"title": "Codex",
|
||||
"title": "Hanzo Dev",
|
||||
"user_agent": get_code_user_agent_default(),
|
||||
});
|
||||
|
||||
@@ -578,7 +578,7 @@ impl MessageProcessor {
|
||||
content: vec![ContentBlock::TextContent(TextContent {
|
||||
r#type: "text".to_owned(),
|
||||
text: format!(
|
||||
"Failed to load Codex configuration from overrides: {e}"
|
||||
"Failed to load configuration from overrides: {e}"
|
||||
),
|
||||
annotations: None,
|
||||
})],
|
||||
@@ -594,7 +594,7 @@ impl MessageProcessor {
|
||||
let result = CallToolResult {
|
||||
content: vec![ContentBlock::TextContent(TextContent {
|
||||
r#type: "text".to_owned(),
|
||||
text: format!("Failed to parse configuration for Codex tool: {e}"),
|
||||
text: format!("Failed to parse configuration for the Hanzo Dev tool: {e}"),
|
||||
annotations: None,
|
||||
})],
|
||||
is_error: Some(true),
|
||||
@@ -662,7 +662,7 @@ impl MessageProcessor {
|
||||
let result = CallToolResult {
|
||||
content: vec![ContentBlock::TextContent(TextContent {
|
||||
r#type: "text".to_owned(),
|
||||
text: format!("Failed to parse configuration for Codex tool: {e}"),
|
||||
text: format!("Failed to parse configuration for the Hanzo Dev tool: {e}"),
|
||||
annotations: None,
|
||||
})],
|
||||
is_error: Some(true),
|
||||
|
||||
@@ -56,7 +56,7 @@ pub(crate) async fn handle_patch_approval_request(
|
||||
if let Some(r) = &reason {
|
||||
message_lines.push(r.clone());
|
||||
}
|
||||
message_lines.push("Allow Codex to apply proposed code changes?".to_string());
|
||||
message_lines.push("Allow Hanzo Dev to apply proposed code changes?".to_string());
|
||||
|
||||
let params = PatchApprovalElicitRequestParams {
|
||||
message: message_lines.join("\n"),
|
||||
|
||||
@@ -70,7 +70,7 @@ pub const BROWSER_SNAPSHOT_OPEN_TAG: &str = "<browser_snapshot>";
|
||||
pub const BROWSER_SNAPSHOT_CLOSE_TAG: &str = "</browser_snapshot>";
|
||||
pub const COLLABORATION_MODE_OPEN_TAG: &str = "<collaboration_mode>";
|
||||
pub const COLLABORATION_MODE_CLOSE_TAG: &str = "</collaboration_mode>";
|
||||
pub const USER_MESSAGE_BEGIN: &str = "## My request for Codex:";
|
||||
pub const USER_MESSAGE_BEGIN: &str = "## My request for Hanzo Dev:";
|
||||
|
||||
/// Submission Queue Entry - requests from user
|
||||
#[derive(Debug, Clone, Deserialize, Serialize, JsonSchema)]
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"name": "@openai/codex-responses-api-proxy",
|
||||
"name": "@hanzo/dev-responses-api-proxy",
|
||||
"version": "0.0.0-dev",
|
||||
"license": "Apache-2.0",
|
||||
"bin": {
|
||||
@@ -15,7 +15,7 @@
|
||||
],
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/openai/codex.git",
|
||||
"url": "git+https://github.com/hanzoai/dev.git",
|
||||
"directory": "code-rs/responses-api-proxy/npm"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -39471,7 +39471,7 @@ impl ChatWidget<'_> {
|
||||
pub(crate) fn show_cloud_tasks_loading(&mut self) {
|
||||
let loading_item = SelectionItem {
|
||||
name: "Loading cloud tasks…".to_string(),
|
||||
description: Some("Fetching latest tasks from Codex Cloud".to_string()),
|
||||
description: Some("Fetching latest cloud tasks".to_string()),
|
||||
is_current: true,
|
||||
actions: Vec::new(),
|
||||
};
|
||||
@@ -39527,7 +39527,7 @@ impl ChatWidget<'_> {
|
||||
pub(crate) fn show_cloud_environment_loading(&mut self) {
|
||||
let loading_item = SelectionItem {
|
||||
name: "Loading environments…".to_string(),
|
||||
description: Some("Fetching available Codex Cloud environments".to_string()),
|
||||
description: Some("Fetching available cloud environments".to_string()),
|
||||
is_current: true,
|
||||
actions: Vec::new(),
|
||||
};
|
||||
@@ -39752,7 +39752,7 @@ impl ChatWidget<'_> {
|
||||
|
||||
let view = CustomPromptView::new(
|
||||
format!("Create cloud task ({env_display})"),
|
||||
"Describe the change you want Codex to implement".to_string(),
|
||||
"Describe the change you want Hanzo Dev to implement".to_string(),
|
||||
Some("Press Enter to submit · Esc cancel".to_string()),
|
||||
self.app_event_tx.clone(),
|
||||
None,
|
||||
|
||||
@@ -59,7 +59,7 @@ pub(super) fn maybe_watch_after_push(
|
||||
let api_base = format!("https://api.github.com/repos/{owner}/{repo}/actions/runs");
|
||||
let token = get_github_token().map(|(t, _)| t);
|
||||
let client = reqwest::Client::builder()
|
||||
.user_agent("codex-cli-rs/github-monitor")
|
||||
.user_agent("hanzo-dev/github-monitor")
|
||||
.build()
|
||||
.unwrap_or_else(|_| reqwest::Client::new());
|
||||
|
||||
|
||||
@@ -481,7 +481,7 @@ pub async fn run_main(
|
||||
Ok(code_home) => code_home,
|
||||
#[allow(clippy::print_stderr)]
|
||||
Err(err) => {
|
||||
eprintln!("Error finding codex home: {err}");
|
||||
eprintln!("Error finding the Hanzo Dev home directory: {err}");
|
||||
std::process::exit(1);
|
||||
}
|
||||
};
|
||||
|
||||
Generated
+4
-4
@@ -1,11 +1,11 @@
|
||||
{
|
||||
"name": "@openai/codex",
|
||||
"version": "0.6.39",
|
||||
"name": "@hanzo/dev",
|
||||
"version": "0.2.189",
|
||||
"lockfileVersion": 3,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "@openai/codex",
|
||||
"version": "0.6.39",
|
||||
"name": "@hanzo/dev",
|
||||
"version": "0.2.189",
|
||||
"license": "Apache-2.0",
|
||||
"bin": {
|
||||
"codex": "bin/codex.js"
|
||||
|
||||
Reference in New Issue
Block a user