Unified · Split
| @@ -132,7 +132,7 @@ export default function AddGoogleSource(props: { · 131 unmodified lines | ||
| 132 | 132 | return ( |
| 133 | 133 | <div className="flex flex-1 flex-col gap-6"> |
| 134 | 134 | <div> |
| 135 | − <h1 className="text-xl font-semibold text-foreground">Add Google</h1> | |
| 135 | + <h1 className="text-xl font-semibold text-foreground">Add Google integration</h1> | |
| 136 | 136 | <p className="mt-1 text-[13px] text-muted-foreground"> |
| 137 | 137 | Bundle Google APIs into one integration with a shared OAuth consent. |
| 138 | 138 | </p> |
| @@ -130,7 +130,7 @@ export default function AddGraphqlSource(props: { · 129 unmodified lines | ||
| 130 | 130 | |
| 131 | 131 | return ( |
| 132 | 132 | <div className="flex flex-1 flex-col gap-6"> |
| 133 | − <h1 className="text-xl font-semibold text-foreground">Add GraphQL Source</h1> | |
| 133 | + <h1 className="text-xl font-semibold text-foreground">Add GraphQL integration</h1> | |
| 134 | 134 | |
| 135 | 135 | <GraphqlSourceFields |
| 136 | 136 | endpoint={endpoint} |
| @@ -143,8 +143,8 @@ export default function AddGraphqlSource(props: { · 6 unmodified lines | ||
| 143 | 143 | <AuthMethodListEditor |
| 144 | 144 | list={authMethodList} |
| 145 | 145 | allowedKinds={["none", "apikey"]} |
| 146 | − emptyHint="No authentication declared. Add a method, or add the source without auth and connect an account from the integration page later." | |
| 147 | − footerHint="Every method here is registered with the source. Connect an account from the integration page after adding." | |
| 146 | + emptyHint="No authentication declared. Add a method, or add the integration without auth and connect an account from the integration page later." | |
| 147 | + footerHint="Every method here is registered with the integration. Connect an account from the integration page after adding." | |
| 148 | 148 | /> |
| 149 | 149 | |
| 150 | 150 | {slugAlreadyExists && !adding && <SlugCollisionAlert slug={resolvedSlug} />} |
| @@ -156,7 +156,7 @@ export default function AddGraphqlSource(props: { · 5 unmodified lines | ||
| 156 | 156 | Cancel |
| 157 | 157 | </Button> |
| 158 | 158 | <Button onClick={() => void handleAdd()} disabled={!canAdd} loading={adding}> |
| 159 | − Add source | |
| 159 | + Add integration | |
| 160 | 160 | </Button> |
| 161 | 161 | </FloatActions> |
| 162 | 162 | </div> |
| @@ -380,7 +380,7 @@ export default function AddMcpSource(props: { · 379 unmodified lines | ||
| 380 | 380 | return ( |
| 381 | 381 | <div className="flex flex-1 flex-col gap-6"> |
| 382 | 382 | <div> |
| 383 | − <h1 className="text-xl font-semibold text-foreground">Add MCP Source</h1> | |
| 383 | + <h1 className="text-xl font-semibold text-foreground">Add MCP integration</h1> | |
| 384 | 384 | <p className="mt-1 text-[13px] text-muted-foreground"> |
| 385 | 385 | Connect to an MCP server to discover and use its tools. |
| 386 | 386 | </p> |
| @@ -473,7 +473,7 @@ export default function AddMcpSource(props: { · 86 unmodified lines | ||
| 473 | 473 | </Button> |
| 474 | 474 | {(probe || isProbing) && ( |
| 475 | 475 | <Button type="button" onClick={handleAddRemote} disabled={!canAdd} loading={isAdding}> |
| 476 | − Add source | |
| 476 | + Add integration | |
| 477 | 477 | </Button> |
| 478 | 478 | )} |
| 479 | 479 | </FloatActions> |
| @@ -542,7 +542,7 @@ export default function AddMcpSource(props: { · 62 unmodified lines | ||
| 542 | 542 | disabled={!stdioCommand.trim() || stdioSlugExists} |
| 543 | 543 | loading={stdioAdding} |
| 544 | 544 | > |
| 545 | − Add source | |
| 545 | + Add integration | |
| 546 | 546 | </Button> |
| 547 | 547 | </FloatActions> |
| 548 | 548 | </> |
| @@ -108,7 +108,7 @@ export default function AddMicrosoftSource(props: { · 107 unmodified lines | ||
| 108 | 108 | return ( |
| 109 | 109 | <div className="flex flex-1 flex-col gap-6"> |
| 110 | 110 | <div> |
| 111 | − <h1 className="text-xl font-semibold text-foreground">Add Microsoft Graph</h1> | |
| 111 | + <h1 className="text-xl font-semibold text-foreground">Add Microsoft integration</h1> | |
| 112 | 112 | <p className="mt-1 text-[13px] text-muted-foreground"> |
| 113 | 113 | Pick Microsoft 365 workloads and connect them through one delegated OAuth consent. |
| 114 | 114 | </p> |
| @@ -133,7 +133,7 @@ export function ApiKeysPage() { · 132 unmodified lines | ||
| 133 | 133 | <CopyButton value="Authorization: Bearer <api-key>" /> |
| 134 | 134 | </div> |
| 135 | 135 | <p className="mt-2 max-w-2xl text-xs leading-5 text-muted-foreground"> |
| 136 | − API keys work as PATs and have full access to your account. | |
| 136 | + API keys work like personal access tokens and have full access to your account. | |
| 137 | 137 | </p> |
| 138 | 138 | </PageHeader> |
| 139 | 139 | |
| @@ -365,7 +365,7 @@ export function PoliciesPage() { · 364 unmodified lines | ||
| 365 | 365 | <PageContainer> |
| 366 | 366 | <PageHeader |
| 367 | 367 | title="Policies" |
| 368 | − description="Override default approval behavior for tools. The most restrictive matched action wins. Blocked tools are hidden from agent search and fail at invoke." | |
| 368 | + description="Decide which tools run automatically, which ask for approval, and which are blocked. The most restrictive matching rule wins; blocked tools are hidden from agents." | |
| 369 | 369 | /> |
| 370 | 370 | |
| 371 | 371 | <div className="mb-8"> |
| @@ -33,7 +33,7 @@ import { isAsyncResultLoading } from "../lib/async-result"; · 32 unmodified lines | ||
| 33 | 33 | // --------------------------------------------------------------------------- |
| 34 | 34 | |
| 35 | 35 | const PROVIDER_LABELS: Record<string, string> = { |
| 36 | − default: "Default store", | |
| 36 | + encrypted: "Encrypted store", | |
| 37 | 37 | keychain: "Keychain", |
| 38 | 38 | file: "Local file", |
| 39 | 39 | memory: "Memory", |
| @@ -41,7 +41,13 @@ const PROVIDER_LABELS: Record<string, string> = { · 1 unmodified line | ||
| 41 | 41 | "workos-vault": "WorkOS Vault", |
| 42 | 42 | }; |
| 43 | 43 | |
| 44 | −const providerLabel = (key: string): string => PROVIDER_LABELS[key] ?? key; | |
| 44 | +const providerLabel = (key: string): string => | |
| 45 | + PROVIDER_LABELS[key] ?? | |
| 46 | + key | |
| 47 | + .split(/[-_]/g) | |
| 48 | + .filter(Boolean) | |
| 49 | + .map((part) => part.charAt(0).toUpperCase() + part.slice(1)) | |
| 50 | + .join(" "); | |
| 45 | 51 | |
| 46 | 52 | export function SecretsPage(props: { showProviderInfo?: boolean }) { |
| 47 | 53 | useExecutorDocumentTitle("Providers"); |
| @@ -117,13 +123,17 @@ export function SecretsPage(props: { showProviderInfo?: boolean }) { · 69 unmodified lines | ||
| 117 | 123 | <span className="min-w-0 shrink truncate"> |
| 118 | 124 | {providerLabel(String(key))} |
| 119 | 125 | </span> |
| 120 | − <span className="max-w-40 shrink truncate font-mono text-xs text-muted-foreground"> | |
| 121 | − {String(key)} | |
| 122 | − </span> | |
| 123 | 126 | </CardStackEntryTitle> |
| 127 | + <CardStackEntryDescription> | |
| 128 | + {String(key) === "encrypted" | |
| 129 | + ? "Values you paste are encrypted and stored in this instance's database." | |
| 130 | + : `${providerLabel(String(key))} credential provider.`} | |
| 131 | + </CardStackEntryDescription> | |
| 124 | 132 | </CardStackEntryContent> |
| 125 | 133 | <CardStackEntryActions> |
| 126 | − <Badge variant="secondary">provider</Badge> | |
| 134 | + <Badge variant="secondary"> | |
| 135 | + {String(key) === "encrypted" ? "default" : "provider"} | |
| 136 | + </Badge> | |
| 127 | 137 | </CardStackEntryActions> |
| 128 | 138 | </CardStackEntry> |
| 129 | 139 | )) |