@genspark/cli 1.0.24 → 1.0.26

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/docs/skills.md CHANGED
@@ -1,6 +1,213 @@
1
1
  # GSK CLI Skills Index
2
2
 
3
3
  > Auto-generated by `python -m backend.genspark_tool_cli.generate_skills`. Do not edit manually.
4
+ >
5
+ > **Exception — the section below.** The `gsk skills <verb>` command group
6
+ > (design: `docs/plans/2026-07-05-gsk-skills-universal-design.md`) is
7
+ > registered behind `requires_gk="gk_skills_cli"`, and the generator skips
8
+ > every gated tool (`generate_skills.py`: `if config.requires_gk: continue`),
9
+ > so these verbs never appear in the auto-generated table below and have no
10
+ > other doc home yet. This section is maintained by hand until that gap is
11
+ > closed; re-running `python -m backend.genspark_tool_cli.generate_skills`
12
+ > overwrites the whole file, so re-add this section if it goes missing.
13
+
14
+ ## `gsk skills` command group
15
+
16
+ Ten verbs — `list`, `info`, `team`, `install`, `uninstall`, `upgrade`,
17
+ `pull`, `sync`, `save`, `publish` — over the shared `SkillsService` catalog
18
+ (personal / community / team skills). Gated by `gk_skills_cli` (employees +
19
+ mainfunc allowlist during rollout); with the flag off, none of the
20
+ `skills_*` tools are discoverable via `GET /api/tool_cli/tools` and the CLI
21
+ reports them as unknown commands.
22
+
23
+ Mutating verbs (`install`, `uninstall`, `upgrade`, `save`, `publish`) reject
24
+ agent-principal (DE-runtime) tokens with `FORBIDDEN: agent-principal tokens
25
+ cannot modify user skills` — a caller can only ever mutate its own catalog,
26
+ never another user's. Read/export verbs (`list`, `info`, `team`, `pull`,
27
+ `sync`) carry no such check.
28
+
29
+ ### `pull` vs `sync` — authoring-only vs. runtime materialization
30
+
31
+ These two verbs look similar (both write a skill's files to local disk) but
32
+ serve opposite purposes and must not be conflated:
33
+
34
+ - **`pull <ref> [--out <dir>]`** is an authoring/export/debug flow only. It
35
+ writes one skill's full tree plus a `.genspark-skill.json` provenance
36
+ sidecar (`{ref, owner, slug, commit, publisher_type, pulled_at,
37
+ file_count, content_hash}`) so the directory can be identified and
38
+ refreshed on a later re-pull. It is **never** a runtime consumption or
39
+ boot path — a sandbox does not `pull` its enabled skills. A refresh
40
+ (re-pull into a directory that already has the sidecar) that fails
41
+ mid-write leaves the destination **emptied**, not restored to its prior
42
+ contents — refresh clears the target first, so the next `pull` rebuilds
43
+ it from scratch.
44
+ - **`sync [--check] [--store-dir <d>] [--mount-dir <d>]`** is the runtime
45
+ materialization path: it makes local disk match the caller's *entire*
46
+ enabled-skill set, incrementally, and is the verb a boot script or agent
47
+ host runs on every startup.
48
+
49
+ Put another way: `pull` moves one skill to a place you choose, for editing;
50
+ `sync` moves your whole enabled set to a fixed place, for running.
51
+
52
+ ### `sync` — materialize your enabled skills
53
+
54
+ `gsk skills sync [--check] [--store-dir <dir>] [--mount-dir <dir>]`
55
+
56
+ The CLI keeps a local `{slug: sha}` digest map at
57
+ `<storeDir>/skills-sync-state.json` (default store dir: `~/.gsk/skills-store`;
58
+ default mount dir: `~/.opencode/skills`). Each `sync` call sends that digest
59
+ to the server, which diffs it against the caller's enabled-skill set and
60
+ returns only what changed:
61
+
62
+ - **State file self-heal.** A missing state file, unparseable JSON, OR a
63
+ valid-JSON-but-wrong-shape map (a non-object, or any entry whose key isn't
64
+ a valid slug / whose value isn't a string) is treated as an empty `{}`
65
+ digest, which forces a full re-fetch of every enabled skill on the next
66
+ `sync` rather than risk skipping a change against state that can't be
67
+ trusted. The shape check matters because the server rejects the entire
68
+ sync on a single bad key — without it a corrupt state file would wedge
69
+ every future `sync`.
70
+ - **Disk-truth re-materialization.** `sync` trusts DISK over the state file:
71
+ when the server reports a slug `unchanged` (its digest matched) but the
72
+ slug is no longer materialized on disk — the `<storeDir>/<slug>` dir was
73
+ hand-deleted, or a state file was restored from backup without its store —
74
+ the slug is dropped from the digest map so the next `sync` sees a miss and
75
+ re-fetches it. This keeps the "make local disk match the entire enabled
76
+ set" contract true even after out-of-band tampering with the store.
77
+ - **Symlink merge rules.** Fetched content lands in
78
+ `<storeDir>/<slug>/`, written to a sibling temp directory first and then
79
+ `rename`d into place (never a half-written skill on a dropped
80
+ connection), then symlinked from `<mountDir>/<slug>`. A stale symlink at
81
+ the mount path is freely repointed — same outcome as `setup.sh`'s
82
+ `rm -rf` + `ln -sfn` at sandbox boot. A pre-existing **real** directory at
83
+ the mount path (an inline-tar built-in skill, or user content), however,
84
+ is a deliberate **deviation** from `setup.sh`: `setup.sh` unconditionally
85
+ `rm -rf`s the mount path before symlinking, so the synced skill always
86
+ wins there. This CLI-side materializer instead never clobbers a real
87
+ directory it didn't create — the sync reports that slug as failed
88
+ instead — because it runs against a user's laptop filesystem, not a
89
+ disposable sandbox. When the mount is refused this way, the fetched
90
+ content is still **materialized in the store** and its sha is recorded, so
91
+ the server stops re-sending that slug on every subsequent `sync` — the
92
+ user sees the "stored but not mounted" warning once per content change,
93
+ not a re-download each run.
94
+ - **`--check`** reports the diff without writing anything to disk (a dry
95
+ run / shadow comparison), and sets the process exit code so scripts don't
96
+ need to parse output: **exit 0** when every entry is `unchanged`, **exit
97
+ 3** when at least one slug would update, be removed, or errored.
98
+ - **Batching.** The server bounds each response to an 8 MiB soft budget
99
+ (`max_response_bytes`), checked *before* starting a skill's package
100
+ rather than mid-file — so a single batch can overshoot 8 MiB by up to one
101
+ skill's package, itself capped at 25 MiB (`per_skill_cap_bytes`). A
102
+ response with `"complete": false` means more changed skills remain; the
103
+ CLI calls `sync` again carrying forward the digest state it has applied
104
+ so far, and repeats until `"complete": true`. The client loop aborts
105
+ after 20 batches without completing (`exit 1`) as a runaway guard.
106
+ - Idempotent: an immediate second `sync` reports all-`unchanged`, zero
107
+ writes — including slugs whose mount was refused (their store is already
108
+ materialized and the sha recorded, so they too report `unchanged` with no
109
+ re-download).
110
+ - **Exit codes** (a boot script keys off these instead of parsing output):
111
+ - **0** — fully clean. For a real (non-`--check`) sync every slug was
112
+ applied/removed/unchanged with zero failures; for `--check`, everything
113
+ was `unchanged`.
114
+ - **3** — `--check` only: at least one slug would update, be removed, or
115
+ errored (a diff exists). No disk writes happened.
116
+ - **4** — a real sync finished but at least one slug **failed** (mount
117
+ refused because a real dir occupies the mount path, a write error, or a
118
+ server `error` row). The rest were applied; this code tells a boot
119
+ script "some skills didn't materialize" as distinct from a clean run.
120
+ **Exit 4 is retryable / non-fatal, not a hard failure.** In particular a
121
+ fresh sandbox whose enabled slug collides with a tar-baked builtin
122
+ directory exits 4 on its FIRST sync (real-dir-wins → that slug reported
123
+ `failed`, its content stored-but-not-mounted), then exits 0 on every
124
+ subsequent sync (the recorded sha suppresses re-sends and the builtin
125
+ keeps winning) — it self-heals. A symlink-unsupported filesystem
126
+ (Windows without Developer Mode, exFAT/FAT/SMB — `symlinkSync` throws)
127
+ is the PERSISTENT variant: the store is downloaded once and never
128
+ re-downloaded, but the mount can't be created, so that slug stays
129
+ `failed` and the sync keeps exiting 4 on every run. Both are the same
130
+ "downloaded but not mounted" condition. A boot-script consumer MUST NOT
131
+ treat exit 4 as a boot-blocking error: log it and continue.
132
+ - **1** — the sync loop itself aborted: a mid-loop batch call failed, or
133
+ it exceeded the 20-batch runaway guard without completing.
134
+
135
+ ### `upgrade` — refresh an installed skill to the latest published version
136
+
137
+ `gsk skills upgrade <slug>`
138
+
139
+ Re-pins one installed skill to its publisher's latest version (a team skill
140
+ to the org-**approved** sha, never the author's latest candidate; a curated
141
+ or peer install to the source's current version). Idempotent — an
142
+ already-current skill reports `changed: false`, and a self-authored skill is
143
+ a benign skip (you edit those via `save`, not `upgrade`).
144
+
145
+ **Local edits are replaced.** If you `pull`ed an installed copy, edited it,
146
+ and `save`d the edits back to that same slug, `upgrade` **overwrites those
147
+ local edits** with the publisher's version — there is no divergence warning
148
+ today. To keep a customized fork, `pull`/`save` it under a **separate slug**
149
+ so `upgrade` on the original never touches your fork.
150
+
151
+ ### `save` — write a local directory back to your catalog
152
+
153
+ `gsk skills save [path]` (default `path`: current directory)
154
+
155
+ The sentinel-protocol successor: SAS's retired `.save_to_self` file
156
+ convention told the sandbox host to zip a skill directory and upload it
157
+ out-of-band. `save` reads the directory itself and ships the encoded bytes
158
+ inline — works on any host, including git-less ones.
159
+
160
+ **Directory contract:**
161
+
162
+ - A root `SKILL.md` is required; the server rejects a save without one
163
+ anyway (frontmatter validation), so the CLI fails fast locally.
164
+ - Symlinks are never followed (skipped outright) — a save must not escape
165
+ the directory or loop on a cyclic link.
166
+ - `node_modules/` and `.git/` directories are never walked or shipped, at
167
+ any depth — they are never part of a skill, can blow the byte cap on junk,
168
+ and `.git` would leak history.
169
+ - At the root only, dotfiles are excluded from the upload except
170
+ `.gitignore` (ordinary authoring content) and the pull provenance sidecar
171
+ `.genspark-skill.json` (metadata, not a skill file). Dotfiles in
172
+ subdirectories **are** uploaded (only root-level dotfiles are excluded), so
173
+ clean any secret files out of subdirectories before `save`.
174
+ - The upload is capped at 25 MiB total (mirrored client- and server-side,
175
+ so an oversized save fails locally instead of round-tripping first).
176
+
177
+ **Fork warning.** If the target directory carries a
178
+ `.genspark-skill.json` sidecar (i.e. it was previously populated by `pull`)
179
+ with a recorded `owner`, `save` prints a warning that saving will fork the
180
+ skill into your own catalog — and then proceeds. This warning fires for
181
+ **any** previously-pulled directory, including one that was pulled from
182
+ your *own* catalog: the CLI has no "whoami" to compare the sidecar's owner
183
+ against the caller's identity, so it cannot distinguish "this is someone
184
+ else's skill" from "this is mine, re-pulled." Treat the warning as
185
+ informational, not necessarily a fork.
186
+
187
+ **Overwrite semantics.** `save` always overwrites the caller's existing
188
+ copy of the resulting slug — there is no separate create-only mode; a
189
+ brand-new slug is a create either way. The response's `outcome` field is
190
+ either `"unchanged"` (identical tree, no-op) or `"updated"` — note that the
191
+ very first save of a slug that doesn't exist yet in the caller's catalog
192
+ also reports `outcome: "updated"`, since `upload_skill_with_outcome` has no
193
+ distinct "created" outcome today.
194
+
195
+ ### Known follow-ups (not fixed in S1)
196
+
197
+ Tracked here so they're on record; deliberately out of scope for the initial
198
+ `gsk skills` landing:
199
+
200
+ - **Large payloads are (de)serialized on the event loop.** `pull` / `sync` /
201
+ `save` bodies are `json.loads`'d in the CLI executor and `json.dumps`'d in
202
+ the router, and `save`'s request body is parsed on the event loop
203
+ downstream of the adaptor's own `to_thread` hop. This is a cross-cutting
204
+ `tool_cli`-infra concern (bounded today by the 25 MiB payload caps and the
205
+ employee-gated rollout) to be addressed in a shared executor PR, not
206
+ per-verb here.
207
+ - **`sync --check` prints only the first batch's diff.** A multi-batch diff
208
+ (`complete: false`) shows only the first batch's per-slug lines in `--check`
209
+ mode, though the exit code is still correct (3 if anything would change).
210
+ Full multi-batch `--check` reporting is a follow-up.
4
211
 
5
212
  **Total skills:** 97
6
213
 
@@ -8,7 +215,7 @@
8
215
 
9
216
  | Skill | Description |
10
217
  |-------|-------------|
11
- | [gsk-aidrive](../skills/gsk-aidrive/SKILL.md) | AI-Drive file storage and management. Actions: ls, mkdir, rm, move, get_readable_url, download_video, download_audio, do |
218
+ | [gsk-aidrive](../skills/gsk-aidrive/SKILL.md) | AI-Drive file storage and management. Actions: ls, find, mkdir, rm, move, get_readable_url, download_video, download_aud |
12
219
  | [gsk-analyze-media](../skills/gsk-analyze-media/SKILL.md) | Analyze various types of media content including images, audio, and video. |
13
220
  | [gsk-audio-generation](../skills/gsk-audio-generation/SKILL.md) | Generate audio content including TTS, sound effects, and music. |
14
221
  | [gsk-audio-processing](../skills/gsk-audio-processing/SKILL.md) | Preprocess audio: remove background noise, extract specific sounds, or enhance quality. |
@@ -92,6 +299,7 @@
92
299
  | [gsk-social-twitter](../skills/gsk-social-twitter/SKILL.md) | Search and retrieve data from Twitter/X: posts, users, comments, retweets, and more. |
93
300
  | [gsk-stock-price](../skills/gsk-stock-price/SKILL.md) | Retrieve real-time stock price information for a specific company. |
94
301
  | [gsk-summarize-large-document](../skills/gsk-summarize-large-document/SKILL.md) | Analyze and answer questions about large documents (PDFs, web pages, Word docs, etc.). |
302
+ | [gsk-task-status](../skills/gsk-task-status/SKILL.md) | Look up an existing task project previously created with create_task: returns its status, page URL (task_url), and extra |
95
303
  | [gsk-teams-create-chat](../skills/gsk-teams-create-chat/SKILL.md) | Create a new Microsoft Teams chat. |
96
304
  | [gsk-teams-list-channels](../skills/gsk-teams-list-channels/SKILL.md) | List channels in a Microsoft Teams team. |
97
305
  | [gsk-teams-list-chats](../skills/gsk-teams-list-chats/SKILL.md) | List recent Microsoft Teams chats. |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@genspark/cli",
3
- "version": "1.0.24",
3
+ "version": "1.0.26",
4
4
  "description": "CLI tool for Genspark Tool API - search, crawl, analyze images, generate media",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -18,6 +18,7 @@
18
18
  "build": "tsc",
19
19
  "dev": "ts-node src/index.ts",
20
20
  "start": "node dist/index.js",
21
+ "test": "npm run build && node --test tests/*.test.mjs",
21
22
  "lint": "eslint src/**/*.ts",
22
23
  "clean": "rm -rf dist",
23
24
  "prepublishOnly": "npm run clean && npm run build"
@@ -1,8 +1,10 @@
1
1
  ---
2
2
  name: gsk-aidrive
3
3
  version: 1.0.0
4
- description: 'AI-Drive file storage and management. Actions: ls, mkdir, rm, move,
5
- get_readable_url, download_video, download_audio, download_file, upload.'
4
+ description: 'AI-Drive file storage and management. Actions: ls, find, mkdir, rm,
5
+ move, get_readable_url, download_video, download_audio, download_file, upload. `ls`
6
+ lists ONE directory (non-recursive) — to locate files by name anywhere in the drive,
7
+ use `find` (one indexed query) instead of walking directories with repeated `ls`.'
6
8
  metadata:
7
9
  category: general
8
10
  requires:
@@ -15,7 +17,7 @@ metadata:
15
17
 
16
18
  **PREREQUISITE:** Read `../gsk-shared/SKILL.md` for auth, global flags, and security rules.
17
19
 
18
- AI-Drive file storage and management. Actions: ls, mkdir, rm, move, get_readable_url, download_video, download_audio, download_file, upload.
20
+ AI-Drive file storage and management. Actions: ls, find, mkdir, rm, move, get_readable_url, download_video, download_audio, download_file, upload. `ls` lists ONE directory (non-recursive) — to locate files by name anywhere in the drive, use `find` (one indexed query) instead of walking directories with repeated `ls`.
19
21
 
20
22
  ## Usage
21
23
 
@@ -29,8 +31,9 @@ gsk drive [options]
29
31
 
30
32
  | Flag | Required | Description |
31
33
  |------|----------|-------------|
32
- | `<action>` (positional) | Yes | Action to perform (string, one of: ls, mkdir, rm, move, get_readable_url, download_video, download_audio, download_file, upload) |
33
- | `-p`, `--path` | No | Path to file or folder for actions: ls, mkdir, rm, move, get_readable_url. For compress: folder path to compress. For decompress: archive file path to decompress (string) |
34
+ | `<action>` (positional) | Yes | Action to perform (string, one of: ls, find, mkdir, rm, move, get_readable_url, download_video, download_audio, download_file, upload) |
35
+ | `-p`, `--path` | No | Path to file or folder for actions: ls, mkdir, rm, move, get_readable_url. For compress: folder path to compress. For decompress: archive file path to decompress. For find: directory to search within (default '/' searches everywhere). (string) |
36
+ | `-q`, `--query` | No | Filename search keyword for find action. Matches files and directories whose name contains the keyword. Case-insensitive. Supports partial matches. (string) |
34
37
  | `-f`, `--filter_type` | No | Filter by entry type for ls action (improves performance): all (default), file, directory. Use 'file' when only need files. (string, one of: all, file, directory) |
35
38
  | `--file_type` | No | Filter by file MIME type for ls action (improves performance): all (default), audio, video, image. Combine with filter_type='file' for best results. (string, one of: all, audio, video, image) |
36
39
  | `--target_path` | No | Destination path, for move action only (string) |
@@ -1,7 +1,8 @@
1
1
  ---
2
2
  name: gsk-audio-generation
3
3
  version: 1.0.0
4
- description: Generate audio content including TTS, sound effects, and music.
4
+ description: Generate audio (TTS, sound effects, music) with per-model params; query
5
+ get_model_info for each model's params_schema.
5
6
  metadata:
6
7
  category: general
7
8
  requires:
@@ -14,7 +15,7 @@ metadata:
14
15
 
15
16
  **PREREQUISITE:** Read `../gsk-shared/SKILL.md` for auth, global flags, and security rules.
16
17
 
17
- Generate audio content including TTS, sound effects, and music.
18
+ Generate audio (TTS, sound effects, music) with per-model params; query get_model_info for each model's params_schema.
18
19
 
19
20
  ## Usage
20
21
 
@@ -28,16 +29,23 @@ gsk audio [options]
28
29
 
29
30
  | Flag | Required | Description |
30
31
  |------|----------|-------------|
31
- | `<query>` (positional) | No | For text-to-speech generation: - For Gemini TTS (google/gemini-3.1-flash-tts-preview): Can use script_url field or query field. When using multi-speaker, include speaker prefixes like 'Speaker1: Hello there! Speaker2: Hi back!' - For elevenlabs/v3-tts: Supports both single and multi-speaker generation. For multi-speaker, include speaker prefixes like 'Speaker 1: Hello there! Speaker 2: Hi back!' - For other TTS models (Minimax): Use plain text without character names (e.g., use 'That's not what she meant, fatass.' instead of 'STAN: That's not what she meant, fatass.' as the character name will be pronounced). For sound effects, provide a detailed description of the audio to generate (e.g., 'A keyboard typing sound, rain, wind, etc.').For background music, provide a detailed description of the music to generate.must be in English if choosing CassetteAI/music-generator music generation.(e.g., 'Smooth chill hip-hop beat with mellow piano melodies, deep bass, and soft drums, perfect for a night drive. Key: D Minor, Tempo: 90 BPM.'). (string) |
32
- | `-m`, `--model` | Yes | The model to use for audio generation. google/gemini-3.1-flash-tts-preview: Best, high-quality TTS with enhanced expressivity and granular audio tags ([whispers], [excited], [laughs], [sighs]). Supports inline expression control and multi-speaker dialogue with speaker prefixes (e.g., 'Speaker1: text, Speaker2: text').elevenlabs/v3-tts: Advanced multilingual text-to-speech model with multi-speaker dialogue support. Supports emotional tags like [excited], [whispers], [laughs]. Best for expressive content and conversations.fal-ai/elevenlabs/tts/multilingual-v2: High-quality multilingual text-to-speech model. For English, this is a preferred model.fal-ai/minimax/speech-2.8-hd: High-quality multilingual text-to-speech model. For Chinese, 'Chinese,Yue', Japanese, Korean, this is a preferred model. Note: Only one speaker can be used per generation. For multiple characters, please generate them one by one in sequence. elevenlabs/sound-effects: Sound effect generation model. Minimum duration is 0.1 seconds, maximum is 22 seconds.elevenlabs/music: ElevenLabs music generation model. Supports both instrumental music AND songs with vocals/singing. NOTE: Does NOT support custom lyrics - lyrics are auto-generated. Minimum duration is 10 seconds, maximum is 5 minutes (300 seconds). Professional music production quality.elevenlabs/voice-clone: ElevenLabs voice cloning model. Clone a voice from audio samples. Returns voice ID for use in TTS generation.elevenlabs/voice-changer: ElevenLabs voice changer model. Transform audio from one voice to another. Requires source audio and target voice ID.CassetteAI/music-generator: Background music generation model. minimum duration is 10 seconds, maximum is up to 180 seconds.fal-ai/minimax-music/v2.6: Song generation with lyrics using MiniMax Music 2.6. High-fidelity audio with humanized vocals. Supports markers (Verse), (Chorus), (Bridge), (Outro), (Instrumental intro). Requires both style prompt and lyrics.mureka/song-generator: Professional song generation with lyrics. Supports style prompts, reference tracks, vocal and melody inputs. Generate full songs with vocals. Maximum duration is 180 seconds.mureka/instrumental-generator: Instrumental music generation. Create background music and instrumental tracks without vocals. Supports style prompts and reference tracks. Maximum duration is 180 seconds.google/lyria-music: Google's Lyria 3 music generation model. High-quality 44.1kHz stereo output with vocals and lyrics support. Use sub_model='lyria-3-clip' for 30s clips or 'lyria-3-pro' for full songs (~3min). Supports custom lyrics with section tags like [Verse], [Chorus], [Bridge]. Multilingual vocals: English, Chinese, Japanese, French, Spanish, Korean, etc. (string, one of: google/gemini-3.1-flash-tts-preview, elevenlabs/v3-tts, fal-ai/elevenlabs/tts/multilingual-v2, fal-ai/minimax/speech-2.8-hd, elevenlabs/sound-effects, elevenlabs/music, elevenlabs/voice-clone, elevenlabs/voice-changer, CassetteAI/music-generator, fal-ai/minimax-music/v2.6, mureka/song-generator, mureka/instrumental-generator, google/lyria-music) |
33
- | `-r`, `--requirements` | No | Required parameters for TTS generation. If you know the speaker name, you can also pass it in the requirementsDetailed description of how the TTS should be generated, including voice characteristics, emotion, pacing, accent, tone, etc. For example: 'A calm, professional female voice with British accent reading at moderate pace'.or 'Speaker1: Algenib, Speaker2: Kore' if you want to use specific speakersThis will be used by the agent to determine the appropriate voice and style parameters (string) |
34
- | `--previous_audio_params` | No | Required parameters for TTS generation. The `generated_audios[].params` object from previous generation,get from previous tool call, when you need to fix the voice of a specific character, it will be useful. (object) |
35
- | `-d`, `--duration` | No | The desired duration of the generated audio in seconds. Only applicable for sound effects generation.Default is 0, which means the model will determine the appropriate duration.For background music generation, set default to 30 seconds. (number, default: `0`) |
36
- | `--custom_voice_id` | No | Custom voice ID for: 1. Minimax TTS - voice ID from voice cloning, 2. ElevenLabs Voice Changer - target voice ID to change to (string) |
37
- | `--voice_files` | No | URLs or paths to voice sample files for voice cloning. Multiple samples improve clone quality. Required for ElevenLabs voice cloning model. (array) |
38
- | `--source_audio_file` | No | URL or path to the source audio file for voice transformation. Required for ElevenLabs voice changer model. This is the audio that will be transformed to the target voice. (string) |
39
- | `--image_urls` | No | The URLs of the images to use as a reference for the audio generation.(default is [], if the task is based on one or more reference images, it is required) (array) |
40
- | `-l`, `--lyrics` | No | Lyrics for song generation. For google/lyria-music: custom lyrics with section tags like [Verse], [Chorus], [Bridge]. Works with both Clip and Pro. For Mureka song generator and MiniMax Music 2.6: required for vocal generation. (string) |
32
+ | `<prompt>` (positional) | No | What to generate: narration text for TTS (model-specific format see the model's prompting guide), or a description for music / sound effects. For voice-clone models this text is narrated with the cloned voice. (string) |
33
+ | `-m`, `--model` | No | Model id. Query get_model_info with it before generating. (string, one of: CassetteAI/music-generator, bytedance/seed-audio-1.0, elevenlabs/music, elevenlabs/sound-effects, elevenlabs/v3-tts, elevenlabs/voice-changer, elevenlabs/voice-clone, fal-ai/elevenlabs/sound-effects, fal-ai/elevenlabs/tts/multilingual-v2, fal-ai/minimax-music/v2.6, fal-ai/minimax/speech-2.8-hd, fal-ai/minimax/voice-clone, fal-ai/vibevoice/7b, google/gemini-3.1-flash-tts-preview, google/lyria-music, mureka/instrumental-generator, mureka/song-generator, nova-sr) |
34
+ | `-p`, `--params` | No | Model-specific parameters (speakers, speed/pitch/volume, duration, voice_files, lyrics, composition_plan, output_format, ...). MUST follow the `params_schema` that get_model_info returns for the chosen model. (object) |
35
+ | `-f`, `--file_name` | No | Name for the generated audio. (string, default: `audio`) |
36
+ | `--audio_type` | No | (string, one of: speech, music, sound_effect, default: `speech`) |
37
+ | `--query_file` | No | Optional repo-relative path to a UTF-8 text file used verbatim as the prompt (long scripts by path). Requires `repo_id`. (string) |
38
+ | `--repo_id` | No | Optional Second Brain repo id; required only when URL fields use repo-relative paths. (string) |
39
+ | `--speaker` | No | Model-specific preset voice (prefer putting it in `params`). (string) |
40
+ | `-d`, `--duration` | No | Duration in seconds for sound-effect/music models (prefer `params`). (integer) |
41
+ | `-l`, `--lyrics` | No | Lyrics for song models (prefer `params`). (string) |
42
+ | `--voice_files` | No | Voice sample URLs for cloning models (prefer `params`). (array) |
43
+ | `--source_audio_file` | No | Source audio URL for voice-changer / enhancement models (prefer `params`). (string) |
44
+ | `--custom_voice_id` | No | Cloned voice id for TTS models (prefer `params`). (string) |
45
+ | `--image_urls` | No | Deprecated: first entry maps to image conditioning when the model supports it. (array) |
46
+ | `-r`, `--requirements` | No | Deprecated inner-agent field; ignored. Use `params` per the model's params_schema. (string) |
47
+ | `--query` | No | Deprecated alias of `prompt` (pre-refactor scripts); ignored when `prompt` is set. (string) |
48
+ | `--previous_audio_params` | No | A prior generation's `params` dict, replayed for voice consistency (explicit `params` wins on conflict). (object) |
41
49
 
42
50
  ## Local File Support
43
51
 
@@ -29,7 +29,9 @@ gsk crawl [options]
29
29
  | Flag | Required | Description |
30
30
  |------|----------|-------------|
31
31
  | `<url>` (positional) | Yes | http/https url (string) |
32
- | `--render_js` | No | Enable JavaScript rendering to bypass anti-bot protection (Cloudflare, 403 errors, dynamically loaded content). Use only when the site blocks plain HTTP crawlers or returns no content — this costs significantly more credits than the default crawler. Default: false. (boolean) |
32
+ | `--render_js` | No | Enable JavaScript rendering to bypass anti-bot protection (Cloudflare, 403 errors, dynamically loaded content). Use only when the site blocks plain HTTP crawlers or returns no content — this costs significantly more credits than the default crawler. Ignored when raw=true. Default: false. (boolean) |
33
+ | `--raw` | No | Return the original response body as decoded text (no markdown conversion). Use when you need raw HTML, meta tags, JSON, or other unprocessed content. Text-only: requests with a binary Content-Type (image/video/audio/pdf/zip/Office) are refused — use the sandbox bash tool with curl/wget for those. Returns at most 10000 bytes per call — pass offset to fetch the next chunk. Default: false. (boolean) |
34
+ | `--offset` | No | Byte offset to start reading from when raw=true. Use to fetch subsequent chunks of the raw body (e.g. offset=10000 for bytes 10000-19999). Maximum 1048576 (1 MiB) — beyond that, switch to the sandbox bash tool with curl/wget. Ignored when raw=false. Default: 0. (integer, default: `0`) |
33
35
 
34
36
  ## Local File Support
35
37
 
@@ -3,7 +3,9 @@ name: gsk-create-task
3
3
  version: 1.0.0
4
4
  description: Create and execute tasks using specialized AI agents. Supports super_agent,
5
5
  podcasts, docs, slides, deep_research, website, video_generation, audio_generation,
6
- meeting_notes, cross_check.
6
+ meeting_notes, cross_check. The returned data.task_url is owner-only until shared
7
+ from that page. To re-fetch a created task's link or outcome, use task_status —
8
+ re-running create_task creates and bills a new task.
7
9
  metadata:
8
10
  category: general
9
11
  requires:
@@ -16,7 +18,7 @@ metadata:
16
18
 
17
19
  **PREREQUISITE:** Read `../gsk-shared/SKILL.md` for auth, global flags, and security rules.
18
20
 
19
- Create and execute tasks using specialized AI agents. Supports super_agent, podcasts, docs, slides, deep_research, website, video_generation, audio_generation, meeting_notes, cross_check.
21
+ Create and execute tasks using specialized AI agents. Supports super_agent, podcasts, docs, slides, deep_research, website, video_generation, audio_generation, meeting_notes, cross_check. The returned data.task_url is owner-only until shared from that page. To re-fetch a created task's link or outcome, use task_status — re-running create_task creates and bills a new task.
20
22
 
21
23
  ## Usage
22
24
 
@@ -0,0 +1,36 @@
1
+ ---
2
+ name: gsk-get-model-info
3
+ version: 1.0.0
4
+ description: 'Detailed generation-model info: capabilities, params_schema, available
5
+ speakers and prompting guides (audio/video/image/3d).'
6
+ metadata:
7
+ category: general
8
+ requires:
9
+ bins:
10
+ - gsk
11
+ cliHelp: gsk model-info --help
12
+ ---
13
+
14
+ # gsk-get-model-info
15
+
16
+ **PREREQUISITE:** Read `../gsk-shared/SKILL.md` for auth, global flags, and security rules.
17
+
18
+ Detailed generation-model info: capabilities, params_schema, available speakers and prompting guides (audio/video/image/3d).
19
+
20
+ ## Usage
21
+
22
+ ```bash
23
+ gsk model-info [options]
24
+ ```
25
+
26
+ **Aliases:** `model-info`
27
+
28
+ ## Flags
29
+
30
+ | Flag | Required | Description |
31
+ |------|----------|-------------|
32
+ | `<model_names>` (positional) | Yes | Array of model names/IDs to query. Each must be one of the available model names. (array) |
33
+
34
+ ## See Also
35
+
36
+ - [gsk-shared](../gsk-shared/SKILL.md) — Authentication and global flags
@@ -27,25 +27,32 @@ gsk github [options]
27
27
 
28
28
  | Flag | Required | Description |
29
29
  |------|----------|-------------|
30
- | `<action>` (positional) | Yes | Action to perform. 'list_repos': List repositories for the authenticated user; 'search_issues': Search issues and pull requests; 'create_issue': Create a new issue; 'update_issue': Update an existing issue (string, one of: list_repos, search_issues, create_issue, update_issue) |
30
+ | `<action>` (positional) | Yes | Action to perform. 'list_repos': List repositories for the authenticated user; 'list_commits': List a repo's commits, filterable by author and ISO 8601 time range; 'get_commit': Read one commit's message, stats, and changed files; 'list_prs': List a repo's pull requests with author, state, and merged_at; 'list_contributors': List a repo's contributors (logins + commit counts) — the raw material for resolving a person's name to their GitHub login; 'user_activity': Recent activity feed (pushes/PRs/reviews/comments) for a GitHub login; private repos covered for the authenticated user only; 'search_issues': Search issues and pull requests; 'get_issue': Read a single issue by number; 'create_issue': Create a new issue; 'update_issue': Update an existing issue; 'list_comments': List comments on an issue or pull request; 'create_comment': Post a new comment on an issue or pull request; 'update_comment': Edit an existing comment by id (string, one of: list_repos, list_commits, get_commit, list_prs, list_contributors, user_activity, search_issues, get_issue, create_issue, update_issue, list_comments, create_comment, update_comment) |
31
31
  | `--visibility` | No | [list_repos] Filter by repository visibility. Default: all. (string, one of: all, public, private) |
32
32
  | `--affiliation` | No | [list_repos] Comma-separated list of affiliation types: owner, collaborator, organization_member. Default: owner,collaborator,organization_member. (string) |
33
- | `--sort` | No | [list_repos] How to sort the results. Default: updated. \| [search_issues] How to sort results. Default: best match. (string, one of: created, updated, pushed, full_name) |
34
- | `--direction` | No | [list_repos] Sort direction. Default: desc (except for full_name). (string, one of: asc, desc) |
35
- | `--per_page` | No | [list_repos] Number of results per page (max 100). Default: 30. \| [search_issues] Number of results per page (max 100). Default: 30. (integer) |
36
- | `--page` | No | [list_repos] Page number of the results. Default: 1. \| [search_issues] Page number of the results. Default: 1. (integer) |
33
+ | `--sort` | No | [list_repos] How to sort the results. Default: updated. \| [list_prs] How to sort the results. Default: created. \| [search_issues] How to sort results. If omitted, defaults to 'created' (newest-first) so recent issues surface first instead of GitHub's relevance ranking. Pass 'updated' to sort by last-updated, or another value to override. (string, one of: created, updated, pushed, full_name) |
34
+ | `--direction` | No | [list_repos] Sort direction. Default: desc (except for full_name). \| [list_prs] Sort direction. Default: desc. (string, one of: asc, desc) |
35
+ | `--per_page` | No | [list_repos] Number of results per page (max 100). Default: 30. \| [list_commits] Number of results per page (max 100). Default: 30. \| [list_prs] Number of results per page (max 100). Default: 30. \| [list_contributors] Number of results per page (max 100). Default: 30. \| [user_activity] Number of events per page (max 100). Default: 30. \| [search_issues] Number of results per page (max 100). Default: 30. \| [list_comments] Number of results per page (max 100). Default: 30. (integer) |
36
+ | `--page` | No | [list_repos] Page number of the results. Default: 1. \| [list_commits] Page number of the results. Default: 1. \| [list_prs] Page number of the results. Default: 1. \| [list_contributors] Page number of the results. Default: 1. \| [user_activity] Page number of the results. Default: 1. \| [search_issues] Page number of the results. Default: 1. \| [list_comments] Page number of the results. Default: 1. (integer) |
37
+ | `--owner` | No | [list_commits] The account owner of the repository (username or organization name). \| [get_commit] The account owner of the repository (username or organization name). \| [list_prs] The account owner of the repository (username or organization name). \| [list_contributors] The account owner of the repository (username or organization name). \| [get_issue] The account owner of the repository (username or organization name). \| [create_issue] The account owner of the repository (username or organization name). \| [update_issue] The account owner of the repository (username or organization name). \| [list_comments] The account owner of the repository (username or organization name). \| [create_comment] The account owner of the repository (username or organization name). \| [update_comment] The account owner of the repository (username or organization name). (string) |
38
+ | `--repo` | No | [list_commits] The name of the repository (without the owner prefix). \| [get_commit] The name of the repository (without the owner prefix). \| [list_prs] The name of the repository (without the owner prefix). \| [list_contributors] The name of the repository (without the owner prefix). \| [search_issues] Repository in 'owner/repo' format to search within. Will be added to the query. \| [get_issue] The name of the repository (without the owner prefix). \| [create_issue] The name of the repository (without the owner prefix). \| [update_issue] The name of the repository (without the owner prefix). \| [list_comments] The name of the repository (without the owner prefix). \| [create_comment] The name of the repository (without the owner prefix). \| [update_comment] The name of the repository (without the owner prefix). (string) |
39
+ | `--author` | No | [list_commits] Filter by commit author — a GitHub login or an email address. Omit to list all authors' commits. (string) |
40
+ | `--since` | No | [list_commits] Only commits after this ISO 8601 timestamp (e.g. '2026-06-27T00:00:00Z'). \| [list_comments] Only return comments updated at or after this ISO-8601 timestamp (e.g. '2025-01-01T00:00:00Z'). Useful for incremental polling. (string) |
41
+ | `--until` | No | [list_commits] Only commits before this ISO 8601 timestamp. (string) |
42
+ | `--path` | No | [list_commits] Only commits touching this file or directory path. (string) |
43
+ | `--sha` | No | [get_commit] The commit SHA (full or abbreviated) or a ref name. (string) |
44
+ | `--state` | No | [list_prs] Filter by PR state. Default: all. \| [search_issues] Filter by issue state. Will be added to the query. \| [update_issue] State of the issue. Use 'closed' to close the issue, 'open' to reopen it. (string, one of: open, closed, all) |
45
+ | `--username` | No | [user_activity] The GitHub login whose activity to fetch. (string) |
37
46
  | `--q` | No | [search_issues] Search query using GitHub search syntax. Examples: 'repo:owner/repo is:issue is:open', 'author:username', 'label:bug', 'state:closed' (string) |
38
- | `--repo` | No | [search_issues] Repository in 'owner/repo' format to search within. Will be added to the query. \| [create_issue] The name of the repository (without the owner prefix). \| [update_issue] The name of the repository (without the owner prefix). (string) |
39
- | `--state` | No | [search_issues] Filter by issue state. Will be added to the query. \| [update_issue] State of the issue. Use 'closed' to close the issue, 'open' to reopen it. (string, one of: open, closed, all) |
40
47
  | `--labels` | No | [search_issues] Comma-separated list of labels to filter by. \| [create_issue] Labels to associate with this issue (e.g., ['bug', 'enhancement']). \| [update_issue] Labels to set on this issue (replaces existing labels). (string) |
41
48
  | `--assignee` | No | [search_issues] Filter by assignee username. (string) |
42
49
  | `--order` | No | [search_issues] Sort order. Default: desc. (string, one of: asc, desc) |
43
- | `--owner` | No | [create_issue] The account owner of the repository (username or organization name). \| [update_issue] The account owner of the repository (username or organization name). (string) |
50
+ | `--issue_number` | No | [get_issue] The number of the issue to read (required). \| [update_issue] The number of the issue to update (required). \| [list_comments] The number of the issue (required). \| [create_comment] The number of the issue to comment on (required). (integer) |
44
51
  | `--title` | No | [create_issue] The title of the issue (required). \| [update_issue] New title of the issue. (string) |
45
- | `--body` | No | [create_issue] The contents/description of the issue. Supports Markdown. \| [update_issue] New contents/description of the issue. Supports Markdown. (string) |
52
+ | `--body` | No | [create_issue] The contents/description of the issue. Supports Markdown. \| [update_issue] New contents/description of the issue. Supports Markdown. \| [create_comment] The contents of the comment. Supports Markdown. \| [update_comment] New contents of the comment. Supports Markdown. (string) |
46
53
  | `--assignees` | No | [create_issue] Logins/usernames of users to assign to this issue. \| [update_issue] Logins/usernames to assign to this issue (replaces existing assignees). (array) |
47
54
  | `--milestone` | No | [create_issue] The milestone number to associate with this issue. \| [update_issue] The milestone number to associate with this issue. Set to null to remove milestone. (integer) |
48
- | `--issue_number` | No | [update_issue] The number of the issue to update (required). (integer) |
55
+ | `--comment_id` | No | [update_comment] The id of the comment to update (NOT the issue number — that's a different identifier). Get this from github_create_comment's response or github_list_comments. (integer) |
49
56
 
50
57
  ## See Also
51
58
 
@@ -0,0 +1,36 @@
1
+ ---
2
+ name: gsk-task-status
3
+ version: 1.0.0
4
+ description: 'Look up an existing task project previously created with create_task:
5
+ returns its status, page URL (task_url), and extracted result artifacts. Use this
6
+ — never a new create_task call — when you need the link or outcome of a task you
7
+ already created.'
8
+ metadata:
9
+ category: general
10
+ requires:
11
+ bins:
12
+ - gsk
13
+ cliHelp: gsk task_status --help
14
+ ---
15
+
16
+ # gsk-task-status
17
+
18
+ **PREREQUISITE:** Read `../gsk-shared/SKILL.md` for auth, global flags, and security rules.
19
+
20
+ Look up an existing task project previously created with create_task: returns its status, page URL (task_url), and extracted result artifacts. Use this — never a new create_task call — when you need the link or outcome of a task you already created.
21
+
22
+ ## Usage
23
+
24
+ ```bash
25
+ gsk task_status [options]
26
+ ```
27
+
28
+ ## Flags
29
+
30
+ | Flag | Required | Description |
31
+ |------|----------|-------------|
32
+ | `<project_id>` (positional) | Yes | The project_id returned by create_task (data.project_id in its response). (string) |
33
+
34
+ ## See Also
35
+
36
+ - [gsk-shared](../gsk-shared/SKILL.md) — Authentication and global flags