Ironclaw rebrand: rename user-facing strings, package identity, and CLI references
Rebrand from OpenClaw to Ironclaw across 16 files: Web app (apps/web): - layout.tsx: update metadata title to "Ironclaw" and description to "AI CRM with an agent that connects to your apps and does the work for you" - page.tsx: change landing page heading from "OpenClaw Dench" to "Ironclaw" - agent-runner.ts: rename stderr log prefix to [ironclaw stderr] - package.json: rename package from "openclaw-web" to "ironclaw-web" Package identity (root): - package.json: rename package from "openclaw-ai-sdk" to "ironclaw", update description to reflect CRM/workspace focus, change bin entry from "openclaw-ai-sdk" to "ironclaw" - openclaw.mjs: update error message to reference "ironclaw" - src/version.ts: change CORE_PACKAGE_NAME to "ironclaw" CLI and TUI: - command-format.ts: extend CLI prefix regex to accept both "ironclaw" and "openclaw" for backward compatibility - register.agent.ts: update example identity name to "Ironclaw" with 🔩 emoji (replacing 🦞) - tui.ts: rename TUI header from "openclaw tui" to "ironclaw tui" Onboarding and configuration wizards: - configure.wizard.ts: rename engine selection prompts and wizard intro headers to "Ironclaw" - onboarding.ts: rename onboarding intro and security warning text - onboarding.finalize.ts: rename all dashboard/control-UI messages and Brave Search setup instructions to reference "Ironclaw" Security audit: - audit.ts: rename state-dir permission warning details to "Ironclaw" - audit-extra.ts: rename plugin remediation text to "Ironclaw" Telegram: - bot-message-context.ts: rename access-denied message to "Ironclaw"
This commit is contained in:
parent
e8f5eddacb
commit
dfaf7180b4
@ -2,8 +2,8 @@ import type { Metadata } from "next";
|
||||
import "./globals.css";
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: "OpenClaw Chat",
|
||||
description: "OpenClaw agent chat interface",
|
||||
title: "Ironclaw",
|
||||
description: "AI CRM with an agent that connects to your apps and does the work for you",
|
||||
};
|
||||
|
||||
export default function RootLayout({
|
||||
|
||||
@ -36,7 +36,7 @@ export default function Home() {
|
||||
className="text-4xl font-bold tracking-tight mb-3 text-center"
|
||||
style={{ color: "var(--color-text)" }}
|
||||
>
|
||||
OpenClaw Dench
|
||||
Ironclaw
|
||||
</h1>
|
||||
|
||||
{/* Tagline */}
|
||||
|
||||
@ -295,7 +295,7 @@ export async function runAgent(
|
||||
child.stderr?.on("data", (chunk: Buffer) => {
|
||||
const text = chunk.toString();
|
||||
stderrChunks.push(text);
|
||||
console.error("[openclaw stderr]", text);
|
||||
console.error("[ironclaw stderr]", text);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
{
|
||||
"name": "openclaw-web",
|
||||
"name": "ironclaw-web",
|
||||
"version": "0.1.0",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
|
||||
@ -52,5 +52,5 @@ if (await tryImport("./dist/entry.js")) {
|
||||
} else if (await tryImport("./dist/entry.mjs")) {
|
||||
// OK
|
||||
} else {
|
||||
throw new Error("openclaw-ai-sdk: missing dist/entry.(m)js (build output).");
|
||||
throw new Error("ironclaw: missing dist/entry.(m)js (build output).");
|
||||
}
|
||||
|
||||
@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "openclaw-ai-sdk",
|
||||
"name": "ironclaw",
|
||||
"version": "2026.2.6-3",
|
||||
"description": "Multi-channel AI gateway with extensible messaging integrations",
|
||||
"description": "AI-powered CRM platform with multi-channel agent gateway, DuckDB workspace, and knowledge management",
|
||||
"keywords": [],
|
||||
"license": "MIT",
|
||||
"author": "",
|
||||
"bin": {
|
||||
"openclaw-ai-sdk": "openclaw.mjs"
|
||||
"ironclaw": "openclaw.mjs"
|
||||
},
|
||||
"files": [
|
||||
"assets/",
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
import { replaceCliName, resolveCliName } from "./cli-name.js";
|
||||
import { normalizeProfileName } from "./profile-utils.js";
|
||||
|
||||
const CLI_PREFIX_RE = /^(?:pnpm|npm|bunx|npx)\s+openclaw\b|^openclaw\b/;
|
||||
const CLI_PREFIX_RE = /^(?:pnpm|npm|bunx|npx)\s+(?:ironclaw|openclaw)\b|^(?:ironclaw|openclaw)\b/;
|
||||
const PROFILE_FLAG_RE = /(?:^|\s)--profile(?:\s|=|$)/;
|
||||
const DEV_FLAG_RE = /(?:^|\s)--dev(?:\s|$)/;
|
||||
|
||||
|
||||
@ -165,7 +165,7 @@ ${theme.muted("Docs:")} ${formatDocsLink("/cli/agent", "docs.openclaw.ai/cli/age
|
||||
`
|
||||
${theme.heading("Examples:")}
|
||||
${formatHelpExamples([
|
||||
['openclaw agents set-identity --agent main --name "OpenClaw" --emoji "🦞"', "Set name + emoji."],
|
||||
['openclaw agents set-identity --agent main --name "Ironclaw" --emoji "🔩"', "Set name + emoji."],
|
||||
["openclaw agents set-identity --agent main --avatar avatars/openclaw.png", "Set avatar path."],
|
||||
[
|
||||
"openclaw agents set-identity --workspace ~/.openclaw/workspace --from-identity",
|
||||
|
||||
@ -177,7 +177,7 @@ async function promptEngineConfig(
|
||||
|
||||
note(
|
||||
[
|
||||
"OpenClaw supports two LLM engines for agent orchestration:",
|
||||
"Ironclaw supports two LLM engines for agent orchestration:",
|
||||
"",
|
||||
"• AI SDK (default): Vercel's AI SDK v6 - modern, flexible, supports AI Gateway",
|
||||
"• pi-agent: Original implementation - battle-tested, full feature set",
|
||||
@ -189,7 +189,7 @@ async function promptEngineConfig(
|
||||
|
||||
const engineChoice = guardCancel(
|
||||
await select<"aisdk" | "pi-agent">({
|
||||
message: "Which LLM engine should OpenClaw use?",
|
||||
message: "Which LLM engine should Ironclaw use?",
|
||||
options: [
|
||||
{
|
||||
value: "aisdk",
|
||||
@ -222,7 +222,7 @@ export async function runConfigureWizard(
|
||||
) {
|
||||
try {
|
||||
printWizardHeader(runtime);
|
||||
intro(opts.command === "update" ? "OpenClaw update wizard" : "OpenClaw configure");
|
||||
intro(opts.command === "update" ? "Ironclaw update wizard" : "Ironclaw configure");
|
||||
const prompter = createClackPrompter();
|
||||
|
||||
const snapshot = await readConfigFileSnapshot();
|
||||
|
||||
@ -1214,7 +1214,7 @@ export async function collectPluginsCodeSafetyFindings(params: {
|
||||
title: `Plugin "${pluginName}" contains dangerous code patterns`,
|
||||
detail: `Found ${summary.critical} critical issue(s) in ${summary.scannedFiles} scanned file(s):\n${details}`,
|
||||
remediation:
|
||||
"Review the plugin source code carefully before use. If untrusted, remove the plugin from your OpenClaw extensions state directory.",
|
||||
"Review the plugin source code carefully before use. If untrusted, remove the plugin from your Ironclaw extensions state directory.",
|
||||
});
|
||||
} else if (summary.warn > 0) {
|
||||
const warnFindings = summary.findings.filter((f) => f.severity === "warn");
|
||||
|
||||
@ -153,7 +153,7 @@ async function collectFilesystemFindings(params: {
|
||||
checkId: "fs.state_dir.perms_world_writable",
|
||||
severity: "critical",
|
||||
title: "State dir is world-writable",
|
||||
detail: `${formatPermissionDetail(params.stateDir, stateDirPerms)}; other users can write into your OpenClaw state.`,
|
||||
detail: `${formatPermissionDetail(params.stateDir, stateDirPerms)}; other users can write into your Ironclaw state.`,
|
||||
remediation: formatPermissionRemediation({
|
||||
targetPath: params.stateDir,
|
||||
perms: stateDirPerms,
|
||||
@ -167,7 +167,7 @@ async function collectFilesystemFindings(params: {
|
||||
checkId: "fs.state_dir.perms_group_writable",
|
||||
severity: "warn",
|
||||
title: "State dir is group-writable",
|
||||
detail: `${formatPermissionDetail(params.stateDir, stateDirPerms)}; group users can write into your OpenClaw state.`,
|
||||
detail: `${formatPermissionDetail(params.stateDir, stateDirPerms)}; group users can write into your Ironclaw state.`,
|
||||
remediation: formatPermissionRemediation({
|
||||
targetPath: params.stateDir,
|
||||
perms: stateDirPerms,
|
||||
|
||||
@ -278,7 +278,7 @@ export const buildTelegramMessageContext = async ({
|
||||
bot.api.sendMessage(
|
||||
chatId,
|
||||
[
|
||||
"OpenClaw: access not configured.",
|
||||
"Ironclaw: access not configured.",
|
||||
"",
|
||||
`Your Telegram user id: ${telegramUserId}`,
|
||||
"",
|
||||
|
||||
@ -324,7 +324,7 @@ export async function runTui(opts: TuiOptions) {
|
||||
const agentLabel = formatAgentLabel(currentAgentId);
|
||||
header.setText(
|
||||
theme.header(
|
||||
`openclaw tui - ${client.connection.url} - agent ${agentLabel} - session ${sessionLabel}`,
|
||||
`ironclaw tui - ${client.connection.url} - agent ${agentLabel} - session ${sessionLabel}`,
|
||||
),
|
||||
);
|
||||
};
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
import { createRequire } from "node:module";
|
||||
|
||||
declare const __OPENCLAW_VERSION__: string | undefined;
|
||||
const CORE_PACKAGE_NAME = "openclaw";
|
||||
const CORE_PACKAGE_NAME = "ironclaw";
|
||||
|
||||
const PACKAGE_JSON_CANDIDATES = [
|
||||
"../package.json",
|
||||
|
||||
@ -366,8 +366,8 @@ export async function finalizeOnboardingWizard(
|
||||
[
|
||||
`Dashboard link (with token): ${authedUrl}`,
|
||||
controlUiOpened
|
||||
? "Opened in your browser. Keep that tab to control OpenClaw."
|
||||
: "Copy/paste this URL in a browser on this machine to control OpenClaw.",
|
||||
? "Opened in your browser. Keep that tab to control Ironclaw."
|
||||
: "Copy/paste this URL in a browser on this machine to control Ironclaw.",
|
||||
controlUiOpenHint,
|
||||
]
|
||||
.filter(Boolean)
|
||||
@ -470,8 +470,8 @@ export async function finalizeOnboardingWizard(
|
||||
[
|
||||
`Dashboard link (with token): ${authedUrl}`,
|
||||
controlUiOpened
|
||||
? "Opened in your browser. Keep that tab to control OpenClaw."
|
||||
: "Copy/paste this URL in a browser on this machine to control OpenClaw.",
|
||||
? "Opened in your browser. Keep that tab to control Ironclaw."
|
||||
: "Copy/paste this URL in a browser on this machine to control Ironclaw.",
|
||||
controlUiOpenHint,
|
||||
]
|
||||
.filter(Boolean)
|
||||
@ -496,7 +496,7 @@ export async function finalizeOnboardingWizard(
|
||||
: [
|
||||
"If you want your agent to be able to search the web, you’ll need an API key.",
|
||||
"",
|
||||
"OpenClaw uses Brave Search for the `web_search` tool. Without a Brave Search API key, web search won’t work.",
|
||||
"Ironclaw uses Brave Search for the `web_search` tool. Without a Brave Search API key, web search won’t work.",
|
||||
"",
|
||||
"Set it up interactively:",
|
||||
`- Run: ${formatCliCommand("openclaw configure --section web")}`,
|
||||
@ -515,10 +515,10 @@ export async function finalizeOnboardingWizard(
|
||||
|
||||
await prompter.outro(
|
||||
controlUiOpened
|
||||
? "Onboarding complete. Dashboard opened; keep that tab to control OpenClaw."
|
||||
? "Onboarding complete. Dashboard opened; keep that tab to control Ironclaw."
|
||||
: seededInBackground
|
||||
? "Onboarding complete. Web UI seeded in the background; open it anytime with the dashboard link above."
|
||||
: "Onboarding complete. Use the dashboard link above to control OpenClaw.",
|
||||
: "Onboarding complete. Use the dashboard link above to control Ironclaw.",
|
||||
);
|
||||
|
||||
return { launchedTui };
|
||||
|
||||
@ -55,11 +55,11 @@ async function requireRiskAcknowledgement(params: {
|
||||
[
|
||||
"Security warning — please read.",
|
||||
"",
|
||||
"OpenClaw is a hobby project and still in beta. Expect sharp edges.",
|
||||
"Ironclaw is a hobby project and still in beta. Expect sharp edges.",
|
||||
"This bot can read files and run actions if tools are enabled.",
|
||||
"A bad prompt can trick it into doing unsafe things.",
|
||||
"",
|
||||
"If you’re not comfortable with basic security and access control, don’t run OpenClaw.",
|
||||
"If you’re not comfortable with basic security and access control, don’t run Ironclaw.",
|
||||
"Ask someone experienced to help before enabling tools or exposing it to the internet.",
|
||||
"",
|
||||
"Recommended baseline:",
|
||||
@ -92,7 +92,7 @@ export async function runOnboardingWizard(
|
||||
prompter: WizardPrompter,
|
||||
) {
|
||||
printWizardHeader(runtime);
|
||||
await prompter.intro("OpenClaw onboarding");
|
||||
await prompter.intro("Ironclaw onboarding");
|
||||
await requireRiskAcknowledgement({ opts, prompter });
|
||||
|
||||
const snapshot = await readConfigFileSnapshot();
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user