image-skill 0.1.25 → 0.1.27

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,22 @@ provenance; this file is the human- and agent-readable release map.
6
6
 
7
7
  ## Unreleased
8
8
 
9
+ ## 0.1.27 - 2026-06-02
10
+
11
+ - Fix (activation): default hosted signup now reports saved auth as a positive
12
+ `data.auth_handoff.status: "saved_config_ready"` state, keeps `data.token`
13
+ null, and suppresses the generic hosted token-returned warning when the
14
+ public CLI saved the token instead of showing it. Fresh agents can rerun the
15
+ guide or continue with `whoami`, feedback, credits, create, or edit without
16
+ hunting for a raw token or running a separate `auth save`.
17
+
18
+ ## 0.1.26 - 2026-06-02
19
+
20
+ - Fix (activation): public CLI subcommand help flags now return command help
21
+ instead of `INVALID_ARGUMENTS`. Fresh agents can run `signup --help`,
22
+ `credits buy --help`, `models show --help`, or similar discovery commands
23
+ without triggering auth, network, payment, or config validation.
24
+
9
25
  ## 0.1.25 - 2026-06-02
10
26
 
11
27
  - Fix (activation): `create --guide` now probes whether the public CLI auth
@@ -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.25";
10
+ const VERSION = "0.1.27";
11
11
  const PACKAGE_NAME = "image-skill";
12
12
  const DEFAULT_API_BASE_URL = "https://api.image-skill.com";
13
13
  const DEFAULT_DOCS_BASE_URL = "https://image-skill.com";
@@ -31,6 +31,8 @@ const SIGNUP_SUGGESTED_COMMAND =
31
31
  "image-skill signup --agent --agent-contact AGENT_OR_OPERATOR_INBOX --agent-name NAME --runtime RUNTIME --json";
32
32
  const SIGNUP_CONTACT_GUIDANCE =
33
33
  "Preview signup currently requires an email-shaped durable contact inbox, not an individual human email. Use an agent-owned inbox when available; otherwise use an operator, team, or sponsor inbox that can receive future claim, billing, or abuse notices. Do not block waiting for a person, invent a person, or use a throwaway inbox. --human-email remains a compatibility alias.";
34
+ const HOSTED_SIGNUP_TOKEN_RETURNED_WARNING =
35
+ "hosted restricted token is returned once; store it in the agent runtime secret store and never paste it into prompts, logs, issues, or product feedback";
34
36
  const PUBLIC_NPX_COMMAND_PREFIX = "npx -y image-skill@latest";
35
37
  const CREDIT_UNIT_USD = 0.01;
36
38
  const PAYMENT_CREDENTIAL_FLAGS = new Set([
@@ -62,47 +64,16 @@ process.exitCode = result.exitCode;
62
64
  async function main(rawArgv) {
63
65
  const [command, ...rest] = rawArgv;
64
66
 
65
- if (
66
- command === undefined ||
67
- command === "help" ||
68
- command === "--help" ||
69
- command === "-h"
70
- ) {
71
- return success("image-skill help", {
72
- usage:
73
- "image-skill <doctor|trust|signup|auth|whoami|usage|quota|credits|models|capabilities|create|upload|edit|assets|jobs|activity|feedback> --json",
74
- docs_url: "https://image-skill.com/cli.md",
75
- commands: [
76
- "doctor",
77
- "trust",
78
- "signup --agent --agent-contact --agent-name NAME --runtime RUNTIME",
79
- "auth status",
80
- "auth save",
81
- "auth logout",
82
- "whoami",
83
- "usage quota",
84
- "credits methods",
85
- "credits packs list",
86
- "credits quote",
87
- "credits buy",
88
- "credits status",
89
- "models list",
90
- "models show",
91
- "create --guide",
92
- "capabilities list",
93
- "capabilities show",
94
- "create",
95
- "upload",
96
- "edit",
97
- "assets show",
98
- "assets get",
99
- "jobs show",
100
- "jobs wait",
101
- "activity list",
102
- "activity show",
103
- "feedback create",
104
- ],
105
- });
67
+ if (command === undefined || command === "--help" || command === "-h") {
68
+ return publicCliHelp([]);
69
+ }
70
+
71
+ if (command === "help") {
72
+ return publicCliHelp(helpTarget(rest));
73
+ }
74
+
75
+ if (hasHelpFlag(rest)) {
76
+ return publicCliHelp(helpTarget([command, ...rest]));
106
77
  }
107
78
 
108
79
  if (command === "version" || command === "--version" || command === "-v") {
@@ -173,6 +144,321 @@ async function main(rawArgv) {
173
144
  }
174
145
  }
175
146
 
147
+ function publicCliHelp(path) {
148
+ const key = helpKey(path);
149
+ const help =
150
+ commandHelpByKey(key) ?? commandHelpByKey(helpKey(path.slice(0, 1)));
151
+ if (help === undefined) {
152
+ return publicCliHelp([]);
153
+ }
154
+ return success(help.command, help);
155
+ }
156
+
157
+ function hasHelpFlag(argv) {
158
+ return argv.includes("--help") || argv.includes("-h");
159
+ }
160
+
161
+ function helpTarget(argv) {
162
+ return argv.filter(
163
+ (arg) => arg !== "--help" && arg !== "-h" && arg !== "--json",
164
+ );
165
+ }
166
+
167
+ function helpKey(path) {
168
+ const clean = path.filter((arg) => !arg.startsWith("-"));
169
+ if (clean.length >= 2) {
170
+ return `${clean[0]} ${clean[1]}`;
171
+ }
172
+ return clean[0] ?? "";
173
+ }
174
+
175
+ function commandHelpByKey(key) {
176
+ return {
177
+ "": {
178
+ command: "image-skill help",
179
+ usage:
180
+ "image-skill <doctor|trust|signup|auth|whoami|usage|quota|credits|models|capabilities|create|upload|edit|assets|jobs|activity|feedback> --json",
181
+ docs_url: "https://image-skill.com/cli.md",
182
+ commands: [
183
+ "doctor",
184
+ "trust",
185
+ "signup --agent --agent-contact --agent-name NAME --runtime RUNTIME",
186
+ "auth status",
187
+ "auth save",
188
+ "auth logout",
189
+ "whoami",
190
+ "usage quota",
191
+ "credits methods",
192
+ "credits packs list",
193
+ "credits quote",
194
+ "credits buy",
195
+ "credits status",
196
+ "models list",
197
+ "models show",
198
+ "create --guide",
199
+ "capabilities list",
200
+ "capabilities show",
201
+ "create",
202
+ "upload",
203
+ "edit",
204
+ "assets show",
205
+ "assets get",
206
+ "jobs show",
207
+ "jobs wait",
208
+ "activity list",
209
+ "activity show",
210
+ "feedback create",
211
+ ],
212
+ },
213
+ doctor: {
214
+ command: "image-skill doctor help",
215
+ usage: "image-skill doctor --json",
216
+ docs_url: "https://image-skill.com/cli.md#image-skill-doctor",
217
+ description:
218
+ "Check hosted API reachability, CLI version, auth state, and health.",
219
+ },
220
+ trust: {
221
+ command: "image-skill trust help",
222
+ usage: "image-skill trust --json",
223
+ docs_url: "https://image-skill.com/cli.md#image-skill-trust",
224
+ description:
225
+ "Return npm provenance, hosted contract hashes, API health, and model availability evidence.",
226
+ },
227
+ signup: {
228
+ command: "image-skill signup help",
229
+ usage:
230
+ "image-skill signup --agent --agent-contact AGENT_OR_OPERATOR_INBOX --agent-name NAME --runtime RUNTIME --json",
231
+ docs_url: "https://image-skill.com/cli.md#image-skill-signup-agent",
232
+ required_flags: [
233
+ "--agent",
234
+ "--agent-contact",
235
+ "--agent-name",
236
+ "--runtime",
237
+ ],
238
+ optional_flags: ["--show-token", "--no-save", "--token-stdin"],
239
+ },
240
+ auth: {
241
+ command: "image-skill auth help",
242
+ usage: "image-skill auth <status|save|logout> --json",
243
+ docs_url: "https://image-skill.com/cli.md#image-skill-auth",
244
+ subcommands: ["status", "save", "logout"],
245
+ },
246
+ "auth status": {
247
+ command: "image-skill auth status help",
248
+ usage: "image-skill auth status --json",
249
+ docs_url: "https://image-skill.com/cli.md#image-skill-auth",
250
+ },
251
+ "auth save": {
252
+ command: "image-skill auth save help",
253
+ usage: "image-skill auth save --token-stdin --json",
254
+ docs_url: "https://image-skill.com/cli.md#image-skill-auth",
255
+ },
256
+ "auth logout": {
257
+ command: "image-skill auth logout help",
258
+ usage: "image-skill auth logout --json",
259
+ docs_url: "https://image-skill.com/cli.md#image-skill-auth",
260
+ },
261
+ whoami: {
262
+ command: "image-skill whoami help",
263
+ usage: "image-skill whoami --json",
264
+ docs_url: "https://image-skill.com/cli.md#image-skill-whoami",
265
+ },
266
+ usage: {
267
+ command: "image-skill usage help",
268
+ usage: "image-skill usage quota --json",
269
+ docs_url: "https://image-skill.com/cli.md#image-skill-usage",
270
+ subcommands: ["quota"],
271
+ },
272
+ "usage quota": {
273
+ command: "image-skill usage quota help",
274
+ usage: "image-skill usage quota --json",
275
+ docs_url: "https://image-skill.com/cli.md#image-skill-usage",
276
+ },
277
+ quota: {
278
+ command: "image-skill quota help",
279
+ usage: "image-skill quota --json",
280
+ docs_url: "https://image-skill.com/cli.md#image-skill-quota",
281
+ },
282
+ credits: {
283
+ command: "image-skill credits help",
284
+ usage: "image-skill credits <methods|packs list|quote|buy|status> --json",
285
+ docs_url: "https://image-skill.com/cli.md#image-skill-credits",
286
+ subcommands: ["methods", "packs list", "quote", "buy", "status"],
287
+ },
288
+ "credits methods": {
289
+ command: "image-skill credits methods help",
290
+ usage: "image-skill credits methods --json",
291
+ docs_url: "https://image-skill.com/cli.md#image-skill-credits",
292
+ },
293
+ "credits packs": {
294
+ command: "image-skill credits packs help",
295
+ usage: "image-skill credits packs list --json",
296
+ docs_url: "https://image-skill.com/cli.md#image-skill-credits",
297
+ subcommands: ["list"],
298
+ },
299
+ "credits quote": {
300
+ command: "image-skill credits quote help",
301
+ usage:
302
+ "image-skill credits quote --pack PACK_ID --payment-method stripe_x402.exact.usdc --json",
303
+ docs_url: "https://image-skill.com/cli.md#image-skill-credits",
304
+ required_flags: ["--pack or --credits"],
305
+ optional_flags: ["--payment-method", "--idempotency-key"],
306
+ },
307
+ "credits buy": {
308
+ command: "image-skill credits buy help",
309
+ usage:
310
+ "image-skill credits buy --provider stripe_x402 --quote-id QUOTE_ID --idempotency-key KEY --json",
311
+ docs_url: "https://image-skill.com/cli.md#image-skill-credits",
312
+ required_flags: ["--provider", "--quote-id", "--idempotency-key"],
313
+ supported_providers: ["stripe", "stripe_x402"],
314
+ },
315
+ "credits status": {
316
+ command: "image-skill credits status help",
317
+ usage:
318
+ "image-skill credits status --payment-attempt-id PAYMENT_ATTEMPT_ID --json",
319
+ docs_url: "https://image-skill.com/cli.md#image-skill-credits",
320
+ required_flags: ["--payment-attempt-id"],
321
+ },
322
+ models: {
323
+ command: "image-skill models help",
324
+ usage: "image-skill models <list|show> --json",
325
+ docs_url: "https://image-skill.com/cli.md#image-skill-models",
326
+ subcommands: ["list", "show"],
327
+ },
328
+ "models list": {
329
+ command: "image-skill models list help",
330
+ usage:
331
+ "image-skill models list --available --operation image.generate --json",
332
+ docs_url: "https://image-skill.com/cli.md#image-skill-models",
333
+ },
334
+ "models show": {
335
+ command: "image-skill models show help",
336
+ usage: "image-skill models show MODEL_ID --json",
337
+ docs_url: "https://image-skill.com/cli.md#image-skill-models",
338
+ },
339
+ capabilities: {
340
+ command: "image-skill capabilities help",
341
+ usage: "image-skill capabilities <list|show> --json",
342
+ docs_url: "https://image-skill.com/cli.md#image-skill-capabilities",
343
+ subcommands: ["list", "show"],
344
+ },
345
+ "capabilities list": {
346
+ command: "image-skill capabilities list help",
347
+ usage: "image-skill capabilities list --json",
348
+ docs_url: "https://image-skill.com/cli.md#image-skill-capabilities",
349
+ },
350
+ "capabilities show": {
351
+ command: "image-skill capabilities show help",
352
+ usage: "image-skill capabilities show CAPABILITY_ID --json",
353
+ docs_url: "https://image-skill.com/cli.md#image-skill-capabilities",
354
+ },
355
+ create: {
356
+ command: "image-skill create help",
357
+ usage:
358
+ 'image-skill create --prompt "..." --intent explore --max-estimated-usd-per-image 0.07 --json',
359
+ docs_url: "https://image-skill.com/cli.md#image-skill-create",
360
+ optional_flags: [
361
+ "--guide",
362
+ "--dry-run",
363
+ "--model",
364
+ "--aspect-ratio",
365
+ "--output-count",
366
+ "--model-parameters-json",
367
+ "--idempotency-key",
368
+ ],
369
+ },
370
+ upload: {
371
+ command: "image-skill upload help",
372
+ usage: "image-skill upload PATH_OR_URL --json",
373
+ docs_url: "https://image-skill.com/cli.md#image-skill-upload",
374
+ },
375
+ edit: {
376
+ command: "image-skill edit help",
377
+ usage: 'image-skill edit --input image_... --prompt "..." --json',
378
+ docs_url: "https://image-skill.com/cli.md#image-skill-edit",
379
+ required_flags: ["--input"],
380
+ optional_flags: [
381
+ "--prompt",
382
+ "--model",
383
+ "--mask",
384
+ "--element-reference",
385
+ "--model-parameters-json",
386
+ "--idempotency-key",
387
+ ],
388
+ },
389
+ assets: {
390
+ command: "image-skill assets help",
391
+ usage: "image-skill assets <show|get> ASSET_ID_OR_URL --json",
392
+ docs_url: "https://image-skill.com/cli.md#image-skill-assets",
393
+ subcommands: ["show", "get"],
394
+ },
395
+ "assets show": {
396
+ command: "image-skill assets show help",
397
+ usage: "image-skill assets show ASSET_ID_OR_URL --json",
398
+ docs_url: "https://image-skill.com/cli.md#image-skill-assets",
399
+ },
400
+ "assets get": {
401
+ command: "image-skill assets get help",
402
+ usage: "image-skill assets get ASSET_ID_OR_URL --output PATH --json",
403
+ docs_url: "https://image-skill.com/cli.md#image-skill-assets",
404
+ },
405
+ jobs: {
406
+ command: "image-skill jobs help",
407
+ usage: "image-skill jobs <show|wait> JOB_ID --json",
408
+ docs_url: "https://image-skill.com/cli.md#image-skill-jobs",
409
+ subcommands: ["show", "wait"],
410
+ },
411
+ "jobs show": {
412
+ command: "image-skill jobs show help",
413
+ usage: "image-skill jobs show JOB_ID --json",
414
+ docs_url: "https://image-skill.com/cli.md#image-skill-jobs",
415
+ },
416
+ "jobs wait": {
417
+ command: "image-skill jobs wait help",
418
+ usage: "image-skill jobs wait JOB_ID --timeout-ms 30000 --json",
419
+ docs_url: "https://image-skill.com/cli.md#image-skill-jobs",
420
+ },
421
+ activity: {
422
+ command: "image-skill activity help",
423
+ usage: "image-skill activity <list|show> --json",
424
+ docs_url: "https://image-skill.com/cli.md#image-skill-activity",
425
+ subcommands: ["list", "show"],
426
+ },
427
+ "activity list": {
428
+ command: "image-skill activity list help",
429
+ usage: "image-skill activity list --subject JOB_ID --json",
430
+ docs_url: "https://image-skill.com/cli.md#image-skill-activity",
431
+ },
432
+ "activity show": {
433
+ command: "image-skill activity show help",
434
+ usage: "image-skill activity show REFERENCE --json",
435
+ docs_url: "https://image-skill.com/cli.md#image-skill-activity",
436
+ },
437
+ feedback: {
438
+ command: "image-skill feedback help",
439
+ usage: "image-skill feedback create --title TITLE --body BODY --json",
440
+ docs_url: "https://image-skill.com/cli.md#image-skill-feedback",
441
+ subcommands: ["create"],
442
+ },
443
+ "feedback create": {
444
+ command: "image-skill feedback create help",
445
+ usage:
446
+ "image-skill feedback create --title TITLE --body BODY --type user_feedback --json",
447
+ docs_url: "https://image-skill.com/cli.md#image-skill-feedback",
448
+ optional_flags: [
449
+ "--title",
450
+ "--body",
451
+ "--type",
452
+ "--severity",
453
+ "--confidence",
454
+ "--expected",
455
+ "--actual",
456
+ "--command",
457
+ ],
458
+ },
459
+ }[key];
460
+ }
461
+
176
462
  async function doctor(argv) {
177
463
  const args = parseArgs(argv);
178
464
  const apiBaseUrl = apiBase(args);
@@ -378,7 +664,9 @@ async function signup(argv) {
378
664
  rewriteSignupContactFailure(result);
379
665
 
380
666
  const token = result.envelope.data?.token;
381
- const warnings = [...result.envelope.warnings];
667
+ const warnings = result.envelope.warnings.filter(
668
+ (warning) => warning !== HOSTED_SIGNUP_TOKEN_RETURNED_WARNING,
669
+ );
382
670
  if (result.envelope.ok && shouldSave) {
383
671
  if (typeof token !== "string" || token.trim().length === 0) {
384
672
  return failure(
@@ -403,9 +691,6 @@ async function signup(argv) {
403
691
  } catch (error) {
404
692
  return configWriteFailure("image-skill signup", error);
405
693
  }
406
- warnings.push(
407
- "hosted restricted token was saved to the public CLI config with 0600 permissions; later commands can authenticate from config without repeating signup",
408
- );
409
694
  }
410
695
  if (result.envelope.ok && showToken) {
411
696
  warnings.push(
@@ -426,15 +711,25 @@ async function signup(argv) {
426
711
  saved: shouldSave,
427
712
  config_path: shouldSave ? configPath() : null,
428
713
  reason: shouldSave
429
- ? "hosted signup saved the restricted token to the public CLI config for later commands"
714
+ ? "auth is ready in the public CLI config; no raw token copy step is required"
430
715
  : showToken
431
716
  ? "hosted signup returned the token once for the agent runtime secret store"
432
717
  : "hosted signup did not request a raw token or save config because --no-save was set",
433
718
  },
434
719
  auth_handoff: {
720
+ status: shouldSave
721
+ ? "saved_config_ready"
722
+ : showToken
723
+ ? "manual_token_handoff"
724
+ : "not_saved",
725
+ saved_auth_ready: shouldSave,
435
726
  accepted_methods: ["config", "IMAGE_SKILL_TOKEN", "--token-stdin"],
436
727
  token_source_after_signup: shouldSave ? "config" : "not_saved",
437
728
  secret_value_included: showToken,
729
+ raw_token_copy_required: !shouldSave,
730
+ rerun_guide_hint: shouldSave
731
+ ? "Rerun the guide command you just ran; the CLI will authenticate from saved config."
732
+ : "Rerun the guide with IMAGE_SKILL_TOKEN or --token-stdin after storing the returned token.",
438
733
  next_step: shouldSave
439
734
  ? "Run whoami, usage quota, feedback create, credits, create, or edit normally; the CLI will read the saved config."
440
735
  : "Store data.token in the agent runtime secret store immediately, then pass it with IMAGE_SKILL_TOKEN or --token-stdin.",
package/cli.md CHANGED
@@ -91,6 +91,9 @@ Hosted signup saves the restricted `isk_r_` token to the public CLI config by
91
91
  default with `0600` permissions, so later hosted commands can authenticate from
92
92
  config without repeating signup or carrying a raw token through prompts. Set
93
93
  `IMAGE_SKILL_CONFIG_PATH` first when the default config home may be read-only.
94
+ Successful default signup reports `data.auth_handoff.status` as
95
+ `saved_config_ready`, keeps `data.token` null, and should not require any
96
+ token-copy step.
94
97
  The raw token is returned only when `--show-token` is set, and only once. Use
95
98
  `--show-token --no-save` when the agent runtime has a separate secret store and
96
99
  does not want local config. Do not paste tokens into prompts, logs, issue text,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "image-skill",
3
- "version": "0.1.25",
3
+ "version": "0.1.27",
4
4
  "description": "Zero-setup durable creative-media CLI for agents (image + video + audio + 3D): guide-first creation, model and cost inspection, owned URLs, JSON recovery, payments, reusable assets, and feedback.",
5
5
  "type": "module",
6
6
  "private": false,
@@ -91,6 +91,9 @@ Hosted signup saves the restricted `isk_r_` token to the public CLI config by
91
91
  default with `0600` permissions, so later hosted commands can authenticate from
92
92
  config without repeating signup or carrying a raw token through prompts. Set
93
93
  `IMAGE_SKILL_CONFIG_PATH` first when the default config home may be read-only.
94
+ Successful default signup reports `data.auth_handoff.status` as
95
+ `saved_config_ready`, keeps `data.token` null, and should not require any
96
+ token-copy step.
94
97
  The raw token is returned only when `--show-token` is set, and only once. Use
95
98
  `--show-token --no-save` when the agent runtime has a separate secret store and
96
99
  does not want local config. Do not paste tokens into prompts, logs, issue text,