Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 3 additions & 4 deletions .codex-plugin/plugin.json
Original file line number Diff line number Diff line change
Expand Up @@ -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": [
Expand All @@ -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"
}
Expand Down
6 changes: 3 additions & 3 deletions AGENT.md
Original file line number Diff line number Diff line change
Expand Up @@ -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. |

Expand Down Expand Up @@ -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
Expand Down
6 changes: 6 additions & 0 deletions assets/composer-icon.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
6 changes: 4 additions & 2 deletions scripts/package_directory_bundle.py
Original file line number Diff line number Diff line change
Expand Up @@ -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",)

Expand Down
Loading