diff --git a/.agents/plugins/marketplace.json b/.agents/plugins/marketplace.json index b5f311a8..b0a0e897 100644 --- a/.agents/plugins/marketplace.json +++ b/.agents/plugins/marketplace.json @@ -220,18 +220,6 @@ }, "category": "开发工具" }, - { - "name": "oh-my-codex", - "source": { - "source": "local", - "path": "./plugins/codex/plugins/oh-my-codex" - }, - "policy": { - "installation": "AVAILABLE", - "authentication": "ON_INSTALL" - }, - "category": "开发工具" - }, { "name": "caveman", "source": { @@ -304,6 +292,18 @@ }, "category": "设计" }, + { + "name": "oh-my-codex", + "source": { + "source": "local", + "path": "./plugins/codex/plugins/oh-my-codex" + }, + "policy": { + "installation": "AVAILABLE", + "authentication": "ON_INSTALL" + }, + "category": "开发工具" + }, { "name": "shadcn", "source": { diff --git a/config/external-sources.lock.json b/config/external-sources.lock.json index 3c3061eb..a533daa8 100644 --- a/config/external-sources.lock.json +++ b/config/external-sources.lock.json @@ -15,8 +15,8 @@ "repo": "https://github.com/Yeachan-Heo/oh-my-codex.git", "ref": "main", "adapter": "codex-plugin", - "commit": "f947e3a41c062c25fd107686862b68ee5d1b66a5", - "syncedAt": "2026-07-05T16:00:01Z" + "commit": "f4110b0ad672c87f2ca31677ba7faee70332875a", + "syncedAt": "2026-07-08T16:00:01Z" }, { "id": "ui-ux-pro-max", @@ -51,8 +51,8 @@ "repo": "https://github.com/shadcn-ui/ui.git", "ref": "main", "adapter": "claude-skill", - "commit": "68e1f171aa8c6ce2e38cb9a7d1463d6bcf357e91", - "syncedAt": "2026-07-07T16:00:00Z" + "commit": "093a538453d3455159fb12a9cc897e39826f9522", + "syncedAt": "2026-07-08T16:00:01Z" }, { "id": "frontend-slides", @@ -87,8 +87,8 @@ "repo": "https://github.com/hugohe3/ppt-master.git", "ref": "main", "adapter": "claude-skill", - "commit": "0b3f73e5f0868171eef82baef44be660888f6c71", - "syncedAt": "2026-07-07T16:00:00Z" + "commit": "37427f940014c7d1aa122a3faf9cc16d64d573b6", + "syncedAt": "2026-07-08T16:00:01Z" }, { "id": "next-skills", @@ -96,8 +96,8 @@ "repo": "https://github.com/vercel/next.js.git", "ref": "canary", "adapter": "skill-collection", - "commit": "8b5df172e4908b68f7ef88e8ad2b98070baf9ced", - "syncedAt": "2026-07-07T16:00:00Z" + "commit": "3c0fd70fc04a9bf26e7c510df9a1b7d393ac65c4", + "syncedAt": "2026-07-08T16:00:01Z" } ] } diff --git a/plugins/codex/.agents/plugins/marketplace.json b/plugins/codex/.agents/plugins/marketplace.json index fffee562..34e912fd 100644 --- a/plugins/codex/.agents/plugins/marketplace.json +++ b/plugins/codex/.agents/plugins/marketplace.json @@ -220,18 +220,6 @@ }, "category": "开发工具" }, - { - "name": "oh-my-codex", - "source": { - "source": "local", - "path": "./plugins/oh-my-codex" - }, - "policy": { - "installation": "AVAILABLE", - "authentication": "ON_INSTALL" - }, - "category": "开发工具" - }, { "name": "caveman", "source": { @@ -304,6 +292,18 @@ }, "category": "设计" }, + { + "name": "oh-my-codex", + "source": { + "source": "local", + "path": "./plugins/oh-my-codex" + }, + "policy": { + "installation": "AVAILABLE", + "authentication": "ON_INSTALL" + }, + "category": "开发工具" + }, { "name": "shadcn", "source": { diff --git a/plugins/codex/plugins/mcp-playwright/MCP_SOURCE.json b/plugins/codex/plugins/mcp-playwright/MCP_SOURCE.json index 667d999f..68f3a6a4 100644 --- a/plugins/codex/plugins/mcp-playwright/MCP_SOURCE.json +++ b/plugins/codex/plugins/mcp-playwright/MCP_SOURCE.json @@ -3,5 +3,5 @@ "name": "playwright浏览器自动化操作", "version": "20260605", "keySource": "none", - "syncedAt": "2026-07-07T16:01:24Z" + "syncedAt": "2026-07-08T16:01:18Z" } diff --git a/plugins/codex/plugins/next-skills/THIRD_PARTY_SOURCE.json b/plugins/codex/plugins/next-skills/THIRD_PARTY_SOURCE.json index 24feb5e6..95aded7f 100644 --- a/plugins/codex/plugins/next-skills/THIRD_PARTY_SOURCE.json +++ b/plugins/codex/plugins/next-skills/THIRD_PARTY_SOURCE.json @@ -2,8 +2,8 @@ "sourceId": "next-skills", "repo": "https://github.com/vercel/next.js.git", "ref": "canary", - "commit": "8b5df172e4908b68f7ef88e8ad2b98070baf9ced", + "commit": "3c0fd70fc04a9bf26e7c510df9a1b7d393ac65c4", "adapter": "skill-collection", "sourcePath": "skills", - "syncedAt": "2026-07-07T16:00:00Z" + "syncedAt": "2026-07-08T16:00:01Z" } diff --git a/plugins/codex/plugins/oh-my-codex/.codex-plugin/plugin.json b/plugins/codex/plugins/oh-my-codex/.codex-plugin/plugin.json index 5e311066..a35fb119 100644 --- a/plugins/codex/plugins/oh-my-codex/.codex-plugin/plugin.json +++ b/plugins/codex/plugins/oh-my-codex/.codex-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "oh-my-codex", - "version": "0.19.0", + "version": "0.19.1", "description": "oh-my-codex 是 Codex CLI 的多 Agent 编排、结构化工作流、插件级 hooks、MCP 和 HUD 扩展插件。", "author": { "name": "Yeachan Heo", diff --git a/plugins/codex/plugins/oh-my-codex/THIRD_PARTY_SOURCE.json b/plugins/codex/plugins/oh-my-codex/THIRD_PARTY_SOURCE.json index 7fab0f05..84607bc0 100644 --- a/plugins/codex/plugins/oh-my-codex/THIRD_PARTY_SOURCE.json +++ b/plugins/codex/plugins/oh-my-codex/THIRD_PARTY_SOURCE.json @@ -2,8 +2,8 @@ "sourceId": "oh-my-codex", "repo": "https://github.com/Yeachan-Heo/oh-my-codex.git", "ref": "main", - "commit": "f947e3a41c062c25fd107686862b68ee5d1b66a5", + "commit": "f4110b0ad672c87f2ca31677ba7faee70332875a", "adapter": "codex-plugin", "sourcePath": "plugins/oh-my-codex", - "syncedAt": "2026-07-05T16:00:01Z" + "syncedAt": "2026-07-08T16:00:01Z" } diff --git a/plugins/codex/plugins/ppt-master/THIRD_PARTY_SOURCE.json b/plugins/codex/plugins/ppt-master/THIRD_PARTY_SOURCE.json index efbdda06..d163135e 100644 --- a/plugins/codex/plugins/ppt-master/THIRD_PARTY_SOURCE.json +++ b/plugins/codex/plugins/ppt-master/THIRD_PARTY_SOURCE.json @@ -2,8 +2,8 @@ "sourceId": "ppt-master", "repo": "https://github.com/hugohe3/ppt-master.git", "ref": "main", - "commit": "0b3f73e5f0868171eef82baef44be660888f6c71", + "commit": "37427f940014c7d1aa122a3faf9cc16d64d573b6", "adapter": "claude-skill", "sourcePath": "skills/ppt-master", - "syncedAt": "2026-07-07T16:00:00Z" + "syncedAt": "2026-07-08T16:00:01Z" } diff --git a/plugins/codex/plugins/ppt-master/skills/ppt-master/SKILL.md b/plugins/codex/plugins/ppt-master/skills/ppt-master/SKILL.md index 3773a5e7..3f2a477f 100644 --- a/plugins/codex/plugins/ppt-master/skills/ppt-master/SKILL.md +++ b/plugins/codex/plugins/ppt-master/skills/ppt-master/SKILL.md @@ -642,6 +642,8 @@ python3 ${SKILL_DIR}/scripts/svg_to_pptx.py # exports/__svg.pptx ← SVG preview pptx (reads svg_final/) # Add --native-objects to emit real editable chart/table objects instead of flattened shapes: # exports/__native_charts.pptx ← native chart/table objects (data-pptx-native markers) +# Re-export with --recorded-narration audio (generate-audio workflow) embeds per-slide narration: +# exports/__narrated.pptx ← narrated pptx (embedded audio + auto-advance timings) ``` > The native pptx consumes `svg_output/` directly so the converter can preserve diff --git a/plugins/codex/plugins/ppt-master/skills/ppt-master/scripts/docs/svg-pipeline.md b/plugins/codex/plugins/ppt-master/skills/ppt-master/scripts/docs/svg-pipeline.md index 6722df32..849c36e6 100644 --- a/plugins/codex/plugins/ppt-master/skills/ppt-master/scripts/docs/svg-pipeline.md +++ b/plugins/codex/plugins/ppt-master/skills/ppt-master/scripts/docs/svg-pipeline.md @@ -69,6 +69,7 @@ Behavior: - `--recorded-narration audio` prepares PowerPoint's "recorded timings and narrations": every slide must have matching `m4a` / `mp3` / `wav` audio, `ffprobe` must read every duration, and `--animation-trigger on-click` is rejected - `--recorded-narration audio` keeps speaker notes, embeds each matching audio file, and writes slide auto-advance timings from audio duration - `--narration-audio-dir audio` is the lower-level embedding path: it embeds whatever files match and allows partial audio coverage + - Either narration flag names the default-flow export `__narrated.pptx`, telling it apart from silent exports in the same directory - This is intended for direct PowerPoint video export with "Use recorded timings and narrations" - Long-audio import and automatic long-audio splitting are not supported; keep narration assets page-level - Voice choices can be listed with `python3 scripts/notes_to_audio.py --list-common-voices`, `python3 scripts/notes_to_audio.py --list-voices --locale zh-CN`, or provider-specific `--provider --list-voices` diff --git a/plugins/codex/plugins/ppt-master/skills/ppt-master/scripts/project_manager.py b/plugins/codex/plugins/ppt-master/skills/ppt-master/scripts/project_manager.py index 4512650a..ac92bb8d 100644 --- a/plugins/codex/plugins/ppt-master/skills/ppt-master/scripts/project_manager.py +++ b/plugins/codex/plugins/ppt-master/skills/ppt-master/scripts/project_manager.py @@ -175,7 +175,7 @@ class ProjectManager: "- `live_preview/`: browser preview runtime files and history (lock.json, server.log, edits.jsonl, annotations.jsonl)\n" "- `sources/`: source materials and normalized markdown\n" "- `analysis/`: machine-extracted intermediate analysis (PPTX intake, image_analysis.csv) — the pipeline's canonical must-read source/asset facts\n" - "- `exports/`: main native pptx (timestamped); `_svg.pptx` sibling added with `--svg-snapshot`, `_native_charts.pptx` name with `--native-objects`\n" + "- `exports/`: main native pptx (timestamped); `_svg.pptx` sibling added with `--svg-snapshot`, `_native_charts.pptx` name with `--native-objects`, `_narrated.pptx` name when narration audio is embedded\n" "- `backup//`: svg_output/ archive (always written in default-flow mode; safe to delete old timestamps)\n" ), encoding="utf-8", diff --git a/plugins/codex/plugins/ppt-master/skills/ppt-master/scripts/svg_to_pptx/pptx_package/cli.py b/plugins/codex/plugins/ppt-master/skills/ppt-master/scripts/svg_to_pptx/pptx_package/cli.py index ef4d3a7e..17946303 100644 --- a/plugins/codex/plugins/ppt-master/skills/ppt-master/scripts/svg_to_pptx/pptx_package/cli.py +++ b/plugins/codex/plugins/ppt-master/skills/ppt-master/scripts/svg_to_pptx/pptx_package/cli.py @@ -255,11 +255,14 @@ Recorded narration: parser.add_argument('--no-notes', action='store_true', help='Disable speaker notes embedding (enabled by default)') parser.add_argument('--narration-audio-dir', type=str, default=None, - help='Low-level audio embedding from this directory; allows partial matches') + help='Low-level audio embedding from this directory; allows partial matches. ' + 'Default-flow exports get the _narrated name suffix.') parser.add_argument('--use-narration-timings', action='store_true', help='Set slide auto-advance timings from narration audio durations') parser.add_argument('--recorded-narration', type=str, default=None, - help='Prepare PowerPoint recorded timings and narrations from a complete audio directory') + help='Prepare PowerPoint recorded timings and narrations from a complete audio ' + 'directory. Default-flow exports get the _narrated name suffix ' + '(__narrated.pptx) to tell them apart from silent exports.') parser.add_argument('--narration-padding', type=float, default=0.5, help='Seconds to add after each narration before auto-advance (default: 0.5)') @@ -361,10 +364,13 @@ Recorded narration: # --native-objects yields a materially different file (real editable # PowerPoint chart/table objects instead of flattened shapes), so mark # it in the default-flow name to tell it apart from a plain shape export - # and the _svg snapshot. Flag-driven (not content-sniffed) so the name is - # predictable; an explicit -o keeps the caller's exact name untouched. + # and the _svg snapshot. Narration flags likewise mark _narrated (audio + # embedded per slide + auto-advance timings); both entry points share + # the tag. Flag-driven (not content-sniffed) so the name is predictable; + # an explicit -o keeps the caller's exact name untouched. native_tag = "_native_charts" if args.native_objects else "" - native_path = exports_dir / f"{project_name}_{timestamp}{native_tag}.pptx" + narrated_tag = "_narrated" if (args.recorded_narration or args.narration_audio_dir) else "" + native_path = exports_dir / f"{project_name}_{timestamp}{native_tag}{narrated_tag}.pptx" # svg_output/ snapshot always goes under backup// in default-flow # mode (no -o). --svg-snapshot only controls the optional legacy # SVG-rendered pptx, which now sits alongside the native pptx in diff --git a/plugins/codex/plugins/ppt-master/skills/ppt-master/workflows/generate-audio.md b/plugins/codex/plugins/ppt-master/skills/ppt-master/workflows/generate-audio.md index cba0ffb2..7bdc90f9 100644 --- a/plugins/codex/plugins/ppt-master/skills/ppt-master/workflows/generate-audio.md +++ b/plugins/codex/plugins/ppt-master/skills/ppt-master/workflows/generate-audio.md @@ -149,7 +149,7 @@ python3 skills/ppt-master/scripts/svg_to_pptx.py \ If `notes_to_audio.py` errors with a missing dependency or missing provider API key, fix the prerequisite and re-run — do NOT swallow the error. -`--recorded-narration audio` prepares PowerPoint's recorded timings and narrations: every slide must have a matching supported audio file, every duration must be readable by `ffprobe`, and object animations must not use `--animation-trigger on-click`. Use `after-previous` or `with-previous` for narrated/video export. +`--recorded-narration audio` prepares PowerPoint's recorded timings and narrations: every slide must have a matching supported audio file, every duration must be readable by `ffprobe`, and object animations must not use `--animation-trigger on-click`. Use `after-previous` or `with-previous` for narrated/video export. The re-export is saved as `exports/__narrated.pptx`, telling it apart from silent exports. --- diff --git a/plugins/codex/plugins/shadcn/THIRD_PARTY_SOURCE.json b/plugins/codex/plugins/shadcn/THIRD_PARTY_SOURCE.json index 9a385e1b..99f98b52 100644 --- a/plugins/codex/plugins/shadcn/THIRD_PARTY_SOURCE.json +++ b/plugins/codex/plugins/shadcn/THIRD_PARTY_SOURCE.json @@ -2,8 +2,8 @@ "sourceId": "shadcn", "repo": "https://github.com/shadcn-ui/ui.git", "ref": "main", - "commit": "68e1f171aa8c6ce2e38cb9a7d1463d6bcf357e91", + "commit": "093a538453d3455159fb12a9cc897e39826f9522", "adapter": "claude-skill", "sourcePath": "skills/shadcn", - "syncedAt": "2026-07-07T16:00:00Z" + "syncedAt": "2026-07-08T16:00:01Z" }