Skip to content

feat(oracle-runtime): add ixo-transaction wallet-signing plugin#212

Open
youssefhany-ixo wants to merge 2 commits into
mainfrom
claude/ixo-transaction-signing
Open

feat(oracle-runtime): add ixo-transaction wallet-signing plugin#212
youssefhany-ixo wants to merge 2 commits into
mainfrom
claude/ixo-transaction-signing

Conversation

@youssefhany-ixo

Copy link
Copy Markdown
Collaborator

Adds a bundled, on-demand plugin that turns a conversation into a validated
IXO transaction and dispatches it to the user's Portal wallet for signing via
the sign_transaction AG-UI action (callAgAction round-trip). The oracle never
signs, broadcasts, or holds keys — the human always signs in their wallet.

  • Intent routing: slash commands, natural language, typeUrl, aliases/typos.
  • Strict Zod validation with risk disclosure + testnet-first / mainnet gating.
  • Four tools: list_ixo_transaction_routes, classify_ixo_transaction_intent,
    validate_ixo_transaction_draft, sign_ixo_transaction.
  • sign_ixo_transaction maps wallet outcomes to clear statuses
    (signed / rejected / timeout / error / validation_error / unavailable).
  • Catalog field shapes verified against @ixo/impactxclient-sdk@2.4.1 for
    entity, iid, claims, token, smart-account. Dropped the names module and
    MsgUpdateCollectionQuota (absent from the SDK); deferred bonds, liquidstake,
    and generic Cosmos authz to a follow-on milestone.
  • Registered in BUNDLED_PLUGINS; tests run against the real runtime API.
  • Spec: specs/ixo-transaction-signing-plugin.md.

Rebuilds the wallet-signing intent of PR #211, keeping its catalog/validation
ideas and replacing the invented signxTransaction/iframe output, the mocked
runtime, and the return-JSON-to-the-LLM flow with a real frontend round-trip.

claude added 2 commits June 15, 2026 10:15
Adds a bundled, on-demand plugin that turns a conversation into a validated
IXO transaction and dispatches it to the user's Portal wallet for signing via
the `sign_transaction` AG-UI action (callAgAction round-trip). The oracle never
signs, broadcasts, or holds keys — the human always signs in their wallet.

- Intent routing: slash commands, natural language, typeUrl, aliases/typos.
- Strict Zod validation with risk disclosure + testnet-first / mainnet gating.
- Four tools: list_ixo_transaction_routes, classify_ixo_transaction_intent,
  validate_ixo_transaction_draft, sign_ixo_transaction.
- sign_ixo_transaction maps wallet outcomes to clear statuses
  (signed / rejected / timeout / error / validation_error / unavailable).
- Catalog field shapes verified against @ixo/impactxclient-sdk@2.4.1 for
  entity, iid, claims, token, smart-account. Dropped the `names` module and
  MsgUpdateCollectionQuota (absent from the SDK); deferred bonds, liquidstake,
  and generic Cosmos authz to a follow-on milestone.
- Registered in BUNDLED_PLUGINS; tests run against the real runtime API.
- Spec: specs/ixo-transaction-signing-plugin.md.

Rebuilds the wallet-signing intent of PR #211, keeping its catalog/validation
ideas and replacing the invented signxTransaction/iframe output, the mocked
runtime, and the return-JSON-to-the-LLM flow with a real frontend round-trip.
… + 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