@petercjl/seedaudiocli 0.2.1 → 0.3.0

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/INSTALL.md ADDED
@@ -0,0 +1,11 @@
1
+ # Installation
2
+
3
+ Send to the current Agent:
4
+
5
+ > Install @petercjl/seedaudiocli and its companion Skill for your own environment.
6
+
7
+ The Agent resolves its own absolute Skill parent directory and registration mechanism. Discover the canonical Skill with `seedaudiocli skill source --json`, then use `skill install --agent NAME --root ABSOLUTE_SKILL_PARENT`. The parent receives a `seedaudiocli` directory. An arbitrary valid Agent name uses the generic adapter. No host directory is inferred.
8
+
9
+ Verify `version --json`, `skill status --root ABSOLUTE_SKILL_PARENT --json` and the target-owned `runtime/npm/cli.mjs` entry. Installation creates physical copies of the Skill and required package runtime; it creates no shared links. Node.js and Python remain declared external prerequisites. The Agent loads or refreshes its native Skill discovery and verifies it separately; registration pending is incomplete installation. Existing unmanaged or locally edited files are preserved.
10
+
11
+ An npm installation notice points here. With lifecycle scripts disabled, follow the same handoff explicitly. npm success alone does not complete Skill installation. Credentials, voice libraries and generated task records stay outside the package.
package/README.md CHANGED
@@ -4,6 +4,12 @@ Official Volcengine Seed Audio CLI with a portable companion Skill. Requires Nod
4
4
 
5
5
  ## Install and configure
6
6
 
7
+ Send to your current Agent:
8
+
9
+ > Install @petercjl/seedaudiocli and its companion Skill for your own environment.
10
+
11
+ Follow [INSTALL.md](INSTALL.md) for complete installation and [UPDATE.md](UPDATE.md) for updates. npm success alone does not verify Skill discovery. The command examples below are developer reference.
12
+
7
13
  ```bash
8
14
  npm install -g @petercjl/seedaudiocli
9
15
  seedaudiocli setup
@@ -45,25 +51,52 @@ Outputs support mp3, wav, pcm and ogg_opus. Select compatible sample rates with
45
51
 
46
52
  Protocol reference: [Volcengine Seed Audio HTTP documentation](https://docs.volcengine.com/docs/DoubaoVoice/audio-generation-http?lang=zh).
47
53
 
54
+ ## Named voice library
55
+
56
+ Save a confirmed reference sample, delivery style and audio settings under a memorable name. The library belongs to the user and survives package upgrades; the public package contains no personal samples. Re-saving an ID creates a new immutable revision, preserving previous settings and samples.
57
+
58
+ Natural-language requests to your current Agent:
59
+
60
+ > Save the attached voice sample as a named voice, using the name and delivery style I provide.
61
+
62
+ > List my seedaudiocli voice library and play the sample for the voice I choose.
63
+
64
+ > Use my chosen seedaudiocli voice to narrate the attached text.
65
+
66
+ Developer reference:
67
+
68
+ ```bash
69
+ seedaudiocli voice save --id example-male --name "示例男声" --audio-file ./reference.wav --style "清晰自然,中等语速"
70
+ seedaudiocli voice list
71
+ seedaudiocli voice show "示例男声"
72
+ seedaudiocli voice preview "示例男声"
73
+ seedaudiocli generate audio-ref --voice "示例男声@1" --prompt-file ./narration.txt --subtitle --download ./audio --dry-run
74
+ seedaudiocli voice export "示例男声" --output ./example.voice.json
75
+ seedaudiocli voice import ./example.voice.json
76
+ ```
77
+
78
+ `--voice` accepts a name or stable ID, with an optional `@VERSION`. A bare name selects the latest local revision. Pass plain narration; the CLI adds the reference and saved style. Explicit generation flags override saved settings for this request only. Dry-run shows the resolved payload and voice receipt; generation records exact voice revision, sample SHA256 and effective settings. The final expanded prompt must fit the provider limit. A named voice cannot be combined with separate audio/image references. Generative voices can have small variations between runs.
79
+
80
+ `preview` returns the original sample path for the Agent's audio player; no new generation is submitted. Samples must be up to 30 seconds and 10 MiB. PCM WAV uses built-in validation; saving/importing MP3 or Ogg/Opus requires FFmpeg's `ffprobe`. The library is under the configuration directory's `voices` folder, or `SEEDAUDIO_VOICE_DIR`. Export creates a self-contained JSON sample/settings bundle and refuses existing output. Sharing or publishing a voice bundle requires appropriate authorization from its owner.
81
+
48
82
  ## Agent installation
49
83
 
50
84
  ```bash
51
85
  seedaudiocli skill source --json
52
- seedaudiocli skill install --agent codex
53
- seedaudiocli skill status --agent codex --json
54
- seedaudiocli skill install --agent sealseek --root "/actual/skills-directory"
86
+ seedaudiocli skill install --agent current-agent --root "/actual/skills-directory"
87
+ seedaudiocli skill status --agent current-agent --root "/actual/skills-directory" --json
55
88
  ```
56
89
 
57
- SealSeek's discovery directory is explicit (`--root` or `SEALSEEK_SKILLS_DIR`). Unknown Agents and unmanaged targets are refused. Managed copies have ownership/hash records; updates back up prior contents, preserve customized UI metadata and refuse local edits. In-place synchronization supports directory handles held open by an Agent. Failed synchronization reports the recovery backup.
90
+ The calling Agent supplies its own absolute Skill parent directory. Any valid Agent name uses the generic capability adapter when no dedicated mapping applies. Unmanaged targets are refused. Managed physical copies include the required package runtime, ownership/hash records and preserved UI metadata. In-place synchronization supports directory handles held open by an Agent. Failed synchronization reports the recovery backup. External Node.js/Python prerequisites and native host discovery are verified separately.
58
91
 
59
92
  ## Update and rollback
60
93
 
61
94
  ```bash
62
95
  npm install -g @petercjl/seedaudiocli@latest
63
- seedaudiocli skill update --agent codex
96
+ seedaudiocli skill update --agent current-agent --root "/actual/skills-directory"
64
97
  ```
65
98
 
66
- Global installs check and install stable latest before every run and synchronize previously registered managed Skills. Use `update check` to inspect availability and `update install` to apply it immediately. For a deliberate rollback, set `SEEDAUDIO_AUTO_UPDATE=0`, install the prior exact npm version and synchronize Skills. Configuration and history remain unchanged.
99
+ Global generation calls check stable latest with a daily notification cache. Use `update check` to inspect availability and `update install --agent current-agent --root "/actual/skills-directory"` to update one selected target. For a deliberate rollback, set `SEEDAUDIO_AUTO_UPDATE=0`, install the prior exact npm version and synchronize the selected Skill. Configuration, voice library and history remain unchanged.
67
100
 
68
101
  Python discovery checks an explicit `SEEDAUDIO_PYTHON`, configured Agent runtime directories and platform commands. `SEEDAUDIO_RUNTIME_ROOT` can point to a managed runtime root. A missing or broken runtime produces `PYTHON_REQUIRED` with installation guidance.
69
102
 
@@ -73,4 +106,4 @@ Run `npm test` for isolated CLI, configuration and lifecycle tests, and `npm pac
73
106
 
74
107
  ## Automatic updates
75
108
 
76
- Global npm installs check stable latest before every command, install newer releases and sync managed Skills before running the requested command once. No TTL cache is used. Offline checks keep the installed version; updates back up the package for rollback. Configuration and task history remain outside the package. Use `seedaudiocli update check` or `seedaudiocli update install`. For a deliberately pinned run set `SEEDAUDIO_AUTO_UPDATE=0`. Development checkouts are Git-managed; taobao-ai-ops owns suite component updates.
109
+ Detection runs only before ordinary generation, at most daily, with a bounded timeout. Metadata, local voice management, task recovery and dry-run remain read-only with respect to update detection. Updates notify by default; installation explicitly resolves a single Skill target. Offline checks keep the installed version. Package/Skill backups support rollback; configuration and voice samples remain outside npm. `SEEDAUDIO_AUTO_UPDATE=0` disables detection. Development checkouts are Git-managed; suite installations use their parent's updater.
package/UPDATE.md ADDED
@@ -0,0 +1,11 @@
1
+ # Updates
2
+
3
+ Send to the current Agent:
4
+
5
+ > Update @petercjl/seedaudiocli and its companion Skill in your own environment, preserving my voice library.
6
+
7
+ Resolve one current Agent Skill parent directory before mutation. Inspect `skill status --agent NAME --root ABSOLUTE_SKILL_PARENT --json`. Stop for unmanaged files or local edits. Explicit `update install --agent NAME --root ABSOLUTE_SKILL_PARENT` backs up the package and selected Skill, verifies the replacement, and synchronizes that target only. Same-version updates reconcile a missing or stale Skill. Source checkouts and suite-owned components retain their owning updater.
8
+
9
+ Verify global CLI, target-owned runtime, package version, managed SHA256 status and native host discovery. Failed synchronization is incomplete; retain backups and reconcile it before retrying. The package updater attempts rollback on failure. Inspect actual versions after an interrupted update, reuse the acquired version where possible, and preserve the original backup. Historical `skill update --root PARENT` remains supported and safely selects the generic adapter. Historical updates that swept several registered targets are deprecated; use an explicit selected target.
10
+
11
+ Generation checks for stable updates at most once daily and notifies; installation is explicit. Metadata, help, task recovery and dry-run remain free of registry update calls. `SEEDAUDIO_AUTO_UPDATE=0` disables detection. Voice library, credentials and cached results live outside npm and are preserved. Re-load or refresh the current Agent's Skill discovery after an update; host verification is distinct from package receipts.
package/capabilities.json CHANGED
@@ -6,31 +6,6 @@
6
6
  "python": ">=3.9",
7
7
  "python_override": "SEEDAUDIO_PYTHON"
8
8
  },
9
- "commands": [
10
- "version",
11
- "capabilities",
12
- "doctor",
13
- "setup",
14
- "config import",
15
- "auth status",
16
- "models list",
17
- "generate text",
18
- "generate audio-ref",
19
- "generate image-ref",
20
- "task get",
21
- "task wait",
22
- "task url",
23
- "task download",
24
- "task jobs",
25
- "payload validate",
26
- "payload submit",
27
- "skill source",
28
- "skill status",
29
- "skill install",
30
- "skill update",
31
- "update check",
32
- "update install"
33
- ],
34
9
  "config": {
35
10
  "format": [
36
11
  "json",
@@ -55,15 +30,15 @@
55
30
  "migration": "Import official configuration with --replace; backup is automatic; relay endpoints/models are rejected."
56
31
  },
57
32
  "update": {
58
- "trigger": "before-every-run",
33
+ "trigger": "generate with daily cache",
59
34
  "channel": "latest",
60
- "automatic_install": true,
35
+ "automatic_install": false,
61
36
  "configuration": "Outside package; preserved",
62
37
  "offline": "keep-current",
63
38
  "source_checkout": "git-managed",
64
39
  "suite_install": "suite-managed",
65
40
  "opt_out": "SEEDAUDIO_AUTO_UPDATE=0",
66
- "managed_skills": "synchronized with backups; edited content preserved"
41
+ "managed_skills": "one explicitly selected target, physical copy with isolated runtime"
67
42
  },
68
43
  "generation": {
69
44
  "provider": "Volcengine",
@@ -76,5 +51,477 @@
76
51
  "local_references": true,
77
52
  "remote_polling": false,
78
53
  "recovery": "Persist local record before POST; save response and audio; export locally by record ID. Unknown outcomes require inspection and explicit authorization before --force."
54
+ },
55
+ "commandNames": [
56
+ "version",
57
+ "capabilities",
58
+ "doctor",
59
+ "setup",
60
+ "config import",
61
+ "auth status",
62
+ "models list",
63
+ "generate text",
64
+ "generate audio-ref",
65
+ "generate image-ref",
66
+ "task get",
67
+ "task wait",
68
+ "task url",
69
+ "task download",
70
+ "task jobs",
71
+ "payload validate",
72
+ "payload submit",
73
+ "skill source",
74
+ "skill status",
75
+ "skill install",
76
+ "skill update",
77
+ "update check",
78
+ "update install"
79
+ ],
80
+ "skills": [
81
+ "seedaudiocli"
82
+ ],
83
+ "commandContracts": {
84
+ "version": {
85
+ "options": {
86
+ "--json": {
87
+ "type": "boolean"
88
+ }
89
+ },
90
+ "sideEffects": "none"
91
+ },
92
+ "capabilities": {
93
+ "options": {
94
+ "--json": {
95
+ "type": "boolean"
96
+ }
97
+ },
98
+ "sideEffects": "none"
99
+ },
100
+ "doctor": {
101
+ "options": {
102
+ "--json": {
103
+ "type": "boolean"
104
+ }
105
+ },
106
+ "sideEffects": "read"
107
+ },
108
+ "skill source": {
109
+ "options": {
110
+ "--json": {
111
+ "type": "boolean"
112
+ },
113
+ "--name": {
114
+ "type": "string"
115
+ },
116
+ "--all": {
117
+ "type": "boolean"
118
+ }
119
+ },
120
+ "sideEffects": "none"
121
+ },
122
+ "skill status": {
123
+ "options": {
124
+ "--json": {
125
+ "type": "boolean"
126
+ },
127
+ "--agent": {
128
+ "type": "string"
129
+ },
130
+ "--root": {
131
+ "type": "string"
132
+ }
133
+ },
134
+ "sideEffects": "read"
135
+ },
136
+ "skill install": {
137
+ "options": {
138
+ "--json": {
139
+ "type": "boolean"
140
+ },
141
+ "--agent": {
142
+ "type": "string"
143
+ },
144
+ "--root": {
145
+ "type": "string"
146
+ }
147
+ },
148
+ "sideEffects": "local-write"
149
+ },
150
+ "skill update": {
151
+ "options": {
152
+ "--json": {
153
+ "type": "boolean"
154
+ },
155
+ "--agent": {
156
+ "type": "string"
157
+ },
158
+ "--root": {
159
+ "type": "string"
160
+ }
161
+ },
162
+ "sideEffects": "local-write"
163
+ },
164
+ "update check": {
165
+ "options": {
166
+ "--json": {
167
+ "type": "boolean"
168
+ }
169
+ },
170
+ "sideEffects": "read"
171
+ },
172
+ "update install": {
173
+ "options": {
174
+ "--json": {
175
+ "type": "boolean"
176
+ },
177
+ "--agent": {
178
+ "type": "string"
179
+ },
180
+ "--root": {
181
+ "type": "string"
182
+ }
183
+ },
184
+ "sideEffects": "package-and-skill-update"
185
+ },
186
+ "voice list": {
187
+ "options": {
188
+ "--json": {
189
+ "type": "boolean"
190
+ },
191
+ "--all": {
192
+ "type": "boolean"
193
+ }
194
+ },
195
+ "sideEffects": "read"
196
+ },
197
+ "voice show": {
198
+ "options": {
199
+ "--json": {
200
+ "type": "boolean"
201
+ }
202
+ },
203
+ "sideEffects": "read"
204
+ },
205
+ "voice preview": {
206
+ "options": {
207
+ "--json": {
208
+ "type": "boolean"
209
+ }
210
+ },
211
+ "sideEffects": "read"
212
+ },
213
+ "voice save": {
214
+ "options": {
215
+ "--json": {
216
+ "type": "boolean"
217
+ },
218
+ "--id": {
219
+ "type": "string"
220
+ },
221
+ "--name": {
222
+ "type": "string"
223
+ },
224
+ "--audio-file": {
225
+ "type": "string"
226
+ },
227
+ "--description": {
228
+ "type": "string"
229
+ },
230
+ "--style": {
231
+ "type": "string"
232
+ },
233
+ "--model": {
234
+ "type": "string"
235
+ },
236
+ "--format": {
237
+ "type": "string"
238
+ },
239
+ "--sample-rate": {
240
+ "type": "integer"
241
+ },
242
+ "--speech-rate": {
243
+ "type": "integer"
244
+ },
245
+ "--pitch-rate": {
246
+ "type": "integer"
247
+ },
248
+ "--loudness-rate": {
249
+ "type": "integer"
250
+ }
251
+ },
252
+ "sideEffects": "local-write"
253
+ },
254
+ "voice export": {
255
+ "options": {
256
+ "--json": {
257
+ "type": "boolean"
258
+ },
259
+ "--output": {
260
+ "type": "string"
261
+ }
262
+ },
263
+ "sideEffects": "local-write"
264
+ },
265
+ "voice import": {
266
+ "options": {
267
+ "--json": {
268
+ "type": "boolean"
269
+ }
270
+ },
271
+ "sideEffects": "local-write"
272
+ },
273
+ "generate text": {
274
+ "options": {
275
+ "--json": {
276
+ "type": "boolean"
277
+ },
278
+ "--voice": {
279
+ "type": "string"
280
+ },
281
+ "--prompt": {
282
+ "type": "string"
283
+ },
284
+ "--prompt-file": {
285
+ "type": "string"
286
+ },
287
+ "--dry-run": {
288
+ "type": "boolean"
289
+ }
290
+ },
291
+ "sideEffects": "local-write"
292
+ },
293
+ "generate audio-ref": {
294
+ "options": {
295
+ "--json": {
296
+ "type": "boolean"
297
+ },
298
+ "--voice": {
299
+ "type": "string"
300
+ },
301
+ "--audio-file": {
302
+ "type": "string"
303
+ },
304
+ "--audio-reference": {
305
+ "type": "string"
306
+ },
307
+ "--prompt": {
308
+ "type": "string"
309
+ },
310
+ "--prompt-file": {
311
+ "type": "string"
312
+ },
313
+ "--dry-run": {
314
+ "type": "boolean"
315
+ }
316
+ },
317
+ "sideEffects": "local-write"
318
+ },
319
+ "generate image-ref": {
320
+ "options": {
321
+ "--json": {
322
+ "type": "boolean"
323
+ },
324
+ "--image-file": {
325
+ "type": "string"
326
+ },
327
+ "--image-url": {
328
+ "type": "string"
329
+ },
330
+ "--prompt": {
331
+ "type": "string"
332
+ },
333
+ "--dry-run": {
334
+ "type": "boolean"
335
+ }
336
+ },
337
+ "sideEffects": "local-write"
338
+ }
339
+ },
340
+ "discoveryContract": {
341
+ "schemaVersion": 1,
342
+ "entryPoints": [
343
+ {
344
+ "argv": [
345
+ "capabilities",
346
+ "--json"
347
+ ],
348
+ "result": "manifest"
349
+ },
350
+ {
351
+ "argv": [
352
+ "skill",
353
+ "source",
354
+ "--json"
355
+ ],
356
+ "result": "source"
357
+ }
358
+ ],
359
+ "commandsField": "commandContracts",
360
+ "version": {
361
+ "command": "version",
362
+ "argv": [
363
+ "version",
364
+ "--json"
365
+ ],
366
+ "fields": {
367
+ "package": {
368
+ "field": "package",
369
+ "type": "string"
370
+ },
371
+ "version": {
372
+ "field": "version",
373
+ "type": "string"
374
+ }
375
+ }
376
+ },
377
+ "skillCollection": {
378
+ "namesField": "skills",
379
+ "default": "seedaudiocli",
380
+ "selector": {
381
+ "option": "--name",
382
+ "type": "string"
383
+ },
384
+ "enumeration": {
385
+ "argv": [
386
+ "skill",
387
+ "source",
388
+ "--all",
389
+ "--json"
390
+ ],
391
+ "itemsField": "skills",
392
+ "completeField": "complete"
393
+ },
394
+ "namedSource": [
395
+ "skill",
396
+ "source",
397
+ "--name",
398
+ "{skill}",
399
+ "--json"
400
+ ]
401
+ }
402
+ },
403
+ "maintenanceContract": {
404
+ "schemaVersion": 1,
405
+ "agentEligibility": "valid-name-with-generic-fallback",
406
+ "hostDiscoveryAuthority": "host",
407
+ "targetOptions": {
408
+ "--root": {
409
+ "kind": "skill-parent"
410
+ }
411
+ },
412
+ "source": {
413
+ "name": {
414
+ "field": "name",
415
+ "type": "string"
416
+ },
417
+ "package": {
418
+ "field": "package",
419
+ "type": "string"
420
+ },
421
+ "version": {
422
+ "field": "version",
423
+ "type": "string"
424
+ },
425
+ "path": {
426
+ "field": "source",
427
+ "type": "string"
428
+ }
429
+ },
430
+ "status": {
431
+ "name": {
432
+ "field": "name",
433
+ "type": "string"
434
+ },
435
+ "package": {
436
+ "field": "package",
437
+ "type": "string"
438
+ },
439
+ "version": {
440
+ "field": "version",
441
+ "type": "string"
442
+ },
443
+ "target": {
444
+ "field": "target",
445
+ "type": "string"
446
+ },
447
+ "installed": {
448
+ "field": "installed",
449
+ "type": "boolean"
450
+ },
451
+ "managed": {
452
+ "field": "managed",
453
+ "type": "boolean"
454
+ },
455
+ "current": {
456
+ "field": "current",
457
+ "type": "boolean"
458
+ },
459
+ "edited": {
460
+ "field": "edited",
461
+ "type": "boolean"
462
+ },
463
+ "verification": {
464
+ "field": "verification",
465
+ "type": "object"
466
+ },
467
+ "recovery": {
468
+ "field": "recovery",
469
+ "type": "object"
470
+ }
471
+ }
472
+ },
473
+ "installationLifecycle": {
474
+ "agentNeutral": true,
475
+ "targetRequired": true,
476
+ "hostRegistrationRequired": true,
477
+ "installationMode": "copy",
478
+ "sharedLinksAllowed": false,
479
+ "isolatedRuntimeRequired": true,
480
+ "skillRequired": true,
481
+ "updateRequiresSkillSync": true,
482
+ "required_components": [
483
+ "cli",
484
+ "skill"
485
+ ],
486
+ "installGuide": "INSTALL.md",
487
+ "updateGuide": "UPDATE.md",
488
+ "install": "skill install with resolved --root",
489
+ "update": "update install with resolved --root",
490
+ "verification": "version, managed SHA256 status, target-owned runtime and host discovery",
491
+ "installerIntegration": "npm postinstall notice and scripts-disabled INSTALL.md"
492
+ },
493
+ "automaticUpdates": {
494
+ "enabledByDefault": true,
495
+ "intervalHours": 24,
496
+ "timeoutMs": 4000,
497
+ "trigger": "generate without dry-run",
498
+ "defaultMode": "notify",
499
+ "configuration": "SEEDAUDIO_STATE_DIR/update-check.json; notification only",
500
+ "recovery": "Keep installed version offline; preserve malformed cache for inspection",
501
+ "disable": "SEEDAUDIO_AUTO_UPDATE=0"
502
+ },
503
+ "voiceLibrary": {
504
+ "schemaVersion": 1,
505
+ "commands": [
506
+ "voice list",
507
+ "voice save",
508
+ "voice show",
509
+ "voice preview",
510
+ "voice export",
511
+ "voice import"
512
+ ],
513
+ "selector": "--voice ID_OR_NAME[@VERSION]",
514
+ "storage": "SEEDAUDIO_VOICE_DIR or configuration directory / voices",
515
+ "versioning": "immutable increasing integer revisions",
516
+ "precedence": [
517
+ "explicit generation flags",
518
+ "voice preset",
519
+ "service defaults"
520
+ ],
521
+ "referenceConflict": "VOICE_REFERENCE_CONFLICT",
522
+ "preview": "return original local sample path, no paid call",
523
+ "sharedSamples": false,
524
+ "receipt": "voice.id/name/version/reference_sha256/style/effective_settings",
525
+ "compressedReferenceProbe": "ffprobe (FFmpeg), only for MP3/Ogg import or save"
79
526
  }
80
527
  }