@kolbo/kolbo-code-linux-arm64-musl 2.4.0 → 2.4.2

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/bin/kolbo CHANGED
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kolbo/kolbo-code-linux-arm64-musl",
3
- "version": "2.4.0",
3
+ "version": "2.4.2",
4
4
  "os": [
5
5
  "linux"
6
6
  ],
@@ -1,5 +1,5 @@
1
1
  ---
2
- version: 0.5.0
2
+ version: 0.7.1
3
3
  name: kolbo
4
4
  description: |
5
5
  Generate, edit, or analyze creative media via the Kolbo AI MCP server:
@@ -7,13 +7,15 @@ description: |
7
7
  music (Suno), TTS (ElevenLabs), 3D, transcription, Visual DNA (character
8
8
  consistency), Marketing Studio (UGC + DTC ads + product photoshoot +
9
9
  marketplace cards), Creative Director (multi-scene batches), HTML artifact
10
- publishing (presentations, landing pages, dashboards), and the App Builder.
10
+ publishing (presentations, landing pages, dashboards), AI Docs (project
11
+ documents you author and share), and the App Builder.
11
12
 
12
13
  Use when the user wants to generate, create, make, edit, animate, or
13
14
  transcribe media: images, video, music, voice/TTS, sound effects, 3D models,
14
15
  UGC or TV-spot ads, product / lifestyle / hero shots, Amazon or marketplace
15
16
  listings, presentations, landing pages, dashboards, or 'build me an app';
16
- or to reuse a character or brand (Visual DNA, brand kits).
17
+ to reuse a character or brand (Visual DNA, brand kits); or to save a written
18
+ plan / brief / script / research doc into their Kolbo project (AI Docs).
17
19
 
18
20
  NOT for: video editing / FFmpeg (use video-production), motion graphics
19
21
  (use remotion-best-practices), code editing, or general chat.
@@ -35,7 +37,7 @@ Once per conversation, before any other Kolbo tool call:
35
37
 
36
38
  1. **Run `check_credits`.** If it fails with "Session expired" / "Not authenticated", ask the user to run `kolbo auth login` (or their branded CLI command like `sapir auth login`) and reload the editor.
37
39
  2. **If `list_models` returns empty**, MCP isn't wired — same fix.
38
- 3. Remember the credit balance for the session; don't re-check on every turn.
40
+ 3. Use the balance ONLY for the low-balance check at this moment. **Never quote a "credits remaining" number later in the session** — coding/chat usage also deducts credits, so any remembered or computed balance is stale. Report only what each generation cost (`credits_used`); if the user asks what's left, run `check_credits` fresh right then.
39
41
 
40
42
  If the user is on a whitelabel build (`sapir`, etc.), they must use their branded command — not `kolbo`. See `references/workflows/troubleshooting.md`.
41
43
 
@@ -111,8 +113,16 @@ Each `references/models/*.md` mirrors the matching skill prompt in `kolbo-api/sr
111
113
  |------|---------|
112
114
  | `list_models` / `list_voices` / `check_credits` / `get_generation_status` / `get_session_usage` | Discovery + status |
113
115
  | `upload_media` / `list_media` / `get_media` / `get_media_stats` / `favorite_media` / `unfavorite_media` / `delete_media` / `restore_media` / `permanently_delete_media` / `move_media` / `bulk_*_media` / `*_media_folder` | Media library — see `workflows/media-library.md` |
114
- | `create_visual_dna` / `list_visual_dnas` / `get_visual_dna` / `delete_visual_dna` | Visual DNA — see `workflows/visual-dna.md` |
116
+ | `create_visual_dna` / `generate_character_sheet` / `list_visual_dnas` / `get_visual_dna` / `delete_visual_dna` / `*_visual_dna_folder` (5 folder tools) | Visual DNA (+ character sheet, character folders) — see `workflows/visual-dna.md` |
115
117
  | `list_moodboards` / `get_moodboard` / `list_presets` | Style overlays |
118
+ | `search_stock_media` / `get_stock_sources` / `get_stock_categories` / `get_stock_collections` / `get_stock_asset` / `analyze_script_for_stock` / `import_stock_asset` | Stock library (free, no credits) — EXISTING photos / videos / 3D / SFX / music. For stock **music** use `search_stock_media` with `mediaType: "music"` (semantic vibe query, e.g. "uplifting corporate background") → `get_stock_asset` for downloads. The older `*_music_library` tools are deprecated adapters over this — prefer the stock tools. |
119
+ | `list_projects` / `move_session` | Projects: resolve a project NAME → the `project_id` you pass on generation/upload/doc calls; `move_session` relocates a whole session + its media when work landed in the wrong project. NOT the same as `app_builder_list_projects`. See "Projects — Where Work Lands" below. |
120
+ | `create_project` / `update_project` / `archive_project` / `unarchive_project` / `list_sessions` | Project lifecycle + session inventory (deletion stays in-app). Create a project when the user starts new work, then pass its id on EVERY call. |
121
+ | `add_project_context` / `list_project_context` / `delete_project_context` / `get_project_profile` / `regenerate_project_profile` | Project knowledge base (RAG): feed scripts/URLs/notes; `get_project_profile` = the living brief — read it to ground work in the project |
122
+ | `create_moodboard` / `update_moodboard` / `delete_moodboard` | Moodboards from image URLs → AI master style prompt → pass `moodboard_id` to generation tools |
123
+ | `clone_voice` / `import_elevenlabs_voice` / `delete_voice` | Custom voices (clone CHARGES CREDITS — confirm first; new voices show in `list_voices`) |
124
+ | `trim_video` | Frame-accurate trim of a Kolbo-hosted video (tool waits and returns the URL). `edit_video` also gained `remove_background`. |
125
+ | `create_doc` / `list_docs` / `get_doc` / `update_doc` / `share_doc` / `delete_doc` | AI Docs (Magic Pad): YOU author full HTML documents (plans, briefs, scripts, research) saved into the user's project, editable in the Kolbo app. `share_doc` returns a public link. `update_doc` content replaces the WHOLE doc — `get_doc` first. |
116
126
  | `chat_send_message` / `chat_list_conversations` / `chat_get_messages` | Kolbo chat with optional `media_urls` (up to 10 per call) |
117
127
  | `app_builder_*` (9 tools) | Full React app generation — see `workflows/app-builder.md` |
118
128
  | `publish_html_artifact` | Publish HTML / SVG / Mermaid to `sites.kolbo.ai`. Server dedupes by content hash. Strict CSP. |
@@ -149,15 +159,25 @@ A user-named tool — in any language — overrides every other rule. Recognized
149
159
  1. **Check credits** ONCE per conversation (Step 0). Skip if already checked.
150
160
  2. **Discover models** with `list_models` using a `type` filter — but **skip when the user names a specific model**.
151
161
  3. **Pick the model**:
152
- - User named one → use it.
162
+ - User named one → use it. Model identifiers resolve leniently — shorthand like `"z-image"` or `"nano banana 2"` auto-resolves to the exact identifier, so don't over-engineer exact-id lookups (`list_models` is still authoritative for constraints, caps, and pricing).
153
163
  - Auto-select → only from "Auto-selectable" section (models with a `summary`). Cheapest fit. Prefer `[RECOMMENDED]` when cost is similar.
154
164
  - Never auto-select from "Named-only" section.
155
165
  4. **Validate inputs** against model caps — see `references/workflows/cost-and-validation.md`.
156
- 5. **How calls work**: each tool blocks until generation is fully complete. Images: seconds. Video: minutes. Multiple tool calls in one response run concurrently. If a call times out, use `get_generation_status` with the returned generation ID.
157
- 6. **Share the URL** after success. Never fabricate URLs.
166
+ 5. **How calls work**: each tool blocks until generation is fully complete. Images: seconds. Video: minutes. Multiple tool calls in one response run concurrently. On hosts with live widgets the tool instead returns `submitted` instantly — the card updates on its own; you only need `get_generation_status` when a follow-up step needs the output URLs.
167
+ 6. **Checking status NEVER poll in a loop**: `get_generation_status` takes `wait=true` (blocks server-side until done, ~3 min) and `generation_ids` (check MANY generations in ONE call — returns `all_done` + which are still running). One `wait=true` call replaces any polling loop. If it comes back with some still processing, call it ONCE more with `wait=true` and the remaining ids.
168
+ 7. **Share the URL** after success. Never fabricate URLs.
158
169
 
159
170
  Model types for `list_models`: `text_to_img`, `image_editing`, `text_to_video`, `img_to_video`, `draw_to_video`, `video_to_video`, `elements`, `firstlastgenerations`, `lipsync-image`, `lipsync-video`, `music_gen`, `text_to_speech`, `text_to_sound`, `stt`, `text`, `3d_text_to_model`, `3d_image_to_model`, `3d_multi_image_to_model`, `3d_world`.
160
171
 
172
+ ## 📁 Projects — Where Work Lands (CRITICAL)
173
+
174
+ Everything in Kolbo — sessions, generations, media, docs — lives inside a PROJECT. Getting this wrong is the #1 user complaint ("my work went to the wrong project").
175
+
176
+ 1. **User names a project** ("in my Acme project", "for the film") → call `list_projects` ONCE to resolve the name to an ObjectId, then pass that id as `project_id` on **EVERY** subsequent `generate_*` / `upload_media` / `create_doc` / `chat_send_message` call in the conversation. It is **per-call, NOT sticky** — any call that omits it silently lands in the default "API Generations" bucket (`is_default: true`).
177
+ 2. **No project mentioned** → omit `project_id`; the default bucket is correct. Don't ask unless intent is ambiguous.
178
+ 3. **`list_projects` ≠ `app_builder_list_projects`** — the latter scopes App Builder coding sessions only.
179
+ 4. **Work landed in the wrong project? MOVE it, never regenerate**: `move_session` relocates a whole session + all its media (works for any session type — the `session_id` from generation responses, chats, transcriptions); `move_media` / `bulk_move_media` / `move_folder_contents` relocate individual media items.
180
+
161
181
  ## Cost Awareness — Quick Rules
162
182
 
163
183
  Full tables + formulas in `references/workflows/cost-and-validation.md`. Quick rules:
@@ -166,11 +186,13 @@ Full tables + formulas in `references/workflows/cost-and-validation.md`. Quick r
166
186
  - **Otherwise confirm** via the labeled-question card: the parameters + the credit cost, suggest a cheaper alternative if one fits, wait for the user's pick. Never fire on defaults the user didn't choose.
167
187
  - **Batch totalling 100+ credits**: run `check_credits` first.
168
188
  - **Quote real cost**: after firing, log `credits_used` (from the tool result) to `.kolbo/production.md` — never `base × count`.
189
+ - **Never state "credits remaining" from arithmetic** (opening balance − generation costs). Coding/chat usage deducts credits too, so the math is always wrong. Report cost only; if the user asks for their balance, call `check_credits` fresh at that moment.
169
190
 
170
191
  ## Rate Limiting & Batch Generation
171
192
 
172
193
  - `generate_image`: 30/min. All other generation tools: 10/min per type. 300/min global. `upload_media`: 300/min, no credit cost.
173
- - **⚠️ NEVER re-fire a generation you already called.** Aborted / timed-out calls still process server-side. Run `get_generation_status` before retrying.
194
+ - **⚠️ NEVER re-fire a generation you already called.** Aborted / timed-out calls still process server-side. Run `get_generation_status` (with `wait=true`) before retrying.
195
+ - **Tracking a batch**: check ALL in-flight ids in ONE `get_generation_status` call with `generation_ids` + `wait=true`. Read `all_done` / `still_processing` from the response — do not check ids one by one, and never re-call without `wait`.
174
196
  - **Batch ≤10 items**: output ALL tool calls in one response — they run concurrently.
175
197
  - **Bulk >10 items**: real-world ceilings — `generate_image` 8–10 in-flight, image-edit 5–8, video tools 3–5, `generate_video_from_video` 3, music/speech/sound 5–8. Fire one batch → wait → fire next. Persist every `generation_id` in `.kolbo/production.md`.
176
198
  - **`upload_media` external URLs first.** `files`/`source_images`/`image_url` only accept Kolbo-hosted URLs reliably; external URLs cause `400`.
@@ -203,6 +225,8 @@ Existing video → modify → **single `generate_video_from_video` call** with s
203
225
 
204
226
  **Use a TRUE video-to-video model.** Image-to-video models reject with `WRONG_MODEL_TYPE`. Valid: `wan/2-7-videoedit`, `happyhorse/video-edit`, `kling-video/o3-video-to-video`, or any model whose DB `type` includes `video_to_video` (use `list_models({ type: "video_to_video" })`).
205
227
 
228
+ **Motion-control / animate-move models invert the inputs**: `reference_images[0]` = the CHARACTER IMAGE to animate, `source_video` = the driving/reference video whose motion is transferred. Omitting the character image returns a `MOTION_CONTROL_INPUTS` error.
229
+
206
230
  **Do NOT** decompose into frames. **Do NOT** re-fire if the first call returned URLs.
207
231
 
208
232
  ## ⚠️ Character-Driven Video — Frames First, Then Animate (CRITICAL)
@@ -221,7 +245,7 @@ A generation can fail three ways. Treat ALL as failure:
221
245
 
222
246
  1. **Tool returns `error`** — explicit. Surface, suggest retry, log `generation_id`.
223
247
  2. **Tool returns `completed` but `urls` is empty** — silent failure (NSFW filter, model OOM, upstream 5xx). Tell user "completed without an output — retrying" and re-fire ONCE. Do NOT log to `.kolbo/production.md`. Do NOT claim it worked.
224
- 3. **Tool hangs / never returns** — MCP poll timed out. Call `get_generation_status(generation_id)` IMMEDIATELY. The server might be done.
248
+ 3. **Tool hangs / never returns** — MCP poll timed out. Call `get_generation_status(generation_id, wait=true)` IMMEDIATELY. The server might be done.
225
249
 
226
250
  **Always:**
227
251
  - Don't celebrate before reading the result. Verify `urls` is non-empty.
@@ -1 +1 @@
1
- 0.5.0
1
+ 0.7.1
@@ -8,9 +8,12 @@ Load this file when the user wants AI-generated **music** — full songs, lyrics
8
8
 
9
9
  **Kolbo MCP routing:** call `generate_music`. Suno is a model option — use `list_models({ type: "music_gen" })` to see versions. Pass `instrumental` and `duration` as separate params; pass the Style/Description text as `style` and the Lyrics as `lyrics`.
10
10
 
11
+ **Wants an EXISTING track, not a new song?** ("background music", "stock music", "royalty-free track") → don't generate. Use `search_stock_media` with `mediaType: "music"` (semantic vibe query — "tense cinematic pulse", "uplifting corporate background") → `get_stock_asset` for download URLs. Free, no credits. The older `*_music_library` tools are deprecated adapters over the stock library — prefer the stock tools.
12
+
11
13
  ## CRITICAL Kolbo Platform Rules
12
14
 
13
15
  - **Model version, duration, and instrumental toggle are MCP-tool params.** Don't write `v4.5`, `30 seconds`, or `instrumental: true` inside the prompt fields themselves.
16
+ - **Exact track length = `duration_seconds`** (clamped 5–300s). Only length-controllable models honor it (e.g. ElevenLabs Music, `music-v1`) — without it those models default to a ~10s track, so ALWAYS pass it for jingles/beds on those models. Suno ignores it and picks its own length.
14
17
  - Suno generations have **two separate input fields**: a **Style / Description** field (`style` param) and a **Lyrics** field (`lyrics` param). Output your prompt as **TWO separate fenced code blocks** so the user (and the tool call) know exactly what goes where.
15
18
  - Tell the user to run the prompt multiple times — Suno output varies significantly between generations, that's a feature. Use `num_generations` if the tool supports it, or fire 2–4 parallel `generate_music` calls.
16
19
 
@@ -85,7 +88,7 @@ Use Suno's section tags to control structure. Each tag goes on its own line, con
85
88
  ### Jingle / ad music (15–30s)
86
89
  - `style`: short, punchy descriptor (`upbeat retail pop jingle, female vocal, claps, glossy production, summer energy`)
87
90
  - `lyrics`: 2–4 short lines max, often just chorus
88
- - Pass the shortest `duration` the tool supports.
91
+ - Pass the shortest `duration` the tool supports — or, on a length-controllable model (ElevenLabs Music), pass the exact `duration_seconds` (e.g. `15` or `30`).
89
92
 
90
93
  ### Cinematic trailer / score
91
94
  - `style`: `cinematic orchestral trailer, swelling strings, taiko drums, hybrid choir, dramatic build, modern hybrid score`
@@ -48,6 +48,8 @@ Apply when confirming cost before firing:
48
48
 
49
49
  **Batch totalling 100+ credits:** run `check_credits` first and include the available balance in the summary.
50
50
 
51
+ **After generating, report cost only — never "credits remaining".** Coding/chat usage also deducts credits, so any balance you compute (opening balance − generation costs) is wrong by the time you say it. Quote `credits_used` per generation / batch total; if the user asks what's left, run `check_credits` fresh at that moment and quote that number.
52
+
51
53
  ## ⚠️ Quote Real Cost, Never Estimates (CRITICAL)
52
54
 
53
55
  Pre-flight formulas above are for **preview only**. After firing, every generation returns `credits_used` (multiplier-adjusted total) and `credits_breakdown` (per-model attribution).
@@ -49,6 +49,7 @@ When you produce a media file LOCALLY — `ffmpeg` via the `video-production` sk
49
49
  | "Restore it" / "undelete" / "bring it back from trash" | `restore_media` |
50
50
  | "Permanently delete" / "wipe it forever" / "free up space" | **confirm with user** → `permanently_delete_media` |
51
51
  | "Move this to project X" | `move_media` |
52
+ | "Move this whole session/chat to project X" / "this landed in the wrong project" | `move_session` (moves the session + ALL its media in one call — prefer over per-item `move_media`) |
52
53
  | "Clean up old [type]" / "delete everything from [time period]" | `list_media` (find ids) → **confirm** → `bulk_delete_media` |
53
54
  | "Restore all from trash" | `list_media include_deleted=true` → `bulk_restore_media` |
54
55
  | "Empty my trash" / "purge deleted items" | `list_media include_deleted=true` → **show count, confirm** → `bulk_permanently_delete_media` |
@@ -68,9 +69,10 @@ When you produce a media file LOCALLY — `ffmpeg` via the `video-production` sk
68
69
  1. **"Delete" is soft by default.** Use `delete_media` / `bulk_delete_media` for normal "delete" intent — items go to trash for 30 days and are recoverable. Only use `permanently_delete_media` / `bulk_permanently_delete_media` when the user explicitly asks for unrecoverable deletion ("permanently", "forever", "wipe", "free up space"). **Always confirm before either permanent variant.**
69
70
  2. **Confirm before destructive folder ops.** `delete_media_folder` detaches items (they stay in the library) but the folder itself is gone — no undo. Confirm with the user.
70
71
  3. **`bulk_move_media` is atomic.** If you get a "not all items owned by you" error, do NOT retry partially. Surface the error to the user and let them pick a smaller batch.
71
- 4. **Prefer `list_media` filters over post-filtering.** Pass `project_id` / `folder_id` / `category` / `type` / `search` to the backend; don't fetch the whole library and filter client-side.
72
- 5. **`is_favorited` is per-user.** On shared projects, an item can be favorited by you and not by your teammates the value reflects the calling user only.
73
- 6. **"Empty trash" flow:** `list_media` with `include_deleted=true` show the count confirm `bulk_permanently_delete_media`. Never call the bulk-permanent endpoint without listing first so the user knows the scope.
74
- 7. **Bulk caps:** 1000 ids for `bulk_delete_media` / `bulk_restore_media` / `bulk_permanently_delete_media` / `bulk_move_media`; 500 ids for `add_media_to_folder` / `remove_media_from_folder`. Split larger jobs into successive calls.
75
- 8. **Folder share resolution:** `share_media_folder` takes emails; users not found come back in `not_found`. Report those to the user — don't assume the share succeeded silently. Members can list/add/remove items but cannot delete the folder or reshare it.
76
- 9. **`get_media` accepts a generation_id as a fallback** for the `media_id` arg, so you can chase down items the user references by their original generation rather than by library id.
72
+ 4. **`upload_media` accepts `project_id`** when the user works in a named project, pass it on uploads too (resolve via `list_projects`), or the file lands outside the project.
73
+ 5. **Prefer `list_media` filters over post-filtering.** Pass `project_id` / `folder_id` / `category` / `type` / `search` to the backend; don't fetch the whole library and filter client-side.
74
+ 6. **`is_favorited` is per-user.** On shared projects, an item can be favorited by you and not by your teammates the value reflects the calling user only.
75
+ 7. **"Empty trash" flow:** `list_media` with `include_deleted=true` show the count → confirm → `bulk_permanently_delete_media`. Never call the bulk-permanent endpoint without listing first so the user knows the scope.
76
+ 8. **Bulk caps:** 1000 ids for `bulk_delete_media` / `bulk_restore_media` / `bulk_permanently_delete_media` / `bulk_move_media`; 500 ids for `add_media_to_folder` / `remove_media_from_folder`. Split larger jobs into successive calls.
77
+ 9. **Folder share resolution:** `share_media_folder` takes emails; users not found come back in `not_found`. Report those to the user don't assume the share succeeded silently. Members can list/add/remove items but cannot delete the folder or reshare it.
78
+ 10. **`get_media` accepts a generation_id as a fallback** for the `media_id` arg, so you can chase down items the user references by their original generation rather than by library id.
@@ -30,6 +30,10 @@ This re-wires the MCP configuration automatically. Then restart the session.
30
30
 
31
31
  Wait 60s for the window to reset, retry only the failed calls. For batch image work prefer `generate_creative_director` over multiple `generate_image` calls. Full rate-limit details + retry sequence: see SKILL.md "Rate Limiting & Batch Generation".
32
32
 
33
+ ## Checking generation status without spinning
34
+
35
+ `get_generation_status` supports `wait=true` (blocks server-side until the generation reaches a final state, up to ~3 min) and `generation_ids` (many ids in one call → returns `all_done`, `still_processing`, and per-generation results). **Never call it repeatedly in a loop** — one `wait=true` call replaces the loop. If some generations are still running after the wait window, call it ONCE more with `wait=true` and only the `still_processing` ids.
36
+
33
37
  ## Failure envelope from `get_generation_status`
34
38
 
35
39
  When a generation fails, `get_generation_status` returns a structured `failure` field alongside `error`:
@@ -231,3 +231,21 @@ Read `max_visual_dna` from `list_models` for the exact cap, AND `supports_visual
231
231
 
232
232
  - **Animating an image** → `generate_video_from_image`; the source image IS the reference, don't add `visual_dna_ids`.
233
233
  - **Video DNA support is limited to `generate_elements`** (Seedance 2, Kling O3 Reference, Grok Imagine). `generate_video`, `generate_video_from_image`, and `generate_first_last_frame` all ignore `visual_dna_ids` — for character-consistent video, route through `generate_elements`.
234
+
235
+
236
+ ## Folders — organizing a large cast
237
+
238
+ Tools: `list_visual_dna_folders`, `create_visual_dna_folder` (`name`, optional hex `color`), `update_visual_dna_folder`, `delete_visual_dna_folder`, `move_visual_dna_to_folder`.
239
+
240
+ - Folders are user-scoped and flat; names are unique per user (409 on duplicate).
241
+ - **Personal DNAs only** — global presets must be imported first; organization DNAs cannot go in personal folders (server rejects with a clear message).
242
+ - **Deleting a folder never deletes DNAs** — contents move back to root (`items_moved_to_root` in the response). Mention this instead of asking for confirmation on non-empty folders.
243
+ - **Creating many characters for one production?** Create the folder FIRST, then `move_visual_dna_to_folder` each DNA right after `create_visual_dna` — don't leave a big cast unsorted at root.
244
+ - To list a folder's contents: `list_visual_dnas` and filter by each profile's `folder_id` (there is no server-side folder filter).
245
+
246
+ ## Character sheet — offer it for character DNAs
247
+
248
+ `generate_character_sheet` builds a multi-angle turnaround from reference image URLs — the strongest consistency booster for a character DNA. It CHARGES CREDITS, so:
249
+ - When the user is about to create a **character** DNA, proactively OFFER it: "want me to generate a character sheet first? It makes the character far more consistent and costs a few credits." Run it only on a yes.
250
+ - Flow: `generate_character_sheet {image_urls}` → show the sheet → `create_visual_dna {name, images, character_sheet_url: <url>}`.
251
+ - For non-character DNAs (style/product/environment), skip it.