Skip to content

feat(codex): enable native plugin app support#78733

Merged
kevinslin merged 40 commits into
openclaw:mainfrom
kevinslin:dev/kevinlin/codex-native-plugin-support
May 8, 2026
Merged

feat(codex): enable native plugin app support#78733
kevinslin merged 40 commits into
openclaw:mainfrom
kevinslin:dev/kevinlin/codex-native-plugin-support

Conversation

@kevinslin

@kevinslin kevinslin commented May 7, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Problem: OpenClaw's Codex integration could not expose migrated Codex plugins as native Codex app capabilities in the same harness thread.
  • Why it matters: the old bridge shape adds extra thread semantics, latency, and duplicated app/plugin activation paths.
  • What changed: adds explicit codexPlugins config, curated plugin inventory/activation, per-session Codex app config, plugin-scoped elicitation handling, migration support, tests, docs, changelog coverage, and a follow-up hardening fix for PR review feedback.

Change Type (select all)

  • Bug fix
  • Feature
  • Refactor required for the fix
  • Docs
  • Security hardening
  • Chore/infra

Scope (select all touched areas)

  • Gateway / orchestration
  • Skills / tool execution
  • Auth / tokens
  • Memory / storage
  • Integrations
  • API / contracts
  • UI / DX
  • CI/CD / infra

Linked Issue/PR

  • Closes #
  • Related #
  • This PR fixes a bug or regression

Real behavior proof (required for external PRs)

  • Behavior or issue addressed: migrated Codex plugins can be enabled for the native Codex app-server path and invoked through the same Codex harness thread policy surface.

  • Real environment tested: local macOS OpenClaw dev gateway/TUI against the user's live Codex app-server/plugin install state.

  • Exact steps or command run after this patch: replayed all milestone Showboat proofs in .mem/main/proofs/demo-1-1-codex-plugin-config-schema.md through .mem/main/proofs/demo-1-6-codex-plugin-docs.md; ran Codex migration for google-calendar; enabled allow_destructive_actions; created and then searched for OpenClaw gerbil proof 20260507T060415Z through the live dev gateway/TUI; verified .mem/main/proofs/demo-1-7-codex-calendar-live-proof.md with uvx showboat verify .mem/main/proofs/demo-1-7-codex-calendar-live-proof.md.

  • Evidence after fix: copied live output from the Showboat replay and gateway/TUI proof. Fresh destructive Google Calendar proof is captured in .mem/main/proofs/demo-1-7-codex-calendar-live-proof.md and verified with uvx showboat verify .mem/main/proofs/demo-1-7-codex-calendar-live-proof.md. The proof contents are included below so the live behavior is visible in the PR body, not just linked from a local artifact.

  • Observed result after fix: live output showed config loads, inventory/activation resolves the installed Google Calendar plugin, Codex thread app config is built, plugin elicitations are accepted/declined according to allow_destructive_actions, migration writes explicit plugin config and calls plugin/install, documented config boots a dev gateway, TUI connects to that gateway, and the same Codex harness thread created then found a real Google Calendar event.

  • What was not tested: broader destructive-action coverage across every supported third-party plugin; the live external write proof used Google Calendar.

  • Before evidence: N/A; this is a new feature path.

CleanShot 2026-05-07 at 00 08 51@2x

Scenario Tested

  • PASS invalid-marketplace-startup: gateway_exit=1; invalid_marketplace_error_seen
  • PASS disabled-read: agent_exit=0; calendar_search_not_exposed
  • PASS disabled-plugin-enabled-read: agent_exit=0; calendar_search_not_exposed
  • PASS global-destructive-true-plugin-unset: agent_exit=0; calendar_search_succeeded; calendar_create_succeeded
  • PASS global-destructive-true-plugin-false: agent_exit=0; calendar_search_succeeded; calendar_create_failed_closed
  • PASS global-destructive-false-plugin-true: agent_exit=0; calendar_search_succeeded; calendar_create_succeeded
  • PASS global-destructive-false-plugin-unset: agent_exit=0; calendar_search_succeeded; calendar_create_failed_closed
  • PASS manual-github-config-installs: agent_exit=0; github_tool_started; github_plugin_enabled_after_run
Live Google Calendar Showboat proof contents

OpenClaw Codex Calendar Plugin Proof

2026-05-07T06:09:23Z by Showboat 0.6.1

This proof exercises the live OpenClaw dev gateway and TUI. It verifies that the Codex harness session used native Codex app/plugin support for Google Calendar, with destructive actions allowed in the dev profile, and that the created calendar event can be found again through the same gateway/TUI session.

jq '{
  codexEnabled: .plugins.entries.codex.enabled,
  codexPlugins: {
    enabled: .plugins.entries.codex.config.codexPlugins.enabled,
    allow_destructive_actions: .plugins.entries.codex.config.codexPlugins.allow_destructive_actions,
    googleCalendar: .plugins.entries.codex.config.codexPlugins.plugins["google-calendar"]
  },
  appServer: .plugins.entries.codex.config.appServer
}' /Users/kevinlin/.openclaw-dev/openclaw.json
{
  "codexEnabled": true,
  "codexPlugins": {
    "enabled": true,
    "allow_destructive_actions": true,
    "googleCalendar": {
      "enabled": true,
      "marketplaceName": "openai-curated",
      "pluginName": "google-calendar",
      "allow_destructive_actions": true
    }
  },
  "appServer": {
    "mode": "guardian",
    "sandbox": "workspace-write",
    "approvalPolicy": "on-request",
    "approvalsReviewer": "auto_review"
  }
}
rg -n "^\[features\]|^apps = true|^codex_hooks = true|^\[apps\._default\]|^\[plugins\.\"google-calendar@openai-curated\"\]|^enabled = true" /Users/kevinlin/.openclaw-dev/agents/dev/agent/codex-home/config.toml
1:[features]
2:apps = true
3:codex_hooks = true
5:[apps._default]
6:enabled = true
9:enabled = true
11:[plugins."google-calendar@openai-curated"]
12:enabled = true
15:enabled = true
18:enabled = true
21:enabled = true
24:enabled = true
27:enabled = true
30:enabled = true
jq '{
  threadId,
  googleCalendarApp: .pluginAppPolicyContext.apps["connector_947e0d954944416db111db556030eea6"],
  pluginAppsFingerprint,
  pluginAppsInputFingerprint
}' /Users/kevinlin/.openclaw-dev/agents/dev/sessions/c4ac8930-e4d6-4509-af01-64a5028f425b.jsonl.codex-app-server.json
{
  "threadId": "019e0109-e0a3-7151-85ea-d1e803393697",
  "googleCalendarApp": {
    "appId": "connector_947e0d954944416db111db556030eea6",
    "configKey": "google-calendar",
    "marketplaceName": "openai-curated",
    "pluginName": "google-calendar",
    "allowDestructiveActions": true,
    "mcpServerNames": []
  },
  "pluginAppsFingerprint": "1cf4263fc6dfdb46519fa62375f73ba1db6cd4a0464bf4f2a3b448262cc6e947",
  "pluginAppsInputFingerprint": "2bee5e716b2c123738272ff6cbe8cb0e497603f6653df49c0225e0db6f07beb0"
}
jq '.summary, (.items[] | select(.id == "plugin:google-calendar" or .id == "config:codex-plugins") | {id,status,reason,details})' /Users/kevinlin/.openclaw-dev/migration/codex/2026-05-07T05-35-50.227Z/report.json
{
  "total": 120,
  "planned": 0,
  "migrated": 3,
  "skipped": 117,
  "conflicts": 0,
  "errors": 0,
  "sensitive": 0
}
{
  "id": "plugin:google-calendar",
  "status": "migrated",
  "reason": "already active",
  "details": {
    "configKey": "google-calendar",
    "marketplaceName": "openai-curated",
    "pluginName": "google-calendar",
    "sourceInstalled": true,
    "sourceEnabled": true,
    "code": "already_active",
    "activationReason": "already_active",
    "installed": true,
    "enabled": true,
    "installAttempted": true,
    "diagnostics": []
  }
}
{
  "id": "config:codex-plugins",
  "status": "migrated",
  "reason": null,
  "details": {
    "path": [
      "plugins",
      "entries",
      "codex"
    ],
    "value": {
      "enabled": true,
      "config": {
        "codexPlugins": {
          "enabled": true,
          "allow_destructive_actions": true,
          "plugins": {
            "google-calendar": {
              "enabled": true,
              "marketplaceName": "openai-curated",
              "pluginName": "google-calendar"
            }
          }
        }
      }
    }
  }
}
node <<'NODE'
const fs = require("node:fs");
const log = "/tmp/openclaw/openclaw-2026-05-06.log";
const wanted = /codex_apps\.google calendar_(search_events|create_event)|Found event id|Event id/;
fs.readFileSync(log, "utf8").trimEnd().split("\n").forEach((line, index) => {
  try {
    const entry = JSON.parse(line);
    const message = entry.message || entry["1"] || "";
    if (wanted.test(message)) {
      console.log(`${index + 1}: ${message}`);
    }
  } catch {}
});
NODE
1869: → event agent seq=targeted clients=1 targets=1 run=d9385f2a…4618 agent=dev session=codex-plugin-proof-20260507t060415z stream=tool aseq=32 tool=start:codex_apps.google calendar_search_events call=call_UP5qoAu…zQnF
1876: → event agent seq=targeted clients=1 targets=1 run=d9385f2a…4618 agent=dev session=codex-plugin-proof-20260507t060415z stream=tool aseq=37 tool=result:codex_apps.google calendar_search_events call=call_UP5qoAu…zQnF err=false
1889: → event agent seq=targeted clients=1 targets=1 run=d9385f2a…4618 agent=dev session=codex-plugin-proof-20260507t060415z stream=tool aseq=50 tool=start:codex_apps.google calendar_create_event call=call_EqoKr9w…frJ0
1894: → event agent seq=targeted clients=1 targets=1 run=d9385f2a…4618 agent=dev session=codex-plugin-proof-20260507t060415z stream=tool aseq=55 tool=result:codex_apps.google calendar_create_event call=call_EqoKr9w…frJ0 err=false
1939: → event agent seq=per-client clients=1 run=d9385f2a…4618 agent=dev session=codex-plugin-proof-20260507t060415z stream=assistant aseq=99 text=Event id: `qjq1rfttlb1smrap3brmuuo8lo` Event time: Friday, May 8, 2026, 9:00 AM to 9:15 AM `America/Los_Angeles`
1981: → event agent seq=targeted clients=1 targets=1 run=da03559b…b100 agent=dev session=codex-plugin-proof-20260507t060415z stream=tool aseq=26 tool=start:codex_apps.google calendar_search_events call=call_DR6e2d5…DHtc meta=OpenClaw gerbil proof 20260507T060415Z
1986: → event agent seq=targeted clients=1 targets=1 run=da03559b…b100 agent=dev session=codex-plugin-proof-20260507t060415z stream=tool aseq=31 tool=result:codex_apps.google calendar_search_events call=call_DR6e2d5…DHtc meta=OpenClaw gerbil proof 20260507T060415Z err=false
1994: → event agent seq=per-client clients=1 run=da03559b…b100 agent=dev session=codex-plugin-proof-20260507t060415z stream=assistant aseq=39 text=Found event id: `qjq1rfttlb1smrap3brmuuo8lo` Title: `OpenClaw gerbil proof 20260507T060415Z` Start: `2026-05-08T09:00:00-07:00` End: `2026-05-08T09:15:00-07:00`

Root Cause (if applicable)

  • Root cause: N/A.
  • Missing detection / guardrail: N/A.
  • Contributing context (if known): N/A.

Regression Test Plan (if applicable)

  • Coverage level that should have caught this:
    • Unit test
    • Seam / integration test
    • End-to-end test
    • Existing coverage already sufficient
  • Target test or file: extensions/codex/src/app-server/*plugin*.test.ts, extensions/codex/src/app-server/run-attempt.test.ts, extensions/codex/src/migration/provider.test.ts, src/commands/migrate*.test.ts.
  • Scenario the test should lock in: config defaults and validation, inventory/cache behavior, activation calls, thread app config, plugin elicitation policy, migration plugin selection/apply behavior, forced post-install app-list refreshes, migration conflict guards, and preservation of explicit destructive-action policy.
  • Why this is the smallest reliable guardrail: each test owns one contract seam while Showboat proves the composed live gateway/TUI behavior.
  • Existing test that already covers this (if any): N/A.
  • If no new test is added, why not: N/A.

User-visible / Behavior Changes

  • Adds plugins.entries.codex.config.codexPlugins for explicit native Codex plugin enablement.
  • Adds allow_destructive_actions, defaulting false globally and per plugin.
  • openclaw migrate --from codex --plugin <name> can migrate selected source-installed curated plugins into explicit OpenClaw Codex plugin config.
  • Native plugin app availability is configured at Codex harness session start, not recomputed every turn.

Diagram (if applicable)

Migration:
[source Codex home] -> [plugin/list + app/list] -> [plugin/install selected curated plugin] -> [codexPlugins config]

Runtime:
[OpenClaw codexPlugins config] -> [Codex app-server inventory/cache] -> [thread apps config] -> [same Codex harness thread]

Elicitation:
[plugin app request] -> [active turn + app policy match] -> [allow_destructive_actions true/false] -> [accept/decline]

Security Impact (required)

  • New permissions/capabilities? (Yes/No) Yes
  • Secrets/tokens handling changed? (Yes/No) No
  • New/changed network calls? (Yes/No) Yes
  • Command/tool execution surface changed? (Yes/No) Yes
  • Data access scope changed? (Yes/No) Yes
  • If any Yes, explain risk + mitigation: the feature exposes migrated Codex app/plugin capabilities to the Codex harness thread. Mitigations are explicit codexPlugins entries, only openai-curated migrated plugin activation in v1, no wildcard config, _default app disablement, fail-closed destructive-action elicitation policy unless explicitly enabled, and no-overwrite migration conflict handling for existing plugin config.

Repro + Verification

Environment

  • OS: macOS local dev machine
  • Runtime/container: Node 22 / pnpm OpenClaw dev checkout
  • Model/provider: Codex app-server via local Codex install
  • Integration/channel (if any): OpenClaw dev gateway + TUI, Google Calendar plugin as the source-installed curated plugin for proof
  • Relevant config (redacted): isolated .mem/integ/tmp/codex-plugin-* OpenClaw configs with plugins.entries.codex.config.codexPlugins.enabled: true

Steps

  1. Rebased the branch onto current origin/main.
  2. Ran post-rebase sanity: git diff --check origin/main...HEAD.
  3. Ran pnpm test extensions/codex/src/migration/provider.test.ts src/commands/migrate.test.ts src/commands/migrate/selection.test.ts extensions/codex/src/app-server/app-inventory-cache.test.ts extensions/codex/src/app-server/plugin-activation.test.ts extensions/codex/src/app-server/plugin-inventory.test.ts extensions/codex/src/app-server/plugin-thread-config.test.ts extensions/codex/src/app-server/run-attempt.test.ts extensions/codex/src/app-server/elicitation-bridge.test.ts.
  4. Ran pnpm check:changed.
  5. Replayed all six Showboat milestone proofs against live app-server/gateway/TUI behavior.
  6. Ran node scripts/run-node.mjs --dev migrate apply codex --from /Users/kevinlin/.codex --plugin google-calendar --overwrite, then created and searched for OpenClaw gerbil proof 20260507T060415Z through the live dev gateway/TUI with allow_destructive_actions: true.

Expected

  • Native Codex plugin config is accepted, migrated plugins resolve through app-server inventory, gateway health loads Codex with no plugin errors, TUI connects to the live gateway, and Google Calendar can create and find the requested event from the same Codex harness thread.

Actual

  • Full Showboat replay finished with showboat_all_verified=true; the fresh Calendar proof created event qjq1rfttlb1smrap3brmuuo8lo and the follow-up search found the same id/title/start/end.

Evidence

Attach at least one:

  • Failing test/log before + passing after
  • Trace/log snippets
  • Screenshot/recording
  • Perf numbers (if relevant)

Human Verification (required)

What you personally verified (not just CI), and how:

  • Verified scenarios: config schema, live inventory/cache, activation, thread app setup, elicitation policy, migration, docs, isolated gateway health, TUI connection, and live Google Calendar create/search behavior.
  • Edge cases checked: wildcard config rejection, disabled plugin defaults, non-openai-curated validation, stale app-list cache refresh behavior, forced post-install app-list refresh, destructive policy false/true, unrelated elicitation fallthrough, unsafe/ambiguous elicitation decline paths, migration without wildcard config, migration conflict guard, and preserving existing destructive-action policy with overwrite.
  • What you did not verify: destructive external writes for every supported plugin; Google Calendar was the live external-service proof.

Review Conversations

  • I replied to or resolved every bot review conversation I addressed in this PR.
  • I left unresolved only the conversations that still need reviewer or maintainer judgment.

Compatibility / Migration

  • Backward compatible? (Yes/No) Yes
  • Config/env changes? (Yes/No) Yes
  • Migration needed? (Yes/No) Optional
  • If yes, exact upgrade steps: users migrating Codex plugins can run openclaw migrate --from codex --plugin <name>; the migration writes explicit codexPlugins config and calls plugin/install for selected source-installed curated plugins. Existing codexPlugins config requires --overwrite, and overwrite preserves an explicit global allow_destructive_actions policy.

Risks and Mitigations

List only real risks for this PR. Add/remove entries as needed. If none, write None.

  • Risk: app-list calls are expensive.
    • Mitigation: app inventory is cached for one hour and refreshes asynchronously.
  • Risk: destructive plugin actions could be approved without user interaction.
    • Mitigation: policy defaults fail closed and requires explicit allow_destructive_actions: true.
  • Risk: arbitrary plugin installation through config.
    • Mitigation: v1 only activates explicit migration-observed openai-curated plugins and has no wildcard or install switch.
  • Risk: migration could overwrite existing plugin policy.
    • Mitigation: migration now conflicts without --overwrite and preserves explicit destructive-action policy when overwrite is used.

Fast Follow Work

  • onboarding to codex harness with plugin support
  • support on-request approval for destructive actions

@openclaw-barnacle openclaw-barnacle Bot added docs Improvements or additions to documentation gateway Gateway runtime cli CLI command changes commands Command implementations extensions: codex plugin: migrate-hermes plugin: migrate-claude size: XL maintainer Maintainer-authored PR labels May 7, 2026
@clawsweeper

clawsweeper Bot commented May 7, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs changes before merge.

Summary
The PR adds native Codex plugin app support through codexPlugins config, curated plugin migration/activation, Codex thread app policy, plugin elicitation handling, docs, changelog entries, and tests.

Reproducibility: not applicable. as a current-main bug: current main intentionally lacks codexPlugins and treats Codex native plugins as manual-review migration artifacts. The PR body supplies after-fix live gateway/TUI output for the new feature path.

Real behavior proof
Sufficient (live_output): The PR body contains copied live Showboat and gateway/TUI output showing after-fix plugin migration, native app policy config, event creation, and event search.

Next step before merge
A narrow P2 auth-boundary defect can be repaired with an isolated source inventory path and focused regression coverage before maintainer review resumes.

Security
Needs attention: The diff still has a concrete auth-boundary concern in Codex migration source inventory.

Review findings

  • [P2] Keep source plugin inventory out of target auth — extensions/codex/src/migration/source.ts:145-160
Review details

Best possible solution:

Keep the explicit fail-closed native plugin model, but isolate source discovery from target auth while leaving authenticated install/apply behavior on the target side.

Do we have a high-confidence way to reproduce the issue?

Not applicable as a current-main bug: current main intentionally lacks codexPlugins and treats Codex native plugins as manual-review migration artifacts. The PR body supplies after-fix live gateway/TUI output for the new feature path.

Is this the best way to solve the issue?

No for the current diff: the explicit config and fail-closed native app policy are the right shape, but source migration inventory should not run through the target OpenClaw auth bridge. The safer repair is an auth-disabled source inventory path while preserving target-side install/auth behavior for apply.

Full review comments:

  • [P2] Keep source plugin inventory out of target auth — extensions/codex/src/migration/source.ts:145-160
    discoverInstalledCuratedPlugins inventories a --from Codex home through requestCodexAppServerJson, and the shared client resolves/applies the current OpenClaw Codex auth profile before plugin/list. A dry run against another CODEX_HOME can authenticate the source process with target credentials and list the wrong account; use an isolated auth-disabled source-inventory path.
    Confidence: 0.84

Overall correctness: patch is incorrect
Overall confidence: 0.84

Security concerns:

  • [medium] Source inventory can use target Codex credentials — extensions/codex/src/migration/source.ts:145
    The PR starts a source CODEX_HOME app-server through the normal request helper, and that helper applies OpenClaw's Codex auth profile or env-key fallback before plugin/list. A dry-run or plan against another Codex home can therefore authenticate the source process with target credentials while only trying to inventory source-installed plugins.
    Confidence: 0.82

Acceptance criteria:

  • pnpm test extensions/codex/src/migration/provider.test.ts
  • pnpm test extensions/codex/src/app-server/auth-bridge.test.ts src/commands/migrate/selection.test.ts
  • pnpm exec oxfmt --check --threads=1 extensions/codex/src/migration/source.ts extensions/codex/src/migration/provider.test.ts extensions/codex/src/app-server/request.ts extensions/codex/src/app-server/shared-client.ts extensions/codex/src/app-server/auth-bridge.test.ts

What I checked:

  • Protected PR state: Live GitHub API data shows the PR is open at head 430ae31 and carries the protected maintainer label plus proof: sufficient, so cleanup should not close it. (430ae31d76e0)
  • Current main lacks requested feature: Current main's Codex plugin config exposes dynamic tools, discovery, computer-use, and app-server options, but no codexPlugins surface. (extensions/codex/src/app-server/config.ts:60, b75e5c50bf64)
  • Current docs describe manual-review plugin migration: Current main says Codex native plugins, hooks, and config files are reported or archived for manual review rather than activated automatically. Public docs: docs/plugins/codex-harness.md. (docs/plugins/codex-harness.md:565, b75e5c50bf64)
  • PR proof is real live output: The PR body includes copied Showboat and gateway/TUI output showing Codex plugin config, plugin policy context, migration report state, Google Calendar event creation, and subsequent event search from the live Codex harness path. (430ae31d76e0)
  • Source inventory uses shared authenticated request path: At PR head, discoverInstalledCuratedPlugins calls requestCodexAppServerJson for plugin/list against the source CODEX_HOME without an auth-disabled source inventory mode. (extensions/codex/src/migration/source.ts:145, 430ae31d76e0)
  • Shared request path applies target Codex auth: The shared app-server client resolves the current agent auth profile and calls applyCodexAppServerAuthProfile, so source inventory can authenticate with target OpenClaw credentials. (extensions/codex/src/app-server/shared-client.ts:71, b75e5c50bf64)

Likely related people:

  • vincentkoc: Current-main history and blame show the shared request client, auth bridge, and migration-provider baseline coming from commit fcb9dcc, which is the path the PR reuses for source plugin inventory. (role: introduced current Codex app-server auth/request behavior; confidence: high; commits: fcb9dcc886e2; files: extensions/codex/src/app-server/shared-client.ts, extensions/codex/src/app-server/request.ts, extensions/codex/src/app-server/auth-bridge.ts)
  • pashpashpash: Recent current-main work in commit 3f21796 touched Codex app-server config and run-attempt behavior adjacent to this PR's runtime/plugin-thread integration. (role: recent Codex harness maintainer; confidence: medium; commits: 3f217964d1f9; files: extensions/codex/src/app-server/config.ts, extensions/codex/src/app-server/run-attempt.ts)
  • steipete: Commit 6a4069d is recent current-main work on shared plugin runtime helpers, adjacent to plugin-owned migration/runtime integration boundaries. (role: adjacent plugin runtime maintainer; confidence: low; commits: 6a4069dead0f; files: extensions/codex/index.ts, extensions/codex/src/migration/provider.ts)

Remaining risk / open question:

  • Source Codex plugin inventory can still run under target OpenClaw Codex auth, which may list the wrong account or pass target credentials into a source-home inventory process.

Codex review notes: model gpt-5.5, reasoning high; reviewed against b75e5c50bf64.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 2661767c54

ℹ️ 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".

Comment thread extensions/codex/src/app-server/app-inventory-cache.ts
Comment thread extensions/codex/src/migration/plan.ts
@clawsweeper clawsweeper Bot added the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 7, 2026

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 6c3fa9292c

ℹ️ 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".

Comment thread extensions/codex/src/app-server/run-attempt.ts

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 5bef5450bc

ℹ️ 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".

Comment thread extensions/codex/src/app-server/plugin-thread-config.ts Outdated

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: d713370a6e

ℹ️ 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".

Comment thread extensions/codex/src/app-server/plugin-thread-config.ts
@kevinslin
kevinslin force-pushed the dev/kevinlin/codex-native-plugin-support branch from d713370 to b3678ae Compare May 7, 2026 06:38

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 0d56d22ff7

ℹ️ 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".

Comment thread extensions/codex/src/app-server/plugin-activation.ts Outdated
@kevinslin
kevinslin force-pushed the dev/kevinlin/codex-native-plugin-support branch from 0d56d22 to 02e69cc Compare May 7, 2026 06:51

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 02e69ccf9d

ℹ️ 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".

Comment thread extensions/codex/src/app-server/plugin-thread-config.ts
@kevinslin
kevinslin force-pushed the dev/kevinlin/codex-native-plugin-support branch 2 times, most recently from d0731f1 to bbf1071 Compare May 7, 2026 07:27

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: bbf1071675

ℹ️ 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".

Comment on lines +272 to +273
const policyContext = params.binding.pluginAppPolicyContext;
return Boolean(policyContext && Object.keys(policyContext.apps).length === 0);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Rebuild partially recovered plugin app bindings

When a thread starts with multiple migrated plugins and at least one app is already exposed, any other plugin app that was missing, disabled, or auth-blocked is never reconsidered after the app inventory later refreshes: isCodexPluginThreadBindingStale only compares the stable input fingerprint, and this recovery path only rebuilds bindings whose saved policy context has zero apps. In that partial-success scenario the binding resumes with the old pluginAppPolicyContext and config, so newly authenticated or newly available plugin apps stay unavailable until the user manually resets the thread.

Useful? React with 👍 / 👎.

@kevinslin
kevinslin force-pushed the dev/kevinlin/codex-native-plugin-support branch from bbf1071 to f4c4e5d Compare May 7, 2026 07:37

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: f4c4e5dc9f

ℹ️ 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".

Comment thread src/commands/migrate/selection.ts
@kevinslin
kevinslin force-pushed the dev/kevinlin/codex-native-plugin-support branch from f4c4e5d to ffc39ed Compare May 7, 2026 07:59

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: ffc39edaf0

ℹ️ 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".

Comment thread extensions/codex/src/app-server/plugin-activation.ts Outdated
@kevinslin
kevinslin force-pushed the dev/kevinlin/codex-native-plugin-support branch from ffc39ed to a27d202 Compare May 7, 2026 08:45

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: a27d2027ed

ℹ️ 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".

Comment thread extensions/codex/src/app-server/thread-lifecycle.ts Outdated
Comment thread extensions/codex/src/app-server/run-attempt.ts
@kevinslin
kevinslin force-pushed the dev/kevinlin/codex-native-plugin-support branch from a27d202 to 90114ca Compare May 7, 2026 10:05

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 90114ca6e9

ℹ️ 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".

Comment thread extensions/codex/src/app-server/run-attempt.ts
@kevinslin
kevinslin force-pushed the dev/kevinlin/codex-native-plugin-support branch from bea17f3 to eb6e070 Compare May 7, 2026 23:54

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: eb6e070af2

ℹ️ 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".

Comment thread extensions/codex/src/app-server/plugin-inventory.ts
@kevinslin
kevinslin merged commit a1ac559 into openclaw:main May 8, 2026
110 checks passed
@kevinslin
kevinslin deleted the dev/kevinlin/codex-native-plugin-support branch May 8, 2026 00:22
github-actions Bot pushed a commit to Desicool/openclaw that referenced this pull request May 9, 2026
* feat(codex): add native plugin config schema

* feat(codex): add native plugin inventory activation

* feat(codex): configure native plugin apps for threads

* feat(codex): enforce plugin elicitation policy

* feat(codex): migrate native plugins

* docs(codex): document native plugin support

* fix(codex): harden plugin migration refresh

* fix(codex): satisfy plugin activation lint

* fix: stabilize codex plugin app config

* fix: address codex plugin review feedback

* fix: key codex plugin app cache by websocket credentials

* fix: keep codex plugin app fingerprints stable

* fix: refresh codex plugin cache test fixtures

* fix: refresh plugin app readiness after activation

* fix: support remote codex plugin activation

* fix: recover plugin app bindings after cache refresh

* fix: force codex app refresh after plugin activation

* fix: recover partial codex plugin app bindings

* fix: sync codex plugin selection config

* fix: keep codex plugin activation fail closed

* fix: align codex plugin protocol types with main

* fix: refresh partial codex plugin app bindings

* fix: key codex app cache by env api key

* fix: skip failed codex plugin migration config

* test: update codex prompt snapshots

* fix: fail closed on missing codex app inventory entries

* fix(codex): enforce native plugin policy gates

* fix(codex): normalize native plugin policy types

* fix(codex): fail closed on plugin refresh errors

* fix(codex): use native plugin destructive policy

* fix(codex): key plugin cache by api-key profiles

* fix(codex): drop unshipped plugin fingerprint compat

* fix(codex): let native app policy gate plugin tools

* fix(codex): allow open-world plugin app tools

* fix(codex): revalidate native plugin app bindings

* fix(codex): preserve plugin binding on recheck failure

* docs(codex): clarify plugin harness scope

* fix(codex): return activation report state exhaustively

* test(codex): refresh prompt snapshots after rebase

* fix(codex): match namespaced plugin ids
rogerdigital pushed a commit to rogerdigital/openclaw that referenced this pull request May 9, 2026
* feat(codex): add native plugin config schema

* feat(codex): add native plugin inventory activation

* feat(codex): configure native plugin apps for threads

* feat(codex): enforce plugin elicitation policy

* feat(codex): migrate native plugins

* docs(codex): document native plugin support

* fix(codex): harden plugin migration refresh

* fix(codex): satisfy plugin activation lint

* fix: stabilize codex plugin app config

* fix: address codex plugin review feedback

* fix: key codex plugin app cache by websocket credentials

* fix: keep codex plugin app fingerprints stable

* fix: refresh codex plugin cache test fixtures

* fix: refresh plugin app readiness after activation

* fix: support remote codex plugin activation

* fix: recover plugin app bindings after cache refresh

* fix: force codex app refresh after plugin activation

* fix: recover partial codex plugin app bindings

* fix: sync codex plugin selection config

* fix: keep codex plugin activation fail closed

* fix: align codex plugin protocol types with main

* fix: refresh partial codex plugin app bindings

* fix: key codex app cache by env api key

* fix: skip failed codex plugin migration config

* test: update codex prompt snapshots

* fix: fail closed on missing codex app inventory entries

* fix(codex): enforce native plugin policy gates

* fix(codex): normalize native plugin policy types

* fix(codex): fail closed on plugin refresh errors

* fix(codex): use native plugin destructive policy

* fix(codex): key plugin cache by api-key profiles

* fix(codex): drop unshipped plugin fingerprint compat

* fix(codex): let native app policy gate plugin tools

* fix(codex): allow open-world plugin app tools

* fix(codex): revalidate native plugin app bindings

* fix(codex): preserve plugin binding on recheck failure

* docs(codex): clarify plugin harness scope

* fix(codex): return activation report state exhaustively

* test(codex): refresh prompt snapshots after rebase

* fix(codex): match namespaced plugin ids
lykeion-dev pushed a commit to lykeion-dev/openclaw--rev that referenced this pull request May 14, 2026
* feat(codex): add native plugin config schema

* feat(codex): add native plugin inventory activation

* feat(codex): configure native plugin apps for threads

* feat(codex): enforce plugin elicitation policy

* feat(codex): migrate native plugins

* docs(codex): document native plugin support

* fix(codex): harden plugin migration refresh

* fix(codex): satisfy plugin activation lint

* fix: stabilize codex plugin app config

* fix: address codex plugin review feedback

* fix: key codex plugin app cache by websocket credentials

* fix: keep codex plugin app fingerprints stable

* fix: refresh codex plugin cache test fixtures

* fix: refresh plugin app readiness after activation

* fix: support remote codex plugin activation

* fix: recover plugin app bindings after cache refresh

* fix: force codex app refresh after plugin activation

* fix: recover partial codex plugin app bindings

* fix: sync codex plugin selection config

* fix: keep codex plugin activation fail closed

* fix: align codex plugin protocol types with main

* fix: refresh partial codex plugin app bindings

* fix: key codex app cache by env api key

* fix: skip failed codex plugin migration config

* test: update codex prompt snapshots

* fix: fail closed on missing codex app inventory entries

* fix(codex): enforce native plugin policy gates

* fix(codex): normalize native plugin policy types

* fix(codex): fail closed on plugin refresh errors

* fix(codex): use native plugin destructive policy

* fix(codex): key plugin cache by api-key profiles

* fix(codex): drop unshipped plugin fingerprint compat

* fix(codex): let native app policy gate plugin tools

* fix(codex): allow open-world plugin app tools

* fix(codex): revalidate native plugin app bindings

* fix(codex): preserve plugin binding on recheck failure

* docs(codex): clarify plugin harness scope

* fix(codex): return activation report state exhaustively

* test(codex): refresh prompt snapshots after rebase

* fix(codex): match namespaced plugin ids
github-actions Bot pushed a commit to Desicool/openclaw that referenced this pull request May 24, 2026
* feat(codex): add native plugin config schema

* feat(codex): add native plugin inventory activation

* feat(codex): configure native plugin apps for threads

* feat(codex): enforce plugin elicitation policy

* feat(codex): migrate native plugins

* docs(codex): document native plugin support

* fix(codex): harden plugin migration refresh

* fix(codex): satisfy plugin activation lint

* fix: stabilize codex plugin app config

* fix: address codex plugin review feedback

* fix: key codex plugin app cache by websocket credentials

* fix: keep codex plugin app fingerprints stable

* fix: refresh codex plugin cache test fixtures

* fix: refresh plugin app readiness after activation

* fix: support remote codex plugin activation

* fix: recover plugin app bindings after cache refresh

* fix: force codex app refresh after plugin activation

* fix: recover partial codex plugin app bindings

* fix: sync codex plugin selection config

* fix: keep codex plugin activation fail closed

* fix: align codex plugin protocol types with main

* fix: refresh partial codex plugin app bindings

* fix: key codex app cache by env api key

* fix: skip failed codex plugin migration config

* test: update codex prompt snapshots

* fix: fail closed on missing codex app inventory entries

* fix(codex): enforce native plugin policy gates

* fix(codex): normalize native plugin policy types

* fix(codex): fail closed on plugin refresh errors

* fix(codex): use native plugin destructive policy

* fix(codex): key plugin cache by api-key profiles

* fix(codex): drop unshipped plugin fingerprint compat

* fix(codex): let native app policy gate plugin tools

* fix(codex): allow open-world plugin app tools

* fix(codex): revalidate native plugin app bindings

* fix(codex): preserve plugin binding on recheck failure

* docs(codex): clarify plugin harness scope

* fix(codex): return activation report state exhaustively

* test(codex): refresh prompt snapshots after rebase

* fix(codex): match namespaced plugin ids
jameslcowan pushed a commit to jameslcowan/openclaw that referenced this pull request Jun 2, 2026
* feat(codex): add native plugin config schema

* feat(codex): add native plugin inventory activation

* feat(codex): configure native plugin apps for threads

* feat(codex): enforce plugin elicitation policy

* feat(codex): migrate native plugins

* docs(codex): document native plugin support

* fix(codex): harden plugin migration refresh

* fix(codex): satisfy plugin activation lint

* fix: stabilize codex plugin app config

* fix: address codex plugin review feedback

* fix: key codex plugin app cache by websocket credentials

* fix: keep codex plugin app fingerprints stable

* fix: refresh codex plugin cache test fixtures

* fix: refresh plugin app readiness after activation

* fix: support remote codex plugin activation

* fix: recover plugin app bindings after cache refresh

* fix: force codex app refresh after plugin activation

* fix: recover partial codex plugin app bindings

* fix: sync codex plugin selection config

* fix: keep codex plugin activation fail closed

* fix: align codex plugin protocol types with main

* fix: refresh partial codex plugin app bindings

* fix: key codex app cache by env api key

* fix: skip failed codex plugin migration config

* test: update codex prompt snapshots

* fix: fail closed on missing codex app inventory entries

* fix(codex): enforce native plugin policy gates

* fix(codex): normalize native plugin policy types

* fix(codex): fail closed on plugin refresh errors

* fix(codex): use native plugin destructive policy

* fix(codex): key plugin cache by api-key profiles

* fix(codex): drop unshipped plugin fingerprint compat

* fix(codex): let native app policy gate plugin tools

* fix(codex): allow open-world plugin app tools

* fix(codex): revalidate native plugin app bindings

* fix(codex): preserve plugin binding on recheck failure

* docs(codex): clarify plugin harness scope

* fix(codex): return activation report state exhaustively

* test(codex): refresh prompt snapshots after rebase

* fix(codex): match namespaced plugin ids
sablehead pushed a commit to sablehead/openclaw that referenced this pull request Jun 10, 2026
* feat(codex): add native plugin config schema

* feat(codex): add native plugin inventory activation

* feat(codex): configure native plugin apps for threads

* feat(codex): enforce plugin elicitation policy

* feat(codex): migrate native plugins

* docs(codex): document native plugin support

* fix(codex): harden plugin migration refresh

* fix(codex): satisfy plugin activation lint

* fix: stabilize codex plugin app config

* fix: address codex plugin review feedback

* fix: key codex plugin app cache by websocket credentials

* fix: keep codex plugin app fingerprints stable

* fix: refresh codex plugin cache test fixtures

* fix: refresh plugin app readiness after activation

* fix: support remote codex plugin activation

* fix: recover plugin app bindings after cache refresh

* fix: force codex app refresh after plugin activation

* fix: recover partial codex plugin app bindings

* fix: sync codex plugin selection config

* fix: keep codex plugin activation fail closed

* fix: align codex plugin protocol types with main

* fix: refresh partial codex plugin app bindings

* fix: key codex app cache by env api key

* fix: skip failed codex plugin migration config

* test: update codex prompt snapshots

* fix: fail closed on missing codex app inventory entries

* fix(codex): enforce native plugin policy gates

* fix(codex): normalize native plugin policy types

* fix(codex): fail closed on plugin refresh errors

* fix(codex): use native plugin destructive policy

* fix(codex): key plugin cache by api-key profiles

* fix(codex): drop unshipped plugin fingerprint compat

* fix(codex): let native app policy gate plugin tools

* fix(codex): allow open-world plugin app tools

* fix(codex): revalidate native plugin app bindings

* fix(codex): preserve plugin binding on recheck failure

* docs(codex): clarify plugin harness scope

* fix(codex): return activation report state exhaustively

* test(codex): refresh prompt snapshots after rebase

* fix(codex): match namespaced plugin ids
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

cli CLI command changes commands Command implementations docs Improvements or additions to documentation extensions: codex gateway Gateway runtime maintainer Maintainer-authored PR plugin: migrate-claude plugin: migrate-hermes proof: sufficient ClawSweeper judged the real behavior proof convincing. size: XL

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant