luxin-cli 0.2.8 → 0.2.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
@@ -6,6 +6,113 @@ provenance; this file is the human- and agent-readable release map.
6
6
 
7
7
  ## Unreleased
8
8
 
9
+ ## 0.2.10 - 2026-11-02
10
+
11
+ Saving files, reading prompts from files, guides that do not pick a model you
12
+ cannot run, and errors that say what to do.
13
+
14
+ - New: `--output PATH` (with `--overwrite`) on `create` and `edit` downloads
15
+ the produced asset to your disk and reports it in `data.downloads[]`. The
16
+ extension always matches the bytes: ask for `hero.png`, get JPEG, and the
17
+ file is written as `hero.jpg` with `extension_corrected: true`. An existing
18
+ file is refused before any spend, and a download that fails after the media
19
+ was created keeps the paid result and returns an `assets get` recovery
20
+ command. CLI downloads send a `luxin-cli/0.2.10` User-Agent.
21
+ - `--prompt-file PATH` works with `create`, `edit`, and their `--guide` modes;
22
+ the guide's commands replay `--prompt-file` (and `--output`/`--overwrite`)
23
+ instead of inlining the text. (#2371)
24
+
25
+ - `video create --guide` picks a text-to-video model for a prompt-only brief.
26
+ When a model that needs a starting image is chosen, `next_command` carries
27
+ `--reference-image IMAGE_PATH` and `next_command_missing_inputs` names it.
28
+ (#2357)
29
+ - The guide reads more shape phrasing: "a wide landscape hero banner", "a wide
30
+ cinematic composition", "hero image", "website banner", and "youtube
31
+ thumbnail" are 16:9; "instagram story", "phone wallpaper", and "tiktok video"
32
+ are 9:16. A create without `--aspect-ratio` warns that it planned the 1:1
33
+ default and names the ratio the prompt asked for. (#2358)
34
+ - New models: GPT Image 2.5 Flare and Sunburst (`openai.gpt-image-2.5-flare`,
35
+ `openai.gpt-image-2.5-sunburst`, plus 2026-09-08 snapshots; create and
36
+ edit), with `quality` up to `xhigh` and `max` and transparent backgrounds.
37
+ Create defaults to `quality: medium` when the budget allows, as GPT Image 2
38
+ does, so the quote is a real number. Nano Banana 2.1
39
+ (`fal.google-nano-banana-2-1`, create and edit) at 1K/2K/4K.
40
+ - Fixed: `create --guide --model nano-banana` (any model alias) failed with
41
+ "Cannot access 'MODEL_ALIAS_RULES' before initialization".
42
+ - The `imagen4`, `imagen4-fast`, and `imagen4-ultra` aliases are gone: Fal
43
+ retired those endpoints. `--model imagen4` now selects nothing instead of a
44
+ model that cannot run. The `grok-imagine-image-2` aliases now work in the
45
+ published CLI.
46
+
47
+ - `luxin skill` prints the guidance markdown by default; `luxin skill --json`
48
+ keeps the envelope.
49
+ - Under `2>&1` a live create/edit no longer adds the stderr `in_flight` line,
50
+ so the merged stream is one JSON document. Separate stderr still gets it.
51
+ (#2376)
52
+ - A non-retryable failure (`BAD_REQUEST`, `MODERATION_BLOCKED`,
53
+ `IMAGE_TOO_SMALL`, `PROVIDER_VALIDATION_ERROR`) no longer carries a
54
+ `recover_command` that re-runs the same arguments; `recovery.action` says
55
+ what to change instead. The idempotency key is still returned.
56
+ - When `api.luxin.sh` does not resolve, commands return `NETWORK_UNAVAILABLE`
57
+ with `retryable: false` and the fix in `error.recovery.network_fixes`: the
58
+ Codex sandbox flag and the hosts a generic sandbox must allow. Temporary
59
+ DNS, refused, reset, and timeout errors return a retryable `NETWORK_ERROR`
60
+ that keeps the idempotency key and names the sandbox only as a possible
61
+ cause. `create --guide` puts the recovery on its `service_unreachable`
62
+ blocker. Code change: a reset or timeout used to be
63
+ `HOSTED_API_REQUEST_FAILED`; it is now `NETWORK_ERROR`, still retryable.
64
+ (#2393)
65
+ - The skill refresh nudge prints `npx skills update` with no name filter, so
66
+ installs under an alias name such as `image-skill` update too.
67
+
68
+ - Claude Code and Codex plugin. Claude Code:
69
+ `claude plugin marketplace add danielgwilson/luxin`, then
70
+ `claude plugin install luxin@luxin`. Codex:
71
+ `codex plugin marketplace add danielgwilson/luxin`, then
72
+ `codex plugin add luxin@luxin`. The plugin ships the `luxin` skill only. Its
73
+ version is `<cli version>+<content hash>`, so updates arrive when a shipped
74
+ file changes.
75
+
76
+ ## 0.2.9 - 2026-08-17
77
+
78
+ Discovery, batch work, and recovery — the release for agents doing real
79
+ multi-image jobs.
80
+
81
+ - New command: `luxin models overview` — a ~2KB orientation payload with
82
+ category groups and counts, the cheapest executable model per category,
83
+ alias hints, and runnable next commands. Read this instead of the full list.
84
+ - New command: `luxin models find` — terse, cost-sorted decision rows with
85
+ `--max-credits`, `--limit` (default 10), `--sort credits|usd`, a free-text
86
+ query, and the existing filters. Rows carry aspect-ratio support and honest
87
+ availability, include cataloged-but-not-yet-wired models (clearly marked,
88
+ ranked last), and report `total_matched` with a narrowing hint. The query
89
+ that used to return 4,000+ lines now answers in ~130. (#2114)
90
+ - `models list` gains the same `--limit` / `--sort` / `--max-credits` flags
91
+ and is byte-identical when you don't use them. Against an older hosted API,
92
+ find/overview/narrowing degrade honestly client-side and say so in
93
+ `warnings`.
94
+ - New: `luxin create --batch items.json` (or `--batch -`) — sequential
95
+ multi-image work as one command: shared defaults plus per-item prompts,
96
+ whole-document validation before any spend. `--dry-run` prices the whole
97
+ job with the same debit math the live run charges, checks your credits AND
98
+ the daily job cap, and answers "your credits cover K of N; the batch stops
99
+ at item K+1" with the top-up sized to the actual need. At any wall the
100
+ completed items are delivered and the batch stops cleanly with one digest
101
+ and one recovery block; re-running with the same `--batch-id` skips
102
+ completed, unchanged items. `seed_policy: fixed | increment | random` where
103
+ the model supports a seed. (#2304)
104
+ - Recovery handle in the envelope: live create/edit responses now carry
105
+ `data.idempotency_key` on success and `error.recovery.idempotency_key` plus
106
+ a re-runnable `error.recovery.recover_command` on failure, so an
107
+ interrupted spend is recoverable from the envelope alone. stdout is exactly
108
+ one JSON document per invocation — now stated plainly in the contract; the
109
+ in-flight recovery line stays on stderr. (#2240)
110
+ - Hosted-side, already live and noted for completeness: create/edit responses
111
+ echo `effective_parameters` (each knob tagged explicit / default_policy /
112
+ provider_default) so you can see the configuration that actually ran, and
113
+ `resolution` without `quality` on xai.grok-imagine-image-2.0 now sends the
114
+ medium tier you were already being quoted. (#2310)
115
+
9
116
  ## 0.2.8 - 2026-08-12
10
117
 
11
118
  - New command: `luxin skill` prints the full usage guidance from bundled
package/README.md CHANGED
@@ -13,6 +13,7 @@ discoverable on skills.sh:
13
13
 
14
14
  ```bash
15
15
  npx skills add danielgwilson/luxin --full-depth --skill luxin -g -a codex -y
16
+ npx skills add danielgwilson/luxin --full-depth --skill luxin -g -a claude-code -y
16
17
  ```
17
18
 
18
19
  Intent-named aliases are published from the same repo and point to the same
@@ -28,10 +29,40 @@ npx skills add danielgwilson/luxin --full-depth --skill image-to-3d -g -a codex
28
29
  npx skills add danielgwilson/luxin --full-depth --skill creative-media -g -a codex -y
29
30
  ```
30
31
 
31
- Or install straight from the hosted public contract for the always-latest build:
32
+ Or install straight from the hosted public contract, which serves the build
33
+ deployed to luxin.sh. `npx skills update luxin` refreshes either install:
32
34
 
33
35
  ```bash
34
36
  npx skills add https://luxin.sh --skill luxin -g -a codex -y
37
+ npx skills add https://luxin.sh --skill luxin -g -a claude-code -y
38
+ ```
39
+
40
+ Or install the Luxin plugin, which carries the same skill and updates through
41
+ the plugin manager. In Claude Code:
42
+
43
+ ```bash
44
+ claude plugin marketplace add danielgwilson/luxin
45
+ claude plugin install luxin@luxin
46
+ ```
47
+
48
+ Inside a session, `/plugin marketplace add danielgwilson/luxin` and then
49
+ `/plugin install luxin@luxin` do the same. Update with
50
+ `claude plugin marketplace update luxin && claude plugin update luxin@luxin`.
51
+
52
+ In Codex:
53
+
54
+ ```bash
55
+ codex plugin marketplace add danielgwilson/luxin
56
+ codex plugin add luxin@luxin
57
+ ```
58
+
59
+ Update with `codex plugin marketplace upgrade luxin`.
60
+
61
+ Codex blocks network in its default sandbox, and Luxin calls
62
+ `https://api.luxin.sh`. Start Codex with network on:
63
+
64
+ ```bash
65
+ codex -s workspace-write -c sandbox_workspace_write.network_access=true
35
66
  ```
36
67
 
37
68
  If the Codex/global skill target is read-only or missing, keep the tracked slug
@@ -87,8 +118,8 @@ installed binary is `luxin`.
87
118
 
88
119
  ## Keeping The Skill Current
89
120
 
90
- The installed `SKILL.md` is a ~4KB discovery stub. Everything volatile — flags,
91
- workflows, recovery, funding — lives in the guidance the CLI itself carries, so
121
+ The installed `SKILL.md` is a ~4KB discovery stub. Everything volatile (flags,
122
+ workflows, recovery, funding) lives in the guidance the CLI itself carries, so
92
123
  it always matches the code you are running:
93
124
 
94
125
  ```bash
@@ -116,7 +147,7 @@ command and never rewrites your skill files, agent config, or hook files.
116
147
  ### Optional: refresh at session start (copy-paste, opt-in)
117
148
 
118
149
  Some runtimes can run a command when a session starts. If you want an automatic
119
- refresh, add it yourself — Luxin will not install it for you, and nothing below
150
+ refresh, add it yourself. Luxin will not install it for you, and nothing below
120
151
  runs unless you put it there. For Claude Code, in `.claude/settings.json`:
121
152
 
122
153
  ```json