From 2aa198f9885798afdcb68945a1ff7ee634a68fe1 Mon Sep 17 00:00:00 2001 From: Naved Khan <94339342+nxved@users.noreply.github.com> Date: Mon, 2 Mar 2026 19:55:27 +0530 Subject: [PATCH 1/2] feat(platform): add x-playwright mapping and tauri connector bundle --- src-tauri/tauri.conf.json | 1 + src/components/icons/platform-x.tsx | 19 +++++++++++++++++++ src/lib/platform/icons.ts | 4 ++-- src/lib/platform/registry.ts | 7 +++++-- 4 files changed, 27 insertions(+), 4 deletions(-) create mode 100644 src/components/icons/platform-x.tsx diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index 9aaf8fc2..cbcdb3d2 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -61,6 +61,7 @@ "../connectors/meta/**/*": "connectors/meta/", "../connectors/openai/**/*": "connectors/openai/", "../connectors/spotify/**/*": "connectors/spotify/", + "../connectors/x/**/*": "connectors/x/", "../playwright-runner/dist/*": "playwright-runner/dist/", "../personal-server/dist/personal-server*": "personal-server/dist/" }, diff --git a/src/components/icons/platform-x.tsx b/src/components/icons/platform-x.tsx new file mode 100644 index 00000000..bc15cd23 --- /dev/null +++ b/src/components/icons/platform-x.tsx @@ -0,0 +1,19 @@ +import { Svg as SvgComponent, type SvgIconProps } from "@/components/utils/svg" + +export const PlatformXIcon = (props: SvgIconProps) => { + return ( + + + + + + + + + + + ) +} diff --git a/src/lib/platform/icons.ts b/src/lib/platform/icons.ts index 6d8b46ff..f74bd7af 100644 --- a/src/lib/platform/icons.ts +++ b/src/lib/platform/icons.ts @@ -1,10 +1,10 @@ import type { ElementType } from "react" -import { IconX } from "@/components/icons/icon-x" import { PlatformChatGPTIcon } from "@/components/icons/platform-chatgpt" import { PlatformGithubIcon } from "@/components/icons/platform-github" import { PlatformInstagramGlyphIcon } from "@/components/icons/platform-instagram-glyph" import { PlatformLinkedinIcon } from "@/components/icons/platform-linkedin" import { PlatformSpotifyIcon } from "@/components/icons/platform-spotify" +import { PlatformXIcon } from "@/components/icons/platform-x" import type { PlatformRegistryEntry } from "./registry" import { getPlatformRegistryEntry, @@ -20,7 +20,7 @@ const PLATFORM_ICON_COMPONENTS: Record = { instagram: PlatformInstagramGlyphIcon, linkedin: PlatformLinkedinIcon, spotify: PlatformSpotifyIcon, - x: IconX, + x: PlatformXIcon, } const resolveIconComponentForEntry = (entry: PlatformRegistryEntry | null) => { diff --git a/src/lib/platform/registry.ts b/src/lib/platform/registry.ts index 949a75c7..a124d78d 100644 --- a/src/lib/platform/registry.ts +++ b/src/lib/platform/registry.ts @@ -80,8 +80,11 @@ export const PLATFORM_REGISTRY: PlatformRegistryEntry[] = [ iconKey: "x", iconEmoji: "𝕏", primaryColor: "#111111", - platformIds: ["x"], - aliases: ["x (twitter)"], + platformIds: ["x-playwright", "x"], + aliases: ["x (twitter)", "twitter"], + availability: "requiresConnector", + showInConnectList: true, + ingestScope: "x.posts", }, { id: "twitter", From 4ebb9c0f2e81f068466e8b49d4b9d7d6373cf2f8 Mon Sep 17 00:00:00 2001 From: Callum Flack Date: Wed, 25 Mar 2026 18:32:03 +1000 Subject: [PATCH 2/2] fix(platform): canonicalize x connector mapping --- src/lib/platform/registry.ts | 11 ++----- src/lib/platform/utils.test.ts | 55 ++++++++++++++++++++++++++++++++++ src/lib/scope-labels.ts | 3 +- 3 files changed, 58 insertions(+), 11 deletions(-) create mode 100644 src/lib/platform/utils.test.ts diff --git a/src/lib/platform/registry.ts b/src/lib/platform/registry.ts index a124d78d..b02498df 100644 --- a/src/lib/platform/registry.ts +++ b/src/lib/platform/registry.ts @@ -76,23 +76,16 @@ export const PLATFORM_REGISTRY: PlatformRegistryEntry[] = [ }, { id: "x", - displayName: "X (Twitter)", + displayName: "X", iconKey: "x", iconEmoji: "𝕏", primaryColor: "#111111", platformIds: ["x-playwright", "x"], - aliases: ["x (twitter)", "twitter"], + aliases: ["twitter", "x (twitter)"], availability: "requiresConnector", showInConnectList: true, ingestScope: "x.posts", }, - { - id: "twitter", - displayName: "Twitter", - iconEmoji: "🐦", - primaryColor: "#1D9BF0", - platformIds: ["twitter"], - }, { id: "reddit", displayName: "Reddit", diff --git a/src/lib/platform/utils.test.ts b/src/lib/platform/utils.test.ts new file mode 100644 index 00000000..635902b3 --- /dev/null +++ b/src/lib/platform/utils.test.ts @@ -0,0 +1,55 @@ +import { describe, expect, it } from "vitest" +import { resolvePlatformForEntry, getPlatformRegistryEntryById } from "./utils" + +describe("platform registry resolution", () => { + it("treats x-playwright as the canonical X connector", () => { + const entry = getPlatformRegistryEntryById("x-playwright") + + expect(entry).toMatchObject({ + id: "x", + displayName: "X", + ingestScope: "x.posts", + }) + }) + + it("keeps legacy twitter lookups pointed at the canonical X entry", () => { + const entry = getPlatformRegistryEntryById("twitter") + + expect(entry).toMatchObject({ + id: "x", + displayName: "X", + }) + }) + + it("resolves the runtime x-playwright platform for the X entry", () => { + const entry = getPlatformRegistryEntryById("x") + + expect(entry).toBeTruthy() + if (!entry) { + throw new Error("Expected X entry to exist") + } + + const resolved = resolvePlatformForEntry( + [ + { + id: "x-playwright", + company: "X", + name: "X", + filename: "x-playwright", + description: "X export", + isUpdated: false, + logoURL: "", + needsConnection: true, + connectURL: null, + connectSelector: null, + exportFrequency: null, + vectorize_config: null, + runtime: "playwright", + }, + ], + entry + ) + + expect(resolved?.id).toBe("x-playwright") + }) +}) diff --git a/src/lib/scope-labels.ts b/src/lib/scope-labels.ts index 03042d9a..b5412791 100644 --- a/src/lib/scope-labels.ts +++ b/src/lib/scope-labels.ts @@ -1,8 +1,7 @@ const DATA_SOURCE_LABELS: Record = { chatgpt: "ChatGPT", reddit: "Reddit", - twitter: "Twitter", - x: "X (Twitter)", + x: "X", instagram: "Instagram", linkedin: "LinkedIn", spotify: "Spotify",