Skip to content

feat(codex): interface fields, registered MCP apps, and policy/env capability evidence (#188 S1) - #352

Merged
ScriptedAlchemy merged 1 commit into
mainfrom
feat/188-s1-interface-policy
Sep 3, 2026
Merged

feat(codex): interface fields, registered MCP apps, and policy/env capability evidence (#188 S1)#352
ScriptedAlchemy merged 1 commit into
mainfrom
feat/188-s1-interface-policy

Conversation

@ScriptedAlchemy

Copy link
Copy Markdown
Owner

Summary

  • Plans and emits the complete documented Codex interface install-surface block (identity, descriptions, brand color, category/capabilities, asset paths, starter prompts, external URLs) with closed codex.interface.* compile-time validation, plus registered-MCP apps mappings emitted as .app.json with codex.apps.* diagnostics.
  • Records dated capability rows for the interface block, apps, the install-time MCP approval policy (enabled/tools/approval modes, unavailable: host-owned), and the hook compatibility environment (PLUGIN_ROOT, PLUGIN_DATA, CLAUDE_PLUGIN_ROOT, CLAUDE_PLUGIN_DATA).
  • Expands the pinned plugin.schema.json with the interface/apps surfaces (new pins recorded in PROVENANCE with tightening notes) and adds the pinned app.schema.json.
  • Unified adapter intersects every Codex-only surface with honest unavailable rows for the other hosts (same convention as the Claude-only rows); codex adapterRevision 1.5.0, unified 1.20.0.
  • Native proof: installs and lists an emitted plugin carrying the full interface block against real codex-cli 0.147.0, and pins that the CLI publishes no plugin validate subcommand.

Part of #188 (slice 1, PR 2 of 2).

Test plan

  • typecheck
  • scoped unit suites (adapter-capability-states, adapter-metadata)
  • integration host-adapters suite + native Codex proofs (293 passed, 0 skipped)
  • rslint

@changeset-bot

changeset-bot Bot commented Sep 3, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 433741c

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package
Name Type
agent-bundle Minor

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@ScriptedAlchemy
ScriptedAlchemy merged commit 9e94116 into main Sep 3, 2026
4 checks passed
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 3, 2026

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review Completed 2026-09-03T01:37:00.195857Z 433741c PR opened
ℹ️ 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" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

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

Copy link
Copy Markdown

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: 433741c26a

ℹ️ 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 832 to +835
defaultPrompt: [`Help me use ${model.metadata.name}.`],
developerName: model.metadata.name,
};
category: 'Productivity',
displayName: model.metadata.name,

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Honor plugin.logo on Codex artifacts

When a project uses the existing plugin.logo option with the Codex target, this new interface builder ignores model.metadata.logo, and the Codex planner also never invokes withPluginLogoEntry; consequently neither interface.logo nor the referenced image is emitted. The normalized logo contract explicitly represents an artifact path for hosts that support logos, and Cursor already wires the same field through cursorManifest and withPluginLogoEntry, so the newly supported Codex logo surface should do likewise.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

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

Fixed on main in #364 (merge 305161a).

...(hookDocument === undefined ? [] : ['hooks']),
...(model.skills.some((skill) => isSelected(skill.targets)) ? ['skills'] : []),
],
defaultPrompt: [`Help me use ${model.metadata.name}.`],

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Keep generated prompts within the schema limit

For a valid Codex plugin name longer than 115 characters, this generated string exceeds the newly pinned 128-character defaultPrompt limit, causing the adapter to report a plugin schema error even though the user did not author a prompt. The Codex name schema and source validation impose no corresponding maximum, so the generated fallback needs to be truncated or replaced with a bounded prompt.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

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

Fixed on main in #364 (merge 305161a).

} else {
let valid = true;
for (const [index, item] of items.entries()) {
if (isNonemptyString(item) && item.length <= 128) continue;

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Count prompt length in Unicode characters

When an authored starter prompt contains astral characters such as emoji, String.length counts each surrogate pair as two, while JSON Schema maxLength counts Unicode code points. A valid prompt of 65–128 emoji is therefore rejected with codex.interface.default-prompt.item.invalid and the authored interface is discarded; use a code-point count such as [...item].length so planner validation matches the pinned schema.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

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

Fixed on main in #364 (merge 305161a).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant