feat(events): promote permission/request, permission/denied, stop/failure families (#258 v2 s3) - #358
Conversation
🦋 Changeset detectedLatest commit: 0109c54 The changes in this PR will be included in the next version bump. This PR includes changesets to release 1 package
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 |
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 0109c548e1
ℹ️ 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".
| if (typeof native.tool_input !== 'object' || native.tool_input === null || Array.isArray(native.tool_input)) { | ||
| return nativeEventError('native tool_input must be an object'); | ||
| } |
There was a problem hiding this comment.
Accept every tool_input shape allowed by the Codex schema
For Codex PermissionRequest events whose tool_input is a scalar, array, or null, this rejects the request before the route runs, even though the newly pinned permission-request.command.input.schema.json explicitly declares "tool_input": true and therefore permits any JSON value. The generated wrapper should follow that contract (or validate per target) rather than imposing the Claude-style object restriction.
Useful? React with 👍 / 👎.
| "permission/denied": { "nativeEvent": "PermissionDenied", "state": "supported" }, | ||
| "permission/request": { "nativeEvent": "PermissionRequest", "state": "supported" }, |
There was a problem hiding this comment.
Bump adapter revisions for the promoted event contracts
When an artifact produced before this change is validated after upgrading, Claude, Codex, and the unified plugin still expose their previous adapterRevision values despite now mapping and generating additional event-route contracts. matchesTargetMetadata uses that revision together with the unchanged observed version/schema metadata as its compatibility check, so the old artifact can be accepted as matching the newly registered adapter contract; bump the affected direct and unified adapter revisions as was done for the preceding event-family promotion.
Useful? React with 👍 / 👎.
Summary
permission/request: Claude + Codex supported via the pinned PermissionRequest contract — allow/deny decisions project ashookSpecificOutput.decision.behavior(deny requires a reason →message); reserved input-rewrite fails closed; no additional-context channel. Codex wire schemas byte-pinned from rust-v0.147.0 with recorded digests.permission/denied: Claude observation-only (retry signalling deliberately unprojected until a canonical vocabulary exists — recorded in the projection error); Codex/Cursor dated unavailable (no schema/native event).stop/failure: Claude observation-only; others dated unavailable.Test plan