Skip to content

[codex] Add IXO transaction Qiforge plugin#211

Open
ig-shaun wants to merge 2 commits into
mainfrom
qi/ixo-transaction-plugin
Open

[codex] Add IXO transaction Qiforge plugin#211
ig-shaun wants to merge 2 commits into
mainfrom
qi/ixo-transaction-plugin

Conversation

@ig-shaun

@ig-shaun ig-shaun commented Jun 15, 2026

Copy link
Copy Markdown
Contributor

Summary

  • replace the JSON-only signxTransaction/iframe rendering path with a validated Qiforge signing tool that dispatches the Portal frontend sign_transaction AG action
  • add ixo-transaction/react with useIxoTransactionSigningAction() so Portal registers the wallet handler against transactSignX(messages, memo) without advertising raw signing as an agent tool
  • keep the deterministic TypeScript/Zod catalog, intent routing, strict validation, risk confirmation, and testnet/mainnet gating, now rendered as canonical signing-action args
  • add a public @ixo/oracle-runtime/plugin-api authoring subpath and update tests to use the real runtime plugin API instead of a hand-written runtime stub

Validation

  • pnpm --filter @ixo/oracle-runtime... build
  • pnpm --filter @ixo/oracles-client-sdk... build
  • pnpm --filter ixo-transaction test
  • pnpm --filter ixo-transaction typecheck
  • pnpm --filter ixo-transaction build
  • pnpm exec eslint packages/ixo-transaction packages/oracles-client-sdk/src/hooks/use-ag-action.ts packages/oracles-client-sdk/src/hooks/use-chat/v2/use-chat.ts packages/oracles-client-sdk/src/providers/oracles-provider/oracles-context.tsx packages/oracles-client-sdk/src/providers/oracles-provider/types.ts packages/oracle-runtime/src/plugin-api/index.ts
  • pnpm format:check
  • /tmp/ixo-skill-validator-venv/bin/python /Users/shaunconway/.codex/skills/.system/skill-creator/scripts/quick_validate.py packages/ixo-transaction
  • pnpm --filter ixo-transaction exec npm pack --dry-run

@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: 5285805271

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

required('collectionId', 'string'),
required('agentAddress', 'address'),
required('agentDid', 'did'),
optional('amount', 'coin'),

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 Require coin arrays for claim intents

For /ixo claims claim-intent, this field is optional and uses the single-coin schema, so the validator both accepts an intent with no amount and rejects the valid Coin[] shape ([{ denom, amount }]). The existing claim client requires amount: Coin[] and passes that array into MsgClaimIntent.fromPartial in packages/oracles-chain-client/src/client/claims/claims.ts:34-58, so normal claim-intent drafts cannot be rendered while invalid ones can pass validation.

Useful? React with 👍 / 👎.

required('agentAddress', 'address'),
required('agentDid', 'did'),
required('adminAddress', 'address'),
optional('useIntent', 'bool'),

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 Accept submit-claim payment amounts

When a /ixo claims submit draft includes the optional payment amount, validation fails as an unknown field because this strict catalog entry omits it. The existing Claims.submitClaim API accepts amount?: Coin[] and includes it in MsgSubmitClaim.fromPartial in packages/oracles-chain-client/src/client/claims/claims.ts:69-105, so paid or intent-backed claim submissions cannot be prepared through this renderer.

Useful? React with 👍 / 👎.

Comment on lines +427 to +430
required('agentAddress', 'address'),
required('agentDid', 'did'),
required('adminAddress', 'address'),
required('status', 'int'),

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 Preserve the evaluate-claim oracle DID

Claim evaluation payloads that include the oracle DID used by the existing payment/authz flow are rejected because the value schema is strict and this field list omits oracle. Both packages/oracles-chain-client/src/client/payments/payments.ts:113-119 and packages/oracles-chain-client/src/client/authz/authz.test.ts:190-199 encode MsgEvaluateClaim with oracle, so those evaluation transactions cannot be prepared through the new plugin.

Useful? React with 👍 / 👎.

youssefhany-ixo pushed a commit that referenced this pull request Jun 18, 2026
… + verified catalog + proto transfer)

Restructure the IXO transaction feature onto the standalone `packages/ixo-transaction`
package (server `/qiforge` + frontend `/react`), adopting PR #211's AG-UI wiring and
removing the bundled-in-runtime copy. The agent prepares and validates a transaction;
the user signs it in their Portal wallet via a hidden `sign_transaction` action.

Adopted from PR #211:
- `callAgAction` round-trip dispatching the `sign_transaction` AG-UI action.
- FE SDK wiring: `exposeToAgent` flag + `registeredAgActions` split so the raw wallet
  action is executable over the websocket but NOT advertised to the agent — the agent
  can only sign through the validated `sign_ixo_transaction` tool.
- `useIxoTransactionSigningAction()` hook, richer action args, result normalization,
  and the `@ixo/oracle-runtime/plugin-api` subpath export.

Fixed / added on top:
- Replaced the vibe-coded catalog with SDK-verified field shapes
  (`@ixo/impactxclient-sdk@2.4.1`); dropped the non-existent `names` module and
  `MsgUpdateCollectionQuota`; corrected iid `serviceData`, plural verifications/services,
  `MsgDeactivateIID.state`, token `mintBatch`, claims fields, etc.
- BE→FE proto transfer: messages cross as proto-JSON `{ typeUrl, value }`; the FE hook
  converts each via the SDK's generated `fromJSON` (`src/react/proto.ts`) — decoding
  bytes/Long/Timestamp — before `transactSignX`. Heavy proto codecs stay on the FE.
- Bridged the client-sdk (Zod 3) / package (Zod 4) seam without `as unknown as` by
  declaring the hidden action's decorative schema with a matching Zod 3 (`zod3`).
- Dropped SKILL.md / agents / references; folded agent guidance into the manifest and
  tool descriptions.
- Tests against the real plugin-api + a proto `fromJSON` test (34 pass).

Spec: specs/ixo-transaction-signing-plugin.md.
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.

2 participants