diff --git a/cli/src/commands/client/activity.ts b/cli/src/commands/client/activity.ts index 0ae83d95..76aff7a3 100644 --- a/cli/src/commands/client/activity.ts +++ b/cli/src/commands/client/activity.ts @@ -1,4 +1,5 @@ import { Command } from "commander"; +import { VOCAB } from "@paperclipai/branding"; import type { ActivityEvent } from "@paperclipai/shared"; import { addCommonClientOptions, @@ -22,8 +23,8 @@ export function registerActivityCommands(program: Command): void { addCommonClientOptions( activity .command("list") - .description("List company activity log entries") - .requiredOption("-C, --company-id ", "Company ID") + .description(`List ${VOCAB.company.toLowerCase()} activity log entries`) + .requiredOption("-C, --company-id ", `${VOCAB.company} ID`) .option("--agent-id ", "Filter by agent ID") .option("--entity-type ", "Filter by entity type") .option("--entity-id ", "Filter by entity ID") diff --git a/cli/src/commands/client/agent.ts b/cli/src/commands/client/agent.ts index 2c294628..eb45359f 100644 --- a/cli/src/commands/client/agent.ts +++ b/cli/src/commands/client/agent.ts @@ -1,4 +1,5 @@ import { Command } from "commander"; +import { VOCAB } from "@paperclipai/branding"; import type { Agent } from "@paperclipai/shared"; import { removeMaintainerOnlySkillSymlinks, @@ -162,8 +163,8 @@ export function registerAgentCommands(program: Command): void { addCommonClientOptions( agent .command("list") - .description("List agents for a company") - .requiredOption("-C, --company-id ", "Company ID") + .description(`List agents for a ${VOCAB.company.toLowerCase()}`) + .requiredOption("-C, --company-id ", `${VOCAB.company} ID`) .action(async (opts: AgentListOptions) => { try { const ctx = resolveCommandContext(opts, { requireCompany: true }); @@ -222,7 +223,7 @@ export function registerAgentCommands(program: Command): void { "Create an agent API key, install local Paperclip skills for Codex/Claude, and print shell exports", ) .argument("", "Agent ID or shortname/url-key") - .requiredOption("-C, --company-id ", "Company ID") + .requiredOption("-C, --company-id ", `${VOCAB.company} ID`) .option("--key-name ", "API key label", "local-cli") .option( "--no-install-skills", diff --git a/cli/src/commands/client/approval.ts b/cli/src/commands/client/approval.ts index 16d97d45..5d43f932 100644 --- a/cli/src/commands/client/approval.ts +++ b/cli/src/commands/client/approval.ts @@ -1,4 +1,5 @@ import { Command } from "commander"; +import { VOCAB } from "@paperclipai/branding"; import { createApprovalSchema, requestApprovalRevisionSchema, @@ -48,8 +49,8 @@ export function registerApprovalCommands(program: Command): void { addCommonClientOptions( approval .command("list") - .description("List approvals for a company") - .requiredOption("-C, --company-id ", "Company ID") + .description(`List approvals for a ${VOCAB.company.toLowerCase()}`) + .requiredOption("-C, --company-id ", `${VOCAB.company} ID`) .option("--status ", "Status filter") .action(async (opts: ApprovalListOptions) => { try { @@ -110,7 +111,7 @@ export function registerApprovalCommands(program: Command): void { approval .command("create") .description("Create an approval request") - .requiredOption("-C, --company-id ", "Company ID") + .requiredOption("-C, --company-id ", `${VOCAB.company} ID`) .requiredOption("--type ", "Approval type (hire_agent|approve_ceo_strategy)") .requiredOption("--payload ", "Approval payload as JSON object") .option("--requested-by-agent-id ", "Requesting agent ID") diff --git a/cli/src/commands/client/dashboard.ts b/cli/src/commands/client/dashboard.ts index 920ca292..b669af7d 100644 --- a/cli/src/commands/client/dashboard.ts +++ b/cli/src/commands/client/dashboard.ts @@ -1,4 +1,5 @@ import { Command } from "commander"; +import { VOCAB } from "@paperclipai/branding"; import type { DashboardSummary } from "@paperclipai/shared"; import { addCommonClientOptions, @@ -18,8 +19,8 @@ export function registerDashboardCommands(program: Command): void { addCommonClientOptions( dashboard .command("get") - .description("Get dashboard summary for a company") - .requiredOption("-C, --company-id ", "Company ID") + .description(`Get dashboard summary for a ${VOCAB.company.toLowerCase()}`) + .requiredOption("-C, --company-id ", `${VOCAB.company} ID`) .action(async (opts: DashboardGetOptions) => { try { const ctx = resolveCommandContext(opts, { requireCompany: true }); diff --git a/cli/src/commands/client/issue.ts b/cli/src/commands/client/issue.ts index 8db617d9..b3412004 100644 --- a/cli/src/commands/client/issue.ts +++ b/cli/src/commands/client/issue.ts @@ -1,4 +1,5 @@ import { Command } from "commander"; +import { VOCAB } from "@paperclipai/branding"; import { addIssueCommentSchema, checkoutIssueSchema, @@ -67,8 +68,8 @@ export function registerIssueCommands(program: Command): void { addCommonClientOptions( issue .command("list") - .description("List issues for a company") - .option("-C, --company-id ", "Company ID") + .description(`List issues for a ${VOCAB.company.toLowerCase()}`) + .option("-C, --company-id ", `${VOCAB.company} ID`) .option("--status ", "Comma-separated statuses") .option("--assignee-agent-id ", "Filter by assignee agent ID") .option("--project-id ", "Filter by project ID") @@ -136,7 +137,7 @@ export function registerIssueCommands(program: Command): void { issue .command("create") .description("Create an issue") - .requiredOption("-C, --company-id ", "Company ID") + .requiredOption("-C, --company-id ", `${VOCAB.company} ID`) .requiredOption("--title ", "Issue title") .option("--description <text>", "Issue description") .option("--status <status>", "Issue status") diff --git a/cli/src/commands/worktree.ts b/cli/src/commands/worktree.ts index adc9049b..a345ed77 100644 --- a/cli/src/commands/worktree.ts +++ b/cli/src/commands/worktree.ts @@ -77,6 +77,7 @@ import { type PlannedIssueDocumentMerge, type PlannedIssueInsert, } from "./worktree-merge-history-lib.js"; +import { VOCAB } from "@paperclipai/branding"; type WorktreeInitOptions = { name?: string; @@ -1538,7 +1539,7 @@ async function resolveMergeCompany(input: { } if (shared.length === 0) { - throw new Error("Source and target databases do not share a company id. Pass --company explicitly once both sides match."); + throw new Error(`Source and target databases do not share a ${VOCAB.company.toLowerCase()} id. Pass --company explicitly once both sides match.`); } const options = shared @@ -2644,7 +2645,7 @@ export function registerWorktreeCommands(program: Command): void { .argument("[source]", "Optional source worktree path, directory name, or branch name (back-compat alias for --from)") .option("--from <worktree>", "Source worktree path, directory name, branch name, or current") .option("--to <worktree>", "Target worktree path, directory name, branch name, or current (defaults to current)") - .option("--company <id-or-prefix>", "Shared company id or issue prefix inside the chosen source/target instances") + .option("--company <id-or-prefix>", `Shared ${VOCAB.company.toLowerCase()} id or issue prefix inside the chosen source/target instances`) .option("--scope <items>", "Comma-separated scopes to import (issues, comments)", "issues,comments") .option("--apply", "Apply the import after previewing the plan", false) .option("--dry", "Preview only and do not import anything", false) diff --git a/server/src/index.ts b/server/src/index.ts index 3fd29d4d..e59d414d 100644 --- a/server/src/index.ts +++ b/server/src/index.ts @@ -185,7 +185,7 @@ export async function startServer(): Promise<StartedServer> { const LOCAL_BOARD_USER_ID = "local-board"; const LOCAL_BOARD_USER_EMAIL = "local@paperclip.local"; - const LOCAL_BOARD_USER_NAME = "Owner"; // [nexus] was: "Board" + const LOCAL_BOARD_USER_NAME = "Owner"; // [nexus] renamed from Board async function ensureLocalTrustedBoardPrincipal(db: any): Promise<void> { const now = new Date(); diff --git a/server/src/services/company-export-readme.ts b/server/src/services/company-export-readme.ts index 30f6bc29..52df8500 100644 --- a/server/src/services/company-export-readme.ts +++ b/server/src/services/company-export-readme.ts @@ -4,7 +4,7 @@ import type { CompanyPortabilityManifest } from "@paperclipai/shared"; const ROLE_LABELS: Record<string, string> = { - ceo: "Project Manager", // [nexus] was: "CEO" + ceo: "Project Manager", // [nexus] renamed from CEO cto: "CTO", cmo: "CMO", cfo: "CFO", diff --git a/server/src/services/company-portability.ts b/server/src/services/company-portability.ts index b1bb7ed9..6d773d77 100644 --- a/server/src/services/company-portability.ts +++ b/server/src/services/company-portability.ts @@ -2252,7 +2252,7 @@ function buildManifestFromPackageFiles( const companyName = asString(companyFrontmatter.name) ?? opts?.sourceLabel?.companyName - ?? "Imported Company"; + ?? "Imported Workspace"; const companySlug = asString(companyFrontmatter.slug) ?? normalizeAgentUrlKey(companyName) diff --git a/ui/src/App.tsx b/ui/src/App.tsx index 371bde42..c3f1a950 100644 --- a/ui/src/App.tsx +++ b/ui/src/App.tsx @@ -202,13 +202,13 @@ function OnboardingRoutePage() { const title = matchedCompany ? `Add another agent to ${matchedCompany.name}` : companies.length > 0 - ? "Create another company" - : "Create your first company"; + ? `Create another ${VOCAB.company.toLowerCase()}` + : `Create your first ${VOCAB.company.toLowerCase()}`; const description = matchedCompany - ? "Run onboarding again to add an agent and a starter task for this company." + ? `Run onboarding again to add an agent and a starter task for this ${VOCAB.company.toLowerCase()}.` : companies.length > 0 - ? "Run onboarding again to create another company and seed its first agent." - : "Get started by creating a company and your first agent."; + ? `Run onboarding again to create another ${VOCAB.company.toLowerCase()} and seed its first agent.` + : `Get started by creating a ${VOCAB.company.toLowerCase()} and your first agent.`; return ( <div className="mx-auto max-w-xl py-10"> @@ -290,12 +290,12 @@ function NoCompaniesStartPage() { return ( <div className="mx-auto max-w-xl py-10"> <div className="rounded-lg border border-border bg-card p-6"> - <h1 className="text-xl font-semibold">Create your first company</h1> + <h1 className="text-xl font-semibold">{`Create your first ${VOCAB.company.toLowerCase()}`}</h1> <p className="mt-2 text-sm text-muted-foreground"> - Get started by creating a company. + {`Get started by creating a ${VOCAB.company.toLowerCase()}.`} </p> <div className="mt-4"> - <Button onClick={() => openOnboarding()}>New Company</Button> + <Button onClick={() => openOnboarding()}>{`New ${VOCAB.company}`}</Button> </div> </div> </div> diff --git a/ui/src/components/OnboardingWizard.tsx b/ui/src/components/OnboardingWizard.tsx index b9dd7851..e4be302b 100644 --- a/ui/src/components/OnboardingWizard.tsx +++ b/ui/src/components/OnboardingWizard.tsx @@ -356,7 +356,7 @@ export function OnboardingWizard() { ): Promise<AdapterEnvironmentTestResult | null> { if (!createdCompanyId) { setAdapterEnvError( - "Create or select a company before testing adapter environment." + `Create or select a ${VOCAB.company.toLowerCase()} before testing adapter environment.` ); return null; } @@ -412,7 +412,7 @@ export function OnboardingWizard() { setStep(2); } catch (err) { - setError(err instanceof Error ? err.message : "Failed to create company"); + setError(err instanceof Error ? err.message : `Failed to create ${VOCAB.company.toLowerCase()}`); } finally { setLoading(false); } @@ -720,7 +720,7 @@ export function OnboardingWizard() { </label> <textarea className="w-full rounded-md border border-border bg-transparent px-3 py-2 text-sm outline-none focus:ring-1 focus:ring-ring placeholder:text-muted-foreground/50 resize-none min-h-[60px]" - placeholder="What is this company trying to achieve?" + placeholder={`What is this ${VOCAB.company.toLowerCase()} trying to achieve?`} value={companyGoal} onChange={(e) => setCompanyGoal(e.target.value)} /> diff --git a/ui/src/components/Sidebar.tsx b/ui/src/components/Sidebar.tsx index b46ee9ed..eb6f17f6 100644 --- a/ui/src/components/Sidebar.tsx +++ b/ui/src/components/Sidebar.tsx @@ -58,7 +58,7 @@ export function Sidebar() { /> )} <span className="flex-1 text-sm font-bold text-foreground truncate pl-1"> - {selectedCompany?.name ?? "Select company"} + {selectedCompany?.name ?? `Select ${VOCAB.company.toLowerCase()}`} </span> <Button variant="ghost" diff --git a/ui/src/pages/AgentDetail.tsx b/ui/src/pages/AgentDetail.tsx index 6484fb1a..ac538ec3 100644 --- a/ui/src/pages/AgentDetail.tsx +++ b/ui/src/pages/AgentDetail.tsx @@ -2721,7 +2721,7 @@ function AgentSkillsTab({ {desiredOnlyMissingSkills.length > 0 && ( <div className="rounded-xl border border-amber-300/60 bg-amber-50/60 px-4 py-3 text-sm text-amber-800 dark:border-amber-500/30 dark:bg-amber-950/20 dark:text-amber-200"> - <div className="font-medium">Requested skills missing from the company library</div> + <div className="font-medium">{`Requested skills missing from the ${VOCAB.company.toLowerCase()} library`}</div> <div className="mt-1 text-xs"> {desiredOnlyMissingSkills.join(", ")} </div> diff --git a/ui/src/pages/CliAuth.tsx b/ui/src/pages/CliAuth.tsx index 22169569..8a826e88 100644 --- a/ui/src/pages/CliAuth.tsx +++ b/ui/src/pages/CliAuth.tsx @@ -143,7 +143,7 @@ export function CliAuthPage() { </div> {challenge.requestedCompanyName && ( <div> - <div className="text-muted-foreground">Requested company</div> + <div className="text-muted-foreground">{`Requested ${VOCAB.company.toLowerCase()}`}</div> <div className="text-foreground">{challenge.requestedCompanyName}</div> </div> )}