Skip to content

Commit 9e4fb80

Browse files
authored
fix: add displayName, description, and icon to marketplace entries (#93)
* fix: enrich marketplace entries with displayName, description, and icon - Add displayName from README plugin names to marketplace entries - Add description from README entries (with manifest shortDescription fallback) - Add icon path extracted from plugin manifest's interface.composerIcon/logo - Ensure icons are correctly resolved relative to marketplace.json - Fixes issue where all plugin titles showed as 'awesome-codex-plugins' - Fixes missing images and descriptions in Codex marketplace view * fix: exclude icon entries when asset file is missing Some plugins declare composerIcon/logo paths in their manifest but the corresponding files are not present in the repo (e.g., placeholder values or missing assets). The marketplace now verifies the file exists before including the icon reference, avoiding broken image links in Codex. * fix: correct icon path formatting (remove duplicate ./ prefix) and filter missing assets marketplace.json entries now include icon only when the declared asset file actually exists in the mirrored plugin directory. This prevents broken image references for plugins that have placeholder values or missing files. * fix: filter placeholder icon values and clear plugin destinations before mirroring - Thread 1 fix: reject placeholder icon values like "[TODO: ./assets/icon.png]" by checking for bracketed TODO/PLACEHOLDER patterns before including icon - Thread 2 fix: clear destination_root in mirror_plugin_bundle() to avoid stale files from previous runs causing false-positive icon existence checks Both changes address chatgpt-codex-connector review feedback. * chore: sync plugin artifacts after mirror fix Update mirrored plugin bundles to reflect current upstream selections; clean stale files from previous runs. This resolves the "Sync marketplace artifacts with README" CI failure by ensuring working tree matches generator output after the rmtree fix. * fix: preserve dot-prefixed paths during normalization (P1 regression) normalize_relative_path() previously used lstack("./") which stripped all leading '.' and '/' characters, mangling dotfile paths like ".mcp.json" into "mcp.json". This caused required dot-prefixed manifest files to be omitted from mirrored plugin bundles when the destination was cleaned. The function now only strips a literal leading "./" or "/" prefix, keeping dotfiles intact. The manifest path is also normalized the same way when computing the icon file path to ensure consistency. Fixes chatgpt-codex-connector P1 review thread at line 221. * fix: include hooks in selected_paths to preserve manifest-declared hook configs chatgpt-codex-connector P1: mirror_plugin_bundle with rmtree now relies on collect_selected_paths to fully reconstruct the plugin. The hooks field from the manifest was not being copied, causing installed plugins to lose their hook workflows. Added "hooks" to the manifest keys processed by collect_selected_paths. Restores: - plugins/Kanevry/session-orchestrator/hooks/hooks-codex.json - plugins/BestLemoon/codex-seo/hooks/hooks.json - plugins/sendbird/cc-plugin-codex/hooks/hooks.json * fix: commit script fixes (normalize_relative_path, hooks, icon path) and CI workflow guard The previous commits included regenerated artifacts but missed committing the script changes that produced them. This caused CI to run the old (buggy) script against the new artifacts, detecting a mismatch. Script fixes: - normalize_relative_path: use startswith checks instead of lstrip to preserve dot-prefixed paths like .mcp.json - collect_selected_paths: include 'hooks' manifest key - icon path: use startswith checks instead of lstrip for consistent prefix stripping Workflow fix: - Skip git push on pull_request events (detached HEAD checkout) - Auto-commit/push only on push to main
1 parent 4746b16 commit 9e4fb80

293 files changed

Lines changed: 945 additions & 6546 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.agents/plugins/marketplace.json

Lines changed: 227 additions & 68 deletions
Large diffs are not rendered by default.

.github/workflows/validate-plugins.yml

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -36,12 +36,17 @@ jobs:
3636
run: |
3737
python3 scripts/generate_plugins_json.py
3838
if ! git diff --quiet -- plugins.json .agents/plugins/marketplace.json plugins; then
39-
echo "::notice::marketplace artifacts were out of sync — auto-committing"
40-
git config user.name "github-actions[bot]"
41-
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
42-
git add plugins.json .agents/plugins/marketplace.json plugins
43-
git commit -m "chore: sync marketplace artifacts with README"
44-
git push
39+
echo "::notice::marketplace artifacts were out of sync"
40+
if [ "${{ github.event_name }}" = "push" ]; then
41+
echo "::notice::auto-committing synced artifacts"
42+
git config user.name "github-actions[bot]"
43+
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
44+
git add plugins.json .agents/plugins/marketplace.json plugins
45+
git commit -m "chore: sync marketplace artifacts with README"
46+
git push
47+
else
48+
echo "::notice::skipping push on ${{ github.event_name }} (detached HEAD on PR merge ref)"
49+
fi
4550
else
4651
echo "marketplace artifacts are up to date"
4752
fi
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"apps": {}
3+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
{
2+
"mcpServers": {
3+
"taskScheduler": {
4+
"command": "python",
5+
"args": [
6+
"./scripts/mcp_server.py"
7+
],
8+
"cwd": ".",
9+
"env": {
10+
"PYTHONUTF8": "1"
11+
},
12+
"startup_timeout_sec": 20,
13+
"tool_timeout_sec": 60
14+
}
15+
}
16+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"hooks": []
3+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
{
2+
"hooks": {
3+
"PostToolUse": [
4+
{
5+
"matcher": "Write|Edit",
6+
"hooks": [
7+
{
8+
"type": "command",
9+
"command": "py -3 ./scripts/post_write_codex_agent_guardrail.py || python ./scripts/post_write_codex_agent_guardrail.py || python3 ./scripts/post_write_codex_agent_guardrail.py"
10+
}
11+
]
12+
}
13+
]
14+
}
15+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
{
2+
"mcpServers": {
3+
"dataforseo": {
4+
"command": "npx",
5+
"args": [
6+
"-y",
7+
"dataforseo-mcp-server"
8+
],
9+
"env": {
10+
"DATAFORSEO_USERNAME": "${DATAFORSEO_USERNAME}",
11+
"DATAFORSEO_PASSWORD": "${DATAFORSEO_PASSWORD}",
12+
"ENABLED_MODULES": "SERP,KEYWORDS_DATA,ONPAGE,DATAFORSEO_LABS,BACKLINKS,DOMAIN_ANALYTICS,BUSINESS_DATA,CONTENT_ANALYSIS,AI_OPTIMIZATION",
13+
"FIELD_CONFIG_PATH": "./extensions/dataforseo/field-config.json"
14+
}
15+
},
16+
"firecrawl-mcp": {
17+
"command": "npx",
18+
"args": [
19+
"-y",
20+
"firecrawl-mcp"
21+
],
22+
"env": {
23+
"FIRECRAWL_API_KEY": "${FIRECRAWL_API_KEY}"
24+
}
25+
},
26+
"nanobanana-mcp": {
27+
"command": "npx",
28+
"args": [
29+
"-y",
30+
"@ycse/nanobanana-mcp@latest"
31+
],
32+
"env": {
33+
"GOOGLE_AI_API_KEY": "${GOOGLE_AI_API_KEY}"
34+
}
35+
}
36+
}
37+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
{
2+
"hooks": {
3+
"PostToolUse": [
4+
{
5+
"matcher": "Edit|Write",
6+
"hooks": [
7+
{
8+
"type": "command",
9+
"command": "python3 \"./hooks/validate-schema.py\" \"$FILE_PATH\""
10+
}
11+
]
12+
}
13+
]
14+
}
15+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{
2+
"mcpServers": {
3+
"launchfast": {
4+
"type": "http",
5+
"url": "https://launchfastlegacyx.com/api/mcp/server",
6+
"note": "LaunchFast MCP server for Amazon product research. Codex handles OAuth through the LaunchFast MCP metadata flow. During authorization, localhost or 127.0.0.1 loopback callback URLs are expected for the local Codex client and should not be rewritten to the LaunchFast domain."
7+
}
8+
}
9+
}

plugins/Kanevry/session-orchestrator/hooks/enforce-commands.sh

Lines changed: 0 additions & 71 deletions
This file was deleted.

0 commit comments

Comments
 (0)