feat(brand): NEURON TUI logo, terminal titles, and swept user-facing copy

This commit is contained in:
2026-08-21 15:30:40 -05:00
parent 6bfcdbb9a8
commit 8b26ac8e1b
7 changed files with 16 additions and 16 deletions
+2 -2
View File
@@ -71,12 +71,12 @@ export function resolveThreadDirectory(project?: string, envPWD = process.env.PW
export const TuiThreadCommand = cmd({ export const TuiThreadCommand = cmd({
command: "$0 [project]", command: "$0 [project]",
describe: "start opencode tui", describe: "start the Neuron TUI",
builder: (yargs) => builder: (yargs) =>
withNetworkOptions(yargs) withNetworkOptions(yargs)
.positional("project", { .positional("project", {
type: "string", type: "string",
describe: "path to start opencode in", describe: "path to start Neuron in",
}) })
.option("model", { .option("model", {
type: "string", type: "string",
+3 -3
View File
@@ -454,14 +454,14 @@ function App(props: { onSnapshot?: () => Promise<string[]>; pluginHost: TuiPlugi
if (!terminalTitleEnabled() || Flag.OPENCODE_DISABLE_TERMINAL_TITLE) return if (!terminalTitleEnabled() || Flag.OPENCODE_DISABLE_TERMINAL_TITLE) return
if (route.data.type === "home") { if (route.data.type === "home") {
renderer.setTerminalTitle("OpenCode") renderer.setTerminalTitle("Neuron")
return return
} }
if (route.data.type === "session") { if (route.data.type === "session") {
const session = sync.session.get(route.data.sessionID) const session = sync.session.get(route.data.sessionID)
if (!session || isDefaultTitle(session.title)) { if (!session || isDefaultTitle(session.title)) {
renderer.setTerminalTitle("OpenCode") renderer.setTerminalTitle("Neuron")
return return
} }
@@ -1070,7 +1070,7 @@ function App(props: { onSnapshot?: () => Promise<string[]>; pluginHost: TuiPlugi
await DialogAlert.show( await DialogAlert.show(
dialog, dialog,
"Update Complete", "Update Complete",
`Successfully updated to OpenCode v${result.data.version}. Please restart the application.`, `Successfully updated to Neuron v${result.data.version}. Please restart the application.`,
) )
void exit() void exit()
@@ -371,7 +371,7 @@ function ApiMethod(props: ApiMethodProps) {
opencode: ( opencode: (
<box gap={1}> <box gap={1}>
<text fg={theme.textMuted}> <text fg={theme.textMuted}>
OpenCode Zen gives you access to all the best coding models at the cheapest prices with a single API Connect a provider to access coding models with a single API key
key. key.
</text> </text>
<text fg={theme.text}> <text fg={theme.text}>
@@ -382,11 +382,11 @@ function ApiMethod(props: ApiMethodProps) {
"opencode-go": ( "opencode-go": (
<box gap={1}> <box gap={1}>
<text fg={theme.textMuted}> <text fg={theme.textMuted}>
OpenCode Go is a $10 per month subscription that provides reliable access to popular open coding models Configure any provider to get reliable access to popular open coding models
with generous usage limits. with generous usage limits.
</text> </text>
<text fg={theme.text}> <text fg={theme.text}>
Go to <span style={{ fg: theme.primary }}>https://opencode.ai/go</span> and enable OpenCode Go Add a provider API key in <span style={{ fg: theme.primary }}>neuron auth login</span> or opencode.json
</text> </text>
</box> </box>
), ),
@@ -233,12 +233,12 @@ const TIPS: Tip[] = [
"Tool definitions can invoke scripts written in Python, Go, etc", "Tool definitions can invoke scripts written in Python, Go, etc",
"Add {highlight}.ts{/highlight} files to {highlight}.opencode/plugins/{/highlight} for event hooks", "Add {highlight}.ts{/highlight} files to {highlight}.opencode/plugins/{/highlight} for event hooks",
"Use plugins to send OS notifications when sessions complete", "Use plugins to send OS notifications when sessions complete",
"Create a plugin to prevent OpenCode from reading sensitive files", "Create a plugin to prevent Neuron from reading sensitive files",
"Use {highlight}opencode run{/highlight} for non-interactive scripting", "Use {highlight}opencode run{/highlight} for non-interactive scripting",
"Use {highlight}opencode --continue{/highlight} to resume the last session", "Use {highlight}opencode --continue{/highlight} to resume the last session",
"Use {highlight}opencode run -f file.ts{/highlight} to attach files via CLI", "Use {highlight}opencode run -f file.ts{/highlight} to attach files via CLI",
"Use {highlight}--format json{/highlight} for machine-readable output in scripts", "Use {highlight}--format json{/highlight} for machine-readable output in scripts",
"Run {highlight}opencode serve{/highlight} for headless API access to OpenCode", "Run {highlight}opencode serve{/highlight} for headless API access to Neuron",
"Use {highlight}opencode run --attach{/highlight} to connect to a running server", "Use {highlight}opencode run --attach{/highlight} to connect to a running server",
"Run {highlight}opencode upgrade{/highlight} to update to the latest version", "Run {highlight}opencode upgrade{/highlight} to update to the latest version",
"Run {highlight}opencode auth list{/highlight} to see all configured providers", "Run {highlight}opencode auth list{/highlight} to see all configured providers",
@@ -275,7 +275,7 @@ const TIPS: Tip[] = [
? `Toggle username display in chat via the command palette (${shortcutText(shortcuts.commandList())})` ? `Toggle username display in chat via the command palette (${shortcutText(shortcuts.commandList())})`
: "Toggle username display in chat via the command palette", : "Toggle username display in chat via the command palette",
"Run {highlight}docker run -it --rm ghcr.io/anomalyco/opencode{/highlight} in a container", "Run {highlight}docker run -it --rm ghcr.io/anomalyco/opencode{/highlight} in a container",
"Use {highlight}/connect{/highlight} with OpenCode Zen for curated, tested models", "Use {highlight}/connect{/highlight} for curated, tested model providers",
"Commit your project's {highlight}AGENTS.md{/highlight} file to Git for team sharing", "Commit your project's {highlight}AGENTS.md{/highlight} file to Git for team sharing",
"Use {highlight}/review{/highlight} to review uncommitted changes, branches, or PRs", "Use {highlight}/review{/highlight} to review uncommitted changes, branches, or PRs",
(shortcuts) => `Use ${commandText("/help", shortcuts.helpShow())} to show the help dialog`, (shortcuts) => `Use ${commandText("/help", shortcuts.helpShow())} to show the help dialog`,
@@ -53,7 +53,7 @@ function View(props: { api: TuiPluginApi; sessionID: string }) {
</text> </text>
</box> </box>
<text fg={theme().textMuted}>OpenCode includes free models so you can start immediately.</text> <text fg={theme().textMuted}>Neuron includes free models so you can start immediately.</text>
<text fg={theme().textMuted}> <text fg={theme().textMuted}>
Connect from 75+ providers to use other models, including Claude, GPT, Gemini etc Connect from 75+ providers to use other models, including Claude, GPT, Gemini etc
</text> </text>
+2 -2
View File
@@ -1,6 +1,6 @@
export const logo = { export const logo = {
left: [" ", "█▀▀ █▀▀█ █▀▀█ █▀▀▄", "█__█ █__█ █^^^ █__█", "▀▀▀▀ █▀▀▀ ▀▀▀▀ ▀~~▀"], left: [" ", "█▀▀ █▀▀█ █▀▀█", "█__█ █^^^ █__█", "▀~~▀ ▀▀▀▀ ▀__▀"],
right: [" ", "█▀▀▀ █▀▀█ █▀▀█ █▀▀", "█___ █__█ █__█ █^^^", "▀▀▀▀ ▀▀▀▀ ▀▀▀▀ ▀▀▀▀"], right: [" ", "█▀▀█ █▀▀█ █▀▀", "█▄▄█ █__█ █__█", "▀__▀ ▀▀▀▀ ▀~~▀"],
} }
export const go = { export const go = {
@@ -141,11 +141,11 @@ export function PermissionPrompt(props: { request: PermissionRequest; directory?
body={ body={
<Switch> <Switch>
<Match when={props.request.always.length === 1 && props.request.always[0] === "*"}> <Match when={props.request.always.length === 1 && props.request.always[0] === "*"}>
<TextBody title={"This will allow " + props.request.permission + " until OpenCode is restarted."} /> <TextBody title={"This will allow " + props.request.permission + " until Neuron is restarted."} />
</Match> </Match>
<Match when={true}> <Match when={true}>
<box paddingLeft={1} gap={1}> <box paddingLeft={1} gap={1}>
<text fg={theme.textMuted}>This will allow the following patterns until OpenCode is restarted</text> <text fg={theme.textMuted}>This will allow the following patterns until Neuron is restarted</text>
<box> <box>
<For each={props.request.always}> <For each={props.request.always}>
{(pattern) => ( {(pattern) => (