diff --git a/.codex-plugin/plugin.json b/.codex-plugin/plugin.json index ab1766f..8e36535 100644 --- a/.codex-plugin/plugin.json +++ b/.codex-plugin/plugin.json @@ -21,7 +21,7 @@ "interface": { "displayName": "OneSignal", "shortDescription": "Set up and send push notifications", - "longDescription": "OneSignal is the market leading customer engagement solution for push notifications, email, SMS, in-app messaging, and Live Activities. This plugin brings OneSignal onboarding into Codex: point it at your codebase and it installs the SDK, sets up your push credentials, and verifies that a real notification reaches your device.\n\nOnce installed, describe what you want in plain language or invoke the plugin directly with @OneSignal.\n\nTry prompts like:\n@OneSignal set up push notifications in this app.\n@OneSignal upload my APNs .p8 key and Firebase service account to OneSignal.\n@OneSignal why isn't my push notification arriving on Android?\n@OneSignal send a test push to my device and confirm delivery.\n\nRequirements: A free OneSignal account. A device, simulator, or browser that can receive push notifications.", + "longDescription": "OneSignal is the market leading customer engagement solution for email, push notifications, SMS, in-app messaging, and Live Activities. This plugin brings OneSignal onboarding into Codex: point it at your codebase and it installs the SDK, sets up your push credentials, and verifies that a real notification reaches your device.\n\nOnce installed, describe what you want in plain language or invoke the plugin directly with @OneSignal.\n\nTry prompts like:\n@OneSignal send an email to promote our new product announcement.\n@OneSignal create an email template for our weekly newsletter.\n@OneSignal send an SMS to remind customers about their abandoned cart.\n@OneSignal text a discount code to my subscribers for this weekend's sale.\n@OneSignal set up push notifications in this app.\n@OneSignal upload my APNs .p8 key and Firebase service account to OneSignal.\n@OneSignal why isn't my push notification arriving on Android?\n@OneSignal send a test push to my device and confirm delivery.\n\nRequirements: A free OneSignal account. A device, simulator, or browser that can receive push notifications.", "developerName": "OneSignal", "category": "Developer Tools", "capabilities": [ @@ -33,13 +33,12 @@ "termsOfServiceURL": "https://onesignal.com/tos", "defaultPrompt": [ "Set up OneSignal in this app.", - "Upload my APNs and FCM credentials to OneSignal.", + "Send an email to promote our new product.", "Send a test push to my device and confirm delivery." ], "brandColor": "#051B2C", "brandColorDark": "#4E50D1", - "composerIcon": "./assets/logomark.png", - "composerIconDark": "./assets/logomark-white.svg", + "composerIcon": "./assets/composer-icon.svg", "logo": "./assets/logomark.png", "logoDark": "./assets/logomark-white.svg" } diff --git a/AGENT.md b/AGENT.md index 469ea2d..c724604 100644 --- a/AGENT.md +++ b/AGENT.md @@ -28,7 +28,7 @@ repository. | `.claude-plugin/plugin.json` | Plugin manifest. The `version` field controls when Claude Code pulls updates. | | `.claude-plugin/marketplace.json` | Marketplace catalog. This repository is its own marketplace, named `onesignal`. | | `.codex-plugin/plugin.json` | Codex manifest. The `name` is the skill namespace in Codex (`onesignal:setup`). The `interface` block holds the listing copy, legal URLs, and brand assets. The directory bundle ships a copy without `mcpServers`. | -| `assets/` | Brand assets for the listings. The files come from the official OneSignal media kit. | +| `assets/` | Brand assets for the listings. The files come from the official OneSignal media kit. `composer-icon.svg` is the media-kit logomark on a white disc. The Codex manifest has no dark variant of `composerIcon`, and Codex shows that icon as an image with no container, so the icon needs its own background to read on a dark theme. | | `.mcp.json` | Declares the hosted OneSignal MCP endpoint. | | `endpoint.conf` | The checkpoint ingestion endpoint. The comment block in the file explains the path. | @@ -136,8 +136,8 @@ builds that artifact from this tree at release time: - It writes `.codex-plugin/plugin.json` from the repository manifest without `mcpServers`, because a Skills-only upload rejects MCP configuration (the listing's MCP server is attached - in the portal). It copies `assets/` so `interface.logo`, `interface.composerIcon`, and - their `Dark` variants resolve. The gate rejects `interface.screenshots`, which a + in the portal). It copies `assets/` so `interface.logo`, `interface.logoDark`, and + `interface.composerIcon` resolve. The gate rejects `interface.screenshots`, which a Skills-only upload refuses. - It copies each skill folder under `skills/` (`skills/setup/`, `skills/credentials/`, `skills/verify/`), and gives each one its own `references/`, `endpoint.conf`, and the diff --git a/assets/composer-icon.svg b/assets/composer-icon.svg new file mode 100644 index 0000000..ff5a7e7 --- /dev/null +++ b/assets/composer-icon.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/scripts/package_directory_bundle.py b/scripts/package_directory_bundle.py index 792ca77..fcd2d3e 100755 --- a/scripts/package_directory_bundle.py +++ b/scripts/package_directory_bundle.py @@ -80,8 +80,10 @@ # single hyphens are what the submission rules accept. PLUGIN_NAME_RE = re.compile(r"^[a-z0-9]+(?:-[a-z0-9]+)*$") BRAND_ASSET_FIELDS = ("logo", "composerIcon") -# Dark-theme variants. The directory falls back to the light file when one is absent. -OPTIONAL_BRAND_ASSET_FIELDS = ("logoDark", "composerIconDark") +# Dark-theme variant of the logo. The directory falls back to the light file when it +# is absent. The manifest has no dark variant of composerIcon; that icon ships its +# own background so it reads on both themes. +OPTIONAL_BRAND_ASSET_FIELDS = ("logoDark",) # A Skills-only upload rejects this field (`screenshot_configuration_excluded`). EXCLUDED_INTERFACE_FIELDS = ("screenshots",)