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 +107 -0
- package/README.md +35 -4
- package/bin/luxin.mjs +6531 -3262
- package/cli.md +282 -23
- package/commands.json +47 -6
- package/llms.txt +19 -9
- package/package.json +1 -1
- package/skill-core.md +25 -7
- package/skill.md +36 -39
- package/skills/agent-image-generation/SKILL.md +11 -13
- package/skills/ai-audio-generation/SKILL.md +11 -13
- package/skills/ai-image-generation/SKILL.md +11 -13
- package/skills/ai-video-generation/SKILL.md +11 -13
- package/skills/creative-media/SKILL.md +11 -13
- package/skills/image-edit/SKILL.md +11 -13
- package/skills/image-generation/SKILL.md +11 -13
- package/skills/image-skill/SKILL.md +11 -13
- package/skills/image-to-3d/SKILL.md +11 -13
- package/skills/luxin/SKILL.md +36 -39
- package/skills/luxin/references/cli.md +282 -23
- package/skills/luxin/references/commands.json +47 -6
- package/skills/luxin/references/llms.txt +19 -9
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
|
|
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
|
|
91
|
-
workflows, recovery, funding
|
|
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
|
|
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
|