From 3c1b28cffdca717add5506770b08ba8883849f5a Mon Sep 17 00:00:00 2001 From: ciregenz Date: Thu, 3 Sep 2026 10:19:40 -0700 Subject: [PATCH] [eric] marketplace: plain words everywhere; Install, Open, Installed, Bundles, Everything, Browse, Type, and a review sheet that says Install Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_01C9zwUaHucUgrdxvK8FvjYT --- .../src/app/components/share/ImportModal.tsx | 6 ++--- .../pages/Directory/DirectoryPackagesTab.tsx | 22 +++++++++---------- .../app/pages/Directory/MarketplaceBody.tsx | 2 +- .../pages/Directory/packages/InstallPill.tsx | 4 ++-- .../Directory/packages/PackageBundleCard.tsx | 2 +- .../pages/Directory/packages/PackageCard.tsx | 2 +- .../pages/Directory/packages/catalog.test.ts | 2 +- .../packages/detail/PackageBundleDialog.tsx | 6 ++--- .../Directory/packages/installPackage.ts | 2 +- .../app/pages/Directory/packages/installs.ts | 2 +- 10 files changed, 25 insertions(+), 25 deletions(-) diff --git a/frontend/src/app/components/share/ImportModal.tsx b/frontend/src/app/components/share/ImportModal.tsx index 13b81bb7..b6317ffe 100644 --- a/frontend/src/app/components/share/ImportModal.tsx +++ b/frontend/src/app/components/share/ImportModal.tsx @@ -44,7 +44,7 @@ const ImportModal: React.FC = ({ preflight, open, committing, onConfirm, <> - Add {preflight.summary.root.name}? + Install {preflight.summary.root.name}? @@ -55,7 +55,7 @@ const ImportModal: React.FC = ({ preflight, open, committing, onConfirm, {preflight.review && preflight.review.findings.length > 0 && } {preflight.conflicts.length > 0 && ( - Some items already exist and will be added as copies. + Some of this already exists; copies will be added. )} @@ -80,7 +80,7 @@ const ImportModal: React.FC = ({ preflight, open, committing, onConfirm, boxShadow: 'none', }} > - Add to OpenSwarm + Install diff --git a/frontend/src/app/pages/Directory/DirectoryPackagesTab.tsx b/frontend/src/app/pages/Directory/DirectoryPackagesTab.tsx index 508ed66e..5e01ac17 100644 --- a/frontend/src/app/pages/Directory/DirectoryPackagesTab.tsx +++ b/frontend/src/app/pages/Directory/DirectoryPackagesTab.tsx @@ -110,7 +110,7 @@ const DirectoryPackagesTab: React.FC<{ onOpenSkill?: (skillId: string) => void } setInstalls(await recordInstall(recordFor(listingId, rootType, rootId, version))); } catch (e: unknown) { setInstalls((prev) => ({ ...prev, [listingId]: { ...recordFor(listingId, rootType, rootId, version), installed_at: Date.now() / 1000 } })); - setToast({ message: e instanceof Error ? e.message : "Installed, but the store couldn't remember it.", severity: 'error' }); + setToast({ message: e instanceof Error ? e.message : 'Installed, but it may show Install again after a restart.', severity: 'error' }); } }; @@ -121,7 +121,7 @@ const DirectoryPackagesTab: React.FC<{ onOpenSkill?: (skillId: string) => void } await finish(listingId, res.root_type, res.root_id); setConfirm(null); } catch (e: unknown) { - setToast({ message: e instanceof Error ? e.message : "We couldn't finish the install.", severity: 'error' }); + setToast({ message: e instanceof Error ? e.message : "Couldn't finish installing.", severity: 'error' }); } finally { setCommitting(false); } @@ -134,7 +134,7 @@ const DirectoryPackagesTab: React.FC<{ onOpenSkill?: (skillId: string) => void } if (marketplaceNeedsConfirm(preflight)) setConfirm({ preflight, listingId }); else await commit(preflight, listingId); } catch (e: unknown) { - setToast({ message: e instanceof Error ? e.message : "We couldn't download this package.", severity: 'error' }); + setToast({ message: e instanceof Error ? e.message : "Couldn't download it. Try again.", severity: 'error' }); } finally { setInstallingId(null); } @@ -143,7 +143,7 @@ const DirectoryPackagesTab: React.FC<{ onOpenSkill?: (skillId: string) => void } const installBundle = async (bundle: Listing) => { const members = resolveBundleMembers(bundle, listings).filter((m) => m.download_url); if (members.length === 0) { - setToast({ message: 'This bundle has no installable packages yet.', severity: 'error' }); + setToast({ message: 'Nothing in this bundle can be installed yet.', severity: 'error' }); return; } // One at a time: each member gets its own review, and a bundle must not be a way to skip one. @@ -177,7 +177,7 @@ const DirectoryPackagesTab: React.FC<{ onOpenSkill?: (skillId: string) => void } if (visible.length === 0 && visibleBundles.length === 0) { return ( - {error ? error : 'No packages match that search yet.'} + {error ? error : 'Nothing matches that search.'} ); } @@ -185,7 +185,7 @@ const DirectoryPackagesTab: React.FC<{ onOpenSkill?: (skillId: string) => void } <> {visibleBundles.length > 0 && ( - {sectionLabel('Collections')} + {sectionLabel('Bundles')} {visibleBundles.map((bundle) => ( void } )} - {visible.length > 0 && sectionLabel(visibleBundles.length > 0 ? 'All packages' : '', visible.length)} + {visible.length > 0 && sectionLabel(visibleBundles.length > 0 ? 'Everything' : '', visible.length)} void } return ( setKinds((prev) => (prev.includes(value) ? prev.filter((k) => k !== value) : [...prev, value]))} sortOptions={[ { value: 'newest', label: 'Newest' }, { value: 'name', label: 'Name' }, - { value: 'kind', label: 'Kind' }, + { value: 'kind', label: 'Type' }, ]} sortValue={sort} onSort={setSort} @@ -250,7 +250,7 @@ const DirectoryPackagesTab: React.FC<{ onOpenSkill?: (skillId: string) => void } /> {source === 'cache' && ( - Showing the last catalog we loaded; the marketplace could not be reached just now. + Showing the last list we loaded. The store can't be reached right now. )} {body()} diff --git a/frontend/src/app/pages/Directory/MarketplaceBody.tsx b/frontend/src/app/pages/Directory/MarketplaceBody.tsx index f7fc67a9..c09b0edc 100644 --- a/frontend/src/app/pages/Directory/MarketplaceBody.tsx +++ b/frontend/src/app/pages/Directory/MarketplaceBody.tsx @@ -80,7 +80,7 @@ const MarketplaceBody: React.FC = () => { - {railRow('packages', 'Packages', )} + {railRow('packages', 'Browse', )} {railRow('connectors', 'Connectors', )} {railRow('my-skills', 'My skills', )} diff --git a/frontend/src/app/pages/Directory/packages/InstallPill.tsx b/frontend/src/app/pages/Directory/packages/InstallPill.tsx index 5a52693a..d3b01b3c 100644 --- a/frontend/src/app/pages/Directory/packages/InstallPill.tsx +++ b/frontend/src/app/pages/Directory/packages/InstallPill.tsx @@ -13,7 +13,7 @@ interface Props { size?: 'sm' | 'md'; } -// The one action a package has, the way the App Store draws it: Get, a spinner while it lands, then Open. It swallows the click so a card underneath never opens its sheet. +// The one action a package has, the way the App Store draws it: Install, a spinner while it lands, then Open. It swallows the click so a card underneath never opens its sheet. export default function InstallPill({ state, disabled, onGet, onOpen, size = 'md' }: Props) { const c = useClaudeTokens(); const sm = size === 'sm'; @@ -51,7 +51,7 @@ export default function InstallPill({ state, disabled, onGet, onOpen, size = 'md disableElevation sx={{ ...base, bgcolor: c.accent.primary, color: c.text.inverse, '&:hover': { bgcolor: c.accent.hover }, '&.Mui-disabled': { bgcolor: c.accent.primary, color: c.text.inverse, opacity: state === 'installing' ? 1 : 0.5 } }} > - {state === 'installing' ? : 'Get'} + {state === 'installing' ? : 'Install'} ); } diff --git a/frontend/src/app/pages/Directory/packages/PackageBundleCard.tsx b/frontend/src/app/pages/Directory/packages/PackageBundleCard.tsx index 9b7c2b21..9d653bb2 100644 --- a/frontend/src/app/pages/Directory/packages/PackageBundleCard.tsx +++ b/frontend/src/app/pages/Directory/packages/PackageBundleCard.tsx @@ -74,7 +74,7 @@ export default function PackageBundleCard({ bundle, members, onOpen }: Props) { {bundle.title} - {members.length} {members.length === 1 ? 'package' : 'packages'} + {members.length} {members.length === 1 ? 'item' : 'items'} - {listing.description || 'No description provided.'} + {listing.description || 'No description yet.'} diff --git a/frontend/src/app/pages/Directory/packages/catalog.test.ts b/frontend/src/app/pages/Directory/packages/catalog.test.ts index d96bf2fa..d4648605 100644 --- a/frontend/src/app/pages/Directory/packages/catalog.test.ts +++ b/frontend/src/app/pages/Directory/packages/catalog.test.ts @@ -52,7 +52,7 @@ test('Packages is the default marketplace tab and the old skills store is gone', const dir = path.join(process.cwd(), 'src/app/pages/Directory'); const body = fs.readFileSync(path.join(dir, 'MarketplaceBody.tsx'), 'utf8'); assert.match(body, /useState\('packages'\)/); - assert.match(body, /railRow\('packages', 'Packages'/); + assert.match(body, /railRow\('packages', 'Browse'/); assert.doesNotMatch(body, /DirectorySkillsTab/); assert.equal(fs.existsSync(path.join(dir, 'DirectorySkillsTab.tsx')), false); const open = fs.readFileSync(path.join(dir, 'openMarketplace.ts'), 'utf8'); diff --git a/frontend/src/app/pages/Directory/packages/detail/PackageBundleDialog.tsx b/frontend/src/app/pages/Directory/packages/detail/PackageBundleDialog.tsx index 1ade33b6..37270fe3 100644 --- a/frontend/src/app/pages/Directory/packages/detail/PackageBundleDialog.tsx +++ b/frontend/src/app/pages/Directory/packages/detail/PackageBundleDialog.tsx @@ -67,7 +67,7 @@ export default function PackageBundleDialog({ bundle, members, stateOf, onOpenIn {bundle.title} - {members.length} {members.length === 1 ? 'package' : 'packages'}{bundle.author ? ` · ${bundle.author}` : ''} + {members.length} {members.length === 1 ? 'item' : 'items'}{bundle.author ? ` · ${bundle.author}` : ''} @@ -92,7 +92,7 @@ export default function PackageBundleDialog({ bundle, members, stateOf, onOpenIn Included {members.length === 0 ? ( - The packages in this bundle are no longer available. + The items in this bundle are no longer available. ) : ( {members.map((m) => { diff --git a/frontend/src/app/pages/Directory/packages/installPackage.ts b/frontend/src/app/pages/Directory/packages/installPackage.ts index 98975c09..c978a09f 100644 --- a/frontend/src/app/pages/Directory/packages/installPackage.ts +++ b/frontend/src/app/pages/Directory/packages/installPackage.ts @@ -12,7 +12,7 @@ export async function stagePackageInstall(listingId: string): Promise): P headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ ...rec, installed_at: 0 }), }); - if (!res.ok) throw new Error("Installed, but the store couldn't remember it."); + if (!res.ok) throw new Error('Installed, but it may show Install again after a restart.'); const body = (await res.json()) as { installs: Record }; return body.installs || {}; }