luxin-cli 0.2.2 → 0.2.4

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
@@ -6,6 +6,135 @@ provenance; this file is the human- and agent-readable release map.
6
6
 
7
7
  ## Unreleased
8
8
 
9
+ ## 0.2.4 - 2026-08-09
10
+
11
+ - Release (correctness): the guide honors an aspect ratio stated in the brief
12
+ instead of dropping it (#2213, #2203, #2209). A "16:9 cinematic widescreen
13
+ poster" brief previously returned a 2048x2048 square and charged 12 credits
14
+ for it: `selection.suggested_aspect_ratio` was hard-null for every image
15
+ model because the guide only ever suggested a ratio for video. The guide now
16
+ extracts an explicit ratio conservatively, treats it as a required capability
17
+ during model selection the way #2225 treats seed, and passes
18
+ `--aspect-ratio` through to create, dry-run and edit. Bare "portrait" and
19
+ "landscape" deliberately do not fire, and neither do quantity ratios ("the
20
+ ratio of sugar to flour is 3:2") or bare clock times.
21
+ - Release (output): `create --guide` at an unblocked `ready_to_create` returns
22
+ the decision rather than every field (#2204 and its cluster). Measured
23
+ 21,667 to 7,911 bytes, 449 to 200 lines. A blocked agent still receives the
24
+ full recovery and self-fund apparatus, because that is when it is the right
25
+ answer, and the pre-wall funding nudge survives whenever it is genuinely
26
+ recommended. `data.output_mode` names every omitted and compacted field and
27
+ carries a copy-runnable `--explain`, so nothing is trimmed silently.
28
+ - Release (cost): `--intent` now drives model selection (#2231). `draft`
29
+ previously selected a 25-credit model against a 12-credit default and now
30
+ selects a 1-credit one; the unhinted default drops from 12 to 4 credits.
31
+ `final` still selects the quality model, and reproducibility briefs still
32
+ route to a seed-capable model. `cost.cheaper_alternative` names one available
33
+ model that costs strictly less and still satisfies the brief.
34
+ - Release (trust): public responses no longer publish our provider cost,
35
+ revenue, realized margin, target margin, or payment-fee model. What a caller
36
+ is charged is unchanged; what we paid and made is no longer disclosed.
37
+ - Release (dry-run): hosted create and edit responses carry an explicit
38
+ `data.mutation` stating `provider_call`, `credit_debit` and `media_write`
39
+ rather than leaving them to be inferred (#2216), and planned assets are
40
+ labelled as placeholders rather than media.
41
+ - Release (contract): `aspect_ratio` is documented in `skill.md` as the
42
+ top-level normalized control it always was.
43
+ - Release (media): newly created assets are returned at `media.luxin.sh`.
44
+ Existing `media.image-skill.com` URLs continue to resolve and are still
45
+ accepted as input.
46
+ - Release (discovery): the `image-skill` skill slug resolves again. The rename
47
+ removed it and `npx skills add ... --skill image-skill` had failed since
48
+ 2026-07-13 on the mirror path carrying most of our installs.
49
+
50
+ ## 0.2.3 - 2026-08-04
51
+
52
+ - Release (self-fund/recovery): the wall now offers a human-funding handoff
53
+ instead of only a rail no external agent could walk (#2201). Both wall types
54
+ — credits depleted and daily job cap reached — route through
55
+ `QUOTA_EXCEEDED`, and the recovery envelope now carries
56
+ `error.recovery.human_handoff`: a copy-runnable `luxin claim code --json`,
57
+ typed `no_spend`, with the honest instruction to hand `data.dashboard_url`
58
+ (and nothing else — never the token, never the raw code) to your human, who
59
+ funds credits at the dashboard in about a minute. With no wallet evidence —
60
+ the external default — that handoff leads `error.recovery.suggested_command`
61
+ and `error.recovery.suggested_commands`; the agent-native x402 quote/buy rail
62
+ stays listed and `top_up.preferred_payment_method`
63
+ (`stripe_x402.exact.usdc`) is unchanged. New `error.recovery.delegated_spend`
64
+ (`state`, `per_tx_cap_usd`, `agent_day_remaining_usd`, `requires_wallet`)
65
+ lets an agent tell whether it can settle x402 itself before it stops at the
66
+ wall; it defaults to `state: "unknown"`, and when a caller proves delegated
67
+ spend is available the x402 quote leads instead. The credits-depleted wall
68
+ message — the majority wall — now names the price (a ~$5 top-up of 500
69
+ credits, pack `starter-500`), the concrete next step, and both paths, at the
70
+ quality the daily-cap message already had. The packaged CLI rewrites the
71
+ handoff command through your invocation prefix, so what the wall prints is
72
+ runnable as printed.
73
+ - Release (honest messaging): the `create --guide` / `edit --guide`
74
+ `quota_required` blocker is now trigger-aware (#2200). It used to always emit
75
+ the credits-shortfall line ("Selected first image requires N credits; current
76
+ remaining credits are M") even when the trigger was the daily job cap, so an
77
+ agent holding spare credits read a message that was simply wrong about why it
78
+ was blocked. The blocker now mirrors the stage's credit-first ordering:
79
+ credits only outrank the daily cap when they are genuinely short, and
80
+ otherwise the message names the real trigger — "You've reached today's job
81
+ allowance (X/day); a top-up raises your daily allowance so you can keep
82
+ creating now" — matching the hosted daily-cap copy.
83
+ - Release (no-spend mode): `create --guide` and `edit --guide` accept an opt-in
84
+ `--no-spend` output mode (#2194). A cold-agent no-spend study got a guide
85
+ response that repeatedly embedded live create, quote, buy, and payment
86
+ command templates, which buried the safe dry-run and raised the chance of
87
+ picking a prohibited action. With `--no-spend`,
88
+ `data.no_spend_output_mode.enabled` is `true` and the live funding templates
89
+ are omitted — `data.self_fund_next_command`,
90
+ `data.self_fund_next_command_label`, `data.self_fund_handoff`,
91
+ `data.self_fund_preparation`, and `data.checks.payments.suggested_commands`,
92
+ each named in `data.no_spend_output_mode.suppressed_fields`. The dry-run
93
+ command (`data.recommended_no_spend_command` / `data.no_spend_next_command`)
94
+ and the `provider_call` / `credit_debit` / `media_write` false proof in
95
+ `data.mutation` are retained. The funding path stays discoverable without
96
+ dominating via `data.no_spend_output_mode.self_fund_discovery`:
97
+ `rerun_with_funding_command` re-runs the same guide without `--no-spend`, and
98
+ `inspect_methods_command` is a read-only, no-spend payment-method
99
+ inspection. `--no-spend` is a guide output mode: outside `--guide` it is
100
+ rejected with the pointer to `create --dry-run` for a no-spend planned job.
101
+ `luxin create --help` and the packaged `cli.md` / `commands.json` carry the
102
+ flag.
103
+ - Release (trust/billing): a completed, charged job always surfaces an asset
104
+ (#2107). A live create/edit reserves credit before calling the provider and
105
+ settles on the provider's success envelope — but a provider that answered
106
+ SUCCESS with an empty or planned-only asset list used to settle the
107
+ reservation and commit a charged, asset-less job, so the agent was billed for
108
+ nothing and had no recoverable job or asset. The runner now requires at least
109
+ one real (non-planned) asset before settling: otherwise it releases the
110
+ reserved credit and returns a retryable `PROVIDER_COMPLETED_WITHOUT_ASSET`
111
+ failure instead of committing the charge. Nothing to change on your side —
112
+ the debit-without-media outcome is gone.
113
+ - Release (guide reliability): the `create --guide` executable-default read is
114
+ guarded against the shape the hosted registry actually returns (#2109).
115
+ `GET /v1/models` serves the compact model-summary rows, which carry
116
+ `model_execution_status` as a flat field rather than nested under
117
+ `execution`; a nested-only read failed every row's executable check and
118
+ dead-ended the guide at `no_executable_model` even though an executable
119
+ default existed and an explicit `create --dry-run --model fal.bagel` still
120
+ planned for zero credits. The flat-reading fix shipped earlier, but every
121
+ guide fixture used the nested shape, so a regression would have passed CI.
122
+ This release adds a faithful regression test serving the compact/flat shape
123
+ and asserting `ready_to_create` with the executable default selected.
124
+ - Resolved (0.2.2 known limitation): the `dashboard.claim` grant backfill
125
+ landed (#2184), so `luxin claim code` no longer answers `CAPABILITY_DENIED`
126
+ for agents whose tokens predate the hosted dashboard plane. That matters more
127
+ now that the wall itself recommends the command.
128
+ - Release (hosted parity): the Stripe reconciliation sweep is rail-aware and
129
+ transitions confirmed-unsettled pending attempts older than its abandonment
130
+ window to a terminal `expired` state with an audit trail (#2160). Settled
131
+ attempts are never abandoned and live-money retrieval failures still fail
132
+ loudly. No packaged CLI command changed for this; stale open quotes on your
133
+ account simply stop lingering as pending forever.
134
+ - No payment caps, wallet settlement, provider spend, dist-tag mutation, or
135
+ media generation behavior changed in this release bump beyond the
136
+ debited-no-asset release path above, which only ever refunds.
137
+
9
138
  ## 0.2.2 - 2026-07-30
10
139
 
11
140
  - Release (retention/self-fund): publish the human handoff from #2181. New verb