image-skill 0.1.8 → 0.1.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -4,6 +4,26 @@ This changelog tracks the public `image-skill` CLI package and public skill
4
4
  mirror. The npm package metadata remains the authority for tarball integrity and
5
5
  provenance; this file is the human- and agent-readable release map.
6
6
 
7
+ ## 0.1.10 - 2026-05-22
8
+
9
+ - Stripe Checkout payment-link hardening follow-up.
10
+ - Make `checkout_compact_url` copy-safe by preferring the short Image Skill
11
+ `checkout_handoff_url` whenever the hosted API provides one.
12
+ - Keep raw Stripe `checkout_url` only as the full fallback and preserve its
13
+ required `#...` browser fragment.
14
+ - Add proof coverage that the Image Skill handoff redirects to the exact Stripe
15
+ Checkout URL with the fragment intact.
16
+
17
+ ## 0.1.9 - 2026-05-22
18
+
19
+ - Emergency Stripe Checkout payment-link hotfix.
20
+ - Restored full Stripe Checkout URL preservation, including the `#...`
21
+ fragment required by Stripe's browser checkout app.
22
+ - Kept `checkout_handoff_url` as the preferred short human payment link, but
23
+ made stale-server fallback safe by no longer fragment-stripping
24
+ `checkout_url`, `checkout_compact_url`, or `next.fallback_checkout_url`.
25
+ - Do not use `image-skill@0.1.8` for live Stripe payments.
26
+
7
27
  ## 0.1.8 - 2026-05-22
8
28
 
9
29
  - Hardened Stripe Checkout handoff responses for mobile terminals and chat.
@@ -7,7 +7,7 @@ import { Readable } from "node:stream";
7
7
  import { pipeline } from "node:stream/promises";
8
8
  import os from "node:os";
9
9
 
10
- const VERSION = "0.1.8";
10
+ const VERSION = "0.1.10";
11
11
  const DEFAULT_API_BASE_URL = "https://api.image-skill.com";
12
12
  const PROMPTLESS_EDIT_MODEL_IDS = new Set([
13
13
  "fal.flux-dev-redux",
@@ -1589,6 +1589,19 @@ function stripeCheckoutCopyFallbackData(data) {
1589
1589
  }
1590
1590
 
1591
1591
  function addCheckoutCompactUrl(record) {
1592
+ const handoff =
1593
+ typeof record.checkout_handoff_url === "string"
1594
+ ? record.checkout_handoff_url
1595
+ : null;
1596
+ if (handoff !== null && handoff.length > 0) {
1597
+ let changed = false;
1598
+ if (record.checkout_compact_url !== handoff) {
1599
+ record.checkout_compact_url = handoff;
1600
+ changed = true;
1601
+ }
1602
+ return changed;
1603
+ }
1604
+
1592
1605
  const raw =
1593
1606
  typeof record.checkout_url === "string"
1594
1607
  ? record.checkout_url
@@ -1604,20 +1617,6 @@ function addCheckoutCompactUrl(record) {
1604
1617
  record.checkout_compact_url = compact;
1605
1618
  changed = true;
1606
1619
  }
1607
- if (
1608
- typeof record.checkout_url === "string" &&
1609
- record.checkout_url !== compact
1610
- ) {
1611
- record.checkout_url = compact;
1612
- changed = true;
1613
- }
1614
- if (
1615
- typeof record.fallback_checkout_url === "string" &&
1616
- record.fallback_checkout_url !== compact
1617
- ) {
1618
- record.fallback_checkout_url = compact;
1619
- changed = true;
1620
- }
1621
1620
  return changed;
1622
1621
  }
1623
1622
 
@@ -1626,14 +1625,7 @@ function stripeCheckoutCompactUrl(checkoutUrl) {
1626
1625
  if (trimmed.length === 0) {
1627
1626
  return checkoutUrl;
1628
1627
  }
1629
- try {
1630
- const parsed = new URL(trimmed);
1631
- parsed.hash = "";
1632
- return parsed.toString();
1633
- } catch {
1634
- const hashIndex = trimmed.indexOf("#");
1635
- return hashIndex === -1 ? trimmed : trimmed.slice(0, hashIndex);
1636
- }
1628
+ return trimmed;
1637
1629
  }
1638
1630
 
1639
1631
  function isRecord(value) {
package/cli.md CHANGED
@@ -337,15 +337,13 @@ fulfillment succeeds. Session creation itself must not mutate credit balances.
337
337
 
338
338
  Agents should present or open `checkout_handoff_url` for humans. It is a short
339
339
  Image Skill URL that redirects to Stripe Checkout and is safe to copy from
340
- mobile terminals, SSH clients, and wrapped chat output. `checkout_url` remains
341
- the Stripe compatibility fallback and is fragment-stripped by current API/CLI
342
- responses for human copy/paste; do not ask a person to copy it when
343
- `checkout_handoff_url` is present.
344
-
345
- If a stale server or older client exposes a raw Stripe URL with a long `#...`
346
- fragment, remove the fragment and use `checkout_compact_url` for human
347
- copy/paste. Present any fallback Stripe URL in a fenced code block so terminal
348
- wrapping does not corrupt it.
340
+ mobile terminals, SSH clients, and wrapped chat output. `checkout_compact_url`
341
+ is also copy-safe and equals the Image Skill handoff when the hosted API can
342
+ provide one. `checkout_url` is the raw Stripe compatibility fallback only; do
343
+ not present it unless no handoff URL is available. Do not trim Stripe Checkout
344
+ URLs: the long `#...` fragment is required by Stripe Checkout in the browser.
345
+ Present any fallback Stripe URL in a fenced code block so terminal wrapping does
346
+ not corrupt it.
349
347
 
350
348
  ```bash
351
349
  image-skill credits buy \
@@ -366,8 +364,8 @@ Minimum success data:
366
364
  "accepted_payment_method": "stripe_checkout",
367
365
  "checkout_session_id": "cs_...",
368
366
  "checkout_handoff_url": "https://api.image-skill.com/pay/payatt_...",
369
- "checkout_compact_url": "https://checkout.stripe.com/c/pay/cs_...",
370
- "checkout_url": "https://checkout.stripe.com/c/pay/cs_...",
367
+ "checkout_compact_url": "https://api.image-skill.com/pay/payatt_...",
368
+ "checkout_url": "https://checkout.stripe.com/c/pay/cs_...#fid...",
371
369
  "credits": 500,
372
370
  "amount_cents": 500,
373
371
  "currency": "USD",
@@ -375,9 +373,9 @@ Minimum success data:
375
373
  "next": {
376
374
  "human_action": "open_checkout_url",
377
375
  "checkout_handoff_url": "https://api.image-skill.com/pay/payatt_...",
378
- "checkout_compact_url": "https://checkout.stripe.com/c/pay/cs_...",
379
- "fallback_checkout_url": "https://checkout.stripe.com/c/pay/cs_...",
380
- "after_payment": "open checkout_handoff_url, or checkout_compact_url if only a Stripe URL is available, then poll image-skill credits status --payment-attempt-id PAYMENT_ATTEMPT_ID --json or image-skill usage quota --json; credits are granted only after verified webhook fulfillment"
376
+ "checkout_compact_url": "https://api.image-skill.com/pay/payatt_...",
377
+ "fallback_checkout_url": "https://checkout.stripe.com/c/pay/cs_...#fid...",
378
+ "after_payment": "open checkout_handoff_url or checkout_compact_url; use the full checkout_url only if no Image Skill handoff URL is available, and preserve its Stripe # fragment. Then poll image-skill credits status --payment-attempt-id PAYMENT_ATTEMPT_ID --json or image-skill usage quota --json; credits are granted only after verified webhook fulfillment"
381
379
  }
382
380
  }
383
381
  ```
@@ -422,8 +420,8 @@ Minimum action-required data:
422
420
  "payment_attempt_id": "payatt_...",
423
421
  "checkout_session_id": "cs_...",
424
422
  "checkout_handoff_url": "https://api.image-skill.com/pay/payatt_...",
425
- "checkout_compact_url": "https://checkout.stripe.com/c/pay/cs_...",
426
- "checkout_url": "https://checkout.stripe.com/c/pay/cs_...",
423
+ "checkout_compact_url": "https://api.image-skill.com/pay/payatt_...",
424
+ "checkout_url": "https://checkout.stripe.com/c/pay/cs_...#fid...",
427
425
  "attempt_status": "requires_action"
428
426
  },
429
427
  "receipt": null,
@@ -432,7 +430,7 @@ Minimum action-required data:
432
430
  "retry_after_seconds": 10,
433
431
  "human_action": "open_checkout_url",
434
432
  "checkout_handoff_url": "https://api.image-skill.com/pay/payatt_...",
435
- "checkout_compact_url": "https://checkout.stripe.com/c/pay/cs_..."
433
+ "checkout_compact_url": "https://api.image-skill.com/pay/payatt_..."
436
434
  }
437
435
  }
438
436
  ```
package/llms.txt CHANGED
@@ -69,7 +69,7 @@ First-run flow:
69
69
  6a. image-skill credits methods --json to inspect payment rails, availability, buyer modes, browser requirements, and recovery commands before quoting or buying.
70
70
  6b. image-skill credits packs list --json to inspect recommended live-money packs.
71
71
  6c. image-skill credits quote --pack starter-500 --payment-method stripe_checkout --idempotency-key KEY --json for the default Stripe Checkout top-up path. Use --credits CREDITS instead of --pack only when the required exact budget is already known.
72
- 6d. image-skill credits buy --provider stripe --quote-id QUOTE_ID --idempotency-key KEY --json when the agent has a stripe_checkout quote and needs a payment handoff. Present or open checkout_handoff_url for humans. If no handoff URL is available, present checkout_compact_url in a code block; it is the Stripe Checkout URL with any long # fragment removed for mobile copy/paste. Treat checkout_url as a fragment-stripped compatibility fallback. Credits are granted only after verified Stripe webhook fulfillment succeeds.
72
+ 6d. image-skill credits buy --provider stripe --quote-id QUOTE_ID --idempotency-key KEY --json when the agent has a stripe_checkout quote and needs a payment handoff. Present or open checkout_handoff_url for humans; checkout_compact_url is also copy-safe when present. If no handoff URL is available, present the full checkout_url in a code block. Do not remove the Stripe # fragment; Checkout needs it in the browser. Credits are granted only after verified Stripe webhook fulfillment succeeds.
73
73
  6e. image-skill credits status --payment-attempt-id PAYMENT_ATTEMPT_ID --json after buy or checkout completion to read durable payment state, receipt, credit_event, limits, and retry guidance without inferring from quota text.
74
74
  6f. image-skill credits quote --credits 10 --json and image-skill credits fake-purchase --quote-id QUOTE_ID --idempotency-key KEY --json only for fake/test credit-ledger proof. This moves no live money, accepts no payment credential, and returns live_money:false.
75
75
  7. image-skill create --dry-run --prompt PROMPT --json for zero-cost planning.
@@ -122,7 +122,7 @@ Hosted API endpoints:
122
122
  - GET https://api.image-skill.com/v1/payment-methods returns the no-auth payment rail catalog. It tells agents which rails are available, whether live money can move, buyer modes (agent_only, hybrid, human_only), browser requirements, limits, endpoint paths, and recovery commands.
123
123
  - GET https://api.image-skill.com/v1/credit-packs returns the public pack catalog. Recommended live-money packs include starter-500, builder-2000, and studio-5000. Packs are the default Stripe Checkout UX; exact quotes remain supported for agents that already know the required credit budget.
124
124
  - POST https://api.image-skill.com/v1/credit-quotes returns a fake/test or stripe_checkout credit quote for Authorization: Bearer TOKEN. Request JSON: either credits or pack_id, optional payment_method, idempotency_key. Response includes quote_id, credits, price_amount_cents, currency, accepted_payment_method, pack_id, pack, and live_money. One credit equals $0.01, so price_amount_cents equals credits. This does not grant credits.
125
- - POST https://api.image-skill.com/v1/credit-purchases/stripe-checkout-sessions creates a Stripe Checkout Session for a stripe_checkout quote. Request JSON: quote_id, idempotency_key. Response includes state: action_required, payment_attempt_id, checkout_session_id, checkout_handoff_url, checkout_compact_url, checkout_url, accepted_payment_method: stripe_checkout, and next.human_action: open_checkout_url. Present checkout_handoff_url to humans because it is short and redirects to Stripe. If no handoff URL is available, present checkout_compact_url in a code block; it strips any long Stripe # fragment while preserving the server-visible Checkout URL. Treat checkout_url as a fragment-stripped compatibility fallback. This does not grant credits; verified Stripe webhook fulfillment grants paid credits exactly once.
125
+ - POST https://api.image-skill.com/v1/credit-purchases/stripe-checkout-sessions creates a Stripe Checkout Session for a stripe_checkout quote. Request JSON: quote_id, idempotency_key. Response includes state: action_required, payment_attempt_id, checkout_session_id, checkout_handoff_url, checkout_compact_url, checkout_url, accepted_payment_method: stripe_checkout, and next.human_action: open_checkout_url. Present checkout_handoff_url to humans because it is short and redirects to Stripe; checkout_compact_url is also copy-safe when present. If no handoff URL is available, present the full checkout_url in a code block. Do not remove the Stripe # fragment; Checkout needs it in the browser. This does not grant credits; verified Stripe webhook fulfillment grants paid credits exactly once.
126
126
  - GET https://api.image-skill.com/v1/credit-purchases/status returns durable payment state for Authorization: Bearer TOKEN. Query with exactly one of quote_id, payment_attempt_id, checkout_session_id, or receipt_id. Response includes state, quote, payment_attempt, receipt, credit_event, provider_event, limits, and next.
127
127
  - POST https://api.image-skill.com/v1/credit-purchases confirms a fake/test quote for Authorization: Bearer TOKEN. Request JSON: quote_id, idempotency_key. Response includes receipt_id, credit_event_id, credits_granted, accepted_payment_method: fake, balance_after, and live_money:false. This grants bounded payment-backed credits without moving live money.
128
128
  - GET https://api.image-skill.com/v1/models returns the public model registry. GET https://api.image-skill.com/v1/models/MODEL_ID returns one model's capability-preserving schema.
@@ -199,7 +199,7 @@ Unclaimed agents may not:
199
199
  - send card data, wallet secrets, provider receipts, Stripe secrets, MPP tokens, SPTs, or any payment credential to Image Skill; Stripe payment details must be entered only on Stripe-hosted checkout pages
200
200
 
201
201
  Credits:
202
- One Image Skill credit is $0.01. Use image-skill credits methods --json to inspect payment rail availability and whether a browser/human action is required. Use image-skill credits packs list --json to inspect recommended Stripe Checkout packs. Use image-skill credits quote --pack PACK_ID --payment-method stripe_checkout --json for the default live-money top-up path. Use image-skill credits quote --credits CREDITS --json for exact bounded custom top-ups when the required budget is already known. The default payment_method is fake. Use image-skill credits buy --provider stripe --json to create a hosted Stripe Checkout Session for a stripe_checkout quote; this returns checkout_handoff_url, checkout_compact_url, and fragment-stripped checkout_url and does not grant credits. Present checkout_handoff_url to humans, especially in mobile terminals, SSH, or chat. If checkout_handoff_url is absent, present checkout_compact_url in a code block instead of asking a human to copy a full raw Stripe URL. Use image-skill credits status --payment-attempt-id PAYMENT_ATTEMPT_ID --json after buy and after checkout completion to read state, receipt, credit_event, limits, and retry guidance. Use image-skill credits fake-purchase --json only to exercise the quote, receipt, credit-ledger, and activity-audit contract before live settlement rails are enabled. Create/edit debit model-priced credits after provider success; inspect models show and operation cost.credit_pricing for credits_required and pricing_confidence. Do not silently downgrade to the cheapest model to avoid payment when the user asked for quality or is willing to pay; quote the needed credits and use the payment handoff. Credits buy and fake-purchase require explicit --idempotency-key. Quote idempotency keys are scoped to the hosted agent identity and exact quote terms; use per-run/per-step quote keys and inspect error.recovery.suggested_command on CREDIT_QUOTE_CONFLICT. Never send payment credentials to Image Skill; Stripe collects payment details on Stripe-hosted pages. Public request fields are credits, pack_id, payment_method, quote_id, status reference IDs, and idempotency_key.
202
+ One Image Skill credit is $0.01. Use image-skill credits methods --json to inspect payment rail availability and whether a browser/human action is required. Use image-skill credits packs list --json to inspect recommended Stripe Checkout packs. Use image-skill credits quote --pack PACK_ID --payment-method stripe_checkout --json for the default live-money top-up path. Use image-skill credits quote --credits CREDITS --json for exact bounded custom top-ups when the required budget is already known. The default payment_method is fake. Use image-skill credits buy --provider stripe --json to create a hosted Stripe Checkout Session for a stripe_checkout quote; this returns checkout_handoff_url, copy-safe checkout_compact_url, and full checkout_url fallback and does not grant credits. Present checkout_handoff_url or checkout_compact_url to humans, especially in mobile terminals, SSH, or chat. If checkout_handoff_url is absent, present the full checkout_url in a code block and preserve the Stripe # fragment. Use image-skill credits status --payment-attempt-id PAYMENT_ATTEMPT_ID --json after buy and after checkout completion to read state, receipt, credit_event, limits, and retry guidance. Use image-skill credits fake-purchase --json only to exercise the quote, receipt, credit-ledger, and activity-audit contract before live settlement rails are enabled. Create/edit debit model-priced credits after provider success; inspect models show and operation cost.credit_pricing for credits_required and pricing_confidence. Do not silently downgrade to the cheapest model to avoid payment when the user asked for quality or is willing to pay; quote the needed credits and use the payment handoff. Credits buy and fake-purchase require explicit --idempotency-key. Quote idempotency keys are scoped to the hosted agent identity and exact quote terms; use per-run/per-step quote keys and inspect error.recovery.suggested_command on CREDIT_QUOTE_CONFLICT. Never send payment credentials to Image Skill; Stripe collects payment details on Stripe-hosted pages. Public request fields are credits, pack_id, payment_method, quote_id, status reference IDs, and idempotency_key.
203
203
 
204
204
  Telemetry:
205
205
  - command or endpoint name
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "image-skill",
3
- "version": "0.1.8",
3
+ "version": "0.1.10",
4
4
  "description": "Creative cloud CLI for agents: models, credits, jobs, owned URLs, JSON recovery, payments, reusable assets, and feedback.",
5
5
  "type": "module",
6
6
  "private": false,
package/skill.md CHANGED
@@ -228,12 +228,12 @@ delegated-card adapters. Packs are the default Stripe Checkout UX; exact
228
228
  budget. `credits methods --json` tells agents which rails are currently
229
229
  available, which buyer modes they support, and whether browser/human action is
230
230
  required before an agent tries to quote or buy. `credits buy --provider stripe`
231
- returns `checkout_handoff_url` for humans, `checkout_compact_url` for stale
232
- handoff fallback, and a fragment-stripped Stripe `checkout_url` fallback for a
233
- `stripe_checkout` quote and does not grant credits until verified webhook
231
+ returns `checkout_handoff_url` for humans, `checkout_compact_url` as the
232
+ copy-safe handoff, and full Stripe `checkout_url` only as a fallback for a
233
+ `stripe_checkout` quote. It does not grant credits until verified webhook
234
234
  fulfillment succeeds. Present or open `checkout_handoff_url` first. If it is
235
- absent, present `checkout_compact_url` in a code block; older raw Stripe URLs
236
- can be long, wrapped, and fragile in mobile terminals. `credits fake-purchase`
235
+ absent, present the full `checkout_url` in a code block; do not remove the
236
+ Stripe `#...` fragment because Checkout needs it in the browser. `credits fake-purchase`
237
237
  returns `live_money:false`, moves no live money, accepts no payment credential,
238
238
  and exists so agents can exercise the quote, receipt, credit-ledger, and
239
239
  activity-audit contract safely.
@@ -538,9 +538,9 @@ closed if durable hosted feedback storage is unavailable.
538
538
  top-ups when the required budget is already known.
539
539
  - Use `credits buy --provider stripe --json` only to create a Stripe-hosted
540
540
  checkout action. Present `checkout_handoff_url` to humans; if it is absent,
541
- present `checkout_compact_url` in a code block. Treat `checkout_url` as a
542
- fragment-stripped Stripe compatibility fallback. Session creation itself does
543
- not grant credits.
541
+ present the full `checkout_url` in a code block. Do not remove the
542
+ Stripe `#...` fragment; Checkout needs it in the browser. Session creation
543
+ itself does not grant credits.
544
544
  - Use `credits fake-purchase --json` only for preview credit-ledger proof; it
545
545
  is not live settlement and must not receive payment credentials.
546
546
  - Treat credits as prepaid cents of Image Skill value. Operation debits are
@@ -228,12 +228,12 @@ delegated-card adapters. Packs are the default Stripe Checkout UX; exact
228
228
  budget. `credits methods --json` tells agents which rails are currently
229
229
  available, which buyer modes they support, and whether browser/human action is
230
230
  required before an agent tries to quote or buy. `credits buy --provider stripe`
231
- returns `checkout_handoff_url` for humans, `checkout_compact_url` for stale
232
- handoff fallback, and a fragment-stripped Stripe `checkout_url` fallback for a
233
- `stripe_checkout` quote and does not grant credits until verified webhook
231
+ returns `checkout_handoff_url` for humans, `checkout_compact_url` as the
232
+ copy-safe handoff, and full Stripe `checkout_url` only as a fallback for a
233
+ `stripe_checkout` quote. It does not grant credits until verified webhook
234
234
  fulfillment succeeds. Present or open `checkout_handoff_url` first. If it is
235
- absent, present `checkout_compact_url` in a code block; older raw Stripe URLs
236
- can be long, wrapped, and fragile in mobile terminals. `credits fake-purchase`
235
+ absent, present the full `checkout_url` in a code block; do not remove the
236
+ Stripe `#...` fragment because Checkout needs it in the browser. `credits fake-purchase`
237
237
  returns `live_money:false`, moves no live money, accepts no payment credential,
238
238
  and exists so agents can exercise the quote, receipt, credit-ledger, and
239
239
  activity-audit contract safely.
@@ -538,9 +538,9 @@ closed if durable hosted feedback storage is unavailable.
538
538
  top-ups when the required budget is already known.
539
539
  - Use `credits buy --provider stripe --json` only to create a Stripe-hosted
540
540
  checkout action. Present `checkout_handoff_url` to humans; if it is absent,
541
- present `checkout_compact_url` in a code block. Treat `checkout_url` as a
542
- fragment-stripped Stripe compatibility fallback. Session creation itself does
543
- not grant credits.
541
+ present the full `checkout_url` in a code block. Do not remove the
542
+ Stripe `#...` fragment; Checkout needs it in the browser. Session creation
543
+ itself does not grant credits.
544
544
  - Use `credits fake-purchase --json` only for preview credit-ledger proof; it
545
545
  is not live settlement and must not receive payment credentials.
546
546
  - Treat credits as prepaid cents of Image Skill value. Operation debits are
@@ -337,15 +337,13 @@ fulfillment succeeds. Session creation itself must not mutate credit balances.
337
337
 
338
338
  Agents should present or open `checkout_handoff_url` for humans. It is a short
339
339
  Image Skill URL that redirects to Stripe Checkout and is safe to copy from
340
- mobile terminals, SSH clients, and wrapped chat output. `checkout_url` remains
341
- the Stripe compatibility fallback and is fragment-stripped by current API/CLI
342
- responses for human copy/paste; do not ask a person to copy it when
343
- `checkout_handoff_url` is present.
344
-
345
- If a stale server or older client exposes a raw Stripe URL with a long `#...`
346
- fragment, remove the fragment and use `checkout_compact_url` for human
347
- copy/paste. Present any fallback Stripe URL in a fenced code block so terminal
348
- wrapping does not corrupt it.
340
+ mobile terminals, SSH clients, and wrapped chat output. `checkout_compact_url`
341
+ is also copy-safe and equals the Image Skill handoff when the hosted API can
342
+ provide one. `checkout_url` is the raw Stripe compatibility fallback only; do
343
+ not present it unless no handoff URL is available. Do not trim Stripe Checkout
344
+ URLs: the long `#...` fragment is required by Stripe Checkout in the browser.
345
+ Present any fallback Stripe URL in a fenced code block so terminal wrapping does
346
+ not corrupt it.
349
347
 
350
348
  ```bash
351
349
  image-skill credits buy \
@@ -366,8 +364,8 @@ Minimum success data:
366
364
  "accepted_payment_method": "stripe_checkout",
367
365
  "checkout_session_id": "cs_...",
368
366
  "checkout_handoff_url": "https://api.image-skill.com/pay/payatt_...",
369
- "checkout_compact_url": "https://checkout.stripe.com/c/pay/cs_...",
370
- "checkout_url": "https://checkout.stripe.com/c/pay/cs_...",
367
+ "checkout_compact_url": "https://api.image-skill.com/pay/payatt_...",
368
+ "checkout_url": "https://checkout.stripe.com/c/pay/cs_...#fid...",
371
369
  "credits": 500,
372
370
  "amount_cents": 500,
373
371
  "currency": "USD",
@@ -375,9 +373,9 @@ Minimum success data:
375
373
  "next": {
376
374
  "human_action": "open_checkout_url",
377
375
  "checkout_handoff_url": "https://api.image-skill.com/pay/payatt_...",
378
- "checkout_compact_url": "https://checkout.stripe.com/c/pay/cs_...",
379
- "fallback_checkout_url": "https://checkout.stripe.com/c/pay/cs_...",
380
- "after_payment": "open checkout_handoff_url, or checkout_compact_url if only a Stripe URL is available, then poll image-skill credits status --payment-attempt-id PAYMENT_ATTEMPT_ID --json or image-skill usage quota --json; credits are granted only after verified webhook fulfillment"
376
+ "checkout_compact_url": "https://api.image-skill.com/pay/payatt_...",
377
+ "fallback_checkout_url": "https://checkout.stripe.com/c/pay/cs_...#fid...",
378
+ "after_payment": "open checkout_handoff_url or checkout_compact_url; use the full checkout_url only if no Image Skill handoff URL is available, and preserve its Stripe # fragment. Then poll image-skill credits status --payment-attempt-id PAYMENT_ATTEMPT_ID --json or image-skill usage quota --json; credits are granted only after verified webhook fulfillment"
381
379
  }
382
380
  }
383
381
  ```
@@ -422,8 +420,8 @@ Minimum action-required data:
422
420
  "payment_attempt_id": "payatt_...",
423
421
  "checkout_session_id": "cs_...",
424
422
  "checkout_handoff_url": "https://api.image-skill.com/pay/payatt_...",
425
- "checkout_compact_url": "https://checkout.stripe.com/c/pay/cs_...",
426
- "checkout_url": "https://checkout.stripe.com/c/pay/cs_...",
423
+ "checkout_compact_url": "https://api.image-skill.com/pay/payatt_...",
424
+ "checkout_url": "https://checkout.stripe.com/c/pay/cs_...#fid...",
427
425
  "attempt_status": "requires_action"
428
426
  },
429
427
  "receipt": null,
@@ -432,7 +430,7 @@ Minimum action-required data:
432
430
  "retry_after_seconds": 10,
433
431
  "human_action": "open_checkout_url",
434
432
  "checkout_handoff_url": "https://api.image-skill.com/pay/payatt_...",
435
- "checkout_compact_url": "https://checkout.stripe.com/c/pay/cs_..."
433
+ "checkout_compact_url": "https://api.image-skill.com/pay/payatt_..."
436
434
  }
437
435
  }
438
436
  ```
@@ -69,7 +69,7 @@ First-run flow:
69
69
  6a. image-skill credits methods --json to inspect payment rails, availability, buyer modes, browser requirements, and recovery commands before quoting or buying.
70
70
  6b. image-skill credits packs list --json to inspect recommended live-money packs.
71
71
  6c. image-skill credits quote --pack starter-500 --payment-method stripe_checkout --idempotency-key KEY --json for the default Stripe Checkout top-up path. Use --credits CREDITS instead of --pack only when the required exact budget is already known.
72
- 6d. image-skill credits buy --provider stripe --quote-id QUOTE_ID --idempotency-key KEY --json when the agent has a stripe_checkout quote and needs a payment handoff. Present or open checkout_handoff_url for humans. If no handoff URL is available, present checkout_compact_url in a code block; it is the Stripe Checkout URL with any long # fragment removed for mobile copy/paste. Treat checkout_url as a fragment-stripped compatibility fallback. Credits are granted only after verified Stripe webhook fulfillment succeeds.
72
+ 6d. image-skill credits buy --provider stripe --quote-id QUOTE_ID --idempotency-key KEY --json when the agent has a stripe_checkout quote and needs a payment handoff. Present or open checkout_handoff_url for humans; checkout_compact_url is also copy-safe when present. If no handoff URL is available, present the full checkout_url in a code block. Do not remove the Stripe # fragment; Checkout needs it in the browser. Credits are granted only after verified Stripe webhook fulfillment succeeds.
73
73
  6e. image-skill credits status --payment-attempt-id PAYMENT_ATTEMPT_ID --json after buy or checkout completion to read durable payment state, receipt, credit_event, limits, and retry guidance without inferring from quota text.
74
74
  6f. image-skill credits quote --credits 10 --json and image-skill credits fake-purchase --quote-id QUOTE_ID --idempotency-key KEY --json only for fake/test credit-ledger proof. This moves no live money, accepts no payment credential, and returns live_money:false.
75
75
  7. image-skill create --dry-run --prompt PROMPT --json for zero-cost planning.
@@ -122,7 +122,7 @@ Hosted API endpoints:
122
122
  - GET https://api.image-skill.com/v1/payment-methods returns the no-auth payment rail catalog. It tells agents which rails are available, whether live money can move, buyer modes (agent_only, hybrid, human_only), browser requirements, limits, endpoint paths, and recovery commands.
123
123
  - GET https://api.image-skill.com/v1/credit-packs returns the public pack catalog. Recommended live-money packs include starter-500, builder-2000, and studio-5000. Packs are the default Stripe Checkout UX; exact quotes remain supported for agents that already know the required credit budget.
124
124
  - POST https://api.image-skill.com/v1/credit-quotes returns a fake/test or stripe_checkout credit quote for Authorization: Bearer TOKEN. Request JSON: either credits or pack_id, optional payment_method, idempotency_key. Response includes quote_id, credits, price_amount_cents, currency, accepted_payment_method, pack_id, pack, and live_money. One credit equals $0.01, so price_amount_cents equals credits. This does not grant credits.
125
- - POST https://api.image-skill.com/v1/credit-purchases/stripe-checkout-sessions creates a Stripe Checkout Session for a stripe_checkout quote. Request JSON: quote_id, idempotency_key. Response includes state: action_required, payment_attempt_id, checkout_session_id, checkout_handoff_url, checkout_compact_url, checkout_url, accepted_payment_method: stripe_checkout, and next.human_action: open_checkout_url. Present checkout_handoff_url to humans because it is short and redirects to Stripe. If no handoff URL is available, present checkout_compact_url in a code block; it strips any long Stripe # fragment while preserving the server-visible Checkout URL. Treat checkout_url as a fragment-stripped compatibility fallback. This does not grant credits; verified Stripe webhook fulfillment grants paid credits exactly once.
125
+ - POST https://api.image-skill.com/v1/credit-purchases/stripe-checkout-sessions creates a Stripe Checkout Session for a stripe_checkout quote. Request JSON: quote_id, idempotency_key. Response includes state: action_required, payment_attempt_id, checkout_session_id, checkout_handoff_url, checkout_compact_url, checkout_url, accepted_payment_method: stripe_checkout, and next.human_action: open_checkout_url. Present checkout_handoff_url to humans because it is short and redirects to Stripe; checkout_compact_url is also copy-safe when present. If no handoff URL is available, present the full checkout_url in a code block. Do not remove the Stripe # fragment; Checkout needs it in the browser. This does not grant credits; verified Stripe webhook fulfillment grants paid credits exactly once.
126
126
  - GET https://api.image-skill.com/v1/credit-purchases/status returns durable payment state for Authorization: Bearer TOKEN. Query with exactly one of quote_id, payment_attempt_id, checkout_session_id, or receipt_id. Response includes state, quote, payment_attempt, receipt, credit_event, provider_event, limits, and next.
127
127
  - POST https://api.image-skill.com/v1/credit-purchases confirms a fake/test quote for Authorization: Bearer TOKEN. Request JSON: quote_id, idempotency_key. Response includes receipt_id, credit_event_id, credits_granted, accepted_payment_method: fake, balance_after, and live_money:false. This grants bounded payment-backed credits without moving live money.
128
128
  - GET https://api.image-skill.com/v1/models returns the public model registry. GET https://api.image-skill.com/v1/models/MODEL_ID returns one model's capability-preserving schema.
@@ -199,7 +199,7 @@ Unclaimed agents may not:
199
199
  - send card data, wallet secrets, provider receipts, Stripe secrets, MPP tokens, SPTs, or any payment credential to Image Skill; Stripe payment details must be entered only on Stripe-hosted checkout pages
200
200
 
201
201
  Credits:
202
- One Image Skill credit is $0.01. Use image-skill credits methods --json to inspect payment rail availability and whether a browser/human action is required. Use image-skill credits packs list --json to inspect recommended Stripe Checkout packs. Use image-skill credits quote --pack PACK_ID --payment-method stripe_checkout --json for the default live-money top-up path. Use image-skill credits quote --credits CREDITS --json for exact bounded custom top-ups when the required budget is already known. The default payment_method is fake. Use image-skill credits buy --provider stripe --json to create a hosted Stripe Checkout Session for a stripe_checkout quote; this returns checkout_handoff_url, checkout_compact_url, and fragment-stripped checkout_url and does not grant credits. Present checkout_handoff_url to humans, especially in mobile terminals, SSH, or chat. If checkout_handoff_url is absent, present checkout_compact_url in a code block instead of asking a human to copy a full raw Stripe URL. Use image-skill credits status --payment-attempt-id PAYMENT_ATTEMPT_ID --json after buy and after checkout completion to read state, receipt, credit_event, limits, and retry guidance. Use image-skill credits fake-purchase --json only to exercise the quote, receipt, credit-ledger, and activity-audit contract before live settlement rails are enabled. Create/edit debit model-priced credits after provider success; inspect models show and operation cost.credit_pricing for credits_required and pricing_confidence. Do not silently downgrade to the cheapest model to avoid payment when the user asked for quality or is willing to pay; quote the needed credits and use the payment handoff. Credits buy and fake-purchase require explicit --idempotency-key. Quote idempotency keys are scoped to the hosted agent identity and exact quote terms; use per-run/per-step quote keys and inspect error.recovery.suggested_command on CREDIT_QUOTE_CONFLICT. Never send payment credentials to Image Skill; Stripe collects payment details on Stripe-hosted pages. Public request fields are credits, pack_id, payment_method, quote_id, status reference IDs, and idempotency_key.
202
+ One Image Skill credit is $0.01. Use image-skill credits methods --json to inspect payment rail availability and whether a browser/human action is required. Use image-skill credits packs list --json to inspect recommended Stripe Checkout packs. Use image-skill credits quote --pack PACK_ID --payment-method stripe_checkout --json for the default live-money top-up path. Use image-skill credits quote --credits CREDITS --json for exact bounded custom top-ups when the required budget is already known. The default payment_method is fake. Use image-skill credits buy --provider stripe --json to create a hosted Stripe Checkout Session for a stripe_checkout quote; this returns checkout_handoff_url, copy-safe checkout_compact_url, and full checkout_url fallback and does not grant credits. Present checkout_handoff_url or checkout_compact_url to humans, especially in mobile terminals, SSH, or chat. If checkout_handoff_url is absent, present the full checkout_url in a code block and preserve the Stripe # fragment. Use image-skill credits status --payment-attempt-id PAYMENT_ATTEMPT_ID --json after buy and after checkout completion to read state, receipt, credit_event, limits, and retry guidance. Use image-skill credits fake-purchase --json only to exercise the quote, receipt, credit-ledger, and activity-audit contract before live settlement rails are enabled. Create/edit debit model-priced credits after provider success; inspect models show and operation cost.credit_pricing for credits_required and pricing_confidence. Do not silently downgrade to the cheapest model to avoid payment when the user asked for quality or is willing to pay; quote the needed credits and use the payment handoff. Credits buy and fake-purchase require explicit --idempotency-key. Quote idempotency keys are scoped to the hosted agent identity and exact quote terms; use per-run/per-step quote keys and inspect error.recovery.suggested_command on CREDIT_QUOTE_CONFLICT. Never send payment credentials to Image Skill; Stripe collects payment details on Stripe-hosted pages. Public request fields are credits, pack_id, payment_method, quote_id, status reference IDs, and idempotency_key.
203
203
 
204
204
  Telemetry:
205
205
  - command or endpoint name