Skip to content

Commit 71daba3

Browse files
committed
refactor(web): remove unused onboarding code
1 parent 26eab80 commit 71daba3

1 file changed

Lines changed: 1 addition & 323 deletions

File tree

apps/web/src/components/EntryShell.tsx

Lines changed: 1 addition & 323 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@ import type { OpenDesignHostProjectImportSuccess } from '@open-design/host';
3434
import { useAnalytics } from '../analytics/provider';
3535
import {
3636
trackHomeNavClick,
37-
trackHomeToolbarClick,
3837
trackOnboardingClick,
3938
trackOnboardingCompleteResult,
4039
trackOnboardingRuntimeScanResult,
@@ -180,13 +179,7 @@ import {
180179
recordOptimisticProjectOwnership,
181180
type OptimisticProjectOwnershipWitnesses,
182181
} from '../collab/optimistic-project-ownership';
183-
import {
184-
getModelCapabilityTag,
185-
getModelCostTier,
186-
MODEL_CAPABILITY_TAG_LABEL_KEYS,
187-
MODEL_COST_TIER_LABEL_KEYS,
188-
type ModelCapabilityTag,
189-
} from './modelCapabilityTags';
182+
import type { ModelCapabilityTag } from './modelCapabilityTags';
190183
import { LanguageMenu } from './LanguageMenu';
191184
import { IntegrationsView, type IntegrationTab } from './IntegrationsView';
192185
import { InlineModelSwitcher } from './InlineModelSwitcher';
@@ -196,7 +189,6 @@ import { ExtensionsMarketplace } from './PluginsView';
196189
import type { CreateInput, CreateTab, ImportClaudeDesignOutcome } from './NewProjectPanel';
197190
import type { PluginLoopSubmit } from './PluginLoopHome';
198191
import {
199-
createProject,
200192
duplicatePluginAsProject,
201193
patchProject,
202194
ProjectCreateError,
@@ -243,7 +235,6 @@ import {
243235
RAIL_OPEN_STORAGE_KEY,
244236
readStoredRailOpen,
245237
} from './entryRailBridge';
246-
import { enterpriseUrl } from './enterpriseUrl';
247238
import { resolveByokModelPreference } from './byok/validation';
248239
import onboardingSourceStyles from './OnboardingModelSource.module.css';
249240

@@ -287,13 +278,6 @@ type OnboardingAgentTestState =
287278
const ONBOARDING_BYOK_AUTO_FETCH_DELAY_MS = 300;
288279
const ONBOARDING_BYOK_AUTO_TEST_DELAY_MS = 500;
289280

290-
const ONBOARDING_AMR_MODEL_OPTIONS: NonNullable<AgentInfo['models']> = [
291-
{ id: 'claude-opus-4.8', label: 'Claude Opus 4.8' },
292-
{ id: 'deepseek-v4-flash', label: 'DeepSeek V4 Flash' },
293-
{ id: 'gemini-2.5-flash', label: 'Gemini 2.5 Flash' },
294-
{ id: 'glm-5.1', label: 'GLM 5.1' },
295-
];
296-
297281
type EntryCreateProjectInput = Omit<CreateInput, 'metadata'> & {
298282
metadata?: CreateInput['metadata'];
299283
pendingPrompt?: string;
@@ -587,7 +571,6 @@ export function EntryShell({
587571
onSkillsChanged,
588572
onRefreshAgents,
589573
onCreateProject,
590-
onCreatePluginShareProject,
591574
onImportClaudeDesign,
592575
onImportFolder,
593576
onImportFolderResponse,
@@ -3788,105 +3771,6 @@ function OnboardingCliSetupPanel({
37883771
);
37893772
}
37903773

3791-
function OnboardingAmrModelSelect({
3792-
models,
3793-
modelsSource,
3794-
selectedModel,
3795-
onSelectModel,
3796-
}: {
3797-
models: NonNullable<AgentInfo['models']>;
3798-
modelsSource: AgentInfo['modelsSource'];
3799-
selectedModel: string;
3800-
onSelectModel: (model: string) => void;
3801-
}) {
3802-
const t = useT();
3803-
const modelSource = modelsSource ?? 'fallback';
3804-
const displayModels = models.map((model) => {
3805-
const capability = onboardingModelCapabilityLabel(t, model);
3806-
const cost = onboardingModelCostLabel(t, model);
3807-
return {
3808-
value: model.id,
3809-
label: formatOnboardingAmrModelLabel(model),
3810-
tag: capability?.label,
3811-
tagKind: capability?.kind,
3812-
meta: cost?.label,
3813-
};
3814-
});
3815-
const modelSourceLabel = t('settings.onboardingAmrModelSourceLabel');
3816-
return (
3817-
<div
3818-
className="onboarding-view__model-picker"
3819-
onClick={(event) => event.stopPropagation()}
3820-
>
3821-
<OnboardingDropdown
3822-
label={`${t('settings.modelPicker')} · ${modelSourceLabel}`}
3823-
placeholder={t('settings.modelSourceFallback')}
3824-
value={selectedModel}
3825-
options={displayModels}
3826-
onChange={onSelectModel}
3827-
searchable
3828-
searchPlaceholder={t('newproj.modelSearch')}
3829-
sourceTone={modelSource}
3830-
/>
3831-
</div>
3832-
);
3833-
}
3834-
3835-
function formatOnboardingAmrModelLabel(
3836-
model: NonNullable<AgentInfo['models']>[number],
3837-
): string {
3838-
const label = model.label?.trim();
3839-
if (label && label !== model.id && !/^[a-z0-9._-]+$/.test(label)) {
3840-
return label;
3841-
}
3842-
return model.id
3843-
.split('-')
3844-
.filter(Boolean)
3845-
.map(formatModelToken)
3846-
.join(' ');
3847-
}
3848-
3849-
function formatModelToken(token: string): string {
3850-
const lower = token.toLowerCase();
3851-
const known: Record<string, string> = {
3852-
claude: 'Claude',
3853-
opus: 'Opus',
3854-
sonnet: 'Sonnet',
3855-
haiku: 'Haiku',
3856-
deepseek: 'DeepSeek',
3857-
gemini: 'Gemini',
3858-
glm: 'GLM',
3859-
gpt: 'GPT',
3860-
oss: 'OSS',
3861-
kimi: 'Kimi',
3862-
minimax: 'MiniMax',
3863-
mimo: 'MiMo',
3864-
qwen3: 'Qwen3',
3865-
seed: 'Seed',
3866-
};
3867-
if (known[lower]) return known[lower];
3868-
if (/^v\d/i.test(token)) return token.toUpperCase();
3869-
if (/^\d+b$/i.test(token) || /^a\d+b$/i.test(token)) return token.toUpperCase();
3870-
if (/^\d+(\.\d+)*$/.test(token)) return token;
3871-
return token.charAt(0).toUpperCase() + token.slice(1);
3872-
}
3873-
3874-
function onboardingModelCapabilityLabel(
3875-
t: ReturnType<typeof useT>,
3876-
model: Pick<NonNullable<AgentInfo['models']>[number], 'id' | 'metadata'>,
3877-
): { label: string; kind: ModelCapabilityTag } | undefined {
3878-
const tag = getModelCapabilityTag(model);
3879-
return tag ? { label: t(MODEL_CAPABILITY_TAG_LABEL_KEYS[tag]), kind: tag } : undefined;
3880-
}
3881-
3882-
function onboardingModelCostLabel(
3883-
t: ReturnType<typeof useT>,
3884-
model: Pick<NonNullable<AgentInfo['models']>[number], 'id' | 'metadata'>,
3885-
): { label: string } | undefined {
3886-
const tier = getModelCostTier(model);
3887-
return tier ? { label: t(MODEL_COST_TIER_LABEL_KEYS[tier]) } : undefined;
3888-
}
3889-
38903774
function OnboardingByokSetupPanel({
38913775
apiProtocol,
38923776
apiKey,
@@ -4549,209 +4433,3 @@ export function OnboardingDropdown(props: OnboardingDropdownProps) {
45494433
</div>
45504434
);
45514435
}
4552-
4553-
// Placeholder for the AMR cloud card shown while AMR availability is still
4554-
// being probed (the cold-start detection stream / one-shot re-probe). It
4555-
// mirrors the real card's footprint exactly — same featured/amr grid, same
4556-
// 246px min-height — so resolving to the real card causes no layout jump.
4557-
// The AMR brand (icon + name) is known up-front and rendered solid; only the
4558-
// version meta, benefit list, and model picker — the parts that depend on the
4559-
// probe result — shimmer. Non-interactive and announced via role="status".
4560-
function OnboardingAmrCloudSkeleton() {
4561-
const t = useT();
4562-
return (
4563-
<div className="onboarding-view__amr-cloud-card">
4564-
<div
4565-
className="onboarding-view__card onboarding-view__card--featured onboarding-view__card--amr onboarding-view__card--benefit-aside onboarding-view__card--skeleton"
4566-
role="status"
4567-
aria-busy="true"
4568-
aria-label={t('common.loading')}
4569-
>
4570-
<span className="onboarding-view__identity">
4571-
<span className="onboarding-view__icon onboarding-view__icon--asset">
4572-
<AgentIcon id="amr" size={52} className="onboarding-view__agent-logo" />
4573-
</span>
4574-
<span className="onboarding-view__card-copy">
4575-
<span className="onboarding-view__card-top">
4576-
<strong>{t('settings.amrCloud')}</strong>
4577-
</span>
4578-
<span className="onboarding-view__skeleton-line onboarding-view__skeleton-line--meta" />
4579-
</span>
4580-
</span>
4581-
<span className="onboarding-view__benefit-aside" aria-hidden="true">
4582-
<span className="onboarding-view__benefit-stack onboarding-view__benefit-stack--skeleton">
4583-
<span className="onboarding-view__skeleton-line onboarding-view__skeleton-line--benefit" />
4584-
<span className="onboarding-view__skeleton-line onboarding-view__skeleton-line--benefit" />
4585-
<span className="onboarding-view__skeleton-line onboarding-view__skeleton-line--benefit" />
4586-
<span className="onboarding-view__skeleton-line onboarding-view__skeleton-line--benefit" />
4587-
</span>
4588-
</span>
4589-
<span className="onboarding-view__card-model" aria-hidden="true">
4590-
<span className="onboarding-view__skeleton-model">
4591-
<span className="onboarding-view__skeleton-model-label" />
4592-
<span className="onboarding-view__skeleton-model-bar" />
4593-
</span>
4594-
</span>
4595-
</div>
4596-
</div>
4597-
);
4598-
}
4599-
4600-
function OnboardingChoiceCard({
4601-
icon,
4602-
agentIconId,
4603-
title,
4604-
body,
4605-
benefits,
4606-
upcomingLabel,
4607-
upcomingBenefits,
4608-
benefitPlacement = 'copy',
4609-
metaLabel,
4610-
modelSlot,
4611-
actionLabel,
4612-
selected,
4613-
badge,
4614-
statusSlot,
4615-
featured,
4616-
variant,
4617-
onClick,
4618-
}: {
4619-
icon: 'orbit' | 'hammer' | 'sliders' | 'github' | 'upload' | 'sparkles';
4620-
agentIconId?: string;
4621-
title: string;
4622-
body: string;
4623-
benefits?: string[];
4624-
upcomingLabel?: string;
4625-
upcomingBenefits?: string[];
4626-
benefitPlacement?: 'copy' | 'aside';
4627-
metaLabel?: string;
4628-
modelSlot?: ReactNode;
4629-
actionLabel?: string;
4630-
selected: boolean;
4631-
badge?: string;
4632-
statusSlot?: ReactNode;
4633-
featured?: boolean;
4634-
variant?: 'amr';
4635-
onClick: () => void;
4636-
}) {
4637-
function handleKeyDown(event: ReactKeyboardEvent<HTMLDivElement>) {
4638-
if (event.target !== event.currentTarget) return;
4639-
if (event.key !== 'Enter' && event.key !== ' ') return;
4640-
event.preventDefault();
4641-
onClick();
4642-
}
4643-
4644-
const hasBenefits =
4645-
(benefits && benefits.length > 0) ||
4646-
(upcomingBenefits && upcomingBenefits.length > 0);
4647-
const benefitStack = hasBenefits ? (
4648-
<span className="onboarding-view__benefit-stack">
4649-
{benefits && benefits.length > 0 ? (
4650-
<span className="onboarding-view__benefits">
4651-
{benefits.map((item, index) => (
4652-
<span
4653-
key={item}
4654-
className={`onboarding-view__benefit${
4655-
index >= 2 ? ' onboarding-view__benefit--hero' : ''
4656-
}`}
4657-
>
4658-
{item}
4659-
</span>
4660-
))}
4661-
</span>
4662-
) : null}
4663-
{upcomingBenefits && upcomingBenefits.length > 0 ? (
4664-
<span className="onboarding-view__upcoming-benefits">
4665-
{upcomingLabel ? (
4666-
<span className="onboarding-view__upcoming-label">{upcomingLabel}</span>
4667-
) : null}
4668-
{upcomingBenefits.map((item) => (
4669-
<span key={item} className="onboarding-view__benefit onboarding-view__benefit--upcoming">
4670-
{item}
4671-
</span>
4672-
))}
4673-
</span>
4674-
) : null}
4675-
</span>
4676-
) : null;
4677-
const modelUnderLogo = variant === 'amr' && modelSlot;
4678-
const iconNode = (
4679-
<span
4680-
className={
4681-
'onboarding-view__icon' +
4682-
(agentIconId ? ' onboarding-view__icon--asset' : '')
4683-
}
4684-
>
4685-
{agentIconId ? (
4686-
<AgentIcon
4687-
id={agentIconId}
4688-
size={featured ? 52 : 40}
4689-
className="onboarding-view__agent-logo"
4690-
/>
4691-
) : (
4692-
<Icon name={icon} size={18} />
4693-
)}
4694-
</span>
4695-
);
4696-
const copyNode = (
4697-
<span className="onboarding-view__card-copy">
4698-
<span className="onboarding-view__card-top">
4699-
<strong>{title}</strong>
4700-
{badge ? <span className="onboarding-view__badge">{badge}</span> : null}
4701-
</span>
4702-
{metaLabel ? <span className="onboarding-view__card-meta">{metaLabel}</span> : null}
4703-
{modelUnderLogo ? null : modelSlot}
4704-
{benefitPlacement === 'copy' && benefitStack ? (
4705-
benefitStack
4706-
) : !modelSlot ? (
4707-
<small>{body}</small>
4708-
) : null}
4709-
</span>
4710-
);
4711-
4712-
return (
4713-
<div
4714-
role="button"
4715-
tabIndex={0}
4716-
className={`onboarding-view__card${selected ? ' is-selected' : ''}${
4717-
featured ? ' onboarding-view__card--featured' : ''
4718-
}${variant ? ` onboarding-view__card--${variant}` : ''}${
4719-
benefitPlacement === 'aside' ? ' onboarding-view__card--benefit-aside' : ''
4720-
}`}
4721-
onClick={onClick}
4722-
onKeyDown={handleKeyDown}
4723-
aria-pressed={selected}
4724-
>
4725-
{variant === 'amr' ? (
4726-
<span className="onboarding-view__identity">
4727-
{iconNode}
4728-
{copyNode}
4729-
</span>
4730-
) : (
4731-
<>
4732-
{iconNode}
4733-
{copyNode}
4734-
</>
4735-
)}
4736-
{modelUnderLogo ? (
4737-
<span className="onboarding-view__card-model">
4738-
{modelSlot}
4739-
</span>
4740-
) : null}
4741-
{benefitPlacement === 'aside' && benefitStack ? (
4742-
<span className="onboarding-view__benefit-aside">{benefitStack}</span>
4743-
) : null}
4744-
{statusSlot ? (
4745-
<span className="onboarding-view__card-status">
4746-
{statusSlot}
4747-
</span>
4748-
) : null}
4749-
{actionLabel ? <span className="onboarding-view__card-action">{actionLabel}</span> : null}
4750-
{selected ? (
4751-
<span className="onboarding-view__check">
4752-
<Icon name="check" size={14} />
4753-
</span>
4754-
) : null}
4755-
</div>
4756-
);
4757-
}

0 commit comments

Comments
 (0)