feat(codex): add plugin list enable disable commands#83293
Conversation
|
Codex review: needs maintainer review before merge. Workflow note: Future ClawSweeper reviews update this same comment in place. How this review workflow works
Summary Reproducibility: not applicable. this is a feature PR, not a bug report. The PR body includes terminal after-fix proof for list, disable, enable, and final persisted state against a temporary config. PR rating Rank-up moves:
What the crustacean ranks mean
Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics. PR egg Rarity: 💎 rare. What is this egg doing here?
Real behavior proof Risk before merge
Maintainer options:
Next step before merge Security Review detailsBest possible solution: Have a maintainer decide whether to land this scoped owner/operator.admin-gated list/enable/disable surface while leaving broader install, OAuth, and marketplace lifecycle work to a separate design path. Do we have a high-confidence way to reproduce the issue? Not applicable: this is a feature PR, not a bug report. The PR body includes terminal after-fix proof for list, disable, enable, and final persisted state against a temporary config. Is this the best way to solve the issue? Yes, pending maintainer approval: the patch keeps scope to configured entries, escapes config-derived output, documents refresh behavior, and gates persistent writes to owner or Label justifications:
What I checked:
Likely related people:
Codex review notes: model gpt-5.5, reasoning high; reviewed against e00cb664ad4b. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 4bae6153ae
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
chat surface - /codex (no-arg) returns a 2x2 button picker (plugins / permissions / account / help) - /codex fast menu, /codex permissions menu, /codex computer-use menu open sub-pickers - Telegram callback handler dispatches cdx_* callback_data to a new picker library at extensions/telegram/src/codex-picker-buttons.ts; navigation buttons editMessage in place, leaf actions stay on the existing tgcmd: synthesis path so they fire as real chat commands and pass through mainline's canMutateCodexPlugins auth gate from openclaw#83293. - No new plugin verbs beyond canonical list / enable / disable; toggle / remove / add are intentionally not picker-exposed (per maintainer guidance on the prior shape of openclaw#82224). - Rebased on top of openclaw#83293 (mainline list/enable/disable). openclaw#82219 marketplace work is excluded from this PR. Closes openclaw#82218 Related openclaw#82219, openclaw#83293
* feat(codex): add plugin enable disable list commands * fix(codex): escape plugin management output * test(codex): narrow plugin command coverage * fix(codex): gate plugin management writes * test(codex): type command plugin context * docs(codex): document plugin management commands
* feat(codex): add plugin enable disable list commands * fix(codex): escape plugin management output * test(codex): narrow plugin command coverage * fix(codex): gate plugin management writes * test(codex): type command plugin context * docs(codex): document plugin management commands
* feat(codex): add plugin enable disable list commands * fix(codex): escape plugin management output * test(codex): narrow plugin command coverage * fix(codex): gate plugin management writes * test(codex): type command plugin context * docs(codex): document plugin management commands
* feat(codex): add plugin enable disable list commands * fix(codex): escape plugin management output * test(codex): narrow plugin command coverage * fix(codex): gate plugin management writes * test(codex): type command plugin context * docs(codex): document plugin management commands
* feat(codex): add plugin enable disable list commands * fix(codex): escape plugin management output * test(codex): narrow plugin command coverage * fix(codex): gate plugin management writes * test(codex): type command plugin context * docs(codex): document plugin management commands
* feat(codex): add plugin enable disable list commands * fix(codex): escape plugin management output * test(codex): narrow plugin command coverage * fix(codex): gate plugin management writes * test(codex): type command plugin context * docs(codex): document plugin management commands
* feat(codex): add plugin enable disable list commands * fix(codex): escape plugin management output * test(codex): narrow plugin command coverage * fix(codex): gate plugin management writes * test(codex): type command plugin context * docs(codex): document plugin management commands
* feat(codex): add plugin enable disable list commands * fix(codex): escape plugin management output * test(codex): narrow plugin command coverage * fix(codex): gate plugin management writes * test(codex): type command plugin context * docs(codex): document plugin management commands
chat surface - /codex (no-arg) returns a 2x2 button picker (plugins / permissions / account / help) - /codex fast menu, /codex permissions menu, /codex computer-use menu open sub-pickers - Telegram callback handler dispatches cdx_* callback_data to a new picker library at extensions/telegram/src/codex-picker-buttons.ts; navigation buttons editMessage in place, leaf actions stay on the existing tgcmd: synthesis path so they fire as real chat commands and pass through mainline's canMutateCodexPlugins auth gate from openclaw#83293. - No new plugin verbs beyond canonical list / enable / disable; toggle / remove / add are intentionally not picker-exposed (per maintainer guidance on the prior shape of openclaw#82224). - Rebased on top of openclaw#83293 (mainline list/enable/disable). openclaw#82219 marketplace work is excluded from this PR. Closes openclaw#82218 Related openclaw#82219, openclaw#83293
chat surface - /codex (no-arg) returns a 2x2 button picker (plugins / permissions / account / help) - /codex fast menu, /codex permissions menu, /codex computer-use menu open sub-pickers - Telegram callback handler dispatches cdx_* callback_data to a new picker library at extensions/telegram/src/codex-picker-buttons.ts; navigation buttons editMessage in place, leaf actions stay on the existing tgcmd: synthesis path so they fire as real chat commands and pass through mainline's canMutateCodexPlugins auth gate from openclaw#83293. - No new plugin verbs beyond canonical list / enable / disable; toggle / remove / add are intentionally not picker-exposed (per maintainer guidance on the prior shape of openclaw#82224). - Rebased on top of openclaw#83293 (mainline list/enable/disable). openclaw#82219 marketplace work is excluded from this PR. Closes openclaw#82218 Related openclaw#82219, openclaw#83293
chat surface - /codex (no-arg) returns a 2x2 button picker (plugins / permissions / account / help) - /codex fast menu, /codex permissions menu, /codex computer-use menu open sub-pickers - Telegram callback handler dispatches cdx_* callback_data to a new picker library at extensions/telegram/src/codex-picker-buttons.ts; navigation buttons editMessage in place, leaf actions stay on the existing tgcmd: synthesis path so they fire as real chat commands and pass through mainline's canMutateCodexPlugins auth gate from openclaw#83293. - No new plugin verbs beyond canonical list / enable / disable; toggle / remove / add are intentionally not picker-exposed (per maintainer guidance on the prior shape of openclaw#82224). - Rebased on top of openclaw#83293 (mainline list/enable/disable). openclaw#82219 marketplace work is excluded from this PR. Closes openclaw#82218 Related openclaw#82219, openclaw#83293
chat surface - /codex (no-arg) returns a 2x2 button picker (plugins / permissions / account / help) - /codex fast menu, /codex permissions menu, /codex computer-use menu open sub-pickers - Telegram callback handler dispatches cdx_* callback_data to a new picker library at extensions/telegram/src/codex-picker-buttons.ts; navigation buttons editMessage in place, leaf actions stay on the existing tgcmd: synthesis path so they fire as real chat commands and pass through mainline's canMutateCodexPlugins auth gate from openclaw#83293. - No new plugin verbs beyond canonical list / enable / disable; toggle / remove / add are intentionally not picker-exposed (per maintainer guidance on the prior shape of openclaw#82224). - Rebased on top of openclaw#83293 (mainline list/enable/disable). openclaw#82219 marketplace work is excluded from this PR. Closes openclaw#82218 Related openclaw#82219, openclaw#83293
* feat(codex): add plugin enable disable list commands * fix(codex): escape plugin management output * test(codex): narrow plugin command coverage * fix(codex): gate plugin management writes * test(codex): type command plugin context * docs(codex): document plugin management commands
* feat(codex): add plugin enable disable list commands * fix(codex): escape plugin management output * test(codex): narrow plugin command coverage * fix(codex): gate plugin management writes * test(codex): type command plugin context * docs(codex): document plugin management commands
* feat(codex): add plugin enable disable list commands * fix(codex): escape plugin management output * test(codex): narrow plugin command coverage * fix(codex): gate plugin management writes * test(codex): type command plugin context * docs(codex): document plugin management commands
Summary
/codex plugins listto show configured Codex sub-plugins fromplugins.entries.codex.config.codexPlugins.plugins./codex plugins enable <name>and/codex plugins disable <name>to update the enabled flag inopenclaw.json.list,enable, anddisable; unsupported subcommands report help without advertising add/remove/toggle/menu.Verification
node scripts/run-vitest.mjs extensions/codex/src/command-plugins-management.test.ts extensions/codex/src/commands.test.tsnpx oxfmt --check extensions/codex/src/command-plugins-management.ts extensions/codex/src/command-plugins-management.test.tsnode scripts/run-bundled-extension-oxlint.mjsgit diff --checkpnpm docs:listpnpm format:docs:checkpnpm docs:check-mdxReal behavior proof
Behavior addressed:
/codex plugins list,/codex plugins enable <name>, and/codex plugins disable <name>work through the Codex command surface and mutate the configured Codex sub-plugin policy.Real environment tested: Local linked OpenClaw worktree on macOS, branch
codex/plugins-list-enable-disable, using a temporaryOPENCLAW_CONFIG_PATHwith a configuredgoogle-calendarCodex sub-plugin entry.Exact steps or command run after this patch:
node --import tsx --input-type=module -e '<script created temp openclaw.json, loaded real config with loadConfig(), mutated it with mutateConfigFile(), and invoked handleCodexPluginsSubcommand for list, disable google-calendar, list, enable google-calendar, list>'Evidence after fix: Terminal output from the live config-mutation probe:
Observed result after fix: The Google Calendar Codex sub-plugin starts listed as
ON,/codex plugins disable google-calendarchanges the persisted policy toOFF, and/codex plugins enable google-calendarchanges it back toONwithfinal enabled=truein the temporaryopenclaw.json.What was not tested: A real Google Calendar API call was not made; this proof covers OpenClaw's Codex plugin policy command path and persisted config mutation.