* Add MPP inspect command
* feat: rework mpp pay to handle full end-to-end 402 flow
mpp pay now probes the URL for a 402 challenge, parses the
WWW-Authenticate header to extract network_id and amount, creates a
spend request, yields the approval URL for the agent to present, and
completes payment with the SPT after approval.
- Remove mpp inspect (subsumed into pay flow)
- Add --context, --amount, --payment-method-id, --test flags
- Make --spend-request-id optional (backward compat)
- Agent mode yields approval URL immediately with _next hints
- Interactive mode handles full flow inline with polling
- Update SKILL.md and CLAUDE.md with new flow docs
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Committed-By-Agent: claude
* fix: update mpp pay tests to handle generator array output
The mpp pay command now uses an async generator (`async *run`) which
wraps yielded values in an array in JSON output mode. Update three
tests to extract [0] from the output array.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Committed-By-Agent: claude
* refactor: remove auto-generated context and step translation layer in mpp pay
Context is now required (min 100 chars) for the full MPP flow — agents must
provide a meaningful description. Also refactors onStep to emit typed Step
values directly, removing the string-to-enum mapping in the component.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Committed-By-Agent: claude
* revert version bump in SKILL.md
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Committed-By-Agent: claude
* fix: remove extra blank line to pass biome format check
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Committed-By-Agent: claude
---------
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat(mpp): support stripe session challenges alongside charge
Add intent="session" support to the MPP flow. Session challenges use an
open/grantedToken credential shape instead of the bare SPT payload.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Committed-By-Agent: claude
* chore: retrigger CI
Committed-By-Agent: claude
---------
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* docs(create-payment-credential): make Link Pay Token flow autonomous-safe
The Link Pay Token section covered token retrieval and injection but
omitted the pieces that make the flow complete unattended, so an agent
following it would fail detection/injection and retry in a loop:
- the "I am an AI agent" checkbox that gates the hidden
input[name="link_pay_token"] (and must be set via the native setter,
not .click());
- that the checkbox and input live in the Stripe accessory iframe;
- the ~5-minute token TTL (retrieve just before injecting);
- the exchange/lookup success signal to wait on;
- a bounded stop/fallback instead of endless retries.
Changes (docs only, merchant-agnostic; no internal flags/accounts):
- Step 2 detection now keys on the checkbox, not only the initially
absent token input.
- Step 5 Link Pay Token: fresh context -> reveal via checkbox -> retrieve
token -> inject -> wait for go-signal -> pay, plus "stop, don't loop".
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Committed-By-Agent: claude
* docs(create-payment-credential): gate LPT flow on the input, not the component
Review feedback (raubrey): lean on the AiAgentPaymentSteering block as the
anchor and instruction source instead of duplicating mechanics, and account
for surfaces that render the block but disable the inline token input.
The same component renders on Payment Elements (input on by default) and on
hosted Checkout (input gated by checkout_hosted_link_pay_token_enabled, off
today). So "found the component" cannot mean "do the token flow": on hosted
Checkout the checkbox and instructions show with no input, which would loop.
- Step 2 detection now confirms the token path by checking whether
input[name="link_pay_token"] appears after ticking the checkbox; if it does
not, follow the block's instructions and fall back to card.
- Step 5 delegates the flow narrative to the block's rendered steps, reveals
the checkbox with a DOM-level click() (matching the e2e deploy spec) instead
of a native-setter dance, and keeps the bounded stop/fallback so an
input-disabled surface never loops.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Committed-By-Agent: claude
* update skill.md
* LPT to card fallback can reuse the same spend request
* udpate payment element and browser session detail
* drop references to elements
---------
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* feat: surface verification_url in spend-request error output
When the API returns additional_verification_required, surface the
verification_url so users know where to complete stepup verification.
Also fixes interactive mode hanging on error by calling useApp().exit().
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Committed-By-Agent: claude
* fix: resolve biome lint and format errors in spend-request commands
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Committed-By-Agent: claude
---------
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
#150 added the report-outcomes docs to the README (which ships in the npm
package) and the create-payment-credential skill, but merged without a
changeset. Add a patch changeset so the next release publishes the updated
README.
Committed-By-Agent: claude
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
* docs: add report command instructions to SKILL.md and README
- SKILL.md: reporting instructions (when to report, tag reference, examples)
- README.md: report outcomes section with usage examples
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Committed-By-Agent: claude
* docs: make outcome reporting opt-in and add tag guidance
Address review feedback on the reporting docs:
- Soften the "REQUIRED" / "always report" language to encouraged-but-optional
in both SKILL.md and README, so reporting is suggested rather than mandated
for now.
- Add guidance to prefer the most specific tag and use `other` only when none
apply (describing details in --freeform-context).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Committed-By-Agent: claude
* docs: reword report rationale to "improve checkout for agents"
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Committed-By-Agent: claude
* docs: align SKILL.md report rationale wording with README
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Committed-By-Agent: claude
---------
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat: add report command for agent observability
Add `link-cli report` command for reporting purchase outcomes (success,
blocked, abandoned) after every agent purchase attempt.
- packages/cli/src/commands/report/schema.ts — Zod schema using SDK constants
- packages/cli/src/commands/report/index.tsx — Command definition
- packages/cli/src/utils/resource-factory.ts — Add createReportResource()
- packages/cli/src/cli.tsx — Register the command
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Committed-By-Agent: claude
* fix: register report as a leaf command so CLI flags parse
The report command was registered with cli.command('', {...}) under a
router Cli. The empty-string subcommand name broke flag parsing
(`link-cli report --domain ...` treated --domain as a subcommand) and
produced the MCP tool name `report_`. Switch to the leaf-command form
used by demo/onboard — pass options/run directly to Cli.create — and
gate auth with requireAuthGuard inside run, matching spend-request.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Committed-By-Agent: claude
---------
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add IReportResource interface and ReportResource implementation that
POSTs to /agent_observations. Supports reporting purchase outcomes
(success, blocked, abandoned) with domain, tags, and context.
* Upload SEAs to release artifacts as well
* Updates to SEA Build config
* Fixes to get the SEA builds working
* SEA-specific build config
* revert unneeded changes